ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGMxNTJlOTIuLjI0YTM3YjYgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMSArMSwyNCBAQAotLi90b21jYXQvKgorIyBUYWtlbiBmcm9tIGh0dHA6Ly9nYXJ5LXJvd2UuY29tL2FnaWxlc3RhY2svMjAxMi8xMC8xMi9hLWdpdGlnbm9yZS1maWxlLWZvci1pbnRlbGxpai1hbmQtZWNsaXBzZS13aXRoLW1hdmVuLworIworIyBFY2xpcHNlCisuY2xhc3NwYXRoCisucHJvamVjdAorLnNldHRpbmdzLworCisjIEludGVsbGlqCisuaWRlYS8KKyouaW1sCisqLml3cworCisjIE1hYworLkRTX1N0b3JlCisKKyMgTWF2ZW4KK2xvZy8KK3RhcmdldC8KKwordmVsb2NpdHkubG9nCisKK3RvbWNhdC1iYXNlCitkZXBsb3ltZW50L2RvY2tlci1jb21wb3NlL3Bvc3RncmVzcWwtZGF0YQorZGVwbG95bWVudC9kb2NrZXItY29tcG9zZS9yb2xsZXItZGF0YQpkaWZmIC0tZ2l0IGEvYXBwL3BvbS54bWwgYi9hcHAvcG9tLnhtbAppbmRleCBiZGZmMTBiLi5kNmZhZDdkIDEwMDY0NAotLS0gYS9hcHAvcG9tLnhtbAorKysgYi9hcHAvcG9tLnhtbApAQCAtNDksNyArNDksMTEgQEAKICAgICAgICAgPGVjbGlwc2UtbGluay52ZXJzaW9uPjIuNy4zPC9lY2xpcHNlLWxpbmsudmVyc2lvbj4KICAgICAgICAgPGd1aWNlLnZlcnNpb24+NC4yLjE8L2d1aWNlLnZlcnNpb24+CiAgICAgICAgIDxsb2c0ai52ZXJzaW9uPjEuMi4xNzwvbG9nNGoudmVyc2lvbj4KKzw8PDw8PDwgSEVBRAogICAgICAgICA8bG9nNGoyLnZlcnNpb24+Mi45LjE8L2xvZzRqMi52ZXJzaW9uPgorPT09PT09PQorICAgICAgICA8bG9nNGoyLnZlcnNpb24+Mi4xMC4wPC9sb2c0ajIudmVyc2lvbj4KKz4+Pj4+Pj4gbWFzdGVyCiAgICAgICAgIDxsdWNlbmUudmVyc2lvbj40LjEwLjQ8L2x1Y2VuZS52ZXJzaW9uPgogICAgICAgICA8b2F1dGgtY29yZS52ZXJzaW9uPjIwMTAwNTI3PC9vYXV0aC1jb3JlLnZlcnNpb24+CiAgICAgICAgIDxtYXZlbi13YXIudmVyc2lvbj4zLjEuMDwvbWF2ZW4td2FyLnZlcnNpb24+CkBAIC05NywxMiArMTAxLDYgQEAKICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1haWw8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4ke2phdmEtbWFpbC52ZXJzaW9ufTwvdmVyc2lvbj4KICAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+Ci0gICAgICAgICAgICA8ZXhjbHVzaW9ucz4KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC5hY3RpdmF0aW9uPC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmF0aW9uPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgotICAgICAgICAgICAgPC9leGNsdXNpb25zPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAKICAgICAgICAgPGRlcGVuZGVuY3k+CkBAIC0xODQsNiArMTgyLDE4IEBACiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnZlbG9jaXR5PC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+dmVsb2NpdHk8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4ke3ZlbG9jaXR5LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgPGV4Y2x1c2lvbnM+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1jb2xsZWN0aW9uczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1jb2xsZWN0aW9uczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1jb2xsZWN0aW9uczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtY29sbGVjdGlvbnM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4zLjIuMjwvdmVyc2lvbj4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogCiAgICAgICAgIDxkZXBlbmRlbmN5PgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1dlYmxvZ2dlckltcGwuamF2YSBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9XZWJsb2dnZXJJbXBsLmphdmEKaW5kZXggZTdlN2UxNC4uYmU2YmUxYSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1dlYmxvZ2dlckltcGwuamF2YQorKysgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvV2VibG9nZ2VySW1wbC5qYXZhCkBAIC0zMSw2ICszMSwxNSBAQAogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5zZWFyY2guSW5kZXhNYW5hZ2VyOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy50aGVtZXMuVGhlbWVNYW5hZ2VyOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5jb25maWcuUGluZ0NvbmZpZzsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuY29uZmlnLldlYmxvZ2dlckNvbmZpZzsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuY29uZmlnLldlYmxvZ2dlclJ1bnRpbWVDb25maWc7CitpbXBvcnQgb3JnLmFwYWNoZS54bWxycGMudXRpbC5TQVhQYXJzZXJzOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuYWNjZXNzLm1ldGhvZC5QOworaW1wb3J0IG9yZy54bWwuc2F4LlNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb247CitpbXBvcnQgb3JnLnhtbC5zYXguU0FYTm90U3VwcG9ydGVkRXhjZXB0aW9uOworCitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXJGYWN0b3J5OwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKQEAgLTEzNSw3ICsxNDQsNyBAQAogICAgIC8qKgogICAgICAqIAogICAgICAqIAotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLm1vZGVsV2VibG9nZ2VyciNnZXRUaHJlYWRNYW5hZ2VyKCkKKyAgICAgKiBAc2VlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5XZWJsb2dnZXIjZ2V0VGhyZWFkTWFuYWdlcigpCiAgICAgICovCiAgICAgcHVibGljIFRocmVhZE1hbmFnZXIgZ2V0VGhyZWFkTWFuYWdlcigpIHsKICAgICAgICAgcmV0dXJuIHRocmVhZE1hbmFnZXI7CkBAIC0xNDUsNyArMTU0LDcgQEAKICAgICAvKioKICAgICAgKiAKICAgICAgKiAKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5tb2RlbC5XZWJsb2dnZXIjZ2V0SW5kZXhNYW5hZ2VyKCkKKyAgICAgKiBAc2VlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5XZWJsb2dnZXIjZ2V0SW5kZXhNYW5hZ2VyKCkKICAgICAgKi8KICAgICBwdWJsaWMgSW5kZXhNYW5hZ2VyIGdldEluZGV4TWFuYWdlcigpIHsKICAgICAgICAgcmV0dXJuIGluZGV4TWFuYWdlcjsKQEAgLTE1NSw3ICsxNjQsNyBAQAogICAgIC8qKgogICAgICAqIAogICAgICAqIAotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLm1vZGVsV2VibG9nZ2VyciNnZXRUaGVtZU1hbmFnZXIoKQorICAgICAqIEBzZWUgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLldlYmxvZ2dlciNnZXRUaGVtZU1hbmFnZXIoKQogICAgICAqLwogICAgIHB1YmxpYyBUaGVtZU1hbmFnZXIgZ2V0VGhlbWVNYW5hZ2VyKCkgewogICAgICAgICByZXR1cm4gdGhlbWVNYW5hZ2VyOwpAQCAtMTY1LDcgKzE3NCw3IEBACiAgICAgLyoqCiAgICAgICogCiAgICAgICogCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIubW9kZWxXZWJsb2dnZXJyI2dldFVzZXJNYW5hZ2VyKCkKKyAgICAgKiBAc2VlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5XZWJsb2dnZXIjZ2V0VXNlck1hbmFnZXIoKQogICAgICAqLwogICAgIHB1YmxpYyBVc2VyTWFuYWdlciBnZXRVc2VyTWFuYWdlcigpIHsKICAgICAgICAgcmV0dXJuIHVzZXJNYW5hZ2VyOwpAQCAtMTc1LDcgKzE4NCw3IEBACiAgICAgLyoqCiAgICAgICogCiAgICAgICogCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIubW9kZWxXZWJsb2dnZXJyI2dldEJvb2ttYXJrTWFuYWdlcigpCisgICAgICogQHNlZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nZ2VyI2dldEJvb2ttYXJrTWFuYWdlcigpCiAgICAgICovCiAgICAgcHVibGljIEJvb2ttYXJrTWFuYWdlciBnZXRCb29rbWFya01hbmFnZXIoKSB7CiAgICAgICAgIHJldHVybiBib29rbWFya01hbmFnZXI7CkBAIC0xODUsNyArMTk0LDcgQEAKICAgICAvKioKICAgICAgKiAKICAgICAgKiAKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5tb2RlbFdlYmxvZ2dlcnIjZ2V0TWVkaWFGaWxlTWFuYWdlcigpCisgICAgICogQHNlZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nZ2VyI2dldE1lZGlhRmlsZU1hbmFnZXIoKQogICAgICAqLwogICAgIHB1YmxpYyBNZWRpYUZpbGVNYW5hZ2VyIGdldE1lZGlhRmlsZU1hbmFnZXIoKSB7CiAgICAgICAgIHJldHVybiBtZWRpYUZpbGVNYW5hZ2VyOwpAQCAtMTk0LDcgKzIwMyw3IEBACiAgICAgLyoqCiAgICAgICogCiAgICAgICogCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIubW9kZWxXZWJsb2dnZXJyI2dldEZpbGVDb250ZW50TWFuYWdlcigpCisgICAgICogQHNlZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nZ2VyI2dldEZpbGVDb250ZW50TWFuYWdlcigpCiAgICAgICovCiAgICAgcHVibGljIEZpbGVDb250ZW50TWFuYWdlciBnZXRGaWxlQ29udGVudE1hbmFnZXIoKSB7CiAgICAgICAgIHJldHVybiBmaWxlQ29udGVudE1hbmFnZXI7CkBAIC0yMDQsNyArMjEzLDcgQEAKICAgICAvKioKICAgICAgKiAKICAgICAgKiAKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5tb2RlbFdlYmxvZ2dlcnIjZ2V0V2VibG9nRW50cnlNYW5hZ2VyKCkKKyAgICAgKiBAc2VlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5XZWJsb2dnZXIjZ2V0V2VibG9nRW50cnlNYW5hZ2VyKCkKICAgICAgKi8KICAgICBwdWJsaWMgV2VibG9nRW50cnlNYW5hZ2VyIGdldFdlYmxvZ0VudHJ5TWFuYWdlcigpIHsKICAgICAgICAgcmV0dXJuIHdlYmxvZ0VudHJ5TWFuYWdlcjsKQEAgLTIxNCw3ICsyMjMsNyBAQAogICAgIC8qKgogICAgICAqIAogICAgICAqIAotICAgICAqIEBzZWUgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLm1vZGVsV2VibG9nZ2VyciNnZXRXZWJsb2dNYW5hZ2VyKCkKKyAgICAgKiBAc2VlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5XZWJsb2dnZXIjZ2V0V2VibG9nTWFuYWdlcigpCiAgICAgICovCiAgICAgcHVibGljIFdlYmxvZ01hbmFnZXIgZ2V0V2VibG9nTWFuYWdlcigpIHsKICAgICAgICAgcmV0dXJuIHdlYmxvZ01hbmFnZXI7CkBAIC0yMjQsNyArMjMzLDcgQEAKICAgICAvKioKICAgICAgKiAKICAgICAgKiAKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5tb2RlbFdlYmxvZ2dlcnIjZ2V0UHJvcGVydGllc01hbmFnZXIoKQorICAgICAqIEBzZWUgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLldlYmxvZ2dlciNnZXRQcm9wZXJ0aWVzTWFuYWdlcigpCiAgICAgICovCiAgICAgcHVibGljIFByb3BlcnRpZXNNYW5hZ2VyIGdldFByb3BlcnRpZXNNYW5hZ2VyKCkgewogICAgICAgICByZXR1cm4gcHJvcGVydGllc01hbmFnZXI7CkBAIC0yMzQsNyArMjQzLDcgQEAKICAgICAvKioKICAgICAgKiAKICAgICAgKiAKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5tb2RlbFdlYmxvZ2dlcnIjZ2V0UGluZ1RhcmdldE1hbmFnZXIoKQorICAgICAqIEBzZWUgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLldlYmxvZ2dlciNnZXRQaW5nVGFyZ2V0TWFuYWdlcigpCiAgICAgICovCiAgICAgcHVibGljIFBpbmdRdWV1ZU1hbmFnZXIgZ2V0UGluZ1F1ZXVlTWFuYWdlcigpIHsKICAgICAgICAgcmV0dXJuIHBpbmdRdWV1ZU1hbmFnZXI7CkBAIC0yNDQsNyArMjUzLDcgQEAKICAgICAvKioKICAgICAgKiAKICAgICAgKiAKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5tb2RlbFdlYmxvZ2dlcnIjZ2V0UGluZ1RhcmdldE1hbmFnZXIoKQorICAgICAqIEBzZWUgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLldlYmxvZ2dlciNnZXRQaW5nVGFyZ2V0TWFuYWdlcigpCiAgICAgICovCiAgICAgcHVibGljIEF1dG9QaW5nTWFuYWdlciBnZXRBdXRvcGluZ01hbmFnZXIoKSB7CiAgICAgICAgIHJldHVybiBhdXRvUGluZ01hbmFnZXI7CkBAIC0yNTQsNyArMjYzLDcgQEAKICAgICAvKioKICAgICAgKiAKICAgICAgKiAKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5tb2RlbFdlYmxvZ2dlcnIjZ2V0UGluZ1RhcmdldE1hbmFnZXIoKQorICAgICAqIEBzZWUgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLldlYmxvZ2dlciNnZXRQaW5nVGFyZ2V0TWFuYWdlcigpCiAgICAgICovCiAgICAgcHVibGljIFBpbmdUYXJnZXRNYW5hZ2VyIGdldFBpbmdUYXJnZXRNYW5hZ2VyKCkgewogICAgICAgICByZXR1cm4gcGluZ1RhcmdldE1hbmFnZXI7CkBAIC0yNjQsNyArMjczLDcgQEAKICAgICAvKioKICAgICAgKgogICAgICAqCi0gICAgICogQHNlZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIubW9kZWxXZWJsb2dnZXJyI2dldFBsdWdpbk1hbmFnZXIoKQorICAgICAqIEBzZWUgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLldlYmxvZ2dlciNnZXRQbHVnaW5NYW5hZ2VyKCkKICAgICAgKi8KICAgICBwdWJsaWMgUGx1Z2luTWFuYWdlciBnZXRQbHVnaW5NYW5hZ2VyKCkgewogICAgICAgICByZXR1cm4gcGx1Z2luTWFuYWdlcjsKQEAgLTI3NCw3ICsyODMsNyBAQAogICAgIC8qKgogICAgICAqCiAgICAgICoKLSAgICAgKiBAc2VlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5tb2RlbFdlYmxvZ2dlcnIjZ2V0T2F1dGhNYW5hZ2VyKCkKKyAgICAgKiBAc2VlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5XZWJsb2dnZXIjZ2V0T0F1dGhNYW5hZ2VyKCkKICAgICAgKi8KICAgICBwdWJsaWMgT0F1dGhNYW5hZ2VyIGdldE9BdXRoTWFuYWdlcigpIHsKICAgICAgICAgcmV0dXJuIG9hdXRoTWFuYWdlcjsKQEAgLTMzNSw3ICszNDQsMjEgQEAKICAgICAgICAgZ2V0VGhyZWFkTWFuYWdlcigpLmluaXRpYWxpemUoKTsKICAgICAgICAgZ2V0SW5kZXhNYW5hZ2VyKCkuaW5pdGlhbGl6ZSgpOwogICAgICAgICBnZXRNZWRpYUZpbGVNYW5hZ2VyKCkuaW5pdGlhbGl6ZSgpOwotICAgICAgICAKKworICAgICAgICAvLyBUdXJuIG9mZiBFeHRlcm5hbCBEVEQgc3VwcG9ydCBpbiBTQVhQYXJzZXIgdG8gcHJvdGVjdCBSb2xsZXIgZnJvbSB2dWxuZXJhYmlsaXR5LgorICAgICAgICBTQVhQYXJzZXJGYWN0b3J5IHNwZiA9IFNBWFBhcnNlcnMuZ2V0U0FYUGFyc2VyRmFjdG9yeSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgc3BmLnNldEZlYXR1cmUoImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy9kaXNhbGxvdy1kb2N0eXBlLWRlY2wiLCB0cnVlKTsKKyAgICAgICAgICAgIHNwZi5zZXRGZWF0dXJlKCJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvbm9udmFsaWRhdGluZy9sb2FkLWV4dGVybmFsLWR0ZCIsIGZhbHNlKTsKKyAgICAgICAgfSBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiB8IFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24gfCBTQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSAiVW5hYmxlIHRvIHR1cm4gb2ZmIEV4dGVybmFsIERURCBzdXBwb3J0IGluIFNBWFBhcnNlci4gWE1MLVJMQyBpcyB2dWxuZXJhYmxlIjsKKyAgICAgICAgICAgIGlmICggbG9nLmlzRGVidWdFbmFibGVkKCkgKSB7CisgICAgICAgICAgICAgICAgbG9nLmVycm9yKG1lc3NhZ2UsIGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb2cuZXJyb3IobWVzc2FnZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBwaW5nIHN5c3RlbXMKICAgICAgICAgICAgIC8vIFRPRE86IHRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIG1vdmluZyBpbnNpZGUgcGluZyBtYW5hZ2VyIGluaXRpYWxpemUoKSBtZXRob2RzPwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL2pwYS9KUEFXZWJsb2dFbnRyeU1hbmFnZXJJbXBsLmphdmEgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvanBhL0pQQVdlYmxvZ0VudHJ5TWFuYWdlckltcGwuamF2YQppbmRleCA1MDM1ZjkzLi43ZmU1MTdkIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvanBhL0pQQVdlYmxvZ0VudHJ5TWFuYWdlckltcGwuamF2YQorKysgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvanBhL0pQQVdlYmxvZ0VudHJ5TWFuYWdlckltcGwuamF2YQpAQCAtMjg4LDcgKzI4OCw3IEBACiAgICAgICAgIHRoaXMuZW50cnlBbmNob3JUb0lkTWFwLnJlbW92ZShlbnRyeS5nZXRXZWJzaXRlKCkuZ2V0SGFuZGxlKCkrIjoiK2VudHJ5LmdldEFuY2hvcigpKTsKICAgICB9CiAgICAgCi0gICAgcHVibGljIExpc3QgZ2V0TmV4dFByZXZFbnRyaWVzKFdlYmxvZ0VudHJ5IGN1cnJlbnQsIFN0cmluZyBjYXROYW1lLAorICAgIHByaXZhdGUgTGlzdCBnZXROZXh0UHJldkVudHJpZXMoV2VibG9nRW50cnkgY3VycmVudCwgU3RyaW5nIGNhdE5hbWUsCiAgICAgICAgICAgICBTdHJpbmcgbG9jYWxlLCBpbnQgbWF4RW50cmllcywgYm9vbGVhbiBuZXh0KQogICAgICAgICAgICAgdGhyb3dzIFdlYmxvZ2dlckV4Y2VwdGlvbiB7CiAKQEAgLTQ2MiwxMyArNDYyLDcgQEAKICAgICAgICAgICAgIHF1ZXJ5LnNldFBhcmFtZXRlcihpKzEsIHBhcmFtcy5nZXQoaSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAod2VzYy5nZXRPZmZzZXQoKSAhPSAwKSB7Ci0gICAgICAgICAgICBxdWVyeS5zZXRGaXJzdFJlc3VsdCh3ZXNjLmdldE9mZnNldCgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAod2VzYy5nZXRNYXhSZXN1bHRzKCkgIT0gLTEpIHsKLSAgICAgICAgICAgIHF1ZXJ5LnNldE1heFJlc3VsdHMod2VzYy5nZXRNYXhSZXN1bHRzKCkpOwotICAgICAgICB9Ci0gICAgICAgIAorICAgICAgICBzZXRGaXJzdE1heCggcXVlcnksIHdlc2MuZ2V0T2Zmc2V0KCksIHdlc2MuZ2V0TWF4UmVzdWx0cygpICk7CiAgICAgICAgIHJldHVybiBxdWVyeS5nZXRSZXN1bHRMaXN0KCk7CiAgICAgfQogICAgIApAQCAtNjY2LDEyICs2NjAsNyBAQAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBUeXBlZFF1ZXJ5PFdlYmxvZ0VudHJ5Q29tbWVudD4gcXVlcnkgPSBzdHJhdGVneS5nZXREeW5hbWljUXVlcnkocXVlcnlTdHJpbmcudG9TdHJpbmcoKSwgV2VibG9nRW50cnlDb21tZW50LmNsYXNzKTsKLSAgICAgICAgaWYgKGNzYy5nZXRPZmZzZXQoKSAhPSAwKSB7Ci0gICAgICAgICAgICBxdWVyeS5zZXRGaXJzdFJlc3VsdChjc2MuZ2V0T2Zmc2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjc2MuZ2V0TWF4UmVzdWx0cygpICE9IC0xKSB7Ci0gICAgICAgICAgICBxdWVyeS5zZXRNYXhSZXN1bHRzKGNzYy5nZXRNYXhSZXN1bHRzKCkpOwotICAgICAgICB9CisgICAgICAgIHNldEZpcnN0TWF4KCBxdWVyeSwgY3NjLmdldE9mZnNldCgpLCBjc2MuZ2V0TWF4UmVzdWx0cygpKTsKICAgICAgICAgZm9yIChpbnQgaT0wOyBpPHBhcmFtcy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgcXVlcnkuc2V0UGFyYW1ldGVyKGkrMSwgcGFyYW1zLmdldChpKSk7CiAgICAgICAgIH0KQEAgLTc1OCw3ICs3NDcsNyBAQAogICAgICAqIEBpbmhlcml0RG9jCiAgICAgICovCiAgICAgcHVibGljIE1hcDxEYXRlLCBMaXN0PFdlYmxvZ0VudHJ5Pj4gZ2V0V2VibG9nRW50cnlPYmplY3RNYXAoV2VibG9nRW50cnlTZWFyY2hDcml0ZXJpYSB3ZXNjKSB0aHJvd3MgV2VibG9nZ2VyRXhjZXB0aW9uIHsKLSAgICAgICAgVHJlZU1hcDxEYXRlLCBMaXN0PFdlYmxvZ0VudHJ5Pj4gbWFwID0gbmV3IFRyZWVNYXA8RGF0ZSwgTGlzdDxXZWJsb2dFbnRyeT4+KENvbGxlY3Rpb25zLnJldmVyc2VPcmRlcigpKTsKKyAgICAgICAgVHJlZU1hcDxEYXRlLCBMaXN0PFdlYmxvZ0VudHJ5Pj4gbWFwID0gbmV3IFRyZWVNYXA8PihDb2xsZWN0aW9ucy5yZXZlcnNlT3JkZXIoKSk7CiAKICAgICAgICAgTGlzdDxXZWJsb2dFbnRyeT4gZW50cmllcyA9IGdldFdlYmxvZ0VudHJpZXMod2VzYyk7CiAKQEAgLTc2OSwxMSArNzU4LDcgQEAKIAogICAgICAgICBmb3IgKFdlYmxvZ0VudHJ5IGVudHJ5IDogZW50cmllcykgewogICAgICAgICAgICAgRGF0ZSBzRGF0ZSA9IERhdGVVdGlsLmdldE5vb25PZkRheShlbnRyeS5nZXRQdWJUaW1lKCksIGNhbCk7Ci0gICAgICAgICAgICBMaXN0PFdlYmxvZ0VudHJ5PiBkYXlFbnRyaWVzID0gbWFwLmdldChzRGF0ZSk7Ci0gICAgICAgICAgICBpZiAoZGF5RW50cmllcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZGF5RW50cmllcyA9IG5ldyBBcnJheUxpc3Q8V2VibG9nRW50cnk+KCk7Ci0gICAgICAgICAgICAgICAgbWFwLnB1dChzRGF0ZSwgZGF5RW50cmllcyk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBMaXN0PFdlYmxvZ0VudHJ5PiBkYXlFbnRyaWVzID0gbWFwLmNvbXB1dGVJZkFic2VudChzRGF0ZSwgayAtPiBuZXcgQXJyYXlMaXN0PD4oKSk7CiAgICAgICAgICAgICBkYXlFbnRyaWVzLmFkZChlbnRyeSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1hcDsKQEAgLTg0MywxMiArODI4LDcgQEAKICAgICAgICAgICAgICAgICBxdWVyeS5zZXRQYXJhbWV0ZXIoMSwgZW5kKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAob2Zmc2V0ICE9IDApIHsKLSAgICAgICAgICAgIHF1ZXJ5LnNldEZpcnN0UmVzdWx0KG9mZnNldCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxlbmd0aCAhPSAtMSkgewotICAgICAgICAgICAgcXVlcnkuc2V0TWF4UmVzdWx0cyhsZW5ndGgpOwotICAgICAgICB9CisgICAgICAgIHNldEZpcnN0TWF4KCBxdWVyeSwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICBxdWVyeVJlc3VsdHMgPSBxdWVyeS5nZXRSZXN1bHRMaXN0KCk7CiAgICAgICAgIExpc3Q8U3RhdENvdW50PiByZXN1bHRzID0gbmV3IEFycmF5TGlzdDxTdGF0Q291bnQ+KCk7CiAgICAgICAgIGlmIChxdWVyeVJlc3VsdHMgIT0gbnVsbCkgewpAQCAtOTUxLDEyICs5MzEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIldlYmxvZ0VudHJ5VGFnQWdncmVnYXRlLmdldFBvcHVsYXJUYWdzQnlXZWJzaXRlTnVsbCIsIFRhZ1N0YXQuY2xhc3MpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmIChvZmZzZXQgIT0gMCkgewotICAgICAgICAgICAgcXVlcnkuc2V0Rmlyc3RSZXN1bHQob2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICBpZiAobGltaXQgIT0gLTEpIHsKLSAgICAgICAgICAgIHF1ZXJ5LnNldE1heFJlc3VsdHMobGltaXQpOwotICAgICAgICB9CisgICAgICAgIHNldEZpcnN0TWF4KCBxdWVyeSwgb2Zmc2V0LCBsaW1pdCk7CiAgICAgICAgIHF1ZXJ5UmVzdWx0cyA9IHF1ZXJ5LmdldFJlc3VsdExpc3QoKTsKICAgICAgICAgCiAgICAgICAgIGRvdWJsZSBtaW4gPSBJbnRlZ2VyLk1BWF9WQUxVRTsKQEAgLTEwMjksMTIgKzEwMDQsNyBAQAogICAgICAgICBmb3IgKGludCBpPTA7IGk8cGFyYW1zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICBxdWVyeS5zZXRQYXJhbWV0ZXIoaSsxLCBwYXJhbXMuZ2V0KGkpKTsKICAgICAgICAgfQotICAgICAgICBpZiAob2Zmc2V0ICE9IDApIHsKLSAgICAgICAgICAgIHF1ZXJ5LnNldEZpcnN0UmVzdWx0KG9mZnNldCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxpbWl0ICE9IC0xKSB7Ci0gICAgICAgICAgICBxdWVyeS5zZXRNYXhSZXN1bHRzKGxpbWl0KTsKLSAgICAgICAgfQorICAgICAgICBzZXRGaXJzdE1heCggcXVlcnksIG9mZnNldCwgbGltaXQpOwogICAgICAgICBxdWVyeVJlc3VsdHMgPSBxdWVyeS5nZXRSZXN1bHRMaXN0KCk7CiAgICAgICAgIAogICAgICAgICBMaXN0PFRhZ1N0YXQ+IHJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0PFRhZ1N0YXQ+KCk7CkBAIC0xMjE0LDI2ICsxMTg0LDM2IEBACiAgICAgdGhyb3dzIFdlYmxvZ2dlckV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICAvLyBmaWd1cmUgb3V0IHN0YXJ0IGRhdGUKLSAgICAgICAgQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgY2FsLnNldFRpbWUobmV3IERhdGUoKSk7Ci0gICAgICAgIGNhbC5hZGQoQ2FsZW5kYXIuREFURSwgLTEgKiBzaW5jZURheXMpOwotICAgICAgICBEYXRlIHN0YXJ0RGF0ZSA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgIERhdGUgc3RhcnREYXRlID0gZ2V0U3RhcnREYXRlTm93KHNpbmNlRGF5cyk7CiAKLSAgICAgICAgVHlwZWRRdWVyeTxXZWJsb2dIaXRDb3VudD4gcXVlcnkgPSBzdHJhdGVneS5nZXROYW1lZFF1ZXJ5KAorICAgICAgICBUeXBlZFF1ZXJ5PFdlYmxvZ0hpdENvdW50PiBxdWVyeTsKKyAgICAgICAgcXVlcnkgPSBzdHJhdGVneS5nZXROYW1lZFF1ZXJ5KAogICAgICAgICAgICAgICAgICJXZWJsb2dIaXRDb3VudC5nZXRCeVdlYmxvZ0VuYWJsZWRUcnVlQW5kQWN0aXZlVHJ1ZSZEYWlseUhpdHNHcmVhdGVyVGhlblplcm8mV2VibG9nTGFzdE1vZGlmaWVkR3JlYXRlck9yZGVyQnlEYWlseUhpdHNEZXNjIiwKICAgICAgICAgICAgICAgICBXZWJsb2dIaXRDb3VudC5jbGFzcyk7CiAgICAgICAgIHF1ZXJ5LnNldFBhcmFtZXRlcigxLCBzdGFydERhdGUpOwotICAgICAgICAKKyAgICAgICAgc2V0Rmlyc3RNYXgoIHF1ZXJ5LCBvZmZzZXQsIGxlbmd0aCApOworICAgICAgICByZXR1cm4gcXVlcnkuZ2V0UmVzdWx0TGlzdCgpOworICAgIH0KKworCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRGaXJzdE1heCggUXVlcnkgcXVlcnksIGludCBvZmZzZXQsIGludCBsZW5ndGggKSAgewogICAgICAgICBpZiAob2Zmc2V0ICE9IDApIHsKICAgICAgICAgICAgIHF1ZXJ5LnNldEZpcnN0UmVzdWx0KG9mZnNldCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGxlbmd0aCAhPSAtMSkgewogICAgICAgICAgICAgcXVlcnkuc2V0TWF4UmVzdWx0cyhsZW5ndGgpOwotICAgICAgICB9ICAgICAgICAKLSAgICAgICAgcmV0dXJuIHF1ZXJ5LmdldFJlc3VsdExpc3QoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAKKworCisgICAgcHVibGljIHN0YXRpYyBEYXRlIGdldFN0YXJ0RGF0ZU5vdyhpbnQgc2luY2VEYXlzKSB7CisgICAgICAgIENhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIGNhbC5zZXRUaW1lKG5ldyBEYXRlKCkpOworICAgICAgICBjYWwuYWRkKENhbGVuZGFyLkRBVEUsIC0xICogc2luY2VEYXlzKTsKKyAgICAgICAgcmV0dXJuIGNhbC5nZXRUaW1lKCk7CisgICAgfQorCisKICAgICAvKioKICAgICAgKiBAaW5oZXJpdERvYwogICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL3NlYXJjaC9JbmRleE1hbmFnZXJJbXBsLmphdmEgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3Mvc2VhcmNoL0luZGV4TWFuYWdlckltcGwuamF2YQppbmRleCA3N2JkOGU2Li5lODM1YzRmIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3Mvc2VhcmNoL0luZGV4TWFuYWdlckltcGwuamF2YQorKysgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3Mvc2VhcmNoL0luZGV4TWFuYWdlckltcGwuamF2YQpAQCAtMjEsOCArMjEsMTEgQEAKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIAoraW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuUmVhZFdyaXRlTG9jazsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5SZWVudHJhbnRSZWFkV3JpdGVMb2NrOworCitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmJlYW51dGlscy5Db25zdHJ1Y3RvclV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLmFuYWx5c2lzLkFuYWx5emVyOwpAQCAtMzYsNiArMzksNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLnN0b3JlLkZTRGlyZWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLnN0b3JlLklPQ29udGV4dDsKIGltcG9ydCBvcmcuYXBhY2hlLmx1Y2VuZS5zdG9yZS5SQU1EaXJlY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS5sdWNlbmUudXRpbC5WZXJzaW9uOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5XZWJsb2dnZXJFeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLkluaXRpYWxpemF0aW9uRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5XZWJsb2dnZXI7CkBAIC05MCw3ICs5NCw3IEBACiAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IGx1Y2VuZSBpbmRleCBtYW5hZ2VyLiBUaGlzIHNob3VsZCBvbmx5IGJlIGNyZWF0ZWQgb25jZS4KLSAgICAgKiBDcmVhdGluZyB0aGUgaW5kZXggbWFuYWdlciBtb3JlIHRoYW4gb25jZSB3aWxsIGRlZmluYXRlbHkgcmVzdWx0IGluCisgICAgICogQ3JlYXRpbmcgdGhlIGluZGV4IG1hbmFnZXIgbW9yZSB0aGFuIG9uY2Ugd2lsbCBkZWZpbml0ZWx5IHJlc3VsdCBpbgogICAgICAqIGVycm9ycy4gVGhlIHByZWZlcnJlZCB3YXkgb2YgZ2V0dGluZyBhbiBpbmRleCBpcyB0aHJvdWdoIHRoZQogICAgICAqIFJvbGxlckNvbnRleHQuCiAgICAgICogCkBAIC0yMzYsNyArMjQwLDI1IEBACiAgICAgICogQHJldHVybiBBbmFseXplciB0byBiZSB1c2VkIGluIG1hbmlwdWxhdGluZyB0aGUgZGF0YWJhc2UuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBBbmFseXplciBnZXRBbmFseXplcigpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdGFuZGFyZEFuYWx5emVyKEZpZWxkQ29uc3RhbnRzLkxVQ0VORV9WRVJTSU9OKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbnRpYXRlQW5hbHl6ZXIoRmllbGRDb25zdGFudHMuTFVDRU5FX1ZFUlNJT04pOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIEFuYWx5emVyIGluc3RhbnRpYXRlQW5hbHl6ZXIoZmluYWwgVmVyc2lvbiBsdWNlbmVWZXJzaW9uKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBjbGFzc05hbWUgPSBXZWJsb2dnZXJDb25maWcuZ2V0UHJvcGVydHkoImx1Y2VuZS5hbmFseXplci5jbGFzcyIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgQ2xhc3M8Pz4gY2xhenogPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSk7CisgICAgICAgICAgICByZXR1cm4gKEFuYWx5emVyKSBDb25zdHJ1Y3RvclV0aWxzLmludm9rZUNvbnN0cnVjdG9yKGNsYXp6LCBsdWNlbmVWZXJzaW9uKTsKKyAgICAgICAgfSBjYXRjaCAoZmluYWwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBtTG9nZ2VyLmVycm9yKCJmYWlsZWQgdG8gbG9va3VwIGFuYWx5emVyIGNsYXNzOiAiICsgY2xhc3NOYW1lLCBlKTsKKyAgICAgICAgICAgIHJldHVybiBpbnN0YW50aWF0ZURlZmF1bHRBbmFseXplcihsdWNlbmVWZXJzaW9uKTsKKyAgICAgICAgfSBjYXRjaCAoZmluYWwgTm9TdWNoTWV0aG9kRXhjZXB0aW9uIHwgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiB8IElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gfCBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIG1Mb2dnZXIuZXJyb3IoImZhaWxlZCB0byBpbnN0YW50aWF0ZSBhbmFseXplcjogIiArIGNsYXNzTmFtZSwgZSk7CisgICAgICAgICAgICByZXR1cm4gaW5zdGFudGlhdGVEZWZhdWx0QW5hbHl6ZXIobHVjZW5lVmVyc2lvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBBbmFseXplciBpbnN0YW50aWF0ZURlZmF1bHRBbmFseXplcihmaW5hbCBWZXJzaW9uIGx1Y2VuZVZlcnNpb24pIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTdGFuZGFyZEFuYWx5emVyKGx1Y2VuZVZlcnNpb24pOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBzY2hlZHVsZUluZGV4T3BlcmF0aW9uKGZpbmFsIEluZGV4T3BlcmF0aW9uIG9wKSB7CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3Mvc2VhcmNoL29wZXJhdGlvbnMvSW5kZXhPcGVyYXRpb24uamF2YSBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9zZWFyY2gvb3BlcmF0aW9ucy9JbmRleE9wZXJhdGlvbi5qYXZhCmluZGV4IGM5Mzc5NzguLmE4NTEzMjcgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9zZWFyY2gvb3BlcmF0aW9ucy9JbmRleE9wZXJhdGlvbi5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9zZWFyY2gvb3BlcmF0aW9ucy9JbmRleE9wZXJhdGlvbi5qYXZhCkBAIC0xNjksOSArMTY5LDkgQEAKICAgICBwcm90ZWN0ZWQgSW5kZXhXcml0ZXIgYmVnaW5Xcml0aW5nKCkgewogICAgICAgICB0cnkgewogCi0gICAgICAgICAgICAvLyBMaW1pdCB0byAxMDAwIHRva2Vucy4KICAgICAgICAgICAgIExpbWl0VG9rZW5Db3VudEFuYWx5emVyIGFuYWx5emVyID0gbmV3IExpbWl0VG9rZW5Db3VudEFuYWx5emVyKAotICAgICAgICAgICAgICAgICAgICBJbmRleE1hbmFnZXJJbXBsLmdldEFuYWx5emVyKCksIDEwMDApOworICAgICAgICAgICAgICAgICAgICBJbmRleE1hbmFnZXJJbXBsLmdldEFuYWx5emVyKCksCisgICAgICAgICAgICAgICAgICAgIFdlYmxvZ2dlckNvbmZpZy5nZXRJbnRQcm9wZXJ0eSgibHVjZW5lLmFuYWx5emVyLm1heFRva2VuQ291bnQiKSk7CiAKICAgICAgICAgICAgIEluZGV4V3JpdGVyQ29uZmlnIGNvbmZpZyA9IG5ldyBJbmRleFdyaXRlckNvbmZpZygKICAgICAgICAgICAgICAgICAgICAgRmllbGRDb25zdGFudHMuTFVDRU5FX1ZFUlNJT04sIGFuYWx5emVyKTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9yZW5kZXJpbmcvbW9kZWwvU2l0ZU1vZGVsLmphdmEgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvcmVuZGVyaW5nL21vZGVsL1NpdGVNb2RlbC5qYXZhCmluZGV4IGFkYTFiMjQuLmUzZmQ3YjMgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9yZW5kZXJpbmcvbW9kZWwvU2l0ZU1vZGVsLmphdmEKKysrIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3JlbmRlcmluZy9tb2RlbC9TaXRlTW9kZWwuamF2YQpAQCAtMzMsNiArMzMsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5XZWJsb2dnZXJGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5Vc2VyTWFuYWdlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nRW50cnlNYW5hZ2VyOworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5qcGEuSlBBV2VibG9nRW50cnlNYW5hZ2VySW1wbDsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuVGFnU3RhdDsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nSGl0Q291bnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLlN0YXRDb3VudDsKQEAgLTM4OSwxMCArMzkwLDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgTGlzdDxXZWJsb2dXcmFwcGVyPiBnZXROZXdXZWJsb2dzKGludCBzaW5jZURheXMsIGludCBsZW5ndGgpIHsKICAgICAgICAgTGlzdDxXZWJsb2dXcmFwcGVyPiByZXN1bHRzID0gbmV3IEFycmF5TGlzdDxXZWJsb2dXcmFwcGVyPigpOwotICAgICAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwotICAgICAgICBjYWwuc2V0VGltZShuZXcgRGF0ZSgpKTsKLSAgICAgICAgY2FsLmFkZChDYWxlbmRhci5EQVRFLCAtMSAqIHNpbmNlRGF5cyk7Ci0gICAgICAgIERhdGUgc3RhcnREYXRlID0gY2FsLmdldFRpbWUoKTsKKyAgICAgICAgRGF0ZSBzdGFydERhdGUgPSBKUEFXZWJsb2dFbnRyeU1hbmFnZXJJbXBsLmdldFN0YXJ0RGF0ZU5vdyhzaW5jZURheXMpOwogICAgICAgICB0cnkgeyAgICAgICAgICAgIAogICAgICAgICAgICAgTGlzdDxXZWJsb2c+IHdlYmxvZ3MgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFdlYmxvZ01hbmFnZXIoKS5nZXRXZWJsb2dzKAogICAgICAgICAgICAgICAgIEJvb2xlYW4uVFJVRSwgQm9vbGVhbi5UUlVFLCBzdGFydERhdGUsIG51bGwsIDAsIGxlbmd0aCk7CkBAIC00NjYsMTAgKzQ2NCw3IEBACiAgICAgICovCiAgICAgcHVibGljIExpc3QgZ2V0TW9zdENvbW1lbnRlZFdlYmxvZ3MoaW50IHNpbmNlRGF5cyAsIGludCBsZW5ndGgpIHsKICAgICAgICAgTGlzdCByZXN1bHRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwotICAgICAgICBjYWwuc2V0VGltZShuZXcgRGF0ZSgpKTsKLSAgICAgICAgY2FsLmFkZChDYWxlbmRhci5EQVRFLCAtMSAqIHNpbmNlRGF5cyk7Ci0gICAgICAgIERhdGUgc3RhcnREYXRlID0gY2FsLmdldFRpbWUoKTsKKyAgICAgICAgRGF0ZSBzdGFydERhdGUgPSBKUEFXZWJsb2dFbnRyeU1hbmFnZXJJbXBsLmdldFN0YXJ0RGF0ZU5vdyhzaW5jZURheXMpOwogICAgICAgICB0cnkgeyAgICAgICAgICAgIAogICAgICAgICAgICAgcmVzdWx0cyA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nTWFuYWdlcigpLmdldE1vc3RDb21tZW50ZWRXZWJsb2dzKAogICAgICAgICAgICAgICAgICAgICBzdGFydERhdGUsIG5ldyBEYXRlKCksIDAsIGxlbmd0aCk7CkBAIC00OTAsMTAgKzQ4NSw3IEBACiAgICAgcHVibGljIExpc3QgZ2V0TW9zdENvbW1lbnRlZFdlYmxvZ0VudHJpZXMoCiAgICAgICAgICAgICBMaXN0IGNhdHMsIGludCBzaW5jZURheXMsIGludCBsZW5ndGgpIHsKICAgICAgICAgTGlzdCByZXN1bHRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwotICAgICAgICBjYWwuc2V0VGltZShuZXcgRGF0ZSgpKTsKLSAgICAgICAgY2FsLmFkZChDYWxlbmRhci5EQVRFLCAtMSAqIHNpbmNlRGF5cyk7Ci0gICAgICAgIERhdGUgc3RhcnREYXRlID0gY2FsLmdldFRpbWUoKTsKKyAgICAgICAgRGF0ZSBzdGFydERhdGUgPSBKUEFXZWJsb2dFbnRyeU1hbmFnZXJJbXBsLmdldFN0YXJ0RGF0ZU5vdyhzaW5jZURheXMpOwogICAgICAgICB0cnkgeyAgICAgICAgICAgIAogICAgICAgICAgICAgV2VibG9nZ2VyIHJvbGxlciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCk7CiAgICAgICAgICAgICBXZWJsb2dFbnRyeU1hbmFnZXIgd21nciA9IHJvbGxlci5nZXRXZWJsb2dFbnRyeU1hbmFnZXIoKTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2FkbWluL0dsb2JhbENvbmZpZy5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvYWRtaW4vR2xvYmFsQ29uZmlnLmphdmEKaW5kZXggZGE3MWE0MS4uMGVlMzY0MSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvYWRtaW4vR2xvYmFsQ29uZmlnLmphdmEKKysrIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvYWRtaW4vR2xvYmFsQ29uZmlnLmphdmEKQEAgLTE2OSwxNiArMTY5LDE3IEBACiAgICAgICAgICAgICAvLyBpdCBtYXkgbm90IGFsd2F5cyBiZSB0aGUgY2FzZSwgYnV0IHdlIHNob3VsZCBiZSBva2F5IGZvciBub3cKICAgICAgICAgICAgIC8vIG51bGwgY2hlY2sgYmVsb3cgbmVlZGVkIHcvT3JhY2xlCiAgICAgICAgICAgICBpZiggdXBkUHJvcC5nZXRWYWx1ZSgpICE9IG51bGwKLSAgICAgICAgICAgICAgICAgICAgJiYgKHVwZFByb3AuZ2V0VmFsdWUoKS5lcXVhbHMoInRydWUiKSB8fCB1cGRQcm9wLmdldFZhbHVlKCkuZXF1YWxzKCJmYWxzZSIpKSkgewotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmKGluY29taW5nUHJvcCA9PSBudWxsIHx8ICFpbmNvbWluZ1Byb3AuZXF1YWxzKCJvbiIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGluY29taW5nUHJvcCA9ICJmYWxzZSI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAmJiAoICAgdXBkUHJvcC5nZXRWYWx1ZSgpLmVxdWFscygidHJ1ZSIpIHx8IHVwZFByb3AuZ2V0VmFsdWUoKS5lcXVhbHMoImZhbHNlIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IHVwZFByb3AuZ2V0VmFsdWUoKS5lcXVhbHMoIm9uIikgICB8fCB1cGRQcm9wLmdldFZhbHVlKCkuZXF1YWxzKCJvZmYiKQorICAgICAgICAgICAgICAgICAgICAgICApKSB7CisgICAgICAgICAgICAgICAgaWYgKGluY29taW5nUHJvcCAhPSBudWxsICYmIChpbmNvbWluZ1Byb3AuZXF1YWxzSWdub3JlQ2FzZSgidHJ1ZSIpIHx8IGluY29taW5nUHJvcC5lcXVhbHNJZ25vcmVDYXNlKCJvbiIpKSkgewogICAgICAgICAgICAgICAgICAgICBpbmNvbWluZ1Byb3AgPSAidHJ1ZSI7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpbmNvbWluZ1Byb3AgPSAiZmFsc2UiOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBvbmx5IHdvcmsgb24gcHJvcHMgdGhhdCB3ZXJlIHN1Ym1pdHRlZCB3aXRoIHRoZSByZXF1ZXN0CiAgICAgICAgICAgICBpZihpbmNvbWluZ1Byb3AgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiU2V0dGluZyBuZXcgdmFsdWUgZm9yIFsiK3Byb3BOYW1lKyJdIik7CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9jb3JlL1JlZ2lzdGVyLmphdmEgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9jb3JlL1JlZ2lzdGVyLmphdmEKaW5kZXggZjNiOTA2Yy4uYmFhZGM1ZSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvY29yZS9SZWdpc3Rlci5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2NvcmUvUmVnaXN0ZXIuamF2YQpAQCAtMjExLDI2ICsyMTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgJiBzYXZlIHRoZSBhY3RpdmF0aW9uIGRhdGEKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGluQWN0aXZhdGlvbkNvZGUgPSBVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpOwogCi0gICAgICAgICAgICAgICAgICAgIGlmIChtZ3IuZ2V0VXNlckJ5QWN0aXZhdGlvbkNvZGUoaW5BY3RpdmF0aW9uQ29kZSkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gdGhlICpleHRyZW1lbHkqIHVubGlrZWx5IGV2ZW50IHRoYXQgd2UgZ2VuZXJhdGUgYW4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFjdGl2YXRpb24gY29kZSB0aGF0IGlzIGFscmVhZHkgdXNlLCB3ZSdsbCByZXRyeSAzIHRpbWVzLgotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bU9mUmV0cmllcyA9IDM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtT2ZSZXRyaWVzIDwgMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bU9mUmV0cmllcyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bU9mUmV0cmllczsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5BY3RpdmF0aW9uQ29kZSA9IFVVSUQucmFuZG9tVVVJRCgpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1nci5nZXRVc2VyQnlBY3RpdmF0aW9uQ29kZShpbkFjdGl2YXRpb25Db2RlKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQWN0aXZhdGlvbkNvZGUgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIG1vcmUgdW5saWtlbHkgZXZlbnQgdGhhdCB0aHJlZSByZXRyaWVzIGlzbid0IGVub3VnaAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluQWN0aXZhdGlvbkNvZGUgPT0gbnVsbCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdlYmxvZ2dlckV4Y2VwdGlvbigiZXJyb3IuYWRkLnVzZXIuYWN0aXZhdGlvbkNvZGVJblVzZSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGluQWN0aXZhdGlvbkNvZGUgPSByZXRyeUFjdGl2YXRpb25Db2RlKG1nciwgaW5BY3RpdmF0aW9uQ29kZSk7CiAgICAgICAgICAgICAgICAgICAgIHVkLnNldEFjdGl2YXRpb25Db2RlKGluQWN0aXZhdGlvbkNvZGUpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjQ4LDE2ICsyMjksNyBAQAogICAgICAgICAgICAgICAgIFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZmx1c2goKTsKIAogICAgICAgICAgICAgICAgIC8vIG5vdyBzZW5kIGFjdGl2YXRpb24gZW1haWwgaWYgbmVjZXNzYXJ5Ci0gICAgICAgICAgICAgICAgaWYgKGFjdGl2YXRpb25FbmFibGVkICYmIHVkLmdldEFjdGl2YXRpb25Db2RlKCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VuZCBhY3RpdmF0aW9uIG1haWwgdG8gdGhlIHVzZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIE1haWxVdGlsLnNlbmRVc2VyQWN0aXZhdGlvbkVtYWlsKHVkKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoV2VibG9nZ2VyRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yIHNlbmRpbmcgYWN0aXZhdGlvbiBlbWFpbCB0byAtICIgKyB1ZC5nZXRFbWFpbEFkZHJlc3MoKSwgZXgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZhdGlvblN0YXR1cygicGVuZGluZyIpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZW5kQWN0aXZhdGlvbk1haWxJZk5lZWRlZCh1ZCwgYWN0aXZhdGlvbkVuYWJsZWQpOwogCiAgICAgICAgICAgICAgICAgLy8gSW52YWxpZGF0ZSBzZXNzaW9uLCBvdGhlcndpc2UgbmV3IHVzZXIgd2hvIHdhcyBvcmlnaW5hbGx5CiAgICAgICAgICAgICAgICAgLy8gYXV0aGVudGljYXRlZCB2aWEgTERBUC9TU08gd2lsbCByZW1haW4gbG9nZ2VkIGluIGJ1dApAQCAtMjc4LDYgKzI1MCw0MyBAQAogICAgICAgICAKICAgICAgICAgcmV0dXJuIElOUFVUOwogICAgIH0KKworCXByaXZhdGUgU3RyaW5nIHJldHJ5QWN0aXZhdGlvbkNvZGUoVXNlck1hbmFnZXIgbWdyLCBTdHJpbmcgaW5BY3RpdmF0aW9uQ29kZSkgdGhyb3dzIFdlYmxvZ2dlckV4Y2VwdGlvbiB7CisJCWlmIChtZ3IuZ2V0VXNlckJ5QWN0aXZhdGlvbkNvZGUoaW5BY3RpdmF0aW9uQ29kZSkgIT0gbnVsbCkgeworCQkgICAgLy8gSW4gdGhlICpleHRyZW1lbHkqIHVubGlrZWx5IGV2ZW50IHRoYXQgd2UgZ2VuZXJhdGUgYW4KKwkJICAgIC8vIGFjdGl2YXRpb24gY29kZSB0aGF0IGlzIGFscmVhZHkgdXNlLCB3ZSdsbCByZXRyeSAzIHRpbWVzLgorCQkgICAgaW50IG51bU9mUmV0cmllcyA9IDM7CisJCSAgICBpZiAobnVtT2ZSZXRyaWVzIDwgMSkgeworCQkgICAgICAgIG51bU9mUmV0cmllcyA9IDE7CisJCSAgICB9CisJCSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bU9mUmV0cmllczsgaSsrKSB7CisJCSAgICAgICAgaW5BY3RpdmF0aW9uQ29kZSA9IFVVSUQucmFuZG9tVVVJRCgpLnRvU3RyaW5nKCk7CisJCSAgICAgICAgaWYgKG1nci5nZXRVc2VyQnlBY3RpdmF0aW9uQ29kZShpbkFjdGl2YXRpb25Db2RlKSA9PSBudWxsKSB7CisJCSAgICAgICAgICAgIGJyZWFrOworCQkgICAgICAgIH0gZWxzZSB7CisJCSAgICAgICAgICAgIGluQWN0aXZhdGlvbkNvZGUgPSBudWxsOworCQkgICAgICAgIH0KKwkJICAgIH0KKwkJICAgIC8vIEluIG1vcmUgdW5saWtlbHkgZXZlbnQgdGhhdCB0aHJlZSByZXRyaWVzIGlzbid0IGVub3VnaAorCQkgICAgaWYgKGluQWN0aXZhdGlvbkNvZGUgPT0gbnVsbCl7CisJCSAgICAgICAgdGhyb3cgbmV3IFdlYmxvZ2dlckV4Y2VwdGlvbigiZXJyb3IuYWRkLnVzZXIuYWN0aXZhdGlvbkNvZGVJblVzZSIpOworCQkgICAgfQorCQl9CisJCXJldHVybiBpbkFjdGl2YXRpb25Db2RlOworCX0KKworCXByaXZhdGUgdm9pZCBzZW5kQWN0aXZhdGlvbk1haWxJZk5lZWRlZChVc2VyIHVkLCBib29sZWFuIGFjdGl2YXRpb25FbmFibGVkKSB7CisJCWlmIChhY3RpdmF0aW9uRW5hYmxlZCAmJiB1ZC5nZXRBY3RpdmF0aW9uQ29kZSgpICE9IG51bGwpIHsKKwkJICAgIHRyeSB7CisJCSAgICAgICAgLy8gc2VuZCBhY3RpdmF0aW9uIG1haWwgdG8gdGhlIHVzZXIKKwkJICAgICAgICBNYWlsVXRpbC5zZW5kVXNlckFjdGl2YXRpb25FbWFpbCh1ZCk7CisJCSAgICB9IGNhdGNoIChXZWJsb2dnZXJFeGNlcHRpb24gZXgpIHsKKwkJICAgICAgICBsb2cuZXJyb3IoIkVycm9yIHNlbmRpbmcgYWN0aXZhdGlvbiBlbWFpbCB0byAtICIgKyB1ZC5nZXRFbWFpbEFkZHJlc3MoKSwgZXgpOworCQkgICAgfQorCisJCSAgICBzZXRBY3RpdmF0aW9uU3RhdHVzKCJwZW5kaW5nIik7CisJCX0KKwl9CiAgICAgCiAgICAgCiAgICAgQFNraXBWYWxpZGF0aW9uCkBAIC0zMzEsMTkgKzM0MCw3IEBACiAgICAgICAgICAgICBTdHJpbmcgdW51c2VkUGFzc3dvcmQgPSBXZWJsb2dnZXJDb25maWcuZ2V0UHJvcGVydHkoInVzZXJzLnBhc3N3b3Jkcy5leHRlcm5hbEF1dGhWYWx1ZSIsICI8ZXh0ZXJuYWxBdXRoPiIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQsIFNwcmluZyBTZWN1cml0eSBjYXNlCi0gICAgICAgICAgICBVc2VyIGZyb21TU09Vc2VyID0gQ3VzdG9tVXNlclJlZ2lzdHJ5LmdldFVzZXJEZXRhaWxzRnJvbUF1dGhlbnRpY2F0aW9uKGdldFNlcnZsZXRSZXF1ZXN0KCkpOwotICAgICAgICAgICAgaWYgKGZyb21TU09Vc2VyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBnZXRCZWFuKCkuc2V0UGFzc3dvcmRUZXh0KHVudXNlZFBhc3N3b3JkKTsKLSAgICAgICAgICAgICAgICBnZXRCZWFuKCkuc2V0UGFzc3dvcmRDb25maXJtKHVudXNlZFBhc3N3b3JkKTsKLSAgICAgICAgICAgICAgICBnZXRCZWFuKCkuc2V0VXNlck5hbWUoZnJvbVNTT1VzZXIuZ2V0VXNlck5hbWUoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFByZXNlcnZlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCwgQ01BIGNhc2UgICAgICAgICAgICAgCi0gICAgICAgICAgICBlbHNlIGlmIChnZXRTZXJ2bGV0UmVxdWVzdCgpLmdldFVzZXJQcmluY2lwYWwoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZ2V0QmVhbigpLnNldFVzZXJOYW1lKGdldFNlcnZsZXRSZXF1ZXN0KCkuZ2V0VXNlclByaW5jaXBhbCgpLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgZ2V0QmVhbigpLnNldFBhc3N3b3JkVGV4dCh1bnVzZWRQYXNzd29yZCk7Ci0gICAgICAgICAgICAgICAgZ2V0QmVhbigpLnNldFBhc3N3b3JkQ29uZmlybSh1bnVzZWRQYXNzd29yZCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBwcmVzZXJ2ZVVzZXJuYW1lQW5kUGFzc3dvcmQodW51c2VkUGFzc3dvcmQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBTdHJpbmcgYWxsb3dlZCA9IFdlYmxvZ2dlckNvbmZpZy5nZXRQcm9wZXJ0eSgidXNlcm5hbWUuYWxsb3dlZENoYXJzIik7CkBAIC0zNzgsNyArMzc1LDMwIEBACiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIGNoZWNrIHRoYXQgdXNlcm5hbWUgaXMgbm90IHRha2VuCi0gICAgICAgIGlmICghU3RyaW5nVXRpbHMuaXNFbXB0eShnZXRCZWFuKCkuZ2V0VXNlck5hbWUoKSkpIHsKKyAgICAgICAgY2hlY2tVc2VybmFtZSgpOworCisgICAgICAgIC8vIGNoZWNrIHRoYXQgT3BlbklELCBpZiBwcm92aWRlZCwgaXMgbm90IHRha2VuCisgICAgICAgIGNoZWNrT3BlbklEKCk7CisgICAgfQorCisJcHJpdmF0ZSB2b2lkIHByZXNlcnZlVXNlcm5hbWVBbmRQYXNzd29yZChTdHJpbmcgdW51c2VkUGFzc3dvcmQpIHsKKwkJVXNlciBmcm9tU1NPVXNlciA9IEN1c3RvbVVzZXJSZWdpc3RyeS5nZXRVc2VyRGV0YWlsc0Zyb21BdXRoZW50aWNhdGlvbihnZXRTZXJ2bGV0UmVxdWVzdCgpKTsKKwkJaWYgKGZyb21TU09Vc2VyICE9IG51bGwpIHsKKwkJICAgIGdldEJlYW4oKS5zZXRQYXNzd29yZFRleHQodW51c2VkUGFzc3dvcmQpOworCQkgICAgZ2V0QmVhbigpLnNldFBhc3N3b3JkQ29uZmlybSh1bnVzZWRQYXNzd29yZCk7CisJCSAgICBnZXRCZWFuKCkuc2V0VXNlck5hbWUoZnJvbVNTT1VzZXIuZ2V0VXNlck5hbWUoKSk7CisJCX0KKworCQkvLyBQcmVzZXJ2ZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQsIENNQSBjYXNlICAgICAgICAgICAgIAorCQllbHNlIGlmIChnZXRTZXJ2bGV0UmVxdWVzdCgpLmdldFVzZXJQcmluY2lwYWwoKSAhPSBudWxsKSB7CisJCSAgICBnZXRCZWFuKCkuc2V0VXNlck5hbWUoZ2V0U2VydmxldFJlcXVlc3QoKS5nZXRVc2VyUHJpbmNpcGFsKCkuZ2V0TmFtZSgpKTsKKwkJICAgIGdldEJlYW4oKS5zZXRQYXNzd29yZFRleHQodW51c2VkUGFzc3dvcmQpOworCQkgICAgZ2V0QmVhbigpLnNldFBhc3N3b3JkQ29uZmlybSh1bnVzZWRQYXNzd29yZCk7CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgY2hlY2tVc2VybmFtZSgpIHsKKwkJaWYgKCFTdHJpbmdVdGlscy5pc0VtcHR5KGdldEJlYW4oKS5nZXRVc2VyTmFtZSgpKSkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBVc2VyTWFuYWdlciBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFVzZXJNYW5hZ2VyKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1nci5nZXRVc2VyQnlVc2VyTmFtZShnZXRCZWFuKCkuZ2V0VXNlck5hbWUoKSwgbnVsbCkgIT0gbnVsbCkgewpAQCAtMzkxLDkgKzQxMSwxMCBAQAogICAgICAgICAgICAgICAgIGFkZEVycm9yKCJnZW5lcmljLmVycm9yLmNoZWNrLmxvZ3MiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCX0KIAotICAgICAgICAvLyBjaGVjayB0aGF0IE9wZW5JRCwgaWYgcHJvdmlkZWQsIGlzIG5vdCB0YWtlbgotICAgICAgICBpZiAoIVN0cmluZ1V0aWxzLmlzRW1wdHkoZ2V0QmVhbigpLmdldE9wZW5JZFVybCgpKSkgeworCXByaXZhdGUgdm9pZCBjaGVja09wZW5JRCgpIHsKKwkJaWYgKCFTdHJpbmdVdGlscy5pc0VtcHR5KGdldEJlYW4oKS5nZXRPcGVuSWRVcmwoKSkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgVXNlck1hbmFnZXIgbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRVc2VyTWFuYWdlcigpOwogICAgICAgICAgICAgICAgIGlmIChtZ3IuZ2V0VXNlckJ5T3BlbklkVXJsKGdldEJlYW4oKS5nZXRPcGVuSWRVcmwoKSkgIT0gbnVsbCkgewpAQCAtNDA2LDcgKzQyNyw3IEBACiAgICAgICAgICAgICAgICAgYWRkRXJyb3IoImdlbmVyaWMuZXJyb3IuY2hlY2subG9ncyIpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQorCX0KICAgICAKICAgICAKICAgICBwdWJsaWMgSHR0cFNlcnZsZXRSZXF1ZXN0IGdldFNlcnZsZXRSZXF1ZXN0KCkgewpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvY29uZmlnL3JvbGxlci5wcm9wZXJ0aWVzIGIvYXBwL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvY29uZmlnL3JvbGxlci5wcm9wZXJ0aWVzCmluZGV4IDc4NWE4OTMuLjRhNGVlYjggMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2NvbmZpZy9yb2xsZXIucHJvcGVydGllcworKysgYi9hcHAvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9jb25maWcvcm9sbGVyLnByb3BlcnRpZXMKQEAgLTY0MSw2ICs2NDEsMTAgQEAKICMgRWNsaXBzZUxpbmsgSlBBIHByb3BlcnRpZXMKIGVjbGlwc2VsaW5rLnBlcnNpc3RlbmNlLWNvbnRleHQuZmx1c2gtbW9kZT1hdXRvCiAKKyMgTHVjZW5lIGNvbmZpZ3VyYXRpb25zCitsdWNlbmUuYW5hbHl6ZXIuY2xhc3M9b3JnLmFwYWNoZS5sdWNlbmUuYW5hbHlzaXMuc3RhbmRhcmQuU3RhbmRhcmRBbmFseXplcgorbHVjZW5lLmFuYWx5emVyLm1heFRva2VuQ291bnQ9MTAwMAorCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRXhwZXJpbWVudGFsLCBkZXByZWNhdGVkIGFuZCAidW5kb2N1bWVudGVkIiBzZXR0aW5ncwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvRW50cnlFZGl0b3IuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0VudHJ5RWRpdG9yLmpzcAppbmRleCA1MDUwYjI5Li4wOGYyMDUxIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvRW50cnlFZGl0b3IuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9FbnRyeUVkaXRvci5qc3AKQEAgLTEzMCw3ICsxMzAsNyBAQAogPHM6ZWxzZT4KICAgICA8JS0tIFJpY2ggdGV4dCBlZGl0b3IgKFhpbmhhLCBzZWU6IGh0dHA6Ly90cmFjLnhpbmhhLm9yZy93aWtpL05ld2JpZUd1aWRlKSAtLSU+CiAKLSAgICA8czp1cmwgdmFyPSJ4aW5oYUhvbWUiIHZhbHVlPSIvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMSI+PC9zOnVybD4KKyAgICA8czp1cmwgdmFyPSJ4aW5oYUhvbWUiIHZhbHVlPSIvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xIj48L3M6dXJsPgogICAgIDxzY3JpcHQ+CiAgICAgICAgIC8vIChwcmVmZXJhYmx5IGFic29sdXRlKSBVUkwgKGluY2x1ZGluZyB0cmFpbGluZyBzbGFzaCkgd2hlcmUgWGluaGEgaXMgaW5zdGFsbGVkCiAgICAgICAgIF9lZGl0b3JfdXJsICA9ICc8czpwcm9wZXJ0eSB2YWx1ZT0ieGluaGFIb21lIiAvPic7CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvdmVsb2NpdHkvZmVlZHMudm0gYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvdmVsb2NpdHkvZmVlZHMudm0KaW5kZXggMjI4ZTExZS4uMDY1YTU0OCAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3ZlbG9jaXR5L2ZlZWRzLnZtCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi92ZWxvY2l0eS9mZWVkcy52bQpAQCAtMTQxLDQgKzE0MSw5IEBACiAjaWYoJHBhZ2VyLnByZXZMaW5rICYmICRwYWdlci5pdGVtcy5zaXplKCkgPiAwKQogICAgIDxsaW5rIHJlbD0icHJldmlvdXMiIHR5cGU9ImFwcGxpY2F0aW9uL2F0b20reG1sIiBocmVmPSIkdXRpbHMuZXNjYXBlWE1MKCRwYWdlci5wcmV2TGluaykiIC8+CiAjZW5kCisjZW5kCisKKyNtYWNybyhzaG93RmlyZWZveEZlZWRXb3JrYXJvdW5kKQorPCEtLSAxMjM0NTY3ODkxMDExMTIxMzE0MTUxNjE3MTgxOTIwMjEyMjIzMjQyNTI2MjcyODI5MzAzMTMyMzMzNDM1MzYzNzM4Mzk0MDQxNDI0MzQ0NDU0NjQ3NDg0OTUwNTE1MjUzNTQ1NTU2NTc1ODU5NjA2MTYyNjM2NDY1NjY2NzY4Njk3MDcxNzI3Mzc0NzU3Njc3Nzg3OTgwODE4MjgzODQ4NTg2ODc4ODg5OTA5MTkyOTM5NDk1OTY5Nzk4OTkxMDAxMDExMDIxMDMxMDQxMDUxMDYxMDcxMDgxMDkxMTAxMTExMTIxMTMxMTQxMTUxMTYxMTcxMTgxMTkxMjAxMjExMjIxMjMxMjQxMjUxMjYxMjcxMjgxMjkxMzAxMzExMzIxMzMxMzQxMzUxMzYxMzcxMzgxMzkxNDAxNDExNDIxNDMxNDQxNDUxNDYxNDcxNDgxNDkxNTAxNTExNTIxNTMKKy0tPgogI2VuZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi92ZWxvY2l0eS90ZW1wbGF0ZXMvZmVlZHMvc2l0ZS1jb21tZW50cy1hdG9tLnZtIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3ZlbG9jaXR5L3RlbXBsYXRlcy9mZWVkcy9zaXRlLWNvbW1lbnRzLWF0b20udm0KaW5kZXggYTdjZTFmYS4uNWNkOTJjNCAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3ZlbG9jaXR5L3RlbXBsYXRlcy9mZWVkcy9zaXRlLWNvbW1lbnRzLWF0b20udm0KKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3ZlbG9jaXR5L3RlbXBsYXRlcy9mZWVkcy9zaXRlLWNvbW1lbnRzLWF0b20udm0KQEAgLTE2LDYgKzE2LDcgQEAKICAgZGlyZWN0b3J5IG9mIHRoaXMgZGlzdHJpYnV0aW9uLgogCiAqIzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9J3V0Zi04Jz8+Cisjc2hvd0ZpcmVmb3hGZWVkV29ya2Fyb3VuZCgpCiAjaWYoJGNvbmZpZy5mZWVkU3R5bGUpPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0iJHVybC5hYnNvbHV0ZVNpdGUvcm9sbGVyLXVpL3N0eWxlcy9hdG9tLnhzbCIgbWVkaWE9InNjcmVlbiI/PiNlbmQKICNzZXQoJHBhZ2VyID0gJHNpdGUuZ2V0Q29tbWVudHNQYWdlcigtMSwgJGNvbmZpZy5mZWVkU2l6ZSkgKQogPGZlZWQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvQXRvbSI+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvdmVsb2NpdHkvdGVtcGxhdGVzL2ZlZWRzL3NpdGUtY29tbWVudHMtcnNzLnZtIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3ZlbG9jaXR5L3RlbXBsYXRlcy9mZWVkcy9zaXRlLWNvbW1lbnRzLXJzcy52bQppbmRleCAwMWVlMGU3Li5iNDVjOTg0IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvdmVsb2NpdHkvdGVtcGxhdGVzL2ZlZWRzL3NpdGUtY29tbWVudHMtcnNzLnZtCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi92ZWxvY2l0eS90ZW1wbGF0ZXMvZmVlZHMvc2l0ZS1jb21tZW50cy1yc3Mudm0KQEAgLTE2LDYgKzE2LDcgQEAKICAgZGlyZWN0b3J5IG9mIHRoaXMgZGlzdHJpYnV0aW9uLgogCiAqIzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cisjc2hvd0ZpcmVmb3hGZWVkV29ya2Fyb3VuZCgpCiAjaWYoJGNvbmZpZy5mZWVkU3R5bGUpPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0iJHVybC5hYnNvbHV0ZVNpdGUvcm9sbGVyLXVpL3N0eWxlcy9yc3MueHNsIiBtZWRpYT0ic2NyZWVuIj8+I2VuZAogPHJzcyB2ZXJzaW9uPSIyLjAiIAogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvdmVsb2NpdHkvdGVtcGxhdGVzL2ZlZWRzL3NpdGUtZW50cmllcy1hdG9tLnZtIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3ZlbG9jaXR5L3RlbXBsYXRlcy9mZWVkcy9zaXRlLWVudHJpZXMtYXRvbS52bQppbmRleCA4NGE0M2E5Li43M2FkMDJmIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvdmVsb2NpdHkvdGVtcGxhdGVzL2ZlZWRzL3NpdGUtZW50cmllcy1hdG9tLnZtCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi92ZWxvY2l0eS90ZW1wbGF0ZXMvZmVlZHMvc2l0ZS1lbnRyaWVzLWF0b20udm0KQEAgLTE2LDYgKzE2LDcgQEAKICAgZGlyZWN0b3J5IG9mIHRoaXMgZGlzdHJpYnV0aW9uLgogCiAqIzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9J3V0Zi04Jz8+Cisjc2hvd0ZpcmVmb3hGZWVkV29ya2Fyb3VuZCgpCiAjaWYoJGNvbmZpZy5mZWVkU3R5bGUpPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0iJHVybC5hYnNvbHV0ZVNpdGUvcm9sbGVyLXVpL3N0eWxlcy9hdG9tLnhzbCIgbWVkaWE9InNjcmVlbiI/PiNlbmQKICNzZXQoJHBhZ2VyID0gJHNpdGUuZ2V0V2VibG9nRW50cmllc1BhZ2VyKC0xLCAkY29uZmlnLmZlZWRTaXplKSkKIDxmZWVkIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1L0F0b20iPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3ZlbG9jaXR5L3RlbXBsYXRlcy9mZWVkcy9zaXRlLWVudHJpZXMtcnNzLnZtIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3ZlbG9jaXR5L3RlbXBsYXRlcy9mZWVkcy9zaXRlLWVudHJpZXMtcnNzLnZtCmluZGV4IGFjZmU1NGIuLmZhNjkzZjggMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi92ZWxvY2l0eS90ZW1wbGF0ZXMvZmVlZHMvc2l0ZS1lbnRyaWVzLXJzcy52bQorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvdmVsb2NpdHkvdGVtcGxhdGVzL2ZlZWRzL3NpdGUtZW50cmllcy1yc3Mudm0KQEAgLTE2LDYgKzE2LDcgQEAKICAgZGlyZWN0b3J5IG9mIHRoaXMgZGlzdHJpYnV0aW9uLgogCiAqIzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cisjc2hvd0ZpcmVmb3hGZWVkV29ya2Fyb3VuZCgpCiAjaWYoJGNvbmZpZy5mZWVkU3R5bGUpPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0iJHVybC5hYnNvbHV0ZVNpdGUvcm9sbGVyLXVpL3N0eWxlcy9yc3MueHNsIiBtZWRpYT0ic2NyZWVuIj8+I2VuZAogPHJzcyB2ZXJzaW9uPSIyLjAiIAogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvdmVsb2NpdHkvdGVtcGxhdGVzL2ZlZWRzL3NpdGUtc2VhcmNoLWF0b20udm0gYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvdmVsb2NpdHkvdGVtcGxhdGVzL2ZlZWRzL3NpdGUtc2VhcmNoLWF0b20udm0KaW5kZXggNTEwZTc3YS4uYjE4NDA1YyAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3ZlbG9jaXR5L3RlbXBsYXRlcy9mZWVkcy9zaXRlLXNlYXJjaC1hdG9tLnZtCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi92ZWxvY2l0eS90ZW1wbGF0ZXMvZmVlZHMvc2l0ZS1zZWFyY2gtYXRvbS52bQpAQCAtMTYsNiArMTYsNyBAQAogICBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCiAKICojPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ndXRmLTgnPz4KKyNzaG93RmlyZWZveEZlZWRXb3JrYXJvdW5kKCkKICNpZigkY29uZmlnLmZlZWRTdHlsZSk8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVmPSIkdXJsLmFic29sdXRlU2l0ZS9yb2xsZXItdWkvc3R5bGVzL2F0b20ueHNsIiBtZWRpYT0ic2NyZWVuIj8+I2VuZAogI3NldCgkcGFnZXIgPSAkbW9kZWwuc2VhcmNoUmVzdWx0c1BhZ2VyKQogPGZlZWQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvQXRvbSIgCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvdmVsb2NpdHkvdGVtcGxhdGVzL2ZlZWRzL3dlYmxvZy1jb21tZW50cy1hdG9tLnZtIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3ZlbG9jaXR5L3RlbXBsYXRlcy9mZWVkcy93ZWJsb2ctY29tbWVudHMtYXRvbS52bQppbmRleCBiOTIzNTQyLi5iZGEyN2ExIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvdmVsb2NpdHkvdGVtcGxhdGVzL2ZlZWRzL3dlYmxvZy1jb21tZW50cy1hdG9tLnZtCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi92ZWxvY2l0eS90ZW1wbGF0ZXMvZmVlZHMvd2VibG9nLWNvbW1lbnRzLWF0b20udm0KQEAgLTE2LDYgKzE2LDcgQEAKICAgZGlyZWN0b3J5IG9mIHRoaXMgZGlzdHJpYnV0aW9uLgogCiAqIzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9J3V0Zi04Jz8+Cisjc2hvd0ZpcmVmb3hGZWVkV29ya2Fyb3VuZCgpCiAjaWYoJGNvbmZpZy5mZWVkU3R5bGUpPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0iJHVybC5hYnNvbHV0ZVNpdGUvcm9sbGVyLXVpL3N0eWxlcy9hdG9tLnhzbCIgbWVkaWE9InNjcmVlbiI/PiNlbmQKICNzZXQoJHBhZ2VyID0gJG1vZGVsLmNvbW1lbnRzUGFnZXIpCiA8ZmVlZCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwNS9BdG9tIj4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi92ZWxvY2l0eS90ZW1wbGF0ZXMvZmVlZHMvd2VibG9nLWNvbW1lbnRzLXJzcy52bSBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi92ZWxvY2l0eS90ZW1wbGF0ZXMvZmVlZHMvd2VibG9nLWNvbW1lbnRzLXJzcy52bQppbmRleCAwNTI5ODc1Li44YjNhZDgxIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvdmVsb2NpdHkvdGVtcGxhdGVzL2ZlZWRzL3dlYmxvZy1jb21tZW50cy1yc3Mudm0KKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3ZlbG9jaXR5L3RlbXBsYXRlcy9mZWVkcy93ZWJsb2ctY29tbWVudHMtcnNzLnZtCkBAIC0xNiw2ICsxNiw3IEBACiAgIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KIAogKiM8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorI3Nob3dGaXJlZm94RmVlZFdvcmthcm91bmQoKQogI2lmKCRjb25maWcuZmVlZFN0eWxlKTw/eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9IiR1cmwuYWJzb2x1dGVTaXRlL3JvbGxlci11aS9zdHlsZXMvcnNzLnhzbCIgbWVkaWE9InNjcmVlbiI/PiNlbmQKIDxyc3MgdmVyc2lvbj0iMi4wIiAKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3ZlbG9jaXR5L3RlbXBsYXRlcy9mZWVkcy93ZWJsb2ctZW50cmllcy1hdG9tLnZtIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3ZlbG9jaXR5L3RlbXBsYXRlcy9mZWVkcy93ZWJsb2ctZW50cmllcy1hdG9tLnZtCmluZGV4IDdjOGU0Y2YuLmVlZTA1YzMgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi92ZWxvY2l0eS90ZW1wbGF0ZXMvZmVlZHMvd2VibG9nLWVudHJpZXMtYXRvbS52bQorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvdmVsb2NpdHkvdGVtcGxhdGVzL2ZlZWRzL3dlYmxvZy1lbnRyaWVzLWF0b20udm0KQEAgLTE2LDYgKzE2LDcgQEAKICAgZGlyZWN0b3J5IG9mIHRoaXMgZGlzdHJpYnV0aW9uLgogCiAqIzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9J3V0Zi04Jz8+Cisjc2hvd0ZpcmVmb3hGZWVkV29ya2Fyb3VuZCgpCiAjaWYoJGNvbmZpZy5mZWVkU3R5bGUpPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0iJHVybC5hYnNvbHV0ZVNpdGUvcm9sbGVyLXVpL3N0eWxlcy9hdG9tLnhzbCIgbWVkaWE9InNjcmVlbiI/PiNlbmQKICNzZXQoJHBhZ2VyID0gJG1vZGVsLndlYmxvZ0VudHJpZXNQYWdlcikKIDxmZWVkIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1L0F0b20iPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3ZlbG9jaXR5L3RlbXBsYXRlcy9mZWVkcy93ZWJsb2ctZW50cmllcy1yc3Mudm0gYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvdmVsb2NpdHkvdGVtcGxhdGVzL2ZlZWRzL3dlYmxvZy1lbnRyaWVzLXJzcy52bQppbmRleCAwYmUxYmZlLi4wYjcwMTEzIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvdmVsb2NpdHkvdGVtcGxhdGVzL2ZlZWRzL3dlYmxvZy1lbnRyaWVzLXJzcy52bQorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvdmVsb2NpdHkvdGVtcGxhdGVzL2ZlZWRzL3dlYmxvZy1lbnRyaWVzLXJzcy52bQpAQCAtMTYsNiArMTYsNyBAQAogICBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCiAKICojPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKyNzaG93RmlyZWZveEZlZWRXb3JrYXJvdW5kKCkKICNpZigkY29uZmlnLmZlZWRTdHlsZSk8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVmPSIkdXJsLmFic29sdXRlU2l0ZS9yb2xsZXItdWkvc3R5bGVzL3Jzcy54c2wiIG1lZGlhPSJzY3JlZW4iPz4jZW5kCiA8cnNzIHZlcnNpb249IjIuMCIgCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi92ZWxvY2l0eS90ZW1wbGF0ZXMvZmVlZHMvd2VibG9nLWZpbGVzLWF0b20udm0gYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvdmVsb2NpdHkvdGVtcGxhdGVzL2ZlZWRzL3dlYmxvZy1maWxlcy1hdG9tLnZtCmluZGV4IDVmZGY1NDUuLjk1NTM3ZDMgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi92ZWxvY2l0eS90ZW1wbGF0ZXMvZmVlZHMvd2VibG9nLWZpbGVzLWF0b20udm0KKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3ZlbG9jaXR5L3RlbXBsYXRlcy9mZWVkcy93ZWJsb2ctZmlsZXMtYXRvbS52bQpAQCAtMTYsNiArMTYsNyBAQAogICBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCiAKICojPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ndXRmLTgnPz4KKyNzaG93RmlyZWZveEZlZWRXb3JrYXJvdW5kKCkKICNpZigkY29uZmlnLmZlZWRTdHlsZSk8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVmPSIkdXJsLmFic29sdXRlU2l0ZS9yb2xsZXItdWkvc3R5bGVzL2F0b20ueHNsIiBtZWRpYT0ic2NyZWVuIj8+I2VuZAogI3NldCgkcGFnZXIgPSAkbW9kZWwubWVkaWFGaWxlc1BhZ2VyKQogPGZlZWQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvQXRvbSI+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvdmVsb2NpdHkvdGVtcGxhdGVzL2ZlZWRzL3dlYmxvZy1zZWFyY2gtYXRvbS52bSBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi92ZWxvY2l0eS90ZW1wbGF0ZXMvZmVlZHMvd2VibG9nLXNlYXJjaC1hdG9tLnZtCmluZGV4IDJlZmJjNzkuLjBlOWQyNDcgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi92ZWxvY2l0eS90ZW1wbGF0ZXMvZmVlZHMvd2VibG9nLXNlYXJjaC1hdG9tLnZtCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi92ZWxvY2l0eS90ZW1wbGF0ZXMvZmVlZHMvd2VibG9nLXNlYXJjaC1hdG9tLnZtCkBAIC0xNiw2ICsxNiw3IEBACiAgIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KIAogKiM8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSd1dGYtOCc/PgorI3Nob3dGaXJlZm94RmVlZFdvcmthcm91bmQoKQogI2lmKCRjb25maWcuZmVlZFN0eWxlKTw/eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9IiR1cmwuYWJzb2x1dGVTaXRlL3JvbGxlci11aS9zdHlsZXMvYXRvbS54c2wiIG1lZGlhPSJzY3JlZW4iPz4jZW5kCiAjc2V0KCRwYWdlciA9ICRtb2RlbC5zZWFyY2hSZXN1bHRzUGFnZXIpCiA8ZmVlZCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwNS9BdG9tIiAKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9YaW5oYS5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvWGluaGEuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODQ1Y2YzLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9YaW5oYS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0NzcgKzAsMCBAQAotLmh0bWxhcmVhIHsgYmFja2dyb3VuZDogI2ZmZjsgfQotLmh0bWxhcmVhIHRkIHsgbWFyZ2luOjA7cGFkZGluZzowOyB9Ci0KLS5odG1sYXJlYSAudG9vbGJhclJvdyB7Ci0gIHdpZHRoOjFweDsKLX0KLQotLmh0bWxhcmVhIC50b29sYmFyIHsKLSAgY3Vyc29yOiBkZWZhdWx0OwotICBiYWNrZ3JvdW5kOiBCdXR0b25GYWNlOwotICBwYWRkaW5nOiAzcHg7Ci0gIGJvcmRlcjogMXB4IHNvbGlkOwotICBib3JkZXItY29sb3I6IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25TaGFkb3cgQnV0dG9uU2hhZG93IEJ1dHRvbkhpZ2hsaWdodDsKLX0KLS5odG1sYXJlYSAudG9vbGJhciB0YWJsZSB7IG1hcmdpbjogMDsgZm9udC1mYW1pbHk6IFRhaG9tYSwgVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDExcHg7IH0KLS5odG1sYXJlYSAudG9vbGJhciBpbWcgeyBib3JkZXI6IG5vbmU7IHZlcnRpY2FsLWFsaWduOiB0b3A7IH0KLS5odG1sYXJlYSAudG9vbGJhciAubGFiZWwgeyBwYWRkaW5nOiAwIDNweDsgfQotCi0uaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvbiB7Ci0gIGJhY2tncm91bmQ6IEJ1dHRvbkZhY2U7Ci0gIGNvbG9yOiBCdXR0b25UZXh0OwotICBib3JkZXI6IDFweCBzb2xpZCBCdXR0b25GYWNlOwotICBwYWRkaW5nOiAxcHg7Ci0gIG1hcmdpbjogMDsKLSAgd2lkdGg6IDE4cHg7Ci0gIGhlaWdodDogMThweDsKLX0KLS5odG1sYXJlYSAudG9vbGJhciBhLmJ1dHRvbjpob3ZlciB7Ci0gIGJvcmRlcjogMXB4IHNvbGlkOwotICBib3JkZXItY29sb3I6IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25TaGFkb3cgQnV0dG9uU2hhZG93IEJ1dHRvbkhpZ2hsaWdodDsKLX0KLS5odG1sYXJlYSAudG9vbGJhciBhLmJ1dHRvbkRpc2FibGVkOmhvdmVyIHsKLSAgYm9yZGVyLWNvbG9yOiBCdXR0b25GYWNlOwotfQotLmh0bWxhcmVhIC50b29sYmFyIC5idXR0b25BY3RpdmUsCi0uaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvblByZXNzZWQKLXsKLSAgcGFkZGluZzogMnB4IDAgMCAycHg7Ci0gIGJvcmRlcjogMXB4IHNvbGlkOwotICBib3JkZXItY29sb3I6IEJ1dHRvblNoYWRvdyBCdXR0b25IaWdobGlnaHQgQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvblNoYWRvdzsKLX0KLS5odG1sYXJlYSAudG9vbGJhciAuYnV0dG9uUHJlc3NlZCB7Ci0gIGJhY2tncm91bmQ6IEJ1dHRvbkhpZ2hsaWdodDsKLX0KLS5odG1sYXJlYSAudG9vbGJhciAuaW5kaWNhdG9yIHsKLSAgcGFkZGluZzogMCAzcHg7Ci0gIG92ZXJmbG93OiBoaWRkZW47Ci0gIHdpZHRoOiAyMHB4OwotICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gIGN1cnNvcjogZGVmYXVsdDsKLSAgYm9yZGVyOiAxcHggc29saWQgQnV0dG9uU2hhZG93OwotfQotCi0uaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvbkRpc2FibGVkIGltZyB7Ci0gIGZpbHRlcjogZ3JheSgpIGFscGhhKG9wYWNpdHkgPSAyNSk7Ci0gIC1tb3otb3BhY2l0eTogMC4yNTsKLSAgb3BhY2l0eTogMC4yNTsKLX0KLQotLmh0bWxhcmVhIC50b29sYmFyIC5zZXBhcmF0b3IgewotICAvKnBvc2l0aW9uOiByZWxhdGl2ZTsqLwotICBtYXJnaW46MCAzcHg7Ci0gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgQnV0dG9uU2hhZG93OwotICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCBCdXR0b25IaWdobGlnaHQ7Ci0gIHdpZHRoOiAwOwotICBoZWlnaHQ6IDE4cHg7Ci0gIHBhZGRpbmc6IDA7Ci19Ci0KLS5odG1sYXJlYSAudG9vbGJhciAuc3BhY2UgeyB3aWR0aDogNXB4OyB9Ci0KLS5odG1sYXJlYSAudG9vbGJhciBzZWxlY3QsIC5odG1sYXJlYSAudG9vbGJhciBvcHRpb24geyBmb250OiAxMXB4IFRhaG9tYSxWZXJkYW5hLHNhbnMtc2VyaWY7fQotCi0uaHRtbGFyZWEgLnRvb2xiYXIgc2VsZWN0LAotLmh0bWxhcmVhIC50b29sYmFyIHNlbGVjdDpob3ZlciwKLS5odG1sYXJlYSAudG9vbGJhciBzZWxlY3Q6YWN0aXZlIHsgCi0gIHBvc2l0aW9uOnJlbGF0aXZlOwotICB0b3A6LTJweDsKLSAgbWFyZ2luLWJvdHRvbTotMnB4OwotICBjb2xvcjogQnV0dG9uVGV4dDsKLX0KLQotLmh0bWxhcmVhIGlmcmFtZS54aW5oYV9pZnJhbWUsIC5odG1sYXJlYSB0ZXh0YXJlYS54aW5oYV90ZXh0YXJlYQotewotICBib3JkZXI6IG5vbmU7IC8qMXB4IHNvbGlkOyovCi19Ci0KLS5odG1sYXJlYSAuc3RhdHVzQmFyIHsKLSAgYm9yZGVyOiAxcHggc29saWQ7Ci0gIGJvcmRlci1jb2xvcjogQnV0dG9uU2hhZG93IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25IaWdobGlnaHQgQnV0dG9uU2hhZG93OwotICBwYWRkaW5nOiAycHggNHB4OwotICBiYWNrZ3JvdW5kLWNvbG9yOiBCdXR0b25GYWNlOwotICBjb2xvcjogQnV0dG9uVGV4dDsKLSAgZm9udDogMTFweCBUYWhvbWEsVmVyZGFuYSxzYW5zLXNlcmlmOwotICBoZWlnaHQ6MTZweDsKLSAgb3ZlcmZsb3c6IGhpZGRlbjsKLX0KLQotLmh0bWxhcmVhIC5zdGF0dXNCYXIgLnN0YXR1c0JhclRyZWUgYSB7Ci0gIHBhZGRpbmc6IDJweCA1cHg7Ci0gIGNvbG9yOiAjMDBmOwotfQotCi0uaHRtbGFyZWEgLnN0YXR1c0JhciAuc3RhdHVzQmFyVHJlZSBhOnZpc2l0ZWQgeyBjb2xvcjogIzAwZjsgfQotLmh0bWxhcmVhIC5zdGF0dXNCYXIgLnN0YXR1c0JhclRyZWUgYTpob3ZlciB7Ci0gIGJhY2tncm91bmQtY29sb3I6IEhpZ2hsaWdodDsKLSAgY29sb3I6IEhpZ2hsaWdodFRleHQ7Ci0gIHBhZGRpbmc6IDFweCA0cHg7Ci0gIGJvcmRlcjogMXB4IHNvbGlkIEhpZ2hsaWdodFRleHQ7Ci19Ci0KLS5zdGF0dXNCYXJXaWRnZXRDb250YWluZXIgewotICBiYWNrZ3JvdW5kLWNvbG9yOiBCdXR0b25GYWNlOwotfQotCi0vKiBwb3B1cCBkaWFsb2dzICovCi0KLS5kaWFsb2cgewotICBjb2xvcjogQnV0dG9uVGV4dDsKLSAgYmFja2dyb3VuZDogQnV0dG9uRmFjZTsgCi0gIGJvcmRlcjogMXB4IG91dHNldDsgCi0gIGJvcmRlci1jb2xvcjogV2luZG93RnJhbWU7Ci19Ci1kaXYuZGlhbG9nIHsKLSAgcGFkZGluZy1ib3R0b206MTBweDsKLSAgYm9yZGVyLXJhZGl1czogOHB4IDhweCAwIDA7Ci0gIC1tb3otYm9yZGVyLXJhZGl1czogOHB4IDhweCAwIDA7Ci0gIC13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogOHB4OwotICAtd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA4cHg7Ci0gIAotICBib3gtc2hhZG93OiA5cHggOXB4IDEwcHggIzQ0NDsKLSAgLW1vei1ib3gtc2hhZG93OiA5cHggOXB4IDEwcHggIzQ0NDsKLSAgLXdlYmtpdC1ib3gtc2hhZG93OiA5cHggOXB4IDEwcHggIzQ0NDsKLX0KLWRpdi5kaWFsb2cubW9kZWxlc3MgewotICBib3gtc2hhZG93OiA0cHggNHB4IDVweCAjODg4OwotICAtbW96LWJveC1zaGFkb3c6IDRweCA0cHggNXB4ICM4ODg7Ci0gIC13ZWJraXQtYm94LXNoYWRvdzogNHB4IDRweCA1cHggIzg4ODsKLX0KLWRpdi5kaWFsb2cuY2hyb21lIHsKLSAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lICFJTVBPUlRBTlQ7Ci19Ci0ucGFuZWxzIGRpdi5kaWFsb2cucGFuZWwgewotICBib3JkZXItcmFkaXVzOjA7Ci0gIC1tb3otYm9yZGVyLXJhZGl1czogMDsKLSAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7Ci0gIAotICBib3gtc2hhZG93OiBub25lOwotICAtbW96LWJveC1zaGFkb3c6IG5vbmU7Ci0gIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKLX0KLS54aW5oYV9kaWFsb2dfYmFja2dyb3VuZCB7Ci0gIGZpbHRlcjogYWxwaGEob3BhY2l0eT0wKTsKLSAgLW1vei1vcGFjaXR5OiAwOwotICBvcGFjaXR5OiAwOwotICBib3JkZXI6bm9uZTsKLX0KLS54aW5oYV9kaWFsb2dfYmFja2dyb3VuZF9tb2RhbF9ncmV5b3V0IHsKLSAgYmFja2dyb3VuZC1jb2xvcjojNjY2OwotICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NzApICFJTVBPUlRBTlQ7Ci0gIC1tb3otb3BhY2l0eTogMC43OwotICBvcGFjaXR5OiAwLjc7Ci19Ci0ueGluaGFfZGlhbG9nX2JhY2tncm91bmRfbW9kYWwgewotICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MCkgIUlNUE9SVEFOVDsKLSAgLW1vei1vcGFjaXR5OiAwOwotICBvcGFjaXR5OiAwOwotICBib3JkZXI6bm9uZTsKLX0KLWJvZHkueGluaGFfZGlhbG9nX2JhY2tncm91bmRfbW9kYWxfZ3JleW91dCB7Ci0gIGZpbHRlcjogYWxwaGEob3BhY2l0eT0xMDApICFJTVBPUlRBTlQ7Ci19Ci1ib2R5LnhpbmhhX2RpYWxvZ19iYWNrZ3JvdW5kX21vZGFsIHsKLSAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApOwotfQotLmRpYWxvZyAuY29udGVudCB7IHBhZGRpbmc6IDJweDsgfQotCi0uZGlhbG9nLCAuZGlhbG9nIGJ1dHRvbiwgLmRpYWxvZyBpbnB1dCwgLmRpYWxvZyBzZWxlY3QsIC5kaWFsb2cgdGV4dGFyZWEsIC5kaWFsb2cgdGFibGUgewotICBmb250OiAxMXB4IFRhaG9tYSxWZXJkYW5hLHNhbnMtc2VyaWY7Ci19Ci0KLS5kaWFsb2cgdGFibGUgeyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB9Ci0KLS5kaWFsb2cgLnRpdGxlLCAuZGlhbG9nIGgxCi17Ci0gIGJhY2tncm91bmQ6IEFjdGl2ZUNhcHRpb247Ci0gIGNvbG9yOiBDYXB0aW9uVGV4dDsKLSAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMwMDA7Ci0gIHBhZGRpbmc6IDFweCAwIDJweCA1cHg7Ci0gIGZvbnQtc2l6ZTogMTJweDsKLSAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gIGN1cnNvcjogZGVmYXVsdDsKLSAgbGV0dGVyLXNwYWNpbmc6IDAuMDFlbTsKLX0KLS5kaWFsb2cgaDEgeyAKLSAgcGFkZGluZy1sZWZ0OjIycHg7Ci0gIG1hcmdpbjowOwotICBib3JkZXItcmFkaXVzOiA4cHggOHB4IDAgMDsKLSAgLW1vei1ib3JkZXItcmFkaXVzOiA4cHggOHB4IDAgMDsKLSAgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA4cHg7Ci0gIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDhweDsKLX0KLS5wYW5lbHMgLmRpYWxvZy5wYW5lbCBoMSB7IAotICAtbW96LWJvcmRlci1yYWRpdXM6IDA7Ci0gIC13ZWJraXQtYm9yZGVyLXJhZGl1czowOwotfQotCi0uZGlhbG9nIC50aXRsZSAuYnV0dG9uIHsKLSAgZmxvYXQ6IHJpZ2h0OwotICBib3JkZXI6IDFweCBzb2xpZCAjNjZhOwotICBwYWRkaW5nOiAwIDFweCAwIDJweDsKLSAgbWFyZ2luLXJpZ2h0OiAxcHg7Ci0gIGNvbG9yOiAjZmZmOwotICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci0KLS5kaWFsb2cgLnRpdGxlIC5idXR0b24taGlsaXRlIHsgYm9yZGVyLWNvbG9yOiAjODhmOyBiYWNrZ3JvdW5kOiAjNDRjOyB9Ci0KLS5kaWFsb2cgYnV0dG9uIHsKLSAgd2lkdGg6IDUuNWVtOwotICBwYWRkaW5nOiAwOwotfQotLmRpYWxvZyAuY2xvc2VCdXR0b24gewotICBwYWRkaW5nOiAwOwotICBjdXJzb3I6IGRlZmF1bHQ7Ci0gIGJvcmRlcjogMXB4IHNvbGlkOwotICBib3JkZXItY29sb3I6IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25TaGFkb3cgQnV0dG9uU2hhZG93IEJ1dHRvbkhpZ2hsaWdodDsKLSAgaGVpZ2h0IDogMTFweDsKLSAgd2lkdGggOiAxMXB4OwotICB2ZXJ0aWNhbC1hbGlnbiA6IHRvcDsKLSAgcG9zaXRpb24gOiBhYnNvbHV0ZTsKLSAgdG9wIDogM3B4OwotICByaWdodCA6IDJweDsKLSAgYmFja2dyb3VuZC1jb2xvcjogQnV0dG9uRmFjZTsKLSAgY29sb3I6IEJ1dHRvblRleHQ7Ci0gIGZvbnQtc2l6ZTogMTNweDsKLSAgZm9udC1mYW1pbHk6IFRhaG9tYSxWZXJkYW5hLHNhbnMtc2VyaWY7Ci0gIHRleHQtYWxpZ246Y2VudGVyOwotICBsZXR0ZXItc3BhY2luZzowOwotICBvdmVyZmxvdzpoaWRkZW47Ci19Ci0uZGlhbG9nIC5idXR0b25Db2xvciB7Ci0gIHdpZHRoIDoxZW07Ci0gIHBhZGRpbmc6IDFweDsKLSAgY3Vyc29yOiBkZWZhdWx0OwotICBib3JkZXI6IDFweCBzb2xpZDsKLSAgYm9yZGVyLWNvbG9yOiBCdXR0b25IaWdobGlnaHQgQnV0dG9uU2hhZG93IEJ1dHRvblNoYWRvdyBCdXR0b25IaWdobGlnaHQ7Ci19Ci0KLS5kaWFsb2cgLmJ1dHRvbkNvbG9yIC5jaG9vc2VyLCAuZGlhbG9nIC5idXR0b25Db2xvciAubm9jb2xvciB7Ci0gIGhlaWdodDogMC42ZW07Ci0gIGJvcmRlcjogMXB4IHNvbGlkOwotICBwYWRkaW5nOiAwIDFlbTsKLSAgYm9yZGVyLWNvbG9yOiBCdXR0b25TaGFkb3cgQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25TaGFkb3c7Ci19Ci0KLS5kaWFsb2cgLmJ1dHRvbkNsaWNrIHsKLSAgYm9yZGVyLWNvbG9yOiBCdXR0b25TaGFkb3cgQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25TaGFkb3c7Ci19Ci0uZGlhbG9nIC5idXR0b25Db2xvci1oaWxpdGUgewotICAgYm9yZGVyLWNvbG9yOiBCdXR0b25TaGFkb3cgQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25TaGFkb3c7Ci19Ci0KLS5kaWFsb2cgLmJ1dHRvbkNvbG9yIC5ub2NvbG9yIHsgcGFkZGluZzogMDsgfQotLmRpYWxvZyAuYnV0dG9uQ29sb3IgLm5vY29sb3ItaGlsaXRlIHsgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgY29sb3I6ICNmMDA7IH0KLQotLmRpYWxvZyAubGFiZWwgeyB0ZXh0LWFsaWduOiByaWdodDsgd2lkdGg6IDZlbTsgfQotLmRpYWxvZyAudmFsdWUgaW5wdXQgeyB3aWR0aDogMTAwJTsgfQotCi0uZGlhbG9nIGxlZ2VuZCB7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Ci0uZGlhbG9nIGZpZWxkc2V0IHRhYmxlIHsgbWFyZ2luOiAycHggMDsgfQotIAotLmRpYWxvZyAgLmJ1dHRvbnMgewotCi0gICAgICBwYWRkaW5nOiAxZW07IAotICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwotfQotLmRpYWxvZyAucmVzaXplSGFuZGxlIHsKLSAgICAtbW96LWFwcGVhcmFuY2UgOiByZXNpemVyOwotICAgIHdpZHRoOiAxMnB4OwotICAgIGhlaWdodDogMTJweDsKLSAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgIzAwMDsKLSAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjMDAwOwotICAgIGN1cnNvciA6IHNlLXJlc2l6ZTsKLX0KLS5wb3B1cHdpbiB7Ci0gIHBhZGRpbmc6IDA7Ci0gIG1hcmdpbjogMDsKLX0KLQotLnBvcHVwd2luIC50aXRsZSB7Ci0gIGJhY2tncm91bmQ6ICNmZmY7Ci0gIGNvbG9yOiAjMDAwOwotICBmb250LXdlaWdodDogYm9sZDsKLSAgZm9udC1zaXplOiAxMjAlOwotICBwYWRkaW5nOiAzcHggMTBweDsKLSAgbWFyZ2luLWJvdHRvbTogMTBweDsKLSAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOwotICBsZXR0ZXItc3BhY2luZzogMnB4OwotfQotCi1mb3JtIHsgbWFyZ2luOiAwOyBib3JkZXI6IG5vbmU7IH0KLQotCi0vKiogUGFuZWxzICoqLwotLmh0bWxhcmVhIC5wYW5lbHNfdG9wCi17Ci0gIGJvcmRlci1ib3R0b20gOiAxcHggc29saWQ7Ci0gIGJvcmRlci1jb2xvcjogQnV0dG9uU2hhZG93OwotfQotCi0uaHRtbGFyZWEgLnBhbmVsc19yaWdodAotewotICBib3JkZXItbGVmdCA6IDFweCBzb2xpZDsKLSAgYm9yZGVyLWNvbG9yOiBCdXR0b25TaGFkb3c7Ci19Ci0KLS5odG1sYXJlYSAucGFuZWxzX2xlZnQKLXsKLSAgYm9yZGVyLXJpZ2h0IDogMXB4IHNvbGlkOwotICBib3JkZXItY29sb3I6IEJ1dHRvblNoYWRvdzsKLX0KLQotLmh0bWxhcmVhIC5wYW5lbHNfYm90dG9tCi17Ci0gIGJvcmRlci10b3AgOiAxcHggc29saWQ7Ci0gIGJvcmRlci1jb2xvcjogQnV0dG9uU2hhZG93OwotfQotCi0uaHRtbGFyZWEgLnBhbmVsIGgxIHsKLSAgY2xlYXI6bGVmdDsKLSAgZm9udC1zaXplOjAuOWVtOwotfQotCi0uaHRtbGFyZWEgLnBhbmVsIHsgCi0gIG92ZXJmbG93OmhpZGRlbjsgCi0gIGJhY2tncm91bmQtY29sb3I6d2hpdGU7Ci0gIHBhZGRpbmctYm90dG9tOjAgIUlNUE9SVEFOVDsKLSAgYm9yZGVyOiBub25lICFJTVBPUlRBTlQ7Ci19Ci0uaHRtbGFyZWEgLnBhbmVsc19sZWZ0ICAucGFuZWwgeyBib3JkZXItcmlnaHQ6bm9uZTsgYm9yZGVyLWxlZnQ6bm9uZTsgfQotLmh0bWxhcmVhIC5wYW5lbHNfbGVmdCAgaDEgICAgIHsgYm9yZGVyLXJpZ2h0Om5vbmU7ICB9Ci0uaHRtbGFyZWEgLnBhbmVsc19yaWdodCAucGFuZWwgeyBib3JkZXItcmlnaHQ6bm9uZTsgYm9yZGVyLWxlZnQ6bm9uZTsgfQotLmh0bWxhcmVhIC5wYW5lbHNfbGVmdCAgaDEgICAgIHsgYm9yZGVyLWxlZnQ6bm9uZTsgIH0KLS5odG1sYXJlYSB7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyB9Ci0KLS5sb2FkaW5nCi17Ci0gIGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Ci0gIHBvc2l0aW9uOmFic29sdXRlOwotICB6LWluZGV4Ojk5ODsKLSAgdGV4dC1hbGlnbjpjZW50ZXI7Ci0gIHdpZHRoOjIxMnB4OwotICBwYWRkaW5nOiA1NXB4IDAgNXB4IDA7Ci0gIGJvcmRlcjoycHggc29saWQgI2NjYzsKLSAgLyogYm9yZGVyLWNvbG9yOiBCdXR0b25IaWdobGlnaHQgQnV0dG9uU2hhZG93IEJ1dHRvblNoYWRvdyBCdXR0b25IaWdobGlnaHQ7Ki8KLSAgYmFja2dyb3VuZDogdXJsKGltYWdlcy94aW5oYV9sb2dvLmdpZikgbm8tcmVwZWF0ICNmZmYgY2VudGVyIDVweDsKLX0KLS5sb2FkaW5nX21haW4KLXsKLSAgZm9udC1zaXplOjExcHg7Ci0gIGNvbG9yOiMwMDA7Ci0gCi19Ci0ubG9hZGluZ19zdWIKLXsKLSAgZm9udC1zaXplOjlweDsKLSAgY29sb3I6IzY2NjsKLSAgdGV4dC1hbGlnbjpjZW50ZXI7Ci19Ci0vKiBDbGFzc2VzIGZvciBmaWxlbWFuYWdlciBzdHlsZXMgaW4gYSBkaWFsb2cuICovCi0uZGlhbG9nIGEgaW1nCi17Ci1ib3JkZXI6IDAgbm9uZSB0cmFuc3BhcmVudDsKLX0KLQotLmRpYWxvZyBmaWVsZHNldC5jb2xsYXBzZWQgewotYm9yZGVyOiAwIG5vbmUgdHJhbnNwYXJlbnQ7Ci19Ci0KLS5kaWFsb2cgZmllbGRzZXQuY29sbGFwc2VkIGZvcm0gewotZGlzcGxheTogbm9uZTsKLX0KLQotLmhpZGRlbgotewotZGlzcGxheTogbm9uZTsKLX0KLQotLnBsYWNlc21hbmFnZXIKLXsKLSAgd2lkdGg6IDk1JTsKLSAgb3ZlcmZsb3c6IGF1dG87Ci19Ci0KLS5maWxlbWFuYWdlcgotewotICB3aWR0aDogOTUlOwotICBoZWlnaHQ6IDIwMHB4OwotICBvdmVyZmxvdzogYXV0bzsKLSAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKLX0KLS5maWxlbWFuYWdlciBkaXYuZmlsZQotewotICBtaW4td2lkdGg6IDgwcHg7Ci0gIGhlaWdodDogMTAwcHg7Ci0gIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgZmxvYXQ6IGxlZnQ7Ci0gIGJvcmRlcjogMXB4IG91dHNldCAjNjY2OwotICBtYXJnaW46IDRweDsKLX0KLS5wbGFjZXNtYW5hZ2VyIGRpdi5maWxlCi17Ci0gIG1pbi13aWR0aDogNjBweDsKLSAgaGVpZ2h0OiA3MHB4OwotICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gIGZsb2F0OiBsZWZ0OwotICBib3JkZXI6IDFweCBvdXRzZXQgIzY2NjsKLSAgbWFyZ2luOiA0cHg7Ci19Ci0uZmlsZW1hbmFnZXIgZGl2LmZpbGU6aG92ZXIsCi0ucGxhY2VzbWFuYWdlciBkaXYuZmlsZTpob3ZlcgotewotICBib3JkZXI6IDFweCBzb2xpZCAjMzMzOwotICBiYWNrZ3JvdW5kOiAjZmZmZmYzOwotfQotCi0uZmlsZW1hbmFnZXIgZGl2LnNlbGVjdGVkLAotLmZpbGVtYW5hZ2VyIGRpdi5zZWxlY3RlZDpob3ZlciwKLS5wbGFjZXNtYW5hZ2VyIGRpdi5zZWxlY3RlZCwKLS5wbGFjZXNtYW5hZ2VyIGRpdi5zZWxlY3RlZDpob3ZlcgotewotICBiYWNrZ3JvdW5kOiAjZmZmZmRhOwotICBib3JkZXI6IDFweCBzb2xpZCAjMDAwOwotfQotLmZpbGVtYW5hZ2VyIC5maWxlbmFtZSB7Ci0JbWFyZ2luOiAwLjVlbTsKLQljb2xvcjogIzIyMjsKLX0KLS5maWxlbWFuYWdlciBkaXYuc2VsZWN0ZWQgLmZpbGVuYW1lIHsKLSAgY29sb3I6ICMwMDA7Ci19Ci0uZmlsZW1hbmFnZXIgaW1nLnRodW1iCi17Ci0gIHdpZHRoOiA1MHB4OwotICBoZWlnaHQ6IDUwcHg7Ci0gIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgdG9wOiA1MCU7Ci0gIGxlZnQ6IDUwJTsKLSAgbWFyZ2luOiAtMjVweCAwIDAgLTI1cHg7Ci0gIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwotfQotLmZpbGVtYW5hZ2VyIGltZy5pY29uCi17Ci0gIHdpZHRoOiAzMnB4OwotICBoZWlnaHQ6IDMycHg7Ci0gIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgdG9wOiA1MCU7Ci0gIGxlZnQ6IDUwJTsKLSAgbWFyZ2luOiAtMTZweCAwIDAgLTE2cHg7Ci19Ci0uZmlsZW1hbmFnZXIgaW1nLmFjdGlvbgotewotICB3aWR0aDogMTVweDsKLSAgaGVpZ2h0OiAxNXB4OwotICBwb3NpdGlvbjogYWJzb2x1dGU7Ci19Ci0uZmlsZW1hbmFnZXIgaW1nLmRlbGV0ZQotewotICBib3R0b206IDNweDsKLSAgbGVmdDogMjBweDsKLX0KLS5maWxlbWFuYWdlciBpbWcuY29weQotewotICBib3R0b206IDNweDsKLSAgbGVmdDogM3B4OwotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL1hpbmhhQ29yZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9YaW5oYUNvcmUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlZjUwMjkuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL1hpbmhhQ29yZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDQzMjIgKzAsMCBAQAotLyogVGhpcyBjb21wcmVzc2VkIGZpbGUgaXMgcGFydCBvZiBYaW5oYS4gRm9yIHVuY29tcHJlc3NlZCBzb3VyY2VzLCBmb3J1bSwgYW5kIGJ1ZyByZXBvcnRzLCBnbyB0byB4aW5oYS5vcmcgKi8KLS8qIFRoZSBVUkwgb2YgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGlzIGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL1hpbmhhQ29yZS5qcyAqLwotICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLS0gIFhpbmhhIChpcyBub3QgaHRtbEFyZWEpIC0gaHR0cDovL3hpbmhhLm9yZwotICAgIC0tCi0gICAgLS0gIFVzZSBvZiBYaW5oYSBpcyBncmFudGVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGUgaHRtbEFyZWEgTGljZW5zZSAoYmFzZWQgb24KLSAgICAtLSAgQlNEIGxpY2Vuc2UpICBwbGVhc2UgcmVhZCBsaWNlbnNlLnR4dCBpbiB0aGlzIHBhY2thZ2UgZm9yIGRldGFpbHMuCi0gICAgLS0KLSAgICAtLSAgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDggWGluaGEgRGV2ZWxvcGVyIFRlYW0gYW5kIGNvbnRyaWJ1dG9ycwotICAgIC0tICAKLSAgICAtLSAgWGluaGEgd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gd29yayBieSBNaWhhaSBCYXpvbiB3aGljaCBpczoKLSAgICAtLSAgICAgIENvcHlyaWdodCAoYykgMjAwMy0yMDA0IGR5bmFyY2guY29tLgotICAgIC0tICAgICAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgaW50ZXJhY3RpdmV0b29scy5jb20sIGluYy4KLSAgICAtLSAgICAgIFRoaXMgY29weXJpZ2h0IG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UuCi0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLVhpbmhhLnZlcnNpb249eyJSZWxlYXNlIjoiVHJ1bmsiLCJIZWFkIjoiJEhlYWRVUkw6IGh0dHA6Ly9zdm4ueGluaGEub3JnL3RhZ3MvMC45Ni4xL1hpbmhhQ29yZS5qcyAkIi5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sIiQxIiksIkRhdGUiOiIkTGFzdENoYW5nZWREYXRlOiAyMDEwLTA1LTExIDE3OjQwOjA2IC0wNDAwIChUdWUsIDExIE1heSAyMDEwKSAkIi5yZXBsYWNlKC9eW146XSo6XHMqKFswLTlcLV0qKSAoWzAtOTpdKikgKFsrMC05XSopIFwoKC4qKVwpXHMqXCQvLCIkNCAkMiAkMyIpLCJSZXZpc2lvbiI6IiRMYXN0Q2hhbmdlZFJldmlzaW9uOiAxMjYzICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywiJDEiKSwiUmV2aXNpb25CeSI6IiRMYXN0Q2hhbmdlZEJ5OiBnb2dvICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywiJDEiKX07Ci1YaW5oYS5fcmVzb2x2ZVJlbGF0aXZlVXJsPWZ1bmN0aW9uKF8xLF8yKXsKLWlmKF8yLm1hdGNoKC9eKFteOl0rXDopP1wvXC8vKSl7Ci1yZXR1cm4gXzI7Ci19ZWxzZXsKLXZhciBiPV8xLnNwbGl0KCIvIik7Ci1pZihiW2IubGVuZ3RoLTFdPT09IiIpewotYi5wb3AoKTsKLX0KLXZhciBwPV8yLnNwbGl0KCIvIik7Ci1pZihwWzBdPT0iLiIpewotcC5zaGlmdCgpOwotfQotd2hpbGUocFswXT09Ii4uIil7Ci1iLnBvcCgpOwotcC5zaGlmdCgpOwotfQotcmV0dXJuIGIuam9pbigiLyIpKyIvIitwLmpvaW4oIi8iKTsKLX0KLX07Ci1pZih0eXBlb2YgX2VkaXRvcl91cmw9PSJzdHJpbmciKXsKLV9lZGl0b3JfdXJsPV9lZGl0b3JfdXJsLnJlcGxhY2UoL1x4MmYqJC8sIi8iKTsKLWlmKCFfZWRpdG9yX3VybC5tYXRjaCgvXihbXjpdK1w6KT9cLy8pKXsKLShmdW5jdGlvbigpewotdmFyIF81PXdpbmRvdy5sb2NhdGlvbi50b1N0cmluZygpLnJlcGxhY2UoL1w/LiokLywiIikuc3BsaXQoIi8iKTsKLV81LnBvcCgpOwotX2VkaXRvcl91cmw9WGluaGEuX3Jlc29sdmVSZWxhdGl2ZVVybChfNS5qb2luKCIvIiksX2VkaXRvcl91cmwpOwotfSkoKTsKLX0KLX1lbHNlewotYWxlcnQoIldBUk5JTkc6IF9lZGl0b3JfdXJsIGlzIG5vdCBzZXQhICBZb3Ugc2hvdWxkIHNldCB0aGlzIHZhcmlhYmxlIHRvIHRoZSBlZGl0b3IgZmlsZXMgcGF0aDsgaXQgc2hvdWxkIHByZWZlcmFibHkgYmUgYW4gYWJzb2x1dGUgcGF0aCwgbGlrZSBpbiAnL3hpbmhhLycsIGJ1dCBpdCBjYW4gYmUgcmVsYXRpdmUgaWYgeW91IHByZWZlci4gIEZ1cnRoZXIgd2Ugd2lsbCB0cnkgdG8gbG9hZCB0aGUgZWRpdG9yIGZpbGVzIGNvcnJlY3RseSBidXQgd2UnbGwgcHJvYmFibHkgZmFpbC4iKTsKLV9lZGl0b3JfdXJsPSIiOwotfQotaWYodHlwZW9mIF9lZGl0b3JfbGFuZz09InN0cmluZyIpewotX2VkaXRvcl9sYW5nPV9lZGl0b3JfbGFuZy50b0xvd2VyQ2FzZSgpOwotfWVsc2V7Ci1fZWRpdG9yX2xhbmc9ImVuIjsKLX0KLWlmKHR5cGVvZiBfZWRpdG9yX3NraW4hPT0ic3RyaW5nIil7Ci1fZWRpdG9yX3NraW49IiI7Ci19Ci1pZih0eXBlb2YgX2VkaXRvcl9pY29ucyE9PSJzdHJpbmciKXsKLV9lZGl0b3JfaWNvbnM9IiI7Ci19Ci12YXIgX194aW5oYXM9W107Ci1YaW5oYS5hZ3Q9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpOwotWGluaGEuaXNfaWU9KChYaW5oYS5hZ3QuaW5kZXhPZigibXNpZSIpIT0tMSkmJihYaW5oYS5hZ3QuaW5kZXhPZigib3BlcmEiKT09LTEpKTsKLVhpbmhhLmllX3ZlcnNpb249cGFyc2VGbG9hdChYaW5oYS5hZ3Quc3Vic3RyaW5nKFhpbmhhLmFndC5pbmRleE9mKCJtc2llIikrNSkpOwotWGluaGEuaXNfb3BlcmE9KFhpbmhhLmFndC5pbmRleE9mKCJvcGVyYSIpIT0tMSk7Ci1pZihYaW5oYS5pc19vcGVyYSYmWGluaGEuYWd0Lm1hdGNoKC9vcGVyYVtcLyBdKFswLTkuXSspLykpewotWGluaGEub3BlcmFfdmVyc2lvbj1wYXJzZUZsb2F0KFJlZ0V4cC4kMSk7Ci19ZWxzZXsKLVhpbmhhLm9wZXJhX3ZlcnNpb249MDsKLX0KLVhpbmhhLmlzX2todG1sPShYaW5oYS5hZ3QuaW5kZXhPZigia2h0bWwiKSE9LTEpOwotWGluaGEuaXNfd2Via2l0PShYaW5oYS5hZ3QuaW5kZXhPZigiYXBwbGV3ZWJraXQiKSE9LTEpOwotWGluaGEud2Via2l0X3ZlcnNpb249cGFyc2VJbnQobmF2aWdhdG9yLmFwcFZlcnNpb24ucmVwbGFjZSgvLio/QXBwbGVXZWJLaXRcLyhbXGRdKS4qPy8sIiQxIiksMTApOwotWGluaGEuaXNfc2FmYXJpPShYaW5oYS5hZ3QuaW5kZXhPZigic2FmYXJpIikhPS0xKTsKLVhpbmhhLmlzX2Nocm9tZT0oWGluaGEuYWd0LmluZGV4T2YoImNocm9tZSIpIT0tMSk7Ci1YaW5oYS5pc19tYWM9KFhpbmhhLmFndC5pbmRleE9mKCJtYWMiKSE9LTEpOwotWGluaGEuaXNfbWFjX2llPShYaW5oYS5pc19pZSYmWGluaGEuaXNfbWFjKTsKLVhpbmhhLmlzX3dpbl9pZT0oWGluaGEuaXNfaWUmJiFYaW5oYS5pc19tYWMpOwotWGluaGEuaXNfZ2Vja289KG5hdmlnYXRvci5wcm9kdWN0PT0iR2Vja28iKXx8WGluaGEuaXNfb3BlcmE7Ci1YaW5oYS5pc19yZWFsX2dlY2tvPShuYXZpZ2F0b3IucHJvZHVjdD09IkdlY2tvIiYmIVhpbmhhLmlzX3dlYmtpdCk7Ci1YaW5oYS5pc19mZjI9WGluaGEuaXNfcmVhbF9nZWNrbyYmcGFyc2VJbnQobmF2aWdhdG9yLnByb2R1Y3RTdWIuc3Vic3RyKDAsMTApLDEwKTwyMDA3MTIxMDsKLVhpbmhhLmlzUnVuTG9jYWxseT1kb2N1bWVudC5VUkwudG9Mb3dlckNhc2UoKS5zZWFyY2goL15maWxlOi8pIT0tMTsKLVhpbmhhLmlzX2Rlc2lnbk1vZGU9KHR5cGVvZiBkb2N1bWVudC5kZXNpZ25Nb2RlIT0idW5kZWZpbmVkIiYmIVhpbmhhLmlzX2llKTsKLVhpbmhhLmNoZWNrU3VwcG9ydGVkQnJvd3Nlcj1mdW5jdGlvbigpewotcmV0dXJuIFhpbmhhLmlzX3JlYWxfZ2Vja298fChYaW5oYS5pc19vcGVyYSYmWGluaGEub3BlcmFfdmVyc2lvbj49OS4yKXx8WGluaGEuaWVfdmVyc2lvbj49NS41fHxYaW5oYS53ZWJraXRfdmVyc2lvbj49NTIyOwotfTsKLVhpbmhhLmlzU3VwcG9ydGVkQnJvd3Nlcj1YaW5oYS5jaGVja1N1cHBvcnRlZEJyb3dzZXIoKTsKLWlmKFhpbmhhLmlzUnVuTG9jYWxseSYmWGluaGEuaXNTdXBwb3J0ZWRCcm93c2VyKXsKLWFsZXJ0KCJYaW5oYSAqbXVzdCogYmUgaW5zdGFsbGVkIG9uIGEgd2ViIHNlcnZlci4gTG9jYWxseSBvcGVuZWQgZmlsZXMgKHRob3NlIHRoYXQgdXNlIHRoZSBcImZpbGU6Ly9cIiBwcm90b2NvbCkgY2Fubm90IHByb3Blcmx5IGZ1bmN0aW9uLiBYaW5oYSB3aWxsIHRyeSB0byBpbml0aWFsaXplIGJ1dCBtYXkgbm90IGJlIGNvcnJlY3RseSBsb2FkZWQuIik7Ci19Ci1mdW5jdGlvbiBYaW5oYShfNixfNyl7Ci1pZighWGluaGEuaXNTdXBwb3J0ZWRCcm93c2VyKXsKLXJldHVybjsKLX0KLWlmKCFfNil7Ci10aHJvdyBuZXcgRXJyb3IoIlRyaWVkIHRvIGNyZWF0ZSBYaW5oYSB3aXRob3V0IHRleHRhcmVhIHNwZWNpZmllZC4iKTsKLX0KLWlmKHR5cGVvZiBfNz09InVuZGVmaW5lZCIpewotdGhpcy5jb25maWc9bmV3IFhpbmhhLkNvbmZpZygpOwotfWVsc2V7Ci10aGlzLmNvbmZpZz1fNzsKLX0KLWlmKHR5cGVvZiBfNiE9Im9iamVjdCIpewotXzY9WGluaGEuZ2V0RWxlbWVudEJ5SWQoInRleHRhcmVhIixfNik7Ci19Ci10aGlzLl90ZXh0QXJlYT1fNjsKLXRoaXMuX3RleHRBcmVhLnNwZWxsY2hlY2s9ZmFsc2U7Ci1YaW5oYS5mcmVlTGF0ZXIodGhpcywiX3RleHRBcmVhIik7Ci10aGlzLl9pbml0aWFsX3RhX3NpemU9e3c6XzYuc3R5bGUud2lkdGg/XzYuc3R5bGUud2lkdGg6KF82Lm9mZnNldFdpZHRoPyhfNi5vZmZzZXRXaWR0aCsicHgiKTooXzYuY29scysiZW0iKSksaDpfNi5zdHlsZS5oZWlnaHQ/XzYuc3R5bGUuaGVpZ2h0OihfNi5vZmZzZXRIZWlnaHQ/KF82Lm9mZnNldEhlaWdodCsicHgiKTooXzYucm93cysiZW0iKSl9OwotaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmdfIitfNi5pZCl8fHRoaXMuY29uZmlnLnNob3dMb2FkaW5nKXsKLWlmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZGluZ18iK182LmlkKSl7Ci1YaW5oYS5jcmVhdGVMb2FkaW5nTWVzc2FnZShfNik7Ci19Ci10aGlzLnNldExvYWRpbmdNZXNzYWdlKFhpbmhhLl9sYygiQ29uc3RydWN0aW5nIG9iamVjdCIpKTsKLX0KLXRoaXMuX2VkaXRNb2RlPSJ3eXNpd3lnIjsKLXRoaXMucGx1Z2lucz17fTsKLXRoaXMuX3RpbWVyVG9vbGJhcj1udWxsOwotdGhpcy5fdGltZXJVbmRvPW51bGw7Ci10aGlzLl91bmRvUXVldWU9W3RoaXMuY29uZmlnLnVuZG9TdGVwc107Ci10aGlzLl91bmRvUG9zPS0xOwotdGhpcy5fY3VzdG9tVW5kbz10cnVlOwotdGhpcy5fbWRvYz1kb2N1bWVudDsKLXRoaXMuZG9jdHlwZT0iIjsKLXRoaXMuX19odG1sYXJlYV9pZF9udW09X194aW5oYXMubGVuZ3RoOwotX194aW5oYXNbdGhpcy5fX2h0bWxhcmVhX2lkX251bV09dGhpczsKLXRoaXMuX25vdGlmeUxpc3RlbmVycz17fTsKLXZhciBfOD17cmlnaHQ6e29uOnRydWUsY29udGFpbmVyOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIikscGFuZWxzOltdfSxsZWZ0Ontvbjp0cnVlLGNvbnRhaW5lcjpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpLHBhbmVsczpbXX0sdG9wOntvbjp0cnVlLGNvbnRhaW5lcjpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpLHBhbmVsczpbXX0sYm90dG9tOntvbjp0cnVlLGNvbnRhaW5lcjpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpLHBhbmVsczpbXX19OwotZm9yKHZhciBpIGluIF84KXsKLWlmKCFfOFtpXS5jb250YWluZXIpewotY29udGludWU7Ci19Ci1fOFtpXS5kaXY9XzhbaV0uY29udGFpbmVyOwotXzhbaV0uY29udGFpbmVyLmNsYXNzTmFtZT0icGFuZWxzIHBhbmVsc18iK2k7Ci1YaW5oYS5mcmVlTGF0ZXIoXzhbaV0sImNvbnRhaW5lciIpOwotWGluaGEuZnJlZUxhdGVyKF84W2ldLCJkaXYiKTsKLX0KLXRoaXMuX3BhbmVscz1fODsKLXRoaXMuX3N0YXR1c0Jhcj1udWxsOwotdGhpcy5fc3RhdHVzQmFyVHJlZT1udWxsOwotdGhpcy5fc3RhdHVzQmFyVGV4dE1vZGU9bnVsbDsKLXRoaXMuX3N0YXR1c0Jhckl0ZW1zPVtdOwotdGhpcy5fZnJhbWV3b3JrPXt9OwotdGhpcy5faHRtbEFyZWE9bnVsbDsKLXRoaXMuX2lmcmFtZT1udWxsOwotdGhpcy5fZG9jPW51bGw7Ci10aGlzLl90b29sQmFyPXRoaXMuX3Rvb2xiYXI9bnVsbDsKLXRoaXMuX3Rvb2xiYXJPYmplY3RzPXt9OwotdGhpcy5wbHVnaW5zLkV2ZW50cz17bmFtZToiRXZlbnRzIixkZXZlbG9wZXI6IlRoZSBYaW5oYSBDb3JlIERldmVsb3BlciBUZWFtIixpbnN0YW5jZTpfNy5FdmVudHN9OwotfTsKLVhpbmhhLm9ubG9hZD1mdW5jdGlvbigpewotfTsKLVhpbmhhLmluaXQ9ZnVuY3Rpb24oKXsKLVhpbmhhLm9ubG9hZCgpOwotfTsKLVhpbmhhLlJFX3RhZ05hbWU9Lyg8XC98PClccyooW14gXHRcbj5dKykvaWc7Ci1YaW5oYS5SRV9kb2N0eXBlPS8oPCFkb2N0eXBlKCgufFxuKSo/KT4pXG4/L2k7Ci1YaW5oYS5SRV9oZWFkPS88aGVhZD4oKC58XG4pKj8pPFwvaGVhZD4vaTsKLVhpbmhhLlJFX2JvZHk9Lzxib2R5W14+XSo+KCgufFxufFxyfFx0KSo/KTxcL2JvZHk+L2k7Ci1YaW5oYS5SRV9TcGVjaWFscz0vKFtcL1xeJCorPy4oKXx7fVxbXF1dKS9nOwotWGluaGEuZXNjYXBlU3RyaW5nRm9yUmVnRXhwPWZ1bmN0aW9uKF9hKXsKLXJldHVybiBfYS5yZXBsYWNlKFhpbmhhLlJFX1NwZWNpYWxzLCJcXCQxIik7Ci19OwotWGluaGEuUkVfZW1haWw9L15bX2EtelxkXC1cLl17Myx9QFtfYS16XGRcLV17Mix9KFwuW19hLXpcZFwtXXsyLH0pKyQvaTsKLVhpbmhhLlJFX3VybD0vKGh0dHBzPzpcL1wvKT8oKFthLXowLTlfXSs6W2EtejAtOV9dK0ApP1thLXowLTlfXC1dezIsfShcLlthLXowLTlfXC1dezIsfSl7Mix9KDpbMC05XSspPyhcL1xTKykqKS9pOwotWGluaGEuQ29uZmlnPWZ1bmN0aW9uKCl7Ci10aGlzLnZlcnNpb249WGluaGEudmVyc2lvbi5SZXZpc2lvbjsKLXRoaXMud2lkdGg9ImF1dG8iOwotdGhpcy5oZWlnaHQ9ImF1dG8iOwotdGhpcy5zaXplSW5jbHVkZXNCYXJzPXRydWU7Ci10aGlzLnNpemVJbmNsdWRlc1BhbmVscz10cnVlOwotdGhpcy5wYW5lbF9kaW1lbnNpb25zPXtsZWZ0OiIyMDBweCIscmlnaHQ6IjIwMHB4Iix0b3A6IjEwMHB4Iixib3R0b206IjEwMHB4In07Ci10aGlzLmlmcmFtZVdpZHRoPW51bGw7Ci10aGlzLnN0YXR1c0Jhcj10cnVlOwotdGhpcy5odG1sYXJlYVBhc3RlPWZhbHNlOwotdGhpcy5tb3pQYXJhSGFuZGxlcj0iYmVzdCI7Ci10aGlzLmdldEh0bWxNZXRob2Q9IkRPTXdhbGsiOwotdGhpcy51bmRvU3RlcHM9MjA7Ci10aGlzLnVuZG9UaW1lb3V0PTUwMDsKLXRoaXMuY2hhbmdlSnVzdGlmeVdpdGhEaXJlY3Rpb249ZmFsc2U7Ci10aGlzLmZ1bGxQYWdlPWZhbHNlOwotdGhpcy5wYWdlU3R5bGU9IiI7Ci10aGlzLnBhZ2VTdHlsZVNoZWV0cz1bXTsKLXRoaXMuYmFzZUhyZWY9bnVsbDsKLXRoaXMuZXhwYW5kUmVsYXRpdmVVcmw9dHJ1ZTsKLXRoaXMuc3RyaXBCYXNlSHJlZj10cnVlOwotdGhpcy5zdHJpcFNlbGZOYW1lZEFuY2hvcnM9dHJ1ZTsKLXRoaXMub25seTdCaXRQcmludGFibGVzSW5VUkxzPXRydWU7Ci10aGlzLnNldmVuQml0Q2xlYW49ZmFsc2U7Ci10aGlzLnNwZWNpYWxSZXBsYWNlbWVudHM9e307Ci10aGlzLmlud2FyZEh0bWw9ZnVuY3Rpb24oX2IpewotcmV0dXJuIF9iOwotfTsKLXRoaXMub3V0d2FyZEh0bWw9ZnVuY3Rpb24oX2MpewotcmV0dXJuIF9jOwotfTsKLXRoaXMuYXV0b2ZvY3VzPWZhbHNlOwotdGhpcy5raWxsV29yZE9uUGFzdGU9dHJ1ZTsKLXRoaXMubWFrZUxpbmtTaG93c1RhcmdldD10cnVlOwotdGhpcy5jaGFyU2V0PSh0eXBlb2YgZG9jdW1lbnQuY2hhcmFjdGVyU2V0IT0idW5kZWZpbmVkIik/ZG9jdW1lbnQuY2hhcmFjdGVyU2V0OmRvY3VtZW50LmNoYXJzZXQ7Ci10aGlzLmJyb3dzZXJRdWlya3NNb2RlPW51bGw7Ci10aGlzLmltZ1VSTD0iaW1hZ2VzLyI7Ci10aGlzLnBvcHVwVVJMPSJwb3B1cHMvIjsKLXRoaXMuaHRtbFJlbW92ZVRhZ3M9bnVsbDsKLXRoaXMuZmxvd1Rvb2xiYXJzPXRydWU7Ci10aGlzLnRvb2xiYXJBbGlnbj0ibGVmdCI7Ci10aGlzLnNob3dGb250U3R5bGVzSW5Ub29sYmFyPWZhbHNlOwotdGhpcy5zaG93TG9hZGluZz1mYWxzZTsKLXRoaXMuc3RyaXBTY3JpcHRzPXRydWU7Ci10aGlzLmNvbnZlcnRVcmxzVG9MaW5rcz10cnVlOwotdGhpcy5jb2xvclBpY2tlckNlbGxTaXplPSI2cHgiOwotdGhpcy5jb2xvclBpY2tlckdyYW51bGFyaXR5PTE4OwotdGhpcy5jb2xvclBpY2tlclBvc2l0aW9uPSJib3R0b20scmlnaHQiOwotdGhpcy5jb2xvclBpY2tlcldlYlNhZmU9ZmFsc2U7Ci10aGlzLmNvbG9yUGlja2VyU2F2ZUNvbG9ycz0yMDsKLXRoaXMuZnVsbFNjcmVlbj1mYWxzZTsKLXRoaXMuZnVsbFNjcmVlbk1hcmdpbnM9WzAsMCwwLDBdOwotdGhpcy5mdWxsU2NyZWVuU2l6ZURvd25NZXRob2Q9ImluaXRTaXplIjsKLXRoaXMudG9vbGJhcj1bWyJwb3B1cGVkaXRvciJdLFsic2VwYXJhdG9yIiwiZm9ybWF0YmxvY2siLCJmb250bmFtZSIsImZvbnRzaXplIiwiYm9sZCIsIml0YWxpYyIsInVuZGVybGluZSIsInN0cmlrZXRocm91Z2giXSxbInNlcGFyYXRvciIsImZvcmVjb2xvciIsImhpbGl0ZWNvbG9yIiwidGV4dGluZGljYXRvciJdLFsic2VwYXJhdG9yIiwic3Vic2NyaXB0Iiwic3VwZXJzY3JpcHQiXSxbImxpbmVicmVhayIsInNlcGFyYXRvciIsImp1c3RpZnlsZWZ0IiwianVzdGlmeWNlbnRlciIsImp1c3RpZnlyaWdodCIsImp1c3RpZnlmdWxsIl0sWyJzZXBhcmF0b3IiLCJpbnNlcnRvcmRlcmVkbGlzdCIsImluc2VydHVub3JkZXJlZGxpc3QiLCJvdXRkZW50IiwiaW5kZW50Il0sWyJzZXBhcmF0b3IiLCJpbnNlcnRob3Jpem9udGFscnVsZSIsImNyZWF0ZWxpbmsiLCJpbnNlcnRpbWFnZSIsImluc2VydHRhYmxlIl0sWyJsaW5lYnJlYWsiLCJzZXBhcmF0b3IiLCJ1bmRvIiwicmVkbyIsInNlbGVjdGFsbCIsInByaW50Il0sKFhpbmhhLmlzX2dlY2tvP1tdOlsiY3V0IiwiY29weSIsInBhc3RlIiwib3ZlcndyaXRlIiwic2F2ZWFzIl0pLFsic2VwYXJhdG9yIiwia2lsbHdvcmQiLCJjbGVhcmZvbnRzIiwicmVtb3ZlZm9ybWF0IiwidG9nZ2xlYm9yZGVycyIsInNwbGl0YmxvY2siLCJsZWZ0dG9yaWdodCIsInJpZ2h0dG9sZWZ0Il0sWyJzZXBhcmF0b3IiLCJodG1sbW9kZSIsInNob3doZWxwIiwiYWJvdXQiXV07Ci10aGlzLmZvbnRuYW1lPXsiJiM4MjEyOyBmb250ICYjODIxMjsiOiIiLCJBcmlhbCI6ImFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmIiwiQ291cmllciBOZXciOiJjb3VyaWVyIG5ldyxjb3VyaWVyLG1vbm9zcGFjZSIsIkdlb3JnaWEiOiJnZW9yZ2lhLHRpbWVzIG5ldyByb21hbix0aW1lcyxzZXJpZiIsIlRhaG9tYSI6InRhaG9tYSxhcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZiIsIlRpbWVzIE5ldyBSb21hbiI6InRpbWVzIG5ldyByb21hbix0aW1lcyxzZXJpZiIsIlZlcmRhbmEiOiJ2ZXJkYW5hLGFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmIiwiaW1wYWN0IjoiaW1wYWN0IiwiV2luZ0RpbmdzIjoid2luZ2RpbmdzIn07Ci10aGlzLmZvbnRzaXplPXsiJiM4MjEyOyBzaXplICYjODIxMjsiOiIiLCIxICg4IHB0KSI6IjEiLCIyICgxMCBwdCkiOiIyIiwiMyAoMTIgcHQpIjoiMyIsIjQgKDE0IHB0KSI6IjQiLCI1ICgxOCBwdCkiOiI1IiwiNiAoMjQgcHQpIjoiNiIsIjcgKDM2IHB0KSI6IjcifTsKLXRoaXMuZm9ybWF0YmxvY2s9eyImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjoiIiwiSGVhZGluZyAxIjoiaDEiLCJIZWFkaW5nIDIiOiJoMiIsIkhlYWRpbmcgMyI6ImgzIiwiSGVhZGluZyA0IjoiaDQiLCJIZWFkaW5nIDUiOiJoNSIsIkhlYWRpbmcgNiI6Img2IiwiTm9ybWFsIjoicCIsIkFkZHJlc3MiOiJhZGRyZXNzIiwiRm9ybWF0dGVkIjoicHJlIn07Ci10aGlzLmRpYWxvZ09wdGlvbnM9eyJjZW50ZXJlZCI6dHJ1ZSwiZ3JleW91dCI6dHJ1ZSwiY2xvc2VPbkVzY2FwZSI6dHJ1ZX07Ci10aGlzLkV2ZW50cz17fTsKLXRoaXMuY3VzdG9tU2VsZWN0cz17fTsKLXRoaXMuZGVidWc9ZmFsc2U7Ci10aGlzLlVSSXM9eyJibGFuayI6X2VkaXRvcl91cmwrInBvcHVwcy9ibGFuay5odG1sIiwibGluayI6X2VkaXRvcl91cmwrIm1vZHVsZXMvQ3JlYXRlTGluay9saW5rLmh0bWwiLCJpbnNlcnRfaW1hZ2UiOl9lZGl0b3JfdXJsKyJtb2R1bGVzL0luc2VydEltYWdlL2luc2VydF9pbWFnZS5odG1sIiwiaW5zZXJ0X3RhYmxlIjpfZWRpdG9yX3VybCsibW9kdWxlcy9JbnNlcnRUYWJsZS9pbnNlcnRfdGFibGUuaHRtbCIsInNlbGVjdF9jb2xvciI6X2VkaXRvcl91cmwrInBvcHVwcy9zZWxlY3RfY29sb3IuaHRtbCIsImhlbHAiOl9lZGl0b3JfdXJsKyJwb3B1cHMvZWRpdG9yX2hlbHAuaHRtbCJ9OwotdGhpcy5idG5MaXN0PXtib2xkOlsiQm9sZCIsWGluaGEuX2xjKHtrZXk6ImJ1dHRvbl9ib2xkIixzdHJpbmc6WyJlZF9idXR0b25zX21haW4ucG5nIiwzLDJdfSwiWGluaGEiKSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoImJvbGQiKTsKLX1dLGl0YWxpYzpbIkl0YWxpYyIsWGluaGEuX2xjKHtrZXk6ImJ1dHRvbl9pdGFsaWMiLHN0cmluZzpbImVkX2J1dHRvbnNfbWFpbi5wbmciLDIsMl19LCJYaW5oYSIpLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgiaXRhbGljIik7Ci19XSx1bmRlcmxpbmU6WyJVbmRlcmxpbmUiLFhpbmhhLl9sYyh7a2V5OiJidXR0b25fdW5kZXJsaW5lIixzdHJpbmc6WyJlZF9idXR0b25zX21haW4ucG5nIiwyLDBdfSwiWGluaGEiKSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoInVuZGVybGluZSIpOwotfV0sc3RyaWtldGhyb3VnaDpbIlN0cmlrZXRocm91Z2giLFhpbmhhLl9sYyh7a2V5OiJidXR0b25fc3RyaWtldGhyb3VnaCIsc3RyaW5nOlsiZWRfYnV0dG9uc19tYWluLnBuZyIsMywwXX0sIlhpbmhhIiksZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJzdHJpa2V0aHJvdWdoIik7Ci19XSxzdWJzY3JpcHQ6WyJTdWJzY3JpcHQiLFhpbmhhLl9sYyh7a2V5OiJidXR0b25fc3Vic2NyaXB0IixzdHJpbmc6WyJlZF9idXR0b25zX21haW4ucG5nIiwzLDFdfSwiWGluaGEiKSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoInN1YnNjcmlwdCIpOwotfV0sc3VwZXJzY3JpcHQ6WyJTdXBlcnNjcmlwdCIsWGluaGEuX2xjKHtrZXk6ImJ1dHRvbl9zdXBlcnNjcmlwdCIsc3RyaW5nOlsiZWRfYnV0dG9uc19tYWluLnBuZyIsMiwxXX0sIlhpbmhhIiksZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJzdXBlcnNjcmlwdCIpOwotfV0sanVzdGlmeWxlZnQ6WyJKdXN0aWZ5IExlZnQiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsMCwwXSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoImp1c3RpZnlsZWZ0Iik7Ci19XSxqdXN0aWZ5Y2VudGVyOlsiSnVzdGlmeSBDZW50ZXIiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsMSwxXSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoImp1c3RpZnljZW50ZXIiKTsKLX1dLGp1c3RpZnlyaWdodDpbIkp1c3RpZnkgUmlnaHQiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsMSwwXSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoImp1c3RpZnlyaWdodCIpOwotfV0sanVzdGlmeWZ1bGw6WyJKdXN0aWZ5IEZ1bGwiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsMCwxXSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoImp1c3RpZnlmdWxsIik7Ci19XSxvcmRlcmVkbGlzdDpbIk9yZGVyZWQgTGlzdCIsWyJlZF9idXR0b25zX21haW4ucG5nIiwwLDNdLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgiaW5zZXJ0b3JkZXJlZGxpc3QiKTsKLX1dLHVub3JkZXJlZGxpc3Q6WyJCdWxsZXRlZCBMaXN0IixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDEsM10sZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJpbnNlcnR1bm9yZGVyZWRsaXN0Iik7Ci19XSxpbnNlcnRvcmRlcmVkbGlzdDpbIk9yZGVyZWQgTGlzdCIsWyJlZF9idXR0b25zX21haW4ucG5nIiwwLDNdLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgiaW5zZXJ0b3JkZXJlZGxpc3QiKTsKLX1dLGluc2VydHVub3JkZXJlZGxpc3Q6WyJCdWxsZXRlZCBMaXN0IixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDEsM10sZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJpbnNlcnR1bm9yZGVyZWRsaXN0Iik7Ci19XSxvdXRkZW50OlsiRGVjcmVhc2UgSW5kZW50IixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDEsMl0sZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJvdXRkZW50Iik7Ci19XSxpbmRlbnQ6WyJJbmNyZWFzZSBJbmRlbnQiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsMCwyXSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoImluZGVudCIpOwotfV0sZm9yZWNvbG9yOlsiRm9udCBDb2xvciIsWyJlZF9idXR0b25zX21haW4ucG5nIiwzLDNdLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgiZm9yZWNvbG9yIik7Ci19XSxoaWxpdGVjb2xvcjpbIkJhY2tncm91bmQgQ29sb3IiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsMiwzXSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoImhpbGl0ZWNvbG9yIik7Ci19XSx1bmRvOlsiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsNCwyXSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoInVuZG8iKTsKLX1dLHJlZG86WyJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiIsWyJlZF9idXR0b25zX21haW4ucG5nIiw1LDJdLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgicmVkbyIpOwotfV0sY3V0OlsiQ3V0IHNlbGVjdGlvbiIsWyJlZF9idXR0b25zX21haW4ucG5nIiw1LDBdLGZhbHNlLGZ1bmN0aW9uKGUsY21kKXsKLWUuZXhlY0NvbW1hbmQoY21kKTsKLX1dLGNvcHk6WyJDb3B5IHNlbGVjdGlvbiIsWyJlZF9idXR0b25zX21haW4ucG5nIiw0LDBdLGZhbHNlLGZ1bmN0aW9uKGUsY21kKXsKLWUuZXhlY0NvbW1hbmQoY21kKTsKLX1dLHBhc3RlOlsiUGFzdGUgZnJvbSBjbGlwYm9hcmQiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsNCwxXSxmYWxzZSxmdW5jdGlvbihlLGNtZCl7Ci1lLmV4ZWNDb21tYW5kKGNtZCk7Ci19XSxzZWxlY3RhbGw6WyJTZWxlY3QgYWxsIixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDMsNV0sZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJzZWxlY3RhbGwiKTsKLX1dLGluc2VydGhvcml6b250YWxydWxlOlsiSG9yaXpvbnRhbCBSdWxlIixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDYsMF0sZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJpbnNlcnRob3Jpem9udGFscnVsZSIpOwotfV0sY3JlYXRlbGluazpbIkluc2VydCBXZWIgTGluayIsWyJlZF9idXR0b25zX21haW4ucG5nIiw2LDFdLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5fY3JlYXRlTGluaygpOwotfV0saW5zZXJ0aW1hZ2U6WyJJbnNlcnQvTW9kaWZ5IEltYWdlIixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDYsM10sZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJpbnNlcnRpbWFnZSIpOwotfV0saW5zZXJ0dGFibGU6WyJJbnNlcnQgVGFibGUiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsNiwyXSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoImluc2VydHRhYmxlIik7Ci19XSxodG1sbW9kZTpbIlRvZ2dsZSBIVE1MIFNvdXJjZSIsWyJlZF9idXR0b25zX21haW4ucG5nIiw3LDBdLHRydWUsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJodG1sbW9kZSIpOwotfV0sdG9nZ2xlYm9yZGVyczpbIlRvZ2dsZSBCb3JkZXJzIixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDcsMl0sZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLl90b2dnbGVCb3JkZXJzKCk7Ci19XSxwcmludDpbIlByaW50IGRvY3VtZW50IixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDgsMV0sZmFsc2UsZnVuY3Rpb24oZSl7Ci1pZihYaW5oYS5pc19nZWNrbyl7Ci1lLl9pZnJhbWUuY29udGVudFdpbmRvdy5wcmludCgpOwotfWVsc2V7Ci1lLmZvY3VzRWRpdG9yKCk7Ci1wcmludCgpOwotfQotfV0sc2F2ZWFzOlsiU2F2ZSBhcyIsWyJlZF9idXR0b25zX21haW4ucG5nIiw5LDFdLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgic2F2ZWFzIixmYWxzZSwibm9uYW1lLmh0bSIpOwotfV0sYWJvdXQ6WyJBYm91dCB0aGlzIGVkaXRvciIsWyJlZF9idXR0b25zX21haW4ucG5nIiw4LDJdLHRydWUsZnVuY3Rpb24oZSl7Ci1lLmdldFBsdWdpbkluc3RhbmNlKCJBYm91dEJveCIpLnNob3coKTsKLX1dLHNob3doZWxwOlsiSGVscCB1c2luZyBlZGl0b3IiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsOSwyXSx0cnVlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgic2hvd2hlbHAiKTsKLX1dLHNwbGl0YmxvY2s6WyJTcGxpdCBCbG9jayIsImVkX3NwbGl0YmxvY2suZ2lmIixmYWxzZSxmdW5jdGlvbihlKXsKLWUuX3NwbGl0QmxvY2soKTsKLX1dLGxlZnR0b3JpZ2h0OlsiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsMCwyXSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoImxlZnR0b3JpZ2h0Iik7Ci19XSxyaWdodHRvbGVmdDpbIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDEsMl0sZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJyaWdodHRvbGVmdCIpOwotfV0sb3ZlcndyaXRlOlsiSW5zZXJ0L092ZXJ3cml0ZSIsImVkX292ZXJ3cml0ZS5naWYiLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgib3ZlcndyaXRlIik7Ci19XSx3b3JkY2xlYW46WyJNUyBXb3JkIENsZWFuZXIiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsNSwzXSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuX3dvcmRDbGVhbigpOwotfV0sY2xlYXJmb250czpbIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDUsNF0sdHJ1ZSxmdW5jdGlvbihlKXsKLWUuX2NsZWFyRm9udHMoKTsKLX1dLHJlbW92ZWZvcm1hdDpbIlJlbW92ZSBmb3JtYXR0aW5nIixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDQsNF0sZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJyZW1vdmVmb3JtYXQiKTsKLX1dLGtpbGx3b3JkOlsiQ2xlYXIgTVNPZmZpY2UgdGFncyIsWyJlZF9idXR0b25zX21haW4ucG5nIiw0LDNdLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgia2lsbHdvcmQiKTsKLX1dfTsKLXRoaXMuZGJsY2xpY2tMaXN0PXsiYSI6W2Z1bmN0aW9uKGUsXzNiKXsKLWUuX2NyZWF0ZUxpbmsoXzNiKTsKLX1dLCJpbWciOltmdW5jdGlvbihlLF8zZCl7Ci1lLl9pbnNlcnRJbWFnZShfM2QpOwotfV19OwotdGhpcy5pY29uTGlzdD17ZGlhbG9nQ2FwdGlvbjpfZWRpdG9yX3VybCsiaW1hZ2VzL3hpbmhhLXNtYWxsLWljb24uZ2lmIix3eXNpd3lnbW9kZTpbX2VkaXRvcl91cmwrImltYWdlcy9lZF9idXR0b25zX21haW4ucG5nIiw3LDFdfTsKLWZvcih2YXIgaSBpbiB0aGlzLmJ0bkxpc3QpewotdmFyIGJ0bj10aGlzLmJ0bkxpc3RbaV07Ci1pZih0eXBlb2YgYnRuIT0ib2JqZWN0Iil7Ci1jb250aW51ZTsKLX0KLWlmKHR5cGVvZiBidG5bMV0hPSJzdHJpbmciKXsKLWJ0blsxXVswXT1fZWRpdG9yX3VybCt0aGlzLmltZ1VSTCtidG5bMV1bMF07Ci19ZWxzZXsKLWJ0blsxXT1fZWRpdG9yX3VybCt0aGlzLmltZ1VSTCtidG5bMV07Ci19Ci1idG5bMF09WGluaGEuX2xjKGJ0blswXSk7Ci19Ci19OwotWGluaGEuQ29uZmlnLnByb3RvdHlwZS5yZWdpc3Rlckljb249ZnVuY3Rpb24oaWQsXzQxKXsKLXRoaXMuaWNvbkxpc3RbaWRdPV80MTsKLX07Ci1YaW5oYS5Db25maWcucHJvdG90eXBlLnJlZ2lzdGVyQnV0dG9uPWZ1bmN0aW9uKGlkLF80MyxfNDQsXzQ1LF80NixfNDcpewotaWYodHlwZW9mIGlkPT0ic3RyaW5nIil7Ci10aGlzLmJ0bkxpc3RbaWRdPVtfNDMsXzQ0LF80NSxfNDYsXzQ3XTsKLX1lbHNlewotaWYodHlwZW9mIGlkPT0ib2JqZWN0Iil7Ci10aGlzLmJ0bkxpc3RbaWQuaWRdPVtpZC50b29sdGlwLGlkLmltYWdlLGlkLnRleHRNb2RlLGlkLmFjdGlvbixpZC5jb250ZXh0XTsKLX1lbHNlewotYWxlcnQoIkVSUk9SIFtYaW5oYS5Db25maWc6OnJlZ2lzdGVyQnV0dG9uXTpcbmludmFsaWQgYXJndW1lbnRzIik7Ci1yZXR1cm4gZmFsc2U7Ci19Ci19Ci19OwotWGluaGEucHJvdG90eXBlLnJlZ2lzdGVyUGFuZWw9ZnVuY3Rpb24oXzQ4LF80OSl7Ci1pZighXzQ4KXsKLV80OD0icmlnaHQiOwotfQotdGhpcy5zZXRMb2FkaW5nTWVzc2FnZSgiUmVnaXN0ZXIgIitfNDgrIiBwYW5lbCAiKTsKLXZhciBfNGE9dGhpcy5hZGRQYW5lbChfNDgpOwotaWYoXzQ5KXsKLV80OS5kcmF3UGFuZWxJbihfNGEpOwotfQotfTsKLVhpbmhhLkNvbmZpZy5wcm90b3R5cGUucmVnaXN0ZXJEcm9wZG93bj1mdW5jdGlvbihfNGIpewotdGhpcy5jdXN0b21TZWxlY3RzW180Yi5pZF09XzRiOwotfTsKLVhpbmhhLkNvbmZpZy5wcm90b3R5cGUuaGlkZVNvbWVCdXR0b25zPWZ1bmN0aW9uKF80Yyl7Ci12YXIgXzRkPXRoaXMudG9vbGJhcjsKLWZvcih2YXIgaT1fNGQubGVuZ3RoOy0taT49MDspewotdmFyIF80Zj1fNGRbaV07Ci1mb3IodmFyIGo9XzRmLmxlbmd0aDstLWo+PTA7KXsKLWlmKF80Yy5pbmRleE9mKCIgIitfNGZbal0rIiAiKT49MCl7Ci12YXIgbGVuPTE7Ci1pZigvc2VwYXJhdG9yfHNwYWNlLy50ZXN0KF80ZltqKzFdKSl7Ci1sZW49MjsKLX0KLV80Zi5zcGxpY2UoaixsZW4pOwotfQotfQotfQotfTsKLVhpbmhhLkNvbmZpZy5wcm90b3R5cGUuYWRkVG9vbGJhckVsZW1lbnQ9ZnVuY3Rpb24oaWQsXzUzLF81NCl7Ci12YXIgXzU1PXRoaXMudG9vbGJhcjsKLXZhciBhLGksaixvLHNpZDsKLXZhciBfNWI9ZmFsc2U7Ci12YXIgXzVjPWZhbHNlOwotdmFyIF81ZD0wOwotdmFyIF81ZT0wOwotdmFyIF81Zj0wOwotdmFyIF82MD1mYWxzZTsKLXZhciBfNjE9ZmFsc2U7Ci1pZigoaWQmJnR5cGVvZiBpZD09Im9iamVjdCIpJiYoaWQuY29uc3RydWN0b3I9PUFycmF5KSl7Ci1fNWI9dHJ1ZTsKLX0KLWlmKChfNTMmJnR5cGVvZiBfNTM9PSJvYmplY3QiKSYmKF81My5jb25zdHJ1Y3Rvcj09QXJyYXkpKXsKLV81Yz10cnVlOwotXzVkPV81My5sZW5ndGg7Ci19Ci1pZihfNWIpewotZm9yKGk9MDtpPGlkLmxlbmd0aDsrK2kpewotaWYoKGlkW2ldIT0ic2VwYXJhdG9yIikmJihpZFtpXS5pbmRleE9mKCJUWyIpIT09MCkpewotc2lkPWlkW2ldOwotfQotfQotfWVsc2V7Ci1zaWQ9aWQ7Ci19Ci1mb3IoaT0wO2k8XzU1Lmxlbmd0aDsrK2kpewotYT1fNTVbaV07Ci1mb3Ioaj0wO2o8YS5sZW5ndGg7KytqKXsKLWlmKGFbal09PXNpZCl7Ci1yZXR1cm47Ci19Ci19Ci19Ci1mb3IoaT0wOyFfNjEmJmk8XzU1Lmxlbmd0aDsrK2kpewotYT1fNTVbaV07Ci1mb3Ioaj0wOyFfNjEmJmo8YS5sZW5ndGg7KytqKXsKLWlmKF81Yyl7Ci1mb3Iobz0wO288XzVkOysrbyl7Ci1pZihhW2pdPT1fNTNbb10pewotaWYobz09PTApewotXzYxPXRydWU7Ci1qLS07Ci1icmVhazsKLX1lbHNlewotXzVmPWk7Ci1fNWU9ajsKLV81ZD1vOwotfQotfQotfQotfWVsc2V7Ci1pZihhW2pdPT1fNTMpewotXzYxPXRydWU7Ci1icmVhazsKLX0KLX0KLX0KLX0KLWlmKCFfNjEmJl81Yyl7Ci1pZihfNTMubGVuZ3RoIT1fNWQpewotaj1fNWU7Ci1hPV81NVtfNWZdOwotXzYxPXRydWU7Ci19Ci19Ci1pZihfNjEpewotaWYoXzU0PT09MCl7Ci1pZihfNWIpewotYVtqXT1pZFtpZC5sZW5ndGgtMV07Ci1mb3IoaT1pZC5sZW5ndGgtMTstLWk+PTA7KXsKLWEuc3BsaWNlKGosMCxpZFtpXSk7Ci19Ci19ZWxzZXsKLWFbal09aWQ7Ci19Ci19ZWxzZXsKLWlmKF81NDwwKXsKLWo9aitfNTQrMTsKLX1lbHNlewotaWYoXzU0PjApewotaj1qK181NDsKLX0KLX0KLWlmKF81Yil7Ci1mb3IoaT1pZC5sZW5ndGg7LS1pPj0wOyl7Ci1hLnNwbGljZShqLDAsaWRbaV0pOwotfQotfWVsc2V7Ci1hLnNwbGljZShqLDAsaWQpOwotfQotfQotfWVsc2V7Ci1fNTVbMF0uc3BsaWNlKDAsMCwic2VwYXJhdG9yIik7Ci1pZihfNWIpewotZm9yKGk9aWQubGVuZ3RoOy0taT49MDspewotXzU1WzBdLnNwbGljZSgwLDAsaWRbaV0pOwotfQotfWVsc2V7Ci1fNTVbMF0uc3BsaWNlKDAsMCxpZCk7Ci19Ci19Ci19OwotWGluaGEuQ29uZmlnLnByb3RvdHlwZS5yZW1vdmVUb29sYmFyRWxlbWVudD1YaW5oYS5Db25maWcucHJvdG90eXBlLmhpZGVTb21lQnV0dG9uczsKLVhpbmhhLnJlcGxhY2VBbGw9ZnVuY3Rpb24oXzYyKXsKLXZhciB0YXM9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRleHRhcmVhIik7Ci1mb3IodmFyIGk9dGFzLmxlbmd0aDtpPjA7bmV3IFhpbmhhKHRhc1stLWldLF82MikuZ2VuZXJhdGUoKSl7Ci19Ci19OwotWGluaGEucmVwbGFjZT1mdW5jdGlvbihpZCxfNjYpewotdmFyIHRhPVhpbmhhLmdldEVsZW1lbnRCeUlkKCJ0ZXh0YXJlYSIsaWQpOwotcmV0dXJuIHRhP25ldyBYaW5oYSh0YSxfNjYpLmdlbmVyYXRlKCk6bnVsbDsKLX07Ci1YaW5oYS5wcm90b3R5cGUuX2NyZWF0ZVRvb2xiYXI9ZnVuY3Rpb24oKXsKLXRoaXMuc2V0TG9hZGluZ01lc3NhZ2UoWGluaGEuX2xjKCJDcmVhdGUgVG9vbGJhciIpKTsKLXZhciBfNjg9dGhpczsKLXZhciBfNjk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci10aGlzLl90b29sQmFyPXRoaXMuX3Rvb2xiYXI9XzY5OwotXzY5LmNsYXNzTmFtZT0idG9vbGJhciI7Ci1fNjkuYWxpZ249dGhpcy5jb25maWcudG9vbGJhckFsaWduOwotWGluaGEuZnJlZUxhdGVyKHRoaXMsIl90b29sQmFyIik7Ci1YaW5oYS5mcmVlTGF0ZXIodGhpcywiX3Rvb2xiYXIiKTsKLXZhciBfNmE9bnVsbDsKLXZhciBfNmI9e307Ci10aGlzLl90b29sYmFyT2JqZWN0cz1fNmI7Ci10aGlzLl9jcmVhdGVUb29sYmFyMShfNjgsXzY5LF82Yik7Ci1mdW5jdGlvbiBub3NlbGVjdChlKXsKLWlmKGUudGFnTmFtZSl7Ci1lLnVuc2VsZWN0YWJsZT0ib24iOwotfQotaWYoZS5jaGlsZE5vZGVzKXsKLWZvcih2YXIgaT0wO2k8ZS5jaGlsZE5vZGVzLmxlbmd0aDtpKyspewotaWYoZS50YWdOYW1lKXsKLW5vc2VsZWN0KGUuY2hpbGROb2RlcyhpKSk7Ci19Ci19Ci19Ci19OwotaWYoWGluaGEuaXNfaWUpewotbm9zZWxlY3QoXzY5KTsKLX0KLXRoaXMuX2h0bWxBcmVhLmFwcGVuZENoaWxkKF82OSk7Ci1yZXR1cm4gXzY5OwotfTsKLVhpbmhhLnByb3RvdHlwZS5fc2V0Q29uZmlnPWZ1bmN0aW9uKF82ZSl7Ci10aGlzLmNvbmZpZz1fNmU7Ci19OwotWGluaGEucHJvdG90eXBlLl9yZWJ1aWxkVG9vbGJhcj1mdW5jdGlvbigpewotdGhpcy5fY3JlYXRlVG9vbGJhcjEodGhpcyx0aGlzLl90b29sYmFyLHRoaXMuX3Rvb2xiYXJPYmplY3RzKTsKLWlmKFhpbmhhLl9jdXJyZW50bHlBY3RpdmVFZGl0b3IpewotaWYoWGluaGEuX2N1cnJlbnRseUFjdGl2ZUVkaXRvcj09dGhpcyl7Ci10aGlzLmFjdGl2YXRlRWRpdG9yKCk7Ci19Ci19ZWxzZXsKLXRoaXMuZGlzYWJsZVRvb2xiYXIoKTsKLX0KLX07Ci1YaW5oYS5fY3JlYXRlVG9vbGJhckJyZWFraW5nRWxlbWVudD1mdW5jdGlvbigpewotdmFyIGJyaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLWJyay5zdHlsZS5oZWlnaHQ9IjFweCI7Ci1icmsuc3R5bGUud2lkdGg9IjFweCI7Ci1icmsuc3R5bGUubGluZUhlaWdodD0iMXB4IjsKLWJyay5zdHlsZS5mb250U2l6ZT0iMXB4IjsKLWJyay5zdHlsZS5jbGVhcj0iYm90aCI7Ci1yZXR1cm4gYnJrOwotfTsKLVhpbmhhLnByb3RvdHlwZS5fY3JlYXRlVG9vbGJhcjE9ZnVuY3Rpb24oXzcwLF83MSxfNzIpewotd2hpbGUoXzcxLmxhc3RDaGlsZCl7Ci1fNzEucmVtb3ZlQ2hpbGQoXzcxLmxhc3RDaGlsZCk7Ci19Ci12YXIgXzczOwotaWYoXzcwLmNvbmZpZy5mbG93VG9vbGJhcnMpewotXzcxLmFwcGVuZENoaWxkKFhpbmhhLl9jcmVhdGVUb29sYmFyQnJlYWtpbmdFbGVtZW50KCkpOwotfQotZnVuY3Rpb24gbmV3TGluZSgpewotaWYodHlwZW9mIF83MyE9InVuZGVmaW5lZCImJl83My5jaGlsZE5vZGVzLmxlbmd0aD09PTApewotcmV0dXJuOwotfQotdmFyIF83ND1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpOwotXzc0LmJvcmRlcj0iMHB4IjsKLV83NC5jZWxsU3BhY2luZz0iMHB4IjsKLV83NC5jZWxsUGFkZGluZz0iMHB4IjsKLWlmKF83MC5jb25maWcuZmxvd1Rvb2xiYXJzKXsKLWlmKFhpbmhhLmlzX2llKXsKLV83NC5zdHlsZS5zdHlsZUZsb2F0PSJsZWZ0IjsKLX1lbHNlewotXzc0LnN0eWxlLmNzc0Zsb2F0PSJsZWZ0IjsKLX0KLX0KLV83MS5hcHBlbmRDaGlsZChfNzQpOwotdmFyIF83NT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpOwotXzc0LmFwcGVuZENoaWxkKF83NSk7Ci1fNzM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLV83NS5hcHBlbmRDaGlsZChfNzMpOwotXzc0LmNsYXNzTmFtZT0idG9vbGJhclJvdyI7Ci19OwotbmV3TGluZSgpOwotZnVuY3Rpb24gc2V0QnV0dG9uU3RhdHVzKGlkLF83Nyl7Ci12YXIgXzc4PXRoaXNbaWRdOwotdmFyIGVsPXRoaXMuZWxlbWVudDsKLWlmKF83OCE9Xzc3KXsKLXN3aXRjaChpZCl7Ci1jYXNlICJlbmFibGVkIjoKLWlmKF83Nyl7Ci1YaW5oYS5fcmVtb3ZlQ2xhc3MoZWwsImJ1dHRvbkRpc2FibGVkIik7Ci1lbC5kaXNhYmxlZD1mYWxzZTsKLX1lbHNlewotWGluaGEuX2FkZENsYXNzKGVsLCJidXR0b25EaXNhYmxlZCIpOwotZWwuZGlzYWJsZWQ9dHJ1ZTsKLX0KLWJyZWFrOwotY2FzZSAiYWN0aXZlIjoKLWlmKF83Nyl7Ci1YaW5oYS5fYWRkQ2xhc3MoZWwsImJ1dHRvblByZXNzZWQiKTsKLX1lbHNlewotWGluaGEuX3JlbW92ZUNsYXNzKGVsLCJidXR0b25QcmVzc2VkIik7Ci19Ci1icmVhazsKLX0KLXRoaXNbaWRdPV83NzsKLX0KLX07Ci1mdW5jdGlvbiBjcmVhdGVTZWxlY3QodHh0KXsKLXZhciBfN2I9bnVsbDsKLXZhciBlbD1udWxsOwotdmFyIGNtZD1udWxsOwotdmFyIF83ZT1fNzAuY29uZmlnLmN1c3RvbVNlbGVjdHM7Ci12YXIgXzdmPW51bGw7Ci12YXIgXzgwPSIiOwotc3dpdGNoKHR4dCl7Ci1jYXNlICJmb250c2l6ZSI6Ci1jYXNlICJmb250bmFtZSI6Ci1jYXNlICJmb3JtYXRibG9jayI6Ci1fN2I9XzcwLmNvbmZpZ1t0eHRdOwotY21kPXR4dDsKLWJyZWFrOwotZGVmYXVsdDoKLWNtZD10eHQ7Ci12YXIgXzgxPV83ZVtjbWRdOwotaWYodHlwZW9mIF84MSE9InVuZGVmaW5lZCIpewotXzdiPV84MS5vcHRpb25zOwotXzdmPV84MS5jb250ZXh0OwotaWYodHlwZW9mIF84MS50b29sdGlwIT0idW5kZWZpbmVkIil7Ci1fODA9XzgxLnRvb2x0aXA7Ci19Ci19ZWxzZXsKLWFsZXJ0KCJFUlJPUiBbY3JlYXRlU2VsZWN0XTpcbkNhbid0IGZpbmQgdGhlIHJlcXVlc3RlZCBkcm9wZG93biBkZWZpbml0aW9uIik7Ci19Ci1icmVhazsKLX0KLWlmKF83Yil7Ci1lbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLWVsLnRpdGxlPV84MDsKLWVsLnN0eWxlLndpZHRoPSJhdXRvIjsKLWVsLm5hbWU9dHh0OwotdmFyIG9iaj17bmFtZTp0eHQsZWxlbWVudDplbCxlbmFibGVkOnRydWUsdGV4dDpmYWxzZSxjbWQ6Y21kLHN0YXRlOnNldEJ1dHRvblN0YXR1cyxjb250ZXh0Ol83Zn07Ci1YaW5oYS5mcmVlTGF0ZXIob2JqKTsKLV83Mlt0eHRdPW9iajsKLWZvcih2YXIgaSBpbiBfN2IpewotaWYodHlwZW9mIF83YltpXSE9InN0cmluZyIpewotY29udGludWU7Ci19Ci12YXIgb3A9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7Ci1vcC5pbm5lckhUTUw9WGluaGEuX2xjKGkpOwotb3AudmFsdWU9XzdiW2ldOwotaWYodHh0PT0iZm9udG5hbWUiJiZfNzAuY29uZmlnLnNob3dGb250U3R5bGVzSW5Ub29sYmFyKXsKLW9wLnN0eWxlLmZvbnRGYW1pbHk9XzdiW2ldOwotfQotZWwuYXBwZW5kQ2hpbGQob3ApOwotfQotWGluaGEuX2FkZEV2ZW50KGVsLCJjaGFuZ2UiLGZ1bmN0aW9uKCl7Ci1fNzAuX2NvbWJvU2VsZWN0ZWQoZWwsdHh0KTsKLX0pOwotfQotcmV0dXJuIGVsOwotfTsKLWZ1bmN0aW9uIGNyZWF0ZUJ1dHRvbih0eHQpewotdmFyIGVsLGJ0bixvYmo9bnVsbDsKLXN3aXRjaCh0eHQpewotY2FzZSAic2VwYXJhdG9yIjoKLWlmKF83MC5jb25maWcuZmxvd1Rvb2xiYXJzKXsKLW5ld0xpbmUoKTsKLX0KLWVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotZWwuY2xhc3NOYW1lPSJzZXBhcmF0b3IiOwotYnJlYWs7Ci1jYXNlICJzcGFjZSI6Ci1lbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLWVsLmNsYXNzTmFtZT0ic3BhY2UiOwotYnJlYWs7Ci1jYXNlICJsaW5lYnJlYWsiOgotbmV3TGluZSgpOwotcmV0dXJuIGZhbHNlOwotY2FzZSAidGV4dGluZGljYXRvciI6Ci1lbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLWVsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJBIikpOwotZWwuY2xhc3NOYW1lPSJpbmRpY2F0b3IiOwotZWwudGl0bGU9WGluaGEuX2xjKCJDdXJyZW50IHN0eWxlIik7Ci1vYmo9e25hbWU6dHh0LGVsZW1lbnQ6ZWwsZW5hYmxlZDp0cnVlLGFjdGl2ZTpmYWxzZSx0ZXh0OmZhbHNlLGNtZDoidGV4dGluZGljYXRvciIsc3RhdGU6c2V0QnV0dG9uU3RhdHVzfTsKLVhpbmhhLmZyZWVMYXRlcihvYmopOwotXzcyW3R4dF09b2JqOwotYnJlYWs7Ci1kZWZhdWx0OgotYnRuPV83MC5jb25maWcuYnRuTGlzdFt0eHRdOwotfQotaWYoIWVsJiZidG4pewotZWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotZWwuc3R5bGUuZGlzcGxheT0iYmxvY2siOwotZWwuaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIjsKLWVsLnN0eWxlLnRleHREZWNvcmF0aW9uPSJub25lIjsKLWVsLnRpdGxlPWJ0blswXTsKLWVsLmNsYXNzTmFtZT0iYnV0dG9uIjsKLWVsLnN0eWxlLmRpcmVjdGlvbj0ibHRyIjsKLW9iaj17bmFtZTp0eHQsZWxlbWVudDplbCxlbmFibGVkOnRydWUsYWN0aXZlOmZhbHNlLHRleHQ6YnRuWzJdLGNtZDpidG5bM10sc3RhdGU6c2V0QnV0dG9uU3RhdHVzLGNvbnRleHQ6YnRuWzRdfHxudWxsfTsKLVhpbmhhLmZyZWVMYXRlcihlbCk7Ci1YaW5oYS5mcmVlTGF0ZXIob2JqKTsKLV83Mlt0eHRdPW9iajsKLWVsLm9uZHJhZz1mdW5jdGlvbigpewotcmV0dXJuIGZhbHNlOwotfTsKLVhpbmhhLl9hZGRFdmVudChlbCwibW91c2VvdXQiLGZ1bmN0aW9uKGV2KXsKLWlmKG9iai5lbmFibGVkKXsKLVhpbmhhLl9yZW1vdmVDbGFzcyhlbCwiYnV0dG9uQWN0aXZlIik7Ci1pZihvYmouYWN0aXZlKXsKLVhpbmhhLl9hZGRDbGFzcyhlbCwiYnV0dG9uUHJlc3NlZCIpOwotfQotfQotfSk7Ci1YaW5oYS5fYWRkRXZlbnQoZWwsIm1vdXNlZG93biIsZnVuY3Rpb24oZXYpewotaWYob2JqLmVuYWJsZWQpewotWGluaGEuX2FkZENsYXNzKGVsLCJidXR0b25BY3RpdmUiKTsKLVhpbmhhLl9yZW1vdmVDbGFzcyhlbCwiYnV0dG9uUHJlc3NlZCIpOwotWGluaGEuX3N0b3BFdmVudChYaW5oYS5pc19pZT93aW5kb3cuZXZlbnQ6ZXYpOwotfQotfSk7Ci1YaW5oYS5fYWRkRXZlbnQoZWwsImNsaWNrIixmdW5jdGlvbihldil7Ci1ldj1ldnx8d2luZG93LmV2ZW50OwotXzcwLmJ0bkNsaWNrRXZlbnQ9e2NsaWVudFg6ZXYuY2xpZW50WCxjbGllbnRZOmV2LmNsaWVudFl9OwotaWYob2JqLmVuYWJsZWQpewotWGluaGEuX3JlbW92ZUNsYXNzKGVsLCJidXR0b25BY3RpdmUiKTsKLWlmKFhpbmhhLmlzX2dlY2tvKXsKLV83MC5hY3RpdmF0ZUVkaXRvcigpOwotfQotb2JqLmNtZChfNzAsb2JqLm5hbWUsb2JqLGV2KTsKLVhpbmhhLl9zdG9wRXZlbnQoZXYpOwotfQotfSk7Ci12YXIgXzhjPVhpbmhhLm1ha2VCdG5JbWcoYnRuWzFdKTsKLXZhciBpbWc9XzhjLmZpcnN0Q2hpbGQ7Ci1YaW5oYS5mcmVlTGF0ZXIoXzhjKTsKLVhpbmhhLmZyZWVMYXRlcihpbWcpOwotZWwuYXBwZW5kQ2hpbGQoXzhjKTsKLW9iai5pbWdlbD1pbWc7Ci1vYmouc3dhcEltYWdlPWZ1bmN0aW9uKF84ZSl7Ci1pZih0eXBlb2YgXzhlIT0ic3RyaW5nIil7Ci1pbWcuc3JjPV84ZVswXTsKLWltZy5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiOwotaW1nLnN0eWxlLnRvcD1fOGVbMl0/KCItIisoMTgqKF84ZVsyXSsxKSkrInB4Iik6Ii0xOHB4IjsKLWltZy5zdHlsZS5sZWZ0PV84ZVsxXT8oIi0iKygxOCooXzhlWzFdKzEpKSsicHgiKToiLTE4cHgiOwotfWVsc2V7Ci1vYmouaW1nZWwuc3JjPV84ZTsKLWltZy5zdHlsZS50b3A9IjBweCI7Ci1pbWcuc3R5bGUubGVmdD0iMHB4IjsKLX0KLX07Ci19ZWxzZXsKLWlmKCFlbCl7Ci1lbD1jcmVhdGVTZWxlY3QodHh0KTsKLX0KLX0KLXJldHVybiBlbDsKLX07Ci12YXIgXzhmPXRydWU7Ci1mb3IodmFyIGk9MDtpPHRoaXMuY29uZmlnLnRvb2xiYXIubGVuZ3RoOysraSl7Ci1pZighXzhmKXsKLX1lbHNlewotXzhmPWZhbHNlOwotfQotaWYodGhpcy5jb25maWcudG9vbGJhcltpXT09PW51bGwpewotdGhpcy5jb25maWcudG9vbGJhcltpXT1bInNlcGFyYXRvciJdOwotfQotdmFyIF85MT10aGlzLmNvbmZpZy50b29sYmFyW2ldOwotZm9yKHZhciBqPTA7ajxfOTEubGVuZ3RoOysrail7Ci12YXIgXzkzPV85MVtqXTsKLXZhciBfOTQ7Ci1pZigvXihbSVRdKVxbKC4qPylcXS8udGVzdChfOTMpKXsKLXZhciBfOTU9UmVnRXhwLiQxPT0iSSI7Ci12YXIgXzk2PVJlZ0V4cC4kMjsKLWlmKF85NSl7Ci1fOTY9WGluaGEuX2xjKF85Nik7Ci19Ci1fOTQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLV83My5hcHBlbmRDaGlsZChfOTQpOwotXzk0LmNsYXNzTmFtZT0ibGFiZWwiOwotXzk0LmlubmVySFRNTD1fOTY7Ci19ZWxzZXsKLWlmKHR5cGVvZiBfOTMhPSJmdW5jdGlvbiIpewotdmFyIF85Nz1jcmVhdGVCdXR0b24oXzkzKTsKLWlmKF85Nyl7Ci1fOTQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLV85NC5jbGFzc05hbWU9InRvb2xiYXJFbGVtZW50IjsKLV83My5hcHBlbmRDaGlsZChfOTQpOwotXzk0LmFwcGVuZENoaWxkKF85Nyk7Ci19ZWxzZXsKLWlmKF85Nz09PW51bGwpewotYWxlcnQoIkZJWE1FOiBVbmtub3duIHRvb2xiYXIgaXRlbTogIitfOTMpOwotfQotfQotfQotfQotfQotfQotaWYoXzcwLmNvbmZpZy5mbG93VG9vbGJhcnMpewotXzcxLmFwcGVuZENoaWxkKFhpbmhhLl9jcmVhdGVUb29sYmFyQnJlYWtpbmdFbGVtZW50KCkpOwotfQotcmV0dXJuIF83MTsKLX07Ci1YaW5oYS5tYWtlQnRuSW1nPWZ1bmN0aW9uKF85OCxkb2MpewotaWYoIWRvYyl7Ci1kb2M9ZG9jdW1lbnQ7Ci19Ci1pZighZG9jLl94aW5oYUltZ0NhY2hlKXsKLWRvYy5feGluaGFJbWdDYWNoZT17fTsKLVhpbmhhLmZyZWVMYXRlcihkb2MuX3hpbmhhSW1nQ2FjaGUpOwotfQotdmFyIF85YT1udWxsOwotaWYoWGluaGEuaXNfaWUmJigoIWRvYy5jb21wYXRNb2RlKXx8KGRvYy5jb21wYXRNb2RlJiZkb2MuY29tcGF0TW9kZT09IkJhY2tDb21wYXQiKSkpewotXzlhPWRvYy5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci19ZWxzZXsKLV85YT1kb2MuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci1fOWEuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIjsKLX0KLV85YS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIjsKLV85YS5zdHlsZS53aWR0aD0iMThweCI7Ci1fOWEuc3R5bGUuaGVpZ2h0PSIxOHB4IjsKLV85YS5jbGFzc05hbWU9ImJ1dHRvbkltYWdlQ29udGFpbmVyIjsKLXZhciBpbWc9bnVsbDsKLWlmKHR5cGVvZiBfOTg9PSJzdHJpbmciKXsKLWlmKGRvYy5feGluaGFJbWdDYWNoZVtfOThdKXsKLWltZz1kb2MuX3hpbmhhSW1nQ2FjaGVbXzk4XS5jbG9uZU5vZGUoKTsKLX1lbHNlewotaWYoWGluaGEuaWVfdmVyc2lvbjw3JiYvXC5wbmckLy50ZXN0KF85OFswXSkpewotaW1nPWRvYy5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci1pbWcuc3R5bGUuZGlzcGxheT0iYmxvY2siOwotaW1nLnN0eWxlLndpZHRoPSIxOHB4IjsKLWltZy5zdHlsZS5oZWlnaHQ9IjE4cHgiOwotaW1nLnN0eWxlLmZpbHRlcj0icHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPVwiIitfOTgrIlwiKSI7Ci1pbWcudW5zZWxlY3RhYmxlPSJvbiI7Ci19ZWxzZXsKLWltZz1kb2MuY3JlYXRlRWxlbWVudCgiaW1nIik7Ci1pbWcuc3JjPV85ODsKLX0KLX0KLX1lbHNlewotaWYoZG9jLl94aW5oYUltZ0NhY2hlW185OFswXV0pewotaW1nPWRvYy5feGluaGFJbWdDYWNoZVtfOThbMF1dLmNsb25lTm9kZSgpOwotfWVsc2V7Ci1pZihYaW5oYS5pZV92ZXJzaW9uPDcmJi9cLnBuZyQvLnRlc3QoXzk4WzBdKSl7Ci1pbWc9ZG9jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLWltZy5zdHlsZS5kaXNwbGF5PSJibG9jayI7Ci1pbWcuc3R5bGUud2lkdGg9IjE4cHgiOwotaW1nLnN0eWxlLmhlaWdodD0iMThweCI7Ci1pbWcuc3R5bGUuZmlsdGVyPSJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9XCIiK185OFswXSsiXCIpIjsKLWltZy51bnNlbGVjdGFibGU9Im9uIjsKLX1lbHNlewotaW1nPWRvYy5jcmVhdGVFbGVtZW50KCJpbWciKTsKLWltZy5zcmM9Xzk4WzBdOwotfQotaW1nLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSI7Ci19Ci1pbWcuc3R5bGUudG9wPV85OFsyXT8oIi0iKygxOCooXzk4WzJdKzEpKSsicHgiKToiLTE4cHgiOwotaW1nLnN0eWxlLmxlZnQ9Xzk4WzFdPygiLSIrKDE4KihfOThbMV0rMSkpKyJweCIpOiItMThweCI7Ci19Ci1fOWEuYXBwZW5kQ2hpbGQoaW1nKTsKLXJldHVybiBfOWE7Ci19OwotWGluaGEucHJvdG90eXBlLl9jcmVhdGVTdGF0dXNCYXI9ZnVuY3Rpb24oKXsKLXRoaXMuc2V0TG9hZGluZ01lc3NhZ2UoWGluaGEuX2xjKCJDcmVhdGUgU3RhdHVzYmFyIikpOwotdmFyIF85Yz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLV85Yy5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiOwotXzljLmNsYXNzTmFtZT0ic3RhdHVzQmFyIjsKLV85Yy5zdHlsZS53aWR0aD0iMTAwJSI7Ci1YaW5oYS5mcmVlTGF0ZXIodGhpcywiX3N0YXR1c0JhciIpOwotdmFyIF85ZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLV85ZC5jbGFzc05hbWU9InN0YXR1c0JhcldpZGdldENvbnRhaW5lciI7Ci1fOWQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIjsKLV85ZC5zdHlsZS5yaWdodD0iMCI7Ci1fOWQuc3R5bGUudG9wPSIwIjsKLV85ZC5zdHlsZS5wYWRkaW5nPSIzcHggM3B4IDNweCAxMHB4IjsKLV85Yy5hcHBlbmRDaGlsZChfOWQpOwotdmFyIF85ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci1fOWUuY2xhc3NOYW1lPSJzdGF0dXNCYXJUcmVlIjsKLV85ZS5pbm5lckhUTUw9WGluaGEuX2xjKCJQYXRoIikrIjogIjsKLXRoaXMuX3N0YXR1c0JhclRyZWU9XzllOwotWGluaGEuZnJlZUxhdGVyKHRoaXMsIl9zdGF0dXNCYXJUcmVlIik7Ci1fOWMuYXBwZW5kQ2hpbGQoXzllKTsKLXZhciBfOWY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotXzlmLmlubmVySFRNTD1YaW5oYS5odG1sRW5jb2RlKFhpbmhhLl9sYygiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIikpOwotXzlmLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwotdGhpcy5fc3RhdHVzQmFyVGV4dE1vZGU9XzlmOwotWGluaGEuZnJlZUxhdGVyKHRoaXMsIl9zdGF0dXNCYXJUZXh0TW9kZSIpOwotXzljLmFwcGVuZENoaWxkKF85Zik7Ci1fOWMuc3R5bGUud2hpdGVTcGFjZT0ibm93cmFwIjsKLXZhciBfYTA9dGhpczsKLXRoaXMubm90aWZ5T24oImJlZm9yZV9yZXNpemUiLGZ1bmN0aW9uKGV2dCxfYTIpewotX2EwLl9zdGF0dXNCYXIuc3R5bGUud2lkdGg9bnVsbDsKLX0pOwotdGhpcy5ub3RpZnlPbigicmVzaXplIixmdW5jdGlvbihldnQsX2E0KXsKLWlmKFhpbmhhLmlzX2llJiZYaW5oYS5pZV92ZXJzaW9uPT02KXsKLV9hMC5fc3RhdHVzQmFyLnN0eWxlLndpZHRoPSIxMDAlIjsKLX1lbHNlewotdmFyIF9hNT1fYTRbIndpZHRoIl07Ci1fYTAuX3N0YXR1c0Jhci5zdHlsZS53aWR0aD1fYTUrInB4IjsKLX0KLX0pOwotdGhpcy5ub3RpZnlPbigibW9kZWNoYW5nZSIsZnVuY3Rpb24oZXZ0LF9hNyl7Ci1mb3IodmFyIGkgaW4gX2EwLl9zdGF0dXNXaWRnZXRzKXsKLXZhciBfYTk9X2EwLl9zdGF0dXNXaWRnZXRzW2ldOwotZm9yKHZhciBfYWE9MDtfYWE8X2E5Lm1vZGVzLmxlbmd0aDtfYWErKyl7Ci1pZihfYTkubW9kZXNbX2FhXT09X2E3Lm1vZGUpewotdmFyIF9hYj10cnVlOwotfQotfQotaWYodHlwZW9mIF9hYj09InVuZGVmaW5lZCIpewotX2E5LmJsb2NrLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwotfWVsc2V7Ci1fYTkuYmxvY2suc3R5bGUuZGlzcGxheT0iIjsKLX0KLX0KLX0pOwotaWYoIXRoaXMuY29uZmlnLnN0YXR1c0Jhcil7Ci1fOWMuc3R5bGUuZGlzcGxheT0ibm9uZSI7Ci19Ci1yZXR1cm4gXzljOwotfTsKLVhpbmhhLnByb3RvdHlwZS5yZWdpc3RlclN0YXR1c1dpZGdldD1mdW5jdGlvbihpZCxfYWQpewotX2FkPV9hZHx8WyJ3eXNpd3lnIl07Ci1pZighdGhpcy5fc3RhdHVzV2lkZ2V0cyl7Ci10aGlzLl9zdGF0dXNXaWRnZXRzPXt9OwotfQotdmFyIF9hZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLV9hZS5jbGFzc05hbWU9InN0YXR1c0JhcldpZGdldCI7Ci1fYWU9dGhpcy5fc3RhdHVzQmFyLmZpcnN0Q2hpbGQuYXBwZW5kQ2hpbGQoX2FlKTsKLXZhciBfYWY9ZmFsc2U7Ci1mb3IodmFyIGk9MDtpPF9hZC5sZW5ndGg7aSsrKXsKLWlmKF9hZFtpXT09dGhpcy5fZWRpdE1vZGUpewotX2FmPXRydWU7Ci19Ci19Ci1fYWUuc3R5bGUuZGlzcGxheT1fYWY9PXRydWU/IiI6Im5vbmUiOwotdGhpcy5fc3RhdHVzV2lkZ2V0c1tpZF09e2Jsb2NrOl9hZSxtb2RlczpfYWR9OwotcmV0dXJuIF9hZTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oKXsKLWlmKCFYaW5oYS5pc1N1cHBvcnRlZEJyb3dzZXIpewotcmV0dXJuOwotfQotdmFyIGk7Ci12YXIgX2IyPXRoaXM7Ci12YXIgdXJsOwotdmFyIF9iND1mYWxzZTsKLXZhciBfYjU9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKTsKLWlmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiWGluaGFDb3JlRGVzaWduIikpewotX2VkaXRvcl9jc3M9KHR5cGVvZiBfZWRpdG9yX2Nzcz09InN0cmluZyIpP19lZGl0b3JfY3NzOiJYaW5oYS5jc3MiOwotZm9yKGk9MDtpPF9iNS5sZW5ndGg7aSsrKXsKLWlmKChfYjVbaV0ucmVsPT0ic3R5bGVzaGVldCIpJiYoX2I1W2ldLmhyZWY9PV9lZGl0b3JfdXJsK19lZGl0b3JfY3NzKSl7Ci1fYjQ9dHJ1ZTsKLX0KLX0KLWlmKCFfYjQpewotWGluaGEubG9hZFN0eWxlKF9lZGl0b3JfY3NzLG51bGwsIlhpbmhhQ29yZURlc2lnbiIsdHJ1ZSk7Ci19Ci19Ci1pZihfZWRpdG9yX3NraW4hPT0iIiYmIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJYaW5oYVNraW4iKSl7Ci1fYjQ9ZmFsc2U7Ci1mb3IoaT0wO2k8X2I1Lmxlbmd0aDtpKyspewotaWYoKF9iNVtpXS5yZWw9PSJzdHlsZXNoZWV0IikmJihfYjVbaV0uaHJlZj09X2VkaXRvcl91cmwrInNraW5zLyIrX2VkaXRvcl9za2luKyIvc2tpbi5jc3MiKSl7Ci1fYjQ9dHJ1ZTsKLX0KLX0KLWlmKCFfYjQpewotWGluaGEubG9hZFN0eWxlKCJza2lucy8iK19lZGl0b3Jfc2tpbisiL3NraW4uY3NzIixudWxsLCJYaW5oYVNraW4iKTsKLX0KLX0KLXZhciBfYjY9ZnVuY3Rpb24oKXsKLV9iMi5nZW5lcmF0ZSgpOwotfTsKLWlmKFhpbmhhLmlzX2llKXsKLXVybD1fZWRpdG9yX3VybCsibW9kdWxlcy9JbnRlcm5ldEV4cGxvcmVyL0ludGVybmV0RXhwbG9yZXIuanMiOwotaWYoIVhpbmhhLmxvYWRQbHVnaW5zKFt7cGx1Z2luOiJJbnRlcm5ldEV4cGxvcmVyIix1cmw6dXJsfV0sX2I2KSl7Ci1yZXR1cm4gZmFsc2U7Ci19Ci1pZighdGhpcy5wbHVnaW5zLkludGVybmV0RXhwbG9yZXIpewotX2IyLl9icm93c2VyU3BlY2lmaWNQbHVnaW49X2IyLnJlZ2lzdGVyUGx1Z2luKCJJbnRlcm5ldEV4cGxvcmVyIik7Ci19Ci19ZWxzZXsKLWlmKFhpbmhhLmlzX3dlYmtpdCl7Ci11cmw9X2VkaXRvcl91cmwrIm1vZHVsZXMvV2ViS2l0L1dlYktpdC5qcyI7Ci1pZighWGluaGEubG9hZFBsdWdpbnMoW3twbHVnaW46IldlYktpdCIsdXJsOnVybH1dLF9iNikpewotcmV0dXJuIGZhbHNlOwotfQotaWYoIXRoaXMucGx1Z2lucy5XZWJraXQpewotX2IyLl9icm93c2VyU3BlY2lmaWNQbHVnaW49X2IyLnJlZ2lzdGVyUGx1Z2luKCJXZWJLaXQiKTsKLX0KLX1lbHNlewotaWYoWGluaGEuaXNfb3BlcmEpewotdXJsPV9lZGl0b3JfdXJsKyJtb2R1bGVzL09wZXJhL09wZXJhLmpzIjsKLWlmKCFYaW5oYS5sb2FkUGx1Z2lucyhbe3BsdWdpbjoiT3BlcmEiLHVybDp1cmx9XSxfYjYpKXsKLXJldHVybiBmYWxzZTsKLX0KLWlmKCF0aGlzLnBsdWdpbnMuT3BlcmEpewotX2IyLl9icm93c2VyU3BlY2lmaWNQbHVnaW49X2IyLnJlZ2lzdGVyUGx1Z2luKCJPcGVyYSIpOwotfQotfWVsc2V7Ci1pZihYaW5oYS5pc19nZWNrbyl7Ci11cmw9X2VkaXRvcl91cmwrIm1vZHVsZXMvR2Vja28vR2Vja28uanMiOwotaWYoIVhpbmhhLmxvYWRQbHVnaW5zKFt7cGx1Z2luOiJHZWNrbyIsdXJsOnVybH1dLF9iNikpewotcmV0dXJuIGZhbHNlOwotfQotaWYoIXRoaXMucGx1Z2lucy5HZWNrbyl7Ci1fYjIuX2Jyb3dzZXJTcGVjaWZpY1BsdWdpbj1fYjIucmVnaXN0ZXJQbHVnaW4oIkdlY2tvIik7Ci19Ci19Ci19Ci19Ci19Ci1pZih0eXBlb2YgRGlhbG9nPT0idW5kZWZpbmVkIiYmIVhpbmhhLl9sb2FkYmFjayhfZWRpdG9yX3VybCsibW9kdWxlcy9EaWFsb2dzL2RpYWxvZy5qcyIsX2I2LHRoaXMpKXsKLXJldHVybiBmYWxzZTsKLX0KLWlmKHR5cGVvZiBYaW5oYS5EaWFsb2c9PSJ1bmRlZmluZWQiJiYhWGluaGEuX2xvYWRiYWNrKF9lZGl0b3JfdXJsKyJtb2R1bGVzL0RpYWxvZ3MvWGluaGFEaWFsb2cuanMiLF9iNix0aGlzKSl7Ci1yZXR1cm4gZmFsc2U7Ci19Ci11cmw9X2VkaXRvcl91cmwrIm1vZHVsZXMvRnVsbFNjcmVlbi9mdWxsLXNjcmVlbi5qcyI7Ci1pZighWGluaGEubG9hZFBsdWdpbnMoW3twbHVnaW46IkZ1bGxTY3JlZW4iLHVybDp1cmx9XSxfYjYpKXsKLXJldHVybiBmYWxzZTsKLX0KLXVybD1fZWRpdG9yX3VybCsibW9kdWxlcy9Db2xvclBpY2tlci9Db2xvclBpY2tlci5qcyI7Ci1pZighWGluaGEubG9hZFBsdWdpbnMoW3twbHVnaW46IkNvbG9yUGlja2VyIix1cmw6dXJsfV0sX2I2KSl7Ci1yZXR1cm4gZmFsc2U7Ci19ZWxzZXsKLWlmKHR5cGVvZiBYaW5oYS5nZXRQbHVnaW5Db25zdHJ1Y3RvcigiQ29sb3JQaWNrZXIiKSE9InVuZGVmaW5lZCImJiF0aGlzLnBsdWdpbnMuY29sb3JQaWNrZXIpewotX2IyLnJlZ2lzdGVyUGx1Z2luKCJDb2xvclBpY2tlciIpOwotfQotfQotdmFyIF9iNz1fYjIuY29uZmlnLnRvb2xiYXI7Ci1mb3IoaT1fYjcubGVuZ3RoOy0taT49MDspewotZm9yKHZhciBqPV9iN1tpXS5sZW5ndGg7LS1qPj0wOyl7Ci1zd2l0Y2goX2I3W2ldW2pdKXsKLWNhc2UgInBvcHVwZWRpdG9yIjoKLWlmKCF0aGlzLnBsdWdpbnMuRnVsbFNjcmVlbil7Ci1fYjIucmVnaXN0ZXJQbHVnaW4oIkZ1bGxTY3JlZW4iKTsKLX0KLWJyZWFrOwotY2FzZSAiaW5zZXJ0aW1hZ2UiOgotdXJsPV9lZGl0b3JfdXJsKyJtb2R1bGVzL0luc2VydEltYWdlL2luc2VydF9pbWFnZS5qcyI7Ci1pZih0eXBlb2YgWGluaGEucHJvdG90eXBlLl9pbnNlcnRJbWFnZT09InVuZGVmaW5lZCImJiFYaW5oYS5sb2FkUGx1Z2lucyhbe3BsdWdpbjoiSW5zZXJ0SW1hZ2UiLHVybDp1cmx9XSxfYjYpKXsKLXJldHVybiBmYWxzZTsKLX1lbHNlewotaWYodHlwZW9mIFhpbmhhLmdldFBsdWdpbkNvbnN0cnVjdG9yKCJJbnNlcnRJbWFnZSIpIT0idW5kZWZpbmVkIiYmIXRoaXMucGx1Z2lucy5JbnNlcnRJbWFnZSl7Ci1fYjIucmVnaXN0ZXJQbHVnaW4oIkluc2VydEltYWdlIik7Ci19Ci19Ci1icmVhazsKLWNhc2UgImNyZWF0ZWxpbmsiOgotdXJsPV9lZGl0b3JfdXJsKyJtb2R1bGVzL0NyZWF0ZUxpbmsvbGluay5qcyI7Ci1pZih0eXBlb2YgWGluaGEuZ2V0UGx1Z2luQ29uc3RydWN0b3IoIkxpbmtlciIpPT0idW5kZWZpbmVkIiYmIVhpbmhhLmxvYWRQbHVnaW5zKFt7cGx1Z2luOiJDcmVhdGVMaW5rIix1cmw6dXJsfV0sX2I2KSl7Ci1yZXR1cm4gZmFsc2U7Ci19ZWxzZXsKLWlmKHR5cGVvZiBYaW5oYS5nZXRQbHVnaW5Db25zdHJ1Y3RvcigiQ3JlYXRlTGluayIpIT0idW5kZWZpbmVkIiYmIXRoaXMucGx1Z2lucy5DcmVhdGVMaW5rKXsKLV9iMi5yZWdpc3RlclBsdWdpbigiQ3JlYXRlTGluayIpOwotfQotfQotYnJlYWs7Ci1jYXNlICJpbnNlcnR0YWJsZSI6Ci11cmw9X2VkaXRvcl91cmwrIm1vZHVsZXMvSW5zZXJ0VGFibGUvaW5zZXJ0X3RhYmxlLmpzIjsKLWlmKCFYaW5oYS5sb2FkUGx1Z2lucyhbe3BsdWdpbjoiSW5zZXJ0VGFibGUiLHVybDp1cmx9XSxfYjYpKXsKLXJldHVybiBmYWxzZTsKLX1lbHNlewotaWYodHlwZW9mIFhpbmhhLmdldFBsdWdpbkNvbnN0cnVjdG9yKCJJbnNlcnRUYWJsZSIpIT0idW5kZWZpbmVkIiYmIXRoaXMucGx1Z2lucy5JbnNlcnRUYWJsZSl7Ci1fYjIucmVnaXN0ZXJQbHVnaW4oIkluc2VydFRhYmxlIik7Ci19Ci19Ci1icmVhazsKLWNhc2UgImFib3V0IjoKLXVybD1fZWRpdG9yX3VybCsibW9kdWxlcy9BYm91dEJveC9BYm91dEJveC5qcyI7Ci1pZighWGluaGEubG9hZFBsdWdpbnMoW3twbHVnaW46IkFib3V0Qm94Iix1cmw6dXJsfV0sX2I2KSl7Ci1yZXR1cm4gZmFsc2U7Ci19ZWxzZXsKLWlmKHR5cGVvZiBYaW5oYS5nZXRQbHVnaW5Db25zdHJ1Y3RvcigiQWJvdXRCb3giKSE9InVuZGVmaW5lZCImJiF0aGlzLnBsdWdpbnMuQWJvdXRCb3gpewotX2IyLnJlZ2lzdGVyUGx1Z2luKCJBYm91dEJveCIpOwotfQotfQotYnJlYWs7Ci19Ci19Ci19Ci1pZihYaW5oYS5pc19nZWNrbyYmX2IyLmNvbmZpZy5tb3pQYXJhSGFuZGxlciE9ImJ1aWx0LWluIil7Ci1pZighWGluaGEubG9hZFBsdWdpbnMoW3twbHVnaW46IkVudGVyUGFyYWdyYXBocyIsdXJsOl9lZGl0b3JfdXJsKyJtb2R1bGVzL0dlY2tvL3BhcmFIYW5kbGVyQmVzdC5qcyJ9XSxfYjYpKXsKLXJldHVybiBmYWxzZTsKLX0KLWlmKCF0aGlzLnBsdWdpbnMuRW50ZXJQYXJhZ3JhcGhzKXsKLV9iMi5yZWdpc3RlclBsdWdpbigiRW50ZXJQYXJhZ3JhcGhzIik7Ci19Ci19Ci12YXIgX2I5PXRoaXMuY29uZmlnLmdldEh0bWxNZXRob2Q9PSJUcmFuc2Zvcm1Jbm5lckhUTUwiP19lZGl0b3JfdXJsKyJtb2R1bGVzL0dldEh0bWwvVHJhbnNmb3JtSW5uZXJIVE1MLmpzIjpfZWRpdG9yX3VybCsibW9kdWxlcy9HZXRIdG1sL0RPTXdhbGsuanMiOwotaWYoIVhpbmhhLmxvYWRQbHVnaW5zKFt7cGx1Z2luOiJHZXRIdG1sSW1wbGVtZW50YXRpb24iLHVybDpfYjl9XSxfYjYpKXsKLXJldHVybiBmYWxzZTsKLX1lbHNlewotaWYoIXRoaXMucGx1Z2lucy5HZXRIdG1sSW1wbGVtZW50YXRpb24pewotX2IyLnJlZ2lzdGVyUGx1Z2luKCJHZXRIdG1sSW1wbGVtZW50YXRpb24iKTsKLX0KLX0KLWZ1bmN0aW9uIGdldFRleHRDb250ZW50KF9iYSl7Ci1yZXR1cm4gX2JhLnRleHRDb250ZW50fHxfYmEudGV4dDsKLX07Ci1pZihfZWRpdG9yX3NraW4pewotdGhpcy5za2luSW5mbz17fTsKLXZhciBfYmI9WGluaGEuX2dldHVybGNvbnRlbnQoX2VkaXRvcl91cmwrInNraW5zLyIrX2VkaXRvcl9za2luKyIvc2tpbi54bWwiLHRydWUpOwotaWYoX2JiKXsKLXZhciBfYmM9X2JiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJtZXRhIik7Ci1mb3IoaT0wO2k8X2JjLmxlbmd0aDtpKyspewotdGhpcy5za2luSW5mb1tfYmNbaV0uZ2V0QXR0cmlidXRlKCJuYW1lIildPV9iY1tpXS5nZXRBdHRyaWJ1dGUoInZhbHVlIik7Ci19Ci12YXIgX2JkPV9iYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgicmVjb21tZW5kZWRJY29ucyIpOwotaWYoIV9lZGl0b3JfaWNvbnMmJl9iZC5sZW5ndGgmJmdldFRleHRDb250ZW50KF9iZFswXSkpewotX2VkaXRvcl9pY29ucz1nZXRUZXh0Q29udGVudChfYmRbMF0pOwotfQotfQotfQotaWYoX2VkaXRvcl9pY29ucyl7Ci12YXIgX2JlPVhpbmhhLl9nZXR1cmxjb250ZW50KF9lZGl0b3JfdXJsKyJpY29uc2V0cy8iK19lZGl0b3JfaWNvbnMrIi9pY29uc2V0LnhtbCIsdHJ1ZSk7Ci1pZihfYmUpewotdmFyIF9iZj1fYmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImljb24iKTsKLXZhciBfYzAsaWQsX2MyLF9jMyx4LHk7Ci1mb3IoaT0wO2k8X2JmLmxlbmd0aDtpKyspewotX2MwPV9iZltpXTsKLWlkPV9jMC5nZXRBdHRyaWJ1dGUoImlkIik7Ci1pZihfYzAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoX2VkaXRvcl9sYW5nKS5sZW5ndGgpewotX2MwPV9jMC5nZXRFbGVtZW50c0J5VGFnTmFtZShfZWRpdG9yX2xhbmcpWzBdOwotfWVsc2V7Ci1fYzA9X2MwLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJkZWZhdWx0IilbMF07Ci19Ci1fYzI9Z2V0VGV4dENvbnRlbnQoX2MwLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXRoIilbMF0pOwotX2MyPSghL15cLy8udGVzdChfYzIpP19lZGl0b3JfdXJsOiIiKStfYzI7Ci1fYzM9X2MwLmdldEF0dHJpYnV0ZSgidHlwZSIpOwotaWYoX2MzPT0ibWFwIil7Ci14PXBhcnNlSW50KGdldFRleHRDb250ZW50KF9jMC5nZXRFbGVtZW50c0J5VGFnTmFtZSgieCIpWzBdKSwxMCk7Ci15PXBhcnNlSW50KGdldFRleHRDb250ZW50KF9jMC5nZXRFbGVtZW50c0J5VGFnTmFtZSgieSIpWzBdKSwxMCk7Ci1pZih0aGlzLmNvbmZpZy5idG5MaXN0W2lkXSl7Ci10aGlzLmNvbmZpZy5idG5MaXN0W2lkXVsxXT1bX2MyLHgseV07Ci19Ci1pZih0aGlzLmNvbmZpZy5pY29uTGlzdFtpZF0pewotdGhpcy5jb25maWcuaWNvbkxpc3RbaWRdPVtfYzIseCx5XTsKLX0KLX1lbHNlewotaWYodGhpcy5jb25maWcuYnRuTGlzdFtpZF0pewotdGhpcy5jb25maWcuYnRuTGlzdFtpZF1bMV09X2MyOwotfQotaWYodGhpcy5jb25maWcuaWNvbkxpc3RbaWRdKXsKLXRoaXMuY29uZmlnLmljb25MaXN0W2lkXT1fYzI7Ci19Ci19Ci19Ci19Ci19Ci10aGlzLnNldExvYWRpbmdNZXNzYWdlKFhpbmhhLl9sYygiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIikpOwotdGhpcy5fZnJhbWV3b3JrPXsidGFibGUiOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksInRib2R5Ijpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLCJ0Yl9yb3ciOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksInRiX2NlbGwiOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIiksInRwX3JvdyI6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKSwidHBfY2VsbCI6dGhpcy5fcGFuZWxzLnRvcC5jb250YWluZXIsImxlcl9yb3ciOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksImxwX2NlbGwiOnRoaXMuX3BhbmVscy5sZWZ0LmNvbnRhaW5lciwiZWRfY2VsbCI6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKSwicnBfY2VsbCI6dGhpcy5fcGFuZWxzLnJpZ2h0LmNvbnRhaW5lciwiYnBfcm93Ijpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpLCJicF9jZWxsIjp0aGlzLl9wYW5lbHMuYm90dG9tLmNvbnRhaW5lciwic2Jfcm93Ijpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpLCJzYl9jZWxsIjpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpfTsKLVhpbmhhLmZyZWVMYXRlcih0aGlzLl9mcmFtZXdvcmspOwotdmFyIGZ3PXRoaXMuX2ZyYW1ld29yazsKLWZ3LnRhYmxlLmJvcmRlcj0iMCI7Ci1mdy50YWJsZS5jZWxsUGFkZGluZz0iMCI7Ci1mdy50YWJsZS5jZWxsU3BhY2luZz0iMCI7Ci1mdy50Yl9yb3cuc3R5bGUudmVydGljYWxBbGlnbj0idG9wIjsKLWZ3LnRwX3Jvdy5zdHlsZS52ZXJ0aWNhbEFsaWduPSJ0b3AiOwotZncubGVyX3Jvdy5zdHlsZS52ZXJ0aWNhbEFsaWduPSJ0b3AiOwotZncuYnBfcm93LnN0eWxlLnZlcnRpY2FsQWxpZ249InRvcCI7Ci1mdy5zYl9yb3cuc3R5bGUudmVydGljYWxBbGlnbj0idG9wIjsKLWZ3LmVkX2NlbGwuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIjsKLWZ3LnRiX3Jvdy5hcHBlbmRDaGlsZChmdy50Yl9jZWxsKTsKLWZ3LnRiX2NlbGwuY29sU3Bhbj0zOwotZncudHBfcm93LmFwcGVuZENoaWxkKGZ3LnRwX2NlbGwpOwotZncudHBfY2VsbC5jb2xTcGFuPTM7Ci1mdy5sZXJfcm93LmFwcGVuZENoaWxkKGZ3LmxwX2NlbGwpOwotZncubGVyX3Jvdy5hcHBlbmRDaGlsZChmdy5lZF9jZWxsKTsKLWZ3Lmxlcl9yb3cuYXBwZW5kQ2hpbGQoZncucnBfY2VsbCk7Ci1mdy5icF9yb3cuYXBwZW5kQ2hpbGQoZncuYnBfY2VsbCk7Ci1mdy5icF9jZWxsLmNvbFNwYW49MzsKLWZ3LnNiX3Jvdy5hcHBlbmRDaGlsZChmdy5zYl9jZWxsKTsKLWZ3LnNiX2NlbGwuY29sU3Bhbj0zOwotZncudGJvZHkuYXBwZW5kQ2hpbGQoZncudGJfcm93KTsKLWZ3LnRib2R5LmFwcGVuZENoaWxkKGZ3LnRwX3Jvdyk7Ci1mdy50Ym9keS5hcHBlbmRDaGlsZChmdy5sZXJfcm93KTsKLWZ3LnRib2R5LmFwcGVuZENoaWxkKGZ3LmJwX3Jvdyk7Ci1mdy50Ym9keS5hcHBlbmRDaGlsZChmdy5zYl9yb3cpOwotZncudGFibGUuYXBwZW5kQ2hpbGQoZncudGJvZHkpOwotdmFyIF9jNz1mdy50YWJsZTsKLXRoaXMuX2h0bWxBcmVhPV9jNzsKLVhpbmhhLmZyZWVMYXRlcih0aGlzLCJfaHRtbEFyZWEiKTsKLV9jNy5jbGFzc05hbWU9Imh0bWxhcmVhIjsKLWZ3LnRiX2NlbGwuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlVG9vbGJhcigpKTsKLXZhciBfYzg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Ci1fYzguc3JjPXRoaXMucG9wdXBVUkwoX2IyLmNvbmZpZy5VUklzLmJsYW5rKTsKLV9jOC5pZD0iWGluaGFJRnJhbWVfIit0aGlzLl90ZXh0QXJlYS5pZDsKLWZ3LmVkX2NlbGwuYXBwZW5kQ2hpbGQoX2M4KTsKLXRoaXMuX2lmcmFtZT1fYzg7Ci10aGlzLl9pZnJhbWUuY2xhc3NOYW1lPSJ4aW5oYV9pZnJhbWUiOwotWGluaGEuZnJlZUxhdGVyKHRoaXMsIl9pZnJhbWUiKTsKLXZhciBfYzk9dGhpcy5fY3JlYXRlU3RhdHVzQmFyKCk7Ci10aGlzLl9zdGF0dXNCYXI9Zncuc2JfY2VsbC5hcHBlbmRDaGlsZChfYzkpOwotdmFyIF9jYT10aGlzLl90ZXh0QXJlYTsKLV9jYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShfYzcsX2NhKTsKLV9jYS5jbGFzc05hbWU9InhpbmhhX3RleHRhcmVhIjsKLVhpbmhhLnJlbW92ZUZyb21QYXJlbnQoX2NhKTsKLWZ3LmVkX2NlbGwuYXBwZW5kQ2hpbGQoX2NhKTsKLVhpbmhhLmFkZERvbTBFdmVudCh0aGlzLl90ZXh0QXJlYSwiY2xpY2siLGZ1bmN0aW9uKCl7Ci1pZihYaW5oYS5fY3VycmVudGx5QWN0aXZlRWRpdG9yIT10aGlzKXsKLV9iMi51cGRhdGVUb29sYmFyKCk7Ci19Ci1yZXR1cm4gdHJ1ZTsKLX0pOwotaWYoX2NhLmZvcm0pewotWGluaGEucHJlcGVuZERvbTBFdmVudCh0aGlzLl90ZXh0QXJlYS5mb3JtLCJzdWJtaXQiLGZ1bmN0aW9uKCl7Ci1fYjIuZmlyZVBsdWdpbkV2ZW50KCJvbkJlZm9yZVN1Ym1pdCIpOwotX2IyLl90ZXh0QXJlYS52YWx1ZT1fYjIub3V0d2FyZEh0bWwoX2IyLmdldEhUTUwoKSk7Ci1yZXR1cm4gdHJ1ZTsKLX0pOwotdmFyIF9jYj1fY2EudmFsdWU7Ci1YaW5oYS5wcmVwZW5kRG9tMEV2ZW50KHRoaXMuX3RleHRBcmVhLmZvcm0sInJlc2V0IixmdW5jdGlvbigpewotX2IyLnNldEhUTUwoX2IyLmlud2FyZEh0bWwoX2NiKSk7Ci1fYjIudXBkYXRlVG9vbGJhcigpOwotcmV0dXJuIHRydWU7Ci19KTsKLWlmKCFfY2EuZm9ybS54aW5oYV9zdWJtaXQpewotdHJ5ewotX2NhLmZvcm0ueGluaGFfc3VibWl0PV9jYS5mb3JtLnN1Ym1pdDsKLV9jYS5mb3JtLnN1Ym1pdD1mdW5jdGlvbigpewotdGhpcy5vbnN1Ym1pdCgpOwotdGhpcy54aW5oYV9zdWJtaXQoKTsKLX07Ci19Ci1jYXRjaChleCl7Ci19Ci19Ci19Ci1YaW5oYS5wcmVwZW5kRG9tMEV2ZW50KHdpbmRvdywidW5sb2FkIixmdW5jdGlvbigpewotX2IyLmZpcmVQbHVnaW5FdmVudCgib25CZWZvcmVVbmxvYWQiKTsKLV9jYS52YWx1ZT1fYjIub3V0d2FyZEh0bWwoX2IyLmdldEhUTUwoKSk7Ci1pZighWGluaGEuaXNfaWUpewotX2M3LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKF9jYSxfYzcpOwotfQotcmV0dXJuIHRydWU7Ci19KTsKLV9jYS5zdHlsZS5kaXNwbGF5PSJub25lIjsKLV9iMi5pbml0U2l6ZSgpOwotdGhpcy5zZXRMb2FkaW5nTWVzc2FnZShYaW5oYS5fbGMoIkZpbmlzaGluZyIpKTsKLV9iMi5faWZyYW1lTG9hZERvbmU9ZmFsc2U7Ci1pZihYaW5oYS5pc19vcGVyYSl7Ci1fYjIuaW5pdElmcmFtZSgpOwotfWVsc2V7Ci1YaW5oYS5fYWRkRXZlbnQodGhpcy5faWZyYW1lLCJsb2FkIixmdW5jdGlvbihlKXsKLWlmKCFfYjIuX2lmcmFtZUxvYWREb25lKXsKLV9iMi5faWZyYW1lTG9hZERvbmU9dHJ1ZTsKLV9iMi5pbml0SWZyYW1lKCk7Ci19Ci1yZXR1cm4gdHJ1ZTsKLX0pOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5pbml0U2l6ZT1mdW5jdGlvbigpewotdGhpcy5zZXRMb2FkaW5nTWVzc2FnZShYaW5oYS5fbGMoIkluaXQgZWRpdG9yIHNpemUiKSk7Ci12YXIgX2NkPXRoaXM7Ci12YXIgX2NlPW51bGw7Ci12YXIgX2NmPW51bGw7Ci1zd2l0Y2godGhpcy5jb25maWcud2lkdGgpewotY2FzZSAiYXV0byI6Ci1fY2U9dGhpcy5faW5pdGlhbF90YV9zaXplLnc7Ci1icmVhazsKLWNhc2UgInRvb2xiYXIiOgotX2NlPXRoaXMuX3Rvb2xCYXIub2Zmc2V0V2lkdGgrInB4IjsKLWJyZWFrOwotZGVmYXVsdDoKLV9jZT0vW14wLTldLy50ZXN0KHRoaXMuY29uZmlnLndpZHRoKT90aGlzLmNvbmZpZy53aWR0aDp0aGlzLmNvbmZpZy53aWR0aCsicHgiOwotYnJlYWs7Ci19Ci1fY2Y9dGhpcy5jb25maWcuaGVpZ2h0PT0iYXV0byI/dGhpcy5faW5pdGlhbF90YV9zaXplLmg6L1teMC05XS8udGVzdCh0aGlzLmNvbmZpZy5oZWlnaHQpP3RoaXMuY29uZmlnLmhlaWdodDp0aGlzLmNvbmZpZy5oZWlnaHQrInB4IjsKLXRoaXMuc2l6ZUVkaXRvcihfY2UsX2NmLHRoaXMuY29uZmlnLnNpemVJbmNsdWRlc0JhcnMsdGhpcy5jb25maWcuc2l6ZUluY2x1ZGVzUGFuZWxzKTsKLXRoaXMubm90aWZ5T24oInBhbmVsX2NoYW5nZSIsZnVuY3Rpb24oKXsKLV9jZC5zaXplRWRpdG9yKCk7Ci19KTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuc2l6ZUVkaXRvcj1mdW5jdGlvbihfZDAsX2QxLF9kMixfZDMpewotaWYodGhpcy5fcmlzaXppbmcpewotcmV0dXJuOwotfQotdGhpcy5fcmlzaXppbmc9dHJ1ZTsKLXZhciBfZDQ9dGhpcy5fZnJhbWV3b3JrOwotdGhpcy5ub3RpZnlPZigiYmVmb3JlX3Jlc2l6ZSIse3dpZHRoOl9kMCxoZWlnaHQ6X2QxfSk7Ci10aGlzLmZpcmVQbHVnaW5FdmVudCgib25CZWZvcmVSZXNpemUiLF9kMCxfZDEpOwotdGhpcy5faWZyYW1lLnN0eWxlLmhlaWdodD0iMTAwJSI7Ci10aGlzLl90ZXh0QXJlYS5zdHlsZS5oZWlnaHQ9IjFweCI7Ci10aGlzLl9pZnJhbWUuc3R5bGUud2lkdGg9IjBweCI7Ci10aGlzLl90ZXh0QXJlYS5zdHlsZS53aWR0aD0iMHB4IjsKLWlmKF9kMiE9PW51bGwpewotdGhpcy5faHRtbEFyZWEuc2l6ZUluY2x1ZGVzVG9vbGJhcnM9X2QyOwotfQotaWYoX2QzIT09bnVsbCl7Ci10aGlzLl9odG1sQXJlYS5zaXplSW5jbHVkZXNQYW5lbHM9X2QzOwotfQotaWYoX2QwKXsKLXRoaXMuX2h0bWxBcmVhLnN0eWxlLndpZHRoPV9kMDsKLWlmKCF0aGlzLl9odG1sQXJlYS5zaXplSW5jbHVkZXNQYW5lbHMpewotdmFyIF9kNT10aGlzLl9wYW5lbHMucmlnaHQ7Ci1pZihfZDUub24mJl9kNS5wYW5lbHMubGVuZ3RoJiZYaW5oYS5oYXNEaXNwbGF5ZWRDaGlsZHJlbihfZDUuZGl2KSl7Ci10aGlzLl9odG1sQXJlYS5zdHlsZS53aWR0aD0odGhpcy5faHRtbEFyZWEub2Zmc2V0V2lkdGgrcGFyc2VJbnQodGhpcy5jb25maWcucGFuZWxfZGltZW5zaW9ucy5yaWdodCwxMCkpKyJweCI7Ci19Ci12YXIgX2Q2PXRoaXMuX3BhbmVscy5sZWZ0OwotaWYoX2Q2Lm9uJiZfZDYucGFuZWxzLmxlbmd0aCYmWGluaGEuaGFzRGlzcGxheWVkQ2hpbGRyZW4oX2Q2LmRpdikpewotdGhpcy5faHRtbEFyZWEuc3R5bGUud2lkdGg9KHRoaXMuX2h0bWxBcmVhLm9mZnNldFdpZHRoK3BhcnNlSW50KHRoaXMuY29uZmlnLnBhbmVsX2RpbWVuc2lvbnMubGVmdCwxMCkpKyJweCI7Ci19Ci19Ci19Ci1pZihfZDEpewotdGhpcy5faHRtbEFyZWEuc3R5bGUuaGVpZ2h0PV9kMTsKLWlmKCF0aGlzLl9odG1sQXJlYS5zaXplSW5jbHVkZXNUb29sYmFycyl7Ci10aGlzLl9odG1sQXJlYS5zdHlsZS5oZWlnaHQ9KHRoaXMuX2h0bWxBcmVhLm9mZnNldEhlaWdodCt0aGlzLl90b29sYmFyLm9mZnNldEhlaWdodCt0aGlzLl9zdGF0dXNCYXIub2Zmc2V0SGVpZ2h0KSsicHgiOwotfQotaWYoIXRoaXMuX2h0bWxBcmVhLnNpemVJbmNsdWRlc1BhbmVscyl7Ci12YXIgX2Q3PXRoaXMuX3BhbmVscy50b3A7Ci1pZihfZDcub24mJl9kNy5wYW5lbHMubGVuZ3RoJiZYaW5oYS5oYXNEaXNwbGF5ZWRDaGlsZHJlbihfZDcuZGl2KSl7Ci10aGlzLl9odG1sQXJlYS5zdHlsZS5oZWlnaHQ9KHRoaXMuX2h0bWxBcmVhLm9mZnNldEhlaWdodCtwYXJzZUludCh0aGlzLmNvbmZpZy5wYW5lbF9kaW1lbnNpb25zLnRvcCwxMCkpKyJweCI7Ci19Ci12YXIgX2Q4PXRoaXMuX3BhbmVscy5ib3R0b207Ci1pZihfZDgub24mJl9kOC5wYW5lbHMubGVuZ3RoJiZYaW5oYS5oYXNEaXNwbGF5ZWRDaGlsZHJlbihfZDguZGl2KSl7Ci10aGlzLl9odG1sQXJlYS5zdHlsZS5oZWlnaHQ9KHRoaXMuX2h0bWxBcmVhLm9mZnNldEhlaWdodCtwYXJzZUludCh0aGlzLmNvbmZpZy5wYW5lbF9kaW1lbnNpb25zLmJvdHRvbSwxMCkpKyJweCI7Ci19Ci19Ci19Ci1fZDA9dGhpcy5faHRtbEFyZWEub2Zmc2V0V2lkdGg7Ci1fZDE9dGhpcy5faHRtbEFyZWEub2Zmc2V0SGVpZ2h0OwotdmFyIF9kOT10aGlzLl9wYW5lbHM7Ci12YXIgX2RhPXRoaXM7Ci12YXIgX2RiPTE7Ci1mdW5jdGlvbiBwYW5lbF9pc19hbGl2ZShwYW4pewotaWYoX2Q5W3Bhbl0ub24mJl9kOVtwYW5dLnBhbmVscy5sZW5ndGgmJlhpbmhhLmhhc0Rpc3BsYXllZENoaWxkcmVuKF9kOVtwYW5dLmNvbnRhaW5lcikpewotX2Q5W3Bhbl0uY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9IiI7Ci1yZXR1cm4gdHJ1ZTsKLX1lbHNlewotX2Q5W3Bhbl0uY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwotcmV0dXJuIGZhbHNlOwotfQotfTsKLWlmKHBhbmVsX2lzX2FsaXZlKCJsZWZ0IikpewotX2RiKz0xOwotfQotaWYocGFuZWxfaXNfYWxpdmUoInJpZ2h0IikpewotX2RiKz0xOwotfQotX2Q0LnRiX2NlbGwuY29sU3Bhbj1fZGI7Ci1fZDQudHBfY2VsbC5jb2xTcGFuPV9kYjsKLV9kNC5icF9jZWxsLmNvbFNwYW49X2RiOwotX2Q0LnNiX2NlbGwuY29sU3Bhbj1fZGI7Ci1pZighX2Q0LnRwX3Jvdy5jaGlsZE5vZGVzLmxlbmd0aCl7Ci1YaW5oYS5yZW1vdmVGcm9tUGFyZW50KF9kNC50cF9yb3cpOwotfWVsc2V7Ci1pZighWGluaGEuaGFzUGFyZW50Tm9kZShfZDQudHBfcm93KSl7Ci1fZDQudGJvZHkuaW5zZXJ0QmVmb3JlKF9kNC50cF9yb3csX2Q0Lmxlcl9yb3cpOwotfQotfQotaWYoIV9kNC5icF9yb3cuY2hpbGROb2Rlcy5sZW5ndGgpewotWGluaGEucmVtb3ZlRnJvbVBhcmVudChfZDQuYnBfcm93KTsKLX1lbHNlewotaWYoIVhpbmhhLmhhc1BhcmVudE5vZGUoX2Q0LmJwX3JvdykpewotX2Q0LnRib2R5Lmluc2VydEJlZm9yZShfZDQuYnBfcm93LF9kNC5sZXJfcm93Lm5leHRTaWJsaW5nKTsKLX0KLX0KLWlmKCF0aGlzLmNvbmZpZy5zdGF0dXNCYXIpewotWGluaGEucmVtb3ZlRnJvbVBhcmVudChfZDQuc2Jfcm93KTsKLX1lbHNlewotaWYoIVhpbmhhLmhhc1BhcmVudE5vZGUoX2Q0LnNiX3JvdykpewotX2Q0LnRhYmxlLmFwcGVuZENoaWxkKF9kNC5zYl9yb3cpOwotfQotfQotX2Q0LmxwX2NlbGwuc3R5bGUud2lkdGg9dGhpcy5jb25maWcucGFuZWxfZGltZW5zaW9ucy5sZWZ0OwotX2Q0LnJwX2NlbGwuc3R5bGUud2lkdGg9dGhpcy5jb25maWcucGFuZWxfZGltZW5zaW9ucy5yaWdodDsKLV9kNC50cF9jZWxsLnN0eWxlLmhlaWdodD10aGlzLmNvbmZpZy5wYW5lbF9kaW1lbnNpb25zLnRvcDsKLV9kNC5icF9jZWxsLnN0eWxlLmhlaWdodD10aGlzLmNvbmZpZy5wYW5lbF9kaW1lbnNpb25zLmJvdHRvbTsKLV9kNC50Yl9jZWxsLnN0eWxlLmhlaWdodD10aGlzLl90b29sQmFyLm9mZnNldEhlaWdodCsicHgiOwotX2Q0LnNiX2NlbGwuc3R5bGUuaGVpZ2h0PXRoaXMuX3N0YXR1c0Jhci5vZmZzZXRIZWlnaHQrInB4IjsKLXZhciBfZGQ9X2QxLXRoaXMuX3Rvb2xCYXIub2Zmc2V0SGVpZ2h0LXRoaXMuX3N0YXR1c0Jhci5vZmZzZXRIZWlnaHQ7Ci1pZihwYW5lbF9pc19hbGl2ZSgidG9wIikpewotX2RkLT1wYXJzZUludCh0aGlzLmNvbmZpZy5wYW5lbF9kaW1lbnNpb25zLnRvcCwxMCk7Ci19Ci1pZihwYW5lbF9pc19hbGl2ZSgiYm90dG9tIikpewotX2RkLT1wYXJzZUludCh0aGlzLmNvbmZpZy5wYW5lbF9kaW1lbnNpb25zLmJvdHRvbSwxMCk7Ci19Ci10aGlzLl9pZnJhbWUuc3R5bGUuaGVpZ2h0PV9kZCsicHgiOwotdmFyIF9kZT1fZDA7Ci1pZihwYW5lbF9pc19hbGl2ZSgibGVmdCIpKXsKLV9kZS09cGFyc2VJbnQodGhpcy5jb25maWcucGFuZWxfZGltZW5zaW9ucy5sZWZ0LDEwKTsKLX0KLWlmKHBhbmVsX2lzX2FsaXZlKCJyaWdodCIpKXsKLV9kZS09cGFyc2VJbnQodGhpcy5jb25maWcucGFuZWxfZGltZW5zaW9ucy5yaWdodCwxMCk7Ci19Ci12YXIgX2RmPXRoaXMuY29uZmlnLmlmcmFtZVdpZHRoP3BhcnNlSW50KHRoaXMuY29uZmlnLmlmcmFtZVdpZHRoLDEwKTpudWxsOwotdGhpcy5faWZyYW1lLnN0eWxlLndpZHRoPShfZGYmJl9kZjxfZGUpP19kZisicHgiOl9kZSsicHgiOwotdGhpcy5fdGV4dEFyZWEuc3R5bGUuaGVpZ2h0PXRoaXMuX2lmcmFtZS5zdHlsZS5oZWlnaHQ7Ci10aGlzLl90ZXh0QXJlYS5zdHlsZS53aWR0aD10aGlzLl9pZnJhbWUuc3R5bGUud2lkdGg7Ci10aGlzLm5vdGlmeU9mKCJyZXNpemUiLHt3aWR0aDp0aGlzLl9odG1sQXJlYS5vZmZzZXRXaWR0aCxoZWlnaHQ6dGhpcy5faHRtbEFyZWEub2Zmc2V0SGVpZ2h0fSk7Ci10aGlzLmZpcmVQbHVnaW5FdmVudCgib25SZXNpemUiLHRoaXMuX2h0bWxBcmVhLm9mZnNldFdpZHRoLHRoaXMuX2h0bWxBcmVhLm9mZnNldFdpZHRoKTsKLXRoaXMuX3Jpc2l6aW5nPWZhbHNlOwotfTsKLVhpbmhhLnByb3RvdHlwZS5yZWdpc3RlclBhbmVsPWZ1bmN0aW9uKF9lMCxfZTEpewotaWYoIV9lMCl7Ci1fZTA9InJpZ2h0IjsKLX0KLXRoaXMuc2V0TG9hZGluZ01lc3NhZ2UoIlJlZ2lzdGVyICIrX2UwKyIgcGFuZWwgIik7Ci12YXIgX2UyPXRoaXMuYWRkUGFuZWwoX2UwKTsKLWlmKF9lMSl7Ci1fZTEuZHJhd1BhbmVsSW4oX2UyKTsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuYWRkUGFuZWw9ZnVuY3Rpb24oX2UzKXsKLXZhciBkaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci1kaXYuc2lkZT1fZTM7Ci1pZihfZTM9PSJsZWZ0Inx8X2UzPT0icmlnaHQiKXsKLWRpdi5zdHlsZS53aWR0aD10aGlzLmNvbmZpZy5wYW5lbF9kaW1lbnNpb25zW19lM107Ci1pZih0aGlzLl9pZnJhbWUpewotZGl2LnN0eWxlLmhlaWdodD10aGlzLl9pZnJhbWUuc3R5bGUuaGVpZ2h0OwotfQotfQotWGluaGEuYWRkQ2xhc3NlcyhkaXYsInBhbmVsIik7Ci10aGlzLl9wYW5lbHNbX2UzXS5wYW5lbHMucHVzaChkaXYpOwotdGhpcy5fcGFuZWxzW19lM10uZGl2LmFwcGVuZENoaWxkKGRpdik7Ci10aGlzLm5vdGlmeU9mKCJwYW5lbF9jaGFuZ2UiLHsiYWN0aW9uIjoiYWRkIiwicGFuZWwiOmRpdn0pOwotdGhpcy5maXJlUGx1Z2luRXZlbnQoIm9uUGFuZWxDaGFuZ2UiLCJhZGQiLGRpdik7Ci1yZXR1cm4gZGl2OwotfTsKLVhpbmhhLnByb3RvdHlwZS5yZW1vdmVQYW5lbD1mdW5jdGlvbihfZTUpewotdGhpcy5fcGFuZWxzW19lNS5zaWRlXS5kaXYucmVtb3ZlQ2hpbGQoX2U1KTsKLXZhciBfZTY9W107Ci1mb3IodmFyIGk9MDtpPHRoaXMuX3BhbmVsc1tfZTUuc2lkZV0ucGFuZWxzLmxlbmd0aDtpKyspewotaWYodGhpcy5fcGFuZWxzW19lNS5zaWRlXS5wYW5lbHNbaV0hPV9lNSl7Ci1fZTYucHVzaCh0aGlzLl9wYW5lbHNbX2U1LnNpZGVdLnBhbmVsc1tpXSk7Ci19Ci19Ci10aGlzLl9wYW5lbHNbX2U1LnNpZGVdLnBhbmVscz1fZTY7Ci10aGlzLm5vdGlmeU9mKCJwYW5lbF9jaGFuZ2UiLHsiYWN0aW9uIjoicmVtb3ZlIiwicGFuZWwiOl9lNX0pOwotdGhpcy5maXJlUGx1Z2luRXZlbnQoIm9uUGFuZWxDaGFuZ2UiLCJyZW1vdmUiLF9lNSk7Ci19OwotWGluaGEucHJvdG90eXBlLmhpZGVQYW5lbD1mdW5jdGlvbihfZTgpewotaWYoX2U4JiZfZTguc3R5bGUuZGlzcGxheSE9Im5vbmUiKXsKLXRyeXsKLXZhciBwb3M9dGhpcy5zY3JvbGxQb3ModGhpcy5faWZyYW1lLmNvbnRlbnRXaW5kb3cpOwotfQotY2F0Y2goZSl7Ci19Ci1fZTguc3R5bGUuZGlzcGxheT0ibm9uZSI7Ci10aGlzLm5vdGlmeU9mKCJwYW5lbF9jaGFuZ2UiLHsiYWN0aW9uIjoiaGlkZSIsInBhbmVsIjpfZTh9KTsKLXRoaXMuZmlyZVBsdWdpbkV2ZW50KCJvblBhbmVsQ2hhbmdlIiwiaGlkZSIsX2U4KTsKLXRyeXsKLXRoaXMuX2lmcmFtZS5jb250ZW50V2luZG93LnNjcm9sbFRvKHBvcy54LHBvcy55KTsKLX0KLWNhdGNoKGUpewotfQotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5zaG93UGFuZWw9ZnVuY3Rpb24oX2VhKXsKLWlmKF9lYSYmX2VhLnN0eWxlLmRpc3BsYXk9PSJub25lIil7Ci10cnl7Ci12YXIgcG9zPXRoaXMuc2Nyb2xsUG9zKHRoaXMuX2lmcmFtZS5jb250ZW50V2luZG93KTsKLX0KLWNhdGNoKGUpewotfQotX2VhLnN0eWxlLmRpc3BsYXk9IiI7Ci10aGlzLm5vdGlmeU9mKCJwYW5lbF9jaGFuZ2UiLHsiYWN0aW9uIjoic2hvdyIsInBhbmVsIjpfZWF9KTsKLXRoaXMuZmlyZVBsdWdpbkV2ZW50KCJvblBhbmVsQ2hhbmdlIiwic2hvdyIsX2VhKTsKLXRyeXsKLXRoaXMuX2lmcmFtZS5jb250ZW50V2luZG93LnNjcm9sbFRvKHBvcy54LHBvcy55KTsKLX0KLWNhdGNoKGUpewotfQotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5oaWRlUGFuZWxzPWZ1bmN0aW9uKF9lYyl7Ci1pZih0eXBlb2YgX2VjPT0idW5kZWZpbmVkIil7Ci1fZWM9WyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iXTsKLX0KLXZhciBfZWQ9W107Ci1mb3IodmFyIGk9MDtpPF9lYy5sZW5ndGg7aSsrKXsKLWlmKHRoaXMuX3BhbmVsc1tfZWNbaV1dLm9uKXsKLV9lZC5wdXNoKF9lY1tpXSk7Ci10aGlzLl9wYW5lbHNbX2VjW2ldXS5vbj1mYWxzZTsKLX0KLX0KLXRoaXMubm90aWZ5T2YoInBhbmVsX2NoYW5nZSIseyJhY3Rpb24iOiJtdWx0aV9oaWRlIiwic2lkZXMiOl9lY30pOwotdGhpcy5maXJlUGx1Z2luRXZlbnQoIm9uUGFuZWxDaGFuZ2UiLCJtdWx0aV9oaWRlIixfZWMpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5zaG93UGFuZWxzPWZ1bmN0aW9uKF9lZil7Ci1pZih0eXBlb2YgX2VmPT0idW5kZWZpbmVkIil7Ci1fZWY9WyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iXTsKLX0KLXZhciBfZjA9W107Ci1mb3IodmFyIGk9MDtpPF9lZi5sZW5ndGg7aSsrKXsKLWlmKCF0aGlzLl9wYW5lbHNbX2VmW2ldXS5vbil7Ci1fZjAucHVzaChfZWZbaV0pOwotdGhpcy5fcGFuZWxzW19lZltpXV0ub249dHJ1ZTsKLX0KLX0KLXRoaXMubm90aWZ5T2YoInBhbmVsX2NoYW5nZSIseyJhY3Rpb24iOiJtdWx0aV9zaG93Iiwic2lkZXMiOl9lZn0pOwotdGhpcy5maXJlUGx1Z2luRXZlbnQoIm9uUGFuZWxDaGFuZ2UiLCJtdWx0aV9zaG93IixfZWYpOwotfTsKLVhpbmhhLm9iamVjdFByb3BlcnRpZXM9ZnVuY3Rpb24ob2JqKXsKLXZhciBfZjM9W107Ci1mb3IodmFyIHggaW4gb2JqKXsKLV9mM1tfZjMubGVuZ3RoXT14OwotfQotcmV0dXJuIF9mMzsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZWRpdG9ySXNBY3RpdmF0ZWQ9ZnVuY3Rpb24oKXsKLXRyeXsKLXJldHVybiBYaW5oYS5pc19kZXNpZ25Nb2RlP3RoaXMuX2RvYy5kZXNpZ25Nb2RlPT0ib24iOnRoaXMuX2RvYy5ib2R5LmNvbnRlbnRFZGl0YWJsZTsKLX0KLWNhdGNoKGV4KXsKLXJldHVybiBmYWxzZTsKLX0KLX07Ci1YaW5oYS5fc29tZUVkaXRvckhhc0JlZW5BY3RpdmF0ZWQ9ZmFsc2U7Ci1YaW5oYS5fY3VycmVudGx5QWN0aXZlRWRpdG9yPW51bGw7Ci1YaW5oYS5wcm90b3R5cGUuYWN0aXZhdGVFZGl0b3I9ZnVuY3Rpb24oKXsKLWlmKHRoaXMuY3VycmVudE1vZGFsKXsKLXJldHVybjsKLX0KLWlmKFhpbmhhLl9jdXJyZW50bHlBY3RpdmVFZGl0b3IpewotaWYoWGluaGEuX2N1cnJlbnRseUFjdGl2ZUVkaXRvcj09dGhpcyl7Ci1yZXR1cm4gdHJ1ZTsKLX0KLVhpbmhhLl9jdXJyZW50bHlBY3RpdmVFZGl0b3IuZGVhY3RpdmF0ZUVkaXRvcigpOwotfQotaWYoWGluaGEuaXNfZGVzaWduTW9kZSYmdGhpcy5fZG9jLmRlc2lnbk1vZGUhPSJvbiIpewotdHJ5ewotaWYodGhpcy5faWZyYW1lLnN0eWxlLmRpc3BsYXk9PSJub25lIil7Ci10aGlzLl9pZnJhbWUuc3R5bGUuZGlzcGxheT0iIjsKLXRoaXMuX2RvYy5kZXNpZ25Nb2RlPSJvbiI7Ci10aGlzLl9pZnJhbWUuc3R5bGUuZGlzcGxheT0ibm9uZSI7Ci19ZWxzZXsKLXRoaXMuX2RvYy5kZXNpZ25Nb2RlPSJvbiI7Ci19Ci1pZihYaW5oYS5pc19vcGVyYSl7Ci10aGlzLnNldEVkaXRvckV2ZW50cyh0cnVlKTsKLX0KLX0KLWNhdGNoKGV4KXsKLX0KLX1lbHNlewotaWYoWGluaGEuaXNfaWUmJnRoaXMuX2RvYy5ib2R5LmNvbnRlbnRFZGl0YWJsZSE9PXRydWUpewotdGhpcy5fZG9jLmJvZHkuY29udGVudEVkaXRhYmxlPXRydWU7Ci19Ci19Ci1YaW5oYS5fc29tZUVkaXRvckhhc0JlZW5BY3RpdmF0ZWQ9dHJ1ZTsKLVhpbmhhLl9jdXJyZW50bHlBY3RpdmVFZGl0b3I9dGhpczsKLXZhciBfZjU9dGhpczsKLXRoaXMuZW5hYmxlVG9vbGJhcigpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5kZWFjdGl2YXRlRWRpdG9yPWZ1bmN0aW9uKCl7Ci10aGlzLmRpc2FibGVUb29sYmFyKCk7Ci1pZihYaW5oYS5pc19kZXNpZ25Nb2RlJiZ0aGlzLl9kb2MuZGVzaWduTW9kZSE9Im9mZiIpewotdHJ5ewotdGhpcy5fZG9jLmRlc2lnbk1vZGU9Im9mZiI7Ci19Ci1jYXRjaChleCl7Ci19Ci19ZWxzZXsKLWlmKCFYaW5oYS5pc19kZXNpZ25Nb2RlJiZ0aGlzLl9kb2MuYm9keS5jb250ZW50RWRpdGFibGUhPT1mYWxzZSl7Ci10aGlzLl9kb2MuYm9keS5jb250ZW50RWRpdGFibGU9ZmFsc2U7Ci19Ci19Ci1pZihYaW5oYS5fY3VycmVudGx5QWN0aXZlRWRpdG9yIT10aGlzKXsKLXJldHVybjsKLX0KLVhpbmhhLl9jdXJyZW50bHlBY3RpdmVFZGl0b3I9ZmFsc2U7Ci19OwotWGluaGEucHJvdG90eXBlLmluaXRJZnJhbWU9ZnVuY3Rpb24oKXsKLXRoaXMuZGlzYWJsZVRvb2xiYXIoKTsKLXZhciBkb2M9bnVsbDsKLXZhciBfZjc9dGhpczsKLXRyeXsKLWlmKF9mNy5faWZyYW1lLmNvbnRlbnREb2N1bWVudCl7Ci10aGlzLl9kb2M9X2Y3Ll9pZnJhbWUuY29udGVudERvY3VtZW50OwotfWVsc2V7Ci10aGlzLl9kb2M9X2Y3Ll9pZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDsKLX0KLWRvYz10aGlzLl9kb2M7Ci1pZighZG9jKXsKLWlmKFhpbmhhLmlzX2dlY2tvKXsKLXNldFRpbWVvdXQoZnVuY3Rpb24oKXsKLV9mNy5pbml0SWZyYW1lKCk7Ci19LDUwKTsKLXJldHVybiBmYWxzZTsKLX1lbHNlewotYWxlcnQoIkVSUk9SOiBJRlJBTUUgY2FuJ3QgYmUgaW5pdGlhbGl6ZWQuIik7Ci19Ci19Ci19Ci1jYXRjaChleCl7Ci1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ci1fZjcuaW5pdElmcmFtZSgpOwotfSw1MCk7Ci1yZXR1cm4gZmFsc2U7Ci19Ci1YaW5oYS5mcmVlTGF0ZXIodGhpcywiX2RvYyIpOwotZG9jLm9wZW4oInRleHQvaHRtbCIsInJlcGxhY2UiKTsKLXZhciBfZjg9IiIsX2Y5OwotaWYoX2Y3LmNvbmZpZy5icm93c2VyUXVpcmtzTW9kZT09PWZhbHNlKXsKLV9mOT0iPCFET0NUWVBFIEhUTUwgUFVCTElDIFwiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU5cIiBcImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZFwiPiI7Ci19ZWxzZXsKLWlmKF9mNy5jb25maWcuYnJvd3NlclF1aXJrc01vZGU9PT10cnVlKXsKLV9mOT0iIjsKLX1lbHNlewotX2Y5PVhpbmhhLmdldERvY3R5cGUoZG9jdW1lbnQpOwotfQotfQotaWYoIV9mNy5jb25maWcuZnVsbFBhZ2UpewotX2Y4Kz1fZjkrIlxuIjsKLV9mOCs9IjxodG1sPlxuIjsKLV9mOCs9IjxoZWFkPlxuIjsKLV9mOCs9IjxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PSIrX2Y3LmNvbmZpZy5jaGFyU2V0KyJcIj5cbiI7Ci1pZih0eXBlb2YgX2Y3LmNvbmZpZy5iYXNlSHJlZiE9InVuZGVmaW5lZCImJl9mNy5jb25maWcuYmFzZUhyZWYhPT1udWxsKXsKLV9mOCs9IjxiYXNlIGhyZWY9XCIiK19mNy5jb25maWcuYmFzZUhyZWYrIlwiLz5cbiI7Ci19Ci1fZjgrPVhpbmhhLmFkZENvcmVDU1MoKTsKLWlmKHR5cGVvZiBfZjcuY29uZmlnLnBhZ2VTdHlsZVNoZWV0cyE9PSJ1bmRlZmluZWQiKXsKLWZvcih2YXIgaT0wO2k8X2Y3LmNvbmZpZy5wYWdlU3R5bGVTaGVldHMubGVuZ3RoO2krKyl7Ci1pZihfZjcuY29uZmlnLnBhZ2VTdHlsZVNoZWV0c1tpXS5sZW5ndGg+MCl7Ci1fZjgrPSI8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgaHJlZj1cIiIrX2Y3LmNvbmZpZy5wYWdlU3R5bGVTaGVldHNbaV0rIlwiPiI7Ci19Ci19Ci19Ci1pZihfZjcuY29uZmlnLnBhZ2VTdHlsZSl7Ci1fZjgrPSI8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+XG4iK19mNy5jb25maWcucGFnZVN0eWxlKyJcbjwvc3R5bGU+IjsKLX0KLV9mOCs9IjwvaGVhZD5cbiI7Ci1fZjgrPSI8Ym9keSIrKF9mNy5jb25maWcuYm9keUlEPygiIGlkPVwiIitfZjcuY29uZmlnLmJvZHlJRCsiXCIiKToiIikrKF9mNy5jb25maWcuYm9keUNsYXNzPygiIGNsYXNzPVwiIitfZjcuY29uZmlnLmJvZHlDbGFzcysiXCIiKToiIikrIj5cbiI7Ci1fZjgrPV9mNy5pbndhcmRIdG1sKF9mNy5fdGV4dEFyZWEudmFsdWUpOwotX2Y4Kz0iPC9ib2R5PlxuIjsKLV9mOCs9IjwvaHRtbD4iOwotfWVsc2V7Ci1fZjg9X2Y3Lmlud2FyZEh0bWwoX2Y3Ll90ZXh0QXJlYS52YWx1ZSk7Ci1pZihfZjgubWF0Y2goWGluaGEuUkVfZG9jdHlwZSkpewotX2Y3LnNldERvY3R5cGUoUmVnRXhwLiQxKTsKLX0KLXZhciBfZmI9X2Y4Lm1hdGNoKC88bGlua1xzK1tcc1xTXSo/WyInXVxzKlwvPz4vZ2kpOwotX2Y4PV9mOC5yZXBsYWNlKC88bGlua1xzK1tcc1xTXSo/WyInXVxzKlwvPz5ccyovZ2ksIiIpOwotaWYoX2ZiKXsKLV9mOD1fZjgucmVwbGFjZSgvPFwvaGVhZD4vaSxfZmIuam9pbigiXG4iKSsiXG48L2hlYWQ+Iik7Ci19Ci19Ci1kb2Mud3JpdGUoX2Y4KTsKLWRvYy5jbG9zZSgpOwotaWYodGhpcy5jb25maWcuZnVsbFNjcmVlbil7Ci10aGlzLl9mdWxsU2NyZWVuKCk7Ci19Ci10aGlzLnNldEVkaXRvckV2ZW50cygpOwotaWYoKHR5cGVvZiBfZjcuY29uZmlnLmF1dG9mb2N1cyE9InVuZGVmaW5lZCIpJiZfZjcuY29uZmlnLmF1dG9mb2N1cyE9PWZhbHNlJiYoKF9mNy5jb25maWcuYXV0b2ZvY3VzPT1fZjcuX3RleHRBcmVhLmlkKXx8X2Y3LmNvbmZpZy5hdXRvZm9jdXM9PXRydWUpKXsKLV9mNy5hY3RpdmF0ZUVkaXRvcigpOwotX2Y3LmZvY3VzRWRpdG9yKCk7Ci19Ci19OwotWGluaGEucHJvdG90eXBlLndoZW5Eb2NSZWFkeT1mdW5jdGlvbihmKXsKLXZhciBlPXRoaXM7Ci1pZih0aGlzLl9kb2MmJnRoaXMuX2RvYy5ib2R5KXsKLWYoKTsKLX1lbHNlewotc2V0VGltZW91dChmdW5jdGlvbigpewotZS53aGVuRG9jUmVhZHkoZik7Ci19LDUwKTsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuc2V0TW9kZT1mdW5jdGlvbihfZmUpewotdmFyIF9mZjsKLWlmKHR5cGVvZiBfZmU9PSJ1bmRlZmluZWQiKXsKLV9mZT10aGlzLl9lZGl0TW9kZT09InRleHRtb2RlIj8id3lzaXd5ZyI6InRleHRtb2RlIjsKLX0KLXN3aXRjaChfZmUpewotY2FzZSAidGV4dG1vZGUiOgotdGhpcy5maXJlUGx1Z2luRXZlbnQoIm9uQmVmb3JlTW9kZSIsInRleHRtb2RlIik7Ci10aGlzLl90b29sYmFyT2JqZWN0cy5odG1sbW9kZS5zd2FwSW1hZ2UodGhpcy5jb25maWcuaWNvbkxpc3Qud3lzaXd5Z21vZGUpOwotdGhpcy5zZXRDQygiaWZyYW1lIik7Ci1fZmY9dGhpcy5vdXR3YXJkSHRtbCh0aGlzLmdldEhUTUwoKSk7Ci10aGlzLnNldEhUTUwoX2ZmKTsKLXRoaXMuZGVhY3RpdmF0ZUVkaXRvcigpOwotdGhpcy5faWZyYW1lLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwotdGhpcy5fdGV4dEFyZWEuc3R5bGUuZGlzcGxheT0iIjsKLWlmKHRoaXMuY29uZmlnLnN0YXR1c0Jhcil7Ci10aGlzLl9zdGF0dXNCYXJUcmVlLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwotdGhpcy5fc3RhdHVzQmFyVGV4dE1vZGUuc3R5bGUuZGlzcGxheT0iIjsKLX0KLXRoaXMuZmluZENDKCJ0ZXh0YXJlYSIpOwotdGhpcy5ub3RpZnlPZigibW9kZWNoYW5nZSIseyJtb2RlIjoidGV4dCJ9KTsKLXRoaXMuZmlyZVBsdWdpbkV2ZW50KCJvbk1vZGUiLCJ0ZXh0bW9kZSIpOwotYnJlYWs7Ci1jYXNlICJ3eXNpd3lnIjoKLXRoaXMuZmlyZVBsdWdpbkV2ZW50KCJvbkJlZm9yZU1vZGUiLCJ3eXNpd3lnIik7Ci10aGlzLl90b29sYmFyT2JqZWN0cy5odG1sbW9kZS5zd2FwSW1hZ2UoW3RoaXMuaW1nVVJMKCJpbWFnZXMvZWRfYnV0dG9uc19tYWluLnBuZyIpLDcsMF0pOwotdGhpcy5zZXRDQygidGV4dGFyZWEiKTsKLV9mZj10aGlzLmlud2FyZEh0bWwodGhpcy5nZXRIVE1MKCkpOwotdGhpcy5kZWFjdGl2YXRlRWRpdG9yKCk7Ci10aGlzLnNldEhUTUwoX2ZmKTsKLXRoaXMuX2lmcmFtZS5zdHlsZS5kaXNwbGF5PSIiOwotdGhpcy5fdGV4dEFyZWEuc3R5bGUuZGlzcGxheT0ibm9uZSI7Ci10aGlzLmFjdGl2YXRlRWRpdG9yKCk7Ci1pZih0aGlzLmNvbmZpZy5zdGF0dXNCYXIpewotdGhpcy5fc3RhdHVzQmFyVHJlZS5zdHlsZS5kaXNwbGF5PSIiOwotdGhpcy5fc3RhdHVzQmFyVGV4dE1vZGUuc3R5bGUuZGlzcGxheT0ibm9uZSI7Ci19Ci10aGlzLmZpbmRDQygiaWZyYW1lIik7Ci10aGlzLm5vdGlmeU9mKCJtb2RlY2hhbmdlIix7Im1vZGUiOiJ3eXNpd3lnIn0pOwotdGhpcy5maXJlUGx1Z2luRXZlbnQoIm9uTW9kZSIsInd5c2l3eWciKTsKLWJyZWFrOwotZGVmYXVsdDoKLWFsZXJ0KCJNb2RlIDwiK19mZSsiPiBub3QgZGVmaW5lZCEiKTsKLXJldHVybiBmYWxzZTsKLX0KLXRoaXMuX2VkaXRNb2RlPV9mZTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuc2V0RnVsbEhUTUw9ZnVuY3Rpb24oaHRtbCl7Ci12YXIgXzEwMT1SZWdFeHAubXVsdGlsaW5lOwotUmVnRXhwLm11bHRpbGluZT10cnVlOwotaWYoaHRtbC5tYXRjaChYaW5oYS5SRV9kb2N0eXBlKSl7Ci10aGlzLnNldERvY3R5cGUoUmVnRXhwLiQxKTsKLX0KLVJlZ0V4cC5tdWx0aWxpbmU9XzEwMTsKLWlmKDApewotaWYoaHRtbC5tYXRjaChYaW5oYS5SRV9oZWFkKSl7Ci10aGlzLl9kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5pbm5lckhUTUw9UmVnRXhwLiQxOwotfQotaWYoaHRtbC5tYXRjaChYaW5oYS5SRV9ib2R5KSl7Ci10aGlzLl9kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5pbm5lckhUTUw9UmVnRXhwLiQxOwotfQotfWVsc2V7Ci12YXIgcmVhYz10aGlzLmVkaXRvcklzQWN0aXZhdGVkKCk7Ci1pZihyZWFjKXsKLXRoaXMuZGVhY3RpdmF0ZUVkaXRvcigpOwotfQotdmFyIF8xMDM9LzxodG1sPigoLnxcbikqPyk8XC9odG1sPi9pOwotaHRtbD1odG1sLnJlcGxhY2UoXzEwMywiJDEiKTsKLXRoaXMuX2RvYy5vcGVuKCJ0ZXh0L2h0bWwiLCJyZXBsYWNlIik7Ci10aGlzLl9kb2Mud3JpdGUoaHRtbCk7Ci10aGlzLl9kb2MuY2xvc2UoKTsKLWlmKHJlYWMpewotdGhpcy5hY3RpdmF0ZUVkaXRvcigpOwotfQotdGhpcy5zZXRFZGl0b3JFdmVudHMoKTsKLXJldHVybiB0cnVlOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5zZXRFZGl0b3JFdmVudHM9ZnVuY3Rpb24oXzEwNCl7Ci12YXIgXzEwNT10aGlzOwotdmFyIGRvYz10aGlzLl9kb2M7Ci1fMTA1LndoZW5Eb2NSZWFkeShmdW5jdGlvbigpewotaWYoIV8xMDQpewotWGluaGEuX2FkZEV2ZW50cyhkb2MsWyJtb3VzZWRvd24iXSxmdW5jdGlvbigpewotXzEwNS5hY3RpdmF0ZUVkaXRvcigpOwotcmV0dXJuIHRydWU7Ci19KTsKLWlmKFhpbmhhLmlzX2llKXsKLVhpbmhhLl9hZGRFdmVudChfMTA1Ll9kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImh0bWwiKVswXSwiY2xpY2siLGZ1bmN0aW9uKCl7Ci1pZihfMTA1Ll9pZnJhbWUuY29udGVudFdpbmRvdy5ldmVudC5zcmNFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09Imh0bWwiKXsKLXZhciByPV8xMDUuX2RvYy5ib2R5LmNyZWF0ZVRleHRSYW5nZSgpOwotci5jb2xsYXBzZSgpOwotci5zZWxlY3QoKTsKLX0KLXJldHVybiB0cnVlOwotfSk7Ci19Ci19Ci1YaW5oYS5fYWRkRXZlbnRzKGRvYyxbImtleWRvd24iLCJrZXlwcmVzcyIsIm1vdXNlZG93biIsIm1vdXNldXAiLCJkcmFnIl0sZnVuY3Rpb24oXzEwOCl7Ci1yZXR1cm4gXzEwNS5fZWRpdG9yRXZlbnQoWGluaGEuaXNfaWU/XzEwNS5faWZyYW1lLmNvbnRlbnRXaW5kb3cuZXZlbnQ6XzEwOCk7Ci19KTsKLVhpbmhhLl9hZGRFdmVudHMoZG9jLFsiZGJsY2xpY2siXSxmdW5jdGlvbihfMTA5KXsKLXJldHVybiBfMTA1Ll9vbkRvdWJsZUNsaWNrKFhpbmhhLmlzX2llP18xMDUuX2lmcmFtZS5jb250ZW50V2luZG93LmV2ZW50Ol8xMDkpOwotfSk7Ci1pZihfMTA0KXsKLXJldHVybjsKLX0KLWZvcih2YXIgaSBpbiBfMTA1LnBsdWdpbnMpewotdmFyIF8xMGI9XzEwNS5wbHVnaW5zW2ldLmluc3RhbmNlOwotWGluaGEucmVmcmVzaFBsdWdpbihfMTBiKTsKLX0KLWlmKHR5cGVvZiBfMTA1Ll9vbkdlbmVyYXRlPT0iZnVuY3Rpb24iKXsKLV8xMDUuX29uR2VuZXJhdGUoKTsKLX0KLVhpbmhhLmFkZERvbTBFdmVudCh3aW5kb3csInJlc2l6ZSIsZnVuY3Rpb24oZSl7Ci1pZihYaW5oYS5pZV92ZXJzaW9uPjcmJiF3aW5kb3cucGFyZW50KXsKLWlmKF8xMDUuZXhlY1Jlc2l6ZSl7Ci1fMTA1LnNpemVFZGl0b3IoKTsKLV8xMDUuZXhlY1Jlc2l6ZT1mYWxzZTsKLX1lbHNlewotXzEwNS5leGVjUmVzaXplPXRydWU7Ci19Ci19ZWxzZXsKLV8xMDUuc2l6ZUVkaXRvcigpOwotfQotfSk7Ci1fMTA1LnJlbW92ZUxvYWRpbmdNZXNzYWdlKCk7Ci19KTsKLX07Ci1YaW5oYS5nZXRQbHVnaW5Db25zdHJ1Y3Rvcj1mdW5jdGlvbihfMTBkKXsKLXJldHVybiBYaW5oYS5wbHVnaW5zW18xMGRdfHx3aW5kb3dbXzEwZF07Ci19OwotWGluaGEucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luPWZ1bmN0aW9uKCl7Ci1pZighWGluaGEuaXNTdXBwb3J0ZWRCcm93c2VyKXsKLXJldHVybjsKLX0KLXZhciBfMTBlPWFyZ3VtZW50c1swXTsKLWlmKF8xMGU9PT1udWxsfHx0eXBlb2YgXzEwZT09InVuZGVmaW5lZCJ8fCh0eXBlb2YgXzEwZT09InN0cmluZyImJlhpbmhhLmdldFBsdWdpbkNvbnN0cnVjdG9yKF8xMGUpPT0idW5kZWZpbmVkIikpewotcmV0dXJuIGZhbHNlOwotfQotdmFyIGFyZ3M9W107Ci1mb3IodmFyIGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7KytpKXsKLWFyZ3MucHVzaChhcmd1bWVudHNbaV0pOwotfQotcmV0dXJuIHRoaXMucmVnaXN0ZXJQbHVnaW4yKF8xMGUsYXJncyk7Ci19OwotWGluaGEucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luMj1mdW5jdGlvbihfMTExLGFyZ3MpewotaWYodHlwZW9mIF8xMTE9PSJzdHJpbmciJiZ0eXBlb2YgWGluaGEuZ2V0UGx1Z2luQ29uc3RydWN0b3IoXzExMSk9PSJmdW5jdGlvbiIpewotdmFyIF8xMTM9XzExMTsKLV8xMTE9WGluaGEuZ2V0UGx1Z2luQ29uc3RydWN0b3IoXzExMSk7Ci19Ci1pZih0eXBlb2YgXzExMT09InVuZGVmaW5lZCIpewotcmV0dXJuIGZhbHNlOwotfQotaWYoIV8xMTEuX3BsdWdpbkluZm8pewotXzExMS5fcGx1Z2luSW5mbz17bmFtZTpfMTEzfTsKLX0KLXZhciBvYmo9bmV3IF8xMTEodGhpcyxhcmdzKTsKLWlmKG9iail7Ci12YXIgXzExNT17fTsKLXZhciBpbmZvPV8xMTEuX3BsdWdpbkluZm87Ci1mb3IodmFyIGkgaW4gaW5mbyl7Ci1fMTE1W2ldPWluZm9baV07Ci19Ci1fMTE1Lmluc3RhbmNlPW9iajsKLV8xMTUuYXJncz1hcmdzOwotdGhpcy5wbHVnaW5zW18xMTEuX3BsdWdpbkluZm8ubmFtZV09XzExNTsKLXJldHVybiBvYmo7Ci19ZWxzZXsKLVhpbmhhLmRlYnVnTXNnKCJDYW4ndCByZWdpc3RlciBwbHVnaW4gIitfMTExLnRvU3RyaW5nKCkrIi4iLCJ3YXJuIik7Ci19Ci19OwotWGluaGEuZ2V0UGx1Z2luRGlyPWZ1bmN0aW9uKF8xMTgsXzExOSl7Ci1pZihYaW5oYS5leHRlcm5hbFBsdWdpbnNbXzExOF0pewotcmV0dXJuIFhpbmhhLmV4dGVybmFsUGx1Z2luc1tfMTE4XVswXTsKLX0KLWlmKF8xMTl8fChYaW5oYS5nZXRQbHVnaW5Db25zdHJ1Y3RvcihfMTE4KSYmKHR5cGVvZiBYaW5oYS5nZXRQbHVnaW5Db25zdHJ1Y3RvcihfMTE4KS5zdXBwb3J0ZWQhPSJ1bmRlZmluZWQiKSYmIVhpbmhhLmdldFBsdWdpbkNvbnN0cnVjdG9yKF8xMTgpLnN1cHBvcnRlZCkpewotcmV0dXJuIF9lZGl0b3JfdXJsKyJ1bnN1cHBvcnRlZF9wbHVnaW5zLyIrXzExODsKLX0KLXJldHVybiBfZWRpdG9yX3VybCsicGx1Z2lucy8iK18xMTg7Ci19OwotWGluaGEubG9hZFBsdWdpbj1mdW5jdGlvbihfMTFhLF8xMWIsdXJsKXsKLWlmKCFYaW5oYS5pc1N1cHBvcnRlZEJyb3dzZXIpewotcmV0dXJuOwotfQotWGluaGEuc2V0TG9hZGluZ01lc3NhZ2UoWGluaGEuX2xjKCJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luPSIrXzExYSsiJCIpKTsKLWlmKHR5cGVvZiBYaW5oYS5nZXRQbHVnaW5Db25zdHJ1Y3RvcihfMTFhKSE9InVuZGVmaW5lZCIpewotaWYoXzExYil7Ci1fMTFiKF8xMWEpOwotfQotcmV0dXJuIHRydWU7Ci19Ci1YaW5oYS5fcGx1Z2luTG9hZFN0YXR1c1tfMTFhXT0ibG9hZGluZyI7Ci1mdW5jdGlvbiBtdWx0aVN0YWdlTG9hZGVyKF8xMWQsXzExZSl7Ci12YXIgXzExZixkaXIsZmlsZSxfMTIyOwotc3dpdGNoKF8xMWQpewotY2FzZSAic3RhcnQiOgotXzExZj0ib2xkX25hbWluZyI7Ci1kaXI9WGluaGEuZ2V0UGx1Z2luRGlyKF8xMWUpOwotZmlsZT1fMTFlKyIuanMiOwotYnJlYWs7Ci1jYXNlICJvbGRfbmFtaW5nIjoKLV8xMWY9InVuc3VwcG9ydGVkIjsKLWRpcj1YaW5oYS5nZXRQbHVnaW5EaXIoXzExZSk7Ci1maWxlPV8xMWUucmVwbGFjZSgvKFthLXpdKShbQS1aXSkoW2Etel0pL2csZnVuY3Rpb24oc3RyLGwxLGwyLGwzKXsKLXJldHVybiBsMSsiLSIrbDIudG9Mb3dlckNhc2UoKStsMzsKLX0pLnRvTG93ZXJDYXNlKCkrIi5qcyI7Ci1fMTIyPSJZb3UgYXJlIHVzaW5nIGFuIG9ic29sZXRlIG5hbWluZyBzY2hlbWUgZm9yIHRoZSBYaW5oYSBwbHVnaW4gIitfMTFlKyIuIFBsZWFzZSByZW5hbWUgIitmaWxlKyIgdG8gIitfMTFlKyIuanMiOwotYnJlYWs7Ci1jYXNlICJ1bnN1cHBvcnRlZCI6Ci1fMTFmPSJ1bnN1cHBvcnRlZF9vbGRfbmFtZSI7Ci1kaXI9WGluaGEuZ2V0UGx1Z2luRGlyKF8xMWUsdHJ1ZSk7Ci1maWxlPV8xMWUrIi5qcyI7Ci1fMTIyPSJZb3UgYXJlIHVzaW5nIHRoZSB1bnN1cHBvcnRlZCBYaW5oYSBwbHVnaW4gIitfMTFlKyIuIElmIHlvdSB3aXNoIGNvbnRpbnVlZCBzdXBwb3J0LCBwbGVhc2Ugc2VlIGh0dHA6Ly90cmFjLnhpbmhhLm9yZy90aWNrZXQvMTI5NyI7Ci1icmVhazsKLWNhc2UgInVuc3VwcG9ydGVkX29sZF9uYW1lIjoKLV8xMWY9IiI7Ci1kaXI9WGluaGEuZ2V0UGx1Z2luRGlyKF8xMWUsdHJ1ZSk7Ci1maWxlPV8xMWUucmVwbGFjZSgvKFthLXpdKShbQS1aXSkoW2Etel0pL2csZnVuY3Rpb24oc3RyLGwxLGwyLGwzKXsKLXJldHVybiBsMSsiLSIrbDIudG9Mb3dlckNhc2UoKStsMzsKLX0pLnRvTG93ZXJDYXNlKCkrIi5qcyI7Ci1fMTIyPSJZb3UgYXJlIHVzaW5nIHRoZSB1bnN1cHBvcnRlZCBYaW5oYSBwbHVnaW4gIitfMTFlKyIuIElmIHlvdSB3aXNoIGNvbnRpbnVlZCBzdXBwb3J0LCBwbGVhc2Ugc2VlIGh0dHA6Ly90cmFjLnhpbmhhLm9yZy90aWNrZXQvMTI5NyI7Ci1icmVhazsKLWRlZmF1bHQ6Ci1YaW5oYS5fcGx1Z2luTG9hZFN0YXR1c1tfMTFlXT0iZmFpbGVkIjsKLVhpbmhhLmRlYnVnTXNnKCJYaW5oYSB3YXMgbm90IGFibGUgdG8gZmluZCB0aGUgcGx1Z2luICIrXzExZSsiLiBQbGVhc2UgbWFrZSBzdXJlIHRoZSBwbHVnaW4gZXhpc3RzLiIsIndhcm4iKTsKLXJldHVybjsKLX0KLXZhciB1cmw9ZGlyKyIvIitmaWxlOwotZnVuY3Rpb24gc3RhdHVzQ2FsbGJhY2soXzEyYyl7Ci1YaW5oYS5nZXRQbHVnaW5Db25zdHJ1Y3RvcihfMTJjKS5zdXBwb3J0ZWQ9XzExZC5pbmRleE9mKCJ1bnN1cHBvcnRlZCIpIT09MDsKLV8xMWIoXzEyYyk7Ci19OwotWGluaGEuX2xvYWRiYWNrKHVybCxzdGF0dXNDYWxsYmFjayx0aGlzLF8xMWUpOwotWGluaGEucGluZyh1cmwsZnVuY3Rpb24oKXsKLWlmKF8xMjIpewotWGluaGEuZGVidWdNc2coXzEyMik7Ci19Ci19LGZ1bmN0aW9uKCl7Ci1YaW5oYS5yZW1vdmVGcm9tUGFyZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHVybCkpOwotbXVsdGlTdGFnZUxvYWRlcihfMTFmLF8xMWUpOwotfSk7Ci19OwotaWYoIXVybCl7Ci1pZihYaW5oYS5leHRlcm5hbFBsdWdpbnNbXzExYV0pewotWGluaGEuX2xvYWRiYWNrKFhpbmhhLmV4dGVybmFsUGx1Z2luc1tfMTFhXVswXStYaW5oYS5leHRlcm5hbFBsdWdpbnNbXzExYV1bMV0sXzExYix0aGlzLF8xMWEpOwotfWVsc2V7Ci12YXIgXzEyZD10aGlzOwotbXVsdGlTdGFnZUxvYWRlcigic3RhcnQiLF8xMWEpOwotfQotfWVsc2V7Ci1YaW5oYS5fbG9hZGJhY2sodXJsLF8xMWIsdGhpcyxfMTFhKTsKLX0KLXJldHVybiBmYWxzZTsKLX07Ci1YaW5oYS5fcGx1Z2luTG9hZFN0YXR1cz17fTsKLVhpbmhhLmV4dGVybmFsUGx1Z2lucz17fTsKLVhpbmhhLnBsdWdpbnM9e307Ci1YaW5oYS5sb2FkUGx1Z2lucz1mdW5jdGlvbihfMTJlLF8xMmYsdXJsKXsKLWlmKCFYaW5oYS5pc1N1cHBvcnRlZEJyb3dzZXIpewotcmV0dXJuOwotfQotdmFyIG0saTsKLWZvcihpPTA7aTxfMTJlLmxlbmd0aDtpKyspewotaWYodHlwZW9mIF8xMmVbaV09PSJvYmplY3QiKXsKLW09XzEyZVtpXS51cmwubWF0Y2goLyguKikoXC9bXlwvXSopJC8pOwotWGluaGEuZXh0ZXJuYWxQbHVnaW5zW18xMmVbaV0ucGx1Z2luXT1bbVsxXSxtWzJdXTsKLV8xMmVbaV09XzEyZVtpXS5wbHVnaW47Ci19Ci19Ci12YXIgXzEzMz10cnVlOwotdmFyIF8xMzQ9WGluaGEuY2xvbmVPYmplY3QoXzEyZSk7Ci1mb3IoaT0wO2k8XzEzNC5sZW5ndGg7aSsrKXsKLXZhciBwPV8xMzRbaV07Ci1pZihwPT0iRnVsbFNjcmVlbiImJiFYaW5oYS5leHRlcm5hbFBsdWdpbnMuRnVsbFNjcmVlbil7Ci1jb250aW51ZTsKLX0KLWlmKHR5cGVvZiBYaW5oYS5fcGx1Z2luTG9hZFN0YXR1c1twXT09InVuZGVmaW5lZCIpewotWGluaGEubG9hZFBsdWdpbihwLGZ1bmN0aW9uKF8xMzYpewotWGluaGEuc2V0TG9hZGluZ01lc3NhZ2UoWGluaGEuX2xjKCJGaW5pc2hpbmciKSk7Ci1pZih0eXBlb2YgWGluaGEuZ2V0UGx1Z2luQ29uc3RydWN0b3IoXzEzNikhPSJ1bmRlZmluZWQiKXsKLVhpbmhhLl9wbHVnaW5Mb2FkU3RhdHVzW18xMzZdPSJyZWFkeSI7Ci19ZWxzZXsKLVhpbmhhLl9wbHVnaW5Mb2FkU3RhdHVzW18xMzZdPSJmYWlsZWQiOwotfQotfSx1cmwpOwotXzEzMz1mYWxzZTsKLX1lbHNlewotaWYoWGluaGEuX3BsdWdpbkxvYWRTdGF0dXNbcF09PSJsb2FkaW5nIil7Ci1fMTMzPWZhbHNlOwotfQotfQotfQotaWYoXzEzMyl7Ci1yZXR1cm4gdHJ1ZTsKLX0KLWlmKF8xMmYpewotc2V0VGltZW91dChmdW5jdGlvbigpewotaWYoWGluaGEubG9hZFBsdWdpbnMoXzEyZSxfMTJmKSl7Ci1fMTJmKCk7Ci19Ci19LDUwKTsKLX0KLXJldHVybiBfMTMzOwotfTsKLVhpbmhhLnJlZnJlc2hQbHVnaW49ZnVuY3Rpb24oXzEzNyl7Ci1pZihfMTM3JiZ0eXBlb2YgXzEzNy5vbkdlbmVyYXRlPT0iZnVuY3Rpb24iKXsKLV8xMzcub25HZW5lcmF0ZSgpOwotfQotaWYoXzEzNyYmdHlwZW9mIF8xMzcub25HZW5lcmF0ZU9uY2U9PSJmdW5jdGlvbiIpewotXzEzNy5fb25nZW5lcmF0ZU9uY2U9XzEzNy5vbkdlbmVyYXRlT25jZTsKLWRlbGV0ZSAoXzEzNy5vbkdlbmVyYXRlT25jZSk7Ci1fMTM3Ll9vbmdlbmVyYXRlT25jZSgpOwotZGVsZXRlIChfMTM3Ll9vbmdlbmVyYXRlT25jZSk7Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmZpcmVQbHVnaW5FdmVudD1mdW5jdGlvbihfMTM4KXsKLXZhciBfMTM5PVtdOwotZm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7Ci1fMTM5W2ktMV09YXJndW1lbnRzW2ldOwotfQotZm9yKGkgaW4gdGhpcy5wbHVnaW5zKXsKLXZhciBfMTNiPXRoaXMucGx1Z2luc1tpXS5pbnN0YW5jZTsKLWlmKF8xM2I9PXRoaXMuX2Jyb3dzZXJTcGVjaWZpY1BsdWdpbil7Ci1jb250aW51ZTsKLX0KLWlmKF8xM2ImJnR5cGVvZiBfMTNiW18xMzhdPT0iZnVuY3Rpb24iKXsKLXZhciBfMTNjPShpPT0iRXZlbnRzIik/dGhpczpfMTNiOwotaWYoXzEzYltfMTM4XS5hcHBseShfMTNjLF8xMzkpKXsKLXJldHVybiB0cnVlOwotfQotfQotfQotXzEzYj10aGlzLl9icm93c2VyU3BlY2lmaWNQbHVnaW47Ci1pZihfMTNiJiZ0eXBlb2YgXzEzYltfMTM4XT09ImZ1bmN0aW9uIil7Ci1pZihfMTNiW18xMzhdLmFwcGx5KF8xM2IsXzEzOSkpewotcmV0dXJuIHRydWU7Ci19Ci19Ci1yZXR1cm4gZmFsc2U7Ci19OwotWGluaGEubG9hZFN0eWxlPWZ1bmN0aW9uKF8xM2QsXzEzZSxpZCxfMTQwKXsKLXZhciB1cmw9X2VkaXRvcl91cmx8fCIiOwotaWYoXzEzZSl7Ci11cmw9WGluaGEuZ2V0UGx1Z2luRGlyKF8xM2UpKyIvIjsKLX0KLXVybCs9XzEzZDsKLWlmKC9eXC8vLnRlc3QoXzEzZCkpewotdXJsPV8xM2Q7Ci19Ci12YXIgaGVhZD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdOwotdmFyIGxpbms9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpOwotbGluay5yZWw9InN0eWxlc2hlZXQiOwotbGluay5ocmVmPXVybDsKLWxpbmsudHlwZT0idGV4dC9jc3MiOwotaWYoaWQpewotbGluay5pZD1pZDsKLX0KLWlmKF8xNDAmJmhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKVswXSl7Ci1oZWFkLmluc2VydEJlZm9yZShsaW5rLGhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKVswXSk7Ci19ZWxzZXsKLWhlYWQuYXBwZW5kQ2hpbGQobGluayk7Ci19Ci19OwotWGluaGEubG9hZFNjcmlwdD1mdW5jdGlvbihfMTQ0LF8xNDUsXzE0Nil7Ci12YXIgdXJsPV9lZGl0b3JfdXJsfHwiIjsKLWlmKF8xNDUpewotdXJsPVhpbmhhLmdldFBsdWdpbkRpcihfMTQ1KSsiLyI7Ci19Ci11cmwrPV8xNDQ7Ci1pZigvXlwvLy50ZXN0KF8xNDQpKXsKLXVybD1fMTQ0OwotfQotWGluaGEuX2xvYWRiYWNrKHVybCxfMTQ2KTsKLX07Ci1YaW5oYS5pbmNsdWRlQXNzZXRzPWZ1bmN0aW9uKCl7Ci12YXIgXzE0OD17cGVuZGluZ0Fzc2V0czpbXSxsb2FkZXJSdW5uaW5nOmZhbHNlLGxvYWRlZFNjcmlwdHM6W119OwotXzE0OC5jYWxsYmFja3M9W107Ci1fMTQ4LmxvYWROZXh0PWZ1bmN0aW9uKCl7Ci12YXIgc2VsZj10aGlzOwotdGhpcy5sb2FkZXJSdW5uaW5nPXRydWU7Ci1pZih0aGlzLnBlbmRpbmdBc3NldHMubGVuZ3RoKXsKLXZhciBueHQ9dGhpcy5wZW5kaW5nQXNzZXRzWzBdOwotdGhpcy5wZW5kaW5nQXNzZXRzLnNwbGljZSgwLDEpOwotc3dpdGNoKG54dC50eXBlKXsKLWNhc2UgInRleHQvY3NzIjoKLVhpbmhhLmxvYWRTdHlsZShueHQudXJsLG54dC5wbHVnaW4pOwotcmV0dXJuIHRoaXMubG9hZE5leHQoKTsKLWNhc2UgInRleHQvamF2YXNjcmlwdCI6Ci1YaW5oYS5sb2FkU2NyaXB0KG54dC51cmwsbnh0LnBsdWdpbixmdW5jdGlvbigpewotc2VsZi5sb2FkTmV4dCgpOwotfSk7Ci19Ci19ZWxzZXsKLXRoaXMubG9hZGVyUnVubmluZz1mYWxzZTsKLXRoaXMucnVuQ2FsbGJhY2soKTsKLX0KLX07Ci1fMTQ4LmxvYWRTY3JpcHQ9ZnVuY3Rpb24odXJsLF8xNGMpewotdmFyIHNlbGY9dGhpczsKLXRoaXMucGVuZGluZ0Fzc2V0cy5wdXNoKHsidHlwZSI6InRleHQvamF2YXNjcmlwdCIsInVybCI6dXJsLCJwbHVnaW4iOl8xNGN9KTsKLWlmKCF0aGlzLmxvYWRlclJ1bm5pbmcpewotdGhpcy5sb2FkTmV4dCgpOwotfQotcmV0dXJuIHRoaXM7Ci19OwotXzE0OC5sb2FkU2NyaXB0T25jZT1mdW5jdGlvbih1cmwsXzE0Zil7Ci1mb3IodmFyIGk9MDtpPHRoaXMubG9hZGVkU2NyaXB0cy5sZW5ndGg7aSsrKXsKLWlmKHRoaXMubG9hZGVkU2NyaXB0c1tpXS51cmw9PXVybCYmdGhpcy5sb2FkZWRTY3JpcHRzW2ldLnBsdWdpbj09XzE0Zil7Ci1yZXR1cm4gdGhpczsKLX0KLX0KLXJldHVybiB0aGlzLmxvYWRTY3JpcHQodXJsLF8xNGYpOwotfTsKLV8xNDgubG9hZFN0eWxlPWZ1bmN0aW9uKHVybCxfMTUyKXsKLXZhciBzZWxmPXRoaXM7Ci10aGlzLnBlbmRpbmdBc3NldHMucHVzaCh7InR5cGUiOiJ0ZXh0L2NzcyIsInVybCI6dXJsLCJwbHVnaW4iOl8xNTJ9KTsKLWlmKCF0aGlzLmxvYWRlclJ1bm5pbmcpewotdGhpcy5sb2FkTmV4dCgpOwotfQotcmV0dXJuIHRoaXM7Ci19OwotXzE0OC53aGVuUmVhZHk9ZnVuY3Rpb24oXzE1NCl7Ci10aGlzLmNhbGxiYWNrcy5wdXNoKF8xNTQpOwotaWYoIXRoaXMubG9hZGVyUnVubmluZyl7Ci10aGlzLmxvYWROZXh0KCk7Ci19Ci1yZXR1cm4gdGhpczsKLX07Ci1fMTQ4LnJ1bkNhbGxiYWNrPWZ1bmN0aW9uKCl7Ci13aGlsZSh0aGlzLmNhbGxiYWNrcy5sZW5ndGgpewotdmFyIF8xNTU9dGhpcy5jYWxsYmFja3Muc3BsaWNlKDAsMSk7Ci1fMTU1WzBdKCk7Ci1fMTU1PW51bGw7Ci19Ci1yZXR1cm4gdGhpczsKLX07Ci1mb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXsKLWlmKHR5cGVvZiBhcmd1bWVudHNbaV09PSJzdHJpbmciKXsKLWlmKGFyZ3VtZW50c1tpXS5tYXRjaCgvXC5jc3MkL2kpKXsKLV8xNDgubG9hZFN0eWxlKGFyZ3VtZW50c1tpXSk7Ci19ZWxzZXsKLV8xNDgubG9hZFNjcmlwdChhcmd1bWVudHNbaV0pOwotfQotfWVsc2V7Ci1pZihhcmd1bWVudHNbaV0udHlwZSl7Ci1pZihhcmd1bWVudHNbaV0udHlwZS5tYXRjaCgvdGV4dFwvY3NzL2kpKXsKLV8xNDgubG9hZFN0eWxlKGFyZ3VtZW50c1tpXS51cmwsYXJndW1lbnRzW2ldLnBsdWdpbik7Ci19ZWxzZXsKLWlmKGFyZ3VtZW50c1tpXS50eXBlLm1hdGNoKC90ZXh0XC9qYXZhc2NyaXB0L2kpKXsKLV8xNDgubG9hZFNjcmlwdChhcmd1bWVudHNbaV0udXJsLGFyZ3VtZW50c1tpXS5wbHVnaW4pOwotfQotfQotfWVsc2V7Ci1pZihhcmd1bWVudHNbaV0ubGVuZ3RoPj0xKXsKLWlmKGFyZ3VtZW50c1tpXVswXS5tYXRjaCgvXC5jc3MkL2kpKXsKLV8xNDgubG9hZFN0eWxlKGFyZ3VtZW50c1tpXVswXSxhcmd1bWVudHNbaV1bMV0pOwotfWVsc2V7Ci1fMTQ4LmxvYWRTY3JpcHQoYXJndW1lbnRzW2ldWzBdLGFyZ3VtZW50c1tpXVsxXSk7Ci19Ci19Ci19Ci19Ci19Ci1yZXR1cm4gXzE0ODsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZGVidWdUcmVlPWZ1bmN0aW9uKCl7Ci12YXIgdGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTsKLXRhLnN0eWxlLndpZHRoPSIxMDAlIjsKLXRhLnN0eWxlLmhlaWdodD0iMjBlbSI7Ci10YS52YWx1ZT0iIjsKLWZ1bmN0aW9uIGRlYnVnKF8xNTgsc3RyKXsKLWZvcig7LS1fMTU4Pj0wOyl7Ci10YS52YWx1ZSs9IiAiOwotfQotdGEudmFsdWUrPXN0cisiXG4iOwotfTsKLWZ1bmN0aW9uIF9kdChyb290LF8xNWIpewotdmFyIHRhZz1yb290LnRhZ05hbWUudG9Mb3dlckNhc2UoKSxpOwotdmFyIG5zPVhpbmhhLmlzX2llP3Jvb3Quc2NvcGVOYW1lOnJvb3QucHJlZml4OwotZGVidWcoXzE1YiwiLSAiK3RhZysiIFsiK25zKyJdIik7Ci1mb3IoaT1yb290LmZpcnN0Q2hpbGQ7aTtpPWkubmV4dFNpYmxpbmcpewotaWYoaS5ub2RlVHlwZT09MSl7Ci1fZHQoaSxfMTViKzIpOwotfQotfQotfTsKLV9kdCh0aGlzLl9kb2MuYm9keSwwKTsKLWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGEpOwotfTsKLVhpbmhhLmdldElubmVyVGV4dD1mdW5jdGlvbihlbCl7Ci12YXIgdHh0PSIiLGk7Ci1mb3IoaT1lbC5maXJzdENoaWxkO2k7aT1pLm5leHRTaWJsaW5nKXsKLWlmKGkubm9kZVR5cGU9PTMpewotdHh0Kz1pLmRhdGE7Ci19ZWxzZXsKLWlmKGkubm9kZVR5cGU9PTEpewotdHh0Kz1YaW5oYS5nZXRJbm5lclRleHQoaSk7Ci19Ci19Ci19Ci1yZXR1cm4gdHh0OwotfTsKLVhpbmhhLnByb3RvdHlwZS5fd29yZENsZWFuPWZ1bmN0aW9uKCl7Ci12YXIgXzE2Mj10aGlzOwotdmFyIF8xNjM9e2VtcHR5X3RhZ3M6MCxjb25kX2NvbW06MCxtc29fZWxtdHM6MCxtc29fY2xhc3M6MCxtc29fc3R5bGU6MCxtc29feG1sZWw6MCxvcmlnX2xlbjp0aGlzLl9kb2MuYm9keS5pbm5lckhUTUwubGVuZ3RoLFQ6bmV3IERhdGUoKS5nZXRUaW1lKCl9OwotdmFyIF8xNjQ9e2VtcHR5X3RhZ3M6IkVtcHR5IHRhZ3MgcmVtb3ZlZDogIixjb25kX2NvbW06IkNvbmRpdGlvbmFsIGNvbW1lbnRzIHJlbW92ZWQiLG1zb19lbG10czoiTVNPIGludmFsaWQgZWxlbWVudHMgcmVtb3ZlZCIsbXNvX2NsYXNzOiJNU08gY2xhc3MgbmFtZXMgcmVtb3ZlZDogIixtc29fc3R5bGU6Ik1TTyBpbmxpbmUgc3R5bGUgcmVtb3ZlZDogIixtc29feG1sZWw6Ik1TTyBYTUwgZWxlbWVudHMgc3RyaXBwZWQ6ICJ9OwotZnVuY3Rpb24gc2hvd1N0YXRzKCl7Ci12YXIgdHh0PSJYaW5oYSB3b3JkIGNsZWFuZXIgc3RhdHM6IFxuXG4iOwotZm9yKHZhciBpIGluIF8xNjMpewotaWYoXzE2NFtpXSl7Ci10eHQrPV8xNjRbaV0rXzE2M1tpXSsiXG4iOwotfQotfQotdHh0Kz0iXG5Jbml0aWFsIGRvY3VtZW50IGxlbmd0aDogIitfMTYzLm9yaWdfbGVuKyJcbiI7Ci10eHQrPSJGaW5hbCBkb2N1bWVudCBsZW5ndGg6ICIrXzE2Mi5fZG9jLmJvZHkuaW5uZXJIVE1MLmxlbmd0aCsiXG4iOwotdHh0Kz0iQ2xlYW4tdXAgdG9vayAiKygobmV3IERhdGUoKS5nZXRUaW1lKCktXzE2My5UKS8xMDAwKSsiIHNlY29uZHMiOwotYWxlcnQodHh0KTsKLX07Ci1mdW5jdGlvbiBjbGVhckNsYXNzKG5vZGUpewotdmFyIG5ld2M9bm9kZS5jbGFzc05hbWUucmVwbGFjZSgvKF58XHMpbXNvLio/KFxzfCQpL2lnLCIgIik7Ci1pZihuZXdjIT1ub2RlLmNsYXNzTmFtZSl7Ci1ub2RlLmNsYXNzTmFtZT1uZXdjOwotaWYoIS9cUy8udGVzdChub2RlLmNsYXNzTmFtZSkpewotbm9kZS5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzTmFtZSIpOwotKytfMTYzLm1zb19jbGFzczsKLX0KLX0KLX07Ci1mdW5jdGlvbiBjbGVhclN0eWxlKG5vZGUpewotdmFyIF8xNmE9bm9kZS5zdHlsZS5jc3NUZXh0LnNwbGl0KC9ccyo7XHMqLyk7Ci1mb3IodmFyIGk9XzE2YS5sZW5ndGg7LS1pPj0wOyl7Ci1pZigvXm1zb3xedGFiLXN0b3BzL2kudGVzdChfMTZhW2ldKXx8L15tYXJnaW5ccyo6XHMqMC4uXHMrMC4uXHMrMC4uL2kudGVzdChfMTZhW2ldKSl7Ci0rK18xNjMubXNvX3N0eWxlOwotXzE2YS5zcGxpY2UoaSwxKTsKLX0KLX0KLW5vZGUuc3R5bGUuY3NzVGV4dD1fMTZhLmpvaW4oIjsgIik7Ci19OwotZnVuY3Rpb24gcmVtb3ZlRWxlbWVudHMoZWwpewotaWYoKCJsaW5rIj09ZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpJiYoZWwuYXR0cmlidXRlcyYmL0ZpbGUtTGlzdHxFZGl0LVRpbWUtRGF0YXx0aGVtZURhdGF8Y29sb3JTY2hlbWVNYXBwaW5nLy50ZXN0KGVsLmF0dHJpYnV0ZXMucmVsLm5vZGVWYWx1ZSkpKXx8L14oc3R5bGV8bWV0YSkkL2kudGVzdChlbC50YWdOYW1lKSl7Ci1YaW5oYS5yZW1vdmVGcm9tUGFyZW50KGVsKTsKLSsrXzE2My5tc29fZWxtdHM7Ci1yZXR1cm4gdHJ1ZTsKLX0KLXJldHVybiBmYWxzZTsKLX07Ci1mdW5jdGlvbiBjaGVja0VtcHR5KGVsKXsKLWlmKC9eKGF8c3BhbnxifHN0cm9uZ3xpfGVtfGZvbnR8ZGl2fHApJC9pLnRlc3QoZWwudGFnTmFtZSkmJiFlbC5maXJzdENoaWxkKXsKLVhpbmhhLnJlbW92ZUZyb21QYXJlbnQoZWwpOwotKytfMTYzLmVtcHR5X3RhZ3M7Ci1yZXR1cm4gdHJ1ZTsKLX0KLXJldHVybiBmYWxzZTsKLX07Ci1mdW5jdGlvbiBwYXJzZVRyZWUocm9vdCl7Ci1jbGVhckNsYXNzKHJvb3QpOwotY2xlYXJTdHlsZShyb290KTsKLXZhciBuZXh0OwotZm9yKHZhciBpPXJvb3QuZmlyc3RDaGlsZDtpO2k9bmV4dCl7Ci1uZXh0PWkubmV4dFNpYmxpbmc7Ci1pZihpLm5vZGVUeXBlPT0xJiZwYXJzZVRyZWUoaSkpewotaWYoKFhpbmhhLmlzX2llJiZyb290LnNjb3BlTmFtZSE9IkhUTUwiKXx8KCFYaW5oYS5pc19pZSYmLzovLnRlc3QoaS50YWdOYW1lKSkpewotZm9yKHZhciBfMTcxPWkuY2hpbGROb2RlcyYmaS5jaGlsZE5vZGVzLmxlbmd0aC0xO2kuY2hpbGROb2RlcyYmaS5jaGlsZE5vZGVzLmxlbmd0aCYmaS5jaGlsZE5vZGVzW18xNzFdOy0tXzE3MSl7Ci1pZihpLm5leHRTaWJsaW5nKXsKLWkucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaS5jaGlsZE5vZGVzW18xNzFdLGkubmV4dFNpYmxpbmcpOwotfWVsc2V7Ci1pLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoaS5jaGlsZE5vZGVzW18xNzFdKTsKLX0KLX0KLVhpbmhhLnJlbW92ZUZyb21QYXJlbnQoaSk7Ci1jb250aW51ZTsKLX0KLWlmKGNoZWNrRW1wdHkoaSkpewotY29udGludWU7Ci19Ci1pZihyZW1vdmVFbGVtZW50cyhpKSl7Ci1jb250aW51ZTsKLX0KLX1lbHNlewotaWYoaS5ub2RlVHlwZT09OCl7Ci1pZigvKFxzKlxbXHMqaWZccyooKFtnbF10ZT98ISlccyopPyhJRXxtc28pXHMqKFxkKyhcLlxkKyk/XHMqKT9cXT4pLy50ZXN0KGkubm9kZVZhbHVlKSl7Ci1YaW5oYS5yZW1vdmVGcm9tUGFyZW50KGkpOwotKytfMTYzLmNvbmRfY29tbTsKLX0KLX0KLX0KLX0KLXJldHVybiB0cnVlOwotfTsKLXBhcnNlVHJlZSh0aGlzLl9kb2MuYm9keSk7Ci10aGlzLnVwZGF0ZVRvb2xiYXIoKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuX2NsZWFyRm9udHM9ZnVuY3Rpb24oKXsKLXZhciBEPXRoaXMuZ2V0SW5uZXJIVE1MKCk7Ci1pZihjb25maXJtKFhpbmhhLl9sYygiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IikpKXsKLUQ9RC5yZXBsYWNlKC9mYWNlPSJbXiJdKiIvZ2ksIiIpOwotRD1ELnJlcGxhY2UoL2ZvbnQtZmFtaWx5OlteO30iJ10rOz8vZ2ksIiIpOwotfQotaWYoY29uZmlybShYaW5oYS5fbGMoIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IikpKXsKLUQ9RC5yZXBsYWNlKC9zaXplPSJbXiJdKiIvZ2ksIiIpOwotRD1ELnJlcGxhY2UoL2ZvbnQtc2l6ZTpbXjt9IiddKzs/L2dpLCIiKTsKLX0KLWlmKGNvbmZpcm0oWGluaGEuX2xjKCJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IikpKXsKLUQ9RC5yZXBsYWNlKC9jb2xvcj0iW14iXSoiL2dpLCIiKTsKLUQ9RC5yZXBsYWNlKC8oW15cLV0pY29sb3I6W147fSInXSs7Py9naSwiJDEiKTsKLX0KLUQ9RC5yZXBsYWNlKC8oc3R5bGV8Y2xhc3MpPSJccyoiL2dpLCIiKTsKLUQ9RC5yZXBsYWNlKC88KGZvbnR8c3Bhbilccyo+L2dpLCIiKTsKLXRoaXMuc2V0SFRNTChEKTsKLXRoaXMudXBkYXRlVG9vbGJhcigpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5fc3BsaXRCbG9jaz1mdW5jdGlvbigpewotdGhpcy5fZG9jLmV4ZWNDb21tYW5kKCJmb3JtYXRibG9jayIsZmFsc2UsImRpdiIpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5mb3JjZVJlZHJhdz1mdW5jdGlvbigpewotdGhpcy5fZG9jLmJvZHkuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIjsKLXRoaXMuX2RvYy5ib2R5LnN0eWxlLnZpc2liaWxpdHk9IiI7Ci19OwotWGluaGEucHJvdG90eXBlLmZvY3VzRWRpdG9yPWZ1bmN0aW9uKCl7Ci1zd2l0Y2godGhpcy5fZWRpdE1vZGUpewotY2FzZSAid3lzaXd5ZyI6Ci10cnl7Ci1pZihYaW5oYS5fc29tZUVkaXRvckhhc0JlZW5BY3RpdmF0ZWQpewotdGhpcy5hY3RpdmF0ZUVkaXRvcigpOwotdGhpcy5faWZyYW1lLmNvbnRlbnRXaW5kb3cuZm9jdXMoKTsKLX0KLX0KLWNhdGNoKGV4KXsKLX0KLWJyZWFrOwotY2FzZSAidGV4dG1vZGUiOgotdHJ5ewotdGhpcy5fdGV4dEFyZWEuZm9jdXMoKTsKLX0KLWNhdGNoKGUpewotfQotYnJlYWs7Ci1kZWZhdWx0OgotYWxlcnQoIkVSUk9SOiBtb2RlICIrdGhpcy5fZWRpdE1vZGUrIiBpcyBub3QgZGVmaW5lZCIpOwotfQotcmV0dXJuIHRoaXMuX2RvYzsKLX07Ci1YaW5oYS5wcm90b3R5cGUuX3VuZG9UYWtlU25hcHNob3Q9ZnVuY3Rpb24oKXsKLSsrdGhpcy5fdW5kb1BvczsKLWlmKHRoaXMuX3VuZG9Qb3M+PXRoaXMuY29uZmlnLnVuZG9TdGVwcyl7Ci10aGlzLl91bmRvUXVldWUuc2hpZnQoKTsKLS0tdGhpcy5fdW5kb1BvczsKLX0KLXZhciB0YWtlPXRydWU7Ci12YXIgdHh0PXRoaXMuZ2V0SW5uZXJIVE1MKCk7Ci1pZih0aGlzLl91bmRvUG9zPjApewotdGFrZT0odGhpcy5fdW5kb1F1ZXVlW3RoaXMuX3VuZG9Qb3MtMV0hPXR4dCk7Ci19Ci1pZih0YWtlKXsKLXRoaXMuX3VuZG9RdWV1ZVt0aGlzLl91bmRvUG9zXT10eHQ7Ci19ZWxzZXsKLXRoaXMuX3VuZG9Qb3MtLTsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUudW5kbz1mdW5jdGlvbigpewotaWYodGhpcy5fdW5kb1Bvcz4wKXsKLXZhciB0eHQ9dGhpcy5fdW5kb1F1ZXVlWy0tdGhpcy5fdW5kb1Bvc107Ci1pZih0eHQpewotdGhpcy5zZXRIVE1MKHR4dCk7Ci19ZWxzZXsKLSsrdGhpcy5fdW5kb1BvczsKLX0KLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUucmVkbz1mdW5jdGlvbigpewotaWYodGhpcy5fdW5kb1Bvczx0aGlzLl91bmRvUXVldWUubGVuZ3RoLTEpewotdmFyIHR4dD10aGlzLl91bmRvUXVldWVbKyt0aGlzLl91bmRvUG9zXTsKLWlmKHR4dCl7Ci10aGlzLnNldEhUTUwodHh0KTsKLX1lbHNlewotLS10aGlzLl91bmRvUG9zOwotfQotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5kaXNhYmxlVG9vbGJhcj1mdW5jdGlvbihfMTc3KXsKLWlmKHRoaXMuX3RpbWVyVG9vbGJhcil7Ci1jbGVhclRpbWVvdXQodGhpcy5fdGltZXJUb29sYmFyKTsKLX0KLWlmKHR5cGVvZiBfMTc3PT0idW5kZWZpbmVkIil7Ci1fMTc3PVtdOwotfWVsc2V7Ci1pZih0eXBlb2YgXzE3NyE9Im9iamVjdCIpewotXzE3Nz1bXzE3N107Ci19Ci19Ci1mb3IodmFyIGkgaW4gdGhpcy5fdG9vbGJhck9iamVjdHMpewotdmFyIGJ0bj10aGlzLl90b29sYmFyT2JqZWN0c1tpXTsKLWlmKF8xNzcuY29udGFpbnMoaSkpewotY29udGludWU7Ci19Ci1pZih0eXBlb2YgYnRuLnN0YXRlIT0iZnVuY3Rpb24iKXsKLWNvbnRpbnVlOwotfQotYnRuLnN0YXRlKCJlbmFibGVkIixmYWxzZSk7Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmVuYWJsZVRvb2xiYXI9ZnVuY3Rpb24oKXsKLXRoaXMudXBkYXRlVG9vbGJhcigpOwotfTsKLVhpbmhhLnByb3RvdHlwZS51cGRhdGVUb29sYmFyPWZ1bmN0aW9uKF8xN2EpewotaWYodGhpcy5zdXNwZW5kVXBkYXRlVG9vbGJhcil7Ci1yZXR1cm47Ci19Ci12YXIgZG9jPXRoaXMuX2RvYzsKLXZhciB0ZXh0PSh0aGlzLl9lZGl0TW9kZT09InRleHRtb2RlIik7Ci12YXIgXzE3ZD1udWxsOwotaWYoIXRleHQpewotXzE3ZD10aGlzLmdldEFsbEFuY2VzdG9ycygpOwotaWYodGhpcy5jb25maWcuc3RhdHVzQmFyJiYhXzE3YSl7Ci13aGlsZSh0aGlzLl9zdGF0dXNCYXJJdGVtcy5sZW5ndGgpewotdmFyIGl0ZW09dGhpcy5fc3RhdHVzQmFySXRlbXMucG9wKCk7Ci1pdGVtLmVsPW51bGw7Ci1pdGVtLmVkaXRvcj1udWxsOwotaXRlbS5vbmNsaWNrPW51bGw7Ci1pdGVtLm9uY29udGV4dG1lbnU9bnVsbDsKLWl0ZW0uX3hpbmhhX2RvbTBFdmVudHMuY2xpY2s9bnVsbDsKLWl0ZW0uX3hpbmhhX2RvbTBFdmVudHMuY29udGV4dG1lbnU9bnVsbDsKLWl0ZW09bnVsbDsKLX0KLXRoaXMuX3N0YXR1c0JhclRyZWUuaW5uZXJIVE1MPSIgIjsKLXRoaXMuX3N0YXR1c0JhclRyZWUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoWGluaGEuX2xjKCJQYXRoIikrIjogIikpOwotZm9yKHZhciBpPV8xN2QubGVuZ3RoOy0taT49MDspewotdmFyIGVsPV8xN2RbaV07Ci1pZighZWwpewotY29udGludWU7Ci19Ci12YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci1hLmhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiOwotYS5lbD1lbDsKLWEuZWRpdG9yPXRoaXM7Ci10aGlzLl9zdGF0dXNCYXJJdGVtcy5wdXNoKGEpOwotWGluaGEuYWRkRG9tMEV2ZW50KGEsImNsaWNrIixmdW5jdGlvbigpewotdGhpcy5ibHVyKCk7Ci10aGlzLmVkaXRvci5zZWxlY3ROb2RlQ29udGVudHModGhpcy5lbCk7Ci10aGlzLmVkaXRvci51cGRhdGVUb29sYmFyKHRydWUpOwotcmV0dXJuIGZhbHNlOwotfSk7Ci1YaW5oYS5hZGREb20wRXZlbnQoYSwiY29udGV4dG1lbnUiLGZ1bmN0aW9uKCl7Ci10aGlzLmJsdXIoKTsKLXZhciBpbmZvPSJJbmxpbmUgc3R5bGU6XG5cbiI7Ci1pbmZvKz10aGlzLmVsLnN0eWxlLmNzc1RleHQuc3BsaXQoLztccyovKS5qb2luKCI7XG4iKTsKLWFsZXJ0KGluZm8pOwotcmV0dXJuIGZhbHNlOwotfSk7Ci12YXIgdHh0PWVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKLXN3aXRjaCh0eHQpewotY2FzZSAiYiI6Ci10eHQ9InN0cm9uZyI7Ci1icmVhazsKLWNhc2UgImkiOgotdHh0PSJlbSI7Ci1icmVhazsKLWNhc2UgInN0cmlrZSI6Ci10eHQ9ImRlbCI7Ci1icmVhazsKLX0KLWlmKHR5cGVvZiBlbC5zdHlsZSE9InVuZGVmaW5lZCIpewotYS50aXRsZT1lbC5zdHlsZS5jc3NUZXh0OwotfQotaWYoZWwuaWQpewotdHh0Kz0iIyIrZWwuaWQ7Ci19Ci1pZihlbC5jbGFzc05hbWUpewotdHh0Kz0iLiIrZWwuY2xhc3NOYW1lOwotfQotYS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0eHQpKTsKLXRoaXMuX3N0YXR1c0JhclRyZWUuYXBwZW5kQ2hpbGQoYSk7Ci1pZihpIT09MCl7Ci10aGlzLl9zdGF0dXNCYXJUcmVlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFN0cmluZy5mcm9tQ2hhckNvZGUoMTg3KSkpOwotfQotWGluaGEuZnJlZUxhdGVyKGEpOwotfQotfQotfQotZm9yKHZhciBjbWQgaW4gdGhpcy5fdG9vbGJhck9iamVjdHMpewotdmFyIGJ0bj10aGlzLl90b29sYmFyT2JqZWN0c1tjbWRdOwotdmFyIF8xODY9dHJ1ZTsKLWlmKHR5cGVvZiBidG4uc3RhdGUhPSJmdW5jdGlvbiIpewotY29udGludWU7Ci19Ci1pZihidG4uY29udGV4dCYmIXRleHQpewotXzE4Nj1mYWxzZTsKLXZhciBfMTg3PWJ0bi5jb250ZXh0OwotdmFyIF8xODg9W107Ci1pZigvKC4qKVxbKC4qPylcXS8udGVzdChfMTg3KSl7Ci1fMTg3PVJlZ0V4cC4kMTsKLV8xODg9UmVnRXhwLiQyLnNwbGl0KCIsIik7Ci19Ci1fMTg3PV8xODcudG9Mb3dlckNhc2UoKTsKLXZhciBfMTg5PShfMTg3PT0iKiIpOwotZm9yKHZhciBrPTA7azxfMTdkLmxlbmd0aDsrK2spewotaWYoIV8xN2Rba10pewotY29udGludWU7Ci19Ci1pZihfMTg5fHwoXzE3ZFtrXS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PV8xODcpKXsKLV8xODY9dHJ1ZTsKLXZhciBfMThiPW51bGw7Ci12YXIgYXR0PW51bGw7Ci12YXIgY29tcD1udWxsOwotdmFyIF8xOGU9bnVsbDsKLWZvcih2YXIga2E9MDtrYTxfMTg4Lmxlbmd0aDsrK2thKXsKLV8xOGI9XzE4OFtrYV0ubWF0Y2goLyguKikoPT18IT18PT09fCE9PXw+fD49fDx8PD0pKC4qKS8pOwotYXR0PV8xOGJbMV07Ci1jb21wPV8xOGJbMl07Ci1fMThlPV8xOGJbM107Ci1pZighZXZhbChfMTdkW2tdW2F0dF0rY29tcCtfMThlKSl7Ci1fMTg2PWZhbHNlOwotYnJlYWs7Ci19Ci19Ci1pZihfMTg2KXsKLWJyZWFrOwotfQotfQotfQotfQotYnRuLnN0YXRlKCJlbmFibGVkIiwoIXRleHR8fGJ0bi50ZXh0KSYmXzE4Nik7Ci1pZih0eXBlb2YgY21kPT0iZnVuY3Rpb24iKXsKLWNvbnRpbnVlOwotfQotdmFyIF8xOTA9dGhpcy5jb25maWcuY3VzdG9tU2VsZWN0c1tjbWRdOwotaWYoKCF0ZXh0fHxidG4udGV4dCkmJih0eXBlb2YgXzE5MCE9InVuZGVmaW5lZCIpKXsKLV8xOTAucmVmcmVzaCh0aGlzKTsKLWNvbnRpbnVlOwotfQotc3dpdGNoKGNtZCl7Ci1jYXNlICJmb250bmFtZSI6Ci1jYXNlICJmb250c2l6ZSI6Ci1pZighdGV4dCl7Ci10cnl7Ci12YXIgXzE5MT0oIiIrZG9jLnF1ZXJ5Q29tbWFuZFZhbHVlKGNtZCkpLnRvTG93ZXJDYXNlKCk7Ci1pZighXzE5MSl7Ci1idG4uZWxlbWVudC5zZWxlY3RlZEluZGV4PTA7Ci1icmVhazsKLX0KLXZhciBfMTkyPXRoaXMuY29uZmlnW2NtZF07Ci12YXIgXzE5Mz0wOwotZm9yKHZhciBqIGluIF8xOTIpewotaWYoKGoudG9Mb3dlckNhc2UoKT09XzE5MSl8fChfMTkyW2pdLnN1YnN0cigwLF8xOTEubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT1fMTkxKSl7Ci1idG4uZWxlbWVudC5zZWxlY3RlZEluZGV4PV8xOTM7Ci10aHJvdyAib2siOwotfQotKytfMTkzOwotfQotYnRuLmVsZW1lbnQuc2VsZWN0ZWRJbmRleD0wOwotfQotY2F0Y2goZXgpewotfQotfQotYnJlYWs7Ci1jYXNlICJmb3JtYXRibG9jayI6Ci12YXIgXzE5NT1bXTsKLWZvcih2YXIgXzE5NiBpbiB0aGlzLmNvbmZpZy5mb3JtYXRibG9jayl7Ci1pZih0eXBlb2YgdGhpcy5jb25maWcuZm9ybWF0YmxvY2tbXzE5Nl09PSJzdHJpbmciKXsKLV8xOTVbXzE5NS5sZW5ndGhdPXRoaXMuY29uZmlnLmZvcm1hdGJsb2NrW18xOTZdOwotfQotfQotdmFyIF8xOTc9dGhpcy5fZ2V0Rmlyc3RBbmNlc3Rvcih0aGlzLmdldFNlbGVjdGlvbigpLF8xOTUpOwotaWYoXzE5Nyl7Ci1mb3IodmFyIHg9MDt4PF8xOTUubGVuZ3RoO3grKyl7Ci1pZihfMTk1W3hdLnRvTG93ZXJDYXNlKCk9PV8xOTcudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXsKLWJ0bi5lbGVtZW50LnNlbGVjdGVkSW5kZXg9eDsKLX0KLX0KLX1lbHNlewotYnRuLmVsZW1lbnQuc2VsZWN0ZWRJbmRleD0wOwotfQotYnJlYWs7Ci1jYXNlICJ0ZXh0aW5kaWNhdG9yIjoKLWlmKCF0ZXh0KXsKLXRyeXsKLXZhciBfMTk5PWJ0bi5lbGVtZW50LnN0eWxlOwotXzE5OS5iYWNrZ3JvdW5kQ29sb3I9WGluaGEuX21ha2VDb2xvcihkb2MucXVlcnlDb21tYW5kVmFsdWUoWGluaGEuaXNfaWU/ImJhY2tjb2xvciI6ImhpbGl0ZWNvbG9yIikpOwotaWYoL3RyYW5zcGFyZW50L2kudGVzdChfMTk5LmJhY2tncm91bmRDb2xvcikpewotXzE5OS5iYWNrZ3JvdW5kQ29sb3I9WGluaGEuX21ha2VDb2xvcihkb2MucXVlcnlDb21tYW5kVmFsdWUoImJhY2tjb2xvciIpKTsKLX0KLV8xOTkuY29sb3I9WGluaGEuX21ha2VDb2xvcihkb2MucXVlcnlDb21tYW5kVmFsdWUoImZvcmVjb2xvciIpKTsKLV8xOTkuZm9udEZhbWlseT1kb2MucXVlcnlDb21tYW5kVmFsdWUoImZvbnRuYW1lIik7Ci1fMTk5LmZvbnRXZWlnaHQ9ZG9jLnF1ZXJ5Q29tbWFuZFN0YXRlKCJib2xkIik/ImJvbGQiOiJub3JtYWwiOwotXzE5OS5mb250U3R5bGU9ZG9jLnF1ZXJ5Q29tbWFuZFN0YXRlKCJpdGFsaWMiKT8iaXRhbGljIjoibm9ybWFsIjsKLX0KLWNhdGNoKGV4KXsKLX0KLX0KLWJyZWFrOwotY2FzZSAiaHRtbG1vZGUiOgotYnRuLnN0YXRlKCJhY3RpdmUiLHRleHQpOwotYnJlYWs7Ci1jYXNlICJsZWZ0dG9yaWdodCI6Ci1jYXNlICJyaWdodHRvbGVmdCI6Ci12YXIgXzE5YT10aGlzLmdldFBhcmVudEVsZW1lbnQoKTsKLXdoaWxlKF8xOWEmJiFYaW5oYS5pc0Jsb2NrRWxlbWVudChfMTlhKSl7Ci1fMTlhPV8xOWEucGFyZW50Tm9kZTsKLX0KLWlmKF8xOWEpewotYnRuLnN0YXRlKCJhY3RpdmUiLChfMTlhLnN0eWxlLmRpcmVjdGlvbj09KChjbWQ9PSJyaWdodHRvbGVmdCIpPyJydGwiOiJsdHIiKSkpOwotfQotYnJlYWs7Ci1kZWZhdWx0OgotY21kPWNtZC5yZXBsYWNlKC8odW4pP29yZGVyZWRsaXN0L2ksImluc2VydCQxb3JkZXJlZGxpc3QiKTsKLXRyeXsKLWJ0bi5zdGF0ZSgiYWN0aXZlIiwoIXRleHQmJmRvYy5xdWVyeUNvbW1hbmRTdGF0ZShjbWQpKSk7Ci19Ci1jYXRjaChleCl7Ci19Ci1icmVhazsKLX0KLX0KLWlmKHRoaXMuX2N1c3RvbVVuZG8mJiF0aGlzLl90aW1lclVuZG8pewotdGhpcy5fdW5kb1Rha2VTbmFwc2hvdCgpOwotdmFyIF8xOWI9dGhpczsKLXRoaXMuX3RpbWVyVW5kbz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ci1fMTliLl90aW1lclVuZG89bnVsbDsKLX0sdGhpcy5jb25maWcudW5kb1RpbWVvdXQpOwotfQotdGhpcy5maXJlUGx1Z2luRXZlbnQoIm9uVXBkYXRlVG9vbGJhciIpOwotfTsKLVhpbmhhLmdldEVkaXRvcj1mdW5jdGlvbihyZWYpewotZm9yKHZhciBpPV9feGluaGFzLmxlbmd0aDtpLS07KXsKLXZhciBfMTllPV9feGluaGFzW2ldOwotaWYoXzE5ZSYmKF8xOWUuX3RleHRBcmVhLmlkPT1yZWZ8fF8xOWUuX3RleHRBcmVhLm5hbWU9PXJlZnx8XzE5ZS5fdGV4dEFyZWE9PXJlZikpewotcmV0dXJuIF8xOWU7Ci19Ci19Ci1yZXR1cm4gbnVsbDsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0UGx1Z2luSW5zdGFuY2U9ZnVuY3Rpb24oXzE5Zil7Ci1pZih0aGlzLnBsdWdpbnNbXzE5Zl0pewotcmV0dXJuIHRoaXMucGx1Z2luc1tfMTlmXS5pbnN0YW5jZTsKLX1lbHNlewotcmV0dXJuIG51bGw7Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmdldEFsbEFuY2VzdG9ycz1mdW5jdGlvbigpewotdmFyIHA9dGhpcy5nZXRQYXJlbnRFbGVtZW50KCk7Ci12YXIgYT1bXTsKLXdoaWxlKHAmJihwLm5vZGVUeXBlPT0xKSYmKHAudGFnTmFtZS50b0xvd2VyQ2FzZSgpIT0iYm9keSIpKXsKLWEucHVzaChwKTsKLXA9cC5wYXJlbnROb2RlOwotfQotYS5wdXNoKHRoaXMuX2RvYy5ib2R5KTsKLXJldHVybiBhOwotfTsKLVhpbmhhLnByb3RvdHlwZS5fZ2V0Rmlyc3RBbmNlc3Rvcj1mdW5jdGlvbihzZWwsXzFhMyl7Ci12YXIgcHJudD10aGlzLmFjdGl2ZUVsZW1lbnQoc2VsKTsKLWlmKHBybnQ9PT1udWxsKXsKLXRyeXsKLXBybnQ9KFhpbmhhLmlzX2llP3RoaXMuY3JlYXRlUmFuZ2Uoc2VsKS5wYXJlbnRFbGVtZW50KCk6dGhpcy5jcmVhdGVSYW5nZShzZWwpLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKTsKLX0KLWNhdGNoKGV4KXsKLXJldHVybiBudWxsOwotfQotfQotaWYodHlwZW9mIF8xYTM9PSJzdHJpbmciKXsKLV8xYTM9W18xYTNdOwotfQotd2hpbGUocHJudCl7Ci1pZihwcm50Lm5vZGVUeXBlPT0xKXsKLWlmKF8xYTM9PT1udWxsKXsKLXJldHVybiBwcm50OwotfQotZm9yKHZhciBfMWE1PTA7XzFhNTxfMWEzLmxlbmd0aDsrK18xYTUpewotaWYodHlwZW9mIF8xYTNbXzFhNV09PSJzdHJpbmciJiZfMWEzW18xYTVdPT1wcm50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSl7Ci1yZXR1cm4gcHJudDsKLX1lbHNlewotaWYodHlwZW9mIF8xYTNbXzFhNV09PSJmdW5jdGlvbiImJl8xYTNbXzFhNV0odGhpcyxwcm50KSl7Ci1yZXR1cm4gcHJudDsKLX0KLX0KLX0KLWlmKHBybnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0iYm9keSIpewotYnJlYWs7Ci19Ci1pZihwcm50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09InRhYmxlIil7Ci1icmVhazsKLX0KLX0KLXBybnQ9cHJudC5wYXJlbnROb2RlOwotfQotcmV0dXJuIG51bGw7Ci19OwotWGluaGEucHJvdG90eXBlLl9nZXRBbmNlc3RvckJsb2NrPWZ1bmN0aW9uKHNlbCl7Ci12YXIgcHJudD0oWGluaGEuaXNfaWU/dGhpcy5jcmVhdGVSYW5nZShzZWwpLnBhcmVudEVsZW1lbnQ6dGhpcy5jcmVhdGVSYW5nZShzZWwpLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKTsKLXdoaWxlKHBybnQmJihwcm50Lm5vZGVUeXBlPT0xKSl7Ci1zd2l0Y2gocHJudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpewotY2FzZSAiZGl2IjoKLWNhc2UgInAiOgotY2FzZSAiYWRkcmVzcyI6Ci1jYXNlICJibG9ja3F1b3RlIjoKLWNhc2UgImNlbnRlciI6Ci1jYXNlICJkZWwiOgotY2FzZSAiaW5zIjoKLWNhc2UgInByZSI6Ci1jYXNlICJoMSI6Ci1jYXNlICJoMiI6Ci1jYXNlICJoMyI6Ci1jYXNlICJoNCI6Ci1jYXNlICJoNSI6Ci1jYXNlICJoNiI6Ci1jYXNlICJoNyI6Ci1yZXR1cm4gcHJudDsKLWNhc2UgImJvZHkiOgotY2FzZSAibm9mcmFtZXMiOgotY2FzZSAiZGQiOgotY2FzZSAibGkiOgotY2FzZSAidGgiOgotY2FzZSAidGQiOgotY2FzZSAibm9zY3JpcHQiOgotcmV0dXJuIG51bGw7Ci1kZWZhdWx0OgotYnJlYWs7Ci19Ci19Ci1yZXR1cm4gbnVsbDsKLX07Ci1YaW5oYS5wcm90b3R5cGUuX2NyZWF0ZUltcGxpY2l0QmxvY2s9ZnVuY3Rpb24odHlwZSl7Ci12YXIgc2VsPXRoaXMuZ2V0U2VsZWN0aW9uKCk7Ci1pZihYaW5oYS5pc19pZSl7Ci1zZWwuZW1wdHkoKTsKLX1lbHNlewotc2VsLmNvbGxhcHNlVG9TdGFydCgpOwotfQotdmFyIHJuZz10aGlzLmNyZWF0ZVJhbmdlKHNlbCk7Ci19OwotWGluaGEucHJvdG90eXBlLnN1cnJvdW5kSFRNTD1mdW5jdGlvbihfMWFiLF8xYWMpewotdmFyIGh0bWw9dGhpcy5nZXRTZWxlY3RlZEhUTUwoKTsKLXRoaXMuaW5zZXJ0SFRNTChfMWFiK2h0bWwrXzFhYyk7Ci19OwotWGluaGEucHJvdG90eXBlLmhhc1NlbGVjdGVkVGV4dD1mdW5jdGlvbigpewotcmV0dXJuIHRoaXMuZ2V0U2VsZWN0ZWRIVE1MKCkhPT0iIjsKLX07Ci1YaW5oYS5wcm90b3R5cGUuX2NvbWJvU2VsZWN0ZWQ9ZnVuY3Rpb24oZWwsdHh0KXsKLXRoaXMuZm9jdXNFZGl0b3IoKTsKLXZhciBfMWIwPWVsLm9wdGlvbnNbZWwuc2VsZWN0ZWRJbmRleF0udmFsdWU7Ci1zd2l0Y2godHh0KXsKLWNhc2UgImZvbnRuYW1lIjoKLWNhc2UgImZvbnRzaXplIjoKLXRoaXMuZXhlY0NvbW1hbmQodHh0LGZhbHNlLF8xYjApOwotYnJlYWs7Ci1jYXNlICJmb3JtYXRibG9jayI6Ci1pZighXzFiMCl7Ci10aGlzLnVwZGF0ZVRvb2xiYXIoKTsKLWJyZWFrOwotfQotaWYoIVhpbmhhLmlzX2dlY2tvfHxfMWIwIT09ImJsb2NrcXVvdGUiKXsKLV8xYjA9IjwiK18xYjArIj4iOwotfQotdGhpcy5leGVjQ29tbWFuZCh0eHQsZmFsc2UsXzFiMCk7Ci1icmVhazsKLWRlZmF1bHQ6Ci12YXIgXzFiMT10aGlzLmNvbmZpZy5jdXN0b21TZWxlY3RzW3R4dF07Ci1pZih0eXBlb2YgXzFiMSE9InVuZGVmaW5lZCIpewotXzFiMS5hY3Rpb24odGhpcyxfMWIwLGVsLHR4dCk7Ci19ZWxzZXsKLWFsZXJ0KCJGSVhNRTogY29tYm8gYm94ICIrdHh0KyIgbm90IGltcGxlbWVudGVkIik7Ci19Ci1icmVhazsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuX2NvbG9yU2VsZWN0b3I9ZnVuY3Rpb24oXzFiMil7Ci12YXIgXzFiMz10aGlzOwotaWYoWGluaGEuaXNfZ2Vja28pewotdHJ5ewotXzFiMy5fZG9jLmV4ZWNDb21tYW5kKCJ1c2VDU1MiLGZhbHNlLGZhbHNlKTsKLV8xYjMuX2RvYy5leGVjQ29tbWFuZCgic3R5bGVXaXRoQ1NTIixmYWxzZSx0cnVlKTsKLX0KLWNhdGNoKGV4KXsKLX0KLX0KLXZhciBidG49XzFiMy5fdG9vbGJhck9iamVjdHNbXzFiMl0uZWxlbWVudDsKLXZhciBfMWI1OwotaWYoXzFiMj09ImhpbGl0ZWNvbG9yIil7Ci1pZihYaW5oYS5pc19pZSl7Ci1fMWIyPSJiYWNrY29sb3IiOwotXzFiNT1YaW5oYS5fY29sb3JUb1JnYihfMWIzLl9kb2MucXVlcnlDb21tYW5kVmFsdWUoImJhY2tjb2xvciIpKTsKLX1lbHNlewotXzFiNT1YaW5oYS5fY29sb3JUb1JnYihfMWIzLl9kb2MucXVlcnlDb21tYW5kVmFsdWUoImhpbGl0ZWNvbG9yIikpOwotfQotfWVsc2V7Ci1fMWI1PVhpbmhhLl9jb2xvclRvUmdiKF8xYjMuX2RvYy5xdWVyeUNvbW1hbmRWYWx1ZSgiZm9yZWNvbG9yIikpOwotfQotdmFyIF8xYjY9ZnVuY3Rpb24oXzFiNyl7Ci1fMWIzLl9kb2MuZXhlY0NvbW1hbmQoXzFiMixmYWxzZSxfMWI3KTsKLX07Ci1pZihYaW5oYS5pc19pZSl7Ci12YXIgXzFiOD1fMWIzLmNyZWF0ZVJhbmdlKF8xYjMuZ2V0U2VsZWN0aW9uKCkpOwotXzFiNj1mdW5jdGlvbihfMWI5KXsKLV8xYjguc2VsZWN0KCk7Ci1fMWIzLl9kb2MuZXhlY0NvbW1hbmQoXzFiMixmYWxzZSxfMWI5KTsKLX07Ci19Ci12YXIgXzFiYT1uZXcgWGluaGEuY29sb3JQaWNrZXIoe2NlbGxzaXplOl8xYjMuY29uZmlnLmNvbG9yUGlja2VyQ2VsbFNpemUsY2FsbGJhY2s6XzFiNixncmFudWxhcml0eTpfMWIzLmNvbmZpZy5jb2xvclBpY2tlckdyYW51bGFyaXR5LHdlYnNhZmU6XzFiMy5jb25maWcuY29sb3JQaWNrZXJXZWJTYWZlLHNhdmVjb2xvcnM6XzFiMy5jb25maWcuY29sb3JQaWNrZXJTYXZlQ29sb3JzfSk7Ci1fMWJhLm9wZW4oXzFiMy5jb25maWcuY29sb3JQaWNrZXJQb3NpdGlvbixidG4sXzFiNSk7Ci19OwotWGluaGEucHJvdG90eXBlLmV4ZWNDb21tYW5kPWZ1bmN0aW9uKF8xYmIsVUksXzFiZCl7Ci12YXIgXzFiZT10aGlzOwotdGhpcy5mb2N1c0VkaXRvcigpOwotXzFiYj1fMWJiLnRvTG93ZXJDYXNlKCk7Ci1pZih0aGlzLmZpcmVQbHVnaW5FdmVudCgib25FeGVjQ29tbWFuZCIsXzFiYixVSSxfMWJkKSl7Ci10aGlzLnVwZGF0ZVRvb2xiYXIoKTsKLXJldHVybiBmYWxzZTsKLX0KLXN3aXRjaChfMWJiKXsKLWNhc2UgImh0bWxtb2RlIjoKLXRoaXMuc2V0TW9kZSgpOwotYnJlYWs7Ci1jYXNlICJoaWxpdGVjb2xvciI6Ci1jYXNlICJmb3JlY29sb3IiOgotdGhpcy5fY29sb3JTZWxlY3RvcihfMWJiKTsKLWJyZWFrOwotY2FzZSAiY3JlYXRlbGluayI6Ci10aGlzLl9jcmVhdGVMaW5rKCk7Ci1icmVhazsKLWNhc2UgInVuZG8iOgotY2FzZSAicmVkbyI6Ci1pZih0aGlzLl9jdXN0b21VbmRvKXsKLXRoaXNbXzFiYl0oKTsKLX1lbHNlewotdGhpcy5fZG9jLmV4ZWNDb21tYW5kKF8xYmIsVUksXzFiZCk7Ci19Ci1icmVhazsKLWNhc2UgImluc2VydHRhYmxlIjoKLXRoaXMuX2luc2VydFRhYmxlKCk7Ci1icmVhazsKLWNhc2UgImluc2VydGltYWdlIjoKLXRoaXMuX2luc2VydEltYWdlKCk7Ci1icmVhazsKLWNhc2UgInNob3doZWxwIjoKLXRoaXMuX3BvcHVwRGlhbG9nKF8xYmUuY29uZmlnLlVSSXMuaGVscCxudWxsLHRoaXMpOwotYnJlYWs7Ci1jYXNlICJraWxsd29yZCI6Ci10aGlzLl93b3JkQ2xlYW4oKTsKLWJyZWFrOwotY2FzZSAiY3V0IjoKLWNhc2UgImNvcHkiOgotY2FzZSAicGFzdGUiOgotdGhpcy5fZG9jLmV4ZWNDb21tYW5kKF8xYmIsVUksXzFiZCk7Ci1pZih0aGlzLmNvbmZpZy5raWxsV29yZE9uUGFzdGUpewotdGhpcy5fd29yZENsZWFuKCk7Ci19Ci1icmVhazsKLWNhc2UgImxlZnR0b3JpZ2h0IjoKLWNhc2UgInJpZ2h0dG9sZWZ0IjoKLWlmKHRoaXMuY29uZmlnLmNoYW5nZUp1c3RpZnlXaXRoRGlyZWN0aW9uKXsKLXRoaXMuX2RvYy5leGVjQ29tbWFuZCgoXzFiYj09InJpZ2h0dG9sZWZ0Iik/Imp1c3RpZnlyaWdodCI6Imp1c3RpZnlsZWZ0IixVSSxfMWJkKTsKLX0KLXZhciBkaXI9KF8xYmI9PSJyaWdodHRvbGVmdCIpPyJydGwiOiJsdHIiOwotdmFyIGVsPXRoaXMuZ2V0UGFyZW50RWxlbWVudCgpOwotd2hpbGUoZWwmJiFYaW5oYS5pc0Jsb2NrRWxlbWVudChlbCkpewotZWw9ZWwucGFyZW50Tm9kZTsKLX0KLWlmKGVsKXsKLWlmKGVsLnN0eWxlLmRpcmVjdGlvbj09ZGlyKXsKLWVsLnN0eWxlLmRpcmVjdGlvbj0iIjsKLX1lbHNlewotZWwuc3R5bGUuZGlyZWN0aW9uPWRpcjsKLX0KLX0KLWJyZWFrOwotY2FzZSAianVzdGlmeWxlZnQiOgotY2FzZSAianVzdGlmeXJpZ2h0IjoKLV8xYmIubWF0Y2goL15qdXN0aWZ5KC4qKSQvKTsKLXZhciBhZT10aGlzLmFjdGl2ZUVsZW1lbnQodGhpcy5nZXRTZWxlY3Rpb24oKSk7Ci1pZihhZSYmYWUudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0iaW1nIil7Ci1hZS5hbGlnbj1hZS5hbGlnbj09UmVnRXhwLiQxPyIiOlJlZ0V4cC4kMTsKLX1lbHNlewotdGhpcy5fZG9jLmV4ZWNDb21tYW5kKF8xYmIsVUksXzFiZCk7Ci19Ci1icmVhazsKLWRlZmF1bHQ6Ci10cnl7Ci10aGlzLl9kb2MuZXhlY0NvbW1hbmQoXzFiYixVSSxfMWJkKTsKLX0KLWNhdGNoKGV4KXsKLWlmKHRoaXMuY29uZmlnLmRlYnVnKXsKLWFsZXJ0KGV4KyJcblxuYnkgZXhlY0NvbW1hbmQoIitfMWJiKyIpOyIpOwotfQotfQotYnJlYWs7Ci19Ci10aGlzLnVwZGF0ZVRvb2xiYXIoKTsKLXJldHVybiBmYWxzZTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuX2VkaXRvckV2ZW50PWZ1bmN0aW9uKGV2KXsKLXZhciBfMWMzPXRoaXM7Ci1pZih0eXBlb2YgXzFjMy5fdGV4dEFyZWFbIm9uIitldi50eXBlXT09ImZ1bmN0aW9uIil7Ci1fMWMzLl90ZXh0QXJlYVsib24iK2V2LnR5cGVdKGV2KTsKLX0KLWlmKHRoaXMuaXNLZXlFdmVudChldikpewotaWYoXzFjMy5maXJlUGx1Z2luRXZlbnQoIm9uS2V5UHJlc3MiLGV2KSl7Ci1yZXR1cm4gZmFsc2U7Ci19Ci1pZih0aGlzLmlzU2hvcnRDdXQoZXYpKXsKLXRoaXMuX3Nob3J0Q3V0cyhldik7Ci19Ci19Ci1pZihldi50eXBlPT0ibW91c2Vkb3duIil7Ci1pZihfMWMzLmZpcmVQbHVnaW5FdmVudCgib25Nb3VzZURvd24iLGV2KSl7Ci1yZXR1cm4gZmFsc2U7Ci19Ci19Ci1pZihfMWMzLl90aW1lclRvb2xiYXIpewotY2xlYXJUaW1lb3V0KF8xYzMuX3RpbWVyVG9vbGJhcik7Ci19Ci1pZighdGhpcy5zdXNwZW5kVXBkYXRlVG9vbGJhcil7Ci1fMWMzLl90aW1lclRvb2xiYXI9c2V0VGltZW91dChmdW5jdGlvbigpewotXzFjMy51cGRhdGVUb29sYmFyKCk7Ci1fMWMzLl90aW1lclRvb2xiYXI9bnVsbDsKLX0sMjUwKTsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuX29uRG91YmxlQ2xpY2s9ZnVuY3Rpb24oZXYpewotdmFyIF8xYzU9dGhpczsKLXZhciBfMWM2PVhpbmhhLmlzX2llP2V2LnNyY0VsZW1lbnQ6ZXYudGFyZ2V0OwotdmFyIHRhZz1fMWM2LnRhZ05hbWU7Ci12YXIgXzFjOD1fMWM2LmNsYXNzTmFtZTsKLWlmKHRhZyl7Ci10YWc9dGFnLnRvTG93ZXJDYXNlKCk7Ci1pZihfMWM4JiYodGhpcy5jb25maWcuZGJsY2xpY2tMaXN0W3RhZysiLiIrXzFjOF0hPXVuZGVmaW5lZCkpewotdGhpcy5jb25maWcuZGJsY2xpY2tMaXN0W3RhZysiLiIrXzFjOF1bMF0oXzFjNSxfMWM2KTsKLX1lbHNlewotaWYodGhpcy5jb25maWcuZGJsY2xpY2tMaXN0W3RhZ10hPXVuZGVmaW5lZCl7Ci10aGlzLmNvbmZpZy5kYmxjbGlja0xpc3RbdGFnXVswXShfMWM1LF8xYzYpOwotfQotfQotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5fc2hvcnRDdXRzPWZ1bmN0aW9uKGV2KXsKLXZhciBrZXk9dGhpcy5nZXRLZXkoZXYpLnRvTG93ZXJDYXNlKCk7Ci12YXIgY21kPW51bGw7Ci12YXIgXzFjYz1udWxsOwotc3dpdGNoKGtleSl7Ci1jYXNlICJiIjoKLWNtZD0iYm9sZCI7Ci1icmVhazsKLWNhc2UgImkiOgotY21kPSJpdGFsaWMiOwotYnJlYWs7Ci1jYXNlICJ1IjoKLWNtZD0idW5kZXJsaW5lIjsKLWJyZWFrOwotY2FzZSAicyI6Ci1jbWQ9InN0cmlrZXRocm91Z2giOwotYnJlYWs7Ci1jYXNlICJsIjoKLWNtZD0ianVzdGlmeWxlZnQiOwotYnJlYWs7Ci1jYXNlICJlIjoKLWNtZD0ianVzdGlmeWNlbnRlciI7Ci1icmVhazsKLWNhc2UgInIiOgotY21kPSJqdXN0aWZ5cmlnaHQiOwotYnJlYWs7Ci1jYXNlICJqIjoKLWNtZD0ianVzdGlmeWZ1bGwiOwotYnJlYWs7Ci1jYXNlICJ6IjoKLWNtZD0idW5kbyI7Ci1icmVhazsKLWNhc2UgInkiOgotY21kPSJyZWRvIjsKLWJyZWFrOwotY2FzZSAidiI6Ci1jbWQ9InBhc3RlIjsKLWJyZWFrOwotY2FzZSAibiI6Ci1jbWQ9ImZvcm1hdGJsb2NrIjsKLV8xY2M9InAiOwotYnJlYWs7Ci1jYXNlICIwIjoKLWNtZD0ia2lsbHdvcmQiOwotYnJlYWs7Ci1jYXNlICIxIjoKLWNhc2UgIjIiOgotY2FzZSAiMyI6Ci1jYXNlICI0IjoKLWNhc2UgIjUiOgotY2FzZSAiNiI6Ci1jbWQ9ImZvcm1hdGJsb2NrIjsKLV8xY2M9ImgiK2tleTsKLWJyZWFrOwotfQotaWYoY21kKXsKLXRoaXMuZXhlY0NvbW1hbmQoY21kLGZhbHNlLF8xY2MpOwotWGluaGEuX3N0b3BFdmVudChldik7Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmNvbnZlcnROb2RlPWZ1bmN0aW9uKGVsLF8xY2UpewotdmFyIF8xY2Y9dGhpcy5fZG9jLmNyZWF0ZUVsZW1lbnQoXzFjZSk7Ci13aGlsZShlbC5maXJzdENoaWxkKXsKLV8xY2YuYXBwZW5kQ2hpbGQoZWwuZmlyc3RDaGlsZCk7Ci19Ci1yZXR1cm4gXzFjZjsKLX07Ci1YaW5oYS5wcm90b3R5cGUuc2Nyb2xsVG9FbGVtZW50PWZ1bmN0aW9uKGUpewotaWYoIWUpewotZT10aGlzLmdldFBhcmVudEVsZW1lbnQoKTsKLWlmKCFlKXsKLXJldHVybjsKLX0KLX0KLXZhciBfMWQxPVhpbmhhLmdldEVsZW1lbnRUb3BMZWZ0KGUpOwotdGhpcy5faWZyYW1lLmNvbnRlbnRXaW5kb3cuc2Nyb2xsVG8oXzFkMS5sZWZ0LF8xZDEudG9wKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0RWRpdG9yQ29udGVudD1mdW5jdGlvbigpewotcmV0dXJuIHRoaXMub3V0d2FyZEh0bWwodGhpcy5nZXRIVE1MKCkpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5zZXRFZGl0b3JDb250ZW50PWZ1bmN0aW9uKGh0bWwpewotdGhpcy5zZXRIVE1MKHRoaXMuaW53YXJkSHRtbChodG1sKSk7Ci19OwotWGluaGEudXBkYXRlVGV4dGFyZWFzPWZ1bmN0aW9uKCl7Ci12YXIgZTsKLWZvcih2YXIgaT0wO2k8X194aW5oYXMubGVuZ3RoO2krKyl7Ci1lPV9feGluaGFzW2ldOwotZS5fdGV4dEFyZWEudmFsdWU9ZS5nZXRFZGl0b3JDb250ZW50KCk7Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmdldEhUTUw9ZnVuY3Rpb24oKXsKLXZhciBodG1sPSIiOwotc3dpdGNoKHRoaXMuX2VkaXRNb2RlKXsKLWNhc2UgInd5c2l3eWciOgotaWYoIXRoaXMuY29uZmlnLmZ1bGxQYWdlKXsKLWh0bWw9WGluaGEuZ2V0SFRNTCh0aGlzLl9kb2MuYm9keSxmYWxzZSx0aGlzKS50cmltKCk7Ci19ZWxzZXsKLWh0bWw9dGhpcy5kb2N0eXBlKyJcbiIrWGluaGEuZ2V0SFRNTCh0aGlzLl9kb2MuZG9jdW1lbnRFbGVtZW50LHRydWUsdGhpcyk7Ci19Ci1icmVhazsKLWNhc2UgInRleHRtb2RlIjoKLWh0bWw9dGhpcy5fdGV4dEFyZWEudmFsdWU7Ci1icmVhazsKLWRlZmF1bHQ6Ci1hbGVydCgiTW9kZSA8Iit0aGlzLl9lZGl0TW9kZSsiPiBub3QgZGVmaW5lZCEiKTsKLXJldHVybiBmYWxzZTsKLX0KLXJldHVybiBodG1sOwotfTsKLVhpbmhhLnByb3RvdHlwZS5vdXR3YXJkSHRtbD1mdW5jdGlvbihodG1sKXsKLWZvcih2YXIgaSBpbiB0aGlzLnBsdWdpbnMpewotdmFyIF8xZDg9dGhpcy5wbHVnaW5zW2ldLmluc3RhbmNlOwotaWYoXzFkOCYmdHlwZW9mIF8xZDgub3V0d2FyZEh0bWw9PSJmdW5jdGlvbiIpewotaHRtbD1fMWQ4Lm91dHdhcmRIdG1sKGh0bWwpOwotfQotfQotaHRtbD1odG1sLnJlcGxhY2UoLzwoXC8/KWIoXHN8PnxcLykvaWcsIjwkMXN0cm9uZyQyIik7Ci1odG1sPWh0bWwucmVwbGFjZSgvPChcLz8paShcc3w+fFwvKS9pZywiPCQxZW0kMiIpOwotaHRtbD1odG1sLnJlcGxhY2UoLzwoXC8/KXN0cmlrZShcc3w+fFwvKS9pZywiPCQxZGVsJDIiKTsKLWh0bWw9aHRtbC5yZXBsYWNlKC8oPFtePl0qb24oY2xpY2t8bW91c2Uob3ZlcnxvdXR8dXB8ZG93bikpPVsnIl0paWZcKHdpbmRvd1wucGFyZW50ICZhbXA7JmFtcDsgd2luZG93XC5wYXJlbnRcLlhpbmhhXClce3JldHVybiBmYWxzZVx9L2dpLCIkMSIpOwotdmFyIF8xZDk9bG9jYXRpb24uaHJlZi5yZXBsYWNlKC8oaHR0cHM/OlwvXC9bXlwvXSopXC8uKi8sIiQxIikrIi8iOwotaHRtbD1odG1sLnJlcGxhY2UoL2h0dHBzPzpcL1wvbnVsbFwvL2csXzFkOSk7Ci1odG1sPWh0bWwucmVwbGFjZSgvKChocmVmfHNyY3xiYWNrZ3JvdW5kKT1bXCdcIl0pXC8rL2lnLCIkMSIrXzFkOSk7Ci1odG1sPXRoaXMub3V0d2FyZFNwZWNpYWxSZXBsYWNlbWVudHMoaHRtbCk7Ci1odG1sPXRoaXMuZml4UmVsYXRpdmVMaW5rcyhodG1sKTsKLWlmKHRoaXMuY29uZmlnLnNldmVuQml0Q2xlYW4pewotaHRtbD1odG1sLnJlcGxhY2UoL1teIC1+XHJcblx0XS9nLGZ1bmN0aW9uKGMpewotcmV0dXJuIChjIT1YaW5oYS5jYyk/IiYjIitjLmNoYXJDb2RlQXQoMCkrIjsiOmM7Ci19KTsKLX0KLWh0bWw9aHRtbC5yZXBsYWNlKC8oPHNjcmlwdFtePl0qKCh0eXBlPVtcIlwnXXRleHRcLyl8KGxhbmd1YWdlPVtcIlwnXSkpKShmcmVlemVzY3JpcHQpL2dpLCIkMWphdmFzY3JpcHQiKTsKLWlmKHRoaXMuY29uZmlnLmZ1bGxQYWdlKXsKLWh0bWw9WGluaGEuc3RyaXBDb3JlQ1NTKGh0bWwpOwotfQotaWYodHlwZW9mIHRoaXMuY29uZmlnLm91dHdhcmRIdG1sPT0iZnVuY3Rpb24iKXsKLWh0bWw9dGhpcy5jb25maWcub3V0d2FyZEh0bWwoaHRtbCk7Ci19Ci1yZXR1cm4gaHRtbDsKLX07Ci1YaW5oYS5wcm90b3R5cGUuaW53YXJkSHRtbD1mdW5jdGlvbihodG1sKXsKLWZvcih2YXIgaSBpbiB0aGlzLnBsdWdpbnMpewotdmFyIF8xZGQ9dGhpcy5wbHVnaW5zW2ldLmluc3RhbmNlOwotaWYoXzFkZCYmdHlwZW9mIF8xZGQuaW53YXJkSHRtbD09ImZ1bmN0aW9uIil7Ci1odG1sPV8xZGQuaW53YXJkSHRtbChodG1sKTsKLX0KLX0KLWh0bWw9aHRtbC5yZXBsYWNlKC88KFwvPylkZWwoXHN8PnxcLykvaWcsIjwkMXN0cmlrZSQyIik7Ci1odG1sPWh0bWwucmVwbGFjZSgvKDxbXj5dKm9uKGNsaWNrfG1vdXNlKG92ZXJ8b3V0fHVwfGRvd24pKT1bIiddKS9naSwiJDFpZih3aW5kb3cucGFyZW50ICZhbXA7JmFtcDsgd2luZG93LnBhcmVudC5YaW5oYSl7cmV0dXJuIGZhbHNlfSIpOwotaHRtbD10aGlzLmlud2FyZFNwZWNpYWxSZXBsYWNlbWVudHMoaHRtbCk7Ci1odG1sPWh0bWwucmVwbGFjZSgvKDxzY3JpcHRbXj5dKigodHlwZT1bXCJcJ110ZXh0XC8pfChsYW5ndWFnZT1bXCJcJ10pKSkoamF2YXNjcmlwdCkvZ2ksIiQxZnJlZXplc2NyaXB0Iik7Ci12YXIgXzFkZT1uZXcgUmVnRXhwKCIoKGhyZWZ8c3JjfGJhY2tncm91bmQpPVsnXCJdKS8rIiwiZ2kiKTsKLWh0bWw9aHRtbC5yZXBsYWNlKF8xZGUsIiQxIitsb2NhdGlvbi5ocmVmLnJlcGxhY2UoLyhodHRwcz86XC9cL1teXC9dKilcLy4qLywiJDEiKSsiLyIpOwotaHRtbD10aGlzLmZpeFJlbGF0aXZlTGlua3MoaHRtbCk7Ci1pZih0aGlzLmNvbmZpZy5mdWxsUGFnZSl7Ci1odG1sPVhpbmhhLmFkZENvcmVDU1MoaHRtbCk7Ci19Ci1pZih0eXBlb2YgdGhpcy5jb25maWcuaW53YXJkSHRtbD09ImZ1bmN0aW9uIil7Ci1odG1sPXRoaXMuY29uZmlnLmlud2FyZEh0bWwoaHRtbCk7Ci19Ci1yZXR1cm4gaHRtbDsKLX07Ci1YaW5oYS5wcm90b3R5cGUub3V0d2FyZFNwZWNpYWxSZXBsYWNlbWVudHM9ZnVuY3Rpb24oaHRtbCl7Ci1mb3IodmFyIGkgaW4gdGhpcy5jb25maWcuc3BlY2lhbFJlcGxhY2VtZW50cyl7Ci12YXIgZnJvbT10aGlzLmNvbmZpZy5zcGVjaWFsUmVwbGFjZW1lbnRzW2ldOwotdmFyIHRvPWk7Ci1pZih0eXBlb2YgZnJvbS5yZXBsYWNlIT0iZnVuY3Rpb24ifHx0eXBlb2YgdG8ucmVwbGFjZSE9ImZ1bmN0aW9uIil7Ci1jb250aW51ZTsKLX0KLXZhciByZWc9bmV3IFJlZ0V4cChYaW5oYS5lc2NhcGVTdHJpbmdGb3JSZWdFeHAoZnJvbSksImciKTsKLWh0bWw9aHRtbC5yZXBsYWNlKHJlZyx0by5yZXBsYWNlKC9cJC9nLCIkJCQkIikpOwotfQotcmV0dXJuIGh0bWw7Ci19OwotWGluaGEucHJvdG90eXBlLmlud2FyZFNwZWNpYWxSZXBsYWNlbWVudHM9ZnVuY3Rpb24oaHRtbCl7Ci1mb3IodmFyIGkgaW4gdGhpcy5jb25maWcuc3BlY2lhbFJlcGxhY2VtZW50cyl7Ci12YXIgZnJvbT1pOwotdmFyIHRvPXRoaXMuY29uZmlnLnNwZWNpYWxSZXBsYWNlbWVudHNbaV07Ci1pZih0eXBlb2YgZnJvbS5yZXBsYWNlIT0iZnVuY3Rpb24ifHx0eXBlb2YgdG8ucmVwbGFjZSE9ImZ1bmN0aW9uIil7Ci1jb250aW51ZTsKLX0KLXZhciByZWc9bmV3IFJlZ0V4cChYaW5oYS5lc2NhcGVTdHJpbmdGb3JSZWdFeHAoZnJvbSksImciKTsKLWh0bWw9aHRtbC5yZXBsYWNlKHJlZyx0by5yZXBsYWNlKC9cJC9nLCIkJCQkIikpOwotfQotcmV0dXJuIGh0bWw7Ci19OwotWGluaGEucHJvdG90eXBlLmZpeFJlbGF0aXZlTGlua3M9ZnVuY3Rpb24oaHRtbCl7Ci1pZih0eXBlb2YgdGhpcy5jb25maWcuZXhwYW5kUmVsYXRpdmVVcmwhPSJ1bmRlZmluZWQiJiZ0aGlzLmNvbmZpZy5leHBhbmRSZWxhdGl2ZVVybCl7Ci1pZihodG1sPT1udWxsKXsKLXJldHVybiAiIjsKLX0KLXZhciBzcmM9aHRtbC5tYXRjaCgvKHNyY3xocmVmKT0iKFteIl0qKSIvZ2kpOwotdmFyIGI9ZG9jdW1lbnQubG9jYXRpb24uaHJlZjsKLWlmKHNyYyl7Ci12YXIgdXJsLF8xZWQsXzFlZSxfMWVmLF8xZjA7Ci1mb3IodmFyIGk9MDtpPHNyYy5sZW5ndGg7KytpKXsKLXVybD1zcmNbaV0ubWF0Y2goLyhzcmN8aHJlZik9IihbXiJdKikiL2kpOwotXzFlZD11cmxbMl0ubWF0Y2goL1wuXC5cLy9nKTsKLWlmKF8xZWQpewotXzFlZT1uZXcgUmVnRXhwKCIoLio/KSgoW14vXSovKXsiK18xZWQubGVuZ3RoKyJ9KVteL10qJCIpOwotXzFlZj1iLm1hdGNoKF8xZWUpOwotXzFmMD11cmxbMl0ucmVwbGFjZSgvKFwuXC5cLykqLyxfMWVmWzFdKTsKLWh0bWw9aHRtbC5yZXBsYWNlKG5ldyBSZWdFeHAoWGluaGEuZXNjYXBlU3RyaW5nRm9yUmVnRXhwKHVybFsyXSkpLF8xZjApOwotfQotfQotfQotfQotaWYodHlwZW9mIHRoaXMuY29uZmlnLnN0cmlwU2VsZk5hbWVkQW5jaG9ycyE9InVuZGVmaW5lZCImJnRoaXMuY29uZmlnLnN0cmlwU2VsZk5hbWVkQW5jaG9ycyl7Ci12YXIgXzFmMj1uZXcgUmVnRXhwKCIoKGhyZWZ8c3JjfGJhY2tncm91bmQpPVwiKSgiK1hpbmhhLmVzY2FwZVN0cmluZ0ZvclJlZ0V4cCh3aW5kb3cudW5lc2NhcGUoZG9jdW1lbnQubG9jYXRpb24uaHJlZi5yZXBsYWNlKC8mL2csIiZhbXA7IikpKSsiKShbIz9dW14nXCIgXSopIiwiZyIpOwotaHRtbD1odG1sLnJlcGxhY2UoXzFmMiwiJDEkNCIpOwotfQotaWYodHlwZW9mIHRoaXMuY29uZmlnLnN0cmlwQmFzZUhyZWYhPSJ1bmRlZmluZWQiJiZ0aGlzLmNvbmZpZy5zdHJpcEJhc2VIcmVmKXsKLXZhciBfMWYzPW51bGw7Ci1pZih0eXBlb2YgdGhpcy5jb25maWcuYmFzZUhyZWYhPSJ1bmRlZmluZWQiJiZ0aGlzLmNvbmZpZy5iYXNlSHJlZiE9PW51bGwpewotXzFmMz1uZXcgUmVnRXhwKCIoKGhyZWZ8c3JjfGJhY2tncm91bmR8YWN0aW9uKT1cIikoIitYaW5oYS5lc2NhcGVTdHJpbmdGb3JSZWdFeHAodGhpcy5jb25maWcuYmFzZUhyZWYucmVwbGFjZSgvKFteXC9dXC8pKD89LitcLilbXlwvXSokLywiJDEiKSkrIikiLCJnIik7Ci1odG1sPWh0bWwucmVwbGFjZShfMWYzLCIkMSIpOwotfQotXzFmMz1uZXcgUmVnRXhwKCIoKGhyZWZ8c3JjfGJhY2tncm91bmR8YWN0aW9uKT1cIikoIitYaW5oYS5lc2NhcGVTdHJpbmdGb3JSZWdFeHAoZG9jdW1lbnQubG9jYXRpb24uaHJlZi5yZXBsYWNlKC9eKGh0dHBzPzpcL1wvW15cL10qKSguKikvLCIkMSIpKSsiKSIsImciKTsKLWh0bWw9aHRtbC5yZXBsYWNlKF8xZjMsIiQxIik7Ci19Ci1yZXR1cm4gaHRtbDsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0SW5uZXJIVE1MPWZ1bmN0aW9uKCl7Ci1pZighdGhpcy5fZG9jLmJvZHkpewotcmV0dXJuICIiOwotfQotdmFyIGh0bWw9IiI7Ci1zd2l0Y2godGhpcy5fZWRpdE1vZGUpewotY2FzZSAid3lzaXd5ZyI6Ci1pZighdGhpcy5jb25maWcuZnVsbFBhZ2UpewotaHRtbD10aGlzLl9kb2MuYm9keS5pbm5lckhUTUw7Ci19ZWxzZXsKLWh0bWw9dGhpcy5kb2N0eXBlKyJcbiIrdGhpcy5fZG9jLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw7Ci19Ci1icmVhazsKLWNhc2UgInRleHRtb2RlIjoKLWh0bWw9dGhpcy5fdGV4dEFyZWEudmFsdWU7Ci1icmVhazsKLWRlZmF1bHQ6Ci1hbGVydCgiTW9kZSA8Iit0aGlzLl9lZGl0TW9kZSsiPiBub3QgZGVmaW5lZCEiKTsKLXJldHVybiBmYWxzZTsKLX0KLXJldHVybiBodG1sOwotfTsKLVhpbmhhLnByb3RvdHlwZS5zZXRIVE1MPWZ1bmN0aW9uKGh0bWwpewotaWYoIXRoaXMuY29uZmlnLmZ1bGxQYWdlKXsKLXRoaXMuX2RvYy5ib2R5LmlubmVySFRNTD1odG1sOwotfWVsc2V7Ci10aGlzLnNldEZ1bGxIVE1MKGh0bWwpOwotfQotdGhpcy5fdGV4dEFyZWEudmFsdWU9aHRtbDsKLX07Ci1YaW5oYS5wcm90b3R5cGUuc2V0RG9jdHlwZT1mdW5jdGlvbihfMWY2KXsKLXRoaXMuZG9jdHlwZT1fMWY2OwotfTsKLVhpbmhhLl9vYmplY3Q9bnVsbDsKLUFycmF5LnByb3RvdHlwZS5pc0FycmF5PXRydWU7Ci1SZWdFeHAucHJvdG90eXBlLmlzUmVnRXhwPXRydWU7Ci1YaW5oYS5jbG9uZU9iamVjdD1mdW5jdGlvbihvYmopewotaWYoIW9iail7Ci1yZXR1cm4gbnVsbDsKLX0KLXZhciBfMWY4PW9iai5pc0FycmF5P1tdOnt9OwotaWYob2JqLmNvbnN0cnVjdG9yLnRvU3RyaW5nKCkubWF0Y2goL1xzKmZ1bmN0aW9uIEZ1bmN0aW9uXCgvKXx8dHlwZW9mIG9iaj09ImZ1bmN0aW9uIil7Ci1fMWY4PW9iajsKLX1lbHNlewotaWYob2JqLmlzUmVnRXhwKXsKLV8xZjg9ZXZhbChvYmoudG9TdHJpbmcoKSk7Ci19ZWxzZXsKLWZvcih2YXIgbiBpbiBvYmopewotdmFyIG5vZGU9b2JqW25dOwotaWYodHlwZW9mIG5vZGU9PSJvYmplY3QiKXsKLV8xZjhbbl09WGluaGEuY2xvbmVPYmplY3Qobm9kZSk7Ci19ZWxzZXsKLV8xZjhbbl09bm9kZTsKLX0KLX0KLX0KLX0KLXJldHVybiBfMWY4OwotfTsKLVhpbmhhLmV4dGVuZD1mdW5jdGlvbihfMWZiLF8xZmMpewotZnVuY3Rpb24gaW5oZXJpdGFuY2UoKXsKLX07Ci1pbmhlcml0YW5jZS5wcm90b3R5cGU9XzFmYy5wcm90b3R5cGU7Ci1fMWZiLnByb3RvdHlwZT1uZXcgaW5oZXJpdGFuY2UoKTsKLV8xZmIucHJvdG90eXBlLmNvbnN0cnVjdG9yPV8xZmI7Ci1fMWZiLnBhcmVudENvbnN0cnVjdG9yPV8xZmM7Ci1fMWZiLnN1cGVyQ2xhc3M9XzFmYy5wcm90b3R5cGU7Ci19OwotWGluaGEuZmx1c2hFdmVudHM9ZnVuY3Rpb24oKXsKLXZhciB4PTA7Ci12YXIgZT1YaW5oYS5fZXZlbnRGbHVzaGVycy5wb3AoKTsKLXdoaWxlKGUpewotdHJ5ewotaWYoZS5sZW5ndGg9PTMpewotWGluaGEuX3JlbW92ZUV2ZW50KGVbMF0sZVsxXSxlWzJdKTsKLXgrKzsKLX1lbHNlewotaWYoZS5sZW5ndGg9PTIpewotZVswXVsib24iK2VbMV1dPW51bGw7Ci1lWzBdLl94aW5oYV9kb20wRXZlbnRzW2VbMV1dPW51bGw7Ci14Kys7Ci19Ci19Ci19Ci1jYXRjaChleCl7Ci19Ci1lPVhpbmhhLl9ldmVudEZsdXNoZXJzLnBvcCgpOwotfQotfTsKLVhpbmhhLl9ldmVudEZsdXNoZXJzPVtdOwotaWYoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcil7Ci1YaW5oYS5fYWRkRXZlbnQ9ZnVuY3Rpb24oZWwsXzIwMCxmdW5jKXsKLWVsLmFkZEV2ZW50TGlzdGVuZXIoXzIwMCxmdW5jLGZhbHNlKTsKLVhpbmhhLl9ldmVudEZsdXNoZXJzLnB1c2goW2VsLF8yMDAsZnVuY10pOwotfTsKLVhpbmhhLl9yZW1vdmVFdmVudD1mdW5jdGlvbihlbCxfMjAzLGZ1bmMpewotZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihfMjAzLGZ1bmMsZmFsc2UpOwotfTsKLVhpbmhhLl9zdG9wRXZlbnQ9ZnVuY3Rpb24oZXYpewotZXYucHJldmVudERlZmF1bHQoKTsKLWV2LnN0b3BQcm9wYWdhdGlvbigpOwotfTsKLX1lbHNlewotaWYoZG9jdW1lbnQuYXR0YWNoRXZlbnQpewotWGluaGEuX2FkZEV2ZW50PWZ1bmN0aW9uKGVsLF8yMDcsZnVuYyl7Ci1lbC5hdHRhY2hFdmVudCgib24iK18yMDcsZnVuYyk7Ci1YaW5oYS5fZXZlbnRGbHVzaGVycy5wdXNoKFtlbCxfMjA3LGZ1bmNdKTsKLX07Ci1YaW5oYS5fcmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZWwsXzIwYSxmdW5jKXsKLWVsLmRldGFjaEV2ZW50KCJvbiIrXzIwYSxmdW5jKTsKLX07Ci1YaW5oYS5fc3RvcEV2ZW50PWZ1bmN0aW9uKGV2KXsKLXRyeXsKLWV2LmNhbmNlbEJ1YmJsZT10cnVlOwotZXYucmV0dXJuVmFsdWU9ZmFsc2U7Ci19Ci1jYXRjaChleCl7Ci19Ci19OwotfWVsc2V7Ci1YaW5oYS5fYWRkRXZlbnQ9ZnVuY3Rpb24oZWwsXzIwZSxmdW5jKXsKLWFsZXJ0KCJfYWRkRXZlbnQgaXMgbm90IHN1cHBvcnRlZCIpOwotfTsKLVhpbmhhLl9yZW1vdmVFdmVudD1mdW5jdGlvbihlbCxfMjExLGZ1bmMpewotYWxlcnQoIl9yZW1vdmVFdmVudCBpcyBub3Qgc3VwcG9ydGVkIik7Ci19OwotWGluaGEuX3N0b3BFdmVudD1mdW5jdGlvbihldil7Ci1hbGVydCgiX3N0b3BFdmVudCBpcyBub3Qgc3VwcG9ydGVkIik7Ci19OwotfQotfQotWGluaGEuX2FkZEV2ZW50cz1mdW5jdGlvbihlbCxldnMsZnVuYyl7Ci1mb3IodmFyIGk9ZXZzLmxlbmd0aDstLWk+PTA7KXsKLVhpbmhhLl9hZGRFdmVudChlbCxldnNbaV0sZnVuYyk7Ci19Ci19OwotWGluaGEuX3JlbW92ZUV2ZW50cz1mdW5jdGlvbihlbCxldnMsZnVuYyl7Ci1mb3IodmFyIGk9ZXZzLmxlbmd0aDstLWk+PTA7KXsKLVhpbmhhLl9yZW1vdmVFdmVudChlbCxldnNbaV0sZnVuYyk7Ci19Ci19OwotWGluaGEuYWRkT25sb2FkSGFuZGxlcj1mdW5jdGlvbihmdW5jLF8yMWQpewotXzIxZD1fMjFkP18yMWQ6d2luZG93OwotdmFyIGluaXQ9ZnVuY3Rpb24oKXsKLWlmKGFyZ3VtZW50cy5jYWxsZWUuZG9uZSl7Ci1yZXR1cm47Ci19Ci1hcmd1bWVudHMuY2FsbGVlLmRvbmU9dHJ1ZTsKLWlmKFhpbmhhLm9ubG9hZFRpbWVyKXsKLWNsZWFySW50ZXJ2YWwoWGluaGEub25sb2FkVGltZXIpOwotfQotZnVuYygpOwotfTsKLWlmKFhpbmhhLmlzX2llKXsKLWRvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLGZ1bmN0aW9uKCl7Ci1pZihkb2N1bWVudC5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIil7Ci1kb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixhcmd1bWVudHMuY2FsbGVlKTsKLWluaXQoKTsKLX0KLX0pOwotaWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsJiZ0eXBlb2Ygd2luZG93LmZyYW1lRWxlbWVudD09PSJ1bmRlZmluZWQiKXsKLShmdW5jdGlvbigpewotaWYoYXJndW1lbnRzLmNhbGxlZS5kb25lKXsKLXJldHVybjsKLX0KLXRyeXsKLWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCgibGVmdCIpOwotfQotY2F0Y2goZXJyb3Ipewotc2V0VGltZW91dChhcmd1bWVudHMuY2FsbGVlLDApOwotcmV0dXJuOwotfQotaW5pdCgpOwotfSkoKTsKLX0KLX1lbHNlewotaWYoL2FwcGxld2Via2l0fEtIVE1ML2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7Ci1YaW5oYS5vbmxvYWRUaW1lcj1fMjFkLnNldEludGVydmFsKGZ1bmN0aW9uKCl7Ci1pZigvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KF8yMWQuZG9jdW1lbnQucmVhZHlTdGF0ZSkpewotaW5pdCgpOwotfQotfSwxMCk7Ci19ZWxzZXsKLV8yMWQuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsaW5pdCxmYWxzZSk7Ci19Ci19Ci1YaW5oYS5fYWRkRXZlbnQoXzIxZCwibG9hZCIsaW5pdCk7Ci19OwotWGluaGEuYWRkRG9tMEV2ZW50PWZ1bmN0aW9uKGVsLGV2LGZuKXsKLVhpbmhhLl9wcmVwYXJlRm9yRG9tMEV2ZW50cyhlbCxldik7Ci1lbC5feGluaGFfZG9tMEV2ZW50c1tldl0udW5zaGlmdChmbik7Ci19OwotWGluaGEucHJlcGVuZERvbTBFdmVudD1mdW5jdGlvbihlbCxldixmbil7Ci1YaW5oYS5fcHJlcGFyZUZvckRvbTBFdmVudHMoZWwsZXYpOwotZWwuX3hpbmhhX2RvbTBFdmVudHNbZXZdLnB1c2goZm4pOwotfTsKLVhpbmhhLmdldEV2ZW50PWZ1bmN0aW9uKGV2KXsKLXJldHVybiBldnx8d2luZG93LmV2ZW50OwotfTsKLVhpbmhhLl9wcmVwYXJlRm9yRG9tMEV2ZW50cz1mdW5jdGlvbihlbCxldil7Ci1pZih0eXBlb2YgZWwuX3hpbmhhX2RvbTBFdmVudHM9PSJ1bmRlZmluZWQiKXsKLWVsLl94aW5oYV9kb20wRXZlbnRzPXt9OwotWGluaGEuZnJlZUxhdGVyKGVsLCJfeGluaGFfZG9tMEV2ZW50cyIpOwotfQotaWYodHlwZW9mIGVsLl94aW5oYV9kb20wRXZlbnRzW2V2XT09InVuZGVmaW5lZCIpewotZWwuX3hpbmhhX2RvbTBFdmVudHNbZXZdPVtdOwotaWYodHlwZW9mIGVsWyJvbiIrZXZdPT0iZnVuY3Rpb24iKXsKLWVsLl94aW5oYV9kb20wRXZlbnRzW2V2XS5wdXNoKGVsWyJvbiIrZXZdKTsKLX0KLWVsWyJvbiIrZXZdPWZ1bmN0aW9uKF8yMjgpewotdmFyIGE9ZWwuX3hpbmhhX2RvbTBFdmVudHNbZXZdOwotdmFyIF8yMmE9dHJ1ZTsKLWZvcih2YXIgaT1hLmxlbmd0aDstLWk+PTA7KXsKLWVsLl94aW5oYV90ZW1wRXZlbnRIYW5kbGVyPWFbaV07Ci1pZihlbC5feGluaGFfdGVtcEV2ZW50SGFuZGxlcihfMjI4KT09PWZhbHNlKXsKLWVsLl94aW5oYV90ZW1wRXZlbnRIYW5kbGVyPW51bGw7Ci1fMjJhPWZhbHNlOwotYnJlYWs7Ci19Ci1lbC5feGluaGFfdGVtcEV2ZW50SGFuZGxlcj1udWxsOwotfQotcmV0dXJuIF8yMmE7Ci19OwotWGluaGEuX2V2ZW50Rmx1c2hlcnMucHVzaChbZWwsZXZdKTsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUubm90aWZ5T249ZnVuY3Rpb24oZXYsZm4pewotaWYodHlwZW9mIHRoaXMuX25vdGlmeUxpc3RlbmVyc1tldl09PSJ1bmRlZmluZWQiKXsKLXRoaXMuX25vdGlmeUxpc3RlbmVyc1tldl09W107Ci1YaW5oYS5mcmVlTGF0ZXIodGhpcywiX25vdGlmeUxpc3RlbmVycyIpOwotfQotdGhpcy5fbm90aWZ5TGlzdGVuZXJzW2V2XS5wdXNoKGZuKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUubm90aWZ5T2Y9ZnVuY3Rpb24oZXYsYXJncyl7Ci1pZih0aGlzLl9ub3RpZnlMaXN0ZW5lcnNbZXZdKXsKLWZvcih2YXIgaT0wO2k8dGhpcy5fbm90aWZ5TGlzdGVuZXJzW2V2XS5sZW5ndGg7aSsrKXsKLXRoaXMuX25vdGlmeUxpc3RlbmVyc1tldl1baV0oZXYsYXJncyk7Ci19Ci19Ci19OwotWGluaGEuX2Jsb2NrVGFncz0iIGJvZHkgZm9ybSB0ZXh0YXJlYSBmaWVsZHNldCB1bCBvbCBkbCBsaSBkaXYgIisicCBoMSBoMiBoMyBoNCBoNSBoNiBxdW90ZSBwcmUgdGFibGUgdGhlYWQgIisidGJvZHkgdGZvb3QgdHIgdGQgdGggaWZyYW1lIGFkZHJlc3MgYmxvY2txdW90ZSB0aXRsZSBtZXRhIGxpbmsgc3R5bGUgaGVhZCAiOwotWGluaGEuaXNCbG9ja0VsZW1lbnQ9ZnVuY3Rpb24oZWwpewotcmV0dXJuIGVsJiZlbC5ub2RlVHlwZT09MSYmKFhpbmhhLl9ibG9ja1RhZ3MuaW5kZXhPZigiICIrZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpKyIgIikhPS0xKTsKLX07Ci1YaW5oYS5fcGFyYUNvbnRhaW5lclRhZ3M9IiBib2R5IHRkIHRoIGNhcHRpb24gZmllbGRzZXQgZGl2ICI7Ci1YaW5oYS5pc1BhcmFDb250YWluZXI9ZnVuY3Rpb24oZWwpewotcmV0dXJuIGVsJiZlbC5ub2RlVHlwZT09MSYmKFhpbmhhLl9wYXJhQ29udGFpbmVyVGFncy5pbmRleE9mKCIgIitlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkrIiAiKSE9LTEpOwotfTsKLVhpbmhhLl9jbG9zaW5nVGFncz0iIGEgYWJiciBhY3JvbnltIGFkZHJlc3MgYXBwbGV0IGIgYmRvIGJpZyBibG9ja3F1b3RlIGJ1dHRvbiBjYXB0aW9uIGNlbnRlciBjaXRlIGNvZGUgZGVsIGRmbiBkaXIgZGl2IGRsIGVtIGZpZWxkc2V0IGZvbnQgZm9ybSBmcmFtZXNldCBoMSBoMiBoMyBoNCBoNSBoNiBpIGlmcmFtZSBpbnMga2JkIGxhYmVsIGxlZ2VuZCBtYXAgbWVudSBub2ZyYW1lcyBub3NjcmlwdCBvYmplY3Qgb2wgb3B0Z3JvdXAgcHJlIHEgcyBzYW1wIHNjcmlwdCBzZWxlY3Qgc21hbGwgc3BhbiBzdHJpa2Ugc3Ryb25nIHN0eWxlIHN1YiBzdXAgdGFibGUgdGV4dGFyZWEgdGl0bGUgdHQgdSB1bCB2YXIgIjsKLVhpbmhhLm5lZWRzQ2xvc2luZ1RhZz1mdW5jdGlvbihlbCl7Ci1yZXR1cm4gZWwmJmVsLm5vZGVUeXBlPT0xJiYoWGluaGEuX2Nsb3NpbmdUYWdzLmluZGV4T2YoIiAiK2VsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSsiICIpIT0tMSk7Ci19OwotWGluaGEuaHRtbEVuY29kZT1mdW5jdGlvbihzdHIpewotaWYoIXN0cil7Ci1yZXR1cm4gIiI7Ci19Ci1pZih0eXBlb2Ygc3RyLnJlcGxhY2U9PSJ1bmRlZmluZWQiKXsKLXN0cj1zdHIudG9TdHJpbmcoKTsKLX0KLXN0cj1zdHIucmVwbGFjZSgvJi9pZywiJmFtcDsiKTsKLXN0cj1zdHIucmVwbGFjZSgvPC9pZywiJmx0OyIpOwotc3RyPXN0ci5yZXBsYWNlKC8+L2lnLCImZ3Q7Iik7Ci1zdHI9c3RyLnJlcGxhY2UoL1x4QTAvZywiJm5ic3A7Iik7Ci1zdHI9c3RyLnJlcGxhY2UoL1x4MjIvZywiJnF1b3Q7Iik7Ci1yZXR1cm4gc3RyOwotfTsKLVhpbmhhLnByb3RvdHlwZS5zdHJpcEJhc2VVUkw9ZnVuY3Rpb24oXzIzNSl7Ci1pZih0aGlzLmNvbmZpZy5iYXNlSHJlZj09PW51bGx8fCF0aGlzLmNvbmZpZy5zdHJpcEJhc2VIcmVmKXsKLXJldHVybiBfMjM1OwotfQotdmFyIF8yMzY9dGhpcy5jb25maWcuYmFzZUhyZWYucmVwbGFjZSgvXihodHRwcz86XC9cL1teXC9dKykoLiopJC8sIiQxIik7Ci12YXIgXzIzNz1uZXcgUmVnRXhwKF8yMzYpOwotcmV0dXJuIF8yMzUucmVwbGFjZShfMjM3LCIiKTsKLX07Ci1pZih0eXBlb2YgU3RyaW5nLnByb3RvdHlwZS50cmltIT0iZnVuY3Rpb24iKXsKLVN0cmluZy5wcm90b3R5cGUudHJpbT1mdW5jdGlvbigpewotcmV0dXJuIHRoaXMucmVwbGFjZSgvXlxzKy8sIiIpLnJlcGxhY2UoL1xzKyQvLCIiKTsKLX07Ci19Ci1YaW5oYS5fbWFrZUNvbG9yPWZ1bmN0aW9uKHYpewotaWYodHlwZW9mIHYhPSJudW1iZXIiKXsKLXJldHVybiB2OwotfQotdmFyIHI9diYyNTU7Ci12YXIgZz0odj4+OCkmMjU1OwotdmFyIGI9KHY+PjE2KSYyNTU7Ci1yZXR1cm4gInJnYigiK3IrIiwiK2crIiwiK2IrIikiOwotfTsKLVhpbmhhLl9jb2xvclRvUmdiPWZ1bmN0aW9uKHYpewotaWYoIXYpewotcmV0dXJuICIiOwotfQotdmFyIHIsZyxiOwotZnVuY3Rpb24gaGV4KGQpewotcmV0dXJuIChkPDE2KT8oIjAiK2QudG9TdHJpbmcoMTYpKTpkLnRvU3RyaW5nKDE2KTsKLX07Ci1pZih0eXBlb2Ygdj09Im51bWJlciIpewotcj12JjI1NTsKLWc9KHY+PjgpJjI1NTsKLWI9KHY+PjE2KSYyNTU7Ci1yZXR1cm4gIiMiK2hleChyKStoZXgoZykraGV4KGIpOwotfQotaWYodi5zdWJzdHIoMCwzKT09InJnYiIpewotdmFyIHJlPS9yZ2JccypcKFxzKihbMC05XSspXHMqLFxzKihbMC05XSspXHMqLFxzKihbMC05XSspXHMqXCkvOwotaWYodi5tYXRjaChyZSkpewotcj1wYXJzZUludChSZWdFeHAuJDEsMTApOwotZz1wYXJzZUludChSZWdFeHAuJDIsMTApOwotYj1wYXJzZUludChSZWdFeHAuJDMsMTApOwotcmV0dXJuICIjIitoZXgocikraGV4KGcpK2hleChiKTsKLX0KLXJldHVybiBudWxsOwotfQotaWYodi5zdWJzdHIoMCwxKT09IiMiKXsKLXJldHVybiB2OwotfQotcmV0dXJuIG51bGw7Ci19OwotWGluaGEucHJvdG90eXBlLl9wb3B1cERpYWxvZz1mdW5jdGlvbih1cmwsXzI0Myxpbml0KXsKLURpYWxvZyh0aGlzLnBvcHVwVVJMKHVybCksXzI0Myxpbml0KTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuaW1nVVJMPWZ1bmN0aW9uKGZpbGUsXzI0Nil7Ci1pZih0eXBlb2YgXzI0Nj09InVuZGVmaW5lZCIpewotcmV0dXJuIF9lZGl0b3JfdXJsK2ZpbGU7Ci19ZWxzZXsKLXJldHVybiBYaW5oYS5nZXRQbHVnaW5EaXIoXzI0NikrIi9pbWcvIitmaWxlOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5wb3B1cFVSTD1mdW5jdGlvbihmaWxlKXsKLXZhciB1cmw9IiI7Ci1pZihmaWxlLm1hdGNoKC9ecGx1Z2luOlwvXC8oLio/KVwvKC4qKS8pKXsKLXZhciBfMjQ5PVJlZ0V4cC4kMTsKLXZhciBfMjRhPVJlZ0V4cC4kMjsKLWlmKCEvXC4oaHRtbD98cGhwKSQvLnRlc3QoXzI0YSkpewotXzI0YSs9Ii5odG1sIjsKLX0KLXVybD1YaW5oYS5nZXRQbHVnaW5EaXIoXzI0OSkrIi9wb3B1cHMvIitfMjRhOwotfWVsc2V7Ci1pZihmaWxlLm1hdGNoKC9eXC8uKj8vKXx8ZmlsZS5tYXRjaCgvXmh0dHBzPzpcL1wvLykpewotdXJsPWZpbGU7Ci19ZWxzZXsKLXVybD1fZWRpdG9yX3VybCt0aGlzLmNvbmZpZy5wb3B1cFVSTCtmaWxlOwotfQotfQotcmV0dXJuIHVybDsKLX07Ci1YaW5oYS5nZXRFbGVtZW50QnlJZD1mdW5jdGlvbih0YWcsaWQpewotdmFyIGVsLGksb2Jqcz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWcpOwotZm9yKGk9b2Jqcy5sZW5ndGg7LS1pPj0wJiYoZWw9b2Jqc1tpXSk7KXsKLWlmKGVsLmlkPT1pZCl7Ci1yZXR1cm4gZWw7Ci19Ci19Ci1yZXR1cm4gbnVsbDsKLX07Ci1YaW5oYS5wcm90b3R5cGUuX3RvZ2dsZUJvcmRlcnM9ZnVuY3Rpb24oKXsKLXZhciBfMjUwPXRoaXMuX2RvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEFCTEUiKTsKLWlmKF8yNTAubGVuZ3RoIT09MCl7Ci1pZighdGhpcy5ib3JkZXJzKXsKLXRoaXMuYm9yZGVycz10cnVlOwotfWVsc2V7Ci10aGlzLmJvcmRlcnM9ZmFsc2U7Ci19Ci1mb3IodmFyIGk9MDtpPF8yNTAubGVuZ3RoO2krKyl7Ci1pZih0aGlzLmJvcmRlcnMpewotWGluaGEuX2FkZENsYXNzKF8yNTBbaV0sImh0bXRhYmxlYm9yZGVycyIpOwotfWVsc2V7Ci1YaW5oYS5fcmVtb3ZlQ2xhc3MoXzI1MFtpXSwiaHRtdGFibGVib3JkZXJzIik7Ci19Ci19Ci19Ci1yZXR1cm4gdHJ1ZTsKLX07Ci1YaW5oYS5hZGRDb3JlQ1NTPWZ1bmN0aW9uKGh0bWwpewotdmFyIF8yNTM9IjxzdHlsZSB0aXRsZT1cIlhpbmhhSW50ZXJuYWxDU1NcIiB0eXBlPVwidGV4dC9jc3NcIj4iKyIuaHRtdGFibGVib3JkZXJzLCAuaHRtdGFibGVib3JkZXJzIHRkLCAuaHRtdGFibGVib3JkZXJzIHRoIHtib3JkZXIgOiAxcHggZGFzaGVkIGxpZ2h0Z3JleSAhIGltcG9ydGFudDt9XG4iKyJodG1sLCBib2R5IHsgYm9yZGVyOiAwcHg7IH0gXG4iKyJib2R5IHsgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsgfSBcbiIrImltZywgaHIgeyBjdXJzb3I6IGRlZmF1bHQgfSBcbiIrIjwvc3R5bGU+XG4iOwotaWYoaHRtbCYmLzxoZWFkPi9pLnRlc3QoaHRtbCkpewotcmV0dXJuIGh0bWwucmVwbGFjZSgvPGhlYWQ+L2ksIjxoZWFkPiIrXzI1Myk7Ci19ZWxzZXsKLWlmKGh0bWwpewotcmV0dXJuIF8yNTMraHRtbDsKLX1lbHNlewotcmV0dXJuIF8yNTM7Ci19Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmFkZEVkaXRvclN0eWxlc2hlZXQ9ZnVuY3Rpb24oXzI1NCl7Ci12YXIgXzI1NT10aGlzLl9kb2MuY3JlYXRlRWxlbWVudCgibGluayIpOwotXzI1NS5yZWw9InN0eWxlc2hlZXQiOwotXzI1NS50eXBlPSJ0ZXh0L2NzcyI7Ci1fMjU1LnRpdGxlPSJYaW5oYUludGVybmFsQ1NTIjsKLV8yNTUuaHJlZj1fMjU0OwotdGhpcy5fZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJIRUFEIilbMF0uYXBwZW5kQ2hpbGQoXzI1NSk7Ci19OwotWGluaGEuc3RyaXBDb3JlQ1NTPWZ1bmN0aW9uKGh0bWwpewotcmV0dXJuIGh0bWwucmVwbGFjZSgvPHN0eWxlW14+XSt0aXRsZT0iWGluaGFJbnRlcm5hbENTUyIoLnxcbikqPzxcL3N0eWxlPi9pZywiIikucmVwbGFjZSgvPGxpbmtbXj5dK3RpdGxlPSJYaW5oYUludGVybmFsQ1NTIigufFxuKSo/Pi9pZywiIik7Ci19OwotWGluaGEuX3JlbW92ZUNsYXNzPWZ1bmN0aW9uKGVsLF8yNTgpewotaWYoIShlbCYmZWwuY2xhc3NOYW1lKSl7Ci1yZXR1cm47Ci19Ci12YXIgY2xzPWVsLmNsYXNzTmFtZS5zcGxpdCgiICIpOwotdmFyIGFyPVtdOwotZm9yKHZhciBpPWNscy5sZW5ndGg7aT4wOyl7Ci1pZihjbHNbLS1pXSE9XzI1OCl7Ci1hclthci5sZW5ndGhdPWNsc1tpXTsKLX0KLX0KLWVsLmNsYXNzTmFtZT1hci5qb2luKCIgIik7Ci19OwotWGluaGEuX2FkZENsYXNzPWZ1bmN0aW9uKGVsLF8yNWQpewotWGluaGEuX3JlbW92ZUNsYXNzKGVsLF8yNWQpOwotZWwuY2xhc3NOYW1lKz0iICIrXzI1ZDsKLX07Ci1YaW5oYS5hZGRDbGFzc2VzPWZ1bmN0aW9uKGVsLF8yNWYpewotaWYoZWwhPT1udWxsKXsKLXZhciBfMjYwPWVsLmNsYXNzTmFtZS50cmltKCkuc3BsaXQoIiAiKTsKLXZhciBvdXJzPV8yNWYuc3BsaXQoIiAiKTsKLWZvcih2YXIgeD0wO3g8b3Vycy5sZW5ndGg7eCsrKXsKLXZhciBfMjYzPWZhbHNlOwotZm9yKHZhciBpPTA7XzI2Mz09PWZhbHNlJiZpPF8yNjAubGVuZ3RoO2krKyl7Ci1pZihfMjYwW2ldPT1vdXJzW3hdKXsKLV8yNjM9dHJ1ZTsKLX0KLX0KLWlmKF8yNjM9PT1mYWxzZSl7Ci1fMjYwW18yNjAubGVuZ3RoXT1vdXJzW3hdOwotfQotfQotZWwuY2xhc3NOYW1lPV8yNjAuam9pbigiICIpLnRyaW0oKTsKLX0KLX07Ci1YaW5oYS5yZW1vdmVDbGFzc2VzPWZ1bmN0aW9uKGVsLF8yNjYpewotdmFyIF8yNjc9ZWwuY2xhc3NOYW1lLnRyaW0oKS5zcGxpdCgpOwotdmFyIF8yNjg9W107Ci12YXIgXzI2OT1fMjY2LnRyaW0oKS5zcGxpdCgpOwotZm9yKHZhciBpPTA7aTxfMjY3Lmxlbmd0aDtpKyspewotdmFyIF8yNmI9ZmFsc2U7Ci1mb3IodmFyIHg9MDt4PF8yNjkubGVuZ3RoJiYhXzI2Yjt4KyspewotaWYoXzI2N1tpXT09XzI2OVt4XSl7Ci1fMjZiPXRydWU7Ci19Ci19Ci1pZighXzI2Yil7Ci1fMjY4W18yNjgubGVuZ3RoXT1fMjY3W2ldOwotfQotfQotcmV0dXJuIF8yNjguam9pbigiICIpOwotfTsKLVhpbmhhLmFkZENsYXNzPVhpbmhhLl9hZGRDbGFzczsKLVhpbmhhLnJlbW92ZUNsYXNzPVhpbmhhLl9yZW1vdmVDbGFzczsKLVhpbmhhLl9hZGRDbGFzc2VzPVhpbmhhLmFkZENsYXNzZXM7Ci1YaW5oYS5fcmVtb3ZlQ2xhc3Nlcz1YaW5oYS5yZW1vdmVDbGFzc2VzOwotWGluaGEuX2hhc0NsYXNzPWZ1bmN0aW9uKGVsLF8yNmUpewotaWYoIShlbCYmZWwuY2xhc3NOYW1lKSl7Ci1yZXR1cm4gZmFsc2U7Ci19Ci12YXIgY2xzPWVsLmNsYXNzTmFtZS5zcGxpdCgiICIpOwotZm9yKHZhciBpPWNscy5sZW5ndGg7aT4wOyl7Ci1pZihjbHNbLS1pXT09XzI2ZSl7Ci1yZXR1cm4gdHJ1ZTsKLX0KLX0KLXJldHVybiBmYWxzZTsKLX07Ci1YaW5oYS5fcG9zdGJhY2tfc2VuZF9jaGFyc2V0PXRydWU7Ci1YaW5oYS5fcG9zdGJhY2s9ZnVuY3Rpb24odXJsLGRhdGEsXzI3MyxfMjc0KXsKLXZhciByZXE9bnVsbDsKLXJlcT1YaW5oYS5nZXRYTUxIVFRQUmVxdWVzdE9iamVjdCgpOwotdmFyIF8yNzY9IiI7Ci1pZih0eXBlb2YgZGF0YT09InN0cmluZyIpewotXzI3Nj1kYXRhOwotfWVsc2V7Ci1pZih0eXBlb2YgZGF0YT09Im9iamVjdCIpewotZm9yKHZhciBpIGluIGRhdGEpewotXzI3Nis9KF8yNzYubGVuZ3RoPyImIjoiIikraSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGRhdGFbaV0pOwotfQotfQotfQotZnVuY3Rpb24gY2FsbEJhY2soKXsKLWlmKHJlcS5yZWFkeVN0YXRlPT00KXsKLWlmKCgocmVxLnN0YXR1cy8xMDApPT0yKXx8WGluaGEuaXNSdW5Mb2NhbGx5JiZyZXEuc3RhdHVzPT09MCl7Ci1pZih0eXBlb2YgXzI3Mz09ImZ1bmN0aW9uIil7Ci1fMjczKHJlcS5yZXNwb25zZVRleHQscmVxKTsKLX0KLX1lbHNlewotaWYoWGluaGEuX3Bvc3RiYWNrX3NlbmRfY2hhcnNldCl7Ci1YaW5oYS5fcG9zdGJhY2tfc2VuZF9jaGFyc2V0PWZhbHNlOwotWGluaGEuX3Bvc3RiYWNrKHVybCxkYXRhLF8yNzMsXzI3NCk7Ci19ZWxzZXsKLWlmKHR5cGVvZiBfMjc0PT0iZnVuY3Rpb24iKXsKLV8yNzQocmVxKTsKLX1lbHNlewotYWxlcnQoIkFuIGVycm9yIGhhcyBvY2N1cnJlZDogIityZXEuc3RhdHVzVGV4dCsiXG5VUkw6ICIrdXJsKTsKLX0KLX0KLX0KLX0KLX07Ci1yZXEub25yZWFkeXN0YXRlY2hhbmdlPWNhbGxCYWNrOwotcmVxLm9wZW4oIlBPU1QiLHVybCx0cnVlKTsKLXJlcS5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKyhYaW5oYS5fcG9zdGJhY2tfc2VuZF9jaGFyc2V0PyI7IGNoYXJzZXQ9VVRGLTgiOiIiKSk7Ci1yZXEuc2VuZChfMjc2KTsKLX07Ci1YaW5oYS5fZ2V0YmFjaz1mdW5jdGlvbih1cmwsXzI3OSxfMjdhKXsKLXZhciByZXE9bnVsbDsKLXJlcT1YaW5oYS5nZXRYTUxIVFRQUmVxdWVzdE9iamVjdCgpOwotZnVuY3Rpb24gY2FsbEJhY2soKXsKLWlmKHJlcS5yZWFkeVN0YXRlPT00KXsKLWlmKCgocmVxLnN0YXR1cy8xMDApPT0yKXx8WGluaGEuaXNSdW5Mb2NhbGx5JiZyZXEuc3RhdHVzPT09MCl7Ci1fMjc5KHJlcS5yZXNwb25zZVRleHQscmVxKTsKLX1lbHNlewotaWYodHlwZW9mIF8yN2E9PSJmdW5jdGlvbiIpewotXzI3YShyZXEpOwotfWVsc2V7Ci1hbGVydCgiQW4gZXJyb3IgaGFzIG9jY3VycmVkOiAiK3JlcS5zdGF0dXNUZXh0KyJcblVSTDogIit1cmwpOwotfQotfQotfQotfTsKLXJlcS5vbnJlYWR5c3RhdGVjaGFuZ2U9Y2FsbEJhY2s7Ci1yZXEub3BlbigiR0VUIix1cmwsdHJ1ZSk7Ci1yZXEuc2VuZChudWxsKTsKLX07Ci1YaW5oYS5waW5nPWZ1bmN0aW9uKHVybCxfMjdkLF8yN2UpewotdmFyIHJlcT1udWxsOwotcmVxPVhpbmhhLmdldFhNTEhUVFBSZXF1ZXN0T2JqZWN0KCk7Ci1mdW5jdGlvbiBjYWxsQmFjaygpewotaWYocmVxLnJlYWR5U3RhdGU9PTQpewotaWYoKChyZXEuc3RhdHVzLzEwMCk9PTIpfHxYaW5oYS5pc1J1bkxvY2FsbHkmJnJlcS5zdGF0dXM9PT0wKXsKLWlmKF8yN2QpewotXzI3ZChyZXEpOwotfQotfWVsc2V7Ci1pZihfMjdlKXsKLV8yN2UocmVxKTsKLX0KLX0KLX0KLX07Ci12YXIgXzI4MD0iR0VUIjsKLXJlcS5vbnJlYWR5c3RhdGVjaGFuZ2U9Y2FsbEJhY2s7Ci1yZXEub3BlbihfMjgwLHVybCx0cnVlKTsKLXJlcS5zZW5kKG51bGwpOwotfTsKLVhpbmhhLl9nZXR1cmxjb250ZW50PWZ1bmN0aW9uKHVybCxfMjgyKXsKLXZhciByZXE9bnVsbDsKLXJlcT1YaW5oYS5nZXRYTUxIVFRQUmVxdWVzdE9iamVjdCgpOwotcmVxLm9wZW4oIkdFVCIsdXJsLGZhbHNlKTsKLXJlcS5zZW5kKG51bGwpOwotaWYoKChyZXEuc3RhdHVzLzEwMCk9PTIpfHxYaW5oYS5pc1J1bkxvY2FsbHkmJnJlcS5zdGF0dXM9PT0wKXsKLXJldHVybiAoXzI4Mik/cmVxLnJlc3BvbnNlWE1MOnJlcS5yZXNwb25zZVRleHQ7Ci19ZWxzZXsKLXJldHVybiAiIjsKLX0KLX07Ci1pZih0eXBlb2YgZHVtcFZhbHVlcz09InVuZGVmaW5lZCIpewotZHVtcFZhbHVlcz1mdW5jdGlvbihvKXsKLXZhciBzPSIiOwotZm9yKHZhciBwcm9wIGluIG8pewotaWYod2luZG93LmNvbnNvbGUmJnR5cGVvZiB3aW5kb3cuY29uc29sZS5sb2c9PSJmdW5jdGlvbiIpewotaWYodHlwZW9mIGNvbnNvbGUuZmlyZWJ1ZyE9InVuZGVmaW5lZCIpewotY29uc29sZS5sb2cobyk7Ci19ZWxzZXsKLWNvbnNvbGUubG9nKHByb3ArIiA9ICIrb1twcm9wXSsiXG4iKTsKLX0KLX1lbHNlewotcys9cHJvcCsiID0gIitvW3Byb3BdKyJcbiI7Ci19Ci19Ci1pZihzKXsKLWlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlcnJvcnMiKSl7Ci1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXJyb3JzIikudmFsdWUrPXM7Ci19ZWxzZXsKLXZhciB4PXdpbmRvdy5vcGVuKCIiLCJkZWJ1Z2dlciIpOwoteC5kb2N1bWVudC53cml0ZSgiPHByZT4iK3MrIjwvcHJlPiIpOwotfQotfQotfTsKLX0KLWlmKCFBcnJheS5wcm90b3R5cGUuY29udGFpbnMpewotQXJyYXkucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKF8yODgpewotdmFyIF8yODk9dGhpczsKLWZvcih2YXIgaT0wO2k8XzI4OS5sZW5ndGg7aSsrKXsKLWlmKF8yODg9PV8yODlbaV0pewotcmV0dXJuIHRydWU7Ci19Ci19Ci1yZXR1cm4gZmFsc2U7Ci19OwotfQotaWYoIUFycmF5LnByb3RvdHlwZS5pbmRleE9mKXsKLUFycmF5LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKF8yOGIpewotdmFyIF8yOGM9dGhpczsKLWZvcih2YXIgaT0wO2k8XzI4Yy5sZW5ndGg7aSsrKXsKLWlmKF8yOGI9PV8yOGNbaV0pewotcmV0dXJuIGk7Ci19Ci19Ci1yZXR1cm4gbnVsbDsKLX07Ci19Ci1pZighQXJyYXkucHJvdG90eXBlLmFwcGVuZCl7Ci1BcnJheS5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGEpewotZm9yKHZhciBpPTA7aTxhLmxlbmd0aDtpKyspewotdGhpcy5wdXNoKGFbaV0pOwotfQotcmV0dXJuIHRoaXM7Ci19OwotfQotaWYoIUFycmF5LnByb3RvdHlwZS5mb3JFYWNoKXsKLUFycmF5LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGZuKXsKLXZhciBsZW49dGhpcy5sZW5ndGg7Ci1pZih0eXBlb2YgZm4hPSJmdW5jdGlvbiIpewotdGhyb3cgbmV3IFR5cGVFcnJvcigpOwotfQotdmFyIF8yOTI9YXJndW1lbnRzWzFdOwotZm9yKHZhciBpPTA7aTxsZW47aSsrKXsKLWlmKGkgaW4gdGhpcyl7Ci1mbi5jYWxsKF8yOTIsdGhpc1tpXSxpLHRoaXMpOwotfQotfQotfTsKLX0KLVhpbmhhLmdldEVsZW1lbnRzQnlDbGFzc05hbWU9ZnVuY3Rpb24oZWwsXzI5NSl7Ci1pZihlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXsKLXJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKF8yOTUpKTsKLX1lbHNlewotdmFyIGVscz1lbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOwotdmFyIF8yOTc9W107Ci12YXIgXzI5ODsKLWZvcih2YXIgaT0wO2k8ZWxzLmxlbmd0aDtpKyspewotXzI5OD1lbHNbaV0uY2xhc3NOYW1lLnNwbGl0KCIgIik7Ci1pZihfMjk4LmNvbnRhaW5zKF8yOTUpKXsKLV8yOTcucHVzaChlbHNbaV0pOwotfQotfQotcmV0dXJuIF8yOTc7Ci19Ci19OwotWGluaGEuYXJyYXlDb250YWluc0FycmF5PWZ1bmN0aW9uKGExLGEyKXsKLXZhciBfMjljPXRydWU7Ci1mb3IodmFyIHg9MDt4PGEyLmxlbmd0aDt4KyspewotdmFyIF8yOWU9ZmFsc2U7Ci1mb3IodmFyIGk9MDtpPGExLmxlbmd0aDtpKyspewotaWYoYTFbaV09PWEyW3hdKXsKLV8yOWU9dHJ1ZTsKLWJyZWFrOwotfQotfQotaWYoIV8yOWUpewotXzI5Yz1mYWxzZTsKLWJyZWFrOwotfQotfQotcmV0dXJuIF8yOWM7Ci19OwotWGluaGEuYXJyYXlGaWx0ZXI9ZnVuY3Rpb24oYTEsXzJhMSl7Ci12YXIgXzJhMj1bXTsKLWZvcih2YXIgeD0wO3g8YTEubGVuZ3RoO3grKyl7Ci1pZihfMmExKGExW3hdKSl7Ci1fMmEyW18yYTIubGVuZ3RoXT1hMVt4XTsKLX0KLX0KLXJldHVybiBfMmEyOwotfTsKLVhpbmhhLmNvbGxlY3Rpb25Ub0FycmF5PWZ1bmN0aW9uKF8yYTQpewotdHJ5ewotcmV0dXJuIF8yYTQubGVuZ3RoP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKF8yYTQpOltdOwotfQotY2F0Y2goZSl7Ci19Ci12YXIgXzJhNT1bXTsKLWZvcih2YXIgaT0wO2k8XzJhNC5sZW5ndGg7aSsrKXsKLV8yYTUucHVzaChfMmE0Lml0ZW0oaSkpOwotfQotcmV0dXJuIF8yYTU7Ci19OwotWGluaGEudW5pcV9jb3VudD0wOwotWGluaGEudW5pcT1mdW5jdGlvbihfMmE3KXsKLXJldHVybiBfMmE3K1hpbmhhLnVuaXFfY291bnQrKzsKLX07Ci1YaW5oYS5fbG9hZGxhbmc9ZnVuY3Rpb24oXzJhOCx1cmwpewotdmFyIGxhbmc7Ci1pZih0eXBlb2YgX2VkaXRvcl9sY2JhY2tlbmQ9PSJzdHJpbmciKXsKLXVybD1fZWRpdG9yX2xjYmFja2VuZDsKLXVybD11cmwucmVwbGFjZSgvJWxhbmclLyxfZWRpdG9yX2xhbmcpOwotdXJsPXVybC5yZXBsYWNlKC8lY29udGV4dCUvLF8yYTgpOwotfWVsc2V7Ci1pZighdXJsKXsKLWlmKF8yYTghPSJYaW5oYSIpewotdXJsPVhpbmhhLmdldFBsdWdpbkRpcihfMmE4KSsiL2xhbmcvIitfZWRpdG9yX2xhbmcrIi5qcyI7Ci19ZWxzZXsKLVhpbmhhLnNldExvYWRpbmdNZXNzYWdlKCJMb2FkaW5nIGxhbmd1YWdlIik7Ci11cmw9X2VkaXRvcl91cmwrImxhbmcvIitfZWRpdG9yX2xhbmcrIi5qcyI7Ci19Ci19Ci19Ci12YXIgXzJhYj1YaW5oYS5fZ2V0dXJsY29udGVudCh1cmwpOwotaWYoXzJhYiE9PSIiKXsKLXRyeXsKLWV2YWwoImxhbmcgPSAiK18yYWIpOwotfQotY2F0Y2goZXgpewotYWxlcnQoIkVycm9yIHJlYWRpbmcgTGFuZ3VhZ2UtRmlsZSAoIit1cmwrIik6XG4iK0Vycm9yLnRvU3RyaW5nKCkpOwotbGFuZz17fTsKLX0KLX1lbHNlewotbGFuZz17fTsKLX0KLXJldHVybiBsYW5nOwotfTsKLVhpbmhhLl9sYz1mdW5jdGlvbihfMmFjLF8yYWQsXzJhZSl7Ci12YXIgdXJsLHJldDsKLWlmKHR5cGVvZiBfMmFkPT0ib2JqZWN0IiYmXzJhZC51cmwmJl8yYWQuY29udGV4dCl7Ci11cmw9XzJhZC51cmwrX2VkaXRvcl9sYW5nKyIuanMiOwotXzJhZD1fMmFkLmNvbnRleHQ7Ci19Ci12YXIgbT1udWxsOwotaWYodHlwZW9mIF8yYWM9PSJzdHJpbmciKXsKLW09XzJhYy5tYXRjaCgvXCQoLio/KT0oLio/KVwkL2cpOwotfQotaWYobSl7Ci1pZighXzJhZSl7Ci1fMmFlPXt9OwotfQotZm9yKHZhciBpPTA7aTxtLmxlbmd0aDtpKyspewotdmFyIG49bVtpXS5tYXRjaCgvXCQoLio/KT0oLio/KVwkLyk7Ci1fMmFlW25bMV1dPW5bMl07Ci1fMmFjPV8yYWMucmVwbGFjZShuWzBdLCIkIituWzFdKTsKLX0KLX0KLWlmKF9lZGl0b3JfbGFuZz09ImVuIil7Ci1pZih0eXBlb2YgXzJhYz09Im9iamVjdCImJl8yYWMuc3RyaW5nKXsKLXJldD1fMmFjLnN0cmluZzsKLX1lbHNlewotcmV0PV8yYWM7Ci19Ci19ZWxzZXsKLWlmKHR5cGVvZiBYaW5oYS5fbGNfY2F0YWxvZz09InVuZGVmaW5lZCIpewotWGluaGEuX2xjX2NhdGFsb2c9W107Ci19Ci1pZih0eXBlb2YgXzJhZD09InVuZGVmaW5lZCIpewotXzJhZD0iWGluaGEiOwotfQotaWYodHlwZW9mIFhpbmhhLl9sY19jYXRhbG9nW18yYWRdPT0idW5kZWZpbmVkIil7Ci1YaW5oYS5fbGNfY2F0YWxvZ1tfMmFkXT1YaW5oYS5fbG9hZGxhbmcoXzJhZCx1cmwpOwotfQotdmFyIGtleTsKLWlmKHR5cGVvZiBfMmFjPT0ib2JqZWN0IiYmXzJhYy5rZXkpewota2V5PV8yYWMua2V5OwotfWVsc2V7Ci1pZih0eXBlb2YgXzJhYz09Im9iamVjdCImJl8yYWMuc3RyaW5nKXsKLWtleT1fMmFjLnN0cmluZzsKLX1lbHNlewota2V5PV8yYWM7Ci19Ci19Ci1pZih0eXBlb2YgWGluaGEuX2xjX2NhdGFsb2dbXzJhZF1ba2V5XT09InVuZGVmaW5lZCIpewotaWYoXzJhZD09IlhpbmhhIil7Ci1pZih0eXBlb2YgXzJhYz09Im9iamVjdCImJl8yYWMuc3RyaW5nKXsKLXJldD1fMmFjLnN0cmluZzsKLX1lbHNlewotcmV0PV8yYWM7Ci19Ci19ZWxzZXsKLXJldHVybiBYaW5oYS5fbGMoXzJhYywiWGluaGEiLF8yYWUpOwotfQotfWVsc2V7Ci1yZXQ9WGluaGEuX2xjX2NhdGFsb2dbXzJhZF1ba2V5XTsKLX0KLX0KLWlmKHR5cGVvZiBfMmFjPT0ib2JqZWN0IiYmXzJhYy5yZXBsYWNlKXsKLV8yYWU9XzJhYy5yZXBsYWNlOwotfQotaWYodHlwZW9mIF8yYWUhPSJ1bmRlZmluZWQiKXsKLWZvcihpIGluIF8yYWUpewotcmV0PXJldC5yZXBsYWNlKCIkIitpLF8yYWVbaV0pOwotfQotfQotcmV0dXJuIHJldDsKLX07Ci1YaW5oYS5oYXNEaXNwbGF5ZWRDaGlsZHJlbj1mdW5jdGlvbihlbCl7Ci12YXIgXzJiNj1lbC5jaGlsZE5vZGVzOwotZm9yKHZhciBpPTA7aTxfMmI2Lmxlbmd0aDtpKyspewotaWYoXzJiNltpXS50YWdOYW1lKXsKLWlmKF8yYjZbaV0uc3R5bGUuZGlzcGxheSE9Im5vbmUiKXsKLXJldHVybiB0cnVlOwotfQotfQotfQotcmV0dXJuIGZhbHNlOwotfTsKLVhpbmhhLl9sb2FkYmFjaz1mdW5jdGlvbih1cmwsXzJiOSxfMmJhLF8yYmIpewotaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodXJsKSl7Ci1yZXR1cm4gdHJ1ZTsKLX0KLXZhciB0PSFYaW5oYS5pc19pZT8ib25sb2FkIjoib25yZWFkeXN0YXRlY2hhbmdlIjsKLXZhciBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwotcy50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiOwotcy5zcmM9dXJsOwotcy5pZD11cmw7Ci1pZihfMmI5KXsKLXNbdF09ZnVuY3Rpb24oKXsKLWlmKFhpbmhhLmlzX2llJiYoIS9sb2FkZWR8Y29tcGxldGUvLnRlc3Qod2luZG93LmV2ZW50LnNyY0VsZW1lbnQucmVhZHlTdGF0ZSkpKXsKLXJldHVybjsKLX0KLV8yYjkuY2FsbChfMmJhP18yYmE6dGhpcyxfMmJiKTsKLXNbdF09bnVsbDsKLX07Ci19Ci1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKHMpOwotcmV0dXJuIGZhbHNlOwotfTsKLVhpbmhhLm1ha2VFZGl0b3JzPWZ1bmN0aW9uKF8yYmUsXzJiZixfMmMwKXsKLWlmKCFYaW5oYS5pc1N1cHBvcnRlZEJyb3dzZXIpewotcmV0dXJuOwotfQotaWYodHlwZW9mIF8yYmY9PSJmdW5jdGlvbiIpewotXzJiZj1fMmJmKCk7Ci19Ci12YXIgXzJjMT17fTsKLXZhciBfMmMyOwotZm9yKHZhciB4PTA7eDxfMmJlLmxlbmd0aDt4KyspewotaWYodHlwZW9mIF8yYmVbeF09PSJzdHJpbmciKXsKLV8yYzI9WGluaGEuZ2V0RWxlbWVudEJ5SWQoInRleHRhcmVhIixfMmJlW3hdKTsKLWlmKCFfMmMyKXsKLV8yYmVbeF09bnVsbDsKLWNvbnRpbnVlOwotfQotfWVsc2V7Ci1pZih0eXBlb2YgXzJiZVt4XT09Im9iamVjdCImJl8yYmVbeF0udGFnTmFtZSYmXzJiZVt4XS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJ0ZXh0YXJlYSIpewotXzJjMj1fMmJlW3hdOwotaWYoIV8yYzIuaWQpewotXzJjMi5pZD0ieGluaGFfaWRfIit4OwotfQotfQotfQotdmFyIF8yYzQ9bmV3IFhpbmhhKF8yYzIsWGluaGEuY2xvbmVPYmplY3QoXzJiZikpOwotXzJjNC5yZWdpc3RlclBsdWdpbnMoXzJjMCk7Ci1fMmMxW18yYzIuaWRdPV8yYzQ7Ci19Ci1yZXR1cm4gXzJjMTsKLX07Ci1YaW5oYS5zdGFydEVkaXRvcnM9ZnVuY3Rpb24oXzJjNSl7Ci1pZighWGluaGEuaXNTdXBwb3J0ZWRCcm93c2VyKXsKLXJldHVybjsKLX0KLWZvcih2YXIgaSBpbiBfMmM1KXsKLWlmKF8yYzVbaV0uZ2VuZXJhdGUpewotXzJjNVtpXS5nZW5lcmF0ZSgpOwotfQotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbnM9ZnVuY3Rpb24oXzJjNyl7Ci1pZighWGluaGEuaXNTdXBwb3J0ZWRCcm93c2VyKXsKLXJldHVybjsKLX0KLWlmKF8yYzcpewotZm9yKHZhciBpPTA7aTxfMmM3Lmxlbmd0aDtpKyspewotdGhpcy5zZXRMb2FkaW5nTWVzc2FnZShYaW5oYS5fbGMoIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIiwiWGluaGEiLHsicGx1Z2luIjpfMmM3W2ldfSkpOwotdGhpcy5yZWdpc3RlclBsdWdpbihfMmM3W2ldKTsKLX0KLX0KLX07Ci1YaW5oYS5iYXNlNjRfZW5jb2RlPWZ1bmN0aW9uKF8yYzkpewotdmFyIF8yY2E9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89IjsKLXZhciBfMmNiPSIiOwotdmFyIGNocjEsY2hyMixjaHIzOwotdmFyIGVuYzEsZW5jMixlbmMzLGVuYzQ7Ci12YXIgaT0wOwotZG97Ci1jaHIxPV8yYzkuY2hhckNvZGVBdChpKyspOwotY2hyMj1fMmM5LmNoYXJDb2RlQXQoaSsrKTsKLWNocjM9XzJjOS5jaGFyQ29kZUF0KGkrKyk7Ci1lbmMxPWNocjE+PjI7Ci1lbmMyPSgoY2hyMSYzKTw8NCl8KGNocjI+PjQpOwotZW5jMz0oKGNocjImMTUpPDwyKXwoY2hyMz4+Nik7Ci1lbmM0PWNocjMmNjM7Ci1pZihpc05hTihjaHIyKSl7Ci1lbmMzPWVuYzQ9NjQ7Ci19ZWxzZXsKLWlmKGlzTmFOKGNocjMpKXsKLWVuYzQ9NjQ7Ci19Ci19Ci1fMmNiPV8yY2IrXzJjYS5jaGFyQXQoZW5jMSkrXzJjYS5jaGFyQXQoZW5jMikrXzJjYS5jaGFyQXQoZW5jMykrXzJjYS5jaGFyQXQoZW5jNCk7Ci19d2hpbGUoaTxfMmM5Lmxlbmd0aCk7Ci1yZXR1cm4gXzJjYjsKLX07Ci1YaW5oYS5iYXNlNjRfZGVjb2RlPWZ1bmN0aW9uKF8yZDQpewotdmFyIF8yZDU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89IjsKLXZhciBfMmQ2PSIiOwotdmFyIGNocjEsY2hyMixjaHIzOwotdmFyIGVuYzEsZW5jMixlbmMzLGVuYzQ7Ci12YXIgaT0wOwotXzJkND1fMmQ0LnJlcGxhY2UoL1teQS1aYS16MC05XCtcL1w9XS9nLCIiKTsKLWRvewotZW5jMT1fMmQ1LmluZGV4T2YoXzJkNC5jaGFyQXQoaSsrKSk7Ci1lbmMyPV8yZDUuaW5kZXhPZihfMmQ0LmNoYXJBdChpKyspKTsKLWVuYzM9XzJkNS5pbmRleE9mKF8yZDQuY2hhckF0KGkrKykpOwotZW5jND1fMmQ1LmluZGV4T2YoXzJkNC5jaGFyQXQoaSsrKSk7Ci1jaHIxPShlbmMxPDwyKXwoZW5jMj4+NCk7Ci1jaHIyPSgoZW5jMiYxNSk8PDQpfChlbmMzPj4yKTsKLWNocjM9KChlbmMzJjMpPDw2KXxlbmM0OwotXzJkNj1fMmQ2K1N0cmluZy5mcm9tQ2hhckNvZGUoY2hyMSk7Ci1pZihlbmMzIT02NCl7Ci1fMmQ2PV8yZDYrU3RyaW5nLmZyb21DaGFyQ29kZShjaHIyKTsKLX0KLWlmKGVuYzQhPTY0KXsKLV8yZDY9XzJkNitTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjMpOwotfQotfXdoaWxlKGk8XzJkNC5sZW5ndGgpOwotcmV0dXJuIF8yZDY7Ci19OwotWGluaGEucmVtb3ZlRnJvbVBhcmVudD1mdW5jdGlvbihlbCl7Ci1pZighZWwucGFyZW50Tm9kZSl7Ci1yZXR1cm47Ci19Ci12YXIgcE49ZWwucGFyZW50Tm9kZTsKLXJldHVybiBwTi5yZW1vdmVDaGlsZChlbCk7Ci19OwotWGluaGEuaGFzUGFyZW50Tm9kZT1mdW5jdGlvbihlbCl7Ci1pZihlbC5wYXJlbnROb2RlKXsKLWlmKGVsLnBhcmVudE5vZGUubm9kZVR5cGU9PTExKXsKLXJldHVybiBmYWxzZTsKLX0KLXJldHVybiB0cnVlOwotfQotcmV0dXJuIGZhbHNlOwotfTsKLVhpbmhhLnZpZXdwb3J0U2l6ZT1mdW5jdGlvbihfMmUyKXsKLV8yZTI9KF8yZTIpP18yZTI6d2luZG93OwotdmFyIHgseTsKLWlmKF8yZTIuaW5uZXJIZWlnaHQpewoteD1fMmUyLmlubmVyV2lkdGg7Ci15PV8yZTIuaW5uZXJIZWlnaHQ7Ci19ZWxzZXsKLWlmKF8yZTIuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZfMmUyLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpewoteD1fMmUyLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDsKLXk9XzJlMi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OwotfWVsc2V7Ci1pZihfMmUyLmRvY3VtZW50LmJvZHkpewoteD1fMmUyLmRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7Ci15PV8yZTIuZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQ7Ci19Ci19Ci19Ci1yZXR1cm4geyJ4Ijp4LCJ5Ijp5fTsKLX07Ci1YaW5oYS5wYWdlU2l6ZT1mdW5jdGlvbihfMmU1KXsKLV8yZTU9KF8yZTUpP18yZTU6d2luZG93OwotdmFyIHgseTsKLXZhciBfMmU4PV8yZTUuZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ7Ci12YXIgXzJlOT1fMmU1LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQ7Ci1pZihfMmU4Pl8yZTkpewoteD1fMmU1LmRvY3VtZW50LmJvZHkuc2Nyb2xsV2lkdGg7Ci15PV8yZTUuZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ7Ci19ZWxzZXsKLXg9XzJlNS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsV2lkdGg7Ci15PV8yZTUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodDsKLX0KLXJldHVybiB7IngiOngsInkiOnl9OwotfTsKLVhpbmhhLnByb3RvdHlwZS5zY3JvbGxQb3M9ZnVuY3Rpb24oXzJlYSl7Ci1fMmVhPShfMmVhKT9fMmVhOndpbmRvdzsKLXZhciB4LHk7Ci1pZih0eXBlb2YgXzJlYS5wYWdlWU9mZnNldCE9InVuZGVmaW5lZCIpewoteD1fMmVhLnBhZ2VYT2Zmc2V0OwoteT1fMmVhLnBhZ2VZT2Zmc2V0OwotfWVsc2V7Ci1pZihfMmVhLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmdHlwZW9mIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AhPSJ1bmRlZmluZWQiKXsKLXg9XzJlYS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDsKLXk9XzJlYS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wOwotfWVsc2V7Ci1pZihfMmVhLmRvY3VtZW50LmJvZHkpewoteD1fMmVhLmRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdDsKLXk9XzJlYS5kb2N1bWVudC5ib2R5LnNjcm9sbFRvcDsKLX0KLX0KLX0KLXJldHVybiB7IngiOngsInkiOnl9OwotfTsKLVhpbmhhLmdldEVsZW1lbnRUb3BMZWZ0PWZ1bmN0aW9uKF8yZWQpewotdmFyIF8yZWU9MDsKLXZhciBfMmVmPTA7Ci1pZihfMmVkLm9mZnNldFBhcmVudCl7Ci1fMmVlPV8yZWQub2Zmc2V0TGVmdDsKLV8yZWY9XzJlZC5vZmZzZXRUb3A7Ci13aGlsZShfMmVkPV8yZWQub2Zmc2V0UGFyZW50KXsKLV8yZWUrPV8yZWQub2Zmc2V0TGVmdDsKLV8yZWYrPV8yZWQub2Zmc2V0VG9wOwotfQotfQotcmV0dXJuIHt0b3A6XzJlZixsZWZ0Ol8yZWV9OwotfTsKLVhpbmhhLmZpbmRQb3NYPWZ1bmN0aW9uKG9iail7Ci12YXIgXzJmMT0wOwotaWYob2JqLm9mZnNldFBhcmVudCl7Ci1yZXR1cm4gWGluaGEuZ2V0RWxlbWVudFRvcExlZnQob2JqKS5sZWZ0OwotfWVsc2V7Ci1pZihvYmoueCl7Ci1fMmYxKz1vYmoueDsKLX0KLX0KLXJldHVybiBfMmYxOwotfTsKLVhpbmhhLmZpbmRQb3NZPWZ1bmN0aW9uKG9iail7Ci12YXIgXzJmMz0wOwotaWYob2JqLm9mZnNldFBhcmVudCl7Ci1yZXR1cm4gWGluaGEuZ2V0RWxlbWVudFRvcExlZnQob2JqKS50b3A7Ci19ZWxzZXsKLWlmKG9iai55KXsKLV8yZjMrPW9iai55OwotfQotfQotcmV0dXJuIF8yZjM7Ci19OwotWGluaGEuY3JlYXRlTG9hZGluZ01lc3NhZ2VzPWZ1bmN0aW9uKF8yZjQpewotaWYoWGluaGEubG9hZGluZ01lc3NhZ2VzfHwhWGluaGEuaXNTdXBwb3J0ZWRCcm93c2VyKXsKLXJldHVybjsKLX0KLVhpbmhhLmxvYWRpbmdNZXNzYWdlcz1bXTsKLWZvcih2YXIgaT0wO2k8XzJmNC5sZW5ndGg7aSsrKXsKLWlmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChfMmY0W2ldKSl7Ci1jb250aW51ZTsKLX0KLVhpbmhhLmxvYWRpbmdNZXNzYWdlcy5wdXNoKFhpbmhhLmNyZWF0ZUxvYWRpbmdNZXNzYWdlKFhpbmhhLmdldEVsZW1lbnRCeUlkKCJ0ZXh0YXJlYSIsXzJmNFtpXSkpKTsKLX0KLX07Ci1YaW5oYS5jcmVhdGVMb2FkaW5nTWVzc2FnZT1mdW5jdGlvbihfMmY2LHRleHQpewotaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmdfIitfMmY2LmlkKXx8IVhpbmhhLmlzU3VwcG9ydGVkQnJvd3Nlcil7Ci1yZXR1cm47Ci19Ci12YXIgXzJmOD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLV8yZjguaWQ9ImxvYWRpbmdfIitfMmY2LmlkOwotXzJmOC5jbGFzc05hbWU9ImxvYWRpbmciOwotXzJmOC5zdHlsZS5sZWZ0PShYaW5oYS5maW5kUG9zWChfMmY2KStfMmY2Lm9mZnNldFdpZHRoLzIpLTEwNisicHgiOwotXzJmOC5zdHlsZS50b3A9KFhpbmhhLmZpbmRQb3NZKF8yZjYpK18yZjYub2Zmc2V0SGVpZ2h0LzIpLTUwKyJweCI7Ci12YXIgXzJmOT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLV8yZjkuY2xhc3NOYW1lPSJsb2FkaW5nX21haW4iOwotXzJmOS5pZD0ibG9hZGluZ19tYWluXyIrXzJmNi5pZDsKLV8yZjkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoWGluaGEuX2xjKCJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiKSkpOwotdmFyIF8yZmE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci1fMmZhLmNsYXNzTmFtZT0ibG9hZGluZ19zdWIiOwotXzJmYS5pZD0ibG9hZGluZ19zdWJfIitfMmY2LmlkOwotdGV4dD10ZXh0P3RleHQ6WGluaGEuX2xjKCJMb2FkaW5nIENvcmUiKTsKLV8yZmEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpOwotXzJmOC5hcHBlbmRDaGlsZChfMmY5KTsKLV8yZjguYXBwZW5kQ2hpbGQoXzJmYSk7Ci1kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKF8yZjgpOwotWGluaGEuZnJlZUxhdGVyKF8yZjgpOwotWGluaGEuZnJlZUxhdGVyKF8yZjkpOwotWGluaGEuZnJlZUxhdGVyKF8yZmEpOwotcmV0dXJuIF8yZmE7Ci19OwotWGluaGEucHJvdG90eXBlLnNldExvYWRpbmdNZXNzYWdlPWZ1bmN0aW9uKF8yZmIsXzJmYyl7Ci1pZighZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmdfc3ViXyIrdGhpcy5fdGV4dEFyZWEuaWQpKXsKLXJldHVybjsKLX0KLWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkaW5nX21haW5fIit0aGlzLl90ZXh0QXJlYS5pZCkuaW5uZXJIVE1MPV8yZmM/XzJmYzpYaW5oYS5fbGMoIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ISIpOwotZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmdfc3ViXyIrdGhpcy5fdGV4dEFyZWEuaWQpLmlubmVySFRNTD1fMmZiOwotfTsKLVhpbmhhLnNldExvYWRpbmdNZXNzYWdlPWZ1bmN0aW9uKF8yZmQpewotaWYoIVhpbmhhLmxvYWRpbmdNZXNzYWdlcyl7Ci1yZXR1cm47Ci19Ci1mb3IodmFyIGk9MDtpPFhpbmhhLmxvYWRpbmdNZXNzYWdlcy5sZW5ndGg7aSsrKXsKLVhpbmhhLmxvYWRpbmdNZXNzYWdlc1tpXS5pbm5lckhUTUw9XzJmZDsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUucmVtb3ZlTG9hZGluZ01lc3NhZ2U9ZnVuY3Rpb24oKXsKLWlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkaW5nXyIrdGhpcy5fdGV4dEFyZWEuaWQpKXsKLWRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmdfIit0aGlzLl90ZXh0QXJlYS5pZCkpOwotfQotfTsKLVhpbmhhLnJlbW92ZUxvYWRpbmdNZXNzYWdlcz1mdW5jdGlvbihfMmZmKXsKLWZvcih2YXIgaT0wO2k8XzJmZi5sZW5ndGg7aSsrKXsKLWlmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChfMmZmW2ldKSl7Ci1jb250aW51ZTsKLX0KLXZhciBtYWluPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkaW5nXyIrZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXzJmZltpXSkuaWQpOwotbWFpbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG1haW4pOwotfQotWGluaGEubG9hZGluZ01lc3NhZ2VzPW51bGw7Ci19OwotWGluaGEudG9GcmVlPVtdOwotWGluaGEuZnJlZUxhdGVyPWZ1bmN0aW9uKG9iaixwcm9wKXsKLVhpbmhhLnRvRnJlZS5wdXNoKHtvOm9iaixwOnByb3B9KTsKLX07Ci1YaW5oYS5mcmVlPWZ1bmN0aW9uKG9iaixwcm9wKXsKLWlmKG9iaiYmIXByb3ApewotZm9yKHZhciBwIGluIG9iail7Ci1YaW5oYS5mcmVlKG9iaixwKTsKLX0KLX1lbHNlewotaWYob2JqKXsKLWlmKHByb3AuaW5kZXhPZigic3JjIik9PS0xKXsKLXRyeXsKLW9ialtwcm9wXT1udWxsOwotfQotY2F0Y2goeCl7Ci19Ci19Ci19Ci19Ci19OwotWGluaGEuY29sbGVjdEdhcmJhZ2VGb3JJRT1mdW5jdGlvbigpewotWGluaGEuZmx1c2hFdmVudHMoKTsKLWZvcih2YXIgeD0wO3g8WGluaGEudG9GcmVlLmxlbmd0aDt4KyspewotWGluaGEuZnJlZShYaW5oYS50b0ZyZWVbeF0ubyxYaW5oYS50b0ZyZWVbeF0ucCk7Ci1YaW5oYS50b0ZyZWVbeF0ubz1udWxsOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5pbnNlcnROb2RlQXRTZWxlY3Rpb249ZnVuY3Rpb24oXzMwOCl7Ci1YaW5oYS5ub3RJbXBsZW1lbnRlZCgiaW5zZXJ0Tm9kZUF0U2VsZWN0aW9uIik7Ci19OwotWGluaGEucHJvdG90eXBlLmdldFBhcmVudEVsZW1lbnQ9ZnVuY3Rpb24oc2VsKXsKLVhpbmhhLm5vdEltcGxlbWVudGVkKCJnZXRQYXJlbnRFbGVtZW50Iik7Ci19OwotWGluaGEucHJvdG90eXBlLmFjdGl2ZUVsZW1lbnQ9ZnVuY3Rpb24oc2VsKXsKLVhpbmhhLm5vdEltcGxlbWVudGVkKCJhY3RpdmVFbGVtZW50Iik7Ci19OwotWGluaGEucHJvdG90eXBlLnNlbGVjdGlvbkVtcHR5PWZ1bmN0aW9uKHNlbCl7Ci1YaW5oYS5ub3RJbXBsZW1lbnRlZCgic2VsZWN0aW9uRW1wdHkiKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuc2F2ZVNlbGVjdGlvbj1mdW5jdGlvbigpewotWGluaGEubm90SW1wbGVtZW50ZWQoInNhdmVTZWxlY3Rpb24iKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUucmVzdG9yZVNlbGVjdGlvbj1mdW5jdGlvbihfMzBjKXsKLVhpbmhhLm5vdEltcGxlbWVudGVkKCJyZXN0b3JlU2VsZWN0aW9uIik7Ci19OwotWGluaGEucHJvdG90eXBlLnNlbGVjdE5vZGVDb250ZW50cz1mdW5jdGlvbihub2RlLHBvcyl7Ci1YaW5oYS5ub3RJbXBsZW1lbnRlZCgic2VsZWN0Tm9kZUNvbnRlbnRzIik7Ci19OwotWGluaGEucHJvdG90eXBlLmluc2VydEhUTUw9ZnVuY3Rpb24oaHRtbCl7Ci1YaW5oYS5ub3RJbXBsZW1lbnRlZCgiaW5zZXJ0SFRNTCIpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5nZXRTZWxlY3RlZEhUTUw9ZnVuY3Rpb24oKXsKLVhpbmhhLm5vdEltcGxlbWVudGVkKCJnZXRTZWxlY3RlZEhUTUwiKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uPWZ1bmN0aW9uKCl7Ci1YaW5oYS5ub3RJbXBsZW1lbnRlZCgiZ2V0U2VsZWN0aW9uIik7Ci19OwotWGluaGEucHJvdG90eXBlLmNyZWF0ZVJhbmdlPWZ1bmN0aW9uKHNlbCl7Ci1YaW5oYS5ub3RJbXBsZW1lbnRlZCgiY3JlYXRlUmFuZ2UiKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuaXNLZXlFdmVudD1mdW5jdGlvbihfMzExKXsKLVhpbmhhLm5vdEltcGxlbWVudGVkKCJpc0tleUV2ZW50Iik7Ci19OwotWGluaGEucHJvdG90eXBlLmlzU2hvcnRDdXQ9ZnVuY3Rpb24oXzMxMil7Ci1pZihfMzEyLmN0cmxLZXkmJiFfMzEyLmFsdEtleSl7Ci1yZXR1cm4gdHJ1ZTsKLX0KLXJldHVybiBmYWxzZTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0S2V5PWZ1bmN0aW9uKF8zMTMpewotWGluaGEubm90SW1wbGVtZW50ZWQoImdldEtleSIpOwotfTsKLVhpbmhhLmdldE91dGVySFRNTD1mdW5jdGlvbihfMzE0KXsKLVhpbmhhLm5vdEltcGxlbWVudGVkKCJnZXRPdXRlckhUTUwiKTsKLX07Ci1YaW5oYS5nZXRYTUxIVFRQUmVxdWVzdE9iamVjdD1mdW5jdGlvbigpewotdHJ5ewotaWYodHlwZW9mIFhNTEh0dHBSZXF1ZXN0IT0idW5kZWZpbmVkIiYmdHlwZW9mIFhNTEh0dHBSZXF1ZXN0LmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iKXsKLXJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKLX1lbHNlewotaWYodHlwZW9mIEFjdGl2ZVhPYmplY3Q9PSJmdW5jdGlvbiIpewotcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpOwotfQotfQotfQotY2F0Y2goZSl7Ci1YaW5oYS5ub3RJbXBsZW1lbnRlZCgiZ2V0WE1MSFRUUFJlcXVlc3RPYmplY3QiKTsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuX2FjdGl2ZUVsZW1lbnQ9ZnVuY3Rpb24oc2VsKXsKLXJldHVybiB0aGlzLmFjdGl2ZUVsZW1lbnQoc2VsKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuX3NlbGVjdGlvbkVtcHR5PWZ1bmN0aW9uKHNlbCl7Ci1yZXR1cm4gdGhpcy5zZWxlY3Rpb25FbXB0eShzZWwpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5fZ2V0U2VsZWN0aW9uPWZ1bmN0aW9uKCl7Ci1yZXR1cm4gdGhpcy5nZXRTZWxlY3Rpb24oKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuX2NyZWF0ZVJhbmdlPWZ1bmN0aW9uKHNlbCl7Ci1yZXR1cm4gdGhpcy5jcmVhdGVSYW5nZShzZWwpOwotfTsKLUhUTUxBcmVhPVhpbmhhOwotWGluaGEuaW5pdCgpOwotaWYoWGluaGEuaWVfdmVyc2lvbjw4KXsKLVhpbmhhLmFkZERvbTBFdmVudCh3aW5kb3csInVubG9hZCIsWGluaGEuY29sbGVjdEdhcmJhZ2VGb3JJRSk7Ci19Ci1YaW5oYS5kZWJ1Z01zZz1mdW5jdGlvbih0ZXh0LF8zMTkpewotaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiJiZ0eXBlb2YgY29uc29sZS5sb2c9PSJmdW5jdGlvbiIpewotaWYoXzMxOSYmXzMxOT09Indhcm4iJiZ0eXBlb2YgY29uc29sZS53YXJuPT0iZnVuY3Rpb24iKXsKLWNvbnNvbGUud2Fybih0ZXh0KTsKLX1lbHNlewotaWYoXzMxOSYmXzMxOT09ImluZm8iJiZ0eXBlb2YgY29uc29sZS5pbmZvPT0iZnVuY3Rpb24iKXsKLWNvbnNvbGUuaW5mbyh0ZXh0KTsKLX1lbHNlewotY29uc29sZS5sb2codGV4dCk7Ci19Ci19Ci19ZWxzZXsKLWlmKHR5cGVvZiBvcGVyYSE9InVuZGVmaW5lZCImJnR5cGVvZiBvcGVyYS5wb3N0RXJyb3I9PSJmdW5jdGlvbiIpewotb3BlcmEucG9zdEVycm9yKHRleHQpOwotfQotfQotfTsKLVhpbmhhLm5vdEltcGxlbWVudGVkPWZ1bmN0aW9uKF8zMWEpewotdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgTm90IEltcGxlbWVudGVkIiwiUGFydCBvZiBYaW5oYSBoYXMgdHJpZWQgdG8gY2FsbCB0aGUgIitfMzFhKyIgbWV0aG9kIHdoaWNoIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZC4iKTsKLX07Ci0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9YaW5oYUxvYWRlci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9YaW5oYUxvYWRlci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOGM4MGE1Ny4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvWGluaGFMb2FkZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTMgKzAsMCBAQAotLyogVGhpcyBjb21wcmVzc2VkIGZpbGUgaXMgcGFydCBvZiBYaW5oYS4gRm9yIHVuY29tcHJlc3NlZCBzb3VyY2VzLCBmb3J1bSwgYW5kIGJ1ZyByZXBvcnRzLCBnbyB0byB4aW5oYS5vcmcgKi8KLS8qIFRoZSBVUkwgb2YgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGlzIGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL1hpbmhhTG9hZGVyLmpzICovCi12YXIgWGluaGE9e307Ci1pZighd2luZG93Ll9lZGl0b3JfdXJsKXsKLShmdW5jdGlvbigpewotdmFyIF8xPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTsKLXZhciBfMj1fMVtfMS5sZW5ndGgtMV07Ci12YXIgXzM9XzIuc3JjLnNwbGl0KCI/Iik7Ci1fMz1fMy5sZW5ndGg9PTI/XzNbMV0uc3BsaXQoIiYiKToiIjsKLWZvcih2YXIgXzQ9MDtfNDxfMy5sZW5ndGg7KytfNCl7Ci12YXIgXzU9XzNbXzRdLnNwbGl0KCI9Iik7Ci1pZihfNS5sZW5ndGg9PTIpewotc3dpdGNoKF81WzBdKXsKLWNhc2UgImxhbmciOgotY2FzZSAiaWNvbnMiOgotY2FzZSAic2tpbiI6Ci1jYXNlICJ1cmwiOgotd2luZG93WyJfZWRpdG9yXyIrXzVbMF1dPV81WzFdOwotYnJlYWs7Ci19Ci19Ci19Ci1pZihfMi5pbm5lckhUTUwucmVwbGFjZSgvXHMrLywiIikpewotZXZhbChfMi5pbm5lckhUTUwpOwotfQotX2VkaXRvcl9sYW5nPXdpbmRvdy5fZWRpdG9yX2xhbmd8fCJlbiI7Ci1fZWRpdG9yX3VybD13aW5kb3cuX2VkaXRvcl91cmx8fF8yLnNyYy5zcGxpdCgiPyIpWzBdLnNwbGl0KCIvIikuc2xpY2UoMCwtMSkuam9pbigiLyIpOwotfSkoKTsKLX0KLV9lZGl0b3JfdXJsPV9lZGl0b3JfdXJsLnJlcGxhY2UoL1x4MmYqJC8sIi8iKTsKLVhpbmhhLmFndD1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7Ci1YaW5oYS5pc19pZT0oKFhpbmhhLmFndC5pbmRleE9mKCJtc2llIikhPS0xKSYmKFhpbmhhLmFndC5pbmRleE9mKCJvcGVyYSIpPT0tMSkpOwotWGluaGEuaWVfdmVyc2lvbj1wYXJzZUZsb2F0KFhpbmhhLmFndC5zdWJzdHJpbmcoWGluaGEuYWd0LmluZGV4T2YoIm1zaWUiKSs1KSk7Ci1YaW5oYS5pc19vcGVyYT0oWGluaGEuYWd0LmluZGV4T2YoIm9wZXJhIikhPS0xKTsKLVhpbmhhLmlzX2todG1sPShYaW5oYS5hZ3QuaW5kZXhPZigia2h0bWwiKSE9LTEpOwotWGluaGEuaXNfd2Via2l0PShYaW5oYS5hZ3QuaW5kZXhPZigiYXBwbGV3ZWJraXQiKSE9LTEpOwotWGluaGEuaXNfc2FmYXJpPShYaW5oYS5hZ3QuaW5kZXhPZigic2FmYXJpIikhPS0xKTsKLVhpbmhhLm9wZXJhX3ZlcnNpb249bmF2aWdhdG9yLmFwcFZlcnNpb24uc3Vic3RyaW5nKDAsbmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZigiICIpKSoxOwotWGluaGEuaXNfbWFjPShYaW5oYS5hZ3QuaW5kZXhPZigibWFjIikhPS0xKTsKLVhpbmhhLmlzX21hY19pZT0oWGluaGEuaXNfaWUmJlhpbmhhLmlzX21hYyk7Ci1YaW5oYS5pc193aW5faWU9KFhpbmhhLmlzX2llJiYhWGluaGEuaXNfbWFjKTsKLVhpbmhhLmlzX2dlY2tvPShuYXZpZ2F0b3IucHJvZHVjdD09IkdlY2tvIiYmIVhpbmhhLmlzX3NhZmFyaSk7Ci1YaW5oYS5pc1J1bkxvY2FsbHk9ZG9jdW1lbnQuVVJMLnRvTG93ZXJDYXNlKCkuc2VhcmNoKC9eZmlsZTovKSE9LTE7Ci1YaW5oYS5pc19kZXNpZ25Nb2RlPSh0eXBlb2YgZG9jdW1lbnQuZGVzaWduTW9kZSE9InVuZGVmaW5lZCImJiFYaW5oYS5pc19pZSk7Ci1YaW5oYS5pc1N1cHBvcnRlZEJyb3dzZXI9WGluaGEuaXNfZ2Vja298fChYaW5oYS5pc19vcGVyYSYmWGluaGEub3BlcmFfdmVyc2lvbj49OS4xKXx8WGluaGEuaWVfdmVyc2lvbj49NS41fHxYaW5oYS5pc19zYWZhcmk7Ci1YaW5oYS5sb2FkUGx1Z2lucz1mdW5jdGlvbihfNixfNyl7Ci1pZighWGluaGEuaXNTdXBwb3J0ZWRCcm93c2VyKXsKLXJldHVybjsKLX0KLVhpbmhhLmxvYWRTdHlsZSh0eXBlb2YgX2VkaXRvcl9jc3M9PSJzdHJpbmciP19lZGl0b3JfY3NzOiJYaW5oYS5jc3MiLCJYaW5oYUNvcmVEZXNpZ24iKTsKLVhpbmhhLmNyZWF0ZUxvYWRpbmdNZXNzYWdlcyh4aW5oYV9lZGl0b3JzKTsKLXZhciBfOD1YaW5oYS5sb2FkaW5nTWVzc2FnZXM7Ci1YaW5oYS5fbG9hZGJhY2soX2VkaXRvcl91cmwrIlhpbmhhQ29yZS5qcyIsZnVuY3Rpb24oKXsKLVhpbmhhLnJlbW92ZUxvYWRpbmdNZXNzYWdlcyh4aW5oYV9lZGl0b3JzKTsKLVhpbmhhLmNyZWF0ZUxvYWRpbmdNZXNzYWdlcyh4aW5oYV9lZGl0b3JzKTsKLV83KCk7Ci19KTsKLXJldHVybiBmYWxzZTsKLX07Ci1YaW5oYS5fbG9hZGJhY2s9ZnVuY3Rpb24oXzksX2EsX2IsX2MpewotdmFyIFQ9IVhpbmhhLmlzX2llPyJvbmxvYWQiOiJvbnJlYWR5c3RhdGVjaGFuZ2UiOwotdmFyIFM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Ci1TLnR5cGU9InRleHQvamF2YXNjcmlwdCI7Ci1TLnNyYz1fOTsKLWlmKF9hKXsKLVNbVF09ZnVuY3Rpb24oKXsKLWlmKFhpbmhhLmlzX2llJiYoISgvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KHdpbmRvdy5ldmVudC5zcmNFbGVtZW50LnJlYWR5U3RhdGUpKSkpewotcmV0dXJuOwotfQotX2EuY2FsbChfYj9fYjp0aGlzLF9jKTsKLVNbVF09bnVsbDsKLX07Ci19Ci1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKFMpOwotfTsKLVhpbmhhLmdldEVsZW1lbnRUb3BMZWZ0PWZ1bmN0aW9uKF9mKXsKLXZhciBfMTA9MDsKLXZhciBfMTE9MDsKLWlmKF9mLm9mZnNldFBhcmVudCl7Ci1fMTA9X2Yub2Zmc2V0TGVmdDsKLV8xMT1fZi5vZmZzZXRUb3A7Ci13aGlsZShfZj1fZi5vZmZzZXRQYXJlbnQpewotXzEwKz1fZi5vZmZzZXRMZWZ0OwotXzExKz1fZi5vZmZzZXRUb3A7Ci19Ci19Ci1yZXR1cm4ge3RvcDpfMTEsbGVmdDpfMTB9OwotfTsKLVhpbmhhLmZpbmRQb3NYPWZ1bmN0aW9uKG9iail7Ci12YXIgXzEzPTA7Ci1pZihvYmoub2Zmc2V0UGFyZW50KXsKLXJldHVybiBYaW5oYS5nZXRFbGVtZW50VG9wTGVmdChvYmopLmxlZnQ7Ci19ZWxzZXsKLWlmKG9iai54KXsKLV8xMys9b2JqLng7Ci19Ci19Ci1yZXR1cm4gXzEzOwotfTsKLVhpbmhhLmZpbmRQb3NZPWZ1bmN0aW9uKG9iail7Ci12YXIgXzE1PTA7Ci1pZihvYmoub2Zmc2V0UGFyZW50KXsKLXJldHVybiBYaW5oYS5nZXRFbGVtZW50VG9wTGVmdChvYmopLnRvcDsKLX1lbHNlewotaWYob2JqLnkpewotXzE1Kz1vYmoueTsKLX0KLX0KLXJldHVybiBfMTU7Ci19OwotWGluaGEuY3JlYXRlTG9hZGluZ01lc3NhZ2VzPWZ1bmN0aW9uKF8xNil7Ci1pZihYaW5oYS5sb2FkaW5nTWVzc2FnZXN8fCFYaW5oYS5pc1N1cHBvcnRlZEJyb3dzZXIpewotcmV0dXJuOwotfQotWGluaGEubG9hZGluZ01lc3NhZ2VzPVtdOwotZm9yKHZhciBpPTA7aTxfMTYubGVuZ3RoO2krKyl7Ci1pZighZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXzE2W2ldKSl7Ci1jb250aW51ZTsKLX0KLVhpbmhhLmxvYWRpbmdNZXNzYWdlcy5wdXNoKFhpbmhhLmNyZWF0ZUxvYWRpbmdNZXNzYWdlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKF8xNltpXSkpKTsKLX0KLX07Ci1YaW5oYS5jcmVhdGVMb2FkaW5nTWVzc2FnZT1mdW5jdGlvbihfMTgsXzE5KXsKLWlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkaW5nXyIrXzE4LmlkKXx8IVhpbmhhLmlzU3VwcG9ydGVkQnJvd3Nlcil7Ci1yZXR1cm47Ci19Ci12YXIgXzFhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotXzFhLmlkPSJsb2FkaW5nXyIrXzE4LmlkOwotXzFhLmNsYXNzTmFtZT0ibG9hZGluZyI7Ci1fMWEuc3R5bGUubGVmdD0oWGluaGEuZmluZFBvc1goXzE4KStfMTgub2Zmc2V0V2lkdGgvMiktMTA2KyJweCI7Ci1fMWEuc3R5bGUudG9wPShYaW5oYS5maW5kUG9zWShfMTgpK18xOC5vZmZzZXRIZWlnaHQvMiktNTArInB4IjsKLXZhciBfMWI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci1fMWIuY2xhc3NOYW1lPSJsb2FkaW5nX21haW4iOwotXzFiLmlkPSJsb2FkaW5nX21haW5fIitfMTguaWQ7Ci1fMWIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoWGluaGEuX2xjKCJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiKSkpOwotdmFyIF8xYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLV8xYy5jbGFzc05hbWU9ImxvYWRpbmdfc3ViIjsKLV8xYy5pZD0ibG9hZGluZ19zdWJfIitfMTguaWQ7Ci1fMTk9XzE5P18xOTpYaW5oYS5fbGMoIkxvYWRpbmcgQ29yZSIpOwotXzFjLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKF8xOSkpOwotXzFhLmFwcGVuZENoaWxkKF8xYik7Ci1fMWEuYXBwZW5kQ2hpbGQoXzFjKTsKLWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoXzFhKTsKLXJldHVybiBfMWM7Ci19OwotWGluaGEubG9hZFN0eWxlPWZ1bmN0aW9uKF8xZCxpZCl7Ci12YXIgdXJsPV9lZGl0b3JfdXJsfHwiIjsKLXVybCs9XzFkOwotdmFyIF8yMD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdOwotdmFyIF8yMT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIik7Ci1fMjEucmVsPSJzdHlsZXNoZWV0IjsKLV8yMS5ocmVmPXVybDsKLWlmKGlkKXsKLV8yMS5pZD1pZDsKLX0KLV8yMC5hcHBlbmRDaGlsZChfMjEpOwotfTsKLVhpbmhhLl9sYz1mdW5jdGlvbihfMjIpewotcmV0dXJuIF8yMjsKLX07Ci1YaW5oYS5fYWRkRXZlbnQ9ZnVuY3Rpb24oZWwsXzI0LF8yNSl7Ci1pZihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKXsKLWVsLmFkZEV2ZW50TGlzdGVuZXIoXzI0LF8yNSx0cnVlKTsKLX1lbHNlewotZWwuYXR0YWNoRXZlbnQoIm9uIitfMjQsXzI1KTsKLX0KLX07Ci1YaW5oYS5hZGRPbmxvYWRIYW5kbGVyPWZ1bmN0aW9uKF8yNil7Ci12YXIgXzI3PWZ1bmN0aW9uKCl7Ci1pZihhcmd1bWVudHMuY2FsbGVlLmRvbmUpewotcmV0dXJuOwotfQotYXJndW1lbnRzLmNhbGxlZS5kb25lPXRydWU7Ci1pZihYaW5oYS5vbmxvYWRUaW1lcil7Ci1jbGVhckludGVydmFsKFhpbmhhLm9ubG9hZFRpbWVyKTsKLX0KLV8yNi5jYWxsKCk7Ci19OwotaWYoWGluaGEuaXNfaWUpewotZG9jdW1lbnQuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsZnVuY3Rpb24oKXsKLWlmKGRvY3VtZW50LnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKXsKLWRvY3VtZW50LmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLGFyZ3VtZW50cy5jYWxsZWUpOwotXzI3KCk7Ci19Ci19KTsKLWlmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCYmdHlwZW9mIHdpbmRvdy5mcmFtZUVsZW1lbnQ9PT0idW5kZWZpbmVkIil7Ci0oZnVuY3Rpb24oKXsKLWlmKGFyZ3VtZW50cy5jYWxsZWUuZG9uZSl7Ci1yZXR1cm47Ci19Ci10cnl7Ci1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwoImxlZnQiKTsKLX0KLWNhdGNoKGVycm9yKXsKLXNldFRpbWVvdXQoYXJndW1lbnRzLmNhbGxlZSwwKTsKLXJldHVybjsKLX0KLV8yNygpOwotfSkoKTsKLX0KLX1lbHNlewotaWYoL1dlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpewotWGluaGEub25sb2FkVGltZXI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKLWlmKC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZG9jdW1lbnQucmVhZHlTdGF0ZSkpewotXzI3KCk7Ci19Ci19LDEwKTsKLX1lbHNlewotZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsXzI3LGZhbHNlKTsKLX0KLX0KLX07Ci0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9jb21wcmVzc2lvbl9yZWFkbWUudHh0IGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2NvbXByZXNzaW9uX3JlYWRtZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhY2IwNGIuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2NvbXByZXNzaW9uX3JlYWRtZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLVlvdSBjYW4gdXNlIHRoZSBjb250cmliL2NvbXByZXNzLnBocCB0byBiYXRjaC1jb252ZXJ0IHRoZSBjdXJyZW50IFhpbmhhIHNuYXBzaG90LiBUbyB1c2UgdGhpcyBzY3JpcHQsIG9wZW4gaXQgaW4gYSB0ZXh0IGVkaXRvciwgY29tbWVudCBvdXQgdGhlIGRpZSgpIGNvbW1hbmQgYXQgdGhlIHRvcCBhbmQgb3BlbiBpdCBpbiB5b3VyIGJyb3dzZXIuDQotIA0KLVlvdSBjYW4gdXNlIHRoZSBjb250cmliL2NvbXByZXNzLmJhdCB0byBjb21wcmVzcyBKYXZhU2NyaXB0IGZpbGVzIGJ5IGRyYWcmZHJvcCBpbiBXaW5kb3dzLg0KLQ0KLVBsZWFzZSBiZSBhd2FyZSB0aGF0IHRoZSBsYW5ndWFnZSBmaWxlcyBjYW5ub3QgYmUgY29tcHJlc3NlZC4NCi0NCi1JZiB5b3Ugd2FudCB0aGUgb3JpZ2luYWwgZmlsZXMgdG8gYmUga2VwdCwgb3BlbiBjb21wcmVzcy5iYXQgYW5kIHJlbXZvdmUgdGhlICMgaW4gdGhlIGxpbmUNCi0jIEZPUiAlJVYgSU4gKCUqKSBETyBkZWwgJSVWX3VuY29tcHJlc3NlZC5qcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9odG1sYXJlYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9odG1sYXJlYS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk3ODFmNy4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaHRtbGFyZWEuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvaHRtbGFyZWEuanMgKi8KLWlmKHR5cGVvZiBfZWRpdG9yX3VybD09InN0cmluZyIpewotX2VkaXRvcl91cmw9X2VkaXRvcl91cmwucmVwbGFjZSgvXHgyZiokLywiLyIpOwotfWVsc2V7Ci1hbGVydCgiV0FSTklORzogX2VkaXRvcl91cmwgaXMgbm90IHNldCEgIFlvdSBzaG91bGQgc2V0IHRoaXMgdmFyaWFibGUgdG8gdGhlIGVkaXRvciBmaWxlcyBwYXRoOyBpdCBzaG91bGQgcHJlZmVyYWJseSBiZSBhbiBhYnNvbHV0ZSBwYXRoLCBsaWtlIGluICcvaHRtbGFyZWEvJywgYnV0IGl0IGNhbiBiZSByZWxhdGl2ZSBpZiB5b3UgcHJlZmVyLiAgRnVydGhlciB3ZSB3aWxsIHRyeSB0byBsb2FkIHRoZSBlZGl0b3IgZmlsZXMgY29ycmVjdGx5IGJ1dCB3ZSdsbCBwcm9iYWJseSBmYWlsLiIpOwotX2VkaXRvcl91cmw9IiI7Ci19Ci1kb2N1bWVudC53cml0ZSgiPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgc3JjPVwiIitfZWRpdG9yX3VybCsiWGluaGFDb3JlLmpzXCI+PC9zY3JpcHQ+Iik7Ci0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2I1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvYjUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NTBmNmUuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvYjUuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cyAtLSBVVEYtOAotLy8gYnkgRGF2ZSBMbyAtLSBkbG9AaW50ZXJhY3RpdmV0b29scy5jb20KLXsKLSAgIkJvbGQiOiAi57KX6auUIiwKLSAgIkl0YWxpYyI6ICLmlpzpq5QiLAotICAiVW5kZXJsaW5lIjogIuW6lee3miIsCi0gICJTdHJpa2V0aHJvdWdoIjogIuWIqumZpOe3miIsCi0gICJTdWJzY3JpcHQiOiAi5LiL5qiZIiwKLSAgIlN1cGVyc2NyaXB0IjogIuS4iuaomSIsCi0gICJKdXN0aWZ5IExlZnQiOiAi5L2N572u6Z2g5bemIiwKLSAgIkp1c3RpZnkgQ2VudGVyIjogIuS9jee9ruWxheS4rSIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIuS9jee9rumdoOWPsyIsCi0gICJKdXN0aWZ5IEZ1bGwiOiAi5L2N572u5bem5Y+z5bmz562JIiwKLSAgIk9yZGVyZWQgTGlzdCI6ICLpoIbluo/muIXllq4iLAotICAiQnVsbGV0ZWQgTGlzdCI6ICLnhKHluo/muIXllq4iLAotICAiRGVjcmVhc2UgSW5kZW50IjogIua4m+Wwj+ihjOWJjeepuueZvSIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAi5Yqg5a+s6KGM5YmN56m655m9IiwKLSAgIkZvbnQgQ29sb3IiOiAi5paH5a2X6aGP6ImyIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAi6IOM5pmv6aGP6ImyIiwKLSAgIkhvcml6b250YWwgUnVsZSI6ICLmsLTlubPnt5oiLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIuaPkuWFpemAo+e1kCIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIuaPkuWFpeWcluW9oiIsCi0gICJJbnNlcnQgVGFibGUiOiAi5o+S5YWl6KGo5qC8IiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICLliIfmj5tIVE1M5Y6f5aeL56K8IiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIuaUvuWkpyIsCi0gICJBYm91dCB0aGlzIGVkaXRvciI6ICLpl5zmlrwgWGluaGEiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAi6Kqq5piOIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAi5a2X6auU5L6L5a2QIgotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvY2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9jaC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVhYzg0MC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9jaC5qcworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzCi0KLS8vIExBTkc6ICJjaCIsIEVOQ09ESU5HOiBVVEYtOAotLy8gU2FtdWVsIFN0b25lLCBodHRwOi8vc3RvbmVtaWNyby5jb20vCi0KLXsKLSAgIkJvbGQiOiAi57KX6auUIiwKLSAgIkl0YWxpYyI6ICLmlpzpq5QiLAotICAiVW5kZXJsaW5lIjogIuW6lee3miIsCi0gICJTdHJpa2V0aHJvdWdoIjogIuWIque3miIsCi0gICJTdWJzY3JpcHQiOiAi5LiL5qiZIiwKLSAgIlN1cGVyc2NyaXB0IjogIuS4iuaomSIsCi0gICJKdXN0aWZ5IExlZnQiOiAi6Z2g5bemIiwKLSAgIkp1c3RpZnkgQ2VudGVyIjogIuWxheS4rSIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIumdoOWPsyIsCi0gICJKdXN0aWZ5IEZ1bGwiOiAi5pW06b2KIiwKLSAgIk9yZGVyZWQgTGlzdCI6ICLpoIbluo/muIXllq4iLAotICAiQnVsbGV0ZWQgTGlzdCI6ICLnhKHluo/muIXllq4iLAotICAiRGVjcmVhc2UgSW5kZW50IjogIuS8uOaOkiIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAi57iu5o6SIiwKLSAgIkZvbnQgQ29sb3IiOiAi5paH5a2X6aGP6ImyIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAi6IOM5pmv6aGP6ImyIiwKLSAgIkhvcml6b250YWwgUnVsZSI6ICLmsLTlubPnt5oiLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIuaPkuWFpemAo+e1kCIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIuaPkuWFpeWcluWDjyIsCi0gICJJbnNlcnQgVGFibGUiOiAi5o+S5YWl6KGo5qC8IiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICLliIfmj5tIVE1M5Y6f5aeL56K8IiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIuS8uOWHuue3qOi8r+ezu+e1sSIsCi0gICJBYm91dCB0aGlzIGVkaXRvciI6ICLpl5zmlrwgWGluaGEiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAi6Kqq5piOIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAi5a2X6auU5L6L5a2QIiwKLSAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIuWbnuWOnyIsCi0gICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLph43mnaUiLAotICAiQ3V0IHNlbGVjdGlvbiI6ICLliarliLbpgInpobkiLAotICAiQ29weSBzZWxlY3Rpb24iOiAi5aSN5Yi26YCJ6aG5IiwKLSAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIui0tOS4iiIsCi0gICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICLku47lt6bliLDlj7MiLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAi5LuO5Y+z5Yiw5bemIiwKLSAgIk9LIjogIuWlvSIsCi0gICJDYW5jZWwiOiAi5Y+W5raIIiwKLSAgIlBhdGgiOiAi6YCU5b6RIiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICLkvaDlnKjnlKjntJTlrZfnt6jovK/mlrnlvI8uICDnlKggWzw+XSDmjInpiJXovYnlm54g5omA6KaL5Y2z5omA5b6XIOe3qOi8r+aWueW8jy4iLAotICAiVGhlIGZ1bGwgc2NyZWVuIG1vZGUgaXMga25vd24gdG8gY2F1c2UgcHJvYmxlbXMgd2l0aCBJbnRlcm5ldCBFeHBsb3JlciwgZHVlIHRvIGJyb3dzZXIgYnVncyB0aGF0IHdlIHdlcmVuIjogIuaVtOmggeW8j+WcqEludGVybmV0IEV4cGxvcmVyIOS4iuW4uOWHuuWVj+mhjCwg5Zug54K66YCZ5pivIEludGVybmV0IEV4cGxvcmVyIOeahOeEoeWQjeWVj+mhjO+8jOaIkeWAkeeEoeazleino+axuuOAguS9oOWPr+iDveeci+imi+S4gOS6m+Weg+Wcvu+8jOaIlumBh+WIsOWFtuS7luWVj+mhjOOAguaIkeWAkeW3suitpuWRiuS6huS9oC4g5aaC5p6c6KaB6L2J5YiwIOato+mggeW8jyDoq4vmjIkg5aW9LiIsCi0gICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iLAotICAiQ2FuY2VsIjogIuWPlua2iCIsCi0gICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAi5o+S5YWlL+aUueWvq+mAo+e1kCIsCi0gICJOZXcgd2luZG93IChfYmxhbmspIjogIuaWsOeql+aItyhfYmxhbmspIiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi54ShKHVzZSBpbXBsaWNpdCkiLAotICAiT3RoZXIiOiAi5YW25LuWIiwKLSAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICLmnKzljKEgKF9zZWxmKSIsCi0gICJUYXJnZXQ6IjogIuebruaomeWMoToiLAotICAiVGl0bGUgKHRvb2x0aXApOiI6ICLkuLvpoYwgKHRvb2x0aXApOiIsCi0gICJUb3AgZnJhbWUgKF90b3ApIjogIuS4iuWMoSAoX3RvcCkiLAotICAiVVJMOiI6ICLntrLlnYA6IiwKLSAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICLkvaDlv4XpoIjovLjlhaXkvaDopoHov57nu5PnmoTntrLlnYAiCi19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9jei5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2N6LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2M3NDI0Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2N6LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLQotLy8gTEFORzogImN6IiwgRU5DT0RJTkc6IFVURi04Ci0vLyBBdXRob3I6IEppcmkgTMO2dywgPGppcmlsb3dAamlyaWxvdy5jb20+Ci0KLS8vIEZPUiBUUkFOU0xBVE9SUzoKLS8vCi0vLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKLS8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKLS8vCi0vLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKLS8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKLS8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKLQotewotICAiQm9sZCI6ICJUdcSNbsSbIiwKLSAgIkl0YWxpYyI6ICJLdXJ6w612YSIsCi0gICJVbmRlcmxpbmUiOiAiUG9kdHLFvmVuw60iLAotICAiU3RyaWtldGhyb3VnaCI6ICJQxZllxaFrcnRudXTDrSIsCi0gICJTdWJzY3JpcHQiOiAiRG9sbsOtIGluZGV4IiwKLSAgIlN1cGVyc2NyaXB0IjogIkhvcm7DrSBpbmRleCIsCi0gICJKdXN0aWZ5IExlZnQiOiAiWmFyb3ZuYXQgZG9sZXZhIiwKLSAgIkp1c3RpZnkgQ2VudGVyIjogIk5hIHN0xZllZCIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIlphcm92bmF0IGRvcHJhdmEiLAotICAiSnVzdGlmeSBGdWxsIjogIlphcm92bmF0IGRvIHN0cmFuIiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJTZXpuYW0iLAotICAiQnVsbGV0ZWQgTGlzdCI6ICJPZHLDocW+a3kiLAotICAiRGVjcmVhc2UgSW5kZW50IjogIlDFmWVkc2FkaXQiLAotICAiSW5jcmVhc2UgSW5kZW50IjogIk9kc2FkaXQiLAotICAiRm9udCBDb2xvciI6ICJCYXJ2YSBww61zbWEiLAotICAiQmFja2dyb3VuZCBDb2xvciI6ICJCYXJ2YSBwb3phZMOtIiwKLSAgIkhvcml6b250YWwgUnVsZSI6ICJWb2Rvcm92bsOhIMSNw6FyYSIsCi0gICJJbnNlcnQgV2ViIExpbmsiOiAiVmxvxb5pdCBvZGtheiIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIlZsb8W+aXQgb2Jyw6F6ZWsiLAotICAiSW5zZXJ0IFRhYmxlIjogIlZsb8W+aXQgdGFidWxrdSIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiUMWZZXBub3V0IEhUTUwiLAotICAiRW5sYXJnZSBFZGl0b3IiOiAiTm92w6kgb2tubyBlZGl0b3J1IiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIk8gdMOpdG8gYXBsaWthY2kiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiTsOhcG92xJtkYSBhcGxpa2FjZSIsCi0gICJDdXJyZW50IHN0eWxlIjogIlp2b2xlbsO9IHN0eWwiLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiVnLDoXTDrSBwb3NsZWRuw60gYWtjaSIsCi0gICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJPcGFrdWplIHBvc2xlZG7DrSBha2NpIiwKLSAgIkN1dCBzZWxlY3Rpb24iOiAiVnlqbW91dCIsCi0gICJDb3B5IHNlbGVjdGlvbiI6ICJLb3DDrXJvdmF0IiwKLSAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIlZsb8W+aXQiLAotICAiT0siOiAiT0siLAotICAiQ2FuY2VsIjogIlpydcWhaXQiLAotICAiUGF0aCI6ICJDZXN0YSIsCi0gICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiSnN0ZSB2IFRFWFRPVsOJTSBSRcW9SU1VLiAgUG91xb5panRlIHRsYcSNw610a28gWzw+XSBwcm8gcMWZZXBudXTDrSBkbyBXWVNJV0lHLiIKLX0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2RhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZGEuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NWViZTAuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZGEuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLS8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAotLy8gQXV0aG9yOiByZW5lLCA8cmVuZUBsYWVya2UubmV0PgotLy8gICAgICAgICBOaWVscyBCYWdnZXNlbiwgPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LCAwLjk1LCAyMDA5LTA4LTE1Ci17Ci0gICJCb2xkIjogIkZlZCIsCi0gICJJdGFsaWMiOiAiS3Vyc2l2IiwKLSAgIlVuZGVybGluZSI6ICJVbmRlcnN0cmVnbmluZyIsCi0gICJTdHJpa2V0aHJvdWdoIjogIkdlbm5lbXN0cmVnbmluZyIsCi0gICJTdWJzY3JpcHQiOiAiU8OmbmtldCBza3JpZnQiLAotICAiU3VwZXJzY3JpcHQiOiAiSMOmdmV0IHNrcmlmdCIsCi0gICJKdXN0aWZ5IExlZnQiOiAiVmVuc3RyZWp1c3RlciIsCi0gICJKdXN0aWZ5IENlbnRlciI6ICJDZW50cmVyIiwKLSAgIkp1c3RpZnkgUmlnaHQiOiAiSMO4anJlanVzdGVyIiwKLSAgIkp1c3RpZnkgRnVsbCI6ICJMaWdlIG1hcmdlbmVyIiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJPcmRuZXQgbGlzdGUiLAotICAiQnVsbGV0ZWQgTGlzdCI6ICJQdW5rdGxpc3RlIiwKLSAgIkRlY3JlYXNlIEluZGVudCI6ICJGb3JtaW5kc2sgaW5kcnlrbmluZyIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAiRm9yw7hnIGluZHJ5a25pbmciLAotICAiRm9udCBDb2xvciI6ICJTa3JpZnRmYXJ2ZSIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogIkJhZ2dydW5kc2ZhcnZlIiwKLSAgIkhvcml6b250YWwgUnVsZSI6ICJWYW5kcmV0IHN0cmVnIiwKLSAgIkluc2VydCBXZWIgTGluayI6ICJJbmRzw6Z0IGh5cGVybGluayIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIkluZHPDpnQvdWRza2lmdCBiaWxsZWRlIiwKLSAgIkluc2VydCBUYWJsZSI6ICJJbmRzw6Z0IHRhYmVsIiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJIVE1MIHZpc25pbmciLAotICAiRW5sYXJnZSBFZGl0b3IiOiAiVmlzIGVkaXRvciBpIHBvcHVwIiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIk9tIFhpbmhhIiwKLSAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIkhqw6ZscCIsCi0gICJDdXJyZW50IHN0eWxlIjogIkFudmVuZHQgc3RpbCIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJGb3J0cnlkIHNpZHN0ZSDDpm5kcmluZyIsCi0gICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJHZW50YWcgc2lkc3RlIMOmbmRyaW5nIiwKLSAgIkN1dCBzZWxlY3Rpb24iOiAiS2xpcCIsCi0gICJDb3B5IHNlbGVjdGlvbiI6ICJLb3BpZXIiLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiSW5kc8OmdCIsCi0gICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICJUZWtzdCB2ZW5zdHJlIG1vZCBow7hqcmUiLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiVGVrc3QgaMO4anJlIG1vZCB2ZW5zdHJlIiwKLSAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIkZqZXJuIGZvcm1hdGVyaW5nIiwKLSAgIlNlbGVjdCBhbGwiOiAiVsOmbGcgYWx0IiwKLSAgIlByaW50IGRvY3VtZW50IjogIlVkc2tyaXYgZG9rdW1lbnQiLAotICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICJNU09mZmljZSBmaWx0ZXIiLAotICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiRmplcm4gc2tyaWZ0IHZhbGciLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogIlZpbCBkdSBmamVybiBza3JpZnRzbml0IHZhbGciLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiVmlsIGR1IGZqZXJuZSBza3JpZnRzdMO4cnJlbHNlIHZhbGciLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICJWaWwgZHUgZmplcm5lIHNrcmlmdGZhcnZlIHZhbGciLAotICAiU3BsaXQgQmxvY2siOiAiRGVsIGJsb2siLAotICAiVG9nZ2xlIEJvcmRlcnMiOiAiVGFiZWxrYW50ZXIgdGlsL2ZyYSIsCi0gICJTYXZlIGFzIjogIkdlbSBzb20iLAotICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICJJbmRzw6Z0L092ZXJza3JpdiIsCi0gICImbWRhc2g7IGZvcm1hdCAmbWRhc2g7IjogIiZtZGFzaDsgRm9ybWF0ICZtZGFzaDsiLAotICAiSGVhZGluZyAxIjogIk92ZXJza3JpZnQgMSIsCi0gICJIZWFkaW5nIDIiOiAiT3ZlcnNrcmlmdCAyIiwKLSAgIkhlYWRpbmcgMyI6ICJPdmVyc2tyaWZ0IDMiLAotICAiSGVhZGluZyA0IjogIk92ZXJza3JpZnQgNCIsCi0gICJIZWFkaW5nIDUiOiAiT3ZlcnNrcmlmdCA1IiwKLSAgIkhlYWRpbmcgNiI6ICJPdmVyc2tyaWZ0IDYiLAotICAiTm9ybWFsIjogIk5vcm1hbCIsCi0gICJBZGRyZXNzIjogIkFkcmVzc2UiLAotICAiRm9ybWF0dGVkIjogIkZvcm1hdGVyZXQiLAotCi0gIC8vZGlhbG9ncwotICAiT0siOiAiT0siLAotICAiQ2FuY2VsIjogIkZvcnRyeWQiLAotICAiUGF0aCI6ICJTVGkiLAotICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIkR1IGVyIGkgVEVYVCBtb2RlLiBCcnVnIFs8Pl0ga25hcHBlbiB0aWwgYXQgc2tpZnRlIHRpbCB2aXN1ZWwgZWRpdGVyaW5nLiIsCi0gICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICJJbmRzw6Z0LWtuYXBwZW4gdmlya2VyIGlra2UgaSBNb3ppbGxhLWJhc2VyZWRlIGJyb3dzZXJlLiBCcnVnIEN0cmwtViBww6UgdGFzdGF0dXJldCBmb3IgYXQgaW5kc8OmdHRlLiIsCi0KLSAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0ZSBhIGxpbmsiOiAiRHUgc2thbCBtYXJrZXJlIG5vZ2V0IHRla3N0IGZvciBhdCBpbmRzw6Z0dGUgZXQgaHlwZXJsaW5rIiwKLSAgIllvdXIgRG9jdW1lbnQgaXMgbm90IHdlbGwgZm9ybWVkLiBDaGVjayBKYXZhU2NyaXB0IGNvbnNvbGUgZm9yIGRldGFpbHMuIjogIkRpdCBkb2t1bWVudCBlciBpa2tlIHN5bnRha3Rpc2sga29ycmVrdC4gw4VibiBKYXZhc2NyaXB0IGtvbnNvbGxlbiBmb3IgYXQgZsOlIGZsZXJlIGRldGFsamVyLiIsCi0KLSAgIkFsaWdubWVudDoiOiAiSnVzdGVyaW5nOiIsCi0gICJOb3Qgc2V0IjogIlViZXN0ZW10IiwKLSAgIkxlZnQiOiAiVmVuc3RyZSIsCi0gICJSaWdodCI6ICJIw7hqcmUiLAotICAiVGV4dHRvcCI6ICJUZWtzdHRvcCIsCi0gICJBYnNtaWRkbGUiOiAiQ2VudHJlcmV0IiwKLSAgIkJhc2VsaW5lIjogIkdydW5kbGluamUiLAotICAiQWJzYm90dG9tIjogIkJ1bmQiLAotICAiQm90dG9tIjogIlRla3N0YnVuZCIsCi0gICJNaWRkbGUiOiAiTWlkdCIsCi0gICJUb3AiOiAiVG9wIiwKLQotICAiTGF5b3V0IjogIkxheW91dCIsCi0gICJTcGFjaW5nIjogIkFmc3RhbmQiLAotICAiSG9yaXpvbnRhbDoiOiAidmFuZHJldDoiLAotICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIlZhbmRyZXQgZnlsZCIsCi0gICJWZXJ0aWNhbDoiOiAibG9kcmV0OiIsCi0gICJWZXJ0aWNhbCBwYWRkaW5nIjogIkxvZHJldCBmeWxkIiwKLSAgIkJvcmRlciB0aGlja25lc3M6IjogIkthbnRicmVkZGU6IiwKLSAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiVG9tIGh2aXMgaW5nZW4ga2FudCIsCi0KLSAgLy9JbnNlcnQgTGluawotICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIkluZHPDpnQvcmVkaWdlciBoeXBlcmxpbmsiLAotICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJpbmdlbiAoaW1wbGljaXQpIiwKLSAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTnl0IHZpbmR1ZSAoX2JsYW5rKSIsCi0gICJTYW1lIGZyYW1lIChfc2VsZikiOiAiU2FtbWUgcmFtbWUgKF9zZWxmKSIsCi0gICJUb3AgZnJhbWUgKF90b3ApIjogIlRvcHJhbW1lIChfdG9wKSIsCi0gICJPdGhlciI6ICJBbmRldCIsCi0gICJUYXJnZXQ6IjogIlBsYWNlcmluZzoiLAotICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUaXRlbCAoVG9vbHRpcCk6IiwKLSAgIlVSTDoiOiAiVVJMOiIsCi0gICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAiRHUgc2thbCBhbmdpdmUgZW4gbcOlbC1VUkwgZm9yIGxpbmtldCIsCi0KLSAgLy8gSW5zZXJ0IFRhYmxlCi0gICJJbnNlcnQgVGFibGUiOiAiSW5kc8OmdCB0YWJlbCIsCi0gICJSb3dzOiI6ICJSw6Zra2VyOiIsCi0gICJOdW1iZXIgb2Ygcm93cyI6ICJBbnRhbCByw6Zra2VyIiwKLSAgIkNvbHM6IjogIlPDuGpsZXI6IiwKLSAgIk51bWJlciBvZiBjb2x1bW5zIjogIkFudGFsIHPDuGpsZXIiLAotICAiV2lkdGg6IjogIkJyZWRkZToiLAotICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIlRhYmVsYnJlZGRlIiwKLSAgIlBlcmNlbnQiOiAiUHJvY2VudCIsCi0gICJQaXhlbHMiOiAiUGl4ZWwiLAotICAiRW0iOiAiR2V2aWVydCAoRW0pIiwKLSAgIldpZHRoIHVuaXQiOiAiQnJlZGRlZW5oZWQiLAotICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICJGYXN0LWJyZWRkZSBzw7hqbGVyIiwKLSAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiUGxhY2VyaW5nIGFmIHRhYmVsIiwKLSAgIkNlbGwgc3BhY2luZzoiOiAiQ2VsbGVhZnN0YW5kOiIsCi0gICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIkFmc3RhbmQgbWVsbGVtIGNlbGxlciIsCi0gICJDZWxsIHBhZGRpbmc6IjogIkNlbGxlZnlsZDoiLAotICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICJMdWZ0IG1lbGxlbSBpbmRob2xkIG9nIGthbnRlciIsCi0gICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIkR1IHNrYWwgc2tyaXZlIGFudGFsbGV0IGFmIHLDpmtrZXIiLAotICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICJEdSBza2FsIHNrcml2ZSBhbnRhbGxldCBhZiBzw7hqbGVyIiwKLQotICAvLyBJbnNlcnQgSW1hZ2UKLSAgIkluc2VydCBJbWFnZSI6ICJJbmRzw6Z0IGJpbGxlZGUiLAotICAiSW1hZ2UgVVJMOiI6ICJCaWxsZWRlIFVSTDoiLAotICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkFuZ2l2IGJpbGxlZGV0cyBVUkwiLAotICAiUHJldmlldyI6ICJTbXVna2lnIiwKLSAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJTbXVna2lnIGFmIGJpbGxlZGV0IGkgZXQgbnl0IHZpbmR1ZSIsCi0gICJBbHRlcm5hdGUgdGV4dDoiOiAiQWx0ZXJuYXRpdiB0ZXh0OiIsCi0gICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJmb3IgYnJvd3NlcmUgZGVyIGlra2UgdW5kZXJzdMO4dHRlciBiaWxsZWRlciIsCi0gICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIlBsYWNlcmluZyBhZiBiaWxsZWRldCIsCi0gICJJbWFnZSBQcmV2aWV3OiI6ICJCaWxsZWRlIHNtdWdraWc6IiwKLSAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiRHUgc2thbCBhbmdpdmUgZW4gVVJMIiwKLQotICAvLyBkZS1idXR0b25zIGhhdmUgbGV0dGVycyBtYXRjaGluZyBkYW5pc2ggOi0pCi0gICJidXR0b25fYm9sZCI6ICJkZS9ib2xkLmdpZiIsCi0gICJidXR0b25faXRhbGljIjogImRlL2l0YWxpYy5naWYiLAotICAiYnV0dG9uX3VuZGVybGluZSI6ICJkZS91bmRlcmxpbmUuZ2lmIiwKLQotICAvLyBFZGl0b3IgSGVscAotICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogIlRhc3RhdHVyZ2VudmVqZSIsCi0gICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAiRWRpdG9yZW4ga2VuZGVyIGbDuGxnZW5kZSBrb21iaW5hdGlvbmVyOiIsCi0gICJuZXcgcGFyYWdyYXBoIjogIk55dCBhZnNuaXQiLAotICAiaW5zZXJ0IGxpbmVicmVhayI6ICJJbmRzw6Z0IGxpbmplc2tpZnQiLAotICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiRm9ybWF0ZXIgYWZzbml0IiwKLSAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICJSZW5zIGluZGhvbGQga29waWVyZXQgZnJhIFdvcmQiLAotICAiSGVhZGluZ3MiOiAiT3ZlcnNrcmlmdCAxIHRpbCA2IiwKLSAgIkNsb3NlIjogIkx1ayIsCi0KLSAgLy8gTG9hZGluZyBtZXNzYWdlcwotICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIjogIkVkaXRvcmVuIGhlbnRlcyBpbmQuIFZlbnQgdmVubGlnc3QuIiwKLSAgIkxvYWRpbmcgcGx1Z2luICRwbHVnaW4iIDogIlBsdWdpbiAkcGx1Z2luIGhlbnRlcyIsCi0gICJSZWdpc3RlciBwbHVnaW4gJHBsdWdpbiIgOiAiUGx1Z2luICRwbHVnaW4gcmVnaXN0cmVyZXMiLCAKLSAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAiT2JqZWt0IHJlZ2lzdHJlcmVzIiwKLSAgIkdlbmVyYXRlIFhpbmhhIGZyYW1ld29yayI6ICJYaW5oYSBGcmFtZXdvcmsgZ2VuZXJlcmVzIiwKLSAgIkluaXQgZWRpdG9yIHNpemUiOiJTdMO4cnJlbHNlbiBiZXJlZ25lcyIsCi0gICJDcmVhdGUgVG9vbGJhciI6ICJPcHJldHRlciB2w6Zya3TDuGpzbGluamUiLAotICAiQ3JlYXRlIFN0YXR1c2JhciIgOiAiT3ByZXR0ZXIgc3RhdHVzbGluamUiLAotICAiUmVnaXN0ZXIgcmlnaHQgcGFuZWwiIDogIlJlZ2lzdHJlcmVyIGjDuGpyZSBwYW5lbCIsCi0gICJSZWdpc3RlciBsZWZ0IHBhbmVsIiA6ICJSZWdpc3RyZXJlciB2ZW5zdHJlIHBhbmVsIiwKLSAgIlJlZ2lzdGVyIGJvdHRvbSBwYW5lbCIgOiAiUmVnaXN0cmVyZXIgbmVkZXJzdGUgcGFuZWwiLAotICAiUmVnaXN0ZXIgdG9wIHBhbmVsIiA6ICJSZWdpc3RyZXJlciDDuHZlcnN0ZSBwYW5lbCIsCi0gICJGaW5pc2hpbmciIDogIkFmc2x1dHRlciIsCi0gIAotICAvLyBDb2xvclBpY2tlcgotICAiQ2xpY2sgYSBjb2xvci4uLiIgOiAiVsOmbGcgZmFydmUiLAotICAiU2FtcGxlIiA6ICJFa3NlbXBlbCIsCi0gICJXZWIgU2FmZTogIiA6ICJXZWIgU2FmZTogIiwKLSAgIkNvbG9yOiAiIDogIkZhcnZlOiAiCi19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2RlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGU1ZWMyLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2RlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzCi0vLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKLXsKLSAgIkJvbGQiOiAiRmV0dCIsCi0gICJJdGFsaWMiOiAiS3Vyc2l2IiwKLSAgIlVuZGVybGluZSI6ICJVbnRlcnN0cmljaGVuIiwKLSAgIlN0cmlrZXRocm91Z2giOiAiRHVyY2hnZXN0cmljaGVuIiwKLSAgIlN1YnNjcmlwdCI6ICJUaWVmZ2VzdGVsbHQiLAotICAiU3VwZXJzY3JpcHQiOiAiSG9jaGdlc3RlbGx0IiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJMaW5rc2LDvG5kaWciLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiWmVudHJpZXJ0IiwKLSAgIkp1c3RpZnkgUmlnaHQiOiAiUmVjaHRzYsO8bmRpZyIsCi0gICJKdXN0aWZ5IEZ1bGwiOiAiQmxvY2tzYXR6IiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJOdW1tZXJpZXJ0ZSBMaXN0ZSIsCi0gICJCdWxsZXRlZCBMaXN0IjogIkF1ZnrDpGhsdW5nc2xpc3RlIiwKLSAgIkRlY3JlYXNlIEluZGVudCI6ICJFaW56dWcgdmVya2xlaW5lcm4iLAotICAiSW5jcmVhc2UgSW5kZW50IjogIkVpbnp1ZyB2ZXJncsO2w59lcm4iLAotICAiRm9udCBDb2xvciI6ICJTY2hyaWZ0ZmFyYmUiLAotICAiQmFja2dyb3VuZCBDb2xvciI6ICJIaW5kZXJncnVuZGZhcmJlIiwKLSAgIkhvcml6b250YWwgUnVsZSI6ICJIb3Jpem9udGFsZSBMaW5pZSIsCi0gICJJbnNlcnQgV2ViIExpbmsiOiAiSHlwZXJsaW5rIGVpbmbDvGdlbiIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIkJpbGQgZWluZsO8Z2VuL3ZlcsOkbmRlcm4iLAotICAiSW5zZXJ0IFRhYmxlIjogIlRhYmVsbGUgZWluZsO8Z2VuIiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJIVE1MIFF1ZWxsdGV4dCBlaW4vYXVzc2NoYWx0ZW4iLAotICAiRW5sYXJnZSBFZGl0b3IiOiAiRWRpdG9yIHZlcmdyw7bDn2VybiIsCi0gICJBYm91dCB0aGlzIGVkaXRvciI6ICLDnGJlciBkaWVzZW4gRWRpdG9yIiwKLSAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIkhpbGZlIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiRGVyemVpdGlnZXIgU3RpbCIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJSw7xja2fDpG5naWciLAotICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiV2llZGVyaG9sZW4iLAotICAiQ3V0IHNlbGVjdGlvbiI6ICJBdXNzY2huZWlkZW4iLAotICAiQ29weSBzZWxlY3Rpb24iOiAiS29waWVyZW4iLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiRWluZsO8Z2VuIGF1cyBkZXIgWndpc2NoZW5hYmxhZ2UiLAotICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiVGV4dHJpY2h0dW5nIHZvbiBMaW5rcyBuYWNoIFJlY2h0cyIsCi0gICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJUZXh0cmljaHR1bmcgdm9uIFJlY2h0cyBuYWNoIExpbmtzIiwKLSAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIkZvcm1hdGllcnVuZyBlbnRmZXJuZW4iLAotICAiU2VsZWN0IGFsbCI6ICJBbGxlcyBtYXJraWVyZW4iLAotICAiUHJpbnQgZG9jdW1lbnQiOiAiRG9rdW1lbnQgYXVzZHJ1Y2tlbiIsCi0gICJDbGVhciBNU09mZmljZSB0YWdzIjogIk1TT2ZmaWNlIGZpbHRlciIsCi0gICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICJaZWljaGVuc2F0eiBGb3JtYXRpZXJ1bmdlbiBlbnRmZXJuZW4iLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogIldvbGxlbiBTaWUgWmVpY2hlbnNhdHp0eXBlbiBlbnRmZXJuZW4iLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiV29sbGVuIFNpZSBaZWljaGVuc2F0emdyw7bDn2VuIGVudGZlcm5lbiIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIldvbGxlbiBzaWUgWmVpY2hlbnNhdHpmYXJiZW4gZW50ZmVybmVuIiwKLSAgIlNwbGl0IEJsb2NrIjogIkJsb2NrIHRlaWxlbiIsCi0gICJUb2dnbGUgQm9yZGVycyI6ICJUYWJlbGxlbnLDpG5kZXIgZWluL2F1c2JsZW5kZW4iLAotICAiU2F2ZSBhcyI6ICJzcGVpY2hlcm4gdW50ZXIiLAotICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICJFaW5mw7xnZW4vw5xiZXJzY2hyZWliZW4iLAotICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICImIzgyMTI7IEZvcm1hdCAmIzgyMTI7IiwKLSAgIkhlYWRpbmcgMSI6ICLDnGJlcnNjaHJpZnQgMSIsCi0gICJIZWFkaW5nIDIiOiAiw5xiZXJzY2hyaWZ0IDIiLAotICAiSGVhZGluZyAzIjogIsOcYmVyc2NocmlmdCAzIiwKLSAgIkhlYWRpbmcgNCI6ICLDnGJlcnNjaHJpZnQgNCIsCi0gICJIZWFkaW5nIDUiOiAiw5xiZXJzY2hyaWZ0IDUiLAotICAiSGVhZGluZyA2IjogIsOcYmVyc2NocmlmdCA2IiwKLSAgIk5vcm1hbCI6ICJOb3JtYWwgKEFic2F0eikiLAotICAiQWRkcmVzcyI6ICJBZHJlc3NlIiwKLSAgIkZvcm1hdHRlZCI6ICJGb3JtYXRpZXJ0IiwKLQotICAvL2RpYWxvZ3MKLSAgIk9LIjogIk9LIiwKLSAgIkNhbmNlbCI6ICJBYmJyZWNoZW4iLAotICAiUGF0aCI6ICJQZmFkIiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJTaWUgc2luZCBpbSBUZXh0LU1vZHVzLiBCZW51dHplbiBTaWUgZGVuIFs8Pl0gQnV0dG9uLCB1bSBpbiBkZW4gdmlzdWVsbGVuIE1vZHVzIChXWVNJV0lHKSB6dSBnZWxhbmdlbi4iLAotICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiQXVzIFNpY2hlcmhlaXRzZ3LDvG5kZW4gZMO8cmZlbiBTa3JpcHRlIG5vcm1hbGVyd2Vpc2UgbmljaHQgYXVmIEF1c3NjaG5laWRlbi9Lb3BpZXJlbi9FaW5mw7xnZW4genVncmVpZmVuLiBCZW51dHplbiBTaWUgYml0dGUgZGllIGVudHNwcmVjaGVuZGVuIFRhc3RhdHVyLUtvbW1hbmRvcyAoU3RyZyArIHgvYy92KS4iLAotCi0gICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGUgYSBsaW5rIjogIlNpZSBtw7xzc2VuIGVpbmVuIFRleHQgbWFya2llcmVuLCB1bSBlaW5lbiBMaW5rIHp1IGVyc3RlbGxlbiIsCi0gICJZb3VyIERvY3VtZW50IGlzIG5vdCB3ZWxsIGZvcm1lZC4gQ2hlY2sgSmF2YVNjcmlwdCBjb25zb2xlIGZvciBkZXRhaWxzLiI6ICJJaHIgRG9rdW1lbnQgaXN0IGluIGtlaW5lbSBzYXViZXJlbiBGb3JtYXQuIEJlbnV0emVuIFNpZSBkaWUgSmF2YXNjcmlwdCBDb25zb2xlIGbDvHIgd2VpdGVyZSBJbmZvcm1hdGlvbmVuLiIsCi0KLSAgIkFsaWdubWVudDoiOiAiQXVzcmljaHR1bmc6IiwKLSAgIk5vdCBzZXQiOiAibmljaHQgZWluZ2VzdGVsbHQiLAotICAiTGVmdCI6ICJsaW5rcyIsCi0gICJSaWdodCI6ICJyZWNodHMiLAotICAiVGV4dHRvcCI6ICJvYmVuIGLDvG5kaWciLAotICAiQWJzbWlkZGxlIjogIm1pdHRpZyIsCi0gICJCYXNlbGluZSI6ICJHcnVuZGxpbmllIiwKLSAgIkFic2JvdHRvbSI6ICJ1bnRlbiBiw7xuZGlnIiwKLSAgIkJvdHRvbSI6ICJ1bnRlbiIsCi0gICJNaWRkbGUiOiAiemVudHJpZXJ0IiwKLSAgIlRvcCI6ICJvYmVuIiwKLQotICAiTGF5b3V0IjogIkxheW91dCIsCi0gICJTcGFjaW5nIjogIkFic3RhbmQiLAotICAiSG9yaXpvbnRhbDoiOiAiaG9yaXpvbnRhbDoiLAotICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogImhvcml6b250YWxlciBJbmhhbHRzYWJzdGFuZCIsCi0gICJWZXJ0aWNhbDoiOiAidmVydGlrYWw6IiwKLSAgIlZlcnRpY2FsIHBhZGRpbmciOiAidmVydGlrYWxlciBJbmhhbHRzYWJzdGFuZCIsCi0gICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJSYW5kc3TDpHJrZToiLAotICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJsZWVyIGxhc3NlbiBmw7xyIGtlaW5lbiBSYW5kIiwKLQotICAvL0luc2VydCBMaW5rCi0gICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiVmVya27DvHBmdW5nIGhpbnp1ZsO8Z2VuL8OkbmRlcm4iLAotICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJrLkEuIChpbXBsaXppdCkiLAotICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOZXVlcyBGZW5zdGVyIChfYmxhbmspIiwKLSAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJTZWxiZXIgUmFobWVuIChfc2VsZikiLAotICAiVG9wIGZyYW1lIChfdG9wKSI6ICJPYmVyc3RlciBSYWhtZW4gKF90b3ApIiwKLSAgIk90aGVyIjogIkFuZGVyZXMiLAotICAiVGFyZ2V0OiI6ICJaaWVsOiIsCi0gICJUaXRsZSAodG9vbHRpcCk6IjogIlRpdGVsIChUb29sdGlwKToiLAotICAiVVJMOiI6ICJVUkw6IiwKLSAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICJTaWUgbcO8c3NlbiBlaW5lIFppZWwtVVJMIGFuZ2ViZW4gZsO8ciBkaWUgVmVya27DvHBmdW5nIGFuZ2ViZW4iLAotCi0gIC8vIEluc2VydCBUYWJsZQotICAiSW5zZXJ0IFRhYmxlIjogIlRhYmVsbGUgZWluZsO8Z2VuIiwKLSAgIlJvd3M6IjogIlplaWxlbjoiLAotICAiTnVtYmVyIG9mIHJvd3MiOiAiWmVpbGVuYW56YWhsIiwKLSAgIkNvbHM6IjogIlNwYWx0ZW46IiwKLSAgIk51bWJlciBvZiBjb2x1bW5zIjogIlNwYWx0ZW5hbnphaGwiLAotICAiV2lkdGg6IjogIkJyZWl0ZToiLAotICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIlRhYmVsbGVuYnJlaXRlIiwKLSAgIlBlcmNlbnQiOiAiUHJvemVudCIsCi0gICJQaXhlbHMiOiAiUGl4ZWwiLAotICAiRW0iOiAiR2V2aWVydCIsCi0gICJXaWR0aCB1bml0IjogIkdyw7bDn2VuZWluaGVpdCIsCi0gICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIlNwYWx0ZW4gbWl0IGZlc3RlciBCcmVpdGUiLAotICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICJQb3NpdGlvbmllcnVuZyBkZXIgVGFiZWxsZSIsCi0gICJDZWxsIHNwYWNpbmc6IjogIlplbGxlbmFic3RhbmQ6IiwKLSAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAiUmF1bSB6d2lzY2hlbiBhbmdyZW56ZW5kZW4gWmVsbGVuIiwKLSAgIkNlbGwgcGFkZGluZzoiOiAiSW5uZW5hYnN0YW5kOiIsCi0gICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIlJhdW0gendpc2NoZW4gSW5oYWx0IHVuZCBSYW5kIGRlciBaZWxsZSIsCi0gICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIkJpdHRlIGdlYmVuIFNpZSBkaWUgQW56YWhsIGRlciBaZWlsZW4gYW4iLAotICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICJCaXR0ZSBnZWJlbiBTaWUgZGllIEFuemFobCBkZXIgU3BhbHRlbiBhbiIsCi0KLSAgLy8gSW5zZXJ0IEltYWdlCi0gICJJbnNlcnQgSW1hZ2UiOiAiQmlsZCBlaW5mw7xnZW4iLAotICAiSW1hZ2UgVVJMOiI6ICJCaWxkIFVSTDoiLAotICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkJpdHRlIGdlYmVuIHNpZSBoaWVyIGRpZSBCaWxkIFVSTCBlaW4iLAotICAiUHJldmlldyI6ICJWb3JhbnNpY2h0IiwKLSAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJWb3JhbnNpY2h0IGRlcyBCaWxkZXMgaW4gZWluZW0gbmV1ZW4gRmVuc3RlciIsCi0gICJBbHRlcm5hdGUgdGV4dDoiOiAiQWx0ZXJuYXRpdmVyIFRleHQ6IiwKLSAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogImbDvHIgQnJvd3NlciwgZGllIGtlaW5lIEJpbGRlciB1bnRlcnN0w7x0emVuIiwKLSAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zaXRpb25pZXJ1bmcgZGllc2VzIEJpbGRlcyIsCi0gICJJbWFnZSBQcmV2aWV3OiI6ICJCaWxkIFZvcmFuc2ljaHQ6IiwKLSAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiQml0dGUgZ2ViZW4gU2llIGRpZSBVUkwgZWluIiwKLQotLyoKLSAgImJ1dHRvbl9ib2xkIjogImRlL2JvbGQuZ2lmIiwKLSAgImJ1dHRvbl9pdGFsaWMiOiAiZGUvaXRhbGljLmdpZiIsCi0gICJidXR0b25fdW5kZXJsaW5lIjogImRlL3VuZGVybGluZS5naWYiLAotKi8KLQotICAvLyBFZGl0b3IgSGVscAotICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogIlRhc3RhdHVya8O8cnplbCIsCi0gICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAiRGVyIEVkaXRvciB1bnRlcnN0w7x0enQgZGllIGZvbGdlbmRlbiBrb21iaW5hdGlvbmVuOiIsCi0gICJuZXcgcGFyYWdyYXBoIjogIk5ldWVyIEFic2F0eihQYXJhZ3JhcGgpIiwKLSAgImluc2VydCBsaW5lYnJlYWsiOiAiSGFydGVyIFVtYnJ1Y2ggZWluZsO8Z2VuIiwKLSAgIlNldCBmb3JtYXQgdG8gcGFyYWdyYXBoIjogIlNldHplIEZvcm1hdGllcnVuZyBhdWYgQWJzYXR6IiwKLSAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICJWb24gV29yZCBlaW5nZWbDvGd0ZXIgVGV4dCBiZXJlaW5pZ2VuIiwKLSAgIkhlYWRpbmdzIjogIsOcYmVyc2NocmlmdCBUeXAgMSBiaXMgNiIsCi0gICJDbG9zZSI6ICJTY2hsaWXDn2VuIiwKLQotICAvLyBMb2FkaW5nIG1lc3NhZ2VzCi0gICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiRWRpdG9yIHdpcmQgZ2VsYWRlbi4gQml0dGUgd2FydGVuICEiLAotICAiTG9hZGluZyBwbHVnaW4gJHBsdWdpbiIgOiAiUGx1Z2luICRwbHVnaW4gd2lyZCBnZWxhZGVuIiwKLSAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIiA6ICJQbHVnaW4gJHBsdWdpbiB3aXJkIHJlZ2lzdHJpZXJ0IiwgCi0gICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIk9iamVrdCB3aXJkIGdlbmVyaWVydCIsCi0gICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiWGluaGEgRnJhbWV3b3JrIHdpcmQgZ2VuZXJpZXJ0IiwKLSAgIkluaXQgZWRpdG9yIHNpemUiOiJHcsO2w59lIHdpcmQgYmVyZWNobmV0IiwgCi0gICJDcmVhdGUgVG9vbGJhciI6ICJXZXJremV1Z2xlaXN0ZSB3aXJkIGdlbmVyaWVydCIsCi0gICJDcmVhdGUgU3RhdHVzYmFyIiA6ICJTdGF0dXNsZWlzdGUgd2lyZCBnZW5lcmllcnQiLAotICAiUmVnaXN0ZXIgcmlnaHQgcGFuZWwiIDogIlJlY2h0ZXMgUGFuZWwgd2lyZCBnZW5lcmllcnQiLCAKLSAgIlJlZ2lzdGVyIGxlZnQgcGFuZWwiIDogIkxpbmtlcyBQYW5lbCB3aXJkIGdlbmVyaWVydCIsIAotICAiUmVnaXN0ZXIgYm90dG9tIHBhbmVsIiA6ICJVbnRlcmVzIFBhbmVsIHdpcmQgZ2VuZXJpZXJ0IiwgCi0gICJSZWdpc3RlciB0b3AgcGFuZWwiIDogIk9iZXJlcyBQYW5lbCB3aXJkIGdlbmVyaWVydCIsIAotICAiRmluaXNoaW5nIiA6ICJMYWRlbiB3aXJkIGFiZ2VzY2hsb3NzZW4iLCAKLSAgCi0gIC8vIENvbG9yUGlja2VyCi0gICJDbGljayBhIGNvbG9yLi4uIiA6ICJGYXJiZSB3w6RobGVuIiwKLSAgIlNhbXBsZSIgOiAiQmVpc3BpZWwiLAotICAiV2ViIFNhZmU6ICIgOiAiV2ViIFNhZmU6ICIsCi0gICJDb2xvcjogIiA6ICJGYXJiZTogIgotfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9lZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2VlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTM0MjcxLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2VlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLQotLy8gTEFORzogImVlIiwgRU5DT0RJTkc6IFVURi04Ci0vLyBBdXRob3I6IE1hcnRpbiBSYWllLCA8YWxiZXJ0dmlsbEBob3QuZWU+Ci0KLS8vIEZPUiBUUkFOU0xBVE9SUzoKLS8vCi0vLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKLS8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKLS8vCi0vLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKLS8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKLS8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKLQotewotICAiQm9sZCI6ICJQYWtzIiwKLSAgIkl0YWxpYyI6ICJLdXJzaWl2IiwKLSAgIlVuZGVybGluZSI6ICJBbGxha3JpaXBzdXRhdHVkIiwKLSAgIlN0cmlrZXRocm91Z2giOiAiTMOkYmlrcmlpcHN1dGF0dWQiLAotICAiU3Vic2NyaXB0IjogIkFsbGluZGVrcyIsCi0gICJTdXBlcnNjcmlwdCI6ICLDnGxhaW5kZWtzIiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJKb29uZGEgdmFzYWt1bGUiLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiSm9vbmRhIGtlc2tlbGUiLAotICAiSnVzdGlmeSBSaWdodCI6ICJKb29uZGEgcGFyZW1hbGUiLAotICAiSnVzdGlmeSBGdWxsIjogIlLDtsO2cGpvb25kYSIsCi0gICJPcmRlcmVkIExpc3QiOiAiTnVtbWVyZHVzIiwKLSAgIkJ1bGxldGVkIExpc3QiOiAiVMOkcHBsb2VuZCIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAiVsOkaGVuZGEgdGFhbmV0IiwKLSAgIkluY3JlYXNlIEluZGVudCI6ICJTdXVyZW5kYSB0YWFuZXQiLAotICAiRm9udCBDb2xvciI6ICJGb25kaSB2w6RydiIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogIlRhdXN0YSB2w6RydiIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAiSG9yaXNvbnRhYWxqb29uIiwKLSAgIkluc2VydCBXZWIgTGluayI6ICJMaXNhIHZpaXQiLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJMaXNhIHBpbHQiLAotICAiSW5zZXJ0IFRhYmxlIjogIkxpc2EgdGFiZWwiLAotICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIkhUTUwvdGF2YWxpbmUgdmFhZGUiLAotICAiRW5sYXJnZSBFZGl0b3IiOiAiU3V1cmVuZGEgdG9pbWV0aSBha2VuIiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIlRlYXZlIHRvaW1ldGkga29odGEiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiU3Bpa2tlciIsCi0gICJDdXJyZW50IHN0eWxlIjogIktpcmphc3RpaWwiLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiVsO1dGEgdGFnYXNpIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlRlZSB1dWVzdGkiLAotICAiQ3V0IHNlbGVjdGlvbiI6ICJMw7Vpa2EiLAotICAiQ29weSBzZWxlY3Rpb24iOiAiS29wZWVyaSIsCi0gICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJLbGVlYmkiLAotICAiT0siOiAiT0siLAotICAiQ2FuY2VsIjogIkxvb2J1IiwKLSAgIlBhdGgiOiAiUGF0aCIsCi0gICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiU2Egb2xlZCB0ZWtzdGlyZXppaW1pcy4gIEthc3V0YSBudXBwdSBbPD5dIGzDvGxpdGFtYWtzIHRhZ2FzaSBXWVNJV0lHIHJlemlpbWkuIgotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZWwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9lbC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMzZGY5Ni4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9lbC5qcworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzCi0KLS8vIExBTkc6ICJlbCIsIEVOQ09ESU5HOiBVVEYtOAotLy8gQXV0aG9yOiBEaW1pdHJpcyBHbGV6b3MsIGRpbWl0cmlzQGdsZXpvcy5jb20KLQotewotICAiQm9sZCI6ICLOnsKIzp7Cvc6fwoTOns6Pzp7Cvc6ewrEiLAotICAiSXRhbGljIjogIs6ewqDOnsK7zp7CrM6ewrPOns6Jzp7CsSIsCi0gICJVbmRlcmxpbmUiOiAizp7vv73On8KAzp7Oj86ewrPOn8KBzp7Csc6ezozOns6Mzp7Oic6fwoPOns6Mzp7Crc6ewr3OnsKxIiwKLSAgIlN0cmlrZXRocm91Z2giOiAizp7ClM6ezonOnsKxzp7Cs86fwoHOnsKxzp7OjM6ezozOnsKtzp7Cvc6ewrEiLAotICAiU3Vic2NyaXB0IjogIs6ewpTOns6Fzp7igJXOns6Kzp/ChM6ewrfOn8KCIiwKLSAgIlN1cGVyc2NyaXB0IjogIs6ewpTOns6Fzp7igJXOns6Kzp/ChM6ewrfOn8KCIiwKLSAgIkp1c3RpZnkgTGVmdCI6ICLOnsKjzp/ChM6ezo/OnuKAlc6fwofOns6Jzp/Cg86ewrcgzp7Ckc6fwoHOns6Jzp/Cg86fwoTOns6Fzp/Cgc6ewqwiLAotICAiSnVzdGlmeSBDZW50ZXIiOiAizp7Co86fwoTOns6Pzp7igJXOn8KHzp7Oic6fwoPOnsK3IM6ewprOnsKtzp7Cvc6fwoTOn8KBzp7OjyIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIs6ewqPOn8KEzp7Oj86e4oCVzp/Ch86ezonOn8KDzp7CtyDOnsKUzp7Ohc6ezo7Ons6Jzp7CrCIsCi0gICJKdXN0aWZ5IEZ1bGwiOiAizp7CoM6ewrvOnu+/vc6fwoHOnsK3zp/CgiDOnsKjzp/ChM6ezo/OnuKAlc6fwofOns6Jzp/Cg86ewrciLAotICAiT3JkZXJlZCBMaXN0IjogIs6ewpHOn8KBzp7igJXOns6Izp7OjM6ewrfOn8KDzp7CtyIsCi0gICJCdWxsZXRlZCBMaXN0IjogIs6ewprOns6Pzp/Chc6ezorOns6Kzp7igJXOns6Ezp7Ohc6fwoIiLAotICAiRGVjcmVhc2UgSW5kZW50IjogIs6ewpzOns6Fzp7igJXOn8KJzp/Cg86ewrcgzp7Clc6fwoPOns6Pzp/Ch86e77+9zp/CgiIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAizp7Ckc6fwo3Ons6Ozp7Ct86fwoPOnsK3IM6ewpXOn8KDzp7Oj86fwofOnu+/vc6fwoIiLAotICAiRm9udCBDb2xvciI6ICLOnsKnzp/Cgc6fwo7Ons6Mzp7CsSDOnsKTzp/Cgc6ewrHOns6Mzp7OjM6ewrHOn8KEzp7Oj86fwoPOns6Fzp7Oic6fwoHOnsKszp/CgiIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogIs6ewqfOn8KBzp/Cjs6ezozOnsKxIM6ewqbOn8KMzp7Cvc6fwoTOns6Pzp/ChSIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAizp7Cn86fwoHOns6Jzp7Ohs6fwozOnsK9zp/ChM6ezonOnsKxIM6ewpPOn8KBzp7Csc6ezozOns6Mzp7vv70iLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIs6ewpXOns6Jzp/Cg86ewrHOnsKzzp/Cic6ewrPOnu+/vSDOnsKjzp/Chc6ewr3Ons6Ezp7Crc6fwoPOns6Mzp7Oj86fwoUiLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICLOnsKVzp7Oic6fwoPOnsKxzp7Cs86fwonOnsKzzp7vv70vzp7vv73On8KBzp7Oj86fwoDOns6Pzp/CgM6ezo/OnuKAlc6ewrfOn8KDzp7CtyDOnsKVzp7Oic6ezorOn8KMzp7Cvc6ewrHOn8KCIiwKLSAgIkluc2VydCBUYWJsZSI6ICLOnsKVzp7Oic6fwoPOnsKxzp7Cs86fwonOnsKzzp7vv70gzp7CoM6e4oCVzp7Cvc6ewrHOns6Kzp7CsSIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAizp7Clc6ewr3OnsKxzp7Cu86ewrvOnsKxzp7Cs86e77+9IM6fwoPOns6FL86ewrHOn8KAzp/CjCBIVE1MIiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIs6ewpzOns6Fzp7Cs86ewq3OnsK9zp7OiM6fwoXOnsK9zp/Cg86ewrcgzp7Ohc6fwoDOns6Fzp7Ojs6ezoXOn8KBzp7Cs86ewrHOn8KDzp/ChM6e77+9IiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIs6ewqDOnsK7zp7Ct86fwoHOns6Pzp/Chs6ezo/On8KBzp7igJXOns6Fzp/CgiIsCi0gICJIZWxwIHVzaW5nIGVkaXRvciI6ICLOnsKSzp7Oj86e77+9zp7OiM6ezoXOns6Jzp7CsSIsCi0gICJDdXJyZW50IHN0eWxlIjogIs6ewqDOnsKxzp/Cgc6fwo7OnsK9IM6fwoPOn8KEzp/Chc6ewrsiLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAizp7Ckc6ewr3OnsKxzp7igJXOn8KBzp7Ohc6fwoPOnsK3IM6fwoTOns6Fzp7Cu86ezoXOn8KFzp/ChM6ewrHOnuKAlc6ewrHOn8KCIM6ezoXOnsK9zp7Crc6fwoHOnsKzzp7Ohc6ezonOnsKxzp/CgiIsCi0gICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLOnsKVzp/CgM6ewrHOnsK9zp7Csc6fwobOns6Pzp/Cgc6ewqwgzp7Csc6fwoDOn8KMIM6ewrHOnsK9zp7Csc6e4oCVzp/Cgc6ezoXOn8KDzp7CtyIsCi0gICJDdXQgc2VsZWN0aW9uIjogIs6ewpHOn8KAzp7Oj86ezorOns6Pzp/CgM6e77+9IiwKLSAgIkNvcHkgc2VsZWN0aW9uIjogIs6ewpHOnsK9zp/ChM6ezonOnsKzzp/Cgc6ewrHOn8KGzp7vv70iLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAizp7Clc6fwoDOns6Jzp7Ois6fwozOnsK7zp7Cu86ewrfOn8KDzp7CtyIsCi0gICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICLOnsKazp7Csc6fwoTOns6Fzp/Cjc6ezojOn8KFzp7Cvc6fwoPOnsK3IM6ewrHOn8KBzp7Oic6fwoPOn8KEzp7Ohc6fwoHOnsKsIM6fwoDOn8KBzp7Oj86fwoIgzp7OhM6ezoXOns6Ozp7Oic6ewqwiLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAizp7Cms6ewrHOn8KEzp7Ohc6fwo3Ons6Izp/Chc6ewr3On8KDzp7CtyDOnsKxzp/CgM6fwowgzp7OhM6ezoXOns6Ozp7Oic6ewqwgzp/CgM6fwoHOns6Pzp/CgiDOn8KEzp7CsSDOnsKxzp/Cgc6ezonOn8KDzp/ChM6ezoXOn8KBzp7CrCIsCi0gICJPSyI6ICJPSyIsCi0gICJDYW5jZWwiOiAizp7Ckc6ezorOn8KNzp/Cgc6fwonOn8KDzp7CtyIsCi0gICJQYXRoIjogIs6ewpTOns6Jzp7Csc6ezoTOn8KBzp7Oj86ezozOnu+/vSIsCi0gICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAizp7Clc6e4oCVzp/Cg86fwoTOns6FIM6fwoPOns6FIFRFWFQgTU9ERS4gIM6ewqfOn8KBzp7Ct86fwoPOns6Jzp7OjM6ezo/On8KAzp7Oj86ezonOnu+/vc6fwoPOn8KEzp7OhSDOn8KEzp7OjyDOns6Kzp7Oj86fwoXOns6Mzp/CgM6e4oCVIFs8Pl0gzp7Cs86ezonOnsKxIM6ewr3OnsKxIM6ezoXOn8KAzp7Csc6ewr3OnsKtzp/Cgc6ezojOns6Fzp/ChM6ezoUgzp/Cg86fwoTOns6PIFdZU0lXSUcuIiwKLSAgIlRoZSBmdWxsIHNjcmVlbiBtb2RlIGlzIGtub3duIHRvIGNhdXNlIHByb2JsZW1zIHdpdGggSW50ZXJuZXQgRXhwbG9yZXIsIGR1ZSB0byBicm93c2VyIGJ1Z3MgdGhhdCB3ZSB3ZXJlbiI6ICLOnsKXIM6ezorOnsKxzp/ChM6ewqzOn8KDzp/ChM6ewrHOn8KDzp7CtyDOn8KAzp7Cu86e77+9zp/Cgc6ewrfOn8KCIM6ezo/Ons6Izp/CjM6ewr3OnsK3zp/CgiDOnsKtzp/Ch86ezoXOns6JIM6fwoDOn8KBzp7Oj86ewrLOnsK7zp7vv73Ons6Mzp7Csc6fwoTOnsKxIM6ezozOns6FIM6fwoTOns6Pzp7CvSBJbnRlcm5ldCBFeHBsb3Jlciwgzp7Cu86fwozOnsKzzp/CiSDOn8KDzp/Chs6ewrHOnsK7zp7OjM6ewqzOn8KEzp/Cic6ewr0gzp/Cg86fwoTOns6Pzp7CvSDOnuKAlc6ezoTOns6Jzp7OjyDOn8KEzp7Oj86ewr0gYnJvd3Nlci4gIM6ewpHOnsK9IM6fwoTOns6PIM6fwoPOn8KNzp/Cg86fwoTOnsK3zp7OjM6ewrEgzp/Cg86ewrHOn8KCIM6ezoXOnuKAlc6ewr3OnsKxzp7OiSBXaW5kb3dzIDl4IM6ezozOn8KAzp7Oj86fwoHOns6Fzp7igJUgzp7Ois6ewrHOns6JIM6ewr3OnsKxIM6fwofOn8KBzp7Ohc6ezonOnsKxzp/Cg86fwoTOns6Fzp7igJXOn8KEzp7OhSByZWJvb3QuIM6ewpHOnsK9IM6ezoXOnuKAlc6fwoPOn8KEzp7OhSDOn8KDzp7igJXOnsKzzp7Oj86fwoXOn8KBzp7Oj86ezoksIM6fwoDOnsKxzp/ChM6e77+9zp/Cg86fwoTOns6FIM6ewp/OnsKaLiIsCi0gICJDYW5jZWwiOiAizp7Ckc6ezorOn8KNzp/Cgc6fwonOn8KDzp7CtyIsCi0gICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAizp7Clc6ezonOn8KDzp7Csc6ewrPOn8KJzp7Cs86e77+9L86e77+9zp/Cgc6ezo/On8KAzp7Oj86fwoDOns6Pzp7igJXOnsK3zp/Cg86ewrcgzp/Cg86fwo3OnsK9zp7OhM6ezoXOn8KDzp7OjM6ezo/On8KFIiwKLSAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAizp7Cnc6ewq3Ons6PIM6fwoDOnsKxzp/Cgc6ewqzOns6Izp/Chc6fwoHOns6PIChfYmxhbmspIiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAizp7Cms6ewrHOnsK9zp7Crc6ewr3OnsKxICjOn8KHzp/Cgc6e77+9zp/Cg86ewrcgzp7Csc6fwoDOn8KMzp7Cu86fwoXOn8KEzp7Oj86fwoUpIiwKLSAgIk90aGVyIjogIs6ewpHOnsK7zp7Cu86ezo8iLAotICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIs6eworOns6Ezp7Oic6ezo8gZnJhbWUgKF9zZWxmKSIsCi0gICJUYXJnZXQ6IjogIlRhcmdldDoiLAotICAiVGl0bGUgKHRvb2x0aXApOiI6ICLOnu+/vc6e4oCVzp/ChM6ewrvOns6Pzp/CgiAodG9vbHRpcCk6IiwKLSAgIlRvcCBmcmFtZSAoX3RvcCkiOiAizp7CoM6ewqzOnsK9zp/CiSBmcmFtZSAoX3RvcCkiLAotICAiVVJMOiI6ICJVUkw6IiwKLSAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICLOnsKgzp/Cgc6ewq3On8KAzp7Ohc6ezokgzp7Cvc6ewrEgzp7Ohc6ezonOn8KDzp7CrM6ewrPOns6Fzp/ChM6ezoUgzp/ChM6ezo8gVVJMIM6fwoDOns6Pzp/ChSDOns6Pzp7OhM6ewrfOnsKzzp7Ohc6e4oCVIM6ewrHOn8KFzp/ChM6fwozOn8KCIM6ezo8gzp/Cg86fwo3OnsK9zp7OhM6ezoXOn8KDzp7OjM6ezo/On8KCIgotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9lcy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY2ZGFjMC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9lcy5qcworKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotLy8gTEFORzogImRlIiwgRU5DT0RJTkc6IFVURi04Ci17Ci0gICJCb2xkIjogIk5lZ3JpdGEiLAotICAiSXRhbGljIjogIkN1cnNpdmEiLAotICAiVW5kZXJsaW5lIjogIlN1YnJheWFkbyIsCi0gICJTdHJpa2V0aHJvdWdoIjogIlRhY2hhZG8iLAotICAiU3Vic2NyaXB0IjogIlN1YsOtbmRpY2UiLAotICAiU3VwZXJzY3JpcHQiOiAiU3VwZXLDrW5kaWNlIiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJBbGluZWFyIGEgbGEgaXpxdWllcmRhIiwKLSAgIkp1c3RpZnkgQ2VudGVyIjogIkFsaW5lYXIgYWwgY2VudHJvIiwKLSAgIkp1c3RpZnkgUmlnaHQiOiAiQWxpbmVhciBhIGxhIGRlcmVjaGEiLAotICAiSnVzdGlmeSBGdWxsIjogIkp1c3RpZmljYXIiLAotICAiT3JkZXJlZCBMaXN0IjogIkxpc3RhIG51bWVyYWRhIiwKLSAgIkJ1bGxldGVkIExpc3QiOiAiTGlzdGEgbm8gbnVtZXJhZGEiLAotICAiRGVjcmVhc2UgSW5kZW50IjogIlJlZHVjaXIgc2FuZ3LDrWEiLAotICAiSW5jcmVhc2UgSW5kZW50IjogIkF1bWVudGFyIHNhbmdyw61hIiwKLSAgIkZvbnQgQ29sb3IiOiAiQ29sb3IgZGUgbGEgZnVlbnRlIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAiQ29sb3IgZGUgZm9uZG8iLAotICAiSG9yaXpvbnRhbCBSdWxlIjogIlJlZ2xhIGhvcml6b250YWwiLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIkluc2VydGFyIGVubGFjZSB3ZWIiLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJbnNlcnRhci9tb2RpZmljYXIgaW1hZ2VuIiwKLSAgIkluc2VydCBUYWJsZSI6ICJJbnNlcnRhciB1bmEgdGFibGEiLAotICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIlZlciBIVE1MIiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIkVkaXRvciBhIHBhbnRhbGxhIGNvbXBsZXRhIiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIlNvYnJlIGVzdGUgRWRpdG9yIiwKLSAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIkF5dWRhIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiRXN0aWxvIGFjdHVhbCIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJEZXNoYWNlciIsCi0gICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJSZWhhY2VyIiwKLSAgIkN1dCBzZWxlY3Rpb24iOiAiQ29ydGFyIiwKLSAgIkNvcHkgc2VsZWN0aW9uIjogIkNvcGlhciIsCi0gICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJQZWdhciBkZXNkZSBlbCBwb3J0YXBhcGVsZXMiLAotICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiRGlyZWNjacOzbiBkZSBpenF1aWVyZGEgYSBkZXJlY2hhIiwKLSAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIkRpcmVjY2nDs24gZGUgZGVyZWNoYSBhIGl6cXVpZXJkYSIsCi0gICJSZW1vdmUgZm9ybWF0dGluZyI6ICJCb3JyYXIgZm9ybWF0byIsCi0gICJTZWxlY3QgYWxsIjogIlNlbGVjY2lvbmFyIHRvZG8iLAotICAiUHJpbnQgZG9jdW1lbnQiOiAiSW1wcmltaXIgZG9jdW1lbnRvIiwKLSAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiQm9ycmFyIGV0aXF1ZXRhcyBkZSBNU09mZmljZSIsCi0gICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICJCb3JyYXIgbGFzIGV0aXF1ZXRhcyBkZSBmdWVudGUiLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogIsK/RGVzZWEgZWxpbWluYXIgbGFzIGRlZmluaWNpYW9uZXMgZGUgdGlwbyBkZSBmdWVudGU/IiwKLSAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIsK/RGVzZWEgZWxpbWluYXIgbGFzIGRlZmluaWNpb25lcyBkZSB0YW1hw7FvIGRlIGZ1ZW50ZT8iLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICLCv0Rlc2VhIGVsaW1pbmFyIGxhcyBkZWZpbmljaW9uZXMgZGUgY29sb3IgZGUgZnVlbnRlPyIsCi0gICJTcGxpdCBCbG9jayI6ICJEaXZpZGlyIGVsIGJsb3F1ZSIsCi0gICJUb2dnbGUgQm9yZGVycyI6ICJBw7FhZGlyL1F1aXRhciBib3JkZXMiLAotICAiU2F2ZSBhcyI6ICJHdWFyZGFyIGNvbW8iLAotICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICJJbnNlcnRhci9Tb2JyZWVzY3JpYmlyIiwKLSAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiJiM4MjEyOyBmb3JtYXRvICYjODIxMjsiLAotICAiJiM4MjEyOyBmb250ICYjODIxMjsiOiAiJiM4MjEyOyBmdWVudGUgJiM4MjEyOyIsCi0gICImIzgyMTI7IHNpemUgJiM4MjEyOyI6ICImIzgyMTI7IHRhbWHDsW8gJiM4MjEyOyIsCi0gICJIZWFkaW5nIDEiOiAiQ2FiZWNlcmEgMSIsCi0gICJIZWFkaW5nIDIiOiAiQ2FiZWNlcmEgMiIsCi0gICJIZWFkaW5nIDMiOiAiQ2FiZWNlcmEgMyIsCi0gICJIZWFkaW5nIDQiOiAiQ2FiZWNlcmEgNCIsCi0gICJIZWFkaW5nIDUiOiAiQ2FiZWNlcmEgNSIsCi0gICJIZWFkaW5nIDYiOiAiQ2FiZWNlcmEgNiIsCi0gICJOb3JtYWwiOiAiTm9ybWFsIiwKLSAgIkFkZHJlc3MiOiAiRGlyZWNjacOzbiIsCi0gICJGb3JtYXR0ZWQiOiAiRm9ybWF0ZWFkbyIsCi0KLSAgLy9kaWFsb2dzCi0gICJPSyI6ICJBY2VwdGFyIiwKLSAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCi0gICJQYXRoIjogIlJ1dGEiLAotICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIlNlIGVuY3VlbnRyYSBlbiBNT0RPIFRFWFRPLiBVc2UgZWwgYm90w7NuIFs8Pl0gcGFyYSBjYW1iaWFyIGRlIG51ZXZvIGFsIG1vZG8gV1lTSVdZRyIsCi0gICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICJFbCBib3TDs24gZGUgcGVnYXIgbm8gZnVuY2lvbmEgZW4gbG9zIG5hdmVnYWRvcmVzIGRlIE1vemlsbGEgcG9yIG1vdGl2b3MgZGUgc2VndXJpZGFkLiBQcmVzaW9uZSBDVFJMLVYgZW4gc3UgdGVjbGFkbyBwYXJhIHBlZ2FybG8gZGlyZWN0YW1lbnRlIiwKLQotICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRlIGEgbGluayI6ICJOZWNlc2l0YSBzZWxlY2Npb25hciBhbGfDum4gdGV4dG8gYW50ZXMgZGUgY3JlYXIgdW4gbGluayIsCi0gICJZb3VyIERvY3VtZW50IGlzIG5vdCB3ZWxsIGZvcm1lZC4gQ2hlY2sgSmF2YVNjcmlwdCBjb25zb2xlIGZvciBkZXRhaWxzLiI6ICJTdSBkb2N1bWVudG8gbm8gZXN0w6EgYmllbiBmb3JtYWRvLiBDb21wcnVlYmUgbGEgY29uc29sYSBkZSBKYXZhU2NyaXB0IHBhcmEgb2J0ZW5lciBtw6FzIGRldGFsbGVzIiwKLQotICAiQWxpZ25tZW50OiI6ICJBbGluZWFjacOzbjoiLAotICAiTm90IHNldCI6ICJObyBkZWZpbmlkbyIsCi0gICJMZWZ0IjogIkl6cXVpZXJkYSIsCi0gICJSaWdodCI6ICJEZXJlY2hhIiwKLSAgIlRleHR0b3AiOiAiVGV4dG8gU3VwZXJpb3IiLAotICAiQWJzbWlkZGxlIjogIk1lZGlvIEFic29sdXRvIiwKLSAgIkJhc2VsaW5lIjogIkzDrW5lYSBiYXNlIiwKLSAgIkFic2JvdHRvbSI6ICJJbmZlcmlvciBhYnNvbHV0byIsCi0gICJCb3R0b20iOiAiSW5mZXJpb3IiLAotICAiTWlkZGxlIjogIk1lZGlvIiwKLSAgIlRvcCI6ICJTdXBlcmlvciIsCi0KLSAgIkxheW91dCI6ICJEaXN0cmlidWNpw7NuIiwKLSAgIlNwYWNpbmciOiAiRXNwYWNpYWRvIiwKLSAgIkhvcml6b250YWw6IjogImhvcml6b250YWw6IiwKLSAgIkhvcml6b250YWwgcGFkZGluZyI6ICJSZWxsZW5vIGhvcml6b250YWwiLAotICAiVmVydGljYWw6IjogIlZlcnRpY2FsOiIsCi0gICJWZXJ0aWNhbCBwYWRkaW5nIjogIlJlbGxlbm8gVmVydGljYWwiLAotICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiVGFtYcOxbyBkZWwgYm9yZGU6IiwKLSAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiVmFjw61vIHNpIG5vIGRlc2VhIG5pbmfDum4gYm9yZGUiLAotCi0gIC8vSW5zZXJ0IExpbmsKLSAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJJbnNlcnRhci9Nb2RpZmljYXIgdW4gZW5sYWNlIiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiVmFjw61vICggdXNhciBpbXBsw61jaXRvICkiLAotICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOdWV2YSB2ZW50YW5hIChfYmxhbmspIiwKLSAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJNaXNtbyBtYXJjbyAoX3NlbGYpIiwKLSAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiTWFyY28gc3VwZXJpb3IgKF90b3ApIiwKLSAgIk90aGVyIjogIk90cm8iLAotICAiVGFyZ2V0OiI6ICJEZXN0aW5vOiIsCi0gICJUaXRsZSAodG9vbHRpcCk6IjogIlTDrXR1bG8gKFRvb2x0aXApOiIsCi0gICJVUkw6IjogIlVSTDoiLAotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogIkRlYmUgaW50cm9kdWNpciBsYSBVUkwgYSBkb25kZSBhcHVudGEgZXN0ZSBlbmxhY2UiLAotCi0gIC8vIEluc2VydCBUYWJsZQotICAiSW5zZXJ0IFRhYmxlIjogIkHDsWFkaXIgdW5hIHRhYmxhIiwKLSAgIlJvd3M6IjogIkZpbGFzOiIsCi0gICJOdW1iZXIgb2Ygcm93cyI6ICJOw7ptZXJvIGRlIGZpbGFzIiwKLSAgIkNvbHM6IjogIkNvbHVtbmFzOiIsCi0gICJOdW1iZXIgb2YgY29sdW1ucyI6ICJOw7ptZXJvIGRlIGNvbHVtbmFzIiwKLSAgIldpZHRoOiI6ICJBbmNobzoiLAotICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIkFuY2hvIGRlIGxhIHRhYmxhIiwKLSAgIlBlcmNlbnQiOiAiUG9yY2VudGFqZSIsCi0gICJQaXhlbHMiOiAiUGl4ZWxzIiwKLSAgIkVtIjogIkVtIiwKLSAgIldpZHRoIHVuaXQiOiAiVW5pZGFkIGRlIGFuY2h1cmEiLAotICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICJDb2x1bW5hcyBkZSBhbmNobyBmaWpvIiwKLSAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiUG9zaWNpw7NuIGRlIGVzdGEgdGFibGEiLAotICAiQ2VsbCBzcGFjaW5nOiI6ICJFc3BhY2lhZG8gZW50cmUgY2VsZGFzOiIsCi0gICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIkVzcGFjaWFkbyBlbnRyZSBjZWxkYXMgYWR5YWNlbnRlcyIsCi0gICJDZWxsIHBhZGRpbmc6IjogIlJlbGxlbm8gZGUgY2VsZGFzOiIsCi0gICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIkVzY2FwY2lvIGVudHJlIGVsIGNvbnRlbmlkbyB5IGVsIGJvcmRlIGRlIGxhIGNlbGRhIiwKLSAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAiRGViZSBpbnRyb2R1Y2lyIHVuIG7Dum1lcm8gZGUgZmlsYXMiLAotICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICJEZWJlIGludHJvZHVjaXIgdW4gbsO6bWVybyBkZSBjb2x1bW5hcyIsCi0KLSAgLy8gSW5zZXJ0IEltYWdlCi0gICJJbnNlcnQgSW1hZ2UiOiAiSW5zZXJ0YXIgdW5hIGltYWdlbiIsCi0gICJJbWFnZSBVUkw6IjogIkltYWdlbiBVUkw6IiwKLSAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICIiLAotICAiUHJldmlldyI6ICJQcmV2aXN1YWxpemFyIiwKLSAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJQcmV2aXN1YWxpemFyIGVuIHVuYSBudWV2YSB2ZW50YW5hIiwKLSAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJUZXh0byBhbHRlcm5hdGl2bzoiLAotICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiUGFyYSBuYXZlZ2Fkb3JlcyBxdWUgbm8gc29wb3J0YW4gaW3DoWdlbmVzIiwKLSAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zaWNpw7NuIGRlIGxhIGltYWdlbiIsCi0gICJJbWFnZSBQcmV2aWV3OiI6ICJQcmV2aXN1YWxpemFjacOzbiBkZSBsYSBpbWFnZW46IiwKLSAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiRGViZSBpbnRyb2R1Y2lyIGxhIFVSTCIsCi0KLSAgLy8gRWRpdG9yIEhlbHAKLSAgIktleWJvYXJkIHNob3J0Y3V0cyI6ICJBdGFqb3MgZGUgdGVjbGFkbyIsCi0gICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAiRWwgZWRpdG9yIHByb3BvcmNpb25hIGxhcyBzaWd1aWVudGVzIGNvbWJpbmFjaW9uZXM6IiwKLSAgIm5ldyBwYXJhZ3JhcGgiOiAiTnVldm8gcGFycmFmbyIsCi0gICJpbnNlcnQgbGluZWJyZWFrIjogIkluc2VydGFyIHNhbHRvIGRlIGzDrW5lYSIsCi0gICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICJFU3RhYmxlY2VyIGVsIGZvcm1hdG8gYSBwYXJyYWZvIiwKLSAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICJMaW1waWFyIGVsIGNvbnRlbmlkbyBwZWdhZG8gZGVzZGUgV29yZCIsCi0gICJIZWFkaW5ncyI6ICJDYWJlY2VyYXMiLAotICAiQ2xvc2UiOiAiQ2VycmFyIiwKLQotICAvLyBMb2FkaW5nIG1lc3NhZ2VzCi0gICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiQ2FyZ2EgZW4gcHJvY2Vzby4gUG9yIGZhdm9yIGVzcGVyZS4iLAotICAiTG9hZGluZyBwbHVnaW4gJHBsdWdpbiIgOiAiQ2FyZ2FuZG8gZWwgcGx1Z2luICRwbHVnaW4iLAotICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iIDogIlJlZ2lzdHJvIGRlIHBsdWdpbiAkcGx1Z2luIiwgCi0gICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIkNvbnN0cnV5ZW5kbyBvYmpldG8iLAotICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIkdlbmVyYXIgWGluaGEgZnJhbWV3b3JrIiwKLSAgIkluaXQgZWRpdG9yIHNpemUiOiJJbmljaWFyIGVsIHRhbWHDsW8gZGVsIGVkaXRvciIsIAotICAiQ3JlYXRlIFRvb2xiYXIiOiAiQ3JlYXIgYmFycmEgZGUgaGVycmFtaWVudGFzIiwKLSAgIkNyZWF0ZSBTdGF0dXNiYXIiIDogIkNyZWFyIGJhcnJhIGRlIGVzdGFkbyIsCi0gICJSZWdpc3RlciByaWdodCBwYW5lbCIgOiAiUmVnaXN0cmFyIHBhbmVsIGRlcmVjaG8iLCAKLSAgIlJlZ2lzdGVyIGxlZnQgcGFuZWwiIDogIlJlZ2lzdHJhciBwYW5lbCBpenF1aWVyZG8iLCAKLSAgIlJlZ2lzdGVyIGJvdHRvbSBwYW5lbCIgOiAiUmVnaXN0YXIgcGFuZWwgaW5mZXJpb3IiLCAKLSAgIlJlZ2lzdGVyIHRvcCBwYW5lbCIgOiAiUmVnaXN0YXIgcGFuZWwgc3VwZXJpb3IiLCAKLSAgIkZpbmlzaGluZyIgOiAiRmluYWxpemFuZG8iLAotICAKLSAgLy8gQ29sb3JQaWNrZXIKLSAgIkNsaWNrIGEgY29sb3IuLi4iIDogIlNlbGVjY2lvbmUgdW4gY29sb3IuLi4iLAotICAiU2FtcGxlIiA6ICJNdWVzdHJhIiwKLSAgIldlYiBTYWZlOiAiIDogIkNvbG9yIHdlYjogIiwKLSAgIkNvbG9yOiAiIDogIkNvbG9yOiAiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZXUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9ldS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJjMTNmNC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9ldS5qcworKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotLy8gTEFORzogImV1IiwgRU5DT0RJTkc6IFVURi04Ci17Ci0gICJCb2xkIjogIkxvZGlhIiwKLSAgIkl0YWxpYyI6ICJFdHphbmEiLAotICAiVW5kZXJsaW5lIjogIkF6cGltYXJyYXR1YSIsCi0gICJTdHJpa2V0aHJvdWdoIjogIk1hcnJhdHVhIiwKLSAgIlN1YnNjcmlwdCI6ICJBenBpbmRpemVhIiwKLSAgIlN1cGVyc2NyaXB0IjogIkdvaS1pbmRpemVhIiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJFemtlcnJldGFyYSBsZXJyb2thdHUiLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiWmVudHJhdHUiLAotICAiSnVzdGlmeSBSaWdodCI6ICJFc2t1aW5ldGFyYSBsZXJyb2thdHUiLAotICAiSnVzdGlmeSBGdWxsIjogIkp1c3RpZmlrYXR1IiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJaZXJyZW5kYSBvcmRlbmF0dWEiLAotICAiQnVsbGV0ZWQgTGlzdCI6ICJaZXJyZW5kYSBleiBvcmRlbmF0dWEiLAotICAiRGVjcmVhc2UgSW5kZW50IjogIktvc2thIGhhbmRpdHUiLAotICAiSW5jcmVhc2UgSW5kZW50IjogIktvc2thIHR4aWtpdHUiLAotICAiRm9udCBDb2xvciI6ICJUZXN0dS1rb2xvcmVhIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAiQXR6ZWtvIGtvbG9yZWEiLAotICAiSG9yaXpvbnRhbCBSdWxlIjogIk1hcnJhIGhvcml6b250YWxhIiwKLSAgIkluc2VydCBXZWIgTGluayI6ICJMb3R1cmEgdHhlcnRhdHUiLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJcnVkaWEgdHhlcnRhdHUiLAotICAiSW5zZXJ0IFRhYmxlIjogIlRhdWxhIHR4ZXJ0YXR1IiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJJa3VzaSBkb2t1bWVudHVhIEhUTUwtbiIsCi0gICJFbmxhcmdlIEVkaXRvciI6ICJFZGl0b3JlYSBoYW5kaXR1IiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIkVkaXRvcmVhcmkgYnVydXouLi4iLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiTGFndW50emEiLAotICAiQ3VycmVudCBzdHlsZSI6ICJVbmVrbyBlc3RpbG9hIiwKLSAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkRlc2VnaW4iLAotICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiQmVycmVnaW4iLAotICAiQ3V0IHNlbGVjdGlvbiI6ICJFYmFraSBoYXV0YWtldGEiLAotICAiQ29weSBzZWxlY3Rpb24iOiAiS29waWF0dSBoYXV0YWtldGEiLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiSXRzYXRzaSBhcmJlbGVhbiBkYWdvZW5hIiwKLSAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIkV6a2VycmV0aWsgZXNrdWluZXRhcmFrbyBub3JhYmlkZWEiLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiRXNrdWluZXRpayBlemtlcnJldGFyYWtvIG5vcmFiaWRlYSIsCi0gICJSZW1vdmUgZm9ybWF0dGluZyI6ICJGb3JtYXRvYSBrZW5kdSIsCi0gICJTZWxlY3QgYWxsIjogIkRlbmEgYXVrZXJhdHUiLAotICAiUHJpbnQgZG9jdW1lbnQiOiAiRG9rdW1lbnR1YSBpbnByaW1hdHUiLAotICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICJNU09mZmljZSBldGlrZXRhayBlemFiYXR1IiwKLSAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogIkV6YWJhdHUgdGVzdHVhcmVuIGV6YXVnYXJyaWFrIiwKLSAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICJMZXRyYS10aXBvYWsgZXphYmF0dSBuYWhpIGFsIGRpdHV6dT8iLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiTGV0cmEtdGlwb2VuIG5ldXJyaWFrIGV6YWJhdHUgbmFoaSBhbCBkaXR1enU/IiwKLSAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiTGV0cmEtdGlwb2VuIGtvbG9yZWFrIGV6YWJhdHUgbmFoaSBhbCBkaXR1enU/IiwKLSAgIlNwbGl0IEJsb2NrIjogIkJsb2tlYSB6YXRpdHUiLAotICAiVG9nZ2xlIEJvcmRlcnMiOiAiRXJ0emFrIHRydWthdHUiLAotICAiU2F2ZSBhcyI6ICJHb3JkZSBob25lbGE6IiwKLSAgIkluc2VydC9PdmVyd3JpdGUiOiAiVHhlcnRhdHUvR2FpbmlkYXR6aSIsCi0gICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiYjODIxMjsgRm9ybWF0dWEgJiM4MjEyOyIsCi0gICJIZWFkaW5nIDEiOiAiR29pYnVydWEgMSIsCi0gICJIZWFkaW5nIDIiOiAiR29pYnVydWEgMiIsCi0gICJIZWFkaW5nIDMiOiAiR29pYnVydWEgMyIsCi0gICJIZWFkaW5nIDQiOiAiR29pYnVydWEgNCIsCi0gICJIZWFkaW5nIDUiOiAiR29pYnVydWEgNSIsCi0gICJIZWFkaW5nIDYiOiAiR29pYnVydWEgNiIsCi0gICJOb3JtYWwiOiAiTm9ybWFsYSIsCi0gICJBZGRyZXNzIjogIkhlbGJpZGVhIiwKLSAgIkZvcm1hdHRlZCI6ICJGb3JtYXRlYXR1YSIsCi0KLSAgLy9kaWFsb2dzCi0gICJPSyI6ICJBZG9zIiwKLSAgIkNhbmNlbCI6ICJVdHppIiwKLSAgIlBhdGgiOiAiQmlkZWEiLAotICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIlRFU1RVIGVyYW4gYXJpIHphcmEuIEVyYWJpbCBlemF6dSBbPD5dIGJvdG9pYSBXWVNJV0lHIGVyYXJhIGl0enVsdHpla28uIiwKLSAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIkl0c2F0c2kgYm90b2lhIGV6IGRhYmlsIE1vemlsbGFuIG9pbmFycml0dXRha28gbmFiaWdhdHphaWxlZXRhbiAoYXJyYXpvaSB0ZWtuaWtvZW5nYXRpaykuIFNhY2F0dSBDVFJMLVYgenVyZSB0ZWtsYXR1YW4sIHp1emVuZWFuIGl0c2FzdGVrby4iLAotCi0gICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGUgYSBsaW5rIjogIlRlc3R1LWF0YWwgYmF0IGF1a2VyYXR1IGJlaGFyIGR1enUgbGVoZW5kYWJpemksIGxvdHVyYSBiYXQgc29ydHpla28iLAotICAiWW91ciBEb2N1bWVudCBpcyBub3Qgd2VsbCBmb3JtZWQuIENoZWNrIEphdmFTY3JpcHQgY29uc29sZSBmb3IgZGV0YWlscy4iOiAiWnVyZSBkb2t1bWVudHVhayBleiBkdSBmb3JtYXR1IHp1emVuYS4gQmVnaXJhIGV6YXp1IEphdmFTY3JpcHQga29udHNvbGEgeGVoZXRhc3VuZXRhcmFrby4iLAotCi0gICJBbGlnbm1lbnQ6IjogIkxlcnJva2F0emVhOiIsCi0gICJOb3Qgc2V0IjogIkV6IGdhaXR1YSIsCi0gICJMZWZ0IjogIkV6a2VycmV0YXJhIiwKLSAgIlJpZ2h0IjogIkVza3VpbmV0YXJhIiwKLSAgIlRleHR0b3AiOiAiSXJ1ZGlhcmVuIGdvaWFsZGVhbiIsCi0gICJBYnNtaWRkbGUiOiAiSXJ1ZGlhcmVuIGVyZGlhbiIsCi0gICJCYXNlbGluZSI6ICJJcnVkaWFyZW4gb2luZWFuIiwKLSAgIkFic2JvdHRvbSI6ICJJcnVkaWFyZW4gYmVoZWthbGRlYW4iLAotICAiQm90dG9tIjogIkJlaGVhbiIsCi0gICJNaWRkbGUiOiAiRXJkaWFuIiwKLSAgIlRvcCI6ICJHb2lhbiIsCi0KLSAgIkxheW91dCI6ICJEaXNlaW51YSIsCi0gICJTcGFjaW5nIjogIlRhcnRlYSIsCi0gICJIb3Jpem9udGFsOiI6ICJIb3Jpem9udGFsYToiLAotICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIkJldGVnYXJyaSBob3Jpem9udGFsYSIsCi0gICJWZXJ0aWNhbDoiOiAiQmVydGlrYWxhOiIsCi0gICJWZXJ0aWNhbCBwYWRkaW5nIjogIkJldGVnYXJyaSBiZXJ0aWthbGEiLAotICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiRXJ0emFyZW4gbG9kaWVyYToiLAotICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJVenRhenUgaHV0c2lrIGVydHppayBleiBzb3J0emVrbyIsCi0KLSAgLy9JbnNlcnQgTGluawotICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIkxvdHVyYSB0eGVydGF0dS9hbGRhdHUiLAotICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJCYXQgZXJlIGV6IChpbXBsaXppdHVraSBlcmFiaWxpKSIsCi0gICJOZXcgd2luZG93IChfYmxhbmspIjogIkxlaGlvIGJlcnJpYW4gKF9ibGFuaykiLAotICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIkZyYW1lIGJlcmVhbiAoX3NlbGYpIiwKLSAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiR29pa28gZnJhbWUtYW4gKF90b3ApIiwKLSAgIk90aGVyIjogIkJlc3RlIGJhdCIsCi0gICJUYXJnZXQ6IjogIkhlbGJ1cnVhOiIsCi0gICJUaXRsZSAodG9vbHRpcCk6IjogIkl6ZW5idXJ1YSAoYXJnaWJpZGVhKToiLAotICAiVVJMOiI6ICJVUkwtYToiLAotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogIkxvdHVyYXJlbiBoZWxidXJ1IGRlbiBVUkwtYSBpZGF0emkgYmVoYXIgZHV6dSIsCi0KLSAgLy8gSW5zZXJ0IFRhYmxlCi0gICJJbnNlcnQgVGFibGUiOiAiVGF1bGEgdHhlcnRhdHUiLAotICAiUm93czoiOiAiTGVycm9hazoiLAotICAiTnVtYmVyIG9mIHJvd3MiOiAiTGVycm8ta29wdXJ1YSIsCi0gICJDb2xzOiI6ICJadXRhYmVhazoiLAotICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiWnV0YWJlLWtvcHVydWEiLAotICAiV2lkdGg6IjogIlphYmFsZXJhOiIsCi0gICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiVGF1bGFyZW4gemFiYWxlcmEiLAotICAiUGVyY2VudCI6ICJQb3J0emVudGFpYSIsCi0gICJQaXhlbHMiOiAiUGl4ZWxhayIsCi0gICJFbSI6ICJFbSIsCi0gICJXaWR0aCB1bml0IjogIlphYmFsZXJhLXVuaXRhdGVhIiwKLSAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiWmFiYWxlcmEgZmlua29kdW4genV0YWJlYWsiLAotICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICJUYXVsYSBob25lbiBrb2thcGVuYSIsCi0gICJDZWxsIHNwYWNpbmc6IjogIkdlbGF4a2EtdGFydGVhOiIsCi0gICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIkdlbGF4a2EgYXV6b2tpZGVlbiBhcnRla28gdGFydGVhIiwKLSAgIkNlbGwgcGFkZGluZzoiOiAiR2VsYXhrYXJlbiBiZXRlZ2FycmlhOiIsCi0gICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIkdlbGF4a2FyZW4gZWR1a2lhIGV0YSBlcnR6YXJlbiBhcnRla28gdGFydGVhIiwKLSAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAiTGVycm8ta29wdXJ1YSBpZGF0emkgYmVoYXIgZHV6dSIsCi0gICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiBjb2x1bW5zIjogIlp1dGFiZS1rb3B1cnVhIGlkYXR6aSBiZWhhciBkdXp1IiwKLQotICAvLyBJbnNlcnQgSW1hZ2UKLSAgIkluc2VydCBJbWFnZSI6ICJJcnVkaWEgdHhlcnRhdHUiLAotICAiSW1hZ2UgVVJMOiI6ICJJcnVkaWFyZW4gVVJMLWE6IiwKLSAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICJJZGF0eiBlemF6dSBpcnVkaWFyZW4gVVJMLWEgaGVtZW4iLAotICAiUHJldmlldyI6ICJBdXJyZWJpc3RhIiwKLSAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJBdXJyZWlrdXNpIGlydWRpYSBiZXN0ZSBsZWhpbyBiYXRlYW4iLAotICAiQWx0ZXJuYXRlIHRleHQ6IjogIlRlc3R1IGFsdGVybmF0aWJvYToiLAotICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiSXJ1ZGlyaWsgb25hcnR6ZW4gZXogZHV0ZW4gbmFiaWdhdHphaWxlZW50emF0IiwKLSAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiSXJ1ZGlhcmVuIGtva2FwZW5hIiwKLSAgIkltYWdlIFByZXZpZXc6IjogIklydWRpYXJlbiBhdXJyZWJpc3RhOiIsCi0gICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIlVSTC1hIGlkYXR6aSBiZWhhciBkdXp1IiwKLQotICAiYnV0dG9uX2JvbGQiOiAiZGUvYm9sZC5naWYiLAotICAiYnV0dG9uX2l0YWxpYyI6ICJkZS9pdGFsaWMuZ2lmIiwKLSAgImJ1dHRvbl91bmRlcmxpbmUiOiAiZGUvdW5kZXJsaW5lLmdpZiIsCi0KLSAgLy8gRWRpdG9yIEhlbHAKLSAgIktleWJvYXJkIHNob3J0Y3V0cyI6ICJMYXN0ZXItdGVrbGFrIiwKLSAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICJFZGl0b3JlYWsgb25kb3JlbmdvIHRla2xhLWtvbmJpbmF6aW9hayBlc2thaW50emVuIGRpdHU6IiwKLSAgIm5ldyBwYXJhZ3JhcGgiOiAiUGFyYWdyYWZvIGJlcnJpYSIsCi0gICJpbnNlcnQgbGluZWJyZWFrIjogIkxlcnJvLWphdXppYSB0eGVydGF0dSIsCi0gICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICJGb3JtYXR1YSBlemFycmkgcGFyYWdyYWZvYXJpIiwKLSAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICJXb3JkLWV0aWsgaXRzYXRzaXRha28gZWR1a2lhIGV6YWJhdHUiLAotICAiSGVhZGluZ3MiOiAiR29pYnVydWFrIiwKLSAgIkNsb3NlIjogIkl0eGkiLAotCi0gIC8vIExvYWRpbmcgbWVzc2FnZXMKLSAgIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ISI6ICJLYXJnYXR6ZW4uIEl0eGFyb24gbWVzZWRleiIsCi0gICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIiA6ICIkcGx1Z2luIHBsdWdpbmEga2FyZ2F0emVuIiwKLSAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIiA6ICIkcGx1Z2luIHBsdWdpbmEgZXJyZWdpc3RyYXR1IiwgCi0gICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIk9iamVrdHVhIGVyYWlraXR6ZW4iLAotICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIlhpbmhhIEZyYW1ld29yayBzb3J0emVuIiwKLSAgIkluaXQgZWRpdG9yIHNpemUiOiJFZGl0b3JlYXJlbiBoYXNpZXJha28gbmV1cnJpYSIsIAotICAiQ3JlYXRlIFRvb2xiYXIiOiAiVHJlc25hLWJhcnJhIHNvcnR1IiwKLSAgIkNyZWF0ZSBTdGF0dXNiYXIiIDogIkVnb2VyYS1iYXJyYSBzb3J0dSIsCi0gICJSZWdpc3RlciByaWdodCBwYW5lbCIgOiAiRXNrdWluLXBhbmVsYSBlcnJlZ2lzdHJhdHUiLCAKLSAgIlJlZ2lzdGVyIGxlZnQgcGFuZWwiIDogIkV6a2VyLXBhbmVsYSBlcnJlZ2lzdHJhdHUiLCAKLSAgIlJlZ2lzdGVyIGJvdHRvbSBwYW5lbCIgOiAiQmVoZWtvIHBhbmVsYSBlcnJlZ2lzdHJhdHUiLCAKLSAgIlJlZ2lzdGVyIHRvcCBwYW5lbCIgOiAiR29pa28gcGFuZWxhIGVycmVnaXN0cmF0dSIsIAotICAiRmluaXNoaW5nIiA6ICJCdWthdHplbiIsIAotICAKLSAgLy8gQ29sb3JQaWNrZXIKLSAgIkNsaWNrIGEgY29sb3IuLi4iIDogIktvbG9yZSBiYXQgYXVrZXJhdHUuLi4iLAotICAiU2FtcGxlIiA6ICJMYWdpbmEiLAotICAiV2ViIFNhZmU6ICIgOiAiV2ViIFNhZmU6ICIsCi0gICJDb2xvcjogIiA6ICJLb2xvcmVhOiAiCi19OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZmEuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZDBmY2EuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZmEuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAot77u/Ly8gSTE4TiBjb25zdGFudHMNCi0vLyBMQU5HOiAiZmEiLCBFTkNPRElORzogVVRGLTgNCi17DQotICAiQm9sZCI6ICLYttiu24zZhSIsDQotICAiSXRhbGljIjogItmF2YjYsdioIiwNCi0gICJVbmRlcmxpbmUiOiAi2LLbjNixINiu2LciLA0KLSAgIlN0cmlrZXRocm91Z2giOiAi2LHZiCDYrti3IiwNCi0gICJTdWJzY3JpcHQiOiAi2LLbjNix2YjZhtivIiwNCi0gICJTdXBlcnNjcmlwdCI6ICLYqNin2YTYp9mI2YbYryIsDQotICAiSnVzdGlmeSBMZWZ0IjogItiq2LHYp9iyINin2LIg2obZviIsDQotICAiSnVzdGlmeSBDZW50ZXIiOiAi2KrYsdin2LIg2K/YsSDZiNiz2LciLA0KLSAgIkp1c3RpZnkgUmlnaHQiOiAi2KrYsdin2LIg2K/YsSDYsdin2LPYqiIsDQotICAiSnVzdGlmeSBGdWxsIjogItiq2LHYp9iyINin2LIg2obZviDZiCDYsdin2LPYqiIsDQotICAiT3JkZXJlZCBMaXN0IjogItmB2YfYsdiz2Kog2YXYsdiq2KgiLA0KLSAgIkJ1bGxldGVkIExpc3QiOiAi2YHZh9ix2LPYqiDar9mE2YjZhNmHINin24wiLA0KLSAgIkRlY3JlYXNlIEluZGVudCI6ICLaqdin2YfYtCDYs9ixINiu2LciLA0KLSAgIkluY3JlYXNlIEluZGVudCI6ICLYp9mB2LLYp9uM2LQg2LPYsSDYrti3IiwNCi0gICJGb250IENvbG9yIjogItix2YbaryDZgdmE2YUiLA0KLSAgIkJhY2tncm91bmQgQ29sb3IiOiAi2LHZhtqvINm+2LMg2LLZhduM2YbZhyIsDQotICAiSG9yaXpvbnRhbCBSdWxlIjogItiu2Lcg2KfZgdmC24wiLA0KLSAgIkluc2VydCBXZWIgTGluayI6ICLYp9mB2LLZiNiv2YYg2YTbjNmG2qkg2YjYqCIsDQotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICLYp9mB2LLZiNiv2YYg24zYpyDZiNuM2LHYp9uM2LQg2KrYtdmI24zYsSIsDQotICAiSW5zZXJ0IFRhYmxlIjogItin2YHYstmI2K/ZhiDYrNiv2YjZhCIsDQotICAiVG9nZ2xlIEhUTUwgU291cmNlIjogItmF2LTYp9mH2K/ZhyDbjNinINi52K/ZhSDZhdi02KfZh9iv2Ycg2YXYqtmGINiv2LEg2YLYp9mE2KggSFRNTCIsDQotICAiRW5sYXJnZSBFZGl0b3IiOiAi2KjYstix2q8g2qnYsdiv2YYg2YjbjNix2KfbjNi0INqv2LEiLA0KLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogItiv2LHYqNin2LHZhyDYp9uM2YYg2YjbjNix2KfbjNi0INqv2LEiLA0KLSAgIkhlbHAgdXNpbmcgZWRpdG9yIjogItix2KfZh9mG2YXYp9uMINin2LPYqtmB2KfYr9mHINmI24zYsdin24zYtCDar9ixIiwNCi0gICJDdXJyZW50IHN0eWxlIjogIti024zZiNmHINqp2YbZiNmG24wiLA0KLSAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogItio2LHar9ix2K/Yp9mG2K/ZhiDYotiu2LHbjNmGINi52YXZhCIsDQotICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi2KfZhtis2KfZhSDZhdis2K/YryDYotiu2LHbjNmGINi52YXZhCIsDQotICAiQ3V0IHNlbGVjdGlvbiI6ICLYqNix24zYr9mGINin2YbYqtiu2KfYqCDYtNiv2YciLA0KLSAgIkNvcHkgc2VsZWN0aW9uIjogItqp2b7bjCDYp9mG2KrYrtin2Kgg2LTYr9mHIiwNCi0gICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICLahtiz2KjYp9mG2K/ZhiDYp9iyINiq2K7YqtmHINqp2KfYsSIsDQotICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAi2KzZh9iqINin2LIg2obZviDYqNmHINix2KfYs9iqIiwNCi0gICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICLYrNmH2Kog2KfYsiDYsdin2LPYqiDYqNmHINqG2b4iLA0KLSAgIlJlbW92ZSBmb3JtYXR0aW5nIjogItit2LDZgSDZgdix2YXYqiDYqNmG2K/bjCIsDQotICAiU2VsZWN0IGFsbCI6ICLYp9mG2KrYrtin2Kgg2YfZhdmHIiwNCi0gICJQcmludCBkb2N1bWVudCI6ICLahtin2b4g2LPZhtivIiwNCi0gICJDbGVhciBNU09mZmljZSB0YWdzIjogItm+2KfaqSDaqdix2K/ZhiDZhdiq2YYg2KfYsiDYqNix2obYs9ioINmH2KfbjCBNU09mZmljZSIsDQotICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAi2b7Yp9qpINqp2LHYr9mGINmF2KrZhiDYp9iyINmF2LTYrti12KfYqiDZgdmI2YbYqiIsDQotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogItii24zYpyDYqtmF2KfbjNmEINiv2KfYsduM2K8g2LjYp9mH2LEg2YHZhNmFINix2Kcg2b7Yp9qpINqp2YbbjNiv2J8iLA0KLSAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogItii24zYpyDYqtmF2KfbjNmEINiv2KfYsduM2K8g2KfZhtiv2KfYstmHINmC2YTZhSDYsdinINm+2KfaqSDaqdmG24zYryIsDQotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICLYotuM2Kcg2KrZhdin24zZhCDYr9in2LHbjNivINix2YbaryDZgtmE2YUg2LHYpyDZvtin2qkg2qnZhtuM2K/YnyIsDQotICAiU3BsaXQgQmxvY2siOiAi2KjZhNin2qkg2KzYr9in2LPYp9iy24wiLA0KLSAgIlRvZ2dsZSBCb3JkZXJzIjogItmB2LnYp9mEL9i624zYsSDZgdi52KfZhCDaqdix2K/ZhiDZhNio2Ycg2YfYpyIsDQotICAiU2F2ZSBhcyI6ICLYsNiu24zYsdmHINmF2KfZhtmG2K8uLi4iLA0KLSAgIkluc2VydC9PdmVyd3JpdGUiOiAi2KfZgdiy2YjYr9mGL9is2KfZhtmI24zYs9uMIiwNCi0gICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiYjODIxMjsg2YLYp9mE2KggJiM4MjEyOyIsDQotICAiSGVhZGluZyAxIjogItiq24zYqtixIDEiLA0KLSAgIkhlYWRpbmcgMiI6ICLYqtuM2KrYsSAyIiwNCi0gICJIZWFkaW5nIDMiOiAi2KrbjNiq2LEgMyIsDQotICAiSGVhZGluZyA0IjogItiq24zYqtixIDQiLA0KLSAgIkhlYWRpbmcgNSI6ICLYqtuM2KrYsSA1IiwNCi0gICJIZWFkaW5nIDYiOiAi2KrbjNiq2LEgNiIsDQotICAiTm9ybWFsIjogItmF2LnZhdmI2YTbjCIsDQotICAiQWRkcmVzcyI6ICLYotiv2LHYsyIsDQotICAiRm9ybWF0dGVkIjogItmC2KfZhNioINio2YbYr9uMINi02K/ZhyIsDQotDQotICAvL2RpYWxvZ3MNCi0gICJPSyI6ICLYqNmE2YciLA0KLSAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiLA0KLSAgIlBhdGgiOiAi2YXYs9uM2LEiLA0KLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICLYr9ixINmF2K8g2YXYqtmG24wg2YfYs9iq24zYry4gINin2LIg2K/aqdmF2YcgWzw+XSDYp9iz2KrZgdin2K/ZhyDZhtmF2KfbjNuM2K8g2KrYpyDYqNmHINmF2K8gV1lTSVdZRyDYqNix2q/Ysdiv24zYry4iLA0KLSAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAi2K/aqdmF2Ycg2obYs9io2KfZhtiv2YYg2K/YsSDZhdix2YjYsdqv2LHZh9in24wg2LPYsduMIE1vemlsbGEg2qnYp9ixINmG2YXbjCDaqdmG2K8gKNio2Ycg2K/ZhNin24zZhCDZgdmG24wg2KfZhdmG24zYqtuMKS7YqNix2KfbjCDahtiz2KjYp9mG2K/ZhiDZhdiz2KrZgtuM2YUg2Iwg2K/aqdmF2YcgQ1RSTC1WINix2Kcg2K/YsSDYtdmB2K3ZhyDaqdmE24zYryDYqNiy2YbbjNivLiIsDQotICAiWW91ciBEb2N1bWVudCBpcyBub3Qgd2VsbCBmb3JtZWQuIENoZWNrIEphdmFTY3JpcHQgY29uc29sZSBmb3IgZGV0YWlscy4iOiAi2LPZhtivINi02YXYpyDYqNiv2LHYs9iq24wg2YLYp9mE2Kgg2KjZhtiv24wg2YbYtNiv2Ycg2KfYs9iqLiDYqNix2KfbjCDYp9i32YTYp9i52KfYqiDYqNuM2LTYqtixINm+2KfbjNin2YbZhyDZhtmF2KfbjNi0INis2KfZiNin2KfYs9qp2LHbjNm+2Kog2LHYpyDYqNix2LHYs9uMINqp2YbbjNivLiIsDQotDQotICAiQWxpZ25tZW50OiI6ICLYqtix2KfYsiDYqNmG2K/bjCIsDQotICAiTm90IHNldCI6ICLYqtmG2LjbjNmFINmG2LTYr9mHIiwNCi0gICJMZWZ0IjogItqG2b4iLA0KLSAgIlJpZ2h0IjogItix2KfYs9iqIiwNCi0gICJUZXh0dG9wIjogItio2KfZhNin24wg2YXYqtmGIiwNCi0gICJBYnNtaWRkbGUiOiAi2K/ZgtuM2YLYpyDZiNiz2LciLA0KLSAgIkJhc2VsaW5lIjogItin2KjYqtiv2KfbjCDYrti3IiwNCi0gICJBYnNib3R0b20iOiAi2K/ZgtuM2YLYpyDZvtin24zbjNmGIiwNCi0gICJCb3R0b20iOiAi2b7Yp9uM24zZhiIsDQotICAiTWlkZGxlIjogItmI2LPYtyIsDQotICAiVG9wIjogItio2KfZhNinIiwNCi0NCi0gICJMYXlvdXQiOiAi2YTYp9uM2YciLA0KLSAgIlNwYWNpbmciOiAi2YHYp9i12YTZhyDar9iw2KfYsduMIiwNCi0gICJIb3Jpem9udGFsOiI6ICLYp9mB2YLbjCIsDQotICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogItm+2LHaqdmG2YbYr9mHINin2YHZgtuMIiwNCi0gICJWZXJ0aWNhbDoiOiAi2LnZhdmI2K/bjCIsDQotICAiVmVydGljYWwgcGFkZGluZyI6ICLZvtix2qnZhtmG2K/ZhyDYudmF2YjYr9uMIiwNCi0gICJCb3JkZXIgdGhpY2tuZXNzOiI6ICLYttiu2KfZhdiqINmE2KjZhyIsDQotICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICLYqNix2KfbjCDYqNiv2YjZhiDZhNio2Ycg2K7Yp9mE24wg2LHZh9inINqp2YYiLA0KLQ0KLSAgLy9JbnNlcnQgTGluaw0KLSAgIkluc2VydC9Nb2RpZnkgTGluayI6ICLYp9mB2LLZiNiv2YYgLyDZiNuM2LHYp9uM2LQg2YTbjNmG2qkiLA0KLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi2YfbjNqG2qnYr9in2YUgKNin2LPYqtmB2KfYr9mHINin2LIg2KjYr9mI2YYg2LTYsdi3KSIsDQotICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICLZvtmG2KzYsdmHINis2K/bjNivIChfYmxhbmspIiwNCi0gICJTYW1lIGZyYW1lIChfc2VsZikiOiAi2YHYsduM2YUg24zaqdiz2KfZhiAoX3NlbGYpIiwNCi0gICJUb3AgZnJhbWUgKF90b3ApIjogItmB2LHbjNmFINio2KfZhNin24zbjCAoX3RvcCkiLA0KLSAgIk90aGVyIjogItiz2KfbjNixIiwNCi0gICJUYXJnZXQ6IjogItmH2K/ZgSIsDQotICAiVGl0bGUgKHRvb2x0aXApOiI6ICLYudmG2YjYp9mGICjYsdin2YfZhtmF2KfbjCDbjNqpINiu2LfbjCkiLA0KLSAgIlVSTDoiOiAiVVJMOiIsDQotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogItio2KfbjNivIFVSTNuMINqp2Ycg2KfbjNmGINmE24zZhtqpINio2Ycg2KLZhiDYp9i02KfYsdmHINiv2KfYsdivINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8iLA0KLSAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayI6ICLYqNin24zYryDZgtio2YQg2KfYsiDYs9in2K7YqiDZhNuM2YbaqSDYjCDZhdiq2YbbjCDYsdinINin2YbYqtiu2KfYqCDZhtmF2KfbjNuM2K8iLA0KLQ0KLSAgLy8gSW5zZXJ0IFRhYmxlDQotICAiSW5zZXJ0IFRhYmxlIjogItin2YHYstmI2K/ZhiDYrNiv2YjZhCIsDQotICAiUm93czoiOiAi2LHYr9uM2YEg2YfYpyIsDQotICAiTnVtYmVyIG9mIHJvd3MiOiAi2KrYudiv2KfYryDYsdiv24zZgSDZh9inIiwNCi0gICJDb2xzOiI6ICLYs9iq2YjZhiDZh9inIiwNCi0gICJOdW1iZXIgb2YgY29sdW1ucyI6ICLYqti52K/Yp9ivINiz2KrZiNmGINmH2KciLA0KLSAgIldpZHRoOiI6ICLYt9mI2YQiLA0KLSAgIldpZHRoIG9mIHRoZSB0YWJsZSI6ICLYt9mI2YQg2KzYr9mI2YQiLA0KLSAgIlBlcmNlbnQiOiAi2K/Ysdi12K8iLA0KLSAgIlBpeGVscyI6ICLZvtuM2qnYs9mEINmH2KciLA0KLSAgIkVtIjogIkVtIiwNCi0gICJXaWR0aCB1bml0IjogItmI2KfYrdivINi32YjZhCIsDQotICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICLYs9iq2YjZhiDZh9in24wg2LfZiNmEINir2KfYqNiqIiwNCi0gICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogItmF2YjZgti524zYqiDbjNin2KjbjCDYp9uM2YYg2KzYr9mI2YQiLA0KLSAgIkNlbGwgc3BhY2luZzoiOiAi2YHYp9i12YTZhyDYs9mE2YjZhCDZh9inIiwNCi0gICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogItmB2KfYtdmE2Ycg2KjbjNmGINiz2YTZiNmEINmH2KfbjCDZh9mF2KzZiNin2LEiLA0KLSAgIkNlbGwgcGFkZGluZzoiOiAi2b7YsSDaqdmG2YbYr9mHINiz2YTZiNmEIiwNCi0gICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogItmB2KfYtdmE2Ycg2KjbjNmGINmF2K3YqtmI2Kcg2Ygg2YTYqNmHINiv2LEg2LPZhNmI2YQiLA0KLSAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAi2KjYp9uM2K8g2KrYudiv2KfYryDYsdiv24zZgSDZh9inINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8iLA0KLSAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAi2KjYp9uM2K8g2KrYudiv2KfYryDYs9iq2YjZhiDZh9inINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8iLA0KLQ0KLSAgLy8gSW5zZXJ0IEltYWdlDQotICAiSW5zZXJ0IEltYWdlIjogItin2YHYstmI2K/ZhiDYqti12YjbjNixIiwNCi0gICJJbWFnZSBVUkw6IjogIlVSTCDYqti12YjbjNixIiwNCi0gICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiVVJMINiq2LXZiNuM2LEg2LHYpyDYp9uM2YbYrNinINmI2KfYsdivINqp2YbbjNivIiwNCi0gICJQcmV2aWV3IjogItm+24zYtCDZhtmF2KfbjNi0IiwNCi0gICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAi2b7bjNi0INmG2YXYp9uM2LQg2KrYtdmI24zYsSDYr9ixINm+2YbYrNix2Ycg2KfbjCDYrNiv24zYryIsDQotICAiQWx0ZXJuYXRlIHRleHQ6IjogItmF2KrZhiDYrNin24zar9iy24zZhiIsDQotICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAi2KjYsdin24wg2YXYsdmI2LHar9ix2YfYp9uM24wg2qnZhyDYp9iyINiq2LXYp9mI24zYsSDZvti02KrbjNio2KfZhtuMINmG2YXbjCDaqdmG2YbYryIsDQotICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICLZhdmI2YLYuduM2Kog24zYp9io24wg2KrYtdmI24zYsSIsDQotICAiSW1hZ2UgUHJldmlldzoiOiAi2b7bjNi0INmG2YXYp9uM2LQg2KrYtdmI24zYsSIsDQotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICLYtNmF2Kcg2KjYp9uM2K8gVVJMINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8iLA0KLQ0KLSAgLy8gdG9vbGJhcg0KLSAgLyoNCi0gICJidXR0b25fYm9sZCI6ICJmci9ib2xkLmdpZiIsDQotICAiYnV0dG9uX3VuZGVybGluZSI6ICJmci91bmRlcmxpbmUuZ2lmIiwNCi0gICJidXR0b25fc3RyaWtldGhyb3VnaCI6ICJmci9zdHJpa2V0aHJvdWdoLmdpZiIsDQotICAqLw0KLQ0KLSAgLy8gRWRpdG9yIEhlbHANCi0gICJYaW5oYSBIZWxwIjogItix2KfZh9mG2YXYp9uMIFhpbmhhIiwNCi0gICJFZGl0b3IgSGVscCI6ICLYsdin2YfZhtmF2KfbjCDZiNuM2LHYp9uM2LTar9ixIiwNCi0gICJLZXlib2FyZCBzaG9ydGN1dHMiOiAi2YXbjNin2YbYqNix2YfYp9uMINi12YHYrdmHINqp2YTbjNivIiwNCi0gICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAi2YjbjNix2KfbjNi02q/YsSDYp9iz2KrZgdin2K/ZhyDYp9iyINqp2YTbjNivINmH2KfbjCDar9ix2YjZh9uMINiy24zYsSDYsdinINmF2LPbjNixINmF24wg2LPYp9iy2K8gOiIsDQotICAiRU5URVIiOiAiRU5UUkVFIiwNCi0gICJuZXcgcGFyYWdyYXBoIjogItm+2KfYsdin2q/Ysdin2YEg2KzYr9uM2K8iLA0KLSAgIlNISUZULUVOVEVSIjogIlNISUZUK0VOVFJFRSIsDQotICAiaW5zZXJ0IGxpbmVicmVhayI6ICLYp9mB2LLZiNiv2YYg2KzYr9inINqp2YbZhtiv2Ycg2K7YtyIsDQotICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAi2KrYutuM24zYsSDZgtin2YTYqCDYqNmHINm+2KfYsdin2q/Ysdin2YEiLA0KLSAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICLYqtmF24zYsiDaqdix2K/ZhiDZhdit2KrZiNin24wg2obYs9io2KfZhtiv2Ycg2LTYr9mHINin2LIgV29yZCIsDQotICAiSGVhZGluZ3MiOiAi2LnZhtmI2KfZhiDar9iw2KfYsduMIiwNCi0gICJDbG9zZSI6ICLYqNiz2KrZhiIsDQotDQotICAvLyBMb2FkaW5nIG1lc3NhZ2VzDQotICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQgISI6ICLYqNin2LHar9iw2KfYsduMINiv2LEg2K3Yp9mEINin2YbYrNin2YUg2KfYs9iqLiDZhNi32YHYpyDYtdio2LEg2qnZhtuM2K8gISIsDQotICAiQ29uc3RydWN0aW5nIG1haW4gb2JqZWN0IjogItiz2KfYrtiq2YYg2LTbjNihINin2LXZhNuMIiwNCi0gICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogItiz2KfYrtiq2YYg2LTbjNihIiwNCi0gICJSZWdpc3RlciBwYW5lbCByaWdodCI6ICLYq9io2Kog2YLYp9ioINix2KfYs9iqIiwNCi0gICJSZWdpc3RlciBwYW5lbCBsZWZ0IjogItir2KjYqiDZgtin2Kgg2obZviIsDQotICAiUmVnaXN0ZXIgcGFuZWwgdG9wIjogItir2KjYqiDZgtin2Kgg2KjYp9mE2KciLA0KLSAgIlJlZ2lzdGVyIHBhbmVsIGJvdHRvbSI6ICLYq9io2Kog2YLYp9ioINm+2KfbjNuM2YYiLA0KLSAgIkNyZWF0ZSBUb29sYmFyIjogItiz2KfYrtiqINmG2YjYp9ixINin2KjYstin2LEiLA0KLSAgIkNyZWF0ZSBTdGF0dXNCYXIiOiAi2LPYp9iu2Kog2YbZiNin2LEg2YjYtti524zYqiIsDQotICAiR2VuZXJhdGUgWGluaGEgb2JqZWN0IjogItiq2YjZhNuM2K8g2LTbjNihIFhpbmhhIiwNCi0gICJJbml0IGVkaXRvciBzaXplIjogItmF2YLYr9in2LEg2K/Zh9uMINin2YbYr9in2LLZhyDZiNuM2LHYp9uM2LTar9ixIiwNCi0gICJJbml0IElGcmFtZSI6ICLZhdmC2K/Yp9ixINiv2YfbjCBJRnJhbWUiLA0KLSAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIjogItir2KjYqiDZvtmE2Kfar9uM2YYgJHBsdWdpbiINCi19OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2ZpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZmkuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNTdiOWEuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZmkuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotCi0vLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKLQotewotICAiQm9sZCI6ICJMaWhhdm9pdHUiLAotICAiSXRhbGljIjogIkt1cnNpdm9pdHUiLAotICAiVW5kZXJsaW5lIjogIkFsbGV2aWl2YXR0dSIsCi0gICJTdHJpa2V0aHJvdWdoIjogIllsaXZpaXZhdHR1IiwKLSAgIlN1YnNjcmlwdCI6ICJBbGFpbmRla3NpIiwKLSAgIlN1cGVyc2NyaXB0IjogIllsw6RpbmRla3NpIiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJUYXNhYSB2YXNlbW1hdCByZXVuYXQiLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiS2Vza2l0w6QiLAotICAiSnVzdGlmeSBSaWdodCI6ICJUYXNhYSBvaWtlYXQgcmV1bmF0IiwKLSAgIkp1c3RpZnkgRnVsbCI6ICJUYXNhYSBtb2xlbW1hdCByZXVuYXQiLAotICAiT3JkZXJlZCBMaXN0IjogIk51bWVyb2ludGkiLAotICAiQnVsbGV0ZWQgTGlzdCI6ICJMdWV0dGVsb21lcmtpdCIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAiUGllbmVubsOkIHNpc2VubnlzdMOkIiwKLSAgIkluY3JlYXNlIEluZGVudCI6ICJMaXPDpMOkIHNpc2VubnlzdMOkIiwKLSAgIkZvbnQgQ29sb3IiOiAiRm9udGluIHbDpHJpIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAiVGF1c3RhdsOkcmkiLAotICAiSG9yaXpvbnRhbCBSdWxlIjogIlZhYWthdmlpdmEiLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIkxpc8Okw6QgbGlua2tpIiwKLSAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiTGlzw6TDpCBrdXZhIiwKLSAgIkluc2VydCBUYWJsZSI6ICJMaXPDpMOkIHRhdWx1a2tvIiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJIVE1MLWzDpGhkZWtvb2RpIHZzIFdZU0lXWUciLAotICAiRW5sYXJnZSBFZGl0b3IiOiAiU3V1cmVubmEgZWRpdG9yaSIsCi0gICJBYm91dCB0aGlzIGVkaXRvciI6ICJUaWV0b2phIGVkaXRvcmlzdGEiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiTsOkeXTDpCBvaGplIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiTnlreWluZW4gdHl5bGkiLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiUGVydXV0YSB2aWltZWluZW4gdG9pbWludG8iLAotICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiUGFsYXV0YSB2aWltZWluZW4gdG9pbWludG8iLAotICAiQ3V0IHNlbGVjdGlvbiI6ICJMZWlra2FhIG1hYWxhdHR1IiwKLSAgIkNvcHkgc2VsZWN0aW9uIjogIktvcGlvaSBtYWFsYXR0dSIsCi0gICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJMaWl0w6QgbGVpa2VwecO2ZMOkbHTDpCIsCi0gICJPSyI6ICJIeXbDpGtzeSIsCi0gICJDYW5jZWwiOiAiUGVydXV0YSIKLX0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZnIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MWQ4ZGUuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZnIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLS8vIExBTkc6ICJmciIsIEVOQ09ESU5HOiBVVEYtOAotewotICAiQm9sZCI6ICJHcmFzIiwKLSAgIkl0YWxpYyI6ICJJdGFsaXF1ZSIsCi0gICJVbmRlcmxpbmUiOiAiU291bGlnbsOpIiwKLSAgIlN0cmlrZXRocm91Z2giOiAiQmFycsOpIiwKLSAgIlN1YnNjcmlwdCI6ICJJbmRpY2UiLAotICAiU3VwZXJzY3JpcHQiOiAiRXhwb3NhbnQiLAotICAiSnVzdGlmeSBMZWZ0IjogIkFsaWduZXIgw6AgZ2F1Y2hlIiwKLSAgIkp1c3RpZnkgQ2VudGVyIjogIkNlbnRyZXIiLAotICAiSnVzdGlmeSBSaWdodCI6ICJBbGlnbmVyIMOgIGRyb2l0ZSIsCi0gICJKdXN0aWZ5IEZ1bGwiOiAiSnVzdGlmaWVyIiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJMaXN0ZSBudW3DqXJvdMOpZSIsCi0gICJCdWxsZXRlZCBMaXN0IjogIkxpc3RlIMOgIHB1Y2VzIiwKLSAgIkRlY3JlYXNlIEluZGVudCI6ICJEaW1pbnVlciBsZSByZXRyYWl0IiwKLSAgIkluY3JlYXNlIEluZGVudCI6ICJBdWdtZW50ZXIgbGUgcmV0cmFpdCIsCi0gICJGb250IENvbG9yIjogIkNvdWxldXIgZGUgcG9saWNlIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAiU3VybGlnbmFnZSIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAiTGlnbmUgaG9yaXpvbnRhbGUiLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIkluc8OpcmVyIHVuIGxpZW4iLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJbnPDqXJlciAvIE1vZGlmaWVyIHVuZSBpbWFnZSIsCi0gICJJbnNlcnQgVGFibGUiOiAiSW5zw6lyZXIgdW4gdGFibGVhdSIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiQWZmaWNoZXIgLyBNYXNxdWVyIGNvZGUgc291cmNlIiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIkFncmFuZGlyIGwnw6lkaXRldXIiLAotICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiQSBwcm9wb3MiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiQWlkZSIsCi0gICJDdXJyZW50IHN0eWxlIjogIlN0eWxlIGNvdXJhbnQiLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiQW5udWxlciBsYSBkZXJuacOocmUgYWN0aW9uIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlLDqXDDqXRlciBsYSBkZXJuacOocmUgYWN0aW9uIiwKLSAgIkN1dCBzZWxlY3Rpb24iOiAiQ291cGVyIGxhIHPDqWxlY3Rpb24iLAotICAiQ29weSBzZWxlY3Rpb24iOiAiQ29waWVyIGxhIHPDqWxlY3Rpb24iLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiQ29sbGVyIGRlcHVpcyBsZSBwcmVzc2UtcGFwaWVyIiwKLSAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIkRpcmVjdGlvbiBkZSBnYXVjaGUgw6AgZHJvaXRlIiwKLSAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIkRpcmVjdGlvbiBkZSBkcm9pdGUgw6AgZ2F1Y2hlIiwKLSAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIlN1cHByaW1lciBtaXNlIGVuIGZvcm1lIiwKLSAgIlNlbGVjdCBhbGwiOiAiVG91dCBzw6lsZWN0aW9ubmVyIiwKLSAgIlByaW50IGRvY3VtZW50IjogIkltcHJpbWVyIGRvY3VtZW50IiwKLSAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiU3VwcHJpbWVyIHRhZ3MgTVNPZmZpY2UiLAotICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiU3VwcHJpbWVyIHBhcmFtw6h0cmVzIGlubGluZSBkZSBsYSBwb2xpY2UiLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogIlZvdWxlei12b3VzIHN1cHByaW1lciBsZXMgdHlwZXMgPyIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICJWb3VsZXotdm91cyBzdXBwcmltZXIgbGVzIHRhaWxsZXMgPyIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIlZvdWxlei12b3VzIHN1cHByaW1lciBsZXMgY291bGV1cnMgPyIsCi0gICJTcGxpdCBCbG9jayI6ICJTw6lwYXJlciBsZXMgYmxvY3MiLAotICAiVG9nZ2xlIEJvcmRlcnMiOiAiQWZmaWNoZXIgLyBNYXNxdWVyIGxlcyBib3JkdXJlcyIsCi0gICJTYXZlIGFzIjogIkVucmVnaXN0cmVyIHNvdXMiLAotICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICJJbnNlcnRpb24gLyBSZW1wbGFjZW1lbnQiLAotICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICImIzgyMTI7IEZvcm1hdCAmIzgyMTI7IiwKLSAgIkhlYWRpbmcgMSI6ICJUaXRyZSAxIiwKLSAgIkhlYWRpbmcgMiI6ICJUaXRyZSAyIiwKLSAgIkhlYWRpbmcgMyI6ICJUaXRyZSAzIiwKLSAgIkhlYWRpbmcgNCI6ICJUaXRyZSA0IiwKLSAgIkhlYWRpbmcgNSI6ICJUaXRyZSA1IiwKLSAgIkhlYWRpbmcgNiI6ICJUaXRyZSA2IiwKLSAgIk5vcm1hbCI6ICJOb3JtYWwiLAotICAiQWRkcmVzcyI6ICJBZHJlc3NlIiwKLSAgIkZvcm1hdHRlZCI6ICJGb3JtYXTDqSIsCi0KLSAgLy9kaWFsb2dzCi0gICJPSyI6ICJPSyIsCi0gICJDYW5jZWwiOiAiQW5udWxlciIsCi0gICJQYXRoIjogIkNoZW1pbiIsCi0gICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiVm91cyDDqnRlcyBlbiBNT0RFIFRFWFRFLiAgQXBwdXlleiBzdXIgbGUgYm91dG9uIFs8Pl0gcG91ciByZXRvdXJuZXIgYXUgbW9kZSBXWVNJV1lHLiIsCi0gICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIkxlIGJvdXRvbiBDb2xsZXIgbmUgZm9uY3Rpb25uZSBwYXMgc3VyIGxlcyBuYXZpZ2F0ZXVycyBiYXPDqXMgc3VyIE1vemlsbGEgKHBvdXIgZGVzIHJhaXNvbnMgZGUgc8OpY3VyaXTDqSkuIFByZXNzZXogQ1RSTC1WIGF1IGNsYXZpZXIgcG91ciBjb2xsZXIgZGlyZWN0ZW1lbnQuIiwKLSAgIllvdXIgRG9jdW1lbnQgaXMgbm90IHdlbGwgZm9ybWVkLiBDaGVjayBKYXZhU2NyaXB0IGNvbnNvbGUgZm9yIGRldGFpbHMuIjogIkxlIGRvY3VtZW50IGVzdCBtYWwgZm9ybcOpLiBWw6lyaWZpZXogbGEgY29uc29sZSBKYXZhU2NyaXB0IHBvdXIgcGx1cyBkZSBkw6l0YWlscy4iLAotCi0gICJBbGlnbm1lbnQ6IjogIkFsaWduZW1lbnQiLAotICAiTm90IHNldCI6ICJJbmTDqWZpbmkiLAotICAiTGVmdCI6ICJHYXVjaGUiLAotICAiUmlnaHQiOiAiRHJvaXRlIiwKLSAgIlRleHR0b3AiOiAiVGV4dHRvcCIsCi0gICJBYnNtaWRkbGUiOiAiQWJzbWlkZGxlIiwKLSAgIkJhc2VsaW5lIjogIkJhc2VsaW5lIiwKLSAgIkFic2JvdHRvbSI6ICJBYnNib3R0b20iLAotICAiQm90dG9tIjogIkJhcyIsCi0gICJNaWRkbGUiOiAiTWlsaWV1IiwKLSAgIlRvcCI6ICJIYXV0IiwKLQotICAiTGF5b3V0IjogIk1pc2UgZW4gcGFnZSIsCi0gICJTcGFjaW5nIjogIkVzcGFjZW1lbnQiLAotICAiSG9yaXpvbnRhbDoiOiAiSG9yaXpvbnRhbCIsCi0gICJIb3Jpem9udGFsIHBhZGRpbmciOiAiTWFyZ2UgaG9yaXpvbnRhbGUgaW50ZXJuZSIsCi0gICJWZXJ0aWNhbDoiOiAiVmVydGljYWwiLAotICAiVmVydGljYWwgcGFkZGluZyI6ICJNYXJnZSB2ZXJ0aWNhbGUgaW50ZXJuZSIsCi0gICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJFcGFpc3NldXIgZGUgYm9yZHVyZSIsCi0gICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIkxhaXNzZXIgdmlkZSBwb3VyIHBhcyBkZSBib3JkdXJlIiwKLQotICAvL0luc2VydCBMaW5rCi0gICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSW5zw6lyZXIgLyBNb2RpZmllciB1biBsaWVuIiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiQXVjdW5lIChpbXBsaWNpdGUpIiwKLSAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTm91dmVsbGUgZmVuw6p0cmUgKF9ibGFuaykiLAotICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIk3Dqm1lIGZyYW1lIChfc2VsZikiLAotICAiVG9wIGZyYW1lIChfdG9wKSI6ICJGcmFtZSBwcmluY2lwYWxlIChfdG9wKSIsCi0gICJPdGhlciI6ICJBdXRyZSIsCi0gICJUYXJnZXQ6IjogIkNpYmxlIiwKLSAgIlRpdGxlICh0b29sdGlwKToiOiAiVGV4dGUgYWx0ZXJuYXRpZiIsCi0gICJVUkw6IjogIlVSTDoiLAotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogIlZvdXMgZGV2ZXogZW50cmVyIGwnVVJMIGRlIGNlIGxpZW4iLAotICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIlZvdXMgZGV2ZXogc8OpbGVjdGlvbm5lciBkdSB0ZXh0ZSBhdmFudCBkZSBjcsOpZXIgdW4gbGllbiIsCi0KLSAgLy8gSW5zZXJ0IFRhYmxlCi0gICJJbnNlcnQgVGFibGUiOiAiSW5zw6lyZXIgdW4gdGFibGVhdSIsCi0gICJSb3dzOiI6ICJMaWduZXMiLAotICAiTnVtYmVyIG9mIHJvd3MiOiAiTm9tYnJlIGRlIGxpZ25lcyIsCi0gICJDb2xzOiI6ICJDb2xvbm5lcyIsCi0gICJOdW1iZXIgb2YgY29sdW1ucyI6ICJOb21icmUgZGUgY29sb25uZXMiLAotICAiV2lkdGg6IjogIkxhcmdldXIiLAotICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIkxhcmdldXIgZHUgdGFibGVhdSIsCi0gICJQZXJjZW50IjogIlBvdXJjZW50IiwKLSAgIlBpeGVscyI6ICJQaXhlbHMiLAotICAiRW0iOiAiRW0iLAotICAiV2lkdGggdW5pdCI6ICJVbml0w6lzIGRlIGxhcmdldXIiLAotICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICJDb2xvbm5lcyDDoCB0YWlsbGUgZml4ZSIsCi0gICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIlBvc2l0aW9uIGR1IHRhYmxlYXUiLAotICAiQ2VsbCBzcGFjaW5nOiI6ICJFc3BhY2VtZW50IiwKLSAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAiRXNwYWNlIGVudHJlIGxlcyBjZWxsdWxlcyBhZGphY2VudGVzIiwKLSAgIkNlbGwgcGFkZGluZzoiOiAiTWFyZ2UgaW50ZXJuZSIsCi0gICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIkVzcGFjZSBlbnRyZSBsZSBjb250ZW51IGV0IGxhIGJvcmR1cmUgZCd1bmUgY2VsbHVsZSIsCi0gICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIlZvdXMgZGV2ZXogZW50cmVyIGxlIG5vbWJyZSBkZSBsaWduZXMiLAotICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICJWb3VzIGRldmV6IGVudHJlciBsZSBub21icmUgZGUgY29sb25uZXMiLAotCi0gIC8vIEluc2VydCBJbWFnZQotICAiSW5zZXJ0IEltYWdlIjogIkluc8OpcmVyIHVuZSBpbWFnZSIsCi0gICJJbWFnZSBVUkw6IjogIlVSTCBpbWFnZSIsCi0gICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiRW50cmVyIGwnVVJMIGRlIGwnaW1hZ2UgaWNpIiwKLSAgIlByZXZpZXciOiAiUHLDqXZpc3VhbGlzZXIiLAotICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlByw6l2aXN1YWxpc2VyIGwnaW1hZ2UgZGFucyB1bmUgbm91dmVsbGUgZmVuw6p0cmUiLAotICAiQWx0ZXJuYXRlIHRleHQ6IjogIlRleHRlIGFsdGVybmF0aWYiLAotICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiUG91ciBsZXMgbmF2aWdhdGV1cnMgcXVpIG5lIHN1cHBvcnRlbnQgcGFzIGxlcyBpbWFnZXMiLAotICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJQb3NpdGlvbiBkZSBsJ2ltYWdlIiwKLSAgIkltYWdlIFByZXZpZXc6IjogIlByw6l2aXN1YWxpc2F0aW9uIiwKLSAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiVm91cyBkZXZleiBlbnRyZXIgbCdVUkwiLAotCi0gIC8vIHRvb2xiYXIKLS8qCi0gICJidXR0b25fYm9sZCI6ICJmci9ib2xkLmdpZiIsCi0gICJidXR0b25fdW5kZXJsaW5lIjogImZyL3VuZGVybGluZS5naWYiLAotICAiYnV0dG9uX3N0cmlrZXRocm91Z2giOiAiZnIvc3RyaWtldGhyb3VnaC5naWYiLAotKi8KLQotICAvLyBFZGl0b3IgSGVscAotICAiWGluaGEgSGVscCI6ICJBaWRlIFhpbmhhIiwKLSAgIkVkaXRvciBIZWxwIjogIkFpZGUgZGUgbCfDqWRpdGV1ciIsCi0gICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiUmFjY291cmNpcyBjbGF2aWVyIiwKLSAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICJMJ8OpZGl0ZXVyIGZvdXJuaXQgbGVzIGNvbWJpbmFpc29ucyBkZSB0b3VjaGVzIHN1aXZhbnRlcyA6IiwKLSAgIkVOVEVSIjogIkVOVFJFRSIsCi0gICJuZXcgcGFyYWdyYXBoIjogIk5vdXZlYXUgcGFyYWdyYXBoZSIsCi0gICJTSElGVC1FTlRFUiI6ICJTSElGVCtFTlRSRUUiLAotICAiaW5zZXJ0IGxpbmVicmVhayI6ICJJbnPDqHJlIHVuIHNhdXQgZGUgbGlnbmUiLAotICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiQXBwbGlxdWUgbGUgZm9ybWF0IHBhcmFncmFwaGUiLAotICAiQ2xlYW4gY29udGVudCBwYXN0ZWQgZnJvbSBXb3JkIjogIk5ldHRveWFnZSBkdSBjb250ZW51IGNvcGnDqSBkZXB1aXMgV29yZCIsCi0gICJIZWFkaW5ncyI6ICJUaXRyZXMiLAotICAiQ2xvc2UiOiAiRmVybWVyIiwKLQotICAvLyBMb2FkaW5nIG1lc3NhZ2VzCi0gICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiQ2hhcmdlbWVudCBlbiBjb3Vycy4gVmV1aWxsZXogcGF0aWVudGVyISIsCi0gICJGaW5pc2hpbmciIDogIkNoYXJnZW1lbnQgYmllbnTDtHQgdGVybWluw6kiLCAKLSAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAiQ29uc3RydWN0aW9uIGRlIGwnb2JqZXQiLAotICAiQ3JlYXRlIFRvb2xiYXIiOiAiQ29uc3RydWN0aW9uIGRlIGxhIGJhcnJlIGQnaWNvbmVzIiwKLSAgIkNyZWF0ZSBTdGF0dXNiYXIiOiAiQ29uc3RydWN0aW9uIGRlIGxhIGJhcnJlIGRlIHN0YXR1cyIsCi0gICJSZWdpc3RlciByaWdodCBwYW5lbCIgOiAiRW5yZWdpc3RyZW1lbnQgZHUgcGFubmVhdSBkcm9pdCIsIAotICAiUmVnaXN0ZXIgbGVmdCBwYW5lbCIgOiAiRW5yZWdpc3RyZW1lbnQgZHUgcGFubmVhdSBnYXVjaGUiLCAKLSAgIlJlZ2lzdGVyIGJvdHRvbSBwYW5lbCIgOiAiRW5yZWdpc3RyZW1lbnQgZHUgcGFubmVhdSBzdXDDqXJpZXVyIiwgCi0gICJSZWdpc3RlciB0b3AgcGFuZWwiIDogIkVucmVnaXN0cmVtZW50IGR1IHBhbm5lYXUgaW5mw6lyaWV1ciIsIAotICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIkfDqW7DqXJhdGlvbiBkZSBYaW5oYSIsCi0gICJJbml0IGVkaXRvciBzaXplIjogIkluaXRpYWxpc2F0aW9uIGRlIGxhIHRhaWxsZSBkJ8OpZGl0aW9uIiwKLSAgIkluaXQgSUZyYW1lIjogIkluaXRpYWxpc2F0aW9uIGRlIGwnaWZyYW1lIiwKLSAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIjogIkVucmVnaXN0cmVtZW50IGR1IHBsdWdpbiAkcGx1Z2luIiwKLSAgIkxvYWRpbmcgcGx1Z2luICRwbHVnaW4iIDogIkNoYXJnZW1lbnQgZHUgcGx1Z2luICRwbHVnaW4iCi0KLX07ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZ2IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9nYi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRmYjViNi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9nYi5qcworKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzIC0tIENoaW5lc2UgR0IKLS8vIGJ5IERhdmUgTG8gLS0gZGxvQGludGVyYWN0aXZldG9vbHMuY29tCi17Ci0gICJCb2xkIjogIueyl+S9kyIsCi0gICJJdGFsaWMiOiAi5pac5L2TIiwKLSAgIlVuZGVybGluZSI6ICLlupXnur8iLAotICAiU3RyaWtldGhyb3VnaCI6ICLliKDpmaTnur8iLAotICAiU3Vic2NyaXB0IjogIuS4i+aghyIsCi0gICJTdXBlcnNjcmlwdCI6ICLkuIrmoIciLAotICAiSnVzdGlmeSBMZWZ0IjogIuS9jee9rumdoOW3piIsCi0gICJKdXN0aWZ5IENlbnRlciI6ICLkvY3nva7lsYXkuK0iLAotICAiSnVzdGlmeSBSaWdodCI6ICLkvY3nva7pnaDlj7MiLAotICAiSnVzdGlmeSBGdWxsIjogIuS9jee9ruW3puWPs+W5s+etiSIsCi0gICJPcmRlcmVkIExpc3QiOiAi6aG65bqP5riF5Y2VIiwKLSAgIkJ1bGxldGVkIExpc3QiOiAi5peg5bqP5riF5Y2VIiwKLSAgIkRlY3JlYXNlIEluZGVudCI6ICLlh4/lsI/ooYzliY3nqbrnmb0iLAotICAiSW5jcmVhc2UgSW5kZW50IjogIuWKoOWuveihjOWJjeepuueZvSIsCi0gICJGb250IENvbG9yIjogIuaWh+Wtl+minOiJsiIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogIuiDjOaZr+minOiJsiIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAi5rC05bmz57q/IiwKLSAgIkluc2VydCBXZWIgTGluayI6ICLmj5LlhaXov57nu5MiLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICLmj5LlhaXlm77lvaIiLAotICAiSW5zZXJ0IFRhYmxlIjogIuaPkuWFpeihqOagvCIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAi5YiH5o2iSFRNTOWOn+Wni+eggSIsCi0gICJFbmxhcmdlIEVkaXRvciI6ICLmlL7lpKciLAotICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAi5YWz5pa8IFhpbmhhIiwKLSAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIuivtOaYjiIsCi0gICJDdXJyZW50IHN0eWxlIjogIuWtl+S9k+S+i+WtkCIKLX0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2hlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvaGUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzOWQzZmMuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvaGUuanMKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotCi0vLyBMQU5HOiAiaGUiLCBFTkNPRElORzogVVRGLTgKLS8vIEF1dGhvcjogTGlyb24gTmV3bWFuLCBodHRwOi8vd3d3LmVlc2gubmV0LCA8cGxhc3Rpc2ggYXQgdWx0aW5ldCBkb3Qgb3JnPgotCi0vLyBGT1IgVFJBTlNMQVRPUlM6Ci0vLwotLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCi0vLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCi0vLwotLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7Ci0vLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50Ci0vLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCi0KLXsKLSAgIkJvbGQiOiAi157XldeT15LXqSIsCi0gICJJdGFsaWMiOiAi16DXmNeV15kiLAotICAiVW5kZXJsaW5lIjogIten15Ug16rXl9eq15kiLAotICAiU3RyaWtldGhyb3VnaCI6ICLXp9eVINeQ157XpteiIiwKLSAgIlN1YnNjcmlwdCI6ICLXm9eq15Eg16LXmdec15kiLAotICAiU3VwZXJzY3JpcHQiOiAi15vXqteRINeq15fXqteZIiwKLSAgIkp1c3RpZnkgTGVmdCI6ICIg15nXqdeV16gg15zXqdee15DXnCIsCi0gICJKdXN0aWZ5IENlbnRlciI6ICLXmdep15XXqCDXnNee16jXm9eWIiwKLSAgIkp1c3RpZnkgUmlnaHQiOiAi15nXqdeV16gg15zXmdee15nXnyIsCi0gICJKdXN0aWZ5IEZ1bGwiOiAi15nXqdeV16gg15zXqdeV16jXlCDXntec15DXlCIsCi0gICJPcmRlcmVkIExpc3QiOiAi16jXqdeZ157XlCDXntee15XXodek16jXqiIsCi0gICJCdWxsZXRlZCBMaXN0IjogIteo16nXmdee15Qg15zXkCDXntee15XXodek16jXqiIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAi15TXp9eY158g15vXoNeZ16HXlCIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAi15TXkteT15wg15vXoNeZ16HXlCIsCi0gICJGb250IENvbG9yIjogItem15HXoiDXkteV16TXnyIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogItem15HXoiDXqNen16IiLAotICAiSG9yaXpvbnRhbCBSdWxlIjogIten15Ug15DXoNeb15kiLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIteU15vXoNehINeU15nXpNeoLden15nXqdeV16giLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICLXlNeb16DXoS/Xqdeg15Qg16rXnteV16DXlCIsCi0gICJJbnNlcnQgVGFibGUiOiAi15TXm9eg16Eg15jXkdec15QiLAotICAiVG9nZ2xlIEhUTUwgU291cmNlIjogItep16DXlCDXntem15Eg16fXldeTIEhUTUwiLAotICAiRW5sYXJnZSBFZGl0b3IiOiAi15TXkteT15wg15DXqiDXlNei15XXqNeaIiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIteQ15XXk9eV16og16LXldeo15og15bXlCIsCi0gICJIZWxwIHVzaW5nIGVkaXRvciI6ICLXoteW16jXlCDXnNep15nXnteV16kg15HXoteV16jXmiIsCi0gICJDdXJyZW50IHN0eWxlIjogIteh15LXoNeV158g16DXldeb15fXmSIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLXnteR15jXnCDXkNeqINek16LXldec16rXmiDXlNeQ15fXqNeV16DXlCIsCi0gICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLXnteR16bXoiDXnteX15PXqSDXkNeqINeU16TXoteV15zXlCDXlNeQ15fXqNeV16DXlCDXqdeR15nXmNec16oiLAotICAiQ3V0IHNlbGVjdGlvbiI6ICLXkteW15XXqCDXkdeX15nXqNeUIiwKLSAgIkNvcHkgc2VsZWN0aW9uIjogIteU16LXqtenINeR15fXmdeo15QiLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAi15TXk9eR16cg157XlNec15XXlyIsCi0gICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICLXm9eZ15XXldefINee16nXnteQ15wg15zXmdee15nXnyIsCi0gICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICLXm9eZ15XXldefINee15nXnteZ158g15zXqdee15DXnCIsCi0gICJPSyI6ICLXkNeZ16nXldeoIiwKLSAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKLSAgIlBhdGgiOiAi16DXqteZ15Eg16LXmdem15XXkSIsCi0gICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAi15DXqteUINeR157XpteRINeY16fXodeYINeg16fXmSAo16fXldeTKS4g15TXqdeq157XqSDXkdeb16TXqteV16ggWzw+XSDXm9eT15kg15zXl9eW15XXqCDXnNee16bXkSBXWVNJV1lHICjXqtem15XXkteqINei15nXpteV15EpLiIsCi0gICJUaGUgZnVsbCBzY3JlZW4gbW9kZSBpcyBrbm93biB0byBjYXVzZSBwcm9ibGVtcyB3aXRoIEludGVybmV0IEV4cGxvcmVyLCBkdWUgdG8gYnJvd3NlciBidWdzIHRoYXQgd2Ugd2VyZW4iOiAi157XpteRINee16HXmiDXntec15Ag15nXldem16gg15HXoteZ15XXqiDXkdeT16TXk9ek158gSW50ZXJuZXQgRXhwbG9yZXIsINei16fXkSDXkdeQ15LXmdedINeR15PXpNeT16TXnyDXnNeQINeZ15vXldec16DXlSDXnNek16rXldeoINeQ16og15bXlC4gINeQ16ov15Qg16LXnNeV15wv15Qg15zXl9eV15XXqiDXqtem15XXkteqINeW15HXnCwgINeR16LXmdeV16og15HXqtek16fXldeTINeU16LXldeo15og15Uv15DXlSDXp9eo15nXodeUINep15wg15TXk9ek15PXpNefLiAg15DXnSDXlNee16LXqNeb16og16nXnNeaINeU15nXkCBXaW5kb3dzIDl4INeh15HXmdeoINec15TXoNeZ15cg16nXqten15HXnC/XmSAiLAotICAiQ2FuY2VsIjogIteR15nXmNeV15wiLAotICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIteU15XXodejL9ep16DXlCDXp9eZ16nXldeoIiwKLSAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAi15fXnNeV158g15fXk9epIChfYmxhbmspIiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi15zXnNeQICjXlNep16rXntepINeRLWZyYW1lINeU16fXmdeZ150pIiwKLSAgIk90aGVyIjogIteQ15fXqCIsCi0gICJTYW1lIGZyYW1lIChfc2VsZikiOiAi15DXldeq15UgZnJhbWUgKF9zZWxmKSIsCi0gICJUYXJnZXQ6IjogIteZ16LXkzoiLAotICAiVGl0bGUgKHRvb2x0aXApOiI6ICLXm9eV16rXqNeqICh0b29sdGlwKToiLAotICAiVG9wIGZyYW1lIChfdG9wKSI6ICJGcmFtZSDXotec15nXldefIChfdG9wKSIsCi0gICJVUkw6IjogIlVSTDoiLAotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogIteX15XXkdeUINec15vXqteV15EgVVJMINep15DXnNeZ15Ug16fXmdep15XXqCDXlteUINee16bXkdeZ16IiCi19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9odS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2h1LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGIxZmE0Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2h1LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLQotLy8gTEFORzogImh1IiwgRU5DT0RJTkc6IFVURi04Ci0vLyBBdXRob3I6IE1pa2zDs3MgU29tb2d5aSwgPHNvbW9neWluZUB2bmV0Lmh1PgotCi0vLyBGT1IgVFJBTlNMQVRPUlM6Ci0vLwotLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCi0vLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCi0vLwotLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7Ci0vLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50Ci0vLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCi0KLXsKLSAgIkJvbGQiOiAiRsOpbGvDtnbDqXIiLAotICAiSXRhbGljIjogIkTFkWx0IiwKLSAgIlVuZGVybGluZSI6ICJBbMOhaMO6em90dCIsCi0gICJTdHJpa2V0aHJvdWdoIjogIsOBdGjDunpvdHQiLAotICAiU3Vic2NyaXB0IjogIkFsc8OzIGluZGV4IiwKLSAgIlN1cGVyc2NyaXB0IjogIkZlbHPFkSBpbmRleCIsCi0gICJKdXN0aWZ5IExlZnQiOiAiQmFscmEgesOhcnQiLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiS8O2esOpcHJlIHrDoXJ0IiwKLSAgIkp1c3RpZnkgUmlnaHQiOiAiSm9iYnJhIHrDoXJ0IiwKLSAgIkp1c3RpZnkgRnVsbCI6ICJTb3JraXrDoXJ0IiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJTesOhbW96b3R0IGxpc3RhIiwKLSAgIkJ1bGxldGVkIExpc3QiOiAiU3rDoW1vemF0bGFuIGxpc3RhIiwKLSAgIkRlY3JlYXNlIEluZGVudCI6ICJCZWjDunrDoXMgY3PDtmtrZW50w6lzZSIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAiQmVow7p6w6FzIG7DtnZlbMOpc2UiLAotICAiRm9udCBDb2xvciI6ICJLYXJha3RlcnN6w61uIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAiSMOhdHTDqXJzesOtbiIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAiRWx2w6FsYXN6dMOzIHZvbmFsIiwKLSAgIkluc2VydCBXZWIgTGluayI6ICJIaXBlcmhpdmF0a296w6FzIGJlc3rDunLDoXNhIiwKLSAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiS8OpcCBiZXN6w7pyw6FzYSIsCi0gICJJbnNlcnQgVGFibGUiOiAiVMOhYmzDoXphdCBiZXN6w7pyw6FzYSIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiSFRNTCBmb3Jyw6FzIGJlL2tpIiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIlN6ZXJrZXN6dMWRIGvDvGzDtm4gYWJsYWtiYW4iLAotICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiTsOpdmplZ3kiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiU8O6Z8OzIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiQWt0dcOhbGlzIHN0w61sdXMiLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiVmlzc3phdm9uw6FzIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIsOaanJhIHbDqWdyZWhhanTDoXMiLAotICAiQ3V0IHNlbGVjdGlvbiI6ICJLaXbDoWfDoXMiLAotICAiQ29weSBzZWxlY3Rpb24iOiAiTcOhc29sw6FzIiwKLSAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIkJlaWxsZXN6dMOpcyIsCi0gICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICJJcsOhbnkgYmFscsOzbCBqb2JicmEiLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiSXLDoW55IGpvYmJyw7NsIGJhbHJhIiwKLSAgIk9LIjogIlJlbmRiZW4iLAotICAiQ2FuY2VsIjogIk3DqWdzZW0iLAotICAiUGF0aCI6ICJIaWVyYXJjaGlhIiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJGb3Jyw6FzIG3Ds2QuIFZpc3N6YXbDoWx0w6FzIFs8Pl0gZ29tYiIsCi0gICJUaGUgZnVsbCBzY3JlZW4gbW9kZSBpcyBrbm93biB0byBjYXVzZSBwcm9ibGVtcyB3aXRoIEludGVybmV0IEV4cGxvcmVyLCBkdWUgdG8gYnJvd3NlciBidWdzIHRoYXQgd2Ugd2VyZW4iOiAiQSB0ZWxqZXNrw6lwcmVuecWRcyBzemVya2VzenTDqXMgaGliw6F0IG9rb3poYXQgSW50ZXJuZXQgRXhwbG9yZXIgaGFzem7DoWxhdGEgZXNldMOpbiwgZXogYSBiw7ZuZ8Opc3rFkSBhIGhpYsOhamEsIGFtaXQgbmVtIHR1ZHVuayBraWtlcsO8bG5pLiBTemVtZXRldCDDqXN6bGVsaGV0IGEga8OpcHJlbnnFkW4sIGlsbGV0dmUgbsOpaMOhbnkgZnVua2Npw7MgaGnDoW55b3poYXQgw6lzL3ZhZ3kgdsOpbGV0bGVuc3plcsWxZW4gbGVmYWd5aGF0IGEgYsO2bmfDqXN6xZEuIFdpbmRvd3MgOXggb3BlcmFjacOzcyBmdXR0YXTDoXNhIGVzZXTDqW4gZWzDqWcgdmFsw7NzesOtbsWxLCBob2d5ICIsCi0gICJDYW5jZWwiOiAiTcOpZ3NlbSIsCi0gICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSGl2YXRrb3rDoXMgQmVzesO6csOhc2EvTcOzZG9zw610w6FzYSIsCi0gICJOZXcgd2luZG93IChfYmxhbmspIjogIsOaaiBhYmxhayAoX2JsYW5rKSIsCi0gICJOb25lICh1c2UgaW1wbGljaXQpIjogIk5pbmNzICh1c2UgaW1wbGljaXQpIiwKLSAgIk90aGVyIjogIk3DoXMiLAotICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlVneWFuYWJiYSBhIGtlcmV0YmUgKF9zZWxmKSIsCi0gICJUYXJnZXQ6IjogIkPDqWw6IiwKLSAgIlRpdGxlICh0b29sdGlwKToiOiAiQ8OtbSAodG9vbHRpcCk6IiwKLSAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiRmVsc8WRIGtlcmV0IChfdG9wKSIsCi0gICJVUkw6IjogIlVSTDoiLAotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogIkJlIGtlbGwgw61ybmlhIGF6IFVSTC10LCBhaG92YSBhIGhpdmF0a296w6FzIG11dGFzc29uIgotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvaXQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9pdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM5MmYyMy4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9pdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzCi0KLS8vIExBTkc6ICJpdCIsIEVOQ09ESU5HOiBVVEYtOAotLy8gQXV0aG9yOiBNYXR0aWEgTGFuZG9uaSwgaHR0cDovL3d3dy53ZWJwcmVzaWRlbnQub3JnLwotCi17Ci0gICJCb2xkIjogIkdyYXNzZXR0byIsCi0gICJJdGFsaWMiOiAiQ29yc2l2byIsCi0gICJVbmRlcmxpbmUiOiAiU290dG9saW5lYXRvIiwKLSAgIlN0cmlrZXRocm91Z2giOiAiQmFycmF0byIsCi0gICJTdWJzY3JpcHQiOiAiUGVkaWNlIiwKLSAgIlN1cGVyc2NyaXB0IjogIkFwaWNlIiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJTaW5pc3RyYSIsCi0gICJKdXN0aWZ5IENlbnRlciI6ICJDZW50cmF0byIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIkRlc3RyYSIsCi0gICJKdXN0aWZ5IEZ1bGwiOiAiR2l1c3RpZmljYXRvIiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJMaXN0YSBudW1lcmF0YSIsCi0gICJCdWxsZXRlZCBMaXN0IjogIkxpc3RhIG5vbiBudW1lcmF0YSIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAiRGltaW51aXNjaSBpbmRlbnRhemlvbmUiLAotICAiSW5jcmVhc2UgSW5kZW50IjogIkF1bWVudGEgaW5kZW50YXppb25lIiwKLSAgIkZvbnQgQ29sb3IiOiAiQ29sb3JlIGZvbnQiLAotICAiQmFja2dyb3VuZCBDb2xvciI6ICJDb2xvcmUgc2ZvbmRvIiwKLSAgIkhvcml6b250YWwgUnVsZSI6ICJSaWdoZWxsbyBvcml6em9udGFsZSIsCi0gICJJbnNlcnQgV2ViIExpbmsiOiAiSW5zZXJpc2NpIGxpbmsiLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJbnNlcmlzY2kvbW9kaWZpY2EgSW1tYWdpbmUiLAotICAiSW5zZXJ0IFRhYmxlIjogIkluc2VyaXNjaSB0YWJlbGxhIiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJWaXN1YWxpenphL25hc2NvbmRpIHNvcmdlbnRlIEhUTUwiLAotICAiRW5sYXJnZSBFZGl0b3IiOiAiQWxsYXJnYSBlZGl0b3IiLAotICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiSW5mb3JtYXppb25pIHN1IFhpbmhhIiwKLSAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIkFpdXRvIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiU3RpbGUgY29ycmVudGUiLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiQW5udWxsYSB1bHRpbWEgYXppb25lIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlJpcGV0aSB1bHRpbWEgYXppb25lIiwKLSAgIkN1dCBzZWxlY3Rpb24iOiAiVGFnbGlhIiwKLSAgIkNvcHkgc2VsZWN0aW9uIjogIkNvcGlhIiwKLSAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIkluY29sbGEiLAotICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiVGVzdG8gZGEgc3ggYSBkeCIsCi0gICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJUZXN0byBkYSBkeCBhIHN4IiwKLSAgIk9LIjogIk9LIiwKLSAgIkNhbmNlbCI6ICJBbm51bGxhIiwKLSAgIlBhdGgiOiAiUGVyY29yc28iLAotICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIlNlaSBpbiBNT0RBTElUQSIsCi0gICJUaGUgZnVsbCBzY3JlZW4gbW9kZSBpcyBrbm93biB0byBjYXVzZSBwcm9ibGVtcyB3aXRoIEludGVybmV0IEV4cGxvcmVyLCBkdWUgdG8gYnJvd3NlciBidWdzIHRoYXQgd2Ugd2VyZW4iOiAiRSIsCi0gICJDYW5jZWwiOiAiQW5udWxsYSIsCi0gICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSW5zZXJpc2NpL21vZGlmaWNhIGxpbmsiLAotICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOdW92YSBmaW5lc3RyYSAoX2JsYW5rKSIsCi0gICJOb25lICh1c2UgaW1wbGljaXQpIjogIk5pZW50ZSAodXNhIGltcGxpY2l0bykiLAotICAiT3RoZXIiOiAiQWx0cm8iLAotICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlN0ZXNzYSBmcmFtZSAoX3NlbGYpIiwKLSAgIlRhcmdldDoiOiAiVGFyZ2V0OiIsCi0gICJUaXRsZSAodG9vbHRpcCk6IjogIlRpdGxlIChzdWdnZXJpbWVudG8pOiIsCi0gICJUb3AgZnJhbWUgKF90b3ApIjogIlBhZ2luYSBpbnRlcmEgKF90b3ApIiwKLSAgIlVSTDoiOiAiVVJMOiIsCi0gICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAiRGV2aSBpbnNlcmlyZSBsJ2luZGlyaXp6byBhIGN1aSBwdW50YSBpbCBsaW5rIgotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9qYS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MwNjhmOS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9qYS5qcworKysgL2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04TgotCi17Ci0gICJCb2xkIjogIuWkquWtlyIsCi0gICJJdGFsaWMiOiAi5pac5L2TIiwKLSAgIlVuZGVybGluZSI6ICLkuIvnt5oiLAotICAiU3RyaWtldGhyb3VnaCI6ICLmiZPjgaHmtojjgZfnt5oiLAotICAiU3Vic2NyaXB0IjogIuS4i+S7mOOBjea3u+OBiOWtlyIsCi0gICJTdXBlcnNjcmlwdCI6ICLkuIrku5jjgY3mt7vjgYjlrZciLAotICAiSnVzdGlmeSBMZWZ0IjogIuW3puWvhOOBmyIsCi0gICJKdXN0aWZ5IENlbnRlciI6ICLkuK3lpK7lr4TjgZsiLAotICAiSnVzdGlmeSBSaWdodCI6ICLlj7Plr4TjgZsiLAotICAiSnVzdGlmeSBGdWxsIjogIuWdh+etieWJsuS7mCIsCi0gICJPcmRlcmVkIExpc3QiOiAi55Wq5Y+35LuY44GN566H5p2h5pu444GNIiwKLSAgIkJ1bGxldGVkIExpc3QiOiAi6KiY5Y+35LuY44GN566H5p2h5pu444GNIiwKLSAgIkRlY3JlYXNlIEluZGVudCI6ICLjgqTjg7Pjg4fjg7Pjg4jop6PpmaQiLAotICAiSW5jcmVhc2UgSW5kZW50IjogIuOCpOODs+ODh+ODs+ODiOioreWumiIsCi0gICJGb250IENvbG9yIjogIuaWh+Wtl+iJsiIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogIuiDjOaZr+iJsiIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAi5rC05bmz57eaIiwKLSAgIkluc2VydCBXZWIgTGluayI6ICLjg6rjg7Pjgq/jga7mjL/lhaUiLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICLnlLvlg4/jga7mjL/lhaUv5L+u5q2jIiwKLSAgIkluc2VydCBUYWJsZSI6ICLjg4bjg7zjg5bjg6vjgpLmjL/lhaUiLAotICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIkhUTUznt6jpm4bjg6Ljg7zjg4njgpLliIfmm78iLAotICAiRW5sYXJnZSBFZGl0b3IiOiAi44Ko44OH44Kj44K/44KS5pyA5aSn5YyWIiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIuODkOODvOOCuOODp+ODs+aDheWgsSIsCi0gICJIZWxwIHVzaW5nIGVkaXRvciI6ICLjg5jjg6vjg5ciLAotICAiQ3VycmVudCBzdHlsZSI6ICLnj77lnKjjga7jgrnjgr/jgqTjg6siLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi5YWD44Gr5oi744GZIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIuOChOOCiuebtOOBlyIsCi0gICJDdXQgc2VsZWN0aW9uIjogIuWIh+OCiuWPluOCiiIsCi0gICJDb3B5IHNlbGVjdGlvbiI6ICLjgrPjg5Tjg7wiLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAi6LK844KK5LuY44GRIiwKLSAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIuW3puOBi+OCieWPs+OBuCIsCi0gICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICLlj7PjgYvjgonlt6bjgbgiLAotICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAi5pu45byP5YmK6ZmkIiwKLSAgIlNlbGVjdCBhbGwiOiAi44GZ44G544Gm6YG45oqeIiwKLSAgIlByaW50IGRvY3VtZW50IjogIuWNsOWItyIsCi0gICJDbGVhciBNU09mZmljZSB0YWdzIjogIk1TT2ZmaWNl44K/44Kw44KS44Kv44Oq44KiIiwKLSAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogIuOCpOODs+ODqeOCpOODs+ODleOCqeODs+ODiOaMh+WumuOCkuOCr+ODquOCoiIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAi44OV44Kp44Oz44OI5ZCN44KS44Kv44Oq44Ki44GX44G+44GZ44GLPyIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICLjgrXjgqTjgrrjgpLjgq/jg6rjgqLjgZfjgb7jgZnjgYs/IiwKLSAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAi6Imy44KS44Kv44Oq44Ki44GX44G+44GZ44GLPyIsCi0gICJTcGxpdCBCbG9jayI6ICLpoJjln5/liIblibIiLAotICAiVG9nZ2xlIEJvcmRlcnMiOiAi5aKD55WM57ea44Gu5YiH5pu/IiwKLSAgIlNhdmUgYXMiOiAi5ZCN5YmN44KS44Gk44GR44Gm5L+d5a2YIiwKLSAgIkluc2VydC9PdmVyd3JpdGUiOiAi5oy/5YWlL+S4iuabuOOBjSIsCi0gICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiYjODIxMjsg5pu45byPICYjODIxMjsiLAotICAiSGVhZGluZyAxIjogIuimi+WHuuOBlzEiLAotICAiSGVhZGluZyAyIjogIuimi+WHuuOBlzIiLAotICAiSGVhZGluZyAzIjogIuimi+WHuuOBlzMiLAotICAiSGVhZGluZyA0IjogIuimi+WHuuOBlzQiLAotICAiSGVhZGluZyA1IjogIuimi+WHuuOBlzUiLAotICAiSGVhZGluZyA2IjogIuimi+WHuuOBlzYiLAotICAiTm9ybWFsIjogIuaomea6liIsCi0gICJBZGRyZXNzIjogIuOCouODieODrOOCuSIsCi0gICJGb3JtYXR0ZWQiOiAi5pW05b2i5riI44G/IiwKLSAgIiYjODIxMjsgZm9udCAmIzgyMTI7IjogIiYjODIxMjsg44OV44Kp44Oz44OIICYjODIxMjsiLAotICAiJiM4MjEyOyBzaXplICYjODIxMjsiOiAiJiM4MjEyOyDjgrXjgqTjgrogJiM4MjEyOyIsCi0gIAotICAvL2RpYWxvZ3MKLSAgIk9LIjogIk9LIiwKLSAgIkNhbmNlbCI6ICLkuK3mraIiLAotICAiUGF0aCI6ICLjg5HjgrkiLAotICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIuODhuOCreOCueODiOODouODvOODieOBp+aTjeS9nOOBl+OBpuOBhOOBvuOBmeOAgldZU0lXWUfnt6jpm4bjgavmiLvjgovjgavjga9bPD5d44Oc44K/44Oz44KS5L2/44Gj44Gm44GP44Gg44GV44GE44CCIiwKLSAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiTW96aWxsYeODmeODvOOCueOBrldlYuODluODqeOCpuOCtuOBp+OBr+OAgeiyvOOCiuS7mOOBkeODnOOCv+ODs+OBr+apn+iDveOBl+OBvuOBm+OCk++8iOaKgOihk+eahOOBquOCu+OCreODpeODquODhuOCo+S4iuOBrueQhueUseOBp++8ieOAgkN0cmwrVuOCreODvOOCkuaKvOOBl+OBpuebtOaOpeiyvOOCiuS7mOOBkeOBpuOBj+OBoOOBleOBhOOAgiIsCi0gICJZb3VyIERvY3VtZW50IGlzIG5vdCB3ZWxsIGZvcm1lZC4gQ2hlY2sgSmF2YVNjcmlwdCBjb25zb2xlIGZvciBkZXRhaWxzLiI6ICLjgZPjga7mlofmm7jjgavjga/mp4vmlofnmoTjgarllY/poYzjgYzjgYLjgorjgb7jgZnjgILoqbPntLDjga9KYXZhU2NyaXB044Kz44Oz44K944O844Or44KS5Y+C54Wn44GX44Gm44GP44Gg44GV44GE44CCIiwKLSAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayI6ICLjg6rjg7Pjgq/jgpLkvZzmiJDjgZnjgovjgavjga/jg4bjgq3jgrnjg4jjgpLpgbjmip7jgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZkiLAotCi0gICJBbGlnbm1lbnQ6IjogIuihjOaPg+OBiDoiLAotICAiTm90IHNldCI6ICLjgarjgZciLAotICAiTGVmdCI6ICLlt6YiLAotICAiUmlnaHQiOiAi5Y+zIiwKLSAgIlRleHR0b3AiOiAi44OG44Kt44K544OI5LiK6YOoIiwKLSAgIkFic21pZGRsZSI6ICLkuK3lpK4o57W25a++55qEKSIsCi0gICJCYXNlbGluZSI6ICLjg5njg7zjgrnjg6njgqTjg7MiLAotICAiQWJzYm90dG9tIjogIuS4iyjntbblr77nmoQpIiwKLSAgIkJvdHRvbSI6ICLkuIsiLAotICAiTWlkZGxlIjogIuS4reWkriIsCi0gICJUb3AiOiAi5LiKIiwKLQotICAiTGF5b3V0IjogIuODrOOCpOOCouOCpuODiCIsCi0gICJTcGFjaW5nIjogIumWk+malCIsCi0gICJIb3Jpem9udGFsOiI6ICLmsLTlubM6IiwKLSAgIkhvcml6b250YWwgcGFkZGluZyI6ICLmsLTlubPkvZnnmb0iLAotICAiVmVydGljYWw6IjogIuWeguebtDoiLAotICAiVmVydGljYWwgcGFkZGluZyI6ICLlnoLnm7TkvZnnmb0iLAotICAiQm9yZGVyIHRoaWNrbmVzczoiOiAi5aKD55WM57ea44Gu5aSq44GVOiIsCi0gICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIuWig+eVjOe3muOBjOOBquOBhOWgtOWQiOOBr+epuuOBruOBvuOBvuOBq+OBmeOCiyIsCi0KLSAgLy9JbnNlcnQgTGluawotICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIuODquODs+OCr+OBruaMv+WFpS/kv67mraMiLAotICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICLjgarjgZcgKOODh+ODleOCqeODq+ODiOOBq+S7u+OBm+OCiykiLAotICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICLmlrDjgZfjgYTjgqbjgqPjg7Pjg4njgqYgKF9ibGFuaykiLAotICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIuiHquW3seODleODrOODvOODoOWGhSAoX3NlbGYpIiwKLSAgIlRvcCBmcmFtZSAoX3RvcCkiOiAi5pyA5LiK5L2N44OV44Os44O844OgIChfdG9wKSIsCi0gICJPdGhlciI6ICLjgZ3jga7ku5YiLAotICAiVGFyZ2V0OiI6ICLjgr/jg7zjgrLjg4Pjg4g6IiwKLSAgIlRpdGxlICh0b29sdGlwKToiOiAi44K/44Kk44OI44OrOiIsCi0gICJVUkw6IjogIlVSTDoiLAotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogIuOBk+OBruODquODs+OCr+OBjOaMh+OBl+ekuuOBmVVSTOOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhCIsCi0KLSAgLy8gSW5zZXJ0IFRhYmxlCi0gICJJbnNlcnQgVGFibGUiOiAi44OG44O844OW44Or44Gu5oy/5YWlIiwKLSAgIlJvd3M6IjogIuihjDoiLAotICAiTnVtYmVyIG9mIHJvd3MiOiAi6KGM5pWwIiwKLSAgIkNvbHM6IjogIuWIlzoiLAotICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAi5YiX5pWwIiwKLSAgIldpZHRoOiI6ICLluYU6IiwKLSAgIldpZHRoIG9mIHRoZSB0YWJsZSI6ICLjg4bjg7zjg5bjg6vjga7luYUiLAotICAiUGVyY2VudCI6ICLjg5Hjg7zjgrvjg7Pjg4goJSkiLAotICAiUGl4ZWxzIjogIuODlOOCr+OCu+ODqyhweCkiLAotICAiRW0iOiAi55u45a++5YCkKGVtKSIsCi0gICJXaWR0aCB1bml0IjogIuW5heOBruWNmOS9jSIsCi0gICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIuWIl+OBruW5heOCkuWbuuWumiIsCi0gICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIuOBk+OBruODhuODvOODluODq+OBrumFjee9riIsCi0gICJDZWxsIHNwYWNpbmc6IjogIuOCu+ODq+mWk+malDoiLAotICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICLpmqPmjqXjgZnjgovjgrvjg6vplpPjga7ot53pm6IiLAotICAiQ2VsbCBwYWRkaW5nOiI6ICLjgrvjg6vkvZnnmb06IiwKLSAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAi44K744Or5YaF44Gr44GK44GR44KL5YaF5a6544Go5aKD55WM57ea44Go44Gu6Led6ZuiIiwKLSAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAi6KGM5pWw44KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GEIiwKLSAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAi5YiX5pWw44KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GEIiwKLQotICAvLyBJbnNlcnQgSW1hZ2UKLSAgIkluc2VydCBJbWFnZSI6ICLnlLvlg4/jga7mjL/lhaUiLAotICAiSW1hZ2UgVVJMOiI6ICLnlLvlg49VUkw6IiwKLSAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICLnlLvlg4/jga5VUkzjgpLjgZPjgZPjgavlhaXlipvjgZfjgb7jgZkiLAotICAiUHJldmlldyI6ICLooajnpLoiLAotICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIuOCpuOCo+ODs+ODieOCpuOBp+eUu+WDj+OCkuihqOekuiIsCi0gICJBbHRlcm5hdGUgdGV4dDoiOiAi5Luj5pu/44OG44Kt44K544OIOiIsCi0gICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICLnlLvlg4/ooajnpLrjgpLjgrXjg53jg7zjg4jjgZfjgarjgYTjg5bjg6njgqbjgrbjgavlv4XopoHjgafjgZkiLAotICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICLnlLvlg4/jga7phY3nva4iLAotICAiSW1hZ2UgUHJldmlldzoiOiAi55S75YOP6KGo56S6OiIsCi0gICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIlVSTOOCkuWFpeWKm+OBmeOCi+W/heimgeOBjOOBguOCiuOBvuOBmSIsCi0KLSAgLy8iYnV0dG9uX2JvbGQiOiAiZnIvYm9sZC5naWYiLAotICAvLyJidXR0b25fdW5kZXJsaW5lIjogImZyL3VuZGVybGluZS5naWYiLAotICAvLyJidXR0b25fc3RyaWtldGhyb3VnaCI6ICJmci9zdHJpa2V0aHJvdWdoLmdpZiIsCi0KLSAgLy8gRWRpdG9yIEhlbHAKLSAgIlhpbmhhIEhlbHAiOiAi44OY44Or44OXIiwKLSAgIkVkaXRvciBIZWxwIjogIuOCqOODh+OCo+OCv+OBruODmOODq+ODlyIsCi0gICJLZXlib2FyZCBzaG9ydGN1dHMiOiAi44Kt44O844Oc44O844OJ44K344On44O844OI44Kr44OD44OIIiwKLSAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICLjgqjjg4fjgqPjgr/jga/ku6XkuIvjga7jgq3jg7zmk43kvZzjgpLmj5DkvpvjgZfjgabjgYTjgb7jgZk6IiwKLSAgIkVOVEVSIjogIkVOVEVSIiwKLSAgIm5ldyBwYXJhZ3JhcGgiOiAi5paw6KaP5q616JC9IiwKLSAgIlNISUZULUVOVEVSIjogIlNISUZUK0VOVEVSIiwKLSAgImluc2VydCBsaW5lYnJlYWsiOiAi5q616JC95YaF5pS56KGM44Gu5oy/5YWlIiwKLSAgIlNldCBmb3JtYXQgdG8gcGFyYWdyYXBoIjogIuauteiQveabuOW8j+OBruioreWumiIsCi0gICJDbGVhbiBjb250ZW50IHBhc3RlZCBmcm9tIFdvcmQiOiAiV29yZOOBi+OCieiyvOOCiuS7mOOBkeOCieOCjOOBn+WGheWuueOBrua4heabuCIsCi0gICJIZWFkaW5ncyI6ICLopovlh7rjgZciLAotICAiQ2xvc2UiOiAi6ZaJ44GY44KLIiwKLQotICAvLyBMb2FkaW5nIG1lc3NhZ2VzCi0gICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAi44Ot44O844OJ5Lit44Gn44GZ44CC44GX44Gw44KJ44GP44GK5b6F44Gh44GP44Gg44GV44GEIiwKLSAgIkxvYWRpbmcgcGx1Z2luICRwbHVnaW4iIDogIuODreODvOODieS4reODl+ODqeOCsOOCpOODsyAkcGx1Z2luIiwKLSAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIiA6ICLnmbvpjLLkuK3jg5fjg6njgrDjgqTjg7MgJHBsdWdpbiIsIAotICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICLjgqrjg5bjgrjjgqfjgq/jg4jmp4vnr4nkuK0iLAotICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIlhpbmhh44OV44Os44O844Og44Ov44O844Kv55Sf5oiQ5LitIiwKLSAgIkluaXQgZWRpdG9yIHNpemUiOiLjgqjjg4fjgqPjgr/jgrXjgqTjgrrjga7liJ3mnJ/ljJYiLCAKLSAgIkNyZWF0ZSBUb29sYmFyIjogIuODhOODvOODq+ODkOODvOOBruS9nOaIkCIsCi0gICJDcmVhdGUgU3RhdHVzYmFyIiA6ICLjgrnjg4bjg7zjgr/jgrnjg5Djg7zjga7kvZzmiJAiLAotICAiUmVnaXN0ZXIgcmlnaHQgcGFuZWwiIDogIueZu+mMsiDlj7Pjg5Hjg43jg6siLCAKLSAgIlJlZ2lzdGVyIGxlZnQgcGFuZWwiIDogIueZu+mMsiDlt6bjg5Hjg43jg6siLCAKLSAgIlJlZ2lzdGVyIGJvdHRvbSBwYW5lbCIgOiAi55m76YyyIOS4i+ODkeODjeODqyIsIAotICAiUmVnaXN0ZXIgdG9wIHBhbmVsIiA6ICLnmbvpjLIg5LiK44OR44ON44OrIiwgCi0gICJGaW5pc2hpbmciIDogIuWujOS6hiIsCi0gIAotICAvLyBDb2xvclBpY2tlcgotICAiQ2xpY2sgYSBjb2xvci4uLiIgOiAi6Imy44KS44Kv44Oq44OD44KvLi4uIiwKLSAgIlNhbXBsZSIgOiAi44K144Oz44OX44OrIiwKLSAgIldlYiBTYWZlOiAiIDogIldlYuOCu+ODvOODlTogIiwKLSAgIkNvbG9yOiAiIDogIuiJsjogIiAgCi19OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvbHQuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMzQwMDkuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvbHQuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotCi0vLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKLS8vIEF1dGhvcjogSmFyb3NsYXYgxaBhdGtldmnEjSwgPGphcm9AYWtsLmx0PgotCi17Ci0gICJCb2xkIjogIlBhcnnFoWtpbnRpIiwKLSAgIkl0YWxpYyI6ICJLdXJzeXZhcyIsCi0gICJVbmRlcmxpbmUiOiAiUGFicmF1a3RpIiwKLSAgIlN0cmlrZXRocm91Z2giOiAiUGVyYnJhdWt0aSIsCi0gICJTdWJzY3JpcHQiOiAiQXBhdGluaXMgaW5kZWtzYXMiLAotICAiU3VwZXJzY3JpcHQiOiAiVmlyxaF1dGluaXMgaW5kZWtzYXMiLAotICAiSnVzdGlmeSBMZWZ0IjogIkx5Z2lhdmltYXMgcGFnYWwga2FpcsSZIiwKLSAgIkp1c3RpZnkgQ2VudGVyIjogIkx5Z2lhdmltYXMgcGFnYWwgY2VudHLEhSIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIkx5Z2lhdmltYXMgcGFnYWwgZGXFoWluxJkiLAotICAiSnVzdGlmeSBGdWxsIjogIkx5Z2l1b3RpIHBhc3RyYWlwxIUiLAotICAiT3JkZXJlZCBMaXN0IjogIk51bWVydW90YXMgc8SFcmHFoWFzIiwKLSAgIkJ1bGxldGVkIExpc3QiOiAiU3XFvmVua2xpbnRhcyBzxIVyYcWhYXMiLAotICAiRGVjcmVhc2UgSW5kZW50IjogIlN1bWHFvmludGkgcGFyYcWhdMSZIiwKLSAgIkluY3JlYXNlIEluZGVudCI6ICJQYWRpZGludGkgcGFyYcWhdMSZIiwKLSAgIkZvbnQgQ29sb3IiOiAixaByaWZ0byBzcGFsdmEiLAotICAiQmFja2dyb3VuZCBDb2xvciI6ICJGb25vIHNwYWx2YSIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAiSG9yaXpvbnRhbGkgbGluaWphIiwKLSAgIkluc2VydCBXZWIgTGluayI6ICLErnRlcnB0aSBudW9yb2TEhSIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIsSudGVycHRpIHBhdmVpa3NsaXVrxIUiLAotICAiSW5zZXJ0IFRhYmxlIjogIsSudGVycHRpIGxlbnRlbMSZIiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJQZXJqdW5ndGkgxK8gSFRNTC9XWVNJV1lHIiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIknFoXBsxJdzdGFzIHJlZGFnYXZpbW8gZWtyYW5hcy9FbmxhcmdlIEVkaXRvciIsCi0gICJBYm91dCB0aGlzIGVkaXRvciI6ICJBcGllIHJlZGFrdG9yacWzIiwKLSAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIlBhZ2FsYmEgbmF1ZG9qYW50IHJlZGFrdG9yacWzIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiRGFiYXJ0aW5pcyBzdGlsaXVzIiwKLSAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkF0xaFhdWtpYSBwYXNrdXRpbmkgasWrc8WzIHZlaWtzbcSFIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlBha2FydG9qYSBwYXNrdXRpbsSvIGF0xaFhdWt0xIUgasWrc8WzIHZlaWtzbcSFIiwKLSAgIkN1dCBzZWxlY3Rpb24iOiAiScWha2lycHRpIiwKLSAgIkNvcHkgc2VsZWN0aW9uIjogIktvcGlqdW90aSIsCi0gICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICLErnRlcnB0aSIsCi0gICJPSyI6ICJPSyIsCi0gICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKLSAgIlBhdGgiOiAiS2VsaWFzIiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJKxatzIGVzZXRlIHRla3N0byByZcW+aW1lLiAgTmF1ZG9raXRlIFs8Pl0gbXlndHVrxIUgZ3LEr8W+aW11aSDEryBXWVNJV1lHLiIsCi0gICJUaGUgZnVsbCBzY3JlZW4gbW9kZSBpcyBrbm93biB0byBjYXVzZSBwcm9ibGVtcyB3aXRoIEludGVybmV0IEV4cGxvcmVyLCBkdWUgdG8gYnJvd3NlciBidWdzIHRoYXQgd2Ugd2VyZW4iOiAiVGhlIGZ1bGwgc2NyZWVuIG1vZGUgaXMga25vd24gdG8gY2F1c2UgcHJvYmxlbXMgd2l0aCBJbnRlcm5ldCBFeHBsb3JlciwgZHVlIHRvIGJyb3dzZXIgYnVncyB0aGF0IHdlIHdlcmVuIiwKLSAgIkNhbmNlbCI6ICJBdMWhYXVrdGkiLAotICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIklkxJd0aS9Nb2RpZmlrdW90aSIsCi0gICJOZXcgd2luZG93IChfYmxhbmspIjogIk5hdWphcyBsYW5nYXMgKF9ibGFuaykiLAotICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJOb25lICh1c2UgaW1wbGljaXQpIiwKLSAgIk90aGVyIjogIktpdGFzIiwKLSAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJTYW1lIGZyYW1lIChfc2VsZikiLAotICAiVGFyZ2V0OiI6ICJUYXJnZXQ6IiwKLSAgIlRpdGxlICh0b29sdGlwKToiOiAiUGF2YWRpbmltYXMgKHRvb2x0aXApOiIsCi0gICJUb3AgZnJhbWUgKF90b3ApIjogIlRvcCBmcmFtZSAoX3RvcCkiLAotICAiVVJMOiI6ICJVUkw6IiwKLSAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICJKdXMgcHJpdmFsb3RlIG51cm9keXRpIFVSTCDEryBrdXJpIHJvZG8gxaFpdMSFIG51b3JvZGEiCi19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9sdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2x2LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDBiNGU3Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2x2LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLQotLy8gTEFORzogImx2IiwgRU5DT0RJTkc6IFVURi04Ci0vLyBBdXRob3I6IE1paGFpIEJhem9uLCBodHRwOi8vZHluYXJjaC5jb20vbWlzaG9vCi0vLyBUcmFuc2xhdGVkIGJ5OiBKYW5pcyBLbGF2aW5zLCA8amFuaXMua2xhdmluc0BkZXZpYS5sdj4KLQotewotICAiQm9sZCI6ICJUcmVrbmllbSBidXJ0aWVtIiwKLSAgIkl0YWxpYyI6ICJLdXJz7nbiIiwKLSAgIlVuZGVybGluZSI6ICJQYXN27nRyb3RzIiwKLSAgIlN0cmlrZXRocm91Z2giOiAiUOJyc3budHJvdHMiLAotICAiU3Vic2NyaXB0IjogIk5vdmlldG90IHplbSByaW5kYXMiLAotICAiU3VwZXJzY3JpcHQiOiAiTm92aWV0b3QgdmlycyByaW5kYXMiLAotICAiSnVzdGlmeSBMZWZ0IjogIkl6bO5kemlu4nQgcGEga3JlaXNpIiwKLSAgIkp1c3RpZnkgQ2VudGVyIjogIkl6bO5kemlu4nQgY2VudHLiIiwKLSAgIkp1c3RpZnkgUmlnaHQiOiAiSXps7mR6aW7idCBwYSBsYWJpIiwKLSAgIkp1c3RpZnkgRnVsbCI6ICJJemzuZHppbuJ0IHBhIHZpc3UgbGFwdSIsCi0gICJPcmRlcmVkIExpc3QiOiAiTnVtdXLndHMgc2FyYWtzdHMiLAotICAiQnVsbGV0ZWQgTGlzdCI6ICJTYXJha3N0cyIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAiU2FtYXppbuJ0IGF0a+JwaSIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAiUGFsaWVsaW7idCBhdGvicGkiLAotICAiRm9udCBDb2xvciI6ICJCdXJ0dSBrcuJzYSIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogIkZvbmEga3Lic2EiLAotICAiSG9yaXpvbnRhbCBSdWxlIjogIkhvcml6b2504mxhIGF0ZGFs7nTianN27nRyYSIsCi0gICJJbnNlcnQgV2ViIExpbmsiOiAiSWV2aWV0b3QgaGlwZXJzYWl0aSIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIklldmlldG90IGF0dOdsdSIsCi0gICJJbnNlcnQgVGFibGUiOiAiSWV2aWV0b3QgdGFidWx1IiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJTa2F07nQgSFRNTCBrb2R1IiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIlBhbGllbGlu4nQgUmVkaezndOJqdSIsCi0gICJBYm91dCB0aGlzIGVkaXRvciI6ICJQYXIg8G8gcmVkaezndOJqdSIsCi0gICJIZWxwIHVzaW5nIGVkaXRvciI6ICJSZWRp7Od04mphIHBhbO5ncyIsCi0gICJDdXJyZW50IHN0eWxlIjogIlBhdHJlaXrnamFpcyBzdGlscyIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJBdGNlbHQgcOdk52pvIGRhcmLuYnUiLAotICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiQXRr4nJ0b3QgcOdk52pvIGRhcmLuYnUiLAotICAiQ3V0IHNlbGVjdGlvbiI6ICJJemdyaWV6dCBpZXrubed0byIsCi0gICJDb3B5IHNlbGVjdGlvbiI6ICJLb3DndCBpZXrubed0byIsCi0gICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJJZXZpZXRvdCBpZXrubed0byIsCi0gICJPSyI6ICJMYWJpIiwKLSAgIkNhbmNlbCI6ICJBdGNlbHQiLAotICAiUGF0aCI6ICJDZe/wIiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJK+3MgcGF0bGFiYW4gZGFyYm9qYXRpZXMgVEVLU1RBIFJF3s5Nwi4gTGFpIHDicmlldHUgYXRwYWth7yB1eiBHUkFGSVNLTyBSRd7OTVUgKFdZU0lXSUcpLCBsaWV0b2ppZXQgWzw+XSBwb2d1LiIKLX0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvbmIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2OTQzNzkuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvbmIuanMKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotCi0vLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKLQotLy8gLSB0cmFuc2xhdGVkIGJ5IHNlczxzZXNAb25saW5lLm5vPgotLy8gQWRkaXRpb25hbCB0cmFuc2xhdGlvbnMgYnkgSMOldmFyZCBXaWd0aWwgPGhhdmFyZHdAZXh0ZW5kLm5vPgotLy8gQWRkaXRpb25hbCB0cmFuc2xhdGlvbnMgYnkgS2ltIFN0ZWluaGF1ZyA8a2ltQHN0ZWluaGF1Zy5jb20+Ci0KLXsKLSAgIkJvbGQiOiAiRmV0IiwKLSAgIkl0YWxpYyI6ICJLdXJzaXYiLAotICAiVW5kZXJsaW5lIjogIlVuZGVyc3RyZWtldCIsCi0gICJTdHJpa2V0aHJvdWdoIjogIkdqZW5ub21zdHJla2V0IiwKLSAgIlN1YnNjcmlwdCI6ICJOZWRzZW5rZXQiLAotICAiU3VwZXJzY3JpcHQiOiAiT3BwaMO4eWV0IiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJWZW5zdHJlanVzdGVyIiwKLSAgIkp1c3RpZnkgQ2VudGVyIjogIk1pZHRqdXN0ZXIiLAotICAiSnVzdGlmeSBSaWdodCI6ICJIw7h5cmVqdXN0ZXIiLAotICAiSnVzdGlmeSBGdWxsIjogIkJsb2tranVzdGVyIiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJOdW1tZXJlcnQgbGlzdGUiLAotICAiQnVsbGV0ZWQgTGlzdCI6ICJQdW5rdGxpc3RlIiwKLSAgIkRlY3JlYXNlIEluZGVudCI6ICJSZWR1c2VyIGlubnJ5a2siLAotICAiSW5jcmVhc2UgSW5kZW50IjogIsOYa2UgaW5ucnlrayIsCi0gICJGb250IENvbG9yIjogIlRla3N0ZmFyZ2UiLAotICAiQmFja2dyb3VuZCBDb2xvciI6ICJCYWtncnVuZHNmYXJnZSIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAiVmFubnJldHQgbGluamUiLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIkxhZyBsZW5rZSIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIlNldHQgaW5uIGJpbGRlIiwKLSAgIkluc2VydCBUYWJsZSI6ICJTZXR0IGlubiB0YWJlbGwiLAotICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIlZpcyBraWxkZWtvZGUiLAotICAiRW5sYXJnZSBFZGl0b3IiOiAiVmlzIGkgZWdldCB2aW5kdSIsCi0gICJBYm91dCB0aGlzIGVkaXRvciI6ICJPbSBkZW5uZSBlZGl0b3IiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiSGplbHAiLAotICAiQ3VycmVudCBzdHlsZSI6ICJOw6V2w6ZyZW5kZSBzdGlsIiwKLSAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkFuZ3JlciBzaXN0ZSByZWRpZ2VyaW5nIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkdqw7hyIG9tIHNpc3RlIGFuZ3JpbmciLAotICAiQ3V0IHNlbGVjdGlvbiI6ICJLbGlwcCB1dCBvbXLDpWRlIiwKLSAgIkNvcHkgc2VsZWN0aW9uIjogIktvcGllciBvbXLDpWRlIiwKLSAgIlNhdmUgYXMiOiAiTGFncmUgc29tIiwKLSAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIkxpbSBpbm4iLAotICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAiRmplcm4gZm9ybWF0dGVyaW5nIiwKLSAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIkZyYSB2ZW5zdHJlIG1vdCBow7h5cmUiLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiRnJhIGjDuHlyZSBtb3QgdmVuc3RyZSIsCi0gICJJbnNlcnQvT3ZlcndyaXRlIjogIlNldHQgaW5uL092ZXJza3JpdiIsCi0gICJPSyI6ICJPSyIsCi0gICJDYW5jZWwiOiAiQXZicnl0IiwKLSAgIlBhdGgiOiAiVGVrc3R2ZWxnZXIiLAotICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIkR1IGVyIGkgdGVrc3Rtb2R1cyAgS2xpa2sgcMOlIFs8Pl0gZm9yIMOlIGfDpSB0aWxiYWtlIHRpbCBXWVNJV0lHLiIsCi0gICJUaGUgZnVsbCBzY3JlZW4gbW9kZSBpcyBrbm93biB0byBjYXVzZSBwcm9ibGVtcyB3aXRoIEludGVybmV0IEV4cGxvcmVyLCBkdWUgdG8gYnJvd3NlciBidWdzIHRoYXQgd2Ugd2VyZW4iOiAiVmlzbmluZyBpIGVnZXQgdmluZHUgaGFyIGtqZW50ZSBwcm9ibGVtZXIgbWVkIEludGVybmV0IEV4cGxvcmVyLCBww6UgZ3J1bm4gYXYgcHJvYmxlbWVyIG1lZCBkZW5uZSBuZXR0bGVzZXJlbi4gTXVsaWdlIHByb2JsZW1lciBlciBldCB1cnlkZGlnIHNramVybWJpbGRlLCBtYW5nbGVuZGUgZWRpdG9yZnVua3Nqb25lciBvZy9lbGxlciBhdCBuZXR0bGVzZXJlbiBjcmFzaGVyLiBIdmlzIGR1IGJydWtlciBXaW5kb3dzIDk1IGVsbGVyIFdpbmRvd3MgOTggZXIgZGV0IG9nc8OlIG11bGlnaGV0ZXIgZm9yIGF0IFdpbmRvd3Mgd2lsbCBjcmFzaGUuXG5cblRyeWtrICIsCi0gICJDYW5jZWwiOiAiQXZicnl0IiwKLSAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJSZWRpZ2VyIGxlbmtlIiwKLSAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiRWdldCB2aW5kdSAoX2JsYW5rKSIsCi0gICJOb25lICh1c2UgaW1wbGljaXQpIjogIkluZ2VuIChicnVrIHN0YW5kYXJkaW5uc3RpbGxpbmcpIiwKLSAgIk90aGVyIjogIkFubmVuIiwKLSAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJTYW1tZSByYW1tZSAoX3NlbGYpIiwKLSAgIlRhcmdldDoiOiAiTcOlbDoiLAotICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUaXR0ZWwgKHRvb2x0aXApOiIsCi0gICJUb3AgZnJhbWUgKF90b3ApIjogIlRvcHByYW1tZSAoX3RvcCkiLAotICAiVVJMOiI6ICJBZHJlc3NlOiIsCi0gICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAiRHUgbcOlIHNrcml2ZSBpbm4gZW4gYWRyZXNzZSBzb20gZGVubmUgbGVua2VuIHNrYWwgcGVrZSB0aWwiLAotICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiRmplcm5lIGlubGluZSBmb250IHNwZXNpZmlrYXNqb25lciIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiw5huc2tlciBkdSDDpSBmamVybmUgc2tyaWZ0dHlwZXIiLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiw5huc2tlciBkdSDDpSBmamVybmUgc2tyaWZ0IHN0w7hycmVsc2VyIiwKLSAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiw5huc2tlciBkdSDDpSBmamVybmUgZmFyZ2VyIHDDpSBza3JpZnRlbiIsCi0gICJQcmludCBkb2N1bWVudCI6ICJTa3JpdiB1dCBkb2t1bWVudGV0IiwKLSAgIlNwbGl0IEJsb2NrIjogIlNlcGVyYXNqb25zYmxva2siLAotICAiVG9nZ2xlIEJvcmRlcnMiOiAiU2tydSBhdi9ww6UgaGplbHBlbGluamVyIHDDpSB0YWJlbGxlciIsCi0gICJTZWxlY3QgYWxsIjogIk1lcmsgYWx0IiwKLSAgLy8gTG9hZGluZyBtZXNzYWdlcwotICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQgISI6ICJXWVNJV1lHIGxhc3RlciwgdmVubmxpZ3N0IHZlbnQhIiwKLSAgIkNvbnN0cnVjdGluZyBtYWluIG9iamVjdCI6ICJWZW5ubGlnc3QgdmVudCIsCi0gICJDcmVhdGUgVG9vbGJhciI6ICJMYWcgdmVya3TDuHlsaW5qZSIsCi0gICJSZWdpc3RlciBwYW5lbCByaWdodCI6ICJSZWdpc3RyZXIgaMO4eXJlcGFuZWwiLAotICAiUmVnaXN0ZXIgcGFuZWwgbGVmdCI6ICJSZWdpc3RyZXIgdmVuc3RyZXBhbmVsIiwKLSAgIlJlZ2lzdGVyIHBhbmVsIHRvcCI6ICJSZWdpc3RyZXIgdG9wcGFuZWwiLAotICAiUmVnaXN0ZXIgcGFuZWwgYm90dG9tIjogIlJlZ2lzdHJlciBidW5ucGFuZWwiCi0KLX07CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9ubC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL25sLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzA0MmNhLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL25sLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLQotLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04Ci0vLyBBdXRob3I6IE1pY2hlbCBXZWVnZWVyaW5rIChpbmZvQG1tYy1zaG9wLm5sKSwgaHR0cDovL21tYy1zaG9wLm5sCi0KLS8vIEZPUiBUUkFOU0xBVE9SUzoKLS8vCi0vLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKLS8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKLS8vCi0vLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKLS8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKLS8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKLQotewotICAiQm9sZCI6ICJWZXQiLAotICAiSXRhbGljIjogIkN1cnNpZWYiLAotICAiVW5kZXJsaW5lIjogIk9uZGVyc3RyZXBlbiIsCi0gICJTdHJpa2V0aHJvdWdoIjogIkRvb3JoYWxlbiIsCi0gICJTdWJzY3JpcHQiOiAiU3Vic2NyaXB0IiwKLSAgIlN1cGVyc2NyaXB0IjogIlN1cGVyc2NyaXB0IiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJMaW5rcyB1aXRsaWpuZW4iLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiQ2VudHJlcmVuIiwKLSAgIkp1c3RpZnkgUmlnaHQiOiAiUmVjaHRzIHVpdGxpam5lbiIsCi0gICJKdXN0aWZ5IEZ1bGwiOiAiVWl0dnVsbGVuIiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJOdW1tZXJpbmciLAotICAiQnVsbGV0ZWQgTGlzdCI6ICJPcHNvbW1pbmdzdGVrZW5zIiwKLSAgIkRlY3JlYXNlIEluZGVudCI6ICJJbnNwcmluZ2luZyB2ZXJrbGVpbmVuIiwKLSAgIkluY3JlYXNlIEluZGVudCI6ICJJbnNwcmluZ2luZyB2ZXJncm90ZW4iLAotICAiRm9udCBDb2xvciI6ICJUZWtzdGtsZXVyIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAiQWNodGVyZ3JvbmRrbGV1ciIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAiSG9yaXpvbnRhbGUgbGlqbiIsCi0gICJJbnNlcnQgV2ViIExpbmsiOiAiSHlwZXJsaW5rIGludm9lZ2VuL2FhbnBhc3NlbiIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIkFmYmVlbGRpbmcgaW52b2VnZW4vYWFucGFzc2VuIiwKLSAgIkluc2VydCBUYWJsZSI6ICJUYWJlbCBpbnZvZWdlbiIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiSFRNTCBicm9uY29kZSIsCi0gICJFbmxhcmdlIEVkaXRvciI6ICJWZXJncm9vdCBFZGl0b3IiLAotICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiT3ZlciBkZXplIGVkaXRvciIsCi0gICJIZWxwIHVzaW5nIGVkaXRvciI6ICJYaW5oYSBoZWxwIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiSHVpZGlnZSBzdGlqbCIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJPbmdlZGFhbiBtYWtlbiIsCi0gICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJIZXJoYWxlbiIsCi0gICJDdXQgc2VsZWN0aW9uIjogIktuaXBwZW4iLAotICAiQ29weSBzZWxlY3Rpb24iOiAiS29waT9yZW4iLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiUGxha2tlbiIsCi0gICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICJUZWtzdHJpY2h0aW5nIGxpbmtzIG5hYXIgcmVjaHRzIiwKLSAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIlRla3N0cmljaHRpbmcgcmVjaHRzIG5hYXIgbGlua3MiLAotICAiT0siOiAiT0siLAotICAiQ2FuY2VsIjogIkFubnVsZXJlbiIsCi0gICJQYXRoIjogIlBhZCIsCi0gICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiSmUgYmVudCBpbiBURUtTVC1tb2RlLiBHZWJydWlrIGRlIFs8Pl0ga25vcCBvbSB0ZXJ1ZyB0ZSBrZXJlbiBuYWFyIFdZU0lXWUctbW9kZS4iLAotICAiVGhlIGZ1bGwgc2NyZWVuIG1vZGUgaXMga25vd24gdG8gY2F1c2UgcHJvYmxlbXMgd2l0aCBJbnRlcm5ldCBFeHBsb3JlciwgZHVlIHRvIGJyb3dzZXIgYnVncyB0aGF0IHdlIHdlcmVuIjogIkZ1bGxzY3JlZW4tbW9kZSB2ZXJvb3J6YWFrdCBwcm9ibGVtZW4gbWV0IEludGVybmV0IEV4cGxvcmVyIGRvb3IgYnVncyBpbiBkZSB3ZWJicm93c2VyIGRpZSB3ZSBuaWV0IGt1bm5lbiBvbXplaWxlbi4gSGllcmRvb3Iga3VubmVuIGRlIHZvbGdlbmRlIGVmZmVjdGVuIG9wdHJlZGVuOiB2ZXJrbm9laWRlIHRla3N0ZW4sIGVlbiB2ZXJsaWVzIGFhbiBlZGl0b3ItZnVuY3Rpb25hbGl0ZWl0IGVuL29mIHdpbGxla2V1cmlnIHZhc3Rsb3BlbiB2YW4gZGUgd2ViYnJvd3Nlci4gQWxzIHUgV2luZG93cyA5NSBvZiA5OCBnZWJydWlrdCwgaXMgaGV0IHplZXIgd2FhcnNjaGlqbmxpamsgZGF0IHUgZWVuIGFsZ2VtZW5lIGJlc2NoZXJtaW5nc2ZvdXQgKCIsCi0gICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKLSAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJIeXBlcmxpbmsgaW52b2VnZW4vYWFucGFzc2VuIiwKLSAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTmlldXcgdmVuc3RlciAoX2JsYW5rKSIsCi0gICJOb25lICh1c2UgaW1wbGljaXQpIjogIkdlZW4iLAotICAiT3RoZXIiOiAiQW5kZXIiLAotICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlplbGZkZSBmcmFtZSAoX3NlbGYpIiwKLSAgIlRhcmdldDoiOiAiRG9lbDoiLAotICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUaXRlbCAodG9vbHRpcCk6IiwKLSAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiQm92ZW5zdGUgZnJhbWUgKF90b3ApIiwKLSAgIlVSTDoiOiAiVVJMOiIsCi0gICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAiR2VlZiBkZSBVUkwgaW4gd2FhciBkZSBsaW5rIG5hYXIgdmVyd2lqc3QiCi19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3BsLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGYxNjk5Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3BsLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzCi0vLyBMQU5HOiAicGwiLCBFTkNPRElORzogVVRGLTgKLS8vIHRyYW5zbGF0ZWQ6IEtyenlzenRvZiBLb3Rvd2ljeiwgaHR0cDovL3d3dy5lc2tvdC5rcmFrb3cucGwvcG9ydGZvbGlvLywga290b0B3ZWJ3b3JrZXJzLnBsCi17Ci0gICJCb2xkIjogIlBvZ3J1YmllbmllIiwKLSAgIkl0YWxpYyI6ICJQb2NoeWxlbmllIiwKLSAgIlVuZGVybGluZSI6ICJQb2RrcmXFm2xlbmllIiwKLSAgIlN0cmlrZXRocm91Z2giOiAiUHJ6ZWtyZcWbbGVuaWUiLAotICAiU3Vic2NyaXB0IjogIkluZGVrcyBkb2xueSIsCi0gICJTdXBlcnNjcmlwdCI6ICJJbmRla3MgZ8Ozcm55IiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJXeXLDs3duYWogZG8gbGV3ZWoiLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiV3nFm3JvZGt1aiIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIld5csOzd25haiBkbyBwcmF3ZWoiLAotICAiSnVzdGlmeSBGdWxsIjogIld5anVzdHVqIiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJOdW1lcm93YW5pZSIsCi0gICJCdWxsZXRlZCBMaXN0IjogIld5cHVua3Rvd2FuaWUiLAotICAiRGVjcmVhc2UgSW5kZW50IjogIlptbmllanN6IHdjacSZY2llIiwKLSAgIkluY3JlYXNlIEluZGVudCI6ICJad2nEmWtzeiB3Y2nEmWNpZSIsCi0gICJGb250IENvbG9yIjogIktvbG9yIGN6Y2lvbmtpIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAiS29sb3IgdMWCYSIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAiTGluaWEgcG96aW9tYSIsCi0gICJJbnNlcnQgV2ViIExpbmsiOiAiV3N0YXcgYWRyZXMgc2llY2kgV2ViIiwKLSAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiV3N0YXcgb2JyYXoiLAotICAiSW5zZXJ0IFRhYmxlIjogIldzdGF3IHRhYmVsxJkiLAotICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIkVkeWNqYSBXWVNJV1lHL3cgxbpyw7NkbGUgc3Ryb255IiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIlBlxYJueSBla3JhbiIsCi0gICJBYm91dCB0aGlzIGVkaXRvciI6ICJJbmZvcm1hY2plIG8gdHltIGVkeXRvcnplIiwKLSAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIlBvbW9jIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiT2JlY255IHN0eWwiLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiQ29mYSBvc3RhdG5pbyB3eWtvbmFuZSBwb2xlY2VuaWUiLAotICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiUG9uYXdpYSBvc3RhdG5pbyB3eWtvbmFuZSBwb2xlY2VuaWUiLAotICAiQ3V0IHNlbGVjdGlvbiI6ICJXeWNpbmEgemF6bmFjemVuaWUgZG8gc2Nob3drYSIsCi0gICJDb3B5IHNlbGVjdGlvbiI6ICJLb3BpdWplIHphem5hY3plbmllIGRvIHNjaG93a2EiLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiV2tsZWphIHphd2FydG/Fm8SHIHNjaG93a2EiLAotICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiS2llcnVuZWsgdGVrc3R1IGxld28tcHJhd28iLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiS2llcnVuZWsgdGVrc3R1IHByYXdvLWxld28iLAotICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAiVXN1xYQgZm9ybWF0b3dhbmllIiwKLSAgIlNlbGVjdCBhbGwiOiAiWmF6bmFjeiB3c3p5c3RrbyIsCi0gICJQcmludCBkb2N1bWVudCI6ICJEcnVrdWogZG9rdW1lbnQiLAotICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICJXeWN6ecWbxIcgdGFnaSBNU09mZmljZSIsCi0gICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICJXeWNpc3ogYmV6cG/Fm3JlZG5pZSBwcnp5cGlzYW5pYSBjemNpb25layIsCi0gICJTcGxpdCBCbG9jayI6ICJQb2R6aWVsIGJsb2siLAotICAiVG9nZ2xlIEJvcmRlcnMiOiAiV8WCxIVjeiAvIHd5xYLEhWN6IHJhbWtpIiwKLQotICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICImIzgyMTI7IEZvcm1hdCAmIzgyMTI7IiwKLSAgIkhlYWRpbmcgMSI6ICJOYWfFgsOzd2VrIDEiLAotICAiSGVhZGluZyAyIjogIk5hZ8WCw7N3ZWsgMiIsCi0gICJIZWFkaW5nIDMiOiAiTmFnxYLDs3dlayAzIiwKLSAgIkhlYWRpbmcgNCI6ICJOYWfFgsOzd2VrIDQiLAotICAiSGVhZGluZyA1IjogIk5hZ8WCw7N3ZWsgNSIsCi0gICJIZWFkaW5nIDYiOiAiTmFnxYLDs3dlayA2IiwKLSAgIk5vcm1hbCI6ICJOb3JtYWxueSIsCi0gICJBZGRyZXNzIjogIkFkcmVzIiwKLSAgIkZvcm1hdHRlZCI6ICJQcmVmb3JtYXRvd2FueSIsCi0KLSAgLy9kaWFsb2dzCi0gICJPSyI6ICJPSyIsCi0gICJDYW5jZWwiOiAiQW51bHVqIiwKLSAgIlBhdGgiOiAixZpjaWXFvGthIiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJKZXN0ZcWbIHcgVFJZQklFIFRFS1NUT1dZTS4gVcW8eWogcHJ6eWNpc2t1IFs8Pl0sIGFieSBwcnplxYLEhWN6ecSHIHNpxJkgbmEgdHJ5YiBXWVNJV1lHLiIsCi0gICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIlByenljaXNrIFdrbGVqIG5pZSBkemlhxYJhIHcgcHJ6ZWdsxIVkYXJrYWNoIE1vemlsbGEgeiB1d2FnaSBuYSB1c3Rhd2llbmlhIGJlenBpZWN6ZcWEc3R3YS4gTmFjacWbbmlqIENSVEwtViwgYWJ5IHdrbGVpxIcgemF3YXJ0b8WbxIcgc2Nob3drYS4iLAotCi0gICJBbGlnbm1lbnQ6IjogIld5csOzd25hbmllOiIsCi0gICJOb3Qgc2V0IjogIk5pZSB1c3Rhd2lvbmUiLAotICAiTGVmdCI6ICJEbyBsZXdlaiIsCi0gICJSaWdodCI6ICJEbyBwcmF3ZWoiLAotICAiVGV4dHRvcCI6ICJHw7NyYSB0ZWtzdHUiLAotICAiQWJzbWlkZGxlIjogIkFicy4gxZtyb2RlayIsCi0gICJCYXNlbGluZSI6ICJMaW5pYSBiYXpvd2EiLAotICAiQWJzYm90dG9tIjogIkFicy4gZMOzxYIiLAotICAiQm90dG9tIjogIkTDs8WCIiwKLSAgIk1pZGRsZSI6ICLFmnJvZGVrIiwKLSAgIlRvcCI6ICJHw7NyYSIsCi0KLSAgIkxheW91dCI6ICJMYXlvdXQiLAotICAiU3BhY2luZyI6ICJTcGFjam93YW5pZSIsCi0gICJIb3Jpem9udGFsOiI6ICJQb3ppb21lOiIsCi0gICJIb3Jpem9udGFsIHBhZGRpbmciOiAiV2NpxJljaWUgcG96aW9tZSIsCi0gICJWZXJ0aWNhbDoiOiAiUGlvbm93ZToiLAotICAiVmVydGljYWwgcGFkZGluZyI6ICJXY2nEmWNpZSBwaW9ub3dlIiwKLSAgIkJvcmRlciB0aGlja25lc3M6IjogIkdydWJvxZvEhyBvYnJhbW93YW5pYToiLAotICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJCZXogcmFtZWsgLSB6b3N0YXcgcHVzdGUiLAotCi0gIC8vSW5zZXJ0IExpbmsKLSAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJXc3Rhdy9lZHl0dWogb2Rub8WbbmlrIiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiQnJhayIsCi0gICJOZXcgd2luZG93IChfYmxhbmspIjogIk5vd2Ugb2tubyAoX2JsYW5rKSIsCi0gICJTYW1lIGZyYW1lIChfc2VsZikiOiAiVGEgc2FtYSByYW1rYSAoX3NlbGYpIiwKLSAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiR8WCw7N3bmEgcmFta2EgKF90b3ApIiwKLSAgIk90aGVyIjogIklubmUiLAotICAiVGFyZ2V0OiI6ICJPa25vIGRvY2Vsb3dlOiIsCi0gICJUaXRsZSAodG9vbHRpcCk6IjogIlR5dHXFgiAodG9vbHRpcCk6IiwKLSAgIlVSTDoiOiAiVVJMOiIsCi0gICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAiTXVzaXN6IHBvZGHEhyBVUkwsIG5hIGpha2kgYsSZZHppZSB3c2thenl3YcWCIG9kbm/Fm25payIsCi0KLSAgLy8gSW5zZXJ0IFRhYmxlCi0gICJJbnNlcnQgVGFibGUiOiAiV3N0YXcgdGFiZWzEmSIsCi0gICJSb3dzOiI6ICJXaWVyc3p5OiIsCi0gICJOdW1iZXIgb2Ygcm93cyI6ICJMaWN6YmEgd2llcnN6eSIsCi0gICJDb2xzOiI6ICJLb2x1bW46IiwKLSAgIk51bWJlciBvZiBjb2x1bW5zIjogIkxpY3piYSBrb2x1bW4iLAotICAiV2lkdGg6IjogIlN6ZXJva2/Fm8SHOiIsCi0gICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiU3plcm9rb8WbxIcgdGFiZWxpIiwKLSAgIlBlcmNlbnQiOiAiUHJvY2VudCIsCi0gICJQaXhlbHMiOiAiUGlrc2VsaSIsCi0gICJFbSI6ICJFbSIsCi0gICJXaWR0aCB1bml0IjogIkplZG5vc3RrYSIsCi0gICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIktvbHVtbnkgbyBzdGHFgmVqIHN6ZXJva2/Fm2NpIiwKLSAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiUG96eWNqb25vd2FuaWUgdGFiZWxpIiwKLSAgIkNlbGwgc3BhY2luZzoiOiAiT2RzdMSZcCBrb23Ds3JlazoiLAotICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICJQcnplc3RyemXFhCBwb21pxJlkenkga29tw7Nya2FtaSIsCi0gICJDZWxsIHBhZGRpbmc6IjogIldjacSZY2llIGtvbcOzcmVrOiIsCi0gICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIlByemVzdHJ6ZcWEIG1pxJlkenkga3Jhd8SZZHppxIUgYSB6YXdhcnRvxZtjacSFIGtvbcOzcmtpIiwKLQotICAvLyBJbnNlcnQgSW1hZ2UKLSAgIkluc2VydCBJbWFnZSI6ICJXc3RhdyBvYnJhemVrIiwKLSAgIkltYWdlIFVSTDoiOiAiVVJMIG9icmF6a2E6IiwKLSAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICJQb2RhaiBVUkwgb2JyYXprYSIsCi0gICJQcmV2aWV3IjogIlBvZGdsxIVkIiwKLSAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJQb2RnbMSFZCBvYnJhemthIHcgbm93eW0gb2tuaWUiLAotICAiQWx0ZXJuYXRlIHRleHQ6IjogIlRla3N0IGFsdGVybmF0eXdueToiLAotICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiRGxhIHByemVnbMSFZGFyZWssIGt0w7NyZSBuaWUgb2JzxYJ1Z3VqxIUgb2JyYXprw7N3IiwKLSAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG96eWNqb25vd2FuaWUgb2JyYXprYSIsCi0gICJJbWFnZSBQcmV2aWV3OiI6ICJQb2RnbMSFZCBvYnJhemthOiIKLX0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvcHRfYnIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyOTg3M2YuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvcHRfYnIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAot77u/Ly8gSTE4TiBjb25zdGFudHMKLS8vCi0vLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKLS8vIFBvcnR1Z3Vlc2UgQnJhemlsaWFuIFRyYW5zbGF0aW9uCi0vLwotLy8gSW5pdGlhbCBiYXNpYyB3b3JrIGJ5IEFsZXggUGlheiA8d2VibWFzdGVyQGdsb2JhbG1hcC5jb20+Ci0vLwotLy8gQXV0aG9yOiBNYXJjaW8gQmFyYm9zYSwgPG1hcmNpb0BtcGcuY29tLmJyPgotLy8gTVNOOiB0b21hcnNoYWxsQG1zbi5jb20gLSBJQ1E6IDY5NDE5OTMzCi0vLyBTaXRlOiBodHRwOi8vd3d3Lm1wZy5jb20uYnIKLS8vCi0vLyBMYXN0IHJldmlzaW9uOiAwNiBzZXB0ZW1iZXIgMjAwNwotLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgotLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCi0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgotLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpCi17Ci0gICJBYm91dCI6ICJTb2JyZSIsCi0gICJBYm91dCBYaW5oYSI6ICJTb2JyZSBvIFhpbmhhIiwKLSAgIkFic2JvdHRvbSI6ICJJbmZlcmlvciBhYnNvbHV0byIsCi0gICJBYnNtaWRkbGUiOiAiTWVpbyBhYnNvbHV0byIsCi0gICJBbGlnbm1lbnQ6IjogIkFsaW5oYW1lbnRvIiwKLSAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJUZXh0byBhbHRlcm5hdGl2byIsCi0gICJCYXNlbGluZSI6ICJMaW5oYSBiYXNlIiwKLSAgIkJvbGQiOiAiTmVncml0byIsCi0gICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJFc3Blc3N1cmEgZGEgYm9yZGEiLAotICAiQm90dG9tIjogIkJvdMOjbyIsCi0gICJDVFJMLTAgKHplcm8pIjogIkNUUkwtMCAoemVybykiLAotICAiQ1RSTC0xIC4uIENUUkwtNiI6ICJDVFJMLTEgLi4gQ1RSTC02IiwKLSAgIkNUUkwtQSI6ICJDVFJMLUEiLAotICAiQ1RSTC1CIjogIkNUUkwtQiIsCi0gICJDVFJMLUMiOiAiQ1RSTC1DIiwKLSAgIkNUUkwtRSI6ICJDVFJMLUUiLAotICAiQ1RSTC1JIjogIkNUUkwtSSIsCi0gICJDVFJMLUoiOiAiQ1RSTC1KIiwKLSAgIkNUUkwtTCI6ICJDVFJMLUwiLAotICAiQ1RSTC1OIjogIkNUUkwtTiIsCi0gICJDVFJMLVIiOiAiQ1RSTC1SIiwKLSAgIkNUUkwtUyI6ICJDVFJMLVMiLAotICAiQ1RSTC1VIjogIkNUUkwtVSIsCi0gICJDVFJMLVYiOiAiQ1RSTC1WIiwKLSAgIkNUUkwtWCI6ICJDVFJMLVgiLAotICAiQ1RSTC1ZIjogIkNUUkwtWSIsCi0gICJDVFJMLVoiOiAiQ1RSTC1aIiwKLSAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCi0gICJDZWxsIHBhZGRpbmc6IjogIkVzcGHDp2FtZW50byBpbnRlcm5vIGRhIGPDqWx1bGE6IiwKLSAgIkNlbGwgc3BhY2luZzoiOiAiRXNwYcOnYW1lbnRvIGRhIGPDqWx1bGE6IiwKLSAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICJMaW1wYXIgY29udGXDumRvIGNvcGlhZG8gZG8gV29yZCIsCi0gICJDbG9zZSI6ICJGZWNoYXIiLAotICAiQ29sbGFwc2UgYm9yZGVyczoiOiAiQm9yZGFzIGZlY2hhZGFzOiIsCi0gICJDb2xzOiI6ICJDb2x1bmFzOiIsCi0gICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIkNvbnN0cnVpbmRvIG9iamV0byIsCi0gICJDb3B5IHNlbGVjdGlvbiI6ICJDb3BpYXIgc2VsZcOnw6NvIiwKLSAgIkNyZWF0ZSBTdGF0dXNiYXIiOiAiQ3JpYXIgYmFycmEgZGUgaW5mb3JtYcOnw6NvIChzdGF0dXNiYXIpIiwKLSAgIkNyZWF0ZSBUb29sYmFyIjogIkNyaWFyIEJhcnJhIGRlIEZlcnJhbWVudGFzIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiRXN0aWxvIEF0dWFsIiwKLSAgIkN1dCBzZWxlY3Rpb24iOiAiUmVjb3J0YXIgc2VsZcOnw6NvIiwKLSAgIkRldmVsb3BlciI6ICJEZXNlbnZvbHZlZG9yIiwKLSAgIkVOVEVSIjogIkVOVFJBUiIsCi0gICJFZGl0b3IgSGVscCI6ICJBanVkYSBkbyBFZGl0b3IiLAotICAiRW0iOiAiRW0iLAotICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkVudHJlIGFxdWkgY29tIGEgVVJMIGRhIGltYWdlbSIsCi0gICJGaW5pc2hpbmciOiAiVGVybWluYW5kbyIsCi0gICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIkNvbHVuYXMgY29tIGxhcmd1cmEgZml4YSIsCi0gICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJQYXJhIG5hdmVnYWRvcmVzIHF1ZSBuw6NvIHN1cG9ydGFtIGltYWdlbnMiLAotICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIkdlcmFyIMOBcmVhIGRlIFRyYWJhbGhvIGRvIFhpbmhhIiwKLSAgIkhlYWRpbmdzIjogIlTDrXR1bG9zIiwKLSAgIkhvcml6b250YWwgcGFkZGluZyI6ICJFc3Bhw6dhbWVudG8gaW50ZXJubyBob3Jpem9udGFsIiwKLSAgIkhvcml6b250YWw6IjogIkhvcml6b250YWw6IiwKLSAgIkltYWdlIFByZXZpZXc6IjogIlZpc3VhbGl6YcOnw6NvIGRhIEltYWdlbToiLAotICAiSW1hZ2UgVVJMOiI6ICJVUkwgZGEgaW1hZ2VtOiIsCi0gICJJbml0IGVkaXRvciBzaXplIjogIkluaWNpYXIgdGFtYW5obyBkbyBlZGl0b3IiLAotICAiSW5zZXJ0IEltYWdlIjogIkluc2VyaXIgSW1hZ2VtIiwKLSAgIkluc2VydCBUYWJsZSI6ICJJbnNlcmlyIFRhYmVsYSIsCi0gICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSW5zZXJpci9Nb2RpZmljYXIgTGluayIsCi0gICJJdGFsaWMiOiAiSXTDoWxpY28iLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiSnVzdGlmaWNhciBDZW50cmFsaXphZG8iLAotICAiSnVzdGlmeSBGdWxsIjogIkp1c3RpZmljYXIgQ29tcGxldGFtZW50ZSIsCi0gICJKdXN0aWZ5IExlZnQiOiAiSnVzdGlmaWNhciDDoCBFc3F1ZXJkYSIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIkp1c3RpZmljYXIgw6AgRGlyZWl0YSIsCi0gICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiQXRhbGhvcyBkZSBUZWNsYWRvIiwKLSAgIkxheW91dCI6ICJFc3F1ZW1hIiwKLSAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiRGVpeGUgZW0gYnJhbmNvIHBhcmEgbsOjbyB0ZXIgYm9yZGFzIiwKLSAgIkxlZnQiOiAiRXNxdWVyZGEiLAotICAiTGljZW5zZSI6ICJMaWNlbsOnYSIsCi0gICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiQ2FycmVnYW1lbnRvIGVtIHByb2Nlc3NvLiBQb3IgZmF2b3IsIGFndWFyZGUhIiwKLSAgIk1pZGRsZSI6ICJNZWlvIiwKLSAgIk5hbWUiOiAiTm9tZSIsCi0gICJOZXcgd2luZG93IChfYmxhbmspIjogIk5vdmEgamFuZWxhIChfYmxhbmspIiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiTmVuaHVtICh1c28gaW1wbGljaXRvKSIsCi0gICJOb3Qgc2V0IjogIk7Do28gZGVmaW5pZG8iLAotICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiTsO6bWVybyBkZSBjb2x1bmFzIiwKLSAgIk51bWJlciBvZiByb3dzIjogIk7Dum1lcm8gZGUgbGluaGFzIiwKLSAgIk9LIjogIk9LIiwKLSAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIkNvbGFyIGRhIMOBcmVhIGRlIFRyYW5zZmVyw6puY2lhIiwKLSAgIlBhdGgiOiAiQ2FtaW5obyIsCi0gICJQZXJjZW50IjogIlBvcmNlbnRhZ2VtIiwKLSAgIlBpeGVscyI6ICJQaXhlbHMiLAotICAiUGx1Z2lucyI6ICJQbHVnaW5zIiwKLSAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zaWNpb25hbWVudG8gZGVzdGEgaW1hZ2VtIiwKLSAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiUG9zaWNpb25hbWVudG8gZGVzdGEgdGFiZWxhIiwKLSAgIlByZXZpZXciOiAiVmlzdWFsaXphw6fDo28iLAotICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlZpc3VhbGl6YXIgYSBpbWFnZW0gZW0gdW1hIG5vdmEgamFuZWxhIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlJlZmF6ZXIgc3VhIMO6bHRpbWEgYcOnw6NvIiwKLSAgIlJpZ2h0IjogIkRpcmVpdGEiLAotICAiUm93czoiOiAiTGluaGFzOiIsCi0gICJTSElGVC1FTlRFUiI6ICJTSElGVC1FTlRFUiIsCi0gICJTYW1lIGZyYW1lIChfc2VsZikiOiAiTWVzbW8gZnJhbWUgKF9zZWxmKSIsCi0gICJTZWxlY3QgQ29sb3IiOiAiU2VsZWNpb25hciBjw7RyIiwKLSAgIlNlbGVjdCBhbGwiOiAiU2VsZWNpb25hciB0dWRvIiwKLSAgIlNldCBmb3JtYXQgdG8gcGFyYWdyYXBoIjogIkRlZmluaXIgZm9ybWF0byBwYXJhIG8gcGFyw6FncmFmbyIsCi0gICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIkVzcGHDp28gZW50cmUgY8OpbHVsYXMgYWRqYWNlbnRlcyIsCi0gICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIkVzcGHDp28gZW50cmUgY29udGXDumRvIGUgYm9yZGEgbmEgY8OpbHVsYSIsCi0gICJTcGFjaW5nIjogIkVzcGHDp2FtZW50byIsCi0gICJTcG9uc29yZWQgYnkiOiAiUGF0cm9jaW5hZG8gcG9yIiwKLSAgIlN0cmlrZXRocm91Z2giOiAiVGFjaGFkbyIsCi0gICJUYXJnZXQ6IjogIkRlc3Rpbm86IiwKLSAgIlRleHR0b3AiOiAiVGV4dG8gbm8gdG9wbyIsCi0gICJUaGFua3MiOiAiQWdyYWRlY2ltZW50b3MiLAotICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICJPIGJvdMOjbyBDb2xhciBuw6NvIGZ1bmNpb25hIGVtIG5hdmVnYWRvcmVzIGJhc2VhZG8gbm8gTW96aWxsYSAocG9yIHJhesO1ZXMgdMOpY25pY2FzIGRlIHNlZ3VyYW7Dp2EpLiBQcmVzc2lvbmUgQ1RSTC1WIG5vIHNldSB0ZWNsYWRvIHBhcmEgY29sYXIgZGlyZXRhbWVudGUuIiwKLSAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICJFc3RlIGVkaXRvciBmb3JuZWNlIGEgc2VndWludGUgY29tYmluYcOnw6NvIGRlIHRlY2xhczoiLAotICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUw610dWxvICh0b29sdGlwKSIsCi0gICJUb3AiOiAiVG9wbyIsCi0gICJUb3AgZnJhbWUgKF90b3ApIjogIkZyYW1lIG5vIHRvcG8gKF90b3ApIiwKLSAgIlVSTDoiOiAiVVJMOiIsCi0gICJVbmRlcmxpbmUiOiAiU3VibGluaGFkbyIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJEZXNmYXplciBzdWEgw7psdGltYSBhw6fDo28iLAotICAiVmVyc2lvbiI6ICJWZXJzw6NvIiwKLSAgIlZlcnRpY2FsIHBhZGRpbmciOiAiRXNwYcOnYW1lbnRvIGludGVybm8gdmVydGljYWwiLAotICAiVmVydGljYWw6IjogIlZlcnRpY2FsOiIsCi0gICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiTGFyZ3VyYW4gZGEgdGFiZWxhIiwKLSAgIldpZHRoIHVuaXQiOiAiVW5pZGFkZSBkZSBsYXJndXJhIiwKLSAgIldpZHRoOiI6ICJMYXJndXJhOiIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIkRlc2VqYSBsaW1wYXIgYXMgY29yZXMgZGUgZm9udGUiLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiRGVzZWphIGxpbXBhciBvcyB0YW1hbmhvcyBkZSBmb250ZSIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiRGVzZWphIGxpbXBhciBvcyB0aXBvcyBkZSBmb250ZSIsCi0gICJYaW5oYSBIZWxwIjogIkFqdWRhIGRvIFhpbmhhIiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJWb2PDqiBlc3TDoSBubyBNT0RPIFRFWFRPLiAgVXNlIG8gYm90w6NvIFs8Pl0gcGFyYSBtdWRhciBwYXJhIG8gbW9kbyBkZSBWaXN1YWxpemHDp8OjbyAoV1lTSVdZRykiLAotICAiWW91ciBEb2N1bWVudCBpcyBub3Qgd2VsbCBmb3JtZWQuIENoZWNrIEphdmFTY3JpcHQgY29uc29sZSBmb3IgZGV0YWlscy4iOiAiU2V1IERvY3VtZW50byBuw6NvIGVzdMOhIGZvcm1hdGFkbyBjb3JyZXRhbWVudGUuIFZlcmlmaXF1ZSBvIGNvbnNvbGUgZG8gSmF2YVNjcmlwdCBwYXJhIG1haW9yZXMgZGV0YWxoZXMuIiwKLSAgImluc2VydCBsaW5lYnJlYWsiOiAiaW5zZXJpciBxdWVicmEgZGUgbGluaGEiLAotICAibmV3IHBhcmFncmFwaCI6ICJub3ZvIHBhcsOhZ3JhZm8iLAotICAKLSAgLy8gbm90IGZpbmQgd2l0aCBsY19wYXJzZV9zdHJpbmdzLnBocAotICAiU3Vic2NyaXB0IjogIlN1YmVzY3JpdG8iLAotICAiU3VwZXJzY3JpcHQiOiAiU29icmVzY3JpdG8iLAotICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiRGEgZXNxdWVyZGEgcGFyYSBkaXJlaXRhIiwKLSAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIkRhIGRpcmVpdGEgcGFyYSBlc3F1ZXJkYSIsCi0gICJSZW1vdmUgZm9ybWF0dGluZyI6ICJSZW1vdmVyIGZvcm1hdGHDp8OjbyIsCi0gICJTZWxlY3QgYWxsIjogIlNlbGVjaW9uYXIgdHVkbyIsCi0gICJQcmludCBkb2N1bWVudCI6ICJJbXByaW1pciBkb2N1bWVudG8iLAotICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICJMaW1wYXIgdGFncyBkbyBNUyBPZmZpY2UiLAotICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiTGltcGFyIGVzcGVjaWZpY2HDp8O1ZXMgZGUgZm9udGVzIGlubGluZSIsCi0gICJTcGxpdCBCbG9jayI6ICJEaXZpZGlyIEJsb2NvIiwKLSAgIlRvZ2dsZSBCb3JkZXJzIjogIk11ZGFyIEJvcmRhcyIsCi0gICJTYXZlIGFzIjogIlNhbHZhciBjb21vIiwKLSAgIkluc2VydC9PdmVyd3JpdGUiOiAiSW5zZXJpci9Tb2JyZXNjcmV2ZXIiLAotICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICImIzgyMTI7IGZvcm1hdG8gJiM4MjEyOyIsCi0gICJIZWFkaW5nIDEiOiAiVMOtdHVsbyAxIiwKLSAgIkhlYWRpbmcgMiI6ICJUw610dWxvIDIiLAotICAiSGVhZGluZyAzIjogIlTDrXR1bG8gMyIsCi0gICJIZWFkaW5nIDQiOiAiVMOtdHVsbyA0IiwKLSAgIkhlYWRpbmcgNSI6ICJUw610dWxvIDUiLAotICAiSGVhZGluZyA2IjogIlTDrXR1bG8gNiIsCi0gICJOb3JtYWwiOiAiTm9ybWFsIiwKLSAgIkFkZHJlc3MiOiAiRW5kZXJlw6dvIiwKLSAgIkZvcm1hdHRlZCI6ICJGb3JtYXRhZG8iLAotICAiJiM4MjEyOyBmb250ICYjODIxMjsiOiAiJiM4MjEyOyBmb250ZSAmIzgyMTI7IiwKLSAgIiYjODIxMjsgc2l6ZSAmIzgyMTI7IjogIiYjODIxMjsgdGFtYW5obyAmIzgyMTI7IiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJMaXN0YSBOdW1lcmFkYSIsCi0gICJCdWxsZXRlZCBMaXN0IjogIkxpc3RhIE1hcmNhZG9yZXMiLAotICAiRGVjcmVhc2UgSW5kZW50IjogIkRpbWludWlyIEluZGVudGHDp8OjbyIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAiQXVtZW50YXIgSW5kZW50YcOnw6NvIiwKLSAgIkZvbnQgQ29sb3IiOiAiQ29yIGRhIEZvbnRlIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAiQ29yIGRvIEZ1bmRvIiwKLSAgIkhvcml6b250YWwgUnVsZSI6ICJMaW5oYSBIb3Jpem9udGFsIiwKLSAgIkluc2VydCBXZWIgTGluayI6ICJJbnNlcmlyIExpbmsiLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJbnNlcmlyL01vZGlmaWNhciBJbWFnZW0iLAotICAiSW5zZXJ0IFRhYmxlIjogIkluc2VyaXIgVGFiZWxhIiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJWZXIgQ8OzZGlnby1Gb250ZSIsCi0gICJFbmxhcmdlIEVkaXRvciI6ICJFeHBhbmRpciBFZGl0b3IiLAotICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiU29icmUgZXN0ZSBlZGl0b3IiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiQWp1ZGEgLSBVc2FuZG8gbyBlZGl0b3IiCi19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9yby5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3JvLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjIyOTMyLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3JvLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLQotLy8gTEFORzogInJvIiwgRU5DT0RJTkc6IFVURi04Ci0vLyBBdXRob3I6IE1paGFpIEJhem9uLCBodHRwOi8vZHluYXJjaC5jb20vbWlzaG9vCi0KLS8vIEZPUiBUUkFOU0xBVE9SUzoKLS8vCi0vLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKLS8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKLS8vCi0vLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKLS8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKLS8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKLQotewotICAiQm9sZCI6ICLDjm5ncm/Fn2F0IiwKLSAgIkl0YWxpYyI6ICJJdGFsaWMiLAotICAiVW5kZXJsaW5lIjogIlN1YmxpbmlhdCIsCi0gICJTdHJpa2V0aHJvdWdoIjogIlTEg2lhdCIsCi0gICJTdWJzY3JpcHQiOiAiSW5kaWNlIGpvcyIsCi0gICJTdXBlcnNjcmlwdCI6ICJJbmRpY2Ugc3VzIiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJBbGluaWVyZSBsYSBzdMOibmdhIiwKLSAgIkp1c3RpZnkgQ2VudGVyIjogIkFsaW5pZXJlIHBlIGNlbnRydSIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIkFsaW5pZXJlIGxhIGRyZWFwdGEiLAotICAiSnVzdGlmeSBGdWxsIjogIkFsaW5pZXJlIMOubiBhbWJlbGUgcMSDcsWjaSIsCi0gICJPcmRlcmVkIExpc3QiOiAiTGlzdMSDIG9yZG9uYXTEgyIsCi0gICJCdWxsZXRlZCBMaXN0IjogIkxpc3TEgyBtYXJjYXTEgyIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAiTWljxZ9vcmVhesSDIGFsaW5lYXR1bCIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAiTcSDcmXFn3RlIGFsaW5lYXR1bCIsCi0gICJGb250IENvbG9yIjogIkN1bG9hcmVhIHRleHR1bHVpIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAiQ3Vsb2FyZSBkZSBmdW5kYWwiLAotICAiSG9yaXpvbnRhbCBSdWxlIjogIkxpbmllIG9yaXpvbnRhbMSDIiwKLSAgIkluc2VydCBXZWIgTGluayI6ICJJbnNlcmVhesSDL21vZGlmaWPEgyBsaW5rIiwKLSAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiSW5zZXJlYXrEgy9tb2RpZmljxIMgaW1hZ2luZSIsCi0gICJJbnNlcnQgVGFibGUiOiAiSW5zZXJlYXrEgyB1biB0YWJlbCIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiU3Vyc2EgSFRNTCAvIFdZU0lXWUciLAotICAiRW5sYXJnZSBFZGl0b3IiOiAiTWF4aW1pemVhesSDIGVkaXRvcnVsIiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIkRlc3ByZSBlZGl0b3IiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiRG9jdW1lbnRhxaNpZSAoZGV2ZWwpIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiU3RpbHVsIGN1cmVudCIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJBbnVsZWF6xIMgdWx0aW1hIGFjxaNpdW5lIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlJlZmFjZSB1bHRpbWEgYWPFo2l1bmUgYW51bGF0xIMiLAotICAiQ3V0IHNlbGVjdGlvbiI6ICJUYWllIMOubiBjbGlwYm9hcmQiLAotICAiQ29weSBzZWxlY3Rpb24iOiAiQ29waWUgw65uIGNsaXBib2FyZCIsCi0gICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJBZHVjZSBkaW4gY2xpcGJvYXJkIiwKLSAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIkRpcmVjxaNpYSBkZSBzY3JpZXJlOiBzdMOibmdhIC0gZHJlYXB0YSIsCi0gICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJEaXJlY8WjaWEgZGUgc2NyaWVyZTogZHJlYXB0YSAtIHN0w6JuZ2EiLAotICAiT0siOiAiT0siLAotICAiQ2FuY2VsIjogIkFudWxlYXrEgyIsCi0gICJQYXRoIjogIkNhbGVhIiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJFxZ90aSDDrm4gbW9kdWwgVEVYVC4gIEFwYXPEgyBidXRvbnVsIFs8Pl0gcGVudHJ1IGEgdGUgw65udG9hcmNlIMOubiBtb2R1bCBXWVNJV1lHLiIsCi0gICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKLSAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJJbnNlcmVhesSDL21vZGlmY8SDIGxpbmsiLAotICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJGZXJlYXN0csSDIG5vdcSDIChfYmxhbmspIiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiTmltaWMgKGZvbG9zZcWfdGUgY2UtaSBpbXBsaWNpdCkiLAotICAiT3RoZXIiOiAiQWx0IHRhcmdldCIsCi0gICJTYW1lIGZyYW1lIChfc2VsZikiOiAiQWNlZWHFn2kgZmVyZWFzdHLEgyAoX3NlbGYpIiwKLSAgIlRhcmdldDoiOiAixaJpbnRhOiIsCi0gICJUaXRsZSAodG9vbHRpcCk6IjogIlRpdGx1bCAodG9vbHRpcCk6IiwKLSAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiRmVyZWFzdHJhIHByaW5jaXBhbMSDIChfdG9wKSIsCi0gICJVUkw6IjogIlVSTDoiLAotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogIlRyZWJ1aWUgc8SDIGludHJvZHVjZcWjaSB1biBVUkwiCi19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9ydS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3J1LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjM5NGMyLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3J1LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzCi0KLS8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAotLy8gQXV0aG9yOiBZdWx5YSBTaHR5cnlha292YSwgPHl1bHlhQHZkY29tLnJ1PgotCi0vLyBTb21lIGFkZGl0aW9ucyBieTogQWxleGV5IEtpcnBpY2huaWtvdiwgPGFsZXhraXJAa2l3aXN0dWRpby5ydT4KLS8vIEkgdG9vayBGcmVuY2ggdmVyc2lvbiBhcyBhIHNvdXJjZSBvZiBFbmdsaXNoIHBocmFzZXMgYmVjYXVzZSBGcmVuY2ggdmVyc2lvbiB3YXMgdGhlIG1vc3QgY29tcHJlaGVuc2l2ZQotLy8gKGZyLmpzIHdhcyB0aGUgbGFyZ2VzdCBmaWxlLCBhY3R1YWxseSkgJSkKLQotLy8gRk9SIFRSQU5TTEFUT1JTOgotLy8KLS8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQotLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQotLy8KLS8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOwotLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAotLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQotCi17Ci0gICJCb2xkIjogItCf0L7Qu9GD0LbQuNGA0L3Ri9C5IiwKLSAgIkl0YWxpYyI6ICLQndCw0LrQu9C+0L3QvdGL0LkiLAotICAiVW5kZXJsaW5lIjogItCf0L7QtNGH0LXRgNC60L3Rg9GC0YvQuSIsCi0gICJTdHJpa2V0aHJvdWdoIjogItCf0LXRgNC10YfQtdGA0LrQvdGD0YLRi9C5IiwKLSAgIlN1YnNjcmlwdCI6ICLQndC40LbQvdC40Lkg0LjQvdC00LXQutGBIiwKLSAgIlN1cGVyc2NyaXB0IjogItCS0LXRgNGF0L3QuNC5INC40L3QtNC10LrRgSIsCi0gICJKdXN0aWZ5IExlZnQiOiAi0J/QviDQu9C10LLQvtC80YMg0LrRgNCw0Y4iLAotICAiSnVzdGlmeSBDZW50ZXIiOiAi0J/QviDRhtC10L3RgtGA0YMiLAotICAiSnVzdGlmeSBSaWdodCI6ICLQn9C+INC/0YDQsNCy0L7QvNGDINC60YDQsNGOIiwKLSAgIkp1c3RpZnkgRnVsbCI6ICLQn9C+INGI0LjRgNC40L3QtSIsCi0gICJPcmRlcmVkIExpc3QiOiAi0J3Rg9C80LXRgNC+0LLQsNC90L3Ri9C5INGB0L/QuNGB0L7QuiIsCi0gICJCdWxsZXRlZCBMaXN0IjogItCc0LDRgNC60LjRgNC+0LLQsNC90L3Ri9C5INGB0L/QuNGB0L7QuiIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAi0KPQvNC10L3RjNGI0LjRgtGMINC+0YLRgdGC0YPQvyIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAi0KPQstC10LvQuNGH0LjRgtGMINC+0YLRgdGC0YPQvyIsCi0gICJGb250IENvbG9yIjogItCm0LLQtdGCINGI0YDQuNGE0YLQsCIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogItCm0LLQtdGCINGE0L7QvdCwIiwKLSAgIkhvcml6b250YWwgUnVsZSI6ICLQk9C+0YDQuNC30L7QvdGC0LDQu9GM0L3Ri9C5INGA0LDQt9C00LXQu9C40YLQtdC70YwiLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogItCS0YHRgtCw0LLQuNGC0Ywg0LPQuNC/0LXRgNGB0YHRi9C70LrRgyIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogItCS0YHRgtCw0LLQuNGC0Ywg0LjQt9C+0LHRgNCw0LbQtdC90LjQtSIsCi0gICJJbnNlcnQgVGFibGUiOiAi0JLRgdGC0LDQstC40YLRjCDRgtCw0LHQu9C40YbRgyIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAi0J/QvtC60LDQt9Cw0YLRjCBIdG1sLdC60L7QtCIsCi0gICJFbmxhcmdlIEVkaXRvciI6ICLQo9Cy0LXQu9C40YfQuNGC0Ywg0YDQtdC00LDQutGC0L7RgCIsCi0gICJBYm91dCB0aGlzIGVkaXRvciI6ICLQniDRgNC10LTQsNC60YLQvtGA0LUiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAi0J/QvtC80L7RidGMIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAi0KLQtdC60YPRidC40Lkg0YHRgtC40LvRjCIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLQntGC0LzQtdC90LjRgtGMIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogItCf0L7QstGC0L7RgNC40YLRjCIsCi0gICJDdXQgc2VsZWN0aW9uIjogItCS0YvRgNC10LfQsNGC0YwiLAotICAiQ29weSBzZWxlY3Rpb24iOiAi0JrQvtC/0LjRgNC+0LLQsNGC0YwiLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAi0JLRgdGC0LDQstC40YLRjCIsCi0gICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICLQndCw0L/RgNCw0LLQu9C10L3QuNC1INGB0LvQtdCy0LAg0L3QsNC/0YDQsNCy0L4iLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAi0J3QsNC/0YDQsNCy0LvQtdC90LjQtSDRgdC/0YDQsNCy0LAg0L3QsNC70LXQstC+IiwKLSAgIlJlbW92ZSBmb3JtYXR0aW5nIjogItCj0LHRgNCw0YLRjCDRhNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QuNC1IiwKLSAgIlNlbGVjdCBhbGwiOiAi0JLRi9C00LXQu9C40YLRjCDQstGB0LUiLAotICAiUHJpbnQgZG9jdW1lbnQiOiAi0J/QtdGH0LDRgtGMIiwKLSAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAi0KPQtNCw0LvQuNGC0Ywg0YDQsNC30LzQtdGC0LrRgyBNU09mZmljZSIsCi0gICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICLQo9C00LDQu9C40YLRjCDQvdC10L/QvtGB0YDQtdC00YHRgtCy0LXQvdC90L7QtSDQt9Cw0LTQsNC90LjQtSDRiNGA0LjRhNGC0L7QsiIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAi0KPQtNCw0LvQuNGC0Ywg0YLQuNC/0Ysg0YjRgNC40YTRgtC+0LI/IiwKLSAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogItCj0LTQsNC70LjRgtGMINGA0LDQt9C80LXRgNGLINGI0YDQuNGE0YLQvtCyID8iLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICLQo9C00LDQu9C40YLRjCDRhtCy0LXRgtCwINGI0YDQuNGE0YLQvtCyID8iLAotICAiU3BsaXQgQmxvY2siOiAi0KDQsNC30LTQtdC70LjRgtGMINCx0LvQvtC6IiwKLSAgIlRvZ2dsZSBCb3JkZXJzIjogItCS0LrQu9GO0YfQuNGC0Ywv0LLRi9C60LvRjtGH0LjRgtGMINC+0YLQvtCx0YDQsNC20LXQvdC40LUg0LPRgNCw0L3QuNGGIiwKLSAgIlNhdmUgYXMiOiAi0KHQvtGF0YDQsNC90LjRgtGMINC60LDQuiIsCi0gICJJbnNlcnQvT3ZlcndyaXRlIjogItCS0YHRgtCw0LLQutCwL9C30LDQvNC10L3QsCIsCi0gICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiYjODIxMjsg0YTQvtGA0LzQsNGC0LjRgNC+0LLQsNC90LjQtSAmIzgyMTI7IiwKLSAgIkhlYWRpbmcgMSI6ICLQl9Cw0LPQvtC70L7QstC+0LogMSIsCi0gICJIZWFkaW5nIDIiOiAi0JfQsNCz0L7Qu9C+0LLQvtC6IDIiLAotICAiSGVhZGluZyAzIjogItCX0LDQs9C+0LvQvtCy0L7QuiAzIiwKLSAgIkhlYWRpbmcgNCI6ICLQl9Cw0LPQvtC70L7QstC+0LogNCIsCi0gICJIZWFkaW5nIDUiOiAi0JfQsNCz0L7Qu9C+0LLQvtC6IDUiLAotICAiSGVhZGluZyA2IjogItCX0LDQs9C+0LvQvtCy0L7QuiA2IiwKLSAgIk5vcm1hbCI6ICLQntCx0YvRh9C90YvQuSDRgtC10LrRgdGCIiwKLSAgIkFkZHJlc3MiOiAi0JDQtNGA0LXRgSIsCi0gICJGb3JtYXR0ZWQiOiAi0J7RgtGE0L7RgNC80LDRgtC40YDQvtCy0LDQvdC90YvQuSDRgtC10LrRgdGCIiwKLQotICAiJiM4MjEyOyBmb250ICYjODIxMjsiOiAiJiM4MjEyOyDRiNGA0LjRhNGCICYjODIxMjsiLAotICAiJiM4MjEyOyBzaXplICYjODIxMjsiOiAiJiM4MjEyOyDRgNCw0LfQvNC10YAgJiM4MjEyOyIsCi0KLQotLy8g0JTQuNCw0LvQvtCz0LgKLQotICAiT0siOiAiT0siLAotICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCi0gICJQYXRoIjogItCf0YPRgtGMIiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICLQktGLINCyINGA0LXQttC40LzQtSDQvtGC0L7QsdGA0LDQttC10L3QuNGPIEh0bWwt0LrQvtC00LAuINC90LDQttC80LjRgtC1INC60L3QvtC/0LrRgyBbPD5dLCDRh9GC0L7QsdGLINC/0LXRgNC10LrQu9GO0YfQuNGC0YzRgdGPINCyINCy0LjQt9GD0LDQu9GM0L3Ri9C5INGA0LXQttC40LwuIiwKLQotIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAi0JrQvdC+0L/QutCwINCS0YHRgtCw0LLQuNGC0Ywg0L3QtSDRgNCw0LHQvtGC0LDQtdGCINCyINCx0YDQsNGD0LfQtdGA0LDRhSDQvdCwINC+0YHQvdC+0LLQtSBNb3ppbGxhICjQv9C+INGC0LXRhdC90LjRh9C10YHQutC40Lwg0L/RgNC40YfQuNC90LDQvCwg0YHQstGP0LfQsNC90L3Ri9C8INGBINCx0LXQt9C+0L/QsNGB0L3QvtGB0YLRjNGOKS4g0J3QsNC20LzQuNGC0LUgQ3RybC1WINC90LAg0LrQu9Cw0LLQuNCw0YLRg9GA0LUsINGH0YLQvtCx0Ysg0LLRgdGC0LDQstC40YLRjC4iLAotCi0gICJZb3VyIERvY3VtZW50IGlzIG5vdCB3ZWxsIGZvcm1lZC4gQ2hlY2sgSmF2YVNjcmlwdCBjb25zb2xlIGZvciBkZXRhaWxzLiI6ICLQktCw0Ygg0LTQvtC60YPQvNC10L3RgiDQvdC10L/RgNCw0LLQuNC70YzQvdC+INGB0YTQvtGA0LzQuNGA0L7QstCw0L0uINCf0L7RgdC80L7RgtGA0LjRgtC1INCa0L7QvdGB0L7Qu9GMIEphdmFTY3JpcHQsINGH0YLQvtCx0Ysg0YPQt9C90LDRgtGMINC/0L7QtNGA0L7QsdC90L7RgdGC0LguIiwKLQotICAiQWxpZ25tZW50OiI6ICLQktGL0YDQsNCy0L3QuNCy0LDQvdC40LUiLAotICAiTm90IHNldCI6ICLQndC1INGD0YHRgtCw0L3QvtCy0LvQtdC90L4iLAotICAiTGVmdCI6ICLQn9C+INC70LXQstC+0LzRgyDQutGA0LDRjiIsCi0gICJSaWdodCI6ICLQn9C+INC/0YDQsNCy0L7QvNGDINC60YDQsNGOIiwKLSAgIlRleHR0b3AiOiAi0J/QviDQstC10YDRhdC90LXQuSDQs9GA0LDQvdC40YbQtSDRgtC10LrRgdGC0LAiLAotICAiQWJzbWlkZGxlIjogItCf0L4g0YHQtdGA0LXQtNC40L3QtSDRgtC10LrRgdGC0LAiLAotICAiQmFzZWxpbmUiOiAi0J/QviDQvdC40LbQvdC10Lkg0LPRgNCw0L3QuNGG0LUg0YLQtdC60YHRgtCwIiwKLSAgIkFic2JvdHRvbSI6ICLQn9C+INC90LjQttC90LXQuSDQs9GA0LDQvdC40YbQtSIsCi0gICJCb3R0b20iOiAi0J/QviDQvdC40LbQvdC10LzRgyDQutGA0LDRjiIsCi0gICJNaWRkbGUiOiAi0J/QvtGB0YDQtdC00LjQvdC1IiwKLSAgIlRvcCI6ICLQn9C+INCy0LXRgNGF0L3QtdC80YMg0LrRgNCw0Y4iLAotCi0gICJMYXlvdXQiOiAi0KDQsNGB0L/QvtC70L7QttC10L3QuNC1IiwKLSAgIlNwYWNpbmciOiAi0J/QvtC70Y8iLAotICAiSG9yaXpvbnRhbDoiOiAi0J/QviDQs9C+0YDQuNC30L7QvdGC0LDQu9C4IiwKLSAgIkhvcml6b250YWwgcGFkZGluZyI6ICLQk9C+0YDQuNC30L7QvdGC0LDQu9GM0L3Ri9C1INC/0L7Qu9GPIiwKLSAgIlZlcnRpY2FsOiI6ICLQn9C+INCy0LXRgNGC0LjQutCw0LvQuCIsCi0gICJWZXJ0aWNhbCBwYWRkaW5nIjogItCS0LXRgNGC0LjQutCw0LvRjNC90YvQtSDQv9C+0LvRjyIsCi0gICJCb3JkZXIgdGhpY2tuZXNzOiI6ICLQotC+0LvRidC40L3QsCDRgNCw0LzQutC4IiwKLSAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAi0J7RgdGC0LDQstGM0YLQtSDQv9GD0YHRgtGL0LwsINGH0YLQvtCx0Ysg0YPQsdGA0LDRgtGMINGA0LDQvNC60YMiLAotCi0gIC8vSW5zZXJ0IExpbmsKLSAgIkluc2VydC9Nb2RpZnkgTGluayI6ICLQktGB0YLQsNCy0LrQsC/QuNC30LzQtdC90LXQvdC40LUg0YHRgdGL0LvQutC4IiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi0J/QviDRg9C80L7Qu9GH0LDQvdC40Y4iLAotICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICLQndC+0LLQvtC1INC+0LrQvdC+IChfYmxhbmspIiwKLSAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICLQotC+INC20LUg0L7QutC90L4gKF9zZWxmKSIsCi0gICJUb3AgZnJhbWUgKF90b3ApIjogItCg0L7QtNC40YLQtdC70YzRgdC60L7QtSDQvtC60L3QviAoX3RvcCkiLAotICAiT3RoZXIiOiAi0JTRgNGD0LPQvtC1IiwKLSAgIlRhcmdldDoiOiAi0J7RgtC60YDRi9Cy0LDRgtGMINCyINC+0LrQvdC1OiIsCi0gICJUaXRsZSAodG9vbHRpcCk6IjogItCS0YHQv9C70YvQstCw0Y7RidCw0Y8g0L/QvtC00YHQutCw0LfQutCwIiwKLSAgIlVSTDoiOiAiVVJMOiIsCi0gICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAi0JLRiyDQtNC+0LvQttC90Ysg0YPQutCw0LfQsNGC0YwgVVJMLCDQvdCwINC60L7RgtC+0YDRi9C5INCx0YPQtNC10YIg0YPQutCw0LfRi9Cy0LDRgtGMINGB0YHRi9C70LrQsCIsCi0gICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGluZyBhIGxpbmsiOiAi0JLRiyDQtNC+0LvQttC90Ysg0LLRi9C00LXQu9C40YLRjCDRgtC10LrRgdGCLCDQutC+0YLQvtGA0YvQuSDQsdGD0LTQtdGCINC/0YDQtdC+0LHRgNCw0LfQvtCy0LDQvSDQsiDRgdGB0YvQu9C60YMiLAotCi0gIC8vIEluc2VydCBUYWJsZQotICAiSW5zZXJ0IFRhYmxlIjogItCS0YHRgtCw0LLQutCwINGC0LDQsdC70LjRhtGLIiwKLSAgIlJvd3M6IjogItCh0YLRgNC+0LrQuCIsCi0gICJOdW1iZXIgb2Ygcm93cyI6ICLQmtC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0YDQvtC6IiwKLSAgIkNvbHM6IjogItCh0YLQvtC70LHRhtGLIiwKLSAgIk51bWJlciBvZiBjb2x1bW5zIjogItCa0L7Qu9C40YfQtdGB0YLQstC+INGB0YLQvtC70LHRhtC+0LIiLAotICAiV2lkdGg6IjogItCo0LjRgNC40L3QsCIsCi0gICJXaWR0aCBvZiB0aGUgdGFibGUiOiAi0KjQuNGA0LjQvdCwINGC0LDQsdC70LjRhtGLIiwKLSAgIlBlcmNlbnQiOiAi0L/RgNC+0YbQtdC90YLRiyIsCi0gICJQaXhlbHMiOiAi0L/QuNC60YHQtdC70YsiLAotICAiRW0iOiAiZW0iLAotICAiV2lkdGggdW5pdCI6ICLQldC00LjQvdC40YbRiyDQuNC30LzQtdGA0LXQvdC40Y8iLAotICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICLQodGC0L7Qu9Cx0YbRiyDRhNC40LrRgdC40YDQvtCy0LDQvdC90L7QuSDRiNC40YDQuNC90YsiLAotICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICLQoNCw0YHQv9C+0LvQvtC20LXQvdC40LUg0YLQsNCx0LvQuNGG0YsiLAotICAiQ2VsbCBzcGFjaW5nOiI6ICLQoNCw0YHRgdGC0L7Rj9C90LjQtSDQvNC10LbQtNGDINGP0YfQtdC50LrQsNC80LgiLAotICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICLQoNCw0YHRgdGC0L7Rj9C90LjQtSDQvNC10LbQtNGDINGB0L7RgdC10LTQvdC40LzQuCDRj9GH0LXQudC60LDQvNC4IiwKLSAgIkNlbGwgcGFkZGluZzoiOiAi0J/QvtC70Y8g0LIg0Y/Rh9C10LnQutCw0YUiLAotICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICLQoNCw0YHRgdGC0L7Rj9C90LjQtSDQvNC10LbQtNGDINCz0YDQsNC90LjRhtC10Lkg0Y/Rh9C10LnQutC4INC4INGC0LXQutGB0YLQvtC8IiwKLSAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAi0JLRiyDQtNC+0LvQttC90Ysg0LLQstC10YHRgtC4INC60L7Qu9C40YfQtdGB0YLQstC+INGB0YLRgNC+0LoiLAotICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICLQktGLINC00L7Qu9C20L3RiyDQstCy0LXRgdGC0Lgg0LrQvtC70LjRh9C10YHRgtCy0L4g0YHRgtC+0LvQsdGG0L7QsiIsCi0KLSAgLy8gSW5zZXJ0IEltYWdlCi0gICJJbnNlcnQgSW1hZ2UiOiAi0JLRgdGC0LDQstC60LAg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyIsCi0gICJJbWFnZSBVUkw6IjogIlVSTCDQuNC30L7QsdGA0LDQttC10L3QuNGPIiwKLSAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICLQktGB0YLQsNCy0YzRgtC1INCw0LTRgNC10YEg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyIsCi0gICJQcmV2aWV3IjogItCf0YDQtdC00LLQsNGA0LjRgtC10LvRjNC90YvQuSDQv9GA0L7RgdC80L7RgtGAIiwKLSAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICLQn9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdGL0Lkg0L/RgNC+0YHQvNC+0YLRgCDQsiDQvtGC0LTQtdC70YzQvdC+0Lwg0L7QutC90LUiLAotICAiQWx0ZXJuYXRlIHRleHQ6IjogItCQ0LvRjNGC0LXRgNC90LDRgtC40LLQvdGL0Lkg0YLQtdC60YHRgiIsCi0gICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICLQlNC70Y8g0LHRgNCw0YPQt9C10YDQvtCyLCDQutC+0YLQvtGA0YvQtSDQvdC1INC+0YLQvtCx0YDQsNC20LDRjtGCINC60LDRgNGC0LjQvdC60LgiLAotICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICLQoNCw0YHQv9C+0LvQvtC20LXQvdC40LUg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyIsCi0gICJJbWFnZSBQcmV2aWV3OiI6ICLQn9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdGL0Lkg0L/RgNC+0YHQvNC+0YLRgCIsCi0gICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogItCS0Ysg0LTQvtC70LbQvdGLINCy0LLQtdGB0YLQuCBVUkwiLAotCi0gIC8vIEVkaXRvciBIZWxwCi0gICJYaW5oYSBIZWxwIjogItCf0L7QvNC+0YnRjCIsCi0gICJFZGl0b3IgSGVscCI6ICLQn9C+0LzQvtGJ0YwiLAotICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogItCT0L7RgNGP0YfQuNC1INC60LvQsNCy0LjRiNC4IiwKLSAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICLQoNC10LTQsNC60YLQvtGAINC/0L7QtNC00LXRgNC20LjQstCw0LXRgiDRgdC70LXQtNGD0Y7RidC40LUg0LrQvtC80LHQuNC90LDRhtC40Lgg0LrQu9Cw0LLQuNGIOiIsCi0gICJFTlRFUiI6ICJFTlRFUiIsCi0gICJuZXcgcGFyYWdyYXBoIjogItC90L7QstGL0Lkg0LDQsdC30LDRhiIsCi0gICJTSElGVC1FTlRFUiI6ICJTSElGVCtFTlRFUiIsCi0gICJpbnNlcnQgbGluZWJyZWFrIjogItC/0LXRgNC10L3QvtGBINGB0YLRgNC+0LrQuCIsCi0gICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICLQntGC0YTQvtGA0LzQsNGC0LjRgNC+0LLQsNGC0Ywg0LDQsdC30LDRhiIsCi0gICJDbGVhbiBjb250ZW50IHBhc3RlZCBmcm9tIFdvcmQiOiAi0J7Rh9C40YHRgtC40YLRjCDRgtC10LrRgdGCLCDQstGB0YLQsNCy0LvQtdC90L3Ri9C5INC40LcgV29yZCIsCi0gICJIZWFkaW5ncyI6ICLQl9Cw0LPQvtC70L7QstC60LgiLAotICAiQ2xvc2UiOiAi0JfQsNC60YDRi9GC0YwiLAotCi0gIC8vIExvYWRpbmcgbWVzc2FnZXMKLSAgIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ICEiOiAi0JfQsNCz0YDRg9C30LrQsC4uLiDQn9C+0LbQsNC70YPQudGB0YLQsCwg0L/QvtC00L7QttC00LjRgtC1LiIsCi0gICJDb25zdHJ1Y3RpbmcgbWFpbiBvYmplY3QiOiAi0KHQvtC30LTQsNC90LjQtSDQs9C70LDQstC90L7Qs9C+INC+0LHRitC10LrRgtCwIiwKLSAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAi0KHQvtC30LTQsNC90LjQtSDQvtCx0YrQtdC60YLQsCIsCi0gICJSZWdpc3RlciBwYW5lbCByaWdodCI6ICLQoNC10LPQuNGB0YLRgNCw0YbQuNGPINC/0YDQsNCy0L7QuSDQv9Cw0L3QtdC70LgiLAotICAiUmVnaXN0ZXIgcGFuZWwgbGVmdCI6ICLQoNC10LPQuNGB0YLRgNCw0YbQuNGPINC70LXQstC+0Lkg0L/QsNC90LXQu9C4IiwKLSAgIlJlZ2lzdGVyIHBhbmVsIHRvcCI6ICLQoNC10LPQuNGB0YLRgNCw0YbQuNGPINCy0LXRgNGF0L3QtdC5INC/0LDQvdC10LvQuCIsCi0gICJSZWdpc3RlciBwYW5lbCBib3R0b20iOiAi0KDQtdCz0LjRgdGC0YDQsNGG0LjRjyDQvdC40LbQvdC10Lkg0L/QsNC90LXQu9C4IiwKLSAgIkNyZWF0ZSBUb29sYmFyIjogItCh0L7Qt9C00LDQvdC40LUg0L/QsNC90LXQu9C4INC40L3RgdGC0YDRg9C80LXQvdGC0L7QsiIsCi0gICJDcmVhdGUgU3RhdHVzQmFyIjogItCh0L7Qt9C00LDQvdC40LUg0L/QsNC90LXQu9C4INGB0L7RgdGC0L7Rj9C90LjRjyIsCi0gICJHZW5lcmF0ZSBYaW5oYSBvYmplY3QiOiAi0KHQvtC30LTQsNC90LjQtSDQvtCx0YrQtdC60YLQsCBYaW5oYSIsCi0gICJJbml0IGVkaXRvciBzaXplIjogItCY0L3QuNGG0LjQsNC70LjQt9Cw0YbQuNGPINGA0LDQt9C80LXRgNCwINGA0LXQtNCw0LrRgtC+0YDQsCIsCi0gICJJbml0IElGcmFtZSI6ICLQuNC90LjRhtC40LDQu9C40LfQsNGG0LjRjyBpZnJhbWUiLAotICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAi0KDQtdCz0LjRgdGC0YDQsNGG0LjRjyAkcGx1Z2luIgotfTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvc2guanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NmEwZGYuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvc2guanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAot77u/Ly8gSTE4TiBjb25zdGFudHMKLQotLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04IHwgSVNPLTg4NTktMgotLy8gQXV0aG9yOiBManViYSBSYW5rb3ZpxIcsIGh0dHA6Ly93d3cucmFua292aWMubmV0L2xqdWJhcgotCi0vLyBGT1IgVFJBTlNMQVRPUlM6Ci0vLwotLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCi0vLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCi0vLwotLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7Ci0vLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50Ci0vLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCi0KLXsKLQkJIkJvbGQiOiAiTWFzbm8iLAotCQkiSXRhbGljIjogIkt1cnppdiIsCi0JCSJVbmRlcmxpbmUiOiAiUG9kdnXEjWVubyIsCi0JCSJTdHJpa2V0aHJvdWdoIjogIlByZWNydGFubyIsCi0JCSJTdWJzY3JpcHQiOiAiSW5kZWtzLXRla3N0IiwKLQkJIlN1cGVyc2NyaXB0IjogIkVrc3BvbmVudC10ZWtzdCIsCi0JCSJKdXN0aWZ5IExlZnQiOiJSYXZuYW5qZSB1bGV2byIsCi0JCSJKdXN0aWZ5IENlbnRlciI6ICJSYXZuYW5qZSBwbyBzaW1ldHJhbGkiLAotCQkiSnVzdGlmeSBSaWdodCI6ICJSYXZuYW5qZSB1ZGVzbm8iLAotCQkiSnVzdGlmeSBGdWxsIjogIlB1bm8gcmF2bmFuamUiLAotCQkiT3JkZXJlZCBMaXN0IjogIkxpc3RhIHNhIHJlZG5pbSBicm9qZXZpbWEiLAotCQkiQnVsbGV0ZWQgTGlzdCI6ICJMaXN0YSBzYSBzaW1ib2xpbWEiLAotCQkiRGVjcmVhc2UgSW5kZW50IjogInNtYW5qaSB1dmxhxI1lbmplIiwKLQkJIkluY3JlYXNlIEluZGVudCI6ICJQb3ZlxIdhaiB1dmxhxI1lbmplIiwKLQkJIkZvbnQgQ29sb3IiOiAiQm9qYSBzbG92YSIsCi0JCSJCYWNrZ3JvdW5kIENvbG9yIjogIkJvamEgcG96YWRpbmUiLAotCQkiSG9yaXpvbnRhbCBSdWxlIjogIkhvcml6b250YWxuYSBsaW5pamEiLAotCQkiSW5zZXJ0IFdlYiBMaW5rIjogIkRvZGFqIHdlYiBsaW5rIiwKLQkJIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiRG9kYWovcHJvbWVuaSBzbGlrdSIsCi0JCSJJbnNlcnQgVGFibGUiOiAiVWJhY2kgdGFiZWx1IiwKLQkJIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJQcmViYWNpIG5hIEhUTUwga29kIiwKLQkJIkVubGFyZ2UgRWRpdG9yIjogIlBvdmXEh2FqIGVkaXRvciIsCi0JCSJBYm91dCB0aGlzIGVkaXRvciI6ICJPIG92b20gZWRpdG9ydSIsCi0JCSJIZWxwIHVzaW5nIGVkaXRvciI6ICJQb21vxIcgcHJpIGtvcmnFocSHZW5qdSBlZGl0b3JhIiwKLQkJIkN1cnJlbnQgc3R5bGUiOiAiVmHFvmXEh2kgc3RpbCIsCi0JCSJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJQb25pxaF0YXZhIHBvc2xlZG5qdSByYWRuanUiLAotCQkiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiVnJhxIdhIHBvc2xlZG5qdSByYWRuanUiLAotCQkiQ3V0IHNlbGVjdGlvbiI6ICJJc2VjaSBpemFicmFubyIsCi0JCSJDb3B5IHNlbGVjdGlvbiI6ICJLb3BpcmFqIGl6YWJyYW5vIiwKLQkJIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIlphbGVwaSBpeiBrbGlwYm9yZGEiLAotCQkiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiUHJhdmFjIHMgbGV2YSBuYSBkZXNubyIsCi0JCSJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJQcmF2YWMgcyBkZXNuYSBuYSBsZXZvIiwKLSAgICAgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIlVrb25pIGZvcm1hdGlyYW5qZSIsCi0gICAgICAgICJTZWxlY3QgYWxsIjogIkl6YWJlcmkgc3ZlIiwKLSAgICAgICAgIlByaW50IGRvY3VtZW50IjogIsWgdGFtcGFqIGRva3VtZW50IiwKLSAgICAgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiT2JyacWhaSBNU09mZmljZSB0YWdvdmUiLAotICAgICAgICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiT2JyacWhaSBkb2RlbGplbmUgb3NvYmluZSBmb250YSIsCi0gICAgICAgICJTcGxpdCBCbG9jayI6ICJQb2RlbGkgYmxvayIsCi0gICAgICAgICJUb2dnbGUgQm9yZGVycyI6ICJJem1lbmkgb2t2aXJlIiwKLQotICAgICAgICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICImIzgyMTI7IEZvcm1hdCAmIzgyMTI7IiwKLSAgICAgICAgIkhlYWRpbmcgMSI6ICJaYWdsYXZsamUgMSIsCi0gICAgICAgICJIZWFkaW5nIDIiOiAiWmFnbGF2bGplIDIiLAotICAgICAgICAiSGVhZGluZyAzIjogIlphZ2xhdmxqZSAzIiwKLSAgICAgICAgIkhlYWRpbmcgNCI6ICJaYWdsYXZsamUgNCIsCi0gICAgICAgICJIZWFkaW5nIDUiOiAiWmFnbGF2bGplIDUiLAotICAgICAgICAiSGVhZGluZyA2IjogIlphZ2xhdmxqZSA2IiwKLSAgICAgICAgIk5vcm1hbCI6ICJPYmnEjWFuIiwKLSAgICAgICAgIkFkZHJlc3MiOiAiQWRyZXNhIiwKLSAgICAgICAgIkZvcm1hdHRlZCI6ICJGb3JtYXRpcmFuIiwKLSAgICAgICAgCi0gICAgICAgIC8vIGRpYWxvZ3MKLQkJIk9LIjogIk9LIiwKLQkJIkNhbmNlbCI6ICJQb25pxaF0aSIsCi0JCSJQYXRoIjogIlB1dGFuamEiLAotCQkiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIk5hbGF6aXRlIHNlIHUgVEVYVCByZcW+aW11LiAgS29yaXN0aXRlIFs8Pl0gZHVnbWUgemEgcG92cmF0YWsgbmEgV1lTSVdZRy4iLAotCi0JCSJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIsCi0KLSAgICAgICAgIkFsaWdubWVudDoiOiAiUmF2bmFuamUiLAotICAgICAgICAiTm90IHNldCI6ICJOaWplIHBvc3RhdmxqZW5vIiwKLSAgICAgICAgIkxlZnQiOiAiTGV2byIsCi0gICAgICAgICJSaWdodCI6ICJEZXNubyIsCi0gICAgICAgICJUZXh0dG9wIjogIlZyaCB0ZWtzdGEiLAotICAgICAgICAiQWJzbWlkZGxlIjogIkFwc29sdXRuYSBzcmVkaW5hIiwKLSAgICAgICAgIkJhc2VsaW5lIjogIkRvbmphIGxpbmlqYSIsCi0gICAgICAgICJBYnNib3R0b20iOiAiQXBzb2x1dG5vIGRubyIsCi0gICAgICAgICJCb3R0b20iOiAiRG5vIiwKLSAgICAgICAgIk1pZGRsZSI6ICJTcmVkaW5hIiwKLSAgICAgICAgIlRvcCI6ICJWcmgiLAotCi0gICAgICAgICJMYXlvdXQiOiAiUHJlbG9tIiwKLSAgICAgICAgIlNwYWNpbmciOiAiUmF6bWFrIiwKLSAgICAgICAgIkhvcml6b250YWw6IjogIlBvIGhvcml6b250YWxpIiwKLSAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICJIb3Jpem9udGFsbm8gb2RzdG9qYW5qZSIsCi0gICAgICAgICJWZXJ0aWNhbDoiOiAiUG8gdmVydGlrYWxpIiwKLSAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiVmVydGlrYWxubyBvZHN0b2phbmplIiwKLSAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIkRlYmxqaW5hIG9rdmlyYSIsCi0gICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIk9zdGF2aSBwcmF6bm8ga2FkIG5lbWEgb2t2aXJhIiwKLQkJCi0gICAgICAgIC8vIEluc2VydCBMaW5rCi0JCSJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiRG9kYWovcHJvbWVuaSBMaW5rIiwKLQkJIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAia29yaXN0aSBwb2RyYXp1bWV2YW5vIiwKLQkJIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTm92b20gcHJvem9ydSAoX2JsYW5rKSIsCi0JCSJTYW1lIGZyYW1lIChfc2VsZikiOiAiSXN0aSBmcmVqbSAoX3NlbGYpIiwKLQkJIlRvcCBmcmFtZSAoX3RvcCkiOiAiR2xhdm5pIGZyZWptIChfdG9wKSIsCi0JCSJPdGhlciI6ICJEcnVnbyIsCi0JCSJUYXJnZXQ6IjogIk90dm9yaSB1OiIsCi0JCSJUaXRsZSAodG9vbHRpcCk6IjogIk5heml2ICh0b29sdGlwKToiLAotCQkiVVJMOiI6ICJVUkw6IiwKLQkJIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICJNb3JhdGUgdW5ldGkgVVJMIG5hIGtvamkgdm9kaSBvdmFqIGxpbmsiLAotCQkKLSAgICAgICAgLy8gSW5zZXJ0IFRhYmxlCi0gICAgICAgICJJbnNlcnQgVGFibGUiOiAiVWJhY2kgdGFiZWx1IiwKLSAgICAgICAgIlJvd3M6IjogIlJlZG92aSIsCi0gICAgICAgICJOdW1iZXIgb2Ygcm93cyI6ICJCcm9qIHJlZG92YSIsCi0gICAgICAgICJDb2xzOiI6ICJLb2xvbmUiLAotICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiQnJvaiBrb2xvbmEiLAotICAgICAgICAiV2lkdGg6IjogIsWgaXJpbmEiLAotICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIsWgaXJpbmEgdGFiZWxlIiwKLSAgICAgICAgIlBlcmNlbnQiOiAiUHJvY2VuYXQiLAotICAgICAgICAiUGl4ZWxzIjogIlBpa3NlbGkiLAotICAgICAgICAiRW0iOiAiRW0iLAotICAgICAgICAiV2lkdGggdW5pdCI6ICJKZWRpbmljYSDFoWlyaW5lIiwKLSAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiRmlrc2lyYW5hIMWhaXJpbmEga29sb25hIiwKLSAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiUG9zdGF2bGphbmplIG92ZSB0YWJlbGUiLAotICAgICAgICAiQ2VsbCBzcGFjaW5nOiI6ICJSYXN0b2phbmplIMSHZWxpamEiLAotICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICJSYXN0b2phbmplIG5hc3ByYW1uaWggxIdlbGlqYSIsCi0gICAgICAgICJDZWxsIHBhZGRpbmc6IjogIlVudXRyYcWhbmphIG9kc3RvamFuamEgdSDEh2VsaWppIiwKLSAgICAgICAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAiUmFzdG9qYW5qZSBpem1lxJF1IHNhZHLFvmFqYSBpIG9rdmlyYSDEh2VsaWplIiwKLQotICAgICAgICAvLyBJbnNlcnQgSW1hZ2UKLSAgICAgICAgIkluc2VydCBJbWFnZSI6ICJVYmFjaSBzbGlrdSIsCi0gICAgICAgICJJbWFnZSBVUkw6IjogIlVSTCBzbGlrZSIsCi0gICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiVW5lc2l0ZSBVUkwgc2xpa2Ugb3ZkZSIsCi0gICAgICAgICJQcmV2aWV3IjogIlByZWdsZWQiLAotICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlByZWdsZWRhaiBzbGlrdSB1IG5vdm9tIHByb3pvcnUiLAotICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIkFsdGVybmF0aXZuaSB0ZWtzdCIsCi0gICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJaYSBwcmV0cmHFvml2YcSNZSBrb2ppIG5lIHBvZHLFvmF2YWp1IHNsaWtlIiwKLSAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zdGF2bGphbmplIG92ZSBzbGlrZSIsCi0gICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICJQcmVnbGVkIHNsaWtlIiwKLSAgICAgICAgCi0gICAgICAgIC8vIFNlbGVjdCBDb2xvciBwb3B1cAotCQkiU2VsZWN0IENvbG9yIjogIkl6YWJlcml0ZSBib2p1IgotfTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3NpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvc2kuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNGFiYmUuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvc2kuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotCi0vLyBMQU5HOiAic2kiLCBFTkNPRElORzogVVRGLTgKLS8vIEF1dGhvcjogVG9tYXogS3JlZ2FyLCB4X3RvbW9feEBlbWFpbC5zaQotCi0vLyBGT1IgVFJBTlNMQVRPUlM6Ci0vLwotLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCi0vLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCi0vLwotLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7Ci0vLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50Ci0vLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCi0KLXsKLSAgIkJvbGQiOiAiS3JlcGtvIiwKLSAgIkl0YWxpYyI6ICJMZcW+ZcSNZSIsCi0gICJVbmRlcmxpbmUiOiAiUG9kxI1ydGFubyIsCi0gICJTdHJpa2V0aHJvdWdoIjogIlByZcSNcnRhbm8iLAotICAiU3Vic2NyaXB0IjogIlBvZHBpc2FubyIsCi0gICJTdXBlcnNjcmlwdCI6ICJOYWRwaXNhbm8iLAotICAiSnVzdGlmeSBMZWZ0IjogIlBvcmF2bmFqIGxldm8iLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiTmEgc3JlZGlubyIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIlBvcmF2bmFqIGRlc25vIiwKLSAgIkp1c3RpZnkgRnVsbCI6ICJQb3JhemRlbGkgdnNlYmlubyIsCi0gICJPcmRlcmVkIExpc3QiOiAiT8WhdGV2aWzEjWV2YW5qZSIsCi0gICJCdWxsZXRlZCBMaXN0IjogIk96bmHEjWV2YW5qZSIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAiWm1hbmrFoWFqIHphbWlrIiwKLSAgIkluY3JlYXNlIEluZGVudCI6ICJQb3ZlxI1haiB6YW1payIsCi0gICJGb250IENvbG9yIjogIkJhcnZhIHBpc2F2ZSIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogIkJhcnZhIG96YWRqYSIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAiVm9kb3Jhdm5hIMSNcnRhIiwKLSAgIkluc2VydCBXZWIgTGluayI6ICJWc3RhdmkgaGlwZXJwb3ZlemF2byIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIlZzdGF2aSBzbGlrbyIsCi0gICJJbnNlcnQgVGFibGUiOiAiVnN0YXZpIHRhYmVsbyIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiUHJla2xvcGkgbmEgSFRNTCBrb2RvIiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIlBvdmXEjWFqIHVyZWpldmFsbmlrIiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIlZpeml0a2EgemEgdXJlamV2YWxuaWsiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiUG9tb8SNIHphIHVyZWpldmFsbmlrIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiVHJlbnV0bmkgc2xvZyIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJSYXp2ZWxqYXZpIHphZG5qbyBha2Npam8iLAotICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiVXZlbGphdmkgemFkbmpvIGFrY2lqbyIsCi0gICJDdXQgc2VsZWN0aW9uIjogIkl6cmXFvmkiLAotICAiQ29weSBzZWxlY3Rpb24iOiAiS29waXJhaiIsCi0gICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJQcmlsZXBpIiwKLSAgIk9LIjogIlYgcmVkdSIsCi0gICJDYW5jZWwiOiAiUHJla2xpxI1pIiwKLSAgIlBhdGgiOiAiUG90IiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJTaSB2IHRla3N0b3ZuZW0gbmHEjWludS4gIFVwb3JhYmkgWzw+XSBndW1iIHphIHBya2xvcCBuYXphaiBuYSBXWVNJV1lHLiIKLX0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3NyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvc3IuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxM2RkN2UuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvc3IuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAot77u/Ly8gSTE4TiBjb25zdGFudHMKLQotLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04IHwgSVNPLTg4NTktNQotLy8gQXV0aG9yOiBManViYSBSYW5rb3ZpxIcsIGh0dHA6Ly93d3cucmFua292aWMubmV0L2xqdWJhcgotCi0vLyBGT1IgVFJBTlNMQVRPUlM6Ci0vLwotLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCi0vLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCi0vLwotLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7Ci0vLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50Ci0vLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCi0KLXsKLQkJIkJvbGQiOiAi0JzQsNGB0L3QviIsCi0JCSJJdGFsaWMiOiAi0JrRg9GA0LfQuNCyIiwKLQkJIlVuZGVybGluZSI6ICLQn9C+0LTQstGD0YfQtdC90L4iLAotCQkiU3RyaWtldGhyb3VnaCI6ICLQn9GA0LXRhtGA0YLQsNC90L4iLAotCQkiU3Vic2NyaXB0IjogItCY0L3QtNC10LrRgS3RgtC10LrRgdGCIiwKLQkJIlN1cGVyc2NyaXB0IjogItCV0LrRgdC/0L7QvdC10L3Rgi3RgtC10LrRgdGCIiwKLQkJIkp1c3RpZnkgTGVmdCI6ICLQoNCw0LLQvdCw0ZrQtSDRg9C70LXQstC+IiwKLQkJIkp1c3RpZnkgQ2VudGVyIjogItCg0LDQstC90LDRmtC1INC/0L4g0YHQuNC80LXRgtGA0LDQu9C4IiwKLQkJIkp1c3RpZnkgUmlnaHQiOiAi0KDQsNCy0L3QsNGa0LUg0YPQtNC10YHQvdC+IiwKLQkJIkp1c3RpZnkgRnVsbCI6ICLQn9GD0L3QviDRgNCw0LLQvdCw0ZrQtSIsCi0JCSJPcmRlcmVkIExpc3QiOiAi0JvQuNGB0YLQsCDRgdCwINGA0LXQtNC90LjQvCDQsdGA0L7RmNC10LLQuNC80LAiLAotCQkiQnVsbGV0ZWQgTGlzdCI6ICLQm9C40YHRgtCwINGB0LAg0YHQuNC80LHQvtC70LjQvNCwIiwKLQkJIkRlY3JlYXNlIEluZGVudCI6ICLQodC80LDRmtC4INGD0LLQu9Cw0YfQtdGa0LUiLAotCQkiSW5jcmVhc2UgSW5kZW50IjogItCf0L7QstC10ZvQsNGYINGD0LLQu9Cw0YfQtdGa0LUiLAotCQkiRm9udCBDb2xvciI6ICLQkdC+0ZjQsCDRgdC70L7QstCwIiwKLQkJIkJhY2tncm91bmQgQ29sb3IiOiAi0JHQvtGY0LAg0L/QvtC30LDQtNC40L3QtSIsCi0JCSJIb3Jpem9udGFsIFJ1bGUiOiAi0KXQvtGA0LjQt9C+0L3RgtCw0LvQvdCwINC70LjQvdC40ZjQsCIsCi0JCSJJbnNlcnQgV2ViIExpbmsiOiAi0LTQvtC00LDRmCDQstC10LEg0LvQuNC90LoiLAotCQkiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICLQtNC+0LTQsNGYL9C/0YDQvtC80LXQvdC4INGB0LvQuNC60YMiLAotCQkiSW5zZXJ0IFRhYmxlIjogItCj0LHQsNGG0Lgg0YLQsNCx0LXQu9GDIiwKLQkJIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICLQn9GA0LXQsdCw0YbQuCDQvdCwINC/0YDQuNC60LDQtyDQpdCi0JzQmyDQutC+0LTQsCIsCi0JCSJFbmxhcmdlIEVkaXRvciI6ICLQn9C+0LLQtdGb0LDRmCDQtdC00LjRgtC+0YAiLAotCQkiQWJvdXQgdGhpcyBlZGl0b3IiOiAi0J4g0L7QstC+0Lwg0LXQtNC40YLQvtGA0YMiLAotCQkiSGVscCB1c2luZyBlZGl0b3IiOiAi0J/QvtC80L7RmyDQv9GA0Lgg0LrQvtGA0LjRiNGb0LXRmtGDINC10LTQuNGC0L7RgNCwIiwKLQkJIkN1cnJlbnQgc3R5bGUiOiAi0JLQsNC20LXRm9C4INGB0YLQuNC7IiwKLQkJIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogItCf0L7QvdC40YjRgtCw0LLQsCDQv9C+0YHQu9C10LTRmtGDINGA0LDQtNGa0YMiLAotCQkiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi0JLRgNCw0ZvQsCDQv9C+0YHQu9C10LTRmtGDINGA0LDQtNGa0YMiLAotCQkiQ3V0IHNlbGVjdGlvbiI6ICLQmNGB0LXRhtC4INC40LfQsNCx0YDQsNC90L4iLAotCQkiQ29weSBzZWxlY3Rpb24iOiAi0JrQvtC/0LjRgNCw0Zgg0LjQt9Cw0LHRgNCw0L3QviIsCi0JCSJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICLQl9Cw0LvQtdC/0Lgg0LjQtyDQutC70LjQv9Cx0L7RgNC00LAiLAotCQkiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAi0J/RgNCw0LLQsNGGINGBINC70LXQstCwINC90LAg0LTQtdGB0L3QviIsCi0JCSJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICLQn9GA0LDQstCw0YYg0YEg0LTQtdGB0L3QsCDQvdCwINC70LXQstC+IiwKLSAgICAgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogItCj0LrQu9C+0L3QuCDRhNC+0YDQvNCw0YLQuNGA0LDRmtC1IiwKLSAgICAgICAgIlNlbGVjdCBhbGwiOiAi0JjQt9Cw0LHQtdGA0Lgg0YHQstC1IiwKLSAgICAgICAgIlByaW50IGRvY3VtZW50IjogItCo0YLQsNC80L/QsNGYINC00L7QutGD0LzQtdC90YIiLAotICAgICAgICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICLQntCx0YDQuNGI0LggTVNPZmZpY2Ug0YLQsNCz0L7QstC1IiwKLSAgICAgICAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogItCe0LHRgNC40YjQuCDQv9GA0LjQvNC10ZrQtdC90LUg0L7RgdC+0LHQuNC90LUg0YTQvtC90YLQsCIsCi0gICAgICAgICJTcGxpdCBCbG9jayI6ICLQn9C+0LTQtdC70Lgg0LHQu9C+0LoiLAotICAgICAgICAiVG9nZ2xlIEJvcmRlcnMiOiAi0J/RgNC10LHQsNGG0Lgg0L7QutCy0LjRgNC90LUg0LvQuNC90LjRmNC1IiwKLQotICAgICAgICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICImIzgyMTI7IEZvcm1hdCAmIzgyMTI7IiwKLSAgICAgICAgIkhlYWRpbmcgMSI6ICLQl9Cw0LPQu9Cw0LLRmdC1IDEiLAotICAgICAgICAiSGVhZGluZyAyIjogItCX0LDQs9C70LDQstGZ0LUgMiIsCi0gICAgICAgICJIZWFkaW5nIDMiOiAi0JfQsNCz0LvQsNCy0ZnQtSAzIiwKLSAgICAgICAgIkhlYWRpbmcgNCI6ICLQl9Cw0LPQu9Cw0LLRmdC1IDQiLAotICAgICAgICAiSGVhZGluZyA1IjogItCX0LDQs9C70LDQstGZ0LUgNSIsCi0gICAgICAgICJIZWFkaW5nIDYiOiAi0JfQsNCz0LvQsNCy0ZnQtSA2IiwKLSAgICAgICAgIk5vcm1hbCI6ICLQvtCx0LjRh9Cw0L0iLAotICAgICAgICAiQWRkcmVzcyI6ICLQsNC00YDQtdGB0LAiLAotICAgICAgICAiRm9ybWF0dGVkIjogItGE0L7RgNC80LDRgtC40YDQsNC9IiwJCQotCQkKLSAgICAgICAgLy8gZGlhbG9ncwotCQkiT0siOiAiT0siLAotCQkiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IiwKLQkJIlBhdGgiOiAi0J/Rg9GC0LDRmtCwIiwKLQkJIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICAgICLQndCw0LvQsNC30LjRgtC1INGB0LUg0YMg0KLQldCa0KHQoiDRgNC10LbQuNC80YMuICDQmtC+0YDQuNGB0YLQuNGC0LUgWzw+XSDQtNGD0LPQvNC1INC30LAg0L/QvtCy0YDQsNGC0LDQuiDQvdCwINCo0JLQotCY0JQgKFdZU0lXWUcpLiIsCi0KLQkJIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAi0JTRg9Cz0LzQtSAn0LfQsNC70LXQv9C4JyDQvdC1INGA0LDQtNC4INGDINC/0YDQtdGC0YDQsNC20LjQstCw0YfQuNC80LAg0L/QvtGA0L7QtNC40YbQtSBNb3ppbGxhICjQuNC3INGA0LDQt9C70L7Qs9CwINGB0LjQs9GD0YDQvdC+0YHRgtC4KS4g0J/RgNC40YLQuNGB0L3QuNGC0LUgQ1RSTC1WINC90LAg0YLQsNGB0YLQsNGC0YPRgNC4INC00LAg0LTQuNGA0LXQutGC0L3QviDQt9Cw0LvQtdC/0LjRgtC1LiIsCi0JCQotICAgICAgICAiQWxpZ25tZW50OiI6ICLQoNCw0LLQvdCw0ZrQtSIsCi0gICAgICAgICJOb3Qgc2V0IjogItCd0LjRmNC1INC/0L7RgdGC0LDQstGZ0LXQvdC+IiwKLSAgICAgICAgIkxlZnQiOiAi0JvQtdCy0L4iLAotICAgICAgICAiUmlnaHQiOiAi0JTQtdGB0L3QviIsCi0gICAgICAgICJUZXh0dG9wIjogItCS0YDRhSDRgtC10LrRgdGC0LAiLAotICAgICAgICAiQWJzbWlkZGxlIjogItCQ0L/RgdC+0LvRg9GC0L3QsCDRgdGA0LXQtNC40L3QsCIsCi0gICAgICAgICJCYXNlbGluZSI6ICLQlNC+0ZrQsCDQu9C40L3QuNGY0LAiLAotICAgICAgICAiQWJzYm90dG9tIjogItCQ0L/RgdC+0LvRg9GC0L3QviDQtNC90L4iLAotICAgICAgICAiQm90dG9tIjogItCU0L3QviIsCi0gICAgICAgICJNaWRkbGUiOiAi0KHRgNC10LTQuNC90LAiLAotICAgICAgICAiVG9wIjogItCS0YDRhSIsCi0KLSAgICAgICAgIkxheW91dCI6ICLQn9GA0LXQu9C+0LwiLAotICAgICAgICAiU3BhY2luZyI6ICLQoNCw0LfQvNCw0LoiLAotICAgICAgICAiSG9yaXpvbnRhbDoiOiAi0J/QviDRhdC+0YDQuNC30L7QvdGC0LDQu9C4IiwKLSAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICLQpdC+0YDRgtC40LfQvtC90YLQsNC70L3QviDQvtC00YHRgtC+0ZjQsNGa0LUiLAotICAgICAgICAiVmVydGljYWw6IjogItCf0L4g0LLQtdGA0YLQuNC60LDQu9C4IiwKLSAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAi0JLQtdGA0YLQuNC60LDQu9C90L4g0L7QtNGB0YLQvtGY0LDRmtC1IiwKLSAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogItCU0LXQsdGZ0LjQvdCwINC+0LrQstC40YDQsCIsCi0gICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogItCe0YHRgtCw0LLQuCDQv9GA0LDQt9C90L4g0LrQsNC0INC90LXQvNCwINC+0LrQstC40YDQsCIsCi0KLSAgICAgICAgLy8gSW5zZXJ0IExpbmsKLQkJIkluc2VydC9Nb2RpZnkgTGluayI6ICLQtNC+0LTQsNGYL9C/0YDQvtC80LXQvdC4INC70LjQvdC6IiwKLQkJIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi0LrQvtGA0LjRgdGC0Lgg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90L4iLAotCQkiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICLQndC+0LLQvtC8INC/0YDQvtC30L7RgNGDIChfYmxhbmspIiwKLQkJIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICLQmNGB0YLQuCDRhNGA0LXRmNC8IChfc2VsZikiLAotCQkiVG9wIGZyYW1lIChfdG9wKSI6ICLQk9C70LDQstC90Lgg0YTRgNC10ZjQvCAoX3RvcCkiLAotCQkiT3RoZXIiOiAi0JTRgNGD0LPQviIsCi0JCSJUYXJnZXQ6IjogItCe0YLQstC+0YDQuCDRgzoiLAotCQkiVGl0bGUgKHRvb2x0aXApOiI6ICLQndCw0LfQuNCyICh0b29sdGlwKToiLAotCQkiVVJMOiI6ICLQo9Cg0Js6IiwKLQkJIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICLQnNC+0YDQsNGC0LUg0YPQvdC10YLQuCDQo9Cg0Jsg0L3QsCDQutC+0ZjQuCDQstC+0LTQuCDQvtCy0LDRmCDQu9C40L3QuiIsCi0KLSAgICAgICAgLy8gSW5zZXJ0IFRhYmxlCi0gICAgICAgICJJbnNlcnQgVGFibGUiOiAi0KPQsdCw0YbQuCDRgtCw0LHQtdC70YMiLAotICAgICAgICAiUm93czoiOiAi0KDQtdC00L7QstC4IiwKLSAgICAgICAgIk51bWJlciBvZiByb3dzIjogItCR0YDQvtGYINGA0LXQtNC+0LLQsCIsCi0gICAgICAgICJDb2xzOiI6ICLQmtC+0LvQvtC90LUiLAotICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAi0JHRgNC+0Zgg0LrQvtC70L7QvdCwIiwKLSAgICAgICAgIldpZHRoOiI6ICLQqNC40YDQuNC90LAiLAotICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogItCo0LjRgNC40L3QsCDRgtCw0LHQtdC70LUiLAotICAgICAgICAiUGVyY2VudCI6ICLQn9GA0L7RhtC10L3QsNGC0LAiLAotICAgICAgICAiUGl4ZWxzIjogItCf0LjQutGB0LXQu9CwIiwKLSAgICAgICAgIkVtIjogItCV0LwiLAotICAgICAgICAiV2lkdGggdW5pdCI6ICLQiNC10LTQuNC90LjRhtCwINGI0LjRgNC40L3QtSIsCi0gICAgICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogItCk0LjQutGB0LjRgNCw0L3QsCDRiNC40YDQuNC90LAg0LrQvtC70L7QvdC1IiwKLSAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAi0J/QvtGB0YLQsNCy0ZnQsNGa0LUg0L7QstC1INGC0LDQsdC10LvQtSIsCi0gICAgICAgICJDZWxsIHNwYWNpbmc6IjogItCg0LDQt9C80LDQuiDQuNC30LzQtdGS0YMg0ZvQtdC70LjRmNCwIiwKLSAgICAgICAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAi0KDQsNC30LzQsNC6INC40LfQvNC10ZLRgyDQvdCw0YHQv9GA0LDQvNC90LjRhSDRm9C10LvQuNGY0LAiLAotICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICLQo9C90YPRgtGA0LDRiNGa0LAg0L7QtNGB0YLQvtGY0LDRmtCwINC+0LQg0LjQstC40YbQsCDRm9C10LvQuNGY0LUiLAotICAgICAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICLQoNCw0YHRgtC+0ZjQsNGa0LUg0LjQt9C80LXRktGDINGB0LDQtNGA0LbQsNGY0LAg0YMg0ZvQtdC70LjRmNC4INC4INGa0LXQvdC+0LMg0L7QutCy0LjRgNCwIiwKLQotICAgICAgICAvLyBJbnNlcnQgSW1hZ2UKLSAgICAgICAgIkluc2VydCBJbWFnZSI6ICLQo9Cx0LDRhtC4INGB0LvQuNC60YMiLAotICAgICAgICAiSW1hZ2UgVVJMOiI6ICLQo9Cg0Jsg0YHQu9C40LrQtSIsCi0gICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAi0KPQvdC10YHQuNGC0LUg0KPQoNCbINGB0LvQuNC60LUg0L7QstC00LUiLAotICAgICAgICAiUHJldmlldyI6ICLQn9GA0LXQs9C70LXQtCIsCi0gICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAi0J/RgNC10LPQu9C10LTQsNGYINGB0LvQuNC60YMg0YMg0L3QvtCy0L7QvCDQv9GA0L7Qt9C+0YDRgyIsCi0gICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAi0LDQu9GC0LXRgNC90LDRgtC40LLQvdC4INGC0LXQutGB0YIiLAotICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAi0JfQsCDQv9GA0LXRgtGA0LDQttC40LLQsNGH0LUg0LrQvtGY0Lgg0L3QtSDQv9C+0LTRgNC20LDQstCw0ZjRgyDRgdC70LjQutC1IiwKLSAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAi0J/QvtGB0YLQsNCy0ZnQsNGa0LUg0L7QstC1INGB0LvQuNC60LUiLAotICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAi0J/RgNC10LPQu9C10LQg0YHQu9C40LrQtSIsCi0KLSAgICAgICAgLy8gU2VsZWN0IENvbG9yIHBvcHVwCi0JCSJTZWxlY3QgQ29sb3IiOiAi0JjQt9Cw0LHQtdGA0Lgg0LHQvtGY0YMiCi19OwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvc3YuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9zdi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFhZjQ5ZS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9zdi5qcworKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotLy8gTEFORzogInN2IiwgRU5DT0RJTkc6IFVURi04Ci0KLS8vIFN3ZWRpc2ggdmVyc2lvbiBmb3IgaHRtbEFyZWEgdjMuMAotLy8gSW5pdGl0YWwgdHJhbnNsYXRpb24gYnkgcGF0IDxwYXRAZW5ndmFsbC5udT4KLS8vIFN5bmNlZCB3aXRoIGFkZGl0aW9uYWwgY29udGFudHMgaW4gcmV2LiA0NzcgKE1hciAyMDA2KSBieSBUaG9tYXMgTG9vIDx0bG9vQHNhbHRzdG9ybS5uZXQ+Ci0KLXsKLSAgIkJvbGQiOiAiRmV0IiwKLSAgIkl0YWxpYyI6ICJLdXJzaXYiLAotICAiVW5kZXJsaW5lIjogIlVuZGVyc3RydWtlbiIsCi0gICJTdHJpa2V0aHJvdWdoIjogIkdlbm9tc3RydWtlbiIsCi0gICJTdWJzY3JpcHQiOiAiTmVkc8Okbmt0IiwKLSAgIlN1cGVyc2NyaXB0IjogIlVwcGjDtmpkIiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJWw6Ruc3Rlcmp1c3RlcmEiLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiQ2VudHJlcmEiLAotICAiSnVzdGlmeSBSaWdodCI6ICJIw7ZnZXJqdXN0ZXJhIiwKLSAgIkp1c3RpZnkgRnVsbCI6ICJNYXJnaW5hbGp1c3RlcmEiLAotICAiT3JkZXJlZCBMaXN0IjogIk51bXJlcmFkIGxpc3RhIiwKLSAgIkJ1bGxldGVkIExpc3QiOiAiUHVua3RsaXN0YSIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAiTWluc2thIGluZHJhZyIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAiw5ZrYSBpbmRyYWciLAotICAiRm9udCBDb2xvciI6ICJUZXh0ZsOkcmciLAotICAiQmFja2dyb3VuZCBDb2xvciI6ICJCYWtncnVuZHNmw6RyZyIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAiVsOlZ3LDpHQgbGluamUiLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIkluZm9nYSBsw6RuayIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIkluZm9nYSBiaWxkIiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJWaXNhIGvDpGxsa29kIiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIlZpc2EgaSBlZ2V0IGbDtm5zdGVyIiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIk9tIGRlbm5hIGVkaXRvciIsCi0gICJIZWxwIHVzaW5nIGVkaXRvciI6ICJIasOkbHAiLAotICAiQ3VycmVudCBzdHlsZSI6ICJOdXZhcmFuZGUgc3RpbCIsCi0KLSAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIsOFbmdyYSBrb21tYW5kbyIsCi0gICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJVcHByZXBhIGtvbW1hbmRvIiwKLSAgIlNlbGVjdCBhbGwiOiAiTWFya2VyYSBhbGx0IiwKLSAgIlByaW50IGRvY3VtZW50IjogIlNrcml2IHV0IiwKLSAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiU3TDpGRhIGJvcnQgTVMgT2ZmaWNlIHRhZ2dhciIsCi0gICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICJSZW5zYSBpbmLDpGRkYWQgdHlwc25pdHRzaW5mb3JtYXRpb24iLAotICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAiUmVuc2EgZm9ybWF0dGVyaW5nIiwKLSAgIlRvZ2dsZSBCb3JkZXJzIjogIk9iamVrdHJhbWFyIiwKLSAgIlNwbGl0IEJsb2NrIjogIkRlbGEgYmxvY2siLAotICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiVsOkbnN0ZXIgdGlsbCBow7ZnZXIiLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiSMO2Z2VyIHRpbGwgdsOkbnN0ZXIiLAotCi0gICJJbnNlcnQvT3ZlcndyaXRlIjogIkluZm9nYS9Ta3JpdiDDtnZlciIsCi0gICJPSyI6ICJPSyIsCi0gICJDYW5jZWwiOiAiQXZicnl0IiwKLSAgIlBhdGgiOiAiT2JqZWt0IiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJEdSBiZWZpbm5lciBkaWcgaSB0ZXhsw6RnZS4gS2xpY2thIHDDpSBpa29uZW4gWzw+XSBvdmFuIGbDtnIgYXR0IHbDpHhsYSB0aWxsYmFrYSB0aWxsIFdZU0lXSUcgbMOkZ2UiLAotICAiVGhlIGZ1bGwgc2NyZWVuIG1vZGUgaXMga25vd24gdG8gY2F1c2UgcHJvYmxlbXMgd2l0aCBJbnRlcm5ldCBFeHBsb3JlciwgZHVlIHRvIGJyb3dzZXIgYnVncyB0aGF0IHdlIHdlcmVuIjogIlZpc25pbmcgaSBmdWxsc2vDpHJtc2zDpGdhIGZ1bmdlcmFyIGTDpWxpZ3QgaSBkaW4gd2VibMOkc2FyZS4gTcO2amxpZ2EgcHJvYmxlbSByZXN1bHRlcmFyIGkgZW4gcnlja2lnIGVkaXRvciwgc2FrbmFkZSBlZGl0b3JmdW5rdGlvbmVyIG9jaC9lbGxlciBhdHQgd2VibMOkc2FyZW4ga3Jhc2NoYXIuIE9tIGR1IGFudsOkbmRlciBXaW5kb3dzIDk1Lzk4IGZpbm5zIG9ja3PDpSBtw7ZqbGlnaGV0ZW4gYXR0IFdpbmRvd3Mga3Jhc2NoYXIuXG5cblRyeWNrICIsCi0gICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIkRlbm5hIGtuYXBwIGZ1bmdlcmFyIGVqIGkgTW96aWxsYWJhc2VyYWQgd2VibMOkc2FyZSwgYW52w6RuZCBpc3TDpGxsZXQgc25hYmJ0YW5nZW50ZXJuYSBDVFJMLVYgcMOlIHRhbmdlbnRib3JkZXQgZsO2ciBhdHQga2xpc3RyYSBpbi4iLAotCi0gICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiUmVkaWdlcmEgbMOkbmsiLAotICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOeXR0IGbDtm5zdGVyIChfYmxhbmspIiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiSW5nZW4gKGFudsOkbmQgc3RhbmRhcmRpbnN0w6RsbGluZykiLAotICAiT3RoZXIiOiAiQW5uYW4iLAotICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlNhbW1hIHJhbSAoX3NlbGYpIiwKLSAgIlRhcmdldDoiOiAiTcOlbDoiLAotICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUaXRlbCAodG9vbHRpcCk6IiwKLSAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiVG9wcHJhbSAoX3RvcCkiLAotICAiVVJMOiI6ICJTw7ZrdsOkZzoiLAotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogIkR1IG3DpXN0YSBhbmdlIGVuIGFkcmVzcyB0aWxsIHZpbGtlbiBsw6Rua2VuIHNrYWxsIHBla2EgcMOlIiwKLSAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICJSYWRlcmEgYWxsYSB0eXBzbml0dHNpbmZvcm1hdGlvbiA/IiwKLSAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIlJhZGVyYSBhbGxhIGZvbnRzdG9ybGVrYXIgPyIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIlRhIGJvcnQgYWxsIHRleHRmw6RyZ2VyID8iLAotCi0gICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGluZyBhIGxpbmsiOiAiRHUgbcOlc3RhIG1hcmtlcmEgZXR0IG9iamVrdCBhdHQgYXBwbGljZXJhIGzDpG5rZW4gcMOlISIsCi0KLSAgLy8gSW5zZXJ0IFRhYmxlCi0gICJJbnNlcnQgVGFibGUiOiAiSW5mb2dhIHRhYmVsbCIsCi0gICJSb3dzOiI6ICJSYWRlcjoiLAotICAiTnVtYmVyIG9mIHJvd3MiOiAiQW50YWwgcmFkZXIiLAotICAiQ29sczoiOiAiS29sdW1uZXI6IiwKLSAgIk51bWJlciBvZiBjb2x1bW5zIjogIkFudGFsIGtvbHVtbmVyIiwKLSAgIldpZHRoOiI6ICJCcmVkZDoiLAotICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIlRhYmVsbGJyZWRkIiwKLSAgIlBlcmNlbnQiOiAiUHJvY2VudCIsCi0gICJQaXhlbHMiOiAiUGl4bGFyIiwKLSAgIkVtIjogIiIsCi0gICJXaWR0aCB1bml0IjogIkJyZWRkZW5oZXRlciIsCi0gICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIkZpeGVyYWQgYnJlZGQiLAotICAiQWxpZ25tZW50OiI6ICJNYXJnaW5hbGp1c3RlcmluZyIsCi0gICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIlRhYmVsbHBvc2l0aW9uIiwKLSAgIkJvcmRlciB0aGlja25lc3M6IjogIlJhbXRqb2NrbGVrIiwKLSAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiTMOkbW5hIGbDpGx0ZXQgdG9tdCBmw7ZyIGF0dCB1bmR2aWthIHJhbWFyIiwKLSAgIlNwYWNpbmciOiAiQ2VsbGVnZW5za2FwZXIiLAotICAiQ2VsbCBzcGFjaW5nOiI6ICJDZWxsbWFyZ2luYWxlcjoiLAotICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICJVdHJ5bW1lIG1lbGxhbiBjZWxsZXIiLAotICAiQ2VsbCBwYWRkaW5nOiI6ICJDZWxsaW5kcmFnOiIsCi0gICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIlV0cnltbWUgbWVsbGFuIHJhbSBvY2ggY2VsbGlubmVow6VsbCIsCi0gICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIkFuZ2UgZW50YWwgcmFkZXIiLAotICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICJBbmdlIGFudGFsIGtvbHVtbmVyIiwKLQotICAvLyBFZGl0b3IgSGVscAotICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogIlNuYWJidGFuZ2VudGVyIiwKLSAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICJFZGl0b3JuIG55dHRqYXIgZsO2bGphbmRlIGtvbWJpbmF0aW9uZXI6IiwKLSAgIm5ldyBwYXJhZ3JhcGgiOiAiTnkgcGFyYWdyYWYgIiwKLSAgImluc2VydCBsaW5lYnJlYWsiOiAiSW5mb2dhIHJhZGJyeXRuaW5nICIsCi0gICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICJBa3RpdmVyYSBwYXJhZ3JhZmzDpGdlIiwKLSAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICJSZW5zYSBpbm5laMOlbGwgaW5rbGlzdHJhdCBmcsOlbiBNUyBXb3JkIiwKLSAgIkhlYWRpbmdzIjogIlNrYXBhIHN0YW5kYXJkcnVicmlrIiwKLSAgIkN1dCBzZWxlY3Rpb24iOiAiS2xpcHAgdXQgbWFya2VyaW5nIiwKLSAgIkNvcHkgc2VsZWN0aW9uIjogIktvcGllcmEgIG1hcmtlcmluZyIsCi0gICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJLbGlzdHJhIGluIiwKLSAgIkNsb3NlIjogIlN0w6RuZyIsCi0KLSAgLy8gTG9hZGluZyBtZXNzYWdlcwotICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQgISI6ICJFZGl0b3JuIGxhZGRhcy4gVsOkbnRhLi4uIiwKLSAgIkNvbnN0cnVjdGluZyBtYWluIG9iamVjdCI6ICJTa2FwYXIgaHV2dWRvYmpla3QiLAotICAiQ3JlYXRlIFRvb2xiYXIiOiAiU2thcGFyIHZlcmt0eWdzcGFuZWwiLAotICAiUmVnaXN0ZXIgcGFuZWwgcmlnaHQiOiAiUmVnaXN0ZXJhciBwYW5lbCBow7ZnZXIiLAotICAiUmVnaXN0ZXIgcGFuZWwgbGVmdCI6ICJSZWdpc3RlcmFyIHBhbmVsIHbDpG5zdGVyIiwKLSAgIlJlZ2lzdGVyIHBhbmVsIHRvcCI6ICJSZWdpc3RlcmFyIHRvcHBhbmVsIiwKLSAgIlJlZ2lzdGVyIHBhbmVsIGJvdHRvbSI6ICJSZWdpc3RlcmFyIGZvdHBhbmVsIgotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvdGguanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy90aC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGExMTZhZi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy90aC5qcworKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzDQotDQotLy8gTEFORzogInRoIiwgRU5DT0RJTkc6IFVURi04DQotLy8gQXV0aG9yOiBTdWNoaW4gUHJhc29uZ2J1bmRpdCwgPHN1Y2hpbkBqb29sc29mdC5jb20+DQotDQotLy8gRk9SIFRSQU5TTEFUT1JTOg0KLS8vDQotLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FDQotLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQ0KLS8vDQotLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7DQotLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudA0KLS8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikNCi0NCi17DQotICAiQm9sZCI6ICLguJXguLHguKfguKvguJnguLIiLA0KLSAgIkl0YWxpYyI6ICLguJXguLHguKfguYDguK3guLXguKLguIciLA0KLSAgIlVuZGVybGluZSI6ICLguILguLXguJTguYDguKrguYnguJnguYPguJXguYkiLA0KLSAgIlN0cmlrZXRocm91Z2giOiAi4LiC4Li14LiU4LiX4Lix4LiaIiwNCi0gICJTdWJzY3JpcHQiOiAi4LiV4Lix4Lin4Lir4LmJ4Lit4LiiIiwNCi0gICJTdXBlcnNjcmlwdCI6ICLguJXguLHguKfguKLguIEiLA0KLSAgIkp1c3RpZnkgTGVmdCI6ICLguIjguLHguJTguIrguLTguJTguIvguYnguLLguKIiLA0KLSAgIkp1c3RpZnkgQ2VudGVyIjogIuC4iOC4seC4lOC4geC4tuC5iOC4h+C4geC4peC4suC4hyIsDQotICAiSnVzdGlmeSBSaWdodCI6ICLguIjguLHguJTguIrguLTguJTguILguKfguLIiLA0KLSAgIkp1c3RpZnkgRnVsbCI6ICLguIjguLHguJTguYDguJXguYfguKHguILguK3guJoiLA0KLSAgIk9yZGVyZWQgTGlzdCI6ICLguYDguKXguILguKXguLPguJTguLHguJoiLA0KLSAgIkJ1bGxldGVkIExpc3QiOiAi4Lil4Liz4LiU4Lix4LiaIiwNCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAi4Lil4LiU4Lii4LmI4Lit4Lir4LiZ4LmJ4LiyIiwNCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAi4LmA4Lie4Li04LmI4Lih4Lii4LmI4Lit4Lir4LiZ4LmJ4LiyIiwNCi0gICJGb250IENvbG9yIjogIuC4quC4teC4guC4reC4muC5geC4muC4muC4reC4seC4geC4qeC4oyIsDQotICAiQmFja2dyb3VuZCBDb2xvciI6ICLguKrguLXguJ7guLfguYnguJnguKvguKXguLHguIciLA0KLSAgIkhvcml6b250YWwgUnVsZSI6ICLguYDguKrguYnguJnguIHguLbguYjguIfguIHguKXguLLguIciLA0KLSAgIkluc2VydCBXZWIgTGluayI6ICLguLTguYDguJ7guLTguYjguKHguKXguLTguYnguIfguITguYwiLA0KLSAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAi4LmA4Lie4Li04LmI4LihL+C5geC4geC5ieC5hOC4guC4oOC4suC4niIsDQotICAiSW5zZXJ0IFRhYmxlIjogIuC5gOC4nuC4tOC5iOC4oeC4leC4suC4o+C4suC4hyIsDQotICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIuC4quC4peC4seC4muC4geC4suC4o+C5geC4quC4lOC4h+C5guC4hOC5ieC4lCBIVE1MIiwNCi0gICJFbmxhcmdlIEVkaXRvciI6ICLguILguKLguLLguKLguYPguKvguYnguYDguJXguYfguKHguIjguK0iLA0KLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIuC5gOC4geC4teC5iOC4ouC4p+C4geC4seC4muC5guC4m+C4o+C5geC4geC4o+C4oeC4meC4teC5iSIsDQotICAiSGVscCB1c2luZyBlZGl0b3IiOiAi4LiB4Liy4Lij4LmD4LiK4LmJ4LiH4Liy4LiZ4LmC4Lib4Lij4LmB4LiB4Lij4LihIiwNCi0gICJDdXJyZW50IHN0eWxlIjogIuC4o+C4ueC4m+C5geC4muC4muC4m+C4seC4iOC4iOC4uOC4muC4seC4mSIsDQotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi4Lii4LmJ4Lit4LiZ4LiB4Lil4Lix4LiaIiwNCi0gICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLguJfguLPguIvguYnguLMiLA0KLSAgIkN1dCBzZWxlY3Rpb24iOiAi4LiV4Lix4LiU4Liq4LmI4Lin4LiZ4LiX4Li14LmI4LmA4Lil4Li34Lit4LiBIiwNCi0gICJDb3B5IHNlbGVjdGlvbiI6ICLguKrguLPguYDguJnguLLguKrguYjguKfguJnguJfguLXguYjguYDguKXguLfguK3guIEiLA0KLSAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIuC4p+C4suC4h+C4iOC4suC4geC4hOC4peC4tOC4m+C4muC4reC4o+C5jOC4lCIsDQotICAiT0siOiAi4LiV4LiB4Lil4LiHIiwNCi0gICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwNCi0gICJQYXRoIjogIuC5gOC4quC5ieC4meC4l+C4suC4hyIsDQotICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIuC4hOC4uOC4k+C4reC4ouC4ueC5iOC5g+C4meC5guC4q+C4oeC4lOC4mOC4o+C4o+C4oeC4lOC4siDguIHguJTguJfguLXguYjguJvguLjguYjguKEgWzw+XSDguYDguJ7guLfguYjguK3guKrguKXguLHguJrguIHguKXguLHguJrguYTguJvguKLguLHguIfguYLguKvguKHguJTguJ7guLTguKHguJ7guYzguIfguLLguJnguYHguJrguJrguYDguKfguLTguKPguYzguJQiDQotfQ0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3ZuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvdm4uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhYTY0MTYuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvdm4uanMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cyA6IFZpZXRuYW1lc2UKLS8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAotLy8gQXV0aG9yOiBOZ3V54buFbiDEkMOsbmggTmFtLCA8aG5jcnlwdG9sb2dpc3RAeWFob28uY29tPgotLy8gTW9kaWZpZWQgMjEvMDcvMjAwNCBieSBQaOG6oW0gTWFpIFF1w6JuIDxwbXF1YW5ANHZuLm9yZz4KLQotewotICAiQm9sZCI6ICLEkOG6rW0iLAotICAiSXRhbGljIjogIk5naGnDqm5nIiwKLSAgIlVuZGVybGluZSI6ICJH4bqhY2ggQ2jDom4iLAotICAiU3RyaWtldGhyb3VnaCI6ICJH4bqhY2ggWMOzYSIsCi0gICJTdWJzY3JpcHQiOiAiVmnhur90IFh14buRbmcgRMaw4bubaSIsCi0gICJTdXBlcnNjcmlwdCI6ICJWaeG6v3QgTMOqbiBUcsOqbiIsCi0gICJKdXN0aWZ5IExlZnQiOiAiQ8SDbiBUcsOhaSIsCi0gICJKdXN0aWZ5IENlbnRlciI6ICJDxINuIEdp4buvYSIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIkPEg24gUGjhuqNpIiwKLSAgIkp1c3RpZnkgRnVsbCI6ICJDxINuIMSQ4buBdSIsCi0gICJPcmRlcmVkIExpc3QiOiAiRGFuaCBTw6FjaCBDw7MgVGjhu6kgVOG7sSAoMSwgMiwgMykiLAotICAiQnVsbGV0ZWQgTGlzdCI6ICJEYW5oIFPDoWNoIFBoaSBUaOG7qSBU4buxIChDaOG6pW0gxJHhuqd1IGTDsm5nKSIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAiTMO5aSBSYSBOZ2/DoGkiLAotICAiSW5jcmVhc2UgSW5kZW50IjogIlRo4buldCBWw6BvIFRyb25nIiwKLSAgIkZvbnQgQ29sb3IiOiAiTcOgdSBDaOG7ryIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogIk3DoHUgTuG7gW4iLAotICAiSG9yaXpvbnRhbCBSdWxlIjogIkTDsm5nIEvhursgTmdhbmciLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIlThuqFvIExpw6puIEvhur90IiwKLSAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiQ2jDqG4g4bqibmgiLAotICAiSW5zZXJ0IFRhYmxlIjogIkNow6huIELhuqNuZyIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiQ2jhur8gxJDhu5kgTcOjIEhUTUwiLAotICAiRW5sYXJnZSBFZGl0b3IiOiAiUGjDs25nIFRvIMOUIFNv4bqhbiBUaOG6o28iLAotICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiVOG7sSBHaeG7m2kgVGhp4buHdSIsCi0gICJIZWxwIHVzaW5nIGVkaXRvciI6ICJHacO6cCDEkOG7oSIsCi0gICJDdXJyZW50IHN0eWxlIjogIsSQ4buLbmggROG6oW5nIEhp4buHbiBUaOG7nWkiLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiSOG7p3kgdGhhbyB0w6FjIHRyxrDhu5tjIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkzhuqV5IGzhuqFpIHRoYW8gdMOhYyB24burYSBi4buPIiwKLSAgIkN1dCBzZWxlY3Rpb24iOiAiQ+G6r3QiLAotICAiQ29weSBzZWxlY3Rpb24iOiAiU2FvIGNow6lwIiwKLSAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIkTDoW4iLAotICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiVmnhur90IHThu6sgdHLDoWkgc2FuZyBwaOG6o2kiLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiVmnhur90IHThu6sgcGjhuqNpIHNhbmcgdHLDoWkiLAotICAiT0siOiAixJDhu5NuZyDDvSIsCi0gICJDYW5jZWwiOiAiSOG7p3kiLAotICAiVGhlIGZ1bGwgc2NyZWVuIG1vZGUgaXMga25vd24gdG8gY2F1c2UgcHJvYmxlbXMgd2l0aCBJbnRlcm5ldCBFeHBsb3JlciwgZHVlIHRvIGJyb3dzZXIgYnVncyB0aGF0IHdlIHdlcmVuIjogIkNo4bq/IMSR4buZIHBow7NuZyB0byDDtCBzb+G6oW4gdGjhuqNvIGPDsyB0aOG7gyBnw6J5IGzhu5dpIHbhu5tpIEludGVybmV0IEV4cGxvcmVyIHbDrCBt4buZdCBz4buRIGzhu5dpIGPhu6dhIHRyw6xuaCBkdXnhu4d0IG7DoHksIHbDrCB0aOG6vyBjaOG6vyDEkeG7mSBuw6B5IGPDsyB0aOG7gyBz4bq9IGtow7RuZyBjaOG6oXkuIEhp4buDbiB0aOG7iyBraMO0bmcgxJHDum5nLCBs4buZbiB44buZbiwga2jDtG5nIGPDsyDEkeG6p3kgxJHhu6cgY2jhu6ljIG7Eg25nLCB2w6AgY8WpbmcgY8OzIHRo4buDIGzDoG0gdHLDrG5oIGR1eeG7h3QgY+G7p2EgYuG6oW4gYuG7iyB04bqvdCBuZ2FuZy4gTuG6v3UgYuG6oW4gxJFhbmcgc+G7rSBk4bulbmcgV2luZG93cyA5eCBi4bqhbiBjw7MgdGjhu4MgYuG7iyBiw6FvIGzhu5dpICIsCi0gICJQYXRoIjogIsSQxrDhu51uZyBE4bqrbiIsCi0gICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiQuG6oW4gxJFhbmcg4bufIGNo4bq/IMSR4buZIHRleHQuICBT4butIGThu6VuZyBuw7p0IFs8Pl0gxJHhu4MgY2h1eeG7g24gbOG6oWkgY2jhur8gxJHhu5kgV1lTSVdJRy4iLAotICAiQ2FuY2VsIjogIkjhu6d5IiwKLSAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJUaMOqbS9DaOG7iW5oIHPhu61hIMSRxrDhu51uZyBk4bqrbiIsCi0gICJOZXcgd2luZG93IChfYmxhbmspIjogIkPhu61hIHPhu5UgbeG7m2kgKF9ibGFuaykiLAotICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJLaMO0bmcgKHPhu60gZOG7pW5nIGltcGxpY2l0KSIsCi0gICJPSyI6ICLEkOG7k25nIMO9IiwKLSAgIk90aGVyIjogIktow6FjIiwKLSAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJUcsOqbiBjw7luZyBraHVuZyAoX3NlbGYpIiwKLSAgIlRhcmdldDoiOiAiTsahaSBoaeG7h24gdGjhu4s6IiwKLSAgIlRpdGxlICh0b29sdGlwKToiOiAiVGnDqnUgxJHhu4EgKGPhu6dhIGjGsOG7m25nIGThuqtuKToiLAotICAiVG9wIGZyYW1lIChfdG9wKSI6ICJLaHVuZyB0csOqbiBjw7luZyAoX3RvcCkiLAotICAiVVJMOiI6ICJVUkw6IiwKLSAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICJC4bqhbiBwaOG6o2kgxJFp4buBbiDEkeG7i2EgY2jhu4kgKFVSTCkgbcOgIMSRxrDhu51uZyBk4bqrbiBz4bq9IGxpw6puIGvhur90IHThu5tpIgotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQ29sb3JQaWNrZXIvQ29sb3JQaWNrZXIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9Db2xvclBpY2tlci9Db2xvclBpY2tlci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJhMmY2Yi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9Db2xvclBpY2tlci9Db2xvclBpY2tlci5qcworKysgL2Rldi9udWxsCkBAIC0xLDYyNCArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvbW9kdWxlcy9Db2xvclBpY2tlci9Db2xvclBpY2tlci5qcyAqLwotQ29sb3JQaWNrZXIuX3BsdWdpbkluZm89e25hbWU6ImNvbG9yUGlja2VyIix2ZXJzaW9uOiIkTGFzdENoYW5nZWRSZXZpc2lvbjogMTIzNyAkIi5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sIiQxIiksZGV2ZWxvcGVyOiJKYW1lcyBTbGVlbWFuIixkZXZlbG9wZXJfdXJsOiJodHRwOi8vd3d3LmdvZ28uY28ubnovIixjX293bmVyOiJHb2dvIEludGVybmV0IFNlcnZpY2VzIixsaWNlbnNlOiJodG1sQXJlYSIsc3BvbnNvcjoiR29nbyBJbnRlcm5ldCBTZXJ2aWNlcyIsc3BvbnNvcl91cmw6Imh0dHA6Ly93d3cuZ29nby5jby5uei8ifTsKLWZ1bmN0aW9uIENvbG9yUGlja2VyKCl7Ci19OwotdHJ5ewotaWYod2luZG93Lm9wZW5lciYmd2luZG93Lm9wZW5lci5YaW5oYSl7Ci12YXIgb3BlbmVyQ29sb3JQaWNrZXI9d2luZG93Lm9wZW5lci5YaW5oYS5jb2xvclBpY2tlcjsKLVhpbmhhLl9hZGRFdmVudCh3aW5kb3csInVubG9hZCIsZnVuY3Rpb24oKXsKLVhpbmhhLmNvbG9yUGlja2VyPW9wZW5lckNvbG9yUGlja2VyOwotfSk7Ci19Ci19Ci1jYXRjaChlKXsKLX0KLVhpbmhhLmNvbG9yUGlja2VyPWZ1bmN0aW9uKF8xKXsKLWlmKFhpbmhhLmNvbG9yUGlja2VyLnNhdmVkQ29sb3JzLmxlbmd0aD09PTApewotWGluaGEuY29sb3JQaWNrZXIubG9hZENvbG9ycygpOwotfQotdGhpcy5pc19pZV82PShYaW5oYS5pc19pZSYmWGluaGEuaWVfdmVyc2lvbjw3KTsKLXZhciBfMj10aGlzOwotdmFyIF8zPWZhbHNlOwotdmFyIF80PWZhbHNlOwotdmFyIF81PTA7Ci12YXIgXzY9MDsKLXRoaXMuY2FsbGJhY2s9XzEuY2FsbGJhY2s/XzEuY2FsbGJhY2s6ZnVuY3Rpb24oXzcpewotYWxlcnQoIllvdSBwaWNrZWQgIitfNyk7Ci19OwotdGhpcy53ZWJzYWZlPV8xLndlYnNhZmU/XzEud2Vic2FmZTpmYWxzZTsKLXRoaXMuc2F2ZWNvbG9ycz1fMS5zYXZlY29sb3JzP18xLnNhdmVjb2xvcnM6MjA7Ci10aGlzLmNlbGxzaXplPXBhcnNlSW50KF8xLmNlbGxzaXplP18xLmNlbGxzaXplOiIxMHB4IiwxMCk7Ci10aGlzLnNpZGU9XzEuZ3JhbnVsYXJpdHk/XzEuZ3JhbnVsYXJpdHk6MTg7Ci12YXIgXzg9dGhpcy5zaWRlKzE7Ci12YXIgXzk9dGhpcy5zaWRlLTE7Ci10aGlzLnZhbHVlPTE7Ci10aGlzLnNhdmVkX2NlbGxzPW51bGw7Ci10aGlzLnRhYmxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7Ci10aGlzLnRhYmxlLmNsYXNzTmFtZT0iZGlhbG9nIjsKLXRoaXMudGFibGUuY2VsbFNwYWNpbmc9dGhpcy50YWJsZS5jZWxsUGFkZGluZz0wOwotdGhpcy50YWJsZS5vbm1vdXNldXA9ZnVuY3Rpb24oKXsKLV8zPWZhbHNlOwotXzQ9ZmFsc2U7Ci19OwotdGhpcy50Ym9keT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpOwotdGhpcy50YWJsZS5hcHBlbmRDaGlsZCh0aGlzLnRib2R5KTsKLXRoaXMudGFibGUuc3R5bGUuYm9yZGVyPSIxcHggc29saWQgV2luZG93RnJhbWUiOwotdGhpcy50YWJsZS5zdHlsZS56SW5kZXg9IjEwNTAiOwotdmFyIHRyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci12YXIgdGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLXRkLmNvbFNwYW49dGhpcy5zaWRlOwotdGQuY2xhc3NOYW1lPSJ0aXRsZSI7Ci10ZC5zdHlsZS5mb250RmFtaWx5PSJzbWFsbC1jYXB0aW9uLGNhcHRpb24sc2Fucy1zZXJpZiI7Ci10ZC5zdHlsZS5mb250U2l6ZT0ieC1zbWFsbCI7Ci10ZC51bnNlbGVjdGFibGU9Im9uIjsKLXRkLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiOwotdGQuc3R5bGUuY3Vyc29yPSJkZWZhdWx0IjsKLXRkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFhpbmhhLl9sYygiQ2xpY2sgYSBjb2xvci4uLiIpKSk7Ci10ZC5zdHlsZS5ib3JkZXJCb3R0b209IjFweCBzb2xpZCBXaW5kb3dGcmFtZSI7Ci10ci5hcHBlbmRDaGlsZCh0ZCk7Ci10ZD1udWxsOwotdmFyIHRkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci10ZC5jbGFzc05hbWU9InRpdGxlIjsKLXRkLmNvbFNwYW49MjsKLXRkLnN0eWxlLmZvbnRGYW1pbHk9IlRhaG9tYSxWZXJkYW5hLHNhbnMtc2VyaWYiOwotdGQuc3R5bGUuYm9yZGVyQm90dG9tPSIxcHggc29saWQgV2luZG93RnJhbWUiOwotdGQuc3R5bGUucGFkZGluZ1JpZ2h0PSIwIjsKLXRyLmFwcGVuZENoaWxkKHRkKTsKLXZhciBfYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLV9jLnRpdGxlPVhpbmhhLl9sYygiQ2xvc2UiKTsKLV9jLmNsYXNzTmFtZT0iYnV0dG9uQ29sb3IiOwotX2Muc3R5bGUuaGVpZ2h0PSIxMXB4IjsKLV9jLnN0eWxlLndpZHRoPSIxMXB4IjsKLV9jLnN0eWxlLmN1cnNvcj0icG9pbnRlciI7Ci1fYy5vbmNsaWNrPWZ1bmN0aW9uKCl7Ci1fMi5jbG9zZSgpOwotfTsKLV9jLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCLDlyIpKTsKLV9jLmFsaWduPSJjZW50ZXIiOwotX2Muc3R5bGUudmVydGljYWxBbGlnbj0idG9wIjsKLV9jLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSI7Ci1fYy5zdHlsZS5jc3NGbG9hdD0icmlnaHQiOwotX2Muc3R5bGUuc3R5bGVGbG9hdD0icmlnaHQiOwotX2Muc3R5bGUucGFkZGluZz0iMCI7Ci1fYy5zdHlsZS5tYXJnaW49IjJweCI7Ci1fYy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9InRyYW5zcGFyZW50IjsKLV9jLnN0eWxlLmZvbnRTaXplPSIxMXB4IjsKLWlmKCFYaW5oYS5pc19pZSl7Ci1fYy5zdHlsZS5saW5lSGVpZ2h0PSI5cHgiOwotfQotX2Muc3R5bGUubGV0dGVyU3BhY2luZz0iMCI7Ci10ZC5hcHBlbmRDaGlsZChfYyk7Ci10aGlzLnRib2R5LmFwcGVuZENoaWxkKHRyKTsKLV9jPXRyPXRkPW51bGw7Ci10aGlzLmNvbnN0cmFpbl9jYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotdGhpcy5jb25zdHJhaW5fY2IudHlwZT0iY2hlY2tib3giOwotdGhpcy5jaG9zZW5Db2xvcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotdGhpcy5jaG9zZW5Db2xvci50eXBlPSJ0ZXh0IjsKLXRoaXMuY2hvc2VuQ29sb3IubWF4TGVuZ3RoPTc7Ci10aGlzLmNob3NlbkNvbG9yLnN0eWxlLndpZHRoPSI1MHB4IjsKLXRoaXMuY2hvc2VuQ29sb3Iuc3R5bGUuZm9udFNpemU9IjExcHgiOwotdGhpcy5jaG9zZW5Db2xvci5vbmNoYW5nZT1mdW5jdGlvbigpewotaWYoLyNbMC05YS1mXXs2LDZ9L2kudGVzdCh0aGlzLnZhbHVlKSl7Ci1fMi5iYWNrU2FtcGxlLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLnZhbHVlOwotXzIuZm9yZVNhbXBsZS5zdHlsZS5jb2xvcj10aGlzLnZhbHVlOwotfQotfTsKLXRoaXMuYmFja1NhbXBsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLXRoaXMuYmFja1NhbXBsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiwqAiKSk7Ci10aGlzLmJhY2tTYW1wbGUuc3R5bGUuZm9udFdlaWdodD0iYm9sZCI7Ci10aGlzLmJhY2tTYW1wbGUuc3R5bGUuZm9udEZhbWlseT0ic21hbGwtY2FwdGlvbixjYXB0aW9uLHNhbnMtc2VyaWYiOwotdGhpcy5iYWNrU2FtcGxlLmZvbnRTaXplPSJ4LXNtYWxsIjsKLXRoaXMuZm9yZVNhbXBsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLXRoaXMuZm9yZVNhbXBsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShYaW5oYS5fbGMoIlNhbXBsZSIpKSk7Ci10aGlzLmZvcmVTYW1wbGUuc3R5bGUuZm9udFdlaWdodD0iYm9sZCI7Ci10aGlzLmZvcmVTYW1wbGUuc3R5bGUuZm9udEZhbWlseT0ic21hbGwtY2FwdGlvbixjYXB0aW9uLHNhbnMtc2VyaWYiOwotdGhpcy5mb3JlU2FtcGxlLmZvbnRTaXplPSJ4LXNtYWxsIjsKLWZ1bmN0aW9uIHRvSGV4KF9kKXsKLXZhciBoPV9kLnRvU3RyaW5nKDE2KTsKLWlmKGgubGVuZ3RoPDIpewotaD0iMCIraDsKLX0KLXJldHVybiBoOwotfTsKLWZ1bmN0aW9uIHR1cGxlVG9Db2xvcihfZil7Ci1yZXR1cm4gIiMiK3RvSGV4KF9mLnJlZCkrdG9IZXgoX2YuZ3JlZW4pK3RvSGV4KF9mLmJsdWUpOwotfTsKLWZ1bmN0aW9uIG5lYXJlc3RQb3dlck9mKG51bSxfMTEpewotcmV0dXJuIE1hdGgucm91bmQoTWF0aC5yb3VuZChudW0vXzExKSpfMTEpOwotfTsKLWZ1bmN0aW9uIGRvdWJsZUhleERlYyhkZWMpewotcmV0dXJuIHBhcnNlSW50KGRlYy50b1N0cmluZygxNikrZGVjLnRvU3RyaW5nKDE2KSwxNik7Ci19OwotZnVuY3Rpb24gcmdiVG9XZWJzYWZlKF8xMyl7Ci1fMTMucmVkPWRvdWJsZUhleERlYyhuZWFyZXN0UG93ZXJPZihwYXJzZUludCh0b0hleChfMTMucmVkKS5jaGFyQXQoMCksMTYpLDMpKTsKLV8xMy5ibHVlPWRvdWJsZUhleERlYyhuZWFyZXN0UG93ZXJPZihwYXJzZUludCh0b0hleChfMTMuYmx1ZSkuY2hhckF0KDApLDE2KSwzKSk7Ci1fMTMuZ3JlZW49ZG91YmxlSGV4RGVjKG5lYXJlc3RQb3dlck9mKHBhcnNlSW50KHRvSGV4KF8xMy5ncmVlbikuY2hhckF0KDApLDE2KSwzKSk7Ci1yZXR1cm4gXzEzOwotfTsKLWZ1bmN0aW9uIGhzdlRvUkdCKGgscyx2KXsKLXZhciBfMTc7Ci1pZihzPT09MCl7Ci1fMTc9e3JlZDp2LGdyZWVuOnYsYmx1ZTp2fTsKLX1lbHNlewotaC89NjA7Ci12YXIgaT1NYXRoLmZsb29yKGgpOwotdmFyIGY9aC1pOwotdmFyIHA9diooMS1zKTsKLXZhciBxPXYqKDEtcypmKTsKLXZhciB0PXYqKDEtcyooMS1mKSk7Ci1zd2l0Y2goaSl7Ci1jYXNlIDA6Ci1fMTc9e3JlZDp2LGdyZWVuOnQsYmx1ZTpwfTsKLWJyZWFrOwotY2FzZSAxOgotXzE3PXtyZWQ6cSxncmVlbjp2LGJsdWU6cH07Ci1icmVhazsKLWNhc2UgMjoKLV8xNz17cmVkOnAsZ3JlZW46dixibHVlOnR9OwotYnJlYWs7Ci1jYXNlIDM6Ci1fMTc9e3JlZDpwLGdyZWVuOnEsYmx1ZTp2fTsKLWJyZWFrOwotY2FzZSA0OgotXzE3PXtyZWQ6dCxncmVlbjpwLGJsdWU6dn07Ci1icmVhazsKLWRlZmF1bHQ6Ci1fMTc9e3JlZDp2LGdyZWVuOnAsYmx1ZTpxfTsKLWJyZWFrOwotfQotfQotXzE3LnJlZD1NYXRoLmNlaWwoXzE3LnJlZCoyNTUpOwotXzE3LmdyZWVuPU1hdGguY2VpbChfMTcuZ3JlZW4qMjU1KTsKLV8xNy5ibHVlPU1hdGguY2VpbChfMTcuYmx1ZSoyNTUpOwotcmV0dXJuIF8xNzsKLX07Ci12YXIgXzFkPXRoaXM7Ci1mdW5jdGlvbiBjbG9zZU9uQm9keUNsaWNrKGV2KXsKLWV2PWV2P2V2OndpbmRvdy5ldmVudDsKLWVsPWV2LnRhcmdldD9ldi50YXJnZXQ6ZXYuc3JjRWxlbWVudDsKLWRvewotaWYoZWw9PV8xZC50YWJsZSl7Ci1yZXR1cm47Ci19Ci19d2hpbGUoZWw9ZWwucGFyZW50Tm9kZSk7Ci1fMWQuY2xvc2UoKTsKLX07Ci10aGlzLm9wZW49ZnVuY3Rpb24oXzFmLF8yMCxfMjEpewotdGhpcy50YWJsZS5zdHlsZS5kaXNwbGF5PSIiOwotdGhpcy5waWNrX2NvbG9yKCk7Ci1pZihfMjEmJi8jWzAtOWEtZl17Niw2fS9pLnRlc3QoXzIxKSl7Ci10aGlzLmNob3NlbkNvbG9yLnZhbHVlPV8yMTsKLXRoaXMuYmFja1NhbXBsZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9XzIxOwotdGhpcy5mb3JlU2FtcGxlLnN0eWxlLmNvbG9yPV8yMTsKLX0KLVhpbmhhLl9hZGRFdmVudChkb2N1bWVudC5ib2R5LCJtb3VzZWRvd24iLGNsb3NlT25Cb2R5Q2xpY2spOwotdGhpcy50YWJsZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiOwotdmFyIGU9XzIwOwotdmFyIHRvcD0wOwotdmFyIF8yND0wOwotZG97Ci1pZihlLnN0eWxlLnBvc2l0aW9uPT0iZml4ZWQiKXsKLXRoaXMudGFibGUuc3R5bGUucG9zaXRpb249ImZpeGVkIjsKLX0KLXRvcCs9ZS5vZmZzZXRUb3AtZS5zY3JvbGxUb3A7Ci1fMjQrPWUub2Zmc2V0TGVmdC1lLnNjcm9sbExlZnQ7Ci1lPWUub2Zmc2V0UGFyZW50OwotfXdoaWxlKGUpOwotdmFyIHgseTsKLWlmKC90b3AvLnRlc3QoXzFmKXx8KHRvcCt0aGlzLnRhYmxlLm9mZnNldEhlaWdodD5kb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCkpewotaWYodG9wLXRoaXMudGFibGUub2Zmc2V0SGVpZ2h0PjApewotdGhpcy50YWJsZS5zdHlsZS50b3A9KHRvcC10aGlzLnRhYmxlLm9mZnNldEhlaWdodCkrInB4IjsKLX1lbHNlewotdGhpcy50YWJsZS5zdHlsZS50b3A9MDsKLX0KLX1lbHNlewotdGhpcy50YWJsZS5zdHlsZS50b3A9KHRvcCtfMjAub2Zmc2V0SGVpZ2h0KSsicHgiOwotfQotaWYoL2xlZnQvLnRlc3QoXzFmKXx8KF8yNCt0aGlzLnRhYmxlLm9mZnNldFdpZHRoPmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGgpKXsKLWlmKF8yNC0odGhpcy50YWJsZS5vZmZzZXRXaWR0aC1fMjAub2Zmc2V0V2lkdGgpPjApewotdGhpcy50YWJsZS5zdHlsZS5sZWZ0PShfMjQtKHRoaXMudGFibGUub2Zmc2V0V2lkdGgtXzIwLm9mZnNldFdpZHRoKSkrInB4IjsKLX1lbHNlewotdGhpcy50YWJsZS5zdHlsZS5sZWZ0PTA7Ci19Ci19ZWxzZXsKLXRoaXMudGFibGUuc3R5bGUubGVmdD1fMjQrInB4IjsKLX0KLWlmKHRoaXMuaXNfaWVfNil7Ci10aGlzLmlmcmFtZS5zdHlsZS50b3A9dGhpcy50YWJsZS5zdHlsZS50b3A7Ci10aGlzLmlmcmFtZS5zdHlsZS5sZWZ0PXRoaXMudGFibGUuc3R5bGUubGVmdDsKLX0KLX07Ci1mdW5jdGlvbiBwaWNrQ2VsbChfMjcpewotXzIuY2hvc2VuQ29sb3IudmFsdWU9XzI3LmNvbG9yQ29kZTsKLV8yLmJhY2tTYW1wbGUuc3R5bGUuYmFja2dyb3VuZENvbG9yPV8yNy5jb2xvckNvZGU7Ci1fMi5mb3JlU2FtcGxlLnN0eWxlLmNvbG9yPV8yNy5jb2xvckNvZGU7Ci1pZigoXzI3Lmh1ZT49MTk1JiZfMjcuc2F0dXJhdGlvbj4wLjUpfHwoXzI3Lmh1ZT09PTAmJl8yNy5zYXR1cmF0aW9uPT09MCYmXzI3LnZhbHVlPDAuNSl8fChfMjcuaHVlIT09MCYmXzIudmFsdWU8MC43NSkpewotXzI3LnN0eWxlLmJvcmRlckNvbG9yPSIjZmZmIjsKLX1lbHNlewotXzI3LnN0eWxlLmJvcmRlckNvbG9yPSIjMDAwIjsKLX0KLV81PV8yNy50aGlzcm93OwotXzY9XzI3LnRoaXNjb2w7Ci19OwotZnVuY3Rpb24gcGlja1ZhbHVlKF8yOCl7Ci1pZihfMi52YWx1ZTwwLjUpewotXzI4LnN0eWxlLmJvcmRlckNvbG9yPSIjZmZmIjsKLX1lbHNlewotXzI4LnN0eWxlLmJvcmRlckNvbG9yPSIjMDAwIjsKLX0KLV85PV8yOC50aGlzcm93OwotXzg9XzI4LnRoaXNjb2w7Ci1fMi5jaG9zZW5Db2xvci52YWx1ZT1fMi5zYXZlZF9jZWxsc1tfNV1bXzZdLmNvbG9yQ29kZTsKLV8yLmJhY2tTYW1wbGUuc3R5bGUuYmFja2dyb3VuZENvbG9yPV8yLnNhdmVkX2NlbGxzW181XVtfNl0uY29sb3JDb2RlOwotXzIuZm9yZVNhbXBsZS5zdHlsZS5jb2xvcj1fMi5zYXZlZF9jZWxsc1tfNV1bXzZdLmNvbG9yQ29kZTsKLX07Ci1mdW5jdGlvbiB1bnBpY2tDZWxsKHJvdyxjb2wpewotXzIuc2F2ZWRfY2VsbHNbcm93XVtjb2xdLnN0eWxlLmJvcmRlckNvbG9yPV8yLnNhdmVkX2NlbGxzW3Jvd11bY29sXS5jb2xvckNvZGU7Ci19OwotdGhpcy5waWNrX2NvbG9yPWZ1bmN0aW9uKCl7Ci12YXIgXzJiLF8yYzsKLXZhciBfMmQ9dGhpczsKLXZhciBfMmU9MzU5Lyh0aGlzLnNpZGUpOwotdmFyIF8yZj0xLyh0aGlzLnNpZGUtMSk7Ci12YXIgXzMwPTEvKHRoaXMuc2lkZS0xKTsKLXZhciBfMzE9dGhpcy5jb25zdHJhaW5fY2IuY2hlY2tlZDsKLWlmKHRoaXMuc2F2ZWRfY2VsbHM9PT1udWxsKXsKLXRoaXMuc2F2ZWRfY2VsbHM9W107Ci1mb3IodmFyIHJvdz0wO3Jvdzx0aGlzLnNpZGU7cm93KyspewotdmFyIHRyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci10aGlzLnNhdmVkX2NlbGxzW3Jvd109W107Ci1mb3IodmFyIGNvbD0wO2NvbDx0aGlzLnNpZGU7Y29sKyspewotdmFyIHRkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci1pZihfMzEpewotdGQuY29sb3JDb2RlPXR1cGxlVG9Db2xvcihyZ2JUb1dlYnNhZmUoaHN2VG9SR0IoXzJlKnJvdyxfMmYqY29sLHRoaXMudmFsdWUpKSk7Ci19ZWxzZXsKLXRkLmNvbG9yQ29kZT10dXBsZVRvQ29sb3IoaHN2VG9SR0IoXzJlKnJvdyxfMmYqY29sLHRoaXMudmFsdWUpKTsKLX0KLXRoaXMuc2F2ZWRfY2VsbHNbcm93XVtjb2xdPXRkOwotdGQuc3R5bGUuaGVpZ2h0PXRoaXMuY2VsbHNpemUrInB4IjsKLXRkLnN0eWxlLndpZHRoPXRoaXMuY2VsbHNpemUtMisicHgiOwotdGQuc3R5bGUuYm9yZGVyV2lkdGg9IjFweCI7Ci10ZC5zdHlsZS5ib3JkZXJTdHlsZT0ic29saWQiOwotdGQuc3R5bGUuYm9yZGVyQ29sb3I9dGQuY29sb3JDb2RlOwotdGQuc3R5bGUuYmFja2dyb3VuZENvbG9yPXRkLmNvbG9yQ29kZTsKLWlmKHJvdz09XzUmJmNvbD09XzYpewotdGQuc3R5bGUuYm9yZGVyQ29sb3I9IiMwMDAiOwotdGhpcy5jaG9zZW5Db2xvci52YWx1ZT10ZC5jb2xvckNvZGU7Ci10aGlzLmJhY2tTYW1wbGUuc3R5bGUuYmFja2dyb3VuZENvbG9yPXRkLmNvbG9yQ29kZTsKLXRoaXMuZm9yZVNhbXBsZS5zdHlsZS5jb2xvcj10ZC5jb2xvckNvZGU7Ci19Ci10ZC5odWU9XzJlKnJvdzsKLXRkLnNhdHVyYXRpb249XzJmKmNvbDsKLXRkLnRoaXNyb3c9cm93OwotdGQudGhpc2NvbD1jb2w7Ci10ZC5vbm1vdXNlZG93bj1mdW5jdGlvbigpewotXzM9dHJ1ZTsKLV8yZC5zYXZlZF9jZWxsc1tfNV1bXzZdLnN0eWxlLmJvcmRlckNvbG9yPV8yZC5zYXZlZF9jZWxsc1tfNV1bXzZdLmNvbG9yQ29kZTsKLXBpY2tDZWxsKHRoaXMpOwotfTsKLXRkLm9ubW91c2VvdmVyPWZ1bmN0aW9uKCl7Ci1pZihfMyl7Ci1waWNrQ2VsbCh0aGlzKTsKLX0KLX07Ci10ZC5vbm1vdXNlb3V0PWZ1bmN0aW9uKCl7Ci1pZihfMyl7Ci10aGlzLnN0eWxlLmJvcmRlckNvbG9yPXRoaXMuY29sb3JDb2RlOwotfQotfTsKLXRkLm9uZGJsY2xpY2s9ZnVuY3Rpb24oKXsKLVhpbmhhLmNvbG9yUGlja2VyLnJlbWVtYmVyKHRoaXMuY29sb3JDb2RlLF8yZC5zYXZlY29sb3JzKTsKLV8yZC5jYWxsYmFjayh0aGlzLmNvbG9yQ29kZSk7Ci1fMmQuY2xvc2UoKTsKLX07Ci10ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKLXRkLnN0eWxlLmN1cnNvcj0icG9pbnRlciI7Ci10ci5hcHBlbmRDaGlsZCh0ZCk7Ci10ZD1udWxsOwotfQotdmFyIHRkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci10ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKLXRkLnN0eWxlLndpZHRoPXRoaXMuY2VsbHNpemUrInB4IjsKLXRyLmFwcGVuZENoaWxkKHRkKTsKLXRkPW51bGw7Ci12YXIgdGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLXRoaXMuc2F2ZWRfY2VsbHNbcm93XVtjb2wrMV09dGQ7Ci10ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKLXRkLnN0eWxlLndpZHRoPXRoaXMuY2VsbHNpemUtMisicHgiOwotdGQuc3R5bGUuaGVpZ2h0PXRoaXMuY2VsbHNpemUrInB4IjsKLXRkLmNvbnN0cmFpbmVkQ29sb3JDb2RlPXR1cGxlVG9Db2xvcihyZ2JUb1dlYnNhZmUoaHN2VG9SR0IoMCwwLF8zMCpyb3cpKSk7Ci10ZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9dGQuY29sb3JDb2RlPXR1cGxlVG9Db2xvcihoc3ZUb1JHQigwLDAsXzMwKnJvdykpOwotdGQuc3R5bGUuYm9yZGVyV2lkdGg9IjFweCI7Ci10ZC5zdHlsZS5ib3JkZXJTdHlsZT0ic29saWQiOwotdGQuc3R5bGUuYm9yZGVyQ29sb3I9dGQuY29sb3JDb2RlOwotaWYocm93PT1fOSl7Ci10ZC5zdHlsZS5ib3JkZXJDb2xvcj0iYmxhY2siOwotfQotdGQuaHVlPV8yZSpyb3c7Ci10ZC5zYXR1cmF0aW9uPV8yZipjb2w7Ci10ZC5oc3ZfdmFsdWU9XzMwKnJvdzsKLXRkLnRoaXNyb3c9cm93OwotdGQudGhpc2NvbD1jb2wrMTsKLXRkLm9ubW91c2Vkb3duPWZ1bmN0aW9uKCl7Ci1fND10cnVlOwotXzJkLnNhdmVkX2NlbGxzW185XVtfOF0uc3R5bGUuYm9yZGVyQ29sb3I9XzJkLnNhdmVkX2NlbGxzW185XVtfOF0uY29sb3JDb2RlOwotXzJkLnZhbHVlPXRoaXMuaHN2X3ZhbHVlOwotXzJkLnBpY2tfY29sb3IoKTsKLXBpY2tWYWx1ZSh0aGlzKTsKLX07Ci10ZC5vbm1vdXNlb3Zlcj1mdW5jdGlvbigpewotaWYoXzQpewotXzJkLnZhbHVlPXRoaXMuaHN2X3ZhbHVlOwotXzJkLnBpY2tfY29sb3IoKTsKLXBpY2tWYWx1ZSh0aGlzKTsKLX0KLX07Ci10ZC5vbm1vdXNlb3V0PWZ1bmN0aW9uKCl7Ci1pZihfNCl7Ci10aGlzLnN0eWxlLmJvcmRlckNvbG9yPXRoaXMuY29sb3JDb2RlOwotfQotfTsKLXRkLnN0eWxlLmN1cnNvcj0icG9pbnRlciI7Ci10ci5hcHBlbmRDaGlsZCh0ZCk7Ci10ZD1udWxsOwotdGhpcy50Ym9keS5hcHBlbmRDaGlsZCh0cik7Ci10cj1udWxsOwotfQotdmFyIHRyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci10aGlzLnNhdmVkX2NlbGxzW3Jvd109W107Ci1mb3IodmFyIGNvbD0wO2NvbDx0aGlzLnNpZGU7Y29sKyspewotdmFyIHRkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci1pZihfMzEpewotdGQuY29sb3JDb2RlPXR1cGxlVG9Db2xvcihyZ2JUb1dlYnNhZmUoaHN2VG9SR0IoMCwwLF8zMCoodGhpcy5zaWRlLWNvbC0xKSkpKTsKLX1lbHNlewotdGQuY29sb3JDb2RlPXR1cGxlVG9Db2xvcihoc3ZUb1JHQigwLDAsXzMwKih0aGlzLnNpZGUtY29sLTEpKSk7Ci19Ci10aGlzLnNhdmVkX2NlbGxzW3Jvd11bY29sXT10ZDsKLXRkLnN0eWxlLmhlaWdodD10aGlzLmNlbGxzaXplKyJweCI7Ci10ZC5zdHlsZS53aWR0aD10aGlzLmNlbGxzaXplLTIrInB4IjsKLXRkLnN0eWxlLmJvcmRlcldpZHRoPSIxcHgiOwotdGQuc3R5bGUuYm9yZGVyU3R5bGU9InNvbGlkIjsKLXRkLnN0eWxlLmJvcmRlckNvbG9yPXRkLmNvbG9yQ29kZTsKLXRkLnN0eWxlLmJhY2tncm91bmRDb2xvcj10ZC5jb2xvckNvZGU7Ci10ZC5odWU9MDsKLXRkLnNhdHVyYXRpb249MDsKLXRkLnZhbHVlPV8zMCoodGhpcy5zaWRlLWNvbC0xKTsKLXRkLnRoaXNyb3c9cm93OwotdGQudGhpc2NvbD1jb2w7Ci10ZC5vbm1vdXNlZG93bj1mdW5jdGlvbigpewotXzM9dHJ1ZTsKLV8yZC5zYXZlZF9jZWxsc1tfNV1bXzZdLnN0eWxlLmJvcmRlckNvbG9yPV8yZC5zYXZlZF9jZWxsc1tfNV1bXzZdLmNvbG9yQ29kZTsKLXBpY2tDZWxsKHRoaXMpOwotfTsKLXRkLm9ubW91c2VvdmVyPWZ1bmN0aW9uKCl7Ci1pZihfMyl7Ci1waWNrQ2VsbCh0aGlzKTsKLX0KLX07Ci10ZC5vbm1vdXNlb3V0PWZ1bmN0aW9uKCl7Ci1pZihfMyl7Ci10aGlzLnN0eWxlLmJvcmRlckNvbG9yPXRoaXMuY29sb3JDb2RlOwotfQotfTsKLXRkLm9uZGJsY2xpY2s9ZnVuY3Rpb24oKXsKLVhpbmhhLmNvbG9yUGlja2VyLnJlbWVtYmVyKHRoaXMuY29sb3JDb2RlLF8yZC5zYXZlY29sb3JzKTsKLV8yZC5jYWxsYmFjayh0aGlzLmNvbG9yQ29kZSk7Ci1fMmQuY2xvc2UoKTsKLX07Ci10ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKLXRkLnN0eWxlLmN1cnNvcj0icG9pbnRlciI7Ci10ci5hcHBlbmRDaGlsZCh0ZCk7Ci10ZD1udWxsOwotfQotdGhpcy50Ym9keS5hcHBlbmRDaGlsZCh0cik7Ci10cj1udWxsOwotdmFyIHRyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci12YXIgdGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLXRyLmFwcGVuZENoaWxkKHRkKTsKLXRkLmNvbFNwYW49dGhpcy5zaWRlKzI7Ci10ZC5zdHlsZS5wYWRkaW5nPSIzcHgiOwotaWYodGhpcy53ZWJzYWZlKXsKLXZhciBkaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci12YXIgXzM3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7Ci1fMzcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoWGluaGEuX2xjKCJXZWIgU2FmZTogIikpKTsKLXRoaXMuY29uc3RyYWluX2NiLm9uY2xpY2s9ZnVuY3Rpb24oKXsKLV8yZC5waWNrX2NvbG9yKCk7Ci19OwotXzM3LmFwcGVuZENoaWxkKHRoaXMuY29uc3RyYWluX2NiKTsKLV8zNy5zdHlsZS5mb250RmFtaWx5PSJzbWFsbC1jYXB0aW9uLGNhcHRpb24sc2Fucy1zZXJpZiI7Ci1fMzcuc3R5bGUuZm9udFNpemU9Ingtc21hbGwiOwotZGl2LmFwcGVuZENoaWxkKF8zNyk7Ci10ZC5hcHBlbmRDaGlsZChkaXYpOwotZGl2PW51bGw7Ci19Ci12YXIgZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotdmFyIF8zNz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOwotXzM3LnN0eWxlLmZvbnRGYW1pbHk9InNtYWxsLWNhcHRpb24sY2FwdGlvbixzYW5zLXNlcmlmIjsKLV8zNy5zdHlsZS5mb250U2l6ZT0ieC1zbWFsbCI7Ci1fMzcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoWGluaGEuX2xjKCJDb2xvcjogIikpKTsKLV8zNy5hcHBlbmRDaGlsZCh0aGlzLmNob3NlbkNvbG9yKTsKLWRpdi5hcHBlbmRDaGlsZChfMzcpOwotdmFyIGJ1dD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci1idXQuY2xhc3NOYW1lPSJidXR0b25Db2xvciAiOwotYnV0LnN0eWxlLmZvbnRTaXplPSIxM3B4IjsKLWJ1dC5zdHlsZS53aWR0aD0iMjRweCI7Ci1idXQuc3R5bGUubWFyZ2luTGVmdD0iMnB4IjsKLWJ1dC5zdHlsZS5wYWRkaW5nPSIwcHggNHB4IjsKLWJ1dC5zdHlsZS5jdXJzb3I9InBvaW50ZXIiOwotYnV0Lm9uY2xpY2s9ZnVuY3Rpb24oKXsKLVhpbmhhLmNvbG9yUGlja2VyLnJlbWVtYmVyKF8yZC5jaG9zZW5Db2xvci52YWx1ZSxfMmQuc2F2ZWNvbG9ycyk7Ci1fMmQuY2FsbGJhY2soXzJkLmNob3NlbkNvbG9yLnZhbHVlKTsKLV8yZC5jbG9zZSgpOwotfTsKLWJ1dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShYaW5oYS5fbGMoIk9LIikpKTsKLWJ1dC5hbGlnbj0iY2VudGVyIjsKLWRpdi5hcHBlbmRDaGlsZChidXQpOwotdGQuYXBwZW5kQ2hpbGQoZGl2KTsKLXZhciBfMzk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGFibGUiKTsKLV8zOS5zdHlsZS53aWR0aD0iMTAwJSI7Ci12YXIgXzNhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5Iik7Ci1fMzkuYXBwZW5kQ2hpbGQoXzNhKTsKLXZhciBfM2I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLV8zYS5hcHBlbmRDaGlsZChfM2IpOwotdmFyIF8zYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotXzNiLmFwcGVuZENoaWxkKF8zYyk7Ci1fM2MuYXBwZW5kQ2hpbGQodGhpcy5iYWNrU2FtcGxlKTsKLV8zYy5zdHlsZS53aWR0aD0iNTAlIjsKLXZhciBfM2Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLV8zYi5hcHBlbmRDaGlsZChfM2QpOwotXzNkLmFwcGVuZENoaWxkKHRoaXMuZm9yZVNhbXBsZSk7Ci1fM2Quc3R5bGUud2lkdGg9IjUwJSI7Ci10ZC5hcHBlbmRDaGlsZChfMzkpOwotdmFyIF8zZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLV8zZS5zdHlsZS5jbGVhcj0iYm90aCI7Ci1mdW5jdGlvbiBjcmVhdGVTYXZlZENvbG9ycyhfM2YpewotdmFyIF80MD1YaW5oYS5pc19pZTsKLXZhciBkaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci1kaXYuc3R5bGUud2lkdGg9XzJkLmNlbGxzaXplKyJweCI7Ci1kaXYuc3R5bGUuaGVpZ2h0PV8yZC5jZWxsc2l6ZSsicHgiOwotZGl2LnN0eWxlLm1hcmdpbj0iMXB4IjsKLWRpdi5zdHlsZS5ib3JkZXI9IjFweCBzb2xpZCBibGFjayI7Ci1kaXYuc3R5bGUuY3Vyc29yPSJwb2ludGVyIjsKLWRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9XzNmOwotZGl2LnN0eWxlW180MD8ic3R5bGVGbG9hdCI6ImNzc0Zsb2F0Il09ImxlZnQiOwotZGl2Lm9uZGJsY2xpY2s9ZnVuY3Rpb24oKXsKLV8yZC5jYWxsYmFjayhfM2YpOwotXzJkLmNsb3NlKCk7Ci19OwotZGl2Lm9uY2xpY2s9ZnVuY3Rpb24oKXsKLV8yZC5jaG9zZW5Db2xvci52YWx1ZT1fM2Y7Ci1fMmQuYmFja1NhbXBsZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9XzNmOwotXzJkLmZvcmVTYW1wbGUuc3R5bGUuY29sb3I9XzNmOwotfTsKLV8zZS5hcHBlbmRDaGlsZChkaXYpOwotfTsKLWZvcih2YXIgXzQyPTA7XzQyPFhpbmhhLmNvbG9yUGlja2VyLnNhdmVkQ29sb3JzLmxlbmd0aDtfNDIrKyl7Ci1jcmVhdGVTYXZlZENvbG9ycyhYaW5oYS5jb2xvclBpY2tlci5zYXZlZENvbG9yc1tfNDJdKTsKLX0KLXRkLmFwcGVuZENoaWxkKF8zZSk7Ci10aGlzLnRib2R5LmFwcGVuZENoaWxkKHRyKTsKLWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy50YWJsZSk7Ci1pZih0aGlzLmlzX2llXzYpewotaWYoIXRoaXMuaWZyYW1lKXsKLXRoaXMuaWZyYW1lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOwotdGhpcy5pZnJhbWUuZnJhbWVCb3JkZXI9MDsKLXRoaXMuaWZyYW1lLnNyYz0iamF2YXNjcmlwdDo7IjsKLXRoaXMuaWZyYW1lLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7Ci10aGlzLmlmcmFtZS5zdHlsZS53aWR0aD10aGlzLnRhYmxlLm9mZnNldFdpZHRoOwotdGhpcy5pZnJhbWUuc3R5bGUuaGVpZ2h0PXRoaXMudGFibGUub2Zmc2V0SGVpZ2h0OwotdGhpcy5pZnJhbWUuc3R5bGUuekluZGV4PSIxMDQ5IjsKLWRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKHRoaXMuaWZyYW1lLHRoaXMudGFibGUpOwotfQotdGhpcy5pZnJhbWUuc3R5bGUuZGlzcGxheT0iIjsKLX0KLX1lbHNlewotZm9yKHZhciByb3c9MDtyb3c8dGhpcy5zaWRlO3JvdysrKXsKLWZvcih2YXIgY29sPTA7Y29sPHRoaXMuc2lkZTtjb2wrKyl7Ci1pZihfMzEpewotdGhpcy5zYXZlZF9jZWxsc1tyb3ddW2NvbF0uY29sb3JDb2RlPXR1cGxlVG9Db2xvcihyZ2JUb1dlYnNhZmUoaHN2VG9SR0IoXzJlKnJvdyxfMmYqY29sLHRoaXMudmFsdWUpKSk7Ci19ZWxzZXsKLXRoaXMuc2F2ZWRfY2VsbHNbcm93XVtjb2xdLmNvbG9yQ29kZT10dXBsZVRvQ29sb3IoaHN2VG9SR0IoXzJlKnJvdyxfMmYqY29sLHRoaXMudmFsdWUpKTsKLX0KLXRoaXMuc2F2ZWRfY2VsbHNbcm93XVtjb2xdLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLnNhdmVkX2NlbGxzW3Jvd11bY29sXS5jb2xvckNvZGU7Ci10aGlzLnNhdmVkX2NlbGxzW3Jvd11bY29sXS5zdHlsZS5ib3JkZXJDb2xvcj10aGlzLnNhdmVkX2NlbGxzW3Jvd11bY29sXS5jb2xvckNvZGU7Ci19Ci19Ci12YXIgXzQzPXRoaXMuc2F2ZWRfY2VsbHNbXzVdW182XTsKLXRoaXMuY2hvc2VuQ29sb3IudmFsdWU9XzQzLmNvbG9yQ29kZTsKLXRoaXMuYmFja1NhbXBsZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9XzQzLmNvbG9yQ29kZTsKLXRoaXMuZm9yZVNhbXBsZS5zdHlsZS5jb2xvcj1fNDMuY29sb3JDb2RlOwotaWYoKF80My5odWU+PTE5NSYmXzQzLnNhdHVyYXRpb24+MC41KXx8KF80My5odWU9PT0wJiZfNDMuc2F0dXJhdGlvbj09PTAmJl80My52YWx1ZTwwLjUpfHwoXzQzLmh1ZSE9PTAmJl8yZC52YWx1ZTwwLjc1KSl7Ci1fNDMuc3R5bGUuYm9yZGVyQ29sb3I9IiNmZmYiOwotfWVsc2V7Ci1fNDMuc3R5bGUuYm9yZGVyQ29sb3I9IiMwMDAiOwotfQotfQotfTsKLXRoaXMuY2xvc2U9ZnVuY3Rpb24oKXsKLVhpbmhhLl9yZW1vdmVFdmVudChkb2N1bWVudC5ib2R5LCJtb3VzZWRvd24iLGNsb3NlT25Cb2R5Q2xpY2spOwotdGhpcy50YWJsZS5zdHlsZS5kaXNwbGF5PSJub25lIjsKLWlmKHRoaXMuaXNfaWVfNil7Ci1pZih0aGlzLmlmcmFtZSl7Ci10aGlzLmlmcmFtZS5zdHlsZS5kaXNwbGF5PSJub25lIjsKLX0KLX0KLX07Ci19OwotWGluaGEuY29sb3JQaWNrZXIuc2F2ZWRDb2xvcnM9W107Ci1YaW5oYS5jb2xvclBpY2tlci5yZW1lbWJlcj1mdW5jdGlvbihfNDQsXzQ1KXsKLWZvcih2YXIgaT1YaW5oYS5jb2xvclBpY2tlci5zYXZlZENvbG9ycy5sZW5ndGg7aS0tOyl7Ci1pZihYaW5oYS5jb2xvclBpY2tlci5zYXZlZENvbG9yc1tpXT09XzQ0KXsKLXJldHVybiBmYWxzZTsKLX0KLX0KLVhpbmhhLmNvbG9yUGlja2VyLnNhdmVkQ29sb3JzLnNwbGljZSgwLDAsXzQ0KTsKLVhpbmhhLmNvbG9yUGlja2VyLnNhdmVkQ29sb3JzPVhpbmhhLmNvbG9yUGlja2VyLnNhdmVkQ29sb3JzLnNsaWNlKDAsXzQ1KTsKLXZhciBfNDc9bmV3IERhdGUoKTsKLV80Ny5zZXRNb250aChfNDcuZ2V0TW9udGgoKSsxKTsKLWRvY3VtZW50LmNvb2tpZT0iWGluaGFDb2xvclBpY2tlcj0iK2VzY2FwZShYaW5oYS5jb2xvclBpY2tlci5zYXZlZENvbG9ycy5qb2luKCItIikpKyI7ZXhwaXJlcz0iK180Ny50b0dNVFN0cmluZygpOwotcmV0dXJuIHRydWU7Ci19OwotWGluaGEuY29sb3JQaWNrZXIubG9hZENvbG9ycz1mdW5jdGlvbigpewotdmFyIF80OD1kb2N1bWVudC5jb29raWUuaW5kZXhPZigiWGluaGFDb2xvclBpY2tlciIpOwotaWYoXzQ4IT0tMSl7Ci12YXIgXzQ5PShkb2N1bWVudC5jb29raWUuaW5kZXhPZigiPSIsXzQ4KSsxKTsKLXZhciBlbmQ9ZG9jdW1lbnQuY29va2llLmluZGV4T2YoIjsiLF80OCk7Ci1pZihlbmQ9PS0xKXsKLWVuZD1kb2N1bWVudC5jb29raWUubGVuZ3RoOwotfQotWGluaGEuY29sb3JQaWNrZXIuc2F2ZWRDb2xvcnM9dW5lc2NhcGUoZG9jdW1lbnQuY29va2llLnN1YnN0cmluZyhfNDksZW5kKSkuc3BsaXQoIi0iKTsKLX0KLX07Ci1YaW5oYS5jb2xvclBpY2tlci5JbnB1dEJpbmRpbmc9ZnVuY3Rpb24oXzRiLF80Yyl7Ci12YXIgZG9jPV80Yi5vd25lckRvY3VtZW50OwotdmFyIF80ZT1kb2MuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotXzRlLmNsYXNzTmFtZT0iYnV0dG9uQ29sb3IiOwotdmFyIF80Zj10aGlzLmNob29zZXI9ZG9jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLV80Zi5jbGFzc05hbWU9ImNob29zZXIiOwotaWYoXzRiLnZhbHVlKXsKLV80Zi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9XzRiLnZhbHVlOwotfQotXzRmLm9ubW91c2VvdmVyPWZ1bmN0aW9uKCl7Ci1fNGYuY2xhc3NOYW1lPSJjaG9vc2VyIGJ1dHRvbkNvbG9yLWhpbGl0ZSI7Ci19OwotXzRmLm9ubW91c2VvdXQ9ZnVuY3Rpb24oKXsKLV80Zi5jbGFzc05hbWU9ImNob29zZXIiOwotfTsKLV80Zi5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIsKgIikpOwotXzRlLmFwcGVuZENoaWxkKF80Zik7Ci12YXIgXzUwPWRvYy5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci1fNTAuY2xhc3NOYW1lPSJub2NvbG9yIjsKLV81MC5vbm1vdXNlb3Zlcj1mdW5jdGlvbigpewotXzUwLmNsYXNzTmFtZT0ibm9jb2xvciBidXR0b25Db2xvci1oaWxpdGUiOwotXzUwLnN0eWxlLmNvbG9yPSIjZjAwIjsKLX07Ci1fNTAub25tb3VzZW91dD1mdW5jdGlvbigpewotXzUwLmNsYXNzTmFtZT0ibm9jb2xvciI7Ci1fNTAuc3R5bGUuY29sb3I9IiMwMDAiOwotfTsKLV81MC5vbmNsaWNrPWZ1bmN0aW9uKCl7Ci1fNGIudmFsdWU9IiI7Ci1fNGYuc3R5bGUuYmFja2dyb3VuZENvbG9yPSIiOwotfTsKLV81MC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIsOXIikpOwotXzRlLmFwcGVuZENoaWxkKF81MCk7Ci1fNGIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoXzRlLF80Yi5uZXh0U2libGluZyk7Ci1YaW5oYS5fYWRkRXZlbnQoXzRiLCJjaGFuZ2UiLGZ1bmN0aW9uKCl7Ci1fNGYuc3R5bGUuYmFja2dyb3VuZENvbG9yPXRoaXMudmFsdWU7Ci19KTsKLV80Yz0oXzRjKT9YaW5oYS5jbG9uZU9iamVjdChfNGMpOntjZWxsc2l6ZToiNXB4In07Ci1fNGMuY2FsbGJhY2s9KF80Yy5jYWxsYmFjayk/XzRjLmNhbGxiYWNrOmZ1bmN0aW9uKF81MSl7Ci1fNGYuc3R5bGUuYmFja2dyb3VuZENvbG9yPV81MTsKLV80Yi52YWx1ZT1fNTE7Ci19OwotXzRmLm9uY2xpY2s9ZnVuY3Rpb24oKXsKLXZhciBfNTI9bmV3IFhpbmhhLmNvbG9yUGlja2VyKF80Yyk7Ci1fNTIub3BlbigiIixfNGYsXzRiLnZhbHVlKTsKLX07Ci1YaW5oYS5mcmVlTGF0ZXIodGhpcywiY2hvb3NlciIpOwotfTsKLVhpbmhhLmNvbG9yUGlja2VyLklucHV0QmluZGluZy5wcm90b3R5cGUuc2V0Q29sb3I9ZnVuY3Rpb24oXzUzKXsKLXRoaXMuY2hvb3Nlci5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9XzUzOwotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9wdF9ici5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvcHRfYnIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMWVhN2UuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9wdF9ici5qcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLe+7vy8vIEkxOE4gY29uc3RhbnRzCi0vLwotLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04Ci0vLyBQb3J0dWd1ZXNlIEJyYXppbGlhbiBUcmFuc2xhdGlvbgotLy8KLS8vIEF1dGhvcjogTWFyY2lvIEJhcmJvc2EsIDxtYXJjaW9AbXBnLmNvbS5icj4KLS8vIE1TTjogdG9tYXJzaGFsbEBtc24uY29tIC0gSUNROiA2OTQxOTkzMwotLy8gU2l0ZTogaHR0cDovL3d3dy5tcGcuY29tLmJyCi0vLwotLy8gTGFzdCByZXZpc2lvbjogMDYgc2VwdGVtYmVyIDIwMDcKLS8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KLS8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KLS8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KLXsKLSAgIkNsaWNrIGEgY29sb3IuLi4iOiAiU2VsZWNpb25lIHVtYSBjw7RyLi4uIiwKLSAgIkNsb3NlIjogIkZlY2hhciIsCi0gICJDb2xvcjogIjogIkPDtHI6IiwKLSAgIlNhbXBsZSI6ICJFeGVtcGxvIiwKLSAgIldlYiBTYWZlOiAiOiAiV2ViIFNlZ3VyYToiCi19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvcHRfYnIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3NWNkMDIuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL3B0X2JyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAot77u/Ly8gSTE4TiBjb25zdGFudHMKLS8vCi0vLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKLS8vIFBvcnR1Z3Vlc2UgQnJhemlsaWFuIFRyYW5zbGF0aW9uCi0vLwotLy8gQXV0aG9yOiBNYXJjaW8gQmFyYm9zYSwgPG1hcmNpb0BtcGcuY29tLmJyPgotLy8gTVNOOiB0b21hcnNoYWxsQG1zbi5jb20gLSBJQ1E6IDY5NDE5OTMzCi0vLyBTaXRlOiBodHRwOi8vd3d3Lm1wZy5jb20uYnIKLS8vCi0vLyBMYXN0IHJldmlzaW9uOiAwNiBzZXB0ZW1iZXIgMjAwNwotLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgotLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCi0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgotLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgotewotICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIlZvY8OqIHByZWNpc2Egc2VsZWNpb25hciB1bSB0ZXh0byBhbnRlcyBkZSBjcmlhciB1bSBsaW5rIgotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQ3JlYXRlTGluay9saW5rLmh0bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xpbmsuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRhZDQwMC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xpbmsuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi08aHRtbD4KLQotPGhlYWQ+Ci0gIDx0aXRsZT5JbnNlcnQvTW9kaWZ5IExpbms8L3RpdGxlPgotICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9wb3B1cHMvcG9wdXAuanMiPjwvc2NyaXB0PgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi8uLi9wb3B1cHMvcG9wdXAuY3NzIiAvPgotCi0gIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgICB3aW5kb3cucmVzaXplVG8oNDAwLCAyMDApOwotCi1YaW5oYSA9IHdpbmRvdy5vcGVuZXIuWGluaGE7Ci0KLWZ1bmN0aW9uIGkxOG4oc3RyKSB7Ci0gIHJldHVybiAoWGluaGEuX2xjKHN0ciwgJ1hpbmhhJykpOwotfQotCi1mdW5jdGlvbiBvblRhcmdldENoYW5nZWQoKSB7Ci0gIHZhciBmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfb3RoZXJfdGFyZ2V0Iik7Ci0gIGlmICh0aGlzLnZhbHVlID09ICJfb3RoZXIiKSB7Ci0gICAgZi5zdHlsZS52aXNpYmlsaXR5ID0gInZpc2libGUiOwotICAgIGYuc2VsZWN0KCk7Ci0gICAgZi5mb2N1cygpOwotICB9IGVsc2UgZi5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7Ci19Ci0KLWZ1bmN0aW9uIEluaXQoKSB7Ci0gIF9fZGxnX3RyYW5zbGF0ZSgnWGluaGEnKTsKLSAgX19kbGdfaW5pdCgpOwotCi0gIC8vIE1ha2Ugc3VyZSB0aGUgdHJhbnNsYXRlZCBzdHJpbmcgYXBwZWFycyBpbiB0aGUgZHJvcCBkb3duLiAoZm9yIGdlY2tvKQotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl90YXJnZXQiKS5zZWxlY3RlZEluZGV4ID0gMTsKLSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfdGFyZ2V0Iikuc2VsZWN0ZWRJbmRleCA9IDA7Ci0KLSAgdmFyIHBhcmFtID0gd2luZG93LmRpYWxvZ0FyZ3VtZW50czsKLSAgdmFyIHRhcmdldF9zZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl90YXJnZXQiKTsKLSAgdmFyIHVzZV90YXJnZXQgPSB0cnVlOwotICBpZiAocGFyYW0pIHsKLSAgICBpZiAoIHR5cGVvZiBwYXJhbVsiZl91c2V0YXJnZXQiXSAhPSAidW5kZWZpbmVkIiApIHsKLSAgICAgIHVzZV90YXJnZXQgPSBwYXJhbVsiZl91c2V0YXJnZXQiXTsKLSAgICB9Ci0gICAgaWYgKCB0eXBlb2YgcGFyYW1bImZfaHJlZiJdICE9ICJ1bmRlZmluZWQiICkgewotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfaHJlZiIpLnZhbHVlID0gcGFyYW1bImZfaHJlZiJdOwotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfdGl0bGUiKS52YWx1ZSA9IHBhcmFtWyJmX3RpdGxlIl07Ci0gICAgICBjb21ib1NlbGVjdFZhbHVlKHRhcmdldF9zZWxlY3QsIHBhcmFtWyJmX3RhcmdldCJdKTsKLSAgICAgIGlmICh0YXJnZXRfc2VsZWN0LnZhbHVlICE9IHBhcmFtLmZfdGFyZ2V0KSB7Ci0gICAgICAgIHZhciBvcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTsKLSAgICAgICAgb3B0LnZhbHVlID0gcGFyYW0uZl90YXJnZXQ7Ci0gICAgICAgIG9wdC5pbm5lckhUTUwgPSBvcHQudmFsdWU7Ci0gICAgICAgIHRhcmdldF9zZWxlY3QuYXBwZW5kQ2hpbGQob3B0KTsKLSAgICAgICAgb3B0LnNlbGVjdGVkID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgaWYgKCEgdXNlX3RhcmdldCkgewotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3RhcmdldF9sYWJlbCIpLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl90YXJnZXQiKS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfb3RoZXJfdGFyZ2V0Iikuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwotICB9Ci0gIHZhciBvcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTsKLSAgb3B0LnZhbHVlID0gIl9vdGhlciI7Ci0gIG9wdC5pbm5lckhUTUwgPSBpMThuKCJPdGhlciIpOwotICB0YXJnZXRfc2VsZWN0LmFwcGVuZENoaWxkKG9wdCk7Ci0gIHRhcmdldF9zZWxlY3Qub25jaGFuZ2UgPSBvblRhcmdldENoYW5nZWQ7Ci0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2hyZWYiKS5mb2N1cygpOwotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9ocmVmIikuc2VsZWN0KCk7Ci19Ci0KLWZ1bmN0aW9uIG9uT0soKSB7Ci0gIHZhciByZXF1aXJlZCA9IHsKLSAgICAvLyBmX2hyZWYgc2hvdWxkbid0IGJlIHJlcXVpcmVkIG9yIG90aGVyd2lzZSByZW1vdmluZyB0aGUgbGluayBieSBlbnRlcmluZyBhbiBlbXB0eQotICAgIC8vIHVybCBpc24ndCBwb3NzaWJsZSBhbnltb3JlLgotICAgIC8vICJmX2hyZWYiOiBpMThuKCJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iKQotICB9OwotICBmb3IgKHZhciBpIGluIHJlcXVpcmVkKSB7Ci0gICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaSk7Ci0gICAgaWYgKCFlbC52YWx1ZSkgewotICAgICAgYWxlcnQocmVxdWlyZWRbaV0pOwotICAgICAgZWwuZm9jdXMoKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLSAgLy8gcGFzcyBkYXRhIGJhY2sgdG8gdGhlIGNhbGxpbmcgd2luZG93Ci0gIHZhciBmaWVsZHMgPSBbImZfaHJlZiIsICJmX3RpdGxlIiwgImZfdGFyZ2V0IiBdOwotICB2YXIgcGFyYW0gPSBuZXcgT2JqZWN0KCk7Ci0gIGZvciAodmFyIGkgaW4gZmllbGRzKSB7Ci0gICAgdmFyIGlkID0gZmllbGRzW2ldOwotICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKLSAgICBwYXJhbVtpZF0gPSBlbC52YWx1ZTsKLSAgfQotICBpZiAocGFyYW0uZl90YXJnZXQgPT0gIl9vdGhlciIpCi0gICAgcGFyYW0uZl90YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9vdGhlcl90YXJnZXQiKS52YWx1ZTsKLSAgX19kbGdfY2xvc2UocGFyYW0pOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWZ1bmN0aW9uIG9uQ2FuY2VsKCkgewotICBfX2RsZ19jbG9zZShudWxsKTsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi08L3NjcmlwdD4KLQotPC9oZWFkPgotCi08Ym9keSBjbGFzcz0iZGlhbG9nIiBvbmxvYWQ9IkluaXQoKSI+Ci08ZGl2IGNsYXNzPSJ0aXRsZSI+SW5zZXJ0L01vZGlmeSBMaW5rPC9kaXY+Ci08Zm9ybT4KLTx0YWJsZSBib3JkZXI9IjAiIHN0eWxlPSJ3aWR0aDogMTAwJTsiPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbCI+VVJMOjwvdGQ+Ci0gICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZl9ocmVmIiBzdHlsZT0id2lkdGg6IDEwMCUiIC8+PC90ZD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0ibGFiZWwiPlRpdGxlICh0b29sdGlwKTo8L3RkPgotICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImZfdGl0bGUiIHN0eWxlPSJ3aWR0aDogMTAwJSIgLz48L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbCI+PHNwYW4gaWQ9ImZfdGFyZ2V0X2xhYmVsIj5UYXJnZXQ6PC9zcGFuPjwvdGQ+Ci0gICAgPHRkPjxzZWxlY3QgaWQ9ImZfdGFyZ2V0Ij4KLSAgICAgIDxvcHRpb24gdmFsdWU9IiI+Tm9uZSAodXNlIGltcGxpY2l0KTwvb3B0aW9uPgotICAgICAgPG9wdGlvbiB2YWx1ZT0iX2JsYW5rIj5OZXcgd2luZG93IChfYmxhbmspPC9vcHRpb24+Ci0gICAgICA8b3B0aW9uIHZhbHVlPSJfc2VsZiI+U2FtZSBmcmFtZSAoX3NlbGYpPC9vcHRpb24+Ci0gICAgICA8b3B0aW9uIHZhbHVlPSJfdG9wIj5Ub3AgZnJhbWUgKF90b3ApPC9vcHRpb24+Ci0gICAgPC9zZWxlY3Q+Ci0gICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZfb3RoZXJfdGFyZ2V0IiBpZD0iZl9vdGhlcl90YXJnZXQiIHNpemU9IjEwIiBzdHlsZT0idmlzaWJpbGl0eTogaGlkZGVuIiAvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08ZGl2IGlkPSJidXR0b25zIj4KLSAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9Im9rIiBvbmNsaWNrPSJyZXR1cm4gb25PSygpOyI+T0s8L2J1dHRvbj4KLSAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG5hbWU9ImNhbmNlbCIgb25jbGljaz0icmV0dXJuIG9uQ2FuY2VsKCk7Ij5DYW5jZWw8L2J1dHRvbj4KLTwvZGl2PgotPC9mb3JtPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGluay5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGluay5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJkMzM0Zi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xpbmsuanMKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvbW9kdWxlcy9DcmVhdGVMaW5rL2xpbmsuanMgKi8KLWZ1bmN0aW9uIENyZWF0ZUxpbmsoXzEpewotdGhpcy5lZGl0b3I9XzE7Ci12YXIgXzI9XzEuY29uZmlnOwotdmFyIF8zPXRoaXM7Ci1fMS5jb25maWcuYnRuTGlzdC5jcmVhdGVsaW5rWzNdPWZ1bmN0aW9uKCl7Ci1fMy5zaG93KF8zLl9nZXRTZWxlY3RlZEFuY2hvcigpKTsKLX07Ci19OwotQ3JlYXRlTGluay5fcGx1Z2luSW5mbz17bmFtZToiQ3JlYXRlTGluayIsb3JpZ2luOiJYaW5oYSBDb3JlIix2ZXJzaW9uOiIkTGFzdENoYW5nZWRSZXZpc2lvbjogMTA4NCAkIi5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sIiQxIiksZGV2ZWxvcGVyOiJUaGUgWGluaGEgQ29yZSBEZXZlbG9wZXIgVGVhbSIsZGV2ZWxvcGVyX3VybDoiJEhlYWRVUkw6IGh0dHA6Ly9zdm4ueGluaGEub3JnL3RhZ3MvMC45Ni4xL21vZHVsZXMvQ3JlYXRlTGluay9saW5rLmpzICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywiJDEiKSxzcG9uc29yOiIiLHNwb25zb3JfdXJsOiIiLGxpY2Vuc2U6Imh0bWxBcmVhIn07Ci1DcmVhdGVMaW5rLnByb3RvdHlwZS5fbGM9ZnVuY3Rpb24oXzQpewotcmV0dXJuIFhpbmhhLl9sYyhfNCwiWGluaGEiKTsKLX07Ci1DcmVhdGVMaW5rLnByb3RvdHlwZS5vbkdlbmVyYXRlT25jZT1mdW5jdGlvbigpewotQ3JlYXRlTGluay5sb2FkQXNzZXRzKCk7Ci19OwotQ3JlYXRlTGluay5sb2FkQXNzZXRzPWZ1bmN0aW9uKCl7Ci12YXIgXzU9Q3JlYXRlTGluazsKLWlmKF81LmxvYWRpbmcpewotcmV0dXJuOwotfQotXzUubG9hZGluZz10cnVlOwotWGluaGEuX2dldGJhY2soX2VkaXRvcl91cmwrIm1vZHVsZXMvQ3JlYXRlTGluay9kaWFsb2cuaHRtbCIsZnVuY3Rpb24oXzYpewotXzUuaHRtbD1fNjsKLV81LmRpYWxvZ1JlYWR5PXRydWU7Ci19KTsKLVhpbmhhLl9nZXRiYWNrKF9lZGl0b3JfdXJsKyJtb2R1bGVzL0NyZWF0ZUxpbmsvcGx1Z2luTWV0aG9kcy5qcyIsZnVuY3Rpb24oXzcpewotZXZhbChfNyk7Ci1fNS5tZXRob2RzUmVhZHk9dHJ1ZTsKLX0pOwotfTsKLUNyZWF0ZUxpbmsucHJvdG90eXBlLm9uVXBkYXRlVG9vbGJhcj1mdW5jdGlvbigpewotaWYoIShDcmVhdGVMaW5rLmRpYWxvZ1JlYWR5JiZDcmVhdGVMaW5rLm1ldGhvZHNSZWFkeSkpewotdGhpcy5lZGl0b3IuX3Rvb2xiYXJPYmplY3RzLmNyZWF0ZWxpbmsuc3RhdGUoImVuYWJsZWQiLGZhbHNlKTsKLX1lbHNlewotdGhpcy5vblVwZGF0ZVRvb2xiYXI9bnVsbDsKLX0KLX07Ci1DcmVhdGVMaW5rLnByb3RvdHlwZS5wcmVwYXJlRGlhbG9nPWZ1bmN0aW9uKCl7Ci12YXIgXzg9dGhpczsKLXZhciBfOT10aGlzLmVkaXRvcjsKLXZhciBfYT10aGlzLmRpYWxvZz1uZXcgWGluaGEuRGlhbG9nKF85LENyZWF0ZUxpbmsuaHRtbCwiWGluaGEiLHt3aWR0aDo0MDB9KTsKLV9hLmdldEVsZW1lbnRCeUlkKCJvayIpLm9uY2xpY2s9ZnVuY3Rpb24oKXsKLV84LmFwcGx5KCk7Ci19OwotX2EuZ2V0RWxlbWVudEJ5SWQoImNhbmNlbCIpLm9uY2xpY2s9ZnVuY3Rpb24oKXsKLV84LmRpYWxvZy5oaWRlKCk7Ci19OwotaWYoIV85LmNvbmZpZy5tYWtlTGlua1Nob3dzVGFyZ2V0KXsKLV9hLmdldEVsZW1lbnRCeUlkKCJmX3RhcmdldF9sYWJlbCIpLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7Ci1fYS5nZXRFbGVtZW50QnlJZCgiZl90YXJnZXQiKS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iOwotX2EuZ2V0RWxlbWVudEJ5SWQoImZfb3RoZXJfdGFyZ2V0Iikuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIjsKLX0KLV9hLmdldEVsZW1lbnRCeUlkKCJmX3RhcmdldCIpLm9uY2hhbmdlPWZ1bmN0aW9uKCl7Ci12YXIgZj1fYS5nZXRFbGVtZW50QnlJZCgiZl9vdGhlcl90YXJnZXQiKTsKLWlmKHRoaXMudmFsdWU9PSJfb3RoZXIiKXsKLWYuc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSI7Ci1mLnNlbGVjdCgpOwotZi5mb2N1cygpOwotfWVsc2V7Ci1mLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7Ci19Ci19OwotdGhpcy5kaWFsb2dSZWFkeT10cnVlOwotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQ3JlYXRlTGluay9wbHVnaW5NZXRob2RzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQ3JlYXRlTGluay9wbHVnaW5NZXRob2RzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzAzYjZkLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvcGx1Z2luTWV0aG9kcy5qcworKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvbW9kdWxlcy9DcmVhdGVMaW5rL3BsdWdpbk1ldGhvZHMuanMgKi8KLUNyZWF0ZUxpbmsucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oYSl7Ci1pZighdGhpcy5kaWFsb2cpewotdGhpcy5wcmVwYXJlRGlhbG9nKCk7Ci19Ci12YXIgXzI9dGhpcy5lZGl0b3I7Ci10aGlzLmE9YTsKLWlmKCFhJiZ0aGlzLmVkaXRvci5zZWxlY3Rpb25FbXB0eSh0aGlzLmVkaXRvci5nZXRTZWxlY3Rpb24oKSkpewotYWxlcnQodGhpcy5fbGMoIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayIpKTsKLXJldHVybiBmYWxzZTsKLX0KLXZhciBfMz17Zl9ocmVmOiIiLGZfdGl0bGU6IiIsZl90YXJnZXQ6IiIsZl9vdGhlcl90YXJnZXQ6IiJ9OwotaWYoYSYmYS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJhIil7Ci1fMy5mX2hyZWY9dGhpcy5lZGl0b3IuZml4UmVsYXRpdmVMaW5rcyhhLmdldEF0dHJpYnV0ZSgiaHJlZiIpKTsKLV8zLmZfdGl0bGU9YS50aXRsZTsKLWlmKGEudGFyZ2V0KXsKLWlmKCEvX3NlbGZ8X3RvcHxfYmxhbmsvLnRlc3QoYS50YXJnZXQpKXsKLV8zLmZfdGFyZ2V0PSJfb3RoZXIiOwotXzMuZl9vdGhlcl90YXJnZXQ9YS50YXJnZXQ7Ci19ZWxzZXsKLV8zLmZfdGFyZ2V0PWEudGFyZ2V0OwotXzMuZl9vdGhlcl90YXJnZXQ9IiI7Ci19Ci19Ci19Ci10aGlzLmRpYWxvZy5zaG93KF8zKTsKLX07Ci1DcmVhdGVMaW5rLnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbigpewotdmFyIF80PXRoaXMuZGlhbG9nLmhpZGUoKTsKLXZhciBhPXRoaXMuYTsKLXZhciBfNj10aGlzLmVkaXRvcjsKLXZhciBfNz17aHJlZjoiIix0YXJnZXQ6IiIsdGl0bGU6IiJ9OwotaWYoXzQuZl9ocmVmKXsKLV83LmhyZWY9XzQuZl9ocmVmOwotXzcudGl0bGU9XzQuZl90aXRsZTsKLWlmKF80LmZfdGFyZ2V0LnZhbHVlKXsKLWlmKF80LmZfdGFyZ2V0LnZhbHVlPT0ib3RoZXIiKXsKLV83LnRhcmdldD1fNC5mX290aGVyX3RhcmdldDsKLX1lbHNlewotXzcudGFyZ2V0PV80LmZfdGFyZ2V0LnZhbHVlOwotfQotfQotfQotaWYoXzQuZl90YXJnZXQudmFsdWUpewotaWYoXzQuZl90YXJnZXQudmFsdWUhPSJfb3RoZXIiKXsKLV83LnRhcmdldD1fNC5mX3RhcmdldC52YWx1ZTsKLX1lbHNlewotXzcudGFyZ2V0PV80LmZfb3RoZXJfdGFyZ2V0OwotfQotfQotaWYoYSYmYS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJhIil7Ci1pZighXzcuaHJlZil7Ci1pZihjb25maXJtKHRoaXMuX2xjKCJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iKSkpewotdmFyIHA9YS5wYXJlbnROb2RlOwotd2hpbGUoYS5oYXNDaGlsZE5vZGVzKCkpewotcC5pbnNlcnRCZWZvcmUoYS5yZW1vdmVDaGlsZChhLmNoaWxkTm9kZXNbMF0pLGEpOwotfQotcC5yZW1vdmVDaGlsZChhKTsKLV82LnVwZGF0ZVRvb2xiYXIoKTsKLXJldHVybjsKLX0KLX1lbHNlewotZm9yKHZhciBpIGluIF83KXsKLWEuc2V0QXR0cmlidXRlKGksXzdbaV0pOwotfQotaWYoWGluaGEuaXNfaWUpewotaWYoL21haWx0bzooW14/PD5dKikoXD9bXjxdKik/JC9pLnRlc3QoYS5pbm5lckhUTUwpKXsKLWEuaW5uZXJIVE1MPVJlZ0V4cC4kMTsKLX0KLX0KLX0KLX1lbHNlewotaWYoIV83LmhyZWYpewotcmV0dXJuIHRydWU7Ci19Ci12YXIgX2E9WGluaGEudW5pcSgiaHR0cDovL3d3dy5leGFtcGxlLmNvbS9MaW5rIik7Ci1fNi5fZG9jLmV4ZWNDb21tYW5kKCJjcmVhdGVsaW5rIixmYWxzZSxfYSk7Ci12YXIgX2I9XzYuX2RvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpOwotZm9yKHZhciBpPTA7aTxfYi5sZW5ndGg7aSsrKXsKLXZhciBfYz1fYltpXTsKLWlmKF9jLmhyZWY9PV9hKXsKLWlmKCFhKXsKLWE9X2M7Ci19Ci1mb3IodmFyIGogaW4gXzcpewotX2Muc2V0QXR0cmlidXRlKGosXzdbal0pOwotfQotfQotfQotfQotXzYuc2VsZWN0Tm9kZUNvbnRlbnRzKGEpOwotXzYudXBkYXRlVG9vbGJhcigpOwotfTsKLUNyZWF0ZUxpbmsucHJvdG90eXBlLl9nZXRTZWxlY3RlZEFuY2hvcj1mdW5jdGlvbigpewotdmFyIF9lPXRoaXMuZWRpdG9yLmdldFNlbGVjdGlvbigpOwotdmFyIF9mPXRoaXMuZWRpdG9yLmNyZWF0ZVJhbmdlKF9lKTsKLXZhciBhPXRoaXMuZWRpdG9yLmFjdGl2ZUVsZW1lbnQoX2UpOwotaWYoYSE9bnVsbCYmYS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJhIil7Ci1yZXR1cm4gYTsKLX1lbHNlewotYT10aGlzLmVkaXRvci5fZ2V0Rmlyc3RBbmNlc3RvcihfZSwiYSIpOwotaWYoYSE9bnVsbCl7Ci1yZXR1cm4gYTsKLX0KLX0KLXJldHVybiBudWxsOwotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRGlhbG9ncy9EZXRhY2hlZERpYWxvZy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0RpYWxvZ3MvRGV0YWNoZWREaWFsb2cuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzNGMzYTguLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRGlhbG9ncy9EZXRhY2hlZERpYWxvZy5qcworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qIFRoaXMgY29tcHJlc3NlZCBmaWxlIGlzIHBhcnQgb2YgWGluaGEuIEZvciB1bmNvbXByZXNzZWQgc291cmNlcywgZm9ydW0sIGFuZCBidWcgcmVwb3J0cywgZ28gdG8geGluaGEub3JnICovCi0vKiBUaGUgVVJMIG9mIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBpcyBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL0RpYWxvZ3MvRGV0YWNoZWREaWFsb2cuanMgKi8KLVhpbmhhLkRldGFjaGVkRGlhbG9nPWZ1bmN0aW9uKF8xLF8yLF8zLF80KXsKLXZhciBfNT17ImNvbmZpZyI6bmV3IFhpbmhhLkNvbmZpZygpLCJzY3JvbGxQb3MiOlhpbmhhLnByb3RvdHlwZS5zY3JvbGxQb3MsIl9zb21lRWRpdG9ySGFzQmVlbkFjdGl2YXRlZCI6ZmFsc2UsInNhdmVTZWxlY3Rpb24iOmZ1bmN0aW9uKCl7Ci19LCJkZWFjdGl2YXRlRWRpdG9yIjpmdW5jdGlvbigpewotfSwiX3RleHRBcmVhIjpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpLCJfaWZyYW1lIjpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwiX2RvYyI6ZG9jdW1lbnQsImhpZGVQYW5lbHMiOmZ1bmN0aW9uKCl7Ci19LCJzaG93UGFuZWxzIjpmdW5jdGlvbigpewotfSwiX2lzRnVsbFNjcmVlbiI6ZmFsc2UsImFjdGl2YXRlRWRpdG9yIjpmdW5jdGlvbigpewotfSwicmVzdG9yZVNlbGVjdGlvbiI6ZnVuY3Rpb24oKXsKLX0sInVwZGF0ZVRvb2xiYXIiOmZ1bmN0aW9uKCl7Ci19LCJmb2N1c0VkaXRvciI6ZnVuY3Rpb24oKXsKLX19OwotWGluaGEuRGlhbG9nLmluaXRpYWxaPTEwMDsKLXRoaXMuYXR0YWNoZWQ9ZmFsc2U7Ci1YaW5oYS5EZXRhY2hlZERpYWxvZy5wYXJlbnRDb25zdHJ1Y3Rvci5jYWxsKHRoaXMsXzUsXzEsXzIsXzMsXzQpOwotfTsKLVhpbmhhLmV4dGVuZChYaW5oYS5EZXRhY2hlZERpYWxvZyxYaW5oYS5EaWFsb2cpOwotWGluaGEuRGV0YWNoZWREaWFsb2cucHJvdG90eXBlLmF0dGFjaFRvUGFuZWw9ZnVuY3Rpb24oKXsKLXJldHVybiBmYWxzZTsKLX07Ci1YaW5oYS5EZXRhY2hlZERpYWxvZy5wcm90b3R5cGUuZGV0YWNoRnJvbVRvUGFuZWw9ZnVuY3Rpb24oKXsKLXJldHVybiBmYWxzZTsKLX07Ci0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0RpYWxvZ3MvWGluaGFEaWFsb2cuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9EaWFsb2dzL1hpbmhhRGlhbG9nLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODdmMmM2Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0RpYWxvZ3MvWGluaGFEaWFsb2cuanMKKysrIC9kZXYvbnVsbApAQCAtMSw5MTYgKzAsMCBAQAotLyogVGhpcyBjb21wcmVzc2VkIGZpbGUgaXMgcGFydCBvZiBYaW5oYS4gRm9yIHVuY29tcHJlc3NlZCBzb3VyY2VzLCBmb3J1bSwgYW5kIGJ1ZyByZXBvcnRzLCBnbyB0byB4aW5oYS5vcmcgKi8KLS8qIFRoZSBVUkwgb2YgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGlzIGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvRGlhbG9ncy9YaW5oYURpYWxvZy5qcyAqLwotWGluaGEuRGlhbG9nPWZ1bmN0aW9uKF8xLF8yLF8zLF80LF81KXsKLXZhciBfNj10aGlzOwotdGhpcy5pZD17fTsKLXRoaXMucl9pZD17fTsKLXRoaXMuZWRpdG9yPV8xOwotdGhpcy5kb2N1bWVudD1kb2N1bWVudDsKLXRoaXMuc2l6ZT1fNDsKLXRoaXMubW9kYWw9KF81JiZfNS5tb2RhbD09PWZhbHNlKT9mYWxzZTp0cnVlOwotdGhpcy5jbG9zYWJsZT0oXzUmJl81LmNsb3NhYmxlPT09ZmFsc2UpP2ZhbHNlOnRydWU7Ci10aGlzLnJlc2l6YWJsZT0oXzUmJl81LnJlc2l6YWJsZT09PWZhbHNlKT9mYWxzZTp0cnVlOwotdGhpcy5sYXllcj0oXzUmJl81LmxheWVyKT9fNS5sYXllcjowOwotdGhpcy5jZW50ZXJlZD0oXzUmJl81LmNlbnRlcmVkPT09dHJ1ZSk/dHJ1ZTpmYWxzZTsKLXRoaXMuY2xvc2VPbkVzY2FwZT0oXzUmJl81LmNsb3NlT25Fc2NhcGU9PT10cnVlKT90cnVlOmZhbHNlOwotdGhpcy5yb290RWxlbT1udWxsOwotdGhpcy5jYXB0aW9uQmFyPW51bGw7Ci10aGlzLm1haW49bnVsbDsKLXRoaXMuYmFja2dyb3VuZD1udWxsOwotdGhpcy5jZW50ZXJlZD1udWxsOwotdGhpcy5ncmV5b3V0PW51bGw7Ci10aGlzLmJ1dHRvbnM9bnVsbDsKLXRoaXMuY2xvc2VyPW51bGw7Ci10aGlzLmljb249bnVsbDsKLXRoaXMucmVzaXplcj1udWxsOwotdGhpcy5pbml0aWFsWj1udWxsOwotdmFyIF83PV8xLmNvbmZpZy5kaWFsb2dPcHRpb25zOwotaWYoXzcpewotaWYodHlwZW9mIF83LmNlbnRlcmVkIT0idW5kZWZpbmVkIil7Ci10aGlzLmNlbnRlcmVkPV83LmNlbnRlcmVkOwotfQotaWYodHlwZW9mIF83LnJlc2l6YWJsZSE9InVuZGVmaW5lZCIpewotdGhpcy5yZXNpemFibGU9XzcucmVzaXphYmxlOwotfQotaWYodHlwZW9mIF83LmNsb3NhYmxlIT0idW5kZWZpbmVkIil7Ci10aGlzLmNsb3NhYmxlPV83LmNsb3NhYmxlOwotfQotaWYodHlwZW9mIF83LmdyZXlvdXQhPSJ1bmRlZmluZWQiKXsKLXRoaXMuZ3JleW91dD1fNy5ncmV5b3V0OwotfQotaWYodHlwZW9mIF83LmNsb3NlT25Fc2NhcGUhPSJ1bmRlZmluZWQiKXsKLXRoaXMuY2xvc2VPbkVzY2FwZT1fNy5jbG9zZU9uRXNjYXBlOwotfQotfQotdmFyIF84OwotaWYoWGluaGEuaXNfaWUpewotXzg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Ci1fOC5zcmM9ImFib3V0OmJsYW5rIjsKLV84Lm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpewotdmFyIF85PXdpbmRvdy5ldmVudC5zcmNFbGVtZW50LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7Ci1pZih0aGlzLnJlYWR5U3RhdGU9PSJjb21wbGV0ZSImJl85JiZfOS5ib2R5KXsKLXZhciBfYT1fOS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLXZhciBfYixfYz1kb2N1bWVudC5zdHlsZVNoZWV0czsKLWZvcih2YXIgaT0wO2k8X2MubGVuZ3RoO2krKyl7Ci1pZihfY1tpXS5pZC5pbmRleE9mKCJYaW5oYSIpIT0tMSYmX2NbaV0uY3NzVGV4dCl7Ci1fYis9X2NbaV0uY3NzVGV4dDsKLX0KLX0KLV9hLmlubmVySFRNTD0iPGJyPjxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj5cbiIrX2IrIlxuPC9zdHlsZT4iOwotXzkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5hcHBlbmRDaGlsZChfYSk7Ci1fOS5ib2R5LmNsYXNzTmFtZT0ieGluaGFfZGlhbG9nX2JhY2tncm91bmQiOwotaWYoXzYubW9kYWwpewotXzkuYm9keS5jbGFzc05hbWUrPSJfbW9kYWwiOwotfQotaWYoXzYuZ3JleW91dCl7Ci1fOS5ib2R5LmNsYXNzTmFtZSs9Il9ncmV5b3V0IjsKLX0KLX0KLX07Ci19ZWxzZXsKLV84PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotfQotXzguY2xhc3NOYW1lPSJ4aW5oYV9kaWFsb2dfYmFja2dyb3VuZCI7Ci1pZih0aGlzLm1vZGFsKXsKLV84LmNsYXNzTmFtZSs9Il9tb2RhbCI7Ci19Ci1pZih0aGlzLmdyZXlvdXQpewotXzguY2xhc3NOYW1lKz0iX2dyZXlvdXQiOwotfQotdmFyIHo9MTAwMDsKLWlmKCFYaW5oYS5EaWFsb2cuaW5pdGlhbFopewotdmFyIHA9XzEuX2h0bWxBcmVhOwotd2hpbGUocCl7Ci1pZihwLnN0eWxlJiZwYXJzZUludChwLnN0eWxlLnpJbmRleCwxMCk+eil7Ci16PXBhcnNlSW50KHAuc3R5bGUuekluZGV4LDEwKTsKLX0KLXA9cC5wYXJlbnROb2RlOwotfQotWGluaGEuRGlhbG9nLmluaXRpYWxaPXo7Ci19Ci16PVhpbmhhLkRpYWxvZy5pbml0aWFsWjsKLXZhciBzPV84LnN0eWxlOwotcy5wb3NpdGlvbj0iYWJzb2x1dGUiOwotcy50b3A9MDsKLXMubGVmdD0wOwotcy5ib3JkZXI9Im5vbmUiOwotcy5vdmVyZmxvdz0iaGlkZGVuIjsKLXMuZGlzcGxheT0ibm9uZSI7Ci1zLnpJbmRleD0odGhpcy5tb2RhbD96KzI1OnorMSkrdGhpcy5sYXllcjsKLWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoXzgpOwotdGhpcy5iYWNrZ3JvdW5kPV84OwotXzg9bnVsbDsKLVhpbmhhLmZyZWVMYXRlcih0aGlzLCJiYWNrZ3JvdW5kIik7Ci12YXIgXzExPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotXzExLnN0eWxlLnBvc2l0aW9uPShYaW5oYS5pc19pZXx8IXRoaXMubW9kYWwpPyJhYnNvbHV0ZSI6ImZpeGVkIjsKLV8xMS5zdHlsZS56SW5kZXg9KHRoaXMubW9kYWw/eisyNzp6KzMpK3RoaXMubGF5ZXI7Ci1fMTEuc3R5bGUuZGlzcGxheT0ibm9uZSI7Ci1pZighdGhpcy5tb2RhbCl7Ci1YaW5oYS5fYWRkRXZlbnQoXzExLCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7Ci1YaW5oYS5EaWFsb2cuYWN0aXZhdGVNb2RlbGVzcyhfNik7Ci19KTsKLX0KLV8xMS5jbGFzc05hbWU9ImRpYWxvZyIrKHRoaXMubW9kYWw/IiI6IiBtb2RlbGVzcyIpOwotaWYoWGluaGEuaXNfY2hyb21lKXsKLV8xMS5jbGFzc05hbWUrPSIgY2hyb21lIjsKLX0KLWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoXzExKTsKLV8xMS5zdHlsZS5wYWRkaW5nQm90dG9tPSIxMHB4IjsKLV8xMS5zdHlsZS53aWR0aD0oXzQmJl80LndpZHRoKT9fNC53aWR0aCsicHgiOiIiOwotaWYoXzQmJl80LmhlaWdodCl7Ci1pZihYaW5oYS5pZV92ZXJzaW9uPDcpewotXzExLnN0eWxlLmhlaWdodD1fNC5oZWlnaHQrInB4IjsKLX1lbHNlewotXzExLnN0eWxlLm1pbkhlaWdodD1fNC5oZWlnaHQrInB4IjsKLX0KLX0KLV8yPXRoaXMudHJhbnNsYXRlSHRtbChfMixfMyk7Ci12YXIgXzEyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotXzExLmFwcGVuZENoaWxkKF8xMik7Ci1fMTIuaW5uZXJIVE1MPV8yOwotdGhpcy5maXh1cERPTShfMTIsXzMpOwotdmFyIF8xMz1fMTIucmVtb3ZlQ2hpbGQoXzEyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoMSIpWzBdKTsKLV8xMS5pbnNlcnRCZWZvcmUoXzEzLF8xMik7Ci1YaW5oYS5fYWRkRXZlbnQoXzEzLCJtb3VzZWRvd24iLGZ1bmN0aW9uKGV2KXsKLV82LmRyYWdTdGFydChldik7Ci19KTsKLV8xMy5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIjsKLV8xMy5zdHlsZS5XZWJraXRVc2VyU2VsZWN0PSJub25lIjsKLV8xMy51bnNlbGVjdGFibGU9Im9uIjsKLV8xMy5vbnNlbGVjdHN0YXJ0PWZ1bmN0aW9uKCl7Ci1yZXR1cm4gZmFsc2U7Ci19OwotdGhpcy5idXR0b25zPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotcz10aGlzLmJ1dHRvbnMuc3R5bGU7Ci1zLnBvc2l0aW9uPSJhYnNvbHV0ZSI7Ci1zLnRvcD0iMCI7Ci1zLnJpZ2h0PSIycHgiOwotXzExLmFwcGVuZENoaWxkKHRoaXMuYnV0dG9ucyk7Ci1pZih0aGlzLmNsb3NhYmxlJiZ0aGlzLmNsb3NlT25Fc2NhcGUpewotWGluaGEuX2FkZEV2ZW50KGRvY3VtZW50LCJrZXlwcmVzcyIsZnVuY3Rpb24oZXYpewotaWYoZXYua2V5Q29kZT09MjcpewotaWYoWGluaGEuRGlhbG9nLmFjdGl2ZU1vZGVsZXNzPT1fNnx8XzYubW9kYWwpewotXzYuaGlkZSgpOwotcmV0dXJuIHRydWU7Ci19Ci19Ci19KTsKLX0KLXRoaXMuY2xvc2VyPW51bGw7Ci1pZih0aGlzLmNsb3NhYmxlKXsKLXRoaXMuY2xvc2VyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotdGhpcy5jbG9zZXIuY2xhc3NOYW1lPSJjbG9zZUJ1dHRvbiI7Ci10aGlzLmNsb3Nlci5vbm1vdXNlZG93bj1mdW5jdGlvbihldil7Ci10aGlzLmNsYXNzTmFtZT0iY2xvc2VCdXR0b24gYnV0dG9uQ2xpY2siOwotWGluaGEuX3N0b3BFdmVudChYaW5oYS5nZXRFdmVudChldikpOwotcmV0dXJuIGZhbHNlOwotfTsKLXRoaXMuY2xvc2VyLm9ubW91c2VvdXQ9ZnVuY3Rpb24oZXYpewotdGhpcy5jbGFzc05hbWU9ImNsb3NlQnV0dG9uIjsKLVhpbmhhLl9zdG9wRXZlbnQoWGluaGEuZ2V0RXZlbnQoZXYpKTsKLXJldHVybiBmYWxzZTsKLX07Ci10aGlzLmNsb3Nlci5vbm1vdXNldXA9ZnVuY3Rpb24oKXsKLXRoaXMuY2xhc3NOYW1lPSJjbG9zZUJ1dHRvbiI7Ci1fNi5oaWRlKCk7Ci1yZXR1cm4gZmFsc2U7Ci19OwotdGhpcy5idXR0b25zLmFwcGVuZENoaWxkKHRoaXMuY2xvc2VyKTsKLXZhciBfMTg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotXzE4LmNsYXNzTmFtZT0iaW5uZXJYIjsKLV8xOC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiOwotXzE4LnN0eWxlLnRvcD0iLTNweCI7Ci1fMTguYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIsOXIikpOwotdGhpcy5jbG9zZXIuYXBwZW5kQ2hpbGQoXzE4KTsKLV8xOD1udWxsOwotfQotdGhpcy5pY29uPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpOwotdmFyIF8xOT10aGlzLmljb247Ci1fMTkuY2xhc3NOYW1lPSJpY29uIjsKLV8xOS5zcmM9XzEuY29uZmlnLmljb25MaXN0LmRpYWxvZ0NhcHRpb247Ci1fMTkuc3R5bGUucG9zaXRpb249ImFic29sdXRlIjsKLV8xOS5zdHlsZS50b3A9IjNweCI7Ci1fMTkuc3R5bGUubGVmdD0iMnB4IjsKLV8xOS5vbmRyYWc9ZnVuY3Rpb24oKXsKLXJldHVybiBmYWxzZTsKLX07Ci1fMTEuYXBwZW5kQ2hpbGQodGhpcy5pY29uKTsKLXZhciBhbGw9XzExLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Ci1mb3IodmFyIGk9MDtpPGFsbC5sZW5ndGg7aSsrKXsKLXZhciBlbD1hbGxbaV07Ci1pZihlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJ0ZXh0YXJlYSJ8fGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09ImlucHV0Iil7Ci19ZWxzZXsKLWVsLnVuc2VsZWN0YWJsZT0ib24iOwotfQotfQotdGhpcy5yZXNpemVyPW51bGw7Ci1pZih0aGlzLnJlc2l6YWJsZSl7Ci10aGlzLnJlc2l6ZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci10aGlzLnJlc2l6ZXIuY2xhc3NOYW1lPSJyZXNpemVIYW5kbGUiOwotcz10aGlzLnJlc2l6ZXIuc3R5bGU7Ci1zLnBvc2l0aW9uPSJhYnNvbHV0ZSI7Ci1zLmJvdHRvbT0iMHB4IjsKLXMucmlnaHQ9IjBweCI7Ci1zLk1velVzZXJTZWxlY3Q9Im5vbmUiOwotWGluaGEuX2FkZEV2ZW50KHRoaXMucmVzaXplciwibW91c2Vkb3duIixmdW5jdGlvbihldil7Ci1fNi5yZXNpemVTdGFydChldik7Ci19KTsKLV8xMS5hcHBlbmRDaGlsZCh0aGlzLnJlc2l6ZXIpOwotfQotdGhpcy5yb290RWxlbT1fMTE7Ci10aGlzLmNhcHRpb25CYXI9XzEzOwotdGhpcy5tYWluPV8xMjsKLV8xMz1udWxsOwotXzExPW51bGw7Ci1fMTI9bnVsbDsKLVhpbmhhLmZyZWVMYXRlcih0aGlzLCJyb290RWxlbSIpOwotWGluaGEuZnJlZUxhdGVyKHRoaXMsImNhcHRpb25CYXIiKTsKLVhpbmhhLmZyZWVMYXRlcih0aGlzLCJtYWluIik7Ci1YaW5oYS5mcmVlTGF0ZXIodGhpcywiYnV0dG9ucyIpOwotWGluaGEuZnJlZUxhdGVyKHRoaXMsImNsb3NlciIpOwotWGluaGEuZnJlZUxhdGVyKHRoaXMsImljb24iKTsKLVhpbmhhLmZyZWVMYXRlcih0aGlzLCJyZXNpemVyIik7Ci1YaW5oYS5mcmVlTGF0ZXIodGhpcywiZG9jdW1lbnQiKTsKLXRoaXMuc2l6ZT17fTsKLX07Ci1YaW5oYS5EaWFsb2cucHJvdG90eXBlLm9ucmVzaXplPWZ1bmN0aW9uKCl7Ci1yZXR1cm4gdHJ1ZTsKLX07Ci1YaW5oYS5EaWFsb2cucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oXzFlKXsKLXZhciBfMWY9dGhpcy5yb290RWxlbTsKLXZhciBfMjA9XzFmLnN0eWxlOwotdmFyIF8yMT10aGlzLm1vZGFsOwotdmFyIF8yMj10aGlzLmVkaXRvci5zY3JvbGxQb3MoKTsKLXRoaXMuc2Nyb2xsUG9zPV8yMjsKLXZhciBfMjM9dGhpczsKLWlmKHRoaXMuYXR0YWNoZWQpewotdGhpcy5lZGl0b3Iuc2hvd1BhbmVsKF8xZik7Ci19Ci1pZihYaW5oYS5fc29tZUVkaXRvckhhc0JlZW5BY3RpdmF0ZWQpewotdGhpcy5fbGFzdFJhbmdlPXRoaXMuZWRpdG9yLnNhdmVTZWxlY3Rpb24oKTsKLWlmKFhpbmhhLmlzX2llJiYhXzIxKXsKLV8yMy5zYXZlU2VsZWN0aW9uPWZ1bmN0aW9uKCl7Ci1fMjMuX2xhc3RSYW5nZT1fMjMuZWRpdG9yLnNhdmVTZWxlY3Rpb24oKTsKLX07Ci1YaW5oYS5fYWRkRXZlbnQodGhpcy5lZGl0b3IuX2RvYywibW91c2V1cCIsXzIzLnNhdmVTZWxlY3Rpb24pOwotfQotfQotaWYoXzIxKXsKLXRoaXMuZWRpdG9yLmRlYWN0aXZhdGVFZGl0b3IoKTsKLXRoaXMuZWRpdG9yLnN1c3BlbmRVcGRhdGVUb29sYmFyPXRydWU7Ci10aGlzLmVkaXRvci5jdXJyZW50TW9kYWw9XzIzOwotfQotaWYoWGluaGEuaXNfZmYyJiZfMjEpewotdGhpcy5fcmVzdG9yZVRvPVt0aGlzLmVkaXRvci5fdGV4dEFyZWEuc3R5bGUuZGlzcGxheSx0aGlzLmVkaXRvci5faWZyYW1lLnN0eWxlLnZpc2liaWxpdHksdGhpcy5lZGl0b3IuaGlkZVBhbmVscygpXTsKLXRoaXMuZWRpdG9yLl90ZXh0QXJlYS5zdHlsZS5kaXNwbGF5PSJub25lIjsKLXRoaXMuZWRpdG9yLl9pZnJhbWUuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIjsKLX0KLWlmKCF0aGlzLmF0dGFjaGVkKXsKLWlmKF8yMSl7Ci10aGlzLnNob3dCYWNrZ3JvdW5kKCk7Ci10aGlzLnBvc0JhY2tncm91bmQoe3RvcDowLGxlZnQ6MH0pOwotdGhpcy5yZXNpemVCYWNrZ3JvdW5kKFhpbmhhLkRpYWxvZy5jYWxjRnVsbEJnU2l6ZSgpKTsKLX1lbHNlewotdGhpcy5iYWNrZ3JvdW5kLnN0eWxlLmRpc3BsYXk9IiI7Ci19Ci1YaW5oYS5EaWFsb2cuZmFkZUluKHRoaXMucm9vdEVsZW0sMTAwLGZ1bmN0aW9uKCl7Ci1pZihfMjEpewotdmFyIF8yND1fMjMucm9vdEVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7Ci1mb3IodmFyIGk9MDtpPF8yNC5sZW5ndGg7aSsrKXsKLWlmKF8yNFtpXS50eXBlPT0idGV4dCIpewotdHJ5ewotXzI0W2ldLmZvY3VzKCk7Ci1icmVhazsKLX0KLWNhdGNoKGUpewotfQotfQotfQotfQotfSk7Ci12YXIgXzI2PV8xZi5vZmZzZXRIZWlnaHQ7Ci12YXIgXzI3PV8xZi5vZmZzZXRXaWR0aDsKLXZhciBfMjg9WGluaGEudmlld3BvcnRTaXplKCk7Ci12YXIgXzI5PV8yOC55OwotdmFyIF8yYT1fMjgueDsKLWlmKF8yNj5fMjkpewotXzIwLmhlaWdodD1fMjkrInB4IjsKLWlmKF8xZi5zY3JvbGxIZWlnaHQ+XzI2KXsKLV8yMy5tYWluLnN0eWxlLm92ZXJmbG93WT0iYXV0byI7Ci19Ci19Ci1pZih0aGlzLnNpemUudG9wJiZ0aGlzLnNpemUubGVmdCl7Ci1fMjAudG9wPXBhcnNlSW50KHRoaXMuc2l6ZS50b3AsMTApKyJweCI7Ci1fMjAubGVmdD1wYXJzZUludCh0aGlzLnNpemUubGVmdCwxMCkrInB4IjsKLX1lbHNlewotaWYodGhpcy5lZGl0b3IuYnRuQ2xpY2tFdmVudCYmIXRoaXMuY2VudGVyZWQpewotdmFyIF8yYj10aGlzLmVkaXRvci5idG5DbGlja0V2ZW50OwotaWYoXzIwLnBvc2l0aW9uPT0iYWJzb2x1dGUiKXsKLV8yMC50b3A9XzJiLmNsaWVudFkrdGhpcy5zY3JvbGxQb3MueSsicHgiOwotfWVsc2V7Ci1fMjAudG9wPV8yYi5jbGllbnRZKyJweCI7Ci19Ci1pZihfMjYrXzFmLm9mZnNldFRvcD5fMjkpewotXzIwLnRvcD0oXzIwLnBvc2l0aW9uPT0iYWJzb2x1dGUiP3RoaXMuc2Nyb2xsUG9zLnk6MCkrInB4IjsKLX0KLWlmKF8yMC5wb3NpdGlvbj09ImFic29sdXRlIil7Ci1fMjAubGVmdD1fMmIuY2xpZW50WCt0aGlzLnNjcm9sbFBvcy54KyJweCI7Ci19ZWxzZXsKLV8yMC5sZWZ0PV8yYi5jbGllbnRYKyJweCI7Ci19Ci1pZihfMjcrXzFmLm9mZnNldExlZnQ+XzJhKXsKLV8yMC5sZWZ0PV8yYi5jbGllbnRYLV8yNysicHgiOwotaWYoXzFmLm9mZnNldExlZnQ8MCl7Ci1fMjAubGVmdD0wOwotfQotfQotdGhpcy5lZGl0b3IuYnRuQ2xpY2tFdmVudD1udWxsOwotfWVsc2V7Ci12YXIgdG9wPShfMjktXzI2KS8yOwotdmFyIF8yZD0oXzJhLV8yNykvMjsKLV8yMC50b3A9KCh0b3A+MCk/dG9wOjApKyJweCI7Ci1fMjAubGVmdD0oKF8yZD4wKT9fMmQ6MCkrInB4IjsKLX0KLX0KLX0KLXRoaXMud2lkdGg9XzI3OwotdGhpcy5oZWlnaHQ9XzI2OwotaWYoIV8yMSl7Ci10aGlzLnJlc2l6ZUJhY2tncm91bmQoe3dpZHRoOl8yNysicHgiLGhlaWdodDpfMjYrInB4In0pOwotdGhpcy5wb3NCYWNrZ3JvdW5kKHt0b3A6XzIwLnRvcCxsZWZ0Ol8yMC5sZWZ0fSk7Ci19Ci1pZih0eXBlb2YgXzFlIT0idW5kZWZpbmVkIil7Ci10aGlzLnNldFZhbHVlcyhfMWUpOwotfQotdGhpcy5kaWFsb2dTaG93bj10cnVlOwotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpewotaWYodGhpcy5hdHRhY2hlZCl7Ci10aGlzLmVkaXRvci5oaWRlUGFuZWwodGhpcy5yb290RWxlbSk7Ci19ZWxzZXsKLVhpbmhhLkRpYWxvZy5mYWRlT3V0KHRoaXMucm9vdEVsZW0pOwotdGhpcy5oaWRlQmFja2dyb3VuZCgpOwotdmFyIF8yZT10aGlzOwotaWYoWGluaGEuaXNfZmYyJiZ0aGlzLm1vZGFsKXsKLXRoaXMuZWRpdG9yLl90ZXh0QXJlYS5zdHlsZS5kaXNwbGF5PXRoaXMuX3Jlc3RvcmVUb1swXTsKLXRoaXMuZWRpdG9yLl9pZnJhbWUuc3R5bGUudmlzaWJpbGl0eT10aGlzLl9yZXN0b3JlVG9bMV07Ci10aGlzLmVkaXRvci5zaG93UGFuZWxzKHRoaXMuX3Jlc3RvcmVUb1syXSk7Ci19Ci1pZighdGhpcy5lZGl0b3IuX2lzRnVsbFNjcmVlbiYmdGhpcy5tb2RhbCl7Ci13aW5kb3cuc2Nyb2xsKHRoaXMuc2Nyb2xsUG9zLngsdGhpcy5zY3JvbGxQb3MueSk7Ci19Ci1pZihYaW5oYS5pc19pZSYmIXRoaXMubW9kYWwpewotWGluaGEuX3JlbW92ZUV2ZW50KHRoaXMuZWRpdG9yLl9kb2MsIm1vdXNldXAiLF8yZS5zYXZlU2VsZWN0aW9uKTsKLX0KLWlmKHRoaXMubW9kYWwpewotdGhpcy5lZGl0b3Iuc3VzcGVuZFVwZGF0ZVRvb2xiYXI9ZmFsc2U7Ci10aGlzLmVkaXRvci5jdXJyZW50TW9kYWw9bnVsbDsKLXRoaXMuZWRpdG9yLmFjdGl2YXRlRWRpdG9yKCk7Ci19Ci19Ci1pZih0aGlzLm1vZGFsKXsKLXRoaXMuZWRpdG9yLnJlc3RvcmVTZWxlY3Rpb24odGhpcy5fbGFzdFJhbmdlKTsKLX0KLXRoaXMuZGlhbG9nU2hvd249ZmFsc2U7Ci10aGlzLmVkaXRvci51cGRhdGVUb29sYmFyKCk7Ci10aGlzLmVkaXRvci5mb2N1c0VkaXRvcigpOwotcmV0dXJuIHRoaXMuZ2V0VmFsdWVzKCk7Ci19OwotWGluaGEuRGlhbG9nLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXsKLWlmKHRoaXMucm9vdEVsZW0uc3R5bGUuZGlzcGxheT09Im5vbmUiKXsKLXRoaXMuc2hvdygpOwotfWVsc2V7Ci10aGlzLmhpZGUoKTsKLX0KLX07Ci1YaW5oYS5EaWFsb2cucHJvdG90eXBlLmNvbGxhcHNlPWZ1bmN0aW9uKCl7Ci1pZih0aGlzLmNvbGxhcHNlZCl7Ci10aGlzLmNvbGxhcHNlZD1mYWxzZTsKLXRoaXMuc2hvdygpOwotfWVsc2V7Ci10aGlzLm1haW4uc3R5bGUuaGVpZ2h0PTA7Ci10aGlzLmNvbGxhcHNlZD10cnVlOwotfQotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUuZ2V0RWxlbWVudEJ5SWQ9ZnVuY3Rpb24oaWQpewotaWYoIXRoaXMucm9vdEVsZW0ucGFyZW50Tm9kZSl7Ci10aGlzLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5yb290RWxlbSk7Ci19Ci1yZXR1cm4gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmlkW2lkXT90aGlzLmlkW2lkXTppZCk7Ci19OwotWGluaGEuRGlhbG9nLnByb3RvdHlwZS5nZXRFbGVtZW50c0J5TmFtZT1mdW5jdGlvbihfMzApewotaWYoIXRoaXMucm9vdEVsZW0ucGFyZW50Tm9kZSl7Ci10aGlzLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5yb290RWxlbSk7Ci19Ci12YXIgZWxzPXRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUodGhpcy5pZFtfMzBdP3RoaXMuaWRbXzMwXTpfMzApOwotcmV0dXJuIFhpbmhhLmNvbGxlY3Rpb25Ub0FycmF5KGVscyk7Ci19OwotWGluaGEuRGlhbG9nLnByb3RvdHlwZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPWZ1bmN0aW9uKF8zMil7Ci1yZXR1cm4gWGluaGEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0aGlzLnJvb3RFbGVtLF8zMik7Ci19OwotWGluaGEuRGlhbG9nLnByb3RvdHlwZS5kcmFnU3RhcnQ9ZnVuY3Rpb24oZXYpewotaWYodGhpcy5hdHRhY2hlZHx8dGhpcy5kcmFnZ2luZyl7Ci1yZXR1cm47Ci19Ci1pZighdGhpcy5tb2RhbCl7Ci10aGlzLnBvc0JhY2tncm91bmQoe3RvcDowLGxlZnQ6MH0pOwotdGhpcy5yZXNpemVCYWNrZ3JvdW5kKFhpbmhhLkRpYWxvZy5jYWxjRnVsbEJnU2l6ZSgpKTsKLXRoaXMuZWRpdG9yLnN1c3BlbmRVcGRhdGVUb29sYmFyPXRydWU7Ci19Ci1ldj1YaW5oYS5nZXRFdmVudChldik7Ci12YXIgXzM0PXRoaXM7Ci1fMzQuZHJhZ2dpbmc9dHJ1ZTsKLV8zNC5zY3JvbGxQb3M9XzM0LmVkaXRvci5zY3JvbGxQb3MoKTsKLXZhciBzdD1fMzQucm9vdEVsZW0uc3R5bGU7Ci1fMzQueE9mZnM9ZXYub2Zmc2V0WHx8ZXYubGF5ZXJYOwotXzM0LnlPZmZzPWV2Lm9mZnNldFl8fGV2LmxheWVyWTsKLV8zNC5tb3VzZU1vdmU9ZnVuY3Rpb24oZXYpewotXzM0LmRyYWdJdChldik7Ci19OwotWGluaGEuX2FkZEV2ZW50KGRvY3VtZW50LCJtb3VzZW1vdmUiLF8zNC5tb3VzZU1vdmUpOwotaWYoWGluaGEuaXNfaWUpewotWGluaGEuX2FkZEV2ZW50KHRoaXMuYmFja2dyb3VuZC5jb250ZW50V2luZG93LmRvY3VtZW50LCJtb3VzZW1vdmUiLF8zNC5tb3VzZU1vdmUpOwotfQotXzM0Lm1vdXNlVXA9ZnVuY3Rpb24oZXYpewotXzM0LmRyYWdFbmQoZXYpOwotfTsKLVhpbmhhLl9hZGRFdmVudChkb2N1bWVudCwibW91c2V1cCIsXzM0Lm1vdXNlVXApOwotaWYoWGluaGEuaXNfaWUpewotWGluaGEuX2FkZEV2ZW50KHRoaXMuYmFja2dyb3VuZC5jb250ZW50V2luZG93LmRvY3VtZW50LCJtb3VzZXVwIixfMzQubW91c2VVcCk7Ci19Ci19OwotWGluaGEuRGlhbG9nLnByb3RvdHlwZS5kcmFnSXQ9ZnVuY3Rpb24oZXYpewotdmFyIF8zOT10aGlzOwotaWYoIV8zOS5kcmFnZ2luZyl7Ci1yZXR1cm4gZmFsc2U7Ci19Ci12YXIgXzNhLF8zYixfM2M7Ci1pZihfMzkucm9vdEVsZW0uc3R5bGUucG9zaXRpb249PSJhYnNvbHV0ZSIpewotXzNhPShldi5jbGllbnRZK3RoaXMuc2Nyb2xsUG9zLnkpLV8zOS55T2ZmcysicHgiOwotXzNiPShldi5jbGllbnRYK3RoaXMuc2Nyb2xsUG9zLngpLV8zOS54T2ZmcysicHgiOwotXzNjPXt0b3A6XzNhLGxlZnQ6XzNifTsKLX1lbHNlewotaWYoXzM5LnJvb3RFbGVtLnN0eWxlLnBvc2l0aW9uPT0iZml4ZWQiKXsKLV8zYT1ldi5jbGllbnRZLV8zOS55T2ZmcysicHgiOwotXzNiPWV2LmNsaWVudFgtXzM5LnhPZmZzKyJweCI7Ci1fM2M9e3RvcDpfM2EsbGVmdDpfM2J9OwotfQotfQotXzM5LnBvc0RpYWxvZyhfM2MpOwotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUuZHJhZ0VuZD1mdW5jdGlvbihldil7Ci12YXIgXzNlPXRoaXM7Ci1pZighdGhpcy5tb2RhbCl7Ci10aGlzLmVkaXRvci5zdXNwZW5kVXBkYXRlVG9vbGJhcj1mYWxzZTsKLX0KLWlmKCFfM2UuZHJhZ2dpbmcpewotcmV0dXJuIGZhbHNlOwotfQotXzNlLmRyYWdnaW5nPWZhbHNlOwotWGluaGEuX3JlbW92ZUV2ZW50KGRvY3VtZW50LCJtb3VzZW1vdmUiLF8zZS5tb3VzZU1vdmUpOwotaWYoWGluaGEuaXNfaWUpewotWGluaGEuX3JlbW92ZUV2ZW50KHRoaXMuYmFja2dyb3VuZC5jb250ZW50V2luZG93LmRvY3VtZW50LCJtb3VzZW1vdmUiLF8zZS5tb3VzZU1vdmUpOwotfQotWGluaGEuX3JlbW92ZUV2ZW50KGRvY3VtZW50LCJtb3VzZXVwIixfM2UubW91c2VVcCk7Ci1pZihYaW5oYS5pc19pZSl7Ci1YaW5oYS5fcmVtb3ZlRXZlbnQodGhpcy5iYWNrZ3JvdW5kLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsIm1vdXNldXAiLF8zZS5tb3VzZVVwKTsKLX0KLXZhciBfM2Y9XzNlLnJvb3RFbGVtLnN0eWxlOwotXzNlLnNpemUudG9wPV8zZi50b3A7Ci1fM2Uuc2l6ZS5sZWZ0PV8zZi5sZWZ0OwotaWYoIXRoaXMubW9kYWwpewotdGhpcy5zaXplQmdUb0RpYWxvZygpOwotfQotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUucmVzaXplU3RhcnQ9ZnVuY3Rpb24oZXYpewotdmFyIF80MT10aGlzOwotaWYoXzQxLnJlc2l6aW5nKXsKLXJldHVybjsKLX0KLV80MS5yZXNpemluZz10cnVlOwotaWYoIXRoaXMubW9kYWwpewotdGhpcy5lZGl0b3Iuc3VzcGVuZFVwZGF0ZVRvb2xiYXI9dHJ1ZTsKLXRoaXMucG9zQmFja2dyb3VuZCh7dG9wOjAsbGVmdDowfSk7Ci10aGlzLnJlc2l6ZUJhY2tncm91bmQoWGluaGEuRGlhbG9nLmNhbGNGdWxsQmdTaXplKCkpOwotfQotXzQxLnNjcm9sbFBvcz1fNDEuZWRpdG9yLnNjcm9sbFBvcygpOwotdmFyIHN0PV80MS5yb290RWxlbS5zdHlsZTsKLXN0Lm1pbkhlaWdodD0iIjsKLXN0Lm92ZXJmbG93PSJoaWRkZW4iOwotXzQxLnhPZmZzPXBhcnNlSW50KHN0LmxlZnQsMTApOwotXzQxLnlPZmZzPXBhcnNlSW50KHN0LnRvcCwxMCk7Ci1fNDEubW91c2VNb3ZlPWZ1bmN0aW9uKGV2KXsKLV80MS5yZXNpemVJdChldik7Ci19OwotWGluaGEuX2FkZEV2ZW50KGRvY3VtZW50LCJtb3VzZW1vdmUiLF80MS5tb3VzZU1vdmUpOwotaWYoWGluaGEuaXNfaWUpewotWGluaGEuX2FkZEV2ZW50KHRoaXMuYmFja2dyb3VuZC5jb250ZW50V2luZG93LmRvY3VtZW50LCJtb3VzZW1vdmUiLF80MS5tb3VzZU1vdmUpOwotfQotXzQxLm1vdXNlVXA9ZnVuY3Rpb24oZXYpewotXzQxLnJlc2l6ZUVuZChldik7Ci19OwotWGluaGEuX2FkZEV2ZW50KGRvY3VtZW50LCJtb3VzZXVwIixfNDEubW91c2VVcCk7Ci1pZihYaW5oYS5pc19pZSl7Ci1YaW5oYS5fYWRkRXZlbnQodGhpcy5iYWNrZ3JvdW5kLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsIm1vdXNldXAiLF80MS5tb3VzZVVwKTsKLX0KLX07Ci1YaW5oYS5EaWFsb2cucHJvdG90eXBlLnJlc2l6ZUl0PWZ1bmN0aW9uKGV2KXsKLXZhciBfNDY9dGhpczsKLWlmKCFfNDYucmVzaXppbmcpewotcmV0dXJuIGZhbHNlOwotfQotdmFyIF80NyxfNDg7Ci1pZihfNDYucm9vdEVsZW0uc3R5bGUucG9zaXRpb249PSJhYnNvbHV0ZSIpewotXzQ3PWV2LmNsaWVudFkrXzQ2LnNjcm9sbFBvcy55OwotXzQ4PWV2LmNsaWVudFgrXzQ2LnNjcm9sbFBvcy54OwotfWVsc2V7Ci1fNDc9ZXYuY2xpZW50WTsKLV80OD1ldi5jbGllbnRYOwotfQotXzQ4LT1fNDYueE9mZnM7Ci1fNDctPV80Ni55T2ZmczsKLXZhciBfNDk9e307Ci1fNDkud2lkdGg9KChfNDg+MTApP180ODoxMCkrOCsicHgiOwotXzQ5LmhlaWdodD0oKF80Nz4xMCk/XzQ3OjEwKSsicHgiOwotXzQ2LnNpemVEaWFsb2coXzQ5KTsKLV80Ni53aWR0aD1fNDYucm9vdEVsZW0ub2Zmc2V0V2lkdGg7Ci1fNDYuaGVpZ2h0PV80Ni5yb290RWxlbS5vZmZzZXRIZWlnaHQ7Ci1fNDYub25yZXNpemUoKTsKLX07Ci1YaW5oYS5EaWFsb2cucHJvdG90eXBlLnJlc2l6ZUVuZD1mdW5jdGlvbihldil7Ci12YXIgXzRiPXRoaXM7Ci1fNGIucmVzaXppbmc9ZmFsc2U7Ci1pZighdGhpcy5tb2RhbCl7Ci10aGlzLmVkaXRvci5zdXNwZW5kVXBkYXRlVG9vbGJhcj1mYWxzZTsKLX0KLVhpbmhhLl9yZW1vdmVFdmVudChkb2N1bWVudCwibW91c2Vtb3ZlIixfNGIubW91c2VNb3ZlKTsKLWlmKFhpbmhhLmlzX2llKXsKLVhpbmhhLl9yZW1vdmVFdmVudCh0aGlzLmJhY2tncm91bmQuY29udGVudFdpbmRvdy5kb2N1bWVudCwibW91c2V1cCIsXzRiLm1vdXNlVXApOwotfQotWGluaGEuX3JlbW92ZUV2ZW50KGRvY3VtZW50LCJtb3VzZXVwIixfNGIubW91c2VVcCk7Ci1pZihYaW5oYS5pc19pZSl7Ci1YaW5oYS5fcmVtb3ZlRXZlbnQodGhpcy5iYWNrZ3JvdW5kLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsIm1vdXNldXAiLF80Yi5tb3VzZVVwKTsKLX0KLV80Yi5zaXplLndpZHRoPV80Yi5yb290RWxlbS5vZmZzZXRXaWR0aDsKLV80Yi5zaXplLmhlaWdodD1fNGIucm9vdEVsZW0ub2Zmc2V0SGVpZ2h0OwotaWYoIXRoaXMubW9kYWwpewotdGhpcy5zaXplQmdUb0RpYWxvZygpOwotfQotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUuYXR0YWNoVG9QYW5lbD1mdW5jdGlvbihfNGMpewotdmFyIF80ZD10aGlzOwotdmFyIF80ZT10aGlzLnJvb3RFbGVtOwotdmFyIF80Zj10aGlzLmVkaXRvcjsKLXRoaXMuYXR0YWNoZWQ9dHJ1ZTsKLXRoaXMucm9vdEVsZW0uc2lkZT1fNGM7Ci10aGlzLmNhcHRpb25CYXIub25kYmxjbGljaz1mdW5jdGlvbihldil7Ci1fNGQuZGV0YWNoRnJvbVBhbmVsKFhpbmhhLmdldEV2ZW50KGV2KSk7Ci19OwotXzRlLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiOwotXzRlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoXzRlKTsKLXRoaXMuYmFja2dyb3VuZC5zdHlsZS5kaXNwbGF5PSJub25lIjsKLXRoaXMuY2FwdGlvbkJhci5zdHlsZS5wYWRkaW5nTGVmdD0iM3B4IjsKLXRoaXMucmVzaXplci5zdHlsZS5kaXNwbGF5PSJub25lIjsKLWlmKHRoaXMuY2xvc2FibGUpewotdGhpcy5jbG9zZXIuc3R5bGUuZGlzcGxheT0ibm9uZSI7Ci19Ci10aGlzLmljb24uc3R5bGUuZGlzcGxheT0ibm9uZSI7Ci1pZihfNGM9PSJsZWZ0Inx8XzRjPT0icmlnaHQiKXsKLV80ZS5zdHlsZS53aWR0aD1fNGYuY29uZmlnLnBhbmVsX2RpbWVuc2lvbnNbXzRjXTsKLX1lbHNlewotXzRlLnN0eWxlLndpZHRoPSIiOwotfQotWGluaGEuYWRkQ2xhc3NlcyhfNGUsInBhbmVsIik7Ci1fNGYuX3BhbmVsc1tfNGNdLnBhbmVscy5wdXNoKF80ZSk7Ci1fNGYuX3BhbmVsc1tfNGNdLmRpdi5hcHBlbmRDaGlsZChfNGUpOwotXzRmLm5vdGlmeU9mKCJwYW5lbF9jaGFuZ2UiLHsiYWN0aW9uIjoiYWRkIiwicGFuZWwiOl80ZX0pOwotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUuZGV0YWNoRnJvbVBhbmVsPWZ1bmN0aW9uKCl7Ci12YXIgXzUxPXRoaXM7Ci12YXIgXzUyPV81MS5yb290RWxlbTsKLXZhciBfNTM9XzUyLnN0eWxlOwotdmFyIF81ND1fNTEuZWRpdG9yOwotXzUxLmF0dGFjaGVkPWZhbHNlOwotdmFyIHBvcz1YaW5oYS5nZXRFbGVtZW50VG9wTGVmdChfNTIpOwotXzUzLnBvc2l0aW9uPSJhYnNvbHV0ZSI7Ci1fNTMudG9wPXBvcy50b3ArInB4IjsKLV81My5sZWZ0PXBvcy5sZWZ0KyJweCI7Ci1fNTEucmVzaXplci5zdHlsZS5kaXNwbGF5PSIiOwotaWYoXzUxLmNsb3NhYmxlKXsKLV81MS5jbG9zZXIuc3R5bGUuZGlzcGxheT0iIjsKLX0KLV81MS5pY29uLnN0eWxlLmRpc3BsYXk9IiI7Ci1pZihfNTEuc2l6ZS53aWR0aCl7Ci1fNTIuc3R5bGUud2lkdGg9XzUxLnNpemUud2lkdGgrInB4IjsKLX0KLVhpbmhhLnJlbW92ZUNsYXNzZXMoXzUyLCJwYW5lbCIpOwotXzU0LnJlbW92ZVBhbmVsKF81Mik7Ci1kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKF81Mik7Ci1fNTEuY2FwdGlvbkJhci5vbmRibGNsaWNrPWZ1bmN0aW9uKCl7Ci1fNTEuYXR0YWNoVG9QYW5lbChfNTIuc2lkZSk7Ci19OwotdGhpcy5iYWNrZ3JvdW5kLnN0eWxlLmRpc3BsYXk9IiI7Ci10aGlzLnNpemVCZ1RvRGlhbG9nKCk7Ci19OwotWGluaGEuRGlhbG9nLmNhbGNGdWxsQmdTaXplPWZ1bmN0aW9uKCl7Ci12YXIgXzU2PVhpbmhhLnBhZ2VTaXplKCk7Ci12YXIgXzU3PVhpbmhhLnZpZXdwb3J0U2l6ZSgpOwotcmV0dXJuIHt3aWR0aDooXzU2Lng+XzU3Lng/XzU2Lng6XzU3LngpKyJweCIsaGVpZ2h0OihfNTYueD5fNTcueT9fNTYueTpfNTcueSkrInB4In07Ci19OwotWGluaGEuRGlhbG9nLnByb3RvdHlwZS5zaXplQmdUb0RpYWxvZz1mdW5jdGlvbigpewotdmFyIF81OD10aGlzLnJvb3RFbGVtLnN0eWxlOwotdmFyIF81OT10aGlzLmJhY2tncm91bmQuc3R5bGU7Ci1fNTkudG9wPV81OC50b3A7Ci1fNTkubGVmdD1fNTgubGVmdDsKLV81OS53aWR0aD1fNTgud2lkdGg7Ci1fNTkuaGVpZ2h0PV81OC5oZWlnaHQ7Ci19OwotWGluaGEuRGlhbG9nLnByb3RvdHlwZS5oaWRlQmFja2dyb3VuZD1mdW5jdGlvbigpewotWGluaGEuRGlhbG9nLmZhZGVPdXQodGhpcy5iYWNrZ3JvdW5kKTsKLX07Ci1YaW5oYS5EaWFsb2cucHJvdG90eXBlLnNob3dCYWNrZ3JvdW5kPWZ1bmN0aW9uKCl7Ci1YaW5oYS5EaWFsb2cuZmFkZUluKHRoaXMuYmFja2dyb3VuZCw3MCk7Ci19OwotWGluaGEuRGlhbG9nLnByb3RvdHlwZS5wb3NCYWNrZ3JvdW5kPWZ1bmN0aW9uKHBvcyl7Ci1pZih0aGlzLmJhY2tncm91bmQuc3R5bGUuZGlzcGxheSE9Im5vbmUiKXsKLXRoaXMuYmFja2dyb3VuZC5zdHlsZS50b3A9cG9zLnRvcDsKLXRoaXMuYmFja2dyb3VuZC5zdHlsZS5sZWZ0PXBvcy5sZWZ0OwotfQotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUucmVzaXplQmFja2dyb3VuZD1mdW5jdGlvbihfNWIpewotaWYodGhpcy5iYWNrZ3JvdW5kLnN0eWxlLmRpc3BsYXkhPSJub25lIil7Ci10aGlzLmJhY2tncm91bmQuc3R5bGUud2lkdGg9XzViLndpZHRoOwotdGhpcy5iYWNrZ3JvdW5kLnN0eWxlLmhlaWdodD1fNWIuaGVpZ2h0OwotfQotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUucG9zRGlhbG9nPWZ1bmN0aW9uKHBvcyl7Ci12YXIgc3Q9dGhpcy5yb290RWxlbS5zdHlsZTsKLXN0LmxlZnQ9cG9zLmxlZnQ7Ci1zdC50b3A9cG9zLnRvcDsKLX07Ci1YaW5oYS5EaWFsb2cucHJvdG90eXBlLnNpemVEaWFsb2c9ZnVuY3Rpb24oXzVlKXsKLXZhciBzdD10aGlzLnJvb3RFbGVtLnN0eWxlOwotc3QuaGVpZ2h0PV81ZS5oZWlnaHQ7Ci1zdC53aWR0aD1fNWUud2lkdGg7Ci12YXIgXzYwPXBhcnNlSW50KF81ZS53aWR0aCwxMCk7Ci12YXIgXzYxPXBhcnNlSW50KF81ZS5oZWlnaHQsMTApLXRoaXMuY2FwdGlvbkJhci5vZmZzZXRIZWlnaHQ7Ci10aGlzLm1haW4uc3R5bGUuaGVpZ2h0PShfNjE+MjApP182MToyMCsicHgiOwotdGhpcy5tYWluLnN0eWxlLndpZHRoPShfNjA+MTApP182MDoxMCsicHgiOwotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUuc2V0VmFsdWVzPWZ1bmN0aW9uKF82Mil7Ci1mb3IodmFyIGkgaW4gXzYyKXsKLWlmKHR5cGVvZiBpPT0ic3RyaW5nIil7Ci12YXIgXzY0PXRoaXMuZ2V0RWxlbWVudHNCeU5hbWUoaSk7Ci1pZighXzY0KXsKLWNvbnRpbnVlOwotfQotZm9yKHZhciB4PTA7eDxfNjQubGVuZ3RoO3grKyl7Ci12YXIgZT1fNjRbeF07Ci1zd2l0Y2goZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpewotY2FzZSAic2VsZWN0IjoKLWZvcih2YXIgaj0wO2o8ZS5vcHRpb25zLmxlbmd0aDtqKyspewotaWYodHlwZW9mIF82MltpXT09Im9iamVjdCIpewotZm9yKHZhciBrPTA7azxfNjJbaV0ubGVuZ3RoO2srKyl7Ci1pZihfNjJbaV1ba109PWUub3B0aW9uc1tqXS52YWx1ZSl7Ci1lLm9wdGlvbnNbal0uc2VsZWN0ZWQ9dHJ1ZTsKLX0KLX0KLX1lbHNlewotaWYoXzYyW2ldPT1lLm9wdGlvbnNbal0udmFsdWUpewotZS5vcHRpb25zW2pdLnNlbGVjdGVkPXRydWU7Ci19Ci19Ci19Ci1icmVhazsKLWNhc2UgInRleHRhcmVhIjoKLWNhc2UgImlucHV0IjoKLXN3aXRjaChlLmdldEF0dHJpYnV0ZSgidHlwZSIpKXsKLWNhc2UgInJhZGlvIjoKLWlmKGUudmFsdWU9PV82MltpXSl7Ci1lLmNoZWNrZWQ9dHJ1ZTsKLX0KLWJyZWFrOwotY2FzZSAiY2hlY2tib3giOgotaWYodHlwZW9mIF82MltpXT09Im9iamVjdCIpewotZm9yKGogaW4gXzYyW2ldKXsKLWlmKF82MltpXVtqXT09ZS52YWx1ZSl7Ci1lLmNoZWNrZWQ9dHJ1ZTsKLX0KLX0KLX1lbHNlewotaWYoXzYyW2ldPT1lLnZhbHVlKXsKLWUuY2hlY2tlZD10cnVlOwotfQotfQotYnJlYWs7Ci1kZWZhdWx0OgotZS52YWx1ZT1fNjJbaV07Ci1icmVhazsKLX0KLX0KLX0KLX0KLX0KLX07Ci1YaW5oYS5EaWFsb2cucHJvdG90eXBlLmdldFZhbHVlcz1mdW5jdGlvbigpewotdmFyIF82OT1bXTsKLXZhciBfNmE9WGluaGEuY29sbGVjdGlvblRvQXJyYXkodGhpcy5yb290RWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKSkuYXBwZW5kKFhpbmhhLmNvbGxlY3Rpb25Ub0FycmF5KHRoaXMucm9vdEVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRleHRhcmVhIikpKS5hcHBlbmQoWGluaGEuY29sbGVjdGlvblRvQXJyYXkodGhpcy5yb290RWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0IikpKTsKLWZvcih2YXIgeD0wO3g8XzZhLmxlbmd0aDt4KyspewotdmFyIGk9XzZhW3hdOwotaWYoIShpLm5hbWUmJnRoaXMucl9pZFtpLm5hbWVdKSl7Ci1jb250aW51ZTsKLX0KLWlmKHR5cGVvZiBfNjlbdGhpcy5yX2lkW2kubmFtZV1dPT0idW5kZWZpbmVkIil7Ci1fNjlbdGhpcy5yX2lkW2kubmFtZV1dPW51bGw7Ci19Ci12YXIgdj1fNjlbdGhpcy5yX2lkW2kubmFtZV1dOwotc3dpdGNoKGkudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXsKLWNhc2UgInNlbGVjdCI6Ci1pZihpLm11bHRpcGxlKXsKLWlmKCF2LnB1c2gpewotaWYodiE9PW51bGwpewotdj1bdl07Ci19ZWxzZXsKLXY9W107Ci19Ci19Ci1mb3IodmFyIGo9MDtqPGkub3B0aW9ucy5sZW5ndGg7aisrKXsKLWlmKGkub3B0aW9uc1tqXS5zZWxlY3RlZCl7Ci12LnB1c2goaS5vcHRpb25zW2pdLnZhbHVlKTsKLX0KLX0KLX1lbHNlewotaWYoaS5zZWxlY3RlZEluZGV4Pj0wKXsKLXY9aS5vcHRpb25zW2kuc2VsZWN0ZWRJbmRleF07Ci19Ci19Ci1icmVhazsKLWRlZmF1bHQ6Ci1zd2l0Y2goaS50eXBlLnRvTG93ZXJDYXNlKCkpewotY2FzZSAicmFkaW8iOgotaWYoaS5jaGVja2VkKXsKLXY9aS52YWx1ZTsKLX0KLWJyZWFrOwotY2FzZSAiY2hlY2tib3giOgotaWYodj09PW51bGwpewotaWYodGhpcy5nZXRFbGVtZW50c0J5TmFtZSh0aGlzLnJfaWRbaS5uYW1lXSkubGVuZ3RoPjEpewotdj1bXTsKLX0KLX0KLWlmKGkuY2hlY2tlZCl7Ci1pZih2IT09bnVsbCYmdHlwZW9mIHY9PSJvYmplY3QiJiZ2LnB1c2gpewotdi5wdXNoKGkudmFsdWUpOwotfWVsc2V7Ci12PWkudmFsdWU7Ci19Ci19Ci1icmVhazsKLWRlZmF1bHQ6Ci12PWkudmFsdWU7Ci1icmVhazsKLX0KLX0KLV82OVt0aGlzLnJfaWRbaS5uYW1lXV09djsKLX0KLXJldHVybiBfNjk7Ci19OwotWGluaGEuRGlhbG9nLnByb3RvdHlwZS5zZXRMb2NhbGl6ZXI9ZnVuY3Rpb24oXzZmKXsKLXZhciBfNzA9dGhpczsKLWlmKHR5cGVvZiBfNmY9PSJmdW5jdGlvbiIpewotXzcwLl9sYz1fNmY7Ci19ZWxzZXsKLWlmKF82Zil7Ci10aGlzLl9sYz1mdW5jdGlvbihfNzEpewotcmV0dXJuIFhpbmhhLl9sYyhfNzEsXzZmKTsKLX07Ci19ZWxzZXsKLXRoaXMuX2xjPWZ1bmN0aW9uKF83Mil7Ci1yZXR1cm4gXzcyOwotfTsKLX0KLX0KLX07Ci1YaW5oYS5EaWFsb2cucHJvdG90eXBlLnRyYW5zbGF0ZUh0bWw9ZnVuY3Rpb24oXzczLF83NCl7Ci12YXIgXzc1PXRoaXM7Ci1pZihfNzQpewotdGhpcy5zZXRMb2NhbGl6ZXIoXzc0KTsKLX0KLV83Mz1fNzMucmVwbGFjZSgvKCg/Om5hbWUpfCg/OmlkKSk9KFsnIl0pXFsoW2EtejAtOV9dKylcXVwyL2lnLGZ1bmN0aW9uKF83NixfNzcsXzc4LGlkKXsKLXJldHVybiBfNzcrIj0iK183OCtfNzUuY3JlYXRlSWQoaWQpK183ODsKLX0pLnJlcGxhY2UoLzxsMTBuPiguKj8pPFwvbDEwbj4vaWcsZnVuY3Rpb24oXzdhLF83Yil7Ci1yZXR1cm4gXzc1Ll9sYyhfN2IpOwotfSkucmVwbGFjZSgvXD0iX1woKC4qPylcKSIvZyxmdW5jdGlvbihfN2MsXzdkKXsKLXJldHVybiAiPVwiIitfNzUuX2xjKF83ZCkrIlwiIjsKLX0pOwotcmV0dXJuIF83MzsKLX07Ci1YaW5oYS5EaWFsb2cucHJvdG90eXBlLmZpeHVwRE9NPWZ1bmN0aW9uKF83ZSxfN2YpewotdmFyIF84MD10aGlzOwotaWYodHlwZW9mIF83ZiE9InN0cmluZyIpewotXzdmPSJHZW5lcmljUGx1Z2luIjsKLX0KLXZhciBfODE9ZnVuY3Rpb24oXzgyLF84Myl7Ci1zd2l0Y2goXzgzKXsKLWNhc2UgImVkaXRvciI6Ci1yZXR1cm4gX2VkaXRvcl91cmw7Ci1jYXNlICJwbHVnaW4iOgotcmV0dXJuIFhpbmhhLmdldFBsdWdpbkRpcihfN2YpOwotY2FzZSAiaW1hZ2VzIjoKLXJldHVybiBfODAuZWRpdG9yLmltZ1VSTCgiaW1hZ2VzIik7Ci19Ci19OwotdmFyIF84ND1YaW5oYS5jb2xsZWN0aW9uVG9BcnJheShfN2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImltZyIpKTsKLWZvcih2YXIgXzg1PTA7Xzg1PF84NC5sZW5ndGg7KytfODUpewotdmFyIF84Nj1fODRbXzg1XTsKLXZhciBfODc9Xzg2LmdldEF0dHJpYnV0ZSgic3JjIik7Ci1pZihfODcpewotdmFyIF84OD1fODcucmVwbGFjZSgvXlxbKGVkaXRvcnxwbHVnaW58aW1hZ2VzKVxdLyxfODEpOwotaWYoXzg4IT1fODcpewotXzg2LnNldEF0dHJpYnV0ZSgic3JjIixfODgpOwotfQotfQotfQotdmFyIF84OT1YaW5oYS5jb2xsZWN0aW9uVG9BcnJheShfN2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKSk7Ci1mb3IodmFyIF84NT0wO184NTxfODkubGVuZ3RoOysrXzg1KXsKLXZhciBfOGE9Xzg5W184NV07Ci12YXIgXzg3PV84YS5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKLWlmKF84Nyl7Ci12YXIgXzg4PV84Ny5yZXBsYWNlKC9eXFsoZWRpdG9yfHBsdWdpbnxpbWFnZXMpXF0vLF84MSk7Ci1pZihfODghPV84Nyl7Ci1fOGEuc2V0QXR0cmlidXRlKCJocmVmIixfODgpOwotfQotfQotfQotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUuY3JlYXRlSWQ9ZnVuY3Rpb24oaWQpewotdmFyIF84Yz10aGlzOwotaWYodHlwZW9mIF84Yy5pZFtpZF09PSJ1bmRlZmluZWQiKXsKLV84Yy5pZFtpZF09WGluaGEudW5pcSgiRGlhbG9nIik7Ci1fOGMucl9pZFtfOGMuaWRbaWRdXT1pZDsKLX0KLXJldHVybiBfOGMuaWRbaWRdOwotfTsKLVhpbmhhLkRpYWxvZy5hY3RpdmF0ZU1vZGVsZXNzPWZ1bmN0aW9uKF84ZCl7Ci1pZihYaW5oYS5EaWFsb2cuYWN0aXZlTW9kZWxlc3M9PV84ZHx8XzhkLmF0dGFjaGVkKXsKLXJldHVybjsKLX0KLWlmKFhpbmhhLkRpYWxvZy5hY3RpdmVNb2RlbGVzcyl7Ci1YaW5oYS5EaWFsb2cuYWN0aXZlTW9kZWxlc3Mucm9vdEVsZW0uc3R5bGUuekluZGV4PXBhcnNlSW50KFhpbmhhLkRpYWxvZy5hY3RpdmVNb2RlbGVzcy5yb290RWxlbS5zdHlsZS56SW5kZXgsMTApLTEwOwotfQotWGluaGEuRGlhbG9nLmFjdGl2ZU1vZGVsZXNzPV84ZDsKLVhpbmhhLkRpYWxvZy5hY3RpdmVNb2RlbGVzcy5yb290RWxlbS5zdHlsZS56SW5kZXg9cGFyc2VJbnQoWGluaGEuRGlhbG9nLmFjdGl2ZU1vZGVsZXNzLnJvb3RFbGVtLnN0eWxlLnpJbmRleCwxMCkrMTA7Ci19OwotWGluaGEuRGlhbG9nLnNldE9wYWNpdHk9ZnVuY3Rpb24oZWwsXzhmKXsKLWlmKHR5cGVvZiBlbC5zdHlsZS5maWx0ZXIhPSJ1bmRlZmluZWQiKXsKLWVsLnN0eWxlLmZpbHRlcj0oXzhmPDEwMCk/ImFscGhhKG9wYWNpdHk9IitfOGYrIikiOiIiOwotfWVsc2V7Ci1lbC5zdHlsZS5vcGFjaXR5PV84Zi8xMDA7Ci19Ci19OwotWGluaGEuRGlhbG9nLmZhZGVJbj1mdW5jdGlvbihlbCxfOTEsXzkyLF85MyxfOTQpewotXzkzPV85M3x8MTsKLV85ND1fOTR8fDI1OwotXzkxPV85MXx8MTAwOwotZWwub3A9ZWwub3B8fDA7Ci12YXIgb3A9ZWwub3A7Ci1pZihlbC5zdHlsZS5kaXNwbGF5PT0ibm9uZSIpewotWGluaGEuRGlhbG9nLnNldE9wYWNpdHkoZWwsMCk7Ci1lbC5zdHlsZS5kaXNwbGF5PSIiOwotfQotaWYob3A8XzkxKXsKLWVsLm9wKz1fOTQ7Ci1YaW5oYS5EaWFsb2cuc2V0T3BhY2l0eShlbCxvcCk7Ci1lbC50aW1lT3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXsKLVhpbmhhLkRpYWxvZy5mYWRlSW4oZWwsXzkxLF85MixfOTMsXzk0KTsKLX0sXzkzKTsKLX1lbHNlewotWGluaGEuRGlhbG9nLnNldE9wYWNpdHkoZWwsXzkxKTsKLWVsLm9wPV85MTsKLWVsLnRpbWVPdXQ9bnVsbDsKLWlmKHR5cGVvZiBfOTI9PSJmdW5jdGlvbiIpewotXzkyLmNhbGwoKTsKLX0KLX0KLX07Ci1YaW5oYS5EaWFsb2cuZmFkZU91dD1mdW5jdGlvbihlbCxfOTcsXzk4KXsKLV85Nz1fOTd8fDE7Ci1fOTg9Xzk4fHwzMDsKLWlmKHR5cGVvZiBlbC5vcD09InVuZGVmaW5lZCIpewotZWwub3A9MTAwOwotfQotdmFyIG9wPWVsLm9wOwotaWYob3A+PTApewotZWwub3AtPV85ODsKLVhpbmhhLkRpYWxvZy5zZXRPcGFjaXR5KGVsLG9wKTsKLWVsLnRpbWVPdXQ9c2V0VGltZW91dChmdW5jdGlvbigpewotWGluaGEuRGlhbG9nLmZhZGVPdXQoZWwsXzk3LF85OCk7Ci19LF85Nyk7Ci19ZWxzZXsKLVhpbmhhLkRpYWxvZy5zZXRPcGFjaXR5KGVsLDApOwotZWwuc3R5bGUuZGlzcGxheT0ibm9uZSI7Ci1lbC5vcD0wOwotZWwudGltZU91dD1udWxsOwotfQotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRGlhbG9ncy9kaWFsb2cuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9EaWFsb2dzL2RpYWxvZy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFmNGE0YS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9EaWFsb2dzL2RpYWxvZy5qcworKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qIFRoaXMgY29tcHJlc3NlZCBmaWxlIGlzIHBhcnQgb2YgWGluaGEuIEZvciB1bmNvbXByZXNzZWQgc291cmNlcywgZm9ydW0sIGFuZCBidWcgcmVwb3J0cywgZ28gdG8geGluaGEub3JnICovCi0vKiBUaGUgVVJMIG9mIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBpcyBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL0RpYWxvZ3MvZGlhbG9nLmpzICovCi1mdW5jdGlvbiBEaWFsb2coXzEsXzIsXzMpewotaWYodHlwZW9mIF8zPT0idW5kZWZpbmVkIil7Ci1fMz13aW5kb3c7Ci19Ci1pZih0eXBlb2Ygd2luZG93LnNob3dNb2RhbERpYWxvZz09ImZ1bmN0aW9uIiYmIVhpbmhhLmlzX3dlYmtpdCl7Ci1EaWFsb2cuX3JldHVybj1mdW5jdGlvbihfNCl7Ci1pZih0eXBlb2YgXzI9PSJmdW5jdGlvbiIpewotXzIoXzQpOwotfQotfTsKLXZhciByPXdpbmRvdy5zaG93TW9kYWxEaWFsb2coXzEsXzMsImRpYWxvZ2hlaWdodD0zMDA7ZGlhbG9nd2lkdGg9NDAwO3Jlc2l6YWJsZT15ZXMiKTsKLX1lbHNlewotRGlhbG9nLl9nZWNrb09wZW5Nb2RhbChfMSxfMixfMyk7Ci19Ci19OwotRGlhbG9nLl9wYXJlbnRFdmVudD1mdW5jdGlvbihldil7Ci1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ci1pZihEaWFsb2cuX21vZGFsJiYhRGlhbG9nLl9tb2RhbC5jbG9zZWQpewotRGlhbG9nLl9tb2RhbC5mb2N1cygpOwotfQotfSw1MCk7Ci10cnl7Ci1pZihEaWFsb2cuX21vZGFsJiYhRGlhbG9nLl9tb2RhbC5jbG9zZWQpewotWGluaGEuX3N0b3BFdmVudChldik7Ci19Ci19Ci1jYXRjaChlKXsKLX0KLX07Ci1EaWFsb2cuX3JldHVybj1udWxsOwotRGlhbG9nLl9tb2RhbD1udWxsOwotRGlhbG9nLl9hcmd1bWVudHM9bnVsbDsKLURpYWxvZy5fc2VsZWN0aW9uPW51bGw7Ci1EaWFsb2cuX2dlY2tvT3Blbk1vZGFsPWZ1bmN0aW9uKF83LF84LF85KXsKLXZhciBfYT13aW5kb3cub3BlbihfNywiaGFkaWFsb2ciLCJ0b29sYmFyPW5vLG1lbnViYXI9bm8scGVyc29uYWxiYXI9bm8sd2lkdGg9MTAsaGVpZ2h0PTEwLCIrInNjcm9sbGJhcnM9bm8scmVzaXphYmxlPXllcyxtb2RhbD15ZXMsZGVwZW5kYWJsZT15ZXMiKTsKLURpYWxvZy5fbW9kYWw9X2E7Ci1EaWFsb2cuX2FyZ3VtZW50cz1fOTsKLWZ1bmN0aW9uIGNhcHdpbih3KXsKLVhpbmhhLl9hZGRFdmVudCh3LCJjbGljayIsRGlhbG9nLl9wYXJlbnRFdmVudCk7Ci1YaW5oYS5fYWRkRXZlbnQodywibW91c2Vkb3duIixEaWFsb2cuX3BhcmVudEV2ZW50KTsKLVhpbmhhLl9hZGRFdmVudCh3LCJmb2N1cyIsRGlhbG9nLl9wYXJlbnRFdmVudCk7Ci19OwotZnVuY3Rpb24gcmVsd2luKHcpewotWGluaGEuX3JlbW92ZUV2ZW50KHcsImNsaWNrIixEaWFsb2cuX3BhcmVudEV2ZW50KTsKLVhpbmhhLl9yZW1vdmVFdmVudCh3LCJtb3VzZWRvd24iLERpYWxvZy5fcGFyZW50RXZlbnQpOwotWGluaGEuX3JlbW92ZUV2ZW50KHcsImZvY3VzIixEaWFsb2cuX3BhcmVudEV2ZW50KTsKLX07Ci1jYXB3aW4od2luZG93KTsKLWZvcih2YXIgaT0wO2k8d2luZG93LmZyYW1lcy5sZW5ndGg7aSsrKXsKLXRyeXsKLWNhcHdpbih3aW5kb3cuZnJhbWVzW2ldKTsKLX0KLWNhdGNoKGUpewotfQotfQotRGlhbG9nLl9yZXR1cm49ZnVuY3Rpb24oX2UpewotaWYoX2UmJl84KXsKLV84KF9lKTsKLX0KLXJlbHdpbih3aW5kb3cpOwotZm9yKHZhciBpPTA7aTx3aW5kb3cuZnJhbWVzLmxlbmd0aDtpKyspewotdHJ5ewotcmVsd2luKHdpbmRvdy5mcmFtZXNbaV0pOwotfQotY2F0Y2goZSl7Ci19Ci19Ci1EaWFsb2cuX21vZGFsPW51bGw7Ci19OwotRGlhbG9nLl9tb2RhbC5mb2N1cygpOwotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRGlhbG9ncy9kaXYtZGlhbG9nLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRGlhbG9ncy9kaXYtZGlhbG9nLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDU2ODM0Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0RpYWxvZ3MvZGl2LWRpYWxvZy5qcworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qIFRoaXMgY29tcHJlc3NlZCBmaWxlIGlzIHBhcnQgb2YgWGluaGEuIEZvciB1bmNvbXByZXNzZWQgc291cmNlcywgZm9ydW0sIGFuZCBidWcgcmVwb3J0cywgZ28gdG8geGluaGEub3JnICovCi0vKiBUaGUgVVJMIG9mIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBpcyBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL0RpYWxvZ3MvZGl2LWRpYWxvZy5qcyAqLwotWGluaGEuRGl2RGlhbG9nPWZ1bmN0aW9uKF8xLF8yLF8zKXsKLXRoaXMuaWQ9e307Ci10aGlzLnJfaWQ9e307Ci10aGlzLmRvY3VtZW50PWRvY3VtZW50OwotdGhpcy5yb290RWxlbT1fMTsKLXRoaXMucm9vdEVsZW0uY2xhc3NOYW1lKz0iIGRpYWxvZyI7Ci10aGlzLnJvb3RFbGVtLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwotdGhpcy53aWR0aD10aGlzLnJvb3RFbGVtLm9mZnNldFdpZHRoKyJweCI7Ci10aGlzLmhlaWdodD10aGlzLnJvb3RFbGVtLm9mZnNldEhlaWdodCsicHgiOwotdGhpcy5zZXRMb2NhbGl6ZXIoXzMpOwotdGhpcy5yb290RWxlbS5pbm5lckhUTUw9dGhpcy50cmFuc2xhdGVIdG1sKF8yKTsKLX07Ci1YaW5oYS5leHRlbmQoWGluaGEuRGl2RGlhbG9nLFhpbmhhLkRpYWxvZyk7Ci1YaW5oYS5EaXZEaWFsb2cucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oXzQpewotaWYodHlwZW9mIF80IT0idW5kZWZpbmVkIil7Ci10aGlzLnNldFZhbHVlcyhfNCk7Ci19Ci10aGlzLnJvb3RFbGVtLnN0eWxlLmRpc3BsYXk9IiI7Ci19OwotWGluaGEuRGl2RGlhbG9nLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKCl7Ci10aGlzLnJvb3RFbGVtLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwotcmV0dXJuIHRoaXMuZ2V0VmFsdWVzKCk7Ci19OwotCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9EaWFsb2dzL3BhbmVsLWRpYWxvZy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0RpYWxvZ3MvcGFuZWwtZGlhbG9nLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjU1ZTZjLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0RpYWxvZ3MvcGFuZWwtZGlhbG9nLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyogVGhpcyBjb21wcmVzc2VkIGZpbGUgaXMgcGFydCBvZiBYaW5oYS4gRm9yIHVuY29tcHJlc3NlZCBzb3VyY2VzLCBmb3J1bSwgYW5kIGJ1ZyByZXBvcnRzLCBnbyB0byB4aW5oYS5vcmcgKi8KLS8qIFRoZSBVUkwgb2YgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGlzIGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvRGlhbG9ncy9wYW5lbC1kaWFsb2cuanMgKi8KLVhpbmhhLlBhbmVsRGlhbG9nPWZ1bmN0aW9uKF8xLF8yLF8zLF80KXsKLXRoaXMuaWQ9e307Ci10aGlzLnJfaWQ9e307Ci10aGlzLmVkaXRvcj1fMTsKLXRoaXMuZG9jdW1lbnQ9ZG9jdW1lbnQ7Ci10aGlzLnJvb3RFbGVtPV8xLmFkZFBhbmVsKF8yKTsKLXZhciBfNT10aGlzOwotaWYodHlwZW9mIF80PT0iZnVuY3Rpb24iKXsKLXRoaXMuX2xjPV80OwotfWVsc2V7Ci1pZihfNCl7Ci10aGlzLl9sYz1mdW5jdGlvbihfNil7Ci1yZXR1cm4gWGluaGEuX2xjKF82LF80KTsKLX07Ci19ZWxzZXsKLXRoaXMuX2xjPWZ1bmN0aW9uKF83KXsKLXJldHVybiBfNzsKLX07Ci19Ci19Ci1fMz1fMy5yZXBsYWNlKC9cWyhbYS16MC05X10rKVxdL2lnLGZ1bmN0aW9uKF84LGlkKXsKLWlmKHR5cGVvZiBfNS5pZFtpZF09PSJ1bmRlZmluZWQiKXsKLV81LmlkW2lkXT1YaW5oYS51bmlxKCJEaWFsb2ciKTsKLV81LnJfaWRbXzUuaWRbaWRdXT1pZDsKLX0KLXJldHVybiBfNS5pZFtpZF07Ci19KS5yZXBsYWNlKC88bDEwbj4oLio/KTxcL2wxMG4+L2lnLGZ1bmN0aW9uKF9hLF9iKXsKLXJldHVybiBfNS5fbGMoX2IpOwotfSkucmVwbGFjZSgvPSJfXCgoLio/KVwpIi9nLGZ1bmN0aW9uKF9jLF9kKXsKLXJldHVybiAiPVwiIitfNS5fbGMoX2QpKyJcIiI7Ci19KTsKLXRoaXMucm9vdEVsZW0uaW5uZXJIVE1MPV8zOwotfTsKLVhpbmhhLlBhbmVsRGlhbG9nLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKF9lKXsKLXRoaXMuc2V0VmFsdWVzKF9lKTsKLXRoaXMuZWRpdG9yLnNob3dQYW5lbCh0aGlzLnJvb3RFbGVtKTsKLX07Ci1YaW5oYS5QYW5lbERpYWxvZy5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpewotdGhpcy5lZGl0b3IuaGlkZVBhbmVsKHRoaXMucm9vdEVsZW0pOwotcmV0dXJuIHRoaXMuZ2V0VmFsdWVzKCk7Ci19OwotWGluaGEuUGFuZWxEaWFsb2cucHJvdG90eXBlLm9ucmVzaXplPVhpbmhhLkRpYWxvZy5wcm90b3R5cGUub25yZXNpemU7Ci1YaW5oYS5QYW5lbERpYWxvZy5wcm90b3R5cGUudG9nZ2xlPVhpbmhhLkRpYWxvZy5wcm90b3R5cGUudG9nZ2xlOwotWGluaGEuUGFuZWxEaWFsb2cucHJvdG90eXBlLnNldFZhbHVlcz1YaW5oYS5EaWFsb2cucHJvdG90eXBlLnNldFZhbHVlczsKLVhpbmhhLlBhbmVsRGlhbG9nLnByb3RvdHlwZS5nZXRWYWx1ZXM9WGluaGEuRGlhbG9nLnByb3RvdHlwZS5nZXRWYWx1ZXM7Ci1YaW5oYS5QYW5lbERpYWxvZy5wcm90b3R5cGUuZ2V0RWxlbWVudEJ5SWQ9WGluaGEuRGlhbG9nLnByb3RvdHlwZS5nZXRFbGVtZW50QnlJZDsKLVhpbmhhLlBhbmVsRGlhbG9nLnByb3RvdHlwZS5nZXRFbGVtZW50c0J5TmFtZT1YaW5oYS5EaWFsb2cucHJvdG90eXBlLmdldEVsZW1lbnRzQnlOYW1lOwotCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9EaWFsb2dzL3BvcHVwd2luLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRGlhbG9ncy9wb3B1cHdpbi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZmYTQwNy4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9EaWFsb2dzL3BvcHVwd2luLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qIFRoaXMgY29tcHJlc3NlZCBmaWxlIGlzIHBhcnQgb2YgWGluaGEuIEZvciB1bmNvbXByZXNzZWQgc291cmNlcywgZm9ydW0sIGFuZCBidWcgcmVwb3J0cywgZ28gdG8geGluaGEub3JnICovCi0vKiBUaGUgVVJMIG9mIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBpcyBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL0RpYWxvZ3MvcG9wdXB3aW4uanMgKi8KLWZ1bmN0aW9uIFBvcHVwV2luKF8xLF8yLF8zLF80KXsKLXRoaXMuZWRpdG9yPV8xOwotdGhpcy5oYW5kbGVyPV8zOwotdmFyIF81PXdpbmRvdy5vcGVuKCIiLCJfX2hhX2RpYWxvZyIsInRvb2xiYXI9bm8sbWVudWJhcj1ubyxwZXJzb25hbGJhcj1ubyx3aWR0aD02MDAsaGVpZ2h0PTYwMCxsZWZ0PTIwLHRvcD00MCxzY3JvbGxiYXJzPW5vLHJlc2l6YWJsZT15ZXMiKTsKLXRoaXMud2luZG93PV81OwotdmFyIF82PV81LmRvY3VtZW50OwotdGhpcy5kb2M9XzY7Ci12YXIgXzc9dGhpczsKLXZhciBfOD1kb2N1bWVudC5iYXNlVVJJfHxkb2N1bWVudC5VUkw7Ci1pZihfOCYmXzgubWF0Y2goLyguKilcLyhbXlwvXSspLykpewotXzg9UmVnRXhwLiQxKyIvIjsKLX0KLWlmKHR5cGVvZiBfZWRpdG9yX3VybCE9InVuZGVmaW5lZCImJiEoL15cLy8udGVzdChfZWRpdG9yX3VybCkpJiYhKC9odHRwOlwvXC8vLnRlc3QoX2VkaXRvcl91cmwpKSl7Ci1fOCs9X2VkaXRvcl91cmw7Ci19ZWxzZXsKLV84PV9lZGl0b3JfdXJsOwotfQotaWYoISgvXC8kLy50ZXN0KF84KSkpewotXzgrPSIvIjsKLX0KLXRoaXMuYmFzZVVSTD1fODsKLV82Lm9wZW4oKTsKLXZhciBfOT0iPGh0bWw+PGhlYWQ+PHRpdGxlPiIrXzIrIjwvdGl0bGU+XG4iOwotXzkrPSI8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+QGltcG9ydCB1cmwoIitfZWRpdG9yX3VybCsiWGluaGEuY3NzKTs8L3N0eWxlPlxuIjsKLWlmKF9lZGl0b3Jfc2tpbiE9IiIpewotXzkrPSI8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+QGltcG9ydCB1cmwoIitfZWRpdG9yX3VybCsic2tpbnMvIitfZWRpdG9yX3NraW4rIi9za2luLmNzcyk7PC9zdHlsZT5cbiI7Ci19Ci1fOSs9IjwvaGVhZD5cbiI7Ci1fOSs9Ijxib2R5IGNsYXNzPVwiZGlhbG9nIHBvcHVwd2luXCIgaWQ9XCItLUhBLWJvZHlcIj48L2JvZHk+PC9odG1sPiI7Ci1fNi53cml0ZShfOSk7Ci1fNi5jbG9zZSgpOwotZnVuY3Rpb24gaW5pdDIoKXsKLXZhciBfYT1fNi5ib2R5OwotaWYoIV9hKXsKLXNldFRpbWVvdXQoaW5pdDIsMjUpOwotcmV0dXJuIGZhbHNlOwotfQotXzUudGl0bGU9XzI7Ci1fNi5kb2N1bWVudEVsZW1lbnQuc3R5bGUucGFkZGluZz0iMHB4IjsKLV82LmRvY3VtZW50RWxlbWVudC5zdHlsZS5tYXJnaW49IjBweCI7Ci12YXIgX2I9XzYuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci1fYi5jbGFzc05hbWU9ImNvbnRlbnQiOwotXzcuY29udGVudD1fYjsKLV9hLmFwcGVuZENoaWxkKF9iKTsKLV83LmVsZW1lbnQ9X2E7Ci1fNChfNyk7Ci1fNS5mb2N1cygpOwotfTsKLWluaXQyKCk7Ci19OwotUG9wdXBXaW4ucHJvdG90eXBlLmNhbGxIYW5kbGVyPWZ1bmN0aW9uKCl7Ci12YXIgX2M9WyJpbnB1dCIsInRleHRhcmVhIiwic2VsZWN0Il07Ci12YXIgX2Q9e307Ci1mb3IodmFyIHRpPV9jLmxlbmd0aDstLXRpPj0wOyl7Ci12YXIgX2Y9X2NbdGldOwotdmFyIGVscz10aGlzLmNvbnRlbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoX2YpOwotZm9yKHZhciBqPTA7ajxlbHMubGVuZ3RoOysrail7Ci12YXIgZWw9ZWxzW2pdOwotdmFyIHZhbD1lbC52YWx1ZTsKLWlmKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09ImlucHV0Iil7Ci1pZihlbC50eXBlPT0iY2hlY2tib3giKXsKLXZhbD1lbC5jaGVja2VkOwotfQotfQotX2RbZWwubmFtZV09dmFsOwotfQotfQotdGhpcy5oYW5kbGVyKHRoaXMsX2QpOwotcmV0dXJuIGZhbHNlOwotfTsKLVBvcHVwV2luLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpewotdGhpcy53aW5kb3cuY2xvc2UoKTsKLX07Ci1Qb3B1cFdpbi5wcm90b3R5cGUuYWRkQnV0dG9ucz1mdW5jdGlvbigpewotdmFyIF8xND10aGlzOwotdmFyIGRpdj10aGlzLmRvYy5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLXRoaXMuY29udGVudC5hcHBlbmRDaGlsZChkaXYpOwotZGl2LmlkPSJidXR0b25zIjsKLWRpdi5jbGFzc05hbWU9ImJ1dHRvbnMiOwotZm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoOysraSl7Ci12YXIgYnRuPWFyZ3VtZW50c1tpXTsKLXZhciBfMTg9dGhpcy5kb2MuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Ci1kaXYuYXBwZW5kQ2hpbGQoXzE4KTsKLV8xOC5pbm5lckhUTUw9WGluaGEuX2xjKGJ0biwiWGluaGEiKTsKLXN3aXRjaChidG4udG9Mb3dlckNhc2UoKSl7Ci1jYXNlICJvayI6Ci1YaW5oYS5hZGREb20wRXZlbnQoXzE4LCJjbGljayIsZnVuY3Rpb24oKXsKLV8xNC5jYWxsSGFuZGxlcigpOwotXzE0LmNsb3NlKCk7Ci1yZXR1cm4gZmFsc2U7Ci19KTsKLWJyZWFrOwotY2FzZSAiY2FuY2VsIjoKLVhpbmhhLmFkZERvbTBFdmVudChfMTgsImNsaWNrIixmdW5jdGlvbigpewotXzE0LmNsb3NlKCk7Ci1yZXR1cm4gZmFsc2U7Ci19KTsKLWJyZWFrOwotfQotfQotfTsKLVBvcHVwV2luLnByb3RvdHlwZS5zaG93QXRFbGVtZW50PWZ1bmN0aW9uKCl7Ci12YXIgXzE5PXRoaXM7Ci1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ci12YXIgdz1fMTkuY29udGVudC5vZmZzZXRXaWR0aCs0OwotdmFyIGg9XzE5LmNvbnRlbnQub2Zmc2V0SGVpZ2h0KzQ7Ci12YXIgZWw9XzE5LmNvbnRlbnQ7Ci12YXIgcz1lbC5zdHlsZTsKLXMucG9zaXRpb249ImFic29sdXRlIjsKLXMubGVmdD1wYXJzZUludCgody1lbC5vZmZzZXRXaWR0aCkvMiwxMCkrInB4IjsKLXMudG9wPXBhcnNlSW50KChoLWVsLm9mZnNldEhlaWdodCkvMiwxMCkrInB4IjsKLWlmKFhpbmhhLmlzX2dlY2tvKXsKLV8xOS53aW5kb3cuaW5uZXJXaWR0aD13OwotXzE5LndpbmRvdy5pbm5lckhlaWdodD1oOwotfWVsc2V7Ci1fMTkud2luZG93LnJlc2l6ZVRvKHcrOCxoKzcwKTsKLX0KLX0sMjUpOwotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9mdWxsLXNjcmVlbi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vZnVsbC1zY3JlZW4uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4N2UxN2QuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9mdWxsLXNjcmVlbi5qcworKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvbW9kdWxlcy9GdWxsU2NyZWVuL2Z1bGwtc2NyZWVuLmpzICovCi1mdW5jdGlvbiBGdWxsU2NyZWVuKF8xLF8yKXsKLXRoaXMuZWRpdG9yPV8xOwotdGhpcy5vcmlnaW5hbFNpemVzPW51bGw7Ci1fMS5fc3VwZXJjbGVhbl9vbj1mYWxzZTsKLXZhciBfMz1fMS5jb25maWc7Ci1fMy5yZWdpc3Rlckljb24oImZ1bGxzY3JlZW4iLFtfZWRpdG9yX3VybCtfMy5pbWdVUkwrImVkX2J1dHRvbnNfbWFpbi5wbmciLDgsMF0pOwotXzMucmVnaXN0ZXJJY29uKCJmdWxsc2NyZWVucmVzdG9yZSIsW19lZGl0b3JfdXJsK18zLmltZ1VSTCsiZWRfYnV0dG9uc19tYWluLnBuZyIsOSwwXSk7Ci1fMy5yZWdpc3RlckJ1dHRvbigiZnVsbHNjcmVlbiIsdGhpcy5fbGMoIk1heGltaXplL01pbmltaXplIEVkaXRvciIpLF8zLmljb25MaXN0LmZ1bGxzY3JlZW4sdHJ1ZSxmdW5jdGlvbihlLF81LF82KXsKLWUuX2Z1bGxTY3JlZW4oKTsKLX0pOwotXzMuYWRkVG9vbGJhckVsZW1lbnQoImZ1bGxzY3JlZW4iLCJwb3B1cGVkaXRvciIsMCk7Ci19OwotRnVsbFNjcmVlbi5fcGx1Z2luSW5mbz17bmFtZToiRnVsbFNjcmVlbiIsdmVyc2lvbjoiMS4wIixkZXZlbG9wZXI6IkphbWVzIFNsZWVtYW4iLGRldmVsb3Blcl91cmw6Imh0dHA6Ly93d3cuZ29nby5jby5uei8iLGNfb3duZXI6IkdvZ28gSW50ZXJuZXQgU2VydmljZXMiLGxpY2Vuc2U6Imh0bWxBcmVhIixzcG9uc29yOiJHb2dvIEludGVybmV0IFNlcnZpY2VzIixzcG9uc29yX3VybDoiaHR0cDovL3d3dy5nb2dvLmNvLm56LyJ9OwotRnVsbFNjcmVlbi5wcm90b3R5cGUuX2xjPWZ1bmN0aW9uKF83KXsKLXJldHVybiBYaW5oYS5fbGMoXzcse3VybDpfZWRpdG9yX3VybCsibW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvIixjb250ZXh0OiJGdWxsU2NyZWVuIn0pOwotfTsKLVhpbmhhLnByb3RvdHlwZS5fZnVsbFNjcmVlbj1mdW5jdGlvbigpewotdmFyIGU9dGhpczsKLXZhciBfOT1lLmNvbmZpZzsKLWZ1bmN0aW9uIHNpemVJdFVwKCl7Ci1pZighZS5faXNGdWxsU2NyZWVufHxlLl9zaXppbmcpewotcmV0dXJuIGZhbHNlOwotfQotZS5fc2l6aW5nPXRydWU7Ci12YXIgX2E9WGluaGEudmlld3BvcnRTaXplKCk7Ci1pZihlLmNvbmZpZy5mdWxsU2NyZWVuU2l6ZURvd25NZXRob2Q9PSJyZXN0b3JlIil7Ci1lLm9yaWdpbmFsU2l6ZXM9e3g6cGFyc2VJbnQoZS5faHRtbEFyZWEuc3R5bGUud2lkdGgpLHk6cGFyc2VJbnQoZS5faHRtbEFyZWEuc3R5bGUuaGVpZ2h0KSxkaW06X2F9OwotfQotdmFyIGg9X2EueS1lLmNvbmZpZy5mdWxsU2NyZWVuTWFyZ2luc1swXS1lLmNvbmZpZy5mdWxsU2NyZWVuTWFyZ2luc1syXTsKLXZhciB3PV9hLngtZS5jb25maWcuZnVsbFNjcmVlbk1hcmdpbnNbMV0tZS5jb25maWcuZnVsbFNjcmVlbk1hcmdpbnNbM107Ci1lLnNpemVFZGl0b3IodysicHgiLGgrInB4Iix0cnVlLHRydWUpOwotZS5fc2l6aW5nPWZhbHNlOwotaWYoZS5fdG9vbGJhck9iamVjdHMuZnVsbHNjcmVlbil7Ci1lLl90b29sYmFyT2JqZWN0cy5mdWxsc2NyZWVuLnN3YXBJbWFnZShfOS5pY29uTGlzdC5mdWxsc2NyZWVucmVzdG9yZSk7Ci19Ci19OwotZnVuY3Rpb24gc2l6ZUl0RG93bigpewotaWYoZS5faXNGdWxsU2NyZWVufHxlLl9zaXppbmcpewotcmV0dXJuIGZhbHNlOwotfQotZS5fc2l6aW5nPXRydWU7Ci1pZihlLm9yaWdpbmFsU2l6ZXMhPW51bGwpewotdmFyIG9zPWUub3JpZ2luYWxTaXplczsKLXZhciBfZT1YaW5oYS52aWV3cG9ydFNpemUoKTsKLXZhciBuVz1vcy54KyhfZS54LW9zLmRpbS54KTsKLXZhciBuSD1vcy55KyhfZS55LW9zLmRpbS55KTsKLWUuc2l6ZUVkaXRvcihuVysicHgiLG5IKyJweCIsZS5jb25maWcuc2l6ZUluY2x1ZGVzQmFycyxlLmNvbmZpZy5zaXplSW5jbHVkZXNQYW5lbHMpOwotZS5vcmlnaW5hbFNpemVzPW51bGw7Ci19ZWxzZXsKLWUuaW5pdFNpemUoKTsKLX0KLWUuX3NpemluZz1mYWxzZTsKLWlmKGUuX3Rvb2xiYXJPYmplY3RzLmZ1bGxzY3JlZW4pewotZS5fdG9vbGJhck9iamVjdHMuZnVsbHNjcmVlbi5zd2FwSW1hZ2UoXzkuaWNvbkxpc3QuZnVsbHNjcmVlbik7Ci19Ci19OwotZnVuY3Rpb24gcmVzZXRTY3JvbGwoKXsKLWlmKGUuX2lzRnVsbFNjcmVlbil7Ci13aW5kb3cuc2Nyb2xsKDAsMCk7Ci13aW5kb3cuc2V0VGltZW91dChyZXNldFNjcm9sbCwxNTApOwotfQotfTsKLWlmKHR5cGVvZiB0aGlzLl9pc0Z1bGxTY3JlZW49PSJ1bmRlZmluZWQiKXsKLXRoaXMuX2lzRnVsbFNjcmVlbj1mYWxzZTsKLWlmKGUudGFyZ2V0IT1lLl9pZnJhbWUpewotWGluaGEuX2FkZEV2ZW50KHdpbmRvdywicmVzaXplIixzaXplSXRVcCk7Ci19Ci19Ci1pZihYaW5oYS5pc19nZWNrbyl7Ci10aGlzLmRlYWN0aXZhdGVFZGl0b3IoKTsKLX0KLWlmKHRoaXMuX2lzRnVsbFNjcmVlbil7Ci10aGlzLl9odG1sQXJlYS5zdHlsZS5wb3NpdGlvbj0iIjsKLWlmKCFYaW5oYS5pc19pZSl7Ci10aGlzLl9odG1sQXJlYS5zdHlsZS5ib3JkZXI9IiI7Ci19Ci10cnl7Ci1pZihYaW5oYS5pc19pZSYmZG9jdW1lbnQuY29tcGF0TW9kZT09IkNTUzFDb21wYXQiKXsKLXZhciBib2Q9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImh0bWwiKTsKLX1lbHNlewotdmFyIGJvZD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpOwotfQotYm9kWzBdLnN0eWxlLm92ZXJmbG93PSIiOwotfQotY2F0Y2goZSl7Ci19Ci10aGlzLl9pc0Z1bGxTY3JlZW49ZmFsc2U7Ci1zaXplSXREb3duKCk7Ci12YXIgXzEyPXRoaXMuX2h0bWxBcmVhOwotd2hpbGUoKF8xMj1fMTIucGFyZW50Tm9kZSkmJl8xMi5zdHlsZSl7Ci1fMTIuc3R5bGUucG9zaXRpb249XzEyLl94aW5oYV9mdWxsU2NyZWVuT2xkUG9zaXRpb247Ci1fMTIuX3hpbmhhX2Z1bGxTY3JlZW5PbGRQb3NpdGlvbj1udWxsOwotfQotaWYoWGluaGEuaWVfdmVyc2lvbjw3KXsKLXZhciBfMTM9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpOwotZm9yKHZhciBpPTA7aTxfMTMubGVuZ3RoOysraSl7Ci1fMTNbaV0uc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSI7Ci19Ci19Ci13aW5kb3cuc2Nyb2xsKHRoaXMuX3VuU2Nyb2xsLngsdGhpcy5fdW5TY3JvbGwueSk7Ci19ZWxzZXsKLXRoaXMuX3VuU2Nyb2xsPXt4Oih3aW5kb3cucGFnZVhPZmZzZXQpPyh3aW5kb3cucGFnZVhPZmZzZXQpOihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpP2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0OmRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCx5Oih3aW5kb3cucGFnZVlPZmZzZXQpPyh3aW5kb3cucGFnZVlPZmZzZXQpOihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpP2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A6ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3B9OwotdmFyIF8xMj10aGlzLl9odG1sQXJlYTsKLXdoaWxlKChfMTI9XzEyLnBhcmVudE5vZGUpJiZfMTIuc3R5bGUpewotXzEyLl94aW5oYV9mdWxsU2NyZWVuT2xkUG9zaXRpb249XzEyLnN0eWxlLnBvc2l0aW9uOwotXzEyLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiOwotfQotaWYoWGluaGEuaWVfdmVyc2lvbjw3KXsKLXZhciBfMTM9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpOwotdmFyIHMsXzE2OwotZm9yKHZhciBpPTA7aTxfMTMubGVuZ3RoOysraSl7Ci1zPV8xM1tpXTsKLV8xNj1mYWxzZTsKLXdoaWxlKHM9cy5wYXJlbnROb2RlKXsKLWlmKHM9PXRoaXMuX2h0bWxBcmVhKXsKLV8xNj10cnVlOwotYnJlYWs7Ci19Ci19Ci1pZighXzE2JiZfMTNbaV0uc3R5bGUudmlzaWJpbGl0eSE9ImhpZGRlbiIpewotXzEzW2ldLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7Ci19Ci19Ci19Ci13aW5kb3cuc2Nyb2xsKDAsMCk7Ci10aGlzLl9odG1sQXJlYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiOwotdGhpcy5faHRtbEFyZWEuc3R5bGUuekluZGV4PTk5OTsKLXRoaXMuX2h0bWxBcmVhLnN0eWxlLmxlZnQ9ZS5jb25maWcuZnVsbFNjcmVlbk1hcmdpbnNbM10rInB4IjsKLXRoaXMuX2h0bWxBcmVhLnN0eWxlLnRvcD1lLmNvbmZpZy5mdWxsU2NyZWVuTWFyZ2luc1swXSsicHgiOwotaWYoIVhpbmhhLmlzX2llJiYhWGluaGEuaXNfd2Via2l0KXsKLXRoaXMuX2h0bWxBcmVhLnN0eWxlLmJvcmRlcj0ibm9uZSI7Ci19Ci10aGlzLl9pc0Z1bGxTY3JlZW49dHJ1ZTsKLXJlc2V0U2Nyb2xsKCk7Ci10cnl7Ci1pZihYaW5oYS5pc19pZSYmZG9jdW1lbnQuY29tcGF0TW9kZT09IkNTUzFDb21wYXQiKXsKLXZhciBib2Q9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImh0bWwiKTsKLX1lbHNlewotdmFyIGJvZD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpOwotfQotYm9kWzBdLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iOwotfQotY2F0Y2goZSl7Ci19Ci1zaXplSXRVcCgpOwotfQotaWYoWGluaGEuaXNfZ2Vja28pewotdGhpcy5hY3RpdmF0ZUVkaXRvcigpOwotfQotdGhpcy5mb2N1c0VkaXRvcigpOwotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL2RlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmZmNWEzLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9kZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLS8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAotLy8gdHJhbnNsYXRlZDogUmFpbXVuZCBNZXllciB4aW5oYUByYXktb2YtbGlnaHQub3JnCi17Ci0gICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiRWRpdG9yIG1heGltaWVyZW4vdmVya2xlaW5lcm4iCi19OwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL2VzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL2VzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzAzYjY5Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9lcy5qcworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLS8vIExBTkc6ICJlcyIsIEVOQ09ESU5HOiBVVEYtOAotLy8gdHJhbnNsYXRlZDogRGVyaWNrIExlb255IDxkbGVvbnlAZ21haWwuY29tPgotewotICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIk1heGltaXphci9NaW5pbWl6YXIgRWRpdG9yIgotfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvZnIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNGIwMTQuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL2ZyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04Ci17Ci0gICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiQWdyYW5kaXIvUsOpZHVpcmUgbCfDqWRpdGV1ciIKLX07ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL2phLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTBjNGRhLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9qYS5qcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLS8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAotewotICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIuOCqOODh+OCo+OCv+OBruacgOWkp+WMli/mnIDlsI/ljJYiCi19OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9uYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9uYi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJhN2MyYi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvbmIuanMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzCi0vLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKLS8vIHRyYW5zbGF0ZWQ6IEtpbSBTdGVpbmhhdWcsIGh0dHA6Ly93d3cuc3RlaW5oYXVnLmNvbS8sIGtpbUBzdGVpbmhhdWcuY29tCi17Ci0gICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiTWFrc2ltZXIvTWluaW1lciBXWVNJV1lHIHZpbmR1IgotfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvbmwuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmY2RjM2YuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL25sLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04Ci0vLyB0cmFuc2xhdGVkOiBBcnRodXIgQm9nYWFydCBhLmJvZ2FhcnRAb25laGlwcG8ub3JnCi17Ci0gICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiRWRpdG9yIG1heGltYWxpc2VyZW4vdmVya2xlaW5lbiIKLX07CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvcGwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvcGwuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNjM5YmIuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL3BsLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotLy8gTEFORzogInBsIiwgRU5DT0RJTkc6IFVURi04Ci0vLyB0cmFuc2xhdGVkOiBLcnp5c3p0b2YgS290b3dpY3osIGtvdG8xc2FAbzIucGwsIGh0dHA6Ly93d3cuZXNrb3Qua3Jha293LnBsL3BvcnRmb2xpbwotewotICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIk1ha3N5bWFsaXp1ai9taW5pbWFsaXp1aiBlZHl0b3IiCi19OwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL3B0X2JyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmU0ODEyLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9wdF9ici5qcworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLe+7vy8vIEkxOE4gY29uc3RhbnRzCi0vLwotLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04Ci0vLyBQb3J0dWd1ZXNlIEJyYXppbGlhbiBUcmFuc2xhdGlvbgotLy8KLS8vIEF1dGhvcjogTWFyY2lvIEJhcmJvc2EsIDxtYXJjaW9AbXBnLmNvbS5icj4KLS8vIE1TTjogdG9tYXJzaGFsbEBtc24uY29tIC0gSUNROiA2OTQxOTkzMwotLy8gU2l0ZTogaHR0cDovL3d3dy5tcGcuY29tLmJyCi0vLwotLy8gTGFzdCByZXZpc2lvbjogMDYgc2VwdGVtYmVyIDIwMDcKLS8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KLS8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KLS8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KLXsKLSAgIk1heGltaXplL01pbmltaXplIEVkaXRvciI6ICJNYXhpbWl6YXIvTWluaW1pemFyIEVkaXRvciIKLX07CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvcnUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvcnUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMjQ4ZWYuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL3J1LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi3vu78vLyBJMThOIGNvbnN0YW50cw0KLS8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOA0KLS8vIEF1dGhvcjogQW5kcmVpIEJsYWdvcmF6dW1vdiwgYUBmbnIucnUNCi17DQotICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogItCg0LDQt9Cy0LXRgNC90YPRgtGML9Ch0LLQtdGA0L3Rg9GC0Ywg0YDQtdC00LDQutGC0L7RgCINCi19OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9zdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9zdi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYzI3ZmVlNS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvc3YuanMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzCi0vLyBMQU5HOiAic3YiIChTd2VkaXNoKSwgRU5DT0RJTkc6IFVURi04Ci0vLyB0cmFuc2xhdGVkOiBFcmlrIERhbMOpbiwgPGRhbGVuQGpwbC5zZT4KLXsKLSAgIk1heGltaXplL01pbmltaXplIEVkaXRvciI6ICJNYXhpbWVyYS9NaW5pbWVyYSBXWVNJV1lHIGbDtm5zdGVyIgotfTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0dlY2tvL0dlY2tvLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvR2Vja28vR2Vja28uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MjM3YzQuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvR2Vja28vR2Vja28uanMKKysrIC9kZXYvbnVsbApAQCAtMSw0NzEgKzAsMCBAQAotLyogVGhpcyBjb21wcmVzc2VkIGZpbGUgaXMgcGFydCBvZiBYaW5oYS4gRm9yIHVuY29tcHJlc3NlZCBzb3VyY2VzLCBmb3J1bSwgYW5kIGJ1ZyByZXBvcnRzLCBnbyB0byB4aW5oYS5vcmcgKi8KLS8qIFRoZSBVUkwgb2YgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGlzIGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvR2Vja28vR2Vja28uanMgKi8KLUdlY2tvLl9wbHVnaW5JbmZvPXtuYW1lOiJHZWNrbyIsb3JpZ2luOiJYaW5oYSBDb3JlIix2ZXJzaW9uOiIkTGFzdENoYW5nZWRSZXZpc2lvbjogMTA4NCAkIi5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sIiQxIiksZGV2ZWxvcGVyOiJUaGUgWGluaGEgQ29yZSBEZXZlbG9wZXIgVGVhbSIsZGV2ZWxvcGVyX3VybDoiJEhlYWRVUkw6IGh0dHA6Ly9zdm4ueGluaGEub3JnL3RhZ3MvMC45Ni4xL21vZHVsZXMvR2Vja28vR2Vja28uanMgJCIucmVwbGFjZSgvXlteOl0qOlxzKiguKilccypcJCQvLCIkMSIpLHNwb25zb3I6IiIsc3BvbnNvcl91cmw6IiIsbGljZW5zZToiaHRtbEFyZWEifTsKLWZ1bmN0aW9uIEdlY2tvKF8xKXsKLXRoaXMuZWRpdG9yPV8xOwotXzEuR2Vja289dGhpczsKLX07Ci1HZWNrby5wcm90b3R5cGUub25LZXlQcmVzcz1mdW5jdGlvbihldil7Ci12YXIgXzM9dGhpcy5lZGl0b3I7Ci12YXIgcz1fMy5nZXRTZWxlY3Rpb24oKTsKLWlmKF8zLmlzU2hvcnRDdXQoZXYpKXsKLXN3aXRjaChfMy5nZXRLZXkoZXYpLnRvTG93ZXJDYXNlKCkpewotY2FzZSAieiI6Ci1pZihfMy5fdW5MaW5rJiZfMy5fdW5saW5rT25VbmRvKXsKLVhpbmhhLl9zdG9wRXZlbnQoZXYpOwotXzMuX3VuTGluaygpOwotXzMudXBkYXRlVG9vbGJhcigpOwotcmV0dXJuIHRydWU7Ci19Ci1icmVhazsKLWNhc2UgImEiOgotc2VsPV8zLmdldFNlbGVjdGlvbigpOwotc2VsLnJlbW92ZUFsbFJhbmdlcygpOwotcmFuZ2U9XzMuY3JlYXRlUmFuZ2UoKTsKLXJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhfMy5fZG9jLmJvZHkpOwotc2VsLmFkZFJhbmdlKHJhbmdlKTsKLVhpbmhhLl9zdG9wRXZlbnQoZXYpOwotcmV0dXJuIHRydWU7Ci1icmVhazsKLWNhc2UgInYiOgotaWYoIV8zLmNvbmZpZy5odG1sYXJlYVBhc3RlKXsKLXJldHVybiB0cnVlOwotfQotYnJlYWs7Ci19Ci19Ci1zd2l0Y2goXzMuZ2V0S2V5KGV2KSl7Ci1jYXNlICIgIjoKLXZhciBfNT1mdW5jdGlvbihfNixfNyl7Ci12YXIgXzg9XzYubmV4dFNpYmxpbmc7Ci1pZih0eXBlb2YgXzc9PSJzdHJpbmciKXsKLV83PV8zLl9kb2MuY3JlYXRlRWxlbWVudChfNyk7Ci19Ci12YXIgYT1fNi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShfNyxfOCk7Ci1YaW5oYS5yZW1vdmVGcm9tUGFyZW50KF82KTsKLWEuYXBwZW5kQ2hpbGQoXzYpOwotXzguZGF0YT0iICIrXzguZGF0YTsKLXMuY29sbGFwc2UoXzgsMSk7Ci1fMy5fdW5MaW5rPWZ1bmN0aW9uKCl7Ci12YXIgdD1hLmZpcnN0Q2hpbGQ7Ci1hLnJlbW92ZUNoaWxkKHQpOwotYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LGEpOwotWGluaGEucmVtb3ZlRnJvbVBhcmVudChhKTsKLV8zLl91bkxpbms9bnVsbDsKLV8zLl91bmxpbmtPblVuZG89ZmFsc2U7Ci19OwotXzMuX3VubGlua09uVW5kbz10cnVlOwotcmV0dXJuIGE7Ci19OwotaWYoXzMuY29uZmlnLmNvbnZlcnRVcmxzVG9MaW5rcyYmcyYmcy5pc0NvbGxhcHNlZCYmcy5hbmNob3JOb2RlLm5vZGVUeXBlPT0zJiZzLmFuY2hvck5vZGUuZGF0YS5sZW5ndGg+MyYmcy5hbmNob3JOb2RlLmRhdGEuaW5kZXhPZigiLiIpPj0wKXsKLXZhciBfYj1zLmFuY2hvck5vZGUuZGF0YS5zdWJzdHJpbmcoMCxzLmFuY2hvck9mZnNldCkuc2VhcmNoKC9cU3s0LH0kLyk7Ci1pZihfYj09LTEpewotYnJlYWs7Ci19Ci1pZihfMy5fZ2V0Rmlyc3RBbmNlc3RvcihzLCJhIikpewotYnJlYWs7Ci19Ci12YXIgX2M9cy5hbmNob3JOb2RlLmRhdGEuc3Vic3RyaW5nKDAscy5hbmNob3JPZmZzZXQpLnJlcGxhY2UoL14uKj8oXFMqKSQvLCIkMSIpOwotdmFyIF9kPV9jLm1hdGNoKFhpbmhhLlJFX2VtYWlsKTsKLWlmKF9kKXsKLXZhciBfZT1zLmFuY2hvck5vZGU7Ci12YXIgX2Y9X2Uuc3BsaXRUZXh0KHMuYW5jaG9yT2Zmc2V0KTsKLXZhciBfMTA9X2Uuc3BsaXRUZXh0KF9iKTsKLV81KF8xMCwiYSIpLmhyZWY9Im1haWx0bzoiK19kWzBdOwotYnJlYWs7Ci19Ci1SRV9kYXRlPS8oWzAtOV0rXC4pKy87Ci1SRV9pcD0vKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KVwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPykvOwotdmFyIF8xMT1fYy5tYXRjaChYaW5oYS5SRV91cmwpOwotaWYoXzExKXsKLWlmKFJFX2RhdGUudGVzdChfYykpewotYnJlYWs7Ci19Ci12YXIgXzEyPXMuYW5jaG9yTm9kZTsKLXZhciBfMTM9XzEyLnNwbGl0VGV4dChzLmFuY2hvck9mZnNldCk7Ci12YXIgXzE0PV8xMi5zcGxpdFRleHQoX2IpOwotXzUoXzE0LCJhIikuaHJlZj0oXzExWzFdP18xMVsxXToiaHR0cDovLyIpK18xMVsyXTsKLWJyZWFrOwotfQotfQotYnJlYWs7Ci19Ci1zd2l0Y2goZXYua2V5Q29kZSl7Ci1jYXNlIDI3OgotaWYoXzMuX3VuTGluayl7Ci1fMy5fdW5MaW5rKCk7Ci1YaW5oYS5fc3RvcEV2ZW50KGV2KTsKLX0KLWJyZWFrOwotYnJlYWs7Ci1jYXNlIDg6Ci1jYXNlIDQ2OgotaWYoIWV2LnNoaWZ0S2V5JiZ0aGlzLmhhbmRsZUJhY2tzcGFjZSgpKXsKLVhpbmhhLl9zdG9wRXZlbnQoZXYpOwotfQotZGVmYXVsdDoKLV8zLl91bmxpbmtPblVuZG89ZmFsc2U7Ci1pZihzLmFuY2hvck5vZGUmJnMuYW5jaG9yTm9kZS5ub2RlVHlwZT09Myl7Ci12YXIgYT1fMy5fZ2V0Rmlyc3RBbmNlc3RvcihzLCJhIik7Ci1pZighYSl7Ci1icmVhazsKLX0KLWlmKCFhLl91cGRhdGVBbmNoVGltZW91dCl7Ci1pZihzLmFuY2hvck5vZGUuZGF0YS5tYXRjaChYaW5oYS5SRV9lbWFpbCkmJmEuaHJlZi5tYXRjaCgibWFpbHRvOiIrcy5hbmNob3JOb2RlLmRhdGEudHJpbSgpKSl7Ci12YXIgXzE2PXMuYW5jaG9yTm9kZTsKLXZhciBfMTc9ZnVuY3Rpb24oKXsKLWEuaHJlZj0ibWFpbHRvOiIrXzE2LmRhdGEudHJpbSgpOwotYS5fdXBkYXRlQW5jaFRpbWVvdXQ9c2V0VGltZW91dChfMTcsMjUwKTsKLX07Ci1hLl91cGRhdGVBbmNoVGltZW91dD1zZXRUaW1lb3V0KF8xNywxMDAwKTsKLWJyZWFrOwotfQotdmFyIG09cy5hbmNob3JOb2RlLmRhdGEubWF0Y2goWGluaGEuUkVfdXJsKTsKLWlmKG0mJmEuaHJlZi5tYXRjaChuZXcgUmVnRXhwKCJodHRwKHMpPzovLyIrWGluaGEuZXNjYXBlU3RyaW5nRm9yUmVnRXhwKHMuYW5jaG9yTm9kZS5kYXRhLnRyaW0oKSkpKSl7Ci12YXIgXzE5PXMuYW5jaG9yTm9kZTsKLXZhciBfMWE9ZnVuY3Rpb24oKXsKLW09XzE5LmRhdGEubWF0Y2goWGluaGEuUkVfdXJsKTsKLWlmKG0pewotYS5ocmVmPShtWzFdP21bMV06Imh0dHA6Ly8iKSttWzJdOwotfQotYS5fdXBkYXRlQW5jaFRpbWVvdXQ9c2V0VGltZW91dChfMWEsMjUwKTsKLX07Ci1hLl91cGRhdGVBbmNoVGltZW91dD1zZXRUaW1lb3V0KF8xYSwxMDAwKTsKLX0KLX0KLX0KLWJyZWFrOwotfQotcmV0dXJuIGZhbHNlOwotfTsKLUdlY2tvLnByb3RvdHlwZS5oYW5kbGVCYWNrc3BhY2U9ZnVuY3Rpb24oKXsKLXZhciBfMWI9dGhpcy5lZGl0b3I7Ci1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ci12YXIgc2VsPV8xYi5nZXRTZWxlY3Rpb24oKTsKLXZhciBfMWQ9XzFiLmNyZWF0ZVJhbmdlKHNlbCk7Ci12YXIgU0M9XzFkLnN0YXJ0Q29udGFpbmVyOwotdmFyIFNPPV8xZC5zdGFydE9mZnNldDsKLXZhciBFQz1fMWQuZW5kQ29udGFpbmVyOwotdmFyIEVPPV8xZC5lbmRPZmZzZXQ7Ci12YXIgXzIyPVNDLm5leHRTaWJsaW5nOwotaWYoU0Mubm9kZVR5cGU9PTMpewotU0M9U0MucGFyZW50Tm9kZTsKLX0KLWlmKCEoL1xTLy50ZXN0KFNDLnRhZ05hbWUpKSl7Ci12YXIgcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7Ci13aGlsZShTQy5maXJzdENoaWxkKXsKLXAuYXBwZW5kQ2hpbGQoU0MuZmlyc3RDaGlsZCk7Ci19Ci1TQy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShwLFNDKTsKLVhpbmhhLnJlbW92ZUZyb21QYXJlbnQoU0MpOwotdmFyIHI9XzFkLmNsb25lUmFuZ2UoKTsKLXIuc2V0U3RhcnRCZWZvcmUoXzIyKTsKLXIuc2V0RW5kQWZ0ZXIoXzIyKTsKLXIuZXh0cmFjdENvbnRlbnRzKCk7Ci1zZWwucmVtb3ZlQWxsUmFuZ2VzKCk7Ci1zZWwuYWRkUmFuZ2Uocik7Ci19Ci19LDEwKTsKLX07Ci1HZWNrby5wcm90b3R5cGUuaW53YXJkSHRtbD1mdW5jdGlvbihfMjUpewotXzI1PV8yNS5yZXBsYWNlKC88KFwvPylzdHJvbmcoXHN8PnxcLykvaWcsIjwkMWIkMiIpOwotXzI1PV8yNS5yZXBsYWNlKC88KFwvPyllbShcc3w+fFwvKS9pZywiPCQxaSQyIik7Ci1fMjU9XzI1LnJlcGxhY2UoLzwoXC8/KWRlbChcc3w+fFwvKS9pZywiPCQxc3RyaWtlJDIiKTsKLXJldHVybiBfMjU7Ci19OwotR2Vja28ucHJvdG90eXBlLm91dHdhcmRIdG1sPWZ1bmN0aW9uKF8yNil7Ci1fMjY9XzI2LnJlcGxhY2UoLzxzY3JpcHRbXHNdKnNyY1tcc10qPVtcc10qWyciXWNocm9tZTpcL1wvLio/WyInXT5bXHNdKjxcL3NjcmlwdD4vaWcsIiIpOwotcmV0dXJuIF8yNjsKLX07Ci1HZWNrby5wcm90b3R5cGUub25FeGVjQ29tbWFuZD1mdW5jdGlvbihfMjcsVUksXzI5KXsKLXRyeXsKLXRoaXMuZWRpdG9yLl9kb2MuZXhlY0NvbW1hbmQoInVzZUNTUyIsZmFsc2UsdHJ1ZSk7Ci10aGlzLmVkaXRvci5fZG9jLmV4ZWNDb21tYW5kKCJzdHlsZVdpdGhDU1MiLGZhbHNlLGZhbHNlKTsKLX0KLWNhdGNoKGV4KXsKLX0KLXN3aXRjaChfMjcpewotY2FzZSAicGFzdGUiOgotYWxlcnQoWGluaGEuX2xjKCJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIikpOwotcmV0dXJuIHRydWU7Ci1icmVhazsKLWNhc2UgInJlbW92ZWZvcm1hdCI6Ci12YXIgXzJhPXRoaXMuZWRpdG9yOwotdmFyIHNlbD1fMmEuZ2V0U2VsZWN0aW9uKCk7Ci12YXIgXzJjPV8yYS5zYXZlU2VsZWN0aW9uKHNlbCk7Ci12YXIgXzJkPV8yYS5jcmVhdGVSYW5nZShzZWwpOwotdmFyIGVscz1fMmEuX2RvYy5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Ci12YXIgXzJmPShfMmQuc3RhcnRDb250YWluZXIubm9kZVR5cGU9PTEpP18yZC5zdGFydENvbnRhaW5lcjpfMmQuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZTsKLXZhciBpLGVsOwotaWYoc2VsLmlzQ29sbGFwc2VkKXsKLV8yZC5zZWxlY3ROb2RlQ29udGVudHMoXzJhLl9kb2MuYm9keSk7Ci19Ci1mb3IoaT0wO2k8ZWxzLmxlbmd0aDtpKyspewotZWw9ZWxzW2ldOwotaWYoXzJkLmlzUG9pbnRJblJhbmdlKGVsLDApfHwoZWxzW2ldPT1fMmYmJl8yZC5zdGFydE9mZnNldD09MCkpewotZWwucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpOwotfQotfQotdGhpcy5lZGl0b3IuX2RvYy5leGVjQ29tbWFuZChfMjcsVUksXzI5KTsKLV8yYS5yZXN0b3JlU2VsZWN0aW9uKF8yYyk7Ci1yZXR1cm4gdHJ1ZTsKLWJyZWFrOwotfQotcmV0dXJuIGZhbHNlOwotfTsKLUdlY2tvLnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihldil7Ci1pZihldi50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0iaHIiKXsKLXZhciBzZWw9dGhpcy5lZGl0b3IuZ2V0U2VsZWN0aW9uKCk7Ci12YXIgXzM0PXRoaXMuZWRpdG9yLmNyZWF0ZVJhbmdlKHNlbCk7Ci1fMzQuc2VsZWN0Tm9kZShldi50YXJnZXQpOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5pbnNlcnROb2RlQXRTZWxlY3Rpb249ZnVuY3Rpb24oXzM1KXsKLWlmKF8zNS5vd25lckRvY3VtZW50IT10aGlzLl9kb2MpewotdHJ5ewotXzM1PXRoaXMuX2RvYy5hZG9wdE5vZGUoXzM1KTsKLX0KLWNhdGNoKGUpewotfQotfQotdmFyIHNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotdmFyIF8zNz10aGlzLmNyZWF0ZVJhbmdlKHNlbCk7Ci1zZWwucmVtb3ZlQWxsUmFuZ2VzKCk7Ci1fMzcuZGVsZXRlQ29udGVudHMoKTsKLXZhciBfMzg9XzM3LnN0YXJ0Q29udGFpbmVyOwotdmFyIHBvcz1fMzcuc3RhcnRPZmZzZXQ7Ci12YXIgXzNhPV8zNTsKLXN3aXRjaChfMzgubm9kZVR5cGUpewotY2FzZSAzOgotaWYoXzM1Lm5vZGVUeXBlPT0zKXsKLV8zOC5pbnNlcnREYXRhKHBvcyxfMzUuZGF0YSk7Ci1fMzc9dGhpcy5jcmVhdGVSYW5nZSgpOwotXzM3LnNldEVuZChfMzgscG9zK18zNS5sZW5ndGgpOwotXzM3LnNldFN0YXJ0KF8zOCxwb3MrXzM1Lmxlbmd0aCk7Ci1zZWwuYWRkUmFuZ2UoXzM3KTsKLX1lbHNlewotXzM4PV8zOC5zcGxpdFRleHQocG9zKTsKLWlmKF8zNS5ub2RlVHlwZT09MTEpewotXzNhPV8zYS5maXJzdENoaWxkOwotfQotXzM4LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKF8zNSxfMzgpOwotdGhpcy5zZWxlY3ROb2RlQ29udGVudHMoXzNhKTsKLXRoaXMudXBkYXRlVG9vbGJhcigpOwotfQotYnJlYWs7Ci1jYXNlIDE6Ci1pZihfMzUubm9kZVR5cGU9PTExKXsKLV8zYT1fM2EuZmlyc3RDaGlsZDsKLX0KLV8zOC5pbnNlcnRCZWZvcmUoXzM1LF8zOC5jaGlsZE5vZGVzW3Bvc10pOwotdGhpcy5zZWxlY3ROb2RlQ29udGVudHMoXzNhKTsKLXRoaXMudXBkYXRlVG9vbGJhcigpOwotYnJlYWs7Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmdldFBhcmVudEVsZW1lbnQ9ZnVuY3Rpb24oc2VsKXsKLWlmKHR5cGVvZiBzZWw9PSJ1bmRlZmluZWQiKXsKLXNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotfQotdmFyIF8zYz10aGlzLmNyZWF0ZVJhbmdlKHNlbCk7Ci10cnl7Ci12YXIgcD1fM2MuY29tbW9uQW5jZXN0b3JDb250YWluZXI7Ci1pZighXzNjLmNvbGxhcHNlZCYmXzNjLnN0YXJ0Q29udGFpbmVyPT1fM2MuZW5kQ29udGFpbmVyJiZfM2Muc3RhcnRPZmZzZXQtXzNjLmVuZE9mZnNldDw9MSYmXzNjLnN0YXJ0Q29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSl7Ci1wPV8zYy5zdGFydENvbnRhaW5lci5jaGlsZE5vZGVzW18zYy5zdGFydE9mZnNldF07Ci19Ci13aGlsZShwLm5vZGVUeXBlPT0zKXsKLXA9cC5wYXJlbnROb2RlOwotfQotcmV0dXJuIHA7Ci19Ci1jYXRjaChleCl7Ci1yZXR1cm4gbnVsbDsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuYWN0aXZlRWxlbWVudD1mdW5jdGlvbihzZWwpewotaWYoKHNlbD09PW51bGwpfHx0aGlzLnNlbGVjdGlvbkVtcHR5KHNlbCkpewotcmV0dXJuIG51bGw7Ci19Ci1pZighc2VsLmlzQ29sbGFwc2VkKXsKLWlmKHNlbC5hbmNob3JOb2RlLmNoaWxkTm9kZXMubGVuZ3RoPnNlbC5hbmNob3JPZmZzZXQmJnNlbC5hbmNob3JOb2RlLmNoaWxkTm9kZXNbc2VsLmFuY2hvck9mZnNldF0ubm9kZVR5cGU9PTEpewotcmV0dXJuIHNlbC5hbmNob3JOb2RlLmNoaWxkTm9kZXNbc2VsLmFuY2hvck9mZnNldF07Ci19ZWxzZXsKLWlmKHNlbC5hbmNob3JOb2RlLm5vZGVUeXBlPT0xKXsKLXJldHVybiBzZWwuYW5jaG9yTm9kZTsKLX1lbHNlewotcmV0dXJuIG51bGw7Ci19Ci19Ci19Ci1yZXR1cm4gbnVsbDsKLX07Ci1YaW5oYS5wcm90b3R5cGUuc2VsZWN0aW9uRW1wdHk9ZnVuY3Rpb24oc2VsKXsKLWlmKCFzZWwpewotcmV0dXJuIHRydWU7Ci19Ci1pZih0eXBlb2Ygc2VsLmlzQ29sbGFwc2VkIT0idW5kZWZpbmVkIil7Ci1yZXR1cm4gc2VsLmlzQ29sbGFwc2VkOwotfQotcmV0dXJuIHRydWU7Ci19OwotWGluaGEucHJvdG90eXBlLnNhdmVTZWxlY3Rpb249ZnVuY3Rpb24oKXsKLXJldHVybiB0aGlzLmNyZWF0ZVJhbmdlKHRoaXMuZ2V0U2VsZWN0aW9uKCkpLmNsb25lUmFuZ2UoKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUucmVzdG9yZVNlbGVjdGlvbj1mdW5jdGlvbihfNDApewotdHJ5ewotdmFyIHNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotc2VsLnJlbW92ZUFsbFJhbmdlcygpOwotc2VsLmFkZFJhbmdlKF80MCk7Ci19Ci1jYXRjaChlKXsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuc2VsZWN0Tm9kZUNvbnRlbnRzPWZ1bmN0aW9uKF80MixfNDMpewotdGhpcy5mb2N1c0VkaXRvcigpOwotdGhpcy5mb3JjZVJlZHJhdygpOwotdmFyIF80NDsKLXZhciBfNDU9dHlwZW9mIF80Mz09InVuZGVmaW5lZCI/dHJ1ZTpmYWxzZTsKLXZhciBzZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLV80ND10aGlzLl9kb2MuY3JlYXRlUmFuZ2UoKTsKLWlmKCFfNDIpewotc2VsLnJlbW92ZUFsbFJhbmdlcygpOwotcmV0dXJuOwotfQotaWYoXzQ1JiZfNDIudGFnTmFtZSYmXzQyLnRhZ05hbWUudG9Mb3dlckNhc2UoKS5tYXRjaCgvdGFibGV8aW1nfGlucHV0fHRleHRhcmVhfHNlbGVjdC8pKXsKLV80NC5zZWxlY3ROb2RlKF80Mik7Ci19ZWxzZXsKLV80NC5zZWxlY3ROb2RlQ29udGVudHMoXzQyKTsKLX0KLXNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKLXNlbC5hZGRSYW5nZShfNDQpOwotaWYodHlwZW9mIF80MyE9InVuZGVmaW5lZCIpewotaWYoXzQzKXsKLXNlbC5jb2xsYXBzZShfNDQuc3RhcnRDb250YWluZXIsXzQ0LnN0YXJ0T2Zmc2V0KTsKLX1lbHNlewotc2VsLmNvbGxhcHNlKF80NC5lbmRDb250YWluZXIsXzQ0LmVuZE9mZnNldCk7Ci19Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmluc2VydEhUTUw9ZnVuY3Rpb24oXzQ3KXsKLXZhciBzZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLXZhciBfNDk9dGhpcy5jcmVhdGVSYW5nZShzZWwpOwotdGhpcy5mb2N1c0VkaXRvcigpOwotdmFyIF80YT10aGlzLl9kb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotdmFyIGRpdj10aGlzLl9kb2MuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci1kaXYuaW5uZXJIVE1MPV80NzsKLXdoaWxlKGRpdi5maXJzdENoaWxkKXsKLV80YS5hcHBlbmRDaGlsZChkaXYuZmlyc3RDaGlsZCk7Ci19Ci12YXIgXzRjPXRoaXMuaW5zZXJ0Tm9kZUF0U2VsZWN0aW9uKF80YSk7Ci19OwotWGluaGEucHJvdG90eXBlLmdldFNlbGVjdGVkSFRNTD1mdW5jdGlvbigpewotdmFyIHNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotaWYoc2VsLmlzQ29sbGFwc2VkKXsKLXJldHVybiAiIjsKLX0KLXZhciBfNGU9dGhpcy5jcmVhdGVSYW5nZShzZWwpOwotcmV0dXJuIFhpbmhhLmdldEhUTUwoXzRlLmNsb25lQ29udGVudHMoKSxmYWxzZSx0aGlzKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uPWZ1bmN0aW9uKCl7Ci1yZXR1cm4gdGhpcy5faWZyYW1lLmNvbnRlbnRXaW5kb3cuZ2V0U2VsZWN0aW9uKCk7Ci19OwotWGluaGEucHJvdG90eXBlLmNyZWF0ZVJhbmdlPWZ1bmN0aW9uKHNlbCl7Ci10aGlzLmFjdGl2YXRlRWRpdG9yKCk7Ci1pZih0eXBlb2Ygc2VsIT0idW5kZWZpbmVkIil7Ci10cnl7Ci1yZXR1cm4gc2VsLmdldFJhbmdlQXQoMCk7Ci19Ci1jYXRjaChleCl7Ci1yZXR1cm4gdGhpcy5fZG9jLmNyZWF0ZVJhbmdlKCk7Ci19Ci19ZWxzZXsKLXJldHVybiB0aGlzLl9kb2MuY3JlYXRlUmFuZ2UoKTsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuaXNLZXlFdmVudD1mdW5jdGlvbihfNTApewotcmV0dXJuIF81MC50eXBlPT0ia2V5cHJlc3MiOwotfTsKLVhpbmhhLnByb3RvdHlwZS5nZXRLZXk9ZnVuY3Rpb24oXzUxKXsKLXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKF81MS5jaGFyQ29kZSk7Ci19OwotWGluaGEuZ2V0T3V0ZXJIVE1MPWZ1bmN0aW9uKF81Mil7Ci1yZXR1cm4gKG5ldyBYTUxTZXJpYWxpemVyKCkpLnNlcmlhbGl6ZVRvU3RyaW5nKF81Mik7Ci19OwotWGluaGEuY2M9U3RyaW5nLmZyb21DaGFyQ29kZSg4Mjg2KTsKLVhpbmhhLnByb3RvdHlwZS5zZXRDQz1mdW5jdGlvbihfNTMpewotdmFyIGNjPVhpbmhhLmNjOwotdHJ5ewotaWYoXzUzPT0idGV4dGFyZWEiKXsKLXZhciB0YT10aGlzLl90ZXh0QXJlYTsKLXZhciBfNTY9dGEuc2VsZWN0aW9uU3RhcnQ7Ci12YXIgXzU3PXRhLnZhbHVlLnN1YnN0cmluZygwLF81Nik7Ci12YXIgXzU4PXRhLnZhbHVlLnN1YnN0cmluZyhfNTYsdGEudmFsdWUubGVuZ3RoKTsKLWlmKF81OC5tYXRjaCgvXltePF0qPi8pKXsKLXZhciBfNTk9XzU4LmluZGV4T2YoIj4iKSsxOwotdGEudmFsdWU9XzU3K181OC5zdWJzdHJpbmcoMCxfNTkpK2NjK181OC5zdWJzdHJpbmcoXzU5LF81OC5sZW5ndGgpOwotfWVsc2V7Ci10YS52YWx1ZT1fNTcrY2MrXzU4OwotfQotdGEudmFsdWU9dGEudmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKCIoJlteIitjYysiXSo/KSgiK2NjKyIpKFteIitjYysiXSo/OykiKSwiJDEkMyQyIik7Ci10YS52YWx1ZT10YS52YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoIig8c2NyaXB0W14+XSo+W14iK2NjKyJdKj8pKCIrY2MrIikoW14iK2NjKyJdKj88L3NjcmlwdD4pIiksIiQxJDMkMiIpOwotdGEudmFsdWU9dGEudmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKCJeKFteIitjYysiXSopKCIrY2MrIikoW14iK2NjKyJdKjxib2R5W14+XSo+KSguKj8pIiksIiQxJDMkMiQ0Iik7Ci19ZWxzZXsKLXZhciBzZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLXNlbC5nZXRSYW5nZUF0KDApLmluc2VydE5vZGUodGhpcy5fZG9jLmNyZWF0ZVRleHROb2RlKGNjKSk7Ci19Ci19Ci1jYXRjaChlKXsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuZmluZENDPWZ1bmN0aW9uKF81Yil7Ci1pZihfNWI9PSJ0ZXh0YXJlYSIpewotdmFyIHRhPXRoaXMuX3RleHRBcmVhOwotdmFyIHBvcz10YS52YWx1ZS5pbmRleE9mKFhpbmhhLmNjKTsKLWlmKHBvcz09LTEpewotcmV0dXJuOwotfQotdmFyIGVuZD1wb3MrWGluaGEuY2MubGVuZ3RoOwotdmFyIF81Zj10YS52YWx1ZS5zdWJzdHJpbmcoMCxwb3MpOwotdmFyIF82MD10YS52YWx1ZS5zdWJzdHJpbmcoZW5kLHRhLnZhbHVlLmxlbmd0aCk7Ci10YS52YWx1ZT1fNWY7Ci10YS5zY3JvbGxUb3A9dGEuc2Nyb2xsSGVpZ2h0OwotdmFyIF82MT10YS5zY3JvbGxUb3A7Ci10YS52YWx1ZSs9XzYwOwotdGEuc2V0U2VsZWN0aW9uUmFuZ2UocG9zLHBvcyk7Ci10YS5mb2N1cygpOwotdGEuc2Nyb2xsVG9wPV82MTsKLX1lbHNlewotdHJ5ewotdmFyIGRvYz10aGlzLl9kb2M7Ci1kb2MuYm9keS5pbm5lckhUTUw9ZG9jLmJvZHkuaW5uZXJIVE1MLnJlcGxhY2UobmV3IFJlZ0V4cChYaW5oYS5jYyksIjxzcGFuIGlkPVwiWGluaGFFZGl0aW5nUG9zdGlvblwiPjwvc3Bhbj4iKTsKLXZhciBfNjM9ZG9jLmdldEVsZW1lbnRCeUlkKCJYaW5oYUVkaXRpbmdQb3N0aW9uIik7Ci10aGlzLnNlbGVjdE5vZGVDb250ZW50cyhfNjMpOwotdGhpcy5zY3JvbGxUb0VsZW1lbnQoXzYzKTsKLV82My5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKF82Myk7Ci10aGlzLl9pZnJhbWUuY29udGVudFdpbmRvdy5mb2N1cygpOwotfQotY2F0Y2goZSl7Ci19Ci19Ci19OwotWGluaGEucHJvdG90eXBlLl9zdGFuZGFyZFRvZ2dsZUJvcmRlcnM9WGluaGEucHJvdG90eXBlLl90b2dnbGVCb3JkZXJzOwotWGluaGEucHJvdG90eXBlLl90b2dnbGVCb3JkZXJzPWZ1bmN0aW9uKCl7Ci12YXIgXzY0PXRoaXMuX3N0YW5kYXJkVG9nZ2xlQm9yZGVycygpOwotdmFyIF82NT10aGlzLl9kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRBQkxFIik7Ci1mb3IodmFyIGk9MDtpPF82NS5sZW5ndGg7aSsrKXsKLV82NVtpXS5zdHlsZS5kaXNwbGF5PSJub25lIjsKLV82NVtpXS5zdHlsZS5kaXNwbGF5PSJ0YWJsZSI7Ci19Ci1yZXR1cm4gXzY0OwotfTsKLVhpbmhhLmdldERvY3R5cGU9ZnVuY3Rpb24oZG9jKXsKLXZhciBkPSIiOwotaWYoZG9jLmRvY3R5cGUpewotZCs9IjwhRE9DVFlQRSAiK2RvYy5kb2N0eXBlLm5hbWUrIiBQVUJMSUMgIjsKLWQrPWRvYy5kb2N0eXBlLnB1YmxpY0lkPyJcIiIrZG9jLmRvY3R5cGUucHVibGljSWQrIlwiIjoiIjsKLWQrPWRvYy5kb2N0eXBlLnN5c3RlbUlkPyIgXCIiK2RvYy5kb2N0eXBlLnN5c3RlbUlkKyJcIiI6IiI7Ci1kKz0iPiI7Ci19Ci1yZXR1cm4gZDsKLX07Ci0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0dlY2tvL3BhcmFIYW5kbGVyQmVzdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0dlY2tvL3BhcmFIYW5kbGVyQmVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE1N2E3ZC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9HZWNrby9wYXJhSGFuZGxlckJlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTUgKzAsMCBAQAotLyogVGhpcyBjb21wcmVzc2VkIGZpbGUgaXMgcGFydCBvZiBYaW5oYS4gRm9yIHVuY29tcHJlc3NlZCBzb3VyY2VzLCBmb3J1bSwgYW5kIGJ1ZyByZXBvcnRzLCBnbyB0byB4aW5oYS5vcmcgKi8KLS8qIFRoZSBVUkwgb2YgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGlzIGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvR2Vja28vcGFyYUhhbmRsZXJCZXN0LmpzICovCi1FbnRlclBhcmFncmFwaHMuX3BsdWdpbkluZm89e25hbWU6IkVudGVyUGFyYWdyYXBocyIsdmVyc2lvbjoiMS4wIixkZXZlbG9wZXI6IkFkYW0gV3JpZ2h0IixkZXZlbG9wZXJfdXJsOiJodHRwOi8vd3d3LmhpcGlrYXQub3JnLyIsc3BvbnNvcjoiVGhlIFVuaXZlcnNpdHkgb2YgV2VzdGVybiBBdXN0cmFsaWEiLHNwb25zb3JfdXJsOiJodHRwOi8vd3d3LnV3YS5lZHUuYXUvIixsaWNlbnNlOiJodG1sQXJlYSJ9OwotRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5fd2hpdGVTcGFjZT0vXlxzKiQvOwotRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5fcEV4Y2x1c2lvbnM9L14oYWRkcmVzc3xibG9ja3F1b3RlfGJvZHl8ZGR8ZGl2fGRsfGR0fGZpZWxkc2V0fGZvcm18aDF8aDJ8aDN8aDR8aDV8aDZ8aHJ8bGl8bm9zY3JpcHR8b2x8cHxwcmV8dGFibGV8dWwpJC9pOwotRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5fcENvbnRhaW5lcnM9L14oYm9keXxkZWx8ZGl2fGZpZWxkc2V0fGZvcm18aW5zfG1hcHxub3NjcmlwdHxvYmplY3R8dGR8dGgpJC9pOwotRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5fcEJyZWFrPS9eKGFkZHJlc3N8cHJlfGJsb2NrcXVvdGUpJC9pOwotRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5fcGVybUVtcHR5PS9eKGFyZWF8YmFzZXxiYXNlZm9udHxicnxjb2x8ZnJhbWV8aHJ8aW1nfGlucHV0fGlzaW5kZXh8bGlua3xtZXRhfHBhcmFtKSQvaTsKLUVudGVyUGFyYWdyYXBocy5wcm90b3R5cGUuX2VsZW1Tb2xpZD0vXihhcHBsZXR8YnJ8YnV0dG9ufGhyfGltZ3xpbnB1dHx0YWJsZSkkL2k7Ci1FbnRlclBhcmFncmFwaHMucHJvdG90eXBlLl9waWZ5U2libGluZz0vXihhZGRyZXNzfGJsb2NrcXVvdGV8ZGVsfGRpdnxkbHxmaWVsZHNldHxmb3JtfGgxfGgyfGgzfGg0fGg1fGg2fGhyfGluc3xtYXB8bm9zY3JpcHR8b2JqZWN0fG9sfHB8cHJlfHRhYmxlfHVsfCkkL2k7Ci1FbnRlclBhcmFncmFwaHMucHJvdG90eXBlLl9waWZ5Rm9yY2VkPS9eKHVsfG9sfGRsfHRhYmxlKSQvaTsKLUVudGVyUGFyYWdyYXBocy5wcm90b3R5cGUuX3BpZnlQYXJlbnQ9L14oZGR8ZHR8bGl8dGR8dGh8dHIpJC9pOwotZnVuY3Rpb24gRW50ZXJQYXJhZ3JhcGhzKF8xKXsKLXRoaXMuZWRpdG9yPV8xOwotaWYoWGluaGEuaXNfZ2Vja28pewotdGhpcy5vbktleVByZXNzPXRoaXMuX19vbktleVByZXNzOwotfQotfTsKLUVudGVyUGFyYWdyYXBocy5wcm90b3R5cGUubmFtZT0iRW50ZXJQYXJhZ3JhcGhzIjsKLUVudGVyUGFyYWdyYXBocy5wcm90b3R5cGUuaW5zZXJ0QWRqYWNlbnRFbGVtZW50PWZ1bmN0aW9uKF8yLF8zLGVsKXsKLWlmKF8zPT0iQmVmb3JlQmVnaW4iKXsKLV8yLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsLF8yKTsKLX1lbHNlewotaWYoXzM9PSJBZnRlckVuZCIpewotXzIubmV4dFNpYmxpbmc/XzIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZWwsXzIubmV4dFNpYmxpbmcpOl8yLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoZWwpOwotfWVsc2V7Ci1pZihfMz09IkFmdGVyQmVnaW4iJiZfMi5maXJzdENoaWxkKXsKLV8yLmluc2VydEJlZm9yZShlbCxfMi5maXJzdENoaWxkKTsKLX1lbHNlewotaWYoXzM9PSJCZWZvcmVFbmQifHxfMz09IkFmdGVyQmVnaW4iKXsKLV8yLmFwcGVuZENoaWxkKGVsKTsKLX0KLX0KLX0KLX0KLX07Ci1FbnRlclBhcmFncmFwaHMucHJvdG90eXBlLmZvckVhY2hOb2RlVW5kZXI9ZnVuY3Rpb24oXzUsXzYsXzcsXzgpewotdmFyIF85LF9hOwotaWYoXzUubm9kZVR5cGU9PTExJiZfNS5maXJzdENoaWxkKXsKLV85PV81LmZpcnN0Q2hpbGQ7Ci1fYT1fNS5sYXN0Q2hpbGQ7Ci19ZWxzZXsKLV85PV9hPV81OwotfQotd2hpbGUoX2EubGFzdENoaWxkKXsKLV9hPV9hLmxhc3RDaGlsZDsKLX0KLXJldHVybiB0aGlzLmZvckVhY2hOb2RlKF85LF9hLF82LF83LF84KTsKLX07Ci1FbnRlclBhcmFncmFwaHMucHJvdG90eXBlLmZvckVhY2hOb2RlPWZ1bmN0aW9uKF9iLF9jLF9kLF9lLF9mKXsKLXZhciBfMTA9ZnVuY3Rpb24oXzExLF8xMil7Ci1yZXR1cm4gKF8xMj09Imx0ciI/XzExLm5leHRTaWJsaW5nOl8xMS5wcmV2aW91c1NpYmxpbmcpOwotfTsKLXZhciBfMTM9ZnVuY3Rpb24oXzE0LF8xNSl7Ci1yZXR1cm4gKF8xNT09Imx0ciI/XzE0LmZpcnN0Q2hpbGQ6XzE0Lmxhc3RDaGlsZCk7Ci19OwotdmFyIF8xNixfMTcsXzE4OwotdmFyIF8xOT1fZjsKLXZhciBfMWE9ZmFsc2U7Ci13aGlsZShfMTYhPV9lPT0ibHRyIj9fYzpfYil7Ci1pZighXzE2KXsKLV8xNj1fZT09Imx0ciI/X2I6X2M7Ci19ZWxzZXsKLWlmKF8xMyhfMTYsX2UpKXsKLV8xNj1fMTMoXzE2LF9lKTsKLX1lbHNlewotaWYoXzEwKF8xNixfZSkpewotXzE2PV8xMChfMTYsX2UpOwotfWVsc2V7Ci1fMTc9XzE2Owotd2hpbGUoIV8xMChfMTcsX2UpJiZfMTchPShfZT09Imx0ciI/X2M6X2IpKXsKLV8xNz1fMTcucGFyZW50Tm9kZTsKLX0KLV8xNj0oXzEwKF8xNyxfZSk/XzEwKF8xNyxfZSk6XzE3KTsKLX0KLX0KLX0KLV8xYT0oXzE2PT0oX2U9PSJsdHIiP19jOl9iKSk7Ci1zd2l0Y2goX2QpewotY2FzZSAiY3VsbGlkcyI6Ci1fMTg9dGhpcy5fZmVuQ3VsbElkcyhfMTYsXzE5KTsKLWJyZWFrOwotY2FzZSAiZmluZF9maWxsIjoKLV8xOD10aGlzLl9mZW5FbXB0eVNldChfMTYsXzE5LF9kLF8xYSk7Ci1icmVhazsKLWNhc2UgImZpbmRfY3Vyc29ycG9pbnQiOgotXzE4PXRoaXMuX2ZlbkVtcHR5U2V0KF8xNixfMTksX2QsXzFhKTsKLWJyZWFrOwotfQotaWYoXzE4WzBdKXsKLXJldHVybiBfMThbMV07Ci19Ci1pZihfMWEpewotYnJlYWs7Ci19Ci1pZihfMThbMV0pewotXzE5PV8xOFsxXTsKLX0KLX0KLXJldHVybiBmYWxzZTsKLX07Ci1FbnRlclBhcmFncmFwaHMucHJvdG90eXBlLl9mZW5FbXB0eVNldD1mdW5jdGlvbihfMWIsXzFjLF8xZCxfMWUpewotaWYoIV8xYyYmIV8xYi5maXJzdENoaWxkKXsKLV8xYz1fMWI7Ci19Ci1pZigoXzFiLm5vZGVUeXBlPT0xJiZ0aGlzLl9lbGVtU29saWQudGVzdChfMWIubm9kZU5hbWUpKXx8KF8xYi5ub2RlVHlwZT09MyYmIXRoaXMuX3doaXRlU3BhY2UudGVzdChfMWIubm9kZVZhbHVlKSl8fChfMWIubm9kZVR5cGUhPTEmJl8xYi5ub2RlVHlwZSE9Mykpewotc3dpdGNoKF8xZCl7Ci1jYXNlICJmaW5kX2ZpbGwiOgotcmV0dXJuIG5ldyBBcnJheSh0cnVlLGZhbHNlKTsKLWJyZWFrOwotY2FzZSAiZmluZF9jdXJzb3Jwb2ludCI6Ci1yZXR1cm4gbmV3IEFycmF5KHRydWUsXzFiKTsKLWJyZWFrOwotfQotfQotaWYoXzFlKXsKLXJldHVybiBuZXcgQXJyYXkodHJ1ZSxfMWMpOwotfQotcmV0dXJuIG5ldyBBcnJheShmYWxzZSxfMWMpOwotfTsKLUVudGVyUGFyYWdyYXBocy5wcm90b3R5cGUuX2ZlbkN1bGxJZHM9ZnVuY3Rpb24oXzFmLF8yMCxfMjEpewotaWYoXzIwLmlkKXsKLV8yMVtfMjAuaWRdP18yMC5pZD0iIjpfMjFbXzIwLmlkXT10cnVlOwotfQotcmV0dXJuIG5ldyBBcnJheShmYWxzZSxfMjEpOwotfTsKLUVudGVyUGFyYWdyYXBocy5wcm90b3R5cGUucHJvY2Vzc1NpZGU9ZnVuY3Rpb24ocm5nLF8yMyl7Ci12YXIgXzI0PWZ1bmN0aW9uKF8yNSxfMjYpewotcmV0dXJuIChfMjY9PSJsZWZ0Ij9fMjUucHJldmlvdXNTaWJsaW5nOl8yNS5uZXh0U2libGluZyk7Ci19OwotdmFyIF8yNz1fMjM9PSJsZWZ0Ij9ybmcuc3RhcnRDb250YWluZXI6cm5nLmVuZENvbnRhaW5lcjsKLXZhciBfMjg9XzIzPT0ibGVmdCI/cm5nLnN0YXJ0T2Zmc2V0OnJuZy5lbmRPZmZzZXQ7Ci12YXIgXzI5LF8yYT1fMjc7Ci13aGlsZShfMmEubm9kZVR5cGU9PTEmJiF0aGlzLl9wZXJtRW1wdHkudGVzdChfMmEubm9kZU5hbWUpKXsKLV8yYT0oXzI4P18yYS5sYXN0Q2hpbGQ6XzJhLmZpcnN0Q2hpbGQpOwotfQotd2hpbGUoXzI5PV8yOT8oXzI0KF8yOSxfMjMpP18yNChfMjksXzIzKTpfMjkucGFyZW50Tm9kZSk6XzJhKXsKLWlmKF8yNChfMjksXzIzKSl7Ci1pZih0aGlzLl9wRXhjbHVzaW9ucy50ZXN0KF8yNChfMjksXzIzKS5ub2RlTmFtZSkpewotcmV0dXJuIHRoaXMucHJvY2Vzc1JuZyhybmcsXzIzLF8yOSxfMjQoXzI5LF8yMyksKF8yMz09ImxlZnQiPyJBZnRlckVuZCI6IkJlZm9yZUJlZ2luIiksdHJ1ZSxmYWxzZSk7Ci19Ci19ZWxzZXsKLWlmKHRoaXMuX3BDb250YWluZXJzLnRlc3QoXzI5LnBhcmVudE5vZGUubm9kZU5hbWUpKXsKLXJldHVybiB0aGlzLnByb2Nlc3NSbmcocm5nLF8yMyxfMjksXzI5LnBhcmVudE5vZGUsKF8yMz09ImxlZnQiPyJBZnRlckJlZ2luIjoiQmVmb3JlRW5kIiksdHJ1ZSxmYWxzZSk7Ci19ZWxzZXsKLWlmKHRoaXMuX3BFeGNsdXNpb25zLnRlc3QoXzI5LnBhcmVudE5vZGUubm9kZU5hbWUpKXsKLWlmKHRoaXMuX3BCcmVhay50ZXN0KF8yOS5wYXJlbnROb2RlLm5vZGVOYW1lKSl7Ci1yZXR1cm4gdGhpcy5wcm9jZXNzUm5nKHJuZyxfMjMsXzI5LF8yOS5wYXJlbnROb2RlLChfMjM9PSJsZWZ0Ij8iQWZ0ZXJCZWdpbiI6IkJlZm9yZUVuZCIpLGZhbHNlLChfMjM9PSJsZWZ0Ij90cnVlOmZhbHNlKSk7Ci19ZWxzZXsKLXJldHVybiB0aGlzLnByb2Nlc3NSbmcocm5nLF8yMywoXzI5PV8yOS5wYXJlbnROb2RlKSwoXzI0KF8yOSxfMjMpP18yNChfMjksXzIzKTpfMjkucGFyZW50Tm9kZSksKF8yNChfMjksXzIzKT8oXzIzPT0ibGVmdCI/IkFmdGVyRW5kIjoiQmVmb3JlQmVnaW4iKTooXzIzPT0ibGVmdCI/IkFmdGVyQmVnaW4iOiJCZWZvcmVFbmQiKSksZmFsc2UsZmFsc2UpOwotfQotfQotfQotfQotfQotfTsKLUVudGVyUGFyYWdyYXBocy5wcm90b3R5cGUucHJvY2Vzc1JuZz1mdW5jdGlvbihybmcsXzJjLF8yZCxfMmUsXzJmLF8zMCxfMzEpewotdmFyIF8zMj1fMmM9PSJsZWZ0Ij9ybmcuc3RhcnRDb250YWluZXI6cm5nLmVuZENvbnRhaW5lcjsKLXZhciBfMzM9XzJjPT0ibGVmdCI/cm5nLnN0YXJ0T2Zmc2V0OnJuZy5lbmRPZmZzZXQ7Ci12YXIgXzM0PXRoaXMuZWRpdG9yOwotdmFyIF8zNT1fMzQuX2RvYy5jcmVhdGVSYW5nZSgpOwotXzM1LnNlbGVjdE5vZGUoXzJkKTsKLWlmKF8yYz09ImxlZnQiKXsKLV8zNS5zZXRFbmQoXzMyLF8zMyk7Ci1ybmcuc2V0U3RhcnQoXzM1LnN0YXJ0Q29udGFpbmVyLF8zNS5zdGFydE9mZnNldCk7Ci19ZWxzZXsKLWlmKF8yYz09InJpZ2h0Iil7Ci1fMzUuc2V0U3RhcnQoXzMyLF8zMyk7Ci1ybmcuc2V0RW5kKF8zNS5lbmRDb250YWluZXIsXzM1LmVuZE9mZnNldCk7Ci19Ci19Ci12YXIgY250PV8zNS5jbG9uZUNvbnRlbnRzKCk7Ci10aGlzLmZvckVhY2hOb2RlVW5kZXIoY250LCJjdWxsaWRzIiwibHRyIix0aGlzLnRha2VuSWRzLGZhbHNlLGZhbHNlKTsKLXZhciBfMzcsXzM4LF8zOTsKLV8zNz1fMmM9PSJsZWZ0Ij8oXzM1LmVuZENvbnRhaW5lci5ub2RlVHlwZT09Mz90cnVlOmZhbHNlKTooXzM1LnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlPT0zP2ZhbHNlOnRydWUpOwotXzM4PV8zNz9fMzUuc3RhcnRPZmZzZXQ6XzM1LmVuZE9mZnNldDsKLV8zNz1fMzc/XzM1LnN0YXJ0Q29udGFpbmVyOl8zNS5lbmRDb250YWluZXI7Ci1pZih0aGlzLl9waWZ5UGFyZW50LnRlc3QoXzM3Lm5vZGVOYW1lKSYmXzM3LnBhcmVudE5vZGUuY2hpbGROb2Rlcy5pdGVtKDApPT1fMzcpewotd2hpbGUoIXRoaXMuX3BpZnlTaWJsaW5nLnRlc3QoXzM3Lm5vZGVOYW1lKSl7Ci1fMzc9XzM3LnBhcmVudE5vZGU7Ci19Ci19Ci1pZihjbnQubm9kZVR5cGU9PTExJiYhY250LmZpcnN0Q2hpbGQpewotaWYoXzM3Lm5vZGVOYW1lIT0iQk9EWSJ8fChfMzcubm9kZU5hbWU9PSJCT0RZIiYmXzM4IT0wKSl7Ci1jbnQuYXBwZW5kQ2hpbGQoXzM0Ll9kb2MuY3JlYXRlRWxlbWVudChfMzcubm9kZU5hbWUpKTsKLX0KLX0KLV8zOT10aGlzLmZvckVhY2hOb2RlVW5kZXIoY250LCJmaW5kX2ZpbGwiLCJsdHIiLGZhbHNlKTsKLWlmKF8zOSYmdGhpcy5fcGlmeVNpYmxpbmcudGVzdChfMzcubm9kZU5hbWUpJiYoKF8zOD09MCl8fChfMzg9PTEmJnRoaXMuX3BpZnlGb3JjZWQudGVzdChfMzcubm9kZU5hbWUpKSkpewotXzJkPV8zNC5fZG9jLmNyZWF0ZUVsZW1lbnQoInAiKTsKLV8yZC5pbm5lckhUTUw9IiZuYnNwOyI7Ci1pZigoXzJjPT0ibGVmdCIpJiZfMzcucHJldmlvdXNTaWJsaW5nKXsKLXJldHVybiBuZXcgQXJyYXkoXzM3LnByZXZpb3VzU2libGluZywiQWZ0ZXJFbmQiLF8yZCk7Ci19ZWxzZXsKLWlmKChfMmM9PSJyaWdodCIpJiZfMzcubmV4dFNpYmxpbmcpewotcmV0dXJuIG5ldyBBcnJheShfMzcubmV4dFNpYmxpbmcsIkJlZm9yZUJlZ2luIixfMmQpOwotfWVsc2V7Ci1yZXR1cm4gbmV3IEFycmF5KF8zNy5wYXJlbnROb2RlLChfMmM9PSJsZWZ0Ij8iQWZ0ZXJCZWdpbiI6IkJlZm9yZUVuZCIpLF8yZCk7Ci19Ci19Ci19Ci1pZihfMzkpewotaWYoXzM5Lm5vZGVUeXBlPT0zKXsKLV8zOT1fMzQuX2RvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci19Ci1pZigoXzM5Lm5vZGVUeXBlPT0xJiYhdGhpcy5fZWxlbVNvbGlkLnRlc3QoKSl8fF8zOS5ub2RlVHlwZT09MTEpewotdmFyIF8zYT1fMzQuX2RvYy5jcmVhdGVFbGVtZW50KCJwIik7Ci1fM2EuaW5uZXJIVE1MPSImbmJzcDsiOwotXzM5LmFwcGVuZENoaWxkKF8zYSk7Ci19ZWxzZXsKLXZhciBfM2E9XzM0Ll9kb2MuY3JlYXRlRWxlbWVudCgicCIpOwotXzNhLmlubmVySFRNTD0iJm5ic3A7IjsKLV8zOS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShwYXJlbnROb2RlLF8zOSk7Ci19Ci19Ci1pZihfMzkpewotXzJkPV8zOTsKLX1lbHNlewotXzJkPShfMzB8fChjbnQubm9kZVR5cGU9PTExJiYhY250LmZpcnN0Q2hpbGQpKT9fMzQuX2RvYy5jcmVhdGVFbGVtZW50KCJwIik6XzM0Ll9kb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotXzJkLmFwcGVuZENoaWxkKGNudCk7Ci19Ci1pZihfMzEpewotXzJkLmFwcGVuZENoaWxkKF8zNC5fZG9jLmNyZWF0ZUVsZW1lbnQoImJyIikpOwotfQotcmV0dXJuIG5ldyBBcnJheShfMmUsXzJmLF8yZCk7Ci19OwotRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5pc05vcm1hbExpc3RJdGVtPWZ1bmN0aW9uKHJuZyl7Ci12YXIgXzNjLF8zZDsKLV8zYz1ybmcuc3RhcnRDb250YWluZXI7Ci1pZigodHlwZW9mIF8zYy5ub2RlTmFtZSE9InVuZGVmaW5lZCIpJiYoXzNjLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PSJsaSIpKXsKLV8zZD1fM2M7Ci19ZWxzZXsKLWlmKCh0eXBlb2YgXzNjLnBhcmVudE5vZGUhPSJ1bmRlZmluZWQiKSYmKHR5cGVvZiBfM2MucGFyZW50Tm9kZS5ub2RlTmFtZSE9InVuZGVmaW5lZCIpJiYoXzNjLnBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09ImxpIikpewotXzNkPV8zYy5wYXJlbnROb2RlOwotfWVsc2V7Ci1yZXR1cm4gZmFsc2U7Ci19Ci19Ci1pZighXzNkLnByZXZpb3VzU2libGluZyl7Ci1pZihybmcuc3RhcnRPZmZzZXQ9PTApewotcmV0dXJuIGZhbHNlOwotfQotfQotcmV0dXJuIHRydWU7Ci19OwotRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5fX29uS2V5UHJlc3M9ZnVuY3Rpb24oZXYpewotaWYoZXYua2V5Q29kZT09MTMmJiFldi5zaGlmdEtleSYmdGhpcy5lZGl0b3IuX2lmcmFtZS5jb250ZW50V2luZG93LmdldFNlbGVjdGlvbil7Ci1yZXR1cm4gdGhpcy5oYW5kbGVFbnRlcihldik7Ci19Ci19OwotRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5oYW5kbGVFbnRlcj1mdW5jdGlvbihldil7Ci12YXIgXzQwOwotdmFyIHNlbD10aGlzLmVkaXRvci5nZXRTZWxlY3Rpb24oKTsKLXZhciBybmc9dGhpcy5lZGl0b3IuY3JlYXRlUmFuZ2Uoc2VsKTsKLWlmKHRoaXMuaXNOb3JtYWxMaXN0SXRlbShybmcpKXsKLXJldHVybiB0cnVlOwotfQotdGhpcy50YWtlbklkcz1uZXcgT2JqZWN0KCk7Ci12YXIgXzQzPXRoaXMucHJvY2Vzc1NpZGUocm5nLCJsZWZ0Iik7Ci12YXIgXzQ0PXRoaXMucHJvY2Vzc1NpZGUocm5nLCJyaWdodCIpOwotXzQwPV80NFsyXTsKLXNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKLXJuZy5kZWxldGVDb250ZW50cygpOwotdmFyIF80NT10aGlzLmZvckVhY2hOb2RlVW5kZXIoXzQwLCJmaW5kX2N1cnNvcnBvaW50IiwibHRyIixmYWxzZSx0cnVlKTsKLWlmKCFfNDUpewotYWxlcnQoIklOVEVSTkFMIEVSUk9SIC0gY291bGQgbm90IGZpbmQgcGxhY2UgdG8gcHV0IGN1cnNvciBhZnRlciBFTlRFUiIpOwotfQotaWYoXzQzKXsKLXRoaXMuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KF80M1swXSxfNDNbMV0sXzQzWzJdKTsKLX0KLWlmKF80NCYmXzQ0Lm5vZGVUeXBlIT0xKXsKLXRoaXMuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KF80NFswXSxfNDRbMV0sXzQ0WzJdKTsKLX0KLWlmKChfNDUpJiYodGhpcy5fcGVybUVtcHR5LnRlc3QoXzQ1Lm5vZGVOYW1lKSkpewotdmFyIF80Nj0wOwotd2hpbGUoXzQ1LnBhcmVudE5vZGUuY2hpbGROb2Rlcy5pdGVtKF80NikhPV80NSl7Ci1fNDYrKzsKLX0KLXNlbC5jb2xsYXBzZShfNDUucGFyZW50Tm9kZSxfNDYpOwotfWVsc2V7Ci10cnl7Ci1zZWwuY29sbGFwc2UoXzQ1LDApOwotaWYoXzQ1Lm5vZGVUeXBlPT0zKXsKLV80NT1fNDUucGFyZW50Tm9kZTsKLX0KLXRoaXMuZWRpdG9yLnNjcm9sbFRvRWxlbWVudChfNDUpOwotfQotY2F0Y2goZSl7Ci19Ci19Ci10aGlzLmVkaXRvci51cGRhdGVUb29sYmFyKCk7Ci1YaW5oYS5fc3RvcEV2ZW50KGV2KTsKLXJldHVybiB0cnVlOwotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvR2V0SHRtbC9ET013YWxrLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvR2V0SHRtbC9ET013YWxrLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDM2YWUwLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0dldEh0bWwvRE9Nd2Fsay5qcworKysgL2Rldi9udWxsCkBAIC0xLDE5NyArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvbW9kdWxlcy9HZXRIdG1sL0RPTXdhbGsuanMgKi8KLWZ1bmN0aW9uIEdldEh0bWxJbXBsZW1lbnRhdGlvbihfMSl7Ci10aGlzLmVkaXRvcj1fMTsKLX07Ci1HZXRIdG1sSW1wbGVtZW50YXRpb24uX3BsdWdpbkluZm89e25hbWU6IkdldEh0bWxJbXBsZW1lbnRhdGlvbiBET013YWxrIixvcmlnaW46IlhpbmhhIENvcmUiLHZlcnNpb246IiRMYXN0Q2hhbmdlZFJldmlzaW9uOiAxMTg1ICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywiJDEiKSxkZXZlbG9wZXI6IlRoZSBYaW5oYSBDb3JlIERldmVsb3BlciBUZWFtIixkZXZlbG9wZXJfdXJsOiIkSGVhZFVSTDogaHR0cDovL3N2bi54aW5oYS5vcmcvdGFncy8wLjk2LjEvbW9kdWxlcy9HZXRIdG1sL0RPTXdhbGsuanMgJCIucmVwbGFjZSgvXlteOl0qOlxzKiguKilccypcJCQvLCIkMSIpLHNwb25zb3I6IiIsc3BvbnNvcl91cmw6IiIsbGljZW5zZToiaHRtbEFyZWEifTsKLVhpbmhhLmdldEhUTUw9ZnVuY3Rpb24oXzIsXzMsXzQpewotcmV0dXJuIFhpbmhhLmdldEhUTUxXcmFwcGVyKF8yLF8zLF80KTsKLX07Ci1YaW5oYS5lbXB0eUF0dHJpYnV0ZXM9IiBjaGVja2VkIGRpc2FibGVkIGlzbWFwIHJlYWRvbmx5IG5vd3JhcCBjb21wYWN0IGRlY2xhcmUgc2VsZWN0ZWQgZGVmZXIgbXVsdGlwbGUgbm9yZXNpemUgbm9zaGFkZSAiOwotWGluaGEuZ2V0SFRNTFdyYXBwZXI9ZnVuY3Rpb24oXzUsXzYsXzcsXzgpewotdmFyIF85PSIiOwotaWYoIV84KXsKLV84PSIiOwotfQotc3dpdGNoKF81Lm5vZGVUeXBlKXsKLWNhc2UgMTA6Ci1jYXNlIDY6Ci1jYXNlIDEyOgotYnJlYWs7Ci1jYXNlIDI6Ci1icmVhazsKLWNhc2UgNDoKLV85Kz0oWGluaGEuaXNfaWU/KCJcbiIrXzgpOiIiKSsiPCFbQ0RBVEFbIitfNS5kYXRhKyJdXT4iOwotYnJlYWs7Ci1jYXNlIDU6Ci1fOSs9IiYiK181Lm5vZGVWYWx1ZSsiOyI7Ci1icmVhazsKLWNhc2UgNzoKLV85Kz0oWGluaGEuaXNfaWU/KCJcbiIrXzgpOiIiKSsiPCIrIj8iK181LnRhcmdldCsiICIrXzUuZGF0YSsiID8+IjsKLWJyZWFrOwotY2FzZSAxOgotY2FzZSAxMToKLWNhc2UgOToKLXZhciBfYTsKLXZhciBpOwotdmFyIF9jPShfNS5ub2RlVHlwZT09MSk/XzUudGFnTmFtZS50b0xvd2VyQ2FzZSgpOiIiOwotaWYoKF9jPT0ic2NyaXB0Inx8X2M9PSJub3NjcmlwdCIpJiZfNy5jb25maWcuc3RyaXBTY3JpcHRzKXsKLWJyZWFrOwotfQotaWYoXzYpewotXzY9IShfNy5jb25maWcuaHRtbFJlbW92ZVRhZ3MmJl83LmNvbmZpZy5odG1sUmVtb3ZlVGFncy50ZXN0KF9jKSk7Ci19Ci1pZihYaW5oYS5pc19pZSYmX2M9PSJoZWFkIil7Ci1pZihfNil7Ci1fOSs9KFhpbmhhLmlzX2llPygiXG4iK184KToiIikrIjxoZWFkPiI7Ci19Ci12YXIgX2Q9UmVnRXhwLm11bHRpbGluZTsKLVJlZ0V4cC5tdWx0aWxpbmU9dHJ1ZTsKLXZhciBfZT1fNS5pbm5lckhUTUwucmVwbGFjZShYaW5oYS5SRV90YWdOYW1lLGZ1bmN0aW9uKF9mLHAxLHAyKXsKLXJldHVybiBwMStwMi50b0xvd2VyQ2FzZSgpOwotfSkucmVwbGFjZSgvXHMqPVxzKigoW14nIl1bXj5cc10qKShbPlxzXSl8IihbXiJdKykifCcoW14nXSspJykvZywiPVwiJDIkNCQ1XCIkMyIpLnJlcGxhY2UoLzwobGlua3xtZXRhKSgoXHMqXFMqPSJbXiJdKiIpKik+KFtcblxyXSopL2csIjwkMSQyIC8+XG4iKTsKLVJlZ0V4cC5tdWx0aWxpbmU9X2Q7Ci1fOSs9X2UrIlxuIjsKLWlmKF82KXsKLV85Kz0oWGluaGEuaXNfaWU/KCJcbiIrXzgpOiIiKSsiPC9oZWFkPiI7Ci19Ci1icmVhazsKLX1lbHNlewotaWYoXzYpewotX2E9KCEoXzUuaGFzQ2hpbGROb2RlcygpfHxYaW5oYS5uZWVkc0Nsb3NpbmdUYWcoXzUpKSk7Ci1fOSs9KChYaW5oYS5pc0Jsb2NrRWxlbWVudChfNSkpPygiXG4iK184KToiIikrIjwiK181LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKLXZhciBfMTI9XzUuYXR0cmlidXRlczsKLWZvcihpPTA7aTxfMTIubGVuZ3RoOysraSl7Ci12YXIgYT1fMTIuaXRlbShpKTsKLWlmKFhpbmhhLmlzX3JlYWxfZ2Vja28mJihfNS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJpbWciKSYmKChhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PSJoZWlnaHQiKXx8KGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09IndpZHRoIikpKXsKLWlmKCFfNS5jb21wbGV0ZXx8XzUubmF0dXJhbFdpZHRoPT09MCl7Ci1jb250aW51ZTsKLX0KLX0KLWlmKHR5cGVvZiBhLm5vZGVWYWx1ZT09Im9iamVjdCIpewotY29udGludWU7Ci19Ci1pZihfNS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJpbnB1dCImJl81LnR5cGUudG9Mb3dlckNhc2UoKT09ImNoZWNrYm94IiYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT0idmFsdWUiJiZhLm5vZGVWYWx1ZS50b0xvd2VyQ2FzZSgpPT0ib24iKXsKLWNvbnRpbnVlOwotfQotaWYoIWEuc3BlY2lmaWVkJiYhKF81LnRhZ05hbWUudG9Mb3dlckNhc2UoKS5tYXRjaCgvaW5wdXR8b3B0aW9uLykmJmEubm9kZU5hbWU9PSJ2YWx1ZSIpJiYhKF81LnRhZ05hbWUudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXJlYS8pJiZhLm5vZGVOYW1lLm1hdGNoKC9zaGFwZXxjb29yZHMvaSkpKXsKLWNvbnRpbnVlOwotfQotdmFyIF8xND1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci1pZigvX21vel9lZGl0b3JfYm9ndXNfbm9kZS8udGVzdChfMTQpfHwoXzE0PT0iY2xhc3MiJiZhLm5vZGVWYWx1ZT09IndlYmtpdC1ibG9jay1wbGFjZWhvbGRlciIpKXsKLV85PSIiOwotYnJlYWs7Ci19Ci1pZigvKF9tb3opfChjb250ZW50ZWRpdGFibGUpfChfbXNoKS8udGVzdChfMTQpKXsKLWNvbnRpbnVlOwotfQotdmFyIF8xNTsKLWlmKFhpbmhhLmVtcHR5QXR0cmlidXRlcy5pbmRleE9mKCIgIitfMTQrIiAiKSE9LTEpewotXzE1PV8xNDsKLX1lbHNlewotaWYoXzE0IT0ic3R5bGUiKXsKLWlmKHR5cGVvZiBfNVthLm5vZGVOYW1lXSE9InVuZGVmaW5lZCImJl8xNCE9ImhyZWYiJiZfMTQhPSJzcmMiJiYhKC9eb24vLnRlc3QoXzE0KSkpewotXzE1PV81W2Eubm9kZU5hbWVdOwotfWVsc2V7Ci1fMTU9YS5ub2RlVmFsdWU7Ci1pZihfMTQ9PSJjbGFzcyIpewotXzE1PV8xNS5yZXBsYWNlKC9BcHBsZS1zdHlsZS1zcGFuLywiIik7Ci1pZighXzE1KXsKLWNvbnRpbnVlOwotfQotfQotaWYoWGluaGEuaXNfaWUmJihfMTQ9PSJocmVmInx8XzE0PT0ic3JjIikpewotXzE1PV83LnN0cmlwQmFzZVVSTChfMTUpOwotfQotaWYoXzcuY29uZmlnLm9ubHk3Qml0UHJpbnRhYmxlc0luVVJMcyYmKF8xND09ImhyZWYifHxfMTQ9PSJzcmMiKSl7Ci1fMTU9XzE1LnJlcGxhY2UoLyhbXiEtfl0rKS9nLGZ1bmN0aW9uKF8xNil7Ci1yZXR1cm4gZXNjYXBlKF8xNik7Ci19KTsKLX0KLX0KLX1lbHNlewotaWYoIVhpbmhhLmlzX2llKXsKLV8xNT1fNS5zdHlsZS5jc3NUZXh0LnJlcGxhY2UoL3JnYlwoLio/XCkvaWcsZnVuY3Rpb24ocmdiKXsKLXJldHVybiBYaW5oYS5fY29sb3JUb1JnYihyZ2IpOwotfSk7Ci19ZWxzZXsKLWlmKCFfMTUpewotY29udGludWU7Ci19Ci19Ci19Ci19Ci1pZigvXihfbW96KT8kLy50ZXN0KF8xNSkpewotY29udGludWU7Ci19Ci1fOSs9IiAiK18xNCsiPVwiIitYaW5oYS5odG1sRW5jb2RlKF8xNSkrIlwiIjsKLX0KLWlmKFhpbmhhLmlzX2llJiZfNS5zdHlsZS5jc3NUZXh0KXsKLV85Kz0iIHN0eWxlPVwiIitfNS5zdHlsZS5jc3NUZXh0LnJlcGxhY2UoLyheKT8oW146XSopOiguKj8pKDt8JCkvZyxmdW5jdGlvbihtMCxtMSxtMixtMyxtNCl7Ci1yZXR1cm4gbTIudG9Mb3dlckNhc2UoKSsiOiIrbTMrbTQ7Ci19KSsiXCIiOwotfQotaWYoWGluaGEuaXNfaWUmJl81LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09Im9wdGlvbiImJl81LnNlbGVjdGVkKXsKLV85Kz0iIHNlbGVjdGVkPVwic2VsZWN0ZWRcIiI7Ci19Ci1pZihfOSE9PSIiKXsKLWlmKF9hJiZfYz09InAiKXsKLV85Kz0iPiZuYnNwOzwvcD4iOwotfWVsc2V7Ci1pZihfYSl7Ci1fOSs9IiAvPiI7Ci19ZWxzZXsKLV85Kz0iPiI7Ci19Ci19Ci19Ci19Ci19Ci12YXIgXzFkPWZhbHNlOwotaWYoX2M9PSJzY3JpcHQifHxfYz09Im5vc2NyaXB0Iil7Ci1pZighXzcuY29uZmlnLnN0cmlwU2NyaXB0cyl7Ci1pZihYaW5oYS5pc19pZSl7Ci12YXIgXzFlPSJcbiIrXzUuaW5uZXJIVE1MLnJlcGxhY2UoL15bXG5ccl0qLywiIikucmVwbGFjZSgvXHMrJC8sIiIpKyJcbiIrXzg7Ci19ZWxzZXsKLXZhciBfMWU9KF81Lmhhc0NoaWxkTm9kZXMoKSk/XzUuZmlyc3RDaGlsZC5ub2RlVmFsdWU6IiI7Ci19Ci1fOSs9XzFlKyI8LyIrX2MrIj4iKygoWGluaGEuaXNfaWUpPyJcbiI6IiIpOwotfQotfWVsc2V7Ci1pZihfYz09InByZSIpewotXzkrPSgoWGluaGEuaXNfaWUpPyJcbiI6IiIpK181LmlubmVySFRNTC5yZXBsYWNlKC88YnI+L2csIlxuIikrIjwvIitfYysiPiI7Ci19ZWxzZXsKLWZvcihpPV81LmZpcnN0Q2hpbGQ7aTtpPWkubmV4dFNpYmxpbmcpewotaWYoIV8xZCYmaS5ub2RlVHlwZT09MSYmWGluaGEuaXNCbG9ja0VsZW1lbnQoaSkpewotXzFkPXRydWU7Ci19Ci1fOSs9WGluaGEuZ2V0SFRNTFdyYXBwZXIoaSx0cnVlLF83LF84KyIgICIpOwotfQotaWYoXzYmJiFfYSl7Ci1fOSs9KCgoWGluaGEuaXNCbG9ja0VsZW1lbnQoXzUpJiZfMWQpfHxfYz09ImhlYWQifHxfYz09Imh0bWwiKT8oIlxuIitfOCk6IiIpKyI8LyIrXzUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKyI+IjsKLX0KLX0KLX0KLWJyZWFrOwotY2FzZSAzOgotaWYoL15zY3JpcHR8bm9zY3JpcHR8c3R5bGUkL2kudGVzdChfNS5wYXJlbnROb2RlLnRhZ05hbWUpKXsKLV85PV81LmRhdGE7Ci19ZWxzZXsKLWlmKF81LmRhdGEudHJpbSgpPT0iIil7Ci1pZihfNS5kYXRhKXsKLV85PSIgIjsKLX1lbHNlewotXzk9IiI7Ci19Ci19ZWxzZXsKLV85PVhpbmhhLmh0bWxFbmNvZGUoXzUuZGF0YSk7Ci19Ci19Ci1icmVhazsKLWNhc2UgODoKLV85PSI8IS0tIitfNS5kYXRhKyItLT4iOwotYnJlYWs7Ci19Ci1yZXR1cm4gXzk7Ci19OwotCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9HZXRIdG1sL1RyYW5zZm9ybUlubmVySFRNTC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0dldEh0bWwvVHJhbnNmb3JtSW5uZXJIVE1MLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2IxMTZlLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0dldEh0bWwvVHJhbnNmb3JtSW5uZXJIVE1MLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLS8qIFRoaXMgY29tcHJlc3NlZCBmaWxlIGlzIHBhcnQgb2YgWGluaGEuIEZvciB1bmNvbXByZXNzZWQgc291cmNlcywgZm9ydW0sIGFuZCBidWcgcmVwb3J0cywgZ28gdG8geGluaGEub3JnICovCi0vKiBUaGUgVVJMIG9mIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBpcyBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL0dldEh0bWwvVHJhbnNmb3JtSW5uZXJIVE1MLmpzICovCi1mdW5jdGlvbiBHZXRIdG1sSW1wbGVtZW50YXRpb24oXzEpewotdGhpcy5lZGl0b3I9XzE7Ci19OwotR2V0SHRtbEltcGxlbWVudGF0aW9uLl9wbHVnaW5JbmZvPXtuYW1lOiJHZXRIdG1sSW1wbGVtZW50YXRpb24gVHJhbnNmb3JtSW5uZXJIVE1MIix2ZXJzaW9uOiIxLjAiLGRldmVsb3BlcjoiTmVsc29uIEJyaWdodCIsZGV2ZWxvcGVyX3VybDoiaHR0cDovL3d3dy5icmlnaHR3b3Jrd2ViLmNvbS8iLHNwb25zb3I6IiIsc3BvbnNvcl91cmw6IiIsbGljZW5zZToiaHRtbEFyZWEifTsKLVhpbmhhLlJlZ0V4cENhY2hlPVsvPFxzKlwvPyhbXlxzXC8+XSspW1xzKlwvPl0vZ2ksLyhccyspX21veltePT5dKj1bXlxzPl0qL2dpLC9ccyo9XHMqKChbXiciXVtePlxzXSopKFs+XHNdKXwiKFteIl0rKSJ8JyhbXiddKyknKS9nLC9cLz4vZywvPChicnxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtfGVtYmVkfGFyZWEpKChccypcUyo9IlteIl0qIikqKT4vZywvKDxcdytccysoXHcqPSJbXiJdKiJccyspKikoY2hlY2tlZHxjb21wYWN0fGRlY2xhcmV8ZGVmZXJ8ZGlzYWJsZWR8aXNtYXB8bXVsdGlwbGV8bm8oaHJlZnxyZXNpemV8c2hhZGV8d3JhcCl8cmVhZG9ubHl8c2VsZWN0ZWQpKFtccz5dKS9naSwvKD0iW14nXSopJyhbXiciXSoiKS8sLyYoPz0oPyEoI1swLTldezIsNX07fFthLXpBLVowLTldezIsNn07fCN4WzAtOWEtZkEtRl17Miw0fTspKVtePF0qPikvZywvPFxzKy9nLC9ccysoXC8pPz4vZywvXHN7Mix9L2csL1xzKyhbXj1cc10rKSgoPSJbXiJdKyIpfChbXHM+XSkpL2csL1xzK2NvbnRlbnRlZGl0YWJsZSg9W14+XHNcL10qKT8vZ2ksLygoaHJlZnxzcmMpPSIpKFteXHNdKikiL2csLzxcLz8oZGl2fHB8aFsxLTZdfHRhYmxlfHRyfHRkfHRofHVsfG9sfGxpfGRsfGR0fGRkfGJsb2NrcXVvdGV8b2JqZWN0fGJyfGhyfGltZ3xlbWJlZHxwYXJhbXxwcmV8c2NyaXB0fGh0bWx8aGVhZHxib2R5fG1ldGF8bGlua3x0aXRsZXxhcmVhfGlucHV0fGZvcm18dGV4dGFyZWF8c2VsZWN0fG9wdGlvbilbXj5dKj4vZywvPFwvKGRpdnxwfGhbMS02XXx0YWJsZXx0cnx1bHxvbHxkbHxibG9ja3F1b3RlfGh0bWx8aGVhZHxib2R5fHNjcmlwdHxmb3JtfHNlbGVjdCkoIFtePl0qKT8+L2csLzwoZGl2fHB8aFsxLTZdfHRhYmxlfHRyfHVsfG9sfGRsfGJsb2NrcXVvdGV8b2JqZWN0fGh0bWx8aGVhZHxib2R5fHNjcmlwdHxmb3JtfHNlbGVjdCkoIFtePl0qKT8+L2csLzwodGR8dGh8bGl8ZHR8ZGR8b3B0aW9ufGJyfGhyfGVtYmVkfHBhcmFtfHByZXxtZXRhfGxpbmt8dGl0bGV8YXJlYXxpbnB1dHx0ZXh0YXJlYSlbXj5dKj4vZywvKF58PFwvKHByZXxzY3JpcHQpPikoXHN8W15cc10pKj8oPChwcmV8c2NyaXB0KVtePl0qPnwkKS9nLC8oPHByZVtePl0qPikoW1xzXFNdKSo/KDxcL3ByZT4pL2csLyhefDwhLS1bXHNcU10qPy0tPikoW1xzXFNdKj8pKD89PCEtLVtcc1xTXSo/LS0+fCQpL2csL1xTKj0iIi9nLC88IS0tW1xzXFNdKj8tLT58PFw/W1xzXFNdKj9cPz58PFwvP1x3W14+XSo+L2csLyhefDxcL3NjcmlwdD4pW1xzXFNdKj8oPHNjcmlwdFtePl0qPnwkKS9nXTsKLXZhciB0ZXN0UkU9bmV3IFJlZ0V4cCgpLmNvbXBpbGUoWGluaGEuUmVnRXhwQ2FjaGVbM10pOwotaWYodHlwZW9mIHRlc3RSRSE9InVuZGVmaW5lZCIpewotZm9yKHZhciBpPTA7aTxYaW5oYS5SZWdFeHBDYWNoZS5sZW5ndGg7aSsrKXsKLVhpbmhhLlJlZ0V4cENhY2hlW2ldPW5ldyBSZWdFeHAoKS5jb21waWxlKFhpbmhhLlJlZ0V4cENhY2hlW2ldKTsKLX0KLX0KLVhpbmhhLnByb3RvdHlwZS5jbGVhbkhUTUw9ZnVuY3Rpb24oXzIpewotdmFyIGM9WGluaGEuUmVnRXhwQ2FjaGU7Ci1fMj1fMi5yZXBsYWNlKGNbMF0sZnVuY3Rpb24oXzQpewotcmV0dXJuIF80LnRvTG93ZXJDYXNlKCk7Ci19KS5yZXBsYWNlKGNbMV0sIiAiKS5yZXBsYWNlKGNbMTJdLCIgIikucmVwbGFjZShjWzJdLCI9XCIkMiQ0JDVcIiQzIikucmVwbGFjZShjWzIxXSwiICIpLnJlcGxhY2UoY1sxMV0sZnVuY3Rpb24oXzUscDEscDIpewotcmV0dXJuICIgIitwMS50b0xvd2VyQ2FzZSgpK3AyOwotfSkucmVwbGFjZShjWzNdLCI+IikucmVwbGFjZShjWzldLCIkMT4iKS5yZXBsYWNlKGNbNV0sIiQxJDM9XCIkM1wiJDUiKS5yZXBsYWNlKGNbNF0sIjwkMSQyIC8+IikucmVwbGFjZShjWzZdLCIkMSQyIikucmVwbGFjZShjWzddLCImYW1wOyIpLnJlcGxhY2UoY1s4XSwiPCIpLnJlcGxhY2UoY1sxMF0sIiAiKTsKLWlmKFhpbmhhLmlzX2llJiZjWzEzXS50ZXN0KF8yKSl7Ci1fMj1fMi5yZXBsYWNlKGNbMTNdLCIkMSIrWGluaGEuX2VzY2FwZURvbGxhcnModGhpcy5zdHJpcEJhc2VVUkwoUmVnRXhwLiQzKSkrIlwiIik7Ci19Ci1pZih0aGlzLmNvbmZpZy5vbmx5N0JpdFByaW50YWJsZXNJblVSTHMpewotaWYoWGluaGEuaXNfaWUpewotY1sxM10udGVzdChfMik7Ci19Ci1pZihjWzEzXS50ZXN0KF8yKSl7Ci10cnl7Ci1fMj1fMi5yZXBsYWNlKGNbMTNdLCIkMSIrWGluaGEuX2VzY2FwZURvbGxhcnMoZGVjb2RlVVJJQ29tcG9uZW50KFJlZ0V4cC4kMykucmVwbGFjZSgvKFteIS1+XSspL2csZnVuY3Rpb24oXzgpewotcmV0dXJuIGVzY2FwZShfOCk7Ci19KSkrIlwiIik7Ci19Ci1jYXRjaChlKXsKLV8yPV8yLnJlcGxhY2UoY1sxM10sWGluaGEuX2VzY2FwZURvbGxhcnMoIiQxIitSZWdFeHAuJDMucmVwbGFjZSgvKFteIS1+XSspL2csZnVuY3Rpb24oXzkpewotcmV0dXJuIGVzY2FwZShfOSk7Ci19KSsiXCIiKSk7Ci19Ci19Ci19Ci1yZXR1cm4gXzI7Ci19OwotWGluaGEuaW5kZW50PWZ1bmN0aW9uKHMsX2IpewotWGluaGEuX19uaW5kZW50PTA7Ci1YaW5oYS5fX3NpbmRlbnQ9IiI7Ci1YaW5oYS5fX3NpbmRlbnRDaGFyPSh0eXBlb2YgX2I9PSJ1bmRlZmluZWQiKT8iICAiOl9iOwotdmFyIGM9WGluaGEuUmVnRXhwQ2FjaGU7Ci1pZihYaW5oYS5pc19nZWNrbyl7Ci1zPXMucmVwbGFjZShjWzE5XSxmdW5jdGlvbihfZCl7Ci1yZXR1cm4gX2QucmVwbGFjZSgvPGJyIFwvPi9nLCJcbiIpOwotfSk7Ci19Ci1zPXMucmVwbGFjZShjWzE4XSxmdW5jdGlvbihfZSl7Ci1fZT1fZS5yZXBsYWNlKGNbMjBdLGZ1bmN0aW9uKHN0LCQxLCQyKXsKLXN0cmluZz0kMi5yZXBsYWNlKC9bXG5ccl0vZ2ksIiAiKS5yZXBsYWNlKC9ccysvZ2ksIiAiKS5yZXBsYWNlKGNbMTRdLGZ1bmN0aW9uKHN0cil7Ci1pZihzdHIubWF0Y2goY1sxNl0pKXsKLXZhciBzPSJcbiIrWGluaGEuX19zaW5kZW50K3N0cjsKLVhpbmhhLl9fc2luZGVudCs9WGluaGEuX19zaW5kZW50Q2hhcjsKLSsrWGluaGEuX19uaW5kZW50OwotcmV0dXJuIHM7Ci19ZWxzZXsKLWlmKHN0ci5tYXRjaChjWzE1XSkpewotLS1YaW5oYS5fX25pbmRlbnQ7Ci1YaW5oYS5fX3NpbmRlbnQ9IiI7Ci1mb3IodmFyIGk9WGluaGEuX19uaW5kZW50O2k+MDstLWkpewotWGluaGEuX19zaW5kZW50Kz1YaW5oYS5fX3NpbmRlbnRDaGFyOwotfQotcmV0dXJuICJcbiIrWGluaGEuX19zaW5kZW50K3N0cjsKLX1lbHNlewotaWYoc3RyLm1hdGNoKGNbMTddKSl7Ci1yZXR1cm4gIlxuIitYaW5oYS5fX3NpbmRlbnQrc3RyOwotfQotfQotfQotcmV0dXJuIHN0cjsKLX0pOwotcmV0dXJuICQxK3N0cmluZzsKLX0pOwotcmV0dXJuIF9lOwotfSk7Ci1zPXMucmVwbGFjZSgvXlxzKi8sIiIpLnJlcGxhY2UoLyArXG4vZywiXG4iKS5yZXBsYWNlKC9bXHJcbl0rKFxzKyk8XC9zY3JpcHQ+L2csIlxuJDE8L3NjcmlwdD4iKTsKLXJldHVybiBzOwotfTsKLVhpbmhhLmdldEhUTUw9ZnVuY3Rpb24oXzE1LF8xNixfMTcpewotdmFyIF8xOD0iIjsKLXZhciBjPVhpbmhhLlJlZ0V4cENhY2hlOwotaWYoXzE1Lm5vZGVUeXBlPT0xMSl7Ci12YXIgZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotdmFyIF8xYj1fMTUuaW5zZXJ0QmVmb3JlKGRpdixfMTUuZmlyc3RDaGlsZCk7Ci1mb3Ioaj1fMWIubmV4dFNpYmxpbmc7ajtqPWoubmV4dFNpYmxpbmcpewotXzFiLmFwcGVuZENoaWxkKGouY2xvbmVOb2RlKHRydWUpKTsKLX0KLV8xOCs9XzFiLmlubmVySFRNTC5yZXBsYWNlKGNbMjNdLGZ1bmN0aW9uKF8xYyl7Ci1fMWM9XzFjLnJlcGxhY2UoY1syMl0sZnVuY3Rpb24odGFnKXsKLWlmKC9ePFshXD9dLy50ZXN0KHRhZykpewotcmV0dXJuIHRhZzsKLX1lbHNlewotcmV0dXJuIF8xNy5jbGVhbkhUTUwodGFnKTsKLX0KLX0pOwotcmV0dXJuIF8xYzsKLX0pOwotfWVsc2V7Ci12YXIgXzFlPShfMTUubm9kZVR5cGU9PTEpP18xNS50YWdOYW1lLnRvTG93ZXJDYXNlKCk6IiI7Ci1pZihfMTYpewotXzE4Kz0iPCIrXzFlOwotdmFyIF8xZj1fMTUuYXR0cmlidXRlczsKLWZvcihpPTA7aTxfMWYubGVuZ3RoOysraSl7Ci12YXIgYT1fMWYuaXRlbShpKTsKLWlmKCFhLnNwZWNpZmllZCl7Ci1jb250aW51ZTsKLX0KLXZhciBfMjE9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwotdmFyIF8yMj1hLm5vZGVWYWx1ZTsKLV8xOCs9IiAiK18yMSsiPVwiIitfMjIrIlwiIjsKLX0KLV8xOCs9Ij4iOwotfQotaWYoXzFlPT0iaHRtbCIpewotaW5uZXJodG1sPV8xNy5fZG9jLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw7Ci19ZWxzZXsKLWlubmVyaHRtbD1fMTUuaW5uZXJIVE1MOwotfQotXzE4Kz1pbm5lcmh0bWwucmVwbGFjZShjWzIzXSxmdW5jdGlvbihfMjMpewotXzIzPV8yMy5yZXBsYWNlKGNbMjJdLGZ1bmN0aW9uKHRhZyl7Ci1pZigvXjxbIVw/XS8udGVzdCh0YWcpKXsKLXJldHVybiB0YWc7Ci19ZWxzZXsKLWlmKCEoXzE3LmNvbmZpZy5odG1sUmVtb3ZlVGFncyYmXzE3LmNvbmZpZy5odG1sUmVtb3ZlVGFncy50ZXN0KHRhZy5yZXBsYWNlKC88KFteXHM+XC9dKykvLCIkMSIpKSkpewotcmV0dXJuIF8xNy5jbGVhbkhUTUwodGFnKTsKLX1lbHNlewotcmV0dXJuICIiOwotfQotfQotfSk7Ci1yZXR1cm4gXzIzOwotfSk7Ci1pZihYaW5oYS5pc19pZSl7Ci1fMTg9XzE4LnJlcGxhY2UoLzwobGl8ZGR8ZHQpKCBbXj5dKik/Pi9nLCI8LyQxPjwkMSQyPiIpLnJlcGxhY2UoLyg8W3VvZF1sW14+XSo+W1xzXFNdKj8pPFwvKGxpfGRkfGR0KT4vZywiJDEiKS5yZXBsYWNlKC9ccyo8XC8obGl8ZGR8ZHQpPihccyo8XC8obGl8ZGR8ZHQpPikrL2csIjwvJDE+IikucmVwbGFjZSgvKDxkdFtccz5dW1xzXFNdKj8pKDxcL2RbZHRdPikrL2csIiQxPC9kdD4iKTsKLX0KLWlmKFhpbmhhLmlzX2dlY2tvKXsKLV8xOD1fMTgucmVwbGFjZSgvPGJyIFwvPlxuJC8sIiIpOwotfQotXzE4PV8xOC5yZXBsYWNlKC9ccyooPFwvKGxpfGRkfGR0KT4pL2csIiQxIik7Ci1pZihfMTYpewotXzE4Kz0iPC8iK18xZSsiPiI7Ci19Ci1fMTg9WGluaGEuaW5kZW50KF8xOCk7Ci19Ci1yZXR1cm4gXzE4OwotfTsKLVhpbmhhLl9lc2NhcGVEb2xsYXJzPWZ1bmN0aW9uKHN0cil7Ci1yZXR1cm4gc3RyLnJlcGxhY2UoL1wkL2csIiQkJCQiKTsKLX07Ci0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0luc2VydEltYWdlL2luc2VydF9pbWFnZS5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvaW5zZXJ0X2ltYWdlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNDdlNGIuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvaW5zZXJ0X2ltYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwKLSAgICAgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLSAgPHRpdGxlPkluc2VydCBJbWFnZTwvdGl0bGU+Ci0KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL3BvcHVwcy9wb3B1cC5qcyI+PC9zY3JpcHQ+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi8uLi9wb3B1cHMvcG9wdXAuY3NzIiAvPgotCi08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0KLQotWGluaGEgPSB3aW5kb3cub3BlbmVyLlhpbmhhOwotZnVuY3Rpb24gaTE4bihzdHIpIHsKLSAgcmV0dXJuIChYaW5oYS5fbGMoc3RyLCAnWGluaGEnKSk7Ci19Ci0KLWZ1bmN0aW9uIEluaXQoKSB7Ci0gIF9fZGxnX3RyYW5zbGF0ZSgnWGluaGEnKTsKLSAgX19kbGdfaW5pdChudWxsLHt3aWR0aDo0MTAsaGVpZ2h0OjQwMH0pOwotICAvLyBNYWtlIHN1cmUgdGhlIHRyYW5zbGF0ZWQgc3RyaW5nIGFwcGVhcnMgaW4gdGhlIGRyb3AgZG93bi4gKGZvciBnZWNrbykKLSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYWxpZ24iKS5zZWxlY3RlZEluZGV4ID0gMTsKLSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYWxpZ24iKS5zZWxlY3RlZEluZGV4ID0gNTsKLSAgdmFyIHBhcmFtID0gd2luZG93LmRpYWxvZ0FyZ3VtZW50czsKLSAgaWYgKHBhcmFtWyJmX2Jhc2UiXSkgewotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYmFzZSIpLnZhbHVlID0gcGFyYW1bImZfYmFzZSJdOwotICB9Ci0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3VybCIpLnZhbHVlICAgID0gcGFyYW1bImZfdXJsIl0gPyBwYXJhbVsiZl91cmwiXSA6ICIiOwotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9hbHQiKS52YWx1ZSAgICA9IHBhcmFtWyJmX2FsdCJdID8gcGFyYW1bImZfYWx0Il0gOiAiIjsKLSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYm9yZGVyIikudmFsdWUgPSAodHlwZW9mIHBhcmFtWyJmX2JvcmRlciJdIT0idW5kZWZpbmVkIikgPyBwYXJhbVsiZl9ib3JkZXIiXSA6ICIiOwotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9hbGlnbiIpLnZhbHVlICA9IHBhcmFtWyJmX2FsaWduIl0gPyBwYXJhbVsiZl9hbGlnbiJdIDogIiI7Ci0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3ZlcnQiKS52YWx1ZSAgID0gKHR5cGVvZiBwYXJhbVsiZl92ZXJ0Il0hPSJ1bmRlZmluZWQiKSA/IHBhcmFtWyJmX3ZlcnQiXSA6ICIiOwotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9ob3JpeiIpLnZhbHVlICA9ICh0eXBlb2YgcGFyYW1bImZfaG9yaXoiXSE9InVuZGVmaW5lZCIpID8gcGFyYW1bImZfaG9yaXoiXSA6ICIiOwotICBpZiAocGFyYW1bImZfdXJsIl0pIHsKLSAgICAgIHdpbmRvdy5pcHJldmlldy5sb2NhdGlvbi5yZXBsYWNlKFhpbmhhLl9yZXNvbHZlUmVsYXRpdmVVcmwocGFyYW0uZl9iYXNlLCBwYXJhbS5mX3VybCkpOwotICB9Ci0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3VybCIpLmZvY3VzKCk7Ci19Ci0KLWZ1bmN0aW9uIG9uT0soKSB7Ci0gIHZhciByZXF1aXJlZCA9IHsKLSAgICAiZl91cmwiOiBpMThuKCJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIikKLSAgfTsKLSAgZm9yICh2YXIgaSBpbiByZXF1aXJlZCkgewotICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGkpOwotICAgIGlmICghZWwudmFsdWUpIHsKLSAgICAgIGFsZXJ0KHJlcXVpcmVkW2ldKTsKLSAgICAgIGVsLmZvY3VzKCk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0gIC8vIHBhc3MgZGF0YSBiYWNrIHRvIHRoZSBjYWxsaW5nIHdpbmRvdwotICB2YXIgZmllbGRzID0gWyJmX3VybCIsICJmX2FsdCIsICJmX2FsaWduIiwgImZfYm9yZGVyIiwKLSAgICAgICAgICAgICAgICAiZl9ob3JpeiIsICJmX3ZlcnQiXTsKLSAgdmFyIHBhcmFtID0gbmV3IE9iamVjdCgpOwotICBmb3IgKHZhciBpIGluIGZpZWxkcykgewotICAgIHZhciBpZCA9IGZpZWxkc1tpXTsKLSAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7Ci0gICAgcGFyYW1baWRdID0gZWwudmFsdWU7Ci0gIH0KLSAgX19kbGdfY2xvc2UocGFyYW0pOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWZ1bmN0aW9uIG9uQ2FuY2VsKCkgewotICBfX2RsZ19jbG9zZShudWxsKTsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi1mdW5jdGlvbiBvblByZXZpZXcoKSB7Ci0gIHZhciBmX3VybCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3VybCIpOwotICB2YXIgdXJsID0gZl91cmwudmFsdWU7Ci0gIHZhciBiYXNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYmFzZSIpLnZhbHVlOwotICBpZiAoIXVybCkgewotICAgIGFsZXJ0KGkxOG4oIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiKSk7Ci0gICAgZl91cmwuZm9jdXMoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgd2luZG93LmlwcmV2aWV3LmxvY2F0aW9uLnJlcGxhY2UoWGluaGEuX3Jlc29sdmVSZWxhdGl2ZVVybChiYXNlLCB1cmwpKTsKLSAgcmV0dXJuIGZhbHNlOwotfQotPC9zY3JpcHQ+Ci0KLTwvaGVhZD4KLQotPGJvZHkgY2xhc3M9ImRpYWxvZyIgb25sb2FkPSJJbml0KCkiPgotCi08ZGl2IGNsYXNzPSJ0aXRsZSI+SW5zZXJ0IEltYWdlPC9kaXY+Ci08IS0tLSBuZXcgc3R1ZmYgLS0tPgotPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0iZ2V0Ij4KLTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImJhc2UiIGlkPSJmX2Jhc2UiLz4KLTx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBzdHlsZT0icGFkZGluZzogMHB4OyBtYXJnaW46IDBweCI+Ci0gIDx0Ym9keT4KLQotICA8dHI+Ci0gICAgPHRkIHN0eWxlPSJ3aWR0aDogN2VtOyB0ZXh0LWFsaWduOiByaWdodCI+SW1hZ2UgVVJMOjwvdGQ+Ci0gICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1cmwiIGlkPSJmX3VybCIgc3R5bGU9IndpZHRoOjc1JSIKLSAgICAgIHRpdGxlPSJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiIC8+Ci0gICAgICA8YnV0dG9uIG5hbWU9InByZXZpZXciIG9uY2xpY2s9InJldHVybiBvblByZXZpZXcoKTsiCi0gICAgICB0aXRsZT0iUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93Ij5QcmV2aWV3PC9idXR0b24+Ci0gICAgPC90ZD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBzdHlsZT0id2lkdGg6IDdlbTsgdGV4dC1hbGlnbjogcmlnaHQiPkFsdGVybmF0ZSB0ZXh0OjwvdGQ+Ci0gICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJhbHQiIGlkPSJmX2FsdCIgc3R5bGU9IndpZHRoOjEwMCUiCi0gICAgICB0aXRsZT0iRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiIC8+PC90ZD4KLSAgPC90cj4KLQotICA8L3Rib2R5PgotPC90YWJsZT4KLQotPGZpZWxkc2V0IHN0eWxlPSJmbG9hdDogbGVmdDsgbWFyZ2luLWxlZnQ6IDVweDsiPgotPGxlZ2VuZD5MYXlvdXQ8L2xlZ2VuZD4KLQotPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgotCi08ZGl2IGNsYXNzPSJmbCI+QWxpZ25tZW50OjwvZGl2PgotPHNlbGVjdCBzaXplPSIxIiBuYW1lPSJhbGlnbiIgaWQ9ImZfYWxpZ24iCi0gIHRpdGxlPSJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIj4KLSAgPG9wdGlvbiB2YWx1ZT0iIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPk5vdCBzZXQ8L29wdGlvbj4KLSAgPG9wdGlvbiB2YWx1ZT0ibGVmdCIgICAgICAgICAgICAgICAgICAgICAgICAgPkxlZnQ8L29wdGlvbj4KLSAgPG9wdGlvbiB2YWx1ZT0icmlnaHQiICAgICAgICAgICAgICAgICAgICAgICAgPlJpZ2h0PC9vcHRpb24+Ci0gIDxvcHRpb24gdmFsdWU9InRleHR0b3AiICAgICAgICAgICAgICAgICAgICAgID5UZXh0dG9wPC9vcHRpb24+Ci0gIDxvcHRpb24gdmFsdWU9ImFic21pZGRsZSIgICAgICAgICAgICAgICAgICAgID5BYnNtaWRkbGU8L29wdGlvbj4KLSAgPG9wdGlvbiB2YWx1ZT0iYmFzZWxpbmUiIHNlbGVjdGVkPSJzZWxlY3RlZCIgPkJhc2VsaW5lPC9vcHRpb24+Ci0gIDxvcHRpb24gdmFsdWU9ImFic2JvdHRvbSIgICAgICAgICAgICAgICAgICAgID5BYnNib3R0b208L29wdGlvbj4KLSAgPG9wdGlvbiB2YWx1ZT0iYm90dG9tIiAgICAgICAgICAgICAgICAgICAgICAgPkJvdHRvbTwvb3B0aW9uPgotICA8b3B0aW9uIHZhbHVlPSJtaWRkbGUiICAgICAgICAgICAgICAgICAgICAgICA+TWlkZGxlPC9vcHRpb24+Ci0gIDxvcHRpb24gdmFsdWU9InRvcCIgICAgICAgICAgICAgICAgICAgICAgICAgID5Ub3A8L29wdGlvbj4KLTwvc2VsZWN0PgotCi08YnIgLz4KLQotPGRpdiBjbGFzcz0iZmwiPkJvcmRlciB0aGlja25lc3M6PC9kaXY+Ci08aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYm9yZGVyIiBpZD0iZl9ib3JkZXIiIHNpemU9IjUiCi10aXRsZT0iTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciIgLz4KLQotPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgotCi08L2ZpZWxkc2V0PgotCi08ZmllbGRzZXQ+Ci08bGVnZW5kPlNwYWNpbmc8L2xlZ2VuZD4KLQotPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgotCi08ZGl2IGNsYXNzPSJmciI+SG9yaXpvbnRhbDo8L2Rpdj4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJob3JpeiIgaWQ9ImZfaG9yaXoiIHNpemU9IjUiCi10aXRsZT0iSG9yaXpvbnRhbCBwYWRkaW5nIiAvPgotCi08YnIgLz4KLQotPGRpdiBjbGFzcz0iZnIiPlZlcnRpY2FsOjwvZGl2PgotPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InZlcnQiIGlkPSJmX3ZlcnQiIHNpemU9IjUiCi10aXRsZT0iVmVydGljYWwgcGFkZGluZyIgLz4KLQotPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgotCi08L2ZpZWxkc2V0PgotPGRpdiBjbGFzcz0ic3BhY2UiIHN0eWxlPSJjbGVhcjphbGwiPjwvZGl2PgotPGRpdj4KLUltYWdlIFByZXZpZXc6PGJyIC8+Ci0gICAgPGlmcmFtZSBuYW1lPSJpcHJldmlldyIgaWQ9ImlwcmV2aWV3IiBmcmFtZWJvcmRlcj0iMCIgc3R5bGU9ImJvcmRlciA6IDFweCBzb2xpZCBncmF5OyIgCi0JaGVpZ2h0PSIyMDAiIHdpZHRoPSIxMDAlIiBzcmM9Ii4uLy4uL3BvcHVwcy9ibGFuay5odG1sIj48L2lmcmFtZT4KLTwvZGl2PgotPGRpdiBpZD0iYnV0dG9ucyI+Ci08YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0ib2siIG9uY2xpY2s9InJldHVybiBvbk9LKCk7Ij5PSzwvYnV0dG9uPgotPGJ1dHRvbiB0eXBlPSJidXR0b24iIG5hbWU9ImNhbmNlbCIgb25jbGljaz0icmV0dXJuIG9uQ2FuY2VsKCk7Ij5DYW5jZWw8L2J1dHRvbj4KLTwvZGl2PgotPC9mb3JtPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0luc2VydEltYWdlL2luc2VydF9pbWFnZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0luc2VydEltYWdlL2luc2VydF9pbWFnZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI1MjI1Yy4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9pbnNlcnRfaW1hZ2UuanMKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvbW9kdWxlcy9JbnNlcnRJbWFnZS9pbnNlcnRfaW1hZ2UuanMgKi8KLUluc2VydEltYWdlLl9wbHVnaW5JbmZvPXtuYW1lOiJJbnNlcnRJbWFnZSIsb3JpZ2luOiJYaW5oYSBDb3JlIix2ZXJzaW9uOiIkTGFzdENoYW5nZWRSZXZpc2lvbjogMTIzOSAkIi5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sIiQxIiksZGV2ZWxvcGVyOiJUaGUgWGluaGEgQ29yZSBEZXZlbG9wZXIgVGVhbSIsZGV2ZWxvcGVyX3VybDoiJEhlYWRVUkw6IGh0dHA6Ly9zdm4ueGluaGEub3JnL3RhZ3MvMC45Ni4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvaW5zZXJ0X2ltYWdlLmpzICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywiJDEiKSxzcG9uc29yOiIiLHNwb25zb3JfdXJsOiIiLGxpY2Vuc2U6Imh0bWxBcmVhIn07Ci1mdW5jdGlvbiBJbnNlcnRJbWFnZShfMSl7Ci10aGlzLmVkaXRvcj1fMTsKLXZhciBfMj1fMS5jb25maWc7Ci12YXIgXzM9dGhpczsKLWlmKHR5cGVvZiBfMS5faW5zZXJ0SW1hZ2U9PSJ1bmRlZmluZWQiKXsKLV8xLl9pbnNlcnRJbWFnZT1mdW5jdGlvbigpewotXzMuc2hvdygpOwotfTsKLX0KLX07Ci1JbnNlcnRJbWFnZS5wcm90b3R5cGUuX2xjPWZ1bmN0aW9uKF80KXsKLXJldHVybiBYaW5oYS5fbGMoXzQsIlhpbmhhIik7Ci19OwotSW5zZXJ0SW1hZ2UucHJvdG90eXBlLm9uR2VuZXJhdGVPbmNlPWZ1bmN0aW9uKCl7Ci1JbnNlcnRJbWFnZS5sb2FkQXNzZXRzKCk7Ci19OwotSW5zZXJ0SW1hZ2UubG9hZEFzc2V0cz1mdW5jdGlvbigpewotdmFyIF81PUluc2VydEltYWdlOwotaWYoXzUubG9hZGluZyl7Ci1yZXR1cm47Ci19Ci1fNS5sb2FkaW5nPXRydWU7Ci1YaW5oYS5fZ2V0YmFjayhfZWRpdG9yX3VybCsibW9kdWxlcy9JbnNlcnRJbWFnZS9kaWFsb2cuaHRtbCIsZnVuY3Rpb24oXzYpewotXzUuaHRtbD1fNjsKLV81LmRpYWxvZ1JlYWR5PXRydWU7Ci19KTsKLVhpbmhhLl9nZXRiYWNrKF9lZGl0b3JfdXJsKyJtb2R1bGVzL0luc2VydEltYWdlL3BsdWdpbk1ldGhvZHMuanMiLGZ1bmN0aW9uKF83KXsKLWV2YWwoXzcpOwotXzUubWV0aG9kc1JlYWR5PXRydWU7Ci19KTsKLX07Ci1JbnNlcnRJbWFnZS5wcm90b3R5cGUub25VcGRhdGVUb29sYmFyPWZ1bmN0aW9uKCl7Ci1pZighKEluc2VydEltYWdlLmRpYWxvZ1JlYWR5JiZJbnNlcnRJbWFnZS5tZXRob2RzUmVhZHkpKXsKLXRoaXMuZWRpdG9yLl90b29sYmFyT2JqZWN0cy5pbnNlcnRpbWFnZS5zdGF0ZSgiZW5hYmxlZCIsZmFsc2UpOwotfWVsc2V7Ci10aGlzLm9uVXBkYXRlVG9vbGJhcj1udWxsOwotfQotfTsKLUluc2VydEltYWdlLnByb3RvdHlwZS5wcmVwYXJlRGlhbG9nPWZ1bmN0aW9uKCl7Ci12YXIgXzg9dGhpczsKLXZhciBfOT10aGlzLmVkaXRvcjsKLXZhciBfYT10aGlzLmRpYWxvZz1uZXcgWGluaGEuRGlhbG9nKF85LEluc2VydEltYWdlLmh0bWwsIlhpbmhhIix7d2lkdGg6NDEwfSk7Ci1fYS5nZXRFbGVtZW50QnlJZCgib2siKS5vbmNsaWNrPWZ1bmN0aW9uKCl7Ci1fOC5hcHBseSgpOwotfTsKLV9hLmdldEVsZW1lbnRCeUlkKCJjYW5jZWwiKS5vbmNsaWNrPWZ1bmN0aW9uKCl7Ci1fOC5kaWFsb2cuaGlkZSgpOwotfTsKLV9hLmdldEVsZW1lbnRCeUlkKCJwcmV2aWV3Iikub25jbGljaz1mdW5jdGlvbigpewotdmFyIF9iPV9hLmdldEVsZW1lbnRCeUlkKCJmX3VybCIpOwotdmFyIF9jPV9iLnZhbHVlOwotaWYoIV9jKXsKLWFsZXJ0KF9hLl9sYygiWW91IG11c3QgZW50ZXIgdGhlIFVSTCIpKTsKLV9iLmZvY3VzKCk7Ci1yZXR1cm4gZmFsc2U7Ci19Ci1fYS5nZXRFbGVtZW50QnlJZCgiaXByZXZpZXciKS5zcmM9X2M7Ci1yZXR1cm4gZmFsc2U7Ci19OwotdGhpcy5kaWFsb2cub25yZXNpemU9ZnVuY3Rpb24oKXsKLXZhciBfZD1wYXJzZUludCh0aGlzLmhlaWdodCwxMCktdGhpcy5nZXRFbGVtZW50QnlJZCgiaDEiKS5vZmZzZXRIZWlnaHQtdGhpcy5nZXRFbGVtZW50QnlJZCgiYnV0dG9ucyIpLm9mZnNldEhlaWdodC10aGlzLmdldEVsZW1lbnRCeUlkKCJpbnB1dHMiKS5vZmZzZXRIZWlnaHQtcGFyc2VJbnQodGhpcy5yb290RWxlbS5zdHlsZS5wYWRkaW5nQm90dG9tLDEwKTsKLXRoaXMuZ2V0RWxlbWVudEJ5SWQoImlwcmV2aWV3Iikuc3R5bGUuaGVpZ2h0PSgoX2Q+MCk/X2Q6MCkrInB4IjsKLXRoaXMuZ2V0RWxlbWVudEJ5SWQoImlwcmV2aWV3Iikuc3R5bGUud2lkdGg9dGhpcy53aWR0aC0yKyJweCI7Ci19OwotdGhpcy5kaWFsb2dSZWFkeT10cnVlOwotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvcGx1Z2luTWV0aG9kcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0luc2VydEltYWdlL3BsdWdpbk1ldGhvZHMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYjJmN2QuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvcGx1Z2luTWV0aG9kcy5qcworKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvbW9kdWxlcy9JbnNlcnRJbWFnZS9wbHVnaW5NZXRob2RzLmpzICovCi1JbnNlcnRJbWFnZS5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbihfMSl7Ci1pZighdGhpcy5kaWFsb2cpewotdGhpcy5wcmVwYXJlRGlhbG9nKCk7Ci19Ci12YXIgXzI9dGhpcy5lZGl0b3I7Ci1pZih0eXBlb2YgXzE9PSJ1bmRlZmluZWQiKXsKLV8xPV8yLmdldFBhcmVudEVsZW1lbnQoKTsKLWlmKF8xJiZfMS50YWdOYW1lLnRvTG93ZXJDYXNlKCkhPSJpbWciKXsKLV8xPW51bGw7Ci19Ci19Ci1pZihfMSl7Ci1mdW5jdGlvbiBnZXRTcGVjaWZpZWRBdHRyaWJ1dGUoXzMsXzQpewotdmFyIGE9XzMuYXR0cmlidXRlczsKLWZvcih2YXIgaT0wO2k8YS5sZW5ndGg7aSsrKXsKLWlmKGFbaV0ubm9kZU5hbWU9PV80JiZhW2ldLnNwZWNpZmllZCl7Ci1yZXR1cm4gYVtpXS52YWx1ZTsKLX0KLX0KLXJldHVybiAiIjsKLX07Ci1vdXRwYXJhbT17Zl91cmw6XzIuc3RyaXBCYXNlVVJMKF8xLmdldEF0dHJpYnV0ZSgic3JjIiwyKSksZl9hbHQ6XzEuYWx0LGZfYm9yZGVyOl8xLmJvcmRlcixmX2FsaWduOl8xLmFsaWduLGZfdmVydDpnZXRTcGVjaWZpZWRBdHRyaWJ1dGUoXzEsInZzcGFjZSIpLGZfaG9yaXo6Z2V0U3BlY2lmaWVkQXR0cmlidXRlKF8xLCJoc3BhY2UiKSxmX3dpZHRoOl8xLndpZHRoLGZfaGVpZ2h0Ol8xLmhlaWdodH07Ci19ZWxzZXsKLW91dHBhcmFtPXtmX3VybDoiIixmX2FsdDoiIixmX2JvcmRlcjoiIixmX2FsaWduOiIiLGZfdmVydDoiIixmX2hvcml6OiIiLGZfd2lkdGg6IiIsZl9oZWlnaHQ6IiJ9OwotfQotdGhpcy5pbWFnZT1fMTsKLXRoaXMuZGlhbG9nLnNob3cob3V0cGFyYW0pOwotfTsKLUluc2VydEltYWdlLnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbigpewotdmFyIF83PXRoaXMuZGlhbG9nLmhpZGUoKTsKLWlmKCFfNy5mX3VybCl7Ci1yZXR1cm47Ci19Ci12YXIgXzg9dGhpcy5lZGl0b3I7Ci12YXIgXzk9dGhpcy5pbWFnZTsKLWlmKCFfOSl7Ci1pZihYaW5oYS5pc19pZSl7Ci12YXIgX2E9XzguZ2V0U2VsZWN0aW9uKCk7Ci12YXIgX2I9XzguY3JlYXRlUmFuZ2UoX2EpOwotXzguX2RvYy5leGVjQ29tbWFuZCgiaW5zZXJ0aW1hZ2UiLGZhbHNlLF83LmZfdXJsKTsKLV85PV9iLnBhcmVudEVsZW1lbnQoKTsKLWlmKF85LnRhZ05hbWUudG9Mb3dlckNhc2UoKSE9ImltZyIpewotXzk9XzkucHJldmlvdXNTaWJsaW5nOwotfQotfWVsc2V7Ci1fOT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTsKLV85LnNyYz1fNy5mX3VybDsKLV84Lmluc2VydE5vZGVBdFNlbGVjdGlvbihfOSk7Ci1pZighXzkudGFnTmFtZSl7Ci1fOT1fYi5zdGFydENvbnRhaW5lci5maXJzdENoaWxkOwotfQotfQotfWVsc2V7Ci1fOS5zcmM9XzcuZl91cmw7Ci19Ci1mb3IodmFyIF9jIGluIF83KXsKLXZhciBfZD1fN1tfY107Ci1zd2l0Y2goX2MpewotY2FzZSAiZl9hbHQiOgotaWYoX2QpewotXzkuYWx0PV9kOwotfWVsc2V7Ci1fOS5yZW1vdmVBdHRyaWJ1dGUoImFsdCIpOwotfQotYnJlYWs7Ci1jYXNlICJmX2JvcmRlciI6Ci1pZihfZCl7Ci1fOS5ib3JkZXI9cGFyc2VJbnQoX2R8fCIwIik7Ci19ZWxzZXsKLV85LnJlbW92ZUF0dHJpYnV0ZSgiYm9yZGVyIik7Ci19Ci1icmVhazsKLWNhc2UgImZfYWxpZ24iOgotaWYoX2QudmFsdWUpewotXzkuYWxpZ249X2QudmFsdWU7Ci19ZWxzZXsKLV85LnJlbW92ZUF0dHJpYnV0ZSgiYWxpZ24iKTsKLX0KLWJyZWFrOwotY2FzZSAiZl92ZXJ0IjoKLWlmKF9kIT0iIil7Ci1fOS52c3BhY2U9cGFyc2VJbnQoX2R8fCIwIik7Ci19ZWxzZXsKLV85LnJlbW92ZUF0dHJpYnV0ZSgidnNwYWNlIik7Ci19Ci1icmVhazsKLWNhc2UgImZfaG9yaXoiOgotaWYoX2QhPSIiKXsKLV85LmhzcGFjZT1wYXJzZUludChfZHx8IjAiKTsKLX1lbHNlewotXzkucmVtb3ZlQXR0cmlidXRlKCJoc3BhY2UiKTsKLX0KLWJyZWFrOwotY2FzZSAiZl93aWR0aCI6Ci1pZihfZCl7Ci1fOS53aWR0aD1wYXJzZUludChfZHx8IjAiKTsKLX1lbHNlewotXzkucmVtb3ZlQXR0cmlidXRlKCJ3aWR0aCIpOwotfQotYnJlYWs7Ci1jYXNlICJmX2hlaWdodCI6Ci1pZihfZCl7Ci1fOS5oZWlnaHQ9cGFyc2VJbnQoX2R8fCIwIik7Ci19ZWxzZXsKLV85LnJlbW92ZUF0dHJpYnV0ZSgiaGVpZ2h0Iik7Ci19Ci1icmVhazsKLX0KLX0KLX07Ci0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0luc2VydFRhYmxlL2RpYWxvZy5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvSW5zZXJ0VGFibGUvZGlhbG9nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNzQ1NmEuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvSW5zZXJ0VGFibGUvZGlhbG9nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotPGgxIGlkPSJbaDFdIj48bDEwbj5JbnNlcnQgVGFibGU8L2wxMG4+PC9oMT4NCi08Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJnZXQiIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHgiPg0KLTxkaXYgaWQ9Iltjb2x1bW5zX2FsZXJ0XSIgc3R5bGU9ImNvbG9yOnJlZDtkaXNwbGF5Om5vbmUiPjxsMTBuPllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnM8L2wxMG4+PC9kaXY+DQotPGRpdiBpZD0iW3Jvd3NfYWxlcnRdIiBzdHlsZT0iY29sb3I6cmVkO2Rpc3BsYXk6bm9uZSI+PGwxMG4+WW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93czwvbDEwbj48L2Rpdj4NCi0NCi08dGFibGUgYm9yZGVyPSIwIiBzdHlsZT0icGFkZGluZzogMHB4OyBtYXJnaW46IDBweCI+DQotICA8dGJvZHk+DQotICA8dHI+DQotICA8dGQ+DQotICAgIDxsMTBuPkNhcHRpb248L2wxMG4+Og0KLSAgPC90ZD4gIA0KLSAgPHRkIGNvbHNwYW49IjQiPg0KLSAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iW2NhcHRpb25dIiBpZD0iW2NhcHRpb25dIiBzdHlsZT0id2lkdGg6OTAlIiB0aXRsZT0iXyhDYXB0aW9uIGZvciB0aGUgdGFibGUpIiAvPg0KLSAgPC90ZD4NCi0gIDwvdHI+DQotICA8dHI+DQotICAgIDx0ZCBzdHlsZT0id2lkdGg6IDRlbTsgdGV4dC1hbGlnbjogcmlnaHQiPjxsMTBuPlJvd3M6PC9sMTBuPjwvdGQ+DQotICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iW3Jvd3NdIiBpZD0iW3Jvd3NdIiBzaXplPSI1IiB0aXRsZT0iXyhOdW1iZXIgb2Ygcm93cykiICAvPjwvdGQ+DQotICAgIDx0ZCBzdHlsZT0id2lkdGg6IDRlbTsgdGV4dC1hbGlnbjogcmlnaHQiPldpZHRoOjwvdGQ+DQotICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iW3dpZHRoXSIgaWQ9Ilt3aWR0aF0iIHNpemU9IjUiIHRpdGxlPSJfKFdpZHRoIG9mIHRoZSB0YWJsZSkiIC8+PC90ZD4NCi0gICAgPHRkPjxzZWxlY3Qgc2l6ZT0iMSIgbmFtZT0iW3VuaXRdIiBpZD0iW3VuaXRdIiB0aXRsZT0iV2lkdGggdW5pdCI+DQotICAgICAgPG9wdGlvbiB2YWx1ZT0iJSIgICAgICAgICAgICAgICA+PGwxMG4+UGVyY2VudDwvbDEwbj48L29wdGlvbj4NCi0gICAgICA8b3B0aW9uIHZhbHVlPSJweCIgICAgICAgICAgICAgID48bDEwbj5QaXhlbHM8L2wxMG4+PC9vcHRpb24+DQotICAgICAgPG9wdGlvbiB2YWx1ZT0iZW0iICAgICAgICAgICAgICA+RW08L29wdGlvbj4NCi0gICAgPC9zZWxlY3Q+PC90ZD4NCi0gIDwvdHI+DQotICA8dHI+DQotICAgIDx0ZCBzdHlsZT0id2lkdGg6IDRlbTsgdGV4dC1hbGlnbjogcmlnaHQiPkNvbHM6PC90ZD4NCi0gICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbY29sc10iIGlkPSJbY29sc10iIHNpemU9IjUiIHRpdGxlPSJfKE51bWJlciBvZiBjb2x1bW5zKSIgIC8+PC90ZD4NCi0gICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodCI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJbZml4ZWRdIiBpZD0iW2ZpeGVkXSIgdmFsdWU9Im9uIiAvPjwvdGQ+DQotICAgIDx0ZCBjb2xzcGFuPSIyIj48bGFiZWwNCi0gICAgPjxsMTBuPkZpeGVkIHdpZHRoIGNvbHVtbnM8L2wxMG4+PC9sYWJlbD48L3RkPg0KLSAgPC90cj4NCi0gIDwvdGJvZHk+DQotPC90YWJsZT4NCi0NCi08YnIgLz4NCi0NCi08ZmllbGRzZXQgaWQ9IltsYXlvdXRfZmllbGRzZXRdIiBzdHlsZT0iZmxvYXQ6IGxlZnQ7IG1hcmdpbi1sZWZ0OiAxMHB4OyI+DQotPGxlZ2VuZD48bDEwbj5MYXlvdTwvbDEwbj50PC9sZWdlbmQ+DQotDQotPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2Pg0KLQ0KLTxkaXYgY2xhc3M9ImZsIj48bDEwbj5BbGlnbm1lbnQ6PC9sMTBuPjwvZGl2Pg0KLTxzZWxlY3Qgc2l6ZT0iMSIgbmFtZT0iW2FsaWduXSIgaWQ9IlthbGlnbl0iDQotICB0aXRsZT0iUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI+DQotICA8b3B0aW9uIHZhbHVlPSIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGwxMG4+Tm90IHNldDwvbDEwbj48L29wdGlvbj4NCi0gIDxvcHRpb24gdmFsdWU9ImxlZnQiICAgICAgICAgICAgICAgICAgICAgICAgID48bDEwbj5MZWZ0PC9sMTBuPjwvb3B0aW9uPg0KLSAgPG9wdGlvbiB2YWx1ZT0icmlnaHQiICAgICAgICAgICAgICAgICAgICAgICAgPjxsMTBuPlJpZ2h0PC9sMTBuPjwvb3B0aW9uPg0KLSAgPG9wdGlvbiB2YWx1ZT0idGV4dHRvcCIgICAgICAgICAgICAgICAgICAgICAgPjxsMTBuPlRleHR0b3A8L2wxMG4+PC9vcHRpb24+DQotICA8b3B0aW9uIHZhbHVlPSJhYnNtaWRkbGUiICAgICAgICAgICAgICAgICAgICA+PGwxMG4+QWJzbWlkZGxlPC9sMTBuPjwvb3B0aW9uPg0KLSAgPG9wdGlvbiB2YWx1ZT0iYmFzZWxpbmUiICAgICAgICAgICAgICAgICAgICAgPjxsMTBuPkJhc2VsaW5lPC9sMTBuPjwvb3B0aW9uPg0KLSAgPG9wdGlvbiB2YWx1ZT0iYWJzYm90dG9tIiAgICAgICAgICAgICAgICAgICAgPjxsMTBuPkFic2JvdHRvbTwvbDEwbj48L29wdGlvbj4NCi0gIDxvcHRpb24gdmFsdWU9ImJvdHRvbSIgICAgICAgICAgICAgICAgICAgICAgID48bDEwbj5Cb3R0b208L2wxMG4+PC9vcHRpb24+DQotICA8b3B0aW9uIHZhbHVlPSJtaWRkbGUiICAgICAgICAgICAgICAgICAgICAgICA+PGwxMG4+TWlkZGxlPC9vcHRpb24+DQotICA8b3B0aW9uIHZhbHVlPSJ0b3AiICAgICAgICAgICAgICAgICAgICAgICAgICA+PGwxMG4+VG9wPC9sMTBuPjwvb3B0aW9uPg0KLTwvc2VsZWN0Pg0KLQ0KLTxiciAvPg0KLQ0KLTxkaXYgY2xhc3M9ImZsIj48bDEwbj5Cb3JkZXI8L2wxMG4+PC9kaXY+DQotPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Iltib3JkZXJdIiBpZD0iW2JvcmRlcl0iIHNpemU9IjIiIHRpdGxlPSJfKExlYXZlIGVtcHR5IGZvciBubyBib3JkZXIpIiAvPiA8bDEwbj5QaXhlbHM8L2wxMG4+DQotPHNlbGVjdCBzaXplPSIxIiBuYW1lPSJbYm9yZGVyX3N0eWxlXSIgaWQ9Iltib3JkZXJfc3R5bGVdIiB0aXRsZT0iXyhTdHlsZSBvZiB0aGUgYm9yZGVyKSI+DQotICA8b3B0aW9uIHZhbHVlPSJzb2xpZCIgICA+U29saWQ8L29wdGlvbj4NCi0gIDxvcHRpb24gdmFsdWU9ImRvdHRlZCIgID5Eb3R0ZWQ8L29wdGlvbj4NCi0gIDxvcHRpb24gdmFsdWU9ImRhc2hlZCIgID5EYXNoZWQ8L29wdGlvbj4NCi0gIDxvcHRpb24gdmFsdWU9ImRvdWJsZSIgID5Eb3VibGU8L29wdGlvbj4NCi0gIDxvcHRpb24gdmFsdWU9Imdyb292ZSIgID5Hcm9vdmU8L29wdGlvbj4NCi0gIDxvcHRpb24gdmFsdWU9InJpZGdlIiAgID5SaWRnZTwvb3B0aW9uPg0KLSAgPG9wdGlvbiB2YWx1ZT0iaW5zZXQiICAgPkluc2V0PC9vcHRpb24+DQotICA8b3B0aW9uIHZhbHVlPSJvdXRzZXQiICA+b3V0c2V0PC9vcHRpb24+DQotPC9zZWxlY3Q+DQotPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjciIGlkPSJbYm9yZGVyX2NvbG9yXSIgbmFtZT0iW2JvcmRlcl9jb2xvcl0iLz4NCi08YnIgLz48bDEwbj5Db2xsYXBzZSBib3JkZXJzOjwvbDEwbj4gDQotPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJbYm9yZGVyX2NvbGxhcHNlXSIgaWQ9Iltib3JkZXJfY29sbGFwc2VdIiB2YWx1ZT0ib24iIC8+DQotDQotPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2Pg0KLQ0KLTwvZmllbGRzZXQ+DQotDQotPGZpZWxkc2V0ICBpZD0iW3NwYWNpbmdfZmllbGRzZXRdIj4NCi08bGVnZW5kPjxsMTBuPlNwYWNpbmc8L2wxMG4+PC9sZWdlbmQ+DQotDQotPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2Pg0KLQ0KLTxkaXYgY2xhc3M9ImZyIj48bDEwbj5DZWxsIHNwYWNpbmc6PC9sMTBuPjwvZGl2Pg0KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbc3BhY2luZ10iIGlkPSJbc3BhY2luZ10iIHNpemU9IjUiIHRpdGxlPSJfKFNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMpIiAvPg0KLQ0KLTxiciAvPg0KLQ0KLTxkaXYgY2xhc3M9ImZyIj48bDEwbj5DZWxsIHBhZGRpbmc6PC9sMTBuPjwvZGl2Pg0KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbcGFkZGluZ10iIGlkPSJbcGFkZGluZ10iIHNpemU9IjUiIHRpdGxlPSJfKFNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwpIiAvPg0KLQ0KLQ0KLTwvZmllbGRzZXQ+DQotICA8ZGl2IGNsYXNzPSJidXR0b25zIiBzdHlsZT0iY2xlYXI6bGVmdCI+DQotICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0iW29rXSIgICAgIHZhbHVlPSJfKE9LKSIgICAgIC8+DQotICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0iW2NhbmNlbF0iIHZhbHVlPSJfKENhbmNlbCkiIC8+DQotICA8L2Rpdj4NCi08L2Zvcm0+DQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvSW5zZXJ0VGFibGUvaW5zZXJ0X3RhYmxlLmh0bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9pbnNlcnRfdGFibGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNhYWI4ZC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9pbnNlcnRfdGFibGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi08aHRtbD4KLQotPGhlYWQ+Ci0gIDx0aXRsZT5JbnNlcnQgVGFibGU8L3RpdGxlPgotCi08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9wb3B1cHMvcG9wdXAuanMiPjwvc2NyaXB0PgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vLi4vcG9wdXBzL3BvcHVwLmNzcyIgLz4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotCi13aW5kb3cucmVzaXplVG8oNDI1LCAyNTApOwotCi1YaW5oYSA9IHdpbmRvdy5vcGVuZXIuWGluaGE7Ci1mdW5jdGlvbiBpMThuKHN0cikgewotICByZXR1cm4gKFhpbmhhLl9sYyhzdHIsICdYaW5oYScpKTsKLX0KLQotZnVuY3Rpb24gSW5pdCgpIHsKLSAgWGluaGEgPSB3aW5kb3cub3BlbmVyLlhpbmhhOyAvLyBsb2FkIHRoZSBYaW5oYSBwbHVnaW4gYW5kIGxhbmcgZmlsZQotICBfX2RsZ190cmFuc2xhdGUoJ1hpbmhhJyk7Ci0gIF9fZGxnX2luaXQobnVsbCwgWGluaGEuaXNfaWUgPyBudWxsIDoge3dpZHRoOjQyNSxoZWlnaHQ6MjUwfSk7Ci0gIC8vIE1ha2Ugc3VyZSB0aGUgdHJhbnNsYXRlZCBzdHJpbmcgYXBwZWFycyBpbiB0aGUgZHJvcCBkb3duLiAoZm9yIGdlY2tvKQotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl91bml0Iikuc2VsZWN0ZWRJbmRleCA9IDE7Ci0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3VuaXQiKS5zZWxlY3RlZEluZGV4ID0gMDsKLSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYWxpZ24iKS5zZWxlY3RlZEluZGV4ID0gMTsKLSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYWxpZ24iKS5zZWxlY3RlZEluZGV4ID0gMDsKLSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfcm93cyIpLmZvY3VzKCk7Ci19Ci0KLWZ1bmN0aW9uIG9uT0soKSB7Ci0gIHZhciByZXF1aXJlZCA9IHsKLSAgICAiZl9yb3dzIjogaTE4bigiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyIpLAotICAgICJmX2NvbHMiOiBpMThuKCJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiBjb2x1bW5zIikKLSAgfTsKLSAgZm9yICh2YXIgaSBpbiByZXF1aXJlZCkgewotICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGkpOwotICAgIGlmICghZWwudmFsdWUpIHsKLSAgICAgIGFsZXJ0KHJlcXVpcmVkW2ldKTsKLSAgICAgIGVsLmZvY3VzKCk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0gIHZhciBmaWVsZHMgPSBbImZfcm93cyIsICJmX2NvbHMiLCAiZl93aWR0aCIsICJmX3VuaXQiLCAiZl9maXhlZCIsCi0gICAgICAgICAgICAgICAgImZfYWxpZ24iLCAiZl9ib3JkZXIiLCAiZl9zcGFjaW5nIiwgImZfcGFkZGluZyJdOwotICB2YXIgcGFyYW0gPSBuZXcgT2JqZWN0KCk7Ci0gIGZvciAodmFyIGkgaW4gZmllbGRzKSB7Ci0gICAgdmFyIGlkID0gZmllbGRzW2ldOwotICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKLSAgICBwYXJhbVtpZF0gPSAoZWwudHlwZSA9PSAiY2hlY2tib3giKSA/IGVsLmNoZWNrZWQgOiBlbC52YWx1ZTsKLSAgfQotICBfX2RsZ19jbG9zZShwYXJhbSk7Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotZnVuY3Rpb24gb25DYW5jZWwoKSB7Ci0gIF9fZGxnX2Nsb3NlKG51bGwpOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLTwvc2NyaXB0PgotCi08L2hlYWQ+Ci0KLTxib2R5IGNsYXNzPSJkaWFsb2ciIG9ubG9hZD0iSW5pdCgpIj4KLQotPGRpdiBjbGFzcz0idGl0bGUiPkluc2VydCBUYWJsZTwvZGl2PgotCi08Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJnZXQiPgotPHRhYmxlIGJvcmRlcj0iMCIgc3R5bGU9InBhZGRpbmc6IDBweDsgbWFyZ2luOiAwcHgiPgotICA8dGJvZHk+Ci0KLSAgPHRyPgotICAgIDx0ZCBzdHlsZT0id2lkdGg6IDRlbTsgdGV4dC1hbGlnbjogcmlnaHQiPlJvd3M6PC90ZD4KLSAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InJvd3MiIGlkPSJmX3Jvd3MiIHNpemU9IjUiIHRpdGxlPSJOdW1iZXIgb2Ygcm93cyIgdmFsdWU9IjIiIC8+PC90ZD4KLSAgICA8dGQgc3R5bGU9IndpZHRoOiA0ZW07IHRleHQtYWxpZ246IHJpZ2h0Ij5XaWR0aDo8L3RkPgotICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0id2lkdGgiIGlkPSJmX3dpZHRoIiBzaXplPSI1IiB0aXRsZT0iV2lkdGggb2YgdGhlIHRhYmxlIiB2YWx1ZT0iMTAwIiAvPjwvdGQ+Ci0gICAgPHRkPjxzZWxlY3Qgc2l6ZT0iMSIgbmFtZT0idW5pdCIgaWQ9ImZfdW5pdCIgdGl0bGU9IldpZHRoIHVuaXQiPgotICAgICAgPG9wdGlvbiB2YWx1ZT0iJSIgc2VsZWN0ZWQ9InNlbGVjdGVkIiAgPlBlcmNlbnQ8L29wdGlvbj4KLSAgICAgIDxvcHRpb24gdmFsdWU9InB4IiAgICAgICAgICAgICAgPlBpeGVsczwvb3B0aW9uPgotICAgICAgPG9wdGlvbiB2YWx1ZT0iZW0iICAgICAgICAgICAgICA+RW08L29wdGlvbj4KLSAgICA8L3NlbGVjdD48L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIHN0eWxlPSJ3aWR0aDogNGVtOyB0ZXh0LWFsaWduOiByaWdodCI+Q29sczo8L3RkPgotICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY29scyIgaWQ9ImZfY29scyIgc2l6ZT0iNSIgdGl0bGU9Ik51bWJlciBvZiBjb2x1bW5zIiB2YWx1ZT0iNCIgLz48L3RkPgotICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgY2hlY2tlZD0iY2hlY2tlZCIgbmFtZT0iZml4ZWQiIGlkPSJmX2ZpeGVkIiB2YWx1ZT0ib24iIC8+PC90ZD4KLSAgICA8dGQgY29sc3Bhbj0iMiI+PGxhYmVsIGZvcj0iZl9maXhlZCIKLSAgICA+Rml4ZWQgd2lkdGggY29sdW1uczwvbGFiZWw+PC90ZD4KLSAgPC90cj4KLSAgPC90Ym9keT4KLTwvdGFibGU+Ci0KLTxwIC8+Ci0KLTxmaWVsZHNldCBzdHlsZT0iZmxvYXQ6IGxlZnQ7IG1hcmdpbi1sZWZ0OiA1cHg7Ij4KLTxsZWdlbmQ+TGF5b3V0PC9sZWdlbmQ+Ci0KLTxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KLQotPGRpdiBjbGFzcz0iZmwiPkFsaWdubWVudDo8L2Rpdj4KLTxzZWxlY3Qgc2l6ZT0iMSIgbmFtZT0iYWxpZ24iIGlkPSJmX2FsaWduIgotICB0aXRsZT0iUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI+Ci0gIDxvcHRpb24gdmFsdWU9IiIgc2VsZWN0ZWQ9InNlbGVjdGVkIiAgICAgICAgID5Ob3Qgc2V0PC9vcHRpb24+Ci0gIDxvcHRpb24gdmFsdWU9ImxlZnQiICAgICAgICAgICAgICAgICAgICAgICAgID5MZWZ0PC9vcHRpb24+Ci0gIDxvcHRpb24gdmFsdWU9InJpZ2h0IiAgICAgICAgICAgICAgICAgICAgICAgID5SaWdodDwvb3B0aW9uPgotICA8b3B0aW9uIHZhbHVlPSJ0ZXh0dG9wIiAgICAgICAgICAgICAgICAgICAgICA+VGV4dHRvcDwvb3B0aW9uPgotICA8b3B0aW9uIHZhbHVlPSJhYnNtaWRkbGUiICAgICAgICAgICAgICAgICAgICA+QWJzbWlkZGxlPC9vcHRpb24+Ci0gIDxvcHRpb24gdmFsdWU9ImJhc2VsaW5lIiAgICAgICAgICAgICAgICAgICAgID5CYXNlbGluZTwvb3B0aW9uPgotICA8b3B0aW9uIHZhbHVlPSJhYnNib3R0b20iICAgICAgICAgICAgICAgICAgICA+QWJzYm90dG9tPC9vcHRpb24+Ci0gIDxvcHRpb24gdmFsdWU9ImJvdHRvbSIgICAgICAgICAgICAgICAgICAgICAgID5Cb3R0b208L29wdGlvbj4KLSAgPG9wdGlvbiB2YWx1ZT0ibWlkZGxlIiAgICAgICAgICAgICAgICAgICAgICAgPk1pZGRsZTwvb3B0aW9uPgotICA8b3B0aW9uIHZhbHVlPSJ0b3AiICAgICAgICAgICAgICAgICAgICAgICAgICA+VG9wPC9vcHRpb24+Ci08L3NlbGVjdD4KLQotPHAgLz4KLQotPGRpdiBjbGFzcz0iZmwiPkJvcmRlciB0aGlja25lc3M6PC9kaXY+Ci08aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYm9yZGVyIiBpZD0iZl9ib3JkZXIiIHNpemU9IjUiIHZhbHVlPSIxIgotdGl0bGU9IkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiIC8+Ci08IS0tCi08cCAvPgotCi08ZGl2IGNsYXNzPSJmbCI+Q29sbGFwc2UgYm9yZGVyczo8L2Rpdj4KLTxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iY29sbGFwc2UiIGlkPSJmX2NvbGxhcHNlIiAvPgotLS0+Ci08ZGl2IGNsYXNzPSJzcGFjZSI+PC9kaXY+Ci0KLTwvZmllbGRzZXQ+Ci0KLTxmaWVsZHNldCBzdHlsZT0iZmxvYXQ6cmlnaHQ7IG1hcmdpbi1yaWdodDogNXB4OyI+Ci08bGVnZW5kPlNwYWNpbmc8L2xlZ2VuZD4KLQotPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgotCi08ZGl2IGNsYXNzPSJmciI+Q2VsbCBzcGFjaW5nOjwvZGl2PgotPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNwYWNpbmciIGlkPSJmX3NwYWNpbmciIHNpemU9IjUiIHZhbHVlPSIxIgotdGl0bGU9IlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiIC8+Ci0KLTxwIC8+Ci0KLTxkaXYgY2xhc3M9ImZyIj5DZWxsIHBhZGRpbmc6PC9kaXY+Ci08aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icGFkZGluZyIgaWQ9ImZfcGFkZGluZyIgc2l6ZT0iNSIgdmFsdWU9IjEiCi10aXRsZT0iU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCIgLz4KLQotPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgotCi08L2ZpZWxkc2V0PgotCi08ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiA4NXB4OyBib3JkZXItdG9wOiAxcHggc29saWQgIzk5OTsgcGFkZGluZzogMnB4OyB0ZXh0LWFsaWduOiByaWdodDsiPgotPGJ1dHRvbiB0eXBlPSJidXR0b24iIG5hbWU9Im9rIiBvbmNsaWNrPSJyZXR1cm4gb25PSygpOyI+T0s8L2J1dHRvbj4KLTxidXR0b24gdHlwZT0iYnV0dG9uIiBuYW1lPSJjYW5jZWwiIG9uY2xpY2s9InJldHVybiBvbkNhbmNlbCgpOyI+Q2FuY2VsPC9idXR0b24+Ci08L2Rpdj4KLQotPC9mb3JtPgotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9pbnNlcnRfdGFibGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9pbnNlcnRfdGFibGUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNzM0MGQuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvSW5zZXJ0VGFibGUvaW5zZXJ0X3RhYmxlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyogVGhpcyBjb21wcmVzc2VkIGZpbGUgaXMgcGFydCBvZiBYaW5oYS4gRm9yIHVuY29tcHJlc3NlZCBzb3VyY2VzLCBmb3J1bSwgYW5kIGJ1ZyByZXBvcnRzLCBnbyB0byB4aW5oYS5vcmcgKi8KLS8qIFRoZSBVUkwgb2YgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGlzIGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvSW5zZXJ0VGFibGUvaW5zZXJ0X3RhYmxlLmpzICovCi1JbnNlcnRUYWJsZS5fcGx1Z2luSW5mbz17bmFtZToiSW5zZXJ0VGFibGUiLG9yaWdpbjoiWGluaGEgQ29yZSIsdmVyc2lvbjoiJExhc3RDaGFuZ2VkUmV2aXNpb246IDEwODUgJCIucmVwbGFjZSgvXlteOl0qOlxzKiguKilccypcJCQvLCIkMSIpLGRldmVsb3BlcjoiVGhlIFhpbmhhIENvcmUgRGV2ZWxvcGVyIFRlYW0iLGRldmVsb3Blcl91cmw6IiRIZWFkVVJMOiBodHRwOi8vc3ZuLnhpbmhhLm9yZy90YWdzLzAuOTYuMS9tb2R1bGVzL0luc2VydFRhYmxlL2luc2VydF90YWJsZS5qcyAkIi5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sIiQxIiksc3BvbnNvcjoiIixzcG9uc29yX3VybDoiIixsaWNlbnNlOiJodG1sQXJlYSJ9OwotZnVuY3Rpb24gSW5zZXJ0VGFibGUoXzEpewotdGhpcy5lZGl0b3I9XzE7Ci12YXIgXzI9XzEuY29uZmlnOwotdmFyIF8zPXRoaXM7Ci1fMS5jb25maWcuYnRuTGlzdC5pbnNlcnR0YWJsZVszXT1mdW5jdGlvbigpewotXzMuc2hvdygpOwotfTsKLX07Ci1JbnNlcnRUYWJsZS5wcm90b3R5cGUuX2xjPWZ1bmN0aW9uKF80KXsKLXJldHVybiBYaW5oYS5fbGMoXzQsIlhpbmhhIik7Ci19OwotSW5zZXJ0VGFibGUucHJvdG90eXBlLm9uR2VuZXJhdGVPbmNlPWZ1bmN0aW9uKCl7Ci1JbnNlcnRUYWJsZS5sb2FkQXNzZXRzKCk7Ci19OwotSW5zZXJ0VGFibGUubG9hZEFzc2V0cz1mdW5jdGlvbigpewotdmFyIF81PUluc2VydFRhYmxlOwotaWYoXzUubG9hZGluZyl7Ci1yZXR1cm47Ci19Ci1fNS5sb2FkaW5nPXRydWU7Ci1YaW5oYS5fZ2V0YmFjayhfZWRpdG9yX3VybCsibW9kdWxlcy9JbnNlcnRUYWJsZS9kaWFsb2cuaHRtbCIsZnVuY3Rpb24oXzYpewotXzUuaHRtbD1fNjsKLV81LmRpYWxvZ1JlYWR5PXRydWU7Ci19KTsKLVhpbmhhLl9nZXRiYWNrKF9lZGl0b3JfdXJsKyJtb2R1bGVzL0luc2VydFRhYmxlL3BsdWdpbk1ldGhvZHMuanMiLGZ1bmN0aW9uKF83KXsKLWV2YWwoXzcpOwotXzUubWV0aG9kc1JlYWR5PXRydWU7Ci19KTsKLX07Ci1JbnNlcnRUYWJsZS5wcm90b3R5cGUub25VcGRhdGVUb29sYmFyPWZ1bmN0aW9uKCl7Ci1pZighKEluc2VydFRhYmxlLmRpYWxvZ1JlYWR5JiZJbnNlcnRUYWJsZS5tZXRob2RzUmVhZHkpKXsKLXRoaXMuZWRpdG9yLl90b29sYmFyT2JqZWN0cy5pbnNlcnR0YWJsZS5zdGF0ZSgiZW5hYmxlZCIsZmFsc2UpOwotfWVsc2V7Ci10aGlzLm9uVXBkYXRlVG9vbGJhcj1udWxsOwotfQotfTsKLUluc2VydFRhYmxlLnByb3RvdHlwZS5wcmVwYXJlRGlhbG9nPWZ1bmN0aW9uKCl7Ci12YXIgXzg9dGhpczsKLXZhciBfOT10aGlzLmVkaXRvcjsKLXZhciBfYT10aGlzLmRpYWxvZz1uZXcgWGluaGEuRGlhbG9nKF85LEluc2VydFRhYmxlLmh0bWwsIlhpbmhhIix7d2lkdGg6NDAwfSk7Ci1fYS5nZXRFbGVtZW50QnlJZCgib2siKS5vbmNsaWNrPWZ1bmN0aW9uKCl7Ci1fOC5hcHBseSgpOwotfTsKLV9hLmdldEVsZW1lbnRCeUlkKCJjYW5jZWwiKS5vbmNsaWNrPWZ1bmN0aW9uKCl7Ci1fOC5kaWFsb2cuaGlkZSgpOwotfTsKLXRoaXMuYm9yZGVyQ29sb3JQaWNrZXI9bmV3IFhpbmhhLmNvbG9yUGlja2VyLklucHV0QmluZGluZyhfYS5nZXRFbGVtZW50QnlJZCgiYm9yZGVyX2NvbG9yIikpOwotdGhpcy5kaWFsb2cub25yZXNpemU9ZnVuY3Rpb24oKXsKLXRoaXMuZ2V0RWxlbWVudEJ5SWQoImxheW91dF9maWVsZHNldCIpLnN0eWxlLndpZHRoPSh0aGlzLndpZHRoLzIpKzUwKyJweCI7Ci10aGlzLmdldEVsZW1lbnRCeUlkKCJzcGFjaW5nX2ZpZWxkc2V0Iikuc3R5bGUud2lkdGg9KHRoaXMud2lkdGgvMiktMTIwKyJweCI7Ci19OwotdGhpcy5kaWFsb2dSZWFkeT10cnVlOwotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvSW5zZXJ0VGFibGUvcGx1Z2luTWV0aG9kcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0luc2VydFRhYmxlL3BsdWdpbk1ldGhvZHMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjODk4ZTQuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvSW5zZXJ0VGFibGUvcGx1Z2luTWV0aG9kcy5qcworKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qIFRoaXMgY29tcHJlc3NlZCBmaWxlIGlzIHBhcnQgb2YgWGluaGEuIEZvciB1bmNvbXByZXNzZWQgc291cmNlcywgZm9ydW0sIGFuZCBidWcgcmVwb3J0cywgZ28gdG8geGluaGEub3JnICovCi0vKiBUaGUgVVJMIG9mIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBpcyBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL0luc2VydFRhYmxlL3BsdWdpbk1ldGhvZHMuanMgKi8KLUluc2VydFRhYmxlLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKF8xKXsKLWlmKCF0aGlzLmRpYWxvZyl7Ci10aGlzLnByZXBhcmVEaWFsb2coKTsKLX0KLXZhciBfMj10aGlzLmVkaXRvcjsKLXZhciBfMz17ImNhcHRpb24iOiIiLCJyb3dzIjoiMiIsImNvbHMiOiI0Iiwid2lkdGgiOiIxMDAiLCJ1bml0IjoiJSIsImZpeGVkIjoiIiwiYWxpZ24iOiIiLCJib3JkZXIiOiIxIiwiYm9yZGVyX3N0eWxlIjoiZG90dGVkIiwiYm9yZGVyX2NvbG9yIjoiIzAwMDAwMCIsImJvcmRlcl9jb2xsYXBzZSI6Im9uIiwic3BhY2luZyI6IiIsInBhZGRpbmciOiI1In07Ci10aGlzLmJvcmRlckNvbG9yUGlja2VyLnNldENvbG9yKCIjMDAwMDAwIik7Ci10aGlzLmRpYWxvZy5zaG93KF8zKTsKLXRoaXMuZGlhbG9nLm9ucmVzaXplKCk7Ci19OwotSW5zZXJ0VGFibGUucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7Ci12YXIgXzQ9dGhpcy5lZGl0b3I7Ci12YXIgXzU9XzQuX2RvYzsKLXZhciBfNj10aGlzLmRpYWxvZy5nZXRWYWx1ZXMoKTsKLWlmKCFfNi5yb3dzfHwhXzYuY29scyl7Ci1pZighXzYucm93cyl7Ci10aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgicm93c19hbGVydCIpLnN0eWxlLmRpc3BsYXk9IiI7Ci19Ci1pZighXzYuY29scyl7Ci10aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgiY29sdW1uc19hbGVydCIpLnN0eWxlLmRpc3BsYXk9IiI7Ci19Ci1yZXR1cm47Ci19Ci10aGlzLmRpYWxvZy5oaWRlKCk7Ci12YXIgXzc9XzUuY3JlYXRlRWxlbWVudCgidGFibGUiKTsKLWZvcih2YXIgXzggaW4gXzYpewotdmFyIF85PV82W184XTsKLWlmKCFfOSl7Ci1jb250aW51ZTsKLX0KLXN3aXRjaChfOCl7Ci1jYXNlICJ3aWR0aCI6Ci1fNy5zdHlsZS53aWR0aD1fOStfNi51bml0LnZhbHVlOwotYnJlYWs7Ci1jYXNlICJhbGlnbiI6Ci1fNy5hbGlnbj1fOS52YWx1ZTsKLWJyZWFrOwotY2FzZSAiYm9yZGVyIjoKLV83LnN0eWxlLmJvcmRlcj1fOSsicHggIitfNi5ib3JkZXJfc3R5bGUudmFsdWUrIiAiK182LmJvcmRlcl9jb2xvcjsKLWJyZWFrOwotY2FzZSAiYm9yZGVyX2NvbGxhcHNlIjoKLV83LnN0eWxlLmJvcmRlckNvbGxhcHNlPShfOT09Im9uIik/ImNvbGxhcHNlIjoiIjsKLWJyZWFrOwotY2FzZSAic3BhY2luZyI6Ci1fNy5jZWxsU3BhY2luZz1wYXJzZUludChfOSwxMCk7Ci1icmVhazsKLWNhc2UgInBhZGRpbmciOgotXzcuY2VsbFBhZGRpbmc9cGFyc2VJbnQoXzksMTApOwotYnJlYWs7Ci19Ci19Ci1pZihfNi5jYXB0aW9uKXsKLXZhciBfYT1fNy5jcmVhdGVDYXB0aW9uKCk7Ci1fYS5hcHBlbmRDaGlsZChfNS5jcmVhdGVUZXh0Tm9kZShfNi5jYXB0aW9uKSk7Ci19Ci12YXIgX2I9MDsKLWlmKF82LmZpeGVkKXsKLV9iPU1hdGguZmxvb3IoMTAwL3BhcnNlSW50KF82LmNvbHMsMTApKTsKLX0KLXZhciBfYz1fNS5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpOwotXzcuYXBwZW5kQ2hpbGQoX2MpOwotZm9yKHZhciBpPTA7aTxfNi5yb3dzOysraSl7Ci12YXIgdHI9XzUuY3JlYXRlRWxlbWVudCgidHIiKTsKLV9jLmFwcGVuZENoaWxkKHRyKTsKLWZvcih2YXIgaj0wO2o8XzYuY29sczsrK2opewotdmFyIHRkPV81LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci1pZihfYiYmaT09PTApewotdGQuc3R5bGUud2lkdGg9X2IrIiUiOwotfQotaWYoXzYuYm9yZGVyKXsKLXRkLnN0eWxlLmJvcmRlcj1fNi5ib3JkZXIrInB4ICIrXzYuYm9yZGVyX3N0eWxlLnZhbHVlKyIgIitfNi5ib3JkZXJfY29sb3I7Ci19Ci10ci5hcHBlbmRDaGlsZCh0ZCk7Ci10ZC5hcHBlbmRDaGlsZChfNS5jcmVhdGVUZXh0Tm9kZSgiwqAiKSk7Ci19Ci19Ci1fNC5pbnNlcnROb2RlQXRTZWxlY3Rpb24oXzcpOwotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvSW50ZXJuZXRFeHBsb3Jlci9JbnRlcm5ldEV4cGxvcmVyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvSW50ZXJuZXRFeHBsb3Jlci9JbnRlcm5ldEV4cGxvcmVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTU1MDdiLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0ludGVybmV0RXhwbG9yZXIvSW50ZXJuZXRFeHBsb3Jlci5qcworKysgL2Rldi9udWxsCkBAIC0xLDQ3NyArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvbW9kdWxlcy9JbnRlcm5ldEV4cGxvcmVyL0ludGVybmV0RXhwbG9yZXIuanMgKi8KLUludGVybmV0RXhwbG9yZXIuX3BsdWdpbkluZm89e25hbWU6IkludGVybmV0IEV4cGxvcmVyIixvcmlnaW46IlhpbmhhIENvcmUiLHZlcnNpb246IiRMYXN0Q2hhbmdlZFJldmlzaW9uOiAxMjYwICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywiJDEiKSxkZXZlbG9wZXI6IlRoZSBYaW5oYSBDb3JlIERldmVsb3BlciBUZWFtIixkZXZlbG9wZXJfdXJsOiIkSGVhZFVSTDogaHR0cDovL3N2bi54aW5oYS5vcmcvdGFncy8wLjk2LjEvbW9kdWxlcy9JbnRlcm5ldEV4cGxvcmVyL0ludGVybmV0RXhwbG9yZXIuanMgJCIucmVwbGFjZSgvXlteOl0qOlxzKiguKilccypcJCQvLCIkMSIpLHNwb25zb3I6IiIsc3BvbnNvcl91cmw6IiIsbGljZW5zZToiaHRtbEFyZWEifTsKLWZ1bmN0aW9uIEludGVybmV0RXhwbG9yZXIoXzEpewotdGhpcy5lZGl0b3I9XzE7Ci1fMS5JbnRlcm5ldEV4cGxvcmVyPXRoaXM7Ci19OwotSW50ZXJuZXRFeHBsb3Jlci5wcm90b3R5cGUub25LZXlQcmVzcz1mdW5jdGlvbihldil7Ci1pZih0aGlzLmVkaXRvci5pc1Nob3J0Q3V0KGV2KSl7Ci1zd2l0Y2godGhpcy5lZGl0b3IuZ2V0S2V5KGV2KS50b0xvd2VyQ2FzZSgpKXsKLWNhc2UgIm4iOgotdGhpcy5lZGl0b3IuZXhlY0NvbW1hbmQoImZvcm1hdGJsb2NrIixmYWxzZSwiPHA+Iik7Ci1YaW5oYS5fc3RvcEV2ZW50KGV2KTsKLXJldHVybiB0cnVlOwotYnJlYWs7Ci1jYXNlICIxIjoKLWNhc2UgIjIiOgotY2FzZSAiMyI6Ci1jYXNlICI0IjoKLWNhc2UgIjUiOgotY2FzZSAiNiI6Ci10aGlzLmVkaXRvci5leGVjQ29tbWFuZCgiZm9ybWF0YmxvY2siLGZhbHNlLCI8aCIrdGhpcy5lZGl0b3IuZ2V0S2V5KGV2KS50b0xvd2VyQ2FzZSgpKyI+Iik7Ci1YaW5oYS5fc3RvcEV2ZW50KGV2KTsKLXJldHVybiB0cnVlOwotYnJlYWs7Ci19Ci19Ci1zd2l0Y2goZXYua2V5Q29kZSl7Ci1jYXNlIDg6Ci1jYXNlIDQ2OgotaWYodGhpcy5oYW5kbGVCYWNrc3BhY2UoKSl7Ci1YaW5oYS5fc3RvcEV2ZW50KGV2KTsKLXJldHVybiB0cnVlOwotfQotYnJlYWs7Ci1jYXNlIDk6Ci1YaW5oYS5fc3RvcEV2ZW50KGV2KTsKLXJldHVybiB0cnVlOwotfQotcmV0dXJuIGZhbHNlOwotfTsKLUludGVybmV0RXhwbG9yZXIucHJvdG90eXBlLmhhbmRsZUJhY2tzcGFjZT1mdW5jdGlvbigpewotdmFyIF8zPXRoaXMuZWRpdG9yOwotdmFyIF80PV8zLmdldFNlbGVjdGlvbigpOwotaWYoXzQudHlwZT09IkNvbnRyb2wiKXsKLXZhciBfNT1fMy5hY3RpdmVFbGVtZW50KF80KTsKLVhpbmhhLnJlbW92ZUZyb21QYXJlbnQoXzUpOwotcmV0dXJuIHRydWU7Ci19Ci12YXIgXzY9XzMuY3JlYXRlUmFuZ2UoXzQpOwotdmFyIHIyPV82LmR1cGxpY2F0ZSgpOwotcjIubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLC0xKTsKLXZhciBhPXIyLnBhcmVudEVsZW1lbnQoKTsKLWlmKGEhPV82LnBhcmVudEVsZW1lbnQoKSYmKC9eYSQvaS50ZXN0KGEudGFnTmFtZSkpKXsKLXIyLmNvbGxhcHNlKHRydWUpOwotcjIubW92ZUVuZCgiY2hhcmFjdGVyIiwxKTsKLXIyLnBhc3RlSFRNTCgiIik7Ci1yMi5zZWxlY3QoKTsKLXJldHVybiB0cnVlOwotfQotfTsKLUludGVybmV0RXhwbG9yZXIucHJvdG90eXBlLmlud2FyZEh0bWw9ZnVuY3Rpb24oXzkpewotXzk9XzkucmVwbGFjZSgvPChcLz8pZGVsKFxzfD58XC8pL2lnLCI8JDFzdHJpa2UkMiIpOwotXzk9XzkucmVwbGFjZSgvKDxzY3JpcHR8PCEtLSkvaSwiJm5ic3A7JDEiKTsKLV85PV85LnJlcGxhY2UoLzxzcGFuW14+XStpZD0iX19JbnNlcnRTcGFuX1dvcmthcm91bmRfW2Etel0rIi4qPz4oW1xzXFNdKj8pPFwvc3Bhbj4vaSwiJDEiKTsKLXJldHVybiBfOTsKLX07Ci1JbnRlcm5ldEV4cGxvcmVyLnByb3RvdHlwZS5vdXR3YXJkSHRtbD1mdW5jdGlvbihfYSl7Ci1fYT1fYS5yZXBsYWNlKC8mbmJzcDsoXHMqKSg8c2NyaXB0fDwhLS0pL2ksIiQxJDIiKTsKLV9hPV9hLnJlcGxhY2UoLzxzcGFuW14+XStpZD0iX19JbnNlcnRTcGFuX1dvcmthcm91bmRfW2Etel0rIi4qPz4oW1xzXFNdKj8pPFwvc3Bhbj4vaSwiJDEiKTsKLXJldHVybiBfYTsKLX07Ci1JbnRlcm5ldEV4cGxvcmVyLnByb3RvdHlwZS5vbkV4ZWNDb21tYW5kPWZ1bmN0aW9uKF9iLFVJLF9kKXsKLXN3aXRjaChfYil7Ci1jYXNlICJzYXZlYXMiOgotdmFyIF9lPW51bGw7Ci12YXIgX2Y9dGhpcy5lZGl0b3I7Ci12YXIgXzEwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOwotXzEwLnNyYz0iYWJvdXQ6YmxhbmsiOwotXzEwLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwotZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChfMTApOwotdHJ5ewotaWYoXzEwLmNvbnRlbnREb2N1bWVudCl7Ci1fZT1fMTAuY29udGVudERvY3VtZW50OwotfWVsc2V7Ci1fZT1fMTAuY29udGVudFdpbmRvdy5kb2N1bWVudDsKLX0KLX0KLWNhdGNoKGV4KXsKLX0KLV9lLm9wZW4oInRleHQvaHRtbCIsInJlcGxhY2UiKTsKLXZhciBfMTE9IiI7Ci1pZihfZi5jb25maWcuYnJvd3NlclF1aXJrc01vZGU9PT1mYWxzZSl7Ci12YXIgXzEyPSI8IURPQ1RZUEUgSFRNTCBQVUJMSUMgXCItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTlwiIFwiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkXCI+IjsKLX1lbHNlewotaWYoX2YuY29uZmlnLmJyb3dzZXJRdWlya3NNb2RlPT09dHJ1ZSl7Ci12YXIgXzEyPSIiOwotfWVsc2V7Ci12YXIgXzEyPVhpbmhhLmdldERvY3R5cGUoZG9jdW1lbnQpOwotfQotfQotaWYoIV9mLmNvbmZpZy5mdWxsUGFnZSl7Ci1fMTErPV8xMisiXG4iOwotXzExKz0iPGh0bWw+XG4iOwotXzExKz0iPGhlYWQ+XG4iOwotXzExKz0iPG1ldGEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9IitfZi5jb25maWcuY2hhclNldCsiXCI+XG4iOwotaWYodHlwZW9mIF9mLmNvbmZpZy5iYXNlSHJlZiE9InVuZGVmaW5lZCImJl9mLmNvbmZpZy5iYXNlSHJlZiE9PW51bGwpewotXzExKz0iPGJhc2UgaHJlZj1cIiIrX2YuY29uZmlnLmJhc2VIcmVmKyJcIi8+XG4iOwotfQotaWYodHlwZW9mIF9mLmNvbmZpZy5wYWdlU3R5bGVTaGVldHMhPT0idW5kZWZpbmVkIil7Ci1mb3IodmFyIGk9MDtpPF9mLmNvbmZpZy5wYWdlU3R5bGVTaGVldHMubGVuZ3RoO2krKyl7Ci1pZihfZi5jb25maWcucGFnZVN0eWxlU2hlZXRzW2ldLmxlbmd0aD4wKXsKLV8xMSs9IjxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiB0eXBlPVwidGV4dC9jc3NcIiBocmVmPVwiIitfZi5jb25maWcucGFnZVN0eWxlU2hlZXRzW2ldKyJcIj4iOwotfQotfQotfQotaWYoX2YuY29uZmlnLnBhZ2VTdHlsZSl7Ci1fMTErPSI8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+XG4iK19mLmNvbmZpZy5wYWdlU3R5bGUrIlxuPC9zdHlsZT4iOwotfQotXzExKz0iPC9oZWFkPlxuIjsKLV8xMSs9Ijxib2R5PlxuIjsKLV8xMSs9X2YuZ2V0RWRpdG9yQ29udGVudCgpOwotXzExKz0iPC9ib2R5PlxuIjsKLV8xMSs9IjwvaHRtbD4iOwotfWVsc2V7Ci1fMTE9X2YuZ2V0RWRpdG9yQ29udGVudCgpOwotaWYoXzExLm1hdGNoKFhpbmhhLlJFX2RvY3R5cGUpKXsKLV9mLnNldERvY3R5cGUoUmVnRXhwLiQxKTsKLX0KLX0KLV9lLndyaXRlKF8xMSk7Ci1fZS5jbG9zZSgpOwotX2UuZXhlY0NvbW1hbmQoX2IsVUksX2QpOwotZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChfMTApOwotcmV0dXJuIHRydWU7Ci1icmVhazsKLWNhc2UgInJlbW92ZWZvcm1hdCI6Ci12YXIgX2Y9dGhpcy5lZGl0b3I7Ci12YXIgc2VsPV9mLmdldFNlbGVjdGlvbigpOwotdmFyIF8xNT1fZi5zYXZlU2VsZWN0aW9uKHNlbCk7Ci12YXIgaSxlbCxlbHM7Ci1mdW5jdGlvbiBjbGVhbihlbCl7Ci1pZihlbC5ub2RlVHlwZSE9MSl7Ci1yZXR1cm47Ci19Ci1lbC5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIik7Ci1mb3IodmFyIGo9MDtqPGVsLmNoaWxkTm9kZXMubGVuZ3RoO2orKyl7Ci1jbGVhbihlbC5jaGlsZE5vZGVzW2pdKTsKLX0KLWlmKChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJzcGFuIiYmIWVsLmF0dHJpYnV0ZXMubGVuZ3RoKXx8ZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0iZm9udCIpewotZWwub3V0ZXJIVE1MPWVsLmlubmVySFRNTDsKLX0KLX07Ci1pZihfZi5zZWxlY3Rpb25FbXB0eShzZWwpKXsKLWVscz1fZi5fZG9jLmJvZHkuY2hpbGROb2RlczsKLWZvcihpPTA7aTxlbHMubGVuZ3RoO2krKyl7Ci1lbD1lbHNbaV07Ci1pZihlbC5ub2RlVHlwZSE9MSl7Ci1jb250aW51ZTsKLX0KLWlmKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09InNwYW4iKXsKLW5ld05vZGU9X2YuY29udmVydE5vZGUoZWwsImRpdiIpOwotZWwucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3Tm9kZSxlbCk7Ci1lbD1uZXdOb2RlOwotfQotY2xlYW4oZWwpOwotfQotfQotX2YuX2RvYy5leGVjQ29tbWFuZChfYixVSSxfZCk7Ci1fZi5yZXN0b3JlU2VsZWN0aW9uKF8xNSk7Ci1yZXR1cm4gdHJ1ZTsKLWJyZWFrOwotfQotcmV0dXJuIGZhbHNlOwotfTsKLVhpbmhhLnByb3RvdHlwZS5pbnNlcnROb2RlQXRTZWxlY3Rpb249ZnVuY3Rpb24oXzFhKXsKLXRoaXMuaW5zZXJ0SFRNTChfMWEub3V0ZXJIVE1MKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0UGFyZW50RWxlbWVudD1mdW5jdGlvbihzZWwpewotaWYodHlwZW9mIHNlbD09InVuZGVmaW5lZCIpewotc2VsPXRoaXMuZ2V0U2VsZWN0aW9uKCk7Ci19Ci12YXIgXzFjPXRoaXMuY3JlYXRlUmFuZ2Uoc2VsKTsKLXN3aXRjaChzZWwudHlwZSl7Ci1jYXNlICJUZXh0IjoKLXZhciBfMWQ9XzFjLnBhcmVudEVsZW1lbnQoKTsKLXdoaWxlKHRydWUpewotdmFyIF8xZT1fMWMuZHVwbGljYXRlKCk7Ci1fMWUubW92ZVRvRWxlbWVudFRleHQoXzFkKTsKLWlmKF8xZS5pblJhbmdlKF8xYykpewotYnJlYWs7Ci19Ci1pZigoXzFkLm5vZGVUeXBlIT0xKXx8KF8xZC50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJib2R5IikpewotYnJlYWs7Ci19Ci1fMWQ9XzFkLnBhcmVudEVsZW1lbnQ7Ci19Ci1yZXR1cm4gXzFkOwotY2FzZSAiTm9uZSI6Ci10cnl7Ci1yZXR1cm4gXzFjLnBhcmVudEVsZW1lbnQoKTsKLX0KLWNhdGNoKGUpewotcmV0dXJuIHRoaXMuX2RvYy5ib2R5OwotfQotY2FzZSAiQ29udHJvbCI6Ci1yZXR1cm4gXzFjLml0ZW0oMCk7Ci1kZWZhdWx0OgotcmV0dXJuIHRoaXMuX2RvYy5ib2R5OwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5hY3RpdmVFbGVtZW50PWZ1bmN0aW9uKHNlbCl7Ci1pZigoc2VsPT09bnVsbCl8fHRoaXMuc2VsZWN0aW9uRW1wdHkoc2VsKSl7Ci1yZXR1cm4gbnVsbDsKLX0KLWlmKHNlbC50eXBlLnRvTG93ZXJDYXNlKCk9PSJjb250cm9sIil7Ci1yZXR1cm4gc2VsLmNyZWF0ZVJhbmdlKCkuaXRlbSgwKTsKLX1lbHNlewotdmFyIF8yMD1zZWwuY3JlYXRlUmFuZ2UoKTsKLXZhciBfMjE9dGhpcy5nZXRQYXJlbnRFbGVtZW50KHNlbCk7Ci1pZihfMjEuaW5uZXJIVE1MPT1fMjAuaHRtbFRleHQpewotcmV0dXJuIF8yMTsKLX0KLXJldHVybiBudWxsOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5zZWxlY3Rpb25FbXB0eT1mdW5jdGlvbihzZWwpewotaWYoIXNlbCl7Ci1yZXR1cm4gdHJ1ZTsKLX0KLXJldHVybiB0aGlzLmNyZWF0ZVJhbmdlKHNlbCkuaHRtbFRleHQ9PT0iIjsKLX07Ci1YaW5oYS5wcm90b3R5cGUuc2F2ZVNlbGVjdGlvbj1mdW5jdGlvbihzZWwpewotcmV0dXJuIHRoaXMuY3JlYXRlUmFuZ2Uoc2VsP3NlbDp0aGlzLmdldFNlbGVjdGlvbigpKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUucmVzdG9yZVNlbGVjdGlvbj1mdW5jdGlvbihfMjQpewotaWYoIV8yNCl7Ci1yZXR1cm47Ci19Ci12YXIgXzI1PW51bGw7Ci1pZihfMjQucGFyZW50RWxlbWVudCl7Ci1fMjU9XzI0LnBhcmVudEVsZW1lbnQoKTsKLX1lbHNlewotXzI1PV8yNC5pdGVtKDApOwotfQotdmFyIF8yNj10aGlzLmNyZWF0ZVJhbmdlKHRoaXMuZ2V0U2VsZWN0aW9uKCkpOwotdmFyIF8yNz1udWxsOwotaWYoXzI2LnBhcmVudEVsZW1lbnQpewotXzI3PV8yNi5wYXJlbnRFbGVtZW50KCk7Ci19ZWxzZXsKLV8yNz1fMjYuaXRlbSgwKTsKLX0KLXZhciBfMjg9ZnVuY3Rpb24oZWwpewotZm9yKHZhciBfMmE9ZWw7XzJhO18yYT1fMmEucGFyZW50Tm9kZSl7Ci1pZihfMmEudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0iaHRtbCIpewotcmV0dXJuIF8yYS5wYXJlbnROb2RlOwotfQotfQotcmV0dXJuIG51bGw7Ci19OwotaWYoXzI0LnBhcmVudEVsZW1lbnQmJl8yOChfMjUpPT1fMjgoXzI3KSl7Ci1pZihfMjYuaXNFcXVhbChfMjQpKXsKLXJldHVybjsKLX0KLX0KLXRyeXsKLV8yNC5zZWxlY3QoKTsKLX0KLWNhdGNoKGUpewotfQotXzI2PXRoaXMuY3JlYXRlUmFuZ2UodGhpcy5nZXRTZWxlY3Rpb24oKSk7Ci1pZihfMjYucGFyZW50RWxlbWVudCl7Ci1fMjc9XzI2LnBhcmVudEVsZW1lbnQoKTsKLX1lbHNlewotXzI3PV8yNi5pdGVtKDApOwotfQotaWYoXzI3IT1fMjUpewotdmFyIF8yYj10aGlzLmNvbmZpZy5zZWxlY3RXb3JrYXJvdW5kfHwiVmlzaWJsZUN1ZSI7Ci1zd2l0Y2goXzJiKXsKLWNhc2UgIlNpbXVsYXRlQ2xpY2siOgotY2FzZSAiSW5zZXJ0U3BhbiI6Ci12YXIgXzJjPV8yOChfMjUpOwotdmFyIF8yZD1mdW5jdGlvbihfMmUpewotdmFyIF8yZj0iIjsKLWZvcih2YXIgXzMwPTA7XzMwPDI2OysrXzMwKXsKLV8yZis9U3RyaW5nLmZyb21DaGFyQ29kZSgiYSIuY2hhckNvZGVBdCgwKStfMzApOwotfQotdmFyIF8zMT0iIjsKLWZvcih2YXIgXzMwPTA7XzMwPF8yZTsrK18zMCl7Ci1fMzErPV8yZi5zdWJzdHIoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKl8yZi5sZW5ndGgrMSksMSk7Ci19Ci1yZXR1cm4gXzMxOwotfTsKLXZhciBfMzI9MTsKLXZhciBfMzM9Il9fSW5zZXJ0U3Bhbl9Xb3JrYXJvdW5kXyIrXzJkKF8zMik7Ci13aGlsZShfMmMuZ2V0RWxlbWVudEJ5SWQoXzMzKSl7Ci1fMzIrPTE7Ci1fMzM9Il9fSW5zZXJ0U3Bhbl9Xb3JrYXJvdW5kXyIrXzJkKF8zMik7Ci19Ci1fMjQucGFzdGVIVE1MKCI8c3BhbiBpZD1cIiIrXzMzKyJcIj48L3NwYW4+Iik7Ci12YXIgXzM0PV8yYy5nZXRFbGVtZW50QnlJZChfMzMpOwotXzI0Lm1vdmVUb0VsZW1lbnRUZXh0KF8zNCk7Ci1fMjQuc2VsZWN0KCk7Ci1icmVhazsKLWNhc2UgIkp1c3RpZmljYXRpb25IYWNrIjoKLXZhciBfMzU9U3RyaW5nLmZyb21DaGFyQ29kZSgxKTsKLV8yNC5wYXN0ZUhUTUwoXzM1KTsKLV8yNC5maW5kVGV4dChfMzUsLTEpOwotXzI0LnNlbGVjdCgpOwotXzI0LmV4ZWNDb21tYW5kKCJKdXN0aWZ5Tm9uZSIpOwotXzI0LnBhc3RlSFRNTCgiIik7Ci1icmVhazsKLWNhc2UgIlZpc2libGVDdWUiOgotZGVmYXVsdDoKLXZhciBfMzU9U3RyaW5nLmZyb21DaGFyQ29kZSgxKTsKLV8yNC5wYXN0ZUhUTUwoXzM1KTsKLV8yNC5maW5kVGV4dChfMzUsLTEpOwotXzI0LnNlbGVjdCgpOwotfQotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5zZWxlY3ROb2RlQ29udGVudHM9ZnVuY3Rpb24oXzM2LF8zNyl7Ci10aGlzLmZvY3VzRWRpdG9yKCk7Ci10aGlzLmZvcmNlUmVkcmF3KCk7Ci12YXIgXzM4OwotdmFyIF8zOT10eXBlb2YgXzM3PT0idW5kZWZpbmVkIj90cnVlOmZhbHNlOwotaWYoXzM5JiZfMzYudGFnTmFtZSYmXzM2LnRhZ05hbWUudG9Mb3dlckNhc2UoKS5tYXRjaCgvdGFibGV8aW1nfGlucHV0fHNlbGVjdHx0ZXh0YXJlYS8pKXsKLV8zOD10aGlzLl9kb2MuYm9keS5jcmVhdGVDb250cm9sUmFuZ2UoKTsKLV8zOC5hZGQoXzM2KTsKLX1lbHNlewotXzM4PXRoaXMuX2RvYy5ib2R5LmNyZWF0ZVRleHRSYW5nZSgpOwotaWYoMz09XzM2Lm5vZGVUeXBlKXsKLWlmKF8zNi5wYXJlbnROb2RlKXsKLV8zOC5tb3ZlVG9FbGVtZW50VGV4dChfMzYucGFyZW50Tm9kZSk7Ci19ZWxzZXsKLV8zOC5tb3ZlVG9FbGVtZW50VGV4dCh0aGlzLl9kb2MuYm9keSk7Ci19Ci12YXIgXzNhPXRoaXMuX2RvYy5ib2R5LmNyZWF0ZVRleHRSYW5nZSgpOwotdmFyIF8zYj0wOwotdmFyIF8zYz1fMzYucHJldmlvdXNTaWJsaW5nOwotZm9yKDtfM2MmJigxIT1fM2Mubm9kZVR5cGUpO18zYz1fM2MucHJldmlvdXNTaWJsaW5nKXsKLWlmKDM9PV8zYy5ub2RlVHlwZSl7Ci1fM2IrPV8zYy5ub2RlVmFsdWUubGVuZ3RoLV8zYy5ub2RlVmFsdWUuc3BsaXQoIlxyIikubGVuZ3RoLTE7Ci19Ci19Ci1pZihfM2MmJigxPT1fM2Mubm9kZVR5cGUpKXsKLV8zYS5tb3ZlVG9FbGVtZW50VGV4dChfM2MpOwotXzM4LnNldEVuZFBvaW50KCJTdGFydFRvRW5kIixfM2EpOwotfQotaWYoXzNiKXsKLV8zOC5tb3ZlU3RhcnQoImNoYXJhY3RlciIsXzNiKTsKLX0KLV8zYj0wOwotXzNjPV8zNi5uZXh0U2libGluZzsKLWZvcig7XzNjJiYoMSE9XzNjLm5vZGVUeXBlKTtfM2M9XzNjLm5leHRTaWJsaW5nKXsKLWlmKDM9PV8zYy5ub2RlVHlwZSl7Ci1fM2IrPV8zYy5ub2RlVmFsdWUubGVuZ3RoLV8zYy5ub2RlVmFsdWUuc3BsaXQoIlxyIikubGVuZ3RoLTE7Ci1pZighXzNjLm5leHRTaWJsaW5nKXsKLV8zYis9MTsKLX0KLX0KLX0KLWlmKF8zYyYmKDE9PV8zYy5ub2RlVHlwZSkpewotXzNhLm1vdmVUb0VsZW1lbnRUZXh0KF8zYyk7Ci1fMzguc2V0RW5kUG9pbnQoIkVuZFRvU3RhcnQiLF8zYSk7Ci19Ci1pZihfM2IpewotXzM4Lm1vdmVFbmQoImNoYXJhY3RlciIsLV8zYik7Ci19Ci1pZighXzM2Lm5leHRTaWJsaW5nKXsKLV8zOC5tb3ZlRW5kKCJjaGFyYWN0ZXIiLC0xKTsKLX0KLX1lbHNlewotXzM4Lm1vdmVUb0VsZW1lbnRUZXh0KF8zNik7Ci19Ci19Ci1pZih0eXBlb2YgXzM3IT0idW5kZWZpbmVkIil7Ci1fMzguY29sbGFwc2UoXzM3KTsKLWlmKCFfMzcpewotXzM4Lm1vdmVTdGFydCgiY2hhcmFjdGVyIiwtMSk7Ci1fMzgubW92ZUVuZCgiY2hhcmFjdGVyIiwtMSk7Ci19Ci19Ci1fMzguc2VsZWN0KCk7Ci19OwotWGluaGEucHJvdG90eXBlLmluc2VydEhUTUw9ZnVuY3Rpb24oXzNkKXsKLXRoaXMuZm9jdXNFZGl0b3IoKTsKLXZhciBzZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLXZhciBfM2Y9dGhpcy5jcmVhdGVSYW5nZShzZWwpOwotXzNmLnBhc3RlSFRNTChfM2QpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5nZXRTZWxlY3RlZEhUTUw9ZnVuY3Rpb24oKXsKLXZhciBzZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLWlmKHRoaXMuc2VsZWN0aW9uRW1wdHkoc2VsKSl7Ci1yZXR1cm4gIiI7Ci19Ci12YXIgXzQxPXRoaXMuY3JlYXRlUmFuZ2Uoc2VsKTsKLWlmKF80MS5odG1sVGV4dCl7Ci1yZXR1cm4gXzQxLmh0bWxUZXh0OwotfWVsc2V7Ci1pZihfNDEubGVuZ3RoPj0xKXsKLXJldHVybiBfNDEuaXRlbSgwKS5vdXRlckhUTUw7Ci19Ci19Ci1yZXR1cm4gIiI7Ci19OwotWGluaGEucHJvdG90eXBlLmdldFNlbGVjdGlvbj1mdW5jdGlvbigpewotcmV0dXJuIHRoaXMuX2RvYy5zZWxlY3Rpb247Ci19OwotWGluaGEucHJvdG90eXBlLmNyZWF0ZVJhbmdlPWZ1bmN0aW9uKHNlbCl7Ci1pZighc2VsKXsKLXNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotfQotcmV0dXJuIHNlbC5jcmVhdGVSYW5nZSgpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5pc0tleUV2ZW50PWZ1bmN0aW9uKF80Myl7Ci1yZXR1cm4gXzQzLnR5cGU9PSJrZXlkb3duIjsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0S2V5PWZ1bmN0aW9uKF80NCl7Ci1yZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShfNDQua2V5Q29kZSk7Ci19OwotWGluaGEuZ2V0T3V0ZXJIVE1MPWZ1bmN0aW9uKF80NSl7Ci1yZXR1cm4gXzQ1Lm91dGVySFRNTDsKLX07Ci1YaW5oYS5jYz1TdHJpbmcuZnJvbUNoYXJDb2RlKDgyMDEpOwotWGluaGEucHJvdG90eXBlLnNldENDPWZ1bmN0aW9uKF80Nil7Ci12YXIgY2M9WGluaGEuY2M7Ci1pZihfNDY9PSJ0ZXh0YXJlYSIpewotdmFyIHRhPXRoaXMuX3RleHRBcmVhOwotdmFyIHBvcz1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsKLXBvcy5jb2xsYXBzZSgpOwotcG9zLnRleHQ9Y2M7Ci12YXIgXzRhPXRhLnZhbHVlLmluZGV4T2YoY2MpOwotdmFyIF80Yj10YS52YWx1ZS5zdWJzdHJpbmcoMCxfNGEpOwotdmFyIF80Yz10YS52YWx1ZS5zdWJzdHJpbmcoXzRhK2NjLmxlbmd0aCx0YS52YWx1ZS5sZW5ndGgpOwotaWYoXzRjLm1hdGNoKC9eW148XSo+LykpewotdmFyIF80ZD1fNGMuaW5kZXhPZigiPiIpKzE7Ci10YS52YWx1ZT1fNGIrXzRjLnN1YnN0cmluZygwLF80ZCkrY2MrXzRjLnN1YnN0cmluZyhfNGQsXzRjLmxlbmd0aCk7Ci19ZWxzZXsKLXRhLnZhbHVlPV80YitjYytfNGM7Ci19Ci10YS52YWx1ZT10YS52YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoIigmW14iK2NjKyJdKj8pKCIrY2MrIikoW14iK2NjKyJdKj87KSIpLCIkMSQzJDIiKTsKLXRhLnZhbHVlPXRhLnZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCgiKDxzY3JpcHRbXj5dKj5bXiIrY2MrIl0qPykoIitjYysiKShbXiIrY2MrIl0qPzwvc2NyaXB0PikiKSwiJDEkMyQyIik7Ci10YS52YWx1ZT10YS52YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoIl4oW14iK2NjKyJdKikoIitjYysiKShbXiIrY2MrIl0qPGJvZHlbXj5dKj4pKC4qPykiKSwiJDEkMyQyJDQiKTsKLX1lbHNlewotdmFyIHNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotdmFyIHI9c2VsLmNyZWF0ZVJhbmdlKCk7Ci1pZihzZWwudHlwZT09IkNvbnRyb2wiKXsKLXZhciBfNTA9ci5pdGVtKDApOwotXzUwLm91dGVySFRNTCs9Y2M7Ci19ZWxzZXsKLXIuY29sbGFwc2UoKTsKLXIudGV4dD1jYzsKLX0KLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuZmluZENDPWZ1bmN0aW9uKF81MSl7Ci12YXIgXzUyPShfNTE9PSJ0ZXh0YXJlYSIpP3RoaXMuX3RleHRBcmVhOnRoaXMuX2RvYy5ib2R5OwotcmFuZ2U9XzUyLmNyZWF0ZVRleHRSYW5nZSgpOwotaWYocmFuZ2UuZmluZFRleHQoZXNjYXBlKFhpbmhhLmNjKSkpewotcmFuZ2Uuc2VsZWN0KCk7Ci1yYW5nZS50ZXh0PSIiOwotcmFuZ2Uuc2VsZWN0KCk7Ci19Ci1pZihyYW5nZS5maW5kVGV4dChYaW5oYS5jYykpewotcmFuZ2Uuc2VsZWN0KCk7Ci1yYW5nZS50ZXh0PSIiOwotcmFuZ2Uuc2VsZWN0KCk7Ci19Ci1pZihfNTE9PSJ0ZXh0YXJlYSIpewotdGhpcy5fdGV4dEFyZWEuZm9jdXMoKTsKLX0KLX07Ci1YaW5oYS5nZXREb2N0eXBlPWZ1bmN0aW9uKGRvYyl7Ci1yZXR1cm4gKGRvYy5jb21wYXRNb2RlPT0iQ1NTMUNvbXBhdCImJlhpbmhhLmllX3ZlcnNpb248OCk/IjwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOXCIgXCJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGRcIj4iOiIiOwotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvT3BlcmEvT3BlcmEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9PcGVyYS9PcGVyYS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UwOGI0NS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9PcGVyYS9PcGVyYS5qcworKysgL2Rldi9udWxsCkBAIC0xLDQ3MSArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvbW9kdWxlcy9PcGVyYS9PcGVyYS5qcyAqLwotT3BlcmEuX3BsdWdpbkluZm89e25hbWU6Ik9wZXJhIixvcmlnaW46IlhpbmhhIENvcmUiLHZlcnNpb246IiRMYXN0Q2hhbmdlZFJldmlzaW9uOiAxMDg0ICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywiJDEiKSxkZXZlbG9wZXI6IlRoZSBYaW5oYSBDb3JlIERldmVsb3BlciBUZWFtIixkZXZlbG9wZXJfdXJsOiIkSGVhZFVSTDogaHR0cDovL3N2bi54aW5oYS5vcmcvdGFncy8wLjk2LjEvbW9kdWxlcy9PcGVyYS9PcGVyYS5qcyAkIi5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sIiQxIiksc3BvbnNvcjoiR29nbyBJbnRlcm5ldCBTZXJ2aWNlcyBMaW1pdGVkIixzcG9uc29yX3VybDoiaHR0cDovL3d3dy5nb2dvLmNvLm56LyIsbGljZW5zZToiaHRtbEFyZWEifTsKLWZ1bmN0aW9uIE9wZXJhKF8xKXsKLXRoaXMuZWRpdG9yPV8xOwotXzEuT3BlcmE9dGhpczsKLX07Ci1PcGVyYS5wcm90b3R5cGUub25LZXlQcmVzcz1mdW5jdGlvbihldil7Ci12YXIgXzM9dGhpcy5lZGl0b3I7Ci12YXIgcz1fMy5nZXRTZWxlY3Rpb24oKTsKLWlmKF8zLmlzU2hvcnRDdXQoZXYpKXsKLXN3aXRjaChfMy5nZXRLZXkoZXYpLnRvTG93ZXJDYXNlKCkpewotY2FzZSAieiI6Ci1pZihfMy5fdW5MaW5rJiZfMy5fdW5saW5rT25VbmRvKXsKLVhpbmhhLl9zdG9wRXZlbnQoZXYpOwotXzMuX3VuTGluaygpOwotXzMudXBkYXRlVG9vbGJhcigpOwotcmV0dXJuIHRydWU7Ci19Ci1icmVhazsKLWNhc2UgImEiOgotc2VsPV8zLmdldFNlbGVjdGlvbigpOwotc2VsLnJlbW92ZUFsbFJhbmdlcygpOwotcmFuZ2U9XzMuY3JlYXRlUmFuZ2UoKTsKLXJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhfMy5fZG9jLmJvZHkpOwotc2VsLmFkZFJhbmdlKHJhbmdlKTsKLVhpbmhhLl9zdG9wRXZlbnQoZXYpOwotcmV0dXJuIHRydWU7Ci1icmVhazsKLWNhc2UgInYiOgotaWYoIV8zLmNvbmZpZy5odG1sYXJlYVBhc3RlKXsKLXJldHVybiB0cnVlOwotfQotYnJlYWs7Ci19Ci19Ci1zd2l0Y2goXzMuZ2V0S2V5KGV2KSl7Ci1jYXNlICIgIjoKLXZhciBfNT1mdW5jdGlvbihfNixfNyl7Ci12YXIgXzg9XzYubmV4dFNpYmxpbmc7Ci1pZih0eXBlb2YgXzc9PSJzdHJpbmciKXsKLV83PV8zLl9kb2MuY3JlYXRlRWxlbWVudChfNyk7Ci19Ci12YXIgYT1fNi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShfNyxfOCk7Ci1YaW5oYS5yZW1vdmVGcm9tUGFyZW50KF82KTsKLWEuYXBwZW5kQ2hpbGQoXzYpOwotXzguZGF0YT0iICIrXzguZGF0YTsKLXMuY29sbGFwc2UoXzgsMSk7Ci1fMy5fdW5MaW5rPWZ1bmN0aW9uKCl7Ci12YXIgdD1hLmZpcnN0Q2hpbGQ7Ci1hLnJlbW92ZUNoaWxkKHQpOwotYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LGEpOwotWGluaGEucmVtb3ZlRnJvbVBhcmVudChhKTsKLV8zLl91bkxpbms9bnVsbDsKLV8zLl91bmxpbmtPblVuZG89ZmFsc2U7Ci19OwotXzMuX3VubGlua09uVW5kbz10cnVlOwotcmV0dXJuIGE7Ci19OwotaWYoXzMuY29uZmlnLmNvbnZlcnRVcmxzVG9MaW5rcyYmcyYmcy5pc0NvbGxhcHNlZCYmcy5hbmNob3JOb2RlLm5vZGVUeXBlPT0zJiZzLmFuY2hvck5vZGUuZGF0YS5sZW5ndGg+MyYmcy5hbmNob3JOb2RlLmRhdGEuaW5kZXhPZigiLiIpPj0wKXsKLXZhciBfYj1zLmFuY2hvck5vZGUuZGF0YS5zdWJzdHJpbmcoMCxzLmFuY2hvck9mZnNldCkuc2VhcmNoKC9cU3s0LH0kLyk7Ci1pZihfYj09LTEpewotYnJlYWs7Ci19Ci1pZihfMy5fZ2V0Rmlyc3RBbmNlc3RvcihzLCJhIikpewotYnJlYWs7Ci19Ci12YXIgX2M9cy5hbmNob3JOb2RlLmRhdGEuc3Vic3RyaW5nKDAscy5hbmNob3JPZmZzZXQpLnJlcGxhY2UoL14uKj8oXFMqKSQvLCIkMSIpOwotdmFyIF9kPV9jLm1hdGNoKFhpbmhhLlJFX2VtYWlsKTsKLWlmKF9kKXsKLXZhciBfZT1zLmFuY2hvck5vZGU7Ci12YXIgX2Y9X2Uuc3BsaXRUZXh0KHMuYW5jaG9yT2Zmc2V0KTsKLXZhciBfMTA9X2Uuc3BsaXRUZXh0KF9iKTsKLV81KF8xMCwiYSIpLmhyZWY9Im1haWx0bzoiK19kWzBdOwotYnJlYWs7Ci19Ci1SRV9kYXRlPS8oWzAtOV0rXC4pKy87Ci1SRV9pcD0vKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KVwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPykvOwotdmFyIF8xMT1fYy5tYXRjaChYaW5oYS5SRV91cmwpOwotaWYoXzExKXsKLWlmKFJFX2RhdGUudGVzdChfYykpewotYnJlYWs7Ci19Ci12YXIgXzEyPXMuYW5jaG9yTm9kZTsKLXZhciBfMTM9XzEyLnNwbGl0VGV4dChzLmFuY2hvck9mZnNldCk7Ci12YXIgXzE0PV8xMi5zcGxpdFRleHQoX2IpOwotXzUoXzE0LCJhIikuaHJlZj0oXzExWzFdP18xMVsxXToiaHR0cDovLyIpK18xMVsyXTsKLWJyZWFrOwotfQotfQotYnJlYWs7Ci19Ci1zd2l0Y2goZXYua2V5Q29kZSl7Ci1jYXNlIDI3OgotaWYoXzMuX3VuTGluayl7Ci1fMy5fdW5MaW5rKCk7Ci1YaW5oYS5fc3RvcEV2ZW50KGV2KTsKLX0KLWJyZWFrOwotYnJlYWs7Ci1jYXNlIDg6Ci1jYXNlIDQ2OgotaWYoIWV2LnNoaWZ0S2V5JiZ0aGlzLmhhbmRsZUJhY2tzcGFjZSgpKXsKLVhpbmhhLl9zdG9wRXZlbnQoZXYpOwotfQotZGVmYXVsdDoKLV8zLl91bmxpbmtPblVuZG89ZmFsc2U7Ci1pZihzLmFuY2hvck5vZGUmJnMuYW5jaG9yTm9kZS5ub2RlVHlwZT09Myl7Ci12YXIgYT1fMy5fZ2V0Rmlyc3RBbmNlc3RvcihzLCJhIik7Ci1pZighYSl7Ci1icmVhazsKLX0KLWlmKCFhLl91cGRhdGVBbmNoVGltZW91dCl7Ci1pZihzLmFuY2hvck5vZGUuZGF0YS5tYXRjaChYaW5oYS5SRV9lbWFpbCkmJmEuaHJlZi5tYXRjaCgibWFpbHRvOiIrcy5hbmNob3JOb2RlLmRhdGEudHJpbSgpKSl7Ci12YXIgXzE2PXMuYW5jaG9yTm9kZTsKLXZhciBfMTc9ZnVuY3Rpb24oKXsKLWEuaHJlZj0ibWFpbHRvOiIrXzE2LmRhdGEudHJpbSgpOwotYS5fdXBkYXRlQW5jaFRpbWVvdXQ9c2V0VGltZW91dChfMTcsMjUwKTsKLX07Ci1hLl91cGRhdGVBbmNoVGltZW91dD1zZXRUaW1lb3V0KF8xNywxMDAwKTsKLWJyZWFrOwotfQotdmFyIG09cy5hbmNob3JOb2RlLmRhdGEubWF0Y2goWGluaGEuUkVfdXJsKTsKLWlmKG0mJmEuaHJlZi5tYXRjaChuZXcgUmVnRXhwKCJodHRwKHMpPzovLyIrWGluaGEuZXNjYXBlU3RyaW5nRm9yUmVnRXhwKHMuYW5jaG9yTm9kZS5kYXRhLnRyaW0oKSkpKSl7Ci12YXIgXzE5PXMuYW5jaG9yTm9kZTsKLXZhciBfMWE9ZnVuY3Rpb24oKXsKLW09XzE5LmRhdGEubWF0Y2goWGluaGEuUkVfdXJsKTsKLWlmKG0pewotYS5ocmVmPShtWzFdP21bMV06Imh0dHA6Ly8iKSttWzJdOwotfQotYS5fdXBkYXRlQW5jaFRpbWVvdXQ9c2V0VGltZW91dChfMWEsMjUwKTsKLX07Ci1hLl91cGRhdGVBbmNoVGltZW91dD1zZXRUaW1lb3V0KF8xYSwxMDAwKTsKLX0KLX0KLX0KLWJyZWFrOwotfQotcmV0dXJuIGZhbHNlOwotfTsKLU9wZXJhLnByb3RvdHlwZS5oYW5kbGVCYWNrc3BhY2U9ZnVuY3Rpb24oKXsKLXZhciBfMWI9dGhpcy5lZGl0b3I7Ci1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ci12YXIgc2VsPV8xYi5nZXRTZWxlY3Rpb24oKTsKLXZhciBfMWQ9XzFiLmNyZWF0ZVJhbmdlKHNlbCk7Ci12YXIgU0M9XzFkLnN0YXJ0Q29udGFpbmVyOwotdmFyIFNPPV8xZC5zdGFydE9mZnNldDsKLXZhciBFQz1fMWQuZW5kQ29udGFpbmVyOwotdmFyIEVPPV8xZC5lbmRPZmZzZXQ7Ci12YXIgXzIyPVNDLm5leHRTaWJsaW5nOwotaWYoU0Mubm9kZVR5cGU9PTMpewotU0M9U0MucGFyZW50Tm9kZTsKLX0KLWlmKCEoL1xTLy50ZXN0KFNDLnRhZ05hbWUpKSl7Ci12YXIgcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7Ci13aGlsZShTQy5maXJzdENoaWxkKXsKLXAuYXBwZW5kQ2hpbGQoU0MuZmlyc3RDaGlsZCk7Ci19Ci1TQy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShwLFNDKTsKLVhpbmhhLnJlbW92ZUZyb21QYXJlbnQoU0MpOwotdmFyIHI9XzFkLmNsb25lUmFuZ2UoKTsKLXIuc2V0U3RhcnRCZWZvcmUoXzIyKTsKLXIuc2V0RW5kQWZ0ZXIoXzIyKTsKLXIuZXh0cmFjdENvbnRlbnRzKCk7Ci1zZWwucmVtb3ZlQWxsUmFuZ2VzKCk7Ci1zZWwuYWRkUmFuZ2Uocik7Ci19Ci19LDEwKTsKLX07Ci1PcGVyYS5wcm90b3R5cGUuaW53YXJkSHRtbD1mdW5jdGlvbihfMjUpewotXzI1PV8yNS5yZXBsYWNlKC88KFwvPylkZWwoXHN8PnxcLykvaWcsIjwkMXN0cmlrZSQyIik7Ci1yZXR1cm4gXzI1OwotfTsKLU9wZXJhLnByb3RvdHlwZS5vdXR3YXJkSHRtbD1mdW5jdGlvbihfMjYpewotcmV0dXJuIF8yNjsKLX07Ci1PcGVyYS5wcm90b3R5cGUub25FeGVjQ29tbWFuZD1mdW5jdGlvbihfMjcsVUksXzI5KXsKLXN3aXRjaChfMjcpewotY2FzZSAicmVtb3ZlZm9ybWF0IjoKLXZhciBfMmE9dGhpcy5lZGl0b3I7Ci12YXIgc2VsPV8yYS5nZXRTZWxlY3Rpb24oKTsKLXZhciBfMmM9XzJhLnNhdmVTZWxlY3Rpb24oc2VsKTsKLXZhciBfMmQ9XzJhLmNyZWF0ZVJhbmdlKHNlbCk7Ci12YXIgZWxzPV8yYS5fZG9jLmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKLXZhciBfMmY9KF8yZC5zdGFydENvbnRhaW5lci5ub2RlVHlwZT09MSk/XzJkLnN0YXJ0Q29udGFpbmVyOl8yZC5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlOwotdmFyIGksZWw7Ci1pZihzZWwuaXNDb2xsYXBzZWQpewotXzJkLnNlbGVjdE5vZGVDb250ZW50cyhfMmEuX2RvYy5ib2R5KTsKLX0KLWZvcihpPTA7aTxlbHMubGVuZ3RoO2krKyl7Ci1lbD1lbHNbaV07Ci1pZihfMmQuaXNQb2ludEluUmFuZ2UoZWwsMCl8fChlbHNbaV09PV8yZiYmXzJkLnN0YXJ0T2Zmc2V0PT0wKSl7Ci1lbC5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIik7Ci19Ci19Ci10aGlzLmVkaXRvci5fZG9jLmV4ZWNDb21tYW5kKF8yNyxVSSxfMjkpOwotXzJhLnJlc3RvcmVTZWxlY3Rpb24oXzJjKTsKLXJldHVybiB0cnVlOwotYnJlYWs7Ci19Ci1yZXR1cm4gZmFsc2U7Ci19OwotT3BlcmEucHJvdG90eXBlLm9uTW91c2VEb3duPWZ1bmN0aW9uKGV2KXsKLX07Ci1YaW5oYS5wcm90b3R5cGUuaW5zZXJ0Tm9kZUF0U2VsZWN0aW9uPWZ1bmN0aW9uKF8zMyl7Ci1pZihfMzMub3duZXJEb2N1bWVudCE9dGhpcy5fZG9jKXsKLXRyeXsKLV8zMz10aGlzLl9kb2MuYWRvcHROb2RlKF8zMyk7Ci19Ci1jYXRjaChlKXsKLX0KLX0KLXRoaXMuZm9jdXNFZGl0b3IoKTsKLXZhciBzZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLXZhciBfMzU9dGhpcy5jcmVhdGVSYW5nZShzZWwpOwotXzM1LmRlbGV0ZUNvbnRlbnRzKCk7Ci12YXIgXzM2PV8zNS5zdGFydENvbnRhaW5lcjsKLXZhciBwb3M9XzM1LnN0YXJ0T2Zmc2V0OwotdmFyIF8zOD1fMzM7Ci1zZWwucmVtb3ZlQWxsUmFuZ2VzKCk7Ci1zd2l0Y2goXzM2Lm5vZGVUeXBlKXsKLWNhc2UgMzoKLWlmKF8zMy5ub2RlVHlwZT09Myl7Ci1fMzYuaW5zZXJ0RGF0YShwb3MsXzMzLmRhdGEpOwotXzM1PXRoaXMuY3JlYXRlUmFuZ2UoKTsKLV8zNS5zZXRFbmQoXzM2LHBvcytfMzMubGVuZ3RoKTsKLV8zNS5zZXRTdGFydChfMzYscG9zK18zMy5sZW5ndGgpOwotc2VsLmFkZFJhbmdlKF8zNSk7Ci19ZWxzZXsKLV8zNj1fMzYuc3BsaXRUZXh0KHBvcyk7Ci1pZihfMzMubm9kZVR5cGU9PTExKXsKLV8zOD1fMzguZmlyc3RDaGlsZDsKLX0KLV8zNi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShfMzMsXzM2KTsKLXRoaXMuc2VsZWN0Tm9kZUNvbnRlbnRzKF8zOCk7Ci10aGlzLnVwZGF0ZVRvb2xiYXIoKTsKLX0KLWJyZWFrOwotY2FzZSAxOgotaWYoXzMzLm5vZGVUeXBlPT0xMSl7Ci1fMzg9XzM4LmZpcnN0Q2hpbGQ7Ci19Ci1fMzYuaW5zZXJ0QmVmb3JlKF8zMyxfMzYuY2hpbGROb2Rlc1twb3NdKTsKLXRoaXMuc2VsZWN0Tm9kZUNvbnRlbnRzKF8zOCk7Ci10aGlzLnVwZGF0ZVRvb2xiYXIoKTsKLWJyZWFrOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5nZXRQYXJlbnRFbGVtZW50PWZ1bmN0aW9uKHNlbCl7Ci1pZih0eXBlb2Ygc2VsPT0idW5kZWZpbmVkIil7Ci1zZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLX0KLXZhciBfM2E9dGhpcy5jcmVhdGVSYW5nZShzZWwpOwotdHJ5ewotdmFyIHA9XzNhLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyOwotaWYoIV8zYS5jb2xsYXBzZWQmJl8zYS5zdGFydENvbnRhaW5lcj09XzNhLmVuZENvbnRhaW5lciYmXzNhLnN0YXJ0T2Zmc2V0LV8zYS5lbmRPZmZzZXQ8PTEmJl8zYS5zdGFydENvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpewotcD1fM2Euc3RhcnRDb250YWluZXIuY2hpbGROb2Rlc1tfM2Euc3RhcnRPZmZzZXRdOwotfQotd2hpbGUocC5ub2RlVHlwZT09Myl7Ci1wPXAucGFyZW50Tm9kZTsKLX0KLXJldHVybiBwOwotfQotY2F0Y2goZXgpewotcmV0dXJuIG51bGw7Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmFjdGl2ZUVsZW1lbnQ9ZnVuY3Rpb24oc2VsKXsKLWlmKChzZWw9PT1udWxsKXx8dGhpcy5zZWxlY3Rpb25FbXB0eShzZWwpKXsKLXJldHVybiBudWxsOwotfQotaWYoIXNlbC5pc0NvbGxhcHNlZCl7Ci1pZihzZWwuYW5jaG9yTm9kZS5jaGlsZE5vZGVzLmxlbmd0aD5zZWwuYW5jaG9yT2Zmc2V0JiZzZWwuYW5jaG9yTm9kZS5jaGlsZE5vZGVzW3NlbC5hbmNob3JPZmZzZXRdLm5vZGVUeXBlPT0xKXsKLXJldHVybiBzZWwuYW5jaG9yTm9kZS5jaGlsZE5vZGVzW3NlbC5hbmNob3JPZmZzZXRdOwotfWVsc2V7Ci1pZihzZWwuYW5jaG9yTm9kZS5ub2RlVHlwZT09MSl7Ci1yZXR1cm4gc2VsLmFuY2hvck5vZGU7Ci19ZWxzZXsKLXJldHVybiBudWxsOwotfQotfQotfQotcmV0dXJuIG51bGw7Ci19OwotWGluaGEucHJvdG90eXBlLnNlbGVjdGlvbkVtcHR5PWZ1bmN0aW9uKHNlbCl7Ci1pZighc2VsKXsKLXJldHVybiB0cnVlOwotfQotaWYodHlwZW9mIHNlbC5pc0NvbGxhcHNlZCE9InVuZGVmaW5lZCIpewotcmV0dXJuIHNlbC5pc0NvbGxhcHNlZDsKLX0KLXJldHVybiB0cnVlOwotfTsKLVhpbmhhLnByb3RvdHlwZS5zYXZlU2VsZWN0aW9uPWZ1bmN0aW9uKCl7Ci1yZXR1cm4gdGhpcy5jcmVhdGVSYW5nZSh0aGlzLmdldFNlbGVjdGlvbigpKS5jbG9uZVJhbmdlKCk7Ci19OwotWGluaGEucHJvdG90eXBlLnJlc3RvcmVTZWxlY3Rpb249ZnVuY3Rpb24oXzNlKXsKLXZhciBzZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLXNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKLXNlbC5hZGRSYW5nZShfM2UpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5zZWxlY3ROb2RlQ29udGVudHM9ZnVuY3Rpb24oXzQwLF80MSl7Ci10aGlzLmZvY3VzRWRpdG9yKCk7Ci10aGlzLmZvcmNlUmVkcmF3KCk7Ci12YXIgXzQyOwotdmFyIF80Mz10eXBlb2YgXzQxPT0idW5kZWZpbmVkIj90cnVlOmZhbHNlOwotdmFyIHNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotXzQyPXRoaXMuX2RvYy5jcmVhdGVSYW5nZSgpOwotaWYoXzQzJiZfNDAudGFnTmFtZSYmXzQwLnRhZ05hbWUudG9Mb3dlckNhc2UoKS5tYXRjaCgvdGFibGV8aW1nfGlucHV0fHRleHRhcmVhfHNlbGVjdC8pKXsKLV80Mi5zZWxlY3ROb2RlKF80MCk7Ci19ZWxzZXsKLV80Mi5zZWxlY3ROb2RlQ29udGVudHMoXzQwKTsKLX0KLXNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKLXNlbC5hZGRSYW5nZShfNDIpOwotaWYodHlwZW9mIF80MSE9InVuZGVmaW5lZCIpewotaWYoXzQxKXsKLXNlbC5jb2xsYXBzZShfNDIuc3RhcnRDb250YWluZXIsXzQyLnN0YXJ0T2Zmc2V0KTsKLX1lbHNlewotc2VsLmNvbGxhcHNlKF80Mi5lbmRDb250YWluZXIsXzQyLmVuZE9mZnNldCk7Ci19Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmluc2VydEhUTUw9ZnVuY3Rpb24oXzQ1KXsKLXZhciBzZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLXZhciBfNDc9dGhpcy5jcmVhdGVSYW5nZShzZWwpOwotdGhpcy5mb2N1c0VkaXRvcigpOwotdmFyIF80OD10aGlzLl9kb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotdmFyIGRpdj10aGlzLl9kb2MuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci1kaXYuaW5uZXJIVE1MPV80NTsKLXdoaWxlKGRpdi5maXJzdENoaWxkKXsKLV80OC5hcHBlbmRDaGlsZChkaXYuZmlyc3RDaGlsZCk7Ci19Ci12YXIgXzRhPXRoaXMuaW5zZXJ0Tm9kZUF0U2VsZWN0aW9uKF80OCk7Ci19OwotWGluaGEucHJvdG90eXBlLmdldFNlbGVjdGVkSFRNTD1mdW5jdGlvbigpewotdmFyIHNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotaWYoc2VsLmlzQ29sbGFwc2VkKXsKLXJldHVybiAiIjsKLX0KLXZhciBfNGM9dGhpcy5jcmVhdGVSYW5nZShzZWwpOwotcmV0dXJuIFhpbmhhLmdldEhUTUwoXzRjLmNsb25lQ29udGVudHMoKSxmYWxzZSx0aGlzKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uPWZ1bmN0aW9uKCl7Ci12YXIgc2VsPXRoaXMuX2lmcmFtZS5jb250ZW50V2luZG93LmdldFNlbGVjdGlvbigpOwotaWYoc2VsJiZzZWwuZm9jdXNOb2RlJiZzZWwuZm9jdXNOb2RlLnRhZ05hbWUmJnNlbC5mb2N1c05vZGUudGFnTmFtZT09IkhUTUwiKXsKLXZhciBib2Q9dGhpcy5fZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07Ci12YXIgcm5nPXRoaXMuY3JlYXRlUmFuZ2UoKTsKLXJuZy5zZWxlY3ROb2RlQ29udGVudHMoYm9kKTsKLXNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKLXNlbC5hZGRSYW5nZShybmcpOwotc2VsLmNvbGxhcHNlVG9FbmQoKTsKLX0KLXJldHVybiBzZWw7Ci19OwotWGluaGEucHJvdG90eXBlLmNyZWF0ZVJhbmdlPWZ1bmN0aW9uKHNlbCl7Ci10aGlzLmFjdGl2YXRlRWRpdG9yKCk7Ci1pZih0eXBlb2Ygc2VsIT0idW5kZWZpbmVkIil7Ci10cnl7Ci1yZXR1cm4gc2VsLmdldFJhbmdlQXQoMCk7Ci19Ci1jYXRjaChleCl7Ci1yZXR1cm4gdGhpcy5fZG9jLmNyZWF0ZVJhbmdlKCk7Ci19Ci19ZWxzZXsKLXJldHVybiB0aGlzLl9kb2MuY3JlYXRlUmFuZ2UoKTsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuaXNLZXlFdmVudD1mdW5jdGlvbihfNTEpewotcmV0dXJuIF81MS50eXBlPT0ia2V5cHJlc3MiOwotfTsKLVhpbmhhLnByb3RvdHlwZS5nZXRLZXk9ZnVuY3Rpb24oXzUyKXsKLXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKF81Mi5jaGFyQ29kZSk7Ci19OwotWGluaGEuZ2V0T3V0ZXJIVE1MPWZ1bmN0aW9uKF81Myl7Ci1yZXR1cm4gKG5ldyBYTUxTZXJpYWxpemVyKCkpLnNlcmlhbGl6ZVRvU3RyaW5nKF81Myk7Ci19OwotWGluaGEuY2M9U3RyaW5nLmZyb21DaGFyQ29kZSg4Mjg2KTsKLVhpbmhhLnByb3RvdHlwZS5zZXRDQz1mdW5jdGlvbihfNTQpewotdmFyIGNjPVhpbmhhLmNjOwotdHJ5ewotaWYoXzU0PT0idGV4dGFyZWEiKXsKLXZhciB0YT10aGlzLl90ZXh0QXJlYTsKLXZhciBfNTc9dGEuc2VsZWN0aW9uU3RhcnQ7Ci12YXIgXzU4PXRhLnZhbHVlLnN1YnN0cmluZygwLF81Nyk7Ci12YXIgXzU5PXRhLnZhbHVlLnN1YnN0cmluZyhfNTcsdGEudmFsdWUubGVuZ3RoKTsKLWlmKF81OS5tYXRjaCgvXltePF0qPi8pKXsKLXZhciBfNWE9XzU5LmluZGV4T2YoIj4iKSsxOwotdGEudmFsdWU9XzU4K181OS5zdWJzdHJpbmcoMCxfNWEpK2NjK181OS5zdWJzdHJpbmcoXzVhLF81OS5sZW5ndGgpOwotfWVsc2V7Ci10YS52YWx1ZT1fNTgrY2MrXzU5OwotfQotdGEudmFsdWU9dGEudmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKCIoJlteIitjYysiXSo/KSgiK2NjKyIpKFteIitjYysiXSo/OykiKSwiJDEkMyQyIik7Ci10YS52YWx1ZT10YS52YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoIig8c2NyaXB0W14+XSo+W14iK2NjKyJdKj8pKCIrY2MrIikoW14iK2NjKyJdKj88L3NjcmlwdD4pIiksIiQxJDMkMiIpOwotdGEudmFsdWU9dGEudmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKCJeKFteIitjYysiXSopKCIrY2MrIikoW14iK2NjKyJdKjxib2R5W14+XSo+KSguKj8pIiksIiQxJDMkMiQ0Iik7Ci10YS52YWx1ZT10YS52YWx1ZS5yZXBsYWNlKGNjLCI8c3BhbiBpZD1cIlhpbmhhT3BlcmFDYXJldE1hcmtlclwiPk1BUks8L3NwYW4+Iik7Ci19ZWxzZXsKLXZhciBzZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLXZhciBfNWM9dGhpcy5fZG9jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLV81Yy5pZD0iWGluaGFPcGVyYUNhcmV0TWFya2VyIjsKLXNlbC5nZXRSYW5nZUF0KDApLmluc2VydE5vZGUoXzVjKTsKLX0KLX0KLWNhdGNoKGUpewotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5maW5kQ0M9ZnVuY3Rpb24oXzVkKXsKLWlmKF81ZD09InRleHRhcmVhIil7Ci12YXIgdGE9dGhpcy5fdGV4dEFyZWE7Ci12YXIgcG9zPXRhLnZhbHVlLnNlYXJjaCgvKDxzcGFuXHMraWQ9IlhpbmhhT3BlcmFDYXJldE1hcmtlciJccypcLz8+KChcc3woTUFSSykpKjxcL3NwYW4+KT8pLyk7Ci1pZihwb3M9PS0xKXsKLXJldHVybjsKLX0KLXZhciBjYz1SZWdFeHAuJDE7Ci12YXIgZW5kPXBvcytjYy5sZW5ndGg7Ci12YXIgXzYyPXRhLnZhbHVlLnN1YnN0cmluZygwLHBvcyk7Ci12YXIgXzYzPXRhLnZhbHVlLnN1YnN0cmluZyhlbmQsdGEudmFsdWUubGVuZ3RoKTsKLXRhLnZhbHVlPV82MjsKLXRhLnNjcm9sbFRvcD10YS5zY3JvbGxIZWlnaHQ7Ci12YXIgXzY0PXRhLnNjcm9sbFRvcDsKLXRhLnZhbHVlKz1fNjM7Ci10YS5zZXRTZWxlY3Rpb25SYW5nZShwb3MscG9zKTsKLXRhLmZvY3VzKCk7Ci10YS5zY3JvbGxUb3A9XzY0OwotfWVsc2V7Ci12YXIgXzY1PXRoaXMuX2RvYy5nZXRFbGVtZW50QnlJZCgiWGluaGFPcGVyYUNhcmV0TWFya2VyIik7Ci1pZihfNjUpewotdGhpcy5mb2N1c0VkaXRvcigpOwotdmFyIHJuZz10aGlzLmNyZWF0ZVJhbmdlKCk7Ci1ybmcuc2VsZWN0Tm9kZShfNjUpOwotdmFyIHNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotc2VsLmFkZFJhbmdlKHJuZyk7Ci1zZWwuY29sbGFwc2VUb1N0YXJ0KCk7Ci10aGlzLnNjcm9sbFRvRWxlbWVudChfNjUpOwotXzY1LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoXzY1KTsKLXJldHVybjsKLX0KLX0KLX07Ci1YaW5oYS5nZXREb2N0eXBlPWZ1bmN0aW9uKGRvYyl7Ci12YXIgZD0iIjsKLWlmKGRvYy5kb2N0eXBlKXsKLWQrPSI8IURPQ1RZUEUgIitkb2MuZG9jdHlwZS5uYW1lKyIgUFVCTElDICI7Ci1kKz1kb2MuZG9jdHlwZS5wdWJsaWNJZD8iXCIiK2RvYy5kb2N0eXBlLnB1YmxpY0lkKyJcIiI6IiI7Ci1kKz1kb2MuZG9jdHlwZS5zeXN0ZW1JZD8iIFwiIitkb2MuZG9jdHlwZS5zeXN0ZW1JZCsiXCIiOiIiOwotZCs9Ij4iOwotfQotcmV0dXJuIGQ7Ci19OwotWGluaGEucHJvdG90eXBlLl9zdGFuZGFyZEluaXRJZnJhbWU9WGluaGEucHJvdG90eXBlLmluaXRJZnJhbWU7Ci1YaW5oYS5wcm90b3R5cGUuaW5pdElmcmFtZT1mdW5jdGlvbigpewotaWYoIXRoaXMuX2lmcmFtZUxvYWREb25lKXsKLWlmKHRoaXMuX2lmcmFtZS5jb250ZW50V2luZG93JiZ0aGlzLl9pZnJhbWUuY29udGVudFdpbmRvdy54aW5oYVJlYWR5VG9Sb2xsKXsKLXRoaXMuX2lmcmFtZUxvYWREb25lPXRydWU7Ci10aGlzLl9zdGFuZGFyZEluaXRJZnJhbWUoKTsKLX1lbHNlewotdmFyIF82YT10aGlzOwotc2V0VGltZW91dChmdW5jdGlvbigpewotXzZhLmluaXRJZnJhbWUoKTsKLX0sNSk7Ci19Ci19Ci19OwotWGluaGEuX2FkZEV2ZW50T3BlcmFPcmlnPVhpbmhhLl9hZGRFdmVudDsKLVhpbmhhLl9hZGRFdmVudD1mdW5jdGlvbihlbCxfNmMsXzZkKXsKLWlmKGVsLnRhZ05hbWUmJmVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09InNlbGVjdCImJl82Yz09ImNoYW5nZSIpewotcmV0dXJuIFhpbmhhLmFkZERvbTBFdmVudChlbCxfNmMsXzZkKTsKLX0KLXJldHVybiBYaW5oYS5fYWRkRXZlbnRPcGVyYU9yaWcoZWwsXzZjLF82ZCk7Ci19OwotCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9XZWJLaXQvV2ViS2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvV2ViS2l0L1dlYktpdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUzN2UxYS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9XZWJLaXQvV2ViS2l0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNDg1ICswLDAgQEAKLS8qIFRoaXMgY29tcHJlc3NlZCBmaWxlIGlzIHBhcnQgb2YgWGluaGEuIEZvciB1bmNvbXByZXNzZWQgc291cmNlcywgZm9ydW0sIGFuZCBidWcgcmVwb3J0cywgZ28gdG8geGluaGEub3JnICovCi0vKiBUaGUgVVJMIG9mIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBpcyBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL1dlYktpdC9XZWJLaXQuanMgKi8KLVdlYktpdC5fcGx1Z2luSW5mbz17bmFtZToiV2ViS2l0IixvcmlnaW46IlhpbmhhIENvcmUiLHZlcnNpb246IiRMYXN0Q2hhbmdlZFJldmlzaW9uOiAxMTQ2ICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywiJDEiKSxkZXZlbG9wZXI6IlRoZSBYaW5oYSBDb3JlIERldmVsb3BlciBUZWFtIixkZXZlbG9wZXJfdXJsOiIkSGVhZFVSTDogaHR0cDovL3N2bi54aW5oYS5vcmcvdGFncy8wLjk2LjEvbW9kdWxlcy9XZWJLaXQvV2ViS2l0LmpzICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywiJDEiKSxzcG9uc29yOiIiLHNwb25zb3JfdXJsOiIiLGxpY2Vuc2U6Imh0bWxBcmVhIn07Ci1mdW5jdGlvbiBXZWJLaXQoXzEpewotdGhpcy5lZGl0b3I9XzE7Ci1fMS5XZWJLaXQ9dGhpczsKLX07Ci1XZWJLaXQucHJvdG90eXBlLm9uS2V5UHJlc3M9ZnVuY3Rpb24oZXYpewotdmFyIF8zPXRoaXMuZWRpdG9yOwotdmFyIHM9XzMuZ2V0U2VsZWN0aW9uKCk7Ci1pZihfMy5pc1Nob3J0Q3V0KGV2KSl7Ci1zd2l0Y2goXzMuZ2V0S2V5KGV2KS50b0xvd2VyQ2FzZSgpKXsKLWNhc2UgInoiOgotaWYoXzMuX3VuTGluayYmXzMuX3VubGlua09uVW5kbyl7Ci1YaW5oYS5fc3RvcEV2ZW50KGV2KTsKLV8zLl91bkxpbmsoKTsKLV8zLnVwZGF0ZVRvb2xiYXIoKTsKLXJldHVybiB0cnVlOwotfQotYnJlYWs7Ci1jYXNlICJhIjoKLWJyZWFrOwotY2FzZSAidiI6Ci1pZighXzMuY29uZmlnLmh0bWxhcmVhUGFzdGUpewotcmV0dXJuIHRydWU7Ci19Ci1icmVhazsKLX0KLX0KLXN3aXRjaChfMy5nZXRLZXkoZXYpKXsKLWNhc2UgIiAiOgotdmFyIF81PWZ1bmN0aW9uKF82LF83KXsKLXZhciBfOD1fNi5uZXh0U2libGluZzsKLWlmKHR5cGVvZiBfNz09InN0cmluZyIpewotXzc9XzMuX2RvYy5jcmVhdGVFbGVtZW50KF83KTsKLX0KLXZhciBhPV82LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKF83LF84KTsKLVhpbmhhLnJlbW92ZUZyb21QYXJlbnQoXzYpOwotYS5hcHBlbmRDaGlsZChfNik7Ci1fOC5kYXRhPSIgIitfOC5kYXRhOwotcy5jb2xsYXBzZShfOCwxKTsKLV8zLl91bkxpbms9ZnVuY3Rpb24oKXsKLXZhciB0PWEuZmlyc3RDaGlsZDsKLWEucmVtb3ZlQ2hpbGQodCk7Ci1hLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQsYSk7Ci1YaW5oYS5yZW1vdmVGcm9tUGFyZW50KGEpOwotXzMuX3VuTGluaz1udWxsOwotXzMuX3VubGlua09uVW5kbz1mYWxzZTsKLX07Ci1fMy5fdW5saW5rT25VbmRvPXRydWU7Ci1yZXR1cm4gYTsKLX07Ci1pZihfMy5jb25maWcuY29udmVydFVybHNUb0xpbmtzJiZzJiZzLmlzQ29sbGFwc2VkJiZzLmFuY2hvck5vZGUubm9kZVR5cGU9PTMmJnMuYW5jaG9yTm9kZS5kYXRhLmxlbmd0aD4zJiZzLmFuY2hvck5vZGUuZGF0YS5pbmRleE9mKCIuIik+PTApewotdmFyIF9iPXMuYW5jaG9yTm9kZS5kYXRhLnN1YnN0cmluZygwLHMuYW5jaG9yT2Zmc2V0KS5zZWFyY2goL1xTezQsfSQvKTsKLWlmKF9iPT0tMSl7Ci1icmVhazsKLX0KLWlmKF8zLl9nZXRGaXJzdEFuY2VzdG9yKHMsImEiKSl7Ci1icmVhazsKLX0KLXZhciBfYz1zLmFuY2hvck5vZGUuZGF0YS5zdWJzdHJpbmcoMCxzLmFuY2hvck9mZnNldCkucmVwbGFjZSgvXi4qPyhcUyopJC8sIiQxIik7Ci12YXIgX2Q9X2MubWF0Y2goWGluaGEuUkVfZW1haWwpOwotaWYoX2QpewotdmFyIF9lPXMuYW5jaG9yTm9kZTsKLXZhciBfZj1fZS5zcGxpdFRleHQocy5hbmNob3JPZmZzZXQpOwotdmFyIF8xMD1fZS5zcGxpdFRleHQoX2IpOwotXzUoXzEwLCJhIikuaHJlZj0ibWFpbHRvOiIrX2RbMF07Ci1icmVhazsKLX0KLVJFX2RhdGU9LyhbMC05XStcLikrLzsKLVJFX2lwPS8oPzooPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KS87Ci12YXIgXzExPV9jLm1hdGNoKFhpbmhhLlJFX3VybCk7Ci1pZihfMTEpewotaWYoUkVfZGF0ZS50ZXN0KF9jKSl7Ci1icmVhazsKLX0KLXZhciBfMTI9cy5hbmNob3JOb2RlOwotdmFyIF8xMz1fMTIuc3BsaXRUZXh0KHMuYW5jaG9yT2Zmc2V0KTsKLXZhciBfMTQ9XzEyLnNwbGl0VGV4dChfYik7Ci1fNShfMTQsImEiKS5ocmVmPShfMTFbMV0/XzExWzFdOiJodHRwOi8vIikrXzExWzJdOwotYnJlYWs7Ci19Ci19Ci1icmVhazsKLX0KLXN3aXRjaChldi5rZXlDb2RlKXsKLWNhc2UgMTM6Ci1pZihldi5zaGlmdEtleSl7Ci19Ci1icmVhazsKLWNhc2UgMjc6Ci1pZihfMy5fdW5MaW5rKXsKLV8zLl91bkxpbmsoKTsKLVhpbmhhLl9zdG9wRXZlbnQoZXYpOwotfQotYnJlYWs7Ci1jYXNlIDg6Ci1jYXNlIDQ2OgotaWYoIWV2LnNoaWZ0S2V5JiZ0aGlzLmhhbmRsZUJhY2tzcGFjZSgpKXsKLVhpbmhhLl9zdG9wRXZlbnQoZXYpOwotfQotYnJlYWs7Ci1kZWZhdWx0OgotXzMuX3VubGlua09uVW5kbz1mYWxzZTsKLWlmKHMuYW5jaG9yTm9kZSYmcy5hbmNob3JOb2RlLm5vZGVUeXBlPT0zKXsKLXZhciBhPV8zLl9nZXRGaXJzdEFuY2VzdG9yKHMsImEiKTsKLWlmKCFhKXsKLWJyZWFrOwotfQotaWYoIWEuX3VwZGF0ZUFuY2hUaW1lb3V0KXsKLWlmKHMuYW5jaG9yTm9kZS5kYXRhLm1hdGNoKFhpbmhhLlJFX2VtYWlsKSYmYS5ocmVmLm1hdGNoKCJtYWlsdG86IitzLmFuY2hvck5vZGUuZGF0YS50cmltKCkpKXsKLXZhciBfMTY9cy5hbmNob3JOb2RlOwotdmFyIF8xNz1mdW5jdGlvbigpewotYS5ocmVmPSJtYWlsdG86IitfMTYuZGF0YS50cmltKCk7Ci1hLl91cGRhdGVBbmNoVGltZW91dD1zZXRUaW1lb3V0KF8xNywyNTApOwotfTsKLWEuX3VwZGF0ZUFuY2hUaW1lb3V0PXNldFRpbWVvdXQoXzE3LDEwMDApOwotYnJlYWs7Ci19Ci12YXIgbT1zLmFuY2hvck5vZGUuZGF0YS5tYXRjaChYaW5oYS5SRV91cmwpOwotaWYobSYmYS5ocmVmLm1hdGNoKG5ldyBSZWdFeHAoImh0dHAocyk/Oi8vIitYaW5oYS5lc2NhcGVTdHJpbmdGb3JSZWdFeHAocy5hbmNob3JOb2RlLmRhdGEudHJpbSgpKSkpKXsKLXZhciBfMTk9cy5hbmNob3JOb2RlOwotdmFyIF8xYT1mdW5jdGlvbigpewotbT1fMTkuZGF0YS5tYXRjaChYaW5oYS5SRV91cmwpOwotaWYobSl7Ci1hLmhyZWY9KG1bMV0/bVsxXToiaHR0cDovLyIpK21bMl07Ci19Ci1hLl91cGRhdGVBbmNoVGltZW91dD1zZXRUaW1lb3V0KF8xYSwyNTApOwotfTsKLWEuX3VwZGF0ZUFuY2hUaW1lb3V0PXNldFRpbWVvdXQoXzFhLDEwMDApOwotfQotfQotfQotYnJlYWs7Ci19Ci1yZXR1cm4gZmFsc2U7Ci19OwotV2ViS2l0LnByb3RvdHlwZS5oYW5kbGVCYWNrc3BhY2U9ZnVuY3Rpb24oKXsKLXZhciBfMWI9dGhpcy5lZGl0b3I7Ci1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ci12YXIgc2VsPV8xYi5nZXRTZWxlY3Rpb24oKTsKLXZhciBfMWQ9XzFiLmNyZWF0ZVJhbmdlKHNlbCk7Ci12YXIgU0M9XzFkLnN0YXJ0Q29udGFpbmVyOwotdmFyIFNPPV8xZC5zdGFydE9mZnNldDsKLXZhciBFQz1fMWQuZW5kQ29udGFpbmVyOwotdmFyIEVPPV8xZC5lbmRPZmZzZXQ7Ci12YXIgXzIyPVNDLm5leHRTaWJsaW5nOwotaWYoU0Mubm9kZVR5cGU9PTMpewotU0M9U0MucGFyZW50Tm9kZTsKLX0KLWlmKCEoL1xTLy50ZXN0KFNDLnRhZ05hbWUpKSl7Ci12YXIgcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7Ci13aGlsZShTQy5maXJzdENoaWxkKXsKLXAuYXBwZW5kQ2hpbGQoU0MuZmlyc3RDaGlsZCk7Ci19Ci1TQy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShwLFNDKTsKLVhpbmhhLnJlbW92ZUZyb21QYXJlbnQoU0MpOwotdmFyIHI9XzFkLmNsb25lUmFuZ2UoKTsKLXIuc2V0U3RhcnRCZWZvcmUoXzIyKTsKLXIuc2V0RW5kQWZ0ZXIoXzIyKTsKLXIuZXh0cmFjdENvbnRlbnRzKCk7Ci1zZWwucmVtb3ZlQWxsUmFuZ2VzKCk7Ci1zZWwuYWRkUmFuZ2Uocik7Ci19Ci19LDEwKTsKLX07Ci1XZWJLaXQucHJvdG90eXBlLmlud2FyZEh0bWw9ZnVuY3Rpb24oXzI1KXsKLXJldHVybiBfMjU7Ci19OwotV2ViS2l0LnByb3RvdHlwZS5vdXR3YXJkSHRtbD1mdW5jdGlvbihfMjYpewotcmV0dXJuIF8yNjsKLX07Ci1XZWJLaXQucHJvdG90eXBlLm9uRXhlY0NvbW1hbmQ9ZnVuY3Rpb24oXzI3LFVJLF8yOSl7Ci10aGlzLmVkaXRvci5fZG9jLmV4ZWNDb21tYW5kKCJzdHlsZVdpdGhDU1MiLGZhbHNlLGZhbHNlKTsKLXN3aXRjaChfMjcpewotY2FzZSAicGFzdGUiOgotYWxlcnQoWGluaGEuX2xjKCJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhlIFNhZmFyaSBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iKSk7Ci1yZXR1cm4gdHJ1ZTsKLWJyZWFrOwotY2FzZSAicmVtb3ZlZm9ybWF0IjoKLXZhciBfMmE9dGhpcy5lZGl0b3I7Ci12YXIgc2VsPV8yYS5nZXRTZWxlY3Rpb24oKTsKLXZhciBfMmM9XzJhLnNhdmVTZWxlY3Rpb24oc2VsKTsKLXZhciBfMmQ9XzJhLmNyZWF0ZVJhbmdlKHNlbCk7Ci12YXIgZWxzPV8yYS5fZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Ci1lbHM9WGluaGEuY29sbGVjdGlvblRvQXJyYXkoZWxzKTsKLXZhciBfMmY9KF8yZC5zdGFydENvbnRhaW5lci5ub2RlVHlwZT09MSk/XzJkLnN0YXJ0Q29udGFpbmVyOl8yZC5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlOwotdmFyIGksZWwsXzMyLF8zMyxfMzQscjI9XzJhLl9kb2MuY3JlYXRlUmFuZ2UoKTsKLWZ1bmN0aW9uIGNsZWFuKGVsKXsKLWlmKGVsLm5vZGVUeXBlIT0xKXsKLXJldHVybjsKLX0KLWVsLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKTsKLWZvcih2YXIgaj0wO2o8ZWwuY2hpbGROb2Rlcy5sZW5ndGg7aisrKXsKLWNsZWFuKGVsLmNoaWxkTm9kZXNbal0pOwotfQotaWYoKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09InNwYW4iJiYhZWwuYXR0cmlidXRlcy5sZW5ndGgpfHxlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJmb250Iil7Ci1yMi5zZWxlY3ROb2RlQ29udGVudHMoZWwpOwotXzMzPXIyLmV4dHJhY3RDb250ZW50cygpOwotd2hpbGUoXzMzLmZpcnN0Q2hpbGQpewotXzM0PV8zMy5yZW1vdmVDaGlsZChfMzMuZmlyc3RDaGlsZCk7Ci1lbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShfMzQsZWwpOwotfQotZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7Ci19Ci19OwotaWYoc2VsLmlzQ29sbGFwc2VkKXsKLWVscz1fMmEuX2RvYy5ib2R5LmNoaWxkTm9kZXM7Ci1mb3IoaT0wO2k8ZWxzLmxlbmd0aDtpKyspewotZWw9ZWxzW2ldOwotaWYoZWwubm9kZVR5cGUhPTEpewotY29udGludWU7Ci19Ci1pZihlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJzcGFuIil7Ci1fMzI9XzJhLmNvbnZlcnROb2RlKGVsLCJkaXYiKTsKLWVsLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKF8zMixlbCk7Ci1lbD1fMzI7Ci19Ci1jbGVhbihlbCk7Ci19Ci19ZWxzZXsKLWZvcihpPTA7aTxlbHMubGVuZ3RoO2krKyl7Ci1lbD1lbHNbaV07Ci1pZihfMmQuaXNQb2ludEluUmFuZ2UoZWwsMCl8fChlbHNbaV09PV8yZiYmXzJkLnN0YXJ0T2Zmc2V0PT0wKSl7Ci1jbGVhbihlbCk7Ci19Ci19Ci19Ci1yMi5kZXRhY2goKTsKLV8yYS5yZXN0b3JlU2VsZWN0aW9uKF8yYyk7Ci1yZXR1cm4gdHJ1ZTsKLWJyZWFrOwotfQotcmV0dXJuIGZhbHNlOwotfTsKLVdlYktpdC5wcm90b3R5cGUub25Nb3VzZURvd249ZnVuY3Rpb24oZXYpewotaWYoZXYudGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09ImhyInx8ZXYudGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09ImltZyIpewotdGhpcy5lZGl0b3Iuc2VsZWN0Tm9kZUNvbnRlbnRzKGV2LnRhcmdldCk7Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmluc2VydE5vZGVBdFNlbGVjdGlvbj1mdW5jdGlvbihfMzkpewotdmFyIHNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotdmFyIF8zYj10aGlzLmNyZWF0ZVJhbmdlKHNlbCk7Ci1zZWwucmVtb3ZlQWxsUmFuZ2VzKCk7Ci1fM2IuZGVsZXRlQ29udGVudHMoKTsKLXZhciBfM2M9XzNiLnN0YXJ0Q29udGFpbmVyOwotdmFyIHBvcz1fM2Iuc3RhcnRPZmZzZXQ7Ci12YXIgXzNlPV8zOTsKLXN3aXRjaChfM2Mubm9kZVR5cGUpewotY2FzZSAzOgotaWYoXzM5Lm5vZGVUeXBlPT0zKXsKLV8zYy5pbnNlcnREYXRhKHBvcyxfMzkuZGF0YSk7Ci1fM2I9dGhpcy5jcmVhdGVSYW5nZSgpOwotXzNiLnNldEVuZChfM2MscG9zK18zOS5sZW5ndGgpOwotXzNiLnNldFN0YXJ0KF8zYyxwb3MrXzM5Lmxlbmd0aCk7Ci1zZWwuYWRkUmFuZ2UoXzNiKTsKLX1lbHNlewotXzNjPV8zYy5zcGxpdFRleHQocG9zKTsKLWlmKF8zOS5ub2RlVHlwZT09MTEpewotXzNlPV8zZS5maXJzdENoaWxkOwotfQotXzNjLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKF8zOSxfM2MpOwotdGhpcy5zZWxlY3ROb2RlQ29udGVudHMoXzNlKTsKLXRoaXMudXBkYXRlVG9vbGJhcigpOwotfQotYnJlYWs7Ci1jYXNlIDE6Ci1pZihfMzkubm9kZVR5cGU9PTExKXsKLV8zZT1fM2UuZmlyc3RDaGlsZDsKLX0KLV8zYy5pbnNlcnRCZWZvcmUoXzM5LF8zYy5jaGlsZE5vZGVzW3Bvc10pOwotdGhpcy5zZWxlY3ROb2RlQ29udGVudHMoXzNlKTsKLXRoaXMudXBkYXRlVG9vbGJhcigpOwotYnJlYWs7Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmdldFBhcmVudEVsZW1lbnQ9ZnVuY3Rpb24oc2VsKXsKLWlmKHR5cGVvZiBzZWw9PSJ1bmRlZmluZWQiKXsKLXNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotfQotdmFyIF80MD10aGlzLmNyZWF0ZVJhbmdlKHNlbCk7Ci10cnl7Ci12YXIgcD1fNDAuY29tbW9uQW5jZXN0b3JDb250YWluZXI7Ci1pZighXzQwLmNvbGxhcHNlZCYmXzQwLnN0YXJ0Q29udGFpbmVyPT1fNDAuZW5kQ29udGFpbmVyJiZfNDAuc3RhcnRPZmZzZXQtXzQwLmVuZE9mZnNldDw9MSYmXzQwLnN0YXJ0Q29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSl7Ci1wPV80MC5zdGFydENvbnRhaW5lci5jaGlsZE5vZGVzW180MC5zdGFydE9mZnNldF07Ci19Ci13aGlsZShwLm5vZGVUeXBlPT0zKXsKLXA9cC5wYXJlbnROb2RlOwotfQotcmV0dXJuIHA7Ci19Ci1jYXRjaChleCl7Ci1yZXR1cm4gbnVsbDsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuYWN0aXZlRWxlbWVudD1mdW5jdGlvbihzZWwpewotaWYoKHNlbD09PW51bGwpfHx0aGlzLnNlbGVjdGlvbkVtcHR5KHNlbCkpewotcmV0dXJuIG51bGw7Ci19Ci1pZighc2VsLmlzQ29sbGFwc2VkKXsKLWlmKHNlbC5hbmNob3JOb2RlLmNoaWxkTm9kZXMubGVuZ3RoPnNlbC5hbmNob3JPZmZzZXQmJnNlbC5hbmNob3JOb2RlLmNoaWxkTm9kZXNbc2VsLmFuY2hvck9mZnNldF0ubm9kZVR5cGU9PTEpewotcmV0dXJuIHNlbC5hbmNob3JOb2RlLmNoaWxkTm9kZXNbc2VsLmFuY2hvck9mZnNldF07Ci19ZWxzZXsKLWlmKHNlbC5hbmNob3JOb2RlLm5vZGVUeXBlPT0xKXsKLXJldHVybiBzZWwuYW5jaG9yTm9kZTsKLX1lbHNlewotcmV0dXJuIG51bGw7Ci19Ci19Ci19Ci1yZXR1cm4gbnVsbDsKLX07Ci1YaW5oYS5wcm90b3R5cGUuc2VsZWN0aW9uRW1wdHk9ZnVuY3Rpb24oc2VsKXsKLWlmKCFzZWwpewotcmV0dXJuIHRydWU7Ci19Ci1pZih0eXBlb2Ygc2VsLmlzQ29sbGFwc2VkIT0idW5kZWZpbmVkIil7Ci1yZXR1cm4gc2VsLmlzQ29sbGFwc2VkOwotfQotcmV0dXJuIHRydWU7Ci19OwotWGluaGEucHJvdG90eXBlLnNhdmVTZWxlY3Rpb249ZnVuY3Rpb24oKXsKLXJldHVybiB0aGlzLmNyZWF0ZVJhbmdlKHRoaXMuZ2V0U2VsZWN0aW9uKCkpLmNsb25lUmFuZ2UoKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUucmVzdG9yZVNlbGVjdGlvbj1mdW5jdGlvbihfNDQpewotdmFyIHNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotc2VsLnJlbW92ZUFsbFJhbmdlcygpOwotc2VsLmFkZFJhbmdlKF80NCk7Ci19OwotWGluaGEucHJvdG90eXBlLnNlbGVjdE5vZGVDb250ZW50cz1mdW5jdGlvbihfNDYsXzQ3KXsKLXRoaXMuZm9jdXNFZGl0b3IoKTsKLXRoaXMuZm9yY2VSZWRyYXcoKTsKLXZhciBfNDg7Ci12YXIgXzQ5PXR5cGVvZiBfNDc9PSJ1bmRlZmluZWQiP3RydWU6ZmFsc2U7Ci12YXIgc2VsPXRoaXMuZ2V0U2VsZWN0aW9uKCk7Ci1fNDg9dGhpcy5fZG9jLmNyZWF0ZVJhbmdlKCk7Ci1pZihfNDkmJl80Ni50YWdOYW1lJiZfNDYudGFnTmFtZS50b0xvd2VyQ2FzZSgpLm1hdGNoKC90YWJsZXxpbWd8aW5wdXR8dGV4dGFyZWF8c2VsZWN0LykpewotXzQ4LnNlbGVjdE5vZGUoXzQ2KTsKLX1lbHNlewotXzQ4LnNlbGVjdE5vZGVDb250ZW50cyhfNDYpOwotfQotc2VsLnJlbW92ZUFsbFJhbmdlcygpOwotc2VsLmFkZFJhbmdlKF80OCk7Ci1pZih0eXBlb2YgXzQ3IT0idW5kZWZpbmVkIil7Ci1pZihfNDcpewotc2VsLmNvbGxhcHNlKF80OC5zdGFydENvbnRhaW5lcixfNDguc3RhcnRPZmZzZXQpOwotfWVsc2V7Ci1zZWwuY29sbGFwc2UoXzQ4LmVuZENvbnRhaW5lcixfNDguZW5kT2Zmc2V0KTsKLX0KLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuaW5zZXJ0SFRNTD1mdW5jdGlvbihfNGIpewotdmFyIHNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotdmFyIF80ZD10aGlzLmNyZWF0ZVJhbmdlKHNlbCk7Ci10aGlzLmZvY3VzRWRpdG9yKCk7Ci12YXIgXzRlPXRoaXMuX2RvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci12YXIgZGl2PXRoaXMuX2RvYy5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLWRpdi5pbm5lckhUTUw9XzRiOwotd2hpbGUoZGl2LmZpcnN0Q2hpbGQpewotXzRlLmFwcGVuZENoaWxkKGRpdi5maXJzdENoaWxkKTsKLX0KLXZhciBfNTA9dGhpcy5pbnNlcnROb2RlQXRTZWxlY3Rpb24oXzRlKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0U2VsZWN0ZWRIVE1MPWZ1bmN0aW9uKCl7Ci12YXIgc2VsPXRoaXMuZ2V0U2VsZWN0aW9uKCk7Ci1pZihzZWwuaXNDb2xsYXBzZWQpewotcmV0dXJuICIiOwotfQotdmFyIF81Mj10aGlzLmNyZWF0ZVJhbmdlKHNlbCk7Ci1pZihfNTIpewotcmV0dXJuIFhpbmhhLmdldEhUTUwoXzUyLmNsb25lQ29udGVudHMoKSxmYWxzZSx0aGlzKTsKLX1lbHNlewotcmV0dXJuICIiOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5nZXRTZWxlY3Rpb249ZnVuY3Rpb24oKXsKLXJldHVybiB0aGlzLl9pZnJhbWUuY29udGVudFdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuY3JlYXRlUmFuZ2U9ZnVuY3Rpb24oc2VsKXsKLXRoaXMuYWN0aXZhdGVFZGl0b3IoKTsKLWlmKHR5cGVvZiBzZWwhPSJ1bmRlZmluZWQiKXsKLXRyeXsKLXJldHVybiBzZWwuZ2V0UmFuZ2VBdCgwKTsKLX0KLWNhdGNoKGV4KXsKLXJldHVybiB0aGlzLl9kb2MuY3JlYXRlUmFuZ2UoKTsKLX0KLX1lbHNlewotcmV0dXJuIHRoaXMuX2RvYy5jcmVhdGVSYW5nZSgpOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5pc0tleUV2ZW50PWZ1bmN0aW9uKF81NCl7Ci1yZXR1cm4gXzU0LnR5cGU9PSJrZXlkb3duIjsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0S2V5PWZ1bmN0aW9uKF81NSl7Ci12YXIga2V5PVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoXzU1LmtleUlkZW50aWZpZXIucmVwbGFjZSgvXlVcKy8sIiIpLDE2KSk7Ci1pZihfNTUuc2hpZnRLZXkpewotcmV0dXJuIGtleTsKLX1lbHNlewotcmV0dXJuIGtleS50b0xvd2VyQ2FzZSgpOwotfQotfTsKLVhpbmhhLmdldE91dGVySFRNTD1mdW5jdGlvbihfNTcpewotcmV0dXJuIChuZXcgWE1MU2VyaWFsaXplcigpKS5zZXJpYWxpemVUb1N0cmluZyhfNTcpOwotfTsKLVhpbmhhLmNjPVN0cmluZy5mcm9tQ2hhckNvZGUoODI4Nik7Ci1YaW5oYS5wcm90b3R5cGUuc2V0Q0M9ZnVuY3Rpb24oXzU4KXsKLXZhciBjYz1YaW5oYS5jYzsKLXRyeXsKLWlmKF81OD09InRleHRhcmVhIil7Ci12YXIgdGE9dGhpcy5fdGV4dEFyZWE7Ci12YXIgXzViPXRhLnNlbGVjdGlvblN0YXJ0OwotdmFyIF81Yz10YS52YWx1ZS5zdWJzdHJpbmcoMCxfNWIpOwotdmFyIF81ZD10YS52YWx1ZS5zdWJzdHJpbmcoXzViLHRhLnZhbHVlLmxlbmd0aCk7Ci1pZihfNWQubWF0Y2goL15bXjxdKj4vKSl7Ci12YXIgXzVlPV81ZC5pbmRleE9mKCI+IikrMTsKLXRhLnZhbHVlPV81YytfNWQuc3Vic3RyaW5nKDAsXzVlKStjYytfNWQuc3Vic3RyaW5nKF81ZSxfNWQubGVuZ3RoKTsKLX1lbHNlewotdGEudmFsdWU9XzVjK2NjK181ZDsKLX0KLXRhLnZhbHVlPXRhLnZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCgiKCZbXiIrY2MrIjtdKj8pKCIrY2MrIikoW14iK2NjKyJdKj87KSIpLCIkMSQzJDIiKTsKLXRhLnZhbHVlPXRhLnZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCgiKDxzY3JpcHRbXj5dKj5bXiIrY2MrIl0qPykoIitjYysiKShbXiIrY2MrIl0qPzwvc2NyaXB0PikiKSwiJDEkMyQyIik7Ci10YS52YWx1ZT10YS52YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoIl4oW14iK2NjKyJdKikoIitjYysiKShbXiIrY2MrIl0qPGJvZHlbXj5dKj4pKC4qPykiKSwiJDEkMyQyJDQiKTsKLX1lbHNlewotdmFyIHNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotc2VsLmdldFJhbmdlQXQoMCkuaW5zZXJ0Tm9kZSh0aGlzLl9kb2MuY3JlYXRlVGV4dE5vZGUoY2MpKTsKLX0KLX0KLWNhdGNoKGUpewotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5maW5kQ0M9ZnVuY3Rpb24oXzYwKXsKLXZhciBjYz1YaW5oYS5jYzsKLWlmKF82MD09InRleHRhcmVhIil7Ci12YXIgdGE9dGhpcy5fdGV4dEFyZWE7Ci12YXIgcG9zPXRhLnZhbHVlLmluZGV4T2YoY2MpOwotaWYocG9zPT0tMSl7Ci1yZXR1cm47Ci19Ci12YXIgZW5kPXBvcytjYy5sZW5ndGg7Ci12YXIgXzY1PXRhLnZhbHVlLnN1YnN0cmluZygwLHBvcyk7Ci12YXIgXzY2PXRhLnZhbHVlLnN1YnN0cmluZyhlbmQsdGEudmFsdWUubGVuZ3RoKTsKLXRhLnZhbHVlPV82NTsKLXRhLnNjcm9sbFRvcD10YS5zY3JvbGxIZWlnaHQ7Ci12YXIgXzY3PXRhLnNjcm9sbFRvcDsKLXRhLnZhbHVlKz1fNjY7Ci10YS5zZXRTZWxlY3Rpb25SYW5nZShwb3MscG9zKTsKLXRhLmZvY3VzKCk7Ci10YS5zY3JvbGxUb3A9XzY3OwotfWVsc2V7Ci12YXIgXzY4PXRoaXM7Ci10cnl7Ci12YXIgZG9jPXRoaXMuX2RvYzsKLWRvYy5ib2R5LmlubmVySFRNTD1kb2MuYm9keS5pbm5lckhUTUwucmVwbGFjZShuZXcgUmVnRXhwKGNjKSwiPHNwYW4gaWQ9XCJYaW5oYUVkaXRpbmdQb3N0aW9uXCI+PC9zcGFuPiIpOwotdmFyIF82YT1kb2MuZ2V0RWxlbWVudEJ5SWQoIlhpbmhhRWRpdGluZ1Bvc3Rpb24iKTsKLXRoaXMuc2VsZWN0Tm9kZUNvbnRlbnRzKF82YSk7Ci10aGlzLnNjcm9sbFRvRWxlbWVudChfNmEpOwotXzZhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoXzZhKTsKLXRoaXMuX2lmcmFtZS5jb250ZW50V2luZG93LmZvY3VzKCk7Ci19Ci1jYXRjaChlKXsKLX0KLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuX3N0YW5kYXJkVG9nZ2xlQm9yZGVycz1YaW5oYS5wcm90b3R5cGUuX3RvZ2dsZUJvcmRlcnM7Ci1YaW5oYS5wcm90b3R5cGUuX3RvZ2dsZUJvcmRlcnM9ZnVuY3Rpb24oKXsKLXZhciBfNmI9dGhpcy5fc3RhbmRhcmRUb2dnbGVCb3JkZXJzKCk7Ci12YXIgXzZjPXRoaXMuX2RvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEFCTEUiKTsKLWZvcih2YXIgaT0wO2k8XzZjLmxlbmd0aDtpKyspewotXzZjW2ldLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwotXzZjW2ldLnN0eWxlLmRpc3BsYXk9InRhYmxlIjsKLX0KLXJldHVybiBfNmI7Ci19OwotWGluaGEuZ2V0RG9jdHlwZT1mdW5jdGlvbihkb2MpewotdmFyIGQ9IiI7Ci1pZihkb2MuZG9jdHlwZSl7Ci1kKz0iPCFET0NUWVBFICIrZG9jLmRvY3R5cGUubmFtZSsiIFBVQkxJQyAiOwotZCs9ZG9jLmRvY3R5cGUucHVibGljSWQ/IlwiIitkb2MuZG9jdHlwZS5wdWJsaWNJZCsiXCIiOiIiOwotZCs9ZG9jLmRvY3R5cGUuc3lzdGVtSWQ/IiBcIiIrZG9jLmRvY3R5cGUuc3lzdGVtSWQrIlwiIjoiIjsKLWQrPSI+IjsKLX0KLXJldHVybiBkOwotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3BvcHVwcy9wb3B1cC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9wb3B1cHMvcG9wdXAuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMzdjOGQuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3BvcHVwcy9wb3B1cC5qcworKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvcG9wdXBzL3BvcHVwLmpzICovCi1pZih0eXBlb2YgWGluaGE9PSJ1bmRlZmluZWQiKXsKLVhpbmhhPXdpbmRvdy5vcGVuZXIuWGluaGE7Ci19Ci1IVE1MQXJlYT1YaW5oYTsKLWZ1bmN0aW9uIGdldEFic29sdXRlUG9zKGVsKXsKLXZhciByPXt4OmVsLm9mZnNldExlZnQseTplbC5vZmZzZXRUb3B9OwotaWYoZWwub2Zmc2V0UGFyZW50KXsKLXZhciBfMz1nZXRBYnNvbHV0ZVBvcyhlbC5vZmZzZXRQYXJlbnQpOwotci54Kz1fMy54Owotci55Kz1fMy55OwotfQotcmV0dXJuIHI7Ci19OwotZnVuY3Rpb24gY29tYm9TZWxlY3RWYWx1ZShjLF81KXsKLXZhciBfNj1jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvcHRpb24iKTsKLWZvcih2YXIgaT1fNi5sZW5ndGg7LS1pPj0wOyl7Ci12YXIgb3A9XzZbaV07Ci1vcC5zZWxlY3RlZD0ob3AudmFsdWU9PV81KTsKLX0KLWMudmFsdWU9XzU7Ci19OwotZnVuY3Rpb24gX19kbGdfb25jbG9zZSgpewotb3BlbmVyLkRpYWxvZy5fcmV0dXJuKG51bGwpOwotfTsKLWZ1bmN0aW9uIF9fZGxnX2luaXQoXzksX2EpewotX194aW5oYV9kbGdfaW5pdChfYSk7Ci19OwotZnVuY3Rpb24gX194aW5oYV9kbGdfaW5pdChfYil7Ci1pZih3aW5kb3cuX19kbGdfaW5pdF9kb25lKXsKLXJldHVybiB0cnVlOwotfQotaWYod2luZG93Lm9wZW5lci5fZWRpdG9yX3NraW4pewotdmFyIF9jPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07Ci12YXIgX2Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpOwotX2QudHlwZT0idGV4dC9jc3MiOwotX2QuaHJlZj13aW5kb3cub3BlbmVyLl9lZGl0b3JfdXJsKyJza2lucy8iK3dpbmRvdy5vcGVuZXIuX2VkaXRvcl9za2luKyIvc2tpbi5jc3MiOwotX2QucmVsPSJzdHlsZXNoZWV0IjsKLV9jLmFwcGVuZENoaWxkKF9kKTsKLX0KLWlmKCF3aW5kb3cuZGlhbG9nQXJndW1lbnRzJiZvcGVuZXIuRGlhbG9nLl9hcmd1bWVudHMpewotd2luZG93LmRpYWxvZ0FyZ3VtZW50cz1vcGVuZXIuRGlhbG9nLl9hcmd1bWVudHM7Ci19Ci12YXIgX2U9WGluaGEucGFnZVNpemUod2luZG93KTsKLWlmKCFfYil7Ci1fYj17d2lkdGg6X2UueCxoZWlnaHQ6X2UueX07Ci19Ci13aW5kb3cucmVzaXplVG8oX2Iud2lkdGgsX2IuaGVpZ2h0KTsKLXZhciBfZj1YaW5oYS52aWV3cG9ydFNpemUod2luZG93KTsKLXdpbmRvdy5yZXNpemVCeSgwLF9lLnktX2YueSk7Ci1pZihfYi50b3AmJl9iLmxlZnQpewotd2luZG93Lm1vdmVUbyhfYi5sZWZ0LF9iLnRvcCk7Ci19ZWxzZXsKLWlmKCFYaW5oYS5pc19pZSl7Ci12YXIgeD1vcGVuZXIuc2NyZWVuWCsob3BlbmVyLm91dGVyV2lkdGgtX2Iud2lkdGgpLzI7Ci12YXIgeT1vcGVuZXIuc2NyZWVuWSsob3BlbmVyLm91dGVySGVpZ2h0LV9iLmhlaWdodCkvMjsKLX1lbHNlewotdmFyIHg9KHNlbGYuc2NyZWVuLmF2YWlsV2lkdGgtX2Iud2lkdGgpLzI7Ci12YXIgeT0oc2VsZi5zY3JlZW4uYXZhaWxIZWlnaHQtX2IuaGVpZ2h0KS8yOwotfQotd2luZG93Lm1vdmVUbyh4LHkpOwotfQotWGluaGEuYWRkRG9tMEV2ZW50KGRvY3VtZW50LmJvZHksImtleXByZXNzIixfX2RsZ19jbG9zZV9vbl9lc2MpOwotd2luZG93Ll9fZGxnX2luaXRfZG9uZT10cnVlOwotfTsKLWZ1bmN0aW9uIF9fZGxnX3RyYW5zbGF0ZShfMTIpewotdmFyIF8xMz1bImlucHV0Iiwic2VsZWN0IiwibGVnZW5kIiwic3BhbiIsIm9wdGlvbiIsInRkIiwidGgiLCJidXR0b24iLCJkaXYiLCJsYWJlbCIsImEiLCJpbWciXTsKLWZvcih2YXIgXzE0PTA7XzE0PF8xMy5sZW5ndGg7KytfMTQpewotdmFyIF8xNT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShfMTNbXzE0XSk7Ci1mb3IodmFyIGk9XzE1Lmxlbmd0aDstLWk+PTA7KXsKLXZhciBfMTc9XzE1W2ldOwotaWYoXzE3LmZpcnN0Q2hpbGQmJl8xNy5maXJzdENoaWxkLmRhdGEpewotdmFyIHR4dD1YaW5oYS5fbGMoXzE3LmZpcnN0Q2hpbGQuZGF0YSxfMTIpOwotaWYodHh0KXsKLV8xNy5maXJzdENoaWxkLmRhdGE9dHh0OwotfQotfQotaWYoXzE3LnRpdGxlKXsKLXZhciB0eHQ9WGluaGEuX2xjKF8xNy50aXRsZSxfMTIpOwotaWYodHh0KXsKLV8xNy50aXRsZT10eHQ7Ci19Ci19Ci1pZihfMTcudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0iaW5wdXQiJiYoL14oYnV0dG9ufHN1Ym1pdHxyZXNldCkkL2kudGVzdChfMTcudHlwZSkpKXsKLXZhciB0eHQ9WGluaGEuX2xjKF8xNy52YWx1ZSxfMTIpOwotaWYodHh0KXsKLV8xNy52YWx1ZT10eHQ7Ci19Ci19Ci19Ci19Ci1kb2N1bWVudC50aXRsZT1YaW5oYS5fbGMoZG9jdW1lbnQudGl0bGUsXzEyKTsKLX07Ci1mdW5jdGlvbiBfX2RsZ19jbG9zZSh2YWwpewotb3BlbmVyLkRpYWxvZy5fcmV0dXJuKHZhbCk7Ci13aW5kb3cuY2xvc2UoKTsKLX07Ci1mdW5jdGlvbiBfX2RsZ19jbG9zZV9vbl9lc2MoZXYpewotZXZ8fChldj13aW5kb3cuZXZlbnQpOwotaWYoZXYua2V5Q29kZT09MjcpewotX19kbGdfY2xvc2UobnVsbCk7Ci1yZXR1cm4gZmFsc2U7Ci19Ci1yZXR1cm4gdHJ1ZTsKLX07Ci0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9yZWxlYXNlLW5vdGVzLnR4dCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9yZWxlYXNlLW5vdGVzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI1NzAxYS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvcmVsZWFzZS1ub3Rlcy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzODAgKzAsMCBAQAotWGluaGEgLSBUaGUgQ29tbXVuaXR5LUJ1aWx0IE9ubGluZSBIVE1MIEVkaXRvcgotCi1Gb3IgYnVnIHJlcG9ydHMsIGZvcnVtLCBhbmQgdXBkYXRlcyBnbyB0byAKLWh0dHA6Ly94aW5oYS5vcmcKLQotUmVsZWFzZSBIaXN0b3J5Ci0KLVhpbmhhIDAuOTYKLT09IEJ1Z3MgRml4ZWQgPT0KLQotICogIzE0MjUgW1NtYXJ0UmVwbGFjZV1bR2Vja29dIFdoZW4gaW5zZXJ0aW5nIG9wZW5pbmcgcXVvdGUsIHRoZSBzcGFjZSBiZWZvcmUgdGhlIGN1cnNvciBpcyBkZWxldGVkCi0gKiAjMTQyOSBQcm9ibGVtcyB3aXRoIEFwYWNoZSBhbmQgSEVBRCByZXF1ZXN0cy4uLgotICogIzE0NzggRnVydGhlciBpbXBvcnRhbnQgc2VjdXJpdHkgcHJlY2F1dGlvbnMgZm9yIEV4dGVuZGVkRmlsZU1hbmFnZXIgYW5kIEltYWdlTWFuYWdlcgotICogIzE0NzggSGlkZSBhbGwgZG90ZmlsZXMgZnJvbSB0aGUgTGlua2VyIHNjYW5uZXIsIHRoZSBsaW5rZXIgc2hvdWxkbid0IGJlIHNob3dpbmcgImhpZGRlbiIgZmlsZXMuCi0gKiAjMTQ3OCBDU1MgZml4IHRvIGRUcmVlIGluIGxpbmtlciwganVzdCB0byBtYWtlIHN1cmUgaXQncyBzdHlsZXMgd2VyZSBub3QgZ2V0dGluZyBjbG9iYmVyZWQuCi0gKiAjMTQ3OCBTdG9wIHRoZSBTdHlsaXN0IGZyb20gcG9zc2libHkgYWRkaW5nIGEgIGR1cGxpY2F0ZSBzdHlsZXNoZWV0IGludG8gcGFnZVN0eWxlU2hlZXRzLCB0aGlzIHdhcyBjcmVhdGluZyBhIHN1YnRsZSBwcm9ibGVtIGluIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4KLSAqICMxMjI3ICBJbXByb3ZlZCBoYW5kbGluZyBvZiBDU1MgaW1wb3J0cyBpbiBTdHlsaXN0IHBsdWdpbi4KLSAqICMxNDQ4IGFbYi5pZF0gaXMgdW5kZWZpbmVkCi0gKiAjMTM4NyBwcmV2ZW50IGNyYXNoIGluIElFIAotICogIzExOTggRml4IGZvciBiYWQgc2l6aW5nIG9mIGVkaXRvci4KLSAqICMxMTIxIERpc2FibGUgdGFiIGluIEludGVybmV0IEV4cGxvcmVyIGJlY2F1c2UgaXQgZXhpdHMgdGhlIFhpbmhhIGFyZWEuCi0gKiAjNDcyICBEaXNhYmxlIEluc2VydFBpY3R1cmUKLSAqICM1NzkgUGFzcyB2YWx1ZSB0byBkcm9wZG93biBoYW5kbGVycy4KLSAqICMxNDcyIF90b3Agbm90IHJlc3BlY3RlZCBpbiBlZGl0aW5nIGxpbmsuCi0gKiAjMTQ2NyBhdXRvZm9jdXM9ZmFsc2Ugbm90IHdvcmtpbmcgYXMgZXhwZWN0ZWQuCi0gKiAjMTQ2MSBTcGVjaWFsIGNoYXJhY3RlcnMgaW4gaW1hZ2UgbWFrZSB0aHVtYm5haWwgbm90IGFwcGVhci4KLSAqICMxNDM1IElFIGZhaWxlZCBpbiBUcmFuc2Zvcm1Jbm5lckhUTUwKLSAqICMxMjMyIENsaWNrYWJsZSBpY29ucyBvbiBFeHRlbmRlZEZpbGVNYW5hZ2VyCi0gKiAjMTQwOSBJbWFnZSBQcm9wZXJ0aWVzIGJyb2tlbiBpbiBDb250ZXh0TWVudQotICogIzE0MTkgU3R5bGlzdCBkaXNwbGF5IHByb2JsZW0gaW4gSUU2LzcsIEhhc0xheW91dCBidWcuCi0gKiAjMTI2MiBBbHRlcm5hdGl2ZSBtZXRob2QgZm9yIHJlc3RvcmluZyBmcm9tIGZ1bGxzY3JlZW4gbW9kZS4KLSAqICMxMzg4IENoYW5nZSAmbWRhc2g7IHRvICY4MjEyOyBmb3IgeG1sIGNvbXBhdGFiaWxpdHkuCi0gKiAjMTA5MywgIzEzNzcgUmV3cml0ZSB0aGUgSW5zZXJ0U21pbGV5IHBsdWdpbi4gIFJlbWFpbnMgY29tcGF0aWJsZSB3aXRoIHJheSdzIGNoYW5nZXMgaW4gcjkwNCBpZiBwZW9wbGUgaGF2ZSBtYWRlIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KLSAqICMxMjgyIE9wZXJhIGxvc2luZyBpdCdzIGV2ZW50cyB3aGVuIGRlc2lnbk1vZGUgdHVybmVkIG9uIGNhdXNpbmcgc3RhdHVzIGJhciB0byBub3QgdXBkYXRlIGFtb25nc3Qgb3RoZXIgdGhpbmdzLgotICogcjEyMjggUmVtb3ZlIFBlcnNpc3RhbnRTdG9yYWdlIGZyb20gTmV3YmllIGV4YW1wbGUsIGJlY2F1c2UgaXQgbm90IGFjdHVhbGx5IHVzYWJsZSBhdG0KLSAqIHIxMjI5IEZpeCBmaXJlZm94IHZlcnNpb24gZGV0ZWN0aW9uLgotICogcjEyMzAgYXZvaWQgdW5lY2Vzc2FyeSBwb2xsdXRpb24gb2YgZ2xvYmFsIG5hbWVzcGFjZQotICogcjEyMzIgUmVtb3ZlZCBDQyBsaWNlbnNlIGZyb20gVGFuZ28gaWNvbnNldCwgYXMgaXQgc2VlbXMgbm90IGFwcHJvcHJpYXRlCi0gKiByMTIzMiBDaGFuZ2VkIEh0bWxFbnRpdGllcyBwbHVnaW4gbGljZW5zZSB0byBIVE1MQXJlYQotICogIzE0ODggRml4IENvbnRyb2wgU2VsZWN0aW9uIGluIElFOAotICogcjEyMzUgQ2hhbmdlIGxpY2Vuc2UgdG8gSFRNTEFyZWEgLSBzZWUgaHR0cDovL3hpbmhhLm9yZy9wdW5iYi92aWV3dG9waWMucGhwP2lkPTI0OTkKLSAqICMxNDk3IFRyYW5zZm9ybUlubmVySHRtbCBoYW5kbGluZyBvZiBvYmplY3QgdGFnCi0gKiAjMTQ5OCBDb2xvciBwaWNrZXIgZGlzcGxheSBpbiBuZXcgZGlhbG9ncyBpbiBJRTYKLSAqICMxNDk5IEZpeCBmb2N1cyBlcnJvcnMgaW4gbmV3IGRpYWxvZ3MgaW4gSUUKLSAqICMxNTAzIHhpbmhhX3RvX2pzIGRpZCBub3QgaGFuZGxlIGJvb2xlYW5zIGNvcnJlY3RseQotICogIzE1MDkgUHJldmVudCBhdHRlbXB0aW5nIHRvIGNvbXByZXNzIFJFcyBpbiBTYWZhcmkgNAotICogIzE1MTUgU2VjdXJpdHkgcGF0Y2ggdG8gcHJldmVudCByb2d1ZSBhY2Nlc3MgdG8gdGhlIGNvbXByZXNzb3JzIGluIGNvbnRyaWIuCi0gKiAjMTUxOCBTZWN1cml0eSBwYXRjaCB3aGljaCBwcmV2ZW50cyBub24tZGVmYXVsdCBrZXlzIGluIHhpbmhhX3Bhc3NfdG9fcGhwX2JhY2tlbmQuCi0gKiAjMTUxOCBJc3N1ZSBhbiBlcnJvciBhbmQgaWdub3JlIHRoZSBzcGVjaWFsIGJhY2tlbmQgY29uZmlndXJhdGlvbiB3aGVuIHRoZSBrZXkgbG9jYXRpb24gaXMgbm9uIGRlZmF1bHQsIGZvciBib3RoIHRoZSBJbWFnZU1hbmFnZXIgYW5kIEV4dGVuZGVkRmlsZU1hbmFnZXIgZGVwcmVjYXRlZCBjb25maWcgcGFzc2luZyBtZXRob2RzLgotICogIzEyMDkgYW5kICMxMTgyIFVwZ3JhZGUgRXF1YXRpb24gdG8gdXNlIG5ldyBBc2NpaU1hdGgsIGZpeCBtdWx0aXBsZSBlcXVhdGlvbiBlZGl0aW5nLiBUaGFua3MgdG8gTmlyYWogQmhhd25hbmkgb2YgVW5pdmVyc2l0eSBvZiBOZXcgU291dGggV2FsZXMuCi0gKiAjMTQ4MyBGaXggY2FuY2VsIGJ1dHRvbiBpbiBFcXVhdGlvbiBlZGl0b3IuCi0gKiAjMTQ4NSBBZGQgYSBkb3VibGUtY2xpY2sgaGFuZGxlciB3aGljaCB3aWxsIGJyaW5nIHVwIHRoZSBsaW5rL2ltYWdlIGluc2VydGlvbiBkaWFsb2dzIChvciBJbWFnZU1hbmFnZXIvTGlua2VyKSB3aGVuIGEgbGluayBvciBpbWFnZSBpcyBkb3VibGUgY2xpY2tlZC4KLSAqICMxNDkyIEZpeCBsaW5rZXIgaW4gc29tZSBzaXR1YXRpb25zLgotICogIzE0NzEsICMxNTA4LCAjMTUxMCBGaXggSUU4IHByb2JsZW1zIHdpdGggVGFibGVPcGVyYXRpb25zIGFuZCBvdGhlciBidXR0b25zLCBhbmQgYWJzb2x1dGUgcG9zaXRpb25lZCBlZGl0aW5nLgotCi09PSBOZXcgRmVhdHVyZXMgPT0KLQotICogcjExODkgYWRkZWQgdG9vbGJhciBjb25maWcgdG8gTmV3YmllIGV4YW1wbGUKLSAqICMxNDc4IEFkZCBuZXcgbWV0aG9kIFhpbmhhLmV4dGVuZCB0byBwcm92aWRlIG1vcmUgY2xhc3NpY2FsIG9iamVjdCBvcmllbnRlZCBzdWJjbGFzc2VzIHdpdGhpbiBKYXZhc2NyaXB0LgotICogIzE0NzggQWRkIG5ldyBtZXRob2QgWGluaGEuRGlhbG9nOjpzZXRMb2NhbGl6ZXIoKSB0byBtb3JlIGVhc2lseSBzZXQgYSBzcGVjaWZpYyBsb2NhbGl6ZXIgZm9yIGEgZGlhbG9nLgotICogIzE0NzggRmlsZS1QaWNrZXIgb24gYXJiaXRyYXJ5IGZpZWxkcyBvdXRzaWRlIFhpbmhhIChFeHRlbmRlZEZpbGVNYW5hZ2VyKQotICogIzE0NzggQWRkIGNvbmZpZyBvcHRpb24gdG8gdXNlIEhTcGFjZSBhbmQgVlNwYWNlIGluIEltYWdlTWFuYWdlciAoZGVmYXVsdCBvZmYpCi0gKiAjMTQ3OCBBZGQgWW91VHViZSBhbmQgRmxpY2tyIHN1cHBvcnQgdG8gSW1hZ2VNYW5hZ2VyIHNvIHRoYXQgdmlkZW9zIGFuZCBGbGlja3IgaW1hZ2VzIGNhbiBiZSBzZWFyY2hlZCBhbmQgc2VsZWN0ZWQgaW4gdGhlIEltYWdlTWFuYWdlci4KLSAqICMxNDc4IEFkZCBhIG5ldyBkaWFsb2cgdHlwZSAiRGV0YWNoZWREaWFsb2ciIHRvIGhlbHAgbGV2ZXJhZ2UgWGluaGEgcGx1Z2lucyB0byBwZXJmb3JtIHRhc2tzIG91dHNpZGUgb2YgWGluaGEsIGFuZCBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIGRpYWxvZyBmb3IgdGhvc2Ugd2hvIHdpc2ggdG8gbWFrZSB0aGVpciBvd24uCi0gKiAjMTQ3OCBMaW5rLVBpY2tlciAgb24gYXJiaXRyYXJ5IGZpZWxkcyBvdXRzaWRlIFhpbmhhIChMaW5rZXIpCi0gKiAjMTQ3OCBOZXcgUGx1Z2luOiBXeXNpd3lnV3JhcCAtIGNvbWJpbmVkIHdpdGggYW4gYXBwcm9wcmlhdGUgcGFnZVN0eWxlU2hlZXQocykgeW91IGNhbiBtb3JlIGVhc2lseSBzaW11bGF0ZSBpbiBYaW5oYSB3aGF0IGl0IHdpbGwgImxvb2sgbGlrZSIgd2hlbiB0aGF0IEhUTUwgaXMgInB1Ymxpc2hlZCIuCi0gKiAjMTQ0NiBQcm92aWRlIGEgbWVhbnMgZm9yIGFkZGluZyBjdXN0b20gaG9va3MgaW50byB0aGUgQ29udGV4dE1lbnUgcGx1Z2luLgotICogIzEyMjAgQWRkIGFiaWxpdHkgdG8gcGFzcyBleHRyYSBhcmd1bWVudHMgaW4gdGhlIHBvc3QgdG8gdGhlIGJhY2tlbmQgaGFuZGxlciBmb3IgU3VwZXJDbGVhbi4KLSAqICMxNDY1ICBBZGQgYW4gb3B0aW9uIGByZXNpemVfZmlsZXNgIHRvIGJvdGggRXh0ZW5kZWRGaWxlTWFuYWdlciBhbmQgSW1hZ2VNYW5hZ2VyLCBkZWZhdWx0cyB0cnVlLCBmYWxzZSB0dXJucyBvZmYgdGhlIGF1dG9tYXRpYyBpbWFnZSByZXNpemluZy4KLSAqICMxMTg5IEFkZCB0aGUgeG1sOmxhbmcgYXR0cmlidXRlIHRvIExhbmdNYXJrcyBwbHVnaW4uICBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwbHVnaW4gaGFzIGNoYW5nZWQsIG9sZCBjb25maWd1cmF0aW9ucyBhcmUgYWNjZXB0ZWQgd2l0aCBhIHdhcm5pbmcgdG8gdGhlIGNvbnNvbGUuCi0gKiAjMTQzMyBBZGQgYSBTYXZlT25CbHVyIHBsdWdpbiwgYXV0aG9yZWQgYnkgUGV0ZXIgU2lld2VydCAod2l0aCBhIGNsZWFuIHVwIGJ5IEphbWVzIFNsZWVtYW4pLgotICogIzE0NzkgQWRkIENTU1BpY2tlciBwbHVnaW4uCi0gKiAjMTIwNSBBZGQgYWxsb3dfZGVsZXRlIGFuZCBhbGxvd19lZGl0IHRvIEltYWdlTWFuYWdlcgotICogIzEyMDUgQWRkIGFsbG93X2RlbGV0ZSB0byBFeHRlbmRlZEZpbGVNYW5hZ2VyCi0gKiAjMTQ5NiBNYWtlIGRpYWxvZyB0aXRsZSBiYXIgbG9nbyBza2luYWJsZQotICogcjEyNDMgQWRkZWQgYSBtZXRob2QgdG8gYWxsb3cgcGx1Z2lucyB0byBlYXNpbHkgbG9hZCBhc3NldHMgc3luY2hyb25vdXNseSAoZm9yIGRlcGVuZGFuY2llcykuIAotICogIzE1MDIgQWRkIG5ldyBwbHVnaW4gTW9vdG9vbHNGaWxlTWFuYWdlciAtIGFuIGFkdmFuY2VkIGltYWdlIGFuZCBmaWxlIHVwbG9hZGVyL3BpY2tlci9pbnNlcnRlciB3aXRoIG11bHRpLWZpbGUtdXBsb2FkLCBwcm9ncmVzcyBiYXJzLCBhbmQgcHJldmlld3MuCi0gKiAjMTUwNyBDb25maWcgb3B0aW9uIHRvIHNob3cgZm9udHMgaW4gdG9vbGJhciB1c2luZyBhY3R1YWwgZm9udHMuCi0KLT09IFRyYW5zbGF0aW9uID09Ci0KLSAqICMxNDc3IERhbmlzaCB0cmFuc2xhdGlvbiBmb3IgRXh0ZW5kZWRGaWxlTWFuYWdlciBhbmQgU3VwZXJDbGVhbgotICogcjEyMDUgVXBkYXRlZCBEYW5pc2ggdHJhbnNsYXRpb24uCi0gKiAjMTQ3MCBDb250cmlidXRpb24gZnJvbSBOaWVscyBCYWdnZXNlbiB0byBhc3Npc3QgdHJhbnNsYXRvcnMuCi0gKiAjMTQ1NCwgIzE0NTUsICMxNDU2LCAjMTQ1NywgIzE0NTgsICMxNDU5LCAjMTQ2MCBTcGFuaXNoIHRyYW5zbGF0aW9ucy4KLSAqICMxNDY5IFVwZGF0ZWQgZGFuaXNoIHRyYW5zbGF0aW9uLgotCi0KLVhpbmhhIDAuOTZiZXRhMgotQnVncyBGaXhlZAotICogIzEzNzYgW0lFNiAmIElFNyBRdWlya3Ntb2RlXSBEaWFsb2dzIGFyZSBpbnZpc2libGUKLSAqICMxMzgxIFtJRV0gUXVpcmtzTW9kZSBkaWFsb2cgYmFja2dyb3VuZCByZW5kZXJlZCBpbiB3cm9uZyBwb3NpdGlvbiB3aGVuIHBhbmVsIGlzIGRldGFjaGVkCi0gKiAjMTM4MyBbSUU3XSBTZWN1cmUgYW5kIE5vbnNlY3VyZSBXYXJuaW5nCi0gKiAjMTM4MiBbSUVdIFF1aXJrc01vZGUgZGlhbG9nIGJhY2tncm91bmQgZmFsc2VseSBub24tZ3JleSB3aXRoIG1vZGFsIGRpYWxvZ3MsIGdyZXkgd2hlbiBkcmFnZ2luZyBtb2RlbGVzcyBkaWFsb2dzCi0gKiAjMTM4OSBbSUU2XSBzZWxlY3Rpb24gbG9zdCB3aGVuIGNsaWNraW5nIHRvb2xiYXIgYnV0dG9uCi0gKiAjMTM4NiBbU2FmYXJpXSBTZXR0aW5nIGRlZmF1bHQgY2hlY2tib3ggc2V0dGluZ3MgaW4gZGlhbG9ncyBkb2VzIG5vdCB3b3JrCi0gKiAjMTM5NCBmdWxscGFnZSBwdXRzIG1ldGFzLyB0aXRsZSBhbGwgb24gdGhlIHNhbWUgbGluZQotICogIzEzOTAgUHJlc2VydmVTY3JpcHRzIHNob3J0aGFuZCBwaHAgdGFncwotICogIzEzOTIgdG9vIG11Y2ggcmVjdXJzaW9uIHdoZW4gc2V0dGluZyBIVE1MIGluIGZ1bGxQYWdlIG1vZGUgdXNpbmcgb25HZW5lcmF0ZS9vbkdlbmVyYXRlT25jZQotICogIzE0MDcgW0lFOF0gd2luZG93IHJlc2l6ZSBjYXVzZXMgaW5maW5pdGUgbG9vcAotICogIzE0MDggUEhQNSBJSVMgZmlsZSB1cGxvYWQgcHJvYmxlbQotICogIzEzNzQgW0lFOF0gVGFibGUgaW5zZXJ0IG5vdCB3b3JrCi0gKiAjMTM3OSBbRmlyZWZveF0gbm8gbG9uZ2VyIGNvcnJ1cHRzIGltYWdlIGRhdGEgZnJvbSBicm9rZW4gaW1hZ2VzCi0KLVRyYW5zbGF0aW9uCi0gKiBbU21hcnRSZXBsYWNlXSBBZGRlZCBGcmVuY2ggdHJhbnNsYXRpb24KLSAqICMxNDA2IFtGdWxsU2NyZWVuXSBBZGRlZCBTcGFuaXNoIHRyYW5zbGF0aW9uCi0KLVhpbmhhIDAuOTZiZXRhCi1CdWdzIEZpeGVkCi0gKiAjMzE0IFN0YXR1cyBiYXIgc2hvdWxkIHdyYXAKLSAqICM3NDEgQ29udGV4dE1lbnUgc2hvdWxkIG5vdCBvdmVyZmxvdyB3aW5kb3cgYm91bmRhcmllcwotICogIzk2MSBiYXNlSHJlZiBub3QgY29ycmVjdGx5IHRyZWF0ZWQgd2hlbiBzdHJpcHBpbmcKLSAqICMxMTYwIFNhZmFyaSBwdXRzIHNlbGVjdGVkIEhUTUwgbmVhciBib3R0b20gaWYgZWRpdGVkCi0gKiAjMTE2NiBUYWJsZU9wZXJhdGlvbnMgZGlhbG9ncyBkbyBub3QgcmVzaXplIHByb3Blcmx5IGluIFNhZmFyaSAzCi0gKiAjMTE3MyBJRTggYmV0YSB0b29sYmFycyBicm9rZW4KLSAqICMxMTc0IElFOCBiZXRhIG5vIHRleHQgY3Vyc29yIGluIHd5c2l3eWcKLSAqICMxMTg3IEV4dGVuZGVkRmlsZU1hbmFnZXIgImltZ01hbmFnZXIuY2hhbmdlRGlyIGlzIG5vdCBhIGZ1bmN0aW9uIiBlcnJvcgotICogIzExOTMgU3R5bGlzdCBidWcgd2hlbiBmb3JtYXR0aW5nIHNlbGVjdGVkIHRleHQKLSAqICMxMjEzIFdvdWxkIGJlIG5pY2UgdG8gcHJvdGVjdCB1bnNhdmVkIGNoYW5nZXMgZnJvbSBhY2NpZGVudGFsIGxvc3Mgd2hlbiBuYXZpZ2F0aW5nIGF3YXkKLSAqICMxMjIxIFNlbGVjdGluZyBoZWFkaW5nIG5vcm1hbCBvbiBub3RoaW5nIHRocm93cyBleGNlcHRpb24gYWxlcnQKLSAqICMxMjI0IHNldmVuYml0Y2xlYW4/IC8gZ2hvc3QgY3Vyc29yIGVycm9yIHdpdGggaHRtbCBtb2RlIHRvZ2dsZSAoRmlyZWZveCkKLSAqICMxMjI3IE5vIENTUyBydWxlcyBsb2FkIHdoZW4gdXNpbmcgQGltcG9ydCBpbiBleHRlcm5hbCBzdHlsZXNoZWV0Ci0gKiAjMTIzMCBDU1Mgd2lkdGggYXR0cmlidXRlIGJyZWFrcyBzZWxlY3QgZGlzcGxheSBpbiBJRQotICogIzEyNDAgTGlua2VyOiB0cmltIHNwYWNlcyBmcm9tIFVSTAotICogIzEyNDcgQ2hhckNvdW50ZXIgcHJvYmxlbXMgd2l0aCBTaWx2YSBza2luCi0gKiAjMTI1NyBFcnJvciBpZiB1cmwgcXVlcnkgc3RyaW5nIGluY2x1ZGVkICcvJwotICogIzEyNTggRXZlbnQgb2JqZWN0IGlzIG5vdCBoYW5kZWQgb3ZlciB0byBldmVudCBoYW5kbGVycyBpbnN0YWxsZWQgb24gdGV4dGFyZWEKLSAqICMxMjYxIER1dGNoIHRyYW5zbGF0aW9uIGZvciBGdWxsc2NyZWVuIG1vZHVsZQotICogIzEyODAgcmVzdG9yZVNlbGVjdGlvbiBkb2Vzbid0IGFsd2F5cyB3b3JrIGluIGludGVybmV0IGV4cGxvcmVyCi0gKiAjMTI4MSBzZWxlY3ROb2RlQ29udGVudHMgaXMgYm9ya2VuIGluIElFIHdoZW4gdGhlIG5vZGUgaXMgYSB0ZXh0IG5vZGUKLSAqICMxMjg0IF9lZGl0b3JfdXJsIGlzIHN0aWxsIHVzZWQgaW4gYSBjb3VwbGUgb2YgcGx1Z2lucy4KLSAqICMxMjg2IHVzZSBjYWxsYmFja3MgYXMgY3JpdGVyaWEgZm9yIGdldEZpcnN0QW5jZXN0b3IKLSAqICMxMjg4IFtEZWZpbml0aW9uTGlzdF0gbGlzdCBpdGVtcyByZXN0cmljdGVkIHRvIHNtYWxsIHdpZHRoIGFuZCBvbmUgbGluZSBieSBDU1MKLSAqICMxMjkwIEltcHJvdmVkIHN1cHBvcnQgZm9yIHBhc3RpbmcgZnJvbSBNaWNyb3NvZnQgV29yZAotICogIzEyOTEgWGluaGEucmVtb3ZlRnJvbVBhcmVudCgpIGRvZXMgbm90IHJldHVybiBjb3JyZWN0IHJlZmVyZW5jZQotICogIzEyOTIgY2hhbmdlIG5hbWluZyBzY2hlbWUgb2YgcGx1Z2luIGZpbGVzCi0gKiAjMTI5MyBbR2Vja29dIFdpbmRvdyBzY3JvbGxzIHRvIHRvcCBvZiBlZGl0aW5nIGFyZWEgd2hlbiBzd2l0Y2hpbmcgZnJvbSB0ZXh0IHRvIFdZU0lXWUcKLSAqICMxMjk0IEVkaXRvciBoaWdoZXIgaW4gSFRNTCBtb2RlCi0gKiAjMTI5NSBUZXh0YXJlYSBub3QgYWxpZ25lZCB1bmRlciB0b29sYmFyCi0gKiAjMTI5OCBDU1Mgc3R5bGluZyBnZXRzIGluc2VydGVkIGludG8gdGFibGUgY2VsbCBhZnRlciB2aWV3aW5nIHNvdXJjZSAoU2FmYXJpIG9ubHkpCi0gKiAjMTMwMCBjcmVhdGUgbmFtZXNwYWNlIGZvciBwbHVnaW5zIHdpdGhpbiBYaW5oYSBuYW1lc3BhY2UKLSAqICMxMzAxIGxvYWRpbmcgc2hvdWxkIG5vdCBmYWlsIGlmIHBsdWdpbiBvbWl0cyBfcGx1Z2luSW5mbwotICogIzEzMDIgYWRkIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoIGZvciBCcm93c2VyIHRoYXQgZG9lc24ndCBzdXBwb3J0IGl0Ci0gKiAjMTMwMyBhZGQgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgpCi0gKiAjMTMwNiBUb29sYmFyIGFjdGlvbnMgbmVlZCBhY2Nlc3MgdG8gdGhlIGNsaWNrIGV2ZW50Ci0gKiAjMTMwOSBYaW5oYSBjaG9rZXMgb24gYW5jaG9ycwotICogIzEzMTUgWGluaGEncyBfYWRkRXZlbnQgdXNlcyBldmVudCBjYXB0dXJpbmcKLSAqICMxMzE2IEluIEludGVybmV0RXhwbG9yZXIsIHRoZSBjdXJzb3IgaXMgbG9zdCB3aGVuIHN3aXRjaGluZyBpbnRvIHNvdXJjZSBtb2RlCi0gKiAjMTMxNyBYaW5oYSdzIHBvc3RiYWNrIGFuZCBnZXRiYWNrIHNob3VsZCBhbGxvdyBmb3IgZmFpbHVyZSBoYW5kbGVycwotICogIzEzMTkgbWFrZSBldmVudCBob29rcyBsaWtlIG9uS2V5UHJlc3MgYWNjZXNpYmxlIGZyb20gdGhlIGNvbmZpZyBvYmplY3QKLSAqICMxMzIwIG1ha2UgaXQgcG9zc2libGUgdG8gdXNlIHBuZyBpbWFnZXMgYXMgaWNvbnMgaW4gSUU2Ci0gKiAjMTMyMSBbU2F2ZVN1Ym1pdF0gaWNvbiBpcyBpbiAiY2hhbmdlZCIgc3RhdGUgaW5pdGlhbGx5Ci0gKiAjMTMyMiBbU2F2ZVN1Ym1pdF0gZXJyb3Igd2hlbiBmb3JtIGFjdGlvbiBpcyBlbXB0eQotICogIzEzMzIgUGFuZWwgY2xhc3NlcyBhcmUgdmVyeSBnZW5lcmljLCBhbmQgcmlzayBjb25mbGljdCB3aXRoIHVzZXJzIGVtYmVkZGluZyBpdCBpbiB0aGVpciBzaXRlCi0gKiAjMTMzNyBHZXRIVE1MIHRydW5jYXRlcyBoeXBlcmxpbmtzCi0gKiAjMTM0NiBzdGF0dXNiYXIgc2hvd3MgYiwgaSwgc3RyaWtlIGluc3RlYWQgb2Ygc3Ryb25nLCBlbSwgYW5kIGRlbAotICogIzEzNTcgc2FmYXJpIGZvcm0gc3VibWl0IGhhcyBlbXB0eSBmb3JtIGZpZWxkIG5hbWVzIGluIFBPU1QgZGF0YSwgY2F1c2VzIGZhaWx1cmUgd2l0aCBwZXJsIENHSQotCi0gCi1FbmhhbmNlbWVudHMKLSAqICMxMTc2IENvbXBsZXRlbHkgcmV2YW1wZWQgZGlhbG9nIHN5c3RlbSwgd2hpY2ggdXNlcyBpbmxpbmUgbGlnaHRib3gtc3R5bGUgZGlhbG9ncyBpbnN0ZWFkIG9mIHNlcGFyYXRlIHBvcHVwIHdpbmRvd3MgCi0gKiAjMzI2IEFkZGVkIHN1cHBvcnQgZm9yIGN1c3RvbWl6YWJsZSBpY29uIHNldHMKLSAqICMxMzE4IEFkZGVkIGljb24gc2V0IGZyb20gdGhlIFRhbmdvIFByb2plY3QKLSAqICMxMjg3IE5ldyBJbnNlcnROb3RlIHBsdWdpbiBmb3IgaGFuZGxpbmcgZm9vdG5vdGVzLCB3aXRoIGF1dG9tYXRpYyBub3RlIG51bWJlcmluZyBhbmQgb3JkZXJpbmcsIGxpbmtpbmcsIGFuZCBzdXBwb3J0IGZvciByZXBlYXRlZCByZWZlcmVuY2VzCi0gKiAjMTI4OSBOZXcgSW5zZXJ0U25pcHBldDIgcGx1Z2luLCB3aXRoIGNhdGVnb3JpemF0aW9uIG9mIHNuaXBwZXRzLCBzZWFyY2ggYnkgbmFtZSwgYW5kIGFuIFhNTCBkYXRhIGZvcm1hdAotICogIzU4IEFkZGl0aW9uYWwgc2V0dGluZ3MgZm9yIExpbmtlciBwbHVnaW4gKGxpbmsgdHlwZXMgYW5kIHRhcmdldHMgY2FuIGJlIGNvbmZpZ3VyZWQpCi0gKiAjMTIxOSBDb25maWd1cmF0aW9uIG9wdGlvbiB0byBhdXRvZm9jdXMgZWRpdG9yCi0gKiAjMTI4NSBDb25maWd1cmF0aW9uIG9wdGlvbiB0byBzZXQgZG9jdW1lbnQgYm9keSBjbGFzcwotICogIzEzMjMgQWxsb3cgc2tpbnMgdG8gaGF2ZSBtZXRhIGluZm9ybWF0aW9uIChhdXRob3IsIGV0Yy4pCi0gKiAjMTMzOCBfZWRpdG9yX3VybCBpcyBub3cgYXV0b21hdGljYWxseSBkZXRlY3RlZAotICogIzEzNDUgQWRkIGEgc3RhdGljIGZ1bmN0aW9uIHRoYXQgc2F2ZXMgdGhlIGNvbnRlbnRzIG9mIGFsbCBYaW5oYXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSB0ZXh0YXJlYXMKLQotCi1YaW5oYSAwLjk1Ci1CdWdzIEZpeGVkCi0gKiBmaXhlZCAjMTA0MCBodG1sUmVtb3ZlVGFncyBkb2Vzbid0IHdvcmsgaW4gSUUgCi0gKiBmaXhlZCAjNjQ1IElFIFNhdmUgYXMgZnVuY3Rpb24gb25seSBzYXZlcyB0aGUgb3JpZ2luYWwgaHRtbCAKLSAqIGZpeGVkICMxMTM2IEZGMyBMaW51eCBzZWxlY3QgYm94ZXMgaW4gdG9vbGJhciBhcmUgdG9vIHNtYWxsIAotICogZml4ZWQgIzExMDAgRXh0ZW5kZWQgRmlsZSBNYW5hZ2VyIC0gRXJyb3IgYWZ0ZXIgb3BlbmluZyB3aW5kb3cKLSAqIGZpeGVkICMxMTAzIFtUcmFuc2Zvcm1Jbm5lckhUTUxdIElFIGJyZWFrcyBzaW5nbGV0IGF0dHJpYnV0ZXMgc3RhcnRpbmcgd2l0aCAibm8iCi0gKiBmaXhlZCAjMTA4NiBSZXBlYXRlZCBqYXZhc2NyaXB0IGluc2VydGlvbiBpbiBvbmNsaWNrIGF0dHJpYnV0ZXMKLSAqIGZpeGVkICMxMDk0IElFIHRocm93cyBlcnJvciBpbiBYaW5oYS5sb2FkU3R5bGUgZnVuY3Rpb24KLSAqIGZpeGVkICAjMTExNyBJRSByZXR1cm5zIGphdmFzY3JpcHQgZXJyb3IgLTEwNzI4OTY2NTgKLSAqIGZpeGVkICM5OTMgUGFnZVN0eWxlIHRvIG92ZXJyaWRlIHN0eWxlcyBpbiBQYWdlU3R5bGVzaGVldHMKLSAqICMxMTEyIHN3aXRjaGluZyBiZXR3ZWVuIG1vZGVzIGxlYXZlcyBzdHJhbmdlIGNoYXJhY3RlcnMgaW4gc291cmNlIAotICogZml4ZWQgIzExMjggbG9hZGluZyBmYWlscyB3aGVuIEZ1bGxzY3JlZW4gdHJpZWQgdG8gbG9hZCBhcyBwbHVnaW4KLSAqIGZpeGVkICMxMTI2IFBlcmNlbnQgKCUpIGluIFVSTCBwcmV2ZW50IHN0cmlwU2VsZk5hbWVkQW5jaG9ycyBmcm9tIHdvcmtpbmcgIAotICogZml4ZWQgIzExMjAgSFRNTCBzZWxlY3Qgb3ZlcmxhcHMgY29sb3IgcGlja2VyIGluIElFNgotICogIzExMTUgKyAjMTEyNyBmaXhlZCBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoIEZpcmVmb3ggMwotICogIzk2MSArICAjMTEzMCBjaGFuZ2VkIGJlaGF2aW91ciBvZiB4aW5oYV9jb25maWcuYmFzZUhyZWYKLSAqIGZpeGVkICM2NDUgU2F2ZSBhcyBmdW5jdGlvbiBvbmx5IHNhdmVzIHRoZSBvcmlnaW5hbCBodG1sCi0gKiBmaXhlZCAjMTA0MCBodG1sUmVtb3ZlVGFncyBkb2Vzbid0IHdvcmsgaW4gSUUKLSAqIGZpeGVkICMxMDE1IE1vemlsbGEgc2hvd3Mgc2Nyb2xsYmFycyBvbiBjbGljayBpbiBTdHlsaXN0IAotICogIzkxOCByZW1vdmVkIG1velBhcmFIYW5kbGVyIGRpcnR5IGFzIGl0IGhhZCBiZWVuIGJyb2tlbiBmb3IgYSBsb25nIHRpbWUKLSAqIGZpeGVkICMxMDE1IE1vemlsbGEgc2hvd3Mgc2Nyb2xsYmFycyBvbiBjbGljayBpbiBTdHlsaXN0IAotICogZml4ZWQgIzExNDggSFRNTCBlbnRpdGllcyBicmVhayB3aGVuIGN1cnNvciBpcyBpbnNpZGUgd2hlbiBzd2l0Y2hpbmcgZnJvbSBIVE1MIHRvIFdZU0lXWUcgCi0gKiBmaXhlZCAjMTE1MSBmb3JtIGFjdGlvbiBhbHdheXMgbWFkZSBhYnNvbHV0ZQotICogZml4ZWQgIzExNTUgSW5zZXJ0QW5jaG9yIGJyb2tlbiBpbiBJRSA3Ci0gKiBmaXhlZCAjMTE1OCBbSW1hZ2VNYW5hZ2VyXSBpbiBKYXBhbmVzZSBlbnZpcm9ubWVudCwgYW4gZXJyb3Igb2NjdXJzIGJ5IHJlYWRpbmcgb2YgbGFuZy9qYS5qcyBpbiBJRTYvNyAKLSAqIGZpeGVkICMxMTUyIFBsdWdpbnMgdXNpbmcgc3Vycm91bmRIVE1MIChFZGl0VGFnLCBMYW5nTWFya3MpIG5vIGxvbmdlciB3b3JrIGluIElFNwotICogZml4ZWQgIzExNjEgcGVybWlzc2lvbiBlcnJvciBmcm9tIENvbG9yUGlja2VyLmpzCi0gKiBmaXhlZCAjMTE4MSBbVGFibGVPcGVyYXRpb25zXSBUYWJsZSBPcHRpb25zIGRpYWxvZyBmaXJzdCBlbnRyeSBmb3IgYm9yZGVyIHN0eWxlIGZhdWx0eQotICogZml4ZWQgIzExODUgW1RhYmxlT3BlcmF0aW9uc10gSUU6IHN0eWxlIGZsb2F0IGJyb2tlbgotICogZml4ZWQgIzExOTcgW0xpbmtlcl0gSUUgc2hvd3MgYnVnIGluIGxpbmUgMjYyCi0gKiBmaXhlZCAjMTIwMCBbTGlua2VyXSBEaWFsb2cgZG9lcyBub3Qgc2hvdyBpZiBzY2FubmVkIGZvbGRlciBlbXB0eQotIAotRW5oYW5jZW1lbnRzCi0gKiAjMTE0MyBhZGQgU2FmYXJpIHN1cHBvcnQKLSAqICM5MzggIGFkZCBPcGVyYSBzdXBwb3J0Ci0gKiAjMTEzOCBhZGRlZCBBUEkgZnVuY3Rpb25zIFhpbmhhLmdldEVkaXRvcigpLCBYaW5oYS5wcm90b3R5cGUuZ2V0UGx1Z2luSW5zdGFuY2UoKSwgWGluaGEuYWRkT25sb2FkSGFuZGxlcigpIAotICogIzExMzcgW0VxdWF0aW9uXSBGRjMgZml4ZXMgJiBpbXByb3ZlZCB3YXkgb2YgYXZvaWRpbmcgZm9ybXVsYSBjaGFuZ2VzIGluIGVkaXRvcgotICogIzExNTAgc3luY2hyb25pemUgIlJlbW92ZSBGb3JtYXQiIGJldHdlZW4gYnJvd3NlcnMKLSAqIGFkZGVkIHBsdWdpbiBQcmVzZXJ2ZVNjcmlwdHMgZm9yIGVuaGFuY2VkIGVkaXRpbmcgb2YgcGFnZXMgY29udGFpbmluZyBQSFAgYW5kL29yIEphdmFTY3JpcHQgKCkKLSAqIExvYWRpbmcgbWVzc2FnZSBmYWNlbGlmdAotICogYWRkZWQgWGluaGFMb2FkZXIuanMgZm9yIGVuaGFuY2VkIHVzZXIgZXhwZXJpZW5jZSB0aHJvdWdoIGVhcmx5IGxvYWRpbmcgbWVzc2FnZQotICogbWFkZSBYaW5oYS5tYWtlRWRpdG9ycyBhY2NlcHQgYSBET00gcmVmZXJlbmNlIHRvIHRoZSB0ZXh0YXJlYSBpbnN0ZWFkIG9mIHRoZSBpZCBhcyBwYXJ0IG9mIHhpbmhhX2VkaXRvcnMgYXJyYXkgKCMxMTA1KQotICogIzExMjMgQWxsb3cgcmV0dXJuIG9mIFBIUCBhcnJheSBmcm9tIHhpbmhhX3Bhc3NfdG9fcGhwX2JhY2tlbmQKLSAqIFtMaW5rZXJdIHNjYW4ucGhwOiBBbGxvdyBzcGVjaWZpY2F0aW9uIG9mIGJhc2UgdXJsIHRvIHVzZSAoc28gdGhhdCBhIHN1YmRpcmVjdG9yeSBjYW4gYmUgdXNlZCBhcyAkZGlyIGFuZCByZXR1cm4gYXBwcm9wcmlhdGUgdXJscyB0byB0aGUgZmlsZXMgKHByZWZpeGluZyB0aGUgdXJsCi0gKiBbRXh0ZW5kZWRGaWxlTWFuYWdlcl0gbmV3IFZlcnNpb24KLSAqICM5NjEgKyAgIzExMzAgY2hhbmdlZCBiZWhhdmlvdXIgb2YgeGluaGFfY29uZmlnLmJhc2VIcmVmCi0gKiAjMTEzNyBbRXF1YXRpb25dIGltcHJvdmVkIHdheSBvZiBhdm9pZGluZyBmb3JtdWxhIGNoYW5nZXMgaW4gZWRpdG9yCi0gKiAjNDQyIHJlbW92ZWQgYWxlcnQgIllvdXIgRG9jdW1lbnQgaXMgbm90IHdlbGwgZm9ybWVkLi4uIgotICogIzExMTkgZGlzYWJsZWQgRmlyZWZveCAyIHNwZWxsIGNoZWNrIHdoZW4gQ29udGV4dE1lbnUgaXMgZW5hYmxlZCAKLSAqIGFkZGVkIGEgcGx1Z2luICJHZW5lcmljUGx1Z2luIiBhcyBhIGRlbW9jYXNlIGZvciBwbHVnaW4gZXZlbnQgaGFuZGxlcnMKLSAqICMxMTcxIFtTbWFydFJlcGxhY2VdIG5vdyBhbHNvIHJlcGxhY2VzIHRocmVlIGRvdHMgd2l0aCBhbiBlbGxpcHNpcwotICogIzExMTkgW0NvbnRleHRNZW51XSBvcHRpb25hbGx5IHN3aXRjaCBvZiBGaXJlZm94IFNwZWxsIGNoZWNrCi0gKiAjMTE3MiBbTGFuZ01hcmtzXSBtYWtlIGF2YWlsYWJsZSBsYW5ndWFnZXMgY29uZmlndXJhYmxlCi0gKiBlbmhhbmNlZCBiZWhhdmlvdXIgd2hlbiB4aW5oYV9jb25maWcuYmFzZUhyZWYgaXMgc2V0IHRvIGFub3RoZXIgc2VydmVyCi0gKiAjMTE5NSBBbGxvdyB0byBzcGVjaWZ5IGFuIGV4dGVybmFsIHVybCB0byBsb2FkIGEgcGx1Z2luIGZyb20KLSAqICMxMjAxIEFkZCBpbndhcmRIdG1sL291dHdhcmRIdG1sIGZ1bmN0aW9ucyB0byBDb25maWcgb2JqZWN0Ci0gCi1JMThuCi0gKiAjMTEwOSBTcGFuaXNoIGxhbmd1YWdlIGV4dGVuZGVkCi0gKiAjMTExNiBbRXh0ZW5kZWRGaWxlTWFuYWdlcl0gYWRkZWQgRnJlbmNoIHRyYW5zbGF0aW9uCi0gKiAjODUzIHVwZGF0ZWQgVHJhbnNsYXRpb24gZm9yIGZhcnNpCi0gKiBmaXhlZCB3cm9uZyBlbmNvZGluZyBpbiBTcGFuaXNoIGxhbmd1YWdlIGZpbGUgCi0gKiBmaXhlZCBubyBib2xkL2l0YWxpYy91bmRlcmxpbmUgYnV0dG9uIGltYWdlcyBpbiBTcGFuaXNoCi0gKiAgIzExOTQgW0V4dGVuZGVkRmlsZU1hbmFnZXJdIHVwZGF0ZWQgRnJlbmNoIHRyYW5zbGF0aW9uCi0KLSAKLVhpbmhhIDAuOTQKLSAqIFRpY2tldCAjMTA5MyBbSW5zZXJ0U21pbGV5XSByZW1vdmUgc21pbGV5IGdpZnMgZnJvbSB0cnVuawotICogZml4ZWQgVGlja2V0ICMxMDE5IEN1c29yIG5vdCBqdW1waW5nIHRvIGVkaXRhYmxlIHBhcnQgb2Ygd2luZG93IHdoZW4gY2xpY2tlZCBpbiBJRQotICogW1RhYmxlT3BlcmF0aW9uc10gQWRkIGNvbmZpZyBvcHRpb24gdG8gbm90IGRpc3BhbHkgdG9vbGJhciBidXR0b25zCi0gKiBmaXhlZCBUaWNrZXQgIzEwMjEgIFByZXZlbnQgRXh0ZW5kZWRGaWxlTWFuYWdlciBmcm9tIG1hc2tpbmcgSW1hZ2VNYW5hZ2VyCi0gKiBmaXhlZCBUaWNrZXQgIzEwMjMgW0ltYWdlTWFuYWdlcl0gQWRkIGNvbmZpZyBpdGVtIHRvIGFsbG93IHRoZSBhZHZhbmNlZCBpbWFnZSBvcHRpb25zIHRvIGJlIGhpZGRlbiBmcm9tIHRoZSB1c2VyCi0gKiBmaXhlZCBUaWNrZXQgIzEwMjYgZml4IHByb2JsZW1zIHdpdGggbG9hZGluZyBza2lucwotICogZml4ZWQgVGlja2V0cyAjMTAzMCAmICMxMDMxOiBzbG93IGxvYWRpbmcgbGFyZ2UgcGFnZXMgaW4gSUUKLSAqIGZpeGVkIFRpY2tldCAjMTAzNCBbRXh0ZW5kZWRGaWxlTWFuYWdlcl0gQ29sb3IgcGlja2VycyBzaG93biB3aGVuIHVzZV9jb2xvcl9waWNrZXJzIGlzIGZhbHNlCi0gKiBmaXhlZCBUaWNrZXQgIzEwMzUgW1RyYW5zZm9ybUlubmVySFRNTF0gdGFncyBjb3JydXB0ZWR1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMKLSAqIGZpeGVkIFRpY2tldCAjMTAzNiBbRXh0ZW5kZWRGaWxlTWFuYWdlcl0gd2luZG93IGlzIG9ubHkgcmVzaXplZCBhZnRlciBhbGwgdGh1bWJuYWlscyBoYXZlIGJlbm4gbG9hZGVkLCB3aGljaCBjYW4gdGFrZSBxdWl0ZSBzb21lIHRpbWUKLSAqIGZpeGVkIFRpY2tldCAjMTAzOSBGaXJlZm94IGZ1bGwgcGFnZSBhZGRzIG11bHRpcGxlIHBhcmFncmFwaHMgYWZ0ZXIgdmlldyBzb3VyY2UKLSAqIGZpeGVkIFRpY2tldCAjMTAxOSBDdXNvciBub3QganVtcGluZyB0byBlZGl0YWJsZSBwYXJ0IG9mIHdpbmRvdyB3aGVuIGNsaWNrZWQgaW4gSUU3Ci0gKiBmaXhlZCBUaWNrZXQgIzEwNDYgRXJyb3IgaW4gSUUgNiB3aGVuIHN3aXRjaGluZyBmcm9tIHRleHQgdG8gd3lzaXd5ZwotICogW0RPTXdhbGtdIGxpbmVicmVha3MgaW5zZXJ0ZWQgYmVmb3JlIDxiciAvPnMKLSAqIGNhdGNoIGVycm9yIGluIElFIHdoZW4gdHJ5aW5nIHRvIHJlc3RvcmUgc2VsZWN0aW9uIG9uIG5vbi1kaXNwbGF5ZWQgYXJlYQotICogZml4ZWQgVGlja2V0ICM5NzMgRXJyb3Igc3dpdGNoaW5nIHd5c2l3eWcvaHRtbCBpbmNsdWRpbmcgamF2YXNjcmlwdCBmaWxlIG9uIHRoZSBjb2RlCi0gKiBmaXhlZCBUaWNrZXQgIzEwMjggIC0gW0xpbmtlcl0gYXV0b21hdGljYWxseSAoYXR0ZW1wdCB0bykgd29yayBhcm91bmQgYW4gaXNzdWUgd2l0aCBtb2Rfc2VjdXJpdHkgYmVpbmcgdHJpZ2dlcmVkIGJlY2F1c2Ugb2YgdGhlIGNoYXJzZXQgb24gb3VyIFBPU1QgcmVxdWVzdHMKLSAqIGZpeGVkIFRpY2tldCAjMTA1NSBbU3R5bGlzdF0gSW5hcHByb3ByaWF0ZSBzdHlsZXMgKGZvciBvdGhlciB0YWdzKSBhcmUgc2hvd24KLSAqIGFkZGVkIER1dGNoIGxhbmd1YWdlIGZpbGVzCi0gKiBhZGRlZCBuZXcgaG9vayAnb25CZWZvcmVTdWJtaXQnIGZvciBmaXJlUGx1Z2luRXZlbnQoKQotICogYWRkZWQgbmV3IGhvb2sgJ29uQmVmb3JlVW5sb2FkJyBmb3IgZmlyZVBsdWdpbkV2ZW50KCkKLSAqIGZpeGVkIFRpY2tldCAjMTA0OCBGdWxsIFNjcmVlbiBwbHVnaW4gZG9lc24ndCBsb2FkIGlmIG1hbnkgZWRpdG9ycyBvbiBwYWdlCi0gKiBmaXhlZCBUaWNrZXQgIzEwNTMgTGlzdFR5cGUgcGx1Z2luIGRvZXNuJ3Qgd29yayBpbiBwYW5lbCBjb25maWcgd2l0aCBtdWx0aXBsZSBlZGl0b3JzCi0gKiBmaXhlZCBUaWNrZXQgIzEwMjYgU2tpbnMgcmVmZXJlbmNlZCB3aXRoIDxsaW5rPi10YWdzIGRvbid0IHdvcmsgYW55bW9yZQotICogZml4ZWQgVGlja2V0ICMxMDU5IFtFcXVhdGlvbl0gbG9vc2luZyBmb3JtdWxhIG9uc3VibWl0Ci0gKiBmaXhlZCBUaWNrZXQgIzEwNjAgW0VxdWF0aW9uXSB2YXJpb3VzIHVwZGF0ZXMKLSAqIFtFcXVhdGlvbl0gcHJlc2VydmUgZm9ybXVsYSBvbiByZWxvYWQgaW4gTW96aWxsYQotICogW0VxdWF0aW9uXSB1cGRhdGVkIEFTQ0lJTWF0aE1MLmpzCi0gKiBbU2tpbjpzaWx2YV0gcGFkZGluZyBhbmQgYm9yZGVyIG9uIHRleHRhcmVhIG1ha2UgdGhlIHRleHRtb2RlIHRvbyB3aWRlIAotICogZml4ZWQgVGlja2V0IzEwMDEgRWRpdG9yIGxvYWRzIGEgYnVuY2ggb2YgbnVsbCB1cmxzIGluIGllCi0gKiBmaXhlZCBUaWNrZXQgIzEwNjggW1RyYW5mb3JtSW5uZXJIVE1MXSBuZXdsaW5lcyBhZGRlZCBhZnRlciA8L3NjcmlwdD4KLSAqIGZpeGVkIFRpY2tldCMxMDY5IEVkaXRvciBkb2N1bWVudCBVUkwgcHJlZml4ZWQgdG8gYW55IGhyZWYgdGhhdCBvbmx5IGNvbnNpc3RzIG9mIFVSTCBwYXJhbWV0ZXJzCi0gKiBhZGRlZCBUaGFpIHRyYW5zbGF0aW9uIGZvciBjb3JlCi0gKiBhZGRlZCBjb21wbGV0ZSBQb3J0dWd1ZXNlIEJyYXppbGlhbiB0cmFuc2xhdGlvbgotICogdXBkYXRlZCBsY19wYXJzZSBzY3JpcHQKLSAqIGZpeGVkIFRpY2tldCAjMTA3MSBbRXh0ZW5kZWRGaWxlTWFuYWdlcl0gZXh0ZXJuYWwgaW1hZ2UgVVJMIGltYWdlIGluc2VydGVkIHdpdGggd2lkdGgvaGVpZ2h0IDAsIGFta2luZyBpdCBpbnZpc2libGUKLSAqIGZpeGVkIFRpY2tldCAjMTA3NCBbU3VwZXJDbGVhbl0gdGhyb3dzIHdhcm5pbmdzIGluIFBIUCA1Ci0gKiBmaXhlZCBUaWNrZXQgIzEwNzkgW0R5bmFtaWNDU1NdIGxpc3RzIFhpbmhhIGludGVybmFsIENTUwotICogZml4ZWQgVGlja2V0ICMxMDgwIFNvbWUgcGx1Z2lucyBsZWF2ZSBiZWhpbmQgc3R5bGVzaGVldCBsaW5rcyBpbiBmdWxscGFnZSBtb2RlCi0gKiBmaXhlZCBUaWNrZXQgIzEwODMgQ29udmVydCBVUkxzIHRvIGxpbmtzIC0gRXJyb3IKLSAqIGZpeGVkIFRpY2tldCAjMTA4NCBVUkwgYXV0by1saW5raW5nIChHZWNrbyk6IFVSTHMgd2l0aCB1c2VyOnBhc3N3b3JkQGRvbWFpbi50bGQgZmFsc2VseSByZWNvZ25pemVkIGFzIGVtYWlsIGFkZHJlc3MKLSAqIGZpeGVkIFRpY2tldCAjMTA4NSBVUkwgYXV0by1saW5raW5nIChHZWNrbyk6IElQIG51bWJlcnMgZG9uJ3Qgd29yawotICogZml4ZWQgVGlja2V0ICMxMDgxIENvbnRyb2wgY2hhcmFjdGVyIGlzIG5vdCBiZWluZyByZW1vdmVkIGluc2lkZSBTQ1JJUFQgdGFncyBvciBIRUFEIHdoZW4gc3dpdGNoaW5nIGZyb20gdGV4dG1vZGUgdG8gaHRtbG1vZGUKLSAqIGZpeGVkIFRpY2tldCAjMTA3OCBbSW5zZXJ0SW1hZ2VdIHNwYWNpbmcgYXR0cmlidXRlczogaW5jb25zaXN0ZW50IGJlaGF2aW91ciB3aGVuIGVkaXRpbmcgaW1hZ2UKLSAqIGZpeGVkIFRpY2tldCAjMTA4OSBbQ29sb3IgUGlja2VyXSBMb2NhbGl6ZSBPSyBMYWJlbAotICogZml4ZWQgVGlja2V0ICMxMDkxIFtTYXZlU3VibWl0XSBkb2VzIG5vdCBjb3JyZWN0bHkgc3VibWl0IHZhbHVlIG9mIGNoZWNrYm94ZXMgYW5kIHJhZGlvIGJ1dHRvbnMKLQotWGluaGEgMC45MwotIC0gZml4ZWQgVGlja2V0ICM5NjcgRm9udCBDb2xvciBQaWNrZXIgc3RvcHMgd29ya2luZyBhZnRlciB1c2luZyBvbmUgb2YgSW1hZ2VNYW5hZ2VyLCBFeHRlbmRlZEZpbGVNYW5hZ2VyLCBGdWxsUGFnZSwgb3IgSG9yaXpvbnRhbFJ1bGUKLSAtIGZpeGVkIFRpY2tldCAjOTY1IFdoZW4gc3dpdGNoaW5nIGJldHdlZW4gWGluaGFzIGluIHRoZSBzYW1lIHBhZ2UsIGluIHRleHRtb2RlIHRvb2xiYXIgc3RheXMgZGlzYWJsZWQKLSAtIGZpeHdkIFRpY2tldCAjOTYzIERPTXdhbGsgSUU6IGhlYWQgdGFnIGF0dHJpYnV0ZXMgd2l0aG91dCBxdW90ZXMgYW5kIGNsb3Npbmcgc2xhc2gKLSAtIFRpY2tldCAjOTYyIERPTXdhbGsgTW96aWxsYTogaW1wcm92ZWQgc291cmNlIGluZGVudGF0aW9uCi0gLSBmaXhlZCBUaWNrZXQgIzk1NyBJZiBpdGVtIGluIGluIHhpbmhhX2VkaXRvcnMgaXMgbm90IGEgdGV4dGFyZWE6IHNraXAgZ3JhY2VmdWxseQotIC0gZml4ZWQgVGlja2V0ICM5MDA6IGNhdGNoIGFuIGZhdGFsIGVycm9yIHRoYXQgb2NjdXJlZCBzb21ldGltZXMgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBtb2RlcyBpbiBmdWxscGFnZSBtb2RlIGluIE1vemlsbGEKLSAtIGZpeGVkIFRpY2tldCAjOTY5IERPTXdhbGsgR2Vja286IGxpbmUgYnJlYWtzIHJlbmRlcmVkIGFzIDxicj5zIGluc2lkZSA8cHJlPiBibG9ja3MKLSAtIGZpeGVkIFRpY2tldCAjOTc2IExvYWRpbmcgbWVzc2FnZSBtaXNwbGFjZWQgaW4gSUU3Ci0gLSBmaXhlZCBUaWNrZXQgIzk3NyBUYWJsZU9wZXJhdGlvbnMgdG9vbGJhciBvZmYtcGxhY2UgaW4gZXh0X2V4YW1wbGUuaHRtbAotIC0gZml4ZWQgVGlja2V0ICM5NzggZGVmaW5pbmcgYSBwYWRkaW5nIGZvciA8dGQ+cyBpbiBnbG9iYWwgY3NzIGFmZmVjdHMgWGluaGEgZnJhbWV3b3JrCi0gLSBUaWNrZXQgIzk3OSBpbXByb3ZlIGNoZWNraW5nIGZvciBub24tc3VwcG9ydGVkIGJyb3dzZXJzCi0gLSBmaXhlZCBUaWNrZXQgIzkzNCBTdXBlckNsZWFuIHBsdWdpbiByZXR1cm5zIGp1c3QgcXVvdGF0aW9uIHdoZW4gZXhlY3V0ZWQgb24gbG9jYWxob3N0Ci0gLSBUaWNrZXQgIzkyOSBTYXZlIGNoYW5nZXMgb24gcGFnZSB1bmxvYWQgZml4ZWQgZm9yIE1vemlsbGEgCi0gLSBmaXhlZCBUaWNrZXQgIzk4MCBJbWFnZU1hbmFnZXIgY29sb3IgZm9ybWF0IGJ1ZwotIC0gZml4ZWQgVGlja2V0ICM5ODEgTm8gZG9jdHlwZSBpbiBpZnJhbWUgY29udGVudCBkb2N1bWVudC8gZWRpdG9yIGFsd2F5cyBpbiBxdWlya3MgbW9kZQotIC0gZml4ZWQgVGlja2V0ICM1NDMgU3R5bGlzdCBQYW5lbCBvdmVyZmxvdyBicm9rZW4KLSAtIFRpY2tldCAjOTgzIGFkZGVkIGlkIGZvciBpZnJhbWUKLSAtIGZpeGVkIFRpY2tldCAjOTg0ICFFeHRlbmRlZEZpbGVNYW5hZ2VyIHByb2R1Y2VzIHBocCB3YXJuaW5nCi0gLSBvcHRpbWl6ZWQgaWNvbiBmaWxlIHNpemUKLSAtIGZpeGVkICFKYXZhU2NyaXB0IGVycm9yIGluICFJbWFnZU1hbmFnZXIvIUV4dGVuZGVkRmlsZU1hbmFnZXIgaW1hZ2UgZWRpdG9yCi0gLSBUaWNrZXQgIzkwOCogUHJvbXB0cyBicm9rZW4gaW4gSUU3OiBmaXhlZCBmb3IgRUZNLCAhSW1hZ2VNYW5hZ2VyICYgIVRhYmxlT3BlcmF0aW9ucwotIC0gRml4ZXMgZm9yIFRhYmxlT3BlcmF0aW9ucywgdGlja2V0cyAjODIsICM5MDgqLCAjOTEyIGFuZCAjOTQ3Ci0gLSBmaXhlZCBUaWNrZXQgIzk5OCogd2hpdGVzcGFjZSBhZGRlZCBiZWZvcmUgYW5kL29yIGFmdGVyIGNvbnRlbnQgKGluIG5vbi1mdWxscGFnZSBtb2RlKQotIC0gZml4ZWQgc2xvdyB1bmxvYWRpbmcgaW4gTW96aWxsYQotIC0gRml4IGZvY3VzIHByb2JsZW0gd2hlbiBzd2l0Y2hpbmcgZnJvbSBodG1sIHRvIHd5c2l3eWcgaW4gR2Vja28uIFNlZSB0aWNrZXQgIzkwMC4KLSAtIGZpeGVkIHRvb2xiYXIgZmxvYXRpbmcgaXNzdWUKLSAtIGZpeGVkICMxMDAzIEhUTUwgbGVuZ3RoIGxpbWl0ZWQgdG8gMTAyNCBjaGFyYWN0ZXJzIHdpdGggcGx1Z2luIENoYXJDb3VudGVyCi0gLSBUaWNrZXQgIzEwMDAgbmV3IHB1YmxpYyBtZXRob2RzIGZvciBnZXR0aW5nL3NldHRpbmcgZWRpdG9yIGNvbnRlbnQKLSAtIGZpeGVkICM3MzUgLSBJRSBlYXRpbmcgc2NyaXB0cyBhbmQgY29tbWVudHMgYXQgdGhlIGJlZ2lubmluZyBvZiBwYWdlcy4KLSAtIEFkZGVkIG5ldyBjb25maWcgdmFyaWFibGVzIHRvIHNldCBpZnJhbWUgd2lkdGggaWYgbGVzcyB0aGFuIGVkaXRvciB3aWR0aCAodGlja2V0OjMyMikgYW5kIHNldCBhbGlnbm1lbnQgb2YgdG9vbGJhciBidXR0b25zLgotIC0gYWRkZWQgQmFzcXVlIHRyYW5zbGF0aW9uIGZvciBYaW5oYUNvcmUKLSAtIHByZXZlbnQgYW4gZXJyb3IgaWYgc2VydmVyIGlzIHNldCB0byBwYXJzZSAuanMgZmlsZXMgYXMgUEhQCi0gLSBUaWNrZXQgIzEyNyBwbHVnaW4gSHRtbEVudGl0aWVzOiBFbnRpdGllcy5qcyAgZmlsZSBjb3JydXB0Ci0KLVhpbmhhIDAuOTJiZXRhCi0gLSBmaXhlZCBUaWNrZXQgIzgzMSBzdG9wIGVtcHR5IGFuY2hvcnMgZnJvbSBiZWluZyByZW1vdmVkCi0gLSBNYWtlIGh0bWxhcmVhLmpzIGp1c3QgbG9hZCBYaW5oYUNvcmUuanMgaW5zdGVhZCBvZiBiZWluZyBhIGNvcHkgb2YgaXQuCi0gLSBmaXhlZCBUaWNrZXQgIzQ0NSBUb2dnbGUgVGFibGVCb3JkZXIgZG9lc24ndCB3b3JrIGlmIHRoaXMuZnVsbHBhZ2U9dHJ1ZSBvciB1c2luZyBGdWxsUGFnZSBwbHVnaW4KLSAtIGZpeGVkIFRpY2tldCAjNTUxIHNoYXBlIGFuZCBjb29yZCBhdHRyaWJ1dGVzIG9mIGFyZWEgZWxlbWVudCBhcmUgaWdub3JlZCBieSBJRQotIC0gZml4ZWQgVGlja2V0ICM2NTAgU3BlbGxDaGVja2VyIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggRnVsbFBhZ2UgcGx1Z2luCi0gLSBmaXhlZCBUaWNrZXQgIzgxNiBDaGFyYWN0ZXJNYXAgYW5kIExpc3RUeXBlIHBhbmVsIG1vZGVzIG1ha2UgZWRpdG9yIGp1bXAgdG8gdG9wIGluIElFCi0gLSBmaXhlZCBUaWNrZXQgIzU3MCBjaGFuZ2UgYmVoYXZpb3VyIG9mIGp1c3RpZnkgd2hlbiBhbiBpbWFnZSBpcyBzZWxlY3RlZCB0byBtYWtlIHRoZSBpbWFnZSBmbG9hdCBsZWZ0L3JpZ2h0LCAKLSAgIGNsaWNrIHRoZSBqdXN0aWZ5IGJ1dHRvbiBhZ2FpbiB0byB1bmRvIGl0Ci0gLSBmaXhlZCBUaWNrZXQgIzg5MSBub3NjcmlwdCBjb250ZW50IGdvdCBlc2NhcGVkCi0gLSBmaXhlZCBUaWNrZXQgIzg1NyBGaXJlZm94IGZhaWxzIHRvIGxvYWQgaW4gZnVsbHBhZ2UgbW9kZSB3aGVuIDxsaW5rIC4uPiB0YWcgaW4gd3JvbmcgcGxhY2UuCi0gLSBmaXhlZCBUaWNrZXQgIzg0MSBTcGVsbCBDaGVja2VyIC0gV29uJ3QgcmV0dXJuIHRvIHhpbmhhLgotIC0gZml4ZWQgVGlja2V0ICM5MTQgQWxsIGJ1dHRvbnMgc3RheSBncmV5ICYgdGhpcy5nZXRQYXJlbnRFbGVtZW50IGlzIG5vdCBhIGZ1bmN0aW9uIG1lc3NhZ2Ugd2hlbiBub3QgY2FsbGluZwotICAgWGluaGEubG9hZFBsdWdpbnMoKSBpbiB4aW5oYV9pbml0IGZ1bmN0aW9uCi0gLSBmaXhlZCBUaWNrZXQgIzkxMSBCYWNrZ3JvdW5kIGNvbG9yIGRvZXMgbm90IHdvcmsgaW4gRmlyZWZveAotIC0gZml4ZWQgVGlja2V0ICM5MTIgYW4gZXJyb3IgaXMgdGhyb3duIGluIE1vemlsbGEgd2hlbiBjbGlja2luZyBtZXJnZSBjZWxscyBidXR0b24gYW5kIGZld2VyIHRoYW4gMiBjZWxscyBhcmUgc2VsZWN0ZWQKLSAtIGZpeGVkIFRpY2tldCAjODE2IENoYXJhY3Rlck1hcCBhbmQgTGlzdFR5cGUgcGFuZWwgbW9kZXMgbWFrZSBlZGl0b3IganVtcCB0byB0b3AgaW4gSUUKLSAtIGZpeGVkIFRpY2tldCAjOTE3IGdldEhUTUxXcmFwcGVyIGluIElFIHJlbmRlcnMgYXR0cmlidXRlcyBsaWtlIF9zdHlsaXN0X3VzZWR0b2JlPSJbb2JqZWN0IE9iamVjdF0iCi0gLSBmaXhlZCBUaWNrZXQgIzU1NiBzdHJpcEJhc2VIcmVmIGRpZG4ndCB3b3JrIHdpdGhvdXQgYmFzZUhyZWYgZGVmaW5lZCBleHBsaWNpdGx5LgotIC0gVXBkYXRlIEluc2VydFBpY3R1cmUgcGx1Z2luIFVwZGF0ZQotIC0gZml4ZWQgVGlja2V0ICM5MjEgRUZNIGV4dGVuZGVkIGZpbGUgbWFuYWdlciAtIGlmcmFtZSBoZWlnaHQgcHJvYmxlbSAoSUUpCi0gLSBUaWNrZXQgIzkyMyBjb2xvclBpY2tlciBmYWNlIGxpZnQgJiBsb2NhbGlzYXRpb24KLSAtIGZpeGVkIFRpY2tldCAjOTI0IEVGTSArIEltYWdlTWFuYWdlciByZS10cmFuc2Zvcm1pbmcgb2YgdXJsIHRvIG9yaWdpbmFsIGltYWdlIGFmdGVyIGF1dG9tYXRpYyByZXNpemUgYnJva2VuCi0gLSBUaWNrZXQgIzkwMC0gcmV0YWluIGVkaXRpbmcgcG9zaXRpb24gcG9zaXRpb24gYmV0d2VlbiBtb2RlcwotIC0gZml4ZWQgVGlja2V0ICM5MjggSW1hZ2VNYW5hZ2VyIGZhaWxzIGlmIChhbm90aGVyKSBGaWxlcy5waHAgZXhpc3RzIGluIGluY2x1ZGUgcGF0aAotIC0gZml4ZWQgVGlja2V0ICM5MzUgRUZNIGRlbW9faW1hZ2VzIHBocCB1cGxvYWQgYWxsb3dlZDogcG9zc2libGUgc2VjdXJpdHkgcmlzawotIC0gVGlja2V0ICM5MzkgSmFwYW5lc2UgbGFuZ2FnZSBzdXBwb3J0IAotIC0gZml4ZWQgVGlja2V0ICMzIEhvcml6b250YWwgUnVsZSBTZWxlY3Rpb24KLSAtIFBsdWdpbiBFeHRlbmRlZEZpbGVNYW5hZ2VyOiBhZGRlZCBkb2MgdG8gYWxsb3dlZCB1cGxvYWQgZXh0ZW5zaW9ucwotIC0gUGx1Z2luIFBhc3RlVGV4dCB1cGRhdGUKLSAtIFBsdWdpbiBIdG1sRW50aXRpZXM6IGRlZmF1bHQgcHJlc2V0IGlzby04ODU5LTEKLSAtIGZpeGVkIFRpY2tldCAjOTQ4IElFOiBpbmxpbmUgc3R5bGVzIGFyZSBub3QgcmVuZGVyZWQgYnkgRE9Nd2FsayBnZXRIVE1MKCkKLSAtIFBsdWdpbiBIb3Jpem9udGFsUnVsZSB1cGRhdGUKLSAtIFBsdWdpbiBTYXZlU3VibWl0IHVwZGF0ZQotIC0gUGx1Z2luIExpbmtlciB1cGRhdGUKLSAtIGZpeGVkIFRpY2tldCAjODIzIGVkaXRvciBjb250ZW50cyB3YXMgbm90IHN1Ym1pdHRlZCB3aGVuIHVzaW5nIEphdmFTY3JpcHQgZm9ybS5zdWJtaXQoKSB3aXRob3V0IHByaW9yIGZvcm0ub25zdWJtaXQoKQotIC0gZml4ZWQgVGlja2V0ICM0NTkgYWxsIGJvZHkgYXR0cmlidXRlcyByZW1vdmVkIGluIGZ1bGwgcGFnZSBtb2RlIGluIEZpcmVGb3gKLSAtIF9lZGl0b3JfdXJsIGlzIG5vdyBjb252ZXJ0ZWQgdG8gYWJzb2x1dGUgaWYgaXQgaXMgcmVsYXRpdmUuIAotIC0gZml4ZWQgVGlja2V0ICM1OTQgSUU6IGluc2VydEhUTUwoKSBpbnNlcnRzIEhUTUwgb3V0c2lkZSBlZGl0b3Igd2hlbiBlZGl0b3IgaXMgbm90IGZvY3Vzc2VkCi0gLSBUaWNrZXQgIzk1NCBGdWxsU2NyZWVuIG1vZGUgY2FuIG5vdyBiZSBjYWxsZWQgcHJvZ3JhbW1hdGljYWxseSBvciBvbiBzdGFydHVwIHdpdGggb3Igd2l0aG91dCBidXR0b24KLSAtIGZpeGVkIFRpY2tldCAjMzIxIEZ1bGxTY3JlZW4gOiBzZWxlY3QgZWxlbWVudHMgc2hvdyB0aHJvdWdoIGluIElFNiAKLSAtIGZpeGVkIFRpY2tldCAjOTUzIFN0YXR1c2JhciBoYXMgdWdseSB3aGl0ZSBnYXAgYXQgdGhlIGJvdHRvbSB3aGVuIHN3aXRjaGluZyBiYWNrIGZyb20gZnVsbCBzY3JlZW4gaW4gSUUgCi0gLSBmaXhlZCBUaWNrZXQgIzk1MiBGdWxsU2NyZWVuOiBzY3JvbGxiYXJzIGRvbid0IGRpc2FwcGVhciBpbiBJRSBpbiBRdWlya3NNb2RlCi0gLSBmaXhlZCBUaWNrZXQgIzYwMyBQb3BvcCBEaWFsb2cgSGVpZ2h0IHByb2JsZW1zCi0gLSBmaXhlZCBUaWNrZXQgIzk1NSBET013YWxrIGdldEhUTUwgb3V0cHV0cyBlbXB0eSBhdHRyaWJ1dGUgd2l0aCB2YWx1ZSAidHJ1ZSIgaW5zdGVhZCBvZiBhdHRyaWJ1dGUgbmFtZSBhbmQgc29tZSBhcmUgc2tpcHBlZCBhdCBhbGwKLSAKLVhpbmhhIDAuOTFiZXRhCi0gLSBjaGFuZ2VkIG5hbWVzcGFjZSBmcm9tIEhUTUxBcmVhIHRvIFhpbmhhCi0gLSB0aGUgY29yZSBmaWxlIGlzIG5vdyBuYW1lZCBYaW5oYUNvcmUuanMgaW5zdGVhZCBvZiBodG1sYXJlYS5qcywKLSAgIHBsZWFzZSBjaGFuZ2UgeW91ciBwYWdlcyBhY2NvcmRpbmdseSAodGhlIGh0bWxhcmVhLmpzIHdpbGwgYmUgcmVtb3ZlZCEpCi0gLSB0aGUgY29sb3IgcGlja2VyIHNjcmlwdCBpcyBub3cgbG9hZGVkIG9uIGRlbWFuZCB0byByZWR1Y2UgaW5pdGlhbCBsb2FkaW5nIHRpbWUKLSAKLVhpbmhhIDAuOWJldGEKLVRoaXMgZXF1YWxzIFhpbmhhIHJldmlzaW9uIDYzNSBvZiBKYW4gMTEgMjAwNwotIC0gQWxsIEphdmFTY3JpcHQgZmlsZXMgb3ZlciAya2IgaGF2ZSBiZWVuIGNvbXByZXNzZWQgdXNpbmcgdGhlIGRvam8gSmF2YVNjcmlwdCBjb21wcmVzc29yCi0gLSBBbGwgZ2lmcyBoYXZlIGJlZW4gb3B0aW1pemVkIHVzaW5nIFRyb3V0J3MgR0lGIE9wdGltaXplciB2ZXJzaW9uIDIuMwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9ibHVlLWxvb2svc2tpbi5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvc2tpbnMvYmx1ZS1sb29rL3NraW4uY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGQ0NzhjLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9ibHVlLWxvb2svc2tpbi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLmh0bWxhcmVhIC50b29sYmFyLCAuaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvbgotewotICBiYWNrZ3JvdW5kLWNvbG9yOiNmN2Y4ZmQ7Ci19Ci0KLS5odG1sYXJlYSAudG9vbGJhclJvdwotewotICBtYXJnaW4tdG9wOjJweDsKLSAgbWFyZ2luLWJvdHRvbToycHg7Ci0gIGJvcmRlcjoxcHggZG90dGVkICNERURFREU7Ci0gIHBhZGRpbmc6MnB4OwotICAtbW96LWJvcmRlci1yYWRpdXM6M3B4OwotICBtYXJnaW46NHB4OwotICBoZWlnaHQ6MjVweDsKLX0KLQotLmh0bWxhcmVhIC50b29sYmFyIC5idXR0b24KLXsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7Ci0gIHdpZHRoOjIwcHg7Ci0gIGhlaWdodDoyMHB4OwotICBwYWRkaW5nOjBweDsKLSAgYm9yZGVyOjFweCBzb2xpZCAjZjdmOGZkOwotfQotCi0uYnV0dG9uSW1hZ2VDb250YWluZXIKLXsKLSAgcG9zaXRpb246cmVsYXRpdmU7Ci0gIGxlZnQ6MXB4OwotICB0b3AgOjFweDsKLX0KLQotLmh0bWxhcmVhIC50b29sYmFyIC5zZXBhcmF0b3IgewotICBtYXJnaW46MHB4OwotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoc2VwYXJhdG9yLmdpZik7Ci0gIGJvcmRlcjoxcHggI2Y3ZjhmZDsKLSAgd2lkdGg6ICAgN3B4OwotICBoZWlnaHQ6IDIwcHg7Ci0gIHBhZGRpbmc6IDBweDsKLX0KLQotLmh0bWxhcmVhIC50b29sYmFyIGEuYnV0dG9uOmhvdmVyCi17Ci0gIGJvcmRlcjogMXB4IHNvbGlkOwotICBib3JkZXItY29sb3I6IHdoaXRlICNDQ0MgI0NDQyB3aGl0ZTsKLX0KLQotLmh0bWxhcmVhIC50b29sYmFyIGEuYnV0dG9uRGlzYWJsZWQ6aG92ZXIKLXsKLSAgYm9yZGVyLWNvbG9yOiAjZjdmOGZkOwotfQotCi0uaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvbi5idXR0b25BY3RpdmUsCi0uaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvbi5idXR0b25QcmVzc2VkCi17Ci0gIGJvcmRlcjogMXB4IHNvbGlkOwotICBib3JkZXItY29sb3I6ICNDQ0Mgd2hpdGUgd2hpdGUgI0NDQzsKLX0KLQotLmh0bWxhcmVhIC5zdGF0dXNCYXIgewotICBib3JkZXItY29sb3I6ICNDQ0Mgd2hpdGUgd2hpdGUgI0NDQzsKLSAgcGFkZGluZzogMHB4OwotICBoZWlnaHQ6MjBweDsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7Ci0gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKLSAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjhmZDsKLSAgY29sb3I6IEJ1dHRvblRleHQ7Ci0gIGZvbnQ6IDExcHggaGVsdmV0aWNhLGFyaWFsLHNhbnMtc2VyaWY7Ci19Ci0KLS5odG1sYXJlYSAuc3RhdHVzQmFyIC5zdGF0dXNCYXJXaWRnZXRDb250YWluZXIKLXsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7Ci0gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKLSAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjhmZDsKLX0KLQotLmh0bWxhcmVhIC5zdGF0dXNCYXIgLnN0YXR1c0JhclRyZWUKLXsKLSAgZGlzcGxheTpibG9jazsKLSAgbWFyZ2luOiAzcHg7Ci19Ci0KLS5odG1sYXJlYSAuc3RhdHVzQmFyIC5zdGF0dXNCYXJUcmVlIGEKLXsKLSAgcGFkZGluZzogMnB4IDVweDsKLSAgY29sb3I6ICMwMGY7Ci0gIHRleHQtZGVjb3JhdGlvbjpub25lOwotfQotCi0uaHRtbGFyZWEgLnBhbmVsIGgxCi17Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnYnV0dG9uLWJhY2tncm91bmQucG5nJyk7Ci0gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKLSAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjhmZDsKLX0KLS5kaWFsb2cgewotICBiYWNrZ3JvdW5kLWNvbG9yOiNmN2Y4ZmQ7Ci19Ci0uZGlhbG9nIC50aXRsZSB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybChidXR0b24tYmFja2dyb3VuZC5wbmcpOwotfSAgCi0uZGlhbG9nIGJ1dHRvbnsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7Ci19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9SRUFETUVfVFJBTlNMQVRPUlMuVFhUIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvUkVBRE1FX1RSQU5TTEFUT1JTLlRYVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTJiYzcxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvUkVBRE1FX1RSQU5TTEFUT1JTLlRYVApAQCAtMCwwICsxLDE2NiBAQAorVHJhbnNsYXRpbmcgWGluaGEKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0hlbGxvIHlvdSBtdWx0aS1saW5ndWFsIHBlcnNvbiB5b3UsIHNvIHlvdSB3b3VsZCBsaWtlIHRvIGhlbHAgdHJhbnNsYXRlIFhpbmhhCitvciBjcmVhdGUgeW91ciBvd24gc3BlY2lhbCB0cmFuc2xhdGlvbiB0byB1c2U/CisKK0l0J3MgcmVhbGx5IGVhc3khCisKK0luIHRoZSBYaW5oYSBkaXN0cmlidXRpb24geW91IHdpbGwgZmluZCBzb21lIGZpbGVzIHVuZGVyIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5CisKKyAgIC9sYW5nL21lcmdlZC8qLmpzCisKK3lvdSBjYW4gc2VlIHRoYXQgdGhlcmUgaXMgYSBmaWxlIGZvciBldmVyeSBjdXJyZW50bHkgZXhpc3RpbmcgdHJhbnNsYXRpb24gdGhlcmUKK2FuZCBhbHNvIG9uZSBjYWxsZWQgIl9fbmV3X18uanMiLiAgWW91IHdpbGwgYWxzbyBzZWUgdGhlcmUgYXJlIG90aGVyIGxhbmcgZmlsZXMgCithcm91bmQgdGhlIHBsYWNlLCB0aGV5IGFyZSB1c2VkIG9ubHkgd2hlbiBub3QgdXNpbmcgYSBtZXJnZWQgZmlsZSwgeW91IGRvbid0IG5lZWQKK3RvIHRvdWNoIHRoZW0sIGp1c3Qgd29yayBvbiAvbGFuZy9tZXJnZWQvKi5qcyAhCisKK0lmIHlvdXIgbGFuZ3VhZ2UgaXMgdGhlcmUgYWxyZWFkeSwgc2ltcGx5IG9wZW4gdGhhdCAuanMgZmlsZSBpbiB5b3VyIGZhdm91cml0ZQorVVRGLTggY29tcGxpYW50IHRleHQgZWRpdG9yLgorCitJZiB5b3VyIGxhbmd1YWdlIGlzIG5vdCB0aGVyZSwgY29weSB0aGUgX19uZXdfXy5qcyBmaWxlIGFuZCBjcmVhdGUgYSBuZXcgb25lIGNhbGxlZAorW3lvdXJsYW5ndWFnZWNvZGVdLmpzLCBmb3IgZXhhbXBsZSBpZiB5b3UgYXJlIHRyYW5zbGF0aW5nIGludG8gS2xpbmdvbiwgcGVyaGFwcworImtsLmpzIiBhbmQgdGhlbiBvcGVuIGl0IGluIHlvdXIgZmF2b3VyaXRlIFVURi04IGNvbXBsaWFudCB0ZXh0IGVkaXRvci4KKworUGxlYXNlIG5vdGUgdGhhdCBhbGwgdHJhbnNsYXRpb24gaXMgaW4gVVRGLTggRW5jb2RpbmcsIGRvIG5vdCB0cnkgdG8gdXNlIG90aGVyIAorY2hhcmFjdGVyIGVuY29kaW5ncyAoY2hhcmFjdGVyIHNldHMpLCBpdCdzIG5vdCBnb2luZyB0byBlbmQgd2VsbC4KKworVG8gYWN0dWFsbHkgdGVzdCBvciB1c2UgeW91ciB0cmFuc2xhdGlvbiwgaW4geW91ciBjb2RlIHJpZ2h0IGJlZm9yZSB5b3UgbG9hZCAKK1hpbmhhIHNwZWNpZnkgdGhlIGxhbmd1YWdlIGFuZCBmaWxlIGxpa2UgdGhpcy4uLgorCisgICAgPCEtLSBTZXQgTGFuZ3VhZ2UgVG8gS2xpbmdvbiAtLT4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdD4KKyAgICAgIF9lZGl0b3JfbGFuZyAgICAgICAgICAgICAgPSAna2wnOworICAgICAgX2VkaXRvcl9sYW5nX21lcmdlZF9maWxlICA9ICcveGluaGEvbGFuZy9tZXJnZWQva2wuanMnOworICAgIDwvc2NyaXB0PgorICAgIAorICAgIDwhLS0gQW5kIExvYWQgWGluaGEgQXMgVXN1YWwgLS0+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vWGluaGFDb3JlLmpzIj48L3NjcmlwdD4KKwordGhhdCdzIGl0LCB0cnkgb3V0IFhpbmhhIGFuZCB5b3VyIGxhbmd1YWdlIGZpbGUgc2hvdWxkIHByb3ZpZGUgdGhlIHRyYW5zbGF0aW9ucy4KKworV2hlbiB5b3UgaGF2ZSBtYWRlIHlvdXIgdHJhbnNsYXRpb24gZmlsZSBhbmQgd291bGQgbGlrZSB0byBzdWJtaXQgaXQKK3RvIFhpbmhhIGZvciBpbmNsdXNpb24gaW4gYSBmdXR1cmUgZGlzdGlidXRpb24gb2YgWGluaGEsIHBsZWFzZSBqdXN0IG9wZW4gYSAKK3RpY2tldCBhdCBodHRwOi8vdHJhYy54aW5oYS5vcmcvIGFuZCBhdHRhY2ggeW91ciBuZXcgb3IgaW1wcm92ZWQgbGFuZ3VhZ2UgZmlsZSwgCitiZSBzdXJlIHRvIGxldCB1cyBrbm93IHlvdXIgZGV0YWlscyB0byBhZGQgdGhlIHRoZSBjb250cmlidXRvcnMgbGlzdCBiZWxvdyEKKworVG9vbHMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0luIHRoZSBjb250cmliIGRpcmVjdG9yeSB0aGVyZSBhcmUgYSBmZXcgc2NyaXB0cyB3cml0dGVuIGluIFBIUCB0byBoYW5kbGUgdGhlIAordHJhbnNsYXRpb24gc2V0dXAgdGFza3MuCisKK2xjX3BhcnNlX3N0cmluZ3MucGhwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNjcmlwdCBnb2VzIHRocm91Z2ggYWxsIHRoZSBYaW5oYSBmaWxlcywgamF2YXNjcmlwdCwgcGhwLCBodG1sLCBhbmQgcHVsbHMKK291dCB0aGUgc3RyaW5ncyB3aGljaCBzaG91bGQgZ2V0IHRyYW5zbGF0ZWQuICBUaGVzZSBhcmUgd3JpdHRlbiBpbnRvIGxjX2Jhc2UuanMKK3RyYW5zbGF0aW9uIGZpbGVzIHNwcmVhZCB0aHJvdWdoIHRoZSBzeXN0ZW0sIGVnIC9sYW5nL2xjX2Jhc2UuanMsIAorL21vZHVsZXMvLi4uL2xhbmcvbGNfYmFzZS5qcywgL3BsdWdpbnMvLi4uL2xhbmcvbGNfYmFzZS5qcyBhbmQgc28gZm9ydGguCisKK2xjX2Jhc2UuanMgZmlsZXMgZG8gbm90IGdldCBjb21taXR0ZWQgdG8gdGhlIFN1YnZlcnNpb24gcmVwb3NpdG9yeSB0aGV5IGFyZSAKK2p1c3QgdGVtcG9yYXJ5IHdvcmtpbmcgZmlsZXMuCisKK2xjX2NyZWF0ZV9tZXJnZWRfZmlsZS5waHAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc2NyaXB0IHRha2VzIGFsbCB0aGUgbGNfYmFzZS5qcyBmaWxlcyBhbmQgdGhlIGV4aXN0aW5nIGxhbmcgZmlsZXMgZm9yIGEgZ2l2ZW4KK2xhbmd1YWdlIGFuZCBjcmVhdGVzIGEgbWVyZ2VkIGxhbmd1YWdlIGZpbGUsIGZvciBleGFtcGxlCisKKyAgICBwaHAgY29udHJpYi9sY19jcmVhdGVfbWVyZ2VkX2ZpbGUucGhwIGZyIC90bXAvZnIuanMKKworY3JlYXRlcyB0aGUgRnJlbmNoIHRyYW5zbGF0aW9uIG1lcmdlZCBmaWxlIC90bXAvZnIuanMKKworTm90ZSB0aGF0IGV4aXN0aW5nIG1lcmdlZCBmaWxlcyBhcmUgbm90IGNvbnN1bHRlZCBkdXJpbmcgdGhpcyBwcm9jZXNzLgorCitUcmFuc2xhdG9ycyBjYW4gdGhlbiB3b3JrIG9uIHRoZSBtZXJnZWQgZmlsZSB0byBkbyB0aGVpciB0cmFuc2xhdGlvbiB3b3JrLgorCitUbyBtYWtlIHRoaW5ncyBlYXN5IHRoZSBgbGFuZy9tZXJnZWQvYCBkaXJlY3RvcnkgY29udGFpbnMgcHJlLWdlbmVyYXRlZCBtZXJnZWQgCitsYW5ndWFnZSBmaWxlcyBvZiBlYWNoIGxhbmd1YWdlIG9mIHRoZSByZWxlYXNlLCBhZ2FpbiB0aGVzZSBhcmUgbm90IGNvbW1pdHRlZAordG8gdGhlIHN1YnZlcnNpb24gcmVwb3NpdG9yeS4KKworSWYgeW91IHJ1biB0aGlzIHNjcmlwdCB3aXRob3V0IGFyZ3VtZW50cyBpdCB3aWxsIGdpdmUgeW91IHNvbWUgaGVscCBzaG93aW5nIGhvdworeW91IGNhbiBnZW5lcmF0ZSBhbGwgdGhlIG1lcmdlZCBsYW5ndWFnZSBmaWxlcyBhdCBvbmNlLCB0aGlzIGlzIGRvbmUgYXMgcGFydCBvZgordGhlIHJlbGVhc2UgcHJvY2Vzcy4KKworbGNfc3BsaXRfbWVyZ2VkX2ZpbGUucGhwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNjcmlwdCB0YWtlcyBhIG1lcmdlZCBmaWxlIGFuZCBzcGxpdHMgaXQgaW50byB0aGUgY29uc3RpdHVlbnQgbGFuZyBmaWxlcwordGhlc2UgZmlsZXMgYXJlIHdyaXR0ZW4gaW50byBhIHRlbXBvcmFyeSBkaXJlY3Rvcnkgc3RydWN0dXJlIHNvIHRoYXQgeW91IGNhbiAKK3VzZSBhIGRpZmYvbWVyZ2UgdG9vbCBpZiB5b3Ugd2lzaCB0byBjb21wYXJlIHRoZW0gcmF0aGVyIHRoYW4gYWN0dWFsbHkgY29weWluZyAKK3RoZW0gaW50byBwbGFjZS4gIEZvciBleGFtcGxlLAorCisgIHBocCBjb250cmliL2xjX3NwbGl0X21lcmdlZF9maWxlLnBocCAvdG1wL2ZyLmpzIGZyCisKK3dpbGwgY3JlYXRlIGEgZGlyZWN0b3J5IHN0cnVjdHVyZSAoaXQgd2lsbCBiZSBwcmludGVkIGF0IGNvbXBsZXRpb24pIGluIC90bXAsIAorCisgIC90bXAvc29tZXRoaW5nLXVuaXF1ZS1oZXJlL2xhbmcvZnIuanMKKyAgL3RtcC9zb21ldGhpbmctdW5pcXVlLWhlcmUvbW9kdWxlcy8uLi4vbGFuZy9mci5qcworICAvdG1wL3NvbWV0aGluZy11bmlxdWUtaGVyZS9wbHVnaW5zLy4uLi9sYW5nL2ZyLmpzCisgIC90bXAvc29tZXRoaW5nLXVuaXF1ZS1oZXJlL3Vuc3VwcG9ydGVkX3BsdWdpbnMvLi4uL2xhbmcvZnIuanMKKwordGhlIGRpcmVjdG9yeSBhbmQgc29tZSBpbnN0cnVjdGlvbnMgZm9yIGVhc2lseSAiaW5zdGFsbGluZyIgdGhlIGdlbmVyYXRlZCBmaWxlcworaXMgcHJpbnRlZC4KKworQ29udHJpYnV0b3JzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitUaGUgZm9sbG93aW5nIHBlb3BsZSBhcmUgdGhhbmtlZCBmb3IgcHJvdmlkaW5nIGFuZCB1cGRhdGluZyB0cmFuc2xhdGlvbnMhCisKK2NoOiBTYW11ZWwgU3RvbmUsIGh0dHA6Ly9zdG9uZW1pY3JvLmNvbS8KK2N6OiBKaXJpIEzDtncsIDxqaXJpbG93QGppcmlsb3cuY29tPgorZGE6IEJqYXJrZSBNLiBMYXVyaWRzZW4sIGh0dHA6Ly93d3cuZGV0YWlseC5kaywgZGV0YWlseEBnbWFpbC5jb20KK2RhOiByZW5lLCA8cmVuZUBsYWVya2UubmV0PgorZGE6IFN0ZWVuIFPDuG5kZXJ1cCwgPHN0ZWVuQHNvZW5kZXJ1cC5jb20+CitkZTogQnJveHgsIDxicm94eEBicm94eC5jb20+CitkZTogSG9sZ2VyIEhlZXMsIDxoaGVlc0BzeXN0ZW1jb25jZXB0LmRlPiwgaHR0cDovL3d3dy5zeXN0ZW1jb25jZXB0LmRlCitkZTogTWloYWkgQmF6b24sIGh0dHA6Ly9keW5hcmNoLmNvbS9taXNob28KK2RlOiBSYWltdW5kIE1leWVyIHhpbmhhQHJheS1vZi1saWdodC5vcmcKK2RlOiBzdmVuIHNjaG9tYWNrZXIsIGh0dHA6Ly93d3cuaGlsb3BlLmRlLCBtYWlsQGhpbG9wZS5kZQorZGU6IFVkbyBTY2htYWwgKGdvY2hlciksIGh0dHA6Ly93d3cuc2NoYWZmcmF0aC1uZXVlbWVkaWVuLmRlLywgdWRvLnNjaG1hbEB0LW9ubGluZS5kZQorZWU6IE1hcnRpbiBSYWllLCA8YWxiZXJ0dmlsbEBob3QuZWU+CitlbDogRGltaXRyaXMgR2xlem9zLCBkaW1pdHJpc0BnbGV6b3MuY29tCitlczogRGVyaWNrIExlb255IDxkbGVvbnlAZ21haWwuY29tPgorZXM6IG1pY2hhZWwgSGF1cHRtbm4gKG1oYXVwdG1hNzMpICwgaHR0cDovL3d3dy5hemFob3N0LmNvbS8sIG1pZ3VlbEBhemFsb3JlYS5jb20KK2V1OiBVbmtvd24KK2ZhOiBVbmtub3duCitmaTogVW5rbm93bgorZnI6IEtldmluIEh1cHBlcnQgLSBDcsOpYWJpbGlzLCBodHRwOi8vd3d3LmNyZWFiaWxpcy5jb20sIGtldmluLmh1cHBlcnRAd29ybGRvbmxpbmUuZnIKK2hlOiBMaXJvbiBOZXdtYW4sIGh0dHA6Ly93d3cuZWVzaC5uZXQsIDxwbGFzdGlzaCBhdCB1bHRpbmV0IGRvdCBvcmc+CitoZTogTWloYWkgQmF6b24sIGh0dHA6Ly9keW5hcmNoLmNvbS9taXNob28KK2h1OiBNaWtsw7NzIFNvbW9neWksIDxzb21vZ3lpbmVAdm5ldC5odT4KK2l0OiBGYWJpbyBSb3RvbmRvIDxmYWJpb0Byb3RvbmRvLml0PgoraXQ6IE1hdHRpYSBMYW5kb25pLCBodHRwOi8vd3d3LndlYnByZXNpZGVudC5vcmcvCitpdDogVWRvIFNjaG1hbCAoZ29jaGVyKSwgaHR0cDovL3d3dy5zY2hhZmZyYXRoLW5ldWVtZWRpZW4uZGUvLCB1ZG8uc2NobWFsQHQtb25saW5lLmRlCitqYTogVW5rbm93bgorbHQ6IEphcm9zbGF2IMWgYXRrZXZpxI0sIDxqYXJvQGFrbC5sdD4KK2x2OiBNaWhhaSBCYXpvbiwgaHR0cDovL2R5bmFyY2guY29tL21pc2hvbworbmI6IEtpbSBTdGVpbmhhdWcsICBodHRwOi8vd3d3LnN0ZWluaGF1Zy5jb20vLCBodHRwOi8vd3d3LmVhc3ljbXMubm8vLCBraW1AZWFzeWNtcy5ubworbmI6IE1paGFpIEJhem9uLCA8bWloYWlfYmF6b25AeWFob28uY29tPgorbmI6IEjDpXZhcmQgV2lndGlsIDxoYXZhcmR3QGV4dGVuZC5ubz4KK25iOiBzZXM8c2VzQG9ubGluZS5ubz4KK25sOiBBLkggdmFuIGRlbiBCcm9layAgaHR0cDovL3d3dy5rb250YWt0Zm0ubmwsIHRvbmJyb2VrQGtvbnRha3RmbS5ubAorbmw6IEFydGh1ciBCb2dhYXJ0IGEuYm9nYWFydEBvbmVoaXBwby5vcmcKK25sOiBIb2xnZXIgSGVlcywgPGhoZWVzQHN5c3RlbWNvbmNlcHQuZGU+CitubDogTWFhcnRlbiBNb2xlbnNjaG90LCBtYWFydGVuQG5yZ21tLm5sCitubDogTWljaGVsIFdlZWdlZXJpbmsgKGluZm9AbW1jLXNob3AubmwpLCBodHRwOi8vbW1jLXNob3AubmwKK25sOiBNaWhhaSBCYXpvbiwgaHR0cDovL2R5bmFyY2guY29tL21pc2hvbworbmw6IFJhaW11bmQgTWV5ZXIgeGluaGFAcmF5LW9mLWxpZ2h0Lm9yZworbmw6IFVkbyBTY2htYWwgKGdvY2hlciksIGh0dHA6Ly93d3cuc2NoYWZmcmF0aC1uZXVlbWVkaWVuLmRlLywgdWRvLnNjaG1hbEB0LW9ubGluZS5kZQorcGw6IEtyenlzenRvZiBLb3Rvd2ljeiwgaHR0cDovL3d3dy53ZWIuZXNrb3QucGwsIGh0dHA6Ly93d3cuZXNrb3Qua3Jha293LnBsL3BvcnRmb2xpby8sIGtvdG9Ad2Vid29ya2Vycy5wbCwga290bzFzYUBvMi5wbAorcHRfYnI6IENhdSBndWFuYWJhcmEgKGluZGVwZW5kZW50IGRldmVsb3BlciksIGNhdWdiQGliZXN0LmNvbS5icgorcHRfYnI6IE1hcmNpbyBCYXJib3NhLCA8bWFyY2lvQG1wZy5jb20uYnI+LCBodHRwOi8vd3d3Lm1wZy5jb20uYnIvCitybzogTWloYWkgQmF6b24sIGh0dHA6Ly9keW5hcmNoLmNvbS9taXNob28KK3J1OiBBbmRyZWkgQmxhZ29yYXp1bW92LCBhQGZuci5ydQorcnU6IEhlbGVuIE1pdGtpbmEgKHplcm9rKSA8ZS5taXRraW5hIGF0IGdtYWlsPgorcnU6IFl1bHlhIFNodHlyeWFrb3ZhLCA8eXVseWFAdmRjb20ucnU+CitzaDogTGp1YmEgUmFua292acSHLCBodHRwOi8vd3d3LnJhbmtvdmljLm5ldC9sanViYXIKK3NpOiBUb21heiBLcmVnYXIsIHhfdG9tb194QGVtYWlsLnNpCitzcjogTGp1YmEgUmFua292acSHLCBodHRwOi8vd3d3LnJhbmtvdmljLm5ldC9sanViYXIKK3N2OiBFcmlrIERhbMOpbiwgPGRhbGVuQGpwbC5zZT4KK3RoOiBTdWNoaW4gUHJhc29uZ2J1bmRpdCwgPHN1Y2hpbkBqb29sc29mdC5jb20+Cit0cjogU2VyZGFyIERvbXVyY3VrLCA8c2VyZGFyLmRvbXVyY3VrQGttLmNvLmF0PiwgaHR0cDovL3d3dy5rbS5jby5hdC8KK3ZuOiBOZ3V54buFbiDEkMOsbmggTmFtLCA8aG5jcnlwdG9sb2dpc3RAeWFob28uY29tPgoremhfY246IERhdmUgTG8sIGRsb0BpbnRlcmFjdGl2ZXRvb2xzLmNvbQorYjU6IERhdmUgTG8sIGRsb0BpbnRlcmFjdGl2ZXRvb2xzLmNvbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL1ZFUlNJT04uVFhUIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvVkVSU0lPTi5UWFQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVjZmQ0NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL1ZFUlNJT04uVFhUCkBAIC0wLDAgKzEgQEAKK3hpbmhhLTEuNS4xCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9YaW5oYS5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9YaW5oYS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYzNzhkYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL1hpbmhhLmNzcwpAQCAtMCwwICsxLDM5MiBAQAorLmh0bWxhcmVhIHsgYmFja2dyb3VuZDogI2ZmZjsgfQorLmh0bWxhcmVhIHRkIHsgbWFyZ2luOjAgIWltcG9ydGFudDtwYWRkaW5nOjAgIWltcG9ydGFudDsgfQorCisuaHRtbGFyZWEgLnRvb2xiYXJSb3cgeworICB3aWR0aDoxcHg7Cit9CisKKy5odG1sYXJlYSAudG9vbGJhciB7CisgIGN1cnNvcjogZGVmYXVsdDsKKyAgYmFja2dyb3VuZDogQnV0dG9uRmFjZTsKKyAgcGFkZGluZzogM3B4OworICBib3JkZXI6IDFweCBzb2xpZDsKKyAgYm9yZGVyLWNvbG9yOiBCdXR0b25IaWdobGlnaHQgQnV0dG9uU2hhZG93IEJ1dHRvblNoYWRvdyBCdXR0b25IaWdobGlnaHQ7Cit9CisuaHRtbGFyZWEgLnRvb2xiYXIgdGFibGUgeyBtYXJnaW46IDA7IGZvbnQtZmFtaWx5OiBUYWhvbWEsIFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMXB4OyB9CisuaHRtbGFyZWEgLnRvb2xiYXIgaW1nIHsgYm9yZGVyOiBub25lOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB9CisuaHRtbGFyZWEgLnRvb2xiYXIgLmxhYmVsIHsgcGFkZGluZzogMCAzcHg7IH0KKworLmh0bWxhcmVhIC50b29sYmFyIC5idXR0b24geworICBiYWNrZ3JvdW5kOiBCdXR0b25GYWNlOworICBjb2xvcjogQnV0dG9uVGV4dDsKKyAgYm9yZGVyOiAxcHggc29saWQgQnV0dG9uRmFjZTsKKyAgcGFkZGluZzogMXB4OworICBtYXJnaW46IDA7CisgIHdpZHRoOiAxOHB4OworICBoZWlnaHQ6IDE4cHg7Cit9CisuaHRtbGFyZWEgLnRvb2xiYXIgYS5idXR0b246aG92ZXIgeworICBib3JkZXI6IDFweCBzb2xpZDsKKyAgYm9yZGVyLWNvbG9yOiBCdXR0b25IaWdobGlnaHQgQnV0dG9uU2hhZG93IEJ1dHRvblNoYWRvdyBCdXR0b25IaWdobGlnaHQ7Cit9CisuaHRtbGFyZWEgLnRvb2xiYXIgYS5idXR0b25EaXNhYmxlZDpob3ZlciB7CisgIGJvcmRlci1jb2xvcjogQnV0dG9uRmFjZTsKK30KKy5odG1sYXJlYSAudG9vbGJhciAuYnV0dG9uQWN0aXZlLAorLmh0bWxhcmVhIC50b29sYmFyIC5idXR0b25QcmVzc2VkCit7CisgIC8qcGFkZGluZzogMnB4IDAgMCAycHg7Ki8gcGFkZGluZzowOworICBib3JkZXI6IDFweCBzb2xpZDsKKyAgYm9yZGVyLWNvbG9yOiBCdXR0b25TaGFkb3cgQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25TaGFkb3c7Cit9CisuaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvblByZXNzZWQgeworICBiYWNrZ3JvdW5kOiBCdXR0b25IaWdobGlnaHQ7Cit9CisuaHRtbGFyZWEgLnRvb2xiYXIgLmluZGljYXRvciB7CisgIHBhZGRpbmc6IDAgM3B4OworICBvdmVyZmxvdzogaGlkZGVuOworICB3aWR0aDogMjBweDsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBjdXJzb3I6IGRlZmF1bHQ7CisgIGJvcmRlcjogMXB4IHNvbGlkIEJ1dHRvblNoYWRvdzsKK30KKworLmh0bWxhcmVhIC50b29sYmFyIC5idXR0b25EaXNhYmxlZCBpbWcgeworICBmaWx0ZXI6IGdyYXkoKSBhbHBoYShvcGFjaXR5ID0gMjUpOworICAtbW96LW9wYWNpdHk6IDAuMjU7CisgIG9wYWNpdHk6IDAuMjU7Cit9CisKKy5odG1sYXJlYSAudG9vbGJhciAuc2VwYXJhdG9yIHsKKyAgLypwb3NpdGlvbjogcmVsYXRpdmU7Ki8KKyAgbWFyZ2luOjAgM3B4OworICBib3JkZXItbGVmdDogMXB4IHNvbGlkIEJ1dHRvblNoYWRvdzsKKyAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgQnV0dG9uSGlnaGxpZ2h0OworICB3aWR0aDogMDsKKyAgaGVpZ2h0OiAxOHB4OworICBwYWRkaW5nOiAwOworfQorCisuaHRtbGFyZWEgLnRvb2xiYXIgLnNwYWNlIHsgd2lkdGg6IDVweDsgfQorCisuaHRtbGFyZWEgLnRvb2xiYXIgc2VsZWN0LCAuaHRtbGFyZWEgLnRvb2xiYXIgb3B0aW9uIHsgZm9udDogMTFweCBUYWhvbWEsVmVyZGFuYSxzYW5zLXNlcmlmO30KKworLmh0bWxhcmVhIC50b29sYmFyIHNlbGVjdCwKKy5odG1sYXJlYSAudG9vbGJhciBzZWxlY3Q6aG92ZXIsCisuaHRtbGFyZWEgLnRvb2xiYXIgc2VsZWN0OmFjdGl2ZSB7IAorICBwb3NpdGlvbjpyZWxhdGl2ZTsKKyAgdG9wOi0ycHg7CisgIG1hcmdpbi1ib3R0b206LTJweDsKKyAgY29sb3I6IEJ1dHRvblRleHQ7Cit9CisKKy5odG1sYXJlYSBpZnJhbWUueGluaGFfaWZyYW1lLCAuaHRtbGFyZWEgdGV4dGFyZWEueGluaGFfdGV4dGFyZWEKK3sKKyAgYm9yZGVyOiBub25lOyAvKjFweCBzb2xpZDsqLworfQorCisuaHRtbGFyZWEgLnN0YXR1c0JhciB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworICBib3JkZXItY29sb3I6IEJ1dHRvblNoYWRvdyBCdXR0b25IaWdobGlnaHQgQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvblNoYWRvdzsKKyAgcGFkZGluZzogMnB4IDRweDsKKyAgYmFja2dyb3VuZC1jb2xvcjogQnV0dG9uRmFjZTsKKyAgY29sb3I6IEJ1dHRvblRleHQ7CisgIGZvbnQ6IDExcHggVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjsKKyAgaGVpZ2h0OjE2cHg7CisgIG92ZXJmbG93OiBoaWRkZW47CisgIAorICAvKiBGaXggIzE2MDEgSW5jb3JyZWN0IHNpemVkIHN0YXR1cyBzdGF0dXNCYXIqLworICBib3gtc2l6aW5nOmJvcmRlci1ib3g7CisgIGhlaWdodDoyMnB4OyAvKiA0cHggcGFkICsgMXggYm9yZGVyIGFkZGl0aW9uYWwgdG8gdGhlIDE2cHggd2hpY2ggd2FzIHVzZWQgYWJvdmUgKi8KK30KKworLmh0bWxhcmVhIC5zdGF0dXNCYXIgLnN0YXR1c0JhclRyZWUgYSB7CisgIHBhZGRpbmc6IDJweCA1cHg7CisgIGNvbG9yOiAjMDBmOworfQorCisuaHRtbGFyZWEgLnN0YXR1c0JhciAuc3RhdHVzQmFyVHJlZSBhOnZpc2l0ZWQgeyBjb2xvcjogIzAwZjsgfQorLmh0bWxhcmVhIC5zdGF0dXNCYXIgLnN0YXR1c0JhclRyZWUgYTpob3ZlciB7CisgIGJhY2tncm91bmQtY29sb3I6IEhpZ2hsaWdodDsKKyAgY29sb3I6IEhpZ2hsaWdodFRleHQ7CisgIHBhZGRpbmc6IDFweCA0cHg7CisgIGJvcmRlcjogMXB4IHNvbGlkIEhpZ2hsaWdodFRleHQ7Cit9CisKKy5zdGF0dXNCYXJXaWRnZXRDb250YWluZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiBCdXR0b25GYWNlOworfQorCisvKiBwb3B1cCBkaWFsb2dzICovCisKKy5kaWFsb2cgeworICBjb2xvcjogQnV0dG9uVGV4dDsKKyAgYmFja2dyb3VuZDogQnV0dG9uRmFjZTsgCisgIGJvcmRlcjogMXB4IG91dHNldDsgCisgIGJvcmRlci1jb2xvcjogV2luZG93RnJhbWU7Cit9CitkaXYuZGlhbG9nIHsKKyAgcGFkZGluZy1ib3R0b206MTBweDsKKyAgYm9yZGVyLXJhZGl1czogOHB4IDhweCAwIDA7CisgIC1tb3otYm9yZGVyLXJhZGl1czogOHB4IDhweCAwIDA7CisgIC13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogOHB4OworICAtd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA4cHg7CisgIAorICBib3gtc2hhZG93OiA5cHggOXB4IDEwcHggIzQ0NDsKKyAgLW1vei1ib3gtc2hhZG93OiA5cHggOXB4IDEwcHggIzQ0NDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiA5cHggOXB4IDEwcHggIzQ0NDsKK30KK2Rpdi5kaWFsb2cubW9kZWxlc3MgeworICBib3gtc2hhZG93OiA0cHggNHB4IDVweCAjODg4OworICAtbW96LWJveC1zaGFkb3c6IDRweCA0cHggNXB4ICM4ODg7CisgIC13ZWJraXQtYm94LXNoYWRvdzogNHB4IDRweCA1cHggIzg4ODsKK30KK2Rpdi5kaWFsb2cuY2hyb21lIHsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lICFJTVBPUlRBTlQ7Cit9CisucGFuZWxzIGRpdi5kaWFsb2cucGFuZWwgeworICBib3JkZXItcmFkaXVzOjA7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7CisgIAorICBib3gtc2hhZG93OiBub25lOworICAtbW96LWJveC1zaGFkb3c6IG5vbmU7CisgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKK30KKy54aW5oYV9kaWFsb2dfYmFja2dyb3VuZCB7CisgIGZpbHRlcjogYWxwaGEob3BhY2l0eT0wKTsKKyAgLW1vei1vcGFjaXR5OiAwOworICBvcGFjaXR5OiAwOworICBib3JkZXI6bm9uZTsKK30KKy54aW5oYV9kaWFsb2dfYmFja2dyb3VuZF9tb2RhbF9ncmV5b3V0IHsKKyAgYmFja2dyb3VuZC1jb2xvcjojNjY2OworICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NzApICFJTVBPUlRBTlQ7CisgIC1tb3otb3BhY2l0eTogMC43OworICBvcGFjaXR5OiAwLjc7Cit9CisueGluaGFfZGlhbG9nX2JhY2tncm91bmRfbW9kYWwgeworICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MCkgIUlNUE9SVEFOVDsKKyAgLW1vei1vcGFjaXR5OiAwOworICBvcGFjaXR5OiAwOworICBib3JkZXI6bm9uZTsKK30KK2JvZHkueGluaGFfZGlhbG9nX2JhY2tncm91bmRfbW9kYWxfZ3JleW91dCB7CisgIGZpbHRlcjogYWxwaGEob3BhY2l0eT0xMDApICFJTVBPUlRBTlQ7Cit9Citib2R5LnhpbmhhX2RpYWxvZ19iYWNrZ3JvdW5kX21vZGFsIHsKKyAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApOworfQorLmRpYWxvZyAuY29udGVudCB7IHBhZGRpbmc6IDJweDsgfQorCisuZGlhbG9nLCAuZGlhbG9nIGJ1dHRvbiwgLmRpYWxvZyBpbnB1dCwgLmRpYWxvZyBzZWxlY3QsIC5kaWFsb2cgdGV4dGFyZWEsIC5kaWFsb2cgdGFibGUgeworICBmb250OiAxMXB4IFRhaG9tYSxWZXJkYW5hLHNhbnMtc2VyaWY7Cit9CisKKy5kaWFsb2cgdGFibGUgeyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB9CisKKy5kaWFsb2cgLnRpdGxlLCAuZGlhbG9nIGgxCit7CisgIGJhY2tncm91bmQ6IEFjdGl2ZUNhcHRpb247CisgIGNvbG9yOiBDYXB0aW9uVGV4dDsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMwMDA7CisgIHBhZGRpbmc6IDFweCAwIDJweCA1cHg7CisgIGZvbnQtc2l6ZTogMTJweDsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIGN1cnNvcjogZGVmYXVsdDsKKyAgbGV0dGVyLXNwYWNpbmc6IDAuMDFlbTsKK30KKy5kaWFsb2cgaDEgeyAKKyAgcGFkZGluZy1sZWZ0OjIycHg7CisgIG1hcmdpbjowOworICBib3JkZXItcmFkaXVzOiA4cHggOHB4IDAgMDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiA4cHggOHB4IDAgMDsKKyAgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA4cHg7CisgIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDhweDsKK30KKy5wYW5lbHMgLmRpYWxvZy5wYW5lbCBoMSB7IAorICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czowOworfQorCisuZGlhbG9nIC50aXRsZSAuYnV0dG9uIHsKKyAgZmxvYXQ6IHJpZ2h0OworICBib3JkZXI6IDFweCBzb2xpZCAjNjZhOworICBwYWRkaW5nOiAwIDFweCAwIDJweDsKKyAgbWFyZ2luLXJpZ2h0OiAxcHg7CisgIGNvbG9yOiAjZmZmOworICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKy5kaWFsb2cgLnRpdGxlIC5idXR0b24taGlsaXRlIHsgYm9yZGVyLWNvbG9yOiAjODhmOyBiYWNrZ3JvdW5kOiAjNDRjOyB9CisKKy5kaWFsb2cgYnV0dG9uIHsKKyAgd2lkdGg6IDUuNWVtOworICBwYWRkaW5nOiAwOworfQorLmRpYWxvZyAuY2xvc2VCdXR0b24geworICBwYWRkaW5nOiAwOworICBjdXJzb3I6IGRlZmF1bHQ7CisgIGJvcmRlcjogMXB4IHNvbGlkOworICBib3JkZXItY29sb3I6IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25TaGFkb3cgQnV0dG9uU2hhZG93IEJ1dHRvbkhpZ2hsaWdodDsKKyAgaGVpZ2h0IDogMTFweDsKKyAgd2lkdGggOiAxMXB4OworICB2ZXJ0aWNhbC1hbGlnbiA6IHRvcDsKKyAgcG9zaXRpb24gOiBhYnNvbHV0ZTsKKyAgdG9wIDogM3B4OworICByaWdodCA6IDJweDsKKyAgYmFja2dyb3VuZC1jb2xvcjogQnV0dG9uRmFjZTsKKyAgY29sb3I6IEJ1dHRvblRleHQ7CisgIGZvbnQtc2l6ZTogMTNweDsKKyAgZm9udC1mYW1pbHk6IFRhaG9tYSxWZXJkYW5hLHNhbnMtc2VyaWY7CisgIHRleHQtYWxpZ246Y2VudGVyOworICBsZXR0ZXItc3BhY2luZzowOworICBvdmVyZmxvdzpoaWRkZW47Cit9CisuZGlhbG9nIC5idXR0b25Db2xvciB7CisgIHdpZHRoIDoxZW07CisgIHBhZGRpbmc6IDFweDsKKyAgY3Vyc29yOiBkZWZhdWx0OworICBib3JkZXI6IDFweCBzb2xpZDsKKyAgYm9yZGVyLWNvbG9yOiBCdXR0b25IaWdobGlnaHQgQnV0dG9uU2hhZG93IEJ1dHRvblNoYWRvdyBCdXR0b25IaWdobGlnaHQ7Cit9CisKKy5kaWFsb2cgLmJ1dHRvbkNvbG9yIC5jaG9vc2VyLCAuZGlhbG9nIC5idXR0b25Db2xvciAubm9jb2xvciB7CisgIGhlaWdodDogMC42ZW07CisgIGJvcmRlcjogMXB4IHNvbGlkOworICBwYWRkaW5nOiAwIDFlbTsKKyAgYm9yZGVyLWNvbG9yOiBCdXR0b25TaGFkb3cgQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25TaGFkb3c7Cit9CisKKy5kaWFsb2cgLmJ1dHRvbkNsaWNrIHsKKyAgYm9yZGVyLWNvbG9yOiBCdXR0b25TaGFkb3cgQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25TaGFkb3c7Cit9CisuZGlhbG9nIC5idXR0b25Db2xvci1oaWxpdGUgeworICAgYm9yZGVyLWNvbG9yOiBCdXR0b25TaGFkb3cgQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25TaGFkb3c7Cit9CisKKy5kaWFsb2cgLmJ1dHRvbkNvbG9yIC5ub2NvbG9yIHsgcGFkZGluZzogMDsgfQorLmRpYWxvZyAuYnV0dG9uQ29sb3IgLm5vY29sb3ItaGlsaXRlIHsgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgY29sb3I6ICNmMDA7IH0KKworLmRpYWxvZyAubGFiZWwgeyB0ZXh0LWFsaWduOiByaWdodDsgd2lkdGg6IDZlbTsgfQorLmRpYWxvZyAudmFsdWUgaW5wdXQgeyB3aWR0aDogMTAwJTsgfQorCisuZGlhbG9nIGxlZ2VuZCB7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CisuZGlhbG9nIGZpZWxkc2V0IHRhYmxlIHsgbWFyZ2luOiAycHggMDsgfQorIAorLmRpYWxvZyAgLmJ1dHRvbnMgeworCisgICAgICBwYWRkaW5nOiAxZW07IAorICAgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorLmRpYWxvZyAucmVzaXplSGFuZGxlIHsKKyAgICAtbW96LWFwcGVhcmFuY2UgOiByZXNpemVyOworICAgIHdpZHRoOiAxMnB4OworICAgIGhlaWdodDogMTJweDsKKyAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgIzAwMDsKKyAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjMDAwOworICAgIGN1cnNvciA6IHNlLXJlc2l6ZTsKK30KKy5wb3B1cHdpbiB7CisgIHBhZGRpbmc6IDA7CisgIG1hcmdpbjogMDsKK30KKworLnBvcHVwd2luIC50aXRsZSB7CisgIGJhY2tncm91bmQ6ICNmZmY7CisgIGNvbG9yOiAjMDAwOworICBmb250LXdlaWdodDogYm9sZDsKKyAgZm9udC1zaXplOiAxMjAlOworICBwYWRkaW5nOiAzcHggMTBweDsKKyAgbWFyZ2luLWJvdHRvbTogMTBweDsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOworICBsZXR0ZXItc3BhY2luZzogMnB4OworfQorCitmb3JtIHsgbWFyZ2luOiAwOyBib3JkZXI6IG5vbmU7IH0KKworCisvKiogUGFuZWxzICoqLworLmh0bWxhcmVhIC5wYW5lbHNfdG9wCit7CisgIGJvcmRlci1ib3R0b20gOiAxcHggc29saWQ7CisgIGJvcmRlci1jb2xvcjogQnV0dG9uU2hhZG93OworfQorCisuaHRtbGFyZWEgLnBhbmVsc19yaWdodAoreworICBib3JkZXItbGVmdCA6IDFweCBzb2xpZDsKKyAgYm9yZGVyLWNvbG9yOiBCdXR0b25TaGFkb3c7Cit9CisKKy5odG1sYXJlYSAucGFuZWxzX2xlZnQKK3sKKyAgYm9yZGVyLXJpZ2h0IDogMXB4IHNvbGlkOworICBib3JkZXItY29sb3I6IEJ1dHRvblNoYWRvdzsKK30KKworLmh0bWxhcmVhIC5wYW5lbHNfYm90dG9tCit7CisgIGJvcmRlci10b3AgOiAxcHggc29saWQ7CisgIGJvcmRlci1jb2xvcjogQnV0dG9uU2hhZG93OworfQorCisuaHRtbGFyZWEgLnBhbmVsIGgxIHsKKyAgY2xlYXI6bGVmdDsKKyAgZm9udC1zaXplOjAuOWVtOworfQorCisuaHRtbGFyZWEgLnBhbmVsIHsgCisgIG92ZXJmbG93OmhpZGRlbjsgCisgIGJhY2tncm91bmQtY29sb3I6d2hpdGU7CisgIHBhZGRpbmctYm90dG9tOjAgIUlNUE9SVEFOVDsKKyAgYm9yZGVyOiBub25lICFJTVBPUlRBTlQ7Cit9CisuaHRtbGFyZWEgLnBhbmVsc19sZWZ0ICAucGFuZWwgeyBib3JkZXItcmlnaHQ6bm9uZTsgYm9yZGVyLWxlZnQ6bm9uZTsgfQorLmh0bWxhcmVhIC5wYW5lbHNfbGVmdCAgaDEgICAgIHsgYm9yZGVyLXJpZ2h0Om5vbmU7ICB9CisuaHRtbGFyZWEgLnBhbmVsc19yaWdodCAucGFuZWwgeyBib3JkZXItcmlnaHQ6bm9uZTsgYm9yZGVyLWxlZnQ6bm9uZTsgfQorLmh0bWxhcmVhIC5wYW5lbHNfbGVmdCAgaDEgICAgIHsgYm9yZGVyLWxlZnQ6bm9uZTsgIH0KKy5odG1sYXJlYSB7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyB9CisKKy5sb2FkaW5nCit7CisgIGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7CisgIHBvc2l0aW9uOmFic29sdXRlOworICB6LWluZGV4OjEwMDA7CisgIHRleHQtYWxpZ246Y2VudGVyOworICB3aWR0aDoyMTJweDsKKyAgcGFkZGluZzogNTVweCAwIDVweCAwOworICBib3JkZXI6MnB4IHNvbGlkICNjY2M7CisgIC8qIGJvcmRlci1jb2xvcjogQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvblNoYWRvdyBCdXR0b25TaGFkb3cgQnV0dG9uSGlnaGxpZ2h0OyovCisgIGJhY2tncm91bmQ6IHVybChpbWFnZXMveGluaGFfbG9nby5naWYpIG5vLXJlcGVhdCAjZmZmIGNlbnRlciA1cHg7Cit9CisubG9hZGluZ19tYWluCit7CisgIGZvbnQtc2l6ZToxMXB4OworICBjb2xvcjojMDAwOworIAorfQorLmxvYWRpbmdfc3ViCit7CisgIGZvbnQtc2l6ZTo5cHg7CisgIGNvbG9yOiM2NjY7CisgIHRleHQtYWxpZ246Y2VudGVyOworfQorLyogQ2xhc3NlcyBmb3IgZmlsZW1hbmFnZXIgc3R5bGVzIGluIGEgZGlhbG9nLiAqLworLmRpYWxvZyBhIGltZworeworYm9yZGVyOiAwIG5vbmUgdHJhbnNwYXJlbnQ7Cit9CisKKy5kaWFsb2cgZmllbGRzZXQuY29sbGFwc2VkIHsKK2JvcmRlcjogMCBub25lIHRyYW5zcGFyZW50OworfQorCisuZGlhbG9nIGZpZWxkc2V0LmNvbGxhcHNlZCBmb3JtIHsKK2Rpc3BsYXk6IG5vbmU7Cit9CisKKy5oaWRkZW4KK3sKK2Rpc3BsYXk6IG5vbmU7Cit9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9YaW5oYUNvcmUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9YaW5oYUNvcmUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY2Y2U5MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL1hpbmhhQ29yZS5qcwpAQCAtMCwwICsxLDk2NzEgQEAKKyAKKyAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTpub1RhYnM9dHJ1ZTp0YWJTaXplPTI6aW5kZW50U2l6ZT0yOi0tCisgICAgLS0gIFhpbmhhIChpcyBub3QgaHRtbEFyZWEpIC0gaHR0cDovL3hpbmhhLm9yZworICAgIC0tCisgICAgLS0gIFVzZSBvZiBYaW5oYSBpcyBncmFudGVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGUgaHRtbEFyZWEgTGljZW5zZSAoYmFzZWQgb24KKyAgICAtLSAgQlNEIGxpY2Vuc2UpICBwbGVhc2UgcmVhZCBsaWNlbnNlLnR4dCBpbiB0aGlzIHBhY2thZ2UgZm9yIGRldGFpbHMuCisgICAgLS0KKyAgICAtLSAgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDggWGluaGEgRGV2ZWxvcGVyIFRlYW0gYW5kIGNvbnRyaWJ1dG9ycworICAgIC0tICAKKyAgICAtLSAgWGluaGEgd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gd29yayBieSBNaWhhaSBCYXpvbiB3aGljaCBpczoKKyAgICAtLSAgICAgIENvcHlyaWdodCAoYykgMjAwMy0yMDA0IGR5bmFyY2guY29tLgorICAgIC0tICAgICAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgaW50ZXJhY3RpdmV0b29scy5jb20sIGluYy4KKyAgICAtLSAgICAgIFRoaXMgY29weXJpZ2h0IG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UuCisgICAgLS0KKyAgICAtLSAgRGV2ZWxvcGVycyAtIENvZGluZyBTdHlsZTogCisgICAgLS0gICAgICAgICBCZWZvcmUgeW91IGFyZSBnb2luZyB0byB3b3JrIG9uIFhpbmhhIGNvZGUsIHBsZWFzZSBzZWUgaHR0cDovL3RyYWMueGluaGEub3JnL3dpa2kvRG9jdW1lbnRhdGlvbi9TdHlsZUd1aWRlCisgICAgLS0KKyAgICAtLSAgJEhlYWRVUkw6IGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL1hpbmhhQ29yZS5qcyAkCisgICAgLS0gICRMYXN0Q2hhbmdlZERhdGU6IDIwMTgtMDMtMjkgMTE6MTM6MjUgKzEzMDAgKFRodSwgMjkgTWFyIDIwMTgpICQKKyAgICAtLSAgJExhc3RDaGFuZ2VkUmV2aXNpb246IDE0MzMgJAorICAgIC0tICAkTGFzdENoYW5nZWRCeTogZ29nbyAkCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLypqc2xpbnQgcmVnZXhwOiBmYWxzZSwgcmhpbm86IGZhbHNlLCBicm93c2VyOiB0cnVlLCBiaXR3aXNlOiBmYWxzZSwgZm9yaW46IHRydWUsIGFkc2FmZTogZmFsc2UsIGV2aWw6IHRydWUsIG5vbWVuOiBmYWxzZSwgCitnbG92YXI6IGZhbHNlLCBkZWJ1ZzogZmFsc2UsIGVxZXFlcTogZmFsc2UsIHBhc3NmYWlsOiBmYWxzZSwgc2lkZWJhcjogZmFsc2UsIGxheGJyZWFrOiBmYWxzZSwgb246IGZhbHNlLCBjYXA6IHRydWUsIAord2hpdGU6IGZhbHNlLCB3aWRnZXQ6IGZhbHNlLCB1bmRlZjogdHJ1ZSwgcGx1c3BsdXM6IGZhbHNlKi8KKy8qZ2xvYmFsICBEaWFsb2cgLCBfZWRpdG9yX2NzcyAsIF9lZGl0b3JfaWNvbnMsIF9lZGl0b3JfbGFuZyAsIF9lZGl0b3Jfc2tpbiAsIF9lZGl0b3JfdXJsLCBkdW1wVmFsdWVzLCBBY3RpdmVYT2JqZWN0LCBIVE1MQXJlYSwgX2VkaXRvcl9sY2JhY2tlbmQqLworCisvKiogSW5mb3JtYXRpb24gYWJvdXQgdGhlIFhpbmhhIHZlcnNpb24gCisgKiBAdHlwZSBPYmplY3QKKyAqLworWGluaGEudmVyc2lvbiA9Cit7CisgICdSZWxlYXNlJyAgIDogJ1RydW5rJywKKyAgJ0hlYWQnICAgICAgOiAnJEhlYWRVUkw6IGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL1hpbmhhQ29yZS5qcyAkJy5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sICckMScpLAorICAnRGF0ZScgICAgICA6ICckTGFzdENoYW5nZWREYXRlOiAyMDE4LTAzLTI5IDExOjEzOjI1ICsxMzAwIChUaHUsIDI5IE1hciAyMDE4KSAkJy5yZXBsYWNlKC9eW146XSo6XHMqKFswLTlcLV0qKSAoWzAtOTpdKikgKFsrMC05XSopIFwoKC4qKVwpXHMqXCQvLCAnJDQgJDIgJDMnKSwKKyAgJ1JldmlzaW9uJyAgOiAnJExhc3RDaGFuZ2VkUmV2aXNpb246IDE0MzMgJCcucmVwbGFjZSgvXlteOl0qOlxzKiguKilccypcJCQvLCAnJDEnKSwKKyAgJ1JldmlzaW9uQnknOiAnJExhc3RDaGFuZ2VkQnk6IGdvZ28gJCcucmVwbGFjZSgvXlteOl0qOlxzKiguKilccypcJCQvLCAnJDEnKQorfTsKKworLy9tdXN0IGJlIGhlcmUuIGl0IGlzIGNhbGxlZCB3aGlsZSBjb252ZXJ0aW5nIF9lZGl0b3JfdXJsIHRvIGFic29sdXRlCitYaW5oYS5fcmVzb2x2ZVJlbGF0aXZlVXJsID0gZnVuY3Rpb24oIGJhc2UsIHVybCApCit7CisgIGlmKHVybC5tYXRjaCgvXihbXjpdK1w6KT9cL1wvLykpCisgIHsKKyAgICByZXR1cm4gdXJsOworICB9CisgIGVsc2UKKyAgeworICAgIHZhciBiID0gYmFzZS5zcGxpdCgiLyIpOworICAgIGlmKGJbYi5sZW5ndGggLSAxXSA9PT0gIiIpCisgICAgeworICAgICAgYi5wb3AoKTsKKyAgICB9CisgICAgdmFyIHAgPSB1cmwuc3BsaXQoIi8iKTsKKyAgICBpZihwWzBdID09ICIuIikKKyAgICB7CisgICAgICBwLnNoaWZ0KCk7CisgICAgfQorICAgIHdoaWxlKHBbMF0gPT0gIi4uIikKKyAgICB7CisgICAgICBiLnBvcCgpOworICAgICAgcC5zaGlmdCgpOworICAgIH0KKyAgICByZXR1cm4gYi5qb2luKCIvIikgKyAiLyIgKyBwLmpvaW4oIi8iKTsKKyAgfQorfTsKKworLy8gQXV0b21hdGljYWxseSBkZXRlcm1pbmUgZWRpdG9yX3VybCBmcm9tIG91ciBzY3JpcHQgc3JjIGlmIGl0IGlzIG5vdCBzdXBwbGllZAoraWYgKCB0eXBlb2YgX2VkaXRvcl91cmwgPT0gJ3VuZGVmaW5lZCcgfHwgX2VkaXRvcl91cmwgPT0gbnVsbCkKK3sKKyAgLy8gQmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBET00gaXMgbG9hZGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gYWx3YXlzIHB1bGwgb3VyIHNjcmlwdCB0YWcuCisgIHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOworICB2YXIgdGhpc19zY3JpcHQgPSBzY3JpcHRzW3NjcmlwdHMubGVuZ3RoIC0gMV07CisgIF9lZGl0b3JfdXJsID0gdGhpc19zY3JpcHQuc3JjLnNwbGl0KCc/JylbMF0uc3BsaXQoJy8nKS5zbGljZSgwLCAtMSkuam9pbignLycpLnJlcGxhY2UoL1x4MmYqJC8sICcvJyk7Cit9CisKK2lmICggdHlwZW9mIF9lZGl0b3JfdXJsID09ICJzdHJpbmciICkKK3sKKyAgLy8gTGVhdmUgZXhhY3RseSBvbmUgYmFja3NsYXNoIGF0IHRoZSBlbmQgb2YgX2VkaXRvcl91cmwKKyAgX2VkaXRvcl91cmwgPSBfZWRpdG9yX3VybC5yZXBsYWNlKC9ceDJmKiQvLCAnLycpOworICAKKyAgLy8gY29udmVydCBfZWRpdG9yX3VybCB0byBhYnNvbHV0ZQorICBpZighX2VkaXRvcl91cmwubWF0Y2goL14oW146XStcOik/XC8vKSkKKyAgeworICAgIChmdW5jdGlvbigpCisgICAgeworICAgICAgdmFyIHRtcFBhdGggPSB3aW5kb3cubG9jYXRpb24udG9TdHJpbmcoKS5yZXBsYWNlKC9cPy4qJC8sJycpLnNwbGl0KCIvIik7CisgICAgICB0bXBQYXRoLnBvcCgpOworICAgICAgX2VkaXRvcl91cmwgPSBYaW5oYS5fcmVzb2x2ZVJlbGF0aXZlVXJsKHRtcFBhdGguam9pbigiLyIpLCBfZWRpdG9yX3VybCk7CisgICAgfSkoKTsKKyAgfQorfQorCisvLyBtYWtlIHN1cmUgd2UgaGF2ZSBhIGxhbmd1YWdlCitpZiAoIHR5cGVvZiBfZWRpdG9yX2xhbmcgPT0gInN0cmluZyIgKQoreworICBfZWRpdG9yX2xhbmcgPSBfZWRpdG9yX2xhbmcudG9Mb3dlckNhc2UoKTsKK30KK2Vsc2UKK3sKKyAgX2VkaXRvcl9sYW5nID0gImVuIjsKK30KKworLy8gc2tpbiBzdHlsZXNoZWV0IHRvIGxvYWQKK2lmICggdHlwZW9mIF9lZGl0b3Jfc2tpbiAhPT0gInN0cmluZyIgKQoreworICBfZWRpdG9yX3NraW4gPSAiIjsKK30KKworaWYgKCB0eXBlb2YgX2VkaXRvcl9pY29ucyAhPT0gInN0cmluZyIgKQoreworICBfZWRpdG9yX2ljb25zID0gIiI7Cit9CisvKioKKyogVGhlIGxpc3Qgb2YgWGluaGEgZWRpdG9ycyBvbiB0aGUgcGFnZS4gTWF5IGJlIG11bHRpcGxlIGVkaXRvcnMuCisqIFlvdSBjYW4gYWNjZXNzIGVhY2ggZWRpdG9yIG9iamVjdCB0aHJvdWdoIHRoaXMgZ2xvYmFsIHZhcmlhYmxlLgorKgorKiBFeGFtcGxlOjxiciAvPgorKiA8Y29kZT4KKyoJdmFyIGh0bWwgPSBfX3hpbmhhc1swXS5nZXRFZGl0b3JDb250ZW50KCk7IC8vIGdpdmVzIHlvdSB0aGUgSFRNTCBvZiB0aGUgZmlyc3QgZWRpdG9yIGluIHRoZSBwYWdlCisqIDwvY29kZT4KKyovCit2YXIgX194aW5oYXMgPSBbXTsKKworLy8gYnJvd3NlciBpZGVudGlmaWNhdGlvbgorLyoqIENhY2hlIHRoZSB1c2VyIGFnZW50IGZvciB0aGUgZm9sbG93aW5nIGNoZWNrcworICogQHR5cGUgU3RyaW5nCisgKiBAcHJpdmF0ZQorICovCitYaW5oYS5hZ3QgICAgICAgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7CisvKiogQnJvd3NlciBpcyBNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXIKKyAqIAorICogV0FSTklORyBTdGFydGluZyB3aXRoIEludGVybmV0IEV4cGxvcmVyIDExLCB0aGlzIG5vIGxvbmdlciBkZXRlY3RzIGFzIElFLCBidXQgaW5zdGVhZCAKKyAqICAgICAgICAgICBkZXRlY3RzIGFzIEdlY2tvLiAgT2RkbHkgZW5vdWdoLCBpdCBzZWVtcyB0byB3b3JrIHByZXR0eSBtdWNoIGZpbmUgdW5kZXIKKyAqICAgICAgICAgICBYaW5oYSdzIEdlY2tvIEVuZ2luZSwgc28gSSBkb24ndCB0aGluayB3ZSBzaG91bGQgY2hhbmdlIHRoaXMgdG8gbWF0Y2ggSUUxMQorICogICAgICAgICAgIGFuZCBjb250aW51ZSB0byBqdXN0IHByZXRlbmQgaXQgaXMgR2Vja28uCisgKiAKKyAqICAgICAgICAgICBodHRwczovL2Jsb2dzLm1zZG4ubWljcm9zb2Z0LmNvbS9pZWludGVybmFscy8yMDEzLzA5LzIxL2ludGVybmV0LWV4cGxvcmVyLTExcy1tYW55LXVzZXItYWdlbnQtc3RyaW5ncy8KKyAqICAgICAgICAgCisgKiBXQVJOSU5HIFN0YXJ0aW5nIHdpdGggTWljcm9zb2Z0IEVkZ2UgKHdoYXQgYSBzaWxseSBuYW1lIGZvciBhIGJyb3dzZXIpIHRoaXMgbm8gbG9uZ2VyIAorICogICAgICAgICAgZGV0ZWN0cyBhcyBHZWNrbyBidXQgaW5zdGVhZCBkZXRlY3RzIGFzIFdlYmtpdC4gIEkgY2FuJ3QgcmVhbGx5IHNlZSBhbnkgb2J2aW91cworICogICAgICAgICAgYmVoYXZpb3VyYWwgZGlmZmVyZW5jZXMgYmV0d2VlbiB1c2luZyBHZWNrbyBhbmQgdXNpbmcgV2Via2l0ICh5b3UgY2FuIGZvcmNlIAorICogICAgICAgICAgdGhpcyBieSwgYWZ0ZXIgbG9hZGluZyBYaW5oYUNvcmUuanMgYnV0IGJlZm9yZSBjb25maWd1cmluZy9pbml0aWFsaXNpbmcgc2V0dGluZworICogICAgICAgICAgICAgWGluaGEuaXNfd2Via2l0ID0gZmFsc2U7IFhpbmhhLmlzX2dlY2tvID0gdHJ1ZTsKKyAqIAorICogICAgICAgICAgUXVvdGluZyBmcm9tIFdpa2lwZWRpYToKKyAqICAgICAgICAgICAgICBFZGdlSFRNTCBpcyBtZWFudCB0byBiZSBmdWxseSBjb21wYXRpYmxlIHdpdGggdGhlIFdlYktpdCBsYXlvdXQgZW5naW5lIAorICogICAgICAgICAgICAgIHVzZWQgYnkgU2FmYXJpLCBDaHJvbWUgYW5kIG90aGVyIGJyb3dzZXJzLiBNaWNyb3NvZnQgaGFzIHN0YXRlZCB0aGF0IAorICogICAgICAgICAgICAgICJhbnkgRWRnZS1XZWJLaXQgZGlmZmVyZW5jZXMgYXJlIGJ1Z3MgdGhhdCB3ZeKAmXJlIGludGVyZXN0ZWQgaW4gZml4aW5nLiJbMjRdCisgKiAKKyAqICAgICAgICAgIFNvIEkgdGhpbmsgdGhhdCB3ZSBiZXN0IGhhdmUgaXQgZGV0ZWN0IGFzIFdlYmtpdCwgc2VlbXMgdGhhdCBzaG91bGQgaW4gdGhlb3J5CisgKiAgICAgICAgICBiZSBjbG9zZXN0IHRvIHRoZSBtYXJrICh2cyBHZWNrbykuICBDaHJvbWUgYWxzbyB1c2VzIHRoZSBXZWJraXQgWGluaGEgbW9kdWxlLi4KKyAqIAorICogICAgICAgICAgSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhlIG9sZCBJbnRlcm5ldEV4cGxvcmVyIGVuZ2luZSBhYnNvbHV0ZWx5IGRvZXMgbm90IHdvcmsKKyAqICAgICAgICAgIHdpdGggZWRnZSAoYW5kIHByb2JhYmx5IG5vdCB3aXRoIElFMTEgSSBleHBlY3QgYnV0IEkgaGF2ZSBub3QgdHJpZWQpLgorICogCisgKiBAdHlwZSBCb29sZWFuIAorICovCitYaW5oYS5pc19pZSAgICA9ICgoWGluaGEuYWd0LmluZGV4T2YoIm1zaWUiKSAhPSAtMSkgJiYgKFhpbmhhLmFndC5pbmRleE9mKCJvcGVyYSIpID09IC0xKSk7CisvKiogVmVyc2lvbiBOdW1iZXIsIGlmIGJyb3dzZXIgaXMgTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyCisgKiBAdHlwZSBGbG9hdCAKKyAqLworWGluaGEuaWVfdmVyc2lvbj0gcGFyc2VGbG9hdChYaW5oYS5hZ3Quc3Vic3RyaW5nKFhpbmhhLmFndC5pbmRleE9mKCJtc2llIikrNSkpOworLyoqIEJyb3dzZXIgaXMgT3BlcmEKKyAqIEB0eXBlIEJvb2xlYW4gCisgKi8KK1hpbmhhLmlzX29wZXJhICA9IChYaW5oYS5hZ3QuaW5kZXhPZigib3BlcmEiKSAhPSAtMSk7CisvKiogVmVyc2lvbiBOdW1iZXIsIGlmIGJyb3dzZXIgaXMgT3BlcmEgCisgICogQHR5cGUgRmxvYXQgCisgICovCitpZihYaW5oYS5pc19vcGVyYSAmJiBYaW5oYS5hZ3QubWF0Y2goL29wZXJhW1wvIF0oWzAtOS5dKykvKSkKK3sKKyAgWGluaGEub3BlcmFfdmVyc2lvbiA9IHBhcnNlRmxvYXQoUmVnRXhwLiQxKTsKK30KK2Vsc2UKK3sKKyAgWGluaGEub3BlcmFfdmVyc2lvbiA9IDA7Cit9CisvKiogQnJvd3NlcmVuZ2luZSBpcyBLSFRNTCAoS29ucXVlcm9yLCBTYWZhcmkpCisgKiBAdHlwZSBCb29sZWFuIAorICovCitYaW5oYS5pc19raHRtbCAgPSAoWGluaGEuYWd0LmluZGV4T2YoImtodG1sIikgIT0gLTEpOworLyoqIEJyb3dzZXIgaXMgV2ViS2l0CisgKiBAdHlwZSBCb29sZWFuIAorICovCitYaW5oYS5pc193ZWJraXQgID0gKFhpbmhhLmFndC5pbmRleE9mKCJhcHBsZXdlYmtpdCIpICE9IC0xKTsKKy8qKiBXZWJraXQgYnVpbGQgbnVtYmVyCisgKiBAdHlwZSBJbnRlZ2VyCisgKi8KK1hpbmhhLndlYmtpdF92ZXJzaW9uID0gcGFyc2VJbnQobmF2aWdhdG9yLmFwcFZlcnNpb24ucmVwbGFjZSgvLio/QXBwbGVXZWJLaXRcLyhbXGRdKS4qPy8sJyQxJyksIDEwKTsKKworLyoqIEJyb3dzZXIgaXMgU2FmYXJpCisgKiBAdHlwZSBCb29sZWFuIAorICovCitYaW5oYS5pc19zYWZhcmkgID0gKFhpbmhhLmFndC5pbmRleE9mKCJzYWZhcmkiKSAhPSAtMSk7CisKKy8qKiBCcm93c2VyIGlzIEdvb2dsZSBDaHJvbWUKKyAqIEB0eXBlIEJvb2xlYW4gCisgKi8KK1hpbmhhLmlzX2Nocm9tZSA9IChYaW5oYS5hZ3QuaW5kZXhPZigiY2hyb21lIikgIT0gLTEpOworCisvKiogT1MgaXMgTWFjT1MKKyAqIEB0eXBlIEJvb2xlYW4gCisgKi8KK1hpbmhhLmlzX21hYwkgICA9IChYaW5oYS5hZ3QuaW5kZXhPZigibWFjIikgIT0gLTEpOworWGluaGEuaXNfaW9zCSAgID0gKFhpbmhhLmFndC5pbmRleE9mKCJpcGhvbmUiKSAhPSAtMSkgfHwgKFhpbmhhLmFndC5pbmRleE9mKCJpcGFkIikgIT0gLTEpIDsKKworLyoqIEJyb3dzZXIgaXMgTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyIE1hYworICogQHR5cGUgQm9vbGVhbiAKKyAqLworWGluaGEuaXNfbWFjX2llID0gKFhpbmhhLmlzX2llICYmIFhpbmhhLmlzX21hYyk7CisvKiogQnJvd3NlciBpcyBNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXIgV2luZG93cworICogQHR5cGUgQm9vbGVhbiAKKyAqLworWGluaGEuaXNfd2luX2llID0gKFhpbmhhLmlzX2llICYmICFYaW5oYS5pc19tYWMpOworLyoqIEJyb3dzZXIgZW5naW5lIGlzIEdlY2tvIChNb3ppbGxhKSwgYXBwbGllcyBhbHNvIHRvIFNhZmFyaSBhbmQgT3BlcmEgd2hpY2ggd29yaworICogIGxhcmdlbHkgc2ltaWxhci4KKyAqQHR5cGUgQm9vbGVhbiAKKyAqLworWGluaGEuaXNfZ2Vja28gID0gKG5hdmlnYXRvci5wcm9kdWN0ID09ICJHZWNrbyIpIHx8IFhpbmhhLmlzX29wZXJhOworLyoqIEJyb3dzZXIgZW5naW5lIGlzIHJlYWxseSBHZWNrbywgaS5lLiBCcm93c2VyIGlzIEZpcmVmb3ggKG9yIE5ldHNjYXBlLCBTZWFNb25rZXksIEZsb2NrLCBTb25nYmlyZCwgQmVvbmV4LCBLLU1lbGVvbiwgQ2FtaW5vLCBHYWxlb24sIEthemVoYWthc2UsIFNraXBzdG9uZSwgb3Igd2hhdGV2ZXIgZGVyaXZhdGUgbWlnaHQgZXhpc3Qgb3V0IHRoZXJlLi4uKQorICogQHR5cGUgQm9vbGVhbiAKKyAqLworWGluaGEuaXNfcmVhbF9nZWNrbyA9IChuYXZpZ2F0b3IucHJvZHVjdCA9PSAiR2Vja28iICYmICFYaW5oYS5pc193ZWJraXQpOworCisvKiogR2Vja28gdmVyc2lvbiBsb3dlciB0aGFuIDEuOQorICogQHR5cGUgQm9vbGVhbiAKKyAqLworLy8gaHR0cDovL3RyYWMueGluaGEub3JnL3RpY2tldC8xNjIwCitYaW5oYS5pc19mZjIgPSBYaW5oYS5pc19yZWFsX2dlY2tvICYmIG5hdmlnYXRvci5wcm9kdWN0U3ViICYmIHBhcnNlSW50KG5hdmlnYXRvci5wcm9kdWN0U3ViLnN1YnN0cigwLDEwKSwgMTApIDwgMjAwNzEyMTA7CisKKy8qKiBGaWxlIGlzIG9wZW5lZCBsb2NhbGx5IG9wZW5lZCAoImZpbGU6Ly8iIHByb3RvY29sKQorICogQHR5cGUgQm9vbGVhbgorICogQHByaXZhdGUKKyAqLworWGluaGEuaXNSdW5Mb2NhbGx5ID0gZG9jdW1lbnQuVVJMLnRvTG93ZXJDYXNlKCkuc2VhcmNoKC9eZmlsZTovKSAhPSAtMTsKKy8qKiBFZGl0aW5nIGlzIGVuYWJsZWQgYnkgZG9jdW1lbnQuZGVzaWduTW9kZSAoR2Vja28sIE9wZXJhKSwgYXMgb3Bwb3NlZCB0byBjb250ZW50ZWRpdGFibGUgKElFKQorICogQHR5cGUgQm9vbGVhbgorICogQHByaXZhdGUKKyAqLworWGluaGEuaXNfZGVzaWduTW9kZSA9ICh0eXBlb2YgZG9jdW1lbnQuZGVzaWduTW9kZSAhPSAndW5kZWZpbmVkJyAmJiAhWGluaGEuaXNfaWUpOyAvLyBJRSBoYXMgZGVzaWduTW9kZSwgYnV0IHdlJ3JlIG5vdCB1c2luZyBpdAorCisvKiogQ2hlY2sgaWYgWGluaGEgY2FuIHJ1biBpbiB0aGUgdXNlZCBicm93c2VyLCBvdGhlcndpc2UgdGhlIHRleHRhcmVhIHdpbGwgYmUgcmVtYWluIHVuY2hhbmdlZAorICogQHR5cGUgQm9vbGVhbgorICogQHByaXZhdGUKKyAqLworWGluaGEuY2hlY2tTdXBwb3J0ZWRCcm93c2VyID0gZnVuY3Rpb24oKQoreworICByZXR1cm4gWGluaGEuaXNfcmVhbF9nZWNrbyB8fCAoWGluaGEuaXNfb3BlcmEgJiYgWGluaGEub3BlcmFfdmVyc2lvbiA+PSA5LjIpIHx8IFhpbmhhLmllX3ZlcnNpb24gPj0gNS41IHx8IFhpbmhhLndlYmtpdF92ZXJzaW9uID49IDUyMjsKK307CisvKiogQ2FjaGUgcmVzdWx0IG9mIGNoZWNraW5nIGZvciBicm93c2VyIHN1cHBvcnQKKyAqIEB0eXBlIEJvb2xlYW4KKyAqIEBwcml2YXRlCisgKi8KK1hpbmhhLmlzU3VwcG9ydGVkQnJvd3NlciA9IFhpbmhhLmNoZWNrU3VwcG9ydGVkQnJvd3NlcigpOworCitpZiAoIFhpbmhhLmlzUnVuTG9jYWxseSAmJiBYaW5oYS5pc1N1cHBvcnRlZEJyb3dzZXIpCit7CisgIGFsZXJ0KCdYaW5oYSAqbXVzdCogYmUgaW5zdGFsbGVkIG9uIGEgd2ViIHNlcnZlci4gTG9jYWxseSBvcGVuZWQgZmlsZXMgKHRob3NlIHRoYXQgdXNlIHRoZSAiZmlsZTovLyIgcHJvdG9jb2wpIGNhbm5vdCBwcm9wZXJseSBmdW5jdGlvbi4gWGluaGEgd2lsbCB0cnkgdG8gaW5pdGlhbGl6ZSBidXQgbWF5IG5vdCBiZSBjb3JyZWN0bHkgbG9hZGVkLicpOworfQorCisvKiogQ3JlYXRlcyBhIG5ldyBYaW5oYSBvYmplY3QKKyAqIEB2ZXJzaW9uICRSZXY6IDE0MzMgJCAkTGFzdENoYW5nZWREYXRlOiAyMDE4LTAzLTI5IDExOjEzOjI1ICsxMzAwIChUaHUsIDI5IE1hciAyMDE4KSAkCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7U3RyaW5nfERvbU5vZGV9ICAgdGV4dGFyZWEgdGhlIHRleHRhcmVhIHRvIHJlcGxhY2U7IGNhbiBiZSBlaXRoZXIgb25seSB0aGUgaWQgb3IgdGhlIERPTSBvYmplY3QgYXMgcmV0dXJuZWQgYnkgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoKQorICogQHBhcmFtIHtYaW5oYS5Db25maWd9IGNvbmZpZyBvcHRpb25hbCBpZiBubyBYaW5oYS5Db25maWcgb2JqZWN0IGlzIHBhc3NlZCwgdGhlIGRlZmF1bHQgY29uZmlnIGlzIHVzZWQKKyAqLworZnVuY3Rpb24gWGluaGEodGV4dGFyZWEsIGNvbmZpZykKK3sgCisgIGlmICggIVhpbmhhLmlzU3VwcG9ydGVkQnJvd3NlciApCisgIHsKKyAgICByZXR1cm47CisgIH0KKyAgCisgIGlmICggIXRleHRhcmVhICkKKyAgeworICAgIHRocm93IG5ldyBFcnJvciAoIlRyaWVkIHRvIGNyZWF0ZSBYaW5oYSB3aXRob3V0IHRleHRhcmVhIHNwZWNpZmllZC4iKTsKKyAgfQorCisgIGlmICggdHlwZW9mIGNvbmZpZyA9PSAidW5kZWZpbmVkIiApCisgIHsKKwkJLyoqIFRoZSBjb25maWd1cmF0aW9uIHVzZWQgaW4gdGhlIGVkaXRvcgorCQkgKiBAdHlwZSBYaW5oYS5Db25maWcKKwkJICovCisgICAgdGhpcy5jb25maWcgPSBuZXcgWGluaGEuQ29uZmlnKCk7CisgIH0KKyAgZWxzZQorICB7CisgICAgdGhpcy5jb25maWcgPSBjb25maWc7CisgIH0KKworICBpZiAoIHR5cGVvZiB0ZXh0YXJlYSAhPSAnb2JqZWN0JyApCisgIHsKKyAgICB0ZXh0YXJlYSA9IFhpbmhhLmdldEVsZW1lbnRCeUlkKCd0ZXh0YXJlYScsIHRleHRhcmVhKTsKKyAgfQorICAvKiogVGhpcyBwcm9wZXJ0eSByZWZlcmVuY2VzIHRoZSBvcmlnaW5hbCB0ZXh0YXJlYSwgd2hpY2ggaXMgYXQgdGhlIHNhbWUgdGltZSB0aGUgZWRpdG9yIGluIHRleHQgbW9kZQorICAgKiBAdHlwZSBEb21Ob2RlIHRleHRhcmVhCisgICAqLworICB0aGlzLl90ZXh0QXJlYSA9IHRleHRhcmVhOworICB0aGlzLl90ZXh0QXJlYS5zcGVsbGNoZWNrID0gZmFsc2U7CisgIFhpbmhhLmZyZWVMYXRlcih0aGlzLCAnX3RleHRBcmVhJyk7CisgIAorICAvLyAKKyAgLyoqIEJlZm9yZSB3ZSBtb2RpZnkgYW55dGhpbmcsIGdldCB0aGUgaW5pdGlhbCB0ZXh0YXJlYSBzaXplCisgICAqIEBwcml2YXRlCisgICAqIEB0eXBlIE9iamVjdCB3LGggCisgICAqLworICB0aGlzLl9pbml0aWFsX3RhX3NpemUgPQorICB7CisgICAgdzogdGV4dGFyZWEuc3R5bGUud2lkdGggID8gdGV4dGFyZWEuc3R5bGUud2lkdGggIDogKCB0ZXh0YXJlYS5vZmZzZXRXaWR0aCAgPyAoIHRleHRhcmVhLm9mZnNldFdpZHRoICArICdweCcgKSA6ICggdGV4dGFyZWEuY29scyArICdlbScpICksCisgICAgaDogdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID8gdGV4dGFyZWEuc3R5bGUuaGVpZ2h0IDogKCB0ZXh0YXJlYS5vZmZzZXRIZWlnaHQgPyAoIHRleHRhcmVhLm9mZnNldEhlaWdodCArICdweCcgKSA6ICggdGV4dGFyZWEucm93cyArICdlbScpICkKKyAgfTsKKworICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkaW5nXyIgKyB0ZXh0YXJlYS5pZCkgfHwgdGhpcy5jb25maWcuc2hvd0xvYWRpbmcgKQorICB7CisgICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZGluZ18iICsgdGV4dGFyZWEuaWQpKQorICAgIHsKKyAgICAgIFhpbmhhLmNyZWF0ZUxvYWRpbmdNZXNzYWdlKHRleHRhcmVhKTsKKyAgICB9CisgICAgdGhpcy5zZXRMb2FkaW5nTWVzc2FnZShYaW5oYS5fbGMoIkNvbnN0cnVjdGluZyBvYmplY3QiKSk7CisgIH0KKworICAvKiogdGhlIGN1cnJlbnQgZWRpdGluZyBtb2RlCisgICogQHByaXZhdGUgCisgICogQHR5cGUgc3RyaW5nICJ3eXNpd3lnInwidGV4dCIKKyAgKi8KKyAgdGhpcy5fZWRpdE1vZGUgPSAid3lzaXd5ZyI7CisgIC8qKiB0aGlzIG9iamVjdCBob2xkcyB0aGUgcGx1Z2lucyB1c2VkIGluIHRoZSBlZGl0b3IKKyAgKiBAcHJpdmF0ZSAKKyAgKiBAdHlwZSBPYmplY3QKKyAgKi8KKyAgdGhpcy5wbHVnaW5zID0ge307CisgIC8qKiBwZXJpb2RpY2FsbHkgdXBkYXRlcyB0aGUgdG9vbGJhcgorICAqIEBwcml2YXRlIAorICAqIEB0eXBlIHRpbWVvdXQKKyAgKi8KKyAgdGhpcy5fdGltZXJUb29sYmFyID0gbnVsbDsKKyAgLyoqIHBlcmlvZGljYWxseSB0YWtlcyBhIHNuYXBzaG90IG9mIHRoZSBjdXJyZW50IGVkaXRvciBjb250ZW50CisgICogQHByaXZhdGUgCisgICogQHR5cGUgdGltZW91dAorICAqLworICB0aGlzLl90aW1lclVuZG8gPSBudWxsOworICAvKiogaG9sZHMgdGhlIHVuZG8gc25hcHNob3RzCisgICogQHByaXZhdGUgCisgICogQHR5cGUgQXJyYXkKKyAgKi8KKyAgdGhpcy5fdW5kb1F1ZXVlID0gW3RoaXMuY29uZmlnLnVuZG9TdGVwc107CisgIC8qKiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgdW5kbyBxdWV1ZSAKKyAgKiBAcHJpdmF0ZSAKKyAgKiBAdHlwZSBpbnRlZ2VyCisgICovCisgIHRoaXMuX3VuZG9Qb3MgPSAtMTsKKyAgLyoqIHVzZSBvdXIgb3duIHVuZG8gaW1wbGVtZW50YXRpb24gKHRydWUpIG9yIHRoZSBicm93c2VyJ3MgKGZhbHNlKSAKKyAgKiBAcHJpdmF0ZSAKKyAgKiBAdHlwZSBCb29sZWFuCisgICovCisgIHRoaXMuX2N1c3RvbVVuZG8gPSB0cnVlOworICAvKiogdGhlIGRvY3VtZW50IG9iamVjdCBvZiB0aGUgcGFnZSBYaW5oYSBpcyBlbWJlZGRlZCBpbgorICAqIEBwcml2YXRlIAorICAqIEB0eXBlIGRvY3VtZW50CisgICovCisgIHRoaXMuX21kb2MgPSBkb2N1bWVudDsgLy8gY2FjaGUgdGhlIGRvY3VtZW50LCB3ZSBuZWVkIGl0IGluIHBsdWdpbnMKKyAgLyoqIGRvY3R5cGUgb2YgdGhlIGVkaXRlZCBkb2N1bWVudCAoZnVsbHBhZ2UgbW9kZSkKKyAgKiBAcHJpdmF0ZSAKKyAgKiBAdHlwZSBzdHJpbmcKKyAgKi8KKyAgdGhpcy5kb2N0eXBlID0gJyc7CisgIC8qKiBydW5uaW5nIG51bWJlciB0aGF0IGlkZW50aWZpZXMgdGhlIGN1cnJlbnQgZWRpdG9yCisgICogQHB1YmxpYyAKKyAgKiBAdHlwZSBpbnRlZ2VyCisgICovCisgIHRoaXMuX19odG1sYXJlYV9pZF9udW0gPSBfX3hpbmhhcy5sZW5ndGg7CisgIF9feGluaGFzW3RoaXMuX19odG1sYXJlYV9pZF9udW1dID0gdGhpczsKKwkKKyAgLyoqIGhvbGRzIHRoZSBldmVudHMgZm9yIHVzZSB3aXRoIHRoZSBub3RpZnlPbi9ub3RpZnlPZiBzeXN0ZW0KKyAgKiBAcHJpdmF0ZSAKKyAgKiBAdHlwZSBPYmplY3QKKyAgKi8KKyAgdGhpcy5fbm90aWZ5TGlzdGVuZXJzID0ge307CisKKyAgLy8gUGFuZWxzCisgIHZhciBwYW5lbHMgPSAKKyAgeworICAgIHJpZ2h0OgorICAgIHsKKyAgICAgIG9uOiB0cnVlLAorICAgICAgY29udGFpbmVyOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpLAorICAgICAgcGFuZWxzOiBbXQorICAgIH0sCisgICAgbGVmdDoKKyAgICB7CisgICAgICBvbjogdHJ1ZSwKKyAgICAgIGNvbnRhaW5lcjogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKSwKKyAgICAgIHBhbmVsczogW10KKyAgICB9LAorICAgIHRvcDoKKyAgICB7CisgICAgICBvbjogdHJ1ZSwKKyAgICAgIGNvbnRhaW5lcjogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKSwKKyAgICAgIHBhbmVsczogW10KKyAgICB9LAorICAgIGJvdHRvbToKKyAgICB7CisgICAgICBvbjogdHJ1ZSwKKyAgICAgIGNvbnRhaW5lcjogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKSwKKyAgICAgIHBhbmVsczogW10KKyAgICB9CisgIH07CisKKyAgZm9yICggdmFyIGkgaW4gcGFuZWxzICkKKyAgeworICAgIGlmKCFwYW5lbHNbaV0uY29udGFpbmVyKSB7IGNvbnRpbnVlOyB9IC8vIHByZXZlbnQgaXRlcmF0aW5nIG92ZXIgd3JvbmcgdHlwZQorICAgIHBhbmVsc1tpXS5kaXYgPSBwYW5lbHNbaV0uY29udGFpbmVyOyAvLyBsZWdhY3kKKyAgICBwYW5lbHNbaV0uY29udGFpbmVyLmNsYXNzTmFtZSA9ICdwYW5lbHMgcGFuZWxzXycgKyBpOworICAgIFhpbmhhLmZyZWVMYXRlcihwYW5lbHNbaV0sICdjb250YWluZXInKTsKKyAgICBYaW5oYS5mcmVlTGF0ZXIocGFuZWxzW2ldLCAnZGl2Jyk7CisgIH0KKyAgLyoqIGhvbGRzIHRoZSBwYW5lbHMKKyAgKiBAcHJpdmF0ZSAKKyAgKiBAdHlwZSBBcnJheQorICAqLworICAvLyBmaW5hbGx5IHN0b3JlIHRoZSB2YXJpYWJsZQorICB0aGlzLl9wYW5lbHMgPSBwYW5lbHM7CisJCisgIC8vIEluaXQgc29tZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIGRlZmluZWQgbGF0ZXIKKyAgLyoqIFRoZSBzdGF0dXNiYXIgY29udGFpbmVyCisgICAqIEB0eXBlIERvbU5vZGUgc3RhdHVzYmFyIGRpdgorICAgKi8KKyAgdGhpcy5fc3RhdHVzQmFyID0gbnVsbDsKKyAgLyoqIFRoZSBET00gcGF0aCB0aGF0IGlzIHNob3duIGluIHRoZSBzdGF0dXNiYXIgaW4gd3lzaXd5ZyBtb2RlCisgICAqIEBwcml2YXRlCisgICAqIEB0eXBlIERvbU5vZGUKKyAgICovCisgIHRoaXMuX3N0YXR1c0JhclRyZWUgPSBudWxsOworICAvKiogVGhlIG1lc3NhZ2UgdGhhdCBpcyBzaG93biBpbiB0aGUgc3RhdHVzYmFyIGluIHRleHQgbW9kZQorICAgKiBAcHJpdmF0ZQorICAgKiBAdHlwZSBEb21Ob2RlCisgICAqLworICB0aGlzLl9zdGF0dXNCYXJUZXh0TW9kZSA9IG51bGw7CisgIC8qKiBIb2xkcyB0aGUgaXRlbXMgb2YgdGhlIERPTSBwYXRoIHRoYXQgaXMgc2hvd24gaW4gdGhlIHN0YXR1c2JhciBpbiB3eXNpd3lnIG1vZGUKKyAgICogQHByaXZhdGUKKyAgICogQHR5cGUgQXJyYXkgdGFnIG5hbWVzCisgICAqLworICB0aGlzLl9zdGF0dXNCYXJJdGVtcyA9IFtdOworICAvKiogSG9sZHMgdGhlIHBhcnRzICh0YWJsZSBjZWxscykgb2YgdGhlIFVJICh0b29sYmFyLCBwYW5lbHMsIHN0YXR1c2JhcikKKworICAgKiBAdHlwZSBPYmplY3QgZnJhbWV3b3JrIHBhcnRzCisgICAqLworICB0aGlzLl9mcmFtZXdvcmsgPSB7fTsKKyAgLyoqIFRoZW0gd2hvbGUgdGhpbmcgKHRhYmxlKQorICAgKiBAcHJpdmF0ZQorICAgKiBAdHlwZSBEb21Ob2RlCisgICAqLworICB0aGlzLl9odG1sQXJlYSA9IG51bGw7CisgIC8qKiBUaGlzIGlzIHRoZSBhY3R1YWwgZWRpdGFibGUgYXJlYS48YnIgLz4KKyAgICogIFRlY2huaWNhbGx5IGl0J3MgYW4gaWZyYW1lIHRoYXQncyBtYWRlIGVkaXRhYmxlIHVzaW5nIHdpbmRvdy5kZXNpZ25Nb2RlID0gJ29uJywgcmVzcGVjdGl2ZWx5IGRvY3VtZW50LmJvZHkuY29udGVudEVkaXRhYmxlID0gdHJ1ZSAoSUUpLjxiciAvPgorICAgKiAgVXNlIHRoaXMgcHJvcGVydHkgdG8gZ2V0IGEgZ3JpcCBvbiB0aGUgaWZyYW1lJ3Mgd2luZG93IGZlYXR1cmVzPGJyIC8+CisgICAqCisgICAqIEB0eXBlIHdpbmRvdworICAgKi8KKyAgdGhpcy5faWZyYW1lID0gbnVsbDsKKyAgLyoqIFRoZSBkb2N1bWVudCBvYmplY3Qgb2YgdGhlIGlmcmFtZS48YnIgLz4KKyAgKiAgIFVzZSB0aGlzIHByb3BlcnR5IHRvIHBlcmZvcm0gRE9NIG9wZXJhdGlvbnMgb24gdGhlIGVkaXRlZCBkb2N1bWVudAorICAqIEB0eXBlIGRvY3VtZW50CisgICovCisgIHRoaXMuX2RvYyA9IG51bGw7CisgIC8qKiBUaGUgdG9vbGJhcgorICAgKiAgQHByaXZhdGUKKyAgICogIEB0eXBlIERvbU5vZGUgCisgICAqLworICB0aGlzLl90b29sQmFyID0gdGhpcy5fdG9vbGJhciA9IG51bGw7IC8vLl90b29sYmFyIGlzIGZvciBsZWdhY3ksIC5fdG9vbEJhciBpcyBiZXR0ZXIgdGhhbmtzLgorICAvKiogSG9sZHMgdGhlIGJvdHRvbiBvYmplY3RzCisgICAqICBAcHJpdmF0ZQorICAgKiAgQHR5cGUgT2JqZWN0CisgICAqLworICB0aGlzLl90b29sYmFyT2JqZWN0cyA9IHt9OworICAKKyAgLy9ob29rIGluIGNvbmZpZy5FdmVudHMgYXMgYXMgYSAicGx1Z2luIgorICB0aGlzLnBsdWdpbnMuRXZlbnRzID0gCisgIHsKKyAgICBuYW1lOiAnRXZlbnRzJywKKyAgICBkZXZlbG9wZXIgOiAnVGhlIFhpbmhhIENvcmUgRGV2ZWxvcGVyIFRlYW0nLAorICAgIGluc3RhbmNlOiBjb25maWcuRXZlbnRzCisgIH07Cit9OworLy8gcmF5OiBXaGF0IGlzIHRoaXMgZm9yPyBEbyB3ZSBuZWVkIGl0PworWGluaGEub25sb2FkID0gZnVuY3Rpb24oKSB7IH07CitYaW5oYS5pbml0ID0gZnVuY3Rpb24oKSB7IFhpbmhhLm9ubG9hZCgpOyB9OworCisvLyBjYWNoZSBzb21lIHJlZ2V4cHMKKy8qKiBJZGVudGlmaWVzIEhUTUwgdGFnIG5hbWVzCisqIEB0eXBlIFJlZ0V4cAorKi8KK1hpbmhhLlJFX3RhZ05hbWUgID0gLyg8XC98PClccyooW14gXHRcbj5dKykvaWc7CisvKiogRXhyYWN0cyBET0NUWVBFIHN0cmluZyBmcm9tIEhUTUwKKyogQHR5cGUgUmVnRXhwCisqLworWGluaGEuUkVfZG9jdHlwZSAgPSAvKDwhZG9jdHlwZSgoLnxcbikqPyk+KVxuPy9pOworLyoqIEZpbmRzIGhlYWQgc2VjdGlvbiBpbiBIVE1MCisqIEB0eXBlIFJlZ0V4cAorKi8KK1hpbmhhLlJFX2hlYWQgICAgID0gLzxoZWFkPigoLnxcbikqPyk8XC9oZWFkPi9pOworLyoqIEZpbmRzIGJvZHkgc2VjdGlvbiBpbiBIVE1MCisqIEB0eXBlIFJlZ0V4cAorKi8KK1hpbmhhLlJFX2JvZHkgICAgID0gLzxib2R5W14+XSo+KCgufFxufFxyfFx0KSo/KTxcL2JvZHk+L2k7CisvKiogU3BlY2lhbCBjaGFyYWN0ZXJzIHRoYXQgbmVlZCB0byBiZSBlc2NhcGVkIHdoZW4gZHluYW1pY2FsbHkgY3JlYXRpbmcgYSBSZWdFeHAgZnJvbSBhbiBhcmJ0cmFyeSBzdHJpbmcKKyogQHByaXZhdGUKKyogQHR5cGUgUmVnRXhwCisqLworWGluaGEuUkVfU3BlY2lhbHMgPSAvKFtcL1xeJCorPy4oKXx7fVxbXF1dKS9nOworLyoqIFdoZW4gZHluYW1pY2FsbHkgY3JlYXRpbmcgYSBSZWdFeHAgZnJvbSBhbiBhcmJ0cmFyeSBzdHJpbmcsIHNvbWUgY2hhcmFjdGVzIHRoYXQgaGF2ZSBzcGVjaWFsIG1lYW5pbmdzIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaGF2ZSB0byBiZSBlc2NhcGVkLgorKiAgIFJ1biBhbnkgc3RyaW5nIHRocm91Z2ggdGhpcyBmdW5jdGlvbiB0byBlc2NhcGUgcmVzZXJ2ZWQgY2hhcmFjdGVycy4KKyogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyB0aGUgc3RyaW5nIHRvIGJlIGVzY2FwZWQKKyogQHJldHVybnMgc3RyaW5nCisqLworWGluaGEuZXNjYXBlU3RyaW5nRm9yUmVnRXhwID0gZnVuY3Rpb24gKHN0cmluZykKK3sKKyAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKFhpbmhhLlJFX1NwZWNpYWxzLCAnXFwkMScpOworfTsKKy8qKiBJZGVudGlmaWVzIGVtYWlsIGFkZHJlc3NlcworKiBAdHlwZSBSZWdFeHAKKyovCitYaW5oYS5SRV9lbWFpbCAgICA9IC9eW19hLXpcZFwtXC5dezMsfUBbX2EtelxkXC1dezIsfShcLltfYS16XGRcLV17Mix9KSskL2k7CisvKiogSWRlbnRpZmllcyBVUkxzCisqIEB0eXBlIFJlZ0V4cAorKi8KK1hpbmhhLlJFX3VybCAgICAgID0gLyhodHRwcz86XC9cLyk/KChbYS16MC05X10rOlthLXowLTlfXStAKT9bYS16MC05X1wtXXsyLH0oXC5bYS16MC05X1wtXXsyLH0pezIsfSg6WzAtOV0rKT8oXC9cUyspKikvaTsKKworLyoqIFRoaXMgb2JqZWN0IHJlY29yZHMgZm9yIGtub3duIHBsdWdpbnMgd2hlcmUgdGhleSBjYW4gYmUgZm91bmQKKyAqICB0aGlzIGlzIHVzZWQgYnkgbG9hZFBsdWdpbiB0byBhdm9pZCBoYXZpbmcgdG8gdGVzdCBtdWx0aXBsZSBsb2NhdGlvbnMKKyAqICB3aGVuIHdlIGNhbiByZWFzb25hYmx5IGtub3cgd2hlcmUgdGhlIHBsdWdpbiBpcyBiZWNhdXNlIGl0IGlzCisgKiAgcGFydCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiAgVGhpcyBiZWNvbWVzIGltcG9ydGFudCBiZWNhdXNlIG9mIENvUlMgYW5kIGEgcHJvYmxlbSB3aXRoIEFtYXpvbiBTMworICogIGluIHdoaWNoIGl0IGRvZXMgbm90IHBvcm9kdWNlIGEgbmVjZXNzYXJ5IGhlYWRlciB0byBDaHJvbWUgaWYgQ2hyb21lCisgKiAgZmlyc3QgcmVxdWVzdHMgYSBzY3JpcHQgYXMgcGFydCBvZiBsb2FkaW5nIGEgPHNjcmlwdD4gYW5kIHRoZW4KKyAqICAicGluZ3MiIHdpdGggWE1MSFRUUFJlcXVlc3QsIGRlcGVuZGluZyBvbiB0aGF0IGJpdCBvZiBhIHJhY2UtY29uZGl0aW9uCisgKiAgd2hpY2ggb25lIGhpdHMgY2FjaGUgZmlyc3QgdGhpbmdzIGNhbiBnbyB3b25reS4KKyAqIAorICogIEJ5IGF2b2lkaW5nIHRoZSBuZWVkIHRvIHBpbmcgdGhpbmdzIGluIHRoZSBkaXN0cmlidXRpb24sIHdlIHNob3VsZAorICogIG5vdCBoYXZlIHRoYXQgcHJvYmxlbSBJIHRoaW5rLgorICovCisKK1hpbmhhLnBsdWdpbk1hbmlmZXN0ID0geworICBBYmJyZXZpYXRpb246ICAgICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKydwbHVnaW5zL0FiYnJldmlhdGlvbi9BYmJyZXZpYXRpb24uanMnIH0sCisgIEFib3V0Qm94OiAgICAgICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ21vZHVsZXMvQWJvdXRCb3gvQWJvdXRCb3guanMnIH0sCisgIEJhY2tncm91bmRJbWFnZTogICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL0JhY2tncm91bmRJbWFnZS5qcycgfSwKKyAgQ2hhcmFjdGVyTWFwOiAgICAgICAgIHsgdXJsOiBfZWRpdG9yX3VybCsncGx1Z2lucy9DaGFyYWN0ZXJNYXAvQ2hhcmFjdGVyTWFwLmpzJyB9LAorICBDaGFyQ291bnRlcjogICAgICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKydwbHVnaW5zL0NoYXJDb3VudGVyL0NoYXJDb3VudGVyLmpzJyB9LAorICBDbGllbnRzaWRlU3BlbGxjaGVjazogeyB1cmw6IF9lZGl0b3JfdXJsKyd1bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL0NsaWVudHNpZGVTcGVsbGNoZWNrLmpzJyB9LAorICBDb2xvclBpY2tlcjogICAgICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKydtb2R1bGVzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLmpzJyB9LAorICBDb250ZXh0TWVudTogICAgICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKydwbHVnaW5zL0NvbnRleHRNZW51L0NvbnRleHRNZW51LmpzJyB9LAorICBDcmVhdGVMaW5rOiAgICAgICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKydtb2R1bGVzL0NyZWF0ZUxpbmsvbGluay5qcycgfSwKKyAgQ1NTRHJvcERvd25zOiAgICAgICAgIHsgdXJsOiBfZWRpdG9yX3VybCsncGx1Z2lucy9DU1NEcm9wRG93bnMvQ1NTRHJvcERvd25zLmpzJyB9LAorICBDU1NQaWNrZXI6ICAgICAgICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKydwbHVnaW5zL0NTU1BpY2tlci9DU1NQaWNrZXIuanMnIH0sCisgIERlZmluaXRpb25MaXN0OiAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3BsdWdpbnMvRGVmaW5pdGlvbkxpc3QvRGVmaW5pdGlvbkxpc3QuanMnIH0sCisgIERpYWxvZ3M6ICAgICAgICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ21vZHVsZXMvRGlhbG9ncy9kaWFsb2cuanMnIH0sCisgIERvdWJsZUNsaWNrOiAgICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3Vuc3VwcG9ydGVkX3BsdWdpbnMvRG91YmxlQ2xpY2svRG91YmxlQ2xpY2suanMnIH0sCisgIER5bmFtaWNDU1M6ICAgICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3BsdWdpbnMvRHluYW1pY0NTUy9EeW5hbWljQ1NTLmpzJyB9LAorICBFZGl0VGFnOiAgICAgICAgICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKydwbHVnaW5zL0VkaXRUYWcvRWRpdFRhZy5qcycgfSwKKyAgRW5jb2RlT3V0cHV0OiAgICAgICAgIHsgdXJsOiBfZWRpdG9yX3VybCsncGx1Z2lucy9FbmNvZGVPdXRwdXQvRW5jb2RlT3V0cHV0LmpzJyB9LAorICBFcXVhdGlvbjogICAgICAgICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKydwbHVnaW5zL0VxdWF0aW9uL0VxdWF0aW9uLmpzJyB9LAorICBFeHRlbmRlZEZpbGVNYW5hZ2VyOiAgeyB1cmw6IF9lZGl0b3JfdXJsKyd1bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvRXh0ZW5kZWRGaWxlTWFuYWdlci5qcycgfSwKKyAgRmFuY3lTZWxlY3RzOiAgICAgICAgIHsgdXJsOiBfZWRpdG9yX3VybCsncGx1Z2lucy9GYW5jeVNlbGVjdHMvRmFuY3lTZWxlY3RzLmpzJyB9LAorICBGaWx0ZXI6ICAgICAgICAgICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKyd1bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9GaWx0ZXIuanMnIH0sCisgIEZpbmRSZXBsYWNlOiAgICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3BsdWdpbnMvRmluZFJlcGxhY2UvRmluZFJlcGxhY2UuanMnIH0sCisgIEZvcm1PcGVyYXRpb25zOiAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3BsdWdpbnMvRm9ybU9wZXJhdGlvbnMvRm9ybU9wZXJhdGlvbnMuanMnIH0sCisgIEZvcm1zOiAgICAgICAgICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3BsdWdpbnMvRm9ybXMvRm9ybXMuanMnIH0sCisgIEZ1bGxQYWdlOiAgICAgICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3BsdWdpbnMvRnVsbFBhZ2UvRnVsbFBhZ2UuanMnIH0sCisgIEZ1bGxTY3JlZW46ICAgICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ21vZHVsZXMvRnVsbFNjcmVlbi9mdWxsLXNjcmVlbi5qcycgfSwKKyAgR2Vja286ICAgICAgICAgICAgICAgIHsgdXJsOiBfZWRpdG9yX3VybCsnbW9kdWxlcy9HZWNrby9HZWNrby5qcycgfSwKKyAgR2VuZXJpY1BsdWdpbjogICAgICAgIHsgdXJsOiBfZWRpdG9yX3VybCsncGx1Z2lucy9HZW5lcmljUGx1Z2luL0dlbmVyaWNQbHVnaW4uanMnIH0sCisgIEdldEh0bWw6ICAgICAgICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3BsdWdpbnMvR2V0SHRtbC9HZXRIdG1sLmpzJyB9LAorICBIb3Jpem9udGFsUnVsZTogICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKydwbHVnaW5zL0hvcml6b250YWxSdWxlL0hvcml6b250YWxSdWxlLmpzJyB9LAorICBIdG1sRW50aXRpZXM6ICAgICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKydwbHVnaW5zL0h0bWxFbnRpdGllcy9IdG1sRW50aXRpZXMuanMnIH0sCisgIEh0bWxUaWR5OiAgICAgICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvSHRtbFRpZHkuanMnIH0sCisgIEltYWdlTWFuYWdlcjogICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL0ltYWdlTWFuYWdlci5qcycgfSwKKyAgSW5saW5lU3R5bGVyOiAgICAgICAgIHsgdXJsOiBfZWRpdG9yX3VybCsnbW9kdWxlcy9JbmxpbmVTdHlsZXIvSW5saW5lU3R5bGVyLmpzJyB9LAorICBJbnNlcnRBbmNob3I6ICAgICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKydwbHVnaW5zL0luc2VydEFuY2hvci9JbnNlcnRBbmNob3IuanMnIH0sCisgIEluc2VydEltYWdlOiAgICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ21vZHVsZXMvSW5zZXJ0SW1hZ2UvaW5zZXJ0X2ltYWdlLmpzJyB9LAorICBJbnNlcnRNYXJxdWVlOiAgICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKyd1bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvSW5zZXJ0TWFycXVlZS5qcycgfSwKKyAgSW5zZXJ0Tm90ZTogICAgICAgICAgIHsgdXJsOiBfZWRpdG9yX3VybCsncGx1Z2lucy9JbnNlcnROb3RlL0luc2VydE5vdGUuanMnIH0sCisgIEluc2VydFBhZ2VicmVhazogICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3BsdWdpbnMvSW5zZXJ0UGFnZWJyZWFrL0luc2VydFBhZ2VicmVhay5qcycgfSwKKyAgSW5zZXJ0UGljdHVyZTogICAgICAgIHsgdXJsOiBfZWRpdG9yX3VybCsndW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL0luc2VydFBpY3R1cmUuanMnIH0sCisgIEluc2VydFNtaWxleTogICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3BsdWdpbnMvSW5zZXJ0U21pbGV5L0luc2VydFNtaWxleS5qcycgfSwKKyAgSW5zZXJ0U25pcHBldDI6ICAgICAgIHsgdXJsOiBfZWRpdG9yX3VybCsncGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9JbnNlcnRTbmlwcGV0Mi5qcycgfSwKKyAgSW5zZXJ0U25pcHBldDogICAgICAgIHsgdXJsOiBfZWRpdG9yX3VybCsncGx1Z2lucy9JbnNlcnRTbmlwcGV0L0luc2VydFNuaXBwZXQuanMnIH0sCisgIEluc2VydFRhYmxlOiAgICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ21vZHVsZXMvSW5zZXJ0VGFibGUvaW5zZXJ0X3RhYmxlLmpzJyB9LAorICBJbnNlcnRXb3JkczogICAgICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKydwbHVnaW5zL0luc2VydFdvcmRzL0luc2VydFdvcmRzLmpzJyB9LAorICBJbnRlcm5ldEV4cGxvcmVyOiAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKydtb2R1bGVzL0ludGVybmV0RXhwbG9yZXIvSW50ZXJuZXRFeHBsb3Jlci5qcycgfSwKKyAgTGFuZ01hcmtzOiAgICAgICAgICAgIHsgdXJsOiBfZWRpdG9yX3VybCsncGx1Z2lucy9MYW5nTWFya3MvTGFuZ01hcmtzLmpzJyB9LAorICBMaW5rZXI6ICAgICAgICAgICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKydwbHVnaW5zL0xpbmtlci9MaW5rZXIuanMnIH0sCisgIExpc3RPcGVyYXRpb25zOiAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3BsdWdpbnMvTGlzdE9wZXJhdGlvbnMvTGlzdE9wZXJhdGlvbnMuanMnIH0sCisgIExpc3RUeXBlOiAgICAgICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3BsdWdpbnMvTGlzdFR5cGUvTGlzdFR5cGUuanMnIH0sCisgIE1vb3Rvb2xzRmlsZU1hbmFnZXI6ICB7IHVybDogX2VkaXRvcl91cmwrJ3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9Nb290b29sc0ZpbGVNYW5hZ2VyLmpzJyB9LAorICBOb3RlU2VydmVyOiAgICAgICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKyd1bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvTm90ZVNlcnZlci5qcycgfSwKKyAgT3BlcmE6ICAgICAgICAgICAgICAgIHsgdXJsOiBfZWRpdG9yX3VybCsnbW9kdWxlcy9PcGVyYS9PcGVyYS5qcycgfSwKKyAgUGFzdGVUZXh0OiAgICAgICAgICAgIHsgdXJsOiBfZWRpdG9yX3VybCsncGx1Z2lucy9QYXN0ZVRleHQvUGFzdGVUZXh0LmpzJyB9LAorICBQZXJzaXN0ZW50U3RvcmFnZTogICAgeyB1cmw6IF9lZGl0b3JfdXJsKyd1bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL1BlcnNpc3RlbnRTdG9yYWdlLmpzJyB9LAorICBQcmVzZXJ2ZVNjcmlwdHM6ICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKydwbHVnaW5zL1ByZXNlcnZlU2NyaXB0cy9QcmVzZXJ2ZVNjcmlwdHMuanMnIH0sCisgIFByZXNlcnZlU2VsZWN0aW9uOiAgICB7IHVybDogX2VkaXRvcl91cmwrJ3BsdWdpbnMvUHJlc2VydmVTZWxlY3Rpb24vUHJlc2VydmVTZWxlY3Rpb24uanMnIH0sCisgIFBTRml4ZWQ6ICAgICAgICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNGaXhlZC9QU0ZpeGVkLmpzJyB9LAorICBQU0xvY2FsOiAgICAgICAgICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKyd1bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvUFNMb2NhbC5qcycgfSwKKyAgUFNTZXJ2ZXI6ICAgICAgICAgICAgIHsgdXJsOiBfZWRpdG9yX3VybCsndW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9QU1NlcnZlci5qcycgfSwKKyAgUXVpY2tUYWc6ICAgICAgICAgICAgIHsgdXJsOiBfZWRpdG9yX3VybCsncGx1Z2lucy9RdWlja1RhZy9RdWlja1RhZy5qcycgfSwKKyAgU2F2ZU9uQmx1cjogICAgICAgICAgIHsgdXJsOiBfZWRpdG9yX3VybCsncGx1Z2lucy9TYXZlT25CbHVyL1NhdmVPbkJsdXIuanMnIH0sCisgIFNhdmVTdWJtaXQ6ICAgICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3BsdWdpbnMvU2F2ZVN1Ym1pdC9TYXZlU3VibWl0LmpzJyB9LAorICBTZXRJZDogICAgICAgICAgICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKydwbHVnaW5zL1NldElkL1NldElkLmpzJyB9LAorICBTbWFydFJlcGxhY2U6ICAgICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKydwbHVnaW5zL1NtYXJ0UmVwbGFjZS9TbWFydFJlcGxhY2UuanMnIH0sCisgIFNwZWxsQ2hlY2tlcjogICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL1NwZWxsQ2hlY2tlci5qcycgfSwKKyAgU3R5bGlzdDogICAgICAgICAgICAgIHsgdXJsOiBfZWRpdG9yX3VybCsncGx1Z2lucy9TdHlsaXN0L1N0eWxpc3QuanMnIH0sCisgIFN1cGVyQ2xlYW46ICAgICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3BsdWdpbnMvU3VwZXJDbGVhbi9TdXBlckNsZWFuLmpzJyB9LAorICBUYWJsZU9wZXJhdGlvbnM6ICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKydwbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9UYWJsZU9wZXJhdGlvbnMuanMnIH0sCisgIFRlbXBsYXRlOiAgICAgICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvVGVtcGxhdGUuanMnIH0sCisgIFVuRm9ybWF0OiAgICAgICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvVW5Gb3JtYXQuanMnIH0sCisgIFVuc2F2ZWRDaGFuZ2VzOiAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3BsdWdpbnMvVW5zYXZlZENoYW5nZXMvVW5zYXZlZENoYW5nZXMuanMnIH0sCisgIFdlYktpdFJlc2l6ZTogICAgICAgICB7IHVybDogX2VkaXRvcl91cmwrJ3BsdWdpbnMvV2ViS2l0UmVzaXplL1dlYktpdFJlc2l6ZS5qcycgfSwKKyAgV2ViS2l0OiAgICAgICAgICAgICAgIHsgdXJsOiBfZWRpdG9yX3VybCsnbW9kdWxlcy9XZWJLaXQvV2ViS2l0LmpzJyB9LAorICBXeXNpd3lnV3JhcDogICAgICAgICAgeyB1cmw6IF9lZGl0b3JfdXJsKydwbHVnaW5zL1d5c2l3eWdXcmFwL1d5c2l3eWdXcmFwLmpzJyB9Cit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgY3JlYXRlcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSBYaW5oYSBjb25zdHJ1Y3RvciBhcyBhIHBhcmFtZXRlci4KKyAqIFNldCB0aGUgb2JqZWN0J3MgcHJvcGVydGllcyBhcyB5b3UgbmVlZCB0byBjb25maWd1cmUgdGhlIGVkaXRvciAodG9vbGJhciBldGMuKQorICogQHZlcnNpb24gJFJldjogMTQzMyAkICRMYXN0Q2hhbmdlZERhdGU6IDIwMTgtMDMtMjkgMTE6MTM6MjUgKzEzMDAgKFRodSwgMjkgTWFyIDIwMTgpICQKKyAqIEBjb25zdHJ1Y3RvcgorICovCitYaW5oYS5Db25maWcgPSBmdW5jdGlvbigpCit7CisgIC8qKiBUaGUgc3ZuIHJldmlzaW9uIG51bWJlciAKKyAgICogQHR5cGUgTnVtYmVyCisgICAqLworICB0aGlzLnZlcnNpb24gPSBYaW5oYS52ZXJzaW9uLlJldmlzaW9uOworICAKKyAvKiogVGhpcyBwcm9wZXJ0eSBjb250cm9scyB0aGUgd2lkdGggb2YgdGhlIGVkaXRvci48YnIgLz4KKyAgKiAgQWxsb3dlZCB2YWx1ZXMgYXJlICdhdXRvJywgJ3Rvb2xiYXInIG9yIGEgbnVtZXJpYyB2YWx1ZSBmb2xsb3dlZCBieSAicHgiLjxiciAvPgorICAqICA8Y29kZT5hdXRvPC9jb2RlPjogbGV0IFhpbmhhIGNob29zZSB0aGUgd2lkdGggdG8gdXNlLjxiciAvPgorICAqICA8Y29kZT50b29sYmFyPC9jb2RlPjogY29tcHV0ZSB0aGUgd2lkdGggc2l6ZSBmcm9tIHRoZSB0b29sYmFyIHdpZHRoLjxiciAvPgorICAqICA8Y29kZT5udW1lcmljIHZhbHVlPC9jb2RlPjogZm9yY2VkIHdpZHRoIGluIHBpeGVscyAoJzYwMHB4JykuPGJyIC8+CisgICogCisgICogIERlZmF1bHQ6IDxjb2RlPiJhdXRvIjwvY29kZT4KKyAgKiBAdHlwZSBTdHJpbmcKKyAgKi8KKyAgdGhpcy53aWR0aCAgPSAiYXV0byI7CisgLyoqIFRoaXMgcHJvcGVydHkgY29udHJvbHMgdGhlIGhlaWdodCBvZiB0aGUgZWRpdG9yLjxiciAvPgorICAqICBBbGxvd2VkIHZhbHVlcyBhcmUgJ2F1dG8nIG9yIGEgbnVtZXJpYyB2YWx1ZSBmb2xsb3dlZCBieSBweC48YnIgLz4KKyAgKiAgPGNvZGU+ImF1dG8iPC9jb2RlPjogbGV0IFhpbmhhIGNob29zZSB0aGUgaGVpZ2h0IHRvIHVzZS48YnIgLz4KKyAgKiAgPGNvZGU+bnVtZXJpYyB2YWx1ZTwvY29kZT46IGZvcmNlZCBoZWlnaHQgaW4gcGl4ZWxzICgnMjAwcHgnKS48YnIgLz4KKyAgKiAgRGVmYXVsdDogPGNvZGU+ImF1dG8iPC9jb2RlPiAKKyAgKiBAdHlwZSBTdHJpbmcKKyAgKi8KKyAgdGhpcy5oZWlnaHQgPSAiYXV0byI7CisKKyAgLyoqIFRoaXMgcHJvcGVydHkgYWxsb3dzIHRoZSB1c2VyIHRvIGRyYWctcmVzaXplIHRoZSBpZnJhbWUsIGlmIAorICAgKiB0aGUgYnJvd3NlciBzdXBwb3J0cyBpdC4gIEN1cnJlbnRseSBDaHJvbWUgYW5kIE9wZXJhIHNlZW0gdG8gd29yaworICAgKiBvayB3aXRoIHRoaXMsIHdoaWxlIEZpcmVmb3ggZG9lc24ndCBzdXBwb3J0IHRoZSBDU1MgcmVzaXplIGZvciBpZnJhbWUKKyAgICogCisgICAqIFRoZXJlIGlzIGEgQnVnemlsbGEgYnVnIGFib3V0IGl0Li4uCisgICAqICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4MDgyMworICAgKiAKKyAgICogSUUsIGFuZCBFZGdlIGRvbid0IHN1cHBvcnQgdGhlIGNzcyByZXNpemUgcHJvcGVydHkgYXQgYWxsLgorICAgKiAKKyAgICogIFNhZmFyaSA5LjEuMSBhY3RzIGEgYml0IHdlaXJkLCB1bnVzYWJsZQorICAgKiAgU2FmYXJpIDExLjAuMyB3b3JrcyBvayBidXQgeW91IGNhbiBvbmx5IGluY3JlYXNlIHRoZSBzaXplCisgICAqIAorICAgKiBAdHlwZSBCb29sZWFuCisgICAqLworICAKKyAgdGhpcy5yZXNpemFibGVFZGl0b3IgPSBmYWxzZTsKKyAgCisgLyoqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSB0b29sYmFyIHNob3VsZCBiZSBpbmNsdWRlZAorICAqICBpbiB0aGUgc2l6ZSwgb3IgYXJlIGV4dHJhIHRvIGl0LiAgSWYgZmFsc2UgdGhlbiBpdCdzIHJlY29tbWVuZGVkCisgICogIHRvIGhhdmUgdGhlIHNpemUgc2V0IGFzIGV4cGxpY2l0IHBpeGVsIHNpemVzIChlaXRoZXIgaW4gWGluaGEuQ29uZmlnIG9yIG9uIHlvdXIgdGV4dGFyZWEpPGJyIC8+CisgICoKKyAgKiAgRGVmYXVsdDogPGNvZGU+dHJ1ZTwvY29kZT4KKyAgKgorICAqICBAdHlwZSBCb29sZWFuCisgICovCisgIHRoaXMuc2l6ZUluY2x1ZGVzQmFycyA9IHRydWU7CisgLyoqCisgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHBhbmVscyBzaG91bGQgYmUgaW5jbHVkZWQKKyAgKiBpbiB0aGUgc2l6ZSwgb3IgYXJlIGV4dHJhIHRvIGl0LiAgSWYgZmFsc2UgdGhlbiBpdCdzIHJlY29tbWVuZGVkCisgICogdG8gaGF2ZSB0aGUgc2l6ZSBzZXQgYXMgZXhwbGljaXQgcGl4ZWwgc2l6ZXMgKGVpdGhlciBpbiBYaW5oYS5Db25maWcgb3Igb24geW91ciB0ZXh0YXJlYSk8YnIgLz4KKyAgKiAgCisgICogIERlZmF1bHQ6IDxjb2RlPnRydWU8L2NvZGU+CisgICoKKyAgKiAgQHR5cGUgQm9vbGVhbgorICAqLworICB0aGlzLnNpemVJbmNsdWRlc1BhbmVscyA9IHRydWU7CisKKyAvKioKKyAgKiBlYWNoIG9mIHRoZSBwYW5lbHMgaGFzIGEgZGltZW5zaW9uLCBmb3IgdGhlIGxlZnQvcmlnaHQgaXQncyB0aGUgd2lkdGgKKyAgKiBmb3IgdGhlIHRvcC9ib3R0b20gaXQncyB0aGUgaGVpZ2h0LgorICAqCisgICogV0FSTklORzogUEFORUwgRElNRU5TSU9OUyBNVVNUIEJFIFNQRUNJRklFRCBBUyBQSVhFTCBXSURUSFM8YnIgLz4KKyAgKkRlZmF1bHQgdmFsdWVzOiAgCisgICo8cHJlPgorICAqCSAgeGluaGFfY29uZmlnLnBhbmVsX2RpbWVuc2lvbnMgPQorICAqICAgeworICAqCSAgICBsZWZ0OiAgICcyMDBweCcsIC8vIFdpZHRoCisgICoJICAgIHJpZ2h0OiAgJzIwMHB4JywKKyAgKgkgICAgdG9wOiAgICAnMTAwcHgnLCAvLyBIZWlnaHQKKyAgKgkgICAgYm90dG9tOiAnMTAwcHgnCisgICoJICB9CisgICo8L3ByZT4KKyAgKiAgQHR5cGUgT2JqZWN0CisgICovCisgIHRoaXMucGFuZWxfZGltZW5zaW9ucyA9CisgIHsKKyAgICBsZWZ0OiAgICcyMDBweCcsIC8vIFdpZHRoCisgICAgcmlnaHQ6ICAnMjAwcHgnLAorICAgIHRvcDogICAgJzEwMHB4JywgLy8gSGVpZ2h0CisgICAgYm90dG9tOiAnMTAwcHgnCisgIH07CisKKyAvKiogIFRvIG1ha2UgdGhlIGlmcmFtZSB3aWR0aCBuYXJyb3dlciB0aGFuIHRoZSB0b29sYmFyIHdpZHRoLCBlLmcuIHRvIG1haW50YWluCisgICogICB0aGUgbGF5b3V0IHdoZW4gZWRpdGluZyBhIG5hcnJvdyBjb2x1bW4gb2YgdGV4dCwgc2V0IHRoZSBuZXh0IHBhcmFtZXRlciAoaW4gcGl4ZWxzKS48YnIgLz4KKyAgKgorICAqICBEZWZhdWx0OiA8Y29kZT50cnVlPC9jb2RlPgorICAqCisgICogIEB0eXBlIEludGVnZXJ8bnVsbAorICAqLworICB0aGlzLmlmcmFtZVdpZHRoID0gbnVsbDsKKyAKKyAvKiogRW5hYmxlIGNyZWF0aW9uIG9mIHRoZSBzdGF0dXMgYmFyPzxiciAvPgorICAqCisgICogIERlZmF1bHQ6IDxjb2RlPnRydWU8L2NvZGU+CisgICoKKyAgKiAgQHR5cGUgQm9vbGVhbiAKKyAgKi8KKyAgdGhpcy5zdGF0dXNCYXIgPSB0cnVlOworCisgLyoqIEludGVyY2VwdCBeViBhbmQgdXNlIHRoZSBYaW5oYSBwYXN0ZSBjb21tYW5kCisgICogIElmIGZhbHNlLCB0aGVuIHBhc3NlcyBeViB0aHJvdWdoIHRvIGJyb3dzZXIgZWRpdG9yIHdpZGdldCwgd2hpY2ggaXMgdGhlIG9ubHkgd2F5IGl0IHdvcmtzIHdpdGhvdXQgcHJvYmxlbXMgaW4gTW96aWxsYTxiciAvPgorICAqCisgICogIERlZmF1bHQ6IDxjb2RlPmZhbHNlPC9jb2RlPgorICAqCisgICogIEB0eXBlIEJvb2xlYW4KKyAgKi8KKyAgdGhpcy5odG1sYXJlYVBhc3RlID0gZmFsc2U7CisgIAorIC8qKiA8c3Ryb25nPkdlY2tvIG9ubHk6PC9zdHJvbmc+IExldCB0aGUgYnVpbHQtaW4gcm91dGluZSBmb3IgaGFuZGxpbmcgdGhlIDxlbT5yZXR1cm48L2VtPiBrZXkgZGVjaWRlIGlmIHRvIGVudGVyIDxlbT5icjwvZW0+IG9yIDxlbT5wPC9lbT4gdGFncywKKyAgKiAgb3IgdXNlIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uLjxiciAvPgorICAqICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJ1bGVzIGFwcGxpZWQgYnkgR2Vja28sIDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvZWRpdG9yL3J1bGVzLmh0bWwiPnNlZSBNb3ppbGxhIHdlYnNpdGU8L2E+IDxiciAvPgorICAqICBQb3NzaWJsZSB2YWx1ZXMgYXJlIDxlbT5idWlsdC1pbjwvZW0+IG9yIDxlbT5iZXN0PC9lbT48YnIgLz4KKyAgKgorICAqICBEZWZhdWx0OiA8Y29kZT4iYmVzdCI8L2NvZGU+CisgICoKKyAgKiAgQHR5cGUgU3RyaW5nCisgICovCisgIHRoaXMubW96UGFyYUhhbmRsZXIgPSAnYmVzdCc7IAorICAKKyAvKiogVGhpcyBkZXRlcm1pbmVzIHRoZSBtZXRob2QgaG93IHRoZSBIVE1MIG91dHB1dCBpcyBnZW5lcmF0ZWQuCisgICogIFRoZXJlIGFyZSB0d28gY2hvaWNlczoKKyAgKiAKKyAgKjx0YWJsZSBib3JkZXI9IjEiPgorICAqICAgPHRyPgorICAqICAgICAgIDx0ZD48ZW0+RE9Nd2FsazwvZW0+PC90ZD4KKyAgKiAgICAgICA8dGQ+VGhpcyBpcyB0aGUgY2xhc3NpYyBhbmQgcHJvdmVuIG1ldGhvZC4gSXQgcmVjdXNpdmVseSB0cmF2ZXJzZXMgdGhlIERPTSB0cmVlIAorICAqICAgICAgICAgICBhbmQgYnVpbGRzIHRoZSBIVE1MIHN0cmluZyAiZnJvbSBzY3JhdGNoIi4gVGVuZHMgdG8gYmUgYSBiaXQgc2xvdywgZXNwZWNpYWxseSBpbiBJRS48L3RkPgorICAqICAgPC90cj4KKyAgKiAgIDx0cj4KKyAgKiAgICAgICA8dGQ+PGVtPlRyYW5zZm9ybUlubmVySFRNTDwvZW0+PC90ZD4KKyAgKiAgICAgICA8dGQ+VGhpcyBtZXRob2QgdXNlcyB0aGUgSmF2YVNjcmlwdCBpbm5lckhUTUwgcHJvcGVydHkgYW5kIHJlbGllcyBvbiBSZWd1bGFyIEV4cHJlc3Npb25zIHRvIHByb2R1Y2UKKyAgKiAgICAgICAgICAgIGNsZWFuIFhIVE1MIG91dHB1dC4gVGhpcyBtZXRob2QgaXMgbXVjaCBmYXN0ZXIgdGhhbiB0aGUgb3RoZXIgb25lLjwvdGQ+CisgICogICAgIDwvdHI+CisgICogPC90YWJsZT4KKyAgKgorICAqICBEZWZhdWx0OiA8Y29kZT4iRE9Nd2FsayI8L2NvZGU+CisgICoKKyAgKiBAdHlwZSBTdHJpbmcKKyAgKi8KKyAgdGhpcy5nZXRIdG1sTWV0aG9kID0gJ0RPTXdhbGsnOworICAKKyAgLyoqIE1heGltdW0gc2l6ZSBvZiB0aGUgdW5kbyBxdWV1ZTxiciAvPgorICAgKiAgRGVmYXVsdDogPGNvZGU+MjA8L2NvZGU+CisgICAqICBAdHlwZSBJbnRlZ2VyCisgICAqLworICB0aGlzLnVuZG9TdGVwcyA9IDIwOworCisgIC8qKiBUaGUgdGltZSBpbnRlcnZhbCBhdCB3aGljaCB1bmRvIHNhbXBsZXMgYXJlIHRha2VuPGJyIC8+CisgICAqICBEZWZhdWx0OiA8Y29kZT41MDA8L2NvZGU+ICgxLzIgc2VjKQorICAgKiAgQHR5cGUgSW50ZWdlciBtaWxsaXNlY29uZHMKKyAgICovCisgIHRoaXMudW5kb1RpbWVvdXQgPSA1MDA7CisKKyAgLyoqIFNldCB0aGlzIHRvIHRydWUgaWYgeW91IHdhbnQgdG8gZXhwbGljaXRseSByaWdodC1qdXN0aWZ5IHdoZW4gc2V0dGluZyB0aGUgdGV4dCBkaXJlY3Rpb24gdG8gcmlnaHQtdG8tbGVmdDxiciAvPgorICAgKiAgRGVmYXVsdDogPGNvZGU+ZmFsc2U8L2NvZGU+CisgICAqICBAdHlwZSBCb29sZWFuCisgICAqLworICB0aGlzLmNoYW5nZUp1c3RpZnlXaXRoRGlyZWN0aW9uID0gZmFsc2U7CisKKyAgLyoqIElmIHRydWUgdGhlbiBYaW5oYSB3aWxsIHJldHJpZXZlIHRoZSBmdWxsIEhUTUwsIHN0YXJ0aW5nIHdpdGggdGhlICZsdDtIVE1MJmd0OyB0YWcuPGJyIC8+CisgICAqICBEZWZhdWx0OiA8Y29kZT5mYWxzZTwvY29kZT4KKyAgICogIEB0eXBlIEJvb2xlYW4KKyAgICovCisgIHRoaXMuZnVsbFBhZ2UgPSBmYWxzZTsKKworICAvKiogUmF3IHN0eWxlIGRlZmluaXRpb25zIGluY2x1ZGVkIGluIHRoZSBlZGl0ZWQgZG9jdW1lbnQ8YnIgLz4KKyAgICogIFdoZW4gYSBsb3Qgb2YgaW5saW5lIHN0eWxlIGlzIHVzZWQsIHBlcmhhcHMgaXQgaXMgd2lzZXIgdG8gdXNlIG9uZSBvciBtb3JlIGV4dGVybmFsIHN0eWxlc2hlZXRzLjxiciAvPgorICAgKiAgVG8gc2V0IHRhZ3MgUCBpbiByZWQsIEgxIGluIGJsdWUgYW5kbiBBIG5vdCB1bmRlcmxpbmVkLCB3ZSBtYXkgZG8gdGhlIGZvbGxvd2luZworICAgKjxwcmU+CisgICAqIHhpbmhhX2NvbmZpZy5wYWdlU3R5bGUgPQorICAgKiAgJ3AgeyBjb2xvcjpyZWQ7IH1cbicgKworICAgKiAgJ2gxIHsgY29sb3I6YmxldTsgfVxuJyArCisgICAqICAnYSB7dGV4dC1kZWNvcmF0aW9uOm5vbmU7IH0nOworICAgKjwvcHJlPgorICAgKiAgRGVmYXVsdDogPGNvZGU+IiI8L2NvZGU+IChlbXB0eSkKKyAgICogIEB0eXBlIFN0cmluZworICAgKi8KKyAgdGhpcy5wYWdlU3R5bGUgPSAiIjsKKworICAvKiogQXJyYXkgb2YgZXh0ZXJuYWwgc3R5bGVzaGVldHMgdG8gbG9hZC4gKFJlZmVyZW5jZSB0aGVzZSBhYnNvbHV0ZWx5KTxiciAvPgorICAgKiAgRXhhbXBsZTxiciAvPgorICAgKiAgPHByZT54aW5oYV9jb25maWcucGFnZVN0eWxlU2hlZXRzID0gWyIvY3NzL215UGFnZXNTdHlsZVNoZWV0LmNzcyIsIi9jc3MvYW5vdGhlck9uZS5jc3MiXTs8L3ByZT4KKyAgICogIERlZmF1bHQ6IDxjb2RlPltdPC9jb2RlPiAoZW1wdHkpCisgICAqICBAdHlwZSBBcnJheQorICAgKi8KKyAgdGhpcy5wYWdlU3R5bGVTaGVldHMgPSBbXTsKKworICAvLyBzcGVjaWZ5IGEgYmFzZSBocmVmIGZvciByZWxhdGl2ZSBsaW5rcworICAvKiogU3BlY2lmeSBhIGJhc2UgaHJlZiBmb3IgcmVsYXRpdmUgbGlua3M8YnIgLz4KKyAgICogIEFUVEVOVElPTjogdGhpcyBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkIGFuZCBuZWVkcyB0IGJlIGNoYW5nZWQsIHNlZSBUaWNrZXQgIzk2MSA8YnIgLz4KKyAgICogIERlZmF1bHQ6IDxjb2RlPm51bGw8L2NvZGU+CisgICAqICBAdHlwZSBTdHJpbmd8bnVsbAorICAgKi8KKyAgdGhpcy5iYXNlSHJlZiA9IG51bGw7CisKKyAgLyoqIElmIHRydWUsIHJlbGF0aXZlIFVSTHMgKC4uLykgd2lsbCBiZSBtYWRlIGFic29sdXRlLiAKKyAgICogCisgICAqICBXaGVuIHRoZSBlZGl0b3IgaXMgaW4gZGlmZmVyZW50IGRpcmVjdG9yeSBkZXB0aCBhcyB0aGUgZWRpdGVkIHBhZ2UgcmVsYXRpdmUgCisgICAqICAgaW1hZ2Ugc291cmNlcyB3aWxsIGJyZWFrIHRoZSBkaXNwbGF5IG9mIHlvdXIgaW1hZ2VzLgorICAgKiAKKyAgICogIFRoaXMgZml4ZXMgYW4gaXNzdWUgd2hlcmUgTW96aWxsYSBjb252ZXJ0cyB0aGUgdXJscyBvZiBpbWFnZXMgYW5kIGxpbmtzIHRoYXQgCisgICAqICAgYXJlIG9uIHRoZSBzYW1lIHNlcnZlciB0byByZWxhdGl2ZSBvbmVzICguLi8pIHdoZW4gZHJhZ2dpbmcgdGhlbSBhcm91bmQgaW4gCisgICAqICAgdGhlIGVkaXRvciAoVGlja2V0ICM0NDgpPGJyIC8+CisgICAqIAorICAgKiAgTm90ZSB0aGF0IHNldHRpbmcgdG8gdHJ1ZSB3aWxsIG5vdCBleHBhbmQgZGlyZWN0bHkgcmVsYXRpdmUgcGF0aHMKKyAgICogICAiZm9vL2Jhci5odG1sIiB3aWxsIG5vdCBiZSBjaGFuZ2VkLiAgT25seSBwYXJlbnRhbCwgc2VsZi1yZWZlcmVudGlhbCBvciAKKyAgICogICBzZW1pLWFic29sdXRlIHBhdGhzIHdpdGggcGFyZW50YWwgb3Igc2VsZi1yZWZlcmVudGlhbCBjb21wb25lbnRzIHdpbGwgYmUgCisgICAqICAgYWRqdXN0ZWQsIHNvbWUgZXhhbXBsZXMgb2YgcGF0aHMgdGhpcyB3aWxsIGFmZmVjdAorICAgKiAKKyAgICogICAgICIvZm9vL2Jhci8uLi9mb28uaHRtbCIgLS0+IC9mb28vZm9vLmh0bWwKKyAgICogICAgICIvZm9vLy4vZm9vLmh0bWwiICAgICAgLS0+IC9mb28vZm9vLmh0bWwKKyAgICogICAgICIuL2Zvby5odG1sIiAgICAgICAtLT4gImZvby5odG1sIgorICAgKiAgICAgIi4uL2Zvby5odG1sIiAgICAgIC0tPiAiL2Zvby5odG1sIiAoYXNzdW1pbmcgLi4vIGVuZHMgdXAgYXQgdGhlIHJvb3Qgb3IgbG93ZXIpCisgICAqIAorICAgKiAgWW91IGNhbiBhbHNvIHNldCB0aGlzIHRvIHRoZSBzdHJpbmcgJ2FsbCcgYW5kIHRoaXMgd2lsbCBpbmNsdWRlIG5vbi1wYXJlbnRhbAorICAgKiAgIHJlbGF0aXZlIHVybHMuICBJIHRoaW5rIHRoaXMgaXMgcHJvYmFibHkgYSBiYWQgaWRlYSBhcyBpdCBtYXkgY2F1c2UgYnJva2VuIFVSTFMKKyAgICogICBlc3BlY2lhbGx5IHdoZW4gY29tYmluZWQgd2l0aCBzdHJpcEJhc2VIcmVmIG9yIGlmIHlvdSBmZWVkIGluIHN1Y2ggdXJscyBpbiB5b3VyCisgICAqICAgaHRtbC4KKyAgICogCisgICAqICBEZWZhdWx0OiA8Y29kZT50cnVlPC9jb2RlPgorICAgKiAgQHR5cGUgQm9vbGVhbnxTdHJpbmcKKyAgICovCisgIHRoaXMuZXhwYW5kUmVsYXRpdmVVcmwgPSB0cnVlOworICAgIAorIC8qKiAgV2UgY2FuIHN0cmlwIHRoZSBzZXJ2ZXIgcGFydCBvdXQgb2YgVVJMIHRvIG1ha2UvbGVhdmUgdGhlbSBzZW1pLWFic29sdXRlLCByZWFzb24gZm9yIHRoaXMKKyAgICogIGlzIHRoYXQgdGhlIGJyb3dzZXJzIHdpbGwgcHJlZml4ICB0aGUgc2VydmVyIHRvIGFueSByZWxhdGl2ZSBsaW5rcyB0byBtYWtlIHRoZW0gYWJzb2x1dGUsIAorICAgKiAgd2hpY2ggaXNuJ3Qgd2hhdCB5b3Ugd2FudCBtb3N0IHRoZSB0aW1lLjxiciAvPgorICAgKiAgRGVmYXVsdDogPGNvZGU+dHJ1ZTwvY29kZT4KKyAgICogIEB0eXBlIEJvb2xlYW4KKyAgICovCisgIHRoaXMuc3RyaXBCYXNlSHJlZiA9IHRydWU7CisKKyAgIC8qKiAgV2UgY2FuIHN0cmlwIHRoZSB1cmwgb2YgdGhlIGVkaXRvciBwYWdlIGZyb20gbmFtZWQgbGlua3MgKGVnICZsdDthIGhyZWY9IiN0b3AiJmd0Oy4uLiZsdDsvYSZndDspIGFuZCBsaW5rcyAKKyAgICogIHRoYXQgY29uc2lzdCBvbmx5IG9mIFVSTCBwYXJhbWV0ZXJzIChlZyAmbHQ7YSBocmVmPSI/cGFyYW1ldGVyPXZhbHVlIiZndDsuLi4mbHQ7L2EmZ3Q7KQorICAgKiAgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgYnJvd3NlcnMgdGVuZCB0byBwcmVmaXhlIGxvY2F0aW9uLmhyZWYgdG8gYW55IGhyZWYgdGhhdAorICAgKiAgdGhhdCBkb24ndCBoYXZlIGEgZnVsbCB1cmw8YnIgLz4KKyAgICogIERlZmF1bHQ6IDxjb2RlPnRydWU8L2NvZGU+CisgICAqICBAdHlwZSBCb29sZWFuCisgICAqLworICB0aGlzLnN0cmlwU2VsZk5hbWVkQW5jaG9ycyA9IHRydWU7CisKKyAgLyoqIEluIFVSTHMgYWxsIGNoYXJhY3RlcnMgYWJvdmUgQVNDSUkgdmFsdWUgMTI3IGhhdmUgdG8gYmUgZW5jb2RlZCB1c2luZyAlIGNvZGVzPGJyIC8+CisgICAqICBEZWZhdWx0OiA8Y29kZT50cnVlPC9jb2RlPgorICAgKiAgQHR5cGUgQm9vbGVhbgorICAgKi8KKyAgdGhpcy5vbmx5N0JpdFByaW50YWJsZXNJblVSTHMgPSB0cnVlOworCisgCisgIC8qKiBJZiB5b3UgYXJlIHB1dHRpbmcgdGhlIEhUTUwgd3JpdHRlbiBpbiBYaW5oYSBpbnRvIGFuIGVtYWlsIHlvdSBtaWdodCB3YW50IGl0IHRvIGJlIDctYml0CisgICAqICBjaGFyYWN0ZXJzIG9ubHkuICBUaGlzIGNvbmZpZyBvcHRpb24gd2lsbCBjb252ZXJ0IGFsbCBjaGFyYWN0ZXJzIGNvbnN1bWluZworICAgKiAgbW9yZSB0aGFuIDdiaXRzIGludG8gVU5JQ09ERSBkZWNpbWFsIGVudGl0eSByZWZlcmVuY2VzIChhY3R1YWxseSBpdCB3aWxsIGNvbnZlcnQgYW55dGhpbmcKKyAgICogIGJlbG93IDxzcGFjZT4gKGNociAyMCkgZXhjZXB0IGNyLCBsZiBhbmQgdGFiIGFuZCBhYm92ZSA8dGlsZGU+ICh+LCBjaHIgN0UpKTxiciAvPgorICAgKiAgRGVmYXVsdDogPGNvZGU+ZmFsc2U8L2NvZGU+CisgICAqICBAdHlwZSBCb29sZWFuCisgICAqLworICB0aGlzLnNldmVuQml0Q2xlYW4gPSBmYWxzZTsKKworCisgIC8qKiBTb21ldGltZXMgd2Ugd2FudCB0byBiZSBhYmxlIHRvIHJlcGxhY2Ugc29tZSBzdHJpbmcgaW4gdGhlIGh0bWwgY29taW5nIGluIGFuZCBnb2luZyBvdXQKKyAgICogIHNvIHRoYXQgaW4gdGhlIGVkaXRvciB3ZSB1c2UgdGhlICJpbnRlcm5hbCIgc3RyaW5nLCBhbmQgb3V0c2lkZSBhbmQgaW4gdGhlIHNvdXJjZSB2aWV3CisgICAqICB3ZSB1c2UgdGhlICJleHRlcm5hbCIgc3RyaW5nICB0aGlzIGlzIHVzZWZ1bCBmb3Igc2F5IG1ha2luZyBzcGVjaWFsIGNvZGVzIGZvcgorICAgKiAgeW91ciBhYnNvbHV0ZSBsaW5rcywgeW91ciBleHRlcm5hbCBzdHJpbmcgbWlnaHQgYmUgc29tZSBzcGVjaWFsIGNvZGUsIHNheSAie3NlcnZlcl91cmx9IgorICAgKiAgYW4geW91IHNheSB0aGF0IHRoZSBpbnRlcm5hbCByZXByZXNlbmF0dGlvbiBvZiB0aGF0IHNob3VsZCBiZSBodHRwOi8veW91ci5zZXJ2ZXIvPGJyIC8+CisgICAqICBFeGFtcGxlOiAgPGNvZGU+eyAnaHRtbF9zdHJpbmcnIDogJ3d5c2l3eWdfc3RyaW5nJyB9PC9jb2RlPjxiciAvPgorICAgKiAgRGVmYXVsdDogPGNvZGU+e308L2NvZGU+IChlbXB0eSkKKyAgICogIEB0eXBlIE9iamVjdAorICAgKi8KKyAgdGhpcy5zcGVjaWFsUmVwbGFjZW1lbnRzID0ge307IC8veyAnaHRtbF9zdHJpbmcnIDogJ3d5c2l3eWdfc3RyaW5nJyB9CisgIAorICAvKiogV2hlbiB0aGUgdXNlciBwcmVzc2VzIHRoZSBUYWIgaW4gdGhlIGVkaXRvciwgWGluaGEgd2lsbCBpbnNlcnQgYSBzcGFuLgorICAgKiAgd2l0aCB0aGUgZ2l2ZW4gY2xhc3MgYW5kIGNvbnRlbnRzLgorICAgKiAKKyAgICogIFlvdSBjYW4gc2V0IHRhYlNwYW5DbGFzcyB0byBmYWxzZSB0byBkaXNhYmxlIHRoaXMgZnVuY3Rpb24sIGluIHdoaWNoCisgICAqICAgIGNhc2UgdGFicyB3aWxsIGJlIGRpc2FibGVkIGluIFhpbmhhIChleGNlcHQgZm9yIGluIGxpc3RzIGlmIHlvdSBsb2FkIAorICAgKiAgICB0aGUgTGlzdE9wZXJhdGlvbnMgcGx1Z2luLgorICAgKi8KKyAgCisgIHRoaXMudGFiU3BhbkNsYXNzICAgID0gJ3hpbmhhLXRhYic7CisgIHRoaXMudGFiU3BhbkNvbnRlbnRzID0gJyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyc7CisgIAorICAvKiogQSBmaWx0ZXIgZnVuY3Rpb24gZm9yIHRoZSBIVE1MIHVzZWQgaW5zaWRlIHRoZSBlZGl0b3I8YnIgLz4KKyAgICogRGVmYXVsdDogZnVuY3Rpb24gKGh0bWwpIHsgcmV0dXJuIGh0bWwgfQorICAgKiAKKyAgICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgVGhlIHdob2xlIGRvY3VtZW50J3MgSFRNTCBjb250ZW50CisgICAqIEByZXR1cm4ge1N0cmluZ30gVGhlIHByb2Nlc3NlZCBIVE1MIAorICAgKi8KKyAgdGhpcy5pbndhcmRIdG1sID0gZnVuY3Rpb24gKGh0bWwpIHsgcmV0dXJuIGh0bWw7IH07CisgIAorICAvKiogQSBmaWx0ZXIgZnVuY3Rpb24gZm9yIHRoZSBnZW5lcmF0ZWQgSFRNTDxiciAvPgorICAgKiBEZWZhdWx0OiBmdW5jdGlvbiAoaHRtbCkgeyByZXR1cm4gaHRtbCB9CisgICAqIAorICAgKiBAcGFyYW0ge1N0cmluZ30gaHRtbCBUaGUgd2hvbGUgZG9jdW1lbnQncyBIVE1MIGNvbnRlbnQKKyAgICogQHJldHVybiB7U3RyaW5nfSBUaGUgcHJvY2Vzc2VkIEhUTUwgCisgICAqLworICB0aGlzLm91dHdhcmRIdG1sID0gZnVuY3Rpb24gKGh0bWwpIHsgcmV0dXJuIGh0bWw7IH07CisgIAorICAvKiogVGhpcyBzZXR0aW5nIGRldGVybWluZXMgd2hldGhlciBvciBub3QgdGhlIGVkaXRvciB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGVkIGFuZCBmb2N1c2VkIHdoZW4gdGhlIHBhZ2UgbG9hZHMuIAorICAgKiAgSWYgdGhlIHBhZ2UgY29udGFpbnMgb25seSBhIHNpbmdsZSBlZGl0b3IsIGF1dG9mb2N1cyBjYW4gYmUgc2V0IHRvIHRydWUgdG8gZm9jdXMgaXQuIAorICAgKiAgQWx0ZXJuYXRpdmVseSwgaWYgdGhlIHBhZ2UgY29udGFpbnMgbXVsdGlwbGUgZWRpdG9ycywgYXV0b2ZvY3VzIG1heSBiZSBzZXQgdG8gdGhlIElEIG9mIHRoZSB0ZXh0IGFyZWEgb2YgdGhlIGVkaXRvciB0byBiZSBmb2N1c2VkLiAKKyAgICogIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNldHRpbmcgd291bGQgZm9jdXMgdGhlIGVkaXRvciBhdHRhY2hlZCB0byB0aGUgdGV4dCBhcmVhIHdob3NlIElEIGlzICJteVRleHRBcmVhIjogCisgICAqICA8Y29kZT54aW5oYV9jb25maWcuYXV0b2ZvY3VzID0gIm15VGV4dEFyZWEiOzwvY29kZT4KKyAgICogIERlZmF1bHQ6IDxjb2RlPmZhbHNlPC9jb2RlPgorICAgKiAgQHR5cGUgQm9vbGVhbnxTdHJpbmcKKyAgICovCisgIHRoaXMuYXV0b2ZvY3VzID0gZmFsc2U7CisgIAorIC8qKiBTZXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCBXb3JkIGNvZGUgdG8gYmUgY2xlYW5lZCB1cG9uIFBhc3RlLiBUaGlzIG9ubHkgd29ya3MgaWYgCisgICAqIHlvdSB1c2UgdGhlIHRvb2xiciBidXR0b24gdG8gcGFzdGUsIG5vdCBeVi4gVGhpcyBtZWFucyB0aGF0IGR1ZSB0byB0aGUgcmVzdHJpY3Rpb25zCisgICAqIHJlZ2FyZGluZyBwYXN0aW5nLCB0aGlzIGFjdHVhbGx5IGhhcyBubyByZWFsIGVmZmVjdCBpbiBNb3ppbGxhIDxiciAvPgorICAgKiAgRGVmYXVsdDogPGNvZGU+dHJ1ZTwvY29kZT4KKyAgICogIEB0eXBlIEJvb2xlYW4KKyAgICovCisgIHRoaXMua2lsbFdvcmRPblBhc3RlID0gdHJ1ZTsKKworICAvKiogRW5hYmxlIHRoZSAnVGFyZ2V0JyBmaWVsZCBpbiB0aGUgTWFrZSBMaW5rIGRpYWxvZy4gTm90ZSB0aGF0IHRoZSB0YXJnZXQgYXR0cmlidXRlIGlzIGludmFsaWQgaW4gKFgpSFRNTCBzdHJpY3Q8YnIgLz4KKyAgICogIERlZmF1bHQ6IDxjb2RlPnRydWU8L2NvZGU+CisgICAqICBAdHlwZSBCb29sZWFuCisgICAqLworICB0aGlzLm1ha2VMaW5rU2hvd3NUYXJnZXQgPSB0cnVlOworCisgIC8qKiBDaGFyU2V0IG9mIHRoZSBpZnJhbWUsIGRlZmF1bHQgaXMgdGhlIGNoYXJzZXQgb2YgdGhlIGRvY3VtZW50CisgICAqICBAdHlwZSBTdHJpbmcKKyAgICovCisgIHRoaXMuY2hhclNldCA9ICh0eXBlb2YgZG9jdW1lbnQuY2hhcmFjdGVyU2V0ICE9ICd1bmRlZmluZWQnKSA/IGRvY3VtZW50LmNoYXJhY3RlclNldCA6IGRvY3VtZW50LmNoYXJzZXQ7CisKKyAvKiogV2hldGhlciB0aGUgZWRpdGVkIGRvY3VtZW50IHNob3VsZCBiZSByZW5kZXJlZCBpbiBRdWlya3Ntb2RlIG9yIFN0YW5kYXJkIENvbXBsaWFudCAoU3RyaWN0KSBNb2RlLjxiciAvPgorICAgKiBUaGlzIGlzIGNvbW1vbmx5IGtub3duIGFzIHRoZSAiZG9jdHlwZSBzd2l0Y2giPGJyIC8+CisgICAqIGZvciBkZXRhaWxzIHJlYWQgaGVyZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2Nzcy9xdWlya3Ntb2RlLmh0bWwKKyAgICoKKyAgICogUG9zc2libGUgdmFsdWVzOjxiciAvPgorICAgKiAgICB0cnVlICAgICA6ICBRdWlya3Ntb2RlIGlzIHVzZWQ8YnIgLz4KKyAgICogICAgZmFsc2UgICAgOiAgU3RyaWN0IG1vZGUgaXMgdXNlZDxiciAvPgorICAgKiAgICBudWxsIChkZWZhdWx0KTogIHRoZSBtb2RlIG9mIHRoZSBkb2N1bWVudCBYaW5oYSBpcyBpbiBpcyB1c2VkCisgICAqIEB0eXBlIEJvb2xlYW58bnVsbAorICAgKi8KKyAgdGhpcy5icm93c2VyUXVpcmtzTW9kZSA9IG51bGw7CisKKyAgLy8gVVJMLXMKKyAgdGhpcy5pbWdVUkwgPSAiaW1hZ2VzLyI7CisgIHRoaXMucG9wdXBVUkwgPSAicG9wdXBzLyI7CisKKyAgLyoqIFJlZ0V4cCBhbGxvd2luZyB0byByZW1vdmUgY2VydGFpbiBIVE1MIHRhZ3Mgd2hlbiByZW5kZXJpbmcgdGhlIEhUTUwuPGJyIC8+CisgICAqICBFeGFtcGxlOiByZW1vdmUgc3BhbiBhbmQgZm9udCB0YWdzCisgICAqICA8Y29kZT4KKyAgICogICAgeGluaGFfY29uZmlnLmh0bWxSZW1vdmVUYWdzID0gL3NwYW58Zm9udC87CisgICAqICA8L2NvZGU+CisgICAqICBEZWZhdWx0OiA8Y29kZT5udWxsPC9jb2RlPgorICAgKiAgQHR5cGUgUmVnRXhwfG51bGwKKyAgICovCisgIHRoaXMuaHRtbFJlbW92ZVRhZ3MgPSBudWxsOworCisgLyoqIFR1cm5pbmcgdGhpcyBvbiB3aWxsIHR1cm4gYWxsICJsaW5lYnJlYWsiIGFuZCAic2VwYXJhdG9yIiBpdGVtcyBpbiB5b3VyIHRvb2xiYXIgaW50byBzb2Z0LWJyZWFrcywKKyAgICogdGhpcyBtZWFucyB0aGF0IGlmIHRoZSBpdGVtcyBiZXR3ZWVuIHRoYXQgaXRlbSBhbmQgdGhlIG5leHQgbGluZWJyZWFrL3NlcGFyYXRvciBjYW4KKyAgICogZml0IG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhhdCB3aGljaCBjYW1lIGJlZm9yZSB0aGVuIHRoZXkgd2lsbCwgb3RoZXJ3aXNlIHRoZXkgd2lsbAorICAgKiBmbG9hdCBkb3duIHRvIHRoZSBuZXh0IGxpbmUuCisKKyAgICogSWYgeW91IHB1dCBhIGxpbmVicmVhayBhbmQgc2VwYXJhdG9yIG5leHQgdG8gZWFjaCBvdGhlciwgb25seSB0aGUgc2VwYXJhdG9yIHdpbGwKKyAgICogdGFrZSBlZmZlY3QsIHRoaXMgYWxsb3dzIHlvdSB0byBoYXZlIG9uZSB0b29sYmFyIHRoYXQgd29ya3MgZm9yIGJvdGggZmxvd1Rvb2xiYXJzID0gdHJ1ZSBhbmQgZmFsc2UKKyAgICogaW5mYWN0IHRoZSB0b29sYmFyIGJlbG93IGhhcyBiZWVuIGRlc2lnbmVkIGluIHRoaXMgd2F5LCBpZiBmbG93VG9vbGJhcnMgaXMgZmFsc2UgdGhlbiBpdCB3aWxsCisgICAqIGNyZWF0ZSBleHBsaWN0bHkgdHdvIGxpbmVzIChwbHVzIGFueSBvdGhlcnMgbWFkZSBieSBwbHVnaW5zKSBicmVha2luZyBhdCBqdXN0aWZ5bGVmdCwgaG93ZXZlciBpZgorICAgKiBmbG93VG9vbGJhcnMgaXMgZmFsc2UgYW5kIHlvdXIgd2luZG93IGlzIG5hcnJvdyBlbm91Z2ggdGhlbiBpdCB3aWxsIGNyZWF0ZSBtb3JlIHRoYW4gb25lIGxpbmUKKyAgICogZXZlbiBuZWF0ZXIsIGlmIHlvdSByZXNpemUgdGhlIHdpbmRvdyB0aGUgdG9vbGJhcnMgd2lsbCByZWZsb3cuICA8YnIgLz4KKyAgICogIERlZmF1bHQ6IDxjb2RlPnRydWU8L2NvZGU+CisgICAqICBAdHlwZSBCb29sZWFuCisgICAqLworICB0aGlzLmZsb3dUb29sYmFycyA9IHRydWU7CisgIAorICAvKiogU2V0IHRvIGNlbnRlciBvciByaWdodCB0byBjaGFuZ2UgYnV0dG9uIGFsaWdubWVudCBpbiB0b29sYmFyCisgICAqICBAdHlwZSBTdHJpbmcKKyAgICovCisgIHRoaXMudG9vbGJhckFsaWduID0gImxlZnQiOworICAKKyAgLyoqIFNldCB0byB0cnVlIHRvIGRpc3BsYXkgdGhlIGZvbnQgbmFtZXMgaW4gdGhlIHRvb2xiYXIgZm9udCBzZWxlY3QgbGlzdCBpbiB0aGVpciBhY3R1YWwgZm9udC4KKyAgICogIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3Qgd29yayBpbiBJRSwgYnV0IGRvZXNuJ3QgaHVydCBhbnl0aGluZyBlaXRoZXIuCisgICAqICBEZWZhdWx0OiA8Y29kZT5mYWxzZTwvY29kZT4KKyAgICogIEB0eXBlIEJvb2xlYW4KKyAgICovCisgICB0aGlzLnNob3dGb250U3R5bGVzSW5Ub29sYmFyID0gZmFsc2U7CisgIAorICAvKiogU2V0IHRvIHRydWUgaWYgeW91IHdhbnQgdGhlIGxvYWRpbmcgcGFuZWwgdG8gc2hvdyBhdCBzdGFydHVwPGJyIC8+CisgICAqICBEZWZhdWx0OiA8Y29kZT5mYWxzZTwvY29kZT4KKyAgICogIEB0eXBlIEJvb2xlYW4KKyAgICovCisgIHRoaXMuc2hvd0xvYWRpbmcgPSBmYWxzZTsKKyAgCisgIC8qKiBTZXQgdG8gZmFsc2UgaWYgeW91IHdhbnQgdG8gYWxsb3cgSmF2YVNjcmlwdCBpbiB0aGUgY29udGVudCwgb3RoZXJ3aXNlICZsdDtzY3JpcHQmZ3Q7IHRhZ3MgYXJlIHN0cmlwcGVkIG91dC48YnIgLz4KKyAgICogIFRoaXMgY3VycmVudGx5IG9ubHkgYWZmZWN0cyB0aGUgIkRPTXdhbGsiIGdldEh0bWxNZXRob2QuPGJyIC8+CisgICAqICBEZWZhdWx0OiA8Y29kZT50cnVlPC9jb2RlPgorICAgKiAgQHR5cGUgQm9vbGVhbgorICAgKi8KKyAgdGhpcy5zdHJpcFNjcmlwdHMgPSB0cnVlOworCisgLyoqIFNlZSBpZiB0aGUgdGV4dCBqdXN0IHR5cGVkIGxvb2tzIGxpa2UgYSBVUkwsIG9yIGVtYWlsIGFkZHJlc3MKKyAgICogYW5kIGxpbmsgaXQgYXBwcm9wcmlhdGx5CisgICAqIE5vdGU6IFNldHRpbmcgdGhpcyBvcHRpb24gdG8gZmFsc2Ugb25seSBhZmZlY3RzIE1vemlsbGEgYmFzZWQgYnJvd3NlcnMuCisgICAqIEluIEludGVybmV0RXhwbG9yZXIgdGhpcyBpcyBuYXRpdmUgYmVoYXZpb3VyIGFuZCBjYW5ub3QgYmUgdHVybmVkIG9mZi48YnIgLz4KKyAgICogIERlZmF1bHQ6IDxjb2RlPnRydWU8L2NvZGU+CisgICAqICBAdHlwZSBCb29sZWFuCisgICAqLworICAgdGhpcy5jb252ZXJ0VXJsc1RvTGlua3MgPSB0cnVlOworCisgLyoqIFNldCB0byB0cnVlIHRvIGhpZGUgbWVkaWEgb2JqZWN0cyB3aGVuIGEgZGl2LXR5cGUgZGlhbG9nIGJveCBpcyBvcGVuLCB0byBwcmV2ZW50IHNob3ctdGhyb3VnaAorICAqICBEZWZhdWx0OiA8Y29kZT5mYWxzZTwvY29kZT4KKyAgKiAgQHR5cGUgQm9vbGVhbgorICAqLworICB0aGlzLmhpZGVPYmplY3RzQmVoaW5kRGlhbG9ncyA9IGZhbHNlOworCisgLyoqIFNpemUgb2YgY29sb3IgcGlja2VyIGNlbGxzPGJyIC8+CisgICAqIFVzZSBudW1iZXIgKyAicHgiPGJyIC8+CisgICAqICBEZWZhdWx0OiA8Y29kZT4iNnB4IjwvY29kZT4KKyAgICogIEB0eXBlIFN0cmluZworICAgKi8KKyAgdGhpcy5jb2xvclBpY2tlckNlbGxTaXplID0gJzZweCc7CisgLyoqIEdyYW51bGFyaXR5IG9mIGNvbG9yIHBpY2tlciBjZWxscyAobnVtYmVyIHBlciBjb2x1bW4vcm93KTxiciAvPgorICAgKiAgRGVmYXVsdDogPGNvZGU+MTg8L2NvZGU+CisgICAqICBAdHlwZSBJbnRlZ2VyCisgICAqLworICB0aGlzLmNvbG9yUGlja2VyR3JhbnVsYXJpdHkgPSAxODsKKyAvKiogUG9zaXRpb24gb2YgY29sb3IgcGlja2VyIGZyb20gdG9vbGJhciBidXR0b248YnIgLz4KKyAgICogIERlZmF1bHQ6IDxjb2RlPiJib3R0b20scmlnaHQiPC9jb2RlPgorICAgKiAgQHR5cGUgU3RyaW5nCisgICAqLworICB0aGlzLmNvbG9yUGlja2VyUG9zaXRpb24gPSAnYm90dG9tLHJpZ2h0JzsKKyAgLyoqIFNldCB0byB0cnVlIHRvIHNob3cgb25seSB3ZWJzYWZlIGNoZWNrYm94IGluIHBpY2tlcjxiciAvPgorICAgKiAgRGVmYXVsdDogPGNvZGU+ZmFsc2U8L2NvZGU+CisgICAqICBAdHlwZSBCb29sZWFuCisgICAqLworICB0aGlzLmNvbG9yUGlja2VyV2ViU2FmZSA9IGZhbHNlOworIC8qKiBOdW1iZXIgb2YgcmVjZW50IGNvbG9ycyB0byByZW1lbWJlcjxiciAvPgorICAgKiAgRGVmYXVsdDogPGNvZGU+MjA8L2NvZGU+CisgICAqICBAdHlwZSBJbnRlZ2VyCisgICAqLworICB0aGlzLmNvbG9yUGlja2VyU2F2ZUNvbG9ycyA9IDIwOworCisgIC8qKiBTdGFydCB1cCB0aGUgZWRpdG9yIGluIGZ1bGxzY3JlZW4gbW9kZTxiciAvPgorICAgKiAgRGVmYXVsdDogPGNvZGU+ZmFsc2U8L2NvZGU+CisgICAqICBAdHlwZSBCb29sZWFuCisgICAqLworICB0aGlzLmZ1bGxTY3JlZW4gPSBmYWxzZTsKKyAgCisgLyoqIFlvdSBjYW4gdGVsbCB0aGUgZnVsbHNjcmVlbiBtb2RlIHRvIGxlYXZlIGNlcnRhaW4gbWFyZ2lucyBvbiBlYWNoIHNpZGUuPGJyIC8+CisgICAqICBUaGUgdmFsdWUgaXMgYW4gYXJyYXkgd2l0aCB0aGUgdmFsdWVzIGZvciA8Y29kZT5bdG9wLHJpZ2h0LGJvdHRvbSxsZWZ0XTwvY29kZT4gaW4gdGhhdCBvcmRlcjxiciAvPgorICAgKiAgRGVmYXVsdDogPGNvZGU+WzAsMCwwLDBdPC9jb2RlPgorICAgKiAgQHR5cGUgQXJyYXkKKyAgICovCisgIHRoaXMuZnVsbFNjcmVlbk1hcmdpbnMgPSBbMCwwLDAsMF07CisgIAorICAKKyAgLyoqIFNwZWNpZnkgdGhlIG1ldGhvZCB0aGF0IGlzIGJlaW5nIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBlZGl0b3IncyBzaXplPGJyLz4KKyAgICAqIHdoZW4gd2UgcmV0dXJuIGZyb20gZnVsbHNjcmVlbiBtb2RlLgorICAgICogIFRoZXJlIGFyZSB0d28gY2hvaWNlczoKKyAgICAqIAorICAgICogPHRhYmxlIGJvcmRlcj0iMSI+CisgICAgKiAgIDx0cj4KKyAgICAqICAgICAgIDx0ZD48ZW0+aW5pdFNpemU8L2VtPjwvdGQ+CisgICAgKiAgICAgICA8dGQ+VXNlIHRoZSBpbnRlcm5hbCBYaW5oYS5pbml0U2l6ZSgpIG1ldGhvZCB0byBjYWxjdWxhdGUgdGhlIGVkaXRvcidzIAorICAgICogICAgICAgZGltZW5zaW9ucy4gVGhpcyBpcyBzdWl0YWJsZSBmb3IgbW9zdCB1c2VjYXNlcy48L3RkPgorICAgICogICA8L3RyPgorICAgICogICA8dHI+CisgICAgKiAgICAgICA8dGQ+PGVtPnJlc3RvcmU8L2VtPjwvdGQ+CisgICAgKiAgICAgICA8dGQ+VGhlIGVkaXRvcidzIGRpbWVuc2lvbnMgd2lsbCBiZSBzdG9yZWQgYmVmb3JlIGdvaW5nIGludG8gZnVsbHNjcmVlbgorICAgICogICAgICAgbW9kZSBhbmQgcmVzdG9yZWQgd2hlbiB3ZSByZXR1cm4gdG8gbm9ybWFsIG1vZGUsIHRha2luZyBhIHBvc3NpYmxlCisgICAgKiAgICAgICB3aW5kb3cgcmVzaXplIGR1cmluZyBmdWxsc2NyZWVuIGluIGFjY291bnQuPC90ZD4KKyAgICAqICAgICA8L3RyPgorICAgICogPC90YWJsZT4KKyAgICAqCisgICAgKiBEZWZhdWx0OiA8Y29kZT4iaW5pdFNpemUiPC9jb2RlPgorICAgICogQHR5cGUgU3RyaW5nCisgICAgKi8KKyAgdGhpcy5mdWxsU2NyZWVuU2l6ZURvd25NZXRob2QgPSAnaW5pdFNpemUnOworICAKKyAgLyoqIFRoaXMgYXJyYXkgb3JkZXJzIGFsbCBidXR0b25zIGV4Y2VwdCBwbHVnaW4gYnV0dG9ucyBpbiB0aGUgdG9vbGJhci4gUGx1Z2luIGJ1dHRvbnMgdHlwaWNhbGx5IGxvb2sgZm9yIG9uZSAKKyAgICogIGEgY2VydGFpbiBidXR0b24gaW4gdGhlIHRvb2xiYXIgYW5kIHBsYWNlIHRoZW1zZWx2ZXMgbmV4dCB0byBpdC4KKyAgICogRGVmYXVsdCB2YWx1ZToKKyAgICo8cHJlPgorICAgKnhpbmhhX2NvbmZpZy50b29sYmFyID0KKyAgICogWworICAgKiAgIFsicG9wdXBlZGl0b3IiXSwKKyAgICogICBbInNlcGFyYXRvciIsImZvcm1hdGJsb2NrIiwiZm9udG5hbWUiLCJmb250c2l6ZSIsImJvbGQiLCJpdGFsaWMiLCJ1bmRlcmxpbmUiLCJzdHJpa2V0aHJvdWdoIl0sCisgICAqICAgWyJzZXBhcmF0b3IiLCJmb3JlY29sb3IiLCJoaWxpdGVjb2xvciIsInRleHRpbmRpY2F0b3IiXSwKKyAgICogICBbInNlcGFyYXRvciIsInN1YnNjcmlwdCIsInN1cGVyc2NyaXB0Il0sCisgICAqICAgWyJsaW5lYnJlYWsiLCJzZXBhcmF0b3IiLCJqdXN0aWZ5bGVmdCIsImp1c3RpZnljZW50ZXIiLCJqdXN0aWZ5cmlnaHQiLCJqdXN0aWZ5ZnVsbCJdLAorICAgKiAgIFsic2VwYXJhdG9yIiwiaW5zZXJ0b3JkZXJlZGxpc3QiLCJpbnNlcnR1bm9yZGVyZWRsaXN0Iiwib3V0ZGVudCIsImluZGVudCJdLAorICAgKiAgIFsic2VwYXJhdG9yIiwiaW5zZXJ0aG9yaXpvbnRhbHJ1bGUiLCJjcmVhdGVsaW5rIiwiaW5zZXJ0aW1hZ2UiLCJpbnNlcnR0YWJsZSJdLAorICAgKiAgIFsibGluZWJyZWFrIiwic2VwYXJhdG9yIiwidW5kbyIsInJlZG8iLCJzZWxlY3RhbGwiLCJwcmludCJdLCAoWGluaGEuaXNfZ2Vja28gPyBbXSA6IFsiY3V0IiwiY29weSIsInBhc3RlIiwib3ZlcndyaXRlIiwic2F2ZWFzIl0pLAorICAgKiAgIFsic2VwYXJhdG9yIiwia2lsbHdvcmQiLCJjbGVhcmZvbnRzIiwicmVtb3ZlZm9ybWF0IiwidG9nZ2xlYm9yZGVycyIsInNwbGl0YmxvY2siLCJsZWZ0dG9yaWdodCIsICJyaWdodHRvbGVmdCJdLAorICAgKiAgIFsic2VwYXJhdG9yIiwiaHRtbG1vZGUiLCJzaG93aGVscCIsImFib3V0Il0KKyAgICogXTsKKyAgICo8L3ByZT4KKyAgICogQHR5cGUgQXJyYXkKKyAgICovICAKKyAgdGhpcy50b29sYmFyID0KKyAgWworICAgIFsicG9wdXBlZGl0b3IiXSwKKyAgICBbInNlcGFyYXRvciIsImZvcm1hdGJsb2NrIiwiZm9udG5hbWUiLCJmb250c2l6ZSIsImJvbGQiLCJpdGFsaWMiLCJ1bmRlcmxpbmUiLCJzdHJpa2V0aHJvdWdoIl0sCisgICAgWyJzZXBhcmF0b3IiLCJmb3JlY29sb3IiLCJoaWxpdGVjb2xvciIsInRleHRpbmRpY2F0b3IiXSwKKyAgICBbInNlcGFyYXRvciIsInN1YnNjcmlwdCIsInN1cGVyc2NyaXB0Il0sCisgICAgWyJsaW5lYnJlYWsiLCJzZXBhcmF0b3IiLCJqdXN0aWZ5bGVmdCIsImp1c3RpZnljZW50ZXIiLCJqdXN0aWZ5cmlnaHQiLCJqdXN0aWZ5ZnVsbCJdLAorICAgIFsic2VwYXJhdG9yIiwiaW5zZXJ0b3JkZXJlZGxpc3QiLCJpbnNlcnR1bm9yZGVyZWRsaXN0Iiwib3V0ZGVudCIsImluZGVudCJdLAorICAgIFsic2VwYXJhdG9yIiwiaW5zZXJ0aG9yaXpvbnRhbHJ1bGUiLCJjcmVhdGVsaW5rIiwiaW5zZXJ0aW1hZ2UiLCJpbnNlcnR0YWJsZSJdLAorICAgIFsibGluZWJyZWFrIiwic2VwYXJhdG9yIiwidW5kbyIsInJlZG8iLCJzZWxlY3RhbGwiLCJwcmludCJdLCAoWGluaGEuaXNfZ2Vja28gPyBbXSA6IFsiY3V0IiwiY29weSIsInBhc3RlIiwib3ZlcndyaXRlIl0pLAorICAgIFsic2VwYXJhdG9yIiwia2lsbHdvcmQiLCJjbGVhcmZvbnRzIiwicmVtb3ZlZm9ybWF0IiwidG9nZ2xlYm9yZGVycyIsInNwbGl0YmxvY2siLCJsZWZ0dG9yaWdodCIsICJyaWdodHRvbGVmdCJdLAorICAgIFsic2VwYXJhdG9yIiwiaHRtbG1vZGUiLCJzaG93aGVscCIsImFib3V0Il0KKyAgXTsKKworICAvKiogVGhlIGZvbnRuYW1lcyBsaXN0ZWQgaW4gdGhlIGZvbnRuYW1lIGRyb3Bkb3duCisgICAqIERlZmF1bHQgdmFsdWU6CisgICAqPHByZT4KKyAgICp4aW5oYV9jb25maWcuZm9udG5hbWUgPQorICAgKnsKKyAgICogICImIzgyMTI7IGZvbnQgJiM4MjEyOyIgOiAnJywKKyAgICogICJBcmlhbCIgICAgICAgICAgICAgICAgOiAnYXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWYnLAorICAgKiAgIkNvdXJpZXIgTmV3IiAgICAgICAgICA6ICdjb3VyaWVyIG5ldyxjb3VyaWVyLG1vbm9zcGFjZScsCisgICAqICAiR2VvcmdpYSIgICAgICAgICAgICAgIDogJ2dlb3JnaWEsdGltZXMgbmV3IHJvbWFuLHRpbWVzLHNlcmlmJywKKyAgICogICJUYWhvbWEiICAgICAgICAgICAgICAgOiAndGFob21hLGFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmJywKKyAgICogICJUaW1lcyBOZXcgUm9tYW4iICAgICAgOiAndGltZXMgbmV3IHJvbWFuLHRpbWVzLHNlcmlmJywKKyAgICogICJWZXJkYW5hIiAgICAgICAgICAgICAgOiAndmVyZGFuYSxhcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZicsCisgICAqICAiSW1wYWN0IiAgICAgICAgICAgICAgIDogJ2ltcGFjdCcsCisgICAqICAiV2luZ0RpbmdzIiAgICAgICAgICAgIDogJ3dpbmdkaW5ncycKKyAgICp9OworICAgKjwvcHJlPgorICAgKiBAdHlwZSBPYmplY3QKKyAgICovCisgIHRoaXMuZm9udG5hbWUgPQorICB7CisgICAgIiYjODIxMjsgZm9udCAmIzgyMTI7IjogIiIsIC8vICYjODIxMjsgaXMgbWRhc2gKKyAgICAiQXJpYWwiICAgICAgICAgICA6CSdhcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZicsCisgICAgIkNvdXJpZXIgTmV3IiAgICAgOgknY291cmllciBuZXcsY291cmllcixtb25vc3BhY2UnLAorICAgICJHZW9yZ2lhIiAgICAgICAgIDoJJ2dlb3JnaWEsdGltZXMgbmV3IHJvbWFuLHRpbWVzLHNlcmlmJywKKyAgICAiVGFob21hIiAgICAgICAgICA6CSd0YWhvbWEsYXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWYnLAorICAgICJUaW1lcyBOZXcgUm9tYW4iIDogJ3RpbWVzIG5ldyByb21hbix0aW1lcyxzZXJpZicsCisgICAgIlZlcmRhbmEiICAgICAgICAgOgkndmVyZGFuYSxhcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZicsCisgICAgIkltcGFjdCIgICAgICAgICAgOgknaW1wYWN0JywKKyAgICAiV2luZ0RpbmdzIiAgICAgICA6ICd3aW5nZGluZ3MnIAorICB9OworCisgIC8qKiBUaGUgZm9udHNpemVzIGxpc3RlZCBpbiB0aGUgZm9udHNpemUgZHJvcGRvd24KKyAgICogRGVmYXVsdCB2YWx1ZToKKyAgICo8cHJlPgorICAgKnhpbmhhX2NvbmZpZy5mb250c2l6ZSA9CisgICAqeworICAgKiAgIiYjODIxMjsgc2l6ZSAmIzgyMTI7IjogIiIsCisgICAqICAiMSAoOCBwdCkiIDogIjEiLAorICAgKiAgIjIgKDEwIHB0KSI6ICIyIiwKKyAgICogICIzICgxMiBwdCkiOiAiMyIsCisgICAqICAiNCAoMTQgcHQpIjogIjQiLAorICAgKiAgIjUgKDE4IHB0KSI6ICI1IiwKKyAgICogICI2ICgyNCBwdCkiOiAiNiIsCisgICAqICAiNyAoMzYgcHQpIjogIjciCisgICAqfTsKKyAgICo8L3ByZT4KKyAgICogQHR5cGUgT2JqZWN0CisgICAqLworICB0aGlzLmZvbnRzaXplID0KKyAgeworICAgICImIzgyMTI7IHNpemUgJiM4MjEyOyI6ICIiLCAvLyAmIzgyMTI7IGlzIG1kYXNoCisgICAgIjEgKDggcHQpIiA6ICIxIiwKKyAgICAiMiAoMTAgcHQpIjogIjIiLAorICAgICIzICgxMiBwdCkiOiAiMyIsCisgICAgIjQgKDE0IHB0KSI6ICI0IiwKKyAgICAiNSAoMTggcHQpIjogIjUiLAorICAgICI2ICgyNCBwdCkiOiAiNiIsCisgICAgIjcgKDM2IHB0KSI6ICI3IgorICB9OworICAvKiogVGhlIHRhZ3MgbGlzdGVkIGluIHRoZSBmb3JtYXRibG9jayBkcm9wZG93bgorICAgKiBEZWZhdWx0IHZhbHVlOgorICAgKjxwcmU+CisgICAqeGluaGFfY29uZmlnLmZvcm1hdGJsb2NrID0KKyAgICp7CisgICAqICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICIiLCAvLyAmIzgyMTI7IGlzIG1kYXNoCisgICAqICAiSGVhZGluZyAxIjogImgxIiwKKyAgICogICJIZWFkaW5nIDIiOiAiaDIiLAorICAgKiAgIkhlYWRpbmcgMyI6ICJoMyIsCisgICAqICAiSGVhZGluZyA0IjogImg0IiwKKyAgICogICJIZWFkaW5nIDUiOiAiaDUiLAorICAgKiAgIkhlYWRpbmcgNiI6ICJoNiIsCisgICAqICAiTm9ybWFsIiAgIDogInAiLAorICAgKiAgIkFkZHJlc3MiICA6ICJhZGRyZXNzIiwKKyAgICogICJGb3JtYXR0ZWQiOiAicHJlIgorICAgKn0KKyAgICo8L3ByZT4KKyAgICogQHR5cGUgT2JqZWN0CisgICAqLworICB0aGlzLmZvcm1hdGJsb2NrID0KKyAgeworICAgICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiIsIC8vICYjODIxMjsgaXMgbWRhc2gKKyAgICAiSGVhZGluZyAxIjogImgxIiwKKyAgICAiSGVhZGluZyAyIjogImgyIiwKKyAgICAiSGVhZGluZyAzIjogImgzIiwKKyAgICAiSGVhZGluZyA0IjogImg0IiwKKyAgICAiSGVhZGluZyA1IjogImg1IiwKKyAgICAiSGVhZGluZyA2IjogImg2IiwKKyAgICAiTm9ybWFsIiAgIDogInAiLAorICAgICJBZGRyZXNzIiAgOiAiYWRkcmVzcyIsCisgICAgIkZvcm1hdHRlZCI6ICJwcmUiCisgIH07CisKKyAgLyoqIFlvdSBjYW4gcHJvdmlkZSBjdXN0b20gZnVuY3Rpb25zIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSB3aGljaCBvZiB0aGUKKyAgICogImZvcm1hdGJsb2NrIiBvcHRpb25zIGlzIGN1cnJlbnRseSBhY3RpdmUgYW5kIHNlbGVjdGVkIGluIHRoZSBkcm9wZG93bi4KKyAgICoKKyAgICogRXhhbXBsZToKKyAgICogPHByZT4KKyAgICogeGluaGFfY29uZmlnLmZvcm1hdGJsb2NrRGV0ZWN0b3JbJ2g1J10gPSBmdW5jdGlvbih4aW5oYSwgY3VycmVudEVsZW1lbnQpCisgICAqIHsKKyAgICogICBpZiAobXlfc3BlY2lhbF9tYXRjaGluZ19sb2dpYyhjdXJyZW50RWxlbWVudCkpIHsKKyAgICogICAgIHJldHVybiB0cnVlOworICAgKiAgIH0gZWxzZSB7CisgICAqICAgICByZXR1cm4gZmFsc2U7CisgICAqICAgfQorICAgKiB9OworICAgKiA8L3ByZT4KKyAgICoKKyAgICogWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gbWVzcyB3aXRoIHRoaXMsIHVubGVzcyB5b3UgYXJlIGFkZGluZyBuZXcsIGN1c3RvbQorICAgKiAiZm9ybWF0YmxvY2siIG9wdGlvbnMgd2hpY2ggZG9uJ3QgY29ycmVzcG9uZCB0byByZWFsIEhUTUwgdGFncy4gIElmIHlvdSB3YW50CisgICAqIHRvIGRvIHRoYXQsIHlvdSBjYW4gdXNlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gdGVsbCB4aW5oYSBob3cgdG8gZGV0ZWN0CisgICAqIHdoZW4gaXQgaXMgd2l0aGluIHlvdXIgY3VzdG9tIGNvbnRleHQuCisgICAqCisgICAqIEZvciBtb3JlLCBzZWU6IGh0dHA6Ly93d3cuY29hY3RpdmF0ZS5vcmcvcHJvamVjdHMveGluaGEvY3VzdG9tLWZvcm1hdGJsb2NrLW9wdGlvbnMKKyAgICovCisgIHRoaXMuZm9ybWF0YmxvY2tEZXRlY3RvciA9IHt9OworCisgIHRoaXMuZGlhbG9nT3B0aW9ucyA9CisgIHsKKyAgICAnY2VudGVyZWQnIDogdHJ1ZSwgLy90cnVlOiBkaWFsb2cgaXMgc2hvd24gaW4gdGhlIGNlbnRlciB0aGUgc2NyZWVuLCBmYWxzZSBkaWFsb2cgaXMgc2hvd24gbmVhciB0aGUgY2xpY2tlZCB0b29sYmFyIGJ1dHRvbgorICAgICdncmV5b3V0Jzp0cnVlLCAvL3RydWU6IHdoZW4gc2hvd2luZyBtb2RhbCBkaWFsb2dzLCB0aGUgcGFnZSBiZWhpbmQgdGhlIGRpYWxvZ2UgaXMgZ3JleWVkLW91dAorICAgICdjbG9zZU9uRXNjYXBlJzp0cnVlCisgIH07CisgIC8qKiBZb3UgY2FuIGFkZCBmdW5jdGlvbnMgdG8gdGhpcyBvYmplY3QgdG8gYmUgZXhlY3V0ZWQgb24gc3BlY2lmaWMgZXZlbnRzCisgICAqIEV4YW1wbGU6CisgICAqIDxwcmU+CisgICAqIHhpbmhhX2NvbmZpZy5FdmVudHMub25LZXlQcmVzcyA9IGZ1bmN0aW9uIChldmVudCkKKyAgICogeworICAgKiAgICAvL2RvIHNvbWV0aGluZyAKKyAgICogICAgcmV0dXJuIGZhbHNlOworICAgKiB9CisgICAqIDwvcHJlPgorICAgKiBOb3RlIHRoYXQgPGVtPnRoaXM8L2VtPiBpbnNpZGUgdGhlIGZ1bmN0aW9uIHJlZmVycyB0byB0aGUgcmVzcGVjdGl2ZSBYaW5oYSBvYmplY3QKKyAgICogVGhlIHBvc3NpYmxlIGZ1bmN0aW9uIG5hbWVzIGFyZSBkb2N1bWVudGVkIGF0IDxhIGhyZWY9Imh0dHA6Ly90cmFjLnhpbmhhLm9yZy93aWtpL0RvY3VtZW50YXRpb24vRXZlbnRIb29rcyI+aHR0cDovL3RyYWMueGluaGEub3JnL3dpa2kvRG9jdW1lbnRhdGlvbi9FdmVudEhvb2tzPC9hPgorICAgKi8KKyAgdGhpcy5FdmVudHMgPSB7fTsKKyAgCisgIC8qKiA/PworICAgKiBEZWZhdWx0OiA8Y29kZT57fTwvY29kZT4KKyAgICogQHR5cGUgT2JqZWN0CisgICAqLworICB0aGlzLmN1c3RvbVNlbGVjdHMgPSB7fTsKKworICAvKiogU3dpdGNoZXMgb24gc29tZSBkZWJ1Z2dpbmcgKG9ubHkgaW4gZXhlY0NvbW1hbmQoKSBhcyBmYXIgYXMgSSBzZWUgYXQgdGhlIG1vbWVudCk8YnIgLz4KKyAgICoKKyAgICogRGVmYXVsdDogPGNvZGU+ZmFsc2U8L2NvZGU+CisgICAqIEB0eXBlIEJvb2xlYW4KKyAgICovCisgIHRoaXMuZGVidWcgPSBmYWxzZTsKKworICAvKiogUGF0aHMgdG8gdmFyaW91cyByZXNvdXJjZXMgbG9hZGVkIGJ5IFhpbmhhIGR1cmluZyBvcGVyYXRpb24uCisgICAqIAorICAgKiBOb3RlIHRoYXQgdGhlIGlmcmFtZV9zcmMgaXMgdGhlIGRvY3VtZW50IGxvYWRlZCBpbiB0aGUgaWZyYW1lIHRvIHN0YXJ0IHdpdGgKKyAgICogZHVlIHRvIG1vZGVybiBzZWN1cml0eSByZXF1aXJlbWVudHMsIGlmIHlvdSBhcmUgdXNpbmcgWGluaGEgZnJvbQorICAgKiBhbiBleHRlcm5hbCBzZXJ2ZXIgKENETiksIHNwZWNpYWwgY2FyZSBuZWVkcyBiZSB0YWtlbiwgamF2YXNjcmlwdDonJyAKKyAgICogd2hpY2ggaXMgbm93IHRoZSBkZWZhdWx0IHNlZW1zIHRvIGJlIG9rLCBidXQgaWYgeW91IGhhdmUgcHJvYmxlbXMgeW91IGNvdWxkCisgICAqIGNoYW5nZSB0aGlzIHRvIGFuIGFic29sdXRlIHBhdGggdG8gYSBmaWxlIG9uIHRoZSBzZXJ2ZXIgd2hpY2ggaGFzIHRoZSBwYWdlCisgICAqIHRoYXQgaXMgdXNpbmcgWGluaGEgKGllLCAvbXlzZXJ2ZXIvYmxhbmsuaHRtbCApLCB0aGUgY29udGVudHMgc2hvdWxkIAorICAgKiBqdXN0IGJlIGEgYmxhbmsgaHRtbCBwYWdlIChzZWUgcG9wdXBzL2JsYW5rLmh0bWwpCisgICAqIAorICAgKiBAdHlwZSBBcnJheQorICAgKi8KKyAgCisgIHRoaXMuVVJJcyA9CisgIHsKKyAgICJpZnJhbWVfc3JjIjogJ2phdmFzY3JpcHQ6XCdcJycsCisgICAiYmxhbmsiOiBfZWRpdG9yX3VybCArICJwb3B1cHMvYmxhbmsuaHRtbCIsCisgICAibGluayI6ICBfZWRpdG9yX3VybCArICJtb2R1bGVzL0NyZWF0ZUxpbmsvbGluay5odG1sIiwKKyAgICJpbnNlcnRfaW1hZ2UiOiBfZWRpdG9yX3VybCArICJtb2R1bGVzL0luc2VydEltYWdlL2luc2VydF9pbWFnZS5odG1sIiwKKyAgICJpbnNlcnRfdGFibGUiOiAgX2VkaXRvcl91cmwgKyAibW9kdWxlcy9JbnNlcnRUYWJsZS9pbnNlcnRfdGFibGUuaHRtbCIsCisgICAic2VsZWN0X2NvbG9yIjogX2VkaXRvcl91cmwgKyAicG9wdXBzL3NlbGVjdF9jb2xvci5odG1sIiwKKyAgICJoZWxwIjogX2VkaXRvcl91cmwgKyAicG9wdXBzL2VkaXRvcl9oZWxwLmh0bWwiCisgIH07CisKKyAgIC8qKiBUaGUgYnV0dG9uIGxpc3QgY29uYWlucyB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIHRvb2xiYXIgYnV0dG9uLiBOb3JtYWxseSwgdGhlcmUncyBub3RoaW5nIHRvIGNoYW5nZSBoZXJlIDopIAorICAgKiA8ZGl2IHN0eWxlPSJ3aGl0ZS1zcGFjZTpwcmUiPkFERElORyBDVVNUT00gQlVUVE9OUzogcGxlYXNlIHJlYWQgYmVsb3chCisgICAqIGZvcm1hdCBvZiB0aGUgYnRuTGlzdCBlbGVtZW50cyBpcyAiSUQ6IFsgVG9vbFRpcCwgSWNvbiwgRW5hYmxlZCBpbiB0ZXh0IG1vZGU/LCBBQ1RJT04gXSIKKyAgICogICAgLSBJRDogdW5pcXVlIElEIGZvciB0aGUgYnV0dG9uLiAgSWYgdGhlIGJ1dHRvbiBjYWxscyBkb2N1bWVudC5leGVjQ29tbWFuZAorICAgKgkgICAgaXQncyB3aXNlIHRvIGdpdmUgaXQgdGhlIHNhbWUgbmFtZSBhcyB0aGUgY2FsbGVkIGNvbW1hbmQuCisgICAqICAgIC0gQUNUSU9OOiBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkLgorICAgKiAgICAgICAgICAgICAgaXQgaGFzIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgorICAgKiAgICAgICAgICAgICAgICAgZnVuY3Rpb24oZWRpdG9yLCBidXR0b25OYW1lKQorICAgKiAgICAgICAgICAgICAgLSBlZGl0b3IgaXMgdGhlIFhpbmhhIG9iamVjdCB0aGF0IHRyaWdnZXJlZCB0aGUgY2FsbAorICAgKiAgICAgICAgICAgICAgLSBidXR0b25OYW1lIGlzIHRoZSBJRCBvZiB0aGUgY2xpY2tlZCBidXR0b24KKyAgICogICAgICAgICAgICAgIFRoZXNlIDIgcGFyYW1ldGVycyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgeW91IHRvIHVzZSB0aGUgc2FtZQorICAgKiAgICAgICAgICAgICAgaGFuZGxlciBmb3IgbW9yZSBYaW5oYSBvYmplY3RzIG9yIGZvciBtb3JlIGRpZmZlcmVudCBidXR0b25zLgorICAgKiAgICAtIFRvb2xUaXA6IHRvb2x0aXAsIHdpbGwgYmUgdHJhbnNsYXRlZCBiZWxvdworICAgKiAgICAtIEljb246IHBhdGggdG8gYW4gaWNvbiBpbWFnZSBmaWxlIGZvciB0aGUgYnV0dG9uCisgICAqICAgICAgICAgICAgT1I7IHlvdSBjYW4gdXNlIGFuIDE4eDE4IGJsb2NrIG9mIGEgbGFyZ2VyIGltYWdlIGJ5IHN1cGxseWluZyBhbiBhcnJheQorICAgKiAgICAgICAgICAgIHRoYXQgaGFzIHRocmVlIGVsZW10ZW50cywgdGhlIGZpcnN0IGlzIHRoZSBsYXJnZXIgaW1hZ2UsIHRoZSBzZWNvbmQgaXMgdGhlIGNvbHVtbgorICAgKiAgICAgICAgICAgIHRoZSB0aGlyZCBpcyB0aGUgcm93LiAgVGhlIHJvcyBhbmQgY29sdW1ucyBudW1iZXJpbmcgc3RhcnRzIGF0IDAgYnV0IHRoZXJlIGlzCisgICAqICAgICAgICAgICAgYSBoZWFkZXIgcm93IGFuZCBoZWFkZXIgY29sdW1uIHdoaWNoIGhhdmUgbnVtYmVyaW5nIHRvIG1ha2UgbGlmZSBlYXNpZXIuCisgICAqICAgICAgICAgICAgU2VlIGltYWdlcy9idXR0b25zX21haW4uZ2lmIHRvIHNlZSBob3cgaXQncyBkb25lLgorICAgKiAgICAtIEVuYWJsZWQgaW4gdGV4dCBtb2RlOiBpZiBmYWxzZSB0aGUgYnV0dG9uIGdldHMgZGlzYWJsZWQgZm9yIHRleHQtb25seSBtb2RlOyBvdGhlcndpc2UgZW5hYmxlZCBhbGwgdGhlIHRpbWUuPC9kaXY+CisgICAqIEB0eXBlIE9iamVjdAorICAgKi8KKyAgdGhpcy5idG5MaXN0ID0KKyAgeworICAgIGJvbGQ6IFsgIkJvbGQiLCBYaW5oYS5fbGMoe2tleTogJ2J1dHRvbl9ib2xkJywgc3RyaW5nOiBbImVkX2J1dHRvbnNfbWFpbi5wbmciLDMsMl19LCAnWGluaGEnKSwgZmFsc2UsIGZ1bmN0aW9uKGUpIHsgZS5leGVjQ29tbWFuZCgiYm9sZCIpOyB9IF0sCisgICAgaXRhbGljOiBbICJJdGFsaWMiLCBYaW5oYS5fbGMoe2tleTogJ2J1dHRvbl9pdGFsaWMnLCBzdHJpbmc6IFsiZWRfYnV0dG9uc19tYWluLnBuZyIsMiwyXX0sICdYaW5oYScpLCBmYWxzZSwgZnVuY3Rpb24oZSkgeyBlLmV4ZWNDb21tYW5kKCJpdGFsaWMiKTsgfSBdLAorICAgIHVuZGVybGluZTogWyAiVW5kZXJsaW5lIiwgWGluaGEuX2xjKHtrZXk6ICdidXR0b25fdW5kZXJsaW5lJywgc3RyaW5nOiBbImVkX2J1dHRvbnNfbWFpbi5wbmciLDIsMF19LCAnWGluaGEnKSwgZmFsc2UsIGZ1bmN0aW9uKGUpIHsgZS5leGVjQ29tbWFuZCgidW5kZXJsaW5lIik7IH0gXSwKKyAgICBzdHJpa2V0aHJvdWdoOiBbICJTdHJpa2V0aHJvdWdoIiwgWGluaGEuX2xjKHtrZXk6ICdidXR0b25fc3RyaWtldGhyb3VnaCcsIHN0cmluZzogWyJlZF9idXR0b25zX21haW4ucG5nIiwzLDBdfSwgJ1hpbmhhJyksIGZhbHNlLCBmdW5jdGlvbihlKSB7IGUuZXhlY0NvbW1hbmQoInN0cmlrZXRocm91Z2giKTsgfSBdLAorICAgIHN1YnNjcmlwdDogWyAiU3Vic2NyaXB0IiwgWGluaGEuX2xjKHtrZXk6ICdidXR0b25fc3Vic2NyaXB0Jywgc3RyaW5nOiBbImVkX2J1dHRvbnNfbWFpbi5wbmciLDMsMV19LCAnWGluaGEnKSwgZmFsc2UsIGZ1bmN0aW9uKGUpIHsgZS5leGVjQ29tbWFuZCgic3Vic2NyaXB0Iik7IH0gXSwKKyAgICBzdXBlcnNjcmlwdDogWyAiU3VwZXJzY3JpcHQiLCBYaW5oYS5fbGMoe2tleTogJ2J1dHRvbl9zdXBlcnNjcmlwdCcsIHN0cmluZzogWyJlZF9idXR0b25zX21haW4ucG5nIiwyLDFdfSwgJ1hpbmhhJyksIGZhbHNlLCBmdW5jdGlvbihlKSB7IGUuZXhlY0NvbW1hbmQoInN1cGVyc2NyaXB0Iik7IH0gXSwKKworICAgIGp1c3RpZnlsZWZ0OiBbICJKdXN0aWZ5IExlZnQiLCBbImVkX2J1dHRvbnNfbWFpbi5wbmciLDAsMF0sIGZhbHNlLCBmdW5jdGlvbihlKSB7IGUuZXhlY0NvbW1hbmQoImp1c3RpZnlsZWZ0Iik7IH0gXSwKKyAgICBqdXN0aWZ5Y2VudGVyOiBbICJKdXN0aWZ5IENlbnRlciIsIFsiZWRfYnV0dG9uc19tYWluLnBuZyIsMSwxXSwgZmFsc2UsIGZ1bmN0aW9uKGUpeyBlLmV4ZWNDb21tYW5kKCJqdXN0aWZ5Y2VudGVyIik7IH0gXSwKKyAgICBqdXN0aWZ5cmlnaHQ6IFsgIkp1c3RpZnkgUmlnaHQiLCBbImVkX2J1dHRvbnNfbWFpbi5wbmciLDEsMF0sIGZhbHNlLCBmdW5jdGlvbihlKSB7IGUuZXhlY0NvbW1hbmQoImp1c3RpZnlyaWdodCIpOyB9IF0sCisgICAganVzdGlmeWZ1bGw6IFsgIkp1c3RpZnkgRnVsbCIsIFsiZWRfYnV0dG9uc19tYWluLnBuZyIsMCwxXSwgZmFsc2UsIGZ1bmN0aW9uKGUpIHsgZS5leGVjQ29tbWFuZCgianVzdGlmeWZ1bGwiKTsgfSBdLAorCisgICAgb3JkZXJlZGxpc3Q6IFsgIk9yZGVyZWQgTGlzdCIsIFsiZWRfYnV0dG9uc19tYWluLnBuZyIsMCwzXSwgZmFsc2UsIGZ1bmN0aW9uKGUpIHsgZS5leGVjQ29tbWFuZCgiaW5zZXJ0b3JkZXJlZGxpc3QiKTsgfSBdLAorICAgIHVub3JkZXJlZGxpc3Q6IFsgIkJ1bGxldGVkIExpc3QiLCBbImVkX2J1dHRvbnNfbWFpbi5wbmciLDEsM10sIGZhbHNlLCBmdW5jdGlvbihlKSB7IGUuZXhlY0NvbW1hbmQoImluc2VydHVub3JkZXJlZGxpc3QiKTsgfSBdLAorICAgIGluc2VydG9yZGVyZWRsaXN0OiBbICJPcmRlcmVkIExpc3QiLCBbImVkX2J1dHRvbnNfbWFpbi5wbmciLDAsM10sIGZhbHNlLCBmdW5jdGlvbihlKSB7IGUuZXhlY0NvbW1hbmQoImluc2VydG9yZGVyZWRsaXN0Iik7IH0gXSwKKyAgICBpbnNlcnR1bm9yZGVyZWRsaXN0OiBbICJCdWxsZXRlZCBMaXN0IiwgWyJlZF9idXR0b25zX21haW4ucG5nIiwxLDNdLCBmYWxzZSwgZnVuY3Rpb24oZSkgeyBlLmV4ZWNDb21tYW5kKCJpbnNlcnR1bm9yZGVyZWRsaXN0Iik7IH0gXSwKKworICAgIG91dGRlbnQ6IFsgIkRlY3JlYXNlIEluZGVudCIsIFsiZWRfYnV0dG9uc19tYWluLnBuZyIsMSwyXSwgZmFsc2UsIGZ1bmN0aW9uKGUpIHsgZS5leGVjQ29tbWFuZCgib3V0ZGVudCIpOyB9IF0sCisgICAgaW5kZW50OiBbICJJbmNyZWFzZSBJbmRlbnQiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsMCwyXSwgZmFsc2UsIGZ1bmN0aW9uKGUpIHsgZS5leGVjQ29tbWFuZCgiaW5kZW50Iik7IH0gXSwKKyAgICBmb3JlY29sb3I6IFsgIkZvbnQgQ29sb3IiLCBbImVkX2J1dHRvbnNfbWFpbi5wbmciLDMsM10sIGZhbHNlLCBmdW5jdGlvbihlKSB7IGUuZXhlY0NvbW1hbmQoImZvcmVjb2xvciIpOyB9IF0sCisgICAgaGlsaXRlY29sb3I6IFsgIkJhY2tncm91bmQgQ29sb3IiLCBbImVkX2J1dHRvbnNfbWFpbi5wbmciLDIsM10sIGZhbHNlLCBmdW5jdGlvbihlKSB7IGUuZXhlY0NvbW1hbmQoImhpbGl0ZWNvbG9yIik7IH0gXSwKKworICAgIHVuZG86IFsgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIiwgWyJlZF9idXR0b25zX21haW4ucG5nIiw0LDJdLCBmYWxzZSwgZnVuY3Rpb24oZSkgeyBlLmV4ZWNDb21tYW5kKCJ1bmRvIik7IH0gXSwKKyAgICByZWRvOiBbICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiIsIFsiZWRfYnV0dG9uc19tYWluLnBuZyIsNSwyXSwgZmFsc2UsIGZ1bmN0aW9uKGUpIHsgZS5leGVjQ29tbWFuZCgicmVkbyIpOyB9IF0sCisgICAgY3V0OiBbICJDdXQgc2VsZWN0aW9uIiwgWyJlZF9idXR0b25zX21haW4ucG5nIiw1LDBdLCBmYWxzZSwgIGZ1bmN0aW9uIChlLCBjbWQpIHsgZS5leGVjQ29tbWFuZChjbWQpOyB9IF0sCisgICAgY29weTogWyAiQ29weSBzZWxlY3Rpb24iLCBbImVkX2J1dHRvbnNfbWFpbi5wbmciLDQsMF0sIGZhbHNlLCAgZnVuY3Rpb24gKGUsIGNtZCkgeyBlLmV4ZWNDb21tYW5kKGNtZCk7IH0gXSwKKyAgICBwYXN0ZTogWyAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiLCBbImVkX2J1dHRvbnNfbWFpbi5wbmciLDQsMV0sIGZhbHNlLCAgZnVuY3Rpb24gKGUsIGNtZCkgeyBlLmV4ZWNDb21tYW5kKGNtZCk7IH0gXSwKKyAgICBzZWxlY3RhbGw6IFsgIlNlbGVjdCBhbGwiLCBbImVkX2J1dHRvbnNfbWFpbi5wbmciLDMsNV0sIGZhbHNlLCBmdW5jdGlvbihlKSB7ZS5leGVjQ29tbWFuZCgic2VsZWN0YWxsIik7fSBdLAorCisgICAgaW5zZXJ0aG9yaXpvbnRhbHJ1bGU6IFsgIkhvcml6b250YWwgUnVsZSIsIFsiZWRfYnV0dG9uc19tYWluLnBuZyIsNiwwXSwgZmFsc2UsIGZ1bmN0aW9uKGUpIHsgZS5leGVjQ29tbWFuZCgiaW5zZXJ0aG9yaXpvbnRhbHJ1bGUiKTsgfSBdLAorICAgIGNyZWF0ZWxpbms6IFsgIkluc2VydCBXZWIgTGluayIsIFsiZWRfYnV0dG9uc19tYWluLnBuZyIsNiwxXSwgZmFsc2UsIGZ1bmN0aW9uKGUpIHsgZS5leGVjQ29tbWFuZCgiY3JlYXRlbGluayIpOyB9IF0sCisgICAgaW5zZXJ0aW1hZ2U6IFsgIkluc2VydC9Nb2RpZnkgSW1hZ2UiLCBbImVkX2J1dHRvbnNfbWFpbi5wbmciLDYsM10sIGZhbHNlLCBmdW5jdGlvbihlKSB7IGUuZXhlY0NvbW1hbmQoImluc2VydGltYWdlIik7IH0gXSwKKyAgICBpbnNlcnR0YWJsZTogWyAiSW5zZXJ0IFRhYmxlIiwgWyJlZF9idXR0b25zX21haW4ucG5nIiw2LDJdLCBmYWxzZSwgZnVuY3Rpb24oZSkgeyBlLmV4ZWNDb21tYW5kKCJpbnNlcnR0YWJsZSIpOyB9IF0sCisKKyAgICBodG1sbW9kZTogWyAiVG9nZ2xlIEhUTUwgU291cmNlIiwgWyJlZF9idXR0b25zX21haW4ucG5nIiw3LDBdLCB0cnVlLCBmdW5jdGlvbihlKSB7IGUuZXhlY0NvbW1hbmQoImh0bWxtb2RlIik7IH0gXSwKKyAgICB0b2dnbGVib3JkZXJzOiBbICJUb2dnbGUgQm9yZGVycyIsIFsiZWRfYnV0dG9uc19tYWluLnBuZyIsNywyXSwgZmFsc2UsIGZ1bmN0aW9uKGUpIHsgZS5fdG9nZ2xlQm9yZGVycygpOyB9IF0sCisgICAgcHJpbnQ6IFsgIlByaW50IGRvY3VtZW50IiwgWyJlZF9idXR0b25zX21haW4ucG5nIiw4LDFdLCBmYWxzZSwgZnVuY3Rpb24oZSkgeyBpZihYaW5oYS5pc19nZWNrbykge2UuX2lmcmFtZS5jb250ZW50V2luZG93LnByaW50KCk7IH0gZWxzZSB7IGUuZm9jdXNFZGl0b3IoKTsgcHJpbnQoKTsgfSB9IF0sCisgICAgc2F2ZWFzOiBbICJTYXZlIGFzIiwgWyJlZF9idXR0b25zX21haW4ucG5nIiw5LDFdLCBmYWxzZSwgZnVuY3Rpb24oZSkgeyBlLmV4ZWNDb21tYW5kKCJzYXZlYXMiLGZhbHNlLCJub25hbWUuaHRtIik7IH0gXSwKKyAgICBhYm91dDogWyAiQWJvdXQgdGhpcyBlZGl0b3IiLCBbImVkX2J1dHRvbnNfbWFpbi5wbmciLDgsMl0sIHRydWUsIGZ1bmN0aW9uKGUpIHsgZS5nZXRQbHVnaW5JbnN0YW5jZSgiQWJvdXRCb3giKS5zaG93KCk7IH0gXSwKKyAgICBzaG93aGVscDogWyAiSGVscCB1c2luZyBlZGl0b3IiLCBbImVkX2J1dHRvbnNfbWFpbi5wbmciLDksMl0sIHRydWUsIGZ1bmN0aW9uKGUpIHsgZS5leGVjQ29tbWFuZCgic2hvd2hlbHAiKTsgfSBdLAorCisgICAgc3BsaXRibG9jazogWyAiU3BsaXQgQmxvY2siLCAiZWRfc3BsaXRibG9jay5naWYiLCBmYWxzZSwgZnVuY3Rpb24oZSkgeyBlLl9zcGxpdEJsb2NrKCk7IH0gXSwKKyAgICBsZWZ0dG9yaWdodDogWyAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiLCBbImVkX2J1dHRvbnNfbWFpbi5wbmciLDAsMl0sIGZhbHNlLCBmdW5jdGlvbihlKSB7IGUuZXhlY0NvbW1hbmQoImxlZnR0b3JpZ2h0Iik7IH0gXSwKKyAgICByaWdodHRvbGVmdDogWyAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiLCBbImVkX2J1dHRvbnNfbWFpbi5wbmciLDEsMl0sIGZhbHNlLCBmdW5jdGlvbihlKSB7IGUuZXhlY0NvbW1hbmQoInJpZ2h0dG9sZWZ0Iik7IH0gXSwKKyAgICBvdmVyd3JpdGU6IFsgIkluc2VydC9PdmVyd3JpdGUiLCAiZWRfb3ZlcndyaXRlLmdpZiIsIGZhbHNlLCBmdW5jdGlvbihlKSB7IGUuZXhlY0NvbW1hbmQoIm92ZXJ3cml0ZSIpOyB9IF0sCisKKyAgICB3b3JkY2xlYW46IFsgIk1TIFdvcmQgQ2xlYW5lciIsIFsiZWRfYnV0dG9uc19tYWluLnBuZyIsNSwzXSwgZmFsc2UsIGZ1bmN0aW9uKGUpIHsgZS5fd29yZENsZWFuKCk7IH0gXSwKKyAgICBjbGVhcmZvbnRzOiBbICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyIsIFsiZWRfYnV0dG9uc19tYWluLnBuZyIsNSw0XSwgdHJ1ZSwgZnVuY3Rpb24oZSkgeyBlLl9jbGVhckZvbnRzKCk7IH0gXSwKKyAgICByZW1vdmVmb3JtYXQ6IFsgIlJlbW92ZSBmb3JtYXR0aW5nIiwgWyJlZF9idXR0b25zX21haW4ucG5nIiw0LDRdLCBmYWxzZSwgZnVuY3Rpb24oZSkgeyBlLmV4ZWNDb21tYW5kKCJyZW1vdmVmb3JtYXQiKTsgfSBdLAorICAgIGtpbGx3b3JkOiBbICJDbGVhciBNU09mZmljZSB0YWdzIiwgWyJlZF9idXR0b25zX21haW4ucG5nIiw0LDNdLCBmYWxzZSwgZnVuY3Rpb24oZSkgeyBlLmV4ZWNDb21tYW5kKCJraWxsd29yZCIpOyB9IF0KKyAgfTsKKyAgCisgIC8qKiBBIGhhc2ggb2YgZG91YmxlIGNsaWNrIGhhbmRsZXJzIGZvciB0aGUgZ2l2ZW4gZWxlbWVudHMsIGVhY2ggZWxlbWVudCBtYXkgaGF2ZSBvbmUgb3IgbW9yZSBkb3VibGUgY2xpY2sgaGFuZGxlcnMKKyAgICogIGNhbGxlZCBpbiBzZXF1ZW5jZS4gIFRoZSBlbGVtZW50IG1heSBjb250YWluIGEgY2xhc3Mgc2VsZWN0b3IgKCBhLnNvbWV0aGluZ1NwZWNpYWwgKQorICAgKiAgCisgICAqLworICAgCisgIHRoaXMuZGJsY2xpY2tMaXN0ID0gCisgIHsKKyAgICAgICJhIjogW2Z1bmN0aW9uKGUsIHRhcmdldCkge2UuZXhlY0NvbW1hbmQoImNyZWF0ZWxpbmsiLCBmYWxzZSwgdGFyZ2V0KTt9XSwKKyAgICAiaW1nIjogW2Z1bmN0aW9uKGUsIHRhcmdldCkge2UuX2luc2VydEltYWdlKHRhcmdldCk7fV0KKyAgfTsKKworIC8qKgorICAqIEhUTUwgY2xhc3MgYXR0cmlidXRlIHRvIGFwcGx5IHRvIHRoZSA8Ym9keT4gdGFnIHdpdGhpbiB0aGUgZWRpdG9yJ3MgaWZyYW1lLgorICAqIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQsIG5vIGNsYXNzIHdpbGwgYmUgc2V0LgorICAqIAorICAqICBEZWZhdWx0OiA8Y29kZT5udWxsPC9jb2RlPgorICAqLworICB0aGlzLmJvZHlDbGFzcyA9IG51bGw7CisKKyAvKioKKyAgKiBIVE1MIElEIGF0dHJpYnV0ZSB0byBhcHBseSB0byB0aGUgPGJvZHk+IHRhZyB3aXRoaW4gdGhlIGVkaXRvcidzIGlmcmFtZS4KKyAgKiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkLCBubyBJRCB3aWxsIGJlIHNldC4KKyAgKiAKKyAgKiAgRGVmYXVsdDogPGNvZGU+bnVsbDwvY29kZT4KKyAgKi8KKyAgdGhpcy5ib2R5SUQgPSBudWxsOworICAKKyAgLyoqIEEgY29udGFpbmVyIGZvciBhZGRpdGlvbmFsIGljb25zIHRoYXQgbWF5IGJlIHN3YXBwZWQgd2l0aGluIG9uZSBidXR0b24gKGxpa2UgZnVsbHNjcmVlbikKKyAgICogQHByaXZhdGUKKyAgICovCisgIHRoaXMuaWNvbkxpc3QgPSAKKyAgeworICAgIGRpYWxvZ0NhcHRpb24gOiBfZWRpdG9yX3VybCArICdpbWFnZXMveGluaGEtc21hbGwtaWNvbi5naWYnLAorICAgIHd5c2l3eWdtb2RlIDogW19lZGl0b3JfdXJsICsgJ2ltYWdlcy9lZF9idXR0b25zX21haW4ucG5nJyw3LDFdCisgIH07CisgIC8vIGluaXRpYWxpemUgdG9vbHRpcHMgZnJvbSB0aGUgSTE4TiBtb2R1bGUgYW5kIGdlbmVyYXRlIGNvcnJlY3QgaW1hZ2UgcGF0aAorICBmb3IgKCB2YXIgaSBpbiB0aGlzLmJ0bkxpc3QgKQorICB7CisgICAgdmFyIGJ0biA9IHRoaXMuYnRuTGlzdFtpXTsKKyAgICAvLyBwcmV2ZW50IGl0ZXJhdGluZyBvdmVyIHdyb25nIHR5cGUKKyAgICBpZiAoIHR5cGVvZiBidG4gIT0gJ29iamVjdCcgKQorICAgIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0gCisgICAgaWYgKCB0eXBlb2YgYnRuWzFdICE9ICdzdHJpbmcnICkKKyAgICB7CisgICAgICBidG5bMV1bMF0gPSBfZWRpdG9yX3VybCArIHRoaXMuaW1nVVJMICsgYnRuWzFdWzBdOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgYnRuWzFdID0gX2VkaXRvcl91cmwgKyB0aGlzLmltZ1VSTCArIGJ0blsxXTsKKyAgICB9CisgICAgYnRuWzBdID0gWGluaGEuX2xjKGJ0blswXSk7IC8vaW5pdGlhbGl6ZSB0b29sdGlwCisgIH0KK307CisvKiogQSBwbHVnaW4gbWF5IHJlcXVpcmUgbW9yZSB0aGFuIG9uZSBpY29uIGZvciBvbmUgYnV0dG9uLCB0aGlzIGhhcyB0byBiZSByZWdpc3RlcmVkIGluIG9yZGVyIHRvIHdvcmsgd2l0aCB0aGUgaWNvbnNldHMgKHNlZSBGdWxsU2NyZWVuKQorICogCisgKiBAcGFyYW0ge1N0cmluZ30gaWQKKyAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBpY29uIGRlZmluaXRpb24gbGlrZSBpbiByZWdpc3RlckJ1dHRvbgorICovCitYaW5oYS5Db25maWcucHJvdG90eXBlLnJlZ2lzdGVySWNvbiA9IGZ1bmN0aW9uIChpZCwgaWNvbikKK3sKKyAgdGhpcy5pY29uTGlzdFtpZF0gPSBpY29uOworfTsKKy8qKiBBRERJTkcgQ1VTVE9NIEJVVFRPTlMKKyogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyoKKyogRXhhbXBsZSBvbiBob3cgdG8gYWRkIGEgY3VzdG9tIGJ1dHRvbiB3aGVuIHlvdSBjb25zdHJ1Y3QgdGhlIFhpbmhhOgorKgorKiAgIHZhciBlZGl0b3IgPSBuZXcgWGluaGEoInlvdXJfdGV4dF9hcmVhX2lkIik7CisqICAgdmFyIGNmZyA9IGVkaXRvci5jb25maWc7IC8vIHRoaXMgaXMgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbgorKiAgIGNmZy5idG5MaXN0WyJteS1oaWxpdGUiXSA9CisqCVsgIkhpZ2hsaWdodCBzZWxlY3Rpb24iLCAvLyB0b29sdGlwCisqCSAgIm15X2hpbGl0ZS5naWYiLCAvLyBpbWFnZQorKgkgIGZhbHNlIC8vIGRpc2FibGVkIGluIHRleHQgbW9kZQorKgkgIGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc3Vycm91bmRIVE1MKCc8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDp5ZWxsb3ciPicsICc8L3NwYW4+Jyk7IH0sIC8vIGFjdGlvbgorKgldOworKiAgIGNmZy50b29sYmFyLnB1c2goWyJsaW5lYnJlYWsiLCAibXktaGlsaXRlIl0pOyAvLyBhZGQgdGhlIG5ldyBidXR0b24gdG8gdGhlIHRvb2xiYXIKKyoKKyogQW4gYWx0ZXJuYXRlIChhbHNvIG1vcmUgY29udmVuaWVudCBhbmQgcmVjb21tZW5kZWQpIHdheSB0bworKiBhY2NvbXBsaXNoIHRoaXMgaXMgdG8gdXNlIHRoZSByZWdpc3RlckJ1dHRvbiBmdW5jdGlvbiBiZWxvdy4KKyovCisvKiogSGVscGVyIGZ1bmN0aW9uOiByZWdpc3RlciBhIG5ldyBidXR0b24gd2l0aCB0aGUgY29uZmlndXJhdGlvbi4gIEl0IGNhbiBiZQorICogY2FsbGVkIHdpdGggYWxsIDUgYXJndW1lbnRzLCBvciB3aXRoIG9ubHkgb25lIChmaXJzdCBvbmUpLiAgV2hlbiBjYWxsZWQgd2l0aAorICogb25seSBvbmUgYXJndW1lbnQgaXQgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6IGlkLAorICogdG9vbHRpcCwgaW1hZ2UsIHRleHRNb2RlLCBhY3Rpb24uPGJyIC8+ICAKKyAqIAorICogRXhhbXBsZXM6PGJyIC8+CisgKjxwcmU+CisgKiBjb25maWcucmVnaXN0ZXJCdXR0b24oIm15LWhpbGl0ZSIsICJIaWxpdGUgdGV4dCIsICJteS1oaWxpdGUuZ2lmIiwgZmFsc2UsIGZ1bmN0aW9uKGVkaXRvcikgey4uLn0pOworICogY29uZmlnLnJlZ2lzdGVyQnV0dG9uKHsKKyAqICAgICAgaWQgICAgICAgOiAibXktaGlsaXRlIiwgICAgICAvLyB0aGUgSUQgb2YgeW91ciBidXR0b24KKyAqICAgICAgdG9vbHRpcCAgOiAiSGlsaXRlIHRleHQiLCAgICAvLyB0aGUgdG9vbHRpcAorICogICAgICBpbWFnZSAgICA6ICJteS1oaWxpdGUuZ2lmIiwgIC8vIGltYWdlIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgdG9vbGJhcgorICogICAgICB0ZXh0TW9kZSA6IGZhbHNlLCAgICAgICAgICAgIC8vIGRpc2FibGVkIGluIHRleHQgbW9kZQorICogICAgICBhY3Rpb24gICA6IGZ1bmN0aW9uKGVkaXRvcikgeyAvLyBjYWxsZWQgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQKKyAqICAgICAgICAgICAgICAgICAgIGVkaXRvci5zdXJyb3VuZEhUTUwoJzxzcGFuIGNsYXNzPSJoaWxpdGUiPicsICc8L3NwYW4+Jyk7CisgKiAgICAgICAgICAgICAgICAgfSwKKyAqICAgICAgY29udGV4dCAgOiAicCIgb3IgWyAicCIsICJoMSIgXSAgLy8gd2lsbCBiZSBkaXNhYmxlZCBpZiBvdXRzaWRlIGEgPHA+IGVsZW1lbnQgKGluIGFycmF5IGNhc2UsIDxwPiBvciA8aDE+KQorICogICAgfSk7PC9wcmU+CisgKi8KK1hpbmhhLkNvbmZpZy5wcm90b3R5cGUucmVnaXN0ZXJCdXR0b24gPSBmdW5jdGlvbihpZCwgdG9vbHRpcCwgaW1hZ2UsIHRleHRNb2RlLCBhY3Rpb24sIGNvbnRleHQpCit7CisgIGlmICggdHlwZW9mIGlkID09ICJzdHJpbmciICkKKyAgeworICAgIHRoaXMuYnRuTGlzdFtpZF0gPSBbIHRvb2x0aXAsIGltYWdlLCB0ZXh0TW9kZSwgYWN0aW9uLCBjb250ZXh0IF07CisgIH0KKyAgZWxzZSBpZiAoIHR5cGVvZiBpZCA9PSAib2JqZWN0IiApCisgIHsKKyAgICB0aGlzLmJ0bkxpc3RbaWQuaWRdID0gWyBpZC50b29sdGlwLCBpZC5pbWFnZSwgaWQudGV4dE1vZGUsIGlkLmFjdGlvbiwgaWQuY29udGV4dCBdOworICB9CisgIGVsc2UKKyAgeworICAgIGFsZXJ0KCJFUlJPUiBbWGluaGEuQ29uZmlnOjpyZWdpc3RlckJ1dHRvbl06XG5pbnZhbGlkIGFyZ3VtZW50cyIpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfTsKKworWGluaGEucHJvdG90eXBlLnJlZ2lzdGVyUGFuZWwgPSBmdW5jdGlvbihzaWRlLCBvYmplY3QpCit7CisgIGlmICggIXNpZGUgKQorICB7CisgICAgc2lkZSA9ICdyaWdodCc7CisgIH0KKyAgdGhpcy5zZXRMb2FkaW5nTWVzc2FnZSgnUmVnaXN0ZXIgJyArIHNpZGUgKyAnIHBhbmVsICcpOworICB2YXIgcGFuZWwgPSB0aGlzLmFkZFBhbmVsKHNpZGUpOworICBpZiAoIG9iamVjdCApCisgIHsKKyAgICBvYmplY3QuZHJhd1BhbmVsSW4ocGFuZWwpOworICB9Cit9OworCisvKiogVGhlIGZvbGxvd2luZyBoZWxwZXIgZnVuY3Rpb24gcmVnaXN0ZXJzIGEgZHJvcGRvd24gYm94IHdpdGggdGhlIGVkaXRvcgorICogY29uZmlndXJhdGlvbi4gIFlvdSBzdGlsbCBoYXZlIHRvIGFkZCBpdCB0byB0aGUgdG9vbGJhciwgc2FtZSBhcyB3aXRoIHRoZQorICogYnV0dG9ucy4gIENhbGwgaXQgbGlrZSB0aGlzOgorICoKKyAqIEZJWE1FOiBhZGQgZXhhbXBsZQorICovCitYaW5oYS5Db25maWcucHJvdG90eXBlLnJlZ2lzdGVyRHJvcGRvd24gPSBmdW5jdGlvbihvYmplY3QpCit7CisgIC8vIGNoZWNrIGZvciBleGlzdGluZyBpZAorLy8gIGlmICggdHlwZW9mIHRoaXMuY3VzdG9tU2VsZWN0c1tvYmplY3QuaWRdICE9ICJ1bmRlZmluZWQiICkKKy8vICB7CisgICAgLy8gYWxlcnQoIldBUk5JTkcgW1hpbmhhLkNvbmZpZzo6cmVnaXN0ZXJEcm9wZG93bl06XG5BIGRyb3Bkb3duIHdpdGggdGhlIHNhbWUgSUQgYWxyZWFkeSBleGlzdHMuIik7CisvLyAgfQorLy8gIGlmICggdHlwZW9mIHRoaXMuYnRuTGlzdFtvYmplY3QuaWRdICE9ICJ1bmRlZmluZWQiICkKKy8vICB7CisgICAgLy8gYWxlcnQoIldBUk5JTkcgW1hpbmhhLkNvbmZpZzo6cmVnaXN0ZXJEcm9wZG93bl06XG5BIGJ1dHRvbiB3aXRoIHRoZSBzYW1lIElEIGFscmVhZHkgZXhpc3RzLiIpOworLy8gIH0KKyAgdGhpcy5jdXN0b21TZWxlY3RzW29iamVjdC5pZF0gPSBvYmplY3Q7Cit9OworCisvKiogQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHJlbW92ZSBzb21lIGJ1dHRvbnMvZHJvcC1kb3duIGJveGVzIGZyb20gdGhlIHRvb2xiYXIuCisgKiBQYXNzIGFzIHRoZSBvbmx5IHBhcmFtZXRlciBhIHN0cmluZyBjb250YWluaW5nIGJ1dHRvbi9kcm9wLWRvd24gbmFtZXMKKyAqIGRlbGltaXRlZCBieSBzcGFjZXMuICBOb3RlIHRoYXQgdGhlIHN0cmluZyBzaG91bGQgYWxzbyBiZWdpbiB3aXRoIGEgc3BhY2UKKyAqIGFuZCBlbmQgd2l0aCBhIHNwYWNlLiAgRXhhbXBsZToKKyAqCisgKiAgIGNvbmZpZy5oaWRlU29tZUJ1dHRvbnMoIiBmb250bmFtZSBmb250c2l6ZSB0ZXh0aW5kaWNhdG9yICIpOworICoKKyAqIEl0J3MgdXNlZnVsIGJlY2F1c2UgaXQncyBlYXNpZXIgdG8gcmVtb3ZlIHN0dWZmIGZyb20gdGhlIGRlZmF1bCB0b29sYmFyIHRoYW4KKyAqIGNyZWF0ZSBhIGJyYW5kIG5ldyB0b29sYmFyIDstKQorICovCitYaW5oYS5Db25maWcucHJvdG90eXBlLmhpZGVTb21lQnV0dG9ucyA9IGZ1bmN0aW9uKHJlbW92ZSkKK3sKKyAgdmFyIHRvb2xiYXIgPSB0aGlzLnRvb2xiYXI7CisgIGZvciAoIHZhciBpID0gdG9vbGJhci5sZW5ndGg7IC0taSA+PSAwOyApCisgIHsKKyAgICB2YXIgbGluZSA9IHRvb2xiYXJbaV07CisgICAgZm9yICggdmFyIGogPSBsaW5lLmxlbmd0aDsgLS1qID49IDA7ICkKKyAgICB7CisgICAgICBpZiAoIHJlbW92ZS5pbmRleE9mKCIgIiArIGxpbmVbal0gKyAiICIpID49IDAgKQorICAgICAgeworICAgICAgICB2YXIgbGVuID0gMTsKKyAgICAgICAgaWYgKCAvc2VwYXJhdG9yfHNwYWNlLy50ZXN0KGxpbmVbaiArIDFdKSApCisgICAgICAgIHsKKyAgICAgICAgICBsZW4gPSAyOworICAgICAgICB9CisgICAgICAgIGxpbmUuc3BsaWNlKGosIGxlbik7CisgICAgICB9CisgICAgfQorICB9Cit9OworCisvKiogSGVscGVyIEZ1bmN0aW9uOiBhZGQgYnV0dG9ucy9kcm9wLWRvd25zIGJveGVzIHdpdGggdGl0bGUgb3Igc2VwYXJhdG9yIHRvIHRoZSB0b29sYmFyCisgKiBpZiB0aGUgYnV0dG9ucy9kcm9wLWRvd25zIGJveGVzIGRvZXNuJ3QgYWxscmVhZHkgZXhpc3RzLgorICogaWQ6IGJ1dHRvbiBvciBzZWxlY3Rib3ggKGFzIGFycmF5IHdpdGggc2VwYXJhdG9yIG9yIHRpdGxlKQorICogd2hlcmU6IGJ1dHRvbiBvciBzZWxlY3Rib3ggKGFzIGFycmF5IGlmIHRoZSBmaXJzdCBpcyBub3QgZm91bmQgdGFrZSB0aGUgc2Vjb25kIGFuZCBzbyBvbikKKyAqIHBvc2l0aW9uOgorICogLTEgPSBpbnNlcnQgYnV0dG9uIChpZCkgb25lIHBvc2l0aW9uIGJlZm9yZSB0aGUgYnV0dG9uICh3aGVyZSkKKyAqIDAgPSByZXBsYWNlIGJ1dHRvbiAod2hlcmUpIGJ5IGJ1dHRvbiAoaWQpCisgKiArMSA9IGluc2VydCBidXR0b24gKGlkKSBvbmUgcG9zaXRpb24gYWZ0ZXIgYnV0dG9uICh3aGVyZSkKKyAqCisgKiBjZmcuYWRkVG9vbGJhckVsZW1lbnQoWyJUW3RpdGxlXSIsICJidXR0b25faWQiLCAic2VwYXJhdG9yIl0gLCBbImZpcnN0X2lkIiwic2Vjb25kX2lkIl0sIC0xKTsKKyovCisKK1hpbmhhLkNvbmZpZy5wcm90b3R5cGUuYWRkVG9vbGJhckVsZW1lbnQgPSBmdW5jdGlvbihpZCwgd2hlcmUsIHBvc2l0aW9uKQoreworICB2YXIgdG9vbGJhciA9IHRoaXMudG9vbGJhcjsKKyAgdmFyIGEsIGksIGosIG8sIHNpZDsKKyAgdmFyIGlkSXNBcnJheSA9IGZhbHNlOworICB2YXIgd2hlcmVJc0FycmF5ID0gZmFsc2U7CisgIHZhciB3aGVyZUxlbmd0aCA9IDA7CisgIHZhciB3aGVyZUogPSAwOworICB2YXIgd2hlcmVJID0gMDsKKyAgdmFyIGV4aXN0cyA9IGZhbHNlOworICB2YXIgZm91bmQgPSBmYWxzZTsKKyAgLy8gY2hlY2sgaWYgaWQgYW5kIHdoZXJlIGFyZSBhcnJ5cworICBpZiAoICggaWQgJiYgdHlwZW9mIGlkID09ICJvYmplY3QiICkgJiYgKCBpZC5jb25zdHJ1Y3RvciA9PSBBcnJheSApICkKKyAgeworICAgIGlkSXNBcnJheSA9IHRydWU7CisgIH0KKyAgaWYgKCAoIHdoZXJlICYmIHR5cGVvZiB3aGVyZSA9PSAib2JqZWN0IiApICYmICggd2hlcmUuY29uc3RydWN0b3IgPT0gQXJyYXkgKSApCisgIHsKKyAgICB3aGVyZUlzQXJyYXkgPSB0cnVlOworICAgIHdoZXJlTGVuZ3RoID0gd2hlcmUubGVuZ3RoOworCX0KKworICBpZiAoIGlkSXNBcnJheSApIC8vZmluZCB0aGUgYnV0dG9uL3NlbGVjdCBib3ggaW4gaW5wdXQgYXJyYXkKKyAgeworICAgIGZvciAoIGkgPSAwOyBpIDwgaWQubGVuZ3RoOyArK2kgKQorICAgIHsKKyAgICAgIGlmICggKCBpZFtpXSAhPSAic2VwYXJhdG9yIiApICYmICggaWRbaV0uaW5kZXhPZigiVFsiKSAhPT0gMCkgKQorICAgICAgeworICAgICAgICBzaWQgPSBpZFtpXTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgc2lkID0gaWQ7CisgIH0KKyAgCisgIGZvciAoIGkgPSAwOyBpIDwgdG9vbGJhci5sZW5ndGg7ICsraSApIHsKKyAgICBhID0gdG9vbGJhcltpXTsKKyAgICBmb3IgKCBqID0gMDsgaiA8IGEubGVuZ3RoOyArK2ogKSB7CisgICAgICAvLyBjaGVjayBpZiBidXR0b24vc2VsZWN0IGJveCBleGlzdHMKKyAgICAgIGlmICggYVtqXSA9PSBzaWQgKSB7CisgICAgICAgIHJldHVybjsgLy8gY2FuY2VsIHRvIGFkZCBlbGVtZW50cyBpZiBzYW1lIGJ1dHRvbiBhbHJlYWR5IGV4aXN0cworICAgICAgfQorICAgIH0KKyAgfQorICAKKworICBmb3IgKCBpID0gMDsgIWZvdW5kICYmIGkgPCB0b29sYmFyLmxlbmd0aDsgKytpICkKKyAgeworICAgIGEgPSB0b29sYmFyW2ldOworICAgIGZvciAoIGogPSAwOyAhZm91bmQgJiYgaiA8IGEubGVuZ3RoOyArK2ogKQorICAgIHsKKyAgICAgIGlmICggd2hlcmVJc0FycmF5ICkKKyAgICAgIHsKKyAgICAgICAgZm9yICggbyA9IDA7IG8gPCB3aGVyZUxlbmd0aDsgKytvICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggYVtqXSA9PSB3aGVyZVtvXSApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBvID09PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICBqLS07CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB3aGVyZUkgPSBpOworICAgICAgICAgICAgICB3aGVyZUogPSBqOworICAgICAgICAgICAgICB3aGVyZUxlbmd0aCA9IG87CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8vIGZpbmQgdGhlIHBvc2l0aW9uIHRvIGluc2VydAorICAgICAgICBpZiAoIGFbal0gPT0gd2hlcmUgKQorICAgICAgICB7IAorICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vaWYgY2hlY2sgZm91bmQgYW55IG90aGVyIGFzIHRoZSBmaXJzdCBidXR0b24KKyAgaWYgKCAhZm91bmQgJiYgd2hlcmVJc0FycmF5ICkKKyAgeyAKKyAgICBpZiAoIHdoZXJlLmxlbmd0aCAhPSB3aGVyZUxlbmd0aCApCisgICAgeworICAgICAgaiA9IHdoZXJlSjsKKyAgICAgIGEgPSB0b29sYmFyW3doZXJlSV07CisgICAgICBmb3VuZCA9IHRydWU7CisgICAgfQorICB9CisgIGlmICggZm91bmQgKQorICB7CisgICAgLy8gcmVwbGFjZSB0aGUgZm91bmQgYnV0dG9uCisgICAgaWYgKCBwb3NpdGlvbiA9PT0gMCApCisgICAgeworICAgICAgaWYgKCBpZElzQXJyYXkpCisgICAgICB7CisgICAgICAgIGFbal0gPSBpZFtpZC5sZW5ndGgtMV07CisgICAgICAgIGZvciAoIGkgPSBpZC5sZW5ndGgtMTsgLS1pID49IDA7ICkKKyAgICAgICAgeworICAgICAgICAgIGEuc3BsaWNlKGosIDAsIGlkW2ldKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBhW2pdID0gaWQ7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7IAorICAgICAgLy8gaW5zZXJ0IGJlZm9yZS9hZnRlciB0aGUgZm91bmQgYnV0dG9uCisgICAgICBpZiAoIHBvc2l0aW9uIDwgMCApCisgICAgICB7CisgICAgICAgIGogPSBqICsgcG9zaXRpb24gKyAxOyAvL2NvcnJlY3QgcG9zaXRpb24gYmVmb3JlCisgICAgICB9CisgICAgICBlbHNlIGlmICggcG9zaXRpb24gPiAwICkKKyAgICAgIHsKKyAgICAgICAgaiA9IGogKyBwb3NpdGlvbjsgLy9jb3JyZWN0IHBvc2lvbiBhZnRlcgorICAgICAgfQorICAgICAgaWYgKCBpZElzQXJyYXkgKQorICAgICAgeworICAgICAgICBmb3IgKCBpID0gaWQubGVuZ3RoOyAtLWkgPj0gMDsgKQorICAgICAgICB7CisgICAgICAgICAgYS5zcGxpY2UoaiwgMCwgaWRbaV0pOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGEuc3BsaWNlKGosIDAsIGlkKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgLy8gbm8gYnV0dG9uIGZvdW5kCisgICAgdG9vbGJhclswXS5zcGxpY2UoMCwgMCwgInNlcGFyYXRvciIpOworICAgIGlmICggaWRJc0FycmF5KQorICAgIHsKKyAgICAgIGZvciAoIGkgPSBpZC5sZW5ndGg7IC0taSA+PSAwOyApCisgICAgICB7CisgICAgICAgIHRvb2xiYXJbMF0uc3BsaWNlKDAsIDAsIGlkW2ldKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHRvb2xiYXJbMF0uc3BsaWNlKDAsIDAsIGlkKTsKKyAgICB9CisgIH0KK307CisvKiogQWxpYXMgb2YgWGluaGEuQ29uZmlnLnByb3RvdHlwZS5oaWRlU29tZUJ1dHRvbnMoKQorKiBAdHlwZSBGdW5jdGlvbgorKi8KK1hpbmhhLkNvbmZpZy5wcm90b3R5cGUucmVtb3ZlVG9vbGJhckVsZW1lbnQgPSBYaW5oYS5Db25maWcucHJvdG90eXBlLmhpZGVTb21lQnV0dG9uczsKKworLyoqIEhlbHBlciBmdW5jdGlvbjogcmVwbGFjZSBhbGwgVEVYVEFSRUEtcyBpbiB0aGUgZG9jdW1lbnQgd2l0aCBYaW5oYS1zLiAKKyogQHBhcmFtIHtYaW5oYS5Db25maWd9IG9wdGlvbmFsIGNvbmZpZyAKKyovCitYaW5oYS5yZXBsYWNlQWxsID0gZnVuY3Rpb24oY29uZmlnKQoreworICB2YXIgdGFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRleHRhcmVhIik7CisgIC8vIEB0b2RvOiB3ZWlyZCBzeW50YXgsIGRvZXNudCBoZWxwIHRvIHJlYWQgdGhlIGNvZGUsIGRvZXNudCBvYmZ1c2NhdGUgaXQgYW5kIGRvZXNudCBtYWtlIGl0IHF1aWNrZXIsIGJldHRlciByZXdyaXRlIHRoaXMgcGFydAorICBmb3IgKCB2YXIgaSA9IHRhcy5sZW5ndGg7IGkgPiAwOyBuZXcgWGluaGEodGFzWy0taV0sIGNvbmZpZykuZ2VuZXJhdGUoKSApCisgIHsKKyAgICAvLyBOT1AKKyAgfQorfTsKKworLyoqIEhlbHBlciBmdW5jdGlvbjogcmVwbGFjZXMgdGhlIFRFWFRBUkVBIHdpdGggdGhlIGdpdmVuIElEIHdpdGggWGluaGEuIAorKiBAcGFyYW0ge3N0cmluZ30gaWQgaWQgb2YgdGhlIHRleHRhcmVhIHRvIHJlcGxhY2UgCisqIEBwYXJhbSB7WGluaGEuQ29uZmlnfSBvcHRpb25hbCBjb25maWcgCisqLworWGluaGEucmVwbGFjZSA9IGZ1bmN0aW9uKGlkLCBjb25maWcpCit7CisgIHZhciB0YSA9IFhpbmhhLmdldEVsZW1lbnRCeUlkKCJ0ZXh0YXJlYSIsIGlkKTsKKyAgcmV0dXJuIHRhID8gbmV3IFhpbmhhKHRhLCBjb25maWcpLmdlbmVyYXRlKCkgOiBudWxsOworfTsKKyAKKy8qKiBDcmVhdGVzIHRoZSB0b29sYmFyIGFuZCBhcHBlbmRzIGl0IHRvIHRoZSBfaHRtbGFyZWEKKyogQHByaXZhdGUKKyogQHJldHVybnMge0RvbU5vZGV9IHRvb2xiYXIKKyovCitYaW5oYS5wcm90b3R5cGUuX2NyZWF0ZVRvb2xiYXIgPSBmdW5jdGlvbiAoKQoreworICB0aGlzLnNldExvYWRpbmdNZXNzYWdlKFhpbmhhLl9sYygnQ3JlYXRlIFRvb2xiYXInKSk7CisgIHZhciBlZGl0b3IgPSB0aGlzOwkvLyB0byBhY2Nlc3MgdGhpcyBpbiBuZXN0ZWQgZnVuY3Rpb25zCisKKyAgdmFyIHRvb2xiYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgLy8gLl90b29sYmFyIGlzIGZvciBsZWdhY3ksIC5fdG9vbEJhciBpcyBiZXR0ZXIgdGhhbmtzLgorICB0aGlzLl90b29sQmFyID0gdGhpcy5fdG9vbGJhciA9IHRvb2xiYXI7CisgIHRvb2xiYXIuY2xhc3NOYW1lID0gInRvb2xiYXIiOyAgCisgIHRvb2xiYXIuYWxpZ24gPSB0aGlzLmNvbmZpZy50b29sYmFyQWxpZ247CisgIAorICBYaW5oYS5mcmVlTGF0ZXIodGhpcywgJ190b29sQmFyJyk7CisgIFhpbmhhLmZyZWVMYXRlcih0aGlzLCAnX3Rvb2xiYXInKTsKKyAgCisgIHZhciB0Yl9yb3cgPSBudWxsOworICB2YXIgdGJfb2JqZWN0cyA9IHt9OworICB0aGlzLl90b29sYmFyT2JqZWN0cyA9IHRiX29iamVjdHM7CisKKwl0aGlzLl9jcmVhdGVUb29sYmFyMShlZGl0b3IsIHRvb2xiYXIsIHRiX29iamVjdHMpOworCQorCS8vIElFOCBpcyB0b3RhbGx5IHJldGFyZGVkLCBpZiB5b3UgY2xpY2sgb24gYSB0b29sYmFyIGVsZW1lbnQgKGVnIGJ1dHRvbikKKwkvLyBhbmQgaXQgZG9lc24ndCBoYXZlIHVuc2VsZWN0YWJsZT0ib24iLCB0aGVuIGl0IGRlZm9jdXNlcyB0aGUgZWRpdG9yIGxvc2luZyB0aGUgc2VsZWN0aW9uCisJLy8gc28gbm90aGluZyB3b3Jrcy4gIFBhcnRpY3VsYXJseSBwcmV2YWxlbnQgd2l0aCBUYWJsZU9wZXJhdGlvbnMKKwlmdW5jdGlvbiBub3NlbGVjdChlKQorCXsKKyAgICBpZihlLnRhZ05hbWUpIGUudW5zZWxlY3RhYmxlID0gIm9uIjsgICAgICAgIAorICAgIGlmKGUuY2hpbGROb2RlcykKKyAgICB7CisgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSBpZihlLnRhZ05hbWUpIG5vc2VsZWN0KGUuY2hpbGROb2Rlc1tpXSk7CisgICAgfQorCX0KKwlpZihYaW5oYS5pc19pZSkgbm9zZWxlY3QodG9vbGJhcik7CisJCisJCisJdGhpcy5faHRtbEFyZWEuYXBwZW5kQ2hpbGQodG9vbGJhcik7ICAgICAgCisgIAorICByZXR1cm4gdG9vbGJhcjsKK307CisKKy8qKiBGSVhNRSA6IGZ1bmN0aW9uIG5ldmVyIHVzZWQsIGNhbiBwcm9iYWJseSBiZSByZW1vdmVkIGZyb20gc291cmNlCisqIEBwcml2YXRlCisqIEBkZXByZWNhdGVkCisqLworWGluaGEucHJvdG90eXBlLl9zZXRDb25maWcgPSBmdW5jdGlvbihjb25maWcpCit7CisJdGhpcy5jb25maWcgPSBjb25maWc7Cit9OworLyoqIEZJWE1FOiBIb3cgY2FuIHRoaXMgYmUgdXNlZD8/CisgKiBUaGUgb25seSB0aGluZyB0aGF0IHVzZWQgdGhpcyBzZWVtcyB0byBoYXZlIGJlZW4gUGVyc2lzdGVudFN0b3JhZ2UsIHdoaWNoIGlzIERPQQorKiBAcHJpdmF0ZQorKi8KK1hpbmhhLnByb3RvdHlwZS5fcmVidWlsZFRvb2xiYXIgPSBmdW5jdGlvbigpCit7CisJdGhpcy5fY3JlYXRlVG9vbGJhcjEodGhpcywgdGhpcy5fdG9vbGJhciwgdGhpcy5fdG9vbGJhck9iamVjdHMpOworCisgIC8vIFdlIG9ubHkgd2FudCBPTkUgZWRpdG9yIGF0IGEgdGltZSB0byBiZSBhY3RpdmUKKyAgaWYgKCBYaW5oYS5fY3VycmVudGx5QWN0aXZlRWRpdG9yICkKKyAgeworICAgIGlmICggWGluaGEuX2N1cnJlbnRseUFjdGl2ZUVkaXRvciA9PSB0aGlzICkKKyAgICB7CisgICAgICB0aGlzLmFjdGl2YXRlRWRpdG9yKCk7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIHRoaXMuZGlzYWJsZVRvb2xiYXIoKTsKKyAgfQorfTsKKworLyoqCisgKiBDcmVhdGUgYSBicmVhayBlbGVtZW50IHRvIGFkZCBpbiB0aGUgdG9vbGJhcgorICoKKyAqIEByZXR1cm4ge0RvbU5vZGV9IEhUTUwgZWxlbWVudCB0byBhZGQKKyAqIEBwcml2YXRlCisgKi8KK1hpbmhhLl9jcmVhdGVUb29sYmFyQnJlYWtpbmdFbGVtZW50ID0gZnVuY3Rpb24oKQoreworICB2YXIgYnJrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgIGJyay5zdHlsZS5oZWlnaHQgPSAnMXB4JzsKKyAgYnJrLnN0eWxlLndpZHRoID0gJzFweCc7CisgIGJyay5zdHlsZS5saW5lSGVpZ2h0ID0gJzFweCc7CisgIGJyay5zdHlsZS5mb250U2l6ZSA9ICcxcHgnOworICBicmsuc3R5bGUuY2xlYXIgPSAnYm90aCc7CisgIHJldHVybiBicms7Cit9OworCisKKy8qKiBzZXBhcmF0ZSBmcm9tIHByZXZpb3VzIGNyZWF0ZVRvb2xCYXIgdG8gYWxsb3cgZHluYW1pYyBjaGFuZ2Ugb2YgdG9vbGJhcgorICogQHByaXZhdGUKKyAqIEByZXR1cm4ge0RvbU5vZGV9IHRvb2xiYXIKKyAqLworWGluaGEucHJvdG90eXBlLl9jcmVhdGVUb29sYmFyMSA9IGZ1bmN0aW9uIChlZGl0b3IsIHRvb2xiYXIsIHRiX29iamVjdHMpCit7CisgIC8vIFdlIHdpbGwgY2xlYW4gb3V0IGFueSBleGlzdGluZyB0b29sYmFyIGVsZW1lbnRzLgorICB3aGlsZSAodG9vbGJhci5sYXN0Q2hpbGQpCisgIHsKKyAgICB0b29sYmFyLnJlbW92ZUNoaWxkKHRvb2xiYXIubGFzdENoaWxkKTsKKyAgfQorCisgIHZhciB0Yl9yb3c7CisgIC8vIFRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgYnV0IElFIHNlZW1zIHRvIGZsb2F0IG91dHNpZGUgb2YgdGhlIGNvbnRhaW5lcgorICAvLyB3aGVuIHdlIGZsb2F0IHRvb2xiYXIgc2VjdGlvbnMsIHNvIHdlIGhhdmUgdG8gY2xlYXI6Ym90aCBoZXJlIGFzIHdlbGwKKyAgLy8gYXMgYXQgdGhlIGVuZCAod2hpY2ggd2UgZG8gaGF2ZSB0byBkbykuCisgIGlmICggZWRpdG9yLmNvbmZpZy5mbG93VG9vbGJhcnMgKQorICB7CisgICAgdG9vbGJhci5hcHBlbmRDaGlsZChYaW5oYS5fY3JlYXRlVG9vbGJhckJyZWFraW5nRWxlbWVudCgpKTsKKyAgfQorCisgIC8vIGNyZWF0ZXMgYSBuZXcgbGluZSBpbiB0aGUgdG9vbGJhcgorICBmdW5jdGlvbiBuZXdMaW5lKCkKKyAgeworICAgIGlmICggdHlwZW9mIHRiX3JvdyAhPSAndW5kZWZpbmVkJyAmJiB0Yl9yb3cuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApCisgICAgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7CisgICAgdGFibGUuYm9yZGVyID0gIjBweCI7CisgICAgdGFibGUuY2VsbFNwYWNpbmcgPSAiMHB4IjsKKyAgICB0YWJsZS5jZWxsUGFkZGluZyA9ICIwcHgiOworICAgIGlmICggZWRpdG9yLmNvbmZpZy5mbG93VG9vbGJhcnMgKQorICAgIHsKKyAgICAgIGlmICggWGluaGEuaXNfaWUgKQorICAgICAgeworICAgICAgICB0YWJsZS5zdHlsZS5zdHlsZUZsb2F0ID0gImxlZnQiOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICB0YWJsZS5zdHlsZS5jc3NGbG9hdCA9ICJsZWZ0IjsKKyAgICAgIH0KKyAgICB9CisKKyAgICB0b29sYmFyLmFwcGVuZENoaWxkKHRhYmxlKTsKKyAgICAvLyBUQk9EWSBpcyByZXF1aXJlZCBmb3IgSUUsIG90aGVyd2lzZSB5b3UgZG9uJ3Qgc2VlIGFueXRoaW5nCisgICAgLy8gaW4gdGhlIFRBQkxFLgorICAgIHZhciB0Yl9ib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKTsKKyAgICB0YWJsZS5hcHBlbmRDaGlsZCh0Yl9ib2R5KTsKKyAgICB0Yl9yb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOworICAgIHRiX2JvZHkuYXBwZW5kQ2hpbGQodGJfcm93KTsKKworICAgIHRhYmxlLmNsYXNzTmFtZSA9ICd0b29sYmFyUm93JzsgLy8gbWVoLCBraW5kYS4KKyAgfSAvLyBFTkQgb2YgZnVuY3Rpb246IG5ld0xpbmUKKworICAvLyBpbml0IGZpcnN0IGxpbmUKKyAgbmV3TGluZSgpOworCisgIC8vIHVwZGF0ZXMgdGhlIHN0YXRlIG9mIGEgdG9vbGJhciBlbGVtZW50LiAgVGhpcyBmdW5jdGlvbiBpcyBtZW1iZXIgb2YKKyAgLy8gYSB0b29sYmFyIGVsZW1lbnQgb2JqZWN0ICh1bm5hbWVkIG9iamVjdHMgY3JlYXRlZCBieSBjcmVhdGVCdXR0b24gb3IKKyAgLy8gY3JlYXRlU2VsZWN0IGZ1bmN0aW9ucyBiZWxvdykuCisgIGZ1bmN0aW9uIHNldEJ1dHRvblN0YXR1cyhpZCwgbmV3dmFsKQorICB7CisgICAgdmFyIG9sZHZhbCA9IHRoaXNbaWRdOworICAgIHZhciBlbCA9IHRoaXMuZWxlbWVudDsKKyAgICBpZiAoIG9sZHZhbCAhPSBuZXd2YWwgKQorICAgIHsKKyAgICAgIHN3aXRjaCAoaWQpCisgICAgICB7CisgICAgICAgIGNhc2UgImVuYWJsZWQiOgorICAgICAgICAgIGlmICggbmV3dmFsICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBYaW5oYS5fcmVtb3ZlQ2xhc3MoZWwsICJidXR0b25EaXNhYmxlZCIpOworICAgICAgICAgICAgZWwuZGlzYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIFhpbmhhLl9hZGRDbGFzcyhlbCwgImJ1dHRvbkRpc2FibGVkIik7CisgICAgICAgICAgICBlbC5kaXNhYmxlZCA9IHRydWU7CisgICAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiYWN0aXZlIjoKKyAgICAgICAgICBpZiAoIG5ld3ZhbCApCisgICAgICAgICAgeworICAgICAgICAgICAgWGluaGEuX2FkZENsYXNzKGVsLCAiYnV0dG9uUHJlc3NlZCIpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgWGluaGEuX3JlbW92ZUNsYXNzKGVsLCAiYnV0dG9uUHJlc3NlZCIpOworICAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICB0aGlzW2lkXSA9IG5ld3ZhbDsKKyAgICB9CisgIH0gLy8gRU5EIG9mIGZ1bmN0aW9uOiBzZXRCdXR0b25TdGF0dXMKKworICAvLyB0aGlzIGZ1bmN0aW9uIHdpbGwgaGFuZGxlIGNyZWF0aW9uIG9mIGNvbWJvIGJveGVzLiAgUmVjZWl2ZXMgYXMKKyAgLy8gcGFyYW1ldGVyIHRoZSBuYW1lIG9mIGEgYnV0dG9uIGFzIGRlZmluZWQgaW4gdGhlIHRvb2xCYXIgY29uZmlnLgorICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGNyZWF0ZUJ1dHRvbiwgYWJvdmUsIGlmIHRoZSBnaXZlbiAidHh0IgorICAvLyBkb2Vzbid0IG1hdGNoIGEgYnV0dG9uLgorICBmdW5jdGlvbiBjcmVhdGVTZWxlY3QodHh0KQorICB7CisgICAgdmFyIG9wdGlvbnMgPSBudWxsOworICAgIHZhciBlbCA9IG51bGw7CisgICAgdmFyIGNtZCA9IG51bGw7CisgICAgdmFyIGN1c3RvbVNlbGVjdHMgPSBlZGl0b3IuY29uZmlnLmN1c3RvbVNlbGVjdHM7CisgICAgdmFyIGNvbnRleHQgPSBudWxsOworICAgIHZhciB0b29sdGlwID0gIiI7CisgICAgc3dpdGNoICh0eHQpCisgICAgeworICAgICAgY2FzZSAiZm9udHNpemUiOgorICAgICAgY2FzZSAiZm9udG5hbWUiOgorICAgICAgY2FzZSAiZm9ybWF0YmxvY2siOgorICAgICAgICAvLyB0aGUgZm9sbG93aW5nIGxpbmUgcmV0cmlldmVzIHRoZSBjb3JyZWN0CisgICAgICAgIC8vIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGJlY2F1c2UgdGhlIHZhcmlhYmxlIG5hbWUKKyAgICAgICAgLy8gaW5zaWRlIHRoZSBDb25maWcgb2JqZWN0IGlzIG5hbWVkIHRoZSBzYW1lIGFzIHRoZQorICAgICAgICAvLyBidXR0b24vc2VsZWN0IGluIHRoZSB0b29sYmFyLiAgRm9yIGluc3RhbmNlLCBpZiB0eHQKKyAgICAgICAgLy8gPT0gImZvcm1hdGJsb2NrIiB3ZSByZXRyaWV2ZSBjb25maWcuZm9ybWF0YmxvY2sgKG9yCisgICAgICAgIC8vIGEgZGlmZmVyZW50IHdheSB0byB3cml0ZSBpdCBpbiBKUyBpcworICAgICAgICAvLyBjb25maWdbImZvcm1hdGJsb2NrIl0uCisgICAgICAgIG9wdGlvbnMgPSBlZGl0b3IuY29uZmlnW3R4dF07CisgICAgICAgIGNtZCA9IHR4dDsKKyAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gdHJ5IHRvIGZldGNoIGl0IGZyb20gdGhlIGxpc3Qgb2YgcmVnaXN0ZXJlZCBzZWxlY3RzCisgICAgICAgIGNtZCA9IHR4dDsKKyAgICAgICAgdmFyIGRyb3Bkb3duID0gY3VzdG9tU2VsZWN0c1tjbWRdOworICAgICAgICBpZiAoIHR5cGVvZiBkcm9wZG93biAhPSAidW5kZWZpbmVkIiApCisgICAgICAgIHsKKyAgICAgICAgICBvcHRpb25zID0gZHJvcGRvd24ub3B0aW9uczsKKyAgICAgICAgICBjb250ZXh0ID0gZHJvcGRvd24uY29udGV4dDsKKyAgICAgICAgICBpZiAoIHR5cGVvZiBkcm9wZG93bi50b29sdGlwICE9ICJ1bmRlZmluZWQiICkKKyAgICAgICAgICB7CisgICAgICAgICAgICB0b29sdGlwID0gZHJvcGRvd24udG9vbHRpcDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgYWxlcnQoIkVSUk9SIFtjcmVhdGVTZWxlY3RdOlxuQ2FuJ3QgZmluZCB0aGUgcmVxdWVzdGVkIGRyb3Bkb3duIGRlZmluaXRpb24iKTsKKyAgICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICggb3B0aW9ucyApCisgICAgeworICAgICAgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKKyAgICAgIGVsLnRpdGxlID0gdG9vbHRpcDsKKyAgICAgIGVsLnN0eWxlLndpZHRoID0gJ2F1dG8nOworICAgICAgZWwubmFtZSA9IHR4dDsKKyAgICAgIHZhciBvYmogPQorICAgICAgeworICAgICAgICBuYW1lCTogdHh0LCAvLyBmaWVsZCBuYW1lCisgICAgICAgIGVsZW1lbnQgOiBlbCwJLy8gdGhlIFVJIGVsZW1lbnQgKFNFTEVDVCkKKyAgICAgICAgZW5hYmxlZCA6IHRydWUsIC8vIGlzIGl0IGVuYWJsZWQ/CisgICAgICAgIHRleHQJOiBmYWxzZSwgLy8gZW5hYmxlZCBpbiB0ZXh0IG1vZGU/CisgICAgICAgIGNtZAk6IGNtZCwgLy8gY29tbWFuZCBJRAorICAgICAgICBzdGF0ZQk6IHNldEJ1dHRvblN0YXR1cywgLy8gZm9yIGNoYW5naW5nIHN0YXRlCisgICAgICAgIGNvbnRleHQgOiBjb250ZXh0CisgICAgICB9OworICAgICAgCisgICAgICBYaW5oYS5mcmVlTGF0ZXIob2JqKTsKKyAgICAgIAorICAgICAgdGJfb2JqZWN0c1t0eHRdID0gb2JqOworICAgICAgCisgICAgICBmb3IgKCB2YXIgaSBpbiBvcHRpb25zICkKKyAgICAgIHsKKyAgICAgICAgLy8gcHJldmVudCBpdGVyYXRpbmcgb3ZlciB3cm9uZyB0eXBlCisgICAgICAgIGlmICggdHlwZW9mIG9wdGlvbnNbaV0gIT0gJ3N0cmluZycgKQorICAgICAgICB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIG9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7CisgICAgICAgIG9wLmlubmVySFRNTCA9IFhpbmhhLl9sYyhpKTsKKyAgICAgICAgb3AudmFsdWUgPSBvcHRpb25zW2ldOworICAgICAgICBpZiAodHh0ID09J2ZvbnRuYW1lJyAmJiBlZGl0b3IuY29uZmlnLnNob3dGb250U3R5bGVzSW5Ub29sYmFyKQorICAgICAgICB7CisgICAgICAgICAgb3Auc3R5bGUuZm9udEZhbWlseSA9IG9wdGlvbnNbaV07CisgICAgICAgIH0KKyAgICAgICAgZWwuYXBwZW5kQ2hpbGQob3ApOworICAgICAgfQorICAgICAgWGluaGEuX2FkZEV2ZW50KGVsLCAiY2hhbmdlIiwgZnVuY3Rpb24gKCkgeyBlZGl0b3IuX2NvbWJvU2VsZWN0ZWQoZWwsIHR4dCk7IH0gKTsKKyAgICB9CisgICAgcmV0dXJuIGVsOworICB9IC8vIEVORCBvZiBmdW5jdGlvbjogY3JlYXRlU2VsZWN0CisKKyAgLy8gYXBwZW5kcyBhIG5ldyBidXR0b24gdG8gdG9vbGJhcgorICBmdW5jdGlvbiBjcmVhdGVCdXR0b24odHh0KQorICB7CisgICAgLy8gdGhlIGVsZW1lbnQgdGhhdCB3aWxsIGJlIGNyZWF0ZWQKKyAgICB2YXIgZWwsIGJ0biwgb2JqID0gbnVsbDsKKyAgICBzd2l0Y2ggKHR4dCkKKyAgICB7CisgICAgICBjYXNlICJzZXBhcmF0b3IiOgorICAgICAgICBpZiAoIGVkaXRvci5jb25maWcuZmxvd1Rvb2xiYXJzICkKKyAgICAgICAgeworICAgICAgICAgIG5ld0xpbmUoKTsKKyAgICAgICAgfQorICAgICAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBlbC5jbGFzc05hbWUgPSAic2VwYXJhdG9yIjsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSAic3BhY2UiOgorICAgICAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBlbC5jbGFzc05hbWUgPSAic3BhY2UiOworICAgICAgYnJlYWs7CisgICAgICBjYXNlICJsaW5lYnJlYWsiOgorICAgICAgICBuZXdMaW5lKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgInRleHRpbmRpY2F0b3IiOgorICAgICAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiQSIpKTsKKyAgICAgICAgZWwuY2xhc3NOYW1lID0gImluZGljYXRvciI7CisgICAgICAgIGVsLnRpdGxlID0gWGluaGEuX2xjKCJDdXJyZW50IHN0eWxlIik7CisgICAgICAgIG9iaiA9CisgICAgICAgIHsKKyAgICAgICAgICBuYW1lCTogdHh0LCAvLyB0aGUgYnV0dG9uIG5hbWUgKGkuZS4gJ2JvbGQnKQorICAgICAgICAgIGVsZW1lbnQgOiBlbCwgLy8gdGhlIFVJIGVsZW1lbnQgKERJVikKKyAgICAgICAgICBlbmFibGVkIDogdHJ1ZSwgLy8gaXMgaXQgZW5hYmxlZD8KKyAgICAgICAgICBhY3RpdmUJOiBmYWxzZSwgLy8gaXMgaXQgcHJlc3NlZD8KKyAgICAgICAgICB0ZXh0CTogZmFsc2UsIC8vIGVuYWJsZWQgaW4gdGV4dCBtb2RlPworICAgICAgICAgIGNtZAk6ICJ0ZXh0aW5kaWNhdG9yIiwgLy8gdGhlIGNvbW1hbmQgSUQKKyAgICAgICAgICBzdGF0ZQk6IHNldEJ1dHRvblN0YXR1cyAvLyBmb3IgY2hhbmdpbmcgc3RhdGUKKyAgICAgICAgfTsKKyAgICAgIAorICAgICAgICBYaW5oYS5mcmVlTGF0ZXIob2JqKTsKKyAgICAgIAorICAgICAgICB0Yl9vYmplY3RzW3R4dF0gPSBvYmo7CisgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJ0biA9IGVkaXRvci5jb25maWcuYnRuTGlzdFt0eHRdOworICAgIH0KKyAgICBpZiAoICFlbCAmJiBidG4gKQorICAgIHsKKyAgICAgIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOworICAgICAgZWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CisgICAgICBlbC5ocmVmID0gJ2phdmFzY3JpcHQ6dm9pZCgwKSc7CisgICAgICBlbC5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICdub25lJzsKKyAgICAgIGVsLnRpdGxlID0gYnRuWzBdOworICAgICAgZWwuY2xhc3NOYW1lID0gImJ1dHRvbiI7CisgICAgICBlbC5zdHlsZS5kaXJlY3Rpb24gPSAibHRyIjsKKyAgICAgIC8vIGxldCdzIGp1c3QgcHJldGVuZCB3ZSBoYXZlIGEgYnV0dG9uIG9iamVjdCwgYW5kCisgICAgICAvLyBhc3NpZ24gYWxsIHRoZSBuZWVkZWQgaW5mb3JtYXRpb24gdG8gaXQuCisgICAgICBvYmogPQorICAgICAgeworICAgICAgICBuYW1lIDogdHh0LCAvLyB0aGUgYnV0dG9uIG5hbWUgKGkuZS4gJ2JvbGQnKQorICAgICAgICBlbGVtZW50IDogZWwsIC8vIHRoZSBVSSBlbGVtZW50IChESVYpCisgICAgICAgIGVuYWJsZWQgOiB0cnVlLCAvLyBpcyBpdCBlbmFibGVkPworICAgICAgICBhY3RpdmUgOiBmYWxzZSwgLy8gaXMgaXQgcHJlc3NlZD8KKyAgICAgICAgdGV4dCA6IGJ0blsyXSwgLy8gZW5hYmxlZCBpbiB0ZXh0IG1vZGU/CisgICAgICAgIGNtZAk6IGJ0blszXSwgLy8gdGhlIGNvbW1hbmQgSUQKKyAgICAgICAgc3RhdGUJOiBzZXRCdXR0b25TdGF0dXMsIC8vIGZvciBjaGFuZ2luZyBzdGF0ZQorICAgICAgICBjb250ZXh0IDogYnRuWzRdIHx8IG51bGwgLy8gZW5hYmxlZCBpbiBhIGNlcnRhaW4gY29udGV4dD8KKyAgICAgIH07CisgICAgICBYaW5oYS5mcmVlTGF0ZXIoZWwpOworICAgICAgWGluaGEuZnJlZUxhdGVyKG9iaik7CisKKyAgICAgIHRiX29iamVjdHNbdHh0XSA9IG9iajsKKworICAgICAgLy8gcHJldmVudCBkcmFnJmRyb3Agb2YgdGhlIGljb24gdG8gY29udGVudCBhcmVhCisgICAgICBlbC5vbmRyYWcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9OworCisgICAgICAvLyBoYW5kbGVycyB0byBlbXVsYXRlIG5pY2UgZmxhdCB0b29sYmFyIGJ1dHRvbnMKKyAgICAgIFhpbmhhLl9hZGRFdmVudCgKKyAgICAgICAgZWwsCisgICAgICAgICJtb3VzZW91dCIsCisgICAgICAgIGZ1bmN0aW9uKGV2KQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBvYmouZW5hYmxlZCApCisgICAgICAgICAgeworICAgICAgICAgICAgLy9YaW5oYS5fcmVtb3ZlQ2xhc3MoZWwsICJidXR0b25Ib3ZlciIpOworICAgICAgICAgICAgWGluaGEuX3JlbW92ZUNsYXNzKGVsLCAiYnV0dG9uQWN0aXZlIik7CisgICAgICAgICAgICBpZiAoIG9iai5hY3RpdmUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBYaW5oYS5fYWRkQ2xhc3MoZWwsICJidXR0b25QcmVzc2VkIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICApOworCisgICAgICBYaW5oYS5fYWRkRXZlbnQoCisgICAgICAgIGVsLAorICAgICAgICAibW91c2Vkb3duIiwKKyAgICAgICAgZnVuY3Rpb24oZXYpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIG9iai5lbmFibGVkICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBYaW5oYS5fYWRkQ2xhc3MoZWwsICJidXR0b25BY3RpdmUiKTsKKyAgICAgICAgICAgIFhpbmhhLl9yZW1vdmVDbGFzcyhlbCwgImJ1dHRvblByZXNzZWQiKTsKKyAgICAgICAgICAgIFhpbmhhLl9zdG9wRXZlbnQoWGluaGEuaXNfaWUgPyB3aW5kb3cuZXZlbnQgOiBldik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICApOworCisgICAgICAvLyB3aGVuIGNsaWNrZWQsIGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICBYaW5oYS5fYWRkRXZlbnQoCisgICAgICAgIGVsLAorICAgICAgICAiY2xpY2siLAorICAgICAgICBmdW5jdGlvbihldikKKyAgICAgICAgeworICAgICAgICAgIGV2ID0gZXYgfHwgd2luZG93LmV2ZW50OworICAgICAgICAgIGVkaXRvci5idG5DbGlja0V2ZW50ID0ge2NsaWVudFggOiBldi5jbGllbnRYLCBjbGllbnRZIDogZXYuY2xpZW50WX07CisgICAgICAgICAgaWYgKCBvYmouZW5hYmxlZCApCisgICAgICAgICAgeworICAgICAgICAgICAgWGluaGEuX3JlbW92ZUNsYXNzKGVsLCAiYnV0dG9uQWN0aXZlIik7CisgICAgICAgICAgICAvL1hpbmhhLl9yZW1vdmVDbGFzcyhlbCwgImJ1dHRvbkhvdmVyIik7CisgICAgICAgICAgICBpZiAoIFhpbmhhLmlzX2dlY2tvICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZWRpdG9yLmFjdGl2YXRlRWRpdG9yKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBXZSBwYXNzIHRoZSBldmVudCB0byB0aGUgYWN0aW9uIHNvIHRoZXkgY2FuIGNhbiB1c2UgaXQgdG8KKyAgICAgICAgICAgIC8vIGVuaGFuY2UgdGhlIFVJIChlLmcuIHJlc3BvbmQgdG8gc2hpZnQgb3IgY3RybC1jbGljaykKKyAgICAgICAgICAgIG9iai5jbWQoZWRpdG9yLCBvYmoubmFtZSwgb2JqLCBldik7CisgICAgICAgICAgICBYaW5oYS5fc3RvcEV2ZW50KGV2KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICk7CisKKyAgICAgIHZhciBpX2NvbnRhaW4gPSBYaW5oYS5tYWtlQnRuSW1nKGJ0blsxXSk7CisgICAgICB2YXIgaW1nID0gaV9jb250YWluLmZpcnN0Q2hpbGQ7CisgICAgICBYaW5oYS5mcmVlTGF0ZXIoaV9jb250YWluKTsKKyAgICAgIFhpbmhhLmZyZWVMYXRlcihpbWcpOworICAgICAgCisgICAgICBlbC5hcHBlbmRDaGlsZChpX2NvbnRhaW4pOworCisgICAgICBvYmouaW1nZWwgPSBpbWc7ICAgICAgCisgICAgICBvYmouc3dhcEltYWdlID0gZnVuY3Rpb24obmV3aW1nKQorICAgICAgeworICAgICAgICBpZiAoIHR5cGVvZiBuZXdpbWcgIT0gJ3N0cmluZycgKQorICAgICAgICB7CisgICAgICAgICAgaW1nLnNyYyA9IG5ld2ltZ1swXTsKKyAgICAgICAgICBpbWcuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOworICAgICAgICAgIGltZy5zdHlsZS50b3AgID0gbmV3aW1nWzJdID8gKCctJyArICgxOCAqIChuZXdpbWdbMl0gKyAxKSkgKyAncHgnKSA6ICctMThweCc7CisgICAgICAgICAgaW1nLnN0eWxlLmxlZnQgPSBuZXdpbWdbMV0gPyAoJy0nICsgKDE4ICogKG5ld2ltZ1sxXSArIDEpKSArICdweCcpIDogJy0xOHB4JzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBvYmouaW1nZWwuc3JjID0gbmV3aW1nOworICAgICAgICAgIGltZy5zdHlsZS50b3AgPSAnMHB4JzsKKyAgICAgICAgICBpbWcuc3R5bGUubGVmdCA9ICcwcHgnOworICAgICAgICB9CisgICAgICB9OworICAgICAgCisgICAgfQorICAgIGVsc2UgaWYoICFlbCApCisgICAgeworICAgICAgZWwgPSBjcmVhdGVTZWxlY3QodHh0KTsKKyAgICB9CisKKyAgICByZXR1cm4gZWw7CisgIH0KKworICB2YXIgZmlyc3QgPSB0cnVlOworICBmb3IgKCB2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZy50b29sYmFyLmxlbmd0aDsgKytpICkKKyAgeworICAgIGlmICggIWZpcnN0ICkKKyAgICB7CisgICAgICAvLyBjcmVhdGVCdXR0b24oImxpbmVicmVhayIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCB0aGlzLmNvbmZpZy50b29sYmFyW2ldID09PSBudWxsICkKKyAgICB7CisgICAgICB0aGlzLmNvbmZpZy50b29sYmFyW2ldID0gWydzZXBhcmF0b3InXTsKKyAgICB9CisgICAgdmFyIGdyb3VwID0gdGhpcy5jb25maWcudG9vbGJhcltpXTsKKworICAgIGZvciAoIHZhciBqID0gMDsgaiA8IGdyb3VwLmxlbmd0aDsgKytqICkKKyAgICB7CisgICAgICB2YXIgY29kZSA9IGdyb3VwW2pdOworICAgICAgdmFyIHRiX2NlbGw7CisgICAgICBpZiAoIC9eKFtJVF0pXFsoLio/KVxdLy50ZXN0KGNvZGUpICkKKyAgICAgIHsKKyAgICAgICAgLy8gc3BlY2lhbCBjYXNlLCBjcmVhdGUgdGV4dCBsYWJlbAorICAgICAgICB2YXIgbDdlZCA9IFJlZ0V4cC4kMSA9PSAiSSI7IC8vIGxvY2FsaXplZD8KKyAgICAgICAgdmFyIGxhYmVsID0gUmVnRXhwLiQyOworICAgICAgICBpZiAoIGw3ZWQgKQorICAgICAgICB7CisgICAgICAgICAgbGFiZWwgPSBYaW5oYS5fbGMobGFiZWwpOworICAgICAgICB9CisgICAgICAgIHRiX2NlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOworICAgICAgICB0Yl9yb3cuYXBwZW5kQ2hpbGQodGJfY2VsbCk7CisgICAgICAgIHRiX2NlbGwuY2xhc3NOYW1lID0gImxhYmVsIjsKKyAgICAgICAgdGJfY2VsbC5pbm5lckhUTUwgPSBsYWJlbDsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCB0eXBlb2YgY29kZSAhPSAnZnVuY3Rpb24nICkKKyAgICAgIHsKKyAgICAgICAgdmFyIHRiX2VsZW1lbnQgPSBjcmVhdGVCdXR0b24oY29kZSk7CisgICAgICAgIGlmICggdGJfZWxlbWVudCApCisgICAgICAgIHsKKyAgICAgICAgICB0Yl9jZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKKyAgICAgICAgICB0Yl9jZWxsLmNsYXNzTmFtZSA9ICd0b29sYmFyRWxlbWVudCc7CisgICAgICAgICAgdGJfcm93LmFwcGVuZENoaWxkKHRiX2NlbGwpOworICAgICAgICAgIHRiX2NlbGwuYXBwZW5kQ2hpbGQodGJfZWxlbWVudCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIHRiX2VsZW1lbnQgPT09IG51bGwgKQorICAgICAgICB7CisgICAgICAgICAgYWxlcnQoIkZJWE1FOiBVbmtub3duIHRvb2xiYXIgaXRlbTogIiArIGNvZGUpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKCBlZGl0b3IuY29uZmlnLmZsb3dUb29sYmFycyApCisgIHsKKyAgICB0b29sYmFyLmFwcGVuZENoaWxkKFhpbmhhLl9jcmVhdGVUb29sYmFyQnJlYWtpbmdFbGVtZW50KCkpOworICB9CisKKyAgcmV0dXJuIHRvb2xiYXI7Cit9OworCisvKiogY3JlYXRlcyBhIGJ1dHRvbiAoaS5lLiBjb250YWluZXIgZWxlbWVudCArIGltYWdlKQorICogQHByaXZhdGUKKyAqIEByZXR1cm4ge0RvbU5vZGV9IGNvbnRlYWluZXIgZWxlbWVudAorICovCitYaW5oYS5tYWtlQnRuSW1nID0gZnVuY3Rpb24oaW1nRGVmLCBkb2MpCit7CisgIGlmICggIWRvYyApCisgIHsKKyAgICBkb2MgPSBkb2N1bWVudDsKKyAgfQorCisgIGlmICggIWRvYy5feGluaGFJbWdDYWNoZSApCisgIHsKKyAgICBkb2MuX3hpbmhhSW1nQ2FjaGUgPSB7fTsKKyAgICBYaW5oYS5mcmVlTGF0ZXIoZG9jLl94aW5oYUltZ0NhY2hlKTsKKyAgfQorCisgIHZhciBpX2NvbnRhaW4gPSBudWxsOworICBpZiAoIFhpbmhhLmlzX2llICYmICggKCAhZG9jLmNvbXBhdE1vZGUgKSB8fCAoIGRvYy5jb21wYXRNb2RlICYmIGRvYy5jb21wYXRNb2RlID09ICJCYWNrQ29tcGF0IiApICkgKQorICB7CisgICAgaV9jb250YWluID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKKyAgICAvLyBJRTEwIFF1aXJrcyA6LS8KKyAgICBpX2NvbnRhaW4uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOworICB9CisgIGVsc2UKKyAgeworICAgIGlfY29udGFpbiA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBpX2NvbnRhaW4uc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOworICB9CisKKyAgaV9jb250YWluLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7CisgIGlfY29udGFpbi5zdHlsZS53aWR0aCA9ICIxOHB4IjsKKyAgaV9jb250YWluLnN0eWxlLmhlaWdodCA9ICIxOHB4IjsKKyAgaV9jb250YWluLmNsYXNzTmFtZSA9ICdidXR0b25JbWFnZUNvbnRhaW5lcic7CisKKyAgdmFyIGltZyA9IG51bGw7CisgIGlmICggdHlwZW9mIGltZ0RlZiA9PSAnc3RyaW5nJyApCisgIHsKKyAgICBpZiAoIGRvYy5feGluaGFJbWdDYWNoZVtpbWdEZWZdICkKKyAgICB7CisgICAgICBpbWcgPSBkb2MuX3hpbmhhSW1nQ2FjaGVbaW1nRGVmXS5jbG9uZU5vZGUoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGlmIChYaW5oYS5pZV92ZXJzaW9uIDwgNyAmJiAvXC5wbmckLy50ZXN0KGltZ0RlZlswXSkpCisgICAgICB7CisgICAgICAgIGltZyA9IGRvYy5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAKKyAgICAgICAgaW1nLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOworICAgICAgICBpbWcuc3R5bGUud2lkdGggPSAnMThweCc7CisgICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSAnMThweCc7CisgICAgICAgIGltZy5zdHlsZS5maWx0ZXIgPSAncHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSInK2ltZ0RlZisnIiknOworCQlpbWcudW5zZWxlY3RhYmxlID0gJ29uJzsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaW1nID0gZG9jLmNyZWF0ZUVsZW1lbnQoImltZyIpOworICAgICAgICBpbWcuc3JjID0gaW1nRGVmOworICAgICAgfQorICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICBpZiAoIGRvYy5feGluaGFJbWdDYWNoZVtpbWdEZWZbMF1dICkKKyAgICB7CisgICAgICBpbWcgPSBkb2MuX3hpbmhhSW1nQ2FjaGVbaW1nRGVmWzBdXS5jbG9uZU5vZGUoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGlmIChYaW5oYS5pZV92ZXJzaW9uIDwgNyAmJiAvXC5wbmckLy50ZXN0KGltZ0RlZlswXSkpCisgICAgICB7CisgICAgICAgIGltZyA9IGRvYy5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgIGltZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKKyAgICAgICAgaW1nLnN0eWxlLndpZHRoID0gJzE4cHgnOworICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gJzE4cHgnOworICAgICAgICBpbWcuc3R5bGUuZmlsdGVyID0gJ3Byb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0iJytpbWdEZWZbMF0rJyIpJzsKKwkJaW1nLnVuc2VsZWN0YWJsZSA9ICdvbic7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGltZyA9IGRvYy5jcmVhdGVFbGVtZW50KCJpbWciKTsKKyAgICAgICAgaW1nLnNyYyA9IGltZ0RlZlswXTsKKyAgICAgIH0KKyAgICAgIGltZy5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7CisgICAgfQorICAgIC8vIEB0b2RvOiBVc2luZyAxOCBkb250IGxldCB1cyB1c2UgYSB0aGVtZSB3aXRoIGl0cyBvd24gaWNvbiB0b29sYmFyIGhlaWdodAorICAgIC8vICAgICAgICBhbmQgd2lkdGguIFByb2JhYmx5IGJldHRlciB0byBjYWxjdWxhdGUgdGhpcyB2YWx1ZSAxOAorICAgIC8vICAgICAgICB2YXIgc2l6ZUljb24gPSBpbWcud2lkdGggLyBuYl9lbGVtZW50c19wZXJfaW1hZ2U7CisgICAgaW1nLnN0eWxlLnRvcCAgPSBpbWdEZWZbMl0gPyAoJy0nICsgKDE4ICogKGltZ0RlZlsyXSArIDEpKSArICdweCcpIDogJy0xOHB4JzsKKyAgICBpbWcuc3R5bGUubGVmdCA9IGltZ0RlZlsxXSA/ICgnLScgKyAoMTggKiAoaW1nRGVmWzFdICsgMSkpICsgJ3B4JykgOiAnLTE4cHgnOworICB9CisgIGlfY29udGFpbi5hcHBlbmRDaGlsZChpbWcpOworICByZXR1cm4gaV9jb250YWluOworfTsKKy8qKiBjcmVhdGVzIHRoZSBzdGF0dXMgYmFyIAorICogQHByaXZhdGUKKyAqIEByZXR1cm4ge0RvbU5vZGV9IHN0YXR1cyBiYXIKKyAqLworWGluaGEucHJvdG90eXBlLl9jcmVhdGVTdGF0dXNCYXIgPSBmdW5jdGlvbigpCit7CisgIC8vIFRPRE86IE1vdmUgc3R5bGluZyBpbnRvIHNlcGFyYXRlIHN0eWxlc2hlZXQKKyAgdGhpcy5zZXRMb2FkaW5nTWVzc2FnZShYaW5oYS5fbGMoJ0NyZWF0ZSBTdGF0dXNiYXInKSk7CisgIHZhciBzdGF0dXNCYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgc3RhdHVzQmFyLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKKyAgc3RhdHVzQmFyLmNsYXNzTmFtZSA9ICJzdGF0dXNCYXIiOworICBzdGF0dXNCYXIuc3R5bGUud2lkdGggPSAiMTAwJSI7CisgIFhpbmhhLmZyZWVMYXRlcih0aGlzLCAnX3N0YXR1c0JhcicpOworCisgIHZhciB3aWRnZXRDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgd2lkZ2V0Q29udGFpbmVyLmNsYXNzTmFtZSA9ICJzdGF0dXNCYXJXaWRnZXRDb250YWluZXIiOworICB3aWRnZXRDb250YWluZXIuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOworICB3aWRnZXRDb250YWluZXIuc3R5bGUucmlnaHQgPSAiMCI7CisgIHdpZGdldENvbnRhaW5lci5zdHlsZS50b3AgPSAiMCI7CisgIHdpZGdldENvbnRhaW5lci5zdHlsZS5wYWRkaW5nID0gIjNweCAzcHggM3B4IDEwcHgiOworICBzdGF0dXNCYXIuYXBwZW5kQ2hpbGQod2lkZ2V0Q29udGFpbmVyKTsKKworICAvLyBzdGF0dXNiYXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoWGluaGEuX2xjKCJQYXRoIikgKyAiOiAiKSk7CisgIC8vIGNyZWF0ZXMgYSBob2xkZXIgZm9yIHRoZSBwYXRoIHZpZXcKKyAgdmFyIHN0YXR1c0JhclRyZWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgIHN0YXR1c0JhclRyZWUuY2xhc3NOYW1lID0gInN0YXR1c0JhclRyZWUiOworICBpZihYaW5oYS5pc19pb3MpCisgIHsKKyAgICBzdGF0dXNCYXJUcmVlLmlubmVySFRNTCA9IFhpbmhhLl9sYygiVG91Y2ggaGVyZSBmaXJzdCB0byBhY3RpdmF0ZSBlZGl0b3IuIik7CisgIH0KKyAgZWxzZQorICB7CisgICAgc3RhdHVzQmFyVHJlZS5pbm5lckhUTUwgPSBYaW5oYS5fbGMoIlBhdGgiKSArICI6ICI7CisgIH0KKworICB0aGlzLl9zdGF0dXNCYXJUcmVlID0gc3RhdHVzQmFyVHJlZTsKKyAgWGluaGEuZnJlZUxhdGVyKHRoaXMsICdfc3RhdHVzQmFyVHJlZScpOworICBzdGF0dXNCYXIuYXBwZW5kQ2hpbGQoc3RhdHVzQmFyVHJlZSk7CisgIHZhciBzdGF0dXNCYXJUZXh0TW9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgc3RhdHVzQmFyVGV4dE1vZGUuaW5uZXJIVE1MID0gWGluaGEuaHRtbEVuY29kZShYaW5oYS5fbGMoIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiIpKTsKKyAgc3RhdHVzQmFyVGV4dE1vZGUuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKworICB0aGlzLl9zdGF0dXNCYXJUZXh0TW9kZSA9IHN0YXR1c0JhclRleHRNb2RlOworICBYaW5oYS5mcmVlTGF0ZXIodGhpcywgJ19zdGF0dXNCYXJUZXh0TW9kZScpOworICBzdGF0dXNCYXIuYXBwZW5kQ2hpbGQoc3RhdHVzQmFyVGV4dE1vZGUpOworCisgIHN0YXR1c0Jhci5zdHlsZS53aGl0ZVNwYWNlID0gIm5vd3JhcCI7CisKKyAgdmFyIHNlbGYgPSB0aGlzOworICB0aGlzLm5vdGlmeU9uKCJiZWZvcmVfcmVzaXplIiwgZnVuY3Rpb24oZXZ0LCBzaXplKSB7CisgICAgc2VsZi5fc3RhdHVzQmFyLnN0eWxlLndpZHRoID0gbnVsbDsKKyAgfSk7CisgIHRoaXMubm90aWZ5T24oInJlc2l6ZSIsIGZ1bmN0aW9uKGV2dCwgc2l6ZSkgeworICAgIC8vIEhBQ0shIElFNiBkb2Vzbid0IHVwZGF0ZSB0aGUgd2lkdGggcHJvcGVybHkgd2hlbiByZXNpemluZyBpZiBpdCdzIAorICAgIC8vIGdpdmVuIGluIHBpeGVscywgYnV0IGRvZXMgaGlkZSB0aGUgb3ZlcmZsb3cgY29udGVudCBjb3JyZWN0bHkgd2hlbiAKKyAgICAvLyB1c2luZyAxMDAlIGFzIHRoZSB3aWR0aC4gKEZGLCBTYWZhcmkgYW5kIElFNyBhbGwgcmVxdWlyZSBmaXhlZAorICAgIC8vIHBpeGVsIHdpZHRocyB0byBkbyB0aGUgb3ZlcmZsb3cgaGlkaW5nIGNvcnJlY3RseS4pCisgICAgaWYgKFhpbmhhLmlzX2llICYmIFhpbmhhLmllX3ZlcnNpb24gPT0gNikKKyAgICB7CisgICAgICBzZWxmLl9zdGF0dXNCYXIuc3R5bGUud2lkdGggPSAiMTAwJSI7CisgICAgfSAKKyAgICBlbHNlCisgICAgeworICAgICAgdmFyIHdpZHRoID0gc2l6ZVsnd2lkdGgnXTsKKyAgICAgIAorICAgICAgLy8gdGlja2V0OjE2MDEgZml4ZWQgaGVyZSBieSAycHggYWRqdXN0bWVudCBmb3IgYm9yZGVycworICAgICAgLy8gICAgYW5kIGJ5IHNldHRpbmcgYm94LXNpemluZyBvbiAuaHRtbGFyZWEgLnN0YXR1c0JhciBpbiBYaW5oYS5jc3MKKyAgICAgIHNlbGYuX3N0YXR1c0Jhci5zdHlsZS53aWR0aCA9ICh3aWR0aC0yKSArICJweCI7CisgICAgfQorICB9KTsKKworICB0aGlzLm5vdGlmeU9uKCJtb2RlY2hhbmdlIiwgZnVuY3Rpb24oZXZ0LCBtb2RlKSB7CisgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCByZWdpc3RlcmVkIHN0YXR1cyBiYXIgaXRlbXMKKyAgICAvLyBhbmQgc2hvdyB0aGVtIG9ubHkgaWYgdGhleSdyZSB0dXJuZWQgb24gZm9yCisgICAgLy8gdGhlIG5ldyBtb2RlLgorICAgIGZvciAodmFyIGkgaW4gc2VsZi5fc3RhdHVzV2lkZ2V0cykKKyAgICB7CisgICAgICB2YXIgd2lkZ2V0ID0gc2VsZi5fc3RhdHVzV2lkZ2V0c1tpXTsKKyAgICAgIGZvciAodmFyIGluZGV4PTA7IGluZGV4PHdpZGdldC5tb2Rlcy5sZW5ndGg7IGluZGV4KyspCisgICAgICB7CisgICAgICAgIGlmICh3aWRnZXQubW9kZXNbaW5kZXhdID09IG1vZGUubW9kZSkKKyAgICAgICAgeworICAgICAgICAgIHZhciBmb3VuZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmICh0eXBlb2YgZm91bmQgPT0gJ3VuZGVmaW5lZCcpCisgICAgICB7CisgICAgICAgIHdpZGdldC5ibG9jay5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOyAgCisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHdpZGdldC5ibG9jay5zdHlsZS5kaXNwbGF5ID0gIiI7CisgICAgICB9CisgICAgfQorICB9KTsKKworICBpZiAoICF0aGlzLmNvbmZpZy5zdGF0dXNCYXIgKQorICB7CisgICAgLy8gZGlzYWJsZSBpdC4uLgorICAgIHN0YXR1c0Jhci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICB9CisgIHJldHVybiBzdGF0dXNCYXI7Cit9OworCisvKiogUmVnaXN0ZXJzIGFuZCBpbnNlcnRzIGEgbmV3IGJsb2NrIGZvciBhIHdpZGdldCBpbiB0aGUgc3RhdHVzIGJhcgorIEBwYXJhbSBpZCB1bmlxdWUgc3RyaW5nIGlkZW50aWZlciBmb3IgdGhpcyBibG9jaworIEBwYXJhbSBtb2RlcyBsaXN0IG9mIG1vZGVzIHRoaXMgYmxvY2sgc2hvdWxkIGJlIHNob3duIGluCisKKyBAcmV0dXJucyByZWZlcmVuY2UgdG8gSFRNTCBlbGVtZW50IGluc2VydGVkIGludG8gdGhlIHN0YXR1cyBiYXIKKyAqLworWGluaGEucHJvdG90eXBlLnJlZ2lzdGVyU3RhdHVzV2lkZ2V0ID0gZnVuY3Rpb24oaWQsIG1vZGVzKQoreworICBtb2RlcyA9IG1vZGVzIHx8IFsnd3lzaXd5ZyddOworICBpZiAoIXRoaXMuX3N0YXR1c1dpZGdldHMpCisgIHsKKyAgICB0aGlzLl9zdGF0dXNXaWRnZXRzID0ge307CisgIH0KKworICB2YXIgYmxvY2sgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgYmxvY2suY2xhc3NOYW1lID0gInN0YXR1c0JhcldpZGdldCI7CisgIGJsb2NrID0gdGhpcy5fc3RhdHVzQmFyLmZpcnN0Q2hpbGQuYXBwZW5kQ2hpbGQoYmxvY2spOworCisgIHZhciBzaG93V2lkZ2V0ID0gZmFsc2U7CisgIGZvciAodmFyIGk9MDsgaTxtb2Rlcy5sZW5ndGg7IGkrKykKKyAgeworICAgIGlmIChtb2Rlc1tpXSA9PSB0aGlzLl9lZGl0TW9kZSkKKyAgICB7CisgICAgICBzaG93V2lkZ2V0ID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgYmxvY2suc3R5bGUuZGlzcGxheSA9IHNob3dXaWRnZXQgPT0gdHJ1ZSA/ICIiIDogIm5vbmUiOworCisgIHRoaXMuX3N0YXR1c1dpZGdldHNbaWRdID0ge2Jsb2NrOiBibG9jaywgbW9kZXM6IG1vZGVzfTsKKyAgcmV0dXJuIGJsb2NrOworfTsKKworLyoqIENyZWF0ZXMgdGhlIFhpbmhhIG9iamVjdCBhbmQgcmVwbGFjZXMgdGhlIHRleHRhcmVhIHdpdGggaXQuIExvYWRzIHJlcXVpcmVkIGZpbGVzLgorICogIEByZXR1cm5zIHtCb29sZWFufQorICovCitYaW5oYS5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiAoKQoreworICBpZiAoICFYaW5oYS5pc1N1cHBvcnRlZEJyb3dzZXIgKQorICB7CisgICAgcmV0dXJuOworICB9CisgIAorICB2YXIgaTsKKyAgdmFyIGVkaXRvciA9IHRoaXM7ICAvLyB3ZSdsbCBuZWVkICJ0aGlzIiBpbiBzb21lIG5lc3RlZCBmdW5jdGlvbnMKKyAgdmFyIHVybDsKKyAgdmFyIGZvdW5kID0gZmFsc2U7CisgIHZhciBsaW5rcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5rIik7CisKKyAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiWGluaGFDb3JlRGVzaWduIikpCisgIHsKKyAgICBfZWRpdG9yX2NzcyA9ICh0eXBlb2YgX2VkaXRvcl9jc3MgPT0gInN0cmluZyIpID8gX2VkaXRvcl9jc3MgOiAiWGluaGEuY3NzIjsKKyAgICBmb3IoaSA9IDA7IGk8bGlua3MubGVuZ3RoOyBpKyspCisgICAgeworICAgICAgaWYgKCAoIGxpbmtzW2ldLnJlbCA9PSAic3R5bGVzaGVldCIgKSAmJiAoIGxpbmtzW2ldLmhyZWYgPT0gX2VkaXRvcl91cmwgKyBfZWRpdG9yX2NzcyApICkKKyAgICAgIHsKKyAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgfQorICAgIH0KKyAgICBpZiAoICFmb3VuZCApCisgICAgeworICAgICAgWGluaGEubG9hZFN0eWxlKF9lZGl0b3JfY3NzLG51bGwsIlhpbmhhQ29yZURlc2lnbiIsdHJ1ZSk7CisgICAgfQorICB9CisgIAorICBpZiAoIF9lZGl0b3Jfc2tpbiAhPT0gIiIgJiYgIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJYaW5oYVNraW4iKSkKKyAgeworICAgIGZvdW5kID0gZmFsc2U7CisgICAgZm9yKGkgPSAwOyBpPGxpbmtzLmxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgIGlmICggKCBsaW5rc1tpXS5yZWwgPT0gInN0eWxlc2hlZXQiICkgJiYgKCBsaW5rc1tpXS5ocmVmID09IF9lZGl0b3JfdXJsICsgJ3NraW5zLycgKyBfZWRpdG9yX3NraW4gKyAnL3NraW4uY3NzJyApICkKKyAgICAgIHsKKyAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgfQorICAgIH0KKyAgICBpZiAoICFmb3VuZCApCisgICAgeworICAgICAgWGluaGEubG9hZFN0eWxlKCdza2lucy8nICsgX2VkaXRvcl9za2luICsgJy9za2luLmNzcycsbnVsbCwiWGluaGFTa2luIik7CisgICAgfQorICB9CisgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKCkgeyBlZGl0b3IuZ2VuZXJhdGUoKTsgfTsKKyAgLy8gTm93IGxvYWQgYSBzcGVjaWZpYyBicm93c2VyIHBsdWdpbiB3aGljaCB3aWxsIGltcGxlbWVudCB0aGUgYWJvdmUgZm9yIHVzLgorICBpZiAoWGluaGEuaXNfaWUpCisgIHsKKyAgICB1cmwgPSBfZWRpdG9yX3VybCArICdtb2R1bGVzL0ludGVybmV0RXhwbG9yZXIvSW50ZXJuZXRFeHBsb3Jlci5qcyc7CisgICAgaWYgKCAhWGluaGEubG9hZFBsdWdpbnMoW3twbHVnaW46IkludGVybmV0RXhwbG9yZXIiLHVybDp1cmx9XSwgY2FsbGJhY2sgKSApCisgICAgeyAgICAgICAgICAgIAorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXRoaXMucGx1Z2lucy5JbnRlcm5ldEV4cGxvcmVyKQorICAgIHsKKyAgICAgIGVkaXRvci5fYnJvd3NlclNwZWNpZmljUGx1Z2luID0gZWRpdG9yLnJlZ2lzdGVyUGx1Z2luKCdJbnRlcm5ldEV4cGxvcmVyJyk7CisgICAgfQorICB9CisgIGVsc2UgaWYgKFhpbmhhLmlzX3dlYmtpdCkKKyAgeworICAgIHVybCA9IF9lZGl0b3JfdXJsICsgJ21vZHVsZXMvV2ViS2l0L1dlYktpdC5qcyc7CisgICAgaWYgKCAhWGluaGEubG9hZFBsdWdpbnMoW3twbHVnaW46IldlYktpdCIsdXJsOnVybH1dLCBjYWxsYmFjayApICkKKyAgICB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghdGhpcy5wbHVnaW5zLldlYmtpdCkKKyAgICB7CisgICAgICBlZGl0b3IuX2Jyb3dzZXJTcGVjaWZpY1BsdWdpbiA9IGVkaXRvci5yZWdpc3RlclBsdWdpbignV2ViS2l0Jyk7CisgICAgfQorICB9CisgIGVsc2UgaWYgKFhpbmhhLmlzX29wZXJhKQorICB7CisgICAgdXJsID0gX2VkaXRvcl91cmwgKyAnbW9kdWxlcy9PcGVyYS9PcGVyYS5qcyc7CisgICAgaWYgKCAhWGluaGEubG9hZFBsdWdpbnMoW3twbHVnaW46Ik9wZXJhIix1cmw6dXJsfV0sIGNhbGxiYWNrICkgKQorICAgIHsgICAgICAgICAgICAKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCF0aGlzLnBsdWdpbnMuT3BlcmEpCisgICAgeworICAgICAgZWRpdG9yLl9icm93c2VyU3BlY2lmaWNQbHVnaW4gPSBlZGl0b3IucmVnaXN0ZXJQbHVnaW4oJ09wZXJhJyk7CisgICAgfQorICB9CisgIGVsc2UgaWYgKFhpbmhhLmlzX2dlY2tvKQorICB7CisgICAgdXJsID0gX2VkaXRvcl91cmwgKyAnbW9kdWxlcy9HZWNrby9HZWNrby5qcyc7CisgICAgaWYgKCAhWGluaGEubG9hZFBsdWdpbnMoW3twbHVnaW46IkdlY2tvIix1cmw6dXJsfV0sIGNhbGxiYWNrICkgKQorICAgIHsgICAgICAgICAgICAKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCF0aGlzLnBsdWdpbnMuR2Vja28pIAorICAgIHsKKyAgICAgIGVkaXRvci5fYnJvd3NlclNwZWNpZmljUGx1Z2luID0gZWRpdG9yLnJlZ2lzdGVyUGx1Z2luKCdHZWNrbycpOworICAgIH0KKyAgfQorCisgIGlmICggdHlwZW9mIERpYWxvZyA9PSAndW5kZWZpbmVkJyAmJiAhWGluaGEuX2xvYWRiYWNrKCBfZWRpdG9yX3VybCArICdtb2R1bGVzL0RpYWxvZ3MvZGlhbG9nLmpzJywgY2FsbGJhY2ssIHRoaXMgKSApCisgIHsgICAgCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaWYgKCB0eXBlb2YgWGluaGEuRGlhbG9nID09ICd1bmRlZmluZWQnICYmICAhWGluaGEuX2xvYWRiYWNrKCBfZWRpdG9yX3VybCArICdtb2R1bGVzL0RpYWxvZ3MvWGluaGFEaWFsb2cuanMnICwgY2FsbGJhY2ssIHRoaXMgKSApCisgIHsgICAgCisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIAorICB1cmwgPSBfZWRpdG9yX3VybCArICdtb2R1bGVzL0Z1bGxTY3JlZW4vZnVsbC1zY3JlZW4uanMnOworICBpZiAoICFYaW5oYS5sb2FkUGx1Z2lucyhbe3BsdWdpbjoiRnVsbFNjcmVlbiIsdXJsOnVybH1dLCBjYWxsYmFjayApKQorICB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIAorICB1cmwgPSBfZWRpdG9yX3VybCArICdtb2R1bGVzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLmpzJzsKKyAgaWYgKCAhWGluaGEubG9hZFBsdWdpbnMoW3twbHVnaW46IkNvbG9yUGlja2VyIix1cmw6dXJsfV0sIGNhbGxiYWNrICkgKQorICB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGVsc2UgaWYgKCB0eXBlb2YgWGluaGEuZ2V0UGx1Z2luQ29uc3RydWN0b3IoJ0NvbG9yUGlja2VyJykgIT0gJ3VuZGVmaW5lZCcgJiYgIXRoaXMucGx1Z2lucy5jb2xvclBpY2tlcikKKyAgeworICAgIGVkaXRvci5yZWdpc3RlclBsdWdpbignQ29sb3JQaWNrZXInKTsKKyAgfQorCisgIHZhciB0b29sYmFyID0gZWRpdG9yLmNvbmZpZy50b29sYmFyOworICBmb3IgKCBpID0gdG9vbGJhci5sZW5ndGg7IC0taSA+PSAwOyApCisgIHsKKyAgICBmb3IgKCB2YXIgaiA9IHRvb2xiYXJbaV0ubGVuZ3RoOyAtLWogPj0gMDsgKQorICAgIHsKKyAgICAgIHN3aXRjaCAodG9vbGJhcltpXVtqXSkKKyAgICAgIHsKKyAgICAgICAgY2FzZSAicG9wdXBlZGl0b3IiOgorICAgICAgICBjYXNlICJmdWxsc2NyZWVuIjoKKyAgICAgICAgICBpZiAoIXRoaXMucGx1Z2lucy5GdWxsU2NyZWVuKSAKKyAgICAgICAgICB7CisgICAgICAgICAgICBlZGl0b3IucmVnaXN0ZXJQbHVnaW4oJ0Z1bGxTY3JlZW4nKTsKKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJpbnNlcnRpbWFnZSI6CisgICAgICAgICAgdXJsID0gX2VkaXRvcl91cmwgKyAnbW9kdWxlcy9JbnNlcnRJbWFnZS9pbnNlcnRfaW1hZ2UuanMnOworICAgICAgICAgIGlmICggdHlwZW9mIFhpbmhhLnByb3RvdHlwZS5faW5zZXJ0SW1hZ2UgPT0gJ3VuZGVmaW5lZCcgJiYgIVhpbmhhLmxvYWRQbHVnaW5zKFt7cGx1Z2luOiJJbnNlcnRJbWFnZSIsdXJsOnVybH1dLCBjYWxsYmFjayApICkKKyAgICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCB0eXBlb2YgWGluaGEuZ2V0UGx1Z2luQ29uc3RydWN0b3IoJ0luc2VydEltYWdlJykgIT0gJ3VuZGVmaW5lZCcgJiYgIXRoaXMucGx1Z2lucy5JbnNlcnRJbWFnZSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBlZGl0b3IucmVnaXN0ZXJQbHVnaW4oJ0luc2VydEltYWdlJyk7CisgICAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiY3JlYXRlbGluayI6CisgICAgICAgICAgdXJsID0gX2VkaXRvcl91cmwgKyAnbW9kdWxlcy9DcmVhdGVMaW5rL2xpbmsuanMnOworICAgICAgICAgIGlmICggdHlwZW9mIFhpbmhhLmdldFBsdWdpbkNvbnN0cnVjdG9yKCdMaW5rZXInKSA9PSAndW5kZWZpbmVkJyAmJiAhWGluaGEubG9hZFBsdWdpbnMoW3twbHVnaW46IkNyZWF0ZUxpbmsiLHVybDp1cmx9XSwgY2FsbGJhY2sgKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCB0eXBlb2YgWGluaGEuZ2V0UGx1Z2luQ29uc3RydWN0b3IoJ0NyZWF0ZUxpbmsnKSAhPSAndW5kZWZpbmVkJyAmJiAhdGhpcy5wbHVnaW5zLkNyZWF0ZUxpbmspIAorICAgICAgICAgIHsKKyAgICAgICAgICAgIGVkaXRvci5yZWdpc3RlclBsdWdpbignQ3JlYXRlTGluaycpOworICAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgImluc2VydHRhYmxlIjoKKyAgICAgICAgICB1cmwgPSBfZWRpdG9yX3VybCArICdtb2R1bGVzL0luc2VydFRhYmxlL2luc2VydF90YWJsZS5qcyc7CisgICAgICAgICAgaWYgKCAhWGluaGEubG9hZFBsdWdpbnMoW3twbHVnaW46Ikluc2VydFRhYmxlIix1cmw6dXJsfV0sIGNhbGxiYWNrICkgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoIHR5cGVvZiBYaW5oYS5nZXRQbHVnaW5Db25zdHJ1Y3RvcignSW5zZXJ0VGFibGUnKSAhPSAndW5kZWZpbmVkJyAmJiAhdGhpcy5wbHVnaW5zLkluc2VydFRhYmxlKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGVkaXRvci5yZWdpc3RlclBsdWdpbignSW5zZXJ0VGFibGUnKTsKKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJhYm91dCI6CisgICAgICAgICAgdXJsID0gX2VkaXRvcl91cmwgKyAnbW9kdWxlcy9BYm91dEJveC9BYm91dEJveC5qcyc7CisgICAgICAgICAgaWYgKCAhWGluaGEubG9hZFBsdWdpbnMoW3twbHVnaW46IkFib3V0Qm94Iix1cmw6dXJsfV0sIGNhbGxiYWNrICkgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoIHR5cGVvZiBYaW5oYS5nZXRQbHVnaW5Db25zdHJ1Y3RvcignQWJvdXRCb3gnKSAhPSAndW5kZWZpbmVkJyAmJiAhdGhpcy5wbHVnaW5zLkFib3V0Qm94KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGVkaXRvci5yZWdpc3RlclBsdWdpbignQWJvdXRCb3gnKTsKKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vIElmIHRoaXMgaXMgZ2Vja28sIHNldCB1cCB0aGUgcGFyYWdyYXBoIGhhbmRsaW5nIG5vdworICBpZiAoIFhpbmhhLmlzX2dlY2tvICYmICBlZGl0b3IuY29uZmlnLm1velBhcmFIYW5kbGVyICE9ICdidWlsdC1pbicgKQorICB7CisgICAgaWYgKCAgIVhpbmhhLmxvYWRQbHVnaW5zKFt7cGx1Z2luOiJFbnRlclBhcmFncmFwaHMiLHVybDogX2VkaXRvcl91cmwgKyAnbW9kdWxlcy9HZWNrby9wYXJhSGFuZGxlckJlc3QuanMnfV0sIGNhbGxiYWNrICkgKQorICAgIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCF0aGlzLnBsdWdpbnMuRW50ZXJQYXJhZ3JhcGhzKSAKKyAgICB7CisgICAgICBlZGl0b3IucmVnaXN0ZXJQbHVnaW4oJ0VudGVyUGFyYWdyYXBocycpOworICAgIH0KKyAgfQorICB2YXIgZ2V0SHRtbE1ldGhvZFBsdWdpbiA9IHRoaXMuY29uZmlnLmdldEh0bWxNZXRob2QgPT0gJ1RyYW5zZm9ybUlubmVySFRNTCcgPyBfZWRpdG9yX3VybCArICdtb2R1bGVzL0dldEh0bWwvVHJhbnNmb3JtSW5uZXJIVE1MLmpzJyA6ICBfZWRpdG9yX3VybCArICdtb2R1bGVzL0dldEh0bWwvRE9Nd2Fsay5qcyc7CisKKyAgaWYgKCAhWGluaGEubG9hZFBsdWdpbnMoW3twbHVnaW46IkdldEh0bWxJbXBsZW1lbnRhdGlvbiIsdXJsOmdldEh0bWxNZXRob2RQbHVnaW59XSwgY2FsbGJhY2spKQorICB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGVsc2UgaWYgKCF0aGlzLnBsdWdpbnMuR2V0SHRtbEltcGxlbWVudGF0aW9uKQorICB7CisgICAgZWRpdG9yLnJlZ2lzdGVyUGx1Z2luKCdHZXRIdG1sSW1wbGVtZW50YXRpb24nKTsKKyAgfQorICBmdW5jdGlvbiBnZXRUZXh0Q29udGVudChub2RlKQorICB7CisgICAgcmV0dXJuIG5vZGUudGV4dENvbnRlbnQgfHwgbm9kZS50ZXh0OworICB9CisgIGlmIChfZWRpdG9yX3NraW4pCisgIHsKKyAgICB0aGlzLnNraW5JbmZvID0ge307CisgICAgdmFyIHNraW5YTUwgPSBYaW5oYS5fZ2V0dXJsY29udGVudChfZWRpdG9yX3VybCArICdza2lucy8nICsgX2VkaXRvcl9za2luICsgJy9za2luLnhtbCcsIHRydWUpOworICAgIGlmIChza2luWE1MKQorICAgIHsKKyAgICAgIHZhciBtZXRhID0gc2tpblhNTC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbWV0YScpOworICAgICAgZm9yIChpPTA7aTxtZXRhLmxlbmd0aDtpKyspCisgICAgICB7CisgICAgICAgIHRoaXMuc2tpbkluZm9bbWV0YVtpXS5nZXRBdHRyaWJ1dGUoJ25hbWUnKV0gPSBtZXRhW2ldLmdldEF0dHJpYnV0ZSgndmFsdWUnKTsKKyAgICAgIH0KKyAgICAgIHZhciByZWNvbW1lbmRlZEljb25zID0gc2tpblhNTC5nZXRFbGVtZW50c0J5VGFnTmFtZSgncmVjb21tZW5kZWRJY29ucycpOworICAgICAgaWYgKCFfZWRpdG9yX2ljb25zICYmIHJlY29tbWVuZGVkSWNvbnMubGVuZ3RoICYmIGdldFRleHRDb250ZW50KHJlY29tbWVuZGVkSWNvbnNbMF0pKQorICAgICAgeworICAgICAgICBfZWRpdG9yX2ljb25zID0gZ2V0VGV4dENvbnRlbnQocmVjb21tZW5kZWRJY29uc1swXSk7CisgICAgICB9CisgICAgfQorICB9CisgIGlmIChfZWRpdG9yX2ljb25zKSAKKyAgeworICAgIHZhciBpY29uc1hNTCA9IFhpbmhhLl9nZXR1cmxjb250ZW50KF9lZGl0b3JfdXJsICsgJ2ljb25zZXRzLycgKyBfZWRpdG9yX2ljb25zICsgJy9pY29uc2V0LnhtbCcsIHRydWUpOworCisgICAgaWYgKGljb25zWE1MKQorICAgIHsKKyAgICAgIHZhciBpY29ucyA9IGljb25zWE1MLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpY29uJyk7CisgICAgICB2YXIgaWNvbiwgaWQsIHBhdGgsIHR5cGUsIHgsIHk7CisKKyAgICAgIGZvciAoaT0wO2k8aWNvbnMubGVuZ3RoO2krKykKKyAgICAgIHsKKyAgICAgICAgaWNvbiA9IGljb25zW2ldOworICAgICAgICBpZCA9IGljb24uZ2V0QXR0cmlidXRlKCdpZCcpOworICAgICAgICAKKyAgICAgICAgaWYgKGljb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoX2VkaXRvcl9sYW5nKS5sZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICBpY29uID0gaWNvbi5nZXRFbGVtZW50c0J5VGFnTmFtZShfZWRpdG9yX2xhbmcpWzBdOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGljb24gPSBpY29uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkZWZhdWx0JylbMF07CisgICAgICAgIH0KKyAgICAgICAgcGF0aCA9IGdldFRleHRDb250ZW50KGljb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhdGgnKVswXSk7CisgICAgICAgIHBhdGggPSAoIS9eXC8vLnRlc3QocGF0aCkgPyBfZWRpdG9yX3VybCA6ICcnKSArIHBhdGg7CisgICAgICAgIHR5cGUgPSBpY29uLmdldEF0dHJpYnV0ZSgndHlwZScpOworICAgICAgICBpZiAodHlwZSA9PSAnbWFwJykKKyAgICAgICAgeworICAgICAgICAgIHggPSBwYXJzZUludChnZXRUZXh0Q29udGVudChpY29uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd4JylbMF0pLCAxMCk7CisgICAgICAgICAgeSA9IHBhcnNlSW50KGdldFRleHRDb250ZW50KGljb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3knKVswXSksIDEwKTsKKyAgICAgICAgICBpZiAodGhpcy5jb25maWcuYnRuTGlzdFtpZF0pIAorICAgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuY29uZmlnLmJ0bkxpc3RbaWRdWzFdID0gW3BhdGgsIHgsIHldOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAodGhpcy5jb25maWcuaWNvbkxpc3RbaWRdKSAKKyAgICAgICAgICB7CisgICAgICAgICAgICB0aGlzLmNvbmZpZy5pY29uTGlzdFtpZF0gPSBbcGF0aCwgeCwgeV07CisgICAgICAgICAgfQorICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5idG5MaXN0W2lkXSkgCisgICAgICAgICAgeworICAgICAgICAgICAgdGhpcy5jb25maWcuYnRuTGlzdFtpZF1bMV0gPSBwYXRoOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAodGhpcy5jb25maWcuaWNvbkxpc3RbaWRdKSAKKyAgICAgICAgICB7CisgICAgICAgICAgICB0aGlzLmNvbmZpZy5pY29uTGlzdFtpZF0gPSBwYXRoOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICAKKyAgLy8gY3JlYXRlIHRoZSBlZGl0b3IgZnJhbWV3b3JrLCB5YWgsIHRhYmxlIGxheW91dCBJIGtub3csIGJ1dCBtdWNoIGVhc2llcgorICAvLyB0byBnZXQgaXQgd29ya2luZyBjb3JyZWN0bHkgdGhpcyB3YXksIHNvcnJ5IGFib3V0IHRoYXQsIHBhdGNoZXMgd2VsY29tZS4KKyAgCisgIHRoaXMuc2V0TG9hZGluZ01lc3NhZ2UoWGluaGEuX2xjKCdHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsnKSk7CisgIAorICB0aGlzLl9mcmFtZXdvcmsgPQorICB7CisgICAgJ3RhYmxlJzogICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpLAorICAgICd0Ym9keSc6ICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGJvZHknKSwgLy8gSUUgd2lsbCBub3Qgc2hvdyB0aGUgdGFibGUgaWYgaXQgZG9lc24ndCBoYXZlIGEgdGJvZHkhCisgICAgJ3RiX3Jvdyc6ICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpLAorICAgICd0Yl9jZWxsJzogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKSwgLy8gVG9vbGJhcgorCisgICAgJ3RwX3Jvdyc6ICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpLAorICAgICd0cF9jZWxsJzogdGhpcy5fcGFuZWxzLnRvcC5jb250YWluZXIsICAgLy8gdG9wIHBhbmVsCisKKyAgICAnbGVyX3Jvdyc6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyksCisgICAgJ2xwX2NlbGwnOiB0aGlzLl9wYW5lbHMubGVmdC5jb250YWluZXIsICAvLyBsZWZ0IHBhbmVsCisgICAgJ2VkX2NlbGwnOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpLCAvLyBlZGl0b3IKKyAgICAncnBfY2VsbCc6IHRoaXMuX3BhbmVscy5yaWdodC5jb250YWluZXIsIC8vIHJpZ2h0IHBhbmVsCisKKyAgICAnYnBfcm93JzogIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyksCisgICAgJ2JwX2NlbGwnOiB0aGlzLl9wYW5lbHMuYm90dG9tLmNvbnRhaW5lciwvLyBib3R0b20gcGFuZWwKKworICAgICdzYl9yb3cnOiAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKSwKKyAgICAnc2JfY2VsbCc6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJykgIC8vIHN0YXR1cyBiYXIKKworICB9OworICBYaW5oYS5mcmVlTGF0ZXIodGhpcy5fZnJhbWV3b3JrKTsKKyAgCisgIHZhciBmdyA9IHRoaXMuX2ZyYW1ld29yazsKKyAgZncudGFibGUuYm9yZGVyID0gIjAiOworICBmdy50YWJsZS5jZWxsUGFkZGluZyA9ICIwIjsKKyAgZncudGFibGUuY2VsbFNwYWNpbmcgPSAiMCI7CisKKyAgZncudGJfcm93LnN0eWxlLnZlcnRpY2FsQWxpZ24gPSAndG9wJzsKKyAgZncudHBfcm93LnN0eWxlLnZlcnRpY2FsQWxpZ24gPSAndG9wJzsKKyAgZncubGVyX3Jvdy5zdHlsZS52ZXJ0aWNhbEFsaWduPSAndG9wJzsKKyAgZncuYnBfcm93LnN0eWxlLnZlcnRpY2FsQWxpZ24gPSAndG9wJzsKKyAgZncuc2Jfcm93LnN0eWxlLnZlcnRpY2FsQWxpZ24gPSAndG9wJzsKKyAgZncuZWRfY2VsbC5zdHlsZS5wb3NpdGlvbiAgICAgPSAncmVsYXRpdmUnOworCisgIC8vIFB1dCB0aGUgY2VsbHMgaW4gdGhlIHJvd3MgICAgICAgIHNldCBjb2wgJiByb3dzcGFucworICAvLyBub3RlIHRoYXQgSSd2ZSBzZXQgYWxsIHRoZXNlIHNvIHRoYXQgYWxsIHBhbmVscyBhcmUgc2hvd2luZworICAvLyBidXQgdGhleSB3aWxsIGJlIHJlZG9uZSBpbiBzaXplRWRpdG9yKCkgZGVwZW5kaW5nIG9uIHdoaWNoCisgIC8vIHBhbmVscyBhcmUgc2hvd24uICBJdCdzIGp1c3QgaGVyZSB0byBjbGFyaWZ5IGhvdyB0aGUgdGhpbmcKKyAgLy8gaXMgcHV0IHRvZ2V0aG9yLgorICBmdy50Yl9yb3cuYXBwZW5kQ2hpbGQoZncudGJfY2VsbCk7CisgIGZ3LnRiX2NlbGwuY29sU3BhbiA9IDM7CisKKyAgZncudHBfcm93LmFwcGVuZENoaWxkKGZ3LnRwX2NlbGwpOworICBmdy50cF9jZWxsLmNvbFNwYW4gPSAzOworCisgIGZ3Lmxlcl9yb3cuYXBwZW5kQ2hpbGQoZncubHBfY2VsbCk7CisgIGZ3Lmxlcl9yb3cuYXBwZW5kQ2hpbGQoZncuZWRfY2VsbCk7CisgIGZ3Lmxlcl9yb3cuYXBwZW5kQ2hpbGQoZncucnBfY2VsbCk7CisKKyAgZncuYnBfcm93LmFwcGVuZENoaWxkKGZ3LmJwX2NlbGwpOworICBmdy5icF9jZWxsLmNvbFNwYW4gPSAzOworCisgIGZ3LnNiX3Jvdy5hcHBlbmRDaGlsZChmdy5zYl9jZWxsKTsKKyAgZncuc2JfY2VsbC5jb2xTcGFuID0gMzsKKworICAvLyBQdXQgdGhlIHJvd3MgaW4gdGhlIHRhYmxlIGJvZHkKKyAgZncudGJvZHkuYXBwZW5kQ2hpbGQoZncudGJfcm93KTsgIC8vIFRvb2xiYXIKKyAgZncudGJvZHkuYXBwZW5kQ2hpbGQoZncudHBfcm93KTsgLy8gTGVmdCwgVG9wLCBSaWdodCBwYW5lbHMKKyAgZncudGJvZHkuYXBwZW5kQ2hpbGQoZncubGVyX3Jvdyk7ICAvLyBFZGl0b3IvVGV4dGFyZWEKKyAgZncudGJvZHkuYXBwZW5kQ2hpbGQoZncuYnBfcm93KTsgIC8vIEJvdHRvbSBwYW5lbAorICBmdy50Ym9keS5hcHBlbmRDaGlsZChmdy5zYl9yb3cpOyAgLy8gU3RhdHVzYmFyCisKKyAgLy8gYW5kIGJvZHkgaW4gdGhlIHRhYmxlCisgIGZ3LnRhYmxlLmFwcGVuZENoaWxkKGZ3LnRib2R5KTsKKworICB2YXIgeGluaGEgPSBmdy50YWJsZTsKKyAgdGhpcy5faHRtbEFyZWEgPSB4aW5oYTsKKyAgWGluaGEuZnJlZUxhdGVyKHRoaXMsICdfaHRtbEFyZWEnKTsKKyAgeGluaGEuY2xhc3NOYW1lID0gImh0bWxhcmVhIjsKKworICAgIC8vIGNyZWF0ZSB0aGUgdG9vbGJhciBhbmQgcHV0IGluIHRoZSBhcmVhCisgIGZ3LnRiX2NlbGwuYXBwZW5kQ2hpbGQoIHRoaXMuX2NyZWF0ZVRvb2xiYXIoKSApOworCisgICAgLy8gY3JlYXRlIHRoZSBJRlJBTUUgJiBhZGQgdG8gY29udGFpbmVyCisgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgaWZyYW1lLnNyYyA9IHRoaXMucG9wdXBVUkwoZWRpdG9yLmNvbmZpZy5VUklzLmlmcmFtZV9zcmMpOworICBpZnJhbWUuaWQgPSAiWGluaGFJRnJhbWVfIiArIHRoaXMuX3RleHRBcmVhLmlkOworICBmdy5lZF9jZWxsLmFwcGVuZENoaWxkKGlmcmFtZSk7CisgIHRoaXMuX2lmcmFtZSA9IGlmcmFtZTsKKyAgdGhpcy5faWZyYW1lLmNsYXNzTmFtZSA9ICd4aW5oYV9pZnJhbWUnOworICBYaW5oYS5mcmVlTGF0ZXIodGhpcywgJ19pZnJhbWUnKTsKKyAgCisgICAgLy8gY3JlYXRlcyAmIGFwcGVuZHMgdGhlIHN0YXR1cyBiYXIKKyAgdmFyIHN0YXR1c2JhciA9IHRoaXMuX2NyZWF0ZVN0YXR1c0JhcigpOworICB0aGlzLl9zdGF0dXNCYXIgPSBmdy5zYl9jZWxsLmFwcGVuZENoaWxkKHN0YXR1c2Jhcik7CisKKworICAvLyBpbnNlcnQgWGluaGEgYmVmb3JlIHRoZSB0ZXh0YXJlYS4KKyAgdmFyIHRleHRhcmVhID0gdGhpcy5fdGV4dEFyZWE7CisgIHRleHRhcmVhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHhpbmhhLCB0ZXh0YXJlYSk7CisgIHRleHRhcmVhLmNsYXNzTmFtZSA9ICd4aW5oYV90ZXh0YXJlYSc7CisKKyAgLy8gZXh0cmFjdCB0aGUgdGV4dGFyZWEgYW5kIGluc2VydCBpdCBpbnRvIHRoZSB4aW5oYSBmcmFtZXdvcmsKKyAgWGluaGEucmVtb3ZlRnJvbVBhcmVudCh0ZXh0YXJlYSk7CisgIGZ3LmVkX2NlbGwuYXBwZW5kQ2hpbGQodGV4dGFyZWEpOworCisgIC8vIGlmIGFub3RoZXIgZWRpdG9yIGlzIGFjdGl2YXRlZCB3aGlsZSB0aGlzIG9uZSBpcyBpbiB0ZXh0IG1vZGUsIHRvb2xiYXIgaXMgZGlzYWJsZWQgICAKKyAgWGluaGEuYWRkRG9tMEV2ZW50KAorICB0aGlzLl90ZXh0QXJlYSwKKyAgJ2NsaWNrJywKKyAgZnVuY3Rpb24oKQorICB7CisgIAlpZiAoIFhpbmhhLl9jdXJyZW50bHlBY3RpdmVFZGl0b3IgIT0gdGhpcykKKyAgCXsKKyAgCSAgZWRpdG9yLnVwZGF0ZVRvb2xiYXIoKTsKKyAgCX0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfSk7CisgIAorICAvLyBTZXQgdXAgZXZlbnQgbGlzdGVuZXJzIGZvciBzYXZpbmcgdGhlIGlmcmFtZSBjb250ZW50IHRvIHRoZSB0ZXh0YXJlYQorICBpZiAoIHRleHRhcmVhLmZvcm0gKQorICB7CisgICAgLy8gb25zdWJtaXQgZ2V0IHRoZSBYaW5oYSBjb250ZW50IGFuZCB1cGRhdGUgb3JpZ2luYWwgdGV4dGFyZWEuCisgICAgWGluaGEucHJlcGVuZERvbTBFdmVudCgKKyAgICAgIHRoaXMuX3RleHRBcmVhLmZvcm0sCisgICAgICAnc3VibWl0JywKKyAgICAgIGZ1bmN0aW9uKCkKKyAgICAgIHsKKyAgICAgICAgZWRpdG9yLmZpcmVQbHVnaW5FdmVudCgnb25CZWZvcmVTdWJtaXQnKTsKKyAgICAgICAgZWRpdG9yLl90ZXh0QXJlYS52YWx1ZSA9IGVkaXRvci5vdXR3YXJkSHRtbChlZGl0b3IuZ2V0SFRNTCgpKTsKKyAgICAgICAgZWRpdG9yLmZpcmVQbHVnaW5FdmVudCgnb25CZWZvcmVTdWJtaXRUZXh0QXJlYScpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICApOworCisgICAgdmFyIGluaXRpYWxUQUNvbnRlbnQgPSB0ZXh0YXJlYS52YWx1ZTsKKworICAgIC8vIG9ucmVzZXQgcmV2ZXJ0IHRoZSBYaW5oYSBjb250ZW50IHRvIHRoZSB0ZXh0YXJlYSBjb250ZW50CisgICAgWGluaGEucHJlcGVuZERvbTBFdmVudCgKKyAgICAgIHRoaXMuX3RleHRBcmVhLmZvcm0sCisgICAgICAncmVzZXQnLAorICAgICAgZnVuY3Rpb24oKQorICAgICAgeworICAgICAgICBlZGl0b3Iuc2V0SFRNTChlZGl0b3IuaW53YXJkSHRtbChpbml0aWFsVEFDb250ZW50KSk7CisgICAgICAgIGVkaXRvci51cGRhdGVUb29sYmFyKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgICk7CisKKyAgICAvLyBhdHRhY2ggb25zdWJtaXQgaGFuZGxlciB0byBmb3JtLnN1Ym1pdCgpCisgICAgLy8gbm90ZTogY2F0Y2ggZXJyb3IgaW4gSUUgaWYgYW55IGZvcm0gZWxlbWVudCBoYXMgaWQ9InN1Ym1pdCIKKyAgICBpZiAoICF0ZXh0YXJlYS5mb3JtLnhpbmhhX3N1Ym1pdCApCisgICAgeworICAgICAgdHJ5IAorICAgICAgeworICAgICAgICB0ZXh0YXJlYS5mb3JtLnhpbmhhX3N1Ym1pdCA9IHRleHRhcmVhLmZvcm0uc3VibWl0OworICAgICAgICB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9IGZ1bmN0aW9uKCkgCisgICAgICAgIHsKKyAgICAgICAgICB0aGlzLm9uc3VibWl0KCk7CisgICAgICAgICAgdGhpcy54aW5oYV9zdWJtaXQoKTsKKyAgICAgICAgfTsKKyAgICAgIH0gY2F0Y2goZXgpIHt9CisgICAgfQorICB9CisKKyAgLy8gYWRkIGEgaGFuZGxlciBmb3IgdGhlICJiYWNrL2ZvcndhcmQiIGNhc2UgLS0gb24gYm9keS51bmxvYWQgd2Ugc2F2ZQorICAvLyB0aGUgSFRNTCBjb250ZW50IGludG8gdGhlIG9yaWdpbmFsIHRleHRhcmVhIGFuZCByZXN0b3JlIGl0IGluIGl0cyBwbGFjZS4KKyAgLy8gYXBwYXJlbnRseSB0aGlzIGRvZXMgbm90IHdvcmsgaW4gSUU/CisgIFhpbmhhLnByZXBlbmREb20wRXZlbnQoCisgICAgd2luZG93LAorICAgICd1bmxvYWQnLAorICAgIGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICBlZGl0b3IuZmlyZVBsdWdpbkV2ZW50KCdvbkJlZm9yZVVubG9hZCcpOworICAgICAgdGV4dGFyZWEudmFsdWUgPSBlZGl0b3Iub3V0d2FyZEh0bWwoZWRpdG9yLmdldEhUTUwoKSk7CisgICAgICBpZiAoIVhpbmhhLmlzX2llKQorICAgICAgeworICAgICAgICB4aW5oYS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0ZXh0YXJlYSx4aW5oYSk7CisgICAgICB9CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICk7CisKKyAgLy8gSGlkZSB0ZXh0YXJlYQorICB0ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworCisgIC8vIEluaXRhbGl6ZSBzaXplCisgIGVkaXRvci5pbml0U2l6ZSgpOworICB0aGlzLnNldExvYWRpbmdNZXNzYWdlKFhpbmhhLl9sYygnRmluaXNoaW5nJykpOworICAvLyBBZGQgYW4gZXZlbnQgdG8gaW5pdGlhbGl6ZSB0aGUgaWZyYW1lIG9uY2UgbG9hZGVkLgorICBlZGl0b3IuX2lmcmFtZUxvYWREb25lID0gZmFsc2U7CisgIGlmIChpZnJhbWUuc3JjID09ICdqYXZhc2NyaXB0OlwnXCcnIHx8IGlmcmFtZS5zcmMgPT0gJycgfHwgWGluaGEuaXNfb3BlcmEpCisgIHsKKyAgICBlZGl0b3IuaW5pdElmcmFtZSgpOworICB9CisgIC8vIEkgc3VzcGVjdCB3ZSBubyBsb25nZXIgbmVlZCB0aGlzIGFuZCBjYW4ganVzdCB1c2UgZWRpdG9yLmluaXRJZnJhbWUgKGNlcnRhaW5seSAKKyAgLy8gaWZyYW1lLnNyYyBpcyBqYXZhc2NyaXRwOicnIGJ5IGRlZmF1bHQuICBCdXQgSSB3aWxsIGxlYXZlIHRoaXMgZm9yIHBvc3Rlcml0eQorICAvLyBqdXN0IGluIGNhc2UKKyAgZWxzZSAKKyAgeworICAgIFhpbmhhLl9hZGRFdmVudCgKKyAgICAgIHRoaXMuX2lmcmFtZSwKKyAgICAgICdsb2FkJywKKyAgICAgIGZ1bmN0aW9uKGUpCisgICAgICB7CisgICAgICAgIGlmICggIWVkaXRvci5faWZyYW1lTG9hZERvbmUgKQorICAgICAgICB7CisgICAgICAgICAgZWRpdG9yLl9pZnJhbWVMb2FkRG9uZSA9IHRydWU7CisgICAgICAgICAgZWRpdG9yLmluaXRJZnJhbWUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICApOworICB9Cit9OworCisvKioKKyAqIFNpemUgdGhlIGVkaXRvciBhY2NvcmRpbmcgdG8gdGhlIElOSVRJQUwgc2l6aW5nIGluZm9ybWF0aW9uLgorICogY29uZmlnLndpZHRoCisgKiAgICBUaGUgd2lkdGggbWF5IGJlIHNldCB2aWEgdGhyZWUgd2F5cworICogICAgYXV0byAgICA9IHRoZSB3aWR0aCBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgdGV4dGFyZWEKKyAqICAgIHRvb2xiYXIgPSB0aGUgd2lkdGggaXMgc2V0IHRvIGJlIHRoZSBzYW1lIHNpemUgYXMgdGhlIHRvb2xiYXIKKyAqICAgIDxzZXQgc2l6ZT4gPSB0aGUgd2lkdGggaXMgYW4gZXhwbGljaXQgc2l6ZSAoYW55IENTUyBtZWFzdXJlbWVudCwgZWcgMTAwZW0gc2hvdWxkIGJlIGZpbmUpCisgKgorICogY29uZmlnLmhlaWdodAorICogICAgYXV0byAgICA9IHRoZSBoZWlnaHQgaXMgaW5oZXJpdGVkIGZyb20gdGhlIG9yaWdpbmFsIHRleHRhcmVhCisgKiAgICA8c2V0IHNpemU+ID0gYW4gZXhwbGljaXQgc2l6ZSBtZWFzdXJlbWVudCAoYWdhaW4sIENTUyBtZWFzdXJlbWVudHMpCisgKgorICogY29uZmlnLnNpemVJbmNsdWRlc0JhcnMKKyAqICAgIHRydWUgICAgPSB0aGUgdG9vbCAmIHN0YXR1cyBiYXJzIHdpbGwgYXBwZWFyIGluc2lkZSB0aGUgd2lkdGggJiBoZWlnaHQgY29uZmluZXMKKyAqICAgIGZhbHNlICAgPSB0aGUgdG9vbCAmIHN0YXR1cyBiYXJzIHdpbGwgYXBwZWFyIG91dHNpZGUgdGhlIHdpZHRoICYgaGVpZ2h0IGNvbmZpbmVzCisgKgorICogQHByaXZhdGUKKyAqLworCitYaW5oYS5wcm90b3R5cGUuaW5pdFNpemUgPSBmdW5jdGlvbigpCit7CisgIHRoaXMuc2V0TG9hZGluZ01lc3NhZ2UoWGluaGEuX2xjKCdJbml0IGVkaXRvciBzaXplJykpOworICB2YXIgZWRpdG9yID0gdGhpczsKKyAgdmFyIHdpZHRoID0gbnVsbDsKKyAgdmFyIGhlaWdodCA9IG51bGw7CisKKyAgc3dpdGNoICggdGhpcy5jb25maWcud2lkdGggKQorICB7CisgICAgY2FzZSAnYXV0byc6CisgICAgICB3aWR0aCA9IHRoaXMuX2luaXRpYWxfdGFfc2l6ZS53OworICAgIGJyZWFrOworCisgICAgY2FzZSAndG9vbGJhcic6CisgICAgICB3aWR0aCA9IHRoaXMuX3Rvb2xCYXIub2Zmc2V0V2lkdGggKyAncHgnOworICAgIGJyZWFrOworCisgICAgZGVmYXVsdCA6CisgICAgICAvLyBAdG9kbzogY2hlY2sgaWYgdGhpcyBpcyBiZXR0ZXIgOgorICAgICAgLy8gd2lkdGggPSAocGFyc2VJbnQodGhpcy5jb25maWcud2lkdGgsIDEwKSA9PSB0aGlzLmNvbmZpZy53aWR0aCk/IHRoaXMuY29uZmlnLndpZHRoICsgJ3B4JyA6IHRoaXMuY29uZmlnLndpZHRoOworICAgICAgd2lkdGggPSAvW14wLTldLy50ZXN0KHRoaXMuY29uZmlnLndpZHRoKSA/IHRoaXMuY29uZmlnLndpZHRoIDogdGhpcy5jb25maWcud2lkdGggKyAncHgnOworICAgIGJyZWFrOworICB9CisgICAgICAvLyBAdG9kbzogY2hlY2sgaWYgdGhpcyBpcyBiZXR0ZXIgOgorICAgICAgLy8gaGVpZ2h0ID0gKHBhcnNlSW50KHRoaXMuY29uZmlnLmhlaWdodCwgMTApID09IHRoaXMuY29uZmlnLmhlaWdodCk/IHRoaXMuY29uZmlnLmhlaWdodCArICdweCcgOiB0aGlzLmNvbmZpZy5oZWlnaHQ7CisgIGhlaWdodCA9IHRoaXMuY29uZmlnLmhlaWdodCA9PSAnYXV0bycgPyB0aGlzLl9pbml0aWFsX3RhX3NpemUuaCA6IC9bXjAtOV0vLnRlc3QodGhpcy5jb25maWcuaGVpZ2h0KSA/IHRoaXMuY29uZmlnLmhlaWdodCA6IHRoaXMuY29uZmlnLmhlaWdodCArICdweCc7CisgIAorICB0aGlzLnNpemVFZGl0b3Iod2lkdGgsIGhlaWdodCwgdGhpcy5jb25maWcuc2l6ZUluY2x1ZGVzQmFycywgdGhpcy5jb25maWcuc2l6ZUluY2x1ZGVzUGFuZWxzKTsKKworICAvLyB3aHkgY2FuJ3Qgd2UgdXNlIHRoZSBmb2xsb3dpbmcgbGluZSBpbnN0ZWFkID8KKy8vICB0aGlzLm5vdGlmeU9uKCdwYW5lbF9jaGFuZ2UnLHRoaXMuc2l6ZUVkaXRvcik7CisgIHRoaXMubm90aWZ5T24oJ3BhbmVsX2NoYW5nZScsZnVuY3Rpb24oKSB7IGVkaXRvci5zaXplRWRpdG9yKCk7IH0pOworfTsKKworLyoqIEdldCB0aGUgb3ZlcmFsbCBzaXplIG9mIHRoZSBlZGl0b3IsIGluY2x1ZGluZyB0b29sYmFycyBhbmQgcGFuZWxzCisgKiAgKGlmIHRoZXkgYXJlIGJlaW5nIGNvbnNpZGVyZWQpCisgKgorICogIFRoaXMgaXMgdXNlZCBieSBzaXplRWRpdG9yIHRvIGdldCB0aGUgc2l6ZSBvZiB0aGUgYXJlYSBleGNsdWRpbmcgdG9vbGJhcnMKKyAqICB3aGVuIGl0IHNldHMgdGhlIF9odG1sQXJlYS5zaXplIGF0dHJpYnV0ZSBmaXJzdCBleHBsaWNpdGx5IGFuZCB0aGVuCisgKiAgYWRkcyBpbiB0b29sYmFycy9wYW5lbHMgbGF0ZXIuCisgKgorICovCisKK1hpbmhhLnByb3RvdHlwZS5nZXRPdmVyYWxsU2l6ZSA9IGZ1bmN0aW9uKHVzZVN0eWxlUHhTaXplKQoreworICAvLyBPcmlnaW5hbGx5IHdoZW4gc2l6ZUVkaXRvciB3YXMgYWRqdXN0aW5nIGZvciBwYW5lbC90b29sYmFyCisgIC8vIHNpemUgYWZ0ZXIgaGF2aW5nIHNldCBfaHRtbEFyZWEuc3R5bGUud2lkdGgvaGVpZ2h0IGl0IGFsd2F5cworICAvLyB1c2VkIHRoZSBvZmZzZXRXaWR0aC9IZWlnaHQsIGV2ZW4gaWYgaXQgc2V0IGEgcHggd2lkdGgvaGVpZ2h0CisgIC8vIG9uIHRoZSBzdHlsZSBqdXN0IGJlZm9yZS4KKyAgLy8KKyAgLy8gSW4gdGhlIGludGVyZXN0cyBvZiBub3QtZml4aW5nLXdoYXRzLW5vdC1icm9rZSwgd2UgYXJlIG9ubHkKKyAgLy8gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3R5bGUud2lkdGgvaGVpZ2h0IHBpeGVsIHNpemUgaWYgCisgIC8vIHRoaXMgaXMgaW4gcmVzaXppbmcgbW9kZS4gIEl0IGFjdHVhbGx5IHdvcmtzIG9rIGZvciAKKyAgLy8gbm9uLXJlc2l6YWJsZSBlZGl0b3JzIHRvbyBidXQgSSBoYXZlIG5vdCB0ZXN0ZWQgb2xkIG9uZXMuCisgIC8vCisgIC8vIE5vdGUgdGhhdCBpZiB5b3UgdXNlIG9mZnNldFdpZHRoL0hlaWdodCBmb3IgYSByZXNpemFibGUgCisgIC8vIGVkaXRvciBkdXJpbmcgcmVzaXplLCBpdCB3b3JrcyBPSyBidXQgZm9yIHNvbWUgcmVhc29uIEkgZG9uJ3QKKyAgLy8gcXVpdGUgdW5kZXJzdGFuZCB0aGUgbWluaW11bSBzaXplIHlvdSBjYW4gcmVhY2ggKGluIENocm9tZSkKKyAgLy8gaXMgbm90IGFzIHNtYWxsIGFzIHdoZW4geW91IG9ic2VydmUgc3R5bGUud2lkdGgvaGVpZ2h0CisgIAorICBpZih0eXBlb2YgdXNlU3R5bGVQeFNpemUgPT0gJ3VuZGVmaW5lZCcpCisgIHsKKyAgICB1c2VTdHlsZVB4U2l6ZSA9IHRoaXMuY29uZmlnLnJlc2l6YWJsZUVkaXRvcjsKKyAgfQorICAKKyAgdmFyIHNpemUgPSB7IHc6IDAsIGg6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6MCwgb2Zmc2V0V2lkdGg6IDAsIG9mZnNldEhlaWdodDogMCB9OworICAKKyAgaWYodXNlU3R5bGVQeFNpemUgJiYgdGhpcy5faHRtbEFyZWEuc3R5bGUud2lkdGgubWF0Y2goL3B4LykpCisgIHsKKyAgICBzaXplLncgPSBwYXJzZUludCh0aGlzLl9odG1sQXJlYS5zdHlsZS53aWR0aC5yZXBsYWNlKC9weC8sJycpKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBzaXplLncgPSB0aGlzLl9odG1sQXJlYS5vZmZzZXRXaWR0aDsKKyAgfQorICAKKyAgaWYodXNlU3R5bGVQeFNpemUgJiYgdGhpcy5faHRtbEFyZWEuc3R5bGUuaGVpZ2h0Lm1hdGNoKC9weC8pKQorICB7CisgICAgc2l6ZS5oID0gcGFyc2VJbnQodGhpcy5faHRtbEFyZWEuc3R5bGUuaGVpZ2h0LnJlcGxhY2UoL3B4LywnJykpOworICB9CisgIGVsc2UKKyAgeworICAgIHNpemUuaCA9IHRoaXMuX2h0bWxBcmVhLm9mZnNldEhlaWdodDsKKyAgfQorICAKKyAgc2l6ZS5vZmZzZXRIZWlnaHQgPSBzaXplLmg7CisgIHNpemUuaGVpZ2h0ICAgICAgID0gdGhpcy5faHRtbEFyZWEuc3R5bGUuaGVpZ2h0OworICBzaXplLm9mZnNldFdpZHRoICA9IHNpemUudzsKKyAgc2l6ZS53aWR0aCAgICAgICAgPSB0aGlzLl9odG1sQXJlYS5zdHlsZS53aWR0aDsKKyAgCisgIHJldHVybiBzaXplOworfTsKKworLyoqCisgKiAgU2l6ZSB0aGUgZWRpdG9yIHRvIGEgc3BlY2lmaWMgc2l6ZSwgb3IganVzdCByZWZyZXNoIHRoZSBzaXplICh3aGVuIHdpbmRvdyByZXNpemVzIGZvciBleGFtcGxlKQorICogIEBwYXJhbSB7c3RyaW5nfSB3aWR0aCBvcHRpb25hbCB3aWR0aCAoQ1NTIHNwZWNpZmljYXRpb24pCisgKiAgQHBhcmFtIHtzdHJpbmd9IGhlaWdodCBvcHRpb25hbCBoZWlnaHQgKENTUyBzcGVjaWZpY2F0aW9uKQorICogIEBwYXJhbSB7Qm9vbGVhbn0gaW5jbHVkaW5nQmFycyBvcHRpb25hbCB0byBpbmRpY2F0ZSBpZiB0aGUgc2l6ZSBzaG91bGQgaW5jbHVkZSBvciBleGNsdWRlIHRvb2wgJiBzdGF0dXMgYmFycworICogIEBwYXJhbSB7Qm9vbGVhbn0gaW5jbHVkaW5nUGFuZWxzIG9wdGlvbmFsIHRvIGluZGljYXRlIGlmIHRoZSBzaXplIHNob3VsZCBpbmNsdWRlIG9yIGV4Y2x1ZGUgcGFuZWxzCisgKi8KK1hpbmhhLnByb3RvdHlwZS5zaXplRWRpdG9yID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodCwgaW5jbHVkaW5nQmFycywgaW5jbHVkaW5nUGFuZWxzKQoreworICBpZiAodGhpcy5fcmlzaXppbmcpIAorICB7CisgICAgcmV0dXJuOworICB9CisgIHRoaXMuX3Jpc2l6aW5nID0gdHJ1ZTsKKyAgCisgIHZhciBmcmFtZXdvcmsgPSB0aGlzLl9mcmFtZXdvcms7CisgIAorICB0aGlzLm5vdGlmeU9mKCdiZWZvcmVfcmVzaXplJywge3dpZHRoOndpZHRoLCBoZWlnaHQ6aGVpZ2h0fSk7CisgIHRoaXMuZmlyZVBsdWdpbkV2ZW50KCdvbkJlZm9yZVJlc2l6ZScsIHdpZHRoLCBoZWlnaHQpOworICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgaWZyYW1lICYgdGV4dGFyZWEgdG8gMTAwJSBoZWlnaHQgc28gdGhhdCB0aGUgaHRtbGFyZWEKKyAgLy8gaXNuJ3QgInB1c2hlZCBvdXQiIHdoZW4gd2UgZ2V0IGl0J3MgaGVpZ2h0LCBzbyB3ZSBjYW4gY2hhbmdlIHRoZW0gbGF0ZXIuCisgIHRoaXMuX2lmcmFtZS5zdHlsZS5oZWlnaHQgICA9ICcxMDAlJzsKKyAgLy9oZXJlIDEwMCUgY2FuIGxlYWQgdG8gYW4gZWZmZWN0IHRoYXQgdGhlIGVkaXRvciBpcyBjb25zaWRlcmFibHkgaGlnaGVyIGluIHRleHQgbW9kZQorICB0aGlzLl90ZXh0QXJlYS5zdHlsZS5oZWlnaHQgPSAnMXB4JzsKKyAgCisgIHRoaXMuX2lmcmFtZS5zdHlsZS53aWR0aCAgICA9ICcwcHgnOworICB0aGlzLl90ZXh0QXJlYS5zdHlsZS53aWR0aCAgPSAnMHB4JzsKKworICBpZiAoIGluY2x1ZGluZ0JhcnMgIT09IG51bGwgKQorICB7CisgICAgdGhpcy5faHRtbEFyZWEuc2l6ZUluY2x1ZGVzVG9vbGJhcnMgPSBpbmNsdWRpbmdCYXJzOworICB9CisgIGlmICggaW5jbHVkaW5nUGFuZWxzICE9PSBudWxsICkKKyAgeworICAgIHRoaXMuX2h0bWxBcmVhLnNpemVJbmNsdWRlc1BhbmVscyA9IGluY2x1ZGluZ1BhbmVsczsKKyAgfQorCisgIGlmICggd2lkdGggKQorICB7CisgICAgdGhpcy5faHRtbEFyZWEuc3R5bGUud2lkdGggPSB3aWR0aDsKKyAgICBpZiAoICF0aGlzLl9odG1sQXJlYS5zaXplSW5jbHVkZXNQYW5lbHMgKQorICAgIHsKKyAgICAgIC8vIE5lZWQgdG8gYWRkIHNvbWUgZm9yIGwgJiByIHBhbmVscworICAgICAgdmFyIHJQYW5lbCA9IHRoaXMuX3BhbmVscy5yaWdodDsKKyAgICAgIGlmICggclBhbmVsLm9uICYmIHJQYW5lbC5wYW5lbHMubGVuZ3RoICYmIFhpbmhhLmhhc0Rpc3BsYXllZENoaWxkcmVuKHJQYW5lbC5kaXYpICkKKyAgICAgIHsKKyAgICAgICAgdGhpcy5faHRtbEFyZWEuc3R5bGUud2lkdGggPSAodGhpcy5nZXRPdmVyYWxsU2l6ZSgpLm9mZnNldFdpZHRoICsgcGFyc2VJbnQodGhpcy5jb25maWcucGFuZWxfZGltZW5zaW9ucy5yaWdodCwgMTApKSArICdweCc7CisgICAgICB9CisKKyAgICAgIHZhciBsUGFuZWwgPSB0aGlzLl9wYW5lbHMubGVmdDsKKyAgICAgIGlmICggbFBhbmVsLm9uICYmIGxQYW5lbC5wYW5lbHMubGVuZ3RoICYmIFhpbmhhLmhhc0Rpc3BsYXllZENoaWxkcmVuKGxQYW5lbC5kaXYpICkKKyAgICAgIHsKKyAgICAgICAgdGhpcy5faHRtbEFyZWEuc3R5bGUud2lkdGggPSAodGhpcy5nZXRPdmVyYWxsU2l6ZSgpLm9mZnNldFdpZHRoICsgcGFyc2VJbnQodGhpcy5jb25maWcucGFuZWxfZGltZW5zaW9ucy5sZWZ0LCAxMCkpICsgJ3B4JzsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAoIGhlaWdodCApCisgIHsKKyAgICB0aGlzLl9odG1sQXJlYS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7CisgICAgaWYgKCAhdGhpcy5faHRtbEFyZWEuc2l6ZUluY2x1ZGVzVG9vbGJhcnMgKQorICAgIHsKKyAgICAgIC8vIE5lZWQgdG8gYWRkIHNvbWUgZm9yIHRvb2xiYXJzCisgICAgICB0aGlzLl9odG1sQXJlYS5zdHlsZS5oZWlnaHQgPSAodGhpcy5nZXRPdmVyYWxsU2l6ZSgpLm9mZnNldEhlaWdodCArIHRoaXMuX3Rvb2xiYXIub2Zmc2V0SGVpZ2h0ICsgdGhpcy5fc3RhdHVzQmFyLm9mZnNldEhlaWdodCkgKyAncHgnOworICAgIH0KKworICAgIGlmICggIXRoaXMuX2h0bWxBcmVhLnNpemVJbmNsdWRlc1BhbmVscyApCisgICAgeworICAgICAgLy8gTmVlZCB0byBhZGQgc29tZSBmb3IgdCAmIGIgcGFuZWxzCisgICAgICB2YXIgdFBhbmVsID0gdGhpcy5fcGFuZWxzLnRvcDsKKyAgICAgIGlmICggdFBhbmVsLm9uICYmIHRQYW5lbC5wYW5lbHMubGVuZ3RoICYmIFhpbmhhLmhhc0Rpc3BsYXllZENoaWxkcmVuKHRQYW5lbC5kaXYpICkKKyAgICAgIHsKKyAgICAgICAgdGhpcy5faHRtbEFyZWEuc3R5bGUuaGVpZ2h0ID0gKHRoaXMuZ2V0T3ZlcmFsbFNpemUoKS5vZmZzZXRIZWlnaHQgKyBwYXJzZUludCh0aGlzLmNvbmZpZy5wYW5lbF9kaW1lbnNpb25zLnRvcCwgMTApKSArICdweCc7CisgICAgICB9CisKKyAgICAgIHZhciBiUGFuZWwgPSB0aGlzLl9wYW5lbHMuYm90dG9tOworICAgICAgaWYgKCBiUGFuZWwub24gJiYgYlBhbmVsLnBhbmVscy5sZW5ndGggJiYgWGluaGEuaGFzRGlzcGxheWVkQ2hpbGRyZW4oYlBhbmVsLmRpdikgKQorICAgICAgeworICAgICAgICB0aGlzLl9odG1sQXJlYS5zdHlsZS5oZWlnaHQgPSAodGhpcy5nZXRPdmVyYWxsU2l6ZSgpLm9mZnNldEhlaWdodCArIHBhcnNlSW50KHRoaXMuY29uZmlnLnBhbmVsX2RpbWVuc2lvbnMuYm90dG9tLCAxMCkpICsgJ3B4JzsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAvLyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgdGhpcy5faHRtbEFyZWEuc3R5bGUud2lkdGggJiB0aGlzLl9odG1sQXJlYS5zdHlsZS5oZWlnaHQKKyAgLy8gd2hpY2ggYXJlIHRoZSBzaXplIGZvciB0aGUgT1VURVIgZWRpdG9yIGFyZWEsIGluY2x1ZGluZyB0b29sYmFycyBhbmQgcGFuZWxzCisgIC8vIG5vdyB3ZSBzaXplIHRoZSBJTk5FUiBhcmVhIGFuZCBwb3NpdGlvbiBzdHVmZiBpbiB0aGUgcmlnaHQgcGxhY2VzLgorICB3aWR0aCAgPSB0aGlzLl9odG1sQXJlYS5vZmZzZXRXaWR0aDsKKyAgaGVpZ2h0ID0gdGhpcy5faHRtbEFyZWEub2Zmc2V0SGVpZ2h0OworICAKKyAgCisKKyAgLy8gU2V0IGNvbHNwYW4gZm9yIHRvb2xiYXIsIGFuZCBzdGF0dXNiYXIsIHJvd3NwYW4gZm9yIGxlZnQgJiByaWdodCBwYW5lbHMsIGFuZCBpbnNlcnQgcGFuZWxzIHRvIGJlIGRpc3BsYXllZAorICAvLyBpbnRvIHRoaWVyIHJvd3MKKyAgdmFyIHBhbmVscyA9IHRoaXMuX3BhbmVsczsKKyAgdmFyIGVkaXRvciA9IHRoaXM7CisgIHZhciBjb2xfc3BhbiA9IDE7CisKKyAgZnVuY3Rpb24gcGFuZWxfaXNfYWxpdmUocGFuKQorICB7CisgICAgaWYgKCBwYW5lbHNbcGFuXS5vbiAmJiBwYW5lbHNbcGFuXS5wYW5lbHMubGVuZ3RoICYmIFhpbmhhLmhhc0Rpc3BsYXllZENoaWxkcmVuKHBhbmVsc1twYW5dLmNvbnRhaW5lcikgKQorICAgIHsKKyAgICAgIHBhbmVsc1twYW5dLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJyc7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgLy8gT3RoZXJ3aXNlIG1ha2Ugc3VyZSBpdCdzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBmcmFtZXdvcmsKKyAgICBlbHNlCisgICAgeworICAgICAgcGFuZWxzW3Bhbl0uY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9J25vbmUnOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIGlmICggcGFuZWxfaXNfYWxpdmUoJ2xlZnQnKSApCisgIHsKKyAgICBjb2xfc3BhbiArPSAxOyAgICAgIAorICB9CisKKy8vICBpZiAoIHBhbmVsX2lzX2FsaXZlKCd0b3AnKSApCisvLyAgeworICAgIC8vIE5PUAorLy8gIH0KKworICBpZiAoIHBhbmVsX2lzX2FsaXZlKCdyaWdodCcpICkKKyAgeworICAgIGNvbF9zcGFuICs9IDE7CisgIH0KKworLy8gIGlmICggcGFuZWxfaXNfYWxpdmUoJ2JvdHRvbScpICkKKy8vICB7CisgICAgLy8gTk9QCisvLyAgfQorCisgIGZyYW1ld29yay50Yl9jZWxsLmNvbFNwYW4gPSBjb2xfc3BhbjsKKyAgZnJhbWV3b3JrLnRwX2NlbGwuY29sU3BhbiA9IGNvbF9zcGFuOworICBmcmFtZXdvcmsuYnBfY2VsbC5jb2xTcGFuID0gY29sX3NwYW47CisgIGZyYW1ld29yay5zYl9jZWxsLmNvbFNwYW4gPSBjb2xfc3BhbjsKKworICAvLyBQdXQgaW4gdGhlIHBhbmVsIHJvd3MsIHRvcCBwYW5lbCBnb2VzIGFib3ZlIGVkaXRvciByb3cKKyAgaWYgKCAhZnJhbWV3b3JrLnRwX3Jvdy5jaGlsZE5vZGVzLmxlbmd0aCApCisgIHsKKyAgICBYaW5oYS5yZW1vdmVGcm9tUGFyZW50KGZyYW1ld29yay50cF9yb3cpOworICB9CisgIGVsc2UKKyAgeworICAgIGlmICggIVhpbmhhLmhhc1BhcmVudE5vZGUoZnJhbWV3b3JrLnRwX3JvdykgKQorICAgIHsKKyAgICAgIGZyYW1ld29yay50Ym9keS5pbnNlcnRCZWZvcmUoZnJhbWV3b3JrLnRwX3JvdywgZnJhbWV3b3JrLmxlcl9yb3cpOworICAgIH0KKyAgfQorCisgIC8vIGJwIGdvZXMgYWZ0ZXIgdGhlIGVkaXRvcgorICBpZiAoICFmcmFtZXdvcmsuYnBfcm93LmNoaWxkTm9kZXMubGVuZ3RoICkKKyAgeworICAgIFhpbmhhLnJlbW92ZUZyb21QYXJlbnQoZnJhbWV3b3JrLmJwX3Jvdyk7CisgIH0KKyAgZWxzZQorICB7CisgICAgaWYgKCAhWGluaGEuaGFzUGFyZW50Tm9kZShmcmFtZXdvcmsuYnBfcm93KSApCisgICAgeworICAgICAgZnJhbWV3b3JrLnRib2R5Lmluc2VydEJlZm9yZShmcmFtZXdvcmsuYnBfcm93LCBmcmFtZXdvcmsubGVyX3Jvdy5uZXh0U2libGluZyk7CisgICAgfQorICB9CisKKyAgLy8gZmluYWxseSBpZiB0aGUgc3RhdHVzYmFyIGlzIG9uLCBpbnNlcnQgaXQKKyAgaWYgKCAhdGhpcy5jb25maWcuc3RhdHVzQmFyICkKKyAgeworICAgIFhpbmhhLnJlbW92ZUZyb21QYXJlbnQoZnJhbWV3b3JrLnNiX3Jvdyk7CisgIH0KKyAgZWxzZQorICB7CisgICAgaWYgKCAhWGluaGEuaGFzUGFyZW50Tm9kZShmcmFtZXdvcmsuc2Jfcm93KSApCisgICAgeworICAgICAgZnJhbWV3b3JrLnRhYmxlLmFwcGVuZENoaWxkKGZyYW1ld29yay5zYl9yb3cpOworICAgIH0KKyAgfQorCisgIC8vIFNpemUgYW5kIHNldCBjb2xzcGFucywgbGluayB1cCB0aGUgZnJhbWV3b3JrCisgIGZyYW1ld29yay5scF9jZWxsLnN0eWxlLndpZHRoICA9IHRoaXMuY29uZmlnLnBhbmVsX2RpbWVuc2lvbnMubGVmdDsKKyAgZnJhbWV3b3JrLnJwX2NlbGwuc3R5bGUud2lkdGggID0gdGhpcy5jb25maWcucGFuZWxfZGltZW5zaW9ucy5yaWdodDsKKyAgZnJhbWV3b3JrLnRwX2NlbGwuc3R5bGUuaGVpZ2h0ID0gdGhpcy5jb25maWcucGFuZWxfZGltZW5zaW9ucy50b3A7CisgIGZyYW1ld29yay5icF9jZWxsLnN0eWxlLmhlaWdodCA9IHRoaXMuY29uZmlnLnBhbmVsX2RpbWVuc2lvbnMuYm90dG9tOworICBmcmFtZXdvcmsudGJfY2VsbC5zdHlsZS5oZWlnaHQgPSB0aGlzLl90b29sQmFyLm9mZnNldEhlaWdodCArICdweCc7CisgIGZyYW1ld29yay5zYl9jZWxsLnN0eWxlLmhlaWdodCA9IHRoaXMuX3N0YXR1c0Jhci5vZmZzZXRIZWlnaHQgKyAncHgnOworCisgIHZhciBlZGNlbGxoZWlnaHQgPSBoZWlnaHQgLSB0aGlzLl90b29sQmFyLm9mZnNldEhlaWdodCAtIHRoaXMuX3N0YXR1c0Jhci5vZmZzZXRIZWlnaHQ7CisgIGlmICggcGFuZWxfaXNfYWxpdmUoJ3RvcCcpICkKKyAgeworICAgIGVkY2VsbGhlaWdodCAtPSBwYXJzZUludCh0aGlzLmNvbmZpZy5wYW5lbF9kaW1lbnNpb25zLnRvcCwgMTApOworICB9CisgIGlmICggcGFuZWxfaXNfYWxpdmUoJ2JvdHRvbScpICkKKyAgeworICAgIGVkY2VsbGhlaWdodCAtPSBwYXJzZUludCh0aGlzLmNvbmZpZy5wYW5lbF9kaW1lbnNpb25zLmJvdHRvbSwgMTApOworICB9CisgIHRoaXMuX2lmcmFtZS5zdHlsZS5oZWlnaHQgPSBlZGNlbGxoZWlnaHQgKyAncHgnOyAgCisgIAorICB2YXIgZWRjZWxsd2lkdGggPSB3aWR0aDsKKyAgaWYgKCBwYW5lbF9pc19hbGl2ZSgnbGVmdCcpICkKKyAgeworICAgIGVkY2VsbHdpZHRoIC09IHBhcnNlSW50KHRoaXMuY29uZmlnLnBhbmVsX2RpbWVuc2lvbnMubGVmdCwgMTApOworICB9CisgIGlmICggcGFuZWxfaXNfYWxpdmUoJ3JpZ2h0JykgKQorICB7CisgICAgZWRjZWxsd2lkdGggLT0gcGFyc2VJbnQodGhpcy5jb25maWcucGFuZWxfZGltZW5zaW9ucy5yaWdodCwgMTApOyAgICAKKyAgfQorICB2YXIgaWZyYW1lV2lkdGggPSB0aGlzLmNvbmZpZy5pZnJhbWVXaWR0aCA/IHBhcnNlSW50KHRoaXMuY29uZmlnLmlmcmFtZVdpZHRoLDEwKSA6IG51bGw7IAorICB0aGlzLl9pZnJhbWUuc3R5bGUud2lkdGggPSAoaWZyYW1lV2lkdGggJiYgaWZyYW1lV2lkdGggPCBlZGNlbGx3aWR0aCkgPyBpZnJhbWVXaWR0aCArICJweCI6IGVkY2VsbHdpZHRoICsgInB4IjsgCisKKyAgdGhpcy5fdGV4dEFyZWEuc3R5bGUuaGVpZ2h0ID0gdGhpcy5faWZyYW1lLnN0eWxlLmhlaWdodDsKKyAgdGhpcy5fdGV4dEFyZWEuc3R5bGUud2lkdGggID0gdGhpcy5faWZyYW1lLnN0eWxlLndpZHRoOworICAgICAKKyAgdGhpcy5ub3RpZnlPZigncmVzaXplJywge3dpZHRoOnRoaXMuX2h0bWxBcmVhLm9mZnNldFdpZHRoLCBoZWlnaHQ6dGhpcy5faHRtbEFyZWEub2Zmc2V0SGVpZ2h0fSk7CisgIHRoaXMuZmlyZVBsdWdpbkV2ZW50KCdvblJlc2l6ZScsdGhpcy5faHRtbEFyZWEub2Zmc2V0V2lkdGgsIHRoaXMuX2h0bWxBcmVhLm9mZnNldFdpZHRoKTsKKyAgdGhpcy5fcmlzaXppbmcgPSBmYWxzZTsKK307CisvKiogRklYTUU6IE5ldmVyIHVzZWQsIHdoYXQgaXMgdGhpcyBmb3I/IAorKiBAcGFyYW0ge3N0cmluZ30gc2lkZSAKKyogQHBhcmFtIHtPYmplY3R9CisqLworWGluaGEucHJvdG90eXBlLnJlZ2lzdGVyUGFuZWwgPSBmdW5jdGlvbihzaWRlLCBvYmplY3QpCit7CisgIGlmICggIXNpZGUgKQorICB7CisgICAgc2lkZSA9ICdyaWdodCc7CisgIH0KKyAgdGhpcy5zZXRMb2FkaW5nTWVzc2FnZSgnUmVnaXN0ZXIgJyArIHNpZGUgKyAnIHBhbmVsICcpOworICB2YXIgcGFuZWwgPSB0aGlzLmFkZFBhbmVsKHNpZGUpOworICBpZiAoIG9iamVjdCApCisgIHsKKyAgICBvYmplY3QuZHJhd1BhbmVsSW4ocGFuZWwpOworICB9Cit9OworLyoqIENyZWF0ZXMgYSBwYW5lbCBpbiB0aGUgcGFuZWwgY29udGFpbmVyIG9uIHRoZSBzcGVjaWZpZWQgc2lkZQorKiBAcGFyYW0ge1N0cmluZ30gc2lkZSB0aGUgcGFuZWwgY29udGFpbmVyIHRvIHdoaWNoIHRoZSBuZXcgcGFuZWwgd2lsbCBiZSBhZGRlZDxiciAvPgorKgkJCQkJCQkJCVBvc3NpYmxlIHZhbHVlcyBhcmU6ICJyaWdodCIsImxlZnQiLCJ0b3AiLCJib3R0b20iCisqIEByZXR1cm5zIHtEb21Ob2RlfSBQYW5lbCBkaXYKKyovCitYaW5oYS5wcm90b3R5cGUuYWRkUGFuZWwgPSBmdW5jdGlvbihzaWRlKQoreworICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgIGRpdi5zaWRlID0gc2lkZTsKKyAgaWYgKCBzaWRlID09ICdsZWZ0JyB8fCBzaWRlID09ICdyaWdodCcgKQorICB7CisgICAgZGl2LnN0eWxlLndpZHRoICA9IHRoaXMuY29uZmlnLnBhbmVsX2RpbWVuc2lvbnNbc2lkZV07CisgICAgaWYgKHRoaXMuX2lmcmFtZSkgCisgICAgeworICAgICAgZGl2LnN0eWxlLmhlaWdodCA9IHRoaXMuX2lmcmFtZS5zdHlsZS5oZWlnaHQ7CisgICAgfQorICB9CisgIFhpbmhhLmFkZENsYXNzZXMoZGl2LCAncGFuZWwnKTsKKyAgdGhpcy5fcGFuZWxzW3NpZGVdLnBhbmVscy5wdXNoKGRpdik7CisgIHRoaXMuX3BhbmVsc1tzaWRlXS5kaXYuYXBwZW5kQ2hpbGQoZGl2KTsKKworICB0aGlzLm5vdGlmeU9mKCdwYW5lbF9jaGFuZ2UnLCB7J2FjdGlvbic6J2FkZCcsJ3BhbmVsJzpkaXZ9KTsKKyAgdGhpcy5maXJlUGx1Z2luRXZlbnQoJ29uUGFuZWxDaGFuZ2UnLCdhZGQnLGRpdik7CisgIHJldHVybiBkaXY7Cit9OworLyoqIFJlbW92ZXMgYSBwYW5lbAorKiBAcGFyYW0ge0RvbU5vZGV9IHBhbmVsIG9iamVjdCBhcyByZXR1cm5lZCBieSBYaW5oYS5wcm90b3R5cGUuYWRkUGFuZWwoKQorKi8KK1hpbmhhLnByb3RvdHlwZS5yZW1vdmVQYW5lbCA9IGZ1bmN0aW9uKHBhbmVsKQoreworICB0aGlzLl9wYW5lbHNbcGFuZWwuc2lkZV0uZGl2LnJlbW92ZUNoaWxkKHBhbmVsKTsKKyAgdmFyIGNsZWFuID0gW107CisgIGZvciAoIHZhciBpID0gMDsgaSA8IHRoaXMuX3BhbmVsc1twYW5lbC5zaWRlXS5wYW5lbHMubGVuZ3RoOyBpKysgKQorICB7CisgICAgaWYgKCB0aGlzLl9wYW5lbHNbcGFuZWwuc2lkZV0ucGFuZWxzW2ldICE9IHBhbmVsICkKKyAgICB7CisgICAgICBjbGVhbi5wdXNoKHRoaXMuX3BhbmVsc1twYW5lbC5zaWRlXS5wYW5lbHNbaV0pOworICAgIH0KKyAgfQorICB0aGlzLl9wYW5lbHNbcGFuZWwuc2lkZV0ucGFuZWxzID0gY2xlYW47CisgIHRoaXMubm90aWZ5T2YoJ3BhbmVsX2NoYW5nZScsIHsnYWN0aW9uJzoncmVtb3ZlJywncGFuZWwnOnBhbmVsfSk7CisgIHRoaXMuZmlyZVBsdWdpbkV2ZW50KCdvblBhbmVsQ2hhbmdlJywncmVtb3ZlJyxwYW5lbCk7Cit9OworLyoqIEhpZGVzIGEgcGFuZWwKKyogQHBhcmFtIHtEb21Ob2RlfSBwYW5lbCBvYmplY3QgYXMgcmV0dXJuZWQgYnkgWGluaGEucHJvdG90eXBlLmFkZFBhbmVsKCkKKyovCitYaW5oYS5wcm90b3R5cGUuaGlkZVBhbmVsID0gZnVuY3Rpb24ocGFuZWwpCit7CisgIGlmICggcGFuZWwgJiYgcGFuZWwuc3R5bGUuZGlzcGxheSAhPSAnbm9uZScgKQorICB7CisgICAgdHJ5IHsgdmFyIHBvcyA9IHRoaXMuc2Nyb2xsUG9zKHRoaXMuX2lmcmFtZS5jb250ZW50V2luZG93KTsgfSBjYXRjaChlKSB7IH0KKyAgICBwYW5lbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgIHRoaXMubm90aWZ5T2YoJ3BhbmVsX2NoYW5nZScsIHsnYWN0aW9uJzonaGlkZScsJ3BhbmVsJzpwYW5lbH0pOworICAgIHRoaXMuZmlyZVBsdWdpbkV2ZW50KCdvblBhbmVsQ2hhbmdlJywnaGlkZScscGFuZWwpOworICAgIHRyeSB7IHRoaXMuX2lmcmFtZS5jb250ZW50V2luZG93LnNjcm9sbFRvKHBvcy54LHBvcy55KTsgfSBjYXRjaChlKSB7IH0KKyAgfQorfTsKKy8qKiBTaG93cyBhIHBhbmVsCisqIEBwYXJhbSB7RG9tTm9kZX0gcGFuZWwgb2JqZWN0IGFzIHJldHVybmVkIGJ5IFhpbmhhLnByb3RvdHlwZS5hZGRQYW5lbCgpCisqLworWGluaGEucHJvdG90eXBlLnNob3dQYW5lbCA9IGZ1bmN0aW9uKHBhbmVsKQoreworICBpZiAoIHBhbmVsICYmIHBhbmVsLnN0eWxlLmRpc3BsYXkgPT0gJ25vbmUnICkKKyAgeworICAgIHRyeSB7IHZhciBwb3MgPSB0aGlzLnNjcm9sbFBvcyh0aGlzLl9pZnJhbWUuY29udGVudFdpbmRvdyk7IH0gY2F0Y2goZSkge30KKyAgICBwYW5lbC5zdHlsZS5kaXNwbGF5ID0gJyc7CisgICAgdGhpcy5ub3RpZnlPZigncGFuZWxfY2hhbmdlJywgeydhY3Rpb24nOidzaG93JywncGFuZWwnOnBhbmVsfSk7CisgICAgdGhpcy5maXJlUGx1Z2luRXZlbnQoJ29uUGFuZWxDaGFuZ2UnLCdzaG93JyxwYW5lbCk7CisgICAgdHJ5IHsgdGhpcy5faWZyYW1lLmNvbnRlbnRXaW5kb3cuc2Nyb2xsVG8ocG9zLngscG9zLnkpOyB9IGNhdGNoKGUpIHsgfQorICB9Cit9OworLyoqIEhpZGVzIHRoZSBwYW5lbChzKSBvbiBvbmUgb3IgbW9yZSBzaWRlcworKiBAcGFyYW0ge0FycmF5fSBzaWRlcyB0aGUgc2lkZXMgb24gd2hpY2ggdGhlIHBhbmVscyBzaGFsbCBiZSBoaWRkZW4KKyovCitYaW5oYS5wcm90b3R5cGUuaGlkZVBhbmVscyA9IGZ1bmN0aW9uKHNpZGVzKQoreworICBpZiAoIHR5cGVvZiBzaWRlcyA9PSAndW5kZWZpbmVkJyApCisgIHsKKyAgICBzaWRlcyA9IFsnbGVmdCcsJ3JpZ2h0JywndG9wJywnYm90dG9tJ107CisgIH0KKworICB2YXIgcmVTaG93ID0gW107CisgIGZvciAoIHZhciBpID0gMDsgaSA8IHNpZGVzLmxlbmd0aDtpKysgKQorICB7CisgICAgaWYgKCB0aGlzLl9wYW5lbHNbc2lkZXNbaV1dLm9uICkKKyAgICB7CisgICAgICByZVNob3cucHVzaChzaWRlc1tpXSk7CisgICAgICB0aGlzLl9wYW5lbHNbc2lkZXNbaV1dLm9uID0gZmFsc2U7CisgICAgfQorICB9CisgIHRoaXMubm90aWZ5T2YoJ3BhbmVsX2NoYW5nZScsIHsnYWN0aW9uJzonbXVsdGlfaGlkZScsJ3NpZGVzJzpzaWRlc30pOworICB0aGlzLmZpcmVQbHVnaW5FdmVudCgnb25QYW5lbENoYW5nZScsJ211bHRpX2hpZGUnLHNpZGVzKTsKK307CisvKiogU2hvd3MgdGhlIHBhbmVsKHMpIG9uIG9uZSBvciBtb3JlIHNpZGVzCisqIEBwYXJhbSB7QXJyYXl9IHNpZGVzIHRoZSBzaWRlcyBvbiB3aGljaCB0aGUgcGFuZWxzIHNoYWxsIGJlIGhpZGRlbgorKi8KK1hpbmhhLnByb3RvdHlwZS5zaG93UGFuZWxzID0gZnVuY3Rpb24oc2lkZXMpCit7CisgIGlmICggdHlwZW9mIHNpZGVzID09ICd1bmRlZmluZWQnICkKKyAgeworICAgIHNpZGVzID0gWydsZWZ0JywncmlnaHQnLCd0b3AnLCdib3R0b20nXTsKKyAgfQorCisgIHZhciByZUhpZGUgPSBbXTsKKyAgZm9yICggdmFyIGkgPSAwOyBpIDwgc2lkZXMubGVuZ3RoOyBpKysgKQorICB7CisgICAgaWYgKCAhdGhpcy5fcGFuZWxzW3NpZGVzW2ldXS5vbiApCisgICAgeworICAgICAgcmVIaWRlLnB1c2goc2lkZXNbaV0pOworICAgICAgdGhpcy5fcGFuZWxzW3NpZGVzW2ldXS5vbiA9IHRydWU7CisgICAgfQorICB9CisgIHRoaXMubm90aWZ5T2YoJ3BhbmVsX2NoYW5nZScsIHsnYWN0aW9uJzonbXVsdGlfc2hvdycsJ3NpZGVzJzpzaWRlc30pOworICB0aGlzLmZpcmVQbHVnaW5FdmVudCgnb25QYW5lbENoYW5nZScsJ211bHRpX3Nob3cnLHNpZGVzKTsKK307CisvKiogUmV0dXJucyBhbiBhcnJheSBjb250YWluaWcgYWxsIHByb3BlcnRpZXMgdGhhdCBhcmUgc2V0IGluIGFuIG9iamVjdAorKiBAcGFyYW0ge09iamVjdH0gb2JqCisqIEByZXR1cm5zIHtBcnJheX0KKyovCitYaW5oYS5vYmplY3RQcm9wZXJ0aWVzID0gZnVuY3Rpb24ob2JqKQoreworICB2YXIgcHJvcHMgPSBbXTsKKyAgZm9yICggdmFyIHggaW4gb2JqICkKKyAgeworICAgIHByb3BzW3Byb3BzLmxlbmd0aF0gPSB4OworICB9CisgIHJldHVybiBwcm9wczsKK307CisKKy8qKiBDaGVja3MgaWYgZWRpdG9yIGlzIGFjdGl2ZQorICo8YnIgLz4KKyAqIEVESVRPUiBBQ1RJVkFUSU9OIE5PVEVTOjxiciAvPgorICogIHdoZW4gYSBwYWdlIGhhcyBtdWx0aXBsZSBYaW5oYSBlZGl0b3JzLCBPTkxZIE9ORSBzaG91bGQgYmUgYWN0aXZhdGVkIGF0IGFueSB0aW1lICh0aGlzIGlzIG1vc3RseSB0bworICogIHdvcmsgYXJvdW5kIGEgYnVnIGluIE1vemlsbGEsIGJ1dCBhbHNvIG1ha2VzIHNvbWUgc2Vuc2UpLiAgTm8gZWRpdG9yIHNob3VsZCBiZSBhY3RpdmF0ZWQgb3IgZm9jdXNlZAorICogIGF1dG9tYXRpY2FsbHkgdW50aWwgYXQgbGVhc3Qgb25lIGVkaXRvciBoYXMgYmVlbiBhY3RpdmF0ZWQgdGhyb3VnaCB1c2VyIGFjdGlvbiAoYnkgbW91c2UtY2xpY2tpbmcgaW4KKyAqICB0aGUgZWRpdG9yKS4KKyAqIEBwcml2YXRlCisgKiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqLworWGluaGEucHJvdG90eXBlLmVkaXRvcklzQWN0aXZhdGVkID0gZnVuY3Rpb24oKQoreworICB0cnkKKyAgeworICAgIHJldHVybiBYaW5oYS5pc19kZXNpZ25Nb2RlID8gdGhpcy5fZG9jLmRlc2lnbk1vZGUgPT0gJ29uJyA6IHRoaXMuX2RvYy5ib2R5LmNvbnRlbnRFZGl0YWJsZTsKKyAgfQorICBjYXRjaCAoZXgpCisgIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KK307CisvKiogIFdlIG5lZWQgdG8ga25vdyB0aGF0IGF0IGxlYXN0IG9uZSBlZGl0b3Igb24gdGhlIHBhZ2UgaGFzIGJlZW4gYWN0aXZhdGVkCisqICAgIHRoaXMgaXMgYmVjYXVzZSB3ZSB3aWxsIG5vdCBmb2N1cyBhbnkgZWRpdG9yIHVudGlsIGFuIGVkaXRvciBoYXMgYmVlbiBhY3RpdmF0ZWQKKyogQHByaXZhdGUKKyogQHR5cGUge0Jvb2xlYW59CisqLworWGluaGEuX3NvbWVFZGl0b3JIYXNCZWVuQWN0aXZhdGVkID0gZmFsc2U7CisvKiogIFN0b3JlcyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBlZGl0b3IKKyogQHByaXZhdGUKKyogQHR5cGUge1hpbmhhfQorKi8KK1hpbmhhLl9jdXJyZW50bHlBY3RpdmVFZGl0b3IgICAgICA9IG51bGw7CisvKiogRW5hYmxlcyBvbmUgZWRpdG9yIGZvciBlZGl0aW5nLCBlLmcuIGJ5IGEgY2xpY2sgaW4gdGhlIGVkaXRpbmcgYXJlYSBvciBhZnRlciBpdCBoYXMgYmVlbiAKKyAqICBkZWFjdGl2YXRlZCBwcm9ncmFtbWF0aWNhbGx5IGJlZm9yZSAKKyAqIEBwcml2YXRlCisgKiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqLworWGluaGEucHJvdG90eXBlLmFjdGl2YXRlRWRpdG9yID0gZnVuY3Rpb24oKQoreworICBpZiAodGhpcy5jdXJyZW50TW9kYWwpIAorICB7CisgICAgcmV0dXJuOworICB9CisgIC8vIFdlIG9ubHkgd2FudCBPTkUgZWRpdG9yIGF0IGEgdGltZSB0byBiZSBhY3RpdmUKKyAgaWYgKCBYaW5oYS5fY3VycmVudGx5QWN0aXZlRWRpdG9yICkKKyAgeworICAgIGlmICggWGluaGEuX2N1cnJlbnRseUFjdGl2ZUVkaXRvciA9PSB0aGlzICkKKyAgICB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgWGluaGEuX2N1cnJlbnRseUFjdGl2ZUVkaXRvci5kZWFjdGl2YXRlRWRpdG9yKCk7CisgIH0KKworICBpZiAoIFhpbmhhLmlzX2Rlc2lnbk1vZGUgJiYgdGhpcy5fZG9jLmRlc2lnbk1vZGUgIT0gJ29uJyApCisgIHsKKyAgICB0cnkKKyAgICB7CisgICAgICAvLyBjYW5ub3Qgc2V0IGRlc2lnbiBtb2RlIGlmIG5vIGRpc3BsYXkKKyAgICAgIGlmICggdGhpcy5faWZyYW1lLnN0eWxlLmRpc3BsYXkgPT0gJ25vbmUnICkKKyAgICAgIHsKKyAgICAgICAgdGhpcy5faWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgICAgICAgdGhpcy5fZG9jLmRlc2lnbk1vZGUgPSAnb24nOworICAgICAgICB0aGlzLl9pZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgdGhpcy5fZG9jLmRlc2lnbk1vZGUgPSAnb24nOworICAgICAgfQorCisgICAgICAvLyBPcGVyYSBsb3NlcyBzb21lIG9mIGl0J3MgZXZlbnQgbGlzdGVuZXJzIHdoZW4gdGhlIGRlc2lnbk1vZGUgaXMgc2V0IHRvIG9uLgorCSAgLy8gdGhlIHRydWUganVzdCBzaG9ydGN1dHMgdGhlIG1ldGhvZCB0byBvbmx5IHNldCBzb21lIGxpc3RlbmVycy4KKyAgICAgIGlmKFhpbmhhLmlzX29wZXJhKSB0aGlzLnNldEVkaXRvckV2ZW50cyh0cnVlKTsKKworICAgIH0gY2F0Y2ggKGV4KSB7fQorICB9CisgIGVsc2UgaWYgKCBYaW5oYS5pc19pZSYmIHRoaXMuX2RvYy5ib2R5LmNvbnRlbnRFZGl0YWJsZSAhPT0gdHJ1ZSApCisgIHsKKyAgICB0aGlzLl9kb2MuYm9keS5jb250ZW50RWRpdGFibGUgPSB0cnVlOworICB9CisKKyAgWGluaGEuX3NvbWVFZGl0b3JIYXNCZWVuQWN0aXZhdGVkID0gdHJ1ZTsKKyAgWGluaGEuX2N1cnJlbnRseUFjdGl2ZUVkaXRvciAgICAgID0gdGhpczsKKworICB2YXIgZWRpdG9yID0gdGhpczsKKyAgdGhpcy5lbmFibGVUb29sYmFyKCk7Cit9OworLyoqIERpc2FibGVzIHRoZSBlZGl0b3IgCisgKiBAcHJpdmF0ZQorICovCitYaW5oYS5wcm90b3R5cGUuZGVhY3RpdmF0ZUVkaXRvciA9IGZ1bmN0aW9uKCkKK3sKKyAgLy8gSWYgdGhlIGVkaXRvciBpc24ndCBhY3RpdmUgdGhlbiB0aGUgdXNlciBzaG91bGRuJ3QgdXNlIHRoZSB0b29sYmFyCisgIHRoaXMuZGlzYWJsZVRvb2xiYXIoKTsKKworICBpZihYaW5oYS5pc19pb3MpCisgIHsKKyAgICB0aGlzLl9zdGF0dXNCYXJUcmVlLmlubmVySFRNTCA9IFhpbmhhLl9sYygiVG91Y2ggaGVyZSBmaXJzdCB0byBhY3RpdmF0ZSBlZGl0b3IuIik7CisgIH0KKyAgZWxzZQorICB7CisgICAgdGhpcy5fc3RhdHVzQmFyVHJlZS5pbm5lckhUTUwgPSBYaW5oYS5fbGMoIlBhdGgiKSArICI6ICI7CisgIH0KKworICBpZiAoIFhpbmhhLmlzX2Rlc2lnbk1vZGUgJiYgdGhpcy5fZG9jLmRlc2lnbk1vZGUgIT0gJ29mZicgKQorICB7CisgICAgdHJ5CisgICAgeworICAgICAgdGhpcy5fZG9jLmRlc2lnbk1vZGUgPSAnb2ZmJzsKKyAgICB9IGNhdGNoIChleCkge30KKyAgfQorICBlbHNlIGlmICggIVhpbmhhLmlzX2Rlc2lnbk1vZGUgJiYgdGhpcy5fZG9jLmJvZHkuY29udGVudEVkaXRhYmxlICE9PSBmYWxzZSApCisgIHsKKyAgICB0aGlzLl9kb2MuYm9keS5jb250ZW50RWRpdGFibGUgPSBmYWxzZTsKKyAgfQorCisgIGlmICggWGluaGEuX2N1cnJlbnRseUFjdGl2ZUVkaXRvciAhPSB0aGlzICkKKyAgeworICAgIC8vIFdlIGp1c3QgZGVhY3RpdmF0ZWQgYW4gZWRpdG9yIHRoYXQgd2Fzbid0IG1hcmtlZCBhcyB0aGUgY3VycmVudGx5QWN0aXZlRWRpdG9yCisKKyAgICByZXR1cm47IC8vIEkgdGhpbmsgdGhpcyBzaG91bGQgcmVhbGx5IGJlIGFuIGVycm9yLCB0aGVyZSBzaG91bGRuJ3QgYmUgYSBzaXR1YXRpb24gd2hlcmUKKyAgICAgICAgICAgIC8vIGFuIGVkaXRvciBpcyBkZWFjdGl2YXRlZCB3aXRob3V0IGZpcnN0IGJlaW5nIGFjdGl2YXRlZC4gIGJ1dCBpdCBwcm9iYWJseSB3b24ndAorICAgICAgICAgICAgLy8gaHVydCBhbnl0aGluZy4KKyAgfQorCisgIFhpbmhhLl9jdXJyZW50bHlBY3RpdmVFZGl0b3IgPSBmYWxzZTsKK307CisvKiogQ3JlYXRlcyB0aGUgaWZyYW1lIChlZGl0YWJsZSBhcmVhKQorICogQHByaXZhdGUKKyAqLworWGluaGEucHJvdG90eXBlLmluaXRJZnJhbWUgPSBmdW5jdGlvbigpCit7CisgIHRoaXMuZGlzYWJsZVRvb2xiYXIoKTsKKyAgdmFyIGRvYyA9IG51bGw7CisgIHZhciBlZGl0b3IgPSB0aGlzOworCisgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgbmVlZCB0byB3YWl0IGEgYml0IG1vcmUgZm9yIHRoZSBpZnJhbWUKKyAgLy8gIGJyb3dzZXJzIHZhcnkgYSBiaXQgb24gaG93IHRoZXkgdHJlYXQgdGhlIGlmcmFtZSBsb2FkIGV2ZW50cworICAvLyAgc28gZXZlbiB0aG91Z2ggd2Ugc2hvdWxkIGp1c3QgYmUgYWJsZSB0byBsaXN0ZW4gdG8gbG9hZCwgbWF5YmUKKyAgLy8gIHRoYXQgZG9lc24ndCB3b3JrIHF1aXRlIHJpZ2h0LCBqdXN0IHdhaXRpbmcgYSBiaXQgaWYgaXQgZmFpbHMKKyAgLy8gIGFuZCB0aGVuIHRyeWluZyBhZ2FpbiBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhLgorICBpZih0eXBlb2YgZWRpdG9yLl9pZnJhbWVXYWl0aW5nUmV0cmllcyA9PSAndW5kZWZpbmVkJyApICAgIAorICB7CisgICAgZWRpdG9yLl9pZnJhbWVXYWl0aW5nUmV0cmllcyA9IDEwOworICB9CisgCisgIC8vIEZvciBlYWNoIHJldHJ5IHdlIGxlbmd0aGVuIHRoZSBkZWxheSwganVzdCBzbyB3ZSBkb24ndCBzcGFtIHRoZSBjb25zb2xlCisgIC8vICB3aXRoIG1lc3NhZ2VzIHJlYWxseQorICB2YXIgcmV0cnlEZWxheSA9ICg2MjUgLyAoZWRpdG9yLl9pZnJhbWVXYWl0aW5nUmV0cmllcyAqIGVkaXRvci5faWZyYW1lV2FpdGluZ1JldHJpZXMgKSApICogNTA7CisgIGVkaXRvci5faWZyYW1lV2FpdGluZ1JldHJpZXMtLTsKKworICB0cnkKKyAgeworICAgIGlmICggZWRpdG9yLl9pZnJhbWUuY29udGVudERvY3VtZW50ICkKKyAgICB7CisgICAgICB0aGlzLl9kb2MgPSBlZGl0b3IuX2lmcmFtZS5jb250ZW50RG9jdW1lbnQ7ICAgICAgICAKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHRoaXMuX2RvYyA9IGVkaXRvci5faWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7CisgICAgfQorICAgIGRvYyA9IHRoaXMuX2RvYzsKKyAgICAvLyB0cnkgbGF0ZXIKKyAgICBpZiAoICFkb2MgKQorICAgIHsKKyAgICAgIGlmKCBlZGl0b3IuX2lmcmFtZVdhaXRpbmdSZXRyaWVzID4gMCApCisgICAgICB7CisgICAgICAgIFhpbmhhLmRlYnVnTXNnKCJTdGlsbCB3YWl0aW5nIGZvciBJZnJhbWUuLi4iKTsKKyAgICAgICAgZWRpdG9yLnNldExvYWRpbmdNZXNzYWdlKFhpbmhhLl9sYygiV2FpdGluZyBmb3IgSWZyYW1lIHRvIGxvYWQuLi4iKSk7CisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGVkaXRvci5pbml0SWZyYW1lKCk7IH0sIHJldHJ5RGVsYXkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8vIEdpdmUgdXAKKyAgICAgICAgWGluaGEuZGVidWdNc2coIlhpbmhhOiBVbmFibGUgdG8gYWNjZXNzIHRoZSBJZnJhbWUgZG9jdW1lbnQgb2JqZWN0LCB0aGlzIG1heSBiZSB0aGUgcmVzdWx0IG9mIGEgQ3Jvc3MtT3JpZ2luIHJlc3RyaWN0aW9uLCB2ZXJ5IHNsb3cgbmV0d29yaywgb3Igc29tZSBvdGhlciBpc3N1ZS4iLCAnd2FybicpOworICAgICAgICBYaW5oYS5kZWJ1Z01zZygiWW91IG1heSB3aXNoIHRvIHRyeSBjaGFuZ2luZyB4aW5oYV9jb25maWcuVVJJcy5pZnJhbWVfc3JjIGZyb20gIitlZGl0b3IuY29uZmlnLlVSSXMuaWZyYW1lX3NyYysiIHRvIGEgdXJsIG9mIGEgYmxhbmsgcGFnZSBvbiB5b3VyIHNlcnZlciAoZWcgJy9ibGFuay5odG1sJykgYW5kIHNlZSBpZiB0aGF0IGhlbHBzLiIsICd3YXJuJyk7CisgICAgICAgIGVkaXRvci5zZXRMb2FkaW5nTWVzc2FnZShYaW5oYS5fbGMoIkVycm9yIExvYWRpbmcgWGluaGEuICBEZXZlbG9wZXJzLCBjaGVjayB0aGUgRXJyb3IgQ29uc29sZSBmb3IgaW5mb3JtYXRpb24uIikpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorICB9CisgIGNhdGNoKGV4KQorICB7IC8vIHRyeSBsYXRlcgorICAgIGlmKGVkaXRvci5faWZyYW1lV2FpdGluZ1JldHJpZXMgPiAwKQorICAgIHsKKyAgICAgIFhpbmhhLmRlYnVnTXNnKCJTdGlsbCB3YWl0aW5nIGZvciBJZnJhbWUuLi4iKTsKKyAgICAgIGVkaXRvci5zZXRMb2FkaW5nTWVzc2FnZShYaW5oYS5fbGMoIldhaXRpbmcgZm9yIElmcmFtZSB0byBsb2FkLi4uIikpOworICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgZWRpdG9yLmluaXRJZnJhbWUoKTsgfSwgcmV0cnlEZWxheSk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBYaW5oYS5kZWJ1Z01zZyhleCwgJ3dhcm4nKTsKKyAgICAgIFhpbmhhLmRlYnVnTXNnKCJYaW5oYTogVW5hYmxlIHRvIGFjY2VzcyB0aGUgSWZyYW1lIGRvY3VtZW50IG9iamVjdCwgdGhpcyBtYXkgYmUgdGhlIHJlc3VsdCBvZiBhIENyb3NzLU9yaWdpbiByZXN0cmljdGlvbiwgdmVyeSBzbG93IG5ldHdvcmssIG9yIHNvbWUgb3RoZXIgaXNzdWUuIiwgJ3dhcm4nKTsKKyAgICAgIFhpbmhhLmRlYnVnTXNnKCJZb3UgbWF5IHdpc2ggdG8gdHJ5IGNoYW5naW5nIHhpbmhhX2NvbmZpZy5VUklzLmlmcmFtZV9zcmMgZnJvbSAiK2VkaXRvci5jb25maWcuVVJJcy5pZnJhbWVfc3JjKyIgdG8gYSB1cmwgb2YgYSBibGFuayBwYWdlIG9uIHlvdXIgc2VydmVyIChlZyAnL2JsYW5rLmh0bWwnKSBhbmQgc2VlIGlmIHRoYXQgaGVscHMuIiwgJ3dhcm4nKTsKKyAgICAgIGVkaXRvci5zZXRMb2FkaW5nTWVzc2FnZShYaW5oYS5fbGMoIkVycm9yIExvYWRpbmcgWGluaGEuICBEZXZlbG9wZXJzLCBjaGVjayB0aGUgRXJyb3IgQ29uc29sZSBmb3IgaW5mb3JtYXRpb24uIikpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorICAKKyAgWGluaGEuZnJlZUxhdGVyKHRoaXMsICdfZG9jJyk7CisKKyAgZG9jLm9wZW4oInRleHQvaHRtbCIsInJlcGxhY2UiKTsKKyAgdmFyIGh0bWwgPSAnJywgZG9jdHlwZTsKKyAgaWYgKCBlZGl0b3IuY29uZmlnLmJyb3dzZXJRdWlya3NNb2RlID09PSBmYWxzZSApCisgIHsKKyAgICBkb2N0eXBlID0gJzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPic7CisgIH0KKyAgZWxzZSBpZiAoIGVkaXRvci5jb25maWcuYnJvd3NlclF1aXJrc01vZGUgPT09IHRydWUgKQorICB7CisgICAgZG9jdHlwZSA9ICcnOworICB9CisgIGVsc2UKKyAgeworICAgIGRvY3R5cGUgPSBYaW5oYS5nZXREb2N0eXBlKGRvY3VtZW50KTsKKyAgfQorICAKKyAgaWYgKCAhZWRpdG9yLmNvbmZpZy5mdWxsUGFnZSApCisgIHsKKyAgICBodG1sICs9IGRvY3R5cGUgKyAiXG4iOworICAgIGh0bWwgKz0gIjxodG1sPlxuIjsKKyAgICBodG1sICs9ICI8aGVhZD5cbiI7CisgICAgaHRtbCArPSAiPG1ldGEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9IiArIGVkaXRvci5jb25maWcuY2hhclNldCArICJcIj5cbiI7CisgICAgaWYgKCB0eXBlb2YgZWRpdG9yLmNvbmZpZy5iYXNlSHJlZiAhPSAndW5kZWZpbmVkJyAmJiBlZGl0b3IuY29uZmlnLmJhc2VIcmVmICE9PSBudWxsICkKKyAgICB7CisgICAgICBodG1sICs9ICI8YmFzZSBocmVmPVwiIiArIGVkaXRvci5jb25maWcuYmFzZUhyZWYgKyAiXCIvPlxuIjsKKyAgICB9CisgICAgCisgICAgaHRtbCArPSBYaW5oYS5hZGRDb3JlQ1NTKCk7CisgICAgCisgICAgaWYgKCB0eXBlb2YgZWRpdG9yLmNvbmZpZy5wYWdlU3R5bGVTaGVldHMgIT09ICd1bmRlZmluZWQnICkKKyAgICB7CisgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBlZGl0b3IuY29uZmlnLnBhZ2VTdHlsZVNoZWV0cy5sZW5ndGg7IGkrKyApCisgICAgICB7CisgICAgICAgIGlmICggZWRpdG9yLmNvbmZpZy5wYWdlU3R5bGVTaGVldHNbaV0ubGVuZ3RoID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICBodG1sICs9ICI8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgaHJlZj1cIiIgKyBlZGl0b3IuY29uZmlnLnBhZ2VTdHlsZVNoZWV0c1tpXSArICJcIj4iOworICAgICAgICAgIC8vaHRtbCArPSAiPHN0eWxlPiBAaW1wb3J0IHVybCgnIiArIGVkaXRvci5jb25maWcucGFnZVN0eWxlU2hlZXRzW2ldICsgIicpOyA8L3N0eWxlPlxuIjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoIGVkaXRvci5jb25maWcucGFnZVN0eWxlICkKKyAgICB7CisgICAgICBodG1sICs9ICI8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+XG4iICsgZWRpdG9yLmNvbmZpZy5wYWdlU3R5bGUgKyAiXG48L3N0eWxlPiI7CisgICAgfQorICAgIAorICAgIGh0bWwgKz0gIjwvaGVhZD5cbiI7CisgICAgaHRtbCArPSAiPGJvZHkiICsgKGVkaXRvci5jb25maWcuYm9keUlEID8gKCIgaWQ9XCIiICsgZWRpdG9yLmNvbmZpZy5ib2R5SUQgKyAiXCIiKSA6ICcnKSArIChlZGl0b3IuY29uZmlnLmJvZHlDbGFzcyA/ICgiIGNsYXNzPVwiIiArIGVkaXRvci5jb25maWcuYm9keUNsYXNzICsgIlwiIikgOiAnJykgKyAiPlxuIjsKKyAgICBodG1sICs9ICAgZWRpdG9yLmlud2FyZEh0bWwoZWRpdG9yLl90ZXh0QXJlYS52YWx1ZSk7CisgICAgaHRtbCArPSAiPC9ib2R5PlxuIjsKKyAgICBodG1sICs9ICI8L2h0bWw+IjsKKyAgfQorICBlbHNlCisgIHsKKyAgICBodG1sID0gZWRpdG9yLmlud2FyZEh0bWwoZWRpdG9yLl90ZXh0QXJlYS52YWx1ZSk7CisgICAgaWYgKCBodG1sLm1hdGNoKFhpbmhhLlJFX2RvY3R5cGUpICkKKyAgICB7CisgICAgICBlZGl0b3Iuc2V0RG9jdHlwZShSZWdFeHAuJDEpOworICAgICAgLy9odG1sID0gaHRtbC5yZXBsYWNlKFhpbmhhLlJFX2RvY3R5cGUsICIiKTsKKyAgICB9CisgICAgCisgICAgLy9GaXggRmlyZWZveCBwcm9ibGVtIHdpdGggbGluayBlbGVtZW50cyBub3QgaW4gcmlnaHQgcGxhY2UgKGp1c3QgYmVmb3JlIGhlYWQpCisgICAgdmFyIG1hdGNoID0gaHRtbC5tYXRjaCgvPGxpbmtccytbXHNcU10qP1siJ11ccypcLz8+L2dpKTsKKyAgICBodG1sID0gaHRtbC5yZXBsYWNlKC88bGlua1xzK1tcc1xTXSo/WyInXVxzKlwvPz5ccyovZ2ksICcnKTsKKyAgICBpZiAobWF0Y2gpCisgICAgeworICAgICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvPFwvaGVhZD4vaSwgbWF0Y2guam9pbignXG4nKSArICJcbjwvaGVhZD4iKTsKKyAgICB9CisgIH0KKyAgZG9jLndyaXRlKGh0bWwpOworICBkb2MuY2xvc2UoKTsKKyAgaWYgKCB0aGlzLmNvbmZpZy5mdWxsU2NyZWVuICkKKyAgeworICAgIHRoaXMuX2Z1bGxTY3JlZW4oKTsKKyAgfQorICB0aGlzLnNldEVkaXRvckV2ZW50cygpOworCisKKyAgLy8gSWYgdGhpcyBJRlJBTUUgaGFkIGJlZW4gY29uZmlndXJlZCBmb3IgYXV0b2ZvY3VzLCB3ZSdsbCBmb2N1cyBpdCBub3csCisgIC8vIHNpbmNlIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIGRvIHNvIGlzIG5vdyBmdWxseSBsb2FkZWQuCisgIGlmICgodHlwZW9mIGVkaXRvci5jb25maWcuYXV0b2ZvY3VzICE9ICJ1bmRlZmluZWQiKSAmJiBlZGl0b3IuY29uZmlnLmF1dG9mb2N1cyAhPT0gZmFsc2UgJiYKKyAgICAgICgoZWRpdG9yLmNvbmZpZy5hdXRvZm9jdXMgPT0gZWRpdG9yLl90ZXh0QXJlYS5pZCkgfHwgZWRpdG9yLmNvbmZpZy5hdXRvZm9jdXMgPT0gdHJ1ZSkpCisgIHsKKyAgICBlZGl0b3IuYWN0aXZhdGVFZGl0b3IoKTsKKyAgICBlZGl0b3IuZm9jdXNFZGl0b3IoKTsKKyAgfQorfTsKKyAgCisvKioKKyAqIERlbGF5IGEgZnVuY3Rpb24gdW50aWwgdGhlIGRvY3VtZW50IGlzIHJlYWR5IGZvciBvcGVyYXRpb25zLgorICogU2VlIHRpY2tldDo1NDcKKyAqIEBwdWJsaWMKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGYgIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uY2UgdGhlIGRvY3VtZW50IGlzIHJlYWR5CisgKi8KK1hpbmhhLnByb3RvdHlwZS53aGVuRG9jUmVhZHkgPSBmdW5jdGlvbihmKQoreworICB2YXIgZSA9IHRoaXM7CisgIGlmICggdGhpcy5fZG9jICYmIHRoaXMuX2RvYy5ib2R5ICkKKyAgeworICAgIGYoKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBlLndoZW5Eb2NSZWFkeShmKTsgfSwgNTApOworICB9Cit9OworCisKKy8qKiBTd2l0Y2hlcyBlZGl0b3IgbW9kZSBiZXR3ZWVuIHd5c2l3eWcgYW5kIHRleHQgKEhUTUwpCisgKiBAcGFyYW0ge1N0cmluZ30gbW9kZSBvcHRpb25hbCAidGV4dG1vZGUiIG9yICJ3eXNpd3lnIiwgaWYgb21pdHRlZCwgdG9nZ2xlcyBiZXR3ZWVuIG1vZGVzLgorICovCitYaW5oYS5wcm90b3R5cGUuc2V0TW9kZSA9IGZ1bmN0aW9uKG1vZGUpCit7CisgIHZhciBodG1sOworICBpZiAoIHR5cGVvZiBtb2RlID09ICJ1bmRlZmluZWQiICkKKyAgeworICAgIG1vZGUgPSB0aGlzLl9lZGl0TW9kZSA9PSAidGV4dG1vZGUiID8gInd5c2l3eWciIDogInRleHRtb2RlIjsKKyAgfQorICBzd2l0Y2ggKCBtb2RlICkKKyAgeworICAgIGNhc2UgInRleHRtb2RlIjoKKyAgICAgIHRoaXMuZmlyZVBsdWdpbkV2ZW50KCdvbkJlZm9yZU1vZGUnLCAndGV4dG1vZGUnKTsKKyAgICAgIHRoaXMuX3Rvb2xiYXJPYmplY3RzLmh0bWxtb2RlLnN3YXBJbWFnZSh0aGlzLmNvbmZpZy5pY29uTGlzdC53eXNpd3lnbW9kZSk7IAorICAgICAgdGhpcy5zZXRDQygiaWZyYW1lIik7CisgICAgICBodG1sID0gdGhpcy5vdXR3YXJkSHRtbCh0aGlzLmdldEhUTUwoKSk7CisgICAgICB0aGlzLnNldEhUTUwoaHRtbCk7CisKKyAgICAgIC8vIEhpZGUgdGhlIGlmcmFtZQorICAgICAgdGhpcy5kZWFjdGl2YXRlRWRpdG9yKCk7CisgICAgICB0aGlzLl9pZnJhbWUuc3R5bGUuZGlzcGxheSAgID0gJ25vbmUnOworICAgICAgdGhpcy5fdGV4dEFyZWEuc3R5bGUuZGlzcGxheSA9ICcnOworCisgICAgICBpZiAoIHRoaXMuY29uZmlnLnN0YXR1c0JhciApCisgICAgICB7CisgICAgICAgIHRoaXMuX3N0YXR1c0JhclRyZWUuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICAgICAgdGhpcy5fc3RhdHVzQmFyVGV4dE1vZGUuc3R5bGUuZGlzcGxheSA9ICIiOworICAgICAgfQorCisgICAgICB0aGlzLm5vdGlmeU9mKCdtb2RlY2hhbmdlJywgeydtb2RlJzondGV4dCd9KTsKKyAgICAgIHRoaXMuZmlyZVBsdWdpbkV2ZW50KCdvbk1vZGUnLCAndGV4dG1vZGUnKTsKKyAgICAgIHRoaXMuZmluZENDKCJ0ZXh0YXJlYSIpOworICAgIGJyZWFrOworCisgICAgY2FzZSAid3lzaXd5ZyI6CisgICAgICB0aGlzLmZpcmVQbHVnaW5FdmVudCgnb25CZWZvcmVNb2RlJywgJ3d5c2l3eWcnKTsKKyAgICAgIHRoaXMuX3Rvb2xiYXJPYmplY3RzLmh0bWxtb2RlLnN3YXBJbWFnZShbdGhpcy5pbWdVUkwoJ2ltYWdlcy9lZF9idXR0b25zX21haW4ucG5nJyksNywwXSk7IAorICAgICAgdGhpcy5zZXRDQygidGV4dGFyZWEiKTsKKyAgICAgIGh0bWwgPSB0aGlzLmlud2FyZEh0bWwodGhpcy5nZXRIVE1MKCkpOworICAgICAgdGhpcy5kZWFjdGl2YXRlRWRpdG9yKCk7CisgICAgICB0aGlzLnNldEhUTUwoaHRtbCk7CisgICAgICB0aGlzLl9pZnJhbWUuc3R5bGUuZGlzcGxheSAgID0gJyc7CisgICAgICB0aGlzLl90ZXh0QXJlYS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgICAgdGhpcy5hY3RpdmF0ZUVkaXRvcigpOworICAgICAgaWYgKCB0aGlzLmNvbmZpZy5zdGF0dXNCYXIgKQorICAgICAgeworICAgICAgICB0aGlzLl9zdGF0dXNCYXJUcmVlLnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICAgICAgdGhpcy5fc3RhdHVzQmFyVGV4dE1vZGUuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICAgIH0KKyAgICAgIAorICAgICAgdGhpcy5ub3RpZnlPZignbW9kZWNoYW5nZScsIHsnbW9kZSc6J3d5c2l3eWcnfSk7CisgICAgICB0aGlzLmZpcmVQbHVnaW5FdmVudCgnb25Nb2RlJywgJ3d5c2l3eWcnKTsKKyAgICAgIHRoaXMuZmluZENDKCJpZnJhbWUiKTsKKyAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBhbGVydCgiTW9kZSA8IiArIG1vZGUgKyAiPiBub3QgZGVmaW5lZCEiKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgfQorICB0aGlzLl9lZGl0TW9kZSA9IG1vZGU7Cit9OworLyoqIFNldHMgdGhlIEhUTUwgaW4gZnVsbHBhZ2UgbW9kZS4gQWN0dWFsbHkgdGhlIHdob2xlIGlmcmFtZSBkb2N1bWVudCBpcyByZXdyaXR0ZW4uCisgKiBAcHJpdmF0ZQorICogQHBhcmFtIHtTdHJpbmd9IGh0bWwKKyAqLworWGluaGEucHJvdG90eXBlLnNldEZ1bGxIVE1MID0gZnVuY3Rpb24oaHRtbCkKK3sKKyAgdmFyIHNhdmVfbXVsdGlsaW5lID0gUmVnRXhwLm11bHRpbGluZTsKKyAgUmVnRXhwLm11bHRpbGluZSA9IHRydWU7CisgIGlmICggaHRtbC5tYXRjaChYaW5oYS5SRV9kb2N0eXBlKSApCisgIHsKKyAgICB0aGlzLnNldERvY3R5cGUoUmVnRXhwLiQxKTsKKyAgIC8vIGh0bWwgPSBodG1sLnJlcGxhY2UoWGluaGEuUkVfZG9jdHlwZSwgIiIpOworICB9CisgIFJlZ0V4cC5tdWx0aWxpbmUgPSBzYXZlX211bHRpbGluZTsKKyAgLy8gZGlzYWJsZWQgdG8gc2F2ZSBib2R5IGF0dHJpYnV0ZXMgc2VlICM0NTkKKyAgaWYgKCAwICkKKyAgeworICAgIGlmICggaHRtbC5tYXRjaChYaW5oYS5SRV9oZWFkKSApCisgICAgeworICAgICAgdGhpcy5fZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uaW5uZXJIVE1MID0gUmVnRXhwLiQxOworICAgIH0KKyAgICBpZiAoIGh0bWwubWF0Y2goWGluaGEuUkVfYm9keSkgKQorICAgIHsKKyAgICAgIHRoaXMuX2RvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLmlubmVySFRNTCA9IFJlZ0V4cC4kMTsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgLy8gRklYTUUgLSBjYW4gd2UgZG8gdGhpcyB3aXRob3V0IHJld3JpdGluZyB0aGUgZW50aXJlIGRvY3VtZW50CisgICAgLy8gIGRvZXMgdGhlIGFib3ZlIG5vdCB3b3JrIGZvciBJRT8KKyAgICB2YXIgcmVhYyA9IHRoaXMuZWRpdG9ySXNBY3RpdmF0ZWQoKTsKKyAgICBpZiAoIHJlYWMgKQorICAgIHsKKyAgICAgIHRoaXMuZGVhY3RpdmF0ZUVkaXRvcigpOworICAgIH0KKyAgICB2YXIgaHRtbF9yZSA9IC88aHRtbD4oKC58XG4pKj8pPFwvaHRtbD4vaTsKKyAgICBodG1sID0gaHRtbC5yZXBsYWNlKGh0bWxfcmUsICIkMSIpOworICAgIHRoaXMuX2RvYy5vcGVuKCJ0ZXh0L2h0bWwiLCJyZXBsYWNlIik7CisgICAgdGhpcy5fZG9jLndyaXRlKGh0bWwpOworICAgIHRoaXMuX2RvYy5jbG9zZSgpOworICAgIGlmICggcmVhYyApCisgICAgeworICAgICAgdGhpcy5hY3RpdmF0ZUVkaXRvcigpOworICAgIH0gICAgICAgIAorICAgIHRoaXMuc2V0RWRpdG9yRXZlbnRzKCk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KK307CisvKiogSW5pdGlhbGl6ZSBzb21lIGV2ZW50IGhhbmRsZXJzCisgKiBAcHJpdmF0ZQorICovCitYaW5oYS5wcm90b3R5cGUuc2V0RWRpdG9yRXZlbnRzID0gZnVuY3Rpb24ocmVzZXR0aW5nX2V2ZW50c19mb3Jfb3BlcmEpCit7CisgIHZhciBlZGl0b3I9dGhpczsKKyAgdmFyIGRvYyA9IHRoaXMuX2RvYzsKKworICBlZGl0b3Iud2hlbkRvY1JlYWR5KAorICAgIGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICBpZighcmVzZXR0aW5nX2V2ZW50c19mb3Jfb3BlcmEpIHsKKyAgICAgIC8vIGlmIHdlIGhhdmUgbXVsdGlwbGUgZWRpdG9ycyBzb21lIGJ1ZyBpbiBNb3ppbGxhIG1ha2VzIHNvbWUgbG9zZSBlZGl0aW5nIGFiaWxpdHkKKyAgICAgIGlmKCFYaW5oYS5pc19pb3MpCisgICAgICB7CisgICAgICBYaW5oYS5fYWRkRXZlbnRzKAorICAgICAgICBkb2MsCisgICAgICAgIFsibW91c2Vkb3duIl0sCisgICAgICAgIGZ1bmN0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgIGVkaXRvci5hY3RpdmF0ZUVkaXRvcigpOworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICApOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeyAgICAgICAgIAorICAgICAgICBYaW5oYS5fYWRkRXZlbnRzKAorICAgICAgICAgIGVkaXRvci5fc3RhdHVzQmFyLAorICAgICAgICAgIFsiY2xpY2siXSwKKyAgICAgICAgICBmdW5jdGlvbigpCisgICAgICAgICAgeyAgICAgICAgICAgCisgICAgICAgICAgICBlZGl0b3IuYWN0aXZhdGVFZGl0b3IoKTsKKyAgICAgICAgICAgIGVkaXRvci5mb2N1c0VkaXRvcigpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgfQorICAgICAgICApOworICAgICAgfQorCisgICAgICBpZiAoWGluaGEuaXNfaWUpCisgICAgICB7IC8vICMxMDE5IEN1c29yIG5vdCBqdW1waW5nIHRvIGVkaXRhYmxlIHBhcnQgb2Ygd2luZG93IHdoZW4gY2xpY2tlZCBpbiBJRSwgc2VlIGFsc28gIzEwMzkKKyAgICAgICAgWGluaGEuX2FkZEV2ZW50KAorICAgICAgICBlZGl0b3IuX2RvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaHRtbCIpWzBdLAorICAgICAgICAiY2xpY2siLAorICAgICAgICAgIGZ1bmN0aW9uKCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoZWRpdG9yLl9pZnJhbWUuY29udGVudFdpbmRvdy5ldmVudC5zcmNFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnaHRtbCcpIC8vIGlmICBjbGlja2VkIGJlbG93IHRoZSB0ZXh0ICg9Ym9keSksIHRoZSB0ZXh0IGN1cnNvciBkb2VzIG5vdCBhcHBlYXIsIHNlZSAjMTAxOQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgdmFyIHIgPSBlZGl0b3IuX2RvYy5ib2R5LmNyZWF0ZVRleHRSYW5nZSgpOworICAgICAgICAgICAgICAgci5jb2xsYXBzZSgpOworICAgICAgICAgICAgICAgci5zZWxlY3QoKTsKKyAgICAgICAgICAgICAgIC8vc2V0VGltZW91dCAoZnVuY3Rpb24gKCkgeyByLmNvbGxhcHNlKCk7ICByLnNlbGVjdCgpO30sMTAwKTsgLy8gd29uJ3QgZG8gd2l0aG91dCB0aW1lb3V0LCBkdW5ubyB3aHkKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgfQorICAgICAgICApOworICAgICAgfQorICAgICAgfQorCisgICAgICAvLyBpbnRlcmNlcHQgc29tZSBldmVudHM7IGZvciB1cGRhdGluZyB0aGUgdG9vbGJhciAmIGtleWJvYXJkIGhhbmRsZXJzCisgICAgICBYaW5oYS5fYWRkRXZlbnRzKAorICAgICAgICBkb2MsCisgICAgICAgIFsia2V5ZG93biIsICJrZXlwcmVzcyIsICJtb3VzZWRvd24iLCAibW91c2V1cCIsICJkcmFnIl0sCisgICAgICAgIGZ1bmN0aW9uIChldmVudCkKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBlZGl0b3IuX2VkaXRvckV2ZW50KFhpbmhhLmlzX2llID8gZWRpdG9yLl9pZnJhbWUuY29udGVudFdpbmRvdy5ldmVudCA6IGV2ZW50KTsKKyAgICAgICAgfQorICAgICAgKTsKKyAgICAgIAorICAgICAgWGluaGEuX2FkZEV2ZW50cygKKyAgICAgICAgZG9jLCAKKyAgICAgICAgWyJkYmxjbGljayJdLAorICAgICAgICBmdW5jdGlvbiAoZXZlbnQpCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gZWRpdG9yLl9vbkRvdWJsZUNsaWNrKFhpbmhhLmlzX2llID8gZWRpdG9yLl9pZnJhbWUuY29udGVudFdpbmRvdy5ldmVudCA6IGV2ZW50KTsKKyAgICAgICAgfQorICAgICAgKTsKKyAgICAgIAorICAgICAgaWYocmVzZXR0aW5nX2V2ZW50c19mb3Jfb3BlcmEpIHJldHVybjsKKworICAgICAgLy8gRklYTUUgLSB0aGlzIG5lZWRzIHRvIGJlIGNsZWFuZWQgdXAgYW5kIHVzZSBlZGl0b3IuZmlyZVBsdWdpbkV2ZW50CisgICAgICAvLyAgSSBkb24ndCBsaWtlIGJvdGggb25HZW5lcmF0ZSBhbmQgb25HZW5lcmF0ZU9uY2UsIHdlIHNob3VsZCBvbmx5CisgICAgICAvLyAgaGF2ZSBvbkdlbmVyYXRlIGFuZCBpdCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgZWRpdG9yIGlzIAorICAgICAgLy8gIGdlbmVyYXRlZCAob25jZSBhbmQgb25seSBvbmNlKQorICAgICAgLy8gY2hlY2sgaWYgYW55IHBsdWdpbnMgaGF2ZSByZWdpc3RlcmVkIHJlZnJlc2ggaGFuZGxlcnMKKyAgICAgIGZvciAoIHZhciBpIGluIGVkaXRvci5wbHVnaW5zICkKKyAgICAgIHsKKyAgICAgICAgdmFyIHBsdWdpbiA9IGVkaXRvci5wbHVnaW5zW2ldLmluc3RhbmNlOworICAgICAgICBYaW5oYS5yZWZyZXNoUGx1Z2luKHBsdWdpbik7CisgICAgICB9CisKKyAgICAgIC8vIHNwZWNpZmljIGVkaXRvciBpbml0aWFsaXphdGlvbgorICAgICAgaWYgKCB0eXBlb2YgZWRpdG9yLl9vbkdlbmVyYXRlID09ICJmdW5jdGlvbiIgKQorICAgICAgeworICAgICAgICBlZGl0b3IuX29uR2VuZXJhdGUoKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYoWGluaGEuaGFzQXR0cmlidXRlKGVkaXRvci5fdGV4dEFyZWEsICdvbnhpbmhhcmVhZHknKSkKKyAgICAgIHsgICAgICAgICAgICAgICAKKyAgICAgICAgKGZ1bmN0aW9uKCkgeyBldmFsKGVkaXRvci5fdGV4dEFyZWEuZ2V0QXR0cmlidXRlKCdvbnhpbmhhcmVhZHknKSkgfSkuY2FsbChlZGl0b3IudGV4dEFyZWEpOworICAgICAgfQorICAgICAgCisgICAgICAvL3RpY2tldCAjMTQwNyBJRTggZmlyZXMgdHdvIHJlc2l6ZSBldmVudHMgb24gb25lIGFjdHVhbCByZXNpemUsIHNlZW1pbmdseSBjYXVzaW5nIGFuIGluZmluaXRlIGxvb3AgKGJ1dCBub3QgIHdoZW4gWGluaGEgaXMgaW4gYW4gZnJhbWUvaWZyYW1lKSAKKyAgICAgIFhpbmhhLmFkZERvbTBFdmVudCh3aW5kb3csICdyZXNpemUnLCBmdW5jdGlvbihlKSAKKyAgICAgIHsKKyAgICAgICAgaWYgKFhpbmhhLmllX3ZlcnNpb24gPiA3ICYmICF3aW5kb3cucGFyZW50KQorICAgICAgICB7CisgICAgICAgICAgaWYgKGVkaXRvci5leGVjUmVzaXplKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGVkaXRvci5zaXplRWRpdG9yKCk7IAorICAgICAgICAgICAgZWRpdG9yLmV4ZWNSZXNpemUgPSBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGVkaXRvci5leGVjUmVzaXplID0gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgZWRpdG9yLnNpemVFZGl0b3IoKTsgCisgICAgICAgIH0KKyAgICAgIH0pOyAgICAgIAorICAgICAgCisgICAgICAKKyAgICAgIGlmKHR5cGVvZiBlZGl0b3IuY29uZmlnLnJlc2l6YWJsZUVkaXRvciAhPSAndW5kZWZpbmVkJyAmJiBlZGl0b3IuY29uZmlnLnJlc2l6YWJsZUVkaXRvcikKKyAgICAgIHsKKyAgICAgICAgZWRpdG9yLl9pZnJhbWUuc3R5bGUucmVzaXplID0gJ2JvdGgnOworICAgICAgICB2YXIgbGFzdFJlc2l6ZSAgICA9IFswLDBdOworICAgICAgICBYaW5oYS5fYWRkRXZlbnQoZWRpdG9yLl9pZnJhbWUuY29udGVudFdpbmRvdywgJ3Jlc2l6ZScsIGZ1bmN0aW9uKCl7CisgICAgICAgICAgaWYobGFzdFJlc2l6ZVswXSA9PSBlZGl0b3IuX2lmcmFtZS5zdHlsZS53aWR0aCAmJiBsYXN0UmVzaXplWzFdID09IGVkaXRvci5faWZyYW1lLnN0eWxlLmhlaWdodCkKKyAgICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAgICAgIAorICAgICAgICAgIGxhc3RSZXNpemUgPSBbIGVkaXRvci5faWZyYW1lLnN0eWxlLndpZHRoLCBlZGl0b3IuX2lmcmFtZS5zdHlsZS5oZWlnaHQgXTsgICAgICAgICAgCisgICAgICAgICAgZWRpdG9yLnNpemVFZGl0b3IoZWRpdG9yLl9pZnJhbWUuc3R5bGUud2lkdGgsIGVkaXRvci5faWZyYW1lLnN0eWxlLmhlaWdodCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgfSk7CisgICAgICB9CisgICAgICAKKyAgICAKKyAgICAgIGVkaXRvci5yZW1vdmVMb2FkaW5nTWVzc2FnZSgpOworICAgIH0KKyAgKTsKK307CisgIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIENhdGVnb3J5OiBQTFVHSU5TCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIFBsdWdpbnMgbWF5IGVpdGhlciByZXNpZGUgaW4gdGhlIGdvbGJhbCBzY29wZSAobm90IHJlY29tbWVuZGVkKSBvciBpbiBYaW5oYS5wbHVnaW5zLiAKKyAqICBUaGlzIGZ1bmN0aW9uIGxvb2tzIGluIGJvdGggbG9jYXRpb25zIGFuZCBpcyB1c2VkIHRvIGNoZWNrIHRoZSBsb2FkaW5nIHN0YXR1cyBhbmQgZmluYWxseSByZXRyaWV2ZSB0aGUgcGx1Z2luJ3MgY29uc3RydWN0b3IKKyAqIEBwcml2YXRlCisgKiBAdHlwZSB7RnVuY3Rpb258dW5kZWZpbmVkfQorICogQHBhcmFtIHtTdHJpbmd9IHBsdWdpbk5hbWUKKyAqLworWGluaGEuZ2V0UGx1Z2luQ29uc3RydWN0b3IgPSBmdW5jdGlvbihwbHVnaW5OYW1lKQoreworICByZXR1cm4gWGluaGEucGx1Z2luc1twbHVnaW5OYW1lXSB8fCB3aW5kb3dbcGx1Z2luTmFtZV07Cit9OworCisvKiogQ3JlYXRlIHRoZSBzcGVjaWZpZWQgcGx1Z2luIGFuZCByZWdpc3RlciBpdCB3aXRoIHRoaXMgWGluaGEKKyAqICByZXR1cm4gdGhlIHBsdWdpbiBjcmVhdGVkIHRvIGFsbG93IHJlZnJlc2ggd2hlbiBuZWNlc3NhcnkuPGJyIC8+CisgKiAgPHN0cm9uZz5UaGlzIGlzIG9ubHkgdXNlZnVsIGlmIFhpbmhhIGlzIGdlbmVyYXRlZCB3aXRob3V0IHVzaW5nIFhpbmhhLm1ha2VFZGl0b3JzKCk8L3N0cm9uZz4KKyAqLworWGluaGEucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24oKQoreworICBpZiAoIVhpbmhhLmlzU3VwcG9ydGVkQnJvd3NlcikKKyAgeworICAgIHJldHVybjsKKyAgfQorICB2YXIgcGx1Z2luID0gYXJndW1lbnRzWzBdOworCisgIC8vIFdlIGNhbiBvbmx5IHJlZ2lzdGVyIHBsdWdpbnMgdGhhdCBoYXZlIGJlZW4gc3VjY2VzZnVsbHkgbG9hZGVkCisgIGlmICggcGx1Z2luID09PSBudWxsIHx8IHR5cGVvZiBwbHVnaW4gPT0gJ3VuZGVmaW5lZCcgfHwgKHR5cGVvZiBwbHVnaW4gPT0gJ3N0cmluZycgJiYgWGluaGEuZ2V0UGx1Z2luQ29uc3RydWN0b3IocGx1Z2luKSA9PSAndW5kZWZpbmVkJykgKQorICB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHZhciBhcmdzID0gW107CisgIGZvciAoIHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSApCisgIHsKKyAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTsKKyAgfQorICByZXR1cm4gdGhpcy5yZWdpc3RlclBsdWdpbjIocGx1Z2luLCBhcmdzKTsKK307CisvKiogVGhpcyBpcyB0aGUgdmFyaWFudCBvZiB0aGUgZnVuY3Rpb24gYWJvdmUgd2hlcmUgdGhlIHBsdWdpbiBhcmd1bWVudHMgYXJlCisgKiBhbHJlYWR5IHBhY2tlZCBpbiBhbiBhcnJheS4gIEV4dGVybmFsbHksIGl0IHNob3VsZCBiZSBvbmx5IHVzZWQgaW4gdGhlCisgKiBmdWxsLXNjcmVlbiBlZGl0b3IgY29kZSwgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSBwbHVnaW5zIHdpdGggdGhlIHNhbWUKKyAqIHBhcmFtZXRlcnMgYXMgaW4gdGhlIG9wZW5lciB3aW5kb3cuCisgKiBAcHJpdmF0ZQorICovCitYaW5oYS5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4yID0gZnVuY3Rpb24ocGx1Z2luLCBhcmdzKQoreworICBpZiAoIHR5cGVvZiBwbHVnaW4gPT0gInN0cmluZyIgJiYgdHlwZW9mIFhpbmhhLmdldFBsdWdpbkNvbnN0cnVjdG9yKHBsdWdpbikgPT0gJ2Z1bmN0aW9uJyApCisgIHsKKyAgICB2YXIgcGx1Z2luTmFtZSA9IHBsdWdpbjsKKyAgICBwbHVnaW4gPSBYaW5oYS5nZXRQbHVnaW5Db25zdHJ1Y3RvcihwbHVnaW4pOworICB9CisgIGlmICggdHlwZW9mIHBsdWdpbiA9PSAidW5kZWZpbmVkIiApCisgIHsKKyAgICAvKiBGSVhNRTogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiBCdXQgd2h5IGRvZXMgaXQgZG8/ICovCisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGlmICghcGx1Z2luLl9wbHVnaW5JbmZvKSAKKyAgeworICAgIHBsdWdpbi5fcGx1Z2luSW5mbyA9IAorICAgIHsKKyAgICAgIG5hbWU6IHBsdWdpbk5hbWUKKyAgICB9OworICB9CisgIHZhciBvYmo7CisgIGlmICggKHR5cGVvZiBwbHVnaW4gPT0gJ2Z1bmN0aW9uJykgJiYgKG9iaiA9IG5ldyBwbHVnaW4odGhpcywgYXJncykpICkKKyAgeworICAgIHZhciBjbG9uZSA9IHt9OworICAgIHZhciBpbmZvID0gcGx1Z2luLl9wbHVnaW5JbmZvOworICAgIGZvciAoIHZhciBpIGluIGluZm8gKQorICAgIHsKKyAgICAgIGNsb25lW2ldID0gaW5mb1tpXTsKKyAgICB9CisgICAgY2xvbmUuaW5zdGFuY2UgPSBvYmo7CisgICAgY2xvbmUuYXJncyA9IGFyZ3M7CisgICAgdGhpcy5wbHVnaW5zW3BsdWdpbi5fcGx1Z2luSW5mby5uYW1lXSA9IGNsb25lOworICAgIHJldHVybiBvYmo7CisgIH0KKyAgZWxzZQorICB7CisgICAgWGluaGEuZGVidWdNc2coIkNhbid0IHJlZ2lzdGVyIHBsdWdpbiAiICsgcGx1Z2luLnRvU3RyaW5nKCkgKyAiLiIsICd3YXJuJyk7CisgIH0KK307CisKKworLyoqIER5bmFtaWNhbGx5IHJldHVybnMgdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIHRoZSBwbHVnaW5zIGFyZSBsb2FkZWQ8YnIgLz4KKyAqICBUaGlzIGNvdWxkIGJlIG92ZXJyaWRkZW4gdG8gY2hhbmdlIHRoZSBkaXI8YnIgLz4KKyAqICBAVE9ETzogV291bGRuJ3QgdGhpcyBiZSBiZXR0ZXIgYXMgYSBjb25maWcgb3B0aW9uPworICogQHByaXZhdGUKKyAqIEBwYXJhbSB7U3RyaW5nfSBwbHVnaW5OYW1lCisgKiBAcGFyYW0ge0Jvb2xlYW59IHJldHVybiB0aGUgZGlyZWN0b3J5IGZvciBhbiB1bnN1cHBvcnRlZCBwbHVnaW4KKyAqIEByZXR1cm5zIHtTdHJpbmd9IHBhdGggdG8gcGx1Z2luCisgKi8KK1hpbmhhLmdldFBsdWdpbkRpciA9IGZ1bmN0aW9uKHBsdWdpbiwgZm9yY2VVbnN1cHBvcnRlZCkKK3sKKyAgaWYgKFhpbmhhLmV4dGVybmFsUGx1Z2luc1twbHVnaW5dKQorICB7CisgICAgcmV0dXJuIFhpbmhhLmV4dGVybmFsUGx1Z2luc1twbHVnaW5dWzBdOworICB9CisgIAorICAvLyBUaGlzIGlzIHVlZCBieSBtdWx0aVN0YWdlTG9hZGVyIHdoZW4gaXQncyB0cnlpbmcgdG8gZmluZCBhIHBsdWdpbgorICAvLyBhZnRlciBpdCdzIHRyaWVkIHRoZSBub3JtYWwgZGlyZWN0b3J5LCBzbyBhcyBsb25nIGFzIGl0J3MgaW4gdGhlIHBsdWdpbk1hbmlmZXN0CisgIC8vIHRoZW4gdGhpcyBzaG91bGRuJ3QgYmUgaGl0LCBidXQganVzdCBpbmNhc2Ugd2Ugd2lsbCByZXNwZWN0IHRoaXMgcmVxdWVzdAorICBpZiAoZm9yY2VVbnN1cHBvcnRlZCkKKyAgeworICAgIHJldHVybiBfZWRpdG9yX3VybCArICJ1bnN1cHBvcnRlZF9wbHVnaW5zLyIgKyBwbHVnaW4gOworICB9CisgIAorICAvLyBKdXN0IGluIGNhc2Ugd2UgZnVkZ2UgdGhlIHBsdWdpbk1hbmlmZXN0IGZvciBhIGdpdmVuIHBsdWdpbgorICAvLyBwdWxsIHRoZSBkaXJlY3RvcnkgZnJvbSB0aGVyZQorICBpZih0eXBlb2YgWGluaGEucGx1Z2luTWFuaWZlc3RbcGx1Z2luXSAhPSAndW5kZWZpbmVkJykKKyAgeworICAgIHJldHVybiBYaW5oYS5wbHVnaW5NYW5pZmVzdFtwbHVnaW5dLnVybC5yZXBsYWNlKC9cL1thLXpBLVowLTlfLV0rXC5qcyQvLCAnJyk7CisgIH0KKyAgCisgIGlmIChmb3JjZVVuc3VwcG9ydGVkIHx8CisgICAgICAvLyBJZiB0aGUgcGx1Z2luIGlzIGZ1bGx5IGxvYWRlZCwgaXQncyBzdXBwb3J0ZWQgc3RhdHVzIGlzIGFscmVhZHkgc2V0LgorICAgICAgKFhpbmhhLmdldFBsdWdpbkNvbnN0cnVjdG9yKHBsdWdpbikgJiYgKHR5cGVvZiBYaW5oYS5nZXRQbHVnaW5Db25zdHJ1Y3RvcihwbHVnaW4pLnN1cHBvcnRlZCAhPSAndW5kZWZpbmVkJykgJiYgIVhpbmhhLmdldFBsdWdpbkNvbnN0cnVjdG9yKHBsdWdpbikuc3VwcG9ydGVkKSkKKyAgeworICAgIHJldHVybiBfZWRpdG9yX3VybCArICJ1bnN1cHBvcnRlZF9wbHVnaW5zLyIgKyBwbHVnaW4gOworICB9CisgIHJldHVybiBfZWRpdG9yX3VybCArICJwbHVnaW5zLyIgKyBwbHVnaW4gOworfTsKKy8qKiBTdGF0aWMgZnVuY3Rpb24gdGhhdCBsb2FkcyB0aGUgZ2l2ZW4gcGx1Z2luCisgKiBAcGFyYW0ge1N0cmluZ30gcGx1Z2luTmFtZQorICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gZmlsZSBpcyBsb2FkZWQKKyAqIEBwYXJhbSB7U3RyaW5nfSBwbHVnaW5fZmlsZSBVUkwgb2YgdGhlIGZpbGUgdG8gbG9hZAorICogQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgcGx1Z2luIGxvYWRlZCwgZmFsc2Ugb3RoZXJ3aXNlCisgKi8KK1hpbmhhLmxvYWRQbHVnaW4gPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBjYWxsYmFjaywgdXJsKQoreworICBpZiAoIVhpbmhhLmlzU3VwcG9ydGVkQnJvd3NlcikgCisgIHsKKyAgICByZXR1cm47CisgIH0KKyAgWGluaGEuc2V0TG9hZGluZ01lc3NhZ2UgKFhpbmhhLl9sYygiTG9hZGluZyBwbHVnaW4gJHBsdWdpbiIsICdYaW5oYScsIHtwbHVnaW46IHBsdWdpbk5hbWV9KSk7CisKKyAgLy8gTWlnaHQgYWxyZWFkeSBiZSBsb2FkZWQKKyAgaWYgKCB0eXBlb2YgWGluaGEuZ2V0UGx1Z2luQ29uc3RydWN0b3IocGx1Z2luTmFtZSkgIT0gJ3VuZGVmaW5lZCcgKQorICB7CisgICAgaWYgKCBjYWxsYmFjayApCisgICAgeworICAgICAgY2FsbGJhY2socGx1Z2luTmFtZSk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9CisgIFhpbmhhLl9wbHVnaW5Mb2FkU3RhdHVzW3BsdWdpbk5hbWVdID0gJ2xvYWRpbmcnOworCisgIC8qKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdHJ5IHRvIGxvYWQgYSBwbHVnaW4gaW4gbXVsdGlwbGUgcGFzc2VzLiAgSXQgdHJpZXMgdG8KKyAgICogbG9hZCB0aGUgcGx1Z2luIGZyb20gZWl0aGVyIHRoZSBwbHVnaW4gb3IgdW5zdXBwb3J0ZWQgZGlyZWN0b3J5LCB1c2luZworICAgKiBib3RoIG5hbWluZyBzY2hlbWVzIGluIHRoaXMgb3JkZXI6CisgICAqIDEuIC9wbHVnaW5zIC0+IEN1cnJlbnROYW1pbmdTY2hlbWUKKyAgICogMi4gL3BsdWdpbnMgLT4gb2xkLW5hbWluZy1zY2hlbWUKKyAgICogMy4gL3Vuc3VwcG9ydGVkIC0+IEN1cnJlbnROYW1pbmdTY2hlbWUKKyAgICogNC4gL3Vuc3VwcG9ydGVkIC0+IG9sZC1uYW1pbmctc2NoZW1lCisgICAqLworICBmdW5jdGlvbiBtdWx0aVN0YWdlTG9hZGVyKHN0YWdlLHBsdWdpbk5hbWUpCisgIHsKKyAgICB2YXIgbmV4dHN0YWdlLCBkaXIsIGZpbGUsIHN1Y2Nlc3NfbWVzc2FnZTsKKyAgICBzd2l0Y2ggKHN0YWdlKQorICAgIHsKKyAgICAgIGNhc2UgJ3N0YXJ0JzoKKyAgICAgICAgbmV4dHN0YWdlID0gJ29sZF9uYW1pbmcnOworICAgICAgICBkaXIgPSBYaW5oYS5nZXRQbHVnaW5EaXIocGx1Z2luTmFtZSk7CisgICAgICAgIGZpbGUgPSBwbHVnaW5OYW1lICsgIi5qcyI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnb2xkX25hbWluZyc6CisgICAgICAgIG5leHRzdGFnZSA9ICd1bnN1cHBvcnRlZCc7CisgICAgICAgIGRpciA9IFhpbmhhLmdldFBsdWdpbkRpcihwbHVnaW5OYW1lKTsKKyAgICAgICAgZmlsZSA9IHBsdWdpbk5hbWUucmVwbGFjZSgvKFthLXpdKShbQS1aXSkoW2Etel0pL2csIGZ1bmN0aW9uIChzdHIsIGwxLCBsMiwgbDMpIHsgcmV0dXJuIGwxICsgIi0iICsgbDIudG9Mb3dlckNhc2UoKSArIGwzOyB9KS50b0xvd2VyQ2FzZSgpICsgIi5qcyI7CisgICAgICAgIHN1Y2Nlc3NfbWVzc2FnZSA9ICdZb3UgYXJlIHVzaW5nIGFuIG9ic29sZXRlIG5hbWluZyBzY2hlbWUgZm9yIHRoZSBYaW5oYSBwbHVnaW4gJytwbHVnaW5OYW1lKycuIFBsZWFzZSByZW5hbWUgJytmaWxlKycgdG8gJytwbHVnaW5OYW1lKycuanMnOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ3Vuc3VwcG9ydGVkJzoKKyAgICAgICAgbmV4dHN0YWdlID0gJ3Vuc3VwcG9ydGVkX29sZF9uYW1lJzsKKyAgICAgICAgZGlyID0gWGluaGEuZ2V0UGx1Z2luRGlyKHBsdWdpbk5hbWUsIHRydWUpOworICAgICAgICBmaWxlID0gcGx1Z2luTmFtZSArICIuanMiOworICAgICAgICBzdWNjZXNzX21lc3NhZ2UgPSAnWW91IGFyZSB1c2luZyB0aGUgdW5zdXBwb3J0ZWQgWGluaGEgcGx1Z2luICcrcGx1Z2luTmFtZSsnLiBJZiB5b3Ugd2lzaCBjb250aW51ZWQgc3VwcG9ydCwgcGxlYXNlIHNlZSBodHRwOi8vdHJhYy54aW5oYS5vcmcvd2lraS9Eb2N1bWVudGF0aW9uL1Vuc3VwcG9ydGVkUGx1Z2lucyc7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAndW5zdXBwb3J0ZWRfb2xkX25hbWUnOgorICAgICAgICBuZXh0c3RhZ2UgPSAnJzsKKyAgICAgICAgZGlyID0gWGluaGEuZ2V0UGx1Z2luRGlyKHBsdWdpbk5hbWUsIHRydWUpOworICAgICAgICBmaWxlID0gcGx1Z2luTmFtZS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKShbYS16XSkvZywgZnVuY3Rpb24gKHN0ciwgbDEsIGwyLCBsMykgeyByZXR1cm4gbDEgKyAiLSIgKyBsMi50b0xvd2VyQ2FzZSgpICsgbDM7IH0pLnRvTG93ZXJDYXNlKCkgKyAiLmpzIjsKKyAgICAgICAgc3VjY2Vzc19tZXNzYWdlID0gJ1lvdSBhcmUgdXNpbmcgdGhlIHVuc3VwcG9ydGVkIFhpbmhhIHBsdWdpbiAnK3BsdWdpbk5hbWUrJy4gSWYgeW91IHdpc2ggY29udGludWVkIHN1cHBvcnQsIHBsZWFzZSBzZWUgaHR0cDovL3RyYWMueGluaGEub3JnL3dpa2kvRG9jdW1lbnRhdGlvbi9VbnN1cHBvcnRlZFBsdWdpbnMnOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFhpbmhhLl9wbHVnaW5Mb2FkU3RhdHVzW3BsdWdpbk5hbWVdID0gJ2ZhaWxlZCc7CisgICAgICAgIFhpbmhhLmRlYnVnTXNnKCdYaW5oYSB3YXMgbm90IGFibGUgdG8gZmluZCB0aGUgcGx1Z2luICcrcGx1Z2luTmFtZSsnLiBQbGVhc2UgbWFrZSBzdXJlIHRoZSBwbHVnaW4gZXhpc3RzLicsICd3YXJuJyk7CisgICAgICAgIFhpbmhhLmRlYnVnTXNnKCdJZiAnK3BsdWdpbk5hbWUrJyBpcyBsb2NhdGVkIGluIHVuc3VwcG9ydGVkX3BsdWdpbnMgeW91IHNob3VsZCBhbHNvIGNoZWNrIHVuc3VwcG9ydGVkX3BsdWdpbnMvLmh0YWNjZXNzIGZvciBwb3NzaWJsZSBhY2Nlc3MgcmVzdHJpY3Rpb25zLicsICd3YXJuJyk7CisgICAgICAgIAorICAgICAgICByZXR1cm47CisgICAgfQorICAgIHZhciB1cmwgPSBkaXIgKyAiLyIgKyBmaWxlOworCisgICAgLy8gVGhpcyBpcyBhIGNhbGxiYWNrIHdyYXBwZXIgdGhhdCBhbGxvd3MgdXMgdG8gc2V0IHRoZSBwbHVnaW4ncyBzdGF0dXMKKyAgICAvLyBvbmNlIGl0IGxvYWRzLgorICAgIGZ1bmN0aW9uIHN0YXR1c0NhbGxiYWNrKHBsdWdpbk5hbWUpCisgICAgeworICAgICAgWGluaGEuZ2V0UGx1Z2luQ29uc3RydWN0b3IocGx1Z2luTmFtZSkuc3VwcG9ydGVkID0gc3RhZ2UuaW5kZXhPZigndW5zdXBwb3J0ZWQnKSAhPT0gMDsKKyAgICAgIGNhbGxiYWNrKHBsdWdpbk5hbWUpOworICAgIH0KKworICAgIC8vIFRvIHNwZWVkIHRoaW5ncyB1cCwgd2Ugc3RhcnQgbG9hZGluZyB0aGUgc2NyaXB0IGZpbGUgYmVmb3JlIHBpbmdpbmcgaXQuCisgICAgLy8gSWYgdGhlIGxvYWQgZmFpbHMsIHdlJ2xsIGp1c3QgY2xlYW4gdXAgYWZ0ZXJ3YXJkcy4KKyAgICBYaW5oYS5fbG9hZGJhY2sodXJsLCBzdGF0dXNDYWxsYmFjaywgdGhpcywgcGx1Z2luTmFtZSk7IAorCisgICAgWGluaGEucGluZyh1cmwsCisgICAgICAgICAgICAgICAvLyBPbiBzdWNjZXNzLCB3ZSdsbCBkaXNwbGF5IGEgc3VjY2VzcyBtZXNzYWdlIGlmIHRoZXJlIGlzIG9uZS4KKyAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3NfbWVzc2FnZSkgCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICBYaW5oYS5kZWJ1Z01zZyhzdWNjZXNzX21lc3NhZ2UpOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgLy8gT24gZmFpbHVyZSwgd2UnbGwgY2xlYW4gdXAgdGhlIGZhaWxlZCBsb2FkIGFuZCB0cnkgdGhlIG5leHQgc3RhZ2UKKyAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgWGluaGEucmVtb3ZlRnJvbVBhcmVudChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh1cmwpKTsKKyAgICAgICAgICAgICAgICAgbXVsdGlTdGFnZUxvYWRlcihuZXh0c3RhZ2UsIHBsdWdpbk5hbWUpOworICAgICAgICAgICAgICAgfSk7CisgIH0KKyAgCisgIGlmKCF1cmwpCisgIHsKKyAgICBpZiAoWGluaGEuZXh0ZXJuYWxQbHVnaW5zW3BsdWdpbk5hbWVdKQorICAgIHsKKyAgICAgIFhpbmhhLl9sb2FkYmFjayhYaW5oYS5leHRlcm5hbFBsdWdpbnNbcGx1Z2luTmFtZV1bMF0rWGluaGEuZXh0ZXJuYWxQbHVnaW5zW3BsdWdpbk5hbWVdWzFdLCBjYWxsYmFjaywgdGhpcywgcGx1Z2luTmFtZSk7CisgICAgfQorICAgIGVsc2UgaWYoWGluaGEucGx1Z2luTWFuaWZlc3RbcGx1Z2luTmFtZV0pCisgICAgeworICAgICAgWGluaGEuX2xvYWRiYWNrKFhpbmhhLnBsdWdpbk1hbmlmZXN0W3BsdWdpbk5hbWVdLnVybCwgY2FsbGJhY2ssIHRoaXMsIHBsdWdpbk5hbWUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgdmFyIGVkaXRvciA9IHRoaXM7CisgICAgICBtdWx0aVN0YWdlTG9hZGVyKCdzdGFydCcscGx1Z2luTmFtZSk7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIFhpbmhhLl9sb2FkYmFjayh1cmwsIGNhbGxiYWNrLCB0aGlzLCBwbHVnaW5OYW1lKTsKKyAgfQorICAKKyAgcmV0dXJuIGZhbHNlOworfTsKKy8qKiBTdG9yZXMgYSBzdGF0dXMgZm9yIGVhY2ggbG9hZGluZyBwbHVnaW4gdGhhdCBtYXkgYmUgb25lIG9mICJsb2FkaW5nIiwicmVhZHkiLCBvciAiZmFpbGVkIgorICogQHByaXZhdGUKKyAqIEB0eXBlIHtPYmplY3R9IAorICovCitYaW5oYS5fcGx1Z2luTG9hZFN0YXR1cyA9IHt9OworLyoqIFN0b3JlcyB0aGUgcGF0aHMgdG8gcGx1Z2lucyB0aGF0IGFyZSBub3QgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24KKyAqIEBwcml2YXRlCisgKiBAdHlwZSB7T2JqZWN0fQorICovCitYaW5oYS5leHRlcm5hbFBsdWdpbnMgPSB7fTsKKy8qKiBUaGUgbmFtZXNwYWNlIGZvciBwbHVnaW5zCisgKiBAcHJpdmF0ZQorICogQHR5cGUge09iamVjdH0KKyAqLworWGluaGEucGx1Z2lucyA9IHt9OworCisvKiogU3RhdGljIGZ1bmN0aW9uIHRoYXQgbG9hZHMgdGhlIHBsdWdpbnMgKHNlZSB4aW5oYV9wbHVnaW5zIGluIE5ld2JpZUd1aWRlKQorICogQHBhcmFtIHtBcnJheX0gcGx1Z2lucworICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tJZk5vdFJlYWR5IGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHJlcGVhdGVkbHkgdW50aWwgYWxsIGZpbGVzIGFyZQorICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbmFsIHVybCBVUkwgb2YgdGhlIHBsdWdpbiBmaWxlOyBvYnZpb3VzbHkgcGx1Z2lucyBzaG91bGQgY29udGFpbiBvbmx5IG9uZSBpdGVtIGlmIHVybCBpcyBnaXZlbgorICogQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgYWxsIHBsdWdpbnMgYXJlIGxvYWRlZCwgZmFsc2Ugb3RoZXJ3aXNlCisgKi8KK1hpbmhhLmxvYWRQbHVnaW5zID0gZnVuY3Rpb24ocGx1Z2lucywgY2FsbGJhY2tJZk5vdFJlYWR5LHVybCkKK3sKKyAgaWYgKCFYaW5oYS5pc1N1cHBvcnRlZEJyb3dzZXIpIAorICB7CisgICAgcmV0dXJuOworICB9CisgIC8vWGluaGEuc2V0TG9hZGluZ01lc3NhZ2UgKFhpbmhhLl9sYygiTG9hZGluZyBwbHVnaW5zIikpOworICB2YXIgbSxpOworICBmb3IgKGk9MDtpPHBsdWdpbnMubGVuZ3RoO2krKykKKyAgeworICAgIGlmICh0eXBlb2YgcGx1Z2luc1tpXSA9PSAnb2JqZWN0JykKKyAgICB7CisgICAgICBtID0gcGx1Z2luc1tpXS51cmwubWF0Y2goLyguKikoXC9bXlwvXSopJC8pOworICAgICAgWGluaGEuZXh0ZXJuYWxQbHVnaW5zW3BsdWdpbnNbaV0ucGx1Z2luXSA9IFttWzFdLG1bMl1dOworICAgICAgcGx1Z2luc1tpXSA9IHBsdWdpbnNbaV0ucGx1Z2luOworICAgIH0KKyAgfQorICAKKyAgLy8gUmlwIHRoZSBvbmVzIHRoYXQgYXJlIGxvYWRlZCBhbmQgbG9vayBmb3Igb25lcyB0aGF0IGhhdmUgZmFpbGVkCisgIHZhciByZXRWYWwgPSB0cnVlOworICB2YXIgbnVQbHVnaW5zID0gWGluaGEuY2xvbmVPYmplY3QocGx1Z2lucyk7CisgIGZvciAoaT0wO2k8bnVQbHVnaW5zLmxlbmd0aDtpKysgKQorICB7CisgICAgdmFyIHAgPSBudVBsdWdpbnNbaV07CisgICAgCisgICAgaWYgKHAgPT0gJ0Z1bGxTY3JlZW4nICYmICFYaW5oYS5leHRlcm5hbFBsdWdpbnMuRnVsbFNjcmVlbikKKyAgICB7CisgICAgICBjb250aW51ZTsgLy9wcmV2ZW50IHRyeWluZyB0byBsb2FkIEZ1bGxTY3JlZW4gcGx1Z2luIGZyb20gdGhlIHBsdWdpbnMgZm9sZGVyCisgICAgfSAKKyAgIAorICAgIGlmICggdHlwZW9mIFhpbmhhLl9wbHVnaW5Mb2FkU3RhdHVzW3BdID09ICd1bmRlZmluZWQnKQorICAgIHsKKyAgICAgIC8vIExvYWQgaXQKKyAgICAgIFhpbmhhLmxvYWRQbHVnaW4ocCwKKyAgICAgICAgZnVuY3Rpb24ocGx1Z2luKQorICAgICAgICB7CisgICAgICAgICAgWGluaGEuc2V0TG9hZGluZ01lc3NhZ2UgKFhpbmhhLl9sYygiRmluaXNoaW5nIikpOworCisgICAgICAgICAgaWYgKCB0eXBlb2YgWGluaGEuZ2V0UGx1Z2luQ29uc3RydWN0b3IocGx1Z2luKSAhPSAndW5kZWZpbmVkJyApCisgICAgICAgICAgeworICAgICAgICAgICAgWGluaGEuX3BsdWdpbkxvYWRTdGF0dXNbcGx1Z2luXSA9ICdyZWFkeSc7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBYaW5oYS5fcGx1Z2luTG9hZFN0YXR1c1twbHVnaW5dID0gJ2ZhaWxlZCc7CisgICAgICAgICAgfQorICAgICAgICB9LCB1cmwpOworICAgICAgcmV0VmFsID0gZmFsc2U7CisgICAgfQorICAgIGVsc2UgaWYgKCBYaW5oYS5fcGx1Z2luTG9hZFN0YXR1c1twXSA9PSAnbG9hZGluZycpCisgICAgeworICAgICAgcmV0VmFsID0gZmFsc2U7CisgICAgfQorICB9CisgIAorICAvLyBBbGwgZG9uZSwganVzdCByZXR1cm4KKyAgaWYgKCByZXRWYWwgKQorICB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICAvLyBXYWl0aW5nIG9uIHBsdWdpbnMgdG8gbG9hZCwgcmV0dXJuIGZhbHNlIG5vdyBhbmQgY29tZSBiYWNrIGEgYml0IGxhdGVyCisgIC8vIGlmIHdlIGhhdmUgdG8gY2FsbGJhY2sKKyAgaWYgKCBjYWxsYmFja0lmTm90UmVhZHkgKQorICB7CisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIAorICAgIHsgCisgICAgICBpZiAoIFhpbmhhLmxvYWRQbHVnaW5zKHBsdWdpbnMsIGNhbGxiYWNrSWZOb3RSZWFkeSkgKSAKKyAgICAgIHsgCisgICAgICAgIGNhbGxiYWNrSWZOb3RSZWFkeSgpOyAKKyAgICAgIH0gCisgICAgfSwgNTApOworICB9CisgIHJldHVybiByZXRWYWw7Cit9OworCisvLyAKKy8qKiBSZWZyZXNoIHBsdWdpbiBieSBjYWxsaW5nIG9uR2VuZXJhdGUgb3Igb25HZW5lcmF0ZU9uY2UgbWV0aG9kLgorICogQHByaXZhdGUKKyAqIEBwYXJhbSB7UGx1Z2luSW5zdGFuY2V9IHBsdWdpbgorICovCitYaW5oYS5yZWZyZXNoUGx1Z2luID0gZnVuY3Rpb24ocGx1Z2luKQoreworICBpZiAoIHBsdWdpbiAmJiB0eXBlb2YgcGx1Z2luLm9uR2VuZXJhdGUgPT0gImZ1bmN0aW9uIiApCisgIHsKKyAgICBwbHVnaW4ub25HZW5lcmF0ZSgpOworICB9CisgIGlmICggcGx1Z2luICYmIHR5cGVvZiBwbHVnaW4ub25HZW5lcmF0ZU9uY2UgPT0gImZ1bmN0aW9uIiApCisgIHsKKyAgICAvLyMxMzkyOiBpbiBmdWxscGFnZSBtb2RlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHJlY3VzaXZlbHkgYnkgc2V0RnVsbEhUTUwoKSB3aGVuIGl0IGlzIHVzZWQgdG8gc2V0IHRoZSBlZGl0b3IgY29udGVudAorCS8vIHRoaXMgaXMgYSB0ZW1wb3JhcnkgZml4LCB0aGF0IHNob3VsZCBiZXR0ZXIgYmUgaGFuZGxlZCBieSBhIGJldHRlciBpbXBsZW1ldGF0aW9uIG9mIHNldEZ1bGxIVE1MCisJcGx1Z2luLl9vbmdlbmVyYXRlT25jZSA9IHBsdWdpbi5vbkdlbmVyYXRlT25jZTsKKyAgICBkZWxldGUocGx1Z2luLm9uR2VuZXJhdGVPbmNlKTsKKwlwbHVnaW4uX29uZ2VuZXJhdGVPbmNlKCk7CisJZGVsZXRlKHBsdWdpbi5fb25nZW5lcmF0ZU9uY2UpOworICB9Cit9OworCisvKiogQ2FsbCBhIG1ldGhvZCBvZiBhbGwgcGx1Z2lucyB3aGljaCBkZWZpbmUgdGhlIG1ldGhvZCB1c2luZyB0aGUgc3VwcGxpZWQgYXJndW1lbnRzLjxiciAvPjxiciAvPgorICoKKyAqICBFeGFtcGxlOiA8Y29kZT5lZGl0b3IuZmlyZVBsdWdpbkV2ZW50KCdvbkV4ZWNDb21tYW5kJywgJ3Bhc3RlJyk8L2NvZGU+PGJyIC8+CisgKiAgICAgICAgICAgVGhlIHBsdWdpbiB3b3VsZCB0aGVuIGRlZmluZSBhIG1ldGhvZDxiciAvPgorICogICAgICAgICAgIDxjb2RlPlBsdWdpbk5hbWUucHJvdG90eXBlLm9uRXhlY0NvbW1hbmQgPSBmdW5jdGlvbiAoY21kSUQsIFVJLCBwYXJhbSkge2RvIHNvbWV0aGluZy4uLn08L2NvZGU+PGJyIC8+PGJyIC8+CisgKiAgICAgICAgICAgVGhlIGZvbGxvd2luZyBtZXRob2ROYW1lcyBhcmUgY3VycmVudGx5IGF2YWlsYWJsZTo8YnIgLz4KKyAqICA8dGFibGUgYm9yZGVyPSIxIj4KKyAqICAgIDx0cj4KKyAqICAgICAgIDx0aD5tZXRob2ROYW1lPC90aD48dGg+UGFyYW1ldGVyczwvdGg+CisgKiAgICAgPC90cj4KKyAqICAgICA8dHI+CisgKiAgICAgICA8dGQ+b25FeGVjQ29tbWFuZDwvdGQ+PHRkPiBjbWRJRCwgVUksIHBhcmFtPC90ZD4KKyAqICAgICA8L3RyPgorICogICAgIDx0cj4KKyAqICAgICAgIDx0ZD5vbktleVByZXNzPC90ZD48dGQ+ZXY8L3RkPgorICogICAgIDwvdHI+IAorICogICAgIDx0cj4KKyAqICAgICAgIDx0ZD5vbk1vdXNlRG93bjwvdGQ+PHRkPmV2PC90ZD4KKyAqICAgICA8L3RyPgorICogPC90YWJsZT48YnIgLz48YnIgLz4KKyAqICAKKyAqICBUaGUgYnJvd3NlciBzcGVjaWZpYyBwbHVnaW4gKGlmIGFueSkgaXMgY2FsbGVkIGxhc3QuICBUaGUgcmVzdWx0IG9mIGVhY2ggY2FsbCBpcyAKKyAqICB0cmVhdGVkIGFzIGJvb2xlYW4uICBBIHRydWUgcmV0dXJuIG1lYW5zIHRoYXQgdGhlIGV2ZW50IHdpbGwgc3RvcCwgbm8gZnVydGhlciBwbHVnaW5zCisgKiAgd2lsbCBnZXQgdGhlIGV2ZW50LCBhIGZhbHNlIHJldHVybiBtZWFucyB0aGUgZXZlbnQgd2lsbCBjb250aW51ZSB0byBmaXJlLgorICoKKyAqICBAcGFyYW0ge1N0cmluZ30gbWV0aG9kTmFtZQorICogIEBwYXJhbSB7bWl4ZWR9IGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBtZXRob2QsIG9wdGlvbmFsIFsyLi5uXSAKKyAqICBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqLworCitYaW5oYS5wcm90b3R5cGUuZmlyZVBsdWdpbkV2ZW50ID0gZnVuY3Rpb24obWV0aG9kTmFtZSkKK3sKKyAgLy8gYXJndW1lbnRzIGlzIG5vdCBhIHJlYWwgYXJyYXkgc28gd2UgY2FuJ3QganVzdCAuc2hpZnQoKSBpdCB1bmZvcnR1bmF0bHkuCisgIHZhciBhcmdzQXJyYXkgPSBbIF07CisgIGZvcih2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspCisgIHsKKyAgICBhcmdzQXJyYXlbaS0xXSA9IGFyZ3VtZW50c1tpXTsKKyAgfQorICAKKyAgZm9yICggaSBpbiB0aGlzLnBsdWdpbnMgKQorICB7CisgICAgdmFyIHBsdWdpbiA9IHRoaXMucGx1Z2luc1tpXS5pbnN0YW5jZTsKKyAgICAKKyAgICBpZihpID09ICdFdmVudHMnKQorICAgIHsKKyAgICAgIC8vICdFdmVudHMnIGlzIGEgZHVtbXkgcGx1Z2luIGZvciBldmVudHMgcGFzc2VkIGludG8gY29uZmlnLkV2ZW50cworICAgICAgLy8gICBzbyBtYWtlIHN1cmUgd2UgYWN0dWFsbHkgcmVmZXJlbmNlIHRoYXQgY29uZmlnIG9iamVjdCBpbiBjYXNlCisgICAgICAvLyAgIGl0IGhhZCBiZWVuIG92ZXJ3cml0dGVuIGVudGlyZWx5ICh0aWNrZXQ6MTYwMikKKyAgICAgIHBsdWdpbiA9IHRoaXMuY29uZmlnLkV2ZW50czsKKyAgICB9CisKKyAgICAvLyBTa2lwIHRoZSBicm93c2VyIHNwZWNpZmljIHBsdWdpbgorICAgIGlmIChwbHVnaW4gPT0gdGhpcy5fYnJvd3NlclNwZWNpZmljUGx1Z2luKSAKKyAgICB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgaWYgKCBwbHVnaW4gJiYgdHlwZW9mIHBsdWdpblttZXRob2ROYW1lXSA9PSAiZnVuY3Rpb24iICkKKyAgICB7CisgICAgICB2YXIgdGhpc0FyZyA9IChpID09ICdFdmVudHMnKSA/IHRoaXMgOiBwbHVnaW47CisgICAgICBpZiAoIHBsdWdpblttZXRob2ROYW1lXS5hcHBseSh0aGlzQXJnLCBhcmdzQXJyYXkpICkKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQorICB9CisgIAorICAvLyBOb3cgdGhlIGJyb3dzZXIgc3BlaWZpYworICBwbHVnaW4gPSB0aGlzLl9icm93c2VyU3BlY2lmaWNQbHVnaW47CisgIGlmICggcGx1Z2luICYmIHR5cGVvZiBwbHVnaW5bbWV0aG9kTmFtZV0gPT0gImZ1bmN0aW9uIiApCisgIHsKKyAgICBpZiAoIHBsdWdpblttZXRob2ROYW1lXS5hcHBseShwbHVnaW4sIGFyZ3NBcnJheSkgKQorICAgIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorICByZXR1cm4gZmFsc2U7Cit9OworLyoqIEFkZHMgYSBzdHlsZXNoZWV0IHRvIHRoZSBkb2N1bWVudAorICogQHBhcmFtIHtTdHJpbmd9IHN0eWxlIG5hbWUgb2YgdGhlIHN0eWxlc2hlZXQgZmlsZQorICogQHBhcmFtIHtTdHJpbmd9IHBsdWdpbiBvcHRpb25hbCBuYW1lIG9mIGEgcGx1Z2luOyBpZiBwYXNzZWQgdGhpcyBmdW5jdGlvbiBsb29rcyBmb3IgdGhlIHN0eWxlc2hlZXQgZmlsZSBpbiB0aGUgcGx1Z2luIGRpcmVjdG9yeSAKKyAqIEBwYXJhbSB7U3RyaW5nfSBpZCBvcHRpb25hbCBhIHVuaXF1ZSBpZCBmb3IgaWRlbnRpZmlpbmcgdGhlIGNyZWF0ZWQgbGluayBlbGVtZW50LCBlLmcuIGZvciBhdm9pZGluZyBkb3VibGUgbG9hZGluZyAKKyAqICAgICAgICAgICAgICAgICBvciBsYXRlciByZW1vdmluZyBpdCBhZ2FpbgorICovCitYaW5oYS5sb2FkU3R5bGUgPSBmdW5jdGlvbihzdHlsZSwgcGx1Z2luLCBpZCxwcmVwZW5kKQoreworICB2YXIgdXJsID0gX2VkaXRvcl91cmwgfHwgJyc7CisgIGlmICggcGx1Z2luICkKKyAgeworICAgIHVybCA9IFhpbmhhLmdldFBsdWdpbkRpciggcGx1Z2luICkgKyAiLyI7CisgIH0KKyAgdXJsICs9IHN0eWxlOworICAvLyBAdG9kbzogd291bGQgbm90IGl0IGJlIGJldHRlciB0byBjaGVjayB0aGUgZmlyc3QgY2hhcmFjdGVyIGluc3RlYWQgb2YgYSByZWdleCA/CisgIC8vIGlmICggdHlwZW9mIHN0eWxlID09ICdzdHJpbmcnICYmIHN0eWxlLmNoYXJBdCgwKSA9PSAnLycgKQorICAvLyB7CisgIC8vICAgdXJsID0gc3R5bGU7CisgIC8vIH0KKyAgaWYgKCAvXlwvLy50ZXN0KHN0eWxlKSApCisgIHsKKyAgICB1cmwgPSBzdHlsZTsKKyAgfQorICB2YXIgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07CisgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpOworICBsaW5rLnJlbCA9ICJzdHlsZXNoZWV0IjsKKyAgbGluay5ocmVmID0gdXJsOworICBsaW5rLnR5cGUgPSAidGV4dC9jc3MiOworICBpZiAoaWQpCisgIHsKKyAgICBsaW5rLmlkID0gaWQ7CisgIH0KKyAgaWYgKHByZXBlbmQgJiYgaGVhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbGluaycpWzBdKQorICB7CisgICAgaGVhZC5pbnNlcnRCZWZvcmUobGluayxoZWFkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaW5rJylbMF0pOworICB9CisgIGVsc2UKKyAgeworICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7CisgIH0KKyAgCit9OworCisvKiogQWRkcyBhIHNjcmlwdCB0byB0aGUgZG9jdW1lbnQKKyAqCisgKiBXYXJuaW5nOiBCcm93c2VycyBtYXkgY2F1c2UgdGhlIHNjcmlwdCB0byBsb2FkIGFzeW5jaHJvbm91c2x5LgorICoKKyAqIEBwYXJhbSB7U3RyaW5nfSBzdHlsZSBuYW1lIG9mIHRoZSBqYXZhc2NyaXB0IGZpbGUKKyAqIEBwYXJhbSB7U3RyaW5nfSBwbHVnaW4gb3B0aW9uYWwgbmFtZSBvZiBhIHBsdWdpbjsgaWYgcGFzc2VkIHRoaXMgZnVuY3Rpb24gbG9va3MgZm9yIHRoZSBzdHlsZXNoZWV0IGZpbGUgaW4gdGhlIHBsdWdpbiBkaXJlY3RvcnkgCisgKgorICovCitYaW5oYS5sb2FkU2NyaXB0ID0gZnVuY3Rpb24oc2NyaXB0LCBwbHVnaW4sIGNhbGxiYWNrKQoreworICB2YXIgdXJsID0gX2VkaXRvcl91cmwgfHwgJyc7CisgIGlmICggcGx1Z2luICkKKyAgeworICAgIHVybCA9IFhpbmhhLmdldFBsdWdpbkRpciggcGx1Z2luICkgKyAiLyI7CisgIH0KKyAgdXJsICs9IHNjcmlwdDsKKyAgLy8gQHRvZG86IHdvdWxkIG5vdCBpdCBiZSBiZXR0ZXIgdG8gY2hlY2sgdGhlIGZpcnN0IGNoYXJhY3RlciBpbnN0ZWFkIG9mIGEgcmVnZXggPworICAvLyBpZiAoIHR5cGVvZiBzdHlsZSA9PSAnc3RyaW5nJyAmJiBzdHlsZS5jaGFyQXQoMCkgPT0gJy8nICkKKyAgLy8geworICAvLyAgIHVybCA9IHN0eWxlOworICAvLyB9CisgIGlmICggL15cLy8udGVzdChzY3JpcHQpICkKKyAgeworICAgIHVybCA9IHNjcmlwdDsKKyAgfQorICAKKyAgWGluaGEuX2xvYWRiYWNrKHVybCwgY2FsbGJhY2spOworICAKK307CisKKy8qKiBMb2FkIG9uZSBvciBtb3JlIGFzc2V0cywgc2VxdWVudGlhbGx5LCB3aGVyZSBhbiBhc3NldCBpcyBhIENTUyBmaWxlLCBvciBhIGphdmFzY3JpcHQgZmlsZS4KKyAqICAKKyAqIEV4YW1wbGUgVXNhZ2U6CisgKgorICogWGluaGEuaW5jbHVkZUFzc2V0cyggJ2Zvby5jc3MnLCAnYmFyLmpzJywgWyAnZm9vLmNzcycsICdNeVBsdWdpbicgXSwgeyB0eXBlOiAndGV4dC9jc3MnLCB1cmw6ICdmb28ucGhwJywgcGx1Z2luOiAnTXlQbHVnaW4gfSApOworICoKKyAqIEFsdGVybmF0aXZlIHVzYWdlLCB1c2UgWGluaGEuaW5jbHVkZUFzc2V0cygpIHRvIG1ha2UgYSBsb2FkZXIsIHRoZW4gdXNlIGxvYWRTY3JpcHQsIGxvYWRTdHlsZSBhbmQgd2hlblJlYWR5IG1ldGhvZHMKKyAqIG9uIHlvdXIgbG9hZGVyIG9iamVjdCBhcyBhbmQgd2hlbiB5b3Ugd2lzaCwgeW91IGNhbiBjaGFpbiB0aGUgY2FsbHMgaWYgeW91IGxpa2UuCisgKgorICogWW91IG1heSBhZGQgYW55IG51bWJlciBvZiBjYWxsYmFja3MgdXNpbmcgLndoZW5SZWFkeSgpIG11bHRpcGxlIHRpbWVzLgorICoKKyAqICAgdmFyIG15QXNzZXRMb2FkZXIgPSBYaW5oYS5pbmNsdWRlQXNzZXRzKCk7CisgKiAgICAgICBteUFzc2V0TG9hZGVyLmxvYWRTY3JpcHQoJ2Zvby5qcycsICdNeVBsdWdpbicpCisgKiAgICAgICAgICAgICAgICAgICAgLmxvYWRTdHlsZSgnZm9vLmNzcycsICdNeVBsdWdpbicpCisgKiAgICAgICAgICAgICAgICAgICAgLmxvYWRTY3JpcHRPbmNlKCdiYXIuanMnLCAnTXlQbHVnaW4nKQorICogICAgICAgICAgICAgICAgICAgIC5sb2FkU2NyaXB0SWYoIHRydWUsICduYXJmLmpzJywgJ015UGx1Z2luJykKKyAqICAgICAgICAgICAgICAgICAgICAubG9hZFNjcmlwdE9uY2VJZiggZmFsc2UsICd6b3J0LmpzJywgJ015UGx1Z2luJykKKyAqICAgICAgICAgICAgICAgICAgICAubG9hZFN0eWxlSWYoIDEgPiAwLCAnZmx1cnAuY3NzJywgJ015UGx1Z2luJykKKyAqICAgICAgICAgICAgICAgICAgICAud2hlblJlYWR5KGZ1bmN0aW9uKCl7IGRvU29tZXRoaW5nQ29vbCgpOyB9KTsKKyAqIAorICovCisKK1hpbmhhLmluY2x1ZGVBc3NldHMgPSBmdW5jdGlvbigpCit7CisgIHZhciBhc3NldExvYWRlciA9IHsgcGVuZGluZ0Fzc2V0czogWyBdLCBsb2FkZXJSdW5uaW5nOiBmYWxzZSwgbG9hZGVyUGF1c2VkOiBmYWxzZSwgbG9hZGVkQXNzZXRzOiBbIF0gfTsKKyAgCisgIGFzc2V0TG9hZGVyLmNhbGxiYWNrcyA9IFsgXTsKKyAgCisgIGFzc2V0TG9hZGVyLmlzQWxyZWFkeUxvYWRlZCA9IGZ1bmN0aW9uKHVybCwgcGx1Z2luKQorICB7CisgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMubG9hZGVkQXNzZXRzLmxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgIGlmKHRoaXMubG9hZGVkQXNzZXRzW2ldLnVybCA9PSB1cmwgJiYgdGhpcy5sb2FkZWRBc3NldHNbaV0ucGx1Z2luID09IHBsdWdpbikKKyAgICAgIHsKKyAgICAgICAgaWYoIXRoaXMubG9hZGVyUnVubmluZykgdGhpcy5sb2FkTmV4dCgpOworICAgICAgICByZXR1cm4gdGhpczsgLy8gQWxyZWFkeSBkb25lIChvciBpbiBwcm9jZXNzKQorICAgICAgfQorICAgIH0KKyAgICAKKyAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wZW5kaW5nQXNzZXRzLmxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgIGlmKHRoaXMucGVuZGluZ0Fzc2V0c1tpXS51cmwgPT0gdXJsICYmIHRoaXMucGVuZGluZ0Fzc2V0c1tpXS5wbHVnaW4gPT0gcGx1Z2luKQorICAgICAgeworICAgICAgICBpZighdGhpcy5sb2FkZXJSdW5uaW5nKSB0aGlzLmxvYWROZXh0KCk7CisgICAgICAgIHJldHVybiB0aGlzOyAvLyBBbHJlYWR5IHBlbmRpbmcKKyAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworICB9OworICAKKyAgYXNzZXRMb2FkZXIubG9hZE5leHQgPSBmdW5jdGlvbigpCisgIHsgIAorICAgIHZhciBzZWxmID0gdGhpczsKKyAgICB0aGlzLmxvYWRlclJ1bm5pbmcgPSB0cnVlOworICAgIAorICAgIGlmKHRoaXMucGVuZGluZ0Fzc2V0cy5sZW5ndGgpCisgICAgeworICAgICAgaWYodGhpcy5sb2FkZXJQYXVzZWQpCisgICAgICB7CisgICAgICAgIHRoaXMubG9hZGVyUnVubmluZyA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICB2YXIgbnh0ID0gdGhpcy5wZW5kaW5nQXNzZXRzWzBdOworICAgICAgdGhpcy5wZW5kaW5nQXNzZXRzLnNwbGljZSgwLDEpOyAvLyBSZW1vdmUgMSBlbGVtZW50CisgICAgICBzd2l0Y2gobnh0LnR5cGUpCisgICAgICB7CisgICAgICAgIGNhc2UgJ2NvbW1hbmQvYWJvcnQnOgorICAgICAgICAgIGlmKCh0eXBlb2Ygbnh0LmNvbmRpdGlvbiAhPSAnZnVuY3Rpb24nICYmIG54dC5jb25kaXRpb24pIHx8ICh0eXBlb2Ygbnh0LmNvbmRpdGlvbiA9PSAnZnVuY3Rpb24nICYmIG54dC5jb25kaXRpb24oKSkpCisgICAgICAgICAgeworICAgICAgICAgICAgLy8gQWJvcnQgaXMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGNoYWluZWQgbG9hZGVyLCB3ZSBtaWdodCBoYXZlIG1vcmUgdGhpbmdzIGFkZGVkCisgICAgICAgICAgICAvLyAgaW4gb3VyIG93biBsaXN0IGFuZCB0aG9zZSBzaG91bGQgY29udGludWUgdG8gYmUgZXhlY3V0ZWQKKyAgICAgICAgICAgIG54dC5jaGFpbkxvYWRlci5hYm9ydCgpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgbnh0LmNoYWluTG9hZGVyLnJlc3VtZSgpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkTmV4dCgpOworCisgICAgICAgIGNhc2UgJ3RleHQvY3NzJzoKKyAgICAgICAgICB0aGlzLmxvYWRlZEFzc2V0cy5wdXNoKG54dCk7CisgICAgICAgICAgWGluaGEubG9hZFN0eWxlKG54dC51cmwsIG54dC5wbHVnaW4pOworICAgICAgICAgIHJldHVybiB0aGlzLmxvYWROZXh0KCk7CisgICAgICAgIAorICAgICAgICBjYXNlICd0ZXh0L2phdmFzY3JpcHQnOiAgICAgICAgICAKKyAgICAgICAgICB0aGlzLmxvYWRlZEFzc2V0cy5wdXNoKG54dCk7CisgICAgICAgICAgWGluaGEubG9hZFNjcmlwdChueHQudXJsLCBueHQucGx1Z2luLCBmdW5jdGlvbigpIHsgc2VsZi5sb2FkTmV4dCgpOyB9KTsKKyAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHRoaXMubG9hZGVyUnVubmluZyA9IGZhbHNlOworICAgICAgdGhpcy5ydW5DYWxsYmFjaygpOyAgICAgIAorICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorICB9OworICAKKyAgYXNzZXRMb2FkZXIubG9hZFNjcmlwdEFsd2F5cyA9IGZ1bmN0aW9uKHVybCwgcGx1Z2luKQorICB7CisgICAgaWYoIXVybCkgcmV0dXJuIHRoaXM7CisgICAgCisgICAgdmFyIHNlbGYgPSB0aGlzOworICAgIAorICAgIHRoaXMucGVuZGluZ0Fzc2V0cy5wdXNoKHsgJ3R5cGUnOiAndGV4dC9qYXZhc2NyaXB0JywgJ3VybCc6IHVybCwgJ3BsdWdpbic6IHBsdWdpbiB9KTsKKyAgICBpZighdGhpcy5sb2FkZXJSdW5uaW5nKSB0aGlzLmxvYWROZXh0KCk7CisgICAgCisgICAgcmV0dXJuIHRoaXM7CisgIH07CisgIAorICBhc3NldExvYWRlci5sb2FkU2NyaXB0T25jZSA9IGZ1bmN0aW9uKHVybCwgcGx1Z2luKQorICB7CisgICAgaWYodGhpcy5pc0FscmVhZHlMb2FkZWQodXJsLCBwbHVnaW4pKSAKKyAgICB7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisgICAgICAgIAorICAgIHJldHVybiB0aGlzLmxvYWRTY3JpcHRBbHdheXModXJsLCBwbHVnaW4pOworICB9CisgIAorICBhc3NldExvYWRlci5sb2FkU2NyaXB0ID0gZnVuY3Rpb24odXJsLCBwbHVnaW4pCisgIHsKKyAgICByZXR1cm4gdGhpcy5sb2FkU2NyaXB0T25jZSh1cmwsIHBsdWdpbik7CisgIH07CisgIAorICBhc3NldExvYWRlci5sb2FkU3R5bGVBbHdheXMgPSBmdW5jdGlvbih1cmwsIHBsdWdpbikKKyAgeworICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAKKyAgICB0aGlzLnBlbmRpbmdBc3NldHMucHVzaCh7ICd0eXBlJzogJ3RleHQvY3NzJywgJ3VybCc6IHVybCwgJ3BsdWdpbic6IHBsdWdpbiB9KTsKKyAgICBpZighdGhpcy5sb2FkZXJSdW5uaW5nKSB0aGlzLmxvYWROZXh0KCk7CisgICAgCisgICAgcmV0dXJuIHRoaXM7ICAgIAorICB9OworICAKKyAgYXNzZXRMb2FkZXIubG9hZFN0eWxlT25jZSA9IGZ1bmN0aW9uKHVybCwgcGx1Z2luKQorICB7CisgICAgaWYodGhpcy5pc0FscmVhZHlMb2FkZWQodXJsLCBwbHVnaW4pKSAKKyAgICB7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisgICAgICAgIAorICAgIHJldHVybiB0aGlzLmxvYWRTdHlsZUFsd2F5cyh1cmwsIHBsdWdpbik7CisgIH07CisgIAorICBhc3NldExvYWRlci5sb2FkU3R5bGUgPSBmdW5jdGlvbih1cmwsIHBsdWdpbikKKyAgeworICAgIHJldHVybiB0aGlzLmxvYWRTdHlsZU9uY2UodXJsLCBwbHVnaW4pOworICB9OworICAKKyAgYXNzZXRMb2FkZXIud2hlblJlYWR5ID0gZnVuY3Rpb24oY2FsbGJhY2spIAorICB7CisgICAgdGhpcy5jYWxsYmFja3MucHVzaChjYWxsYmFjayk7ICAgIAorICAgIGlmKCF0aGlzLmxvYWRlclJ1bm5pbmcpIHRoaXMubG9hZE5leHQoKTsKKyAgICAKKyAgICByZXR1cm4gdGhpczsgICAgCisgIH07CisgIAorICBhc3NldExvYWRlci5ydW5DYWxsYmFjayA9IGZ1bmN0aW9uKCkKKyAgeworICAgIHdoaWxlKHRoaXMuY2FsbGJhY2tzLmxlbmd0aCkKKyAgICB7IAorICAgICAgdmFyIF9jYWxsYmFjayA9IHRoaXMuY2FsbGJhY2tzLnNwbGljZSgwLDEpOworICAgICAgX2NhbGxiYWNrWzBdKCk7CisgICAgICBfY2FsbGJhY2sgPSBudWxsOworICAgIH0KKyAgICByZXR1cm4gdGhpczsKKyAgfTsKKyAgCisgIGFzc2V0TG9hZGVyLmxvYWRTY3JpcHRJZiA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgdXJsLCBwbHVnaW4pCisgIHsKKyAgICBpZihjb25kaXRpb24pIHRoaXMubG9hZFNjcmlwdCh1cmwsIHBsdWdpbik7CisgICAgcmV0dXJuIHRoaXM7CisgIH07CisgIAorICBhc3NldExvYWRlci5sb2FkU2NyaXB0T25jZUlmID0gZnVuY3Rpb24oY29uZGl0aW9uLCB1cmwsIHBsdWdpbikKKyAgeworICAgIGlmKGNvbmRpdGlvbikgdGhpcy5sb2FkU2NyaXB0T25jZSh1cmwsIHBsdWdpbik7CisgICAgcmV0dXJuIHRoaXM7CisgIH07CisgIAorICBhc3NldExvYWRlci5sb2FkU3R5bGVJZiA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgdXJsLCBwbHVnaW4pCisgIHsKKyAgICBpZihjb25kaXRpb24pIHRoaXMubG9hZFN0eWxlKHVybCwgcGx1Z2luKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfTsKKyAgICAKKyAgYXNzZXRMb2FkZXIuYWJvcnRJZiA9IGZ1bmN0aW9uKGNvbmRpdGlvbikKKyAgeworICAgIC8vIFdlIHVzZSBhIGR1bW15IGFzc2V0IHRvIGluc2VydCwgYW5kIHJldHVybiBhIGNoYWluYWJsZSBsb2FkZXIgd2hpY2ggd2lsbCBiZSBzdGFydGVkIAorICAgIC8vICBvbmx5IGlmIHRoZSBjb25kaXRpb24gaXMgbWV0IChldmFsdWF0ZWQgYWZ0ZXIgcHJldmlvdXMgYXNzZXRzIGhhdmUgYmVlbiBsb2FkZWQpCisgICAgLy8gCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgbWVhbnMgeW91IGNhbiBkbworICAgIC8vICAKKyAgICAvLyAgbXlBc3NldExvYWRlci5sb2FkU2NyaXB0KCdibGFoLmpzJykKKyAgICAvLyAgICAgICAgICAgICAgIC5hYm9ydElmKGZ1bmN0aW9uKCl7IHJldHVybiB0cnVlIDsgfSApCisgICAgLy8gICAgICAgICAgICAgICAubG9hZFN0eWxlKCdibGFoLmNzcycpOworICAgIC8vCisgICAgLy8gIG15QXNzZXRMb2FkZXIubG9hZFNjcmlwdCgnZm9vLmpzJyk7CisgICAgLy8gIAorICAgIC8vIGFuZCBldmVuIHRob3VnaCB0aGUgZmlyc3QgY2hhaW4gd2FzIGFib3J0ZWQgYWZ0ZXIgbG9hZGluZyBibGFoLmpzIGFuZCBibGFoLmNzcyAKKyAgICAvLyAgIG5ldmVyIGdldHMgbG9hZGVkLCBmb28uanMgc3RpbGwgZG9lcyBnZXQgbG9hZGVkIGJlY2F1c2UgaXQncyBpbiBhIGRpZmZlcmVudCAKKyAgICAvLyAgIGNoYWluIG9mIGFzc2V0cy4KKyAgICAvLworICAgIC8vIEZvciBhICBwcmFjdGljYWwgZXhhbXBsZSwgc2VlIGxvYWRMaWJyYXJ5IHdoZXJlIGpRdWVyeSBpcyB0ZXN0ZWQgYWZ0ZXIgaXQgbG9hZHMKKyAgICAvLyAgYW5kIGlmIGl0IGRvZXNuJ3QgdGhlbiB0aGUgY2hhaW5lZCAoYXNzdW1pbmcgalF1ZXJ5KSBzY3JpcHRzIGFyZSBub3QgbG9hZGVkLgorICAgIC8vCisgICAgdmFyIHdhaXRBc3NldCA9IHsgdHlwZTogJ2NvbW1hbmQvYWJvcnQnLCBjb25kaXRpb246IGNvbmRpdGlvbiwgdXJsOiBudWxsLCBwbHVnaW46IG51bGwsIGNoYWluTG9hZGVyOiBYaW5oYS5pbmNsdWRlQXNzZXRzKCkgfTsKKyAgICB0aGlzLnBlbmRpbmdBc3NldHMucHVzaCggd2FpdEFzc2V0ICk7CisgICAgd2FpdEFzc2V0LmNoYWluTG9hZGVyLnBhdXNlKCk7CisgICAgcmV0dXJuIHdhaXRBc3NldC5jaGFpbkxvYWRlcjsKKyAgfTsKKyAgCisgIGFzc2V0TG9hZGVyLnBhdXNlID0gZnVuY3Rpb24oKSAKKyAgeworICAgIHRoaXMubG9hZGVyUGF1c2VkID0gdHJ1ZTsKKyAgfTsKKyAgCisgIGFzc2V0TG9hZGVyLnJlc3VtZSA9IGZ1bmN0aW9uKCkgCisgIHsKKyAgICB0aGlzLmxvYWRlclBhdXNlZCA9IGZhbHNlOworICAgIGlmKCF0aGlzLmxvYWRlclJ1bm5pbmcpIHRoaXMubG9hZE5leHQoKTsKKyAgfTsKKyAgCisgIGFzc2V0TG9hZGVyLmFib3J0ID0gZnVuY3Rpb24oKQorICB7CisgICAgdGhpcy5wZW5kaW5nQXNzZXRzID0gWyBdOworICAgIHRoaXMuY2FsbGJhY2tzICAgICA9IFsgXTsKKyAgICB0aGlzLmxvYWRlclBhdXNlZCA9IGZhbHNlOworICAgIHJldHVybiB0aGlzOworICB9OworICAKKyAgZm9yKHZhciBpID0gMCA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspCisgIHsKKyAgICBpZih0eXBlb2YgYXJndW1lbnRzW2ldID09ICdzdHJpbmcnKQorICAgIHsKKyAgICAgIGlmKGFyZ3VtZW50c1tpXS5tYXRjaCgvXC5jc3MkL2kpKQorICAgICAgeworICAgICAgICBhc3NldExvYWRlci5sb2FkU3R5bGUoYXJndW1lbnRzW2ldKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgCisgICAgICB7CisgICAgICAgIGFzc2V0TG9hZGVyLmxvYWRTY3JpcHQoYXJndW1lbnRzW2ldKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZihhcmd1bWVudHNbaV0udHlwZSkKKyAgICB7CisgICAgICBpZihhcmd1bWVudHNbaV0udHlwZS5tYXRjaCgvdGV4dFwvY3NzL2kpKQorICAgICAgeworICAgICAgICBhc3NldExvYWRlci5sb2FkU3R5bGUoYXJndW1lbnRzW2ldLnVybCwgYXJndW1lbnRzW2ldLnBsdWdpbik7CisgICAgICB9CisgICAgICBlbHNlIGlmKGFyZ3VtZW50c1tpXS50eXBlLm1hdGNoKC90ZXh0XC9qYXZhc2NyaXB0L2kpKQorICAgICAgeworICAgICAgICBhc3NldExvYWRlci5sb2FkU2NyaXB0KGFyZ3VtZW50c1tpXS51cmwsIGFyZ3VtZW50c1tpXS5wbHVnaW4pOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmKGFyZ3VtZW50c1tpXS5sZW5ndGggPj0gMSkKKyAgICB7CisgICAgICBpZihhcmd1bWVudHNbaV1bMF0ubWF0Y2goL1wuY3NzJC9pKSkKKyAgICAgIHsKKyAgICAgICAgYXNzZXRMb2FkZXIubG9hZFN0eWxlKGFyZ3VtZW50c1tpXVswXSwgYXJndW1lbnRzW2ldWzFdKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgCisgICAgICB7CisgICAgICAgIGFzc2V0TG9hZGVyLmxvYWRTY3JpcHQoYXJndW1lbnRzW2ldWzBdLCBhcmd1bWVudHNbaV1bMV0pOworICAgICAgfQorICAgIH0KKyAgfQorICAKKyAgcmV0dXJuIGFzc2V0TG9hZGVyOworfQorCitYaW5oYS5fbGlicmFyeUFzc2V0TG9hZGVyID0gWGluaGEuaW5jbHVkZUFzc2V0cygpOworWGluaGEubG9hZExpYnJhcnkgPSBmdW5jdGlvbihsaWJyYXJ5TmFtZSwgbWluVmVyc2lvbiwgbWF4VmVyc2lvbikKK3sKKyAgc3dpdGNoKGxpYnJhcnlOYW1lLnRvTG93ZXJDYXNlKCkpCisgIHsKKyAgICBjYXNlICdqcXVlcnknOgorICAgICAgaWYodHlwZW9mIGpRdWVyeSA9PSAndW5kZWZpbmVkJykKKyAgICAgIHsKKyAgICAgICAgLy8galF1ZXJ5IGNhbiBiZSBwcm9ibGVtYXRpYyBpZiBpdCAoalF1ZXJ5IGl0c2VsZikgZmFpbHMgdG8gbG9hZAorICAgICAgICAvLyAgZHVlIHRvIG9sZCBicm93c2Vycywgc28gd2Ugd2lsbCByZXR1cm4gYSBjaGFpbmVkIGxvYWRlciB3aGljaAorICAgICAgICAvLyAgYWJvcnRzIGFueXRoaW5nIGNoYWluZWQgb24gaXQgaWYgalF1ZXJ5IGRvZXNuJ3QgY29tZSBpbnRvIAorICAgICAgICAvLyAgZXhpc3RlbmNlIHByb3Blcmx5LgorICAgICAgICByZXR1cm4gWGluaGEuX2xpYnJhcnlBc3NldExvYWRlci5sb2FkU2NyaXB0T25jZSgnbGlicmFyaWVzL2pxdWVyeS0zLjMuMS5qcycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFib3J0SWYoZnVuY3Rpb24oKXsgcmV0dXJuIHR5cGVvZiBqUXVlcnkgPT0gJ3VuZGVmaW5lZCc7IH0pOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgICAKKyAgICBjYXNlICdtb290b29scyc6CisgICAgICBpZih0eXBlb2YgTW9vVG9vbHMgPT0gJ3VuZGVmaW5lZCcpCisgICAgICB7CisgICAgICAgIFhpbmhhLl9saWJyYXJ5QXNzZXRMb2FkZXIubG9hZFNjcmlwdE9uY2UoJ2xpYnJhcmllcy9Nb29Ub29scy1Db3JlLTEuNi4wLmpzJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5sb2FkU2NyaXB0T25jZSgnbGlicmFyaWVzL01vb1Rvb2xzLU1vcmUtMS42LjAuanMnKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgIFhpbmhhLmRlYnVnTXNnKCJVbmtub3duIGxpYnJhcnkgIitsaWJyYXJ5TmFtZSsiLCBsaWJyYXJpZXMgbmVlZCB0byBiZSBoYW5kbGVkIGJ5IFhpbmhhLmxvYWRMaWJyYXJ5LCBhZGQgY29kZSB0aGVyZS4iLCAnd2FybicpOyAKKyAgICAgIGJyZWFrOworICB9CisgIAorICAvLyBXZSByZXR1cm4gdGhlIGxvYWRlciBzbyB0aGF0IHRoZSBjYWxsZWUgY2FuIGRvIHdoZW5SZWFkeSgpIG9uIGl0CisgIC8vICBpZiB0aGV5IHdhbnQuCisgIHJldHVybiBYaW5oYS5fbGlicmFyeUFzc2V0TG9hZGVyOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQ2F0ZWdvcnk6IEVESVRPUiBVVElMSVRJRVMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogVXRpbGl0eSBmdW5jdGlvbjogT3V0cHV0cyB0aGUgc3RydWN0dXJlIG9mIHRoZSBlZGl0ZWQgZG9jdW1lbnQgKi8KK1hpbmhhLnByb3RvdHlwZS5kZWJ1Z1RyZWUgPSBmdW5jdGlvbigpCit7CisgIHZhciB0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7CisgIHRhLnN0eWxlLndpZHRoID0gIjEwMCUiOworICB0YS5zdHlsZS5oZWlnaHQgPSAiMjBlbSI7CisgIHRhLnZhbHVlID0gIiI7CisgIGZ1bmN0aW9uIGRlYnVnKGluZGVudCwgc3RyKQorICB7CisgICAgZm9yICggOyAtLWluZGVudCA+PSAwOyApCisgICAgeworICAgICAgdGEudmFsdWUgKz0gIiAiOworICAgIH0KKyAgICB0YS52YWx1ZSArPSBzdHIgKyAiXG4iOworICB9CisgIGZ1bmN0aW9uIF9kdChyb290LCBsZXZlbCkKKyAgeworICAgIHZhciB0YWcgPSByb290LnRhZ05hbWUudG9Mb3dlckNhc2UoKSwgaTsKKyAgICB2YXIgbnMgPSBYaW5oYS5pc19pZSA/IHJvb3Quc2NvcGVOYW1lIDogcm9vdC5wcmVmaXg7CisgICAgZGVidWcobGV2ZWwsICItICIgKyB0YWcgKyAiIFsiICsgbnMgKyAiXSIpOworICAgIGZvciAoIGkgPSByb290LmZpcnN0Q2hpbGQ7IGk7IGkgPSBpLm5leHRTaWJsaW5nICkKKyAgICB7CisgICAgICBpZiAoIGkubm9kZVR5cGUgPT0gMSApCisgICAgICB7CisgICAgICAgIF9kdChpLCBsZXZlbCArIDIpOworICAgICAgfQorICAgIH0KKyAgfQorICBfZHQodGhpcy5fZG9jLmJvZHksIDApOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRhKTsKK307CisvKiogRXh0cmFjdHMgdGhlIHRleHR1YWwgY29udGVudCBvZiBhIGdpdmVuIG5vZGUKKyAqIEBwYXJhbSB7RG9tTm9kZX0gZWwKKyAqLworCitYaW5oYS5nZXRJbm5lclRleHQgPSBmdW5jdGlvbihlbCkKK3sKKyAgdmFyIHR4dCA9ICcnLCBpOworICBmb3IgKCBpID0gZWwuZmlyc3RDaGlsZDsgaTsgaSA9IGkubmV4dFNpYmxpbmcgKQorICB7CisgICAgaWYgKCBpLm5vZGVUeXBlID09IDMgKQorICAgIHsKKyAgICAgIHR4dCArPSBpLmRhdGE7CisgICAgfQorICAgIGVsc2UgaWYgKCBpLm5vZGVUeXBlID09IDEgKQorICAgIHsKKyAgICAgIHR4dCArPSBYaW5oYS5nZXRJbm5lclRleHQoaSk7CisgICAgfQorICB9CisgIHJldHVybiB0eHQ7Cit9OworLyoqIENsZWFucyBkaXJ0eSBIVE1MIGZyb20gTVMgd29yZDsgYWx3YXlzIGNsZWFucyB0aGUgd2hvbGUgZWRpdG9yIGNvbnRlbnQKKyAqICBAVE9ETzogbW92ZSB0aGlzIGluIGEgc2VwYXJhdGUgZmlsZQorICogIEBUT0RPOiB0dXJuIHRoaXMgaW50byBhIHN0YXRpYyBmdW5jdGlvbiB0aGF0IGNsZWFucyBhIGdpdmVuIHN0cmluZworICovCitYaW5oYS5wcm90b3R5cGUuX3dvcmRDbGVhbiA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIGVkaXRvciA9IHRoaXM7CisgIHZhciBzdGF0cyA9CisgIHsKKyAgICBlbXB0eV90YWdzIDogMCwKKyAgICBjb25kX2NvbW0gIDogMCwKKyAgICBtc29fZWxtdHMgIDogMCwKKyAgICBtc29fY2xhc3MgIDogMCwKKyAgICBtc29fc3R5bGUgIDogMCwKKyAgICBtc29feG1sZWwgIDogMCwKKyAgICBvcmlnX2xlbiAgIDogdGhpcy5fZG9jLmJvZHkuaW5uZXJIVE1MLmxlbmd0aCwKKyAgICBUICAgICAgICAgIDogbmV3IERhdGUoKS5nZXRUaW1lKCkKKyAgfTsKKyAgdmFyIHN0YXRzX3R4dCA9CisgIHsKKyAgICBlbXB0eV90YWdzIDogIkVtcHR5IHRhZ3MgcmVtb3ZlZDogIiwKKyAgICBjb25kX2NvbW0gIDogIkNvbmRpdGlvbmFsIGNvbW1lbnRzIHJlbW92ZWQiLAorICAgIG1zb19lbG10cyAgOiAiTVNPIGludmFsaWQgZWxlbWVudHMgcmVtb3ZlZCIsCisgICAgbXNvX2NsYXNzICA6ICJNU08gY2xhc3MgbmFtZXMgcmVtb3ZlZDogIiwKKyAgICBtc29fc3R5bGUgIDogIk1TTyBpbmxpbmUgc3R5bGUgcmVtb3ZlZDogIiwKKyAgICBtc29feG1sZWwgIDogIk1TTyBYTUwgZWxlbWVudHMgc3RyaXBwZWQ6ICIKKyAgfTsKKworICBmdW5jdGlvbiBzaG93U3RhdHMoKQorICB7CisgICAgdmFyIHR4dCA9ICJYaW5oYSB3b3JkIGNsZWFuZXIgc3RhdHM6IFxuXG4iOworICAgIGZvciAoIHZhciBpIGluIHN0YXRzICkKKyAgICB7CisgICAgICBpZiAoIHN0YXRzX3R4dFtpXSApCisgICAgICB7CisgICAgICAgIHR4dCArPSBzdGF0c190eHRbaV0gKyBzdGF0c1tpXSArICJcbiI7CisgICAgICB9CisgICAgfQorICAgIHR4dCArPSAiXG5Jbml0aWFsIGRvY3VtZW50IGxlbmd0aDogIiArIHN0YXRzLm9yaWdfbGVuICsgIlxuIjsKKyAgICB0eHQgKz0gIkZpbmFsIGRvY3VtZW50IGxlbmd0aDogIiArIGVkaXRvci5fZG9jLmJvZHkuaW5uZXJIVE1MLmxlbmd0aCArICJcbiI7CisgICAgdHh0ICs9ICJDbGVhbi11cCB0b29rICIgKyAoKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3RhdHMuVCkgLyAxMDAwKSArICIgc2Vjb25kcyI7CisgICAgYWxlcnQodHh0KTsKKyAgfQorCisgIGZ1bmN0aW9uIGNsZWFyQ2xhc3Mobm9kZSkKKyAgeworICAgIHZhciBuZXdjID0gbm9kZS5jbGFzc05hbWUucmVwbGFjZSgvKF58XHMpbXNvLio/KFxzfCQpL2lnLCAnICcpOworICAgIGlmICggbmV3YyAhPSBub2RlLmNsYXNzTmFtZSApCisgICAgeworICAgICAgbm9kZS5jbGFzc05hbWUgPSBuZXdjOworICAgICAgaWYgKCAhL1xTLy50ZXN0KG5vZGUuY2xhc3NOYW1lKSkKKyAgICAgIHsKKyAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzIik7CisgICAgICAgICsrc3RhdHMubXNvX2NsYXNzOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGNsZWFyU3R5bGUobm9kZSkKKyAgeworICAgIHZhciBkZWNsYXJhdGlvbnMgPSBub2RlLnN0eWxlLmNzc1RleHQuc3BsaXQoL1xzKjtccyovKTsKKyAgICBmb3IgKCB2YXIgaSA9IGRlY2xhcmF0aW9ucy5sZW5ndGg7IC0taSA+PSAwOyApCisgICAgeworICAgICAgaWYgKCAvXm1zb3xedGFiLXN0b3BzL2kudGVzdChkZWNsYXJhdGlvbnNbaV0pIHx8IC9ebWFyZ2luXHMqOlxzKjAuLlxzKzAuLlxzKzAuLi9pLnRlc3QoZGVjbGFyYXRpb25zW2ldKSApCisgICAgICB7CisgICAgICAgICsrc3RhdHMubXNvX3N0eWxlOworICAgICAgICBkZWNsYXJhdGlvbnMuc3BsaWNlKGksIDEpOworICAgICAgfQorICAgIH0KKyAgICBub2RlLnN0eWxlLmNzc1RleHQgPSBkZWNsYXJhdGlvbnMuam9pbigiOyAiKTsKKyAgfQorCisgIGZ1bmN0aW9uIHJlbW92ZUVsZW1lbnRzKGVsKQorICB7CisgICAgaWYgKCgnbGluaycgPT0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpICYmCisgICAgICAgIChlbC5hdHRyaWJ1dGVzICYmIC9GaWxlLUxpc3R8RWRpdC1UaW1lLURhdGF8dGhlbWVEYXRhfGNvbG9yU2NoZW1lTWFwcGluZy8udGVzdChlbC5hdHRyaWJ1dGVzLnJlbC5ub2RlVmFsdWUpKSkgfHwKKyAgICAgICAgL14oc3R5bGV8bWV0YSkkL2kudGVzdChlbC50YWdOYW1lKSkKKyAgICB7CisgICAgICBYaW5oYS5yZW1vdmVGcm9tUGFyZW50KGVsKTsKKyAgICAgICsrc3RhdHMubXNvX2VsbXRzOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGZ1bmN0aW9uIGNoZWNrRW1wdHkoZWwpCisgIHsKKyAgICAvLyBAdG9kbyA6IGNoZWNrIGlmIHRoaXMgaXMgcXVpY2tlcgorICAgIC8vICBpZiAoIVsnQScsJ1NQQU4nLCdCJywnU1RST05HJywnSScsJ0VNJywnRk9OVCddLmNvbnRhaW5zKGVsLnRhZ05hbWUpICYmICFlbC5maXJzdENoaWxkKQorICAgIGlmICggL14oYXxzcGFufGJ8c3Ryb25nfGl8ZW18Zm9udHxkaXZ8cCkkL2kudGVzdChlbC50YWdOYW1lKSAmJiAhZWwuZmlyc3RDaGlsZCkKKyAgICB7CisgICAgICBYaW5oYS5yZW1vdmVGcm9tUGFyZW50KGVsKTsKKyAgICAgICsrc3RhdHMuZW1wdHlfdGFnczsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBmdW5jdGlvbiBwYXJzZVRyZWUocm9vdCkKKyAgeworICAgIGNsZWFyQ2xhc3Mocm9vdCk7CisgICAgY2xlYXJTdHlsZShyb290KTsKKyAgICB2YXIgbmV4dDsKKyAgICBmb3IgKHZhciBpID0gcm9vdC5maXJzdENoaWxkOyBpOyBpID0gbmV4dCApCisgICAgeworICAgICAgbmV4dCA9IGkubmV4dFNpYmxpbmc7CisgICAgICBpZiAoIGkubm9kZVR5cGUgPT0gMSAmJiBwYXJzZVRyZWUoaSkgKQorICAgICAgeworICAgICAgICBpZiAoKFhpbmhhLmlzX2llICYmIHJvb3Quc2NvcGVOYW1lICE9ICdIVE1MJykgfHwgKCFYaW5oYS5pc19pZSAmJiAvOi8udGVzdChpLnRhZ05hbWUpKSkKKyAgICAgICAgeworICAgICAgICAgIC8vIE5vd2FkYXlzLCBXb3JkIHNwaXRzIG91dCB0YWdzIGxpa2UgJzxvOnNvbWV0aGluZyAvPicuICBTaW5jZSB0aGUKKyAgICAgICAgICAvLyBkb2N1bWVudCBiZWluZyBjbGVhbmVkIG1pZ2h0IGJlIEhUTUw0IGFuZCBub3QgWEhUTUwsIHRoaXMgdGFnIGlzCisgICAgICAgICAgLy8gaW50ZXJwcmV0ZWQgYXMgJzxvOnNvbWV0aGluZyAvPSIvIj4nLiAgRm9yIEhUTUwgdGFncyB3aXRob3V0CisgICAgICAgICAgLy8gY2xvc2luZyBlbGVtZW50cyAoZS5nLiBJTUcpIHRoZXNlIHR3byBmb3JtcyBhcmUgZXF1aXZhbGVudC4gIFNpbmNlCisgICAgICAgICAgLy8gSFRNTCBkb2VzIG5vdCByZWNvZ25pemUgdGhlc2UgdGFncywgaG93ZXZlciwgdGhleSBlbmQgdXAgYXMKKyAgICAgICAgICAvLyBwYXJlbnRzIG9mIGVsZW1lbnRzIHRoYXQgc2hvdWxkIGJlIHRoZWlyIHNpYmxpbmdzLiAgV2UgcmVwYXJlbnQKKyAgICAgICAgICAvLyB0aGUgY2hpbGRyZW4gYW5kIHJlbW92ZSB0aGVtIGZyb20gdGhlIGRvY3VtZW50LgorICAgICAgICAgIGZvciAodmFyIGluZGV4PWkuY2hpbGROb2RlcyAmJiBpLmNoaWxkTm9kZXMubGVuZ3RoLTE7IGkuY2hpbGROb2RlcyAmJiBpLmNoaWxkTm9kZXMubGVuZ3RoICYmIGkuY2hpbGROb2Rlc1tpbmRleF07IC0taW5kZXgpCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKGkubmV4dFNpYmxpbmcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGkucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaS5jaGlsZE5vZGVzW2luZGV4XSxpLm5leHRTaWJsaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGkuY2hpbGROb2Rlc1tpbmRleF0pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBYaW5oYS5yZW1vdmVGcm9tUGFyZW50KGkpOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChjaGVja0VtcHR5KGkpKQorICAgICAgICB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlbW92ZUVsZW1lbnRzKGkpKQorICAgICAgICB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGkubm9kZVR5cGUgPT0gOCkKKyAgICAgIHsKKyAgICAgICAgLy8gOCBpcyBhIGNvbW1lbnQgbm9kZSwgYW5kIGNhbiBjb250YWluIGNvbmRpdGlvbmFsIGNvbW1lbnRzLCB3aGljaAorICAgICAgICAvLyB3aWxsIGJlIGludGVycHJldGVkIGJ5IElFIGFzIGlmIHRoZXkgd2VyZSBub3QgY29tbWVudHMuCisgICAgICAgIGlmICgvKFxzKlxbXHMqaWZccyooKFtnbF10ZT98ISlccyopPyhJRXxtc28pXHMqKFxkKyhcLlxkKyk/XHMqKT9cXT4pLy50ZXN0KGkubm9kZVZhbHVlKSkKKyAgICAgICAgeworICAgICAgICAgIC8vIFdlIHN0cmlwIGFsbCBjb25kaXRpb25hbCBjb21tZW50cyBkaXJlY3RseSBmcm9tIHRoZSB0cmVlLgorICAgICAgICAgIFhpbmhhLnJlbW92ZUZyb21QYXJlbnQoaSk7CisgICAgICAgICAgKytzdGF0cy5jb25kX2NvbW07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgcGFyc2VUcmVlKHRoaXMuX2RvYy5ib2R5KTsKKyAgLy8gc2hvd1N0YXRzKCk7CisgIC8vIHRoaXMuZGVidWdUcmVlKCk7CisgIC8vIHRoaXMuc2V0SFRNTCh0aGlzLmdldEhUTUwoKSk7CisgIC8vIHRoaXMuc2V0SFRNTCh0aGlzLmdldElubmVySFRNTCgpKTsKKyAgLy8gdGhpcy5mb3JjZVJlZHJhdygpOworICB0aGlzLnVwZGF0ZVRvb2xiYXIoKTsKK307CisKKy8qKiBSZW1vdmVzICZsdDtmb250Jmd0OyB0YWdzOyBhbHdheXMgY2xlYW5zIHRoZSB3aG9sZSBlZGl0b3IgY29udGVudAorICogIEBUT0RPOiBtb3ZlIHRoaXMgaW4gYSBzZXBhcmF0ZSBmaWxlCisgKiAgQFRPRE86IHR1cm4gdGhpcyBpbnRvIGEgc3RhdGljIGZ1bmN0aW9uIHRoYXQgY2xlYW5zIGEgZ2l2ZW4gc3RyaW5nCisgKi8KK1hpbmhhLnByb3RvdHlwZS5fY2xlYXJGb250cyA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIEQgPSB0aGlzLmdldElubmVySFRNTCgpOworCisgIGlmICggY29uZmlybShYaW5oYS5fbGMoIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyIpKSApCisgIHsKKyAgICBEID0gRC5yZXBsYWNlKC9mYWNlPSJbXiJdKiIvZ2ksICcnKTsKKyAgICBEID0gRC5yZXBsYWNlKC9mb250LWZhbWlseTpbXjt9IiddKzs/L2dpLCAnJyk7CisgIH0KKworICBpZiAoIGNvbmZpcm0oWGluaGEuX2xjKCJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyIpKSApCisgIHsKKyAgICBEID0gRC5yZXBsYWNlKC9zaXplPSJbXiJdKiIvZ2ksICcnKTsKKyAgICBEID0gRC5yZXBsYWNlKC9mb250LXNpemU6W147fSInXSs7Py9naSwgJycpOworICB9CisKKyAgaWYgKCBjb25maXJtKFhpbmhhLl9sYygiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyIpKSApCisgIHsKKyAgICBEID0gRC5yZXBsYWNlKC9jb2xvcj0iW14iXSoiL2dpLCAnJyk7CisgICAgRCA9IEQucmVwbGFjZSgvKFteXC1dKWNvbG9yOlteO30iJ10rOz8vZ2ksICckMScpOworICB9CisKKyAgRCA9IEQucmVwbGFjZSgvKHN0eWxlfGNsYXNzKT0iXHMqIi9naSwgJycpOworICBEID0gRC5yZXBsYWNlKC88KGZvbnR8c3Bhbilccyo+L2dpLCAnJyk7CisgIHRoaXMuc2V0SFRNTChEKTsKKyAgdGhpcy51cGRhdGVUb29sYmFyKCk7Cit9OworCitYaW5oYS5wcm90b3R5cGUuX3NwbGl0QmxvY2sgPSBmdW5jdGlvbigpCit7CisgIHRoaXMuX2RvYy5leGVjQ29tbWFuZCgnZm9ybWF0YmxvY2snLCBmYWxzZSwgJ2RpdicpOworfTsKKworLyoqIFNvbWV0aW1lcyB0aGUgZGlzcGxheSBoYXMgdG8gYmUgcmVmcmVzaGVkIHRvIG1ha2UgRE9NIGNoYW5nZXMgdmlzaWJsZSAoPykgKEdlY2tvIGJ1Zz8pICAqLworWGluaGEucHJvdG90eXBlLmZvcmNlUmVkcmF3ID0gZnVuY3Rpb24oKQoreworICB0aGlzLl9kb2MuYm9keS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CisgIHRoaXMuX2RvYy5ib2R5LnN0eWxlLnZpc2liaWxpdHkgPSAiIjsKKyAgLy8gdGhpcy5fZG9jLmJvZHkuaW5uZXJIVE1MID0gdGhpcy5nZXRJbm5lckhUTUwoKTsKK307CisKKy8qKiBGb2N1c2VzIHRoZSBpZnJhbWUgd2luZG93LiAKKyAqIEByZXR1cm5zIHtkb2N1bWVudH0gYSByZWZlcmVuY2UgdG8gdGhlIGVkaXRvciBkb2N1bWVudAorICovCitYaW5oYS5wcm90b3R5cGUuZm9jdXNFZGl0b3IgPSBmdW5jdGlvbigpCit7CisgIHN3aXRjaCAodGhpcy5fZWRpdE1vZGUpCisgIHsKKyAgICAvLyBub3RpY2UgdGhlIHRyeSB7IC4uLiB9IGNhdGNoIGJsb2NrIHRvIGF2b2lkIHNvbWUgcmFyZSBleGNlcHRpb25zIGluIEZpcmVGb3gKKyAgICAvLyAocGVyaGFwcyBhbHNvIGluIG90aGVyIEdlY2tvIGJyb3dzZXJzKS4gTWFudWFsIGZvY3VzIGJ5IHVzZXIgaXMgcmVxdWlyZWQgaW4KKyAgICAvLyBjYXNlIG9mIGFuIGVycm9yLiBTb21lYm9keSBoYXMgYW4gaWRlYT8KKyAgICBjYXNlICJ3eXNpd3lnIiA6CisgICAgICB0cnkKKyAgICAgIHsKKyAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBmb2N1cyB0aGUgZmllbGQgdW5sZXNzIGF0IGxlYXN0IG9uZSBmaWVsZCBoYXMgYmVlbiBhY3RpdmF0ZWQuCisgICAgICAgIGlmICggWGluaGEuX3NvbWVFZGl0b3JIYXNCZWVuQWN0aXZhdGVkICkKKyAgICAgICAgeworICAgICAgICAgIHRoaXMuYWN0aXZhdGVFZGl0b3IoKTsgLy8gRW5zdXJlICp0aGlzKiBlZGl0b3IgaXMgYWN0aXZhdGVkCisgICAgICAgICAgdGhpcy5faWZyYW1lLmNvbnRlbnRXaW5kb3cuZm9jdXMoKTsgLy8gYW5kIGZvY3VzIGl0CisgICAgICAgIH0KKyAgICAgIH0gY2F0Y2ggKGV4KSB7fQorICAgIGJyZWFrOworICAgIGNhc2UgInRleHRtb2RlIjoKKyAgICAgIHRyeQorICAgICAgeworICAgICAgICB0aGlzLl90ZXh0QXJlYS5mb2N1cygpOworICAgICAgfSBjYXRjaCAoZSkge30KKyAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYWxlcnQoIkVSUk9SOiBtb2RlICIgKyB0aGlzLl9lZGl0TW9kZSArICIgaXMgbm90IGRlZmluZWQiKTsKKyAgfQorICByZXR1cm4gdGhpcy5fZG9jOworfTsKKworLyoqIFRha2VzIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgdGV4dCAoZm9yIHVuZG8pCisgKiBAcHJpdmF0ZQorICovCitYaW5oYS5wcm90b3R5cGUuX3VuZG9UYWtlU25hcHNob3QgPSBmdW5jdGlvbigpCit7CisgICsrdGhpcy5fdW5kb1BvczsKKyAgaWYgKCB0aGlzLl91bmRvUG9zID49IHRoaXMuY29uZmlnLnVuZG9TdGVwcyApCisgIHsKKyAgICAvLyByZW1vdmUgdGhlIGZpcnN0IGVsZW1lbnQKKyAgICB0aGlzLl91bmRvUXVldWUuc2hpZnQoKTsKKyAgICAtLXRoaXMuX3VuZG9Qb3M7CisgIH0KKyAgCisgIHZhciBzbmFwc2hvdERhdGEgPSB7IAorICAgICd0eHQnICAgICAgICA6IG51bGwsCisgICAgJ2NhcmV0SW5Cb2R5JzogZmFsc2UKKyAgfTsKKyAgCisgIAorICAvLyBDYXJldCBwcmVzZXJ2YXRpb24sIHdoZW4geW91IGhpdCB1bmRvLCBpZGVhbGx5IHB1dCB0aGUgY2FyZXQgYmFjayB3aGVyZSBpdCB3YXMuCisgIC8vIFRvIGFjY29tcGxpc2ggdGhpcyB3ZSBmaWd1cmUgb3V0IHdoYXQgTk9ERSAoVGV4dCBOb2RlIHR5cGljYWxseSkgYW5kIG9mZnNldCBpbnRvIAorICAvLyBpdCBoYWQgdGhlIGNhcmV0IHNhdmUgdGhpcyBpbnRvIHRoZSBwYXJlbnQgZWxlbWVudCBvZiB0aGF0IG5vZGUgaWYgaXQgaGFzIG9uZQorICAvLyBhcyBhbiBhdHRyaWJ1dGUsIGFuZCBhdHRhY2ggYSBjbGFzc25hbWUgdG8gYmUgYWJsZSB0byBmaW5kIGl0IGFnYWluCisgIC8vIHRoZW4gaW4gdGhlIGFjdHVhbCB1bmRvIGZ1bmN0aW9uIHdlIGxvb2sgZm9yIHRoYXQgY2xhc3MgbmFtZSBhZnRlciBkcm9wcGluZyAKKyAgLy8gdGhlIEhUTUwgYmFjayBpbnRvIHBsYWNlLCBhbmQgcmV2ZXJzZSB0aGUgcHJvY2VzcworICAKKyAgLy8gTm90ZSB0aGF0IElFIDwxMSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMsIEZGIDwzLjYgd29uJ3QgZWl0aGVyLCAKKyAgLy8gbm9yIFNhZmFyaSA8NS4xLCBDaHJvbWUgSSBkb250JyBrbm93IGl0IGRvZXMgY3VycmVudGx5IEkgZG9uJ3Qga25vdyBob3cgbG9uZyBhZ28KKyAgLy8gT3BlcmEgc2FtZSwgZG9uJ3Qga25vdyBob3cgbG9uZyBidXQgaXQgd29ya3MgY3VycmVudGx5CisgIC8vIElmIGEgYnJvd3NlciBkb2Vzbid0IHdvcmsgd2l0aCBpdCwgaXQgd29uJ3QgY2F1c2UgYSBwcm9ibGVtLCBpdCBqdXN0IHdvbid0IAorICAvLyBwcmVzZXJ2ZSB0aGUgY2FyZXQuCisgIAorICB0cnkKKyAgeworICAgIC8vIEluc2VydCBhIG1hcmtlciBzbyB3ZSBrbm93IHdoZXJlIHdlIGFyZQorICAgIHZhciBzZWwgPSB0aGlzLmdldFNlbGVjdGlvbigpOworICAgIHZhciBjYXJldE5vZGUgICAgPSBzZWwuZm9jdXNOb2RlOworICAgIGlmKGNhcmV0Tm9kZSkKKyAgICB7CisgICAgICB2YXIgY2FyZXRPZmZzZXQgID0gc2VsLmZvY3VzT2Zmc2V0CisgICAgICB2YXIgcm5nID0gdGhpcy5jcmVhdGVSYW5nZShzZWwpOworICAgICAgdmFyIGNhcmV0UGFyZW50ICAgPSB0aGlzLmdldFBhcmVudEVsZW1lbnQoc2VsKTsKKyAgICAgIAorICAgICAgdmFyIGNhcmV0UmVzdG9yYXRpb25EYXRhID0gZmFsc2U7CisgICAgICAKKyAgICAgIHN3aXRjaChjYXJldE5vZGUubm9kZVR5cGUpCisgICAgICB7CisgICAgICAgIGNhc2UgMzogIC8vIFRFWFQKKyAgICAgICAgY2FzZSA0OiAgLy8gQ0RBVEEKKyAgICAgICAgY2FzZSA4OiAgLy8gQ09NTUVOVAorICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVjb3JkIHdoaWNoIGNoaWxkIG5vZGUgdGhlIGZvY3VzIG5vZGUgaXMgb2YgdGhlIHBhcmVudAorICAgICAgICAgIC8vICBkZWZhdWx0IHRvIHRoZSBlbmQKKyAgICAgICAgICB2YXIgd2hpY2hDaGlsZCA9IGNhcmV0UGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoLTE7CisgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGNhcmV0UGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgeworICAgICAgICAgICAgaWYoY2FyZXRQYXJlbnQuY2hpbGROb2Rlc1tpXSA9PSBjYXJldE5vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHdoaWNoQ2hpbGQgPSBpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBjYXJldFJlc3RvcmF0aW9uRGF0YSA9IHsKKyAgICAgICAgICAgIGNhcmV0Q2hpbGQ6ICAgd2hpY2hDaGlsZCwKKyAgICAgICAgICAgIGNhcmV0T2Zmc2V0OiAgY2FyZXRPZmZzZXQKKyAgICAgICAgICB9OworICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgIC8vIEVoaGhtLCBub3Qgc3VyZS4gIFRoaXMgd291bGQgYmUgdGhlIGNhc2UgaWYgdGhlIHNlbGVjdGlvbiBpcyBhbiBpbWFnZSwgdGFibGUgd2hhdGV2ZXIKKyAgICAgICAgICAvLworICAgICAgICAgIC8vIEZvciBleGFtcGxlIDxwPjxpbWc+PC9wPiB3aXRoIGltZyBzZWxlY3RlZCB5b3UgZ2V0IGNhcmV0Tm9kZSA9IGltZywgY2FyZXRQYXJlbnQgPSBwLCAKKyAgICAgICAgICAvLyBjYXJldE9mZnNldCA9IDAgKDB0aCBjaGlsZCBvZiB0aGUgcCkKKyAgICAgICAgICAvLworICAgICAgICAgIC8vIEkgd2FzIGdvaW5nIHRvIG1ha2UgdGhpcyBoYW5kbGVkIHNvIGl0IHdvdWxkIHNlbGVjdCB0aGUgaW1hZ2UgYWdhaW4sIGJ1dCBhY3R1YWxseQorICAgICAgICAgIC8vIEkgdGhpbmsgaXQgd29ya3MganVzdCBmaW5lIHdpdGhvdXQgdGhpcywgaXQgZmVlbHMgbmF0dXJhbC1lbm91Z2ggYW55d2F5LgorICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgCisgICAgICBpZihjYXJldFJlc3RvcmF0aW9uRGF0YSkKKyAgICAgIHsKKyAgICAgICAgaWYoY2FyZXRQYXJlbnQgPT0gdGhpcy5fZG9jLmJvZHkpCisgICAgICAgIHsKKyAgICAgICAgICAvLyBCb2R5IGlzIHRyaWNreSBiZWNhdXNlIGl0IHdvbid0IGJlIGluY2x1ZGVkIGluIHRoZSBzbmFwc2hvdCBvciByZXN0b3JhdGlvbgorICAgICAgICAgIC8vIHVubGVzcyBmdWxsUGFnZSBtb2RlIGlzIGJlaW5nIHVzZWQsIHNpbmNlIHRoZXJlIGlzIG9ubHkgb25lIGJvZHkgdGhlbiB3ZQorICAgICAgICAgIC8vIGNhbiByZWNvcmQgaXQgaW4gdGhlIHNuYXBzaG90IGRhdGEgYW5kIHdlIGtub3cgd2hlcmUgdG8gcHV0IGl0IGluIHVuZG8KKyAgICAgICAgICBzbmFwc2hvdERhdGEuY2FyZXRJbkJvZHkgICAgICAgICAgICA9IHRydWU7CisgICAgICAgICAgc25hcHNob3REYXRhLmNhcmV0UmVzdG9yYXRpb25EYXRhICAgPSBKU09OLnN0cmluZ2lmeShjYXJldFJlc3RvcmF0aW9uRGF0YSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLy8gRm9yIG90aGVyIGVsZW1lbnRzIGVuY29kZSB0aGUgY2FyZXQgZGF0YSBpbiB0aGUgZWxlbWVudCBpdHNlbGYKKyAgICAgICAgICAvLyBzbyB3ZSBjYW4gYmUgc3VyZSB3ZSBhcmUgbG9va2luZyBhdCB0aGUgcmlnaHQgb25lIHdoZW4gd2UgZmluZCBpdAorICAgICAgICAgIFhpbmhhLmFkZENsYXNzKGNhcmV0UGFyZW50LCAneGluaGEtdW5kby1jYXJldCcpOworICAgICAgICAgIGNhcmV0UGFyZW50LnNldEF0dHJpYnV0ZSgneGluaGEtdW5kby1jYXJldCcsIEpTT04uc3RyaW5naWZ5KGNhcmV0UmVzdG9yYXRpb25EYXRhKSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIAorICAgICAgLy8gRGVidWcgaGVscGVyCisgICAgICAvL2NvbnNvbGUubG9nKHtuOiBjYXJldE5vZGUsIHA6IGNhcmV0T2Zmc2V0LCByOiBybmcsIGU6IGNhcmV0UGFyZW50fSk7CisgICAgfQorICB9CisgIGNhdGNoKGUpCisgIHsKKyAgICAvLyBCcm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBzb21ldGhpbmcuICBJJ20gbm90IGdvaW5nIHRvIHRyeSBhbmQgc3VwcG9ydAorICAgIC8vIHZlcnkgb2xkIGJyb3dzZXJzIGZvciB0aGlzIGNhcmV0IHByZXNlcnZhdGlvbiBmZWF0dXJlCisgICAgCisgICAgLy8gT2xkIElFIGRvZXNuJ3Qgc3VwcG9ydAorICAgIGlmKFhpbmhhLmlzX2dlY2tvIHx8IFhpbmhhLmlzX3dlYmtpdCkKKyAgICB7CisgICAgICBYaW5oYS5kZWJ1Z01zZygnQ2FyZXQgcHJlc2VydmF0aW9uIGNvZGUgZm9yIHVuZG8gc25hcHNob3QgZmFpbGVkLiBJZiB5b3VyIGJyb3dzZXIgaXMgbW9kZXJuLCBkZXZlbG9wZXJzIG5lZWQgdG8gY2hlY2sgaXQgb3V0IGluIFhpbmhhQ29yZS5qcyAoc2VhcmNoIGZvciBjYXJldCBwcmVzZXJ2YXRpb24pLicsJ3dhcm4nKTsKKyAgICB9CisgIH0KKyAgCisgIC8vIHVzZSB0aGUgZmFzdGVyIG1ldGhvZCAoZ2V0SW5uZXJIVE1MKTsKKyAgdmFyIHRha2UgPSB0cnVlOworICBzbmFwc2hvdERhdGEudHh0ID0gdGhpcy5nZXRJbm5lckhUTUwoKTsKKyAgCisgIC8vIEZpbmQgYWxsIGNhcmV0cyB3ZSBtaWdodCBoYXZlIGFkZGVkIChpbiB0aGVvcnksIDAgb3IgMSwgYnV0IGFsd2F5cyBhIHBvc3NpYmlsaXR5IG9mIG1vcmUpCisgIHZhciBleGlzdGluZ0NhcmV0cyA9IFhpbmhhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUodGhpcy5fZG9jLmJvZHksICd4aW5oYS11bmRvLWNhcmV0Jyk7CisgIAorICAvLyBSZW1vdmUgdGhlbSBhbGwKKyAgZm9yKHZhciBpID0gMDsgaSA8IGV4aXN0aW5nQ2FyZXRzLmxlbmd0aDsgaSsrKQorICB7CisgICAgWGluaGEucmVtb3ZlQ2xhc3MoZXhpc3RpbmdDYXJldHNbaV0sICd4aW5oYS11bmRvLWNhcmV0Jyk7CisgICAgZXhpc3RpbmdDYXJldHNbaV0ucmVtb3ZlQXR0cmlidXRlKCd4aW5oYS11bmRvLWNhcmV0Jyk7CisgIH0KKyAgICAKKyAgaWYgKCB0aGlzLl91bmRvUG9zID4gMCApCisgIHsKKyAgICB0YWtlID0gKHRoaXMuX3VuZG9RdWV1ZVt0aGlzLl91bmRvUG9zIC0gMV0udHh0ICE9IHNuYXBzaG90RGF0YS50eHQpOworICB9CisgIGlmICggdGFrZSApCisgIHsKKyAgICB0aGlzLl91bmRvUXVldWVbdGhpcy5fdW5kb1Bvc10gPSBzbmFwc2hvdERhdGE7CisgIH0KKyAgZWxzZQorICB7CisgICAgdGhpcy5fdW5kb1Bvcy0tOworICB9Cit9OworLyoqIEN1c3RvbSBpbXBsZW1lbnRhdGlvbiBvZiB1bmRvIGZ1bmN0aW9uYWxpdHkKKyAqIEBwcml2YXRlCisgKi8KK1hpbmhhLnByb3RvdHlwZS51bmRvID0gZnVuY3Rpb24oKQoreworICBpZiAoIHRoaXMuX3VuZG9Qb3MgPiAwICkKKyAgeworICAgIHZhciBzbmFwc2hvdERhdGEgPSB0aGlzLl91bmRvUXVldWVbLS10aGlzLl91bmRvUG9zXTsKKyAgICBpZiAoIHNuYXBzaG90RGF0YS50eHQgKQorICAgIHsKKyAgICAgIHRoaXMuc2V0SFRNTChzbmFwc2hvdERhdGEudHh0KTsKKyAgICAgIHRoaXMuX3Jlc3RvcmVDYXJldEZvclVuZG9SZWRvKHNuYXBzaG90RGF0YSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICArK3RoaXMuX3VuZG9Qb3M7CisgICAgfQorICB9Cit9OworCisvKiogQ3VzdG9tIGltcGxlbWVudGF0aW9uIG9mIHJlZG8gZnVuY3Rpb25hbGl0eQorICogQHByaXZhdGUKKyAqLworWGluaGEucHJvdG90eXBlLnJlZG8gPSBmdW5jdGlvbigpCit7CisgIGlmICggdGhpcy5fdW5kb1BvcyA8IHRoaXMuX3VuZG9RdWV1ZS5sZW5ndGggLSAxICkKKyAgeworICAgIHZhciBzbmFwc2hvdERhdGEgPSB0aGlzLl91bmRvUXVldWVbKyt0aGlzLl91bmRvUG9zXTsKKyAgICBpZiAoIHNuYXBzaG90RGF0YS50eHQgKQorICAgIHsKKyAgICAgIHRoaXMuc2V0SFRNTChzbmFwc2hvdERhdGEudHh0KTsKKyAgICAgIHRoaXMuX3Jlc3RvcmVDYXJldEZvclVuZG9SZWRvKHNuYXBzaG90RGF0YSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAtLXRoaXMuX3VuZG9Qb3M7CisgICAgfQorICB9Cit9OworCisvKiogVXNlZCBieSB1bmRvIGFuZCByZWRvIHRvIHJlc3RvcmUgYSBzYXZlZCBjYXJldCBwb3NpdGlvbi4KKyAqIAorICogIFVuZG8gYW5kIHJlZG8gbXVzdCBoYXZlIGFscmVhZHkgc2V0IHRoZSBodG1sIHdoZW4gdGhleSBjYWxsIHRoaXMuCisgKiAKKyAqIEBwcml2YXRlCisgKiBAcGFyYW0gbWl4ZWQgc25hcHNob3REYXRhIGFzIHJlY29yZGVkIGJ5IF91bmRvVGFrZVNuYXBzaG90CisgKi8KKworWGluaGEucHJvdG90eXBlLl9yZXN0b3JlQ2FyZXRGb3JVbmRvUmVkbyA9IGZ1bmN0aW9uKHNuYXBzaG90RGF0YSkKK3sKKyAgLy8gQ2FyZXQgcmVzdG9yYXRpb24KKyAgdHJ5CisgIHsKKyAgICAvLyBJZiB0aGUgc25hcHBlZCBjYXJldCB3YXMgYWN0dWFsbHkgaW4gdGhlIGJvZHkgYXMgaXQncyBwYXJlbnQKKyAgICAvLyAgKGllIHRleHQgd2l0aCBubyBjb250YWluaW5nIGVsZW1lbnQgZXhjZXB0IGJvZHkpCisgICAgLy8gcHVzaCB0aGF0IGRhdGEgYmFjayBpbnRvIHRoZSBib2R5IGVsZW1lbnQgc28gd2UgY2FuIHRyZWF0IGl0IGFzCisgICAgLy8gYW55IG90aGVyIGVsZW1lbnQKKyAgICBpZihzbmFwc2hvdERhdGEuY2FyZXRJbkJvZHkpCisgICAgeworICAgICAgWGluaGEuYWRkQ2xhc3ModGhpcy5fZG9jLmJvZHksICd4aW5oYS11bmRvLWNhcmV0Jyk7CisgICAgICB0aGlzLl9kb2MuYm9keS5zZXRBdHRyaWJ1dGUoJ3hpbmhhLXVuZG8tY2FyZXQnLCBzbmFwc2hvdERhdGEuY2FyZXRSZXN0b3JhdGlvbkRhdGEpOworICAgIH0KKyAgICAKKyAgICAvLyBGaW5kIHRoZSBjYXJldCBkYXRhIHdlIG1pZ2h0IGhhdmUgcmVjb3JkZWQgaW4gdGhlIGh0bWwKKyAgICB2YXIgY2FyZXRQYXJlbnRzID0gWGluaGEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0aGlzLl9kb2MuYm9keSwneGluaGEtdW5kby1jYXJldCcpOworICAgIAorICAgIC8vIEJvZHkgaXRzZWxmIG1heSBiZSB0aGUgb25lCisgICAgaWYoWGluaGEuX2hhc0NsYXNzKHRoaXMuX2RvYy5ib2R5LCAneGluaGEtdW5kby1jYXJldCcpKQorICAgIHsKKyAgICAgIGNhcmV0UGFyZW50c1tjYXJldFBhcmVudHMubGVuZ3RoXSA9IHRoaXMuX2RvYy5ib2R5OworICAgIH0KKyAgICAgICAgICAgIAorICAgIC8vIEp1c3QgaW4gY2FzZSBzb21lIGJ1ZyBoYXBwZW5lZCBhbmQgdGhlcmUgd2FzIG1vcmUgdGhhbiBvbmUgY2FyZXQgc2F2ZWQKKyAgICAvLyAgd2Ugd2lsbCBkbyB0aGVtIGFsbCB0byBjbGVhciB0aGVtLCBidXQgdGhlcmUgc2hvdWxkIG9ubHkgcmVhbGx5IGJlIDAgb3IgMQorICAgIGZvcih2YXIgaSA9IDA7IGkgPCBjYXJldFBhcmVudHMubGVuZ3RoOyBpKyspCisgICAgeworICAgICAgaWYoY2FyZXRQYXJlbnRzW2ldLmdldEF0dHJpYnV0ZSgneGluaGEtdW5kby1jYXJldCcpLmxlbmd0aCkKKyAgICAgIHsKKyAgICAgICAgdmFyIGNhcmV0UmVzdG9yYXRpb25EYXRhID0gSlNPTi5wYXJzZShjYXJldFBhcmVudHNbaV0uZ2V0QXR0cmlidXRlKCd4aW5oYS11bmRvLWNhcmV0JykpOworICAgICAgICAKKyAgICAgICAgaWYoY2FyZXRQYXJlbnRzW2ldLmNoaWxkTm9kZXMubGVuZ3RoID4gY2FyZXRSZXN0b3JhdGlvbkRhdGEuY2FyZXRDaGlsZCkKKyAgICAgICAgeworICAgICAgICAgIHZhciBybmcgPSB0aGlzLmNyZWF0ZVJhbmdlKCk7CisgICAgICAgICAgcm5nLnNldFN0YXJ0KGNhcmV0UGFyZW50c1tpXS5jaGlsZE5vZGVzW2NhcmV0UmVzdG9yYXRpb25EYXRhLmNhcmV0Q2hpbGRdLCBjYXJldFJlc3RvcmF0aW9uRGF0YS5jYXJldE9mZnNldCk7CisgICAgICAgICAgcm5nLmNvbGxhcHNlKHRydWUpOyAvLyBjb2xsYXBzZSB0byB0aGUgc3RhcnQsIGFsdGhvdWdoIGVuZCB3b3VsZCBiZSBvayBJIHRoaW5rLCBzaG91bGQgYmUgdGhlIHNhbWUKKyAgICAgICAgICAKKyAgICAgICAgICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CisgICAgICAgICAgc2VsLmFkZFJhbmdlKHJuZyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIAorICAgICAgWGluaGEucmVtb3ZlQ2xhc3MoY2FyZXRQYXJlbnRzW2ldLCAneGluaGEtdW5kby1jYXJldCcpOworICAgICAgY2FyZXRQYXJlbnRzW2ldLnJlbW92ZUF0dHJpYnV0ZSgneGluaGEtdW5kby1jYXJldCcpOworICAgIH0KKyAgfQorICBjYXRjaChlKQorICB7CisgICAgLy8gQnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgc29tZXRoaW5nLCBJJ20gbm90IGdvaW5nIHRvIHRyeSBhbmQgCisgICAgLy8gIGltcGxlbWVudCB0aGlzIG9uIG9sZCBicm93c2Vycy4KKyAgICBpZihYaW5oYS5pc19nZWNrbyB8fCBYaW5oYS5pc193ZWJraXQpCisgICAgeworICAgICAgWGluaGEuZGVidWdNc2coJ0NhcmV0IHJlc3RvcmF0aW9uIGNvZGUgZm9yIHVuZG8gZmFpbGVkLiBJZiB5b3VyIGJyb3dzZXIgaXMgbW9kZXJuLCBkZXZlbG9wZXJzIHNob3VsZCBjaGVjayBpdCBvdXQgaW4gWGluaGFDb3JlLmpzIChzZWFyY2ggZm9yIGNhcmV0IHJlc3RvcmF0aW9uKS4nLCd3YXJuJyk7CisgICAgfQorICB9Cit9CisKKy8qKiBEaXNhYmxlcyAoZ3JleXMgb3V0KSB0aGUgYnV0dG9ucyBvZiB0aGUgdG9vbGJhcgorICogQHBhcmFtIHtBcnJheX0gZXhjZXB0IHRoaXMgYXJyYXkgY29udGFpbnMgaWRzIG9mIHRvb2xiYXIgb2JqZWN0cyB0aGF0IHdpbGwgbm90IGJlIGRpc2FibGVkCisgKi8KK1hpbmhhLnByb3RvdHlwZS5kaXNhYmxlVG9vbGJhciA9IGZ1bmN0aW9uKGV4Y2VwdCkKK3sKKyAgaWYgKCB0aGlzLl90aW1lclRvb2xiYXIgKQorICB7CisgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyVG9vbGJhcik7CisgIH0KKyAgaWYgKCB0eXBlb2YgZXhjZXB0ID09ICd1bmRlZmluZWQnICkKKyAgeworICAgIGV4Y2VwdCA9IFsgXTsKKyAgfQorICBlbHNlIGlmICggdHlwZW9mIGV4Y2VwdCAhPSAnb2JqZWN0JyApCisgIHsKKyAgICBleGNlcHQgPSBbZXhjZXB0XTsKKyAgfQorCisgIGZvciAoIHZhciBpIGluIHRoaXMuX3Rvb2xiYXJPYmplY3RzICkKKyAgeworICAgIHZhciBidG4gPSB0aGlzLl90b29sYmFyT2JqZWN0c1tpXTsKKyAgICBpZiAoIGV4Y2VwdC5jb250YWlucyhpKSApCisgICAgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIC8vIHByZXZlbnQgaXRlcmF0aW5nIG92ZXIgd3JvbmcgdHlwZQorICAgIGlmICggdHlwZW9mIGJ0bi5zdGF0ZSAhPSAnZnVuY3Rpb24nICkKKyAgICB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgYnRuLnN0YXRlKCJlbmFibGVkIiwgZmFsc2UpOworICB9Cit9OworLyoqIEVuYWJsZXMgdGhlIHRvb2xiYXIgYWdhaW4gd2hlbiBkaXNhYmxlZCBieSBkaXNhYmxlVG9vbGJhcigpICovCitYaW5oYS5wcm90b3R5cGUuZW5hYmxlVG9vbGJhciA9IGZ1bmN0aW9uKCkKK3sKKyAgdGhpcy51cGRhdGVUb29sYmFyKCk7Cit9OworCisvKiogVXBkYXRlcyBlbmFibGVkL2Rpc2FibGUvYWN0aXZlIHN0YXRlIG9mIHRoZSB0b29sYmFyIGVsZW1lbnRzLCB0aGUgc3RhdHVzYmFyIGFuZCBvdGhlciB0aGluZ3MKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBldmVyeSBrZXkgc3Ryb2tlIGFzIHdlbGwgYXMgYnkgYSB0aW1lciBvbiBhIHJlZ3VsYXIgYmFzaXMuPGJyIC8+CisgKiAgUGx1Z2lucyBoYXZlIHRoZSBvcHBvcnR1bml0eSB0byBpbXBsZW1lbnQgYSBwcm90b3R5cGUub25VcGRhdGVUb29sYmFyKCkgbWV0aG9kLCB3aGljaCB3aWxsIGFsc28KKyAqICBiZSBjYWxsZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAqIEBwYXJhbSB7Qm9vbGVhbn0gbm9TdGF0dXMgcHJpdmF0ZSB1c2UgRXhlbXB0IHVwZGF0aW5nIG9mIHN0YXR1c2JhcgorICovCisvLyBGSVhNRSA6IHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgc3BsaXR0ZWQgaW4gbW9yZSBmdW5jdGlvbnMuCisvLyBJdCBpcyBhY3R1YWxseSB0byBoZWF2eSB0byBiZSB1bmRlcnN0YWJsZSBhbmQgdmVyeSBzY2FyeSB0byBtYW5pcHVsYXRlCitYaW5oYS5wcm90b3R5cGUudXBkYXRlVG9vbGJhciA9IGZ1bmN0aW9uKG5vU3RhdHVzKQoreworICBpZiAodGhpcy5zdXNwZW5kVXBkYXRlVG9vbGJhcikKKyAgeworICAgIHJldHVybjsKKyAgfQorICB2YXIgZG9jID0gdGhpcy5fZG9jOworICB2YXIgdGV4dCA9ICh0aGlzLl9lZGl0TW9kZSA9PSAidGV4dG1vZGUiKTsKKyAgdmFyIGFuY2VzdG9ycyA9IG51bGw7CisgIGlmICggIXRleHQgKQorICB7CisgICAgYW5jZXN0b3JzID0gdGhpcy5nZXRBbGxBbmNlc3RvcnMoKTsKKyAgICBpZiAoIHRoaXMuY29uZmlnLnN0YXR1c0JhciAmJiAhbm9TdGF0dXMgKQorICAgIHsKKyAgICAgIHdoaWxlICggdGhpcy5fc3RhdHVzQmFySXRlbXMubGVuZ3RoICkKKyAgICAgIHsgCisgICAgICAgIHZhciBpdGVtID0gdGhpcy5fc3RhdHVzQmFySXRlbXMucG9wKCk7CisgICAgICAgIGl0ZW0uZWwgPSBudWxsOworICAgICAgICBpdGVtLmVkaXRvciA9IG51bGw7CisgICAgICAgIGl0ZW0ub25jbGljayA9IG51bGw7CisgICAgICAgIGl0ZW0ub25jb250ZXh0bWVudSA9IG51bGw7CisgICAgICAgIGl0ZW0uX3hpbmhhX2RvbTBFdmVudHMuY2xpY2sgPSBudWxsOworICAgICAgICBpdGVtLl94aW5oYV9kb20wRXZlbnRzLmNvbnRleHRtZW51ID0gbnVsbDsKKyAgICAgICAgaXRlbSA9IG51bGw7CisgICAgICB9CisKKyAgICAgIHRoaXMuX3N0YXR1c0JhclRyZWUuaW5uZXJIVE1MID0gJyAnOworICAgICAgdGhpcy5fc3RhdHVzQmFyVHJlZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShYaW5oYS5fbGMoIlBhdGgiKSArICI6ICIpKTsgCisgICAgICBmb3IgKCB2YXIgaSA9IGFuY2VzdG9ycy5sZW5ndGg7IC0taSA+PSAwOyApCisgICAgICB7CisgICAgICAgIHZhciBlbCA9IGFuY2VzdG9yc1tpXTsKKyAgICAgICAgaWYgKCAhZWwgKQorICAgICAgICB7CisgICAgICAgICAgLy8gaGVsbCBrbm93cyB3aHkgd2UgZ2V0IGhlcmU7IHRoaXMKKyAgICAgICAgICAvLyBjb3VsZCBiZSBhIGNsYXNzaWMgZXhhbXBsZSBvZiB3aHkKKyAgICAgICAgICAvLyBpdCdzIGdvb2QgdG8gY2hlY2sgZm9yIGNvbmRpdGlvbnMKKyAgICAgICAgICAvLyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIGhhcHBlbiA7LSkKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKKyAgICAgICAgYS5ocmVmID0gImphdmFzY3JpcHQ6dm9pZCgwKTsiOworICAgICAgICBhLmVsID0gZWw7CisgICAgICAgIGEuZWRpdG9yID0gdGhpczsKKyAgICAgICAgdGhpcy5fc3RhdHVzQmFySXRlbXMucHVzaChhKTsKKyAgICAgICAgWGluaGEuYWRkRG9tMEV2ZW50KAorICAgICAgICAgIGEsCisgICAgICAgICAgJ2NsaWNrJywKKyAgICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRoaXMuYmx1cigpOworICAgICAgICAgICAgdGhpcy5lZGl0b3Iuc2VsZWN0Tm9kZUNvbnRlbnRzKHRoaXMuZWwpOworICAgICAgICAgICAgdGhpcy5lZGl0b3IudXBkYXRlVG9vbGJhcih0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgICk7CisgICAgICAgIFhpbmhhLmFkZERvbTBFdmVudCgKKyAgICAgICAgICBhLAorICAgICAgICAgICdjb250ZXh0bWVudScsCisgICAgICAgICAgZnVuY3Rpb24oKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRPRE86IGFkZCBjb250ZXh0IG1lbnUgaGVyZQorICAgICAgICAgICAgdGhpcy5ibHVyKCk7CisgICAgICAgICAgICB2YXIgaW5mbyA9ICJJbmxpbmUgc3R5bGU6XG5cbiI7CisgICAgICAgICAgICBpbmZvICs9IHRoaXMuZWwuc3R5bGUuY3NzVGV4dC5zcGxpdCgvO1xzKi8pLmpvaW4oIjtcbiIpOworICAgICAgICAgICAgYWxlcnQoaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICApOworICAgICAgICB2YXIgdHh0ID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICBzd2l0Y2ggKHR4dCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgdHh0ID0gJ3N0cm9uZyc7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnaSc6CisgICAgICAgICAgICB0eHQgPSAnZW0nOworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJ3N0cmlrZSc6CisgICAgICAgICAgICB0eHQgPSAnZGVsJzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZW9mIGVsLnN0eWxlICE9ICd1bmRlZmluZWQnKQorICAgICAgICB7CisgICAgICAgICAgYS50aXRsZSA9IGVsLnN0eWxlLmNzc1RleHQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBlbC5pZCApCisgICAgICAgIHsKKyAgICAgICAgICB0eHQgKz0gIiMiICsgZWwuaWQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBlbC5jbGFzc05hbWUgKQorICAgICAgICB7CisgICAgICAgICAgdHh0ICs9ICIuIiArIGVsLmNsYXNzTmFtZTsKKyAgICAgICAgfQorICAgICAgICBhLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHR4dCkpOworICAgICAgICB0aGlzLl9zdGF0dXNCYXJUcmVlLmFwcGVuZENoaWxkKGEpOworICAgICAgICBpZiAoIGkgIT09IDAgKQorICAgICAgICB7CisgICAgICAgICAgdGhpcy5fc3RhdHVzQmFyVHJlZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcuZnJvbUNoYXJDb2RlKDB4YmIpKSk7CisgICAgICAgIH0KKyAgICAgICAgWGluaGEuZnJlZUxhdGVyKGEpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGZvciAoIHZhciBjbWQgaW4gdGhpcy5fdG9vbGJhck9iamVjdHMgKQorICB7CisgICAgdmFyIGJ0biA9IHRoaXMuX3Rvb2xiYXJPYmplY3RzW2NtZF07CisgICAgdmFyIGluQ29udGV4dCA9IHRydWU7CisgICAgLy8gcHJldmVudCBpdGVyYXRpbmcgb3ZlciB3cm9uZyB0eXBlCisgICAgaWYgKCB0eXBlb2YgYnRuLnN0YXRlICE9ICdmdW5jdGlvbicgKQorICAgIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpZiAoIGJ0bi5jb250ZXh0ICYmICF0ZXh0ICkKKyAgICB7CisgICAgICB2YXIgY29udGV4dHMgPSB0eXBlb2YgYnRuLmNvbnRleHQgPT0gJ29iamVjdCcgPyBidG4uY29udGV4dCA6IFsgYnRuLmNvbnRleHQgXTsKKyAgICAgIGZvcih2YXIgY29udGV4dF9pID0gMDsgY29udGV4dF9pIDwgY29udGV4dHMubGVuZ3RoOyBjb250ZXh0X2krKykKKyAgICAgIHsKKyAgICAgICAgaW5Db250ZXh0ID0gZmFsc2U7CisgICAgICAgIHZhciBjb250ZXh0ID0gY29udGV4dHNbY29udGV4dF9pXTsKKyAgICAgICAgdmFyIGF0dHJzID0gW107CisgICAgICAgIGlmICggLyguKilcWyguKj8pXF0vLnRlc3QoY29udGV4dCkgKQorICAgICAgICB7CisgICAgICAgICAgY29udGV4dCA9IFJlZ0V4cC4kMTsKKyAgICAgICAgICBhdHRycyA9IFJlZ0V4cC4kMi5zcGxpdCgiLCIpOworICAgICAgICB9CisgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnRvTG93ZXJDYXNlKCk7CisgICAgICAgIHZhciBtYXRjaCA9IChjb250ZXh0ID09ICIqIik7CisgICAgICAgIGZvciAoIHZhciBrID0gMDsgayA8IGFuY2VzdG9ycy5sZW5ndGg7ICsrayApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoICFhbmNlc3RvcnNba10gKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHRoZSBpbXBvc3NpYmxlIHJlYWxseSBoYXBwZW5zLgorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICggbWF0Y2ggfHwgKCBhbmNlc3RvcnNba10udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09IGNvbnRleHQgKSApCisgICAgICAgICAgeworICAgICAgICAgICAgaW5Db250ZXh0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHZhciBjb250ZXh0U3BsaXQgPSBudWxsOworICAgICAgICAgICAgdmFyIGF0dCA9IG51bGw7CisgICAgICAgICAgICB2YXIgY29tcCA9IG51bGw7CisgICAgICAgICAgICB2YXIgYXR0VmFsID0gbnVsbDsKKyAgICAgICAgICAgIGZvciAoIHZhciBrYSA9IDA7IGthIDwgYXR0cnMubGVuZ3RoOyArK2thICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY29udGV4dFNwbGl0ID0gYXR0cnNba2FdLm1hdGNoKC8oLiopKD09fCE9fD09PXwhPT18Pnw+PXw8fDw9KSguKikvKTsKKyAgICAgICAgICAgICAgYXR0ID0gY29udGV4dFNwbGl0WzFdOworICAgICAgICAgICAgICBjb21wID0gY29udGV4dFNwbGl0WzJdOworICAgICAgICAgICAgICBhdHRWYWwgPSBjb250ZXh0U3BsaXRbM107CisKKyAgICAgICAgICAgICAgaWYgKCFldmFsKGFuY2VzdG9yc1trXVthdHRdICsgY29tcCArIGF0dFZhbCkpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbkNvbnRleHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBpbkNvbnRleHQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmKGluQ29udGV4dCkgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIGJ0bi5zdGF0ZSgiZW5hYmxlZCIsICghdGV4dCB8fCBidG4udGV4dCkgJiYgaW5Db250ZXh0KTsKKyAgICBpZiAoIHR5cGVvZiBjbWQgPT0gImZ1bmN0aW9uIiApCisgICAgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIC8vIGxvb2staXQtdXAgaW4gdGhlIGN1c3RvbSBkcm9wZG93biBib3hlcworICAgIHZhciBkcm9wZG93biA9IHRoaXMuY29uZmlnLmN1c3RvbVNlbGVjdHNbY21kXTsKKyAgICBpZiAoICggIXRleHQgfHwgYnRuLnRleHQgKSAmJiAoIHR5cGVvZiBkcm9wZG93biAhPSAidW5kZWZpbmVkIiApICkKKyAgICB7CisgICAgICBkcm9wZG93bi5yZWZyZXNoKHRoaXMpOworICAgICAgY29udGludWU7CisgICAgfQorICAgIHN3aXRjaCAoY21kKQorICAgIHsKKyAgICAgIGNhc2UgImZvbnRuYW1lIjoKKyAgICAgIGNhc2UgImZvbnRzaXplIjoKKyAgICAgICAgaWYgKCAhdGV4dCApCisgICAgICAgIHsKKyAgICAgICAgICB0cnkKKyAgICAgICAgICB7CisgICAgICAgICAgICB2YXIgdmFsdWUgPSAoIiIgKyBkb2MucXVlcnlDb21tYW5kVmFsdWUoY21kKSkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgIGlmICggIXZhbHVlICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYnRuLmVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IDA7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBIQUNLIC0tIHJldHJpZXZlIHRoZSBjb25maWcgb3B0aW9uIGZvciB0aGlzCisgICAgICAgICAgICAvLyBjb21ibyBib3guICBXZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgdGhlCisgICAgICAgICAgICAvLyB2YXJpYWJsZSBpbiBjb25maWcgaGFzIHRoZSBzYW1lIG5hbWUgYXMKKyAgICAgICAgICAgIC8vIGJ1dHRvbiBuYW1lIGluIHRoZSB0b29sYmFyLgorICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLmNvbmZpZ1tjbWRdOworICAgICAgICAgICAgdmFyIHNlbGVjdGVkVmFsdWUgPSBudWxsOworICAgICAgICAgICAgZm9yICggdmFyIGogaW4gb3B0aW9ucyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAvLyBGSVhNRTogdGhlIGZvbGxvd2luZyBsaW5lIGlzIHNjYXJ5LgorICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhqICsgJzogJyArIG9wdGlvbnNbal0ucmVwbGFjZSgvLFxzKi9nLCAnLCAnKS5zdWJzdHIoMCwgdmFsdWUubGVuZ3RoKS50b0xvd2VyQ2FzZSgpICsgJyA9PyAnICsgdmFsdWUpOworICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgaWYgKCAoIGoudG9Mb3dlckNhc2UoKSA9PSB2YWx1ZSApIHx8ICggb3B0aW9uc1tqXS5zdWJzdHIoMCwgdmFsdWUubGVuZ3RoKS50b0xvd2VyQ2FzZSgpID09IHZhbHVlICkgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IG9wdGlvbnNbal07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgCisgICAgICAgICAgICAgIC8vIFRoZSBmb250bmFtZSBpcyB0cm91Ymxlc29tZSwgJ2ZvbyxiYXInIG1heSBiZWNvbWUgJ2ZvbywgYmFyJyBpbiB0aGUgZWxlbWVudAorICAgICAgICAgICAgICAvLyBhbmQgJ2ZvbyBiYXIsIGZvb2JhcicgbWF5IGJlY29tZSAnImZvbyBiYXIiLCBmb29iYXInCisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBpZihjbWQgPT0gJ2ZvbnRuYW1lJykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciBmaXhlZE9wdCA9IG9wdGlvbnNbal0ucmVwbGFjZSgvLFxzKi9nLCAnLCAnKTsKKyAgICAgICAgICAgICAgICBmaXhlZE9wdD0gZml4ZWRPcHQucmVwbGFjZSgvKF58LFxzKShbYS16XSsoXHNbYS16XSspKykoLHwkKS8sICckMSIkMiIkNCcpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIERlYnVnZ2luZyB0byB3b3JrIG91dCB3aHkgdGhpbmdzIGFyZSBub3QgbWF0Y2hpbmchCisgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZml4ZWRPcHQuc3Vic3RyKDAsIHZhbHVlLmxlbmd0aCkudG9Mb3dlckNhc2UoKSArICc9PycgKyB2YWx1ZSApOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICggKCBmaXhlZE9wdC5zdWJzdHIoMCwgdmFsdWUubGVuZ3RoKS50b0xvd2VyQ2FzZSgpID09IHZhbHVlICkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWUgPSBvcHRpb25zW2pdOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmKHNlbGVjdGVkVmFsdWUgIT0gbnVsbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLy8gRmluZCB0aGUgc2VsZWN0ZWQgdmFsdWUgaW4gdGhlIHRvb2xiYXIgZWxlbWVudAorICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5fdG9vbGJhck9iamVjdHNbY21kXS5lbGVtZW50Lm9wdGlvbnMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZih0aGlzLl90b29sYmFyT2JqZWN0c1tjbWRdLmVsZW1lbnQub3B0aW9uc1tpXS52YWx1ZSA9PSBzZWxlY3RlZFZhbHVlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXJPYmplY3RzW2NtZF0uZWxlbWVudC5zZWxlY3RlZEluZGV4ID0gaTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB0aGlzLl90b29sYmFyT2JqZWN0c1tjbWRdLmVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBjYXRjaChleCkge30KKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8vIEl0J3MgYmV0dGVyIHRvIHNlYXJjaCBmb3IgdGhlIGZvcm1hdCBibG9jayBieSB0YWcgbmFtZSBmcm9tIHRoZQorICAgICAgLy8gIGN1cnJlbnQgc2VsZWN0aW9uIHVwd2FyZHMsIGJlY2F1c2UgSUUgaGFzIGEgdGVuZGFuY3kgdG8gcmV0dXJuCisgICAgICAvLyAgdGhpbmdzIGxpa2UgJ2hlYWRpbmcgMScgZm9yICdoMScsIHdoaWNoIGJyZWFrcyB0aGluZ3MgaWYgeW91IHdhbnQKKyAgICAgIC8vICB0byBjYWxsIHlvdXIgaGVhZGluZyBibG9ja3MgJ2hlYWRlciAxJy4gIFN0dXBpZCBNUy4KKyAgICAgIGNhc2UgImZvcm1hdGJsb2NrIjoKKyAgICAgICAgdmFyIGJsb2NrcyA9IFtdOworICAgICAgICBmb3IgKCB2YXIgaW5kZXhCbG9jayBpbiB0aGlzLmNvbmZpZy5mb3JtYXRibG9jayApCisgICAgICAgIHsKKwkgIHZhciBibG9ja25hbWUgPSB0aGlzLmNvbmZpZy5mb3JtYXRibG9ja1tpbmRleEJsb2NrXTsKKyAgICAgICAgICAvLyBwcmV2ZW50IGl0ZXJhdGluZyBvdmVyIHdyb25nIHR5cGUKKyAgICAgICAgICBpZiAoIHR5cGVvZiBibG9ja25hbWUgID09ICdzdHJpbmcnICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBibG9ja3NbYmxvY2tzLmxlbmd0aF0gPSB0aGlzLmNvbmZpZy5mb3JtYXRibG9ja0RldGVjdG9yW2Jsb2NrbmFtZV0gfHwgYmxvY2tuYW1lOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZhciBtYXRjaCA9IHRoaXMuX2dldEZpcnN0QW5jZXN0b3JBbmRXaHkodGhpcy5nZXRTZWxlY3Rpb24oKSwgYmxvY2tzKTsKKyAgICAgICAgdmFyIGRlZXBlc3RBbmNlc3RvciA9IG1hdGNoWzBdOworCisgICAgICAgIGlmICggZGVlcGVzdEFuY2VzdG9yICkKKyAgICAgICAgeworICAgICAgICAgIC8vIEZpbmQgdGhlIHNlbGVjdGVkIHZhbHVlIGluIHRoZSB0b29sYmFyIGVsZW1lbnQKKyAgICAgICAgICBkZWVwZXN0QW5jZXN0b3IgPSBkZWVwZXN0QW5jZXN0b3IudGFnTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLl90b29sYmFyT2JqZWN0c1tjbWRdLmVsZW1lbnQub3B0aW9ucy5sZW5ndGg7IGkrKykKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZih0aGlzLl90b29sYmFyT2JqZWN0c1tjbWRdLmVsZW1lbnQub3B0aW9uc1tpXS52YWx1ZSA9PSBkZWVwZXN0QW5jZXN0b3IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXJPYmplY3RzW2NtZF0uZWxlbWVudC5zZWxlY3RlZEluZGV4ID0gaTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGJ0bi5lbGVtZW50LnNlbGVjdGVkSW5kZXggPSAwOworICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgY2FzZSAidGV4dGluZGljYXRvciI6CisgICAgICAgIGlmICggIXRleHQgKQorICAgICAgICB7CisgICAgICAgICAgdHJ5CisgICAgICAgICAgeworICAgICAgICAgICAgdmFyIHN0eWxlID0gYnRuLmVsZW1lbnQuc3R5bGU7CisgICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBYaW5oYS5fbWFrZUNvbG9yKGRvYy5xdWVyeUNvbW1hbmRWYWx1ZShYaW5oYS5pc19pZSA/ICJiYWNrY29sb3IiIDogImhpbGl0ZWNvbG9yIikpOworICAgICAgICAgICAgaWYgKCAvdHJhbnNwYXJlbnQvaS50ZXN0KHN0eWxlLmJhY2tncm91bmRDb2xvcikgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvLyBNb3ppbGxhCisgICAgICAgICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IFhpbmhhLl9tYWtlQ29sb3IoZG9jLnF1ZXJ5Q29tbWFuZFZhbHVlKCJiYWNrY29sb3IiKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHlsZS5jb2xvciA9IFhpbmhhLl9tYWtlQ29sb3IoZG9jLnF1ZXJ5Q29tbWFuZFZhbHVlKCJmb3JlY29sb3IiKSk7CisgICAgICAgICAgICBzdHlsZS5mb250RmFtaWx5ID0gZG9jLnF1ZXJ5Q29tbWFuZFZhbHVlKCJmb250bmFtZSIpOworICAgICAgICAgICAgc3R5bGUuZm9udFdlaWdodCA9IGRvYy5xdWVyeUNvbW1hbmRTdGF0ZSgiYm9sZCIpID8gImJvbGQiIDogIm5vcm1hbCI7CisgICAgICAgICAgICBzdHlsZS5mb250U3R5bGUgPSBkb2MucXVlcnlDb21tYW5kU3RhdGUoIml0YWxpYyIpID8gIml0YWxpYyIgOiAibm9ybWFsIjsKKyAgICAgICAgICB9IGNhdGNoIChleCkgeworICAgICAgICAgICAgLy8gYWxlcnQoZSArICJcblxuIiArIGNtZCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgY2FzZSAiaHRtbG1vZGUiOgorICAgICAgICBidG4uc3RhdGUoImFjdGl2ZSIsIHRleHQpOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgImxlZnR0b3JpZ2h0IjoKKyAgICAgIGNhc2UgInJpZ2h0dG9sZWZ0IjoKKyAgICAgICAgdmFyIGVsdEJsb2NrID0gdGhpcy5nZXRQYXJlbnRFbGVtZW50KCk7CisgICAgICAgIHdoaWxlICggZWx0QmxvY2sgJiYgIVhpbmhhLmlzQmxvY2tFbGVtZW50KGVsdEJsb2NrKSApCisgICAgICAgIHsKKyAgICAgICAgICBlbHRCbG9jayA9IGVsdEJsb2NrLnBhcmVudE5vZGU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBlbHRCbG9jayApCisgICAgICAgIHsKKyAgICAgICAgICBidG4uc3RhdGUoImFjdGl2ZSIsIChlbHRCbG9jay5zdHlsZS5kaXJlY3Rpb24gPT0gKChjbWQgPT0gInJpZ2h0dG9sZWZ0IikgPyAicnRsIiA6ICJsdHIiKSkpOworICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgY21kID0gY21kLnJlcGxhY2UoLyh1bik/b3JkZXJlZGxpc3QvaSwgImluc2VydCQxb3JkZXJlZGxpc3QiKTsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICBidG4uc3RhdGUoImFjdGl2ZSIsICghdGV4dCAmJiBkb2MucXVlcnlDb21tYW5kU3RhdGUoY21kKSkpOworICAgICAgICB9IGNhdGNoIChleCkge30KKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICAvLyB0YWtlIHVuZG8gc25hcHNob3RzCisgIGlmICggdGhpcy5fY3VzdG9tVW5kbyAmJiAhdGhpcy5fdGltZXJVbmRvICkKKyAgeworICAgIHRoaXMuX3VuZG9UYWtlU25hcHNob3QoKTsKKyAgICB2YXIgZWRpdG9yID0gdGhpczsKKyAgICB0aGlzLl90aW1lclVuZG8gPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBlZGl0b3IuX3RpbWVyVW5kbyA9IG51bGw7IH0sIHRoaXMuY29uZmlnLnVuZG9UaW1lb3V0KTsKKyAgfQorICB0aGlzLmZpcmVQbHVnaW5FdmVudCgnb25VcGRhdGVUb29sYmFyJyk7Cit9OworCisvKiogUmV0dXJucyBhIGVkaXRvciBvYmplY3QgcmVmZXJlbmNlZCBieSB0aGUgaWQgb3IgbmFtZSBvZiB0aGUgdGV4dGFyZWEgb3IgdGhlIHRleHRhcmVhIG5vZGUgaXRzZWxmCisgKiBGb3IgZXhhbXBsZSB0byByZXRyaWV2ZSB0aGUgSFRNTCBvZiBhbiBlZGl0b3IgbWFkZSBvdXQgb2YgdGhlIHRleHRhcmVhIHdpdGggdGhlIGlkICJteVRleHRBcmVhIiB5b3Ugd291bGQgZG88YnIgLz4KKyAqIDxjb2RlPgorICoJIHZhciBlZGl0b3IgPSBYaW5oYS5nZXRFZGl0b3IoIm15VGV4dEFyZWEiKTsKKyAqICAgdmFyIGh0bWwgPSBlZGl0b3IuZ2V0RWRpdG9yQ29udGVudCgpOyAKKyAqIDwvY29kZT4KKyAqIEByZXR1cm5zIHtYaW5oYXxudWxsfSAKKyAqIEBwYXJhbSB7U3RyaW5nfERvbU5vZGV9IHJlZiBpZCBvciBuYW1lIG9mIHRoZSB0ZXh0YXJlYSBvciB0aGUgdGV4dGFyZWEgbm9kZSBpdHNlbGYKKyAqLworWGluaGEuZ2V0RWRpdG9yID0gZnVuY3Rpb24ocmVmKQoreworICBmb3IgKCB2YXIgaSA9IF9feGluaGFzLmxlbmd0aDsgaS0tOyApCisgIHsKKyAgICB2YXIgZWRpdG9yID0gX194aW5oYXNbaV07CisgICAgaWYgKCBlZGl0b3IgJiYgKCBlZGl0b3IuX3RleHRBcmVhLmlkID09IHJlZiB8fCBlZGl0b3IuX3RleHRBcmVhLm5hbWUgPT0gcmVmIHx8IGVkaXRvci5fdGV4dEFyZWEgPT0gcmVmICkgKQorICAgIHsKKyAgICAgIHJldHVybiBlZGl0b3I7CisgICAgfQorICB9CisgIHJldHVybiBudWxsOworfTsKKy8qKiBTb21ldGltZXMgb25lIHdhbnRzIHRvIGNhbGwgYSBwbHVnaW4gbWV0aG9kIGRpcmVjdGx5LCBlLmcuIGZyb20gb3V0c2lkZSB0aGUgZWRpdG9yLgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXNwZWN0aXZlIGVkaXRvcidzIGluc3RhbmNlIG9mIGEgcGx1Z2luLgorICogRm9yIGV4YW1wbGUgeW91IG1pZ2h0IHdhbnQgdG8gaGF2ZSBhIGJ1dHRvbiB0byB0cmlnZ2VyIFNhdmVTdWJtaXQncyBzYXZlKCkgbWV0aG9kOjxiciAvPgorICogPGNvZGU+CisgKgkgJmx0O2J1dHRvbiB0eXBlPSJidXR0b24iIG9uY2xpY2s9IlhpbmhhLmdldEVkaXRvcignbXlUZXh0QXJlYScpLmdldFBsdWdpbkluc3RhbmNlKCdTYXZlU3VibWl0Jykuc2F2ZSgpO3JldHVybiBmYWxzZTsiJmd0O1NhdmUmbHQ7L2J1dHRvbiZndDsKKyAqIDwvY29kZT4KKyAqIEByZXR1cm5zIHtQbHVnaW5PYmplY3R8bnVsbH0gCisgKiBAcGFyYW0ge1N0cmluZ30gcGx1Z2luIG5hbWUgb2YgdGhlIHBsdWdpbgorICovCitYaW5oYS5wcm90b3R5cGUuZ2V0UGx1Z2luSW5zdGFuY2UgPSBmdW5jdGlvbiAocGx1Z2luKQoreworICBpZiAodGhpcy5wbHVnaW5zW3BsdWdpbl0pCisgIHsKKyAgICByZXR1cm4gdGhpcy5wbHVnaW5zW3BsdWdpbl0uaW5zdGFuY2U7CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK307CisKKy8qKiBJZiB0aGUgZ2l2ZW4gb3IgY3VycmVudCBzZWxlY3Rpb24gY29tcHJpc2VzIG9yIGlzIGVuY2xvc2VkIGJ5IAorICogICBvbmUgb2YgdGhlIGdpdmVuIHRhZyBuYW1lcywgcmV0dXJuIHRoZSBkZWVwZXN0IGVuY2xvc2VyLgorICogCisgKiAgRXhhbXBsZQorICogCisgKiAgICA8dWw+IDxsaT4gW0NhcmV0IEhlcmVdIDwvbGk+IDwvbGk+CisgKiAKKyAqIGVkaXRvci5nZXRFbGVtZW50SXNPckVuY2xvc2luZ1NlbGVjdGlvbihbJ3VsJywnbGknXSkKKyAqIAorICogd2lsbCByZXR1cm4gdGhlIGxpc3QgZWxlbWVudAorICogCisgKi8KKworWGluaGEucHJvdG90eXBlLmdldEVsZW1lbnRJc09yRW5jbG9zaW5nU2VsZWN0aW9uID0gZnVuY3Rpb24odHlwZXMsIHNlbCkKK3sKKyAgaWYoc2VsID09IG51bGwpIAorICB7CisgICAgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKKyAgfQorICAKKyAgdmFyIGN1cnJlbnRFbGVtZW50ID0gdGhpcy5hY3RpdmVFbGVtZW50KHNlbCkgPyB0aGlzLmFjdGl2ZUVsZW1lbnQoc2VsKSA6IHRoaXMuZ2V0UGFyZW50RWxlbWVudChzZWwpOworICAKKyAgCisgIHZhciB0eXBlTWF0Y2hlZCA9IGZhbHNlOworICBpZighKHR5cGVvZiBjdXJyZW50RWxlbWVudC50YWdOYW1lID09ICd1bmRlZmluZWQnKSkKKyAgeworICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykKKyAgICB7CisgICAgICBpZihjdXJyZW50RWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkubWF0Y2godHlwZXNbaV0udG9Mb3dlckNhc2UoKSkpCisgICAgICB7CisgICAgICAgIHR5cGVNYXRjaGVkID0gdHJ1ZTsgCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorICAKKyAgLy8gSXQgd2Fzbid0IHRoZSBzZWxlY3RlZCBlbGVtZW50LCBzZWUgaWYgdGhlcmUgaXMgYW4gYW5jZXN0b3IKKyAgaWYoIXR5cGVNYXRjaGVkKQorICB7CisgICAgY3VycmVudEVsZW1lbnQgPSBudWxsOworICAgIGN1cnJlbnRFbGVtZW50ID0gdGhpcy5fZ2V0Rmlyc3RBbmNlc3RvcihzZWwsIHR5cGVzKTsKKyAgfQorICAKKyAgcmV0dXJuIGN1cnJlbnRFbGVtZW50OworfTsKKworLyoqIFJldHVybnMgYW4gYXJyYXkgd2l0aCBhbGwgdGhlIGFuY2VzdG9yIG5vZGVzIG9mIHRoZSBzZWxlY3Rpb24gb3IgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uCisqIEByZXR1cm5zIHtBcnJheX0KKyovCitYaW5oYS5wcm90b3R5cGUuZ2V0QWxsQW5jZXN0b3JzID0gZnVuY3Rpb24oKQoreworICB2YXIgcCA9IHRoaXMuZ2V0UGFyZW50RWxlbWVudCgpOworICB2YXIgYSA9IFtdOworICB3aGlsZSAoIHAgJiYgKHAubm9kZVR5cGUgPT0gMSkgJiYgKCBwLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPSAnYm9keScgKSApCisgIHsKKyAgICBhLnB1c2gocCk7CisgICAgcCA9IHAucGFyZW50Tm9kZTsKKyAgfQorICBhLnB1c2godGhpcy5fZG9jLmJvZHkpOworICByZXR1cm4gYTsKK307CisKKy8qKiBUcmF2ZXJzZXMgdGhlIERPTSB1cHdhcmRzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgb2Ygb25lIG9mIHRoZSBzcGVjaWZpZWQgdHlwZXMKKyAqICBAcGFyYW0ge1NlbGVjdGlvbn0gc2VsICBTZWxlY3Rpb24gb2JqZWN0IGFzIHJldHVybmVkIGJ5IGdldFNlbGVjdGlvbgorICogIEBwYXJhbSB7QXJyYXl8U3RyaW5nfSB0eXBlcyBBcnJheSBvZiBtYXRjaGluZyBjcml0ZXJpYS4gIEVhY2ggY3JpdGVyaWEgaXMgZWl0aGVyIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHRhZyBuYW1lLCBvciBhIGNhbGxiYWNrIHVzZWQgdG8gc2VsZWN0IHRoZSBlbGVtZW50LgorICogIEByZXR1cm5zIHtEb21Ob2RlfG51bGx9IAorICovCitYaW5oYS5wcm90b3R5cGUuX2dldEZpcnN0QW5jZXN0b3IgPSBmdW5jdGlvbihzZWwsIHR5cGVzKQoreworICByZXR1cm4gdGhpcy5fZ2V0Rmlyc3RBbmNlc3RvckFuZFdoeShzZWwsIHR5cGVzKVswXTsKK307CisKKy8qKiBUcmF2ZXJzZXMgdGhlIERPTSB1cHdhcmRzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgb25lIG9mIHRoZSBzcGVjaWZpZWQgdHlwZXMsCisgKiAgYW5kIHdoaWNoIChvZiB0aGUgc3BlY2lmaWVkIHR5cGVzKSB0aGUgZm91bmQgZWxlbWVudCBzdWNjZXNzZnVsbHkgbWF0Y2hlZC4KKyAqICBAcGFyYW0ge1NlbGVjdGlvbn0gc2VsICBTZWxlY3Rpb24gb2JqZWN0IGFzIHJldHVybmVkIGJ5IGdldFNlbGVjdGlvbgorICogIEBwYXJhbSB7QXJyYXl8U3RyaW5nfSB0eXBlcyBBcnJheSBvZiBtYXRjaGluZyBjcml0ZXJpYS4gIEVhY2ggY3JpdGVyaWEgaXMgZWl0aGVyIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHRhZyBuYW1lLCBvciBhIGNhbGxiYWNrIHVzZWQgdG8gc2VsZWN0IHRoZSBlbGVtZW50LgorICogIEByZXR1cm5zIHtBcnJheX0gVGhlIGFycmF5IHdpbGwgbG9vayBsaWtlIFt7RG9tTm9kZXxudWxsfSwge0ludGVnZXJ8bnVsbH1dIC0tIHRoYXQgaXMsIGl0IGFsd2F5cyBjb250YWlucyB0d28gZWxlbWVudHMuICBUaGUgZmlyc3QgZWxlbWVudCBpcyB0aGUgZWxlbWVudCB0aGF0IG1hdGNoZWQsIG9yIG51bGwgaWYgbm8gbWF0Y2ggd2FzIGZvdW5kLiBUaGUgc2Vjb25kIGlzIHRoZSBudW1lcmljYWwgaW5kZXggdGhhdCBjYW4gYmUgdXNlZCB0byBpZGVudGlmeSB3aGljaCBlbGVtZW50IG9mIHRoZSAidHlwZXMiIHdhcyByZXNwb25zaWJsZSBmb3IgdGhlIG1hdGNoLiAgSXQgd2lsbCBiZSBudWxsIGlmIG5vIG1hdGNoIHdhcyBmb3VuZC4gIEl0IHdpbGwgYWxzbyBiZSBudWxsIGlmIHRoZSAidHlwZXMiIGFyZ3VtZW50IHdhcyBvbWl0dGVkLiAKKyAqLworWGluaGEucHJvdG90eXBlLl9nZXRGaXJzdEFuY2VzdG9yQW5kV2h5ID0gZnVuY3Rpb24oc2VsLCB0eXBlcykKK3sKKyAgdmFyIHBybnQgPSB0aGlzLmFjdGl2ZUVsZW1lbnQoc2VsKTsKKyAgaWYgKCBwcm50ID09PSBudWxsICkKKyAgeworICAgIC8vIEhtbSwgSSB0aGluayBYaW5oYS5nZXRQYXJlbnRFbGVtZW50KCkgd291bGQgZG8gdGhlIGpvYiBiZXR0ZXI/PyAtIEphbWVzCisgICAgdHJ5CisgICAgeworICAgICAgcHJudCA9IChYaW5oYS5pc19pZSA/IHRoaXMuY3JlYXRlUmFuZ2Uoc2VsKS5wYXJlbnRFbGVtZW50KCkgOiB0aGlzLmNyZWF0ZVJhbmdlKHNlbCkuY29tbW9uQW5jZXN0b3JDb250YWluZXIpOworICAgIH0KKyAgICBjYXRjaChleCkKKyAgICB7CisgICAgICByZXR1cm4gW251bGwsIG51bGxdOworICAgIH0KKyAgfQorCisgIGlmICggdHlwZW9mIHR5cGVzID09ICdzdHJpbmcnICkKKyAgeworICAgIHR5cGVzID0gW3R5cGVzXTsKKyAgfQorICByZXR1cm4gdGhpcy5fZ2V0Rmlyc3RBbmNlc3RvckZvck5vZGVBbmRXaHkocHJudCwgdHlwZXMpOworfTsKKyAKK1hpbmhhLnByb3RvdHlwZS5fZ2V0Rmlyc3RBbmNlc3RvckZvck5vZGVBbmRXaHkgPSBmdW5jdGlvbihub2RlLCB0eXBlcykgeworICB2YXIgcHJudCA9IG5vZGUucGFyZW50Tm9kZTsKKworICB3aGlsZSAoIHBybnQgKQorICB7CisgICAgaWYgKCBwcm50Lm5vZGVUeXBlID09IDEgKQorICAgIHsKKyAgICAgIGlmICggdHlwZXMgPT09IG51bGwgKQorICAgICAgeworCXJldHVybiBbcHJudCwgbnVsbF07CisgICAgICB9CisgICAgICBmb3IgKHZhciBpbmRleD0wOyBpbmRleDx0eXBlcy5sZW5ndGg7ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKHR5cGVvZiB0eXBlc1tpbmRleF0gPT0gJ3N0cmluZycgJiYgdHlwZXNbaW5kZXhdID09IHBybnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXsKKyAgICAgICAgICAvLyBDcml0ZXJpYSBpcyBhIHRhZyBuYW1lLiAgSXQgbWF0Y2hlcworCSAgcmV0dXJuIFtwcm50LCBpbmRleF07CisgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB0eXBlc1tpbmRleF0gPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlc1tpbmRleF0odGhpcywgcHJudCkpIHsKKyAgICAgICAgICAvLyBDcml0ZXJpYSBpcyBhIGNhbGxiYWNrLiAgSXQgbWF0Y2hlcworCSAgcmV0dXJuIFtwcm50LCBpbmRleF07CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKCBwcm50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnYm9keScgKQorICAgICAgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmICggcHJudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ3RhYmxlJyApCisgICAgICB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBwcm50ID0gcHJudC5wYXJlbnROb2RlOworICB9CisKKyAgcmV0dXJuIFtudWxsLCBudWxsXTsKK307CisKKy8qKiBUcmF2ZXJzZXMgdGhlIERPTSB1cHdhcmRzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgYSBibG9jayBsZXZlbCBlbGVtZW50CisgKiAgQHBhcmFtIHtTZWxlY3Rpb259IHNlbCAgU2VsZWN0aW9uIG9iamVjdCBhcyByZXR1cm5lZCBieSBnZXRTZWxlY3Rpb24KKyAqICBAcmV0dXJucyB7RG9tTm9kZXxudWxsfSAKKyAqLworWGluaGEucHJvdG90eXBlLl9nZXRBbmNlc3RvckJsb2NrID0gZnVuY3Rpb24oc2VsKQoreworICAvLyBTY2FuIHVwd2FyZHMgdG8gZmluZCBhIGJsb2NrIGxldmVsIGVsZW1lbnQgdGhhdCB3ZSBjYW4gY2hhbmdlIG9yIGFwcGx5IHRvCisgIHZhciBwcm50ID0gKFhpbmhhLmlzX2llID8gdGhpcy5jcmVhdGVSYW5nZShzZWwpLnBhcmVudEVsZW1lbnQgOiB0aGlzLmNyZWF0ZVJhbmdlKHNlbCkuY29tbW9uQW5jZXN0b3JDb250YWluZXIpOworCisgIHdoaWxlICggcHJudCAmJiAoIHBybnQubm9kZVR5cGUgPT0gMSApICkKKyAgeworICAgIHN3aXRjaCAoIHBybnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICkKKyAgICB7CisgICAgICBjYXNlICdkaXYnOgorICAgICAgY2FzZSAncCc6CisgICAgICBjYXNlICdhZGRyZXNzJzoKKyAgICAgIGNhc2UgJ2Jsb2NrcXVvdGUnOgorICAgICAgY2FzZSAnY2VudGVyJzoKKyAgICAgIGNhc2UgJ2RlbCc6CisgICAgICBjYXNlICdpbnMnOgorICAgICAgY2FzZSAncHJlJzoKKyAgICAgIGNhc2UgJ2gxJzoKKyAgICAgIGNhc2UgJ2gyJzoKKyAgICAgIGNhc2UgJ2gzJzoKKyAgICAgIGNhc2UgJ2g0JzoKKyAgICAgIGNhc2UgJ2g1JzoKKyAgICAgIGNhc2UgJ2g2JzoKKyAgICAgIGNhc2UgJ2g3JzoKKyAgICAgICAgLy8gQmxvY2sgRWxlbWVudAorICAgICAgICByZXR1cm4gcHJudDsKKworICAgICAgY2FzZSAnYm9keSc6CisgICAgICBjYXNlICdub2ZyYW1lcyc6CisgICAgICBjYXNlICdkZCc6CisgICAgICBjYXNlICdsaSc6CisgICAgICBjYXNlICd0aCc6CisgICAgICBjYXNlICd0ZCc6CisgICAgICBjYXNlICdub3NjcmlwdCcgOgorICAgICAgICAvLyBIYWx0aW5nIGVsZW1lbnQgKHN0b3Agc2VhcmNoaW5nKQorICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gS2VlcCBsb29raW4KKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIG51bGw7Cit9OworCisvKiogV2hhdCdzIHRoaXM/IGRvZXMgbm90aGluZywgaGFzIHRvIGJlIHJlbW92ZWQKKyAqIAorICogQGRlcHJlY2F0ZWQKKyAqLworWGluaGEucHJvdG90eXBlLl9jcmVhdGVJbXBsaWNpdEJsb2NrID0gZnVuY3Rpb24odHlwZSkKK3sKKyAgLy8gZXhwYW5kIGl0IHVudGlsIHdlIHJlYWNoIGEgYmxvY2sgZWxlbWVudCBpbiBlaXRoZXIgZGlyZWN0aW9uCisgIC8vIHRoZW4gd3JhcCB0aGUgc2VsZWN0aW9uIGluIGEgYmxvY2sgYW5kIHJldHVybgorICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKKyAgaWYgKCBYaW5oYS5pc19pZSApCisgIHsKKyAgICBzZWwuZW1wdHkoKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBzZWwuY29sbGFwc2VUb1N0YXJ0KCk7CisgIH0KKworICB2YXIgcm5nID0gdGhpcy5jcmVhdGVSYW5nZShzZWwpOworCisgIC8vIEV4cGFuZCBVUAorCisgIC8vIEV4cGFuZCBETgorfTsKKworCisKKy8qKgorICogIENhbGwgdGhpcyBmdW5jdGlvbiB0byBzdXJyb3VuZCB0aGUgZXhpc3RpbmcgSFRNTCBjb2RlIGluIHRoZSBzZWxlY3Rpb24gd2l0aAorICogIHlvdXIgdGFncy4gIEZJWE1FOiBidWdneSEgRG9uJ3QgdXNlIHRoaXMgCisgKiBAdG9kbzogd2hlbiB3aWxsIGl0IGJlIGRlcHJlY2F0ZWQgPyBDYW4gaXQgYmUgcmVtb3ZlZCBhbHJlYWR5ID8KKyAqIEBwcml2YXRlICh0YWdnZWQgcHJpdmF0ZSB0byBub3QgZnVydGhlciBwcm9tb3RlIHVzZSBvZiB0aGlzIGZ1bmN0aW9uKQorICogQGRlcHJlY2F0ZWQKKyAqLworWGluaGEucHJvdG90eXBlLnN1cnJvdW5kSFRNTCA9IGZ1bmN0aW9uKHN0YXJ0VGFnLCBlbmRUYWcpCit7CisgIHZhciBodG1sID0gdGhpcy5nZXRTZWxlY3RlZEhUTUwoKTsKKyAgLy8gdGhlIGZvbGxvd2luZyBhbHNvIGRlbGV0ZXMgdGhlIHNlbGVjdGlvbgorICB0aGlzLmluc2VydEhUTUwoc3RhcnRUYWcgKyBodG1sICsgZW5kVGFnKTsKK307CisKKy8qKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIHNvbWUgc2VsZWN0aW9uCisgKiAgQHJldHVybnMge0Jvb2xlYW59IAorICovCitYaW5oYS5wcm90b3R5cGUuaGFzU2VsZWN0ZWRUZXh0ID0gZnVuY3Rpb24oKQoreworICAvLyBGSVhNRTogY29tZSBfb25fIG1pc2hvbywgeW91IGNhbiBkbyBiZXR0ZXIgdGhhbiB0aGlzIDstKQorICByZXR1cm4gdGhpcy5nZXRTZWxlY3RlZEhUTUwoKSAhPT0gJyc7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQ2F0ZWdvcnk6IEVWRU5UIEhBTkRMRVJTCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiogb25DaGFuZ2UgaGFuZGxlciBmb3IgZHJvcGRvd25zIGluIHRvb2xiYXIgCisgKiAgQHByaXZhdGUKKyAqICBAcGFyYW0ge0RvbU5vZGV9IGVsIFJlZmVyZW5jZSB0byB0aGUgU0VMRUNUIG9iamVjdAorICogIEBwYXJhbSB7U3RyaW5nfSB0eHQgIFRoZSBuYW1lIG9mIHRoZSBzZWxlY3QgZmllbGQsIGFzIGluIGNvbmZpZy50b29sYmFyCisgKiAgQHJldHVybnMge0RvbU5vZGV8bnVsbH0gCisgKi8KK1hpbmhhLnByb3RvdHlwZS5fY29tYm9TZWxlY3RlZCA9IGZ1bmN0aW9uKGVsLCB0eHQpCit7CisgIHRoaXMuZm9jdXNFZGl0b3IoKTsKKyAgdmFyIHZhbHVlID0gZWwub3B0aW9uc1tlbC5zZWxlY3RlZEluZGV4XS52YWx1ZTsKKyAgc3dpdGNoICh0eHQpCisgIHsKKyAgICBjYXNlICJmb250bmFtZSI6CisgICAgY2FzZSAiZm9udHNpemUiOgorICAgICAgdGhpcy5leGVjQ29tbWFuZCh0eHQsIGZhbHNlLCB2YWx1ZSk7CisgICAgYnJlYWs7CisgICAgY2FzZSAiZm9ybWF0YmxvY2siOgorICAgICAgLy8gTW96aWxsYSBpbnNlcnRzIGFuIGVtcHR5IHRhZyAoPD4pIGlmIG5vIHBhcmFtZXRlciBpcyBwYXNzZWQgIAorICAgICAgaWYgKCAhdmFsdWUgKQorICAgICAgeworICAgICAgCXRoaXMudXBkYXRlVG9vbGJhcigpOworICAgICAgCWJyZWFrOworICAgICAgfQorICAgICAgaWYoICFYaW5oYS5pc19nZWNrbyB8fCB2YWx1ZSAhPT0gJ2Jsb2NrcXVvdGUnICkKKyAgICAgIHsKKyAgICAgICAgdmFsdWUgPSAiPCIgKyB2YWx1ZSArICI+IjsKKyAgICAgIH0KKyAgICAgIHRoaXMuZXhlY0NvbW1hbmQodHh0LCBmYWxzZSwgdmFsdWUpOworICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAvLyB0cnkgdG8gbG9vayBpdCB1cCBpbiB0aGUgcmVnaXN0ZXJlZCBkcm9wZG93bnMKKyAgICAgIHZhciBkcm9wZG93biA9IHRoaXMuY29uZmlnLmN1c3RvbVNlbGVjdHNbdHh0XTsKKyAgICAgIGlmICggdHlwZW9mIGRyb3Bkb3duICE9ICJ1bmRlZmluZWQiICkKKyAgICAgIHsKKyAgICAgICAgZHJvcGRvd24uYWN0aW9uKHRoaXMsIHZhbHVlLCBlbCwgdHh0KTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgYWxlcnQoIkZJWE1FOiBjb21ibyBib3ggIiArIHR4dCArICIgbm90IGltcGxlbWVudGVkIik7CisgICAgICB9CisgICAgYnJlYWs7CisgIH0KK307CisKKy8qKiBPcGVuIGEgcG9wdXAgdG8gc2VsZWN0IHRoZSBoaWxpdGVjb2xvciBvciBmb3JlY29sb3IKKyAqIEBwcml2YXRlCisgKiBAcGFyYW0ge1N0cmluZ30gY21kSUQgVGhlIGNvbW1hbmRlIElEIChoaWxpdGVjb2xvciBvciBmb3JlY29sb3IpCisgKi8KK1hpbmhhLnByb3RvdHlwZS5fY29sb3JTZWxlY3RvciA9IGZ1bmN0aW9uKGNtZElEKQoreworICB2YXIgZWRpdG9yID0gdGhpczsJLy8gZm9yIG5lc3RlZCBmdW5jdGlvbnMKKworICAvLyBiYWNrY29sb3Igb25seSB3b3JrcyB3aXRoIHVzZUNTUy9zdHlsZVdpdGhDU1MgKHNlZSBtb3ppbGxhIGJ1ZyAjMjc5MzMwICYgTWlkYXMgZG9jKQorICAvLyBhbmQgaXRzIGFsc28gbmljZXIgYXMgPGZvbnQ+CisgIGlmICggWGluaGEuaXNfZ2Vja28gKQorICB7CisgICAgdHJ5CisgICAgeworICAgICBlZGl0b3IuX2RvYy5leGVjQ29tbWFuZCgndXNlQ1NTJywgZmFsc2UsIGZhbHNlKTsgLy8gdXNlQ1NTIGRlcHJlY2F0ZWQgJiByZXBsYWNlZCBieSBzdHlsZVdpdGhDU1MgCisgICAgIGVkaXRvci5fZG9jLmV4ZWNDb21tYW5kKCdzdHlsZVdpdGhDU1MnLCBmYWxzZSwgdHJ1ZSk7IAorCisgICAgfSBjYXRjaCAoZXgpIHt9CisgIH0KKyAgCisgIHZhciBidG4gPSBlZGl0b3IuX3Rvb2xiYXJPYmplY3RzW2NtZElEXS5lbGVtZW50OworICB2YXIgaW5pdGNvbG9yOworICBpZiAoIGNtZElEID09ICdoaWxpdGVjb2xvcicgKQorICB7CisgICAgaWYgKCBYaW5oYS5pc19pZSApCisgICAgeworICAgICAgY21kSUQgPSAnYmFja2NvbG9yJzsKKyAgICAgIGluaXRjb2xvciA9IFhpbmhhLl9jb2xvclRvUmdiKGVkaXRvci5fZG9jLnF1ZXJ5Q29tbWFuZFZhbHVlKCJiYWNrY29sb3IiKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBpbml0Y29sb3IgPSBYaW5oYS5fY29sb3JUb1JnYihlZGl0b3IuX2RvYy5xdWVyeUNvbW1hbmRWYWx1ZSgiaGlsaXRlY29sb3IiKSk7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAJaW5pdGNvbG9yID0gWGluaGEuX2NvbG9yVG9SZ2IoZWRpdG9yLl9kb2MucXVlcnlDb21tYW5kVmFsdWUoImZvcmVjb2xvciIpKTsKKyAgfQorICB2YXIgY2JhY2sgPSBmdW5jdGlvbihjb2xvcikgeyBlZGl0b3IuX2RvYy5leGVjQ29tbWFuZChjbWRJRCwgZmFsc2UsIGNvbG9yKTsgfTsKKyAgaWYgKCBYaW5oYS5pc19pZSApCisgIHsKKyAgICB2YXIgcmFuZ2UgPSBlZGl0b3IuY3JlYXRlUmFuZ2UoZWRpdG9yLmdldFNlbGVjdGlvbigpKTsKKyAgICBjYmFjayA9IGZ1bmN0aW9uKGNvbG9yKQorICAgIHsKKyAgICAgIHJhbmdlLnNlbGVjdCgpOworICAgICAgZWRpdG9yLl9kb2MuZXhlY0NvbW1hbmQoY21kSUQsIGZhbHNlLCBjb2xvcik7CisgICAgfTsKKyAgfQorICB2YXIgcGlja2VyID0gbmV3IFhpbmhhLmNvbG9yUGlja2VyKAorICB7CisgIAljZWxsc2l6ZTplZGl0b3IuY29uZmlnLmNvbG9yUGlja2VyQ2VsbFNpemUsCisgIAljYWxsYmFjazpjYmFjaywKKyAgCWdyYW51bGFyaXR5OmVkaXRvci5jb25maWcuY29sb3JQaWNrZXJHcmFudWxhcml0eSwKKyAgCXdlYnNhZmU6ZWRpdG9yLmNvbmZpZy5jb2xvclBpY2tlcldlYlNhZmUsCisgIAlzYXZlY29sb3JzOmVkaXRvci5jb25maWcuY29sb3JQaWNrZXJTYXZlQ29sb3JzCisgIH0pOworICBwaWNrZXIub3BlbihlZGl0b3IuY29uZmlnLmNvbG9yUGlja2VyUG9zaXRpb24sIGJ0biwgaW5pdGNvbG9yKTsKK307CisKKy8qKiBUaGlzIGlzIGEgd3JhcHBlciBmb3IgdGhlIGJyb3dzZXIncyBleGVjQ29tbWFuZCBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhpbmdzIGxpa2UgCisgKiAgZm9ybWF0dGluZywgaW5zZXJ0aW5nIGVsZW1lbnRzLCBldGMuPGJyIC8+CisgKiAgSXQgaW50ZXJjZXB0cyBzb21lIGNvbW1hbmRzIGFuZCByZXBsYWNlcyB0aGVtIHdpdGggb3VyIG93biBpbXBsZW1lbnRhdGlvbi48YnIgLz4KKyAqICBJdCBwcm92aWRlcyBhIGhvb2sgZm9yIHRoZSAiZmlyZVBsdWdpbkV2ZW50IiBzeXN0ZW0gKCJvbkV4ZWNDb21tYW5kIikuPGJyIC8+PGJyIC8+CisgKiAgRm9yIHJlZmVyZW5jZSBzZWU6PGJyIC8+CisgKiAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9lZGl0b3IvbWlkYXMtc3BlYy5odG1sIj5Nb3ppbGxhIGltcGxlbWVudGF0aW9uPC9hPjxiciAvPgorICogICAgIDxhIGhyZWY9Imh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vd29ya3Nob3AvYXV0aG9yL2RodG1sL3JlZmVyZW5jZS9tZXRob2RzL2V4ZWNjb21tYW5kLmFzcCI+TVMgaW1wbGVtZW50YXRpb248L2E+CisgKgorICogIEBzZWUgWGluaGEjZmlyZVBsdWdpbkV2ZW50CisgKiAgQHBhcmFtIHtTdHJpbmd9IGNtZElEIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgYXMgZGVmaW5lZCBpbiB0aGUgYnJvd3NlcnMgaW1wbGVtYW50YXRpb25zIG9yIFhpbmhhIGN1c3RvbQorICogIEBwYXJhbSB7Qm9vbGVhbn0gVUkgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgZXhlY0NvbW1hbmQgc3ludGF4OyBmYWxzZSBpbiBtb3N0IChhbGwpIGNhc2VzCisgKiAgQHBhcmFtIHtNaXhlZH0gcGFyYW0gU29tZSBjb21tYW5kcyByZXF1aXJlIHBhcmFtZXRlcnMKKyAqICBAcmV0dXJucyB7Qm9vbGVhbn0gYWx3YXlzIGZhbHNlIAorICovCitYaW5oYS5wcm90b3R5cGUuZXhlY0NvbW1hbmQgPSBmdW5jdGlvbihjbWRJRCwgVUksIHBhcmFtKQoreworICB2YXIgZWRpdG9yID0gdGhpczsJLy8gZm9yIG5lc3RlZCBmdW5jdGlvbnMKKyAgdGhpcy5mb2N1c0VkaXRvcigpOworICBjbWRJRCA9IGNtZElELnRvTG93ZXJDYXNlKCk7CisgIAorICAvLyBTZWUgaWYgYW55IHBsdWdpbnMgd2FudCB0byBkbyBzb21ldGhpbmcgc3BlY2lhbAorICBpZih0aGlzLmZpcmVQbHVnaW5FdmVudCgnb25FeGVjQ29tbWFuZCcsIGNtZElELCBVSSwgcGFyYW0pKQorICB7CisgICAgdGhpcy51cGRhdGVUb29sYmFyKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgc3dpdGNoIChjbWRJRCkKKyAgeworICAgIGNhc2UgImh0bWxtb2RlIjoKKyAgICAgIHRoaXMuc2V0TW9kZSgpOworICAgIGJyZWFrOworCisgICAgY2FzZSAiaGlsaXRlY29sb3IiOgorICAgIGNhc2UgImZvcmVjb2xvciI6CisgICAgICB0aGlzLl9jb2xvclNlbGVjdG9yKGNtZElEKTsKKyAgICBicmVhazsKKworICAgIGNhc2UgImNyZWF0ZWxpbmsiOgorICAgICAgdGhpcy5fY3JlYXRlTGluaygpOworICAgIGJyZWFrOworCisgICAgY2FzZSAidW5kbyI6CisgICAgY2FzZSAicmVkbyI6CisgICAgICBpZiAodGhpcy5fY3VzdG9tVW5kbykKKyAgICAgIHsKKyAgICAgICAgdGhpc1tjbWRJRF0oKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgdGhpcy5fZG9jLmV4ZWNDb21tYW5kKGNtZElELCBVSSwgcGFyYW0pOworICAgICAgfQorICAgIGJyZWFrOworCisgICAgY2FzZSAiaW5zZXJ0dGFibGUiOgorICAgICAgdGhpcy5faW5zZXJ0VGFibGUoKTsKKyAgICBicmVhazsKKworICAgIGNhc2UgImluc2VydGltYWdlIjoKKyAgICAgIHRoaXMuX2luc2VydEltYWdlKCk7CisgICAgYnJlYWs7CisKKyAgICBjYXNlICJzaG93aGVscCI6CisgICAgICB0aGlzLl9wb3B1cERpYWxvZyhlZGl0b3IuY29uZmlnLlVSSXMuaGVscCwgbnVsbCwgdGhpcyk7CisgICAgYnJlYWs7CisKKyAgICBjYXNlICJraWxsd29yZCI6CisgICAgICB0aGlzLl93b3JkQ2xlYW4oKTsKKyAgICBicmVhazsKKworICAgIGNhc2UgImN1dCI6CisgICAgY2FzZSAiY29weSI6CisgICAgY2FzZSAicGFzdGUiOgorICAgICAgdGhpcy5fZG9jLmV4ZWNDb21tYW5kKGNtZElELCBVSSwgcGFyYW0pOworICAgICAgaWYgKCB0aGlzLmNvbmZpZy5raWxsV29yZE9uUGFzdGUgKQorICAgICAgeworICAgICAgICB0aGlzLl93b3JkQ2xlYW4oKTsKKyAgICAgIH0KKyAgICBicmVhazsKKyAgICBjYXNlICJsZWZ0dG9yaWdodCI6CisgICAgY2FzZSAicmlnaHR0b2xlZnQiOgorICAgICAgaWYgKHRoaXMuY29uZmlnLmNoYW5nZUp1c3RpZnlXaXRoRGlyZWN0aW9uKSAKKyAgICAgIHsKKyAgICAgICAgdGhpcy5fZG9jLmV4ZWNDb21tYW5kKChjbWRJRCA9PSAicmlnaHR0b2xlZnQiKSA/ICJqdXN0aWZ5cmlnaHQiIDogImp1c3RpZnlsZWZ0IiwgVUksIHBhcmFtKTsKKyAgICAgIH0KKyAgICAgIHZhciBkaXIgPSAoY21kSUQgPT0gInJpZ2h0dG9sZWZ0IikgPyAicnRsIiA6ICJsdHIiOworICAgICAgdmFyIGVsID0gdGhpcy5nZXRQYXJlbnRFbGVtZW50KCk7CisgICAgICB3aGlsZSAoIGVsICYmICFYaW5oYS5pc0Jsb2NrRWxlbWVudChlbCkgKQorICAgICAgeworICAgICAgICBlbCA9IGVsLnBhcmVudE5vZGU7CisgICAgICB9CisgICAgICBpZiAoIGVsICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBlbC5zdHlsZS5kaXJlY3Rpb24gPT0gZGlyICkKKyAgICAgICAgeworICAgICAgICAgIGVsLnN0eWxlLmRpcmVjdGlvbiA9ICIiOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGVsLnN0eWxlLmRpcmVjdGlvbiA9IGRpcjsKKyAgICAgICAgfQorICAgICAgfQorICAgIGJyZWFrOworICAgIAorICAgIGNhc2UgJ2p1c3RpZnlsZWZ0JyAgOgorICAgIGNhc2UgJ2p1c3RpZnlyaWdodCcgOgorICAgICAgY21kSUQubWF0Y2goL15qdXN0aWZ5KC4qKSQvKTsKKyAgICAgIHZhciBhZSA9IHRoaXMuYWN0aXZlRWxlbWVudCh0aGlzLmdldFNlbGVjdGlvbigpKTsgICAgICAKKyAgICAgIGlmKGFlICYmIGFlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnaW1nJykKKyAgICAgIHsKKyAgICAgICAgYWUuYWxpZ24gPSBhZS5hbGlnbiA9PSBSZWdFeHAuJDEgPyAnJyA6IFJlZ0V4cC4kMTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgdGhpcy5fZG9jLmV4ZWNDb21tYW5kKGNtZElELCBVSSwgcGFyYW0pOworICAgICAgfQorICAgIGJyZWFrOworICAgIAorICAgIGRlZmF1bHQ6CisgICAgICB0cnkKKyAgICAgIHsKKyAgICAgICAgdGhpcy5fZG9jLmV4ZWNDb21tYW5kKGNtZElELCBVSSwgcGFyYW0pOworICAgICAgfQorICAgICAgY2F0Y2goZXgpCisgICAgICB7CisgICAgICAgIGlmICggdGhpcy5jb25maWcuZGVidWcgKQorICAgICAgICB7CisgICAgICAgICAgYWxlcnQoZXggKyAiXG5cbmJ5IGV4ZWNDb21tYW5kKCIgKyBjbWRJRCArICIpOyIpOworICAgICAgICB9CisgICAgICB9CisgICAgYnJlYWs7CisgIH0KKworICB0aGlzLnVwZGF0ZVRvb2xiYXIoKTsKKyAgcmV0dXJuIGZhbHNlOworfTsKKworLyoqIEEgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGZvciB0aGluZ3MgdGhhdCBoYXBwZW4gaW4gdGhlIElGUkFNRSdzIGRvY3VtZW50LjxiciAvPgorICogIEl0IHByb3ZpZGVzIHR3byBob29rcyBmb3IgdGhlICJmaXJlUGx1Z2luRXZlbnQiIHN5c3RlbTo8YnIgLz4KKyAqICAgIm9uS2V5UHJlc3MiPGJyIC8+CisgKiAgICJvbk1vdXNlRG93biIKKyAqICBAc2VlIFhpbmhhI2ZpcmVQbHVnaW5FdmVudAorICogIEBwYXJhbSB7RXZlbnR9IGV2CisgKi8KK1hpbmhhLnByb3RvdHlwZS5fZWRpdG9yRXZlbnQgPSBmdW5jdGlvbihldikKK3sKKyAgdmFyIGVkaXRvciA9IHRoaXM7CisKKyAgLy9jYWxsIGV2ZW50cyBvZiB0ZXh0YXJlYQorICBpZiAoIHR5cGVvZiBlZGl0b3IuX3RleHRBcmVhWydvbicrZXYudHlwZV0gPT0gImZ1bmN0aW9uIiApCisgIHsKKyAgICBlZGl0b3IuX3RleHRBcmVhWydvbicrZXYudHlwZV0oZXYpOworICB9CisgIAorCisgIHZhciBpc1Nob3J0Q3V0ID0gdGhpcy5pc1Nob3J0Q3V0KGV2KTsKKyAgCisgIC8vIE9yZGVyIG9mIHByaW9yaXR5IGlzIHNvbWV0aGluZyBsaWtlLi4uCisgIC8vIEtleWRvd24gQ2FuY2VscworICAvLyAgIEtleVByZXNzIENhbmNlbHMKKyAgLy8gICAgICBTaG9ydEN1dCBDYW5jZWxzIAorICAvLyAgICAgICAgIChidWlsdCBpbiBzaG9ydGN1dHMpCisgIC8vICAgICAgICAgS2V5VXAKKyAgCisgIGlmKGV2LnR5cGUgPT0gJ2tleWRvd24nKQorICB7CisgICAgaWYoZWRpdG9yLmZpcmVQbHVnaW5FdmVudCgnb25LZXlEb3duJywgZXYpKQorICAgIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgLy8gSWYgdGhpcyBpcyBhIHNob3J0Y3V0LCBmaXJlIGl0IGFzIGEga2V5cHJlc3MgYnV0IHdoZW4gdGhlIGtleSBkb3duCisgICAgLy8gIGhhcHBlbnMsIHRoaXMgaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzICh2YXJpb3VzIHZlcnNpb25zIGFuZCBwbGF0Zm9ybSBjb21iaW5hdGlvbnMgZXZlbiEpIAorICAgIC8vICBmaXJlIHByZXNzIGFuZCBzb21lIGRvIG5vdCwgc28gd2UgY2FuIG9ubHkgcmVseSBvbiBrZXlkb3duIGhlcmUKKyAgICAvLyAgd2Ugd2lsbCBzdXBwcmVzcyBhbiBhY3R1YWwgc2hvcnRjdXQgcHJlc3MgYSBiaXQgZnVydGhlciBkb3duIHRvIGF2b2lkIGR1cGxpY2F0ZXMKKyAgICBpZihpc1Nob3J0Q3V0KQorICAgIHsKKyAgICAgIGlmKGVkaXRvci5maXJlUGx1Z2luRXZlbnQoJ29uS2V5UHJlc3MnLCBldikpCisgICAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLy8gQWxzbyB3ZSBoYXZlIGEgc3BlY2lhbCBvblNob3J0Q3V0IHdoaWNoIG9ubHkgZmlyZXMgZm9yIHRoZW0KKyAgICAgIGlmKGVkaXRvci5maXJlUGx1Z2luRXZlbnQoJ29uU2hvcnRDdXQnLCBldiwgaXNTaG9ydEN1dCkpCisgICAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgdGhpcy5fc2hvcnRDdXRzKGV2KTsKKyAgICB9CisgIH0KKyAgCisgIC8vIFNob3J0Y3V0cyB3ZXJlIGZpcmVkIGFzIGEga2V5ZG93biBtYXNxdWVyYWRpbmcgYXMgYSBrZXlwcmVzcyBhbHJlYWR5CisgIC8vIHNvIGRvbid0IGZpcmUgdGhlbSBhZ2FpbiBvbiBhbiBhY3R1YWwga2V5cHJlc3MuICBBZGRpdGlvbmFsbHkKKyAgLy8gYnJvd3NlcnMgZGlmZmVyIHNsaWdodGx5IGluIHdoYXQgdGhleSBjYWxsIGEga2V5cHJlc3MsIHRvIGJlIHN1cmUgd2UgCisgIC8vIGlzc3VlIGtleXJlc3Mgb24gYSBzdGFuZGFyZCBzZXQgb2YgdGhpbmdzIHdlIHBhc3Mgb2ZmIHRvIGlzS2V5UHJlc3NFdmVudAorICAvLyB0byBkbyBzb21lIG1vcmUgaW5kZXB0aCBjaGVja2luZywgaXQgd2lsbCBhIGJvb2xlYW4sIHNvbWUga2V5cHJlc3Mgd2lsbAorICAvLyBiZSBpbnZhbGlkIGFuZCBza2lwZWQsIHNvbWUga2V5ZG93biB3aWxsIGJlIHJlcGVhdGVkIGFzIGEga2V5cHJlc3MgYmVjYXVzZQorICAvLyB0aGF0IGJyb3dzZXIgd291bGRuJ3Qgbm9ybWFsbHkgaXNzdWUgYSBrZXlwcmVzcy4gIFNpZ2guCisgIGlmKCFpc1Nob3J0Q3V0ICYmIHRoaXMuaXNLZXlQcmVzc0V2ZW50KGV2KSkKKyAgeworICAgIGlmKGVkaXRvci5maXJlUGx1Z2luRXZlbnQoJ29uS2V5UHJlc3MnLCBldikpCisgICAgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorICAKKyAgLy8gQXQgbGFzdCwgc29tZXRoaW5nIHdlIGNhbiByZWx5IG9uIQorICBpZihldi50eXBlID09ICdrZXl1cCcpCisgIHsKKyAgICBpZihlZGl0b3IuZmlyZVBsdWdpbkV2ZW50KCdvbktleVVwJywgZXYpKQorICAgIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKworICBpZiAoIGV2LnR5cGUgPT0gJ21vdXNlZG93bicgKQorICB7CisgICAgaWYoZWRpdG9yLmZpcmVQbHVnaW5FdmVudCgnb25Nb3VzZURvd24nLCBldikpCisgICAgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIGlmICggZXYudHlwZSA9PSAnbW91c2V1cCcgKQorICB7CisgICAgaWYoZWRpdG9yLmZpcmVQbHVnaW5FdmVudCgnb25Nb3VzZVVwJywgZXYpKQorICAgIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKyAgCisgIC8vIHVwZGF0ZSB0aGUgdG9vbGJhciBzdGF0ZSBhZnRlciBzb21lIHRpbWUKKyAgaWYgKCBlZGl0b3IuX3RpbWVyVG9vbGJhciApCisgIHsKKyAgICBjbGVhclRpbWVvdXQoZWRpdG9yLl90aW1lclRvb2xiYXIpOworICB9CisgIGlmICghdGhpcy5zdXNwZW5kVXBkYXRlVG9vbGJhcikKKyAgeworICBlZGl0b3IuX3RpbWVyVG9vbGJhciA9IHNldFRpbWVvdXQoCisgICAgZnVuY3Rpb24oKQorICAgIHsKKyAgICAgIGVkaXRvci51cGRhdGVUb29sYmFyKCk7CisgICAgICBlZGl0b3IuX3RpbWVyVG9vbGJhciA9IG51bGw7CisgICAgfSwKKyAgICAyNTApOworICB9Cit9OworCisvKiogSGFuZGxlIGRvdWJsZSBjbGljayBldmVudHMuCisgKiAgU2VlIGRibGNsaWNrTGlzdCBpbiB0aGUgY29uZmlnLgorICovCisgCitYaW5oYS5wcm90b3R5cGUuX29uRG91YmxlQ2xpY2sgPSBmdW5jdGlvbihldikKK3sKKyAgdmFyIGVkaXRvcj10aGlzOworICB2YXIgdGFyZ2V0ID0gWGluaGEuaXNfaWUgPyBldi5zcmNFbGVtZW50IDogZXYudGFyZ2V0OworICB2YXIgdGFnID0gdGFyZ2V0LnRhZ05hbWU7CisgIHZhciBjbGFzc05hbWUgPSB0YXJnZXQuY2xhc3NOYW1lOworICBpZiAodGFnKSB7CisgICAgdGFnID0gdGFnLnRvTG93ZXJDYXNlKCk7CisgICAgaWYgKGNsYXNzTmFtZSAmJiAodGhpcy5jb25maWcuZGJsY2xpY2tMaXN0W3RhZysiLiIrY2xhc3NOYW1lXSAhPSB1bmRlZmluZWQpKQorICAgICAgdGhpcy5jb25maWcuZGJsY2xpY2tMaXN0W3RhZysiLiIrY2xhc3NOYW1lXVswXShlZGl0b3IsIHRhcmdldCk7CisgICAgZWxzZSBpZiAodGhpcy5jb25maWcuZGJsY2xpY2tMaXN0W3RhZ10gIT0gdW5kZWZpbmVkKQorICAgICAgdGhpcy5jb25maWcuZGJsY2xpY2tMaXN0W3RhZ11bMF0oZWRpdG9yLCB0YXJnZXQpOworICB9OworfTsKKworLyoqIEhhbmRsZXMgY3RybCArIGtleSBzaG9ydGN1dHMgCisgKiAgQFRPRE86IG1ha2UgdGhpcyBtb3IgZmxleGlibGUKKyAqICBAcHJpdmF0ZQorICogIEBwYXJhbSB7RXZlbnR9IGV2CisgKi8KK1hpbmhhLnByb3RvdHlwZS5fc2hvcnRDdXRzID0gZnVuY3Rpb24gKGV2KQoreworICB2YXIga2V5ID0gdGhpcy5nZXRLZXkoZXYpLnRvTG93ZXJDYXNlKCk7CisgIHZhciBjbWQgPSBudWxsOworICB2YXIgdmFsdWUgPSBudWxsOworICBzd2l0Y2ggKGtleSkKKyAgeworICAgIC8vIHNpbXBsZSBrZXkgY29tbWFuZHMgZm9sbG93CisKKyAgICBjYXNlICdiJzogY21kID0gImJvbGQiOyBicmVhazsKKyAgICBjYXNlICdpJzogY21kID0gIml0YWxpYyI7IGJyZWFrOworICAgIGNhc2UgJ3UnOiBjbWQgPSAidW5kZXJsaW5lIjsgYnJlYWs7CisgICAgY2FzZSAncyc6IGNtZCA9ICJzdHJpa2V0aHJvdWdoIjsgYnJlYWs7CisgICAgY2FzZSAnbCc6IGNtZCA9ICJqdXN0aWZ5bGVmdCI7IGJyZWFrOworICAgIGNhc2UgJ2UnOiBjbWQgPSAianVzdGlmeWNlbnRlciI7IGJyZWFrOworICAgIGNhc2UgJ3InOiBjbWQgPSAianVzdGlmeXJpZ2h0IjsgYnJlYWs7CisgICAgY2FzZSAnaic6IGNtZCA9ICJqdXN0aWZ5ZnVsbCI7IGJyZWFrOworICAgIGNhc2UgJ3onOiBjbWQgPSAidW5kbyI7IGJyZWFrOworICAgIGNhc2UgJ3knOiBjbWQgPSAicmVkbyI7IGJyZWFrOworICAgIGNhc2UgJ3YnOiBjbWQgPSAicGFzdGUiOyBicmVhazsKKyAgICBjYXNlICduJzoKKyAgICBjbWQgPSAiZm9ybWF0YmxvY2siOworICAgIHZhbHVlID0gInAiOworICAgIGJyZWFrOworCisgICAgY2FzZSAnMCc6IGNtZCA9ICJraWxsd29yZCI7IGJyZWFrOworCisgICAgLy8gaGVhZGluZ3MKKyAgICBjYXNlICcxJzoKKyAgICBjYXNlICcyJzoKKyAgICBjYXNlICczJzoKKyAgICBjYXNlICc0JzoKKyAgICBjYXNlICc1JzoKKyAgICBjYXNlICc2JzoKKyAgICBjbWQgPSAiZm9ybWF0YmxvY2siOworICAgIHZhbHVlID0gImgiICsga2V5OworICAgIGJyZWFrOworICB9CisgIGlmICggY21kICkKKyAgeworICAgIC8vIGV4ZWN1dGUgc2ltcGxlIGNvbW1hbmQKKyAgICB0aGlzLmV4ZWNDb21tYW5kKGNtZCwgZmFsc2UsIHZhbHVlKTsKKyAgICBYaW5oYS5fc3RvcEV2ZW50KGV2KTsKKyAgfQorfTsKKy8qKiBDaGFuZ2VzIHRoZSB0eXBlIG9mIGEgZ2l2ZW4gbm9kZQorICogIEBwYXJhbSB7RG9tTm9kZX0gZWwgVGhlIGVsZW1lbnQgdG8gY29udmVydAorICogIEBwYXJhbSB7U3RyaW5nfSBuZXdUYWdOYW1lIFRoZSB0eXBlIHRoZSBlbGVtZW50IHdpbGwgYmUgY29udmVydGVkIHRvCisgKiAgQHJldHVybnMge0RvbU5vZGV9IEEgcmVmZXJlbmNlIHRvIHRoZSBuZXcgZWxlbWVudAorICovCitYaW5oYS5wcm90b3R5cGUuY29udmVydE5vZGUgPSBmdW5jdGlvbihlbCwgbmV3VGFnTmFtZSkKK3sKKyAgdmFyIG5ld2VsID0gdGhpcy5fZG9jLmNyZWF0ZUVsZW1lbnQobmV3VGFnTmFtZSk7CisgIHdoaWxlICggZWwuZmlyc3RDaGlsZCApCisgIHsKKyAgICBuZXdlbC5hcHBlbmRDaGlsZChlbC5maXJzdENoaWxkKTsKKyAgfQorICByZXR1cm4gbmV3ZWw7Cit9OworCisvKiogU2Nyb2xscyB0aGUgZWRpdG9yIGlmcmFtZSB0byBhIGdpdmVuIGVsZW1lbnQgb3IgdG8gdGhlIGN1cnNvcgorICogIEBwYXJhbSB7RG9tTm9kZX0gZSBvcHRpb25hbCBUaGUgZWxlbWVudCB0byBzY3JvbGwgdG87IGlmIG9tbWl0dGVkLCBlbGVtZW50IHRoZSBlbGVtZW50IHRoZSBjdXJzb3IgaXMgaW4KKyAqLworWGluaGEucHJvdG90eXBlLnNjcm9sbFRvRWxlbWVudCA9IGZ1bmN0aW9uKGUpCit7CisgIGlmKCFlKQorICB7CisgICAgZSA9IHRoaXMuZ2V0UGFyZW50RWxlbWVudCgpOworICAgIGlmKCFlKQorICAgIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKyAgCisgIC8vIFRoaXMgd2FzIGF0IG9uZSB0aW1lIGxpbWl0ZWQgdG8gR2Vja28gb25seSwgYnV0IEkgc2VlIG5vIHJlYXNvbiBmb3IgaXQgdG8gYmUuIC0gSmFtZXMKKyAgdmFyIHBvc2l0aW9uID0gWGluaGEuZ2V0RWxlbWVudFRvcExlZnQoZSk7ICAKKyAgdGhpcy5faWZyYW1lLmNvbnRlbnRXaW5kb3cuc2Nyb2xsVG8ocG9zaXRpb24ubGVmdCwgcG9zaXRpb24udG9wKTsKK307CisKKy8qKiBTY3JvbGwgdGhlIHZpZXdwb3J0IHNvIHRoYXQgdGhlIGdpdmVuIGVsZW1lbnQgaXMgdmlld2FibGUKKyAqICBpZiBpdCBpcyBub3QgYWxyZWFkeSBzby4KKyAqLworCitYaW5oYS5wcm90b3R5cGUuc2Nyb2xsRWxlbWVudEludG9WaWV3cG9ydCA9IGZ1bmN0aW9uKGUpCit7CisgIGlmKCFlKQorICB7CisgICAgZSA9IHRoaXMuZ2V0UGFyZW50RWxlbWVudCgpOworICAgIGlmKCFlKQorICAgIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKyAgCisgIC8vIFRoaXMgd2FzIGF0IG9uZSB0aW1lIGxpbWl0ZWQgdG8gR2Vja28gb25seSwgYnV0IEkgc2VlIG5vIHJlYXNvbiBmb3IgaXQgdG8gYmUuIC0gSmFtZXMKKyAgdmFyIHBvc2l0aW9uID0gWGluaGEuZ2V0RWxlbWVudFRvcExlZnQoZSk7ICAKKyAgdmFyIGN1cnJlbnRTY3JvbGwgPSB0aGlzLnNjcm9sbFBvcyh0aGlzLl9pZnJhbWUuY29udGVudFdpbmRvdyk7CisgIHZhciBjdXJyZW50U2l6ZSAgID0gWGluaGEudmlld3BvcnRTaXplKHRoaXMuX2lmcmFtZS5jb250ZW50V2luZG93KTsKKyAgCisgIHZhciBjYW5TZWVYID0gW2N1cnJlbnRTY3JvbGwueCwgY3VycmVudFNjcm9sbC54ICsgKGN1cnJlbnRTaXplLngqMC45KV07CisgIHZhciBjYW5TZWVZID0gW2N1cnJlbnRTY3JvbGwueSwgY3VycmVudFNjcm9sbC55ICsgKGN1cnJlbnRTaXplLnkqMC45KV07CisgIGlmKCAgIGNhblNlZVhbMF0gPD0gcG9zaXRpb24ubGVmdAorICAgICYmICBjYW5TZWVYWzFdID49IHBvc2l0aW9uLmxlZnQKKyAgICAmJiAgY2FuU2VlWVswXSA8PSBwb3NpdGlvbi50b3AKKyAgICAmJiAgY2FuU2VlWVsxXSA+PSBwb3NpdGlvbi50b3AKKyAgKQorICB7CisgICAgLy8gVGhlIGl0ZW0gaXMgaW4gdGhlIHZpZXdwb3J0LCBubyBzY3JvbGwKKyAgICByZXR1cm47CisgIH0KKyAgCisgIHRoaXMuX2lmcmFtZS5jb250ZW50V2luZG93LnNjcm9sbFRvKHBvc2l0aW9uLmxlZnQsIE1hdGgubWluKHBvc2l0aW9uLnRvcCxwb3NpdGlvbi50b3AtKGN1cnJlbnRTaXplLnkqMC4xKSkpOworfTsKKworLyoqIEdldCB0aGUgZWRpdGVkIEhUTUwKKyAqICAKKyAqICBAcHVibGljCisgKiAgQHJldHVybnMge1N0cmluZ30gSFRNTCBjb250ZW50CisgKi8KK1hpbmhhLnByb3RvdHlwZS5nZXRFZGl0b3JDb250ZW50ID0gZnVuY3Rpb24oKQoreworICByZXR1cm4gdGhpcy5vdXR3YXJkSHRtbCh0aGlzLmdldEhUTUwoKSk7Cit9OworCisvKiogQ29tcGxldGVseSBjaGFuZ2UgdGhlIEhUTUwgaW5zaWRlIHRoZSBlZGl0b3IKKyAqCisgKiAgQHB1YmxpYworICogIEBwYXJhbSB7U3RyaW5nfSBodG1sIG5ldyBjb250ZW50CisgKi8KK1hpbmhhLnByb3RvdHlwZS5zZXRFZGl0b3JDb250ZW50ID0gZnVuY3Rpb24oaHRtbCkKK3sKKyAgdGhpcy5zZXRIVE1MKHRoaXMuaW53YXJkSHRtbChodG1sKSk7Cit9OworLyoqIFNhdmVzIHRoZSBjb250ZW50cyBvZiBhbGwgWGluaGFzIHRvIHRoZWlyIHJlc3BlY3RpdmUgdGV4dGFyZWFzCisgKiAgQHB1YmxpYyAKKyAqLworWGluaGEudXBkYXRlVGV4dGFyZWFzID0gZnVuY3Rpb24oKQoreworICB2YXIgZTsKKyAgZm9yICh2YXIgaT0wO2k8X194aW5oYXMubGVuZ3RoO2krKykKKyAgeworICAgIGUgPSBfX3hpbmhhc1tpXTsKKyAgICBlLl90ZXh0QXJlYS52YWx1ZSA9IGUuZ2V0RWRpdG9yQ29udGVudCgpOworICB9Cit9CisvKiogR2V0IHRoZSByYXcgZWRpdGVkIEhUTUwsIHNob3VsZCBub3QgYmUgdXNlZCB3aXRob3V0IFhpbmhhLnByb3RvdHlwZS5vdXR3YXJkSHRtbCgpCisgKiAgCisgKiAgQHByaXZhdGUKKyAqICBAcmV0dXJucyB7U3RyaW5nfSBIVE1MIGNvbnRlbnQKKyAqLworWGluaGEucHJvdG90eXBlLmdldEhUTUwgPSBmdW5jdGlvbigpCit7CisgIHZhciBodG1sID0gJyc7CisgIHN3aXRjaCAoIHRoaXMuX2VkaXRNb2RlICkKKyAgeworICAgIGNhc2UgInd5c2l3eWciOgorICAgICAgaWYgKCAhdGhpcy5jb25maWcuZnVsbFBhZ2UgKQorICAgICAgeworICAgICAgICBodG1sID0gWGluaGEuZ2V0SFRNTCh0aGlzLl9kb2MuYm9keSwgZmFsc2UsIHRoaXMpLnRyaW0oKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaHRtbCA9IHRoaXMuZG9jdHlwZSArICJcbiIgKyBYaW5oYS5nZXRIVE1MKHRoaXMuX2RvYy5kb2N1bWVudEVsZW1lbnQsIHRydWUsIHRoaXMpOworICAgICAgfQorICAgIGJyZWFrOworICAgIGNhc2UgInRleHRtb2RlIjoKKyAgICAgIGh0bWwgPSB0aGlzLl90ZXh0QXJlYS52YWx1ZTsKKyAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYWxlcnQoIk1vZGUgPCIgKyB0aGlzLl9lZGl0TW9kZSArICI+IG5vdCBkZWZpbmVkISIpOworICAgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHJldHVybiBodG1sOworfTsKKworLyoqIFBlcmZvcm1zIHZhcmlvdXMgdHJhbnNmb3JtYXRpb25zIG9mIHRoZSBIVE1MIHVzZWQgaW50ZXJuYWxseSwgY29tcGxlbWVudCB0byBYaW5oYS5wcm90b3R5cGUuaW53YXJkSHRtbCgpICAKKyAqICBQbHVnaW5zIGNhbiBwcm92aWRlIHRoZWlyIG93biwgYWRkaXRpb25hbCB0cmFuc2Zvcm1hdGlvbnMgYnkgZGVmaW5pbmcgYSBwbHVnaW4ucHJvdG90eXBlLm91dHdhcmRIdG1sKCkgaW1wbGVtYXRhdGlvbiwKKyAqICB3aGljaCBpcyBjYWxsZWQgYnkgdGhpcyBmdW5jdGlvbgorICoKKyAqICBAcHJpdmF0ZQorICogIEBzZWUgWGluaGEjaW53YXJkSHRtbAorICogIEBwYXJhbSB7U3RyaW5nfSBodG1sCisgKiAgQHJldHVybnMge1N0cmluZ30gSFRNTCBjb250ZW50CisgKi8KK1hpbmhhLnByb3RvdHlwZS5vdXR3YXJkSHRtbCA9IGZ1bmN0aW9uKGh0bWwpCit7CisgIGZvciAoIHZhciBpIGluIHRoaXMucGx1Z2lucyApCisgIHsKKyAgICB2YXIgcGx1Z2luID0gdGhpcy5wbHVnaW5zW2ldLmluc3RhbmNlOyAgICAKKyAgICBpZiAoIHBsdWdpbiAmJiB0eXBlb2YgcGx1Z2luLm91dHdhcmRIdG1sID09ICJmdW5jdGlvbiIgKQorICAgIHsKKyAgICAgIGh0bWwgPSBwbHVnaW4ub3V0d2FyZEh0bWwoaHRtbCk7CisgICAgfQorICB9CisgIAorICBodG1sID0gaHRtbC5yZXBsYWNlKC88KFwvPyliKFxzfD58XC8pL2lnLCAiPCQxc3Ryb25nJDIiKTsKKyAgaHRtbCA9IGh0bWwucmVwbGFjZSgvPChcLz8paShcc3w+fFwvKS9pZywgIjwkMWVtJDIiKTsKKyAgaHRtbCA9IGh0bWwucmVwbGFjZSgvPChcLz8pc3RyaWtlKFxzfD58XC8pL2lnLCAiPCQxZGVsJDIiKTsKKyAgCisgIC8vIHJlbW92ZSBkaXNhYmxpbmcgb2YgaW5saW5lIGV2ZW50IGhhbmRsZSBpbnNpZGUgWGluaGEgaWZyYW1lCisgIGh0bWwgPSBodG1sLnJlcGxhY2UoLyg8W14+XSpvbihjbGlja3xtb3VzZShvdmVyfG91dHx1cHxkb3duKSk9WyciXSlpZlwod2luZG93XC5wYXJlbnQgJmFtcDsmYW1wOyB3aW5kb3dcLnBhcmVudFwuWGluaGFcKVx7cmV0dXJuIGZhbHNlXH0vZ2ksJyQxJyk7CisKKyAgLy8gRmlndXJlIG91dCB3aGF0IG91ciBzZXJ2ZXIgbmFtZSBpcywgYW5kIGhvdyBpdCdzIHJlZmVyZW5jZWQKKyAgdmFyIHNlcnZlckJhc2UgPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoLyhodHRwcz86XC9cL1teXC9dKilcLy4qLywgJyQxJykgKyAnLyc7CisKKyAgLy8gSUUgcHV0cyB0aGlzIGluIGNhbid0IGZpZ3VyZSBvdXQgd2h5CisgIC8vICBsZWF2aW5nIHRoaXMgaW4gdGhlIGNvcmUgaW5zdGVhZCBvZiBJbnRlcm5ldEV4cGxvcmVyIAorICAvLyAgYmVjYXVzZSBpdCBtaWdodCBiZSBzb21ldGhpbmcgd2UgYXJlIGRvaW5nIHNvIGNvdWxkIHByZXNlbnQgaXRzZWxmCisgIC8vICBpbiBvdGhlciBicm93c2VycyAtIEphbWVzIAorICBodG1sID0gaHRtbC5yZXBsYWNlKC9odHRwcz86XC9cL251bGxcLy9nLCBzZXJ2ZXJCYXNlKTsKKworICAvLyBNYWtlIHNlbWktYWJzb2x1dGUgbGlua3MgdG8gYmUgdHJ1ZWx5IGFic29sdXRlCisgIC8vICB3ZSBkbyB0aGlzIGp1c3QgdG8gc3RhbmRhcmRpemUgc28gdGhhdCBzcGVjaWFsIHJlcGxhY2VtZW50cyBrbm93cyB3aGF0CisgIC8vICB0byBleHBlY3QKKyAgaHRtbCA9IGh0bWwucmVwbGFjZSgvKChocmVmfHNyY3xiYWNrZ3JvdW5kKT1bXCdcIl0pXC8rL2lnLCAnJDEnICsgc2VydmVyQmFzZSk7CisKKyAgaHRtbCA9IHRoaXMub3V0d2FyZFNwZWNpYWxSZXBsYWNlbWVudHMoaHRtbCk7CisKKyAgaHRtbCA9IHRoaXMuZml4UmVsYXRpdmVMaW5rcyhodG1sKTsKKworICBpZiAoIHRoaXMuY29uZmlnLnNldmVuQml0Q2xlYW4gKQorICB7CisgICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvW14gLX5cclxuXHRdL2csIGZ1bmN0aW9uKGMpIHsgcmV0dXJuIChjICE9IFhpbmhhLmNjKSA/ICcmIycrYy5jaGFyQ29kZUF0KDApKyc7JyA6IGM7IH0pOworICB9CisKKyAgLy9wcmV2ZW50IGV4ZWN1dGlvbiBvZiBKYXZhU2NyaXB0IChUaWNrZXQgIzY4NSkKKyAgaHRtbCA9IGh0bWwucmVwbGFjZSgvKDxzY3JpcHRbXj5dKigodHlwZT1bXCJcJ110ZXh0XC8pfChsYW5ndWFnZT1bXCJcJ10pKSkoZnJlZXplc2NyaXB0KS9naSwiJDFqYXZhc2NyaXB0Iik7CisKKyAgLy8gSWYgaW4gZnVsbFBhZ2UgbW9kZSwgc3RyaXAgdGhlIGNvcmVDU1MKKyAgaWYodGhpcy5jb25maWcuZnVsbFBhZ2UpCisgIHsKKyAgICBodG1sID0gWGluaGEuc3RyaXBDb3JlQ1NTKGh0bWwpOworICB9CisKKyAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZy5vdXR3YXJkSHRtbCA9PSAnZnVuY3Rpb24nICkKKyAgeworICAgIGh0bWwgPSB0aGlzLmNvbmZpZy5vdXR3YXJkSHRtbChodG1sKTsKKyAgfQorCisgIHJldHVybiBodG1sOworfTsKKworLyoqIFBlcmZvcm1zIHZhcmlvdXMgdHJhbnNmb3JtYXRpb25zIG9mIHRoZSBIVE1MIHRvIGJlIGVkaXRlZCAKKyAqICBQbHVnaW5zIGNhbiBwcm92aWRlIHRoZWlyIG93biwgYWRkaXRpb25hbCB0cmFuc2Zvcm1hdGlvbnMgYnkgZGVmaW5pbmcgYSBwbHVnaW4ucHJvdG90eXBlLmlud2FyZEh0bWwoKSBpbXBsZW1hdGF0aW9uLAorICogIHdoaWNoIGlzIGNhbGxlZCBieSB0aGlzIGZ1bmN0aW9uCisgKiAgCisgKiAgQHByaXZhdGUKKyAqICBAc2VlIFhpbmhhI291dHdhcmRIdG1sCisgKiAgQHBhcmFtIHtTdHJpbmd9IGh0bWwgIAorICogIEByZXR1cm5zIHtTdHJpbmd9IHRyYW5zZm9ybWVkIEhUTUwKKyAqLworWGluaGEucHJvdG90eXBlLmlud2FyZEh0bWwgPSBmdW5jdGlvbihodG1sKQoreyAgCisgIGZvciAoIHZhciBpIGluIHRoaXMucGx1Z2lucyApCisgIHsKKyAgICB2YXIgcGx1Z2luID0gdGhpcy5wbHVnaW5zW2ldLmluc3RhbmNlOyAgICAKKyAgICBpZiAoIHBsdWdpbiAmJiB0eXBlb2YgcGx1Z2luLmlud2FyZEh0bWwgPT0gImZ1bmN0aW9uIiApCisgICAgeworICAgICAgaHRtbCA9IHBsdWdpbi5pbndhcmRIdG1sKGh0bWwpOworICAgIH0gICAgCisgIH0KKyAgICAKKyAgLy8gQm90aCBJRSBhbmQgR2Vja28gdXNlIHN0cmlrZSBpbnN0ZWFkIG9mIGRlbCAoIzUyMykKKyAgaHRtbCA9IGh0bWwucmVwbGFjZSgvPChcLz8pZGVsKFxzfD58XC8pL2lnLCAiPCQxc3RyaWtlJDIiKTsKKworICAvLyBkaXNhYmxlIGlubGluZSBldmVudCBoYW5kbGUgaW5zaWRlIFhpbmhhIGlmcmFtZSBidXQgb25seSBpZiB0aGV5IGFyZSBub3QgZW1wdHkgYXR0cmlidXRlcworICBodG1sID0gaHRtbC5yZXBsYWNlKC8oPFtePl0qb24oY2xpY2t8bW91c2Uob3ZlcnxvdXR8dXB8ZG93bikpPScpKFteJ10rJykvZ2ksJyQxaWYod2luZG93LnBhcmVudCAmYW1wOyZhbXA7IHdpbmRvdy5wYXJlbnQuWGluaGEpe3JldHVybiBmYWxzZX0kNCcpOworICBodG1sID0gaHRtbC5yZXBsYWNlKC8oPFtePl0qb24oY2xpY2t8bW91c2Uob3ZlcnxvdXR8dXB8ZG93bikpPSIpKFteIl0rIikvZ2ksJyQxaWYod2luZG93LnBhcmVudCAmYW1wOyZhbXA7IHdpbmRvdy5wYXJlbnQuWGluaGEpe3JldHVybiBmYWxzZX0kNCcpOworICAKKyAgaHRtbCA9IHRoaXMuaW53YXJkU3BlY2lhbFJlcGxhY2VtZW50cyhodG1sKTsKKworICBodG1sID0gaHRtbC5yZXBsYWNlKC8oPHNjcmlwdCkoPyFbXj5dKigodHlwZT1bXCJcJ110ZXh0XC8pfChsYW5ndWFnZT1bXCJcJ10pKWphdmFzY3JpcHRbXCJcJ10pL2dpLCckMSB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiJyk7CisgIGh0bWwgPSBodG1sLnJlcGxhY2UoLyg8c2NyaXB0W14+XSooKHR5cGU9W1wiXCdddGV4dFwvKXwobGFuZ3VhZ2U9W1wiXCddKSkpKGphdmFzY3JpcHQpL2dpLCIkMWZyZWV6ZXNjcmlwdCIpOworCisgIC8vIEZvciBJRSdzIHNha2UsIG1ha2UgYW55IFVSTHMgdGhhdCBhcmUgc2VtaS1hYnNvbHV0ZSAoPSIvLi4uLiIpIHRvIGJlCisgIC8vIHRydWVseSBhYnNvbHV0ZQorICB2YXIgbnVsbFJFID0gbmV3IFJlZ0V4cCgnKChocmVmfHNyY3xiYWNrZ3JvdW5kKT1bXCciXSkvKycsICdnaScpOworICBodG1sID0gaHRtbC5yZXBsYWNlKG51bGxSRSwgJyQxJyArIGxvY2F0aW9uLmhyZWYucmVwbGFjZSgvKGh0dHBzPzpcL1wvW15cL10qKVwvLiovLCAnJDEnKSArICcvJyk7CisKKyAgaHRtbCA9IHRoaXMuZml4UmVsYXRpdmVMaW5rcyhodG1sKTsKKyAgCisgIC8vIElmIGluIGZ1bGxQYWdlIG1vZGUsIGFkZCB0aGUgY29yZUNTUworICBpZih0aGlzLmNvbmZpZy5mdWxsUGFnZSkKKyAgeworICAgIGh0bWwgPSBYaW5oYS5hZGRDb3JlQ1NTKGh0bWwpOworICB9CisKKyAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZy5pbndhcmRIdG1sID09ICdmdW5jdGlvbicgKQorICB7CisgICAgaHRtbCA9IHRoaXMuY29uZmlnLmlud2FyZEh0bWwoaHRtbCk7CisgIH0KKworICByZXR1cm4gaHRtbDsKK307CisvKiogQXBwbHkgdGhlIHJlcGxhY2VtZW50cyBkZWZpbmVkIGluIFhpbmhhLkNvbmZpZy5zcGVjaWFsUmVwbGFjZW1lbnRzCisgKiAgCisgKiAgQHByaXZhdGUKKyAqICBAc2VlIFhpbmhhI2lud2FyZFNwZWNpYWxSZXBsYWNlbWVudHMKKyAqICBAcGFyYW0ge1N0cmluZ30gaHRtbAorICogIEByZXR1cm5zIHtTdHJpbmd9ICB0cmFuc2Zvcm1lZCBIVE1MCisgKi8KK1hpbmhhLnByb3RvdHlwZS5vdXR3YXJkU3BlY2lhbFJlcGxhY2VtZW50cyA9IGZ1bmN0aW9uKGh0bWwpCit7CisgIGZvciAoIHZhciBpIGluIHRoaXMuY29uZmlnLnNwZWNpYWxSZXBsYWNlbWVudHMgKQorICB7CisgICAgdmFyIGZyb20gPSB0aGlzLmNvbmZpZy5zcGVjaWFsUmVwbGFjZW1lbnRzW2ldOworICAgIHZhciB0byAgID0gaTsgLy8gd2h5IGFyZSBkZWNsYXJpbmcgYSBuZXcgdmFyaWFibGUgaGVyZSA/IFNlZW1zIHRvIGJlIGJldHRlciB0byBqdXN0IGRvIDogZm9yICh2YXIgdG8gaW4gY29uZmlnKQorICAgIC8vIHByZXZlbnQgaXRlcmF0aW5nIG92ZXIgd3JvbmcgdHlwZQorICAgIGlmICggdHlwZW9mIGZyb20ucmVwbGFjZSAhPSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0by5yZXBsYWNlICE9ICdmdW5jdGlvbicgKQorICAgIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0gCisgICAgLy8gYWxlcnQoJ291dCA6ICcgKyBmcm9tICsgJz0+JyArIHRvKTsKKyAgICB2YXIgcmVnID0gbmV3IFJlZ0V4cChYaW5oYS5lc2NhcGVTdHJpbmdGb3JSZWdFeHAoZnJvbSksICdnJyk7CisgICAgaHRtbCA9IGh0bWwucmVwbGFjZShyZWcsIHRvLnJlcGxhY2UoL1wkL2csICckJCQkJykpOworICAgIC8vaHRtbCA9IGh0bWwucmVwbGFjZShmcm9tLCB0byk7CisgIH0KKyAgcmV0dXJuIGh0bWw7Cit9OworLyoqIEFwcGx5IHRoZSByZXBsYWNlbWVudHMgZGVmaW5lZCBpbiBYaW5oYS5Db25maWcuc3BlY2lhbFJlcGxhY2VtZW50cworICogIAorICogIEBwcml2YXRlCisgKiAgQHNlZSBYaW5oYSNvdXR3YXJkU3BlY2lhbFJlcGxhY2VtZW50cworICogIEBwYXJhbSB7U3RyaW5nfSBodG1sCisgKiAgQHJldHVybnMge1N0cmluZ30gIHRyYW5zZm9ybWVkIEhUTUwKKyAqLworWGluaGEucHJvdG90eXBlLmlud2FyZFNwZWNpYWxSZXBsYWNlbWVudHMgPSBmdW5jdGlvbihodG1sKQoreworICAvLyBhbGVydCgiaW53YXJkIik7CisgIGZvciAoIHZhciBpIGluIHRoaXMuY29uZmlnLnNwZWNpYWxSZXBsYWNlbWVudHMgKQorICB7CisgICAgdmFyIGZyb20gPSBpOyAvLyB3aHkgYXJlIGRlY2xhcmluZyBhIG5ldyB2YXJpYWJsZSBoZXJlID8gU2VlbXMgdG8gYmUgYmV0dGVyIHRvIGp1c3QgZG8gOiBmb3IgKHZhciBmcm9tIGluIGNvbmZpZykKKyAgICB2YXIgdG8gICA9IHRoaXMuY29uZmlnLnNwZWNpYWxSZXBsYWNlbWVudHNbaV07CisgICAgLy8gcHJldmVudCBpdGVyYXRpbmcgb3ZlciB3cm9uZyB0eXBlCisgICAgaWYgKCB0eXBlb2YgZnJvbS5yZXBsYWNlICE9ICdmdW5jdGlvbicgfHwgdHlwZW9mIHRvLnJlcGxhY2UgIT0gJ2Z1bmN0aW9uJyApCisgICAgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIC8vIGFsZXJ0KCdpbiA6ICcgKyBmcm9tICsgJz0+JyArIHRvKTsKKyAgICAvLworICAgIC8vIGh0bWwgPSBodG1sLnJlcGxhY2UocmVnLCB0byk7CisgICAgLy8gaHRtbCA9IGh0bWwucmVwbGFjZShmcm9tLCB0byk7CisgICAgdmFyIHJlZyA9IG5ldyBSZWdFeHAoWGluaGEuZXNjYXBlU3RyaW5nRm9yUmVnRXhwKGZyb20pLCAnZycpOworICAgIGh0bWwgPSBodG1sLnJlcGxhY2UocmVnLCB0by5yZXBsYWNlKC9cJC9nLCAnJCQkJCcpKTsgLy8gSUUgdXNlcyBkb3VibGVkIGRvbGxhciBzaWducyB0byBlc2NhcGUgYmFja3JlZnMsIGFsc28gYmV3YXJlIHRoYXQgSUUgYWxzbyBpbXBsZW1lbnRzICQmICRfIGFuZCAkJyBsaWtlIHBlcmwuCisgIH0KKyAgcmV0dXJuIGh0bWw7Cit9OworLyoqIFRyYW5zZm9ybXMgdGhlIHBhdGhzIGluIHNyYyAmIGhyZWYgYXR0cmlidXRlcworICogIAorICogIEBwcml2YXRlCisgKiAgQHNlZSBYaW5oYS5Db25maWcjZXhwYW5kUmVsYXRpdmVVcmwKKyAqICBAc2VlIFhpbmhhLkNvbmZpZyNzdHJpcFNlbGZOYW1lZEFuY2hvcnMKKyAqICBAc2VlIFhpbmhhLkNvbmZpZyNzdHJpcEJhc2VIcmVmCisgKiAgQHNlZSBYaW5oYS5Db25maWcjYmFzZUhyZWYKKyAqICBAcGFyYW0ge1N0cmluZ30gaHRtbCAKKyAqICBAcmV0dXJucyB7U3RyaW5nfSB0cmFuc2Zvcm1lZCBIVE1MCisgKi8KK1hpbmhhLnByb3RvdHlwZS5maXhSZWxhdGl2ZUxpbmtzID0gZnVuY3Rpb24oaHRtbCkKK3sKKworICBpZiAoIHR5cGVvZiB0aGlzLmNvbmZpZy5zdHJpcFNlbGZOYW1lZEFuY2hvcnMgIT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb25maWcuc3RyaXBTZWxmTmFtZWRBbmNob3JzICkKKyAgeworICAgIHZhciBzdHJpcFJlID0gbmV3IFJlZ0V4cCgiKChocmVmfHNyY3xiYWNrZ3JvdW5kKT1cIikoIitYaW5oYS5lc2NhcGVTdHJpbmdGb3JSZWdFeHAod2luZG93LnVuZXNjYXBlKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgvJi9nLCcmYW1wOycpKSkgKyAnKShbIz9dW15cJyIgXSopJywgJ2cnKTsKKyAgICBodG1sID0gaHRtbC5yZXBsYWNlKHN0cmlwUmUsICckMSQ0Jyk7CisgIH0KKworICBpZiAoIHR5cGVvZiB0aGlzLmNvbmZpZy5zdHJpcEJhc2VIcmVmICE9ICd1bmRlZmluZWQnICYmIHRoaXMuY29uZmlnLnN0cmlwQmFzZUhyZWYgKQorICB7CisgICAgdmFyIGJhc2VSZSA9IG51bGw7CisgICAgaWYgKCB0eXBlb2YgdGhpcy5jb25maWcuYmFzZUhyZWYgIT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb25maWcuYmFzZUhyZWYgIT09IG51bGwgKQorICAgIHsKKyAgICAgIGJhc2VSZSA9IG5ldyBSZWdFeHAoICIoKGhyZWZ8c3JjfGJhY2tncm91bmR8YWN0aW9uKT1cIikoIiArIFhpbmhhLmVzY2FwZVN0cmluZ0ZvclJlZ0V4cCh0aGlzLmNvbmZpZy5iYXNlSHJlZi5yZXBsYWNlKC8oW15cL11cLykoPz0uK1wuKVteXC9dKiQvLCAiJDEiKSkgKyAiKSIsICdnJyApOworCSAgaHRtbCA9IGh0bWwucmVwbGFjZShiYXNlUmUsICckMScpOworICAgIH0KKyAgICBiYXNlUmUgPSBuZXcgUmVnRXhwKCAiKChocmVmfHNyY3xiYWNrZ3JvdW5kfGFjdGlvbik9XCIpKCIgKyAgWGluaGEuZXNjYXBlU3RyaW5nRm9yUmVnRXhwKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYucmVwbGFjZSggL14oaHR0cHM/OlwvXC9bXlwvXSopKC4qKS8sICckMScgKSkgKyAiKSIsICdnJyApOworICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoYmFzZVJlLCAnJDEnKTsKKyAgfQorCisgIC8vIFJld3JpdGUgMjAxOCBleHBhbmRSZWxhdGl2ZVVybAorICAvLyAgbm90ZSB0aGF0IHRoaXMgbXVzdCBiZSBkb25lIEFGVEVSIHN0cmlwQmFzZUhyZWYgb3RoZXJ3aXNlIHdlIGNhbiBnZXQKKyAgLy8gIGFic29sdXRlIHVybHMsIHdoaWNoIHdvbid0IGJlIGV4cGFuZGVkCisgIGlmICggdHlwZW9mIHRoaXMuY29uZmlnLmV4cGFuZFJlbGF0aXZlVXJsICE9ICd1bmRlZmluZWQnICYmIHRoaXMuY29uZmlnLmV4cGFuZFJlbGF0aXZlVXJsICkgCisgIHsKKyAgICBpZihodG1sID09IG51bGwpIHJldHVybiAnJzsKKyAgICAKKyAgICAvLyBUaGVzZSBhcmUgdGhlIHJlZ2V4ZXMgZm9yIG1hdGNoaW5nIHRoZSB1cmxzIGdsb2JhbGx5CisgICAgdmFyIHVybF9yZWdleHBfZ2xvYmFsID0gWyAKKyAgICAgLyhzcmN8aHJlZnxiYWNrZ3JvdW5kfGFjdGlvbikoPSIpKFteIl0rPykoKD86KD86I3xcPykuKik/IikvZ2ksCisgICAgIC8oc3JjfGhyZWZ8YmFja2dyb3VuZHxhY3Rpb24pKD0nKShbXiddKz8pKCg/Oig/OiN8XD8pLiopPycpL2dpCisgICAgXTsKKyAgICAKKyAgICAvLyBBbmQgc2luZ2x5ICh5b3UgY2FuIG5vdCBjaGFuZ2UgYSByZWdleCBmbGFnIGFmdGVyIGNyZWF0aW9uKQorICAgIHZhciB1cmxfcmVnZXhwX3NpbmdsZSA9IFsgCisgICAgIC8oc3JjfGhyZWZ8YmFja2dyb3VuZHxhY3Rpb24pKD0iKShbXiJdKz8pKCg/Oig/OiN8XD8pLiopPyIpL2ksCisgICAgIC8oc3JjfGhyZWZ8YmFja2dyb3VuZHxhY3Rpb24pKD0nKShbXiddKz8pKCg/Oig/OiN8XD8pLiopPycpL2kKKyAgICBdOworICAgIAorICAgIC8vIEZpbmQgYSBsaXN0IG9mIHVybHMgaW4gdGhlIGRvY3VtZW50IHRvIGluc3BlY3QKKyAgICAvLyAgd2Ugd2FudCB1cmxzIHRoYXQgaW5jbHVkZSBhIHJlbGF0aXZlIGNvbXBvbmVudAorICAgIC8vCisgICAgLy8gIHRoYXQgaXMgLi8sICAuLi8sIG9yIHN0YXJ0IHdpdGggYSBiYXNlbmFtZQorICAgIC8vICAgKGRpcm5hbWUgb3IgZmlsZW5hbWUpCisgICAgLy8KKyAgICAvLyAgZXhjbHVkZWQgYXJlIHVybHMgd2l0aCBhIHByb3RvY29sIChodHRwOi8vLi4uKQorICAgIC8vICAgICAgICAgICAgICAgdXJscyB3aXRoIGEgc2FtZS1wcm90b2NvbCAoLy8uLi4pCisgICAgLy8KKyAgICAKKyAgICB2YXIgY2FuZGlkYXRlcyA9IFsgXTsKKyAgICAKKyAgICBmb3IodmFyIGkgPSAwOyBpIDwgdXJsX3JlZ2V4cF9nbG9iYWwubGVuZ3RoIDsgaSsrKQorICAgIHsKKworICAgICAgICAgICAgCisgICAgICB2YXIgYWxsX3VybHMgICA9ICBodG1sLm1hdGNoKHVybF9yZWdleHBfZ2xvYmFsW2ldKTsKKyAgICAgIGlmKCFhbGxfdXJscykgY29udGludWU7CisgICAgICAKKyAgICAgIGZvcih2YXIgaiA9IDA7IGogPCBhbGxfdXJscy5sZW5ndGg7IGorKykKKyAgICAgIHsKKyAgICAgICAgaWYoYWxsX3VybHNbal0ubWF0Y2goLz1bIiddKFthLXpdKzopP1wvXC8vKSkgY29udGludWU7IC8vIEV4Y2x1ZGU6ICcvLy4uLicgYW5kICdodHRwczovLycKKyAgICAgICAgaWYoISAodGhpcy5jb25maWcuZXhwYW5kUmVsYXRpdmVVcmwgPT0gJ2FsbCcpKQorICAgICAgICB7CisgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gcGFyZW50YWwgb3Igc2VsZi1yZWZlcmVudGlhbCBwYXRoIGNvbXBvbmVudAorICAgICAgICAgIGlmKGFsbF91cmxzW2pdLm1hdGNoKC89WyInXVthLXowLTlfLV0vaSkpICAgIGNvbnRpbnVlOyAvLyBFeGNsdWRlOiAncmVsYXRpdmVkaXIvZm9vLmh0bWwnCisgICAgICAgIH0KKyAgICAgICAgaWYoCisgICAgICAgICAgICAgKCAhYWxsX3VybHNbal0ubWF0Y2goLz1bIiddXC8vKSAgICAgICApIC8vIFN0YXJ0cyB3aXRoIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgc2xhc2gKKyAgICAgICAgICB8fCAoIGFsbF91cmxzW2pdLm1hdGNoKC89WyInXVwuezEsMn1cLy8pICkgLy8gU3RhcnRzIHdpdGggYSAuLyBvciAuLi8KKyAgICAgICAgICB8fCAoIGFsbF91cmxzW2pdLm1hdGNoKC9cL1wuezEsMn1cLy8gICApICkgLy8gSW5jbHVkZXMgYSAuLyBvciAuLi8KKyAgICAgICAgICB8fCAoIGFsbF91cmxzW2pdLm1hdGNoKC9cL3syLH0vICAgKSAgICAgICkgLy8gSW5jbHVkZXMgcmVwZWF0ZWQgLywgd2Ugd2lsbCBjbGVhbiB0aGVzZSB1cCB0b28KKyAgICAgICAgKQorICAgICAgICB7CisgICAgICAgICAgLy8gV2UgaGF2ZSB0byBydW4gdGhlIG1hdGNoIGFnYWluIHRvIGdldCB0aGUgcGFydHMKKyAgICAgICAgICBjYW5kaWRhdGVzW2NhbmRpZGF0ZXMubGVuZ3RoXSA9ICBhbGxfdXJsc1tqXS5tYXRjaCh1cmxfcmVnZXhwX3NpbmdsZVtpXSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgICAgICAgCisgICAgLy8gR2V0IG91ciBQQVRIIGZvciB0aGUgcGFnZSB0aGF0IGlzIGRvaW5nIHRoZSBlZGl0aW5nIHNvbWV0aGluZyBsaWtlIC9mb28vYmFyL3hpbmhhLnBocAorICAgIHZhciBvdXJwYXRoID0gZG9jdW1lbnQubG9jYXRpb24ucGF0aG5hbWU7CisgICAgCisgICAgLy8gUmVtb3ZlIG91ciBiYXNlbmFtZSAtLT4gL2Zvby9iYXIvCisgICAgb3VycGF0aCA9IG91cnBhdGgucmVwbGFjZSgvXC9bXi9dKyQvLCAnLycpOworICAgIAorICAgIC8vIEZvciBlYWNoIG9mIHRoZSBjYW5kaWRhdGUgdXJscywgZml4IHRoZW0KKyAgICBmb3IodmFyIGkgPSAwOyBpIDwgY2FuZGlkYXRlcy5sZW5ndGg7IGkrKykKKyAgICB7CisgICAgICB2YXIgc3JjID0gY2FuZGlkYXRlc1tpXTsKKyAgICAgIAorICAgICAgdmFyIGxhc3RIdG1sID0gaHRtbDsKKyAgICAgIAorICAgICAgLy8gQWRkIHRoZSByZWxhdGl2ZSB1cmwgdG8gb3VyIHBhdGggaWYgaXQgaXMgbm90IHNlbWktYWJzb2x1dGUKKyAgICAgIHZhciBmaXhlZFVybCA9ICghc3JjWzNdLm1hdGNoKC9eXC8vKSkgPyBvdXJwYXRoICsgc3JjWzNdIDogc3JjWzNdOworICAgICAgCisgICAgICAvLyBSZW1vdmUgYW55IC8uLyBjb21wb25lbnRzCisgICAgICBmaXhlZFVybCA9IGZpeGVkVXJsLnJlcGxhY2UoL1wvXC5cLy9nLCAnLycpOworICAgICAgCisgICAgICAvLyBSZWR1Y2UgYW55IG11bHRpcGxlIHNsYXNoCisgICAgICBmaXhlZFVybCA9IGZpeGVkVXJsLnJlcGxhY2UoL1wvezIsfS9nLCAnLycpOworICAgICAgCisgICAgICAvLyBSZW1vdmUgYW55IC9bc29tZXRoaW5nXS8uLi8gY29tcG9uZW50cworICAgICAgLy8gICh0aGlzIG1ha2VzIC9mb28vLi4vYmFyIGJlY29tZSAvYmFyIGNvcnJlY3RseQorICAgICAgLy8gIHJlcGVhdCB0aGlzIHVudGlsIGVpdGhlciB0aGVyZSBhcmUgbm8gbW9yZSAvLi4vCisgICAgICAvLyAgb3IgdGhlcmUgaGFzIGJlZW4gbm8gZnVydGhlciBjaGFuZ2UKKyAgICAgIHZhciBsYXN0Rml4ZWRVcmw7CisgICAgICBkbworICAgICAgeworICAgICAgICBsYXN0Rml4ZWRVcmwgPSBmaXhlZFVybDsKKyAgICAgICAgZml4ZWRVcmwgPSBmaXhlZFVybC5yZXBsYWNlKC9cL1teL10rXC9cLlwuXC8vZywgJy8nKTsgICAgICAgICAgCisgICAgICB9IHdoaWxlKCBsYXN0Rml4ZWRVcmwgIT0gZml4ZWRVcmwgKTsKKyAgICAgIAorICAgICAgLy8gTm93IGlmIHdlIGhhdmUgYW55IC8uLi8gbGVmdCwgdGhleSBzaG91bGQgYmUgaW52YWxpZCwgc28ga2lsbCB0aG9zZQorICAgICAgZml4ZWRVcmwgPSBmaXhlZFVybC5yZXBsYWNlKCcvLi4vJywgJy8nKTsKKyAgICAgIAorICAgICAgLy8gQW5kIHRoYXQncyBhbGwKKyAgICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoIHNyY1swXSwgc3JjWzFdK3NyY1syXStmaXhlZFVybCtzcmNbNF0pOyAgCisgICAgfQorICB9CisgIAorICByZXR1cm4gaHRtbDsKK307CisKKy8qKiByZXRyaWV2ZSB0aGUgSFRNTCAoZmFzdGVzdCB2ZXJzaW9uLCBidXQgdXNlcyBpbm5lckhUTUwpCisgKiAgCisgKiAgQHByaXZhdGUKKyAqICBAcmV0dXJucyB7U3RyaW5nfSBIVE1MIGNvbnRlbnQKKyAqLworWGluaGEucHJvdG90eXBlLmdldElubmVySFRNTCA9IGZ1bmN0aW9uKCkKK3sKKyAgaWYgKCAhdGhpcy5fZG9jLmJvZHkgKQorICB7CisgICAgcmV0dXJuICcnOworICB9CisgIHZhciBodG1sID0gIiI7CisgIHN3aXRjaCAoIHRoaXMuX2VkaXRNb2RlICkKKyAgeworICAgIGNhc2UgInd5c2l3eWciOgorICAgICAgaWYgKCAhdGhpcy5jb25maWcuZnVsbFBhZ2UgKQorICAgICAgeworICAgICAgICAvLyByZXR1cm4gdGhpcy5fZG9jLmJvZHkuaW5uZXJIVE1MOworICAgICAgICBodG1sID0gdGhpcy5fZG9jLmJvZHkuaW5uZXJIVE1MOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBodG1sID0gdGhpcy5kb2N0eXBlICsgIlxuIiArIHRoaXMuX2RvYy5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MOworICAgICAgfQorICAgIGJyZWFrOworICAgIGNhc2UgInRleHRtb2RlIiA6CisgICAgICBodG1sID0gdGhpcy5fdGV4dEFyZWEudmFsdWU7CisgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGFsZXJ0KCJNb2RlIDwiICsgdGhpcy5fZWRpdE1vZGUgKyAiPiBub3QgZGVmaW5lZCEiKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHJldHVybiBodG1sOworfTsKKworLyoqIENvbXBsZXRlbHkgY2hhbmdlIHRoZSBIVE1MIGluc2lkZQorICoKKyAqICBAcHJpdmF0ZQorICogIEBwYXJhbSB7U3RyaW5nfSBodG1sIG5ldyBjb250ZW50LCBzaG91bGQgaGF2ZSBiZWVuIHJ1biB0aHJvdWdoIGlud2FyZEh0bWwoKSBmaXJzdAorICovCitYaW5oYS5wcm90b3R5cGUuc2V0SFRNTCA9IGZ1bmN0aW9uKGh0bWwpCit7CisgIGlmICggIXRoaXMuY29uZmlnLmZ1bGxQYWdlICkKKyAgeworICAgIHRoaXMuX2RvYy5ib2R5LmlubmVySFRNTCA9IGh0bWw7CisgIH0KKyAgZWxzZQorICB7CisgICAgdGhpcy5zZXRGdWxsSFRNTChodG1sKTsKKyAgfQorICB0aGlzLl90ZXh0QXJlYS52YWx1ZSA9IGh0bWw7Cit9OworCisvKiogc2V0cyB0aGUgZ2l2ZW4gZG9jdHlwZSAodXNlZnVsIG9ubHkgd2hlbiBjb25maWcuZnVsbFBhZ2UgaXMgdHJ1ZSkKKyAqICAKKyAqICBAcHJpdmF0ZQorICogIEBwYXJhbSB7U3RyaW5nfSBkb2N0eXBlCisgKi8KK1hpbmhhLnByb3RvdHlwZS5zZXREb2N0eXBlID0gZnVuY3Rpb24oZG9jdHlwZSkKK3sKKyAgdGhpcy5kb2N0eXBlID0gZG9jdHlwZTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBDYXRlZ29yeTogVVRJTElUWSBGVU5DVElPTlMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKiBWYXJpYWJsZSB1c2VkIHRvIHBhc3MgdGhlIG9iamVjdCB0byB0aGUgcG9wdXAgZWRpdG9yIHdpbmRvdy4KKyAqICBARklYTUU6IElzIHRoaXMgaW4gdXNlPworICogIEBkZXByZWNhdGVkIAorICogIEBwcml2YXRlCisgKiAgQHR5cGUge09iamVjdH0KKyAqLworWGluaGEuX29iamVjdCA9IG51bGw7CisKKy8qKiBBcnJheXMgYXJlIGlkZW50aWZpZWQgYXMgIm9iamVjdCIgaW4gdHlwZW9mIGNhbGxzLiBBZGRpbmcgdGhpcyB0YWcgdG8gdGhlIEFycmF5IHByb3RvdHlwZSBhbGxvd3MgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgdHdvCisgKi8KK0FycmF5LnByb3RvdHlwZS5pc0FycmF5ID0gdHJ1ZTsKKy8qKiBSZWdFeHBzIGFyZSBpZGVudGlmaWVkIGFzICJvYmplY3QiIGluIHR5cGVvZiBjYWxscy4gQWRkaW5nIHRoaXMgdGFnIHRvIHRoZSBSZWdFeHAgcHJvdG90eXBlIGFsbG93cyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSB0d28KKyAqLworUmVnRXhwLnByb3RvdHlwZS5pc1JlZ0V4cCA9IHRydWU7CisvKiogZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xvbmUgb2YgdGhlIGdpdmVuIG9iamVjdAorICogIAorICogIEBwcml2YXRlCisgKiAgQHBhcmFtIHtPYmplY3R9IG9iagorICogIEByZXR1cm5zIHtPYmplY3R9IGNsb25lZCBvYmplY3QKKyAqLworWGluaGEuY2xvbmVPYmplY3QgPSBmdW5jdGlvbihvYmopCit7CisgIGlmICggIW9iaiApCisgIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgbmV3T2JqID0gb2JqLmlzQXJyYXkgPyBbXSA6IHt9OworCisgIC8vIGNoZWNrIGZvciBmdW5jdGlvbiBhbmQgUmVnRXhwIG9iamVjdHMgKGFzIHVzdWFsLCBJRSBpcyBmdWNrZWQgdXApCisgIGlmICggb2JqLmNvbnN0cnVjdG9yLnRvU3RyaW5nKCkubWF0Y2goIC9ccypmdW5jdGlvbiBGdW5jdGlvblwoLyApIHx8IHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyApCisgIHsKKyAgICBuZXdPYmogPSBvYmo7IC8vIGp1c3QgY29weSByZWZlcmVuY2UgdG8gaXQKKyAgfQorICBlbHNlIGlmICggIG9iai5pc1JlZ0V4cCApCisgIHsKKyAgICBuZXdPYmogPSBldmFsKCBvYmoudG9TdHJpbmcoKSApOyAvL3NlZSBubyB3YXkgd2l0aG91dCBldmFsCisgIH0KKyAgZWxzZQorICB7CisgICAgZm9yICggdmFyIG4gaW4gb2JqICkKKyAgICB7CisgICAgICB2YXIgbm9kZSA9IG9ialtuXTsKKyAgICAgIGlmICggdHlwZW9mIG5vZGUgPT0gJ29iamVjdCcgKQorICAgICAgeworICAgICAgICBuZXdPYmpbbl0gPSBYaW5oYS5jbG9uZU9iamVjdChub2RlKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgbmV3T2JqW25dID0gbm9kZTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gbmV3T2JqOworfTsKKworCisvKiogRXh0ZW5kIG9uZSBjbGFzcyBmcm9tIGFub3RoZXIsIHRoYXQgaXMsIG1ha2UgYSBzdWIgY2xhc3MuCisgKiAgVGhpcyBtYW5uZXIgb2YgZG9pbmcgaXQgd2FzIHByb2JhYmx5IGZpcnN0IGRldmlzZWQgYnkgS2V2aW4gTGluZHNleQorICoKKyAqICBodHRwOi8va2V2bGluZGV2LmNvbS90dXRvcmlhbHMvamF2YXNjcmlwdC9pbmhlcml0YW5jZS9pbmRleC5odG0KKyAqCisgKiAgSXQgaGFzIHN1YnNlcXVlbnRseSBiZWVuIHVzZWQgaW4gb25lIGZvcm0gb3IgYW5vdGhlciBieSB2YXJpb3VzIHRvb2xraXRzIAorICogIHN1Y2ggYXMgdGhlIFlVSS4KKyAqCisgKiAgSSBtYWtlIG5vIGNsYWltIGFzIHRvIHVuZGVyc3RhbmRpbmcgaXQgcmVhbGx5LCBidXQgaXQgd29ya3MuCisgKiAKKyAqICBFeGFtcGxlIFVzYWdlOgorICogIHt7eworICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKyAgICAvLyA9PT09PT09PT0gIE1BS0lORyBUSEUgSU5JVElBTCBTVVBFUiBDTEFTUyA9PT09PT09PT09PQorICAgIAorICAgICAgICBkb2N1bWVudC53cml0ZSgiPGgxPlN1cGVyY2xhc3MgQ3JlYXRpb24gQW5kIFRlc3Q8L2gxPiIpOworICAgIAorICAgICAgICBmdW5jdGlvbiBWZWhpY2xlKG5hbWUsIHNvdW5kKQorICAgICAgICB7ICAgIAorICAgICAgICAgIHRoaXMubmFtZSAgPSBuYW1lOworICAgICAgICAgIHRoaXMuc291bmQgPSBzb3VuZAorICAgICAgICB9CisgICAgICAKKyAgICAgICAgVmVoaWNsZS5wcm90b3R5cGUucHJlc3NIb3JuID0gZnVuY3Rpb24oKQorICAgICAgICB7CisgICAgICAgICAgZG9jdW1lbnQud3JpdGUodGhpcy5uYW1lICsgJzogJyArIHRoaXMuc291bmQgKyAnPGJyLz4nKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmFyIEJlZGZvcmQgID0gbmV3IFZlaGljbGUoJ0JlZGZvcmQgVmFuJywgJ0hvbmsgSG9uaycpOworICAgICAgICBCZWRmb3JkLnByZXNzSG9ybigpOyAvLyBWZWhpY2xlOjpwcmVzc0hvcm4oKSBpcyBkZWZpbmVkCisgICAgCisgICAgCisgICAgLy8gPT09PT09PT09IE1BS0lORyBBIFNVQkNMQVNTIE9GIEEgU1VQRVIgQ0xBU1MgPT09PT09PT09CisgICAgCisgICAgICAgIGRvY3VtZW50LndyaXRlKCI8aDE+U3ViY2xhc3MgQ3JlYXRpb24gQW5kIFRlc3Q8L2gxPiIpOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSB0aGUgc3ViIGNsYXNzIGNvbnN0cnVjdG9yIGZpcnN0CisgICAgICAgIENhciA9IGZ1bmN0aW9uKG5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAvLyBUaGlzIGlzIGhvdyB3ZSBjYWxsIHRoZSBwYXJlbnQncyBjb25zdHJ1Y3Rvciwgbm90ZSB0aGF0CisgICAgICAgICAgLy8gd2UgYXJlIHVzaW5nIENhci5wYXJlbnQuLi4uIG5vdCAidGhpcyIsIHdlIGNhbid0IHVzZSB0aGlzLgorICAgICAgICAgIENhci5wYXJlbnRDb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIG5hbWUsICdUb290IFRvb3QnKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmVtZW1iZXIgdGhlIHN1YmNsYXNzIGNvbWVzIGZpcnN0LCB0aGVuIHRoZSBiYXNlIGNsYXNzLCB5b3UgYXJlIGV4dGVuZGluZworICAgICAgICAvLyBDYXIgd2l0aCB0aGUgbWV0aG9kcyBhbmQgcHJvcGVydGllcyBvZiBWZWhpY2xlLgorICAgICAgICBYaW5oYS5leHRlbmQoQ2FyLCBWZWhpY2xlKTsKKyAgICAgICAgCisgICAgICAgIHZhciBNYXpkYU14NSA9IG5ldyBDYXIoJ01hemRhIE1YNScpOyAgCisgICAgICAgIE1hemRhTXg1LnByZXNzSG9ybigpOyAvLyBDYXI6OnByZXNzSG9ybigpIGlzIGluaGVyaXRlZCBmcm9tIFZlaGljbGU6OnByZXNzSG9ybigpCisgICAgCisgICAgLy8gPT09PT09PT09ICBBRERJTkcgTUVUSE9EUyBUTyBUSEUgU1VCIENMQVNTID09PT09PT09PT09CisKKyAgICAgICAgZG9jdW1lbnQud3JpdGUoIjxoMT5BZGQgTWV0aG9kIHRvIFN1YiBDbGFzcyBBbmQgVGVzdDwvaDE+Iik7CisgICAgICAgIAorICAgICAgICBDYXIucHJvdG90eXBlLmlzQUNhciA9IGZ1bmN0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgIGRvY3VtZW50LndyaXRlKHRoaXMubmFtZSArICI6IENhcjo6aXNBQ2FyKCkgaXMgaW1wbGVtZW50ZWQsIHRoaXMgaXMgYSBjYXIhIDxici8+Iik7CisgICAgICAgICAgdGhpcy5wcmVzc0hvcm4oKTsKKyAgICAgICAgfQorICAgICAgIAorICAgICAgICBNYXpkYU14NS5pc0FDYXIoKTsgLy8gQ2FyOjppc0FDYXIoKSBpcyBkZWZpbmVkIGFzIGFib3ZlCisgICAgICAgIHRyeSAgICAgIHsgQmVkZm9yZC5pc0FDYXIoKTsgfSAvLyBWZWhpY2xlOjppc0FDYXIoKSBpcyBub3QgZGVmaW5lZCwgd2lsbCB0aHJvdyB0aGlzIGV4Y2VwdGlvbgorICAgICAgICBjYXRjaChlKSB7IGRvY3VtZW50LndyaXRlKCJCZWRmb3JkOiBWZWhpY2xlOjpvbkdldHRpbmdDdXRPZmYoKSBub3QgaW1wbGVtZW50ZWQsIHRoaXMgaXMgbm90IGEgY2FyITxici8+Iik7IH0KKyAgICAKKyAgICAvLyA9PT09PT09PT0gIEVYVEVORElORyBBIE1FVEhPRCAoQ0FMTElORyBNQVNLRUQgUEFSRU5UIE1FVEhPRFMpID09PT09PT09PT09CisgICAgCisgICAgICAgIGRvY3VtZW50LndyaXRlKCI8aDE+RXh0ZW5kL092ZXJyaWRlIEluaGVyaXRlZCBNZXRob2QgaW4gU3ViIENsYXNzIEFuZCBUZXN0PC9oMT4iKTsKKyAgICAgICAgCisgICAgICAgIENhci5wcm90b3R5cGUucHJlc3NIb3JuID0gZnVuY3Rpb24oKQorICAgICAgICB7IAorICAgICAgICAgIGRvY3VtZW50LndyaXRlKHRoaXMubmFtZSArICc6IEkgYW0gZ29pbmcgdG8gcHJlc3MgdGhlIGhvcm4uLi4gPGJyLz4nKTsKKyAgICAgICAgICBDYXIuc3VwZXJDbGFzcy5wcmVzc0hvcm4uY2FsbCh0aGlzKTsgICAgICAgIAorICAgICAgICB9CisgICAgICAgIE1hemRhTXg1LnByZXNzSG9ybigpOyAvLyBDYXI6OnByZXNzSG9ybigpCisgICAgICAgIEJlZGZvcmQucHJlc3NIb3JuKCk7ICAvLyBWZWhpY2xlOjpwcmVzc0hvcm4oKQorICAgICAgICAKKyAgICAvLyA9PT09PT09PT0gIE1PRElGWUlORyBUSEUgU1VQRVJDTEFTUyBBRlRFUiBTVUJDTEFTU0lORyA9PT09PT09PT09PQorICAgIAorICAgICAgICBkb2N1bWVudC53cml0ZSgiPGgxPkFkZCBOZXcgTWV0aG9kIHRvIFN1cGVyY2xhc3MgQW5kIFRlc3QgSW4gU3ViY2xhc3M8L2gxPiIpOyAgCisgICAgICAgIAorICAgICAgICBWZWhpY2xlLnByb3RvdHlwZS5zdGFydFVwID0gZnVuY3Rpb24oKSB7IGRvY3VtZW50LndyaXRlKHRoaXMubmFtZSArICI6IFZyb29vb20gPGJyLz4iKTsgfSAgCisgICAgICAgIE1hemRhTXg1LnN0YXJ0VXAoKTsgLy8gQ2FycyBnZXQgdGhlIHByb3RvdHlwZSdkIHN0YXJ0VXAoKSBhbHNvLgorICAgICAgICAKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgfX19ICAKKyAqCisgKiAgQHBhcmFtIHN1YmNsYXNzX2NvbnN0cnVjdG9yIChvcHRpb25hbCkgIENvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciB0aGUgc3ViY2xhc3MKKyAqICBAcGFyYW0gc3VwZXJjbGFzcyBDb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgdGhlIHN1cGVyY2xhc3MgCisgKi8KKworWGluaGEuZXh0ZW5kID0gZnVuY3Rpb24oc3ViQ2xhc3MsIGJhc2VDbGFzcykgeworICAgZnVuY3Rpb24gaW5oZXJpdGFuY2UoKSB7fQorICAgaW5oZXJpdGFuY2UucHJvdG90eXBlID0gYmFzZUNsYXNzLnByb3RvdHlwZTsKKworICAgc3ViQ2xhc3MucHJvdG90eXBlID0gbmV3IGluaGVyaXRhbmNlKCk7CisgICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzczsKKyAgIHN1YkNsYXNzLnBhcmVudENvbnN0cnVjdG9yID0gYmFzZUNsYXNzOworICAgc3ViQ2xhc3Muc3VwZXJDbGFzcyA9IGJhc2VDbGFzcy5wcm90b3R5cGU7Cit9CisKKy8qKiBFdmVudCBGbHVzaGluZworICogIFRvIHRyeSBhbmQgd29yayBhcm91bmQgbWVtb3J5IGxlYWtzIGluIHRoZSByYXRoZXIgYnJva2VuCisgKiAgZ2FyYmFnZSBjb2xsZWN0b3IgaW4gSUUsIFhpbmhhLmZsdXNoRXZlbnRzIGNhbiBiZSBjYWxsZWQKKyAqICBvbnVubG9hZCwgaXQgd2lsbCByZW1vdmUgYW55IGV2ZW50IGxpc3RlbmVycyAodGhhdCB3ZXJlIGFkZGVkCisgKiAgdGhyb3VnaCBfYWRkRXZlbnQocykpIGFuZCBjbGVhciBhbnkgRE9NLTAgZXZlbnRzLgorICogIEBwcml2YXRlCisgKgorICovCitYaW5oYS5mbHVzaEV2ZW50cyA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIHggPSAwOworICAvLyBAdG9kbyA6IGNoZWNrIGlmIEFycmF5LnByb3RvdHlwZS5wb3AgZXhpc3RzIGZvciBldmVyeSBzdXBwb3J0ZWQgYnJvd3NlcnMKKyAgdmFyIGUgPSBYaW5oYS5fZXZlbnRGbHVzaGVycy5wb3AoKTsKKyAgd2hpbGUgKCBlICkKKyAgeworICAgIHRyeQorICAgIHsKKyAgICAgIGlmICggZS5sZW5ndGggPT0gMyApCisgICAgICB7CisgICAgICAgIFhpbmhhLl9yZW1vdmVFdmVudChlWzBdLCBlWzFdLCBlWzJdKTsKKyAgICAgICAgeCsrOworICAgICAgfQorICAgICAgZWxzZSBpZiAoIGUubGVuZ3RoID09IDIgKQorICAgICAgeworICAgICAgICBlWzBdWydvbicgKyBlWzFdXSA9IG51bGw7CisgICAgICAgIGVbMF0uX3hpbmhhX2RvbTBFdmVudHNbZVsxXV0gPSBudWxsOworICAgICAgICB4Kys7CisgICAgICB9CisgICAgfQorICAgIGNhdGNoKGV4KQorICAgIHsKKyAgICAgIC8vIERvIE5vdGhpbmcKKyAgICB9CisgICAgZSA9IFhpbmhhLl9ldmVudEZsdXNoZXJzLnBvcCgpOworICB9CisgIAorICAvKiAKKyAgICAvLyBUaGlzIGNvZGUgaXMgdmVyeSBhZ3Jlc3NpdmUsIGFuZCBpbmNyZWRpYmx5IHNsb3cgaW4gSUUsIHNvIEkndmUgZGlzYWJsZWQgaXQuCisgICAgCisgICAgaWYoZG9jdW1lbnQuYWxsKQorICAgIHsKKyAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5hbGwubGVuZ3RoOyBpKyspCisgICAgICB7CisgICAgICAgIGZvcih2YXIgaiBpbiBkb2N1bWVudC5hbGxbaV0pCisgICAgICAgIHsKKyAgICAgICAgICBpZigvXm9uLy50ZXN0KGopICYmIHR5cGVvZiBkb2N1bWVudC5hbGxbaV1bal0gPT0gJ2Z1bmN0aW9uJykKKyAgICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5hbGxbaV1bal0gPSBudWxsOworICAgICAgICAgICAgeCsrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgKi8KKyAgCisgIC8vIGFsZXJ0KCdGbHVzaGVkICcgKyB4ICsgJyBldmVudHMuJyk7Cit9OworIC8qKiBIb2xkcyB0aGUgZXZlbnRzIHRvIGJlIGZsdXNoZWQKKyAgKiBAdHlwZSBBcnJheQorICAqLworWGluaGEuX2V2ZW50Rmx1c2hlcnMgPSBbXTsKKworaWYgKCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICkKK3sKKyAvKiogYWRkcyBhbiBldmVudCBsaXN0ZW5lciBmb3IgdGhlIHNwZWNpZmllZCBlbGVtZW50IGFuZCBldmVudCB0eXBlCisgKiAgCisgKiAgQHB1YmxpYworICogIEBzZWUgICBYaW5oYSNfYWRkRXZlbnRzCisgKiAgQHNlZSAgIFhpbmhhI2FkZERvbTBFdmVudAorICogIEBzZWUgICBYaW5oYSNwcmVwZW5kRG9tMEV2ZW50CisgKiAgQHBhcmFtIHtEb21Ob2RlfSAgZWwgdGhlIERPTSBlbGVtZW50IHRoZSBldmVudCBzaG91bGQgYmUgYXR0YWNoZWQgdG8gCisgKiAgQHBhcmFtIHtTdHJpbmd9ICAgZXZuYW1lIHRoZSBuYW1lIG9mIHRoZSBldmVudCB0byBsaXN0ZW4gZm9yICh3aXRob3V0IGxlYWRpbmcgIm9uIikKKyAqICBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgaXMgZmlyZWQKKyAqLworICBYaW5oYS5fYWRkRXZlbnQgPSBmdW5jdGlvbihlbCwgZXZuYW1lLCBmdW5jKQorICB7CisgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldm5hbWUsIGZ1bmMsIGZhbHNlKTsKKyAgICBYaW5oYS5fZXZlbnRGbHVzaGVycy5wdXNoKFtlbCwgZXZuYW1lLCBmdW5jXSk7CisgIH07CisgCisgLyoqIHJlbW92ZXMgYW4gZXZlbnQgbGlzdGVuZXIgcHJldmlvdXNseSBhZGRlZAorICogIAorICogIEBwdWJsaWMKKyAqICBAc2VlICAgWGluaGEjX3JlbW92ZUV2ZW50cworICogIEBwYXJhbSB7RG9tTm9kZX0gIGVsIHRoZSBET00gZWxlbWVudCB0aGUgZXZlbnQgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSAKKyAqICBAcGFyYW0ge1N0cmluZ30gICBldm5hbWUgdGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRoZSBsaXN0ZW5lciBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tICh3aXRob3V0IGxlYWRpbmcgIm9uIikKKyAqICBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jIHRoZSBmdW5jdGlvbiB0byBiZSByZW1vdmVkCisgKi8KKyAgWGluaGEuX3JlbW92ZUV2ZW50ID0gZnVuY3Rpb24oZWwsIGV2bmFtZSwgZnVuYykKKyAgeworICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZuYW1lLCBmdW5jLCBmYWxzZSk7CisgIH07CisgCisgLyoqIHN0b3BzIGJ1YmJsaW5nIG9mIHRoZSBldmVudCwgaWYgbm8gZnVydGhlciBsaXN0ZW5lcnMgc2hvdWxkIGJlIHRyaWdnZXJlZAorICogIAorICogIEBwdWJsaWMKKyAqICBAcGFyYW0ge2V2ZW50fSBldiB0aGUgZXZlbnQgdG8gYmUgc3RvcHBlZAorICovCisgIFhpbmhhLl9zdG9wRXZlbnQgPSBmdW5jdGlvbihldikKKyAgeworICAgIGlmKGV2LnByZXZlbnREZWZhdWx0KQorICAgIHsgIAorICAgICAgZXYucHJldmVudERlZmF1bHQoKTsKKyAgICB9CisgICAgLy8gSUU5IG5vdyBzdXBwb3J0cyBhZGRFdmVudExpc3RlbmVyLCBidXQgZG9lcyBub3Qgc3VwcG9ydCBwcmV2ZW50RGVmYXVsdC4gIFNpZ2gKKyAgICBlbHNlCisgICAgeworICAgICAgZXYucmV0dXJuVmFsdWUgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYoZXYuc3RvcFByb3BhZ2F0aW9uKQorICAgIHsKKyAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpOworICAgIH0KKyAgICAvLyBJRTkgbm93IHN1cHBvcnRzIGFkZEV2ZW50TGlzdGVuZXIsIGJ1dCBkb2VzIG5vdCBzdXBwb3J0IHN0b3BQcm9wYWdhdGlvbi4gIFNpZ2gKKyAgICBlbHNlCisgICAgeworICAgICAgZXYuY2FuY2VsQnViYmxlID0gdHJ1ZTsKKyAgICB9CisgIH07Cit9CisgLyoqIHNhbWUgYXMgYWJvdmUsIGZvciBJRQorICogIAorICovCitlbHNlIGlmICggZG9jdW1lbnQuYXR0YWNoRXZlbnQgKQoreworICBYaW5oYS5fYWRkRXZlbnQgPSBmdW5jdGlvbihlbCwgZXZuYW1lLCBmdW5jKQorICB7CisgICAgZWwuYXR0YWNoRXZlbnQoIm9uIiArIGV2bmFtZSwgZnVuYyk7CisgICAgWGluaGEuX2V2ZW50Rmx1c2hlcnMucHVzaChbZWwsIGV2bmFtZSwgZnVuY10pOworICB9OworICBYaW5oYS5fcmVtb3ZlRXZlbnQgPSBmdW5jdGlvbihlbCwgZXZuYW1lLCBmdW5jKQorICB7CisgICAgZWwuZGV0YWNoRXZlbnQoIm9uIiArIGV2bmFtZSwgZnVuYyk7CisgIH07CisgIFhpbmhhLl9zdG9wRXZlbnQgPSBmdW5jdGlvbihldikKKyAgeworICAgIHRyeQorICAgIHsKKyAgICAgIGV2LmNhbmNlbEJ1YmJsZSA9IHRydWU7CisgICAgICBldi5yZXR1cm5WYWx1ZSA9IGZhbHNlOworICAgIH0KKyAgICBjYXRjaCAoZXgpCisgICAgeworICAgICAgLy8gUGVyaGFwcyB3ZSBjb3VsZCB0cnkgaGVyZSB0byBzdG9wIHRoZSB3aW5kb3cuZXZlbnQKKyAgICAgIC8vIHdpbmRvdy5ldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlOworICAgICAgLy8gd2luZG93LmV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7CisgICAgfQorICB9OworfQorZWxzZQoreworICBYaW5oYS5fYWRkRXZlbnQgPSBmdW5jdGlvbihlbCwgZXZuYW1lLCBmdW5jKQorICB7CisgICAgYWxlcnQoJ19hZGRFdmVudCBpcyBub3Qgc3VwcG9ydGVkJyk7CisgIH07CisgIFhpbmhhLl9yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKGVsLCBldm5hbWUsIGZ1bmMpCisgIHsKKyAgICBhbGVydCgnX3JlbW92ZUV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQnKTsKKyAgfTsKKyAgWGluaGEuX3N0b3BFdmVudCA9IGZ1bmN0aW9uKGV2KQorICB7CisgICAgYWxlcnQoJ19zdG9wRXZlbnQgaXMgbm90IHN1cHBvcnRlZCcpOworICB9OworfQorIC8qKiBhZGQgc2V2ZXJhbCBldmVudHMgYXQgb25jZSB0byBvbmUgZWxlbWVudAorICogIAorICogIEBwdWJsaWMKKyAqICBAc2VlIFhpbmhhI19hZGRFdmVudAorICogIEBwYXJhbSB7RG9tTm9kZX0gIGVsIHRoZSBET00gZWxlbWVudCB0aGUgZXZlbnQgc2hvdWxkIGJlIGF0dGFjaGVkIHRvIAorICogIEBwYXJhbSB7QXJyYXl9ICAgIGV2cyB0aGUgbmFtZXMgb2YgdGhlIGV2ZW50IHRvIGxpc3RlbiBmb3IgKHdpdGhvdXQgbGVhZGluZyAib24iKQorICogIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBldmVudCBpcyBmaXJlZAorICovCitYaW5oYS5fYWRkRXZlbnRzID0gZnVuY3Rpb24oZWwsIGV2cywgZnVuYykKK3sKKyAgZm9yICggdmFyIGkgPSBldnMubGVuZ3RoOyAtLWkgPj0gMDsgKQorICB7CisgICAgWGluaGEuX2FkZEV2ZW50KGVsLCBldnNbaV0sIGZ1bmMpOworICB9Cit9OworIC8qKiByZW1vdmUgc2V2ZXJhbCBldmVudHMgYXQgb25jZSB0byBmcm9tIGVsZW1lbnQKKyAqICAKKyAqICBAcHVibGljCisgKiAgQHNlZSBYaW5oYSNfcmVtb3ZlRXZlbnQKKyAqICBAcGFyYW0ge0RvbU5vZGV9ICBlbCB0aGUgRE9NIGVsZW1lbnQgdGhlIGV2ZW50cyBzaG91bGQgYmUgcmVtb3ZlIGZyb20KKyAqICBAcGFyYW0ge0FycmF5fSAgICBldnMgdGhlIG5hbWVzIG9mIHRoZSBldmVudHMgdGhlIGxpc3RlbmVyIHNob3VsZCBiZSByZW1vdmVkIGZyb20gKHdpdGhvdXQgbGVhZGluZyAib24iKQorICogIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRvIGJlIHJlbW92ZWQKKyAqLworWGluaGEuX3JlbW92ZUV2ZW50cyA9IGZ1bmN0aW9uKGVsLCBldnMsIGZ1bmMpCit7CisgIGZvciAoIHZhciBpID0gZXZzLmxlbmd0aDsgLS1pID49IDA7ICkKKyAgeworICAgIFhpbmhhLl9yZW1vdmVFdmVudChlbCwgZXZzW2ldLCBmdW5jKTsKKyAgfQorfTsKKworLyoqIEFkZHMgYSBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGluIHRoZSBtb21lbnQgdGhlIERPTSBpcyByZWFkeSwgYnV0IGFzIG9wcG9zZWQgdG8gd2luZG93Lm9ubG9hZCBiZWZvcmUgaW1hZ2VzIGV0Yy4gaGF2ZSBiZWVuIGxvYWRlZAorKiAgIGh0dHA6Ly9kZWFuLmVkd2FyZHMubmFtZS93ZWJsb2cvMjAwNi8wNi9hZ2Fpbi8KKyogICBJRSBwYXJ0IGZyb20galF1ZXJ5CisqICBAcHVibGljCisqICBAYXV0aG9yIERlYW4gRWR3YXJkcy9NYXR0aGlhcyBNaWxsZXIvIEpvaG4gUmVzaWcgLyBEaWVnbyBQZXJpbmkKKyogIEBwYXJhbSB7RnVuY3Rpb259ICBmdW5jIHRoZSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZAorKiAgQHBhcmFtIHtXaW5kb3d9ICAgIHNjb3BlIHRoZSB3aW5kb3cgdGhhdCBpcyBsaXN0ZW5lZCB0bworKi8KK1hpbmhhLmFkZE9ubG9hZEhhbmRsZXIgPSBmdW5jdGlvbiAoZnVuYywgc2NvcGUpCit7Cisgc2NvcGUgPSBzY29wZSA/IHNjb3BlIDogd2luZG93OworCisgdmFyIGluaXQgPSBmdW5jdGlvbiAoKQorIHsKKyAgIC8vIHF1aXQgaWYgdGhpcyBmdW5jdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZAorICAgaWYgKGFyZ3VtZW50cy5jYWxsZWUuZG9uZSkgCisgICB7CisgICAgIHJldHVybjsKKyAgIH0KKyAgIC8vIGZsYWcgdGhpcyBmdW5jdGlvbiBzbyB3ZSBkb24ndCBkbyB0aGUgc2FtZSB0aGluZyB0d2ljZQorICAgYXJndW1lbnRzLmNhbGxlZS5kb25lID0gdHJ1ZTsKKyAgIC8vIGtpbGwgdGhlIHRpbWVyCisgICBpZiAoWGluaGEub25sb2FkVGltZXIpCisgICB7CisgICAgIGNsZWFySW50ZXJ2YWwoWGluaGEub25sb2FkVGltZXIpOworICAgfQorCisgICBmdW5jKCk7CisgfTsKKyAgaWYgKFhpbmhhLmlzX2llKQorICB7CisgICAgLy8gZW5zdXJlIGZpcmluZyBiZWZvcmUgb25sb2FkLAorICAgIC8vIG1heWJlIGxhdGUgYnV0IHNhZmUgYWxzbyBmb3IgaWZyYW1lcworICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBmdW5jdGlvbigpeworICAgICAgaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiICkgeworICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCggIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIGFyZ3VtZW50cy5jYWxsZWUgKTsKKyAgICAgICAgaW5pdCgpOworICAgICAgfQorICAgIH0pOworICAgIGlmICggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsICYmIHR5cGVvZiB3aW5kb3cuZnJhbWVFbGVtZW50ID09PSAidW5kZWZpbmVkIiApIChmdW5jdGlvbigpeworICAgICAgaWYgKGFyZ3VtZW50cy5jYWxsZWUuZG9uZSkgcmV0dXJuOworICAgICAgdHJ5IHsKKyAgICAgICAgLy8gSWYgSUUgaXMgdXNlZCwgdXNlIHRoZSB0cmljayBieSBEaWVnbyBQZXJpbmkKKyAgICAgICAgLy8gaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0lFQ29udGVudExvYWRlZC8KKyAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iik7CisgICAgICB9IGNhdGNoKCBlcnJvciApIHsKKyAgICAgICAgc2V0VGltZW91dCggYXJndW1lbnRzLmNhbGxlZSwgMCApOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICAvLyBhbmQgZXhlY3V0ZSBhbnkgd2FpdGluZyBmdW5jdGlvbnMKKyAgICAgIGluaXQoKTsKKyAgICB9KSgpOworICB9CisgZWxzZSBpZiAoL2FwcGxld2Via2l0fEtIVE1ML2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSApIC8qIFNhZmFyaS9XZWJLaXQvS0hUTUwgKi8KKyB7CisgICBYaW5oYS5vbmxvYWRUaW1lciA9IHNjb3BlLnNldEludGVydmFsKGZ1bmN0aW9uKCkKKyAgIHsKKyAgICAgaWYgKC9sb2FkZWR8Y29tcGxldGUvLnRlc3Qoc2NvcGUuZG9jdW1lbnQucmVhZHlTdGF0ZSkpCisgICAgIHsKKyAgICAgICBpbml0KCk7IC8vIGNhbGwgdGhlIG9ubG9hZCBoYW5kbGVyCisgICAgIH0KKyAgIH0sIDEwKTsKKyB9CisgZWxzZSAvKiBmb3IgTW96aWxsYS9PcGVyYTkgKi8KKyB7CisgICBzY29wZS5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgaW5pdCwgZmFsc2UpOworCisgfQorIFhpbmhhLl9hZGRFdmVudChzY29wZSwgJ2xvYWQnLCBpbml0KTsgLy8gaW5jYXNlIGFueXRoaW5nIHdlbnQgd3JvbmcKK307CisKKy8qKgorICogQWRkcyBhIHN0YW5kYXJkICJET00tMCIgZXZlbnQgbGlzdGVuZXIgdG8gYW4gZWxlbWVudC4KKyAqIFRoZSBET00tMCBldmVudHMgYXJlIHRob3NlIGFwcGxpZWQgZGlyZWN0bHkgYXMgYXR0cmlidXRlcyB0bworICogYW4gZWxlbWVudCAtIGVnIGVsZW1lbnQub25jbGljayA9IHN0dWZmOworICoKKyAqIEJ5IHVzaW5nIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBzaW1wbHkgb3ZlcndyaXRpbmcgYW55IGV4aXN0aW5nCisgKiBET00tMCBldmVudCBieSB0aGUgc2FtZSBuYW1lIG9uIHRoZSBlbGVtZW50IGl0IHdpbGwgdHJpZ2dlciBhcyB3ZWxsCisgKiBhcyB0aGUgZXhpc3Rpbmcgb25lcy4gIEhhbmRsZXJzIGFyZSB0cmlnZ2VyZWQgb25lIGFmdGVyIHRoZSBvdGhlcgorICogaW4gdGhlIG9yZGVyIHRoZXkgYXJlIGFkZGVkLgorICoKKyAqIFJlbWVtYmVyIHRvIHJldHVybiB0cnVlL2ZhbHNlIGZyb20geW91ciBoYW5kbGVyLCB0aGlzIHdpbGwgZGV0ZXJtaW5lCisgKiB3aGV0aGVyIHN1YnNlcXVlbnQgaGFuZGxlcnMgd2lsbCBiZSB0cmlnZ2VyZWQgKGllIHRoYXQgdGhlIGV2ZW50IHdpbGwKKyAqIGNvbnRpbnVlIG9yIGJlIGNhbmNlbGVkKS4KKyAqICAKKyAqICBAcHVibGljCisgKiAgQHNlZSBYaW5oYSNfYWRkRXZlbnQKKyAqICBAc2VlIFhpbmhhI3ByZXBlbmREb20wRXZlbnQKKyAqICBAcGFyYW0ge0RvbU5vZGV9ICBlbCB0aGUgRE9NIGVsZW1lbnQgdGhlIGV2ZW50IHNob3VsZCBiZSBhdHRhY2hlZCB0byAKKyAqICBAcGFyYW0ge1N0cmluZ30gICBldiB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gbGlzdGVuIGZvciAod2l0aG91dCBsZWFkaW5nICJvbiIpCisgKiAgQHBhcmFtIHtmdW5jdGlvbn0gZm4gdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBldmVudCBpcyBmaXJlZAorICovCisKK1hpbmhhLmFkZERvbTBFdmVudCA9IGZ1bmN0aW9uKGVsLCBldiwgZm4pCit7CisgIFhpbmhhLl9wcmVwYXJlRm9yRG9tMEV2ZW50cyhlbCwgZXYpOworICBlbC5feGluaGFfZG9tMEV2ZW50c1tldl0udW5zaGlmdChmbik7Cit9OworCisKKy8qKiBTZWUgYWRkRG9tMEV2ZW50LCB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGhhbmRsZXJzIHJlZ2lzdGVyZWQgdXNpbmcKKyAqICBwcmVwZW5kRG9tMEV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkIGJlZm9yZSBleGlzdGluZyBET00tMCBldmVudHMgb2YgdGhlCisgKiAgc2FtZSBuYW1lIG9uIHRoZSBzYW1lIGVsZW1lbnQuCisgKiAgCisgKiAgQHB1YmxpYworICogIEBzZWUgWGluaGEjX2FkZEV2ZW50CisgKiAgQHNlZSBYaW5oYSNhZGREb20wRXZlbnQKKyAqICBAcGFyYW0ge0RvbU5vZGV9ICB0aGUgRE9NIGVsZW1lbnQgdGhlIGV2ZW50IHNob3VsZCBiZSBhdHRhY2hlZCB0byAKKyAqICBAcGFyYW0ge1N0cmluZ30gICB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gbGlzdGVuIGZvciAod2l0aG91dCBsZWFkaW5nICJvbiIpCisgKiAgQHBhcmFtIHtmdW5jdGlvbn0gdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBldmVudCBpcyBmaXJlZAorICovCisKK1hpbmhhLnByZXBlbmREb20wRXZlbnQgPSBmdW5jdGlvbihlbCwgZXYsIGZuKQoreworICBYaW5oYS5fcHJlcGFyZUZvckRvbTBFdmVudHMoZWwsIGV2KTsKKyAgZWwuX3hpbmhhX2RvbTBFdmVudHNbZXZdLnB1c2goZm4pOworfTsKKworWGluaGEuZ2V0RXZlbnQgPSBmdW5jdGlvbihldikKK3sKKyAgcmV0dXJuIGV2IHx8IHdpbmRvdy5ldmVudDsKK307CisvKioKKyAqIFByZXBhcmVzIGFuIGVsZW1lbnQgdG8gcmVjZWl2ZSBtb3JlIHRoYW4gb25lIERPTS0wIGV2ZW50IGhhbmRsZXIKKyAqIHdoZW4gaGFuZGxlcnMgYXJlIGFkZGVkIHZpYSBhZGREb20wRXZlbnQgYW5kIHByZXBlbmREb20wRXZlbnQuCisgKgorICogQHByaXZhdGUKKyAqLworWGluaGEuX3ByZXBhcmVGb3JEb20wRXZlbnRzID0gZnVuY3Rpb24oZWwsIGV2KQoreworICAvLyBDcmVhdGUgYSBzdHJ1Y3R1cmUgdG8gaG9sZCBvdXIgbGlzdHMgb2YgZXZlbnQgaGFuZGxlcnMKKyAgaWYgKCB0eXBlb2YgZWwuX3hpbmhhX2RvbTBFdmVudHMgPT0gJ3VuZGVmaW5lZCcgKQorICB7CisgICAgZWwuX3hpbmhhX2RvbTBFdmVudHMgPSB7fTsKKyAgICBYaW5oYS5mcmVlTGF0ZXIoZWwsICdfeGluaGFfZG9tMEV2ZW50cycpOworICB9CisKKyAgLy8gQ3JlYXRlIGEgbGlzdCBvZiBoYW5kbGVycyBmb3IgdGhpcyBldmVudCB0eXBlCisgIGlmICggdHlwZW9mIGVsLl94aW5oYV9kb20wRXZlbnRzW2V2XSA9PSAndW5kZWZpbmVkJyApCisgIHsKKyAgICBlbC5feGluaGFfZG9tMEV2ZW50c1tldl0gPSBbIF07CisgICAgaWYgKCB0eXBlb2YgZWxbJ29uJytldl0gPT0gJ2Z1bmN0aW9uJyApCisgICAgeworICAgICAgZWwuX3hpbmhhX2RvbTBFdmVudHNbZXZdLnB1c2goZWxbJ29uJytldl0pOworICAgIH0KKworICAgIC8vIE1ha2UgdGhlIGFjdHVhbCBldmVudCBoYW5kbGVyLCB3aGljaCBydW5zIHRocm91Z2gKKyAgICAvLyBlYWNoIG9mIHRoZSBoYW5kbGVycyBpbiB0aGUgbGlzdCBhbmQgZXhlY3V0ZXMgdGhlbQorICAgIC8vIGluIHRoZSBjb3JyZWN0IGNvbnRleHQuCisgICAgZWxbJ29uJytldl0gPSBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICB2YXIgYSA9IGVsLl94aW5oYV9kb20wRXZlbnRzW2V2XTsKKyAgICAgIC8vIGNhbGwgcHJldmlvdXMgc3VibWl0IG1ldGhvZHMgaWYgdGhleSB3ZXJlIHRoZXJlLgorICAgICAgdmFyIGFsbE9LID0gdHJ1ZTsKKyAgICAgIGZvciAoIHZhciBpID0gYS5sZW5ndGg7IC0taSA+PSAwOyApCisgICAgICB7CisgICAgICAgIC8vIFdlIHdhbnQgdGhlIGhhbmRsZXIgdG8gYmUgYSBtZW1iZXIgb2YgdGhlIGZvcm0sIG5vdCB0aGUgYXJyYXksIHNvIHRoYXQgInRoaXMiIHdpbGwgd29yayBjb3JyZWN0bHkKKyAgICAgICAgZWwuX3hpbmhhX3RlbXBFdmVudEhhbmRsZXIgPSBhW2ldOworICAgICAgICBpZiAoIGVsLl94aW5oYV90ZW1wRXZlbnRIYW5kbGVyKGV2ZW50KSA9PT0gZmFsc2UgKQorICAgICAgICB7CisgICAgICAgICAgZWwuX3hpbmhhX3RlbXBFdmVudEhhbmRsZXIgPSBudWxsOworICAgICAgICAgIGFsbE9LID0gZmFsc2U7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWwuX3hpbmhhX3RlbXBFdmVudEhhbmRsZXIgPSBudWxsOworICAgICAgfQorICAgICAgcmV0dXJuIGFsbE9LOworICAgIH07CisKKyAgICBYaW5oYS5fZXZlbnRGbHVzaGVycy5wdXNoKFtlbCwgZXZdKTsKKyAgfQorfTsKKworWGluaGEucHJvdG90eXBlLm5vdGlmeU9uID0gZnVuY3Rpb24oZXYsIGZuKQoreworICBpZiAoIHR5cGVvZiB0aGlzLl9ub3RpZnlMaXN0ZW5lcnNbZXZdID09ICd1bmRlZmluZWQnICkKKyAgeworICAgIHRoaXMuX25vdGlmeUxpc3RlbmVyc1tldl0gPSBbXTsKKyAgICBYaW5oYS5mcmVlTGF0ZXIodGhpcywgJ19ub3RpZnlMaXN0ZW5lcnMnKTsKKyAgfQorICB0aGlzLl9ub3RpZnlMaXN0ZW5lcnNbZXZdLnB1c2goZm4pOworfTsKKworWGluaGEucHJvdG90eXBlLm5vdGlmeU9mID0gZnVuY3Rpb24oZXYsIGFyZ3MpCit7CisgIGlmICggdGhpcy5fbm90aWZ5TGlzdGVuZXJzW2V2XSApCisgIHsKKyAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCB0aGlzLl9ub3RpZnlMaXN0ZW5lcnNbZXZdLmxlbmd0aDsgaSsrICkKKyAgICB7CisgICAgICB0aGlzLl9ub3RpZnlMaXN0ZW5lcnNbZXZdW2ldKGV2LCBhcmdzKTsKKyAgICB9CisgIH0KK307CisKKy8qKiBMaXN0IG9mIHRhZyBuYW1lcyB0aGF0IGFyZSBkZWZpbmVkIGFzIGJsb2NrIGxldmVsIGVsZW1lbnRzIGluIEhUTUwKKyAqICAKKyAqICBAcHJpdmF0ZQorICogIEBzZWUgWGluaGEjaXNCbG9ja0VsZW1lbnQKKyAqICBAdHlwZSB7U3RyaW5nfQorICovCitYaW5oYS5fYmxvY2tUYWdzID0gIiBib2R5IGZvcm0gdGV4dGFyZWEgZmllbGRzZXQgdWwgb2wgZGwgbGkgZGl2ICIgKworInAgaDEgaDIgaDMgaDQgaDUgaDYgcXVvdGUgcHJlIHRhYmxlIHRoZWFkICIgKworInRib2R5IHRmb290IHRyIHRkIHRoIGlmcmFtZSBhZGRyZXNzIGJsb2NrcXVvdGUgdGl0bGUgbWV0YSBsaW5rIHN0eWxlIGhlYWQgIjsKKworLyoqIENoZWNrcyBpZiBvbmUgZWxlbWVudCBpcyBpbiB0aGUgbGlzdCBvZiBlbGVtZW50cyB0aGF0IGFyZSBkZWZpbmVkIGFzIGJsb2NrIGxldmVsIGVsZW1lbnRzIGluIEhUTUwKKyAqICAKKyAqICBAcGFyYW0ge0RvbU5vZGV9ICBlbCBUaGUgRE9NIGVsZW1lbnQgdG8gY2hlY2sKKyAqICBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqLworWGluaGEuaXNCbG9ja0VsZW1lbnQgPSBmdW5jdGlvbihlbCkKK3sKKyAgcmV0dXJuIGVsICYmIGVsLm5vZGVUeXBlID09IDEgJiYgKFhpbmhhLl9ibG9ja1RhZ3MuaW5kZXhPZigiICIgKyBlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgKyAiICIpICE9IC0xKTsKK307CisvKiogTGlzdCBvZiB0YWcgbmFtZXMgdGhhdCBhcmUgYWxsb3dlZCB0byBjb250YWluIGEgcGFyYWdyYXBoCisgKiAgCisgKiAgQHByaXZhdGUKKyAqICBAc2VlIFhpbmhhI2lzUGFyYUNvbnRhaW5lcgorICogIEB0eXBlIHtTdHJpbmd9CisgKi8KK1hpbmhhLl9wYXJhQ29udGFpbmVyVGFncyA9ICIgYm9keSB0ZCB0aCBjYXB0aW9uIGZpZWxkc2V0IGRpdiAiOworLyoqIENoZWNrcyBpZiBvbmUgZWxlbWVudCBpcyBpbiB0aGUgbGlzdCBvZiBlbGVtZW50cyB0aGF0IGFyZSBhbGxvd2VkIHRvIGNvbnRhaW4gYSBwYXJhZ3JhcGggaW4gSFRNTAorICogIAorICogIEBwYXJhbSB7RG9tTm9kZX0gIGVsIFRoZSBET00gZWxlbWVudCB0byBjaGVjaworICogIEByZXR1cm5zIHtCb29sZWFufQorICovCitYaW5oYS5pc1BhcmFDb250YWluZXIgPSBmdW5jdGlvbihlbCkKK3sKKyAgcmV0dXJuIGVsICYmIGVsLm5vZGVUeXBlID09IDEgJiYgKFhpbmhhLl9wYXJhQ29udGFpbmVyVGFncy5pbmRleE9mKCIgIiArIGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSArICIgIikgIT0gLTEpOworfTsKKworCisvKiogVGhlc2UgYXJlIGFsbCB0aGUgdGFncyBmb3Igd2hpY2ggdGhlIGVuZCB0YWcgaXMgbm90IG9wdGlvbmFsIG9yICBmb3JiaWRkZW4sIHRha2VuIGZyb20gdGhlIGxpc3QgYXQ6CisgKiAgIGh0dHA6IHd3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9pbmRleC9lbGVtZW50cy5odG1sCisgKiAgCisgKiAgQHByaXZhdGUKKyAqICBAc2VlIFhpbmhhI25lZWRzQ2xvc2luZ1RhZworICogIEB0eXBlIFN0cmluZworICovCitYaW5oYS5fY2xvc2luZ1RhZ3MgPSAiIGEgYWJiciBhY3JvbnltIGFkZHJlc3MgYXBwbGV0IGIgYmRvIGJpZyBibG9ja3F1b3RlIGJ1dHRvbiBjYXB0aW9uIGNlbnRlciBjaXRlIGNvZGUgZGVsIGRmbiBkaXIgZGl2IGRsIGVtIGZpZWxkc2V0IGZvbnQgZm9ybSBmcmFtZXNldCBoMSBoMiBoMyBoNCBoNSBoNiBpIGlmcmFtZSBpbnMga2JkIGxhYmVsIGxlZ2VuZCBtYXAgbWVudSBub2ZyYW1lcyBub3NjcmlwdCBvYmplY3Qgb2wgb3B0Z3JvdXAgcHJlIHEgcyBzYW1wIHNjcmlwdCBzZWxlY3Qgc21hbGwgc3BhbiBzdHJpa2Ugc3Ryb25nIHN0eWxlIHN1YiBzdXAgdGFibGUgdGV4dGFyZWEgdGl0bGUgdHQgdSB1bCB2YXIgIjsKKworLyoqIENoZWNrcyBpZiBvbmUgZWxlbWVudCBpcyBpbiB0aGUgbGlzdCBvZiBlbGVtZW50cyBmb3Igd2hpY2ggdGhlIGVuZCB0YWcgaXMgbm90IG9wdGlvbmFsIG9yICBmb3JiaWRkZW4gaW4gSFRNTAorICogIAorICogIEBwYXJhbSB7RG9tTm9kZX0gIGVsIFRoZSBET00gZWxlbWVudCB0byBjaGVjaworICogIEByZXR1cm5zIHtCb29sZWFufQorICovCitYaW5oYS5uZWVkc0Nsb3NpbmdUYWcgPSBmdW5jdGlvbihlbCkKK3sKKyAgcmV0dXJuIGVsICYmIGVsLm5vZGVUeXBlID09IDEgJiYgKFhpbmhhLl9jbG9zaW5nVGFncy5pbmRleE9mKCIgIiArIGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSArICIgIikgIT0gLTEpOworfTsKKworLyoqIFBlcmZvcm1zIEhUTUwgZW5jb2Rpbmcgb2Ygc29tZSBnaXZlbiBzdHJpbmcgKGNvbnZlcnRzIEhUTUwgc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIGVudGl0aWVzKQorICogIAorICogIEBwYXJhbSB7U3RyaW5nfSAgc3RyIFRoZSB1bmVuY29kZWQgaW5wdXQKKyAqICBAcmV0dXJucyB7U3RyaW5nfSBUaGUgZW5jb2RlZCBvdXRwdXQKKyAqLworWGluaGEuaHRtbEVuY29kZSA9IGZ1bmN0aW9uKHN0cikKK3sKKyAgaWYgKCFzdHIpCisgIHsKKyAgICByZXR1cm4gJyc7CisgIH0gIGlmICggdHlwZW9mIHN0ci5yZXBsYWNlID09ICd1bmRlZmluZWQnICkKKyAgeworICAgIHN0ciA9IHN0ci50b1N0cmluZygpOworICB9CisgIC8vIHdlIGRvbid0IG5lZWQgcmVnZXhwIGZvciB0aGF0LCBidXQuLiBzbyBiZSBpdCBmb3Igbm93LgorICBzdHIgPSBzdHIucmVwbGFjZSgvJi9pZywgIiZhbXA7Iik7CisgIHN0ciA9IHN0ci5yZXBsYWNlKC88L2lnLCAiJmx0OyIpOworICBzdHIgPSBzdHIucmVwbGFjZSgvPi9pZywgIiZndDsiKTsKKyAgc3RyID0gc3RyLnJlcGxhY2UoL1x4QTAvZywgIiZuYnNwOyIpOyAvLyBEZWNpbWFsIDE2MCwgbm9uLWJyZWFraW5nLXNwYWNlCisgIHN0ciA9IHN0ci5yZXBsYWNlKC9ceDIyL2csICImcXVvdDsiKTsKKyAgLy8gXHgyMiBtZWFucyAnIicgLS0gd2UgdXNlIGhleCByZXByZXplbnRhdGlvbiBzbyB0aGF0IHdlIGRvbid0IGRpc3R1cmIKKyAgLy8gSlMgY29tcHJlc3NvcnMgKHdlbGwsIGF0IGxlYXN0IG1pbmUgZmFpbHMuLiA7KQorICByZXR1cm4gc3RyOworfTsKKworLyoqIFN0cmlwcyBob3N0LXBhcnQgb2YgVVJMIHdoaWNoIGlzIGFkZGVkIGJ5IGJyb3dzZXJzIHRvIGxpbmtzIHJlbGF0aXZlIHRvIHNlcnZlciByb290CisgKiAgCisgKiAgQHBhcmFtIHtTdHJpbmd9ICBzdHJpbmcgCisgKiAgQHJldHVybnMge1N0cmluZ30gCisgKi8KK1hpbmhhLnByb3RvdHlwZS5zdHJpcEJhc2VVUkwgPSBmdW5jdGlvbihzdHJpbmcpCit7CisgIGlmICggdGhpcy5jb25maWcuYmFzZUhyZWYgPT09IG51bGwgfHwgIXRoaXMuY29uZmlnLnN0cmlwQmFzZUhyZWYgKQorICB7CisgICAgcmV0dXJuIHN0cmluZzsKKyAgfQorICB2YXIgYmFzZXVybCA9IHRoaXMuY29uZmlnLmJhc2VIcmVmLnJlcGxhY2UoL14oaHR0cHM/OlwvXC9bXlwvXSspKC4qKSQvLCAnJDEnKTsKKyAgdmFyIGJhc2VyZSA9IG5ldyBSZWdFeHAoYmFzZXVybCk7CisgIHJldHVybiBzdHJpbmcucmVwbGFjZShiYXNlcmUsICIiKTsKK307CisKK2lmICh0eXBlb2YgU3RyaW5nLnByb3RvdHlwZS50cmltICE9ICdmdW5jdGlvbicpCit7CisgIC8qKiBSZW1vdmVzIHdoaXRlc3BhY2UgZnJvbSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZy4gQ3VzdG9tIGltcGxlbWVudGF0aW9uIGZvciBKUyBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpdCBuYXRpdmVseQorICAgKiAgCisgICAqICBAcmV0dXJucyB7U3RyaW5nfSAKKyAgICovCisgIFN0cmluZy5wcm90b3R5cGUudHJpbSA9IGZ1bmN0aW9uKCkKKyAgeworICAgIHJldHVybiB0aGlzLnJlcGxhY2UoL15ccysvLCAnJykucmVwbGFjZSgvXHMrJC8sICcnKTsKKyAgfTsKK30KKworLyoqIENyZWF0ZXMgYSByZ2Itc3R5bGUgcmdiKHIsZyxiKSBjb2xvciBmcm9tIGEgKDI0Yml0KSBudW1iZXIKKyAqICAKKyAqICBAcGFyYW0ge0ludGVnZXJ9CisgKiAgQHJldHVybnMge1N0cmluZ30gcmdiKHIsZyxiKSBjb2xvciBkZWZpbml0aW9uCisgKi8KK1hpbmhhLl9tYWtlQ29sb3IgPSBmdW5jdGlvbih2KQoreworICBpZiAoIHR5cGVvZiB2ICE9ICJudW1iZXIiICkKKyAgeworICAgIC8vIGFscmVhZHkgaW4gcmdiIChob3BlZnVsbHkpOyBJRSBkb2Vzbid0IGdldCBoZXJlLgorICAgIHJldHVybiB2OworICB9CisgIC8vIElFIHNlbmRzIG51bWJlcjsgY29udmVydCB0byByZ2IuCisgIHZhciByID0gdiAmIDB4RkY7CisgIHZhciBnID0gKHYgPj4gOCkgJiAweEZGOworICB2YXIgYiA9ICh2ID4+IDE2KSAmIDB4RkY7CisgIHJldHVybiAicmdiKCIgKyByICsgIiwiICsgZyArICIsIiArIGIgKyAiKSI7Cit9OworCisvKiogUmV0dXJucyBoZXhhZGVjaW1hbCBjb2xvciByZXByZXNlbnRhdGlvbiBmcm9tIGEgbnVtYmVyIG9yIGEgcmdiLXN0eWxlIGNvbG9yLgorICogIAorICogIEBwYXJhbSB7U3RyaW5nfEludGVnZXJ9IHYgcmdiKHIsZyxiKSBvciAyNGJpdCBjb2xvciBkZWZpbml0aW9uCisgKiAgQHJldHVybnMge1N0cmluZ30gI1JSR0dCQiBjb2xvciBkZWZpbml0aW9uCisgKi8KK1hpbmhhLl9jb2xvclRvUmdiID0gZnVuY3Rpb24odikKK3sKKyAgaWYgKCAhdiApCisgIHsKKyAgICByZXR1cm4gJyc7CisgIH0KKyAgdmFyIHIsZyxiOworICAvLyBAdG9kbzogd2h5IGRlY2xhcmluZyB0aGlzIGZ1bmN0aW9uIGhlcmUgPyBUaGlzIG5lZWRzIHRvIGJlIGEgcHVibGljIG1ldGhvZGUgb2YgdGhlIG9iamVjdCBYaW5oYS5fY29sb3JUb1JnYgorICAvLyByZXR1cm5zIHRoZSBoZXggcmVwcmVzZW50YXRpb24gb2Ygb25lIGJ5dGUgKDIgZGlnaXRzKQorICBmdW5jdGlvbiBoZXgoZCkKKyAgeworICAgIHJldHVybiAoZCA8IDE2KSA/ICgiMCIgKyBkLnRvU3RyaW5nKDE2KSkgOiBkLnRvU3RyaW5nKDE2KTsKKyAgfQorCisgIGlmICggdHlwZW9mIHYgPT0gIm51bWJlciIgKQorICB7CisgICAgLy8gd2UncmUgdGFsa2luZyB0byBJRSBoZXJlCisgICAgciA9IHYgJiAweEZGOworICAgIGcgPSAodiA+PiA4KSAmIDB4RkY7CisgICAgYiA9ICh2ID4+IDE2KSAmIDB4RkY7CisgICAgcmV0dXJuICIjIiArIGhleChyKSArIGhleChnKSArIGhleChiKTsKKyAgfQorCisgIGlmICggdi5zdWJzdHIoMCwgMykgPT0gInJnYiIgKQorICB7CisgICAgLy8gaW4gcmdiKC4uLikgZm9ybSAtLSBNb3ppbGxhCisgICAgdmFyIHJlID0gL3JnYlxzKlwoXHMqKFswLTldKylccyosXHMqKFswLTldKylccyosXHMqKFswLTldKylccypcKS87CisgICAgaWYgKCB2Lm1hdGNoKHJlKSApCisgICAgeworICAgICAgciA9IHBhcnNlSW50KFJlZ0V4cC4kMSwgMTApOworICAgICAgZyA9IHBhcnNlSW50KFJlZ0V4cC4kMiwgMTApOworICAgICAgYiA9IHBhcnNlSW50KFJlZ0V4cC4kMywgMTApOworICAgICAgcmV0dXJuICIjIiArIGhleChyKSArIGhleChnKSArIGhleChiKTsKKyAgICB9CisgICAgLy8gZG9lc24ndCBtYXRjaCBSRT8hICBtYXliZSB1c2VzIHBlcmNlbnRhZ2VzIG9yIGZsb2F0IG51bWJlcnMKKyAgICAvLyAtLSBGSVhNRTogbm90IHlldCBpbXBsZW1lbnRlZC4KKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIGlmICggdi5zdWJzdHIoMCwgMSkgPT0gIiMiICkKKyAgeworICAgIC8vIGFscmVhZHkgaGV4IHJnYiAoaG9wZWZ1bGx5IDpEICkKKyAgICByZXR1cm4gdjsKKyAgfQorCisgIC8vIGlmIGV2ZXJ5dGhpbmcgZWxzZSBmYWlscyA7KQorICByZXR1cm4gbnVsbDsKK307CisKKy8qKiBNb2RhbCBwb3B1cCBkaWFsb2dzCisgKiAgCisgKiAgQHBhcmFtIHtTdHJpbmd9IHVybCBVUkwgdG8gdGhlIHBvcHVwIGRpYWxvZworICogIEBwYXJhbSB7RnVuY3Rpb259IGFjdGlvbiBBIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgb25lIHZhbHVlOyB0aGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IGNhbGxlZCAKKyAqICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGUgZGlhbG9nIGlzIGNsb3NlZCwgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBkaWFsb2cuCisgKiAgQHBhcmFtIHtNaXhlZH0gaW5pdCBBIHZhcmlhYmxlIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBwb3B1cCB3aW5kb3cgdG8gcGFzcyBhcmJpdHJhcnkgZGF0YQorICovCitYaW5oYS5wcm90b3R5cGUuX3BvcHVwRGlhbG9nID0gZnVuY3Rpb24odXJsLCBhY3Rpb24sIGluaXQpCit7CisgIERpYWxvZyh0aGlzLnBvcHVwVVJMKHVybCksIGFjdGlvbiwgaW5pdCk7Cit9OworCisvKiogQ3JlYXRlcyBhIHBhdGggaW4gdGhlIGZvcm0gX2VkaXRvcl91cmwgKyAicGx1Z2lucy8iICsgcGx1Z2luICsgIi9pbWcvIiArIGZpbGUKKyAqICAKKyAqICBAZGVwcmVjYXRlZAorICogIEBwYXJhbSB7U3RyaW5nfSBmaWxlIE5hbWUgb2YgdGhlIGltYWdlCisgKiAgQHBhcmFtIHtTdHJpbmd9IHBsdWdpbiBvcHRpb25hbCBJZiBvbWl0dGVkLCBzaW1wbHkgX2VkaXRvcl91cmwgKyBmaWxlIGlzIHJldHVybmVkIAorICogIEByZXR1cm5zIHtTdHJpbmd9CisgKi8KK1hpbmhhLnByb3RvdHlwZS5pbWdVUkwgPSBmdW5jdGlvbihmaWxlLCBwbHVnaW4pCit7CisgIGlmICggdHlwZW9mIHBsdWdpbiA9PSAidW5kZWZpbmVkIiApCisgIHsKKyAgICByZXR1cm4gX2VkaXRvcl91cmwgKyBmaWxlOworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybiBYaW5oYS5nZXRQbHVnaW5EaXIocGx1Z2luKSArICIvaW1nLyIgKyBmaWxlOworICB9Cit9OworLyoqIENyZWF0ZXMgYSBwYXRoCisgKiAgCisgKiAgQGRlcHJlY2F0ZWQKKyAqICBAcGFyYW0ge1N0cmluZ30gZmlsZSBOYW1lIG9mIHRoZSBwb3B1cAorICogIEByZXR1cm5zIHtTdHJpbmd9CisgKi8KK1hpbmhhLnByb3RvdHlwZS5wb3B1cFVSTCA9IGZ1bmN0aW9uKGZpbGUpCit7CisgIHZhciB1cmwgPSAiIjsKKyAgaWYgKCBmaWxlLm1hdGNoKC9ecGx1Z2luOlwvXC8oLio/KVwvKC4qKS8pICkKKyAgeworICAgIHZhciBwbHVnaW4gPSBSZWdFeHAuJDE7CisgICAgdmFyIHBvcHVwID0gUmVnRXhwLiQyOworICAgIGlmICggIS9cLihodG1sP3xwaHApJC8udGVzdChwb3B1cCkgKQorICAgIHsKKyAgICAgIHBvcHVwICs9ICIuaHRtbCI7CisgICAgfQorICAgIHVybCA9IFhpbmhhLmdldFBsdWdpbkRpcihwbHVnaW4pICsgIi9wb3B1cHMvIiArIHBvcHVwOworICB9CisgIGVsc2UgaWYgKCBmaWxlLm1hdGNoKC9eXC8uKj8vKSB8fCBmaWxlLm1hdGNoKC9eW2Etel0rPzovKSkKKyAgeworICAgIHVybCA9IGZpbGU7CisgIH0KKyAgZWxzZQorICB7CisgICAgdXJsID0gX2VkaXRvcl91cmwgKyB0aGlzLmNvbmZpZy5wb3B1cFVSTCArIGZpbGU7CisgIH0KKyAgcmV0dXJuIHVybDsKK307CisKKworCisvKiogRklYOiBJbnRlcm5ldCBFeHBsb3JlciByZXR1cm5zIGFuIGl0ZW0gaGF2aW5nIHRoZSBfbmFtZV8gZXF1YWwgdG8gdGhlIGdpdmVuCisgKiBpZCwgZXZlbiBpZiBpdCdzIG5vdCBoYXZpbmcgYW55IGlkLiAgVGhpcyB3YXkgaXQgY2FuIHJldHVybiBhIGRpZmZlcmVudCBmb3JtCisgKiBmaWVsZCwgZXZlbiBpZiBpdCdzIG5vdCBhIHRleHRhcmVhLiAgVGhpcyB3b3JrYXJvdW5kcyB0aGUgcHJvYmxlbSBieQorICogc3BlY2lmaWNhbGx5IGxvb2tpbmcgdG8gc2VhcmNoIG9ubHkgZWxlbWVudHMgaGF2aW5nIGEgY2VydGFpbiB0YWcgbmFtZS4KKyAqIEBwYXJhbSB7U3RyaW5nfSB0YWcgVGhlIHRhZyBuYW1lIHRvIGxpbWl0IHRoZSByZXR1cm4gdG8KKyAqIEBwYXJhbSB7U3RyaW5nfSBpZAorICogQHJldHVybnMge0RvbU5vZGV9CisgKi8KK1hpbmhhLmdldEVsZW1lbnRCeUlkID0gZnVuY3Rpb24odGFnLCBpZCkKK3sKKyAgdmFyIGVsLCBpLCBvYmpzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTsKKyAgZm9yICggaSA9IG9ianMubGVuZ3RoOyAtLWkgPj0gMCAmJiAoZWwgPSBvYmpzW2ldKTsgKQorICB7CisgICAgaWYgKCBlbC5pZCA9PSBpZCApCisgICAgeworICAgICAgcmV0dXJuIGVsOworICAgIH0KKyAgfQorICByZXR1cm4gbnVsbDsKK307CisKKworLyoqIFVzZSBzb21lIENTUyB0cmlja2VyeSB0byB0b2dnbGUgYm9yZGVycyBvbiB0YWJsZXMgCisgKglAcmV0dXJucyB7Qm9vbGVhbn0gYWx3YXlzIHRydWUKKyAqLworCitYaW5oYS5wcm90b3R5cGUuX3RvZ2dsZUJvcmRlcnMgPSBmdW5jdGlvbigpCit7CisgIHZhciB0YWJsZXMgPSB0aGlzLl9kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ1RBQkxFJyk7CisgIGlmICggdGFibGVzLmxlbmd0aCAhPT0gMCApCisgIHsKKyAgIGlmICggIXRoaXMuYm9yZGVycyApCisgICB7ICAgIAorICAgIHRoaXMuYm9yZGVycyA9IHRydWU7CisgICB9CisgICBlbHNlCisgICB7CisgICAgIHRoaXMuYm9yZGVycyA9IGZhbHNlOworICAgfQorCisgICBmb3IgKCB2YXIgaT0wOyBpIDwgdGFibGVzLmxlbmd0aDsgaSsrICkKKyAgIHsKKyAgICAgaWYgKCB0aGlzLmJvcmRlcnMgKQorICAgICB7CisgICAgICAgIFhpbmhhLl9hZGRDbGFzcyh0YWJsZXNbaV0sICdodG10YWJsZWJvcmRlcnMnKTsKKyAgICAgfQorICAgICBlbHNlCisgICAgIHsKKyAgICAgICBYaW5oYS5fcmVtb3ZlQ2xhc3ModGFibGVzW2ldLCAnaHRtdGFibGVib3JkZXJzJyk7CisgICAgIH0KKyAgIH0KKyAgfQorICByZXR1cm4gdHJ1ZTsKK307CisvKiogQWRkcyB0aGUgc3R5bGVzIGZvciB0YWJsZSBib3JkZXJzIHRvIHRoZSBpZnJhbWUgZHVyaW5nIGdlbmVyYXRpb24KKyAqICAKKyAqICBAcHJpdmF0ZQorICogIEBzZWUgWGluaGEjc3RyaXBDb3JlQ1NTCisgKiAgQHBhcmFtIHtTdHJpbmd9IGh0bWwgb3B0aW9uYWwgIAorICogIEByZXR1cm5zIHtTdHJpbmd9IGh0bWwgSFRNTCB3aXRoIGFkZGVkIHN0eWxlcyBvciBvbmx5IHN0eWxlcyBpZiBodG1sIG9taXR0ZWQKKyAqLworWGluaGEuYWRkQ29yZUNTUyA9IGZ1bmN0aW9uKGh0bWwpCit7CisgICAgdmFyIGNvcmVDU1MgPSAiPHN0eWxlIHRpdGxlPVwiWGluaGFJbnRlcm5hbENTU1wiIHR5cGU9XCJ0ZXh0L2Nzc1wiPiIgKworICAgICIuaHRtdGFibGVib3JkZXJzLCAuaHRtdGFibGVib3JkZXJzIHRkLCAuaHRtdGFibGVib3JkZXJzIHRoIHtib3JkZXIgOiAxcHggZGFzaGVkIGxpZ2h0Z3JleSAhIGltcG9ydGFudDt9XG4iICsKKyAgICAiaHRtbCwgYm9keSB7IGJvcmRlcjogMHB4OyB9IFxuIiArCisgICAgImJvZHkgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOyB9IFxuIiArCisgICAgImltZywgaHIgeyBjdXJzb3I6IGRlZmF1bHQgfSBcbiIgKworICAgICI8L3N0eWxlPlxuIjsKKyAgICAKKyAgICBpZiggaHRtbCAmJiAvPGhlYWQ+L2kudGVzdChodG1sKSkKKyAgICB7CisgICAgICByZXR1cm4gaHRtbC5yZXBsYWNlKC88aGVhZD4vaSwgJzxoZWFkPicgKyBjb3JlQ1NTKTsgICAgICAKKyAgICB9CisgICAgZWxzZSBpZiAoIGh0bWwpCisgICAgeworICAgICAgcmV0dXJuIGNvcmVDU1MgKyBodG1sOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcmV0dXJuIGNvcmVDU1M7CisgICAgfQorfTsKKy8qKiBBbGxvd3MgcGx1Z2lucyB0byBhZGQgYSBzdHlsZXNoZWV0IGZvciBpbnRlcm5hbCB1c2UgdG8gdGhlIGVkaXRlZCBkb2N1bWVudCB0aGF0IHdvbid0IGFwcGVhciBpbiB0aGUgSFRNTCBvdXRwdXQKKyAqICAKKyAqICBAc2VlIFhpbmhhI3N0cmlwQ29yZUNTUworICogIEBwYXJhbSB7U3RyaW5nfSBzdHlsZXNoZWV0IFVSTCBvZiB0aGUgc3R5bGVzaGV0dCB0byBiZSBhZGRlZAorICovCitYaW5oYS5wcm90b3R5cGUuYWRkRWRpdG9yU3R5bGVzaGVldCA9IGZ1bmN0aW9uIChzdHlsZXNoZWV0KQoreworICAgIHZhciBzdHlsZSA9IHRoaXMuX2RvYy5jcmVhdGVFbGVtZW50KCJsaW5rIik7CisgICAgc3R5bGUucmVsID0gJ3N0eWxlc2hlZXQnOworICAgIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnOworICAgIHN0eWxlLnRpdGxlID0gJ1hpbmhhSW50ZXJuYWxDU1MnOworICAgIHN0eWxlLmhyZWYgPSBzdHlsZXNoZWV0OworICAgIHRoaXMuX2RvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiSEVBRCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlKTsKK307CisvKiogUmVtb3ZlIGludGVybmFsIHN0eWxlcworICogIAorICogIEBwcml2YXRlCisgKiAgQHNlZSBYaW5oYSNhZGRDb3JlQ1NTCisgKiAgQHBhcmFtIHtTdHJpbmd9IGh0bWwgCisgKiAgQHJldHVybnMge1N0cmluZ30gCisgKi8KK1hpbmhhLnN0cmlwQ29yZUNTUyA9IGZ1bmN0aW9uKGh0bWwpCit7CisgIHJldHVybiBodG1sLnJlcGxhY2UoLzxzdHlsZVtePl0rdGl0bGU9IlhpbmhhSW50ZXJuYWxDU1MiKC58XG4pKj88XC9zdHlsZT4vaWcsICcnKS5yZXBsYWNlKC88bGlua1tePl0rdGl0bGU9IlhpbmhhSW50ZXJuYWxDU1MiKC58XG4pKj8+L2lnLCAnJyk7IAorfTsKKy8qKiBSZW1vdmVzIG9uZSBDU1MgY2xhc3MgKHRoYXQgaXMgb25lIG9mIHBvc3NpYmxlIG1vcmUgcGFydHMgCisgKiAgIHNlcGFyYXRlZCBieSBzcGFjZXMpIGZyb20gYSBnaXZlbiBlbGVtZW50CisgKiAgCisgKiAgQHNlZSBYaW5oYSNfcmVtb3ZlQ2xhc3NlcworICogIEBwYXJhbSB7RG9tTm9kZX0gIGVsIFRoZSBET00gZWxlbWVudCB0aGUgY2xhc3Mgd2lsbCBiZSByZW1vdmVkIGZyb20KKyAqICBAcGFyYW0ge1N0cmluZ30gICBjbGFzc05hbWUgVGhlIGNsYXNzIHRvIGJlIHJlbW92ZWQKKyAqLworWGluaGEuX3JlbW92ZUNsYXNzID0gZnVuY3Rpb24oZWwsIGNsYXNzTmFtZSkKK3sKKyAgaWYgKCAhICggZWwgJiYgZWwuY2xhc3NOYW1lICkgKQorICB7CisgICAgcmV0dXJuOworICB9CisgIHZhciBjbHMgPSBlbC5jbGFzc05hbWUuc3BsaXQoIiAiKTsKKyAgdmFyIGFyID0gW107CisgIGZvciAoIHZhciBpID0gY2xzLmxlbmd0aDsgaSA+IDA7ICkKKyAgeworICAgIGlmICggY2xzWy0taV0gIT0gY2xhc3NOYW1lICkKKyAgICB7CisgICAgICBhclthci5sZW5ndGhdID0gY2xzW2ldOworICAgIH0KKyAgfQorICBlbC5jbGFzc05hbWUgPSBhci5qb2luKCIgIik7Cit9OworLyoqIEFkZHMgb25lIENTUyBjbGFzcyAgdG8gYSBnaXZlbiBlbGVtZW50ICh0aGF0IGlzLCBpdCBleHBhbmRzIGl0cyBjbGFzc05hbWUgcHJvcGVydHkgYnkgdGhlIGdpdmVuIHN0cmluZywKKyAqICBzZXBhcmF0ZWQgYnkgYSBzcGFjZSkKKyAqICAKKyAqICBAc2VlIFhpbmhhI2FkZENsYXNzZXMKKyAqICBAcGFyYW0ge0RvbU5vZGV9ICBlbCBUaGUgRE9NIGVsZW1lbnQgdGhlIGNsYXNzIHdpbGwgYmUgYWRkZWQgdG8KKyAqICBAcGFyYW0ge1N0cmluZ30gICBjbGFzc05hbWUgVGhlIGNsYXNzIHRvIGJlIGFkZGVkCisgKi8KK1hpbmhhLl9hZGRDbGFzcyA9IGZ1bmN0aW9uKGVsLCBjbGFzc05hbWUpCit7CisgIC8vIHJlbW92ZSB0aGUgY2xhc3MgZmlyc3QsIGlmIGFscmVhZHkgdGhlcmUKKyAgWGluaGEuX3JlbW92ZUNsYXNzKGVsLCBjbGFzc05hbWUpOworICBlbC5jbGFzc05hbWUgKz0gIiAiICsgY2xhc3NOYW1lOworfTsKKworLyoqIEFkZHMgQ1NTIGNsYXNzZXMgIHRvIGEgZ2l2ZW4gZWxlbWVudCAodGhhdCBpcywgaXQgZXhwYW5kcyBpdHMgY2xhc3NOYW1lIHByb3BlcnR5IGJ5IHRoZSBnaXZlbiBzdHJpbmcsCisgKiAgc2VwYXJhdGVkIGJ5IGEgc3BhY2UsIHRoZXJlYnkgY2hlY2tpbmcgdGhhdCBubyBjbGFzcyBpcyBkb3VibHkgYWRkZWQpCisgKiAgCisgKiAgQHNlZSBYaW5oYSNhZGRDbGFzcworICogIEBwYXJhbSB7RG9tTm9kZX0gIGVsIFRoZSBET00gZWxlbWVudCB0aGUgY2xhc3NlcyB3aWxsIGJlIGFkZGVkIHRvCisgKiAgQHBhcmFtIHtTdHJpbmd9ICAgY2xhc3NlcyBUaGUgY2xhc3NlcyB0byBiZSBhZGRlZAorICovCitYaW5oYS5hZGRDbGFzc2VzID0gZnVuY3Rpb24oZWwsIGNsYXNzZXMpCit7CisgIGlmICggZWwgIT09IG51bGwgKQorICB7CisgICAgdmFyIHRoaWVycyA9IGVsLmNsYXNzTmFtZS50cmltKCkuc3BsaXQoJyAnKTsKKyAgICB2YXIgb3VycyAgID0gY2xhc3Nlcy5zcGxpdCgnICcpOworICAgIGZvciAoIHZhciB4ID0gMDsgeCA8IG91cnMubGVuZ3RoOyB4KysgKQorICAgIHsKKyAgICAgIHZhciBleGlzdHMgPSBmYWxzZTsKKyAgICAgIGZvciAoIHZhciBpID0gMDsgZXhpc3RzID09PSBmYWxzZSAmJiBpIDwgdGhpZXJzLmxlbmd0aDsgaSsrICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCB0aGllcnNbaV0gPT0gb3Vyc1t4XSApCisgICAgICAgIHsKKyAgICAgICAgICBleGlzdHMgPSB0cnVlOworICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoIGV4aXN0cyA9PT0gZmFsc2UgKQorICAgICAgeworICAgICAgICB0aGllcnNbdGhpZXJzLmxlbmd0aF0gPSBvdXJzW3hdOworICAgICAgfQorICAgIH0KKyAgICBlbC5jbGFzc05hbWUgPSB0aGllcnMuam9pbignICcpLnRyaW0oKTsKKyAgfQorfTsKKworLyoqIFJlbW92ZXMgQ1NTIGNsYXNzZXMgKHRoYXQgaXMgb25lIG9yIG1vcmUgb2YgcG9zc2libHkgc2V2ZXJhbCBwYXJ0cyAKKyAqICAgc2VwYXJhdGVkIGJ5IHNwYWNlcykgZnJvbSBhIGdpdmVuIGVsZW1lbnQKKyAqICAKKyAqICBAc2VlIFhpbmhhI19yZW1vdmVDbGFzc2VzCisgKiAgQHBhcmFtIHtEb21Ob2RlfSAgZWwgVGhlIERPTSBlbGVtZW50IHRoZSBjbGFzcyB3aWxsIGJlIHJlbW92ZWQgZnJvbQorICogIEBwYXJhbSB7U3RyaW5nfSAgIGNsYXNzTmFtZSBUaGUgY2xhc3MgdG8gYmUgcmVtb3ZlZAorICovCitYaW5oYS5yZW1vdmVDbGFzc2VzID0gZnVuY3Rpb24oZWwsIGNsYXNzZXMpCit7CisgIHZhciBleGlzdGluZyAgICA9IGVsLmNsYXNzTmFtZS50cmltKCkuc3BsaXQoKTsKKyAgdmFyIG5ld19jbGFzc2VzID0gW107CisgIHZhciByZW1vdmUgICAgICA9IGNsYXNzZXMudHJpbSgpLnNwbGl0KCk7CisKKyAgZm9yICggdmFyIGkgPSAwOyBpIDwgZXhpc3RpbmcubGVuZ3RoOyBpKysgKQorICB7CisgICAgdmFyIGZvdW5kID0gZmFsc2U7CisgICAgZm9yICggdmFyIHggPSAwOyB4IDwgcmVtb3ZlLmxlbmd0aCAmJiAhZm91bmQ7IHgrKyApCisgICAgeworICAgICAgaWYgKCBleGlzdGluZ1tpXSA9PSByZW1vdmVbeF0gKQorICAgICAgeworICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICB9CisgICAgfQorICAgIGlmICggIWZvdW5kICkKKyAgICB7CisgICAgICBuZXdfY2xhc3Nlc1tuZXdfY2xhc3Nlcy5sZW5ndGhdID0gZXhpc3RpbmdbaV07CisgICAgfQorICB9CisgIHJldHVybiBuZXdfY2xhc3Nlcy5qb2luKCcgJyk7Cit9OworCisvKiogQWxpYXMgb2YgWGluaGEuX2FkZENsYXNzKCkKKyAqICBAc2VlIFhpbmhhI19hZGRDbGFzcworICovCitYaW5oYS5hZGRDbGFzcyAgICAgICA9IFhpbmhhLl9hZGRDbGFzczsKKy8qKiBBbGlhcyBvZiBYaW5oYS5YaW5oYS5fcmVtb3ZlQ2xhc3MoKQorICogIEBzZWUgWGluaGEjX3JlbW92ZUNsYXNzCisgKi8KK1hpbmhhLnJlbW92ZUNsYXNzICAgID0gWGluaGEuX3JlbW92ZUNsYXNzOworLyoqIEFsaWFzIG9mIFhpbmhhLmFkZENsYXNzZXMoKQorICogIEBzZWUgWGluaGEjYWRkQ2xhc3NlcworICovCitYaW5oYS5fYWRkQ2xhc3NlcyAgICA9IFhpbmhhLmFkZENsYXNzZXM7CisvKiogQWxpYXMgb2YgWGluaGEucmVtb3ZlQ2xhc3NlcygpCisgKiAgQHNlZSBYaW5oYSNyZW1vdmVDbGFzc2VzCisgKi8KK1hpbmhhLl9yZW1vdmVDbGFzc2VzID0gWGluaGEucmVtb3ZlQ2xhc3NlczsKKworLyoqIENoZWNrcyBpZiBvbmUgZWxlbWVudCBoYXMgc2V0IHRoZSBnaXZlbiBjbGFzc05hbWUKKyAqICAKKyAqICBAcGFyYW0ge0RvbU5vZGV9ICBlbCBUaGUgRE9NIGVsZW1lbnQgdG8gY2hlY2sKKyAqICBAcGFyYW0ge1N0cmluZ30gICBjbGFzc05hbWUgVGhlIGNsYXNzIHRvIGJlIGxvb2tlZCBmb3IKKyAqICBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqLworWGluaGEuX2hhc0NsYXNzID0gZnVuY3Rpb24oZWwsIGNsYXNzTmFtZSkKK3sKKyAgaWYgKCAhICggZWwgJiYgZWwuY2xhc3NOYW1lICkgKQorICB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHZhciBjbHMgPSBlbC5jbGFzc05hbWUuc3BsaXQoIiAiKTsKKyAgZm9yICggdmFyIGkgPSBjbHMubGVuZ3RoOyBpID4gMDsgKQorICB7CisgICAgaWYgKCBjbHNbLS1pXSA9PSBjbGFzc05hbWUgKQorICAgIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorICByZXR1cm4gZmFsc2U7Cit9OworCisvKioKKyAqIFVzZSBYTUxIVFRQUmVxdWVzdCB0byBwb3N0IHNvbWUgZGF0YSBiYWNrIHRvIHRoZSBzZXJ2ZXIgYW5kIGRvIHNvbWV0aGluZworICogd2l0aCB0aGUgcmVzcG9uc2UgKGFzeW5jcm9ub3VzbHkhKSwgdGhpcyBpcyB1c2VkIGJ5IHN1Y2ggdGhpbmdzIGFzIHRoZSB0aWR5CisgKiBmdW5jdGlvbnMKKyAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIGFkZHJlc3MgZm9yIHRoZSBIVFRQUmVxdWVzdAorICogQHBhcmFtIHtPYmplY3R9IGRhdGEgVGhlIGRhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBzZXJ2ZXIgbGlrZSB7bmFtZToidmFsdWUifQorICogQHBhcmFtIHtGdW5jdGlvbn0gc3VjY2VzcyBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gYW4gYW5zd2VyIGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciB3aXRoIHRoZSByZXNwb25zZVRleHQgYXMgYXJndW1lbnQuCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmYWlsdXJlIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB3ZSBmYWlsIHRvIHJlY2VpdmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gYW5zd2VyIGZyb20gdGhlIHNlcnZlci4gV2UgcGFzcyBpdCB0aGUgcmVxdWVzdCBvYmplY3QuCisgKi8KKyAKKy8qKiBtb2Rfc2VjdXJpdHkgKGFuIGFwYWNoZSBtb2R1bGUgd2hpY2ggc2NhbnMgaW5jb21pbmcgcmVxdWVzdHMgZm9yIHBvdGVudGlhbCBoYWNrIGF0dGVtcHRzKQorICogIGhhcyBhIHJ1bGUgd2hpY2ggdHJpZ2dlcnMgd2hlbiBpdCBnZXRzIGFuIGluY29taW5nIENvbnRlbnQtVHlwZSB3aXRoIGEgY2hhcnNldAorICogIHNlZSB0aWNrZXQ6MTAyOCB0byB0cnkgYW5kIHdvcmsgYXJvdW5kIHRoaXMsIGlmIHdlIGdldCBhIGZhaWx1cmUgaW4gYSBwb3N0YmFjaworICogIHRoZW4gWGluaGEuX3Bvc3RiYWNrX3NlbmRfY2hhcnNldCB3aWxsIGJlIHNldCB0byBmYWxzZSBhbmQgdGhlIHJlcXVlc3QgdHJpZWQgYWdhaW4gKG9uY2UpCisgKiAgQHR5cGUgQm9vbGVhbgorICogIEBwcml2YXRlCisgKi8gCisvLyAKKy8vIAorLy8gCitYaW5oYS5fcG9zdGJhY2tfc2VuZF9jaGFyc2V0ID0gdHJ1ZTsKKy8qKiBVc2UgWE1MSFRUUFJlcXVlc3QgdG8gc2VuZCBzb21lIHNvbWUgZGF0YSB0byB0aGUgc2VydmVyIGFuZCBkbyBzb21ldGhpbmcKKyAqICB3aXRoIHRoZSBnZXRiYWNrIChhc3luY3Jvbm91c2x5ISkKKyAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIGFkZHJlc3MgZm9yIHRoZSBIVFRQUmVxdWVzdAorICogQHBhcmFtIHtGdW5jdGlvbn0gc3VjY2VzcyBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gYW4gYW5zd2VyIGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciB3aXRoIHRoZSByZXNwb25zZVRleHQgYXMgYXJndW1lbnQuCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmYWlsdXJlIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB3ZSBmYWlsIHRvIHJlY2VpdmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gYW5zd2VyIGZyb20gdGhlIHNlcnZlci4gV2UgcGFzcyBpdCB0aGUgcmVxdWVzdCBvYmplY3QuCisgKi8KK1hpbmhhLl9wb3N0YmFjayA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgc3VjY2VzcywgZmFpbHVyZSkKK3sKKyAgdmFyIHJlcSA9IG51bGw7CisgIHJlcSA9IFhpbmhhLmdldFhNTEhUVFBSZXF1ZXN0T2JqZWN0KCk7CisKKyAgdmFyIGNvbnRlbnQgPSAnJzsKKyAgaWYgKHR5cGVvZiBkYXRhID09ICdzdHJpbmcnKQorICB7CisgICAgY29udGVudCA9IGRhdGE7CisgIH0KKyAgZWxzZSBpZih0eXBlb2YgZGF0YSA9PSAib2JqZWN0IikKKyAgeworICAgIGZvciAoIHZhciBpIGluIGRhdGEgKQorICAgIHsKKyAgICAgIGNvbnRlbnQgKz0gKGNvbnRlbnQubGVuZ3RoID8gJyYnIDogJycpICsgaSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChkYXRhW2ldKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBjYWxsQmFjaygpCisgIHsKKyAgICBpZiAoIHJlcS5yZWFkeVN0YXRlID09IDQgKQorICAgIHsKKyAgICAgIGlmICggKChyZXEuc3RhdHVzIC8gMTAwKSA9PSAyKSB8fCBYaW5oYS5pc1J1bkxvY2FsbHkgJiYgcmVxLnN0YXR1cyA9PT0gMCApCisgICAgICB7CisgICAgICAgIGlmICggdHlwZW9mIHN1Y2Nlc3MgPT0gJ2Z1bmN0aW9uJyApCisgICAgICAgIHsKKyAgICAgICAgICBzdWNjZXNzKHJlcS5yZXNwb25zZVRleHQsIHJlcSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoWGluaGEuX3Bvc3RiYWNrX3NlbmRfY2hhcnNldCkKKyAgICAgIHsgICAgICAgIAorICAgICAgICBYaW5oYS5fcG9zdGJhY2tfc2VuZF9jaGFyc2V0ID0gZmFsc2U7CisgICAgICAgIFhpbmhhLl9wb3N0YmFjayh1cmwsZGF0YSxzdWNjZXNzLCBmYWlsdXJlKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHR5cGVvZiBmYWlsdXJlID09ICdmdW5jdGlvbicpCisgICAgICB7CisgICAgICAgIGZhaWx1cmUocmVxKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgYWxlcnQoJ0FuIGVycm9yIGhhcyBvY2N1cnJlZDogJyArIHJlcS5zdGF0dXNUZXh0ICsgJ1xuVVJMOiAnICsgdXJsKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gY2FsbEJhY2s7CisKKyAgcmVxLm9wZW4oJ1BPU1QnLCB1cmwsIHRydWUpOworICByZXEuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcrKFhpbmhhLl9wb3N0YmFja19zZW5kX2NoYXJzZXQgPyAnOyBjaGFyc2V0PVVURi04JyA6ICcnKSk7CisKKyAgcmVxLnNlbmQoY29udGVudCk7Cit9OworCisvKiogVXNlIFhNTEhUVFBSZXF1ZXN0IHRvIHJlY2VpdmUgc29tZSBkYXRhIGZyb20gdGhlIHNlcnZlciBhbmQgZG8gc29tZXRoaW5nCisgKiB3aXRoIHRoZSBpdCAoYXN5bmNyb25vdXNseSEpCisgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBhZGRyZXNzIGZvciB0aGUgSFRUUFJlcXVlc3QKKyAqIEBwYXJhbSB7RnVuY3Rpb259IHN1Y2Nlc3MgQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIGFuIGFuc3dlciBpcworICogICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgcmVzcG9uc2VUZXh0IGFzIGFyZ3VtZW50LgorICogQHBhcmFtIHtGdW5jdGlvbn0gZmFpbHVyZSBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gd2UgZmFpbCB0byByZWNlaXZlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGFuc3dlciBmcm9tIHRoZSBzZXJ2ZXIuIFdlIHBhc3MgaXQgdGhlIHJlcXVlc3Qgb2JqZWN0LgorICovCitYaW5oYS5fZ2V0YmFjayA9IGZ1bmN0aW9uKHVybCwgc3VjY2VzcywgZmFpbHVyZSkKK3sKKyAgdmFyIHJlcSA9IG51bGw7CisgIHJlcSA9IFhpbmhhLmdldFhNTEhUVFBSZXF1ZXN0T2JqZWN0KCk7CisKKyAgZnVuY3Rpb24gY2FsbEJhY2soKQorICB7CisgICAgaWYgKCByZXEucmVhZHlTdGF0ZSA9PSA0ICkKKyAgICB7CisgICAgICBpZiAoICgocmVxLnN0YXR1cyAvIDEwMCkgPT0gMikgfHwgWGluaGEuaXNSdW5Mb2NhbGx5ICYmIHJlcS5zdGF0dXMgPT09IDAgKQorICAgICAgeworICAgICAgICBzdWNjZXNzKHJlcS5yZXNwb25zZVRleHQsIHJlcSk7CisgICAgICB9CisgICAgICBlbHNlIGlmICh0eXBlb2YgZmFpbHVyZSA9PSAnZnVuY3Rpb24nKQorICAgICAgeworICAgICAgICBmYWlsdXJlKHJlcSk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGFsZXJ0KCdBbiBlcnJvciBoYXMgb2NjdXJyZWQ6ICcgKyByZXEuc3RhdHVzVGV4dCArICdcblVSTDogJyArIHVybCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGNhbGxCYWNrOworICByZXEub3BlbignR0VUJywgdXJsLCB0cnVlKTsKKyAgcmVxLnNlbmQobnVsbCk7Cit9OworCitYaW5oYS5waW5nID0gZnVuY3Rpb24odXJsLCBzdWNjZXNzSGFuZGxlciwgZmFpbEhhbmRsZXIpCit7CisgIHZhciByZXEgPSBudWxsOworICByZXEgPSBYaW5oYS5nZXRYTUxIVFRQUmVxdWVzdE9iamVjdCgpOworCisgIGZ1bmN0aW9uIGNhbGxCYWNrKCkKKyAgeworICAgIGlmICggcmVxLnJlYWR5U3RhdGUgPT0gNCApCisgICAgeworICAgICAgaWYgKCAoKHJlcS5zdGF0dXMgLyAxMDApID09IDIpIHx8IFhpbmhhLmlzUnVuTG9jYWxseSAmJiByZXEuc3RhdHVzID09PSAwICkKKyAgICAgIHsKKyAgICAgICAgaWYgKHN1Y2Nlc3NIYW5kbGVyKSAKKyAgICAgICAgeworICAgICAgICAgIHN1Y2Nlc3NIYW5kbGVyKHJlcSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaWYgKGZhaWxIYW5kbGVyKSAKKyAgICAgICAgeworICAgICAgICAgIGZhaWxIYW5kbGVyKHJlcSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICAvLyBPcGVyYSBzZWVtcyB0byBoYXZlIHNvbWUgcHJvYmxlbXMgbWl4aW5nIEhFQUQgcmVxdWVzdHMgd2l0aCBHRVQgcmVxdWVzdHMuCisgIC8vIFRoZSBHRVQgaXMgc2xvd2VyLCBzbyBpdCdzIGEgbmV0IHNsb3dkb3duIGZvciBPcGVyYSwgYnV0IGl0IGtlZXBzIHRoaW5ncworICAvLyBmcm9tIGJyZWFraW5nLgorICB2YXIgbWV0aG9kID0gJ0dFVCc7CisgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBjYWxsQmFjazsKKyAgcmVxLm9wZW4obWV0aG9kLCB1cmwsIHRydWUpOworICByZXEuc2VuZChudWxsKTsKK307CisKKy8qKiBVc2UgWE1MSFRUUFJlcXVlc3QgdG8gcmVjZWl2ZSBzb21lIGRhdGEgZnJvbSB0aGUgc2VydmVyIHN5bmNyb25vdXNseQorICogIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIGFkZHJlc3MgZm9yIHRoZSBIVFRQUmVxdWVzdAorICovCitYaW5oYS5fZ2V0dXJsY29udGVudCA9IGZ1bmN0aW9uKHVybCwgcmV0dXJuWE1MKQoreworICB2YXIgcmVxID0gbnVsbDsKKyAgcmVxID0gWGluaGEuZ2V0WE1MSFRUUFJlcXVlc3RPYmplY3QoKTsKKworICAvLyBTeW5jaHJvbm91cyEKKyAgcmVxLm9wZW4oJ0dFVCcsIHVybCwgZmFsc2UpOworICByZXEuc2VuZChudWxsKTsKKyAgaWYgKCAoKHJlcS5zdGF0dXMgLyAxMDApID09IDIpIHx8IFhpbmhhLmlzUnVuTG9jYWxseSAmJiByZXEuc3RhdHVzID09PSAwICkKKyAgeworICAgIHJldHVybiAocmV0dXJuWE1MKSA/IHJlcS5yZXNwb25zZVhNTCA6IHJlcS5yZXNwb25zZVRleHQ7CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuICcnOworICB9Cit9OworCisKKy8qKiBVc2UgWE1MSFRUUFJlcXVlc3QgdG8gc2VuZCBzb21lIHNvbWUgZGF0YSB0byB0aGUgc2VydmVyIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBzeW5jaHJvbm91c2x5CisgKgorICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgYWRkcmVzcyBmb3IgdGhlIEhUVFBSZXF1ZXN0CisgKiBAcGFyYW0gZGF0YSB0aGUgZGF0YSB0byBzZW5kLCBzdHJlaW5nIG9yIGFycmF5CisgKi8KK1hpbmhhLl9wb3N0dXJsY29udGVudCA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgcmV0dXJuWE1MKQoreworICB2YXIgcmVxID0gbnVsbDsKKyAgcmVxID0gWGluaGEuZ2V0WE1MSFRUUFJlcXVlc3RPYmplY3QoKTsKKworICB2YXIgY29udGVudCA9ICcnOworICBpZiAodHlwZW9mIGRhdGEgPT0gJ3N0cmluZycpCisgIHsKKyAgICBjb250ZW50ID0gZGF0YTsKKyAgfQorICBlbHNlIGlmKHR5cGVvZiBkYXRhID09ICJvYmplY3QiKQorICB7CisgICAgZm9yICggdmFyIGkgaW4gZGF0YSApCisgICAgeworICAgICAgY29udGVudCArPSAoY29udGVudC5sZW5ndGggPyAnJicgOiAnJykgKyBpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGRhdGFbaV0pOworICAgIH0KKyAgfQorCisgIHJlcS5vcGVuKCdQT1NUJywgdXJsLCBmYWxzZSk7ICAgIAorICByZXEuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcrKFhpbmhhLl9wb3N0YmFja19zZW5kX2NoYXJzZXQgPyAnOyBjaGFyc2V0PVVURi04JyA6ICcnKSk7CisgIHJlcS5zZW5kKGNvbnRlbnQpOworICAKKyAgaWYgKCAoKHJlcS5zdGF0dXMgLyAxMDApID09IDIpIHx8IFhpbmhhLmlzUnVuTG9jYWxseSAmJiByZXEuc3RhdHVzID09PSAwICkKKyAgeworICAgIHJldHVybiAocmV0dXJuWE1MKSA/IHJlcS5yZXNwb25zZVhNTCA6IHJlcS5yZXNwb25zZVRleHQ7CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuICcnOworICB9CisgIAorfTsKKy8vIFVubGVzcyBzb21lYm9keSBhbHJlYWR5IGhhcywgbWFrZSBhIGxpdHRsZSBmdW5jdGlvbiB0byBkZWJ1ZyB0aGluZ3MKKworaWYgKHR5cGVvZiBkdW1wVmFsdWVzID09ICd1bmRlZmluZWQnKSAKK3sKKyAgZHVtcFZhbHVlcyA9IGZ1bmN0aW9uKG8pCisgIHsKKyAgICB2YXIgcyA9ICcnOworICAgIGZvciAodmFyIHByb3AgaW4gbykgCisgICAgeworICAgICAgaWYgKHdpbmRvdy5jb25zb2xlICYmIHR5cGVvZiB3aW5kb3cuY29uc29sZS5sb2cgPT0gJ2Z1bmN0aW9uJykgCisgICAgICB7CisgICAgICAgIGlmICh0eXBlb2YgY29uc29sZS5maXJlYnVnICE9ICd1bmRlZmluZWQnKSAKKyAgICAgICAgeworICAgICAgICAgIGNvbnNvbGUubG9nKG8pOworICAgICAgICB9CisgICAgICAgIGVsc2UgCisgICAgICAgIHsKKyAgICAgICAgICBjb25zb2xlLmxvZyhwcm9wICsgJyA9ICcgKyBvW3Byb3BdICsgJ1xuJyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgcyArPSBwcm9wICsgJyA9ICcgKyBvW3Byb3BdICsgJ1xuJzsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKHMpIAorICAgIHsKKyAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyb3JzJykpCisgICAgICB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcnJvcnMnKS52YWx1ZSArPSBzOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICB2YXIgeCA9IHdpbmRvdy5vcGVuKCIiLCAiZGVidWdnZXIiKTsKKyAgICAgICAgeC5kb2N1bWVudC53cml0ZSgnPHByZT4nICsgcyArICc8L3ByZT4nKTsKKyAgICAgIH0KKworICAgIH0KKyAgfTsKK30KK2lmICggIUFycmF5LnByb3RvdHlwZS5jb250YWlucyApCit7CisgIC8qKiBXYWxrcyB0aHJvdWdoIGFuIGFycmF5IGFuZCBjaGVja3MgaWYgdGhlIHNwZWNpZmllZCBpdGVtIGV4aXN0cyBpbiBpdAorICAqIEBwYXJhbSB7U3RyaW5nfSBuZWVkbGUgVGhlIHN0cmluZyB0byBzZWFyY2ggZm9yCisgICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgaXRlbSBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlIAorICAqLworICBBcnJheS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbihuZWVkbGUpCisgIHsKKyAgICB2YXIgaGF5c3RhY2sgPSB0aGlzOworICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGhheXN0YWNrLmxlbmd0aDsgaSsrICkKKyAgICB7CisgICAgICBpZiAoIG5lZWRsZSA9PSBoYXlzdGFja1tpXSApCisgICAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH07Cit9CisKK2lmICggIUFycmF5LnByb3RvdHlwZS5pbmRleE9mICkKK3sKKyAgLyoqIFdhbGtzIHRocm91Z2ggYW4gYXJyYXkgYW5kLCBpZiB0aGUgc3BlY2lmaWVkIGl0ZW0gZXhpc3RzIGluIGl0LCByZXR1cm5zIHRoZSBwb3NpdGlvbgorICAqIEBwYXJhbSB7U3RyaW5nfSBuZWVkbGUgVGhlIHN0cmluZyB0byBzZWFyY2ggZm9yCisgICogQHJldHVybnMge0ludGVnZXJ8LTF9IEluZGV4IHBvc2l0aW9uIGlmIGl0ZW0gZm91bmQsIC0xIG90aGVyd2lzZSAoc2FtZSBhcyBidWlsdCBpbiBqcykKKyAgKi8KKyAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbihuZWVkbGUpCisgIHsKKyAgICB2YXIgaGF5c3RhY2sgPSB0aGlzOworICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGhheXN0YWNrLmxlbmd0aDsgaSsrICkKKyAgICB7CisgICAgICBpZiAoIG5lZWRsZSA9PSBoYXlzdGFja1tpXSApCisgICAgICB7CisgICAgICAgIHJldHVybiBpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gLTE7CisgIH07Cit9CitpZiAoICFBcnJheS5wcm90b3R5cGUuYXBwZW5kICkKK3sKKyAgLyoqIEFkZHMgYW4gaXRlbSB0byBhbiBhcnJheQorICAgKiBAcGFyYW0ge01peGVkfSBhIEl0ZW0gdG8gYWRkCisgICAqIEByZXR1cm5zIHtBcnJheX0gVGhlIGFycmF5IGluY2x1ZGluZyB0aGUgbmV3bHkgYWRkZWQgaXRlbQorICAgKi8KKyAgQXJyYXkucHJvdG90eXBlLmFwcGVuZCAgPSBmdW5jdGlvbihhKQorICB7CisgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKyApCisgICAgeworICAgICAgdGhpcy5wdXNoKGFbaV0pOworICAgIH0KKyAgICByZXR1cm4gdGhpczsKKyAgfTsKK30KKy8qKiBFeGVjdXRlcyBhIHByb3ZpZGVkIGZ1bmN0aW9uIG9uY2UgcGVyIGFycmF5IGVsZW1lbnQuCisgKiAgQ3VzdG9tIGltcGxlbWVudGF0aW9uIGZvciBKUyBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpdCBuYXRpdmVseQorICogQHNvdXJjZSBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL0VuL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L0ZvckVhY2gKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgZm9yIGVhY2ggZWxlbWVudAorICogQHBhcmFtIHtPYmplY3R9IHRoaXNPYmplY3QgT2JqZWN0IHRvIHVzZSBhcyB0aGlzIHdoZW4gZXhlY3V0aW5nIGNhbGxiYWNrLiAKKyAqLworaWYgKCFBcnJheS5wcm90b3R5cGUuZm9yRWFjaCkKK3sKKyAgQXJyYXkucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihmbiAvKiwgdGhpc09iamVjdCovKQorICB7CisgICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOworICAgIGlmICh0eXBlb2YgZm4gIT0gImZ1bmN0aW9uIikKKyAgICB7CisgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7CisgICAgfQorCisgICAgdmFyIHRoaXNPYmplY3QgPSBhcmd1bWVudHNbMV07CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICB7CisgICAgICBpZiAoaSBpbiB0aGlzKQorICAgICAgeworICAgICAgICBmbi5jYWxsKHRoaXNPYmplY3QsIHRoaXNbaV0sIGksIHRoaXMpOworICAgICAgfQorICAgIH0KKyAgfTsKK30KKy8qKiBSZXR1cm5zIGFsbCBlbGVtZW50cyB3aXRoaW4gYSBnaXZlbiBjbGFzcyBuYW1lIGluc2lkZSBhbiBlbGVtZW50CisgKiBAdHlwZSBBcnJheQorICogQHBhcmFtIHtEb21Ob2RlfGRvY3VtZW50fSBlbCB3aGVyZWluIHRvIHNlYXJjaAorICogQHBhcmFtIHtPYmplY3R9IGNsYXNzTmFtZQorICovCitYaW5oYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gZnVuY3Rpb24oZWwsY2xhc3NOYW1lKQoreworICBpZiAoZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSkKKyAgeworICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSkpOworICB9CisgIGVsc2UKKyAgeworICAgIHZhciBlbHMgPSBlbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpOworICAgIHZhciByZXN1bHQgPSBbXTsKKyAgICB2YXIgY2xhc3NOYW1lczsKKyAgICBmb3IgKHZhciBpPTA7aTxlbHMubGVuZ3RoO2krKykKKyAgICB7CisgICAgICBjbGFzc05hbWVzID0gZWxzW2ldLmNsYXNzTmFtZS5zcGxpdCgnICcpOworICAgICAgaWYgKGNsYXNzTmFtZXMuY29udGFpbnMoY2xhc3NOYW1lKSkgCisgICAgICB7CisgICAgICAgIHJlc3VsdC5wdXNoKGVsc1tpXSk7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH0KK307CisKKy8qKiBSZXR1cm5zIHRydWUgaWYgYWxsIGVsZW1lbnRzIG9mIDxlbT5hMjwvZW0+IGFyZSBhbHNvIGNvbnRhaW5lZCBpbiA8ZW0+YTE8L2VtPiAoYXQgbGVhc3QgSSB0aGluayB0aGlzIGlzIHdoYXQgaXQgZG9lcykKKyogQHBhcmFtIHtBcnJheX0gYTEKKyogQHBhcmFtIHtBcnJheX0gYTIKKyogQHJldHVybnMge0Jvb2xlYW59CisqLworWGluaGEuYXJyYXlDb250YWluc0FycmF5ID0gZnVuY3Rpb24oYTEsIGEyKQoreworICB2YXIgYWxsX2ZvdW5kID0gdHJ1ZTsKKyAgZm9yICggdmFyIHggPSAwOyB4IDwgYTIubGVuZ3RoOyB4KysgKQorICB7CisgICAgdmFyIGZvdW5kID0gZmFsc2U7CisgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgYTEubGVuZ3RoOyBpKysgKQorICAgIHsKKyAgICAgIGlmICggYTFbaV0gPT0gYTJbeF0gKQorICAgICAgeworICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBpZiAoICFmb3VuZCApCisgICAgeworICAgICAgYWxsX2ZvdW5kID0gZmFsc2U7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGFsbF9mb3VuZDsKK307CisvKiogV2Fsa3MgdGhyb3VnaCBhbiBhcnJheSBhbmQgYXBwbGllcyBhIGZpbHRlciBmdW5jdGlvbiB0byBlYWNoIGl0ZW0KKyogQHBhcmFtIHtBcnJheX0gYTEgVGhlIGFycmF5IHRvIGZpbHRlcgorKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaWx0ZXJmbiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgdGhlIGl0ZW0gaXMgYWRkZWQgdG8gdGhlIG5ldyBhcnJheQorKiBAcmV0dXJucyB7QXJyYXl9IEZpbHRlcmVkIGFycmF5CisqLworWGluaGEuYXJyYXlGaWx0ZXIgPSBmdW5jdGlvbihhMSwgZmlsdGVyZm4pCit7CisgIHZhciBuZXdfYSA9IFsgXTsKKyAgZm9yICggdmFyIHggPSAwOyB4IDwgYTEubGVuZ3RoOyB4KysgKQorICB7CisgICAgaWYgKCBmaWx0ZXJmbihhMVt4XSkgKQorICAgIHsKKyAgICAgIG5ld19hW25ld19hLmxlbmd0aF0gPSBhMVt4XTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIG5ld19hOworfTsKKy8qKiBDb252ZXJ0cyBhIENvbGxlY3Rpb24gb2JqZWN0IHRvIGFuIGFycmF5IAorKiBAcGFyYW0ge0NvbGxlY3Rpb259IGNvbGxlY3Rpb24gVGhlIGFycmF5IHRvIGZpbHRlcgorKiBAcmV0dXJucyB7QXJyYXl9IEFycmF5IGNvbnRhaW5pbmcgdGhlIGl0ZW0gb2YgY29sbGVjdGlvbgorKi8KK1hpbmhhLmNvbGxlY3Rpb25Ub0FycmF5ID0gZnVuY3Rpb24oY29sbGVjdGlvbikKK3sKKyAgdHJ5CisgIHsKKyAgICByZXR1cm4gY29sbGVjdGlvbi5sZW5ndGggPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjb2xsZWN0aW9uKSA6IFtdOyAvL0NvbGxlY3Rpb24gdG8gQXJyYXkKKyAgfQorICBjYXRjaChlKQorICB7CisgICAgLy8gSW4gY2VydGFpbiBpbXBsZW1lbnRhdGlvbnMgKCpjb3VnaCogSUUpLCB5b3UgY2FuJ3QgY2FsbCBzbGljZSBvbiBhCisgICAgLy8gY29sbGVjdGlvbi4gIFdlJ2xsIGZhbGxiYWNrIHRvIHVzaW5nIHRoZSBzaW1wbGUsIG5vbi1uYXRpdmUgaXRlcmF0aXZlCisgICAgLy8gYXBwcm9hY2guCisgIH0KKworICB2YXIgYXJyYXkgPSBbIF07CisgIGZvciAoIHZhciBpID0gMDsgaSA8IGNvbGxlY3Rpb24ubGVuZ3RoOyBpKysgKQorICB7CisgICAgYXJyYXkucHVzaChjb2xsZWN0aW9uLml0ZW0oaSkpOworICB9CisgIHJldHVybiBhcnJheTsKK307CisKKy8qKiBJbmRleCBmb3IgWGluaGEudW5pcSBmdW5jdGlvbiAKKyoJQHByaXZhdGUKKyovCitYaW5oYS51bmlxX2NvdW50ID0gMDsKKy8qKiBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgdW5pcXVlIG9uIHRoZSBwYWdlCisqCUBwYXJhbSB7U3RyaW5nfSBwcmVmaXggVGhpcyBzdHJpbmcgaXMgcHJlZml4ZWQgdG8gYSBydW5uaW5nIG51bWJlcgorKiAgIEByZXR1cm5zIHtTdHJpbmd9CisqLworWGluaGEudW5pcSA9IGZ1bmN0aW9uKHByZWZpeCkKK3sKKyAgcmV0dXJuIHByZWZpeCArIFhpbmhhLnVuaXFfY291bnQrKzsKK307CisKKy8vIE5ldyBsYW5ndWFnZSBoYW5kbGluZyBmdW5jdGlvbnMKKworLyoqIExvYWQgYSBsYW5ndWFnZSBmaWxlLgorICogIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5LCBYaW5oYS5fbGMgd2lsbCB1c2UgaXQgd2hlbiBuZWNlc3NhcnkuCisgKiAgQHByaXZhdGUKKyAqICBAcGFyYW0ge1N0cmluZ30gY29udGV4dCBDYXNlIHNlbnNpdGl2ZSBjb250ZXh0IG5hbWUsIGVnICdYaW5oYScsICdUYWJsZU9wZXJhdGlvbnMnLCAuLi4KKyAqICBAcmV0dXJucyB7T2JqZWN0fQorICovCitYaW5oYS5fbG9hZGxhbmcgPSBmdW5jdGlvbihjb250ZXh0LHVybCkKK3sKKyAgdmFyIGxhbmc7CisgIAorICBpZiAoIHR5cGVvZiBfZWRpdG9yX2xjYmFja2VuZCA9PSAic3RyaW5nIiApCisgIHsKKyAgICAvL3VzZSBiYWNrZW5kCisgICAgdXJsID0gX2VkaXRvcl9sY2JhY2tlbmQ7CisgICAgdXJsID0gdXJsLnJlcGxhY2UoLyVsYW5nJS8sIF9lZGl0b3JfbGFuZyk7CisgICAgdXJsID0gdXJsLnJlcGxhY2UoLyVjb250ZXh0JS8sIGNvbnRleHQpOworICB9CisgIGVsc2UgaWYgKCF1cmwpCisgIHsKKyAgICAvL3VzZSBpbnRlcm5hbCBmaWxlcworICAgIGlmICggY29udGV4dCAhPSAnWGluaGEnKQorICAgIHsKKyAgICAgIHVybCA9IFhpbmhhLmdldFBsdWdpbkRpcihjb250ZXh0KSsiL2xhbmcvIitfZWRpdG9yX2xhbmcrIi5qcyI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBYaW5oYS5zZXRMb2FkaW5nTWVzc2FnZSgiTG9hZGluZyBsYW5ndWFnZSIpOworICAgICAgdXJsID0gX2VkaXRvcl91cmwrImxhbmcvIitfZWRpdG9yX2xhbmcrIi5qcyI7CisgICAgfQorICB9CisKKyAgdmFyIGxhbmdEYXRhID0gWGluaGEuX2dldHVybGNvbnRlbnQodXJsKTsKKyAgaWYgKCBsYW5nRGF0YSAhPT0gIiIgKQorICB7CisgICAgdHJ5CisgICAgeworICAgICAgZXZhbCgnbGFuZyA9ICcgKyBsYW5nRGF0YSk7CisgICAgfQorICAgIGNhdGNoKGV4KQorICAgIHsKKyAgICAgIGFsZXJ0KCdFcnJvciByZWFkaW5nIExhbmd1YWdlLUZpbGUgKCcrdXJsKycpOlxuJytFcnJvci50b1N0cmluZygpKTsKKyAgICAgIGxhbmcgPSB7fTsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgWGluaGEuZGVidWdNc2coIlVuYWJsZSB0byByZWFkIExhbmd1YWdlIEZpbGUgJyIrdXJsKyInIG9yIGZpbGUgYmxhbmssIGVpdGhlciBkb2VzIG5vdCBleGlzdCAod2hpY2ggaXMgcHJvYmFibHkgb2spIG9yIHBlcm1pc3Npb25zIGlzc3VlICh3aGljaCBpcyBwcm9iYWJseSBub3Qgb2spLiIsICdpbmZvJyk7CisgICAgbGFuZyA9IHt9OworICB9CisKKyAgcmV0dXJuIGxhbmc7Cit9OworCisvKiogUmV0dXJuIGEgbG9jYWxpc2VkIHN0cmluZy4KKyAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgRW5nbGlzaCBsYW5ndWFnZSBzdHJpbmcuIEl0IGNhbiBhbHNvIGNvbnRhaW4gdmFyaWFibGVzIGluIHRoZSBmb3JtICJTb21lIHRleHQgd2l0aCAkdmFyaWFibGU9cmVwbGFjZWQgdGV4dCQiLiAKKyAqICAgICAgICAgICAgICAgICAgVGhpcyByZXBsYWNlcyAkdmFyaWFibGUgaW4gIlNvbWUgdGV4dCB3aXRoICR2YXJpYWJsZSIgd2l0aCAicmVwbGFjZWQgdGV4dCIKKyAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZXh0ICAgQ2FzZSBzZW5zaXRpdmUgY29udGV4dCBuYW1lLCBlZyAnWGluaGEnIChkZWZhdWx0KSwgJ1RhYmxlT3BlcmF0aW9ucycuLi4KKyAqIEBwYXJhbSB7T2JqZWN0fSByZXBsYWNlICAgUmVwbGFjZSAkdmFyaWFibGVzIGluIFN0cmluZywgZWcge2ZvbzogJ3JlcGxhY2VUZXh0J30gKCRmb28gaW4gc3RyaW5nIHdpbGwgYmUgcmVwbGFjZWQgYnkgcmVwbGFjZVRleHQpCisgKi8KK1hpbmhhLl9sYyA9IGZ1bmN0aW9uKHN0cmluZywgY29udGV4dCwgcmVwbGFjZSkKK3sKKyAgdmFyIHVybCxyZXQ7CisgIGlmICh0eXBlb2YgY29udGV4dCA9PSAnb2JqZWN0JyAmJiBjb250ZXh0LnVybCAmJiBjb250ZXh0LmNvbnRleHQpCisgIHsKKyAgICB1cmwgPSBjb250ZXh0LnVybCArIF9lZGl0b3JfbGFuZyArICIuanMiOworICAgIGNvbnRleHQgPSBjb250ZXh0LmNvbnRleHQ7CisgIH0KKworICB2YXIgbSA9IG51bGw7CisgIGlmICh0eXBlb2Ygc3RyaW5nID09ICdzdHJpbmcnKSAKKyAgeworICAgIG0gPSBzdHJpbmcubWF0Y2goL1wkKC4qPyk9KC4qPylcJC9nKTsKKyAgfQorICBpZiAobSkgCisgIHsKKyAgICBpZiAoIXJlcGxhY2UpIAorICAgIHsKKyAgICAgIHJlcGxhY2UgPSB7fTsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7aTxtLmxlbmd0aDtpKyspCisgICAgeworICAgICAgdmFyIG4gPSBtW2ldLm1hdGNoKC9cJCguKj8pPSguKj8pXCQvKTsKKyAgICAgIHJlcGxhY2VbblsxXV0gPSBuWzJdOworICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoblswXSwnJCcrblsxXSk7CisgICAgfQorICB9CisgIGlmICggX2VkaXRvcl9sYW5nID09ICJlbiIgKQorICB7CisgICAgaWYgKCB0eXBlb2Ygc3RyaW5nID09ICdvYmplY3QnICYmIHN0cmluZy5zdHJpbmcgKQorICAgIHsKKyAgICAgIHJldCA9IHN0cmluZy5zdHJpbmc7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICByZXQgPSBzdHJpbmc7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIAorICAgIGlmICggdHlwZW9mIFhpbmhhLl9sY19jYXRhbG9nID09ICd1bmRlZmluZWQnICkKKyAgICB7CisgICAgICBYaW5oYS5fbGNfY2F0YWxvZyA9IFsgXTsKKyAgICB9CisKKyAgICBpZiAoIHR5cGVvZiBjb250ZXh0ID09ICd1bmRlZmluZWQnICkKKyAgICB7CisgICAgICBjb250ZXh0ID0gJ1hpbmhhJzsKKyAgICB9CisKKyAgICAvLyBCeSBkZWZhdWx0IHdlIHdpbGwgdHJ5IGFuZCBsb2FkIGEgbWVyZ2VkIGxhbmd1YWdlIGZpbGUgc28gdGhhdCB0aGUgdXNlcgorICAgIC8vICBpcyBub3QgbG9hZGluZyBxdWl0ZSBzbyBtYW55IGphdmFzY3JpcHQgZmlsZXMganVzdCBmb3IgbGFuZ3VhZ2UgZGF0YQorICAgIGlmICggdHlwZW9mIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSA9PSAndW5kZWZpbmVkJyB8fCBfZWRpdG9yX2xhbmdfbWVyZ2VkX2ZpbGUgPT09IHRydWUgKQorICAgIHsKKyAgICAgIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSA9IF9lZGl0b3JfdXJsICsgJ2xhbmcvbWVyZ2VkLycgKyBfZWRpdG9yX2xhbmcrJy5qcyc7CisgICAgfQorICAgIAorICAgIC8vIEFsbG93IHRvIHByb3ZpZGUgYW4gZXhwbGljaXRseSBtZXJnZWQgdHJhbnNsYXRpb24gZmlsZSBmb3IgdGVzdGluZyB0cmFuc2xhdGlvbnMgCisgICAgLy8gKGFuZCBmb3IgZWFzeSB1c2luZyBhIG1lcmdlZCB0cmFuc2xhdGlvbiBzZXQpICAgIAorICAgIGlmICggdHlwZW9mIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSA9PSAnc3RyaW5nJyApCisgICAgeworICAgICAgLy8gTm90ZSB0aGF0IGlmIHRoaXMgZmFpbHMgdG8gbG9hZCAoZG9lc24ndCBleGlzdCkKKyAgICAgIC8vICB0aGVuIHdlIHdpbGwgZ2V0IGFuIGVtcHR5IG9iamVjdAorICAgICAgWGluaGEuX2xjX2NhdGFsb2cgPSBYaW5oYS5fbG9hZGxhbmcobnVsbCwgX2VkaXRvcl9sYW5nX21lcmdlZF9maWxlKTsKKyAgICAgIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSA9IG51bGw7CisgICAgICAKKyAgICAgIC8vIFJlc29sdmUgdGhlIF9fTkVXX1RSQU5TTEFUSU9OU19fIHNlY3Rpb24gYnkgcHVzaGluZyBpdCdzIHRyYW5zbGF0aW9ucworICAgICAgLy8gIGJhY2sgb25lIGxldmVsIGludG8gdGhlIGNhdGFsb2cgcHJvcGVyCisgICAgICBpZih0eXBlb2YgWGluaGEuX2xjX2NhdGFsb2dbJ19fTkVXX1RSQU5TTEFUSU9OU19fJ10pCisgICAgICB7CisgICAgICAgIGZvcih2YXIgbW9kdWxlTmFtZSBpbiBYaW5oYS5fbGNfY2F0YWxvZ1snX19ORVdfVFJBTlNMQVRJT05TX18nXSkKKyAgICAgICAgeworICAgICAgICAgIGZvcih2YXIgZW5nbGlzaFN0cmluZyBpbiBYaW5oYS5fbGNfY2F0YWxvZ1snX19ORVdfVFJBTlNMQVRJT05TX18nXVttb2R1bGVOYW1lXSkKKyAgICAgICAgICB7CisgICAgICAgICAgICB2YXIgdHJhbnNsYXRlZFN0cmluZyA9IFhpbmhhLl9sY19jYXRhbG9nWydfX05FV19UUkFOU0xBVElPTlNfXyddW21vZHVsZU5hbWVdW2VuZ2xpc2hTdHJpbmddOworICAgICAgICAgICAgaWYodHJhbnNsYXRlZFN0cmluZy5tYXRjaCgvPDwoW0EtWmEtejAtOV9dKykoOi4qKT8+Pi8pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB2YXIgbGlua2VkTW9kdWxlID0gUmVnRXhwLiQxOworICAgICAgICAgICAgICBpZih0eXBlb2YgWGluaGEuX2xjX2NhdGFsb2dbbGlua2VkTW9kdWxlXSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgWGluaGEuX2xjX2NhdGFsb2dbbGlua2VkTW9kdWxlXVtlbmdsaXNoU3RyaW5nXSA9PSAnc3RyaW5nJykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRTdHJpbmcgPSBYaW5oYS5fbGNfY2F0YWxvZ1tsaW5rZWRNb2R1bGVdW2VuZ2xpc2hTdHJpbmddOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRTdHJpbmcgPSAnJzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZih0cmFuc2xhdGVkU3RyaW5nLmxlbmd0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYodHlwZW9mIFhpbmhhLl9sY19jYXRhbG9nW21vZHVsZU5hbWVdID09ICd1bmRlZmluZWQnKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgWGluaGEuX2xjX2NhdGFsb2dbbW9kdWxlTmFtZV0gPSB7IH07CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgWGluaGEuX2xjX2NhdGFsb2dbbW9kdWxlTmFtZV1bZW5nbGlzaFN0cmluZ10gPSB0cmFuc2xhdGVkU3RyaW5nOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoIHR5cGVvZiBYaW5oYS5fbGNfY2F0YWxvZ1tjb250ZXh0XSA9PSAndW5kZWZpbmVkJyApCisgICAgeworICAgICAgWGluaGEuX2xjX2NhdGFsb2dbY29udGV4dF0gPSBYaW5oYS5fbG9hZGxhbmcoY29udGV4dCx1cmwpOworICAgIH0KKworICAgIHZhciBrZXk7CisgICAgaWYgKCB0eXBlb2Ygc3RyaW5nID09ICdvYmplY3QnICYmIHN0cmluZy5rZXkgKQorICAgIHsKKyAgICAgIGtleSA9IHN0cmluZy5rZXk7CisgICAgfQorICAgIGVsc2UgaWYgKCB0eXBlb2Ygc3RyaW5nID09ICdvYmplY3QnICYmIHN0cmluZy5zdHJpbmcgKQorICAgIHsKKyAgICAgIGtleSA9IHN0cmluZy5zdHJpbmc7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBrZXkgPSBzdHJpbmc7CisgICAgfQorCisgICAgaWYgKCB0eXBlb2YgWGluaGEuX2xjX2NhdGFsb2dbY29udGV4dF1ba2V5XSA9PSAndW5kZWZpbmVkJyApCisgICAgeworICAgICAgaWYgKCBjb250ZXh0PT0nWGluaGEnICkKKyAgICAgIHsKKyAgICAgICAgLy8gSW5kaWNhdGUgaXQncyB1bnRyYW5zbGF0ZWQKKyAgICAgICAgaWYgKCB0eXBlb2Ygc3RyaW5nID09ICdvYmplY3QnICYmIHN0cmluZy5zdHJpbmcgKQorICAgICAgICB7CisgICAgICAgICAgcmV0ID0gc3RyaW5nLnN0cmluZzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICByZXQgPSBzdHJpbmc7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgCisgICAgICB7CisgICAgICAgIC8vIFNlZSBpZiB0aGUgWGluaGEgY29udGV4dCBoYXMgaXQsIGlmIHNvIHVzZSB0aGF0IGFzIGl0IG11c3QgYmUgCisgICAgICAgIC8vICBzb21ldGhpbmcgbW9yZSBnbG9iYWwgcHJvYmFibHkKKyAgICAgICAgaWYodHlwZW9mIFhpbmhhLl9sY19jYXRhbG9nWydYaW5oYSddW2tleV0gIT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gIFhpbmhhLl9sYyhzdHJpbmcsICdYaW5oYScsIHJlcGxhY2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBpdCBpbiBvdXIgT0JTT0xFVEUsIGlmIHNvIHVzZSB0aGF0CisgICAgICAgIC8vICBpdCBtaWdodCBiZSB0aGF0IHRoaXMgbWVhbnMgd2Ugb2Jzb2xldGVkIHNvbWV0aGluZyBtaXN0YWtlbmx5CisgICAgICAgIC8vICBiZWNhdXNlIGxjX3BhcnNlX3N0cmluZ3MucGhwIGRpZG4ndCBmaW5kIGl0CisgICAgICAgIGVsc2UgaWYoIHR5cGVvZiBYaW5oYS5fbGNfY2F0YWxvZ1tjb250ZXh0XVsnX19PQlNPTEVURV9fJ10gIT0gJ3VuZGVmaW5lZCcKKyAgICAgICAgICYmIHR5cGVvZiBYaW5oYS5fbGNfY2F0YWxvZ1tjb250ZXh0XVsnX19PQlNPTEVURV9fJ11ba2V5XSAhPSAndW5kZWZpbmVkJyApCisgICAgICAgIHsKKyAgICAgICAgICByZXQgPSBYaW5oYS5fbGNfY2F0YWxvZ1tjb250ZXh0XVsnX19PQlNPTEVURV9fJ11ba2V5XTsKKyAgICAgICAgICBYaW5oYS5kZWJ1Z01zZygiVXNpbmcgYSB0cmFuc2xhdGlvbiB3aGljaCBpcyBtYXJrZWQgX19PQlNPTEVURV9fLCBsaWtlbHkgbGNfcGFyc2Vfc3RyaW5ncy5waHAgZGlkIG5vdCBwaWNrIHNvbWV0aGluZyB1cCB0aGF0IGl0IHNob3VsZCBoYXZlLiAiICsgY29udGV4dCArICI6ICIgKyBrZXksICd3YXJuJyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIElmIHN0cmluZyBpcyBub3QgZm91bmQgYW5kIGNvbnRleHQgaXMgbm90IFhpbmhhLCBmYWxsIGJhY2sgdG8gWGluaGEKKyAgICAgICAgLy8gIG5vdyBhbmQgaXQgd2lsbCBkbyBzb21lIGZ1bmt5IHN0dWZmIChhYm92ZSkgSSdtIG5vdCBzdXJlIGV4YWN0bHkKKyAgICAgICAgLy8gIHdoYXQgdGhlIHB1cnBvc2Ugb2YgaXQgKHBhc3NpbmcgYW4gb2JqZWN0IGFzIHN0cmluZykgd2FzCisgICAgICAgIGVsc2UgCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gWGluaGEuX2xjKHN0cmluZywgJ1hpbmhhJywgcmVwbGFjZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHJldCA9IFhpbmhhLl9sY19jYXRhbG9nW2NvbnRleHRdW2tleV07CisgICAgfQorICB9CisKKyAgaWYgKCB0eXBlb2Ygc3RyaW5nID09ICdvYmplY3QnICYmIHN0cmluZy5yZXBsYWNlICkKKyAgeworICAgIHJlcGxhY2UgPSBzdHJpbmcucmVwbGFjZTsKKyAgfQorICBpZiAoIHR5cGVvZiByZXBsYWNlICE9ICJ1bmRlZmluZWQiICkKKyAgeworICAgIGZvciAoIGkgaW4gcmVwbGFjZSApCisgICAgeworICAgICAgcmV0ID0gcmV0LnJlcGxhY2UoJyQnK2ksIHJlcGxhY2VbaV0pOworICAgIH0KKyAgfQorCisgIHJldHVybiByZXQ7Cit9OworLyoqIFdhbGtzIHRocm91Z2ggdGhlIGNoaWxkcmVuIG9mIGEgZ2l2ZW4gZWxlbWVudCBhbmQgY2hlY2tzIGlmIGFueSBvZiB0aGUgYXJlIHZpc2libGUgKD0gbm90IGRpc3BsYXk6bm9uZSkKKyAqIEBwYXJhbSB7RG9tTm9kZX0gZWwgCisgKiBAcmV0dXJucyB7Qm9vbGVhbn0gCisgKi8KK1hpbmhhLmhhc0Rpc3BsYXllZENoaWxkcmVuID0gZnVuY3Rpb24oZWwpCit7CisgIHZhciBjaGlsZHJlbiA9IGVsLmNoaWxkTm9kZXM7CisgIGZvciAoIHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrICkKKyAgeworICAgIGlmICggY2hpbGRyZW5baV0udGFnTmFtZSApCisgICAgeworICAgICAgaWYgKCBjaGlsZHJlbltpXS5zdHlsZS5kaXNwbGF5ICE9ICdub25lJyApCisgICAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gZmFsc2U7Cit9OworCisvKiogTG9hZCBhIGphdmFzY3JpcHQgZmlsZSBieSBpbnNlcnRpbmcgaXQgaW4gdGhlIEhFQUQgdGFnIGFuZCBldmVudHVhbGx5IGNhbGwgYSBmdW5jdGlvbiB3aGVuIGxvYWRlZAorICoKKyAqICBOb3RlIHRoYXQgdGhpcyBtZXRob2QgY2Fubm90IGJlIGFic3RyYWN0ZWQgaW50byBicm93c2VyIHNwZWNpZmljIGZpbGVzCisgKiAgYmVjYXVzZSB0aGlzIG1ldGhvZCBMT0FEUyB0aGUgYnJvd3NlciBzcGVjaWZpYyBmaWxlcy4gIEhvcGVmdWxseSBpdCBzaG91bGQgd29yayBmb3IgbW9zdAorICogIGJyb3dzZXJzIGFzIGl0IGlzLgorICoKKyAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgICAgICAgICAgICAgICBTb3VyY2UgdXJsIG9mIHRoZSBmaWxlIHRvIGxvYWQKKyAqIEBwYXJhbSB7T2JqZWN0fSBjYWxsYmFjayBvcHRpb25hbCBDYWxsYmFjayBmdW5jdGlvbiB0byBsYXVuY2ggb25jZSByZWFkeSAKKyAqIEBwYXJhbSB7T2JqZWN0fSBzY29wZSAgICBvcHRpb25hbCBBcHBsaWNhdGlvbiBzY29wZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAcGFyYW0ge09iamVjdH0gYm9udXMgICAgb3B0aW9uYWwgQXJiaXRyYXJ5IG9iamVjdCBzZW5kIGFzIGEgcGFyYW0gdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKi8KK1hpbmhhLl9sb2FkYmFjayA9IGZ1bmN0aW9uKHVybCwgY2FsbGJhY2ssIHNjb3BlLCBib251cykKK3sgIAorICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHVybCkgKQorICB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgdmFyIHQgPSAhWGluaGEuaXNfaWUgPyAib25sb2FkIiA6ICdvbnJlYWR5c3RhdGVjaGFuZ2UnOworICB2YXIgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOworICBzLnR5cGUgPSAidGV4dC9qYXZhc2NyaXB0IjsKKyAgcy5zcmMgPSB1cmw7CisgIHMuaWQgPSB1cmw7CisgIGlmICggY2FsbGJhY2sgKQorICB7CisgICAgc1t0XSA9IGZ1bmN0aW9uKCkKKyAgICB7ICAgICAgCisgICAgICBpZiAoWGluaGEuaXNfaWUgJiYgKCEvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KHdpbmRvdy5ldmVudC5zcmNFbGVtZW50LnJlYWR5U3RhdGUpKSkKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgCisgICAgICBjYWxsYmFjay5jYWxsKHNjb3BlID8gc2NvcGUgOiB0aGlzLCBib251cyk7CisgICAgICBzW3RdID0gbnVsbDsKKyAgICB9OworICB9CisgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQocyk7CisgIHJldHVybiBmYWxzZTsKK307CisKKy8qKiBYaW5oYSdzIG1haW4gbG9hZGluZyBmdW5jdGlvbiAoc2VlIE5ld2JpZUd1aWRlKQorICogQHBhcmFtIHtBcnJheX0gZWRpdG9yX25hbWVzCisgKiBAcGFyYW0ge1hpbmhhLkNvbmZpZ30gZGVmYXVsdF9jb25maWcKKyAqIEBwYXJhbSB7QXJyYXl9IHBsdWdpbl9uYW1lcworICogQHJldHVybnMge09iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmVmZXJlbmNlcyB0byBhbGwgY3JlYXRlZCBlZGl0b3JzIGluZGV4ZWQgYnkgdGhlIElEcyBvZiB0aGUgdGV4dGFyZWFzIAorICovCitYaW5oYS5tYWtlRWRpdG9ycyA9IGZ1bmN0aW9uKGVkaXRvcl9uYW1lcywgZGVmYXVsdF9jb25maWcsIHBsdWdpbl9uYW1lcykKK3sKKyAgaWYgKCFYaW5oYS5pc1N1cHBvcnRlZEJyb3dzZXIpIAorICB7CisgICAgcmV0dXJuOworICB9CisgIAorICBpZiAoIHR5cGVvZiBkZWZhdWx0X2NvbmZpZyA9PSAnZnVuY3Rpb24nICkKKyAgeworICAgIGRlZmF1bHRfY29uZmlnID0gZGVmYXVsdF9jb25maWcoKTsKKyAgfQorCisgIHZhciBlZGl0b3JzID0ge307CisgIHZhciB0ZXh0YXJlYTsKKyAgZm9yICggdmFyIHggPSAwOyB4IDwgZWRpdG9yX25hbWVzLmxlbmd0aDsgeCsrICkKKyAgeworICAgIGlmICggdHlwZW9mIGVkaXRvcl9uYW1lc1t4XSA9PSAnc3RyaW5nJyApIC8vIHRoZSByZWd1bGFyIGNhc2UsIGFuIGlkIG9mIGEgdGV4dGFyZWEKKyAgICB7CisgICAgICB0ZXh0YXJlYSA9IFhpbmhhLmdldEVsZW1lbnRCeUlkKCd0ZXh0YXJlYScsIGVkaXRvcl9uYW1lc1t4XSApOworICAgICAgaWYgKCF0ZXh0YXJlYSkgLy8gdGhlIGlkIG1heSBiZSBzcGVjaWZpZWQgZm9yIGEgdGV4dGFyZWEgdGhhdCBpcyBtYXliZSBvbiBhbm90aGVyIHBhZ2U7IHdlIHNpbXBseSBza2lwIGl0IGFuZCBnbyBvbgorICAgICAgeworICAgICAgICBlZGl0b3JfbmFtZXNbeF0gPSBudWxsOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICB9CisJIC8vIG1ha2UgaXQgcG9zc2libGUgdG8gcGFzcyBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGFuIGlkLCBmb3IgZXhhbXBsZSBmcm9tICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGV4dGFyZWEnKQorICAgIGVsc2UgaWYgKCB0eXBlb2YgZWRpdG9yX25hbWVzW3hdID09ICdvYmplY3QnICYmIGVkaXRvcl9uYW1lc1t4XS50YWdOYW1lICYmIGVkaXRvcl9uYW1lc1t4XS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ3RleHRhcmVhJyApCisgICAgeworICAgICAgdGV4dGFyZWEgPSAgZWRpdG9yX25hbWVzW3hdOworICAgICAgaWYgKCAhdGV4dGFyZWEuaWQgKSAvLyB3ZSdkIGxpa2UgdG8gaGF2ZSB0aGUgdGV4dGFyZWEgaGF2ZSBhbiBpZAorICAgICAgeworICAgICAgICB0ZXh0YXJlYS5pZCA9ICd4aW5oYV9pZF8nICsgeDsKKyAgICAgIH0gCisgICAgfQorICAgIHZhciBlZGl0b3IgPSBuZXcgWGluaGEodGV4dGFyZWEsIFhpbmhhLmNsb25lT2JqZWN0KGRlZmF1bHRfY29uZmlnKSk7CisgICAgZWRpdG9yLnJlZ2lzdGVyUGx1Z2lucyhwbHVnaW5fbmFtZXMpOworICAgIGVkaXRvcnNbdGV4dGFyZWEuaWRdID0gZWRpdG9yOworICB9CisgIHJldHVybiBlZGl0b3JzOworfTsKKy8qKiBBbm90aGVyIG1haW4gbG9hZGluZyBmdW5jdGlvbiAoc2VlIE5ld2JpZUd1aWRlKQorICogQHBhcmFtIHtPYmplY3R9IGVkaXRvcnMgQXMgcmV0dXJuZWQgYnkgWGluaGEubWFrZUVkaXRvcnMoKQorICovCitYaW5oYS5zdGFydEVkaXRvcnMgPSBmdW5jdGlvbihlZGl0b3JzKQoreworICBpZiAoIVhpbmhhLmlzU3VwcG9ydGVkQnJvd3NlcikgCisgIHsKKyAgICByZXR1cm47CisgIH0KKyAgCisgIGZvciAoIHZhciBpIGluIGVkaXRvcnMgKQorICB7CisgICAgaWYgKCBlZGl0b3JzW2ldLmdlbmVyYXRlICkKKyAgICB7CisgICAgICBlZGl0b3JzW2ldLmdlbmVyYXRlKCk7CisgICAgfQorICB9Cit9OworLyoqIFJlZ2lzdGVycyB0aGUgbG9hZGVkIHBsdWdpbnMgd2l0aCB0aGUgZWRpdG9yCisgKiBAcHJpdmF0ZQorICogQHBhcmFtIHtBcnJheX0gcGx1Z2luX25hbWVzCisgKi8KK1hpbmhhLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbnMgPSBmdW5jdGlvbihwbHVnaW5fbmFtZXMpCit7CisgIGlmICghWGluaGEuaXNTdXBwb3J0ZWRCcm93c2VyKSAKKyAgeworICAgIHJldHVybjsKKyAgfQorICAKKyAgaWYgKCBwbHVnaW5fbmFtZXMgKQorICB7CisgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgcGx1Z2luX25hbWVzLmxlbmd0aDsgaSsrICkKKyAgICB7CisgICAgICB0aGlzLnNldExvYWRpbmdNZXNzYWdlKFhpbmhhLl9sYygnUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4nLCAnWGluaGEnLCB7J3BsdWdpbic6IHBsdWdpbl9uYW1lc1tpXX0pKTsKKyAgICAgIHRoaXMucmVnaXN0ZXJQbHVnaW4ocGx1Z2luX25hbWVzW2ldKTsKKyAgICB9CisgIH0KK307CisKKy8qKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGJhc2U2NF9lbmNvZGUgc29tZSBhcmJpdHJhcnkgZGF0YSwgdXNlcyB0aGUgYnVpbHRpbiBidG9hKCkgaWYgaXQgZXhpc3RzIChNb3opIAorKiAgQHBhcmFtIHtTdHJpbmd9IGlucHV0CisqICBAcmV0dXJucyB7U3RyaW5nfQorKi8KK1hpbmhhLmJhc2U2NF9lbmNvZGUgPSBmdW5jdGlvbihpbnB1dCkKK3sKKyAgdmFyIGtleVN0ciA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7CisgIHZhciBvdXRwdXQgPSAiIjsKKyAgdmFyIGNocjEsIGNocjIsIGNocjM7CisgIHZhciBlbmMxLCBlbmMyLCBlbmMzLCBlbmM0OworICB2YXIgaSA9IDA7CisKKyAgZG8KKyAgeworICAgIGNocjEgPSBpbnB1dC5jaGFyQ29kZUF0KGkrKyk7CisgICAgY2hyMiA9IGlucHV0LmNoYXJDb2RlQXQoaSsrKTsKKyAgICBjaHIzID0gaW5wdXQuY2hhckNvZGVBdChpKyspOworCisgICAgZW5jMSA9IGNocjEgPj4gMjsKKyAgICBlbmMyID0gKChjaHIxICYgMykgPDwgNCkgfCAoY2hyMiA+PiA0KTsKKyAgICBlbmMzID0gKChjaHIyICYgMTUpIDw8IDIpIHwgKGNocjMgPj4gNik7CisgICAgZW5jNCA9IGNocjMgJiA2MzsKKworICAgIGlmICggaXNOYU4oY2hyMikgKQorICAgIHsKKyAgICAgIGVuYzMgPSBlbmM0ID0gNjQ7CisgICAgfQorICAgIGVsc2UgaWYgKCBpc05hTihjaHIzKSApCisgICAgeworICAgICAgZW5jNCA9IDY0OworICAgIH0KKworICAgIG91dHB1dCA9IG91dHB1dCArIGtleVN0ci5jaGFyQXQoZW5jMSkgKyBrZXlTdHIuY2hhckF0KGVuYzIpICsga2V5U3RyLmNoYXJBdChlbmMzKSArIGtleVN0ci5jaGFyQXQoZW5jNCk7CisgIH0gd2hpbGUgKCBpIDwgaW5wdXQubGVuZ3RoICk7CisKKyAgcmV0dXJuIG91dHB1dDsKK307CisKKy8qKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGJhc2U2NF9kZWNvZGUgc29tZSBhcmJpdHJhcnkgZGF0YSwgdXNlcyB0aGUgYnVpbHRpbiBhdG9iKCkgaWYgaXQgZXhpc3RzIChNb3opCisgKiAgQHBhcmFtIHtTdHJpbmd9IGlucHV0CisgKiAgQHJldHVybnMge1N0cmluZ30KKyAqLworWGluaGEuYmFzZTY0X2RlY29kZSA9IGZ1bmN0aW9uKGlucHV0KQoreworICB2YXIga2V5U3RyID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89IjsKKyAgdmFyIG91dHB1dCA9ICIiOworICB2YXIgY2hyMSwgY2hyMiwgY2hyMzsKKyAgdmFyIGVuYzEsIGVuYzIsIGVuYzMsIGVuYzQ7CisgIHZhciBpID0gMDsKKworICAvLyByZW1vdmUgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IEEtWiwgYS16LCAwLTksICssIC8sIG9yID0KKyAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKC9bXkEtWmEtejAtOVwrXC9cPV0vZywgIiIpOworCisgIGRvCisgIHsKKyAgICBlbmMxID0ga2V5U3RyLmluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpOworICAgIGVuYzIgPSBrZXlTdHIuaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7CisgICAgZW5jMyA9IGtleVN0ci5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTsKKyAgICBlbmM0ID0ga2V5U3RyLmluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpOworCisgICAgY2hyMSA9IChlbmMxIDw8IDIpIHwgKGVuYzIgPj4gNCk7CisgICAgY2hyMiA9ICgoZW5jMiAmIDE1KSA8PCA0KSB8IChlbmMzID4+IDIpOworICAgIGNocjMgPSAoKGVuYzMgJiAzKSA8PCA2KSB8IGVuYzQ7CisKKyAgICBvdXRwdXQgPSBvdXRwdXQgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjEpOworCisgICAgaWYgKCBlbmMzICE9IDY0ICkKKyAgICB7CisgICAgICBvdXRwdXQgPSBvdXRwdXQgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjIpOworICAgIH0KKyAgICBpZiAoIGVuYzQgIT0gNjQgKQorICAgIHsKKyAgICAgIG91dHB1dCA9IG91dHB1dCArIFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMyk7CisgICAgfQorICB9IHdoaWxlICggaSA8IGlucHV0Lmxlbmd0aCApOworCisgIHJldHVybiBvdXRwdXQ7Cit9OworLyoqIFJlbW92ZXMgYSBub2RlIGZyb20gdGhlIERPTQorICogIEBwYXJhbSB7RG9tTm9kZX0gZWwgVGhlIGVsZW1lbnQgdG8gYmUgcmVtb3ZlZAorICogIEByZXR1cm5zIHtEb21Ob2RlfSBUaGUgcmVtb3ZlZCBlbGVtZW50CisgKi8KK1hpbmhhLnJlbW92ZUZyb21QYXJlbnQgPSBmdW5jdGlvbihlbCkKK3sKKyAgaWYgKCAhZWwucGFyZW50Tm9kZSApCisgIHsKKyAgICByZXR1cm47CisgIH0KKyAgdmFyIHBOID0gZWwucGFyZW50Tm9kZTsKKyAgcmV0dXJuIHBOLnJlbW92ZUNoaWxkKGVsKTsKK307CisvKiogQ2hlY2tzIGlmIHNvbWUgZWxlbWVudCBoYXMgYSBwYXJlbnQgbm9kZQorICogIEBwYXJhbSB7RG9tTm9kZX0gZWwgCisgKiAgQHJldHVybnMge0Jvb2xlYW59CisgKi8KK1hpbmhhLmhhc1BhcmVudE5vZGUgPSBmdW5jdGlvbihlbCkKK3sKKyAgaWYgKCBlbC5wYXJlbnROb2RlICkKKyAgeworICAgIC8vIFdoZW4geW91IHJlbW92ZSBhbiBlbGVtZW50IGZyb20gdGhlIHBhcmVudCBpbiBJRSBpdCBtYWtlcyB0aGUgcGFyZW50CisgICAgLy8gb2YgdGhlIGVsZW1lbnQgYSBkb2N1bWVudCBmcmFnbWVudC4gIE1veiBkb2Vzbid0LgorICAgIGlmICggZWwucGFyZW50Tm9kZS5ub2RlVHlwZSA9PSAxMSApCisgICAgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIHJldHVybiBmYWxzZTsKK307CisvKiogRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIGVsZW1lbnQgaGFzIGEgZ2l2ZW4gYXR0cmlidXRlLiAgSUU8OCBkb2Vzbid0IHN1cHBvcnQgaXQgbmF0aXZseSAqLworWGluaGEuaGFzQXR0cmlidXRlID0gZnVuY3Rpb24oZWwsYXQpCit7CisgIGlmKHR5cGVvZiBlbC5oYXNBdHRyaWJ1dGUgPT0gJ3VuZGVmaW5lZCcpCisgIHsKKyAgICB2YXIgbm9kZSA9IGVsLmdldEF0dHJpYnV0ZU5vZGUoYXQpOworICAgIHJldHVybiAhIShub2RlICYmIChub2RlLnNwZWNpZmllZCB8fCBub2RlLm5vZGVWYWx1ZSkpOworICB9CisgIAorICByZXR1cm4gZWwuaGFzQXR0cmlidXRlKGF0KTsKK30KKworLyoqIERldGVjdCB0aGUgc2l6ZSBvZiB2aXNpYmxlIGFyZWEKKyAqICBAcGFyYW0ge1dpbmRvd30gc2NvcGUgb3B0aW9uYWwgV2hlbiBjYWxsaW5nIGZyb20gYSBwb3B1cCB3aW5kb3csIHBhc3MgaXRzIHdpbmRvdyBvYmplY3QgdG8gZ2V0IHRoZSB2YWx1ZXMgb2YgdGhlIHBvcHVwCisgKiAgQHJldHVybnMge09iamVjdH0gT2JqZWN0IHdpdGggSW50ZWdlciBwcm9wZXJ0aWVzIHggYW5kIHkKKyAqLworWGluaGEudmlld3BvcnRTaXplID0gZnVuY3Rpb24oc2NvcGUpCit7CisgIHNjb3BlID0gKHNjb3BlKSA/IHNjb3BlIDogd2luZG93OworICB2YXIgeCx5OworICBpZiAoc2NvcGUuaW5uZXJIZWlnaHQpIC8vIGFsbCBleGNlcHQgRXhwbG9yZXIKKyAgeworICAgIHggPSBzY29wZS5pbm5lcldpZHRoOworICAgIHkgPSBzY29wZS5pbm5lckhlaWdodDsKKyAgfQorICBlbHNlIGlmIChzY29wZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgc2NvcGUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkKKyAgLy8gRXhwbG9yZXIgNiBTdHJpY3QgTW9kZQorICB7CisgICAgeCA9IHNjb3BlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDsKKyAgICB5ID0gc2NvcGUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDsKKyAgfQorICBlbHNlIGlmIChzY29wZS5kb2N1bWVudC5ib2R5KSAvLyBvdGhlciBFeHBsb3JlcnMKKyAgeworICAgIHggPSBzY29wZS5kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoOworICAgIHkgPSBzY29wZS5kb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDsKKyAgfQorICByZXR1cm4geyd4Jzp4LCd5Jzp5fTsKK307CisvKiogRGV0ZWN0IHRoZSBzaXplIG9mIHRoZSB3aG9sZSBkb2N1bWVudAorICogIEBwYXJhbSB7V2luZG93fSBzY29wZSBvcHRpb25hbCBXaGVuIGNhbGxpbmcgZnJvbSBhIHBvcHVwIHdpbmRvdywgcGFzcyBpdHMgd2luZG93IG9iamVjdCB0byBnZXQgdGhlIHZhbHVlcyBvZiB0aGUgcG9wdXAKKyAqICBAcmV0dXJucyB7T2JqZWN0fSBPYmplY3Qgd2l0aCBJbnRlZ2VyIHByb3BlcnRpZXMgeCBhbmQgeQorICovCitYaW5oYS5wYWdlU2l6ZSA9IGZ1bmN0aW9uKHNjb3BlKQoreworICBzY29wZSA9IChzY29wZSkgPyBzY29wZSA6IHdpbmRvdzsKKyAgdmFyIHgseTsKKyAKKyAgdmFyIHRlc3QxID0gc2NvcGUuZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ7IC8vSUUgUXVpcmtzCisgIHZhciB0ZXN0MiA9IHNjb3BlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQ7IC8vIElFIFN0YW5kYXJkICsgTW96IEhlcmUgcXVpcmtzbW9kZS5vcmcgZXJycyEgCisKKyAgaWYgKHRlc3QxID4gdGVzdDIpIAorICB7CisgICAgeCA9IHNjb3BlLmRvY3VtZW50LmJvZHkuc2Nyb2xsV2lkdGg7CisgICAgeSA9IHNjb3BlLmRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0OworICB9CisgIGVsc2UKKyAgeworICAgIHggPSBzY29wZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsV2lkdGg7CisgICAgeSA9IHNjb3BlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQ7CisgIH0gIAorICByZXR1cm4geyd4Jzp4LCd5Jzp5fTsKK307CisvKiogRGV0ZWN0IHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbgorICogIEBwYXJhbSB7V2luZG93fSBzY29wZSBvcHRpb25hbCBXaGVuIGNhbGxpbmcgZnJvbSBhIHBvcHVwIHdpbmRvdywgcGFzcyBpdHMgd2luZG93IG9iamVjdCB0byBnZXQgdGhlIHZhbHVlcyBvZiB0aGUgcG9wdXAKKyAqICBAcmV0dXJucyB7T2JqZWN0fSBPYmplY3Qgd2l0aCBJbnRlZ2VyIHByb3BlcnRpZXMgeCBhbmQgeQorICovCitYaW5oYS5wcm90b3R5cGUuc2Nyb2xsUG9zID0gZnVuY3Rpb24oc2NvcGUpCit7CisgIHNjb3BlID0gKHNjb3BlKSA/IHNjb3BlIDogd2luZG93OworICB2YXIgeCx5OworICBpZiAodHlwZW9mIHNjb3BlLnBhZ2VZT2Zmc2V0ICE9ICd1bmRlZmluZWQnKSAvLyBhbGwgZXhjZXB0IEV4cGxvcmVyCisgIHsKKyAgICB4ID0gc2NvcGUucGFnZVhPZmZzZXQ7CisgICAgeSA9IHNjb3BlLnBhZ2VZT2Zmc2V0OworICB9CisgIGVsc2UgaWYgKHNjb3BlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiB0eXBlb2YgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCAhPSAndW5kZWZpbmVkJykKKyAgICAvLyBFeHBsb3JlciA2IFN0cmljdAorICB7CisgICAgeCA9IHNjb3BlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0OworICAgIHkgPSBzY29wZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wOworICB9CisgIGVsc2UgaWYgKHNjb3BlLmRvY3VtZW50LmJvZHkpIC8vIGFsbCBvdGhlciBFeHBsb3JlcnMKKyAgeworICAgIHggPSBzY29wZS5kb2N1bWVudC5ib2R5LnNjcm9sbExlZnQ7CisgICAgeSA9IHNjb3BlLmRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOworICB9CisgIHJldHVybiB7J3gnOngsJ3knOnl9OworfTsKKworLyoqIENhbGN1bGF0ZSB0aGUgdG9wIGFuZCBsZWZ0IHBpeGVsIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgaW4gdGhlIERPTS4KKyAqICBAcGFyYW0gIHtEb21Ob2RlfSBlbGVtZW50IEhUTUwgRWxlbWVudAorICogIEByZXR1cm5zIHtPYmplY3R9IE9iamVjdCB3aXRoIEludGVnZXIgcHJvcGVydGllcyB0b3AgYW5kIGxlZnQKKyAqLworIAorWGluaGEuZ2V0RWxlbWVudFRvcExlZnQgPSBmdW5jdGlvbihlbGVtZW50KSAKK3sKKyAgdmFyIGN1cmxlZnQgPSAwOworICB2YXIgY3VydG9wID0gIDA7CisgIGlmIChlbGVtZW50Lm9mZnNldFBhcmVudCkgCisgIHsKKyAgICBjdXJsZWZ0ID0gZWxlbWVudC5vZmZzZXRMZWZ0OworICAgIGN1cnRvcCA9IGVsZW1lbnQub2Zmc2V0VG9wOworICAgIHdoaWxlIChlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQpIAorICAgIHsKKyAgICAgIGN1cmxlZnQgKz0gZWxlbWVudC5vZmZzZXRMZWZ0OworICAgICAgY3VydG9wICs9IGVsZW1lbnQub2Zmc2V0VG9wOworICAgIH0KKyAgfQorICByZXR1cm4geyB0b3A6Y3VydG9wLCBsZWZ0OmN1cmxlZnQgfTsKK307CisvKiogRmluZCBsZWZ0IHBpeGVsIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgaW4gdGhlIERPTS4KKyAqICBAcGFyYW0gIHtEb21Ob2RlfSBlbGVtZW50IEhUTUwgRWxlbWVudAorICogIEByZXR1cm5zIHtJbnRlZ2VyfSAKKyAqLworWGluaGEuZmluZFBvc1ggPSBmdW5jdGlvbihvYmopCit7CisgIHZhciBjdXJsZWZ0ID0gMDsKKyAgaWYgKCBvYmoub2Zmc2V0UGFyZW50ICkKKyAgeworICAgIHJldHVybiBYaW5oYS5nZXRFbGVtZW50VG9wTGVmdChvYmopLmxlZnQ7CisgIH0KKyAgZWxzZSBpZiAoIG9iai54ICkKKyAgeworICAgIGN1cmxlZnQgKz0gb2JqLng7CisgIH0KKyAgcmV0dXJuIGN1cmxlZnQ7Cit9OworLyoqIEZpbmQgdG9wIHBpeGVsIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgaW4gdGhlIERPTS4KKyAqICBAcGFyYW0gIHtEb21Ob2RlfSBlbGVtZW50IEhUTUwgRWxlbWVudAorICogIEByZXR1cm5zIHtJbnRlZ2VyfSAKKyAqLworWGluaGEuZmluZFBvc1kgPSBmdW5jdGlvbihvYmopCit7CisgIHZhciBjdXJ0b3AgPSAwOworICBpZiAoIG9iai5vZmZzZXRQYXJlbnQgKQorICB7CisgICAgcmV0dXJuIFhpbmhhLmdldEVsZW1lbnRUb3BMZWZ0KG9iaikudG9wOyAgICAKKyAgfQorICBlbHNlIGlmICggb2JqLnkgKQorICB7CisgICAgY3VydG9wICs9IG9iai55OworICB9CisgIHJldHVybiBjdXJ0b3A7Cit9OworCitYaW5oYS5jcmVhdGVMb2FkaW5nTWVzc2FnZXMgPSBmdW5jdGlvbih4aW5oYV9lZGl0b3JzKQoreworICBpZiAoIFhpbmhhLmxvYWRpbmdNZXNzYWdlcyB8fCAhWGluaGEuaXNTdXBwb3J0ZWRCcm93c2VyICkgCisgIHsKKyAgICByZXR1cm47CisgIH0KKyAgWGluaGEubG9hZGluZ01lc3NhZ2VzID0gW107CisgIAorICBmb3IgKHZhciBpPTA7aTx4aW5oYV9lZGl0b3JzLmxlbmd0aDtpKyspCisgIHsKKyAgICB2YXIgZSA9IHR5cGVvZiB4aW5oYV9lZGl0b3JzW2ldID09ICdzdHJpbmcnID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoeGluaGFfZWRpdG9yc1tpXSkgOiB4aW5oYV9lZGl0b3JzW2ldOworICAgIGlmICghZSkKKyAgICB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgCisgICAgWGluaGEubG9hZGluZ01lc3NhZ2VzLnB1c2goWGluaGEuY3JlYXRlTG9hZGluZ01lc3NhZ2UoZSkpOworICB9Cit9OworCitYaW5oYS5jcmVhdGVMb2FkaW5nTWVzc2FnZSA9IGZ1bmN0aW9uKHRleHRhcmVhLHRleHQpCit7IAorICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkaW5nXyIgKyB0ZXh0YXJlYS5pZCkgfHwgIVhpbmhhLmlzU3VwcG9ydGVkQnJvd3NlcikKKyAgeworICAgIHJldHVybjsKKyAgfQorICAvLyBDcmVhdGUgYW5kIHNob3cgdGhlIG1haW4gbG9hZGluZyBtZXNzYWdlIGFuZCB0aGUgc3ViIGxvYWRpbmcgbWVzc2FnZSBmb3IgZGV0YWlscyBvZiBsb2FkaW5nIGFjdGlvbnMKKyAgLy8gZ2xvYmFsIGVsZW1lbnQKKyAgdmFyIGxvYWRpbmdfbWVzc2FnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICBsb2FkaW5nX21lc3NhZ2UuaWQgPSAibG9hZGluZ18iICsgdGV4dGFyZWEuaWQ7CisgIGxvYWRpbmdfbWVzc2FnZS5jbGFzc05hbWUgPSAibG9hZGluZyI7CisgIAorICBsb2FkaW5nX21lc3NhZ2Uuc3R5bGUubGVmdCA9IChYaW5oYS5maW5kUG9zWCh0ZXh0YXJlYSkgKyB0ZXh0YXJlYS5vZmZzZXRXaWR0aCAvIDIpIC0gMTA2ICsgICdweCc7CisgIGxvYWRpbmdfbWVzc2FnZS5zdHlsZS50b3AgPSAoWGluaGEuZmluZFBvc1kodGV4dGFyZWEpICsgdGV4dGFyZWEub2Zmc2V0SGVpZ2h0IC8gMikgLSA1MCArICAncHgnOworICAvLyBtYWluIHN0YXRpYyBtZXNzYWdlCisgIHZhciBsb2FkaW5nX21haW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgbG9hZGluZ19tYWluLmNsYXNzTmFtZSA9ICJsb2FkaW5nX21haW4iOworICBsb2FkaW5nX21haW4uaWQgPSAibG9hZGluZ19tYWluXyIgKyB0ZXh0YXJlYS5pZDsKKyAgbG9hZGluZ19tYWluLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFhpbmhhLl9sYygiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIikpKTsKKyAgLy8gc3ViIGR5bmFtaWMgbWVzc2FnZQorICB2YXIgbG9hZGluZ19zdWIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgbG9hZGluZ19zdWIuY2xhc3NOYW1lID0gImxvYWRpbmdfc3ViIjsKKyAgbG9hZGluZ19zdWIuaWQgPSAibG9hZGluZ19zdWJfIiArIHRleHRhcmVhLmlkOworICB0ZXh0ID0gdGV4dCA/IHRleHQgOiBYaW5oYS5fbGMoIkxvYWRpbmcgQ29yZSIpOworICBsb2FkaW5nX3N1Yi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7CisgIGxvYWRpbmdfbWVzc2FnZS5hcHBlbmRDaGlsZChsb2FkaW5nX21haW4pOworICBsb2FkaW5nX21lc3NhZ2UuYXBwZW5kQ2hpbGQobG9hZGluZ19zdWIpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxvYWRpbmdfbWVzc2FnZSk7CisgIAorICBYaW5oYS5mcmVlTGF0ZXIobG9hZGluZ19tZXNzYWdlKTsKKyAgWGluaGEuZnJlZUxhdGVyKGxvYWRpbmdfbWFpbik7CisgIFhpbmhhLmZyZWVMYXRlcihsb2FkaW5nX3N1Yik7CisgIAorICByZXR1cm4gbG9hZGluZ19zdWI7Cit9OworCitYaW5oYS5wcm90b3R5cGUuc2V0TG9hZGluZ01lc3NhZ2UgPSBmdW5jdGlvbihzdWJNZXNzYWdlLCBtYWluTWVzc2FnZSkKK3sKKyAgaWYgKCAhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmdfc3ViXyIgKyB0aGlzLl90ZXh0QXJlYS5pZCkgKQorICB7CisgICAgcmV0dXJuOworICB9CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkaW5nX21haW5fIiArIHRoaXMuX3RleHRBcmVhLmlkKS5pbm5lckhUTUwgPSBtYWluTWVzc2FnZSA/IG1haW5NZXNzYWdlIDogWGluaGEuX2xjKCJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiKTsKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmdfc3ViXyIgKyB0aGlzLl90ZXh0QXJlYS5pZCkuaW5uZXJIVE1MID0gc3ViTWVzc2FnZTsKK307CisKK1hpbmhhLnNldExvYWRpbmdNZXNzYWdlID0gZnVuY3Rpb24oc3RyaW5nKQoreworICBpZiAoIVhpbmhhLmxvYWRpbmdNZXNzYWdlcykgCisgIHsKKyAgICByZXR1cm47CisgIH0KKyAgZm9yICggdmFyIGkgPSAwOyBpIDwgWGluaGEubG9hZGluZ01lc3NhZ2VzLmxlbmd0aDsgaSsrICkKKyAgeworICAgIFhpbmhhLmxvYWRpbmdNZXNzYWdlc1tpXS5pbm5lckhUTUwgPSBzdHJpbmc7CisgIH0KK307CisKK1hpbmhhLnByb3RvdHlwZS5yZW1vdmVMb2FkaW5nTWVzc2FnZSA9IGZ1bmN0aW9uKCkKK3sKKyAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkaW5nXyIgKyB0aGlzLl90ZXh0QXJlYS5pZCkgKQorICB7CisgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkaW5nXyIgKyB0aGlzLl90ZXh0QXJlYS5pZCkpOworICB9Cit9OworCitYaW5oYS5yZW1vdmVMb2FkaW5nTWVzc2FnZXMgPSBmdW5jdGlvbih4aW5oYV9lZGl0b3JzKQoreworICBmb3IgKHZhciBpPTA7aTwgeGluaGFfZWRpdG9ycy5sZW5ndGg7aSsrKQorICB7CisgICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoeGluaGFfZWRpdG9yc1tpXSkpIAorICAgICB7CisgICAgICAgY29udGludWU7CisgICAgIH0KKyAgICAgdmFyIG1haW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZGluZ18iICsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoeGluaGFfZWRpdG9yc1tpXSkuaWQpOworICAgICBtYWluLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobWFpbik7CisgIH0KKyAgWGluaGEubG9hZGluZ01lc3NhZ2VzID0gbnVsbDsKK307CisKKy8qKiBMaXN0IG9mIG9iamVjdHMgdGhhdCBoYXZlIHRvIGJlIHRyYXRlZCBvbiBwYWdlIHVubG9hZCBpbiBvcmRlciB0byB3b3JrIGFyb3VuZCB0aGUgYnJva2VuIAorICogR2FyYmFnZSBDb2xsZWN0b3IgaW4gSUUKKyAqIEBwcml2YXRlCisgKiBAc2VlIFhpbmhhI2ZyZWVMYXRlcgorICogQHNlZSBYaW5oYSNmcmVlCisgKiBAc2VlIFhpbmhhI2NvbGxlY3RHYXJiYWdlRm9ySUUKKyAqLworWGluaGEudG9GcmVlID0gW107CisvKiogQWRkcyBvYmplY3RzIHRvIFhpbmhhLnRvRnJlZSAKKyAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBmcmVlIG1lbW9yeQorICogQHBhcmFtIChTdHJpbmd9IHByb3Agb3B0aW9uYWwgIFRoZSBwcm9wZXJ0eSB0byByZWxlYXNlCisgKiBAcHJpdmF0ZQorICogQHNlZSBYaW5oYSN0b0ZyZWUKKyAqIEBzZWUgWGluaGEjZnJlZQorICogQHNlZSBYaW5oYSNjb2xsZWN0R2FyYmFnZUZvcklFCisgKi8KK1hpbmhhLmZyZWVMYXRlciA9IGZ1bmN0aW9uKG9iaixwcm9wKQoreworICBYaW5oYS50b0ZyZWUucHVzaCh7bzpvYmoscDpwcm9wfSk7Cit9OworCisvKiogUmVsZWFzZSBtZW1vcnkgcHJvcGVydGllcyBmcm9tIG9iamVjdAorICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGZyZWUgbWVtb3J5CisgKiBAcGFyYW0gKFN0cmluZ30gcHJvcCBvcHRpb25hbCBUaGUgcHJvcGVydHkgdG8gcmVsZWFzZQorICogQHByaXZhdGUKKyAqIEBzZWUgWGluaGEjY29sbGVjdEdhcmJhZ2VGb3JJRQorICogQHNlZSBYaW5oYSNmcmVlCisgKi8KK1hpbmhhLmZyZWUgPSBmdW5jdGlvbihvYmosIHByb3ApCit7CisgIGlmICggb2JqICYmICFwcm9wICkKKyAgeworICAgIGZvciAoIHZhciBwIGluIG9iaiApCisgICAgeworICAgICAgWGluaGEuZnJlZShvYmosIHApOworICAgIH0KKyAgfQorICBlbHNlIGlmICggb2JqICkKKyAgeworICAgIGlmICggcHJvcC5pbmRleE9mKCdzcmMnKSA9PSAtMSApIC8vIGlmIHNyYyAoYWxzbyBsb3dzcmMsIGFuZCBtYXliZSBkeW5zcmMgKSBpcyBzZXQgdG8gbnVsbCwgYSBmaWxlIG5hbWVkICJudWxsIiBpcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc2VydmVyIChzZWUgIzEwMDEpCisgICAgeworICAgICAgdHJ5IHsgb2JqW3Byb3BdID0gbnVsbDsgfSBjYXRjaCh4KSB7fQorICAgIH0KKyAgfQorfTsKKworLyoqIElFJ3MgR2FyYmFnZSBDb2xsZWN0b3IgaXMgYnJva2VuIHZlcnkgYmFkbHkuICBXZSB3aWxsIGRvIG91ciBiZXN0IHRvIAorICogICBkbyBpdCdzIGpvYiBmb3IgaXQsIGJ1dCB3ZSBjYW4ndCBiZSBwZXJmZWN0LiBUYWtlcyBhbGwgb2JqZWN0cyBmcm9tIFhpbmhhLmZyZWUgYW5kIHJlbGVhc2VzIHNldHMgdGhlIG51bGwKKyAqIEBwcml2YXRlCisgKiBAc2VlIFhpbmhhI3RvRnJlZQorICogQHNlZSBYaW5oYSNmcmVlCisgKi8KKworWGluaGEuY29sbGVjdEdhcmJhZ2VGb3JJRSA9IGZ1bmN0aW9uKCkgCit7ICAKKyAgWGluaGEuZmx1c2hFdmVudHMoKTsgICAKKyAgZm9yICggdmFyIHggPSAwOyB4IDwgWGluaGEudG9GcmVlLmxlbmd0aDsgeCsrICkKKyAgeworICAgIFhpbmhhLmZyZWUoWGluaGEudG9GcmVlW3hdLm8sIFhpbmhhLnRvRnJlZVt4XS5wKTsKKyAgICBYaW5oYS50b0ZyZWVbeF0ubyA9IG51bGw7CisgIH0KK307CisKKworLy8gVGhlIGZvbGxvd2luZyBtZXRob2RzIG1heSBiZSBvdmVyLXJpZGRlbiBvciBleHRlbmRlZCBieSB0aGUgYnJvd3NlciBzcGVjaWZpYworLy8gamF2YXNjcmlwdCBmaWxlcy4KKworCisvKiogSW5zZXJ0IGEgbm9kZSBhdCB0aGUgY3VycmVudCBzZWxlY3Rpb24gcG9pbnQuIAorICogQHBhcmFtIHtEb21Ob2RlfSB0b0JlSW5zZXJ0ZWQKKyAqLworCitYaW5oYS5wcm90b3R5cGUuaW5zZXJ0Tm9kZUF0U2VsZWN0aW9uID0gZnVuY3Rpb24odG9CZUluc2VydGVkKSB7IFhpbmhhLm5vdEltcGxlbWVudGVkKCJpbnNlcnROb2RlQXRTZWxlY3Rpb24iKTsgfTsKKworLyoqIEdldCB0aGUgcGFyZW50IGVsZW1lbnQgb2YgdGhlIHN1cHBsaWVkIG9yIGN1cnJlbnQgc2VsZWN0aW9uLiAKKyAqICBAcGFyYW0ge1NlbGVjdGlvbn0gc2VsIG9wdGlvbmFsIHNlbGVjdGlvbiBhcyByZXR1cm5lZCBieSBnZXRTZWxlY3Rpb24KKyAqICBAcmV0dXJucyB7RG9tTm9kZX0KKyAqLworICAKK1hpbmhhLnByb3RvdHlwZS5nZXRQYXJlbnRFbGVtZW50ICAgICAgPSBmdW5jdGlvbihzZWwpIHsgWGluaGEubm90SW1wbGVtZW50ZWQoImdldFBhcmVudEVsZW1lbnQiKTsgfTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBzZWxlY3RlZCBlbGVtZW50LCBpZiBhbnkuICBUaGF0IGlzLAorICogdGhlIGVsZW1lbnQgdGhhdCB5b3UgaGF2ZSBsYXN0IHNlbGVjdGVkIGluIHRoZSAicGF0aCIKKyAqIGF0IHRoZSBib3R0b20gb2YgdGhlIGVkaXRvciwgb3IgYSAiY29udHJvbCIgKGVnIGltYWdlKQorICoKKyAqIEByZXR1cm5zIHtEb21Ob2RlfG51bGx9CisgKi8KKyAKK1hpbmhhLnByb3RvdHlwZS5hY3RpdmVFbGVtZW50ICAgICAgICAgPSBmdW5jdGlvbihzZWwpIHsgWGluaGEubm90SW1wbGVtZW50ZWQoImFjdGl2ZUVsZW1lbnQiKTsgfTsKKworLyoqIAorICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gc2VsZWN0aW9uIGlzIGVtcHR5IChjb2xsYXBzZWQpLgorICogQHBhcmFtIHtTZWxlY3Rpb259IHNlbCBTZWxlY3Rpb24gb2JqZWN0IGFzIHJldHVybmVkIGJ5IGdldFNlbGVjdGlvbgorICogQHJldHVybnMge0Jvb2xlYW59CisgKi8KKyAKK1hpbmhhLnByb3RvdHlwZS5zZWxlY3Rpb25FbXB0eSAgICAgICAgPSBmdW5jdGlvbihzZWwpIHsgWGluaGEubm90SW1wbGVtZW50ZWQoInNlbGVjdGlvbkVtcHR5Iik7IH07CisvKiogCisgKiBSZXR1cm5zIGEgcmFuZ2Ugb2JqZWN0IHRvIGJlIHN0b3JlZCAKKyAqIGFuZCBsYXRlciByZXN0b3JlZCB3aXRoIFhpbmhhLnByb3RvdHlwZS5yZXN0b3JlU2VsZWN0aW9uKCkKKyAqIEByZXR1cm5zIHtSYW5nZX0KKyAqLworCitYaW5oYS5wcm90b3R5cGUuc2F2ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkgeyBYaW5oYS5ub3RJbXBsZW1lbnRlZCgic2F2ZVNlbGVjdGlvbiIpOyB9OworCisvKiogUmVzdG9yZXMgYSBzZWxlY3Rpb24gcHJldmlvdXNseSBzdG9yZWQKKyAqIEBwYXJhbSB7UmFuZ2V9IHNhdmVkU2VsZWN0aW9uIFJhbmdlIG9iamVjdCBhcyByZXR1cm5lZCBieSBYaW5oYS5wcm90b3R5cGUucmVzdG9yZVNlbGVjdGlvbigpCisgKi8KK1hpbmhhLnByb3RvdHlwZS5yZXN0b3JlU2VsZWN0aW9uID0gZnVuY3Rpb24oc2F2ZWRTZWxlY3Rpb24pICB7IFhpbmhhLm5vdEltcGxlbWVudGVkKCJyZXN0b3JlU2VsZWN0aW9uIik7IH07CisKKy8qKgorICogU2VsZWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIG5vZGUuICBJZiB0aGUgbm9kZSBpcyBhICJjb250cm9sIiB0eXBlIGVsZW1lbnQsIChpbWFnZSwgZm9ybSBpbnB1dCwgdGFibGUpCisgKiB0aGUgbm9kZSBpdHNlbGYgaXMgc2VsZWN0ZWQgZm9yIG1hbmlwdWxhdGlvbi4KKyAqCisgKiBAcGFyYW0ge0RvbU5vZGV9IG5vZGUgCisgKiBAcGFyYW0ge0ludGVnZXJ9IHBvcyAgU2V0IHRvIGEgbnVtZXJpYyBwb3NpdGlvbiBpbnNpZGUgdGhlIG5vZGUgdG8gY29sbGFwc2UgdGhlIGN1cnNvciBoZXJlIGlmIHBvc3NpYmxlLiAKKyAqLworWGluaGEucHJvdG90eXBlLnNlbGVjdE5vZGVDb250ZW50cyAgICA9IGZ1bmN0aW9uKG5vZGUscG9zKSB7IFhpbmhhLm5vdEltcGxlbWVudGVkKCJzZWxlY3ROb2RlQ29udGVudHMiKTsgfTsKKworLyoqIEluc2VydCBIVE1MIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLCBkZWxldGluZyB0aGUgc2VsZWN0aW9uIGlmIGFueS4gCisgKiAgCisgKiAgQHBhcmFtIHtTdHJpbmd9IGh0bWwKKyAqLworIAorWGluaGEucHJvdG90eXBlLmluc2VydEhUTUwgICAgICAgICAgICA9IGZ1bmN0aW9uKGh0bWwpIHsgWGluaGEubm90SW1wbGVtZW50ZWQoImluc2VydEhUTUwiKTsgfTsKKworLyoqIEdldCB0aGUgSFRNTCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uICBIVE1MIHJldHVybmVkIGhhcyBub3QgYmVlbiBwYXNzZWQgdGhyb3VnaCBvdXR3YXJkSFRNTC4KKyAqCisgKiBAcmV0dXJucyB7U3RyaW5nfQorICovCitYaW5oYS5wcm90b3R5cGUuZ2V0U2VsZWN0ZWRIVE1MICAgICAgID0gZnVuY3Rpb24oKSB7IFhpbmhhLm5vdEltcGxlbWVudGVkKCJnZXRTZWxlY3RlZEhUTUwiKTsgfTsKKworLyoqIEdldCBhIFNlbGVjdGlvbiBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiAgTm90ZSB0aGF0IHNlbGVjdGlvbiBvYmplY3RzIGFyZSBicm93c2VyIHNwZWNpZmljLgorICoKKyAqIEByZXR1cm5zIHtTZWxlY3Rpb259CisgKi8KKyAKK1hpbmhhLnByb3RvdHlwZS5nZXRTZWxlY3Rpb24gICAgICAgICAgPSBmdW5jdGlvbigpIHsgWGluaGEubm90SW1wbGVtZW50ZWQoImdldFNlbGVjdGlvbiIpOyB9OworCisvKiogQ3JlYXRlIGEgUmFuZ2Ugb2JqZWN0IGZyb20gdGhlIGdpdmVuIHNlbGVjdGlvbi4gIE5vdGUgdGhhdCByYW5nZSBvYmplY3RzIGFyZSBicm93c2VyIHNwZWNpZmljLgorICogIEBzZWUgWGluaGEjZ2V0U2VsZWN0aW9uCisgKiAgQHBhcmFtIHtTZWxlY3Rpb259IHNlbCBTZWxlY3Rpb24gb2JqZWN0IAorICogIEByZXR1cm5zIHtSYW5nZX0KKyAqLworWGluaGEucHJvdG90eXBlLmNyZWF0ZVJhbmdlICAgICAgICAgICA9IGZ1bmN0aW9uKHNlbCkgeyBYaW5oYS5ub3RJbXBsZW1lbnRlZCgiY3JlYXRlUmFuZ2UiKTsgfTsKKworLyoqIERpZmZlcmVudCBicm93c2VycyBoYXZlIHN1YnRsZSBkaWZmZXJlbmNlcyBpbiB3aGF0IHRoZXkgY2FsbCBhICJrZXlwcmVzcyIsIHdlIHRyeSBhbmQKKyAqICBzdGFuZGFyZGlzZSB0aGVtIGhlcmUuICBGb3IgZXhhbXBsZSwgRmlyZWZveCBjYWxscyBUYWIgYSBrZXlwcmVzcyAod2l0aCBrZXlDb2RlIDkpCisgKiAgd2hpbGUgV2ViS2l0IGRvZXMgbm90IHJlY29yZCBhIGtleXByZXNzIGZvciB0aGUgVGFiIGtleS4KKyAqIAorICogIFdlYmtpdCBkb2VzIHJlY29yZCBhIGtleWRvd24gZm9yIHRhYiwgYnV0IHR5cGljYWxseSBub3QgYSBrZXl1cCBhcyBpdCdzIGNhdXNlZCBhIAorICogIGRlZm9jdXMgYnkgdGhlbiwgYW5kIHRoZXJlIGlzIG5vIGtleXByZXNzLgorICogIAorICogIEZvciB0aGUgc2FrZSBvZiBYaW5oYSwgd2Ugd2lsbCBkZWZpbmUga2V5UHJlc3Mgc29tZXRoaW5nIGxpa2UuLi4KKyAqIAorICogICAiQWRkaW5nIENoYXJhY3RlcnMiCisgKiAgICAgIGxldHRlcnMsIG51bWJlcnMsIHNwYWNlLCBwdW5jdHVhdGlvbiwgc3ltYm9scywgdGFiLCBlbnRlcgorICogCisgKiAgICJEZWxldGluZyBDaGFyYWN0ZXJzIgorICogICAgICBkZWxldGUsIGJhY2tzcGFjZQorICogCisgKiAgICJTaG9ydGN1dHMgYW5kIE90aGVyIFVzZWZ1bCBUaGluZ3MiCisgKiAgICAgIGVzYywgY3RybC1hLCBjdHJsLWIuLi4KKyAqIAorICogTm90ZSB0aGF0IGluIHRoZSBpbnRlcmVzdHMgb2YgcGVyZm9ybWFuY2UsIHdlIGFyZSBub3QgdG9vIHN0cmljdCBhYm91dCByZW1vdmluZyB0aGluZ3MKKyAqICAgdGhhdCBzaG91bGQgbm90IGJlIGtleXByZXNzZXMgaWYgdGhleSBkb24ndCBoYXBwZW4gZnJlcXVlbnRseSwgbGlrZSBmb3IgZXhhbXBsZSwKKyAqICAgRnVuY3Rpb24gS2V5cyAqKm1pZ2h0KiogZ2V0IHBhc3NlZCBhcyBvbktleVByZXNzLCBkZXBlbmRpbmcgb24gYnJvd3Nlciwgc2luY2UgaXQncworICogICByYXJlIGFuZCBwbHVnaW5zIHByb2JhYmx5IHdvbid0IGJlIGxvb2tpbmcgZm9yIHRoZW0gYW55d2F5LCB0aGVyZSdzIG5vIHNlbnNlCisgKiAgIHdhc3RpbmcgY3ljbGVzIGxvb2tpbmcgZm9yIHRoZW0uCisgKiAKKyAqIElmIHlvdSBhcmUgbG9va2luZyBmb3Igc29tZXRoaW5nIHRoYXQgaXMgbm90ICJvZmZpY2lhbGx5IiBhIGtleXByZXNzIGFzIGRlZmluZWQgYWJvdmUKKyAqICAgdXNlIG9uS2V5RG93biBhbmQgeW91IHdpbGwgZ2V0IG5vdGlmaWNhdGlvbnMgZm9yIEVWRVJZIGtleSBkb3duLCBldmVuIGlmIGl0J3MgZm9yCisgKiAgIGV4YW1wbGUgYSBtb2RpZmllciBsaWtlIHNoaWZ0IChlZyBjdHJsLXNoaWZ0LWEgd291bGQgZ2l2ZSB0aHJlZSBrZXlkb3ducyksIHdoaWNoIGlzIAorICogICB3aHkga2V5cHJlc3MgaXMgYSBiZXR0ZXIgaWRlYSBpZiB5b3UgY2FuIGRvIHRoYXQuCisgKiAKKyAqIE5vdGUgYWxzbyB0aGF0IHlvdSBjYW4gbGlzdGVuIHRvIG9uU2hvcnRDdXQgdG8gb25seSBoZWFyIGFib3V0IHRob3NlIGlmIHlvdSB3YW50LCAKKyAqICAgaXQgZ2V0cyBhIHNlY29uZCBhcmd1bWVudCBvZiB0aGUgc2hvcnRjdXQga2V5IGFscmVhZHkgZGVjb2RlZCBmb3IgeW91LgorICogCisgKiBBIHVzZWZ1bCBrZXkgVGVzdGVyIGlzIGhlcmU6CisgKiAgICBodHRwczovL2R2Y3MudzMub3JnL2hnL2Q0ZS9yYXctZmlsZS90aXAva2V5LWV2ZW50LXRlc3QuaHRtbAorICogCisgKiBBIHVzZWZ1bCByZWZlcmVuY2Ugb2YgRE9NMyBrZXkgbmFtZXMgaXMgaGVyZToKKyAqICAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleS9LZXlfVmFsdWVzCisgKiAKKyAqIEBwYXJhbSBLZXlib2FyZEV2ZW50CisgKiBAcmV0dXJuIGJvb2xlYW4KKyAqLworCitYaW5oYS5wcm90b3R5cGUuaXNLZXlQcmVzc0V2ZW50ID0gZnVuY3Rpb24oa2V5RXZlbnQpCit7CisgIGlmKHR5cGVvZiBYaW5oYS5ET00zTm90QUtleVByZXNzID09ICd1bmRlZmluZWQnKQorICB7CisgICAgLy8gVGhlIGZvbGxvd2luZyByZWd1bGFyIGV4cHJlc3Npb25zIG1hdGNoIEtleWJvYXJkRXZlbnQua2V5IGZvciBrZXlzIHdoaWNoIHNob3VsZCBOT1QgYmUgCisgICAgLy8gIHJlZ2FyZGVkIGFzIGEga2V5cHJlc3MKKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBhY3R1YWxseSB0ZXN0IHRoZW0gYWxsLCBjdXJyZW50bHkgb25seSBtb2RpZmllciwgbmF2aWdhdGlvbiBhbmQgZWRpdGluZworICAgIC8vIGFyZSBhY3R1YWxseSB0ZXN0ZWQgYW5kIGV4Y2x1ZGVkLCB0aGUgb3RoZXJzIHdvbnQnIGhhcHBlbiBmcmVxdWVudGx5IGVub3VnaCB0byBib3RoZXIKKyAgICAvLyB3aXRoIHRlc3RpbmcuICBJdCdzIG5vdCB0eXBpY2FsbHkgYSBiaWcgZGVhbCBpZiBrZXlzIHNsaXAtdGhyb3VnaCB0aGUgbmV0IGFuZCBpc3N1ZSAKKyAgICAvLyBhIGtleXByZXNzIGFzIHBsdWdpbnMgd2lsbCBsaWtlbHkganVzdCBza2lwIGl0IGFzIGFuIHVua25vd24ga2V5LgorICAgIC8vCisgICAgLy8gU2VlOiAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleS9LZXlfVmFsdWVzCisgICAgCisgICAgWGluaGEuRE9NM05vdEFLZXlQcmVzcyA9IHsKKyAgICAgICdtb2RpZmllcicgICAgOiAvXihBbHR8Q2Fwc0xvY2t8Q29udHJvbHxGWzAtOV0rfEZuTG9ja3xIeXBlcnxNZXRhfE51bUxvY2t8U2Nyb2xsTG9ja3xTaGlmdHxTdXBlcnxTeW1ib2x8T1N8U2Nyb2xsKS8sCisgICAgICAnbmF2aWdhdGlvbicgIDogL14oQXJyb3d8UGFnZXxFbmR8SG9tZXxMZWZ0fFJpZ2h0fFVwfERvd24pLywKKyAgICAgICdlZGl0aW5nJyAgICAgOiAvXihJbnNlcnQpLywKKyAgICAgICd1aScgICAgICAgICAgOiAvXihBY2NlcHR8QWdhaW58QXR0bnxDYW5jZWx8Q29udGV4dE1lbnV8RXhlY3V0ZXxGaW5kfEZpbmlzaHxIZWxwfFBhdXNlfFBsYXl8UHJvcHN8U2VsZWN0fFpvb218UGF1c2V8QXBwcykvLAorICAgICAgJ2RldmljZScgICAgICA6IC9eKEJyaWdodG5lc3N8RWplY3R8TG9naE9mZnxQb3dlcnxQcmludHxIaWJlcm5hdGV8U3RhbmRieXxXYWtlVXApLywKKyAgICAgICdpbWUnICAgICAgICAgOiAvXihBbGxDYW5kaWRhdGVzfEFscGhhbnVtZXJpY3xDb2RlSW5wdXR8Q29tcG9zZXxDb252ZXJ0fERlYWR8RmluYWxNb2RlfEdyb3VwfE1vZGVDaGFuZ2V8TmV4dENhbmRpZGF0ZXxOb25Db252ZXJ0fFByZXZpb3VzQ2FuZGlkYXRlfFByb2Nlc3N8U2luZ2xlQ2FuZGlkYXRlfE11bHRpfE5vbmNvbnZlcnR8QWx0R3JhcGgpLywKKyAgICAgICdrb3JlYW4nICAgICAgOiAvXihIYW5ndWx8SGFuamF8SnVuamEpLywKKyAgICAgICdqYXBhbmVzZScgICAgOiAvXihFaXN1fEhhbmFrYWt1fEhpcmlnYW5hfEthbmF8S2Fuaml8S2F0YWthbmF8Um9tYW5qaXxaZW5rYWt1fFJvbWFuQ2hhcmFjdGVyc3xIYWxmV2lkdGh8RnVsbFdpZHRoKS8sCisgICAgICAnZnVuY3Rpb24nICAgIDogL14oRlswLTldK3xTb2Z0WzAtOV0rKS8sCisgICAgICAncGhvbmUnICAgICAgIDogL14oQXBwU3dpdGNofENhbGx8Q2FtZXJhfEVuZENhbGx8R29CYWNrfEdvSG9tZXxIZWFkc2V0SG9va3xMYXN0TnVtYmVyfE5vdGlmaWNhdGlvbnxNYW5uZXJ8Vm9pY2V8RXhpdHxNb3pIb21lU2NyZWVuKS8sCisgICAgICAnbXVsdGltZWRpYScgIDogL14oQ2hhbm5lbHxNZWRpYXxGYXN0RndkKS8sCisgICAgICAnYXVkaW8nICAgICAgIDogL14oQXVkaW98TWljcm9waG9uZXxWb2x1bWUpLywKKyAgICAgICd0dicgICAgICAgICAgOiAvXihUVnxMaXZlKS8sCisgICAgICAnbWVkaWEnICAgICAgIDogL14oQVZSfENvbG9yfENsb3NlZENhcHRpb258RHVtbWVyfERpc3BsYXlTd2FwfERWUnxFeGl0fEZhdm9yaXRlfEd1aWRlfEluZm98SW5zdGFudFJlcGxheXxMaW5rfExpc3R8TGl2ZXxMb2NrfE1lZGlhfE5hdmlnYXRlfE5leHR8T25EZW1hbmR8UGFpcmluZ3xQaW5QfFBsYXl8UmFuZG9tfFJjTG93fFJlY29yZHxSZkJ5cGFzc3xTY2FuQ2hhbm5lbHN8U2NyZWVuTW9kZXxTZXR0aW5nc3xTcGxpdFNjcmVlbnxTVEJJbnB1dHxTdWJ0aXRsZXxUZWxldGV4dHxWaWRlb01vZGV8V2lua3xab29tVG9nZ2xlfFpvb20pLywKKyAgICAgICdzcGVlY2gnICAgICAgOiAvXihTcGVlY2gpLywKKyAgICAgICdkb2N1bWVudCcgICAgOiAvXihDbG9zZXxOZXd8T3BlbnxQcmludHxTYXZlfFNwZWxsY2hlY2t8TWFpbCkvLAorICAgICAgJ2FwcGxpY2F0aW9uJyA6IC9eKExhdW5jaHxNZWRpYVNlbGVjdHxTZWxlY3RNZWRpYSkvCisgICAgfTsKKyAgfQorCisgIGlmKGtleUV2ZW50LnR5cGUgPT0gJ2tleXByZXNzJykKKyAgeworICAgIC8vIERldGVjdCBzb21lIHRoaW5ncyB0aGF0IG1pZ2h0IGNvbWUgaW4gYXMgYSBwcmVzcyBhbmQgc2hvdWxkIG5vdCBiZSBhIHByZXNzCisgICAgCisgICAgLy8gIERPTTMgS2V5cworICAgIAorICAgIGlmKHR5cGVvZiBrZXlFdmVudC5rZXkgIT0gJ3VuZGVmaW5lZCcpCisgICAgeworICAgICAgaWYoa2V5RXZlbnQua2V5ID09ICdVbmlkZW50aWZpZWQnKQorICAgICAgeworICAgICAgICAvLyBTb21lIG9sZCBHZWNrbyB2ZXJzaW9ucyBjYWxsZWQgU2hpZnQtdGFiIFVuaWRlbnRpZmllZCAhCisgICAgICAgIGlmKHR5cGVvZiBrZXlFdmVudC5rZXlDb2RlICE9ICd1bmRlZmluZWQnICYmIGtleUV2ZW50LmtleUNvZGUgPT0gOSkgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKworICAgICAgLy8gTW9kaWZpZXIga2V5cworICAgICAgaWYoWGluaGEuRE9NM05vdEFLZXlQcmVzcy5tb2RpZmllci50ZXN0KGtleUV2ZW50LmtleSkpICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgCisgICAgICAvLyBOYXZpZ2F0aW9uIEtleXMKKyAgICAgIGlmKFhpbmhhLkRPTTNOb3RBS2V5UHJlc3MubmF2aWdhdGlvbi50ZXN0KGtleUV2ZW50LmtleSkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgIC8vIEVkaXRpbmcgS2V5cworICAgICAgaWYoWGluaGEuRE9NM05vdEFLZXlQcmVzcy5lZGl0aW5nLnRlc3Qoa2V5RXZlbnQua2V5KSkgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAKKyAgICB9CisgICAgLy8gT2xkIERPTTMgKG9ubHkgU2FmYXJpIGFuZCBvbGQgQ2hyb21lKQorICAgIC8qIEkgY291bGQgbm90IGZpbmQgYW55dGhpbmcgcmVwb3J0ZWQgYXMgYSBwcmVzcyB0aGF0IHNob3VsZCBub3QgYmUgaW4gU2FmYXJpIDkuMSBhbmQgdGhhdCAKKyAgICAgKiBpcyBhcyBmYXIgYmFjayBhcyBJIGNhbiBlYXNpbHkgdGVzdCwgbXkgdGhvdWdodCBpcyB0aGF0IGRyb3BwaW5nIHN0cmFpZ2h0IHRocm91Z2ggdG8gdGhlIAorICAgICAqIGxlZ2FjeSBrZXlzIHNob3VsZCB3b3JrIGZpbmUgc28gSSBoYXZlIGRpc2FibGVkIHRoaXMKKyAgICAgKi8gCisgICAgZWxzZSBpZiggMCAmJiB0eXBlb2Yga2V5RXZlbnQua2V5SWRlbnRpZmllciAhPSAndW5kZWZpbmVkJyAmJiBrZXlFdmVudC5rZXlJZGVudGlmaWVyLmxlbmd0aCkKKyAgICB7CisgICAgICB2YXIga0kgPSBwYXJzZUludChrZXlFdmVudC5rZXlJZGVudGlmaWVyLnJlcGxhY2UoL15VXCsvLCcnKSwxNik7CisgICAgICAKKyAgICB9CisgICAgLy8gTGVnYWN5IEtleXMKKyAgICBlbHNlIAorICAgIHsKKyAgICAgIGlmKGtleUV2ZW50LmNoYXJDb2RlID09IDApCisgICAgICB7CisgICAgICAgIGlmKChrZXlFdmVudC5rZXlDb2RlID49IDM3ICYmIGtleUV2ZW50LmtleUNvZGUgPD0gNDApKSByZXR1cm4gZmFsc2U7IC8vIEFycm93cworICAgICAgICAgICAKKyAgICAgICAgaWYoICAga2V5RXZlbnQua2V5Q29kZSA9PSA0NSAvLyBJbnNlcnQKKyAgICAgICAgICB8fCAga2V5RXZlbnQua2V5Q29kZSA9PSAzNiAvLyBIb21lCisgICAgICAgICAgfHwgIGtleUV2ZW50LmtleUNvZGUgPT0gMzUgLy8gRW5kCisgICAgICAgICAgfHwgIGtleUV2ZW50LmtleUNvZGUgPT0gMzMgLy8gUGFnZSBVcAorICAgICAgICAgIHx8ICBrZXlFdmVudC5rZXlDb2RlID09IDM0IC8vIFBhZ2UgRG4KKyAgICAgICAgICB8fCAga2V5RXZlbnQua2V5Q29kZSA9PSAxOSAvLyBQYXVzZS9CcmVhaworICAgICAgICAgIHx8ICBrZXlFdmVudC5rZXlDb2RlID09IDE3IC8vIENvbnRyb2wKKyAgICAgICAgICB8fCAga2V5RXZlbnQua2V5Q29kZSA9PSAxOCAvLyBBbHQKKyAgICAgICAgICB8fCAga2V5RXZlbnQua2V5Q29kZSA9PSAyMCAvLyBDYXBzTG9jaworICAgICAgICAgIHx8ICBrZXlFdmVudC5rZXlDb2RlID09IDkxIC8vIE9TCisgICAgICAgICAgfHwgIGtleUV2ZW50LmtleUNvZGUgPT0gOTMgLy8gQ29udGV4dE1lbnUgICAgICAgICAgCisgICAgICAgICkgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYoIGtleUV2ZW50LmtleUNvZGUgPj0gMTEyICYmIGtleUV2ZW50IDw9IDEyMyApIHJldHVybiBmYWxzZTsgLy8gRjEgdGhyb3VnaCBGMTIKKyAgICAgICAgaWYoIGtleUV2ZW50LmtleUNvZGUgPT0gMCkgcmV0dXJuIGZhbHNlOyAvLyBPdGhlciB0aGluZ3MgKGxpa2UgIkxhdW5jaEFwcDEiKQorICAgICAgfQorICAgIH0KKyAgIAorICAgIC8vIElmIGl0IHdhc24ndCBhIGJhZCB0aGluZyB3ZSBza2lwZWQsIHRoZW4gYSBrZXlwcmVzcyBpcyBhIGtleXByZXNzCisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgZWxzZSBpZihrZXlFdmVudC50eXBlID09ICdrZXlkb3duJykKKyAgeworICAgIC8vIE5vdyB3ZSBnZXQgaW50byBicm93c2VyIHNwZWNpZmljcywgd2Ugd2FudCB0byByZXR1cm4gdHJ1ZSAKKyAgICAvLyAgaWYgdGhlIGtleWRvd24gZXZlbnQgaXMgZm9yIGEga2V5IHdoaWNoIHNob3VsZCBiZSByZXBvcnRlZCBhcyBhIHByZXNzCisgICAgLy8gIGFuZCBpcyBOT1QgcmVwb3J0ZWQgYXMgIGEgcHJlc3MgKG90aGVyd2lzZSBwcmVzcyB3b3VsZCBmaXJlIHR3aWNlIGZvciBpdCkKKyAgICByZXR1cm4gdGhpcy5pc0tleURvd25UaGF0U2hvdWxkR2V0QnV0RG9lc05vdEdldEFLZXlQcmVzc0V2ZW50KGtleUV2ZW50KTsKKyAgfQorfTsKKworLyoqIER1ZSB0byBicm93c2VyIGRpZmZlcmVuY2VzLCBzb21lIGtleXMgd2hpY2ggWGluaGEgcHJlZmVycyB0byBjYWxsIGEga2V5UHJlc3MKKyAqICAgZG8gbm90IGdldCBhbiBhY3R1YWwga2V5cHJlc3MgZXZlbnQuICBUaGlzIGJyb3dzZXIgc3BlY2lmaWMgZnVuY3Rpb24gCisgKiAgIG92ZXJyaWRkZW4gaW4gdGhlIGJyb3dzZXIncyBlbmdpbmUgKGVnIG1vZHVsZXMvV2ViS2l0L1dlYktpdC5qcykgYXMgcmVxdWlyZWQKKyAqICAgdGFrZXMgYSBrZXlkb3duIGV2ZW50IHR5cGUgYW5kIHRlbGxzIHVzIGlmIHdlIHNob3VsZCB0cmVhdCBpdCBhcyBhIAorICogICBrZXlwcmVzcyBldmVudCB0eXBlLgorICoKKyAqICBUbyBiZSBjbGVhciwgdGhlIGtleXMgd2UgYXJlIGludGVyZXN0ZWQgaGVyZSBhcmUKKyAqICAgICAgICBFc2NhcGUsIFRhYiwgQmFja3NwYWNlLCBEZWxldGUsIEVudGVyCisgKiAgIHRoZXNlIGFyZSAibm9uIHByaW50YWJsZSIgY2hhcmFjdGVycyB3aGljaCB3ZSBzdGlsbCB3YW50IHRvIHJlZ2FyZCBnZW5lcmFsbHkKKyAqICAgYXMgYSBrZXlwcmVzcy4gIAorICogCisgKiAgSWYgdGhlIGJyb3dzZXIgZG9lcyBub3QgcmVwb3J0IHRoZXNlIGFzIGEga2V5cHJlc3MKKyAqICAgKCBodHRwczovL2R2Y3MudzMub3JnL2hnL2Q0ZS9yYXctZmlsZS90aXAva2V5LWV2ZW50LXRlc3QuaHRtbCApCisgKiAgIHRoZW4gdGhpcyBmdW5jdGlvbiBtdXN0IHJldHVybiB0cnVlIGZvciBzdWNoIGtleWRvd24gZXZlbnRzIGFzIGl0IGlzCisgKiAgIGdpdmVuLgorICogCisgKiBAcGFyYW0gS2V5Ym9hcmRFdmVudAorICogQHJldHVybiBib29sZWFuCisgKi8KKworWGluaGEucHJvdG90eXBlLmlzS2V5RG93blRoYXRTaG91bGRHZXRCdXREb2VzTm90R2V0QUtleVByZXNzRXZlbnQgPSBmdW5jdGlvbihrZXlFdmVudCkKK3sKKyAgcmV0dXJuIGZhbHNlOworfTsKKworLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGtleSBldmVudCBvYmplY3QgcmVwcmVzZW50cyBhIGNvbWJpbmF0aW9uIG9mIENUUkwtPGtleT4sCisgKiAgd2hpY2ggZm9yIFhpbmhhIGlzIGEgc2hvcnRjdXQuICBOb3RlIHRoYXQgQ1RSTC1BTFQtPGtleT4gaXMgbm90IGEgc2hvcnRjdXQuCisgKgorICogIEBwYXJhbSAgICB7RXZlbnR9IGtleUV2ZW50CisgKiAgQHJldHVybnMgIHttaXhlZH0gRWl0aGVyIHRoZSBrZXkgcmVwcmVzZW50aW5nIHRoZSBzaG9ydCBjdXQgKGVnIGN0cmwtYiBnaXZlcyAnYicpLCBvciBmYWxzZQorICovCisgCitYaW5oYS5wcm90b3R5cGUuaXNTaG9ydEN1dCA9IGZ1bmN0aW9uKGtleUV2ZW50KQoreworICBpZihrZXlFdmVudC5jdHJsS2V5ICYmICFrZXlFdmVudC5hbHRLZXkgJiYgdGhpcy5nZXRLZXkoa2V5RXZlbnQpLmxlbmd0aCA9PSAxKQorICB7CisgICAgcmV0dXJuIHRoaXMuZ2V0S2V5KGtleUV2ZW50KTsKKyAgfQorICAKKyAgcmV0dXJuIGZhbHNlOworfTsKKworLyoqIFJldHVybiB0aGUgY2hhcmFjdGVyIChhcyBhIHN0cmluZykgb2YgYSBrZXlFdmVudCAgLSBpZSwgcHJlc3MgdGhlICdhJyBrZXkgYW5kCisgKiAgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gJ2EnLCBwcmVzcyBTSElGVC1hIGFuZCBpdCB3aWxsIHJldHVybiAnQScuCisgKiAKKyAqICBAcGFyYW0gICB7RXZlbnR9IGtleUV2ZW50CisgKiAgQHJldHVybnMge1N0cmluZ30KKyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1hpbmhhLnByb3RvdHlwZS5nZXRLZXkgPSBmdW5jdGlvbihrZXlFdmVudCkgeyBYaW5oYS5ub3RJbXBsZW1lbnRlZCgiZ2V0S2V5Iik7IH07CisKKy8qKiBSZXR1cm4gdGhlIEhUTUwgc3RyaW5nIG9mIHRoZSBnaXZlbiBFbGVtZW50LCBpbmNsdWRpbmcgdGhlIEVsZW1lbnQuCisgKiAKKyAqIEBwYXJhbSB7RG9tTm9kZX0gZWxlbWVudCBIVE1MIEVsZW1lbnQKKyAqIEByZXR1cm5zIHtTdHJpbmd9CisgKi8KKyAKK1hpbmhhLmdldE91dGVySFRNTCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsgWGluaGEubm90SW1wbGVtZW50ZWQoImdldE91dGVySFRNTCIpOyB9OworCisvKiogR2V0IGEgbmV3IFhNTEhUVFBSZXF1ZXN0IE9iamVjdCByZWFkeSB0byBiZSB1c2VkLiAKKyAqCisgKiBAcmV0dXJucyB7WE1MSFRUUFJlcXVlc3R9CisgKi8KKworWGluaGEuZ2V0WE1MSFRUUFJlcXVlc3RPYmplY3QgPSBmdW5jdGlvbigpIAoreworICB0cnkKKyAgeyAgICAKKyAgICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBYTUxIdHRwUmVxdWVzdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICkgLy8gU2FmYXJpJ3MgWE1MSHR0cFJlcXVlc3QgaXMgdHlwZW9mIG9iamVjdAorICAgIHsKKyAgCSAgcmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIH0KKyAgCWVsc2UgaWYgKHR5cGVvZiBBY3RpdmVYT2JqZWN0ID09ICJmdW5jdGlvbiIpCisgIAl7CisgIAkgIHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKKyAgCX0KKyAgfQorICBjYXRjaChlKQorICB7CisgICAgWGluaGEubm90SW1wbGVtZW50ZWQoJ2dldFhNTEhUVFBSZXF1ZXN0T2JqZWN0Jyk7CisgIH0KK307CisgCisvLyBDb21wYXRhYmlsaXR5IC0gYWxsIHRoZXNlIG5hbWVzIGFyZSBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbgorLyoqIEFsaWFzIG9mIGFjdGl2ZUVsZW1lbnQoKQorICogQHNlZSBYaW5oYSNhY3RpdmVFbGVtZW50CisgKiBAZGVwcmVjYXRlZAorICogQHJldHVybnMge0RvbU5vZGV8bnVsbH0KKyAqLworWGluaGEucHJvdG90eXBlLl9hY3RpdmVFbGVtZW50ICA9IGZ1bmN0aW9uKHNlbCkgeyByZXR1cm4gdGhpcy5hY3RpdmVFbGVtZW50KHNlbCk7IH07CisvKiogQWxpYXMgb2Ygc2VsZWN0aW9uRW1wdHkoKQorICogQHNlZSBYaW5oYSNzZWxlY3Rpb25FbXB0eQorICogQGRlcHJlY2F0ZWQKKyAqIEBwYXJhbSB7U2VsZWN0aW9ufSBzZWwgU2VsZWN0aW9uIG9iamVjdCBhcyByZXR1cm5lZCBieSBnZXRTZWxlY3Rpb24KKyAqIEByZXR1cm5zIHtCb29sZWFufQorICovCitYaW5oYS5wcm90b3R5cGUuX3NlbGVjdGlvbkVtcHR5ID0gZnVuY3Rpb24oc2VsKSB7IHJldHVybiB0aGlzLnNlbGVjdGlvbkVtcHR5KHNlbCk7IH07CisvKiogQWxpYXMgb2YgZ2V0U2VsZWN0aW9uKCkKKyAqIEBzZWUgWGluaGEjZ2V0U2VsZWN0aW9uCisgKiBAZGVwcmVjYXRlZAorICogQHJldHVybnMge1NlbGVjdGlvbn0KKyAqLworWGluaGEucHJvdG90eXBlLl9nZXRTZWxlY3Rpb24gICA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5nZXRTZWxlY3Rpb24oKTsgfTsKKy8qKiBBbGlhcyBvZiBjcmVhdGVSYW5nZSgpCisgKiBAc2VlIFhpbmhhI2NyZWF0ZVJhbmdlCisgKiBAZGVwcmVjYXRlZAorICogQHBhcmFtIHtTZWxlY3Rpb259IHNlbCBTZWxlY3Rpb24gb2JqZWN0CisgKiBAcmV0dXJucyB7UmFuZ2V9CisgKi8KK1hpbmhhLnByb3RvdHlwZS5fY3JlYXRlUmFuZ2UgICAgPSBmdW5jdGlvbihzZWwpIHsgcmV0dXJuIHRoaXMuY3JlYXRlUmFuZ2Uoc2VsKTsgfTsKK0hUTUxBcmVhID0gWGluaGE7CisKKy8vd2hhdCBpcyB0aGlzIGZvcj8gRG8gd2UgbmVlZCBpdD8KK1hpbmhhLmluaXQoKTsKKworaWYgKCBYaW5oYS5pZV92ZXJzaW9uIDwgOCApCit7CisgIFhpbmhhLmFkZERvbTBFdmVudCh3aW5kb3csJ3VubG9hZCcsWGluaGEuY29sbGVjdEdhcmJhZ2VGb3JJRSk7Cit9CisvKiogUHJpbnQgc29tZSBtZXNzYWdlIHRvIEZpcmVidWcsIFdlYmtpdCwgT3BlcmEsIG9yIElFOCBjb25zb2xlCisgKiAKKyAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0CisgKiBAcGFyYW0ge1N0cmluZ30gbGV2ZWwgb25lIG9mICd3YXJuJywgJ2luZm8nLCBvciBlbXB0eSAKKyAqLworWGluaGEuZGVidWdNc2cgPSBmdW5jdGlvbih0ZXh0LCBsZXZlbCkKK3sKKyAgaWYgKHR5cGVvZiBjb25zb2xlICE9ICd1bmRlZmluZWQnICYmIHR5cGVvZiBjb25zb2xlLmxvZyA9PSAnZnVuY3Rpb24nKSAKKyAgeworICAgIGlmIChsZXZlbCAmJiBsZXZlbCA9PSAnd2FybicgJiYgdHlwZW9mIGNvbnNvbGUud2FybiA9PSAnZnVuY3Rpb24nKSAKKyAgICB7CisgICAgICBjb25zb2xlLndhcm4odGV4dCk7CisgICAgfQorICAgIGVsc2UgCisgICAgICBpZiAobGV2ZWwgJiYgbGV2ZWwgPT0gJ2luZm8nICYmIHR5cGVvZiBjb25zb2xlLmluZm8gPT0gJ2Z1bmN0aW9uJykgCisgICAgICB7CisgICAgICAgIGNvbnNvbGUuaW5mbyh0ZXh0KTsKKyAgICAgIH0KKyAgICAgIGVsc2UgCisgICAgICB7CisgICAgICAgIGNvbnNvbGUubG9nKHRleHQpOworICAgICAgfQorICB9CisgIGVsc2UgaWYgKHR5cGVvZiBvcGVyYSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb3BlcmEucG9zdEVycm9yID09ICdmdW5jdGlvbicpIAorICB7CisgICAgb3BlcmEucG9zdEVycm9yKHRleHQpOworICB9Cit9OworWGluaGEubm90SW1wbGVtZW50ZWQgPSBmdW5jdGlvbihtZXRob2ROYW1lKSAKK3sKKyAgdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgTm90IEltcGxlbWVudGVkIiwgIlBhcnQgb2YgWGluaGEgaGFzIHRyaWVkIHRvIGNhbGwgdGhlICIgKyBtZXRob2ROYW1lICsgIiBtZXRob2Qgd2hpY2ggaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkLiIpOworfTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL1hpbmhhRWFzeS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL1hpbmhhRWFzeS5qcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ODM3YWEwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvWGluaGFFYXN5LmpzCkBAIC0wLDAgKzEsNzY3IEBACisvKiBUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIHByb3ZpZGUgYSBzdXBlci1zaW1wbGUgbG9hZGluZyBtZXRob2QgZm9yIFhpbmhhCisgKgorICogRm9yIGp1c3QgImRlZmF1bHRzIiwgeW91IGNhbiBiZSBhcyBzaW1wbGUgYXMKKyAqIAorICogPHNjcmlwdCBzcmM9IlhpbmhhRWFzeS5qcyI+PC9zY3JpcHQ+CisgKiAKKyAqIEFuZCBpdCB3aWxsIGNvbnZlcnQgYWxsIHRleHRhcmVhcyBvbiB0aGUgcGFnZS4KKyAqIAorICogU2VlIGV4YW1wbGVzL05ld2JpZS5odG1sIGZvciBhIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gZXhhbXBsZQorICogCisgKi8KKworX2VkaXRvcl91cmwgICA9IHR5cGVvZiBfZWRpdG9yX3VybCAgICE9ICd1bmRlZmluZWQnID8gX2VkaXRvcl91cmwgIDogbnVsbDsKK19lZGl0b3JfbGFuZyAgPSB0eXBlb2YgX2VkaXRvcl9sYW5nICAhPSAndW5kZWZpbmVkJyA/IF9lZGl0b3JfbGFuZyA6ICdlbic7CitfZWRpdG9yX3NraW4gID0gdHlwZW9mIF9lZGl0b3Jfc2tpbiAgIT0gJ3VuZGVmaW5lZCcgPyBfZWRpdG9yX3NraW4gOiAnc2lsdmEnOworX2VkaXRvcl9pY29ucyA9IHR5cGVvZiBfZWRpdG9yX2ljb25zICE9ICd1bmRlZmluZWQnID8gX2VkaXRvcl9pY29ucyA6IG51bGw7CitfZWRpdG9yX2NzcyAgID0gdHlwZW9mIF9lZGl0b3JfY3NzICAgIT0gJ3VuZGVmaW5lZCcgPyBfZWRpdG9yX2NzcyA6IG51bGw7CisKK3hpbmhhX2luaXQgICAgPSBudWxsOworeGluaGFfZWRpdG9ycyA9IG51bGw7Cit4aW5oYV9jb25maWcgID0gbnVsbDsKK3hpbmhhX3Rvb2xiYXIgPSBudWxsOworeGluaGFfcGx1Z2lucyA9IG51bGw7CisKKy8vIEF1dG8gZGV0ZWN0IF9lZGl0b3JfdXJsIGlmIGl0J3Mgbm90IHNldC4KKyhmdW5jdGlvbigpIC8vIHdyYXAgdGhpcyBpbiBhbiBhZC1ob2MgZnVuY3Rpb24gdG8gYXZvaWQgdW5lY2Vzc2FyeSBwb2xsdXRpb24gb2YgZ2xvYmFsIG5hbWVzcGFjZQoreworICAvLyBCZWNhdXNlIG9mIHRoZSB3YXkgdGhlIERPTSBpcyBsb2FkZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBhbHdheXMgcHVsbCBvdXIgc2NyaXB0IHRhZy4KKyAgdmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7CisgIHZhciB0aGlzX3NjcmlwdCA9IHNjcmlwdHNbc2NyaXB0cy5sZW5ndGggLSAxXTsKKworICB2YXIgeGluaGFfb3B0aW9ucyA9IG51bGw7CisgIAorICAvLyBXZSBjYW4gZ3JhYiB0aGUgc2NyaXB0IGlubmVySFRNTCBhbmQgZXhlY3V0ZSB0aGF0IHRvIGN1dCBkb3duIG9uIHNjcmlwdAorICAvLyB0YWdzLiAgVGhhbmtzIEpvaG4gUmVzaWchCisgIC8vIGh0dHA6Ly9lam9obi5vcmcvYmxvZy9kZWdyYWRpbmctc2NyaXB0LXRhZ3MvICAKKyAgaWYgKHRoaXNfc2NyaXB0LmlubmVySFRNTC5yZXBsYWNlKC9ccysvLCAnJykpIAorICB7CisgICAgdHJ5IC8vIERFQlVHR0lORzogQ29tbWVudCBvdXQgdGhpcyBsaW5lIGFuZCB0aGUgY2F0Y2goZSkgYmVsb3cKKyAgICB7CisgICAgICBldmFsKHRoaXNfc2NyaXB0LmlubmVySFRNTCk7CisgICAgICAKKyAgICAgIAorICAgICAgLy8gQmVjYXVzZSB0aGUgc2V0dXAgb3B0aW9ucyBtaWdodCByZWZlcmVuY2UgX2VkaXRvcl91cmwsIHdlIHRyZWF0IHRoYXQgZmlyc3QuLi4KKyAgICAgIC8vIENob3Agb2ZmIGFueSBxdWVyeSBzdHJpbmcuICBDaG9wIHRoZSBmaWxlbmFtZSBvZmYgb2YgdGhlIFVSTCAKKyAgICAgIC8vIExlYXZlIGV4YWN0bHkgb25lIGJhY2tzbGFzaCBhdCB0aGUgZW5kIG9mIF9lZGl0b3JfdXJsCisgICAgICBfZWRpdG9yX3VybCA9IHhpbmhhX29wdGlvbnMuX2VkaXRvcl91cmwgfHwgdGhpc19zY3JpcHQuc3JjLnNwbGl0KCc/JylbMF0uc3BsaXQoJy8nKS5zbGljZSgwLCAtMSkuam9pbignLycpLnJlcGxhY2UoL1x4MmYqJC8sICcvJyk7CisgICAgICAKKyAgICAgIC8vIHRoZW4gcmVsb2FkIHRoZSBvcHRpb25zLi4uCisgICAgICB4aW5oYV9vcHRpb25zID0gZXZhbCh0aGlzX3NjcmlwdC5pbm5lckhUTUwpOworICAgICAgZGVsZXRlIHhpbmhhX29wdGlvbnMuZWRpdG9yX3VybDsKKyAgICB9CisgICAgY2F0Y2goZSkgLy8gREVCVUdHSU5HOiBDb21tZW50IG91dCB0aGlzIGxpbmUgYW5kIHRoZSB0cnkgYmVsb3cKKyAgICB7ICAgICAgCisgICAgICBpZih0eXBlb2YgY29uc29sZSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5sb2cgPT0gJ2Z1bmN0aW9uJykKKyAgICAgIHsKKyAgICAgICAgdmFyIHdhcm4gPSB0eXBlb2YgY29uc29sZS5lcnJvciA9PSAnZnVuY3Rpb24nID8gZnVuY3Rpb24odyl7Y29uc29sZS5lcnJvcih3KTt9IDogZnVuY3Rpb24odyl7Y29uc29sZS5sb2codyk7fTsKKyAgICAgICAgd2FybihlKTsKKyAgICAgICAgd2FybigiWGluaGE6IFRoZXJlIGlzIGEgcHJvYmxlbSBsb2FkaW5nIHlvdXIgY29uZmlndXJhdGlvbiBkYXRhLiIpOworICAgICAgICB3YXJuKCJYaW5oYTogQ2hlY2sgZm9yIGNvbW1vbiBwcm9ibGVtcyBsaWtlIGEgbWlzc2luZyBjb21tYSBhZnRlciBhIGNvbmZpZ3VyYXRpb24gc2VjdGlvbiwgb3Igc2VtaWNvbG9ucyBpbnN0ZWFkIG9mIGNvbW1hcyBhZnRlciBjb25maWd1cmF0aW9uIHNlY3Rpb25zLiIpOworICAgICAgICB3YXJuKCJYaW5oYTogSWYgeW91IGdldCByZWFsbHkgc3R1Y2ssIGNvbW1lbnQgdGhlIHRyeSBhbmQgY2F0Y2ggbGluZXMgYXJvdW5kIGhlcmUgYW5kIHRoZSBuYXRpdmUgZXJyb3IgbWlnaHQgYmUgbW9yZSB1c2VmdWwuIik7ICAgICAgICAKKyAgICAgICAgd2FybigiWGluaGE6IERlZmF1bHQgY29uZmlndXJhdGlvbiBpcyBiZWluZyB1c2VkLiIpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICB0aHJvdyBlOworICAgICAgfQorICAgICAgeGluaGFfb3B0aW9ucyA9IG51bGw7ICAgICAgCisgICAgfQorICB9CisgIAorICBpZihfZWRpdG9yX3VybCA9PSBudWxsKQorICB7CisgICAgX2VkaXRvcl91cmwgPSB0aGlzX3NjcmlwdC5zcmMuc3BsaXQoJz8nKVswXS5zcGxpdCgnLycpLnNsaWNlKDAsIC0xKS5qb2luKCcvJyk7CisgIH0KKyAgCisgIC8vIERlZmF1bHQgdmFsdWVzCisgIGlmKHhpbmhhX29wdGlvbnMgIT0gbnVsbCkKKyAgeworICAgIGZvcih2YXIgaSBpbiB4aW5oYV9vcHRpb25zKQorICAgIHsKKyAgICAgIGlmKHhpbmhhX29wdGlvbnNbaV0gIT09IG51bGwpCisgICAgICB7CisgICAgICAgIHdpbmRvd1tpXSA9IHhpbmhhX29wdGlvbnNbaV07CisgICAgICB9CisgICAgfQorICB9Cit9KSgpCisKK19lZGl0b3JfdXJsID0gX2VkaXRvcl91cmwucmVwbGFjZSgvXHgyZiokLywgJy8nKTsKKworLy8gSXQgbWF5IGJlIHRoYXQgd2UgYWxyZWFkeSBoYXZlIHRoZSBYaW5oYUNvcmUuanMgbG9hZGVkLCBpZiBzbywgd2UgZG9uJ3QgbmVlZCB0aGlzIHN0dWZmIAorLy8gYW5kIHNldHRpbmcgaXQgd291bGQgb3ZlcnJpZGUgdGhlIHByb3BlciBzdHVmZi4KK2lmKHR5cGVvZiBYaW5oYSA9PSAndW5kZWZpbmVkJykKK3sKKyAgdmFyIFhpbmhhID0ge307CisKKyAgWGluaGEuYWd0ICAgICAgID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpOworICBYaW5oYS5pc19pZSAgICA9ICgoWGluaGEuYWd0LmluZGV4T2YoIm1zaWUiKSAhPSAtMSkgJiYgKFhpbmhhLmFndC5pbmRleE9mKCJvcGVyYSIpID09IC0xKSk7CisgIFhpbmhhLmllX3ZlcnNpb249IHBhcnNlRmxvYXQoWGluaGEuYWd0LnN1YnN0cmluZyhYaW5oYS5hZ3QuaW5kZXhPZigibXNpZSIpKzUpKTsKKyAgWGluaGEuaXNfb3BlcmEgID0gKFhpbmhhLmFndC5pbmRleE9mKCJvcGVyYSIpICE9IC0xKTsKKyAgWGluaGEuaXNfa2h0bWwgID0gKFhpbmhhLmFndC5pbmRleE9mKCJraHRtbCIpICE9IC0xKTsKKyAgWGluaGEuaXNfd2Via2l0ICA9IChYaW5oYS5hZ3QuaW5kZXhPZigiYXBwbGV3ZWJraXQiKSAhPSAtMSk7CisgIFhpbmhhLmlzX3NhZmFyaSAgPSAoWGluaGEuYWd0LmluZGV4T2YoInNhZmFyaSIpICE9IC0xKTsKKyAgWGluaGEub3BlcmFfdmVyc2lvbiA9IG5hdmlnYXRvci5hcHBWZXJzaW9uLnN1YnN0cmluZygwLCBuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCIgIikpKjE7CisgIFhpbmhhLmlzX21hYyAgID0gKFhpbmhhLmFndC5pbmRleE9mKCJtYWMiKSAhPSAtMSk7CisgIFhpbmhhLmlzX21hY19pZSA9IChYaW5oYS5pc19pZSAmJiBYaW5oYS5pc19tYWMpOworICBYaW5oYS5pc193aW5faWUgPSAoWGluaGEuaXNfaWUgJiYgIVhpbmhhLmlzX21hYyk7CisgIFhpbmhhLmlzX2dlY2tvICA9IChuYXZpZ2F0b3IucHJvZHVjdCA9PSAiR2Vja28iICYmICFYaW5oYS5pc19zYWZhcmkpOyAvLyBTYWZhcmkgbGllcyEKKyAgWGluaGEuaXNSdW5Mb2NhbGx5ID0gZG9jdW1lbnQuVVJMLnRvTG93ZXJDYXNlKCkuc2VhcmNoKC9eZmlsZTovKSAhPSAtMTsKKyAgWGluaGEuaXNfZGVzaWduTW9kZSA9ICh0eXBlb2YgZG9jdW1lbnQuZGVzaWduTW9kZSAhPSAndW5kZWZpbmVkJyAmJiAhWGluaGEuaXNfaWUpOyAvLyBJRSBoYXMgZGVzaWduTW9kZSwgYnV0IHdlJ3JlIG5vdCB1c2luZyBpdAorICBYaW5oYS5pc1N1cHBvcnRlZEJyb3dzZXIgPSBYaW5oYS5pc19nZWNrbyB8fCAoWGluaGEuaXNfb3BlcmEgJiYgWGluaGEub3BlcmFfdmVyc2lvbiA+PSA5LjEpIHx8IFhpbmhhLmllX3ZlcnNpb24gPj0gNS41IHx8IFhpbmhhLmlzX3NhZmFyaTsKKworICBYaW5oYS5sb2FkUGx1Z2lucyA9IGZ1bmN0aW9uKHBsdWdpbnMsIGNhbGxiYWNrSWZOb3RSZWFkeSkKKyAgeworICAgIGlmICggIVhpbmhhLmlzU3VwcG9ydGVkQnJvd3NlciApIHJldHVybjsKKyAgICAKKyAgICBYaW5oYS5sb2FkU3R5bGUodHlwZW9mIF9lZGl0b3JfY3NzID09ICJzdHJpbmciID8gX2VkaXRvcl9jc3MgOiAiWGluaGEuY3NzIiwiWGluaGFDb3JlRGVzaWduIik7CisgICAgWGluaGEuY3JlYXRlTG9hZGluZ01lc3NhZ2VzKHhpbmhhX2VkaXRvcnMpOworICAgIHZhciBsb2FkaW5nTWVzc2FnZXMgPSBYaW5oYS5sb2FkaW5nTWVzc2FnZXM7CisgICAgWGluaGEuX2xvYWRiYWNrKF9lZGl0b3JfdXJsICsgIlhpbmhhQ29yZS5qcyIsZnVuY3Rpb24gKCkgeworICAvLyAgICBYaW5oYS5yZW1vdmVMb2FkaW5nTWVzc2FnZXMoeGluaGFfZWRpdG9ycyk7ICAKKyAgLy8gICAgWGluaGEuY3JlYXRlTG9hZGluZ01lc3NhZ2VzKHhpbmhhX2VkaXRvcnMpOyAgCisgICAgICBjYWxsYmFja0lmTm90UmVhZHkoKSAKKyAgICB9KTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBYaW5oYS5fbG9hZGJhY2sgPSBmdW5jdGlvbihVcmwsIENhbGxiYWNrLCBTY29wZSwgQm9udXMpCisgIHsgIAorICAgIHZhciBUID0gIVhpbmhhLmlzX2llID8gIm9ubG9hZCIgOiAnb25yZWFkeXN0YXRlY2hhbmdlJzsKKyAgICB2YXIgUyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOworICAgIFMudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiOworICAgIFMuc3JjID0gVXJsOworICAgIGlmICggQ2FsbGJhY2sgKQorICAgIHsKKyAgICAgIFNbVF0gPSBmdW5jdGlvbigpCisgICAgICB7ICAgICAgCisgICAgICAgIGlmICggWGluaGEuaXNfaWUgJiYgKCAhICggL2xvYWRlZHxjb21wbGV0ZS8udGVzdCh3aW5kb3cuZXZlbnQuc3JjRWxlbWVudC5yZWFkeVN0YXRlKSApICkgKQorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDYWxsYmFjay5jYWxsKFNjb3BlID8gU2NvcGUgOiB0aGlzLCBCb251cyk7CisgICAgICAgIFNbVF0gPSBudWxsOworICAgICAgfTsKKyAgICB9CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZChTKTsKKyAgfTsKKworICBYaW5oYS5nZXRFbGVtZW50VG9wTGVmdCA9IGZ1bmN0aW9uKGVsZW1lbnQpIAorICB7CisgICAgdmFyIGN1cmxlZnQgPSAwOworICAgIHZhciBjdXJ0b3AgPSAwOworICAgIGlmIChlbGVtZW50Lm9mZnNldFBhcmVudCkgCisgICAgeworICAgICAgY3VybGVmdCA9IGVsZW1lbnQub2Zmc2V0TGVmdAorICAgICAgY3VydG9wID0gZWxlbWVudC5vZmZzZXRUb3AKKyAgICAgIHdoaWxlIChlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQpIAorICAgICAgeworICAgICAgICBjdXJsZWZ0ICs9IGVsZW1lbnQub2Zmc2V0TGVmdAorICAgICAgICBjdXJ0b3AgKz0gZWxlbWVudC5vZmZzZXRUb3AKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHsgdG9wOmN1cnRvcCwgbGVmdDpjdXJsZWZ0IH07CisgIH0KKworICAvLyBmaW5kIFggcG9zaXRpb24gb2YgYW4gZWxlbWVudAorICBYaW5oYS5maW5kUG9zWCA9IGZ1bmN0aW9uKG9iaikKKyAgeworICAgIHZhciBjdXJsZWZ0ID0gMDsKKyAgICBpZiAoIG9iai5vZmZzZXRQYXJlbnQgKQorICAgIHsKKyAgICAgIHJldHVybiBYaW5oYS5nZXRFbGVtZW50VG9wTGVmdChvYmopLmxlZnQ7ICAgIAorICAgIH0KKyAgICBlbHNlIGlmICggb2JqLnggKQorICAgIHsKKyAgICAgIGN1cmxlZnQgKz0gb2JqLng7CisgICAgfQorICAgIHJldHVybiBjdXJsZWZ0OworICB9OworCisgIC8vIGZpbmQgWSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50CisgIFhpbmhhLmZpbmRQb3NZID0gZnVuY3Rpb24ob2JqKQorICB7CisgICAgdmFyIGN1cnRvcCA9IDA7CisgICAgaWYgKCBvYmoub2Zmc2V0UGFyZW50ICkKKyAgICB7CisgICAgICByZXR1cm4gWGluaGEuZ2V0RWxlbWVudFRvcExlZnQob2JqKS50b3A7ICAgIAorICAgIH0KKyAgICBlbHNlIGlmICggb2JqLnkgKQorICAgIHsKKyAgICAgIGN1cnRvcCArPSBvYmoueTsKKyAgICB9CisgICAgcmV0dXJuIGN1cnRvcDsKKyAgfTsKKworICBYaW5oYS5jcmVhdGVMb2FkaW5nTWVzc2FnZXMgPSBmdW5jdGlvbih4aW5oYV9lZGl0b3JzKQorICB7CisgICAgaWYgKCBYaW5oYS5sb2FkaW5nTWVzc2FnZXMgfHwgIVhpbmhhLmlzU3VwcG9ydGVkQnJvd3NlciApIAorICAgIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgWGluaGEubG9hZGluZ01lc3NhZ2VzID0gW107CisgICAgCisgICAgZm9yICh2YXIgaT0wO2k8eGluaGFfZWRpdG9ycy5sZW5ndGg7aSsrKQorICAgIHsKKyAgICAgIHZhciBlID0gdHlwZW9mIHhpbmhhX2VkaXRvcnNbaV0gPT0gJ3N0cmluZycgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh4aW5oYV9lZGl0b3JzW2ldKSA6IHhpbmhhX2VkaXRvcnNbaV07CisgICAgICBpZiAoIWUpCisgICAgICB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAgWGluaGEubG9hZGluZ01lc3NhZ2VzLnB1c2goWGluaGEuY3JlYXRlTG9hZGluZ01lc3NhZ2UoZSkpOworICAgIH0KKyAgfQorCisgIFhpbmhhLmNyZWF0ZUxvYWRpbmdNZXNzYWdlID0gZnVuY3Rpb24odGV4dGFyZWEsdGV4dCkKKyAgeyAKKyAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkaW5nXyIgKyB0ZXh0YXJlYS5pZCkgfHwgIVhpbmhhLmlzU3VwcG9ydGVkQnJvd3NlcikKKyAgICB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIENyZWF0ZSBhbmQgc2hvdyB0aGUgbWFpbiBsb2FkaW5nIG1lc3NhZ2UgYW5kIHRoZSBzdWIgbG9hZGluZyBtZXNzYWdlIGZvciBkZXRhaWxzIG9mIGxvYWRpbmcgYWN0aW9ucworICAgIC8vIGdsb2JhbCBlbGVtZW50CisgICAgdmFyIGxvYWRpbmdfbWVzc2FnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIGxvYWRpbmdfbWVzc2FnZS5pZCA9ICJsb2FkaW5nXyIgKyB0ZXh0YXJlYS5pZDsKKyAgICBsb2FkaW5nX21lc3NhZ2UuY2xhc3NOYW1lID0gImxvYWRpbmciOworICAgIAorICAgIGxvYWRpbmdfbWVzc2FnZS5zdHlsZS5sZWZ0ID0gKFhpbmhhLmZpbmRQb3NYKHRleHRhcmVhKSArIHRleHRhcmVhLm9mZnNldFdpZHRoIC8gMikgLSAxMDYgKyAgJ3B4JzsKKyAgICBsb2FkaW5nX21lc3NhZ2Uuc3R5bGUudG9wID0gKFhpbmhhLmZpbmRQb3NZKHRleHRhcmVhKSArIHRleHRhcmVhLm9mZnNldEhlaWdodCAvIDIpIC0gNTAgKyAgJ3B4JzsKKyAgICAvLyBtYWluIHN0YXRpYyBtZXNzYWdlCisgICAgdmFyIGxvYWRpbmdfbWFpbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIGxvYWRpbmdfbWFpbi5jbGFzc05hbWUgPSAibG9hZGluZ19tYWluIjsKKyAgICBsb2FkaW5nX21haW4uaWQgPSAibG9hZGluZ19tYWluXyIgKyB0ZXh0YXJlYS5pZDsKKyAgICBsb2FkaW5nX21haW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoWGluaGEuX2xjKCJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiKSkpOworICAgIC8vIHN1YiBkeW5hbWljIG1lc3NhZ2UKKyAgICB2YXIgbG9hZGluZ19zdWIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBsb2FkaW5nX3N1Yi5jbGFzc05hbWUgPSAibG9hZGluZ19zdWIiOworICAgIGxvYWRpbmdfc3ViLmlkID0gImxvYWRpbmdfc3ViXyIgKyB0ZXh0YXJlYS5pZDsKKyAgICB0ZXh0ID0gdGV4dCA/IHRleHQgOiBYaW5oYS5fbGMoIkxvYWRpbmcgQ29yZSIpOworICAgIGxvYWRpbmdfc3ViLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTsKKyAgICBsb2FkaW5nX21lc3NhZ2UuYXBwZW5kQ2hpbGQobG9hZGluZ19tYWluKTsKKyAgICBsb2FkaW5nX21lc3NhZ2UuYXBwZW5kQ2hpbGQobG9hZGluZ19zdWIpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobG9hZGluZ19tZXNzYWdlKTsKKyAgICAKKyAgICByZXR1cm4gbG9hZGluZ19zdWI7CisgIH0KKworICBYaW5oYS5sb2FkU3R5bGUgPSBmdW5jdGlvbihzdHlsZSwgaWQpCisgIHsKKyAgICB2YXIgdXJsID0gX2VkaXRvcl91cmwgfHwgJyc7CisgICAgCisgICAgdXJsICs9IHN0eWxlOworICAKKyAgICB2YXIgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07CisgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIik7CisgICAgbGluay5yZWwgPSAic3R5bGVzaGVldCI7CisgICAgbGluay5ocmVmID0gdXJsOworICAgIGlmIChpZCkgbGluay5pZCA9IGlkOworICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7CisgIH07CisKKyAgWGluaGEuX2xjID0gZnVuY3Rpb24oc3RyaW5nKSB7cmV0dXJuIHN0cmluZzt9CisKKyAgWGluaGEuX2FkZEV2ZW50ID0gZnVuY3Rpb24oZWwsIGV2bmFtZSwgZnVuYykgCisgIHsKKyAgICBpZiAoIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgKQorICAgIHsKKyAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZuYW1lLCBmdW5jLCB0cnVlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGVsLmF0dGFjaEV2ZW50KCJvbiIgKyBldm5hbWUsIGZ1bmMpOworICAgIH0KKyAgfQorCisgIFhpbmhhLmFkZE9ubG9hZEhhbmRsZXIgPSBmdW5jdGlvbiAoZnVuYykKKyAgeworICAgIC8vIERlYW4gRWR3YXJkcy9NYXR0aGlhcyBNaWxsZXIvSm9obiBSZXNpZyAKKyAgICAvLyBodHRwOi8vZGVhbi5lZHdhcmRzLm5hbWUvd2VibG9nLzIwMDYvMDYvYWdhaW4vCisgICAgLy8gSUUgcGFydCBmcm9tIGpRdWVyeQorICAgIAorICAgIAorICAgIHZhciBpbml0ID0gZnVuY3Rpb24gKCkKKyAgICB7CisgICAgICAvLyBxdWl0IGlmIHRoaXMgZnVuY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQKKyAgICAgIGlmIChhcmd1bWVudHMuY2FsbGVlLmRvbmUpIHJldHVybjsKKyAgICAgIC8vIGZsYWcgdGhpcyBmdW5jdGlvbiBzbyB3ZSBkb24ndCBkbyB0aGUgc2FtZSB0aGluZyB0d2ljZQorICAgICAgYXJndW1lbnRzLmNhbGxlZS5kb25lID0gdHJ1ZTsKKyAgICAgIC8vIGtpbGwgdGhlIHRpbWVyCisgICAgICBpZiAoWGluaGEub25sb2FkVGltZXIpIGNsZWFySW50ZXJ2YWwoWGluaGEub25sb2FkVGltZXIpOworICAgICAgCisgICAgICBmdW5jLmNhbGwoKTsKKyAgICB9CisgICAgaWYgKFhpbmhhLmlzX2llKQorICAgIHsKKyAgICAgIC8vIGVuc3VyZSBmaXJpbmcgYmVmb3JlIG9ubG9hZCwKKyAgICAgIC8vIG1heWJlIGxhdGUgYnV0IHNhZmUgYWxzbyBmb3IgaWZyYW1lcworICAgICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIGZ1bmN0aW9uKCl7CisgICAgICAgIGlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIiApIHsKKyAgICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCggIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIGFyZ3VtZW50cy5jYWxsZWUgKTsKKyAgICAgICAgICBpbml0KCk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgaWYgKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgJiYgdHlwZW9mIHdpbmRvdy5mcmFtZUVsZW1lbnQgPT09ICJ1bmRlZmluZWQiICkgKGZ1bmN0aW9uKCl7CisgICAgICAgIGlmIChhcmd1bWVudHMuY2FsbGVlLmRvbmUpIHJldHVybjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAvLyBJZiBJRSBpcyB1c2VkLCB1c2UgdGhlIHRyaWNrIGJ5IERpZWdvIFBlcmluaQorICAgICAgICAgIC8vIGh0dHA6Ly9qYXZhc2NyaXB0Lm53Ym94LmNvbS9JRUNvbnRlbnRMb2FkZWQvCisgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iik7CisgICAgICAgIH0gY2F0Y2goIGVycm9yICkgeworICAgICAgICAgIHNldFRpbWVvdXQoIGFyZ3VtZW50cy5jYWxsZWUsIDAgKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gYW5kIGV4ZWN1dGUgYW55IHdhaXRpbmcgZnVuY3Rpb25zCisgICAgICAgIGluaXQoKTsKKyAgICAgIH0pKCk7CisgICAgfQorICAgIGVsc2UgaWYgKC9XZWJLaXQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKQorICAgIHsKKyAgICAgIFhpbmhhLm9ubG9hZFRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKQorICAgICAgeworICAgICAgICBpZiAoL2xvYWRlZHxjb21wbGV0ZS8udGVzdChkb2N1bWVudC5yZWFkeVN0YXRlKSkKKyAgICAgICAgeworICAgICAgICAgIGluaXQoKTsgLy8gY2FsbCB0aGUgb25sb2FkIGhhbmRsZXIKKyAgICAgICAgfQorICAgICAgfSwgMTApOworICAgIH0KKyAgICBlbHNlIC8qIGZvciBNb3ppbGxhL09wZXJhOSAqLworICAgIHsKKyAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBpbml0LCBmYWxzZSk7ICAKKyAgICB9CisgIH0KK30KKworeGluaGFfaW5pdCA9IHhpbmhhX2luaXQgPyB4aW5oYV9pbml0IDogZnVuY3Rpb24oKQoreworICAvLyBJRTcgc3VwcG9ydCBmb3IgcXVlcnlTZWxlY3RvckFsbC4gU3VwcG9ydHMgbXVsdGlwbGUgLyBncm91cGVkIHNlbGVjdG9ycworICAvLyBhbmQgdGhlIGF0dHJpYnV0ZSBzZWxlY3RvciB3aXRoIGEgImZvciIgYXR0cmlidXRlLiBodHRwOi8vd3d3LmNvZGVjb3VjaC5jb20vCisgIC8vIGh0dHA6Ly93d3cuY29kZWNvdWNoLmNvbS8yMDEyLzA1L2FkZGluZy1kb2N1bWVudC1xdWVyeXNlbGVjdG9yYWxsLXN1cHBvcnQtdG8taWUtNy8KKyAgLy8gfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwpIAorICB7CisgICAgKGZ1bmN0aW9uKGQsIHMpIHsKKyAgICAgIGQ9ZG9jdW1lbnQsIHM9ZC5jcmVhdGVTdHlsZVNoZWV0KCk7CisgICAgICBkLnF1ZXJ5U2VsZWN0b3JBbGwgPSBmdW5jdGlvbihyLCBjLCBpLCBqLCBhKSB7CisgICAgICAgIGE9ZC5hbGwsIGM9W10sIHIgPSByLnJlcGxhY2UoL1xbZm9yXGIvZ2ksICdbaHRtbEZvcicpLnNwbGl0KCcsJyk7CisgICAgICAgIGZvciAoaT1yLmxlbmd0aDsgaS0tOykgeworICAgICAgICAgIHMuYWRkUnVsZShyW2ldLCAnazp2Jyk7CisgICAgICAgICAgZm9yIChqPWEubGVuZ3RoOyBqLS07KSBhW2pdLmN1cnJlbnRTdHlsZS5rICYmIGMucHVzaChhW2pdKTsKKyAgICAgICAgICBzLnJlbW92ZVJ1bGUoMCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGM7CisgICAgICB9CisgICAgfSkoKTsKKyAgfQorCisgIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvcikgCisgIHsKKyAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yID0gZnVuY3Rpb24oc2VsZWN0b3JzKSB7CisgICAgICB2YXIgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9ycyk7CisgICAgICByZXR1cm4gKGVsZW1lbnRzLmxlbmd0aCkgPyBlbGVtZW50c1swXSA6IG51bGw7CisgICAgfTsKKyAgfQorICAvLyB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKworICAgLyoqIFNURVAgMSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogRmlyc3QsIHNwZWNpZnkgdGhlIHRleHRhcmVhcyB0aGF0IHNoYWxsIGJlIHR1cm5lZCBpbnRvIFhpbmhhcy4gCisgICAqIEZvciBlYWNoIG9uZSBhZGQgdGhlIHJlc3BlY3RpdmUgaWQgdG8gdGhlIHhpbmhhX2VkaXRvcnMgYXJyYXkuCisgICAqIEkgeW91IHdhbnQgYWRkIG1vcmUgdGhhbiBvbiB0ZXh0YXJlYSwga2VlcCBpbiBtaW5kIHRoYXQgdGhlc2UgCisgICAqIHZhbHVlcyBhcmUgY29tbWEgc2VwZXJhdGVkIEJVVCB0aGVyZSBpcyBubyBjb21tYSBhZnRlciB0aGUgbGFzdCB2YWx1ZS4KKyAgICogSWYgeW91IGFyZSBnb2luZyB0byB1c2UgdGhpcyBjb25maWd1cmF0aW9uIG9uIHNldmVyYWwgcGFnZXMgd2l0aCBkaWZmZXJlbnQKKyAgICogdGV4dGFyZWEgaWRzLCB5b3UgY2FuIGFkZCB0aGVtIGFsbC4gVGhlIG9uZXMgdGhhdCBhcmUgbm90IGZvdW5kIG9uIHRoZQorICAgKiBjdXJyZW50IHBhZ2Ugd2lsbCBqdXN0IGJlIHNraXBwZWQuCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgaWYoeGluaGFfZWRpdG9ycyA9PSBudWxsKQorICB7CisgICAgLy8gQlkgZGVmYXVsdCwgY2hhbmdlIGFsbCB0ZXh0YXJlYXMgaW50byBYaW5oYQorICAgIHhpbmhhX2VkaXRvcnMgPSAndGV4dGFyZWEnOworICB9CisgIAorICBpZih0eXBlb2YgeGluaGFfZWRpdG9ycyA9PSAnc3RyaW5nJykKKyAgeworICAgIC8vIEEgcmF3IElEIGxpa2Ugd2UgdXNlZCB0byBkbworICAgIGlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHhpbmhhX2VkaXRvcnMpKQorICAgIHsKKyAgICAgIHhpbmhhX2VkaXRvcnMgPSBbIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHhpbmhhX2VkaXRvcnMpIF07CisgICAgfQorICAgIAorICAgIC8vIE11c3QgYmUgYSBzZWxlY3RvciwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkIGZvciBJRTcgb3IgbG93ZXIhCisgICAgZWxzZQorICAgIHsKKyAgICAgIHZhciBzZWxlY3RlZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoeGluaGFfZWRpdG9ycyk7CisgICAgICB4aW5oYV9lZGl0b3JzID0gWyBdOworICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHNlbGVjdGVkLmxlbmd0aDsgaSsrKQorICAgICAgeworICAgICAgICB4aW5oYV9lZGl0b3JzLnB1c2goc2VsZWN0ZWRbaV0pOworICAgICAgfQorICAgIH0KKyAgfQorICAKKyAgLyoqIFNURVAgMiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogTm93LCB3aGF0IGFyZSB0aGUgcGx1Z2lucyB5b3Ugd2lsbCBiZSB1c2luZyBpbiB0aGUgZWRpdG9ycyBvbiB0aGlzCisgICAqIHBhZ2UuICBMaXN0IGFsbCB0aGUgcGx1Z2lucyB5b3Ugd2lsbCBuZWVkLCBldmVuIGlmIG5vdCBhbGwgdGhlIGVkaXRvcnMKKyAgICogd2lsbCB1c2UgYWxsIHRoZSBwbHVnaW5zLgorICAgKgorICAgKiBUaGUgbGlzdCBvZiBwbHVnaW5zIGJlbG93IGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IGlmIHlvdSBwcmVmZXIKKyAgICogYSBzaW1wbGVyIGVkaXRvciB0byBzdGFydCB3aXRoIHRoZW4geW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyAKKyAgICogCisgICAqIHhpbmhhX3BsdWdpbnMgPSB4aW5oYV9wbHVnaW5zID8geGluaGFfcGx1Z2lucyA6IFsgXTsKKyAgICoKKyAgICogd2hpY2ggd2lsbCBsb2FkIG5vIGV4dHJhIHBsdWdpbnMgYXQgYWxsLgorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIGZ1bmN0aW9uIHBhcnNlX3BsdWdpbnMoeGluaGFfcGx1Z2lucykKKyAgeworICAgIHZhciByZW1vdmVfcGx1Z2lucyA9IFsgXTsKKyAgICAgICAgCisgICAgaWYoeGluaGFfcGx1Z2lucyA9PT0gbnVsbCkKKyAgICB7CisgICAgICB4aW5oYV9wbHVnaW5zID0gJ2NvbW1vbic7CisgICAgfQorICAgIAorICAgIGlmKHR5cGVvZiB4aW5oYV9wbHVnaW5zID09ICdzdHJpbmcnKQorICAgIHsKKyAgICAgIHhpbmhhX3BsdWdpbnMgPSBbIHhpbmhhX3BsdWdpbnMgXTsKKyAgICB9CisgICAgCisgICAgdmFyIGxvYWRfcGx1Z2lucyA9IHhpbmhhX3BsdWdpbnM7CisgICAgeGluaGFfcGx1Z2lucyA9IFsgXTsKKyAgICBmb3IodmFyIGkgPSAwOyBpIDwgbG9hZF9wbHVnaW5zLmxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgIC8vIEluIGNhc2Ugb2YgeyBmcm9tOiAnL3BhdGgvdG8vcGx1Z2lucycsIGxvYWQ6IFsnTW9vdG9vbHNGaWxlTWFuYWdlciddIH0KKyAgICAgIGlmKHR5cGVvZiBsb2FkX3BsdWdpbnNbaV0gPT0gJ29iamVjdCcgJiYgdHlwZW9mIGxvYWRfcGx1Z2luc1tpXS5mcm9tID09ICdzdHJpbmcnKQorICAgICAgeworICAgICAgICAvLyBSZXNvbHZlIHRoZSAibG9hZCIgaW50byBhIGxpc3Qgb2YgcGx1Z2lucworICAgICAgICB2YXIgZXh0ZXJucyA9IHBhcnNlX3BsdWdpbnMobG9hZF9wbHVnaW5zW2ldLmxvYWQpOworICAgICAgICAKKyAgICAgICAgLy8gTVB1c2ggdGhlbSBpbnRvIHBsdWdpbnMgYXMgZXh0ZXJuYWwgcGx1Z2luIG9iamVjdHMKKyAgICAgICAgZm9yKHZhciBpaSA9IDA7IGlpIDwgZXh0ZXJucy5sZW5ndGg7IGlpKyspCisgICAgICAgIHsKKyAgICAgICAgICAvLyBJbiBjYXNlIHlvdSB3YW50IHRvIHNwZWNpZnkgYSBub24tZGVmYXVsdCBwbHVnaW4gZmlsZSBuYW1pbmcKKyAgICAgICAgICBpZihleHRlcm5zW2lpXS5tYXRjaCgvXC8vKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICB4aW5oYV9wbHVnaW5zLnB1c2goeyB1cmw6IGxvYWRfcGx1Z2luc1tpXS5mcm9tICsgJy8nICsgZXh0ZXJuc1tpaV0gLCBwbHVnaW46IGV4dGVybnNbaWldLnJlcGxhY2UoLy4qXC8oW14uXSspXC4uKiQvLCAnJDEnKSB9KTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHhpbmhhX3BsdWdpbnMucHVzaCh7IHVybDogbG9hZF9wbHVnaW5zW2ldLmZyb20gKyAnLycgKyBleHRlcm5zW2lpXSArICcvJyArIGV4dGVybnNbaWldICsgJy5qcycsIHBsdWdpbjogZXh0ZXJuc1tpaV19KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICAKKyAgICAgIC8vIEV4dGVybmFsIHBsdWdpbiBkZWZpbml0aW9uCisgICAgICBpZih0eXBlb2YgbG9hZF9wbHVnaW5zW2ldID09ICdvYmplY3QnICYmIHR5cGVvZiBsb2FkX3BsdWdpbnNbaV0udXJsID09ICdzdHJpbmcnKQorICAgICAgeworICAgICAgICB4aW5oYV9wbHVnaW5zLnB1c2gobG9hZF9wbHVnaW5zW2ldKTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICAKKyAgICAgIC8vIEluIGNhc2Ugb2YgWyAnUGx1Z2luMScsIFsnUGx1Z2luMScsICdQbHVnaW4zJ10gXQorICAgICAgaWYodHlwZW9mIGxvYWRfcGx1Z2luc1tpXSAhPSAnc3RyaW5nJykKKyAgICAgIHsKKyAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobG9hZF9wbHVnaW5zLCBsb2FkX3BsdWdpbnNbaV0pOyAKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICAKKyAgICAgIC8vIFByb3ZpZGUgc29tZSBzaW1wbGUgcGx1Z2luIGRlZmludGlvbiBzaG9ydGN1dHMKKyAgICAgIHN3aXRjaChsb2FkX3BsdWdpbnNbaV0pCisgICAgICB7CisgICAgICAgIGNhc2UgJ2xvYWRlZCc6CisgICAgICAgIHsKKyAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh4aW5oYV9wbHVnaW5zLCAgWydDaGFyYWN0ZXJNYXAnLCAnQ29udGV4dE1lbnUnLCAnRmFuY3lTZWxlY3RzJywgJ1NtYXJ0UmVwbGFjZScsICdTdXBlckNsZWFuJywgJ1RhYmxlT3BlcmF0aW9ucycsICdMaXN0T3BlcmF0aW9ucycsICdQcmVzZXJ2ZVNjcmlwdHMnLCAnUHJlc2VydmVTZWxlY3Rpb24nLCAnV2ViS2l0UmVzaXplJywgJ1N0eWxpc3QnLCAnVW5zYXZlZENoYW5nZXMnLCdRdWlja1RhZycsICdQYXN0ZVRleHQnLCAnTW9vdG9vbHNGaWxlTWFuYWdlcicsICdMaXN0VHlwZScsICdMaW5rZXInLCAnTGFuZ01hcmtzJywgJ0luc2VydFdvcmRzJywgJ0luc2VydFNucHBldDInLCAnSW5zZXJ0U21pbGV5JywnSW5zZXJ0UGFnZWJyZWFrJywgJ0luc2VydE5vdGUnLCAnSW5zZXJ0QW5jaG9yJywgJ0h0bWxFbnRpdGllcycsICdIb3Jpem9udGFsUnVsZScsICdGaW5kUmVwbGFjZScsICdEZWZpbml0aW9uTGlzdCcsICdDaGFyQ291bnRlcicsJ0FiYnJldmlhdGlvbiddICk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlICdtaW5pbWFsJzoKKyAgICAgICAgeworICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHhpbmhhX3BsdWdpbnMsIFsgJ0ZhbmN5U2VsZWN0cycsICdMaXN0T3BlcmF0aW9ucycsICdQcmVzZXJ2ZVNlbGVjdGlvbicsICdXZWJLaXRSZXNpemUnIF0pOworICAgICAgICB9IAorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGNhc2UgJ2NvbW1vbic6CisgICAgICAgIHsKKyAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh4aW5oYV9wbHVnaW5zLCBbICdDaGFyYWN0ZXJNYXAnLCAnQ29udGV4dE1lbnUnLCAnRmFuY3lTZWxlY3RzJywgJ1NtYXJ0UmVwbGFjZScsICdTdXBlckNsZWFuJywgJ1RhYmxlT3BlcmF0aW9ucycsICdMaXN0T3BlcmF0aW9ucycsICdQcmVzZXJ2ZVNjcmlwdHMnLCAnUHJlc2VydmVTZWxlY3Rpb24nLCAnV2ViS2l0UmVzaXplJyBdKTsKKworICAgICAgICAgIAorICAgICAgICB9IAorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgaWYobG9hZF9wbHVnaW5zW2ldLm1hdGNoKC9eIS8pKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHJlbW92ZV9wbHVnaW5zLCBwYXJzZV9wbHVnaW5zKGxvYWRfcGx1Z2luc1tpXS5yZXBsYWNlKC9eIS8sICcnKSkpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgeGluaGFfcGx1Z2lucy5wdXNoKGxvYWRfcGx1Z2luc1tpXSk7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBTdHJpcCBvdXQgdGhlIHJlbW92ZSBwbHVnaW5zLCBhbmQgZHVwbGljYXRlcworICAgIHZhciByZXR1cm5fcGx1Z2lucyA9IFsgXTsKKyAgICBmb3IodmFyIGkgPSAwOyBpIDwgeGluaGFfcGx1Z2lucy5sZW5ndGg7IGkrKykKKyAgICB7CisgICAgICB2YXIgT0sgPSB0cnVlOworICAgICAgCisgICAgICBpZihPSykgZm9yKHZhciBqID0gMDsgaiA8IHJlbW92ZV9wbHVnaW5zLmxlbmd0aDsgaisrKQorICAgICAgeworICAgICAgICBpZihyZW1vdmVfcGx1Z2luc1tqXSA9PSB4aW5oYV9wbHVnaW5zW2ldKSB7IE9LID0gZmFsc2U7IGJyZWFrOyB9CisgICAgICB9CisgICAgICAKKyAgICAgIGlmKE9LKSBmb3IodmFyIGogPSAwOyBqIDwgcmV0dXJuX3BsdWdpbnMubGVuZ3RoOyBqKyspCisgICAgICB7CisgICAgICAgIGlmKHJldHVybl9wbHVnaW5zW2pdID09IHhpbmhhX3BsdWdpbnNbaV0pIHsgT0sgPSBmYWxzZTsgYnJlYWs7IH0KKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYoT0spCisgICAgICB7CisgICAgICAgIHJldHVybl9wbHVnaW5zLnB1c2goeGluaGFfcGx1Z2luc1tpXSk7CisgICAgICB9CisgICAgfQorICAgIHhpbmhhX3BsdWdpbnMgPSByZXR1cm5fcGx1Z2luczsKKyAgICAKKyAgICByZXR1cm4geGluaGFfcGx1Z2luczsKKyAgfQorICAKKyAgeGluaGFfcGx1Z2lucyA9IHBhcnNlX3BsdWdpbnMoeGluaGFfcGx1Z2lucyk7CisgIAorICAKKyAgICAgICAgIC8vIFRISVMgQklUIE9GIEpBVkFTQ1JJUFQgTE9BRFMgVEhFIFBMVUdJTlMsIE5PIFRPVUNISU5HICA6KQorICAgICAgICAgaWYoIVhpbmhhLmxvYWRQbHVnaW5zKHhpbmhhX3BsdWdpbnMsIHhpbmhhX2luaXQpKSByZXR1cm47CisKKworICAvKiogU1RFUCAzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiBXZSBjcmVhdGUgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdG8gYmUgdXNlZCBieSBhbGwgdGhlIGVkaXRvcnMuCisgICAqIElmIHlvdSB3aXNoIHRvIGNvbmZpZ3VyZSBzb21lIG9mIHRoZSBlZGl0b3JzIGRpZmZlcmVudGx5IHRoaXMgd2lsbCBiZQorICAgKiBkb25lIGluIHN0ZXAgNS4KKyAgICoKKyAgICogSWYgeW91IHdhbnQgdG8gbW9kaWZ5IHRoZSBkZWZhdWx0IGNvbmZpZyB5b3UgbWlnaHQgZG8gc29tZXRoaW5nIGxpa2UgdGhpcy4KKyAgICoKKyAgICogICB4aW5oYV9jb25maWcgPSBuZXcgWGluaGEuQ29uZmlnKCk7CisgICAqICAgeGluaGFfY29uZmlnLndpZHRoICA9ICc2NDBweCc7CisgICAqICAgeGluaGFfY29uZmlnLmhlaWdodCA9ICc0MjBweCc7CisgICAqCisgICAqCisgICAqIEZvciBhIGxpc3Qgb2YgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNlZToKKyAgICogaHR0cDovL3RyYWMueGluaGEub3JnL3dpa2kvRG9jdW1lbnRhdGlvbi9Db25maWdWYXJpYWJsZXNMaXN0CisgICAqCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIHZhciBuZXdfY29uZmlnICAgICAgPSBuZXcgWGluaGEuQ29uZmlnKCk7CisgIGlmKHR5cGVvZiB4aW5oYV9jb25maWcgPT0gJ2Z1bmN0aW9uJykKKyAgeworICAgIC8vIElmIGl0IGRvZXNuJ3QgcmV0dXJuIGFuIG9iamVjdCwgdGhhdCBzaG91bGQgc3RpbGwgYmUgZmluZQorICAgIC8vICBkdWUgdG8gcmVmZXJlbmNlcyBhbmQgc3VjaAorICAgIHZhciByZXR1cm5lZF9jb25maWcgPSB4aW5oYV9jb25maWcobmV3X2NvbmZpZyk7CisgICAgaWYodHlwZW9mIHJldHVybmVkX2NvbmZpZyA9PSAnb2JqZWN0JykKKyAgICB7CisgICAgICBuZXdfY29uZmlnID0gcmV0dXJuZWRfY29uZmlnOworICAgIH0gICAgIAorICB9CisgIHhpbmhhX2NvbmZpZyA9IG5ld19jb25maWc7CisKKyAgWGluaGEuQ29uZmlnLnByb3RvdHlwZS5zZXRUb29sYmFyID0gZnVuY3Rpb24oeGluaGFfdG9vbGJhcikKKyAgeworICAgIHZhciB4aW5oYV9jb25maWcgPSB0aGlzOworICAgIGlmKHR5cGVvZiB4aW5oYV90b29sYmFyID09ICdzdHJpbmcnIHx8IHhpbmhhX3Rvb2xiYXIgPT09IG51bGwpCisgICAgeworICAgICAgc3dpdGNoKHhpbmhhX3Rvb2xiYXIpCisgICAgICB7ICAgICAgICAgCisgICAgICAgIGNhc2UgJ21pbmltYWwrZm9udHMnOgorICAgICAgICAgIHhpbmhhX2NvbmZpZy50b29sYmFyID0gWworICAgICAgICAgICAgICBbInBvcHVwZWRpdG9yIl0sCisgICAgICAgICAgICAgIFsic2VwYXJhdG9yIiwiZm9ybWF0YmxvY2siLCJmb250bmFtZSIsImZvbnRzaXplIiwiYm9sZCIsIml0YWxpYyIsInVuZGVybGluZSIsInN0cmlrZXRocm91Z2giLCJzdXBlcnNjcmlwdCJdLAorICAgICAgICAgICAgICBbInNlcGFyYXRvciIsImZvcmVjb2xvciIsImhpbGl0ZWNvbG9yIl0sCisgICAgICAgICAgICAgIFsic2VwYXJhdG9yIiwianVzdGlmeWxlZnQiLCJqdXN0aWZ5Y2VudGVyIiwianVzdGlmeXJpZ2h0Il0sCisgICAgICAgICAgICAgIFsic2VwYXJhdG9yIiwiaW5zZXJ0b3JkZXJlZGxpc3QiLCJpbnNlcnR1bm9yZGVyZWRsaXN0Iiwib3V0ZGVudCIsImluZGVudCJdLAorICAgICAgICAgICAgICBbInNlcGFyYXRvciIsImNyZWF0ZWxpbmsiLCJpbnNlcnRpbWFnZSJdLAorICAgICAgICAgICAgXTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlICdtaW5pbWFsJzoKKyAgICAgICAgICAgIHhpbmhhX2NvbmZpZy50b29sYmFyID0gWworICAgICAgICAgICAgICBbInBvcHVwZWRpdG9yIl0sCisgICAgICAgICAgICAgIFsic2VwYXJhdG9yIiwiYm9sZCIsIml0YWxpYyIsInVuZGVybGluZSIsInN0cmlrZXRocm91Z2giLCJzdXBlcnNjcmlwdCJdLAorICAgICAgICAgICAgICBbInNlcGFyYXRvciIsImZvcmVjb2xvciIsImhpbGl0ZWNvbG9yIl0sCisgICAgICAgICAgICAgIFsic2VwYXJhdG9yIiwianVzdGlmeWxlZnQiLCJqdXN0aWZ5Y2VudGVyIiwianVzdGlmeXJpZ2h0Il0sCisgICAgICAgICAgICAgIFsic2VwYXJhdG9yIiwiaW5zZXJ0b3JkZXJlZGxpc3QiLCJpbnNlcnR1bm9yZGVyZWRsaXN0Iiwib3V0ZGVudCIsImluZGVudCJdLAorICAgICAgICAgICAgICBbInNlcGFyYXRvciIsImNyZWF0ZWxpbmsiLCJpbnNlcnRpbWFnZSJdLAorICAgICAgICAgICAgXTsKKyAgICAgICAgICBicmVhazsgICAgIAorICAgICAgICAgIAorICAgICAgICBjYXNlICdzdXBlcm1pbmknOgorICAgICAgICAgIHhpbmhhX2NvbmZpZy50b29sYmFyID0gWworICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgWyJzZXBhcmF0b3IiLCJib2xkIiwiaXRhbGljIiwidW5kZXJsaW5lIiwic3RyaWtldGhyb3VnaCIsInN1cGVyc2NyaXB0Il0sCisgICAgICAgICAgICAgIAorICAgICAgICAgICAgXTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZih0eXBlb2YgeGluaGFfdG9vbGJhciA9PSAnb2JqZWN0JykKKyAgICB7CisgICAgICB4aW5oYV9jb25maWcudG9vbGJhciA9IHhpbmhhX3Rvb2xiYXI7CisgICAgfQorICB9CisKKyAgLy8gQWxpYXMgYmVjYXVzZSBJIGtub3cgSSB3aWw7IHR5cGUgdGhpcyBkaWZmZXJlbnRseQorICBYaW5oYS5Db25maWcucHJvdG90eXBlLnNldFRvb2xCYXIgPSBYaW5oYS5Db25maWcucHJvdG90eXBlLnNldFRvb2xiYXI7CisgIAorICB4aW5oYV9jb25maWcuc2V0VG9vbGJhcih4aW5oYV90b29sYmFyKTsKKworICBpZih0eXBlb2YgeGluaGFfc3R5bGVzaGVldCA9PSAnc3RyaW5nJyAmJiB4aW5oYV9zdHlsZXNoZWV0Lmxlbmd0aCApCisgIHsKKyAgICB4aW5oYV9jb25maWcucGFnZVN0eWxlU2hlZXRzID0gWyB4aW5oYV9zdHlsZXNoZWV0IF07CisgIH0KKyAgZWxzZSBpZih0eXBlb2YgeGluaGFfc3R5bGVzaGVldCA9PSAnb2JqZWN0JykKKyAgeworICAgIHhpbmhhX2NvbmZpZy5wYWdlU3R5bGVTaGVldHMgPSB4aW5oYV9zdHlsZXNoZWV0IDsKKyAgfQorICAgCisKKyAgLyoqIFNURVAgNCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogV2UgZmlyc3QgY3JlYXRlIGVkaXRvcnMgZm9yIHRoZSB0ZXh0YXJlYXMuCisgICAqCisgICAqIFlvdSBjYW4gZG8gdGhpcyBpbiB0d28gd2F5cywgZWl0aGVyCisgICAqCisgICAqICAgeGluaGFfZWRpdG9ycyAgID0gWGluaGEubWFrZUVkaXRvcnMoeGluaGFfZWRpdG9ycywgeGluaGFfY29uZmlnLCB4aW5oYV9wbHVnaW5zKTsKKyAgICoKKyAgICogaWYgeW91IHdhbnQgYWxsIHRoZSBlZGl0b3Igb2JqZWN0cyB0byB1c2UgdGhlIHNhbWUgc2V0IG9mIHBsdWdpbnMsIE9SOworICAgKgorICAgKiAgIHhpbmhhX2VkaXRvcnMgPSBYaW5oYS5tYWtlRWRpdG9ycyh4aW5oYV9lZGl0b3JzLCB4aW5oYV9jb25maWcpOworICAgKiAgIHhpbmhhX2VkaXRvcnMubXlUZXh0QXJlYS5yZWdpc3RlclBsdWdpbnMoWydTdHlsaXN0J10pOworICAgKiAgIHhpbmhhX2VkaXRvcnMuYW5vdGhlck9uZS5yZWdpc3RlclBsdWdpbnMoWydDU1MnLCdTdXBlckNsZWFuJ10pOworICAgKgorICAgKiBpZiB5b3Ugd2FudCB0byB1c2UgYSBkaWZmZXJlbnQgc2V0IG9mIHBsdWdpbnMgZm9yIG9uZSBvciBtb3JlIG9mIHRoZQorICAgKiBlZGl0b3JzLgorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIGlmKHR5cGVvZiB4aW5oYV9wbHVnaW5zX3NwZWNpZmljID09ICdmdW5jdGlvbicpCisgIHsKKyAgICB4aW5oYV9lZGl0b3JzICAgPSBYaW5oYS5tYWtlRWRpdG9ycyh4aW5oYV9lZGl0b3JzLCB4aW5oYV9jb25maWcpOworICAgIAorICAgIC8vIFRvIG1ha2UgaXQgY2xlYXJlciBmb3IgcGVvcGxlIHByb3ZpZGUgYSAicmVtb3ZlIiBmdW5jdGlvbiBvbiB0aGUgYXJyYXkKKyAgICBQbHVnaW5zQXJyYXkgPSBmdW5jdGlvbihhcnIpCisgICAgeworICAgICAgUGx1Z2luc0FycmF5LnBhcmVudENvbnN0cnVjdG9yLmNhbGwodGhpcyk7CisgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB0aGlzLnB1c2goYXJyW2ldKTsKKyAgICB9OworICAgIAorICAgIC8vIE5vdGUgaW1wb3J0YW50LCBleHRlbmRpbmcgbXVzdCBoYXBwZW4gYmVmb3JlIGFkZGluZyBtb3JlIGZ1bmN0aW9ucyAKKyAgICAvLyB0byB0aGUgcHJvdG90eXBlLgorICAgIFhpbmhhLmV4dGVuZChQbHVnaW5zQXJyYXksIEFycmF5KTsKKyAgICAKKyAgICBQbHVnaW5zQXJyYXkucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHApCisgICAgeworICAgICAgaWYodHlwZW9mIHAgPT0gJ29iamVjdCcpCisgICAgICB7CisgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgdGhpcy5yZW1vdmUocFtpXSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0aGlzOworICAgICAgfQorICAgICAgCisgICAgICB2YXIgaWR4ID0gLTE7CisgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykKKyAgICAgIHsKKyAgICAgICAgCisgICAgICAgIGlmKHAgPT0gdGhpc1tpXSkgeyBpZHggPSBpOyBicmVhazsgfSAgICAgICAgCisgICAgICAgIAorICAgICAgfQorICAgICAgCisgICAgICBpZihpZHggPj0gMCkKKyAgICAgIHsKKyAgICAgICAgdGhpcy5zcGxpY2UoaWR4LCAxKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAKKyAgICBQbHVnaW5zQXJyYXkucHJvdG90eXBlLm9ubHkgICAgPSBmdW5jdGlvbihwKQorICAgIHsKKyAgICAgIC8vIEVucHR5IG91cnNlbGYKKyAgICAgIGlmKHRoaXMubGVuZ3RoKQorICAgICAgeworICAgICAgICB0aGlzLnNwbGljZSgwLHRoaXMubGVuZ3RoKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLy8gQWRkIHRoZW0gaW4KKyAgICAgIGlmKHR5cGVvZiBwID09ICdzdHJpbmcnKQorICAgICAgeworICAgICAgICBwID0gWyBwIF07CisgICAgICB9CisgICAgICAKKyAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwLmxlbmd0aDsgaSsrKQorICAgICAgeworICAgICAgICB0aGlzLnB1c2gocFtpXSk7CisgICAgICB9CisgICAgfQorICAgIAorICAgIGZvcih2YXIgaSBpbiB4aW5oYV9lZGl0b3JzKQorICAgIHsKKyAgICAgIHZhciBzcGVjaWZpY19wbHVnaW5zID0gbmV3IFBsdWdpbnNBcnJheSh4aW5oYV9wbHVnaW5zKTsKKyAgICAgIHZhciBwbHVnaW5zX3JldHVybmVkID0geGluaGFfcGx1Z2luc19zcGVjaWZpYyhzcGVjaWZpY19wbHVnaW5zLCB4aW5oYV9lZGl0b3JzW2ldLl90ZXh0QXJlYSwgeGluaGFfZWRpdG9yc1tpXSk7CisgICAgICAKKyAgICAgIC8vIE5vdGUgdGhhdCBpZiB0aGV5IGRvbid0IHJldHVybiBhbnl0aGluZywgaXQgd2lsbCBwcm9iYWJseSBzdGlsbCB3b3JrCisgICAgICAvLyBkdWUgdG8gcmVmZXJlbmNlcyBhbmQgc3VjaAorICAgICAgaWYodHlwZW9mIHBsdWdpbnNfcmV0dXJuZWQgPT0gJ29iamVjdCcpCisgICAgICB7CisgICAgICAgIHNwZWNpZmljX3BsdWdpbnMgPSBwbHVnaW5zX3JldHVybmVkOworICAgICAgfQorICAgICAgeGluaGFfZWRpdG9yc1tpXS5yZWdpc3RlclBsdWdpbnMocGFyc2VfcGx1Z2lucyhzcGVjaWZpY19wbHVnaW5zKSk7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIHhpbmhhX2VkaXRvcnMgICA9IFhpbmhhLm1ha2VFZGl0b3JzKHhpbmhhX2VkaXRvcnMsIHhpbmhhX2NvbmZpZywgeGluaGFfcGx1Z2lucyk7CisgIH0KKyAgCisKKyAgLyoqIFNURVAgNSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogSWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvZiBhbnkgb2YgdGhlCisgICAqIGVkaXRvcnMsICB0aGlzIGlzIHRoZSBwbGFjZSB0byBkbyB0aGF0LCBmb3IgZXhhbXBsZSB5b3UgbWlnaHQgd2FudCB0bworICAgKiBjaGFuZ2UgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2Ygb25lIG9mIHRoZSBlZGl0b3JzLCBsaWtlIHRoaXMuLi4KKyAgICoKKyAgICogICB4aW5oYV9lZGl0b3JzLm15VGV4dEFyZWEuY29uZmlnLndpZHRoICA9ICc2NDBweCc7CisgICAqICAgeGluaGFfZWRpdG9ycy5teVRleHRBcmVhLmNvbmZpZy5oZWlnaHQgPSAnNDgwcHgnOworICAgKgorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAKKyAgaWYodHlwZW9mIHhpbmhhX2NvbmZpZ19zcGVjaWZpYyA9PSAnZnVuY3Rpb24nKQorICB7CisgICAgZm9yKHZhciBpIGluIHhpbmhhX2VkaXRvcnMpCisgICAgeworICAgICAgdmFyIHJldHVybmVkX2NvbmZpZyA9ICB4aW5oYV9jb25maWdfc3BlY2lmaWMoeGluaGFfZWRpdG9yc1tpXS5jb25maWcsIHhpbmhhX2VkaXRvcnNbaV0uX3RleHRBcmVhLCB4aW5oYV9lZGl0b3JzW2ldKTsKKyAgICAgIAorICAgICAgLy8gSWYgdGhlIGZ1bmN0aW9uIGRvZXNuJ3QgcmV0dXJuIGFuIG9iamVjdCwgaXQgd2lsbCBzdGlsIHdvcmsgcHJvYmFibHkgCisgICAgICAvLyBhcyB4aW5oYV9jb25maWcuWFhYIGluIHRoZSBmdW5jdGlvbiB3aWxsIGJlIHdvcmtpbmcgb24gYSByZWZlcmVuY2UKKyAgICAgIGlmKHR5cGVvZiByZXR1cm5lZF9jb25maWcgPT0gJ29iamVjdCcpCisgICAgICB7CisgICAgICAgIHhpbmhhX2VkaXRvcnNbaV0uY29uZmlnID0gcmV0dXJuZWRfY29uZmlnOworICAgICAgfQorICAgIH0KKyAgfQorICAKKyAgCisgIC8qKiBTVEVQIDYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIEZpbmFsbHkgd2UgInN0YXJ0IiB0aGUgZWRpdG9ycywgdGhpcyB0dXJucyB0aGUgdGV4dGFyZWFzIGludG8KKyAgICogWGluaGEgZWRpdG9ycy4KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBYaW5oYS5zdGFydEVkaXRvcnMoeGluaGFfZWRpdG9ycyk7Cit9CisKK1hpbmhhLmFkZE9ubG9hZEhhbmRsZXIoeGluaGFfaW5pdCk7IC8vIHRoaXMgZXhlY3V0ZXMgdGhlIHhpbmhhX2luaXQgZnVuY3Rpb24gb24gcGFnZSBsb2FkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGRvZXMgbm90IGludGVyZmVyZSB3aXRoIHdpbmRvdy5vbmxvYWQgcHJvcGVydGllcyBzZXQgYnkgb3RoZXIgc2NyaXB0cworCisKKwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvWGluaGFMb2FkZXIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9YaW5oYUxvYWRlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYzgzYWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvWGluaGFMb2FkZXIuanMKQEAgLTAsMCArMSwyODMgQEAKK3ZhciBYaW5oYSA9IHt9OworCisvLyBBdXRvIGRldGVjdCBfZWRpdG9yX3VybCBpZiBpdCdzIG5vdCBzZXQuCitpZiAoIXdpbmRvdy5fZWRpdG9yX3VybCkgCit7CisgIChmdW5jdGlvbigpIC8vIHdyYXAgdGhpcyBpbiBhbiBhZC1ob2MgZnVuY3Rpb24gdG8gYXZvaWQgdW5lY2Vzc2FyeSBwb2xsdXRpb24gb2YgZ2xvYmFsIG5hbWVzcGFjZQorICB7CisgICAgLy8gQmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBET00gaXMgbG9hZGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gYWx3YXlzIHB1bGwgb3VyIHNjcmlwdCB0YWcuCisgICAgdmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7CisgICAgdmFyIHRoaXNfc2NyaXB0ID0gc2NyaXB0c1tzY3JpcHRzLmxlbmd0aCAtIDFdOworICAKKyAgICAvLyBXZSdsbCBhbGxvdyB0d28gd2F5cyB0byBzcGVjaWZ5IGFyZ3VtZW50cy4gIFdlJ2xsIGFjY2VwdCB0aGVtIGluIHRoZQorICAgIC8vIGFyZ3VtZW50IG9mIHRoZSBzY3JpcHQsIG9yIHdlJ2xsIGFjY2VwdCB0aGVtIGVtYmVkZGVkIGludG8gb3VyIHNjcmlwdCB0YWcuCisgICAgdmFyIGFyZ3MgPSB0aGlzX3NjcmlwdC5zcmMuc3BsaXQoJz8nKTsKKyAgICBhcmdzID0gYXJncy5sZW5ndGggPT0gMiA/IGFyZ3NbMV0uc3BsaXQoJyYnKSA6ICcnOworICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBhcmdzLmxlbmd0aDsgKytpbmRleCkgCisgICAgeworICAgICAgdmFyIGFyZyA9IGFyZ3NbaW5kZXhdLnNwbGl0KCc9Jyk7CisgICAgICBpZiAoYXJnLmxlbmd0aCA9PSAyKSAKKyAgICAgIHsKKyAgICAgICAgc3dpdGNoIChhcmdbMF0pCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlICdsYW5nJzoKKyAgICAgICAgICBjYXNlICdpY29ucyc6CisgICAgICAgICAgY2FzZSAnc2tpbic6CisgICAgICAgICAgY2FzZSAndXJsJzoKKyAgICAgICAgICAgIHdpbmRvd1snX2VkaXRvcl8nICsgYXJnWzBdXSA9IGFyZ1sxXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFdlIGNhbiBncmFiIHRoZSBzY3JpcHQgaW5uZXJIVE1MIGFuZCBleGVjdXRlIHRoYXQgdG8gY3V0IGRvd24gb24gc2NyaXB0CisgICAgLy8gdGFncy4gIFRoYW5rcyBKb2huIFJlc2lnIQorICAgIC8vIGh0dHA6Ly9lam9obi5vcmcvYmxvZy9kZWdyYWRpbmctc2NyaXB0LXRhZ3MvCisgICAgaWYgKHRoaXNfc2NyaXB0LmlubmVySFRNTC5yZXBsYWNlKC9ccysvLCAnJykpIAorICAgIHsKKyAgICAgIGV2YWwodGhpc19zY3JpcHQuaW5uZXJIVE1MKTsKKyAgICB9CisgICAgCisgICAgLy8gRGVmYXVsdCB2YWx1ZXMKKyAgICBfZWRpdG9yX2xhbmcgPSB3aW5kb3cuX2VkaXRvcl9sYW5nIHx8ICdlbic7CisgICAgCisgICAgLy8gQ2hvcCBvZmYgYW55IHF1ZXJ5IHN0cmluZy4gIENob3AgdGhlIGZpbGVuYW1lIG9mZiBvZiB0aGUgVVJMLgorICAgIF9lZGl0b3JfdXJsID0gd2luZG93Ll9lZGl0b3JfdXJsIHx8IHRoaXNfc2NyaXB0LnNyYy5zcGxpdCgnPycpWzBdLnNwbGl0KCcvJykuc2xpY2UoMCwgLTEpLmpvaW4oJy8nKTsKKworICB9KSgpCit9CitfZWRpdG9yX3VybCA9IF9lZGl0b3JfdXJsLnJlcGxhY2UoL1x4MmYqJC8sICcvJyk7CisKK1hpbmhhLmFndCAgICAgICA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTsKK1hpbmhhLmlzX2llICAgID0gKChYaW5oYS5hZ3QuaW5kZXhPZigibXNpZSIpICE9IC0xKSAmJiAoWGluaGEuYWd0LmluZGV4T2YoIm9wZXJhIikgPT0gLTEpKTsKK1hpbmhhLmllX3ZlcnNpb249IHBhcnNlRmxvYXQoWGluaGEuYWd0LnN1YnN0cmluZyhYaW5oYS5hZ3QuaW5kZXhPZigibXNpZSIpKzUpKTsKK1hpbmhhLmlzX29wZXJhICA9IChYaW5oYS5hZ3QuaW5kZXhPZigib3BlcmEiKSAhPSAtMSk7CitYaW5oYS5pc19raHRtbCAgPSAoWGluaGEuYWd0LmluZGV4T2YoImtodG1sIikgIT0gLTEpOworWGluaGEuaXNfd2Via2l0ICA9IChYaW5oYS5hZ3QuaW5kZXhPZigiYXBwbGV3ZWJraXQiKSAhPSAtMSk7CitYaW5oYS5pc19zYWZhcmkgID0gKFhpbmhhLmFndC5pbmRleE9mKCJzYWZhcmkiKSAhPSAtMSk7CitYaW5oYS5vcGVyYV92ZXJzaW9uID0gbmF2aWdhdG9yLmFwcFZlcnNpb24uc3Vic3RyaW5nKDAsIG5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoIiAiKSkqMTsKK1hpbmhhLmlzX21hYyAgID0gKFhpbmhhLmFndC5pbmRleE9mKCJtYWMiKSAhPSAtMSk7CitYaW5oYS5pc19tYWNfaWUgPSAoWGluaGEuaXNfaWUgJiYgWGluaGEuaXNfbWFjKTsKK1hpbmhhLmlzX3dpbl9pZSA9IChYaW5oYS5pc19pZSAmJiAhWGluaGEuaXNfbWFjKTsKK1hpbmhhLmlzX2dlY2tvICA9IChuYXZpZ2F0b3IucHJvZHVjdCA9PSAiR2Vja28iICYmICFYaW5oYS5pc19zYWZhcmkpOyAvLyBTYWZhcmkgbGllcyEKK1hpbmhhLmlzUnVuTG9jYWxseSA9IGRvY3VtZW50LlVSTC50b0xvd2VyQ2FzZSgpLnNlYXJjaCgvXmZpbGU6LykgIT0gLTE7CitYaW5oYS5pc19kZXNpZ25Nb2RlID0gKHR5cGVvZiBkb2N1bWVudC5kZXNpZ25Nb2RlICE9ICd1bmRlZmluZWQnICYmICFYaW5oYS5pc19pZSk7IC8vIElFIGhhcyBkZXNpZ25Nb2RlLCBidXQgd2UncmUgbm90IHVzaW5nIGl0CitYaW5oYS5pc1N1cHBvcnRlZEJyb3dzZXIgPSBYaW5oYS5pc19nZWNrbyB8fCAoWGluaGEuaXNfb3BlcmEgJiYgWGluaGEub3BlcmFfdmVyc2lvbiA+PSA5LjEpIHx8IFhpbmhhLmllX3ZlcnNpb24gPj0gNS41IHx8IFhpbmhhLmlzX3NhZmFyaTsKKworWGluaGEubG9hZFBsdWdpbnMgPSBmdW5jdGlvbihwbHVnaW5zLCBjYWxsYmFja0lmTm90UmVhZHkpCit7CisgIGlmICggIVhpbmhhLmlzU3VwcG9ydGVkQnJvd3NlciApIHJldHVybjsKKyAgCisgIFhpbmhhLmxvYWRTdHlsZSh0eXBlb2YgX2VkaXRvcl9jc3MgPT0gInN0cmluZyIgPyBfZWRpdG9yX2NzcyA6ICJYaW5oYS5jc3MiLCJYaW5oYUNvcmVEZXNpZ24iKTsKKyAgWGluaGEuY3JlYXRlTG9hZGluZ01lc3NhZ2VzKHhpbmhhX2VkaXRvcnMpOworICB2YXIgbG9hZGluZ01lc3NhZ2VzID0gWGluaGEubG9hZGluZ01lc3NhZ2VzOworICBYaW5oYS5fbG9hZGJhY2soX2VkaXRvcl91cmwgKyAiWGluaGFDb3JlLmpzIixmdW5jdGlvbiAoKSB7CisgICAgWGluaGEucmVtb3ZlTG9hZGluZ01lc3NhZ2VzKHhpbmhhX2VkaXRvcnMpOyAgCisgICAgWGluaGEuY3JlYXRlTG9hZGluZ01lc3NhZ2VzKHhpbmhhX2VkaXRvcnMpOyAgCisgICAgY2FsbGJhY2tJZk5vdFJlYWR5KCkgCisgIH0pOworICByZXR1cm4gZmFsc2U7Cit9CisKK1hpbmhhLl9sb2FkYmFjayA9IGZ1bmN0aW9uKFVybCwgQ2FsbGJhY2ssIFNjb3BlLCBCb251cykKK3sgIAorICB2YXIgVCA9ICFYaW5oYS5pc19pZSA/ICJvbmxvYWQiIDogJ29ucmVhZHlzdGF0ZWNoYW5nZSc7CisgIHZhciBTID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CisgIFMudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiOworICBTLnNyYyA9IFVybDsKKyAgaWYgKCBDYWxsYmFjayApCisgIHsKKyAgICBTW1RdID0gZnVuY3Rpb24oKQorICAgIHsgICAgICAKKyAgICAgIGlmICggWGluaGEuaXNfaWUgJiYgKCAhICggL2xvYWRlZHxjb21wbGV0ZS8udGVzdCh3aW5kb3cuZXZlbnQuc3JjRWxlbWVudC5yZWFkeVN0YXRlKSApICkgKQorICAgICAgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICAKKyAgICAgIENhbGxiYWNrLmNhbGwoU2NvcGUgPyBTY29wZSA6IHRoaXMsIEJvbnVzKTsKKyAgICAgIFNbVF0gPSBudWxsOworICAgIH07CisgIH0KKyAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZChTKTsKK307CisKK1hpbmhhLmdldEVsZW1lbnRUb3BMZWZ0ID0gZnVuY3Rpb24oZWxlbWVudCkgCit7CisgIHZhciBjdXJsZWZ0ID0gMDsKKyAgdmFyIGN1cnRvcCA9IDA7CisgIGlmIChlbGVtZW50Lm9mZnNldFBhcmVudCkgCisgIHsKKyAgICBjdXJsZWZ0ID0gZWxlbWVudC5vZmZzZXRMZWZ0CisgICAgY3VydG9wID0gZWxlbWVudC5vZmZzZXRUb3AKKyAgICB3aGlsZSAoZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50KSAKKyAgICB7CisgICAgICBjdXJsZWZ0ICs9IGVsZW1lbnQub2Zmc2V0TGVmdAorICAgICAgY3VydG9wICs9IGVsZW1lbnQub2Zmc2V0VG9wCisgICAgfQorICB9CisgIHJldHVybiB7IHRvcDpjdXJ0b3AsIGxlZnQ6Y3VybGVmdCB9OworfQorCisvLyBmaW5kIFggcG9zaXRpb24gb2YgYW4gZWxlbWVudAorWGluaGEuZmluZFBvc1ggPSBmdW5jdGlvbihvYmopCit7CisgIHZhciBjdXJsZWZ0ID0gMDsKKyAgaWYgKCBvYmoub2Zmc2V0UGFyZW50ICkKKyAgeworICAgIHJldHVybiBYaW5oYS5nZXRFbGVtZW50VG9wTGVmdChvYmopLmxlZnQ7ICAgIAorICB9CisgIGVsc2UgaWYgKCBvYmoueCApCisgIHsKKyAgICBjdXJsZWZ0ICs9IG9iai54OworICB9CisgIHJldHVybiBjdXJsZWZ0OworfTsKKworLy8gZmluZCBZIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQKK1hpbmhhLmZpbmRQb3NZID0gZnVuY3Rpb24ob2JqKQoreworICB2YXIgY3VydG9wID0gMDsKKyAgaWYgKCBvYmoub2Zmc2V0UGFyZW50ICkKKyAgeworICAgIHJldHVybiBYaW5oYS5nZXRFbGVtZW50VG9wTGVmdChvYmopLnRvcDsgICAgCisgIH0KKyAgZWxzZSBpZiAoIG9iai55ICkKKyAgeworICAgIGN1cnRvcCArPSBvYmoueTsKKyAgfQorICByZXR1cm4gY3VydG9wOworfTsKKworWGluaGEuY3JlYXRlTG9hZGluZ01lc3NhZ2VzID0gZnVuY3Rpb24oeGluaGFfZWRpdG9ycykKK3sKKyAgaWYgKCBYaW5oYS5sb2FkaW5nTWVzc2FnZXMgfHwgIVhpbmhhLmlzU3VwcG9ydGVkQnJvd3NlciApIAorICB7CisgICAgcmV0dXJuOworICB9CisgIFhpbmhhLmxvYWRpbmdNZXNzYWdlcyA9IFtdOworICAKKyAgZm9yICh2YXIgaT0wO2k8eGluaGFfZWRpdG9ycy5sZW5ndGg7aSsrKQorICB7CisgICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh4aW5oYV9lZGl0b3JzW2ldKSkKKyAgICB7CisJICBjb250aW51ZTsKKyAgICB9CisgICAgWGluaGEubG9hZGluZ01lc3NhZ2VzLnB1c2goWGluaGEuY3JlYXRlTG9hZGluZ01lc3NhZ2UoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoeGluaGFfZWRpdG9yc1tpXSkpKTsKKyAgfQorfQorCitYaW5oYS5jcmVhdGVMb2FkaW5nTWVzc2FnZSA9IGZ1bmN0aW9uKHRleHRhcmVhLHRleHQpCit7IAorICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkaW5nXyIgKyB0ZXh0YXJlYS5pZCkgfHwgIVhpbmhhLmlzU3VwcG9ydGVkQnJvd3NlcikKKyAgeworICAgIHJldHVybjsKKyAgfQorICAvLyBDcmVhdGUgYW5kIHNob3cgdGhlIG1haW4gbG9hZGluZyBtZXNzYWdlIGFuZCB0aGUgc3ViIGxvYWRpbmcgbWVzc2FnZSBmb3IgZGV0YWlscyBvZiBsb2FkaW5nIGFjdGlvbnMKKyAgLy8gZ2xvYmFsIGVsZW1lbnQKKyAgdmFyIGxvYWRpbmdfbWVzc2FnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICBsb2FkaW5nX21lc3NhZ2UuaWQgPSAibG9hZGluZ18iICsgdGV4dGFyZWEuaWQ7CisgIGxvYWRpbmdfbWVzc2FnZS5jbGFzc05hbWUgPSAibG9hZGluZyI7CisgIAorICBsb2FkaW5nX21lc3NhZ2Uuc3R5bGUubGVmdCA9IChYaW5oYS5maW5kUG9zWCh0ZXh0YXJlYSkgKyB0ZXh0YXJlYS5vZmZzZXRXaWR0aCAvIDIpIC0gMTA2ICsgICdweCc7CisgIGxvYWRpbmdfbWVzc2FnZS5zdHlsZS50b3AgPSAoWGluaGEuZmluZFBvc1kodGV4dGFyZWEpICsgdGV4dGFyZWEub2Zmc2V0SGVpZ2h0IC8gMikgLSA1MCArICAncHgnOworICAvLyBtYWluIHN0YXRpYyBtZXNzYWdlCisgIHZhciBsb2FkaW5nX21haW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgbG9hZGluZ19tYWluLmNsYXNzTmFtZSA9ICJsb2FkaW5nX21haW4iOworICBsb2FkaW5nX21haW4uaWQgPSAibG9hZGluZ19tYWluXyIgKyB0ZXh0YXJlYS5pZDsKKyAgbG9hZGluZ19tYWluLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFhpbmhhLl9sYygiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIikpKTsKKyAgLy8gc3ViIGR5bmFtaWMgbWVzc2FnZQorICB2YXIgbG9hZGluZ19zdWIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgbG9hZGluZ19zdWIuY2xhc3NOYW1lID0gImxvYWRpbmdfc3ViIjsKKyAgbG9hZGluZ19zdWIuaWQgPSAibG9hZGluZ19zdWJfIiArIHRleHRhcmVhLmlkOworICB0ZXh0ID0gdGV4dCA/IHRleHQgOiBYaW5oYS5fbGMoIkxvYWRpbmcgQ29yZSIpOworICBsb2FkaW5nX3N1Yi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7CisgIGxvYWRpbmdfbWVzc2FnZS5hcHBlbmRDaGlsZChsb2FkaW5nX21haW4pOworICBsb2FkaW5nX21lc3NhZ2UuYXBwZW5kQ2hpbGQobG9hZGluZ19zdWIpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxvYWRpbmdfbWVzc2FnZSk7CisgIAorICByZXR1cm4gbG9hZGluZ19zdWI7Cit9CisKK1hpbmhhLmxvYWRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlLCBpZCkKK3sKKyAgdmFyIHVybCA9IF9lZGl0b3JfdXJsIHx8ICcnOworICAKKyAgdXJsICs9IHN0eWxlOworIAorICB2YXIgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07CisgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpOworICBsaW5rLnJlbCA9ICJzdHlsZXNoZWV0IjsKKyAgbGluay5ocmVmID0gdXJsOworICBpZiAoaWQpIGxpbmsuaWQgPSBpZDsKKyAgaGVhZC5hcHBlbmRDaGlsZChsaW5rKTsKK307CitYaW5oYS5fbGMgPSBmdW5jdGlvbihzdHJpbmcpIHtyZXR1cm4gc3RyaW5nO30KKworWGluaGEuX2FkZEV2ZW50ID0gZnVuY3Rpb24oZWwsIGV2bmFtZSwgZnVuYykgCit7CisgIGlmICggZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciApCisgIHsKKyAgICBlbC5hZGRFdmVudExpc3RlbmVyKGV2bmFtZSwgZnVuYywgdHJ1ZSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgZWwuYXR0YWNoRXZlbnQoIm9uIiArIGV2bmFtZSwgZnVuYyk7CisgIH0KK30KK1hpbmhhLmFkZE9ubG9hZEhhbmRsZXIgPSBmdW5jdGlvbiAoZnVuYykKK3sKKyAgLy8gRGVhbiBFZHdhcmRzL01hdHRoaWFzIE1pbGxlci9Kb2huIFJlc2lnIAorICAvLyBodHRwOi8vZGVhbi5lZHdhcmRzLm5hbWUvd2VibG9nLzIwMDYvMDYvYWdhaW4vCisgIC8vIElFIHBhcnQgZnJvbSBqUXVlcnkKKyAgCisgIAorICB2YXIgaW5pdCA9IGZ1bmN0aW9uICgpCisgIHsKKyAgICAvLyBxdWl0IGlmIHRoaXMgZnVuY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQKKyAgICBpZiAoYXJndW1lbnRzLmNhbGxlZS5kb25lKSByZXR1cm47CisgICAgLy8gZmxhZyB0aGlzIGZ1bmN0aW9uIHNvIHdlIGRvbid0IGRvIHRoZSBzYW1lIHRoaW5nIHR3aWNlCisgICAgYXJndW1lbnRzLmNhbGxlZS5kb25lID0gdHJ1ZTsKKyAgICAvLyBraWxsIHRoZSB0aW1lcgorICAgIGlmIChYaW5oYS5vbmxvYWRUaW1lcikgY2xlYXJJbnRlcnZhbChYaW5oYS5vbmxvYWRUaW1lcik7CisgICAgCisgICAgZnVuYy5jYWxsKCk7CisgIH0KKyAgaWYgKFhpbmhhLmlzX2llKQorICB7CisgICAgLy8gZW5zdXJlIGZpcmluZyBiZWZvcmUgb25sb2FkLAorICAgIC8vIG1heWJlIGxhdGUgYnV0IHNhZmUgYWxzbyBmb3IgaWZyYW1lcworICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBmdW5jdGlvbigpeworICAgICAgaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiICkgeworICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCggIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIGFyZ3VtZW50cy5jYWxsZWUgKTsKKyAgICAgICAgaW5pdCgpOworICAgICAgfQorICAgIH0pOworICAgIGlmICggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsICYmIHR5cGVvZiB3aW5kb3cuZnJhbWVFbGVtZW50ID09PSAidW5kZWZpbmVkIiApIChmdW5jdGlvbigpeworICAgICAgaWYgKGFyZ3VtZW50cy5jYWxsZWUuZG9uZSkgcmV0dXJuOworICAgICAgdHJ5IHsKKyAgICAgICAgLy8gSWYgSUUgaXMgdXNlZCwgdXNlIHRoZSB0cmljayBieSBEaWVnbyBQZXJpbmkKKyAgICAgICAgLy8gaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0lFQ29udGVudExvYWRlZC8KKyAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iik7CisgICAgICB9IGNhdGNoKCBlcnJvciApIHsKKyAgICAgICAgc2V0VGltZW91dCggYXJndW1lbnRzLmNhbGxlZSwgMCApOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICAvLyBhbmQgZXhlY3V0ZSBhbnkgd2FpdGluZyBmdW5jdGlvbnMKKyAgICAgIGluaXQoKTsKKyAgICB9KSgpOworICB9CisgIGVsc2UgaWYgKC9XZWJLaXQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKQorICB7CisgICAgWGluaGEub25sb2FkVGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpCisgICAgeworICAgICAgaWYgKC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZG9jdW1lbnQucmVhZHlTdGF0ZSkpCisgICAgICB7CisgICAgICAgIGluaXQoKTsgLy8gY2FsbCB0aGUgb25sb2FkIGhhbmRsZXIKKyAgICAgIH0KKyAgICB9LCAxMCk7CisgIH0KKyAgZWxzZSAvKiBmb3IgTW96aWxsYS9PcGVyYTkgKi8KKyAgeworICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBpbml0LCBmYWxzZSk7ICAKKyAgfQorfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL1hpbmhhTG9hZGVyX3JlYWRtZS50eHQgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9YaW5oYUxvYWRlcl9yZWFkbWUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvWGluaGFMb2FkZXJfcmVhZG1lLnR4dApyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvWGluaGFMb2FkZXJfcmVhZG1lLnR4dApkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvY29tcHJlc3Npb25fcmVhZG1lLnR4dCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2NvbXByZXNzaW9uX3JlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxMWY1MgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2NvbXByZXNzaW9uX3JlYWRtZS50eHQKQEAgLTAsMCArMSwxMCBAQAorWW91IGNhbiB1c2UgdGhlIGNvbnRyaWIvY29tcHJlc3MucGhwIHRvIGJhdGNoLWNvbnZlcnQgdGhlIGN1cnJlbnQgWGluaGEgc25hcHNob3QuDQorDQorTWFrZSBzdXJlIHlvdSBoYXZlIFBIUCBpbnN0YWxsZWQgb24geW91ciBtYWNoaW5lLiBUbyB1c2UgdGhpcyBzY3JpcHQsIG9wZW4gaXQgaW4gYSB0ZXh0IGVkaXRvciwgY29tbWVudCBvdXQgdGhlIGRpZSgpIGNvbW1hbmQgYXQgdGhlIHRvcCBhbmQgcnVuIHZpYSAicGhwIGNvbXByZXNzLnBocCIgZnJvbSB0aGUgY29tbWFuZC1saW5lLg0KKyANCitZb3UgY2FuIHVzZSB0aGUgY29udHJpYi9jb21wcmVzcy5iYXQgdG8gY29tcHJlc3MgSmF2YVNjcmlwdCBmaWxlcyBieSBkcmFnJmRyb3AgaW4gV2luZG93cy4NCisNCitQbGVhc2UgYmUgYXdhcmUgdGhhdCB0aGUgbGFuZ3VhZ2UgZmlsZXMgY2Fubm90IGJlIGNvbXByZXNzZWQuDQorDQorSWYgeW91IHdhbnQgdGhlIG9yaWdpbmFsIGZpbGVzIHRvIGJlIGtlcHQsIG9wZW4gY29tcHJlc3MuYmF0IGFuZCByZW12b3ZlIHRoZSAjIGluIHRoZSBsaW5lDQorIyBGT1IgJSVWIElOICglKikgRE8gZGVsICUlVl91bmNvbXByZXNzZWQuanMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9DdXN0b21QbHVnaW5zLmh0bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9DdXN0b21QbHVnaW5zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VlYmVhMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2V4YW1wbGVzL0N1c3RvbVBsdWdpbnMuaHRtbApAQCAtMCwwICsxLDExMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKyAgPHRpdGxlPkN1c3RvbSBQbHVnaW5zIFhpbmhhIExvYWRpbmcgRXhhbXBsZTwvdGl0bGU+CisKKyAgPHNjcmlwdCBzcmM9Ii4uL1hpbmhhRWFzeS5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAKKyAgICAvLyBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlLCBvcHRpb25hbC4uLgorICAgIHhpbmhhX29wdGlvbnMgPSAKKyAgICB7CisgICAgICAvLyBTcGVjaWZ5IGxhbmd1YWdlIGFuZCBza2luCisgICAgICBfZWRpdG9yX2xhbmc6ICAgJ2VuJywgICAgICAgICAvLyBMYW5ndWFnZSB0byB1c2UKKyAgICAgIF9lZGl0b3Jfc2tpbjogICAnc2lsdmEnLCAgICAgIC8vIE5hbWUgb2YgdGhlIHNraW4gdG8gdXNlIChzZWUgc2tpbnMgZGlyZWN0b3J5IGZvciBhdmFpbGFibGUgc2tpbnMpCisgICAgICAKKyAgICAgIC8vIFNpbXBseSBhIENTUyBzZWxlY3RvciB0byBwaWNrIHRoZSB0ZXh0YXJlYShzKSB5b3Ugd2FudCwgZWcgJ3RleHRhcmVhJworICAgICAgLy8gIGNvbnZlcnRzIGFsbCB0ZXh0YXJlYSwgb3IgdGV4dGFyZWEubXkteGluaGEsdGV4dGFyZWEueW91ci14aW5oYSAKKyAgICAgIC8vICB3b3VsZCBjb252ZXJ0IG9ubHkgdGhvc2UgdGV4dGFyZWFzIHdpdGggdGhlIG15LXhpbmhhIG9yIHlvdXIteGluaGEgCisgICAgICAvLyAgY2xhc3NlcyBvbiB0aGVtCisgICAgICB4aW5oYV9lZGl0b3JzOiAgJ3RleHRhcmVhJywgICAKKworICAgICAgLy8gUGx1Z2lucyBjYW4gYmUgYSBkZWZhdWx0IHNldCAtICdjb21tb24nLCAnbWluaW1hbCcsICdsb2FkZWQnCisgICAgICAvLyAgIHhpbmhhX3BsdWdpbnM6ICdtaW5pbWFsJworICAgICAgLy8KKyAgICAgIC8vIG9yIHlvdSBjYW4gc3BlY2lmeSB0aGUgcGx1Z2lucyB5b3Ugd2FudCBleGFjdGx5CisgICAgICAvLyAgIHhpbmhhX3BsdWdpbnM6IFsgJ0xpbmtlcicsICdTdHlsaXN0JyBdCisgICAgICAvLworICAgICAgLy8gb3IgeW91IGNhbiBkbyBib3RoIHRvIGFkZCBleHRyYXMgdG8gdGhlIHNldAorICAgICAgLy8gICB4aW5oYV9wYXNzX3RvX3BocF9iYWNrZW5kOiBbJ21pbmltYWwnLCAnTGlua2VyJyBdCisgICAgICB4aW5oYV9wbHVnaW5zOiAgWyAnbWluaW1hbCcsIHsgZnJvbTogJy9leGFtcGxlcy9jdXN0b21fcGx1Z2lucycsIGxvYWQ6ICdTdGF0dXNCYXJNZXNzYWdlJyB9IF0sCisgICAgICAKKyAgICAgIC8vIFRoZSBkZWZhdWx0IHRvb2xiYXIgY2FuIGJlIG9uZSBvZiB0aGUgcHJlLWRlZmluZWQgdG9vbGJhcnMsIAorICAgICAgLy8gICAnZGVmYXVsdCcsICdtaW5pbWFsJywgJ21pbmltYWwrZm9udHMnLCAnc3VwZXJtaW5pJworICAgICAgLy8gICB4aW5oYV90b29sYmFyOiAnbWluaW1hbCtmb250cycKKyAgICAgIC8vCisgICAgICAvLyBvciB5b3UgYW4gc3BlY2lmeSBhIHRvb2xiYXIgc3RydWN0dXJlIGNvbXBsZXRlbHkKKyAgICAgIC8vICAgeGluaGFfdG9vbGJhcjogWyBbInBvcHVwZWRpdG9yIl0sWyJzZXBhcmF0b3IiLCJib2xkIiwiaXRhbGljIiwidW5kZXJsaW5lIiwic3RyaWtldGhyb3VnaCIsInN1cGVyc2NyaXB0Il0gXQorICAgICAgeGluaGFfdG9vbGJhcjogICdtaW5pbWFsK2ZvbnRzJywKKyAgICAgIAorICAgICAgLy8gVG8gc3BlY2lmeSBhIHN0eWxlc2hlZXQgdG8gbG9hZCBpbnNpZGUgdGhlIGVkaXRvciAodG8gc3R5bGUgdGhlIGNvbnRlbnRzCisgICAgICAvLyAgdGhlIHVzZXIgaXMgZWRpdGluZyksIHNpbXBseSBzcGVjaWZ5IHRoZSBwYXRoIHRvIGl0IGhlcmUsIG5vdGUgdGhhdCBpbgorICAgICAgLy8gIHRoaXMgZXhhbXBsZSB3ZSB1c2UgX2VkaXRvcl91cmwgdG8gcmVmZXJlbmVjIHRoZSBYaW5oYSBkaXJlY3RvcnkKKyAgICAgIC8vICB5b3Ugd291bGQgcHJvYmFibHkgcmVmZXJlbmNlIGl0IGFic29sdXRlbHkuCisgICAgICAvLworICAgICAgLy8gTm90ZSBhcyB3aXRoIGFsbCB0aGVzZSBvcHRpb25zLCBpdCdzIG9wdGlvbmFsLCBsZWF2ZSBpdCBvdXQgaWYgeW91IAorICAgICAgLy8gIGRvbid0IHdhbnQgdG8gbG9hZCBhIHN0eWxlc2hlZXQgaW4gdGhlIGVkaXRvcgorICAgICAgeGluaGFfc3R5bGVzaGVldDogX2VkaXRvcl91cmwgKyAnZXhhbXBsZXMvZmlsZXMvc3R5bGlzdC5jc3MnLCAKKyAgICAgIAorICAgICAgLy8gVGhpcyBpcyB3aGVyZSB5b3Ugc2V0IHRoZSBvdGhlciBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZ2xvYmFsbHkKKyAgICAgIHhpbmhhX2NvbmZpZzogICAgICAgICAgICBmdW5jdGlvbih4aW5oYV9jb25maWcpIAorICAgICAgeworCisgICAgICB9LAorICAgICAgCisgICAgICAvLyBIZXJlIGlzIHdoZXJlIHlvdSBjYW4gY3VzdG9taXNlIGNvbmZpZ3MgZm9yIGVhY2ggZWRpdG9yIGFyZWEKKyAgICAgIHhpbmhhX2NvbmZpZ19zcGVjaWZpYzogICBmdW5jdGlvbih4aW5oYV9jb25maWcsIHRleHRhcmVhKQorICAgICAgeworCisgICAgICB9LAorICAgICAgCisgICAgICAvLyBIZXJlIHlvdSBjYW4gbGltaXQgdGhlIHBsdWdpbnMgdG8gY2VydGFpbiBlZGl0b3IgYXJlYXMKKyAgICAgIC8vICAgbm90ZSB0aGF0IHlvdSBvbmx5IGNhbiB1c2UgdGhlIHBsdWdpbnMgeW91IHNwZWNpZmllZCAKKyAgICAgIC8vICAgYWJvdmUgaW4geGluaGFfcGx1Z2lucywgeW91IGp1c3QgZG9uJ3QgaGF2ZSB0byB1c2UgYWxsIG9mIAorICAgICAgLy8gICB0aGVtIGJ1dCB0aGF0IGNvbnRyb2xzIHdoYXQgY29kZSBnZXRzIGxvYWRlZCB0aGlzIGNvbnRvbHMKKyAgICAgIC8vICAgd2hpY2ggZWRpdG9ycyBnZXQgdGhlbQorICAgICAgeGluaGFfcGx1Z2luc19zcGVjaWZpYzogIGZ1bmN0aW9uKHhpbmhhX3BsdWdpbnMsIHRleHRhcmVhKQorICAgICAgeworCisgICAgICB9CisgICAgfQorCisgIDwvc2NyaXB0PgorCisKKzwvaGVhZD4KKworPGJvZHk+CisgIDxoMT5DdXN0b20gUGx1Z2lucyBOZXdiaWUgR3VpZGUgRXhhbXBsZTwvaDE+CisgIDxwPiBUaGlzIGV4YW1wbGUgc2hvd3MgaG93IHlvdSBjYW4gbG9hZCBjdXN0b20gcGx1Z2lucyB3aGljaCBhcmUgb3V0c2lkZSBvZiB0aGUgWGluaGEgc3RhbmRhcmQgcGx1Z2lucyBsb2NhdGlvbi4gPC9wPgorICAKKyAgPHA+IFlvdSBjYW4gZG8gdGhpcyBldmVuIGlmIHlvdSB1c2UgWGluaGEgZnJvbSBhIENETiBhbmQgaGF2ZSB5b3VyIGN1c3RvbSBwbHVnaW5zIGxvY2FsbHkuIDwvcD4KKyAgCisgIDxwPkNsaWNrIGludG8gdGhlIGVkaXRvciBhbmQgbG9vayBpbiB0aGUgc3RhdHVzIGJhciwgb24gdGhlIHJpZ2h0IHlvdSB3aWxsIHNlZSB0aGUgbWVzc2FnZSBwcmludGVkIGJ5IHRoaXMgKHNpbGx5KSBjdXN0b20gcGx1Z2luIHdoaWNoIGhhcyBiZWVuIGxvYWRlZCBmcm9tIC9leGFtcGxlcy9jdXN0b21fcGx1Z2lucy48L3A+CisKKyAgCisgIDxkaXY+CisgICAgPGZvcm0gb25zdWJtaXQ9ImFsZXJ0KHRoaXMubXlUZXh0QXJlYS52YWx1ZSk7IHJldHVybiBmYWxzZTsiIHN0eWxlPSIiPgorICAgIAorICAgICAgPHRleHRhcmVhIGlkPSJmaXJzdE9uZSIgbmFtZT0iZmlyc3RPbmUiIHN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMGVtOyI+CisgICAgICAmbHQ7cCZndDtMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdC4KKyAgICAgIEFsaXF1YW0gZXQgdGVsbHVzIHZpdGFlIGp1c3RvIHZhcml1cyBwbGFjZXJhdC4gU3VzcGVuZGlzc2UgaWFjdWxpcworICAgICAgdmVsaXQgc2VtcGVyIGRvbG9yLiBEb25lYyBncmF2aWRhIHRpbmNpZHVudCBtaS4gQ3VyYWJpdHVyIHRyaXN0aXF1ZQorICAgICAgYW50ZSBlbGVtZW50dW0gdHVycGlzLiBBbGlxdWFtIG5pc2wuIE51bGxhIHBvc3VlcmUgbmVxdWUgbm9uCisgICAgICB0ZWxsdXMuIE1vcmJpIHZlbCBuaWJoLiBDdW0gc29jaWlzIG5hdG9xdWUgcGVuYXRpYnVzIGV0IG1hZ25pcyBkaXMKKyAgICAgIHBhcnR1cmllbnQgbW9udGVzLCBuYXNjZXR1ciByaWRpY3VsdXMgbXVzLiBOYW0gbmVjIHdpc2kuIEluIHdpc2kuCisgICAgICBDdXJhYml0dXIgcGhhcmV0cmEgYmliZW5kdW0gbGVjdHVzLiZsdDsvcCZndDsKKyAgICAgIDwvdGV4dGFyZWE+CisKKyAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTVUJNSVQiIC8+CisgICAgPC9mb3JtPgorICA8L2Rpdj4KKyAgICAgIAorICAgIAorICA8cD5Zb3UgY2FuIHNlZSBpbiB0aGUgc291cmNlIG9mIHRoaXMgcGFnZSBob3cgd2UgZG8gdGhpcywgc2ltcGx5IGJ5IHNwZWNpZnlpbmcuLi48L3A+CisgIAorICA8cHJlPgorICAgIHhpbmhhX3BsdWdpbnM6ICBbICdtaW5pbWFsJywgeyBmcm9tOiAnL2V4YW1wbGVzL2N1c3RvbV9wbHVnaW5zJywgbG9hZDogJ1N0YXR1c0Jhck1lc3NhZ2UnIH0gXQorICA8L3ByZT4KKyAgCisgIDxwPi4uLiBhcyBhbiBvcHRpb24gdG8gWGluaGEsIHdoaWNoIHNheXMsIHRvIGxvYWQgdGhlIHN0YW5kYXJkICdtaW5pbWFsJyBwbHVnaW5zIGFuZCBhbHNvLCBmcm9tICcvZXhhbXBsZXMvY3VzdG9tX3BsdWdpbnMnIGRpcmVjdG9yeSwgbG9hZCAnU3RhdHVzQmFyTWVzc2FnZScgcGx1Z2luLCB5b3UgY291bGQgb2YgY291cnNlIDx0dD5sb2FkOiBbJ1N0YXR1c0Jhck1lc3NhZ2UnLCAnQW5vdGhlckN1c3RvbScgXTwvdHQ+IHRvIGxvYWQgbW9yZSB0aGFuIG9uZSB0aGluZyBmcm9tIHRoZSBzYW1lIGRpcmVjdG9yeS48L3A+CisgIAorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2V4YW1wbGVzL0V4dGVuZGVkRGVtby5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvRXh0ZW5kZWREZW1vLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMzMDM3MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2V4YW1wbGVzL0V4dGVuZGVkRGVtby5odG1sCkBAIC0wLDAgKzEsMTYgQEAKKzxodG1sPg0KKzxoZWFkPjx0aXRsZT5YaW5oYSBFeHRlbmRlZCBFeGFtcGxlPC90aXRsZT48L2hlYWQ+DQorICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOm5vVGFicz10cnVlOnRhYlNpemU9MjppbmRlbnRTaXplPTI6LS0NCisgICAgLS0gIFhpbmhhIGV4YW1wbGUgZnJhbWVzZXQuDQorICAgIC0tDQorICAgIC0tICAkSGVhZFVSTDogaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvZXhhbXBsZXMvRXh0ZW5kZWREZW1vLmh0bWwgJA0KKyAgICAtLSAgJExhc3RDaGFuZ2VkRGF0ZTogMjAwOC0xMC0xMyAwNjo0Mjo0MiArMTMwMCAoTW9uLCAxMyBPY3QgMjAwOCkgJA0KKyAgICAtLSAgJExhc3RDaGFuZ2VkUmV2aXNpb246IDEwODQgJA0KKyAgICAtLSAgJExhc3RDaGFuZ2VkQnk6IHJheSAkDQorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4NCisNCisgIDxmcmFtZXNldCBjb2xzPSIyNDAsKiI+DQorICAgIDxmcmFtZSBzcmM9ImZpbGVzL2V4dF9leGFtcGxlLW1lbnUucGhwIiBuYW1lPSJtZW51IiBpZD0ibWVudSI+DQorICAgIDxmcmFtZSBzcmM9ImFib3V0OmJsYW5rIiBuYW1lPSJib2R5IiBpZD0iYm9keSI+DQorICA8L2ZyYW1lc2V0Pg0KKzwvaHRtbD4NCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9OZXdiaWUuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2V4YW1wbGVzL05ld2JpZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYjA0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9OZXdiaWUuaHRtbApAQCAtMCwwICsxLDE1OCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKyAgPHRpdGxlPlN0YW5kYXJkIFhpbmhhIExvYWRpbmcgRXhhbXBsZSAoTmV3YmllIEd1aWRlKTwvdGl0bGU+CisKKyAgPHNjcmlwdCBzcmM9Ii4uL1hpbmhhRWFzeS5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAKKyAgICAvLyBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlLCBvcHRpb25hbC4uLgorICAgIHhpbmhhX29wdGlvbnMgPSAKKyAgICB7CisgICAgICAvLyBTcGVjaWZ5IGxhbmd1YWdlIGFuZCBza2luCisgICAgICBfZWRpdG9yX2xhbmc6ICAgJ2VuJywgICAgICAgICAvLyBMYW5ndWFnZSB0byB1c2UKKyAgICAgIF9lZGl0b3Jfc2tpbjogICAnc2lsdmEnLCAgICAgIC8vIE5hbWUgb2YgdGhlIHNraW4gdG8gdXNlIChzZWUgc2tpbnMgZGlyZWN0b3J5IGZvciBhdmFpbGFibGUgc2tpbnMpCisgICAgICAKKyAgICAgIC8vIFNpbXBseSBhIENTUyBzZWxlY3RvciB0byBwaWNrIHRoZSB0ZXh0YXJlYShzKSB5b3Ugd2FudCwgZWcgJ3RleHRhcmVhJworICAgICAgLy8gIGNvbnZlcnRzIGFsbCB0ZXh0YXJlYSwgb3IgdGV4dGFyZWEubXkteGluaGEsdGV4dGFyZWEueW91ci14aW5oYSAKKyAgICAgIC8vICB3b3VsZCBjb252ZXJ0IG9ubHkgdGhvc2UgdGV4dGFyZWFzIHdpdGggdGhlIG15LXhpbmhhIG9yIHlvdXIteGluaGEgCisgICAgICAvLyAgY2xhc3NlcyBvbiB0aGVtCisgICAgICB4aW5oYV9lZGl0b3JzOiAgJ3RleHRhcmVhJywgICAKKworICAgICAgLy8gUGx1Z2lucyBjYW4gYmUgYSBkZWZhdWx0IHNldCAtICdjb21tb24nLCAnbWluaW1hbCcsICdsb2FkZWQnCisgICAgICAvLyAgIHhpbmhhX3BsdWdpbnM6ICdtaW5pbWFsJworICAgICAgLy8KKyAgICAgIC8vIG9yIHlvdSBjYW4gc3BlY2lmeSB0aGUgcGx1Z2lucyB5b3Ugd2FudCBleGFjdGx5CisgICAgICAvLyAgIHhpbmhhX3BsdWdpbnM6IFsgJ0xpbmtlcicsICdTdHlsaXN0JyBdCisgICAgICAvLworICAgICAgLy8gb3IgeW91IGNhbiBkbyBib3RoIHRvIGFkZCBleHRyYXMgdG8gdGhlIHNldAorICAgICAgLy8gICB4aW5oYV9wYXNzX3RvX3BocF9iYWNrZW5kOiBbJ21pbmltYWwnLCAnTGlua2VyJyBdCisgICAgICB4aW5oYV9wbHVnaW5zOiAgWyAnbWluaW1hbCcsICdDaGFyQ291bnRlcicsICdTdHlsaXN0JywgJ1RhYmxlT3BlcmF0aW9ucycsICdGYW5jeVNlbGVjdHMnXSwKKyAgICAgIAorICAgICAgLy8gVGhlIGRlZmF1bHQgdG9vbGJhciBjYW4gYmUgb25lIG9mIHRoZSBwcmUtZGVmaW5lZCB0b29sYmFycywgCisgICAgICAvLyAgICdkZWZhdWx0JywgJ21pbmltYWwnLCAnbWluaW1hbCtmb250cycsICdzdXBlcm1pbmknCisgICAgICAvLyAgIHhpbmhhX3Rvb2xiYXI6ICdtaW5pbWFsK2ZvbnRzJworICAgICAgLy8KKyAgICAgIC8vIG9yIHlvdSBhbiBzcGVjaWZ5IGEgdG9vbGJhciBzdHJ1Y3R1cmUgY29tcGxldGVseQorICAgICAgLy8gICB4aW5oYV90b29sYmFyOiBbIFsicG9wdXBlZGl0b3IiXSxbInNlcGFyYXRvciIsImJvbGQiLCJpdGFsaWMiLCJ1bmRlcmxpbmUiLCJzdHJpa2V0aHJvdWdoIiwic3VwZXJzY3JpcHQiXSBdCisgICAgICB4aW5oYV90b29sYmFyOiAgJ21pbmltYWwrZm9udHMnLAorICAgICAgCisgICAgICAvLyBUbyBzcGVjaWZ5IGEgc3R5bGVzaGVldCB0byBsb2FkIGluc2lkZSB0aGUgZWRpdG9yICh0byBzdHlsZSB0aGUgY29udGVudHMKKyAgICAgIC8vICB0aGUgdXNlciBpcyBlZGl0aW5nKSwgc2ltcGx5IHNwZWNpZnkgdGhlIHBhdGggdG8gaXQgaGVyZSwgbm90ZSB0aGF0IGluCisgICAgICAvLyAgdGhpcyBleGFtcGxlIHdlIHVzZSBfZWRpdG9yX3VybCB0byByZWZlcmVuZWMgdGhlIFhpbmhhIGRpcmVjdG9yeQorICAgICAgLy8gIHlvdSB3b3VsZCBwcm9iYWJseSByZWZlcmVuY2UgaXQgYWJzb2x1dGVseS4KKyAgICAgIC8vCisgICAgICAvLyBOb3RlIGFzIHdpdGggYWxsIHRoZXNlIG9wdGlvbnMsIGl0J3Mgb3B0aW9uYWwsIGxlYXZlIGl0IG91dCBpZiB5b3UgCisgICAgICAvLyAgZG9uJ3Qgd2FudCB0byBsb2FkIGEgc3R5bGVzaGVldCBpbiB0aGUgZWRpdG9yCisgICAgICB4aW5oYV9zdHlsZXNoZWV0OiBfZWRpdG9yX3VybCArICdleGFtcGxlcy9maWxlcy9zdHlsaXN0LmNzcycsIAorICAgICAgCisgICAgICAvLyBUaGlzIGlzIHdoZXJlIHlvdSBzZXQgdGhlIG90aGVyIGRlZmF1bHQgY29uZmlndXJhdGlvbiBnbG9iYWxseQorICAgICAgeGluaGFfY29uZmlnOiAgICAgICAgICAgIGZ1bmN0aW9uKHhpbmhhX2NvbmZpZykgCisgICAgICB7CisgICAgICAgIC8vIEZvciBleGFtcGxlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIHN0eWxpc3QgcGx1Z2luIHlvdSBtaWdodCBsb2FkIHlvdXIgc3R5bGVzIGhlcmUKKyAgICAgICAgaWYodHlwZW9mIHhpbmhhX2NvbmZpZy5zdHlsaXN0TG9hZFN0eWxlc2hlZXQgPT0gJ2Z1bmN0aW9uJykKKyAgICAgICAgeworICAgICAgICAgIHhpbmhhX2NvbmZpZy5zdHlsaXN0TG9hZFN0eWxlc2hlZXQoX2VkaXRvcl91cmwgKyAiZXhhbXBsZXMvZmlsZXMvc3R5bGlzdC5jc3MiKTsKKyAgICAgICAgfQorICAgICAgfSwKKyAgICAgIAorICAgICAgLy8gSGVyZSBpcyB3aGVyZSB5b3UgY2FuIGN1c3RvbWlzZSBjb25maWdzIGZvciBlYWNoIGVkaXRvciBhcmVhCisgICAgICB4aW5oYV9jb25maWdfc3BlY2lmaWM6ICAgZnVuY3Rpb24oeGluaGFfY29uZmlnLCB0ZXh0YXJlYSkKKyAgICAgIHsKKyAgICAgICAgLy8gRm9yIGV4YW1wbGUsIHdlIHJlbW92ZSB0aGUgZm9ybWF0IGRyb3AgZG93biBmcm9tIHRoaXMgdGV4dGFyZWEKKyAgICAgICAgaWYodGV4dGFyZWEuaWQgPT0gJ2Fub3RoZXJPbmUnKQorICAgICAgICB7ICAgICAgICAKKyAgICAgICAgICB4aW5oYV9jb25maWcuaGlkZVNvbWVCdXR0b25zKCIgZm9ybWF0YmxvY2sgIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEFuZCBmb3IgdGhpcyBtaW5pIG9uZSB3ZSB3aWxsIHVzZSB0aGUgInN1cGVybWluaSIgdG9vbGJhcgorICAgICAgICAvLyBhbmQgYWxzbyBhbGxvdyB0aGUgdXNlciB0byByZXNpemUgaWYgdGhlaXIgYnJvd3NlciBzdXBwb3J0cyB0aGF0CisgICAgICAgIC8vIChiYXNpY2FsbHksIENocm9tZSBhbmQgU2FmYXJpKQorICAgICAgICBpZih0ZXh0YXJlYS5pZCA9PSAnbWluaU9uZScpCisgICAgICAgIHsKKyAgICAgICAgICB4aW5oYV9jb25maWcucmVzaXphYmxlRWRpdG9yID0gdHJ1ZTsKKyAgICAgICAgICB4aW5oYV9jb25maWcuc2V0VG9vbGJhcignc3VwZXJtaW5pJyk7CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICAKKyAgICAgIC8vIEhlcmUgeW91IGNhbiBsaW1pdCB0aGUgcGx1Z2lucyB0byBjZXJ0YWluIGVkaXRvciBhcmVhcworICAgICAgLy8gICBub3RlIHRoYXQgeW91IG9ubHkgY2FuIHVzZSB0aGUgcGx1Z2lucyB5b3Ugc3BlY2lmaWVkIAorICAgICAgLy8gICBhYm92ZSBpbiB4aW5oYV9wbHVnaW5zLCB5b3UganVzdCBkb24ndCBoYXZlIHRvIHVzZSBhbGwgb2YgCisgICAgICAvLyAgIHRoZW0gYnV0IHRoYXQgY29udHJvbHMgd2hhdCBjb2RlIGdldHMgbG9hZGVkIHRoaXMgY29udG9scworICAgICAgLy8gICB3aGljaCBlZGl0b3JzIGdldCB0aGVtCisgICAgICB4aW5oYV9wbHVnaW5zX3NwZWNpZmljOiAgZnVuY3Rpb24oeGluaGFfcGx1Z2lucywgdGV4dGFyZWEpCisgICAgICB7CisgICAgICAgIC8vIEZvciBleGFtcGxlIHdlIGRvIG5vdCB3YW50IHRoZSBTdHlsaXN0IGZvciB0aGUgJ2Fub3RoZXJPbmUnCisgICAgICAgIGlmKHRleHRhcmVhLmlkID09ICdhbm90aGVyT25lJykKKyAgICAgICAgeworICAgICAgICAgIHhpbmhhX3BsdWdpbnMucmVtb3ZlKCdDaGFyQ291bnRlcicpOworICAgICAgICAgIC8vICBGb3IgbW9yZSB0aGFuZSBvbmUgcGx1Z2luIHVzZSBhbiBhcnJheS4uLgorICAgICAgICAgIC8vICB4aW5oYV9wbHVnaW5zLnJlbW92ZSggWydDaGFyQ291bnRlcicsJ1NvbWV0aGluZ0Vsc2UnXSApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBbmQgZm9yIHRoZSAnbWluaU9uZScgd2Ugb25seSB3YW50IENoYXJDb3VudGVyICAgICAgICAKKyAgICAgICAgaWYodGV4dGFyZWEuaWQgPT0gJ21pbmlPbmUnKQorICAgICAgICB7CisgICAgICAgICAgeGluaGFfcGx1Z2lucy5vbmx5KCdDaGFyQ291bnRlcicpOworICAgICAgICAgIC8vICBGb3IgbW9yZSB0aGFuZSBvbmUgcGx1Z2luIHVzZSBhbiBhcnJheS4uLgorICAgICAgICAgIC8vICB4aW5oYV9wbHVnaW5zLm9ubHkoIFsnQ2hhckNvdW50ZXInLCdTb21ldGhpbmdFbHNlJ10gKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICA8L3NjcmlwdD4KKworCis8L2hlYWQ+CisKKzxib2R5PgorICA8aDE+TmV3YmllIEd1aWRlIEV4YW1wbGU8L2gxPgorICA8cD4gVGhpcyBleGFtcGxlIHNob3dzIGhvdyBhIG1vcmUgY29tcGxldGUgdXNhZ2Ugb2YgWGluaGEgbWF5IGxvb2ssIHZpZXcgdGhlIHNvdXJjZSBvZiB0aGlzIHBhZ2UgYW5kIGluIHRoZSAmbHQ7aGVhZCZndDsgc2VjdGlvbiB5b3Ugd2lsbCBmaW5kIGFsbCB0aGUgY29kZSwgbW9zdGx5IGl0J3MganVzdCBjb21tZW50cyEgPC9wPgorICAKKyAgPHA+V2UgY2FuIHNlZSBiZWxvdyB0aGF0IHNvbWUgWGluaGEgYXJlYXMgaGF2ZSBiZWVuIGNyZWF0ZWQsIHdpdGggZGlmZmVyZW50IHNpemVzLCBkaWZmZXJlbnQgdG9vbGJhcnMgYW5kIGRpZmZlcmVudCBwbHVnaW5zLjwvcD4KKyAgCisgIDxkaXY+CisgICAgPGZvcm0gb25zdWJtaXQ9ImFsZXJ0KHRoaXMubXlUZXh0QXJlYS52YWx1ZSk7IHJldHVybiBmYWxzZTsiIHN0eWxlPSIiPgorICAgIAorICAgICAgPHRleHRhcmVhIGlkPSJmaXJzdE9uZSIgbmFtZT0iZmlyc3RPbmUiIHN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMGVtOyI+CisgICAgICAmbHQ7cCZndDtMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdC4KKyAgICAgIEFsaXF1YW0gZXQgdGVsbHVzIHZpdGFlIGp1c3RvIHZhcml1cyBwbGFjZXJhdC4gU3VzcGVuZGlzc2UgaWFjdWxpcworICAgICAgdmVsaXQgc2VtcGVyIGRvbG9yLiBEb25lYyBncmF2aWRhIHRpbmNpZHVudCBtaS4gQ3VyYWJpdHVyIHRyaXN0aXF1ZQorICAgICAgYW50ZSBlbGVtZW50dW0gdHVycGlzLiBBbGlxdWFtIG5pc2wuIE51bGxhIHBvc3VlcmUgbmVxdWUgbm9uCisgICAgICB0ZWxsdXMuIE1vcmJpIHZlbCBuaWJoLiBDdW0gc29jaWlzIG5hdG9xdWUgcGVuYXRpYnVzIGV0IG1hZ25pcyBkaXMKKyAgICAgIHBhcnR1cmllbnQgbW9udGVzLCBuYXNjZXR1ciByaWRpY3VsdXMgbXVzLiBOYW0gbmVjIHdpc2kuIEluIHdpc2kuCisgICAgICBDdXJhYml0dXIgcGhhcmV0cmEgYmliZW5kdW0gbGVjdHVzLiZsdDsvcCZndDsKKyAgICAgIDwvdGV4dGFyZWE+CisKKyAgICAgIDwhLS0gTm90aWNlIHRoYXQgbWFyZ2luL3BhZGRpbmcgb24gdGhlIHRleHRhcmVhIHdpbGwgbm90IG5lY2Vzc2FyaWx5CisgICAgICAgICAgIHdvcmsgYXMgZXhwZWN0ZWQsIHNvIHdlIHVzZSBhIHdyYXBwaW5nIGRpdiB0byBnaXZlIHRoZSBtYXJnaW4uIC0tPgorICAgICAgICAgICAKKyAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgorICAgICAgICA8dGV4dGFyZWEgaWQ9ImFub3RoZXJPbmUiIG5hbWU9ImFub3RoZXJPbmUiIHJvd3M9IjI1IiBjb2xzPSI4MCI+CisgICAgICAgICZsdDtwJmd0O0xvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LgorICAgICAgICBBbGlxdWFtIGV0IHRlbGx1cyB2aXRhZSBqdXN0byB2YXJpdXMgcGxhY2VyYXQuIFN1c3BlbmRpc3NlIGlhY3VsaXMKKyAgICAgICAgdmVsaXQgc2VtcGVyIGRvbG9yLiBEb25lYyBncmF2aWRhIHRpbmNpZHVudCBtaS4gQ3VyYWJpdHVyIHRyaXN0aXF1ZQorICAgICAgICBhbnRlIGVsZW1lbnR1bSB0dXJwaXMuIEFsaXF1YW0gbmlzbC4gTnVsbGEgcG9zdWVyZSBuZXF1ZSBub24KKyAgICAgICAgdGVsbHVzLiBNb3JiaSB2ZWwgbmliaC4gQ3VtIHNvY2lpcyBuYXRvcXVlIHBlbmF0aWJ1cyBldCBtYWduaXMgZGlzCisgICAgICAgIHBhcnR1cmllbnQgbW9udGVzLCBuYXNjZXR1ciByaWRpY3VsdXMgbXVzLiBOYW0gbmVjIHdpc2kuIEluIHdpc2kuCisgICAgICAgIEN1cmFiaXR1ciBwaGFyZXRyYSBiaWJlbmR1bSBsZWN0dXMuJmx0Oy9wJmd0OworICAgICAgICA8L3RleHRhcmVhPgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgorICAgICAgICA8dGV4dGFyZWEgaWQ9Im1pbmlPbmUiIG5hbWU9Im1pbmlPbmUiIHN0eWxlPSJoZWlnaHQ6MTUwcHg7d2lkdGg6MzIwcHg7Ij4KKyAgICAgICAgJmx0O3AmZ3Q7TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuCisgICAgICAgIEFsaXF1YW0gZXQgdGVsbHVzIHZpdGFlIGp1c3RvIHZhcml1cyBwbGFjZXJhdC4gU3VzcGVuZGlzc2UgaWFjdWxpcworICAgICAgICB2ZWxpdCBzZW1wZXIgZG9sb3IuIERvbmVjIGdyYXZpZGEgdGluY2lkdW50IG1pLiBDdXJhYml0dXIgdHJpc3RpcXVlCisgICAgICAgIGFudGUgZWxlbWVudHVtIHR1cnBpcy4gQWxpcXVhbSBuaXNsLiBOdWxsYSBwb3N1ZXJlIG5lcXVlIG5vbgorICAgICAgICB0ZWxsdXMuIE1vcmJpIHZlbCBuaWJoLiBDdW0gc29jaWlzIG5hdG9xdWUgcGVuYXRpYnVzIGV0IG1hZ25pcyBkaXMKKyAgICAgICAgcGFydHVyaWVudCBtb250ZXMsIG5hc2NldHVyIHJpZGljdWx1cyBtdXMuIE5hbSBuZWMgd2lzaS4gSW4gd2lzaS4KKyAgICAgICAgQ3VyYWJpdHVyIHBoYXJldHJhIGJpYmVuZHVtIGxlY3R1cy4mbHQ7L3AmZ3Q7CisgICAgICAgIDwvdGV4dGFyZWE+CisgICAgICA8L2Rpdj4KKyAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTVUJNSVQiIC8+CisgICAgPC9mb3JtPgorICA8L2Rpdj4KKyAgICAgIAorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2V4YW1wbGVzL09sZF9OZXdiaWVfR3VpZGUvTmV3YmllLmh0bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9PbGRfTmV3YmllX0d1aWRlL05ld2JpZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMWIzNzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9PbGRfTmV3YmllX0d1aWRlL05ld2JpZS5odG1sCkBAIC0wLDAgKzEsMjMgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iCisgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgorPGhlYWQ+CisgIDx0aXRsZT5YaW5oYSBOZXdiaWUgR3VpZGU8L3RpdGxlPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KKyAgCisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL1hpbmhhTG9hZGVyLmpzP2xhbmc9ZW4mc2tpbj1zaWx2YSI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICBfZWRpdG9yX2ljb25zID0gIlRhbmdvIiAvLyBZb3UgY2FuIHBhc3MgYXJndW1lbnRzIHZpYSB0aGUgc2NyaXB0IFVSTCBvciBlbWJlZCB0aGVtIGhlcmUuCisgIDwvc2NyaXB0PgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJYaW5oYUNvbmZpZy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPGZvcm0gYWN0aW9uPSIiPgorPGRpdj4KKzx0ZXh0YXJlYSBpZD0ibXlUZXh0QXJlYSIgbmFtZT0ibXlUZXh0QXJlYSIgcm93cz0iMjUiIGNvbHM9IjUwIiBzdHlsZT0id2lkdGg6IDEwMCUiPjwvdGV4dGFyZWE+Cis8L2Rpdj4KKzwvZm9ybT4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvT2xkX05ld2JpZV9HdWlkZS9YaW5oYUNvbmZpZy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2V4YW1wbGVzL09sZF9OZXdiaWVfR3VpZGUvWGluaGFDb25maWcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU3NmJlMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2V4YW1wbGVzL09sZF9OZXdiaWVfR3VpZGUvWGluaGFDb25maWcuanMKQEAgLTAsMCArMSwxMzYgQEAKK3hpbmhhX2VkaXRvcnMgPSBudWxsOworeGluaGFfaW5pdCAgICA9IG51bGw7Cit4aW5oYV9jb25maWcgID0gbnVsbDsKK3hpbmhhX3BsdWdpbnMgPSBudWxsOworCisvLyBUaGlzIGNvbnRhaW5zIHRoZSBuYW1lcyBvZiB0ZXh0YXJlYXMgd2Ugd2lsbCBtYWtlIGludG8gWGluaGEgZWRpdG9ycworeGluaGFfaW5pdCA9IHhpbmhhX2luaXQgPyB4aW5oYV9pbml0IDogZnVuY3Rpb24oKQoreworICAgLyoqIFNURVAgMSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogRmlyc3QsIHNwZWNpZnkgdGhlIHRleHRhcmVhcyB0aGF0IHNoYWxsIGJlIHR1cm5lZCBpbnRvIFhpbmhhcy4gCisgICAqIEZvciBlYWNoIG9uZSBhZGQgdGhlIHJlc3BlY3RpdmUgaWQgdG8gdGhlIHhpbmhhX2VkaXRvcnMgYXJyYXkuCisgICAqIEkgeW91IHdhbnQgYWRkIG1vcmUgdGhhbiBvbiB0ZXh0YXJlYSwga2VlcCBpbiBtaW5kIHRoYXQgdGhlc2UgCisgICAqIHZhbHVlcyBhcmUgY29tbWEgc2VwZXJhdGVkIEJVVCB0aGVyZSBpcyBubyBjb21tYSBhZnRlciB0aGUgbGFzdCB2YWx1ZS4KKyAgICogSWYgeW91IGFyZSBnb2luZyB0byB1c2UgdGhpcyBjb25maWd1cmF0aW9uIG9uIHNldmVyYWwgcGFnZXMgd2l0aCBkaWZmZXJlbnQKKyAgICogdGV4dGFyZWEgaWRzLCB5b3UgY2FuIGFkZCB0aGVtIGFsbC4gVGhlIG9uZXMgdGhhdCBhcmUgbm90IGZvdW5kIG9uIHRoZQorICAgKiBjdXJyZW50IHBhZ2Ugd2lsbCBqdXN0IGJlIHNraXBwZWQuCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgeGluaGFfZWRpdG9ycyA9IHhpbmhhX2VkaXRvcnMgPyB4aW5oYV9lZGl0b3JzIDoKKyAgWworICAgICdteVRleHRBcmVhJywgJ2Fub3RoZXJPbmUnCisgIF07CisgIAorICAvKiogU1RFUCAyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiBOb3csIHdoYXQgYXJlIHRoZSBwbHVnaW5zIHlvdSB3aWxsIGJlIHVzaW5nIGluIHRoZSBlZGl0b3JzIG9uIHRoaXMKKyAgICogcGFnZS4gIExpc3QgYWxsIHRoZSBwbHVnaW5zIHlvdSB3aWxsIG5lZWQsIGV2ZW4gaWYgbm90IGFsbCB0aGUgZWRpdG9ycworICAgKiB3aWxsIHVzZSBhbGwgdGhlIHBsdWdpbnMuCisgICAqCisgICAqIFRoZSBsaXN0IG9mIHBsdWdpbnMgYmVsb3cgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgaWYgeW91IHByZWZlcgorICAgKiBhIHNpbXBsZXIgZWRpdG9yIHRvIHN0YXJ0IHdpdGggdGhlbiB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIAorICAgKiAKKyAgICogeGluaGFfcGx1Z2lucyA9IHhpbmhhX3BsdWdpbnMgPyB4aW5oYV9wbHVnaW5zIDogWyBdOworICAgKgorICAgKiB3aGljaCB3aWxsIGxvYWQgbm8gZXh0cmEgcGx1Z2lucyBhdCBhbGwuCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgeGluaGFfcGx1Z2lucyA9IHhpbmhhX3BsdWdpbnMgPyB4aW5oYV9wbHVnaW5zIDoKKyAgWworICAgJ0NoYXJhY3Rlck1hcCcsCisgICAnQ29udGV4dE1lbnUnLAorICAgJ0ZhbmN5U2VsZWN0cycsCisgICAnU21hcnRSZXBsYWNlJywKKyAgICdTdHlsaXN0JywKKyAgICdMaW5rZXInLAorICAgJ1N1cGVyQ2xlYW4nLAorICAgJ1RhYmxlT3BlcmF0aW9ucycsCisgICAnTGlzdE9wZXJhdGlvbnMnLAorICAgJ1dlYktpdFJlc2l6ZScKKyAgXTsKKyAgCisgICAgICAgICAvLyBUSElTIEJJVCBPRiBKQVZBU0NSSVBUIExPQURTIFRIRSBQTFVHSU5TLCBOTyBUT1VDSElORyAgOikKKyAgICAgICAgIGlmKCFYaW5oYS5sb2FkUGx1Z2lucyh4aW5oYV9wbHVnaW5zLCB4aW5oYV9pbml0KSkgcmV0dXJuOworCisKKyAgLyoqIFNURVAgMyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogV2UgY3JlYXRlIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uIHRvIGJlIHVzZWQgYnkgYWxsIHRoZSBlZGl0b3JzLgorICAgKiBJZiB5b3Ugd2lzaCB0byBjb25maWd1cmUgc29tZSBvZiB0aGUgZWRpdG9ycyBkaWZmZXJlbnRseSB0aGlzIHdpbGwgYmUKKyAgICogZG9uZSBpbiBzdGVwIDUuCisgICAqCisgICAqIElmIHlvdSB3YW50IHRvIG1vZGlmeSB0aGUgZGVmYXVsdCBjb25maWcgeW91IG1pZ2h0IGRvIHNvbWV0aGluZyBsaWtlIHRoaXMuCisgICAqCisgICAqICAgeGluaGFfY29uZmlnID0gbmV3IFhpbmhhLkNvbmZpZygpOworICAgKiAgIHhpbmhhX2NvbmZpZy53aWR0aCAgPSAnNjQwcHgnOworICAgKiAgIHhpbmhhX2NvbmZpZy5oZWlnaHQgPSAnNDIwcHgnOworICAgKgorICAgKgorICAgKiBGb3IgYSBsaXN0IG9mIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzZWU6CisgICAqIGh0dHA6Ly90cmFjLnhpbmhhLm9yZy93aWtpL0RvY3VtZW50YXRpb24vQ29uZmlnVmFyaWFibGVzTGlzdAorICAgKgorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAgeGluaGFfY29uZmlnID0geGluaGFfY29uZmlnID8geGluaGFfY29uZmlnKCkgOiBuZXcgWGluaGEuQ29uZmlnKCk7CisgICAgICAgIAorICAvL3RoaXMgaXMgdGhlIHN0YW5kYXJkIHRvb2xiYXIsIGZlZWwgZnJlZSB0byByZW1vdmUgYnV0dG9ucyBhcyB5b3UgbGlrZQorICB4aW5oYV9jb25maWcudG9vbGJhciA9CisgIFsKKyAgICBbInBvcHVwZWRpdG9yIl0sCisgICAgWyJzZXBhcmF0b3IiLCJmb3JtYXRibG9jayIsImZvbnRuYW1lIiwiZm9udHNpemUiLCJib2xkIiwiaXRhbGljIiwidW5kZXJsaW5lIiwic3RyaWtldGhyb3VnaCJdLAorICAgIFsic2VwYXJhdG9yIiwiZm9yZWNvbG9yIiwiaGlsaXRlY29sb3IiLCJ0ZXh0aW5kaWNhdG9yIl0sCisgICAgWyJzZXBhcmF0b3IiLCJzdWJzY3JpcHQiLCJzdXBlcnNjcmlwdCJdLAorICAgIFsibGluZWJyZWFrIiwic2VwYXJhdG9yIiwianVzdGlmeWxlZnQiLCJqdXN0aWZ5Y2VudGVyIiwianVzdGlmeXJpZ2h0IiwianVzdGlmeWZ1bGwiXSwKKyAgICBbInNlcGFyYXRvciIsImluc2VydG9yZGVyZWRsaXN0IiwiaW5zZXJ0dW5vcmRlcmVkbGlzdCIsIm91dGRlbnQiLCJpbmRlbnQiXSwKKyAgICBbInNlcGFyYXRvciIsImluc2VydGhvcml6b250YWxydWxlIiwiY3JlYXRlbGluayIsImluc2VydGltYWdlIiwiaW5zZXJ0dGFibGUiXSwKKyAgICBbImxpbmVicmVhayIsInNlcGFyYXRvciIsInVuZG8iLCJyZWRvIiwic2VsZWN0YWxsIiwicHJpbnQiXSwgKFhpbmhhLmlzX2dlY2tvID8gW10gOiBbImN1dCIsImNvcHkiLCJwYXN0ZSIsIm92ZXJ3cml0ZSIsInNhdmVhcyJdKSwKKyAgICBbInNlcGFyYXRvciIsImtpbGx3b3JkIiwiY2xlYXJmb250cyIsInJlbW92ZWZvcm1hdCIsInRvZ2dsZWJvcmRlcnMiLCJzcGxpdGJsb2NrIiwibGVmdHRvcmlnaHQiLCAicmlnaHR0b2xlZnQiXSwKKyAgICBbInNlcGFyYXRvciIsImh0bWxtb2RlIiwic2hvd2hlbHAiLCJhYm91dCJdCisgIF07CisKKyAgIC8vIFRvIGFkanVzdCB0aGUgc3R5bGluZyBpbnNpZGUgdGhlIGVkaXRvciwgd2UgY2FuIGxvYWQgYW4gZXh0ZXJuYWwgc3R5bGVzaGVldCBsaWtlIHRoaXMKKyAgIC8vIE5PVEUgOiBZT1UgTVVTVCBHSVZFIEFOIEFCU09MVVRFIFVSTAorICAgeGluaGFfY29uZmlnLnBhZ2VTdHlsZVNoZWV0cyA9IFsgX2VkaXRvcl91cmwgKyAiZXhhbXBsZXMvZmlsZXMvZnVsbF9leGFtcGxlLmNzcyIgXTsKKyAgIC8vaWYgeW91J3JlIHVzaW5nIFN0eWxpc3QsIGltcG9ydCBhIHN0eWxlc2hlZXQgbGlrZSB0aGlzCisgICB4aW5oYV9jb25maWcuc3R5bGlzdExvYWRTdHlsZXNoZWV0KF9lZGl0b3JfdXJsICsgImV4YW1wbGVzL2ZpbGVzL3N0eWxpc3QuY3NzIik7CisKKworICAvKiogU1RFUCA0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiBXZSBmaXJzdCBjcmVhdGUgZWRpdG9ycyBmb3IgdGhlIHRleHRhcmVhcy4KKyAgICoKKyAgICogWW91IGNhbiBkbyB0aGlzIGluIHR3byB3YXlzLCBlaXRoZXIKKyAgICoKKyAgICogICB4aW5oYV9lZGl0b3JzICAgPSBYaW5oYS5tYWtlRWRpdG9ycyh4aW5oYV9lZGl0b3JzLCB4aW5oYV9jb25maWcsIHhpbmhhX3BsdWdpbnMpOworICAgKgorICAgKiBpZiB5b3Ugd2FudCBhbGwgdGhlIGVkaXRvciBvYmplY3RzIHRvIHVzZSB0aGUgc2FtZSBzZXQgb2YgcGx1Z2lucywgT1I7CisgICAqCisgICAqICAgeGluaGFfZWRpdG9ycyA9IFhpbmhhLm1ha2VFZGl0b3JzKHhpbmhhX2VkaXRvcnMsIHhpbmhhX2NvbmZpZyk7CisgICAqICAgeGluaGFfZWRpdG9ycy5teVRleHRBcmVhLnJlZ2lzdGVyUGx1Z2lucyhbJ1N0eWxpc3QnXSk7CisgICAqICAgeGluaGFfZWRpdG9ycy5hbm90aGVyT25lLnJlZ2lzdGVyUGx1Z2lucyhbJ0NTUycsJ1N1cGVyQ2xlYW4nXSk7CisgICAqCisgICAqIGlmIHlvdSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBzZXQgb2YgcGx1Z2lucyBmb3Igb25lIG9yIG1vcmUgb2YgdGhlCisgICAqIGVkaXRvcnMuCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgeGluaGFfZWRpdG9ycyAgID0gWGluaGEubWFrZUVkaXRvcnMoeGluaGFfZWRpdG9ycywgeGluaGFfY29uZmlnLCB4aW5oYV9wbHVnaW5zKTsKKworICAvKiogU1RFUCA1ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9mIGFueSBvZiB0aGUKKyAgICogZWRpdG9ycywgIHRoaXMgaXMgdGhlIHBsYWNlIHRvIGRvIHRoYXQsIGZvciBleGFtcGxlIHlvdSBtaWdodCB3YW50IHRvCisgICAqIGNoYW5nZSB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiBvbmUgb2YgdGhlIGVkaXRvcnMsIGxpa2UgdGhpcy4uLgorICAgKgorICAgKiAgIHhpbmhhX2VkaXRvcnMubXlUZXh0QXJlYS5jb25maWcud2lkdGggID0gJzY0MHB4JzsKKyAgICogICB4aW5oYV9lZGl0b3JzLm15VGV4dEFyZWEuY29uZmlnLmhlaWdodCA9ICc0ODBweCc7CisgICAqCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKiogU1RFUCA2ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiBGaW5hbGx5IHdlICJzdGFydCIgdGhlIGVkaXRvcnMsIHRoaXMgdHVybnMgdGhlIHRleHRhcmVhcyBpbnRvCisgICAqIFhpbmhhIGVkaXRvcnMuCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgWGluaGEuc3RhcnRFZGl0b3JzKHhpbmhhX2VkaXRvcnMpOworfQorCitYaW5oYS5hZGRPbmxvYWRIYW5kbGVyKHhpbmhhX2luaXQpOyAvLyB0aGlzIGV4ZWN1dGVzIHRoZSB4aW5oYV9pbml0IGZ1bmN0aW9uIG9uIHBhZ2UgbG9hZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBkb2VzIG5vdCBpbnRlcmZlcmUgd2l0aCB3aW5kb3cub25sb2FkIHByb3BlcnRpZXMgc2V0IGJ5IG90aGVyIHNjcmlwdHMKKwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvT2xkX05ld2JpZV9HdWlkZS9zaW1wbGVfZXhhbXBsZS5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvT2xkX05ld2JpZV9HdWlkZS9zaW1wbGVfZXhhbXBsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMjZiYTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9PbGRfTmV3YmllX0d1aWRlL3NpbXBsZV9leGFtcGxlLmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+U2ltcGxlIGV4YW1wbGUgb2YgWGluaGE8L3RpdGxlPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICB2YXIgX2VkaXRvcl91cmwgID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZi5yZXBsYWNlKC9leGFtcGxlc1wvT2xkX05ld2JpZV9HdWlkZVwvc2ltcGxlX2V4YW1wbGVcLmh0bWwuKi8sICcnKQorICB2YXIgX2VkaXRvcl9sYW5nID0gImVuIjsKKzwvc2NyaXB0PgorPCEtLSBMb2FkIHVwIHRoZSBhY3R1YWwgZWRpdG9yIGNvcmUgLS0+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9YaW5oYUNvcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorCit2YXIgeGluaGFfcGx1Z2lucyA9CitbCisgJ0xpbmtlcicsICdDb250ZXh0TWVudScsICdGYW5jeVNlbGVjdHMnLCAnVGFibGVPcGVyYXRpb25zJywgJ0xpc3RPcGVyYXRpb25zJywgJ1ByZXNlcnZlU2VsZWN0aW9uJywgJ1ByZXNlcnZlU2NyaXB0cycsICdXZWJLaXRSZXNpemUnCitdOworCit2YXIgeGluaGFfZWRpdG9ycyA9CitbCisgICdteVRleHRBcmVhJworXTsKKworZnVuY3Rpb24geGluaGFfaW5pdCgpCit7CisgIGlmKCFYaW5oYS5sb2FkUGx1Z2lucyh4aW5oYV9wbHVnaW5zLCB4aW5oYV9pbml0KSkgcmV0dXJuOworCisgIHZhciB4aW5oYV9jb25maWcgPSBuZXcgWGluaGEuQ29uZmlnKCk7CisgIAorICB4aW5oYV9lZGl0b3JzID0gWGluaGEubWFrZUVkaXRvcnMoeGluaGFfZWRpdG9ycywgeGluaGFfY29uZmlnLCB4aW5oYV9wbHVnaW5zKTsKKworICBYaW5oYS5zdGFydEVkaXRvcnMoeGluaGFfZWRpdG9ycyk7Cit9CitYaW5oYS5hZGRPbmxvYWRIYW5kbGVyKHhpbmhhX2luaXQpOworPC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2PgorPGZvcm0gb25zdWJtaXQ9ImFsZXJ0KHRoaXMubXlUZXh0QXJlYS52YWx1ZSk7IHJldHVybiBmYWxzZTsiIHN0eWxlPSIiPgorCis8dGV4dGFyZWEgaWQ9Im15VGV4dEFyZWEiIG5hbWU9Im15VGV4dEFyZWEiIHJvd3M9IjI1IiBjb2xzPSI4MCI+CismbHQ7cCZndDtMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdC4KK0FsaXF1YW0gZXQgdGVsbHVzIHZpdGFlIGp1c3RvIHZhcml1cyBwbGFjZXJhdC4gU3VzcGVuZGlzc2UgaWFjdWxpcwordmVsaXQgc2VtcGVyIGRvbG9yLiBEb25lYyBncmF2aWRhIHRpbmNpZHVudCBtaS4gQ3VyYWJpdHVyIHRyaXN0aXF1ZQorYW50ZSBlbGVtZW50dW0gdHVycGlzLiBBbGlxdWFtIG5pc2wuIE51bGxhIHBvc3VlcmUgbmVxdWUgbm9uCit0ZWxsdXMuIE1vcmJpIHZlbCBuaWJoLiBDdW0gc29jaWlzIG5hdG9xdWUgcGVuYXRpYnVzIGV0IG1hZ25pcyBkaXMKK3BhcnR1cmllbnQgbW9udGVzLCBuYXNjZXR1ciByaWRpY3VsdXMgbXVzLiBOYW0gbmVjIHdpc2kuIEluIHdpc2kuCitDdXJhYml0dXIgcGhhcmV0cmEgYmliZW5kdW0gbGVjdHVzLiZsdDsvcCZndDsKKworPC90ZXh0YXJlYT4KKzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTVUJNSVQiIC8+Cis8L2Zvcm0+Cis8L2Rpdj4KKworICA8IS0tIFRoaXMgc2NyaXB0IGlzIHVzZWQgdG8gc2hvdyB0aGUgcmVuZGVyaW5nIG1vZGUgKFF1aXJrcywgU3RhbmRhcmRzLCBBbG1vc3QgU3RhbmRhcmRzKSAtLT4gCisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InJlbmRlci1tb2RlLWRldmVsb3Blci1oZWxwLmpzIj48L3NjcmlwdD4KKyAgICAgIAorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2V4YW1wbGVzL09uZUxpbmUuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2V4YW1wbGVzL09uZUxpbmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjZjN2ZiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvT25lTGluZS5odG1sCkBAIC0wLDAgKzEsNDAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+CisgIDx0aXRsZT5FeGFtcGxlIG9mIEVhc3kgTG9hZGluZyBYaW5oYSBXaXRoIE5vIENvbmZpZ3VyYXRpb248L3RpdGxlPgorCisgIDxzY3JpcHQgc3JjPSIuLi9YaW5oYUVhc3kuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8cD4KKyAgVGhpcyBkZW1vbnN0cmF0aW9uIHNob3dzIGhvdyB5b3Ugb25seSBuZWVkIHRvIGFkZCBvbmUgc2luZ2xlIGxpbmUgdG8geW91ciBwYWdlIHRvIGVuYWJsZSBYaW5oYSBmb3IgdGhlIHRleHRhcmVhcyBvbiBpdCwgdGhlIG9ubHkgY29kZSBhZGRlZCBpcy4uLgorPC9wPgorCis8cHJlPgorICAmbHQ7c2NyaXB0IHNyYz0iL3BhdGgvdG8veGluaGEvWGluaGFFYXN5LmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiJmd0OyZsdDsvc2NyaXB0Jmd0OworPC9wcmU+CisKKzxwPmFuZCB0aGF0IHdpbGwgY2F1c2UgYWxsIHRoZSB0ZXh0YXJlYXMgdG8gYmUgY29udmVydGVkIGludG8gWGluaGEgYXJlYXMgd2l0aCBkZWZhdWx0IG9wdGlvbnMgYW5kIGNvbW1vbmx5IHVzZWZ1bCBwbHVnaW5zLjwvcD4KKworPGRpdj4KKzxmb3JtIG9uc3VibWl0PSJhbGVydCh0aGlzLm15VGV4dEFyZWEudmFsdWUpOyByZXR1cm4gZmFsc2U7IiBzdHlsZT0iIj4KKworPHRleHRhcmVhIGlkPSJteVRleHRBcmVhIiBuYW1lPSJteVRleHRBcmVhIiByb3dzPSIyNSIgY29scz0iODAiPgorJmx0O3AmZ3Q7TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuCitBbGlxdWFtIGV0IHRlbGx1cyB2aXRhZSBqdXN0byB2YXJpdXMgcGxhY2VyYXQuIFN1c3BlbmRpc3NlIGlhY3VsaXMKK3ZlbGl0IHNlbXBlciBkb2xvci4gRG9uZWMgZ3JhdmlkYSB0aW5jaWR1bnQgbWkuIEN1cmFiaXR1ciB0cmlzdGlxdWUKK2FudGUgZWxlbWVudHVtIHR1cnBpcy4gQWxpcXVhbSBuaXNsLiBOdWxsYSBwb3N1ZXJlIG5lcXVlIG5vbgordGVsbHVzLiBNb3JiaSB2ZWwgbmliaC4gQ3VtIHNvY2lpcyBuYXRvcXVlIHBlbmF0aWJ1cyBldCBtYWduaXMgZGlzCitwYXJ0dXJpZW50IG1vbnRlcywgbmFzY2V0dXIgcmlkaWN1bHVzIG11cy4gTmFtIG5lYyB3aXNpLiBJbiB3aXNpLgorQ3VyYWJpdHVyIHBoYXJldHJhIGJpYmVuZHVtIGxlY3R1cy4mbHQ7L3AmZ3Q7CisKKzwvdGV4dGFyZWE+Cis8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU1VCTUlUIiAvPgorPC9mb3JtPgorPC9kaXY+CisgICAgICAKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9Vc2luZ1BocFBsdWdpbnMucGhwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvVXNpbmdQaHBQbHVnaW5zLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGRiNTk2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvVXNpbmdQaHBQbHVnaW5zLnBocApAQCAtMCwwICsxLDE0OCBAQAorPD9waHAgcmVxdWlyZV9vbmNlKCdyZXF1aXJlLXBhc3N3b3JkLnBocCcpOyA/PgorPCFET0NUWVBFIGh0bWw+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Cis8aGVhZD4KKworICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KKyAgPHRpdGxlPkV4YW1wbGUgb2YgWGluaGE8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImZpbGVzL2Z1bGxfZXhhbXBsZS5jc3MiIC8+CisKKyAgPHNjcmlwdCBzcmM9Ii8vczMtdXMtd2VzdC0xLmFtYXpvbmF3cy5jb20veGluaGEveGluaGEtMS41L1hpbmhhRWFzeS5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAKKyAgICAvLyBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlLCBvcHRpb25hbC4uLgorICAgIHhpbmhhX29wdGlvbnMgPSAKKyAgICB7CisgICAgICAvLyBTcGVjaWZ5IGxhbmd1YWdlIGFuZCBza2luCisgICAgICBfZWRpdG9yX2xhbmc6ICAgJ2VuJywgICAgICAgICAvLyBMYW5ndWFnZSB0byB1c2UKKyAgICAgIF9lZGl0b3Jfc2tpbjogICAnc2lsdmEnLCAgICAgIC8vIE5hbWUgb2YgdGhlIHNraW4gdG8gdXNlIChzZWUgc2tpbnMgZGlyZWN0b3J5IGZvciBhdmFpbGFibGUgc2tpbnMpCisgICAgICAKKyAgICAgIC8vIFNpbXBseSBhIENTUyBzZWxlY3RvciB0byBwaWNrIHRoZSB0ZXh0YXJlYShzKSB5b3Ugd2FudCwgZWcgJ3RleHRhcmVhJworICAgICAgLy8gIGNvbnZlcnRzIGFsbCB0ZXh0YXJlYSwgb3IgdGV4dGFyZWEubXkteGluaGEsdGV4dGFyZWEueW91ci14aW5oYSAKKyAgICAgIC8vICB3b3VsZCBjb252ZXJ0IG9ubHkgdGhvc2UgdGV4dGFyZWFzIHdpdGggdGhlIG15LXhpbmhhIG9yIHlvdXIteGluaGEgCisgICAgICAvLyAgY2xhc3NlcyBvbiB0aGVtCisgICAgICB4aW5oYV9lZGl0b3JzOiAgJ3RleHRhcmVhJywgICAKKworICAgICAgLy8gUGx1Z2lucyBjYW4gYmUgYSBkZWZhdWx0IHNldCAtICdjb21tb24nLCAnbWluaW1hbCcsICdsb2FkZWQnCisgICAgICAvLyAgIHhpbmhhX3BsdWdpbnM6ICdtaW5pbWFsJworICAgICAgLy8KKyAgICAgIC8vIG9yIHlvdSBjYW4gc3BlY2lmeSB0aGUgcGx1Z2lucyB5b3Ugd2FudCBleGFjdGx5CisgICAgICAvLyAgIHhpbmhhX3BsdWdpbnM6IFsgJ0xpbmtlcicsICdTdHlsaXN0JyBdCisgICAgICAvLworICAgICAgLy8gb3IgeW91IGNhbiBkbyBib3RoIHRvIGFkZCBleHRyYXMgdG8gdGhlIHNldAorICAgICAgLy8gICB4aW5oYV9wYXNzX3RvX3BocF9iYWNrZW5kOiBbJ21pbmltYWwnLCAnTGlua2VyJyBdCisgICAgICB4aW5oYV9wbHVnaW5zOiAgCisgICAgICBbIAorICAgICAgICAnbWluaW1hbCcsIC8vIExvYWQgdGhlIHN0YW5kYXJkIG1pbmltYWwgc2V0IGZyb20gWGluaGEncyBub3JtYSBwbHVnaW5zCisgICAgICAgIAorICAgICAgICAvLyBTaW5jZSB0aGlzIGV4YW1wbGUgbWlnaHQgYmUgdXNpbmcgWGluaGEgZnJvbSBhIENNUywgd2UgCisgICAgICAgIC8vICBtYWtlIHN1cmUgdG8gbG9hZCBvdXIgUEhQIHBsdWdpbnMgZnJvbSBvdXIgbG9jYWwgcGx1Z2lucworICAgICAgICAvLyAgZGlyZWN0b3J5IG9uIG91ciBvd24gc2VydmVyLCBub3QgdGhlIENNUyBzZXJ2ZXIgKHdoaWNoIHdvdWxkbid0CisgICAgICAgIC8vICBzdXBwb3J0IFBIUCkuCisgICAgICAgIHsgCisgICAgICAgICAgIGZyb206ICcuLi9wbHVnaW5zJywgICAgICAvLyBGcm9tIG91ciBsb2NhbCBwbHVnaW5zIGRpcmVjdG9yeQorICAgICAgICAgICBsb2FkOlsnTW9vdG9vbHNGaWxlTWFuYWdlcicsICdMaW5rZXInXSAvLyBMb2FkIHRoZXNlIHBsdWdpbnMKKyAgICAgICAgfSAKKyAgICAgIF0sCisgICAgICAKKyAgICAgIC8vIFRoZSBkZWZhdWx0IHRvb2xiYXIgY2FuIGJlIG9uZSBvZiB0aGUgcHJlLWRlZmluZWQgdG9vbGJhcnMsIAorICAgICAgLy8gICAnZGVmYXVsdCcsICdtaW5pbWFsJywgJ21pbmltYWwrZm9udHMnLCAnc3VwZXJtaW5pJworICAgICAgLy8gICB4aW5oYV90b29sYmFyOiAnbWluaW1hbCtmb250cycKKyAgICAgIC8vCisgICAgICAvLyBvciB5b3UgYW4gc3BlY2lmeSBhIHRvb2xiYXIgc3RydWN0dXJlIGNvbXBsZXRlbHkKKyAgICAgIC8vICAgeGluaGFfdG9vbGJhcjogWyBbInBvcHVwZWRpdG9yIl0sWyJzZXBhcmF0b3IiLCJib2xkIiwiaXRhbGljIiwidW5kZXJsaW5lIiwic3RyaWtldGhyb3VnaCIsInN1cGVyc2NyaXB0Il0gXQorICAgICAgeGluaGFfdG9vbGJhcjogICdtaW5pbWFsK2ZvbnRzJywKKyAgICAgIAorICAgICAgLy8gVG8gc3BlY2lmeSBhIHN0eWxlc2hlZXQgdG8gbG9hZCBpbnNpZGUgdGhlIGVkaXRvciAodG8gc3R5bGUgdGhlIGNvbnRlbnRzCisgICAgICAvLyAgdGhlIHVzZXIgaXMgZWRpdGluZyksIHNpbXBseSBzcGVjaWZ5IHRoZSBwYXRoIHRvIGl0IGhlcmUuCisgICAgICAvLworICAgICAgLy8gTm90ZSBhcyB3aXRoIGFsbCB0aGVzZSBvcHRpb25zLCBpdCdzIG9wdGlvbmFsLCBsZWF2ZSBpdCBvdXQgaWYgeW91IAorICAgICAgLy8gIGRvbid0IHdhbnQgdG8gbG9hZCBhIHN0eWxlc2hlZXQgaW4gdGhlIGVkaXRvcgorICAgICAgeGluaGFfc3R5bGVzaGVldDogbnVsbCwgCisgICAgICAKKyAgICAgIC8vIFRoaXMgaXMgd2hlcmUgeW91IHNldCB0aGUgb3RoZXIgZGVmYXVsdCBjb25maWd1cmF0aW9uIGdsb2JhbGx5CisgICAgICB4aW5oYV9jb25maWc6ICAgICAgICAgICAgZnVuY3Rpb24oeGluaGFfY29uZmlnKSAKKyAgICAgIHsKKyAgICAgICAgCisgICAgICAgIC8vIENvbmZpZ3VyZSB0aGUgRmlsZSBNYW5hZ2VyCisgICAgICAgIHdpdGggKHhpbmhhX2NvbmZpZy5Nb290b29sc0ZpbGVNYW5hZ2VyKQorICAgICAgICB7IAorICAgICAgICAgIDw/cGhwIAorICAgICAgICAgICAgcmVxdWlyZV9vbmNlKCcuLi9jb250cmliL3BocC14aW5oYS5waHAnKTsKKyAgICAgICAgICAgIHhpbmhhX3Bhc3NfdG9fcGhwX2JhY2tlbmQKKyAgICAgICAgICAgICggICAgICAgCisgICAgICAgICAgICAgIGFycmF5CisgICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAnaW1hZ2VzX2RpcicgPT4gZ2V0Y3dkKCkgLiAnL2ltYWdlcycsCisgICAgICAgICAgICAgICAgJ2ltYWdlc191cmwnID0+IHByZWdfcmVwbGFjZSgnL1wvZXhhbXBsZXMuKi8nLCAnJywgJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pIC4gJy9leGFtcGxlcy9pbWFnZXMnLAorICAgICAgICAgICAgICAgICdpbWFnZXNfYWxsb3dfdXBsb2FkJyA9PiB0cnVlLAorICAgICAgICAgICAgICAgICdpbWFnZXNfYWxsb3dfZGVsZXRlJyA9PiB0cnVlLAorICAgICAgICAgICAgICAgICdpbWFnZXNfYWxsb3dfZG93bmxvYWQnID0+IHRydWUsCisgICAgICAgICAgICAgICAgJ2ltYWdlc191c2VfaHNwYWNlX3ZzcGFjZScgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgJ2ZpbGVzX2RpcicgPT4gZ2V0Y3dkKCkgLiAnL2ltYWdlcycsCisgICAgICAgICAgICAgICAgJ2ZpbGVzX3VybCcgPT4gcHJlZ19yZXBsYWNlKCcvXC9leGFtcGxlcy4qLycsICcnLCAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSkgLiAnL2V4YW1wbGVzL2ltYWdlcycsCisgICAgICAgICAgICAgICAgJ2ZpbGVzX2FsbG93X3VwbG9hZCcgPT4gdHJ1ZSwKKyAgICAgICAgICAgICAgICAnbWF4X2ZpbGVzX3VwbG9hZF9zaXplJyA9PiAnNE0nLAorICAgICAgICAgICAgICApCisgICAgICAgICAgICApCisgICAgICAgICAgPz4KKyAgICAgICAgfQorICAgICAgCisgICAgICAgIC8vIENvbmZpZ3VyZSB0aGUgTGlua2VyCisgICAgICAgIHdpdGggKHhpbmhhX2NvbmZpZy5MaW5rZXIpCisgICAgICAgIHsgCisgICAgICAgICAgPD9waHAgCisgICAgICAgICAgICByZXF1aXJlX29uY2UoJy4uL2NvbnRyaWIvcGhwLXhpbmhhLnBocCcpOworICAgICAgICAgICAgeGluaGFfcGFzc190b19waHBfYmFja2VuZAorICAgICAgICAgICAgKCAgICAgICAKKyAgICAgICAgICAgICAgYXJyYXkKKyAgICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgICdkaXInID0+IGdldGN3ZCgpLAorICAgICAgICAgICAgICAgICd1cmwnID0+ICcvZXhhbXBsZXMnLCAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKQorICAgICAgICAgID8+CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICB9LAorICAgICAgCisgICAgICAvLyBIZXJlIGlzIHdoZXJlIHlvdSBjYW4gY3VzdG9taXNlIGNvbmZpZ3MgZm9yIGVhY2ggZWRpdG9yIGFyZWEKKyAgICAgIC8vICBTZWUgdGhlIE5ld2JpZS5odG1sIGV4YW1wbGUgZm9yIHVzYWdlCisgICAgICB4aW5oYV9jb25maWdfc3BlY2lmaWM6ICAgZnVuY3Rpb24oeGluaGFfY29uZmlnLCB0ZXh0YXJlYSkKKyAgICAgIHsKKworICAgICAgfSwKKyAgICAgIAorICAgICAgLy8gSGVyZSB5b3UgY2FuIGxpbWl0IHRoZSBwbHVnaW5zIHRvIGNlcnRhaW4gZWRpdG9yIGFyZWFzCisgICAgICAvLyAgU2VlIHRoZSBOZXdiaWUuaHRtbCBleGFtcGxlIGZvciB1c2FnZQorICAgICAgeGluaGFfcGx1Z2luc19zcGVjaWZpYzogIGZ1bmN0aW9uKHhpbmhhX3BsdWdpbnMsIHRleHRhcmVhKQorICAgICAgeworCisgICAgICB9CisgICAgfQorCisgIDwvc2NyaXB0PgorICAKKzwvaGVhZD4KKworPGJvZHk+CisgIDxoMT4gRGVtb25zdHJhdGlvbiBvZiBNb290b29sc0ZpbGVNYW5hZ2VyIGFuZCBMaW5rZXIgd2l0aCBYaW5oYSBpbnRlZ3JhdGlvbiA8L2gxPgorICA8cD4gIE1vb3Rvb2xzRmlsZU1hbmFnZXIgKGZvciB1cGxvYWRpbmcgSW1hZ2VzIGFuZCBGaWxlcykgYW5kIExpbmtlciAoZm9yIGJyb3dzaW5nIGZpbGVzIG9uIHRoZSBzZXJ2ZXIgYW5kIG1ha2luZyBhIGxpbmsgdG8gdGhlbSkgcGx1Z2lucyByZXF1aXJlIFBIUCBjb25maWd1cmF0aW9uIHRvIGJlIHBhc3NlZCBpbiBhIHNlY3VyZSB3YXksIHRoaXMgZXhhbXBsZSBzaG93cyB5b3UgaG93IHRvIGRvIHRoaXMhICBWaWV3IHRoZSBzb3VyY2UsIGFsbCB0aGUgY29kZSBpcyBpbiB0aGUgaGVhZC48L3A+CisgIAorICA8Zm9ybSBhY3Rpb249ImphdmFzY3JpcHQ6dm9pZCgwKTsiIGlkPSJlZGl0b3JzX2hlcmUiIG9uc3VibWl0PSJhbGVydCh0aGlzLm15VGV4dEFyZWEudmFsdWUpOyI+CisgICAgIDxkaXY+CisgICAgPHRleHRhcmVhIGlkPSJteVRleHRBcmVhIiBuYW1lPSJteVRleHRBcmVhIiBzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6MzIwcHg7Ij4KKyZsdDtwJmd0O0xvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LgorQWxpcXVhbSBldCB0ZWxsdXMgdml0YWUganVzdG8gdmFyaXVzIHBsYWNlcmF0LiBTdXNwZW5kaXNzZSBpYWN1bGlzCit2ZWxpdCBzZW1wZXIgZG9sb3IuIERvbmVjIGdyYXZpZGEgdGluY2lkdW50IG1pLiBDdXJhYml0dXIgdHJpc3RpcXVlCithbnRlIGVsZW1lbnR1bSB0dXJwaXMuIEFsaXF1YW0gbmlzbC4gTnVsbGEgcG9zdWVyZSBuZXF1ZSBub24KK3RlbGx1cy4gTW9yYmkgdmVsIG5pYmguIEN1bSBzb2NpaXMgbmF0b3F1ZSBwZW5hdGlidXMgZXQgbWFnbmlzIGRpcworcGFydHVyaWVudCBtb250ZXMsIG5hc2NldHVyIHJpZGljdWx1cyBtdXMuIE5hbSBuZWMgd2lzaS4gSW4gd2lzaS4KK0N1cmFiaXR1ciBwaGFyZXRyYSBiaWJlbmR1bSBsZWN0dXMuJmx0Oy9wJmd0OworPC90ZXh0YXJlYT4KKyAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiAvPiA8aW5wdXQgdHlwZT0icmVzZXQiIC8+CisgICAgPC9kaXY+CisgIDwvZm9ybT4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvY3VzdG9tX3BsdWdpbnMvU3RhdHVzQmFyTWVzc2FnZS9TdGF0dXNCYXJNZXNzYWdlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvY3VzdG9tX3BsdWdpbnMvU3RhdHVzQmFyTWVzc2FnZS9TdGF0dXNCYXJNZXNzYWdlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzODZjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9jdXN0b21fcGx1Z2lucy9TdGF0dXNCYXJNZXNzYWdlL1N0YXR1c0Jhck1lc3NhZ2UuanMKQEAgLTAsMCArMSwyOSBAQAorLy8gQSBzaWx5IGxpdHRsZSBkZW1vIHBsdWdpbiB0aGF0IHB1dHMgYSBtZXNzYWdlIGluIHRoZSBzdGF0dXMgYmFyDQorDQorZnVuY3Rpb24gU3RhdHVzQmFyTWVzc2FnZShlZGl0b3IpIHsNCisgIHRoaXMuZWRpdG9yID0gZWRpdG9yOw0KK30NCisNCitTdGF0dXNCYXJNZXNzYWdlLl9wbHVnaW5JbmZvID0gew0KKyAgbmFtZSAgICAgICAgICA6ICJTdGF0dXNCYXJNZXNzYWdlIiwNCisgIHZlcnNpb24gICAgICAgOiAiMC4xIiwNCisgIGRldmVsb3BlciAgICAgOiAiSmFtZXMgU2xlZW1hbiIsDQorICBsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIg0KK307DQorDQorU3RhdHVzQmFyTWVzc2FnZS5wcm90b3R5cGUuX2xjID0gZnVuY3Rpb24oc3RyaW5nKSB7DQorICByZXR1cm4gWGluaGEuX2xjKHN0cmluZywgIlN0YXR1c0Jhck1lc3NhZ2UiKTsNCit9Ow0KKw0KK1N0YXR1c0Jhck1lc3NhZ2UucHJvdG90eXBlLm9uR2VuZXJhdGVPbmNlID0gZnVuY3Rpb24oKSB7DQorICB2YXIgc2VsZiA9IHRoaXM7DQorICBpZiAodGhpcy5tZXNzYWdlPT1udWxsKSB7DQorICAgICAgdmFyIG1lc3NhZ2UgPSBzZWxmLmVkaXRvci5yZWdpc3RlclN0YXR1c1dpZGdldCgnU3RhdHVzQmFyTWVzc2FnZScsIFsnd3lzaXd5ZyddKTsNCisgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOw0KKyAgfQ0KK307DQorDQorU3RhdHVzQmFyTWVzc2FnZS5wcm90b3R5cGUub25VcGRhdGVUb29sYmFyID0gZnVuY3Rpb24oKSB7DQorICB0aGlzLm1lc3NhZ2UuaW5uZXJIVE1MID0gdGhpcy5fbGMoIkhlbGxvIFdvcmxkLCBUaGlzIElzIFRoZSBDdXN0b20gUGx1Z2luIFNwZWFraW5nIik7DQorfTsNCisNCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9maWxlcy9FeHRlbmRlZC5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvZmlsZXMvRXh0ZW5kZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWMyMmVhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvZmlsZXMvRXh0ZW5kZWQuaHRtbApAQCAtMCwwICsxLDMyMCBAQAor77u/PGh0bWw+DQorDQorPGhlYWQ+DQorICA8dGl0bGU+U2V0dGluZ3M8L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vLi4vcG9wdXBzL3BvcHVwLmNzcyIgLz4NCisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCisNCitmdW5jdGlvbiBnZXRBYnNvbHV0ZVBvcyhlbCkgew0KKyAgdmFyIHIgPSB7IHg6IGVsLm9mZnNldExlZnQsIHk6IGVsLm9mZnNldFRvcCB9Ow0KKyAgaWYgKGVsLm9mZnNldFBhcmVudCkgew0KKyAgICB2YXIgdG1wID0gZ2V0QWJzb2x1dGVQb3MoZWwub2Zmc2V0UGFyZW50KTsNCisgICAgci54ICs9IHRtcC54Ow0KKyAgICByLnkgKz0gdG1wLnk7DQorICB9DQorICByZXR1cm4gcjsNCit9Ow0KKw0KK2Z1bmN0aW9uIGdldFNlbGVjdGVkVmFsdWUoZWwpIHsNCisgIGlmKCFlbCkNCisgICAgcmV0dXJuICIiOw0KKyAgcmV0dXJuIGVsW2VsLnNlbGVjdGVkSW5kZXhdLnZhbHVlOw0KK30NCisNCitmdW5jdGlvbiBzZXRTZWxlY3RlZFZhbHVlKGVsLCB2YWwpIHsNCisgIGlmKCFlbCkNCisgICAgcmV0dXJuICIiOw0KKyAgdmFyIG9wcyA9IGVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvcHRpb24iKTsNCisgIGZvciAodmFyIGkgPSBvcHMubGVuZ3RoOyAtLWkgPj0gMDspIHsNCisgICAgdmFyIG9wID0gb3BzW2ldOw0KKyAgICBvcC5zZWxlY3RlZCA9IChvcC52YWx1ZSA9PSB2YWwpOw0KKyAgfQ0KKyAgZWwudmFsdWUgPSB2YWw7DQorfQ0KKw0KK2Z1bmN0aW9uIGdldENoZWNrZWRWYWx1ZShlbCkgew0KKyAgaWYoIWVsKQ0KKyAgICByZXR1cm4gIiI7DQorICB2YXIgcmFkaW9MZW5ndGggPSBlbC5sZW5ndGg7DQorICBpZihyYWRpb0xlbmd0aCA9PSB1bmRlZmluZWQpDQorICAgIGlmKGVsLmNoZWNrZWQpDQorICAgICAgcmV0dXJuIGVsLnZhbHVlOw0KKyAgICBlbHNlDQorICAgICAgcmV0dXJuICJmYWxzZSI7DQorICBmb3IodmFyIGkgPSAwOyBpIDwgcmFkaW9MZW5ndGg7IGkrKykgew0KKyAgICBpZihlbFtpXS5jaGVja2VkKSB7DQorICAgICAgcmV0dXJuIGVsW2ldLnZhbHVlOw0KKyAgICB9DQorICB9DQorICByZXR1cm4gIiI7DQorfQ0KKw0KK2Z1bmN0aW9uIHNldENoZWNrZWRWYWx1ZShlbCwgdmFsKSB7DQorICBpZighZWwpDQorICAgIHJldHVybjsNCisgIHZhciByYWRpb0xlbmd0aCA9IGVsLmxlbmd0aDsNCisgIGlmKHJhZGlvTGVuZ3RoID09IHVuZGVmaW5lZCkgew0KKyAgICBlbC5jaGVja2VkID0gKGVsLnZhbHVlID09IHZhbC50b1N0cmluZygpKTsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKyAgZm9yKHZhciBpID0gMDsgaSA8IHJhZGlvTGVuZ3RoOyBpKyspIHsNCisgICAgZWxbaV0uY2hlY2tlZCA9IGZhbHNlOw0KKyAgICBpZihlbFtpXS52YWx1ZSA9PSB2YWwudG9TdHJpbmcoKSkgew0KKyAgICAgIGVsW2ldLmNoZWNrZWQgPSB0cnVlOw0KKyAgICB9DQorICB9DQorfQ0KKw0KK2Z1bmN0aW9uIF9fZGxnX29uY2xvc2UoKSB7DQorICBvcGVuZXIuRGlhbG9nLl9yZXR1cm4obnVsbCk7DQorfTsNCisNCisvLyBjbG9zZXMgdGhlIGRpYWxvZyBhbmQgcGFzc2VzIHRoZSByZXR1cm4gaW5mbyB1cHBlci4NCitmdW5jdGlvbiBfX2RsZ19jbG9zZSh2YWwpIHsNCisgIG9wZW5lci5EaWFsb2cuX3JldHVybih2YWwpOw0KKyAgd2luZG93LmNsb3NlKCk7DQorfTsNCisNCitmdW5jdGlvbiBfX2RsZ19jbG9zZV9vbl9lc2MoZXYpIHsNCisgIGV2IHx8IChldiA9IHdpbmRvdy5ldmVudCk7DQorICBpZiAoZXYua2V5Q29kZSA9PSAyNykgew0KKyAgICB3aW5kb3cuY2xvc2UoKTsNCisgICAgcmV0dXJuIGZhbHNlOw0KKyAgfQ0KKyAgcmV0dXJuIHRydWU7DQorfTsNCisNCitmdW5jdGlvbiBfX2RsZ19pbml0KGJvdHRvbSkgew0KKyAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5Ow0KKyAgdmFyIGJvZHlfaGVpZ2h0ID0gMDsNCisgIGlmICh0eXBlb2YgYm90dG9tID09ICJ1bmRlZmluZWQiKSB7DQorICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsNCisgICAgYm9keS5hcHBlbmRDaGlsZChkaXYpOw0KKyAgICB2YXIgcG9zID0gZ2V0QWJzb2x1dGVQb3MoZGl2KTsNCisgICAgYm9keV9oZWlnaHQgPSBwb3MueTsNCisgIH0gZWxzZSB7DQorICAgIHZhciBwb3MgPSBnZXRBYnNvbHV0ZVBvcyhib3R0b20pOw0KKyAgICBib2R5X2hlaWdodCA9IHBvcy55ICsgYm90dG9tLm9mZnNldEhlaWdodDsNCisgIH0NCisgIGlmICghd2luZG93LmRpYWxvZ0FyZ3VtZW50cyAmJiBvcGVuZXIuRGlhbG9nLl9hcmd1bWVudHMpDQorICB7DQorICAgIHdpbmRvdy5kaWFsb2dBcmd1bWVudHMgPSBvcGVuZXIuRGlhbG9nLl9hcmd1bWVudHM7DQorICB9DQorICBpZiAoIWRvY3VtZW50LmFsbCkgew0KKyAgIGlmKHdpbmRvdy5zaXplVG9Db250ZW50KQ0KKyAgIHsNCisgICAgd2luZG93LnNpemVUb0NvbnRlbnQoKTsNCisgICAgd2luZG93LnNpemVUb0NvbnRlbnQoKTsgIC8vIGZvciByZWFzb25zIGJleW9uZCB1bmRlcnN0YW5kaW5nLA0KKyAgICAgICAgICAvLyBvbmx5IGlmIHdlIGNhbGwgaXQgdHdpY2Ugd2UgZ2V0IHRoZQ0KKyAgICAgICAgICAvLyBjb3JyZWN0IHNpemUuDQorICAgIH0NCisgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsIF9fZGxnX29uY2xvc2UsIHRydWUpOw0KKyAgICB3aW5kb3cuaW5uZXJXaWR0aCA9IGJvZHkub2Zmc2V0V2lkdGggKyA1Ow0KKyAgICB3aW5kb3cuaW5uZXJIZWlnaHQgPSBib2R5X2hlaWdodCArIDI7DQorICAgIC8vIGNlbnRlciBvbiBwYXJlbnQNCisgICAgdmFyIHggPSBvcGVuZXIuc2NyZWVuWCArIChvcGVuZXIub3V0ZXJXaWR0aCAtIHdpbmRvdy5vdXRlcldpZHRoKSAvIDI7DQorICAgIHZhciB5ID0gb3BlbmVyLnNjcmVlblkgKyAob3BlbmVyLm91dGVySGVpZ2h0IC0gd2luZG93Lm91dGVySGVpZ2h0KSAvIDI7DQorICAgIHdpbmRvdy5tb3ZlVG8oeCwgeSk7DQorICB9IGVsc2Ugew0KKyAgICAvLyB3aW5kb3cuZGlhbG9nSGVpZ2h0ID0gYm9keS5vZmZzZXRIZWlnaHQgKyA1MCArICJweCI7DQorICAgIC8vIHdpbmRvdy5kaWFsb2dXaWR0aCA9IGJvZHkub2Zmc2V0V2lkdGggKyAicHgiOw0KKyAgICB3aW5kb3cucmVzaXplVG8oYm9keS5vZmZzZXRXaWR0aCwgYm9keV9oZWlnaHQpOw0KKyAgICB2YXIgY2ggPSBib2R5LmNsaWVudEhlaWdodDsNCisgICAgdmFyIGN3ID0gYm9keS5jbGllbnRXaWR0aDsNCisgICAgd2luZG93LnJlc2l6ZUJ5KGJvZHkub2Zmc2V0V2lkdGggLSBjdywgYm9keV9oZWlnaHQgLSBjaCk7DQorICAgIHZhciBXID0gYm9keS5vZmZzZXRXaWR0aDsNCisgICAgdmFyIEggPSAyICogYm9keV9oZWlnaHQgLSBjaDsNCisgICAgdmFyIHggPSAoc2NyZWVuLmF2YWlsV2lkdGggLSBXKSAvIDI7DQorICAgIHZhciB5ID0gKHNjcmVlbi5hdmFpbEhlaWdodCAtIEgpIC8gMjsNCisgICAgd2luZG93Lm1vdmVUbyh4LCB5KTsNCisgIH0NCisgIGRvY3VtZW50LmJvZHkub25rZXlwcmVzcyA9IF9fZGxnX2Nsb3NlX29uX2VzYzsNCit9Ow0KKw0KK2Z1bmN0aW9uIHBsYWNlRm9jdXMoKSB7DQordmFyIGJGb3VuZCA9IGZhbHNlOw0KKyAgLy8gZm9yIGVhY2ggZm9ybQ0KKyAgZm9yIChmPTA7IGYgPCBkb2N1bWVudC5mb3Jtcy5sZW5ndGg7IGYrKykgew0KKyAgICAvLyBmb3IgZWFjaCBlbGVtZW50IGluIGVhY2ggZm9ybQ0KKyAgICBmb3IoaT0wOyBpIDwgZG9jdW1lbnQuZm9ybXNbZl0ubGVuZ3RoOyBpKyspIHsNCisgICAgICAvLyBpZiBpdCdzIG5vdCBhIGhpZGRlbiBlbGVtZW50DQorICAgICAgaWYgKGRvY3VtZW50LmZvcm1zW2ZdW2ldLnR5cGUgIT0gImhpZGRlbiIpIHsNCisgICAgICAgIC8vIGFuZCBpdCdzIG5vdCBkaXNhYmxlZA0KKyAgICAgICAgaWYgKGRvY3VtZW50LmZvcm1zW2ZdW2ldLmRpc2FibGVkICE9IHRydWUpIHsNCisgICAgICAgICAgICAvLyBzZXQgdGhlIGZvY3VzIHRvIGl0DQorICAgICAgICAgICAgZG9jdW1lbnQuZm9ybXNbZl1baV0uZm9jdXMoKTsNCisgICAgICAgICAgICB2YXIgYkZvdW5kID0gdHJ1ZTsNCisgICAgICAgIH0NCisgICAgICB9DQorICAgICAgLy8gaWYgZm91bmQgaW4gdGhpcyBlbGVtZW50LCBzdG9wIGxvb2tpbmcNCisgICAgICBpZiAoYkZvdW5kID09IHRydWUpDQorICAgICAgICBicmVhazsNCisgICAgfQ0KKyAgICAvLyBpZiBmb3VuZCBpbiB0aGlzIGZvcm0sIHN0b3AgbG9va2luZw0KKyAgICBpZiAoYkZvdW5kID09IHRydWUpDQorICAgICAgYnJlYWs7DQorICB9DQorfQ0KKw0KK2Z1bmN0aW9uIEluaXQoKSB7DQorICBfX2RsZ19pbml0KCk7DQorICB2YXIgcGFyYW0gPSB3aW5kb3cuZGlhbG9nQXJndW1lbnRzOw0KKyAgaWYocGFyYW0pIHsNCisgICAgdmFyIGVsOw0KKyAgICBmb3IgKHZhciBmaWVsZCBpbiBwYXJhbSkgew0KKyAgICAgIC8vYWxlcnQoZmllbGQgKyAnPSInICsgcGFyYW1bZmllbGRdICsgJyInKTsNCisgICAgICBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpZWxkKTsNCisgICAgICBpZiAoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0iaW5wdXQiKXsNCisgICAgICAgIGlmICgoZWwudHlwZS50b0xvd2VyQ2FzZSgpPT0icmFkaW8iKSB8fCAoZWwudHlwZS50b0xvd2VyQ2FzZSgpPT0iY2hlY2tib3giKSl7DQorICAgICAgICAgIHNldENoZWNrZWRWYWx1ZShlbCwgcGFyYW1bZmllbGRdKTsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgIGVsLnZhbHVlID0gcGFyYW1bZmllbGRdOw0KKyAgICAgICAgfQ0KKyAgICAgIH0gZWxzZSBpZiAoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0ic2VsZWN0Iil7DQorICAgICAgICBzZXRTZWxlY3RlZFZhbHVlKGVsLCBwYXJhbVtmaWVsZF0pOw0KKyAgICAgIH0gZWxzZSBpZiAoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0idGV4dGFyZWEiKXsNCisgICAgICAgIGVsLnZhbHVlID0gcGFyYW1bZmllbGRdOw0KKyAgICAgIH0NCisgICAgfQ0KKyAgfQ0KKyAgcGxhY2VGb2N1cygpOw0KK307DQorDQorLy8gcGFzcyBkYXRhIGJhY2sgdG8gdGhlIGNhbGxpbmcgd2luZG93DQorZnVuY3Rpb24gb25PSygpIHsNCisgIHZhciBwYXJhbSA9IG5ldyBPYmplY3QoKTsNCisgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOw0KKyAgZm9yICh2YXIgaT0wOyBpPGVsLmxlbmd0aDtpKyspew0KKyAgICBpZiAoKGVsW2ldLnR5cGUudG9Mb3dlckNhc2UoKT09InJhZGlvIikgfHwgKGVsW2ldLnR5cGUudG9Mb3dlckNhc2UoKT09ImNoZWNrYm94Iikpew0KKyAgICAgIGlmIChnZXRDaGVja2VkVmFsdWUoZWxbaV0pIT0nJyl7DQorICAgICAgICBwYXJhbVtlbFtpXS5pZF0gPSBnZXRDaGVja2VkVmFsdWUoZWxbaV0pOw0KKyAgICAgIH0NCisgICAgfSBlbHNlIHsNCisgICAgICBwYXJhbVtlbFtpXS5pZF0gPSBlbFtpXS52YWx1ZTsNCisgICAgfQ0KKyAgfQ0KKyAgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2VsZWN0Jyk7DQorICBmb3IgKHZhciBpPTA7IGk8ZWwubGVuZ3RoO2krKyl7DQorICAgIHBhcmFtW2VsW2ldLmlkXSA9IGdldFNlbGVjdGVkVmFsdWUoZWxbaV0pOw0KKyAgfQ0KKyAgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGV4dGFyZWEnKTsNCisgIGZvciAodmFyIGk9MDsgaTxlbC5sZW5ndGg7aSsrKXsNCisgICAgcGFyYW1bZWxbaV0uaWRdID0gZWxbaV0udmFsdWU7DQorICB9DQorICBfX2RsZ19jbG9zZShwYXJhbSk7DQorICByZXR1cm4gZmFsc2U7DQorfTsNCisNCitmdW5jdGlvbiBvbkNhbmNlbCgpIHsNCisgIF9fZGxnX2Nsb3NlKG51bGwpOw0KKyAgcmV0dXJuIGZhbHNlOw0KK307DQorDQorPC9zY3JpcHQ+DQorDQorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCisgIGxhYmVsIHsgd2lkdGg6IDE2ZW07IGZsb2F0OiBsZWZ0OyBwYWRkaW5nOiAycHggNXB4OyB0ZXh0LWFsaWduOiByaWdodDsgfQ0KKyAgYnIgeyBjbGVhcjogYm90aDsgfQ0KKzwvc3R5bGU+DQorDQorPC9oZWFkPg0KKw0KKzxib2R5IGNsYXNzPSJkaWFsb2ciIG9ubG9hZD0iSW5pdCgpOyB3aW5kb3cucmVzaXplVG8oNDIwLCA4MjApOyI+DQorPGRpdiBjbGFzcz0idGl0bGUiPlNldHRpbmdzPC9kaXY+DQorICA8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJnZXQiPg0KKyAgPGZpZWxkc2V0Pg0KKyAgICA8bGVnZW5kPlhpbmhhIG9wdGlvbnM8L2xlZ2VuZD4NCisgICAgPGxhYmVsIGZvcj0id2lkdGgiPkVkaXRvciB3aWR0aDo8L2xhYmVsPg0KKyAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0id2lkdGgiIGlkPSJ3aWR0aCIgdGl0bGU9IkFsbG93ZWQgdmFsdWVzIGFyZSAnYXV0bycsICd0b29sYmFyJyBvciBhIG51bWVyaWMgdmFsdWUgZm9sbG93ZWQgYnkgJ3B4Jy4iIC8+PGJyIC8+DQorICAgIDxsYWJlbCBmb3I9ImhlaWdodCI+RWRpdG9yIGhlaWdodDo8L2xhYmVsPg0KKyAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaGVpZ2h0IiBpZD0iaGVpZ2h0IiB0aXRsZT0iQWxsb3dlZCB2YWx1ZXMgYXJlICdhdXRvJyBvciBhIG51bWVyaWMgdmFsdWUgZm9sbG93ZWQgYnkgJ3B4Jy4iIC8+PGJyIC8+DQorICAgIDxsYWJlbCBmb3I9InNpemVJbmNsdWRlc0JhcnMiPlNpemUgaW5jbHVkZXMgYmFyczwvbGFiZWw+DQorICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic2l6ZUluY2x1ZGVzQmFycyIgaWQ9InNpemVJbmNsdWRlc0JhcnMiIHZhbHVlPSJ0cnVlIiB0aXRsZT0iU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHRvb2xiYXIgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBzaXplLCBvciBhcmUgZXh0cmEgdG8gaXQuIiAvPjxiciAvPg0KKyAgICA8bGFiZWwgZm9yPSJzaXplSW5jbHVkZXNQYW5lbHMiPlNpemUgaW5jbHVkZXMgcGFuZWxzPC9sYWJlbD4NCisgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJzaXplSW5jbHVkZXNQYW5lbHMiIGlkPSJzaXplSW5jbHVkZXNQYW5lbHMiIHZhbHVlPSJ0cnVlIiB0aXRsZT0iU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHBhbmVscyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHNpemUsIG9yIGFyZSBleHRyYSB0byBpdC4iIC8+PGJyIC8+DQorICAgIDxsYWJlbCBmb3I9InN0YXR1c0JhciI+U3RhdHVzIEJhcjwvbGFiZWw+DQorICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic3RhdHVzQmFyIiBpZD0ic3RhdHVzQmFyIiB2YWx1ZT0idHJ1ZSIgdGl0bGU9IkVuYWJsZSBjcmVhdGlvbiBvZiB0aGUgc3RhdHVzIGJhcj8iIC8+PGJyIC8+DQorICAgIDxsYWJlbCBmb3I9Imh0bWxhcmVhUGFzdGUiPkh0bWxhcmVhIFBhc3RlPC9sYWJlbD4NCisgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJodG1sYXJlYVBhc3RlIiBpZD0iaHRtbGFyZWFQYXN0ZSIgdmFsdWU9InRydWUiIHRpdGxlPSJJbnRlcmNlcHQgXlYgYW5kIHVzZSB0aGUgWGluaGEgcGFzdGUgY29tbWFuZCIgLz48YnIgLz4NCisgICAgPGxhYmVsIGZvcj0ibW96UGFyYUhhbmRsZXIiPk1vemlsbGEgUGFyYW1ldGVyIEhhbmRsZXI6PC9sYWJlbD4NCisgICAgPHNlbGVjdCBuYW1lPSJtb3pQYXJhSGFuZGxlciIgaWQ9Im1velBhcmFIYW5kbGVyIiB0aXRsZT0iR2Vja28gb25seTogTGV0IHRoZSBidWlsdC1pbiByb3V0aW5lIGZvciBoYW5kbGluZyB0aGUgcmV0dXJuIGtleSBkZWNpZGUgaWYgdG8gZW50ZXIgYnIgb3IgcCB0YWdzIG9yIHVzZSBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbi4iPg0KKyAgICA8b3B0aW9uIHZhbHVlPSJidWlsdC1pbiI+YnVpbHQtaW48L29wdGlvbj4NCisgICAgPG9wdGlvbiB2YWx1ZT0iZGlydHkiPmRpcnR5PC9vcHRpb24+DQorICAgIDxvcHRpb24gdmFsdWU9ImJlc3QiPmJlc3Q8L29wdGlvbj4NCisgICAgPC9zZWxlY3Q+PGJyIC8+DQorICAgIDxsYWJlbCBmb3I9ImdldEh0bWxNZXRob2QiPkdldEh0bWwgTWV0aG9kOjwvbGFiZWw+DQorICAgIDxzZWxlY3QgbmFtZT0iZ2V0SHRtbE1ldGhvZCIgaWQ9ImdldEh0bWxNZXRob2QiIHRpdGxlPSJUaGlzIGRldGVybWluZXMgdGhlIG1ldGhvZCBob3cgdGhlIEhUTUwgb3V0cHV0IGlzIGdlbmVyYXRlZC4iPg0KKyAgICA8b3B0aW9uIHZhbHVlPSJET013YWxrIj5ET013YWxrPC9vcHRpb24+DQorICAgIDxvcHRpb24gdmFsdWU9IlRyYW5zZm9ybUlubmVySFRNTCI+VHJhbnNmb3JtSW5uZXJIVE1MPC9vcHRpb24+DQorICAgIDwvc2VsZWN0PjxiciAvPg0KKyAgICA8bGFiZWwgZm9yPSJ1bmRvU3RlcHMiPlVuZG8gc3RlcHM6PC9sYWJlbD4NCisgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InVuZG9TdGVwcyIgaWQ9InVuZG9TdGVwcyIgdGl0bGU9Ik1heGltdW0gc2l6ZSBvZiB0aGUgdW5kbyBxdWV1ZS4iICAvPjxiciAvPg0KKyAgICA8bGFiZWwgZm9yPSJ1bmRvVGltZW91dCI+VW5kbyBUaW1lb3V0OjwvbGFiZWw+DQorICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1bmRvVGltZW91dCIgaWQ9InVuZG9UaW1lb3V0IiB0aXRsZT0iVGhlIHRpbWUgaW50ZXJ2YWwgYXQgd2hpY2ggdW5kbyBzYW1wbGVzIGFyZSB0YWtlbiwgZGVmYXVsdDogNTAwICgxLzIgc2VjKS4iICAvPjxiciAvPg0KKyAgICA8bGFiZWwgZm9yPSJjaGFuZ2VKdXN0aWZ5V2l0aERpcmVjdGlvbiI+Y2hhbmdlIGp1c3RpZnkgd2l0aCBkaXJlY3Rpb248L2xhYmVsPg0KKyAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImNoYW5nZUp1c3RpZnlXaXRoRGlyZWN0aW9uIiBpZD0iY2hhbmdlSnVzdGlmeVdpdGhEaXJlY3Rpb24iIHZhbHVlPSJ0cnVlIiB0aXRsZT0iU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0byBleHBsaWNpdGx5IHJpZ2h0LWp1c3RpZnkgd2hlbiBzZXR0aW5nIHRoZSB0ZXh0IGRpcmVjdGlvbiB0byByaWdodC10by1sZWZ0IiAvPjxiciAvPg0KKyAgICA8bGFiZWwgZm9yPSJmdWxsUGFnZSI+ZnVsbCBQYWdlPC9sYWJlbD4NCisgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJmdWxsUGFnZSIgaWQ9ImZ1bGxQYWdlIiB2YWx1ZT0idHJ1ZSIgdGl0bGU9IklmIHRydWUgdGhlbiBYaW5oYSB3aWxsIHJldHJpZXZlIHRoZSBmdWxsIEhUTUwsIHN0YXJ0aW5nIHdpdGggdGhlIEhUTUwtdGFnLiIgLz48YnIgLz4NCisgICAgPGxhYmVsIGZvcj0icGFnZVN0eWxlIj5QYWdlIHN0eWxlOjwvbGFiZWw+DQorICAgIDx0ZXh0YXJlYSBuYW1lPSJwYWdlU3R5bGUiIGlkPSJwYWdlU3R5bGUiIHRpdGxlPSJSYXcgc3R5bGUgZGVmaW5pdGlvbnMgaW5jbHVkZWQgaW4gdGhlIGVkaXRlZCBkb2N1bWVudCI+PC90ZXh0YXJlYT4NCis8IS0tICAgIHBhZ2VTdHlsZVNoZWV0cyAtLT4NCisgICAgPGxhYmVsIGZvcj0iYmFzZUhyZWYiPkJhc2UgaHJlZjo8L2xhYmVsPg0KKyAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYmFzZUhyZWYiIGlkPSJiYXNlSHJlZiIgdGl0bGU9InNwZWNpZnkgYSBiYXNlIGhyZWYgZm9yIHJlbGF0aXZlIGxpbmtzIiAvPjxiciAvPg0KKyAgICA8bGFiZWwgZm9yPSJleHBhbmRSZWxhdGl2ZVVybCI+ZXhwYW5kIHJlbGF0aXZlIFVybDwvbGFiZWw+DQorICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZXhwYW5kUmVsYXRpdmVVcmwiIGlkPSJleHBhbmRSZWxhdGl2ZVVybCIgdmFsdWU9InRydWUiIHRpdGxlPSJJZiB0cnVlLCByZWxhdGl2ZSBVUkxzICguLi8pIHdpbGwgYmUgbWFkZSBhYnNvbHV0ZSIvPjxiciAvPg0KKyAgICA8bGFiZWwgZm9yPSJzdHJpcEJhc2VIcmVmIj5TdHJpcCBiYXNlIGhyZWY8L2xhYmVsPg0KKyAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InN0cmlwQmFzZUhyZWYiIGlkPSJzdHJpcEJhc2VIcmVmIiB2YWx1ZT0idHJ1ZSIgdGl0bGU9IldlIGNhbiBzdHJpcCB0aGUgc2VydmVyIHBhcnQgb3V0IG9mIFVSTCB0byBtYWtlL2xlYXZlIHRoZW0gc2VtaS1hYnNvbHV0ZSIgLz48YnIgLz4NCisgICAgPGxhYmVsIGZvcj0ic3RyaXBTZWxmTmFtZWRBbmNob3JzIj5TdHJpcCBzZWxmIG5hbWVkIGFuY2hvcnM8L2xhYmVsPg0KKyAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InN0cmlwU2VsZk5hbWVkQW5jaG9ycyIgaWQ9InN0cmlwU2VsZk5hbWVkQW5jaG9ycyIgdmFsdWU9InRydWUiIHRpdGxlPSJXZSBjYW4gc3RyaXAgdGhlIHVybCBvZiB0aGUgZWRpdG9yIHBhZ2UgZnJvbSBuYW1lZCBsaW5rcyIgLz48YnIgLz4NCisgICAgPGxhYmVsIGZvcj0ib25seTdCaXRQcmludGFibGVzSW5VUkxzIj5vbmx5IDdiaXQgcHJpbnRhYmxlcyBpbiBVUkxzPC9sYWJlbD4NCisgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJvbmx5N0JpdFByaW50YWJsZXNJblVSTHMiIGlkPSJvbmx5N0JpdFByaW50YWJsZXNJblVSTHMiIHZhbHVlPSJ0cnVlIiB0aXRsZT0iSW4gVVJMcyBhbGwgY2hhcmFjdGVycyBhYm92ZSBBU0NJSSB2YWx1ZSAxMjcgaGF2ZSB0byBiZSBlbmNvZGVkIHVzaW5nICUgY29kZXMiIC8+PGJyIC8+DQorICAgIDxsYWJlbCBmb3I9InNldmVuQml0Q2xlYW4iPjdiaXQgQ2xlYW48L2xhYmVsPg0KKyAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InNldmVuQml0Q2xlYW4iIGlkPSJzZXZlbkJpdENsZWFuIiB2YWx1ZT0idHJ1ZSIgdGl0bGU9IklmIHlvdSBhcmUgcHV0dGluZyB0aGUgSFRNTCB3cml0dGVuIGluIFhpbmhhIGludG8gYW4gZW1haWwgeW91IG1pZ2h0IHdhbnQgaXQgdG8gYmUgNy1iaXQgY2hhcmFjdGVycyBvbmx5LiIgLz48YnIgLz4NCisgICAgPGxhYmVsIGZvcj0ia2lsbFdvcmRPblBhc3RlIj5raWxsIFdvcmQgb24gcGFzdGU8L2xhYmVsPg0KKyAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImtpbGxXb3JkT25QYXN0ZSIgaWQ9ImtpbGxXb3JkT25QYXN0ZSIgdmFsdWU9InRydWUiIHRpdGxlPSJTZXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCBXb3JkIGNvZGUgdG8gYmUgY2xlYW5lZCB1cG9uIFBhc3RlLiIgLz48YnIgLz4NCisgICAgPGxhYmVsIGZvcj0ibWFrZUxpbmtTaG93c1RhcmdldCI+bWFrZSBMaW5rIFNob3dzIFRhcmdldDwvbGFiZWw+DQorICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ibWFrZUxpbmtTaG93c1RhcmdldCIgaWQ9Im1ha2VMaW5rU2hvd3NUYXJnZXQiIHZhbHVlPSJ0cnVlIiB0aXRsZT0iRW5hYmxlIHRoZSAnVGFyZ2V0JyBmaWVsZCBpbiB0aGUgTWFrZSBMaW5rIGRpYWxvZy4iIC8+PGJyIC8+DQorICAgIDxsYWJlbCBmb3I9ImZsb3dUb29sYmFycyI+ZmxvdyB0b29sYmFyczwvbGFiZWw+DQorICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZmxvd1Rvb2xiYXJzIiBpZD0iZmxvd1Rvb2xiYXJzIiB2YWx1ZT0idHJ1ZSIgLz48YnIgLz4NCisgICAgPGxhYmVsIGZvcj0ic3RyaXBTY3JpcHRzIj5zdHJpcCBTY3JpcHRzPC9sYWJlbD4NCisgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJzdHJpcFNjcmlwdHMiIGlkPSJzdHJpcFNjcmlwdHMiIHZhbHVlPSJ0cnVlIiB0aXRsZT0iU2V0IHRvIGZhbHNlIGlmIHlvdSB3YW50IHRvIGFsbG93IEphdmFTY3JpcHQgaW4gdGhlIGNvbnRlbnQiIC8+PGJyIC8+DQorICAgIDxsYWJlbCBmb3I9InNob3dMb2FkaW5nIj5zaG93IGxvYWRpbmc8L2xhYmVsPg0KKyAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InNob3dMb2FkaW5nIiBpZD0ic2hvd0xvYWRpbmciIHZhbHVlPSJ0cnVlIiAvPjxiciAvPg0KKyAgPC9maWVsZHNldD4NCisNCisgIDxmaWVsZHNldCBpZD0iQ2hhcmFjdGVyTWFwT3B0aW9ucyIgY2xhc3M9Im9wdGlvbnMiPg0KKyAgICA8bGVnZW5kPkNoYXJhY3Rlck1hcCBvcHRpb25zPC9sZWdlbmQ+DQorICAgIDxsYWJlbCBmb3I9IkNoYXJhY3Rlck1hcE1vZGUiPk1vZGUgOjwvbGFiZWw+DQorICAgIDxzZWxlY3QgaWQ9IkNoYXJhY3Rlck1hcE1vZGUiIG5hbWU9IkNoYXJhY3Rlck1hcE1vZGUiPg0KKyAgICA8b3B0aW9uIHZhbHVlPSJwb3B1cCI+cG9wdXA8L29wdGlvbj4NCisgICAgPG9wdGlvbiB2YWx1ZT0icGFuZWwiPnBhbmVsPC9vcHRpb24+DQorICAgIDwvc2VsZWN0Pg0KKyAgPC9maWVsZHNldD4NCisNCisgIDxmaWVsZHNldCBpZD0iTGlzdFR5cGVPcHRpb25zIiBjbGFzcz0ib3B0aW9ucyI+DQorICAgIDxsZWdlbmQ+TGlzdFR5cGUgb3B0aW9uczwvbGVnZW5kPg0KKyAgICA8bGFiZWwgY2xhc3M9Ikxpc3RUeXBlTW9kZSI+TW9kZSA6PC9sYWJlbD4NCisgICAgPHNlbGVjdCBpZD0iTGlzdFR5cGVNb2RlIiBuYW1lPSJMaXN0VHlwZU1vZGUiPg0KKyAgICA8b3B0aW9uIHZhbHVlPSJ0b29sYmFyIj50b29sYmFyPC9vcHRpb24+DQorICAgIDxvcHRpb24gdmFsdWU9InBhbmVsIj5wYW5lbDwvb3B0aW9uPg0KKyAgICA8L3NlbGVjdD4NCisgIDwvZmllbGRzZXQ+DQorDQorICA8ZmllbGRzZXQgaWQ9IkNoYXJDb3VudGVyT3B0aW9ucyIgY2xhc3M9Im9wdGlvbnMiPg0KKyAgICA8bGVnZW5kPkNoYXJDb3VudGVyIG9wdGlvbnM8L2xlZ2VuZD4NCisgICAgPGxhYmVsIGZvcj0ic2hvd0NoYXIiPnNob3cgQ2hhciA6PC9sYWJlbD4NCisgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJzaG93Q2hhciIgaWQ9InNob3dDaGFyIiB2YWx1ZT0idHJ1ZSIgLz48YnIgLz4NCisgICAgPGxhYmVsIGZvcj0ic2hvd1dvcmQiPnNob3cgV29yZCA6PC9sYWJlbD4NCisgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJzaG93V29yZCIgaWQ9InNob3dXb3JkIiB2YWx1ZT0idHJ1ZSIgLz48YnIgLz4NCisgICAgPGxhYmVsIGZvcj0ic2hvd0h0bWwiPnNob3cgSHRtbCA6PC9sYWJlbD4NCisgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJzaG93SHRtbCIgaWQ9InNob3dIdG1sIiB2YWx1ZT0idHJ1ZSIgLz48YnIgLz4NCisgIDwvZmllbGRzZXQ+DQorICA8YnIgLz4NCisNCisgIDxkaXYgaWQ9ImJ1dHRvbnMiPg0KKyAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0ib2siIG9uY2xpY2s9InJldHVybiBvbk9LKCk7Ij5PSzwvYnV0dG9uPg0KKyAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbmFtZT0iY2FuY2VsIiBvbmNsaWNrPSJyZXR1cm4gb25DYW5jZWwoKTsiPkNhbmNlbDwvYnV0dG9uPg0KKyAgPC9kaXY+DQorPC9mb3JtPg0KKzwvYm9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvZmlsZXMvY3VzdG9tLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2V4YW1wbGVzL2ZpbGVzL2N1c3RvbS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhjYmZlNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2V4YW1wbGVzL2ZpbGVzL2N1c3RvbS5jc3MKQEAgLTAsMCArMSw0MCBAQAorICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOm5vVGFicz10cnVlOnRhYlNpemU9MjppbmRlbnRTaXplPTI6LS0KKyAgICAtLSAgQ1NTIHBsdWdpbiBleGFtcGxlIENTUyBmaWxlLiAgVGhpcyBmaWxlIGlzIHVzZWQgYnkgZnVsbF9leGFtcGxlLmpzCisgICAgLS0gIHdoZW4gdGhlIENTUyBwbHVnaW4gaXMgaW5jbHVkZWQgaW4gYW4gYXV0by1nZW5lcmF0ZWQgZXhhbXBsZS4KKyAgICAtLSAgQFRPRE8gTWFrZSB0aGlzIENTUyBtb3JlIHVzZWZ1bC4KKyAgICAtLQorICAgIC0tICAkSGVhZFVSTDpodHRwOi8vc3ZuLnhpbmhhLndlYmZhY3Rpb25hbC5jb20vdHJ1bmsvZXhhbXBsZXMvZmlsZXMvY3VzdG9tLmNzcyAkCisgICAgLS0gICRMYXN0Q2hhbmdlZERhdGU6MjAwOC0wMi0wNCAwMTo0MzoyMSArMDEwMCAoTW8sIDA0IEZlYiAyMDA4KSAkCisgICAgLS0gICRMYXN0Q2hhbmdlZFJldmlzaW9uOjk2MiAkCisgICAgLS0gICRMYXN0Q2hhbmdlZEJ5OnJheSAkCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitib2R5IHsgYmFja2dyb3VuZC1jb2xvcjogIzIzNDsgY29sb3I6ICNkZDg7IGZvbnQtZmFtaWx5OiB0YWhvbWE7IGZvbnQtc2l6ZTogMTJweDsgfQorCithOmxpbmssIGE6dmlzaXRlZCB7IGNvbG9yOiAjOGNmOyB9CithOmhvdmVyIHsgY29sb3I6ICNmZjg7IH0KKworaDEgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjNDU2OyBjb2xvcjogI2ZmODsgcGFkZGluZzogMnB4IDVweDsgYm9yZGVyOiAxcHggc29saWQ7IGJvcmRlci1jb2xvcjogIzY3OCAjMDEyICMwMTIgIzY3ODsgfQorCisvKiBzeW50YXggaGlnaGxpZ2h0aW5nICh1c2VkIGJ5IHRoZSBmaXJzdCBjb21ibyBkZWZpbmVkIGZvciB0aGUgQ1NTIHBsdWdpbikgKi8KKworcHJlIHsgbWFyZ2luOiAwcHggMWVtOyBwYWRkaW5nOiA1cHggMWVtOyBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOyBib3JkZXI6IDFweCBkb3R0ZWQgIzAyZDsgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjMDRmOyB9CisuY29kZSB7IGNvbG9yOiAjZjVkZWIzOyB9Cisuc3RyaW5nIHsgY29sb3I6ICMwMGZmZmY7IH0KKy5jb21tZW50IHsgY29sb3I6ICM4ZmJjOGY7IH0KKy52YXJpYWJsZS1uYW1lIHsgY29sb3I6ICNmYTgwNzI7IH0KKy50eXBlIHsgY29sb3I6ICM5MGVlOTA7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CisucmVmZXJlbmNlIHsgY29sb3I6ICNlZTgyZWU7IH0KKy5wcmVwcm9jZXNzb3IgeyBjb2xvcjogI2ZhZjsgfQorLmtleXdvcmQgeyBjb2xvcjogI2ZmZmZmZjsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KKy5mdW5jdGlvbi1uYW1lIHsgY29sb3I6ICNhY2U7IH0KKy5odG1sLXRhZyB7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CisuaHRtbC1oZWxwZXItaXRhbGljIHsgZm9udC1zdHlsZTogaXRhbGljOyB9Cisud2FybmluZyB7IGNvbG9yOiAjZmZhNTAwOyBmb250LXdlaWdodDogYm9sZDsgfQorLmh0bWwtaGVscGVyLWJvbGQgeyBmb250LXdlaWdodDogYm9sZDsgfQorCisvKiBpbmZvIGNvbWJvICovCisKKy5xdW90ZSB7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6ICNlZTk7IH0KKy5oaWdobGlnaHQgeyBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7IGNvbG9yOiAjMDAwOyB9CisuZGVwcmVjYXRlZCB7IHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyBjb2xvcjogI2FhYTsgfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvZmlsZXMvZHluYW1pYy5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9maWxlcy9keW5hbWljLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTdkZTYyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvZmlsZXMvZHluYW1pYy5jc3MKQEAgLTAsMCArMSw1NiBAQAorICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOm5vVGFicz10cnVlOnRhYlNpemU9MjppbmRlbnRTaXplPTI6LS0KKyAgICAtLSAgRHluYW1pY0NTUyBwbHVnaW4gZXhhbXBsZSBDU1MgZmlsZS4gIFVzZWQgYnkgZnVsbF9leGFtcGxlLmpzCisgICAgLS0gIHdoZW4gdGhlIER5bmFtaWNDU1MgcGx1Z2luIGlzIGluY2x1ZGVkIGluIGFuIGF1dG8tZ2VuZXJhdGVkIGV4YW1wbGUuCisgICAgLS0gIEBUT0RPIE1ha2UgdGhpcyBDU1MgbW9yZSB1c2VmdWwuCisgICAgLS0KKyAgICAtLSAgJEhlYWRVUkw6aHR0cDovL3N2bi54aW5oYS53ZWJmYWN0aW9uYWwuY29tL3RydW5rL2V4YW1wbGVzL2ZpbGVzL2R5bmFtaWMuY3NzICQKKyAgICAtLSAgJExhc3RDaGFuZ2VkRGF0ZToyMDA4LTAyLTA0IDAxOjQzOjIxICswMTAwIChNbywgMDQgRmViIDIwMDgpICQKKyAgICAtLSAgJExhc3RDaGFuZ2VkUmV2aXNpb246OTYyICQKKyAgICAtLSAgJExhc3RDaGFuZ2VkQnk6cmF5ICQKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3AgeworICBGT05ULUZBTUlMWTogQXJpYWwsIEhlbHZldGljYTsKKyAgRk9OVC1TSVpFOiA5cHQ7CisgIEZPTlQtV0VJR0hUOiBub3JtYWw7CisgIENPTE9SOiAjMDAwMDAwOworfQorCitwLnAxIHsKKyAgRk9OVC1GQU1JTFk6IEFyaWFsLCBIZWx2ZXRpY2E7CisgIEZPTlQtU0laRTogMTFwdDsKKyAgRk9OVC1XRUlHSFQ6IG5vcm1hbDsKKyAgQ09MT1I6ICMwMDAwMDA7Cit9CisKK3AucDIgeworICBGT05ULUZBTUlMWTogQXJpYWwsIEhlbHZldGljYTsKKyAgRk9OVC1TSVpFOiAxM3B0OworICBGT05ULVdFSUdIVDogbm9ybWFsOworICBDT0xPUjogIzAwMDAwMDsKK30KKworZGl2IHsKKyAgRk9OVC1GQU1JTFk6IEFyaWFsLCBIZWx2ZXRpY2E7CisgIEZPTlQtU0laRTogOXB0OworICBGT05ULVdFSUdIVDogYm9sZDsKKyAgQ09MT1I6ICMwMDAwMDA7Cit9CisKK2Rpdi5kaXYxIHsKKyAgRk9OVC1GQU1JTFk6IEFyaWFsLCBIZWx2ZXRpY2E7CisgIEZPTlQtU0laRTogMTFwdDsKKyAgRk9OVC1XRUlHSFQ6IGJvbGQ7CisgIENPTE9SOiAjMDAwMDAwOworfQorCitkaXYuZGl2MiB7CisgIEZPTlQtRkFNSUxZOiBBcmlhbCwgSGVsdmV0aWNhOworICBGT05ULVNJWkU6IDEzcHQ7CisgIEZPTlQtV0VJR0hUOiBib2xkOworICBDT0xPUjogIzAwMDAwMDsKK30KKworLnF1b3RlIHsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjogI2VlOTsgfQorLmhpZ2hsaWdodCB7IGJhY2tncm91bmQtY29sb3I6IHllbGxvdzsgY29sb3I6ICMwMDA7IH0KKy5kZXByZWNhdGVkIHsgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7IGNvbG9yOiAjYWFhOyB9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9maWxlcy9leHRfZXhhbXBsZS1ib2R5LnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2V4YW1wbGVzL2ZpbGVzL2V4dF9leGFtcGxlLWJvZHkucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYjZmOGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9maWxlcy9leHRfZXhhbXBsZS1ib2R5LnBocApAQCAtMCwwICsxLDI1NiBAQAorPD9waHAgDQorICBzd2l0Y2goQCRfUkVRVUVTVFsnRG9jVHlwZSddKQ0KKyAgew0KKyAgICANCisgICAgY2FzZSAncXVpcmtzJzoNCisgICAgICBicmVhazsNCisgICAgICANCisgICBjYXNlICdhbG1vc3QnOg0KKyAgICAgIGVjaG8gJzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4nOw0KKyAgICAgIGJyZWFrOw0KKyAgICANCisgICAgY2FzZSAnc3RhbmRhcmRzJzoNCisgICAgZGVmYXVsdDoNCisgICAgICBlY2hvICc8IURPQ1RZUEUgaHRtbD4nOw0KKyAgICAgIGJyZWFrOw0KKyAgICAgIA0KKyAgfQ0KKz8+DQorPGh0bWw+DQorPGhlYWQ+DQorDQorICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAtLSAgJEhlYWRVUkw6IGh0dHA6Ly9zdm4ueGluaGEub3JnL2JyYW5jaGVzL01vb3Rvb2xzRmlsZU1hbmFnZXItVXBkYXRlL2V4YW1wbGVzL2ZpbGVzL2V4dF9leGFtcGxlLWJvZHkuaHRtbCAkDQorICAgIC0tICAkTGFzdENoYW5nZWREYXRlOiAyMDA4LTEwLTEzIDA2OjQyOjQyICsxMzAwIChNb24sIDEzIE9jdCAyMDA4KSAkDQorICAgIC0tICAkTGFzdENoYW5nZWRSZXZpc2lvbjogMTA4NCAkDQorICAgIC0tICAkTGFzdENoYW5nZWRCeTogcmF5ICQNCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPg0KKw0KKyAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+DQorICA8dGl0bGU+RXhhbXBsZSBvZiBYaW5oYTwvdGl0bGU+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJmdWxsX2V4YW1wbGUuY3NzIiAvPg0KKw0KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KKyAgICBmdW5jdGlvbiBzaG93RXJyb3IoIHNNc2csIHNVcmwsIHNMaW5lKXsNCisgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyb3JzJykudmFsdWUgKz0gJ0Vycm9yOiAnICsgc01zZyArICdcbicgKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU291cmNlIEZpbGU6ICcgKyBzVXJsICsgJ1xuJyArDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMaW5lOiAnICsgc0xpbmUgKyAnXG4nOw0KKyAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKyAgICAvLyBZb3UgbXVzdCBzZXQgX2VkaXRvcl91cmwgdG8gdGhlIFVSTCAoaW5jbHVkaW5nIHRyYWlsaW5nIHNsYXNoKSB3aGVyZQ0KKyAgICAvLyB3aGVyZSB4aW5oYSBpcyBpbnN0YWxsZWQsIGl0J3MgaGlnaGx5IHJlY29tbWVuZGVkIHRvIHVzZSBhbiBhYnNvbHV0ZSBVUkwNCisgICAgLy8gIGVnOiBfZWRpdG9yX3VybCA9ICIvcGF0aC90by94aW5oYS8iOw0KKyAgICAvLyBZb3UgbWF5IHRyeSBhIHJlbGF0aXZlIFVSTCBpZiB5b3Ugd2lzaF0NCisgICAgLy8gIGVnOiBfZWRpdG9yX3VybCA9ICIuLi8iOw0KKyAgICAvLyBpbiB0aGlzIGV4YW1wbGUgd2UgZG8gYSBsaXR0bGUgcmVndWxhciBleHByZXNzaW9uIHRvIGZpbmQgdGhlIGFic29sdXRlIHBhdGguDQorICAgIF9lZGl0b3JfdXJsICA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgvZXhhbXBsZXNcL2ZpbGVzXC9leHRfZXhhbXBsZS1ib2R5XC5waHAuKi8sICcnKQ0KKyAgICAvL21vdmVkIF9lZGl0b3JfbGFuZyAmIF9lZGl0b3Jfc2tpbiB0byBpbml0IGZ1bmN0aW9uIGJlY2F1c2Ugb2YgZXJyb3IgdGhyb3duIHdoZW4gZnJhbWUgZG9jdW1lbnQgbm90IHJlYWR5DQorICA8L3NjcmlwdD4NCisNCisgIDwhLS0gTG9hZCB1cCB0aGUgYWN0dWFsIGVkaXRvciBjb3JlIC0tPg0KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vWGluaGFDb3JlLmpzIj48L3NjcmlwdD4NCisNCisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCisgICAgeGluaGFfZWRpdG9ycyA9IG51bGw7DQorICAgIHhpbmhhX2luaXQgICAgPSBudWxsOw0KKyAgICB4aW5oYV9jb25maWcgID0gbnVsbDsNCisgICAgeGluaGFfcGx1Z2lucyA9IG51bGw7DQorDQorICAgIHhpbmhhX2luaXQgPSB4aW5oYV9pbml0ID8geGluaGFfaW5pdCA6IGZ1bmN0aW9uKCkgew0KKyAgICAgIHdpbmRvdy5vbmVycm9yID0gc2hvd0Vycm9yOw0KKyAgICAgIGRvY3VtZW50Lm9uZXJyb3IgPSBzaG93RXJyb3I7DQorDQorICAgICAgdmFyIGYgPSB0b3AuZnJhbWVzWyJtZW51Il0uZG9jdW1lbnQuZm9ybXNbImZzZXR0aW5ncyJdOw0KKyAgICAgIF9lZGl0b3JfbGFuZyA9IGYubGFuZ1tmLmxhbmcuc2VsZWN0ZWRJbmRleF0udmFsdWU7IC8vIHRoZSBsYW5ndWFnZSB3ZSBuZWVkIHRvIHVzZSBpbiB0aGUgZWRpdG9yLg0KKyAgICAgIF9lZGl0b3Jfc2tpbiA9IGYuc2tpbltmLnNraW4uc2VsZWN0ZWRJbmRleF0udmFsdWU7IC8vIHRoZSBza2luIHdlIHVzZSBpbiB0aGUgZWRpdG9yDQorICAgICAgX2VkaXRvcl9pY29ucyA9IGYuaWNvbnNbZi5pY29ucy5zZWxlY3RlZEluZGV4XS52YWx1ZTsNCisgICAgICANCisvLyBXaGF0IGFyZSB0aGUgcGx1Z2lucyB5b3Ugd2lsbCBiZSB1c2luZyBpbiB0aGUgZWRpdG9ycyBvbiB0aGlzIHBhZ2UuDQorLy8gTGlzdCBhbGwgdGhlIHBsdWdpbnMgeW91IHdpbGwgbmVlZCwgZXZlbiBpZiBub3QgYWxsIHRoZSBlZGl0b3JzIHdpbGwgdXNlIGFsbCB0aGUgcGx1Z2lucy4NCisgICAgICB4aW5oYV9wbHVnaW5zID0gWyBdOw0KKyAgICAgIGZvcih2YXIgeCA9IDA7IHggPCBmLnBsdWdpbnMubGVuZ3RoOyB4KyspIHsNCisgICAgICAgIGlmKGYucGx1Z2luc1t4XS5jaGVja2VkKSB4aW5oYV9wbHVnaW5zLnB1c2goZi5wbHVnaW5zW3hdLnZhbHVlKTsNCisgICAgICB9DQorDQorICAgICAgLy8gVEhJUyBCSVQgT0YgSkFWQVNDUklQVCBMT0FEUyBUSEUgUExVR0lOUywgTk8gVE9VQ0hJTkcgIDopDQorICAgICAgaWYoIVhpbmhhLmxvYWRQbHVnaW5zKHhpbmhhX3BsdWdpbnMsIHhpbmhhX2luaXQpKSByZXR1cm47DQorDQorLy8gV2hhdCBhcmUgdGhlIG5hbWVzIG9mIHRoZSB0ZXh0YXJlYXMgeW91IHdpbGwgYmUgdHVybmluZyBpbnRvIGVkaXRvcnM/DQorICAgICAgdmFyIG51bSA9IDE7DQorICAgICAgbnVtID0gcGFyc2VJbnQoZi5udW0udmFsdWUpOw0KKyAgICAgIGlmKGlzTmFOKG51bSkpIHsNCisgICAgICAgIG51bSA9IDE7DQorICAgICAgICBmLm51bS52YWx1ZSA9IDE7DQorICAgICAgfQ0KKyAgICAgIHZhciBkZXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVkaXRvcnNfaGVyZSIpOw0KKyAgICAgIHZhciBsaXBzdW0gPSB3aW5kb3cucGFyZW50Lm1lbnUuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215VGV4dGFyZWEwJykudmFsdWU7DQorDQorICAgICAgeGluaGFfZWRpdG9ycyA9IFsgXQ0KKyAgICAgIGZvcih2YXIgeCA9IDA7IHggPCBudW07IHgrKykgew0KKyAgICAgICAgdmFyIHRhID0gJ215VGV4dGFyZWEnICsgeDsNCisgICAgICAgIHhpbmhhX2VkaXRvcnMucHVzaCh0YSk7DQorDQorICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7DQorICAgICAgICBkaXYuY2xhc3NOYW1lID0gJ2FyZWFfaG9sZGVyJzsNCisNCisgICAgICAgIHZhciB0eHRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTsNCisgICAgICAgIHR4dGEuaWQgICA9IHRhOw0KKyAgICAgICAgdHh0YS5uYW1lID0gdGE7DQorICAgICAgICB0eHRhLnZhbHVlID0gbGlwc3VtOw0KKyAgICAgICAgdHh0YS5zdHlsZS53aWR0aD0iMTAwJSI7DQorICAgICAgICB0eHRhLnN0eWxlLmhlaWdodD0iNDIwcHgiOw0KKw0KKyAgICAgICAgZGl2LmFwcGVuZENoaWxkKHR4dGEpOw0KKyAgICAgICAgZGVzdC5hcHBlbmRDaGlsZChkaXYpOw0KKyAgICAgIH0NCisNCisvLyBDcmVhdGUgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdG8gYmUgdXNlZCBieSBhbGwgdGhlIGVkaXRvcnMuDQorICAgICAgc2V0dGluZ3MgPSB0b3AuZnJhbWVzWyJtZW51Il0uc2V0dGluZ3M7DQorICAgICAgeGluaGFfY29uZmlnID0gbmV3IFhpbmhhLkNvbmZpZygpOw0KKyAgICAgIHhpbmhhX2NvbmZpZy53aWR0aCA9IHNldHRpbmdzLndpZHRoOw0KKyAgICAgIHhpbmhhX2NvbmZpZy5oZWlnaHQgPSBzZXR0aW5ncy5oZWlnaHQ7DQorICAgICAgeGluaGFfY29uZmlnLnNpemVJbmNsdWRlc0JhcnMgPSBzZXR0aW5ncy5zaXplSW5jbHVkZXNCYXJzOw0KKyAgICAgIHhpbmhhX2NvbmZpZy5zaXplSW5jbHVkZXNQYW5lbHMgPSBzZXR0aW5ncy5zaXplSW5jbHVkZXNQYW5lbHM7DQorICAgICAgeGluaGFfY29uZmlnLnN0YXR1c0JhciA9IHNldHRpbmdzLnN0YXR1c0JhcjsNCisgICAgICB4aW5oYV9jb25maWcuaHRtbGFyZWFQYXN0ZSA9IHNldHRpbmdzLmh0bWxhcmVhUGFzdGU7DQorICAgICAgeGluaGFfY29uZmlnLm1velBhcmFIYW5kbGVyID0gc2V0dGluZ3MubW96UGFyYUhhbmRsZXI7DQorICAgICAgeGluaGFfY29uZmlnLmdldEh0bWxNZXRob2QgPSBzZXR0aW5ncy5nZXRIdG1sTWV0aG9kOw0KKyAgICAgIHhpbmhhX2NvbmZpZy51bmRvU3RlcHMgPSBzZXR0aW5ncy51bmRvU3RlcHM7DQorICAgICAgeGluaGFfY29uZmlnLnVuZG9UaW1lb3V0ID0gc2V0dGluZ3MudW5kb1RpbWVvdXQ7DQorICAgICAgeGluaGFfY29uZmlnLmNoYW5nZUp1c3RpZnlXaXRoRGlyZWN0aW9uID0gc2V0dGluZ3MuY2hhbmdlSnVzdGlmeVdpdGhEaXJlY3Rpb247DQorICAgICAgeGluaGFfY29uZmlnLmZ1bGxQYWdlID0gc2V0dGluZ3MuZnVsbFBhZ2U7DQorICAgICAgeGluaGFfY29uZmlnLnBhZ2VTdHlsZSA9IHNldHRpbmdzLnBhZ2VTdHlsZTsNCisgICAgICB4aW5oYV9jb25maWcuYmFzZUhyZWYgPSBzZXR0aW5ncy5iYXNlSHJlZjsNCisgICAgICB4aW5oYV9jb25maWcuZXhwYW5kUmVsYXRpdmVVcmwgPSBzZXR0aW5ncy5leHBhbmRSZWxhdGl2ZVVybDsNCisgICAgICB4aW5oYV9jb25maWcuc3RyaXBCYXNlSHJlZiA9IHNldHRpbmdzLnN0cmlwQmFzZUhyZWY7DQorICAgICAgeGluaGFfY29uZmlnLnN0cmlwU2VsZk5hbWVkQW5jaG9ycyA9IHNldHRpbmdzLnN0cmlwU2VsZk5hbWVkQW5jaG9yczsNCisgICAgICB4aW5oYV9jb25maWcub25seTdCaXRQcmludGFibGVzSW5VUkxzID0gc2V0dGluZ3Mub25seTdCaXRQcmludGFibGVzSW5VUkxzOw0KKyAgICAgIHhpbmhhX2NvbmZpZy5zZXZlbkJpdENsZWFuID0gc2V0dGluZ3Muc2V2ZW5CaXRDbGVhbjsNCisgICAgICB4aW5oYV9jb25maWcua2lsbFdvcmRPblBhc3RlID0gc2V0dGluZ3Mua2lsbFdvcmRPblBhc3RlOw0KKyAgICAgIHhpbmhhX2NvbmZpZy5tYWtlTGlua1Nob3dzVGFyZ2V0ID0gc2V0dGluZ3MubWFrZUxpbmtTaG93c1RhcmdldDsNCisgICAgICB4aW5oYV9jb25maWcuZmxvd1Rvb2xiYXJzID0gc2V0dGluZ3MuZmxvd1Rvb2xiYXJzOw0KKyAgICAgIHhpbmhhX2NvbmZpZy5zdHJpcFNjcmlwdHMgPSBzZXR0aW5ncy5zdHJpcFNjcmlwdHM7DQorICAgICAgeGluaGFfY29uZmlnLmZsb3dUb29sYmFycyA9IHNldHRpbmdzLmZsb3dUb29sYmFyczsNCisgICAgICB4aW5oYV9jb25maWcuc2hvd0xvYWRpbmcgPSBzZXR0aW5ncy5zaG93TG9hZGluZzsNCisgICAgICB4aW5oYV9jb25maWcucGFnZVN0eWxlU2hlZXRzID0gWyJmdWxsX2V4YW1wbGUuY3NzIl07DQorDQorLy8gQ3JlYXRlIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciB0aGUgcGx1Z2lucw0KKyAgICAgIGlmICh0eXBlb2YgQ2hhckNvdW50ZXIgIT0gJ3VuZGVmaW5lZCcpIHsNCisgICAgICAgIHhpbmhhX2NvbmZpZy5DaGFyQ291bnRlci5zaG93Q2hhciA9IHNldHRpbmdzLnNob3dDaGFyOw0KKyAgICAgICAgeGluaGFfY29uZmlnLkNoYXJDb3VudGVyLnNob3dXb3JkID0gc2V0dGluZ3Muc2hvd1dvcmQ7DQorICAgICAgICB4aW5oYV9jb25maWcuQ2hhckNvdW50ZXIuc2hvd0h0bWwgPSBzZXR0aW5ncy5zaG93SHRtbDsNCisgICAgICB9DQorDQorICAgICAgaWYodHlwZW9mIENoYXJhY3Rlck1hcCAhPSAndW5kZWZpbmVkJykgeGluaGFfY29uZmlnLkNoYXJhY3Rlck1hcC5tb2RlID0gc2V0dGluZ3MuQ2hhcmFjdGVyTWFwTW9kZTsNCisgICAgICBpZih0eXBlb2YgTGlzdFR5cGUgIT0gJ3VuZGVmaW5lZCcpIHhpbmhhX2NvbmZpZy5MaXN0VHlwZS5tb2RlID0gc2V0dGluZ3MuTGlzdFR5cGVNb2RlOw0KKyAgICAgIGlmKHR5cGVvZiBDU1NEcm9wRG93bnMgIT0gJ3VuZGVmaW5lZCcpIHhpbmhhX2NvbmZpZy5wYWdlU3R5bGUgPSB4aW5oYV9jb25maWcucGFnZVN0eWxlICsgIlxuIiArICJAaW1wb3J0IHVybChjdXN0b20uY3NzKTsiOw0KKyAgICAgIGlmKHR5cGVvZiBEeW5hbWljQ1NTICE9ICd1bmRlZmluZWQnKSB4aW5oYV9jb25maWcucGFnZVN0eWxlID0gIkBpbXBvcnQgdXJsKGR5bmFtaWMuY3NzKTsiOw0KKyAgICAgIGlmKHR5cGVvZiBGaWx0ZXIgIT0gJ3VuZGVmaW5lZCcpIHhpbmhhX2NvbmZpZy5GaWx0ZXJzID0gWyJXb3JkIiwgIlBhcmFncmFwaCJdOw0KKw0KKyAgICAgIGlmKHR5cGVvZiBTdHlsaXN0ICE9ICd1bmRlZmluZWQnKSB7DQorICAgICAgICAvLyBXZSBjYW4gbG9hZCBhbiBleHRlcm5hbCBzdHlsZXNoZWV0IGxpa2UgdGhpcyAtIE5PVEUgOiBZT1UgTVVTVCBHSVZFIEFOIEFCU09MVVRFIFVSTA0KKyAgICAgICAgLy8gIG90aGVyd2lzZSBpdCB3b24ndCB3b3JrIQ0KKyAgICAgICAgeGluaGFfY29uZmlnLnN0eWxpc3RMb2FkU3R5bGVzaGVldChkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoL1teXC9dKlwuaHRtbC8sICdzdHlsaXN0LmNzcycpKTsNCisNCisgICAgICAgIC8vIE9yIHdlIGNhbiBsb2FkIHN0eWxlcyBkaXJlY3RseQ0KKyAgICAgICAgeGluaGFfY29uZmlnLnN0eWxpc3RMb2FkU3R5bGVzKCdwLnJlZF90ZXh0IHsgY29sb3I6cmVkIH0nKTsNCisNCisgICAgICAgIC8vIElmIHlvdSB3YW50IHRvIHByb3ZpZGUgImZyaWVuZGx5IiBuYW1lcyB5b3UgY2FuIGRvIHNvIGxpa2UNCisgICAgICAgIC8vICh5b3UgY2FuIGRvIHRoaXMgZm9yIHN0eWxpc3RMb2FkU3R5bGVzaGVldCBhcyB3ZWxsKQ0KKyAgICAgICAgeGluaGFfY29uZmlnLnN0eWxpc3RMb2FkU3R5bGVzKCdwLnBpbmtfdGV4dCB7IGNvbG9yOnBpbmsgfScsIHsncC5waW5rX3RleHQnIDogJ1ByZXR0eSBQaW5rJ30pOw0KKyAgICAgIH0NCisNCisgICAgICBpZih0eXBlb2YgSW5zZXJ0V29yZHMgIT0gJ3VuZGVmaW5lZCcpIHsNCisgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBrZXl3b3JkL3JlcGxhY2VtZW50IGxpc3QNCisgICAgICAgIHZhciBrZXl3cmRzMSA9IG5ldyBPYmplY3QoKTsNCisgICAgICAgIHZhciBrZXl3cmRzMiA9IG5ldyBPYmplY3QoKTsNCisNCisgICAgICAgIGtleXdyZHMxWyctLSBEcm9wZG93biBMYWJlbCAtLSddID0gJyc7DQorICAgICAgICBrZXl3cmRzMVsnb25la2V5J10gPSAnb25ldmFsdWUnOw0KKyAgICAgICAga2V5d3JkczFbJ3R3b2tleSddID0gJ3R3b3ZhbHVlJzsNCisgICAgICAgIGtleXdyZHMxWyd0aHJlZWtleSddID0gJ3RocmVldmFsdWUnOw0KKw0KKyAgICAgICAga2V5d3JkczJbJy0tIEluc2VydCBLZXl3b3JkIC0tJ10gPSAnJzsNCisgICAgICAgIGtleXdyZHMyWydVc2VybmFtZSddID0gJyV1c2VyJSc7DQorICAgICAgICBrZXl3cmRzMlsnTGFzdCBsb2dpbiBkYXRlJ10gPSAnJWxhc3RfbG9naW4lJzsNCisgICAgICAgIHhpbmhhX2NvbmZpZy5JbnNlcnRXb3JkcyA9IHsNCisgICAgICAgICAgY29tYm9zIDogWyB7IG9wdGlvbnM6IGtleXdyZHMxLCBjb250ZXh0OiAiYm9keSIgfSwNCisgICAgICAgICAgICAgICAgICAgICB7IG9wdGlvbnM6IGtleXdyZHMyLCBjb250ZXh0OiAibGkiIH0gXQ0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisNCisNCisgICAgICBpZih0eXBlb2YgTW9vdG9vbHNGaWxlTWFuYWdlciAhPSAndW5kZWZpbmVkJykNCisgICAgICB7DQorICAgICAgICB3aXRoICh4aW5oYV9jb25maWcuTW9vdG9vbHNGaWxlTWFuYWdlcikNCisgICAgICAgIHsgDQorICAgICAgICAgIDw/cGhwIA0KKyAgICAgICAgICAgIHJlcXVpcmVfb25jZSgnLi4vLi4vY29udHJpYi9waHAteGluaGEucGhwJyk7DQorICAgICAgICAgICAgeGluaGFfcGFzc190b19waHBfYmFja2VuZA0KKyAgICAgICAgICAgICggICAgICAgDQorICAgICAgICAgICAgICBhcnJheQ0KKyAgICAgICAgICAgICAgKA0KKyAgICAgICAgICAgICAgICAnaW1hZ2VzX2RpcicgPT4gZ2V0Y3dkKCkgLiAnLy4uL2ltYWdlcycsDQorICAgICAgICAgICAgICAgICdpbWFnZXNfdXJsJyA9PiBwcmVnX3JlcGxhY2UoJy9cL2V4YW1wbGVzLiovJywgJycsICRfU0VSVkVSWydSRVFVRVNUX1VSSSddKSAuICcvZXhhbXBsZXMvaW1hZ2VzJywNCisgICAgICAgICAgICAgICAgJ2ltYWdlc19hbGxvd191cGxvYWQnID0+IGZhbHNlLA0KKyAgICAgICAgICAgICAgICAnaW1hZ2VzX2FsbG93X2RlbGV0ZScgPT4gZmFsc2UsDQorICAgICAgICAgICAgICAgICdpbWFnZXNfYWxsb3dfZG93bmxvYWQnID0+IHRydWUsDQorICAgICAgICAgICAgICAgICdpbWFnZXNfdXNlX2hzcGFjZV92c3BhY2UnID0+IGZhbHNlLA0KKyAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgJ2ZpbGVzX2RpcicgPT4gZ2V0Y3dkKCkgLiAnLy4uL2ltYWdlcycsDQorICAgICAgICAgICAgICAgICdmaWxlc191cmwnID0+IHByZWdfcmVwbGFjZSgnL1wvZXhhbXBsZXMuKi8nLCAnJywgJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pIC4gJy9leGFtcGxlcy9pbWFnZXMnLA0KKyAgICAgICAgICAgICAgICAnZmlsZXNfYWxsb3dfdXBsb2FkJyA9PiBmYWxzZSwNCisgICAgICAgICAgICAgICAgJ21heF9maWxlc191cGxvYWRfc2l6ZScgPT4gJzRNJywNCisgICAgICAgICAgICAgICkNCisgICAgICAgICAgICApDQorICAgICAgICAgID8+DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICB9DQorLy8gRmlyc3QgY3JlYXRlIGVkaXRvcnMgZm9yIHRoZSB0ZXh0YXJlYXMuDQorLy8gWW91IGNhbiBkbyB0aGlzIGluIHR3byB3YXlzLCBlaXRoZXINCisvLyAgIHhpbmhhX2VkaXRvcnMgICA9IFhpbmhhLm1ha2VFZGl0b3JzKHhpbmhhX2VkaXRvcnMsIHhpbmhhX2NvbmZpZywgeGluaGFfcGx1Z2lucyk7DQorLy8gaWYgeW91IHdhbnQgYWxsIHRoZSBlZGl0b3Igb2JqZWN0cyB0byB1c2UgdGhlIHNhbWUgc2V0IG9mIHBsdWdpbnMsIE9SOw0KKy8vICAgeGluaGFfZWRpdG9ycyA9IFhpbmhhLm1ha2VFZGl0b3JzKHhpbmhhX2VkaXRvcnMsIHhpbmhhX2NvbmZpZyk7DQorLy8gICB4aW5oYV9lZGl0b3JzWydteVRleHRhcmVhMCddLnJlZ2lzdGVyUGx1Z2lucyhbJ1N0eWxpc3QnXSk7DQorLy8gICB4aW5oYV9lZGl0b3JzWydteVRleHRhcmVhMSddLnJlZ2lzdGVyUGx1Z2lucyhbJ0NTUycsJ1N1cGVyQ2xlYW4nXSk7DQorLy8gaWYgeW91IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IHNldCBvZiBwbHVnaW5zIGZvciBvbmUgb3IgbW9yZSBvZiB0aGUgZWRpdG9ycy4NCisgICAgICB4aW5oYV9lZGl0b3JzID0gWGluaGEubWFrZUVkaXRvcnMoeGluaGFfZWRpdG9ycywgeGluaGFfY29uZmlnLCB4aW5oYV9wbHVnaW5zKTsNCisNCisvLyBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9mIGFueSBvZiB0aGUgZWRpdG9ycywNCisvLyB0aGlzIGlzIHRoZSBwbGFjZSB0byBkbyB0aGF0LCBmb3IgZXhhbXBsZSB5b3UgbWlnaHQgd2FudCB0bw0KKy8vIGNoYW5nZSB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiBvbmUgb2YgdGhlIGVkaXRvcnMsIGxpa2UgdGhpcy4uLg0KKy8vICAgeGluaGFfZWRpdG9yc1snbXlUZXh0YXJlYTAnXS5jb25maWcud2lkdGggID0gJzY0MHB4JzsNCisvLyAgIHhpbmhhX2VkaXRvcnNbJ215VGV4dGFyZWEwJ10uY29uZmlnLmhlaWdodCA9ICc0ODBweCc7DQorDQorLy8gRmluYWxseSB3ZSAic3RhcnQiIHRoZSBlZGl0b3JzLCB0aGlzIHR1cm5zIHRoZSB0ZXh0YXJlYXMgaW50byBYaW5oYSBlZGl0b3JzLg0KKyAgICAgIFhpbmhhLnN0YXJ0RWRpdG9ycyh4aW5oYV9lZGl0b3JzKTsNCisgICAgfQ0KKw0KKy8vIGphdmFzY3JpcHQgc3VibWl0IGhhbmRsZXINCisvLyB0aGlzIHNob3dzIGhvdyB0byBjcmVhdGUgYSBqYXZhc2NyaXB0IHN1Ym1pdCBidXR0b24gdGhhdCB3b3JrcyB3aXRoIHRoZSBodG1sZWRpdG9yLg0KKyAgICBzdWJtaXRIYW5kbGVyID0gZnVuY3Rpb24oZm9ybW5hbWUpIHsNCisgICAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1uYW1lKTsNCisgICAgICAvLyBpbiBvcmRlciBmb3IgdGhlIHN1Ym1pdCB0byB3b3JrIGJvdGggb2YgdGhlc2UgbWV0aG9kcyBoYXZlIHRvIGJlIGNhbGxlZC4NCisgICAgICBmb3JtLm9uc3VibWl0KCk7DQorICAgICAgd2luZG93LnBhcmVudC5tZW51LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteVRleHRhcmVhMCcpLnZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215VGV4dGFyZWEwJykudmFsdWU7DQorICAgICAgZm9ybS5zdWJtaXQoKTsNCisgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICB3aW5kb3cub25sb2FkID0geGluaGFfaW5pdDsNCisvLyAgICB3aW5kb3cub251bmxvYWQgPSBYaW5oYS5jb2xsZWN0R2FyYmFnZUZvcklFOw0KKyAgPC9zY3JpcHQ+DQorPC9oZWFkPg0KKw0KKzxib2R5Pg0KKyAgPGZvcm0gaWQ9InRvX3N1Ym1pdCIgbmFtZT0idG9fc3VibWl0IiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iZXh0X2V4YW1wbGUtZGVzdC5waHAiPg0KKyAgPGRpdiBpZD0iZWRpdG9yc19oZXJlIj48L2Rpdj4NCisgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJzdWJtaXRIYW5kbGVyKCd0b19zdWJtaXQnKTsiPlN1Ym1pdDwvYnV0dG9uPg0KKyAgPHRleHRhcmVhIGlkPSJlcnJvcnMiIG5hbWU9ImVycm9ycyIgc3R5bGU9IndpZHRoOjEwMCU7IGhlaWdodDoxMDBweDsgYmFja2dyb3VuZDpzaWx2ZXI7Ij48L3RleHRhcmVhPjwhLS0gc3R5bGU9ImRpc3BsYXk6bm9uZTsiIC0tPg0KKyAgPC9mb3JtPg0KKyAgDQorICA8IS0tIFRoaXMgc2NyaXB0IGlzIHVzZWQgdG8gc2hvdyB0aGUgcmVuZGVyaW5nIG1vZGUgKFF1aXJrcywgU3RhbmRhcmRzLCBBbG1vc3QgU3RhbmRhcmRzKSAtLT4gDQorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9yZW5kZXItbW9kZS1kZXZlbG9wZXItaGVscC5qcyI+PC9zY3JpcHQ+DQorPC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9maWxlcy9leHRfZXhhbXBsZS1kZXN0LnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2V4YW1wbGVzL2ZpbGVzL2V4dF9leGFtcGxlLWRlc3QucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYzFlZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9maWxlcy9leHRfZXhhbXBsZS1kZXN0LnBocApAQCAtMCwwICsxLDIzIEBACis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KKyAgPHRpdGxlPkV4YW1wbGUgb2YgWGluaGE8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImZ1bGxfZXhhbXBsZS5jc3MiIC8+Cis8L2hlYWQ+Cis8Ym9keT4KKzw/cGhwCitpZiAoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkgeworICAkX1JFUVVFU1QgPSBhcnJheV9tYXAoJ3N0cmlwc2xhc2hlcycsJF9SRVFVRVNUKTsKK30KKy8vIG9yIGluIHBocC5pbmkKKy8vOyBNYWdpYyBxdW90ZXMgZm9yIGluY29taW5nIEdFVC9QT1NUL0Nvb2tpZSBkYXRhLgorLy9tYWdpY19xdW90ZXNfZ3BjID0gT2ZmCisgIGZvcmVhY2goJF9SRVFVRVNUIGFzICRrZXk9PiR2YWx1ZSl7CisgICAgaWYoc3Vic3RyKCRrZXksMCwxMCkgPT0gJ215VGV4dGFyZWEnKSB7CisgICAgICBlY2hvICc8aDMgc3R5bGU9ImJvcmRlci1ib3R0b206MXB4IHNvbGlkIGJsYWNrOyI+Jy4ka2V5Licoc291cmNlKTo8L2gzPjx4bXAgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgYmxhY2s7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDIwMHB4OyBvdmVyZmxvdzogYXV0bzsiPicuJHZhbHVlLic8L3htcD48YnIvPic7CisgICAgICBlY2hvICc8aDMgc3R5bGU9ImJvcmRlci1ib3R0b206MXB4IHNvbGlkIGJsYWNrOyI+Jy4ka2V5LicocHJldmlldyk6PC9oMz4nLiR2YWx1ZTsKKyAgICB9CisgIH0KKz8+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9maWxlcy9leHRfZXhhbXBsZS1tZW51LnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2V4YW1wbGVzL2ZpbGVzL2V4dF9leGFtcGxlLW1lbnUucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Njc4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9maWxlcy9leHRfZXhhbXBsZS1tZW51LnBocApAQCAtMCwwICsxLDQ3MyBAQAor77u/PD9waHAKKyAgJExvY2FsUGx1Z2luUGF0aCA9IGRpcm5hbWUoZGlybmFtZShkaXJuYW1lKF9fRklMRV9fKSkpLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3BsdWdpbnMnOworICAkTG9jYWxTa2luUGF0aCA9IGRpcm5hbWUoZGlybmFtZShkaXJuYW1lKF9fRmlsZV9fKSkpLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3NraW5zJzsKKz8+Cis8aHRtbD4KKzxoZWFkPgorCisgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS06bm9UYWJzPXRydWU6dGFiU2l6ZT0yOmluZGVudFNpemU9MjotLQorICAgIC0tICBYaW5oYSBleGFtcGxlIG1lbnUuICBUaGlzIGZpbGUgaXMgdXNlZCBieSBmdWxsX2V4YW1wbGUuaHRtbCB3aXRoaW4gYQorICAgIC0tICBmcmFtZSB0byBwcm92aWRlIGEgbWVudSBmb3IgZ2VuZXJhdGluZyBleGFtcGxlIGVkaXRvcnMgdXNpbmcKKyAgICAtLSAgZnVsbF9leGFtcGxlLWJvZHkuaHRtbCwgYW5kIGZ1bGxfZXhhbXBsZS5qcy4KKyAgICAtLQorICAgIC0tICAkSGVhZFVSTDogaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvZXhhbXBsZXMvZmlsZXMvZXh0X2V4YW1wbGUtbWVudS5waHAgJAorICAgIC0tICAkTGFzdENoYW5nZWREYXRlOiAyMDE4LTAyLTE5IDIyOjE0OjA1ICsxMzAwIChNb24sIDE5IEZlYiAyMDE4KSAkCisgICAgLS0gICRMYXN0Q2hhbmdlZFJldmlzaW9uOiAxNDA2ICQKKyAgICAtLSAgJExhc3RDaGFuZ2VkQnk6IGdvZ28gJAorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4KKworICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KKyAgPHRpdGxlPkV4YW1wbGUgb2YgWGluaGE8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImZ1bGxfZXhhbXBsZS5jc3MiIC8+CisgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgaDEge2ZvbnQ6IGJvbGQgMjJweCAiU3RhY2NhdG8yMjIgQlQiLCBjdXJzaXZlO30KKyAgICBmb3JtLCBwIHttYXJnaW46IDBweDsgcGFkZGluZzogMHB4O30KKyAgICBsYWJlbCB7IGRpc3BsYXk6YmxvY2s7fQorICA8L3N0eWxlPgorICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICB2YXIgc2V0dGluZ3MgPSBudWxsOworICBzZXR0aW5ncyA9IHsKKyAgICB3aWR0aDogImF1dG8iLAorICAgIGhlaWdodDogImF1dG8iLAorICAgIHNpemVJbmNsdWRlc0JhcnM6IHRydWUsCisgICAgc2l6ZUluY2x1ZGVzUGFuZWxzOiB0cnVlLAorICAgIHN0YXR1c0JhcjogdHJ1ZSwKKyAgICBodG1sYXJlYVBhc3RlOiBmYWxzZSwKKyAgICBtb3pQYXJhSGFuZGxlcjogImJlc3QiLAorICAgIGdldEh0bWxNZXRob2Q6ICJET013YWxrIiwKKyAgICB1bmRvU3RlcHM6IDIwLAorICAgIHVuZG9UaW1lb3V0OiA1MDAsCisgICAgY2hhbmdlSnVzdGlmeVdpdGhEaXJlY3Rpb246IGZhbHNlLAorICAgIGZ1bGxQYWdlOiBmYWxzZSwKKyAgICBwYWdlU3R5bGU6ICIiLAorICAgIGJhc2VIcmVmOiBudWxsLAorICAgIGV4cGFuZFJlbGF0aXZlVXJsOiB0cnVlLAorICAgIHN0cmlwQmFzZUhyZWY6IHRydWUsCisgICAgc3RyaXBTZWxmTmFtZWRBbmNob3JzOiB0cnVlLAorICAgIG9ubHk3Qml0UHJpbnRhYmxlc0luVVJMczogdHJ1ZSwKKyAgICBzZXZlbkJpdENsZWFuOiBmYWxzZSwKKyAgICBraWxsV29yZE9uUGFzdGU6IHRydWUsCisgICAgbWFrZUxpbmtTaG93c1RhcmdldDogdHJ1ZSwKKyAgICBmbG93VG9vbGJhcnM6IHRydWUsCisgICAgc3RyaXBTY3JpcHRzOiBmYWxzZSwKKyAgICBDaGFyYWN0ZXJNYXBNb2RlOiAicG9wdXAiLAorICAgIExpc3RUeXBlTW9kZTogInRvb2xiYXIiLAorICAgIHNob3dMb2FkaW5nOiBmYWxzZSwKKyAgICBzaG93Q2hhcjogdHJ1ZSwKKyAgICBzaG93V29yZDogdHJ1ZSwKKyAgICBzaG93SHRtbDogdHJ1ZQorICB9OworCisKKyAgICBmdW5jdGlvbiBnZXRDb29raWVWYWwgKG9mZnNldCkgeworICAgICAgdmFyIGVuZHN0ciA9IGRvY3VtZW50LmNvb2tpZS5pbmRleE9mICgiOyIsIG9mZnNldCk7CisgICAgICBpZiAoZW5kc3RyID09IC0xKQorICAgICAgICBlbmRzdHIgPSBkb2N1bWVudC5jb29raWUubGVuZ3RoOworICAgICAgcmV0dXJuIHVuZXNjYXBlKGRvY3VtZW50LmNvb2tpZS5zdWJzdHJpbmcob2Zmc2V0LCBlbmRzdHIpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRDb29raWUgKG5hbWUpIHsKKyAgICAgIHZhciBhcmcgPSBuYW1lICsgIj0iOworICAgICAgdmFyIGFsZW4gPSBhcmcubGVuZ3RoOworICAgICAgdmFyIGNsZW4gPSBkb2N1bWVudC5jb29raWUubGVuZ3RoOworICAgICAgdmFyIGkgPSAwOworICAgICAgd2hpbGUgKGkgPCBjbGVuKSB7CisgICAgICAgIHZhciBqID0gaSArIGFsZW47CisgICAgICAgIGlmIChkb2N1bWVudC5jb29raWUuc3Vic3RyaW5nKGksIGopID09IGFyZykKKyAgICAgICAgICByZXR1cm4gZ2V0Q29va2llVmFsIChqKTsKKyAgICAgICAgaSA9IGRvY3VtZW50LmNvb2tpZS5pbmRleE9mKCIgIiwgaSkgKyAxOworICAgICAgICBpZiAoaSA9PSAwKSBicmVhazsKKyAgICAgIH0KKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNldENvb2tpZSAobmFtZSwgdmFsdWUpIHsKKyAgICAgIHZhciBhcmd2ID0gc2V0Q29va2llLmFyZ3VtZW50czsKKyAgICAgIHZhciBhcmdjID0gc2V0Q29va2llLmFyZ3VtZW50cy5sZW5ndGg7CisgICAgICB2YXIgZXhwaXJlcyA9IChhcmdjID4gMikgPyBhcmd2WzJdIDogbnVsbDsKKyAgICAgIHZhciBwYXRoID0gKGFyZ2MgPiAzKSA/IGFyZ3ZbM10gOiBudWxsOworICAgICAgdmFyIGRvbWFpbiA9IChhcmdjID4gNCkgPyBhcmd2WzRdIDogbnVsbDsKKyAgICAgIHZhciBzZWN1cmUgPSAoYXJnYyA+IDUpID8gYXJndls1XSA6IGZhbHNlOworICAgICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArICI9IiArIGVzY2FwZSAodmFsdWUpICsKKyAgICAgICAgKChleHBpcmVzID09IG51bGwpID8gIiIgOiAoIjsgZXhwaXJlcz0iICsgZXhwaXJlcy50b0dNVFN0cmluZygpKSkgKworICAgICAgICAoKHBhdGggPT0gbnVsbCkgPyAiIiA6ICgiOyBwYXRoPSIgKyBwYXRoKSkgKworICAgICAgICAoKGRvbWFpbiA9PSBudWxsKSA/ICIiIDogKCI7IGRvbWFpbj0iICsgZG9tYWluKSkgKworICAgICAgICAoKHNlY3VyZSA9PSB0cnVlKSA/ICI7IHNlY3VyZSIgOiAiIik7CisgICAgfQorCisgIGZ1bmN0aW9uIF9vblJlc2l6ZSgpIHsKKyAgICB2YXIgc0hlaWdodDsKKyAgICBpZiAod2luZG93LmlubmVySGVpZ2h0KSBzSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0OworICAgIGVsc2UgaWYgKGRvY3VtZW50LmJvZHkgJiYgZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQpIHNIZWlnaHQgPSBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodDsKKyAgICBlbHNlIHJldHVybjsKKyAgICBpZiAoc0hlaWdodD4zMDApIHsKKyAgICAgIHNIZWlnaHQgPSBzSGVpZ2h0IC0gMjg1OworICAgIH0gZWxzZSB7CisgICAgICBzSGVpZ2h0ID0gMzAKKyAgICB9CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkaXZfcGx1Z2lucyIpOworICAgIGRpdi5zdHlsZS5oZWlnaHQgPSBzSGVpZ2h0ICsgInB4IjsKKyAgfQorCitmdW5jdGlvbiBEaWFsb2codXJsLCBhY3Rpb24sIGluaXQpIHsKKwlpZiAodHlwZW9mIGluaXQgPT0gInVuZGVmaW5lZCIpIHsKKwkJaW5pdCA9IHdpbmRvdzsJLy8gcGFzcyB0aGlzIHdpbmRvdyBvYmplY3QgYnkgZGVmYXVsdAorCX0KKwlpZiAodHlwZW9mIHdpbmRvdy5zaG93TW9kYWxEaWFsb2cgPT0gJ2Z1bmN0aW9uJykKKwl7CisJCURpYWxvZy5fcmV0dXJuID0gYWN0aW9uOworCQl2YXIgciA9IHdpbmRvdy5zaG93TW9kYWxEaWFsb2codXJsLCBpbml0LCAiZGlhbG9naGVpZ2h0PTEwO2RpYWxvZ2hlaWdodD0xMDtzY3JvbGw9eWVzO3Jlc2l6YWJsZT15ZXMiKTsKKwl9CisJZWxzZQorCXsKKwkJRGlhbG9nLl9nZWNrb09wZW5Nb2RhbCh1cmwsIGFjdGlvbiwgaW5pdCk7CisJfQorfTsKKworRGlhbG9nLl9wYXJlbnRFdmVudCA9IGZ1bmN0aW9uKGV2KSB7CisgIHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgeyBpZiAoRGlhbG9nLl9tb2RhbCAmJiAhRGlhbG9nLl9tb2RhbC5jbG9zZWQpIHsgRGlhbG9nLl9tb2RhbC5mb2N1cygpIH0gfSwgNTApOworICBpZiAoRGlhbG9nLl9tb2RhbCAmJiAhRGlhbG9nLl9tb2RhbC5jbG9zZWQpIHsKKyAgICBhZ3QgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7CisgICAgaXNfaWUgPSAoKGFndC5pbmRleE9mKCJtc2llIikgIT0gLTEpICYmIChhZ3QuaW5kZXhPZigib3BlcmEiKSA9PSAtMSkpOworICAgIGlmIChpc19pZSkgeworICAgICAgZXYuY2FuY2VsQnViYmxlID0gdHJ1ZTsKKyAgICAgIGV2LnJldHVyblZhbHVlID0gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7CisgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICB9CisgIH0KK307CisKKworLy8gc2hvdWxkIGJlIGEgZnVuY3Rpb24sIHRoZSByZXR1cm4gaGFuZGxlciBvZiB0aGUgY3VycmVudGx5IG9wZW5lZCBkaWFsb2cuCitEaWFsb2cuX3JldHVybiA9IG51bGw7CisKKy8vIGNvbnN0YW50LCB0aGUgY3VycmVudGx5IG9wZW5lZCBkaWFsb2cKK0RpYWxvZy5fbW9kYWwgPSBudWxsOworCisvLyB0aGUgZGlhbG9nIHdpbGwgcmVhZCBpdCdzIGFyZ3MgZnJvbSB0aGlzIHZhcmlhYmxlCitEaWFsb2cuX2FyZ3VtZW50cyA9IG51bGw7CisKK0RpYWxvZy5fZ2Vja29PcGVuTW9kYWwgPSBmdW5jdGlvbih1cmwsIGFjdGlvbiwgaW5pdCkgeworICB2YXIgZGxnID0gd2luZG93Lm9wZW4odXJsLCAiaGFkaWFsb2ciLAorICAgICAgICAgICAgInRvb2xiYXI9bm8sbWVudWJhcj1ubyxwZXJzb25hbGJhcj1ubyx3aWR0aD0xMCxoZWlnaHQ9MTAsIiArCisgICAgICAgICAgICAic2Nyb2xsYmFycz1ubyxyZXNpemFibGU9eWVzLG1vZGFsPXllcyxkZXBlbmRhYmxlPXllcyIpOworICBEaWFsb2cuX21vZGFsID0gZGxnOworICBEaWFsb2cuX2FyZ3VtZW50cyA9IGluaXQ7CisKKyAgLy8gY2FwdHVyZSBzb21lIHdpbmRvdydzIGV2ZW50cworICBmdW5jdGlvbiBjYXB3aW4odykgeworLy8JCVhpbmhhLl9hZGRFdmVudCh3LCAiY2xpY2siLCBEaWFsb2cuX3BhcmVudEV2ZW50KTsKKy8vCQlYaW5oYS5fYWRkRXZlbnQodywgIm1vdXNlZG93biIsIERpYWxvZy5fcGFyZW50RXZlbnQpOworLy8JCVhpbmhhLl9hZGRFdmVudCh3LCAiZm9jdXMiLCBEaWFsb2cuX3BhcmVudEV2ZW50KTsKKyAgfTsKKyAgLy8gcmVsZWFzZSB0aGUgY2FwdHVyZWQgZXZlbnRzCisgIGZ1bmN0aW9uIHJlbHdpbih3KSB7CisvLwkJWGluaGEuX3JlbW92ZUV2ZW50KHcsICJjbGljayIsIERpYWxvZy5fcGFyZW50RXZlbnQpOworLy8JCVhpbmhhLl9yZW1vdmVFdmVudCh3LCAibW91c2Vkb3duIiwgRGlhbG9nLl9wYXJlbnRFdmVudCk7CisvLwkJWGluaGEuX3JlbW92ZUV2ZW50KHcsICJmb2N1cyIsIERpYWxvZy5fcGFyZW50RXZlbnQpOworICB9OworICBjYXB3aW4od2luZG93KTsKKyAgLy8gY2FwdHVyZSBvdGhlciBmcmFtZXMKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCB3aW5kb3cuZnJhbWVzLmxlbmd0aDsgY2Fwd2luKHdpbmRvdy5mcmFtZXNbaSsrXSkpOworICAvLyBtYWtlIHVwIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIERpYWxvZyBlbmRzLgorICBEaWFsb2cuX3JldHVybiA9IGZ1bmN0aW9uICh2YWwpIHsKKyAgICBpZiAodmFsICYmIGFjdGlvbikgeworICAgICAgYWN0aW9uKHZhbCk7CisgICAgfQorICAgIHJlbHdpbih3aW5kb3cpOworICAgIC8vIGNhcHR1cmUgb3RoZXIgZnJhbWVzCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3aW5kb3cuZnJhbWVzLmxlbmd0aDsgcmVsd2luKHdpbmRvdy5mcmFtZXNbaSsrXSkpOworICAgIERpYWxvZy5fbW9kYWwgPSBudWxsOworICB9OworfTsKKworICBmdW5jdGlvbiBmRXh0ZW5kZWQgKCkgeworICAgIERpYWxvZygiRXh0ZW5kZWQuaHRtbCIsIGZ1bmN0aW9uKHBhcmFtKSB7CisgICAgICBpZihwYXJhbSkgeworICAgICAgICBzZXR0aW5ncy53aWR0aCA9IHBhcmFtWyJ3aWR0aCJdOworICAgICAgICBzZXR0aW5ncy5oZWlnaHQgPSBwYXJhbVsiaGVpZ2h0Il07CisgICAgICAgIHNldHRpbmdzLnNpemVJbmNsdWRlc0JhcnMgPSAocGFyYW1bInNpemVJbmNsdWRlc0JhcnMiXT09InRydWUiKTsKKyAgICAgICAgc2V0dGluZ3Muc2l6ZUluY2x1ZGVzUGFuZWxzID0gKHBhcmFtWyJzaXplSW5jbHVkZXNQYW5lbHMiXT09InRydWUiKTsKKyAgICAgICAgc2V0dGluZ3Muc3RhdHVzQmFyID0gKHBhcmFtWyJzdGF0dXNCYXIiXT09InRydWUiKTsKKyAgICAgICAgc2V0dGluZ3MuaHRtbGFyZWFQYXN0ZSA9IChwYXJhbVsiaHRtbGFyZWFQYXN0ZSJdPT0idHJ1ZSIpOworICAgICAgICBzZXR0aW5ncy5tb3pQYXJhSGFuZGxlciA9IHBhcmFtWyJtb3pQYXJhSGFuZGxlciJdOworICAgICAgICBzZXR0aW5ncy5nZXRIdG1sTWV0aG9kID0gcGFyYW1bImdldEh0bWxNZXRob2QiXTsKKyAgICAgICAgc2V0dGluZ3MudW5kb1N0ZXBzID0gcGFyYW1bInVuZG9TdGVwcyJdOworICAgICAgICBzZXR0aW5ncy51bmRvVGltZW91dCA9IHBhcmFtWyJ1bmRvVGltZW91dCJdOworICAgICAgICBzZXR0aW5ncy5jaGFuZ2VKdXN0aWZ5V2l0aERpcmVjdGlvbiA9IChwYXJhbVsiY2hhbmdlSnVzdGlmeVdpdGhEaXJlY3Rpb24iXT09InRydWUiKTsKKyAgICAgICAgc2V0dGluZ3MuZnVsbFBhZ2UgPSAocGFyYW1bImZ1bGxQYWdlIl09PSJ0cnVlIik7CisgICAgICAgIHNldHRpbmdzLnBhZ2VTdHlsZSA9IHBhcmFtWyJwYWdlU3R5bGUiXTsKKyAgICAgICAgc2V0dGluZ3MuYmFzZUhyZWYgPSBwYXJhbVsiYmFzZUhyZWYiXTsKKyAgICAgICAgc2V0dGluZ3MuZXhwYW5kUmVsYXRpdmVVcmwgPSAocGFyYW1bImV4cGFuZFJlbGF0aXZlVXJsIl09PSJ0cnVlIik7CisgICAgICAgIHNldHRpbmdzLnN0cmlwQmFzZUhyZWYgPSAocGFyYW1bInN0cmlwQmFzZUhyZWYiXT09InRydWUiKTsKKyAgICAgICAgc2V0dGluZ3Muc3RyaXBTZWxmTmFtZWRBbmNob3JzID0gKHBhcmFtWyJzdHJpcFNlbGZOYW1lZEFuY2hvcnMiXT09InRydWUiKTsKKyAgICAgICAgc2V0dGluZ3Mub25seTdCaXRQcmludGFibGVzSW5VUkxzID0gKHBhcmFtWyJvbmx5N0JpdFByaW50YWJsZXNJblVSTHMiXT09InRydWUiKTsKKyAgICAgICAgc2V0dGluZ3Muc2V2ZW5CaXRDbGVhbiA9IChwYXJhbVsic2V2ZW5CaXRDbGVhbiJdPT0idHJ1ZSIpOworICAgICAgICBzZXR0aW5ncy5raWxsV29yZE9uUGFzdGUgPSAocGFyYW1bImtpbGxXb3JkT25QYXN0ZSJdPT0idHJ1ZSIpOworICAgICAgICBzZXR0aW5ncy5tYWtlTGlua1Nob3dzVGFyZ2V0ID0gKHBhcmFtWyJtYWtlTGlua1Nob3dzVGFyZ2V0Il09PSJ0cnVlIik7CisgICAgICAgIHNldHRpbmdzLmZsb3dUb29sYmFycyA9IChwYXJhbVsiZmxvd1Rvb2xiYXJzIl09PSJ0cnVlIik7CisgICAgICAgIHNldHRpbmdzLnN0cmlwU2NyaXB0cyA9IChwYXJhbVsic3RyaXBTY3JpcHRzIl09PSJ0cnVlIik7CisgICAgICAgIHNldHRpbmdzLkNoYXJhY3Rlck1hcE1vZGUgPSBwYXJhbVsiQ2hhcmFjdGVyTWFwTW9kZSJdOworICAgICAgICBzZXR0aW5ncy5MaXN0VHlwZU1vZGUgPSBwYXJhbVsiTGlzdFR5cGVNb2RlIl07CisgICAgICAgIHNldHRpbmdzLnNob3dMb2FkaW5nID0gKHBhcmFtWyJzaG93TG9hZGluZyJdPT0idHJ1ZSIpOworICAgICAgICBzZXR0aW5ncy5zaG93Q2hhciA9IChwYXJhbVsic2hvd0NoYXIiXT09InRydWUiKTsKKyAgICAgICAgc2V0dGluZ3Muc2hvd1dvcmQgPSAocGFyYW1bInNob3dXb3JkIl09PSJ0cnVlIik7CisgICAgICAgIHNldHRpbmdzLnNob3dIdG1sID0gKHBhcmFtWyJzaG93SHRtbCJdPT0idHJ1ZSIpOworICAgICAgfQorICAgIH0sIHNldHRpbmdzICk7CisgIH0KKworICBmdW5jdGlvbiBpbml0KCl7CisgICAgdmFyIGNvID0gZ2V0Q29va2llKCdjb19leHRfWGluaGEnKTsKKyAgICBpZihjbyE9bnVsbCl7CisgICAgICB2YXIgY29fdmFsdWVzOworICAgICAgdmFyIGNvX2VudHJpZXMgPSBjby5zcGxpdCgnIyMjJyk7CisgICAgICBmb3IgKHZhciBpIGluIGNvX2VudHJpZXMpIHsKKyAgICAgICAgY29fdmFsdWVzID0gY29fZW50cmllc1tpXS5zcGxpdCgnPScpOworICAgICAgICBpZihjb192YWx1ZXNbMF09PSdwbHVnaW5zJykgeworICAgICAgICAgIGZvcih2YXIgeCA9IDA7IHggPCBkb2N1bWVudC5mb3Jtc1swXS5wbHVnaW5zLmxlbmd0aDsgeCsrKSB7CisgICAgICAgICAgICBpZihjb192YWx1ZXNbMV0uaW5kZXhPZihkb2N1bWVudC5mb3Jtc1swXS5wbHVnaW5zW3hdLnZhbHVlKSE9LTEpIHsKKyAgICAgICAgICAgICAgZG9jdW1lbnQuZm9ybXNbMF0ucGx1Z2luc1t4XS5jaGVja2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZihjb192YWx1ZXNbMF0hPScnKSB7CisgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29fdmFsdWVzWzBdKS52YWx1ZSA9IGNvX3ZhbHVlc1sxXTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBfb25SZXNpemUoKTsKKyAgfTsKKworICB3aW5kb3cub25yZXNpemUgPSBfb25SZXNpemU7CisgIHdpbmRvdy5vbmxvYWQgPSBpbml0OworICA8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxmb3JtIGFjdGlvbj0iZXh0X2V4YW1wbGUtYm9keS5waHAiIHRhcmdldD0iYm9keSIgbmFtZT0iZnNldHRpbmdzIiBpZD0iZnNldHRpbmdzIj4KKyAgPGgxPlhpbmhhIEV4YW1wbGU8L2gxPgorICAgIDxmaWVsZHNldD4KKyAgICAgIDxsZWdlbmQ+U2V0dGluZ3M8L2xlZ2VuZD4KKyAgICAgICAgPGxhYmVsPgorICAgICAgICAgIE51bWJlciBvZiBFZGl0b3JzOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibnVtIiBpZD0ibnVtIiB2YWx1ZT0iMSIgc3R5bGU9IndpZHRoOjI1OyIgbWF4bGVuZ3RoPSIyIi8+CisgICAgICAgIDwvbGFiZWw+CisgICAgICAgIDxsYWJlbD4KKyAgICAgICAgICBMYW5ndWFnZToKKyAgICAgICAgICA8c2VsZWN0IG5hbWU9ImxhbmciIGlkPSJsYW5nIj4KKyAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJlbiI+RW5nbGlzaDwvb3B0aW9uPgorICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImVuIj4tLS0gQnkgTmFtZSAtLS08L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9ImNoIj5DaGluZXNlIChjaCk8L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9ImN6Ij5DemVjaDwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0iZGEiPkRhbmlzaDwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0iZGUiPkdlcm1hbjwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0iZWUiPkV3ZTwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0iZWwiPkdyZWVrPC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJlcyI+U3BhbmlzaDwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0iZXUiPkJhc3F1ZTwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0iZmEiPlBlcnNpYW4gKEZhcnNpKTwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0iZmkiPkZpbm5pc2g8L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9ImZyX2NhIj5GcmVuY2ggKENhbmFkYSk8L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9ImZyIj5GcmVuY2g8L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9InpuX2NoIj5DaGluZXNlICh6bl9jaCk8L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9ImhlIj5IZWJyZXc8L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9Imh1Ij5IdW5nYXJpYW48L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9Iml0Ij5JdGFsaWFuPC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJqYSI+SmFwYW5lc2U8L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9Imx0Ij5MaXRodWFuaWFuPC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJsdiI+TGF0dmlhbjwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0ibmIiPk5vcndlZ2lhbjwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0ibmwiPkR1dGNoPC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJwbCI+UG9saXNoPC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJwdF9iciI+UG9ydHVndWVzZSAoQnJhemlsKTwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0icm8iPlJvbWFuaWFuPC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJydSI+UnVzc2lhbjwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0ic2giPlNlcmJvLUNyb2F0aWFuPC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJzaSI+U2xvdmVuaWFuPC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJzciI+U2VyYmlhbjwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0idm4iPlN3ZWRpc2g8L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9InRoIj5UaGFpPC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJ0ciI+VHVya2lzaDwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0idm4iPlZpZXRuYW1lc2U8L29wdGlvbj4KKworICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImVuIj4tLS0gQnkgQ29kZSAtLS08L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9ImNoIj5jaDwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0iY3oiPmN6PC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJkYSI+ZGE8L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9ImRlIj5kZTwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0iZWUiPmVlPC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJlbCI+ZWw8L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9ImVzIj5lczwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0iZXUiPmV1PC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJmYSI+ZmE8L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9ImZpIj5maTwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0iZnJfY2EiPmZyX2NhPC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJmciI+ZnI8L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9InpuX2NoIj56bl9jaDwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0iaGUiPmhlPC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJodSI+aHU8L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9Iml0Ij5pdDwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0iamEiPmphPC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJsdCI+bHQ8L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9Imx2Ij5sdjwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0ibmIiPm5iPC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJubCI+bmw8L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9InBsIj5wbDwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0icHRfYnIiPnB0X2JyPC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJybyI+cm88L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9InJ1Ij5ydTwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0ic2giPnNoPC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJzaSI+c2k8L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9InNyIj5zcjwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0ic3YiPnN2PC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJ0aCI+dGg8L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9InRyIj50cjwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0idm4iPnZuPC9vcHRpb24+CisgICAgICAgICAgPC9zZWxlY3Q+CisgICAgICAgIDwvbGFiZWw+CisgICAgICAgIDxsYWJlbD4KKyAgICAgICAgICBTa2luOgorICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic2tpbiIgaWQ9InNraW4iPgorICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+LS0gbm8gc2tpbiAtLTwvb3B0aW9uPgorPD9waHAKKyAgJGQgPSBAZGlyKCRMb2NhbFNraW5QYXRoKTsKKyAgd2hpbGUgKGZhbHNlICE9PSAoJGVudHJ5ID0gJGQtPnJlYWQoKSkpICAvL25vdCBhIGRvdCBmaWxlIG9yIGRpcmVjdG9yeQorICB7IGlmKHN1YnN0cigkZW50cnksMCwxKSAhPSAnLicpCisgICAgeyBlY2hvICc8b3B0aW9uIHZhbHVlPSInIC4gJGVudHJ5IC4gJyI+ICcgLiAkZW50cnkgLiAnPC9vcHRpb24+Jy4iXG4iOworICAgIH0KKyAgfQorICAkZC0+Y2xvc2UoKTsKKz8+CisgICAgICAgICAgPC9zZWxlY3Q+CisgICAgICAgIDwvbGFiZWw+CisgICAgICAgIDxsYWJlbD4KKyAgICAgICAgICBNb2RlOgorICAgICAgICAgIDxzZWxlY3QgbmFtZT0iRG9jVHlwZSI+CisgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJzdGFuZGFyZHMiPlN0YW5kYXJkczwvb3B0aW9uPgorICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYWxtb3N0Ij5BbG1vc3QgU3RhbmRhcmRzPC9vcHRpb24+CisgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJxdWlya3MiPlF1aXJrczwvb3B0aW9uPgorICAgICAgICAgICAgCisgICAgICAgICAgPC9zZWxlY3Q+CisgICAgICAgIDwvbGFiZWw+CisgICAgICAgIDxsYWJlbD4KKyAgICAgICAgICBJY29uczoKKyAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iaWNvbnMiPgorICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPkRlZmF1bHQvU2tpbjwvb3B0aW9uPgorICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJDbGFzc2ljIj5DbGFzc2ljPC9vcHRpb24+CisgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IkNyeXN0YWwiPkNyeXN0YWw8L29wdGlvbj4KKyAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iVGFuZ28iPlRhbmdvPC9vcHRpb24+CisgICAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgPGNlbnRlcj48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iZXh0ZW5kZWQgU2V0dGluZ3MiIG9uQ2xpY2s9ImZFeHRlbmRlZCgpOyIgLz48L2NlbnRlcj4KKworICAgIDwvZmllbGRzZXQ+CisgICAgPGZpZWxkc2V0PgorICAgICAgPGxlZ2VuZD5QbHVnaW5zPC9sZWdlbmQ+CisgICAgICA8ZGl2IGlkPSJkaXZfcGx1Z2lucyIgc3R5bGU9IndpZHRoOjEwMCU7IG92ZXJmbG93OmF1dG8iPgorPD9waHAKKyAgJGQgPSBAZGlyKCRMb2NhbFBsdWdpblBhdGgpOworICAkZGlyX2FycmF5ID0gYXJyYXkoKTsKKyAgd2hpbGUgKGZhbHNlICE9PSAoJGVudHJ5ID0gJGQtPnJlYWQoKSkpICAvL25vdCBhIGRvdCBmaWxlIG9yIGRpcmVjdG9yeQorICB7IGlmKHN1YnN0cigkZW50cnksMCwxKSAhPSAnLicpCisgICAgeyAkZGlyX2FycmF5W10gPSAkZW50cnk7CisgICAgfQorICB9CisgICRkLT5jbG9zZSgpOworICBzb3J0KCRkaXJfYXJyYXkpOworICBmb3JlYWNoICgkZGlyX2FycmF5IGFzICRlbnRyeSkKKyAgeyBlY2hvICc8bGFiZWw+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJwbHVnaW5zIiBpZD0icGx1Z2lucyIgdmFsdWU9IicgLiAkZW50cnkgLiAnIj4gJyAuICRlbnRyeSAuICc8L2xhYmVsPicuIlxuIjsKKyAgfQorCis/PgorICAgICAgPC9kaXY+CisgICAgPC9maWVsZHNldD4KKyAgICA8Y2VudGVyPjxidXR0b24gdHlwZT0ic3VibWl0Ij5yZWxvYWQgZWRpdG9yPC9idXR0b24+PC9jZW50ZXI+CisKKyAgICAgICAgPHRleHRhcmVhIGlkPSJteVRleHRhcmVhMCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgICAgICAgICAgPHA+TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuCisgICAgICAgICAgQWxpcXVhbSBldCB0ZWxsdXMgdml0YWUganVzdG8gdmFyaXVzIHBsYWNlcmF0LiBTdXNwZW5kaXNzZSBpYWN1bGlzCisgICAgICAgICAgdmVsaXQgc2VtcGVyIGRvbG9yLiBEb25lYyBncmF2aWRhIHRpbmNpZHVudCBtaS4gQ3VyYWJpdHVyIHRyaXN0aXF1ZQorICAgICAgICAgIGFudGUgZWxlbWVudHVtIHR1cnBpcy4gQWxpcXVhbSBuaXNsLiBOdWxsYSBwb3N1ZXJlIG5lcXVlIG5vbgorICAgICAgICAgIHRlbGx1cy4gTW9yYmkgdmVsIG5pYmguIEN1bSBzb2NpaXMgbmF0b3F1ZSBwZW5hdGlidXMgZXQgbWFnbmlzIGRpcworICAgICAgICAgIHBhcnR1cmllbnQgbW9udGVzLCBuYXNjZXR1ciByaWRpY3VsdXMgbXVzLiBOYW0gbmVjIHdpc2kuIEluIHdpc2kuCisgICAgICAgICAgQ3VyYWJpdHVyIHBoYXJldHJhIGJpYmVuZHVtIGxlY3R1cy4gPC9wPgorPHVsPgorICA8bGk+PGEgaHJlZj0iaHR0cDovL3Rlc3QuY29tL2pvaG4lMjdzIj50ZXN0PC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSIvYWJzb2x1dGUvdGVzdC5odG1sIj50ZXN0PC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSIvdGVzdC5odG1sIj50ZXN0PC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSJ0ZXN0Lmh0bWwiPnRlc3Q8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9Ii4uL3Rlc3QuaHRtbCI+dGVzdDwvYT48L2xpPgorICA8bGk+PC9saT4KKyAgPGxpPjxhIGhyZWY9Ii9hYnNvbHV0ZS90ZXN0Lmh0bWwiPnRlc3Q8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9Ii9hYnNvbHV0ZS8uL3Rlc3QuaHRtbCI+dGVzdDwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iL2Fic29sdXRlLy4vLi4vdGVzdC5odG1sIj50ZXN0PC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSIvYWJzb2x1dGUvLi8vLy4vLi4vdGVzdC5odG1sIj50ZXN0PC9hPjwvbGk+CisgIDxsaT48L2xpPgorICA8bGk+PGEgaHJlZj0icmVsYXRpdmUvdGVzdC5odG1sIj50ZXN0PC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSJyZWxhdGl2ZS8uL3Rlc3QuaHRtbCI+dGVzdDwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0icmVsYXRpdmUvLi8uLi90ZXN0Lmh0bWwiPnRlc3Q8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9InJlbGF0aXZlLy4vLy8uLy4uL3Rlc3QuaHRtbCI+dGVzdDwvYT48L2xpPgorICA8bGk+PC9saT4KKyAgPGxpPjxhIGhyZWY9Ii4uL3Rlc3QuaHRtbCI+dGVzdDwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iLi4vLi90ZXN0Lmh0bWwiPnRlc3Q8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9Ii4uLy4vLi4vdGVzdC5odG1sIj50ZXN0PC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSIuLi8uLy8vLi8uLi90ZXN0Lmh0bWwiPnRlc3Q8L2E+PC9saT4KKyAgPGxpPjwvbGk+CisgIDxsaT48YSBocmVmPSIuL3JlbGF0aXZlL3Rlc3QuaHRtbCI+dGVzdDwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iLi9yZWxhdGl2ZS8uL3Rlc3QuaHRtbCI+dGVzdDwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iLi9yZWxhdGl2ZS8uLy4uL3Rlc3QuaHRtbCI+dGVzdDwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iLi9yZWxhdGl2ZS8uLy8vLi8uLi90ZXN0Lmh0bWwiPnRlc3Q8L2E+PC9saT4KKyAgPGxpPjwvbGk+CisgIDxsaT48YSBocmVmPSIuL3JlbGF0aXZlL3Rlc3QuaHRtbD8uLy8vLi8uLi8uLi8uLi9hYmMvZGVmIj50ZXN0PC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSIuL3JlbGF0aXZlLy4vdGVzdC5odG1sIzEyMy80NS8uLi8uLi8uLi8vLy4vZGRkIj50ZXN0PC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSIuL3JlbGF0aXZlLy4vLi4vdGVzdC5odG1sPy4vLy8uLy4uLy4uLy4uL2FiYy9kZWYiPnRlc3Q8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9Ii4vcmVsYXRpdmUvLi8vLy4vLi4vdGVzdC5odG1sIzEyMy80NS8uLi8uLi8uLi8vLy4vZGRkIj50ZXN0PC9hPjwvbGk+CisgIDxsaT48L2xpPgorICA8bGk+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi9yZWxhdGl2ZS90ZXN0Lmh0bWw/Li8vLy4vLi4vLi4vLi4vYWJjL2RlZiI+dGVzdDwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iLi4vLi4vLi4vLi9yZWxhdGl2ZS8uL3Rlc3QuaHRtbCMxMjMvNDUvLi4vLi4vLi4vLy8uL2RkZCI+dGVzdDwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi9yZWxhdGl2ZS8uLy4uL3Rlc3QuaHRtbD8uLy8vLi8uLi8uLi8uLi9hYmMvZGVmIj50ZXN0PC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSIuLi8uLi8uLi8uLi8uL3JlbGF0aXZlLy4vLy8uLy4uL3Rlc3QuaHRtbCMxMjMvNDUvLi4vLi4vLi4vLy8uL2RkZCI+dGVzdDwvYT48L2xpPgorICAKKzwvdWw+CisgICAgICAgICAgPHVsPgorICAgICAgICAgICAgPGxpPiBQaGFzZWxsdXMgZXQgbWFzc2Egc2VkIGRpYW0gdml2ZXJyYSBzZW1wZXIuICA8L2xpPgorICAgICAgICAgICAgPGxpPiBNYXVyaXMgdGluY2lkdW50IGZlbGlzIGluIG9kaW8uICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPGxpPiBOdWxsYSBwbGFjZXJhdCBudW5jIHV0IHBlZGUuICAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPGxpPiBWaXZhbXVzIHVsdHJpY2VzIG1pIHNpdCBhbWV0IHVybmEuICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPGxpPiBRdWlzcXVlIHNlZCBhdWd1ZSBxdWlzIG51bmMgbGFvcmVldCB2b2x1dHBhdC48L2xpPgorICAgICAgICAgICAgPGxpPiBOdW5jIHNpdCBhbWV0IG1ldHVzIGluIHRvcnRvciBzZW1wZXIgbWF0dGlzLiA8L2xpPgorICAgICAgICAgIDwvdWw+CisgICAgICAgIDwvdGV4dGFyZWE+CisKKyAgPC9mb3JtPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgdG9wLmZyYW1lc1siYm9keSJdLmxvY2F0aW9uLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoL2V4dF9leGFtcGxlLW1lbnVcLnBocC4qLywgJ2V4dF9leGFtcGxlLWJvZHkucGhwJykKKyAgICB2YXIgX29sZFN1Ym1pdEhhbmRsZXIgPSBudWxsOworICAgIGlmIChkb2N1bWVudC5mb3Jtc1swXS5vbnN1Ym1pdCAhPSBudWxsKSB7CisgICAgICBfb2xkU3VibWl0SGFuZGxlciA9IGRvY3VtZW50LmZvcm1zWzBdLm9uc3VibWl0OworICAgIH0KKyAgICBmdW5jdGlvbiBmcmFtZV9vblN1Ym1pdCgpeworICAgICAgdmFyIHRoZW5ld2RhdGUgPSBuZXcgRGF0ZSAoKTsKKyAgICAgIHRoZW5ld2RhdGUuc2V0VGltZSh0aGVuZXdkYXRlLmdldFRpbWUoKSArICg1KjI0KjYwKjYwKjEwMDApKTsKKyAgICAgIHZhciBjb192YWx1ZSA9ICdza2luPScgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbicpLm9wdGlvbnNbZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraW4nKS5zZWxlY3RlZEluZGV4XS52YWx1ZSArICcjIyMnICsKKyAgICAgICAgICAgICAgICAgICAgICdsYW5nPScgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFuZycpLm9wdGlvbnNbZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhbmcnKS5zZWxlY3RlZEluZGV4XS52YWx1ZSArICcjIyMnICsKKyAgICAgICAgICAgICAgICAgICAgICdudW09JyArIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdudW0nKS52YWx1ZSArICcjIyMnOworICAgICAgdmFyIHNfdmFsdWU9Jyc7CisgICAgICBmb3IodmFyIHggPSAwOyB4IDwgZG9jdW1lbnQuZm9ybXNbMF0ucGx1Z2lucy5sZW5ndGg7IHgrKykgeworICAgICAgICBpZihkb2N1bWVudC5mb3Jtc1swXS5wbHVnaW5zW3hdLmNoZWNrZWQpCisgICAgICAgICAgc192YWx1ZSArPSBkb2N1bWVudC5mb3Jtc1swXS5wbHVnaW5zW3hdLnZhbHVlICsgJy8nOworICAgICAgfQorICAgICAgaWYoc192YWx1ZSE9JycpIHsKKyAgICAgICAgY29fdmFsdWUgKz0gJ3BsdWdpbnM9JyArIHNfdmFsdWUgKyAnIyMjJworICAgICAgfQorICAgICAgc2V0Q29va2llKCdjb19leHRfWGluaGEnLCBjb192YWx1ZSwgdGhlbmV3ZGF0ZSk7CisgICAgICBpZiAoX29sZFN1Ym1pdEhhbmRsZXIgIT0gbnVsbCkgeworICAgICAgICBfb2xkU3VibWl0SGFuZGxlcigpOworICAgICAgfQorICAgIH0KKyAgICBkb2N1bWVudC5mb3Jtc1swXS5vbnN1Ym1pdCA9IGZyYW1lX29uU3VibWl0OworICA8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2V4YW1wbGVzL2Z1bGxfZXhhbXBsZS5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9maWxlcy9mdWxsX2V4YW1wbGUuY3NzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvZXhhbXBsZXMvZnVsbF9leGFtcGxlLmNzcwpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvZmlsZXMvZnVsbF9leGFtcGxlLmNzcwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvZmlsZXMvc3R5bGlzdC5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9maWxlcy9zdHlsaXN0LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWZiNjIxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvZmlsZXMvc3R5bGlzdC5jc3MKQEAgLTAsMCArMSwzMyBAQAorICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOm5vVGFicz10cnVlOnRhYlNpemU9MjppbmRlbnRTaXplPTI6LS0KKyAgICAtLSAgU3R5bGlzdCBwbHVnaW4gZXhhbXBsZSBDU1MgZmlsZS4gIFVzZWQgYnkgZnVsbF9leGFtcGxlLmpzCisgICAgLS0gIHdoZW4gdGhlIFN0eWxpc3QgcGx1Z2luIGlzIGluY2x1ZGVkIGluIGFuIGF1dG8tZ2VuZXJhdGVkIGV4YW1wbGUuCisgICAgLS0KKyAgICAtLSAgJEhlYWRVUkw6aHR0cDovL3N2bi54aW5oYS53ZWJmYWN0aW9uYWwuY29tL3RydW5rL2V4YW1wbGVzL2ZpbGVzL3N0eWxpc3QuY3NzICQKKyAgICAtLSAgJExhc3RDaGFuZ2VkRGF0ZToyMDA4LTAyLTA0IDAxOjQzOjIxICswMTAwIChNbywgMDQgRmViIDIwMDgpICQKKyAgICAtLSAgJExhc3RDaGFuZ2VkUmV2aXNpb246OTYyICQKKyAgICAtLSAgJExhc3RDaGFuZ2VkQnk6cmF5ICQKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy5ibHVldGV4dAoreworICBjb2xvcjpibHVlOworfQorCitwLmJsdWVfcGFyYWdyYXBoCit7CisgIGNvbG9yOmRhcmtibHVlOworfQorCitsaS5ncmVlbl9saXN0X2l0ZW0KK3sKKyAgY29sb3I6Z3JlZW47Cit9CisKK2gxLndlYmRpbmdzX2x2bF8xCit7CisgIGZvbnQtZmFtaWx5OndlYmRpbmdzOworfQorCitpbWcucG9sYXJvaWQgeyBib3JkZXI6MXB4IHNvbGlkIGJsYWNrOyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyBwYWRkaW5nOjEwcHg7IHBhZGRpbmctYm90dG9tOjMwcHg7IH0KKworbGkubGlnaHRfYmx1ZV9saXN0X2l0ZW0geyBjb2xvcjojOTdiMGY0OyB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvaW5kZXguaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2V4YW1wbGVzL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc2ZGQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2V4YW1wbGVzL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwyNyBAQAorPGh0bWw+CisgIDxib2R5PgorICAgIDxoMT5YaW5oYSBFeGFtcGxlczwvaDE+CisgICAgPHA+VGhlc2UgYXJlIHRoZSBjdXJyZW50IGV4YW1wbGVzIGZvciB1c2luZyBYaW5oYSwgdGhlc2UgZGVtb25zdHJhdGUgInRoZSB3YXkiIHRvIHVzZSBYaW5oYS48L3A+CisgICAgPHVsPgorICAgICAgPGxpPjxhIGhyZWY9Ik9uZUxpbmUuaHRtbCI+T25lIExpbmUgVG8gWGluaGEgKFplcm8gQ29uZmlndXJhdGlvbik8L2E+PC9saT4KKyAgICAgIDxsaT48YSBocmVmPSJOZXdiaWUuaHRtbCI+WGluaGEgQ29tcGxldGUgRXhhbXBsZSAoQmVzdCBGb3IgTmV3Ymllcyk8L2E+PC9saT4gCisgICAgICA8bGk+PGEgaHJlZj0iVXNpbmdQaHBQbHVnaW5zLnBocCI+SW1hZ2UgVXBsb2FkaW5nIGFuZCBMaW5rIEJyb3dzaW5nIERlbW8gKFJlcXVpcmVzIFBIUCk8L2E+PC9saT4gICAgICAKKyAgICAgIDxsaT48YSBocmVmPSJDdXN0b21QbHVnaW5zLmh0bWwiPkN1c3RvbSBQbHVnaW5zIEV4YW1wbGU8L2E+PC9saT4gICAgICAKKyAgICA8L3VsPgorICAgIAorICAgIDxoMj5FeHBlcmltZW50aW5nIGFuZCBUZXN0aW5nPC9oMj4KKyAgICA8cD5UaGVzZSBleGFtcGxlcyBhcmUgbW9zdGx5IGZvciB0ZXN0aW5nIG91dCB0aGUgcGx1Z2lucyBhbmQgdXNlZCBkdXJpbmcgZGV2ZWxvcG1lbnQgb2YgWGluaGEsIHRoZXkgZG9uJ3QgbmVjZXNzYXJpbHkgZm9sbG93ICJ0aGUgd2F5IiB0byB1c2UgWGluaGEgaW4geW91ciBvd24gY29kZS48L3A+CisgICAgCisgICAgPHVsPgorICAgICAgPGxpPjxhIGhyZWY9IkV4dGVuZGVkRGVtby5odG1sIj5FeHRlbmRlZCBEZW1vIChSZXF1aXJlcyBQSFApPC9hPjwvbGk+ICAgICAgICAgICAgCisgICAgICA8bGk+PGEgaHJlZj0idGVzdGJlZC5waHAiPkdlbmVyYWwgVGVzdGJlZDwvYT48L2xpPgorICAgIDwvdWw+CisgICAgCisgICAgPGgyPk9sZCBTdHlsZSBFeGFtcGxlczwvaDI+CisgICAgPHA+VGhlc2UgZXhhbXBsZXMgZm9sbG93IHNvbWUgb2xkZXIgaW5pdGlhbGlzYXRpb24gc3R5bGVzIGZvciBYaW5oYSwgdGhleSBzdGlsbCB3b3JrIGZpbmUgYW5kIHlvdSBjYW4gZG8gaXQgdGhpcyB3YXkgaWYgeW91IGxpa2UgKG9yIGhhdmUgZXhpc3RpbmcgY29kZSB0aGF0IGRvZXMpLCBidXQgaXQncyBwcm9iYWJseSBlYXNpZXIgdG8gdXNlIHRoZSBmaXJzdCB0aHJlZSBleGFtcGxlcyBhYm92ZSB0byBiYXNlIHlvdXIgd29yayBvbi48L3A+CisgICAgPHVsPgorICAgICAgPGxpPjxhIGhyZWY9Ik9sZF9OZXdiaWVfR3VpZGUvc2ltcGxlX2V4YW1wbGUuaHRtbCI+U2ltcGxlIERlbW88L2E+IChMb3dlciBMZXZlbCBJbml0aWFsaXNhdGlvbiBFeGFtcGxlKTwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0iT2xkX05ld2JpZV9HdWlkZS9OZXdiaWUuaHRtbCI+T2xkIE5ld2JpZSBHdWlkZSBFeGFtcGxlPC9hPiAoQmV0dGVyIHRvIHNlZSBFYXN5IEV4YW1wbGUgYWJvdmUpPC9saT4KKyAgICA8L3VsPgorICA8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvcmVuZGVyLW1vZGUtZGV2ZWxvcGVyLWhlbHAuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9yZW5kZXItbW9kZS1kZXZlbG9wZXItaGVscC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjYzMjIwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvcmVuZGVyLW1vZGUtZGV2ZWxvcGVyLWhlbHAuanMKQEAgLTAsMCArMSw4NyBAQAorLyoqIExvYWQgdGhpcyBqYXZhc2NyaXB0IGF0IHRoZSBib3R0b20gb2YgdGhlIHBhZ2UgdG8gb3V0cHV0IHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCAKKyAqICAgcmVuZGVyaW5nIG1vZGUgaXMgYmVpbmcgdXNlZCBieSB0aGUgYnJvd3NlciAoYmFzZWQgb24gZG9jdHlwZSBkZXRlY3Rpb24pLgorICovCisKK3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CisgIGlmKHR5cGVvZiBkb2N1bWVudC5kb2N0eXBlID09ICd1bmRlZmluZWQnIHx8IGRvY3VtZW50LmRvY3R5cGUgPT0gbnVsbCkgcmV0dXJuOworICB2YXIgZG9jdHlwZUhlbHAgPSAnXAorICA8ZmllbGRzZXQgc3R5bGU9Im1hcmdpbi10b3A6MjBweDsiPlwKKyAgICA8bGVnZW5kIHN0eWxlPSJmb250LXdlaWdodDpib2xkOyI+QnJvd3NlciBSZW5kZXJpbmcgTW9kZTwvbGVnZW5kPlwKKyAgICA8cD5Bc3N1bWluZyB0aGF0IHlvdXIgYnJvd3NlciBpcyBmYWlybHkgbW9kZXJuLCB0aGlzIHBhZ2UgaXMgYmVpbmcgcmVuZGVyZWQgaW4gPC9wPlwKKyAgICA8YmxvY2txdW90ZT5cCisgICAgICA8cD4nOworICAKKyAgICAgICAgZG9jdHlwZUhlbHAgKz0gJycgKyBkb2N1bWVudC5jb21wYXRNb2RlICsgJyAtICc7CisgICAgICAgIGlmKGRvY3VtZW50LmNvbXBhdE1vZGUgPT0gJ0JhY2tDb21wYXQnKQorICAgICAgICB7CisgICAgICAgICAgZG9jdHlwZUhlbHAgKz0gKCdRdWlya3MgTW9kZScpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGZ1bmN0aW9uIGdldF9kb2N0eXBlKCkKKyAgICAgICAgICB7CisgICAgICAgICAgICAgIHZhciBkb2N0eXBlID0gCisgICAgICAgICAgICAgICc8IURPQ1RZUEUgJyArIAorICAgICAgICAgICAgICBkb2N1bWVudC5kb2N0eXBlLm5hbWUgKworICAgICAgICAgICAgICAoZG9jdW1lbnQuZG9jdHlwZS5wdWJsaWNJZD8nIFBVQkxJQyAiJyArICBkb2N1bWVudC5kb2N0eXBlLnB1YmxpY0lkICsgJyInOicnKSArCisgICAgICAgICAgICAgIChkb2N1bWVudC5kb2N0eXBlLnN5c3RlbUlkPycgIicgKyBkb2N1bWVudC5kb2N0eXBlLnN5c3RlbUlkICsgJyInOicnKSArICc+JzsKKyAgICAgICAgICAgICAgcmV0dXJuIGRvY3R5cGU7CisgICAgICAgICAgfQorICAgICAgICAgIAorICAgICAgICAgIHZhciBkb2N0eXBlU3RyaW5nID0gZ2V0X2RvY3R5cGUoKTsgICAgICAgICAgICAgIAorICAgICAgICAgIAorICAgICAgICAgIAorICAgICAgICAgIHN3aXRjaChkb2N0eXBlU3RyaW5nKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgJzwhRE9DVFlQRSBodG1sPic6CisgICAgICAgICAgICBjYXNlICc8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+JzoKKyAgICAgICAgICAgIGNhc2UgJzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTiI+JzoKKyAgICAgICAgICAgIGNhc2UgJzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCI+JzoKKyAgICAgICAgICAgIGNhc2UgJzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L3N0cmljdC5kdGQiPic6CisgICAgICAgICAgICBjYXNlICc8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIEJhc2ljIDEuMC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1iYXNpYy94aHRtbC1iYXNpYzEwLmR0ZCI+JzoKKyAgICAgICAgICAgIGNhc2UgJzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4nOgorICAgICAgICAgICAgY2FzZSAnPCFET0NUWVBFIEhUTUwgUFVCTElDICJJU08vSUVDIDE1NDQ1OjIwMDAvL0RURCBIVE1MLy9FTiI+JzoKKyAgICAgICAgICAgIGNhc2UgJzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiSVNPL0lFQyAxNTQ0NToyMDAwLy9EVEQgSHlwZXJUZXh0IE1hcmt1cCBMYW5ndWFnZS8vRU4iPic6CisgICAgICAgICAgICBjYXNlICc8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIklTTy9JRUMgMTU0NDU6MTk5OS8vRFREIEhUTUwvL0VOIj4nOgorICAgICAgICAgICAgY2FzZSAnPCFET0NUWVBFIEhUTUwgUFVCTElDICJJU08vSUVDIDE1NDQ1OjE5OTkvL0RURCBIeXBlclRleHQgTWFya3VwIExhbmd1YWdlLy9FTiI+JzoKKyAgICAgICAgICAgICAgZG9jdHlwZUhlbHAgKz0gKCdTdGFuZGFyZHMgTW9kZTxici8+JytYaW5oYS5odG1sRW5jb2RlKGRvY3R5cGVTdHJpbmcpKTsgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlICc8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+JzoKKyAgICAgICAgICAgIGNhc2UgJzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPic6CisgICAgICAgICAgICBjYXNlICc8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPic6CisgICAgICAgICAgICBjYXNlICc8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+JzoKKyAgICAgICAgICAgICAgZG9jdHlwZUhlbHAgKz0gKCdBbG1vc3QgU3RhbmRhcmRzIE1vZGU8YnIvPicrWGluaGEuaHRtbEVuY29kZShkb2N0eXBlU3RyaW5nKSk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICBkb2N0eXBlSGVscCArPSAoJ0VpdGhlciBTdGFuZGFyZHMgTW9kZSwgb3IgQWxtb3N0IFN0YW5kYXJkcyBNb2RlPGJyLz4nK1hpbmhhLmh0bWxFbmNvZGUoZG9jdHlwZVN0cmluZykpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZG9jdHlwZUhlbHAgKz0gKCdcCisgICAgICA8L3A+XAorICAgIDwvYmxvY2txdW90ZT5cCisgICAgPHA+XAorICAgICAgVG8gY2hhbmdlIHRoZSBtb2RlIGFsdGVyIHRoZSBkb2N0eXBlIG9uIHRoaXMgZmlsZSwgJyt0aGlzLmRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lKycsIHRvIG9uZSBvZlwKKyAgICA8L3A+XAorICAgIDxkbD5cCisgICAgICA8ZHQgc3R5bGU9ImZvbnQtd2VpZ2h0OmJvbGQ7Ij5TdGFuZGFyZHM8L2R0PlwKKyAgICAgICAgPGRkIHN0eWxlPSJtYXJnaW4tYm90dG9tOjEwcHg7Ij4mbHQ7IURPQ1RZUEUgaHRtbCZndDs8L2RkPlwKKyAgICAgICAgXAorICAgICAgPGR0IHN0eWxlPSJmb250LXdlaWdodDpib2xkOyI+QWxtb3N0IFN0YW5kYXJkczwvZHQ+XAorICAgICAgICA8ZGQgc3R5bGU9Im1hcmdpbi1ib3R0b206MTBweDsiPiZsdDshRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIiZndDs8L2RkPlwKKyAgICAgICAgXAorICAgICAgPGR0IHN0eWxlPSJmb250LXdlaWdodDpib2xkOyI+UXVpcmtzPC9kdD5cCisgICAgICAgIDxkZCBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMHB4OyI+KE5vIERvY3R5cGUgYXQgYWxsKTwvZGQ+XAorICAgIDwvZGw+XAorICAgIDxwIHN0eWxlPSJib3JkZXI6MnB4IHNvbGlkIHJlZDt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MTBweDtwYWRkaW5nOjEwcHg7Ij5UaGlzIGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIGJ5IHJlbmRlci1tb2RlLWRldmVsb3Blci1oZWxwLmpzLCByZW1vdmUgdGhhdCBzY3JpcHQgZnJvbSB5b3VyIHBhZ2UgdG8gcmVtb3ZlIHRoaXMgaGVscCB0ZXh0LjwvcD5cCisgIDwvZmllbGRzZXQ+Jyk7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N0eXBlSGVscFRleHQnKS5pbm5lckhUTUwgPSBkb2N0eXBlSGVscDsKK30sIDUwMCk7CisKKy8vIEJlY2F1c2UgYWRkaW5nIHRoZSBhYm92ZSB0byB0aGUgZG9jdW1lbnQgYWZ0ZXIgaXQncyBsb2FkZWQgd2lsbCBxdWl0ZSBwb3NzaWJseQorLy8gaW50cm9kdWNlIGEgdmVydGljYWwgc2Nyb2xsYmFyLCBvZiB3aGljaCBYaW5oYSB3b24ndCBiZSBhd2FyZSwgd2Ugd291bGQgaGF2ZSAKKy8vIHRvIGlzc3VlIGEgc2l6ZUVkaXRvcnMKK2RvY3VtZW50LndyaXRlKCc8ZGl2IGlkPSJkb2N0eXBlSGVscFRleHQiIHN0eWxlPSJoZWlnaHQ6MjAwMHB4Ij48L2Rpdj4nKTsKKyAgICAgICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvcmVxdWlyZS1wYXNzd29yZC5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy9yZXF1aXJlLXBhc3N3b3JkLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWM0ZjE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvZXhhbXBsZXMvcmVxdWlyZS1wYXNzd29yZC5waHAKQEAgLTAsMCArMSwyNzEgQEAKKzw/cGhwIAorICAKKyAgLyoqIFRoaXMgZmlsZSBjYW4gYmUgaW5jbHVkZWQgYXMgdGhlIGZpcnN0IGxpbmUgb2YgYSBQSFAgZGVtbyB0byByZXF1aXJlIHRoYXQgdGhlIHVzZXIgcHJvdmlkZXMgYSBwYXNzd29yZAorICAgKiAgIGluIG9yZGVyIHRvIGFjY2VzcyB0aGF0IHBhcnRpY3VsYXIgZGVtby4gIFRoZSB1c2VyIHdpbGwgYmUgaW5zdHJ1Y3RlZCBvbiBob3cgdG8gY3JlYXRlIHRoZSByZXF1aXJlZAorICAgKiAgICJwYXNzd29yZC5waHAiIGZpbGUsIHdoaWNoIGNvbnRhaW5zIGEgc2ltcGxlIG1kNSBoYXNoZWQgdmVyc2lvbiBvZiB0aGVpciBwYXNzd29yZC4gCisgICAqCisgICAqICBETyBOT1QgQ0hFQ0sgSU4gWU9VUiBwYXNzd29yZC5waHAhCisgICAqCisgICAqICBAYXV0aG9yIEphbWVzIFNsZWVtYW4sIHdpdGggdGhlIEphdmFzY3JpcHQgTUQ1IGZyb20gd2VidG9vbGtpdC5pbmZvCisgICAqLworICAKKyAgaWYoIWZpbGVfZXhpc3RzKGRpcm5hbWUoX19GSUxFX18pIC4gJy9wYXNzd29yZC5waHAnKSkKKyAgeworICAgID8+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAvKioKKyAgICAgICoKKyAgICAgICogIE1ENSAoTWVzc2FnZS1EaWdlc3QgQWxnb3JpdGhtKQorICAgICAgKiAgaHR0cDovL3d3dy53ZWJ0b29sa2l0LmluZm8vCisgICAgICAqCisgICAgICAqKi8KKyAgICAgIAorICAgICAgdmFyIE1ENSA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKKyAgICAgIAorICAgICAgICBmdW5jdGlvbiBSb3RhdGVMZWZ0KGxWYWx1ZSwgaVNoaWZ0Qml0cykgeworICAgICAgICAgIHJldHVybiAobFZhbHVlPDxpU2hpZnRCaXRzKSB8IChsVmFsdWU+Pj4oMzItaVNoaWZ0Qml0cykpOworICAgICAgICB9CisgICAgICAKKyAgICAgICAgZnVuY3Rpb24gQWRkVW5zaWduZWQobFgsbFkpIHsKKyAgICAgICAgICB2YXIgbFg0LGxZNCxsWDgsbFk4LGxSZXN1bHQ7CisgICAgICAgICAgbFg4ID0gKGxYICYgMHg4MDAwMDAwMCk7CisgICAgICAgICAgbFk4ID0gKGxZICYgMHg4MDAwMDAwMCk7CisgICAgICAgICAgbFg0ID0gKGxYICYgMHg0MDAwMDAwMCk7CisgICAgICAgICAgbFk0ID0gKGxZICYgMHg0MDAwMDAwMCk7CisgICAgICAgICAgbFJlc3VsdCA9IChsWCAmIDB4M0ZGRkZGRkYpKyhsWSAmIDB4M0ZGRkZGRkYpOworICAgICAgICAgIGlmIChsWDQgJiBsWTQpIHsKKyAgICAgICAgICAgIHJldHVybiAobFJlc3VsdCBeIDB4ODAwMDAwMDAgXiBsWDggXiBsWTgpOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAobFg0IHwgbFk0KSB7CisgICAgICAgICAgICBpZiAobFJlc3VsdCAmIDB4NDAwMDAwMDApIHsKKyAgICAgICAgICAgICAgcmV0dXJuIChsUmVzdWx0IF4gMHhDMDAwMDAwMCBeIGxYOCBeIGxZOCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICByZXR1cm4gKGxSZXN1bHQgXiAweDQwMDAwMDAwIF4gbFg4IF4gbFk4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIChsUmVzdWx0IF4gbFg4IF4gbFk4KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIAorICAgICAgICBmdW5jdGlvbiBGKHgseSx6KSB7IHJldHVybiAoeCAmIHkpIHwgKCh+eCkgJiB6KTsgfQorICAgICAgICBmdW5jdGlvbiBHKHgseSx6KSB7IHJldHVybiAoeCAmIHopIHwgKHkgJiAofnopKTsgfQorICAgICAgICBmdW5jdGlvbiBIKHgseSx6KSB7IHJldHVybiAoeCBeIHkgXiB6KTsgfQorICAgICAgICBmdW5jdGlvbiBJKHgseSx6KSB7IHJldHVybiAoeSBeICh4IHwgKH56KSkpOyB9CisgICAgICAKKyAgICAgICAgZnVuY3Rpb24gRkYoYSxiLGMsZCx4LHMsYWMpIHsKKyAgICAgICAgICBhID0gQWRkVW5zaWduZWQoYSwgQWRkVW5zaWduZWQoQWRkVW5zaWduZWQoRihiLCBjLCBkKSwgeCksIGFjKSk7CisgICAgICAgICAgcmV0dXJuIEFkZFVuc2lnbmVkKFJvdGF0ZUxlZnQoYSwgcyksIGIpOworICAgICAgICB9OworICAgICAgCisgICAgICAgIGZ1bmN0aW9uIEdHKGEsYixjLGQseCxzLGFjKSB7CisgICAgICAgICAgYSA9IEFkZFVuc2lnbmVkKGEsIEFkZFVuc2lnbmVkKEFkZFVuc2lnbmVkKEcoYiwgYywgZCksIHgpLCBhYykpOworICAgICAgICAgIHJldHVybiBBZGRVbnNpZ25lZChSb3RhdGVMZWZ0KGEsIHMpLCBiKTsKKyAgICAgICAgfTsKKyAgICAgIAorICAgICAgICBmdW5jdGlvbiBISChhLGIsYyxkLHgscyxhYykgeworICAgICAgICAgIGEgPSBBZGRVbnNpZ25lZChhLCBBZGRVbnNpZ25lZChBZGRVbnNpZ25lZChIKGIsIGMsIGQpLCB4KSwgYWMpKTsKKyAgICAgICAgICByZXR1cm4gQWRkVW5zaWduZWQoUm90YXRlTGVmdChhLCBzKSwgYik7CisgICAgICAgIH07CisgICAgICAKKyAgICAgICAgZnVuY3Rpb24gSUkoYSxiLGMsZCx4LHMsYWMpIHsKKyAgICAgICAgICBhID0gQWRkVW5zaWduZWQoYSwgQWRkVW5zaWduZWQoQWRkVW5zaWduZWQoSShiLCBjLCBkKSwgeCksIGFjKSk7CisgICAgICAgICAgcmV0dXJuIEFkZFVuc2lnbmVkKFJvdGF0ZUxlZnQoYSwgcyksIGIpOworICAgICAgICB9OworICAgICAgCisgICAgICAgIGZ1bmN0aW9uIENvbnZlcnRUb1dvcmRBcnJheShzdHJpbmcpIHsKKyAgICAgICAgICB2YXIgbFdvcmRDb3VudDsKKyAgICAgICAgICB2YXIgbE1lc3NhZ2VMZW5ndGggPSBzdHJpbmcubGVuZ3RoOworICAgICAgICAgIHZhciBsTnVtYmVyT2ZXb3Jkc190ZW1wMT1sTWVzc2FnZUxlbmd0aCArIDg7CisgICAgICAgICAgdmFyIGxOdW1iZXJPZldvcmRzX3RlbXAyPShsTnVtYmVyT2ZXb3Jkc190ZW1wMS0obE51bWJlck9mV29yZHNfdGVtcDEgJSA2NCkpLzY0OworICAgICAgICAgIHZhciBsTnVtYmVyT2ZXb3JkcyA9IChsTnVtYmVyT2ZXb3Jkc190ZW1wMisxKSoxNjsKKyAgICAgICAgICB2YXIgbFdvcmRBcnJheT1BcnJheShsTnVtYmVyT2ZXb3Jkcy0xKTsKKyAgICAgICAgICB2YXIgbEJ5dGVQb3NpdGlvbiA9IDA7CisgICAgICAgICAgdmFyIGxCeXRlQ291bnQgPSAwOworICAgICAgICAgIHdoaWxlICggbEJ5dGVDb3VudCA8IGxNZXNzYWdlTGVuZ3RoICkgeworICAgICAgICAgICAgbFdvcmRDb3VudCA9IChsQnl0ZUNvdW50LShsQnl0ZUNvdW50ICUgNCkpLzQ7CisgICAgICAgICAgICBsQnl0ZVBvc2l0aW9uID0gKGxCeXRlQ291bnQgJSA0KSo4OworICAgICAgICAgICAgbFdvcmRBcnJheVtsV29yZENvdW50XSA9IChsV29yZEFycmF5W2xXb3JkQ291bnRdIHwgKHN0cmluZy5jaGFyQ29kZUF0KGxCeXRlQ291bnQpPDxsQnl0ZVBvc2l0aW9uKSk7CisgICAgICAgICAgICBsQnl0ZUNvdW50Kys7CisgICAgICAgICAgfQorICAgICAgICAgIGxXb3JkQ291bnQgPSAobEJ5dGVDb3VudC0obEJ5dGVDb3VudCAlIDQpKS80OworICAgICAgICAgIGxCeXRlUG9zaXRpb24gPSAobEJ5dGVDb3VudCAlIDQpKjg7CisgICAgICAgICAgbFdvcmRBcnJheVtsV29yZENvdW50XSA9IGxXb3JkQXJyYXlbbFdvcmRDb3VudF0gfCAoMHg4MDw8bEJ5dGVQb3NpdGlvbik7CisgICAgICAgICAgbFdvcmRBcnJheVtsTnVtYmVyT2ZXb3Jkcy0yXSA9IGxNZXNzYWdlTGVuZ3RoPDwzOworICAgICAgICAgIGxXb3JkQXJyYXlbbE51bWJlck9mV29yZHMtMV0gPSBsTWVzc2FnZUxlbmd0aD4+PjI5OworICAgICAgICAgIHJldHVybiBsV29yZEFycmF5OworICAgICAgICB9OworICAgICAgCisgICAgICAgIGZ1bmN0aW9uIFdvcmRUb0hleChsVmFsdWUpIHsKKyAgICAgICAgICB2YXIgV29yZFRvSGV4VmFsdWU9IiIsV29yZFRvSGV4VmFsdWVfdGVtcD0iIixsQnl0ZSxsQ291bnQ7CisgICAgICAgICAgZm9yIChsQ291bnQgPSAwO2xDb3VudDw9MztsQ291bnQrKykgeworICAgICAgICAgICAgbEJ5dGUgPSAobFZhbHVlPj4+KGxDb3VudCo4KSkgJiAyNTU7CisgICAgICAgICAgICBXb3JkVG9IZXhWYWx1ZV90ZW1wID0gIjAiICsgbEJ5dGUudG9TdHJpbmcoMTYpOworICAgICAgICAgICAgV29yZFRvSGV4VmFsdWUgPSBXb3JkVG9IZXhWYWx1ZSArIFdvcmRUb0hleFZhbHVlX3RlbXAuc3Vic3RyKFdvcmRUb0hleFZhbHVlX3RlbXAubGVuZ3RoLTIsMik7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBXb3JkVG9IZXhWYWx1ZTsKKyAgICAgICAgfTsKKyAgICAgIAorICAgICAgICBmdW5jdGlvbiBVdGY4RW5jb2RlKHN0cmluZykgeworICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9cclxuL2csIlxuIik7CisgICAgICAgICAgdmFyIHV0ZnRleHQgPSAiIjsKKyAgICAgIAorICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgc3RyaW5nLmxlbmd0aDsgbisrKSB7CisgICAgICAKKyAgICAgICAgICAgIHZhciBjID0gc3RyaW5nLmNoYXJDb2RlQXQobik7CisgICAgICAKKyAgICAgICAgICAgIGlmIChjIDwgMTI4KSB7CisgICAgICAgICAgICAgIHV0ZnRleHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoKGMgPiAxMjcpICYmIChjIDwgMjA0OCkpIHsKKyAgICAgICAgICAgICAgdXRmdGV4dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjID4+IDYpIHwgMTkyKTsKKyAgICAgICAgICAgICAgdXRmdGV4dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjICYgNjMpIHwgMTI4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICB1dGZ0ZXh0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgPj4gMTIpIHwgMjI0KTsKKyAgICAgICAgICAgICAgdXRmdGV4dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYyA+PiA2KSAmIDYzKSB8IDEyOCk7CisgICAgICAgICAgICAgIHV0ZnRleHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYyAmIDYzKSB8IDEyOCk7CisgICAgICAgICAgICB9CisgICAgICAKKyAgICAgICAgICB9CisgICAgICAKKyAgICAgICAgICByZXR1cm4gdXRmdGV4dDsKKyAgICAgICAgfTsKKyAgICAgIAorICAgICAgICB2YXIgeD1BcnJheSgpOworICAgICAgICB2YXIgayxBQSxCQixDQyxERCxhLGIsYyxkOworICAgICAgICB2YXIgUzExPTcsIFMxMj0xMiwgUzEzPTE3LCBTMTQ9MjI7CisgICAgICAgIHZhciBTMjE9NSwgUzIyPTkgLCBTMjM9MTQsIFMyND0yMDsKKyAgICAgICAgdmFyIFMzMT00LCBTMzI9MTEsIFMzMz0xNiwgUzM0PTIzOworICAgICAgICB2YXIgUzQxPTYsIFM0Mj0xMCwgUzQzPTE1LCBTNDQ9MjE7CisgICAgICAKKyAgICAgICAgc3RyaW5nID0gVXRmOEVuY29kZShzdHJpbmcpOworICAgICAgCisgICAgICAgIHggPSBDb252ZXJ0VG9Xb3JkQXJyYXkoc3RyaW5nKTsKKyAgICAgIAorICAgICAgICBhID0gMHg2NzQ1MjMwMTsgYiA9IDB4RUZDREFCODk7IGMgPSAweDk4QkFEQ0ZFOyBkID0gMHgxMDMyNTQ3NjsKKyAgICAgIAorICAgICAgICBmb3IgKGs9MDtrPHgubGVuZ3RoO2srPTE2KSB7CisgICAgICAgICAgQUE9YTsgQkI9YjsgQ0M9YzsgREQ9ZDsKKyAgICAgICAgICBhPUZGKGEsYixjLGQseFtrKzBdLCBTMTEsMHhENzZBQTQ3OCk7CisgICAgICAgICAgZD1GRihkLGEsYixjLHhbaysxXSwgUzEyLDB4RThDN0I3NTYpOworICAgICAgICAgIGM9RkYoYyxkLGEsYix4W2srMl0sIFMxMywweDI0MjA3MERCKTsKKyAgICAgICAgICBiPUZGKGIsYyxkLGEseFtrKzNdLCBTMTQsMHhDMUJEQ0VFRSk7CisgICAgICAgICAgYT1GRihhLGIsYyxkLHhbays0XSwgUzExLDB4RjU3QzBGQUYpOworICAgICAgICAgIGQ9RkYoZCxhLGIsYyx4W2srNV0sIFMxMiwweDQ3ODdDNjJBKTsKKyAgICAgICAgICBjPUZGKGMsZCxhLGIseFtrKzZdLCBTMTMsMHhBODMwNDYxMyk7CisgICAgICAgICAgYj1GRihiLGMsZCxhLHhbays3XSwgUzE0LDB4RkQ0Njk1MDEpOworICAgICAgICAgIGE9RkYoYSxiLGMsZCx4W2srOF0sIFMxMSwweDY5ODA5OEQ4KTsKKyAgICAgICAgICBkPUZGKGQsYSxiLGMseFtrKzldLCBTMTIsMHg4QjQ0RjdBRik7CisgICAgICAgICAgYz1GRihjLGQsYSxiLHhbaysxMF0sUzEzLDB4RkZGRjVCQjEpOworICAgICAgICAgIGI9RkYoYixjLGQsYSx4W2srMTFdLFMxNCwweDg5NUNEN0JFKTsKKyAgICAgICAgICBhPUZGKGEsYixjLGQseFtrKzEyXSxTMTEsMHg2QjkwMTEyMik7CisgICAgICAgICAgZD1GRihkLGEsYixjLHhbaysxM10sUzEyLDB4RkQ5ODcxOTMpOworICAgICAgICAgIGM9RkYoYyxkLGEsYix4W2srMTRdLFMxMywweEE2Nzk0MzhFKTsKKyAgICAgICAgICBiPUZGKGIsYyxkLGEseFtrKzE1XSxTMTQsMHg0OUI0MDgyMSk7CisgICAgICAgICAgYT1HRyhhLGIsYyxkLHhbaysxXSwgUzIxLDB4RjYxRTI1NjIpOworICAgICAgICAgIGQ9R0coZCxhLGIsYyx4W2srNl0sIFMyMiwweEMwNDBCMzQwKTsKKyAgICAgICAgICBjPUdHKGMsZCxhLGIseFtrKzExXSxTMjMsMHgyNjVFNUE1MSk7CisgICAgICAgICAgYj1HRyhiLGMsZCxhLHhbayswXSwgUzI0LDB4RTlCNkM3QUEpOworICAgICAgICAgIGE9R0coYSxiLGMsZCx4W2srNV0sIFMyMSwweEQ2MkYxMDVEKTsKKyAgICAgICAgICBkPUdHKGQsYSxiLGMseFtrKzEwXSxTMjIsMHgyNDQxNDUzKTsKKyAgICAgICAgICBjPUdHKGMsZCxhLGIseFtrKzE1XSxTMjMsMHhEOEExRTY4MSk7CisgICAgICAgICAgYj1HRyhiLGMsZCxhLHhbays0XSwgUzI0LDB4RTdEM0ZCQzgpOworICAgICAgICAgIGE9R0coYSxiLGMsZCx4W2srOV0sIFMyMSwweDIxRTFDREU2KTsKKyAgICAgICAgICBkPUdHKGQsYSxiLGMseFtrKzE0XSxTMjIsMHhDMzM3MDdENik7CisgICAgICAgICAgYz1HRyhjLGQsYSxiLHhbayszXSwgUzIzLDB4RjRENTBEODcpOworICAgICAgICAgIGI9R0coYixjLGQsYSx4W2srOF0sIFMyNCwweDQ1NUExNEVEKTsKKyAgICAgICAgICBhPUdHKGEsYixjLGQseFtrKzEzXSxTMjEsMHhBOUUzRTkwNSk7CisgICAgICAgICAgZD1HRyhkLGEsYixjLHhbaysyXSwgUzIyLDB4RkNFRkEzRjgpOworICAgICAgICAgIGM9R0coYyxkLGEsYix4W2srN10sIFMyMywweDY3NkYwMkQ5KTsKKyAgICAgICAgICBiPUdHKGIsYyxkLGEseFtrKzEyXSxTMjQsMHg4RDJBNEM4QSk7CisgICAgICAgICAgYT1ISChhLGIsYyxkLHhbays1XSwgUzMxLDB4RkZGQTM5NDIpOworICAgICAgICAgIGQ9SEgoZCxhLGIsYyx4W2srOF0sIFMzMiwweDg3NzFGNjgxKTsKKyAgICAgICAgICBjPUhIKGMsZCxhLGIseFtrKzExXSxTMzMsMHg2RDlENjEyMik7CisgICAgICAgICAgYj1ISChiLGMsZCxhLHhbaysxNF0sUzM0LDB4RkRFNTM4MEMpOworICAgICAgICAgIGE9SEgoYSxiLGMsZCx4W2srMV0sIFMzMSwweEE0QkVFQTQ0KTsKKyAgICAgICAgICBkPUhIKGQsYSxiLGMseFtrKzRdLCBTMzIsMHg0QkRFQ0ZBOSk7CisgICAgICAgICAgYz1ISChjLGQsYSxiLHhbays3XSwgUzMzLDB4RjZCQjRCNjApOworICAgICAgICAgIGI9SEgoYixjLGQsYSx4W2srMTBdLFMzNCwweEJFQkZCQzcwKTsKKyAgICAgICAgICBhPUhIKGEsYixjLGQseFtrKzEzXSxTMzEsMHgyODlCN0VDNik7CisgICAgICAgICAgZD1ISChkLGEsYixjLHhbayswXSwgUzMyLDB4RUFBMTI3RkEpOworICAgICAgICAgIGM9SEgoYyxkLGEsYix4W2srM10sIFMzMywweEQ0RUYzMDg1KTsKKyAgICAgICAgICBiPUhIKGIsYyxkLGEseFtrKzZdLCBTMzQsMHg0ODgxRDA1KTsKKyAgICAgICAgICBhPUhIKGEsYixjLGQseFtrKzldLCBTMzEsMHhEOUQ0RDAzOSk7CisgICAgICAgICAgZD1ISChkLGEsYixjLHhbaysxMl0sUzMyLDB4RTZEQjk5RTUpOworICAgICAgICAgIGM9SEgoYyxkLGEsYix4W2srMTVdLFMzMywweDFGQTI3Q0Y4KTsKKyAgICAgICAgICBiPUhIKGIsYyxkLGEseFtrKzJdLCBTMzQsMHhDNEFDNTY2NSk7CisgICAgICAgICAgYT1JSShhLGIsYyxkLHhbayswXSwgUzQxLDB4RjQyOTIyNDQpOworICAgICAgICAgIGQ9SUkoZCxhLGIsYyx4W2srN10sIFM0MiwweDQzMkFGRjk3KTsKKyAgICAgICAgICBjPUlJKGMsZCxhLGIseFtrKzE0XSxTNDMsMHhBQjk0MjNBNyk7CisgICAgICAgICAgYj1JSShiLGMsZCxhLHhbays1XSwgUzQ0LDB4RkM5M0EwMzkpOworICAgICAgICAgIGE9SUkoYSxiLGMsZCx4W2srMTJdLFM0MSwweDY1NUI1OUMzKTsKKyAgICAgICAgICBkPUlJKGQsYSxiLGMseFtrKzNdLCBTNDIsMHg4RjBDQ0M5Mik7CisgICAgICAgICAgYz1JSShjLGQsYSxiLHhbaysxMF0sUzQzLDB4RkZFRkY0N0QpOworICAgICAgICAgIGI9SUkoYixjLGQsYSx4W2srMV0sIFM0NCwweDg1ODQ1REQxKTsKKyAgICAgICAgICBhPUlJKGEsYixjLGQseFtrKzhdLCBTNDEsMHg2RkE4N0U0Rik7CisgICAgICAgICAgZD1JSShkLGEsYixjLHhbaysxNV0sUzQyLDB4RkUyQ0U2RTApOworICAgICAgICAgIGM9SUkoYyxkLGEsYix4W2srNl0sIFM0MywweEEzMDE0MzE0KTsKKyAgICAgICAgICBiPUlJKGIsYyxkLGEseFtrKzEzXSxTNDQsMHg0RTA4MTFBMSk7CisgICAgICAgICAgYT1JSShhLGIsYyxkLHhbays0XSwgUzQxLDB4Rjc1MzdFODIpOworICAgICAgICAgIGQ9SUkoZCxhLGIsYyx4W2srMTFdLFM0MiwweEJEM0FGMjM1KTsKKyAgICAgICAgICBjPUlJKGMsZCxhLGIseFtrKzJdLCBTNDMsMHgyQUQ3RDJCQik7CisgICAgICAgICAgYj1JSShiLGMsZCxhLHhbays5XSwgUzQ0LDB4RUI4NkQzOTEpOworICAgICAgICAgIGE9QWRkVW5zaWduZWQoYSxBQSk7CisgICAgICAgICAgYj1BZGRVbnNpZ25lZChiLEJCKTsKKyAgICAgICAgICBjPUFkZFVuc2lnbmVkKGMsQ0MpOworICAgICAgICAgIGQ9QWRkVW5zaWduZWQoZCxERCk7CisgICAgICAgIH0KKyAgICAgIAorICAgICAgICB2YXIgdGVtcCA9IFdvcmRUb0hleChhKStXb3JkVG9IZXgoYikrV29yZFRvSGV4KGMpK1dvcmRUb0hleChkKTsKKyAgICAgIAorICAgICAgICByZXR1cm4gdGVtcC50b0xvd2VyQ2FzZSgpOworICAgICAgfQorICAgIDwvc2NyaXB0PgorICAgIAorICAgIDxoMT5EZW1vIERpc2FibGVkPC9oMT4KKyAgICA8cD5Gb3Igc2VjdXJpdHksIHRvIGVuYWJsZSB0aGUgZGVtbyB5b3UgbmVlZCB0byBzZXQgYSBwYXNzd29yZCwgYSBzaW1wbGUgMiBzdGVwIHByb2Nlc3MuLi48L3A+CisgICAgPHA+Rmlyc3QsIGVudGVyIHlvdXIgY2hvaWNlIG9mIHBhc3N3b3JkOiA8aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InBhc3N3b3JkIiBvbmtleXVwPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29kZScpLnZhbHVlID0gJyZsdDsnKyc/cGhwIHJldHVybiBcJycgKyBNRDUodGhpcy52YWx1ZSkgKyAnXCc7ID8nKycmZ3Q7JzsiIC8+IDwvcD4KKyAgICAKKyAgICA8cD4gQW5kIG5vdywgY3JlYXRlIGEgZmlsZSBhcyBiZWxvdzogPC9wPgorICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOjJweDsiPjxzdHJvbmc+U2F2ZSBBczogPD9waHAgZWNobyBkaXJuYW1lKCBfX0ZJTEVfXyApIC4gJy9wYXNzd29yZC5waHAnID8+PC9zdHJvbmc+PC9wPgorICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iY29kZSIgc3R5bGU9IndpZHRoOjEwMCU7IGJvcmRlcjoxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6M3B4OyBiYWNrZ3JvdW5kLWNvbG9yOiNFRkVGRUY7IiAvPiAgICAKKyAgICAKKyAgICA8cD4gT25jZSB5b3UgaGF2ZSBjcmVhdGVkL3VwbG9hZGVkIHRoZSBmaWxlLCByZWxvYWQgdGhlIHBhZ2UgYW5kIHlvdSBzaG91bGQgYmUgcHJvbXB0ZWQgZm9yIHRoZSBwYXNzd29yZC48L3A+CisgICAgPD9waHAKKyAgICBleGl0OworICB9CisgIGVsc2UKKyAgeworICAgIHNlc3Npb25fc3RhcnQoKTsKKyAgICBpZighaXNzZXQoJF9TRVNTSU9OW19fRklMRV9fIC4nOkF1dGhlZCddKSkKKyAgICB7CisgICAgICBpZihpc3NldCgkX1JFUVVFU1RbJ3Bhc3N3b3JkJ10pKQorICAgICAgeworICAgICAgICBpZihtZDUoJF9SRVFVRVNUWydwYXNzd29yZCddKSA9PT0gaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL3Bhc3N3b3JkLnBocCcpKQorICAgICAgICB7CisgICAgICAgICAgJF9TRVNTSU9OW19fRklMRV9fLic6QXV0aGVkJ10gPSBUUlVFOyAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBkaWUoIlBhc3N3b3JkIE5vdCBDb3JyZWN0Iik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgPz4KKyAgICAgICAgPGgxPlBhc3N3b3JkIFJlcXVpcmVkPC9oMT4KKyAgICAgICAgPHA+QWNjZXNzaW5nIHRoaXMgZGVtbyByZXF1aXJlcyB5b3Ugc3BlY2lmeSB5b3VyIFhpbmhhIERlbW8gUGFzc3dvcmQuPC9wPgorICAgICAgICA8cD5JZiB5b3UgaGF2ZSBmb3Jnb3R0ZW4geW91ciBwYXNzd29yZCwgdGhlbiB5b3UgY2FuIGRlbGV0ZSB0aGUgZmlsZSA8P3BocCBlY2hvIGRpcm5hbWUoX19GSUxFX18pIC4gJy9wYXNzd29yZC5waHAnID8+IGFuZCByZWZyZXNoIHRoaXMgcGFnZS48L3A+CisgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCI+CisgICAgICAgIDxwPgorICAgICAgICAgIDxzdHJvbmc+UGFzc3dvcmQ6PC9zdHJvbmc+CisgICAgICAgICAgPGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgLz4KKyAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiAvPgorICAgICAgICA8L3A+ICAKKyAgICAgICAgPC9mb3JtPgorICAgICAgICA8P3BocAorICAgICAgICBleGl0OworICAgICAgfSAgICAgIAorICAgIH0KKyAgfQorPz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy90ZXN0YmVkLnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2V4YW1wbGVzL3Rlc3RiZWQucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZDQ0YTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9leGFtcGxlcy90ZXN0YmVkLnBocApAQCAtMCwwICsxLDE1OSBAQAorPD9waHAgcmVxdWlyZV9vbmNlKCdyZXF1aXJlLXBhc3N3b3JkLnBocCcpOyA/PgorPD9waHAgCisgIHN3aXRjaChAJF9SRVFVRVNUWydEb2NUeXBlJ10pCisgIHsKKyAgICAKKyAgICBjYXNlICdxdWlya3MnOgorICAgICAgYnJlYWs7CisgICAgICAKKyAgIGNhc2UgJ2FsbW9zdCc6CisgICAgICBlY2hvICc8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+JzsKKyAgICAgIGJyZWFrOworICAgIAorICAgIGNhc2UgJ3N0YW5kYXJkcyc6CisgICAgZGVmYXVsdDoKKyAgICAgIGVjaG8gJzwhRE9DVFlQRSBodG1sPic7CisgICAgICBicmVhazsKKyAgICAgIAorICB9Cis/PgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgorPGhlYWQ+CisKKyAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+CisgIDx0aXRsZT5FeGFtcGxlIG9mIFhpbmhhPC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJmaWxlcy9mdWxsX2V4YW1wbGUuY3NzIiAvPgorCisgIDxzY3JpcHQgc3JjPSIuLi9YaW5oYUVhc3kuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgCisgICAgLy8gVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSwgb3B0aW9uYWwuLi4KKyAgICB4aW5oYV9vcHRpb25zID0gCisgICAgeworICAgICAgLy8gU3BlY2lmeSBsYW5ndWFnZSBhbmQgc2tpbgorICAgICAgX2VkaXRvcl9sYW5nOiAgICdlbicsICAgICAgICAgLy8gTGFuZ3VhZ2UgdG8gdXNlCisgICAgICBfZWRpdG9yX3NraW46ICAgJ3NpbHZhJywgICAgICAvLyBOYW1lIG9mIHRoZSBza2luIHRvIHVzZSAoc2VlIHNraW5zIGRpcmVjdG9yeSBmb3IgYXZhaWxhYmxlIHNraW5zKQorICAgICAgCisgICAgICAvLyBTaW1wbHkgYSBDU1Mgc2VsZWN0b3IgdG8gcGljayB0aGUgdGV4dGFyZWEocykgeW91IHdhbnQsIGVnICd0ZXh0YXJlYScgY29udmVydHMgYWxsIHRleHRhcmVhLAorICAgICAgLy8gb3IgdGV4dGFyZWEubXkteGluaGEsdGV4dGFyZWEueW91ci14aW5oYSB3b3VsZCBjb252ZXJ0IG9ubHkgdGhvc2UgdGV4dGFyZWFzIHdpdGggdGhlCisgICAgICAvLyBteS14aW5oYSBvciB5b3VyLXhpbmhhIGNsYXNzZXMgb24gdGhlbQorICAgICAgeGluaGFfZWRpdG9yczogICd0ZXh0YXJlYScsICAgCisKKyAgICAgIC8vIFBsdWdpbnMgY2FuIGJlIG9uZSBvZiB0aGUgc2ltcGxlIHByZS1kZWZpbmVkIHNldHMsIGNvbW1vbiwgbWluaW1hbCBhbmQgbG9hZGVkCisgICAgICAvLyAgIHhpbmhhX3BsdWdpbnM6ICdtaW5pbWFsJworICAgICAgLy8KKyAgICAgIC8vIG9yIHlvdSBjYW4gc3BlY2lmeSB0aGUgcGx1Z2lucyB5b3Ugd2FudCBleGFjdGx5CisgICAgICAvLyAgIHhpbmhhX3BsdWdpbnM6IFsgJ0xpbmtlcicsICdTdHlsaXN0JyBdCisgICAgICAvLworICAgICAgLy8gb3IgeW91IGNhbiBkbyBib3RoIHRvIGFkZCBleHRyYXMgdG8gdGhlIHNldAorICAgICAgLy8gICB4aW5oYV9wYXNzX3RvX3BocF9iYWNrZW5kOiBbJ21pbmltYWwnLCAnTGlua2VyJyBdCisgICAgICB4aW5oYV9wbHVnaW5zOiAgWyAnY29tbW9uJywgJ01vb3Rvb2xzRmlsZU1hbmFnZXInLCAnTGlua2VyJyBdLAorICAgICAgCisgICAgICAvLyBUb29sYmFyIGNhbiBiZSBvbmUgb2YgdGhlIHByZS1kZWZpbmVkIHRvb2xiYXJzLCAnZGVmYXVsdCcsICdtaW5pbWFsJywgJ21pbmltYWwrZm9udHMnCisgICAgICAvLyAgIHhpbmhhX3Rvb2xiYXI6ICdtaW5pbWFsK2ZvbnRzJworICAgICAgLy8KKyAgICAgIC8vIG9yIHlvdSBhbiBzcGVjaWZ5IGEgdG9vbGJhciBzdHJ1Y3R1cmUgY29tcGxldGVseQorICAgICAgLy8gICB4aW5oYV90b29sYmFyOiBbIFsicG9wdXBlZGl0b3IiXSxbInNlcGFyYXRvciIsImJvbGQiLCJpdGFsaWMiLCJ1bmRlcmxpbmUiLCJzdHJpa2V0aHJvdWdoIiwic3VwZXJzY3JpcHQiXSBdCisgICAgLy8gIHhpbmhhX3Rvb2xiYXI6ICAnbWluaW1hbCtmb250cycsCisgICAgICAKKyAgICAgIC8vIFRoaXMgaXMgd2hlcmUgeW91IHNldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHdoaWNoIGFwcGx5IGdsb2JhbGx5CisgICAgICB4aW5oYV9jb25maWc6ICAgICAgICAgICAgZnVuY3Rpb24oeGluaGFfY29uZmlnKSAKKyAgICAgIHsKKyAgICAgICAgeGluaGFfY29uZmlnLkNoYXJhY3Rlck1hcC5tb2RlID0gJ3BhbmVsJzsKKyAgICAgICAgeGluaGFfY29uZmlnLkNvbnRleHRNZW51LmN1c3RvbUhvb2tzID0geyAnYSc6IFsgWydMYWJlbCcsIGZ1bmN0aW9uKCkgeyBhbGVydCgnQWN0aW9uJyk7IH0sICdUb29sdGlwJywgJy94aW5oYS9pbWFnZXMvZWRfY29weS5naWYnIF0gXSB9CisgICAgICAgCisgICAgICAgIC8qCisgICAgICAgICAgLy8gV2UgY2FuIGxvYWQgYW4gZXh0ZXJuYWwgc3R5bGVzaGVldCBsaWtlIHRoaXMgLSBOT1RFIDogWU9VIE1VU1QgR0lWRSBBTiBBQlNPTFVURSBVUkwKKyAgICAgICAgICAvLyAgb3RoZXJ3aXNlIGl0IHdvbid0IHdvcmshCisgICAgICAgICAgeGluaGFfY29uZmlnLnN0eWxpc3RMb2FkU3R5bGVzaGVldChkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoL1teXC9dKlwuaHRtbC8sICdmaWxlcy9zdHlsaXN0LmNzcycpKTsKKworICAgICAgICAgIC8vIE9yIHdlIGNhbiBsb2FkIHN0eWxlcyBkaXJlY3RseQorICAgICAgICAgIHhpbmhhX2NvbmZpZy5zdHlsaXN0TG9hZFN0eWxlcygncC5yZWRfdGV4dCB7IGNvbG9yOnJlZCB9Jyk7CisKKyAgICAgICAgICAvLyBJZiB5b3Ugd2FudCB0byBwcm92aWRlICJmcmllbmRseSIgbmFtZXMgeW91IGNhbiBkbyBzbyBsaWtlCisgICAgICAgICAgLy8gKHlvdSBjYW4gZG8gdGhpcyBmb3Igc3R5bGlzdExvYWRTdHlsZXNoZWV0IGFzIHdlbGwpCisgICAgICAgICAgeGluaGFfY29uZmlnLnN0eWxpc3RMb2FkU3R5bGVzKCdwLnBpbmtfdGV4dCB7IGNvbG9yOnBpbmsgfScsIHsncC5waW5rX3RleHQnIDogJ1ByZXR0eSBQaW5rJ30pOworICAgICAgICovCisKKyAgICAgICAgLy8gQ29uZmlndXJlIHRoZSBGaWxlIE1hbmFnZXIKKyAgICAgICAgd2l0aCAoeGluaGFfY29uZmlnLk1vb3Rvb2xzRmlsZU1hbmFnZXIpCisgICAgICAgIHsgCisgICAgICAgICAgPD9waHAgCisgICAgICAgICAgICByZXF1aXJlX29uY2UoJy4uL2NvbnRyaWIvcGhwLXhpbmhhLnBocCcpOworICAgICAgICAgICAgeGluaGFfcGFzc190b19waHBfYmFja2VuZAorICAgICAgICAgICAgKCAgICAgICAKKyAgICAgICAgICAgICAgYXJyYXkKKyAgICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgICdpbWFnZXNfZGlyJyA9PiBnZXRjd2QoKSAuICcvaW1hZ2VzJywKKyAgICAgICAgICAgICAgICAnaW1hZ2VzX3VybCcgPT4gcHJlZ19yZXBsYWNlKCcvXC9leGFtcGxlcy4qLycsICcnLCAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSkgLiAnL2V4YW1wbGVzL2ltYWdlcycsCisgICAgICAgICAgICAgICAgJ2ltYWdlc19hbGxvd191cGxvYWQnID0+IHRydWUsCisgICAgICAgICAgICAgICAgJ2ltYWdlc19hbGxvd19kZWxldGUnID0+IHRydWUsCisgICAgICAgICAgICAgICAgJ2ltYWdlc19hbGxvd19kb3dubG9hZCcgPT4gdHJ1ZSwKKyAgICAgICAgICAgICAgICAnaW1hZ2VzX3VzZV9oc3BhY2VfdnNwYWNlJyA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAnZmlsZXNfZGlyJyA9PiBnZXRjd2QoKSAuICcvaW1hZ2VzJywKKyAgICAgICAgICAgICAgICAnZmlsZXNfdXJsJyA9PiBwcmVnX3JlcGxhY2UoJy9cL2V4YW1wbGVzLiovJywgJycsICRfU0VSVkVSWydSRVFVRVNUX1VSSSddKSAuICcvZXhhbXBsZXMvaW1hZ2VzJywKKyAgICAgICAgICAgICAgICAnZmlsZXNfYWxsb3dfdXBsb2FkJyA9PiB0cnVlLAorICAgICAgICAgICAgICAgICdtYXhfZmlsZXNfdXBsb2FkX3NpemUnID0+ICc0TScsCisgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICkKKyAgICAgICAgICA/PgorICAgICAgICB9CisgICAgICAKKyAgICAgICAgLy8gQ29uZmlndXJlIHRoZSBMaW5rZXIKKyAgICAgICAgd2l0aCAoeGluaGFfY29uZmlnLkxpbmtlcikKKyAgICAgICAgeyAKKyAgICAgICAgICA8P3BocCAKKyAgICAgICAgICAgIHJlcXVpcmVfb25jZSgnLi4vY29udHJpYi9waHAteGluaGEucGhwJyk7CisgICAgICAgICAgICB4aW5oYV9wYXNzX3RvX3BocF9iYWNrZW5kCisgICAgICAgICAgICAoICAgICAgIAorICAgICAgICAgICAgICBhcnJheQorICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgJ2RpcicgPT4gZ2V0Y3dkKCksCisgICAgICAgICAgICAgICAgJ3VybCcgPT4gJy9leGFtcGxlcycsICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICApCisgICAgICAgICAgICApCisgICAgICAgICAgPz4KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgIH0KKyAgICB9CisKKyAgPC9zY3JpcHQ+CisgIAorPC9oZWFkPgorCis8Ym9keT4KKyAgCisgIDxmb3JtIGFjdGlvbj0iamF2YXNjcmlwdDp2b2lkKDApOyIgaWQ9ImVkaXRvcnNfaGVyZSIgb25zdWJtaXQ9ImFsZXJ0KHRoaXMubXlUZXh0QXJlYS52YWx1ZSk7Ij4KKyAgICAgPGRpdj4KKyAgICA8dGV4dGFyZWEgaWQ9Im15VGV4dEFyZWEiIG5hbWU9Im15VGV4dEFyZWEiIHN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDozMjBweDsiPgorJmx0O3AmZ3Q7TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuCitBbGlxdWFtIGV0IHRlbGx1cyB2aXRhZSBqdXN0byB2YXJpdXMgcGxhY2VyYXQuIFN1c3BlbmRpc3NlIGlhY3VsaXMKK3ZlbGl0IHNlbXBlciBkb2xvci4gRG9uZWMgZ3JhdmlkYSB0aW5jaWR1bnQgbWkuIEN1cmFiaXR1ciB0cmlzdGlxdWUKK2FudGUgZWxlbWVudHVtIHR1cnBpcy4gQWxpcXVhbSBuaXNsLiBOdWxsYSBwb3N1ZXJlIG5lcXVlIG5vbgordGVsbHVzLiBNb3JiaSB2ZWwgbmliaC4gQ3VtIHNvY2lpcyBuYXRvcXVlIHBlbmF0aWJ1cyBldCBtYWduaXMgZGlzCitwYXJ0dXJpZW50IG1vbnRlcywgbmFzY2V0dXIgcmlkaWN1bHVzIG11cy4gTmFtIG5lYyB3aXNpLiBJbiB3aXNpLgorQ3VyYWJpdHVyIHBoYXJldHJhIGJpYmVuZHVtIGxlY3R1cy4mbHQ7L3AmZ3Q7Cis8YSBocmVmPSIuLi8uLi9mb28uaHRtbCI+Li4vLi4vZm9vLmh0bWw8L2E+PGJyLz4KKzxhIGhyZWY9Ii4vZm9vLmh0bWwiPi4vZm9vLmh0bWw8L2E+PGJyLz4KKzxhIGhyZWY9ImZvby9iYXIvLi4vZm9vLmh0bWwiPmZvby9iYXIvLi4vZm9vLmh0bWw8L2E+PGJyLz4KKzxhIGhyZWY9Ii9mb28vYmFyLy4uL2Zvby5odG1sIj4vZm9vL2Jhci8uLi9mb28uaHRtbDwvYT48YnIvPgorPGEgaHJlZj0iL2Zvby8vYmFyL2Zvby5odG1sIj4vZm9vLy9iYXIvZm9vLmh0bWw8L2E+PGJyLz4KKzxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2Zvby5odG1sIj4uLi8uLi8uLi8uLi8uLi9mb28uaHRtbDwvYT48YnIvPgorPGEgaHJlZj0iaHR0cDovL2Zvby9mb28uaHRtbCI+aHR0cDovL2Zvby9mb28uaHRtbDwvYT48YnIvPgorCis8L3RleHRhcmVhPgorICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIC8+IDxpbnB1dCB0eXBlPSJyZXNldCIgLz4KKyAgICA8L2Rpdj4KKyAgPC9mb3JtPgorCisgIDx1bD4KKyAgICA8bGk+PGEgaHJlZj0iPD9waHAgZWNobyBiYXNlbmFtZShfX0ZJTEVfXykgPz4/RG9jVHlwZT1zdGFuZGFyZHMiPlRlc3QgU3RhbmRhcmRzIE1vZGU8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iPD9waHAgZWNobyBiYXNlbmFtZShfX0ZJTEVfXykgPz4/RG9jVHlwZT1hbG1vc3QiPlRlc3QgQWxtb3N0IFN0YW5kYXJkcyBNb2RlPC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Ijw/cGhwIGVjaG8gYmFzZW5hbWUoX19GSUxFX18pID8+P0RvY1R5cGU9cXVpcmtzIj5UZXN0IFF1aXJrcyBNb2RlPC9hPjwvbGk+CisgIDwvdWw+CisgIAorICA8IS0tIFRoaXMgc2NyaXB0IGlzIHVzZWQgdG8gc2hvdyB0aGUgcmVuZGVyaW5nIG1vZGUgKFF1aXJrcywgU3RhbmRhcmRzLCBBbG1vc3QgU3RhbmRhcmRzKSAtLT4gCisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InJlbmRlci1tb2RlLWRldmVsb3Blci1oZWxwLmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2h0bWxhcmVhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaHRtbGFyZWEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFmN2RlOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2h0bWxhcmVhLmpzCkBAIC0wLDAgKzEsMjMgQEAKKyAKKyAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTpub1RhYnM9dHJ1ZTp0YWJTaXplPTI6aW5kZW50U2l6ZT0yOi0tCisgICAgLS0gIENPTVBBVEFCSUxJVFkgRklMRQorICAgIC0tICBodG1sYXJlYS5qcyBpcyBub3cgWGluaGFDb3JlLmpzICAKKyAgICAtLQorICAgIC0tICAkSGVhZFVSTDpodHRwOi8vc3ZuLnhpbmhhLndlYmZhY3Rpb25hbC5jb20vdHJ1bmsvaHRtbGFyZWEuanMgJAorICAgIC0tICAkTGFzdENoYW5nZWREYXRlOjIwMDctMDEtMTUgMTU6Mjg6NTcgKzAxMDAgKE1vLCAxNSBKYW4gMjAwNykgJAorICAgIC0tICAkTGFzdENoYW5nZWRSZXZpc2lvbjo2NTkgJAorICAgIC0tICAkTGFzdENoYW5nZWRCeTpnb2dvICQKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgCitpZiAoIHR5cGVvZiBfZWRpdG9yX3VybCA9PSAic3RyaW5nIiApCit7CisgIC8vIExlYXZlIGV4YWN0bHkgb25lIGJhY2tzbGFzaCBhdCB0aGUgZW5kIG9mIF9lZGl0b3JfdXJsCisgIF9lZGl0b3JfdXJsID0gX2VkaXRvcl91cmwucmVwbGFjZSgvXHgyZiokLywgJy8nKTsKK30KK2Vsc2UKK3sKKyAgYWxlcnQoIldBUk5JTkc6IF9lZGl0b3JfdXJsIGlzIG5vdCBzZXQhICBZb3Ugc2hvdWxkIHNldCB0aGlzIHZhcmlhYmxlIHRvIHRoZSBlZGl0b3IgZmlsZXMgcGF0aDsgaXQgc2hvdWxkIHByZWZlcmFibHkgYmUgYW4gYWJzb2x1dGUgcGF0aCwgbGlrZSBpbiAnL2h0bWxhcmVhLycsIGJ1dCBpdCBjYW4gYmUgcmVsYXRpdmUgaWYgeW91IHByZWZlci4gIEZ1cnRoZXIgd2Ugd2lsbCB0cnkgdG8gbG9hZCB0aGUgZWRpdG9yIGZpbGVzIGNvcnJlY3RseSBidXQgd2UnbGwgcHJvYmFibHkgZmFpbC4iKTsKKyAgX2VkaXRvcl91cmwgPSAnJzsKK30KKworZG9jdW1lbnQud3JpdGUoJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicrX2VkaXRvcl91cmwrJ1hpbmhhQ29yZS5qcyI+PC9zY3JpcHQ+Jyk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9kZS9ib2xkLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ljb25zZXRzL0NsYXNzaWMvZGUvYm9sZC5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2RlL2JvbGQuZ2lmCmNvcHkgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaWNvbnNldHMvQ2xhc3NpYy9kZS9ib2xkLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2RlL2l0YWxpYy5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pY29uc2V0cy9DbGFzc2ljL2RlL2l0YWxpYy5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2RlL2l0YWxpYy5naWYKY29weSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pY29uc2V0cy9DbGFzc2ljL2RlL2l0YWxpYy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9kZS91bmRlcmxpbmUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaWNvbnNldHMvQ2xhc3NpYy9kZS91bmRlcmxpbmUuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9kZS91bmRlcmxpbmUuZ2lmCmNvcHkgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaWNvbnNldHMvQ2xhc3NpYy9kZS91bmRlcmxpbmUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfYnV0dG9uc19tYWluLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ljb25zZXRzL0NsYXNzaWMvZWRfYnV0dG9uc19tYWluLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfYnV0dG9uc19tYWluLmdpZgpjb3B5IHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ljb25zZXRzL0NsYXNzaWMvZWRfYnV0dG9uc19tYWluLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2NoYXJtYXAuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaWNvbnNldHMvQ2xhc3NpYy9lZF9jaGFybWFwLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfY2hhcm1hcC5naWYKY29weSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pY29uc2V0cy9DbGFzc2ljL2VkX2NoYXJtYXAuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfc2VsZWN0YWxsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ljb25zZXRzL0NsYXNzaWMvZWRfc2VsZWN0YWxsLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfc2VsZWN0YWxsLmdpZgpjb3B5IHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ljb25zZXRzL0NsYXNzaWMvZWRfc2VsZWN0YWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2ZyL2JvbGQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaWNvbnNldHMvQ2xhc3NpYy9mci9ib2xkLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZnIvYm9sZC5naWYKY29weSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pY29uc2V0cy9DbGFzc2ljL2ZyL2JvbGQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZnIvc3RyaWtldGhyb3VnaC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pY29uc2V0cy9DbGFzc2ljL2ZyL3N0cmlrZXRocm91Z2guZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9mci9zdHJpa2V0aHJvdWdoLmdpZgpjb3B5IHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ljb25zZXRzL0NsYXNzaWMvZnIvc3RyaWtldGhyb3VnaC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9mci91bmRlcmxpbmUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaWNvbnNldHMvQ2xhc3NpYy9mci91bmRlcmxpbmUuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9mci91bmRlcmxpbmUuZ2lmCmNvcHkgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaWNvbnNldHMvQ2xhc3NpYy9mci91bmRlcmxpbmUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ljb25zZXRzL0NsYXNzaWMvaWNvbnNldC54bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pY29uc2V0cy9DbGFzc2ljL2ljb25zZXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYjliOGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pY29uc2V0cy9DbGFzc2ljL2ljb25zZXQueG1sCkBAIC0wLDAgKzEsMjYzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPGljb25zZXQ+Cis8IS0tVE9ETzogQWRkIG1ldGFzIC0tPgorICA8aWNvbnM+CisgICAgPGljb24gaWQ9ImJvbGQiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ2xhc3NpYy9lZF9idXR0b25zX21haW4uZ2lmPC9wYXRoPgorICAgICAgICA8eD4zPC94PgorICAgICAgICA8eT4yPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgICAgPGRlIHR5cGU9InN0cmluZyI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NsYXNzaWMvZGUvYm9sZC5naWY8L3BhdGg+CisgICAgICA8L2RlPgorICAgICAgPGZyIHR5cGU9InN0cmluZyI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NsYXNzaWMvZnIvYm9sZC5naWY8L3BhdGg+CisgICAgICA8L2ZyPgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0iaXRhbGljIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NsYXNzaWMvZWRfYnV0dG9uc19tYWluLmdpZjwvcGF0aD4KKyAgICAgICAgPHg+MjwveD4KKyAgICAgICAgPHk+MjwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICAgIDxkZSB0eXBlPSJzdHJpbmciPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DbGFzc2ljL2RlL2l0YWxpYy5naWY8L3BhdGg+CisgICAgICA8L2RlPgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0idW5kZXJsaW5lIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NsYXNzaWMvZWRfYnV0dG9uc19tYWluLmdpZjwvcGF0aD4KKyAgICAgICAgPHg+MjwveD4KKyAgICAgICAgPHk+MDwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICAgIDxmciB0eXBlPSJzdHJpbmciPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DbGFzc2ljL2ZyL3VuZGVybGluZS5naWY8L3BhdGg+CisgICAgICA8L2ZyPgorICAgICAgPGRlIHR5cGU9InN0cmluZyI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NsYXNzaWMvZGUvdW5kZXJsaW5lLmdpZjwvcGF0aD4KKyAgICAgIDwvZGU+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJzdHJpa2V0aHJvdWdoIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NsYXNzaWMvZWRfYnV0dG9uc19tYWluLmdpZjwvcGF0aD4KKyAgICAgICAgPHg+MzwveD4KKyAgICAgICAgPHk+MDwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICAgIDxmciB0eXBlPSJzdHJpbmciPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DbGFzc2ljL2ZyL3N0cmlrZXRocm91Z2guZ2lmPC9wYXRoPgorICAgICAgPC9mcj4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9InN1YnNjcmlwdCI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DbGFzc2ljL2VkX2J1dHRvbnNfbWFpbi5naWY8L3BhdGg+CisgICAgICAgIDx4PjM8L3g+CisgICAgICAgIDx5PjE8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJzdXBlcnNjcmlwdCI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DbGFzc2ljL2VkX2J1dHRvbnNfbWFpbi5naWY8L3BhdGg+CisgICAgICAgIDx4PjI8L3g+CisgICAgICAgIDx5PjE8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJ1bmRvIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NsYXNzaWMvZWRfYnV0dG9uc19tYWluLmdpZjwvcGF0aD4KKyAgICAgICAgPHg+NDwveD4KKyAgICAgICAgPHk+MjwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9InJlZG8iPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ2xhc3NpYy9lZF9idXR0b25zX21haW4uZ2lmPC9wYXRoPgorICAgICAgICA8eD41PC94PgorICAgICAgICA8eT4yPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0iY3V0Ij4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NsYXNzaWMvZWRfYnV0dG9uc19tYWluLmdpZjwvcGF0aD4KKyAgICAgICAgPHg+NTwveD4KKyAgICAgICAgPHk+MDwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9ImNvcHkiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ2xhc3NpYy9lZF9idXR0b25zX21haW4uZ2lmPC9wYXRoPgorICAgICAgICA8eD40PC94PgorICAgICAgICA8eT4wPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0icGFzdGUiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ2xhc3NpYy9lZF9idXR0b25zX21haW4uZ2lmPC9wYXRoPgorICAgICAgICA8eD40PC94PgorICAgICAgICA8eT4xPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0iZm9yZWNvbG9yIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NsYXNzaWMvZWRfYnV0dG9uc19tYWluLmdpZjwvcGF0aD4KKyAgICAgICAgPHg+MzwveD4KKyAgICAgICAgPHk+MzwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9ImhpbGl0ZWNvbG9yIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NsYXNzaWMvZWRfYnV0dG9uc19tYWluLmdpZjwvcGF0aD4KKyAgICAgICAgPHg+MjwveD4KKyAgICAgICAgPHk+MzwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9ImluZGVudCI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DbGFzc2ljL2VkX2J1dHRvbnNfbWFpbi5naWY8L3BhdGg+CisgICAgICAgIDx4PjA8L3g+CisgICAgICAgIDx5PjI8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJvdXRkZW50Ij4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NsYXNzaWMvZWRfYnV0dG9uc19tYWluLmdpZjwvcGF0aD4KKyAgICAgICAgPHg+MTwveD4KKyAgICAgICAgPHk+MjwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9Imluc2VydGltYWdlIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NsYXNzaWMvZWRfYnV0dG9uc19tYWluLmdpZjwvcGF0aD4KKyAgICAgICAgPHg+NjwveD4KKyAgICAgICAgPHk+MzwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9Imluc2VydG9yZGVyZWRsaXN0Ij4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NsYXNzaWMvZWRfYnV0dG9uc19tYWluLmdpZjwvcGF0aD4KKyAgICAgICAgPHg+MDwveD4KKyAgICAgICAgPHk+MzwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9Imluc2VydHVub3JkZXJlZGxpc3QiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ2xhc3NpYy9lZF9idXR0b25zX21haW4uZ2lmPC9wYXRoPgorICAgICAgICA8eD4xPC94PgorICAgICAgICA8eT4zPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0ianVzdGlmeWxlZnQiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ2xhc3NpYy9lZF9idXR0b25zX21haW4uZ2lmPC9wYXRoPgorICAgICAgICA8eD4wPC94PgorICAgICAgICA8eT4wPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0ianVzdGlmeWZ1bGwiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ2xhc3NpYy9lZF9idXR0b25zX21haW4uZ2lmPC9wYXRoPgorICAgICAgICA8eD4wPC94PgorICAgICAgICA8eT4xPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0ianVzdGlmeWNlbnRlciI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DbGFzc2ljL2VkX2J1dHRvbnNfbWFpbi5naWY8L3BhdGg+CisgICAgICAgIDx4PjE8L3g+CisgICAgICAgIDx5PjE8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJqdXN0aWZ5cmlnaHQiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ2xhc3NpYy9lZF9idXR0b25zX21haW4uZ2lmPC9wYXRoPgorICAgICAgICA8eD4xPC94PgorICAgICAgICA8eT4wPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0iY3JlYXRlbGluayI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DbGFzc2ljL2VkX2J1dHRvbnNfbWFpbi5naWY8L3BhdGg+CisgICAgICAgIDx4PjY8L3g+CisgICAgICAgIDx5PjE8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJsZWZ0dG9yaWdodCI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DbGFzc2ljL2VkX2J1dHRvbnNfbWFpbi5naWY8L3BhdGg+CisgICAgICAgIDx4PjA8L3g+CisgICAgICAgIDx5PjQ8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJyaWdodHRvbGVmdCI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DbGFzc2ljL2VkX2J1dHRvbnNfbWFpbi5naWY8L3BhdGg+CisgICAgICAgIDx4PjE8L3g+CisgICAgICAgIDx5PjQ8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJwcmludCI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DbGFzc2ljL2VkX2J1dHRvbnNfbWFpbi5naWY8L3BhdGg+CisgICAgICAgIDx4Pjg8L3g+CisgICAgICAgIDx5PjE8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJzYXZlYXMiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ2xhc3NpYy9lZF9idXR0b25zX21haW4uZ2lmPC9wYXRoPgorICAgICAgICA8eD45PC94PgorICAgICAgICA8eT4xPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0icmVtb3ZlZm9ybWF0Ij4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NsYXNzaWMvZWRfYnV0dG9uc19tYWluLmdpZjwvcGF0aD4KKyAgICAgICAgPHg+NDwveD4KKyAgICAgICAgPHk+NDwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9ImFib3V0Ij4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NsYXNzaWMvZWRfYnV0dG9uc19tYWluLmdpZjwvcGF0aD4KKyAgICAgICAgPHg+ODwveD4KKyAgICAgICAgPHk+MjwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9InNob3doZWxwIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NsYXNzaWMvZWRfYnV0dG9uc19tYWluLmdpZjwvcGF0aD4KKyAgICAgICAgPHg+OTwveD4KKyAgICAgICAgPHk+MjwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9ImZ1bGxzY3JlZW4iPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ2xhc3NpYy9lZF9idXR0b25zX21haW4uZ2lmPC9wYXRoPgorICAgICAgICA8eD44PC94PgorICAgICAgICA8eT4wPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0iZnVsbHNjcmVlbnJlc3RvcmUiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ2xhc3NpYy9lZF9idXR0b25zX21haW4uZ2lmPC9wYXRoPgorICAgICAgICA8eD45PC94PgorICAgICAgICA8eT4wPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0ic2VsZWN0YWxsIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9InNpbXBsZSI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NsYXNzaWMvZWRfc2VsZWN0YWxsLmdpZjwvcGF0aD4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9Imluc2VydGNoYXJhY3RlciI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJzaW1wbGUiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DbGFzc2ljL2VkX2NoYXJtYXAuZ2lmPC9wYXRoPgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0ic21hcnRyZXBsYWNlIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9InNpbXBsZSI+CisgICAgICAgIDxwYXRoPnBsdWdpbnMvU21hcnRSZXBsYWNlL2ltZy5naWY8L3BhdGg+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICA8L2ljb25zPgorPC9pY29uc2V0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ljb25zZXRzL0NyeXN0YWwvTElDRU5TRSBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ljb25zZXRzL0NyeXN0YWwvTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTJkY2E0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaWNvbnNldHMvQ3J5c3RhbC9MSUNFTlNFCkBAIC0wLDAgKzEsMTIxIEBACitMaWNlbnNlCisKK1RoZSBDcnlzdGFsIFByb2plY3QgYXJlIHJlbGVhc2VkIHVuZGVyIExHUEwuCisKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisgICAwLgorCisgICAgICBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHNvZnR3YXJlIGxpYnJhcnkgb3Igb3RoZXIgcHJvZ3JhbSB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb3Igb3RoZXIgYXV0aG9yaXplZCBwYXJ0eSBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChhbHNvIGNhbGxlZCAidGhpcyBMaWNlbnNlIikuIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgICAgICBBICJsaWJyYXJ5IiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygc29mdHdhcmUgZnVuY3Rpb25zIGFuZC9vciBkYXRhIHByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcyAod2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgorCisgICAgICBUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yayB3aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gQSAid29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikKKworICAgICAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgICAgICBBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIFRoZSBhY3Qgb2YgcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbSBzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3Igd3JpdGluZyBpdCkuIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzIGFuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgorICAgMS4KKworICAgICAgWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzIGNvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIExpYnJhcnkuCisKKyAgICAgIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorICAgMi4KKworICAgICAgWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbiBvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorICAgICAgICAgMS4gVGhlIG1vZGlmaWVkIHdvcmsgbXVzdCBpdHNlbGYgYmUgYSBzb2Z0d2FyZSBsaWJyYXJ5LgorICAgICAgICAgMi4gWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisgICAgICAgICAzLiBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisgICAgICAgICA0LiBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEgdGFibGUgb2YgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5IGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LCBpbiB0aGUgZXZlbnQgYW4gYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHN1Y2ggZnVuY3Rpb24gb3IgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgorCisgICAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcyBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlIGFwcGxpY2F0aW9uLiBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLikKKworICAgICAgVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuIElmIGlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIExpYnJhcnksIGFuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbiB0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlIHNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gQnV0IHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUgZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCisgICAgICBUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QgeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvIGV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvciBjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgorCisgICAgICBJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBMaWJyYXJ5IHdpdGggdGhlIExpYnJhcnkgKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlciB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorICAgMy4KKworICAgICAgWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuIFRvIGRvIHRoaXMsIHlvdSBtdXN0IGFsdGVyIGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSwgc28gdGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBpbnN0ZWFkIG9mIHRvIHRoaXMgTGljZW5zZS4gKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeSB0aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4gdGhlc2Ugbm90aWNlcy4KKworICAgICAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvciB0aGF0IGNvcHksIHNvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIGFsbCBzdWJzZXF1ZW50IGNvcGllcyBhbmQgZGVyaXZhdGl2ZSB3b3JrcyBtYWRlIGZyb20gdGhhdCBjb3B5LgorCisgICAgICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBjb3B5IHBhcnQgb2YgdGhlIGNvZGUgb2YgdGhlIExpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LgorICAgNC4KKworICAgICAgWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IgZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICAgICAgSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvIGRpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKyAgIDUuCisKKyAgICAgIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlIExpYnJhcnksIGJ1dCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIExpYnJhcnkgYnkgYmVpbmcgY29tcGlsZWQgb3IgbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuIFN1Y2ggYSB3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kIHRoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisgICAgICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IGNyZWF0ZXMgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSAoYmVjYXVzZSBpdCBjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLiBTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KKworICAgICAgV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUgdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LiBXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZSBsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gVGhlIHRocmVzaG9sZCBmb3IgdGhpcyB0byBiZSB0cnVlIGlzIG5vdCBwcmVjaXNlbHkgZGVmaW5lZCBieSBsYXcuCisKKyAgICAgIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhIHN0cnVjdHVyZSBsYXlvdXRzIGFuZCBhY2Nlc3NvcnMsIGFuZCBzbWFsbCBtYWNyb3MgYW5kIHNtYWxsIGlubGluZSBmdW5jdGlvbnMgKHRlbiBsaW5lcyBvciBsZXNzIGluIGxlbmd0aCksIHRoZW4gdGhlIHVzZSBvZiB0aGUgb2JqZWN0IGZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUgd29yay4gKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisgICAgICBPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heSBkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4gQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KKyAgIDYuCisKKyAgICAgIEFzIGFuIGV4Y2VwdGlvbiB0byB0aGUgU2VjdGlvbnMgYWJvdmUsIHlvdSBtYXkgYWxzbyBjb21iaW5lIG9yIGxpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhIHdvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBwZXJtaXQgbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlIGVuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgorCisgICAgICBZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUgTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4gWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuIElmIHRoZSB3b3JrIGR1cmluZyBleGVjdXRpb24gZGlzcGxheXMgY29weXJpZ2h0IG5vdGljZXMsIHlvdSBtdXN0IGluY2x1ZGUgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIHRoZW0sIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UgZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gQWxzbywgeW91IG11c3QgZG8gb25lIG9mIHRoZXNlIHRoaW5nczoKKyAgICAgICAgIDEuIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgZm9yIHRoZSBMaWJyYXJ5IGluY2x1ZGluZyB3aGF0ZXZlciBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5LCB3aXRoIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQgZXhlY3V0YWJsZSBjb250YWluaW5nIHRoZSBtb2RpZmllZCBMaWJyYXJ5LiAoSXQgaXMgdW5kZXJzdG9vZCB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24gdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pIC4KKyAgICAgICAgIDIuIFVzZSBhIHN1aXRhYmxlIHNoYXJlZCBsaWJyYXJ5IG1lY2hhbmlzbSBmb3IgbGlua2luZyB3aXRoIHRoZSBMaWJyYXJ5LiBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhIGNvcHkgb2YgdGhlIGxpYnJhcnkgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIgc3lzdGVtLCByYXRoZXIgdGhhbiBjb3B5aW5nIGxpYnJhcnkgZnVuY3Rpb25zIGludG8gdGhlIGV4ZWN1dGFibGUsIGFuZCAoMikgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZiB0aGUgdXNlciBpbnN0YWxscyBvbmUsIGFzIGxvbmcgYXMgdGhlIG1vZGlmaWVkIHZlcnNpb24gaXMgaW50ZXJmYWNlLWNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiB0aGF0IHRoZSB3b3JrIHdhcyBtYWRlIHdpdGguCisgICAgICAgICAzLiBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycywgdG8gZ2l2ZSB0aGUgc2FtZSB1c2VyIHRoZSBtYXRlcmlhbHMgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCisgICAgICAgICA0LiBJZiBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgYWJvdmUgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorICAgICAgICAgNS4gVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlIG1hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LgorCisgICAgICBGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IgcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworICAgICAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UgcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseSBhY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uIFN1Y2ggYSBjb250cmFkaWN0aW9uIG1lYW5zIHlvdSBjYW5ub3QgdXNlIGJvdGggdGhlbSBhbmQgdGhlIExpYnJhcnkgdG9nZXRoZXIgaW4gYW4gZXhlY3V0YWJsZSB0aGF0IHlvdSBkaXN0cmlidXRlLgorICAgNy4KKworICAgICAgWW91IG1heSBwbGFjZSBsaWJyYXJ5IGZhY2lsaXRpZXMgdGhhdCBhcmUgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgc3VjaCBhIGNvbWJpbmVkIGxpYnJhcnksIHByb3ZpZGVkIHRoYXQgdGhlIHNlcGFyYXRlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UgcGVybWl0dGVkLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gdGhlc2UgdHdvIHRoaW5nczoKKyAgICAgICAgIDEuCisKKyAgICAgICAgICAgIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcy4gVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgU2VjdGlvbnMgYWJvdmUuCisgICAgICAgICAyLgorCisgICAgICAgICAgICBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCB0aGUgY29tYmluZWQgbGlicmFyeSBvZiB0aGUgZmFjdCB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZyB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisgICA4LgorCisgICAgICBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorICAgOS4KKworICAgICAgWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90IHNpZ25lZCBpdC4gSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZCBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorICAxMC4KKworICAgICAgRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5IHN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgorICAxMS4KKworICAgICAgSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLCBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdCBkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkgYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KKworICAgICAgSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHksIGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKKyAgICAgIEl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkgcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkgc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcyBpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuIE1hbnkgcGVvcGxlIGhhdmUgbWFkZSBnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHRocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0IHN5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcgdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90IGltcG9zZSB0aGF0IGNob2ljZS4KKworICAgICAgVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvIGJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorICAxMi4KKworICAgICAgSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4gY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisgIDEzLgorCisgICAgICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCisgICAgICBFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIExpYnJhcnkgc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEgbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAgMTQuCisKKyAgICAgIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZSBwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlc2UsIHdyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworTm8gV2FycmFudHkKKworICAxNS4KKworICAgICAgQmVjYXVzZSB0aGUgbGlicmFyeSBpcyBsaWNlbnNlZCBmcmVlIG9mIGNoYXJnZSwgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBsaWJyYXJ5LCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdy4gRXhjZXB0IHdoZW4gb3RoZXJ3aXNlIHN0YXRlZCBpbiB3cml0aW5nIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBhbmQvb3Igb3RoZXIgcGFydGllcyBwcm92aWRlIHRoZSBsaWJyYXJ5ICJhcyBpcyIgd2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZCwgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBsaWJyYXJ5IGlzIHdpdGggeW91LiBTaG91bGQgdGhlIGxpYnJhcnkgcHJvdmUgZGVmZWN0aXZlLCB5b3UgYXNzdW1lIHRoZSBjb3N0IG9mIGFsbCBuZWNlc3Nhcnkgc2VydmljaW5nLCByZXBhaXIgb3IgY29ycmVjdGlvbi4KKyAgMTYuCisKKyAgICAgIEluIG5vIGV2ZW50IHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyB3aWxsIGFueSBjb3B5cmlnaHQgaG9sZGVyLCBvciBhbnkgb3RoZXIgcGFydHkgd2hvIG1heSBtb2RpZnkgYW5kL29yIHJlZGlzdHJpYnV0ZSB0aGUgbGlicmFyeSBhcyBwZXJtaXR0ZWQgYWJvdmUsIGJlIGxpYWJsZSB0byB5b3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZSBsaWJyYXJ5IChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGxvc3Mgb2YgZGF0YSBvciBkYXRhIGJlaW5nIHJlbmRlcmVkIGluYWNjdXJhdGUgb3IgbG9zc2VzIHN1c3RhaW5lZCBieSB5b3Ugb3IgdGhpcmQgcGFydGllcyBvciBhIGZhaWx1cmUgb2YgdGhlIGxpYnJhcnkgdG8gb3BlcmF0ZSB3aXRoIGFueSBvdGhlciBzb2Z0d2FyZSksIGV2ZW4gaWYgc3VjaCBob2xkZXIgb3Igb3RoZXIgcGFydHkgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pY29uc2V0cy9DcnlzdGFsL1JFQURNRSBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ljb25zZXRzL0NyeXN0YWwvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NWViZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pY29uc2V0cy9DcnlzdGFsL1JFQURNRQpAQCAtMCwwICsxLDMgQEAKK1RoZXNlIGljb25zIGFyZSBmcm9tIGV2ZXJhbGRvLmNvbSwgaW4gcGFydGljdWxhciBmcm9tIHRoZSBPcGVuIE9mZmljZSBDcnlzdGFsIEljb25zIHNldAorCitUaGUgQ3J5c3RhbCBQcm9qZWN0IGFyZSByZWxlYXNlZCB1bmRlciBMR1BMLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ljb25zZXRzL0NyeXN0YWwvZWRfYnV0dG9uc19tYWluLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ljb25zZXRzL0NyeXN0YWwvZWRfYnV0dG9uc19tYWluLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGJkMDU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaWNvbnNldHMvQ3J5c3RhbC9lZF9idXR0b25zX21haW4ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ljb25zZXRzL0NyeXN0YWwvaWNvbnNldC54bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pY29uc2V0cy9DcnlzdGFsL2ljb25zZXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MzNkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pY29uc2V0cy9DcnlzdGFsL2ljb25zZXQueG1sCkBAIC0wLDAgKzEsMjM0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPGljb25zZXQ+Cis8IS0tVE9ETzogQWRkIG1ldGFzIC0tPgorICA8aWNvbnM+CisgICAgPGljb24gaWQ9ImJvbGQiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ3J5c3RhbC9lZF9idXR0b25zX21haW4ucG5nPC9wYXRoPgorICAgICAgICA8eD4zPC94PgorICAgICAgICA8eT4yPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgICAgPCEtLTxkZSB0eXBlPSJzdHJpbmciPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DcnlzdGFsL2RlL2JvbGRfZGUuZ2lmPC9wYXRoPgorICAgICAgPC9kZT4tLT4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9Iml0YWxpYyI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DcnlzdGFsL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjI8L3g+CisgICAgICAgIDx5PjI8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJ1bmRlcmxpbmUiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ3J5c3RhbC9lZF9idXR0b25zX21haW4ucG5nPC9wYXRoPgorICAgICAgICA8eD4yPC94PgorICAgICAgICA8eT4wPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0ic3RyaWtldGhyb3VnaCI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DcnlzdGFsL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjM8L3g+CisgICAgICAgIDx5PjA8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJzdWJzY3JpcHQiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ3J5c3RhbC9lZF9idXR0b25zX21haW4ucG5nPC9wYXRoPgorICAgICAgICA8eD4zPC94PgorICAgICAgICA8eT4xPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0ic3VwZXJzY3JpcHQiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ3J5c3RhbC9lZF9idXR0b25zX21haW4ucG5nPC9wYXRoPgorICAgICAgICA8eD4yPC94PgorICAgICAgICA8eT4xPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0idW5kbyI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DcnlzdGFsL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjQ8L3g+CisgICAgICAgIDx5PjI8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJyZWRvIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NyeXN0YWwvZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+NTwveD4KKyAgICAgICAgPHk+MjwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9ImN1dCI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DcnlzdGFsL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjU8L3g+CisgICAgICAgIDx5PjA8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJjb3B5Ij4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NyeXN0YWwvZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+NDwveD4KKyAgICAgICAgPHk+MDwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9InBhc3RlIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NyeXN0YWwvZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+NDwveD4KKyAgICAgICAgPHk+MTwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9ImZvcmVjb2xvciI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DcnlzdGFsL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjM8L3g+CisgICAgICAgIDx5PjM8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJoaWxpdGVjb2xvciI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DcnlzdGFsL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjI8L3g+CisgICAgICAgIDx5PjM8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJpbmRlbnQiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ3J5c3RhbC9lZF9idXR0b25zX21haW4ucG5nPC9wYXRoPgorICAgICAgICA8eD4wPC94PgorICAgICAgICA8eT4yPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0ib3V0ZGVudCI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DcnlzdGFsL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjE8L3g+CisgICAgICAgIDx5PjI8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJpbnNlcnRpbWFnZSI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DcnlzdGFsL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjY8L3g+CisgICAgICAgIDx5PjM8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJpbnNlcnRvcmRlcmVkbGlzdCI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DcnlzdGFsL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjA8L3g+CisgICAgICAgIDx5PjM8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJpbnNlcnR1bm9yZGVyZWRsaXN0Ij4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NyeXN0YWwvZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+MTwveD4KKyAgICAgICAgPHk+MzwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9Imp1c3RpZnlsZWZ0Ij4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NyeXN0YWwvZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+MDwveD4KKyAgICAgICAgPHk+MDwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9Imp1c3RpZnlmdWxsIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NyeXN0YWwvZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+MDwveD4KKyAgICAgICAgPHk+MTwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9Imp1c3RpZnljZW50ZXIiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ3J5c3RhbC9lZF9idXR0b25zX21haW4ucG5nPC9wYXRoPgorICAgICAgICA8eD4xPC94PgorICAgICAgICA8eT4xPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0ianVzdGlmeXJpZ2h0Ij4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NyeXN0YWwvZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+MTwveD4KKyAgICAgICAgPHk+MDwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9ImNyZWF0ZWxpbmsiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ3J5c3RhbC9lZF9idXR0b25zX21haW4ucG5nPC9wYXRoPgorICAgICAgICA8eD42PC94PgorICAgICAgICA8eT4xPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0ibGVmdHRvcmlnaHQiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ3J5c3RhbC9lZF9idXR0b25zX21haW4ucG5nPC9wYXRoPgorICAgICAgICA8eD4wPC94PgorICAgICAgICA8eT40PC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0icmlnaHR0b2xlZnQiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ3J5c3RhbC9lZF9idXR0b25zX21haW4ucG5nPC9wYXRoPgorICAgICAgICA8eD4xPC94PgorICAgICAgICA8eT40PC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0icHJpbnQiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvQ3J5c3RhbC9lZF9idXR0b25zX21haW4ucG5nPC9wYXRoPgorICAgICAgICA8eD44PC94PgorICAgICAgICA8eT4xPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0ic2F2ZWFzIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NyeXN0YWwvZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+OTwveD4KKyAgICAgICAgPHk+MTwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9InJlbW92ZWZvcm1hdCI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DcnlzdGFsL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjQ8L3g+CisgICAgICAgIDx5PjQ8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJhYm91dCI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DcnlzdGFsL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4Pjg8L3g+CisgICAgICAgIDx5PjI8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJzaG93aGVscCI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9DcnlzdGFsL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4Pjk8L3g+CisgICAgICAgIDx5PjI8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJmdWxsc2NyZWVuIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NyeXN0YWwvZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+ODwveD4KKyAgICAgICAgPHk+MDwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9ImZ1bGxzY3JlZW5yZXN0b3JlIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL0NyeXN0YWwvZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+OTwveD4KKyAgICAgICAgPHk+MDwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisKKyAgPC9pY29ucz4KKzwvaWNvbnNldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pY29uc2V0cy9UYW5nby9SRUFETUUgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pY29uc2V0cy9UYW5nby9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA5OGU1OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ljb25zZXRzL1RhbmdvL1JFQURNRQpAQCAtMCwwICsxLDMgQEAKK1RoZXNlIGljb25zIGFyZSBmcm9tIHRoZSBUYW5nbyBEZXNrdG9wIFByb2plY3QuICBUaGUgaWNvbnMgYXJlIHJlbGVhc2VkIHRvIHRoZSBQdWJsaWMgRG9tYWluLiBGcm9tIGh0dHA6Ly90YW5nby5mcmVlZGVza3RvcC5vcmc6CisKK1RoZSBUYW5nbyBEZXNrdG9wIFByb2plY3QgZXhpc3RzIHRvIGhlbHAgY3JlYXRlIGEgY29uc2lzdGVudCBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgZXhwZXJpZW5jZSBmb3IgZnJlZSBhbmQgT3BlbiBTb3VyY2Ugc29mdHdhcmUuCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2J1dHRvbnNfbWFpbi5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pY29uc2V0cy9UYW5nby9lZF9idXR0b25zX21haW4ucG5nCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9idXR0b25zX21haW4ucG5nCmNvcHkgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaWNvbnNldHMvVGFuZ28vZWRfYnV0dG9uc19tYWluLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pY29uc2V0cy9UYW5nby9pY29uc2V0LnhtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ljb25zZXRzL1RhbmdvL2ljb25zZXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNGVlNzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pY29uc2V0cy9UYW5nby9pY29uc2V0LnhtbApAQCAtMCwwICsxLDIzMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxpY29uc2V0PgorPCEtLVRPRE86IEFkZCBtZXRhcyAtLT4KKyAgPGljb25zPgorICAgIDxpY29uIGlkPSJib2xkIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL1RhbmdvL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjM8L3g+CisgICAgICAgIDx5PjI8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgICA8IS0tPGRlIHR5cGU9InN0cmluZyI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL1RhbmdvL2RlL2JvbGRfZGUuZ2lmPC9wYXRoPgorICAgICAgPC9kZT4tLT4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9Iml0YWxpYyI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9UYW5nby9lZF9idXR0b25zX21haW4ucG5nPC9wYXRoPgorICAgICAgICA8eD4yPC94PgorICAgICAgICA8eT4yPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0idW5kZXJsaW5lIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL1RhbmdvL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjI8L3g+CisgICAgICAgIDx5PjA8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJzdHJpa2V0aHJvdWdoIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL1RhbmdvL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjM8L3g+CisgICAgICAgIDx5PjA8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJzdWJzY3JpcHQiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvVGFuZ28vZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+MzwveD4KKyAgICAgICAgPHk+MTwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9InN1cGVyc2NyaXB0Ij4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL1RhbmdvL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjI8L3g+CisgICAgICAgIDx5PjE8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJ1bmRvIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL1RhbmdvL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjQ8L3g+CisgICAgICAgIDx5PjI8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJyZWRvIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL1RhbmdvL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjU8L3g+CisgICAgICAgIDx5PjI8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJjdXQiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvVGFuZ28vZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+NTwveD4KKyAgICAgICAgPHk+MDwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9ImNvcHkiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvVGFuZ28vZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+NDwveD4KKyAgICAgICAgPHk+MDwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9InBhc3RlIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL1RhbmdvL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjQ8L3g+CisgICAgICAgIDx5PjE8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJmb3JlY29sb3IiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvVGFuZ28vZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+MzwveD4KKyAgICAgICAgPHk+MzwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9ImhpbGl0ZWNvbG9yIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL1RhbmdvL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjI8L3g+CisgICAgICAgIDx5PjM8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJpbmRlbnQiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvVGFuZ28vZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+MDwveD4KKyAgICAgICAgPHk+MjwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9Im91dGRlbnQiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvVGFuZ28vZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+MTwveD4KKyAgICAgICAgPHk+MjwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9Imluc2VydGltYWdlIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL1RhbmdvL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjY8L3g+CisgICAgICAgIDx5PjM8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJpbnNlcnRvcmRlcmVkbGlzdCI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9UYW5nby9lZF9idXR0b25zX21haW4ucG5nPC9wYXRoPgorICAgICAgICA8eD4wPC94PgorICAgICAgICA8eT4zPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0iaW5zZXJ0dW5vcmRlcmVkbGlzdCI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9UYW5nby9lZF9idXR0b25zX21haW4ucG5nPC9wYXRoPgorICAgICAgICA8eD4xPC94PgorICAgICAgICA8eT4zPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0ianVzdGlmeWxlZnQiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvVGFuZ28vZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+MDwveD4KKyAgICAgICAgPHk+MDwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9Imp1c3RpZnlmdWxsIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL1RhbmdvL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjA8L3g+CisgICAgICAgIDx5PjE8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJqdXN0aWZ5Y2VudGVyIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL1RhbmdvL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjE8L3g+CisgICAgICAgIDx5PjE8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJqdXN0aWZ5cmlnaHQiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvVGFuZ28vZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+MTwveD4KKyAgICAgICAgPHk+MDwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9ImNyZWF0ZWxpbmsiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvVGFuZ28vZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+NjwveD4KKyAgICAgICAgPHk+MTwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9ImxlZnR0b3JpZ2h0Ij4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL1RhbmdvL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjA8L3g+CisgICAgICAgIDx5PjQ8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJyaWdodHRvbGVmdCI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9UYW5nby9lZF9idXR0b25zX21haW4ucG5nPC9wYXRoPgorICAgICAgICA8eD4xPC94PgorICAgICAgICA8eT40PC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0icHJpbnQiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvVGFuZ28vZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+ODwveD4KKyAgICAgICAgPHk+MTwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9InNhdmVhcyI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9UYW5nby9lZF9idXR0b25zX21haW4ucG5nPC9wYXRoPgorICAgICAgICA8eD45PC94PgorICAgICAgICA8eT4xPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0icmVtb3ZlZm9ybWF0Ij4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL1RhbmdvL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4PjQ8L3g+CisgICAgICAgIDx5PjQ8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICAgIDxpY29uIGlkPSJhYm91dCI+CisgICAgICA8ZGVmYXVsdCB0eXBlPSJtYXAiPgorICAgICAgICA8cGF0aD5pY29uc2V0cy9UYW5nby9lZF9idXR0b25zX21haW4ucG5nPC9wYXRoPgorICAgICAgICA8eD44PC94PgorICAgICAgICA8eT4yPC95PgorICAgICAgPC9kZWZhdWx0PgorICAgIDwvaWNvbj4KKyAgICA8aWNvbiBpZD0ic2hvd2hlbHAiPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvVGFuZ28vZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+OTwveD4KKyAgICAgICAgPHk+MjwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9ImZ1bGxzY3JlZW4iPgorICAgICAgPGRlZmF1bHQgdHlwZT0ibWFwIj4KKyAgICAgICAgPHBhdGg+aWNvbnNldHMvVGFuZ28vZWRfYnV0dG9uc19tYWluLnBuZzwvcGF0aD4KKyAgICAgICAgPHg+ODwveD4KKyAgICAgICAgPHk+MDwveT4KKyAgICAgIDwvZGVmYXVsdD4KKyAgICA8L2ljb24+CisgICAgPGljb24gaWQ9ImZ1bGxzY3JlZW5yZXN0b3JlIj4KKyAgICAgIDxkZWZhdWx0IHR5cGU9Im1hcCI+CisgICAgICAgIDxwYXRoPmljb25zZXRzL1RhbmdvL2VkX2J1dHRvbnNfbWFpbi5wbmc8L3BhdGg+CisgICAgICAgIDx4Pjk8L3g+CisgICAgICAgIDx5PjA8L3k+CisgICAgICA8L2RlZmF1bHQ+CisgICAgPC9pY29uPgorICA8L2ljb25zPgorPC9pY29uc2V0PgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9kZS9ib2xkLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9kZS9ib2xkLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9kZS9ib2xkLmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2RlL2JvbGQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZGUvaXRhbGljLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9kZS9pdGFsaWMuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2RlL2l0YWxpYy5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9kZS9pdGFsaWMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZGUvdW5kZXJsaW5lLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9kZS91bmRlcmxpbmUuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2RlL3VuZGVybGluZS5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9kZS91bmRlcmxpbmUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfYWJvdXQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2Fib3V0LmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9hYm91dC5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9hYm91dC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9hbGlnbi5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfYWxpZ24uZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2FsaWduLmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2FsaWduLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2FsaWduX2NlbnRlci5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfYWxpZ25fY2VudGVyLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9hbGlnbl9jZW50ZXIuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfYWxpZ25fY2VudGVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2FsaWduX2p1c3RpZnkuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2FsaWduX2p1c3RpZnkuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2FsaWduX2p1c3RpZnkuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfYWxpZ25fanVzdGlmeS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9hbGlnbl9sZWZ0LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9hbGlnbl9sZWZ0LmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9hbGlnbl9sZWZ0LmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2FsaWduX2xlZnQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfYWxpZ25fcmlnaHQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2FsaWduX3JpZ2h0LmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9hbGlnbl9yaWdodC5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9hbGlnbl9yaWdodC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9ibGFuay5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfYmxhbmsuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2JsYW5rLmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2JsYW5rLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2J1dHRvbnNfbWFpbi5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfYnV0dG9uc19tYWluLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9idXR0b25zX21haW4uZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfYnV0dG9uc19tYWluLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2J1dHRvbnNfbWFpbi5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfYnV0dG9uc19tYWluLnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9idXR0b25zX21haW4ucG5nCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfYnV0dG9uc19tYWluLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2NoYXJtYXAuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2NoYXJtYXAuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2NoYXJtYXAuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfY2hhcm1hcC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9jbGVhcmZvbnRzLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9jbGVhcmZvbnRzLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9jbGVhcmZvbnRzLmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2NsZWFyZm9udHMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfY29sb3JfYmcuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2NvbG9yX2JnLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9jb2xvcl9iZy5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9jb2xvcl9iZy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9jb2xvcl9mZy5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfY29sb3JfZmcuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2NvbG9yX2ZnLmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2NvbG9yX2ZnLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2NvcHkuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2NvcHkuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2NvcHkuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfY29weS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9jdXN0b20uZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2N1c3RvbS5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfY3VzdG9tLmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2N1c3RvbS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9jdXQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2N1dC5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfY3V0LmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2N1dC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9kZWxldGUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2RlbGV0ZS5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfZGVsZXRlLmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2RlbGV0ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9mb3JtYXRfYm9sZC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfZm9ybWF0X2JvbGQuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2Zvcm1hdF9ib2xkLmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2Zvcm1hdF9ib2xkLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2Zvcm1hdF9pdGFsaWMuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2Zvcm1hdF9pdGFsaWMuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2Zvcm1hdF9pdGFsaWMuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfZm9ybWF0X2l0YWxpYy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9mb3JtYXRfc3RyaWtlLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9mb3JtYXRfc3RyaWtlLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9mb3JtYXRfc3RyaWtlLmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2Zvcm1hdF9zdHJpa2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfZm9ybWF0X3N1Yi5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfZm9ybWF0X3N1Yi5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfZm9ybWF0X3N1Yi5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9mb3JtYXRfc3ViLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2Zvcm1hdF9zdXAuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2Zvcm1hdF9zdXAuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2Zvcm1hdF9zdXAuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfZm9ybWF0X3N1cC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9mb3JtYXRfdW5kZXJsaW5lLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9mb3JtYXRfdW5kZXJsaW5lLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9mb3JtYXRfdW5kZXJsaW5lLmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2Zvcm1hdF91bmRlcmxpbmUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfaGVscC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfaGVscC5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfaGVscC5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9oZWxwLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2hyLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9oci5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfaHIuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfaHIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfaHRtbC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfaHRtbC5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfaHRtbC5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9odG1sLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2ltYWdlLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9pbWFnZS5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfaW1hZ2UuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfaW1hZ2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfaW5kZW50X2xlc3MuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2luZGVudF9sZXNzLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9pbmRlbnRfbGVzcy5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9pbmRlbnRfbGVzcy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9pbmRlbnRfbW9yZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfaW5kZW50X21vcmUuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2luZGVudF9tb3JlLmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2luZGVudF9tb3JlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2tpbGx3b3JkLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9raWxsd29yZC5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfa2lsbHdvcmQuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfa2lsbHdvcmQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfbGVmdF90b19yaWdodC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfbGVmdF90b19yaWdodC5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfbGVmdF90b19yaWdodC5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9sZWZ0X3RvX3JpZ2h0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2xpbmsuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2xpbmsuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2xpbmsuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfbGluay5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9saXN0X2J1bGxldC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfbGlzdF9idWxsZXQuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2xpc3RfYnVsbGV0LmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX2xpc3RfYnVsbGV0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2xpc3RfbnVtLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9saXN0X251bS5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfbGlzdF9udW0uZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfbGlzdF9udW0uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfb3ZlcndyaXRlLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9vdmVyd3JpdGUuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX292ZXJ3cml0ZS5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9vdmVyd3JpdGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfcGFzdGUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX3Bhc3RlLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9wYXN0ZS5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9wYXN0ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9wcmludC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfcHJpbnQuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3ByaW50LmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX3ByaW50LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3JlZG8uZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX3JlZG8uZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3JlZG8uZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfcmVkby5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9yaWdodF90b19sZWZ0LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9yaWdodF90b19sZWZ0LmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9yaWdodF90b19sZWZ0LmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX3JpZ2h0X3RvX2xlZnQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfcm1mb3JtYXQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX3JtZm9ybWF0LmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9ybWZvcm1hdC5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9ybWZvcm1hdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9zYXZlLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9zYXZlLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9zYXZlLmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2VkX3NhdmUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfc2F2ZS5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfc2F2ZS5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfc2F2ZS5wbmcKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9zYXZlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3NhdmVhcy5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfc2F2ZWFzLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9zYXZlYXMuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfc2F2ZWFzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3NlbGVjdGFsbC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfc2VsZWN0YWxsLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9zZWxlY3RhbGwuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfc2VsZWN0YWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3Nob3dfYm9yZGVyLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9zaG93X2JvcmRlci5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfc2hvd19ib3JkZXIuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfc2hvd19ib3JkZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfc3BsaXRibG9jay5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfc3BsaXRibG9jay5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfc3BsaXRibG9jay5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9zcGxpdGJsb2NrLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3NwbGl0Y2VsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF9zcGxpdGNlbC5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfc3BsaXRjZWwuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfc3BsaXRjZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfdW5kby5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfdW5kby5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfdW5kby5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9lZF91bmRvLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3dvcmRfY2xlYW5lci5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfd29yZF9jbGVhbmVyLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF93b3JkX2NsZWFuZXIuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZWRfd29yZF9jbGVhbmVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2ZyL2JvbGQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2ZyL2JvbGQuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2ZyL2JvbGQuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZnIvYm9sZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9mci9zdHJpa2V0aHJvdWdoLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9mci9zdHJpa2V0aHJvdWdoLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9mci9zdHJpa2V0aHJvdWdoLmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2ZyL3N0cmlrZXRocm91Z2guZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZnIvdW5kZXJsaW5lLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9mci91bmRlcmxpbmUuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2ZyL3VuZGVybGluZS5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9mci91bmRlcmxpbmUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZnVsbHNjcmVlbl9tYXhpbWl6ZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZnVsbHNjcmVlbl9tYXhpbWl6ZS5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZnVsbHNjcmVlbl9tYXhpbWl6ZS5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9mdWxsc2NyZWVuX21heGltaXplLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2Z1bGxzY3JlZW5fbWluaW1pemUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2Z1bGxzY3JlZW5fbWluaW1pemUuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2Z1bGxzY3JlZW5fbWluaW1pemUuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvZnVsbHNjcmVlbl9taW5pbWl6ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9pbnNlcnRfdGFibGUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2luc2VydF90YWJsZS5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvaW5zZXJ0X3RhYmxlLmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2luc2VydF90YWJsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9pbnNlcnRmaWxlbGluay5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvaW5zZXJ0ZmlsZWxpbmsuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2luc2VydGZpbGVsaW5rLmdpZgpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL2luc2VydGZpbGVsaW5rLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2luc2VydG1hY3JvLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy9pbnNlcnRtYWNyby5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvaW5zZXJ0bWFjcm8ucG5nCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvaW5zZXJ0bWFjcm8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2RvY3VtZW50LW5ldy5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9kb2N1bWVudC1uZXcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjM2VmZGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9kb2N1bWVudC1uZXcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2RvY3VtZW50LW9wZW4ucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzE2eDE2L2FjdGlvbnMvZG9jdW1lbnQtb3Blbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlkZDhkNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2RvY3VtZW50LW9wZW4ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2RvY3VtZW50LXByaW50LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2RvY3VtZW50LXByaW50LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWMzN2JkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzE2eDE2L2FjdGlvbnMvZG9jdW1lbnQtcHJpbnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2RvY3VtZW50LXNhdmUucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzE2eDE2L2FjdGlvbnMvZG9jdW1lbnQtc2F2ZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJmZjQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2RvY3VtZW50LXNhdmUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2VkaXQtY29weS5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9lZGl0LWNvcHkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZDQ4YzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9lZGl0LWNvcHkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2VkaXQtcmVkby5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9lZGl0LXJlZG8ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYjBkZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9lZGl0LXJlZG8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2VkaXQtc2VsZWN0LWFsbC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9lZGl0LXNlbGVjdC1hbGwucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YjBiMTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9lZGl0LXNlbGVjdC1hbGwucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2VkaXQtdW5kby5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9lZGl0LXVuZG8ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMGZlZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9lZGl0LXVuZG8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2ZvbGRlci1uZXcucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzE2eDE2L2FjdGlvbnMvZm9sZGVyLW5ldy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI4ZjRkNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2ZvbGRlci1uZXcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC1kaXJlY3Rpb24tbGVmdC10by1yaWdodC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9mb3JtYXQtZGlyZWN0aW9uLWxlZnQtdG8tcmlnaHQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE4ODA4MTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9mb3JtYXQtZGlyZWN0aW9uLWxlZnQtdG8tcmlnaHQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC1kaXJlY3Rpb24tcmlnaHQtdG8tbGVmdC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9mb3JtYXQtZGlyZWN0aW9uLXJpZ2h0LXRvLWxlZnQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlhMmI3YjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9mb3JtYXQtZGlyZWN0aW9uLXJpZ2h0LXRvLWxlZnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC1pbmRlbnQtbGVzcy5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9mb3JtYXQtaW5kZW50LWxlc3MucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ODdhN2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9mb3JtYXQtaW5kZW50LWxlc3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC1pbmRlbnQtbW9yZS5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9mb3JtYXQtaW5kZW50LW1vcmUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYWQ2YmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9mb3JtYXQtaW5kZW50LW1vcmUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC1qdXN0aWZ5LWNlbnRlci5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9mb3JtYXQtanVzdGlmeS1jZW50ZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwN2RjNGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9mb3JtYXQtanVzdGlmeS1jZW50ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC1qdXN0aWZ5LWZpbGwucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzE2eDE2L2FjdGlvbnMvZm9ybWF0LWp1c3RpZnktZmlsbC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYzY2JhZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC1qdXN0aWZ5LWZpbGwucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC1qdXN0aWZ5LWxlZnQucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzE2eDE2L2FjdGlvbnMvZm9ybWF0LWp1c3RpZnktbGVmdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliNDBhNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC1qdXN0aWZ5LWxlZnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC1qdXN0aWZ5LXJpZ2h0LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC1qdXN0aWZ5LXJpZ2h0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzAxMzA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzE2eDE2L2FjdGlvbnMvZm9ybWF0LWp1c3RpZnktcmlnaHQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC10ZXh0LWJhY2tncm91bmQtY29sb3IucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzE2eDE2L2FjdGlvbnMvZm9ybWF0LXRleHQtYmFja2dyb3VuZC1jb2xvci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU3YjA0NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC10ZXh0LWJhY2tncm91bmQtY29sb3IucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC10ZXh0LWJvbGQucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzE2eDE2L2FjdGlvbnMvZm9ybWF0LXRleHQtYm9sZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzljYjYzMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC10ZXh0LWJvbGQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC10ZXh0LWNvbG9yLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC10ZXh0LWNvbG9yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzYyZTNlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzE2eDE2L2FjdGlvbnMvZm9ybWF0LXRleHQtY29sb3IucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC10ZXh0LWl0YWxpYy5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9mb3JtYXQtdGV4dC1pdGFsaWMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3N2VhODIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9mb3JtYXQtdGV4dC1pdGFsaWMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC10ZXh0LXN0cmlrZXRocm91Z2gucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzE2eDE2L2FjdGlvbnMvZm9ybWF0LXRleHQtc3RyaWtldGhyb3VnaC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NlZTc2ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC10ZXh0LXN0cmlrZXRocm91Z2gucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC10ZXh0LXN1YnNjcmlwdC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9mb3JtYXQtdGV4dC1zdWJzY3JpcHQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMWQ5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9mb3JtYXQtdGV4dC1zdWJzY3JpcHQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC10ZXh0LXN1cGVyc2NyaXB0LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC10ZXh0LXN1cGVyc2NyaXB0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTg3NTU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzE2eDE2L2FjdGlvbnMvZm9ybWF0LXRleHQtc3VwZXJzY3JpcHQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2Zvcm1hdC10ZXh0LXVuZGVybGluZS5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9mb3JtYXQtdGV4dC11bmRlcmxpbmUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNDg3MjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9mb3JtYXQtdGV4dC11bmRlcmxpbmUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2dvLXVwLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2dvLXVwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTlhN2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzE2eDE2L2FjdGlvbnMvZ28tdXAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2luc2VydC1saW5rLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2luc2VydC1saW5rLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNmIyYWI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzE2eDE2L2FjdGlvbnMvaW5zZXJ0LWxpbmsucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2luc2VydC10YWJsZS5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9pbnNlcnQtdGFibGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgwZDI0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy9pbnNlcnQtdGFibGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL3RvZ2dsZS1ib3JkZXJzLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL3RvZ2dsZS1ib3JkZXJzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hODY2NzlmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzE2eDE2L2FjdGlvbnMvdG9nZ2xlLWJvcmRlcnMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL3ZpZXctZnVsbHNjcmVlbi5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy92aWV3LWZ1bGxzY3JlZW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZGFiZDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy92aWV3LWZ1bGxzY3JlZW4ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL3ZpZXctcmVzdG9yZS5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy92aWV3LXJlc3RvcmUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OTdjZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYWN0aW9ucy92aWV3LXJlc3RvcmUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hcHBzL2FjY2Vzc29yaWVzLWNoYXJhY3Rlci1tYXAucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzE2eDE2L2FwcHMvYWNjZXNzb3JpZXMtY2hhcmFjdGVyLW1hcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRkMTEyNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hcHBzL2FjY2Vzc29yaWVzLWNoYXJhY3Rlci1tYXAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9hcHBzL2hlbHAtYnJvd3Nlci5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYXBwcy9oZWxwLWJyb3dzZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNWZjM2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvYXBwcy9oZWxwLWJyb3dzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9taW1ldHlwZXMvaW1hZ2UteC1nZW5lcmljLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9taW1ldHlwZXMvaW1hZ2UteC1nZW5lcmljLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGRhNTAyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzE2eDE2L21pbWV0eXBlcy9pbWFnZS14LWdlbmVyaWMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8xNngxNi9wbGFjZXMvdXNlci10cmFzaC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvcGxhY2VzL3VzZXItdHJhc2gucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMDk1M2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGFuZ28vMTZ4MTYvcGxhY2VzL3VzZXItdHJhc2gucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8zMngzMi9hcHBzL2ludGVybmV0LXdlYi1icm93c2VyLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8zMngzMi9hcHBzL2ludGVybmV0LXdlYi1icm93c2VyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGQyZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzMyeDMyL2FwcHMvaW50ZXJuZXQtd2ViLWJyb3dzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8zMngzMi9taW1ldHlwZXMvdGV4dC1odG1sLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8zMngzMi9taW1ldHlwZXMvdGV4dC1odG1sLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODk2Njk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzMyeDMyL21pbWV0eXBlcy90ZXh0LWh0bWwucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8zMngzMi9taW1ldHlwZXMvdGV4dC14LWdlbmVyaWMucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzMyeDMyL21pbWV0eXBlcy90ZXh0LXgtZ2VuZXJpYy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4YTY3OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8zMngzMi9taW1ldHlwZXMvdGV4dC14LWdlbmVyaWMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8zMngzMi9taW1ldHlwZXMveC1vZmZpY2UtZG9jdW1lbnQucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzMyeDMyL21pbWV0eXBlcy94LW9mZmljZS1kb2N1bWVudC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmODRiMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8zMngzMi9taW1ldHlwZXMveC1vZmZpY2UtZG9jdW1lbnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8zMngzMi9wbGFjZXMvZm9sZGVyLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8zMngzMi9wbGFjZXMvZm9sZGVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTcxYjA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzMyeDMyL3BsYWNlcy9mb2xkZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8zMngzMi9wbGFjZXMvbmV0d29yay1zZXJ2ZXIucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvLzMyeDMyL3BsYWNlcy9uZXR3b3JrLXNlcnZlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQzOGU0ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby8zMngzMi9wbGFjZXMvbmV0d29yay1zZXJ2ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby9DT1BZSU5HIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3RhbmdvL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcwOWQwYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90YW5nby9DT1BZSU5HCkBAIC0wLDAgKzEsNjcgQEAKK0NyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSAyLjUgTGljZW5zZSBBZ3JlZW1lbnQKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyAgIDEuICJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyAgIDIuICJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisgICAzLiAiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorICAgNC4gIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorICAgNS4gIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisgICA2LiAiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorICAgNy4gIkxpY2Vuc2UgRWxlbWVudHMiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlIGF0dHJpYnV0ZXMgYXMgc2VsZWN0ZWQgYnkgTGljZW5zb3IgYW5kIGluZGljYXRlZCBpbiB0aGUgdGl0bGUgb2YgdGhpcyBMaWNlbnNlOiBBdHRyaWJ1dGlvbiwgU2hhcmVBbGlrZS4KKworMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKKyAgIDEuIHRvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKKyAgIDIuIHRvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7CisgICAzLiB0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOworICAgNC4gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3MuCisgICA1LgorCisgICAgICBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIHdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorICAgICAgICAgMS4gUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLgorICAgICAgICAgMi4gTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBzb2NpZXR5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KKyAgIDYuIFdlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KKworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisgICAxLiBZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYyksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChjKSwgYXMgcmVxdWVzdGVkLgorICAgMi4gWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSwgb3IgYSBDcmVhdGl2ZSBDb21tb25zIGlDb21tb25zIGxpY2Vuc2UgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSAoZS5nLiBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDIuNSBKYXBhbikuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIG9yIG90aGVyIGxpY2Vuc2Ugc3BlY2lmaWVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgZWFjaCBEZXJpdmF0aXZlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciwgYW5kIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgRGVyaXZhdGl2ZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBEZXJpdmF0aXZlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyAgIDMuIElmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgKGlpKSBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gaW4gTGljZW5zb3IncyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKworNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgTUFURVJJQUxTLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworICAgMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorICAgMi4gU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCisKKzguIE1pc2NlbGxhbmVvdXMKKworICAgMS4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KKyAgIDIuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KKyAgIDMuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KKyAgIDQuIE5vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCisgICA1LiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KKworQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zJyB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvdGlkeS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdGlkeS5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvdGlkeS5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90aWR5LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL3RvZ2dsZV9ib3JkZXJzLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy90b2dnbGVfYm9yZGVycy5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvdG9nZ2xlX2JvcmRlcnMuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMvdG9nZ2xlX2JvcmRlcnMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMveGluaGEtc21hbGwtaWNvbi5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMveGluaGEtc21hbGwtaWNvbi5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMveGluaGEtc21hbGwtaWNvbi5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2ltYWdlcy94aW5oYS1zbWFsbC1pY29uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL3hpbmhhX2xvZ28uZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvaW1hZ2VzL3hpbmhhX2xvZ28uZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL3hpbmhhX2xvZ28uZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9pbWFnZXMveGluaGFfbG9nby5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9iNS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvYjUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhN2ExMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvYjUuanMKQEAgLTAsMCArMSwzOSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJiNSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICLpl5zmlrwgWGluaGEiLAorICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIuiDjOaZr+mhj+iJsiIsCisgICAgIkJvbGQiOiAi57KX6auUIiwKKyAgICAiQnVsbGV0ZWQgTGlzdCI6ICLnhKHluo/muIXllq4iLAorICAgICJDdXJyZW50IHN0eWxlIjogIuWtl+mrlOS+i+WtkCIsCisgICAgIkRlY3JlYXNlIEluZGVudCI6ICLmuJvlsI/ooYzliY3nqbrnmb0iLAorICAgICJGb250IENvbG9yIjogIuaWh+Wtl+mhj+iJsiIsCisgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIuiqquaYjiIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICLmsLTlubPnt5oiLAorICAgICJJbmNyZWFzZSBJbmRlbnQiOiAi5Yqg5a+s6KGM5YmN56m655m9IiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIuaPkuWFpeihqOagvCIsCisgICAgIkluc2VydCBXZWIgTGluayI6ICLmj5LlhaXpgKPntZAiLAorICAgICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIuaPkuWFpeWcluW9oiIsCisgICAgIkl0YWxpYyI6ICLmlpzpq5QiLAorICAgICJKdXN0aWZ5IENlbnRlciI6ICLkvY3nva7lsYXkuK0iLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAi5L2N572u5bem5Y+z5bmz562JIiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogIuS9jee9rumdoOW3piIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAi5L2N572u6Z2g5Y+zIiwKKyAgICAiT3JkZXJlZCBMaXN0IjogIumghuW6j+a4heWWriIsCisgICAgIlN0cmlrZXRocm91Z2giOiAi5Yiq6Zmk57eaIiwKKyAgICAiU3Vic2NyaXB0IjogIuS4i+aomSIsCisgICAgIlN1cGVyc2NyaXB0IjogIuS4iuaomSIsCisgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICLliIfmj5tIVE1M5Y6f5aeL56K8IiwKKyAgICAiVW5kZXJsaW5lIjogIuW6lee3miIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkVubGFyZ2UgRWRpdG9yIjogIuaUvuWkpyIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvY2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYzRlOTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2NoLmpzCkBAIC0wLDAgKzEsNjIgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAi6Zec5pa8IFhpbmhhIiwKKyAgICAiQmFja2dyb3VuZCBDb2xvciI6ICLog4zmma/poY/oibIiLAorICAgICJCb2xkIjogIueyl+mrlCIsCisgICAgIkJ1bGxldGVkIExpc3QiOiAi54Sh5bqP5riF5ZauIiwKKyAgICAiQ29weSBzZWxlY3Rpb24iOiAi5aSN5Yi26YCJ6aG5IiwKKyAgICAiQ3VycmVudCBzdHlsZSI6ICLlrZfpq5TkvovlrZAiLAorICAgICJDdXQgc2VsZWN0aW9uIjogIuWJquWItumAiemhuSIsCisgICAgIkRlY3JlYXNlIEluZGVudCI6ICLkvLjmjpIiLAorICAgICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICLku47lt6bliLDlj7MiLAorICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICLku47lj7PliLDlt6YiLAorICAgICJGb250IENvbG9yIjogIuaWh+Wtl+mhj+iJsiIsCisgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIuiqquaYjiIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICLmsLTlubPnt5oiLAorICAgICJJbmNyZWFzZSBJbmRlbnQiOiAi57iu5o6SIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIuaPkuWFpeihqOagvCIsCisgICAgIkluc2VydCBXZWIgTGluayI6ICLmj5LlhaXpgKPntZAiLAorICAgICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIuaPkuWFpeWcluWDjyIsCisgICAgIkl0YWxpYyI6ICLmlpzpq5QiLAorICAgICJKdXN0aWZ5IENlbnRlciI6ICLlsYXkuK0iLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAi5pW06b2KIiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogIumdoOW3piIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAi6Z2g5Y+zIiwKKyAgICAiT3JkZXJlZCBMaXN0IjogIumghuW6j+a4heWWriIsCisgICAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIui0tOS4iiIsCisgICAgIlBhdGgiOiAi6YCU5b6RIiwKKyAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi6YeN5p2lIiwKKyAgICAiU3RyaWtldGhyb3VnaCI6ICLliKrnt5oiLAorICAgICJTdWJzY3JpcHQiOiAi5LiL5qiZIiwKKyAgICAiU3VwZXJzY3JpcHQiOiAi5LiK5qiZIiwKKyAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIuWIh+aPm0hUTUzljp/lp4vnorwiLAorICAgICJVbmRlcmxpbmUiOiAi5bqV57eaIiwKKyAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi5Zue5Y6fIiwKKyAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIuS9oOWcqOeUqOe0lOWtl+e3qOi8r+aWueW8jy4gIOeUqCBbPD5dIOaMiemIlei9ieWbniDmiYDopovljbPmiYDlvpcg57eo6Lyv5pa55byPLiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLlj5bmtogiLAorICAgICAgICAiRW5sYXJnZSBFZGl0b3IiOiAi5Ly45Ye657eo6Lyv57O757WxIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICLmj5LlhaUv5pS55a+r6YCj57WQIiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAi5paw56qX5oi3KF9ibGFuaykiLAorICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICLnhKEodXNlIGltcGxpY2l0KSIsCisgICAgICAgICJPSyI6ICLlpb0iLAorICAgICAgICAiT3RoZXIiOiAi5YW25LuWIiwKKyAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICLmnKzljKEgKF9zZWxmKSIsCisgICAgICAgICJUYXJnZXQ6IjogIuebruaomeWMoToiLAorICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIiwKKyAgICAgICAgIlRoZSBmdWxsIHNjcmVlbiBtb2RlIGlzIGtub3duIHRvIGNhdXNlIHByb2JsZW1zIHdpdGggSW50ZXJuZXQgRXhwbG9yZXIsIGR1ZSB0byBicm93c2VyIGJ1Z3MgdGhhdCB3ZSB3ZXJlbiI6ICLmlbTpoIHlvI/lnKhJbnRlcm5ldCBFeHBsb3JlciDkuIrluLjlh7rllY/poYwsIOWboOeCuumAmeaYryBJbnRlcm5ldCBFeHBsb3JlciDnmoTnhKHlkI3llY/poYzvvIzmiJHlgJHnhKHms5Xop6PmsbrjgILkvaDlj6/og73nnIvopovkuIDkupvlnoPlnL7vvIzmiJbpgYfliLDlhbbku5bllY/poYzjgILmiJHlgJHlt7LorablkYrkuobkvaAuIOWmguaenOimgei9ieWIsCDmraPpoIHlvI8g6KuL5oyJIOWlvS4iLAorICAgICAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICLkuLvpoYwgKHRvb2x0aXApOiIsCisgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIuS4iuWMoSAoX3RvcCkiLAorICAgICAgICAiVVJMOiI6ICLntrLlnYA6IiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICLkvaDlv4XpoIjovLjlhaXkvaDopoHov57nu5PnmoTntrLlnYAiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2N6LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9jei5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjQxZmVhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9jei5qcwpAQCAtMCwwICsxLDQ4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImN6IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIk8gdMOpdG8gYXBsaWthY2kiLAorICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIkJhcnZhIHBvemFkw60iLAorICAgICJCb2xkIjogIlR1xI1uxJsiLAorICAgICJCdWxsZXRlZCBMaXN0IjogIk9kcsOhxb5reSIsCisgICAgIkNvcHkgc2VsZWN0aW9uIjogIktvcMOtcm92YXQiLAorICAgICJDdXJyZW50IHN0eWxlIjogIlp2b2xlbsO9IHN0eWwiLAorICAgICJDdXQgc2VsZWN0aW9uIjogIlZ5am1vdXQiLAorICAgICJEZWNyZWFzZSBJbmRlbnQiOiAiUMWZZWRzYWRpdCIsCisgICAgIkZvbnQgQ29sb3IiOiAiQmFydmEgcMOtc21hIiwKKyAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiTsOhcG92xJtkYSBhcGxpa2FjZSIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICJWb2Rvcm92bsOhIMSNw6FyYSIsCisgICAgIkluY3JlYXNlIEluZGVudCI6ICJPZHNhZGl0IiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIlZsb8W+aXQgdGFidWxrdSIsCisgICAgIkluc2VydCBXZWIgTGluayI6ICJWbG/Fvml0IG9ka2F6IiwKKyAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJWbG/Fvml0IG9icsOhemVrIiwKKyAgICAiSXRhbGljIjogIkt1cnrDrXZhIiwKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAiTmEgc3TFmWVkIiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIlphcm92bmF0IGRvIHN0cmFuIiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogIlphcm92bmF0IGRvbGV2YSIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAiWmFyb3ZuYXQgZG9wcmF2YSIsCisgICAgIk9yZGVyZWQgTGlzdCI6ICJTZXpuYW0iLAorICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJWbG/Fvml0IiwKKyAgICAiUGF0aCI6ICJDZXN0YSIsCisgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIk9wYWt1amUgcG9zbGVkbsOtIGFrY2kiLAorICAgICJTdHJpa2V0aHJvdWdoIjogIlDFmWXFoWtydG51dMOtIiwKKyAgICAiU3Vic2NyaXB0IjogIkRvbG7DrSBpbmRleCIsCisgICAgIlN1cGVyc2NyaXB0IjogIkhvcm7DrSBpbmRleCIsCisgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJQxZllcG5vdXQgSFRNTCIsCisgICAgIlVuZGVybGluZSI6ICJQb2R0csW+ZW7DrSIsCisgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlZyw6F0w60gcG9zbGVkbsOtIGFrY2kiLAorICAgICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiSnN0ZSB2IFRFWFRPVsOJTSBSRcW9SU1VLiAgUG91xb5panRlIHRsYcSNw610a28gWzw+XSBwcm8gcMWZZXBudXTDrSBkbyBXWVNJV0lHLiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJacnXFoWl0IiwKKyAgICAgICAgIkVubGFyZ2UgRWRpdG9yIjogIk5vdsOpIG9rbm8gZWRpdG9ydSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvZGEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1M2U4M2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2RhLmpzCkBAIC0wLDAgKzEsMTYwIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIk9tIFhpbmhhIiwKKyAgICAiQWRkcmVzcyI6ICJBZHJlc3NlIiwKKyAgICAiQmFja2dyb3VuZCBDb2xvciI6ICJCYWdncnVuZHNmYXJ2ZSIsCisgICAgIkJvbGQiOiAiRmVkIiwKKyAgICAiQnVsbGV0ZWQgTGlzdCI6ICJQdW5rdGxpc3RlIiwKKyAgICAiQ2xlYW4gY29udGVudCBwYXN0ZWQgZnJvbSBXb3JkIjogIlJlbnMgaW5kaG9sZCBrb3BpZXJldCBmcmEgV29yZCIsCisgICAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogIkZqZXJuIHNrcmlmdCB2YWxnIiwKKyAgICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICJNU09mZmljZSBmaWx0ZXIiLAorICAgICJDbG9zZSI6ICJMdWsiLAorICAgICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIk9iamVrdCByZWdpc3RyZXJlcyIsCisgICAgIkNvcHkgc2VsZWN0aW9uIjogIktvcGllciIsCisgICAgIkNyZWF0ZSBTdGF0dXNiYXIiOiAiT3ByZXR0ZXIgc3RhdHVzbGluamUiLAorICAgICJDcmVhdGUgVG9vbGJhciI6ICJPcHJldHRlciB2w6Zya3TDuGpzbGluamUiLAorICAgICJDdXJyZW50IHN0eWxlIjogIkFudmVuZHQgc3RpbCIsCisgICAgIkN1dCBzZWxlY3Rpb24iOiAiS2xpcCIsCisgICAgIkRlY3JlYXNlIEluZGVudCI6ICJGb3JtaW5kc2sgaW5kcnlrbmluZyIsCisgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIlRla3N0IHZlbnN0cmUgbW9kIGjDuGpyZSIsCisgICAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIlRla3N0IGjDuGpyZSBtb2QgdmVuc3RyZSIsCisgICAgIkZpbmlzaGluZyI6ICJBZnNsdXR0ZXIiLAorICAgICJGb250IENvbG9yIjogIlNrcmlmdGZhcnZlIiwKKyAgICAiRm9ybWF0dGVkIjogIkZvcm1hdGVyZXQiLAorICAgICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiWGluaGEgRnJhbWV3b3JrIGdlbmVyZXJlcyIsCisgICAgIkhlYWRpbmcgMSI6ICJPdmVyc2tyaWZ0IDEiLAorICAgICJIZWFkaW5nIDIiOiAiT3ZlcnNrcmlmdCAyIiwKKyAgICAiSGVhZGluZyAzIjogIk92ZXJza3JpZnQgMyIsCisgICAgIkhlYWRpbmcgNCI6ICJPdmVyc2tyaWZ0IDQiLAorICAgICJIZWFkaW5nIDUiOiAiT3ZlcnNrcmlmdCA1IiwKKyAgICAiSGVhZGluZyA2IjogIk92ZXJza3JpZnQgNiIsCisgICAgIkhlYWRpbmdzIjogIk92ZXJza3JpZnQgMSB0aWwgNiIsCisgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIkhqw6ZscCIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICJWYW5kcmV0IHN0cmVnIiwKKyAgICAiSW5jcmVhc2UgSW5kZW50IjogIkZvcsO4ZyBpbmRyeWtuaW5nIiwKKyAgICAiSW5pdCBlZGl0b3Igc2l6ZSI6ICJTdMO4cnJlbHNlbiBiZXJlZ25lcyIsCisgICAgIkluc2VydCBUYWJsZSI6ICJJbmRzw6Z0IHRhYmVsIiwKKyAgICAiSW5zZXJ0IFdlYiBMaW5rIjogIkluZHPDpnQgaHlwZXJsaW5rIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJbmRzw6Z0L3Vkc2tpZnQgYmlsbGVkZSIsCisgICAgIkluc2VydC9PdmVyd3JpdGUiOiAiSW5kc8OmdC9PdmVyc2tyaXYiLAorICAgICJJdGFsaWMiOiAiS3Vyc2l2IiwKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAiQ2VudHJlciIsCisgICAgIkp1c3RpZnkgRnVsbCI6ICJMaWdlIG1hcmdlbmVyIiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogIlZlbnN0cmVqdXN0ZXIiLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogIkjDuGpyZWp1c3RlciIsCisgICAgIktleWJvYXJkIHNob3J0Y3V0cyI6ICJUYXN0YXR1cmdlbnZlamUiLAorICAgICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiRWRpdG9yZW4gaGVudGVzIGluZC4gVmVudCB2ZW5saWdzdC4iLAorICAgICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIjogIlBsdWdpbiAkcGx1Z2luIGhlbnRlcyIsCisgICAgIk5vcm1hbCI6ICJOb3JtYWwiLAorICAgICJPcmRlcmVkIExpc3QiOiAiT3JkbmV0IGxpc3RlIiwKKyAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiSW5kc8OmdCIsCisgICAgIlBhdGgiOiAiU1RpIiwKKyAgICAiUHJpbnQgZG9jdW1lbnQiOiAiVWRza3JpdiBkb2t1bWVudCIsCisgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkdlbnRhZyBzaWRzdGUgw6ZuZHJpbmciLAorICAgICJSZWdpc3RlciBwbHVnaW4gJHBsdWdpbiI6ICJQbHVnaW4gJHBsdWdpbiByZWdpc3RyZXJlcyIsCisgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIkZqZXJuIGZvcm1hdGVyaW5nIiwKKyAgICAiU2F2ZSBhcyI6ICJHZW0gc29tIiwKKyAgICAiU2VsZWN0IGFsbCI6ICJWw6ZsZyBhbHQiLAorICAgICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICJGb3JtYXRlciBhZnNuaXQiLAorICAgICJTcGxpdCBCbG9jayI6ICJEZWwgYmxvayIsCisgICAgIlN0cmlrZXRocm91Z2giOiAiR2VubmVtc3RyZWduaW5nIiwKKyAgICAiU3Vic2NyaXB0IjogIlPDpm5rZXQgc2tyaWZ0IiwKKyAgICAiU3VwZXJzY3JpcHQiOiAiSMOmdmV0IHNrcmlmdCIsCisgICAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICJFZGl0b3JlbiBrZW5kZXIgZsO4bGdlbmRlIGtvbWJpbmF0aW9uZXI6IiwKKyAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiVGFiZWxrYW50ZXIgdGlsL2ZyYSIsCisgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJIVE1MIHZpc25pbmciLAorICAgICJVbmRlcmxpbmUiOiAiVW5kZXJzdHJlZ25pbmciLAorICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJGb3J0cnlkIHNpZHN0ZSDDpm5kcmluZyIsCisgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiVmlsIGR1IGZqZXJuZSBza3JpZnRmYXJ2ZSB2YWxnIiwKKyAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiVmlsIGR1IGZqZXJuZSBza3JpZnRzdMO4cnJlbHNlIHZhbGciLAorICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiVmlsIGR1IGZqZXJuIHNrcmlmdHNuaXQgdmFsZyIsCisgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJEdSBlciBpIFRFWFQgbW9kZS4gQnJ1ZyBbPD5dIGtuYXBwZW4gdGlsIGF0IHNraWZ0ZSB0aWwgdmlzdWVsIGVkaXRlcmluZy4iLAorICAgICJpbnNlcnQgbGluZWJyZWFrIjogIkluZHPDpnQgbGluamVza2lmdCIsCisgICAgIm5ldyBwYXJhZ3JhcGgiOiAiTnl0IGFmc25pdCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIiZtZGFzaDsgZm9ybWF0ICZtZGFzaDsiOiAiJm1kYXNoOyBGb3JtYXQgJm1kYXNoOyIsCisgICAgICAgICJBYnNib3R0b20iOiAiQnVuZCIsCisgICAgICAgICJBYnNtaWRkbGUiOiAiQ2VudHJlcmV0IiwKKyAgICAgICAgIkFsaWdubWVudDoiOiAiSnVzdGVyaW5nOiIsCisgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiQWx0ZXJuYXRpdiB0ZXh0OiIsCisgICAgICAgICJCYXNlbGluZSI6ICJHcnVuZGxpbmplIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIkthbnRicmVkZGU6IiwKKyAgICAgICAgIkJvdHRvbSI6ICJUZWtzdGJ1bmQiLAorICAgICAgICAiQ2FuY2VsIjogIkZvcnRyeWQiLAorICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICJDZWxsZWZ5bGQ6IiwKKyAgICAgICAgIkNlbGwgc3BhY2luZzoiOiAiQ2VsbGVhZnN0YW5kOiIsCisgICAgICAgICJDbGljayBhIGNvbG9yLi4uIjogIlbDpmxnIGZhcnZlIiwKKyAgICAgICAgIkNvbG9yOiAiOiAiRmFydmU6ICIsCisgICAgICAgICJDb2xzOiI6ICJTw7hqbGVyOiIsCisgICAgICAgICJFbSI6ICJHZXZpZXJ0IChFbSkiLAorICAgICAgICAiRW5sYXJnZSBFZGl0b3IiOiAiVmlzIGVkaXRvciBpIHBvcHVwIiwKKyAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICJBbmdpdiBiaWxsZWRldHMgVVJMIiwKKyAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiRmFzdC1icmVkZGUgc8O4amxlciIsCisgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJmb3IgYnJvd3NlcmUgZGVyIGlra2UgdW5kZXJzdMO4dHRlciBiaWxsZWRlciIsCisgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiVmFuZHJldCBmeWxkIiwKKyAgICAgICAgIkhvcml6b250YWw6IjogInZhbmRyZXQ6IiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIkJpbGxlZGUgc211Z2tpZzoiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJCaWxsZWRlIFVSTDoiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIkluZHPDpnQgYmlsbGVkZSIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSW5kc8OmdC9yZWRpZ2VyIGh5cGVybGluayIsCisgICAgICAgICJMYXlvdXQiOiAiTGF5b3V0IiwKKyAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiVG9tIGh2aXMgaW5nZW4ga2FudCIsCisgICAgICAgICJMZWZ0IjogIlZlbnN0cmUiLAorICAgICAgICAiTWlkZGxlIjogIk1pZHQiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOeXQgdmluZHVlIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiaW5nZW4gKGltcGxpY2l0KSIsCisgICAgICAgICJOb3Qgc2V0IjogIlViZXN0ZW10IiwKKyAgICAgICAgIk51bWJlciBvZiBjb2x1bW5zIjogIkFudGFsIHPDuGpsZXIiLAorICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAiQW50YWwgcsOma2tlciIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPdGhlciI6ICJBbmRldCIsCisgICAgICAgICJQZXJjZW50IjogIlByb2NlbnQiLAorICAgICAgICAiUGl4ZWxzIjogIlBpeGVsIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUGxhY2VyaW5nIGFmIGJpbGxlZGV0IiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiUGxhY2VyaW5nIGFmIHRhYmVsIiwKKyAgICAgICAgIlByZXZpZXciOiAiU211Z2tpZyIsCisgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiU211Z2tpZyBhZiBiaWxsZWRldCBpIGV0IG55dCB2aW5kdWUiLAorICAgICAgICAiUmVnaXN0ZXIgYm90dG9tIHBhbmVsIjogIlJlZ2lzdHJlcmVyIG5lZGVyc3RlIHBhbmVsIiwKKyAgICAgICAgIlJlZ2lzdGVyIGxlZnQgcGFuZWwiOiAiUmVnaXN0cmVyZXIgdmVuc3RyZSBwYW5lbCIsCisgICAgICAgICJSZWdpc3RlciByaWdodCBwYW5lbCI6ICJSZWdpc3RyZXJlciBow7hqcmUgcGFuZWwiLAorICAgICAgICAiUmVnaXN0ZXIgdG9wIHBhbmVsIjogIlJlZ2lzdHJlcmVyIMO4dmVyc3RlIHBhbmVsIiwKKyAgICAgICAgIlJpZ2h0IjogIkjDuGpyZSIsCisgICAgICAgICJSb3dzOiI6ICJSw6Zra2VyOiIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiU2FtbWUgcmFtbWUgKF9zZWxmKSIsCisgICAgICAgICJTYW1wbGUiOiAiRWtzZW1wZWwiLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICJBZnN0YW5kIG1lbGxlbSBjZWxsZXIiLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICJMdWZ0IG1lbGxlbSBpbmRob2xkIG9nIGthbnRlciIsCisgICAgICAgICJTcGFjaW5nIjogIkFmc3RhbmQiLAorICAgICAgICAiVGFyZ2V0OiI6ICJQbGFjZXJpbmc6IiwKKyAgICAgICAgIlRleHR0b3AiOiAiVGVrc3R0b3AiLAorICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICJJbmRzw6Z0LWtuYXBwZW4gdmlya2VyIGlra2UgaSBNb3ppbGxhLWJhc2VyZWRlIGJyb3dzZXJlLiBCcnVnIEN0cmwtViBww6UgdGFzdGF0dXJldCBmb3IgYXQgaW5kc8OmdHRlLiIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogIlRpdGVsIChUb29sdGlwKToiLAorICAgICAgICAiVG9wIjogIlRvcCIsCisgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIlRvcHJhbW1lIChfdG9wKSIsCisgICAgICAgICJVUkw6IjogIlVSTDoiLAorICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICJMb2RyZXQgZnlsZCIsCisgICAgICAgICJWZXJ0aWNhbDoiOiAibG9kcmV0OiIsCisgICAgICAgICJXZWIgU2FmZTogIjogIldlYiBTYWZlOiAiLAorICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIlRhYmVsYnJlZGRlIiwKKyAgICAgICAgIldpZHRoIHVuaXQiOiAiQnJlZGRlZW5oZWQiLAorICAgICAgICAiV2lkdGg6IjogIkJyZWRkZToiLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICJEdSBza2FsIHNrcml2ZSBhbnRhbGxldCBhZiBzw7hqbGVyIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAiRHUgc2thbCBza3JpdmUgYW50YWxsZXQgYWYgcsOma2tlciIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIkR1IHNrYWwgYW5naXZlIGVuIFVSTCIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAiRHUgc2thbCBhbmdpdmUgZW4gbcOlbC1VUkwgZm9yIGxpbmtldCIsCisgICAgICAgICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGUgYSBsaW5rIjogIkR1IHNrYWwgbWFya2VyZSBub2dldCB0ZWtzdCBmb3IgYXQgaW5kc8OmdHRlIGV0IGh5cGVybGluayIsCisgICAgICAgICJZb3VyIERvY3VtZW50IGlzIG5vdCB3ZWxsIGZvcm1lZC4gQ2hlY2sgSmF2YVNjcmlwdCBjb25zb2xlIGZvciBkZXRhaWxzLiI6ICJEaXQgZG9rdW1lbnQgZXIgaWtrZSBzeW50YWt0aXNrIGtvcnJla3QuIMOFYm4gSmF2YXNjcmlwdCBrb25zb2xsZW4gZm9yIGF0IGbDpSBmbGVyZSBkZXRhbGplci4iLAorICAgICAgICAiYnV0dG9uX2JvbGQiOiAiZGUvYm9sZC5naWYiLAorICAgICAgICAiYnV0dG9uX2l0YWxpYyI6ICJkZS9pdGFsaWMuZ2lmIiwKKyAgICAgICAgImJ1dHRvbl91bmRlcmxpbmUiOiAiZGUvdW5kZXJsaW5lLmdpZiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2RlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YzM4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsMTU3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiJiM4MjEyOyBGb3JtYXQgJiM4MjEyOyIsCisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIsOcYmVyIGRpZXNlbiBFZGl0b3IiLAorICAgICJBZGRyZXNzIjogIkFkcmVzc2UiLAorICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIkhpbmRlcmdydW5kZmFyYmUiLAorICAgICJCb2xkIjogIkZldHQiLAorICAgICJCdWxsZXRlZCBMaXN0IjogIkF1ZnrDpGhsdW5nc2xpc3RlIiwKKyAgICAiQ2xlYW4gY29udGVudCBwYXN0ZWQgZnJvbSBXb3JkIjogIlZvbiBXb3JkIGVpbmdlZsO8Z3RlciBUZXh0IGJlcmVpbmlnZW4iLAorICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICJaZWljaGVuc2F0eiBGb3JtYXRpZXJ1bmdlbiBlbnRmZXJuZW4iLAorICAgICJDbGVhciBNU09mZmljZSB0YWdzIjogIk1TT2ZmaWNlIGZpbHRlciIsCisgICAgIkNsb3NlIjogIlNjaGxpZcOfZW4iLAorICAgICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIk9iamVrdCB3aXJkIGdlbmVyaWVydCIsCisgICAgIkNvcHkgc2VsZWN0aW9uIjogIktvcGllcmVuIiwKKyAgICAiQ3JlYXRlIFN0YXR1c2JhciI6ICJTdGF0dXNsZWlzdGUgd2lyZCBnZW5lcmllcnQiLAorICAgICJDcmVhdGUgVG9vbGJhciI6ICJXZXJremV1Z2xlaXN0ZSB3aXJkIGdlbmVyaWVydCIsCisgICAgIkN1cnJlbnQgc3R5bGUiOiAiRGVyemVpdGlnZXIgU3RpbCIsCisgICAgIkN1dCBzZWxlY3Rpb24iOiAiQXVzc2NobmVpZGVuIiwKKyAgICAiRGVjcmVhc2UgSW5kZW50IjogIkVpbnp1ZyB2ZXJrbGVpbmVybiIsCisgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIlRleHRyaWNodHVuZyB2b24gTGlua3MgbmFjaCBSZWNodHMiLAorICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJUZXh0cmljaHR1bmcgdm9uIFJlY2h0cyBuYWNoIExpbmtzIiwKKyAgICAiRmluaXNoaW5nIjogIkxhZGVuIHdpcmQgYWJnZXNjaGxvc3NlbiIsCisgICAgIkZvbnQgQ29sb3IiOiAiU2NocmlmdGZhcmJlIiwKKyAgICAiRm9ybWF0dGVkIjogIkZvcm1hdGllcnQiLAorICAgICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiWGluaGEgRnJhbWV3b3JrIHdpcmQgZ2VuZXJpZXJ0IiwKKyAgICAiSGVhZGluZyAxIjogIsOcYmVyc2NocmlmdCAxIiwKKyAgICAiSGVhZGluZyAyIjogIsOcYmVyc2NocmlmdCAyIiwKKyAgICAiSGVhZGluZyAzIjogIsOcYmVyc2NocmlmdCAzIiwKKyAgICAiSGVhZGluZyA0IjogIsOcYmVyc2NocmlmdCA0IiwKKyAgICAiSGVhZGluZyA1IjogIsOcYmVyc2NocmlmdCA1IiwKKyAgICAiSGVhZGluZyA2IjogIsOcYmVyc2NocmlmdCA2IiwKKyAgICAiSGVhZGluZ3MiOiAiw5xiZXJzY2hyaWZ0IFR5cCAxIGJpcyA2IiwKKyAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiSGlsZmUiLAorICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiSG9yaXpvbnRhbGUgTGluaWUiLAorICAgICJJbmNyZWFzZSBJbmRlbnQiOiAiRWluenVnIHZlcmdyw7bDn2VybiIsCisgICAgIkluaXQgZWRpdG9yIHNpemUiOiAiR3LDtsOfZSB3aXJkIGJlcmVjaG5ldCIsCisgICAgIkluc2VydCBUYWJsZSI6ICJUYWJlbGxlIGVpbmbDvGdlbiIsCisgICAgIkluc2VydCBXZWIgTGluayI6ICJIeXBlcmxpbmsgZWluZsO8Z2VuIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJCaWxkIGVpbmbDvGdlbi92ZXLDpG5kZXJuIiwKKyAgICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICJFaW5mw7xnZW4vw5xiZXJzY2hyZWliZW4iLAorICAgICJJdGFsaWMiOiAiS3Vyc2l2IiwKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAiWmVudHJpZXJ0IiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIkJsb2Nrc2F0eiIsCisgICAgIkp1c3RpZnkgTGVmdCI6ICJMaW5rc2LDvG5kaWciLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogIlJlY2h0c2LDvG5kaWciLAorICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiVGFzdGF0dXJrw7xyemVsIiwKKyAgICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIjogIkVkaXRvciB3aXJkIGdlbGFkZW4uIEJpdHRlIHdhcnRlbiAhIiwKKyAgICAiTG9hZGluZyBwbHVnaW4gJHBsdWdpbiI6ICJQbHVnaW4gJHBsdWdpbiB3aXJkIGdlbGFkZW4iLAorICAgICJOb3JtYWwiOiAiTm9ybWFsIChBYnNhdHopIiwKKyAgICAiT3JkZXJlZCBMaXN0IjogIk51bW1lcmllcnRlIExpc3RlIiwKKyAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiRWluZsO8Z2VuIGF1cyBkZXIgWndpc2NoZW5hYmxhZ2UiLAorICAgICJQYXRoIjogIlBmYWQiLAorICAgICJQcmludCBkb2N1bWVudCI6ICJEb2t1bWVudCBhdXNkcnVja2VuIiwKKyAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiV2llZGVyaG9sZW4iLAorICAgICJSZWdpc3RlciBwbHVnaW4gJHBsdWdpbiI6ICJQbHVnaW4gJHBsdWdpbiB3aXJkIHJlZ2lzdHJpZXJ0IiwKKyAgICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAiRm9ybWF0aWVydW5nIGVudGZlcm5lbiIsCisgICAgIlNhdmUgYXMiOiAic3BlaWNoZXJuIHVudGVyIiwKKyAgICAiU2VsZWN0IGFsbCI6ICJBbGxlcyBtYXJraWVyZW4iLAorICAgICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICJTZXR6ZSBGb3JtYXRpZXJ1bmcgYXVmIEFic2F0eiIsCisgICAgIlNwbGl0IEJsb2NrIjogIkJsb2NrIHRlaWxlbiIsCisgICAgIlN0cmlrZXRocm91Z2giOiAiRHVyY2hnZXN0cmljaGVuIiwKKyAgICAiU3Vic2NyaXB0IjogIlRpZWZnZXN0ZWxsdCIsCisgICAgIlN1cGVyc2NyaXB0IjogIkhvY2hnZXN0ZWxsdCIsCisgICAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICJEZXIgRWRpdG9yIHVudGVyc3TDvHR6dCBkaWUgZm9sZ2VuZGVuIGtvbWJpbmF0aW9uZW46IiwKKyAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiVGFiZWxsZW5yw6RuZGVyIGVpbi9hdXNibGVuZGVuIiwKKyAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIkhUTUwgUXVlbGx0ZXh0IGVpbi9hdXNzY2hhbHRlbiIsCisgICAgIlVuZGVybGluZSI6ICJVbnRlcnN0cmljaGVuIiwKKyAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiUsO8Y2tnw6RuZ2lnIiwKKyAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICJXb2xsZW4gc2llIFplaWNoZW5zYXR6ZmFyYmVuIGVudGZlcm5lbiIsCisgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIldvbGxlbiBTaWUgWmVpY2hlbnNhdHpncsO2w59lbiBlbnRmZXJuZW4iLAorICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiV29sbGVuIFNpZSBaZWljaGVuc2F0enR5cGVuIGVudGZlcm5lbiIsCisgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJTaWUgc2luZCBpbSBUZXh0LU1vZHVzLiBCZW51dHplbiBTaWUgZGVuIFs8Pl0gQnV0dG9uLCB1bSBpbiBkZW4gdmlzdWVsbGVuIE1vZHVzIChXWVNJV0lHKSB6dSBnZWxhbmdlbi4iLAorICAgICJpbnNlcnQgbGluZWJyZWFrIjogIkhhcnRlciBVbWJydWNoIGVpbmbDvGdlbiIsCisgICAgIm5ldyBwYXJhZ3JhcGgiOiAiTmV1ZXIgQWJzYXR6KFBhcmFncmFwaCkiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBYnNib3R0b20iOiAidW50ZW4gYsO8bmRpZyIsCisgICAgICAgICJBYnNtaWRkbGUiOiAibWl0dGlnIiwKKyAgICAgICAgIkFsaWdubWVudDoiOiAiQXVzcmljaHR1bmc6IiwKKyAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJBbHRlcm5hdGl2ZXIgVGV4dDoiLAorICAgICAgICAiQmFzZWxpbmUiOiAiR3J1bmRsaW5pZSIsCisgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJSYW5kc3TDpHJrZToiLAorICAgICAgICAiQm90dG9tIjogInVudGVuIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBYmJyZWNoZW4iLAorICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICJJbm5lbmFic3RhbmQ6IiwKKyAgICAgICAgIkNlbGwgc3BhY2luZzoiOiAiWmVsbGVuYWJzdGFuZDoiLAorICAgICAgICAiQ2xpY2sgYSBjb2xvci4uLiI6ICJGYXJiZSB3w6RobGVuIiwKKyAgICAgICAgIkNvbG9yOiAiOiAiRmFyYmU6ICIsCisgICAgICAgICJDb2xzOiI6ICJTcGFsdGVuOiIsCisgICAgICAgICJFbSI6ICJHZXZpZXJ0IiwKKyAgICAgICAgIkVubGFyZ2UgRWRpdG9yIjogIkVkaXRvciB2ZXJncsO2w59lcm4iLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkJpdHRlIGdlYmVuIHNpZSBoaWVyIGRpZSBCaWxkIFVSTCBlaW4iLAorICAgICAgICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICJTcGFsdGVuIG1pdCBmZXN0ZXIgQnJlaXRlIiwKKyAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogImbDvHIgQnJvd3NlciwgZGllIGtlaW5lIEJpbGRlciB1bnRlcnN0w7x0emVuIiwKKyAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICJob3Jpem9udGFsZXIgSW5oYWx0c2Fic3RhbmQiLAorICAgICAgICAiSG9yaXpvbnRhbDoiOiAiaG9yaXpvbnRhbDoiLAorICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiQmlsZCBWb3JhbnNpY2h0OiIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIkJpbGQgVVJMOiIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiQmlsZCBlaW5mw7xnZW4iLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIlZlcmtuw7xwZnVuZyBoaW56dWbDvGdlbi/DpG5kZXJuIiwKKyAgICAgICAgIkxheW91dCI6ICJMYXlvdXQiLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJsZWVyIGxhc3NlbiBmw7xyIGtlaW5lbiBSYW5kIiwKKyAgICAgICAgIkxlZnQiOiAibGlua3MiLAorICAgICAgICAiTWlkZGxlIjogInplbnRyaWVydCIsCisgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIk5ldWVzIEZlbnN0ZXIgKF9ibGFuaykiLAorICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJrLkEuIChpbXBsaXppdCkiLAorICAgICAgICAiTm90IHNldCI6ICJuaWNodCBlaW5nZXN0ZWxsdCIsCisgICAgICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICJTcGFsdGVuYW56YWhsIiwKKyAgICAgICAgIk51bWJlciBvZiByb3dzIjogIlplaWxlbmFuemFobCIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPdGhlciI6ICJBbmRlcmVzIiwKKyAgICAgICAgIlBlcmNlbnQiOiAiUHJvemVudCIsCisgICAgICAgICJQaXhlbHMiOiAiUGl4ZWwiLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJQb3NpdGlvbmllcnVuZyBkaWVzZXMgQmlsZGVzIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiUG9zaXRpb25pZXJ1bmcgZGVyIFRhYmVsbGUiLAorICAgICAgICAiUHJldmlldyI6ICJWb3JhbnNpY2h0IiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJWb3JhbnNpY2h0IGRlcyBCaWxkZXMgaW4gZWluZW0gbmV1ZW4gRmVuc3RlciIsCisgICAgICAgICJSZWdpc3RlciBib3R0b20gcGFuZWwiOiAiVW50ZXJlcyBQYW5lbCB3aXJkIGdlbmVyaWVydCIsCisgICAgICAgICJSZWdpc3RlciBsZWZ0IHBhbmVsIjogIkxpbmtlcyBQYW5lbCB3aXJkIGdlbmVyaWVydCIsCisgICAgICAgICJSZWdpc3RlciByaWdodCBwYW5lbCI6ICJSZWNodGVzIFBhbmVsIHdpcmQgZ2VuZXJpZXJ0IiwKKyAgICAgICAgIlJlZ2lzdGVyIHRvcCBwYW5lbCI6ICJPYmVyZXMgUGFuZWwgd2lyZCBnZW5lcmllcnQiLAorICAgICAgICAiUmlnaHQiOiAicmVjaHRzIiwKKyAgICAgICAgIlJvd3M6IjogIlplaWxlbjoiLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlNlbGJlciBSYWhtZW4gKF9zZWxmKSIsCisgICAgICAgICJTYW1wbGUiOiAiQmVpc3BpZWwiLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICJSYXVtIHp3aXNjaGVuIGFuZ3JlbnplbmRlbiBaZWxsZW4iLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICJSYXVtIHp3aXNjaGVuIEluaGFsdCB1bmQgUmFuZCBkZXIgWmVsbGUiLAorICAgICAgICAiU3BhY2luZyI6ICJBYnN0YW5kIiwKKyAgICAgICAgIlRhcmdldDoiOiAiWmllbDoiLAorICAgICAgICAiVGV4dHRvcCI6ICJvYmVuIGLDvG5kaWciLAorICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICJBdXMgU2ljaGVyaGVpdHNncsO8bmRlbiBkw7xyZmVuIFNrcmlwdGUgbm9ybWFsZXJ3ZWlzZSBuaWNodCBhdWYgQXVzc2NobmVpZGVuL0tvcGllcmVuL0VpbmbDvGdlbiB6dWdyZWlmZW4uIEJlbnV0emVuIFNpZSBiaXR0ZSBkaWUgZW50c3ByZWNoZW5kZW4gVGFzdGF0dXItS29tbWFuZG9zIChTdHJnICsgeC9jL3YpLiIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogIlRpdGVsIChUb29sdGlwKToiLAorICAgICAgICAiVG9wIjogIm9iZW4iLAorICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJPYmVyc3RlciBSYWhtZW4gKF90b3ApIiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIsCisgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogInZlcnRpa2FsZXIgSW5oYWx0c2Fic3RhbmQiLAorICAgICAgICAiVmVydGljYWw6IjogInZlcnRpa2FsOiIsCisgICAgICAgICJXZWIgU2FmZTogIjogIldlYiBTYWZlOiAiLAorICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIlRhYmVsbGVuYnJlaXRlIiwKKyAgICAgICAgIldpZHRoIHVuaXQiOiAiR3LDtsOfZW5laW5oZWl0IiwKKyAgICAgICAgIldpZHRoOiI6ICJCcmVpdGU6IiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiQml0dGUgZ2ViZW4gU2llIGRpZSBBbnphaGwgZGVyIFNwYWx0ZW4gYW4iLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICJCaXR0ZSBnZWJlbiBTaWUgZGllIEFuemFobCBkZXIgWmVpbGVuIGFuIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiQml0dGUgZ2ViZW4gU2llIGRpZSBVUkwgZWluIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICJTaWUgbcO8c3NlbiBlaW5lIFppZWwtVVJMIGFuZ2ViZW4gZsO8ciBkaWUgVmVya27DvHBmdW5nIGFuZ2ViZW4iLAorICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRlIGEgbGluayI6ICJTaWUgbcO8c3NlbiBlaW5lbiBUZXh0IG1hcmtpZXJlbiwgdW0gZWluZW4gTGluayB6dSBlcnN0ZWxsZW4iLAorICAgICAgICAiWW91ciBEb2N1bWVudCBpcyBub3Qgd2VsbCBmb3JtZWQuIENoZWNrIEphdmFTY3JpcHQgY29uc29sZSBmb3IgZGV0YWlscy4iOiAiSWhyIERva3VtZW50IGlzdCBpbiBrZWluZW0gc2F1YmVyZW4gRm9ybWF0LiBCZW51dHplbiBTaWUgZGllIEphdmFzY3JpcHQgQ29uc29sZSBmw7xyIHdlaXRlcmUgSW5mb3JtYXRpb25lbi4iCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2VlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9lZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTg3NDM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9lZS5qcwpAQCAtMCwwICsxLDQ4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIlRlYXZlIHRvaW1ldGkga29odGEiLAorICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIlRhdXN0YSB2w6RydiIsCisgICAgIkJvbGQiOiAiUGFrcyIsCisgICAgIkJ1bGxldGVkIExpc3QiOiAiVMOkcHBsb2VuZCIsCisgICAgIkNvcHkgc2VsZWN0aW9uIjogIktvcGVlcmkiLAorICAgICJDdXJyZW50IHN0eWxlIjogIktpcmphc3RpaWwiLAorICAgICJDdXQgc2VsZWN0aW9uIjogIkzDtWlrYSIsCisgICAgIkRlY3JlYXNlIEluZGVudCI6ICJWw6RoZW5kYSB0YWFuZXQiLAorICAgICJGb250IENvbG9yIjogIkZvbmRpIHbDpHJ2IiwKKyAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiU3Bpa2tlciIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICJIb3Jpc29udGFhbGpvb24iLAorICAgICJJbmNyZWFzZSBJbmRlbnQiOiAiU3V1cmVuZGEgdGFhbmV0IiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIkxpc2EgdGFiZWwiLAorICAgICJJbnNlcnQgV2ViIExpbmsiOiAiTGlzYSB2aWl0IiwKKyAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJMaXNhIHBpbHQiLAorICAgICJJdGFsaWMiOiAiS3Vyc2lpdiIsCisgICAgIkp1c3RpZnkgQ2VudGVyIjogIkpvb25kYSBrZXNrZWxlIiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIlLDtsO2cGpvb25kYSIsCisgICAgIkp1c3RpZnkgTGVmdCI6ICJKb29uZGEgdmFzYWt1bGUiLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogIkpvb25kYSBwYXJlbWFsZSIsCisgICAgIk9yZGVyZWQgTGlzdCI6ICJOdW1tZXJkdXMiLAorICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJLbGVlYmkiLAorICAgICJQYXRoIjogIlBhdGgiLAorICAgICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJUZWUgdXVlc3RpIiwKKyAgICAiU3RyaWtldGhyb3VnaCI6ICJMw6RiaWtyaWlwc3V0YXR1ZCIsCisgICAgIlN1YnNjcmlwdCI6ICJBbGxpbmRla3MiLAorICAgICJTdXBlcnNjcmlwdCI6ICLDnGxhaW5kZWtzIiwKKyAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIkhUTUwvdGF2YWxpbmUgdmFhZGUiLAorICAgICJVbmRlcmxpbmUiOiAiQWxsYWtyaWlwc3V0YXR1ZCIsCisgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlbDtXRhIHRhZ2FzaSIsCisgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJTYSBvbGVkIHRla3N0aXJlemlpbWlzLiAgS2FzdXRhIG51cHB1IFs8Pl0gbMO8bGl0YW1ha3MgdGFnYXNpIFdZU0lXSUcgcmV6aWltaS4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJDYW5jZWwiOiAiTG9vYnUiLAorICAgICAgICAiRW5sYXJnZSBFZGl0b3IiOiAiU3V1cmVuZGEgdG9pbWV0aSBha2VuIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9lbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4OWI1NgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvZWwuanMKQEAgLTAsMCArMSw2MSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICLOoM67zrfPgc6/z4bOv8+Bzq/Otc+CIiwKKyAgICAiQmFja2dyb3VuZCBDb2xvciI6ICLOp8+Bz47OvM6xIM6mz4zOvc+Ezr/PhSIsCisgICAgIkJvbGQiOiAizojOvc+Ezr/Ovc6xIiwKKyAgICAiQnVsbGV0ZWQgTGlzdCI6ICLOms6/z4XOus66zq/OtM61z4IiLAorICAgICJDb3B5IHNlbGVjdGlvbiI6ICLOkc69z4TOuc6zz4HOsc+Gzq4iLAorICAgICJDdXJyZW50IHN0eWxlIjogIs6gzrHPgc+Ozr0gz4PPhM+FzrsiLAorICAgICJDdXQgc2VsZWN0aW9uIjogIs6Rz4DOv866zr/PgM6uIiwKKyAgICAiRGVjcmVhc2UgSW5kZW50IjogIs6czrXOr8+Jz4POtyDOlc+Dzr/Ph86uz4IiLAorICAgICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICLOms6xz4TOtc+NzrjPhc69z4POtyDOsc+BzrnPg8+EzrXPgc6sIM+Az4HOv8+CIM60zrXOvs65zqwiLAorICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICLOms6xz4TOtc+NzrjPhc69z4POtyDOsc+Az4wgzrTOtc6+zrnOrCDPgM+Bzr/PgiDPhM6xIM6xz4HOuc+Dz4TOtc+BzqwiLAorICAgICJGb250IENvbG9yIjogIs6nz4HPjs68zrEgzpPPgc6xzrzOvM6xz4TOv8+DzrXOuc+BzqzPgiIsCisgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIs6Szr/Ors64zrXOuc6xIiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogIs6fz4HOuc62z4zOvc+EzrnOsSDOk8+BzrHOvM68zq4iLAorICAgICJJbmNyZWFzZSBJbmRlbnQiOiAizpHPjc6+zrfPg863IM6Vz4POv8+Hzq7PgiIsCisgICAgIkluc2VydCBUYWJsZSI6ICLOlc65z4POsc6zz4nOs86uIM6gzq/Ovc6xzrrOsSIsCisgICAgIkluc2VydCBXZWIgTGluayI6ICLOlc65z4POsc6zz4nOs86uIM6jz4XOvc60zq3Pg868zr/PhSIsCisgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAizpXOuc+DzrHOs8+JzrPOri/OpM+Bzr/PgM6/z4DOv86vzrfPg863IM6VzrnOus+Mzr3Osc+CIiwKKyAgICAiSXRhbGljIjogIs6gzrvOrM6zzrnOsSIsCisgICAgIkp1c3RpZnkgQ2VudGVyIjogIs6jz4TOv86vz4fOuc+DzrcgzprOrc69z4TPgc6/IiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIs6gzrvOrs+BzrfPgiDOo8+Ezr/Or8+HzrnPg863IiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogIs6jz4TOv86vz4fOuc+DzrcgzpHPgc65z4PPhM61z4HOrCIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAizqPPhM6/zq/Ph865z4POtyDOlM61zr7Ouc6sIiwKKyAgICAiT3JkZXJlZCBMaXN0IjogIs6Rz4HOr864zrzOt8+DzrciLAorICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICLOlc+AzrnOus+MzrvOu863z4POtyIsCisgICAgIlBhdGgiOiAizpTOuc6xzrTPgc6/zrzOriIsCisgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIs6Vz4DOsc69zrHPhs6/z4HOrCDOsc+Az4wgzrHOvc6xzq/Pgc61z4POtyIsCisgICAgIlN0cmlrZXRocm91Z2giOiAizpTOuc6xzrPPgc6xzrzOvM6tzr3OsSIsCisgICAgIlN1YnNjcmlwdCI6ICLOlM61zq/Ous+EzrfPgiIsCisgICAgIlN1cGVyc2NyaXB0IjogIs6UzrXOr866z4TOt8+CIiwKKyAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIs6Vzr3Osc67zrvOsc6zzq4gz4POtS/Osc+Az4wgSFRNTCIsCisgICAgIlVuZGVybGluZSI6ICLOpc+Azr/Os8+BzrHOvM68zrnPg868zq3Ovc6xIiwKKyAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAizpHOvc6xzq/Pgc61z4POtyDPhM61zrvOtc+Fz4TOsc6vzrHPgiDOtc69zq3Pgc6zzrXOuc6xz4IiLAorICAgICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAizpXOr8+Dz4TOtSDPg861IFRFWFQgTU9ERS4gIM6nz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgz4TOvyDOus6/z4XOvM+Azq8gWzw+XSDOs865zrEgzr3OsSDOtc+AzrHOvc6tz4HOuM61z4TOtSDPg8+Ezr8gV1lTSVdJRy4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciLAorICAgICAgICAiRW5sYXJnZSBFZGl0b3IiOiAizpzOtc6zzq3Ovc64z4XOvc+DzrcgzrXPgM61zr7Otc+BzrPOsc+Dz4TOriIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAizpXOuc+DzrHOs8+JzrPOri/OpM+Bzr/PgM6/z4DOv86vzrfPg863IM+Dz43Ovc60zrXPg868zr/PhSIsCisgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIs6dzq3OvyDPgM6xz4HOrM64z4XPgc6/IChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAizprOsc69zq3Ovc6xICjPh8+Bzq7Pg863IM6xz4DPjM67z4XPhM6/z4UpIiwKKyAgICAgICAgIk9LIjogIs6Vzr3PhM6szr7Otc65IiwKKyAgICAgICAgIk90aGVyIjogIs6RzrvOu86/IiwKKyAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICLOis60zrnOvyBmcmFtZSAoX3NlbGYpIiwKKyAgICAgICAgIlRhcmdldDoiOiAiVGFyZ2V0OiIsCisgICAgICAgICJUaGUgZnVsbCBzY3JlZW4gbW9kZSBpcyBrbm93biB0byBjYXVzZSBwcm9ibGVtcyB3aXRoIEludGVybmV0IEV4cGxvcmVyLCBkdWUgdG8gYnJvd3NlciBidWdzIHRoYXQgd2Ugd2VyZW4iOiAizpcgzrrOsc+EzqzPg8+EzrHPg863IM+AzrvOrs+BzrfPgiDOv864z4zOvc63z4Igzq3Ph861zrkgz4DPgc6/zrLOu86uzrzOsc+EzrEgzrzOtSDPhM6/zr0gSW50ZXJuZXQgRXhwbG9yZXIsIM67z4zOs8+JIM+Dz4bOsc67zrzOrM+Ez4nOvSDPg8+Ezr/OvSDOr860zrnOvyDPhM6/zr0gYnJvd3Nlci4gIM6Rzr0gz4TOvyDPg8+Nz4PPhM63zrzOsSDPg86xz4IgzrXOr869zrHOuSBXaW5kb3dzIDl4IM68z4DOv8+BzrXOryDOus6xzrkgzr3OsSDPh8+BzrXOuc6xz4PPhM61zq/PhM61IHJlYm9vdC4gzpHOvSDOtc6vz4PPhM61IM+Dzq/Os86/z4XPgc6/zrksIM+AzrHPhM6uz4PPhM61IM6fzpouIiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAizqTOr8+EzrvOv8+CICh0b29sdGlwKToiLAorICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICLOoM6szr3PiSBmcmFtZSAoX3RvcCkiLAorICAgICAgICAiVVJMOiI6ICJVUkw6IiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICLOoM+Bzq3PgM61zrkgzr3OsSDOtc65z4POrM6zzrXPhM61IM+Ezr8gVVJMIM+Azr/PhSDOv860zrfOs861zq8gzrHPhc+Ez4zPgiDOvyDPg8+Nzr3OtM61z4POvM6/z4IiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2VzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmIyMzVmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9lcy5qcwpAQCAtMCwwICsxLDE1OSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlcyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICImIzgyMTI7IGZvbnQgJiM4MjEyOyI6ICImIzgyMTI7IGZ1ZW50ZSAmIzgyMTI7IiwKKyAgICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICImIzgyMTI7IGZvcm1hdG8gJiM4MjEyOyIsCisgICAgIiYjODIxMjsgc2l6ZSAmIzgyMTI7IjogIiYjODIxMjsgdGFtYcOxbyAmIzgyMTI7IiwKKyAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiU29icmUgZXN0ZSBFZGl0b3IiLAorICAgICJBZGRyZXNzIjogIkRpcmVjY2nDs24iLAorICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIkNvbG9yIGRlIGZvbmRvIiwKKyAgICAiQm9sZCI6ICJOZWdyaXRhIiwKKyAgICAiQnVsbGV0ZWQgTGlzdCI6ICJMaXN0YSBubyBudW1lcmFkYSIsCisgICAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICJMaW1waWFyIGVsIGNvbnRlbmlkbyBwZWdhZG8gZGVzZGUgV29yZCIsCisgICAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogIkJvcnJhciBsYXMgZXRpcXVldGFzIGRlIGZ1ZW50ZSIsCisgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiQm9ycmFyIGV0aXF1ZXRhcyBkZSBNU09mZmljZSIsCisgICAgIkNsb3NlIjogIkNlcnJhciIsCisgICAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAiQ29uc3RydXllbmRvIG9iamV0byIsCisgICAgIkNvcHkgc2VsZWN0aW9uIjogIkNvcGlhciIsCisgICAgIkNyZWF0ZSBTdGF0dXNiYXIiOiAiQ3JlYXIgYmFycmEgZGUgZXN0YWRvIiwKKyAgICAiQ3JlYXRlIFRvb2xiYXIiOiAiQ3JlYXIgYmFycmEgZGUgaGVycmFtaWVudGFzIiwKKyAgICAiQ3VycmVudCBzdHlsZSI6ICJFc3RpbG8gYWN0dWFsIiwKKyAgICAiQ3V0IHNlbGVjdGlvbiI6ICJDb3J0YXIiLAorICAgICJEZWNyZWFzZSBJbmRlbnQiOiAiUmVkdWNpciBzYW5ncsOtYSIsCisgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIkRpcmVjY2nDs24gZGUgaXpxdWllcmRhIGEgZGVyZWNoYSIsCisgICAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIkRpcmVjY2nDs24gZGUgZGVyZWNoYSBhIGl6cXVpZXJkYSIsCisgICAgIkZpbmlzaGluZyI6ICJGaW5hbGl6YW5kbyIsCisgICAgIkZvbnQgQ29sb3IiOiAiQ29sb3IgZGUgbGEgZnVlbnRlIiwKKyAgICAiRm9ybWF0dGVkIjogIkZvcm1hdGVhZG8iLAorICAgICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiR2VuZXJhciBYaW5oYSBmcmFtZXdvcmsiLAorICAgICJIZWFkaW5nIDEiOiAiQ2FiZWNlcmEgMSIsCisgICAgIkhlYWRpbmcgMiI6ICJDYWJlY2VyYSAyIiwKKyAgICAiSGVhZGluZyAzIjogIkNhYmVjZXJhIDMiLAorICAgICJIZWFkaW5nIDQiOiAiQ2FiZWNlcmEgNCIsCisgICAgIkhlYWRpbmcgNSI6ICJDYWJlY2VyYSA1IiwKKyAgICAiSGVhZGluZyA2IjogIkNhYmVjZXJhIDYiLAorICAgICJIZWFkaW5ncyI6ICJDYWJlY2VyYXMiLAorICAgICJIZWxwIHVzaW5nIGVkaXRvciI6ICJBeXVkYSIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICJSZWdsYSBob3Jpem9udGFsIiwKKyAgICAiSW5jcmVhc2UgSW5kZW50IjogIkF1bWVudGFyIHNhbmdyw61hIiwKKyAgICAiSW5pdCBlZGl0b3Igc2l6ZSI6ICJJbmljaWFyIGVsIHRhbWHDsW8gZGVsIGVkaXRvciIsCisgICAgIkluc2VydCBUYWJsZSI6ICJBw7FhZGlyIHVuYSB0YWJsYSIsCisgICAgIkluc2VydCBXZWIgTGluayI6ICJJbnNlcnRhciBlbmxhY2Ugd2ViIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJbnNlcnRhci9tb2RpZmljYXIgaW1hZ2VuIiwKKyAgICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICJJbnNlcnRhci9Tb2JyZWVzY3JpYmlyIiwKKyAgICAiSXRhbGljIjogIkN1cnNpdmEiLAorICAgICJKdXN0aWZ5IENlbnRlciI6ICJBbGluZWFyIGFsIGNlbnRybyIsCisgICAgIkp1c3RpZnkgRnVsbCI6ICJKdXN0aWZpY2FyIiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogIkFsaW5lYXIgYSBsYSBpenF1aWVyZGEiLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogIkFsaW5lYXIgYSBsYSBkZXJlY2hhIiwKKyAgICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogIkF0YWpvcyBkZSB0ZWNsYWRvIiwKKyAgICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIjogIkNhcmdhIGVuIHByb2Nlc28uIFBvciBmYXZvciBlc3BlcmUuIiwKKyAgICAiTG9hZGluZyBwbHVnaW4gJHBsdWdpbiI6ICJDYXJnYW5kbyBlbCBwbHVnaW4gJHBsdWdpbiIsCisgICAgIk5vcm1hbCI6ICJOb3JtYWwiLAorICAgICJPcmRlcmVkIExpc3QiOiAiTGlzdGEgbnVtZXJhZGEiLAorICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJQZWdhciBkZXNkZSBlbCBwb3J0YXBhcGVsZXMiLAorICAgICJQYXRoIjogIlJ1dGEiLAorICAgICJQcmludCBkb2N1bWVudCI6ICJJbXByaW1pciBkb2N1bWVudG8iLAorICAgICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJSZWhhY2VyIiwKKyAgICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAiUmVnaXN0cm8gZGUgcGx1Z2luICRwbHVnaW4iLAorICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICJCb3JyYXIgZm9ybWF0byIsCisgICAgIlNhdmUgYXMiOiAiR3VhcmRhciBjb21vIiwKKyAgICAiU2VsZWN0IGFsbCI6ICJTZWxlY2Npb25hciB0b2RvIiwKKyAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiRVN0YWJsZWNlciBlbCBmb3JtYXRvIGEgcGFycmFmbyIsCisgICAgIlNwbGl0IEJsb2NrIjogIkRpdmlkaXIgZWwgYmxvcXVlIiwKKyAgICAiU3RyaWtldGhyb3VnaCI6ICJUYWNoYWRvIiwKKyAgICAiU3Vic2NyaXB0IjogIlN1YsOtbmRpY2UiLAorICAgICJTdXBlcnNjcmlwdCI6ICJTdXBlcsOtbmRpY2UiLAorICAgICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAiRWwgZWRpdG9yIHByb3BvcmNpb25hIGxhcyBzaWd1aWVudGVzIGNvbWJpbmFjaW9uZXM6IiwKKyAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiQcOxYWRpci9RdWl0YXIgYm9yZGVzIiwKKyAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIlZlciBIVE1MIiwKKyAgICAiVW5kZXJsaW5lIjogIlN1YnJheWFkbyIsCisgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkRlc2hhY2VyIiwKKyAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICLCv0Rlc2VhIGVsaW1pbmFyIGxhcyBkZWZpbmljaW9uZXMgZGUgY29sb3IgZGUgZnVlbnRlPyIsCisgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIsK/RGVzZWEgZWxpbWluYXIgbGFzIGRlZmluaWNpb25lcyBkZSB0YW1hw7FvIGRlIGZ1ZW50ZT8iLAorICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiwr9EZXNlYSBlbGltaW5hciBsYXMgZGVmaW5pY2lhb25lcyBkZSB0aXBvIGRlIGZ1ZW50ZT8iLAorICAgICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiU2UgZW5jdWVudHJhIGVuIE1PRE8gVEVYVE8uIFVzZSBlbCBib3TDs24gWzw+XSBwYXJhIGNhbWJpYXIgZGUgbnVldm8gYWwgbW9kbyBXWVNJV1lHIiwKKyAgICAiaW5zZXJ0IGxpbmVicmVhayI6ICJJbnNlcnRhciBzYWx0byBkZSBsw61uZWEiLAorICAgICJuZXcgcGFyYWdyYXBoIjogIk51ZXZvIHBhcnJhZm8iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBYnNib3R0b20iOiAiSW5mZXJpb3IgYWJzb2x1dG8iLAorICAgICAgICAiQWJzbWlkZGxlIjogIk1lZGlvIEFic29sdXRvIiwKKyAgICAgICAgIkFsaWdubWVudDoiOiAiQWxpbmVhY2nDs246IiwKKyAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJUZXh0byBhbHRlcm5hdGl2bzoiLAorICAgICAgICAiQmFzZWxpbmUiOiAiTMOtbmVhIGJhc2UiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiVGFtYcOxbyBkZWwgYm9yZGU6IiwKKyAgICAgICAgIkJvdHRvbSI6ICJJbmZlcmlvciIsCisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICJSZWxsZW5vIGRlIGNlbGRhczoiLAorICAgICAgICAiQ2VsbCBzcGFjaW5nOiI6ICJFc3BhY2lhZG8gZW50cmUgY2VsZGFzOiIsCisgICAgICAgICJDbGljayBhIGNvbG9yLi4uIjogIlNlbGVjY2lvbmUgdW4gY29sb3IuLi4iLAorICAgICAgICAiQ29sb3I6ICI6ICJDb2xvcjogIiwKKyAgICAgICAgIkNvbHM6IjogIkNvbHVtbmFzOiIsCisgICAgICAgICJFbSI6ICJFbSIsCisgICAgICAgICJFbmxhcmdlIEVkaXRvciI6ICJFZGl0b3IgYSBwYW50YWxsYSBjb21wbGV0YSIsCisgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiIiwKKyAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiQ29sdW1uYXMgZGUgYW5jaG8gZmlqbyIsCisgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJQYXJhIG5hdmVnYWRvcmVzIHF1ZSBubyBzb3BvcnRhbiBpbcOhZ2VuZXMiLAorICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIlJlbGxlbm8gaG9yaXpvbnRhbCIsCisgICAgICAgICJIb3Jpem9udGFsOiI6ICJob3Jpem9udGFsOiIsCisgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICJQcmV2aXN1YWxpemFjacOzbiBkZSBsYSBpbWFnZW46IiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiSW1hZ2VuIFVSTDoiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIkluc2VydGFyIHVuYSBpbWFnZW4iLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIkluc2VydGFyL01vZGlmaWNhciB1biBlbmxhY2UiLAorICAgICAgICAiTGF5b3V0IjogIkRpc3RyaWJ1Y2nDs24iLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJWYWPDrW8gc2kgbm8gZGVzZWEgbmluZ8O6biBib3JkZSIsCisgICAgICAgICJMZWZ0IjogIkl6cXVpZXJkYSIsCisgICAgICAgICJNaWRkbGUiOiAiTWVkaW8iLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOdWV2YSB2ZW50YW5hIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiVmFjw61vICggdXNhciBpbXBsw61jaXRvICkiLAorICAgICAgICAiTm90IHNldCI6ICJObyBkZWZpbmlkbyIsCisgICAgICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICJOw7ptZXJvIGRlIGNvbHVtbmFzIiwKKyAgICAgICAgIk51bWJlciBvZiByb3dzIjogIk7Dum1lcm8gZGUgZmlsYXMiLAorICAgICAgICAiT0siOiAiQWNlcHRhciIsCisgICAgICAgICJPdGhlciI6ICJPdHJvIiwKKyAgICAgICAgIlBlcmNlbnQiOiAiUG9yY2VudGFqZSIsCisgICAgICAgICJQaXhlbHMiOiAiUGl4ZWxzIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zaWNpw7NuIGRlIGxhIGltYWdlbiIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIlBvc2ljacOzbiBkZSBlc3RhIHRhYmxhIiwKKyAgICAgICAgIlByZXZpZXciOiAiUHJldmlzdWFsaXphciIsCisgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiUHJldmlzdWFsaXphciBlbiB1bmEgbnVldmEgdmVudGFuYSIsCisgICAgICAgICJSZWdpc3RlciBib3R0b20gcGFuZWwiOiAiUmVnaXN0YXIgcGFuZWwgaW5mZXJpb3IiLAorICAgICAgICAiUmVnaXN0ZXIgbGVmdCBwYW5lbCI6ICJSZWdpc3RyYXIgcGFuZWwgaXpxdWllcmRvIiwKKyAgICAgICAgIlJlZ2lzdGVyIHJpZ2h0IHBhbmVsIjogIlJlZ2lzdHJhciBwYW5lbCBkZXJlY2hvIiwKKyAgICAgICAgIlJlZ2lzdGVyIHRvcCBwYW5lbCI6ICJSZWdpc3RhciBwYW5lbCBzdXBlcmlvciIsCisgICAgICAgICJSaWdodCI6ICJEZXJlY2hhIiwKKyAgICAgICAgIlJvd3M6IjogIkZpbGFzOiIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiTWlzbW8gbWFyY28gKF9zZWxmKSIsCisgICAgICAgICJTYW1wbGUiOiAiTXVlc3RyYSIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIkVzcGFjaWFkbyBlbnRyZSBjZWxkYXMgYWR5YWNlbnRlcyIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIkVzY2FwY2lvIGVudHJlIGVsIGNvbnRlbmlkbyB5IGVsIGJvcmRlIGRlIGxhIGNlbGRhIiwKKyAgICAgICAgIlNwYWNpbmciOiAiRXNwYWNpYWRvIiwKKyAgICAgICAgIlRhcmdldDoiOiAiRGVzdGlubzoiLAorICAgICAgICAiVGV4dHRvcCI6ICJUZXh0byBTdXBlcmlvciIsCisgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIkVsIGJvdMOzbiBkZSBwZWdhciBubyBmdW5jaW9uYSBlbiBsb3MgbmF2ZWdhZG9yZXMgZGUgTW96aWxsYSBwb3IgbW90aXZvcyBkZSBzZWd1cmlkYWQuIFByZXNpb25lIENUUkwtViBlbiBzdSB0ZWNsYWRvIHBhcmEgcGVnYXJsbyBkaXJlY3RhbWVudGUiLAorICAgICAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUw610dWxvIChUb29sdGlwKToiLAorICAgICAgICAiVG9wIjogIlN1cGVyaW9yIiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiTWFyY28gc3VwZXJpb3IgKF90b3ApIiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIsCisgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIlJlbGxlbm8gVmVydGljYWwiLAorICAgICAgICAiVmVydGljYWw6IjogIlZlcnRpY2FsOiIsCisgICAgICAgICJXZWIgU2FmZTogIjogIkNvbG9yIHdlYjogIiwKKyAgICAgICAgIldpZHRoIG9mIHRoZSB0YWJsZSI6ICJBbmNobyBkZSBsYSB0YWJsYSIsCisgICAgICAgICJXaWR0aCB1bml0IjogIlVuaWRhZCBkZSBhbmNodXJhIiwKKyAgICAgICAgIldpZHRoOiI6ICJBbmNobzoiLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICJEZWJlIGludHJvZHVjaXIgdW4gbsO6bWVybyBkZSBjb2x1bW5hcyIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIkRlYmUgaW50cm9kdWNpciB1biBuw7ptZXJvIGRlIGZpbGFzIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiRGViZSBpbnRyb2R1Y2lyIGxhIFVSTCIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAiRGViZSBpbnRyb2R1Y2lyIGxhIFVSTCBhIGRvbmRlIGFwdW50YSBlc3RlIGVubGFjZSIsCisgICAgICAgICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGUgYSBsaW5rIjogIk5lY2VzaXRhIHNlbGVjY2lvbmFyIGFsZ8O6biB0ZXh0byBhbnRlcyBkZSBjcmVhciB1biBsaW5rIiwKKyAgICAgICAgIllvdXIgRG9jdW1lbnQgaXMgbm90IHdlbGwgZm9ybWVkLiBDaGVjayBKYXZhU2NyaXB0IGNvbnNvbGUgZm9yIGRldGFpbHMuIjogIlN1IGRvY3VtZW50byBubyBlc3TDoSBiaWVuIGZvcm1hZG8uIENvbXBydWViZSBsYSBjb25zb2xhIGRlIEphdmFTY3JpcHQgcGFyYSBvYnRlbmVyIG3DoXMgZGV0YWxsZXMiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2V1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9ldS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTk2MmFlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9ldS5qcwpAQCAtMCwwICsxLDE2MCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJldSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiYjODIxMjsgRm9ybWF0dWEgJiM4MjEyOyIsCisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIkVkaXRvcmVhcmkgYnVydXouLi4iLAorICAgICJBZGRyZXNzIjogIkhlbGJpZGVhIiwKKyAgICAiQmFja2dyb3VuZCBDb2xvciI6ICJBdHpla28ga29sb3JlYSIsCisgICAgIkJvbGQiOiAiTG9kaWEiLAorICAgICJCdWxsZXRlZCBMaXN0IjogIlplcnJlbmRhIGV6IG9yZGVuYXR1YSIsCisgICAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICJXb3JkLWV0aWsgaXRzYXRzaXRha28gZWR1a2lhIGV6YWJhdHUiLAorICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICJFemFiYXR1IHRlc3R1YXJlbiBlemF1Z2FycmlhayIsCisgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiTVNPZmZpY2UgZXRpa2V0YWsgZXphYmF0dSIsCisgICAgIkNsb3NlIjogIkl0eGkiLAorICAgICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIk9iamVrdHVhIGVyYWlraXR6ZW4iLAorICAgICJDb3B5IHNlbGVjdGlvbiI6ICJLb3BpYXR1IGhhdXRha2V0YSIsCisgICAgIkNyZWF0ZSBTdGF0dXNiYXIiOiAiRWdvZXJhLWJhcnJhIHNvcnR1IiwKKyAgICAiQ3JlYXRlIFRvb2xiYXIiOiAiVHJlc25hLWJhcnJhIHNvcnR1IiwKKyAgICAiQ3VycmVudCBzdHlsZSI6ICJVbmVrbyBlc3RpbG9hIiwKKyAgICAiQ3V0IHNlbGVjdGlvbiI6ICJFYmFraSBoYXV0YWtldGEiLAorICAgICJEZWNyZWFzZSBJbmRlbnQiOiAiS29za2EgaGFuZGl0dSIsCisgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIkV6a2VycmV0aWsgZXNrdWluZXRhcmFrbyBub3JhYmlkZWEiLAorICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJFc2t1aW5ldGlrIGV6a2VycmV0YXJha28gbm9yYWJpZGVhIiwKKyAgICAiRmluaXNoaW5nIjogIkJ1a2F0emVuIiwKKyAgICAiRm9udCBDb2xvciI6ICJUZXN0dS1rb2xvcmVhIiwKKyAgICAiRm9ybWF0dGVkIjogIkZvcm1hdGVhdHVhIiwKKyAgICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIlhpbmhhIEZyYW1ld29yayBzb3J0emVuIiwKKyAgICAiSGVhZGluZyAxIjogIkdvaWJ1cnVhIDEiLAorICAgICJIZWFkaW5nIDIiOiAiR29pYnVydWEgMiIsCisgICAgIkhlYWRpbmcgMyI6ICJHb2lidXJ1YSAzIiwKKyAgICAiSGVhZGluZyA0IjogIkdvaWJ1cnVhIDQiLAorICAgICJIZWFkaW5nIDUiOiAiR29pYnVydWEgNSIsCisgICAgIkhlYWRpbmcgNiI6ICJHb2lidXJ1YSA2IiwKKyAgICAiSGVhZGluZ3MiOiAiR29pYnVydWFrIiwKKyAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiTGFndW50emEiLAorICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiTWFycmEgaG9yaXpvbnRhbGEiLAorICAgICJJbmNyZWFzZSBJbmRlbnQiOiAiS29za2EgdHhpa2l0dSIsCisgICAgIkluaXQgZWRpdG9yIHNpemUiOiAiRWRpdG9yZWFyZW4gaGFzaWVyYWtvIG5ldXJyaWEiLAorICAgICJJbnNlcnQgVGFibGUiOiAiVGF1bGEgdHhlcnRhdHUiLAorICAgICJJbnNlcnQgV2ViIExpbmsiOiAiTG90dXJhIHR4ZXJ0YXR1IiwKKyAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJcnVkaWEgdHhlcnRhdHUiLAorICAgICJJbnNlcnQvT3ZlcndyaXRlIjogIlR4ZXJ0YXR1L0dhaW5pZGF0emkiLAorICAgICJJdGFsaWMiOiAiRXR6YW5hIiwKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAiWmVudHJhdHUiLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAiSnVzdGlmaWthdHUiLAorICAgICJKdXN0aWZ5IExlZnQiOiAiRXprZXJyZXRhcmEgbGVycm9rYXR1IiwKKyAgICAiSnVzdGlmeSBSaWdodCI6ICJFc2t1aW5ldGFyYSBsZXJyb2thdHUiLAorICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiTGFzdGVyLXRla2xhayIsCisgICAgIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ISI6ICJLYXJnYXR6ZW4uIEl0eGFyb24gbWVzZWRleiIsCisgICAgIkxvYWRpbmcgcGx1Z2luICRwbHVnaW4iOiAiJHBsdWdpbiBwbHVnaW5hIGthcmdhdHplbiIsCisgICAgIk5vcm1hbCI6ICJOb3JtYWxhIiwKKyAgICAiT3JkZXJlZCBMaXN0IjogIlplcnJlbmRhIG9yZGVuYXR1YSIsCisgICAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIkl0c2F0c2kgYXJiZWxlYW4gZGFnb2VuYSIsCisgICAgIlBhdGgiOiAiQmlkZWEiLAorICAgICJQcmludCBkb2N1bWVudCI6ICJEb2t1bWVudHVhIGlucHJpbWF0dSIsCisgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkJlcnJlZ2luIiwKKyAgICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAiJHBsdWdpbiBwbHVnaW5hIGVycmVnaXN0cmF0dSIsCisgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIkZvcm1hdG9hIGtlbmR1IiwKKyAgICAiU2F2ZSBhcyI6ICJHb3JkZSBob25lbGE6IiwKKyAgICAiU2VsZWN0IGFsbCI6ICJEZW5hIGF1a2VyYXR1IiwKKyAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiRm9ybWF0dWEgZXphcnJpIHBhcmFncmFmb2FyaSIsCisgICAgIlNwbGl0IEJsb2NrIjogIkJsb2tlYSB6YXRpdHUiLAorICAgICJTdHJpa2V0aHJvdWdoIjogIk1hcnJhdHVhIiwKKyAgICAiU3Vic2NyaXB0IjogIkF6cGluZGl6ZWEiLAorICAgICJTdXBlcnNjcmlwdCI6ICJHb2ktaW5kaXplYSIsCisgICAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICJFZGl0b3JlYWsgb25kb3JlbmdvIHRla2xhLWtvbmJpbmF6aW9hayBlc2thaW50emVuIGRpdHU6IiwKKyAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiRXJ0emFrIHRydWthdHUiLAorICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiSWt1c2kgZG9rdW1lbnR1YSBIVE1MLW4iLAorICAgICJVbmRlcmxpbmUiOiAiQXpwaW1hcnJhdHVhIiwKKyAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiRGVzZWdpbiIsCisgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiTGV0cmEtdGlwb2VuIGtvbG9yZWFrIGV6YWJhdHUgbmFoaSBhbCBkaXR1enU/IiwKKyAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiTGV0cmEtdGlwb2VuIG5ldXJyaWFrIGV6YWJhdHUgbmFoaSBhbCBkaXR1enU/IiwKKyAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogIkxldHJhLXRpcG9hayBlemFiYXR1IG5haGkgYWwgZGl0dXp1PyIsCisgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJURVNUVSBlcmFuIGFyaSB6YXJhLiBFcmFiaWwgZXphenUgWzw+XSBib3RvaWEgV1lTSVdJRyBlcmFyYSBpdHp1bHR6ZWtvLiIsCisgICAgImluc2VydCBsaW5lYnJlYWsiOiAiTGVycm8tamF1emlhIHR4ZXJ0YXR1IiwKKyAgICAibmV3IHBhcmFncmFwaCI6ICJQYXJhZ3JhZm8gYmVycmlhIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQWJzYm90dG9tIjogIklydWRpYXJlbiBiZWhla2FsZGVhbiIsCisgICAgICAgICJBYnNtaWRkbGUiOiAiSXJ1ZGlhcmVuIGVyZGlhbiIsCisgICAgICAgICJBbGlnbm1lbnQ6IjogIkxlcnJva2F0emVhOiIsCisgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiVGVzdHUgYWx0ZXJuYXRpYm9hOiIsCisgICAgICAgICJCYXNlbGluZSI6ICJJcnVkaWFyZW4gb2luZWFuIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIkVydHphcmVuIGxvZGllcmE6IiwKKyAgICAgICAgIkJvdHRvbSI6ICJCZWhlYW4iLAorICAgICAgICAiQ2FuY2VsIjogIlV0emkiLAorICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICJHZWxheGthcmVuIGJldGVnYXJyaWE6IiwKKyAgICAgICAgIkNlbGwgc3BhY2luZzoiOiAiR2VsYXhrYS10YXJ0ZWE6IiwKKyAgICAgICAgIkNsaWNrIGEgY29sb3IuLi4iOiAiS29sb3JlIGJhdCBhdWtlcmF0dS4uLiIsCisgICAgICAgICJDb2xvcjogIjogIktvbG9yZWE6ICIsCisgICAgICAgICJDb2xzOiI6ICJadXRhYmVhazoiLAorICAgICAgICAiRW0iOiAiRW0iLAorICAgICAgICAiRW5sYXJnZSBFZGl0b3IiOiAiRWRpdG9yZWEgaGFuZGl0dSIsCisgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiSWRhdHogZXphenUgaXJ1ZGlhcmVuIFVSTC1hIGhlbWVuIiwKKyAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiWmFiYWxlcmEgZmlua29kdW4genV0YWJlYWsiLAorICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiSXJ1ZGlyaWsgb25hcnR6ZW4gZXogZHV0ZW4gbmFiaWdhdHphaWxlZW50emF0IiwKKyAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICJCZXRlZ2FycmkgaG9yaXpvbnRhbGEiLAorICAgICAgICAiSG9yaXpvbnRhbDoiOiAiSG9yaXpvbnRhbGE6IiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIklydWRpYXJlbiBhdXJyZWJpc3RhOiIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIklydWRpYXJlbiBVUkwtYToiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIklydWRpYSB0eGVydGF0dSIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiTG90dXJhIHR4ZXJ0YXR1L2FsZGF0dSIsCisgICAgICAgICJMYXlvdXQiOiAiRGlzZWludWEiLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJVenRhenUgaHV0c2lrIGVydHppayBleiBzb3J0emVrbyIsCisgICAgICAgICJMZWZ0IjogIkV6a2VycmV0YXJhIiwKKyAgICAgICAgIk1pZGRsZSI6ICJFcmRpYW4iLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJMZWhpbyBiZXJyaWFuIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiQmF0IGVyZSBleiAoaW1wbGl6aXR1a2kgZXJhYmlsaSkiLAorICAgICAgICAiTm90IHNldCI6ICJFeiBnYWl0dWEiLAorICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiWnV0YWJlLWtvcHVydWEiLAorICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAiTGVycm8ta29wdXJ1YSIsCisgICAgICAgICJPSyI6ICJBZG9zIiwKKyAgICAgICAgIk90aGVyIjogIkJlc3RlIGJhdCIsCisgICAgICAgICJQZXJjZW50IjogIlBvcnR6ZW50YWlhIiwKKyAgICAgICAgIlBpeGVscyI6ICJQaXhlbGFrIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiSXJ1ZGlhcmVuIGtva2FwZW5hIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiVGF1bGEgaG9uZW4ga29rYXBlbmEiLAorICAgICAgICAiUHJldmlldyI6ICJBdXJyZWJpc3RhIiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJBdXJyZWlrdXNpIGlydWRpYSBiZXN0ZSBsZWhpbyBiYXRlYW4iLAorICAgICAgICAiUmVnaXN0ZXIgYm90dG9tIHBhbmVsIjogIkJlaGVrbyBwYW5lbGEgZXJyZWdpc3RyYXR1IiwKKyAgICAgICAgIlJlZ2lzdGVyIGxlZnQgcGFuZWwiOiAiRXprZXItcGFuZWxhIGVycmVnaXN0cmF0dSIsCisgICAgICAgICJSZWdpc3RlciByaWdodCBwYW5lbCI6ICJFc2t1aW4tcGFuZWxhIGVycmVnaXN0cmF0dSIsCisgICAgICAgICJSZWdpc3RlciB0b3AgcGFuZWwiOiAiR29pa28gcGFuZWxhIGVycmVnaXN0cmF0dSIsCisgICAgICAgICJSaWdodCI6ICJFc2t1aW5ldGFyYSIsCisgICAgICAgICJSb3dzOiI6ICJMZXJyb2FrOiIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiRnJhbWUgYmVyZWFuIChfc2VsZikiLAorICAgICAgICAiU2FtcGxlIjogIkxhZ2luYSIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIkdlbGF4a2EgYXV6b2tpZGVlbiBhcnRla28gdGFydGVhIiwKKyAgICAgICAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAiR2VsYXhrYXJlbiBlZHVraWEgZXRhIGVydHphcmVuIGFydGVrbyB0YXJ0ZWEiLAorICAgICAgICAiU3BhY2luZyI6ICJUYXJ0ZWEiLAorICAgICAgICAiVGFyZ2V0OiI6ICJIZWxidXJ1YToiLAorICAgICAgICAiVGV4dHRvcCI6ICJJcnVkaWFyZW4gZ29pYWxkZWFuIiwKKyAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiSXRzYXRzaSBib3RvaWEgZXogZGFiaWwgTW96aWxsYW4gb2luYXJyaXR1dGFrbyBuYWJpZ2F0emFpbGVldGFuIChhcnJhem9pIHRla25pa29lbmdhdGlrKS4gU2FjYXR1IENUUkwtViB6dXJlIHRla2xhdHVhbiwgenV6ZW5lYW4gaXRzYXN0ZWtvLiIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogIkl6ZW5idXJ1YSAoYXJnaWJpZGVhKToiLAorICAgICAgICAiVG9wIjogIkdvaWFuIiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiR29pa28gZnJhbWUtYW4gKF90b3ApIiwKKyAgICAgICAgIlVSTDoiOiAiVVJMLWE6IiwKKyAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiQmV0ZWdhcnJpIGJlcnRpa2FsYSIsCisgICAgICAgICJWZXJ0aWNhbDoiOiAiQmVydGlrYWxhOiIsCisgICAgICAgICJXZWIgU2FmZTogIjogIldlYiBTYWZlOiAiLAorICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIlRhdWxhcmVuIHphYmFsZXJhIiwKKyAgICAgICAgIldpZHRoIHVuaXQiOiAiWmFiYWxlcmEtdW5pdGF0ZWEiLAorICAgICAgICAiV2lkdGg6IjogIlphYmFsZXJhOiIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiBjb2x1bW5zIjogIlp1dGFiZS1rb3B1cnVhIGlkYXR6aSBiZWhhciBkdXp1IiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAiTGVycm8ta29wdXJ1YSBpZGF0emkgYmVoYXIgZHV6dSIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIlVSTC1hIGlkYXR6aSBiZWhhciBkdXp1IiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICJMb3R1cmFyZW4gaGVsYnVydSBkZW4gVVJMLWEgaWRhdHppIGJlaGFyIGR1enUiLAorICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRlIGEgbGluayI6ICJUZXN0dS1hdGFsIGJhdCBhdWtlcmF0dSBiZWhhciBkdXp1IGxlaGVuZGFiaXppLCBsb3R1cmEgYmF0IHNvcnR6ZWtvIiwKKyAgICAgICAgIllvdXIgRG9jdW1lbnQgaXMgbm90IHdlbGwgZm9ybWVkLiBDaGVjayBKYXZhU2NyaXB0IGNvbnNvbGUgZm9yIGRldGFpbHMuIjogIlp1cmUgZG9rdW1lbnR1YWsgZXogZHUgZm9ybWF0dSB6dXplbmEuIEJlZ2lyYSBlemF6dSBKYXZhU2NyaXB0IGtvbnRzb2xhIHhlaGV0YXN1bmV0YXJha28uIiwKKyAgICAgICAgImJ1dHRvbl9ib2xkIjogImRlL2JvbGQuZ2lmIiwKKyAgICAgICAgImJ1dHRvbl9pdGFsaWMiOiAiZGUvaXRhbGljLmdpZiIsCisgICAgICAgICJidXR0b25fdW5kZXJsaW5lIjogImRlL3VuZGVybGluZS5naWYiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9mYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjlmM2I0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9mYS5qcwpAQCAtMCwwICsxLDE1NyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiYjODIxMjsg2YLYp9mE2KggJiM4MjEyOyIsCisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogItiv2LHYqNin2LHZhyDYp9uM2YYg2YjbjNix2KfbjNi0INqv2LEiLAorICAgICJBZGRyZXNzIjogItii2K/YsdizIiwKKyAgICAiQmFja2dyb3VuZCBDb2xvciI6ICLYsdmG2q8g2b7YsyDYstmF24zZhtmHIiwKKyAgICAiQm9sZCI6ICLYttiu24zZhSIsCisgICAgIkJ1bGxldGVkIExpc3QiOiAi2YHZh9ix2LPYqiDar9mE2YjZhNmHINin24wiLAorICAgICJDbGVhbiBjb250ZW50IHBhc3RlZCBmcm9tIFdvcmQiOiAi2KrZhduM2LIg2qnYsdiv2YYg2YXYrdiq2YjYp9uMINqG2LPYqNin2YbYr9mHINi02K/ZhyDYp9iyIFdvcmQiLAorICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICLZvtin2qkg2qnYsdiv2YYg2YXYqtmGINin2LIg2YXYtNiu2LXYp9iqINmB2YjZhtiqIiwKKyAgICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICLZvtin2qkg2qnYsdiv2YYg2YXYqtmGINin2LIg2KjYsdqG2LPYqCDZh9in24wgTVNPZmZpY2UiLAorICAgICJDbG9zZSI6ICLYqNiz2KrZhiIsCisgICAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAi2LPYp9iu2KrZhiDYtNuM2KEiLAorICAgICJDb3B5IHNlbGVjdGlvbiI6ICLaqdm+24wg2KfZhtiq2K7Yp9ioINi02K/ZhyIsCisgICAgIkNyZWF0ZSBUb29sYmFyIjogItiz2KfYrtiqINmG2YjYp9ixINin2KjYstin2LEiLAorICAgICJDdXJyZW50IHN0eWxlIjogIti024zZiNmHINqp2YbZiNmG24wiLAorICAgICJDdXQgc2VsZWN0aW9uIjogItio2LHbjNiv2YYg2KfZhtiq2K7Yp9ioINi02K/ZhyIsCisgICAgIkRlY3JlYXNlIEluZGVudCI6ICLaqdin2YfYtCDYs9ixINiu2LciLAorICAgICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICLYrNmH2Kog2KfYsiDahtm+INio2Ycg2LHYp9iz2KoiLAorICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICLYrNmH2Kog2KfYsiDYsdin2LPYqiDYqNmHINqG2b4iLAorICAgICJFTlRFUiI6ICJFTlRSRUUiLAorICAgICJFZGl0b3IgSGVscCI6ICLYsdin2YfZhtmF2KfbjCDZiNuM2LHYp9uM2LTar9ixIiwKKyAgICAiRm9udCBDb2xvciI6ICLYsdmG2q8g2YHZhNmFIiwKKyAgICAiRm9ybWF0dGVkIjogItmC2KfZhNioINio2YbYr9uMINi02K/ZhyIsCisgICAgIkhlYWRpbmcgMSI6ICLYqtuM2KrYsSAxIiwKKyAgICAiSGVhZGluZyAyIjogItiq24zYqtixIDIiLAorICAgICJIZWFkaW5nIDMiOiAi2KrbjNiq2LEgMyIsCisgICAgIkhlYWRpbmcgNCI6ICLYqtuM2KrYsSA0IiwKKyAgICAiSGVhZGluZyA1IjogItiq24zYqtixIDUiLAorICAgICJIZWFkaW5nIDYiOiAi2KrbjNiq2LEgNiIsCisgICAgIkhlYWRpbmdzIjogIti52YbZiNin2YYg2q/YsNin2LHbjCIsCisgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogItix2KfZh9mG2YXYp9uMINin2LPYqtmB2KfYr9mHINmI24zYsdin24zYtCDar9ixIiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogItiu2Lcg2KfZgdmC24wiLAorICAgICJJbmNyZWFzZSBJbmRlbnQiOiAi2KfZgdiy2KfbjNi0INiz2LEg2K7YtyIsCisgICAgIkluaXQgZWRpdG9yIHNpemUiOiAi2YXZgtiv2KfYsSDYr9mH24wg2KfZhtiv2KfYstmHINmI24zYsdin24zYtNqv2LEiLAorICAgICJJbnNlcnQgVGFibGUiOiAi2KfZgdiy2YjYr9mGINis2K/ZiNmEIiwKKyAgICAiSW5zZXJ0IFdlYiBMaW5rIjogItin2YHYstmI2K/ZhiDZhNuM2YbaqSDZiNioIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICLYp9mB2LLZiNiv2YYg24zYpyDZiNuM2LHYp9uM2LQg2KrYtdmI24zYsSIsCisgICAgIkluc2VydC9PdmVyd3JpdGUiOiAi2KfZgdiy2YjYr9mGL9is2KfZhtmI24zYs9uMIiwKKyAgICAiSXRhbGljIjogItmF2YjYsdioIiwKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAi2KrYsdin2LIg2K/YsSDZiNiz2LciLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAi2KrYsdin2LIg2KfYsiDahtm+INmIINix2KfYs9iqIiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogItiq2LHYp9iyINin2LIg2obZviIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAi2KrYsdin2LIg2K/YsSDYsdin2LPYqiIsCisgICAgIktleWJvYXJkIHNob3J0Y3V0cyI6ICLZhduM2KfZhtio2LHZh9in24wg2LXZgdit2Ycg2qnZhNuM2K8iLAorICAgICJOb3JtYWwiOiAi2YXYudmF2YjZhNuMIiwKKyAgICAiT3JkZXJlZCBMaXN0IjogItmB2YfYsdiz2Kog2YXYsdiq2KgiLAorICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICLahtiz2KjYp9mG2K/ZhiDYp9iyINiq2K7YqtmHINqp2KfYsSIsCisgICAgIlBhdGgiOiAi2YXYs9uM2LEiLAorICAgICJQcmludCBkb2N1bWVudCI6ICLahtin2b4g2LPZhtivIiwKKyAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi2KfZhtis2KfZhSDZhdis2K/YryDYotiu2LHbjNmGINi52YXZhCIsCisgICAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIjogItir2KjYqiDZvtmE2Kfar9uM2YYgJHBsdWdpbiIsCisgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogItit2LDZgSDZgdix2YXYqiDYqNmG2K/bjCIsCisgICAgIlNISUZULUVOVEVSIjogIlNISUZUK0VOVFJFRSIsCisgICAgIlNhdmUgYXMiOiAi2LDYrtuM2LHZhyDZhdin2YbZhtivLi4uIiwKKyAgICAiU2VsZWN0IGFsbCI6ICLYp9mG2KrYrtin2Kgg2YfZhdmHIiwKKyAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAi2KrYutuM24zYsSDZgtin2YTYqCDYqNmHINm+2KfYsdin2q/Ysdin2YEiLAorICAgICJTcGxpdCBCbG9jayI6ICLYqNmE2KfaqSDYrNiv2KfYs9in2LLbjCIsCisgICAgIlN0cmlrZXRocm91Z2giOiAi2LHZiCDYrti3IiwKKyAgICAiU3Vic2NyaXB0IjogItiy24zYsdmI2YbYryIsCisgICAgIlN1cGVyc2NyaXB0IjogItio2KfZhNin2YjZhtivIiwKKyAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogItmI24zYsdin24zYtNqv2LEg2KfYs9iq2YHYp9iv2Ycg2KfYsiDaqdmE24zYryDZh9in24wg2q/YsdmI2YfbjCDYstuM2LEg2LHYpyDZhdiz24zYsSDZhduMINiz2KfYstivIDoiLAorICAgICJUb2dnbGUgQm9yZGVycyI6ICLZgdi52KfZhC/YutuM2LEg2YHYudin2YQg2qnYsdiv2YYg2YTYqNmHINmH2KciLAorICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAi2YXYtNin2YfYr9mHINuM2Kcg2LnYr9mFINmF2LTYp9mH2K/ZhyDZhdiq2YYg2K/YsSDZgtin2YTYqCBIVE1MIiwKKyAgICAiVW5kZXJsaW5lIjogItiy24zYsSDYrti3IiwKKyAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi2KjYsdqv2LHYr9in2YbYr9mGINii2K7YsduM2YYg2LnZhdmEIiwKKyAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICLYotuM2Kcg2KrZhdin24zZhCDYr9in2LHbjNivINix2YbaryDZgtmE2YUg2LHYpyDZvtin2qkg2qnZhtuM2K/YnyIsCisgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogItii24zYpyDYqtmF2KfbjNmEINiv2KfYsduM2K8g2KfZhtiv2KfYstmHINmC2YTZhSDYsdinINm+2KfaqSDaqdmG24zYryIsCisgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICLYotuM2Kcg2KrZhdin24zZhCDYr9in2LHbjNivINi42KfZh9ixINmB2YTZhSDYsdinINm+2KfaqSDaqdmG24zYr9ifIiwKKyAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogItiv2LEg2YXYryDZhdiq2YbbjCDZh9iz2KrbjNivLiAg2KfYsiDYr9qp2YXZhyBbPD5dINin2LPYqtmB2KfYr9mHINmG2YXYp9uM24zYryDYqtinINio2Ycg2YXYryBXWVNJV1lHINio2LHar9ix2K/bjNivLiIsCisgICAgImluc2VydCBsaW5lYnJlYWsiOiAi2KfZgdiy2YjYr9mGINis2K/YpyDaqdmG2YbYr9mHINiu2LciLAorICAgICJuZXcgcGFyYWdyYXBoIjogItm+2KfYsdin2q/Ysdin2YEg2KzYr9uM2K8iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBYnNib3R0b20iOiAi2K/ZgtuM2YLYpyDZvtin24zbjNmGIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICLYr9mC24zZgtinINmI2LPYtyIsCisgICAgICAgICJBbGlnbm1lbnQ6IjogItiq2LHYp9iyINio2YbYr9uMIiwKKyAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICLZhdiq2YYg2KzYp9uM2q/YstuM2YYiLAorICAgICAgICAiQmFzZWxpbmUiOiAi2KfYqNiq2K/Yp9uMINiu2LciLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAi2LbYrtin2YXYqiDZhNio2YciLAorICAgICAgICAiQm90dG9tIjogItm+2KfbjNuM2YYiLAorICAgICAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIsCisgICAgICAgICJDZWxsIHBhZGRpbmc6IjogItm+2LEg2qnZhtmG2K/ZhyDYs9mE2YjZhCIsCisgICAgICAgICJDZWxsIHNwYWNpbmc6IjogItmB2KfYtdmE2Ycg2LPZhNmI2YQg2YfYpyIsCisgICAgICAgICJDb2xzOiI6ICLYs9iq2YjZhiDZh9inIiwKKyAgICAgICAgIkNvbnN0cnVjdGluZyBtYWluIG9iamVjdCI6ICLYs9in2K7YqtmGINi024zYoSDYp9i12YTbjCIsCisgICAgICAgICJDcmVhdGUgU3RhdHVzQmFyIjogItiz2KfYrtiqINmG2YjYp9ixINmI2LbYuduM2KoiLAorICAgICAgICAiRW0iOiAiRW0iLAorICAgICAgICAiRW5sYXJnZSBFZGl0b3IiOiAi2KjYstix2q8g2qnYsdiv2YYg2YjbjNix2KfbjNi0INqv2LEiLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIlVSTCDYqti12YjbjNixINix2Kcg2KfbjNmG2KzYpyDZiNin2LHYryDaqdmG24zYryIsCisgICAgICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogItiz2KrZiNmGINmH2KfbjCDYt9mI2YQg2KvYp9io2KoiLAorICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAi2KjYsdin24wg2YXYsdmI2LHar9ix2YfYp9uM24wg2qnZhyDYp9iyINiq2LXYp9mI24zYsSDZvti02KrbjNio2KfZhtuMINmG2YXbjCDaqdmG2YbYryIsCisgICAgICAgICJHZW5lcmF0ZSBYaW5oYSBvYmplY3QiOiAi2KrZiNmE24zYryDYtNuM2KEgWGluaGEiLAorICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogItm+2LHaqdmG2YbYr9mHINin2YHZgtuMIiwKKyAgICAgICAgIkhvcml6b250YWw6IjogItin2YHZgtuMIiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogItm+24zYtCDZhtmF2KfbjNi0INiq2LXZiNuM2LEiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJVUkwg2KrYtdmI24zYsSIsCisgICAgICAgICJJbml0IElGcmFtZSI6ICLZhdmC2K/Yp9ixINiv2YfbjCBJRnJhbWUiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogItin2YHYstmI2K/ZhiDYqti12YjbjNixIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICLYp9mB2LLZiNiv2YYgLyDZiNuM2LHYp9uM2LQg2YTbjNmG2qkiLAorICAgICAgICAiTGF5b3V0IjogItmE2KfbjNmHIiwKKyAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAi2KjYsdin24wg2KjYr9mI2YYg2YTYqNmHINiu2KfZhNuMINix2YfYpyDaqdmGIiwKKyAgICAgICAgIkxlZnQiOiAi2obZviIsCisgICAgICAgICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCAhIjogItio2KfYsdqv2LDYp9ix24wg2K/YsSDYrdin2YQg2KfZhtis2KfZhSDYp9iz2KouINmE2LfZgdinINi12KjYsSDaqdmG24zYryAhIiwKKyAgICAgICAgIk1pZGRsZSI6ICLZiNiz2LciLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICLZvtmG2KzYsdmHINis2K/bjNivIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi2YfbjNqG2qnYr9in2YUgKNin2LPYqtmB2KfYr9mHINin2LIg2KjYr9mI2YYg2LTYsdi3KSIsCisgICAgICAgICJOb3Qgc2V0IjogItiq2YbYuNuM2YUg2YbYtNiv2YciLAorICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAi2KrYudiv2KfYryDYs9iq2YjZhiDZh9inIiwKKyAgICAgICAgIk51bWJlciBvZiByb3dzIjogItiq2LnYr9in2K8g2LHYr9uM2YEg2YfYpyIsCisgICAgICAgICJPSyI6ICLYqNmE2YciLAorICAgICAgICAiT3RoZXIiOiAi2LPYp9uM2LEiLAorICAgICAgICAiUGVyY2VudCI6ICLYr9ix2LXYryIsCisgICAgICAgICJQaXhlbHMiOiAi2b7bjNqp2LPZhCDZh9inIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAi2YXZiNmC2LnbjNiqINuM2KfYqNuMINiq2LXZiNuM2LEiLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICLZhdmI2YLYuduM2Kog24zYp9io24wg2KfbjNmGINis2K/ZiNmEIiwKKyAgICAgICAgIlByZXZpZXciOiAi2b7bjNi0INmG2YXYp9uM2LQiLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogItm+24zYtCDZhtmF2KfbjNi0INiq2LXZiNuM2LEg2K/YsSDZvtmG2KzYsdmHINin24wg2KzYr9uM2K8iLAorICAgICAgICAiUmVnaXN0ZXIgcGFuZWwgYm90dG9tIjogItir2KjYqiDZgtin2Kgg2b7Yp9uM24zZhiIsCisgICAgICAgICJSZWdpc3RlciBwYW5lbCBsZWZ0IjogItir2KjYqiDZgtin2Kgg2obZviIsCisgICAgICAgICJSZWdpc3RlciBwYW5lbCByaWdodCI6ICLYq9io2Kog2YLYp9ioINix2KfYs9iqIiwKKyAgICAgICAgIlJlZ2lzdGVyIHBhbmVsIHRvcCI6ICLYq9io2Kog2YLYp9ioINio2KfZhNinIiwKKyAgICAgICAgIlJpZ2h0IjogItix2KfYs9iqIiwKKyAgICAgICAgIlJvd3M6IjogItix2K/bjNmBINmH2KciLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogItmB2LHbjNmFINuM2qnYs9in2YYgKF9zZWxmKSIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogItmB2KfYtdmE2Ycg2KjbjNmGINiz2YTZiNmEINmH2KfbjCDZh9mF2KzZiNin2LEiLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICLZgdin2LXZhNmHINio24zZhiDZhdit2KrZiNinINmIINmE2KjZhyDYr9ixINiz2YTZiNmEIiwKKyAgICAgICAgIlNwYWNpbmciOiAi2YHYp9i12YTZhyDar9iw2KfYsduMIiwKKyAgICAgICAgIlRhcmdldDoiOiAi2YfYr9mBIiwKKyAgICAgICAgIlRleHR0b3AiOiAi2KjYp9mE2KfbjCDZhdiq2YYiLAorICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICLYr9qp2YXZhyDahtiz2KjYp9mG2K/ZhiDYr9ixINmF2LHZiNix2q/YsdmH2KfbjCDYs9ix24wgTW96aWxsYSDaqdin2LEg2YbZhduMINqp2YbYryAo2KjZhyDYr9mE2KfbjNmEINmB2YbbjCDYp9mF2YbbjNiq24wpLtio2LHYp9uMINqG2LPYqNin2YbYr9mGINmF2LPYqtmC24zZhSDYjCDYr9qp2YXZhyBDVFJMLVYg2LHYpyDYr9ixINi12YHYrdmHINqp2YTbjNivINio2LLZhtuM2K8uIiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAi2LnZhtmI2KfZhiAo2LHYp9mH2YbZhdin24wg24zaqSDYrti324wpIiwKKyAgICAgICAgIlRvcCI6ICLYqNin2YTYpyIsCisgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogItmB2LHbjNmFINio2KfZhNin24zbjCAoX3RvcCkiLAorICAgICAgICAiVVJMOiI6ICJVUkw6IiwKKyAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAi2b7Ysdqp2YbZhtiv2Ycg2LnZhdmI2K/bjCIsCisgICAgICAgICJWZXJ0aWNhbDoiOiAi2LnZhdmI2K/bjCIsCisgICAgICAgICJXaWR0aCBvZiB0aGUgdGFibGUiOiAi2LfZiNmEINis2K/ZiNmEIiwKKyAgICAgICAgIldpZHRoIHVuaXQiOiAi2YjYp9it2K8g2LfZiNmEIiwKKyAgICAgICAgIldpZHRoOiI6ICLYt9mI2YQiLAorICAgICAgICAiWGluaGEgSGVscCI6ICLYsdin2YfZhtmF2KfbjCBYaW5oYSIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiBjb2x1bW5zIjogItio2KfbjNivINiq2LnYr9in2K8g2LPYqtmI2YYg2YfYpyDYsdinINmI2KfYsdivINqp2YbbjNivIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAi2KjYp9uM2K8g2KrYudiv2KfYryDYsdiv24zZgSDZh9inINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8iLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICLYtNmF2Kcg2KjYp9uM2K8gVVJMINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8iLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogItio2KfbjNivIFVSTNuMINqp2Ycg2KfbjNmGINmE24zZhtqpINio2Ycg2KLZhiDYp9i02KfYsdmHINiv2KfYsdivINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8iLAorICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogItio2KfbjNivINmC2KjZhCDYp9iyINiz2KfYrtiqINmE24zZhtqpINiMINmF2KrZhtuMINix2Kcg2KfZhtiq2K7Yp9ioINmG2YXYp9uM24zYryIsCisgICAgICAgICJZb3VyIERvY3VtZW50IGlzIG5vdCB3ZWxsIGZvcm1lZC4gQ2hlY2sgSmF2YVNjcmlwdCBjb25zb2xlIGZvciBkZXRhaWxzLiI6ICLYs9mG2K8g2LTZhdinINio2K/Ysdiz2KrbjCDZgtin2YTYqCDYqNmG2K/bjCDZhti02K/ZhyDYp9iz2KouINio2LHYp9uMINin2LfZhNin2LnYp9iqINio24zYtNiq2LEg2b7Yp9uM2KfZhtmHINmG2YXYp9uM2LQg2KzYp9mI2KfYp9iz2qnYsduM2b7YqiDYsdinINio2LHYsdiz24wg2qnZhtuM2K8uIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9maS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvZmkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdiMjlkMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvZmkuanMKQEAgLTAsMCArMSw0NiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJUaWV0b2phIGVkaXRvcmlzdGEiLAorICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIlRhdXN0YXbDpHJpIiwKKyAgICAiQm9sZCI6ICJMaWhhdm9pdHUiLAorICAgICJCdWxsZXRlZCBMaXN0IjogIkx1ZXR0ZWxvbWVya2l0IiwKKyAgICAiQ29weSBzZWxlY3Rpb24iOiAiS29waW9pIG1hYWxhdHR1IiwKKyAgICAiQ3VycmVudCBzdHlsZSI6ICJOeWt5aW5lbiB0eXlsaSIsCisgICAgIkN1dCBzZWxlY3Rpb24iOiAiTGVpa2thYSBtYWFsYXR0dSIsCisgICAgIkRlY3JlYXNlIEluZGVudCI6ICJQaWVuZW5uw6Qgc2lzZW5ueXN0w6QiLAorICAgICJGb250IENvbG9yIjogIkZvbnRpbiB2w6RyaSIsCisgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIk7DpHl0w6Qgb2hqZSIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICJWYWFrYXZpaXZhIiwKKyAgICAiSW5jcmVhc2UgSW5kZW50IjogIkxpc8Okw6Qgc2lzZW5ueXN0w6QiLAorICAgICJJbnNlcnQgVGFibGUiOiAiTGlzw6TDpCB0YXVsdWtrbyIsCisgICAgIkluc2VydCBXZWIgTGluayI6ICJMaXPDpMOkIGxpbmtraSIsCisgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiTGlzw6TDpCBrdXZhIiwKKyAgICAiSXRhbGljIjogIkt1cnNpdm9pdHUiLAorICAgICJKdXN0aWZ5IENlbnRlciI6ICJLZXNraXTDpCIsCisgICAgIkp1c3RpZnkgRnVsbCI6ICJUYXNhYSBtb2xlbW1hdCByZXVuYXQiLAorICAgICJKdXN0aWZ5IExlZnQiOiAiVGFzYWEgdmFzZW1tYXQgcmV1bmF0IiwKKyAgICAiSnVzdGlmeSBSaWdodCI6ICJUYXNhYSBvaWtlYXQgcmV1bmF0IiwKKyAgICAiT3JkZXJlZCBMaXN0IjogIk51bWVyb2ludGkiLAorICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJMaWl0w6QgbGVpa2VwecO2ZMOkbHTDpCIsCisgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlBhbGF1dGEgdmlpbWVpbmVuIHRvaW1pbnRvIiwKKyAgICAiU3RyaWtldGhyb3VnaCI6ICJZbGl2aWl2YXR0dSIsCisgICAgIlN1YnNjcmlwdCI6ICJBbGFpbmRla3NpIiwKKyAgICAiU3VwZXJzY3JpcHQiOiAiWWzDpGluZGVrc2kiLAorICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiSFRNTC1sw6RoZGVrb29kaSB2cyBXWVNJV1lHIiwKKyAgICAiVW5kZXJsaW5lIjogIkFsbGV2aWl2YXR0dSIsCisgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlBlcnV1dGEgdmlpbWVpbmVuIHRvaW1pbnRvIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQ2FuY2VsIjogIlBlcnV1dGEiLAorICAgICAgICAiRW5sYXJnZSBFZGl0b3IiOiAiU3V1cmVubmEgZWRpdG9yaSIsCisgICAgICAgICJPSyI6ICJIeXbDpGtzeSIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYTQ4ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsMTU4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiJiM4MjEyOyBGb3JtYXQgJiM4MjEyOyIsCisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIkEgcHJvcG9zIiwKKyAgICAiQWRkcmVzcyI6ICJBZHJlc3NlIiwKKyAgICAiQmFja2dyb3VuZCBDb2xvciI6ICJTdXJsaWduYWdlIiwKKyAgICAiQm9sZCI6ICJHcmFzIiwKKyAgICAiQnVsbGV0ZWQgTGlzdCI6ICJMaXN0ZSDDoCBwdWNlcyIsCisgICAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICJOZXR0b3lhZ2UgZHUgY29udGVudSBjb3Bpw6kgZGVwdWlzIFdvcmQiLAorICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICJTdXBwcmltZXIgcGFyYW3DqHRyZXMgaW5saW5lIGRlIGxhIHBvbGljZSIsCisgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiU3VwcHJpbWVyIHRhZ3MgTVNPZmZpY2UiLAorICAgICJDbG9zZSI6ICJGZXJtZXIiLAorICAgICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIkNvbnN0cnVjdGlvbiBkZSBsJ29iamV0IiwKKyAgICAiQ29weSBzZWxlY3Rpb24iOiAiQ29waWVyIGxhIHPDqWxlY3Rpb24iLAorICAgICJDcmVhdGUgU3RhdHVzYmFyIjogIkNvbnN0cnVjdGlvbiBkZSBsYSBiYXJyZSBkZSBzdGF0dXMiLAorICAgICJDcmVhdGUgVG9vbGJhciI6ICJDb25zdHJ1Y3Rpb24gZGUgbGEgYmFycmUgZCdpY29uZXMiLAorICAgICJDdXJyZW50IHN0eWxlIjogIlN0eWxlIGNvdXJhbnQiLAorICAgICJDdXQgc2VsZWN0aW9uIjogIkNvdXBlciBsYSBzw6lsZWN0aW9uIiwKKyAgICAiRGVjcmVhc2UgSW5kZW50IjogIkRpbWludWVyIGxlIHJldHJhaXQiLAorICAgICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICJEaXJlY3Rpb24gZGUgZ2F1Y2hlIMOgIGRyb2l0ZSIsCisgICAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIkRpcmVjdGlvbiBkZSBkcm9pdGUgw6AgZ2F1Y2hlIiwKKyAgICAiRU5URVIiOiAiRU5UUkVFIiwKKyAgICAiRWRpdG9yIEhlbHAiOiAiQWlkZSBkZSBsJ8OpZGl0ZXVyIiwKKyAgICAiRmluaXNoaW5nIjogIkNoYXJnZW1lbnQgYmllbnTDtHQgdGVybWluw6kiLAorICAgICJGb250IENvbG9yIjogIkNvdWxldXIgZGUgcG9saWNlIiwKKyAgICAiRm9ybWF0dGVkIjogIkZvcm1hdMOpIiwKKyAgICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIkfDqW7DqXJhdGlvbiBkZSBYaW5oYSIsCisgICAgIkhlYWRpbmcgMSI6ICJUaXRyZSAxIiwKKyAgICAiSGVhZGluZyAyIjogIlRpdHJlIDIiLAorICAgICJIZWFkaW5nIDMiOiAiVGl0cmUgMyIsCisgICAgIkhlYWRpbmcgNCI6ICJUaXRyZSA0IiwKKyAgICAiSGVhZGluZyA1IjogIlRpdHJlIDUiLAorICAgICJIZWFkaW5nIDYiOiAiVGl0cmUgNiIsCisgICAgIkhlYWRpbmdzIjogIlRpdHJlcyIsCisgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIkFpZGUiLAorICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiTGlnbmUgaG9yaXpvbnRhbGUiLAorICAgICJJbmNyZWFzZSBJbmRlbnQiOiAiQXVnbWVudGVyIGxlIHJldHJhaXQiLAorICAgICJJbml0IGVkaXRvciBzaXplIjogIkluaXRpYWxpc2F0aW9uIGRlIGxhIHRhaWxsZSBkJ8OpZGl0aW9uIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIkluc8OpcmVyIHVuIHRhYmxlYXUiLAorICAgICJJbnNlcnQgV2ViIExpbmsiOiAiSW5zw6lyZXIgdW4gbGllbiIsCisgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiSW5zw6lyZXIgLyBNb2RpZmllciB1bmUgaW1hZ2UiLAorICAgICJJbnNlcnQvT3ZlcndyaXRlIjogIkluc2VydGlvbiAvIFJlbXBsYWNlbWVudCIsCisgICAgIkl0YWxpYyI6ICJJdGFsaXF1ZSIsCisgICAgIkp1c3RpZnkgQ2VudGVyIjogIkNlbnRyZXIiLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAiSnVzdGlmaWVyIiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogIkFsaWduZXIgw6AgZ2F1Y2hlIiwKKyAgICAiSnVzdGlmeSBSaWdodCI6ICJBbGlnbmVyIMOgIGRyb2l0ZSIsCisgICAgIktleWJvYXJkIHNob3J0Y3V0cyI6ICJSYWNjb3VyY2lzIGNsYXZpZXIiLAorICAgICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiQ2hhcmdlbWVudCBlbiBjb3Vycy4gVmV1aWxsZXogcGF0aWVudGVyISIsCisgICAgIkxvYWRpbmcgcGx1Z2luICRwbHVnaW4iOiAiQ2hhcmdlbWVudCBkdSBwbHVnaW4gJHBsdWdpbiIsCisgICAgIk5vcm1hbCI6ICJOb3JtYWwiLAorICAgICJPcmRlcmVkIExpc3QiOiAiTGlzdGUgbnVtw6lyb3TDqWUiLAorICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJDb2xsZXIgZGVwdWlzIGxlIHByZXNzZS1wYXBpZXIiLAorICAgICJQYXRoIjogIkNoZW1pbiIsCisgICAgIlByaW50IGRvY3VtZW50IjogIkltcHJpbWVyIGRvY3VtZW50IiwKKyAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiUsOpcMOpdGVyIGxhIGRlcm5pw6hyZSBhY3Rpb24iLAorICAgICJSZWdpc3RlciBwbHVnaW4gJHBsdWdpbiI6ICJFbnJlZ2lzdHJlbWVudCBkdSBwbHVnaW4gJHBsdWdpbiIsCisgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIlN1cHByaW1lciBtaXNlIGVuIGZvcm1lIiwKKyAgICAiU0hJRlQtRU5URVIiOiAiU0hJRlQrRU5UUkVFIiwKKyAgICAiU2F2ZSBhcyI6ICJFbnJlZ2lzdHJlciBzb3VzIiwKKyAgICAiU2VsZWN0IGFsbCI6ICJUb3V0IHPDqWxlY3Rpb25uZXIiLAorICAgICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICJBcHBsaXF1ZSBsZSBmb3JtYXQgcGFyYWdyYXBoZSIsCisgICAgIlNwbGl0IEJsb2NrIjogIlPDqXBhcmVyIGxlcyBibG9jcyIsCisgICAgIlN0cmlrZXRocm91Z2giOiAiQmFycsOpIiwKKyAgICAiU3Vic2NyaXB0IjogIkluZGljZSIsCisgICAgIlN1cGVyc2NyaXB0IjogIkV4cG9zYW50IiwKKyAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogIkwnw6lkaXRldXIgZm91cm5pdCBsZXMgY29tYmluYWlzb25zIGRlIHRvdWNoZXMgc3VpdmFudGVzIDoiLAorICAgICJUb2dnbGUgQm9yZGVycyI6ICJBZmZpY2hlciAvIE1hc3F1ZXIgbGVzIGJvcmR1cmVzIiwKKyAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIkFmZmljaGVyIC8gTWFzcXVlciBjb2RlIHNvdXJjZSIsCisgICAgIlVuZGVybGluZSI6ICJTb3VsaWduw6kiLAorICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJBbm51bGVyIGxhIGRlcm5pw6hyZSBhY3Rpb24iLAorICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIlZvdWxlei12b3VzIHN1cHByaW1lciBsZXMgY291bGV1cnMgPyIsCisgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIlZvdWxlei12b3VzIHN1cHByaW1lciBsZXMgdGFpbGxlcyA/IiwKKyAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogIlZvdWxlei12b3VzIHN1cHByaW1lciBsZXMgdHlwZXMgPyIsCisgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJWb3VzIMOqdGVzIGVuIE1PREUgVEVYVEUuICBBcHB1eWV6IHN1ciBsZSBib3V0b24gWzw+XSBwb3VyIHJldG91cm5lciBhdSBtb2RlIFdZU0lXWUcuIiwKKyAgICAiaW5zZXJ0IGxpbmVicmVhayI6ICJJbnPDqHJlIHVuIHNhdXQgZGUgbGlnbmUiLAorICAgICJuZXcgcGFyYWdyYXBoIjogIk5vdXZlYXUgcGFyYWdyYXBoZSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJBYnNib3R0b20iLAorICAgICAgICAiQWJzbWlkZGxlIjogIkFic21pZGRsZSIsCisgICAgICAgICJBbGlnbm1lbnQ6IjogIkFsaWduZW1lbnQiLAorICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIlRleHRlIGFsdGVybmF0aWYiLAorICAgICAgICAiQmFzZWxpbmUiOiAiQmFzZWxpbmUiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiRXBhaXNzZXVyIGRlIGJvcmR1cmUiLAorICAgICAgICAiQm90dG9tIjogIkJhcyIsCisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlciIsCisgICAgICAgICJDZWxsIHBhZGRpbmc6IjogIk1hcmdlIGludGVybmUiLAorICAgICAgICAiQ2VsbCBzcGFjaW5nOiI6ICJFc3BhY2VtZW50IiwKKyAgICAgICAgIkNvbHM6IjogIkNvbG9ubmVzIiwKKyAgICAgICAgIkVtIjogIkVtIiwKKyAgICAgICAgIkVubGFyZ2UgRWRpdG9yIjogIkFncmFuZGlyIGwnw6lkaXRldXIiLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkVudHJlciBsJ1VSTCBkZSBsJ2ltYWdlIGljaSIsCisgICAgICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIkNvbG9ubmVzIMOgIHRhaWxsZSBmaXhlIiwKKyAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIlBvdXIgbGVzIG5hdmlnYXRldXJzIHF1aSBuZSBzdXBwb3J0ZW50IHBhcyBsZXMgaW1hZ2VzIiwKKyAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICJNYXJnZSBob3Jpem9udGFsZSBpbnRlcm5lIiwKKyAgICAgICAgIkhvcml6b250YWw6IjogIkhvcml6b250YWwiLAorICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiUHLDqXZpc3VhbGlzYXRpb24iLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJVUkwgaW1hZ2UiLAorICAgICAgICAiSW5pdCBJRnJhbWUiOiAiSW5pdGlhbGlzYXRpb24gZGUgbCdpZnJhbWUiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIkluc8OpcmVyIHVuZSBpbWFnZSIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSW5zw6lyZXIgLyBNb2RpZmllciB1biBsaWVuIiwKKyAgICAgICAgIkxheW91dCI6ICJNaXNlIGVuIHBhZ2UiLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJMYWlzc2VyIHZpZGUgcG91ciBwYXMgZGUgYm9yZHVyZSIsCisgICAgICAgICJMZWZ0IjogIkdhdWNoZSIsCisgICAgICAgICJNaWRkbGUiOiAiTWlsaWV1IiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTm91dmVsbGUgZmVuw6p0cmUgKF9ibGFuaykiLAorICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJBdWN1bmUgKGltcGxpY2l0ZSkiLAorICAgICAgICAiTm90IHNldCI6ICJJbmTDqWZpbmkiLAorICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiTm9tYnJlIGRlIGNvbG9ubmVzIiwKKyAgICAgICAgIk51bWJlciBvZiByb3dzIjogIk5vbWJyZSBkZSBsaWduZXMiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3RoZXIiOiAiQXV0cmUiLAorICAgICAgICAiUGVyY2VudCI6ICJQb3VyY2VudCIsCisgICAgICAgICJQaXhlbHMiOiAiUGl4ZWxzIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zaXRpb24gZGUgbCdpbWFnZSIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIlBvc2l0aW9uIGR1IHRhYmxlYXUiLAorICAgICAgICAiUHJldmlldyI6ICJQcsOpdmlzdWFsaXNlciIsCisgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiUHLDqXZpc3VhbGlzZXIgbCdpbWFnZSBkYW5zIHVuZSBub3V2ZWxsZSBmZW7DqnRyZSIsCisgICAgICAgICJSZWdpc3RlciBib3R0b20gcGFuZWwiOiAiRW5yZWdpc3RyZW1lbnQgZHUgcGFubmVhdSBzdXDDqXJpZXVyIiwKKyAgICAgICAgIlJlZ2lzdGVyIGxlZnQgcGFuZWwiOiAiRW5yZWdpc3RyZW1lbnQgZHUgcGFubmVhdSBnYXVjaGUiLAorICAgICAgICAiUmVnaXN0ZXIgcmlnaHQgcGFuZWwiOiAiRW5yZWdpc3RyZW1lbnQgZHUgcGFubmVhdSBkcm9pdCIsCisgICAgICAgICJSZWdpc3RlciB0b3AgcGFuZWwiOiAiRW5yZWdpc3RyZW1lbnQgZHUgcGFubmVhdSBpbmbDqXJpZXVyIiwKKyAgICAgICAgIlJpZ2h0IjogIkRyb2l0ZSIsCisgICAgICAgICJSb3dzOiI6ICJMaWduZXMiLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIk3Dqm1lIGZyYW1lIChfc2VsZikiLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICJFc3BhY2UgZW50cmUgbGVzIGNlbGx1bGVzIGFkamFjZW50ZXMiLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICJFc3BhY2UgZW50cmUgbGUgY29udGVudSBldCBsYSBib3JkdXJlIGQndW5lIGNlbGx1bGUiLAorICAgICAgICAiU3BhY2luZyI6ICJFc3BhY2VtZW50IiwKKyAgICAgICAgIlRhcmdldDoiOiAiQ2libGUiLAorICAgICAgICAiVGV4dHRvcCI6ICJUZXh0dG9wIiwKKyAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiTGUgYm91dG9uIENvbGxlciBuZSBmb25jdGlvbm5lIHBhcyBzdXIgbGVzIG5hdmlnYXRldXJzIGJhc8OpcyBzdXIgTW96aWxsYSAocG91ciBkZXMgcmFpc29ucyBkZSBzw6ljdXJpdMOpKS4gUHJlc3NleiBDVFJMLVYgYXUgY2xhdmllciBwb3VyIGNvbGxlciBkaXJlY3RlbWVudC4iLAorICAgICAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUZXh0ZSBhbHRlcm5hdGlmIiwKKyAgICAgICAgIlRvcCI6ICJIYXV0IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiRnJhbWUgcHJpbmNpcGFsZSAoX3RvcCkiLAorICAgICAgICAiVVJMOiI6ICJVUkw6IiwKKyAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiTWFyZ2UgdmVydGljYWxlIGludGVybmUiLAorICAgICAgICAiVmVydGljYWw6IjogIlZlcnRpY2FsIiwKKyAgICAgICAgIldpZHRoIG9mIHRoZSB0YWJsZSI6ICJMYXJnZXVyIGR1IHRhYmxlYXUiLAorICAgICAgICAiV2lkdGggdW5pdCI6ICJVbml0w6lzIGRlIGxhcmdldXIiLAorICAgICAgICAiV2lkdGg6IjogIkxhcmdldXIiLAorICAgICAgICAiWGluaGEgSGVscCI6ICJBaWRlIFhpbmhhIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiVm91cyBkZXZleiBlbnRyZXIgbGUgbm9tYnJlIGRlIGNvbG9ubmVzIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAiVm91cyBkZXZleiBlbnRyZXIgbGUgbm9tYnJlIGRlIGxpZ25lcyIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIlZvdXMgZGV2ZXogZW50cmVyIGwnVVJMIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICJWb3VzIGRldmV6IGVudHJlciBsJ1VSTCBkZSBjZSBsaWVuIiwKKyAgICAgICAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayI6ICJWb3VzIGRldmV6IHPDqWxlY3Rpb25uZXIgZHUgdGV4dGUgYXZhbnQgZGUgY3LDqWVyIHVuIGxpZW4iLAorICAgICAgICAiWW91ciBEb2N1bWVudCBpcyBub3Qgd2VsbCBmb3JtZWQuIENoZWNrIEphdmFTY3JpcHQgY29uc29sZSBmb3IgZGV0YWlscy4iOiAiTGUgZG9jdW1lbnQgZXN0IG1hbCBmb3Jtw6kuIFbDqXJpZmlleiBsYSBjb25zb2xlIEphdmFTY3JpcHQgcG91ciBwbHVzIGRlIGTDqXRhaWxzLiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvaGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NWRlZjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2hlLmpzCkBAIC0wLDAgKzEsNjEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAi15DXldeT15XXqiDXoteV16jXmiDXlteUIiwKKyAgICAiQmFja2dyb3VuZCBDb2xvciI6ICLXpteR16Ig16jXp9eiIiwKKyAgICAiQm9sZCI6ICLXnteV15PXktepIiwKKyAgICAiQnVsbGV0ZWQgTGlzdCI6ICLXqNep15nXnteUINec15Ag157XnteV16HXpNeo16oiLAorICAgICJDb3B5IHNlbGVjdGlvbiI6ICLXlNei16rXpyDXkdeX15nXqNeUIiwKKyAgICAiQ3VycmVudCBzdHlsZSI6ICLXodeS16DXldefINeg15XXm9eX15kiLAorICAgICJDdXQgc2VsZWN0aW9uIjogIteS15bXldeoINeR15fXmdeo15QiLAorICAgICJEZWNyZWFzZSBJbmRlbnQiOiAi15TXp9eY158g15vXoNeZ16HXlCIsCisgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIteb15nXldeV158g157Xqdee15DXnCDXnNeZ157XmdefIiwKKyAgICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAi15vXmdeV15XXnyDXnteZ157XmdefINec16nXnteQ15wiLAorICAgICJGb250IENvbG9yIjogItem15HXoiDXkteV16TXnyIsCisgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogItei15bXqNeUINec16nXmdee15XXqSDXkdei15XXqNeaIiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogIten15Ug15DXoNeb15kiLAorICAgICJJbmNyZWFzZSBJbmRlbnQiOiAi15TXkteT15wg15vXoNeZ16HXlCIsCisgICAgIkluc2VydCBUYWJsZSI6ICLXlNeb16DXoSDXmNeR15zXlCIsCisgICAgIkluc2VydCBXZWIgTGluayI6ICLXlNeb16DXoSDXlNeZ16TXqC3Xp9eZ16nXldeoIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICLXlNeb16DXoS/Xqdeg15Qg16rXnteV16DXlCIsCisgICAgIkl0YWxpYyI6ICLXoNeY15XXmSIsCisgICAgIkp1c3RpZnkgQ2VudGVyIjogIteZ16nXldeoINec157XqNeb15YiLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAi15nXqdeV16gg15zXqdeV16jXlCDXntec15DXlCIsCisgICAgIkp1c3RpZnkgTGVmdCI6ICIg15nXqdeV16gg15zXqdee15DXnCIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAi15nXqdeV16gg15zXmdee15nXnyIsCisgICAgIk9yZGVyZWQgTGlzdCI6ICLXqNep15nXnteUINee157Xldeh16TXqNeqIiwKKyAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAi15TXk9eR16cg157XlNec15XXlyIsCisgICAgIlBhdGgiOiAi16DXqteZ15Eg16LXmdem15XXkSIsCisgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogItee15HXpteiINee15fXk9epINeQ16og15TXpNei15XXnNeUINeU15DXl9eo15XXoNeUINep15HXmdeY15zXqiIsCisgICAgIlN0cmlrZXRocm91Z2giOiAi16fXlSDXkNee16bXoiIsCisgICAgIlN1YnNjcmlwdCI6ICLXm9eq15Eg16LXmdec15kiLAorICAgICJTdXBlcnNjcmlwdCI6ICLXm9eq15Eg16rXl9eq15kiLAorICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAi16nXoNeUINee16bXkSDXp9eV15MgSFRNTCIsCisgICAgIlVuZGVybGluZSI6ICLXp9eVINeq15fXqteZIiwKKyAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi157XkdeY15wg15DXqiDXpNei15XXnNeq15og15TXkNeX16jXldeg15QiLAorICAgICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAi15DXqteUINeR157XpteRINeY16fXodeYINeg16fXmSAo16fXldeTKS4g15TXqdeq157XqSDXkdeb16TXqteV16ggWzw+XSDXm9eT15kg15zXl9eW15XXqCDXnNee16bXkSBXWVNJV1lHICjXqtem15XXkteqINei15nXpteV15EpLiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKKyAgICAgICAgIkVubGFyZ2UgRWRpdG9yIjogIteU15LXk9ecINeQ16og15TXoteV16jXmiIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAi15TXldeh16Mv16nXoNeUINen15nXqdeV16giLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICLXl9ec15XXnyDXl9eT16kgKF9ibGFuaykiLAorICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICLXnNec15AgKNeU16nXqtee16kg15EtZnJhbWUg15TXp9eZ15nXnSkiLAorICAgICAgICAiT0siOiAi15DXmdep15XXqCIsCisgICAgICAgICJPdGhlciI6ICLXkNeX16giLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIteQ15XXqteVIGZyYW1lIChfc2VsZikiLAorICAgICAgICAiVGFyZ2V0OiI6ICLXmdei15M6IiwKKyAgICAgICAgIlRoZSBmdWxsIHNjcmVlbiBtb2RlIGlzIGtub3duIHRvIGNhdXNlIHByb2JsZW1zIHdpdGggSW50ZXJuZXQgRXhwbG9yZXIsIGR1ZSB0byBicm93c2VyIGJ1Z3MgdGhhdCB3ZSB3ZXJlbiI6ICLXntem15Eg157XodeaINee15zXkCDXmdeV16bXqCDXkdei15nXldeqINeR15PXpNeT16TXnyBJbnRlcm5ldCBFeHBsb3Jlciwg16LXp9eRINeR15DXkteZ150g15HXk9ek15PXpNefINec15Ag15nXm9eV15zXoNeVINec16TXqteV16gg15DXqiDXlteULiAg15DXqi/XlCDXotec15XXnC/XlCDXnNeX15XXldeqINeq16bXldeS16og15bXkdecLCAg15HXoteZ15XXqiDXkdeq16TXp9eV15Mg15TXoteV16jXmiDXlS/XkNeVINen16jXmdeh15Qg16nXnCDXlNeT16TXk9ek158uICDXkNedINeU157Xoteo15vXqiDXqdec15og15TXmdeQIFdpbmRvd3MgOXgg16HXkdeZ16gg15zXlNeg15nXlyDXqdeq16fXkdecL9eZICIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogIteb15XXqteo16ogKHRvb2x0aXApOiIsCisgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIkZyYW1lINei15zXmdeV158gKF90b3ApIiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAi15fXldeR15Qg15zXm9eq15XXkSBVUkwg16nXkNec15nXlSDXp9eZ16nXldeoINeW15Qg157XpteR15nXoiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2h1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YmVhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2h1LmpzCkBAIC0wLDAgKzEsNjEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaHUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiTsOpdmplZ3kiLAorICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIkjDoXR0w6lyc3rDrW4iLAorICAgICJCb2xkIjogIkbDqWxrw7Z2w6lyIiwKKyAgICAiQnVsbGV0ZWQgTGlzdCI6ICJTesOhbW96YXRsYW4gbGlzdGEiLAorICAgICJDb3B5IHNlbGVjdGlvbiI6ICJNw6Fzb2zDoXMiLAorICAgICJDdXJyZW50IHN0eWxlIjogIkFrdHXDoWxpcyBzdMOtbHVzIiwKKyAgICAiQ3V0IHNlbGVjdGlvbiI6ICJLaXbDoWfDoXMiLAorICAgICJEZWNyZWFzZSBJbmRlbnQiOiAiQmVow7p6w6FzIGNzw7Zra2VudMOpc2UiLAorICAgICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICJJcsOhbnkgYmFscsOzbCBqb2JicmEiLAorICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJJcsOhbnkgam9iYnLDs2wgYmFscmEiLAorICAgICJGb250IENvbG9yIjogIkthcmFrdGVyc3rDrW4iLAorICAgICJIZWxwIHVzaW5nIGVkaXRvciI6ICJTw7pnw7MiLAorICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiRWx2w6FsYXN6dMOzIHZvbmFsIiwKKyAgICAiSW5jcmVhc2UgSW5kZW50IjogIkJlaMO6esOhcyBuw7Z2ZWzDqXNlIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIlTDoWJsw6F6YXQgYmVzesO6csOhc2EiLAorICAgICJJbnNlcnQgV2ViIExpbmsiOiAiSGlwZXJoaXZhdGtvesOhcyBiZXN6w7pyw6FzYSIsCisgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiS8OpcCBiZXN6w7pyw6FzYSIsCisgICAgIkl0YWxpYyI6ICJExZFsdCIsCisgICAgIkp1c3RpZnkgQ2VudGVyIjogIkvDtnrDqXByZSB6w6FydCIsCisgICAgIkp1c3RpZnkgRnVsbCI6ICJTb3JraXrDoXJ0IiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogIkJhbHJhIHrDoXJ0IiwKKyAgICAiSnVzdGlmeSBSaWdodCI6ICJKb2JicmEgesOhcnQiLAorICAgICJPcmRlcmVkIExpc3QiOiAiU3rDoW1vem90dCBsaXN0YSIsCisgICAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIkJlaWxsZXN6dMOpcyIsCisgICAgIlBhdGgiOiAiSGllcmFyY2hpYSIsCisgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIsOaanJhIHbDqWdyZWhhanTDoXMiLAorICAgICJTdHJpa2V0aHJvdWdoIjogIsOBdGjDunpvdHQiLAorICAgICJTdWJzY3JpcHQiOiAiQWxzw7MgaW5kZXgiLAorICAgICJTdXBlcnNjcmlwdCI6ICJGZWxzxZEgaW5kZXgiLAorICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiSFRNTCBmb3Jyw6FzIGJlL2tpIiwKKyAgICAiVW5kZXJsaW5lIjogIkFsw6Fow7p6b3R0IiwKKyAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiVmlzc3phdm9uw6FzIiwKKyAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIkZvcnLDoXMgbcOzZC4gVmlzc3phdsOhbHTDoXMgWzw+XSBnb21iIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQ2FuY2VsIjogIk3DqWdzZW0iLAorICAgICAgICAiRW5sYXJnZSBFZGl0b3IiOiAiU3plcmtlc3p0xZEga8O8bMO2biBhYmxha2JhbiIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSGl2YXRrb3rDoXMgQmVzesO6csOhc2EvTcOzZG9zw610w6FzYSIsCisgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIsOaaiBhYmxhayAoX2JsYW5rKSIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIk5pbmNzICh1c2UgaW1wbGljaXQpIiwKKyAgICAgICAgIk9LIjogIlJlbmRiZW4iLAorICAgICAgICAiT3RoZXIiOiAiTcOhcyIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiVWd5YW5hYmJhIGEga2VyZXRiZSAoX3NlbGYpIiwKKyAgICAgICAgIlRhcmdldDoiOiAiQ8OpbDoiLAorICAgICAgICAiVGhlIGZ1bGwgc2NyZWVuIG1vZGUgaXMga25vd24gdG8gY2F1c2UgcHJvYmxlbXMgd2l0aCBJbnRlcm5ldCBFeHBsb3JlciwgZHVlIHRvIGJyb3dzZXIgYnVncyB0aGF0IHdlIHdlcmVuIjogIkEgdGVsamVza8OpcHJlbnnFkXMgc3plcmtlc3p0w6lzIGhpYsOhdCBva296aGF0IEludGVybmV0IEV4cGxvcmVyIGhhc3puw6FsYXRhIGVzZXTDqW4sIGV6IGEgYsO2bmfDqXN6xZEgYSBoaWLDoWphLCBhbWl0IG5lbSB0dWR1bmsga2lrZXLDvGxuaS4gU3plbWV0ZXQgw6lzemxlbGhldCBhIGvDqXByZW55xZFuLCBpbGxldHZlIG7DqWjDoW55IGZ1bmtjacOzIGhpw6FueW96aGF0IMOpcy92YWd5IHbDqWxldGxlbnN6ZXLFsWVuIGxlZmFneWhhdCBhIGLDtm5nw6lzesWRLiBXaW5kb3dzIDl4IG9wZXJhY2nDs3MgZnV0dGF0w6FzYSBlc2V0w6luIGVsw6lnIHZhbMOzc3rDrW7FsSwgaG9neSAiLAorICAgICAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICJDw61tICh0b29sdGlwKToiLAorICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJGZWxzxZEga2VyZXQgKF90b3ApIiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAiQmUga2VsbCDDrXJuaWEgYXogVVJMLXQsIGFob3ZhIGEgaGl2YXRrb3rDoXMgbXV0YXNzb24iCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9pdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWNmMTVkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9pdC5qcwpAQCAtMCwwICsxLDYxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIml0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIkluZm9ybWF6aW9uaSBzdSBYaW5oYSIsCisgICAgIkJhY2tncm91bmQgQ29sb3IiOiAiQ29sb3JlIHNmb25kbyIsCisgICAgIkJvbGQiOiAiR3Jhc3NldHRvIiwKKyAgICAiQnVsbGV0ZWQgTGlzdCI6ICJMaXN0YSBub24gbnVtZXJhdGEiLAorICAgICJDb3B5IHNlbGVjdGlvbiI6ICJDb3BpYSIsCisgICAgIkN1cnJlbnQgc3R5bGUiOiAiU3RpbGUgY29ycmVudGUiLAorICAgICJDdXQgc2VsZWN0aW9uIjogIlRhZ2xpYSIsCisgICAgIkRlY3JlYXNlIEluZGVudCI6ICJEaW1pbnVpc2NpIGluZGVudGF6aW9uZSIsCisgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIlRlc3RvIGRhIHN4IGEgZHgiLAorICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJUZXN0byBkYSBkeCBhIHN4IiwKKyAgICAiRm9udCBDb2xvciI6ICJDb2xvcmUgZm9udCIsCisgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIkFpdXRvIiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogIlJpZ2hlbGxvIG9yaXp6b250YWxlIiwKKyAgICAiSW5jcmVhc2UgSW5kZW50IjogIkF1bWVudGEgaW5kZW50YXppb25lIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIkluc2VyaXNjaSB0YWJlbGxhIiwKKyAgICAiSW5zZXJ0IFdlYiBMaW5rIjogIkluc2VyaXNjaSBsaW5rIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJbnNlcmlzY2kvbW9kaWZpY2EgSW1tYWdpbmUiLAorICAgICJJdGFsaWMiOiAiQ29yc2l2byIsCisgICAgIkp1c3RpZnkgQ2VudGVyIjogIkNlbnRyYXRvIiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIkdpdXN0aWZpY2F0byIsCisgICAgIkp1c3RpZnkgTGVmdCI6ICJTaW5pc3RyYSIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAiRGVzdHJhIiwKKyAgICAiT3JkZXJlZCBMaXN0IjogIkxpc3RhIG51bWVyYXRhIiwKKyAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiSW5jb2xsYSIsCisgICAgIlBhdGgiOiAiUGVyY29yc28iLAorICAgICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJSaXBldGkgdWx0aW1hIGF6aW9uZSIsCisgICAgIlN0cmlrZXRocm91Z2giOiAiQmFycmF0byIsCisgICAgIlN1YnNjcmlwdCI6ICJQZWRpY2UiLAorICAgICJTdXBlcnNjcmlwdCI6ICJBcGljZSIsCisgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJWaXN1YWxpenphL25hc2NvbmRpIHNvcmdlbnRlIEhUTUwiLAorICAgICJVbmRlcmxpbmUiOiAiU290dG9saW5lYXRvIiwKKyAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiQW5udWxsYSB1bHRpbWEgYXppb25lIiwKKyAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIlNlaSBpbiBNT0RBTElUQSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGxhIiwKKyAgICAgICAgIkVubGFyZ2UgRWRpdG9yIjogIkFsbGFyZ2EgZWRpdG9yIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJJbnNlcmlzY2kvbW9kaWZpY2EgbGluayIsCisgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIk51b3ZhIGZpbmVzdHJhIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiTmllbnRlICh1c2EgaW1wbGljaXRvKSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPdGhlciI6ICJBbHRybyIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiU3Rlc3NhIGZyYW1lIChfc2VsZikiLAorICAgICAgICAiVGFyZ2V0OiI6ICJUYXJnZXQ6IiwKKyAgICAgICAgIlRoZSBmdWxsIHNjcmVlbiBtb2RlIGlzIGtub3duIHRvIGNhdXNlIHByb2JsZW1zIHdpdGggSW50ZXJuZXQgRXhwbG9yZXIsIGR1ZSB0byBicm93c2VyIGJ1Z3MgdGhhdCB3ZSB3ZXJlbiI6ICJFIiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAiVGl0bGUgKHN1Z2dlcmltZW50byk6IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiUGFnaW5hIGludGVyYSAoX3RvcCkiLAorICAgICAgICAiVVJMOiI6ICJVUkw6IiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICJEZXZpIGluc2VyaXJlIGwnaW5kaXJpenpvIGEgY3VpIHB1bnRhIGlsIGxpbmsiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9qYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjkyOTAxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9qYS5qcwpAQCAtMCwwICsxLDE2MyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICImIzgyMTI7IGZvbnQgJiM4MjEyOyI6ICImIzgyMTI7IOODleOCqeODs+ODiCAmIzgyMTI7IiwKKyAgICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICImIzgyMTI7IOabuOW8jyAmIzgyMTI7IiwKKyAgICAiJiM4MjEyOyBzaXplICYjODIxMjsiOiAiJiM4MjEyOyDjgrXjgqTjgrogJiM4MjEyOyIsCisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIuODkOODvOOCuOODp+ODs+aDheWgsSIsCisgICAgIkFkZHJlc3MiOiAi44Ki44OJ44Os44K5IiwKKyAgICAiQmFja2dyb3VuZCBDb2xvciI6ICLog4zmma/oibIiLAorICAgICJCb2xkIjogIuWkquWtlyIsCisgICAgIkJ1bGxldGVkIExpc3QiOiAi6KiY5Y+35LuY44GN566H5p2h5pu444GNIiwKKyAgICAiQ2xlYW4gY29udGVudCBwYXN0ZWQgZnJvbSBXb3JkIjogIldvcmTjgYvjgonosrzjgorku5jjgZHjgonjgozjgZ/lhoXlrrnjga7muIXmm7giLAorICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICLjgqTjg7Pjg6njgqTjg7Pjg5Xjgqnjg7Pjg4jmjIflrprjgpLjgq/jg6rjgqIiLAorICAgICJDbGVhciBNU09mZmljZSB0YWdzIjogIk1TT2ZmaWNl44K/44Kw44KS44Kv44Oq44KiIiwKKyAgICAiQ2xvc2UiOiAi6ZaJ44GY44KLIiwKKyAgICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICLjgqrjg5bjgrjjgqfjgq/jg4jmp4vnr4nkuK0iLAorICAgICJDb3B5IHNlbGVjdGlvbiI6ICLjgrPjg5Tjg7wiLAorICAgICJDcmVhdGUgU3RhdHVzYmFyIjogIuOCueODhuODvOOCv+OCueODkOODvOOBruS9nOaIkCIsCisgICAgIkNyZWF0ZSBUb29sYmFyIjogIuODhOODvOODq+ODkOODvOOBruS9nOaIkCIsCisgICAgIkN1cnJlbnQgc3R5bGUiOiAi54++5Zyo44Gu44K544K/44Kk44OrIiwKKyAgICAiQ3V0IHNlbGVjdGlvbiI6ICLliIfjgorlj5bjgooiLAorICAgICJEZWNyZWFzZSBJbmRlbnQiOiAi44Kk44Oz44OH44Oz44OI6Kej6ZmkIiwKKyAgICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAi5bem44GL44KJ5Y+z44G4IiwKKyAgICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAi5Y+z44GL44KJ5bem44G4IiwKKyAgICAiRU5URVIiOiAiRU5URVIiLAorICAgICJFZGl0b3IgSGVscCI6ICLjgqjjg4fjgqPjgr/jga7jg5jjg6vjg5ciLAorICAgICJGaW5pc2hpbmciOiAi5a6M5LqGIiwKKyAgICAiRm9udCBDb2xvciI6ICLmloflrZfoibIiLAorICAgICJGb3JtYXR0ZWQiOiAi5pW05b2i5riI44G/IiwKKyAgICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIlhpbmhh44OV44Os44O844Og44Ov44O844Kv55Sf5oiQ5LitIiwKKyAgICAiSGVhZGluZyAxIjogIuimi+WHuuOBlzEiLAorICAgICJIZWFkaW5nIDIiOiAi6KaL5Ye644GXMiIsCisgICAgIkhlYWRpbmcgMyI6ICLopovlh7rjgZczIiwKKyAgICAiSGVhZGluZyA0IjogIuimi+WHuuOBlzQiLAorICAgICJIZWFkaW5nIDUiOiAi6KaL5Ye644GXNSIsCisgICAgIkhlYWRpbmcgNiI6ICLopovlh7rjgZc2IiwKKyAgICAiSGVhZGluZ3MiOiAi6KaL5Ye644GXIiwKKyAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAi44OY44Or44OXIiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogIuawtOW5s+e3miIsCisgICAgIkluY3JlYXNlIEluZGVudCI6ICLjgqTjg7Pjg4fjg7Pjg4joqK3lrpoiLAorICAgICJJbml0IGVkaXRvciBzaXplIjogIuOCqOODh+OCo+OCv+OCteOCpOOCuuOBruWIneacn+WMliIsCisgICAgIkluc2VydCBUYWJsZSI6ICLjg4bjg7zjg5bjg6vjga7mjL/lhaUiLAorICAgICJJbnNlcnQgV2ViIExpbmsiOiAi44Oq44Oz44Kv44Gu5oy/5YWlIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICLnlLvlg4/jga7mjL/lhaUv5L+u5q2jIiwKKyAgICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICLmjL/lhaUv5LiK5pu444GNIiwKKyAgICAiSXRhbGljIjogIuaWnOS9kyIsCisgICAgIkp1c3RpZnkgQ2VudGVyIjogIuS4reWkruWvhOOBmyIsCisgICAgIkp1c3RpZnkgRnVsbCI6ICLlnYfnrYnlibLku5giLAorICAgICJKdXN0aWZ5IExlZnQiOiAi5bem5a+E44GbIiwKKyAgICAiSnVzdGlmeSBSaWdodCI6ICLlj7Plr4TjgZsiLAorICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAi44Kt44O844Oc44O844OJ44K344On44O844OI44Kr44OD44OIIiwKKyAgICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIjogIuODreODvOODieS4reOBp+OBmeOAguOBl+OBsOOCieOBj+OBiuW+heOBoeOBj+OBoOOBleOBhCIsCisgICAgIkxvYWRpbmcgcGx1Z2luICRwbHVnaW4iOiAi44Ot44O844OJ5Lit44OX44Op44Kw44Kk44OzICRwbHVnaW4iLAorICAgICJOb3JtYWwiOiAi5qiZ5rqWIiwKKyAgICAiT3JkZXJlZCBMaXN0IjogIueVquWPt+S7mOOBjeeuh+adoeabuOOBjSIsCisgICAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIuiyvOOCiuS7mOOBkSIsCisgICAgIlBhdGgiOiAi44OR44K5IiwKKyAgICAiUHJpbnQgZG9jdW1lbnQiOiAi5Y2w5Yi3IiwKKyAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi44KE44KK55u044GXIiwKKyAgICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAi55m76Yyy5Lit44OX44Op44Kw44Kk44OzICRwbHVnaW4iLAorICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICLmm7jlvI/liYrpmaQiLAorICAgICJTSElGVC1FTlRFUiI6ICJTSElGVCtFTlRFUiIsCisgICAgIlNhdmUgYXMiOiAi5ZCN5YmN44KS44Gk44GR44Gm5L+d5a2YIiwKKyAgICAiU2VsZWN0IGFsbCI6ICLjgZnjgbnjgabpgbjmip4iLAorICAgICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICLmrrXokL3mm7jlvI/jga7oqK3lrpoiLAorICAgICJTcGxpdCBCbG9jayI6ICLpoJjln5/liIblibIiLAorICAgICJTdHJpa2V0aHJvdWdoIjogIuaJk+OBoea2iOOBl+e3miIsCisgICAgIlN1YnNjcmlwdCI6ICLkuIvku5jjgY3mt7vjgYjlrZciLAorICAgICJTdXBlcnNjcmlwdCI6ICLkuIrku5jjgY3mt7vjgYjlrZciLAorICAgICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAi44Ko44OH44Kj44K/44Gv5Lul5LiL44Gu44Kt44O85pON5L2c44KS5o+Q5L6b44GX44Gm44GE44G+44GZOiIsCisgICAgIlRvZ2dsZSBCb3JkZXJzIjogIuWig+eVjOe3muOBruWIh+abvyIsCisgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJIVE1M57eo6ZuG44Oi44O844OJ44KS5YiH5pu/IiwKKyAgICAiVW5kZXJsaW5lIjogIuS4i+e3miIsCisgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIuWFg+OBq+aIu+OBmSIsCisgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAi6Imy44KS44Kv44Oq44Ki44GX44G+44GZ44GLPyIsCisgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIuOCteOCpOOCuuOCkuOCr+ODquOCouOBl+OBvuOBmeOBiz8iLAorICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAi44OV44Kp44Oz44OI5ZCN44KS44Kv44Oq44Ki44GX44G+44GZ44GLPyIsCisgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICLjg4bjgq3jgrnjg4jjg6Ljg7zjg4njgafmk43kvZzjgZfjgabjgYTjgb7jgZnjgIJXWVNJV1lH57eo6ZuG44Gr5oi744KL44Gr44GvWzw+XeODnOOCv+ODs+OCkuS9v+OBo+OBpuOBj+OBoOOBleOBhOOAgiIsCisgICAgImluc2VydCBsaW5lYnJlYWsiOiAi5q616JC95YaF5pS56KGM44Gu5oy/5YWlIiwKKyAgICAibmV3IHBhcmFncmFwaCI6ICLmlrDopo/mrrXokL0iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBYnNib3R0b20iOiAi5LiLKOe1tuWvvueahCkiLAorICAgICAgICAiQWJzbWlkZGxlIjogIuS4reWkrijntbblr77nmoQpIiwKKyAgICAgICAgIkFsaWdubWVudDoiOiAi6KGM5o+D44GIOiIsCisgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAi5Luj5pu/44OG44Kt44K544OIOiIsCisgICAgICAgICJCYXNlbGluZSI6ICLjg5njg7zjgrnjg6njgqTjg7MiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAi5aKD55WM57ea44Gu5aSq44GVOiIsCisgICAgICAgICJCb3R0b20iOiAi5LiLIiwKKyAgICAgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICLjgrvjg6vkvZnnmb06IiwKKyAgICAgICAgIkNlbGwgc3BhY2luZzoiOiAi44K744Or6ZaT6ZqUOiIsCisgICAgICAgICJDbGljayBhIGNvbG9yLi4uIjogIuiJsuOCkuOCr+ODquODg+OCry4uLiIsCisgICAgICAgICJDb2xvcjogIjogIuiJsjogIiwKKyAgICAgICAgIkNvbHM6IjogIuWIlzoiLAorICAgICAgICAiRW0iOiAi55u45a++5YCkKGVtKSIsCisgICAgICAgICJFbmxhcmdlIEVkaXRvciI6ICLjgqjjg4fjgqPjgr/jgpLmnIDlpKfljJYiLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIueUu+WDj+OBrlVSTOOCkuOBk+OBk+OBq+WFpeWKm+OBl+OBvuOBmSIsCisgICAgICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIuWIl+OBruW5heOCkuWbuuWumiIsCisgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICLnlLvlg4/ooajnpLrjgpLjgrXjg53jg7zjg4jjgZfjgarjgYTjg5bjg6njgqbjgrbjgavlv4XopoHjgafjgZkiLAorICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIuawtOW5s+S9meeZvSIsCisgICAgICAgICJIb3Jpem9udGFsOiI6ICLmsLTlubM6IiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIueUu+WDj+ihqOekujoiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICLnlLvlg49VUkw6IiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICLnlLvlg4/jga7mjL/lhaUiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIuODquODs+OCr+OBruaMv+WFpS/kv67mraMiLAorICAgICAgICAiTGF5b3V0IjogIuODrOOCpOOCouOCpuODiCIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIuWig+eVjOe3muOBjOOBquOBhOWgtOWQiOOBr+epuuOBruOBvuOBvuOBq+OBmeOCiyIsCisgICAgICAgICJMZWZ0IjogIuW3piIsCisgICAgICAgICJNaWRkbGUiOiAi5Lit5aSuIiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAi5paw44GX44GE44Km44Kj44Oz44OJ44KmIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi44Gq44GXICjjg4fjg5Xjgqnjg6vjg4jjgavku7vjgZvjgospIiwKKyAgICAgICAgIk5vdCBzZXQiOiAi44Gq44GXIiwKKyAgICAgICAgIk51bWJlciBvZiBjb2x1bW5zIjogIuWIl+aVsCIsCisgICAgICAgICJOdW1iZXIgb2Ygcm93cyI6ICLooYzmlbAiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3RoZXIiOiAi44Gd44Gu5LuWIiwKKyAgICAgICAgIlBlcmNlbnQiOiAi44OR44O844K744Oz44OIKCUpIiwKKyAgICAgICAgIlBpeGVscyI6ICLjg5Tjgq/jgrvjg6socHgpIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAi55S75YOP44Gu6YWN572uIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAi44GT44Gu44OG44O844OW44Or44Gu6YWN572uIiwKKyAgICAgICAgIlByZXZpZXciOiAi6KGo56S6IiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICLjgqbjgqPjg7Pjg4njgqbjgafnlLvlg4/jgpLooajnpLoiLAorICAgICAgICAiUmVnaXN0ZXIgYm90dG9tIHBhbmVsIjogIueZu+mMsiDkuIvjg5Hjg43jg6siLAorICAgICAgICAiUmVnaXN0ZXIgbGVmdCBwYW5lbCI6ICLnmbvpjLIg5bem44OR44ON44OrIiwKKyAgICAgICAgIlJlZ2lzdGVyIHJpZ2h0IHBhbmVsIjogIueZu+mMsiDlj7Pjg5Hjg43jg6siLAorICAgICAgICAiUmVnaXN0ZXIgdG9wIHBhbmVsIjogIueZu+mMsiDkuIrjg5Hjg43jg6siLAorICAgICAgICAiUmlnaHQiOiAi5Y+zIiwKKyAgICAgICAgIlJvd3M6IjogIuihjDoiLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIuiHquW3seODleODrOODvOODoOWGhSAoX3NlbGYpIiwKKyAgICAgICAgIlNhbXBsZSI6ICLjgrXjg7Pjg5fjg6siLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICLpmqPmjqXjgZnjgovjgrvjg6vplpPjga7ot53pm6IiLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICLjgrvjg6vlhoXjgavjgYrjgZHjgovlhoXlrrnjgajlooPnlYznt5rjgajjga7ot53pm6IiLAorICAgICAgICAiU3BhY2luZyI6ICLplpPpmpQiLAorICAgICAgICAiVGFyZ2V0OiI6ICLjgr/jg7zjgrLjg4Pjg4g6IiwKKyAgICAgICAgIlRleHR0b3AiOiAi44OG44Kt44K544OI5LiK6YOoIiwKKyAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiTW96aWxsYeODmeODvOOCueOBrldlYuODluODqeOCpuOCtuOBp+OBr+OAgeiyvOOCiuS7mOOBkeODnOOCv+ODs+OBr+apn+iDveOBl+OBvuOBm+OCk++8iOaKgOihk+eahOOBquOCu+OCreODpeODquODhuOCo+S4iuOBrueQhueUseOBp++8ieOAgkN0cmwrVuOCreODvOOCkuaKvOOBl+OBpuebtOaOpeiyvOOCiuS7mOOBkeOBpuOBj+OBoOOBleOBhOOAgiIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogIuOCv+OCpOODiOODqzoiLAorICAgICAgICAiVG9wIjogIuS4iiIsCisgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIuacgOS4iuS9jeODleODrOODvOODoCAoX3RvcCkiLAorICAgICAgICAiVVJMOiI6ICJVUkw6IiwKKyAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAi5Z6C55u05L2Z55m9IiwKKyAgICAgICAgIlZlcnRpY2FsOiI6ICLlnoLnm7Q6IiwKKyAgICAgICAgIldlYiBTYWZlOiAiOiAiV2Vi44K744O844OVOiAiLAorICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIuODhuODvOODluODq+OBruW5hSIsCisgICAgICAgICJXaWR0aCB1bml0IjogIuW5heOBruWNmOS9jSIsCisgICAgICAgICJXaWR0aDoiOiAi5bmFOiIsCisgICAgICAgICJYaW5oYSBIZWxwIjogIuODmOODq+ODlyIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiBjb2x1bW5zIjogIuWIl+aVsOOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhCIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIuihjOaVsOOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhCIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIlVSTOOCkuWFpeWKm+OBmeOCi+W/heimgeOBjOOBguOCiuOBvuOBmSIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAi44GT44Gu44Oq44Oz44Kv44GM5oyH44GX56S644GZVVJM44KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GEIiwKKyAgICAgICAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayI6ICLjg6rjg7Pjgq/jgpLkvZzmiJDjgZnjgovjgavjga/jg4bjgq3jgrnjg4jjgpLpgbjmip7jgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZkiLAorICAgICAgICAiWW91ciBEb2N1bWVudCBpcyBub3Qgd2VsbCBmb3JtZWQuIENoZWNrIEphdmFTY3JpcHQgY29uc29sZSBmb3IgZGV0YWlscy4iOiAi44GT44Gu5paH5pu444Gr44Gv5qeL5paH55qE44Gq5ZWP6aGM44GM44GC44KK44G+44GZ44CC6Kmz57Sw44GvSmF2YVNjcmlwdOOCs+ODs+OCveODvOODq+OCkuWPgueFp+OBl+OBpuOBj+OBoOOBleOBhOOAgiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbGNfYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2MwMzg2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9sY19iYXNlLmpzCkBAIC0wLDAgKzEsMTQxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgIiYjODIxMjsgZm9udCAmIzgyMTI7IjogIiIsCisgICAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiIiwKKyAgICAiJiM4MjEyOyBzaXplICYjODIxMjsiOiAiIiwKKyAgICAiMSAoOCBwdCkiOiAiIiwKKyAgICAiMiAoMTAgcHQpIjogIiIsCisgICAgIjMgKDEyIHB0KSI6ICIiLAorICAgICI0ICgxNCBwdCkiOiAiIiwKKyAgICAiNSAoMTggcHQpIjogIiIsCisgICAgIjYgKDI0IHB0KSI6ICIiLAorICAgICI3ICgzNiBwdCkiOiAiIiwKKyAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiIiwKKyAgICAiQWRkcmVzcyI6ICIiLAorICAgICJBcmlhbCI6ICIiLAorICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIiIsCisgICAgIkJvbGQiOiAiIiwKKyAgICAiQnVsbGV0ZWQgTGlzdCI6ICIiLAorICAgICJDVFJMLTAgKHplcm8pIjogIiIsCisgICAgIkNUUkwtMSAuLiBDVFJMLTYiOiAiIiwKKyAgICAiQ1RSTC1BIjogIiIsCisgICAgIkNUUkwtQiI6ICIiLAorICAgICJDVFJMLUMiOiAiIiwKKyAgICAiQ1RSTC1FIjogIiIsCisgICAgIkNUUkwtSSI6ICIiLAorICAgICJDVFJMLUoiOiAiIiwKKyAgICAiQ1RSTC1MIjogIiIsCisgICAgIkNUUkwtTiI6ICIiLAorICAgICJDVFJMLVIiOiAiIiwKKyAgICAiQ1RSTC1TIjogIiIsCisgICAgIkNUUkwtVSI6ICIiLAorICAgICJDVFJMLVYiOiAiIiwKKyAgICAiQ1RSTC1YIjogIiIsCisgICAgIkNUUkwtWSI6ICIiLAorICAgICJDVFJMLVoiOiAiIiwKKyAgICAiQ2xlYW4gY29udGVudCBwYXN0ZWQgZnJvbSBXb3JkIjogIiIsCisgICAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogIiIsCisgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiIiwKKyAgICAiQ2xvc2UiOiAiIiwKKyAgICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICIiLAorICAgICJDb3B5IHNlbGVjdGlvbiI6ICIiLAorICAgICJDb3VyaWVyIE5ldyI6ICIiLAorICAgICJDcmVhdGUgU3RhdHVzYmFyIjogIiIsCisgICAgIkNyZWF0ZSBUb29sYmFyIjogIiIsCisgICAgIkN1cnJlbnQgc3R5bGUiOiAiIiwKKyAgICAiQ3V0IHNlbGVjdGlvbiI6ICIiLAorICAgICJEZWNyZWFzZSBJbmRlbnQiOiAiIiwKKyAgICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiIiwKKyAgICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiIiwKKyAgICAiRU5URVIiOiAiIiwKKyAgICAiRWRpdG9yIEhlbHAiOiAiIiwKKyAgICAiRXJyb3IgTG9hZGluZyBYaW5oYS4gIERldmVsb3BlcnMsIGNoZWNrIHRoZSBFcnJvciBDb25zb2xlIGZvciBpbmZvcm1hdGlvbi4iOiAiIiwKKyAgICAiRmluaXNoaW5nIjogIiIsCisgICAgIkZvbnQgQ29sb3IiOiAiIiwKKyAgICAiRm9ybWF0dGVkIjogIiIsCisgICAgIkdlbmVyYXRlIFhpbmhhIGZyYW1ld29yayI6ICIiLAorICAgICJHZW9yZ2lhIjogIiIsCisgICAgIkhlYWRpbmcgMSI6ICIiLAorICAgICJIZWFkaW5nIDIiOiAiIiwKKyAgICAiSGVhZGluZyAzIjogIiIsCisgICAgIkhlYWRpbmcgNCI6ICIiLAorICAgICJIZWFkaW5nIDUiOiAiIiwKKyAgICAiSGVhZGluZyA2IjogIiIsCisgICAgIkhlYWRpbmdzIjogIiIsCisgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIiIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICIiLAorICAgICJJbXBhY3QiOiAiIiwKKyAgICAiSW5jcmVhc2UgSW5kZW50IjogIiIsCisgICAgIkluaXQgZWRpdG9yIHNpemUiOiAiIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIiIsCisgICAgIkluc2VydCBXZWIgTGluayI6ICIiLAorICAgICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIiIsCisgICAgIkluc2VydC9PdmVyd3JpdGUiOiAiIiwKKyAgICAiSXRhbGljIjogIiIsCisgICAgIkp1c3RpZnkgQ2VudGVyIjogIiIsCisgICAgIkp1c3RpZnkgRnVsbCI6ICIiLAorICAgICJKdXN0aWZ5IExlZnQiOiAiIiwKKyAgICAiSnVzdGlmeSBSaWdodCI6ICIiLAorICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiIiwKKyAgICAiTG9hZGluZyBDb3JlIjogIiIsCisgICAgIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ISI6ICIiLAorICAgICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIjogIiIsCisgICAgIkxvYWRpbmcgcGx1Z2lucyI6ICIiLAorICAgICJNUyBXb3JkIENsZWFuZXIiOiAiIiwKKyAgICAiTm9ybWFsIjogIiIsCisgICAgIk9yZGVyZWQgTGlzdCI6ICIiLAorICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICIiLAorICAgICJQYXRoIjogIiIsCisgICAgIlByaW50IGRvY3VtZW50IjogIiIsCisgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIiIsCisgICAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIjogIiIsCisgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIiIsCisgICAgIlNISUZULUVOVEVSIjogIiIsCisgICAgIlNhdmUgYXMiOiAiIiwKKyAgICAiU2VsZWN0IENvbG9yIjogIiIsCisgICAgIlNlbGVjdCBhbGwiOiAiIiwKKyAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiIiwKKyAgICAiU3BsaXQgQmxvY2siOiAiIiwKKyAgICAiU3RyaWtldGhyb3VnaCI6ICIiLAorICAgICJTdWJzY3JpcHQiOiAiIiwKKyAgICAiU3VwZXJzY3JpcHQiOiAiIiwKKyAgICAiVGFob21hIjogIiIsCisgICAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICIiLAorICAgICJUaW1lcyBOZXcgUm9tYW4iOiAiIiwKKyAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiIiwKKyAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIiIsCisgICAgIlRvdWNoIGhlcmUgZmlyc3QgdG8gYWN0aXZhdGUgZWRpdG9yLiI6ICIiLAorICAgICJVbmRlcmxpbmUiOiAiIiwKKyAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiIiwKKyAgICAiVmVyZGFuYSI6ICIiLAorICAgICJXYWl0aW5nIGZvciBJZnJhbWUgdG8gbG9hZC4uLiI6ICIiLAorICAgICJXaW5nRGluZ3MiOiAiIiwKKyAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICIiLAorICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICIiLAorICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiIiwKKyAgICAiWGluaGEiOiAiIiwKKyAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIiIsCisgICAgImluc2VydCBsaW5lYnJlYWsiOiAiIiwKKyAgICAibmV3IHBhcmFncmFwaCI6ICIiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9sdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxYjk5OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbHQuanMKQEAgLTAsMCArMSw1OSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJBcGllIHJlZGFrdG9yacWzIiwKKyAgICAiQmFja2dyb3VuZCBDb2xvciI6ICJGb25vIHNwYWx2YSIsCisgICAgIkJvbGQiOiAiUGFyecWha2ludGkiLAorICAgICJCdWxsZXRlZCBMaXN0IjogIlN1xb5lbmtsaW50YXMgc8SFcmHFoWFzIiwKKyAgICAiQ29weSBzZWxlY3Rpb24iOiAiS29waWp1b3RpIiwKKyAgICAiQ3VycmVudCBzdHlsZSI6ICJEYWJhcnRpbmlzIHN0aWxpdXMiLAorICAgICJDdXQgc2VsZWN0aW9uIjogIknFoWtpcnB0aSIsCisgICAgIkRlY3JlYXNlIEluZGVudCI6ICJTdW1hxb5pbnRpIHBhcmHFoXTEmSIsCisgICAgIkZvbnQgQ29sb3IiOiAixaByaWZ0byBzcGFsdmEiLAorICAgICJIZWxwIHVzaW5nIGVkaXRvciI6ICJQYWdhbGJhIG5hdWRvamFudCByZWRha3RvcmnFsyIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICJIb3Jpem9udGFsaSBsaW5pamEiLAorICAgICJJbmNyZWFzZSBJbmRlbnQiOiAiUGFkaWRpbnRpIHBhcmHFoXTEmSIsCisgICAgIkluc2VydCBUYWJsZSI6ICLErnRlcnB0aSBsZW50ZWzEmSIsCisgICAgIkluc2VydCBXZWIgTGluayI6ICLErnRlcnB0aSBudW9yb2TEhSIsCisgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAixK50ZXJwdGkgcGF2ZWlrc2xpdWvEhSIsCisgICAgIkl0YWxpYyI6ICJLdXJzeXZhcyIsCisgICAgIkp1c3RpZnkgQ2VudGVyIjogIkx5Z2lhdmltYXMgcGFnYWwgY2VudHLEhSIsCisgICAgIkp1c3RpZnkgRnVsbCI6ICJMeWdpdW90aSBwYXN0cmFpcMSFIiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogIkx5Z2lhdmltYXMgcGFnYWwga2FpcsSZIiwKKyAgICAiSnVzdGlmeSBSaWdodCI6ICJMeWdpYXZpbWFzIHBhZ2FsIGRlxaFpbsSZIiwKKyAgICAiT3JkZXJlZCBMaXN0IjogIk51bWVydW90YXMgc8SFcmHFoWFzIiwKKyAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAixK50ZXJwdGkiLAorICAgICJQYXRoIjogIktlbGlhcyIsCisgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlBha2FydG9qYSBwYXNrdXRpbsSvIGF0xaFhdWt0xIUgasWrc8WzIHZlaWtzbcSFIiwKKyAgICAiU3RyaWtldGhyb3VnaCI6ICJQZXJicmF1a3RpIiwKKyAgICAiU3Vic2NyaXB0IjogIkFwYXRpbmlzIGluZGVrc2FzIiwKKyAgICAiU3VwZXJzY3JpcHQiOiAiVmlyxaF1dGluaXMgaW5kZWtzYXMiLAorICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiUGVyanVuZ3RpIMSvIEhUTUwvV1lTSVdZRyIsCisgICAgIlVuZGVybGluZSI6ICJQYWJyYXVrdGkiLAorICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJBdMWhYXVraWEgcGFza3V0aW5pIGrFq3PFsyB2ZWlrc23EhSIsCisgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJKxatzIGVzZXRlIHRla3N0byByZcW+aW1lLiAgTmF1ZG9raXRlIFs8Pl0gbXlndHVrxIUgZ3LEr8W+aW11aSDEryBXWVNJV1lHLiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdMWhYXVrdGkiLAorICAgICAgICAiRW5sYXJnZSBFZGl0b3IiOiAiScWhcGzEl3N0YXMgcmVkYWdhdmltbyBla3JhbmFzL0VubGFyZ2UgRWRpdG9yIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJJZMSXdGkvTW9kaWZpa3VvdGkiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOYXVqYXMgbGFuZ2FzIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiTm9uZSAodXNlIGltcGxpY2l0KSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPdGhlciI6ICJLaXRhcyIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiU2FtZSBmcmFtZSAoX3NlbGYpIiwKKyAgICAgICAgIlRhcmdldDoiOiAiVGFyZ2V0OiIsCisgICAgICAgICJUaGUgZnVsbCBzY3JlZW4gbW9kZSBpcyBrbm93biB0byBjYXVzZSBwcm9ibGVtcyB3aXRoIEludGVybmV0IEV4cGxvcmVyLCBkdWUgdG8gYnJvd3NlciBidWdzIHRoYXQgd2Ugd2VyZW4iOiAiVGhlIGZ1bGwgc2NyZWVuIG1vZGUgaXMga25vd24gdG8gY2F1c2UgcHJvYmxlbXMgd2l0aCBJbnRlcm5ldCBFeHBsb3JlciwgZHVlIHRvIGJyb3dzZXIgYnVncyB0aGF0IHdlIHdlcmVuIiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAiUGF2YWRpbmltYXMgKHRvb2x0aXApOiIsCisgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIlRvcCBmcmFtZSAoX3RvcCkiLAorICAgICAgICAiVVJMOiI6ICJVUkw6IiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICJKdXMgcHJpdmFsb3RlIG51cm9keXRpIFVSTCDEryBrdXJpIHJvZG8gxaFpdMSFIG51b3JvZGEiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL2x2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9sdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTUxYWI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9sdi5qcwpAQCAtMCwwICsxLDQ4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIlBhciDDsG8gcmVkacOsw6d0w6JqdSIsCisgICAgIkJhY2tncm91bmQgQ29sb3IiOiAiRm9uYSBrcsOic2EiLAorICAgICJCb2xkIjogIlRyZWtuaWVtIGJ1cnRpZW0iLAorICAgICJCdWxsZXRlZCBMaXN0IjogIlNhcmFrc3RzIiwKKyAgICAiQ29weSBzZWxlY3Rpb24iOiAiS29ww6d0IGllesOubcOndG8iLAorICAgICJDdXJyZW50IHN0eWxlIjogIlBhdHJlaXrDp2phaXMgc3RpbHMiLAorICAgICJDdXQgc2VsZWN0aW9uIjogIkl6Z3JpZXp0IGllesOubcOndG8iLAorICAgICJEZWNyZWFzZSBJbmRlbnQiOiAiU2FtYXppbsOidCBhdGvDonBpIiwKKyAgICAiRm9udCBDb2xvciI6ICJCdXJ0dSBrcsOic2EiLAorICAgICJIZWxwIHVzaW5nIGVkaXRvciI6ICJSZWRpw6zDp3TDomphIHBhbMOuZ3MiLAorICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiSG9yaXpvbnTDomxhIGF0ZGFsw650w6Jqc3bDrnRyYSIsCisgICAgIkluY3JlYXNlIEluZGVudCI6ICJQYWxpZWxpbsOidCBhdGvDonBpIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIklldmlldG90IHRhYnVsdSIsCisgICAgIkluc2VydCBXZWIgTGluayI6ICJJZXZpZXRvdCBoaXBlcnNhaXRpIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJZXZpZXRvdCBhdHTDp2x1IiwKKyAgICAiSXRhbGljIjogIkt1cnPDrnbDoiIsCisgICAgIkp1c3RpZnkgQ2VudGVyIjogIkl6bMOuZHppbsOidCBjZW50csOiIiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIkl6bMOuZHppbsOidCBwYSB2aXN1IGxhcHUiLAorICAgICJKdXN0aWZ5IExlZnQiOiAiSXpsw65kemluw6J0IHBhIGtyZWlzaSIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAiSXpsw65kemluw6J0IHBhIGxhYmkiLAorICAgICJPcmRlcmVkIExpc3QiOiAiTnVtdXLDp3RzIHNhcmFrc3RzIiwKKyAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiSWV2aWV0b3QgaWV6w65tw6d0byIsCisgICAgIlBhdGgiOiAiQ2XDr8OwIiwKKyAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiQXRrw6JydG90IHDDp2TDp2pvIGRhcmLDrmJ1IiwKKyAgICAiU3RyaWtldGhyb3VnaCI6ICJQw6Jyc3bDrnRyb3RzIiwKKyAgICAiU3Vic2NyaXB0IjogIk5vdmlldG90IHplbSByaW5kYXMiLAorICAgICJTdXBlcnNjcmlwdCI6ICJOb3ZpZXRvdCB2aXJzIHJpbmRhcyIsCisgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJTa2F0w650IEhUTUwga29kdSIsCisgICAgIlVuZGVybGluZSI6ICJQYXN2w650cm90cyIsCisgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkF0Y2VsdCBww6dkw6dqbyBkYXJiw65idSIsCisgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJKw7tzIHBhdGxhYmFuIGRhcmJvamF0aWVzIFRFS1NUQSBSRcOew45Nw4IuIExhaSBww6JyaWV0dSBhdHBha2HDryB1eiBHUkFGSVNLTyBSRcOew45NVSAoV1lTSVdJRyksIGxpZXRvamlldCBbPD5dIHBvZ3UuIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQ2FuY2VsIjogIkF0Y2VsdCIsCisgICAgICAgICJFbmxhcmdlIEVkaXRvciI6ICJQYWxpZWxpbsOidCBSZWRpw6zDp3TDomp1IiwKKyAgICAgICAgIk9LIjogIkxhYmkiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9fX25ld19fLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvX19uZXdfXy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzY3M2U5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvX19uZXdfXy5qcwpAQCAtMCwwICsxLDE1MDMgQEAKKy8vIFhpbmhhIExhbmd1YWdlIENvbWJpbmVkIFRyYW5zbGF0aW9uIEZpbGUKKy8vCisvLyBMQU5HOiAiTkVXIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU5TVFJVQ1RJT05TIFRPIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBZb3VyIHRyYW5zbGF0aW9uIG11c3QgYmUgaW4gVVRGLTggQ2hhcmFjdGVyIEVuY29kaW5nLgorLy8KKy8vIFRoaXMgaXMgYSBKU09OIGVuY29kZWQgZmlsZSAocGx1cyBjb21tZW50cyksIHN0cmluZ3Mgc2hvdWxkIGJlIGRvdWJsZS1xdW90ZQorLy8gb25seSwgZG8gbm90IHVzZSBzaW5nbGUgcXVvdGVzIHRvIHN1cnJvdW5kIHN0cmluZ3MgLSAiaGVsbG8iLCBub3QgJ2hlbGxvJworLy8gZG8gbm90IGhhdmUgYSB0cmFpbGluZyBjb21tYSBhZnRlciB0aGUgbGFzdCBlbnRyeSBpbiBhIHNlY3Rpb24uCisvLworLy8gT25seSBmdWxsIGxpbmUgY29tbWVudHMgYXJlIGFsbG93ZWQgKHRoYXQgYSBjb21tZW50cyBvY2N1cHkgZW50aXJlIGxpbmVzKS4KKy8vCisvLyBTZWFyY2ggZm9yIHRoZSBfX05FV19UUkFOU0xBVElPTlNfXyBzZWN0aW9uIGJlbG93LCB0aGlzIGlzIHdoZXJlIHlvdSB3aWxsCisvLyB3YW50IHRvIGZvY3VzLCB0aGlzIHNlY3Rpb24gaW5jbHVkZXMgdGhpbmdzIHRoYXQgZG8gbm90IHByZXNlbnRseSBoYXZlIGEgCisvLyB0cmFuc2xhdGlvbiBvciBmb3Igd2hpY2ggdGhlIHRyYW5zbGF0aW9uIG5lZWRzIHRvIGJlIGNoZWNrZWQgZm9yIGFjY3VyYWN5LgorLy8KKy8vIEluIHRoZSBOZXcgVHJhbnNsYXRpb25zIHNlY3Rpb24gYSB0cmFuc2xhdGlvbiBzdHJpbmcgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcKKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIiIKKy8vICAgICBUaGlzIG1lYW5zIGl0IGlzIG5vdCB0cmFuc2xhdGVkIHlldCwgYWRkIHlvdXIgdHJhbnNsYXRpb24uLi4KKy8vICAgICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiS2xpbmdvbiBTdHJpbmcgSGVyZSIKKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIlRyYW5zbGF0ZWQgU3RyaW5nIEhlcmUiCisvLyAgICAgVGhpcyBtZWFucyB0aGF0IGFuIGV4aXN0aW5nIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZywgaW4gc29tZSBvdGhlcgorLy8gICAgIHNlY3Rpb24gaGFzIGJlZW4gZm91bmQsIGFuZCB1c2VkLiAgQ2hlY2sgdGhhdCBpdCBpcyBhcHByb3ByaXRlIGZvciB0aGlzCisvLyAgICAgc2VjdGlvbiBhbmQgaWYgaXQgaXMsIHRoYXQncyBmaW5lIGxlYXZlIGl0IGFzIGlzLCBvdGhlcndpc2UgY2hhbmdlIGFzCisvLyAgICAgYXBwcm9wcmlhdGUuCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICI8PEFub3RoZXJTZWN0aW9uPj4iCisvLyAgICAgVGhpcyBtZWFucyB1c2UgdGhlIHNhbWUgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nIGFzIDw8QW5vdGhlclNlY3Rpb24+PgorLy8gICAgIHRoaXMgc2F2ZXMgeW91IHJlLXRyYW5sYXRpbmcgc3RyaW5ncy4gIElmIHRoZSBDb250ZXh0IG9mIHRoaXMgc2VjdGlvbgorLy8gICAgIGFuZCB0aGUgY29udGV4dCBvZiBBbm90aGVyU2VjdGlvbiBzZWVtIHRoZSBzYW1lLCB0aGF0J3MgZmluZSBsZWF2ZSBpdAorLy8gICAgIHVzaW5nIHRoYXQgdHJhbnNsYXRpb24sIGJ1dCBpZiB0aGlzIHNlY3Rpb24gbmVlZHMgYSBkaWZmZXJlbnQgdHJhbnNsYXRpb24sIAorLy8gICAgIHlvdSBjYW4gcHJvdmlkZSBpdCBieSByZXBsYWNpbmcgdGhlIGxpbmsgKDw8QW5vdGhlclNlY3Rpb24+Pikgd2l0aCB0aGF0CisvLyAgICAgbmV3IHRyYW5zbGF0aW9uLiAgRm9yIGV4YW1wbGUgLSBhICJUYWJsZSIgaW4gc2F5ICJEYXRhUGx1Z2luIiBpcyAKKy8vICAgICBwZXJoYXBzIHRyYW5zbGF0ZWQgZGlmZmVyZW50bHkgdG8gIlRhYmxlIiBpbiAiRnVybml0dXJlUGx1Z2luIi4KKy8vCisvLyBURVNUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IHBsYWNlIHlvdXIgdHJhbnNsYXRpb24gZmlsZSBvbiB5b3VyIHdlYnNlcnZlciBzb21ld2hlcmUgZm9yIGV4YW1wbGUKKy8vCisvLyAgIC94aW5oYS9sYW5nL21lcmdlZC9ORVcuanMKKy8vCisvLyBhbmQgdGhlbiB0ZWxsIFhpbmhhIHdoZXJlIHRvIGdldCBpdCAoYmVmb3JlIGxvYWRpbmcgWGluaGFDb3JlLmpzKSBieSAKKy8vCisvLyAgX2VkaXRvcl9sYW5nICAgICAgICAgICAgICA9ICdORVcnOworLy8gIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSAgPSAnL3hpbmhhL2xhbmcvbWVyZ2VkL05FVy5qcyc7CisvLworLy8gWGluaGEgd2lsbCBsb2FkIHlvdXIgbmV3IGxhbmd1YWdlIGRlZmluaXRpb24uCisvLworLy8gU1VCTUlUVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBjcmVhdGUgYSBUaWNrZXQgb24gdGhlIFhpbmhhIHdlYnNpdGUgYW5kIGF0dGFjaCB5b3VyIHRyYW5zbGF0aW9uIAorLy8gZmlsZS4KKy8vCisvLyBUaGUgWGluaGEgZGV2ZWxvcGVycyB3aWxsIHRha2UgeW91ciBmaWxlIGFuZCB1c2UgdGhlIAorLy8gICAgIGNvbnRyaWIvbGNfc3BsaXRfbWVyZ2VkX2ZpbGUucGhwCisvLyBzY3JpcHQgdG8gbG9hZCBpdCBpbnRvIHRoZSBYaW5oYSBkaXN0cmlidXRpb24uCisKK3sKKyAgICAiX19ORVdfVFJBTlNMQVRJT05TX18iOiB7CisgICAgICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICAgICAiQWJicmV2aWF0aW9uIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIiIsCisgICAgICAgICAgICAiRXhwYW5zaW9uOiI6ICIiLAorICAgICAgICAgICAgIk9LIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkFib3V0Qm94IjogeworICAgICAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIjw8WGluaGE+PiIsCisgICAgICAgICAgICAiQ2xvc2UiOiAiPDxYaW5oYT4+IgorICAgICAgICB9LAorICAgICAgICAiQ2hhckNvdW50ZXIiOiB7CisgICAgICAgICAgICAiLi4uIGluIHByb2dyZXNzIjogIiIsCisgICAgICAgICAgICAiQ2hhcnMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIiIsCisgICAgICAgICAgICAiV29yZHMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2hhcmFjdGVyTWFwIjogeworICAgICAgICAgICAgIkluc2VydCBzcGVjaWFsIGNoYXJhY3RlciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDb2xvclBpY2tlciI6IHsKKyAgICAgICAgICAgICJDbGljayBhIGNvbG9yLi4uIjogIiIsCisgICAgICAgICAgICAiQ29sb3I6ICI6ICIiLAorICAgICAgICAgICAgIlNhbXBsZSI6ICIiLAorICAgICAgICAgICAgIldlYiBTYWZlOiAiOiAiIiwKKyAgICAgICAgICAgICJDbG9zZSI6ICI8PFhpbmhhPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgICAgICJfRGVsZXRlIFJvdyI6ICIiLAorICAgICAgICAgICAgIl9JbWFnZSBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiX01vZGlmeSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1JlbW92ZSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1RhYmxlIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJDX2VsbCBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiQ2hlY19rIExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJDb3B5IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIGEgbGluayI6ICIiLAorICAgICAgICAgICAgIkN1cnJlbnQgVVJMIGlzIjogIiIsCisgICAgICAgICAgICAiQ3V0IjogIiIsCisgICAgICAgICAgICAiRGVfbGV0ZSBDb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgQ2VsbCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIiIsCisgICAgICAgICAgICAiSG93IGRpZCB5b3UgZ2V0IGhlcmU/IChQbGVhc2UgcmVwb3J0ISkiOiAiIiwKKyAgICAgICAgICAgICJJX25zZXJ0IFJvdyBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYWZ0ZXIgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJMaW5rIHBvaW50cyB0bzoiOiAiIiwKKyAgICAgICAgICAgICJNYWtlIGxpbl9rLi4uIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiUGFzdGUiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGVsZW1lbnQ6IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJSb193IFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBpbWFnZSBwcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIFJvdyBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlVubGluayB0aGUgY3VycmVudCBlbGVtZW50IjogIiIsCisgICAgICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiPDxYaW5oYT4+IiwKKyAgICAgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAiPDxYaW5oYT4+IiwKKyAgICAgICAgICAgICJKdXN0aWZ5IExlZnQiOiAiPDxYaW5oYT4+IiwKKyAgICAgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIjw8WGluaGE+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIiIsCisgICAgICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICIiLAorICAgICAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiIiwKKyAgICAgICAgICAgICJPdGhlciI6ICIiLAorICAgICAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICIiLAorICAgICAgICAgICAgIlRhcmdldDoiOiAiIiwKKyAgICAgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogIiIsCisgICAgICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICIiLAorICAgICAgICAgICAgIlVSTDoiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGluZyBhIGxpbmsiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRlZmluaXRpb25MaXN0IjogeworICAgICAgICAgICAgImRlZmluaXRpb24gZGVzY3JpcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGxpc3QiOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIHRlcm0iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRGlhbG9ncyI6IHsKKyAgICAgICAgICAgICJTb21lIFRleHQgSGVyZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEeW5hbWljQ1NTIjogeworICAgICAgICAgICAgIkNob29zZSBzdHlsZXNoZWV0IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCI6ICIiLAorICAgICAgICAgICAgIlVuZGVmaW5lZCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFZGl0VGFnIjogeworICAgICAgICAgICAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICIiLAorICAgICAgICAgICAgIkVkaXQgVGFnIEJ5IFBlZyI6ICIiLAorICAgICAgICAgICAgIlRhZyBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVxdWF0aW9uIjogeworICAgICAgICAgICAgIiE9IjogIiIsCisgICAgICAgICAgICAiIWluIjogIiIsCisgICAgICAgICAgICAiJmd0Oy0iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiJmx0O3gmZ3Q7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAhYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYC5gICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAyYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDNgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA1YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDZgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgN2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA4YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgZWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7Jm5ic3A7YDFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Arezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLTpcXCBgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC17Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BDYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Bjb3NgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGxuYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BwaWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHNpbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGFuYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0aW1lc2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImcXVvdDt0ZXh0JnF1b3Q7IjogIiIsCisgICAgICAgICAgICAiJytmb3JtdWxhKyciOiAiIiwKKyAgICAgICAgICAgICIoKG4pLChrKSkiOiAiIiwKKyAgICAgICAgICAgICIoeCsxKS8oeC0xKSI6ICIiLAorICAgICAgICAgICAgIioiOiAiIiwKKyAgICAgICAgICAgICIqKiI6ICIiLAorICAgICAgICAgICAgIistIjogIiIsCisgICAgICAgICAgICAiLSZndDsiOiAiIiwKKyAgICAgICAgICAgICItJmx0OyI6ICIiLAorICAgICAgICAgICAgIi06IjogIiIsCisgICAgICAgICAgICAiLT0iOiAiIiwKKyAgICAgICAgICAgICIvLyI6ICIiLAorICAgICAgICAgICAgIi9fIjogIiIsCisgICAgICAgICAgICAiOi4iOiAiIiwKKyAgICAgICAgICAgICI9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIkAiOiAiIiwKKyAgICAgICAgICAgICJbW2EsYl0sW2MsZF1dIjogIiIsCisgICAgICAgICAgICAiXFxcXCI6ICIiLAorICAgICAgICAgICAgIlxcbkNsaWNrIGluIHRoZSBib3ggdG8gdXNlIHlvdXIga2V5Ym9hcmQgb3IgdXNlIHRoZSBidXR0b25zXFxuIjogIiIsCisgICAgICAgICAgICAiXl4iOiAiIiwKKyAgICAgICAgICAgICJeXl4iOiAiIiwKKyAgICAgICAgICAgICJfX3wiOiAiIiwKKyAgICAgICAgICAgICJffF8iOiAiIiwKKyAgICAgICAgICAgICJgIT1gIjogIiIsCisgICAgICAgICAgICAiYCFpbmAiOiAiIiwKKyAgICAgICAgICAgICJgJmFuZDtgIjogIiIsCisgICAgICAgICAgICAiYCZjYXA7YCI6ICIiLAorICAgICAgICAgICAgImAmY3VwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oy1gIjogIiIsCisgICAgICAgICAgICAiYCZndDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PSZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7eCZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZvcjtgIjogIiIsCisgICAgICAgICAgICAiYCZxdW90O3RleHQmcXVvdDtgIjogIiIsCisgICAgICAgICAgICAiYCgobiksKGspKWAiOiAiIiwKKyAgICAgICAgICAgICJgKHgrMSkvKHgtMSlgIjogIiIsCisgICAgICAgICAgICAiYCoqYCI6ICIiLAorICAgICAgICAgICAgImAqYCI6ICIiLAorICAgICAgICAgICAgImArLWAiOiAiIiwKKyAgICAgICAgICAgICJgLSZndDtgIjogIiIsCisgICAgICAgICAgICAiYC0mbHQ7YCI6ICIiLAorICAgICAgICAgICAgImAtOmAiOiAiIiwKKyAgICAgICAgICAgICJgLT1gIjogIiIsCisgICAgICAgICAgICAiYC8vYCI6ICIiLAorICAgICAgICAgICAgImAvX2AiOiAiIiwKKyAgICAgICAgICAgICJgOi5gIjogIiIsCisgICAgICAgICAgICAiYD0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImBAYCI6ICIiLAorICAgICAgICAgICAgImBbW2EsYl0sW2MsZF1dYCI6ICIiLAorICAgICAgICAgICAgImBcXFxcYCI6ICIiLAorICAgICAgICAgICAgImBfX3xgIjogIiIsCisgICAgICAgICAgICAiYF98X2AiOiAiIiwKKyAgICAgICAgICAgICJgQUFgIjogIiIsCisgICAgICAgICAgICAiYGFsZXBoYCI6ICIiLAorICAgICAgICAgICAgImBhbHBoYWAiOiAiIiwKKyAgICAgICAgICAgICJgYW5kYCI6ICIiLAorICAgICAgICAgICAgImBiYXJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJldGFgIjogIiIsCisgICAgICAgICAgICAiYENDYCI6ICIiLAorICAgICAgICAgICAgImBjY2FgIjogIiIsCisgICAgICAgICAgICAiYGNoaWAiOiAiIiwKKyAgICAgICAgICAgICJgZGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgZGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbGAiOiAiIiwKKyAgICAgICAgICAgICJgRGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkaWFtb25kYCI6ICIiLAorICAgICAgICAgICAgImBkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkeS9keGAiOiAiIiwKKyAgICAgICAgICAgICJgRUVgIjogIiIsCisgICAgICAgICAgICAiYGVwc2lgIjogIiIsCisgICAgICAgICAgICAiYGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZnJhYCI6ICIiLAorICAgICAgICAgICAgImBHYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdyYWRgIjogIiIsCisgICAgICAgICAgICAiYGhBcnJgIjogIiIsCisgICAgICAgICAgICAiYGhhcnJgIjogIiIsCisgICAgICAgICAgICAiYGhhdGFgIjogIiIsCisgICAgICAgICAgICAiYGlmYCI6ICIiLAorICAgICAgICAgICAgImBpbmAiOiAiIiwKKyAgICAgICAgICAgICJgaW50YCI6ICIiLAorICAgICAgICAgICAgImBpb3RhYCI6ICIiLAorICAgICAgICAgICAgImBrYXBwYWAiOiAiIiwKKyAgICAgICAgICAgICJgTGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBsYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYGxhcnJgIjogIiIsCisgICAgICAgICAgICAiYGxBcnJgIjogIiIsCisgICAgICAgICAgICAiYGxpbV8oeC0mZ3Q7b28pYCI6ICIiLAorICAgICAgICAgICAgImBsb2dgIjogIiIsCisgICAgICAgICAgICAiYG11YCI6ICIiLAorICAgICAgICAgICAgImBOTmAiOiAiIiwKKyAgICAgICAgICAgICJgbm5gIjogIiIsCisgICAgICAgICAgICAiYG5vdGAiOiAiIiwKKyAgICAgICAgICAgICJgbnVgIjogIiIsCisgICAgICAgICAgICAiYG8rYCI6ICIiLAorICAgICAgICAgICAgImBvLmAiOiAiIiwKKyAgICAgICAgICAgICJgTy9gIjogIiIsCisgICAgICAgICAgICAiYG9pbnRgIjogIiIsCisgICAgICAgICAgICAiYE9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBvbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgb29gIjogIiIsCisgICAgICAgICAgICAiYG9yYCI6ICIiLAorICAgICAgICAgICAgImBveGAiOiAiIiwKKyAgICAgICAgICAgICJgcGhpYCI6ICIiLAorICAgICAgICAgICAgImBQaGlgIjogIiIsCisgICAgICAgICAgICAiYFBpYCI6ICIiLAorICAgICAgICAgICAgImBwaWAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvZGAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvcGAiOiAiIiwKKyAgICAgICAgICAgICJgcHNpYCI6ICIiLAorICAgICAgICAgICAgImBQc2lgIjogIiIsCisgICAgICAgICAgICAiYFFRYCI6ICIiLAorICAgICAgICAgICAgImBxdWFkYCI6ICIiLAorICAgICAgICAgICAgImByQXJyYCI6ICIiLAorICAgICAgICAgICAgImByaG9gIjogIiIsCisgICAgICAgICAgICAiYHJvb3QobikoeClgIjogIiIsCisgICAgICAgICAgICAiYFJSYCI6ICIiLAorICAgICAgICAgICAgImBzZmFgIjogIiIsCisgICAgICAgICAgICAiYFNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgc3FydCh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgc3F1YXJlYCI6ICIiLAorICAgICAgICAgICAgImBzdGFja3JlbCgtJmd0OykoKylgIjogIiIsCisgICAgICAgICAgICAiYHN1YmAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VtYCI6ICIiLAorICAgICAgICAgICAgImBzdXBgIjogIiIsCisgICAgICAgICAgICAiYHN1cGVgIjogIiIsCisgICAgICAgICAgICAiYHRhdWAiOiAiIiwKKyAgICAgICAgICAgICJgdGhldGFgIjogIiIsCisgICAgICAgICAgICAiYFRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImBUVGAiOiAiIiwKKyAgICAgICAgICAgICJgdHRhYCI6ICIiLAorICAgICAgICAgICAgImB1YXJyYCI6ICIiLAorICAgICAgICAgICAgImB1bGFgIjogIiIsCisgICAgICAgICAgICAiYHVwc2lsb25gIjogIiIsCisgICAgICAgICAgICAiYHV1YCI6ICIiLAorICAgICAgICAgICAgImB2ZWNhYCI6ICIiLAorICAgICAgICAgICAgImB2dmAiOiAiIiwKKyAgICAgICAgICAgICJgeF8obW4pYCI6ICIiLAorICAgICAgICAgICAgImB4aWAiOiAiIiwKKyAgICAgICAgICAgICJgWGlgIjogIiIsCisgICAgICAgICAgICAiYHh4YCI6ICIiLAorICAgICAgICAgICAgImB6ZXRhYCI6ICIiLAorICAgICAgICAgICAgImBaWmAiOiAiIiwKKyAgICAgICAgICAgICJgfC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImB8LS1gIjogIiIsCisgICAgICAgICAgICAiYHw9PWAiOiAiIiwKKyAgICAgICAgICAgICJgfF9fYCI6ICIiLAorICAgICAgICAgICAgImB8fmAiOiAiIiwKKyAgICAgICAgICAgICJgfj1gIjogIiIsCisgICAgICAgICAgICAiYH58YCI6ICIiLAorICAgICAgICAgICAgImB+fmAiOiAiIiwKKyAgICAgICAgICAgICJBQSI6ICIiLAorICAgICAgICAgICAgImFsZXBoIjogIiIsCisgICAgICAgICAgICAiYWxwaGEiOiAiIiwKKyAgICAgICAgICAgICJhbmQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGggRm9ybXVsYSBJbnB1dCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aE1MIEV4YW1wbGUiOiAiIiwKKyAgICAgICAgICAgICJiYXJhIjogIiIsCisgICAgICAgICAgICAiQmFzZWQgb24gQVNDSUlNYXRoTUwgYnkiOiAiIiwKKyAgICAgICAgICAgICJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiYmJhIjogIiIsCisgICAgICAgICAgICAiYmV0YSI6ICIiLAorICAgICAgICAgICAgIkNDIjogIiIsCisgICAgICAgICAgICAiY2NhIjogIiIsCisgICAgICAgICAgICAiY2hpIjogIiIsCisgICAgICAgICAgICAiZGFyciI6ICIiLAorICAgICAgICAgICAgImRkb3RhIjogIiIsCisgICAgICAgICAgICAiZGVsIjogIiIsCisgICAgICAgICAgICAiZGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJEZWx0YSI6ICIiLAorICAgICAgICAgICAgImRpYW1vbmQiOiAiIiwKKyAgICAgICAgICAgICJkb3RhIjogIiIsCisgICAgICAgICAgICAiZHkvZHgiOiAiIiwKKyAgICAgICAgICAgICJFRSI6ICIiLAorICAgICAgICAgICAgImVwc2kiOiAiIiwKKyAgICAgICAgICAgICJldGEiOiAiIiwKKyAgICAgICAgICAgICJGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBBc2NpaU1hdGhNTCB2aXNpdCB0aGlzIHBhZ2U6IjogIiIsCisgICAgICAgICAgICAiRm9ybXVsYSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJmcmEiOiAiIiwKKyAgICAgICAgICAgICJnYW1tYSI6ICIiLAorICAgICAgICAgICAgIkdhbW1hIjogIiIsCisgICAgICAgICAgICAiZ3JhZCI6ICIiLAorICAgICAgICAgICAgImhBcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXJyIjogIiIsCisgICAgICAgICAgICAiaGF0YSI6ICIiLAorICAgICAgICAgICAgImlmIjogIiIsCisgICAgICAgICAgICAiaW4iOiAiIiwKKyAgICAgICAgICAgICJJbnB1dCI6ICIiLAorICAgICAgICAgICAgImludCI6ICIiLAorICAgICAgICAgICAgImludF9hXmJmKHgpZHgiOiAiIiwKKyAgICAgICAgICAgICJpb3RhIjogIiIsCisgICAgICAgICAgICAia2FwcGEiOiAiIiwKKyAgICAgICAgICAgICJsYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJMYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsQXJyIjogIiIsCisgICAgICAgICAgICAibGFyciI6ICIiLAorICAgICAgICAgICAgImxpbV8oeC0mZ3Q7b28pIjogIiIsCisgICAgICAgICAgICAibXUiOiAiIiwKKyAgICAgICAgICAgICJubiI6ICIiLAorICAgICAgICAgICAgIk5OIjogIiIsCisgICAgICAgICAgICAibm5uIjogIiIsCisgICAgICAgICAgICAibm90IjogIiIsCisgICAgICAgICAgICAibnUiOiAiIiwKKyAgICAgICAgICAgICJvKyI6ICIiLAorICAgICAgICAgICAgIm8uIjogIiIsCisgICAgICAgICAgICAiTy8iOiAiIiwKKyAgICAgICAgICAgICJvaW50IjogIiIsCisgICAgICAgICAgICAiT21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJvbWVnYSI6ICIiLAorICAgICAgICAgICAgIm9vIjogIiIsCisgICAgICAgICAgICAib3IiOiAiIiwKKyAgICAgICAgICAgICJveCI6ICIiLAorICAgICAgICAgICAgIlBoaSI6ICIiLAorICAgICAgICAgICAgInBoaSI6ICIiLAorICAgICAgICAgICAgInBpIjogIiIsCisgICAgICAgICAgICAiUGkiOiAiIiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIiIsCisgICAgICAgICAgICAicHJvZCI6ICIiLAorICAgICAgICAgICAgInByb3AiOiAiIiwKKyAgICAgICAgICAgICJwc2kiOiAiIiwKKyAgICAgICAgICAgICJQc2kiOiAiIiwKKyAgICAgICAgICAgICJRUSI6ICIiLAorICAgICAgICAgICAgInF1YWQiOiAiIiwKKyAgICAgICAgICAgICJyQXJyIjogIiIsCisgICAgICAgICAgICAicmhvIjogIiIsCisgICAgICAgICAgICAicm9vdChuKSh4KSI6ICIiLAorICAgICAgICAgICAgIlJSIjogIiIsCisgICAgICAgICAgICAic2ZhIjogIiIsCisgICAgICAgICAgICAiU2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJzaWdtYSI6ICIiLAorICAgICAgICAgICAgInNxcnQoeCkiOiAiIiwKKyAgICAgICAgICAgICJzcXVhcmUiOiAiIiwKKyAgICAgICAgICAgICJzdGFja3JlbCgtJmd0OykoKykiOiAiIiwKKyAgICAgICAgICAgICJzdWIiOiAiIiwKKyAgICAgICAgICAgICJzdWJlIjogIiIsCisgICAgICAgICAgICAic3VtIjogIiIsCisgICAgICAgICAgICAic3VtXyhuPTEpXm9vIjogIiIsCisgICAgICAgICAgICAic3VwIjogIiIsCisgICAgICAgICAgICAic3VwZSI6ICIiLAorICAgICAgICAgICAgInRhdSI6ICIiLAorICAgICAgICAgICAgIlRoZXRhIjogIiIsCisgICAgICAgICAgICAidGhldGEiOiAiIiwKKyAgICAgICAgICAgICJUVCI6ICIiLAorICAgICAgICAgICAgInR0YSI6ICIiLAorICAgICAgICAgICAgInVhcnIiOiAiIiwKKyAgICAgICAgICAgICJ1bGEiOiAiIiwKKyAgICAgICAgICAgICJ1cHNpbG9uIjogIiIsCisgICAgICAgICAgICAidXUiOiAiIiwKKyAgICAgICAgICAgICJ1dXUiOiAiIiwKKyAgICAgICAgICAgICJ2ZWNhIjogIiIsCisgICAgICAgICAgICAidnYiOiAiIiwKKyAgICAgICAgICAgICJ2dnYiOiAiIiwKKyAgICAgICAgICAgICJ4XihtK24pIjogIiIsCisgICAgICAgICAgICAieF8obW4pIjogIiIsCisgICAgICAgICAgICAiWGkiOiAiIiwKKyAgICAgICAgICAgICJ4aSI6ICIiLAorICAgICAgICAgICAgInh4IjogIiIsCisgICAgICAgICAgICAiemV0YSI6ICIiLAorICAgICAgICAgICAgIlpaIjogIiIsCisgICAgICAgICAgICAifC0mZ3Q7IjogIiIsCisgICAgICAgICAgICAifC0tIjogIiIsCisgICAgICAgICAgICAifD09IjogIiIsCisgICAgICAgICAgICAifF9fIjogIiIsCisgICAgICAgICAgICAifH4iOiAiIiwKKyAgICAgICAgICAgICJ+PSI6ICIiLAorICAgICAgICAgICAgIn58IjogIiIsCisgICAgICAgICAgICAifn4iOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZhbmN5U2VsZWN0cyI6IHsKKyAgICAgICAgICAgICInK29wdC50ZXh0KyciOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiJztcclxuICB2YXIgdGFnYyA9ICciOiAiIiwKKyAgICAgICAgICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAiIiwKKyAgICAgICAgICAgICJDbGVhciI6ICIiLAorICAgICAgICAgICAgIkRvbmUiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgdGV4dCB5b3Ugd2FudCB0byBmaW5kIjogIiIsCisgICAgICAgICAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgImZvdW5kIGl0ZW0iOiAiIiwKKyAgICAgICAgICAgICJmb3VuZCBpdGVtcyI6ICIiLAorICAgICAgICAgICAgIkhpZ2hsaWdodCI6ICIiLAorICAgICAgICAgICAgIkluZm9ybSBhIHJlcGxhY2VtZW50IHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJOZXh0IjogIiIsCisgICAgICAgICAgICAibm90IGZvdW5kIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2Ugd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtIjogIiIsCisgICAgICAgICAgICAicmVwbGFjZWQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJTZWFyY2ggZm9yOiI6ICIiLAorICAgICAgICAgICAgIlN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IjogIiIsCisgICAgICAgICAgICAiVW5kbyI6ICIiLAorICAgICAgICAgICAgIldob2xlIHdvcmRzIG9ubHkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiRW50ZXIgdGhlIG5hbWUgZm9yIG5ldyBvcHRpb24uIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgRm9ybS4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBtdWx0aS1saW5lIHRleHQgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcmFkaW8gYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFNlbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgU2VsZWN0Li4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1zIjogeworICAgICAgICAgICAgIidvbkNsaWNrJz0iOiAiIiwKKyAgICAgICAgICAgICJBY2Nlc3MgS2V5OiI6ICIiLAorICAgICAgICAgICAgIkFjdGlvbiBVUkw6IjogIiIsCisgICAgICAgICAgICAiQnV0dG9uIFNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkNoZWNrZWQiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zOiI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQgdGV4dCAob3B0aW9uYWwpIjogIiIsCisgICAgICAgICAgICAiRGltZW5zaW9ucyI6ICIiLAorICAgICAgICAgICAgIkRpc2FibGVkIjogIiIsCisgICAgICAgICAgICAiRW5jb2Rpbmc6IjogIiIsCisgICAgICAgICAgICAiRm9yIENvbnRyb2w6IjogIiIsCisgICAgICAgICAgICAiRm9ybSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IElOUFVUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gaGFuZGxlciBzY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiR2V0IjogIiIsCisgICAgICAgICAgICAiSGFyZCI6ICIiLAorICAgICAgICAgICAgIkhlaWdodCBpbiBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkhUTUwtRm9ybSB0byBDR0kgKGRlZmF1bHQpIjogIiIsCisgICAgICAgICAgICAiSW1hZ2Ugc291cmNlIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMOiI6ICIiLAorICAgICAgICAgICAgIkluaXRpYWwgVGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IEZJRUxEU0VUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IElOUFVUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IExBQkVMIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFNFTEVDVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkphdmFzY3JpcHQgZm9yIGJ1dHRvbiBjbGljayI6ICIiLAorICAgICAgICAgICAgIkxhYmVsOiI6ICIiLAorICAgICAgICAgICAgIkxlZ2VuZDoiOiAiIiwKKyAgICAgICAgICAgICJNYXggbGVuZ3RoOiI6ICIiLAorICAgICAgICAgICAgIk1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWNjZXB0ZWQiOiAiIiwKKyAgICAgICAgICAgICJNZXRob2Q6IjogIiIsCisgICAgICAgICAgICAibXVsdGlwYXJ0IEZvcm0gRGF0YSAoRmlsZS1VcGxvYWQpIjogIiIsCisgICAgICAgICAgICAiTmFtZSI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIm5hbWUgb2YgdGhlIHRleHRhcmVhIjogIiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiIiwKKyAgICAgICAgICAgICJub3JtYWwiOiAiIiwKKyAgICAgICAgICAgICJub3dyYXAiOiAiIiwKKyAgICAgICAgICAgICJPZmYiOiAiIiwKKyAgICAgICAgICAgICJQaHlzaWNhbCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciBhIExhYmVsIjogIiIsCisgICAgICAgICAgICAiUG9zdCI6ICIiLAorICAgICAgICAgICAgInByZSI6ICIiLAorICAgICAgICAgICAgIlJlYWQgT25seSI6ICIiLAorICAgICAgICAgICAgIlJvd3M6IjogIiIsCisgICAgICAgICAgICAiU2l6ZSBvZiB0ZXh0IGJveCBpbiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiU2l6ZToiOiAiIiwKKyAgICAgICAgICAgICJTb2Z0IjogIiIsCisgICAgICAgICAgICAiVGFiIEluZGV4OiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBGcmFtZToiOiAiIiwKKyAgICAgICAgICAgICJUZXh0OiI6ICIiLAorICAgICAgICAgICAgIlVSTCBvZiBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlZhbHVlIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiVmFsdWU6IjogIiIsCisgICAgICAgICAgICAiVmlydHVhbCI6ICIiLAorICAgICAgICAgICAgIldpZHRoIGluIG51bWJlciBvZiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiV3JhcCBNb2RlOiI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgTmFtZSI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPcHRpb25zIjogIjw8RmluZFJlcGxhY2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bGxQYWdlIjogeworICAgICAgICAgICAgIi4uLiI6ICIiLAorICAgICAgICAgICAgIkFsdGVybmF0ZSBzdHlsZS1zaGVldDoiOiAiIiwKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kIGNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkNoYXJhY3RlciBzZXQ6IjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKElTTy04ODU5LTUpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKEtPSTgtUikiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoV0lORE9XUy0xMjUxKSI6ICIiLAorICAgICAgICAgICAgIkRlc2NyaXB0aW9uOiI6ICIiLAorICAgICAgICAgICAgIkRPQ1RZUEU6IjogIiIsCisgICAgICAgICAgICAiRG9jdW1lbnQgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIkRvY3VtZW50IHRpdGxlOiI6ICIiLAorICAgICAgICAgICAgIktleXdvcmRzOiI6ICIiLAorICAgICAgICAgICAgIlByaW1hcnkgc3R5bGUtc2hlZXQ6IjogIiIsCisgICAgICAgICAgICAiVGV4dCBjb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJVVEYtOCAocmVjb21tZW5kZWQpIjogIiIsCisgICAgICAgICAgICAid2VzdGVybiAoSVNPLTg4NTktMSkiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bGxTY3JlZW4iOiB7CisgICAgICAgICAgICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkdlY2tvIjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJIb3Jpem9udGFsUnVsZSI6IHsKKyAgICAgICAgICAgICImI3gwMGQ3OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiIiwKKyAgICAgICAgICAgICJDZW50ZXIiOiAiIiwKKyAgICAgICAgICAgICJDb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgSG9yaXpvbnRhbCBSdWxlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L2VkaXQgaG9yaXpvbnRhbCBydWxlIjogIiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIiIsCisgICAgICAgICAgICAiTGVmdCI6ICIiLAorICAgICAgICAgICAgIk5vIHNoYWRpbmciOiAiIiwKKyAgICAgICAgICAgICJwZXJjZW50IjogIiIsCisgICAgICAgICAgICAicGl4ZWxzIjogIiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSI6ICIiLAorICAgICAgICAgICAgIldpZHRoOiI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiPDxYaW5oYT4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5saW5lU3R5bGVyIjogeworICAgICAgICAgICAgIkJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciI6ICIiLAorICAgICAgICAgICAgIkJvdHRvbSI6ICIiLAorICAgICAgICAgICAgIkNoYXIiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkNTUyBTdHlsZSI6ICIiLAorICAgICAgICAgICAgIkZHIENvbG9yIjogIiIsCisgICAgICAgICAgICAiRmxvYXQiOiAiIiwKKyAgICAgICAgICAgICJKdXN0aWZ5IjogIiIsCisgICAgICAgICAgICAiTWFyZ2luIjogIiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIiIsCisgICAgICAgICAgICAiTm9uZSI6ICIiLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJUZXh0IGFsaWduIjogIiIsCisgICAgICAgICAgICAiVG9wIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWwgYWxpZ24iOiAiIiwKKyAgICAgICAgICAgICItIjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiQ2VudGVyIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSGVpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgInBlcmNlbnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJwaXhlbHMiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIldpZHRoIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgICAgICJBbmNob3IgbmFtZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBBbmNob3IiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiIiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICIiLAorICAgICAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbDoiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiIiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlNwYWNpbmciOiAiIiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIlZlcnRpY2FsOiI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiIiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBVUkw6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJUb3AiOiAiPDxJbmxpbmVTdHlsZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGZvb3Rub3RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IE5vdGUiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBhZ2VicmVhayI6IHsKKyAgICAgICAgICAgICJQYWdlIGJyZWFrIjogIiIsCisgICAgICAgICAgICAiUGFnZSBCcmVhayI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbWlsZXkiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IFNtaWxleSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0IjogeworICAgICAgICAgICAgIlxcbiAgVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmdcXG4iOiAiIiwKKyAgICAgICAgICAgICJIaWRlIHByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgU25pcHBldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIiIsCisgICAgICAgICAgICAiTGluazEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMiI6ICIiLAorICAgICAgICAgICAgIkxpbmszIjogIiIsCisgICAgICAgICAgICAiTGluazQiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNSI6ICIiLAorICAgICAgICAgICAgIlNob3cgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nIjogIiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAgICAgIkFsbCBDYXRlZ29yaWVzIjogIiIsCisgICAgICAgICAgICAiRmlsdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMgdGVtcGxhdGUgdmFyaWFibGUiOiAiIiwKKyAgICAgICAgICAgICJPbmx5IHNlYXJjaCB3b3JkIGJlZ2lubmluZyI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJIVE1MIjogIjw8Q2hhckNvdW50ZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICI8PEluc2VydFNuaXBwZXQ+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAgICAgIkNhcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJDYXB0aW9uIGZvciB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIHBhZGRpbmc6IjogIiIsCisgICAgICAgICAgICAiQ2VsbCBzcGFjaW5nOiI6ICIiLAorICAgICAgICAgICAgIkNvbGxhcHNlIGJvcmRlcnM6IjogIiIsCisgICAgICAgICAgICAiQ29sczoiOiAiIiwKKyAgICAgICAgICAgICJFbSI6ICIiLAorICAgICAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJMYXlvdSI6ICIiLAorICAgICAgICAgICAgIk51bWJlciBvZiBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICIiLAorICAgICAgICAgICAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSBvZiB0aGUgYm9yZGVyIjogIiIsCisgICAgICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiV2lkdGggdW5pdCI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvcmRlciI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIjw8WGluaGE+PiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIlBlcmNlbnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJQaXhlbHMiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJvd3M6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiU3BhY2luZyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUb3AiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxhbmdNYXJrcyI6IHsKKyAgICAgICAgICAgICImbWRhc2g7IGxhbmd1YWdlICZtZGFzaDsiOiAiIiwKKyAgICAgICAgICAgICInLCAnIjogIiIsCisgICAgICAgICAgICAiRW5nbGlzaCI6ICIiLAorICAgICAgICAgICAgIkZyZW5jaCI6ICIiLAorICAgICAgICAgICAgIkdyZWVrIjogIiIsCisgICAgICAgICAgICAibGFuZ3VhZ2Ugc2VsZWN0IjogIiIsCisgICAgICAgICAgICAiTGF0aW4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiTGlua2VyIjogeworICAgICAgICAgICAgIihweCkiOiAiIiwKKyAgICAgICAgICAgICJBbmNob3ItTGluayI6ICIiLAorICAgICAgICAgICAgIkFuY2hvcjoiOiAiIiwKKyAgICAgICAgICAgICJFbWFpbCBBZGRyZXNzOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJMb2NhdGlvbiBCYXI6IjogIiIsCisgICAgICAgICAgICAiTWVudSBCYXI6IjogIiIsCisgICAgICAgICAgICAiTWVzc2FnZSBUZW1wbGF0ZToiOiAiIiwKKyAgICAgICAgICAgICJOZXcgV2luZG93IjogIiIsCisgICAgICAgICAgICAiT3JkaW5hcnkgTGluayI6ICIiLAorICAgICAgICAgICAgIlBvcHVwIFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlBvcHVwV2luZG93IjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJSZXNpemVhYmxlOiI6ICIiLAorICAgICAgICAgICAgIlNhbWUgV2luZG93IChqdW1wIG91dCBvZiBmcmFtZXMpIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsYmFyczoiOiAiIiwKKyAgICAgICAgICAgICJTaG93cyBPbiBIb3ZlciI6ICIiLAorICAgICAgICAgICAgIlN0YXR1cyBCYXI6IjogIiIsCisgICAgICAgICAgICAiU3ViamVjdDoiOiAiIiwKKyAgICAgICAgICAgICJUaXRsZToiOiAiIiwKKyAgICAgICAgICAgICJUb29sYmFyOiI6ICIiLAorICAgICAgICAgICAgIlVSTCBMaW5rIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIiIsCisgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJOYW1lOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIlNpemU6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiVGFyZ2V0OiI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiVVJMOiI6ICI8PENyZWF0ZUxpbms+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxpc3RUeXBlIjogeworICAgICAgICAgICAgIkNob29zZSBsaXN0IHN0eWxlIHR5cGUgKGZvciBvcmRlcmVkIGxpc3RzKSI6ICIiLAorICAgICAgICAgICAgIkRlY2ltYWwgbnVtYmVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIGdyZWVrIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciBsYXRpbiBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgcm9tYW4gbnVtYmVycyI6ICIiLAorICAgICAgICAgICAgIlVwcGVyIGxhdGluIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJVcHBlciByb21hbiBudW1iZXJzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIk1vb3Rvb2xzRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiT3BlcmEiOiB7CisgICAgICAgICAgICAiTUFSSyI6ICIiLAorICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAgICAgIkluc2VydCB0ZXh0IGluIG5ldyBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJQYXN0ZSBhcyBQbGFpbiBUZXh0IjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJQcmVzZXJ2ZVNjcmlwdHMiOiB7CisgICAgICAgICAgICAiSmF2YVNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIlBIUCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgICAgICInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnY2wnOiAnIjogIiIsCisgICAgICAgICAgICAiQVRUUklCVVRFUyI6ICIiLAorICAgICAgICAgICAgIkNvbG9ycyI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSBUQUcgeW91IHdhbnQgdG8gaW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiTm8gQ1NTIGNsYXNzIGF2YWlhYmxlIjogIiIsCisgICAgICAgICAgICAiT2siOiAiIiwKKyAgICAgICAgICAgICJPUFRJT05TIjogIiIsCisgICAgICAgICAgICAiUXVpY2sgVGFnIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlRBR3MiOiAiIiwKKyAgICAgICAgICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBUQUciOiAiIiwKKyAgICAgICAgICAgICJZb3UgaGF2ZSB0byBzZWxlY3Qgc29tZSB0ZXh0IjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJTYXZlU3VibWl0IjogeworICAgICAgICAgICAgImluIHByb2dyZXNzIjogIiIsCisgICAgICAgICAgICAiUmVhZHkiOiAiIiwKKyAgICAgICAgICAgICJTYXZlIjogIiIsCisgICAgICAgICAgICAiU2F2aW5nLi4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNldElkIjogeworICAgICAgICAgICAgIklEL05hbWU6IjogIiIsCisgICAgICAgICAgICAiU2V0IElkIGFuZCBOYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElkL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSUQvTmFtZSI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgICAgICJDbG9zaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiQ2xvc2luZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiQ29udmVydCBhbGwgcXVvdGVzIGFuZCBkYXNoZXMgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgYXV0b21hdGljIHJlcGxhY2VtZW50cyI6ICIiLAorICAgICAgICAgICAgIk9wZW5pbmdEb3VibGVRdW90ZXMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nU2luZ2xlUXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJTbWFydFJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJTbWFydFJlcGxhY2UgU2V0dGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiU3R5bGlzdCI6IHsKKyAgICAgICAgICAgICJTdHlsZXMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU3VwZXJDbGVhbiI6IHsKKyAgICAgICAgICAgICJDbGVhbiBiYWQgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIFNlbGVjdGlvbiBPbmx5IjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gdXAgSFRNTCI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIFNjb3BlIjogIiIsCisgICAgICAgICAgICAiR2VuZXJhbCB0aWR5IHVwIGFuZCBjb3JyZWN0aW9uIG9mIHNvbWUgcHJvYmxlbXMuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHNlbGVjdCBmcm9tIHRoZSBmb2xsb3dpbmcgY2xlYW5pbmcgb3B0aW9ucy4uLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzdGFuZCBieSB3aGlsZSBjbGVhbmluZyBpbiBwcm9jZXNzLi4uIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsaWdubWVudCAobGVmdC9yaWdodC9qdXN0aWZ5KS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxsIGNsYXNzZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIEFsbCBIVE1MIFRhZ3MiOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxsIHN0eWxlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIGZvbnQgc2l6ZXMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0ZXh0IGNvbG9ycy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIHR5cGVmYWNlcyAoZm9udCBcInN0eWxlc1wiKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZW1waGFzaXMgYW5kIGFubm90YXRpb25zLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBsYW5nIGF0dHJpYnV0ZXMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIFBhcmFncmFwaHMiOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzLiI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UgZGlyZWN0aW9uYWwgcXVvdGUgbWFya3Mgd2l0aCBub24tZGlyZWN0aW9uYWwgcXVvdGUgbWFya3MuIjogIiIsCisgICAgICAgICAgICAiVmlnb3JvdXNseSBwdXJnZSBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQuIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiQWxsIGZvdXIgc2lkZXMiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXJzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBQcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBUeXBlOiI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIGRvd24iOiAiIiwKKyAgICAgICAgICAgICJDZWxscyB0byB0aGUgcmlnaHQsIGFuZCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBjZWxsIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSByb3ciOiAiIiwKKyAgICAgICAgICAgICJEbyBOb3QgQ2hhbmdlIjogIiIsCisgICAgICAgICAgICAiRnJhbWUgYW5kIGJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJGcmFtZXMiOiAiIiwKKyAgICAgICAgICAgICJIZWFkZXIgKHRoKSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjZWxsIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNlbGwgYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNvbHVtbiBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjb2x1bW4gYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCByb3cgYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBjdXJyZW50IGNlbGwgd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJObyBydWxlcyI6ICIiLAorICAgICAgICAgICAgIk5vIHNpZGVzIjogIiIsCisgICAgICAgICAgICAiTm9ybWFsICh0ZCkiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJSb3cgUHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlJvdyBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gY29sdW1ucyBvbmx5IjogIiIsCisgICAgICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiByb3dzIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgY29sdW1uIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgcm93IjogIiIsCisgICAgICAgICAgICAiU3VtbWFyeSI6ICIiLAorICAgICAgICAgICAgIlRhYmxlIHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJUYWJsZSBQcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgbGVmdC1oYW5kIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSByaWdodCBhbmQgbGVmdCBzaWRlcyBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHRvcCBhbmQgYm90dG9tIHNpZGVzIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkNhcHRpb24iOiAiPDxJbnNlcnRUYWJsZT4+IiwKKyAgICAgICAgICAgICJDb2x1bW5zIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiRGVzY3JpcHRpb24iOiAiPDxGdWxsUGFnZT4+IiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAicGl4ZWxzIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUm93cyI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNwYWNpbmciOiAiPDxJbnNlcnRJbWFnZT4+IgorICAgICAgICB9LAorICAgICAgICAiVW5zYXZlZENoYW5nZXMiOiB7CisgICAgICAgICAgICAiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBlZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiV2ViS2l0IjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICI8PEdlY2tvPj4iCisgICAgICAgIH0sCisgICAgICAgICJYaW5oYSI6IHsKKyAgICAgICAgICAgICImIzgyMTI7IGZvbnQgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICImIzgyMTI7IHNpemUgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIjEgKDggcHQpIjogIiIsCisgICAgICAgICAgICAiMiAoMTAgcHQpIjogIiIsCisgICAgICAgICAgICAiMyAoMTIgcHQpIjogIiIsCisgICAgICAgICAgICAiNCAoMTQgcHQpIjogIiIsCisgICAgICAgICAgICAiNSAoMTggcHQpIjogIiIsCisgICAgICAgICAgICAiNiAoMjQgcHQpIjogIiIsCisgICAgICAgICAgICAiNyAoMzYgcHQpIjogIiIsCisgICAgICAgICAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJBZGRyZXNzIjogIiIsCisgICAgICAgICAgICAiQXJpYWwiOiAiIiwKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIiIsCisgICAgICAgICAgICAiQm9sZCI6ICIiLAorICAgICAgICAgICAgIkJ1bGxldGVkIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBjb250ZW50IHBhc3RlZCBmcm9tIFdvcmQiOiAiIiwKKyAgICAgICAgICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiIiwKKyAgICAgICAgICAgICJDbG9zZSI6ICIiLAorICAgICAgICAgICAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAiIiwKKyAgICAgICAgICAgICJDb3B5IHNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkNvdXJpZXIgTmV3IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFN0YXR1c2JhciI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBUb29sYmFyIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0wICh6ZXJvKSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMSAuLiBDVFJMLTYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUEiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUoiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUwiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLU4iOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVgiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVoiOiAiIiwKKyAgICAgICAgICAgICJDdXJyZW50IHN0eWxlIjogIiIsCisgICAgICAgICAgICAiQ3V0IHNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkRlY3JlYXNlIEluZGVudCI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiIiwKKyAgICAgICAgICAgICJFZGl0b3IgSGVscCI6ICIiLAorICAgICAgICAgICAgIkVOVEVSIjogIiIsCisgICAgICAgICAgICAiRXJyb3IgTG9hZGluZyBYaW5oYS4gIERldmVsb3BlcnMsIGNoZWNrIHRoZSBFcnJvciBDb25zb2xlIGZvciBpbmZvcm1hdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGaW5pc2hpbmciOiAiIiwKKyAgICAgICAgICAgICJGb250IENvbG9yIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0dGVkIjogIiIsCisgICAgICAgICAgICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIiIsCisgICAgICAgICAgICAiR2VvcmdpYSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMiI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMyI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNCI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNiI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmdzIjogIiIsCisgICAgICAgICAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiIiwKKyAgICAgICAgICAgICJJbXBhY3QiOiAiIiwKKyAgICAgICAgICAgICJJbmNyZWFzZSBJbmRlbnQiOiAiIiwKKyAgICAgICAgICAgICJJbml0IGVkaXRvciBzaXplIjogIiIsCisgICAgICAgICAgICAiaW5zZXJ0IGxpbmVicmVhayI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBUYWJsZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBXZWIgTGluayI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvT3ZlcndyaXRlIjogIiIsCisgICAgICAgICAgICAiSXRhbGljIjogIiIsCisgICAgICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiIiwKKyAgICAgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAiIiwKKyAgICAgICAgICAgICJKdXN0aWZ5IExlZnQiOiAiIiwKKyAgICAgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIiIsCisgICAgICAgICAgICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBDb3JlIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW4gJHBsdWdpbiI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgcGx1Z2lucyI6ICIiLAorICAgICAgICAgICAgIk1TIFdvcmQgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIm5ldyBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJOb3JtYWwiOiAiIiwKKyAgICAgICAgICAgICJPcmRlcmVkIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICIiLAorICAgICAgICAgICAgIlBhdGgiOiAiIiwKKyAgICAgICAgICAgICJQcmludCBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIiIsCisgICAgICAgICAgICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICIiLAorICAgICAgICAgICAgIlNhdmUgYXMiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgYWxsIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IENvbG9yIjogIiIsCisgICAgICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJTSElGVC1FTlRFUiI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IEJsb2NrIjogIiIsCisgICAgICAgICAgICAiU3RyaWtldGhyb3VnaCI6ICIiLAorICAgICAgICAgICAgIlN1YnNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIlN1cGVyc2NyaXB0IjogIiIsCisgICAgICAgICAgICAiVGFob21hIjogIiIsCisgICAgICAgICAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogIiIsCisgICAgICAgICAgICAiVGltZXMgTmV3IFJvbWFuIjogIiIsCisgICAgICAgICAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiIiwKKyAgICAgICAgICAgICJUb3VjaCBoZXJlIGZpcnN0IHRvIGFjdGl2YXRlIGVkaXRvci4iOiAiIiwKKyAgICAgICAgICAgICJVbmRlcmxpbmUiOiAiIiwKKyAgICAgICAgICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICIiLAorICAgICAgICAgICAgIlZlcmRhbmEiOiAiIiwKKyAgICAgICAgICAgICJXYWl0aW5nIGZvciBJZnJhbWUgdG8gbG9hZC4uLiI6ICIiLAorICAgICAgICAgICAgIldpbmdEaW5ncyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIjogIiIsCisgICAgICAgICAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJSZW1vdmUgQ3VycmVudCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IEJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJTZXQgcGFnZSBiYWNrZ3JvdW5kIGltYWdlIjogIiIsCisgICAgICAgICAgICAiU2V0IFBhZ2UgQmFja2dyb3VuZCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiQ2xpZW50c2lkZVNwZWxsY2hlY2siOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVjayB1c2luZyBpZVNwZWxsIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEwJSI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiIiwKKyAgICAgICAgICAgICIyMDAlIjogIiIsCisgICAgICAgICAgICAiMjUlIjogIiIsCisgICAgICAgICAgICAiNTAlIjogIiIsCisgICAgICAgICAgICAiNzUlIjogIiIsCisgICAgICAgICAgICAiPkxpc3QgVmlldyI6ICIiLAorICAgICAgICAgICAgIj5UaHVtYm5haWwgVmlldyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIiIsCisgICAgICAgICAgICAiQWxpZ24iOiAiIiwKKyAgICAgICAgICAgICJBbHQiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJDcm9wIjogIiIsCisgICAgICAgICAgICAiRDoiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiIiwKKyAgICAgICAgICAgICJFZGl0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIiIsCisgICAgICAgICAgICAiRmlsZW5hbWU6IjogIiIsCisgICAgICAgICAgICAiRmlsZXNpemU6IjogIiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkZsaXAgVmVydGljYWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJHSUYiOiAiIiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiIiwKKyAgICAgICAgICAgICJIOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIiIsCisgICAgICAgICAgICAiSlBFRyBIaWdoIjogIiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiIiwKKyAgICAgICAgICAgICJKUEVHIE1lZGl1bSI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmciOiAiIiwKKyAgICAgICAgICAgICJMb2NrIjogIiIsCisgICAgICAgICAgICAiTWFya2VyIjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBmb2xkZXIgc2l6ZSBsaW1pdCByZWFjaGVkLiBVcGxvYWQgZGlzYWJsZWQuIjogIiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICIiLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJObyBGaWxlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB2YWx1ZSI6ICIiLAorICAgICAgICAgICAgIlBORyI6ICIiLAorICAgICAgICAgICAgIlByZXNldCI6ICIiLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIiIsCisgICAgICAgICAgICAiUmVmcmVzaCI6ICIiLAorICAgICAgICAgICAgIlJlbmFtZSI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIEltYWdlIjogIiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiIiwKKyAgICAgICAgICAgICJTdGFydCBZOiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgbWFya2VyIGNvbG9yIjogIiIsCisgICAgICAgICAgICAiVHJhc2giOiAiIiwKKyAgICAgICAgICAgICJVcGxvYWQiOiAiIiwKKyAgICAgICAgICAgICJXOiI6ICIiLAorICAgICAgICAgICAgIlg6IjogIiIsCisgICAgICAgICAgICAiWGluaGEgSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiWToiOiAiIiwKKyAgICAgICAgICAgICJab29tIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiQ2xlYXIiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJDb2xvciI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkNvcHkiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJDdXQiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICI8PE1vb3Rvb2xzRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1hcmdpbiI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRpdGxlICh0b29sdGlwKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIldpZHRoIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJGaWx0ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsdGVyIjogIjw8SW5zZXJ0U25pcHBldDI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkh0bWxUaWR5IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQXV0by1UaWR5IjogIiIsCisgICAgICAgICAgICAiRG9uJ3QgVGlkeSI6ICIiLAorICAgICAgICAgICAgIkhUTUwgVGlkeSI6ICIiLAorICAgICAgICAgICAgIlRpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQW5nbGU6IjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlcyI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgVXNlcm5hbWUvRW1haWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIgTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFBob3RvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFZpZGVvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgU2VydmVyIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFVzZXJuYW1lIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlbyBMaXN0IjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlb3MiOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJDbGVhciI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQ3JvcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJFZGl0IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiR0lGIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIEhpZ2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgTG93IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIE1lZGl1bSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxvY2siOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1hcmtlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIlBORyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZXNpemUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUm90YXRlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlN0YXJ0IFk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlRyYXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJXOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJCZWhhdmlvcjoiOiAiIiwKKyAgICAgICAgICAgICJDb250aW51b3VzIjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uOiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBzY3JvbGxpbmcgbWFycXVlZSI6ICIiLAorICAgICAgICAgICAgIk1hcnF1ZWUgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIEFtb3VudDoiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgRGVsYXk6IjogIiIsCisgICAgICAgICAgICAiU2xpZGUiOiAiIiwKKyAgICAgICAgICAgICJTcGVlZCBDb250cm9sIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTmFtZSI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIk5hbWUvSUQ6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJUZXh0OiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIldpZHRoOiI6ICI8PEhvcml6b250YWxSdWxlPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm90IGRlZmluZWQiOiAiIiwKKyAgICAgICAgICAgICIgT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlVwbG9hZCBmaWxlIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkxheW91dCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiU2l6ZSI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNwYWNpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJWZXJ0aWNhbDoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiTm90ZVNlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTIwJSI6ICIiLAorICAgICAgICAgICAgIjE1MCUiOiAiIiwKKyAgICAgICAgICAgICI4MCUiOiAiIiwKKyAgICAgICAgICAgICJBZGQgR1VJRE8gQ29kZSBpbiBhIHRleHRib3ggb24gdGhlIHBhZ2UiOiAiIiwKKyAgICAgICAgICAgICJBZGQgTUlESSBsaW5rIHRvIGFsbG93IHN0dWRlbnRzIHRvIGhlYXIgdGhlIG11c2ljIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiR1VJRE8gQ29kZSI6ICIiLAorICAgICAgICAgICAgIkd1aWRvIGNvZGUiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBpbiBhcHBsZXQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgR1VJRE8gTXVzaWMgTm90YXRpb24iOiAiIiwKKyAgICAgICAgICAgICJNSURJIEZpbGUiOiAiIiwKKyAgICAgICAgICAgICJTb3VyY2UgQ29kZSI6ICIiLAorICAgICAgICAgICAgIldpdGggTW96aWxsYSwgdGhlIGFwcGxldCB3aWxsIG5vdCBiZSB2aXNpYmxlIGluIGVkaXRvciwgYnV0IG9ubHkgaW4gV2ViIHBhZ2UgYWZ0ZXIgc3VibWl0dGluZy4iOiAiIiwKKyAgICAgICAgICAgICJab29tIDoiOiAiIiwKKyAgICAgICAgICAgICIxMDAlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiWm9vbSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgR2VhcnMgaW4gb3JkZXIgdG8gdXNlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UgYW5kIGNvbmZpZ3VyYXRpb24uIjogIiIsCisgICAgICAgICAgICAiRW5hYmxpbmcgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIkluc3RhbGwiOiAiIiwKKyAgICAgICAgICAgICJMZWFybiBBYm91dCBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIHJlbG9hZCB0aGUgcGFnZSwgY2F1c2luZyB5b3UgdG8gbG9zZSBhbnkgdW5zYXZlZCB3b3JrLiAgUHJlc3MgXCJPS1wiIHRvIHJlbG9hZC4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSB1c2VzIEdvb2dsZSBHZWFycyB0byBlbmFibGUgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZS4gIFdpdGggR2VhcnMgaW5zdGFsbGVkLCB5b3UgY2FuIHNhdmUgZHJhZnRzIG9mIHlvdXIgZG9jdW1lbnRzIG9uIHlvdXIgaGFyZCBkcml2ZSwgY29uZmlndXJlIFhpbmhhIHRvIGxvb2sgdGhlIHdheSB5b3Ugd2FudCwgYW5kIGNhcnJ5IHRoaXMgaW5mb3JtYXRpb24gd2hlcmV2ZXIgeW91IHVzZSBYaW5oYSBvbiB0aGUgd2ViLiI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiUFNTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU1NFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWxlOiAiOiAiIiwKKyAgICAgICAgICAgICJJbXBvcnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEZXRhaWxzIjogIiIsCisgICAgICAgICAgICAiRmlsZSBCcm93c2VyIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gICAgVGhlcmUgQyAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgVGhlcmUgQSAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyBcIiBUaGVyZSBCIFwiIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gJyBUaGVyZSBEICciOiAiIiwKKyAgICAgICAgICAgICJMaXN0IG9mIFBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIk5ldyBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIk9wZW4iOiAiIiwKKyAgICAgICAgICAgICJPcGVuIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgeW91J2QgbGlrZSB0byBjcmVhdGUuIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBlcmFzZSBhbnkgdW5zYXZlZCBjb250ZW50LiAgSWYgeW91J3JlIGNlcnRhaW4sIHBsZWFzZSBjbGljayBPSyB0byBjb250aW51ZS4iOiAiIiwKKyAgICAgICAgICAgICJXZWIgVVJMIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiPDxQU0xvY2FsPj4iLAorICAgICAgICAgICAgIkNvcHkiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTWFuYWdlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZW5hbWUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCI6ICI8PEluc2VydE5vdGU+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBTUEVMTENIRUNLRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGljdGlvbmFyeSI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGVkIGxpc3Qgb2YgbWlzcGVsbGVkIHdvcmRzIjogIiIsCisgICAgICAgICAgICAiSFRNTEFyZWEgU3BlbGwgQ2hlY2tlciI6ICIiLAorICAgICAgICAgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIGFsbCI6ICIiLAorICAgICAgICAgICAgIkluZm8iOiAiIiwKKyAgICAgICAgICAgICJMZWFybiI6ICIiLAorICAgICAgICAgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICIiLAorICAgICAgICAgICAgIk9yaWdpbmFsIHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQuICBDYWxsaW5nIHNwZWxsIGNoZWNrZXIuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAiIiwKKyAgICAgICAgICAgICJwbGl6IHdlaXQgOy0pIjogIiIsCisgICAgICAgICAgICAiUmUtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSBhbGwiOiAiIiwKKyAgICAgICAgICAgICJSZXZlcnQiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiU3BlbGwtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJTdWdnZXN0aW9ucyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBkcm9wIGNoYW5nZXMgYW5kIHF1aXQgc3BlbGwgY2hlY2tlci4gIFBsZWFzZSBjb25maXJtLiI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJSZXBsYWNlIHdpdGgiOiAiPDxGaW5kUmVwbGFjZT4+IgorICAgICAgICB9LAorICAgICAgICAiVGVtcGxhdGUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBURU1QTEFURSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJJbnNlcnQgdGVtcGxhdGUiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuRm9ybWF0IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWxsIjogIiIsCisgICAgICAgICAgICAiQWxsIEhUTUw6IjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgQXJlYSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIG9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0aW5nOiI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCB3aGljaCB0eXBlcyBvZiBmb3JtYXR0aW5nIHlvdSB3b3VsZCBsaWtlIHRvIHJlbW92ZS4iOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9iNS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2I1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNGQzNzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9iNS5qcwpAQCAtMCwwICsxLDE1MTMgQEAKKy8vIFhpbmhhIExhbmd1YWdlIENvbWJpbmVkIFRyYW5zbGF0aW9uIEZpbGUKKy8vCisvLyBMQU5HOiAiYjUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTlNUUlVDVElPTlMgVE8gVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFlvdXIgdHJhbnNsYXRpb24gbXVzdCBiZSBpbiBVVEYtOCBDaGFyYWN0ZXIgRW5jb2RpbmcuCisvLworLy8gVGhpcyBpcyBhIEpTT04gZW5jb2RlZCBmaWxlIChwbHVzIGNvbW1lbnRzKSwgc3RyaW5ncyBzaG91bGQgYmUgZG91YmxlLXF1b3RlCisvLyBvbmx5LCBkbyBub3QgdXNlIHNpbmdsZSBxdW90ZXMgdG8gc3Vycm91bmQgc3RyaW5ncyAtICJoZWxsbyIsIG5vdCAnaGVsbG8nCisvLyBkbyBub3QgaGF2ZSBhIHRyYWlsaW5nIGNvbW1hIGFmdGVyIHRoZSBsYXN0IGVudHJ5IGluIGEgc2VjdGlvbi4KKy8vCisvLyBPbmx5IGZ1bGwgbGluZSBjb21tZW50cyBhcmUgYWxsb3dlZCAodGhhdCBhIGNvbW1lbnRzIG9jY3VweSBlbnRpcmUgbGluZXMpLgorLy8KKy8vIFNlYXJjaCBmb3IgdGhlIF9fTkVXX1RSQU5TTEFUSU9OU19fIHNlY3Rpb24gYmVsb3csIHRoaXMgaXMgd2hlcmUgeW91IHdpbGwKKy8vIHdhbnQgdG8gZm9jdXMsIHRoaXMgc2VjdGlvbiBpbmNsdWRlcyB0aGluZ3MgdGhhdCBkbyBub3QgcHJlc2VudGx5IGhhdmUgYSAKKy8vIHRyYW5zbGF0aW9uIG9yIGZvciB3aGljaCB0aGUgdHJhbnNsYXRpb24gbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgYWNjdXJhY3kuCisvLworLy8gSW4gdGhlIE5ldyBUcmFuc2xhdGlvbnMgc2VjdGlvbiBhIHRyYW5zbGF0aW9uIHN0cmluZyBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZworLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiIgorLy8gICAgIFRoaXMgbWVhbnMgaXQgaXMgbm90IHRyYW5zbGF0ZWQgeWV0LCBhZGQgeW91ciB0cmFuc2xhdGlvbi4uLgorLy8gICAgICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJLbGluZ29uIFN0cmluZyBIZXJlIgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiVHJhbnNsYXRlZCBTdHJpbmcgSGVyZSIKKy8vICAgICBUaGlzIG1lYW5zIHRoYXQgYW4gZXhpc3RpbmcgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nLCBpbiBzb21lIG90aGVyCisvLyAgICAgc2VjdGlvbiBoYXMgYmVlbiBmb3VuZCwgYW5kIHVzZWQuICBDaGVjayB0aGF0IGl0IGlzIGFwcHJvcHJpdGUgZm9yIHRoaXMKKy8vICAgICBzZWN0aW9uIGFuZCBpZiBpdCBpcywgdGhhdCdzIGZpbmUgbGVhdmUgaXQgYXMgaXMsIG90aGVyd2lzZSBjaGFuZ2UgYXMKKy8vICAgICBhcHByb3ByaWF0ZS4KKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIjw8QW5vdGhlclNlY3Rpb24+PiIKKy8vICAgICBUaGlzIG1lYW5zIHVzZSB0aGUgc2FtZSB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcgYXMgPDxBbm90aGVyU2VjdGlvbj4+CisvLyAgICAgdGhpcyBzYXZlcyB5b3UgcmUtdHJhbmxhdGluZyBzdHJpbmdzLiAgSWYgdGhlIENvbnRleHQgb2YgdGhpcyBzZWN0aW9uCisvLyAgICAgYW5kIHRoZSBjb250ZXh0IG9mIEFub3RoZXJTZWN0aW9uIHNlZW0gdGhlIHNhbWUsIHRoYXQncyBmaW5lIGxlYXZlIGl0CisvLyAgICAgdXNpbmcgdGhhdCB0cmFuc2xhdGlvbiwgYnV0IGlmIHRoaXMgc2VjdGlvbiBuZWVkcyBhIGRpZmZlcmVudCB0cmFuc2xhdGlvbiwgCisvLyAgICAgeW91IGNhbiBwcm92aWRlIGl0IGJ5IHJlcGxhY2luZyB0aGUgbGluayAoPDxBbm90aGVyU2VjdGlvbj4+KSB3aXRoIHRoYXQKKy8vICAgICBuZXcgdHJhbnNsYXRpb24uICBGb3IgZXhhbXBsZSAtIGEgIlRhYmxlIiBpbiBzYXkgIkRhdGFQbHVnaW4iIGlzIAorLy8gICAgIHBlcmhhcHMgdHJhbnNsYXRlZCBkaWZmZXJlbnRseSB0byAiVGFibGUiIGluICJGdXJuaXR1cmVQbHVnaW4iLgorLy8KKy8vIFRFU1RJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgcGxhY2UgeW91ciB0cmFuc2xhdGlvbiBmaWxlIG9uIHlvdXIgd2Vic2VydmVyIHNvbWV3aGVyZSBmb3IgZXhhbXBsZQorLy8KKy8vICAgL3hpbmhhL2xhbmcvbWVyZ2VkL2I1LmpzCisvLworLy8gYW5kIHRoZW4gdGVsbCBYaW5oYSB3aGVyZSB0byBnZXQgaXQgKGJlZm9yZSBsb2FkaW5nIFhpbmhhQ29yZS5qcykgYnkgCisvLworLy8gIF9lZGl0b3JfbGFuZyAgICAgICAgICAgICAgPSAnYjUnOworLy8gIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSAgPSAnL3hpbmhhL2xhbmcvbWVyZ2VkL2I1LmpzJzsKKy8vCisvLyBYaW5oYSB3aWxsIGxvYWQgeW91ciBuZXcgbGFuZ3VhZ2UgZGVmaW5pdGlvbi4KKy8vCisvLyBTVUJNSVRUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IGNyZWF0ZSBhIFRpY2tldCBvbiB0aGUgWGluaGEgd2Vic2l0ZSBhbmQgYXR0YWNoIHlvdXIgdHJhbnNsYXRpb24gCisvLyBmaWxlLgorLy8KKy8vIFRoZSBYaW5oYSBkZXZlbG9wZXJzIHdpbGwgdGFrZSB5b3VyIGZpbGUgYW5kIHVzZSB0aGUgCisvLyAgICAgY29udHJpYi9sY19zcGxpdF9tZXJnZWRfZmlsZS5waHAKKy8vIHNjcmlwdCB0byBsb2FkIGl0IGludG8gdGhlIFhpbmhhIGRpc3RyaWJ1dGlvbi4KKworeworICAgICJBYm91dEJveCI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIumXnOaWvCBYaW5oYSIKKyAgICB9LAorICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogIuS9jee9ruWxheS4rSIsCisgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAi5L2N572u5bem5Y+z5bmz562JIiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICLkvY3nva7pnaDlt6YiLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICLkvY3nva7pnaDlj7MiCisgICAgfSwKKyAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAi5rC05bmz57eaIgorICAgIH0sCisgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIuaPkuWFpeihqOagvCIKKyAgICB9LAorICAgICJYaW5oYSI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIumXnOaWvCBYaW5oYSIsCisgICAgICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIuiDjOaZr+mhj+iJsiIsCisgICAgICAgICJCb2xkIjogIueyl+mrlCIsCisgICAgICAgICJCdWxsZXRlZCBMaXN0IjogIueEoeW6j+a4heWWriIsCisgICAgICAgICJDdXJyZW50IHN0eWxlIjogIuWtl+mrlOS+i+WtkCIsCisgICAgICAgICJEZWNyZWFzZSBJbmRlbnQiOiAi5rib5bCP6KGM5YmN56m655m9IiwKKyAgICAgICAgIkZvbnQgQ29sb3IiOiAi5paH5a2X6aGP6ImyIiwKKyAgICAgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIuiqquaYjiIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAi5rC05bmz57eaIiwKKyAgICAgICAgIkluY3JlYXNlIEluZGVudCI6ICLliqDlr6zooYzliY3nqbrnmb0iLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIuaPkuWFpeihqOagvCIsCisgICAgICAgICJJbnNlcnQgV2ViIExpbmsiOiAi5o+S5YWl6YCj57WQIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAi5o+S5YWl5ZyW5b2iIiwKKyAgICAgICAgIkl0YWxpYyI6ICLmlpzpq5QiLAorICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAi5L2N572u5bGF5LitIiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICLkvY3nva7lt6blj7PlubPnrYkiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIuS9jee9rumdoOW3piIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIuS9jee9rumdoOWPsyIsCisgICAgICAgICJPcmRlcmVkIExpc3QiOiAi6aCG5bqP5riF5ZauIiwKKyAgICAgICAgIlN0cmlrZXRocm91Z2giOiAi5Yiq6Zmk57eaIiwKKyAgICAgICAgIlN1YnNjcmlwdCI6ICLkuIvmqJkiLAorICAgICAgICAiU3VwZXJzY3JpcHQiOiAi5LiK5qiZIiwKKyAgICAgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICLliIfmj5tIVE1M5Y6f5aeL56K8IiwKKyAgICAgICAgIlVuZGVybGluZSI6ICLlupXnt5oiCisgICAgfSwKKyAgICAiX19ORVdfVFJBTlNMQVRJT05TX18iOiB7CisgICAgICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICAgICAiQWJicmV2aWF0aW9uIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIiIsCisgICAgICAgICAgICAiRXhwYW5zaW9uOiI6ICIiLAorICAgICAgICAgICAgIk9LIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkFib3V0Qm94IjogeworICAgICAgICAgICAgIkNsb3NlIjogIjw8WGluaGE+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJDb3VudGVyIjogeworICAgICAgICAgICAgIi4uLiBpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIkNoYXJzIjogIiIsCisgICAgICAgICAgICAiSFRNTCI6ICIiLAorICAgICAgICAgICAgIldvcmRzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJhY3Rlck1hcCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgc3BlY2lhbCBjaGFyYWN0ZXIiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICAgICAiQ2xpY2sgYSBjb2xvci4uLiI6ICIiLAorICAgICAgICAgICAgIkNvbG9yOiAiOiAiIiwKKyAgICAgICAgICAgICJTYW1wbGUiOiAiIiwKKyAgICAgICAgICAgICJXZWIgU2FmZTogIjogIiIsCisgICAgICAgICAgICAiQ2xvc2UiOiAiPDxYaW5oYT4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiQ29udGV4dE1lbnUiOiB7CisgICAgICAgICAgICAiX0RlbGV0ZSBSb3ciOiAiIiwKKyAgICAgICAgICAgICJfSW1hZ2UgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIl9Nb2RpZnkgTGluay4uLiI6ICIiLAorICAgICAgICAgICAgIl9SZW1vdmUgTGluay4uLiI6ICIiLAorICAgICAgICAgICAgIl9UYWJsZSBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiQ19lbGwgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIkNoZWNfayBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiQ29weSI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBhIGxpbmsiOiAiIiwKKyAgICAgICAgICAgICJDdXJyZW50IFVSTCBpcyI6ICIiLAorICAgICAgICAgICAgIkN1dCI6ICIiLAorICAgICAgICAgICAgIkRlX2xldGUgQ29sdW1uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIENlbGwiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgY29sdW1uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IHJvdyI6ICIiLAorICAgICAgICAgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIiIsCisgICAgICAgICAgICAiSV9uc2VydCBSb3cgQmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5fc2VydCBSb3cgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgX0NvbHVtbiBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ19vbHVtbiBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDZWxsIEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiTGluayBwb2ludHMgdG86IjogIiIsCisgICAgICAgICAgICAiTWFrZSBsaW5fay4uLiI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIiIsCisgICAgICAgICAgICAiT3BlbnMgdGhpcyBsaW5rIGluIGEgbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlBhc3RlIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBlbGVtZW50OiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gdW5saW5rIHRoaXMgZWxlbWVudC4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgdGhlICRlbGVtIEVsZW1lbnQuLi4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgdGhpcyBub2RlIGZyb20gdGhlIGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUm9fdyBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgaW1hZ2UgcHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBDZWxsIFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgVGFibGUgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBSb3cgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJVbmxpbmsgdGhlIGN1cnJlbnQgZWxlbWVudCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICIiLAorICAgICAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiIiwKKyAgICAgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIiIsCisgICAgICAgICAgICAiT3RoZXIiOiAiIiwKKyAgICAgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiIiwKKyAgICAgICAgICAgICJUYXJnZXQ6IjogIiIsCisgICAgICAgICAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICIiLAorICAgICAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiIiwKKyAgICAgICAgICAgICJVUkw6IjogIiIsCisgICAgICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJEZWZpbml0aW9uTGlzdCI6IHsKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGRlc2NyaXB0aW9uIjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiBsaXN0IjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiB0ZXJtIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRpYWxvZ3MiOiB7CisgICAgICAgICAgICAiU29tZSBUZXh0IEhlcmUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRHluYW1pY0NTUyI6IHsKKyAgICAgICAgICAgICJDaG9vc2Ugc3R5bGVzaGVldCI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQiOiAiIiwKKyAgICAgICAgICAgICJVbmRlZmluZWQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgICAgICJFZGl0IEhUTUwgZm9yIHNlbGVjdGVkIHRleHQiOiAiIiwKKyAgICAgICAgICAgICJFZGl0IFRhZyBCeSBQZWciOiAiIiwKKyAgICAgICAgICAgICJUYWcgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgICAgICIhPSI6ICIiLAorICAgICAgICAgICAgIiFpbiI6ICIiLAorICAgICAgICAgICAgIiZndDstIjogIiIsCisgICAgICAgICAgICAiJmd0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZsdDt4Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgIWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAuYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDBgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAzYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDRgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA2YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDdgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA5YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYGVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyZuYnNwO2AxYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgK3s6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC06XFwgYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Atezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgQ2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgY29zYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BsbmAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgcGlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BzaW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRhbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGltZXNgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJnF1b3Q7dGV4dCZxdW90OyI6ICIiLAorICAgICAgICAgICAgIicrZm9ybXVsYSsnIjogIiIsCisgICAgICAgICAgICAiKChuKSwoaykpIjogIiIsCisgICAgICAgICAgICAiKHgrMSkvKHgtMSkiOiAiIiwKKyAgICAgICAgICAgICIqIjogIiIsCisgICAgICAgICAgICAiKioiOiAiIiwKKyAgICAgICAgICAgICIrLSI6ICIiLAorICAgICAgICAgICAgIi0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiLSZsdDsiOiAiIiwKKyAgICAgICAgICAgICItOiI6ICIiLAorICAgICAgICAgICAgIi09IjogIiIsCisgICAgICAgICAgICAiLy8iOiAiIiwKKyAgICAgICAgICAgICIvXyI6ICIiLAorICAgICAgICAgICAgIjouIjogIiIsCisgICAgICAgICAgICAiPSZndDsiOiAiIiwKKyAgICAgICAgICAgICJAIjogIiIsCisgICAgICAgICAgICAiW1thLGJdLFtjLGRdXSI6ICIiLAorICAgICAgICAgICAgIlxcXFwiOiAiIiwKKyAgICAgICAgICAgICJcXG5DbGljayBpbiB0aGUgYm94IHRvIHVzZSB5b3VyIGtleWJvYXJkIG9yIHVzZSB0aGUgYnV0dG9uc1xcbiI6ICIiLAorICAgICAgICAgICAgIl5eIjogIiIsCisgICAgICAgICAgICAiXl5eIjogIiIsCisgICAgICAgICAgICAiX198IjogIiIsCisgICAgICAgICAgICAiX3xfIjogIiIsCisgICAgICAgICAgICAiYCE9YCI6ICIiLAorICAgICAgICAgICAgImAhaW5gIjogIiIsCisgICAgICAgICAgICAiYCZhbmQ7YCI6ICIiLAorICAgICAgICAgICAgImAmY2FwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmN1cDtgIjogIiIsCisgICAgICAgICAgICAiYCZndDstYCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0O3gmZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmb3I7YCI6ICIiLAorICAgICAgICAgICAgImAmcXVvdDt0ZXh0JnF1b3Q7YCI6ICIiLAorICAgICAgICAgICAgImAoKG4pLChrKSlgIjogIiIsCisgICAgICAgICAgICAiYCh4KzEpLyh4LTEpYCI6ICIiLAorICAgICAgICAgICAgImAqKmAiOiAiIiwKKyAgICAgICAgICAgICJgKmAiOiAiIiwKKyAgICAgICAgICAgICJgKy1gIjogIiIsCisgICAgICAgICAgICAiYC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAtJmx0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLTpgIjogIiIsCisgICAgICAgICAgICAiYC09YCI6ICIiLAorICAgICAgICAgICAgImAvL2AiOiAiIiwKKyAgICAgICAgICAgICJgL19gIjogIiIsCisgICAgICAgICAgICAiYDouYCI6ICIiLAorICAgICAgICAgICAgImA9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgQGAiOiAiIiwKKyAgICAgICAgICAgICJgW1thLGJdLFtjLGRdXWAiOiAiIiwKKyAgICAgICAgICAgICJgXFxcXGAiOiAiIiwKKyAgICAgICAgICAgICJgX198YCI6ICIiLAorICAgICAgICAgICAgImBffF9gIjogIiIsCisgICAgICAgICAgICAiYEFBYCI6ICIiLAorICAgICAgICAgICAgImBhbGVwaGAiOiAiIiwKKyAgICAgICAgICAgICJgYWxwaGFgIjogIiIsCisgICAgICAgICAgICAiYGFuZGAiOiAiIiwKKyAgICAgICAgICAgICJgYmFyYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiZXRhYCI6ICIiLAorICAgICAgICAgICAgImBDQ2AiOiAiIiwKKyAgICAgICAgICAgICJgY2NhYCI6ICIiLAorICAgICAgICAgICAgImBjaGlgIjogIiIsCisgICAgICAgICAgICAiYGRhcnJgIjogIiIsCisgICAgICAgICAgICAiYGRkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkZWxgIjogIiIsCisgICAgICAgICAgICAiYERlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGlhbW9uZGAiOiAiIiwKKyAgICAgICAgICAgICJgZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZHkvZHhgIjogIiIsCisgICAgICAgICAgICAiYEVFYCI6ICIiLAorICAgICAgICAgICAgImBlcHNpYCI6ICIiLAorICAgICAgICAgICAgImBldGFgIjogIiIsCisgICAgICAgICAgICAiYGZyYWAiOiAiIiwKKyAgICAgICAgICAgICJgR2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBncmFkYCI6ICIiLAorICAgICAgICAgICAgImBoQXJyYCI6ICIiLAorICAgICAgICAgICAgImBoYXJyYCI6ICIiLAorICAgICAgICAgICAgImBoYXRhYCI6ICIiLAorICAgICAgICAgICAgImBpZmAiOiAiIiwKKyAgICAgICAgICAgICJgaW5gIjogIiIsCisgICAgICAgICAgICAiYGludGAiOiAiIiwKKyAgICAgICAgICAgICJgaW90YWAiOiAiIiwKKyAgICAgICAgICAgICJga2FwcGFgIjogIiIsCisgICAgICAgICAgICAiYExhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBsYXJyYCI6ICIiLAorICAgICAgICAgICAgImBsQXJyYCI6ICIiLAorICAgICAgICAgICAgImBsaW1fKHgtJmd0O29vKWAiOiAiIiwKKyAgICAgICAgICAgICJgbG9nYCI6ICIiLAorICAgICAgICAgICAgImBtdWAiOiAiIiwKKyAgICAgICAgICAgICJgTk5gIjogIiIsCisgICAgICAgICAgICAiYG5uYCI6ICIiLAorICAgICAgICAgICAgImBub3RgIjogIiIsCisgICAgICAgICAgICAiYG51YCI6ICIiLAorICAgICAgICAgICAgImBvK2AiOiAiIiwKKyAgICAgICAgICAgICJgby5gIjogIiIsCisgICAgICAgICAgICAiYE8vYCI6ICIiLAorICAgICAgICAgICAgImBvaW50YCI6ICIiLAorICAgICAgICAgICAgImBPbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgb21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYG9vYCI6ICIiLAorICAgICAgICAgICAgImBvcmAiOiAiIiwKKyAgICAgICAgICAgICJgb3hgIjogIiIsCisgICAgICAgICAgICAiYHBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGhpYCI6ICIiLAorICAgICAgICAgICAgImBQaWAiOiAiIiwKKyAgICAgICAgICAgICJgcGlgIjogIiIsCisgICAgICAgICAgICAiYHByb2RgIjogIiIsCisgICAgICAgICAgICAiYHByb3BgIjogIiIsCisgICAgICAgICAgICAiYHBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgUHNpYCI6ICIiLAorICAgICAgICAgICAgImBRUWAiOiAiIiwKKyAgICAgICAgICAgICJgcXVhZGAiOiAiIiwKKyAgICAgICAgICAgICJgckFycmAiOiAiIiwKKyAgICAgICAgICAgICJgcmhvYCI6ICIiLAorICAgICAgICAgICAgImByb290KG4pKHgpYCI6ICIiLAorICAgICAgICAgICAgImBSUmAiOiAiIiwKKyAgICAgICAgICAgICJgc2ZhYCI6ICIiLAorICAgICAgICAgICAgImBTaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgc2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYHNxcnQoeClgIjogIiIsCisgICAgICAgICAgICAiYHNxdWFyZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3RhY2tyZWwoLSZndDspKCspYCI6ICIiLAorICAgICAgICAgICAgImBzdWJgIjogIiIsCisgICAgICAgICAgICAiYHN1YmVgIjogIiIsCisgICAgICAgICAgICAiYHN1bWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwYCI6ICIiLAorICAgICAgICAgICAgImBzdXBlYCI6ICIiLAorICAgICAgICAgICAgImB0YXVgIjogIiIsCisgICAgICAgICAgICAiYHRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImBUaGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgVFRgIjogIiIsCisgICAgICAgICAgICAiYHR0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdWFycmAiOiAiIiwKKyAgICAgICAgICAgICJgdWxhYCI6ICIiLAorICAgICAgICAgICAgImB1cHNpbG9uYCI6ICIiLAorICAgICAgICAgICAgImB1dWAiOiAiIiwKKyAgICAgICAgICAgICJgdmVjYWAiOiAiIiwKKyAgICAgICAgICAgICJgdnZgIjogIiIsCisgICAgICAgICAgICAiYHhfKG1uKWAiOiAiIiwKKyAgICAgICAgICAgICJgeGlgIjogIiIsCisgICAgICAgICAgICAiYFhpYCI6ICIiLAorICAgICAgICAgICAgImB4eGAiOiAiIiwKKyAgICAgICAgICAgICJgemV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgWlpgIjogIiIsCisgICAgICAgICAgICAiYHwtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgfC0tYCI6ICIiLAorICAgICAgICAgICAgImB8PT1gIjogIiIsCisgICAgICAgICAgICAiYHxfX2AiOiAiIiwKKyAgICAgICAgICAgICJgfH5gIjogIiIsCisgICAgICAgICAgICAiYH49YCI6ICIiLAorICAgICAgICAgICAgImB+fGAiOiAiIiwKKyAgICAgICAgICAgICJgfn5gIjogIiIsCisgICAgICAgICAgICAiQUEiOiAiIiwKKyAgICAgICAgICAgICJhbGVwaCI6ICIiLAorICAgICAgICAgICAgImFscGhhIjogIiIsCisgICAgICAgICAgICAiYW5kIjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoIEZvcm11bGEgSW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGhNTCBFeGFtcGxlIjogIiIsCisgICAgICAgICAgICAiYmFyYSI6ICIiLAorICAgICAgICAgICAgIkJhc2VkIG9uIEFTQ0lJTWF0aE1MIGJ5IjogIiIsCisgICAgICAgICAgICAiYmJhIjogIiIsCisgICAgICAgICAgICAiYmJiYSI6ICIiLAorICAgICAgICAgICAgImJldGEiOiAiIiwKKyAgICAgICAgICAgICJDQyI6ICIiLAorICAgICAgICAgICAgImNjYSI6ICIiLAorICAgICAgICAgICAgImNoaSI6ICIiLAorICAgICAgICAgICAgImRhcnIiOiAiIiwKKyAgICAgICAgICAgICJkZG90YSI6ICIiLAorICAgICAgICAgICAgImRlbCI6ICIiLAorICAgICAgICAgICAgImRlbHRhIjogIiIsCisgICAgICAgICAgICAiRGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJkaWFtb25kIjogIiIsCisgICAgICAgICAgICAiZG90YSI6ICIiLAorICAgICAgICAgICAgImR5L2R4IjogIiIsCisgICAgICAgICAgICAiRUUiOiAiIiwKKyAgICAgICAgICAgICJlcHNpIjogIiIsCisgICAgICAgICAgICAiZXRhIjogIiIsCisgICAgICAgICAgICAiRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQXNjaWlNYXRoTUwgdmlzaXQgdGhpcyBwYWdlOiI6ICIiLAorICAgICAgICAgICAgIkZvcm11bGEgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiZnJhIjogIiIsCisgICAgICAgICAgICAiZ2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJHYW1tYSI6ICIiLAorICAgICAgICAgICAgImdyYWQiOiAiIiwKKyAgICAgICAgICAgICJoQXJyIjogIiIsCisgICAgICAgICAgICAiaGFyciI6ICIiLAorICAgICAgICAgICAgImhhdGEiOiAiIiwKKyAgICAgICAgICAgICJpZiI6ICIiLAorICAgICAgICAgICAgImluIjogIiIsCisgICAgICAgICAgICAiSW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJpbnQiOiAiIiwKKyAgICAgICAgICAgICJpbnRfYV5iZih4KWR4IjogIiIsCisgICAgICAgICAgICAiaW90YSI6ICIiLAorICAgICAgICAgICAgImthcHBhIjogIiIsCisgICAgICAgICAgICAibGFtYmRhIjogIiIsCisgICAgICAgICAgICAiTGFtYmRhIjogIiIsCisgICAgICAgICAgICAibEFyciI6ICIiLAorICAgICAgICAgICAgImxhcnIiOiAiIiwKKyAgICAgICAgICAgICJsaW1fKHgtJmd0O29vKSI6ICIiLAorICAgICAgICAgICAgIm11IjogIiIsCisgICAgICAgICAgICAibm4iOiAiIiwKKyAgICAgICAgICAgICJOTiI6ICIiLAorICAgICAgICAgICAgIm5ubiI6ICIiLAorICAgICAgICAgICAgIm5vdCI6ICIiLAorICAgICAgICAgICAgIm51IjogIiIsCisgICAgICAgICAgICAibysiOiAiIiwKKyAgICAgICAgICAgICJvLiI6ICIiLAorICAgICAgICAgICAgIk8vIjogIiIsCisgICAgICAgICAgICAib2ludCI6ICIiLAorICAgICAgICAgICAgIk9tZWdhIjogIiIsCisgICAgICAgICAgICAib21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJvbyI6ICIiLAorICAgICAgICAgICAgIm9yIjogIiIsCisgICAgICAgICAgICAib3giOiAiIiwKKyAgICAgICAgICAgICJQaGkiOiAiIiwKKyAgICAgICAgICAgICJwaGkiOiAiIiwKKyAgICAgICAgICAgICJwaSI6ICIiLAorICAgICAgICAgICAgIlBpIjogIiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICIiLAorICAgICAgICAgICAgInByb2QiOiAiIiwKKyAgICAgICAgICAgICJwcm9wIjogIiIsCisgICAgICAgICAgICAicHNpIjogIiIsCisgICAgICAgICAgICAiUHNpIjogIiIsCisgICAgICAgICAgICAiUVEiOiAiIiwKKyAgICAgICAgICAgICJxdWFkIjogIiIsCisgICAgICAgICAgICAickFyciI6ICIiLAorICAgICAgICAgICAgInJobyI6ICIiLAorICAgICAgICAgICAgInJvb3QobikoeCkiOiAiIiwKKyAgICAgICAgICAgICJSUiI6ICIiLAorICAgICAgICAgICAgInNmYSI6ICIiLAorICAgICAgICAgICAgIlNpZ21hIjogIiIsCisgICAgICAgICAgICAic2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJzcXJ0KHgpIjogIiIsCisgICAgICAgICAgICAic3F1YXJlIjogIiIsCisgICAgICAgICAgICAic3RhY2tyZWwoLSZndDspKCspIjogIiIsCisgICAgICAgICAgICAic3ViIjogIiIsCisgICAgICAgICAgICAic3ViZSI6ICIiLAorICAgICAgICAgICAgInN1bSI6ICIiLAorICAgICAgICAgICAgInN1bV8obj0xKV5vbyI6ICIiLAorICAgICAgICAgICAgInN1cCI6ICIiLAorICAgICAgICAgICAgInN1cGUiOiAiIiwKKyAgICAgICAgICAgICJ0YXUiOiAiIiwKKyAgICAgICAgICAgICJUaGV0YSI6ICIiLAorICAgICAgICAgICAgInRoZXRhIjogIiIsCisgICAgICAgICAgICAiVFQiOiAiIiwKKyAgICAgICAgICAgICJ0dGEiOiAiIiwKKyAgICAgICAgICAgICJ1YXJyIjogIiIsCisgICAgICAgICAgICAidWxhIjogIiIsCisgICAgICAgICAgICAidXBzaWxvbiI6ICIiLAorICAgICAgICAgICAgInV1IjogIiIsCisgICAgICAgICAgICAidXV1IjogIiIsCisgICAgICAgICAgICAidmVjYSI6ICIiLAorICAgICAgICAgICAgInZ2IjogIiIsCisgICAgICAgICAgICAidnZ2IjogIiIsCisgICAgICAgICAgICAieF4obStuKSI6ICIiLAorICAgICAgICAgICAgInhfKG1uKSI6ICIiLAorICAgICAgICAgICAgIlhpIjogIiIsCisgICAgICAgICAgICAieGkiOiAiIiwKKyAgICAgICAgICAgICJ4eCI6ICIiLAorICAgICAgICAgICAgInpldGEiOiAiIiwKKyAgICAgICAgICAgICJaWiI6ICIiLAorICAgICAgICAgICAgInwtJmd0OyI6ICIiLAorICAgICAgICAgICAgInwtLSI6ICIiLAorICAgICAgICAgICAgInw9PSI6ICIiLAorICAgICAgICAgICAgInxfXyI6ICIiLAorICAgICAgICAgICAgInx+IjogIiIsCisgICAgICAgICAgICAifj0iOiAiIiwKKyAgICAgICAgICAgICJ+fCI6ICIiLAorICAgICAgICAgICAgIn5+IjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJGYW5jeVNlbGVjdHMiOiB7CisgICAgICAgICAgICAiJytvcHQudGV4dCsnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbmRSZXBsYWNlIjogeworICAgICAgICAgICAgIic7XHJcbiAgdmFyIHRhZ2MgPSAnIjogIiIsCisgICAgICAgICAgICAiQ2FzZSBzZW5zaXRpdmUgc2VhcmNoIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIiOiAiIiwKKyAgICAgICAgICAgICJEb25lIjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIHRleHQgeW91IHdhbnQgdG8gZmluZCI6ICIiLAorICAgICAgICAgICAgIkZpbmQgYW5kIFJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJmb3VuZCBpdGVtIjogIiIsCisgICAgICAgICAgICAiZm91bmQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJIaWdobGlnaHQiOiAiIiwKKyAgICAgICAgICAgICJJbmZvcm0gYSByZXBsYWNlbWVudCB3b3JkIjogIiIsCisgICAgICAgICAgICAiTmV4dCI6ICIiLAorICAgICAgICAgICAgIm5vdCBmb3VuZCI6ICIiLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIHdpdGg6IjogIiIsCisgICAgICAgICAgICAicmVwbGFjZWQgaXRlbSI6ICIiLAorICAgICAgICAgICAgInJlcGxhY2VkIGl0ZW1zIjogIiIsCisgICAgICAgICAgICAiU2VhcmNoIGZvcjoiOiAiIiwKKyAgICAgICAgICAgICJTdWJzdGl0dXRlIGFsbCBvY2N1cnJlbmNlcyI6ICIiLAorICAgICAgICAgICAgIlN1YnN0aXR1dGUgdGhpcyBvY2N1cnJlbmNlPyI6ICIiLAorICAgICAgICAgICAgIlVuZG8iOiAiIiwKKyAgICAgICAgICAgICJXaG9sZSB3b3JkcyBvbmx5IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1PcGVyYXRpb25zIjogeworICAgICAgICAgICAgIkVudGVyIHRoZSBuYW1lIGZvciBuZXcgb3B0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgY2hlY2sgYm94LiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIEZvcm0uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbXVsdGktbGluZSB0ZXh0IGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHJhZGlvIGJ1dHRvbi4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzZWxlY3QgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgc3VibWl0L3Jlc2V0IGJ1dHRvbi4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSB0ZXh0LCBwYXNzd29yZCBvciBoaWRkZW4gZmllbGQuIjogIiIsCisgICAgICAgICAgICAiTWVzc2FnZSBTZW50IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIFNlbGVjdC4uLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGb3JtcyI6IHsKKyAgICAgICAgICAgICInb25DbGljayc9IjogIiIsCisgICAgICAgICAgICAiQWNjZXNzIEtleToiOiAiIiwKKyAgICAgICAgICAgICJBY3Rpb24gVVJMOiI6ICIiLAorICAgICAgICAgICAgIkJ1dHRvbiBTY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJDaGVja2VkIjogIiIsCisgICAgICAgICAgICAiQ29sdW1uczoiOiAiIiwKKyAgICAgICAgICAgICJEZWZhdWx0IHRleHQgKG9wdGlvbmFsKSI6ICIiLAorICAgICAgICAgICAgIkRpbWVuc2lvbnMiOiAiIiwKKyAgICAgICAgICAgICJEaXNhYmxlZCI6ICIiLAorICAgICAgICAgICAgIkVuY29kaW5nOiI6ICIiLAorICAgICAgICAgICAgIkZvciBDb250cm9sOiI6ICIiLAorICAgICAgICAgICAgIkZvcm0iOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IEZJRUxEU0VUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBJTlBVVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IFNFTEVDVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogVEVYVEFSRUEiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIGhhbmRsZXIgc2NyaXB0IjogIiIsCisgICAgICAgICAgICAiRm9ybSBOYW1lOiI6ICIiLAorICAgICAgICAgICAgIkdldCI6ICIiLAorICAgICAgICAgICAgIkhhcmQiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQgaW4gbnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJIVE1MLUZvcm0gdG8gQ0dJIChkZWZhdWx0KSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIHNvdXJjZSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIFVSTDoiOiAiIiwKKyAgICAgICAgICAgICJJbml0aWFsIFRleHQ6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBGSUVMRFNFVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBJTlBVVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBTRUxFQ1QiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgVEVYVEFSRUEiOiAiIiwKKyAgICAgICAgICAgICJKYXZhc2NyaXB0IGZvciBidXR0b24gY2xpY2siOiAiIiwKKyAgICAgICAgICAgICJMYWJlbDoiOiAiIiwKKyAgICAgICAgICAgICJMZWdlbmQ6IjogIiIsCisgICAgICAgICAgICAiTWF4IGxlbmd0aDoiOiAiIiwKKyAgICAgICAgICAgICJNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjY2VwdGVkIjogIiIsCisgICAgICAgICAgICAiTWV0aG9kOiI6ICIiLAorICAgICAgICAgICAgIm11bHRpcGFydCBGb3JtIERhdGEgKEZpbGUtVXBsb2FkKSI6ICIiLAorICAgICAgICAgICAgIk5hbWUiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJuYW1lIG9mIHRoZSB0ZXh0YXJlYSI6ICIiLAorICAgICAgICAgICAgIk5hbWUvSUQ6IjogIiIsCisgICAgICAgICAgICAibm9ybWFsIjogIiIsCisgICAgICAgICAgICAibm93cmFwIjogIiIsCisgICAgICAgICAgICAiT2ZmIjogIiIsCisgICAgICAgICAgICAiUGh5c2ljYWwiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgYSBMYWJlbCI6ICIiLAorICAgICAgICAgICAgIlBvc3QiOiAiIiwKKyAgICAgICAgICAgICJwcmUiOiAiIiwKKyAgICAgICAgICAgICJSZWFkIE9ubHkiOiAiIiwKKyAgICAgICAgICAgICJSb3dzOiI6ICIiLAorICAgICAgICAgICAgIlNpemUgb2YgdGV4dCBib3ggaW4gY2hhcmFjdGVycyI6ICIiLAorICAgICAgICAgICAgIlNpemU6IjogIiIsCisgICAgICAgICAgICAiU29mdCI6ICIiLAorICAgICAgICAgICAgIlRhYiBJbmRleDoiOiAiIiwKKyAgICAgICAgICAgICJUYXJnZXQgRnJhbWU6IjogIiIsCisgICAgICAgICAgICAiVGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJVUkwgb2YgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICAgICAgICAgIlZhbHVlOiI6ICIiLAorICAgICAgICAgICAgIlZpcnR1YWwiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aCBpbiBudW1iZXIgb2YgY2hhcmFjdGVycyI6ICIiLAorICAgICAgICAgICAgIldyYXAgTW9kZToiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iCisgICAgICAgIH0sCisgICAgICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgICAgICIuLi4iOiAiIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgc3R5bGUtc2hlZXQ6IjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZCBjb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJDaGFyYWN0ZXIgc2V0OiI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChJU08tODg1OS01KSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChLT0k4LVIpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKFdJTkRPV1MtMTI1MSkiOiAiIiwKKyAgICAgICAgICAgICJEZXNjcmlwdGlvbjoiOiAiIiwKKyAgICAgICAgICAgICJET0NUWVBFOiI6ICIiLAorICAgICAgICAgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCB0aXRsZToiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkczoiOiAiIiwKKyAgICAgICAgICAgICJQcmltYXJ5IHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIlRleHQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiVVRGLTggKHJlY29tbWVuZGVkKSI6ICIiLAorICAgICAgICAgICAgIndlc3Rlcm4gKElTTy04ODU5LTEpIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJGdWxsU2NyZWVuIjogeworICAgICAgICAgICAgIk1heGltaXplL01pbmltaXplIEVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJHZWNrbyI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICAgICAiJiN4MDBkNzsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIiIsCisgICAgICAgICAgICAiQ2VudGVyIjogIiIsCisgICAgICAgICAgICAiQ29sb3I6IjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEhvcml6b250YWwgUnVsZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9lZGl0IGhvcml6b250YWwgcnVsZSI6ICIiLAorICAgICAgICAgICAgIkxheW91dCI6ICIiLAorICAgICAgICAgICAgIkxlZnQiOiAiIiwKKyAgICAgICAgICAgICJObyBzaGFkaW5nIjogIiIsCisgICAgICAgICAgICAicGVyY2VudCI6ICIiLAorICAgICAgICAgICAgInBpeGVscyI6ICIiLAorICAgICAgICAgICAgIlJpZ2h0IjogIiIsCisgICAgICAgICAgICAiU3R5bGUiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIiOiAiIiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiIiwKKyAgICAgICAgICAgICJDaGFyIjogIiIsCisgICAgICAgICAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJDU1MgU3R5bGUiOiAiIiwKKyAgICAgICAgICAgICJGRyBDb2xvciI6ICIiLAorICAgICAgICAgICAgIkZsb2F0IjogIiIsCisgICAgICAgICAgICAiSnVzdGlmeSI6ICIiLAorICAgICAgICAgICAgIk1hcmdpbiI6ICIiLAorICAgICAgICAgICAgIk1pZGRsZSI6ICIiLAorICAgICAgICAgICAgIk5vbmUiOiAiIiwKKyAgICAgICAgICAgICJQYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiVGV4dCBhbGlnbiI6ICIiLAorICAgICAgICAgICAgIlRvcCI6ICIiLAorICAgICAgICAgICAgIlZlcnRpY2FsIGFsaWduIjogIiIsCisgICAgICAgICAgICAiLSI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIkNlbnRlciI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkhlaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkltYWdlIFVSTCI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkxheW91dCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJwZXJjZW50IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAicGl4ZWxzIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJXaWR0aCI6ICI8PEhvcml6b250YWxSdWxlPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRBbmNob3IiOiB7CisgICAgICAgICAgICAiQW5jaG9yIG5hbWUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQW5jaG9yIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICAgICAiQWJzYm90dG9tIjogIiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiIiwKKyAgICAgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICIiLAorICAgICAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIkhvcml6b250YWw6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICIiLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJTcGFjaW5nIjogIiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICIiLAorICAgICAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbDoiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkxheW91dCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAgICAgIkluc2VydCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBmb290bm90ZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBOb3RlIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQYWdlYnJlYWsiOiB7CisgICAgICAgICAgICAiUGFnZSBicmVhayI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQnJlYWsiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U21pbGV5IjogeworICAgICAgICAgICAgIkluc2VydCBTbWlsZXkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgICAgICJcXG4gIFRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nXFxuIjogIiIsCisgICAgICAgICAgICAiSGlkZSBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICIiLAorICAgICAgICAgICAgIkxpbmsxIjogIiIsCisgICAgICAgICAgICAiTGluazIiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMyI6ICIiLAorICAgICAgICAgICAgIkxpbms0IjogIiIsCisgICAgICAgICAgICAiTGluazUiOiAiIiwKKyAgICAgICAgICAgICJTaG93IHByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZyI6ICIiLAorICAgICAgICAgICAgIlZhcmlhYmxlIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgICAgICJBbGwgQ2F0ZWdvcmllcyI6ICIiLAorICAgICAgICAgICAgIkZpbHRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyBIVE1MIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIHRlbXBsYXRlIHZhcmlhYmxlIjogIiIsCisgICAgICAgICAgICAiT25seSBzZWFyY2ggd29yZCBiZWdpbm5pbmciOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiSFRNTCI6ICI8PENoYXJDb3VudGVyPj4iLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICI8PEluc2VydFNuaXBwZXQ+PiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgICAgICJDYXB0aW9uIjogIiIsCisgICAgICAgICAgICAiQ2FwdGlvbiBmb3IgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICIiLAorICAgICAgICAgICAgIkNlbGwgc3BhY2luZzoiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZSBib3JkZXJzOiI6ICIiLAorICAgICAgICAgICAgIkNvbHM6IjogIiIsCisgICAgICAgICAgICAiRW0iOiAiIiwKKyAgICAgICAgICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiTGF5b3UiOiAiIiwKKyAgICAgICAgICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIk51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICIiLAorICAgICAgICAgICAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIiIsCisgICAgICAgICAgICAiU3R5bGUgb2YgdGhlIGJvcmRlciI6ICIiLAorICAgICAgICAgICAgIldpZHRoIG9mIHRoZSB0YWJsZSI6ICIiLAorICAgICAgICAgICAgIldpZHRoIHVuaXQiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3JkZXIiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkxheW91dCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJQZXJjZW50IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUGl4ZWxzIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSb3dzOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNwYWNpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIldpZHRoOiI6ICI8PEhvcml6b250YWxSdWxlPj4iCisgICAgICAgIH0sCisgICAgICAgICJMYW5nTWFya3MiOiB7CisgICAgICAgICAgICAiJm1kYXNoOyBsYW5ndWFnZSAmbWRhc2g7IjogIiIsCisgICAgICAgICAgICAiJywgJyI6ICIiLAorICAgICAgICAgICAgIkVuZ2xpc2giOiAiIiwKKyAgICAgICAgICAgICJGcmVuY2giOiAiIiwKKyAgICAgICAgICAgICJHcmVlayI6ICIiLAorICAgICAgICAgICAgImxhbmd1YWdlIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIkxhdGluIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxpbmtlciI6IHsKKyAgICAgICAgICAgICIocHgpIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yLUxpbmsiOiAiIiwKKyAgICAgICAgICAgICJBbmNob3I6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgQWRkcmVzczoiOiAiIiwKKyAgICAgICAgICAgICJFbWFpbCBMaW5rIjogIiIsCisgICAgICAgICAgICAiTG9jYXRpb24gQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lbnUgQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lc3NhZ2UgVGVtcGxhdGU6IjogIiIsCisgICAgICAgICAgICAiTmV3IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIk9yZGluYXJ5IExpbmsiOiAiIiwKKyAgICAgICAgICAgICJQb3B1cCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJQb3B1cFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUmVzaXplYWJsZToiOiAiIiwKKyAgICAgICAgICAgICJTYW1lIFdpbmRvdyAoanVtcCBvdXQgb2YgZnJhbWVzKSI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbGJhcnM6IjogIiIsCisgICAgICAgICAgICAiU2hvd3MgT24gSG92ZXIiOiAiIiwKKyAgICAgICAgICAgICJTdGF0dXMgQmFyOiI6ICIiLAorICAgICAgICAgICAgIlN1YmplY3Q6IjogIiIsCisgICAgICAgICAgICAiVGl0bGU6IjogIiIsCisgICAgICAgICAgICAiVG9vbGJhcjoiOiAiIiwKKyAgICAgICAgICAgICJVUkwgTGluayI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICIiLAorICAgICAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTmFtZToiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJTaXplOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlRhcmdldDoiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIlVSTDoiOiAiPDxDcmVhdGVMaW5rPj4iCisgICAgICAgIH0sCisgICAgICAgICJMaXN0VHlwZSI6IHsKKyAgICAgICAgICAgICJDaG9vc2UgbGlzdCBzdHlsZSB0eXBlIChmb3Igb3JkZXJlZCBsaXN0cykiOiAiIiwKKyAgICAgICAgICAgICJEZWNpbWFsIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciBncmVlayBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgbGF0aW4gbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIHJvbWFuIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJVcHBlciBsYXRpbiBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiVXBwZXIgcm9tYW4gbnVtYmVycyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJNb290b29sc0ZpbGVNYW5hZ2VyIjogeworICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk9wZXJhIjogeworICAgICAgICAgICAgIk1BUksiOiAiIiwKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgdGV4dCBpbiBuZXcgcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiUGFzdGUgYXMgUGxhaW4gVGV4dCI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiUHJlc2VydmVTY3JpcHRzIjogeworICAgICAgICAgICAgIkphdmFTY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJQSFAiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUXVpY2tUYWciOiB7CisgICAgICAgICAgICAiJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsJzogJyI6ICIiLAorICAgICAgICAgICAgIkFUVFJJQlVURVMiOiAiIiwKKyAgICAgICAgICAgICJDb2xvcnMiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgVEFHIHlvdSB3YW50IHRvIGluc2VydCI6ICIiLAorICAgICAgICAgICAgIk5vIENTUyBjbGFzcyBhdmFpYWJsZSI6ICIiLAorICAgICAgICAgICAgIk9rIjogIiIsCisgICAgICAgICAgICAiT1BUSU9OUyI6ICIiLAorICAgICAgICAgICAgIlF1aWNrIFRhZyBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJUQUdzIjogIiIsCisgICAgICAgICAgICAiVGhlcmUgYXJlIHNvbWUgdW5jbG9zZWQgcXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIGF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgVEFHIjogIiIsCisgICAgICAgICAgICAiWW91IGhhdmUgdG8gc2VsZWN0IHNvbWUgdGV4dCI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiU2F2ZVN1Ym1pdCI6IHsKKyAgICAgICAgICAgICJpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIlJlYWR5IjogIiIsCisgICAgICAgICAgICAiU2F2ZSI6ICIiLAorICAgICAgICAgICAgIlNhdmluZy4uLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTZXRJZCI6IHsKKyAgICAgICAgICAgICJJRC9OYW1lOiI6ICIiLAorICAgICAgICAgICAgIlNldCBJZCBhbmQgTmFtZSI6ICIiLAorICAgICAgICAgICAgIlNldCBJZC9OYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElEL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiQ2xvc2luZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIkNsb3NpbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIkNvbnZlcnQgYWxsIHF1b3RlcyBhbmQgZGFzaGVzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIGF1dG9tYXRpYyByZXBsYWNlbWVudHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN0eWxpc3QiOiB7CisgICAgICAgICAgICAiU3R5bGVzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBTZWxlY3Rpb24gT25seSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIHVwIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBTY29wZSI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYWwgdGlkeSB1cCBhbmQgY29ycmVjdGlvbiBvZiBzb21lIHByb2JsZW1zLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzZWxlY3QgZnJvbSB0aGUgZm9sbG93aW5nIGNsZWFuaW5nIG9wdGlvbnMuLi4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc3RhbmQgYnkgd2hpbGUgY2xlYW5pbmcgaW4gcHJvY2Vzcy4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGlnbm1lbnQgKGxlZnQvcmlnaHQvanVzdGlmeSkuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBjbGFzc2VzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBBbGwgSFRNTCBUYWdzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBzdHlsZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0eXBlZmFjZXMgKGZvbnQgXCJzdHlsZXNcIikuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGVtcGhhc2lzIGFuZCBhbm5vdGF0aW9ucy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgbGFuZyBhdHRyaWJ1dGVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBQYXJhZ3JhcGhzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cy4iOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzIHdpdGggbm9uLWRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzLiI6ICIiLAorICAgICAgICAgICAgIlZpZ29yb3VzbHkgcHVyZ2UgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAgICAgIkFsbCBmb3VyIHNpZGVzIjogIiIsCisgICAgICAgICAgICAiQm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkNlbGwgUHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIkNlbGwgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIkNlbGwgVHlwZToiOiAiIiwKKyAgICAgICAgICAgICJDZWxscyBkb3duIjogIiIsCisgICAgICAgICAgICAiQ2VsbHMgdG8gdGhlIHJpZ2h0LCBhbmQiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgY2VsbCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgcm93IjogIiIsCisgICAgICAgICAgICAiRG8gTm90IENoYW5nZSI6ICIiLAorICAgICAgICAgICAgIkZyYW1lIGFuZCBib3JkZXJzIjogIiIsCisgICAgICAgICAgICAiRnJhbWVzIjogIiIsCisgICAgICAgICAgICAiSGVhZGVyICh0aCkiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY2VsbCBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY29sdW1uIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCByb3cgYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcm93IGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIGNlbGxzIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY3VycmVudCBjZWxsIHdpdGg6IjogIiIsCisgICAgICAgICAgICAiTm8gcnVsZXMiOiAiIiwKKyAgICAgICAgICAgICJObyBzaWRlcyI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCAodGQpIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNsaWNrIGludG8gc29tZSBjZWxsIjogIiIsCisgICAgICAgICAgICAiUm93IFByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJSb3cgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGNvbHVtbnMgb25seSI6ICIiLAorICAgICAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogIiIsCisgICAgICAgICAgICAiU3BhY2luZyBhbmQgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IHJvdyI6ICIiLAorICAgICAgICAgICAgIlN1bW1hcnkiOiAiIiwKKyAgICAgICAgICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiVGFibGUgUHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlRoZSBib3R0b20gc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIGxlZnQtaGFuZCBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSByaWdodC1oYW5kIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSB0b3AgYW5kIGJvdHRvbSBzaWRlcyBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHRvcCBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjb2x1bW4gaW4gdGFibGUuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3Qgcm93IGluIHRhYmxlLiI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJDYXB0aW9uIjogIjw8SW5zZXJ0VGFibGU+PiIsCisgICAgICAgICAgICAiQ29sdW1ucyI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkRlc2NyaXB0aW9uIjogIjw8RnVsbFBhZ2U+PiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJQYWRkaW5nIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgInBpeGVscyI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJvd3MiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTcGFjaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuc2F2ZWRDaGFuZ2VzIjogeworICAgICAgICAgICAgIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgZWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIldlYktpdCI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiPDxHZWNrbz4+IgorICAgICAgICB9LAorICAgICAgICAiWGluaGEiOiB7CisgICAgICAgICAgICAiJiM4MjEyOyBmb250ICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiJiM4MjEyOyBzaXplICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICIxICg4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjIgKDEwIHB0KSI6ICIiLAorICAgICAgICAgICAgIjMgKDEyIHB0KSI6ICIiLAorICAgICAgICAgICAgIjQgKDE0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjUgKDE4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjYgKDI0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjcgKDM2IHB0KSI6ICIiLAorICAgICAgICAgICAgIkFkZHJlc3MiOiAiIiwKKyAgICAgICAgICAgICJBcmlhbCI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICIiLAorICAgICAgICAgICAgIkNsb3NlIjogIiIsCisgICAgICAgICAgICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICIiLAorICAgICAgICAgICAgIkNvcHkgc2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiQ291cmllciBOZXciOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgU3RhdHVzYmFyIjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFRvb2xiYXIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTAgKHplcm8pIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0xIC4uIENUUkwtNiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtRSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtVSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtViI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWiI6ICIiLAorICAgICAgICAgICAgIkN1dCBzZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIiIsCisgICAgICAgICAgICAiRWRpdG9yIEhlbHAiOiAiIiwKKyAgICAgICAgICAgICJFTlRFUiI6ICIiLAorICAgICAgICAgICAgIkVycm9yIExvYWRpbmcgWGluaGEuICBEZXZlbG9wZXJzLCBjaGVjayB0aGUgRXJyb3IgQ29uc29sZSBmb3IgaW5mb3JtYXRpb24uIjogIiIsCisgICAgICAgICAgICAiRmluaXNoaW5nIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0dGVkIjogIiIsCisgICAgICAgICAgICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIiIsCisgICAgICAgICAgICAiR2VvcmdpYSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMiI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMyI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNCI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNiI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmdzIjogIiIsCisgICAgICAgICAgICAiSW1wYWN0IjogIiIsCisgICAgICAgICAgICAiSW5pdCBlZGl0b3Igc2l6ZSI6ICIiLAorICAgICAgICAgICAgImluc2VydCBsaW5lYnJlYWsiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvT3ZlcndyaXRlIjogIiIsCisgICAgICAgICAgICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBDb3JlIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW4gJHBsdWdpbiI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgcGx1Z2lucyI6ICIiLAorICAgICAgICAgICAgIk1TIFdvcmQgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIm5ldyBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJOb3JtYWwiOiAiIiwKKyAgICAgICAgICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICIiLAorICAgICAgICAgICAgIlBhdGgiOiAiIiwKKyAgICAgICAgICAgICJQcmludCBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIiIsCisgICAgICAgICAgICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICIiLAorICAgICAgICAgICAgIlNhdmUgYXMiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgYWxsIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IENvbG9yIjogIiIsCisgICAgICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJTSElGVC1FTlRFUiI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IEJsb2NrIjogIiIsCisgICAgICAgICAgICAiVGFob21hIjogIiIsCisgICAgICAgICAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogIiIsCisgICAgICAgICAgICAiVGltZXMgTmV3IFJvbWFuIjogIiIsCisgICAgICAgICAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJUb3VjaCBoZXJlIGZpcnN0IHRvIGFjdGl2YXRlIGVkaXRvci4iOiAiIiwKKyAgICAgICAgICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICIiLAorICAgICAgICAgICAgIlZlcmRhbmEiOiAiIiwKKyAgICAgICAgICAgICJXYWl0aW5nIGZvciBJZnJhbWUgdG8gbG9hZC4uLiI6ICIiLAorICAgICAgICAgICAgIldpbmdEaW5ncyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIjogIiIsCisgICAgICAgICAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJSZW1vdmUgQ3VycmVudCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IEJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJTZXQgcGFnZSBiYWNrZ3JvdW5kIGltYWdlIjogIiIsCisgICAgICAgICAgICAiU2V0IFBhZ2UgQmFja2dyb3VuZCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiQ2xpZW50c2lkZVNwZWxsY2hlY2siOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVjayB1c2luZyBpZVNwZWxsIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEwJSI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiIiwKKyAgICAgICAgICAgICIyMDAlIjogIiIsCisgICAgICAgICAgICAiMjUlIjogIiIsCisgICAgICAgICAgICAiNTAlIjogIiIsCisgICAgICAgICAgICAiNzUlIjogIiIsCisgICAgICAgICAgICAiPkxpc3QgVmlldyI6ICIiLAorICAgICAgICAgICAgIj5UaHVtYm5haWwgVmlldyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIiIsCisgICAgICAgICAgICAiQWxpZ24iOiAiIiwKKyAgICAgICAgICAgICJBbHQiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJDcm9wIjogIiIsCisgICAgICAgICAgICAiRDoiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiIiwKKyAgICAgICAgICAgICJFZGl0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIiIsCisgICAgICAgICAgICAiRmlsZW5hbWU6IjogIiIsCisgICAgICAgICAgICAiRmlsZXNpemU6IjogIiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkZsaXAgVmVydGljYWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJHSUYiOiAiIiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiIiwKKyAgICAgICAgICAgICJIOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIiIsCisgICAgICAgICAgICAiSlBFRyBIaWdoIjogIiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiIiwKKyAgICAgICAgICAgICJKUEVHIE1lZGl1bSI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmciOiAiIiwKKyAgICAgICAgICAgICJMb2NrIjogIiIsCisgICAgICAgICAgICAiTWFya2VyIjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBmb2xkZXIgc2l6ZSBsaW1pdCByZWFjaGVkLiBVcGxvYWQgZGlzYWJsZWQuIjogIiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICIiLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJObyBGaWxlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB2YWx1ZSI6ICIiLAorICAgICAgICAgICAgIlBORyI6ICIiLAorICAgICAgICAgICAgIlByZXNldCI6ICIiLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIiIsCisgICAgICAgICAgICAiUmVmcmVzaCI6ICIiLAorICAgICAgICAgICAgIlJlbmFtZSI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIEltYWdlIjogIiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiIiwKKyAgICAgICAgICAgICJTdGFydCBZOiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgbWFya2VyIGNvbG9yIjogIiIsCisgICAgICAgICAgICAiVHJhc2giOiAiIiwKKyAgICAgICAgICAgICJVcGxvYWQiOiAiIiwKKyAgICAgICAgICAgICJXOiI6ICIiLAorICAgICAgICAgICAgIlg6IjogIiIsCisgICAgICAgICAgICAiWGluaGEgSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiWToiOiAiIiwKKyAgICAgICAgICAgICJab29tIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiQ2xlYXIiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJDb2xvciI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkNvcHkiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJDdXQiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICI8PE1vb3Rvb2xzRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1hcmdpbiI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRpdGxlICh0b29sdGlwKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIldpZHRoIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJGaWx0ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsdGVyIjogIjw8SW5zZXJ0U25pcHBldDI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkh0bWxUaWR5IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQXV0by1UaWR5IjogIiIsCisgICAgICAgICAgICAiRG9uJ3QgVGlkeSI6ICIiLAorICAgICAgICAgICAgIkhUTUwgVGlkeSI6ICIiLAorICAgICAgICAgICAgIlRpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQW5nbGU6IjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlcyI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgVXNlcm5hbWUvRW1haWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIgTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFBob3RvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFZpZGVvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgU2VydmVyIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFVzZXJuYW1lIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlbyBMaXN0IjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlb3MiOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJDbGVhciI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQ3JvcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJFZGl0IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiR0lGIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIEhpZ2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgTG93IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIE1lZGl1bSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxvY2siOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1hcmtlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIlBORyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZXNpemUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUm90YXRlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlN0YXJ0IFk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlRyYXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJXOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJCZWhhdmlvcjoiOiAiIiwKKyAgICAgICAgICAgICJDb250aW51b3VzIjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uOiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBzY3JvbGxpbmcgbWFycXVlZSI6ICIiLAorICAgICAgICAgICAgIk1hcnF1ZWUgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIEFtb3VudDoiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgRGVsYXk6IjogIiIsCisgICAgICAgICAgICAiU2xpZGUiOiAiIiwKKyAgICAgICAgICAgICJTcGVlZCBDb250cm9sIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTmFtZSI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIk5hbWUvSUQ6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJUZXh0OiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIldpZHRoOiI6ICI8PEhvcml6b250YWxSdWxlPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm90IGRlZmluZWQiOiAiIiwKKyAgICAgICAgICAgICIgT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlVwbG9hZCBmaWxlIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkxheW91dCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiU2l6ZSI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNwYWNpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJWZXJ0aWNhbDoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiTm90ZVNlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTIwJSI6ICIiLAorICAgICAgICAgICAgIjE1MCUiOiAiIiwKKyAgICAgICAgICAgICI4MCUiOiAiIiwKKyAgICAgICAgICAgICJBZGQgR1VJRE8gQ29kZSBpbiBhIHRleHRib3ggb24gdGhlIHBhZ2UiOiAiIiwKKyAgICAgICAgICAgICJBZGQgTUlESSBsaW5rIHRvIGFsbG93IHN0dWRlbnRzIHRvIGhlYXIgdGhlIG11c2ljIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiR1VJRE8gQ29kZSI6ICIiLAorICAgICAgICAgICAgIkd1aWRvIGNvZGUiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBpbiBhcHBsZXQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgR1VJRE8gTXVzaWMgTm90YXRpb24iOiAiIiwKKyAgICAgICAgICAgICJNSURJIEZpbGUiOiAiIiwKKyAgICAgICAgICAgICJTb3VyY2UgQ29kZSI6ICIiLAorICAgICAgICAgICAgIldpdGggTW96aWxsYSwgdGhlIGFwcGxldCB3aWxsIG5vdCBiZSB2aXNpYmxlIGluIGVkaXRvciwgYnV0IG9ubHkgaW4gV2ViIHBhZ2UgYWZ0ZXIgc3VibWl0dGluZy4iOiAiIiwKKyAgICAgICAgICAgICJab29tIDoiOiAiIiwKKyAgICAgICAgICAgICIxMDAlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiWm9vbSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgR2VhcnMgaW4gb3JkZXIgdG8gdXNlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UgYW5kIGNvbmZpZ3VyYXRpb24uIjogIiIsCisgICAgICAgICAgICAiRW5hYmxpbmcgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIkluc3RhbGwiOiAiIiwKKyAgICAgICAgICAgICJMZWFybiBBYm91dCBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIHJlbG9hZCB0aGUgcGFnZSwgY2F1c2luZyB5b3UgdG8gbG9zZSBhbnkgdW5zYXZlZCB3b3JrLiAgUHJlc3MgXCJPS1wiIHRvIHJlbG9hZC4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSB1c2VzIEdvb2dsZSBHZWFycyB0byBlbmFibGUgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZS4gIFdpdGggR2VhcnMgaW5zdGFsbGVkLCB5b3UgY2FuIHNhdmUgZHJhZnRzIG9mIHlvdXIgZG9jdW1lbnRzIG9uIHlvdXIgaGFyZCBkcml2ZSwgY29uZmlndXJlIFhpbmhhIHRvIGxvb2sgdGhlIHdheSB5b3Ugd2FudCwgYW5kIGNhcnJ5IHRoaXMgaW5mb3JtYXRpb24gd2hlcmV2ZXIgeW91IHVzZSBYaW5oYSBvbiB0aGUgd2ViLiI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiUFNTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU1NFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWxlOiAiOiAiIiwKKyAgICAgICAgICAgICJJbXBvcnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEZXRhaWxzIjogIiIsCisgICAgICAgICAgICAiRmlsZSBCcm93c2VyIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gICAgVGhlcmUgQyAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgVGhlcmUgQSAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyBcIiBUaGVyZSBCIFwiIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gJyBUaGVyZSBEICciOiAiIiwKKyAgICAgICAgICAgICJMaXN0IG9mIFBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIk5ldyBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIk9wZW4iOiAiIiwKKyAgICAgICAgICAgICJPcGVuIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgeW91J2QgbGlrZSB0byBjcmVhdGUuIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBlcmFzZSBhbnkgdW5zYXZlZCBjb250ZW50LiAgSWYgeW91J3JlIGNlcnRhaW4sIHBsZWFzZSBjbGljayBPSyB0byBjb250aW51ZS4iOiAiIiwKKyAgICAgICAgICAgICJXZWIgVVJMIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiPDxQU0xvY2FsPj4iLAorICAgICAgICAgICAgIkNvcHkiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTWFuYWdlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZW5hbWUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCI6ICI8PEluc2VydE5vdGU+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBTUEVMTENIRUNLRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGljdGlvbmFyeSI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGVkIGxpc3Qgb2YgbWlzcGVsbGVkIHdvcmRzIjogIiIsCisgICAgICAgICAgICAiSFRNTEFyZWEgU3BlbGwgQ2hlY2tlciI6ICIiLAorICAgICAgICAgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIGFsbCI6ICIiLAorICAgICAgICAgICAgIkluZm8iOiAiIiwKKyAgICAgICAgICAgICJMZWFybiI6ICIiLAorICAgICAgICAgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICIiLAorICAgICAgICAgICAgIk9yaWdpbmFsIHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQuICBDYWxsaW5nIHNwZWxsIGNoZWNrZXIuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAiIiwKKyAgICAgICAgICAgICJwbGl6IHdlaXQgOy0pIjogIiIsCisgICAgICAgICAgICAiUmUtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSBhbGwiOiAiIiwKKyAgICAgICAgICAgICJSZXZlcnQiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiU3BlbGwtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJTdWdnZXN0aW9ucyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBkcm9wIGNoYW5nZXMgYW5kIHF1aXQgc3BlbGwgY2hlY2tlci4gIFBsZWFzZSBjb25maXJtLiI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJSZXBsYWNlIHdpdGgiOiAiPDxGaW5kUmVwbGFjZT4+IgorICAgICAgICB9LAorICAgICAgICAiVGVtcGxhdGUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBURU1QTEFURSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJJbnNlcnQgdGVtcGxhdGUiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuRm9ybWF0IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWxsIjogIiIsCisgICAgICAgICAgICAiQWxsIEhUTUw6IjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgQXJlYSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIG9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0aW5nOiI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCB3aGljaCB0eXBlcyBvZiBmb3JtYXR0aW5nIHlvdSB3b3VsZCBsaWtlIHRvIHJlbW92ZS4iOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9jaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MWU5YjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9jaC5qcwpAQCAtMCwwICsxLDE1NzUgQEAKKy8vIFhpbmhhIExhbmd1YWdlIENvbWJpbmVkIFRyYW5zbGF0aW9uIEZpbGUKKy8vCisvLyBMQU5HOiAiY2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTlNUUlVDVElPTlMgVE8gVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFlvdXIgdHJhbnNsYXRpb24gbXVzdCBiZSBpbiBVVEYtOCBDaGFyYWN0ZXIgRW5jb2RpbmcuCisvLworLy8gVGhpcyBpcyBhIEpTT04gZW5jb2RlZCBmaWxlIChwbHVzIGNvbW1lbnRzKSwgc3RyaW5ncyBzaG91bGQgYmUgZG91YmxlLXF1b3RlCisvLyBvbmx5LCBkbyBub3QgdXNlIHNpbmdsZSBxdW90ZXMgdG8gc3Vycm91bmQgc3RyaW5ncyAtICJoZWxsbyIsIG5vdCAnaGVsbG8nCisvLyBkbyBub3QgaGF2ZSBhIHRyYWlsaW5nIGNvbW1hIGFmdGVyIHRoZSBsYXN0IGVudHJ5IGluIGEgc2VjdGlvbi4KKy8vCisvLyBPbmx5IGZ1bGwgbGluZSBjb21tZW50cyBhcmUgYWxsb3dlZCAodGhhdCBhIGNvbW1lbnRzIG9jY3VweSBlbnRpcmUgbGluZXMpLgorLy8KKy8vIFNlYXJjaCBmb3IgdGhlIF9fTkVXX1RSQU5TTEFUSU9OU19fIHNlY3Rpb24gYmVsb3csIHRoaXMgaXMgd2hlcmUgeW91IHdpbGwKKy8vIHdhbnQgdG8gZm9jdXMsIHRoaXMgc2VjdGlvbiBpbmNsdWRlcyB0aGluZ3MgdGhhdCBkbyBub3QgcHJlc2VudGx5IGhhdmUgYSAKKy8vIHRyYW5zbGF0aW9uIG9yIGZvciB3aGljaCB0aGUgdHJhbnNsYXRpb24gbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgYWNjdXJhY3kuCisvLworLy8gSW4gdGhlIE5ldyBUcmFuc2xhdGlvbnMgc2VjdGlvbiBhIHRyYW5zbGF0aW9uIHN0cmluZyBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZworLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiIgorLy8gICAgIFRoaXMgbWVhbnMgaXQgaXMgbm90IHRyYW5zbGF0ZWQgeWV0LCBhZGQgeW91ciB0cmFuc2xhdGlvbi4uLgorLy8gICAgICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJLbGluZ29uIFN0cmluZyBIZXJlIgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiVHJhbnNsYXRlZCBTdHJpbmcgSGVyZSIKKy8vICAgICBUaGlzIG1lYW5zIHRoYXQgYW4gZXhpc3RpbmcgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nLCBpbiBzb21lIG90aGVyCisvLyAgICAgc2VjdGlvbiBoYXMgYmVlbiBmb3VuZCwgYW5kIHVzZWQuICBDaGVjayB0aGF0IGl0IGlzIGFwcHJvcHJpdGUgZm9yIHRoaXMKKy8vICAgICBzZWN0aW9uIGFuZCBpZiBpdCBpcywgdGhhdCdzIGZpbmUgbGVhdmUgaXQgYXMgaXMsIG90aGVyd2lzZSBjaGFuZ2UgYXMKKy8vICAgICBhcHByb3ByaWF0ZS4KKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIjw8QW5vdGhlclNlY3Rpb24+PiIKKy8vICAgICBUaGlzIG1lYW5zIHVzZSB0aGUgc2FtZSB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcgYXMgPDxBbm90aGVyU2VjdGlvbj4+CisvLyAgICAgdGhpcyBzYXZlcyB5b3UgcmUtdHJhbmxhdGluZyBzdHJpbmdzLiAgSWYgdGhlIENvbnRleHQgb2YgdGhpcyBzZWN0aW9uCisvLyAgICAgYW5kIHRoZSBjb250ZXh0IG9mIEFub3RoZXJTZWN0aW9uIHNlZW0gdGhlIHNhbWUsIHRoYXQncyBmaW5lIGxlYXZlIGl0CisvLyAgICAgdXNpbmcgdGhhdCB0cmFuc2xhdGlvbiwgYnV0IGlmIHRoaXMgc2VjdGlvbiBuZWVkcyBhIGRpZmZlcmVudCB0cmFuc2xhdGlvbiwgCisvLyAgICAgeW91IGNhbiBwcm92aWRlIGl0IGJ5IHJlcGxhY2luZyB0aGUgbGluayAoPDxBbm90aGVyU2VjdGlvbj4+KSB3aXRoIHRoYXQKKy8vICAgICBuZXcgdHJhbnNsYXRpb24uICBGb3IgZXhhbXBsZSAtIGEgIlRhYmxlIiBpbiBzYXkgIkRhdGFQbHVnaW4iIGlzIAorLy8gICAgIHBlcmhhcHMgdHJhbnNsYXRlZCBkaWZmZXJlbnRseSB0byAiVGFibGUiIGluICJGdXJuaXR1cmVQbHVnaW4iLgorLy8KKy8vIFRFU1RJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgcGxhY2UgeW91ciB0cmFuc2xhdGlvbiBmaWxlIG9uIHlvdXIgd2Vic2VydmVyIHNvbWV3aGVyZSBmb3IgZXhhbXBsZQorLy8KKy8vICAgL3hpbmhhL2xhbmcvbWVyZ2VkL2NoLmpzCisvLworLy8gYW5kIHRoZW4gdGVsbCBYaW5oYSB3aGVyZSB0byBnZXQgaXQgKGJlZm9yZSBsb2FkaW5nIFhpbmhhQ29yZS5qcykgYnkgCisvLworLy8gIF9lZGl0b3JfbGFuZyAgICAgICAgICAgICAgPSAnY2gnOworLy8gIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSAgPSAnL3hpbmhhL2xhbmcvbWVyZ2VkL2NoLmpzJzsKKy8vCisvLyBYaW5oYSB3aWxsIGxvYWQgeW91ciBuZXcgbGFuZ3VhZ2UgZGVmaW5pdGlvbi4KKy8vCisvLyBTVUJNSVRUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IGNyZWF0ZSBhIFRpY2tldCBvbiB0aGUgWGluaGEgd2Vic2l0ZSBhbmQgYXR0YWNoIHlvdXIgdHJhbnNsYXRpb24gCisvLyBmaWxlLgorLy8KKy8vIFRoZSBYaW5oYSBkZXZlbG9wZXJzIHdpbGwgdGFrZSB5b3VyIGZpbGUgYW5kIHVzZSB0aGUgCisvLyAgICAgY29udHJpYi9sY19zcGxpdF9tZXJnZWRfZmlsZS5waHAKKy8vIHNjcmlwdCB0byBsb2FkIGl0IGludG8gdGhlIFhpbmhhIGRpc3RyaWJ1dGlvbi4KKworeworICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAi5Y+W5raIIiwKKyAgICAgICAgIk9LIjogIuWlvSIKKyAgICB9LAorICAgICJBYm91dEJveCI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIumXnOaWvCBYaW5oYSIKKyAgICB9LAorICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAi5Y+W5raIIgorICAgIH0sCisgICAgIkNvbG9yUGlja2VyIjogeworICAgICAgICAiT0siOiAi5aW9IgorICAgIH0sCisgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAi5bGF5LitIiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICLmlbTpvYoiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIumdoOW3piIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIumdoOWPsyIKKyAgICB9LAorICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAi5o+S5YWlL+aUueWvq+mAo+e1kCIsCisgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIuaWsOeql+aItyhfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi54ShKHVzZSBpbXBsaWNpdCkiLAorICAgICAgICAiT0siOiAi5aW9IiwKKyAgICAgICAgIk90aGVyIjogIuWFtuS7liIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAi5pys5YyhIChfc2VsZikiLAorICAgICAgICAiVGFyZ2V0OiI6ICLnm67mqJnljKE6IiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAi5Li76aGMICh0b29sdGlwKToiLAorICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICLkuIrljKEgKF90b3ApIiwKKyAgICAgICAgIlVSTDoiOiAi57ay5Z2AOiIKKyAgICB9LAorICAgICJFZGl0VGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgICAgICJPSyI6ICLlpb0iCisgICAgfSwKKyAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAi5Y+W5raIIiwKKyAgICAgICAgIk9LIjogIuWlvSIKKyAgICB9LAorICAgICJFeHRlbmRlZEZpbGVNYW5hZ2VyIjogeworICAgICAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIuaWsOeql+aItyhfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi54ShKHVzZSBpbXBsaWNpdCkiLAorICAgICAgICAiT0siOiAi5aW9IiwKKyAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICLmnKzljKEgKF9zZWxmKSIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCkiOiAi5Li76aGMICh0b29sdGlwKToiLAorICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICLkuIrljKEgKF90b3ApIgorICAgIH0sCisgICAgIkZvcm1zIjogeworICAgICAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgICAgICJPSyI6ICLlpb0iCisgICAgfSwKKyAgICAiRnVsbFBhZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAi5Y+W5raIIiwKKyAgICAgICAgIk9LIjogIuWlvSIKKyAgICB9LAorICAgICJIb3Jpem9udGFsUnVsZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLlj5bmtogiLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIuawtOW5s+e3miIsCisgICAgICAgICJPSyI6ICLlpb0iCisgICAgfSwKKyAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgICAgICJPSyI6ICLlpb0iCisgICAgfSwKKyAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgICAgICJPSyI6ICLlpb0iCisgICAgfSwKKyAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAi5Y+W5raIIiwKKyAgICAgICAgIk9LIjogIuWlvSIKKyAgICB9LAorICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgICAgICJPSyI6ICLlpb0iCisgICAgfSwKKyAgICAiSW5zZXJ0Tm90ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLlj5bmtogiCisgICAgfSwKKyAgICAiSW5zZXJ0UGljdHVyZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLlj5bmtogiLAorICAgICAgICAiT0siOiAi5aW9IgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAi5Y+W5raIIgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAiQ2FuY2VsIjogIuWPlua2iCIKKyAgICB9LAorICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLlj5bmtogiLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIuaPkuWFpeihqOagvCIsCisgICAgICAgICJPSyI6ICLlpb0iCisgICAgfSwKKyAgICAiTGlua2VyIjogeworICAgICAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAi5o+S5YWlL+aUueWvq+mAo+e1kCIsCisgICAgICAgICJPSyI6ICLlpb0iLAorICAgICAgICAiVGFyZ2V0OiI6ICLnm67mqJnljKE6IiwKKyAgICAgICAgIlVSTDoiOiAi57ay5Z2AOiIKKyAgICB9LAorICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgICAgICJPSyI6ICLlpb0iCisgICAgfSwKKyAgICAiT3BlcmEiOiB7CisgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iCisgICAgfSwKKyAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLlj5bmtogiCisgICAgfSwKKyAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgICAgICJPSyI6ICLlpb0iCisgICAgfSwKKyAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAi5Y+W5raIIgorICAgIH0sCisgICAgIlF1aWNrVGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIuWPlua2iCIKKyAgICB9LAorICAgICJTZXRJZCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLlj5bmtogiLAorICAgICAgICAiT0siOiAi5aW9IgorICAgIH0sCisgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgIk9LIjogIuWlvSIKKyAgICB9LAorICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAi5Y+W5raIIiwKKyAgICAgICAgIk9LIjogIuWlvSIKKyAgICB9LAorICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgICAgICJPSyI6ICLlpb0iCisgICAgfSwKKyAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgICAgICJPSyI6ICLlpb0iCisgICAgfSwKKyAgICAiVGVtcGxhdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAi5Y+W5raIIgorICAgIH0sCisgICAgIlVuRm9ybWF0IjogeworICAgICAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgICAgICJPSyI6ICLlpb0iCisgICAgfSwKKyAgICAiWGluaGEiOiB7CisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICLpl5zmlrwgWGluaGEiLAorICAgICAgICAiQmFja2dyb3VuZCBDb2xvciI6ICLog4zmma/poY/oibIiLAorICAgICAgICAiQm9sZCI6ICLnspfpq5QiLAorICAgICAgICAiQnVsbGV0ZWQgTGlzdCI6ICLnhKHluo/muIXllq4iLAorICAgICAgICAiQ29weSBzZWxlY3Rpb24iOiAi5aSN5Yi26YCJ6aG5IiwKKyAgICAgICAgIkN1cnJlbnQgc3R5bGUiOiAi5a2X6auU5L6L5a2QIiwKKyAgICAgICAgIkN1dCBzZWxlY3Rpb24iOiAi5Ymq5Yi26YCJ6aG5IiwKKyAgICAgICAgIkRlY3JlYXNlIEluZGVudCI6ICLkvLjmjpIiLAorICAgICAgICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAi5LuO5bem5Yiw5Y+zIiwKKyAgICAgICAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIuS7juWPs+WIsOW3piIsCisgICAgICAgICJGb250IENvbG9yIjogIuaWh+Wtl+mhj+iJsiIsCisgICAgICAgICJIZWxwIHVzaW5nIGVkaXRvciI6ICLoqqrmmI4iLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIuawtOW5s+e3miIsCisgICAgICAgICJJbmNyZWFzZSBJbmRlbnQiOiAi57iu5o6SIiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICLmj5LlhaXooajmoLwiLAorICAgICAgICAiSW5zZXJ0IFdlYiBMaW5rIjogIuaPkuWFpemAo+e1kCIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIuaPkuWFpeWcluWDjyIsCisgICAgICAgICJJdGFsaWMiOiAi5pac6auUIiwKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogIuWxheS4rSIsCisgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAi5pW06b2KIiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICLpnaDlt6YiLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICLpnaDlj7MiLAorICAgICAgICAiT3JkZXJlZCBMaXN0IjogIumghuW6j+a4heWWriIsCisgICAgICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICLotLTkuIoiLAorICAgICAgICAiUGF0aCI6ICLpgJTlvpEiLAorICAgICAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi6YeN5p2lIiwKKyAgICAgICAgIlN0cmlrZXRocm91Z2giOiAi5Yiq57eaIiwKKyAgICAgICAgIlN1YnNjcmlwdCI6ICLkuIvmqJkiLAorICAgICAgICAiU3VwZXJzY3JpcHQiOiAi5LiK5qiZIiwKKyAgICAgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICLliIfmj5tIVE1M5Y6f5aeL56K8IiwKKyAgICAgICAgIlVuZGVybGluZSI6ICLlupXnt5oiLAorICAgICAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi5Zue5Y6fIiwKKyAgICAgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICLkvaDlnKjnlKjntJTlrZfnt6jovK/mlrnlvI8uICDnlKggWzw+XSDmjInpiJXovYnlm54g5omA6KaL5Y2z5omA5b6XIOe3qOi8r+aWueW8jy4iCisgICAgfSwKKyAgICAiX19ORVdfVFJBTlNMQVRJT05TX18iOiB7CisgICAgICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICAgICAiQWJicmV2aWF0aW9uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIiIsCisgICAgICAgICAgICAiRXhwYW5zaW9uOiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJBYm91dEJveCI6IHsKKyAgICAgICAgICAgICJDbG9zZSI6ICI8PFhpbmhhPj4iCisgICAgICAgIH0sCisgICAgICAgICJDaGFyQ291bnRlciI6IHsKKyAgICAgICAgICAgICIuLi4gaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAgICAgICAgICJDaGFycyI6ICIiLAorICAgICAgICAgICAgIkhUTUwiOiAiIiwKKyAgICAgICAgICAgICJXb3JkcyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDaGFyYWN0ZXJNYXAiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IHNwZWNpYWwgY2hhcmFjdGVyIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbG9yUGlja2VyIjogeworICAgICAgICAgICAgIkNsaWNrIGEgY29sb3IuLi4iOiAiIiwKKyAgICAgICAgICAgICJDb2xvcjogIjogIiIsCisgICAgICAgICAgICAiU2FtcGxlIjogIiIsCisgICAgICAgICAgICAiV2ViIFNhZmU6ICI6ICIiLAorICAgICAgICAgICAgIkNsb3NlIjogIjw8WGluaGE+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAgICAgIl9EZWxldGUgUm93IjogIiIsCisgICAgICAgICAgICAiX0ltYWdlIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJfTW9kaWZ5IExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJfUmVtb3ZlIExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJfVGFibGUgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIkNfZWxsIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJDaGVjX2sgTGluay4uLiI6ICIiLAorICAgICAgICAgICAgIkNvcHkiOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgYSBsaW5rIjogIiIsCisgICAgICAgICAgICAiQ3VycmVudCBVUkwgaXMiOiAiIiwKKyAgICAgICAgICAgICJDdXQiOiAiIiwKKyAgICAgICAgICAgICJEZV9sZXRlIENvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBDZWxsIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCByb3ciOiAiIiwKKyAgICAgICAgICAgICJIb3cgZGlkIHlvdSBnZXQgaGVyZT8gKFBsZWFzZSByZXBvcnQhKSI6ICIiLAorICAgICAgICAgICAgIklfbnNlcnQgUm93IEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluX3NlcnQgUm93IEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IF9Db2x1bW4gQmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBhZnRlciB0aGUgY3VycmVudCBub2RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGJlZm9yZSB0aGUgY3VycmVudCBub2RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENfb2x1bW4gQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDZWxsIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkxpbmsgcG9pbnRzIHRvOiI6ICIiLAorICAgICAgICAgICAgIk1ha2UgbGluX2suLi4iOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICIiLAorICAgICAgICAgICAgIk9wZW5zIHRoaXMgbGluayBpbiBhIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJQYXN0ZSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgZWxlbWVudDoiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHVubGluayB0aGlzIGVsZW1lbnQuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHRoZSAkZWxlbSBFbGVtZW50Li4uIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHRoaXMgbm9kZSBmcm9tIHRoZSBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlJvX3cgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIGltYWdlIHByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgVGFibGUgQ2VsbCBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgVGFibGUgUm93IFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiVW5saW5rIHRoZSBjdXJyZW50IGVsZW1lbnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ3JlYXRlTGluayI6IHsKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiIiwKKyAgICAgICAgICAgICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGluZyBhIGxpbmsiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRGVmaW5pdGlvbkxpc3QiOiB7CisgICAgICAgICAgICAiZGVmaW5pdGlvbiBkZXNjcmlwdGlvbiI6ICIiLAorICAgICAgICAgICAgImRlZmluaXRpb24gbGlzdCI6ICIiLAorICAgICAgICAgICAgImRlZmluaXRpb24gdGVybSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEaWFsb2dzIjogeworICAgICAgICAgICAgIlNvbWUgVGV4dCBIZXJlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkR5bmFtaWNDU1MiOiB7CisgICAgICAgICAgICAiQ2hvb3NlIHN0eWxlc2hlZXQiOiAiIiwKKyAgICAgICAgICAgICJEZWZhdWx0IjogIiIsCisgICAgICAgICAgICAiVW5kZWZpbmVkIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVkaXRUYWciOiB7CisgICAgICAgICAgICAiRWRpdCBIVE1MIGZvciBzZWxlY3RlZCB0ZXh0IjogIiIsCisgICAgICAgICAgICAiRWRpdCBUYWcgQnkgUGVnIjogIiIsCisgICAgICAgICAgICAiVGFnIEVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgICAgICIhPSI6ICIiLAorICAgICAgICAgICAgIiFpbiI6ICIiLAorICAgICAgICAgICAgIiZndDstIjogIiIsCisgICAgICAgICAgICAiJmd0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZsdDt4Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgIWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAuYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDBgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAzYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDRgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA2YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDdgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA5YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYGVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyZuYnNwO2AxYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgK3s6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC06XFwgYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Atezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgQ2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgY29zYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BsbmAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgcGlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BzaW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRhbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGltZXNgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJnF1b3Q7dGV4dCZxdW90OyI6ICIiLAorICAgICAgICAgICAgIicrZm9ybXVsYSsnIjogIiIsCisgICAgICAgICAgICAiKChuKSwoaykpIjogIiIsCisgICAgICAgICAgICAiKHgrMSkvKHgtMSkiOiAiIiwKKyAgICAgICAgICAgICIqIjogIiIsCisgICAgICAgICAgICAiKioiOiAiIiwKKyAgICAgICAgICAgICIrLSI6ICIiLAorICAgICAgICAgICAgIi0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiLSZsdDsiOiAiIiwKKyAgICAgICAgICAgICItOiI6ICIiLAorICAgICAgICAgICAgIi09IjogIiIsCisgICAgICAgICAgICAiLy8iOiAiIiwKKyAgICAgICAgICAgICIvXyI6ICIiLAorICAgICAgICAgICAgIjouIjogIiIsCisgICAgICAgICAgICAiPSZndDsiOiAiIiwKKyAgICAgICAgICAgICJAIjogIiIsCisgICAgICAgICAgICAiW1thLGJdLFtjLGRdXSI6ICIiLAorICAgICAgICAgICAgIlxcXFwiOiAiIiwKKyAgICAgICAgICAgICJcXG5DbGljayBpbiB0aGUgYm94IHRvIHVzZSB5b3VyIGtleWJvYXJkIG9yIHVzZSB0aGUgYnV0dG9uc1xcbiI6ICIiLAorICAgICAgICAgICAgIl5eIjogIiIsCisgICAgICAgICAgICAiXl5eIjogIiIsCisgICAgICAgICAgICAiX198IjogIiIsCisgICAgICAgICAgICAiX3xfIjogIiIsCisgICAgICAgICAgICAiYCE9YCI6ICIiLAorICAgICAgICAgICAgImAhaW5gIjogIiIsCisgICAgICAgICAgICAiYCZhbmQ7YCI6ICIiLAorICAgICAgICAgICAgImAmY2FwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmN1cDtgIjogIiIsCisgICAgICAgICAgICAiYCZndDstYCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0O3gmZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmb3I7YCI6ICIiLAorICAgICAgICAgICAgImAmcXVvdDt0ZXh0JnF1b3Q7YCI6ICIiLAorICAgICAgICAgICAgImAoKG4pLChrKSlgIjogIiIsCisgICAgICAgICAgICAiYCh4KzEpLyh4LTEpYCI6ICIiLAorICAgICAgICAgICAgImAqKmAiOiAiIiwKKyAgICAgICAgICAgICJgKmAiOiAiIiwKKyAgICAgICAgICAgICJgKy1gIjogIiIsCisgICAgICAgICAgICAiYC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAtJmx0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLTpgIjogIiIsCisgICAgICAgICAgICAiYC09YCI6ICIiLAorICAgICAgICAgICAgImAvL2AiOiAiIiwKKyAgICAgICAgICAgICJgL19gIjogIiIsCisgICAgICAgICAgICAiYDouYCI6ICIiLAorICAgICAgICAgICAgImA9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgQGAiOiAiIiwKKyAgICAgICAgICAgICJgW1thLGJdLFtjLGRdXWAiOiAiIiwKKyAgICAgICAgICAgICJgXFxcXGAiOiAiIiwKKyAgICAgICAgICAgICJgX198YCI6ICIiLAorICAgICAgICAgICAgImBffF9gIjogIiIsCisgICAgICAgICAgICAiYEFBYCI6ICIiLAorICAgICAgICAgICAgImBhbGVwaGAiOiAiIiwKKyAgICAgICAgICAgICJgYWxwaGFgIjogIiIsCisgICAgICAgICAgICAiYGFuZGAiOiAiIiwKKyAgICAgICAgICAgICJgYmFyYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiZXRhYCI6ICIiLAorICAgICAgICAgICAgImBDQ2AiOiAiIiwKKyAgICAgICAgICAgICJgY2NhYCI6ICIiLAorICAgICAgICAgICAgImBjaGlgIjogIiIsCisgICAgICAgICAgICAiYGRhcnJgIjogIiIsCisgICAgICAgICAgICAiYGRkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkZWxgIjogIiIsCisgICAgICAgICAgICAiYERlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGlhbW9uZGAiOiAiIiwKKyAgICAgICAgICAgICJgZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZHkvZHhgIjogIiIsCisgICAgICAgICAgICAiYEVFYCI6ICIiLAorICAgICAgICAgICAgImBlcHNpYCI6ICIiLAorICAgICAgICAgICAgImBldGFgIjogIiIsCisgICAgICAgICAgICAiYGZyYWAiOiAiIiwKKyAgICAgICAgICAgICJgR2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBncmFkYCI6ICIiLAorICAgICAgICAgICAgImBoYXJyYCI6ICIiLAorICAgICAgICAgICAgImBoQXJyYCI6ICIiLAorICAgICAgICAgICAgImBoYXRhYCI6ICIiLAorICAgICAgICAgICAgImBpZmAiOiAiIiwKKyAgICAgICAgICAgICJgaW5gIjogIiIsCisgICAgICAgICAgICAiYGludGAiOiAiIiwKKyAgICAgICAgICAgICJgaW90YWAiOiAiIiwKKyAgICAgICAgICAgICJga2FwcGFgIjogIiIsCisgICAgICAgICAgICAiYExhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBsQXJyYCI6ICIiLAorICAgICAgICAgICAgImBsYXJyYCI6ICIiLAorICAgICAgICAgICAgImBsaW1fKHgtJmd0O29vKWAiOiAiIiwKKyAgICAgICAgICAgICJgbG9nYCI6ICIiLAorICAgICAgICAgICAgImBtdWAiOiAiIiwKKyAgICAgICAgICAgICJgTk5gIjogIiIsCisgICAgICAgICAgICAiYG5uYCI6ICIiLAorICAgICAgICAgICAgImBub3RgIjogIiIsCisgICAgICAgICAgICAiYG51YCI6ICIiLAorICAgICAgICAgICAgImBvK2AiOiAiIiwKKyAgICAgICAgICAgICJgby5gIjogIiIsCisgICAgICAgICAgICAiYE8vYCI6ICIiLAorICAgICAgICAgICAgImBvaW50YCI6ICIiLAorICAgICAgICAgICAgImBvbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgT21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYG9vYCI6ICIiLAorICAgICAgICAgICAgImBvcmAiOiAiIiwKKyAgICAgICAgICAgICJgb3hgIjogIiIsCisgICAgICAgICAgICAiYHBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGhpYCI6ICIiLAorICAgICAgICAgICAgImBQaWAiOiAiIiwKKyAgICAgICAgICAgICJgcGlgIjogIiIsCisgICAgICAgICAgICAiYHByb2RgIjogIiIsCisgICAgICAgICAgICAiYHByb3BgIjogIiIsCisgICAgICAgICAgICAiYFBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgcHNpYCI6ICIiLAorICAgICAgICAgICAgImBRUWAiOiAiIiwKKyAgICAgICAgICAgICJgcXVhZGAiOiAiIiwKKyAgICAgICAgICAgICJgckFycmAiOiAiIiwKKyAgICAgICAgICAgICJgcmhvYCI6ICIiLAorICAgICAgICAgICAgImByb290KG4pKHgpYCI6ICIiLAorICAgICAgICAgICAgImBSUmAiOiAiIiwKKyAgICAgICAgICAgICJgc2ZhYCI6ICIiLAorICAgICAgICAgICAgImBTaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgc2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYHNxcnQoeClgIjogIiIsCisgICAgICAgICAgICAiYHNxdWFyZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3RhY2tyZWwoLSZndDspKCspYCI6ICIiLAorICAgICAgICAgICAgImBzdWJgIjogIiIsCisgICAgICAgICAgICAiYHN1YmVgIjogIiIsCisgICAgICAgICAgICAiYHN1bWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwYCI6ICIiLAorICAgICAgICAgICAgImBzdXBlYCI6ICIiLAorICAgICAgICAgICAgImB0YXVgIjogIiIsCisgICAgICAgICAgICAiYFRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImB0aGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgVFRgIjogIiIsCisgICAgICAgICAgICAiYHR0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdWFycmAiOiAiIiwKKyAgICAgICAgICAgICJgdWxhYCI6ICIiLAorICAgICAgICAgICAgImB1cHNpbG9uYCI6ICIiLAorICAgICAgICAgICAgImB1dWAiOiAiIiwKKyAgICAgICAgICAgICJgdmVjYWAiOiAiIiwKKyAgICAgICAgICAgICJgdnZgIjogIiIsCisgICAgICAgICAgICAiYHhfKG1uKWAiOiAiIiwKKyAgICAgICAgICAgICJgWGlgIjogIiIsCisgICAgICAgICAgICAiYHhpYCI6ICIiLAorICAgICAgICAgICAgImB4eGAiOiAiIiwKKyAgICAgICAgICAgICJgemV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgWlpgIjogIiIsCisgICAgICAgICAgICAiYHwtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgfC0tYCI6ICIiLAorICAgICAgICAgICAgImB8PT1gIjogIiIsCisgICAgICAgICAgICAiYHxfX2AiOiAiIiwKKyAgICAgICAgICAgICJgfH5gIjogIiIsCisgICAgICAgICAgICAiYH49YCI6ICIiLAorICAgICAgICAgICAgImB+fGAiOiAiIiwKKyAgICAgICAgICAgICJgfn5gIjogIiIsCisgICAgICAgICAgICAiQUEiOiAiIiwKKyAgICAgICAgICAgICJhbGVwaCI6ICIiLAorICAgICAgICAgICAgImFscGhhIjogIiIsCisgICAgICAgICAgICAiYW5kIjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoIEZvcm11bGEgSW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGhNTCBFeGFtcGxlIjogIiIsCisgICAgICAgICAgICAiYmFyYSI6ICIiLAorICAgICAgICAgICAgIkJhc2VkIG9uIEFTQ0lJTWF0aE1MIGJ5IjogIiIsCisgICAgICAgICAgICAiYmJhIjogIiIsCisgICAgICAgICAgICAiYmJiYSI6ICIiLAorICAgICAgICAgICAgImJldGEiOiAiIiwKKyAgICAgICAgICAgICJDQyI6ICIiLAorICAgICAgICAgICAgImNjYSI6ICIiLAorICAgICAgICAgICAgImNoaSI6ICIiLAorICAgICAgICAgICAgImRhcnIiOiAiIiwKKyAgICAgICAgICAgICJkZG90YSI6ICIiLAorICAgICAgICAgICAgImRlbCI6ICIiLAorICAgICAgICAgICAgImRlbHRhIjogIiIsCisgICAgICAgICAgICAiRGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJkaWFtb25kIjogIiIsCisgICAgICAgICAgICAiZG90YSI6ICIiLAorICAgICAgICAgICAgImR5L2R4IjogIiIsCisgICAgICAgICAgICAiRUUiOiAiIiwKKyAgICAgICAgICAgICJlcHNpIjogIiIsCisgICAgICAgICAgICAiZXRhIjogIiIsCisgICAgICAgICAgICAiRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQXNjaWlNYXRoTUwgdmlzaXQgdGhpcyBwYWdlOiI6ICIiLAorICAgICAgICAgICAgIkZvcm11bGEgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiZnJhIjogIiIsCisgICAgICAgICAgICAiZ2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJHYW1tYSI6ICIiLAorICAgICAgICAgICAgImdyYWQiOiAiIiwKKyAgICAgICAgICAgICJoQXJyIjogIiIsCisgICAgICAgICAgICAiaGFyciI6ICIiLAorICAgICAgICAgICAgImhhdGEiOiAiIiwKKyAgICAgICAgICAgICJpZiI6ICIiLAorICAgICAgICAgICAgImluIjogIiIsCisgICAgICAgICAgICAiSW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJpbnQiOiAiIiwKKyAgICAgICAgICAgICJpbnRfYV5iZih4KWR4IjogIiIsCisgICAgICAgICAgICAiaW90YSI6ICIiLAorICAgICAgICAgICAgImthcHBhIjogIiIsCisgICAgICAgICAgICAiTGFtYmRhIjogIiIsCisgICAgICAgICAgICAibGFtYmRhIjogIiIsCisgICAgICAgICAgICAibGFyciI6ICIiLAorICAgICAgICAgICAgImxBcnIiOiAiIiwKKyAgICAgICAgICAgICJsaW1fKHgtJmd0O29vKSI6ICIiLAorICAgICAgICAgICAgIm11IjogIiIsCisgICAgICAgICAgICAiTk4iOiAiIiwKKyAgICAgICAgICAgICJubiI6ICIiLAorICAgICAgICAgICAgIm5ubiI6ICIiLAorICAgICAgICAgICAgIm5vdCI6ICIiLAorICAgICAgICAgICAgIm51IjogIiIsCisgICAgICAgICAgICAibysiOiAiIiwKKyAgICAgICAgICAgICJvLiI6ICIiLAorICAgICAgICAgICAgIk8vIjogIiIsCisgICAgICAgICAgICAib2ludCI6ICIiLAorICAgICAgICAgICAgIk9tZWdhIjogIiIsCisgICAgICAgICAgICAib21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJvbyI6ICIiLAorICAgICAgICAgICAgIm9yIjogIiIsCisgICAgICAgICAgICAib3giOiAiIiwKKyAgICAgICAgICAgICJwaGkiOiAiIiwKKyAgICAgICAgICAgICJQaGkiOiAiIiwKKyAgICAgICAgICAgICJwaSI6ICIiLAorICAgICAgICAgICAgIlBpIjogIiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICIiLAorICAgICAgICAgICAgInByb2QiOiAiIiwKKyAgICAgICAgICAgICJwcm9wIjogIiIsCisgICAgICAgICAgICAicHNpIjogIiIsCisgICAgICAgICAgICAiUHNpIjogIiIsCisgICAgICAgICAgICAiUVEiOiAiIiwKKyAgICAgICAgICAgICJxdWFkIjogIiIsCisgICAgICAgICAgICAickFyciI6ICIiLAorICAgICAgICAgICAgInJobyI6ICIiLAorICAgICAgICAgICAgInJvb3QobikoeCkiOiAiIiwKKyAgICAgICAgICAgICJSUiI6ICIiLAorICAgICAgICAgICAgInNmYSI6ICIiLAorICAgICAgICAgICAgInNpZ21hIjogIiIsCisgICAgICAgICAgICAiU2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJzcXJ0KHgpIjogIiIsCisgICAgICAgICAgICAic3F1YXJlIjogIiIsCisgICAgICAgICAgICAic3RhY2tyZWwoLSZndDspKCspIjogIiIsCisgICAgICAgICAgICAic3ViIjogIiIsCisgICAgICAgICAgICAic3ViZSI6ICIiLAorICAgICAgICAgICAgInN1bSI6ICIiLAorICAgICAgICAgICAgInN1bV8obj0xKV5vbyI6ICIiLAorICAgICAgICAgICAgInN1cCI6ICIiLAorICAgICAgICAgICAgInN1cGUiOiAiIiwKKyAgICAgICAgICAgICJ0YXUiOiAiIiwKKyAgICAgICAgICAgICJUaGV0YSI6ICIiLAorICAgICAgICAgICAgInRoZXRhIjogIiIsCisgICAgICAgICAgICAiVFQiOiAiIiwKKyAgICAgICAgICAgICJ0dGEiOiAiIiwKKyAgICAgICAgICAgICJ1YXJyIjogIiIsCisgICAgICAgICAgICAidWxhIjogIiIsCisgICAgICAgICAgICAidXBzaWxvbiI6ICIiLAorICAgICAgICAgICAgInV1IjogIiIsCisgICAgICAgICAgICAidXV1IjogIiIsCisgICAgICAgICAgICAidmVjYSI6ICIiLAorICAgICAgICAgICAgInZ2IjogIiIsCisgICAgICAgICAgICAidnZ2IjogIiIsCisgICAgICAgICAgICAieF4obStuKSI6ICIiLAorICAgICAgICAgICAgInhfKG1uKSI6ICIiLAorICAgICAgICAgICAgIlhpIjogIiIsCisgICAgICAgICAgICAieGkiOiAiIiwKKyAgICAgICAgICAgICJ4eCI6ICIiLAorICAgICAgICAgICAgInpldGEiOiAiIiwKKyAgICAgICAgICAgICJaWiI6ICIiLAorICAgICAgICAgICAgInwtJmd0OyI6ICIiLAorICAgICAgICAgICAgInwtLSI6ICIiLAorICAgICAgICAgICAgInw9PSI6ICIiLAorICAgICAgICAgICAgInxfXyI6ICIiLAorICAgICAgICAgICAgInx+IjogIiIsCisgICAgICAgICAgICAifj0iOiAiIiwKKyAgICAgICAgICAgICJ+fCI6ICIiLAorICAgICAgICAgICAgIn5+IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZhbmN5U2VsZWN0cyI6IHsKKyAgICAgICAgICAgICInK29wdC50ZXh0KyciOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiJztcclxuICB2YXIgdGFnYyA9ICciOiAiIiwKKyAgICAgICAgICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAiIiwKKyAgICAgICAgICAgICJDbGVhciI6ICIiLAorICAgICAgICAgICAgIkRvbmUiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgdGV4dCB5b3Ugd2FudCB0byBmaW5kIjogIiIsCisgICAgICAgICAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgImZvdW5kIGl0ZW0iOiAiIiwKKyAgICAgICAgICAgICJmb3VuZCBpdGVtcyI6ICIiLAorICAgICAgICAgICAgIkhpZ2hsaWdodCI6ICIiLAorICAgICAgICAgICAgIkluZm9ybSBhIHJlcGxhY2VtZW50IHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJOZXh0IjogIiIsCisgICAgICAgICAgICAibm90IGZvdW5kIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2Ugd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtIjogIiIsCisgICAgICAgICAgICAicmVwbGFjZWQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJTZWFyY2ggZm9yOiI6ICIiLAorICAgICAgICAgICAgIlN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IjogIiIsCisgICAgICAgICAgICAiVW5kbyI6ICIiLAorICAgICAgICAgICAgIldob2xlIHdvcmRzIG9ubHkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiRW50ZXIgdGhlIG5hbWUgZm9yIG5ldyBvcHRpb24uIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgRm9ybS4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBtdWx0aS1saW5lIHRleHQgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcmFkaW8gYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFNlbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgU2VsZWN0Li4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1zIjogeworICAgICAgICAgICAgIidvbkNsaWNrJz0iOiAiIiwKKyAgICAgICAgICAgICJBY2Nlc3MgS2V5OiI6ICIiLAorICAgICAgICAgICAgIkFjdGlvbiBVUkw6IjogIiIsCisgICAgICAgICAgICAiQnV0dG9uIFNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkNoZWNrZWQiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zOiI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQgdGV4dCAob3B0aW9uYWwpIjogIiIsCisgICAgICAgICAgICAiRGltZW5zaW9ucyI6ICIiLAorICAgICAgICAgICAgIkRpc2FibGVkIjogIiIsCisgICAgICAgICAgICAiRW5jb2Rpbmc6IjogIiIsCisgICAgICAgICAgICAiRm9yIENvbnRyb2w6IjogIiIsCisgICAgICAgICAgICAiRm9ybSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IElOUFVUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gaGFuZGxlciBzY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiR2V0IjogIiIsCisgICAgICAgICAgICAiSGFyZCI6ICIiLAorICAgICAgICAgICAgIkhlaWdodCBpbiBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkhUTUwtRm9ybSB0byBDR0kgKGRlZmF1bHQpIjogIiIsCisgICAgICAgICAgICAiSW1hZ2Ugc291cmNlIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMOiI6ICIiLAorICAgICAgICAgICAgIkluaXRpYWwgVGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IEZJRUxEU0VUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IElOUFVUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IExBQkVMIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFNFTEVDVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkphdmFzY3JpcHQgZm9yIGJ1dHRvbiBjbGljayI6ICIiLAorICAgICAgICAgICAgIkxhYmVsOiI6ICIiLAorICAgICAgICAgICAgIkxlZ2VuZDoiOiAiIiwKKyAgICAgICAgICAgICJNYXggbGVuZ3RoOiI6ICIiLAorICAgICAgICAgICAgIk1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWNjZXB0ZWQiOiAiIiwKKyAgICAgICAgICAgICJNZXRob2Q6IjogIiIsCisgICAgICAgICAgICAibXVsdGlwYXJ0IEZvcm0gRGF0YSAoRmlsZS1VcGxvYWQpIjogIiIsCisgICAgICAgICAgICAiTmFtZSI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIm5hbWUgb2YgdGhlIHRleHRhcmVhIjogIiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiIiwKKyAgICAgICAgICAgICJub3JtYWwiOiAiIiwKKyAgICAgICAgICAgICJub3dyYXAiOiAiIiwKKyAgICAgICAgICAgICJPZmYiOiAiIiwKKyAgICAgICAgICAgICJQaHlzaWNhbCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciBhIExhYmVsIjogIiIsCisgICAgICAgICAgICAiUG9zdCI6ICIiLAorICAgICAgICAgICAgInByZSI6ICIiLAorICAgICAgICAgICAgIlJlYWQgT25seSI6ICIiLAorICAgICAgICAgICAgIlJvd3M6IjogIiIsCisgICAgICAgICAgICAiU2l6ZSBvZiB0ZXh0IGJveCBpbiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiU2l6ZToiOiAiIiwKKyAgICAgICAgICAgICJTb2Z0IjogIiIsCisgICAgICAgICAgICAiVGFiIEluZGV4OiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBGcmFtZToiOiAiIiwKKyAgICAgICAgICAgICJUZXh0OiI6ICIiLAorICAgICAgICAgICAgIlVSTCBvZiBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlZhbHVlIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiVmFsdWU6IjogIiIsCisgICAgICAgICAgICAiVmlydHVhbCI6ICIiLAorICAgICAgICAgICAgIldpZHRoIGluIG51bWJlciBvZiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiV3JhcCBNb2RlOiI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgTmFtZSI6ICIiLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IgorICAgICAgICB9LAorICAgICAgICAiRnVsbFBhZ2UiOiB7CisgICAgICAgICAgICAiLi4uIjogIiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIkJhY2tncm91bmQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiQ2hhcmFjdGVyIHNldDoiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoSVNPLTg4NTktNSkiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoS09JOC1SKSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChXSU5ET1dTLTEyNTEpIjogIiIsCisgICAgICAgICAgICAiRGVzY3JpcHRpb246IjogIiIsCisgICAgICAgICAgICAiRE9DVFlQRToiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiRG9jdW1lbnQgdGl0bGU6IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZHM6IjogIiIsCisgICAgICAgICAgICAiUHJpbWFyeSBzdHlsZS1zaGVldDoiOiAiIiwKKyAgICAgICAgICAgICJUZXh0IGNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIlVURi04IChyZWNvbW1lbmRlZCkiOiAiIiwKKyAgICAgICAgICAgICJ3ZXN0ZXJuIChJU08tODg1OS0xKSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGdWxsU2NyZWVuIjogeworICAgICAgICAgICAgIk1heGltaXplL01pbmltaXplIEVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJHZWNrbyI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICAgICAiJiN4MDBkNzsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIiIsCisgICAgICAgICAgICAiQ2VudGVyIjogIiIsCisgICAgICAgICAgICAiQ29sb3I6IjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9lZGl0IGhvcml6b250YWwgcnVsZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEhvcml6b250YWwgUnVsZSI6ICIiLAorICAgICAgICAgICAgIkxheW91dCI6ICIiLAorICAgICAgICAgICAgIkxlZnQiOiAiIiwKKyAgICAgICAgICAgICJObyBzaGFkaW5nIjogIiIsCisgICAgICAgICAgICAicGVyY2VudCI6ICIiLAorICAgICAgICAgICAgInBpeGVscyI6ICIiLAorICAgICAgICAgICAgIlJpZ2h0IjogIiIsCisgICAgICAgICAgICAiU3R5bGUiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5saW5lU3R5bGVyIjogeworICAgICAgICAgICAgIkJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciI6ICIiLAorICAgICAgICAgICAgIkJvdHRvbSI6ICIiLAorICAgICAgICAgICAgIkNoYXIiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkNTUyBTdHlsZSI6ICIiLAorICAgICAgICAgICAgIkZHIENvbG9yIjogIiIsCisgICAgICAgICAgICAiRmxvYXQiOiAiIiwKKyAgICAgICAgICAgICJKdXN0aWZ5IjogIiIsCisgICAgICAgICAgICAiTWFyZ2luIjogIiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIiIsCisgICAgICAgICAgICAiTm9uZSI6ICIiLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJUZXh0IGFsaWduIjogIiIsCisgICAgICAgICAgICAiVG9wIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWwgYWxpZ24iOiAiIiwKKyAgICAgICAgICAgICItIjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiQ2VudGVyIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSGVpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgInBlcmNlbnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJwaXhlbHMiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIldpZHRoIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgICAgICJBbmNob3IgbmFtZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBBbmNob3IiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydEltYWdlIjogeworICAgICAgICAgICAgIkFic2JvdHRvbSI6ICIiLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICIiLAorICAgICAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIiIsCisgICAgICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiIiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICIiLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiIiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIiIsCisgICAgICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiU3BhY2luZyI6ICIiLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWw6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICIiLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkxheW91dCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAgICAgIkluc2VydCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBmb290bm90ZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBOb3RlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBhZ2VicmVhayI6IHsKKyAgICAgICAgICAgICJQYWdlIGJyZWFrIjogIiIsCisgICAgICAgICAgICAiUGFnZSBCcmVhayI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbWlsZXkiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IFNtaWxleSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0IjogeworICAgICAgICAgICAgIlxcbiAgVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmdcXG4iOiAiIiwKKyAgICAgICAgICAgICJIaWRlIHByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgU25pcHBldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIiIsCisgICAgICAgICAgICAiTGluazEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMiI6ICIiLAorICAgICAgICAgICAgIkxpbmszIjogIiIsCisgICAgICAgICAgICAiTGluazQiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNSI6ICIiLAorICAgICAgICAgICAgIlNob3cgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nIjogIiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldDIiOiB7CisgICAgICAgICAgICAiQWxsIENhdGVnb3JpZXMiOiAiIiwKKyAgICAgICAgICAgICJGaWx0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMgSFRNTCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyB0ZW1wbGF0ZSB2YXJpYWJsZSI6ICIiLAorICAgICAgICAgICAgIk9ubHkgc2VhcmNoIHdvcmQgYmVnaW5uaW5nIjogIiIsCisgICAgICAgICAgICAiSFRNTCI6ICI8PENoYXJDb3VudGVyPj4iLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICI8PEluc2VydFNuaXBwZXQ+PiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgICAgICJDYXB0aW9uIjogIiIsCisgICAgICAgICAgICAiQ2FwdGlvbiBmb3IgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICIiLAorICAgICAgICAgICAgIkNlbGwgc3BhY2luZzoiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZSBib3JkZXJzOiI6ICIiLAorICAgICAgICAgICAgIkNvbHM6IjogIiIsCisgICAgICAgICAgICAiRW0iOiAiIiwKKyAgICAgICAgICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiTGF5b3UiOiAiIiwKKyAgICAgICAgICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIk51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICIiLAorICAgICAgICAgICAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIiIsCisgICAgICAgICAgICAiU3R5bGUgb2YgdGhlIGJvcmRlciI6ICIiLAorICAgICAgICAgICAgIldpZHRoIG9mIHRoZSB0YWJsZSI6ICIiLAorICAgICAgICAgICAgIldpZHRoIHVuaXQiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3JkZXIiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlBlcmNlbnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJQaXhlbHMiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJvd3M6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiU3BhY2luZyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUb3AiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxhbmdNYXJrcyI6IHsKKyAgICAgICAgICAgICImbWRhc2g7IGxhbmd1YWdlICZtZGFzaDsiOiAiIiwKKyAgICAgICAgICAgICInLCAnIjogIiIsCisgICAgICAgICAgICAiRW5nbGlzaCI6ICIiLAorICAgICAgICAgICAgIkZyZW5jaCI6ICIiLAorICAgICAgICAgICAgIkdyZWVrIjogIiIsCisgICAgICAgICAgICAibGFuZ3VhZ2Ugc2VsZWN0IjogIiIsCisgICAgICAgICAgICAiTGF0aW4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiTGlua2VyIjogeworICAgICAgICAgICAgIihweCkiOiAiIiwKKyAgICAgICAgICAgICJBbmNob3ItTGluayI6ICIiLAorICAgICAgICAgICAgIkFuY2hvcjoiOiAiIiwKKyAgICAgICAgICAgICJFbWFpbCBBZGRyZXNzOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJMb2NhdGlvbiBCYXI6IjogIiIsCisgICAgICAgICAgICAiTWVudSBCYXI6IjogIiIsCisgICAgICAgICAgICAiTWVzc2FnZSBUZW1wbGF0ZToiOiAiIiwKKyAgICAgICAgICAgICJOZXcgV2luZG93IjogIiIsCisgICAgICAgICAgICAiT3JkaW5hcnkgTGluayI6ICIiLAorICAgICAgICAgICAgIlBvcHVwIFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlBvcHVwV2luZG93IjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJSZXNpemVhYmxlOiI6ICIiLAorICAgICAgICAgICAgIlNhbWUgV2luZG93IChqdW1wIG91dCBvZiBmcmFtZXMpIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsYmFyczoiOiAiIiwKKyAgICAgICAgICAgICJTaG93cyBPbiBIb3ZlciI6ICIiLAorICAgICAgICAgICAgIlN0YXR1cyBCYXI6IjogIiIsCisgICAgICAgICAgICAiU3ViamVjdDoiOiAiIiwKKyAgICAgICAgICAgICJUaXRsZToiOiAiIiwKKyAgICAgICAgICAgICJUb29sYmFyOiI6ICIiLAorICAgICAgICAgICAgIlVSTCBMaW5rIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIiIsCisgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJOYW1lOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNpemU6IjogIjw8Rm9ybXM+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxpc3RUeXBlIjogeworICAgICAgICAgICAgIkNob29zZSBsaXN0IHN0eWxlIHR5cGUgKGZvciBvcmRlcmVkIGxpc3RzKSI6ICIiLAorICAgICAgICAgICAgIkRlY2ltYWwgbnVtYmVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIGdyZWVrIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciBsYXRpbiBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgcm9tYW4gbnVtYmVycyI6ICIiLAorICAgICAgICAgICAgIlVwcGVyIGxhdGluIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJVcHBlciByb21hbiBudW1iZXJzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIk1vb3Rvb2xzRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiT3BlcmEiOiB7CisgICAgICAgICAgICAiTUFSSyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQYXN0ZVRleHQiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IHRleHQgaW4gbmV3IHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIlBhc3RlIGFzIFBsYWluIFRleHQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUHJlc2VydmVTY3JpcHRzIjogeworICAgICAgICAgICAgIkphdmFTY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJQSFAiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUXVpY2tUYWciOiB7CisgICAgICAgICAgICAiJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsJzogJyI6ICIiLAorICAgICAgICAgICAgIkFUVFJJQlVURVMiOiAiIiwKKyAgICAgICAgICAgICJDb2xvcnMiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgVEFHIHlvdSB3YW50IHRvIGluc2VydCI6ICIiLAorICAgICAgICAgICAgIk5vIENTUyBjbGFzcyBhdmFpYWJsZSI6ICIiLAorICAgICAgICAgICAgIk9rIjogIiIsCisgICAgICAgICAgICAiT1BUSU9OUyI6ICIiLAorICAgICAgICAgICAgIlF1aWNrIFRhZyBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJUQUdzIjogIiIsCisgICAgICAgICAgICAiVGhlcmUgYXJlIHNvbWUgdW5jbG9zZWQgcXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIGF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgVEFHIjogIiIsCisgICAgICAgICAgICAiWW91IGhhdmUgdG8gc2VsZWN0IHNvbWUgdGV4dCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTYXZlU3VibWl0IjogeworICAgICAgICAgICAgImluIHByb2dyZXNzIjogIiIsCisgICAgICAgICAgICAiUmVhZHkiOiAiIiwKKyAgICAgICAgICAgICJTYXZlIjogIiIsCisgICAgICAgICAgICAiU2F2aW5nLi4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNldElkIjogeworICAgICAgICAgICAgIklEL05hbWU6IjogIiIsCisgICAgICAgICAgICAiU2V0IElkIGFuZCBOYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElkL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSUQvTmFtZSI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiU21hcnRSZXBsYWNlIjogeworICAgICAgICAgICAgIkNsb3NpbmdEb3VibGVRdW90ZXMiOiAiIiwKKyAgICAgICAgICAgICJDbG9zaW5nU2luZ2xlUXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJDb252ZXJ0IGFsbCBxdW90ZXMgYW5kIGRhc2hlcyBpbiB0aGUgY3VycmVudCBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBhdXRvbWF0aWMgcmVwbGFjZW1lbnRzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIk9wZW5pbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIlNtYXJ0UmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgIlNtYXJ0UmVwbGFjZSBTZXR0aW5ncyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTdHlsaXN0IjogeworICAgICAgICAgICAgIlN0eWxlcyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAgICAgIkNsZWFuIGJhZCBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQuIjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gU2VsZWN0aW9uIE9ubHkiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiB1cCBIVE1MIjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgU2NvcGUiOiAiIiwKKyAgICAgICAgICAgICJHZW5lcmFsIHRpZHkgdXAgYW5kIGNvcnJlY3Rpb24gb2Ygc29tZSBwcm9ibGVtcy4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc2VsZWN0IGZyb20gdGhlIGZvbGxvd2luZyBjbGVhbmluZyBvcHRpb25zLi4uIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHN0YW5kIGJ5IHdoaWxlIGNsZWFuaW5nIGluIHByb2Nlc3MuLi4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxpZ25tZW50IChsZWZ0L3JpZ2h0L2p1c3RpZnkpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgY2xhc3NlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgQWxsIEhUTUwgVGFncyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgc3R5bGVzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gZm9udCBzaXplcy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIHRleHQgY29sb3JzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdHlwZWZhY2VzIChmb250IFwic3R5bGVzXCIpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBlbXBoYXNpcyBhbmQgYW5ub3RhdGlvbnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGxhbmcgYXR0cmlidXRlcy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgUGFyYWdyYXBocyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMuIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSBkaXJlY3Rpb25hbCBxdW90ZSBtYXJrcyB3aXRoIG5vbi1kaXJlY3Rpb25hbCBxdW90ZSBtYXJrcy4iOiAiIiwKKyAgICAgICAgICAgICJWaWdvcm91c2x5IHB1cmdlIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAgICAgIkFsbCBmb3VyIHNpZGVzIjogIiIsCisgICAgICAgICAgICAiQm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkNlbGwgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIkNlbGwgUHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIkNlbGwgVHlwZToiOiAiIiwKKyAgICAgICAgICAgICJDZWxscyBkb3duIjogIiIsCisgICAgICAgICAgICAiQ2VsbHMgdG8gdGhlIHJpZ2h0LCBhbmQiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgY2VsbCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgcm93IjogIiIsCisgICAgICAgICAgICAiRG8gTm90IENoYW5nZSI6ICIiLAorICAgICAgICAgICAgIkZyYW1lIGFuZCBib3JkZXJzIjogIiIsCisgICAgICAgICAgICAiRnJhbWVzIjogIiIsCisgICAgICAgICAgICAiSGVhZGVyICh0aCkiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY2VsbCBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY29sdW1uIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCByb3cgYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcm93IGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIGNlbGxzIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY3VycmVudCBjZWxsIHdpdGg6IjogIiIsCisgICAgICAgICAgICAiTm8gcnVsZXMiOiAiIiwKKyAgICAgICAgICAgICJObyBzaWRlcyI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCAodGQpIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNsaWNrIGludG8gc29tZSBjZWxsIjogIiIsCisgICAgICAgICAgICAiUm93IHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJSb3cgUHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGNvbHVtbnMgb25seSI6ICIiLAorICAgICAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogIiIsCisgICAgICAgICAgICAiU3BhY2luZyBhbmQgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IHJvdyI6ICIiLAorICAgICAgICAgICAgIlN1bW1hcnkiOiAiIiwKKyAgICAgICAgICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiVGFibGUgUHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlRoZSBib3R0b20gc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIGxlZnQtaGFuZCBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSByaWdodC1oYW5kIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSB0b3AgYW5kIGJvdHRvbSBzaWRlcyBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHRvcCBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjb2x1bW4gaW4gdGFibGUuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3Qgcm93IGluIHRhYmxlLiI6ICIiLAorICAgICAgICAgICAgIkNhcHRpb24iOiAiPDxJbnNlcnRUYWJsZT4+IiwKKyAgICAgICAgICAgICJDb2x1bW5zIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiRGVzY3JpcHRpb24iOiAiPDxGdWxsUGFnZT4+IiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAicGl4ZWxzIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUm93cyI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNwYWNpbmciOiAiPDxJbnNlcnRJbWFnZT4+IgorICAgICAgICB9LAorICAgICAgICAiVW5zYXZlZENoYW5nZXMiOiB7CisgICAgICAgICAgICAiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBlZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiV2ViS2l0IjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICI8PEdlY2tvPj4iCisgICAgICAgIH0sCisgICAgICAgICJYaW5oYSI6IHsKKyAgICAgICAgICAgICImIzgyMTI7IGZvbnQgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICImIzgyMTI7IHNpemUgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIjEgKDggcHQpIjogIiIsCisgICAgICAgICAgICAiMiAoMTAgcHQpIjogIiIsCisgICAgICAgICAgICAiMyAoMTIgcHQpIjogIiIsCisgICAgICAgICAgICAiNCAoMTQgcHQpIjogIiIsCisgICAgICAgICAgICAiNSAoMTggcHQpIjogIiIsCisgICAgICAgICAgICAiNiAoMjQgcHQpIjogIiIsCisgICAgICAgICAgICAiNyAoMzYgcHQpIjogIiIsCisgICAgICAgICAgICAiQWRkcmVzcyI6ICIiLAorICAgICAgICAgICAgIkFyaWFsIjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gY29udGVudCBwYXN0ZWQgZnJvbSBXb3JkIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJDbGVhciBNU09mZmljZSB0YWdzIjogIiIsCisgICAgICAgICAgICAiQ2xvc2UiOiAiIiwKKyAgICAgICAgICAgICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIiIsCisgICAgICAgICAgICAiQ291cmllciBOZXciOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgU3RhdHVzYmFyIjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFRvb2xiYXIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTAgKHplcm8pIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0xIC4uIENUUkwtNiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtRSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtVSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtViI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWiI6ICIiLAorICAgICAgICAgICAgIkVkaXRvciBIZWxwIjogIiIsCisgICAgICAgICAgICAiRU5URVIiOiAiIiwKKyAgICAgICAgICAgICJFcnJvciBMb2FkaW5nIFhpbmhhLiAgRGV2ZWxvcGVycywgY2hlY2sgdGhlIEVycm9yIENvbnNvbGUgZm9yIGluZm9ybWF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGluZyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdHRlZCI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYXRlIFhpbmhhIGZyYW1ld29yayI6ICIiLAorICAgICAgICAgICAgIkdlb3JnaWEiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDEiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDIiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDMiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDQiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDUiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDYiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5ncyI6ICIiLAorICAgICAgICAgICAgIkltcGFjdCI6ICIiLAorICAgICAgICAgICAgIkluaXQgZWRpdG9yIHNpemUiOiAiIiwKKyAgICAgICAgICAgICJpbnNlcnQgbGluZWJyZWFrIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICIiLAorICAgICAgICAgICAgIktleWJvYXJkIHNob3J0Y3V0cyI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgQ29yZSI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ISI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbnMiOiAiIiwKKyAgICAgICAgICAgICJNUyBXb3JkIENsZWFuZXIiOiAiIiwKKyAgICAgICAgICAgICJuZXcgcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiTm9ybWFsIjogIiIsCisgICAgICAgICAgICAiUHJpbnQgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJSZWdpc3RlciBwbHVnaW4gJHBsdWdpbiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBhcyI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCBhbGwiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIlNISUZULUVOVEVSIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgQmxvY2siOiAiIiwKKyAgICAgICAgICAgICJUYWhvbWEiOiAiIiwKKyAgICAgICAgICAgICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAiIiwKKyAgICAgICAgICAgICJUaW1lcyBOZXcgUm9tYW4iOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgQm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIlRvdWNoIGhlcmUgZmlyc3QgdG8gYWN0aXZhdGUgZWRpdG9yLiI6ICIiLAorICAgICAgICAgICAgIlZlcmRhbmEiOiAiIiwKKyAgICAgICAgICAgICJXYWl0aW5nIGZvciBJZnJhbWUgdG8gbG9hZC4uLiI6ICIiLAorICAgICAgICAgICAgIldpbmdEaW5ncyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJSZW1vdmUgQ3VycmVudCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IEJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJTZXQgcGFnZSBiYWNrZ3JvdW5kIGltYWdlIjogIiIsCisgICAgICAgICAgICAiU2V0IFBhZ2UgQmFja2dyb3VuZCBJbWFnZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDbGllbnRzaWRlU3BlbGxjaGVjayI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIENMSUVOVFNJREVTUEVMTENIRUNLIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrIHVzaW5nIGllU3BlbGwiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTAlIjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICIiLAorICAgICAgICAgICAgIjIwMCUiOiAiIiwKKyAgICAgICAgICAgICIyNSUiOiAiIiwKKyAgICAgICAgICAgICI1MCUiOiAiIiwKKyAgICAgICAgICAgICI3NSUiOiAiIiwKKyAgICAgICAgICAgICI+TGlzdCBWaWV3IjogIiIsCisgICAgICAgICAgICAiPlRodW1ibmFpbCBWaWV3IjogIiIsCisgICAgICAgICAgICAiQToiOiAiIiwKKyAgICAgICAgICAgICJBbGlnbiI6ICIiLAorICAgICAgICAgICAgIkFsdCI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciBDb2xvciI6ICIiLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkNyb3AiOiAiIiwKKyAgICAgICAgICAgICJEOiI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICIiLAorICAgICAgICAgICAgIkVkaXQiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiIiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiIiwKKyAgICAgICAgICAgICJGaWxlc2l6ZToiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIEhvcml6b250YWwiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIEltYWdlIjogIiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciI6ICIiLAorICAgICAgICAgICAgIkdJRiI6ICIiLAorICAgICAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICIiLAorICAgICAgICAgICAgIkg6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiIiwKKyAgICAgICAgICAgICJKUEVHIEhpZ2giOiAiIiwKKyAgICAgICAgICAgICJKUEVHIExvdyI6ICIiLAorICAgICAgICAgICAgIkpQRUcgTWVkaXVtIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyI6ICIiLAorICAgICAgICAgICAgIkxvY2siOiAiIiwKKyAgICAgICAgICAgICJNYXJrZXIiOiAiIiwKKyAgICAgICAgICAgICJNYXhpbXVtIGZvbGRlciBzaXplIGxpbWl0IHJlYWNoZWQuIFVwbG9hZCBkaXNhYmxlZC4iOiAiIiwKKyAgICAgICAgICAgICJNZWFzdXJlIjogIiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICIiLAorICAgICAgICAgICAgIk5vIEZpbGVzIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHZhbHVlIjogIiIsCisgICAgICAgICAgICAiUE5HIjogIiIsCisgICAgICAgICAgICAiUHJlc2V0IjogIiIsCisgICAgICAgICAgICAiUXVhbGl0eToiOiAiIiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIiIsCisgICAgICAgICAgICAiUmVuYW1lIjogIiIsCisgICAgICAgICAgICAiUmVzaXplIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJTdGFydCBYOiI6ICIiLAorICAgICAgICAgICAgIlN0YXJ0IFk6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlRvZ2dsZSBtYXJrZXIgY29sb3IiOiAiIiwKKyAgICAgICAgICAgICJUcmFzaCI6ICIiLAorICAgICAgICAgICAgIlVwbG9hZCI6ICIiLAorICAgICAgICAgICAgIlc6IjogIiIsCisgICAgICAgICAgICAiWDoiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJZOiI6ICIiLAorICAgICAgICAgICAgIlpvb20iOiAiIiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3JkZXIiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNsZWFyIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiQ29sb3IiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJDb3B5IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiQ3V0IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiSGVpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiPDxNb290b29sc0ZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJNYXJnaW4iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQYWRkaW5nIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIldpZHRoIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJGaWx0ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsdGVyIjogIjw8SW5zZXJ0U25pcHBldDI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkh0bWxUaWR5IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQXV0by1UaWR5IjogIiIsCisgICAgICAgICAgICAiRG9uJ3QgVGlkeSI6ICIiLAorICAgICAgICAgICAgIkhUTUwgVGlkeSI6ICIiLAorICAgICAgICAgICAgIlRpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQW5nbGU6IjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlcyI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgVXNlcm5hbWUvRW1haWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIgTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFBob3RvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFZpZGVvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgU2VydmVyIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFVzZXJuYW1lIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlbyBMaXN0IjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlb3MiOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNsZWFyIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJDcm9wIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkVkaXQiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGVuYW1lOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIEltYWdlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgSGlnaCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgTWVkaXVtIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTG9jayI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWFya2VyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJNZWFzdXJlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUE5HIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUXVhbGl0eToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJlZnJlc2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJlc2l6ZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSb3RhdGUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIEltYWdlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJTdGFydCBYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU3RhcnQgWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUb3AiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiVHJhc2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlc6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUTUFSUVVFRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUiOiAiIiwKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kLUNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkJlaGF2aW9yOiI6ICIiLAorICAgICAgICAgICAgIkNvbnRpbnVvdXMiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3Rpb246IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHNjcm9sbGluZyBtYXJxdWVlIjogIiIsCisgICAgICAgICAgICAiTWFycXVlZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgQW1vdW50OiI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbCBEZWxheToiOiAiIiwKKyAgICAgICAgICAgICJTbGlkZSI6ICIiLAorICAgICAgICAgICAgIlNwZWVkIENvbnRyb2wiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk5hbWUiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiVGV4dDoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGljdHVyZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVFBJQ1RVUkUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vdCBkZWZpbmVkIjogIiIsCisgICAgICAgICAgICAiT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICIgT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJVcGxvYWQgZmlsZSI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkxheW91dCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiU2l6ZSI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNwYWNpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJWZXJ0aWNhbDoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiTm90ZVNlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTIwJSI6ICIiLAorICAgICAgICAgICAgIjE1MCUiOiAiIiwKKyAgICAgICAgICAgICI4MCUiOiAiIiwKKyAgICAgICAgICAgICJBZGQgR1VJRE8gQ29kZSBpbiBhIHRleHRib3ggb24gdGhlIHBhZ2UiOiAiIiwKKyAgICAgICAgICAgICJBZGQgTUlESSBsaW5rIHRvIGFsbG93IHN0dWRlbnRzIHRvIGhlYXIgdGhlIG11c2ljIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiR1VJRE8gQ29kZSI6ICIiLAorICAgICAgICAgICAgIkd1aWRvIGNvZGUiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBpbiBhcHBsZXQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgR1VJRE8gTXVzaWMgTm90YXRpb24iOiAiIiwKKyAgICAgICAgICAgICJNSURJIEZpbGUiOiAiIiwKKyAgICAgICAgICAgICJTb3VyY2UgQ29kZSI6ICIiLAorICAgICAgICAgICAgIldpdGggTW96aWxsYSwgdGhlIGFwcGxldCB3aWxsIG5vdCBiZSB2aXNpYmxlIGluIGVkaXRvciwgYnV0IG9ubHkgaW4gV2ViIHBhZ2UgYWZ0ZXIgc3VibWl0dGluZy4iOiAiIiwKKyAgICAgICAgICAgICJab29tIDoiOiAiIiwKKyAgICAgICAgICAgICIxMDAlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBQcmV2aWV3IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJab29tIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBHZWFycyBpbiBvcmRlciB0byB1c2UgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZSBhbmQgY29uZmlndXJhdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGluZyBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiSW5zdGFsbCI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIEFib3V0IExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgcmVsb2FkIHRoZSBwYWdlLCBjYXVzaW5nIHlvdSB0byBsb3NlIGFueSB1bnNhdmVkIHdvcmsuICBQcmVzcyBcIk9LXCIgdG8gcmVsb2FkLiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIHVzZXMgR29vZ2xlIEdlYXJzIHRvIGVuYWJsZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlLiAgV2l0aCBHZWFycyBpbnN0YWxsZWQsIHlvdSBjYW4gc2F2ZSBkcmFmdHMgb2YgeW91ciBkb2N1bWVudHMgb24geW91ciBoYXJkIGRyaXZlLCBjb25maWd1cmUgWGluaGEgdG8gbG9vayB0aGUgd2F5IHlvdSB3YW50LCBhbmQgY2FycnkgdGhpcyBpbmZvcm1hdGlvbiB3aGVyZXZlciB5b3UgdXNlIFhpbmhhIG9uIHRoZSB3ZWIuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsZTogIjogIiIsCisgICAgICAgICAgICAiSW1wb3J0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGV0YWlscyI6ICIiLAorICAgICAgICAgICAgIkZpbGUgQnJvd3NlciI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICAgIFRoZXJlIEMgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gIFRoZXJlIEEgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gXCIgVGhlcmUgQiBcIiI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICcgVGhlcmUgRCAnIjogIiIsCisgICAgICAgICAgICAiTGlzdCBvZiBQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJOZXcgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJPcGVuIjogIiIsCisgICAgICAgICAgICAiT3BlbiBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHlvdSdkIGxpa2UgdG8gY3JlYXRlLiI6ICIiLAorICAgICAgICAgICAgIlNhdmUgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgZXJhc2UgYW55IHVuc2F2ZWQgY29udGVudC4gIElmIHlvdSdyZSBjZXJ0YWluLCBwbGVhc2UgY2xpY2sgT0sgdG8gY29udGludWUuIjogIiIsCisgICAgICAgICAgICAiV2ViIFVSTCI6ICIiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiPDxQU0xvY2FsPj4iLAorICAgICAgICAgICAgIkNvcHkiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTWFuYWdlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZW5hbWUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCI6ICI8PEluc2VydE5vdGU+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBTUEVMTENIRUNLRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGljdGlvbmFyeSI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGVkIGxpc3Qgb2YgbWlzcGVsbGVkIHdvcmRzIjogIiIsCisgICAgICAgICAgICAiSFRNTEFyZWEgU3BlbGwgQ2hlY2tlciI6ICIiLAorICAgICAgICAgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIGFsbCI6ICIiLAorICAgICAgICAgICAgIkluZm8iOiAiIiwKKyAgICAgICAgICAgICJMZWFybiI6ICIiLAorICAgICAgICAgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICIiLAorICAgICAgICAgICAgIk9yaWdpbmFsIHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQuICBDYWxsaW5nIHNwZWxsIGNoZWNrZXIuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAiIiwKKyAgICAgICAgICAgICJwbGl6IHdlaXQgOy0pIjogIiIsCisgICAgICAgICAgICAiUmUtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSBhbGwiOiAiIiwKKyAgICAgICAgICAgICJSZXZlcnQiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiU3BlbGwtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJTdWdnZXN0aW9ucyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBkcm9wIGNoYW5nZXMgYW5kIHF1aXQgc3BlbGwgY2hlY2tlci4gIFBsZWFzZSBjb25maXJtLiI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2Ugd2l0aCI6ICI8PEZpbmRSZXBsYWNlPj4iCisgICAgICAgIH0sCisgICAgICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFRFTVBMQVRFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkluc2VydCB0ZW1wbGF0ZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJVbkZvcm1hdCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFVORk9STUFUIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFsbCI6ICIiLAorICAgICAgICAgICAgIkFsbCBIVE1MOiI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIEFyZWEiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBvcHRpb25zIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0dGluZzoiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIENsZWFuZXIiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Qgd2hpY2ggdHlwZXMgb2YgZm9ybWF0dGluZyB5b3Ugd291bGQgbGlrZSB0byByZW1vdmUuIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0aW9uIjogIiIKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9jei5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2N6LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MzA3YzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9jei5qcwpAQCAtMCwwICsxLDE1NzcgQEAKKy8vIFhpbmhhIExhbmd1YWdlIENvbWJpbmVkIFRyYW5zbGF0aW9uIEZpbGUKKy8vCisvLyBMQU5HOiAiY3oiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTlNUUlVDVElPTlMgVE8gVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFlvdXIgdHJhbnNsYXRpb24gbXVzdCBiZSBpbiBVVEYtOCBDaGFyYWN0ZXIgRW5jb2RpbmcuCisvLworLy8gVGhpcyBpcyBhIEpTT04gZW5jb2RlZCBmaWxlIChwbHVzIGNvbW1lbnRzKSwgc3RyaW5ncyBzaG91bGQgYmUgZG91YmxlLXF1b3RlCisvLyBvbmx5LCBkbyBub3QgdXNlIHNpbmdsZSBxdW90ZXMgdG8gc3Vycm91bmQgc3RyaW5ncyAtICJoZWxsbyIsIG5vdCAnaGVsbG8nCisvLyBkbyBub3QgaGF2ZSBhIHRyYWlsaW5nIGNvbW1hIGFmdGVyIHRoZSBsYXN0IGVudHJ5IGluIGEgc2VjdGlvbi4KKy8vCisvLyBPbmx5IGZ1bGwgbGluZSBjb21tZW50cyBhcmUgYWxsb3dlZCAodGhhdCBhIGNvbW1lbnRzIG9jY3VweSBlbnRpcmUgbGluZXMpLgorLy8KKy8vIFNlYXJjaCBmb3IgdGhlIF9fTkVXX1RSQU5TTEFUSU9OU19fIHNlY3Rpb24gYmVsb3csIHRoaXMgaXMgd2hlcmUgeW91IHdpbGwKKy8vIHdhbnQgdG8gZm9jdXMsIHRoaXMgc2VjdGlvbiBpbmNsdWRlcyB0aGluZ3MgdGhhdCBkbyBub3QgcHJlc2VudGx5IGhhdmUgYSAKKy8vIHRyYW5zbGF0aW9uIG9yIGZvciB3aGljaCB0aGUgdHJhbnNsYXRpb24gbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgYWNjdXJhY3kuCisvLworLy8gSW4gdGhlIE5ldyBUcmFuc2xhdGlvbnMgc2VjdGlvbiBhIHRyYW5zbGF0aW9uIHN0cmluZyBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZworLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiIgorLy8gICAgIFRoaXMgbWVhbnMgaXQgaXMgbm90IHRyYW5zbGF0ZWQgeWV0LCBhZGQgeW91ciB0cmFuc2xhdGlvbi4uLgorLy8gICAgICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJLbGluZ29uIFN0cmluZyBIZXJlIgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiVHJhbnNsYXRlZCBTdHJpbmcgSGVyZSIKKy8vICAgICBUaGlzIG1lYW5zIHRoYXQgYW4gZXhpc3RpbmcgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nLCBpbiBzb21lIG90aGVyCisvLyAgICAgc2VjdGlvbiBoYXMgYmVlbiBmb3VuZCwgYW5kIHVzZWQuICBDaGVjayB0aGF0IGl0IGlzIGFwcHJvcHJpdGUgZm9yIHRoaXMKKy8vICAgICBzZWN0aW9uIGFuZCBpZiBpdCBpcywgdGhhdCdzIGZpbmUgbGVhdmUgaXQgYXMgaXMsIG90aGVyd2lzZSBjaGFuZ2UgYXMKKy8vICAgICBhcHByb3ByaWF0ZS4KKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIjw8QW5vdGhlclNlY3Rpb24+PiIKKy8vICAgICBUaGlzIG1lYW5zIHVzZSB0aGUgc2FtZSB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcgYXMgPDxBbm90aGVyU2VjdGlvbj4+CisvLyAgICAgdGhpcyBzYXZlcyB5b3UgcmUtdHJhbmxhdGluZyBzdHJpbmdzLiAgSWYgdGhlIENvbnRleHQgb2YgdGhpcyBzZWN0aW9uCisvLyAgICAgYW5kIHRoZSBjb250ZXh0IG9mIEFub3RoZXJTZWN0aW9uIHNlZW0gdGhlIHNhbWUsIHRoYXQncyBmaW5lIGxlYXZlIGl0CisvLyAgICAgdXNpbmcgdGhhdCB0cmFuc2xhdGlvbiwgYnV0IGlmIHRoaXMgc2VjdGlvbiBuZWVkcyBhIGRpZmZlcmVudCB0cmFuc2xhdGlvbiwgCisvLyAgICAgeW91IGNhbiBwcm92aWRlIGl0IGJ5IHJlcGxhY2luZyB0aGUgbGluayAoPDxBbm90aGVyU2VjdGlvbj4+KSB3aXRoIHRoYXQKKy8vICAgICBuZXcgdHJhbnNsYXRpb24uICBGb3IgZXhhbXBsZSAtIGEgIlRhYmxlIiBpbiBzYXkgIkRhdGFQbHVnaW4iIGlzIAorLy8gICAgIHBlcmhhcHMgdHJhbnNsYXRlZCBkaWZmZXJlbnRseSB0byAiVGFibGUiIGluICJGdXJuaXR1cmVQbHVnaW4iLgorLy8KKy8vIFRFU1RJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgcGxhY2UgeW91ciB0cmFuc2xhdGlvbiBmaWxlIG9uIHlvdXIgd2Vic2VydmVyIHNvbWV3aGVyZSBmb3IgZXhhbXBsZQorLy8KKy8vICAgL3hpbmhhL2xhbmcvbWVyZ2VkL2N6LmpzCisvLworLy8gYW5kIHRoZW4gdGVsbCBYaW5oYSB3aGVyZSB0byBnZXQgaXQgKGJlZm9yZSBsb2FkaW5nIFhpbmhhQ29yZS5qcykgYnkgCisvLworLy8gIF9lZGl0b3JfbGFuZyAgICAgICAgICAgICAgPSAnY3onOworLy8gIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSAgPSAnL3hpbmhhL2xhbmcvbWVyZ2VkL2N6LmpzJzsKKy8vCisvLyBYaW5oYSB3aWxsIGxvYWQgeW91ciBuZXcgbGFuZ3VhZ2UgZGVmaW5pdGlvbi4KKy8vCisvLyBTVUJNSVRUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IGNyZWF0ZSBhIFRpY2tldCBvbiB0aGUgWGluaGEgd2Vic2l0ZSBhbmQgYXR0YWNoIHlvdXIgdHJhbnNsYXRpb24gCisvLyBmaWxlLgorLy8KKy8vIFRoZSBYaW5oYSBkZXZlbG9wZXJzIHdpbGwgdGFrZSB5b3VyIGZpbGUgYW5kIHVzZSB0aGUgCisvLyAgICAgY29udHJpYi9sY19zcGxpdF9tZXJnZWRfZmlsZS5waHAKKy8vIHNjcmlwdCB0byBsb2FkIGl0IGludG8gdGhlIFhpbmhhIGRpc3RyaWJ1dGlvbi4KKworeworICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJBYm91dEJveCI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIk8gdMOpdG8gYXBsaWthY2kiCisgICAgfSwKKyAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIlpydcWhaXQiCisgICAgfSwKKyAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICJDb2xvcjogIjogIkJhcnZhIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiTmEgc3TFmWVkIiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICJaYXJvdm5hdCBkbyBzdHJhbiIsCisgICAgICAgICJKdXN0aWZ5IExlZnQiOiAiWmFyb3ZuYXQgZG9sZXZhIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiWmFyb3ZuYXQgZG9wcmF2YSIKKyAgICB9LAorICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAiQ2FuY2VsIjogIlpydcWhaXQiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJacnXFoWl0IiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkVxdWF0aW9uIjogeworICAgICAgICAiQ2FuY2VsIjogIlpydcWhaXQiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgIkFsaWduIjogIlphcm92bsOhbsOtIiwKKyAgICAgICAgIkJhc2VsaW5lIjogIlrDoWtsYWRuw60gbGlua2EiLAorICAgICAgICAiQm9yZGVyIjogIk9icnlzIiwKKyAgICAgICAgIkJvdHRvbSI6ICJEb2zFryIsCisgICAgICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgICAgICJDb2xvciI6ICJCYXJ2YSIsCisgICAgICAgICJIZWlnaHQiOiAiVsO9xaFrYSIsCisgICAgICAgICJIZWlnaHQ6IjogIlbDvcWha2EiLAorICAgICAgICAiTGVmdCI6ICJWbGV2byIsCisgICAgICAgICJNYXJnaW4iOiAiT2tyYWoiLAorICAgICAgICAiTWlkZGxlIjogIk5hIHN0xZllZCIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQYWRkaW5nIjogIk9kc2F6b3bDoW7DrSIsCisgICAgICAgICJSaWdodCI6ICJWcHJhdm8iLAorICAgICAgICAiVG9wIjogIk5haG9ydSIsCisgICAgICAgICJXaWR0aCI6ICLFoMOtxZlrYSIsCisgICAgICAgICJXaWR0aDoiOiAixaDDrcWZa2EiCisgICAgfSwKKyAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICJSZXBsYWNlIHdpdGg6IjogIlphbcSbbml0IHphIgorICAgIH0sCisgICAgIkZvcm1zIjogeworICAgICAgICAiQ2FuY2VsIjogIlpydcWhaXQiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJBZHJlc2Egb2Jyw6F6a3UiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiRnVsbFBhZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgICAgICJEZXNjcmlwdGlvbjoiOiAiUG9waXMiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgICAgICJDZW50ZXIiOiAiTmEgc3TFmWVkIiwKKyAgICAgICAgIkNvbG9yOiI6ICJCYXJ2YSIsCisgICAgICAgICJIZWlnaHQ6IjogIlbDvcWha2EiLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIlZvZG9yb3Zuw6EgxI3DoXJhIiwKKyAgICAgICAgIkxheW91dCI6ICJSb3psb8W+ZW7DrSIsCisgICAgICAgICJMZWZ0IjogIlZsZXZvIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlJpZ2h0IjogIlZwcmF2byIsCisgICAgICAgICJXaWR0aDoiOiAixaDDrcWZa2EiLAorICAgICAgICAicGVyY2VudCI6ICJwcm9jZW50IiwKKyAgICAgICAgInBpeGVscyI6ICJwaXhlbMWvIgorICAgIH0sCisgICAgIkltYWdlTWFuYWdlciI6IHsKKyAgICAgICAgIkJhc2VsaW5lIjogIlrDoWtsYWRuw60gbGlua2EiLAorICAgICAgICAiQm90dG9tIjogIkRvbMWvIiwKKyAgICAgICAgIkNhbmNlbCI6ICJacnXFoWl0IiwKKyAgICAgICAgIkhlaWdodDoiOiAiVsO9xaFrYSIsCisgICAgICAgICJMZWZ0IjogIlZsZXZvIiwKKyAgICAgICAgIk1pZGRsZSI6ICJOYSBzdMWZZWQiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUmlnaHQiOiAiVnByYXZvIiwKKyAgICAgICAgIlRvcCI6ICJOYWhvcnUiLAorICAgICAgICAiV2lkdGg6IjogIsWgw63FmWthIgorICAgIH0sCisgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgIkJhY2tncm91bmQiOiAiUG96YWTDrSIsCisgICAgICAgICJCYXNlbGluZSI6ICJaw6FrbGFkbsOtIGxpbmthIiwKKyAgICAgICAgIkJvcmRlciI6ICJPYnJ5cyIsCisgICAgICAgICJCb3R0b20iOiAiRG9sxa8iLAorICAgICAgICAiQ2VudGVyIjogIk5hIHN0xZllZCIsCisgICAgICAgICJDaGFyIjogIlpuYWsiLAorICAgICAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAiU3RsYcSNZW7DqSBva3JhamUiLAorICAgICAgICAiRkcgQ29sb3IiOiAiQmFydmEgcG9wxZllZMOtIiwKKyAgICAgICAgIkZsb2F0IjogIk9idMOpa8OhbsOtIiwKKyAgICAgICAgIkhlaWdodCI6ICJWw73FoWthIiwKKyAgICAgICAgIkltYWdlIFVSTCI6ICJBZHJlc2Egb2Jyw6F6a3UiLAorICAgICAgICAiSnVzdGlmeSI6ICJEbyBzdHJhbiIsCisgICAgICAgICJMYXlvdXQiOiAiUm96bG/FvmVuw60iLAorICAgICAgICAiTGVmdCI6ICJWbGV2byIsCisgICAgICAgICJNYXJnaW4iOiAiT2tyYWoiLAorICAgICAgICAiTWlkZGxlIjogIk5hIHN0xZllZCIsCisgICAgICAgICJOb25lIjogIsW9w6FkbsOpIiwKKyAgICAgICAgIlBhZGRpbmciOiAiT2RzYXpvdsOhbsOtIiwKKyAgICAgICAgIlJpZ2h0IjogIlZwcmF2byIsCisgICAgICAgICJUZXh0IGFsaWduIjogIlphcm92bsOhbsOtIHRleHR1IiwKKyAgICAgICAgIlRvcCI6ICJOYWhvcnUiLAorICAgICAgICAiVmVydGljYWwgYWxpZ24iOiAiU3Zpc2zDqSB6YXJvdm7DoW7DrSIsCisgICAgICAgICJXaWR0aCI6ICLFoMOtxZlrYSIsCisgICAgICAgICJwZXJjZW50IjogInByb2NlbnQiLAorICAgICAgICAicGl4ZWxzIjogInBpeGVsxa8iCisgICAgfSwKKyAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAiQ2FuY2VsIjogIlpydcWhaXQiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICJCYXNlbGluZSI6ICJaw6FrbGFkbsOtIGxpbmthIiwKKyAgICAgICAgIkJvdHRvbSI6ICJEb2zFryIsCisgICAgICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIkFkcmVzYSBvYnLDoXprdSIsCisgICAgICAgICJMYXlvdXQiOiAiUm96bG/FvmVuw60iLAorICAgICAgICAiTGVmdCI6ICJWbGV2byIsCisgICAgICAgICJNaWRkbGUiOiAiTmEgc3TFmWVkIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlJpZ2h0IjogIlZwcmF2byIsCisgICAgICAgICJTcGFjaW5nIjogIk1lemVyeSIsCisgICAgICAgICJUb3AiOiAiTmFob3J1IgorICAgIH0sCisgICAgIkluc2VydE1hcnF1ZWUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgICAgICJIZWlnaHQ6IjogIlbDvcWha2EiLAorICAgICAgICAiTGVmdCI6ICJWbGV2byIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJSaWdodCI6ICJWcHJhdm8iLAorICAgICAgICAiV2lkdGg6IjogIsWgw63FmWthIgorICAgIH0sCisgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIKKyAgICB9LAorICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAiQmFzZWxpbmUiOiAiWsOha2xhZG7DrSBsaW5rYSIsCisgICAgICAgICJCb3R0b20iOiAiRG9sxa8iLAorICAgICAgICAiQ2FuY2VsIjogIlpydcWhaXQiLAorICAgICAgICAiSGVpZ2h0OiI6ICJWw73FoWthIiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiQWRyZXNhIG9icsOhemt1IiwKKyAgICAgICAgIkxheW91dCI6ICJSb3psb8W+ZW7DrSIsCisgICAgICAgICJMZWZ0IjogIlZsZXZvIiwKKyAgICAgICAgIk1pZGRsZSI6ICJOYSBzdMWZZWQiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUmlnaHQiOiAiVnByYXZvIiwKKyAgICAgICAgIlNwYWNpbmciOiAiTWV6ZXJ5IiwKKyAgICAgICAgIlRvcCI6ICJOYWhvcnUiLAorICAgICAgICAiV2lkdGg6IjogIsWgw63FmWthIgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJacnXFoWl0IgorICAgIH0sCisgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAiQmFzZWxpbmUiOiAiWsOha2xhZG7DrSBsaW5rYSIsCisgICAgICAgICJCb3JkZXIiOiAiT2JyeXMiLAorICAgICAgICAiQm90dG9tIjogIkRvbMWvIiwKKyAgICAgICAgIkNhbmNlbCI6ICJacnXFoWl0IiwKKyAgICAgICAgIkNhcHRpb24iOiAiVGl0dWxlayIsCisgICAgICAgICJJbnNlcnQgVGFibGUiOiAiVmxvxb5pdCB0YWJ1bGt1IiwKKyAgICAgICAgIkxheW91dCI6ICJSb3psb8W+ZW7DrSIsCisgICAgICAgICJMZWZ0IjogIlZsZXZvIiwKKyAgICAgICAgIk1pZGRsZSI6ICJOYSBzdMWZZWQiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUGVyY2VudCI6ICJwcm9jZW50IiwKKyAgICAgICAgIlBpeGVscyI6ICJwaXhlbMWvIiwKKyAgICAgICAgIlJpZ2h0IjogIlZwcmF2byIsCisgICAgICAgICJTcGFjaW5nIjogIk1lemVyeSIsCisgICAgICAgICJUb3AiOiAiTmFob3J1IiwKKyAgICAgICAgIldpZHRoOiI6ICLFoMOtxZlrYSIKKyAgICB9LAorICAgICJMaW5rZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAiQ2FuY2VsIjogIlpydcWhaXQiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJacnXFoWl0IgorICAgIH0sCisgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJacnXFoWl0IiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIlpydcWhaXQiCisgICAgfSwKKyAgICAiUXVpY2tUYWciOiB7CisgICAgICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIKKyAgICB9LAorICAgICJTZXRJZCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJacnXFoWl0IiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJacnXFoWl0IiwKKyAgICAgICAgIkRpY3Rpb25hcnkiOiAiU2xvdm7DrWsiLAorICAgICAgICAiRmluaXNoZWQgbGlzdCBvZiBtaXNwZWxsZWQgd29yZHMiOiAiRG9rb27EjWVuIHNlem5hbSBjaHlibsO9Y2ggc2xvdiIsCisgICAgICAgICJJIHdpbGwgb3BlbiBpdCBpbiBhIG5ldyBwYWdlLiI6ICJCdWRlIG90ZXbFmWVuIGplaiB2IG5vdsOpIHN0csOhbmNlLiIsCisgICAgICAgICJJZ25vcmUiOiAiSWdub3JvdmF0IiwKKyAgICAgICAgIklnbm9yZSBhbGwiOiAiSWdub3JvdmF0IHbFoWUiLAorICAgICAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIlBvZGxlIHp2b2xlbsOpaG8gc2xvdm7DrWt1IG5lYnlsYSBuYWxlemVuYSDFvsOhZG7DoSBjaHlibsOhIHNsb3ZhLiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPcmlnaW5hbCB3b3JkIjogIlDFr3ZvZG7DrSBzbG92byIsCisgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIlByb3PDrW0gcG90dnLEj3RlIG90ZXbFmWVuw60gdG9ob3RvIG9ka2F6dSIsCisgICAgICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiUHJvc8OtbSDEjWVrZWp0ZS4gS29tdW5pa3VhY2UgcyBrb250cm9sb3Ugc3Byw6F2bm9zdGkgc2xvdi4iLAorICAgICAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAiUHJvc8OtbSDEjWVrZWp0ZTogem3Em25hIGFkcmVzw6HFmWUgbmEiLAorICAgICAgICAiUmUtY2hlY2siOiAiUMWZZWtvbnRyb2xvdmF0IiwKKyAgICAgICAgIlJlcGxhY2UiOiAiWmFtxJtuaXQiLAorICAgICAgICAiUmVwbGFjZSBhbGwiOiAiWmFtxJtuaXQgdsWhZWNobm8iLAorICAgICAgICAiUmVwbGFjZSB3aXRoIjogIlphbcSbbml0IHphIiwKKyAgICAgICAgIlNwZWxsLWNoZWNrIjogIktvbnRyb2xhIHNwcsOhdm5vc3RpIHNsb3YiLAorICAgICAgICAiU3VnZ2VzdGlvbnMiOiAiRG9wb3J1xI1lbsOtIiwKKyAgICAgICAgIlRoaXMgd2lsbCBkcm9wIGNoYW5nZXMgYW5kIHF1aXQgc3BlbGwgY2hlY2tlci4gIFBsZWFzZSBjb25maXJtLiI6ICJabcSbbnkgYnVkb3UgenJ1xaFlbnkgYSBrb250cm9sYSBzcHLDoXZub3N0aSBzbG92IHVrb27EjWVuYS4gUHJvc8OtbSBwb3R2csSPdGUuIgorICAgIH0sCisgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICJBbGwgZm91ciBzaWRlcyI6ICJWxaFlY2hueSDEjXR5xZlpIHN0cmFueSIsCisgICAgICAgICJCb3JkZXJzIjogIk9icnlzeSIsCisgICAgICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgICAgICJDYXB0aW9uIjogIlRpdHVsZWsiLAorICAgICAgICAiQ2VsbCBQcm9wZXJ0aWVzIjogIlZsYXN0bm9zdGkgYnXFiGt5IiwKKyAgICAgICAgIkNlbGwgcHJvcGVydGllcyI6ICJWbGFzdG5vc3RpIGJ1xYhreSIsCisgICAgICAgICJEZWxldGUgY2VsbCI6ICJTbWF6YXQgYnXFiGt1IiwKKyAgICAgICAgIkRlbGV0ZSBjb2x1bW4iOiAiU21hemF0IHNsb3VwZWMiLAorICAgICAgICAiRGVsZXRlIHJvdyI6ICJTbWF6YXQgxZnDoWRlayIsCisgICAgICAgICJEZXNjcmlwdGlvbiI6ICJQb3BpcyIsCisgICAgICAgICJGcmFtZXMiOiAiUsOhbWXEjWt5IiwKKyAgICAgICAgIkluc2VydCBjZWxsIGFmdGVyIjogIlZsb8W+aXQgYnXFiGt1IHphIiwKKyAgICAgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICJWbG/Fvml0IGJ1xYhrdSBwxZllZCIsCisgICAgICAgICJJbnNlcnQgY29sdW1uIGFmdGVyIjogIlZsb8W+aXQgc2xvdXBlYyB6YSIsCisgICAgICAgICJJbnNlcnQgY29sdW1uIGJlZm9yZSI6ICJWbG/Fvml0IHNsb3VwZWMgcMWZZWQiLAorICAgICAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICJTbWF6YXQgxZnDoWRlayBwb2QiLAorICAgICAgICAiSW5zZXJ0IHJvdyBiZWZvcmUiOiAiU21hemF0IMWZw6FkZWsgbmFkIiwKKyAgICAgICAgIk1lcmdlIGNlbGxzIjogIlNwb2ppdCBidcWIa3kiLAorICAgICAgICAiTm8gcnVsZXMiOiAixb3DoWRuw6kgxI3DoXJ5IiwKKyAgICAgICAgIk5vIHNpZGVzIjogIsW9w6FkbsOpIHN0cmFueSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQYWRkaW5nIjogIk9kc2F6b3bDoW7DrSIsCisgICAgICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiUHJvc8OtbSBrbGlrbsSbdGUgZG8gbsSba3RlcsOpIGJ1xYhreSIsCisgICAgICAgICJSb3cgUHJvcGVydGllcyI6ICJWbGFzdG5vc3RpIMWZw6Fka3UiLAorICAgICAgICAiUm93IHByb3BlcnRpZXMiOiAiVmxhc3Rub3N0aSDFmcOhZGt1IiwKKyAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAixIzDoXJ5IG1lemkgdsWhZW1pIMWZw6Fka3kgaSBzbG91cGNpIiwKKyAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gY29sdW1ucyBvbmx5IjogIsSMw6FyeSBwb3V6ZSBtZXppIHNsb3VwY2kiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiByb3dzIG9ubHkiOiAixIzDoXJ5IHBvdXplIG1lemkgxZnDoWRreSIsCisgICAgICAgICJTcGFjaW5nIjogIk1lemVyeSIsCisgICAgICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogIk1lemVyeSBhIG9kc2F6b3bDoW7DrSIsCisgICAgICAgICJTcGxpdCBjb2x1bW4iOiAiUm96ZMSbbGl0IHNsb3VwZWMiLAorICAgICAgICAiU3BsaXQgcm93IjogIlJvemTEm2xpdCDFmcOhZGVrIiwKKyAgICAgICAgIlN1bW1hcnkiOiAiU2hybnV0w60iLAorICAgICAgICAiVGFibGUgUHJvcGVydGllcyI6ICJWbGFzdG5vc3RpIHRhYnVsa3kiLAorICAgICAgICAiVGFibGUgcHJvcGVydGllcyI6ICJWbGFzdG5vc3RpIHRhYnVsa3kiLAorICAgICAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAiUG91emUgc3BvZG7DrSBzdHJhbmEiLAorICAgICAgICAiVGhlIGxlZnQtaGFuZCBzaWRlIG9ubHkiOiAiUG91emUgbGV2w6Egc3RyYW5hIiwKKyAgICAgICAgIlRoZSByaWdodCBhbmQgbGVmdCBzaWRlcyBvbmx5IjogIlBvdXplIGxldsOhIGEgcHJhdsOhIHN0cmFuYSIsCisgICAgICAgICJUaGUgcmlnaHQtaGFuZCBzaWRlIG9ubHkiOiAiUG91emUgcHJhdsOhIHN0cmFuYSIsCisgICAgICAgICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSI6ICJQb3V6ZSBob3Juw60gYSBkb2xuw60gc3RyYW5hIiwKKyAgICAgICAgIlRoZSB0b3Agc2lkZSBvbmx5IjogIlBvdXplIGhvcm7DrSBzdHJhbmEiLAorICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY2VsbCBpbiByb3cuIjogIlhpbmhhIHpiYWLEm2xlIG9kbcOtdMOhIHNtYXphdCBwb3NsZWRuw60gYnXFiGt1IHYgxZnDoWRrdS4iLAorICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICJYaW5oYSB6YmFixJtsZSBvZG3DrXTDoSBzbWF6YXQgcG9zbGVkbsOtIHNsb3VwZWMgdiB0YWJ1bGNlLiIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIlhpbmhhIHpiYWLEm2xlIG9kbcOtdMOhIHNtYXphdCBwb3NsZWRuw60gxZnDoWRlayB2IHRhYnVsY2UuIiwKKyAgICAgICAgInBpeGVscyI6ICJwaXhlbMWvIgorICAgIH0sCisgICAgIlRlbXBsYXRlIjogeworICAgICAgICAiQ2FuY2VsIjogIlpydcWhaXQiCisgICAgfSwKKyAgICAiVW5Gb3JtYXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJYaW5oYSI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIk8gdMOpdG8gYXBsaWthY2kiLAorICAgICAgICAiQmFja2dyb3VuZCBDb2xvciI6ICJCYXJ2YSBwb3phZMOtIiwKKyAgICAgICAgIkJvbGQiOiAiVHXEjW7EmyIsCisgICAgICAgICJCdWxsZXRlZCBMaXN0IjogIk9kcsOhxb5reSIsCisgICAgICAgICJDb3B5IHNlbGVjdGlvbiI6ICJLb3DDrXJvdmF0IiwKKyAgICAgICAgIkN1cnJlbnQgc3R5bGUiOiAiWnZvbGVuw70gc3R5bCIsCisgICAgICAgICJDdXQgc2VsZWN0aW9uIjogIlZ5am1vdXQiLAorICAgICAgICAiRGVjcmVhc2UgSW5kZW50IjogIlDFmWVkc2FkaXQiLAorICAgICAgICAiRm9udCBDb2xvciI6ICJCYXJ2YSBww61zbWEiLAorICAgICAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiTsOhcG92xJtkYSBhcGxpa2FjZSIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiVm9kb3Jvdm7DoSDEjcOhcmEiLAorICAgICAgICAiSW5jcmVhc2UgSW5kZW50IjogIk9kc2FkaXQiLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIlZsb8W+aXQgdGFidWxrdSIsCisgICAgICAgICJJbnNlcnQgV2ViIExpbmsiOiAiVmxvxb5pdCBvZGtheiIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIlZsb8W+aXQgb2Jyw6F6ZWsiLAorICAgICAgICAiSXRhbGljIjogIkt1cnrDrXZhIiwKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogIk5hIHN0xZllZCIsCisgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAiWmFyb3ZuYXQgZG8gc3RyYW4iLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIlphcm92bmF0IGRvbGV2YSIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIlphcm92bmF0IGRvcHJhdmEiLAorICAgICAgICAiT3JkZXJlZCBMaXN0IjogIlNlem5hbSIsCisgICAgICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJWbG/Fvml0IiwKKyAgICAgICAgIlBhdGgiOiAiQ2VzdGEiLAorICAgICAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiT3Bha3VqZSBwb3NsZWRuw60gYWtjaSIsCisgICAgICAgICJTdHJpa2V0aHJvdWdoIjogIlDFmWXFoWtydG51dMOtIiwKKyAgICAgICAgIlN1YnNjcmlwdCI6ICJEb2xuw60gaW5kZXgiLAorICAgICAgICAiU3VwZXJzY3JpcHQiOiAiSG9ybsOtIGluZGV4IiwKKyAgICAgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJQxZllcG5vdXQgSFRNTCIsCisgICAgICAgICJVbmRlcmxpbmUiOiAiUG9kdHLFvmVuw60iLAorICAgICAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiVnLDoXTDrSBwb3NsZWRuw60gYWtjaSIsCisgICAgICAgICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiSnN0ZSB2IFRFWFRPVsOJTSBSRcW9SU1VLiAgUG91xb5panRlIHRsYcSNw610a28gWzw+XSBwcm8gcMWZZXBudXTDrSBkbyBXWVNJV0lHLiIKKyAgICB9LAorICAgICJfX05FV19UUkFOU0xBVElPTlNfXyI6IHsKKyAgICAgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgICAgICJBYmJyZXZpYXRpb24iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiIiwKKyAgICAgICAgICAgICJFeHBhbnNpb246IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkFib3V0Qm94IjogeworICAgICAgICAgICAgIkNsb3NlIjogIjw8WGluaGE+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJDb3VudGVyIjogeworICAgICAgICAgICAgIi4uLiBpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIkNoYXJzIjogIiIsCisgICAgICAgICAgICAiSFRNTCI6ICIiLAorICAgICAgICAgICAgIldvcmRzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJhY3Rlck1hcCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgc3BlY2lhbCBjaGFyYWN0ZXIiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICAgICAiQ2xpY2sgYSBjb2xvci4uLiI6ICIiLAorICAgICAgICAgICAgIlNhbXBsZSI6ICIiLAorICAgICAgICAgICAgIldlYiBTYWZlOiAiOiAiIiwKKyAgICAgICAgICAgICJDbG9zZSI6ICI8PFhpbmhhPj4iCisgICAgICAgIH0sCisgICAgICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgICAgICJfRGVsZXRlIFJvdyI6ICIiLAorICAgICAgICAgICAgIl9JbWFnZSBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiX01vZGlmeSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1JlbW92ZSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1RhYmxlIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJDX2VsbCBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiQ2hlY19rIExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJDb3B5IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIGEgbGluayI6ICIiLAorICAgICAgICAgICAgIkN1cnJlbnQgVVJMIGlzIjogIiIsCisgICAgICAgICAgICAiQ3V0IjogIiIsCisgICAgICAgICAgICAiRGVfbGV0ZSBDb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgQ2VsbCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIiIsCisgICAgICAgICAgICAiSG93IGRpZCB5b3UgZ2V0IGhlcmU/IChQbGVhc2UgcmVwb3J0ISkiOiAiIiwKKyAgICAgICAgICAgICJJX25zZXJ0IFJvdyBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYWZ0ZXIgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJMaW5rIHBvaW50cyB0bzoiOiAiIiwKKyAgICAgICAgICAgICJNYWtlIGxpbl9rLi4uIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiUGFzdGUiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGVsZW1lbnQ6IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJSb193IFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBpbWFnZSBwcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIFJvdyBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlVubGluayB0aGUgY3VycmVudCBlbGVtZW50IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIiIsCisgICAgICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICIiLAorICAgICAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiIiwKKyAgICAgICAgICAgICJPdGhlciI6ICIiLAorICAgICAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICIiLAorICAgICAgICAgICAgIlRhcmdldDoiOiAiIiwKKyAgICAgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogIiIsCisgICAgICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICIiLAorICAgICAgICAgICAgIlVSTDoiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGluZyBhIGxpbmsiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRGVmaW5pdGlvbkxpc3QiOiB7CisgICAgICAgICAgICAiZGVmaW5pdGlvbiBkZXNjcmlwdGlvbiI6ICIiLAorICAgICAgICAgICAgImRlZmluaXRpb24gbGlzdCI6ICIiLAorICAgICAgICAgICAgImRlZmluaXRpb24gdGVybSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEaWFsb2dzIjogeworICAgICAgICAgICAgIlNvbWUgVGV4dCBIZXJlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkR5bmFtaWNDU1MiOiB7CisgICAgICAgICAgICAiQ2hvb3NlIHN0eWxlc2hlZXQiOiAiIiwKKyAgICAgICAgICAgICJEZWZhdWx0IjogIiIsCisgICAgICAgICAgICAiVW5kZWZpbmVkIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVkaXRUYWciOiB7CisgICAgICAgICAgICAiRWRpdCBIVE1MIGZvciBzZWxlY3RlZCB0ZXh0IjogIiIsCisgICAgICAgICAgICAiRWRpdCBUYWcgQnkgUGVnIjogIiIsCisgICAgICAgICAgICAiVGFnIEVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgICAgICIhPSI6ICIiLAorICAgICAgICAgICAgIiFpbiI6ICIiLAorICAgICAgICAgICAgIiZndDstIjogIiIsCisgICAgICAgICAgICAiJmd0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZsdDt4Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgIWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAuYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDBgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAzYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDRgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA2YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDdgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA5YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYGVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyZuYnNwO2AxYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgK3s6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC06XFwgYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Atezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgQ2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgY29zYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BsbmAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgcGlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BzaW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRhbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGltZXNgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJnF1b3Q7dGV4dCZxdW90OyI6ICIiLAorICAgICAgICAgICAgIicrZm9ybXVsYSsnIjogIiIsCisgICAgICAgICAgICAiKChuKSwoaykpIjogIiIsCisgICAgICAgICAgICAiKHgrMSkvKHgtMSkiOiAiIiwKKyAgICAgICAgICAgICIqIjogIiIsCisgICAgICAgICAgICAiKioiOiAiIiwKKyAgICAgICAgICAgICIrLSI6ICIiLAorICAgICAgICAgICAgIi0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiLSZsdDsiOiAiIiwKKyAgICAgICAgICAgICItOiI6ICIiLAorICAgICAgICAgICAgIi09IjogIiIsCisgICAgICAgICAgICAiLy8iOiAiIiwKKyAgICAgICAgICAgICIvXyI6ICIiLAorICAgICAgICAgICAgIjouIjogIiIsCisgICAgICAgICAgICAiPSZndDsiOiAiIiwKKyAgICAgICAgICAgICJAIjogIiIsCisgICAgICAgICAgICAiW1thLGJdLFtjLGRdXSI6ICIiLAorICAgICAgICAgICAgIlxcXFwiOiAiIiwKKyAgICAgICAgICAgICJcXG5DbGljayBpbiB0aGUgYm94IHRvIHVzZSB5b3VyIGtleWJvYXJkIG9yIHVzZSB0aGUgYnV0dG9uc1xcbiI6ICIiLAorICAgICAgICAgICAgIl5eIjogIiIsCisgICAgICAgICAgICAiXl5eIjogIiIsCisgICAgICAgICAgICAiX198IjogIiIsCisgICAgICAgICAgICAiX3xfIjogIiIsCisgICAgICAgICAgICAiYCE9YCI6ICIiLAorICAgICAgICAgICAgImAhaW5gIjogIiIsCisgICAgICAgICAgICAiYCZhbmQ7YCI6ICIiLAorICAgICAgICAgICAgImAmY2FwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmN1cDtgIjogIiIsCisgICAgICAgICAgICAiYCZndDstYCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0O3gmZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmb3I7YCI6ICIiLAorICAgICAgICAgICAgImAmcXVvdDt0ZXh0JnF1b3Q7YCI6ICIiLAorICAgICAgICAgICAgImAoKG4pLChrKSlgIjogIiIsCisgICAgICAgICAgICAiYCh4KzEpLyh4LTEpYCI6ICIiLAorICAgICAgICAgICAgImAqKmAiOiAiIiwKKyAgICAgICAgICAgICJgKmAiOiAiIiwKKyAgICAgICAgICAgICJgKy1gIjogIiIsCisgICAgICAgICAgICAiYC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAtJmx0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLTpgIjogIiIsCisgICAgICAgICAgICAiYC09YCI6ICIiLAorICAgICAgICAgICAgImAvL2AiOiAiIiwKKyAgICAgICAgICAgICJgL19gIjogIiIsCisgICAgICAgICAgICAiYDouYCI6ICIiLAorICAgICAgICAgICAgImA9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgQGAiOiAiIiwKKyAgICAgICAgICAgICJgW1thLGJdLFtjLGRdXWAiOiAiIiwKKyAgICAgICAgICAgICJgXFxcXGAiOiAiIiwKKyAgICAgICAgICAgICJgX198YCI6ICIiLAorICAgICAgICAgICAgImBffF9gIjogIiIsCisgICAgICAgICAgICAiYEFBYCI6ICIiLAorICAgICAgICAgICAgImBhbGVwaGAiOiAiIiwKKyAgICAgICAgICAgICJgYWxwaGFgIjogIiIsCisgICAgICAgICAgICAiYGFuZGAiOiAiIiwKKyAgICAgICAgICAgICJgYmFyYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiZXRhYCI6ICIiLAorICAgICAgICAgICAgImBDQ2AiOiAiIiwKKyAgICAgICAgICAgICJgY2NhYCI6ICIiLAorICAgICAgICAgICAgImBjaGlgIjogIiIsCisgICAgICAgICAgICAiYGRhcnJgIjogIiIsCisgICAgICAgICAgICAiYGRkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkZWxgIjogIiIsCisgICAgICAgICAgICAiYERlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGlhbW9uZGAiOiAiIiwKKyAgICAgICAgICAgICJgZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZHkvZHhgIjogIiIsCisgICAgICAgICAgICAiYEVFYCI6ICIiLAorICAgICAgICAgICAgImBlcHNpYCI6ICIiLAorICAgICAgICAgICAgImBldGFgIjogIiIsCisgICAgICAgICAgICAiYGZyYWAiOiAiIiwKKyAgICAgICAgICAgICJgR2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBncmFkYCI6ICIiLAorICAgICAgICAgICAgImBoYXJyYCI6ICIiLAorICAgICAgICAgICAgImBoQXJyYCI6ICIiLAorICAgICAgICAgICAgImBoYXRhYCI6ICIiLAorICAgICAgICAgICAgImBpZmAiOiAiIiwKKyAgICAgICAgICAgICJgaW5gIjogIiIsCisgICAgICAgICAgICAiYGludGAiOiAiIiwKKyAgICAgICAgICAgICJgaW90YWAiOiAiIiwKKyAgICAgICAgICAgICJga2FwcGFgIjogIiIsCisgICAgICAgICAgICAiYExhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBsQXJyYCI6ICIiLAorICAgICAgICAgICAgImBsYXJyYCI6ICIiLAorICAgICAgICAgICAgImBsaW1fKHgtJmd0O29vKWAiOiAiIiwKKyAgICAgICAgICAgICJgbG9nYCI6ICIiLAorICAgICAgICAgICAgImBtdWAiOiAiIiwKKyAgICAgICAgICAgICJgTk5gIjogIiIsCisgICAgICAgICAgICAiYG5uYCI6ICIiLAorICAgICAgICAgICAgImBub3RgIjogIiIsCisgICAgICAgICAgICAiYG51YCI6ICIiLAorICAgICAgICAgICAgImBvK2AiOiAiIiwKKyAgICAgICAgICAgICJgby5gIjogIiIsCisgICAgICAgICAgICAiYE8vYCI6ICIiLAorICAgICAgICAgICAgImBvaW50YCI6ICIiLAorICAgICAgICAgICAgImBvbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgT21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYG9vYCI6ICIiLAorICAgICAgICAgICAgImBvcmAiOiAiIiwKKyAgICAgICAgICAgICJgb3hgIjogIiIsCisgICAgICAgICAgICAiYHBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGhpYCI6ICIiLAorICAgICAgICAgICAgImBQaWAiOiAiIiwKKyAgICAgICAgICAgICJgcGlgIjogIiIsCisgICAgICAgICAgICAiYHByb2RgIjogIiIsCisgICAgICAgICAgICAiYHByb3BgIjogIiIsCisgICAgICAgICAgICAiYFBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgcHNpYCI6ICIiLAorICAgICAgICAgICAgImBRUWAiOiAiIiwKKyAgICAgICAgICAgICJgcXVhZGAiOiAiIiwKKyAgICAgICAgICAgICJgckFycmAiOiAiIiwKKyAgICAgICAgICAgICJgcmhvYCI6ICIiLAorICAgICAgICAgICAgImByb290KG4pKHgpYCI6ICIiLAorICAgICAgICAgICAgImBSUmAiOiAiIiwKKyAgICAgICAgICAgICJgc2ZhYCI6ICIiLAorICAgICAgICAgICAgImBTaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgc2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYHNxcnQoeClgIjogIiIsCisgICAgICAgICAgICAiYHNxdWFyZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3RhY2tyZWwoLSZndDspKCspYCI6ICIiLAorICAgICAgICAgICAgImBzdWJgIjogIiIsCisgICAgICAgICAgICAiYHN1YmVgIjogIiIsCisgICAgICAgICAgICAiYHN1bWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwYCI6ICIiLAorICAgICAgICAgICAgImBzdXBlYCI6ICIiLAorICAgICAgICAgICAgImB0YXVgIjogIiIsCisgICAgICAgICAgICAiYFRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImB0aGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgVFRgIjogIiIsCisgICAgICAgICAgICAiYHR0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdWFycmAiOiAiIiwKKyAgICAgICAgICAgICJgdWxhYCI6ICIiLAorICAgICAgICAgICAgImB1cHNpbG9uYCI6ICIiLAorICAgICAgICAgICAgImB1dWAiOiAiIiwKKyAgICAgICAgICAgICJgdmVjYWAiOiAiIiwKKyAgICAgICAgICAgICJgdnZgIjogIiIsCisgICAgICAgICAgICAiYHhfKG1uKWAiOiAiIiwKKyAgICAgICAgICAgICJgWGlgIjogIiIsCisgICAgICAgICAgICAiYHhpYCI6ICIiLAorICAgICAgICAgICAgImB4eGAiOiAiIiwKKyAgICAgICAgICAgICJgemV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgWlpgIjogIiIsCisgICAgICAgICAgICAiYHwtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgfC0tYCI6ICIiLAorICAgICAgICAgICAgImB8PT1gIjogIiIsCisgICAgICAgICAgICAiYHxfX2AiOiAiIiwKKyAgICAgICAgICAgICJgfH5gIjogIiIsCisgICAgICAgICAgICAiYH49YCI6ICIiLAorICAgICAgICAgICAgImB+fGAiOiAiIiwKKyAgICAgICAgICAgICJgfn5gIjogIiIsCisgICAgICAgICAgICAiQUEiOiAiIiwKKyAgICAgICAgICAgICJhbGVwaCI6ICIiLAorICAgICAgICAgICAgImFscGhhIjogIiIsCisgICAgICAgICAgICAiYW5kIjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoIEZvcm11bGEgSW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGhNTCBFeGFtcGxlIjogIiIsCisgICAgICAgICAgICAiYmFyYSI6ICIiLAorICAgICAgICAgICAgIkJhc2VkIG9uIEFTQ0lJTWF0aE1MIGJ5IjogIiIsCisgICAgICAgICAgICAiYmJhIjogIiIsCisgICAgICAgICAgICAiYmJiYSI6ICIiLAorICAgICAgICAgICAgImJldGEiOiAiIiwKKyAgICAgICAgICAgICJDQyI6ICIiLAorICAgICAgICAgICAgImNjYSI6ICIiLAorICAgICAgICAgICAgImNoaSI6ICIiLAorICAgICAgICAgICAgImRhcnIiOiAiIiwKKyAgICAgICAgICAgICJkZG90YSI6ICIiLAorICAgICAgICAgICAgImRlbCI6ICIiLAorICAgICAgICAgICAgImRlbHRhIjogIiIsCisgICAgICAgICAgICAiRGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJkaWFtb25kIjogIiIsCisgICAgICAgICAgICAiZG90YSI6ICIiLAorICAgICAgICAgICAgImR5L2R4IjogIiIsCisgICAgICAgICAgICAiRUUiOiAiIiwKKyAgICAgICAgICAgICJlcHNpIjogIiIsCisgICAgICAgICAgICAiZXRhIjogIiIsCisgICAgICAgICAgICAiRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQXNjaWlNYXRoTUwgdmlzaXQgdGhpcyBwYWdlOiI6ICIiLAorICAgICAgICAgICAgIkZvcm11bGEgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiZnJhIjogIiIsCisgICAgICAgICAgICAiZ2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJHYW1tYSI6ICIiLAorICAgICAgICAgICAgImdyYWQiOiAiIiwKKyAgICAgICAgICAgICJoQXJyIjogIiIsCisgICAgICAgICAgICAiaGFyciI6ICIiLAorICAgICAgICAgICAgImhhdGEiOiAiIiwKKyAgICAgICAgICAgICJpZiI6ICIiLAorICAgICAgICAgICAgImluIjogIiIsCisgICAgICAgICAgICAiSW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJpbnQiOiAiIiwKKyAgICAgICAgICAgICJpbnRfYV5iZih4KWR4IjogIiIsCisgICAgICAgICAgICAiaW90YSI6ICIiLAorICAgICAgICAgICAgImthcHBhIjogIiIsCisgICAgICAgICAgICAiTGFtYmRhIjogIiIsCisgICAgICAgICAgICAibGFtYmRhIjogIiIsCisgICAgICAgICAgICAibGFyciI6ICIiLAorICAgICAgICAgICAgImxBcnIiOiAiIiwKKyAgICAgICAgICAgICJsaW1fKHgtJmd0O29vKSI6ICIiLAorICAgICAgICAgICAgIm11IjogIiIsCisgICAgICAgICAgICAiTk4iOiAiIiwKKyAgICAgICAgICAgICJubiI6ICIiLAorICAgICAgICAgICAgIm5ubiI6ICIiLAorICAgICAgICAgICAgIm5vdCI6ICIiLAorICAgICAgICAgICAgIm51IjogIiIsCisgICAgICAgICAgICAibysiOiAiIiwKKyAgICAgICAgICAgICJvLiI6ICIiLAorICAgICAgICAgICAgIk8vIjogIiIsCisgICAgICAgICAgICAib2ludCI6ICIiLAorICAgICAgICAgICAgIk9tZWdhIjogIiIsCisgICAgICAgICAgICAib21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJvbyI6ICIiLAorICAgICAgICAgICAgIm9yIjogIiIsCisgICAgICAgICAgICAib3giOiAiIiwKKyAgICAgICAgICAgICJwaGkiOiAiIiwKKyAgICAgICAgICAgICJQaGkiOiAiIiwKKyAgICAgICAgICAgICJwaSI6ICIiLAorICAgICAgICAgICAgIlBpIjogIiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICIiLAorICAgICAgICAgICAgInByb2QiOiAiIiwKKyAgICAgICAgICAgICJwcm9wIjogIiIsCisgICAgICAgICAgICAicHNpIjogIiIsCisgICAgICAgICAgICAiUHNpIjogIiIsCisgICAgICAgICAgICAiUVEiOiAiIiwKKyAgICAgICAgICAgICJxdWFkIjogIiIsCisgICAgICAgICAgICAickFyciI6ICIiLAorICAgICAgICAgICAgInJobyI6ICIiLAorICAgICAgICAgICAgInJvb3QobikoeCkiOiAiIiwKKyAgICAgICAgICAgICJSUiI6ICIiLAorICAgICAgICAgICAgInNmYSI6ICIiLAorICAgICAgICAgICAgInNpZ21hIjogIiIsCisgICAgICAgICAgICAiU2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJzcXJ0KHgpIjogIiIsCisgICAgICAgICAgICAic3F1YXJlIjogIiIsCisgICAgICAgICAgICAic3RhY2tyZWwoLSZndDspKCspIjogIiIsCisgICAgICAgICAgICAic3ViIjogIiIsCisgICAgICAgICAgICAic3ViZSI6ICIiLAorICAgICAgICAgICAgInN1bSI6ICIiLAorICAgICAgICAgICAgInN1bV8obj0xKV5vbyI6ICIiLAorICAgICAgICAgICAgInN1cCI6ICIiLAorICAgICAgICAgICAgInN1cGUiOiAiIiwKKyAgICAgICAgICAgICJ0YXUiOiAiIiwKKyAgICAgICAgICAgICJUaGV0YSI6ICIiLAorICAgICAgICAgICAgInRoZXRhIjogIiIsCisgICAgICAgICAgICAiVFQiOiAiIiwKKyAgICAgICAgICAgICJ0dGEiOiAiIiwKKyAgICAgICAgICAgICJ1YXJyIjogIiIsCisgICAgICAgICAgICAidWxhIjogIiIsCisgICAgICAgICAgICAidXBzaWxvbiI6ICIiLAorICAgICAgICAgICAgInV1IjogIiIsCisgICAgICAgICAgICAidXV1IjogIiIsCisgICAgICAgICAgICAidmVjYSI6ICIiLAorICAgICAgICAgICAgInZ2IjogIiIsCisgICAgICAgICAgICAidnZ2IjogIiIsCisgICAgICAgICAgICAieF4obStuKSI6ICIiLAorICAgICAgICAgICAgInhfKG1uKSI6ICIiLAorICAgICAgICAgICAgIlhpIjogIiIsCisgICAgICAgICAgICAieGkiOiAiIiwKKyAgICAgICAgICAgICJ4eCI6ICIiLAorICAgICAgICAgICAgInpldGEiOiAiIiwKKyAgICAgICAgICAgICJaWiI6ICIiLAorICAgICAgICAgICAgInwtJmd0OyI6ICIiLAorICAgICAgICAgICAgInwtLSI6ICIiLAorICAgICAgICAgICAgInw9PSI6ICIiLAorICAgICAgICAgICAgInxfXyI6ICIiLAorICAgICAgICAgICAgInx+IjogIiIsCisgICAgICAgICAgICAifj0iOiAiIiwKKyAgICAgICAgICAgICJ+fCI6ICIiLAorICAgICAgICAgICAgIn5+IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZhbmN5U2VsZWN0cyI6IHsKKyAgICAgICAgICAgICInK29wdC50ZXh0KyciOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiJztcclxuICB2YXIgdGFnYyA9ICciOiAiIiwKKyAgICAgICAgICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAiIiwKKyAgICAgICAgICAgICJDbGVhciI6ICIiLAorICAgICAgICAgICAgIkRvbmUiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgdGV4dCB5b3Ugd2FudCB0byBmaW5kIjogIiIsCisgICAgICAgICAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgImZvdW5kIGl0ZW0iOiAiIiwKKyAgICAgICAgICAgICJmb3VuZCBpdGVtcyI6ICIiLAorICAgICAgICAgICAgIkhpZ2hsaWdodCI6ICIiLAorICAgICAgICAgICAgIkluZm9ybSBhIHJlcGxhY2VtZW50IHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJOZXh0IjogIiIsCisgICAgICAgICAgICAibm90IGZvdW5kIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICIiLAorICAgICAgICAgICAgInJlcGxhY2VkIGl0ZW0iOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtcyI6ICIiLAorICAgICAgICAgICAgIlNlYXJjaCBmb3I6IjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSBhbGwgb2NjdXJyZW5jZXMiOiAiIiwKKyAgICAgICAgICAgICJTdWJzdGl0dXRlIHRoaXMgb2NjdXJyZW5jZT8iOiAiIiwKKyAgICAgICAgICAgICJVbmRvIjogIiIsCisgICAgICAgICAgICAiV2hvbGUgd29yZHMgb25seSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGb3JtT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJFbnRlciB0aGUgbmFtZSBmb3IgbmV3IG9wdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIGNoZWNrIGJveC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBGb3JtLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG11bHRpLWxpbmUgdGV4dCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSByYWRpbyBidXR0b24uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgc2VsZWN0IGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHN1Ym1pdC9yZXNldCBidXR0b24uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgdGV4dCwgcGFzc3dvcmQgb3IgaGlkZGVuIGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIk1lc3NhZ2UgU2VudCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBTZWxlY3QuLi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybXMiOiB7CisgICAgICAgICAgICAiJ29uQ2xpY2snPSI6ICIiLAorICAgICAgICAgICAgIkFjY2VzcyBLZXk6IjogIiIsCisgICAgICAgICAgICAiQWN0aW9uIFVSTDoiOiAiIiwKKyAgICAgICAgICAgICJCdXR0b24gU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiQ2hlY2tlZCI6ICIiLAorICAgICAgICAgICAgIkNvbHVtbnM6IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCB0ZXh0IChvcHRpb25hbCkiOiAiIiwKKyAgICAgICAgICAgICJEaW1lbnNpb25zIjogIiIsCisgICAgICAgICAgICAiRGlzYWJsZWQiOiAiIiwKKyAgICAgICAgICAgICJFbmNvZGluZzoiOiAiIiwKKyAgICAgICAgICAgICJGb3IgQ29udHJvbDoiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBGSUVMRFNFVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IExBQkVMIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBTRUxFQ1QiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiRm9ybSBoYW5kbGVyIHNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJHZXQiOiAiIiwKKyAgICAgICAgICAgICJIYXJkIjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0IGluIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiSFRNTC1Gb3JtIHRvIENHSSAoZGVmYXVsdCkiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBzb3VyY2UiOiAiIiwKKyAgICAgICAgICAgICJJbml0aWFsIFRleHQ6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBGSUVMRFNFVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBJTlBVVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBTRUxFQ1QiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgVEVYVEFSRUEiOiAiIiwKKyAgICAgICAgICAgICJKYXZhc2NyaXB0IGZvciBidXR0b24gY2xpY2siOiAiIiwKKyAgICAgICAgICAgICJMYWJlbDoiOiAiIiwKKyAgICAgICAgICAgICJMZWdlbmQ6IjogIiIsCisgICAgICAgICAgICAiTWF4IGxlbmd0aDoiOiAiIiwKKyAgICAgICAgICAgICJNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjY2VwdGVkIjogIiIsCisgICAgICAgICAgICAiTWV0aG9kOiI6ICIiLAorICAgICAgICAgICAgIm11bHRpcGFydCBGb3JtIERhdGEgKEZpbGUtVXBsb2FkKSI6ICIiLAorICAgICAgICAgICAgIk5hbWUiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJuYW1lIG9mIHRoZSB0ZXh0YXJlYSI6ICIiLAorICAgICAgICAgICAgIk5hbWUvSUQ6IjogIiIsCisgICAgICAgICAgICAibm9ybWFsIjogIiIsCisgICAgICAgICAgICAibm93cmFwIjogIiIsCisgICAgICAgICAgICAiT2ZmIjogIiIsCisgICAgICAgICAgICAiUGh5c2ljYWwiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgYSBMYWJlbCI6ICIiLAorICAgICAgICAgICAgIlBvc3QiOiAiIiwKKyAgICAgICAgICAgICJwcmUiOiAiIiwKKyAgICAgICAgICAgICJSZWFkIE9ubHkiOiAiIiwKKyAgICAgICAgICAgICJSb3dzOiI6ICIiLAorICAgICAgICAgICAgIlNpemUgb2YgdGV4dCBib3ggaW4gY2hhcmFjdGVycyI6ICIiLAorICAgICAgICAgICAgIlNpemU6IjogIiIsCisgICAgICAgICAgICAiU29mdCI6ICIiLAorICAgICAgICAgICAgIlRhYiBJbmRleDoiOiAiIiwKKyAgICAgICAgICAgICJUYXJnZXQgRnJhbWU6IjogIiIsCisgICAgICAgICAgICAiVGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJVUkwgb2YgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICAgICAgICAgIlZhbHVlOiI6ICIiLAorICAgICAgICAgICAgIlZpcnR1YWwiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aCBpbiBudW1iZXIgb2YgY2hhcmFjdGVycyI6ICIiLAorICAgICAgICAgICAgIldyYXAgTW9kZToiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJPcHRpb25zIjogIjw8RmluZFJlcGxhY2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bGxQYWdlIjogeworICAgICAgICAgICAgIi4uLiI6ICIiLAorICAgICAgICAgICAgIkFsdGVybmF0ZSBzdHlsZS1zaGVldDoiOiAiIiwKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kIGNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkNoYXJhY3RlciBzZXQ6IjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKElTTy04ODU5LTUpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKEtPSTgtUikiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoV0lORE9XUy0xMjUxKSI6ICIiLAorICAgICAgICAgICAgIkRPQ1RZUEU6IjogIiIsCisgICAgICAgICAgICAiRG9jdW1lbnQgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIkRvY3VtZW50IHRpdGxlOiI6ICIiLAorICAgICAgICAgICAgIktleXdvcmRzOiI6ICIiLAorICAgICAgICAgICAgIlByaW1hcnkgc3R5bGUtc2hlZXQ6IjogIiIsCisgICAgICAgICAgICAiVGV4dCBjb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJVVEYtOCAocmVjb21tZW5kZWQpIjogIiIsCisgICAgICAgICAgICAid2VzdGVybiAoSVNPLTg4NTktMSkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRnVsbFNjcmVlbiI6IHsKKyAgICAgICAgICAgICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiR2Vja28iOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAgICAgIiYjeDAwZDc7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9lZGl0IGhvcml6b250YWwgcnVsZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEhvcml6b250YWwgUnVsZSI6ICIiLAorICAgICAgICAgICAgIk5vIHNoYWRpbmciOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbmxpbmVTdHlsZXIiOiB7CisgICAgICAgICAgICAiQ1NTIFN0eWxlIjogIiIsCisgICAgICAgICAgICAiLSI6ICI8PEVxdWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRBbmNob3IiOiB7CisgICAgICAgICAgICAiQW5jaG9yIG5hbWUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQW5jaG9yIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiIiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICIiLAorICAgICAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbDoiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiIiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWw6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICIiLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGZvb3Rub3RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IE5vdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGFnZWJyZWFrIjogeworICAgICAgICAgICAgIlBhZ2UgYnJlYWsiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIEJyZWFrIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNtaWxleSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgU21pbGV5IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICAgICAiXFxuICBUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZ1xcbiI6ICIiLAorICAgICAgICAgICAgIkhpZGUgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMSI6ICIiLAorICAgICAgICAgICAgIkxpbmsyIjogIiIsCisgICAgICAgICAgICAiTGluazMiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNCI6ICIiLAorICAgICAgICAgICAgIkxpbms1IjogIiIsCisgICAgICAgICAgICAiU2hvdyBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmciOiAiIiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgICAgICJBbGwgQ2F0ZWdvcmllcyI6ICIiLAorICAgICAgICAgICAgIkZpbHRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyBIVE1MIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIHRlbXBsYXRlIHZhcmlhYmxlIjogIiIsCisgICAgICAgICAgICAiT25seSBzZWFyY2ggd29yZCBiZWdpbm5pbmciOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIjw8Q2hhckNvdW50ZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICI8PEluc2VydFNuaXBwZXQ+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAgICAgIkNhcHRpb24gZm9yIHRoZSB0YWJsZSI6ICIiLAorICAgICAgICAgICAgIkNlbGwgcGFkZGluZzoiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIHNwYWNpbmc6IjogIiIsCisgICAgICAgICAgICAiQ29sbGFwc2UgYm9yZGVyczoiOiAiIiwKKyAgICAgICAgICAgICJDb2xzOiI6ICIiLAorICAgICAgICAgICAgIkVtIjogIiIsCisgICAgICAgICAgICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIkxheW91IjogIiIsCisgICAgICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJOdW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIiIsCisgICAgICAgICAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICIiLAorICAgICAgICAgICAgIlN0eWxlIG9mIHRoZSBib3JkZXIiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aCB1bml0IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlJvd3M6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iCisgICAgICAgIH0sCisgICAgICAgICJMYW5nTWFya3MiOiB7CisgICAgICAgICAgICAiJm1kYXNoOyBsYW5ndWFnZSAmbWRhc2g7IjogIiIsCisgICAgICAgICAgICAiJywgJyI6ICIiLAorICAgICAgICAgICAgIkVuZ2xpc2giOiAiIiwKKyAgICAgICAgICAgICJGcmVuY2giOiAiIiwKKyAgICAgICAgICAgICJHcmVlayI6ICIiLAorICAgICAgICAgICAgImxhbmd1YWdlIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIkxhdGluIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxpbmtlciI6IHsKKyAgICAgICAgICAgICIocHgpIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yLUxpbmsiOiAiIiwKKyAgICAgICAgICAgICJBbmNob3I6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgQWRkcmVzczoiOiAiIiwKKyAgICAgICAgICAgICJFbWFpbCBMaW5rIjogIiIsCisgICAgICAgICAgICAiTG9jYXRpb24gQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lbnUgQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lc3NhZ2UgVGVtcGxhdGU6IjogIiIsCisgICAgICAgICAgICAiTmV3IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIk9yZGluYXJ5IExpbmsiOiAiIiwKKyAgICAgICAgICAgICJQb3B1cCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJQb3B1cFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUmVzaXplYWJsZToiOiAiIiwKKyAgICAgICAgICAgICJTYW1lIFdpbmRvdyAoanVtcCBvdXQgb2YgZnJhbWVzKSI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbGJhcnM6IjogIiIsCisgICAgICAgICAgICAiU2hvd3MgT24gSG92ZXIiOiAiIiwKKyAgICAgICAgICAgICJTdGF0dXMgQmFyOiI6ICIiLAorICAgICAgICAgICAgIlN1YmplY3Q6IjogIiIsCisgICAgICAgICAgICAiVGl0bGU6IjogIiIsCisgICAgICAgICAgICAiVG9vbGJhcjoiOiAiIiwKKyAgICAgICAgICAgICJVUkwgTGluayI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICIiLAorICAgICAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJOYW1lOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNpemU6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiVGFyZ2V0OiI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiVVJMOiI6ICI8PENyZWF0ZUxpbms+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxpc3RUeXBlIjogeworICAgICAgICAgICAgIkNob29zZSBsaXN0IHN0eWxlIHR5cGUgKGZvciBvcmRlcmVkIGxpc3RzKSI6ICIiLAorICAgICAgICAgICAgIkRlY2ltYWwgbnVtYmVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIGdyZWVrIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciBsYXRpbiBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgcm9tYW4gbnVtYmVycyI6ICIiLAorICAgICAgICAgICAgIlVwcGVyIGxhdGluIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJVcHBlciByb21hbiBudW1iZXJzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIk1vb3Rvb2xzRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiT3BlcmEiOiB7CisgICAgICAgICAgICAiTUFSSyI6ICIiLAorICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAgICAgIkluc2VydCB0ZXh0IGluIG5ldyBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJQYXN0ZSBhcyBQbGFpbiBUZXh0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlByZXNlcnZlU2NyaXB0cyI6IHsKKyAgICAgICAgICAgICJKYXZhU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiUEhQIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlF1aWNrVGFnIjogeworICAgICAgICAgICAgIicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbCc6ICciOiAiIiwKKyAgICAgICAgICAgICJBVFRSSUJVVEVTIjogIiIsCisgICAgICAgICAgICAiQ29sb3JzIjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIFRBRyB5b3Ugd2FudCB0byBpbnNlcnQiOiAiIiwKKyAgICAgICAgICAgICJObyBDU1MgY2xhc3MgYXZhaWFibGUiOiAiIiwKKyAgICAgICAgICAgICJPayI6ICIiLAorICAgICAgICAgICAgIk9QVElPTlMiOiAiIiwKKyAgICAgICAgICAgICJRdWljayBUYWcgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiVEFHcyI6ICIiLAorICAgICAgICAgICAgIlRoZXJlIGFyZSBzb21lIHVuY2xvc2VkIHF1b3RlIjogIiIsCisgICAgICAgICAgICAiVGhpcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIFRBRyI6ICIiLAorICAgICAgICAgICAgIllvdSBoYXZlIHRvIHNlbGVjdCBzb21lIHRleHQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU2F2ZVN1Ym1pdCI6IHsKKyAgICAgICAgICAgICJpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIlJlYWR5IjogIiIsCisgICAgICAgICAgICAiU2F2ZSI6ICIiLAorICAgICAgICAgICAgIlNhdmluZy4uLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTZXRJZCI6IHsKKyAgICAgICAgICAgICJJRC9OYW1lOiI6ICIiLAorICAgICAgICAgICAgIlNldCBJZCBhbmQgTmFtZSI6ICIiLAorICAgICAgICAgICAgIlNldCBJZC9OYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElEL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgICAgICJDbG9zaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiQ2xvc2luZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiQ29udmVydCBhbGwgcXVvdGVzIGFuZCBkYXNoZXMgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgYXV0b21hdGljIHJlcGxhY2VtZW50cyI6ICIiLAorICAgICAgICAgICAgIk9wZW5pbmdEb3VibGVRdW90ZXMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nU2luZ2xlUXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJTbWFydFJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJTbWFydFJlcGxhY2UgU2V0dGluZ3MiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU3R5bGlzdCI6IHsKKyAgICAgICAgICAgICJTdHlsZXMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU3VwZXJDbGVhbiI6IHsKKyAgICAgICAgICAgICJDbGVhbiBiYWQgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIFNlbGVjdGlvbiBPbmx5IjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gdXAgSFRNTCI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIFNjb3BlIjogIiIsCisgICAgICAgICAgICAiR2VuZXJhbCB0aWR5IHVwIGFuZCBjb3JyZWN0aW9uIG9mIHNvbWUgcHJvYmxlbXMuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHNlbGVjdCBmcm9tIHRoZSBmb2xsb3dpbmcgY2xlYW5pbmcgb3B0aW9ucy4uLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzdGFuZCBieSB3aGlsZSBjbGVhbmluZyBpbiBwcm9jZXNzLi4uIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsaWdubWVudCAobGVmdC9yaWdodC9qdXN0aWZ5KS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxsIGNsYXNzZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIEFsbCBIVE1MIFRhZ3MiOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxsIHN0eWxlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIGZvbnQgc2l6ZXMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0ZXh0IGNvbG9ycy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIHR5cGVmYWNlcyAoZm9udCBcInN0eWxlc1wiKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZW1waGFzaXMgYW5kIGFubm90YXRpb25zLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBsYW5nIGF0dHJpYnV0ZXMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIFBhcmFncmFwaHMiOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzLiI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UgZGlyZWN0aW9uYWwgcXVvdGUgbWFya3Mgd2l0aCBub24tZGlyZWN0aW9uYWwgcXVvdGUgbWFya3MuIjogIiIsCisgICAgICAgICAgICAiVmlnb3JvdXNseSBwdXJnZSBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlRhYmxlT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJDZWxsIFR5cGU6IjogIiIsCisgICAgICAgICAgICAiQ2VsbHMgZG93biI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIHRvIHRoZSByaWdodCwgYW5kIjogIiIsCisgICAgICAgICAgICAiRG8gTm90IENoYW5nZSI6ICIiLAorICAgICAgICAgICAgIkZyYW1lIGFuZCBib3JkZXJzIjogIiIsCisgICAgICAgICAgICAiSGVhZGVyICh0aCkiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBjdXJyZW50IGNlbGwgd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJOb3JtYWwgKHRkKSI6ICIiLAorICAgICAgICAgICAgIkNvbHVtbnMiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIlJvd3MiOiAiPDxGb3Jtcz4+IgorICAgICAgICB9LAorICAgICAgICAiVW5zYXZlZENoYW5nZXMiOiB7CisgICAgICAgICAgICAiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBlZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiV2ViS2l0IjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICI8PEdlY2tvPj4iCisgICAgICAgIH0sCisgICAgICAgICJYaW5oYSI6IHsKKyAgICAgICAgICAgICImIzgyMTI7IGZvbnQgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICImIzgyMTI7IHNpemUgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIjEgKDggcHQpIjogIiIsCisgICAgICAgICAgICAiMiAoMTAgcHQpIjogIiIsCisgICAgICAgICAgICAiMyAoMTIgcHQpIjogIiIsCisgICAgICAgICAgICAiNCAoMTQgcHQpIjogIiIsCisgICAgICAgICAgICAiNSAoMTggcHQpIjogIiIsCisgICAgICAgICAgICAiNiAoMjQgcHQpIjogIiIsCisgICAgICAgICAgICAiNyAoMzYgcHQpIjogIiIsCisgICAgICAgICAgICAiQWRkcmVzcyI6ICIiLAorICAgICAgICAgICAgIkFyaWFsIjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gY29udGVudCBwYXN0ZWQgZnJvbSBXb3JkIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJDbGVhciBNU09mZmljZSB0YWdzIjogIiIsCisgICAgICAgICAgICAiQ2xvc2UiOiAiIiwKKyAgICAgICAgICAgICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIiIsCisgICAgICAgICAgICAiQ291cmllciBOZXciOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgU3RhdHVzYmFyIjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFRvb2xiYXIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTAgKHplcm8pIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0xIC4uIENUUkwtNiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtRSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtVSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtViI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWiI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiIiwKKyAgICAgICAgICAgICJFZGl0b3IgSGVscCI6ICIiLAorICAgICAgICAgICAgIkVOVEVSIjogIiIsCisgICAgICAgICAgICAiRXJyb3IgTG9hZGluZyBYaW5oYS4gIERldmVsb3BlcnMsIGNoZWNrIHRoZSBFcnJvciBDb25zb2xlIGZvciBpbmZvcm1hdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGaW5pc2hpbmciOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0ZWQiOiAiIiwKKyAgICAgICAgICAgICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiIiwKKyAgICAgICAgICAgICJHZW9yZ2lhIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAxIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAyIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAzIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA0IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA1IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA2IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJJbXBhY3QiOiAiIiwKKyAgICAgICAgICAgICJJbml0IGVkaXRvciBzaXplIjogIiIsCisgICAgICAgICAgICAiaW5zZXJ0IGxpbmVicmVhayI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9PdmVyd3JpdGUiOiAiIiwKKyAgICAgICAgICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIENvcmUiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW5zIjogIiIsCisgICAgICAgICAgICAiTVMgV29yZCBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAibmV3IHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIlByaW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICIiLAorICAgICAgICAgICAgIlNhdmUgYXMiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgYWxsIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IENvbG9yIjogIiIsCisgICAgICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJTSElGVC1FTlRFUiI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IEJsb2NrIjogIiIsCisgICAgICAgICAgICAiVGFob21hIjogIiIsCisgICAgICAgICAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogIiIsCisgICAgICAgICAgICAiVGltZXMgTmV3IFJvbWFuIjogIiIsCisgICAgICAgICAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJUb3VjaCBoZXJlIGZpcnN0IHRvIGFjdGl2YXRlIGVkaXRvci4iOiAiIiwKKyAgICAgICAgICAgICJWZXJkYW5hIjogIiIsCisgICAgICAgICAgICAiV2FpdGluZyBmb3IgSWZyYW1lIHRvIGxvYWQuLi4iOiAiIiwKKyAgICAgICAgICAgICJXaW5nRGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIiIsCisgICAgICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiUmVtb3ZlIEN1cnJlbnQgQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIlNldCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IHBhZ2UgYmFja2dyb3VuZCBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlNldCBQYWdlIEJhY2tncm91bmQgSW1hZ2UiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2xpZW50c2lkZVNwZWxsY2hlY2siOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVjayB1c2luZyBpZVNwZWxsIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEwJSI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiIiwKKyAgICAgICAgICAgICIyMDAlIjogIiIsCisgICAgICAgICAgICAiMjUlIjogIiIsCisgICAgICAgICAgICAiNTAlIjogIiIsCisgICAgICAgICAgICAiNzUlIjogIiIsCisgICAgICAgICAgICAiPkxpc3QgVmlldyI6ICIiLAorICAgICAgICAgICAgIj5UaHVtYm5haWwgVmlldyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIiIsCisgICAgICAgICAgICAiQWx0IjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIENvbG9yIjogIiIsCisgICAgICAgICAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIiIsCisgICAgICAgICAgICAiQ3JvcCI6ICIiLAorICAgICAgICAgICAgIkQ6IjogIiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IjogIiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIiIsCisgICAgICAgICAgICAiRWRpdCI6ICIiLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZpbGUgTWFuYWdlciI6ICIiLAorICAgICAgICAgICAgIkZpbGVuYW1lOiI6ICIiLAorICAgICAgICAgICAgIkZpbGVzaXplOiI6ICIiLAorICAgICAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICIiLAorICAgICAgICAgICAgIkZsaXAgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIiIsCisgICAgICAgICAgICAiRm9sZGVyIjogIiIsCisgICAgICAgICAgICAiR0lGIjogIiIsCisgICAgICAgICAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIiIsCisgICAgICAgICAgICAiSDoiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICIiLAorICAgICAgICAgICAgIkpQRUcgSGlnaCI6ICIiLAorICAgICAgICAgICAgIkpQRUcgTG93IjogIiIsCisgICAgICAgICAgICAiSlBFRyBNZWRpdW0iOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIjogIiIsCisgICAgICAgICAgICAiTG9jayI6ICIiLAorICAgICAgICAgICAgIk1hcmtlciI6ICIiLAorICAgICAgICAgICAgIk1heGltdW0gZm9sZGVyIHNpemUgbGltaXQgcmVhY2hlZC4gVXBsb2FkIGRpc2FibGVkLiI6ICIiLAorICAgICAgICAgICAgIk1lYXN1cmUiOiAiIiwKKyAgICAgICAgICAgICJOZXcgRm9sZGVyIjogIiIsCisgICAgICAgICAgICAiTm8gRmlsZXMgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgdmFsdWUiOiAiIiwKKyAgICAgICAgICAgICJQTkciOiAiIiwKKyAgICAgICAgICAgICJQcmVzZXQiOiAiIiwKKyAgICAgICAgICAgICJRdWFsaXR5OiI6ICIiLAorICAgICAgICAgICAgIlJlZnJlc2giOiAiIiwKKyAgICAgICAgICAgICJSZW5hbWUiOiAiIiwKKyAgICAgICAgICAgICJSZXNpemUiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENDVyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIlN0YXJ0IFg6IjogIiIsCisgICAgICAgICAgICAiU3RhcnQgWToiOiAiIiwKKyAgICAgICAgICAgICJUYXJnZXQgV2luZG93IjogIiIsCisgICAgICAgICAgICAiVG9nZ2xlIG1hcmtlciBjb2xvciI6ICIiLAorICAgICAgICAgICAgIlRyYXNoIjogIiIsCisgICAgICAgICAgICAiVXBsb2FkIjogIiIsCisgICAgICAgICAgICAiVzoiOiAiIiwKKyAgICAgICAgICAgICJYOiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIEltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlk6IjogIiIsCisgICAgICAgICAgICAiWm9vbSI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkNsZWFyIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiQ29weSI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkN1dCI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiPDxNb290b29sc0ZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRpdGxlICh0b29sdGlwKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJGaWx0ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsdGVyIjogIjw8SW5zZXJ0U25pcHBldDI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkh0bWxUaWR5IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQXV0by1UaWR5IjogIiIsCisgICAgICAgICAgICAiRG9uJ3QgVGlkeSI6ICIiLAorICAgICAgICAgICAgIkhUTUwgVGlkeSI6ICIiLAorICAgICAgICAgICAgIlRpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQW5nbGU6IjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlcyI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgVXNlcm5hbWUvRW1haWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIgTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFBob3RvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFZpZGVvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgU2VydmVyIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFVzZXJuYW1lIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlbyBMaXN0IjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlb3MiOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQ2xlYXIiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkNyb3AiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkQ6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRWRpdCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZW5hbWU6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIEhvcml6b250YWwiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZsaXAgSW1hZ2UiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZsaXAgVmVydGljYWwiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkdJRiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJIOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIEhpZ2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgTG93IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIE1lZGl1bSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTG9jayI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWFya2VyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJNZWFzdXJlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJOZXcgRm9sZGVyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQTkciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJRdWFsaXR5OiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUmVmcmVzaCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUmVzaXplIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIEltYWdlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJTdGFydCBYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU3RhcnQgWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUcmFzaCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiVzoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJZOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE1hcnF1ZWUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTlNFUlRNQVJRVUVFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFsdGVybmF0ZSI6ICIiLAorICAgICAgICAgICAgIkJhY2tncm91bmQtQ29sb3I6IjogIiIsCisgICAgICAgICAgICAiQmVoYXZpb3I6IjogIiIsCisgICAgICAgICAgICAiQ29udGludW91cyI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdGlvbjoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgc2Nyb2xsaW5nIG1hcnF1ZWUiOiAiIiwKKyAgICAgICAgICAgICJNYXJxdWVlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbCBBbW91bnQ6IjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIERlbGF5OiI6ICIiLAorICAgICAgICAgICAgIlNsaWRlIjogIiIsCisgICAgICAgICAgICAiU3BlZWQgQ29udHJvbCI6ICIiLAorICAgICAgICAgICAgIk5hbWUiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlRleHQ6IjogIjw8Rm9ybXM+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBub3QgZGVmaW5lZCI6ICIiLAorICAgICAgICAgICAgIiBPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIk9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiVXBsb2FkIGZpbGUiOiAiIiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkhvcml6b250YWw6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiU2l6ZSI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVmVydGljYWw6IjogIjw8SW5zZXJ0SW1hZ2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEyMCUiOiAiIiwKKyAgICAgICAgICAgICIxNTAlIjogIiIsCisgICAgICAgICAgICAiODAlIjogIiIsCisgICAgICAgICAgICAiQWRkIEdVSURPIENvZGUgaW4gYSB0ZXh0Ym94IG9uIHRoZSBwYWdlIjogIiIsCisgICAgICAgICAgICAiQWRkIE1JREkgbGluayB0byBhbGxvdyBzdHVkZW50cyB0byBoZWFyIHRoZSBtdXNpYyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdCI6ICIiLAorICAgICAgICAgICAgIkdVSURPIENvZGUiOiAiIiwKKyAgICAgICAgICAgICJHdWlkbyBjb2RlIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgaW4gYXBwbGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEdVSURPIE11c2ljIE5vdGF0aW9uIjogIiIsCisgICAgICAgICAgICAiTUlESSBGaWxlIjogIiIsCisgICAgICAgICAgICAiU291cmNlIENvZGUiOiAiIiwKKyAgICAgICAgICAgICJXaXRoIE1vemlsbGEsIHRoZSBhcHBsZXQgd2lsbCBub3QgYmUgdmlzaWJsZSBpbiBlZGl0b3IsIGJ1dCBvbmx5IGluIFdlYiBwYWdlIGFmdGVyIHN1Ym1pdHRpbmcuIjogIiIsCisgICAgICAgICAgICAiWm9vbSA6IjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiWm9vbSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgR2VhcnMgaW4gb3JkZXIgdG8gdXNlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UgYW5kIGNvbmZpZ3VyYXRpb24uIjogIiIsCisgICAgICAgICAgICAiRW5hYmxpbmcgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIkluc3RhbGwiOiAiIiwKKyAgICAgICAgICAgICJMZWFybiBBYm91dCBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIHJlbG9hZCB0aGUgcGFnZSwgY2F1c2luZyB5b3UgdG8gbG9zZSBhbnkgdW5zYXZlZCB3b3JrLiAgUHJlc3MgXCJPS1wiIHRvIHJlbG9hZC4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSB1c2VzIEdvb2dsZSBHZWFycyB0byBlbmFibGUgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZS4gIFdpdGggR2VhcnMgaW5zdGFsbGVkLCB5b3UgY2FuIHNhdmUgZHJhZnRzIG9mIHlvdXIgZG9jdW1lbnRzIG9uIHlvdXIgaGFyZCBkcml2ZSwgY29uZmlndXJlIFhpbmhhIHRvIGxvb2sgdGhlIHdheSB5b3Ugd2FudCwgYW5kIGNhcnJ5IHRoaXMgaW5mb3JtYXRpb24gd2hlcmV2ZXIgeW91IHVzZSBYaW5oYSBvbiB0aGUgd2ViLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQU1NlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbGU6ICI6ICIiLAorICAgICAgICAgICAgIkltcG9ydCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQZXJzaXN0ZW50U3RvcmFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkRldGFpbHMiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIEJyb3dzZXIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgICBUaGVyZSBDICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICBUaGVyZSBBICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvIFwiIFRoZXJlIEIgXCIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAnIFRoZXJlIEQgJyI6ICIiLAorICAgICAgICAgICAgIkxpc3Qgb2YgUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiTmV3IERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiT3BlbiI6ICIiLAorICAgICAgICAgICAgIk9wZW4gRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB5b3UnZCBsaWtlIHRvIGNyZWF0ZS4iOiAiIiwKKyAgICAgICAgICAgICJTYXZlIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGVyYXNlIGFueSB1bnNhdmVkIGNvbnRlbnQuICBJZiB5b3UncmUgY2VydGFpbiwgcGxlYXNlIGNsaWNrIE9LIHRvIGNvbnRpbnVlLiI6ICIiLAorICAgICAgICAgICAgIldlYiBVUkwiOiAiIiwKKyAgICAgICAgICAgICJDb25maXJtIjogIjw8UFNMb2NhbD4+IiwKKyAgICAgICAgICAgICJDb3B5IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGVuYW1lIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQiOiAiPDxJbnNlcnROb3RlPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlNhdmUiOiAiPDxTYXZlU3VibWl0Pj4iLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiU3BlbGxDaGVja2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogU1BFTExDSEVDS0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkhUTUxBcmVhIFNwZWxsIENoZWNrZXIiOiAiIiwKKyAgICAgICAgICAgICJJbmZvIjogIiIsCisgICAgICAgICAgICAiTGVhcm4iOiAiIiwKKyAgICAgICAgICAgICJwbGl6IHdlaXQgOy0pIjogIiIsCisgICAgICAgICAgICAiUmV2ZXJ0IjogIiIsCisgICAgICAgICAgICAiU3BlbGwgQ2hlY2tlciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFRFTVBMQVRFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkluc2VydCB0ZW1wbGF0ZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJVbkZvcm1hdCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFVORk9STUFUIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFsbCI6ICIiLAorICAgICAgICAgICAgIkFsbCBIVE1MOiI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIEFyZWEiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBvcHRpb25zIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0dGluZzoiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIENsZWFuZXIiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Qgd2hpY2ggdHlwZXMgb2YgZm9ybWF0dGluZyB5b3Ugd291bGQgbGlrZSB0byByZW1vdmUuIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0aW9uIjogIiIKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9kYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwY2Y5YmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9kYS5qcwpAQCAtMCwwICsxLDE1NzcgQEAKKy8vIFhpbmhhIExhbmd1YWdlIENvbWJpbmVkIFRyYW5zbGF0aW9uIEZpbGUKKy8vCisvLyBMQU5HOiAiZGEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTlNUUlVDVElPTlMgVE8gVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFlvdXIgdHJhbnNsYXRpb24gbXVzdCBiZSBpbiBVVEYtOCBDaGFyYWN0ZXIgRW5jb2RpbmcuCisvLworLy8gVGhpcyBpcyBhIEpTT04gZW5jb2RlZCBmaWxlIChwbHVzIGNvbW1lbnRzKSwgc3RyaW5ncyBzaG91bGQgYmUgZG91YmxlLXF1b3RlCisvLyBvbmx5LCBkbyBub3QgdXNlIHNpbmdsZSBxdW90ZXMgdG8gc3Vycm91bmQgc3RyaW5ncyAtICJoZWxsbyIsIG5vdCAnaGVsbG8nCisvLyBkbyBub3QgaGF2ZSBhIHRyYWlsaW5nIGNvbW1hIGFmdGVyIHRoZSBsYXN0IGVudHJ5IGluIGEgc2VjdGlvbi4KKy8vCisvLyBPbmx5IGZ1bGwgbGluZSBjb21tZW50cyBhcmUgYWxsb3dlZCAodGhhdCBhIGNvbW1lbnRzIG9jY3VweSBlbnRpcmUgbGluZXMpLgorLy8KKy8vIFNlYXJjaCBmb3IgdGhlIF9fTkVXX1RSQU5TTEFUSU9OU19fIHNlY3Rpb24gYmVsb3csIHRoaXMgaXMgd2hlcmUgeW91IHdpbGwKKy8vIHdhbnQgdG8gZm9jdXMsIHRoaXMgc2VjdGlvbiBpbmNsdWRlcyB0aGluZ3MgdGhhdCBkbyBub3QgcHJlc2VudGx5IGhhdmUgYSAKKy8vIHRyYW5zbGF0aW9uIG9yIGZvciB3aGljaCB0aGUgdHJhbnNsYXRpb24gbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgYWNjdXJhY3kuCisvLworLy8gSW4gdGhlIE5ldyBUcmFuc2xhdGlvbnMgc2VjdGlvbiBhIHRyYW5zbGF0aW9uIHN0cmluZyBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZworLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiIgorLy8gICAgIFRoaXMgbWVhbnMgaXQgaXMgbm90IHRyYW5zbGF0ZWQgeWV0LCBhZGQgeW91ciB0cmFuc2xhdGlvbi4uLgorLy8gICAgICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJLbGluZ29uIFN0cmluZyBIZXJlIgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiVHJhbnNsYXRlZCBTdHJpbmcgSGVyZSIKKy8vICAgICBUaGlzIG1lYW5zIHRoYXQgYW4gZXhpc3RpbmcgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nLCBpbiBzb21lIG90aGVyCisvLyAgICAgc2VjdGlvbiBoYXMgYmVlbiBmb3VuZCwgYW5kIHVzZWQuICBDaGVjayB0aGF0IGl0IGlzIGFwcHJvcHJpdGUgZm9yIHRoaXMKKy8vICAgICBzZWN0aW9uIGFuZCBpZiBpdCBpcywgdGhhdCdzIGZpbmUgbGVhdmUgaXQgYXMgaXMsIG90aGVyd2lzZSBjaGFuZ2UgYXMKKy8vICAgICBhcHByb3ByaWF0ZS4KKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIjw8QW5vdGhlclNlY3Rpb24+PiIKKy8vICAgICBUaGlzIG1lYW5zIHVzZSB0aGUgc2FtZSB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcgYXMgPDxBbm90aGVyU2VjdGlvbj4+CisvLyAgICAgdGhpcyBzYXZlcyB5b3UgcmUtdHJhbmxhdGluZyBzdHJpbmdzLiAgSWYgdGhlIENvbnRleHQgb2YgdGhpcyBzZWN0aW9uCisvLyAgICAgYW5kIHRoZSBjb250ZXh0IG9mIEFub3RoZXJTZWN0aW9uIHNlZW0gdGhlIHNhbWUsIHRoYXQncyBmaW5lIGxlYXZlIGl0CisvLyAgICAgdXNpbmcgdGhhdCB0cmFuc2xhdGlvbiwgYnV0IGlmIHRoaXMgc2VjdGlvbiBuZWVkcyBhIGRpZmZlcmVudCB0cmFuc2xhdGlvbiwgCisvLyAgICAgeW91IGNhbiBwcm92aWRlIGl0IGJ5IHJlcGxhY2luZyB0aGUgbGluayAoPDxBbm90aGVyU2VjdGlvbj4+KSB3aXRoIHRoYXQKKy8vICAgICBuZXcgdHJhbnNsYXRpb24uICBGb3IgZXhhbXBsZSAtIGEgIlRhYmxlIiBpbiBzYXkgIkRhdGFQbHVnaW4iIGlzIAorLy8gICAgIHBlcmhhcHMgdHJhbnNsYXRlZCBkaWZmZXJlbnRseSB0byAiVGFibGUiIGluICJGdXJuaXR1cmVQbHVnaW4iLgorLy8KKy8vIFRFU1RJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgcGxhY2UgeW91ciB0cmFuc2xhdGlvbiBmaWxlIG9uIHlvdXIgd2Vic2VydmVyIHNvbWV3aGVyZSBmb3IgZXhhbXBsZQorLy8KKy8vICAgL3hpbmhhL2xhbmcvbWVyZ2VkL2RhLmpzCisvLworLy8gYW5kIHRoZW4gdGVsbCBYaW5oYSB3aGVyZSB0byBnZXQgaXQgKGJlZm9yZSBsb2FkaW5nIFhpbmhhQ29yZS5qcykgYnkgCisvLworLy8gIF9lZGl0b3JfbGFuZyAgICAgICAgICAgICAgPSAnZGEnOworLy8gIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSAgPSAnL3hpbmhhL2xhbmcvbWVyZ2VkL2RhLmpzJzsKKy8vCisvLyBYaW5oYSB3aWxsIGxvYWQgeW91ciBuZXcgbGFuZ3VhZ2UgZGVmaW5pdGlvbi4KKy8vCisvLyBTVUJNSVRUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IGNyZWF0ZSBhIFRpY2tldCBvbiB0aGUgWGluaGEgd2Vic2l0ZSBhbmQgYXR0YWNoIHlvdXIgdHJhbnNsYXRpb24gCisvLyBmaWxlLgorLy8KKy8vIFRoZSBYaW5oYSBkZXZlbG9wZXJzIHdpbGwgdGFrZSB5b3VyIGZpbGUgYW5kIHVzZSB0aGUgCisvLyAgICAgY29udHJpYi9sY19zcGxpdF9tZXJnZWRfZmlsZS5waHAKKy8vIHNjcmlwdCB0byBsb2FkIGl0IGludG8gdGhlIFhpbmhhIGRpc3RyaWJ1dGlvbi4KKworeworICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiQWJvdXRCb3giOiB7CisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJPbSBYaW5oYSIsCisgICAgICAgICJDbG9zZSI6ICJMdWsiCisgICAgfSwKKyAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIkFubnVsbGVyIgorICAgIH0sCisgICAgIkNvbG9yUGlja2VyIjogeworICAgICAgICAiQ2xpY2sgYSBjb2xvci4uLiI6ICJWw6ZsZyBmYXJ2ZSIsCisgICAgICAgICJDbG9zZSI6ICJMdWsiLAorICAgICAgICAiQ29sb3I6ICI6ICJGYXJ2ZTogIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlNhbXBsZSI6ICJFa3NlbXBlbCIsCisgICAgICAgICJXZWIgU2FmZTogIjogIldlYiBTYWZlOiAiCisgICAgfSwKKyAgICAiQ29udGV4dE1lbnUiOiB7CisgICAgICAgICJDb3B5IjogIktvcGllciIsCisgICAgICAgICJDdXQiOiAiS2xpcCIsCisgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICJDZW50cmVyIiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICJMaWdlIG1hcmdlbmVyIiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICJWZW5zdHJlanVzdGVyIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiSMO4anJlanVzdGVyIiwKKyAgICAgICAgIlBhc3RlIjogIlPDpnQgaW5kIgorICAgIH0sCisgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIkluZHPDpnQvcmVkaWdlciBoeXBlcmxpbmsiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOeXQgdmluZHVlIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiaW5nZW4gKGltcGxpY2l0KSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPdGhlciI6ICJBbmRldCIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiU2FtbWUgcmFtbWUgKF9zZWxmKSIsCisgICAgICAgICJUYXJnZXQ6IjogIlBsYWNlcmluZzoiLAorICAgICAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUaXRlbCAoVG9vbHRpcCk6IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiVG9wcmFtbWUgKF90b3ApIiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIKKyAgICB9LAorICAgICJFZGl0VGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIkFubnVsbGVyIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkVxdWF0aW9uIjogeworICAgICAgICAiQ2FuY2VsIjogIkFubnVsbGVyIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlByZXZpZXciOiAiU211Z2tpZyIKKyAgICB9LAorICAgICJFeHRlbmRlZEZpbGVNYW5hZ2VyIjogeworICAgICAgICAiQWJzYm90dG9tIjogIkJ1bmQiLAorICAgICAgICAiQWJzbWlkZGxlIjogIkNlbnRyZXJldCIsCisgICAgICAgICJBbGlnbiI6ICJQbGFjZXJpbmciLAorICAgICAgICAiQWx0IjogIkFsdCIsCisgICAgICAgICJCYXNlbGluZSI6ICJHcnVuZGxpbmplIiwKKyAgICAgICAgIkJvcmRlciI6ICJSYW1tZSIsCisgICAgICAgICJCb3JkZXIgQ29sb3IiOiAiUmFtbWVmYXJ2ZSIsCisgICAgICAgICJCb3R0b20iOiAiVGVrc3RidW5kIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGxlciIsCisgICAgICAgICJDbGVhciI6ICJGb3J0cnlkIiwKKyAgICAgICAgIkNvbG9yIjogIkZhcnZlIiwKKyAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICJLb3JyZWt0IHN0w7hycmVsc2VzZm9yaG9sZCIsCisgICAgICAgICJDb3B5IjogIktvcGllciIsCisgICAgICAgICJDcm9wIjogIkJlc2vDpnIiLAorICAgICAgICAiQ3V0IjogIktsaXAiLAorICAgICAgICAiRGlyZWN0b3J5IjogIk1hcHBlIiwKKyAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICJNYXBwZSBvcCIsCisgICAgICAgICJFZGl0IjogIlJlZGlnZXIiLAorICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIkZpbCBNYW5hZ2VyIiwKKyAgICAgICAgIkZpbGVuYW1lOiI6ICJGaWxuYXZuOiIsCisgICAgICAgICJGaWxlc2l6ZToiOiAiRmlsc3TDuHJyZWxzZToiLAorICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIlZlbmQgdmFuZHJldCIsCisgICAgICAgICJGbGlwIEltYWdlIjogIlZlbmQgYmlsbGVkZSIsCisgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIlZlbmQgbG9kcmV0IiwKKyAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICJHSUYtRm9ybWF0IGlra2UgdW5kZXJzdMO4dHRldCAtIGthbiBpa2tlIHJlZGlnZXJlcy4iLAorICAgICAgICAiSGVpZ2h0IjogIkjDuGpkZSIsCisgICAgICAgICJIZWlnaHQ6IjogIkjDuGpkZToiLAorICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICJJbmRzw6Z0IGZpbC1saW5rIiwKKyAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIlVneWxkaWcgYmFzZSBtYXBwZToiLAorICAgICAgICAiSlBFRyBIaWdoIjogIkpQRUcgaMO4aiIsCisgICAgICAgICJKUEVHIExvdyI6ICJKUEVHIGxhdiIsCisgICAgICAgICJKUEVHIE1lZGl1bSI6ICJKUEVHIG1lbGxlbSIsCisgICAgICAgICJMZWZ0IjogIlZlbnN0cmUiLAorICAgICAgICAiTG9hZGluZyI6ICJIZW50ZXIiLAorICAgICAgICAiTG9jayI6ICJMw6VzIiwKKyAgICAgICAgIk1hcmdpbiI6ICJNYXJnZW4iLAorICAgICAgICAiTWFya2VyIjogIk1hcmvDuHIiLAorICAgICAgICAiTWVhc3VyZSI6ICJNw6VsZWLDpW5kIiwKKyAgICAgICAgIk1pZGRsZSI6ICJNaWR0IiwKKyAgICAgICAgIk5ldyBGb2xkZXIiOiAiTnkgbWFwcGUiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOeXQgdmluZHVlIChfYmxhbmspIiwKKyAgICAgICAgIk5vIEZpbGVzIEZvdW5kIjogIkluZ2VuIGZpbGVyIGZ1bmRldCIsCisgICAgICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiSW5nZW4gYmlsbGVkZXIgdGlsZ8OmbmdlbGlnIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiaW5nZW4gKGltcGxpY2l0KSIsCisgICAgICAgICJOb3Qgc2V0IjogIlViZXN0ZW10IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBhZGRpbmciOiAiU3BhbHRlZnlsZCIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIkJpbGxlZGV0cyBwb3NpdGlvbiIsCisgICAgICAgICJQcmV2aWV3IjogIlNtdWdraWciLAorICAgICAgICAiUXVhbGl0eToiOiAiS3ZhbGl0ZXQiLAorICAgICAgICAiUmVmcmVzaCI6ICJPcGRhdGVyIiwKKyAgICAgICAgIlJlbmFtZSI6ICJPbWTDuGIiLAorICAgICAgICAiUmVzaXplIjogIsOGbmRyZSBzdMO4cnJlbHNlIiwKKyAgICAgICAgIlJpZ2h0IjogIkjDuGpyZSIsCisgICAgICAgICJSb3RhdGUiOiAiUm90ZXJlIiwKKyAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICJEcmVqIGJpbGxlZGUiLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlNhbW1lIHJhbW1lIChfc2VsZikiLAorICAgICAgICAiU2F2ZSI6ICJHZW0iLAorICAgICAgICAiU3RhcnQgWDoiOiAiU3RhcnQgWCIsCisgICAgICAgICJTdGFydCBZOiI6ICJTdGFydCBZIiwKKyAgICAgICAgIlRhcmdldCBXaW5kb3ciOiAiTcOlbCIsCisgICAgICAgICJUZXh0dG9wIjogIlRla3N0dG9wIiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKSI6ICJUaXRlbCAoVG9vbHRpcCkiLAorICAgICAgICAiVG9nZ2xlIG1hcmtlciBjb2xvciI6ICJTa2lmdCBtYXJrw7hyZmFydmUiLAorICAgICAgICAiVG9wIjogIlRvcCIsCisgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIlRvcHJhbW1lIChfdG9wKSIsCisgICAgICAgICJUcmFzaCI6ICJQYXBpcmt1cnYiLAorICAgICAgICAiVXBsb2FkIjogIlVwbG9hZCIsCisgICAgICAgICJXOiI6ICJXOiIsCisgICAgICAgICJXaWR0aCI6ICJCcmVkZGUiLAorICAgICAgICAiV2lkdGg6IjogIkJyZWRkZToiLAorICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIlbDpmxnIHZlbmxpZ3N0IG5vZ2V0IHRla3N0IGbDuHIgZHUgbGF2ZXIgZXQgbnl0IGxpbmsuIgorICAgIH0sCisgICAgIkZpbmRSZXBsYWNlIjogeworICAgICAgICAiQ2xlYXIiOiAiRm9ydHJ5ZCIsCisgICAgICAgICJSZXBsYWNlIHdpdGg6IjogIkVyc3RhdCBtZWQiCisgICAgfSwKKyAgICAiRm9ybXMiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJCaWxsZWRlIFVSTDoiLAorICAgICAgICAiTmFtZSI6ICJOYXZuIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlJvd3M6IjogIlLDpmtrZXI6IiwKKyAgICAgICAgIlNpemU6IjogIlN0w7hycmVsc2UiCisgICAgfSwKKyAgICAiRnVsbFBhZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICAgICAiRGVzY3JpcHRpb246IjogIkJlc2tyaXZlbHNlOiIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJIb3Jpem9udGFsUnVsZSI6IHsKKyAgICAgICAgIkFsaWdubWVudDoiOiAiSnVzdGVyaW5nOiIsCisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICAgICAiQ2VudGVyIjogIkNlbnRyZXIiLAorICAgICAgICAiQ29sb3I6IjogIkZhcnZlIiwKKyAgICAgICAgIkhlaWdodDoiOiAiSMO4amRlOiIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiVmFuZHJldCBzdHJlZyIsCisgICAgICAgICJMYXlvdXQiOiAiTGF5b3V0IiwKKyAgICAgICAgIkxlZnQiOiAiVmVuc3RyZSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJSaWdodCI6ICJIw7hqcmUiLAorICAgICAgICAiV2lkdGg6IjogIkJyZWRkZToiLAorICAgICAgICAicGVyY2VudCI6ICJwcm9jZW50IiwKKyAgICAgICAgInBpeGVscyI6ICJwaXhlbCIKKyAgICB9LAorICAgICJIdG1sVGlkeSI6IHsKKyAgICAgICAgIlRpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLiI6ICJUaWR5IG1pc2x5a2tlZGVzLiBUamVrIGRpbiBIVE1MIGZvciBzeW50YWtzZmVqbC4iCisgICAgfSwKKyAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAiQWJzYm90dG9tIjogIkJ1bmQiLAorICAgICAgICAiQWJzbWlkZGxlIjogIkNlbnRyZXJldCIsCisgICAgICAgICJBbmdsZToiOiAiVmlua2VsOiIsCisgICAgICAgICJCYXNlbGluZSI6ICJHcnVuZGxpbmplIiwKKyAgICAgICAgIkJvdHRvbSI6ICJUZWtzdGJ1bmQiLAorICAgICAgICAiQ2FuY2VsIjogIkFubnVsbGVyIiwKKyAgICAgICAgIkNsZWFyIjogIkZvcnRyeWQiLAorICAgICAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIktvcnJla3Qgc3TDuHJyZWxzZXNmb3Job2xkIiwKKyAgICAgICAgIkNyb3AiOiAiQmVza8OmciIsCisgICAgICAgICJEaXJlY3RvcnkiOiAiTWFwcGUiLAorICAgICAgICAiRGlyZWN0b3J5IFVwIjogIk1hcHBlIG9wIiwKKyAgICAgICAgIkVkaXQiOiAiUmVkaWdlciIsCisgICAgICAgICJGaWxlbmFtZToiOiAiRmlsbmF2bjoiLAorICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIlZlbmQgdmFuZHJldCIsCisgICAgICAgICJGbGlwIEltYWdlIjogIlZlbmQgYmlsbGVkZSIsCisgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIlZlbmQgbG9kcmV0IiwKKyAgICAgICAgIkZvbGRlciBOYW1lOiI6ICJNYXBwZW5hdm4iLAorICAgICAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIkdJRi1Gb3JtYXQgaWtrZSB1bmRlcnN0w7h0dGV0IC0ga2FuIGlra2UgcmVkaWdlcmVzLiIsCisgICAgICAgICJIZWlnaHQ6IjogIkjDuGpkZToiLAorICAgICAgICAiSW1hZ2UgRm9ybWF0IjogIkJpbGxlZGZvcm1hdDoiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIkluZHPDpnQgYmlsbGVkZSIsCisgICAgICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICJVZ3lsZGlnIGJhc2UgbWFwcGU6IiwKKyAgICAgICAgIkpQRUcgSGlnaCI6ICJKUEVHIGjDuGoiLAorICAgICAgICAiSlBFRyBMb3ciOiAiSlBFRyBsYXYiLAorICAgICAgICAiSlBFRyBNZWRpdW0iOiAiSlBFRyBtZWxsZW0iLAorICAgICAgICAiTGVmdCI6ICJWZW5zdHJlIiwKKyAgICAgICAgIkxvY2siOiAiTMOlcyIsCisgICAgICAgICJNYXJrZXIiOiAiTWFya8O4ciIsCisgICAgICAgICJNZWFzdXJlIjogIk3DpWxlYsOlbmQiLAorICAgICAgICAiTWlkZGxlIjogIk1pZHQiLAorICAgICAgICAiTmV3IEZvbGRlciI6ICJOeSBtYXBwZSIsCisgICAgICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiSW5nZW4gYmlsbGVkZXIgdGlsZ8OmbmdlbGlnIiwKKyAgICAgICAgIk5vdCBzZXQiOiAiVWJlc3RlbXQiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJCaWxsZWRldHMgcG9zaXRpb24iLAorICAgICAgICAiUXVhbGl0eToiOiAiS3ZhbGl0ZXQiLAorICAgICAgICAiUmVmcmVzaCI6ICJPcGRhdGVyIiwKKyAgICAgICAgIlJlc2l6ZSI6ICLDhm5kcmUgc3TDuHJyZWxzZSIsCisgICAgICAgICJSaWdodCI6ICJIw7hqcmUiLAorICAgICAgICAiUm90YXRlIjogIlJvdGVyZSIsCisgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiRHJlaiBiaWxsZWRlIiwKKyAgICAgICAgIlNhdmUiOiAiR2VtIiwKKyAgICAgICAgIlN0YXJ0IFg6IjogIlN0YXJ0IFgiLAorICAgICAgICAiU3RhcnQgWToiOiAiU3RhcnQgWSIsCisgICAgICAgICJUZXh0dG9wIjogIlRla3N0dG9wIiwKKyAgICAgICAgIlRvcCI6ICJUb3AiLAorICAgICAgICAiVHJhc2giOiAiUGFwaXJrdXJ2IiwKKyAgICAgICAgIlc6IjogIlc6IiwKKyAgICAgICAgIldpZHRoOiI6ICJCcmVkZGU6IgorICAgIH0sCisgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgIkJhY2tncm91bmQiOiAiQmFnZ3J1bmQiLAorICAgICAgICAiQmFzZWxpbmUiOiAiR3J1bmRsaW5qZSIsCisgICAgICAgICJCb3JkZXIiOiAiUmFtbWUiLAorICAgICAgICAiQm90dG9tIjogIlRla3N0YnVuZCIsCisgICAgICAgICJDZW50ZXIiOiAiQ2VudHJlciIsCisgICAgICAgICJDaGFyIjogIlBsYWRzIiwKKyAgICAgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIlNhbW1lbnNtZWx0IHJhbW1lciIsCisgICAgICAgICJGRyBDb2xvciI6ICJGb250IGZhcnZlIiwKKyAgICAgICAgIkZsb2F0IjogIkp1c3RlcmluZyIsCisgICAgICAgICJIZWlnaHQiOiAiSMO4amRlIiwKKyAgICAgICAgIkltYWdlIFVSTCI6ICJCaWxsZWRlIFVSTCIsCisgICAgICAgICJKdXN0aWZ5IjogIkxpZ2UgbWFyZ2VuZXIiLAorICAgICAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgICAgICJMZWZ0IjogIlZlbnN0cmUiLAorICAgICAgICAiTWFyZ2luIjogIk1hcmdlbiIsCisgICAgICAgICJNaWRkbGUiOiAiTWlkdCIsCisgICAgICAgICJOb25lIjogIkluZ2VuIiwKKyAgICAgICAgIlBhZGRpbmciOiAiTWFyZ2VuIiwKKyAgICAgICAgIlJpZ2h0IjogIkjDuGpyZSIsCisgICAgICAgICJUZXh0IGFsaWduIjogIlRla3N0IiwKKyAgICAgICAgIlRvcCI6ICJUb3AiLAorICAgICAgICAiVmVydGljYWwgYWxpZ24iOiAiVmVydGlrYWwgcGxhY2VyaW5nIiwKKyAgICAgICAgIldpZHRoIjogIkJyZWRkZSIsCisgICAgICAgICJwZXJjZW50IjogInByb2NlbnQiLAorICAgICAgICAicGl4ZWxzIjogInBpeGVsIgorICAgIH0sCisgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGxlciIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJCdW5kIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJDZW50cmVyZXQiLAorICAgICAgICAiQWxpZ25tZW50OiI6ICJKdXN0ZXJpbmc6IiwKKyAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJBbHRlcm5hdGl2IHRleHQ6IiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkdydW5kbGluamUiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiS2FudGJyZWRkZToiLAorICAgICAgICAiQm90dG9tIjogIlRla3N0YnVuZCIsCisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkFuZ2l2IGJpbGxlZGV0cyBVUkwiLAorICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiZm9yIGJyb3dzZXJlIGRlciBpa2tlIHVuZGVyc3TDuHR0ZXIgYmlsbGVkZXIiLAorICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIlZhbmRyZXQgZnlsZCIsCisgICAgICAgICJIb3Jpem9udGFsOiI6ICJ2YW5kcmV0OiIsCisgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICJCaWxsZWRlIHNtdWdraWc6IiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiQmlsbGVkZSBVUkw6IiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICJJbmRzw6Z0IGJpbGxlZGUiLAorICAgICAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIlRvbSBodmlzIGluZ2VuIGthbnQiLAorICAgICAgICAiTGVmdCI6ICJWZW5zdHJlIiwKKyAgICAgICAgIk1pZGRsZSI6ICJNaWR0IiwKKyAgICAgICAgIk5vdCBzZXQiOiAiVWJlc3RlbXQiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJCaWxsZWRldHMgcG9zaXRpb24iLAorICAgICAgICAiUHJldmlldyI6ICJTbXVna2lnIiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJTbXVna2lnIGFmIGJpbGxlZGV0IGkgZXQgbnl0IHZpbmR1ZSIsCisgICAgICAgICJSaWdodCI6ICJIw7hqcmUiLAorICAgICAgICAiU3BhY2luZyI6ICJBZnN0YW5kIiwKKyAgICAgICAgIlRleHR0b3AiOiAiVGVrc3R0b3AiLAorICAgICAgICAiVG9wIjogIlRvcCIsCisgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIkxvZHJldCBmeWxkIiwKKyAgICAgICAgIlZlcnRpY2FsOiI6ICJsb2RyZXQ6IiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiRHUgc2thbCBhbmdpdmUgZW4gVVJMIgorICAgIH0sCisgICAgIkluc2VydE1hcnF1ZWUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICAgICAiSGVpZ2h0OiI6ICJIw7hqZGU6IiwKKyAgICAgICAgIkxlZnQiOiAiVmVuc3RyZSIsCisgICAgICAgICJOYW1lIjogIk5hdm4iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUmlnaHQiOiAiSMO4anJlIiwKKyAgICAgICAgIldpZHRoOiI6ICJCcmVkZGU6IgorICAgIH0sCisgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsZXIiCisgICAgfSwKKyAgICAiSW5zZXJ0UGljdHVyZSI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJCdW5kIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJDZW50cmVyZXQiLAorICAgICAgICAiQWxpZ25tZW50OiI6ICJKdXN0ZXJpbmc6IiwKKyAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJBbHRlcm5hdGl2IHRleHQ6IiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkdydW5kbGluamUiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiS2FudGJyZWRkZToiLAorICAgICAgICAiQm90dG9tIjogIlRla3N0YnVuZCIsCisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkFuZ2l2IGJpbGxlZGV0cyBVUkwiLAorICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiZm9yIGJyb3dzZXJlIGRlciBpa2tlIHVuZGVyc3TDuHR0ZXIgYmlsbGVkZXIiLAorICAgICAgICAiSGVpZ2h0OiI6ICJIw7hqZGU6IiwKKyAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICJWYW5kcmV0IGZ5bGQiLAorICAgICAgICAiSG9yaXpvbnRhbDoiOiAidmFuZHJldDoiLAorICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiQmlsbGVkZSBzbXVna2lnOiIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIkJpbGxlZGUgVVJMOiIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiSW5kc8OmdCBiaWxsZWRlIiwKKyAgICAgICAgIkxheW91dCI6ICJMYXlvdXQiLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJUb20gaHZpcyBpbmdlbiBrYW50IiwKKyAgICAgICAgIkxlZnQiOiAiVmVuc3RyZSIsCisgICAgICAgICJNaWRkbGUiOiAiTWlkdCIsCisgICAgICAgICJOb3Qgc2V0IjogIlViZXN0ZW10IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiQmlsbGVkZXRzIHBvc2l0aW9uIiwKKyAgICAgICAgIlByZXZpZXciOiAiU211Z2tpZyIsCisgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiU211Z2tpZyBhZiBiaWxsZWRldCBpIGV0IG55dCB2aW5kdWUiLAorICAgICAgICAiUmlnaHQiOiAiSMO4anJlIiwKKyAgICAgICAgIlNpemUiOiAiU3TDuHJyZWxzZSIsCisgICAgICAgICJTcGFjaW5nIjogIkFmc3RhbmQiLAorICAgICAgICAiVGV4dHRvcCI6ICJUZWtzdHRvcCIsCisgICAgICAgICJUb3AiOiAiVG9wIiwKKyAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiTG9kcmV0IGZ5bGQiLAorICAgICAgICAiVmVydGljYWw6IjogImxvZHJldDoiLAorICAgICAgICAiV2lkdGg6IjogIkJyZWRkZToiCisgICAgfSwKKyAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGxlciIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGxlciIKKyAgICB9LAorICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJCdW5kIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJDZW50cmVyZXQiLAorICAgICAgICAiQWxpZ25tZW50OiI6ICJKdXN0ZXJpbmc6IiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkdydW5kbGluamUiLAorICAgICAgICAiQm9yZGVyIjogIlJhbW1lIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIkthbnRicmVkZGU6IiwKKyAgICAgICAgIkJvdHRvbSI6ICJUZWtzdGJ1bmQiLAorICAgICAgICAiQ2FuY2VsIjogIkFubnVsbGVyIiwKKyAgICAgICAgIkNhcHRpb24iOiAiVGl0ZWwiLAorICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICJDZWxsZWZ5bGQ6IiwKKyAgICAgICAgIkNlbGwgc3BhY2luZzoiOiAiQ2VsbGVhZnN0YW5kOiIsCisgICAgICAgICJDb2xzOiI6ICJTw7hqbGVyOiIsCisgICAgICAgICJFbSI6ICJHZXZpZXJ0IChFbSkiLAorICAgICAgICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICJGYXN0LWJyZWRkZSBzw7hqbGVyIiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICJJbmRzw6Z0IHRhYmVsIiwKKyAgICAgICAgIkxheW91dCI6ICJMYXlvdXQiLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJUb20gaHZpcyBpbmdlbiBrYW50IiwKKyAgICAgICAgIkxlZnQiOiAiVmVuc3RyZSIsCisgICAgICAgICJNaWRkbGUiOiAiTWlkdCIsCisgICAgICAgICJOb3Qgc2V0IjogIlViZXN0ZW10IiwKKyAgICAgICAgIk51bWJlciBvZiBjb2x1bW5zIjogIkFudGFsIHPDuGpsZXIiLAorICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAiQW50YWwgcsOma2tlciIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQZXJjZW50IjogIlByb2NlbnQiLAorICAgICAgICAiUGl4ZWxzIjogIlBpeGVsIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiUGxhY2VyaW5nIGFmIHRhYmVsIiwKKyAgICAgICAgIlJpZ2h0IjogIkjDuGpyZSIsCisgICAgICAgICJSb3dzOiI6ICJSw6Zra2VyOiIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIkFmc3RhbmQgbWVsbGVtIGNlbGxlciIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIkx1ZnQgbWVsbGVtIGluZGhvbGQgb2cga2FudGVyIiwKKyAgICAgICAgIlNwYWNpbmciOiAiQWZzdGFuZCIsCisgICAgICAgICJUZXh0dG9wIjogIlRla3N0dG9wIiwKKyAgICAgICAgIlRvcCI6ICJUb3AiLAorICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIlRhYmVsYnJlZGRlIiwKKyAgICAgICAgIldpZHRoIHVuaXQiOiAiQnJlZGRlZW5oZWQiLAorICAgICAgICAiV2lkdGg6IjogIkJyZWRkZToiLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICJEdSBza2FsIHNrcml2ZSBhbnRhbGxldCBhZiBzw7hqbGVyIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAiRHUgc2thbCBza3JpdmUgYW50YWxsZXQgYWYgcsOma2tlciIKKyAgICB9LAorICAgICJMaW5rZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIkluZHPDpnQvcmVkaWdlciBoeXBlcmxpbmsiLAorICAgICAgICAiTmFtZToiOiAiTmF2biIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJTaXplOiI6ICJTdMO4cnJlbHNlIiwKKyAgICAgICAgIlRhcmdldDoiOiAiUGxhY2VyaW5nOiIsCisgICAgICAgICJVUkw6IjogIlVSTDoiLAorICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIlbDpmxnIHZlbmxpZ3N0IG5vZ2V0IHRla3N0IGbDuHIgZHUgbGF2ZXIgZXQgbnl0IGxpbmsuIgorICAgIH0sCisgICAgIk1vb3Rvb2xzRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIkluZHPDpnQgZmlsLWxpbmsiLAorICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIlbDpmxnIHZlbmxpZ3N0IG5vZ2V0IHRla3N0IGbDuHIgZHUgbGF2ZXIgZXQgbnl0IGxpbmsuIgorICAgIH0sCisgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICAgICAiSW1hZ2UgUHJldmlldyI6ICJCaWxsZWRlIHNtdWdraWc6IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlByZXZpZXciOiAiU211Z2tpZyIsCisgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiU211Z2tpZyBhZiBiaWxsZWRldCBpIGV0IG55dCB2aW5kdWUiCisgICAgfSwKKyAgICAiT3BlcmEiOiB7CisgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIkluZHPDpnQta25hcHBlbiB2aXJrZXIgaWtrZSBpIE1vemlsbGEtYmFzZXJlZGUgYnJvd3NlcmUuIEJydWcgQ3RybC1WIHDDpSB0YXN0YXR1cmV0IGZvciBhdCBpbmRzw6Z0dGUuIgorICAgIH0sCisgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsZXIiCisgICAgfSwKKyAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAiQ2FuY2VsIjogIkFubnVsbGVyIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIkFubnVsbGVyIiwKKyAgICAgICAgIkNvcHkiOiAiS29waWVyIiwKKyAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICJNYXBwZSBvcCIsCisgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiRmlsIE1hbmFnZXIiLAorICAgICAgICAiRmlsZW5hbWUiOiAiRmlsbmF2bjoiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIkluZHPDpnQgYmlsbGVkZSIsCisgICAgICAgICJOZXcgRm9sZGVyIjogIk55IG1hcHBlIiwKKyAgICAgICAgIlNhdmUiOiAiR2VtIiwKKyAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICJWw6ZsZyB2ZW5saWdzdCBub2dldCB0ZWtzdCBmw7hyIGR1IGxhdmVyIGV0IG55dCBsaW5rLiIKKyAgICB9LAorICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGxlciIKKyAgICB9LAorICAgICJTYXZlU3VibWl0IjogeworICAgICAgICAiU2F2ZSI6ICJHZW0iCisgICAgfSwKKyAgICAiU2V0SWQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiU21hcnRSZXBsYWNlIjogeworICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiU3BlbGxDaGVja2VyIjogeworICAgICAgICAiQ2FuY2VsIjogIkFubiB1bGVyIiwKKyAgICAgICAgIkRpY3Rpb25hcnkiOiAiT3JkYm9nIiwKKyAgICAgICAgIkZpbmlzaGVkIGxpc3Qgb2YgbWlzcGVsbGVkIHdvcmRzIjogIkxpc3RlbiBtZWQgc3RhdmVmZWpsIGVyIGdlbm5lbWfDpWV0IiwKKyAgICAgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIkplZyB2aWwgw6VibmUgZGV0IGkgZW4gbnkgc2lkZS4iLAorICAgICAgICAiSWdub3JlIjogIklnbm9yZXIiLAorICAgICAgICAiSWdub3JlIGFsbCI6ICJJZ25vcmVyIGFsbGUiLAorICAgICAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIkRlciBibGV2IGlra2UgZnVuZGV0IG5vZ2xlIHN0YXZlZmVqbCBtZWQgZGVuIHZhbGd0ZSBvcmRib2cuIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk9yaWdpbmFsIHdvcmQiOiAiT3ByaW5kZWxpZ3Qgb3JkIiwKKyAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gb3BlbiB0aGlzIGxpbmsiOiAiVmlsIGR1IGbDuGxnZSBkZXR0ZSBsaW5rPyIsCisgICAgICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiVmVudCB2ZW5saWdzdC4gIEhlbnRlciBzdGF2ZWtvbnRyb2wuIiwKKyAgICAgICAgIlBsZWFzZSB3YWl0OiBjaGFuZ2luZyBkaWN0aW9uYXJ5IHRvIjogIlZlbnQgdmVubGlnc3Q6IHNraWZ0ZXIgb3JkYm9nIHRpbCIsCisgICAgICAgICJSZS1jaGVjayI6ICJUamVrIGlnZW4iLAorICAgICAgICAiUmVwbGFjZSI6ICJFcnN0YXQiLAorICAgICAgICAiUmVwbGFjZSBhbGwiOiAiRXJzdGF0IGFsbGUiLAorICAgICAgICAiUmVwbGFjZSB3aXRoIjogIkVyc3RhdCBtZWQiLAorICAgICAgICAiU3BlbGwtY2hlY2siOiAiU3RhdmVrb250cm9sIiwKKyAgICAgICAgIlN1Z2dlc3Rpb25zIjogIkZvcnNsYWciLAorICAgICAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIkFsbGUgZGluZSDDpm5kcmluZ2VyIHZpbCBnw6UgdGFidCwgdmlsIGR1IGZvcnRzw6Z0dGU/IgorICAgIH0sCisgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICAgICAiQ2xlYW4gdXAgSFRNTCI6ICJSZW5nw7hyIEhUTUwiLAorICAgICAgICAiR2VuZXJhbCB0aWR5IHVwIGFuZCBjb3JyZWN0aW9uIG9mIHNvbWUgcHJvYmxlbXMuIjogIkdlbmVyZWwgb3ByeWRuaW5nIG9nIHJldHRlbHNlIGFmIGRpdmVyc2UgcHJvYmxlbWVyLiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQbGVhc2Ugc2VsZWN0IGZyb20gdGhlIGZvbGxvd2luZyBjbGVhbmluZyBvcHRpb25zLi4uIjogIlbDpmxnIGV0IGVsbGVyIGZsZXJlIGFmIGbDuGxnZW5kZSByZW5nw7hyaW5nc3bDpnJrdMO4amVyLi4uIiwKKyAgICAgICAgIlJlbW92ZSBjdXN0b20gZm9udCBzaXplcy4iOiAiU2xldCBza3JpZnRzdMO4cnJlbHNlci4iLAorICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0ZXh0IGNvbG9ycy4iOiAiU2xldCB0ZWtzdGZhcnZlci4iLAorICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0eXBlZmFjZXMgKGZvbnQgXCJzdHlsZXNcIikuIjogIlNsZXQgc2tyaWZ0c25pdCAoZm9udCBcInN0eWxlc1wiKS4iLAorICAgICAgICAiUmVtb3ZlIGxhbmcgYXR0cmlidXRlcy4iOiAiU2xldCBsYW5nIGF0dHJpYnV0dGVyLiIsCisgICAgICAgICJSZXBsYWNlIGRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzIHdpdGggbm9uLWRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzLiI6ICJFcnN0YXQgZGlyZWN0aW9uYWwgYW5mw7hyc2Vsc3RlZ24gbWVkIGlra2UtZGlyZWN0aW9uYWwgYW5mw7hyc2Vsc3RlZ24iCisgICAgfSwKKyAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAiQWxsIGZvdXIgc2lkZXMiOiAiQWxsZSBmaXJlIHNpZGVyIiwKKyAgICAgICAgIkJvcmRlcnMiOiAiS2FudGVyIiwKKyAgICAgICAgIkNhbmNlbCI6ICJGb3J0cnlkIiwKKyAgICAgICAgIkNhcHRpb24iOiAiVGl0ZWwiLAorICAgICAgICAiQ2VsbCBQcm9wZXJ0aWVzIjogIkNlbGxlIGVnZW5za2FiZXIiLAorICAgICAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogIkNlbGxlIGVnZW5za2FiZXIiLAorICAgICAgICAiRGVsZXRlIGNlbGwiOiAiU2xldCBjZWxsZSIsCisgICAgICAgICJEZWxldGUgY29sdW1uIjogIlNsZXQga29sbG9ubmUiLAorICAgICAgICAiRGVsZXRlIHJvdyI6ICJTbGV0IHLDpmtrZSIsCisgICAgICAgICJEZXNjcmlwdGlvbiI6ICJCZXNrcml2ZWxzZSIsCisgICAgICAgICJGcmFtZXMiOiAiVWR2ZW5kaWciLAorICAgICAgICAiSW5zZXJ0IGNlbGwgYWZ0ZXIiOiAiSW5kc8OmdCBjZWxsZSBlZnRlciIsCisgICAgICAgICJJbnNlcnQgY2VsbCBiZWZvcmUiOiAiSW5kc8OmdCBjZWxsZSBmw7hyIiwKKyAgICAgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAiSW5kc8OmdCBrb2xvbm5lIGVmdGVyIiwKKyAgICAgICAgIkluc2VydCBjb2x1bW4gYmVmb3JlIjogIkluZHPDpnQga29sb25uZSBmw7hyIiwKKyAgICAgICAgIkluc2VydCByb3cgYWZ0ZXIiOiAiSW5kc8OmdCByw6Zra2UgZWZ0ZXIiLAorICAgICAgICAiSW5zZXJ0IHJvdyBiZWZvcmUiOiAiSW5kc8OmdCByw6Zra2UgZsO4ciIsCisgICAgICAgICJNZXJnZSBjZWxscyI6ICJTYW1tZW5zw6Z0IGNlbGxlciIsCisgICAgICAgICJObyBydWxlcyI6ICJJbmdlbiByYW1tZXIiLAorICAgICAgICAiTm8gc2lkZXMiOiAiSW5nZW4gc2lkZXIiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUGFkZGluZyI6ICJNYXJnZW4iLAorICAgICAgICAiUGxlYXNlIGNsaWNrIGludG8gc29tZSBjZWxsIjogIktsaWsgcMOlIGVuIGNlbGxlIiwKKyAgICAgICAgIlJvdyBQcm9wZXJ0aWVzIjogIlLDpmtrZSBlZ2Vuc2thYmVyIiwKKyAgICAgICAgIlJvdyBwcm9wZXJ0aWVzIjogIlLDpmtrZSBlZ2Vuc2thYmVyIiwKKyAgICAgICAgIlJvd3MiOiAiUsOma2tlcjoiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICJSYW1tZXIgbWVsbGVtIHLDpmtrZXIgb2cga29sb25uZXIiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBjb2x1bW5zIG9ubHkiOiAiS3VuIHJhbW1lciBtZWxsZW0ga29sb25uZXIiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiByb3dzIG9ubHkiOiAiS3VuIHJhbW1lciBtZWxsZW0gcsOma2tlciIsCisgICAgICAgICJTcGFjaW5nIjogIkFmc3RhbmQiLAorICAgICAgICAiU3BhY2luZyBhbmQgcGFkZGluZyI6ICJBZnN0YW5kIG9nIG1hcmdlbiIsCisgICAgICAgICJTcGxpdCBjb2x1bW4iOiAiT3BkZWwga29sb25uZSIsCisgICAgICAgICJTcGxpdCByb3ciOiAiT3BkZWwgcsOma2tlIiwKKyAgICAgICAgIlN1bW1hcnkiOiAiQmVza3JpdmVsc2UiLAorICAgICAgICAiVGFibGUgUHJvcGVydGllcyI6ICJUYWJlbCBlZ2Vuc2thYmVyIiwKKyAgICAgICAgIlRhYmxlIHByb3BlcnRpZXMiOiAiVGFiZWwgZWdlbnNrYWJlciIsCisgICAgICAgICJUaGUgYm90dG9tIHNpZGUgb25seSI6ICJLdW4gaSBidW5kZW4iLAorICAgICAgICAiVGhlIGxlZnQtaGFuZCBzaWRlIG9ubHkiOiAiS3VuIGkgaMO4anJlIHNpZGUiLAorICAgICAgICAiVGhlIHJpZ2h0IGFuZCBsZWZ0IHNpZGVzIG9ubHkiOiAiS3VuIGkgc2lkZXJuZSIsCisgICAgICAgICJUaGUgcmlnaHQtaGFuZCBzaWRlIG9ubHkiOiAiS3VuIGkgdmVuc3RyZSBzaWRlIiwKKyAgICAgICAgIlRoZSB0b3AgYW5kIGJvdHRvbSBzaWRlcyBvbmx5IjogIkt1biBpIHRvcCBvZyBidW5kIiwKKyAgICAgICAgIlRoZSB0b3Agc2lkZSBvbmx5IjogIkt1biBpIHRvcHBlbiIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiRHUga2FuIGlra2Ugc2xldHRlIGRlbiBzaWRzdGUgY2VsbGUgaSBlbiByw6Zra2UuIiwKKyAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iOiAiRHUga2FuIGlra2Ugc2xldHRlIGRlbiBzaWRzdGUga29sb25uZSBpIGVuIHRhYmVsLiIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIkR1IGthbiBpa2tlIHNsZXR0ZSBkZW4gc2lkc3RlIHLDpmtrZSBpIGVuIHRhYmVsLiIsCisgICAgICAgICJwaXhlbHMiOiAicGl4ZWwiCisgICAgfSwKKyAgICAiVGVtcGxhdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsZXIiCisgICAgfSwKKyAgICAiVW5Gb3JtYXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiWGluaGEiOiB7CisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJPbSBYaW5oYSIsCisgICAgICAgICJBZGRyZXNzIjogIkFkcmVzc2UiLAorICAgICAgICAiQmFja2dyb3VuZCBDb2xvciI6ICJCYWdncnVuZHNmYXJ2ZSIsCisgICAgICAgICJCb2xkIjogIkZlZCIsCisgICAgICAgICJCdWxsZXRlZCBMaXN0IjogIlB1bmt0bGlzdGUiLAorICAgICAgICAiQ2xlYW4gY29udGVudCBwYXN0ZWQgZnJvbSBXb3JkIjogIlJlbnMgaW5kaG9sZCBrb3BpZXJldCBmcmEgV29yZCIsCisgICAgICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICJGamVybiBza3JpZnQgdmFsZyIsCisgICAgICAgICJDbGVhciBNU09mZmljZSB0YWdzIjogIk1TT2ZmaWNlIGZpbHRlciIsCisgICAgICAgICJDbG9zZSI6ICJMdWsiLAorICAgICAgICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICJPYmpla3QgcmVnaXN0cmVyZXMiLAorICAgICAgICAiQ29weSBzZWxlY3Rpb24iOiAiS29waWVyIiwKKyAgICAgICAgIkNyZWF0ZSBTdGF0dXNiYXIiOiAiT3ByZXR0ZXIgc3RhdHVzbGluamUiLAorICAgICAgICAiQ3JlYXRlIFRvb2xiYXIiOiAiT3ByZXR0ZXIgdsOmcmt0w7hqc2xpbmplIiwKKyAgICAgICAgIkN1cnJlbnQgc3R5bGUiOiAiQW52ZW5kdCBzdGlsIiwKKyAgICAgICAgIkN1dCBzZWxlY3Rpb24iOiAiS2xpcCIsCisgICAgICAgICJEZWNyZWFzZSBJbmRlbnQiOiAiRm9ybWluZHNrIGluZHJ5a25pbmciLAorICAgICAgICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiVGVrc3QgdmVuc3RyZSBtb2QgaMO4anJlIiwKKyAgICAgICAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIlRla3N0IGjDuGpyZSBtb2QgdmVuc3RyZSIsCisgICAgICAgICJGaW5pc2hpbmciOiAiQWZzbHV0dGVyIiwKKyAgICAgICAgIkZvbnQgQ29sb3IiOiAiU2tyaWZ0ZmFydmUiLAorICAgICAgICAiRm9ybWF0dGVkIjogIkZvcm1hdGVyZXQiLAorICAgICAgICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIlhpbmhhIEZyYW1ld29yayBnZW5lcmVyZXMiLAorICAgICAgICAiSGVhZGluZyAxIjogIk92ZXJza3JpZnQgMSIsCisgICAgICAgICJIZWFkaW5nIDIiOiAiT3ZlcnNrcmlmdCAyIiwKKyAgICAgICAgIkhlYWRpbmcgMyI6ICJPdmVyc2tyaWZ0IDMiLAorICAgICAgICAiSGVhZGluZyA0IjogIk92ZXJza3JpZnQgNCIsCisgICAgICAgICJIZWFkaW5nIDUiOiAiT3ZlcnNrcmlmdCA1IiwKKyAgICAgICAgIkhlYWRpbmcgNiI6ICJPdmVyc2tyaWZ0IDYiLAorICAgICAgICAiSGVhZGluZ3MiOiAiT3ZlcnNrcmlmdCAxIHRpbCA2IiwKKyAgICAgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIkhqw6ZscCIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiVmFuZHJldCBzdHJlZyIsCisgICAgICAgICJJbmNyZWFzZSBJbmRlbnQiOiAiRm9yw7hnIGluZHJ5a25pbmciLAorICAgICAgICAiSW5pdCBlZGl0b3Igc2l6ZSI6ICJTdMO4cnJlbHNlbiBiZXJlZ25lcyIsCisgICAgICAgICJJbnNlcnQgVGFibGUiOiAiSW5kc8OmdCB0YWJlbCIsCisgICAgICAgICJJbnNlcnQgV2ViIExpbmsiOiAiSW5kc8OmdCBoeXBlcmxpbmsiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJbmRzw6Z0L3Vkc2tpZnQgYmlsbGVkZSIsCisgICAgICAgICJJbnNlcnQvT3ZlcndyaXRlIjogIkluZHPDpnQvT3ZlcnNrcml2IiwKKyAgICAgICAgIkl0YWxpYyI6ICJLdXJzaXYiLAorICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiQ2VudHJlciIsCisgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAiTGlnZSBtYXJnZW5lciIsCisgICAgICAgICJKdXN0aWZ5IExlZnQiOiAiVmVuc3RyZWp1c3RlciIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIkjDuGpyZWp1c3RlciIsCisgICAgICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiVGFzdGF0dXJnZW52ZWplIiwKKyAgICAgICAgIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ISI6ICJFZGl0b3JlbiBoZW50ZXMgaW5kLiBWZW50IHZlbmxpZ3N0LiIsCisgICAgICAgICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIjogIlBsdWdpbiAkcGx1Z2luIGhlbnRlcyIsCisgICAgICAgICJOb3JtYWwiOiAiTm9ybWFsIiwKKyAgICAgICAgIk9yZGVyZWQgTGlzdCI6ICJPcmRuZXQgbGlzdGUiLAorICAgICAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiSW5kc8OmdCIsCisgICAgICAgICJQYXRoIjogIlNUaSIsCisgICAgICAgICJQcmludCBkb2N1bWVudCI6ICJVZHNrcml2IGRva3VtZW50IiwKKyAgICAgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkdlbnRhZyBzaWRzdGUgw6ZuZHJpbmciLAorICAgICAgICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAiUGx1Z2luICRwbHVnaW4gcmVnaXN0cmVyZXMiLAorICAgICAgICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAiRmplcm4gZm9ybWF0ZXJpbmciLAorICAgICAgICAiU2F2ZSBhcyI6ICJHZW0gc29tIiwKKyAgICAgICAgIlNlbGVjdCBhbGwiOiAiVsOmbGcgYWx0IiwKKyAgICAgICAgIlNldCBmb3JtYXQgdG8gcGFyYWdyYXBoIjogIkZvcm1hdGVyIGFmc25pdCIsCisgICAgICAgICJTcGxpdCBCbG9jayI6ICJEZWwgYmxvayIsCisgICAgICAgICJTdHJpa2V0aHJvdWdoIjogIkdlbm5lbXN0cmVnbmluZyIsCisgICAgICAgICJTdWJzY3JpcHQiOiAiU8OmbmtldCBza3JpZnQiLAorICAgICAgICAiU3VwZXJzY3JpcHQiOiAiSMOmdmV0IHNrcmlmdCIsCisgICAgICAgICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAiRWRpdG9yZW4ga2VuZGVyIGbDuGxnZW5kZSBrb21iaW5hdGlvbmVyOiIsCisgICAgICAgICJUb2dnbGUgQm9yZGVycyI6ICJUYWJlbGthbnRlciB0aWwvZnJhIiwKKyAgICAgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJIVE1MIHZpc25pbmciLAorICAgICAgICAiVW5kZXJsaW5lIjogIlVuZGVyc3RyZWduaW5nIiwKKyAgICAgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkZvcnRyeWQgc2lkc3RlIMOmbmRyaW5nIiwKKyAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiVmlsIGR1IGZqZXJuZSBza3JpZnRmYXJ2ZSB2YWxnIiwKKyAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIlZpbCBkdSBmamVybmUgc2tyaWZ0c3TDuHJyZWxzZSB2YWxnIiwKKyAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICJWaWwgZHUgZmplcm4gc2tyaWZ0c25pdCB2YWxnIiwKKyAgICAgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJEdSBlciBpIFRFWFQgbW9kZS4gQnJ1ZyBbPD5dIGtuYXBwZW4gdGlsIGF0IHNraWZ0ZSB0aWwgdmlzdWVsIGVkaXRlcmluZy4iLAorICAgICAgICAiaW5zZXJ0IGxpbmVicmVhayI6ICJJbmRzw6Z0IGxpbmplc2tpZnQiLAorICAgICAgICAibmV3IHBhcmFncmFwaCI6ICJOeXQgYWZzbml0IgorICAgIH0sCisgICAgIl9fTkVXX1RSQU5TTEFUSU9OU19fIjogeworICAgICAgICAiQWJicmV2aWF0aW9uIjogeworICAgICAgICAgICAgIkFiYnJldmlhdGlvbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICIiLAorICAgICAgICAgICAgIkV4cGFuc2lvbjoiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2hhckNvdW50ZXIiOiB7CisgICAgICAgICAgICAiLi4uIGluIHByb2dyZXNzIjogIiIsCisgICAgICAgICAgICAiQ2hhcnMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIiIsCisgICAgICAgICAgICAiV29yZHMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2hhcmFjdGVyTWFwIjogeworICAgICAgICAgICAgIkluc2VydCBzcGVjaWFsIGNoYXJhY3RlciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgICAgICJfRGVsZXRlIFJvdyI6ICIiLAorICAgICAgICAgICAgIl9JbWFnZSBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiX01vZGlmeSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1JlbW92ZSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1RhYmxlIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJDX2VsbCBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiQ2hlY19rIExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgYSBsaW5rIjogIiIsCisgICAgICAgICAgICAiQ3VycmVudCBVUkwgaXMiOiAiIiwKKyAgICAgICAgICAgICJEZV9sZXRlIENvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBDZWxsIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCByb3ciOiAiIiwKKyAgICAgICAgICAgICJIb3cgZGlkIHlvdSBnZXQgaGVyZT8gKFBsZWFzZSByZXBvcnQhKSI6ICIiLAorICAgICAgICAgICAgIklfbnNlcnQgUm93IEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluX3NlcnQgUm93IEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IF9Db2x1bW4gQmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBhZnRlciB0aGUgY3VycmVudCBub2RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGJlZm9yZSB0aGUgY3VycmVudCBub2RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENfb2x1bW4gQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDZWxsIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkxpbmsgcG9pbnRzIHRvOiI6ICIiLAorICAgICAgICAgICAgIk1ha2UgbGluX2suLi4iOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICIiLAorICAgICAgICAgICAgIk9wZW5zIHRoaXMgbGluayBpbiBhIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGVsZW1lbnQ6IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJSb193IFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBpbWFnZSBwcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIFJvdyBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlVubGluayB0aGUgY3VycmVudCBlbGVtZW50IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIiIsCisgICAgICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRlZmluaXRpb25MaXN0IjogeworICAgICAgICAgICAgImRlZmluaXRpb24gZGVzY3JpcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGxpc3QiOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIHRlcm0iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRGlhbG9ncyI6IHsKKyAgICAgICAgICAgICJTb21lIFRleHQgSGVyZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEeW5hbWljQ1NTIjogeworICAgICAgICAgICAgIkNob29zZSBzdHlsZXNoZWV0IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCI6ICIiLAorICAgICAgICAgICAgIlVuZGVmaW5lZCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFZGl0VGFnIjogeworICAgICAgICAgICAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICIiLAorICAgICAgICAgICAgIkVkaXQgVGFnIEJ5IFBlZyI6ICIiLAorICAgICAgICAgICAgIlRhZyBFZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICAgICAiIT0iOiAiIiwKKyAgICAgICAgICAgICIhaW4iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7LSI6ICIiLAorICAgICAgICAgICAgIiZndDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSZndDsiOiAiIiwKKyAgICAgICAgICAgICImbHQ7eCZndDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYCFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgLmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAwYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDJgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgM2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA0YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA3YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDhgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGBlYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsmbmJzcDtgMWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YCt7Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2AtOlxcIGAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLXs6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YENgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGNvc2AiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgbG5gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHBpYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgc2luYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0YW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRpbWVzYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZxdW90O3RleHQmcXVvdDsiOiAiIiwKKyAgICAgICAgICAgICInK2Zvcm11bGErJyI6ICIiLAorICAgICAgICAgICAgIigobiksKGspKSI6ICIiLAorICAgICAgICAgICAgIih4KzEpLyh4LTEpIjogIiIsCisgICAgICAgICAgICAiKiI6ICIiLAorICAgICAgICAgICAgIioqIjogIiIsCisgICAgICAgICAgICAiKy0iOiAiIiwKKyAgICAgICAgICAgICItJmd0OyI6ICIiLAorICAgICAgICAgICAgIi0mbHQ7IjogIiIsCisgICAgICAgICAgICAiLToiOiAiIiwKKyAgICAgICAgICAgICItPSI6ICIiLAorICAgICAgICAgICAgIi8vIjogIiIsCisgICAgICAgICAgICAiL18iOiAiIiwKKyAgICAgICAgICAgICI6LiI6ICIiLAorICAgICAgICAgICAgIj0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiQCI6ICIiLAorICAgICAgICAgICAgIltbYSxiXSxbYyxkXV0iOiAiIiwKKyAgICAgICAgICAgICJcXFxcIjogIiIsCisgICAgICAgICAgICAiXFxuQ2xpY2sgaW4gdGhlIGJveCB0byB1c2UgeW91ciBrZXlib2FyZCBvciB1c2UgdGhlIGJ1dHRvbnNcXG4iOiAiIiwKKyAgICAgICAgICAgICJeXiI6ICIiLAorICAgICAgICAgICAgIl5eXiI6ICIiLAorICAgICAgICAgICAgIl9ffCI6ICIiLAorICAgICAgICAgICAgIl98XyI6ICIiLAorICAgICAgICAgICAgImAhPWAiOiAiIiwKKyAgICAgICAgICAgICJgIWluYCI6ICIiLAorICAgICAgICAgICAgImAmYW5kO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmNhcDtgIjogIiIsCisgICAgICAgICAgICAiYCZjdXA7YCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7LWAiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDt4Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJm9yO2AiOiAiIiwKKyAgICAgICAgICAgICJgJnF1b3Q7dGV4dCZxdW90O2AiOiAiIiwKKyAgICAgICAgICAgICJgKChuKSwoaykpYCI6ICIiLAorICAgICAgICAgICAgImAoeCsxKS8oeC0xKWAiOiAiIiwKKyAgICAgICAgICAgICJgKipgIjogIiIsCisgICAgICAgICAgICAiYCpgIjogIiIsCisgICAgICAgICAgICAiYCstYCI6ICIiLAorICAgICAgICAgICAgImAtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLSZsdDtgIjogIiIsCisgICAgICAgICAgICAiYC06YCI6ICIiLAorICAgICAgICAgICAgImAtPWAiOiAiIiwKKyAgICAgICAgICAgICJgLy9gIjogIiIsCisgICAgICAgICAgICAiYC9fYCI6ICIiLAorICAgICAgICAgICAgImA6LmAiOiAiIiwKKyAgICAgICAgICAgICJgPSZndDtgIjogIiIsCisgICAgICAgICAgICAiYEBgIjogIiIsCisgICAgICAgICAgICAiYFtbYSxiXSxbYyxkXV1gIjogIiIsCisgICAgICAgICAgICAiYFxcXFxgIjogIiIsCisgICAgICAgICAgICAiYF9ffGAiOiAiIiwKKyAgICAgICAgICAgICJgX3xfYCI6ICIiLAorICAgICAgICAgICAgImBBQWAiOiAiIiwKKyAgICAgICAgICAgICJgYWxlcGhgIjogIiIsCisgICAgICAgICAgICAiYGFscGhhYCI6ICIiLAorICAgICAgICAgICAgImBhbmRgIjogIiIsCisgICAgICAgICAgICAiYGJhcmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgQ0NgIjogIiIsCisgICAgICAgICAgICAiYGNjYWAiOiAiIiwKKyAgICAgICAgICAgICJgY2hpYCI6ICIiLAorICAgICAgICAgICAgImBkYXJyYCI6ICIiLAorICAgICAgICAgICAgImBkZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsYCI6ICIiLAorICAgICAgICAgICAgImBEZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRpYW1vbmRgIjogIiIsCisgICAgICAgICAgICAiYGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGR5L2R4YCI6ICIiLAorICAgICAgICAgICAgImBFRWAiOiAiIiwKKyAgICAgICAgICAgICJgZXBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgZXRhYCI6ICIiLAorICAgICAgICAgICAgImBmcmFgIjogIiIsCisgICAgICAgICAgICAiYEdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBnYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ3JhZGAiOiAiIiwKKyAgICAgICAgICAgICJgaGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaGF0YWAiOiAiIiwKKyAgICAgICAgICAgICJgaWZgIjogIiIsCisgICAgICAgICAgICAiYGluYCI6ICIiLAorICAgICAgICAgICAgImBpbnRgIjogIiIsCisgICAgICAgICAgICAiYGlvdGFgIjogIiIsCisgICAgICAgICAgICAiYGthcHBhYCI6ICIiLAorICAgICAgICAgICAgImBsYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYExhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGltXyh4LSZndDtvbylgIjogIiIsCisgICAgICAgICAgICAiYGxvZ2AiOiAiIiwKKyAgICAgICAgICAgICJgbXVgIjogIiIsCisgICAgICAgICAgICAiYE5OYCI6ICIiLAorICAgICAgICAgICAgImBubmAiOiAiIiwKKyAgICAgICAgICAgICJgbm90YCI6ICIiLAorICAgICAgICAgICAgImBudWAiOiAiIiwKKyAgICAgICAgICAgICJgbytgIjogIiIsCisgICAgICAgICAgICAiYG8uYCI6ICIiLAorICAgICAgICAgICAgImBPL2AiOiAiIiwKKyAgICAgICAgICAgICJgb2ludGAiOiAiIiwKKyAgICAgICAgICAgICJgb21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYE9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBvb2AiOiAiIiwKKyAgICAgICAgICAgICJgb3JgIjogIiIsCisgICAgICAgICAgICAiYG94YCI6ICIiLAorICAgICAgICAgICAgImBQaGlgIjogIiIsCisgICAgICAgICAgICAiYHBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGlgIjogIiIsCisgICAgICAgICAgICAiYHBpYCI6ICIiLAorICAgICAgICAgICAgImBwcm9kYCI6ICIiLAorICAgICAgICAgICAgImBwcm9wYCI6ICIiLAorICAgICAgICAgICAgImBQc2lgIjogIiIsCisgICAgICAgICAgICAiYHBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgUVFgIjogIiIsCisgICAgICAgICAgICAiYHF1YWRgIjogIiIsCisgICAgICAgICAgICAiYHJBcnJgIjogIiIsCisgICAgICAgICAgICAiYHJob2AiOiAiIiwKKyAgICAgICAgICAgICJgcm9vdChuKSh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgUlJgIjogIiIsCisgICAgICAgICAgICAiYHNmYWAiOiAiIiwKKyAgICAgICAgICAgICJgc2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYFNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzcXJ0KHgpYCI6ICIiLAorICAgICAgICAgICAgImBzcXVhcmVgIjogIiIsCisgICAgICAgICAgICAiYHN0YWNrcmVsKC0mZ3Q7KSgrKWAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViYCI6ICIiLAorICAgICAgICAgICAgImBzdWJlYCI6ICIiLAorICAgICAgICAgICAgImBzdW1gIjogIiIsCisgICAgICAgICAgICAiYHN1cGAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwZWAiOiAiIiwKKyAgICAgICAgICAgICJgdGF1YCI6ICIiLAorICAgICAgICAgICAgImBUaGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdGhldGFgIjogIiIsCisgICAgICAgICAgICAiYFRUYCI6ICIiLAorICAgICAgICAgICAgImB0dGFgIjogIiIsCisgICAgICAgICAgICAiYHVhcnJgIjogIiIsCisgICAgICAgICAgICAiYHVsYWAiOiAiIiwKKyAgICAgICAgICAgICJgdXBzaWxvbmAiOiAiIiwKKyAgICAgICAgICAgICJgdXVgIjogIiIsCisgICAgICAgICAgICAiYHZlY2FgIjogIiIsCisgICAgICAgICAgICAiYHZ2YCI6ICIiLAorICAgICAgICAgICAgImB4XyhtbilgIjogIiIsCisgICAgICAgICAgICAiYFhpYCI6ICIiLAorICAgICAgICAgICAgImB4aWAiOiAiIiwKKyAgICAgICAgICAgICJgeHhgIjogIiIsCisgICAgICAgICAgICAiYHpldGFgIjogIiIsCisgICAgICAgICAgICAiYFpaYCI6ICIiLAorICAgICAgICAgICAgImB8LSZndDtgIjogIiIsCisgICAgICAgICAgICAiYHwtLWAiOiAiIiwKKyAgICAgICAgICAgICJgfD09YCI6ICIiLAorICAgICAgICAgICAgImB8X19gIjogIiIsCisgICAgICAgICAgICAiYHx+YCI6ICIiLAorICAgICAgICAgICAgImB+PWAiOiAiIiwKKyAgICAgICAgICAgICJgfnxgIjogIiIsCisgICAgICAgICAgICAiYH5+YCI6ICIiLAorICAgICAgICAgICAgIkFBIjogIiIsCisgICAgICAgICAgICAiYWxlcGgiOiAiIiwKKyAgICAgICAgICAgICJhbHBoYSI6ICIiLAorICAgICAgICAgICAgImFuZCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aCBGb3JtdWxhIElucHV0IjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoTUwgRXhhbXBsZSI6ICIiLAorICAgICAgICAgICAgImJhcmEiOiAiIiwKKyAgICAgICAgICAgICJCYXNlZCBvbiBBU0NJSU1hdGhNTCBieSI6ICIiLAorICAgICAgICAgICAgImJiYSI6ICIiLAorICAgICAgICAgICAgImJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiZXRhIjogIiIsCisgICAgICAgICAgICAiQ0MiOiAiIiwKKyAgICAgICAgICAgICJjY2EiOiAiIiwKKyAgICAgICAgICAgICJjaGkiOiAiIiwKKyAgICAgICAgICAgICJkYXJyIjogIiIsCisgICAgICAgICAgICAiZGRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkZWwiOiAiIiwKKyAgICAgICAgICAgICJEZWx0YSI6ICIiLAorICAgICAgICAgICAgImRlbHRhIjogIiIsCisgICAgICAgICAgICAiZGlhbW9uZCI6ICIiLAorICAgICAgICAgICAgImRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkeS9keCI6ICIiLAorICAgICAgICAgICAgIkVFIjogIiIsCisgICAgICAgICAgICAiZXBzaSI6ICIiLAorICAgICAgICAgICAgImV0YSI6ICIiLAorICAgICAgICAgICAgIkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFzY2lpTWF0aE1MIHZpc2l0IHRoaXMgcGFnZToiOiAiIiwKKyAgICAgICAgICAgICJGb3JtdWxhIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgImZyYSI6ICIiLAorICAgICAgICAgICAgImdhbW1hIjogIiIsCisgICAgICAgICAgICAiR2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJncmFkIjogIiIsCisgICAgICAgICAgICAiaEFyciI6ICIiLAorICAgICAgICAgICAgImhhcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXRhIjogIiIsCisgICAgICAgICAgICAiaWYiOiAiIiwKKyAgICAgICAgICAgICJpbiI6ICIiLAorICAgICAgICAgICAgIklucHV0IjogIiIsCisgICAgICAgICAgICAiaW50IjogIiIsCisgICAgICAgICAgICAiaW50X2FeYmYoeClkeCI6ICIiLAorICAgICAgICAgICAgImlvdGEiOiAiIiwKKyAgICAgICAgICAgICJrYXBwYSI6ICIiLAorICAgICAgICAgICAgIkxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhcnIiOiAiIiwKKyAgICAgICAgICAgICJsQXJyIjogIiIsCisgICAgICAgICAgICAibGltXyh4LSZndDtvbykiOiAiIiwKKyAgICAgICAgICAgICJtdSI6ICIiLAorICAgICAgICAgICAgIk5OIjogIiIsCisgICAgICAgICAgICAibm4iOiAiIiwKKyAgICAgICAgICAgICJubm4iOiAiIiwKKyAgICAgICAgICAgICJub3QiOiAiIiwKKyAgICAgICAgICAgICJudSI6ICIiLAorICAgICAgICAgICAgIm8rIjogIiIsCisgICAgICAgICAgICAiby4iOiAiIiwKKyAgICAgICAgICAgICJPLyI6ICIiLAorICAgICAgICAgICAgIm9pbnQiOiAiIiwKKyAgICAgICAgICAgICJvbWVnYSI6ICIiLAorICAgICAgICAgICAgIk9tZWdhIjogIiIsCisgICAgICAgICAgICAib28iOiAiIiwKKyAgICAgICAgICAgICJvciI6ICIiLAorICAgICAgICAgICAgIm94IjogIiIsCisgICAgICAgICAgICAiUGhpIjogIiIsCisgICAgICAgICAgICAicGhpIjogIiIsCisgICAgICAgICAgICAicGkiOiAiIiwKKyAgICAgICAgICAgICJQaSI6ICIiLAorICAgICAgICAgICAgInByb2QiOiAiIiwKKyAgICAgICAgICAgICJwcm9wIjogIiIsCisgICAgICAgICAgICAicHNpIjogIiIsCisgICAgICAgICAgICAiUHNpIjogIiIsCisgICAgICAgICAgICAiUVEiOiAiIiwKKyAgICAgICAgICAgICJxdWFkIjogIiIsCisgICAgICAgICAgICAickFyciI6ICIiLAorICAgICAgICAgICAgInJobyI6ICIiLAorICAgICAgICAgICAgInJvb3QobikoeCkiOiAiIiwKKyAgICAgICAgICAgICJSUiI6ICIiLAorICAgICAgICAgICAgInNmYSI6ICIiLAorICAgICAgICAgICAgInNpZ21hIjogIiIsCisgICAgICAgICAgICAiU2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJzcXJ0KHgpIjogIiIsCisgICAgICAgICAgICAic3F1YXJlIjogIiIsCisgICAgICAgICAgICAic3RhY2tyZWwoLSZndDspKCspIjogIiIsCisgICAgICAgICAgICAic3ViIjogIiIsCisgICAgICAgICAgICAic3ViZSI6ICIiLAorICAgICAgICAgICAgInN1bSI6ICIiLAorICAgICAgICAgICAgInN1bV8obj0xKV5vbyI6ICIiLAorICAgICAgICAgICAgInN1cCI6ICIiLAorICAgICAgICAgICAgInN1cGUiOiAiIiwKKyAgICAgICAgICAgICJ0YXUiOiAiIiwKKyAgICAgICAgICAgICJUaGV0YSI6ICIiLAorICAgICAgICAgICAgInRoZXRhIjogIiIsCisgICAgICAgICAgICAiVFQiOiAiIiwKKyAgICAgICAgICAgICJ0dGEiOiAiIiwKKyAgICAgICAgICAgICJ1YXJyIjogIiIsCisgICAgICAgICAgICAidWxhIjogIiIsCisgICAgICAgICAgICAidXBzaWxvbiI6ICIiLAorICAgICAgICAgICAgInV1IjogIiIsCisgICAgICAgICAgICAidXV1IjogIiIsCisgICAgICAgICAgICAidmVjYSI6ICIiLAorICAgICAgICAgICAgInZ2IjogIiIsCisgICAgICAgICAgICAidnZ2IjogIiIsCisgICAgICAgICAgICAieF4obStuKSI6ICIiLAorICAgICAgICAgICAgInhfKG1uKSI6ICIiLAorICAgICAgICAgICAgIlhpIjogIiIsCisgICAgICAgICAgICAieGkiOiAiIiwKKyAgICAgICAgICAgICJ4eCI6ICIiLAorICAgICAgICAgICAgInpldGEiOiAiIiwKKyAgICAgICAgICAgICJaWiI6ICIiLAorICAgICAgICAgICAgInwtJmd0OyI6ICIiLAorICAgICAgICAgICAgInwtLSI6ICIiLAorICAgICAgICAgICAgInw9PSI6ICIiLAorICAgICAgICAgICAgInxfXyI6ICIiLAorICAgICAgICAgICAgInx+IjogIiIsCisgICAgICAgICAgICAifj0iOiAiIiwKKyAgICAgICAgICAgICJ+fCI6ICIiLAorICAgICAgICAgICAgIn5+IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZhbmN5U2VsZWN0cyI6IHsKKyAgICAgICAgICAgICInK29wdC50ZXh0KyciOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiJztcclxuICB2YXIgdGFnYyA9ICciOiAiIiwKKyAgICAgICAgICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAiIiwKKyAgICAgICAgICAgICJEb25lIjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIHRleHQgeW91IHdhbnQgdG8gZmluZCI6ICIiLAorICAgICAgICAgICAgIkZpbmQgYW5kIFJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJmb3VuZCBpdGVtIjogIiIsCisgICAgICAgICAgICAiZm91bmQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJIaWdobGlnaHQiOiAiIiwKKyAgICAgICAgICAgICJJbmZvcm0gYSByZXBsYWNlbWVudCB3b3JkIjogIiIsCisgICAgICAgICAgICAiTmV4dCI6ICIiLAorICAgICAgICAgICAgIm5vdCBmb3VuZCI6ICIiLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtIjogIiIsCisgICAgICAgICAgICAicmVwbGFjZWQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJTZWFyY2ggZm9yOiI6ICIiLAorICAgICAgICAgICAgIlN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IjogIiIsCisgICAgICAgICAgICAiVW5kbyI6ICIiLAorICAgICAgICAgICAgIldob2xlIHdvcmRzIG9ubHkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiRW50ZXIgdGhlIG5hbWUgZm9yIG5ldyBvcHRpb24uIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgRm9ybS4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBtdWx0aS1saW5lIHRleHQgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcmFkaW8gYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFNlbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgU2VsZWN0Li4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1zIjogeworICAgICAgICAgICAgIidvbkNsaWNrJz0iOiAiIiwKKyAgICAgICAgICAgICJBY2Nlc3MgS2V5OiI6ICIiLAorICAgICAgICAgICAgIkFjdGlvbiBVUkw6IjogIiIsCisgICAgICAgICAgICAiQnV0dG9uIFNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkNoZWNrZWQiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zOiI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQgdGV4dCAob3B0aW9uYWwpIjogIiIsCisgICAgICAgICAgICAiRGltZW5zaW9ucyI6ICIiLAorICAgICAgICAgICAgIkRpc2FibGVkIjogIiIsCisgICAgICAgICAgICAiRW5jb2Rpbmc6IjogIiIsCisgICAgICAgICAgICAiRm9yIENvbnRyb2w6IjogIiIsCisgICAgICAgICAgICAiRm9ybSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IElOUFVUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gaGFuZGxlciBzY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiR2V0IjogIiIsCisgICAgICAgICAgICAiSGFyZCI6ICIiLAorICAgICAgICAgICAgIkhlaWdodCBpbiBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkhUTUwtRm9ybSB0byBDR0kgKGRlZmF1bHQpIjogIiIsCisgICAgICAgICAgICAiSW1hZ2Ugc291cmNlIjogIiIsCisgICAgICAgICAgICAiSW5pdGlhbCBUZXh0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiSmF2YXNjcmlwdCBmb3IgYnV0dG9uIGNsaWNrIjogIiIsCisgICAgICAgICAgICAiTGFiZWw6IjogIiIsCisgICAgICAgICAgICAiTGVnZW5kOiI6ICIiLAorICAgICAgICAgICAgIk1heCBsZW5ndGg6IjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY2NlcHRlZCI6ICIiLAorICAgICAgICAgICAgIk1ldGhvZDoiOiAiIiwKKyAgICAgICAgICAgICJtdWx0aXBhcnQgRm9ybSBEYXRhIChGaWxlLVVwbG9hZCkiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJuYW1lIG9mIHRoZSB0ZXh0YXJlYSI6ICIiLAorICAgICAgICAgICAgIk5hbWUvSUQ6IjogIiIsCisgICAgICAgICAgICAibm9ybWFsIjogIiIsCisgICAgICAgICAgICAibm93cmFwIjogIiIsCisgICAgICAgICAgICAiT2ZmIjogIiIsCisgICAgICAgICAgICAiUGh5c2ljYWwiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgYSBMYWJlbCI6ICIiLAorICAgICAgICAgICAgIlBvc3QiOiAiIiwKKyAgICAgICAgICAgICJwcmUiOiAiIiwKKyAgICAgICAgICAgICJSZWFkIE9ubHkiOiAiIiwKKyAgICAgICAgICAgICJTaXplIG9mIHRleHQgYm94IGluIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJTb2Z0IjogIiIsCisgICAgICAgICAgICAiVGFiIEluZGV4OiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBGcmFtZToiOiAiIiwKKyAgICAgICAgICAgICJUZXh0OiI6ICIiLAorICAgICAgICAgICAgIlVSTCBvZiBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlZhbHVlIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiVmFsdWU6IjogIiIsCisgICAgICAgICAgICAiVmlydHVhbCI6ICIiLAorICAgICAgICAgICAgIldpZHRoIGluIG51bWJlciBvZiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiV3JhcCBNb2RlOiI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgTmFtZSI6ICIiLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IgorICAgICAgICB9LAorICAgICAgICAiRnVsbFBhZ2UiOiB7CisgICAgICAgICAgICAiLi4uIjogIiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIkJhY2tncm91bmQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiQ2hhcmFjdGVyIHNldDoiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoSVNPLTg4NTktNSkiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoS09JOC1SKSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChXSU5ET1dTLTEyNTEpIjogIiIsCisgICAgICAgICAgICAiRE9DVFlQRToiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiRG9jdW1lbnQgdGl0bGU6IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZHM6IjogIiIsCisgICAgICAgICAgICAiUHJpbWFyeSBzdHlsZS1zaGVldDoiOiAiIiwKKyAgICAgICAgICAgICJUZXh0IGNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIlVURi04IChyZWNvbW1lbmRlZCkiOiAiIiwKKyAgICAgICAgICAgICJ3ZXN0ZXJuIChJU08tODg1OS0xKSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGdWxsU2NyZWVuIjogeworICAgICAgICAgICAgIk1heGltaXplL01pbmltaXplIEVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJHZWNrbyI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICAgICAiJiN4MDBkNzsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvZWRpdCBob3Jpem9udGFsIHJ1bGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBIb3Jpem9udGFsIFJ1bGUiOiAiIiwKKyAgICAgICAgICAgICJObyBzaGFkaW5nIjogIiIsCisgICAgICAgICAgICAiU3R5bGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5saW5lU3R5bGVyIjogeworICAgICAgICAgICAgIkNTUyBTdHlsZSI6ICIiLAorICAgICAgICAgICAgIi0iOiAiPDxFcXVhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAgICAgIkFuY2hvciBuYW1lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEFuY2hvciI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0Tm90ZSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgZm9vdG5vdGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgTm90ZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQYWdlYnJlYWsiOiB7CisgICAgICAgICAgICAiUGFnZSBicmVhayI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQnJlYWsiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U21pbGV5IjogeworICAgICAgICAgICAgIkluc2VydCBTbWlsZXkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgICAgICJcXG4gIFRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nXFxuIjogIiIsCisgICAgICAgICAgICAiSGlkZSBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICIiLAorICAgICAgICAgICAgIkxpbmsxIjogIiIsCisgICAgICAgICAgICAiTGluazIiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMyI6ICIiLAorICAgICAgICAgICAgIkxpbms0IjogIiIsCisgICAgICAgICAgICAiTGluazUiOiAiIiwKKyAgICAgICAgICAgICJTaG93IHByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZyI6ICIiLAorICAgICAgICAgICAgIlZhcmlhYmxlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAgICAgIkFsbCBDYXRlZ29yaWVzIjogIiIsCisgICAgICAgICAgICAiRmlsdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMgdGVtcGxhdGUgdmFyaWFibGUiOiAiIiwKKyAgICAgICAgICAgICJPbmx5IHNlYXJjaCB3b3JkIGJlZ2lubmluZyI6ICIiLAorICAgICAgICAgICAgIkhUTUwiOiAiPDxDaGFyQ291bnRlcj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgU25pcHBldCI6ICI8PEluc2VydFNuaXBwZXQ+PiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIlZhcmlhYmxlIjogIjw8SW5zZXJ0U25pcHBldD4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0VGFibGUiOiB7CisgICAgICAgICAgICAiQ2FwdGlvbiBmb3IgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiQ29sbGFwc2UgYm9yZGVyczoiOiAiIiwKKyAgICAgICAgICAgICJMYXlvdSI6ICIiLAorICAgICAgICAgICAgIlN0eWxlIG9mIHRoZSBib3JkZXIiOiAiIgorICAgICAgICB9LAorICAgICAgICAiTGFuZ01hcmtzIjogeworICAgICAgICAgICAgIiZtZGFzaDsgbGFuZ3VhZ2UgJm1kYXNoOyI6ICIiLAorICAgICAgICAgICAgIicsICciOiAiIiwKKyAgICAgICAgICAgICJFbmdsaXNoIjogIiIsCisgICAgICAgICAgICAiRnJlbmNoIjogIiIsCisgICAgICAgICAgICAiR3JlZWsiOiAiIiwKKyAgICAgICAgICAgICJsYW5ndWFnZSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJMYXRpbiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJMaW5rZXIiOiB7CisgICAgICAgICAgICAiKHB4KSI6ICIiLAorICAgICAgICAgICAgIkFuY2hvci1MaW5rIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIEFkZHJlc3M6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgTGluayI6ICIiLAorICAgICAgICAgICAgIkxvY2F0aW9uIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZW51IEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFRlbXBsYXRlOiI6ICIiLAorICAgICAgICAgICAgIk5ldyBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcmRpbmFyeSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUG9wdXAgV2luZG93IjogIiIsCisgICAgICAgICAgICAiUG9wdXBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgTGluayI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZWFibGU6IjogIiIsCisgICAgICAgICAgICAiU2FtZSBXaW5kb3cgKGp1bXAgb3V0IG9mIGZyYW1lcykiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGxiYXJzOiI6ICIiLAorICAgICAgICAgICAgIlNob3dzIE9uIEhvdmVyIjogIiIsCisgICAgICAgICAgICAiU3RhdHVzIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJTdWJqZWN0OiI6ICIiLAorICAgICAgICAgICAgIlRpdGxlOiI6ICIiLAorICAgICAgICAgICAgIlRvb2xiYXI6IjogIiIsCisgICAgICAgICAgICAiVVJMIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiPDxDcmVhdGVMaW5rPj4iCisgICAgICAgIH0sCisgICAgICAgICJMaXN0VHlwZSI6IHsKKyAgICAgICAgICAgICJDaG9vc2UgbGlzdCBzdHlsZSB0eXBlIChmb3Igb3JkZXJlZCBsaXN0cykiOiAiIiwKKyAgICAgICAgICAgICJEZWNpbWFsIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciBncmVlayBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgbGF0aW4gbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIHJvbWFuIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJVcHBlciBsYXRpbiBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiVXBwZXIgcm9tYW4gbnVtYmVycyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJPcGVyYSI6IHsKKyAgICAgICAgICAgICJNQVJLIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgdGV4dCBpbiBuZXcgcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiUGFzdGUgYXMgUGxhaW4gVGV4dCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQcmVzZXJ2ZVNjcmlwdHMiOiB7CisgICAgICAgICAgICAiSmF2YVNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIlBIUCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgICAgICInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnY2wnOiAnIjogIiIsCisgICAgICAgICAgICAiQVRUUklCVVRFUyI6ICIiLAorICAgICAgICAgICAgIkNvbG9ycyI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSBUQUcgeW91IHdhbnQgdG8gaW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiTm8gQ1NTIGNsYXNzIGF2YWlhYmxlIjogIiIsCisgICAgICAgICAgICAiT2siOiAiIiwKKyAgICAgICAgICAgICJPUFRJT05TIjogIiIsCisgICAgICAgICAgICAiUXVpY2sgVGFnIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlRBR3MiOiAiIiwKKyAgICAgICAgICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBUQUciOiAiIiwKKyAgICAgICAgICAgICJZb3UgaGF2ZSB0byBzZWxlY3Qgc29tZSB0ZXh0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNhdmVTdWJtaXQiOiB7CisgICAgICAgICAgICAiaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAgICAgICAgICJSZWFkeSI6ICIiLAorICAgICAgICAgICAgIlNhdmluZy4uLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTZXRJZCI6IHsKKyAgICAgICAgICAgICJJRC9OYW1lOiI6ICIiLAorICAgICAgICAgICAgIlNldCBJZCBhbmQgTmFtZSI6ICIiLAorICAgICAgICAgICAgIlNldCBJZC9OYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElEL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgICAgICJDbG9zaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiQ2xvc2luZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiQ29udmVydCBhbGwgcXVvdGVzIGFuZCBkYXNoZXMgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgYXV0b21hdGljIHJlcGxhY2VtZW50cyI6ICIiLAorICAgICAgICAgICAgIk9wZW5pbmdEb3VibGVRdW90ZXMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nU2luZ2xlUXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJTbWFydFJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJTbWFydFJlcGxhY2UgU2V0dGluZ3MiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU3R5bGlzdCI6IHsKKyAgICAgICAgICAgICJTdHlsZXMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU3VwZXJDbGVhbiI6IHsKKyAgICAgICAgICAgICJDbGVhbiBiYWQgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIFNlbGVjdGlvbiBPbmx5IjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgU2NvcGUiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc3RhbmQgYnkgd2hpbGUgY2xlYW5pbmcgaW4gcHJvY2Vzcy4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGlnbm1lbnQgKGxlZnQvcmlnaHQvanVzdGlmeSkuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBjbGFzc2VzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBBbGwgSFRNTCBUYWdzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBzdHlsZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGVtcGhhc2lzIGFuZCBhbm5vdGF0aW9ucy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgUGFyYWdyYXBocyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMuIjogIiIsCisgICAgICAgICAgICAiVmlnb3JvdXNseSBwdXJnZSBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlRhYmxlT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJDZWxsIFR5cGU6IjogIiIsCisgICAgICAgICAgICAiQ2VsbHMgZG93biI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIHRvIHRoZSByaWdodCwgYW5kIjogIiIsCisgICAgICAgICAgICAiRG8gTm90IENoYW5nZSI6ICIiLAorICAgICAgICAgICAgIkZyYW1lIGFuZCBib3JkZXJzIjogIiIsCisgICAgICAgICAgICAiSGVhZGVyICh0aCkiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBjdXJyZW50IGNlbGwgd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJOb3JtYWwgKHRkKSI6ICIiLAorICAgICAgICAgICAgIkNvbHVtbnMiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICI8PENvbnRleHRNZW51Pj4iCisgICAgICAgIH0sCisgICAgICAgICJVbnNhdmVkQ2hhbmdlcyI6IHsKKyAgICAgICAgICAgICJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhlIGVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJXZWJLaXQiOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIjw8R2Vja28+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlhpbmhhIjogeworICAgICAgICAgICAgIiYjODIxMjsgZm9udCAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIiYjODIxMjsgc2l6ZSAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiMSAoOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIyICgxMCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIzICgxMiBwdCkiOiAiIiwKKyAgICAgICAgICAgICI0ICgxNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI1ICgxOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI2ICgyNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI3ICgzNiBwdCkiOiAiIiwKKyAgICAgICAgICAgICJBcmlhbCI6ICIiLAorICAgICAgICAgICAgIkNvdXJpZXIgTmV3IjogIiIsCisgICAgICAgICAgICAiQ1RSTC0wICh6ZXJvKSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMSAuLiBDVFJMLTYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUEiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUoiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUwiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLU4iOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVgiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVoiOiAiIiwKKyAgICAgICAgICAgICJFZGl0b3IgSGVscCI6ICIiLAorICAgICAgICAgICAgIkVOVEVSIjogIiIsCisgICAgICAgICAgICAiRXJyb3IgTG9hZGluZyBYaW5oYS4gIERldmVsb3BlcnMsIGNoZWNrIHRoZSBFcnJvciBDb25zb2xlIGZvciBpbmZvcm1hdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJHZW9yZ2lhIjogIiIsCisgICAgICAgICAgICAiSW1wYWN0IjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBDb3JlIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW5zIjogIiIsCisgICAgICAgICAgICAiTVMgV29yZCBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IENvbG9yIjogIiIsCisgICAgICAgICAgICAiU0hJRlQtRU5URVIiOiAiIiwKKyAgICAgICAgICAgICJUYWhvbWEiOiAiIiwKKyAgICAgICAgICAgICJUaW1lcyBOZXcgUm9tYW4iOiAiIiwKKyAgICAgICAgICAgICJUb3VjaCBoZXJlIGZpcnN0IHRvIGFjdGl2YXRlIGVkaXRvci4iOiAiIiwKKyAgICAgICAgICAgICJWZXJkYW5hIjogIiIsCisgICAgICAgICAgICAiV2FpdGluZyBmb3IgSWZyYW1lIHRvIGxvYWQuLi4iOiAiIiwKKyAgICAgICAgICAgICJXaW5nRGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiUmVtb3ZlIEN1cnJlbnQgQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIlNldCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IHBhZ2UgYmFja2dyb3VuZCBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlNldCBQYWdlIEJhY2tncm91bmQgSW1hZ2UiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2xpZW50c2lkZVNwZWxsY2hlY2siOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVjayB1c2luZyBpZVNwZWxsIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEwJSI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiIiwKKyAgICAgICAgICAgICIyMDAlIjogIiIsCisgICAgICAgICAgICAiMjUlIjogIiIsCisgICAgICAgICAgICAiNTAlIjogIiIsCisgICAgICAgICAgICAiNzUlIjogIiIsCisgICAgICAgICAgICAiPkxpc3QgVmlldyI6ICIiLAorICAgICAgICAgICAgIj5UaHVtYm5haWwgVmlldyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIiIsCisgICAgICAgICAgICAiRDoiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJHSUYiOiAiIiwKKyAgICAgICAgICAgICJIOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIk1heGltdW0gZm9sZGVyIHNpemUgbGltaXQgcmVhY2hlZC4gVXBsb2FkIGRpc2FibGVkLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB2YWx1ZSI6ICIiLAorICAgICAgICAgICAgIlBORyI6ICIiLAorICAgICAgICAgICAgIlByZXNldCI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIiIsCisgICAgICAgICAgICAiWDoiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJZOiI6ICIiLAorICAgICAgICAgICAgIlpvb20iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmlsdGVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbHRlciI6ICI8PEluc2VydFNuaXBwZXQyPj4iCisgICAgICAgIH0sCisgICAgICAgICJIdG1sVGlkeSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEhUTUxUSURZIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkF1dG8tVGlkeSI6ICIiLAorICAgICAgICAgICAgIkRvbid0IFRpZHkiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIFRpZHkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgUGljdHVyZXMiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFVzZXJuYW1lL0VtYWlsIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgTGlzdCI6ICIiLAorICAgICAgICAgICAgIktleXdvcmQiOiAiIiwKKyAgICAgICAgICAgICJObyBJbWFnZXMgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBQaG90b3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBWaWRlb3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIFNlcnZlciI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBVc2VybmFtZSI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW8gTGlzdCI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW9zIjogIiIsCisgICAgICAgICAgICAiQToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkQ6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUE5HIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJZOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE1hcnF1ZWUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTlNFUlRNQVJRVUVFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFsdGVybmF0ZSI6ICIiLAorICAgICAgICAgICAgIkJhY2tncm91bmQtQ29sb3I6IjogIiIsCisgICAgICAgICAgICAiQmVoYXZpb3I6IjogIiIsCisgICAgICAgICAgICAiQ29udGludW91cyI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdGlvbjoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgc2Nyb2xsaW5nIG1hcnF1ZWUiOiAiIiwKKyAgICAgICAgICAgICJNYXJxdWVlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbCBBbW91bnQ6IjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIERlbGF5OiI6ICIiLAorICAgICAgICAgICAgIlNsaWRlIjogIiIsCisgICAgICAgICAgICAiU3BlZWQgQ29udHJvbCI6ICIiLAorICAgICAgICAgICAgIk5hbWUvSUQ6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiVGV4dDoiOiAiPDxGb3Jtcz4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGljdHVyZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVFBJQ1RVUkUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vdCBkZWZpbmVkIjogIiIsCisgICAgICAgICAgICAiIE9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJVcGxvYWQgZmlsZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIxMjAlIjogIiIsCisgICAgICAgICAgICAiMTUwJSI6ICIiLAorICAgICAgICAgICAgIjgwJSI6ICIiLAorICAgICAgICAgICAgIkFkZCBHVUlETyBDb2RlIGluIGEgdGV4dGJveCBvbiB0aGUgcGFnZSI6ICIiLAorICAgICAgICAgICAgIkFkZCBNSURJIGxpbmsgdG8gYWxsb3cgc3R1ZGVudHMgdG8gaGVhciB0aGUgbXVzaWMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJHdWlkbyBjb2RlIjogIiIsCisgICAgICAgICAgICAiR1VJRE8gQ29kZSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIGluIGFwcGxldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBHVUlETyBNdXNpYyBOb3RhdGlvbiI6ICIiLAorICAgICAgICAgICAgIk1JREkgRmlsZSI6ICIiLAorICAgICAgICAgICAgIlNvdXJjZSBDb2RlIjogIiIsCisgICAgICAgICAgICAiV2l0aCBNb3ppbGxhLCB0aGUgYXBwbGV0IHdpbGwgbm90IGJlIHZpc2libGUgaW4gZWRpdG9yLCBidXQgb25seSBpbiBXZWIgcGFnZSBhZnRlciBzdWJtaXR0aW5nLiI6ICIiLAorICAgICAgICAgICAgIlpvb20gOiI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJab29tIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBHZWFycyBpbiBvcmRlciB0byB1c2UgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZSBhbmQgY29uZmlndXJhdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGluZyBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiSW5zdGFsbCI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIEFib3V0IExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgcmVsb2FkIHRoZSBwYWdlLCBjYXVzaW5nIHlvdSB0byBsb3NlIGFueSB1bnNhdmVkIHdvcmsuICBQcmVzcyBcIk9LXCIgdG8gcmVsb2FkLiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIHVzZXMgR29vZ2xlIEdlYXJzIHRvIGVuYWJsZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlLiAgV2l0aCBHZWFycyBpbnN0YWxsZWQsIHlvdSBjYW4gc2F2ZSBkcmFmdHMgb2YgeW91ciBkb2N1bWVudHMgb24geW91ciBoYXJkIGRyaXZlLCBjb25maWd1cmUgWGluaGEgdG8gbG9vayB0aGUgd2F5IHlvdSB3YW50LCBhbmQgY2FycnkgdGhpcyBpbmZvcm1hdGlvbiB3aGVyZXZlciB5b3UgdXNlIFhpbmhhIG9uIHRoZSB3ZWIuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsZTogIjogIiIsCisgICAgICAgICAgICAiSW1wb3J0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGV0YWlscyI6ICIiLAorICAgICAgICAgICAgIkZpbGUgQnJvd3NlciI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICAgIFRoZXJlIEMgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gIFRoZXJlIEEgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gXCIgVGhlcmUgQiBcIiI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICcgVGhlcmUgRCAnIjogIiIsCisgICAgICAgICAgICAiTGlzdCBvZiBQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJOZXcgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJPcGVuIjogIiIsCisgICAgICAgICAgICAiT3BlbiBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHlvdSdkIGxpa2UgdG8gY3JlYXRlLiI6ICIiLAorICAgICAgICAgICAgIlNhdmUgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgZXJhc2UgYW55IHVuc2F2ZWQgY29udGVudC4gIElmIHlvdSdyZSBjZXJ0YWluLCBwbGVhc2UgY2xpY2sgT0sgdG8gY29udGludWUuIjogIiIsCisgICAgICAgICAgICAiV2ViIFVSTCI6ICIiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiPDxQU0xvY2FsPj4iLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCI6ICI8PEluc2VydE5vdGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJIVE1MQXJlYSBTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiSW5mbyI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIjogIiIsCisgICAgICAgICAgICAicGxpeiB3ZWl0IDstKSI6ICIiLAorICAgICAgICAgICAgIlJldmVydCI6ICIiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrZXIiOiAiIgorICAgICAgICB9LAorICAgICAgICAiVGVtcGxhdGUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBURU1QTEFURSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJJbnNlcnQgdGVtcGxhdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiVW5Gb3JtYXQiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBVTkZPUk1BVCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbGwiOiAiIiwKKyAgICAgICAgICAgICJBbGwgSFRNTDoiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBBcmVhIjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgb3B0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdHRpbmc6IjogIiIsCisgICAgICAgICAgICAiUGFnZSBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IHdoaWNoIHR5cGVzIG9mIGZvcm1hdHRpbmcgeW91IHdvdWxkIGxpa2UgdG8gcmVtb3ZlLiI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdGlvbiI6ICIiCisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzZiNGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvZGUuanMKQEAgLTAsMCArMSwxNTY3IEBACisvLyBYaW5oYSBMYW5ndWFnZSBDb21iaW5lZCBUcmFuc2xhdGlvbiBGaWxlCisvLworLy8gTEFORzogImRlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU5TVFJVQ1RJT05TIFRPIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBZb3VyIHRyYW5zbGF0aW9uIG11c3QgYmUgaW4gVVRGLTggQ2hhcmFjdGVyIEVuY29kaW5nLgorLy8KKy8vIFRoaXMgaXMgYSBKU09OIGVuY29kZWQgZmlsZSAocGx1cyBjb21tZW50cyksIHN0cmluZ3Mgc2hvdWxkIGJlIGRvdWJsZS1xdW90ZQorLy8gb25seSwgZG8gbm90IHVzZSBzaW5nbGUgcXVvdGVzIHRvIHN1cnJvdW5kIHN0cmluZ3MgLSAiaGVsbG8iLCBub3QgJ2hlbGxvJworLy8gZG8gbm90IGhhdmUgYSB0cmFpbGluZyBjb21tYSBhZnRlciB0aGUgbGFzdCBlbnRyeSBpbiBhIHNlY3Rpb24uCisvLworLy8gT25seSBmdWxsIGxpbmUgY29tbWVudHMgYXJlIGFsbG93ZWQgKHRoYXQgYSBjb21tZW50cyBvY2N1cHkgZW50aXJlIGxpbmVzKS4KKy8vCisvLyBTZWFyY2ggZm9yIHRoZSBfX05FV19UUkFOU0xBVElPTlNfXyBzZWN0aW9uIGJlbG93LCB0aGlzIGlzIHdoZXJlIHlvdSB3aWxsCisvLyB3YW50IHRvIGZvY3VzLCB0aGlzIHNlY3Rpb24gaW5jbHVkZXMgdGhpbmdzIHRoYXQgZG8gbm90IHByZXNlbnRseSBoYXZlIGEgCisvLyB0cmFuc2xhdGlvbiBvciBmb3Igd2hpY2ggdGhlIHRyYW5zbGF0aW9uIG5lZWRzIHRvIGJlIGNoZWNrZWQgZm9yIGFjY3VyYWN5LgorLy8KKy8vIEluIHRoZSBOZXcgVHJhbnNsYXRpb25zIHNlY3Rpb24gYSB0cmFuc2xhdGlvbiBzdHJpbmcgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcKKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIiIKKy8vICAgICBUaGlzIG1lYW5zIGl0IGlzIG5vdCB0cmFuc2xhdGVkIHlldCwgYWRkIHlvdXIgdHJhbnNsYXRpb24uLi4KKy8vICAgICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiS2xpbmdvbiBTdHJpbmcgSGVyZSIKKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIlRyYW5zbGF0ZWQgU3RyaW5nIEhlcmUiCisvLyAgICAgVGhpcyBtZWFucyB0aGF0IGFuIGV4aXN0aW5nIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZywgaW4gc29tZSBvdGhlcgorLy8gICAgIHNlY3Rpb24gaGFzIGJlZW4gZm91bmQsIGFuZCB1c2VkLiAgQ2hlY2sgdGhhdCBpdCBpcyBhcHByb3ByaXRlIGZvciB0aGlzCisvLyAgICAgc2VjdGlvbiBhbmQgaWYgaXQgaXMsIHRoYXQncyBmaW5lIGxlYXZlIGl0IGFzIGlzLCBvdGhlcndpc2UgY2hhbmdlIGFzCisvLyAgICAgYXBwcm9wcmlhdGUuCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICI8PEFub3RoZXJTZWN0aW9uPj4iCisvLyAgICAgVGhpcyBtZWFucyB1c2UgdGhlIHNhbWUgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nIGFzIDw8QW5vdGhlclNlY3Rpb24+PgorLy8gICAgIHRoaXMgc2F2ZXMgeW91IHJlLXRyYW5sYXRpbmcgc3RyaW5ncy4gIElmIHRoZSBDb250ZXh0IG9mIHRoaXMgc2VjdGlvbgorLy8gICAgIGFuZCB0aGUgY29udGV4dCBvZiBBbm90aGVyU2VjdGlvbiBzZWVtIHRoZSBzYW1lLCB0aGF0J3MgZmluZSBsZWF2ZSBpdAorLy8gICAgIHVzaW5nIHRoYXQgdHJhbnNsYXRpb24sIGJ1dCBpZiB0aGlzIHNlY3Rpb24gbmVlZHMgYSBkaWZmZXJlbnQgdHJhbnNsYXRpb24sIAorLy8gICAgIHlvdSBjYW4gcHJvdmlkZSBpdCBieSByZXBsYWNpbmcgdGhlIGxpbmsgKDw8QW5vdGhlclNlY3Rpb24+Pikgd2l0aCB0aGF0CisvLyAgICAgbmV3IHRyYW5zbGF0aW9uLiAgRm9yIGV4YW1wbGUgLSBhICJUYWJsZSIgaW4gc2F5ICJEYXRhUGx1Z2luIiBpcyAKKy8vICAgICBwZXJoYXBzIHRyYW5zbGF0ZWQgZGlmZmVyZW50bHkgdG8gIlRhYmxlIiBpbiAiRnVybml0dXJlUGx1Z2luIi4KKy8vCisvLyBURVNUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IHBsYWNlIHlvdXIgdHJhbnNsYXRpb24gZmlsZSBvbiB5b3VyIHdlYnNlcnZlciBzb21ld2hlcmUgZm9yIGV4YW1wbGUKKy8vCisvLyAgIC94aW5oYS9sYW5nL21lcmdlZC9kZS5qcworLy8KKy8vIGFuZCB0aGVuIHRlbGwgWGluaGEgd2hlcmUgdG8gZ2V0IGl0IChiZWZvcmUgbG9hZGluZyBYaW5oYUNvcmUuanMpIGJ5IAorLy8KKy8vICBfZWRpdG9yX2xhbmcgICAgICAgICAgICAgID0gJ2RlJzsKKy8vICBfZWRpdG9yX2xhbmdfbWVyZ2VkX2ZpbGUgID0gJy94aW5oYS9sYW5nL21lcmdlZC9kZS5qcyc7CisvLworLy8gWGluaGEgd2lsbCBsb2FkIHlvdXIgbmV3IGxhbmd1YWdlIGRlZmluaXRpb24uCisvLworLy8gU1VCTUlUVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBjcmVhdGUgYSBUaWNrZXQgb24gdGhlIFhpbmhhIHdlYnNpdGUgYW5kIGF0dGFjaCB5b3VyIHRyYW5zbGF0aW9uIAorLy8gZmlsZS4KKy8vCisvLyBUaGUgWGluaGEgZGV2ZWxvcGVycyB3aWxsIHRha2UgeW91ciBmaWxlIGFuZCB1c2UgdGhlIAorLy8gICAgIGNvbnRyaWIvbGNfc3BsaXRfbWVyZ2VkX2ZpbGUucGhwCisvLyBzY3JpcHQgdG8gbG9hZCBpdCBpbnRvIHRoZSBYaW5oYSBkaXN0cmlidXRpb24uCisKK3sKKyAgICAiQWJicmV2aWF0aW9uIjogeworICAgICAgICAiQWJicmV2aWF0aW9uIjogIkFia8O8cnp1bmciLAorICAgICAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgICAgICJEZWxldGUiOiAiTMO2c2NoZW4iLAorICAgICAgICAiRXhwYW5zaW9uOiI6ICJFcmtsw6RydW5nOiIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJBYm91dEJveCI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIsOcYmVyIGRpZXNlbiBFZGl0b3IiLAorICAgICAgICAiQ2xvc2UiOiAiU2NobGllw59lbiIKKyAgICB9LAorICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAgICAgIlJlbW92ZSBDdXJyZW50IEJhY2tncm91bmQiOiAiQWt0dWVsbGVuIEhpbnRlcmdydW5kIGVudGZlcm5lbiIsCisgICAgICAgICJTZXQgUGFnZSBCYWNrZ3JvdW5kIEltYWdlIjogIlNlaXRlbi1IaW50ZXJncnVuZGJpbGQgc2V0emVuIiwKKyAgICAgICAgIlNldCBwYWdlIGJhY2tncm91bmQgaW1hZ2UiOiAiU2VpdGVuLUhpbnRlcmdydW5kYmlsZCBzZXR6ZW4iCisgICAgfSwKKyAgICAiQ2hhckNvdW50ZXIiOiB7CisgICAgICAgICIuLi4gaW4gcHJvZ3Jlc3MiOiAiLi4uIGluIEJlYXJiZWl0dW5nIiwKKyAgICAgICAgIkNoYXJzIjogIlplaWNoZW4iLAorICAgICAgICAiSFRNTCI6ICJIVE1MIiwKKyAgICAgICAgIldvcmRzIjogIldvcnRlIgorICAgIH0sCisgICAgIkNoYXJhY3Rlck1hcCI6IHsKKyAgICAgICAgIkluc2VydCBzcGVjaWFsIGNoYXJhY3RlciI6ICJTb25kZXJ6ZWljaGVuIGVpbmbDvGdlbiIKKyAgICB9LAorICAgICJDbGllbnRzaWRlU3BlbGxjaGVjayI6IHsKKyAgICAgICAgIlNwZWxsIENoZWNrIHVzaW5nIGllU3BlbGwiOiAiRW5nbGlzY2hlIFJlY2h0c2NocmVpYmtvbnRyb2xsZSBtaXQgaWVTcGVsbCIKKyAgICB9LAorICAgICJDb2xvclBpY2tlciI6IHsKKyAgICAgICAgIkNsaWNrIGEgY29sb3IuLi4iOiAiRmFyYmUgd8OkaGxlbiIsCisgICAgICAgICJDbG9zZSI6ICJTY2hsaWXDn2VuIiwKKyAgICAgICAgIkNvbG9yOiAiOiAiRmFyYmU6ICIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJTYW1wbGUiOiAiQmVpc3BpZWwiLAorICAgICAgICAiV2ViIFNhZmU6ICI6ICJXZWIgU2FmZTogIgorICAgIH0sCisgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAiQ19lbGwgUHJvcGVydGllcy4uLiI6ICJaZWxsZW5vcHRpb25lbiIsCisgICAgICAgICJDaGVjX2sgTGluay4uLiI6ICJMaW5rIHRlc3RlbiIsCisgICAgICAgICJDb3B5IjogIktvcGllcmVuIiwKKyAgICAgICAgIkNyZWF0ZSBhIGxpbmsiOiAiTGluayBlcnN0ZWxsZW4iLAorICAgICAgICAiQ3VycmVudCBVUkwgaXMiOiAiQWt0dWVsbGUgVVJMIGlzdCIsCisgICAgICAgICJDdXQiOiAiQXVzc2NobmVpZGVuIiwKKyAgICAgICAgIkRlX2xldGUgQ29sdW1uIjogIlNwYWx0ZSBsw7ZzY2hlbiIsCisgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgY29sdW1uIjogIlNwYWx0ZSBsw7ZzY2hlbiIsCisgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIlplaWxlIGzDtnNjaGVuIiwKKyAgICAgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIldpZSBzaW5kIFNpZSBkZW5uIGhpZXIgaGluIGdla29tbWVuPyAoUGxlYXNlIHJlcG9ydCEpIiwKKyAgICAgICAgIklfbnNlcnQgUm93IEJlZm9yZSI6ICJaZWlsZSBlaW5mw7xnZW4gdm9yIFBvc2l0aW9uIiwKKyAgICAgICAgIkluX3NlcnQgUm93IEFmdGVyIjogIlplaWxlIGVpbsO8Z2VuIG5hY2ggUG9zaXRpb24iLAorICAgICAgICAiSW5zZXJ0IENfb2x1bW4gQWZ0ZXIiOiAiU3BhbHRlIGVpbmbDvGdlbiBuYWNoIFBvc2l0aW9uIiwKKyAgICAgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICJTcGFsdGUgZWluZsO8Z2VuIHZvciBQb3NpdGlvbiIsCisgICAgICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICJTcGFsdGUgZWluZsO8Z2VuIG5hY2ggZGVyIGFrdHVlbGxlbiBQb3NpdGlvbiIsCisgICAgICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiU3BhbHRlIGVpbmbDvGdlbiB2b3IgZGVyIGFrdHVlbGxlbiBQb3NpdGlvbiIsCisgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICJaZWlsZSBlaW5mw7xnZW4gbmFjaCBkZXIgYWt0dWVsbGVuIFBvc2l0aW9uIiwKKyAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICJaZWlsZSBlaW5mw7xnZW4gdm9yIGRlciBha3R1ZWxsZW4gUG9zaXRpb24iLAorICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUiOiAiQWJzYXR6IGVpbmbDvGdlbiBoaW50ZXIgZGVyIGFrdHVlbGxlbiBQb3NpdGlvbiIsCisgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUiOiAiQWJzYXR6IGVpbmbDvGdlbiB2b3IgZGVyIGFrdHVlbGxlbiBQb3NpdGlvbiIsCisgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGFmdGVyIjogIkFic2F0eiBlaW5mw7xnZW4gaGludGVyIFBvc2l0aW9uIiwKKyAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYmVmb3JlIjogIkFic2F0eiBlaW5mw7xnZW4gdm9yIFBvc2l0aW9uIiwKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogIlplbnRyaWVydCIsCisgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAiQmxvY2tzYXR6IiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICJMaW5rc2LDvG5kaWciLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICJSZWNodHNiw7xuZGlnIiwKKyAgICAgICAgIkxpbmsgcG9pbnRzIHRvOiI6ICJMaW5rIHplaWd0IGF1ZjoiLAorICAgICAgICAiTWFrZSBsaW5fay4uLiI6ICJMaW5rIGVyc3RlbGxlbiIsCisgICAgICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIkRpZXNlbiBMaW5rIGluIG5ldWVtIEZlbnN0ZXIgw7ZmZm5lbiIsCisgICAgICAgICJQYXN0ZSI6ICJFaW5mw7xnZW4iLAorICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBlbGVtZW50OiI6ICJXb2xsZW4gc2llIGRpZXNlcyBFbGVtZW50IHdpcmtsaWNoIGVudGZlcm5lbj8iLAorICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICJXb2xsZW4gc2llIGRpZXNlbiBMaW5rIHdpcmtsaWNoIGVudGZlcm5lbj8iLAorICAgICAgICAiUmVtb3ZlIHRoZSAkZWxlbSBFbGVtZW50Li4uIjogIkVsZW1lbnQgJGVsZW0gZW50ZmVybmVuLi4uIiwKKyAgICAgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiRGllc2VzIEVsZW1lbnQgYXVzIGRlbSBEb2t1bWVudCBlbnRmZXJuZW4iLAorICAgICAgICAiUm9fdyBQcm9wZXJ0aWVzLi4uIjogIlplaWxlbm9wdGlvbmVuIiwKKyAgICAgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAiWmVsbGVub3B0aW9uZW4gYW56ZWlnZW4iLAorICAgICAgICAiU2hvdyB0aGUgVGFibGUgUHJvcGVydGllcyBkaWFsb2ciOiAiVGFiZWxsZW5vcHRpb25lbiBhbnplaWdlbiIsCisgICAgICAgICJTaG93IHRoZSBUYWJsZSBSb3cgUHJvcGVydGllcyBkaWFsb2ciOiAiWmVpbGVub3B0aW9uZW4gYW56ZWlnZW4iLAorICAgICAgICAiU2hvdyB0aGUgaW1hZ2UgcHJvcGVydGllcyBkaWFsb2ciOiAiRmVuc3RlciBmw7xyIGRpZSBCaWxkb3B0aW9uZW4gYW56ZWlnZW4iLAorICAgICAgICAiVW5saW5rIHRoZSBjdXJyZW50IGVsZW1lbnQiOiAiTGluayBhdWYgRWxlbWVudCBlbnRmZXJuZW4iLAorICAgICAgICAiX0RlbGV0ZSBSb3ciOiAiWmVpbGUgbMO2c2NoZW4iLAorICAgICAgICAiX0ltYWdlIFByb3BlcnRpZXMuLi4iOiAiRWlnZW5zY2hhZnRlbiIsCisgICAgICAgICJfTW9kaWZ5IExpbmsuLi4iOiAiTGluayDDpG5kZXJuIiwKKyAgICAgICAgIl9SZW1vdmUgTGluay4uLiI6ICJMaW5rIGVudGZlcm5lbiIsCisgICAgICAgICJfVGFibGUgUHJvcGVydGllcy4uLiI6ICJUYWJlbGxlbm9wdGlvbmVuIgorICAgIH0sCisgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiV29sbGVuIFNpZSBkaWVzZW4gTGluayB3aXJrbGljaCBlbnRmZXJuZW4/IiwKKyAgICAgICAgIkNhbmNlbCI6ICJBYmJyZWNoZW4iLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIlZlcmtuw7xwZnVuZyBoaW56dWbDvGdlbi/DpG5kZXJuIiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTmV1ZXMgRmVuc3RlciAoX2JsYW5rKSIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogImsuQS4gKGltcGxpeml0KSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPdGhlciI6ICJBbmRlcmVzIiwKKyAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJTZWxiZXIgUmFobWVuIChfc2VsZikiLAorICAgICAgICAiVGFyZ2V0OiI6ICJaaWVsOiIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogIlRpdGVsIChUb29sdGlwKToiLAorICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJPYmVyc3RlciBSYWhtZW4gKF90b3ApIiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIKKyAgICB9LAorICAgICJEeW5hbWljQ1NTIjogeworICAgICAgICAiQ2hvb3NlIHN0eWxlc2hlZXQiOiAiV8OkaGxlbiBTaWUgZWluZW4gU3R5bGVTaGVldCBhdXMiLAorICAgICAgICAiRGVmYXVsdCI6ICJTdGFuZGFyZCIsCisgICAgICAgICJVbmRlZmluZWQiOiAiTmljaHQgZGVmaW5pZXJ0IgorICAgIH0sCisgICAgIkVkaXRUYWciOiB7CisgICAgICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAgICAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICJIVE1MIGltIGF1c2dld8OkaGx0ZW4gQmVyZWljaCBiZWFyYmVpdGVuIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlRhZyBFZGl0b3IiOiAiSFRNTCB0YWcgRWRpdG9yIgorICAgIH0sCisgICAgIkVxdWF0aW9uIjogeworICAgICAgICAiQXNjaWlNYXRoIEZvcm11bGEgSW5wdXQiOiAiQXNjaWlNYXRoIEZvcm1lbGVkaXRvciIsCisgICAgICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAgICAgIkZvcm11bGEgRWRpdG9yIjogIkZvcm1lbGVkaXRvciIsCisgICAgICAgICJJbnB1dCI6ICJFaW5nYWJlIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlByZXZpZXciOiAiVm9yc2NoYXUiCisgICAgfSwKKyAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJ1bnRlbiBiw7xuZGlnIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJtaXR0aWciLAorICAgICAgICAiQWxpZ24iOiAiQW5vcmRudW5nIiwKKyAgICAgICAgIkFsdCI6ICJBbHQiLAorICAgICAgICAiQmFzZWxpbmUiOiAiR3J1bmRsaW5pZSIsCisgICAgICAgICJCb3JkZXIiOiAiUmFobWVuIiwKKyAgICAgICAgIkJvcmRlciBDb2xvciI6ICJSYWhtZW5mYXJiZSIsCisgICAgICAgICJCb3R0b20iOiAidW50ZW4iLAorICAgICAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgICAgICJDbGVhciI6ICJMw7ZzY2hlbiIsCisgICAgICAgICJDb2xvciI6ICJGYXJiZSIsCisgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiUHJvcG9ydGlvbmVuIGJlaWJlaGFsdGVuIiwKKyAgICAgICAgIkNvcHkiOiAiS29waWVyZW4iLAorICAgICAgICAiQ3JvcCI6ICJCZXNjaG5laWRlbiIsCisgICAgICAgICJDdXQiOiAiQXVzc2NobmVpZGVuIiwKKyAgICAgICAgIkRpcmVjdG9yeSI6ICJWZXJ6ZWljaG5pcyIsCisgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiQXVmd8OkcnRzIiwKKyAgICAgICAgIkVkaXQiOiAiQmVhcmJlaXRlbiIsCisgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiRGF0ZWltYW5hZ2VyIiwKKyAgICAgICAgIkZpbGVuYW1lOiI6ICJEYXRlaW5hbWU6IiwKKyAgICAgICAgIkZpbGVzaXplOiI6ICJEYXRlaWdyw7bDn2U6IiwKKyAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICJob3IuIHNwaWVnZWxuIiwKKyAgICAgICAgIkZsaXAgSW1hZ2UiOiAiQmlsZCBzcGllZ2VsbiIsCisgICAgICAgICJGbGlwIFZlcnRpY2FsIjogInZlci4gc3BpZWdlbG4iLAorICAgICAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIkdJRi1Gb3JtYXQgbmljaHQgdW50ZXJzdMO8dHp0LCBiZWFyYmVpdGVuIG5pY2h0IG3DtmdsaWNoLiIsCisgICAgICAgICJIZWlnaHQiOiAiSMO2aGUiLAorICAgICAgICAiSGVpZ2h0OiI6ICJIw7ZoZToiLAorICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICJEYXRlaWxpbmsgZWluZsO8Z2VuIiwKKyAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIlVuZ8O8bHRpZ2VzIEJhc2lzdmVyemVpY2huaXM6IiwKKyAgICAgICAgIkpQRUcgSGlnaCI6ICJKUEVHIGhvY2giLAorICAgICAgICAiSlBFRyBMb3ciOiAiSlBFRyBuaWVkcmlnIiwKKyAgICAgICAgIkpQRUcgTWVkaXVtIjogIkpQRUcgbWl0dGVsIiwKKyAgICAgICAgIkxlZnQiOiAibGlua3MiLAorICAgICAgICAiTG9hZGluZyI6ICJMYWRlbiIsCisgICAgICAgICJMb2NrIjogIkZlc3RzdGVsbGVuIiwKKyAgICAgICAgIk1hcmdpbiI6ICJBdXNzZW5hYnN0YW5kIiwKKyAgICAgICAgIk1hcmtlciI6ICJSYWhtZW4iLAorICAgICAgICAiTWVhc3VyZSI6ICJNYcOfZSIsCisgICAgICAgICJNaWRkbGUiOiAiemVudHJpZXJ0IiwKKyAgICAgICAgIk5ldyBGb2xkZXIiOiAiTmV1ZXMgVmVyemVpY2huaXMgZXJzdGVsbGVuIiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTmV1ZXMgRmVuc3RlciAoX2JsYW5rKSIsCisgICAgICAgICJObyBGaWxlcyBGb3VuZCI6ICJLZWluZSBEYXRlaWVuIGdlZnVuZGVuIiwKKyAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICJLZWluIEJpbGQgdmVyZsO8Z2JhciIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogImsuQS4gKGltcGxpeml0KSIsCisgICAgICAgICJOb3Qgc2V0IjogIm5pY2h0IGVpbmdlc3RlbGx0IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBhZGRpbmciOiAiSW5uZW5hYnN0YW5kIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiQW5vcmRudW5nIGRpZXNlcyBCaWxkZXMiLAorICAgICAgICAiUHJldmlldyI6ICJWb3JzY2hhdSIsCisgICAgICAgICJRdWFsaXR5OiI6ICJRdWFsaXTDpHQiLAorICAgICAgICAiUmVmcmVzaCI6ICJBa3R1YWxpc2llcmVuIiwKKyAgICAgICAgIlJlbmFtZSI6ICJVbWJlbmVubmVuIiwKKyAgICAgICAgIlJlc2l6ZSI6ICJHcsO2w59lIMOkbmRlcm4iLAorICAgICAgICAiUmlnaHQiOiAicmVjaHRzIiwKKyAgICAgICAgIlJvdGF0ZSI6ICJEcmVoZW4iLAorICAgICAgICAiUm90YXRlIEltYWdlIjogIkJpbGQgZHJlaGVuIiwKKyAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJTZWxiZXIgUmFobWVuIChfc2VsZikiLAorICAgICAgICAiU2F2ZSI6ICJTcGVpY2hlcm4iLAorICAgICAgICAiU3RhcnQgWDoiOiAiU3RhcnQgWCIsCisgICAgICAgICJTdGFydCBZOiI6ICJTdGFydCBZIiwKKyAgICAgICAgIlRhcmdldCBXaW5kb3ciOiAiWmllbGZlbnN0ZXIiLAorICAgICAgICAiVGV4dHRvcCI6ICJvYmVuIGLDvG5kaWciLAorICAgICAgICAiVGl0bGUgKHRvb2x0aXApIjogIlRpdGVsIChUb29sdGlwKSIsCisgICAgICAgICJUb2dnbGUgbWFya2VyIGNvbG9yIjogIkZhcmJlIGRlciBNYXJraWVydW5nIHVtc2NoYWx0ZW4iLAorICAgICAgICAiVG9wIjogIm9iZW4iLAorICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJPYmVyc3RlciBSYWhtZW4gKF90b3ApIiwKKyAgICAgICAgIlRyYXNoIjogIlBhcGllcmtvcmIiLAorICAgICAgICAiVXBsb2FkIjogIkhvY2hsYWRlbiIsCisgICAgICAgICJXOiI6ICJXOiIsCisgICAgICAgICJXaWR0aCI6ICJCcmVpdGUiLAorICAgICAgICAiV2lkdGg6IjogIkJyZWl0ZToiLAorICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIkJpdHRlIHp1ZXJzdCBUZXh0IG1hcmtpZXJlbi4iLAorICAgICAgICAiWm9vbSI6ICJab29tIgorICAgIH0sCisgICAgIkZpbHRlciI6IHsKKyAgICAgICAgIkZpbHRlciI6ICJGaWx0ZXIiCisgICAgfSwKKyAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAiR3Jvw58tL0tsZWluc2NocmVpYnVuZyIsCisgICAgICAgICJDbGVhciI6ICJOw6RjaHN0ZXMgZXJzZXR6ZW4iLAorICAgICAgICAiRG9uZSI6ICJGZXJ0aWciLAorICAgICAgICAiRW50ZXIgdGhlIHRleHQgeW91IHdhbnQgdG8gZmluZCI6ICJHZWJlbiBTaWUgZWluZW4gVGV4dCBlaW4gZGVuIFNpZSBmaW5kZW4gbcO2Y2h0ZW4iLAorICAgICAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICJTdWNoZW4gdW5kIGVyc2V0emVuIiwKKyAgICAgICAgIkhpZ2hsaWdodCI6ICJIZXJ2b3JoZWJlbiIsCisgICAgICAgICJJbmZvcm0gYSByZXBsYWNlbWVudCB3b3JkIjogIkdlYmVuIHNpZSBlaW5lbiBUZXh0IHp1bSBlcnNldHplbiBlaW4iLAorICAgICAgICAiTmV4dCI6ICJOw6RjaHN0ZXIiLAorICAgICAgICAiT3B0aW9ucyI6ICJPcHRpb25lbiIsCisgICAgICAgICJSZXBsYWNlIHdpdGg6IjogIkVyc2V0emVuIGR1cmNoOiIsCisgICAgICAgICJTZWFyY2ggZm9yOiI6ICJTdWNoZW4gbmFjaDoiLAorICAgICAgICAiU3Vic3RpdHV0ZSBhbGwgb2NjdXJyZW5jZXMiOiAiYWxsZSBUcmVmZmVyIGVyc2V0emVuIiwKKyAgICAgICAgIlN1YnN0aXR1dGUgdGhpcyBvY2N1cnJlbmNlPyI6ICJUcmVmZmVyIGVyc2V0emVuPyIsCisgICAgICAgICJVbmRvIjogIlLDvGNrZ8OkbmdpZyIsCisgICAgICAgICJXaG9sZSB3b3JkcyBvbmx5IjogIkdhbnplIFfDtnJ0ZXIiLAorICAgICAgICAiZm91bmQgaXRlbSI6ICJUcmVmZmVyIiwKKyAgICAgICAgImZvdW5kIGl0ZW1zIjogImFsbGUgVHJlZmZlciIsCisgICAgICAgICJub3QgZm91bmQiOiAia2VpbiBUZWZmZXIiLAorICAgICAgICAicmVwbGFjZWQgaXRlbSI6ICJlcnNldHp0ZXIgVHJlZmZlciIsCisgICAgICAgICJyZXBsYWNlZCBpdGVtcyI6ICJlcnNldHp0ZSBUcmVmZmVyIgorICAgIH0sCisgICAgIkZvcm1PcGVyYXRpb25zIjogeworICAgICAgICAiSW5zZXJ0IGEgRm9ybS4iOiAiRW1haWwgRm9ybSBlaW5mw7xnZW4uIiwKKyAgICAgICAgIkluc2VydCBhIGNoZWNrIGJveC4iOiAiSMOka2NoZW5mZWxkIGVpbmbDvGdlbiIsCisgICAgICAgICJJbnNlcnQgYSBtdWx0aS1saW5lIHRleHQgZmllbGQuIjogIk1laHJ6ZWlsaWdlcyBUZXh0ZmVsZCBlaW5mw7xnZW4uIiwKKyAgICAgICAgIkluc2VydCBhIHJhZGlvIGJ1dHRvbi4iOiAiT3B0aW9uc2ZlbGQgZWluZsO8Z2VuIiwKKyAgICAgICAgIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iOiAiQXVzd2FobGZlbGQgZWluZsO8Z2VuLiIsCisgICAgICAgICJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiI6ICJTZW5kZW4venVyw7xja3NldHplbiBTY2hhbHRmbMOkY2hlIiwKKyAgICAgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiUGFzc3dvcnQgb2RlciB1bnNpY2h0YmFyZXMgRmVsZCBlaW5mw7xnZW4uIgorICAgIH0sCisgICAgIkZvcm1zIjogeworICAgICAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIkJpbGQgVVJMOiIsCisgICAgICAgICJOYW1lIjogIk5hbWUiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3B0aW9ucyI6ICJPcHRpb25lbiIsCisgICAgICAgICJSb3dzOiI6ICJaZWlsZW46IiwKKyAgICAgICAgIlNpemU6IjogIkdyw7bDn2U6IiwKKyAgICAgICAgIlRleHQ6IjogIlRleHQ6IgorICAgIH0sCisgICAgIkZ1bGxQYWdlIjogeworICAgICAgICAiQWx0ZXJuYXRlIHN0eWxlLXNoZWV0OiI6ICJBbHRlcm5hdGl2ZXIgU3R5bGVzaGVldDoiLAorICAgICAgICAiQmFja2dyb3VuZCBjb2xvcjoiOiAiSGludGVyZ3J1bmRmYXJiZToiLAorICAgICAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgICAgICJDaGFyYWN0ZXIgc2V0OiI6ICJaZWljaGVuc2F0eiIsCisgICAgICAgICJET0NUWVBFOiI6ICJET0NUWVBFOiIsCisgICAgICAgICJEZXNjcmlwdGlvbjoiOiAiQmVzY2hyZWlidW5nIiwKKyAgICAgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAiRG9rdW1lbnRlaWdlbnNjaGFmdGVuIiwKKyAgICAgICAgIkRvY3VtZW50IHRpdGxlOiI6ICJEb2t1bWVudHRpdGVsOiIsCisgICAgICAgICJLZXl3b3JkczoiOiAiU2NobMO8c3NlbHdvcnRlIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlByaW1hcnkgc3R5bGUtc2hlZXQ6IjogIlN0eWxlc2hlZXQ6IiwKKyAgICAgICAgIlRleHQgY29sb3I6IjogIlRleHRmYXJiZToiLAorICAgICAgICAiVVRGLTggKHJlY29tbWVuZGVkKSI6ICJVVEYtOCAoZW1wZm9obGVuKSIKKyAgICB9LAorICAgICJGdWxsU2NyZWVuIjogeworICAgICAgICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIkVkaXRvciBtYXhpbWllcmVuL3ZlcmtsZWluZXJuIgorICAgIH0sCisgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAiQWxpZ25tZW50OiI6ICJBdXNyaWNodHVuZzoiLAorICAgICAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgICAgICJDZW50ZXIiOiAiemVudHJpZXJ0IiwKKyAgICAgICAgIkNvbG9yOiI6ICJGYXJiZSIsCisgICAgICAgICJIZWlnaHQ6IjogIkjDtmhlOiIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiSG9yaXpvbnRhbGUgTGluaWUiLAorICAgICAgICAiSW5zZXJ0L2VkaXQgaG9yaXpvbnRhbCBydWxlIjogImhvcml6b250YWxlIExpbmllIGVpbmbDvGdlbi9iZWFyYmVpdGVuIiwKKyAgICAgICAgIkxheW91dCI6ICJHZXN0YWx0dW5nIiwKKyAgICAgICAgIkxlZnQiOiAibGlua3MiLAorICAgICAgICAiTm8gc2hhZGluZyI6ICJrZWluZSBTY2hhdHRpZXJ1bmciLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUmlnaHQiOiAicmVjaHRzIiwKKyAgICAgICAgIlN0eWxlIjogIlN0aWwiLAorICAgICAgICAiV2lkdGg6IjogIkJyZWl0ZToiLAorICAgICAgICAicGVyY2VudCI6ICJQcm96ZW50IiwKKyAgICAgICAgInBpeGVscyI6ICJQaXhlbCIKKyAgICB9LAorICAgICJIdG1sVGlkeSI6IHsKKyAgICAgICAgIkhUTUwgVGlkeSI6ICJIVE1MIFRpZHkiLAorICAgICAgICAiVGlkeSBmYWlsZWQuICBDaGVjayB5b3VyIEhUTUwgZm9yIHN5bnRheCBlcnJvcnMuIjogIlRpZHkgZmVobGdlc2NobGFnZW4uIFByw7xmZW4gU2llIGRlbiBIVE1MIENvZGUgbmFjaCBTeW50YXgtRmVobGVybi4iCisgICAgfSwKKyAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAiQWJzYm90dG9tIjogInVudGVuIGLDvG5kaWciLAorICAgICAgICAiQWJzbWlkZGxlIjogIm1pdHRpZyIsCisgICAgICAgICJBbmdsZToiOiAiV2lua2VsOiIsCisgICAgICAgICJCYXNlbGluZSI6ICJHcnVuZGxpbmllIiwKKyAgICAgICAgIkJvdHRvbSI6ICJ1bnRlbiIsCisgICAgICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAgICAgIkNsZWFyIjogIkVudGZlcm5lbiIsCisgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiUHJvcG9ydGlvbmFsIiwKKyAgICAgICAgIkNyb3AiOiAiQmVzY2huZWlkZW4iLAorICAgICAgICAiRGlyZWN0b3J5IjogIk9yZG5lciIsCisgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiw7xiZXJnZW9yZG5ldGVyIE9yZG5lciIsCisgICAgICAgICJFZGl0IjogImJlYXJiZWl0ZW4iLAorICAgICAgICAiRmlsZW5hbWU6IjogIkRhdGVpbmFtZToiLAorICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogImhvcml6b250YWwgc3BpZWdlbG4iLAorICAgICAgICAiRmxpcCBJbWFnZSI6ICJCaWxkIHNwaWVnZWxuIiwKKyAgICAgICAgIkZsaXAgVmVydGljYWwiOiAidmVydGlrYWwgc3BpZWdlbG4iLAorICAgICAgICAiRm9sZGVyIE5hbWU6IjogIk9yZG5lcm5hbWU6IiwKKyAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICJHSUYgRm9ybWF0IHdpcmQgbmljaHQgdW50ZXJzdMO8dHp0LCBCaWxkYmVhcmJlaXR1bmcgd2lyZCBuaWNodCB1bnRlcnN0w7x0enQuIiwKKyAgICAgICAgIkhlaWdodDoiOiAiSMO2aGU6IiwKKyAgICAgICAgIkltYWdlIEZvcm1hdCI6ICJCaWxkZm9ybWF0OiIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiQmlsZCBlaW5mw7xnZW4iLAorICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiVW5nw7xsdGlnZXMgU3RhcnR2ZXJ6ZWljaG5pczoiLAorICAgICAgICAiSlBFRyBIaWdoIjogIkpQRUcgaG9jaCIsCisgICAgICAgICJKUEVHIExvdyI6ICJKUEVHIG5pZWRyaWciLAorICAgICAgICAiSlBFRyBNZWRpdW0iOiAiSlBFRyBtaXR0ZWwiLAorICAgICAgICAiTGVmdCI6ICJsaW5rcyIsCisgICAgICAgICJMb2NrIjogIlNwZXJyZW4iLAorICAgICAgICAiTWFya2VyIjogIk1hcmtlciIsCisgICAgICAgICJNZWFzdXJlIjogIkFibWVzc3VuZ2VuIiwKKyAgICAgICAgIk1pZGRsZSI6ICJ6ZW50cmllcnQiLAorICAgICAgICAiTmV3IEZvbGRlciI6ICJOZXVlciBPcmRuZXIiLAorICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIktlaW4gQmlsZCB2ZXJmw7xnYmFyIiwKKyAgICAgICAgIk5vIEltYWdlcyBGb3VuZCI6ICJLZWluIEJpbGQgZ2VmdW5kZW4iLAorICAgICAgICAiTm90IHNldCI6ICJuaWNodCBlaW5nZXN0ZWxsdCIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIkFub3JkbnVuZyBkaWVzZXMgQmlsZGVzIiwKKyAgICAgICAgIlF1YWxpdHk6IjogIlF1YWxpdMOkdCIsCisgICAgICAgICJSZWZyZXNoIjogIkFrdHVhbGlzaWVyZW4iLAorICAgICAgICAiUmVzaXplIjogIkdyw7bDn2Ugw6RuZGVybiIsCisgICAgICAgICJSaWdodCI6ICJyZWNodHMiLAorICAgICAgICAiUm90YXRlIjogIkRyZWhlbiIsCisgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiQmlsZCBkcmVoZW4iLAorICAgICAgICAiU2F2ZSI6ICJTcGVpY2hlcm4iLAorICAgICAgICAiU3RhcnQgWDoiOiAiU3RhcnQgWCIsCisgICAgICAgICJTdGFydCBZOiI6ICJTdGFydCBZIiwKKyAgICAgICAgIlRleHR0b3AiOiAib2JlbiBiw7xuZGlnIiwKKyAgICAgICAgIlRvcCI6ICJvYmVuIiwKKyAgICAgICAgIlRyYXNoIjogIk3DvGxsIiwKKyAgICAgICAgIlc6IjogIkI6IiwKKyAgICAgICAgIldpZHRoOiI6ICJCcmVpdGU6IgorICAgIH0sCisgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgIkJhY2tncm91bmQiOiAiSGludGVyZ3J1bmQiLAorICAgICAgICAiQmFzZWxpbmUiOiAiR3J1bmRsaW5pZSIsCisgICAgICAgICJCb3JkZXIiOiAiUmFobWVuIiwKKyAgICAgICAgIkJvdHRvbSI6ICJ1bnRlbiIsCisgICAgICAgICJDZW50ZXIiOiAiemVudHJpZXJ0IiwKKyAgICAgICAgIkNoYXIiOiAiWmVpY2hlbiIsCisgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICJSYWhtZW4gZmFsbGVuIHp1c2FtbWVuIiwKKyAgICAgICAgIkZHIENvbG9yIjogIlZvcmRlcmdydW5kZmFyYmUiLAorICAgICAgICAiRmxvYXQiOiAiRmxvYXQiLAorICAgICAgICAiSGVpZ2h0IjogIkjDtmhlIiwKKyAgICAgICAgIkltYWdlIFVSTCI6ICJCaWxkLVVSTCIsCisgICAgICAgICJKdXN0aWZ5IjogIkJsb2Nrc2F0eiIsCisgICAgICAgICJMYXlvdXQiOiAiR2VzdGFsdHVuZyIsCisgICAgICAgICJMZWZ0IjogImxpbmtzIiwKKyAgICAgICAgIk1hcmdpbiI6ICJBdXNzZW5hYnN0YW5kIiwKKyAgICAgICAgIk1pZGRsZSI6ICJ6ZW50cmllcnQiLAorICAgICAgICAiTm9uZSI6ICJLZWluZSIsCisgICAgICAgICJQYWRkaW5nIjogIklubmVuYWJzdGFuZCIsCisgICAgICAgICJSaWdodCI6ICJyZWNodHMiLAorICAgICAgICAiVGV4dCBhbGlnbiI6ICJUZXh0YXVzcmljaHR1bmciLAorICAgICAgICAiVG9wIjogIm9iZW4iLAorICAgICAgICAiVmVydGljYWwgYWxpZ24iOiAiVmVydGlrYWxlIEF1c3JpY2h0dW5nIiwKKyAgICAgICAgIldpZHRoIjogIkJyZWl0ZSIsCisgICAgICAgICJwZXJjZW50IjogIlByb3plbnQiLAorICAgICAgICAicGl4ZWxzIjogIlBpeGVsIgorICAgIH0sCisgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgIkFuY2hvciBuYW1lIjogIk5hbWUgKElEKSIsCisgICAgICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAgICAgIkRlbGV0ZSI6ICJMw7ZzY2hlbiIsCisgICAgICAgICJJbnNlcnQgQW5jaG9yIjogIkFua2VyIGVpbmbDvGdlbiIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJ1bnRlbiBiw7xuZGlnIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJtaXR0aWciLAorICAgICAgICAiQWxpZ25tZW50OiI6ICJBdXNyaWNodHVuZzoiLAorICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIkFsdGVybmF0aXZlciBUZXh0OiIsCisgICAgICAgICJCYXNlbGluZSI6ICJHcnVuZGxpbmllIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIlJhbmRzdMOkcmtlOiIsCisgICAgICAgICJCb3R0b20iOiAidW50ZW4iLAorICAgICAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiQml0dGUgZ2ViZW4gc2llIGhpZXIgZGllIEJpbGQgVVJMIGVpbiIsCisgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJmw7xyIEJyb3dzZXIsIGRpZSBrZWluZSBCaWxkZXIgdW50ZXJzdMO8dHplbiIsCisgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiaG9yaXpvbnRhbGVyIEluaGFsdHNhYnN0YW5kIiwKKyAgICAgICAgIkhvcml6b250YWw6IjogImhvcml6b250YWw6IiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIkJpbGQgVm9yYW5zaWNodDoiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJCaWxkIFVSTDoiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIkJpbGQgZWluZsO8Z2VuIiwKKyAgICAgICAgIkxheW91dCI6ICJHZXN0YWx0dW5nIiwKKyAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAibGVlciBsYXNzZW4gZsO8ciBrZWluZW4gUmFuZCIsCisgICAgICAgICJMZWZ0IjogImxpbmtzIiwKKyAgICAgICAgIk1pZGRsZSI6ICJ6ZW50cmllcnQiLAorICAgICAgICAiTm90IHNldCI6ICJuaWNodCBlaW5nZXN0ZWxsdCIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIkFub3JkbnVuZyBkaWVzZXMgQmlsZGVzIiwKKyAgICAgICAgIlByZXZpZXciOiAiVm9yc2NoYXUiLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlZvcmFuc2ljaHQgZGVzIEJpbGRlcyBpbiBlaW5lbSBuZXVlbiBGZW5zdGVyIiwKKyAgICAgICAgIlJpZ2h0IjogInJlY2h0cyIsCisgICAgICAgICJTcGFjaW5nIjogIkFic3RhbmQiLAorICAgICAgICAiVGV4dHRvcCI6ICJvYmVuIGLDvG5kaWciLAorICAgICAgICAiVG9wIjogIm9iZW4iLAorICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICJ2ZXJ0aWthbGVyIEluaGFsdHNhYnN0YW5kIiwKKyAgICAgICAgIlZlcnRpY2FsOiI6ICJ2ZXJ0aWthbDoiLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICJCaXR0ZSBnZWJlbiBTaWUgZGllIFVSTCBlaW4iCisgICAgfSwKKyAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgIkJhY2tncm91bmQtQ29sb3I6IjogIkhpbnRlcmdydW5kZmFyYmU6IiwKKyAgICAgICAgIkJlaGF2aW9yOiI6ICJCZXdlZ3VuZzoiLAorICAgICAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgICAgICJEaXJlY3Rpb246IjogIkF1c3JpY2h0dW5nOiIsCisgICAgICAgICJIZWlnaHQ6IjogIkjDtmhlOiIsCisgICAgICAgICJJbnNlcnQgc2Nyb2xsaW5nIG1hcnF1ZWUiOiAiTWFycXVlZSBlaW5mw7xnZW4iLAorICAgICAgICAiTGVmdCI6ICJsaW5rcyIsCisgICAgICAgICJOYW1lIjogIk5hbWUiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUmlnaHQiOiAicmVjaHRzIiwKKyAgICAgICAgIlNwZWVkIENvbnRyb2wiOiAiR2VzY2h3aW5kaWdrZWl0c2VpbnN0ZWxsdW5nZW4iLAorICAgICAgICAiVGV4dDoiOiAiVGV4dDoiLAorICAgICAgICAiV2lkdGg6IjogIkJyZWl0ZToiCisgICAgfSwKKyAgICAiSW5zZXJ0Tm90ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBYmJyZWNoZW4iCisgICAgfSwKKyAgICAiSW5zZXJ0UGFnZWJyZWFrIjogeworICAgICAgICAiUGFnZSBicmVhayI6ICJOZXVlIFNlaXRlIgorICAgIH0sCisgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICJBYnNib3R0b20iOiAidW50ZW4gYsO8bmRpZyIsCisgICAgICAgICJBYnNtaWRkbGUiOiAibWl0dGlnIiwKKyAgICAgICAgIkFsaWdubWVudDoiOiAiQXVzcmljaHR1bmc6IiwKKyAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJBbHRlcm5hdGl2ZXIgVGV4dDoiLAorICAgICAgICAiQmFzZWxpbmUiOiAiR3J1bmRsaW5pZSIsCisgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJSYW5kc3TDpHJrZToiLAorICAgICAgICAiQm90dG9tIjogInVudGVuIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBYmJyZWNoZW4iLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkJpdHRlIGdlYmVuIHNpZSBoaWVyIGRpZSBCaWxkIFVSTCBlaW4iLAorICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiZsO8ciBCcm93c2VyLCBkaWUga2VpbmUgQmlsZGVyIHVudGVyc3TDvHR6ZW4iLAorICAgICAgICAiSGVpZ2h0OiI6ICJIw7ZoZSIsCisgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiaG9yaXpvbnRhbGVyIEluaGFsdHNhYnN0YW5kIiwKKyAgICAgICAgIkhvcml6b250YWw6IjogImhvcml6b250YWw6IiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIkJpbGQgVm9yYW5zaWNodDoiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJCaWxkIFVSTDoiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIkJpbGQgZWluZsO8Z2VuIiwKKyAgICAgICAgIkxheW91dCI6ICJHZXN0YWx0dW5nIiwKKyAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAibGVlciBsYXNzZW4gZsO8ciBrZWluZW4gUmFuZCIsCisgICAgICAgICJMZWZ0IjogImxpbmtzIiwKKyAgICAgICAgIk1pZGRsZSI6ICJ6ZW50cmllcnQiLAorICAgICAgICAiTm90IHNldCI6ICJuaWNodCBlaW5nZXN0ZWxsdCIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICJEYXRlaSBpbiBuZXVlbiBGZW5zdGVyIGFuemVpZ2VuIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiQW5vcmRudW5nIGRpZXNlcyBCaWxkZXMiLAorICAgICAgICAiUHJldmlldyI6ICJWb3JzY2hhdSIsCisgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiVm9yYW5zaWNodCBkZXMgQmlsZGVzIGluIGVpbmVtIG5ldWVuIEZlbnN0ZXIiLAorICAgICAgICAiUmlnaHQiOiAicmVjaHRzIiwKKyAgICAgICAgIlNpemUiOiAiR3LDtsOfZSIsCisgICAgICAgICJTcGFjaW5nIjogIkFic3RhbmQiLAorICAgICAgICAiVGV4dHRvcCI6ICJvYmVuIGLDvG5kaWciLAorICAgICAgICAiVG9wIjogIm9iZW4iLAorICAgICAgICAiVXBsb2FkIGZpbGUiOiAiRGF0ZWkgaG9jaGxhZGVuIiwKKyAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAidmVydGlrYWxlciBJbmhhbHRzYWJzdGFuZCIsCisgICAgICAgICJWZXJ0aWNhbDoiOiAidmVydGlrYWw6IiwKKyAgICAgICAgIldpZHRoOiI6ICJCcmVpdGUiCisgICAgfSwKKyAgICAiSW5zZXJ0U21pbGV5IjogeworICAgICAgICAiSW5zZXJ0IFNtaWxleSI6ICJTbWlsZXkgZWluZsO8Z2VuIgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAgICAgIkhpZGUgcHJldmlldyI6ICJWb3JzY2hhdSB2ZXJiZXJnZW4iLAorICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiU25pcHBldCBlaW5mw7xnZW4iLAorICAgICAgICAiSW5zZXJ0IGFzIjogIkVpbmbDvGdlbiBhbHMiLAorICAgICAgICAiU2hvdyBwcmV2aWV3IjogIlZvcnNjaGF1IHplaWdlbiIsCisgICAgICAgICJWYXJpYWJsZSI6ICJWYXJpYWJsZSIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgIkFsbCBDYXRlZ29yaWVzIjogIkFsbGUgS2F0ZWdvcmllbiIsCisgICAgICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAgICAgIkZpbHRlciI6ICJGaWx0ZXIiLAorICAgICAgICAiSFRNTCI6ICJIVE1MIiwKKyAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIlNuaXBwZXQgZWluZsO8Z2VuIiwKKyAgICAgICAgIkluc2VydCBhcyBIVE1MIjogIkFscyBIVE1MIGVpbmbDvGdlbiIsCisgICAgICAgICJJbnNlcnQgYXMgdGVtcGxhdGUgdmFyaWFibGUiOiAiQWxzIFRlbXBsYXRlLVZhcmlhYmxlIGVpbmbDvGdlbiIsCisgICAgICAgICJPbmx5IHNlYXJjaCB3b3JkIGJlZ2lubmluZyI6ICJOdXIgbmFjaCBXb3J0YW5mYW5nIHN1Y2hlbiIsCisgICAgICAgICJWYXJpYWJsZSI6ICJWYXJpYWJsZSIKKyAgICB9LAorICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJ1bnRlbiBiw7xuZGlnIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJtaXR0aWciLAorICAgICAgICAiQWxpZ25tZW50OiI6ICJBdXNyaWNodHVuZzoiLAorICAgICAgICAiQmFzZWxpbmUiOiAiR3J1bmRsaW5pZSIsCisgICAgICAgICJCb3JkZXIiOiAiUmFobWVuIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIlJhbmRzdMOkcmtlOiIsCisgICAgICAgICJCb3R0b20iOiAidW50ZW4iLAorICAgICAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgICAgICJDYXB0aW9uIjogIsOcYmVyc2NocmlmdCIsCisgICAgICAgICJDZWxsIHBhZGRpbmc6IjogIklubmVuYWJzdGFuZDoiLAorICAgICAgICAiQ2VsbCBzcGFjaW5nOiI6ICJaZWxsZW5hYnN0YW5kOiIsCisgICAgICAgICJDb2xzOiI6ICJTcGFsdGVuOiIsCisgICAgICAgICJFbSI6ICJHZXZpZXJ0IiwKKyAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiU3BhbHRlbiBtaXQgZmVzdGVyIEJyZWl0ZSIsCisgICAgICAgICJJbnNlcnQgVGFibGUiOiAiVGFiZWxsZSBlaW5mw7xnZW4iLAorICAgICAgICAiTGF5b3V0IjogIkdlc3RhbHR1bmciLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJsZWVyIGxhc3NlbiBmw7xyIGtlaW5lbiBSYW5kIiwKKyAgICAgICAgIkxlZnQiOiAibGlua3MiLAorICAgICAgICAiTWlkZGxlIjogInplbnRyaWVydCIsCisgICAgICAgICJOb3Qgc2V0IjogIm5pY2h0IGVpbmdlc3RlbGx0IiwKKyAgICAgICAgIk51bWJlciBvZiBjb2x1bW5zIjogIlNwYWx0ZW5hbnphaGwiLAorICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAiWmVpbGVuYW56YWhsIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBlcmNlbnQiOiAiUHJvemVudCIsCisgICAgICAgICJQaXhlbHMiOiAiUGl4ZWwiLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICJQb3NpdGlvbmllcnVuZyBkZXIgVGFiZWxsZSIsCisgICAgICAgICJSaWdodCI6ICJyZWNodHMiLAorICAgICAgICAiUm93czoiOiAiWmVpbGVuOiIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIlJhdW0gendpc2NoZW4gYW5ncmVuemVuZGVuIFplbGxlbiIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIlJhdW0gendpc2NoZW4gSW5oYWx0IHVuZCBSYW5kIGRlciBaZWxsZSIsCisgICAgICAgICJTcGFjaW5nIjogIkFic3RhbmQiLAorICAgICAgICAiVGV4dHRvcCI6ICJvYmVuIGLDvG5kaWciLAorICAgICAgICAiVG9wIjogIm9iZW4iLAorICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIlRhYmVsbGVuYnJlaXRlIiwKKyAgICAgICAgIldpZHRoIHVuaXQiOiAiR3LDtsOfZW5laW5oZWl0IiwKKyAgICAgICAgIldpZHRoOiI6ICJCcmVpdGU6IiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiQml0dGUgZ2ViZW4gU2llIGRpZSBBbnphaGwgZGVyIFNwYWx0ZW4gYW4iLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICJCaXR0ZSBnZWJlbiBTaWUgZGllIEFuemFobCBkZXIgWmVpbGVuIGFuIgorICAgIH0sCisgICAgIkxhbmdNYXJrcyI6IHsKKyAgICAgICAgIiZtZGFzaDsgbGFuZ3VhZ2UgJm1kYXNoOyI6ICImbWRhc2g7IFNwcmFjaGUgJm1kYXNoOyIsCisgICAgICAgICJFbmdsaXNoIjogImVuZ2xpc2NoIiwKKyAgICAgICAgIkZyZW5jaCI6ICJmcmFuesO2c2lzY2giLAorICAgICAgICAiR3JlZWsiOiAiZ3JpZWNoaXNjaCIsCisgICAgICAgICJMYXRpbiI6ICJsYXRlaW5pc2NoIiwKKyAgICAgICAgImxhbmd1YWdlIHNlbGVjdCI6ICJTcHJhY2hhdXN3YWhsIgorICAgIH0sCisgICAgIkxpbmtlciI6IHsKKyAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICJXb2xsZW4gU2llIGRpZXNlbiBMaW5rIHdpcmtsaWNoIGVudGZlcm5lbj8iLAorICAgICAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgICAgICJFbWFpbCBBZGRyZXNzOiI6ICJFbWFpbCBBZHJlc3NlIiwKKyAgICAgICAgIkVtYWlsIExpbmsiOiAiRW1haWwgTGluayIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiVmVya27DvHBmdW5nIGhpbnp1ZsO8Z2VuL8OkbmRlcm4iLAorICAgICAgICAiTWVzc2FnZSBUZW1wbGF0ZToiOiAiTmFjaHJpY2h0ZW4gVm9ybGFnZToiLAorICAgICAgICAiTmFtZToiOiAiTmFtZToiLAorICAgICAgICAiTmV3IFdpbmRvdyI6ICJOZXVlcyBGZW5zdGVyIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk9yZGluYXJ5IExpbmsiOiAiU3RhbmRhcmQgTGluayIsCisgICAgICAgICJQb3B1cCBXaW5kb3ciOiAiUG9wLVVwIEZlbnN0ZXIiLAorICAgICAgICAiUmVtb3ZlIExpbmsiOiAiTGluayBlbnRmZXJuZW4iLAorICAgICAgICAiU2FtZSBXaW5kb3cgKGp1bXAgb3V0IG9mIGZyYW1lcykiOiAiU2VsYmVzIEZlbnN0ZXIgKGdhbnplciBCZXJlaWNoKSIsCisgICAgICAgICJTaXplOiI6ICJHcsO2w59lOiIsCisgICAgICAgICJTdWJqZWN0OiI6ICJCZXRyZWZmOiIsCisgICAgICAgICJUYXJnZXQ6IjogIlppZWw6IiwKKyAgICAgICAgIlVSTCBMaW5rIjogIlVSTCBBZHJlc3NlIiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIsCisgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiU2llIG3DvHNzZW4gZWluZW4gVGV4dCBtYXJraWVyZW4gdW0gZWluZW4gTGluayB6dSBlcnN0ZWxsZW4iCisgICAgfSwKKyAgICAiTGlzdFR5cGUiOiB7CisgICAgICAgICJDaG9vc2UgbGlzdCBzdHlsZSB0eXBlIChmb3Igb3JkZXJlZCBsaXN0cykiOiAiV8OkaGxlbiBTaWUgZWluZW4gVHlwIGbDvHIgZGllIE51bW1lcmllcnVuZyBhdXMiLAorICAgICAgICAiRGVjaW1hbCBudW1iZXJzIjogIlphaGxlbiIsCisgICAgICAgICJMb3dlciBncmVlayBsZXR0ZXJzIjogIkdyaWVjaGlzY2giLAorICAgICAgICAiTG93ZXIgbGF0aW4gbGV0dGVycyI6ICJaZWljaGVuIGtsZWluIiwKKyAgICAgICAgIkxvd2VyIHJvbWFuIG51bWJlcnMiOiAiUsO2bWlzY2gga2xlaW4iLAorICAgICAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICJaZWljaGVuIGdyb8OfIiwKKyAgICAgICAgIlVwcGVyIHJvbWFuIG51bWJlcnMiOiAiUsO2bWlzY2ggZ3Jvw58iCisgICAgfSwKKyAgICAiTW9vdG9vbHNGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiRGF0ZWlsaW5rIGVpbmbDvGdlbiIsCisgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiU2llIG3DvHNzZW4gZWluZW4gVGV4dCBtYXJraWVyZW4gdW0gZWluZW4gTGluayB6dSBlcnN0ZWxsZW4iCisgICAgfSwKKyAgICAiTm90ZVNlcnZlciI6IHsKKyAgICAgICAgIkFkZCBHVUlETyBDb2RlIGluIGEgdGV4dGJveCBvbiB0aGUgcGFnZSI6ICJHVUlETyBDb2RlIGluIGVpbmVyIFRleHRib3ggYXVmIGRlciBTZWl0ZSBhbnplaWdlbiIsCisgICAgICAgICJBZGQgTUlESSBsaW5rIHRvIGFsbG93IHN0dWRlbnRzIHRvIGhlYXIgdGhlIG11c2ljIjogIk1JREktTGluayBoaW56dWbDvGdlbiB1bSBTdHVkZW50ZW4gZGFzIGjDtnJlbiBkZXIgTXVzaWsgenUgZXJtw7ZnbGljaGVuIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBYmJyZWNoZW4iLAorICAgICAgICAiRm9ybWF0IjogIkZvcm1hdCIsCisgICAgICAgICJHdWlkbyBjb2RlIjogIkd1aWRvIGNvZGUiLAorICAgICAgICAiSW1hZ2UgUHJldmlldyI6ICJCaWxkIFZvcmFuc2ljaHQiLAorICAgICAgICAiSW1hZ2UgaW4gYXBwbGV0IjogIkJpbGQgaW0gQXBwbGV0IiwKKyAgICAgICAgIkluc2VydCBHVUlETyBNdXNpYyBOb3RhdGlvbiI6ICJFaW5mw7xndW5nIGVpbmVyIEdVSURPIE11c2lrLVRvbmZvbGdlIiwKKyAgICAgICAgIk1JREkgRmlsZSI6ICJNSURJIERhdGVpIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk9wdGlvbnMiOiAiRWluc3RlbGx1bmdlbiIsCisgICAgICAgICJQcmV2aWV3IjogIlZvcmFuc2ljaHQiLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlZvcmFuc2ljaHQgZGVzIEJpbGRlcyBpbiBlaW5lbSBuZXVlbiBGZW5zdGVyIiwKKyAgICAgICAgIlNvdXJjZSBDb2RlIjogIlF1ZWxsLUNvZGUiLAorICAgICAgICAiWm9vbSI6ICJab29tIgorICAgIH0sCisgICAgIk9wZXJhIjogeworICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICJBdXMgU2ljaGVyaGVpdHNncsO8bmRlbiBkw7xyZmVuIFNrcmlwdGUgbm9ybWFsZXJ3ZWlzZSBuaWNodCBhdWYgQXVzc2NobmVpZGVuL0tvcGllcmVuL0VpbmbDvGdlbiB6dWdyZWlmZW4uIEJlbnV0emVuIFNpZSBiaXR0ZSBkaWUgZW50c3ByZWNoZW5kZW4gVGFzdGF0dXItS29tbWFuZG9zIChTdHJnICsgeC9jL3YpLiIKKyAgICB9LAorICAgICJQU0xvY2FsIjogeworICAgICAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIKKyAgICB9LAorICAgICJQYXN0ZVRleHQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAgICAgIkluc2VydCB0ZXh0IGluIG5ldyBwYXJhZ3JhcGgiOiAiTmV1ZSBBYnPDpHR6ZSBlaWbDvGdlbiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQYXN0ZSBhcyBQbGFpbiBUZXh0IjogInVuZm9ybWF0aWVydGVuIFRleHQgZWluZsO8Z2VuIgorICAgIH0sCisgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgICAgICJDb3B5IjogIktvcGllcmVuIiwKKyAgICAgICAgIkRlbGV0ZSI6ICJMw7ZzY2hlbiIsCisgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiw7xiZXJnZW9yZG5ldGVyIE9yZG5lciIsCisgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiRGF0ZWltYW5hZ2VyIiwKKyAgICAgICAgIkZpbGVuYW1lIjogIkRhdGVpbmFtZToiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIkJpbGQgZWluZsO8Z2VuIiwKKyAgICAgICAgIk5ldyBGb2xkZXIiOiAiTmV1ZXIgT3JkbmVyIiwKKyAgICAgICAgIlNhdmUiOiAiU3BlaWNoZXJuIiwKKyAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICJTaWUgbcO8c3NlbiBlaW5lbiBUZXh0IG1hcmtpZXJlbiB1bSBlaW5lbiBMaW5rIHp1IGVyc3RlbGxlbiIKKyAgICB9LAorICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgIkFUVFJJQlVURVMiOiAiQVRUUklCVVRFUyIsCisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsIiwKKyAgICAgICAgIkNvbG9ycyI6ICJDb2xvcnMiLAorICAgICAgICAiRW50ZXIgdGhlIFRBRyB5b3Ugd2FudCB0byBpbnNlcnQiOiAiRW50ZXIgdGhlIFRBRyB5b3Ugd2FudCB0byBpbnNlcnQiLAorICAgICAgICAiTm8gQ1NTIGNsYXNzIGF2YWlhYmxlIjogIk5vIENTUyBjbGFzc2VzIGF2YWlhYmxlIiwKKyAgICAgICAgIk9QVElPTlMiOiAiT1BUSU9OUyIsCisgICAgICAgICJPayI6ICJPayIsCisgICAgICAgICJRdWljayBUYWcgRWRpdG9yIjogIlF1aWNrIFRBRyBFZGl0b3IiLAorICAgICAgICAiVEFHcyI6ICJUQUdzIiwKKyAgICAgICAgIlRoZXJlIGFyZSBzb21lIHVuY2xvc2VkIHF1b3RlIjogIlRoZXJlIGFyZSBzb21lIHVuY2xvc2VkIHF1b3RlIiwKKyAgICAgICAgIlRoaXMgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBUQUciOiAiVGhpcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIFRBRyIsCisgICAgICAgICJZb3UgaGF2ZSB0byBzZWxlY3Qgc29tZSB0ZXh0IjogIllvdSBoYXZlIHRvIHNlbGVjdCBzb21lIHRleHQiCisgICAgfSwKKyAgICAiU2F2ZVN1Ym1pdCI6IHsKKyAgICAgICAgIlJlYWR5IjogIkZlcnRpZyIsCisgICAgICAgICJTYXZlIjogIlNwZWljaGVybiIsCisgICAgICAgICJTYXZpbmcuLi4iOiAiU3BlaWNoZXJuLi4uIiwKKyAgICAgICAgImluIHByb2dyZXNzIjogImluIEFyYmVpdCIKKyAgICB9LAorICAgICJTZXRJZCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBYmJyZWNoZW4iLAorICAgICAgICAiRGVsZXRlIjogIkzDtnNjaGVuIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlNldCBJZCBhbmQgTmFtZSI6ICJPYmpla3QgSUQgdW5kIE5hbWUgZWluZsO8Z2VuIgorICAgIH0sCisgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgIkNsb3NpbmdEb3VibGVRdW90ZXMiOiAi4oCcIiwKKyAgICAgICAgIkNsb3NpbmdTaW5nbGVRdW90ZSI6ICLigJgiLAorICAgICAgICAiQ29udmVydCBhbGwgcXVvdGVzIGFuZCBkYXNoZXMgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQiOiAiQWxsZSBBbmbDvGhydW5nc3plaWNoZW4gdW5kIEdlZGFua2Vuc3RyaWNoZSB1bXdhbmRlbG4iLAorICAgICAgICAiRW5hYmxlIGF1dG9tYXRpYyByZXBsYWNlbWVudHMiOiAiQXV0b21hdGlzY2hlIEVyc2V0enVuZyBha3RpdmllcmVuIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk9wZW5pbmdEb3VibGVRdW90ZXMiOiAi4oCeIiwKKyAgICAgICAgIk9wZW5pbmdTaW5nbGVRdW90ZSI6ICLigJoiLAorICAgICAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIlNtYXJ0UmVwbGFjZSBFaW5zdGVsbHVuZ2VuIgorICAgIH0sCisgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBYmJyZWNoZW4iLAorICAgICAgICAiRGljdGlvbmFyeSI6ICJXb2VydGVyYnVjaCIsCisgICAgICAgICJGaW5pc2hlZCBsaXN0IG9mIG1pc3BlbGxlZCB3b3JkcyI6ICJMaXN0ZSBkZXIgbmljaHQgYmVrYW5udGVuIFdvZXJ0ZXIiLAorICAgICAgICAiSSB3aWxsIG9wZW4gaXQgaW4gYSBuZXcgcGFnZS4iOiAiV2lyZCBhdWYgbmV1ZXIgU2VpdGUgZ2VvZWZmbmV0IiwKKyAgICAgICAgIklnbm9yZSI6ICJJZ25vcmllcmVuIiwKKyAgICAgICAgIklnbm9yZSBhbGwiOiAiQWxsZSBpZ25vcmllcmVuIiwKKyAgICAgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICJLZWluZSBmYWxzY2hlbiBXb2VydGVyIG1pdCBnZXdhZWhsdGVuIFdvZXJ0ZXJidWNoIGdlZnVuZGVuIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk9yaWdpbmFsIHdvcmQiOiAiT3JpZ2luYWwgV29ydCIsCisgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIldvbGxlbiBTaWUgZGllc2VuIExpbmsgb2VmZm5lbiIsCisgICAgICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiQml0dGUgd2FydGVuLiAgV29lcnRlcmJ1Y2ggd2lyZCBkdXJjaHN1Y2h0LiIsCisgICAgICAgICJQbGVhc2Ugd2FpdDogY2hhbmdpbmcgZGljdGlvbmFyeSB0byI6ICJCaXR0ZSB3YXJ0ZW46IFdvZXJ0ZXJidWNoIHdlY2hzZWxuIHp1IiwKKyAgICAgICAgIlJlLWNoZWNrIjogIk5ldXVlYmVycHJ1ZWZ1bmciLAorICAgICAgICAiUmVwbGFjZSI6ICJFcnNldHplbiIsCisgICAgICAgICJSZXBsYWNlIGFsbCI6ICJBbGxlIGVyc2V0emVuIiwKKyAgICAgICAgIlJlcGxhY2Ugd2l0aCI6ICJFcnNldHplbiBtaXQiLAorICAgICAgICAiU3BlbGwtY2hlY2siOiAiVWViZXJwcnVlZnVuZyIsCisgICAgICAgICJTdWdnZXN0aW9ucyI6ICJWb3JzY2hsYWciLAorICAgICAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIkFlbmRlcnVuZ2VuIHdlcmRlbiBuaWNodCB1ZWJlcm5vbW1lbi4gIEJpdHRlIGJlc3RhZXR0aWdlbi4iCisgICAgfSwKKyAgICAiU3R5bGlzdCI6IHsKKyAgICAgICAgIlN0eWxlcyI6ICJTdGlsZSIKKyAgICB9LAorICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgICAgICJDbGVhbiB1cCBIVE1MIjogIkhUTUwgc8OkdWJlcm4iLAorICAgICAgICAiR2VuZXJhbCB0aWR5IHVwIGFuZCBjb3JyZWN0aW9uIG9mIHNvbWUgcHJvYmxlbXMuIjogIkFsbGdlbWVpbmVzIGF1ZnLDpHVtZW4gdW5kIEtvcnJla3R1ciBlaW5pZ2VyIFByb2JsZW1lLiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQbGVhc2Ugc2VsZWN0IGZyb20gdGhlIGZvbGxvd2luZyBjbGVhbmluZyBvcHRpb25zLi4uIjogIkJpdHRlIE9wdGlvbmVuIGF1c3fDpGhsZW4uLi4iLAorICAgICAgICAiUGxlYXNlIHN0YW5kIGJ5IHdoaWxlIGNsZWFuaW5nIGluIHByb2Nlc3MuLi4iOiAiQml0dGUgd2FydGVuIFNpZSwgd8OkaHJlbmQgZGllIFPDpHViZXJ1bmcgbMOkdWZ0Li4uIiwKKyAgICAgICAgIlJlbW92ZSBjdXN0b20gZm9udCBzaXplcy4iOiAiU2NocmlmdGdyw7bDn2VuIGVudGZlcm5lbiAoZm9udCBzaXplKS4iLAorICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0ZXh0IGNvbG9ycy4iOiAiU2NocmlmdGZhcmJlbiBlbnRmZXJuZW4gKGZvbnQgY29sb3IpLiIsCisgICAgICAgICJSZW1vdmUgY3VzdG9tIHR5cGVmYWNlcyAoZm9udCBcInN0eWxlc1wiKS4iOiAiU2NocmlmdGFydGVuIGVudGZlcm5lbiAoZm9udCBmYWNlKS4iLAorICAgICAgICAiUmVtb3ZlIGxhbmcgYXR0cmlidXRlcy4iOiAiU3ByYWNoYXR0cmlidXRlIGVudGZlcm5lbi4iCisgICAgfSwKKyAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAiQWxsIGZvdXIgc2lkZXMiOiAiQWxsZSA0IFNlaXRlbiIsCisgICAgICAgICJCb3JkZXJzIjogIlJhaG1lbiIsCisgICAgICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAgICAgIkNhcHRpb24iOiAiw5xiZXJzY2hyaWZ0IiwKKyAgICAgICAgIkNlbGwgUHJvcGVydGllcyI6ICJaZWxsZW5vcHRpb25lbiIsCisgICAgICAgICJDZWxsIHByb3BlcnRpZXMiOiAiWmVsbGVub3B0aW9uZW4iLAorICAgICAgICAiRGVsZXRlIGNlbGwiOiAiWmVsbGUgbMO2c2NoZW4iLAorICAgICAgICAiRGVsZXRlIGNvbHVtbiI6ICJTcGFsdGUgbMO2c2NoZW4iLAorICAgICAgICAiRGVsZXRlIHJvdyI6ICJSZWloZSBsb2VzY2hlbiIsCisgICAgICAgICJEZXNjcmlwdGlvbiI6ICJCZXNjaHJlaWJ1bmciLAorICAgICAgICAiRnJhbWVzIjogIlJhaG1lbiIsCisgICAgICAgICJJbnNlcnQgY2VsbCBhZnRlciI6ICJaZWxsZSBlaW5mw7xnZW4gbmFjaCIsCisgICAgICAgICJJbnNlcnQgY2VsbCBiZWZvcmUiOiAiWmVsbGUgZWluZsO8Z2VuIHZvciIsCisgICAgICAgICJJbnNlcnQgY29sdW1uIGFmdGVyIjogIlNwYWx0ZSBlaW5mw7xnZW4gbmFjaCIsCisgICAgICAgICJJbnNlcnQgY29sdW1uIGJlZm9yZSI6ICJTcGFsdGUgZWluZsO8Z2VuIHZvciIsCisgICAgICAgICJJbnNlcnQgcm93IGFmdGVyIjogIlJlaWhlIGVpbmbDvGdlbiBuYWNoIiwKKyAgICAgICAgIkluc2VydCByb3cgYmVmb3JlIjogIlJlaWhlIGVpbmbDvGdlbiB2b3IiLAorICAgICAgICAiTWVyZ2UgY2VsbHMiOiAiWmVsbGVuIHp1c2FtbWVuZsO8Z2VuIiwKKyAgICAgICAgIk5vIHJ1bGVzIjogIktlaW5lIEdpdHRlcmxpbmllbiIsCisgICAgICAgICJObyBzaWRlcyI6ICJLZWluZSBSw6RuZGVyIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBhZGRpbmciOiAiSW5uZW5hYnN0YW5kIiwKKyAgICAgICAgIlBsZWFzZSBjbGljayBpbnRvIHNvbWUgY2VsbCI6ICJCaXR0ZSBlaW5lIFplbGxlIGF1c3fDpGhsZW4iLAorICAgICAgICAiUm93IFByb3BlcnRpZXMiOiAiWmVpbGVub3B0aW9uZW4iLAorICAgICAgICAiUm93IHByb3BlcnRpZXMiOiAiUmVpaGVuZWluc3RlbGx1bmdlbiIsCisgICAgICAgICJSb3dzIjogIlplaWxlbjoiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICJMaW5pZW4gendpc2NoZW4gWmVpbGVuIHVuZCBTcGFsdGVuIiwKKyAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gY29sdW1ucyBvbmx5IjogIkxpbmllbiB6d2lzY2hlbiBTcGFsdGVuIiwKKyAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogIkxpbmllbiB6d2lzY2hlbiAgWmVpbGVuIiwKKyAgICAgICAgIlNwYWNpbmciOiAiQWJzdGFuZCIsCisgICAgICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogIkFic3TDpG5kZSIsCisgICAgICAgICJTcGxpdCBjb2x1bW4iOiAiU3BhbHRlIHRlaWxlbiIsCisgICAgICAgICJTcGxpdCByb3ciOiAiUmVpaGVuIGF1ZnRlaWxlbiIsCisgICAgICAgICJTdW1tYXJ5IjogIlp1c2FtbWVuZmFzc3VuZyIsCisgICAgICAgICJUYWJsZSBQcm9wZXJ0aWVzIjogIlRhYmVsbGVub3B0aW9uZW4iLAorICAgICAgICAiVGFibGUgcHJvcGVydGllcyI6ICJUYWJlbGxlbm9wdGlvbmVuIiwKKyAgICAgICAgIlRoZSBib3R0b20gc2lkZSBvbmx5IjogIk51ciB1bnRlcmUgU2VpdGUiLAorICAgICAgICAiVGhlIGxlZnQtaGFuZCBzaWRlIG9ubHkiOiAiTnVyIGxpbmtlIFNlaXRlIiwKKyAgICAgICAgIlRoZSByaWdodCBhbmQgbGVmdCBzaWRlcyBvbmx5IjogIk51ciBsaW5rZSB1bmQgcmVjaHRlIFNlaXRlIiwKKyAgICAgICAgIlRoZSByaWdodC1oYW5kIHNpZGUgb25seSI6ICJOdXIgcmVjaHRlIFNlaXRlIiwKKyAgICAgICAgIlRoZSB0b3AgYW5kIGJvdHRvbSBzaWRlcyBvbmx5IjogIk51ciBvYmVyZSB1bmQgdW50ZXJlIFNlaXRlIiwKKyAgICAgICAgIlRoZSB0b3Agc2lkZSBvbmx5IjogIk51ciBvYmVyZSBTZWl0ZSIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiTGV0enRlIFplbGxlIGluIGRpZXNlciBaZWlsZSBrYW5uIG5pY2h0IGdlbMO2c2NodCB3ZXJkZW4iLAorICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICJMZXR6dGUgU3BhbHRlIGluIGRpZXNlciBUYWJlbGxlIGthbm4gbmljaHQgZ2Vsw7ZzY2h0IHdlcmRlbiIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIkxldHp0ZSBSZWloZSBpbiBkaWVzZXIgVGFiZWxsZSBrYW5uIG5pY2h0IGdlbMO2c2NodCB3ZXJkZW4iLAorICAgICAgICAicGl4ZWxzIjogIlBpeGVsIgorICAgIH0sCisgICAgIlRlbXBsYXRlIjogeworICAgICAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgICAgICJJbnNlcnQgdGVtcGxhdGUiOiAiVGVtcGxhdGUgZWluZsO8Z2VuIgorICAgIH0sCisgICAgIlVuRm9ybWF0IjogeworICAgICAgICAiQWxsIjogIkFsbGVzIiwKKyAgICAgICAgIkFsbCBIVE1MOiI6ICJHYW56ZXMgSFRNTDoiLAorICAgICAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgICAgICJDbGVhbmluZyBBcmVhIjogIlJlaW5pZ3VuZ3NiZXJlaWNoIiwKKyAgICAgICAgIkNsZWFuaW5nIG9wdGlvbnMiOiAiUmVpbmlndW5nc29wdGlvbmVuIiwKKyAgICAgICAgIkZvcm1hdHRpbmc6IjogIkZvcm1hdGllcnVuZzoiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUGFnZSBDbGVhbmVyIjogIlNlaXRlIGJlcmVpbmlnZW4iLAorICAgICAgICAiU2VsZWN0IHdoaWNoIHR5cGVzIG9mIGZvcm1hdHRpbmcgeW91IHdvdWxkIGxpa2UgdG8gcmVtb3ZlLiI6ICJXw6RobGVuIFNpZSBhdXMgd2VsY2hlIEZvcm1hdGllcnVuZ2VuIFNpZSBlbnRmZXJuZW4gd29sbGVuLiIsCisgICAgICAgICJTZWxlY3Rpb24iOiAiQXVzZ2V3w6RobHRlciBCZXJlaWNoIgorICAgIH0sCisgICAgIlhpbmhhIjogeworICAgICAgICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICImIzgyMTI7IEZvcm1hdCAmIzgyMTI7IiwKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIsOcYmVyIGRpZXNlbiBFZGl0b3IiLAorICAgICAgICAiQWRkcmVzcyI6ICJBZHJlc3NlIiwKKyAgICAgICAgIkJhY2tncm91bmQgQ29sb3IiOiAiSGluZGVyZ3J1bmRmYXJiZSIsCisgICAgICAgICJCb2xkIjogIkZldHQiLAorICAgICAgICAiQnVsbGV0ZWQgTGlzdCI6ICJBdWZ6w6RobHVuZ3NsaXN0ZSIsCisgICAgICAgICJDbGVhbiBjb250ZW50IHBhc3RlZCBmcm9tIFdvcmQiOiAiVm9uIFdvcmQgZWluZ2Vmw7xndGVyIFRleHQgYmVyZWluaWdlbiIsCisgICAgICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICJaZWljaGVuc2F0eiBGb3JtYXRpZXJ1bmdlbiBlbnRmZXJuZW4iLAorICAgICAgICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICJNU09mZmljZSBmaWx0ZXIiLAorICAgICAgICAiQ2xvc2UiOiAiU2NobGllw59lbiIsCisgICAgICAgICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIk9iamVrdCB3aXJkIGdlbmVyaWVydCIsCisgICAgICAgICJDb3B5IHNlbGVjdGlvbiI6ICJLb3BpZXJlbiIsCisgICAgICAgICJDcmVhdGUgU3RhdHVzYmFyIjogIlN0YXR1c2xlaXN0ZSB3aXJkIGdlbmVyaWVydCIsCisgICAgICAgICJDcmVhdGUgVG9vbGJhciI6ICJXZXJremV1Z2xlaXN0ZSB3aXJkIGdlbmVyaWVydCIsCisgICAgICAgICJDdXJyZW50IHN0eWxlIjogIkRlcnplaXRpZ2VyIFN0aWwiLAorICAgICAgICAiQ3V0IHNlbGVjdGlvbiI6ICJBdXNzY2huZWlkZW4iLAorICAgICAgICAiRGVjcmVhc2UgSW5kZW50IjogIkVpbnp1ZyB2ZXJrbGVpbmVybiIsCisgICAgICAgICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICJUZXh0cmljaHR1bmcgdm9uIExpbmtzIG5hY2ggUmVjaHRzIiwKKyAgICAgICAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIlRleHRyaWNodHVuZyB2b24gUmVjaHRzIG5hY2ggTGlua3MiLAorICAgICAgICAiRmluaXNoaW5nIjogIkxhZGVuIHdpcmQgYWJnZXNjaGxvc3NlbiIsCisgICAgICAgICJGb250IENvbG9yIjogIlNjaHJpZnRmYXJiZSIsCisgICAgICAgICJGb3JtYXR0ZWQiOiAiRm9ybWF0aWVydCIsCisgICAgICAgICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiWGluaGEgRnJhbWV3b3JrIHdpcmQgZ2VuZXJpZXJ0IiwKKyAgICAgICAgIkhlYWRpbmcgMSI6ICLDnGJlcnNjaHJpZnQgMSIsCisgICAgICAgICJIZWFkaW5nIDIiOiAiw5xiZXJzY2hyaWZ0IDIiLAorICAgICAgICAiSGVhZGluZyAzIjogIsOcYmVyc2NocmlmdCAzIiwKKyAgICAgICAgIkhlYWRpbmcgNCI6ICLDnGJlcnNjaHJpZnQgNCIsCisgICAgICAgICJIZWFkaW5nIDUiOiAiw5xiZXJzY2hyaWZ0IDUiLAorICAgICAgICAiSGVhZGluZyA2IjogIsOcYmVyc2NocmlmdCA2IiwKKyAgICAgICAgIkhlYWRpbmdzIjogIsOcYmVyc2NocmlmdCBUeXAgMSBiaXMgNiIsCisgICAgICAgICJIZWxwIHVzaW5nIGVkaXRvciI6ICJIaWxmZSIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiSG9yaXpvbnRhbGUgTGluaWUiLAorICAgICAgICAiSW5jcmVhc2UgSW5kZW50IjogIkVpbnp1ZyB2ZXJncsO2w59lcm4iLAorICAgICAgICAiSW5pdCBlZGl0b3Igc2l6ZSI6ICJHcsO2w59lIHdpcmQgYmVyZWNobmV0IiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICJUYWJlbGxlIGVpbmbDvGdlbiIsCisgICAgICAgICJJbnNlcnQgV2ViIExpbmsiOiAiSHlwZXJsaW5rIGVpbmbDvGdlbiIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIkJpbGQgZWluZsO8Z2VuL3ZlcsOkbmRlcm4iLAorICAgICAgICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICJFaW5mw7xnZW4vw5xiZXJzY2hyZWliZW4iLAorICAgICAgICAiSXRhbGljIjogIkt1cnNpdiIsCisgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICJaZW50cmllcnQiLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIkJsb2Nrc2F0eiIsCisgICAgICAgICJKdXN0aWZ5IExlZnQiOiAiTGlua3Niw7xuZGlnIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiUmVjaHRzYsO8bmRpZyIsCisgICAgICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiVGFzdGF0dXJrw7xyemVsIiwKKyAgICAgICAgIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ISI6ICJFZGl0b3Igd2lyZCBnZWxhZGVuLiBCaXR0ZSB3YXJ0ZW4gISIsCisgICAgICAgICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIjogIlBsdWdpbiAkcGx1Z2luIHdpcmQgZ2VsYWRlbiIsCisgICAgICAgICJOb3JtYWwiOiAiTm9ybWFsIChBYnNhdHopIiwKKyAgICAgICAgIk9yZGVyZWQgTGlzdCI6ICJOdW1tZXJpZXJ0ZSBMaXN0ZSIsCisgICAgICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJFaW5mw7xnZW4gYXVzIGRlciBad2lzY2hlbmFibGFnZSIsCisgICAgICAgICJQYXRoIjogIlBmYWQiLAorICAgICAgICAiUHJpbnQgZG9jdW1lbnQiOiAiRG9rdW1lbnQgYXVzZHJ1Y2tlbiIsCisgICAgICAgICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJXaWVkZXJob2xlbiIsCisgICAgICAgICJSZWdpc3RlciBwbHVnaW4gJHBsdWdpbiI6ICJQbHVnaW4gJHBsdWdpbiB3aXJkIHJlZ2lzdHJpZXJ0IiwKKyAgICAgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIkZvcm1hdGllcnVuZyBlbnRmZXJuZW4iLAorICAgICAgICAiU2F2ZSBhcyI6ICJzcGVpY2hlcm4gdW50ZXIiLAorICAgICAgICAiU2VsZWN0IGFsbCI6ICJBbGxlcyBtYXJraWVyZW4iLAorICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiU2V0emUgRm9ybWF0aWVydW5nIGF1ZiBBYnNhdHoiLAorICAgICAgICAiU3BsaXQgQmxvY2siOiAiQmxvY2sgdGVpbGVuIiwKKyAgICAgICAgIlN0cmlrZXRocm91Z2giOiAiRHVyY2hnZXN0cmljaGVuIiwKKyAgICAgICAgIlN1YnNjcmlwdCI6ICJUaWVmZ2VzdGVsbHQiLAorICAgICAgICAiU3VwZXJzY3JpcHQiOiAiSG9jaGdlc3RlbGx0IiwKKyAgICAgICAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICJEZXIgRWRpdG9yIHVudGVyc3TDvHR6dCBkaWUgZm9sZ2VuZGVuIGtvbWJpbmF0aW9uZW46IiwKKyAgICAgICAgIlRvZ2dsZSBCb3JkZXJzIjogIlRhYmVsbGVucsOkbmRlciBlaW4vYXVzYmxlbmRlbiIsCisgICAgICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiSFRNTCBRdWVsbHRleHQgZWluL2F1c3NjaGFsdGVuIiwKKyAgICAgICAgIlVuZGVybGluZSI6ICJVbnRlcnN0cmljaGVuIiwKKyAgICAgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlLDvGNrZ8OkbmdpZyIsCisgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIldvbGxlbiBzaWUgWmVpY2hlbnNhdHpmYXJiZW4gZW50ZmVybmVuIiwKKyAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIldvbGxlbiBTaWUgWmVpY2hlbnNhdHpncsO2w59lbiBlbnRmZXJuZW4iLAorICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogIldvbGxlbiBTaWUgWmVpY2hlbnNhdHp0eXBlbiBlbnRmZXJuZW4iLAorICAgICAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIlNpZSBzaW5kIGltIFRleHQtTW9kdXMuIEJlbnV0emVuIFNpZSBkZW4gWzw+XSBCdXR0b24sIHVtIGluIGRlbiB2aXN1ZWxsZW4gTW9kdXMgKFdZU0lXSUcpIHp1IGdlbGFuZ2VuLiIsCisgICAgICAgICJpbnNlcnQgbGluZWJyZWFrIjogIkhhcnRlciBVbWJydWNoIGVpbmbDvGdlbiIsCisgICAgICAgICJuZXcgcGFyYWdyYXBoIjogIk5ldWVyIEFic2F0eihQYXJhZ3JhcGgpIgorICAgIH0sCisgICAgIl9fTkVXX1RSQU5TTEFUSU9OU19fIjogeworICAgICAgICAiQ29udGV4dE1lbnUiOiB7CisgICAgICAgICAgICAiRGVsZXRlIENlbGwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDZWxsIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRlZmluaXRpb25MaXN0IjogeworICAgICAgICAgICAgImRlZmluaXRpb24gZGVzY3JpcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGxpc3QiOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIHRlcm0iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRGlhbG9ncyI6IHsKKyAgICAgICAgICAgICJTb21lIFRleHQgSGVyZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFZGl0VGFnIjogeworICAgICAgICAgICAgIkVkaXQgVGFnIEJ5IFBlZyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgICAgICIhPSI6ICIiLAorICAgICAgICAgICAgIiFpbiI6ICIiLAorICAgICAgICAgICAgIiZndDstIjogIiIsCisgICAgICAgICAgICAiJmd0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZsdDt4Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgIWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAuYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDBgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAzYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDRgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA2YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDdgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA5YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYGVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyZuYnNwO2AxYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgK3s6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC06XFwgYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Atezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgQ2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgY29zYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BsbmAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgcGlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BzaW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRhbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGltZXNgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJnF1b3Q7dGV4dCZxdW90OyI6ICIiLAorICAgICAgICAgICAgIicrZm9ybXVsYSsnIjogIiIsCisgICAgICAgICAgICAiKChuKSwoaykpIjogIiIsCisgICAgICAgICAgICAiKHgrMSkvKHgtMSkiOiAiIiwKKyAgICAgICAgICAgICIqIjogIiIsCisgICAgICAgICAgICAiKioiOiAiIiwKKyAgICAgICAgICAgICIrLSI6ICIiLAorICAgICAgICAgICAgIi0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiLSZsdDsiOiAiIiwKKyAgICAgICAgICAgICItOiI6ICIiLAorICAgICAgICAgICAgIi09IjogIiIsCisgICAgICAgICAgICAiLy8iOiAiIiwKKyAgICAgICAgICAgICIvXyI6ICIiLAorICAgICAgICAgICAgIjouIjogIiIsCisgICAgICAgICAgICAiPSZndDsiOiAiIiwKKyAgICAgICAgICAgICJAIjogIiIsCisgICAgICAgICAgICAiW1thLGJdLFtjLGRdXSI6ICIiLAorICAgICAgICAgICAgIlxcXFwiOiAiIiwKKyAgICAgICAgICAgICJcXG5DbGljayBpbiB0aGUgYm94IHRvIHVzZSB5b3VyIGtleWJvYXJkIG9yIHVzZSB0aGUgYnV0dG9uc1xcbiI6ICIiLAorICAgICAgICAgICAgIl5eIjogIiIsCisgICAgICAgICAgICAiXl5eIjogIiIsCisgICAgICAgICAgICAiX198IjogIiIsCisgICAgICAgICAgICAiX3xfIjogIiIsCisgICAgICAgICAgICAiYCE9YCI6ICIiLAorICAgICAgICAgICAgImAhaW5gIjogIiIsCisgICAgICAgICAgICAiYCZhbmQ7YCI6ICIiLAorICAgICAgICAgICAgImAmY2FwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmN1cDtgIjogIiIsCisgICAgICAgICAgICAiYCZndDstYCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0O3gmZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmb3I7YCI6ICIiLAorICAgICAgICAgICAgImAmcXVvdDt0ZXh0JnF1b3Q7YCI6ICIiLAorICAgICAgICAgICAgImAoKG4pLChrKSlgIjogIiIsCisgICAgICAgICAgICAiYCh4KzEpLyh4LTEpYCI6ICIiLAorICAgICAgICAgICAgImAqKmAiOiAiIiwKKyAgICAgICAgICAgICJgKmAiOiAiIiwKKyAgICAgICAgICAgICJgKy1gIjogIiIsCisgICAgICAgICAgICAiYC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAtJmx0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLTpgIjogIiIsCisgICAgICAgICAgICAiYC09YCI6ICIiLAorICAgICAgICAgICAgImAvL2AiOiAiIiwKKyAgICAgICAgICAgICJgL19gIjogIiIsCisgICAgICAgICAgICAiYDouYCI6ICIiLAorICAgICAgICAgICAgImA9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgQGAiOiAiIiwKKyAgICAgICAgICAgICJgW1thLGJdLFtjLGRdXWAiOiAiIiwKKyAgICAgICAgICAgICJgXFxcXGAiOiAiIiwKKyAgICAgICAgICAgICJgX198YCI6ICIiLAorICAgICAgICAgICAgImBffF9gIjogIiIsCisgICAgICAgICAgICAiYEFBYCI6ICIiLAorICAgICAgICAgICAgImBhbGVwaGAiOiAiIiwKKyAgICAgICAgICAgICJgYWxwaGFgIjogIiIsCisgICAgICAgICAgICAiYGFuZGAiOiAiIiwKKyAgICAgICAgICAgICJgYmFyYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiZXRhYCI6ICIiLAorICAgICAgICAgICAgImBDQ2AiOiAiIiwKKyAgICAgICAgICAgICJgY2NhYCI6ICIiLAorICAgICAgICAgICAgImBjaGlgIjogIiIsCisgICAgICAgICAgICAiYGRhcnJgIjogIiIsCisgICAgICAgICAgICAiYGRkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkZWxgIjogIiIsCisgICAgICAgICAgICAiYGRlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBEZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGlhbW9uZGAiOiAiIiwKKyAgICAgICAgICAgICJgZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZHkvZHhgIjogIiIsCisgICAgICAgICAgICAiYEVFYCI6ICIiLAorICAgICAgICAgICAgImBlcHNpYCI6ICIiLAorICAgICAgICAgICAgImBldGFgIjogIiIsCisgICAgICAgICAgICAiYGZyYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYEdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBncmFkYCI6ICIiLAorICAgICAgICAgICAgImBoYXJyYCI6ICIiLAorICAgICAgICAgICAgImBoQXJyYCI6ICIiLAorICAgICAgICAgICAgImBoYXRhYCI6ICIiLAorICAgICAgICAgICAgImBpZmAiOiAiIiwKKyAgICAgICAgICAgICJgaW5gIjogIiIsCisgICAgICAgICAgICAiYGludGAiOiAiIiwKKyAgICAgICAgICAgICJgaW90YWAiOiAiIiwKKyAgICAgICAgICAgICJga2FwcGFgIjogIiIsCisgICAgICAgICAgICAiYGxhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgTGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBsYXJyYCI6ICIiLAorICAgICAgICAgICAgImBsQXJyYCI6ICIiLAorICAgICAgICAgICAgImBsaW1fKHgtJmd0O29vKWAiOiAiIiwKKyAgICAgICAgICAgICJgbG9nYCI6ICIiLAorICAgICAgICAgICAgImBtdWAiOiAiIiwKKyAgICAgICAgICAgICJgTk5gIjogIiIsCisgICAgICAgICAgICAiYG5uYCI6ICIiLAorICAgICAgICAgICAgImBub3RgIjogIiIsCisgICAgICAgICAgICAiYG51YCI6ICIiLAorICAgICAgICAgICAgImBvK2AiOiAiIiwKKyAgICAgICAgICAgICJgby5gIjogIiIsCisgICAgICAgICAgICAiYE8vYCI6ICIiLAorICAgICAgICAgICAgImBvaW50YCI6ICIiLAorICAgICAgICAgICAgImBvbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgT21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYG9vYCI6ICIiLAorICAgICAgICAgICAgImBvcmAiOiAiIiwKKyAgICAgICAgICAgICJgb3hgIjogIiIsCisgICAgICAgICAgICAiYHBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGhpYCI6ICIiLAorICAgICAgICAgICAgImBQaWAiOiAiIiwKKyAgICAgICAgICAgICJgcGlgIjogIiIsCisgICAgICAgICAgICAiYHByb2RgIjogIiIsCisgICAgICAgICAgICAiYHByb3BgIjogIiIsCisgICAgICAgICAgICAiYHBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgUHNpYCI6ICIiLAorICAgICAgICAgICAgImBRUWAiOiAiIiwKKyAgICAgICAgICAgICJgcXVhZGAiOiAiIiwKKyAgICAgICAgICAgICJgckFycmAiOiAiIiwKKyAgICAgICAgICAgICJgcmhvYCI6ICIiLAorICAgICAgICAgICAgImByb290KG4pKHgpYCI6ICIiLAorICAgICAgICAgICAgImBSUmAiOiAiIiwKKyAgICAgICAgICAgICJgc2ZhYCI6ICIiLAorICAgICAgICAgICAgImBTaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgc2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYHNxcnQoeClgIjogIiIsCisgICAgICAgICAgICAiYHNxdWFyZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3RhY2tyZWwoLSZndDspKCspYCI6ICIiLAorICAgICAgICAgICAgImBzdWJgIjogIiIsCisgICAgICAgICAgICAiYHN1YmVgIjogIiIsCisgICAgICAgICAgICAiYHN1bWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwYCI6ICIiLAorICAgICAgICAgICAgImBzdXBlYCI6ICIiLAorICAgICAgICAgICAgImB0YXVgIjogIiIsCisgICAgICAgICAgICAiYHRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImBUaGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgVFRgIjogIiIsCisgICAgICAgICAgICAiYHR0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdWFycmAiOiAiIiwKKyAgICAgICAgICAgICJgdWxhYCI6ICIiLAorICAgICAgICAgICAgImB1cHNpbG9uYCI6ICIiLAorICAgICAgICAgICAgImB1dWAiOiAiIiwKKyAgICAgICAgICAgICJgdmVjYWAiOiAiIiwKKyAgICAgICAgICAgICJgdnZgIjogIiIsCisgICAgICAgICAgICAiYHhfKG1uKWAiOiAiIiwKKyAgICAgICAgICAgICJgWGlgIjogIiIsCisgICAgICAgICAgICAiYHhpYCI6ICIiLAorICAgICAgICAgICAgImB4eGAiOiAiIiwKKyAgICAgICAgICAgICJgemV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgWlpgIjogIiIsCisgICAgICAgICAgICAiYHwtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgfC0tYCI6ICIiLAorICAgICAgICAgICAgImB8PT1gIjogIiIsCisgICAgICAgICAgICAiYHxfX2AiOiAiIiwKKyAgICAgICAgICAgICJgfH5gIjogIiIsCisgICAgICAgICAgICAiYH49YCI6ICIiLAorICAgICAgICAgICAgImB+fGAiOiAiIiwKKyAgICAgICAgICAgICJgfn5gIjogIiIsCisgICAgICAgICAgICAiQUEiOiAiIiwKKyAgICAgICAgICAgICJhbGVwaCI6ICIiLAorICAgICAgICAgICAgImFscGhhIjogIiIsCisgICAgICAgICAgICAiYW5kIjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoTUwgRXhhbXBsZSI6ICIiLAorICAgICAgICAgICAgImJhcmEiOiAiIiwKKyAgICAgICAgICAgICJCYXNlZCBvbiBBU0NJSU1hdGhNTCBieSI6ICIiLAorICAgICAgICAgICAgImJiYSI6ICIiLAorICAgICAgICAgICAgImJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiZXRhIjogIiIsCisgICAgICAgICAgICAiQ0MiOiAiIiwKKyAgICAgICAgICAgICJjY2EiOiAiIiwKKyAgICAgICAgICAgICJjaGkiOiAiIiwKKyAgICAgICAgICAgICJkYXJyIjogIiIsCisgICAgICAgICAgICAiZGRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkZWwiOiAiIiwKKyAgICAgICAgICAgICJkZWx0YSI6ICIiLAorICAgICAgICAgICAgIkRlbHRhIjogIiIsCisgICAgICAgICAgICAiZGlhbW9uZCI6ICIiLAorICAgICAgICAgICAgImRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkeS9keCI6ICIiLAorICAgICAgICAgICAgIkVFIjogIiIsCisgICAgICAgICAgICAiZXBzaSI6ICIiLAorICAgICAgICAgICAgImV0YSI6ICIiLAorICAgICAgICAgICAgIkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFzY2lpTWF0aE1MIHZpc2l0IHRoaXMgcGFnZToiOiAiIiwKKyAgICAgICAgICAgICJmcmEiOiAiIiwKKyAgICAgICAgICAgICJnYW1tYSI6ICIiLAorICAgICAgICAgICAgIkdhbW1hIjogIiIsCisgICAgICAgICAgICAiZ3JhZCI6ICIiLAorICAgICAgICAgICAgImhhcnIiOiAiIiwKKyAgICAgICAgICAgICJoQXJyIjogIiIsCisgICAgICAgICAgICAiaGF0YSI6ICIiLAorICAgICAgICAgICAgImlmIjogIiIsCisgICAgICAgICAgICAiaW4iOiAiIiwKKyAgICAgICAgICAgICJpbnQiOiAiIiwKKyAgICAgICAgICAgICJpbnRfYV5iZih4KWR4IjogIiIsCisgICAgICAgICAgICAiaW90YSI6ICIiLAorICAgICAgICAgICAgImthcHBhIjogIiIsCisgICAgICAgICAgICAiTGFtYmRhIjogIiIsCisgICAgICAgICAgICAibGFtYmRhIjogIiIsCisgICAgICAgICAgICAibEFyciI6ICIiLAorICAgICAgICAgICAgImxhcnIiOiAiIiwKKyAgICAgICAgICAgICJsaW1fKHgtJmd0O29vKSI6ICIiLAorICAgICAgICAgICAgIm11IjogIiIsCisgICAgICAgICAgICAiTk4iOiAiIiwKKyAgICAgICAgICAgICJubiI6ICIiLAorICAgICAgICAgICAgIm5ubiI6ICIiLAorICAgICAgICAgICAgIm5vdCI6ICIiLAorICAgICAgICAgICAgIm51IjogIiIsCisgICAgICAgICAgICAibysiOiAiIiwKKyAgICAgICAgICAgICJvLiI6ICIiLAorICAgICAgICAgICAgIk8vIjogIiIsCisgICAgICAgICAgICAib2ludCI6ICIiLAorICAgICAgICAgICAgIk9tZWdhIjogIiIsCisgICAgICAgICAgICAib21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJvbyI6ICIiLAorICAgICAgICAgICAgIm9yIjogIiIsCisgICAgICAgICAgICAib3giOiAiIiwKKyAgICAgICAgICAgICJwaGkiOiAiIiwKKyAgICAgICAgICAgICJQaGkiOiAiIiwKKyAgICAgICAgICAgICJQaSI6ICIiLAorICAgICAgICAgICAgInBpIjogIiIsCisgICAgICAgICAgICAicHJvZCI6ICIiLAorICAgICAgICAgICAgInByb3AiOiAiIiwKKyAgICAgICAgICAgICJwc2kiOiAiIiwKKyAgICAgICAgICAgICJQc2kiOiAiIiwKKyAgICAgICAgICAgICJRUSI6ICIiLAorICAgICAgICAgICAgInF1YWQiOiAiIiwKKyAgICAgICAgICAgICJyQXJyIjogIiIsCisgICAgICAgICAgICAicmhvIjogIiIsCisgICAgICAgICAgICAicm9vdChuKSh4KSI6ICIiLAorICAgICAgICAgICAgIlJSIjogIiIsCisgICAgICAgICAgICAic2ZhIjogIiIsCisgICAgICAgICAgICAiU2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJzaWdtYSI6ICIiLAorICAgICAgICAgICAgInNxcnQoeCkiOiAiIiwKKyAgICAgICAgICAgICJzcXVhcmUiOiAiIiwKKyAgICAgICAgICAgICJzdGFja3JlbCgtJmd0OykoKykiOiAiIiwKKyAgICAgICAgICAgICJzdWIiOiAiIiwKKyAgICAgICAgICAgICJzdWJlIjogIiIsCisgICAgICAgICAgICAic3VtIjogIiIsCisgICAgICAgICAgICAic3VtXyhuPTEpXm9vIjogIiIsCisgICAgICAgICAgICAic3VwIjogIiIsCisgICAgICAgICAgICAic3VwZSI6ICIiLAorICAgICAgICAgICAgInRhdSI6ICIiLAorICAgICAgICAgICAgInRoZXRhIjogIiIsCisgICAgICAgICAgICAiVGhldGEiOiAiIiwKKyAgICAgICAgICAgICJUVCI6ICIiLAorICAgICAgICAgICAgInR0YSI6ICIiLAorICAgICAgICAgICAgInVhcnIiOiAiIiwKKyAgICAgICAgICAgICJ1bGEiOiAiIiwKKyAgICAgICAgICAgICJ1cHNpbG9uIjogIiIsCisgICAgICAgICAgICAidXUiOiAiIiwKKyAgICAgICAgICAgICJ1dXUiOiAiIiwKKyAgICAgICAgICAgICJ2ZWNhIjogIiIsCisgICAgICAgICAgICAidnYiOiAiIiwKKyAgICAgICAgICAgICJ2dnYiOiAiIiwKKyAgICAgICAgICAgICJ4XihtK24pIjogIiIsCisgICAgICAgICAgICAieF8obW4pIjogIiIsCisgICAgICAgICAgICAiWGkiOiAiIiwKKyAgICAgICAgICAgICJ4aSI6ICIiLAorICAgICAgICAgICAgInh4IjogIiIsCisgICAgICAgICAgICAiemV0YSI6ICIiLAorICAgICAgICAgICAgIlpaIjogIiIsCisgICAgICAgICAgICAifC0mZ3Q7IjogIiIsCisgICAgICAgICAgICAifC0tIjogIiIsCisgICAgICAgICAgICAifD09IjogIiIsCisgICAgICAgICAgICAifF9fIjogIiIsCisgICAgICAgICAgICAifH4iOiAiIiwKKyAgICAgICAgICAgICJ+PSI6ICIiLAorICAgICAgICAgICAgIn58IjogIiIsCisgICAgICAgICAgICAifn4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmFuY3lTZWxlY3RzIjogeworICAgICAgICAgICAgIicrb3B0LnRleHQrJyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGaW5kUmVwbGFjZSI6IHsKKyAgICAgICAgICAgICInO1xyXG4gIHZhciB0YWdjID0gJyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGb3JtT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJFbnRlciB0aGUgbmFtZSBmb3IgbmV3IG9wdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIk1lc3NhZ2UgU2VudCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBTZWxlY3QuLi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybXMiOiB7CisgICAgICAgICAgICAiJ29uQ2xpY2snPSI6ICIiLAorICAgICAgICAgICAgIkFjY2VzcyBLZXk6IjogIiIsCisgICAgICAgICAgICAiQWN0aW9uIFVSTDoiOiAiIiwKKyAgICAgICAgICAgICJCdXR0b24gU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiQ2hlY2tlZCI6ICIiLAorICAgICAgICAgICAgIkNvbHVtbnM6IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCB0ZXh0IChvcHRpb25hbCkiOiAiIiwKKyAgICAgICAgICAgICJEaW1lbnNpb25zIjogIiIsCisgICAgICAgICAgICAiRGlzYWJsZWQiOiAiIiwKKyAgICAgICAgICAgICJFbmNvZGluZzoiOiAiIiwKKyAgICAgICAgICAgICJGb3IgQ29udHJvbDoiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBGSUVMRFNFVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IExBQkVMIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBTRUxFQ1QiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiRm9ybSBoYW5kbGVyIHNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJHZXQiOiAiIiwKKyAgICAgICAgICAgICJIYXJkIjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0IGluIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiSFRNTC1Gb3JtIHRvIENHSSAoZGVmYXVsdCkiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBzb3VyY2UiOiAiIiwKKyAgICAgICAgICAgICJJbml0aWFsIFRleHQ6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBGSUVMRFNFVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBJTlBVVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBTRUxFQ1QiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgVEVYVEFSRUEiOiAiIiwKKyAgICAgICAgICAgICJKYXZhc2NyaXB0IGZvciBidXR0b24gY2xpY2siOiAiIiwKKyAgICAgICAgICAgICJMYWJlbDoiOiAiIiwKKyAgICAgICAgICAgICJMZWdlbmQ6IjogIiIsCisgICAgICAgICAgICAiTWF4IGxlbmd0aDoiOiAiIiwKKyAgICAgICAgICAgICJNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjY2VwdGVkIjogIiIsCisgICAgICAgICAgICAiTWV0aG9kOiI6ICIiLAorICAgICAgICAgICAgIm11bHRpcGFydCBGb3JtIERhdGEgKEZpbGUtVXBsb2FkKSI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIm5hbWUgb2YgdGhlIHRleHRhcmVhIjogIiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiIiwKKyAgICAgICAgICAgICJub3JtYWwiOiAiIiwKKyAgICAgICAgICAgICJub3dyYXAiOiAiIiwKKyAgICAgICAgICAgICJPZmYiOiAiIiwKKyAgICAgICAgICAgICJQaHlzaWNhbCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciBhIExhYmVsIjogIiIsCisgICAgICAgICAgICAiUG9zdCI6ICIiLAorICAgICAgICAgICAgInByZSI6ICIiLAorICAgICAgICAgICAgIlJlYWQgT25seSI6ICIiLAorICAgICAgICAgICAgIlNpemUgb2YgdGV4dCBib3ggaW4gY2hhcmFjdGVycyI6ICIiLAorICAgICAgICAgICAgIlNvZnQiOiAiIiwKKyAgICAgICAgICAgICJUYWIgSW5kZXg6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IEZyYW1lOiI6ICIiLAorICAgICAgICAgICAgIlVSTCBvZiBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlZhbHVlIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiVmFsdWU6IjogIiIsCisgICAgICAgICAgICAiVmlydHVhbCI6ICIiLAorICAgICAgICAgICAgIldpZHRoIGluIG51bWJlciBvZiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiV3JhcCBNb2RlOiI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgTmFtZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgICAgICIuLi4iOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoSVNPLTg4NTktNSkiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoS09JOC1SKSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChXSU5ET1dTLTEyNTEpIjogIiIsCisgICAgICAgICAgICAid2VzdGVybiAoSVNPLTg4NTktMSkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiR2Vja28iOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAgICAgIiYjeDAwZDc7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgSG9yaXpvbnRhbCBSdWxlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgICAgICJDU1MgU3R5bGUiOiAiIiwKKyAgICAgICAgICAgICItIjogIjw8RXF1YXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGZvb3Rub3RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IE5vdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGFnZWJyZWFrIjogeworICAgICAgICAgICAgIlBhZ2UgQnJlYWsiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgICAgICJcXG4gIFRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nXFxuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMSI6ICIiLAorICAgICAgICAgICAgIkxpbmsyIjogIiIsCisgICAgICAgICAgICAiTGluazMiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNCI6ICIiLAorICAgICAgICAgICAgIkxpbms1IjogIiIsCisgICAgICAgICAgICAiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmciOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldDIiOiB7CisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgICAgICJDYXB0aW9uIGZvciB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZSBib3JkZXJzOiI6ICIiLAorICAgICAgICAgICAgIkxheW91IjogIiIsCisgICAgICAgICAgICAiU3R5bGUgb2YgdGhlIGJvcmRlciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJMYW5nTWFya3MiOiB7CisgICAgICAgICAgICAiJywgJyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJMaW5rZXIiOiB7CisgICAgICAgICAgICAiKHB4KSI6ICIiLAorICAgICAgICAgICAgIkFuY2hvci1MaW5rIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yOiI6ICIiLAorICAgICAgICAgICAgIkxvY2F0aW9uIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZW51IEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJQb3B1cFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZWFibGU6IjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsYmFyczoiOiAiIiwKKyAgICAgICAgICAgICJTaG93cyBPbiBIb3ZlciI6ICIiLAorICAgICAgICAgICAgIlN0YXR1cyBCYXI6IjogIiIsCisgICAgICAgICAgICAiVGl0bGU6IjogIiIsCisgICAgICAgICAgICAiVG9vbGJhcjoiOiAiIgorICAgICAgICB9LAorICAgICAgICAiT3BlcmEiOiB7CisgICAgICAgICAgICAiTUFSSyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQcmVzZXJ2ZVNjcmlwdHMiOiB7CisgICAgICAgICAgICAiSmF2YVNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIlBIUCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgICAgICInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnY2wnOiAnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNldElkIjogeworICAgICAgICAgICAgIklEL05hbWU6IjogIiIsCisgICAgICAgICAgICAiU2V0IElkL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSUQvTmFtZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBTZWxlY3Rpb24gT25seSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIFNjb3BlIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsaWdubWVudCAobGVmdC9yaWdodC9qdXN0aWZ5KS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxsIGNsYXNzZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIEFsbCBIVE1MIFRhZ3MiOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxsIHN0eWxlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZW1waGFzaXMgYW5kIGFubm90YXRpb25zLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBQYXJhZ3JhcGhzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cy4iOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzIHdpdGggbm9uLWRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzLiI6ICIiLAorICAgICAgICAgICAgIlZpZ29yb3VzbHkgcHVyZ2UgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiQ2VsbCBUeXBlOiI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIGRvd24iOiAiIiwKKyAgICAgICAgICAgICJDZWxscyB0byB0aGUgcmlnaHQsIGFuZCI6ICIiLAorICAgICAgICAgICAgIkRvIE5vdCBDaGFuZ2UiOiAiIiwKKyAgICAgICAgICAgICJGcmFtZSBhbmQgYm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkhlYWRlciAodGgpIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY3VycmVudCBjZWxsIHdpdGg6IjogIiIsCisgICAgICAgICAgICAiTm9ybWFsICh0ZCkiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiPDxDb250ZXh0TWVudT4+IgorICAgICAgICB9LAorICAgICAgICAiVW5zYXZlZENoYW5nZXMiOiB7CisgICAgICAgICAgICAiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBlZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiV2ViS2l0IjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICI8PEdlY2tvPj4iCisgICAgICAgIH0sCisgICAgICAgICJYaW5oYSI6IHsKKyAgICAgICAgICAgICImIzgyMTI7IGZvbnQgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIiYjODIxMjsgc2l6ZSAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiMSAoOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIyICgxMCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIzICgxMiBwdCkiOiAiIiwKKyAgICAgICAgICAgICI0ICgxNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI1ICgxOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI2ICgyNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI3ICgzNiBwdCkiOiAiIiwKKyAgICAgICAgICAgICJBcmlhbCI6ICIiLAorICAgICAgICAgICAgIkNvdXJpZXIgTmV3IjogIiIsCisgICAgICAgICAgICAiQ1RSTC0wICh6ZXJvKSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMSAuLiBDVFJMLTYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUEiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUoiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUwiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLU4iOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVgiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVoiOiAiIiwKKyAgICAgICAgICAgICJFZGl0b3IgSGVscCI6ICIiLAorICAgICAgICAgICAgIkVOVEVSIjogIiIsCisgICAgICAgICAgICAiRXJyb3IgTG9hZGluZyBYaW5oYS4gIERldmVsb3BlcnMsIGNoZWNrIHRoZSBFcnJvciBDb25zb2xlIGZvciBpbmZvcm1hdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJHZW9yZ2lhIjogIiIsCisgICAgICAgICAgICAiSW1wYWN0IjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBDb3JlIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW5zIjogIiIsCisgICAgICAgICAgICAiTVMgV29yZCBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IENvbG9yIjogIiIsCisgICAgICAgICAgICAiU0hJRlQtRU5URVIiOiAiIiwKKyAgICAgICAgICAgICJUYWhvbWEiOiAiIiwKKyAgICAgICAgICAgICJUaW1lcyBOZXcgUm9tYW4iOiAiIiwKKyAgICAgICAgICAgICJUb3VjaCBoZXJlIGZpcnN0IHRvIGFjdGl2YXRlIGVkaXRvci4iOiAiIiwKKyAgICAgICAgICAgICJWZXJkYW5hIjogIiIsCisgICAgICAgICAgICAiV2FpdGluZyBmb3IgSWZyYW1lIHRvIGxvYWQuLi4iOiAiIiwKKyAgICAgICAgICAgICJXaW5nRGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiU2V0IEJhY2tncm91bmQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTAlIjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICIiLAorICAgICAgICAgICAgIjIwMCUiOiAiIiwKKyAgICAgICAgICAgICIyNSUiOiAiIiwKKyAgICAgICAgICAgICI1MCUiOiAiIiwKKyAgICAgICAgICAgICI3NSUiOiAiIiwKKyAgICAgICAgICAgICI+TGlzdCBWaWV3IjogIiIsCisgICAgICAgICAgICAiPlRodW1ibmFpbCBWaWV3IjogIiIsCisgICAgICAgICAgICAiQToiOiAiIiwKKyAgICAgICAgICAgICJEOiI6ICIiLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciI6ICIiLAorICAgICAgICAgICAgIkdJRiI6ICIiLAorICAgICAgICAgICAgIkg6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBmb2xkZXIgc2l6ZSBsaW1pdCByZWFjaGVkLiBVcGxvYWQgZGlzYWJsZWQuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHZhbHVlIjogIiIsCisgICAgICAgICAgICAiUE5HIjogIiIsCisgICAgICAgICAgICAiUHJlc2V0IjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiIiwKKyAgICAgICAgICAgICJYOiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIEltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlk6IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkh0bWxUaWR5IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQXV0by1UaWR5IjogIiIsCisgICAgICAgICAgICAiRG9uJ3QgVGlkeSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlcyI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgVXNlcm5hbWUvRW1haWwiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZCI6ICIiLAorICAgICAgICAgICAgIk5vIFBob3RvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFZpZGVvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgU2VydmVyIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFVzZXJuYW1lIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlbyBMaXN0IjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlb3MiOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkdJRiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJQTkciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIjogIiIsCisgICAgICAgICAgICAiQ29udGludW91cyI6ICIiLAorICAgICAgICAgICAgIk1hcnF1ZWUgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIEFtb3VudDoiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgRGVsYXk6IjogIiIsCisgICAgICAgICAgICAiU2xpZGUiOiAiIiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICI8PEZvcm1zPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm90IGRlZmluZWQiOiAiIiwKKyAgICAgICAgICAgICIgT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIgorICAgICAgICB9LAorICAgICAgICAiTm90ZVNlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTIwJSI6ICIiLAorICAgICAgICAgICAgIjE1MCUiOiAiIiwKKyAgICAgICAgICAgICI4MCUiOiAiIiwKKyAgICAgICAgICAgICJHVUlETyBDb2RlIjogIiIsCisgICAgICAgICAgICAiV2l0aCBNb3ppbGxhLCB0aGUgYXBwbGV0IHdpbGwgbm90IGJlIHZpc2libGUgaW4gZWRpdG9yLCBidXQgb25seSBpbiBXZWIgcGFnZSBhZnRlciBzdWJtaXR0aW5nLiI6ICIiLAorICAgICAgICAgICAgIlpvb20gOiI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJQU0xvY2FsIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNMT0NBTCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJDb25maXJtIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIEdlYXJzIGluIG9yZGVyIHRvIHVzZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlIGFuZCBjb25maWd1cmF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkVuYWJsaW5nIExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJJbnN0YWxsIjogIiIsCisgICAgICAgICAgICAiTGVhcm4gQWJvdXQgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCByZWxvYWQgdGhlIHBhZ2UsIGNhdXNpbmcgeW91IHRvIGxvc2UgYW55IHVuc2F2ZWQgd29yay4gIFByZXNzIFwiT0tcIiB0byByZWxvYWQuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgdXNlcyBHb29nbGUgR2VhcnMgdG8gZW5hYmxlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UuICBXaXRoIEdlYXJzIGluc3RhbGxlZCwgeW91IGNhbiBzYXZlIGRyYWZ0cyBvZiB5b3VyIGRvY3VtZW50cyBvbiB5b3VyIGhhcmQgZHJpdmUsIGNvbmZpZ3VyZSBYaW5oYSB0byBsb29rIHRoZSB3YXkgeW91IHdhbnQsIGFuZCBjYXJyeSB0aGlzIGluZm9ybWF0aW9uIHdoZXJldmVyIHlvdSB1c2UgWGluaGEgb24gdGhlIHdlYi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiUFNTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU1NFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWxlOiAiOiAiIiwKKyAgICAgICAgICAgICJJbXBvcnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEZXRhaWxzIjogIiIsCisgICAgICAgICAgICAiRmlsZSBCcm93c2VyIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gICAgVGhlcmUgQyAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgVGhlcmUgQSAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyBcIiBUaGVyZSBCIFwiIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gJyBUaGVyZSBEICciOiAiIiwKKyAgICAgICAgICAgICJMaXN0IG9mIFBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIk5ldyBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIk9wZW4iOiAiIiwKKyAgICAgICAgICAgICJPcGVuIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgeW91J2QgbGlrZSB0byBjcmVhdGUuIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBlcmFzZSBhbnkgdW5zYXZlZCBjb250ZW50LiAgSWYgeW91J3JlIGNlcnRhaW4sIHBsZWFzZSBjbGljayBPSyB0byBjb250aW51ZS4iOiAiIiwKKyAgICAgICAgICAgICJXZWIgVVJMIjogIiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICI8PFBTTG9jYWw+PiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQiOiAiPDxJbnNlcnROb3RlPj4iCisgICAgICAgIH0sCisgICAgICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBTUEVMTENIRUNLRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiSFRNTEFyZWEgU3BlbGwgQ2hlY2tlciI6ICIiLAorICAgICAgICAgICAgIkluZm8iOiAiIiwKKyAgICAgICAgICAgICJMZWFybiI6ICIiLAorICAgICAgICAgICAgInBsaXogd2VpdCA7LSkiOiAiIiwKKyAgICAgICAgICAgICJSZXZlcnQiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVja2VyIjogIiIKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9lZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2VlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZDA4NzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9lZS5qcwpAQCAtMCwwICsxLDE1NzMgQEAKKy8vIFhpbmhhIExhbmd1YWdlIENvbWJpbmVkIFRyYW5zbGF0aW9uIEZpbGUKKy8vCisvLyBMQU5HOiAiZWUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTlNUUlVDVElPTlMgVE8gVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFlvdXIgdHJhbnNsYXRpb24gbXVzdCBiZSBpbiBVVEYtOCBDaGFyYWN0ZXIgRW5jb2RpbmcuCisvLworLy8gVGhpcyBpcyBhIEpTT04gZW5jb2RlZCBmaWxlIChwbHVzIGNvbW1lbnRzKSwgc3RyaW5ncyBzaG91bGQgYmUgZG91YmxlLXF1b3RlCisvLyBvbmx5LCBkbyBub3QgdXNlIHNpbmdsZSBxdW90ZXMgdG8gc3Vycm91bmQgc3RyaW5ncyAtICJoZWxsbyIsIG5vdCAnaGVsbG8nCisvLyBkbyBub3QgaGF2ZSBhIHRyYWlsaW5nIGNvbW1hIGFmdGVyIHRoZSBsYXN0IGVudHJ5IGluIGEgc2VjdGlvbi4KKy8vCisvLyBPbmx5IGZ1bGwgbGluZSBjb21tZW50cyBhcmUgYWxsb3dlZCAodGhhdCBhIGNvbW1lbnRzIG9jY3VweSBlbnRpcmUgbGluZXMpLgorLy8KKy8vIFNlYXJjaCBmb3IgdGhlIF9fTkVXX1RSQU5TTEFUSU9OU19fIHNlY3Rpb24gYmVsb3csIHRoaXMgaXMgd2hlcmUgeW91IHdpbGwKKy8vIHdhbnQgdG8gZm9jdXMsIHRoaXMgc2VjdGlvbiBpbmNsdWRlcyB0aGluZ3MgdGhhdCBkbyBub3QgcHJlc2VudGx5IGhhdmUgYSAKKy8vIHRyYW5zbGF0aW9uIG9yIGZvciB3aGljaCB0aGUgdHJhbnNsYXRpb24gbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgYWNjdXJhY3kuCisvLworLy8gSW4gdGhlIE5ldyBUcmFuc2xhdGlvbnMgc2VjdGlvbiBhIHRyYW5zbGF0aW9uIHN0cmluZyBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZworLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiIgorLy8gICAgIFRoaXMgbWVhbnMgaXQgaXMgbm90IHRyYW5zbGF0ZWQgeWV0LCBhZGQgeW91ciB0cmFuc2xhdGlvbi4uLgorLy8gICAgICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJLbGluZ29uIFN0cmluZyBIZXJlIgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiVHJhbnNsYXRlZCBTdHJpbmcgSGVyZSIKKy8vICAgICBUaGlzIG1lYW5zIHRoYXQgYW4gZXhpc3RpbmcgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nLCBpbiBzb21lIG90aGVyCisvLyAgICAgc2VjdGlvbiBoYXMgYmVlbiBmb3VuZCwgYW5kIHVzZWQuICBDaGVjayB0aGF0IGl0IGlzIGFwcHJvcHJpdGUgZm9yIHRoaXMKKy8vICAgICBzZWN0aW9uIGFuZCBpZiBpdCBpcywgdGhhdCdzIGZpbmUgbGVhdmUgaXQgYXMgaXMsIG90aGVyd2lzZSBjaGFuZ2UgYXMKKy8vICAgICBhcHByb3ByaWF0ZS4KKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIjw8QW5vdGhlclNlY3Rpb24+PiIKKy8vICAgICBUaGlzIG1lYW5zIHVzZSB0aGUgc2FtZSB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcgYXMgPDxBbm90aGVyU2VjdGlvbj4+CisvLyAgICAgdGhpcyBzYXZlcyB5b3UgcmUtdHJhbmxhdGluZyBzdHJpbmdzLiAgSWYgdGhlIENvbnRleHQgb2YgdGhpcyBzZWN0aW9uCisvLyAgICAgYW5kIHRoZSBjb250ZXh0IG9mIEFub3RoZXJTZWN0aW9uIHNlZW0gdGhlIHNhbWUsIHRoYXQncyBmaW5lIGxlYXZlIGl0CisvLyAgICAgdXNpbmcgdGhhdCB0cmFuc2xhdGlvbiwgYnV0IGlmIHRoaXMgc2VjdGlvbiBuZWVkcyBhIGRpZmZlcmVudCB0cmFuc2xhdGlvbiwgCisvLyAgICAgeW91IGNhbiBwcm92aWRlIGl0IGJ5IHJlcGxhY2luZyB0aGUgbGluayAoPDxBbm90aGVyU2VjdGlvbj4+KSB3aXRoIHRoYXQKKy8vICAgICBuZXcgdHJhbnNsYXRpb24uICBGb3IgZXhhbXBsZSAtIGEgIlRhYmxlIiBpbiBzYXkgIkRhdGFQbHVnaW4iIGlzIAorLy8gICAgIHBlcmhhcHMgdHJhbnNsYXRlZCBkaWZmZXJlbnRseSB0byAiVGFibGUiIGluICJGdXJuaXR1cmVQbHVnaW4iLgorLy8KKy8vIFRFU1RJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgcGxhY2UgeW91ciB0cmFuc2xhdGlvbiBmaWxlIG9uIHlvdXIgd2Vic2VydmVyIHNvbWV3aGVyZSBmb3IgZXhhbXBsZQorLy8KKy8vICAgL3hpbmhhL2xhbmcvbWVyZ2VkL2VlLmpzCisvLworLy8gYW5kIHRoZW4gdGVsbCBYaW5oYSB3aGVyZSB0byBnZXQgaXQgKGJlZm9yZSBsb2FkaW5nIFhpbmhhQ29yZS5qcykgYnkgCisvLworLy8gIF9lZGl0b3JfbGFuZyAgICAgICAgICAgICAgPSAnZWUnOworLy8gIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSAgPSAnL3hpbmhhL2xhbmcvbWVyZ2VkL2VlLmpzJzsKKy8vCisvLyBYaW5oYSB3aWxsIGxvYWQgeW91ciBuZXcgbGFuZ3VhZ2UgZGVmaW5pdGlvbi4KKy8vCisvLyBTVUJNSVRUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IGNyZWF0ZSBhIFRpY2tldCBvbiB0aGUgWGluaGEgd2Vic2l0ZSBhbmQgYXR0YWNoIHlvdXIgdHJhbnNsYXRpb24gCisvLyBmaWxlLgorLy8KKy8vIFRoZSBYaW5oYSBkZXZlbG9wZXJzIHdpbGwgdGFrZSB5b3VyIGZpbGUgYW5kIHVzZSB0aGUgCisvLyAgICAgY29udHJpYi9sY19zcGxpdF9tZXJnZWRfZmlsZS5waHAKKy8vIHNjcmlwdCB0byBsb2FkIGl0IGludG8gdGhlIFhpbmhhIGRpc3RyaWJ1dGlvbi4KKworeworICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAiTG9vYnUiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiQWJvdXRCb3giOiB7CisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJUZWF2ZSB0b2ltZXRpIGtvaHRhIgorICAgIH0sCisgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJMb29idSIKKyAgICB9LAorICAgICJDb2xvclBpY2tlciI6IHsKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiSm9vbmRhIGtlc2tlbGUiLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIlLDtsO2cGpvb25kYSIsCisgICAgICAgICJKdXN0aWZ5IExlZnQiOiAiSm9vbmRhIHZhc2FrdWxlIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiSm9vbmRhIHBhcmVtYWxlIgorICAgIH0sCisgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICJDYW5jZWwiOiAiTG9vYnUiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJMb29idSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJMb29idSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJFeHRlbmRlZEZpbGVNYW5hZ2VyIjogeworICAgICAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkZvcm1zIjogeworICAgICAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkZ1bGxQYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICJIb3Jpc29udGFhbGpvb24iLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJMb29idSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJMb29idSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiTG9vYnUiCisgICAgfSwKKyAgICAiSW5zZXJ0UGljdHVyZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJMb29idSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0IjogeworICAgICAgICAiQ2FuY2VsIjogIkxvb2J1IgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAiQ2FuY2VsIjogIkxvb2J1IgorICAgIH0sCisgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICJMaXNhIHRhYmVsIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkxpbmtlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJMb29idSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICJDYW5jZWwiOiAiTG9vYnUiCisgICAgfSwKKyAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIkxvb2J1IgorICAgIH0sCisgICAgIlF1aWNrVGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIkxvb2J1IgorICAgIH0sCisgICAgIlNldElkIjogeworICAgICAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJMb29idSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlRhYmxlT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJMb29idSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJMb29idSIKKyAgICB9LAorICAgICJVbkZvcm1hdCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJMb29idSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJYaW5oYSI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIlRlYXZlIHRvaW1ldGkga29odGEiLAorICAgICAgICAiQmFja2dyb3VuZCBDb2xvciI6ICJUYXVzdGEgdsOkcnYiLAorICAgICAgICAiQm9sZCI6ICJQYWtzIiwKKyAgICAgICAgIkJ1bGxldGVkIExpc3QiOiAiVMOkcHBsb2VuZCIsCisgICAgICAgICJDb3B5IHNlbGVjdGlvbiI6ICJLb3BlZXJpIiwKKyAgICAgICAgIkN1cnJlbnQgc3R5bGUiOiAiS2lyamFzdGlpbCIsCisgICAgICAgICJDdXQgc2VsZWN0aW9uIjogIkzDtWlrYSIsCisgICAgICAgICJEZWNyZWFzZSBJbmRlbnQiOiAiVsOkaGVuZGEgdGFhbmV0IiwKKyAgICAgICAgIkZvbnQgQ29sb3IiOiAiRm9uZGkgdsOkcnYiLAorICAgICAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiU3Bpa2tlciIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiSG9yaXNvbnRhYWxqb29uIiwKKyAgICAgICAgIkluY3JlYXNlIEluZGVudCI6ICJTdXVyZW5kYSB0YWFuZXQiLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIkxpc2EgdGFiZWwiLAorICAgICAgICAiSW5zZXJ0IFdlYiBMaW5rIjogIkxpc2EgdmlpdCIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIkxpc2EgcGlsdCIsCisgICAgICAgICJJdGFsaWMiOiAiS3Vyc2lpdiIsCisgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICJKb29uZGEga2Vza2VsZSIsCisgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAiUsO2w7Zwam9vbmRhIiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICJKb29uZGEgdmFzYWt1bGUiLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICJKb29uZGEgcGFyZW1hbGUiLAorICAgICAgICAiT3JkZXJlZCBMaXN0IjogIk51bW1lcmR1cyIsCisgICAgICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJLbGVlYmkiLAorICAgICAgICAiUGF0aCI6ICJQYXRoIiwKKyAgICAgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlRlZSB1dWVzdGkiLAorICAgICAgICAiU3RyaWtldGhyb3VnaCI6ICJMw6RiaWtyaWlwc3V0YXR1ZCIsCisgICAgICAgICJTdWJzY3JpcHQiOiAiQWxsaW5kZWtzIiwKKyAgICAgICAgIlN1cGVyc2NyaXB0IjogIsOcbGFpbmRla3MiLAorICAgICAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIkhUTUwvdGF2YWxpbmUgdmFhZGUiLAorICAgICAgICAiVW5kZXJsaW5lIjogIkFsbGFrcmlpcHN1dGF0dWQiLAorICAgICAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiVsO1dGEgdGFnYXNpIiwKKyAgICAgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJTYSBvbGVkIHRla3N0aXJlemlpbWlzLiAgS2FzdXRhIG51cHB1IFs8Pl0gbMO8bGl0YW1ha3MgdGFnYXNpIFdZU0lXSUcgcmV6aWltaS4iCisgICAgfSwKKyAgICAiX19ORVdfVFJBTlNMQVRJT05TX18iOiB7CisgICAgICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICAgICAiQWJicmV2aWF0aW9uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIiIsCisgICAgICAgICAgICAiRXhwYW5zaW9uOiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJBYm91dEJveCI6IHsKKyAgICAgICAgICAgICJDbG9zZSI6ICI8PFhpbmhhPj4iCisgICAgICAgIH0sCisgICAgICAgICJDaGFyQ291bnRlciI6IHsKKyAgICAgICAgICAgICIuLi4gaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAgICAgICAgICJDaGFycyI6ICIiLAorICAgICAgICAgICAgIkhUTUwiOiAiIiwKKyAgICAgICAgICAgICJXb3JkcyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDaGFyYWN0ZXJNYXAiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IHNwZWNpYWwgY2hhcmFjdGVyIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbG9yUGlja2VyIjogeworICAgICAgICAgICAgIkNsaWNrIGEgY29sb3IuLi4iOiAiIiwKKyAgICAgICAgICAgICJDb2xvcjogIjogIiIsCisgICAgICAgICAgICAiU2FtcGxlIjogIiIsCisgICAgICAgICAgICAiV2ViIFNhZmU6ICI6ICIiLAorICAgICAgICAgICAgIkNsb3NlIjogIjw8WGluaGE+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAgICAgIl9EZWxldGUgUm93IjogIiIsCisgICAgICAgICAgICAiX0ltYWdlIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJfTW9kaWZ5IExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJfUmVtb3ZlIExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJfVGFibGUgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIkNfZWxsIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJDaGVjX2sgTGluay4uLiI6ICIiLAorICAgICAgICAgICAgIkNvcHkiOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgYSBsaW5rIjogIiIsCisgICAgICAgICAgICAiQ3VycmVudCBVUkwgaXMiOiAiIiwKKyAgICAgICAgICAgICJDdXQiOiAiIiwKKyAgICAgICAgICAgICJEZV9sZXRlIENvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBDZWxsIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCByb3ciOiAiIiwKKyAgICAgICAgICAgICJIb3cgZGlkIHlvdSBnZXQgaGVyZT8gKFBsZWFzZSByZXBvcnQhKSI6ICIiLAorICAgICAgICAgICAgIklfbnNlcnQgUm93IEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluX3NlcnQgUm93IEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IF9Db2x1bW4gQmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBhZnRlciB0aGUgY3VycmVudCBub2RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGJlZm9yZSB0aGUgY3VycmVudCBub2RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENfb2x1bW4gQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDZWxsIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkxpbmsgcG9pbnRzIHRvOiI6ICIiLAorICAgICAgICAgICAgIk1ha2UgbGluX2suLi4iOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICIiLAorICAgICAgICAgICAgIk9wZW5zIHRoaXMgbGluayBpbiBhIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJQYXN0ZSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgZWxlbWVudDoiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHVubGluayB0aGlzIGVsZW1lbnQuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHRoZSAkZWxlbSBFbGVtZW50Li4uIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHRoaXMgbm9kZSBmcm9tIHRoZSBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlJvX3cgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIGltYWdlIHByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgVGFibGUgQ2VsbCBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgVGFibGUgUm93IFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiVW5saW5rIHRoZSBjdXJyZW50IGVsZW1lbnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ3JlYXRlTGluayI6IHsKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiIiwKKyAgICAgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIiIsCisgICAgICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICIiLAorICAgICAgICAgICAgIk90aGVyIjogIiIsCisgICAgICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0OiI6ICIiLAorICAgICAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAiIiwKKyAgICAgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIiIsCisgICAgICAgICAgICAiVVJMOiI6ICIiLAorICAgICAgICAgICAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEZWZpbml0aW9uTGlzdCI6IHsKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGRlc2NyaXB0aW9uIjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiBsaXN0IjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiB0ZXJtIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRpYWxvZ3MiOiB7CisgICAgICAgICAgICAiU29tZSBUZXh0IEhlcmUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRHluYW1pY0NTUyI6IHsKKyAgICAgICAgICAgICJDaG9vc2Ugc3R5bGVzaGVldCI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQiOiAiIiwKKyAgICAgICAgICAgICJVbmRlZmluZWQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgICAgICJFZGl0IEhUTUwgZm9yIHNlbGVjdGVkIHRleHQiOiAiIiwKKyAgICAgICAgICAgICJFZGl0IFRhZyBCeSBQZWciOiAiIiwKKyAgICAgICAgICAgICJUYWcgRWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVxdWF0aW9uIjogeworICAgICAgICAgICAgIiE9IjogIiIsCisgICAgICAgICAgICAiIWluIjogIiIsCisgICAgICAgICAgICAiJmd0Oy0iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiJmx0O3gmZ3Q7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAhYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYC5gICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAyYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDNgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA1YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDZgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgN2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA4YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgZWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7Jm5ic3A7YDFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Arezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLTpcXCBgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC17Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BDYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Bjb3NgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGxuYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BwaWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHNpbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGFuYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0aW1lc2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImcXVvdDt0ZXh0JnF1b3Q7IjogIiIsCisgICAgICAgICAgICAiJytmb3JtdWxhKyciOiAiIiwKKyAgICAgICAgICAgICIoKG4pLChrKSkiOiAiIiwKKyAgICAgICAgICAgICIoeCsxKS8oeC0xKSI6ICIiLAorICAgICAgICAgICAgIioiOiAiIiwKKyAgICAgICAgICAgICIqKiI6ICIiLAorICAgICAgICAgICAgIistIjogIiIsCisgICAgICAgICAgICAiLSZndDsiOiAiIiwKKyAgICAgICAgICAgICItJmx0OyI6ICIiLAorICAgICAgICAgICAgIi06IjogIiIsCisgICAgICAgICAgICAiLT0iOiAiIiwKKyAgICAgICAgICAgICIvLyI6ICIiLAorICAgICAgICAgICAgIi9fIjogIiIsCisgICAgICAgICAgICAiOi4iOiAiIiwKKyAgICAgICAgICAgICI9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIkAiOiAiIiwKKyAgICAgICAgICAgICJbW2EsYl0sW2MsZF1dIjogIiIsCisgICAgICAgICAgICAiXFxcXCI6ICIiLAorICAgICAgICAgICAgIlxcbkNsaWNrIGluIHRoZSBib3ggdG8gdXNlIHlvdXIga2V5Ym9hcmQgb3IgdXNlIHRoZSBidXR0b25zXFxuIjogIiIsCisgICAgICAgICAgICAiXl4iOiAiIiwKKyAgICAgICAgICAgICJeXl4iOiAiIiwKKyAgICAgICAgICAgICJfX3wiOiAiIiwKKyAgICAgICAgICAgICJffF8iOiAiIiwKKyAgICAgICAgICAgICJgIT1gIjogIiIsCisgICAgICAgICAgICAiYCFpbmAiOiAiIiwKKyAgICAgICAgICAgICJgJmFuZDtgIjogIiIsCisgICAgICAgICAgICAiYCZjYXA7YCI6ICIiLAorICAgICAgICAgICAgImAmY3VwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oy1gIjogIiIsCisgICAgICAgICAgICAiYCZndDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PSZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7eCZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZvcjtgIjogIiIsCisgICAgICAgICAgICAiYCZxdW90O3RleHQmcXVvdDtgIjogIiIsCisgICAgICAgICAgICAiYCgobiksKGspKWAiOiAiIiwKKyAgICAgICAgICAgICJgKHgrMSkvKHgtMSlgIjogIiIsCisgICAgICAgICAgICAiYCoqYCI6ICIiLAorICAgICAgICAgICAgImAqYCI6ICIiLAorICAgICAgICAgICAgImArLWAiOiAiIiwKKyAgICAgICAgICAgICJgLSZndDtgIjogIiIsCisgICAgICAgICAgICAiYC0mbHQ7YCI6ICIiLAorICAgICAgICAgICAgImAtOmAiOiAiIiwKKyAgICAgICAgICAgICJgLT1gIjogIiIsCisgICAgICAgICAgICAiYC8vYCI6ICIiLAorICAgICAgICAgICAgImAvX2AiOiAiIiwKKyAgICAgICAgICAgICJgOi5gIjogIiIsCisgICAgICAgICAgICAiYD0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImBAYCI6ICIiLAorICAgICAgICAgICAgImBbW2EsYl0sW2MsZF1dYCI6ICIiLAorICAgICAgICAgICAgImBcXFxcYCI6ICIiLAorICAgICAgICAgICAgImBfX3xgIjogIiIsCisgICAgICAgICAgICAiYF98X2AiOiAiIiwKKyAgICAgICAgICAgICJgQUFgIjogIiIsCisgICAgICAgICAgICAiYGFsZXBoYCI6ICIiLAorICAgICAgICAgICAgImBhbHBoYWAiOiAiIiwKKyAgICAgICAgICAgICJgYW5kYCI6ICIiLAorICAgICAgICAgICAgImBiYXJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJldGFgIjogIiIsCisgICAgICAgICAgICAiYENDYCI6ICIiLAorICAgICAgICAgICAgImBjY2FgIjogIiIsCisgICAgICAgICAgICAiYGNoaWAiOiAiIiwKKyAgICAgICAgICAgICJgZGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgZGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbGAiOiAiIiwKKyAgICAgICAgICAgICJgRGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkaWFtb25kYCI6ICIiLAorICAgICAgICAgICAgImBkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkeS9keGAiOiAiIiwKKyAgICAgICAgICAgICJgRUVgIjogIiIsCisgICAgICAgICAgICAiYGVwc2lgIjogIiIsCisgICAgICAgICAgICAiYGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZnJhYCI6ICIiLAorICAgICAgICAgICAgImBHYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdyYWRgIjogIiIsCisgICAgICAgICAgICAiYGhhcnJgIjogIiIsCisgICAgICAgICAgICAiYGhBcnJgIjogIiIsCisgICAgICAgICAgICAiYGhhdGFgIjogIiIsCisgICAgICAgICAgICAiYGlmYCI6ICIiLAorICAgICAgICAgICAgImBpbmAiOiAiIiwKKyAgICAgICAgICAgICJgaW50YCI6ICIiLAorICAgICAgICAgICAgImBpb3RhYCI6ICIiLAorICAgICAgICAgICAgImBrYXBwYWAiOiAiIiwKKyAgICAgICAgICAgICJgTGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBsYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYGxBcnJgIjogIiIsCisgICAgICAgICAgICAiYGxhcnJgIjogIiIsCisgICAgICAgICAgICAiYGxpbV8oeC0mZ3Q7b28pYCI6ICIiLAorICAgICAgICAgICAgImBsb2dgIjogIiIsCisgICAgICAgICAgICAiYG11YCI6ICIiLAorICAgICAgICAgICAgImBOTmAiOiAiIiwKKyAgICAgICAgICAgICJgbm5gIjogIiIsCisgICAgICAgICAgICAiYG5vdGAiOiAiIiwKKyAgICAgICAgICAgICJgbnVgIjogIiIsCisgICAgICAgICAgICAiYG8rYCI6ICIiLAorICAgICAgICAgICAgImBvLmAiOiAiIiwKKyAgICAgICAgICAgICJgTy9gIjogIiIsCisgICAgICAgICAgICAiYG9pbnRgIjogIiIsCisgICAgICAgICAgICAiYG9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBPbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgb29gIjogIiIsCisgICAgICAgICAgICAiYG9yYCI6ICIiLAorICAgICAgICAgICAgImBveGAiOiAiIiwKKyAgICAgICAgICAgICJgcGhpYCI6ICIiLAorICAgICAgICAgICAgImBQaGlgIjogIiIsCisgICAgICAgICAgICAiYFBpYCI6ICIiLAorICAgICAgICAgICAgImBwaWAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvZGAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvcGAiOiAiIiwKKyAgICAgICAgICAgICJgUHNpYCI6ICIiLAorICAgICAgICAgICAgImBwc2lgIjogIiIsCisgICAgICAgICAgICAiYFFRYCI6ICIiLAorICAgICAgICAgICAgImBxdWFkYCI6ICIiLAorICAgICAgICAgICAgImByQXJyYCI6ICIiLAorICAgICAgICAgICAgImByaG9gIjogIiIsCisgICAgICAgICAgICAiYHJvb3QobikoeClgIjogIiIsCisgICAgICAgICAgICAiYFJSYCI6ICIiLAorICAgICAgICAgICAgImBzZmFgIjogIiIsCisgICAgICAgICAgICAiYFNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgc3FydCh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgc3F1YXJlYCI6ICIiLAorICAgICAgICAgICAgImBzdGFja3JlbCgtJmd0OykoKylgIjogIiIsCisgICAgICAgICAgICAiYHN1YmAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VtYCI6ICIiLAorICAgICAgICAgICAgImBzdXBgIjogIiIsCisgICAgICAgICAgICAiYHN1cGVgIjogIiIsCisgICAgICAgICAgICAiYHRhdWAiOiAiIiwKKyAgICAgICAgICAgICJgVGhldGFgIjogIiIsCisgICAgICAgICAgICAiYHRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImBUVGAiOiAiIiwKKyAgICAgICAgICAgICJgdHRhYCI6ICIiLAorICAgICAgICAgICAgImB1YXJyYCI6ICIiLAorICAgICAgICAgICAgImB1bGFgIjogIiIsCisgICAgICAgICAgICAiYHVwc2lsb25gIjogIiIsCisgICAgICAgICAgICAiYHV1YCI6ICIiLAorICAgICAgICAgICAgImB2ZWNhYCI6ICIiLAorICAgICAgICAgICAgImB2dmAiOiAiIiwKKyAgICAgICAgICAgICJgeF8obW4pYCI6ICIiLAorICAgICAgICAgICAgImBYaWAiOiAiIiwKKyAgICAgICAgICAgICJgeGlgIjogIiIsCisgICAgICAgICAgICAiYHh4YCI6ICIiLAorICAgICAgICAgICAgImB6ZXRhYCI6ICIiLAorICAgICAgICAgICAgImBaWmAiOiAiIiwKKyAgICAgICAgICAgICJgfC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImB8LS1gIjogIiIsCisgICAgICAgICAgICAiYHw9PWAiOiAiIiwKKyAgICAgICAgICAgICJgfF9fYCI6ICIiLAorICAgICAgICAgICAgImB8fmAiOiAiIiwKKyAgICAgICAgICAgICJgfj1gIjogIiIsCisgICAgICAgICAgICAiYH58YCI6ICIiLAorICAgICAgICAgICAgImB+fmAiOiAiIiwKKyAgICAgICAgICAgICJBQSI6ICIiLAorICAgICAgICAgICAgImFsZXBoIjogIiIsCisgICAgICAgICAgICAiYWxwaGEiOiAiIiwKKyAgICAgICAgICAgICJhbmQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGggRm9ybXVsYSBJbnB1dCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aE1MIEV4YW1wbGUiOiAiIiwKKyAgICAgICAgICAgICJiYXJhIjogIiIsCisgICAgICAgICAgICAiQmFzZWQgb24gQVNDSUlNYXRoTUwgYnkiOiAiIiwKKyAgICAgICAgICAgICJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiYmJhIjogIiIsCisgICAgICAgICAgICAiYmV0YSI6ICIiLAorICAgICAgICAgICAgIkNDIjogIiIsCisgICAgICAgICAgICAiY2NhIjogIiIsCisgICAgICAgICAgICAiY2hpIjogIiIsCisgICAgICAgICAgICAiZGFyciI6ICIiLAorICAgICAgICAgICAgImRkb3RhIjogIiIsCisgICAgICAgICAgICAiZGVsIjogIiIsCisgICAgICAgICAgICAiZGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJEZWx0YSI6ICIiLAorICAgICAgICAgICAgImRpYW1vbmQiOiAiIiwKKyAgICAgICAgICAgICJkb3RhIjogIiIsCisgICAgICAgICAgICAiZHkvZHgiOiAiIiwKKyAgICAgICAgICAgICJFRSI6ICIiLAorICAgICAgICAgICAgImVwc2kiOiAiIiwKKyAgICAgICAgICAgICJldGEiOiAiIiwKKyAgICAgICAgICAgICJGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBBc2NpaU1hdGhNTCB2aXNpdCB0aGlzIHBhZ2U6IjogIiIsCisgICAgICAgICAgICAiRm9ybXVsYSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJmcmEiOiAiIiwKKyAgICAgICAgICAgICJnYW1tYSI6ICIiLAorICAgICAgICAgICAgIkdhbW1hIjogIiIsCisgICAgICAgICAgICAiZ3JhZCI6ICIiLAorICAgICAgICAgICAgImhBcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXJyIjogIiIsCisgICAgICAgICAgICAiaGF0YSI6ICIiLAorICAgICAgICAgICAgImlmIjogIiIsCisgICAgICAgICAgICAiaW4iOiAiIiwKKyAgICAgICAgICAgICJJbnB1dCI6ICIiLAorICAgICAgICAgICAgImludCI6ICIiLAorICAgICAgICAgICAgImludF9hXmJmKHgpZHgiOiAiIiwKKyAgICAgICAgICAgICJpb3RhIjogIiIsCisgICAgICAgICAgICAia2FwcGEiOiAiIiwKKyAgICAgICAgICAgICJMYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsYXJyIjogIiIsCisgICAgICAgICAgICAibEFyciI6ICIiLAorICAgICAgICAgICAgImxpbV8oeC0mZ3Q7b28pIjogIiIsCisgICAgICAgICAgICAibXUiOiAiIiwKKyAgICAgICAgICAgICJOTiI6ICIiLAorICAgICAgICAgICAgIm5uIjogIiIsCisgICAgICAgICAgICAibm5uIjogIiIsCisgICAgICAgICAgICAibm90IjogIiIsCisgICAgICAgICAgICAibnUiOiAiIiwKKyAgICAgICAgICAgICJvKyI6ICIiLAorICAgICAgICAgICAgIm8uIjogIiIsCisgICAgICAgICAgICAiTy8iOiAiIiwKKyAgICAgICAgICAgICJvaW50IjogIiIsCisgICAgICAgICAgICAiT21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJvbWVnYSI6ICIiLAorICAgICAgICAgICAgIm9vIjogIiIsCisgICAgICAgICAgICAib3IiOiAiIiwKKyAgICAgICAgICAgICJveCI6ICIiLAorICAgICAgICAgICAgInBoaSI6ICIiLAorICAgICAgICAgICAgIlBoaSI6ICIiLAorICAgICAgICAgICAgInBpIjogIiIsCisgICAgICAgICAgICAiUGkiOiAiIiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIiIsCisgICAgICAgICAgICAicHJvZCI6ICIiLAorICAgICAgICAgICAgInByb3AiOiAiIiwKKyAgICAgICAgICAgICJwc2kiOiAiIiwKKyAgICAgICAgICAgICJQc2kiOiAiIiwKKyAgICAgICAgICAgICJRUSI6ICIiLAorICAgICAgICAgICAgInF1YWQiOiAiIiwKKyAgICAgICAgICAgICJyQXJyIjogIiIsCisgICAgICAgICAgICAicmhvIjogIiIsCisgICAgICAgICAgICAicm9vdChuKSh4KSI6ICIiLAorICAgICAgICAgICAgIlJSIjogIiIsCisgICAgICAgICAgICAic2ZhIjogIiIsCisgICAgICAgICAgICAic2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJTaWdtYSI6ICIiLAorICAgICAgICAgICAgInNxcnQoeCkiOiAiIiwKKyAgICAgICAgICAgICJzcXVhcmUiOiAiIiwKKyAgICAgICAgICAgICJzdGFja3JlbCgtJmd0OykoKykiOiAiIiwKKyAgICAgICAgICAgICJzdWIiOiAiIiwKKyAgICAgICAgICAgICJzdWJlIjogIiIsCisgICAgICAgICAgICAic3VtIjogIiIsCisgICAgICAgICAgICAic3VtXyhuPTEpXm9vIjogIiIsCisgICAgICAgICAgICAic3VwIjogIiIsCisgICAgICAgICAgICAic3VwZSI6ICIiLAorICAgICAgICAgICAgInRhdSI6ICIiLAorICAgICAgICAgICAgIlRoZXRhIjogIiIsCisgICAgICAgICAgICAidGhldGEiOiAiIiwKKyAgICAgICAgICAgICJUVCI6ICIiLAorICAgICAgICAgICAgInR0YSI6ICIiLAorICAgICAgICAgICAgInVhcnIiOiAiIiwKKyAgICAgICAgICAgICJ1bGEiOiAiIiwKKyAgICAgICAgICAgICJ1cHNpbG9uIjogIiIsCisgICAgICAgICAgICAidXUiOiAiIiwKKyAgICAgICAgICAgICJ1dXUiOiAiIiwKKyAgICAgICAgICAgICJ2ZWNhIjogIiIsCisgICAgICAgICAgICAidnYiOiAiIiwKKyAgICAgICAgICAgICJ2dnYiOiAiIiwKKyAgICAgICAgICAgICJ4XihtK24pIjogIiIsCisgICAgICAgICAgICAieF8obW4pIjogIiIsCisgICAgICAgICAgICAiWGkiOiAiIiwKKyAgICAgICAgICAgICJ4aSI6ICIiLAorICAgICAgICAgICAgInh4IjogIiIsCisgICAgICAgICAgICAiemV0YSI6ICIiLAorICAgICAgICAgICAgIlpaIjogIiIsCisgICAgICAgICAgICAifC0mZ3Q7IjogIiIsCisgICAgICAgICAgICAifC0tIjogIiIsCisgICAgICAgICAgICAifD09IjogIiIsCisgICAgICAgICAgICAifF9fIjogIiIsCisgICAgICAgICAgICAifH4iOiAiIiwKKyAgICAgICAgICAgICJ+PSI6ICIiLAorICAgICAgICAgICAgIn58IjogIiIsCisgICAgICAgICAgICAifn4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmFuY3lTZWxlY3RzIjogeworICAgICAgICAgICAgIicrb3B0LnRleHQrJyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGaW5kUmVwbGFjZSI6IHsKKyAgICAgICAgICAgICInO1xyXG4gIHZhciB0YWdjID0gJyI6ICIiLAorICAgICAgICAgICAgIkNhc2Ugc2Vuc2l0aXZlIHNlYXJjaCI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIjogIiIsCisgICAgICAgICAgICAiRG9uZSI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSB0ZXh0IHlvdSB3YW50IHRvIGZpbmQiOiAiIiwKKyAgICAgICAgICAgICJGaW5kIGFuZCBSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiZm91bmQgaXRlbSI6ICIiLAorICAgICAgICAgICAgImZvdW5kIGl0ZW1zIjogIiIsCisgICAgICAgICAgICAiSGlnaGxpZ2h0IjogIiIsCisgICAgICAgICAgICAiSW5mb3JtIGEgcmVwbGFjZW1lbnQgd29yZCI6ICIiLAorICAgICAgICAgICAgIk5leHQiOiAiIiwKKyAgICAgICAgICAgICJub3QgZm91bmQiOiAiIiwKKyAgICAgICAgICAgICJPcHRpb25zIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSB3aXRoOiI6ICIiLAorICAgICAgICAgICAgInJlcGxhY2VkIGl0ZW0iOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtcyI6ICIiLAorICAgICAgICAgICAgIlNlYXJjaCBmb3I6IjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSBhbGwgb2NjdXJyZW5jZXMiOiAiIiwKKyAgICAgICAgICAgICJTdWJzdGl0dXRlIHRoaXMgb2NjdXJyZW5jZT8iOiAiIiwKKyAgICAgICAgICAgICJVbmRvIjogIiIsCisgICAgICAgICAgICAiV2hvbGUgd29yZHMgb25seSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGb3JtT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJFbnRlciB0aGUgbmFtZSBmb3IgbmV3IG9wdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIGNoZWNrIGJveC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBGb3JtLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG11bHRpLWxpbmUgdGV4dCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSByYWRpbyBidXR0b24uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgc2VsZWN0IGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHN1Ym1pdC9yZXNldCBidXR0b24uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgdGV4dCwgcGFzc3dvcmQgb3IgaGlkZGVuIGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIk1lc3NhZ2UgU2VudCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBTZWxlY3QuLi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybXMiOiB7CisgICAgICAgICAgICAiJ29uQ2xpY2snPSI6ICIiLAorICAgICAgICAgICAgIkFjY2VzcyBLZXk6IjogIiIsCisgICAgICAgICAgICAiQWN0aW9uIFVSTDoiOiAiIiwKKyAgICAgICAgICAgICJCdXR0b24gU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiQ2hlY2tlZCI6ICIiLAorICAgICAgICAgICAgIkNvbHVtbnM6IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCB0ZXh0IChvcHRpb25hbCkiOiAiIiwKKyAgICAgICAgICAgICJEaW1lbnNpb25zIjogIiIsCisgICAgICAgICAgICAiRGlzYWJsZWQiOiAiIiwKKyAgICAgICAgICAgICJFbmNvZGluZzoiOiAiIiwKKyAgICAgICAgICAgICJGb3IgQ29udHJvbDoiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBGSUVMRFNFVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IExBQkVMIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBTRUxFQ1QiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiRm9ybSBoYW5kbGVyIHNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJHZXQiOiAiIiwKKyAgICAgICAgICAgICJIYXJkIjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0IGluIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiSFRNTC1Gb3JtIHRvIENHSSAoZGVmYXVsdCkiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBzb3VyY2UiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBVUkw6IjogIiIsCisgICAgICAgICAgICAiSW5pdGlhbCBUZXh0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiSmF2YXNjcmlwdCBmb3IgYnV0dG9uIGNsaWNrIjogIiIsCisgICAgICAgICAgICAiTGFiZWw6IjogIiIsCisgICAgICAgICAgICAiTGVnZW5kOiI6ICIiLAorICAgICAgICAgICAgIk1heCBsZW5ndGg6IjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY2NlcHRlZCI6ICIiLAorICAgICAgICAgICAgIk1ldGhvZDoiOiAiIiwKKyAgICAgICAgICAgICJtdWx0aXBhcnQgRm9ybSBEYXRhIChGaWxlLVVwbG9hZCkiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gc2VsZWN0IjogIiIsCisgICAgICAgICAgICAibmFtZSBvZiB0aGUgdGV4dGFyZWEiOiAiIiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICIiLAorICAgICAgICAgICAgIm5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIm5vd3JhcCI6ICIiLAorICAgICAgICAgICAgIk9mZiI6ICIiLAorICAgICAgICAgICAgIlBoeXNpY2FsIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIGEgTGFiZWwiOiAiIiwKKyAgICAgICAgICAgICJQb3N0IjogIiIsCisgICAgICAgICAgICAicHJlIjogIiIsCisgICAgICAgICAgICAiUmVhZCBPbmx5IjogIiIsCisgICAgICAgICAgICAiUm93czoiOiAiIiwKKyAgICAgICAgICAgICJTaXplIG9mIHRleHQgYm94IGluIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJTaXplOiI6ICIiLAorICAgICAgICAgICAgIlNvZnQiOiAiIiwKKyAgICAgICAgICAgICJUYWIgSW5kZXg6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IEZyYW1lOiI6ICIiLAorICAgICAgICAgICAgIlRleHQ6IjogIiIsCisgICAgICAgICAgICAiVVJMIG9mIGltYWdlIjogIiIsCisgICAgICAgICAgICAiVmFsdWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZToiOiAiIiwKKyAgICAgICAgICAgICJWaXJ0dWFsIjogIiIsCisgICAgICAgICAgICAiV2lkdGggaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJXcmFwIE1vZGU6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBOYW1lIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iCisgICAgICAgIH0sCisgICAgICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgICAgICIuLi4iOiAiIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgc3R5bGUtc2hlZXQ6IjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZCBjb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJDaGFyYWN0ZXIgc2V0OiI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChJU08tODg1OS01KSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChLT0k4LVIpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKFdJTkRPV1MtMTI1MSkiOiAiIiwKKyAgICAgICAgICAgICJEZXNjcmlwdGlvbjoiOiAiIiwKKyAgICAgICAgICAgICJET0NUWVBFOiI6ICIiLAorICAgICAgICAgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCB0aXRsZToiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkczoiOiAiIiwKKyAgICAgICAgICAgICJQcmltYXJ5IHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIlRleHQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiVVRGLTggKHJlY29tbWVuZGVkKSI6ICIiLAorICAgICAgICAgICAgIndlc3Rlcm4gKElTTy04ODU5LTEpIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bGxTY3JlZW4iOiB7CisgICAgICAgICAgICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkdlY2tvIjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJIb3Jpem9udGFsUnVsZSI6IHsKKyAgICAgICAgICAgICImI3gwMGQ3OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiIiwKKyAgICAgICAgICAgICJDZW50ZXIiOiAiIiwKKyAgICAgICAgICAgICJDb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L2VkaXQgaG9yaXpvbnRhbCBydWxlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgSG9yaXpvbnRhbCBSdWxlIjogIiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIiIsCisgICAgICAgICAgICAiTGVmdCI6ICIiLAorICAgICAgICAgICAgIk5vIHNoYWRpbmciOiAiIiwKKyAgICAgICAgICAgICJwZXJjZW50IjogIiIsCisgICAgICAgICAgICAicGl4ZWxzIjogIiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSI6ICIiLAorICAgICAgICAgICAgIldpZHRoOiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbmxpbmVTdHlsZXIiOiB7CisgICAgICAgICAgICAiQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIiIsCisgICAgICAgICAgICAiQm90dG9tIjogIiIsCisgICAgICAgICAgICAiQ2hhciI6ICIiLAorICAgICAgICAgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIiIsCisgICAgICAgICAgICAiQ1NTIFN0eWxlIjogIiIsCisgICAgICAgICAgICAiRkcgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJGbG9hdCI6ICIiLAorICAgICAgICAgICAgIkp1c3RpZnkiOiAiIiwKKyAgICAgICAgICAgICJNYXJnaW4iOiAiIiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiIiwKKyAgICAgICAgICAgICJOb25lIjogIiIsCisgICAgICAgICAgICAiUGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIlRleHQgYWxpZ24iOiAiIiwKKyAgICAgICAgICAgICJUb3AiOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICIiLAorICAgICAgICAgICAgIi0iOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJDZW50ZXIiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBVUkwiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJMYXlvdXQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAicGVyY2VudCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgInBpeGVscyI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiV2lkdGgiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAgICAgIkFuY2hvciBuYW1lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEFuY2hvciI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICAgICAiQWJzYm90dG9tIjogIiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiIiwKKyAgICAgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICIiLAorICAgICAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIkhvcml6b250YWw6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICIiLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJTcGFjaW5nIjogIiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICIiLAorICAgICAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbDoiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBVUkw6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJUb3AiOiAiPDxJbmxpbmVTdHlsZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGZvb3Rub3RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IE5vdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGFnZWJyZWFrIjogeworICAgICAgICAgICAgIlBhZ2UgYnJlYWsiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIEJyZWFrIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNtaWxleSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgU21pbGV5IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICAgICAiXFxuICBUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZ1xcbiI6ICIiLAorICAgICAgICAgICAgIkhpZGUgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMSI6ICIiLAorICAgICAgICAgICAgIkxpbmsyIjogIiIsCisgICAgICAgICAgICAiTGluazMiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNCI6ICIiLAorICAgICAgICAgICAgIkxpbms1IjogIiIsCisgICAgICAgICAgICAiU2hvdyBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmciOiAiIiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgICAgICJBbGwgQ2F0ZWdvcmllcyI6ICIiLAorICAgICAgICAgICAgIkZpbHRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyBIVE1MIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIHRlbXBsYXRlIHZhcmlhYmxlIjogIiIsCisgICAgICAgICAgICAiT25seSBzZWFyY2ggd29yZCBiZWdpbm5pbmciOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIjw8Q2hhckNvdW50ZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICI8PEluc2VydFNuaXBwZXQ+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAgICAgIkNhcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJDYXB0aW9uIGZvciB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIHBhZGRpbmc6IjogIiIsCisgICAgICAgICAgICAiQ2VsbCBzcGFjaW5nOiI6ICIiLAorICAgICAgICAgICAgIkNvbGxhcHNlIGJvcmRlcnM6IjogIiIsCisgICAgICAgICAgICAiQ29sczoiOiAiIiwKKyAgICAgICAgICAgICJFbSI6ICIiLAorICAgICAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJMYXlvdSI6ICIiLAorICAgICAgICAgICAgIk51bWJlciBvZiBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICIiLAorICAgICAgICAgICAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSBvZiB0aGUgYm9yZGVyIjogIiIsCisgICAgICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiV2lkdGggdW5pdCI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvcmRlciI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJMYXlvdXQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUGVyY2VudCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlBpeGVscyI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUm93czoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTcGFjaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRvcCI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiTGFuZ01hcmtzIjogeworICAgICAgICAgICAgIiZtZGFzaDsgbGFuZ3VhZ2UgJm1kYXNoOyI6ICIiLAorICAgICAgICAgICAgIicsICciOiAiIiwKKyAgICAgICAgICAgICJFbmdsaXNoIjogIiIsCisgICAgICAgICAgICAiRnJlbmNoIjogIiIsCisgICAgICAgICAgICAiR3JlZWsiOiAiIiwKKyAgICAgICAgICAgICJsYW5ndWFnZSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJMYXRpbiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJMaW5rZXIiOiB7CisgICAgICAgICAgICAiKHB4KSI6ICIiLAorICAgICAgICAgICAgIkFuY2hvci1MaW5rIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIEFkZHJlc3M6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgTGluayI6ICIiLAorICAgICAgICAgICAgIkxvY2F0aW9uIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZW51IEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFRlbXBsYXRlOiI6ICIiLAorICAgICAgICAgICAgIk5ldyBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcmRpbmFyeSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUG9wdXAgV2luZG93IjogIiIsCisgICAgICAgICAgICAiUG9wdXBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgTGluayI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZWFibGU6IjogIiIsCisgICAgICAgICAgICAiU2FtZSBXaW5kb3cgKGp1bXAgb3V0IG9mIGZyYW1lcykiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGxiYXJzOiI6ICIiLAorICAgICAgICAgICAgIlNob3dzIE9uIEhvdmVyIjogIiIsCisgICAgICAgICAgICAiU3RhdHVzIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJTdWJqZWN0OiI6ICIiLAorICAgICAgICAgICAgIlRpdGxlOiI6ICIiLAorICAgICAgICAgICAgIlRvb2xiYXI6IjogIiIsCisgICAgICAgICAgICAiVVJMIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiIiwKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTmFtZToiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTaXplOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlRhcmdldDoiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIlVSTDoiOiAiPDxDcmVhdGVMaW5rPj4iCisgICAgICAgIH0sCisgICAgICAgICJMaXN0VHlwZSI6IHsKKyAgICAgICAgICAgICJDaG9vc2UgbGlzdCBzdHlsZSB0eXBlIChmb3Igb3JkZXJlZCBsaXN0cykiOiAiIiwKKyAgICAgICAgICAgICJEZWNpbWFsIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciBncmVlayBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgbGF0aW4gbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIHJvbWFuIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJVcHBlciBsYXRpbiBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiVXBwZXIgcm9tYW4gbnVtYmVycyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJNb290b29sc0ZpbGVNYW5hZ2VyIjogeworICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk9wZXJhIjogeworICAgICAgICAgICAgIk1BUksiOiAiIiwKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgdGV4dCBpbiBuZXcgcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiUGFzdGUgYXMgUGxhaW4gVGV4dCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQcmVzZXJ2ZVNjcmlwdHMiOiB7CisgICAgICAgICAgICAiSmF2YVNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIlBIUCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgICAgICInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnY2wnOiAnIjogIiIsCisgICAgICAgICAgICAiQVRUUklCVVRFUyI6ICIiLAorICAgICAgICAgICAgIkNvbG9ycyI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSBUQUcgeW91IHdhbnQgdG8gaW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiTm8gQ1NTIGNsYXNzIGF2YWlhYmxlIjogIiIsCisgICAgICAgICAgICAiT2siOiAiIiwKKyAgICAgICAgICAgICJPUFRJT05TIjogIiIsCisgICAgICAgICAgICAiUXVpY2sgVGFnIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlRBR3MiOiAiIiwKKyAgICAgICAgICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBUQUciOiAiIiwKKyAgICAgICAgICAgICJZb3UgaGF2ZSB0byBzZWxlY3Qgc29tZSB0ZXh0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNhdmVTdWJtaXQiOiB7CisgICAgICAgICAgICAiaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAgICAgICAgICJSZWFkeSI6ICIiLAorICAgICAgICAgICAgIlNhdmUiOiAiIiwKKyAgICAgICAgICAgICJTYXZpbmcuLi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiU2V0SWQiOiB7CisgICAgICAgICAgICAiSUQvTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQgYW5kIE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQvTmFtZSI6ICIiLAorICAgICAgICAgICAgIlNldCBJRC9OYW1lIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiQ2xvc2luZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIkNsb3NpbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIkNvbnZlcnQgYWxsIHF1b3RlcyBhbmQgZGFzaGVzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIGF1dG9tYXRpYyByZXBsYWNlbWVudHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN0eWxpc3QiOiB7CisgICAgICAgICAgICAiU3R5bGVzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBTZWxlY3Rpb24gT25seSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIHVwIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBTY29wZSI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYWwgdGlkeSB1cCBhbmQgY29ycmVjdGlvbiBvZiBzb21lIHByb2JsZW1zLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzZWxlY3QgZnJvbSB0aGUgZm9sbG93aW5nIGNsZWFuaW5nIG9wdGlvbnMuLi4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc3RhbmQgYnkgd2hpbGUgY2xlYW5pbmcgaW4gcHJvY2Vzcy4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGlnbm1lbnQgKGxlZnQvcmlnaHQvanVzdGlmeSkuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBjbGFzc2VzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBBbGwgSFRNTCBUYWdzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBzdHlsZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0eXBlZmFjZXMgKGZvbnQgXCJzdHlsZXNcIikuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGVtcGhhc2lzIGFuZCBhbm5vdGF0aW9ucy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgbGFuZyBhdHRyaWJ1dGVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBQYXJhZ3JhcGhzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cy4iOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzIHdpdGggbm9uLWRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzLiI6ICIiLAorICAgICAgICAgICAgIlZpZ29yb3VzbHkgcHVyZ2UgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiQWxsIGZvdXIgc2lkZXMiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXJzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBQcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBUeXBlOiI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIGRvd24iOiAiIiwKKyAgICAgICAgICAgICJDZWxscyB0byB0aGUgcmlnaHQsIGFuZCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBjZWxsIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSByb3ciOiAiIiwKKyAgICAgICAgICAgICJEbyBOb3QgQ2hhbmdlIjogIiIsCisgICAgICAgICAgICAiRnJhbWUgYW5kIGJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJGcmFtZXMiOiAiIiwKKyAgICAgICAgICAgICJIZWFkZXIgKHRoKSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjZWxsIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNlbGwgYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNvbHVtbiBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjb2x1bW4gYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCByb3cgYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBjdXJyZW50IGNlbGwgd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJObyBydWxlcyI6ICIiLAorICAgICAgICAgICAgIk5vIHNpZGVzIjogIiIsCisgICAgICAgICAgICAiTm9ybWFsICh0ZCkiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJSb3cgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlJvdyBQcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gY29sdW1ucyBvbmx5IjogIiIsCisgICAgICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiByb3dzIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgY29sdW1uIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgcm93IjogIiIsCisgICAgICAgICAgICAiU3VtbWFyeSI6ICIiLAorICAgICAgICAgICAgIlRhYmxlIHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJUYWJsZSBQcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgbGVmdC1oYW5kIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSByaWdodCBhbmQgbGVmdCBzaWRlcyBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHRvcCBhbmQgYm90dG9tIHNpZGVzIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIiIsCisgICAgICAgICAgICAiQ2FwdGlvbiI6ICI8PEluc2VydFRhYmxlPj4iLAorICAgICAgICAgICAgIkNvbHVtbnMiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJEZXNjcmlwdGlvbiI6ICI8PEZ1bGxQYWdlPj4iLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiUGFkZGluZyI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJwaXhlbHMiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSb3dzIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiU3BhY2luZyI6ICI8PEluc2VydEltYWdlPj4iCisgICAgICAgIH0sCisgICAgICAgICJVbnNhdmVkQ2hhbmdlcyI6IHsKKyAgICAgICAgICAgICJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhlIGVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJXZWJLaXQiOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIjw8R2Vja28+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlhpbmhhIjogeworICAgICAgICAgICAgIiYjODIxMjsgZm9udCAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIiYjODIxMjsgc2l6ZSAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiMSAoOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIyICgxMCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIzICgxMiBwdCkiOiAiIiwKKyAgICAgICAgICAgICI0ICgxNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI1ICgxOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI2ICgyNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI3ICgzNiBwdCkiOiAiIiwKKyAgICAgICAgICAgICJBZGRyZXNzIjogIiIsCisgICAgICAgICAgICAiQXJpYWwiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBjb250ZW50IHBhc3RlZCBmcm9tIFdvcmQiOiAiIiwKKyAgICAgICAgICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiIiwKKyAgICAgICAgICAgICJDbG9zZSI6ICIiLAorICAgICAgICAgICAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAiIiwKKyAgICAgICAgICAgICJDb3VyaWVyIE5ldyI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBTdGF0dXNiYXIiOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgVG9vbGJhciI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMCAoemVybykiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTEgLi4gQ1RSTC02IjogIiIsCisgICAgICAgICAgICAiQ1RSTC1BIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1CIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1DIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1FIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1JIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1KIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1MIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1OIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1SIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1TIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1VIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1WIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1YIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1ZIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1aIjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICIiLAorICAgICAgICAgICAgIkVkaXRvciBIZWxwIjogIiIsCisgICAgICAgICAgICAiRU5URVIiOiAiIiwKKyAgICAgICAgICAgICJFcnJvciBMb2FkaW5nIFhpbmhhLiAgRGV2ZWxvcGVycywgY2hlY2sgdGhlIEVycm9yIENvbnNvbGUgZm9yIGluZm9ybWF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGluZyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdHRlZCI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYXRlIFhpbmhhIGZyYW1ld29yayI6ICIiLAorICAgICAgICAgICAgIkdlb3JnaWEiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDEiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDIiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDMiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDQiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDUiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDYiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5ncyI6ICIiLAorICAgICAgICAgICAgIkltcGFjdCI6ICIiLAorICAgICAgICAgICAgIkluaXQgZWRpdG9yIHNpemUiOiAiIiwKKyAgICAgICAgICAgICJpbnNlcnQgbGluZWJyZWFrIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICIiLAorICAgICAgICAgICAgIktleWJvYXJkIHNob3J0Y3V0cyI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgQ29yZSI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ISI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbnMiOiAiIiwKKyAgICAgICAgICAgICJNUyBXb3JkIENsZWFuZXIiOiAiIiwKKyAgICAgICAgICAgICJuZXcgcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiTm9ybWFsIjogIiIsCisgICAgICAgICAgICAiUHJpbnQgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJSZWdpc3RlciBwbHVnaW4gJHBsdWdpbiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBhcyI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCBhbGwiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIlNISUZULUVOVEVSIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgQmxvY2siOiAiIiwKKyAgICAgICAgICAgICJUYWhvbWEiOiAiIiwKKyAgICAgICAgICAgICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAiIiwKKyAgICAgICAgICAgICJUaW1lcyBOZXcgUm9tYW4iOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgQm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIlRvdWNoIGhlcmUgZmlyc3QgdG8gYWN0aXZhdGUgZWRpdG9yLiI6ICIiLAorICAgICAgICAgICAgIlZlcmRhbmEiOiAiIiwKKyAgICAgICAgICAgICJXYWl0aW5nIGZvciBJZnJhbWUgdG8gbG9hZC4uLiI6ICIiLAorICAgICAgICAgICAgIldpbmdEaW5ncyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJSZW1vdmUgQ3VycmVudCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IEJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJTZXQgcGFnZSBiYWNrZ3JvdW5kIGltYWdlIjogIiIsCisgICAgICAgICAgICAiU2V0IFBhZ2UgQmFja2dyb3VuZCBJbWFnZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDbGllbnRzaWRlU3BlbGxjaGVjayI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIENMSUVOVFNJREVTUEVMTENIRUNLIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrIHVzaW5nIGllU3BlbGwiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTAlIjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICIiLAorICAgICAgICAgICAgIjIwMCUiOiAiIiwKKyAgICAgICAgICAgICIyNSUiOiAiIiwKKyAgICAgICAgICAgICI1MCUiOiAiIiwKKyAgICAgICAgICAgICI3NSUiOiAiIiwKKyAgICAgICAgICAgICI+TGlzdCBWaWV3IjogIiIsCisgICAgICAgICAgICAiPlRodW1ibmFpbCBWaWV3IjogIiIsCisgICAgICAgICAgICAiQToiOiAiIiwKKyAgICAgICAgICAgICJBbGlnbiI6ICIiLAorICAgICAgICAgICAgIkFsdCI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciBDb2xvciI6ICIiLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkNyb3AiOiAiIiwKKyAgICAgICAgICAgICJEOiI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICIiLAorICAgICAgICAgICAgIkVkaXQiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiIiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiIiwKKyAgICAgICAgICAgICJGaWxlc2l6ZToiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIEhvcml6b250YWwiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIEltYWdlIjogIiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciI6ICIiLAorICAgICAgICAgICAgIkdJRiI6ICIiLAorICAgICAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICIiLAorICAgICAgICAgICAgIkg6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiIiwKKyAgICAgICAgICAgICJKUEVHIEhpZ2giOiAiIiwKKyAgICAgICAgICAgICJKUEVHIExvdyI6ICIiLAorICAgICAgICAgICAgIkpQRUcgTWVkaXVtIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyI6ICIiLAorICAgICAgICAgICAgIkxvY2siOiAiIiwKKyAgICAgICAgICAgICJNYXJrZXIiOiAiIiwKKyAgICAgICAgICAgICJNYXhpbXVtIGZvbGRlciBzaXplIGxpbWl0IHJlYWNoZWQuIFVwbG9hZCBkaXNhYmxlZC4iOiAiIiwKKyAgICAgICAgICAgICJNZWFzdXJlIjogIiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICIiLAorICAgICAgICAgICAgIk5vIEZpbGVzIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHZhbHVlIjogIiIsCisgICAgICAgICAgICAiUE5HIjogIiIsCisgICAgICAgICAgICAiUHJlc2V0IjogIiIsCisgICAgICAgICAgICAiUXVhbGl0eToiOiAiIiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIiIsCisgICAgICAgICAgICAiUmVuYW1lIjogIiIsCisgICAgICAgICAgICAiUmVzaXplIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJTdGFydCBYOiI6ICIiLAorICAgICAgICAgICAgIlN0YXJ0IFk6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlRvZ2dsZSBtYXJrZXIgY29sb3IiOiAiIiwKKyAgICAgICAgICAgICJUcmFzaCI6ICIiLAorICAgICAgICAgICAgIlVwbG9hZCI6ICIiLAorICAgICAgICAgICAgIlc6IjogIiIsCisgICAgICAgICAgICAiWDoiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJZOiI6ICIiLAorICAgICAgICAgICAgIlpvb20iOiAiIiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3JkZXIiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNsZWFyIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiQ29sb3IiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJDb3B5IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiQ3V0IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiSGVpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiPDxNb290b29sc0ZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJNYXJnaW4iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQYWRkaW5nIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIlNhdmUiOiAiPDxTYXZlU3VibWl0Pj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUaXRsZSAodG9vbHRpcCkiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIlRvcCI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJXaWR0aCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIldpZHRoOiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiRmlsdGVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbHRlciI6ICI8PEluc2VydFNuaXBwZXQyPj4iCisgICAgICAgIH0sCisgICAgICAgICJIdG1sVGlkeSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEhUTUxUSURZIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkF1dG8tVGlkeSI6ICIiLAorICAgICAgICAgICAgIkRvbid0IFRpZHkiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIFRpZHkiOiAiIiwKKyAgICAgICAgICAgICJUaWR5IGZhaWxlZC4gIENoZWNrIHlvdXIgSFRNTCBmb3Igc3ludGF4IGVycm9ycy4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFuZ2xlOiI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgUGljdHVyZXMiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFVzZXJuYW1lL0VtYWlsIjogIiIsCisgICAgICAgICAgICAiRm9sZGVyIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgTGlzdCI6ICIiLAorICAgICAgICAgICAgIktleXdvcmQiOiAiIiwKKyAgICAgICAgICAgICJObyBJbWFnZXMgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBQaG90b3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBWaWRlb3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIFNlcnZlciI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBVc2VybmFtZSI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW8gTGlzdCI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW9zIjogIiIsCisgICAgICAgICAgICAiQToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJDbGVhciI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQ3JvcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJFZGl0IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiR0lGIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIEhpZ2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgTG93IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIE1lZGl1bSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxvY2siOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1hcmtlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlBORyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZXNpemUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUm90YXRlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlN0YXJ0IFk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlRyYXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJXOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJCZWhhdmlvcjoiOiAiIiwKKyAgICAgICAgICAgICJDb250aW51b3VzIjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uOiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBzY3JvbGxpbmcgbWFycXVlZSI6ICIiLAorICAgICAgICAgICAgIk1hcnF1ZWUgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIEFtb3VudDoiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgRGVsYXk6IjogIiIsCisgICAgICAgICAgICAiU2xpZGUiOiAiIiwKKyAgICAgICAgICAgICJTcGVlZCBDb250cm9sIjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJOYW1lIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlRleHQ6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBub3QgZGVmaW5lZCI6ICIiLAorICAgICAgICAgICAgIk9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiIE9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiVXBsb2FkIGZpbGUiOiAiIiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbDoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkltYWdlIFVSTDoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJMYXlvdXQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlNpemUiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTcGFjaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRvcCI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVmVydGljYWw6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEyMCUiOiAiIiwKKyAgICAgICAgICAgICIxNTAlIjogIiIsCisgICAgICAgICAgICAiODAlIjogIiIsCisgICAgICAgICAgICAiQWRkIEdVSURPIENvZGUgaW4gYSB0ZXh0Ym94IG9uIHRoZSBwYWdlIjogIiIsCisgICAgICAgICAgICAiQWRkIE1JREkgbGluayB0byBhbGxvdyBzdHVkZW50cyB0byBoZWFyIHRoZSBtdXNpYyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdCI6ICIiLAorICAgICAgICAgICAgIkdVSURPIENvZGUiOiAiIiwKKyAgICAgICAgICAgICJHdWlkbyBjb2RlIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgaW4gYXBwbGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEdVSURPIE11c2ljIE5vdGF0aW9uIjogIiIsCisgICAgICAgICAgICAiTUlESSBGaWxlIjogIiIsCisgICAgICAgICAgICAiU291cmNlIENvZGUiOiAiIiwKKyAgICAgICAgICAgICJXaXRoIE1vemlsbGEsIHRoZSBhcHBsZXQgd2lsbCBub3QgYmUgdmlzaWJsZSBpbiBlZGl0b3IsIGJ1dCBvbmx5IGluIFdlYiBwYWdlIGFmdGVyIHN1Ym1pdHRpbmcuIjogIiIsCisgICAgICAgICAgICAiWm9vbSA6IjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiWm9vbSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgR2VhcnMgaW4gb3JkZXIgdG8gdXNlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UgYW5kIGNvbmZpZ3VyYXRpb24uIjogIiIsCisgICAgICAgICAgICAiRW5hYmxpbmcgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIkluc3RhbGwiOiAiIiwKKyAgICAgICAgICAgICJMZWFybiBBYm91dCBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIHJlbG9hZCB0aGUgcGFnZSwgY2F1c2luZyB5b3UgdG8gbG9zZSBhbnkgdW5zYXZlZCB3b3JrLiAgUHJlc3MgXCJPS1wiIHRvIHJlbG9hZC4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSB1c2VzIEdvb2dsZSBHZWFycyB0byBlbmFibGUgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZS4gIFdpdGggR2VhcnMgaW5zdGFsbGVkLCB5b3UgY2FuIHNhdmUgZHJhZnRzIG9mIHlvdXIgZG9jdW1lbnRzIG9uIHlvdXIgaGFyZCBkcml2ZSwgY29uZmlndXJlIFhpbmhhIHRvIGxvb2sgdGhlIHdheSB5b3Ugd2FudCwgYW5kIGNhcnJ5IHRoaXMgaW5mb3JtYXRpb24gd2hlcmV2ZXIgeW91IHVzZSBYaW5oYSBvbiB0aGUgd2ViLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQU1NlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbGU6ICI6ICIiLAorICAgICAgICAgICAgIkltcG9ydCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQZXJzaXN0ZW50U3RvcmFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkRldGFpbHMiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIEJyb3dzZXIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgICBUaGVyZSBDICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICBUaGVyZSBBICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvIFwiIFRoZXJlIEIgXCIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAnIFRoZXJlIEQgJyI6ICIiLAorICAgICAgICAgICAgIkxpc3Qgb2YgUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiTmV3IERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiT3BlbiI6ICIiLAorICAgICAgICAgICAgIk9wZW4gRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB5b3UnZCBsaWtlIHRvIGNyZWF0ZS4iOiAiIiwKKyAgICAgICAgICAgICJTYXZlIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGVyYXNlIGFueSB1bnNhdmVkIGNvbnRlbnQuICBJZiB5b3UncmUgY2VydGFpbiwgcGxlYXNlIGNsaWNrIE9LIHRvIGNvbnRpbnVlLiI6ICIiLAorICAgICAgICAgICAgIldlYiBVUkwiOiAiIiwKKyAgICAgICAgICAgICJDb25maXJtIjogIjw8UFNMb2NhbD4+IiwKKyAgICAgICAgICAgICJDb3B5IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGVuYW1lIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQiOiAiPDxJbnNlcnROb3RlPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlNhdmUiOiAiPDxTYXZlU3VibWl0Pj4iLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiU3BlbGxDaGVja2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogU1BFTExDSEVDS0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkRpY3Rpb25hcnkiOiAiIiwKKyAgICAgICAgICAgICJGaW5pc2hlZCBsaXN0IG9mIG1pc3BlbGxlZCB3b3JkcyI6ICIiLAorICAgICAgICAgICAgIkhUTUxBcmVhIFNwZWxsIENoZWNrZXIiOiAiIiwKKyAgICAgICAgICAgICJJIHdpbGwgb3BlbiBpdCBpbiBhIG5ldyBwYWdlLiI6ICIiLAorICAgICAgICAgICAgIklnbm9yZSI6ICIiLAorICAgICAgICAgICAgIklnbm9yZSBhbGwiOiAiIiwKKyAgICAgICAgICAgICJJbmZvIjogIiIsCisgICAgICAgICAgICAiTGVhcm4iOiAiIiwKKyAgICAgICAgICAgICJObyBtaXNwZWxsZWQgd29yZHMgZm91bmQgd2l0aCB0aGUgc2VsZWN0ZWQgZGljdGlvbmFyeS4iOiAiIiwKKyAgICAgICAgICAgICJPcmlnaW5hbCB3b3JkIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byBvcGVuIHRoaXMgbGluayI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSB3YWl0LiAgQ2FsbGluZyBzcGVsbCBjaGVja2VyLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSB3YWl0OiBjaGFuZ2luZyBkaWN0aW9uYXJ5IHRvIjogIiIsCisgICAgICAgICAgICAicGxpeiB3ZWl0IDstKSI6ICIiLAorICAgICAgICAgICAgIlJlLWNoZWNrIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UgYWxsIjogIiIsCisgICAgICAgICAgICAiUmV2ZXJ0IjogIiIsCisgICAgICAgICAgICAiU3BlbGwgQ2hlY2tlciI6ICIiLAorICAgICAgICAgICAgIlNwZWxsLWNoZWNrIjogIiIsCisgICAgICAgICAgICAiU3VnZ2VzdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgZHJvcCBjaGFuZ2VzIGFuZCBxdWl0IHNwZWxsIGNoZWNrZXIuICBQbGVhc2UgY29uZmlybS4iOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIHdpdGgiOiAiPDxGaW5kUmVwbGFjZT4+IgorICAgICAgICB9LAorICAgICAgICAiVGVtcGxhdGUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBURU1QTEFURSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJJbnNlcnQgdGVtcGxhdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiVW5Gb3JtYXQiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBVTkZPUk1BVCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbGwiOiAiIiwKKyAgICAgICAgICAgICJBbGwgSFRNTDoiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBBcmVhIjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgb3B0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdHRpbmc6IjogIiIsCisgICAgICAgICAgICAiUGFnZSBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IHdoaWNoIHR5cGVzIG9mIGZvcm1hdHRpbmcgeW91IHdvdWxkIGxpa2UgdG8gcmVtb3ZlLiI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdGlvbiI6ICIiCisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvZWwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9lbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWU2ODM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvZWwuanMKQEAgLTAsMCArMSwxNTc1IEBACisvLyBYaW5oYSBMYW5ndWFnZSBDb21iaW5lZCBUcmFuc2xhdGlvbiBGaWxlCisvLworLy8gTEFORzogImVsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU5TVFJVQ1RJT05TIFRPIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBZb3VyIHRyYW5zbGF0aW9uIG11c3QgYmUgaW4gVVRGLTggQ2hhcmFjdGVyIEVuY29kaW5nLgorLy8KKy8vIFRoaXMgaXMgYSBKU09OIGVuY29kZWQgZmlsZSAocGx1cyBjb21tZW50cyksIHN0cmluZ3Mgc2hvdWxkIGJlIGRvdWJsZS1xdW90ZQorLy8gb25seSwgZG8gbm90IHVzZSBzaW5nbGUgcXVvdGVzIHRvIHN1cnJvdW5kIHN0cmluZ3MgLSAiaGVsbG8iLCBub3QgJ2hlbGxvJworLy8gZG8gbm90IGhhdmUgYSB0cmFpbGluZyBjb21tYSBhZnRlciB0aGUgbGFzdCBlbnRyeSBpbiBhIHNlY3Rpb24uCisvLworLy8gT25seSBmdWxsIGxpbmUgY29tbWVudHMgYXJlIGFsbG93ZWQgKHRoYXQgYSBjb21tZW50cyBvY2N1cHkgZW50aXJlIGxpbmVzKS4KKy8vCisvLyBTZWFyY2ggZm9yIHRoZSBfX05FV19UUkFOU0xBVElPTlNfXyBzZWN0aW9uIGJlbG93LCB0aGlzIGlzIHdoZXJlIHlvdSB3aWxsCisvLyB3YW50IHRvIGZvY3VzLCB0aGlzIHNlY3Rpb24gaW5jbHVkZXMgdGhpbmdzIHRoYXQgZG8gbm90IHByZXNlbnRseSBoYXZlIGEgCisvLyB0cmFuc2xhdGlvbiBvciBmb3Igd2hpY2ggdGhlIHRyYW5zbGF0aW9uIG5lZWRzIHRvIGJlIGNoZWNrZWQgZm9yIGFjY3VyYWN5LgorLy8KKy8vIEluIHRoZSBOZXcgVHJhbnNsYXRpb25zIHNlY3Rpb24gYSB0cmFuc2xhdGlvbiBzdHJpbmcgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcKKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIiIKKy8vICAgICBUaGlzIG1lYW5zIGl0IGlzIG5vdCB0cmFuc2xhdGVkIHlldCwgYWRkIHlvdXIgdHJhbnNsYXRpb24uLi4KKy8vICAgICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiS2xpbmdvbiBTdHJpbmcgSGVyZSIKKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIlRyYW5zbGF0ZWQgU3RyaW5nIEhlcmUiCisvLyAgICAgVGhpcyBtZWFucyB0aGF0IGFuIGV4aXN0aW5nIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZywgaW4gc29tZSBvdGhlcgorLy8gICAgIHNlY3Rpb24gaGFzIGJlZW4gZm91bmQsIGFuZCB1c2VkLiAgQ2hlY2sgdGhhdCBpdCBpcyBhcHByb3ByaXRlIGZvciB0aGlzCisvLyAgICAgc2VjdGlvbiBhbmQgaWYgaXQgaXMsIHRoYXQncyBmaW5lIGxlYXZlIGl0IGFzIGlzLCBvdGhlcndpc2UgY2hhbmdlIGFzCisvLyAgICAgYXBwcm9wcmlhdGUuCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICI8PEFub3RoZXJTZWN0aW9uPj4iCisvLyAgICAgVGhpcyBtZWFucyB1c2UgdGhlIHNhbWUgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nIGFzIDw8QW5vdGhlclNlY3Rpb24+PgorLy8gICAgIHRoaXMgc2F2ZXMgeW91IHJlLXRyYW5sYXRpbmcgc3RyaW5ncy4gIElmIHRoZSBDb250ZXh0IG9mIHRoaXMgc2VjdGlvbgorLy8gICAgIGFuZCB0aGUgY29udGV4dCBvZiBBbm90aGVyU2VjdGlvbiBzZWVtIHRoZSBzYW1lLCB0aGF0J3MgZmluZSBsZWF2ZSBpdAorLy8gICAgIHVzaW5nIHRoYXQgdHJhbnNsYXRpb24sIGJ1dCBpZiB0aGlzIHNlY3Rpb24gbmVlZHMgYSBkaWZmZXJlbnQgdHJhbnNsYXRpb24sIAorLy8gICAgIHlvdSBjYW4gcHJvdmlkZSBpdCBieSByZXBsYWNpbmcgdGhlIGxpbmsgKDw8QW5vdGhlclNlY3Rpb24+Pikgd2l0aCB0aGF0CisvLyAgICAgbmV3IHRyYW5zbGF0aW9uLiAgRm9yIGV4YW1wbGUgLSBhICJUYWJsZSIgaW4gc2F5ICJEYXRhUGx1Z2luIiBpcyAKKy8vICAgICBwZXJoYXBzIHRyYW5zbGF0ZWQgZGlmZmVyZW50bHkgdG8gIlRhYmxlIiBpbiAiRnVybml0dXJlUGx1Z2luIi4KKy8vCisvLyBURVNUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IHBsYWNlIHlvdXIgdHJhbnNsYXRpb24gZmlsZSBvbiB5b3VyIHdlYnNlcnZlciBzb21ld2hlcmUgZm9yIGV4YW1wbGUKKy8vCisvLyAgIC94aW5oYS9sYW5nL21lcmdlZC9lbC5qcworLy8KKy8vIGFuZCB0aGVuIHRlbGwgWGluaGEgd2hlcmUgdG8gZ2V0IGl0IChiZWZvcmUgbG9hZGluZyBYaW5oYUNvcmUuanMpIGJ5IAorLy8KKy8vICBfZWRpdG9yX2xhbmcgICAgICAgICAgICAgID0gJ2VsJzsKKy8vICBfZWRpdG9yX2xhbmdfbWVyZ2VkX2ZpbGUgID0gJy94aW5oYS9sYW5nL21lcmdlZC9lbC5qcyc7CisvLworLy8gWGluaGEgd2lsbCBsb2FkIHlvdXIgbmV3IGxhbmd1YWdlIGRlZmluaXRpb24uCisvLworLy8gU1VCTUlUVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBjcmVhdGUgYSBUaWNrZXQgb24gdGhlIFhpbmhhIHdlYnNpdGUgYW5kIGF0dGFjaCB5b3VyIHRyYW5zbGF0aW9uIAorLy8gZmlsZS4KKy8vCisvLyBUaGUgWGluaGEgZGV2ZWxvcGVycyB3aWxsIHRha2UgeW91ciBmaWxlIGFuZCB1c2UgdGhlIAorLy8gICAgIGNvbnRyaWIvbGNfc3BsaXRfbWVyZ2VkX2ZpbGUucGhwCisvLyBzY3JpcHQgdG8gbG9hZCBpdCBpbnRvIHRoZSBYaW5oYSBkaXN0cmlidXRpb24uCisKK3sKKyAgICAiQWJicmV2aWF0aW9uIjogeworICAgICAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAgICAgIk9LIjogIs6Vzr3PhM6szr7Otc65IgorICAgIH0sCisgICAgIkFib3V0Qm94IjogeworICAgICAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAizqDOu863z4HOv8+Gzr/Pgc6vzrXPgiIKKyAgICB9LAorICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciCisgICAgfSwKKyAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICJDb2xvcjogIjogIs6nz4HPjs68zrEiLAorICAgICAgICAiT0siOiAizpXOvc+EzqzOvs61zrkiCisgICAgfSwKKyAgICAiQ29udGV4dE1lbnUiOiB7CisgICAgICAgICJDX2VsbCBQcm9wZXJ0aWVzLi4uIjogIs6ZzrTOuc+Mz4TOt8+EzrXPgiDOus61zrvOuc6/z40uLi4iLAorICAgICAgICAiQ2hlY19rIExpbmsuLi4iOiAizojOu861zrPPh86/z4Igz4PPhc69zrTOrc+DzrzPic69Li4uIiwKKyAgICAgICAgIkNvcHkiOiAizpHOvc+EzrnOs8+BzrHPhs6uIiwKKyAgICAgICAgIkNyZWF0ZSBhIGxpbmsiOiAizpTOt868zrnOv8+Fz4HOs86vzrEgz4PPhc69zrTOrc+DzrzOv8+FIiwKKyAgICAgICAgIkN1cnJlbnQgVVJMIGlzIjogIs6kzr8gz4TPgc6tz4fPic69IFVSTCDOtc6vzr3Osc65IiwKKyAgICAgICAgIkN1dCI6ICLOkc+Azr/Ous6/z4DOriIsCisgICAgICAgICJEZV9sZXRlIENvbHVtbiI6ICLOlM65zrHOs8+BzrHPhs6uIM+Dz4TOrs67zrfPgiIsCisgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgY29sdW1uIjogIs6UzrnOsc6zz4HOsc+Gzq4gzrXPgM65zrvOtc6zzrzOrc69zrfPgiDPg8+Ezq7Ou863z4IiLAorICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IHJvdyI6ICLOlM65zrHOs8+BzrHPhs6uIM61z4DOuc67zrXOs868zq3Ovc63z4IgzrPPgc6xzrzOvM6uz4IiLAorICAgICAgICAiSG93IGRpZCB5b3UgZ2V0IGhlcmU/IChQbGVhc2UgcmVwb3J0ISkiOiAizqDPjs+CIM6uz4HOuM6xz4TOtSDOvM6tz4fPgc65IM61zrTPjjsgKM6gzrHPgc6xzrrOsc67zr/Pjc68zrUgzrHOvc6xz4bOrc+BzrXPhM61IM+Ezr8hKSIsCisgICAgICAgICJJX25zZXJ0IFJvdyBCZWZvcmUiOiAizpXOuc+DzrHOs8+JzrPOriDOs8+BzrHOvM68zq7PgiDPgM+BzrnOvSIsCisgICAgICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICLOlc65z4POsc6zz4nOs86uIM6zz4HOsc68zrzOrs+CIM68zrXPhM6sIiwKKyAgICAgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIs6VzrnPg86xzrPPic6zzq4gz4PPhM6uzrvOt8+CIM68zrXPhM6sIiwKKyAgICAgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICLOlc65z4POsc6zz4nOs86uIM+Dz4TOrs67zrfPgiDPgM+BzrnOvSIsCisgICAgICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICLOlc65z4POsc6zz4nOs86uIM69zq3Osc+CIM+Dz4TOrs67zrfPgiDOvM61z4TOrCDPhM63zr0gzrXPgM65zrvOtc6zzrzOrc69zrciLAorICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIs6VzrnPg86xzrPPic6zzq4gzr3Orc6xz4Igz4PPhM6uzrvOt8+CIM+Az4HOuc69IM+EzrfOvSDOtc+AzrnOu861zrPOvM6tzr3OtyIsCisgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICLOlc65z4POsc6zz4nOs86uIM68zrnOsc+CIM69zq3Osc+CIM6zz4HOsc68zrzOrs+CIM68zrXPhM6sIM+EzrfOvSDOtc+AzrnOu861zrPOvM6tzr3OtyIsCisgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAizpXOuc+DzrHOs8+JzrPOriDOvM65zrHPgiDOvc6tzrHPgiDOs8+BzrHOvM68zq7PgiDPgM+BzrnOvSDPhM63zr0gzrXPgM65zrvOtc6zzrzOrc69zrciLAorICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAizqPPhM6/zq/Ph863z4POtyDOms6tzr3PhM+Bzr8iLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIs6gzrvOrs+BzrfPgiDOo8+Ezr/Or8+HzrfPg863IiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICLOo8+Ezr/Or8+HzrfPg863IM6Rz4HOuc+Dz4TOtc+BzqwiLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICLOo8+Ezr/Or8+HzrfPg863IM6UzrXOvs65zqwiLAorICAgICAgICAiTGluayBwb2ludHMgdG86IjogIs6kzr8gz4TPgc6tz4fPic69IFVSTCDOtc6vzr3Osc65IiwKKyAgICAgICAgIk1ha2UgbGluX2suLi4iOiAizpTOt868zrnOv8+Fz4HOs86vzrEgz4PPhc69zrTOrc+DzrzOv8+FLi4uIiwKKyAgICAgICAgIk9wZW5zIHRoaXMgbGluayBpbiBhIG5ldyB3aW5kb3ciOiAizpHOvc6/zq/Os861zrkgzrHPhc+Ez4wgz4TOv869IM+Dz43Ovc60zrXPg868zr8gz4POtSDOrc69zrEgzr3Orc6/IM+AzrHPgc6szrjPhc+Bzr8iLAorICAgICAgICAiUGFzdGUiOiAizpXPgM65zrrPjM67zrvOt8+DzrciLAorICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICLOlc6vz4PPhM61IM6yzq3Oss6xzrnOv8+CIM+Az4nPgiDOuM6tzrvOtc+EzrUgzr3OsSDOsc+GzrHOuc+Bzq3Pg861z4TOtSDPhM6/zr0gz4PPjc69zrTOtc+DzrzOvyDOsc+Az4wgzrHPhc+Ez4wgz4TOvyDPg8+Ezr/Ouc+HzrXOr86/OiIsCisgICAgICAgICJSb193IFByb3BlcnRpZXMuLi4iOiAizpnOtM65z4zPhM63z4TOtc+CIM6zz4HOsc68zrzOrs+CLi4uIiwKKyAgICAgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAizpnOtM65z4zPhM63z4TOtc+CIM66zrXOu865zr/PjS4uLiIsCisgICAgICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICLOlc68z4bOrM69zrnPg863IM60zrnOsc67z4zOs86/z4UgzrzOtSDPhM65z4IgzpnOtM65z4zPhM63z4TOtc+CIM6gzq/Ovc6xzrrOsSIsCisgICAgICAgICJTaG93IHRoZSBUYWJsZSBSb3cgUHJvcGVydGllcyBkaWFsb2ciOiAizpnOtM65z4zPhM63z4TOtc+CIM6zz4HOsc68zrzOrs+CLi4uIiwKKyAgICAgICAgIlNob3cgdGhlIGltYWdlIHByb3BlcnRpZXMgZGlhbG9nIjogIs6ZzrTOuc+Mz4TOt8+EzrXPgiDOlc65zrrPjM69zrHPgi4uLiIsCisgICAgICAgICJVbmxpbmsgdGhlIGN1cnJlbnQgZWxlbWVudCI6ICLOkc+GzrHOr8+BzrXPg863IM+Dz4XOvc60zq3Pg868zr/PhSDOsc+Az4wgz4TOvyDPgM6xz4HPjs69IM+Dz4TOv865z4fOtc6vzr8iLAorICAgICAgICAiX0RlbGV0ZSBSb3ciOiAizpTOuc6xzrPPgc6xz4bOriDOs8+BzrHOvM68zq7PgiIsCisgICAgICAgICJfSW1hZ2UgUHJvcGVydGllcy4uLiI6ICLOmc60zrnPjM+EzrfPhM61z4IgzpXOuc66z4zOvc6xz4IuLi4iLAorICAgICAgICAiX01vZGlmeSBMaW5rLi4uIjogIs6kz4HOv8+Azr/PgM6/zq/Ot8+Dzrcgz4PPhc69zrTOrc+DzrzOv8+FLi4uIiwKKyAgICAgICAgIl9SZW1vdmUgTGluay4uLiI6ICLOlM65zrHOs8+BzrHPhs6uIM+Dz4XOvc60zq3Pg868zr/PhS4uLiIsCisgICAgICAgICJfVGFibGUgUHJvcGVydGllcy4uLiI6ICLOmc60zrnPjM+EzrfPhM61z4Igz4DOr869zrHOus6xLi4uIgorICAgIH0sCisgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIs6VzrnPg86xzrPPic6zzq4vzqTPgc6/z4DOv8+Azr/Or863z4POtyDPg8+Nzr3OtM61z4POvM6/z4UiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICLOnc6tzr8gz4DOsc+BzqzOuM+Fz4HOvyAoX2JsYW5rKSIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIs6azrHOvc6tzr3OsSAoz4fPgc6uz4POtyDOsc+Az4zOu8+Fz4TOv8+FKSIsCisgICAgICAgICJPSyI6ICLOlc69z4TOrM6+zrXOuSIsCisgICAgICAgICJPdGhlciI6ICLOkc67zrvOvyIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAizorOtM65zr8gZnJhbWUgKF9zZWxmKSIsCisgICAgICAgICJUYXJnZXQ6IjogIlRhcmdldDoiLAorICAgICAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICLOpM6vz4TOu86/z4IgKHRvb2x0aXApOiIsCisgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIs6gzqzOvc+JIGZyYW1lIChfdG9wKSIsCisgICAgICAgICJVUkw6IjogIlVSTDoiCisgICAgfSwKKyAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLOkc66z43Pgc+Jz4POtyIsCisgICAgICAgICJPSyI6ICLOlc69z4TOrM6+zrXOuSIKKyAgICB9LAorICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLOkc66z43Pgc+Jz4POtyIsCisgICAgICAgICJPSyI6ICLOlc69z4TOrM6+zrXOuSIKKyAgICB9LAorICAgICJFeHRlbmRlZEZpbGVNYW5hZ2VyIjogeworICAgICAgICAiQWxpZ24iOiAizqPPhM6/zq/Ph863z4POtyIsCisgICAgICAgICJCYXNlbGluZSI6ICJCYXNlbGluZSIsCisgICAgICAgICJCb3JkZXIiOiAizqDOtc+Bzq/Os8+BzrHOvM68zrEiLAorICAgICAgICAiQm90dG9tIjogIs6azqzPhM+JIM68zq3Pgc6/z4IiLAorICAgICAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAgICAgIkNvbG9yIjogIs6nz4HPjs68zrEiLAorICAgICAgICAiQ29weSI6ICLOkc69z4TOuc6zz4HOsc+Gzq4iLAorICAgICAgICAiQ3V0IjogIs6Rz4DOv866zr/PgM6uIiwKKyAgICAgICAgIkhlaWdodCI6ICLOjs+Izr/PgiIsCisgICAgICAgICJIZWlnaHQ6IjogIs6Oz4jOv8+CIiwKKyAgICAgICAgIkxlZnQiOiAizpHPgc65z4PPhM61z4HOrCIsCisgICAgICAgICJNYXJnaW4iOiAizqDOtc+BzrnOuM+Oz4HOuc6/IiwKKyAgICAgICAgIk1pZGRsZSI6ICLOms6tzr3PhM+Bzr8iLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICLOnc6tzr8gz4DOsc+BzqzOuM+Fz4HOvyAoX2JsYW5rKSIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIs6azrHOvc6tzr3OsSAoz4fPgc6uz4POtyDOsc+Az4zOu8+Fz4TOv8+FKSIsCisgICAgICAgICJPSyI6ICLOlc69z4TOrM6+zrXOuSIsCisgICAgICAgICJQYWRkaW5nIjogIs6Vz4POv8+Hzq4iLAorICAgICAgICAiUmlnaHQiOiAizpTOtc6+zrnOrCIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAizorOtM65zr8gZnJhbWUgKF9zZWxmKSIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCkiOiAizqTOr8+EzrvOv8+CICh0b29sdGlwKToiLAorICAgICAgICAiVG9wIjogIs6gzqzOvc+JIiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAizqDOrM69z4kgZnJhbWUgKF90b3ApIiwKKyAgICAgICAgIldpZHRoIjogIs6gzrvOrM+Ezr/PgiIsCisgICAgICAgICJXaWR0aDoiOiAizqDOu86sz4TOv8+CIgorICAgIH0sCisgICAgIkZvcm1zIjogeworICAgICAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiVVJMIM61zrnOus+Mzr3Osc+CIiwKKyAgICAgICAgIk9LIjogIs6Vzr3PhM6szr7Otc65IgorICAgIH0sCisgICAgIkZ1bGxQYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAgICAgIkRlc2NyaXB0aW9uOiI6ICLOoM61z4HOuc6zz4HOsc+Gzq4iLAorICAgICAgICAiT0siOiAizpXOvc+EzqzOvs61zrkiCisgICAgfSwKKyAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciLAorICAgICAgICAiQ2VudGVyIjogIs6azq3Ovc+Ez4HOvyIsCisgICAgICAgICJDb2xvcjoiOiAizqfPgc+OzrzOsSIsCisgICAgICAgICJIZWlnaHQ6IjogIs6Oz4jOv8+CIiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICLOn8+BzrnOts+Mzr3PhM65zrEgzpPPgc6xzrzOvM6uIiwKKyAgICAgICAgIkxheW91dCI6ICLOlM65zqzPhM6xzr7OtyIsCisgICAgICAgICJMZWZ0IjogIs6Rz4HOuc+Dz4TOtc+BzqwiLAorICAgICAgICAiT0siOiAizpXOvc+EzqzOvs61zrkiLAorICAgICAgICAiUmlnaHQiOiAizpTOtc6+zrnOrCIsCisgICAgICAgICJXaWR0aDoiOiAizqDOu86sz4TOv8+CIiwKKyAgICAgICAgInBlcmNlbnQiOiAiz4TOv865z4IgzrXOus6xz4TPjM69IiwKKyAgICAgICAgInBpeGVscyI6ICJwaXhlbHMiCisgICAgfSwKKyAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAiQmFzZWxpbmUiOiAiQmFzZWxpbmUiLAorICAgICAgICAiQm90dG9tIjogIs6azqzPhM+JIM68zq3Pgc6/z4IiLAorICAgICAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAgICAgIkhlaWdodDoiOiAizo7PiM6/z4IiLAorICAgICAgICAiTGVmdCI6ICLOkc+BzrnPg8+EzrXPgc6sIiwKKyAgICAgICAgIk1pZGRsZSI6ICLOms6tzr3PhM+Bzr8iLAorICAgICAgICAiT0siOiAizpXOvc+EzqzOvs61zrkiLAorICAgICAgICAiUmlnaHQiOiAizpTOtc6+zrnOrCIsCisgICAgICAgICJUb3AiOiAizqDOrM69z4kiLAorICAgICAgICAiV2lkdGg6IjogIs6gzrvOrM+Ezr/PgiIKKyAgICB9LAorICAgICJJbmxpbmVTdHlsZXIiOiB7CisgICAgICAgICJCYWNrZ3JvdW5kIjogIs6mz4zOvc+Ezr8iLAorICAgICAgICAiQmFzZWxpbmUiOiAiQmFzZWxpbmUiLAorICAgICAgICAiQm9yZGVyIjogIs6gzrXPgc6vzrPPgc6xzrzOvM6xIiwKKyAgICAgICAgIkJvdHRvbSI6ICLOms6sz4TPiSDOvM6tz4HOv8+CIiwKKyAgICAgICAgIkNlbnRlciI6ICLOms6tzr3PhM+Bzr8iLAorICAgICAgICAiQ2hhciI6ICLOp86xz4HOsc66z4TOrs+BzrHPgiIsCisgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICLOo8+FzrzPgM+Ez4XOs868zq3Ovc6xIM+AzrXPgc65zrPPgc6szrzOvM6xz4TOsSIsCisgICAgICAgICJGRyBDb2xvciI6ICLOp8+Bz47OvM6xIM6xzr3PhM65zrrOtc65zrzOrc69z4nOvSIsCisgICAgICAgICJGbG9hdCI6ICJGbG9hdCIsCisgICAgICAgICJIZWlnaHQiOiAizo7PiM6/z4IiLAorICAgICAgICAiSW1hZ2UgVVJMIjogIlVSTCDOtc65zrrPjM69zrHPgiIsCisgICAgICAgICJKdXN0aWZ5IjogIs6gzrvOrs+BzrfPgiDPg8+Ezr/Or8+HzrfPg863IiwKKyAgICAgICAgIkxheW91dCI6ICLOlM65zqzPhM6xzr7OtyIsCisgICAgICAgICJMZWZ0IjogIs6Rz4HOuc+Dz4TOtc+BzqwiLAorICAgICAgICAiTWFyZ2luIjogIs6gzrXPgc65zrjPjs+BzrnOvyIsCisgICAgICAgICJNaWRkbGUiOiAizprOrc69z4TPgc6/IiwKKyAgICAgICAgIk5vbmUiOiAizqTOr8+Azr/PhM6xIiwKKyAgICAgICAgIlBhZGRpbmciOiAizpXPg86/z4fOriIsCisgICAgICAgICJSaWdodCI6ICLOlM61zr7Ouc6sIiwKKyAgICAgICAgIlRleHQgYWxpZ24iOiAizqPPhM6/zq/Ph863z4POtyDOus61zrnOvM6tzr3Ov8+FIiwKKyAgICAgICAgIlRvcCI6ICLOoM6szr3PiSIsCisgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICLOms6xz4TOsc66z4zPgc+Fz4bOtyDPg8+Ezr/Or8+HzrfPg863IiwKKyAgICAgICAgIldpZHRoIjogIs6gzrvOrM+Ezr/PgiIsCisgICAgICAgICJwZXJjZW50IjogIs+Ezr/Ouc+CIM61zrrOsc+Ez4zOvSIsCisgICAgICAgICJwaXhlbHMiOiAicGl4ZWxzIgorICAgIH0sCisgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLOkc66z43Pgc+Jz4POtyIsCisgICAgICAgICJPSyI6ICLOlc69z4TOrM6+zrXOuSIKKyAgICB9LAorICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgIkJhc2VsaW5lIjogIkJhc2VsaW5lIiwKKyAgICAgICAgIkJvdHRvbSI6ICLOms6sz4TPiSDOvM6tz4HOv8+CIiwKKyAgICAgICAgIkNhbmNlbCI6ICLOkc66z43Pgc+Jz4POtyIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIlVSTCDOtc65zrrPjM69zrHPgiIsCisgICAgICAgICJMYXlvdXQiOiAizpTOuc6sz4TOsc6+zrciLAorICAgICAgICAiTGVmdCI6ICLOkc+BzrnPg8+EzrXPgc6sIiwKKyAgICAgICAgIk1pZGRsZSI6ICLOms6tzr3PhM+Bzr8iLAorICAgICAgICAiT0siOiAizpXOvc+EzqzOvs61zrkiLAorICAgICAgICAiUmlnaHQiOiAizpTOtc6+zrnOrCIsCisgICAgICAgICJTcGFjaW5nIjogIs6Rz4DOv8+Dz4TOrM+DzrXOuc+CIiwKKyAgICAgICAgIlRvcCI6ICLOoM6szr3PiSIKKyAgICB9LAorICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAgICAgIkhlaWdodDoiOiAizo7PiM6/z4IiLAorICAgICAgICAiTGVmdCI6ICLOkc+BzrnPg8+EzrXPgc6sIiwKKyAgICAgICAgIk9LIjogIs6Vzr3PhM6szr7Otc65IiwKKyAgICAgICAgIlJpZ2h0IjogIs6UzrXOvs65zqwiLAorICAgICAgICAiV2lkdGg6IjogIs6gzrvOrM+Ezr/PgiIKKyAgICB9LAorICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IgorICAgIH0sCisgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICJCYXNlbGluZSI6ICJCYXNlbGluZSIsCisgICAgICAgICJCb3R0b20iOiAizprOrM+Ez4kgzrzOrc+Bzr/PgiIsCisgICAgICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciLAorICAgICAgICAiSGVpZ2h0OiI6ICLOjs+Izr/PgiIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIlVSTCDOtc65zrrPjM69zrHPgiIsCisgICAgICAgICJMYXlvdXQiOiAizpTOuc6sz4TOsc6+zrciLAorICAgICAgICAiTGVmdCI6ICLOkc+BzrnPg8+EzrXPgc6sIiwKKyAgICAgICAgIk1pZGRsZSI6ICLOms6tzr3PhM+Bzr8iLAorICAgICAgICAiT0siOiAizpXOvc+EzqzOvs61zrkiLAorICAgICAgICAiUmlnaHQiOiAizpTOtc6+zrnOrCIsCisgICAgICAgICJTcGFjaW5nIjogIs6Rz4DOv8+Dz4TOrM+DzrXOuc+CIiwKKyAgICAgICAgIlRvcCI6ICLOoM6szr3PiSIsCisgICAgICAgICJXaWR0aDoiOiAizqDOu86sz4TOv8+CIgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciCisgICAgfSwKKyAgICAiSW5zZXJ0U25pcHBldDIiOiB7CisgICAgICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciCisgICAgfSwKKyAgICAiSW5zZXJ0VGFibGUiOiB7CisgICAgICAgICJCYXNlbGluZSI6ICJCYXNlbGluZSIsCisgICAgICAgICJCb3JkZXIiOiAizqDOtc+Bzq/Os8+BzrHOvM68zrEiLAorICAgICAgICAiQm90dG9tIjogIs6azqzPhM+JIM68zq3Pgc6/z4IiLAorICAgICAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAgICAgIkNhcHRpb24iOiAizpvOtc62zqzOvc+EzrEiLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIs6VzrnPg86xzrPPic6zzq4gzqDOr869zrHOus6xIiwKKyAgICAgICAgIkxheW91dCI6ICLOlM65zqzPhM6xzr7OtyIsCisgICAgICAgICJMZWZ0IjogIs6Rz4HOuc+Dz4TOtc+BzqwiLAorICAgICAgICAiTWlkZGxlIjogIs6azq3Ovc+Ez4HOvyIsCisgICAgICAgICJPSyI6ICLOlc69z4TOrM6+zrXOuSIsCisgICAgICAgICJQZXJjZW50IjogIs+Ezr/Ouc+CIM61zrrOsc+Ez4zOvSIsCisgICAgICAgICJQaXhlbHMiOiAicGl4ZWxzIiwKKyAgICAgICAgIlJpZ2h0IjogIs6UzrXOvs65zqwiLAorICAgICAgICAiU3BhY2luZyI6ICLOkc+Azr/Pg8+EzqzPg861zrnPgiIsCisgICAgICAgICJUb3AiOiAizqDOrM69z4kiLAorICAgICAgICAiV2lkdGg6IjogIs6gzrvOrM+Ezr/PgiIKKyAgICB9LAorICAgICJMaW5rZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIs6VzrnPg86xzrPPic6zzq4vzqTPgc6/z4DOv8+Azr/Or863z4POtyDPg8+Nzr3OtM61z4POvM6/z4UiLAorICAgICAgICAiT0siOiAizpXOvc+EzqzOvs61zrkiLAorICAgICAgICAiVGFyZ2V0OiI6ICJUYXJnZXQ6IiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIKKyAgICB9LAorICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAgICAgIk9LIjogIs6Vzr3PhM6szr7Otc65IgorICAgIH0sCisgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciCisgICAgfSwKKyAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAgICAgIk9LIjogIs6Vzr3PhM6szr7Otc65IgorICAgIH0sCisgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAgICAgIkNvcHkiOiAizpHOvc+EzrnOs8+BzrHPhs6uIgorICAgIH0sCisgICAgIlF1aWNrVGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IgorICAgIH0sCisgICAgIlNldElkIjogeworICAgICAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAgICAgIk9LIjogIs6Vzr3PhM6szr7Otc65IgorICAgIH0sCisgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgIk9LIjogIs6Vzr3PhM6szr7Otc65IgorICAgIH0sCisgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLOkc66z43Pgc+Jz4POtyIsCisgICAgICAgICJPSyI6ICLOlc69z4TOrM6+zrXOuSIKKyAgICB9LAorICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAgICAgIk9LIjogIs6Vzr3PhM6szr7Otc65IgorICAgIH0sCisgICAgIlRhYmxlT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgIkFsbCBmb3VyIHNpZGVzIjogIs6azrHOuSDOv865IDQgz4DOu861z4XPgc6tz4IiLAorICAgICAgICAiQm9yZGVycyI6ICLOoM61z4HOuc6zz4HOrM68zrzOsc+EzrEiLAorICAgICAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAgICAgIkNhcHRpb24iOiAizpvOtc62zqzOvc+EzrEiLAorICAgICAgICAiQ2VsbCBQcm9wZXJ0aWVzIjogIs6ZzrTOuc+Mz4TOt8+EzrXPgiDOms61zrvOuc6/z40iLAorICAgICAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogIs6ZzrTOuc+Mz4TOt8+EzrXPgiDOus61zrvOuc6/z40iLAorICAgICAgICAiRGVsZXRlIGNlbGwiOiAizpTOuc6xzrPPgc6xz4bOriDOus61zrvOuc6/z40iLAorICAgICAgICAiRGVsZXRlIGNvbHVtbiI6ICLOlM65zrHOs8+BzrHPhs6uIM+Dz4TOrs67zrfPgiIsCisgICAgICAgICJEZWxldGUgcm93IjogIs6UzrnOsc6zz4HOsc+Gzq4gzrPPgc6xzrzOvM6uz4IiLAorICAgICAgICAiRGVzY3JpcHRpb24iOiAizqDOtc+BzrnOs8+BzrHPhs6uIiwKKyAgICAgICAgIkZyYW1lcyI6ICJGcmFtZXMiLAorICAgICAgICAiSW5zZXJ0IGNlbGwgYWZ0ZXIiOiAizpXOuc+DzrHOs8+JzrPOriDOus61zrvOuc6/z40gzrzOtc+EzqwiLAorICAgICAgICAiSW5zZXJ0IGNlbGwgYmVmb3JlIjogIs6VzrnPg86xzrPPic6zzq4gzrrOtc67zrnOv8+NIM+Az4HOuc69IiwKKyAgICAgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAizpXOuc+DzrHOs8+JzrPOriDPg8+Ezq7Ou863z4IgzrzOtc+EzqwiLAorICAgICAgICAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiOiAizpXOuc+DzrHOs8+JzrPOriDPg8+Ezq7Ou863z4Igz4DPgc65zr0iLAorICAgICAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICLOlc65z4POsc6zz4nOs86uIM6zz4HOsc68zrzOrs+CIM+Az4HOuc69IiwKKyAgICAgICAgIkluc2VydCByb3cgYmVmb3JlIjogIs6VzrnPg86xzrPPic6zzq4gzrPPgc6xzrzOvM6uz4IgzrzOtc+EzqwiLAorICAgICAgICAiTWVyZ2UgY2VsbHMiOiAizqPPhc6zz4fPjs69zrXPhc+DzrcgzrrOtc67zrnPjs69IiwKKyAgICAgICAgIk5vIHJ1bGVzIjogIs6nz4nPgc6vz4IgzpPPgc6xzrzOvM6tz4IiLAorICAgICAgICAiTm8gc2lkZXMiOiAiTm8gc2lkZXMiLAorICAgICAgICAiT0siOiAizpXOvc+EzqzOvs61zrkiLAorICAgICAgICAiUGFkZGluZyI6ICLOlc+Dzr/Ph86uIiwKKyAgICAgICAgIlBsZWFzZSBjbGljayBpbnRvIHNvbWUgY2VsbCI6ICLOms6szr3PhM61IM66zrvOuc66IM68zq3Pg86xIM+DzrUgzrrOrM+Azr/Ouc6/IM66zrXOu86vIiwKKyAgICAgICAgIlJvdyBQcm9wZXJ0aWVzIjogIs6ZzrTOuc+Mz4TOt8+EzrXPgiDOk8+BzrHOvM68zq7PgiIsCisgICAgICAgICJSb3cgcHJvcGVydGllcyI6ICLOmc60zrnPjM+EzrfPhM61z4IgzrPPgc6xzrzOvM6uz4IiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICLOk8+BzrHOvM68zq3PgiDOuM6xIM61zrzPhs6xzr3Or862zr/Ovc+EzrHOuSDOvM61z4TOsc6+z40gz4zOu8+Jzr0gz4TPic69IM6zz4HOsc68zrzPjs69IM66zrHOuSDPg8+EzrfOu8+Ozr0iLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBjb2x1bW5zIG9ubHkiOiAizpPPgc6xzrzOvM6tz4IgzrjOsSDOtc68z4bOsc69zq/Ots6/zr3PhM6xzrkgzrzPjM69zr8gzrzOtc+EzrHOvs+NIM+Dz4TOt867z47OvSIsCisgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIHJvd3Mgb25seSI6ICLOk8+BzrHOvM68zq3PgiDOuM6xIM61zrzPhs6xzr3Or862zr/Ovc+EzrHOuSDOvM+Mzr3OvyDOvM61z4TOsc6+z40gzrPPgc6xzrzOvM+Ozr0iLAorICAgICAgICAiU3BhY2luZyI6ICLOkc+Azr/Pg8+EzqzPg861zrnPgiIsCisgICAgICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogIs6Rz4DOv8+Dz4TOrM+DzrXOuc+CIM66zrHOuSDOtc+Dzr/Ph86tz4IiLAorICAgICAgICAiU3BsaXQgY29sdW1uIjogIs6UzrnOsc6vz4HOtc+Dzrcgz4PPhM6uzrvOt8+CIiwKKyAgICAgICAgIlNwbGl0IHJvdyI6ICLOlM65zrHOr8+BzrXPg863IM6zz4HOsc68zrzOrs+CIiwKKyAgICAgICAgIlN1bW1hcnkiOiAizqPPjc69zr/PiM63IiwKKyAgICAgICAgIlRhYmxlIFByb3BlcnRpZXMiOiAizpnOtM65z4zPhM63z4TOtc+CIM+Azq/Ovc6xzrrOsSIsCisgICAgICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogIs6ZzrTOuc+Mz4TOt8+EzrXPgiDPgM6vzr3Osc66zrEiLAorICAgICAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAizpcgzrrOrM+Ez4kgz4DOu861z4XPgc6sIM68z4zOvc6/IiwKKyAgICAgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIs6XIM6xz4HOuc+Dz4TOtc+Bzq4gz4DOu861z4XPgc6sIM68z4zOvc6/IiwKKyAgICAgICAgIlRoZSByaWdodCBhbmQgbGVmdCBzaWRlcyBvbmx5IjogIs6fzrkgzrTOtc6+zrnOrc+CIM66zrHOuSDOsc+BzrnPg8+EzrXPgc6tz4Igz4DOu861z4XPgc6tz4IgzrzPjM69zr8iLAorICAgICAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIs6XIM60zrXOvs65zqwgz4DOu861z4XPgc6sIM68z4zOvc6/IiwKKyAgICAgICAgIlRoZSB0b3AgYW5kIGJvdHRvbSBzaWRlcyBvbmx5IjogIs6fzrkgz4DOrM69z4kgzrrOsc65IM66zqzPhM+JIM+AzrvOtc+Fz4HOrc+CIM68z4zOvc6/IiwKKyAgICAgICAgIlRoZSB0b3Agc2lkZSBvbmx5IjogIs6XIM+AzqzOvc+JIM+AzrvOtc+Fz4HOrCDOvM+Mzr3OvyIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAizpTOtc69IM68z4DOv8+BzrXOryDOvc6xIM60zrnOsc6zz4HOsc+GzrXOryDPhM6/IM+EzrXOu861z4XPhM6xzq/OvyDOus61zrvOryDPg861IM68zrnOsSDOs8+BzrHOvM68zq4uIiwKKyAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iOiAizpTOtc69IM68z4DOv8+BzrXOryDOvc6xIM60zrnOsc6zz4HOsc+GzrXOryDOtyDPhM61zrvOtc+Fz4TOsc6vzrEgz4PPhM6uzrvOtyDPg861IM6tzr3OsSDPgM6vzr3Osc66zrEuIiwKKyAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iOiAizpTOtc69IM68z4DOv8+BzrXOryDOvc6xIM60zrnOsc6zz4HOsc+GzrXOryDOtyDPhM61zrvOtc+Fz4TOsc6vzrEgzrPPgc6xzrzOvM6uIM+DzrUgzq3Ovc6xIM+Azq/Ovc6xzrrOsS4iLAorICAgICAgICAicGl4ZWxzIjogInBpeGVscyIKKyAgICB9LAorICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLOkc66z43Pgc+Jz4POtyIKKyAgICB9LAorICAgICJVbkZvcm1hdCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLOkc66z43Pgc+Jz4POtyIsCisgICAgICAgICJPSyI6ICLOlc69z4TOrM6+zrXOuSIKKyAgICB9LAorICAgICJYaW5oYSI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIs6gzrvOt8+Bzr/Phs6/z4HOr861z4IiLAorICAgICAgICAiQmFja2dyb3VuZCBDb2xvciI6ICLOp8+Bz47OvM6xIM6mz4zOvc+Ezr/PhSIsCisgICAgICAgICJCb2xkIjogIs6Izr3PhM6/zr3OsSIsCisgICAgICAgICJCdWxsZXRlZCBMaXN0IjogIs6azr/Phc66zrrOr860zrXPgiIsCisgICAgICAgICJDb3B5IHNlbGVjdGlvbiI6ICLOkc69z4TOuc6zz4HOsc+Gzq4iLAorICAgICAgICAiQ3VycmVudCBzdHlsZSI6ICLOoM6xz4HPjs69IM+Dz4TPhc67IiwKKyAgICAgICAgIkN1dCBzZWxlY3Rpb24iOiAizpHPgM6/zrrOv8+Azq4iLAorICAgICAgICAiRGVjcmVhc2UgSW5kZW50IjogIs6czrXOr8+Jz4POtyDOlc+Dzr/Ph86uz4IiLAorICAgICAgICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAizprOsc+EzrXPjc64z4XOvc+DzrcgzrHPgc65z4PPhM61z4HOrCDPgM+Bzr/PgiDOtM61zr7Ouc6sIiwKKyAgICAgICAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIs6azrHPhM61z43OuM+Fzr3Pg863IM6xz4DPjCDOtM61zr7Ouc6sIM+Az4HOv8+CIM+EzrEgzrHPgc65z4PPhM61z4HOrCIsCisgICAgICAgICJGb250IENvbG9yIjogIs6nz4HPjs68zrEgzpPPgc6xzrzOvM6xz4TOv8+DzrXOuc+BzqzPgiIsCisgICAgICAgICJIZWxwIHVzaW5nIGVkaXRvciI6ICLOks6/zq7OuM61zrnOsSIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAizp/Pgc65zrbPjM69z4TOuc6xIM6Tz4HOsc68zrzOriIsCisgICAgICAgICJJbmNyZWFzZSBJbmRlbnQiOiAizpHPjc6+zrfPg863IM6Vz4POv8+Hzq7PgiIsCisgICAgICAgICJJbnNlcnQgVGFibGUiOiAizpXOuc+DzrHOs8+JzrPOriDOoM6vzr3Osc66zrEiLAorICAgICAgICAiSW5zZXJ0IFdlYiBMaW5rIjogIs6VzrnPg86xzrPPic6zzq4gzqPPhc69zrTOrc+DzrzOv8+FIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAizpXOuc+DzrHOs8+JzrPOri/OpM+Bzr/PgM6/z4DOv86vzrfPg863IM6VzrnOus+Mzr3Osc+CIiwKKyAgICAgICAgIkl0YWxpYyI6ICLOoM67zqzOs865zrEiLAorICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAizqPPhM6/zq/Ph865z4POtyDOms6tzr3PhM+Bzr8iLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIs6gzrvOrs+BzrfPgiDOo8+Ezr/Or8+HzrnPg863IiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICLOo8+Ezr/Or8+HzrnPg863IM6Rz4HOuc+Dz4TOtc+BzqwiLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICLOo8+Ezr/Or8+HzrnPg863IM6UzrXOvs65zqwiLAorICAgICAgICAiT3JkZXJlZCBMaXN0IjogIs6Rz4HOr864zrzOt8+DzrciLAorICAgICAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAizpXPgM65zrrPjM67zrvOt8+DzrciLAorICAgICAgICAiUGF0aCI6ICLOlM65zrHOtM+Bzr/OvM6uIiwKKyAgICAgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIs6Vz4DOsc69zrHPhs6/z4HOrCDOsc+Az4wgzrHOvc6xzq/Pgc61z4POtyIsCisgICAgICAgICJTdHJpa2V0aHJvdWdoIjogIs6UzrnOsc6zz4HOsc68zrzOrc69zrEiLAorICAgICAgICAiU3Vic2NyaXB0IjogIs6UzrXOr866z4TOt8+CIiwKKyAgICAgICAgIlN1cGVyc2NyaXB0IjogIs6UzrXOr866z4TOt8+CIiwKKyAgICAgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICLOlc69zrHOu867zrHOs86uIM+DzrUvzrHPgM+MIEhUTUwiLAorICAgICAgICAiVW5kZXJsaW5lIjogIs6lz4DOv86zz4HOsc68zrzOuc+DzrzOrc69zrEiLAorICAgICAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAizpHOvc6xzq/Pgc61z4POtyDPhM61zrvOtc+Fz4TOsc6vzrHPgiDOtc69zq3Pgc6zzrXOuc6xz4IiLAorICAgICAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIs6Vzq/Pg8+EzrUgz4POtSBURVhUIE1PREUuICDOp8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61IM+Ezr8gzrrOv8+FzrzPgM6vIFs8Pl0gzrPOuc6xIM69zrEgzrXPgM6xzr3Orc+BzrjOtc+EzrUgz4PPhM6/IFdZU0lXSUcuIgorICAgIH0sCisgICAgIl9fTkVXX1RSQU5TTEFUSU9OU19fIjogeworICAgICAgICAiQWJicmV2aWF0aW9uIjogeworICAgICAgICAgICAgIkFiYnJldmlhdGlvbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICIiLAorICAgICAgICAgICAgIkV4cGFuc2lvbjoiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQWJvdXRCb3giOiB7CisgICAgICAgICAgICAiQ2xvc2UiOiAiPDxYaW5oYT4+IgorICAgICAgICB9LAorICAgICAgICAiQ2hhckNvdW50ZXIiOiB7CisgICAgICAgICAgICAiLi4uIGluIHByb2dyZXNzIjogIiIsCisgICAgICAgICAgICAiQ2hhcnMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIiIsCisgICAgICAgICAgICAiV29yZHMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2hhcmFjdGVyTWFwIjogeworICAgICAgICAgICAgIkluc2VydCBzcGVjaWFsIGNoYXJhY3RlciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDb2xvclBpY2tlciI6IHsKKyAgICAgICAgICAgICJDbGljayBhIGNvbG9yLi4uIjogIiIsCisgICAgICAgICAgICAiU2FtcGxlIjogIiIsCisgICAgICAgICAgICAiV2ViIFNhZmU6ICI6ICIiLAorICAgICAgICAgICAgIkNsb3NlIjogIjw8WGluaGE+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAgICAgIkRlbGV0ZSBDZWxsIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDZWxsIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBlbGVtZW50OiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ3JlYXRlTGluayI6IHsKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiIiwKKyAgICAgICAgICAgICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGluZyBhIGxpbmsiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRGVmaW5pdGlvbkxpc3QiOiB7CisgICAgICAgICAgICAiZGVmaW5pdGlvbiBkZXNjcmlwdGlvbiI6ICIiLAorICAgICAgICAgICAgImRlZmluaXRpb24gbGlzdCI6ICIiLAorICAgICAgICAgICAgImRlZmluaXRpb24gdGVybSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEaWFsb2dzIjogeworICAgICAgICAgICAgIlNvbWUgVGV4dCBIZXJlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkR5bmFtaWNDU1MiOiB7CisgICAgICAgICAgICAiQ2hvb3NlIHN0eWxlc2hlZXQiOiAiIiwKKyAgICAgICAgICAgICJEZWZhdWx0IjogIiIsCisgICAgICAgICAgICAiVW5kZWZpbmVkIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVkaXRUYWciOiB7CisgICAgICAgICAgICAiRWRpdCBIVE1MIGZvciBzZWxlY3RlZCB0ZXh0IjogIiIsCisgICAgICAgICAgICAiRWRpdCBUYWcgQnkgUGVnIjogIiIsCisgICAgICAgICAgICAiVGFnIEVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgICAgICIhPSI6ICIiLAorICAgICAgICAgICAgIiFpbiI6ICIiLAorICAgICAgICAgICAgIiZndDstIjogIiIsCisgICAgICAgICAgICAiJmd0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZsdDt4Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgIWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAuYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDBgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAzYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDRgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA2YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDdgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA5YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYGVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyZuYnNwO2AxYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgK3s6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC06XFwgYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Atezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgQ2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgY29zYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BsbmAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgcGlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BzaW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRhbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGltZXNgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJnF1b3Q7dGV4dCZxdW90OyI6ICIiLAorICAgICAgICAgICAgIicrZm9ybXVsYSsnIjogIiIsCisgICAgICAgICAgICAiKChuKSwoaykpIjogIiIsCisgICAgICAgICAgICAiKHgrMSkvKHgtMSkiOiAiIiwKKyAgICAgICAgICAgICIqIjogIiIsCisgICAgICAgICAgICAiKioiOiAiIiwKKyAgICAgICAgICAgICIrLSI6ICIiLAorICAgICAgICAgICAgIi0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiLSZsdDsiOiAiIiwKKyAgICAgICAgICAgICItOiI6ICIiLAorICAgICAgICAgICAgIi09IjogIiIsCisgICAgICAgICAgICAiLy8iOiAiIiwKKyAgICAgICAgICAgICIvXyI6ICIiLAorICAgICAgICAgICAgIjouIjogIiIsCisgICAgICAgICAgICAiPSZndDsiOiAiIiwKKyAgICAgICAgICAgICJAIjogIiIsCisgICAgICAgICAgICAiW1thLGJdLFtjLGRdXSI6ICIiLAorICAgICAgICAgICAgIlxcXFwiOiAiIiwKKyAgICAgICAgICAgICJcXG5DbGljayBpbiB0aGUgYm94IHRvIHVzZSB5b3VyIGtleWJvYXJkIG9yIHVzZSB0aGUgYnV0dG9uc1xcbiI6ICIiLAorICAgICAgICAgICAgIl5eIjogIiIsCisgICAgICAgICAgICAiXl5eIjogIiIsCisgICAgICAgICAgICAiX198IjogIiIsCisgICAgICAgICAgICAiX3xfIjogIiIsCisgICAgICAgICAgICAiYCE9YCI6ICIiLAorICAgICAgICAgICAgImAhaW5gIjogIiIsCisgICAgICAgICAgICAiYCZhbmQ7YCI6ICIiLAorICAgICAgICAgICAgImAmY2FwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmN1cDtgIjogIiIsCisgICAgICAgICAgICAiYCZndDstYCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0O3gmZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmb3I7YCI6ICIiLAorICAgICAgICAgICAgImAmcXVvdDt0ZXh0JnF1b3Q7YCI6ICIiLAorICAgICAgICAgICAgImAoKG4pLChrKSlgIjogIiIsCisgICAgICAgICAgICAiYCh4KzEpLyh4LTEpYCI6ICIiLAorICAgICAgICAgICAgImAqKmAiOiAiIiwKKyAgICAgICAgICAgICJgKmAiOiAiIiwKKyAgICAgICAgICAgICJgKy1gIjogIiIsCisgICAgICAgICAgICAiYC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAtJmx0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLTpgIjogIiIsCisgICAgICAgICAgICAiYC09YCI6ICIiLAorICAgICAgICAgICAgImAvL2AiOiAiIiwKKyAgICAgICAgICAgICJgL19gIjogIiIsCisgICAgICAgICAgICAiYDouYCI6ICIiLAorICAgICAgICAgICAgImA9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgQGAiOiAiIiwKKyAgICAgICAgICAgICJgW1thLGJdLFtjLGRdXWAiOiAiIiwKKyAgICAgICAgICAgICJgXFxcXGAiOiAiIiwKKyAgICAgICAgICAgICJgX198YCI6ICIiLAorICAgICAgICAgICAgImBffF9gIjogIiIsCisgICAgICAgICAgICAiYEFBYCI6ICIiLAorICAgICAgICAgICAgImBhbGVwaGAiOiAiIiwKKyAgICAgICAgICAgICJgYWxwaGFgIjogIiIsCisgICAgICAgICAgICAiYGFuZGAiOiAiIiwKKyAgICAgICAgICAgICJgYmFyYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiZXRhYCI6ICIiLAorICAgICAgICAgICAgImBDQ2AiOiAiIiwKKyAgICAgICAgICAgICJgY2NhYCI6ICIiLAorICAgICAgICAgICAgImBjaGlgIjogIiIsCisgICAgICAgICAgICAiYGRhcnJgIjogIiIsCisgICAgICAgICAgICAiYGRkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkZWxgIjogIiIsCisgICAgICAgICAgICAiYERlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGlhbW9uZGAiOiAiIiwKKyAgICAgICAgICAgICJgZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZHkvZHhgIjogIiIsCisgICAgICAgICAgICAiYEVFYCI6ICIiLAorICAgICAgICAgICAgImBlcHNpYCI6ICIiLAorICAgICAgICAgICAgImBldGFgIjogIiIsCisgICAgICAgICAgICAiYGZyYWAiOiAiIiwKKyAgICAgICAgICAgICJgR2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBncmFkYCI6ICIiLAorICAgICAgICAgICAgImBoYXJyYCI6ICIiLAorICAgICAgICAgICAgImBoQXJyYCI6ICIiLAorICAgICAgICAgICAgImBoYXRhYCI6ICIiLAorICAgICAgICAgICAgImBpZmAiOiAiIiwKKyAgICAgICAgICAgICJgaW5gIjogIiIsCisgICAgICAgICAgICAiYGludGAiOiAiIiwKKyAgICAgICAgICAgICJgaW90YWAiOiAiIiwKKyAgICAgICAgICAgICJga2FwcGFgIjogIiIsCisgICAgICAgICAgICAiYExhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBsQXJyYCI6ICIiLAorICAgICAgICAgICAgImBsYXJyYCI6ICIiLAorICAgICAgICAgICAgImBsaW1fKHgtJmd0O29vKWAiOiAiIiwKKyAgICAgICAgICAgICJgbG9nYCI6ICIiLAorICAgICAgICAgICAgImBtdWAiOiAiIiwKKyAgICAgICAgICAgICJgTk5gIjogIiIsCisgICAgICAgICAgICAiYG5uYCI6ICIiLAorICAgICAgICAgICAgImBub3RgIjogIiIsCisgICAgICAgICAgICAiYG51YCI6ICIiLAorICAgICAgICAgICAgImBvK2AiOiAiIiwKKyAgICAgICAgICAgICJgby5gIjogIiIsCisgICAgICAgICAgICAiYE8vYCI6ICIiLAorICAgICAgICAgICAgImBvaW50YCI6ICIiLAorICAgICAgICAgICAgImBvbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgT21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYG9vYCI6ICIiLAorICAgICAgICAgICAgImBvcmAiOiAiIiwKKyAgICAgICAgICAgICJgb3hgIjogIiIsCisgICAgICAgICAgICAiYHBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGhpYCI6ICIiLAorICAgICAgICAgICAgImBQaWAiOiAiIiwKKyAgICAgICAgICAgICJgcGlgIjogIiIsCisgICAgICAgICAgICAiYHByb2RgIjogIiIsCisgICAgICAgICAgICAiYHByb3BgIjogIiIsCisgICAgICAgICAgICAiYFBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgcHNpYCI6ICIiLAorICAgICAgICAgICAgImBRUWAiOiAiIiwKKyAgICAgICAgICAgICJgcXVhZGAiOiAiIiwKKyAgICAgICAgICAgICJgckFycmAiOiAiIiwKKyAgICAgICAgICAgICJgcmhvYCI6ICIiLAorICAgICAgICAgICAgImByb290KG4pKHgpYCI6ICIiLAorICAgICAgICAgICAgImBSUmAiOiAiIiwKKyAgICAgICAgICAgICJgc2ZhYCI6ICIiLAorICAgICAgICAgICAgImBTaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgc2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYHNxcnQoeClgIjogIiIsCisgICAgICAgICAgICAiYHNxdWFyZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3RhY2tyZWwoLSZndDspKCspYCI6ICIiLAorICAgICAgICAgICAgImBzdWJgIjogIiIsCisgICAgICAgICAgICAiYHN1YmVgIjogIiIsCisgICAgICAgICAgICAiYHN1bWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwYCI6ICIiLAorICAgICAgICAgICAgImBzdXBlYCI6ICIiLAorICAgICAgICAgICAgImB0YXVgIjogIiIsCisgICAgICAgICAgICAiYFRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImB0aGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgVFRgIjogIiIsCisgICAgICAgICAgICAiYHR0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdWFycmAiOiAiIiwKKyAgICAgICAgICAgICJgdWxhYCI6ICIiLAorICAgICAgICAgICAgImB1cHNpbG9uYCI6ICIiLAorICAgICAgICAgICAgImB1dWAiOiAiIiwKKyAgICAgICAgICAgICJgdmVjYWAiOiAiIiwKKyAgICAgICAgICAgICJgdnZgIjogIiIsCisgICAgICAgICAgICAiYHhfKG1uKWAiOiAiIiwKKyAgICAgICAgICAgICJgWGlgIjogIiIsCisgICAgICAgICAgICAiYHhpYCI6ICIiLAorICAgICAgICAgICAgImB4eGAiOiAiIiwKKyAgICAgICAgICAgICJgemV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgWlpgIjogIiIsCisgICAgICAgICAgICAiYHwtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgfC0tYCI6ICIiLAorICAgICAgICAgICAgImB8PT1gIjogIiIsCisgICAgICAgICAgICAiYHxfX2AiOiAiIiwKKyAgICAgICAgICAgICJgfH5gIjogIiIsCisgICAgICAgICAgICAiYH49YCI6ICIiLAorICAgICAgICAgICAgImB+fGAiOiAiIiwKKyAgICAgICAgICAgICJgfn5gIjogIiIsCisgICAgICAgICAgICAiQUEiOiAiIiwKKyAgICAgICAgICAgICJhbGVwaCI6ICIiLAorICAgICAgICAgICAgImFscGhhIjogIiIsCisgICAgICAgICAgICAiYW5kIjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoIEZvcm11bGEgSW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGhNTCBFeGFtcGxlIjogIiIsCisgICAgICAgICAgICAiYmFyYSI6ICIiLAorICAgICAgICAgICAgIkJhc2VkIG9uIEFTQ0lJTWF0aE1MIGJ5IjogIiIsCisgICAgICAgICAgICAiYmJhIjogIiIsCisgICAgICAgICAgICAiYmJiYSI6ICIiLAorICAgICAgICAgICAgImJldGEiOiAiIiwKKyAgICAgICAgICAgICJDQyI6ICIiLAorICAgICAgICAgICAgImNjYSI6ICIiLAorICAgICAgICAgICAgImNoaSI6ICIiLAorICAgICAgICAgICAgImRhcnIiOiAiIiwKKyAgICAgICAgICAgICJkZG90YSI6ICIiLAorICAgICAgICAgICAgImRlbCI6ICIiLAorICAgICAgICAgICAgImRlbHRhIjogIiIsCisgICAgICAgICAgICAiRGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJkaWFtb25kIjogIiIsCisgICAgICAgICAgICAiZG90YSI6ICIiLAorICAgICAgICAgICAgImR5L2R4IjogIiIsCisgICAgICAgICAgICAiRUUiOiAiIiwKKyAgICAgICAgICAgICJlcHNpIjogIiIsCisgICAgICAgICAgICAiZXRhIjogIiIsCisgICAgICAgICAgICAiRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQXNjaWlNYXRoTUwgdmlzaXQgdGhpcyBwYWdlOiI6ICIiLAorICAgICAgICAgICAgIkZvcm11bGEgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiZnJhIjogIiIsCisgICAgICAgICAgICAiZ2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJHYW1tYSI6ICIiLAorICAgICAgICAgICAgImdyYWQiOiAiIiwKKyAgICAgICAgICAgICJoQXJyIjogIiIsCisgICAgICAgICAgICAiaGFyciI6ICIiLAorICAgICAgICAgICAgImhhdGEiOiAiIiwKKyAgICAgICAgICAgICJpZiI6ICIiLAorICAgICAgICAgICAgImluIjogIiIsCisgICAgICAgICAgICAiSW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJpbnQiOiAiIiwKKyAgICAgICAgICAgICJpbnRfYV5iZih4KWR4IjogIiIsCisgICAgICAgICAgICAiaW90YSI6ICIiLAorICAgICAgICAgICAgImthcHBhIjogIiIsCisgICAgICAgICAgICAiTGFtYmRhIjogIiIsCisgICAgICAgICAgICAibGFtYmRhIjogIiIsCisgICAgICAgICAgICAibGFyciI6ICIiLAorICAgICAgICAgICAgImxBcnIiOiAiIiwKKyAgICAgICAgICAgICJsaW1fKHgtJmd0O29vKSI6ICIiLAorICAgICAgICAgICAgIm11IjogIiIsCisgICAgICAgICAgICAiTk4iOiAiIiwKKyAgICAgICAgICAgICJubiI6ICIiLAorICAgICAgICAgICAgIm5ubiI6ICIiLAorICAgICAgICAgICAgIm5vdCI6ICIiLAorICAgICAgICAgICAgIm51IjogIiIsCisgICAgICAgICAgICAibysiOiAiIiwKKyAgICAgICAgICAgICJvLiI6ICIiLAorICAgICAgICAgICAgIk8vIjogIiIsCisgICAgICAgICAgICAib2ludCI6ICIiLAorICAgICAgICAgICAgIk9tZWdhIjogIiIsCisgICAgICAgICAgICAib21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJvbyI6ICIiLAorICAgICAgICAgICAgIm9yIjogIiIsCisgICAgICAgICAgICAib3giOiAiIiwKKyAgICAgICAgICAgICJwaGkiOiAiIiwKKyAgICAgICAgICAgICJQaGkiOiAiIiwKKyAgICAgICAgICAgICJwaSI6ICIiLAorICAgICAgICAgICAgIlBpIjogIiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICIiLAorICAgICAgICAgICAgInByb2QiOiAiIiwKKyAgICAgICAgICAgICJwcm9wIjogIiIsCisgICAgICAgICAgICAicHNpIjogIiIsCisgICAgICAgICAgICAiUHNpIjogIiIsCisgICAgICAgICAgICAiUVEiOiAiIiwKKyAgICAgICAgICAgICJxdWFkIjogIiIsCisgICAgICAgICAgICAickFyciI6ICIiLAorICAgICAgICAgICAgInJobyI6ICIiLAorICAgICAgICAgICAgInJvb3QobikoeCkiOiAiIiwKKyAgICAgICAgICAgICJSUiI6ICIiLAorICAgICAgICAgICAgInNmYSI6ICIiLAorICAgICAgICAgICAgInNpZ21hIjogIiIsCisgICAgICAgICAgICAiU2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJzcXJ0KHgpIjogIiIsCisgICAgICAgICAgICAic3F1YXJlIjogIiIsCisgICAgICAgICAgICAic3RhY2tyZWwoLSZndDspKCspIjogIiIsCisgICAgICAgICAgICAic3ViIjogIiIsCisgICAgICAgICAgICAic3ViZSI6ICIiLAorICAgICAgICAgICAgInN1bSI6ICIiLAorICAgICAgICAgICAgInN1bV8obj0xKV5vbyI6ICIiLAorICAgICAgICAgICAgInN1cCI6ICIiLAorICAgICAgICAgICAgInN1cGUiOiAiIiwKKyAgICAgICAgICAgICJ0YXUiOiAiIiwKKyAgICAgICAgICAgICJUaGV0YSI6ICIiLAorICAgICAgICAgICAgInRoZXRhIjogIiIsCisgICAgICAgICAgICAiVFQiOiAiIiwKKyAgICAgICAgICAgICJ0dGEiOiAiIiwKKyAgICAgICAgICAgICJ1YXJyIjogIiIsCisgICAgICAgICAgICAidWxhIjogIiIsCisgICAgICAgICAgICAidXBzaWxvbiI6ICIiLAorICAgICAgICAgICAgInV1IjogIiIsCisgICAgICAgICAgICAidXV1IjogIiIsCisgICAgICAgICAgICAidmVjYSI6ICIiLAorICAgICAgICAgICAgInZ2IjogIiIsCisgICAgICAgICAgICAidnZ2IjogIiIsCisgICAgICAgICAgICAieF4obStuKSI6ICIiLAorICAgICAgICAgICAgInhfKG1uKSI6ICIiLAorICAgICAgICAgICAgIlhpIjogIiIsCisgICAgICAgICAgICAieGkiOiAiIiwKKyAgICAgICAgICAgICJ4eCI6ICIiLAorICAgICAgICAgICAgInpldGEiOiAiIiwKKyAgICAgICAgICAgICJaWiI6ICIiLAorICAgICAgICAgICAgInwtJmd0OyI6ICIiLAorICAgICAgICAgICAgInwtLSI6ICIiLAorICAgICAgICAgICAgInw9PSI6ICIiLAorICAgICAgICAgICAgInxfXyI6ICIiLAorICAgICAgICAgICAgInx+IjogIiIsCisgICAgICAgICAgICAifj0iOiAiIiwKKyAgICAgICAgICAgICJ+fCI6ICIiLAorICAgICAgICAgICAgIn5+IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZhbmN5U2VsZWN0cyI6IHsKKyAgICAgICAgICAgICInK29wdC50ZXh0KyciOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiJztcclxuICB2YXIgdGFnYyA9ICciOiAiIiwKKyAgICAgICAgICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAiIiwKKyAgICAgICAgICAgICJDbGVhciI6ICIiLAorICAgICAgICAgICAgIkRvbmUiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgdGV4dCB5b3Ugd2FudCB0byBmaW5kIjogIiIsCisgICAgICAgICAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgImZvdW5kIGl0ZW0iOiAiIiwKKyAgICAgICAgICAgICJmb3VuZCBpdGVtcyI6ICIiLAorICAgICAgICAgICAgIkhpZ2hsaWdodCI6ICIiLAorICAgICAgICAgICAgIkluZm9ybSBhIHJlcGxhY2VtZW50IHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJOZXh0IjogIiIsCisgICAgICAgICAgICAibm90IGZvdW5kIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2Ugd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtIjogIiIsCisgICAgICAgICAgICAicmVwbGFjZWQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJTZWFyY2ggZm9yOiI6ICIiLAorICAgICAgICAgICAgIlN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IjogIiIsCisgICAgICAgICAgICAiVW5kbyI6ICIiLAorICAgICAgICAgICAgIldob2xlIHdvcmRzIG9ubHkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiRW50ZXIgdGhlIG5hbWUgZm9yIG5ldyBvcHRpb24uIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgRm9ybS4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBtdWx0aS1saW5lIHRleHQgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcmFkaW8gYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFNlbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgU2VsZWN0Li4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1zIjogeworICAgICAgICAgICAgIidvbkNsaWNrJz0iOiAiIiwKKyAgICAgICAgICAgICJBY2Nlc3MgS2V5OiI6ICIiLAorICAgICAgICAgICAgIkFjdGlvbiBVUkw6IjogIiIsCisgICAgICAgICAgICAiQnV0dG9uIFNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkNoZWNrZWQiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zOiI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQgdGV4dCAob3B0aW9uYWwpIjogIiIsCisgICAgICAgICAgICAiRGltZW5zaW9ucyI6ICIiLAorICAgICAgICAgICAgIkRpc2FibGVkIjogIiIsCisgICAgICAgICAgICAiRW5jb2Rpbmc6IjogIiIsCisgICAgICAgICAgICAiRm9yIENvbnRyb2w6IjogIiIsCisgICAgICAgICAgICAiRm9ybSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IElOUFVUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gaGFuZGxlciBzY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiR2V0IjogIiIsCisgICAgICAgICAgICAiSGFyZCI6ICIiLAorICAgICAgICAgICAgIkhlaWdodCBpbiBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkhUTUwtRm9ybSB0byBDR0kgKGRlZmF1bHQpIjogIiIsCisgICAgICAgICAgICAiSW1hZ2Ugc291cmNlIjogIiIsCisgICAgICAgICAgICAiSW5pdGlhbCBUZXh0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiSmF2YXNjcmlwdCBmb3IgYnV0dG9uIGNsaWNrIjogIiIsCisgICAgICAgICAgICAiTGFiZWw6IjogIiIsCisgICAgICAgICAgICAiTGVnZW5kOiI6ICIiLAorICAgICAgICAgICAgIk1heCBsZW5ndGg6IjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY2NlcHRlZCI6ICIiLAorICAgICAgICAgICAgIk1ldGhvZDoiOiAiIiwKKyAgICAgICAgICAgICJtdWx0aXBhcnQgRm9ybSBEYXRhIChGaWxlLVVwbG9hZCkiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gc2VsZWN0IjogIiIsCisgICAgICAgICAgICAibmFtZSBvZiB0aGUgdGV4dGFyZWEiOiAiIiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICIiLAorICAgICAgICAgICAgIm5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIm5vd3JhcCI6ICIiLAorICAgICAgICAgICAgIk9mZiI6ICIiLAorICAgICAgICAgICAgIlBoeXNpY2FsIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIGEgTGFiZWwiOiAiIiwKKyAgICAgICAgICAgICJQb3N0IjogIiIsCisgICAgICAgICAgICAicHJlIjogIiIsCisgICAgICAgICAgICAiUmVhZCBPbmx5IjogIiIsCisgICAgICAgICAgICAiUm93czoiOiAiIiwKKyAgICAgICAgICAgICJTaXplIG9mIHRleHQgYm94IGluIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJTaXplOiI6ICIiLAorICAgICAgICAgICAgIlNvZnQiOiAiIiwKKyAgICAgICAgICAgICJUYWIgSW5kZXg6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IEZyYW1lOiI6ICIiLAorICAgICAgICAgICAgIlRleHQ6IjogIiIsCisgICAgICAgICAgICAiVVJMIG9mIGltYWdlIjogIiIsCisgICAgICAgICAgICAiVmFsdWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZToiOiAiIiwKKyAgICAgICAgICAgICJWaXJ0dWFsIjogIiIsCisgICAgICAgICAgICAiV2lkdGggaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJXcmFwIE1vZGU6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBOYW1lIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iCisgICAgICAgIH0sCisgICAgICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgICAgICIuLi4iOiAiIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgc3R5bGUtc2hlZXQ6IjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZCBjb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJDaGFyYWN0ZXIgc2V0OiI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChJU08tODg1OS01KSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChLT0k4LVIpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKFdJTkRPV1MtMTI1MSkiOiAiIiwKKyAgICAgICAgICAgICJET0NUWVBFOiI6ICIiLAorICAgICAgICAgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCB0aXRsZToiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkczoiOiAiIiwKKyAgICAgICAgICAgICJQcmltYXJ5IHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIlRleHQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiVVRGLTggKHJlY29tbWVuZGVkKSI6ICIiLAorICAgICAgICAgICAgIndlc3Rlcm4gKElTTy04ODU5LTEpIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bGxTY3JlZW4iOiB7CisgICAgICAgICAgICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkdlY2tvIjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJIb3Jpem9udGFsUnVsZSI6IHsKKyAgICAgICAgICAgICImI3gwMGQ3OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvZWRpdCBob3Jpem9udGFsIHJ1bGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBIb3Jpem9udGFsIFJ1bGUiOiAiIiwKKyAgICAgICAgICAgICJObyBzaGFkaW5nIjogIiIsCisgICAgICAgICAgICAiU3R5bGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5saW5lU3R5bGVyIjogeworICAgICAgICAgICAgIkNTUyBTdHlsZSI6ICIiLAorICAgICAgICAgICAgIi0iOiAiPDxFcXVhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAgICAgIkFuY2hvciBuYW1lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEFuY2hvciI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICAgICAiQWJzYm90dG9tIjogIiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiIiwKKyAgICAgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICIiLAorICAgICAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIkhvcml6b250YWw6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICIiLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIlZlcnRpY2FsOiI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiIiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAgICAgIkluc2VydCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBmb290bm90ZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBOb3RlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBhZ2VicmVhayI6IHsKKyAgICAgICAgICAgICJQYWdlIGJyZWFrIjogIiIsCisgICAgICAgICAgICAiUGFnZSBCcmVhayI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbWlsZXkiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IFNtaWxleSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0IjogeworICAgICAgICAgICAgIlxcbiAgVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmdcXG4iOiAiIiwKKyAgICAgICAgICAgICJIaWRlIHByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgU25pcHBldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIiIsCisgICAgICAgICAgICAiTGluazEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMiI6ICIiLAorICAgICAgICAgICAgIkxpbmszIjogIiIsCisgICAgICAgICAgICAiTGluazQiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNSI6ICIiLAorICAgICAgICAgICAgIlNob3cgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nIjogIiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldDIiOiB7CisgICAgICAgICAgICAiQWxsIENhdGVnb3JpZXMiOiAiIiwKKyAgICAgICAgICAgICJGaWx0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMgSFRNTCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyB0ZW1wbGF0ZSB2YXJpYWJsZSI6ICIiLAorICAgICAgICAgICAgIk9ubHkgc2VhcmNoIHdvcmQgYmVnaW5uaW5nIjogIiIsCisgICAgICAgICAgICAiSFRNTCI6ICI8PENoYXJDb3VudGVyPj4iLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICI8PEluc2VydFNuaXBwZXQ+PiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgICAgICJDYXB0aW9uIGZvciB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIHBhZGRpbmc6IjogIiIsCisgICAgICAgICAgICAiQ2VsbCBzcGFjaW5nOiI6ICIiLAorICAgICAgICAgICAgIkNvbGxhcHNlIGJvcmRlcnM6IjogIiIsCisgICAgICAgICAgICAiQ29sczoiOiAiIiwKKyAgICAgICAgICAgICJFbSI6ICIiLAorICAgICAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJMYXlvdSI6ICIiLAorICAgICAgICAgICAgIk51bWJlciBvZiBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICIiLAorICAgICAgICAgICAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSBvZiB0aGUgYm9yZGVyIjogIiIsCisgICAgICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiV2lkdGggdW5pdCI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJSb3dzOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IgorICAgICAgICB9LAorICAgICAgICAiTGFuZ01hcmtzIjogeworICAgICAgICAgICAgIiZtZGFzaDsgbGFuZ3VhZ2UgJm1kYXNoOyI6ICIiLAorICAgICAgICAgICAgIicsICciOiAiIiwKKyAgICAgICAgICAgICJFbmdsaXNoIjogIiIsCisgICAgICAgICAgICAiRnJlbmNoIjogIiIsCisgICAgICAgICAgICAiR3JlZWsiOiAiIiwKKyAgICAgICAgICAgICJsYW5ndWFnZSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJMYXRpbiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJMaW5rZXIiOiB7CisgICAgICAgICAgICAiKHB4KSI6ICIiLAorICAgICAgICAgICAgIkFuY2hvci1MaW5rIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIEFkZHJlc3M6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgTGluayI6ICIiLAorICAgICAgICAgICAgIkxvY2F0aW9uIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZW51IEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFRlbXBsYXRlOiI6ICIiLAorICAgICAgICAgICAgIk5ldyBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcmRpbmFyeSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUG9wdXAgV2luZG93IjogIiIsCisgICAgICAgICAgICAiUG9wdXBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgTGluayI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZWFibGU6IjogIiIsCisgICAgICAgICAgICAiU2FtZSBXaW5kb3cgKGp1bXAgb3V0IG9mIGZyYW1lcykiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGxiYXJzOiI6ICIiLAorICAgICAgICAgICAgIlNob3dzIE9uIEhvdmVyIjogIiIsCisgICAgICAgICAgICAiU3RhdHVzIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJTdWJqZWN0OiI6ICIiLAorICAgICAgICAgICAgIlRpdGxlOiI6ICIiLAorICAgICAgICAgICAgIlRvb2xiYXI6IjogIiIsCisgICAgICAgICAgICAiVVJMIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiIiwKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIk5hbWU6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiU2l6ZToiOiAiPDxGb3Jtcz4+IgorICAgICAgICB9LAorICAgICAgICAiTGlzdFR5cGUiOiB7CisgICAgICAgICAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogIiIsCisgICAgICAgICAgICAiRGVjaW1hbCBudW1iZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgZ3JlZWsgbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIGxhdGluIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciByb21hbiBudW1iZXJzIjogIiIsCisgICAgICAgICAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIlVwcGVyIHJvbWFuIG51bWJlcnMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiTW9vdG9vbHNGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJPcGVyYSI6IHsKKyAgICAgICAgICAgICJNQVJLIjogIiIsCisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQYXN0ZVRleHQiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IHRleHQgaW4gbmV3IHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIlBhc3RlIGFzIFBsYWluIFRleHQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUHJlc2VydmVTY3JpcHRzIjogeworICAgICAgICAgICAgIkphdmFTY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJQSFAiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUXVpY2tUYWciOiB7CisgICAgICAgICAgICAiJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsJzogJyI6ICIiLAorICAgICAgICAgICAgIkFUVFJJQlVURVMiOiAiIiwKKyAgICAgICAgICAgICJDb2xvcnMiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgVEFHIHlvdSB3YW50IHRvIGluc2VydCI6ICIiLAorICAgICAgICAgICAgIk5vIENTUyBjbGFzcyBhdmFpYWJsZSI6ICIiLAorICAgICAgICAgICAgIk9rIjogIiIsCisgICAgICAgICAgICAiT1BUSU9OUyI6ICIiLAorICAgICAgICAgICAgIlF1aWNrIFRhZyBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJUQUdzIjogIiIsCisgICAgICAgICAgICAiVGhlcmUgYXJlIHNvbWUgdW5jbG9zZWQgcXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIGF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgVEFHIjogIiIsCisgICAgICAgICAgICAiWW91IGhhdmUgdG8gc2VsZWN0IHNvbWUgdGV4dCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTYXZlU3VibWl0IjogeworICAgICAgICAgICAgImluIHByb2dyZXNzIjogIiIsCisgICAgICAgICAgICAiUmVhZHkiOiAiIiwKKyAgICAgICAgICAgICJTYXZlIjogIiIsCisgICAgICAgICAgICAiU2F2aW5nLi4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNldElkIjogeworICAgICAgICAgICAgIklEL05hbWU6IjogIiIsCisgICAgICAgICAgICAiU2V0IElkIGFuZCBOYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElkL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSUQvTmFtZSI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiU21hcnRSZXBsYWNlIjogeworICAgICAgICAgICAgIkNsb3NpbmdEb3VibGVRdW90ZXMiOiAiIiwKKyAgICAgICAgICAgICJDbG9zaW5nU2luZ2xlUXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJDb252ZXJ0IGFsbCBxdW90ZXMgYW5kIGRhc2hlcyBpbiB0aGUgY3VycmVudCBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBhdXRvbWF0aWMgcmVwbGFjZW1lbnRzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIk9wZW5pbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIlNtYXJ0UmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgIlNtYXJ0UmVwbGFjZSBTZXR0aW5ncyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTdHlsaXN0IjogeworICAgICAgICAgICAgIlN0eWxlcyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAgICAgIkNsZWFuIGJhZCBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQuIjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gU2VsZWN0aW9uIE9ubHkiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiB1cCBIVE1MIjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgU2NvcGUiOiAiIiwKKyAgICAgICAgICAgICJHZW5lcmFsIHRpZHkgdXAgYW5kIGNvcnJlY3Rpb24gb2Ygc29tZSBwcm9ibGVtcy4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc2VsZWN0IGZyb20gdGhlIGZvbGxvd2luZyBjbGVhbmluZyBvcHRpb25zLi4uIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHN0YW5kIGJ5IHdoaWxlIGNsZWFuaW5nIGluIHByb2Nlc3MuLi4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxpZ25tZW50IChsZWZ0L3JpZ2h0L2p1c3RpZnkpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgY2xhc3NlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgQWxsIEhUTUwgVGFncyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgc3R5bGVzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gZm9udCBzaXplcy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIHRleHQgY29sb3JzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdHlwZWZhY2VzIChmb250IFwic3R5bGVzXCIpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBlbXBoYXNpcyBhbmQgYW5ub3RhdGlvbnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGxhbmcgYXR0cmlidXRlcy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgUGFyYWdyYXBocyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMuIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSBkaXJlY3Rpb25hbCBxdW90ZSBtYXJrcyB3aXRoIG5vbi1kaXJlY3Rpb25hbCBxdW90ZSBtYXJrcy4iOiAiIiwKKyAgICAgICAgICAgICJWaWdvcm91c2x5IHB1cmdlIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAgICAgIkNlbGwgVHlwZToiOiAiIiwKKyAgICAgICAgICAgICJDZWxscyBkb3duIjogIiIsCisgICAgICAgICAgICAiQ2VsbHMgdG8gdGhlIHJpZ2h0LCBhbmQiOiAiIiwKKyAgICAgICAgICAgICJEbyBOb3QgQ2hhbmdlIjogIiIsCisgICAgICAgICAgICAiRnJhbWUgYW5kIGJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJIZWFkZXIgKHRoKSI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY3VycmVudCBjZWxsIHdpdGg6IjogIiIsCisgICAgICAgICAgICAiTm9ybWFsICh0ZCkiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiUm93cyI6ICI8PEZvcm1zPj4iCisgICAgICAgIH0sCisgICAgICAgICJVbnNhdmVkQ2hhbmdlcyI6IHsKKyAgICAgICAgICAgICJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhlIGVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJXZWJLaXQiOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIjw8R2Vja28+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlhpbmhhIjogeworICAgICAgICAgICAgIiYjODIxMjsgZm9udCAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIiYjODIxMjsgc2l6ZSAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiMSAoOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIyICgxMCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIzICgxMiBwdCkiOiAiIiwKKyAgICAgICAgICAgICI0ICgxNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI1ICgxOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI2ICgyNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI3ICgzNiBwdCkiOiAiIiwKKyAgICAgICAgICAgICJBZGRyZXNzIjogIiIsCisgICAgICAgICAgICAiQXJpYWwiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBjb250ZW50IHBhc3RlZCBmcm9tIFdvcmQiOiAiIiwKKyAgICAgICAgICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiIiwKKyAgICAgICAgICAgICJDbG9zZSI6ICIiLAorICAgICAgICAgICAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAiIiwKKyAgICAgICAgICAgICJDb3VyaWVyIE5ldyI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBTdGF0dXNiYXIiOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgVG9vbGJhciI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMCAoemVybykiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTEgLi4gQ1RSTC02IjogIiIsCisgICAgICAgICAgICAiQ1RSTC1BIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1CIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1DIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1FIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1JIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1KIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1MIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1OIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1SIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1TIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1VIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1WIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1YIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1ZIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1aIjogIiIsCisgICAgICAgICAgICAiRWRpdG9yIEhlbHAiOiAiIiwKKyAgICAgICAgICAgICJFTlRFUiI6ICIiLAorICAgICAgICAgICAgIkVycm9yIExvYWRpbmcgWGluaGEuICBEZXZlbG9wZXJzLCBjaGVjayB0aGUgRXJyb3IgQ29uc29sZSBmb3IgaW5mb3JtYXRpb24uIjogIiIsCisgICAgICAgICAgICAiRmluaXNoaW5nIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0dGVkIjogIiIsCisgICAgICAgICAgICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIiIsCisgICAgICAgICAgICAiR2VvcmdpYSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMiI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMyI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNCI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNiI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmdzIjogIiIsCisgICAgICAgICAgICAiSW1wYWN0IjogIiIsCisgICAgICAgICAgICAiSW5pdCBlZGl0b3Igc2l6ZSI6ICIiLAorICAgICAgICAgICAgImluc2VydCBsaW5lYnJlYWsiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvT3ZlcndyaXRlIjogIiIsCisgICAgICAgICAgICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBDb3JlIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW4gJHBsdWdpbiI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgcGx1Z2lucyI6ICIiLAorICAgICAgICAgICAgIk1TIFdvcmQgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIm5ldyBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJOb3JtYWwiOiAiIiwKKyAgICAgICAgICAgICJQcmludCBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAiIiwKKyAgICAgICAgICAgICJTYXZlIGFzIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IGFsbCI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCBDb2xvciI6ICIiLAorICAgICAgICAgICAgIlNldCBmb3JtYXQgdG8gcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiU0hJRlQtRU5URVIiOiAiIiwKKyAgICAgICAgICAgICJTcGxpdCBCbG9jayI6ICIiLAorICAgICAgICAgICAgIlRhaG9tYSI6ICIiLAorICAgICAgICAgICAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICIiLAorICAgICAgICAgICAgIlRpbWVzIE5ldyBSb21hbiI6ICIiLAorICAgICAgICAgICAgIlRvZ2dsZSBCb3JkZXJzIjogIiIsCisgICAgICAgICAgICAiVG91Y2ggaGVyZSBmaXJzdCB0byBhY3RpdmF0ZSBlZGl0b3IuIjogIiIsCisgICAgICAgICAgICAiVmVyZGFuYSI6ICIiLAorICAgICAgICAgICAgIldhaXRpbmcgZm9yIElmcmFtZSB0byBsb2FkLi4uIjogIiIsCisgICAgICAgICAgICAiV2luZ0RpbmdzIjogIiIsCisgICAgICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIiIsCisgICAgICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogIiIsCisgICAgICAgICAgICAiWGluaGEiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogQkFDS0dST1VORElNQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIlJlbW92ZSBDdXJyZW50IEJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJTZXQgQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIlNldCBwYWdlIGJhY2tncm91bmQgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJTZXQgUGFnZSBCYWNrZ3JvdW5kIEltYWdlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNsaWVudHNpZGVTcGVsbGNoZWNrIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogQ0xJRU5UU0lERVNQRUxMQ0hFQ0sgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiU3BlbGwgQ2hlY2sgdXNpbmcgaWVTcGVsbCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFeHRlbmRlZEZpbGVNYW5hZ2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogRVhURU5ERURGSUxFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIxMCUiOiAiIiwKKyAgICAgICAgICAgICIxMDAlIjogIiIsCisgICAgICAgICAgICAiMjAwJSI6ICIiLAorICAgICAgICAgICAgIjI1JSI6ICIiLAorICAgICAgICAgICAgIjUwJSI6ICIiLAorICAgICAgICAgICAgIjc1JSI6ICIiLAorICAgICAgICAgICAgIj5MaXN0IFZpZXciOiAiIiwKKyAgICAgICAgICAgICI+VGh1bWJuYWlsIFZpZXciOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICIiLAorICAgICAgICAgICAgIkFsdCI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciBDb2xvciI6ICIiLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkNyb3AiOiAiIiwKKyAgICAgICAgICAgICJEOiI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICIiLAorICAgICAgICAgICAgIkVkaXQiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiIiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiIiwKKyAgICAgICAgICAgICJGaWxlc2l6ZToiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIEhvcml6b250YWwiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIEltYWdlIjogIiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciI6ICIiLAorICAgICAgICAgICAgIkdJRiI6ICIiLAorICAgICAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICIiLAorICAgICAgICAgICAgIkg6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiIiwKKyAgICAgICAgICAgICJKUEVHIEhpZ2giOiAiIiwKKyAgICAgICAgICAgICJKUEVHIExvdyI6ICIiLAorICAgICAgICAgICAgIkpQRUcgTWVkaXVtIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyI6ICIiLAorICAgICAgICAgICAgIkxvY2siOiAiIiwKKyAgICAgICAgICAgICJNYXJrZXIiOiAiIiwKKyAgICAgICAgICAgICJNYXhpbXVtIGZvbGRlciBzaXplIGxpbWl0IHJlYWNoZWQuIFVwbG9hZCBkaXNhYmxlZC4iOiAiIiwKKyAgICAgICAgICAgICJNZWFzdXJlIjogIiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICIiLAorICAgICAgICAgICAgIk5vIEZpbGVzIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHZhbHVlIjogIiIsCisgICAgICAgICAgICAiUE5HIjogIiIsCisgICAgICAgICAgICAiUHJlc2V0IjogIiIsCisgICAgICAgICAgICAiUXVhbGl0eToiOiAiIiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIiIsCisgICAgICAgICAgICAiUmVuYW1lIjogIiIsCisgICAgICAgICAgICAiUmVzaXplIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJTdGFydCBYOiI6ICIiLAorICAgICAgICAgICAgIlN0YXJ0IFk6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlRvZ2dsZSBtYXJrZXIgY29sb3IiOiAiIiwKKyAgICAgICAgICAgICJUcmFzaCI6ICIiLAorICAgICAgICAgICAgIlVwbG9hZCI6ICIiLAorICAgICAgICAgICAgIlc6IjogIiIsCisgICAgICAgICAgICAiWDoiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJZOiI6ICIiLAorICAgICAgICAgICAgIlpvb20iOiAiIiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJDbGVhciI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiPDxNb290b29sc0ZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlNhdmUiOiAiPDxTYXZlU3VibWl0Pj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbHRlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEZJTFRFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWx0ZXIiOiAiPDxJbnNlcnRTbmlwcGV0Mj4+IgorICAgICAgICB9LAorICAgICAgICAiSHRtbFRpZHkiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBdXRvLVRpZHkiOiAiIiwKKyAgICAgICAgICAgICJEb24ndCBUaWR5IjogIiIsCisgICAgICAgICAgICAiSFRNTCBUaWR5IjogIiIsCisgICAgICAgICAgICAiVGlkeSBmYWlsZWQuICBDaGVjayB5b3VyIEhUTUwgZm9yIHN5bnRheCBlcnJvcnMuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkltYWdlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElNQUdFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbmdsZToiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgUGljdHVyZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmVzIjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBVc2VybmFtZS9FbWFpbCI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciBOYW1lOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIEZvcm1hdCI6ICIiLAorICAgICAgICAgICAgIkltYWdlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkIjogIiIsCisgICAgICAgICAgICAiTm8gSW1hZ2VzIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gUGhvdG9zIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gVmlkZW9zIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiVGhpcyBTZXJ2ZXIiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVXNlcm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFZpZGVvIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFZpZGVvcyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJDbGVhciI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQ3JvcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJFZGl0IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiR0lGIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgSGlnaCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgTWVkaXVtIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJMb2NrIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJNYXJrZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1lYXN1cmUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlBORyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZXNpemUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlNhdmUiOiAiPDxTYXZlU3VibWl0Pj4iLAorICAgICAgICAgICAgIlN0YXJ0IFg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTdGFydCBZOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRyYXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJXOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJCZWhhdmlvcjoiOiAiIiwKKyAgICAgICAgICAgICJDb250aW51b3VzIjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uOiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBzY3JvbGxpbmcgbWFycXVlZSI6ICIiLAorICAgICAgICAgICAgIk1hcnF1ZWUgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIEFtb3VudDoiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgRGVsYXk6IjogIiIsCisgICAgICAgICAgICAiU2xpZGUiOiAiIiwKKyAgICAgICAgICAgICJTcGVlZCBDb250cm9sIjogIiIsCisgICAgICAgICAgICAiTmFtZSI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIk5hbWUvSUQ6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiVGV4dDoiOiAiPDxGb3Jtcz4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGljdHVyZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVFBJQ1RVUkUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vdCBkZWZpbmVkIjogIiIsCisgICAgICAgICAgICAiIE9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJVcGxvYWQgZmlsZSI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbDoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJTaXplIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJWZXJ0aWNhbDoiOiAiPDxJbnNlcnRJbWFnZT4+IgorICAgICAgICB9LAorICAgICAgICAiTm90ZVNlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTIwJSI6ICIiLAorICAgICAgICAgICAgIjE1MCUiOiAiIiwKKyAgICAgICAgICAgICI4MCUiOiAiIiwKKyAgICAgICAgICAgICJBZGQgR1VJRE8gQ29kZSBpbiBhIHRleHRib3ggb24gdGhlIHBhZ2UiOiAiIiwKKyAgICAgICAgICAgICJBZGQgTUlESSBsaW5rIHRvIGFsbG93IHN0dWRlbnRzIHRvIGhlYXIgdGhlIG11c2ljIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiR1VJRE8gQ29kZSI6ICIiLAorICAgICAgICAgICAgIkd1aWRvIGNvZGUiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBpbiBhcHBsZXQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgR1VJRE8gTXVzaWMgTm90YXRpb24iOiAiIiwKKyAgICAgICAgICAgICJNSURJIEZpbGUiOiAiIiwKKyAgICAgICAgICAgICJTb3VyY2UgQ29kZSI6ICIiLAorICAgICAgICAgICAgIldpdGggTW96aWxsYSwgdGhlIGFwcGxldCB3aWxsIG5vdCBiZSB2aXNpYmxlIGluIGVkaXRvciwgYnV0IG9ubHkgaW4gV2ViIHBhZ2UgYWZ0ZXIgc3VibWl0dGluZy4iOiAiIiwKKyAgICAgICAgICAgICJab29tIDoiOiAiIiwKKyAgICAgICAgICAgICIxMDAlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBQcmV2aWV3IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJab29tIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBHZWFycyBpbiBvcmRlciB0byB1c2UgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZSBhbmQgY29uZmlndXJhdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGluZyBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiSW5zdGFsbCI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIEFib3V0IExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgcmVsb2FkIHRoZSBwYWdlLCBjYXVzaW5nIHlvdSB0byBsb3NlIGFueSB1bnNhdmVkIHdvcmsuICBQcmVzcyBcIk9LXCIgdG8gcmVsb2FkLiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIHVzZXMgR29vZ2xlIEdlYXJzIHRvIGVuYWJsZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlLiAgV2l0aCBHZWFycyBpbnN0YWxsZWQsIHlvdSBjYW4gc2F2ZSBkcmFmdHMgb2YgeW91ciBkb2N1bWVudHMgb24geW91ciBoYXJkIGRyaXZlLCBjb25maWd1cmUgWGluaGEgdG8gbG9vayB0aGUgd2F5IHlvdSB3YW50LCBhbmQgY2FycnkgdGhpcyBpbmZvcm1hdGlvbiB3aGVyZXZlciB5b3UgdXNlIFhpbmhhIG9uIHRoZSB3ZWIuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsZTogIjogIiIsCisgICAgICAgICAgICAiSW1wb3J0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGV0YWlscyI6ICIiLAorICAgICAgICAgICAgIkZpbGUgQnJvd3NlciI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICAgIFRoZXJlIEMgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gIFRoZXJlIEEgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gXCIgVGhlcmUgQiBcIiI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICcgVGhlcmUgRCAnIjogIiIsCisgICAgICAgICAgICAiTGlzdCBvZiBQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJOZXcgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJPcGVuIjogIiIsCisgICAgICAgICAgICAiT3BlbiBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHlvdSdkIGxpa2UgdG8gY3JlYXRlLiI6ICIiLAorICAgICAgICAgICAgIlNhdmUgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgZXJhc2UgYW55IHVuc2F2ZWQgY29udGVudC4gIElmIHlvdSdyZSBjZXJ0YWluLCBwbGVhc2UgY2xpY2sgT0sgdG8gY29udGludWUuIjogIiIsCisgICAgICAgICAgICAiV2ViIFVSTCI6ICIiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiPDxQU0xvY2FsPj4iLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlbmFtZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IjogIjw8SW5zZXJ0Tm90ZT4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJOZXcgRm9sZGVyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEaWN0aW9uYXJ5IjogIiIsCisgICAgICAgICAgICAiRmluaXNoZWQgbGlzdCBvZiBtaXNwZWxsZWQgd29yZHMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MQXJlYSBTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiSSB3aWxsIG9wZW4gaXQgaW4gYSBuZXcgcGFnZS4iOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUiOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUgYWxsIjogIiIsCisgICAgICAgICAgICAiSW5mbyI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIjogIiIsCisgICAgICAgICAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIiIsCisgICAgICAgICAgICAiT3JpZ2luYWwgd29yZCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gb3BlbiB0aGlzIGxpbmsiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdDogY2hhbmdpbmcgZGljdGlvbmFyeSB0byI6ICIiLAorICAgICAgICAgICAgInBsaXogd2VpdCA7LSkiOiAiIiwKKyAgICAgICAgICAgICJSZS1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGFsbCI6ICIiLAorICAgICAgICAgICAgIlJldmVydCI6ICIiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrZXIiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbC1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlN1Z2dlc3Rpb25zIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSB3aXRoIjogIjw8RmluZFJlcGxhY2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlRlbXBsYXRlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiSW5zZXJ0IHRlbXBsYXRlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuRm9ybWF0IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWxsIjogIiIsCisgICAgICAgICAgICAiQWxsIEhUTUw6IjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgQXJlYSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIG9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0aW5nOiI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCB3aGljaCB0eXBlcyBvZiBmb3JtYXR0aW5nIHlvdSB3b3VsZCBsaWtlIHRvIHJlbW92ZS4iOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Rpb24iOiAiIgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2VzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllNjU1OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2VzLmpzCkBAIC0wLDAgKzEsMTU3NyBAQAorLy8gWGluaGEgTGFuZ3VhZ2UgQ29tYmluZWQgVHJhbnNsYXRpb24gRmlsZQorLy8KKy8vIExBTkc6ICJlcyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElOU1RSVUNUSU9OUyBUTyBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gWW91ciB0cmFuc2xhdGlvbiBtdXN0IGJlIGluIFVURi04IENoYXJhY3RlciBFbmNvZGluZy4KKy8vCisvLyBUaGlzIGlzIGEgSlNPTiBlbmNvZGVkIGZpbGUgKHBsdXMgY29tbWVudHMpLCBzdHJpbmdzIHNob3VsZCBiZSBkb3VibGUtcXVvdGUKKy8vIG9ubHksIGRvIG5vdCB1c2Ugc2luZ2xlIHF1b3RlcyB0byBzdXJyb3VuZCBzdHJpbmdzIC0gImhlbGxvIiwgbm90ICdoZWxsbycKKy8vIGRvIG5vdCBoYXZlIGEgdHJhaWxpbmcgY29tbWEgYWZ0ZXIgdGhlIGxhc3QgZW50cnkgaW4gYSBzZWN0aW9uLgorLy8KKy8vIE9ubHkgZnVsbCBsaW5lIGNvbW1lbnRzIGFyZSBhbGxvd2VkICh0aGF0IGEgY29tbWVudHMgb2NjdXB5IGVudGlyZSBsaW5lcykuCisvLworLy8gU2VhcmNoIGZvciB0aGUgX19ORVdfVFJBTlNMQVRJT05TX18gc2VjdGlvbiBiZWxvdywgdGhpcyBpcyB3aGVyZSB5b3Ugd2lsbAorLy8gd2FudCB0byBmb2N1cywgdGhpcyBzZWN0aW9uIGluY2x1ZGVzIHRoaW5ncyB0aGF0IGRvIG5vdCBwcmVzZW50bHkgaGF2ZSBhIAorLy8gdHJhbnNsYXRpb24gb3IgZm9yIHdoaWNoIHRoZSB0cmFuc2xhdGlvbiBuZWVkcyB0byBiZSBjaGVja2VkIGZvciBhY2N1cmFjeS4KKy8vCisvLyBJbiB0aGUgTmV3IFRyYW5zbGF0aW9ucyBzZWN0aW9uIGEgdHJhbnNsYXRpb24gc3RyaW5nIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICIiCisvLyAgICAgVGhpcyBtZWFucyBpdCBpcyBub3QgdHJhbnNsYXRlZCB5ZXQsIGFkZCB5b3VyIHRyYW5zbGF0aW9uLi4uCisvLyAgICAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIktsaW5nb24gU3RyaW5nIEhlcmUiCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJUcmFuc2xhdGVkIFN0cmluZyBIZXJlIgorLy8gICAgIFRoaXMgbWVhbnMgdGhhdCBhbiBleGlzdGluZyB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcsIGluIHNvbWUgb3RoZXIKKy8vICAgICBzZWN0aW9uIGhhcyBiZWVuIGZvdW5kLCBhbmQgdXNlZC4gIENoZWNrIHRoYXQgaXQgaXMgYXBwcm9wcml0ZSBmb3IgdGhpcworLy8gICAgIHNlY3Rpb24gYW5kIGlmIGl0IGlzLCB0aGF0J3MgZmluZSBsZWF2ZSBpdCBhcyBpcywgb3RoZXJ3aXNlIGNoYW5nZSBhcworLy8gICAgIGFwcHJvcHJpYXRlLgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiPDxBbm90aGVyU2VjdGlvbj4+IgorLy8gICAgIFRoaXMgbWVhbnMgdXNlIHRoZSBzYW1lIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZyBhcyA8PEFub3RoZXJTZWN0aW9uPj4KKy8vICAgICB0aGlzIHNhdmVzIHlvdSByZS10cmFubGF0aW5nIHN0cmluZ3MuICBJZiB0aGUgQ29udGV4dCBvZiB0aGlzIHNlY3Rpb24KKy8vICAgICBhbmQgdGhlIGNvbnRleHQgb2YgQW5vdGhlclNlY3Rpb24gc2VlbSB0aGUgc2FtZSwgdGhhdCdzIGZpbmUgbGVhdmUgaXQKKy8vICAgICB1c2luZyB0aGF0IHRyYW5zbGF0aW9uLCBidXQgaWYgdGhpcyBzZWN0aW9uIG5lZWRzIGEgZGlmZmVyZW50IHRyYW5zbGF0aW9uLCAKKy8vICAgICB5b3UgY2FuIHByb3ZpZGUgaXQgYnkgcmVwbGFjaW5nIHRoZSBsaW5rICg8PEFub3RoZXJTZWN0aW9uPj4pIHdpdGggdGhhdAorLy8gICAgIG5ldyB0cmFuc2xhdGlvbi4gIEZvciBleGFtcGxlIC0gYSAiVGFibGUiIGluIHNheSAiRGF0YVBsdWdpbiIgaXMgCisvLyAgICAgcGVyaGFwcyB0cmFuc2xhdGVkIGRpZmZlcmVudGx5IHRvICJUYWJsZSIgaW4gIkZ1cm5pdHVyZVBsdWdpbiIuCisvLworLy8gVEVTVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBwbGFjZSB5b3VyIHRyYW5zbGF0aW9uIGZpbGUgb24geW91ciB3ZWJzZXJ2ZXIgc29tZXdoZXJlIGZvciBleGFtcGxlCisvLworLy8gICAveGluaGEvbGFuZy9tZXJnZWQvZXMuanMKKy8vCisvLyBhbmQgdGhlbiB0ZWxsIFhpbmhhIHdoZXJlIHRvIGdldCBpdCAoYmVmb3JlIGxvYWRpbmcgWGluaGFDb3JlLmpzKSBieSAKKy8vCisvLyAgX2VkaXRvcl9sYW5nICAgICAgICAgICAgICA9ICdlcyc7CisvLyAgX2VkaXRvcl9sYW5nX21lcmdlZF9maWxlICA9ICcveGluaGEvbGFuZy9tZXJnZWQvZXMuanMnOworLy8KKy8vIFhpbmhhIHdpbGwgbG9hZCB5b3VyIG5ldyBsYW5ndWFnZSBkZWZpbml0aW9uLgorLy8KKy8vIFNVQk1JVFRJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgY3JlYXRlIGEgVGlja2V0IG9uIHRoZSBYaW5oYSB3ZWJzaXRlIGFuZCBhdHRhY2ggeW91ciB0cmFuc2xhdGlvbiAKKy8vIGZpbGUuCisvLworLy8gVGhlIFhpbmhhIGRldmVsb3BlcnMgd2lsbCB0YWtlIHlvdXIgZmlsZSBhbmQgdXNlIHRoZSAKKy8vICAgICBjb250cmliL2xjX3NwbGl0X21lcmdlZF9maWxlLnBocAorLy8gc2NyaXB0IHRvIGxvYWQgaXQgaW50byB0aGUgWGluaGEgZGlzdHJpYnV0aW9uLgorCit7CisgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgIkFiYnJldmlhdGlvbiI6ICJBYnJldmlhdHVyYSIsCisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiRGVsZXRlIjogIlN1cHJpbWlyIiwKKyAgICAgICAgIkV4cGFuc2lvbjoiOiAiRXhwbGljYWNpw7NuIiwKKyAgICAgICAgIk9LIjogIkFjZXB0YXIiCisgICAgfSwKKyAgICAiQWJvdXRCb3giOiB7CisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJTb2JyZSBlc3RlIEVkaXRvciIsCisgICAgICAgICJDbG9zZSI6ICJDZXJyYXIiCisgICAgfSwKKyAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIgorICAgIH0sCisgICAgIkNvbG9yUGlja2VyIjogeworICAgICAgICAiQ2xpY2sgYSBjb2xvci4uLiI6ICJTZWxlY2Npb25lIHVuIGNvbG9yLi4uIiwKKyAgICAgICAgIkNsb3NlIjogIkNlcnJhciIsCisgICAgICAgICJDb2xvcjogIjogIkNvbG9yOiAiLAorICAgICAgICAiT0siOiAiQWNlcHRhciIsCisgICAgICAgICJTYW1wbGUiOiAiTXVlc3RyYSIsCisgICAgICAgICJXZWIgU2FmZTogIjogIkNvbG9yIHdlYjogIgorICAgIH0sCisgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAiQ19lbGwgUHJvcGVydGllcy4uLiI6ICJQX3JvcGllZGFkZXMgZGUgY2VsZGEuLi4iLAorICAgICAgICAiQ2hlY19rIExpbmsuLi4iOiAiX1ZlcmlmaWNhciBoaXBlcnbDrW5jdWxvLi4uIiwKKyAgICAgICAgIkNvcHkiOiAiQ29waWFyIiwKKyAgICAgICAgIkNyZWF0ZSBhIGxpbmsiOiAiQ3JlYXIgdW4gaGlwZXJ2w61uY3VsbyIsCisgICAgICAgICJDdXJyZW50IFVSTCBpcyI6ICJMYSBVUkwgYWN0dWFsIGVzIiwKKyAgICAgICAgIkN1dCI6ICJDb3J0YXIiLAorICAgICAgICAiRGVfbGV0ZSBDb2x1bW4iOiAiX1N1cHJpbWlyIGNvbHVtbmEiLAorICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IGNvbHVtbiI6ICJTdXByaW1pciBsYSBjb2x1bW5hIGFjdHVhbCIsCisgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIlN1cHJpbWlyIGxhIGZpbGEgYWN0dWFsIiwKKyAgICAgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIsK/Q8OzbW8gaGEgbGxlZ2FkbyBhcXXDrT8gKMKhUG9yIGZhdm9yIHJlcG9ydGUgZWwgZXJyb3IhKSIsCisgICAgICAgICJJX25zZXJ0IFJvdyBCZWZvcmUiOiAiX0luc2VydGFyIGZpbGEgZGVsYW50ZSIsCisgICAgICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICJJX25zZXJ0YXIgZmlsYSBkZXRyw6FzIiwKKyAgICAgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIkluc2VydGFyIF9jb2x1bW5hIGRldHLDoXMiLAorICAgICAgICAiSW5zZXJ0IF9Db2x1bW4gQmVmb3JlIjogIkluc2VydF9hciBjb2x1bW5hIGRlbGFudGUiLAorICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiSW5zZXJ0YXIgdW5hIGNvbHVtbmEgbnVldmEgZGVzcHXDqXMgZGUgbGEgYWN0dWFsIiwKKyAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICJJbnNlcnRhciB1bmEgY29sdW1uYSBudWV2YSBhbnRlcyBkZSBsYSBhY3R1YWwiLAorICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiSW5zZXJ0YXIgdW5hIGZpbGEgbnVldmEgZGVzcHXDqXMgZGUgbGEgYWN0dWFsIiwKKyAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICJJbnNlcnRhciB1bmEgZmlsYSBudWV2YSBhbnRlcyBkZSBsYSBhY3R1YWwiLAorICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUiOiAiSW5zZXJ0YXIgdW4gcMOhcnJhZm8gZGVzcHXDqXMgZGVsIG5vZG8gYWN0dWFsIiwKKyAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZSI6ICJJbnNlcnRhciB1biBww6FycmFmbyBhbnRlcyBkZWwgbm9kbyBhY3R1YWwiLAorICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBhZnRlciI6ICJJbnNlcnRhciBww6FycmFmbyBkZXRyw6FzIiwKKyAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYmVmb3JlIjogIkluc2VydGFyIHDDoXJyYWZvIGRlbGFudGUiLAorICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiQ2VudHJhciIsCisgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAiSnVzdGlmaWNhciIsCisgICAgICAgICJKdXN0aWZ5IExlZnQiOiAiQWxpbmVhciBhIGxhIGl6cXVpZXJkYSIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIkFsaW5lYXIgYSBsYSBkZXJlY2hhIiwKKyAgICAgICAgIkxpbmsgcG9pbnRzIHRvOiI6ICJFbCBoaXBlcnbDrW5jdWxvIGFwdW50YSBhOiIsCisgICAgICAgICJNYWtlIGxpbl9rLi4uIjogIkNvbnZlcnRpciBlbiBfaGlwZXJ2w61uY3Vsby4uLiIsCisgICAgICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIkFicmUgZXN0ZSBoaXBlcnbDrW5jdWxvIGVuIHVuYSB2ZW50YW5hIG51ZXZhIiwKKyAgICAgICAgIlBhc3RlIjogIlBlZ2FyIiwKKyAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgZWxlbWVudDoiOiAiUG9yIGZhdm9yLCBjb25maXJtZSBxdWUgZGVzZWEgc3VwcmltaXIgZXN0ZSBlbGVtZW50bzoiLAorICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICJQb3IgZmF2b3IsIGNvbmZpcm1lIHF1ZSBkZXNlYSBzdXByaW1pciBlbCBoaXBlcnbDrW5jdWxvIGRlIGVzdGUgZWxlbWVudG8uIiwKKyAgICAgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICJTdXByaW1pciBlbCBlbGVtZW50byAkZWxlbS4uLiIsCisgICAgICAgICJSZW1vdmUgdGhpcyBub2RlIGZyb20gdGhlIGRvY3VtZW50IjogIlN1cHJpbWlyIGVzdGUgbm9kbyBkZWwgZG9jdW1lbnRvIiwKKyAgICAgICAgIlJvX3cgUHJvcGVydGllcy4uLiI6ICJQcl9vcGllZGFkZXMgZGUgbGEgZmlsYS4uLiIsCisgICAgICAgICJTaG93IHRoZSBUYWJsZSBDZWxsIFByb3BlcnRpZXMgZGlhbG9nIjogIk1vc3RyYXIgZWwgZGnDoWxvZ28gUHJvcGllZGFkZXMgZGUgbGEgQ2VsZGEiLAorICAgICAgICAiU2hvdyB0aGUgVGFibGUgUHJvcGVydGllcyBkaWFsb2ciOiAiTW9zdHJhciBlbCBkacOhbG9nbyBQcm9waWVkYWRlcyBkZSBsYSBUYWJsYSIsCisgICAgICAgICJTaG93IHRoZSBUYWJsZSBSb3cgUHJvcGVydGllcyBkaWFsb2ciOiAiTW9zdHJhciBlbCBkacOhbG9nbyBQcm9waWVkYWRlcyBkZSBsYSBGaWxhIiwKKyAgICAgICAgIlNob3cgdGhlIGltYWdlIHByb3BlcnRpZXMgZGlhbG9nIjogIk1vc3RyYXIgZWwgZGnDoWxvZ28gZGUgcHJvcGllZGFkZXMgZGUgaW1hZ2VuIiwKKyAgICAgICAgIlVubGluayB0aGUgY3VycmVudCBlbGVtZW50IjogIlN1cHJpbWlyIGVsIGhpcGVydsOtbmN1bG8gZGVsIGVsZW1lbnRvIGFjdHVhbCIsCisgICAgICAgICJfRGVsZXRlIFJvdyI6ICJTX3VwcmltaXIgZmlsYSIsCisgICAgICAgICJfSW1hZ2UgUHJvcGVydGllcy4uLiI6ICJfUHJvcGllZGFkZXMgZGUgaW1hZ2VuLi4uIiwKKyAgICAgICAgIl9Nb2RpZnkgTGluay4uLiI6ICJfTW9kaWZpY2FyIGhpcGVydsOtbmN1bG8uLi4iLAorICAgICAgICAiX1JlbW92ZSBMaW5rLi4uIjogIl9TdXByaW1pciBoaXBlcnbDrW5jdWxvLi4uIiwKKyAgICAgICAgIl9UYWJsZSBQcm9wZXJ0aWVzLi4uIjogIlByb3BpX2VkYWRlcyBkZSBsYSB0YWJsYS4uLiIKKyAgICB9LAorICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJJbnNlcnRhci9Nb2RpZmljYXIgdW4gZW5sYWNlIiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTnVldmEgdmVudGFuYSAoX2JsYW5rKSIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIlZhY8OtbyAoIHVzYXIgaW1wbMOtY2l0byApIiwKKyAgICAgICAgIk9LIjogIkFjZXB0YXIiLAorICAgICAgICAiT3RoZXIiOiAiT3RybyIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiTWlzbW8gbWFyY28gKF9zZWxmKSIsCisgICAgICAgICJUYXJnZXQ6IjogIkRlc3Rpbm86IiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAiVMOtdHVsbyAoVG9vbHRpcCk6IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiTWFyY28gc3VwZXJpb3IgKF90b3ApIiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIKKyAgICB9LAorICAgICJFZGl0VGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICJFZGl0YXIgY8OzZGlnbyBIVE1MIGRlbCB0ZXh0byBzZWxlY2Npb25hZG8iLAorICAgICAgICAiT0siOiAiQWNlcHRhciIsCisgICAgICAgICJUYWcgRWRpdG9yIjogIkVkaXRvciBkZSBFdGlxdWV0YXMiCisgICAgfSwKKyAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiT0siOiAiQWNlcHRhciIsCisgICAgICAgICJQcmV2aWV3IjogIlByZXZpc3VhbGl6YXIiCisgICAgfSwKKyAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJJbmZlcmlvciBhYnNvbHV0byIsCisgICAgICAgICJBYnNtaWRkbGUiOiAiTWVkaW8gQWJzb2x1dG8iLAorICAgICAgICAiQWxpZ24iOiAiQWxpbmVhciIsCisgICAgICAgICJCYXNlbGluZSI6ICJMw61uZWEgYmFzZSIsCisgICAgICAgICJCb3JkZXIiOiAiQm9yZGUiLAorICAgICAgICAiQm90dG9tIjogIkluZmVyaW9yIiwKKyAgICAgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCisgICAgICAgICJDbGVhciI6ICJFbGltaW5hciIsCisgICAgICAgICJDb2xvciI6ICJDb2xvciIsCisgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiUHJvcG9yY2lvbmFsIiwKKyAgICAgICAgIkNvcHkiOiAiQ29waWFyIiwKKyAgICAgICAgIkNyb3AiOiAiUmVjb3J0YXIiLAorICAgICAgICAiQ3V0IjogIkNvcnRhciIsCisgICAgICAgICJEaXJlY3RvcnkiOiAiRGlyZWN0b3JpbyIsCisgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiRGlyZWN0b3JpbyBzdXBlcmlvciIsCisgICAgICAgICJFZGl0IjogImVkaXRhciIsCisgICAgICAgICJGaWxlbmFtZToiOiAiTm9tYnJlIGRlbCBmaWNoZXJvOiIsCisgICAgICAgICJGbGlwIEhvcml6b250YWwiOiAiaW52ZXJ0aXIgaG9yaXpvbnRhbG1lbnRlIiwKKyAgICAgICAgIkZsaXAgSW1hZ2UiOiAiaW52ZXJ0aXIgaW1hZ2VuIiwKKyAgICAgICAgIkZsaXAgVmVydGljYWwiOiAiaW52ZXJ0aXIgdmVydGljYWxtZW50ZSIsCisgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiTm8gaGF5IHNvcG9ydGUgcGFyYSBpbcOhZ2VuZXMgZW4gZm9ybWF0byBHSUYuIiwKKyAgICAgICAgIkhlaWdodCI6ICJBbHRvIiwKKyAgICAgICAgIkhlaWdodDoiOiAiQWx0bzoiLAorICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiRGlyZWN0b3JpbyBkZSBpbmljaW8gaW52w6FsaWRvOiIsCisgICAgICAgICJKUEVHIEhpZ2giOiAiSlBFRyBhbHRvIiwKKyAgICAgICAgIkpQRUcgTG93IjogIkpQRUcgYmFqbyIsCisgICAgICAgICJKUEVHIE1lZGl1bSI6ICJKUEVHIG1lZGlvIiwKKyAgICAgICAgIkxlZnQiOiAiSXpxdWllcmRhIiwKKyAgICAgICAgIkxvYWRpbmciOiAiQ2FyZ2FyIiwKKyAgICAgICAgIkxvY2siOiAiQmxvcXVlYXIiLAorICAgICAgICAiTWFyZ2luIjogIk1hcmdlbiIsCisgICAgICAgICJNYXJrZXIiOiAiTWFyY2Fkb3IiLAorICAgICAgICAiTWVhc3VyZSI6ICJEaW1lbnNpb25lcyIsCisgICAgICAgICJNaWRkbGUiOiAiTWVkaW8iLAorICAgICAgICAiTmV3IEZvbGRlciI6ICJDcmVhciBkaXJlY3RvcmlvIiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTnVldmEgdmVudGFuYSAoX2JsYW5rKSIsCisgICAgICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiTm8gaGF5IGltYWdlbiIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIlZhY8OtbyAoIHVzYXIgaW1wbMOtY2l0byApIiwKKyAgICAgICAgIk5vdCBzZXQiOiAiTm8gZGVmaW5pZG8iLAorICAgICAgICAiT0siOiAiQWNlcHRhciIsCisgICAgICAgICJQYWRkaW5nIjogIlJlbGxlbm8gKFBhZGRpbmcpIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zaWNpw7NuIGRlIGxhIGltYWdlbiIsCisgICAgICAgICJQcmV2aWV3IjogIlByZXZpc3VhbGl6YXIiLAorICAgICAgICAiUXVhbGl0eToiOiAiQ2FsaWRhZCIsCisgICAgICAgICJSZWZyZXNoIjogIkFjdHVhbGl6YXIiLAorICAgICAgICAiUmVzaXplIjogIkNhbWJpYXIgdGFtYcOxbyIsCisgICAgICAgICJSaWdodCI6ICJEZXJlY2hhIiwKKyAgICAgICAgIlJvdGF0ZSI6ICJHaXJhciIsCisgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiR2lyYXIgaW1hZ2VuIiwKKyAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJNaXNtbyBtYXJjbyAoX3NlbGYpIiwKKyAgICAgICAgIlNhdmUiOiAiR3VhcmRhciIsCisgICAgICAgICJTdGFydCBYOiI6ICJJbmljaW8gWCIsCisgICAgICAgICJTdGFydCBZOiI6ICJJbmljaW8gWSIsCisgICAgICAgICJUZXh0dG9wIjogIlRleHRvIFN1cGVyaW9yIiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKSI6ICJUw610dWxvIChUb29sdGlwKToiLAorICAgICAgICAiVG9wIjogIlN1cGVyaW9yIiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiTWFyY28gc3VwZXJpb3IgKF90b3ApIiwKKyAgICAgICAgIlRyYXNoIjogIkJhc3VyYSIsCisgICAgICAgICJVcGxvYWQiOiAiU3ViaXIiLAorICAgICAgICAiVzoiOiAiQjoiLAorICAgICAgICAiV2lkdGgiOiAiQW5jaG8iLAorICAgICAgICAiV2lkdGg6IjogIkFuY2hvOiIKKyAgICB9LAorICAgICJGaW5kUmVwbGFjZSI6IHsKKyAgICAgICAgIkNsZWFyIjogIkVsaW1pbmFyIgorICAgIH0sCisgICAgIkZvcm1zIjogeworICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiSW1hZ2VuIFVSTDoiLAorICAgICAgICAiT0siOiAiQWNlcHRhciIsCisgICAgICAgICJSb3dzOiI6ICJGaWxhczoiCisgICAgfSwKKyAgICAiRnVsbFBhZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiRGVzY3JpcHRpb246IjogIkRlc2NyaXBjacOzbjoiLAorICAgICAgICAiT0siOiAiQWNlcHRhciIKKyAgICB9LAorICAgICJGdWxsU2NyZWVuIjogeworICAgICAgICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIk1heGltaXphci9NaW5pbWl6YXIgRWRpdG9yIgorICAgIH0sCisgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAiQWxpZ25tZW50OiI6ICJBbGluZWFjacOzbjoiLAorICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkNlbnRlciI6ICJDZW50cmFyIiwKKyAgICAgICAgIkNvbG9yOiI6ICJDb2xvcjoiLAorICAgICAgICAiSGVpZ2h0OiI6ICJBbHRvOiIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiUmVnbGEgaG9yaXpvbnRhbCIsCisgICAgICAgICJMYXlvdXQiOiAiRGlzdHJpYnVjacOzbiIsCisgICAgICAgICJMZWZ0IjogIkl6cXVpZXJkYSIsCisgICAgICAgICJPSyI6ICJBY2VwdGFyIiwKKyAgICAgICAgIlJpZ2h0IjogIkRlcmVjaGEiLAorICAgICAgICAiV2lkdGg6IjogIkFuY2hvOiIsCisgICAgICAgICJwZXJjZW50IjogInBvciBjaWVudG8iLAorICAgICAgICAicGl4ZWxzIjogInDDrXhlbGVzIgorICAgIH0sCisgICAgIkltYWdlTWFuYWdlciI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJJbmZlcmlvciBhYnNvbHV0byIsCisgICAgICAgICJBYnNtaWRkbGUiOiAiTWVkaW8gQWJzb2x1dG8iLAorICAgICAgICAiQW5nbGU6IjogIsOBbmd1bG86IiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkzDrW5lYSBiYXNlIiwKKyAgICAgICAgIkJvdHRvbSI6ICJJbmZlcmlvciIsCisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiQ2xlYXIiOiAiRWxpbWluYXIiLAorICAgICAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIlByb3BvcmNpb25hbCIsCisgICAgICAgICJDcm9wIjogIlJlY29ydGFyIiwKKyAgICAgICAgIkRpcmVjdG9yeSI6ICJEaXJlY3RvcmlvIiwKKyAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICJEaXJlY3RvcmlvIHN1cGVyaW9yIiwKKyAgICAgICAgIkVkaXQiOiAiZWRpdGFyIiwKKyAgICAgICAgIkZpbGVuYW1lOiI6ICJOb21icmUgZGVsIGZpY2hlcm86IiwKKyAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICJpbnZlcnRpciBob3Jpem9udGFsbWVudGUiLAorICAgICAgICAiRmxpcCBJbWFnZSI6ICJpbnZlcnRpciBpbWFnZW4iLAorICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICJpbnZlcnRpciB2ZXJ0aWNhbG1lbnRlIiwKKyAgICAgICAgIkZvbGRlciBOYW1lOiI6ICJOb21icmUgZGVsIGRpcmVjdG9yaW86IiwKKyAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICJObyBoYXkgc29wb3J0ZSBwYXJhIGltw6FnZW5lcyBlbiBmb3JtYXRvIEdJRi4iLAorICAgICAgICAiSGVpZ2h0OiI6ICJBbHRvOiIsCisgICAgICAgICJJbWFnZSBGb3JtYXQiOiAiRm9ybWF0bzoiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogImluc2VydGFyIGltYWdlbiIsCisgICAgICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICJEaXJlY3RvcmlvIGRlIGluaWNpbyBpbnbDoWxpZG86IiwKKyAgICAgICAgIkpQRUcgSGlnaCI6ICJKUEVHIGFsdG8iLAorICAgICAgICAiSlBFRyBMb3ciOiAiSlBFRyBiYWpvIiwKKyAgICAgICAgIkpQRUcgTWVkaXVtIjogIkpQRUcgbWVkaW8iLAorICAgICAgICAiTGVmdCI6ICJJenF1aWVyZGEiLAorICAgICAgICAiTG9jayI6ICJCbG9xdWVhciIsCisgICAgICAgICJNYXJrZXIiOiAiTWFyY2Fkb3IiLAorICAgICAgICAiTWVhc3VyZSI6ICJEaW1lbnNpb25lcyIsCisgICAgICAgICJNaWRkbGUiOiAiTWVkaW8iLAorICAgICAgICAiTmV3IEZvbGRlciI6ICJDcmVhciBkaXJlY3RvcmlvIiwKKyAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICJObyBoYXkgaW1hZ2VuIiwKKyAgICAgICAgIk5vIEltYWdlcyBGb3VuZCI6ICJObyBzZSBoYSBlbmNvbnRyYWRvIGltYWdlbiIsCisgICAgICAgICJOb3Qgc2V0IjogIk5vIGRlZmluaWRvIiwKKyAgICAgICAgIk9LIjogIkFjZXB0YXIiLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJQb3NpY2nDs24gZGUgbGEgaW1hZ2VuIiwKKyAgICAgICAgIlF1YWxpdHk6IjogIkNhbGlkYWQiLAorICAgICAgICAiUmVmcmVzaCI6ICJBY3R1YWxpemFyIiwKKyAgICAgICAgIlJlc2l6ZSI6ICJDYW1iaWFyIHRhbWHDsW8iLAorICAgICAgICAiUmlnaHQiOiAiRGVyZWNoYSIsCisgICAgICAgICJSb3RhdGUiOiAiR2lyYXIiLAorICAgICAgICAiUm90YXRlIEltYWdlIjogIkdpcmFyIGltYWdlbiIsCisgICAgICAgICJTYXZlIjogIkd1YXJkYXIiLAorICAgICAgICAiU3RhcnQgWDoiOiAiSW5pY2lvIFgiLAorICAgICAgICAiU3RhcnQgWToiOiAiSW5pY2lvIFkiLAorICAgICAgICAiVGV4dHRvcCI6ICJUZXh0byBTdXBlcmlvciIsCisgICAgICAgICJUb3AiOiAiU3VwZXJpb3IiLAorICAgICAgICAiVHJhc2giOiAiQmFzdXJhIiwKKyAgICAgICAgIlc6IjogIkI6IiwKKyAgICAgICAgIldpZHRoOiI6ICJBbmNobzoiCisgICAgfSwKKyAgICAiSW5saW5lU3R5bGVyIjogeworICAgICAgICAiQmFja2dyb3VuZCI6ICJGb25kbyIsCisgICAgICAgICJCYXNlbGluZSI6ICJMw61uZWEgYmFzZSIsCisgICAgICAgICJCb3JkZXIiOiAiQm9yZGUiLAorICAgICAgICAiQm90dG9tIjogIkluZmVyaW9yIiwKKyAgICAgICAgIkNlbnRlciI6ICJDZW50cmFyIiwKKyAgICAgICAgIkNoYXIiOiAiQ2Fyw6FjdGVyIiwKKyAgICAgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIkJvcmRlcyBjb2xhcHNhZG9zIiwKKyAgICAgICAgIkZHIENvbG9yIjogIkNvbG9yIFByaW5jaXBhbCIsCisgICAgICAgICJGbG9hdCI6ICJGbG90YW50ZSIsCisgICAgICAgICJIZWlnaHQiOiAiQWx0byIsCisgICAgICAgICJJbWFnZSBVUkwiOiAiVVJMIGRlIGxhIGltw6FnZW4iLAorICAgICAgICAiSnVzdGlmeSI6ICJKdXN0aWZpY2FyIiwKKyAgICAgICAgIkxheW91dCI6ICJEaXN0cmlidWNpw7NuIiwKKyAgICAgICAgIkxlZnQiOiAiSXpxdWllcmRhIiwKKyAgICAgICAgIk1hcmdpbiI6ICJNYXJnZW4iLAorICAgICAgICAiTWlkZGxlIjogIk1lZGlvIiwKKyAgICAgICAgIk5vbmUiOiAiTmluZ3VubyIsCisgICAgICAgICJQYWRkaW5nIjogIlJlbGxlbm8gKFBhZGRpbmcpIiwKKyAgICAgICAgIlJpZ2h0IjogIkRlcmVjaGEiLAorICAgICAgICAiVGV4dCBhbGlnbiI6ICJBbGluZWFjacOzbiBkZWwgdGV4dG8iLAorICAgICAgICAiVG9wIjogIlN1cGVyaW9yIiwKKyAgICAgICAgIlZlcnRpY2FsIGFsaWduIjogIkFsaW5lYWNpw7NuIHZlcnRpY2FsIiwKKyAgICAgICAgIldpZHRoIjogIkFuY2hvIiwKKyAgICAgICAgInBlcmNlbnQiOiAicG9yIGNpZW50byIsCisgICAgICAgICJwaXhlbHMiOiAicMOteGVsZXMiCisgICAgfSwKKyAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkRlbGV0ZSI6ICJTdXByaW1pciIsCisgICAgICAgICJPSyI6ICJBY2VwdGFyIgorICAgIH0sCisgICAgIkluc2VydEltYWdlIjogeworICAgICAgICAiQWJzYm90dG9tIjogIkluZmVyaW9yIGFic29sdXRvIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJNZWRpbyBBYnNvbHV0byIsCisgICAgICAgICJBbGlnbm1lbnQ6IjogIkFsaW5lYWNpw7NuOiIsCisgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiVGV4dG8gYWx0ZXJuYXRpdm86IiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkzDrW5lYSBiYXNlIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIlRhbWHDsW8gZGVsIGJvcmRlOiIsCisgICAgICAgICJCb3R0b20iOiAiSW5mZXJpb3IiLAorICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIlBhcmEgbmF2ZWdhZG9yZXMgcXVlIG5vIHNvcG9ydGFuIGltw6FnZW5lcyIsCisgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiUmVsbGVubyBob3Jpem9udGFsIiwKKyAgICAgICAgIkhvcml6b250YWw6IjogImhvcml6b250YWw6IiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIlByZXZpc3VhbGl6YWNpw7NuIGRlIGxhIGltYWdlbjoiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJJbWFnZW4gVVJMOiIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiaW5zZXJ0YXIgaW1hZ2VuIiwKKyAgICAgICAgIkxheW91dCI6ICJEaXN0cmlidWNpw7NuIiwKKyAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiVmFjw61vIHNpIG5vIGRlc2VhIG5pbmfDum4gYm9yZGUiLAorICAgICAgICAiTGVmdCI6ICJJenF1aWVyZGEiLAorICAgICAgICAiTWlkZGxlIjogIk1lZGlvIiwKKyAgICAgICAgIk5vdCBzZXQiOiAiTm8gZGVmaW5pZG8iLAorICAgICAgICAiT0siOiAiQWNlcHRhciIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIlBvc2ljacOzbiBkZSBsYSBpbWFnZW4iLAorICAgICAgICAiUHJldmlldyI6ICJQcmV2aXN1YWxpemFyIiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJQcmV2aXN1YWxpemFyIGVuIHVuYSBudWV2YSB2ZW50YW5hIiwKKyAgICAgICAgIlJpZ2h0IjogIkRlcmVjaGEiLAorICAgICAgICAiU3BhY2luZyI6ICJFc3BhY2lhZG8iLAorICAgICAgICAiVGV4dHRvcCI6ICJUZXh0byBTdXBlcmlvciIsCisgICAgICAgICJUb3AiOiAiU3VwZXJpb3IiLAorICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICJSZWxsZW5vIFZlcnRpY2FsIiwKKyAgICAgICAgIlZlcnRpY2FsOiI6ICJWZXJ0aWNhbDoiLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICJEZWJlIGludHJvZHVjaXIgbGEgVVJMIgorICAgIH0sCisgICAgIkluc2VydE1hcnF1ZWUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiSGVpZ2h0OiI6ICJBbHRvOiIsCisgICAgICAgICJMZWZ0IjogIkl6cXVpZXJkYSIsCisgICAgICAgICJPSyI6ICJBY2VwdGFyIiwKKyAgICAgICAgIlJpZ2h0IjogIkRlcmVjaGEiLAorICAgICAgICAiV2lkdGg6IjogIkFuY2hvOiIKKyAgICB9LAorICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIgorICAgIH0sCisgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICJBYnNib3R0b20iOiAiSW5mZXJpb3IgYWJzb2x1dG8iLAorICAgICAgICAiQWJzbWlkZGxlIjogIk1lZGlvIEFic29sdXRvIiwKKyAgICAgICAgIkFsaWdubWVudDoiOiAiQWxpbmVhY2nDs246IiwKKyAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJUZXh0byBhbHRlcm5hdGl2bzoiLAorICAgICAgICAiQmFzZWxpbmUiOiAiTMOtbmVhIGJhc2UiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiVGFtYcOxbyBkZWwgYm9yZGU6IiwKKyAgICAgICAgIkJvdHRvbSI6ICJJbmZlcmlvciIsCisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiUGFyYSBuYXZlZ2Fkb3JlcyBxdWUgbm8gc29wb3J0YW4gaW3DoWdlbmVzIiwKKyAgICAgICAgIkhlaWdodDoiOiAiQWx0bzoiLAorICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIlJlbGxlbm8gaG9yaXpvbnRhbCIsCisgICAgICAgICJIb3Jpem9udGFsOiI6ICJob3Jpem9udGFsOiIsCisgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICJQcmV2aXN1YWxpemFjacOzbiBkZSBsYSBpbWFnZW46IiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiSW1hZ2VuIFVSTDoiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogImluc2VydGFyIGltYWdlbiIsCisgICAgICAgICJMYXlvdXQiOiAiRGlzdHJpYnVjacOzbiIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIlZhY8OtbyBzaSBubyBkZXNlYSBuaW5nw7puIGJvcmRlIiwKKyAgICAgICAgIkxlZnQiOiAiSXpxdWllcmRhIiwKKyAgICAgICAgIk1pZGRsZSI6ICJNZWRpbyIsCisgICAgICAgICJOb3Qgc2V0IjogIk5vIGRlZmluaWRvIiwKKyAgICAgICAgIk9LIjogIkFjZXB0YXIiLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJQb3NpY2nDs24gZGUgbGEgaW1hZ2VuIiwKKyAgICAgICAgIlByZXZpZXciOiAiUHJldmlzdWFsaXphciIsCisgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiUHJldmlzdWFsaXphciBlbiB1bmEgbnVldmEgdmVudGFuYSIsCisgICAgICAgICJSaWdodCI6ICJEZXJlY2hhIiwKKyAgICAgICAgIlNwYWNpbmciOiAiRXNwYWNpYWRvIiwKKyAgICAgICAgIlRleHR0b3AiOiAiVGV4dG8gU3VwZXJpb3IiLAorICAgICAgICAiVG9wIjogIlN1cGVyaW9yIiwKKyAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiUmVsbGVubyBWZXJ0aWNhbCIsCisgICAgICAgICJWZXJ0aWNhbDoiOiAiVmVydGljYWw6IiwKKyAgICAgICAgIldpZHRoOiI6ICJBbmNobzoiCisgICAgfSwKKyAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIKKyAgICB9LAorICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJJbmZlcmlvciBhYnNvbHV0byIsCisgICAgICAgICJBYnNtaWRkbGUiOiAiTWVkaW8gQWJzb2x1dG8iLAorICAgICAgICAiQWxpZ25tZW50OiI6ICJBbGluZWFjacOzbjoiLAorICAgICAgICAiQmFzZWxpbmUiOiAiTMOtbmVhIGJhc2UiLAorICAgICAgICAiQm9yZGVyIjogIkJvcmRlIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIlRhbWHDsW8gZGVsIGJvcmRlOiIsCisgICAgICAgICJCb3R0b20iOiAiSW5mZXJpb3IiLAorICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkNhcHRpb24iOiAiVMOtdHVsbyIsCisgICAgICAgICJDZWxsIHBhZGRpbmc6IjogIlJlbGxlbm8gZGUgY2VsZGFzOiIsCisgICAgICAgICJDZWxsIHNwYWNpbmc6IjogIkVzcGFjaWFkbyBlbnRyZSBjZWxkYXM6IiwKKyAgICAgICAgIkNvbHM6IjogIkNvbHVtbmFzOiIsCisgICAgICAgICJFbSI6ICJFbSIsCisgICAgICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIkNvbHVtbmFzIGRlIGFuY2hvIGZpam8iLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIkHDsWFkaXIgdW5hIHRhYmxhIiwKKyAgICAgICAgIkxheW91dCI6ICJEaXN0cmlidWNpw7NuIiwKKyAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiVmFjw61vIHNpIG5vIGRlc2VhIG5pbmfDum4gYm9yZGUiLAorICAgICAgICAiTGVmdCI6ICJJenF1aWVyZGEiLAorICAgICAgICAiTWlkZGxlIjogIk1lZGlvIiwKKyAgICAgICAgIk5vdCBzZXQiOiAiTm8gZGVmaW5pZG8iLAorICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiTsO6bWVybyBkZSBjb2x1bW5hcyIsCisgICAgICAgICJOdW1iZXIgb2Ygcm93cyI6ICJOw7ptZXJvIGRlIGZpbGFzIiwKKyAgICAgICAgIk9LIjogIkFjZXB0YXIiLAorICAgICAgICAiUGVyY2VudCI6ICJQb3JjZW50YWplIiwKKyAgICAgICAgIlBpeGVscyI6ICJQaXhlbHMiLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICJQb3NpY2nDs24gZGUgZXN0YSB0YWJsYSIsCisgICAgICAgICJSaWdodCI6ICJEZXJlY2hhIiwKKyAgICAgICAgIlJvd3M6IjogIkZpbGFzOiIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIkVzcGFjaWFkbyBlbnRyZSBjZWxkYXMgYWR5YWNlbnRlcyIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIkVzY2FwY2lvIGVudHJlIGVsIGNvbnRlbmlkbyB5IGVsIGJvcmRlIGRlIGxhIGNlbGRhIiwKKyAgICAgICAgIlNwYWNpbmciOiAiRXNwYWNpYWRvIiwKKyAgICAgICAgIlRleHR0b3AiOiAiVGV4dG8gU3VwZXJpb3IiLAorICAgICAgICAiVG9wIjogIlN1cGVyaW9yIiwKKyAgICAgICAgIldpZHRoIG9mIHRoZSB0YWJsZSI6ICJBbmNobyBkZSBsYSB0YWJsYSIsCisgICAgICAgICJXaWR0aCB1bml0IjogIlVuaWRhZCBkZSBhbmNodXJhIiwKKyAgICAgICAgIldpZHRoOiI6ICJBbmNobzoiLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICJEZWJlIGludHJvZHVjaXIgdW4gbsO6bWVybyBkZSBjb2x1bW5hcyIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIkRlYmUgaW50cm9kdWNpciB1biBuw7ptZXJvIGRlIGZpbGFzIgorICAgIH0sCisgICAgIkxhbmdNYXJrcyI6IHsKKyAgICAgICAgIiZtZGFzaDsgbGFuZ3VhZ2UgJm1kYXNoOyI6ICImbWRhc2g7IGlkaW9tYSAmbWRhc2g7IiwKKyAgICAgICAgIkVuZ2xpc2giOiAiSW5nbMOpcyIsCisgICAgICAgICJGcmVuY2giOiAiRnJhbmPDqXMiLAorICAgICAgICAiR3JlZWsiOiAiR3JpZWdvIiwKKyAgICAgICAgIkxhdGluIjogIkxhdMOtbiIsCisgICAgICAgICJsYW5ndWFnZSBzZWxlY3QiOiAic2VsZWNjaW9uYXIgaWRpb21hIgorICAgIH0sCisgICAgIkxpbmtlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSW5zZXJ0YXIvTW9kaWZpY2FyIHVuIGVubGFjZSIsCisgICAgICAgICJPSyI6ICJBY2VwdGFyIiwKKyAgICAgICAgIlRhcmdldDoiOiAiRGVzdGlubzoiLAorICAgICAgICAiVVJMOiI6ICJVUkw6IgorICAgIH0sCisgICAgIkxpc3RUeXBlIjogeworICAgICAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogIlNlbGVjY2lvbmFyIGVzdGlsbyBkZSBsaXN0YSAocGFyYSBsaXN0YXMgb3JkZW5hZGFzKSIsCisgICAgICAgICJEZWNpbWFsIG51bWJlcnMiOiAiTsO6bWVyb3MiLAorICAgICAgICAiTG93ZXIgZ3JlZWsgbGV0dGVycyI6ICJMZXRyYXMgZ3JpZWdhcyBtaW7DunNjdWxhcyIsCisgICAgICAgICJMb3dlciBsYXRpbiBsZXR0ZXJzIjogIkxldHJhcyBtaW7DunNjdWxhcyIsCisgICAgICAgICJMb3dlciByb21hbiBudW1iZXJzIjogIk7Dum1lcm9zIHJvbWFub3MgZW4gbWluw7pzY3VsYXMiLAorICAgICAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICJMZXRyYXMgbWF5w7pzY3VsYXMiLAorICAgICAgICAiVXBwZXIgcm9tYW4gbnVtYmVycyI6ICJOw7ptZXJvcyByb21hbm9zIGVuIG1hecO6c2N1bGFzIgorICAgIH0sCisgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiSW1hZ2UgUHJldmlldyI6ICJQcmV2aXN1YWxpemFjacOzbiBkZSBsYSBpbWFnZW46IiwKKyAgICAgICAgIk9LIjogIkFjZXB0YXIiLAorICAgICAgICAiUHJldmlldyI6ICJQcmV2aXN1YWxpemFyIiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJQcmV2aXN1YWxpemFyIGVuIHVuYSBudWV2YSB2ZW50YW5hIgorICAgIH0sCisgICAgIk9wZXJhIjogeworICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICJFbCBib3TDs24gZGUgcGVnYXIgbm8gZnVuY2lvbmEgZW4gbG9zIG5hdmVnYWRvcmVzIGRlIE1vemlsbGEgcG9yIG1vdGl2b3MgZGUgc2VndXJpZGFkLiBQcmVzaW9uZSBDVFJMLVYgZW4gc3UgdGVjbGFkbyBwYXJhIHBlZ2FybG8gZGlyZWN0YW1lbnRlIgorICAgIH0sCisgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiCisgICAgfSwKKyAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIk9LIjogIkFjZXB0YXIiCisgICAgfSwKKyAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiQ29weSI6ICJDb3BpYXIiLAorICAgICAgICAiRGVsZXRlIjogIlN1cHJpbWlyIiwKKyAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICJEaXJlY3RvcmlvIHN1cGVyaW9yIiwKKyAgICAgICAgIkZpbGVuYW1lIjogIk5vbWJyZSBkZWwgZmljaGVybzoiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogImluc2VydGFyIGltYWdlbiIsCisgICAgICAgICJOZXcgRm9sZGVyIjogIkNyZWFyIGRpcmVjdG9yaW8iLAorICAgICAgICAiU2F2ZSI6ICJHdWFyZGFyIgorICAgIH0sCisgICAgIlF1aWNrVGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIgorICAgIH0sCisgICAgIlNhdmVTdWJtaXQiOiB7CisgICAgICAgICJTYXZlIjogIkd1YXJkYXIiCisgICAgfSwKKyAgICAiU2V0SWQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiRGVsZXRlIjogIlN1cHJpbWlyIiwKKyAgICAgICAgIk9LIjogIkFjZXB0YXIiCisgICAgfSwKKyAgICAiU21hcnRSZXBsYWNlIjogeworICAgICAgICAiT0siOiAiQWNlcHRhciIKKyAgICB9LAorICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiT0siOiAiQWNlcHRhciIKKyAgICB9LAorICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIk9LIjogIkFjZXB0YXIiCisgICAgfSwKKyAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAiQWxsIGZvdXIgc2lkZXMiOiAiVG9kb3MgbG9zIGN1YXRybyBsYWRvcyIsCisgICAgICAgICJCb3JkZXJzIjogIkJvcmRlcyIsCisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiQ2FwdGlvbiI6ICJUw610dWxvIiwKKyAgICAgICAgIkNlbGwgUHJvcGVydGllcyI6ICJQcm9waWVkYWRlcyBkZSBsYSBDZWxkYSIsCisgICAgICAgICJDZWxsIHByb3BlcnRpZXMiOiAiUHJvcGllZGFkZXMgZGUgbGEgY2VsZGEiLAorICAgICAgICAiRGVsZXRlIGNlbGwiOiAiU3VwcmltaXIgY2VsZGEiLAorICAgICAgICAiRGVsZXRlIGNvbHVtbiI6ICJTdXByaW1pciBjb2x1bW5hIiwKKyAgICAgICAgIkRlbGV0ZSByb3ciOiAiU3VwcmltaXIgZmlsYSIsCisgICAgICAgICJEZXNjcmlwdGlvbiI6ICJEZXNjcmlwY2nDs24iLAorICAgICAgICAiRnJhbWVzIjogIk1hcmNvcyIsCisgICAgICAgICJJbnNlcnQgY2VsbCBhZnRlciI6ICJJbnNlcnRhciBjZWxkYSBkZXRyw6FzIiwKKyAgICAgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICJJbnNlcnRhciBjZWxkYSBkZWxhbnRlIiwKKyAgICAgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAiSW5zZXJ0YXIgY29sdW1uYSBkZXRyw6FzIiwKKyAgICAgICAgIkluc2VydCBjb2x1bW4gYmVmb3JlIjogIkluc2VydGFyIGNvbHVtbmEgZGVsYW50ZSIsCisgICAgICAgICJJbnNlcnQgcm93IGFmdGVyIjogIkluc2VydGFyIGZpbGEgZGV0csOhcyIsCisgICAgICAgICJJbnNlcnQgcm93IGJlZm9yZSI6ICJJbnNlcnRhciBmaWxhIGRlbGFudGUiLAorICAgICAgICAiTWVyZ2UgY2VsbHMiOiAiVW5pciBjZWxkYXMiLAorICAgICAgICAiTm8gcnVsZXMiOiAiTmluZ3VuYSByZWdsYSIsCisgICAgICAgICJObyBzaWRlcyI6ICJOaW5nw7puIGxhZG8iLAorICAgICAgICAiT0siOiAiQWNlcHRhciIsCisgICAgICAgICJQYWRkaW5nIjogIlJlbGxlbm8gKFBhZGRpbmcpIiwKKyAgICAgICAgIlBsZWFzZSBjbGljayBpbnRvIHNvbWUgY2VsbCI6ICJQb3IgZmF2b3IsIGhheiBjbGljIGVuIGFsZ3VuYSBjZWxkYSIsCisgICAgICAgICJSb3cgUHJvcGVydGllcyI6ICJQcm9waWVkYWRlcyBkZSBsYSBGaWxhIiwKKyAgICAgICAgIlJvdyBwcm9wZXJ0aWVzIjogIlByb3BpZWRhZGVzIGRlIGxhIGZpbGEiLAorICAgICAgICAiUm93cyI6ICJGaWxhczoiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICJMYXMgbMOtbmVhcyBhcGFyZWNlcsOhbiBlbnRyZSB0b2RhcyBsYXMgZmlsYXMgeSBjb2x1bW5hcyIsCisgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGNvbHVtbnMgb25seSI6ICJMYXMgbMOtbmVhcyBhcGFyZWNlcsOhbiBzb2xvIGVudHJlIGxhcyBjb2x1bW5hcyIsCisgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIHJvd3Mgb25seSI6ICJMYXMgbMOtbmVhcyBhcGFyZWNlcsOhbiBzb2xvIGVudHJlIGxhcyBmaWxhcyIsCisgICAgICAgICJTcGFjaW5nIjogIkVzcGFjaWFkbyIsCisgICAgICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogIkVzcGFjaWFkbyB5IFJlbGxlbm8iLAorICAgICAgICAiU3BsaXQgY29sdW1uIjogIkRpdmlkaXIgY29sdW1uYSIsCisgICAgICAgICJTcGxpdCByb3ciOiAiRGl2aWRpciBmaWxhIiwKKyAgICAgICAgIlN1bW1hcnkiOiAiUmVzdW1lbiIsCisgICAgICAgICJUYWJsZSBQcm9wZXJ0aWVzIjogIlByb3BpZWRhZGVzIGRlIGxhIFRhYmxhIiwKKyAgICAgICAgIlRhYmxlIHByb3BlcnRpZXMiOiAiUHJvcGllZGFkZXMgZGUgbGEgdGFibGEiLAorICAgICAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAiU29sbyBlbCBsYWRvIGluZmVyaW9yIiwKKyAgICAgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIlNvbG8gZWwgbGFkbyBpenF1aWVyZG8iLAorICAgICAgICAiVGhlIHJpZ2h0IGFuZCBsZWZ0IHNpZGVzIG9ubHkiOiAiU29sbyBsb3MgbGFkb3MgZGVyZWNobyBlIGl6cXVpZXJkbyIsCisgICAgICAgICJUaGUgcmlnaHQtaGFuZCBzaWRlIG9ubHkiOiAiU29sbyBlbCBsYWRvIGRlcmVjaG8iLAorICAgICAgICAiVGhlIHRvcCBhbmQgYm90dG9tIHNpZGVzIG9ubHkiOiAiU29sbyBsb3MgbGFkb3Mgc3VwZXJpb3IgZSBpbmZlcmlvciIsCisgICAgICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICJTb2xvIGVsIGxhZG8gc3VwZXJpb3IiLAorICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY2VsbCBpbiByb3cuIjogIlhpbmhhIHNlIHJldXNhIGNvYmFyZGVtZW50ZSBhIGVsaW1pbmFyIGxhIMO6bHRpbWEgY2VsZGEgZW4gbGEgZmlsYS4iLAorICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICJYaW5oYSBzZSByZXVzYSBjb2JhcmRlbWVudGUgYSBlbGltaW5hciBsYSDDumx0aW1hIGNvbHVtbmEgZW4gbGEgdGFibGEuIiwKKyAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iOiAiWGluaGEgc2UgcmV1c2EgY29iYXJkZW1lbnRlIGEgZWxpbWluYXIgbGEgw7psdGltYSBmaWxhIGVuIGxhIHRhYmxhLiIsCisgICAgICAgICJwaXhlbHMiOiAicMOteGVsZXMiCisgICAgfSwKKyAgICAiVGVtcGxhdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiCisgICAgfSwKKyAgICAiVW5Gb3JtYXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiT0siOiAiQWNlcHRhciIKKyAgICB9LAorICAgICJVbnNhdmVkQ2hhbmdlcyI6IHsKKyAgICAgICAgIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgZWRpdG9yIjogIlVzdGVkIG5vIGhhIGd1YXJkYWRvIHN1cyBtb2RpZmljYWNpb25lcyIKKyAgICB9LAorICAgICJYaW5oYSI6IHsKKyAgICAgICAgIiYjODIxMjsgZm9udCAmIzgyMTI7IjogIiYjODIxMjsgZnVlbnRlICYjODIxMjsiLAorICAgICAgICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICImIzgyMTI7IGZvcm1hdG8gJiM4MjEyOyIsCisgICAgICAgICImIzgyMTI7IHNpemUgJiM4MjEyOyI6ICImIzgyMTI7IHRhbWHDsW8gJiM4MjEyOyIsCisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJTb2JyZSBlc3RlIEVkaXRvciIsCisgICAgICAgICJBZGRyZXNzIjogIkRpcmVjY2nDs24iLAorICAgICAgICAiQmFja2dyb3VuZCBDb2xvciI6ICJDb2xvciBkZSBmb25kbyIsCisgICAgICAgICJCb2xkIjogIk5lZ3JpdGEiLAorICAgICAgICAiQnVsbGV0ZWQgTGlzdCI6ICJMaXN0YSBubyBudW1lcmFkYSIsCisgICAgICAgICJDbGVhbiBjb250ZW50IHBhc3RlZCBmcm9tIFdvcmQiOiAiTGltcGlhciBlbCBjb250ZW5pZG8gcGVnYWRvIGRlc2RlIFdvcmQiLAorICAgICAgICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiQm9ycmFyIGxhcyBldGlxdWV0YXMgZGUgZnVlbnRlIiwKKyAgICAgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiQm9ycmFyIGV0aXF1ZXRhcyBkZSBNU09mZmljZSIsCisgICAgICAgICJDbG9zZSI6ICJDZXJyYXIiLAorICAgICAgICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICJDb25zdHJ1eWVuZG8gb2JqZXRvIiwKKyAgICAgICAgIkNvcHkgc2VsZWN0aW9uIjogIkNvcGlhciIsCisgICAgICAgICJDcmVhdGUgU3RhdHVzYmFyIjogIkNyZWFyIGJhcnJhIGRlIGVzdGFkbyIsCisgICAgICAgICJDcmVhdGUgVG9vbGJhciI6ICJDcmVhciBiYXJyYSBkZSBoZXJyYW1pZW50YXMiLAorICAgICAgICAiQ3VycmVudCBzdHlsZSI6ICJFc3RpbG8gYWN0dWFsIiwKKyAgICAgICAgIkN1dCBzZWxlY3Rpb24iOiAiQ29ydGFyIiwKKyAgICAgICAgIkRlY3JlYXNlIEluZGVudCI6ICJSZWR1Y2lyIHNhbmdyw61hIiwKKyAgICAgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIkRpcmVjY2nDs24gZGUgaXpxdWllcmRhIGEgZGVyZWNoYSIsCisgICAgICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJEaXJlY2Npw7NuIGRlIGRlcmVjaGEgYSBpenF1aWVyZGEiLAorICAgICAgICAiRmluaXNoaW5nIjogIkZpbmFsaXphbmRvIiwKKyAgICAgICAgIkZvbnQgQ29sb3IiOiAiQ29sb3IgZGUgbGEgZnVlbnRlIiwKKyAgICAgICAgIkZvcm1hdHRlZCI6ICJGb3JtYXRlYWRvIiwKKyAgICAgICAgIkdlbmVyYXRlIFhpbmhhIGZyYW1ld29yayI6ICJHZW5lcmFyIFhpbmhhIGZyYW1ld29yayIsCisgICAgICAgICJIZWFkaW5nIDEiOiAiQ2FiZWNlcmEgMSIsCisgICAgICAgICJIZWFkaW5nIDIiOiAiQ2FiZWNlcmEgMiIsCisgICAgICAgICJIZWFkaW5nIDMiOiAiQ2FiZWNlcmEgMyIsCisgICAgICAgICJIZWFkaW5nIDQiOiAiQ2FiZWNlcmEgNCIsCisgICAgICAgICJIZWFkaW5nIDUiOiAiQ2FiZWNlcmEgNSIsCisgICAgICAgICJIZWFkaW5nIDYiOiAiQ2FiZWNlcmEgNiIsCisgICAgICAgICJIZWFkaW5ncyI6ICJDYWJlY2VyYXMiLAorICAgICAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiQXl1ZGEiLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIlJlZ2xhIGhvcml6b250YWwiLAorICAgICAgICAiSW5jcmVhc2UgSW5kZW50IjogIkF1bWVudGFyIHNhbmdyw61hIiwKKyAgICAgICAgIkluaXQgZWRpdG9yIHNpemUiOiAiSW5pY2lhciBlbCB0YW1hw7FvIGRlbCBlZGl0b3IiLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIkHDsWFkaXIgdW5hIHRhYmxhIiwKKyAgICAgICAgIkluc2VydCBXZWIgTGluayI6ICJJbnNlcnRhciBlbmxhY2Ugd2ViIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiSW5zZXJ0YXIvbW9kaWZpY2FyIGltYWdlbiIsCisgICAgICAgICJJbnNlcnQvT3ZlcndyaXRlIjogIkluc2VydGFyL1NvYnJlZXNjcmliaXIiLAorICAgICAgICAiSXRhbGljIjogIkN1cnNpdmEiLAorICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiQWxpbmVhciBhbCBjZW50cm8iLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIkp1c3RpZmljYXIiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIkFsaW5lYXIgYSBsYSBpenF1aWVyZGEiLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICJBbGluZWFyIGEgbGEgZGVyZWNoYSIsCisgICAgICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiQXRham9zIGRlIHRlY2xhZG8iLAorICAgICAgICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIjogIkNhcmdhIGVuIHByb2Nlc28uIFBvciBmYXZvciBlc3BlcmUuIiwKKyAgICAgICAgIkxvYWRpbmcgcGx1Z2luICRwbHVnaW4iOiAiQ2FyZ2FuZG8gZWwgcGx1Z2luICRwbHVnaW4iLAorICAgICAgICAiTm9ybWFsIjogIk5vcm1hbCIsCisgICAgICAgICJPcmRlcmVkIExpc3QiOiAiTGlzdGEgbnVtZXJhZGEiLAorICAgICAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiUGVnYXIgZGVzZGUgZWwgcG9ydGFwYXBlbGVzIiwKKyAgICAgICAgIlBhdGgiOiAiUnV0YSIsCisgICAgICAgICJQcmludCBkb2N1bWVudCI6ICJJbXByaW1pciBkb2N1bWVudG8iLAorICAgICAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiUmVoYWNlciIsCisgICAgICAgICJSZWdpc3RlciBwbHVnaW4gJHBsdWdpbiI6ICJSZWdpc3RybyBkZSBwbHVnaW4gJHBsdWdpbiIsCisgICAgICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICJCb3JyYXIgZm9ybWF0byIsCisgICAgICAgICJTYXZlIGFzIjogIkd1YXJkYXIgY29tbyIsCisgICAgICAgICJTZWxlY3QgYWxsIjogIlNlbGVjY2lvbmFyIHRvZG8iLAorICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiRVN0YWJsZWNlciBlbCBmb3JtYXRvIGEgcGFycmFmbyIsCisgICAgICAgICJTcGxpdCBCbG9jayI6ICJEaXZpZGlyIGVsIGJsb3F1ZSIsCisgICAgICAgICJTdHJpa2V0aHJvdWdoIjogIlRhY2hhZG8iLAorICAgICAgICAiU3Vic2NyaXB0IjogIlN1YsOtbmRpY2UiLAorICAgICAgICAiU3VwZXJzY3JpcHQiOiAiU3VwZXLDrW5kaWNlIiwKKyAgICAgICAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICJFbCBlZGl0b3IgcHJvcG9yY2lvbmEgbGFzIHNpZ3VpZW50ZXMgY29tYmluYWNpb25lczoiLAorICAgICAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiQcOxYWRpci9RdWl0YXIgYm9yZGVzIiwKKyAgICAgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJWZXIgSFRNTCIsCisgICAgICAgICJVbmRlcmxpbmUiOiAiU3VicmF5YWRvIiwKKyAgICAgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkRlc2hhY2VyIiwKKyAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiwr9EZXNlYSBlbGltaW5hciBsYXMgZGVmaW5pY2lvbmVzIGRlIGNvbG9yIGRlIGZ1ZW50ZT8iLAorICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiwr9EZXNlYSBlbGltaW5hciBsYXMgZGVmaW5pY2lvbmVzIGRlIHRhbWHDsW8gZGUgZnVlbnRlPyIsCisgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiwr9EZXNlYSBlbGltaW5hciBsYXMgZGVmaW5pY2lhb25lcyBkZSB0aXBvIGRlIGZ1ZW50ZT8iLAorICAgICAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIlNlIGVuY3VlbnRyYSBlbiBNT0RPIFRFWFRPLiBVc2UgZWwgYm90w7NuIFs8Pl0gcGFyYSBjYW1iaWFyIGRlIG51ZXZvIGFsIG1vZG8gV1lTSVdZRyIsCisgICAgICAgICJpbnNlcnQgbGluZWJyZWFrIjogIkluc2VydGFyIHNhbHRvIGRlIGzDrW5lYSIsCisgICAgICAgICJuZXcgcGFyYWdyYXBoIjogIk51ZXZvIHBhcnJhZm8iCisgICAgfSwKKyAgICAiX19ORVdfVFJBTlNMQVRJT05TX18iOiB7CisgICAgICAgICJDaGFyQ291bnRlciI6IHsKKyAgICAgICAgICAgICIuLi4gaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAgICAgICAgICJDaGFycyI6ICIiLAorICAgICAgICAgICAgIkhUTUwiOiAiIiwKKyAgICAgICAgICAgICJXb3JkcyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDaGFyYWN0ZXJNYXAiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IHNwZWNpYWwgY2hhcmFjdGVyIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAgICAgIkRlbGV0ZSBDZWxsIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICIiLAorICAgICAgICAgICAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEZWZpbml0aW9uTGlzdCI6IHsKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGRlc2NyaXB0aW9uIjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiBsaXN0IjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiB0ZXJtIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRpYWxvZ3MiOiB7CisgICAgICAgICAgICAiU29tZSBUZXh0IEhlcmUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRHluYW1pY0NTUyI6IHsKKyAgICAgICAgICAgICJDaG9vc2Ugc3R5bGVzaGVldCI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQiOiAiIiwKKyAgICAgICAgICAgICJVbmRlZmluZWQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgICAgICJFZGl0IFRhZyBCeSBQZWciOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICAgICAiIT0iOiAiIiwKKyAgICAgICAgICAgICIhaW4iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7LSI6ICIiLAorICAgICAgICAgICAgIiZndDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSZndDsiOiAiIiwKKyAgICAgICAgICAgICImbHQ7eCZndDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYCFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgLmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAwYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDJgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgM2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA0YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA3YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDhgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGBlYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsmbmJzcDtgMWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YCt7Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2AtOlxcIGAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLXs6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YENgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGNvc2AiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgbG5gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHBpYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgc2luYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0YW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRpbWVzYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZxdW90O3RleHQmcXVvdDsiOiAiIiwKKyAgICAgICAgICAgICInK2Zvcm11bGErJyI6ICIiLAorICAgICAgICAgICAgIigobiksKGspKSI6ICIiLAorICAgICAgICAgICAgIih4KzEpLyh4LTEpIjogIiIsCisgICAgICAgICAgICAiKiI6ICIiLAorICAgICAgICAgICAgIioqIjogIiIsCisgICAgICAgICAgICAiKy0iOiAiIiwKKyAgICAgICAgICAgICItJmd0OyI6ICIiLAorICAgICAgICAgICAgIi0mbHQ7IjogIiIsCisgICAgICAgICAgICAiLToiOiAiIiwKKyAgICAgICAgICAgICItPSI6ICIiLAorICAgICAgICAgICAgIi8vIjogIiIsCisgICAgICAgICAgICAiL18iOiAiIiwKKyAgICAgICAgICAgICI6LiI6ICIiLAorICAgICAgICAgICAgIj0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiQCI6ICIiLAorICAgICAgICAgICAgIltbYSxiXSxbYyxkXV0iOiAiIiwKKyAgICAgICAgICAgICJcXFxcIjogIiIsCisgICAgICAgICAgICAiXFxuQ2xpY2sgaW4gdGhlIGJveCB0byB1c2UgeW91ciBrZXlib2FyZCBvciB1c2UgdGhlIGJ1dHRvbnNcXG4iOiAiIiwKKyAgICAgICAgICAgICJeXiI6ICIiLAorICAgICAgICAgICAgIl5eXiI6ICIiLAorICAgICAgICAgICAgIl9ffCI6ICIiLAorICAgICAgICAgICAgIl98XyI6ICIiLAorICAgICAgICAgICAgImAhPWAiOiAiIiwKKyAgICAgICAgICAgICJgIWluYCI6ICIiLAorICAgICAgICAgICAgImAmYW5kO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmNhcDtgIjogIiIsCisgICAgICAgICAgICAiYCZjdXA7YCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7LWAiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDt4Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJm9yO2AiOiAiIiwKKyAgICAgICAgICAgICJgJnF1b3Q7dGV4dCZxdW90O2AiOiAiIiwKKyAgICAgICAgICAgICJgKChuKSwoaykpYCI6ICIiLAorICAgICAgICAgICAgImAoeCsxKS8oeC0xKWAiOiAiIiwKKyAgICAgICAgICAgICJgKipgIjogIiIsCisgICAgICAgICAgICAiYCpgIjogIiIsCisgICAgICAgICAgICAiYCstYCI6ICIiLAorICAgICAgICAgICAgImAtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLSZsdDtgIjogIiIsCisgICAgICAgICAgICAiYC06YCI6ICIiLAorICAgICAgICAgICAgImAtPWAiOiAiIiwKKyAgICAgICAgICAgICJgLy9gIjogIiIsCisgICAgICAgICAgICAiYC9fYCI6ICIiLAorICAgICAgICAgICAgImA6LmAiOiAiIiwKKyAgICAgICAgICAgICJgPSZndDtgIjogIiIsCisgICAgICAgICAgICAiYEBgIjogIiIsCisgICAgICAgICAgICAiYFtbYSxiXSxbYyxkXV1gIjogIiIsCisgICAgICAgICAgICAiYFxcXFxgIjogIiIsCisgICAgICAgICAgICAiYF9ffGAiOiAiIiwKKyAgICAgICAgICAgICJgX3xfYCI6ICIiLAorICAgICAgICAgICAgImBBQWAiOiAiIiwKKyAgICAgICAgICAgICJgYWxlcGhgIjogIiIsCisgICAgICAgICAgICAiYGFscGhhYCI6ICIiLAorICAgICAgICAgICAgImBhbmRgIjogIiIsCisgICAgICAgICAgICAiYGJhcmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgQ0NgIjogIiIsCisgICAgICAgICAgICAiYGNjYWAiOiAiIiwKKyAgICAgICAgICAgICJgY2hpYCI6ICIiLAorICAgICAgICAgICAgImBkYXJyYCI6ICIiLAorICAgICAgICAgICAgImBkZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsYCI6ICIiLAorICAgICAgICAgICAgImBEZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRpYW1vbmRgIjogIiIsCisgICAgICAgICAgICAiYGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGR5L2R4YCI6ICIiLAorICAgICAgICAgICAgImBFRWAiOiAiIiwKKyAgICAgICAgICAgICJgZXBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgZXRhYCI6ICIiLAorICAgICAgICAgICAgImBmcmFgIjogIiIsCisgICAgICAgICAgICAiYEdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBnYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ3JhZGAiOiAiIiwKKyAgICAgICAgICAgICJgaGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaGF0YWAiOiAiIiwKKyAgICAgICAgICAgICJgaWZgIjogIiIsCisgICAgICAgICAgICAiYGluYCI6ICIiLAorICAgICAgICAgICAgImBpbnRgIjogIiIsCisgICAgICAgICAgICAiYGlvdGFgIjogIiIsCisgICAgICAgICAgICAiYGthcHBhYCI6ICIiLAorICAgICAgICAgICAgImBsYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYExhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGltXyh4LSZndDtvbylgIjogIiIsCisgICAgICAgICAgICAiYGxvZ2AiOiAiIiwKKyAgICAgICAgICAgICJgbXVgIjogIiIsCisgICAgICAgICAgICAiYE5OYCI6ICIiLAorICAgICAgICAgICAgImBubmAiOiAiIiwKKyAgICAgICAgICAgICJgbm90YCI6ICIiLAorICAgICAgICAgICAgImBudWAiOiAiIiwKKyAgICAgICAgICAgICJgbytgIjogIiIsCisgICAgICAgICAgICAiYG8uYCI6ICIiLAorICAgICAgICAgICAgImBPL2AiOiAiIiwKKyAgICAgICAgICAgICJgb2ludGAiOiAiIiwKKyAgICAgICAgICAgICJgb21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYE9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBvb2AiOiAiIiwKKyAgICAgICAgICAgICJgb3JgIjogIiIsCisgICAgICAgICAgICAiYG94YCI6ICIiLAorICAgICAgICAgICAgImBQaGlgIjogIiIsCisgICAgICAgICAgICAiYHBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGlgIjogIiIsCisgICAgICAgICAgICAiYHBpYCI6ICIiLAorICAgICAgICAgICAgImBwcm9kYCI6ICIiLAorICAgICAgICAgICAgImBwcm9wYCI6ICIiLAorICAgICAgICAgICAgImBQc2lgIjogIiIsCisgICAgICAgICAgICAiYHBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgUVFgIjogIiIsCisgICAgICAgICAgICAiYHF1YWRgIjogIiIsCisgICAgICAgICAgICAiYHJBcnJgIjogIiIsCisgICAgICAgICAgICAiYHJob2AiOiAiIiwKKyAgICAgICAgICAgICJgcm9vdChuKSh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgUlJgIjogIiIsCisgICAgICAgICAgICAiYHNmYWAiOiAiIiwKKyAgICAgICAgICAgICJgc2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYFNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzcXJ0KHgpYCI6ICIiLAorICAgICAgICAgICAgImBzcXVhcmVgIjogIiIsCisgICAgICAgICAgICAiYHN0YWNrcmVsKC0mZ3Q7KSgrKWAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViYCI6ICIiLAorICAgICAgICAgICAgImBzdWJlYCI6ICIiLAorICAgICAgICAgICAgImBzdW1gIjogIiIsCisgICAgICAgICAgICAiYHN1cGAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwZWAiOiAiIiwKKyAgICAgICAgICAgICJgdGF1YCI6ICIiLAorICAgICAgICAgICAgImBUaGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdGhldGFgIjogIiIsCisgICAgICAgICAgICAiYFRUYCI6ICIiLAorICAgICAgICAgICAgImB0dGFgIjogIiIsCisgICAgICAgICAgICAiYHVhcnJgIjogIiIsCisgICAgICAgICAgICAiYHVsYWAiOiAiIiwKKyAgICAgICAgICAgICJgdXBzaWxvbmAiOiAiIiwKKyAgICAgICAgICAgICJgdXVgIjogIiIsCisgICAgICAgICAgICAiYHZlY2FgIjogIiIsCisgICAgICAgICAgICAiYHZ2YCI6ICIiLAorICAgICAgICAgICAgImB4XyhtbilgIjogIiIsCisgICAgICAgICAgICAiYFhpYCI6ICIiLAorICAgICAgICAgICAgImB4aWAiOiAiIiwKKyAgICAgICAgICAgICJgeHhgIjogIiIsCisgICAgICAgICAgICAiYHpldGFgIjogIiIsCisgICAgICAgICAgICAiYFpaYCI6ICIiLAorICAgICAgICAgICAgImB8LSZndDtgIjogIiIsCisgICAgICAgICAgICAiYHwtLWAiOiAiIiwKKyAgICAgICAgICAgICJgfD09YCI6ICIiLAorICAgICAgICAgICAgImB8X19gIjogIiIsCisgICAgICAgICAgICAiYHx+YCI6ICIiLAorICAgICAgICAgICAgImB+PWAiOiAiIiwKKyAgICAgICAgICAgICJgfnxgIjogIiIsCisgICAgICAgICAgICAiYH5+YCI6ICIiLAorICAgICAgICAgICAgIkFBIjogIiIsCisgICAgICAgICAgICAiYWxlcGgiOiAiIiwKKyAgICAgICAgICAgICJhbHBoYSI6ICIiLAorICAgICAgICAgICAgImFuZCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aCBGb3JtdWxhIElucHV0IjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoTUwgRXhhbXBsZSI6ICIiLAorICAgICAgICAgICAgImJhcmEiOiAiIiwKKyAgICAgICAgICAgICJCYXNlZCBvbiBBU0NJSU1hdGhNTCBieSI6ICIiLAorICAgICAgICAgICAgImJiYSI6ICIiLAorICAgICAgICAgICAgImJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiZXRhIjogIiIsCisgICAgICAgICAgICAiQ0MiOiAiIiwKKyAgICAgICAgICAgICJjY2EiOiAiIiwKKyAgICAgICAgICAgICJjaGkiOiAiIiwKKyAgICAgICAgICAgICJkYXJyIjogIiIsCisgICAgICAgICAgICAiZGRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkZWwiOiAiIiwKKyAgICAgICAgICAgICJEZWx0YSI6ICIiLAorICAgICAgICAgICAgImRlbHRhIjogIiIsCisgICAgICAgICAgICAiZGlhbW9uZCI6ICIiLAorICAgICAgICAgICAgImRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkeS9keCI6ICIiLAorICAgICAgICAgICAgIkVFIjogIiIsCisgICAgICAgICAgICAiZXBzaSI6ICIiLAorICAgICAgICAgICAgImV0YSI6ICIiLAorICAgICAgICAgICAgIkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFzY2lpTWF0aE1MIHZpc2l0IHRoaXMgcGFnZToiOiAiIiwKKyAgICAgICAgICAgICJGb3JtdWxhIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgImZyYSI6ICIiLAorICAgICAgICAgICAgImdhbW1hIjogIiIsCisgICAgICAgICAgICAiR2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJncmFkIjogIiIsCisgICAgICAgICAgICAiaEFyciI6ICIiLAorICAgICAgICAgICAgImhhcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXRhIjogIiIsCisgICAgICAgICAgICAiaWYiOiAiIiwKKyAgICAgICAgICAgICJpbiI6ICIiLAorICAgICAgICAgICAgIklucHV0IjogIiIsCisgICAgICAgICAgICAiaW50IjogIiIsCisgICAgICAgICAgICAiaW50X2FeYmYoeClkeCI6ICIiLAorICAgICAgICAgICAgImlvdGEiOiAiIiwKKyAgICAgICAgICAgICJrYXBwYSI6ICIiLAorICAgICAgICAgICAgIkxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhcnIiOiAiIiwKKyAgICAgICAgICAgICJsQXJyIjogIiIsCisgICAgICAgICAgICAibGltXyh4LSZndDtvbykiOiAiIiwKKyAgICAgICAgICAgICJtdSI6ICIiLAorICAgICAgICAgICAgIk5OIjogIiIsCisgICAgICAgICAgICAibm4iOiAiIiwKKyAgICAgICAgICAgICJubm4iOiAiIiwKKyAgICAgICAgICAgICJub3QiOiAiIiwKKyAgICAgICAgICAgICJudSI6ICIiLAorICAgICAgICAgICAgIm8rIjogIiIsCisgICAgICAgICAgICAiby4iOiAiIiwKKyAgICAgICAgICAgICJPLyI6ICIiLAorICAgICAgICAgICAgIm9pbnQiOiAiIiwKKyAgICAgICAgICAgICJvbWVnYSI6ICIiLAorICAgICAgICAgICAgIk9tZWdhIjogIiIsCisgICAgICAgICAgICAib28iOiAiIiwKKyAgICAgICAgICAgICJvciI6ICIiLAorICAgICAgICAgICAgIm94IjogIiIsCisgICAgICAgICAgICAiUGhpIjogIiIsCisgICAgICAgICAgICAicGhpIjogIiIsCisgICAgICAgICAgICAicGkiOiAiIiwKKyAgICAgICAgICAgICJQaSI6ICIiLAorICAgICAgICAgICAgInByb2QiOiAiIiwKKyAgICAgICAgICAgICJwcm9wIjogIiIsCisgICAgICAgICAgICAicHNpIjogIiIsCisgICAgICAgICAgICAiUHNpIjogIiIsCisgICAgICAgICAgICAiUVEiOiAiIiwKKyAgICAgICAgICAgICJxdWFkIjogIiIsCisgICAgICAgICAgICAickFyciI6ICIiLAorICAgICAgICAgICAgInJobyI6ICIiLAorICAgICAgICAgICAgInJvb3QobikoeCkiOiAiIiwKKyAgICAgICAgICAgICJSUiI6ICIiLAorICAgICAgICAgICAgInNmYSI6ICIiLAorICAgICAgICAgICAgInNpZ21hIjogIiIsCisgICAgICAgICAgICAiU2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJzcXJ0KHgpIjogIiIsCisgICAgICAgICAgICAic3F1YXJlIjogIiIsCisgICAgICAgICAgICAic3RhY2tyZWwoLSZndDspKCspIjogIiIsCisgICAgICAgICAgICAic3ViIjogIiIsCisgICAgICAgICAgICAic3ViZSI6ICIiLAorICAgICAgICAgICAgInN1bSI6ICIiLAorICAgICAgICAgICAgInN1bV8obj0xKV5vbyI6ICIiLAorICAgICAgICAgICAgInN1cCI6ICIiLAorICAgICAgICAgICAgInN1cGUiOiAiIiwKKyAgICAgICAgICAgICJ0YXUiOiAiIiwKKyAgICAgICAgICAgICJUaGV0YSI6ICIiLAorICAgICAgICAgICAgInRoZXRhIjogIiIsCisgICAgICAgICAgICAiVFQiOiAiIiwKKyAgICAgICAgICAgICJ0dGEiOiAiIiwKKyAgICAgICAgICAgICJ1YXJyIjogIiIsCisgICAgICAgICAgICAidWxhIjogIiIsCisgICAgICAgICAgICAidXBzaWxvbiI6ICIiLAorICAgICAgICAgICAgInV1IjogIiIsCisgICAgICAgICAgICAidXV1IjogIiIsCisgICAgICAgICAgICAidmVjYSI6ICIiLAorICAgICAgICAgICAgInZ2IjogIiIsCisgICAgICAgICAgICAidnZ2IjogIiIsCisgICAgICAgICAgICAieF4obStuKSI6ICIiLAorICAgICAgICAgICAgInhfKG1uKSI6ICIiLAorICAgICAgICAgICAgIlhpIjogIiIsCisgICAgICAgICAgICAieGkiOiAiIiwKKyAgICAgICAgICAgICJ4eCI6ICIiLAorICAgICAgICAgICAgInpldGEiOiAiIiwKKyAgICAgICAgICAgICJaWiI6ICIiLAorICAgICAgICAgICAgInwtJmd0OyI6ICIiLAorICAgICAgICAgICAgInwtLSI6ICIiLAorICAgICAgICAgICAgInw9PSI6ICIiLAorICAgICAgICAgICAgInxfXyI6ICIiLAorICAgICAgICAgICAgInx+IjogIiIsCisgICAgICAgICAgICAifj0iOiAiIiwKKyAgICAgICAgICAgICJ+fCI6ICIiLAorICAgICAgICAgICAgIn5+IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZhbmN5U2VsZWN0cyI6IHsKKyAgICAgICAgICAgICInK29wdC50ZXh0KyciOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiJztcclxuICB2YXIgdGFnYyA9ICciOiAiIiwKKyAgICAgICAgICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAiIiwKKyAgICAgICAgICAgICJEb25lIjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIHRleHQgeW91IHdhbnQgdG8gZmluZCI6ICIiLAorICAgICAgICAgICAgIkZpbmQgYW5kIFJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJmb3VuZCBpdGVtIjogIiIsCisgICAgICAgICAgICAiZm91bmQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJIaWdobGlnaHQiOiAiIiwKKyAgICAgICAgICAgICJJbmZvcm0gYSByZXBsYWNlbWVudCB3b3JkIjogIiIsCisgICAgICAgICAgICAiTmV4dCI6ICIiLAorICAgICAgICAgICAgIm5vdCBmb3VuZCI6ICIiLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIHdpdGg6IjogIiIsCisgICAgICAgICAgICAicmVwbGFjZWQgaXRlbSI6ICIiLAorICAgICAgICAgICAgInJlcGxhY2VkIGl0ZW1zIjogIiIsCisgICAgICAgICAgICAiU2VhcmNoIGZvcjoiOiAiIiwKKyAgICAgICAgICAgICJTdWJzdGl0dXRlIGFsbCBvY2N1cnJlbmNlcyI6ICIiLAorICAgICAgICAgICAgIlN1YnN0aXR1dGUgdGhpcyBvY2N1cnJlbmNlPyI6ICIiLAorICAgICAgICAgICAgIlVuZG8iOiAiIiwKKyAgICAgICAgICAgICJXaG9sZSB3b3JkcyBvbmx5IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1PcGVyYXRpb25zIjogeworICAgICAgICAgICAgIkVudGVyIHRoZSBuYW1lIGZvciBuZXcgb3B0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgY2hlY2sgYm94LiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIEZvcm0uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbXVsdGktbGluZSB0ZXh0IGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHJhZGlvIGJ1dHRvbi4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzZWxlY3QgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgc3VibWl0L3Jlc2V0IGJ1dHRvbi4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSB0ZXh0LCBwYXNzd29yZCBvciBoaWRkZW4gZmllbGQuIjogIiIsCisgICAgICAgICAgICAiTWVzc2FnZSBTZW50IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIFNlbGVjdC4uLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGb3JtcyI6IHsKKyAgICAgICAgICAgICInb25DbGljayc9IjogIiIsCisgICAgICAgICAgICAiQWNjZXNzIEtleToiOiAiIiwKKyAgICAgICAgICAgICJBY3Rpb24gVVJMOiI6ICIiLAorICAgICAgICAgICAgIkJ1dHRvbiBTY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJDaGVja2VkIjogIiIsCisgICAgICAgICAgICAiQ29sdW1uczoiOiAiIiwKKyAgICAgICAgICAgICJEZWZhdWx0IHRleHQgKG9wdGlvbmFsKSI6ICIiLAorICAgICAgICAgICAgIkRpbWVuc2lvbnMiOiAiIiwKKyAgICAgICAgICAgICJEaXNhYmxlZCI6ICIiLAorICAgICAgICAgICAgIkVuY29kaW5nOiI6ICIiLAorICAgICAgICAgICAgIkZvciBDb250cm9sOiI6ICIiLAorICAgICAgICAgICAgIkZvcm0iOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IEZJRUxEU0VUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBJTlBVVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IFNFTEVDVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogVEVYVEFSRUEiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIGhhbmRsZXIgc2NyaXB0IjogIiIsCisgICAgICAgICAgICAiRm9ybSBOYW1lOiI6ICIiLAorICAgICAgICAgICAgIkdldCI6ICIiLAorICAgICAgICAgICAgIkhhcmQiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQgaW4gbnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJIVE1MLUZvcm0gdG8gQ0dJIChkZWZhdWx0KSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIHNvdXJjZSI6ICIiLAorICAgICAgICAgICAgIkluaXRpYWwgVGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IEZJRUxEU0VUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IElOUFVUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IExBQkVMIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFNFTEVDVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkphdmFzY3JpcHQgZm9yIGJ1dHRvbiBjbGljayI6ICIiLAorICAgICAgICAgICAgIkxhYmVsOiI6ICIiLAorICAgICAgICAgICAgIkxlZ2VuZDoiOiAiIiwKKyAgICAgICAgICAgICJNYXggbGVuZ3RoOiI6ICIiLAorICAgICAgICAgICAgIk1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWNjZXB0ZWQiOiAiIiwKKyAgICAgICAgICAgICJNZXRob2Q6IjogIiIsCisgICAgICAgICAgICAibXVsdGlwYXJ0IEZvcm0gRGF0YSAoRmlsZS1VcGxvYWQpIjogIiIsCisgICAgICAgICAgICAiTmFtZSI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIm5hbWUgb2YgdGhlIHRleHRhcmVhIjogIiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiIiwKKyAgICAgICAgICAgICJub3JtYWwiOiAiIiwKKyAgICAgICAgICAgICJub3dyYXAiOiAiIiwKKyAgICAgICAgICAgICJPZmYiOiAiIiwKKyAgICAgICAgICAgICJQaHlzaWNhbCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciBhIExhYmVsIjogIiIsCisgICAgICAgICAgICAiUG9zdCI6ICIiLAorICAgICAgICAgICAgInByZSI6ICIiLAorICAgICAgICAgICAgIlJlYWQgT25seSI6ICIiLAorICAgICAgICAgICAgIlNpemUgb2YgdGV4dCBib3ggaW4gY2hhcmFjdGVycyI6ICIiLAorICAgICAgICAgICAgIlNpemU6IjogIiIsCisgICAgICAgICAgICAiU29mdCI6ICIiLAorICAgICAgICAgICAgIlRhYiBJbmRleDoiOiAiIiwKKyAgICAgICAgICAgICJUYXJnZXQgRnJhbWU6IjogIiIsCisgICAgICAgICAgICAiVGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJVUkwgb2YgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICAgICAgICAgIlZhbHVlOiI6ICIiLAorICAgICAgICAgICAgIlZpcnR1YWwiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aCBpbiBudW1iZXIgb2YgY2hhcmFjdGVycyI6ICIiLAorICAgICAgICAgICAgIldyYXAgTW9kZToiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJPcHRpb25zIjogIjw8RmluZFJlcGxhY2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bGxQYWdlIjogeworICAgICAgICAgICAgIi4uLiI6ICIiLAorICAgICAgICAgICAgIkFsdGVybmF0ZSBzdHlsZS1zaGVldDoiOiAiIiwKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kIGNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkNoYXJhY3RlciBzZXQ6IjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKElTTy04ODU5LTUpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKEtPSTgtUikiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoV0lORE9XUy0xMjUxKSI6ICIiLAorICAgICAgICAgICAgIkRPQ1RZUEU6IjogIiIsCisgICAgICAgICAgICAiRG9jdW1lbnQgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIkRvY3VtZW50IHRpdGxlOiI6ICIiLAorICAgICAgICAgICAgIktleXdvcmRzOiI6ICIiLAorICAgICAgICAgICAgIlByaW1hcnkgc3R5bGUtc2hlZXQ6IjogIiIsCisgICAgICAgICAgICAiVGV4dCBjb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJVVEYtOCAocmVjb21tZW5kZWQpIjogIiIsCisgICAgICAgICAgICAid2VzdGVybiAoSVNPLTg4NTktMSkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiR2Vja28iOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAgICAgIiYjeDAwZDc7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L2VkaXQgaG9yaXpvbnRhbCBydWxlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgSG9yaXpvbnRhbCBSdWxlIjogIiIsCisgICAgICAgICAgICAiTm8gc2hhZGluZyI6ICIiLAorICAgICAgICAgICAgIlN0eWxlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgICAgICJDU1MgU3R5bGUiOiAiIiwKKyAgICAgICAgICAgICItIjogIjw8RXF1YXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgICAgICJBbmNob3IgbmFtZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBBbmNob3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGZvb3Rub3RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IE5vdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGFnZWJyZWFrIjogeworICAgICAgICAgICAgIlBhZ2UgYnJlYWsiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIEJyZWFrIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNtaWxleSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgU21pbGV5IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICAgICAiXFxuICBUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZ1xcbiI6ICIiLAorICAgICAgICAgICAgIkhpZGUgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMSI6ICIiLAorICAgICAgICAgICAgIkxpbmsyIjogIiIsCisgICAgICAgICAgICAiTGluazMiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNCI6ICIiLAorICAgICAgICAgICAgIkxpbms1IjogIiIsCisgICAgICAgICAgICAiU2hvdyBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmciOiAiIiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgICAgICJBbGwgQ2F0ZWdvcmllcyI6ICIiLAorICAgICAgICAgICAgIkZpbHRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyBIVE1MIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIHRlbXBsYXRlIHZhcmlhYmxlIjogIiIsCisgICAgICAgICAgICAiT25seSBzZWFyY2ggd29yZCBiZWdpbm5pbmciOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIjw8Q2hhckNvdW50ZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICI8PEluc2VydFNuaXBwZXQ+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAgICAgIkNhcHRpb24gZm9yIHRoZSB0YWJsZSI6ICIiLAorICAgICAgICAgICAgIkNvbGxhcHNlIGJvcmRlcnM6IjogIiIsCisgICAgICAgICAgICAiTGF5b3UiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSBvZiB0aGUgYm9yZGVyIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxhbmdNYXJrcyI6IHsKKyAgICAgICAgICAgICInLCAnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxpbmtlciI6IHsKKyAgICAgICAgICAgICIocHgpIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yLUxpbmsiOiAiIiwKKyAgICAgICAgICAgICJBbmNob3I6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgQWRkcmVzczoiOiAiIiwKKyAgICAgICAgICAgICJFbWFpbCBMaW5rIjogIiIsCisgICAgICAgICAgICAiTG9jYXRpb24gQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lbnUgQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lc3NhZ2UgVGVtcGxhdGU6IjogIiIsCisgICAgICAgICAgICAiTmV3IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIk9yZGluYXJ5IExpbmsiOiAiIiwKKyAgICAgICAgICAgICJQb3B1cCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJQb3B1cFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUmVzaXplYWJsZToiOiAiIiwKKyAgICAgICAgICAgICJTYW1lIFdpbmRvdyAoanVtcCBvdXQgb2YgZnJhbWVzKSI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbGJhcnM6IjogIiIsCisgICAgICAgICAgICAiU2hvd3MgT24gSG92ZXIiOiAiIiwKKyAgICAgICAgICAgICJTdGF0dXMgQmFyOiI6ICIiLAorICAgICAgICAgICAgIlN1YmplY3Q6IjogIiIsCisgICAgICAgICAgICAiVGl0bGU6IjogIiIsCisgICAgICAgICAgICAiVG9vbGJhcjoiOiAiIiwKKyAgICAgICAgICAgICJVUkwgTGluayI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICIiLAorICAgICAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTmFtZToiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTaXplOiI6ICI8PEZvcm1zPj4iCisgICAgICAgIH0sCisgICAgICAgICJNb290b29sc0ZpbGVNYW5hZ2VyIjogeworICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk9wZXJhIjogeworICAgICAgICAgICAgIk1BUksiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAgICAgIkluc2VydCB0ZXh0IGluIG5ldyBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJQYXN0ZSBhcyBQbGFpbiBUZXh0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlByZXNlcnZlU2NyaXB0cyI6IHsKKyAgICAgICAgICAgICJKYXZhU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiUEhQIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlF1aWNrVGFnIjogeworICAgICAgICAgICAgIicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbCc6ICciOiAiIiwKKyAgICAgICAgICAgICJBVFRSSUJVVEVTIjogIiIsCisgICAgICAgICAgICAiQ29sb3JzIjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIFRBRyB5b3Ugd2FudCB0byBpbnNlcnQiOiAiIiwKKyAgICAgICAgICAgICJObyBDU1MgY2xhc3MgYXZhaWFibGUiOiAiIiwKKyAgICAgICAgICAgICJPayI6ICIiLAorICAgICAgICAgICAgIk9QVElPTlMiOiAiIiwKKyAgICAgICAgICAgICJRdWljayBUYWcgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiVEFHcyI6ICIiLAorICAgICAgICAgICAgIlRoZXJlIGFyZSBzb21lIHVuY2xvc2VkIHF1b3RlIjogIiIsCisgICAgICAgICAgICAiVGhpcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIFRBRyI6ICIiLAorICAgICAgICAgICAgIllvdSBoYXZlIHRvIHNlbGVjdCBzb21lIHRleHQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU2F2ZVN1Ym1pdCI6IHsKKyAgICAgICAgICAgICJpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIlJlYWR5IjogIiIsCisgICAgICAgICAgICAiU2F2aW5nLi4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNldElkIjogeworICAgICAgICAgICAgIklEL05hbWU6IjogIiIsCisgICAgICAgICAgICAiU2V0IElkIGFuZCBOYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElkL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSUQvTmFtZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiQ2xvc2luZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIkNsb3NpbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIkNvbnZlcnQgYWxsIHF1b3RlcyBhbmQgZGFzaGVzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIGF1dG9tYXRpYyByZXBsYWNlbWVudHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN0eWxpc3QiOiB7CisgICAgICAgICAgICAiU3R5bGVzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBTZWxlY3Rpb24gT25seSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIHVwIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBTY29wZSI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYWwgdGlkeSB1cCBhbmQgY29ycmVjdGlvbiBvZiBzb21lIHByb2JsZW1zLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzZWxlY3QgZnJvbSB0aGUgZm9sbG93aW5nIGNsZWFuaW5nIG9wdGlvbnMuLi4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc3RhbmQgYnkgd2hpbGUgY2xlYW5pbmcgaW4gcHJvY2Vzcy4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGlnbm1lbnQgKGxlZnQvcmlnaHQvanVzdGlmeSkuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBjbGFzc2VzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBBbGwgSFRNTCBUYWdzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBzdHlsZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0eXBlZmFjZXMgKGZvbnQgXCJzdHlsZXNcIikuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGVtcGhhc2lzIGFuZCBhbm5vdGF0aW9ucy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgbGFuZyBhdHRyaWJ1dGVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBQYXJhZ3JhcGhzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cy4iOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzIHdpdGggbm9uLWRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzLiI6ICIiLAorICAgICAgICAgICAgIlZpZ29yb3VzbHkgcHVyZ2UgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiQ2VsbCBUeXBlOiI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIGRvd24iOiAiIiwKKyAgICAgICAgICAgICJDZWxscyB0byB0aGUgcmlnaHQsIGFuZCI6ICIiLAorICAgICAgICAgICAgIkRvIE5vdCBDaGFuZ2UiOiAiIiwKKyAgICAgICAgICAgICJGcmFtZSBhbmQgYm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkhlYWRlciAodGgpIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY3VycmVudCBjZWxsIHdpdGg6IjogIiIsCisgICAgICAgICAgICAiTm9ybWFsICh0ZCkiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiPDxDb250ZXh0TWVudT4+IgorICAgICAgICB9LAorICAgICAgICAiV2ViS2l0IjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICI8PEdlY2tvPj4iCisgICAgICAgIH0sCisgICAgICAgICJYaW5oYSI6IHsKKyAgICAgICAgICAgICIxICg4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjIgKDEwIHB0KSI6ICIiLAorICAgICAgICAgICAgIjMgKDEyIHB0KSI6ICIiLAorICAgICAgICAgICAgIjQgKDE0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjUgKDE4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjYgKDI0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjcgKDM2IHB0KSI6ICIiLAorICAgICAgICAgICAgIkFyaWFsIjogIiIsCisgICAgICAgICAgICAiQ291cmllciBOZXciOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTAgKHplcm8pIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0xIC4uIENUUkwtNiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtRSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtVSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtViI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWiI6ICIiLAorICAgICAgICAgICAgIkVkaXRvciBIZWxwIjogIiIsCisgICAgICAgICAgICAiRU5URVIiOiAiIiwKKyAgICAgICAgICAgICJFcnJvciBMb2FkaW5nIFhpbmhhLiAgRGV2ZWxvcGVycywgY2hlY2sgdGhlIEVycm9yIENvbnNvbGUgZm9yIGluZm9ybWF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkdlb3JnaWEiOiAiIiwKKyAgICAgICAgICAgICJJbXBhY3QiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIENvcmUiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbnMiOiAiIiwKKyAgICAgICAgICAgICJNUyBXb3JkIENsZWFuZXIiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJTSElGVC1FTlRFUiI6ICIiLAorICAgICAgICAgICAgIlRhaG9tYSI6ICIiLAorICAgICAgICAgICAgIlRpbWVzIE5ldyBSb21hbiI6ICIiLAorICAgICAgICAgICAgIlRvdWNoIGhlcmUgZmlyc3QgdG8gYWN0aXZhdGUgZWRpdG9yLiI6ICIiLAorICAgICAgICAgICAgIlZlcmRhbmEiOiAiIiwKKyAgICAgICAgICAgICJXYWl0aW5nIGZvciBJZnJhbWUgdG8gbG9hZC4uLiI6ICIiLAorICAgICAgICAgICAgIldpbmdEaW5ncyI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJSZW1vdmUgQ3VycmVudCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IEJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJTZXQgcGFnZSBiYWNrZ3JvdW5kIGltYWdlIjogIiIsCisgICAgICAgICAgICAiU2V0IFBhZ2UgQmFja2dyb3VuZCBJbWFnZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDbGllbnRzaWRlU3BlbGxjaGVjayI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIENMSUVOVFNJREVTUEVMTENIRUNLIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrIHVzaW5nIGllU3BlbGwiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTAlIjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICIiLAorICAgICAgICAgICAgIjIwMCUiOiAiIiwKKyAgICAgICAgICAgICIyNSUiOiAiIiwKKyAgICAgICAgICAgICI1MCUiOiAiIiwKKyAgICAgICAgICAgICI3NSUiOiAiIiwKKyAgICAgICAgICAgICI+TGlzdCBWaWV3IjogIiIsCisgICAgICAgICAgICAiPlRodW1ibmFpbCBWaWV3IjogIiIsCisgICAgICAgICAgICAiQToiOiAiIiwKKyAgICAgICAgICAgICJBbHQiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJEOiI6ICIiLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZpbGUgTWFuYWdlciI6ICIiLAorICAgICAgICAgICAgIkZpbGVzaXplOiI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciI6ICIiLAorICAgICAgICAgICAgIkdJRiI6ICIiLAorICAgICAgICAgICAgIkg6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBmb2xkZXIgc2l6ZSBsaW1pdCByZWFjaGVkLiBVcGxvYWQgZGlzYWJsZWQuIjogIiIsCisgICAgICAgICAgICAiTm8gRmlsZXMgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgdmFsdWUiOiAiIiwKKyAgICAgICAgICAgICJQTkciOiAiIiwKKyAgICAgICAgICAgICJQcmVzZXQiOiAiIiwKKyAgICAgICAgICAgICJSZW5hbWUiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENDVyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgbWFya2VyIGNvbG9yIjogIiIsCisgICAgICAgICAgICAiWDoiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJZOiI6ICIiLAorICAgICAgICAgICAgIlpvb20iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIjw8TW9vdG9vbHNGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbHRlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEZJTFRFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWx0ZXIiOiAiPDxJbnNlcnRTbmlwcGV0Mj4+IgorICAgICAgICB9LAorICAgICAgICAiSHRtbFRpZHkiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBdXRvLVRpZHkiOiAiIiwKKyAgICAgICAgICAgICJEb24ndCBUaWR5IjogIiIsCisgICAgICAgICAgICAiSFRNTCBUaWR5IjogIiIsCisgICAgICAgICAgICAiVGlkeSBmYWlsZWQuICBDaGVjayB5b3VyIEhUTUwgZm9yIHN5bnRheCBlcnJvcnMuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkltYWdlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElNQUdFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGbGlja3IgUGljdHVyZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmVzIjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBVc2VybmFtZS9FbWFpbCI6ICIiLAorICAgICAgICAgICAgIkltYWdlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkIjogIiIsCisgICAgICAgICAgICAiTm8gUGhvdG9zIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gVmlkZW9zIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiVGhpcyBTZXJ2ZXIiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVXNlcm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFZpZGVvIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFZpZGVvcyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiR0lGIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJIOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlBORyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUTUFSUVVFRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUiOiAiIiwKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kLUNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkJlaGF2aW9yOiI6ICIiLAorICAgICAgICAgICAgIkNvbnRpbnVvdXMiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3Rpb246IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHNjcm9sbGluZyBtYXJxdWVlIjogIiIsCisgICAgICAgICAgICAiTWFycXVlZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgQW1vdW50OiI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbCBEZWxheToiOiAiIiwKKyAgICAgICAgICAgICJTbGlkZSI6ICIiLAorICAgICAgICAgICAgIlNwZWVkIENvbnRyb2wiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJUZXh0OiI6ICI8PEZvcm1zPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiIiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm90IGRlZmluZWQiOiAiIiwKKyAgICAgICAgICAgICIgT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlVwbG9hZCBmaWxlIjogIiIsCisgICAgICAgICAgICAiU2l6ZSI6ICI8PEZvcm1zPj4iCisgICAgICAgIH0sCisgICAgICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIxMjAlIjogIiIsCisgICAgICAgICAgICAiMTUwJSI6ICIiLAorICAgICAgICAgICAgIjgwJSI6ICIiLAorICAgICAgICAgICAgIkFkZCBHVUlETyBDb2RlIGluIGEgdGV4dGJveCBvbiB0aGUgcGFnZSI6ICIiLAorICAgICAgICAgICAgIkFkZCBNSURJIGxpbmsgdG8gYWxsb3cgc3R1ZGVudHMgdG8gaGVhciB0aGUgbXVzaWMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJHdWlkbyBjb2RlIjogIiIsCisgICAgICAgICAgICAiR1VJRE8gQ29kZSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIGluIGFwcGxldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBHVUlETyBNdXNpYyBOb3RhdGlvbiI6ICIiLAorICAgICAgICAgICAgIk1JREkgRmlsZSI6ICIiLAorICAgICAgICAgICAgIlNvdXJjZSBDb2RlIjogIiIsCisgICAgICAgICAgICAiV2l0aCBNb3ppbGxhLCB0aGUgYXBwbGV0IHdpbGwgbm90IGJlIHZpc2libGUgaW4gZWRpdG9yLCBidXQgb25seSBpbiBXZWIgcGFnZSBhZnRlciBzdWJtaXR0aW5nLiI6ICIiLAorICAgICAgICAgICAgIlpvb20gOiI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJab29tIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBHZWFycyBpbiBvcmRlciB0byB1c2UgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZSBhbmQgY29uZmlndXJhdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGluZyBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiSW5zdGFsbCI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIEFib3V0IExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgcmVsb2FkIHRoZSBwYWdlLCBjYXVzaW5nIHlvdSB0byBsb3NlIGFueSB1bnNhdmVkIHdvcmsuICBQcmVzcyBcIk9LXCIgdG8gcmVsb2FkLiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIHVzZXMgR29vZ2xlIEdlYXJzIHRvIGVuYWJsZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlLiAgV2l0aCBHZWFycyBpbnN0YWxsZWQsIHlvdSBjYW4gc2F2ZSBkcmFmdHMgb2YgeW91ciBkb2N1bWVudHMgb24geW91ciBoYXJkIGRyaXZlLCBjb25maWd1cmUgWGluaGEgdG8gbG9vayB0aGUgd2F5IHlvdSB3YW50LCBhbmQgY2FycnkgdGhpcyBpbmZvcm1hdGlvbiB3aGVyZXZlciB5b3UgdXNlIFhpbmhhIG9uIHRoZSB3ZWIuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsZTogIjogIiIsCisgICAgICAgICAgICAiSW1wb3J0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGV0YWlscyI6ICIiLAorICAgICAgICAgICAgIkZpbGUgQnJvd3NlciI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICAgIFRoZXJlIEMgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gIFRoZXJlIEEgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gXCIgVGhlcmUgQiBcIiI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICcgVGhlcmUgRCAnIjogIiIsCisgICAgICAgICAgICAiTGlzdCBvZiBQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJOZXcgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJPcGVuIjogIiIsCisgICAgICAgICAgICAiT3BlbiBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHlvdSdkIGxpa2UgdG8gY3JlYXRlLiI6ICIiLAorICAgICAgICAgICAgIlNhdmUgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgZXJhc2UgYW55IHVuc2F2ZWQgY29udGVudC4gIElmIHlvdSdyZSBjZXJ0YWluLCBwbGVhc2UgY2xpY2sgT0sgdG8gY29udGludWUuIjogIiIsCisgICAgICAgICAgICAiV2ViIFVSTCI6ICIiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiPDxQU0xvY2FsPj4iLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQiOiAiPDxJbnNlcnROb3RlPj4iLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiU3BlbGxDaGVja2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogU1BFTExDSEVDS0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkRpY3Rpb25hcnkiOiAiIiwKKyAgICAgICAgICAgICJGaW5pc2hlZCBsaXN0IG9mIG1pc3BlbGxlZCB3b3JkcyI6ICIiLAorICAgICAgICAgICAgIkhUTUxBcmVhIFNwZWxsIENoZWNrZXIiOiAiIiwKKyAgICAgICAgICAgICJJIHdpbGwgb3BlbiBpdCBpbiBhIG5ldyBwYWdlLiI6ICIiLAorICAgICAgICAgICAgIklnbm9yZSI6ICIiLAorICAgICAgICAgICAgIklnbm9yZSBhbGwiOiAiIiwKKyAgICAgICAgICAgICJJbmZvIjogIiIsCisgICAgICAgICAgICAiTGVhcm4iOiAiIiwKKyAgICAgICAgICAgICJObyBtaXNwZWxsZWQgd29yZHMgZm91bmQgd2l0aCB0aGUgc2VsZWN0ZWQgZGljdGlvbmFyeS4iOiAiIiwKKyAgICAgICAgICAgICJPcmlnaW5hbCB3b3JkIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byBvcGVuIHRoaXMgbGluayI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSB3YWl0LiAgQ2FsbGluZyBzcGVsbCBjaGVja2VyLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSB3YWl0OiBjaGFuZ2luZyBkaWN0aW9uYXJ5IHRvIjogIiIsCisgICAgICAgICAgICAicGxpeiB3ZWl0IDstKSI6ICIiLAorICAgICAgICAgICAgIlJlLWNoZWNrIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UgYWxsIjogIiIsCisgICAgICAgICAgICAiUmV2ZXJ0IjogIiIsCisgICAgICAgICAgICAiU3BlbGwgQ2hlY2tlciI6ICIiLAorICAgICAgICAgICAgIlNwZWxsLWNoZWNrIjogIiIsCisgICAgICAgICAgICAiU3VnZ2VzdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgZHJvcCBjaGFuZ2VzIGFuZCBxdWl0IHNwZWxsIGNoZWNrZXIuICBQbGVhc2UgY29uZmlybS4iOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIHdpdGgiOiAiPDxGaW5kUmVwbGFjZT4+IgorICAgICAgICB9LAorICAgICAgICAiVGVtcGxhdGUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBURU1QTEFURSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJJbnNlcnQgdGVtcGxhdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiVW5Gb3JtYXQiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBVTkZPUk1BVCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbGwiOiAiIiwKKyAgICAgICAgICAgICJBbGwgSFRNTDoiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBBcmVhIjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgb3B0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdHRpbmc6IjogIiIsCisgICAgICAgICAgICAiUGFnZSBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IHdoaWNoIHR5cGVzIG9mIGZvcm1hdHRpbmcgeW91IHdvdWxkIGxpa2UgdG8gcmVtb3ZlLiI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdGlvbiI6ICIiCisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvZXUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9ldS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjI5NWZmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvZXUuanMKQEAgLTAsMCArMSwxNTcxIEBACisvLyBYaW5oYSBMYW5ndWFnZSBDb21iaW5lZCBUcmFuc2xhdGlvbiBGaWxlCisvLworLy8gTEFORzogImV1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU5TVFJVQ1RJT05TIFRPIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBZb3VyIHRyYW5zbGF0aW9uIG11c3QgYmUgaW4gVVRGLTggQ2hhcmFjdGVyIEVuY29kaW5nLgorLy8KKy8vIFRoaXMgaXMgYSBKU09OIGVuY29kZWQgZmlsZSAocGx1cyBjb21tZW50cyksIHN0cmluZ3Mgc2hvdWxkIGJlIGRvdWJsZS1xdW90ZQorLy8gb25seSwgZG8gbm90IHVzZSBzaW5nbGUgcXVvdGVzIHRvIHN1cnJvdW5kIHN0cmluZ3MgLSAiaGVsbG8iLCBub3QgJ2hlbGxvJworLy8gZG8gbm90IGhhdmUgYSB0cmFpbGluZyBjb21tYSBhZnRlciB0aGUgbGFzdCBlbnRyeSBpbiBhIHNlY3Rpb24uCisvLworLy8gT25seSBmdWxsIGxpbmUgY29tbWVudHMgYXJlIGFsbG93ZWQgKHRoYXQgYSBjb21tZW50cyBvY2N1cHkgZW50aXJlIGxpbmVzKS4KKy8vCisvLyBTZWFyY2ggZm9yIHRoZSBfX05FV19UUkFOU0xBVElPTlNfXyBzZWN0aW9uIGJlbG93LCB0aGlzIGlzIHdoZXJlIHlvdSB3aWxsCisvLyB3YW50IHRvIGZvY3VzLCB0aGlzIHNlY3Rpb24gaW5jbHVkZXMgdGhpbmdzIHRoYXQgZG8gbm90IHByZXNlbnRseSBoYXZlIGEgCisvLyB0cmFuc2xhdGlvbiBvciBmb3Igd2hpY2ggdGhlIHRyYW5zbGF0aW9uIG5lZWRzIHRvIGJlIGNoZWNrZWQgZm9yIGFjY3VyYWN5LgorLy8KKy8vIEluIHRoZSBOZXcgVHJhbnNsYXRpb25zIHNlY3Rpb24gYSB0cmFuc2xhdGlvbiBzdHJpbmcgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcKKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIiIKKy8vICAgICBUaGlzIG1lYW5zIGl0IGlzIG5vdCB0cmFuc2xhdGVkIHlldCwgYWRkIHlvdXIgdHJhbnNsYXRpb24uLi4KKy8vICAgICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiS2xpbmdvbiBTdHJpbmcgSGVyZSIKKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIlRyYW5zbGF0ZWQgU3RyaW5nIEhlcmUiCisvLyAgICAgVGhpcyBtZWFucyB0aGF0IGFuIGV4aXN0aW5nIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZywgaW4gc29tZSBvdGhlcgorLy8gICAgIHNlY3Rpb24gaGFzIGJlZW4gZm91bmQsIGFuZCB1c2VkLiAgQ2hlY2sgdGhhdCBpdCBpcyBhcHByb3ByaXRlIGZvciB0aGlzCisvLyAgICAgc2VjdGlvbiBhbmQgaWYgaXQgaXMsIHRoYXQncyBmaW5lIGxlYXZlIGl0IGFzIGlzLCBvdGhlcndpc2UgY2hhbmdlIGFzCisvLyAgICAgYXBwcm9wcmlhdGUuCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICI8PEFub3RoZXJTZWN0aW9uPj4iCisvLyAgICAgVGhpcyBtZWFucyB1c2UgdGhlIHNhbWUgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nIGFzIDw8QW5vdGhlclNlY3Rpb24+PgorLy8gICAgIHRoaXMgc2F2ZXMgeW91IHJlLXRyYW5sYXRpbmcgc3RyaW5ncy4gIElmIHRoZSBDb250ZXh0IG9mIHRoaXMgc2VjdGlvbgorLy8gICAgIGFuZCB0aGUgY29udGV4dCBvZiBBbm90aGVyU2VjdGlvbiBzZWVtIHRoZSBzYW1lLCB0aGF0J3MgZmluZSBsZWF2ZSBpdAorLy8gICAgIHVzaW5nIHRoYXQgdHJhbnNsYXRpb24sIGJ1dCBpZiB0aGlzIHNlY3Rpb24gbmVlZHMgYSBkaWZmZXJlbnQgdHJhbnNsYXRpb24sIAorLy8gICAgIHlvdSBjYW4gcHJvdmlkZSBpdCBieSByZXBsYWNpbmcgdGhlIGxpbmsgKDw8QW5vdGhlclNlY3Rpb24+Pikgd2l0aCB0aGF0CisvLyAgICAgbmV3IHRyYW5zbGF0aW9uLiAgRm9yIGV4YW1wbGUgLSBhICJUYWJsZSIgaW4gc2F5ICJEYXRhUGx1Z2luIiBpcyAKKy8vICAgICBwZXJoYXBzIHRyYW5zbGF0ZWQgZGlmZmVyZW50bHkgdG8gIlRhYmxlIiBpbiAiRnVybml0dXJlUGx1Z2luIi4KKy8vCisvLyBURVNUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IHBsYWNlIHlvdXIgdHJhbnNsYXRpb24gZmlsZSBvbiB5b3VyIHdlYnNlcnZlciBzb21ld2hlcmUgZm9yIGV4YW1wbGUKKy8vCisvLyAgIC94aW5oYS9sYW5nL21lcmdlZC9ldS5qcworLy8KKy8vIGFuZCB0aGVuIHRlbGwgWGluaGEgd2hlcmUgdG8gZ2V0IGl0IChiZWZvcmUgbG9hZGluZyBYaW5oYUNvcmUuanMpIGJ5IAorLy8KKy8vICBfZWRpdG9yX2xhbmcgICAgICAgICAgICAgID0gJ2V1JzsKKy8vICBfZWRpdG9yX2xhbmdfbWVyZ2VkX2ZpbGUgID0gJy94aW5oYS9sYW5nL21lcmdlZC9ldS5qcyc7CisvLworLy8gWGluaGEgd2lsbCBsb2FkIHlvdXIgbmV3IGxhbmd1YWdlIGRlZmluaXRpb24uCisvLworLy8gU1VCTUlUVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBjcmVhdGUgYSBUaWNrZXQgb24gdGhlIFhpbmhhIHdlYnNpdGUgYW5kIGF0dGFjaCB5b3VyIHRyYW5zbGF0aW9uIAorLy8gZmlsZS4KKy8vCisvLyBUaGUgWGluaGEgZGV2ZWxvcGVycyB3aWxsIHRha2UgeW91ciBmaWxlIGFuZCB1c2UgdGhlIAorLy8gICAgIGNvbnRyaWIvbGNfc3BsaXRfbWVyZ2VkX2ZpbGUucGhwCisvLyBzY3JpcHQgdG8gbG9hZCBpdCBpbnRvIHRoZSBYaW5oYSBkaXN0cmlidXRpb24uCisKK3sKKyAgICAiQWJicmV2aWF0aW9uIjogeworICAgICAgICAiQ2FuY2VsIjogIlV0emkiLAorICAgICAgICAiT0siOiAiQWRvcyIKKyAgICB9LAorICAgICJBYm91dEJveCI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIkVkaXRvcmVhcmkgYnVydXouLi4iLAorICAgICAgICAiQ2xvc2UiOiAiSXR4aSIKKyAgICB9LAorICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAiVXR6aSIKKyAgICB9LAorICAgICJDb2xvclBpY2tlciI6IHsKKyAgICAgICAgIkNsaWNrIGEgY29sb3IuLi4iOiAiS29sb3JlIGJhdCBhdWtlcmF0dS4uLiIsCisgICAgICAgICJDbG9zZSI6ICJJdHhpIiwKKyAgICAgICAgIkNvbG9yOiAiOiAiS29sb3JlYTogIiwKKyAgICAgICAgIk9LIjogIkFkb3MiLAorICAgICAgICAiU2FtcGxlIjogIkxhZ2luYSIsCisgICAgICAgICJXZWIgU2FmZTogIjogIldlYiBTYWZlOiAiCisgICAgfSwKKyAgICAiQ29udGV4dE1lbnUiOiB7CisgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICJaZW50cmF0dSIsCisgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAiSnVzdGlmaWthdHUiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIkV6a2VycmV0YXJhIGxlcnJva2F0dSIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIkVza3VpbmV0YXJhIGxlcnJva2F0dSIKKyAgICB9LAorICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAiQ2FuY2VsIjogIlV0emkiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIkxvdHVyYSB0eGVydGF0dS9hbGRhdHUiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJMZWhpbyBiZXJyaWFuIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiQmF0IGVyZSBleiAoaW1wbGl6aXR1a2kgZXJhYmlsaSkiLAorICAgICAgICAiT0siOiAiQWRvcyIsCisgICAgICAgICJPdGhlciI6ICJCZXN0ZSBiYXQiLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIkZyYW1lIGJlcmVhbiAoX3NlbGYpIiwKKyAgICAgICAgIlRhcmdldDoiOiAiSGVsYnVydWE6IiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAiSXplbmJ1cnVhIChhcmdpYmlkZWEpOiIsCisgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIkdvaWtvIGZyYW1lLWFuIChfdG9wKSIsCisgICAgICAgICJVUkw6IjogIlVSTC1hOiIKKyAgICB9LAorICAgICJFZGl0VGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIlV0emkiLAorICAgICAgICAiT0siOiAiQWRvcyIKKyAgICB9LAorICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJVdHppIiwKKyAgICAgICAgIk9LIjogIkFkb3MiLAorICAgICAgICAiUHJldmlldyI6ICJBdXJyZWJpc3RhIgorICAgIH0sCisgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICJBYnNib3R0b20iOiAiSXJ1ZGlhcmVuIGJlaGVrYWxkZWFuIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJJcnVkaWFyZW4gZXJkaWFuIiwKKyAgICAgICAgIkJhc2VsaW5lIjogIklydWRpYXJlbiBvaW5lYW4iLAorICAgICAgICAiQm90dG9tIjogIkJlaGVhbiIsCisgICAgICAgICJDYW5jZWwiOiAiVXR6aSIsCisgICAgICAgICJMZWZ0IjogIkV6a2VycmV0YXJhIiwKKyAgICAgICAgIk1pZGRsZSI6ICJFcmRpYW4iLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJMZWhpbyBiZXJyaWFuIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiQmF0IGVyZSBleiAoaW1wbGl6aXR1a2kgZXJhYmlsaSkiLAorICAgICAgICAiTm90IHNldCI6ICJFeiBnYWl0dWEiLAorICAgICAgICAiT0siOiAiQWRvcyIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIklydWRpYXJlbiBrb2thcGVuYSIsCisgICAgICAgICJQcmV2aWV3IjogIkF1cnJlYmlzdGEiLAorICAgICAgICAiUmlnaHQiOiAiRXNrdWluZXRhcmEiLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIkZyYW1lIGJlcmVhbiAoX3NlbGYpIiwKKyAgICAgICAgIlRleHR0b3AiOiAiSXJ1ZGlhcmVuIGdvaWFsZGVhbiIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCkiOiAiSXplbmJ1cnVhIChhcmdpYmlkZWEpOiIsCisgICAgICAgICJUb3AiOiAiR29pYW4iLAorICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJHb2lrbyBmcmFtZS1hbiAoX3RvcCkiLAorICAgICAgICAiV2lkdGgiOiAiWmFiYWxlcmE6IiwKKyAgICAgICAgIldpZHRoOiI6ICJaYWJhbGVyYToiCisgICAgfSwKKyAgICAiRm9ybXMiOiB7CisgICAgICAgICJDYW5jZWwiOiAiVXR6aSIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIklydWRpYXJlbiBVUkwtYToiLAorICAgICAgICAiT0siOiAiQWRvcyIsCisgICAgICAgICJSb3dzOiI6ICJMZXJyb2FrOiIKKyAgICB9LAorICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJVdHppIiwKKyAgICAgICAgIk9LIjogIkFkb3MiCisgICAgfSwKKyAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICJBbGlnbm1lbnQ6IjogIkxlcnJva2F0emVhOiIsCisgICAgICAgICJDYW5jZWwiOiAiVXR6aSIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiTWFycmEgaG9yaXpvbnRhbGEiLAorICAgICAgICAiTGF5b3V0IjogIkRpc2VpbnVhIiwKKyAgICAgICAgIkxlZnQiOiAiRXprZXJyZXRhcmEiLAorICAgICAgICAiT0siOiAiQWRvcyIsCisgICAgICAgICJSaWdodCI6ICJFc2t1aW5ldGFyYSIsCisgICAgICAgICJXaWR0aDoiOiAiWmFiYWxlcmE6IgorICAgIH0sCisgICAgIkltYWdlTWFuYWdlciI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJJcnVkaWFyZW4gYmVoZWthbGRlYW4iLAorICAgICAgICAiQWJzbWlkZGxlIjogIklydWRpYXJlbiBlcmRpYW4iLAorICAgICAgICAiQmFzZWxpbmUiOiAiSXJ1ZGlhcmVuIG9pbmVhbiIsCisgICAgICAgICJCb3R0b20iOiAiQmVoZWFuIiwKKyAgICAgICAgIkNhbmNlbCI6ICJVdHppIiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICJJcnVkaWEgdHhlcnRhdHUiLAorICAgICAgICAiTGVmdCI6ICJFemtlcnJldGFyYSIsCisgICAgICAgICJNaWRkbGUiOiAiRXJkaWFuIiwKKyAgICAgICAgIk5vdCBzZXQiOiAiRXogZ2FpdHVhIiwKKyAgICAgICAgIk9LIjogIkFkb3MiLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJJcnVkaWFyZW4ga29rYXBlbmEiLAorICAgICAgICAiUmlnaHQiOiAiRXNrdWluZXRhcmEiLAorICAgICAgICAiVGV4dHRvcCI6ICJJcnVkaWFyZW4gZ29pYWxkZWFuIiwKKyAgICAgICAgIlRvcCI6ICJHb2lhbiIsCisgICAgICAgICJXaWR0aDoiOiAiWmFiYWxlcmE6IgorICAgIH0sCisgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgIkJhc2VsaW5lIjogIklydWRpYXJlbiBvaW5lYW4iLAorICAgICAgICAiQm90dG9tIjogIkJlaGVhbiIsCisgICAgICAgICJJbWFnZSBVUkwiOiAiSXJ1ZGlhcmVuIFVSTC1hOiIsCisgICAgICAgICJMYXlvdXQiOiAiRGlzZWludWEiLAorICAgICAgICAiTGVmdCI6ICJFemtlcnJldGFyYSIsCisgICAgICAgICJNaWRkbGUiOiAiRXJkaWFuIiwKKyAgICAgICAgIlJpZ2h0IjogIkVza3VpbmV0YXJhIiwKKyAgICAgICAgIlRvcCI6ICJHb2lhbiIsCisgICAgICAgICJXaWR0aCI6ICJaYWJhbGVyYToiCisgICAgfSwKKyAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAiQ2FuY2VsIjogIlV0emkiLAorICAgICAgICAiT0siOiAiQWRvcyIKKyAgICB9LAorICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJJcnVkaWFyZW4gYmVoZWthbGRlYW4iLAorICAgICAgICAiQWJzbWlkZGxlIjogIklydWRpYXJlbiBlcmRpYW4iLAorICAgICAgICAiQWxpZ25tZW50OiI6ICJMZXJyb2thdHplYToiLAorICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIlRlc3R1IGFsdGVybmF0aWJvYToiLAorICAgICAgICAiQmFzZWxpbmUiOiAiSXJ1ZGlhcmVuIG9pbmVhbiIsCisgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJFcnR6YXJlbiBsb2RpZXJhOiIsCisgICAgICAgICJCb3R0b20iOiAiQmVoZWFuIiwKKyAgICAgICAgIkNhbmNlbCI6ICJVdHppIiwKKyAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICJJZGF0eiBlemF6dSBpcnVkaWFyZW4gVVJMLWEgaGVtZW4iLAorICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiSXJ1ZGlyaWsgb25hcnR6ZW4gZXogZHV0ZW4gbmFiaWdhdHphaWxlZW50emF0IiwKKyAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICJCZXRlZ2FycmkgaG9yaXpvbnRhbGEiLAorICAgICAgICAiSG9yaXpvbnRhbDoiOiAiSG9yaXpvbnRhbGE6IiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIklydWRpYXJlbiBhdXJyZWJpc3RhOiIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIklydWRpYXJlbiBVUkwtYToiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIklydWRpYSB0eGVydGF0dSIsCisgICAgICAgICJMYXlvdXQiOiAiRGlzZWludWEiLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJVenRhenUgaHV0c2lrIGVydHppayBleiBzb3J0emVrbyIsCisgICAgICAgICJMZWZ0IjogIkV6a2VycmV0YXJhIiwKKyAgICAgICAgIk1pZGRsZSI6ICJFcmRpYW4iLAorICAgICAgICAiTm90IHNldCI6ICJFeiBnYWl0dWEiLAorICAgICAgICAiT0siOiAiQWRvcyIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIklydWRpYXJlbiBrb2thcGVuYSIsCisgICAgICAgICJQcmV2aWV3IjogIkF1cnJlYmlzdGEiLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIkF1cnJlaWt1c2kgaXJ1ZGlhIGJlc3RlIGxlaGlvIGJhdGVhbiIsCisgICAgICAgICJSaWdodCI6ICJFc2t1aW5ldGFyYSIsCisgICAgICAgICJTcGFjaW5nIjogIlRhcnRlYSIsCisgICAgICAgICJUZXh0dG9wIjogIklydWRpYXJlbiBnb2lhbGRlYW4iLAorICAgICAgICAiVG9wIjogIkdvaWFuIiwKKyAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiQmV0ZWdhcnJpIGJlcnRpa2FsYSIsCisgICAgICAgICJWZXJ0aWNhbDoiOiAiQmVydGlrYWxhOiIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIlVSTC1hIGlkYXR6aSBiZWhhciBkdXp1IgorICAgIH0sCisgICAgIkluc2VydE1hcnF1ZWUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiVXR6aSIsCisgICAgICAgICJMZWZ0IjogIkV6a2VycmV0YXJhIiwKKyAgICAgICAgIk9LIjogIkFkb3MiLAorICAgICAgICAiUmlnaHQiOiAiRXNrdWluZXRhcmEiLAorICAgICAgICAiV2lkdGg6IjogIlphYmFsZXJhOiIKKyAgICB9LAorICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAiQ2FuY2VsIjogIlV0emkiCisgICAgfSwKKyAgICAiSW5zZXJ0UGljdHVyZSI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJJcnVkaWFyZW4gYmVoZWthbGRlYW4iLAorICAgICAgICAiQWJzbWlkZGxlIjogIklydWRpYXJlbiBlcmRpYW4iLAorICAgICAgICAiQWxpZ25tZW50OiI6ICJMZXJyb2thdHplYToiLAorICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIlRlc3R1IGFsdGVybmF0aWJvYToiLAorICAgICAgICAiQmFzZWxpbmUiOiAiSXJ1ZGlhcmVuIG9pbmVhbiIsCisgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJFcnR6YXJlbiBsb2RpZXJhOiIsCisgICAgICAgICJCb3R0b20iOiAiQmVoZWFuIiwKKyAgICAgICAgIkNhbmNlbCI6ICJVdHppIiwKKyAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICJJZGF0eiBlemF6dSBpcnVkaWFyZW4gVVJMLWEgaGVtZW4iLAorICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiSXJ1ZGlyaWsgb25hcnR6ZW4gZXogZHV0ZW4gbmFiaWdhdHphaWxlZW50emF0IiwKKyAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICJCZXRlZ2FycmkgaG9yaXpvbnRhbGEiLAorICAgICAgICAiSG9yaXpvbnRhbDoiOiAiSG9yaXpvbnRhbGE6IiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIklydWRpYXJlbiBhdXJyZWJpc3RhOiIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIklydWRpYXJlbiBVUkwtYToiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIklydWRpYSB0eGVydGF0dSIsCisgICAgICAgICJMYXlvdXQiOiAiRGlzZWludWEiLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJVenRhenUgaHV0c2lrIGVydHppayBleiBzb3J0emVrbyIsCisgICAgICAgICJMZWZ0IjogIkV6a2VycmV0YXJhIiwKKyAgICAgICAgIk1pZGRsZSI6ICJFcmRpYW4iLAorICAgICAgICAiTm90IHNldCI6ICJFeiBnYWl0dWEiLAorICAgICAgICAiT0siOiAiQWRvcyIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIklydWRpYXJlbiBrb2thcGVuYSIsCisgICAgICAgICJQcmV2aWV3IjogIkF1cnJlYmlzdGEiLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIkF1cnJlaWt1c2kgaXJ1ZGlhIGJlc3RlIGxlaGlvIGJhdGVhbiIsCisgICAgICAgICJSaWdodCI6ICJFc2t1aW5ldGFyYSIsCisgICAgICAgICJTcGFjaW5nIjogIlRhcnRlYSIsCisgICAgICAgICJUZXh0dG9wIjogIklydWRpYXJlbiBnb2lhbGRlYW4iLAorICAgICAgICAiVG9wIjogIkdvaWFuIiwKKyAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiQmV0ZWdhcnJpIGJlcnRpa2FsYSIsCisgICAgICAgICJWZXJ0aWNhbDoiOiAiQmVydGlrYWxhOiIsCisgICAgICAgICJXaWR0aDoiOiAiWmFiYWxlcmE6IgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiVXR6aSIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJVdHppIgorICAgIH0sCisgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAiQWJzYm90dG9tIjogIklydWRpYXJlbiBiZWhla2FsZGVhbiIsCisgICAgICAgICJBYnNtaWRkbGUiOiAiSXJ1ZGlhcmVuIGVyZGlhbiIsCisgICAgICAgICJBbGlnbm1lbnQ6IjogIkxlcnJva2F0emVhOiIsCisgICAgICAgICJCYXNlbGluZSI6ICJJcnVkaWFyZW4gb2luZWFuIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIkVydHphcmVuIGxvZGllcmE6IiwKKyAgICAgICAgIkJvdHRvbSI6ICJCZWhlYW4iLAorICAgICAgICAiQ2FuY2VsIjogIlV0emkiLAorICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICJHZWxheGthcmVuIGJldGVnYXJyaWE6IiwKKyAgICAgICAgIkNlbGwgc3BhY2luZzoiOiAiR2VsYXhrYS10YXJ0ZWE6IiwKKyAgICAgICAgIkNvbHM6IjogIlp1dGFiZWFrOiIsCisgICAgICAgICJFbSI6ICJFbSIsCisgICAgICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIlphYmFsZXJhIGZpbmtvZHVuIHp1dGFiZWFrIiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICJUYXVsYSB0eGVydGF0dSIsCisgICAgICAgICJMYXlvdXQiOiAiRGlzZWludWEiLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJVenRhenUgaHV0c2lrIGVydHppayBleiBzb3J0emVrbyIsCisgICAgICAgICJMZWZ0IjogIkV6a2VycmV0YXJhIiwKKyAgICAgICAgIk1pZGRsZSI6ICJFcmRpYW4iLAorICAgICAgICAiTm90IHNldCI6ICJFeiBnYWl0dWEiLAorICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiWnV0YWJlLWtvcHVydWEiLAorICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAiTGVycm8ta29wdXJ1YSIsCisgICAgICAgICJPSyI6ICJBZG9zIiwKKyAgICAgICAgIlBlcmNlbnQiOiAiUG9ydHplbnRhaWEiLAorICAgICAgICAiUGl4ZWxzIjogIlBpeGVsYWsiLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICJUYXVsYSBob25lbiBrb2thcGVuYSIsCisgICAgICAgICJSaWdodCI6ICJFc2t1aW5ldGFyYSIsCisgICAgICAgICJSb3dzOiI6ICJMZXJyb2FrOiIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIkdlbGF4a2EgYXV6b2tpZGVlbiBhcnRla28gdGFydGVhIiwKKyAgICAgICAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAiR2VsYXhrYXJlbiBlZHVraWEgZXRhIGVydHphcmVuIGFydGVrbyB0YXJ0ZWEiLAorICAgICAgICAiU3BhY2luZyI6ICJUYXJ0ZWEiLAorICAgICAgICAiVGV4dHRvcCI6ICJJcnVkaWFyZW4gZ29pYWxkZWFuIiwKKyAgICAgICAgIlRvcCI6ICJHb2lhbiIsCisgICAgICAgICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiVGF1bGFyZW4gemFiYWxlcmEiLAorICAgICAgICAiV2lkdGggdW5pdCI6ICJaYWJhbGVyYS11bml0YXRlYSIsCisgICAgICAgICJXaWR0aDoiOiAiWmFiYWxlcmE6IiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiWnV0YWJlLWtvcHVydWEgaWRhdHppIGJlaGFyIGR1enUiLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICJMZXJyby1rb3B1cnVhIGlkYXR6aSBiZWhhciBkdXp1IgorICAgIH0sCisgICAgIkxpbmtlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJVdHppIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJMb3R1cmEgdHhlcnRhdHUvYWxkYXR1IiwKKyAgICAgICAgIk9LIjogIkFkb3MiLAorICAgICAgICAiVGFyZ2V0OiI6ICJIZWxidXJ1YToiLAorICAgICAgICAiVVJMOiI6ICJVUkwtYToiCisgICAgfSwKKyAgICAiTm90ZVNlcnZlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJVdHppIiwKKyAgICAgICAgIkltYWdlIFByZXZpZXciOiAiSXJ1ZGlhcmVuIGF1cnJlYmlzdGE6IiwKKyAgICAgICAgIk9LIjogIkFkb3MiLAorICAgICAgICAiUHJldmlldyI6ICJBdXJyZWJpc3RhIiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJBdXJyZWlrdXNpIGlydWRpYSBiZXN0ZSBsZWhpbyBiYXRlYW4iCisgICAgfSwKKyAgICAiT3BlcmEiOiB7CisgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIkl0c2F0c2kgYm90b2lhIGV6IGRhYmlsIE1vemlsbGFuIG9pbmFycml0dXRha28gbmFiaWdhdHphaWxlZXRhbiAoYXJyYXpvaSB0ZWtuaWtvZW5nYXRpaykuIFNhY2F0dSBDVFJMLVYgenVyZSB0ZWtsYXR1YW4sIHp1emVuZWFuIGl0c2FzdGVrby4iCisgICAgfSwKKyAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJVdHppIgorICAgIH0sCisgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJVdHppIiwKKyAgICAgICAgIk9LIjogIkFkb3MiCisgICAgfSwKKyAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAiVXR6aSIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiSXJ1ZGlhIHR4ZXJ0YXR1IgorICAgIH0sCisgICAgIlF1aWNrVGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIlV0emkiCisgICAgfSwKKyAgICAiU2V0SWQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiVXR6aSIsCisgICAgICAgICJPSyI6ICJBZG9zIgorICAgIH0sCisgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgIk9LIjogIkFkb3MiCisgICAgfSwKKyAgICAiU3BlbGxDaGVja2VyIjogeworICAgICAgICAiQ2FuY2VsIjogIlV0emkiLAorICAgICAgICAiT0siOiAiQWRvcyIKKyAgICB9LAorICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAiQ2FuY2VsIjogIlV0emkiLAorICAgICAgICAiT0siOiAiQWRvcyIKKyAgICB9LAorICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICJDYW5jZWwiOiAiVXR6aSIsCisgICAgICAgICJPSyI6ICJBZG9zIiwKKyAgICAgICAgIlJvd3MiOiAiTGVycm9hazoiLAorICAgICAgICAiU3BhY2luZyI6ICJUYXJ0ZWEiCisgICAgfSwKKyAgICAiVGVtcGxhdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiVXR6aSIKKyAgICB9LAorICAgICJVbkZvcm1hdCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJVdHppIiwKKyAgICAgICAgIk9LIjogIkFkb3MiCisgICAgfSwKKyAgICAiWGluaGEiOiB7CisgICAgICAgICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiYjODIxMjsgRm9ybWF0dWEgJiM4MjEyOyIsCisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJFZGl0b3JlYXJpIGJ1cnV6Li4uIiwKKyAgICAgICAgIkFkZHJlc3MiOiAiSGVsYmlkZWEiLAorICAgICAgICAiQmFja2dyb3VuZCBDb2xvciI6ICJBdHpla28ga29sb3JlYSIsCisgICAgICAgICJCb2xkIjogIkxvZGlhIiwKKyAgICAgICAgIkJ1bGxldGVkIExpc3QiOiAiWmVycmVuZGEgZXogb3JkZW5hdHVhIiwKKyAgICAgICAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICJXb3JkLWV0aWsgaXRzYXRzaXRha28gZWR1a2lhIGV6YWJhdHUiLAorICAgICAgICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiRXphYmF0dSB0ZXN0dWFyZW4gZXphdWdhcnJpYWsiLAorICAgICAgICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICJNU09mZmljZSBldGlrZXRhayBlemFiYXR1IiwKKyAgICAgICAgIkNsb3NlIjogIkl0eGkiLAorICAgICAgICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICJPYmpla3R1YSBlcmFpa2l0emVuIiwKKyAgICAgICAgIkNvcHkgc2VsZWN0aW9uIjogIktvcGlhdHUgaGF1dGFrZXRhIiwKKyAgICAgICAgIkNyZWF0ZSBTdGF0dXNiYXIiOiAiRWdvZXJhLWJhcnJhIHNvcnR1IiwKKyAgICAgICAgIkNyZWF0ZSBUb29sYmFyIjogIlRyZXNuYS1iYXJyYSBzb3J0dSIsCisgICAgICAgICJDdXJyZW50IHN0eWxlIjogIlVuZWtvIGVzdGlsb2EiLAorICAgICAgICAiQ3V0IHNlbGVjdGlvbiI6ICJFYmFraSBoYXV0YWtldGEiLAorICAgICAgICAiRGVjcmVhc2UgSW5kZW50IjogIktvc2thIGhhbmRpdHUiLAorICAgICAgICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiRXprZXJyZXRpayBlc2t1aW5ldGFyYWtvIG5vcmFiaWRlYSIsCisgICAgICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJFc2t1aW5ldGlrIGV6a2VycmV0YXJha28gbm9yYWJpZGVhIiwKKyAgICAgICAgIkZpbmlzaGluZyI6ICJCdWthdHplbiIsCisgICAgICAgICJGb250IENvbG9yIjogIlRlc3R1LWtvbG9yZWEiLAorICAgICAgICAiRm9ybWF0dGVkIjogIkZvcm1hdGVhdHVhIiwKKyAgICAgICAgIkdlbmVyYXRlIFhpbmhhIGZyYW1ld29yayI6ICJYaW5oYSBGcmFtZXdvcmsgc29ydHplbiIsCisgICAgICAgICJIZWFkaW5nIDEiOiAiR29pYnVydWEgMSIsCisgICAgICAgICJIZWFkaW5nIDIiOiAiR29pYnVydWEgMiIsCisgICAgICAgICJIZWFkaW5nIDMiOiAiR29pYnVydWEgMyIsCisgICAgICAgICJIZWFkaW5nIDQiOiAiR29pYnVydWEgNCIsCisgICAgICAgICJIZWFkaW5nIDUiOiAiR29pYnVydWEgNSIsCisgICAgICAgICJIZWFkaW5nIDYiOiAiR29pYnVydWEgNiIsCisgICAgICAgICJIZWFkaW5ncyI6ICJHb2lidXJ1YWsiLAorICAgICAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiTGFndW50emEiLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIk1hcnJhIGhvcml6b250YWxhIiwKKyAgICAgICAgIkluY3JlYXNlIEluZGVudCI6ICJLb3NrYSB0eGlraXR1IiwKKyAgICAgICAgIkluaXQgZWRpdG9yIHNpemUiOiAiRWRpdG9yZWFyZW4gaGFzaWVyYWtvIG5ldXJyaWEiLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIlRhdWxhIHR4ZXJ0YXR1IiwKKyAgICAgICAgIkluc2VydCBXZWIgTGluayI6ICJMb3R1cmEgdHhlcnRhdHUiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJcnVkaWEgdHhlcnRhdHUiLAorICAgICAgICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICJUeGVydGF0dS9HYWluaWRhdHppIiwKKyAgICAgICAgIkl0YWxpYyI6ICJFdHphbmEiLAorICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiWmVudHJhdHUiLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIkp1c3RpZmlrYXR1IiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICJFemtlcnJldGFyYSBsZXJyb2thdHUiLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICJFc2t1aW5ldGFyYSBsZXJyb2thdHUiLAorICAgICAgICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogIkxhc3Rlci10ZWtsYWsiLAorICAgICAgICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIjogIkthcmdhdHplbi4gSXR4YXJvbiBtZXNlZGV6IiwKKyAgICAgICAgIkxvYWRpbmcgcGx1Z2luICRwbHVnaW4iOiAiJHBsdWdpbiBwbHVnaW5hIGthcmdhdHplbiIsCisgICAgICAgICJOb3JtYWwiOiAiTm9ybWFsYSIsCisgICAgICAgICJPcmRlcmVkIExpc3QiOiAiWmVycmVuZGEgb3JkZW5hdHVhIiwKKyAgICAgICAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIkl0c2F0c2kgYXJiZWxlYW4gZGFnb2VuYSIsCisgICAgICAgICJQYXRoIjogIkJpZGVhIiwKKyAgICAgICAgIlByaW50IGRvY3VtZW50IjogIkRva3VtZW50dWEgaW5wcmltYXR1IiwKKyAgICAgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkJlcnJlZ2luIiwKKyAgICAgICAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIjogIiRwbHVnaW4gcGx1Z2luYSBlcnJlZ2lzdHJhdHUiLAorICAgICAgICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAiRm9ybWF0b2Ega2VuZHUiLAorICAgICAgICAiU2F2ZSBhcyI6ICJHb3JkZSBob25lbGE6IiwKKyAgICAgICAgIlNlbGVjdCBhbGwiOiAiRGVuYSBhdWtlcmF0dSIsCisgICAgICAgICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICJGb3JtYXR1YSBlemFycmkgcGFyYWdyYWZvYXJpIiwKKyAgICAgICAgIlNwbGl0IEJsb2NrIjogIkJsb2tlYSB6YXRpdHUiLAorICAgICAgICAiU3RyaWtldGhyb3VnaCI6ICJNYXJyYXR1YSIsCisgICAgICAgICJTdWJzY3JpcHQiOiAiQXpwaW5kaXplYSIsCisgICAgICAgICJTdXBlcnNjcmlwdCI6ICJHb2ktaW5kaXplYSIsCisgICAgICAgICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAiRWRpdG9yZWFrIG9uZG9yZW5nbyB0ZWtsYS1rb25iaW5hemlvYWsgZXNrYWludHplbiBkaXR1OiIsCisgICAgICAgICJUb2dnbGUgQm9yZGVycyI6ICJFcnR6YWsgdHJ1a2F0dSIsCisgICAgICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiSWt1c2kgZG9rdW1lbnR1YSBIVE1MLW4iLAorICAgICAgICAiVW5kZXJsaW5lIjogIkF6cGltYXJyYXR1YSIsCisgICAgICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJEZXNlZ2luIiwKKyAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiTGV0cmEtdGlwb2VuIGtvbG9yZWFrIGV6YWJhdHUgbmFoaSBhbCBkaXR1enU/IiwKKyAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIkxldHJhLXRpcG9lbiBuZXVycmlhayBlemFiYXR1IG5haGkgYWwgZGl0dXp1PyIsCisgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiTGV0cmEtdGlwb2FrIGV6YWJhdHUgbmFoaSBhbCBkaXR1enU/IiwKKyAgICAgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJURVNUVSBlcmFuIGFyaSB6YXJhLiBFcmFiaWwgZXphenUgWzw+XSBib3RvaWEgV1lTSVdJRyBlcmFyYSBpdHp1bHR6ZWtvLiIsCisgICAgICAgICJpbnNlcnQgbGluZWJyZWFrIjogIkxlcnJvLWphdXppYSB0eGVydGF0dSIsCisgICAgICAgICJuZXcgcGFyYWdyYXBoIjogIlBhcmFncmFmbyBiZXJyaWEiCisgICAgfSwKKyAgICAiX19ORVdfVFJBTlNMQVRJT05TX18iOiB7CisgICAgICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICAgICAiQWJicmV2aWF0aW9uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIiIsCisgICAgICAgICAgICAiRXhwYW5zaW9uOiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDaGFyQ291bnRlciI6IHsKKyAgICAgICAgICAgICIuLi4gaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAgICAgICAgICJDaGFycyI6ICIiLAorICAgICAgICAgICAgIkhUTUwiOiAiIiwKKyAgICAgICAgICAgICJXb3JkcyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDaGFyYWN0ZXJNYXAiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IHNwZWNpYWwgY2hhcmFjdGVyIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAgICAgIl9EZWxldGUgUm93IjogIiIsCisgICAgICAgICAgICAiX0ltYWdlIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJfTW9kaWZ5IExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJfUmVtb3ZlIExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJfVGFibGUgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIkNfZWxsIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJDaGVjX2sgTGluay4uLiI6ICIiLAorICAgICAgICAgICAgIkNvcHkiOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgYSBsaW5rIjogIiIsCisgICAgICAgICAgICAiQ3VycmVudCBVUkwgaXMiOiAiIiwKKyAgICAgICAgICAgICJDdXQiOiAiIiwKKyAgICAgICAgICAgICJEZV9sZXRlIENvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBDZWxsIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCByb3ciOiAiIiwKKyAgICAgICAgICAgICJIb3cgZGlkIHlvdSBnZXQgaGVyZT8gKFBsZWFzZSByZXBvcnQhKSI6ICIiLAorICAgICAgICAgICAgIklfbnNlcnQgUm93IEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluX3NlcnQgUm93IEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IF9Db2x1bW4gQmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBhZnRlciB0aGUgY3VycmVudCBub2RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGJlZm9yZSB0aGUgY3VycmVudCBub2RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENfb2x1bW4gQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDZWxsIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkxpbmsgcG9pbnRzIHRvOiI6ICIiLAorICAgICAgICAgICAgIk1ha2UgbGluX2suLi4iOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICIiLAorICAgICAgICAgICAgIk9wZW5zIHRoaXMgbGluayBpbiBhIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJQYXN0ZSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgZWxlbWVudDoiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHVubGluayB0aGlzIGVsZW1lbnQuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHRoZSAkZWxlbSBFbGVtZW50Li4uIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHRoaXMgbm9kZSBmcm9tIHRoZSBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlJvX3cgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIGltYWdlIHByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgVGFibGUgQ2VsbCBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgVGFibGUgUm93IFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiVW5saW5rIHRoZSBjdXJyZW50IGVsZW1lbnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ3JlYXRlTGluayI6IHsKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiIiwKKyAgICAgICAgICAgICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGluZyBhIGxpbmsiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRGVmaW5pdGlvbkxpc3QiOiB7CisgICAgICAgICAgICAiZGVmaW5pdGlvbiBkZXNjcmlwdGlvbiI6ICIiLAorICAgICAgICAgICAgImRlZmluaXRpb24gbGlzdCI6ICIiLAorICAgICAgICAgICAgImRlZmluaXRpb24gdGVybSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEaWFsb2dzIjogeworICAgICAgICAgICAgIlNvbWUgVGV4dCBIZXJlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkR5bmFtaWNDU1MiOiB7CisgICAgICAgICAgICAiQ2hvb3NlIHN0eWxlc2hlZXQiOiAiIiwKKyAgICAgICAgICAgICJEZWZhdWx0IjogIiIsCisgICAgICAgICAgICAiVW5kZWZpbmVkIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVkaXRUYWciOiB7CisgICAgICAgICAgICAiRWRpdCBIVE1MIGZvciBzZWxlY3RlZCB0ZXh0IjogIiIsCisgICAgICAgICAgICAiRWRpdCBUYWcgQnkgUGVnIjogIiIsCisgICAgICAgICAgICAiVGFnIEVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgICAgICIhPSI6ICIiLAorICAgICAgICAgICAgIiFpbiI6ICIiLAorICAgICAgICAgICAgIiZndDstIjogIiIsCisgICAgICAgICAgICAiJmd0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZsdDt4Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgIWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAuYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDBgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAzYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDRgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA2YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDdgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA5YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYGVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyZuYnNwO2AxYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgK3s6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC06XFwgYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Atezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgQ2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgY29zYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BsbmAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgcGlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BzaW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRhbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGltZXNgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJnF1b3Q7dGV4dCZxdW90OyI6ICIiLAorICAgICAgICAgICAgIicrZm9ybXVsYSsnIjogIiIsCisgICAgICAgICAgICAiKChuKSwoaykpIjogIiIsCisgICAgICAgICAgICAiKHgrMSkvKHgtMSkiOiAiIiwKKyAgICAgICAgICAgICIqIjogIiIsCisgICAgICAgICAgICAiKioiOiAiIiwKKyAgICAgICAgICAgICIrLSI6ICIiLAorICAgICAgICAgICAgIi0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiLSZsdDsiOiAiIiwKKyAgICAgICAgICAgICItOiI6ICIiLAorICAgICAgICAgICAgIi09IjogIiIsCisgICAgICAgICAgICAiLy8iOiAiIiwKKyAgICAgICAgICAgICIvXyI6ICIiLAorICAgICAgICAgICAgIjouIjogIiIsCisgICAgICAgICAgICAiPSZndDsiOiAiIiwKKyAgICAgICAgICAgICJAIjogIiIsCisgICAgICAgICAgICAiW1thLGJdLFtjLGRdXSI6ICIiLAorICAgICAgICAgICAgIlxcXFwiOiAiIiwKKyAgICAgICAgICAgICJcXG5DbGljayBpbiB0aGUgYm94IHRvIHVzZSB5b3VyIGtleWJvYXJkIG9yIHVzZSB0aGUgYnV0dG9uc1xcbiI6ICIiLAorICAgICAgICAgICAgIl5eIjogIiIsCisgICAgICAgICAgICAiXl5eIjogIiIsCisgICAgICAgICAgICAiX198IjogIiIsCisgICAgICAgICAgICAiX3xfIjogIiIsCisgICAgICAgICAgICAiYCE9YCI6ICIiLAorICAgICAgICAgICAgImAhaW5gIjogIiIsCisgICAgICAgICAgICAiYCZhbmQ7YCI6ICIiLAorICAgICAgICAgICAgImAmY2FwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmN1cDtgIjogIiIsCisgICAgICAgICAgICAiYCZndDstYCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0O3gmZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmb3I7YCI6ICIiLAorICAgICAgICAgICAgImAmcXVvdDt0ZXh0JnF1b3Q7YCI6ICIiLAorICAgICAgICAgICAgImAoKG4pLChrKSlgIjogIiIsCisgICAgICAgICAgICAiYCh4KzEpLyh4LTEpYCI6ICIiLAorICAgICAgICAgICAgImAqKmAiOiAiIiwKKyAgICAgICAgICAgICJgKmAiOiAiIiwKKyAgICAgICAgICAgICJgKy1gIjogIiIsCisgICAgICAgICAgICAiYC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAtJmx0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLTpgIjogIiIsCisgICAgICAgICAgICAiYC09YCI6ICIiLAorICAgICAgICAgICAgImAvL2AiOiAiIiwKKyAgICAgICAgICAgICJgL19gIjogIiIsCisgICAgICAgICAgICAiYDouYCI6ICIiLAorICAgICAgICAgICAgImA9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgQGAiOiAiIiwKKyAgICAgICAgICAgICJgW1thLGJdLFtjLGRdXWAiOiAiIiwKKyAgICAgICAgICAgICJgXFxcXGAiOiAiIiwKKyAgICAgICAgICAgICJgX198YCI6ICIiLAorICAgICAgICAgICAgImBffF9gIjogIiIsCisgICAgICAgICAgICAiYEFBYCI6ICIiLAorICAgICAgICAgICAgImBhbGVwaGAiOiAiIiwKKyAgICAgICAgICAgICJgYWxwaGFgIjogIiIsCisgICAgICAgICAgICAiYGFuZGAiOiAiIiwKKyAgICAgICAgICAgICJgYmFyYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiZXRhYCI6ICIiLAorICAgICAgICAgICAgImBDQ2AiOiAiIiwKKyAgICAgICAgICAgICJgY2NhYCI6ICIiLAorICAgICAgICAgICAgImBjaGlgIjogIiIsCisgICAgICAgICAgICAiYGRhcnJgIjogIiIsCisgICAgICAgICAgICAiYGRkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkZWxgIjogIiIsCisgICAgICAgICAgICAiYERlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGlhbW9uZGAiOiAiIiwKKyAgICAgICAgICAgICJgZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZHkvZHhgIjogIiIsCisgICAgICAgICAgICAiYEVFYCI6ICIiLAorICAgICAgICAgICAgImBlcHNpYCI6ICIiLAorICAgICAgICAgICAgImBldGFgIjogIiIsCisgICAgICAgICAgICAiYGZyYWAiOiAiIiwKKyAgICAgICAgICAgICJgR2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBncmFkYCI6ICIiLAorICAgICAgICAgICAgImBoYXJyYCI6ICIiLAorICAgICAgICAgICAgImBoQXJyYCI6ICIiLAorICAgICAgICAgICAgImBoYXRhYCI6ICIiLAorICAgICAgICAgICAgImBpZmAiOiAiIiwKKyAgICAgICAgICAgICJgaW5gIjogIiIsCisgICAgICAgICAgICAiYGludGAiOiAiIiwKKyAgICAgICAgICAgICJgaW90YWAiOiAiIiwKKyAgICAgICAgICAgICJga2FwcGFgIjogIiIsCisgICAgICAgICAgICAiYGxhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgTGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBsQXJyYCI6ICIiLAorICAgICAgICAgICAgImBsYXJyYCI6ICIiLAorICAgICAgICAgICAgImBsaW1fKHgtJmd0O29vKWAiOiAiIiwKKyAgICAgICAgICAgICJgbG9nYCI6ICIiLAorICAgICAgICAgICAgImBtdWAiOiAiIiwKKyAgICAgICAgICAgICJgTk5gIjogIiIsCisgICAgICAgICAgICAiYG5uYCI6ICIiLAorICAgICAgICAgICAgImBub3RgIjogIiIsCisgICAgICAgICAgICAiYG51YCI6ICIiLAorICAgICAgICAgICAgImBvK2AiOiAiIiwKKyAgICAgICAgICAgICJgby5gIjogIiIsCisgICAgICAgICAgICAiYE8vYCI6ICIiLAorICAgICAgICAgICAgImBvaW50YCI6ICIiLAorICAgICAgICAgICAgImBvbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgT21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYG9vYCI6ICIiLAorICAgICAgICAgICAgImBvcmAiOiAiIiwKKyAgICAgICAgICAgICJgb3hgIjogIiIsCisgICAgICAgICAgICAiYFBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgcGhpYCI6ICIiLAorICAgICAgICAgICAgImBQaWAiOiAiIiwKKyAgICAgICAgICAgICJgcGlgIjogIiIsCisgICAgICAgICAgICAiYHByb2RgIjogIiIsCisgICAgICAgICAgICAiYHByb3BgIjogIiIsCisgICAgICAgICAgICAiYFBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgcHNpYCI6ICIiLAorICAgICAgICAgICAgImBRUWAiOiAiIiwKKyAgICAgICAgICAgICJgcXVhZGAiOiAiIiwKKyAgICAgICAgICAgICJgckFycmAiOiAiIiwKKyAgICAgICAgICAgICJgcmhvYCI6ICIiLAorICAgICAgICAgICAgImByb290KG4pKHgpYCI6ICIiLAorICAgICAgICAgICAgImBSUmAiOiAiIiwKKyAgICAgICAgICAgICJgc2ZhYCI6ICIiLAorICAgICAgICAgICAgImBzaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgU2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYHNxcnQoeClgIjogIiIsCisgICAgICAgICAgICAiYHNxdWFyZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3RhY2tyZWwoLSZndDspKCspYCI6ICIiLAorICAgICAgICAgICAgImBzdWJgIjogIiIsCisgICAgICAgICAgICAiYHN1YmVgIjogIiIsCisgICAgICAgICAgICAiYHN1bWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwYCI6ICIiLAorICAgICAgICAgICAgImBzdXBlYCI6ICIiLAorICAgICAgICAgICAgImB0YXVgIjogIiIsCisgICAgICAgICAgICAiYFRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImB0aGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgVFRgIjogIiIsCisgICAgICAgICAgICAiYHR0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdWFycmAiOiAiIiwKKyAgICAgICAgICAgICJgdWxhYCI6ICIiLAorICAgICAgICAgICAgImB1cHNpbG9uYCI6ICIiLAorICAgICAgICAgICAgImB1dWAiOiAiIiwKKyAgICAgICAgICAgICJgdmVjYWAiOiAiIiwKKyAgICAgICAgICAgICJgdnZgIjogIiIsCisgICAgICAgICAgICAiYHhfKG1uKWAiOiAiIiwKKyAgICAgICAgICAgICJgWGlgIjogIiIsCisgICAgICAgICAgICAiYHhpYCI6ICIiLAorICAgICAgICAgICAgImB4eGAiOiAiIiwKKyAgICAgICAgICAgICJgemV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgWlpgIjogIiIsCisgICAgICAgICAgICAiYHwtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgfC0tYCI6ICIiLAorICAgICAgICAgICAgImB8PT1gIjogIiIsCisgICAgICAgICAgICAiYHxfX2AiOiAiIiwKKyAgICAgICAgICAgICJgfH5gIjogIiIsCisgICAgICAgICAgICAiYH49YCI6ICIiLAorICAgICAgICAgICAgImB+fGAiOiAiIiwKKyAgICAgICAgICAgICJgfn5gIjogIiIsCisgICAgICAgICAgICAiQUEiOiAiIiwKKyAgICAgICAgICAgICJhbGVwaCI6ICIiLAorICAgICAgICAgICAgImFscGhhIjogIiIsCisgICAgICAgICAgICAiYW5kIjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoIEZvcm11bGEgSW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGhNTCBFeGFtcGxlIjogIiIsCisgICAgICAgICAgICAiYmFyYSI6ICIiLAorICAgICAgICAgICAgIkJhc2VkIG9uIEFTQ0lJTWF0aE1MIGJ5IjogIiIsCisgICAgICAgICAgICAiYmJhIjogIiIsCisgICAgICAgICAgICAiYmJiYSI6ICIiLAorICAgICAgICAgICAgImJldGEiOiAiIiwKKyAgICAgICAgICAgICJDQyI6ICIiLAorICAgICAgICAgICAgImNjYSI6ICIiLAorICAgICAgICAgICAgImNoaSI6ICIiLAorICAgICAgICAgICAgImRhcnIiOiAiIiwKKyAgICAgICAgICAgICJkZG90YSI6ICIiLAorICAgICAgICAgICAgImRlbCI6ICIiLAorICAgICAgICAgICAgIkRlbHRhIjogIiIsCisgICAgICAgICAgICAiZGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJkaWFtb25kIjogIiIsCisgICAgICAgICAgICAiZG90YSI6ICIiLAorICAgICAgICAgICAgImR5L2R4IjogIiIsCisgICAgICAgICAgICAiRUUiOiAiIiwKKyAgICAgICAgICAgICJlcHNpIjogIiIsCisgICAgICAgICAgICAiZXRhIjogIiIsCisgICAgICAgICAgICAiRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQXNjaWlNYXRoTUwgdmlzaXQgdGhpcyBwYWdlOiI6ICIiLAorICAgICAgICAgICAgIkZvcm11bGEgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiZnJhIjogIiIsCisgICAgICAgICAgICAiZ2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJHYW1tYSI6ICIiLAorICAgICAgICAgICAgImdyYWQiOiAiIiwKKyAgICAgICAgICAgICJoQXJyIjogIiIsCisgICAgICAgICAgICAiaGFyciI6ICIiLAorICAgICAgICAgICAgImhhdGEiOiAiIiwKKyAgICAgICAgICAgICJpZiI6ICIiLAorICAgICAgICAgICAgImluIjogIiIsCisgICAgICAgICAgICAiSW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJpbnQiOiAiIiwKKyAgICAgICAgICAgICJpbnRfYV5iZih4KWR4IjogIiIsCisgICAgICAgICAgICAiaW90YSI6ICIiLAorICAgICAgICAgICAgImthcHBhIjogIiIsCisgICAgICAgICAgICAiTGFtYmRhIjogIiIsCisgICAgICAgICAgICAibGFtYmRhIjogIiIsCisgICAgICAgICAgICAibGFyciI6ICIiLAorICAgICAgICAgICAgImxBcnIiOiAiIiwKKyAgICAgICAgICAgICJsaW1fKHgtJmd0O29vKSI6ICIiLAorICAgICAgICAgICAgIm11IjogIiIsCisgICAgICAgICAgICAiTk4iOiAiIiwKKyAgICAgICAgICAgICJubiI6ICIiLAorICAgICAgICAgICAgIm5ubiI6ICIiLAorICAgICAgICAgICAgIm5vdCI6ICIiLAorICAgICAgICAgICAgIm51IjogIiIsCisgICAgICAgICAgICAibysiOiAiIiwKKyAgICAgICAgICAgICJvLiI6ICIiLAorICAgICAgICAgICAgIk8vIjogIiIsCisgICAgICAgICAgICAib2ludCI6ICIiLAorICAgICAgICAgICAgIm9tZWdhIjogIiIsCisgICAgICAgICAgICAiT21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJvbyI6ICIiLAorICAgICAgICAgICAgIm9yIjogIiIsCisgICAgICAgICAgICAib3giOiAiIiwKKyAgICAgICAgICAgICJQaGkiOiAiIiwKKyAgICAgICAgICAgICJwaGkiOiAiIiwKKyAgICAgICAgICAgICJwaSI6ICIiLAorICAgICAgICAgICAgIlBpIjogIiIsCisgICAgICAgICAgICAicHJvZCI6ICIiLAorICAgICAgICAgICAgInByb3AiOiAiIiwKKyAgICAgICAgICAgICJwc2kiOiAiIiwKKyAgICAgICAgICAgICJQc2kiOiAiIiwKKyAgICAgICAgICAgICJRUSI6ICIiLAorICAgICAgICAgICAgInF1YWQiOiAiIiwKKyAgICAgICAgICAgICJyQXJyIjogIiIsCisgICAgICAgICAgICAicmhvIjogIiIsCisgICAgICAgICAgICAicm9vdChuKSh4KSI6ICIiLAorICAgICAgICAgICAgIlJSIjogIiIsCisgICAgICAgICAgICAic2ZhIjogIiIsCisgICAgICAgICAgICAic2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJTaWdtYSI6ICIiLAorICAgICAgICAgICAgInNxcnQoeCkiOiAiIiwKKyAgICAgICAgICAgICJzcXVhcmUiOiAiIiwKKyAgICAgICAgICAgICJzdGFja3JlbCgtJmd0OykoKykiOiAiIiwKKyAgICAgICAgICAgICJzdWIiOiAiIiwKKyAgICAgICAgICAgICJzdWJlIjogIiIsCisgICAgICAgICAgICAic3VtIjogIiIsCisgICAgICAgICAgICAic3VtXyhuPTEpXm9vIjogIiIsCisgICAgICAgICAgICAic3VwIjogIiIsCisgICAgICAgICAgICAic3VwZSI6ICIiLAorICAgICAgICAgICAgInRhdSI6ICIiLAorICAgICAgICAgICAgIlRoZXRhIjogIiIsCisgICAgICAgICAgICAidGhldGEiOiAiIiwKKyAgICAgICAgICAgICJUVCI6ICIiLAorICAgICAgICAgICAgInR0YSI6ICIiLAorICAgICAgICAgICAgInVhcnIiOiAiIiwKKyAgICAgICAgICAgICJ1bGEiOiAiIiwKKyAgICAgICAgICAgICJ1cHNpbG9uIjogIiIsCisgICAgICAgICAgICAidXUiOiAiIiwKKyAgICAgICAgICAgICJ1dXUiOiAiIiwKKyAgICAgICAgICAgICJ2ZWNhIjogIiIsCisgICAgICAgICAgICAidnYiOiAiIiwKKyAgICAgICAgICAgICJ2dnYiOiAiIiwKKyAgICAgICAgICAgICJ4XihtK24pIjogIiIsCisgICAgICAgICAgICAieF8obW4pIjogIiIsCisgICAgICAgICAgICAiWGkiOiAiIiwKKyAgICAgICAgICAgICJ4aSI6ICIiLAorICAgICAgICAgICAgInh4IjogIiIsCisgICAgICAgICAgICAiemV0YSI6ICIiLAorICAgICAgICAgICAgIlpaIjogIiIsCisgICAgICAgICAgICAifC0mZ3Q7IjogIiIsCisgICAgICAgICAgICAifC0tIjogIiIsCisgICAgICAgICAgICAifD09IjogIiIsCisgICAgICAgICAgICAifF9fIjogIiIsCisgICAgICAgICAgICAifH4iOiAiIiwKKyAgICAgICAgICAgICJ+PSI6ICIiLAorICAgICAgICAgICAgIn58IjogIiIsCisgICAgICAgICAgICAifn4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmFuY3lTZWxlY3RzIjogeworICAgICAgICAgICAgIicrb3B0LnRleHQrJyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGaW5kUmVwbGFjZSI6IHsKKyAgICAgICAgICAgICInO1xyXG4gIHZhciB0YWdjID0gJyI6ICIiLAorICAgICAgICAgICAgIkNhc2Ugc2Vuc2l0aXZlIHNlYXJjaCI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIjogIiIsCisgICAgICAgICAgICAiRG9uZSI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSB0ZXh0IHlvdSB3YW50IHRvIGZpbmQiOiAiIiwKKyAgICAgICAgICAgICJGaW5kIGFuZCBSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiZm91bmQgaXRlbSI6ICIiLAorICAgICAgICAgICAgImZvdW5kIGl0ZW1zIjogIiIsCisgICAgICAgICAgICAiSGlnaGxpZ2h0IjogIiIsCisgICAgICAgICAgICAiSW5mb3JtIGEgcmVwbGFjZW1lbnQgd29yZCI6ICIiLAorICAgICAgICAgICAgIk5leHQiOiAiIiwKKyAgICAgICAgICAgICJub3QgZm91bmQiOiAiIiwKKyAgICAgICAgICAgICJPcHRpb25zIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSB3aXRoOiI6ICIiLAorICAgICAgICAgICAgInJlcGxhY2VkIGl0ZW0iOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtcyI6ICIiLAorICAgICAgICAgICAgIlNlYXJjaCBmb3I6IjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSBhbGwgb2NjdXJyZW5jZXMiOiAiIiwKKyAgICAgICAgICAgICJTdWJzdGl0dXRlIHRoaXMgb2NjdXJyZW5jZT8iOiAiIiwKKyAgICAgICAgICAgICJVbmRvIjogIiIsCisgICAgICAgICAgICAiV2hvbGUgd29yZHMgb25seSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGb3JtT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJFbnRlciB0aGUgbmFtZSBmb3IgbmV3IG9wdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIGNoZWNrIGJveC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBGb3JtLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG11bHRpLWxpbmUgdGV4dCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSByYWRpbyBidXR0b24uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgc2VsZWN0IGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHN1Ym1pdC9yZXNldCBidXR0b24uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgdGV4dCwgcGFzc3dvcmQgb3IgaGlkZGVuIGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIk1lc3NhZ2UgU2VudCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBTZWxlY3QuLi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybXMiOiB7CisgICAgICAgICAgICAiJ29uQ2xpY2snPSI6ICIiLAorICAgICAgICAgICAgIkFjY2VzcyBLZXk6IjogIiIsCisgICAgICAgICAgICAiQWN0aW9uIFVSTDoiOiAiIiwKKyAgICAgICAgICAgICJCdXR0b24gU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiQ2hlY2tlZCI6ICIiLAorICAgICAgICAgICAgIkNvbHVtbnM6IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCB0ZXh0IChvcHRpb25hbCkiOiAiIiwKKyAgICAgICAgICAgICJEaW1lbnNpb25zIjogIiIsCisgICAgICAgICAgICAiRGlzYWJsZWQiOiAiIiwKKyAgICAgICAgICAgICJFbmNvZGluZzoiOiAiIiwKKyAgICAgICAgICAgICJGb3IgQ29udHJvbDoiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBGSUVMRFNFVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IExBQkVMIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBTRUxFQ1QiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiRm9ybSBoYW5kbGVyIHNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJHZXQiOiAiIiwKKyAgICAgICAgICAgICJIYXJkIjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0IGluIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiSFRNTC1Gb3JtIHRvIENHSSAoZGVmYXVsdCkiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBzb3VyY2UiOiAiIiwKKyAgICAgICAgICAgICJJbml0aWFsIFRleHQ6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBGSUVMRFNFVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBJTlBVVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBTRUxFQ1QiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgVEVYVEFSRUEiOiAiIiwKKyAgICAgICAgICAgICJKYXZhc2NyaXB0IGZvciBidXR0b24gY2xpY2siOiAiIiwKKyAgICAgICAgICAgICJMYWJlbDoiOiAiIiwKKyAgICAgICAgICAgICJMZWdlbmQ6IjogIiIsCisgICAgICAgICAgICAiTWF4IGxlbmd0aDoiOiAiIiwKKyAgICAgICAgICAgICJNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjY2VwdGVkIjogIiIsCisgICAgICAgICAgICAiTWV0aG9kOiI6ICIiLAorICAgICAgICAgICAgIm11bHRpcGFydCBGb3JtIERhdGEgKEZpbGUtVXBsb2FkKSI6ICIiLAorICAgICAgICAgICAgIk5hbWUiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJuYW1lIG9mIHRoZSB0ZXh0YXJlYSI6ICIiLAorICAgICAgICAgICAgIk5hbWUvSUQ6IjogIiIsCisgICAgICAgICAgICAibm9ybWFsIjogIiIsCisgICAgICAgICAgICAibm93cmFwIjogIiIsCisgICAgICAgICAgICAiT2ZmIjogIiIsCisgICAgICAgICAgICAiUGh5c2ljYWwiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgYSBMYWJlbCI6ICIiLAorICAgICAgICAgICAgIlBvc3QiOiAiIiwKKyAgICAgICAgICAgICJwcmUiOiAiIiwKKyAgICAgICAgICAgICJSZWFkIE9ubHkiOiAiIiwKKyAgICAgICAgICAgICJTaXplIG9mIHRleHQgYm94IGluIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJTaXplOiI6ICIiLAorICAgICAgICAgICAgIlNvZnQiOiAiIiwKKyAgICAgICAgICAgICJUYWIgSW5kZXg6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IEZyYW1lOiI6ICIiLAorICAgICAgICAgICAgIlRleHQ6IjogIiIsCisgICAgICAgICAgICAiVVJMIG9mIGltYWdlIjogIiIsCisgICAgICAgICAgICAiVmFsdWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZToiOiAiIiwKKyAgICAgICAgICAgICJWaXJ0dWFsIjogIiIsCisgICAgICAgICAgICAiV2lkdGggaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJXcmFwIE1vZGU6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBOYW1lIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iCisgICAgICAgIH0sCisgICAgICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgICAgICIuLi4iOiAiIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgc3R5bGUtc2hlZXQ6IjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZCBjb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJDaGFyYWN0ZXIgc2V0OiI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChJU08tODg1OS01KSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChLT0k4LVIpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKFdJTkRPV1MtMTI1MSkiOiAiIiwKKyAgICAgICAgICAgICJEZXNjcmlwdGlvbjoiOiAiIiwKKyAgICAgICAgICAgICJET0NUWVBFOiI6ICIiLAorICAgICAgICAgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCB0aXRsZToiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkczoiOiAiIiwKKyAgICAgICAgICAgICJQcmltYXJ5IHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIlRleHQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiVVRGLTggKHJlY29tbWVuZGVkKSI6ICIiLAorICAgICAgICAgICAgIndlc3Rlcm4gKElTTy04ODU5LTEpIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bGxTY3JlZW4iOiB7CisgICAgICAgICAgICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkdlY2tvIjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJIb3Jpem9udGFsUnVsZSI6IHsKKyAgICAgICAgICAgICImI3gwMGQ3OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIkNlbnRlciI6ICIiLAorICAgICAgICAgICAgIkNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvZWRpdCBob3Jpem9udGFsIHJ1bGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBIb3Jpem9udGFsIFJ1bGUiOiAiIiwKKyAgICAgICAgICAgICJObyBzaGFkaW5nIjogIiIsCisgICAgICAgICAgICAicGVyY2VudCI6ICIiLAorICAgICAgICAgICAgInBpeGVscyI6ICIiLAorICAgICAgICAgICAgIlN0eWxlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIiIsCisgICAgICAgICAgICAiQ2hhciI6ICIiLAorICAgICAgICAgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIiIsCisgICAgICAgICAgICAiQ1NTIFN0eWxlIjogIiIsCisgICAgICAgICAgICAiRkcgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJGbG9hdCI6ICIiLAorICAgICAgICAgICAgIkp1c3RpZnkiOiAiIiwKKyAgICAgICAgICAgICJNYXJnaW4iOiAiIiwKKyAgICAgICAgICAgICJOb25lIjogIiIsCisgICAgICAgICAgICAiUGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIlRleHQgYWxpZ24iOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICIiLAorICAgICAgICAgICAgIi0iOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJDZW50ZXIiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJwZXJjZW50IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAicGl4ZWxzIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgICAgICJBbmNob3IgbmFtZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBBbmNob3IiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGZvb3Rub3RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IE5vdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGFnZWJyZWFrIjogeworICAgICAgICAgICAgIlBhZ2UgYnJlYWsiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIEJyZWFrIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNtaWxleSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgU21pbGV5IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICAgICAiXFxuICBUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZ1xcbiI6ICIiLAorICAgICAgICAgICAgIkhpZGUgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMSI6ICIiLAorICAgICAgICAgICAgIkxpbmsyIjogIiIsCisgICAgICAgICAgICAiTGluazMiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNCI6ICIiLAorICAgICAgICAgICAgIkxpbms1IjogIiIsCisgICAgICAgICAgICAiU2hvdyBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmciOiAiIiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgICAgICJBbGwgQ2F0ZWdvcmllcyI6ICIiLAorICAgICAgICAgICAgIkZpbHRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyBIVE1MIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIHRlbXBsYXRlIHZhcmlhYmxlIjogIiIsCisgICAgICAgICAgICAiT25seSBzZWFyY2ggd29yZCBiZWdpbm5pbmciOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIjw8Q2hhckNvdW50ZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICI8PEluc2VydFNuaXBwZXQ+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAgICAgIkNhcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJDYXB0aW9uIGZvciB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZSBib3JkZXJzOiI6ICIiLAorICAgICAgICAgICAgIkxheW91IjogIiIsCisgICAgICAgICAgICAiU3R5bGUgb2YgdGhlIGJvcmRlciI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciI6ICI8PElubGluZVN0eWxlcj4+IgorICAgICAgICB9LAorICAgICAgICAiTGFuZ01hcmtzIjogeworICAgICAgICAgICAgIiZtZGFzaDsgbGFuZ3VhZ2UgJm1kYXNoOyI6ICIiLAorICAgICAgICAgICAgIicsICciOiAiIiwKKyAgICAgICAgICAgICJFbmdsaXNoIjogIiIsCisgICAgICAgICAgICAiRnJlbmNoIjogIiIsCisgICAgICAgICAgICAiR3JlZWsiOiAiIiwKKyAgICAgICAgICAgICJsYW5ndWFnZSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJMYXRpbiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJMaW5rZXIiOiB7CisgICAgICAgICAgICAiKHB4KSI6ICIiLAorICAgICAgICAgICAgIkFuY2hvci1MaW5rIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIEFkZHJlc3M6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgTGluayI6ICIiLAorICAgICAgICAgICAgIkxvY2F0aW9uIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZW51IEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFRlbXBsYXRlOiI6ICIiLAorICAgICAgICAgICAgIk5ldyBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcmRpbmFyeSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUG9wdXAgV2luZG93IjogIiIsCisgICAgICAgICAgICAiUG9wdXBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgTGluayI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZWFibGU6IjogIiIsCisgICAgICAgICAgICAiU2FtZSBXaW5kb3cgKGp1bXAgb3V0IG9mIGZyYW1lcykiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGxiYXJzOiI6ICIiLAorICAgICAgICAgICAgIlNob3dzIE9uIEhvdmVyIjogIiIsCisgICAgICAgICAgICAiU3RhdHVzIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJTdWJqZWN0OiI6ICIiLAorICAgICAgICAgICAgIlRpdGxlOiI6ICIiLAorICAgICAgICAgICAgIlRvb2xiYXI6IjogIiIsCisgICAgICAgICAgICAiVVJMIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiIiwKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIk5hbWU6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiU2l6ZToiOiAiPDxGb3Jtcz4+IgorICAgICAgICB9LAorICAgICAgICAiTGlzdFR5cGUiOiB7CisgICAgICAgICAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogIiIsCisgICAgICAgICAgICAiRGVjaW1hbCBudW1iZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgZ3JlZWsgbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIGxhdGluIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciByb21hbiBudW1iZXJzIjogIiIsCisgICAgICAgICAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIlVwcGVyIHJvbWFuIG51bWJlcnMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiTW9vdG9vbHNGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJPcGVyYSI6IHsKKyAgICAgICAgICAgICJNQVJLIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgdGV4dCBpbiBuZXcgcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiUGFzdGUgYXMgUGxhaW4gVGV4dCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQcmVzZXJ2ZVNjcmlwdHMiOiB7CisgICAgICAgICAgICAiSmF2YVNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIlBIUCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgICAgICInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnY2wnOiAnIjogIiIsCisgICAgICAgICAgICAiQVRUUklCVVRFUyI6ICIiLAorICAgICAgICAgICAgIkNvbG9ycyI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSBUQUcgeW91IHdhbnQgdG8gaW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiTm8gQ1NTIGNsYXNzIGF2YWlhYmxlIjogIiIsCisgICAgICAgICAgICAiT2siOiAiIiwKKyAgICAgICAgICAgICJPUFRJT05TIjogIiIsCisgICAgICAgICAgICAiUXVpY2sgVGFnIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlRBR3MiOiAiIiwKKyAgICAgICAgICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBUQUciOiAiIiwKKyAgICAgICAgICAgICJZb3UgaGF2ZSB0byBzZWxlY3Qgc29tZSB0ZXh0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNhdmVTdWJtaXQiOiB7CisgICAgICAgICAgICAiaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAgICAgICAgICJSZWFkeSI6ICIiLAorICAgICAgICAgICAgIlNhdmUiOiAiIiwKKyAgICAgICAgICAgICJTYXZpbmcuLi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiU2V0SWQiOiB7CisgICAgICAgICAgICAiSUQvTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQgYW5kIE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQvTmFtZSI6ICIiLAorICAgICAgICAgICAgIlNldCBJRC9OYW1lIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiQ2xvc2luZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIkNsb3NpbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIkNvbnZlcnQgYWxsIHF1b3RlcyBhbmQgZGFzaGVzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIGF1dG9tYXRpYyByZXBsYWNlbWVudHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN0eWxpc3QiOiB7CisgICAgICAgICAgICAiU3R5bGVzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBTZWxlY3Rpb24gT25seSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIHVwIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBTY29wZSI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYWwgdGlkeSB1cCBhbmQgY29ycmVjdGlvbiBvZiBzb21lIHByb2JsZW1zLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzZWxlY3QgZnJvbSB0aGUgZm9sbG93aW5nIGNsZWFuaW5nIG9wdGlvbnMuLi4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc3RhbmQgYnkgd2hpbGUgY2xlYW5pbmcgaW4gcHJvY2Vzcy4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGlnbm1lbnQgKGxlZnQvcmlnaHQvanVzdGlmeSkuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBjbGFzc2VzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBBbGwgSFRNTCBUYWdzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBzdHlsZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0eXBlZmFjZXMgKGZvbnQgXCJzdHlsZXNcIikuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGVtcGhhc2lzIGFuZCBhbm5vdGF0aW9ucy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgbGFuZyBhdHRyaWJ1dGVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBQYXJhZ3JhcGhzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cy4iOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzIHdpdGggbm9uLWRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzLiI6ICIiLAorICAgICAgICAgICAgIlZpZ29yb3VzbHkgcHVyZ2UgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiQWxsIGZvdXIgc2lkZXMiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXJzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBQcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBUeXBlOiI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIGRvd24iOiAiIiwKKyAgICAgICAgICAgICJDZWxscyB0byB0aGUgcmlnaHQsIGFuZCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBjZWxsIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSByb3ciOiAiIiwKKyAgICAgICAgICAgICJEbyBOb3QgQ2hhbmdlIjogIiIsCisgICAgICAgICAgICAiRnJhbWUgYW5kIGJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJGcmFtZXMiOiAiIiwKKyAgICAgICAgICAgICJIZWFkZXIgKHRoKSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjZWxsIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNlbGwgYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNvbHVtbiBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjb2x1bW4gYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCByb3cgYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBjdXJyZW50IGNlbGwgd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJObyBydWxlcyI6ICIiLAorICAgICAgICAgICAgIk5vIHNpZGVzIjogIiIsCisgICAgICAgICAgICAiTm9ybWFsICh0ZCkiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJSb3cgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlJvdyBQcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gY29sdW1ucyBvbmx5IjogIiIsCisgICAgICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiByb3dzIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgY29sdW1uIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgcm93IjogIiIsCisgICAgICAgICAgICAiU3VtbWFyeSI6ICIiLAorICAgICAgICAgICAgIlRhYmxlIFByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgbGVmdC1oYW5kIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSByaWdodCBhbmQgbGVmdCBzaWRlcyBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHRvcCBhbmQgYm90dG9tIHNpZGVzIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIiIsCisgICAgICAgICAgICAiQ2FwdGlvbiI6ICI8PEluc2VydFRhYmxlPj4iLAorICAgICAgICAgICAgIkNvbHVtbnMiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJEZXNjcmlwdGlvbiI6ICI8PEZ1bGxQYWdlPj4iLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiUGFkZGluZyI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJwaXhlbHMiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiVW5zYXZlZENoYW5nZXMiOiB7CisgICAgICAgICAgICAiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBlZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiV2ViS2l0IjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICI8PEdlY2tvPj4iCisgICAgICAgIH0sCisgICAgICAgICJYaW5oYSI6IHsKKyAgICAgICAgICAgICImIzgyMTI7IGZvbnQgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIiYjODIxMjsgc2l6ZSAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiMSAoOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIyICgxMCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIzICgxMiBwdCkiOiAiIiwKKyAgICAgICAgICAgICI0ICgxNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI1ICgxOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI2ICgyNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI3ICgzNiBwdCkiOiAiIiwKKyAgICAgICAgICAgICJBcmlhbCI6ICIiLAorICAgICAgICAgICAgIkNvdXJpZXIgTmV3IjogIiIsCisgICAgICAgICAgICAiQ1RSTC0wICh6ZXJvKSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMSAuLiBDVFJMLTYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUEiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUoiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUwiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLU4iOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVgiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVoiOiAiIiwKKyAgICAgICAgICAgICJFZGl0b3IgSGVscCI6ICIiLAorICAgICAgICAgICAgIkVOVEVSIjogIiIsCisgICAgICAgICAgICAiRXJyb3IgTG9hZGluZyBYaW5oYS4gIERldmVsb3BlcnMsIGNoZWNrIHRoZSBFcnJvciBDb25zb2xlIGZvciBpbmZvcm1hdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJHZW9yZ2lhIjogIiIsCisgICAgICAgICAgICAiSW1wYWN0IjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBDb3JlIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW5zIjogIiIsCisgICAgICAgICAgICAiTVMgV29yZCBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IENvbG9yIjogIiIsCisgICAgICAgICAgICAiU0hJRlQtRU5URVIiOiAiIiwKKyAgICAgICAgICAgICJUYWhvbWEiOiAiIiwKKyAgICAgICAgICAgICJUaW1lcyBOZXcgUm9tYW4iOiAiIiwKKyAgICAgICAgICAgICJUb3VjaCBoZXJlIGZpcnN0IHRvIGFjdGl2YXRlIGVkaXRvci4iOiAiIiwKKyAgICAgICAgICAgICJWZXJkYW5hIjogIiIsCisgICAgICAgICAgICAiV2FpdGluZyBmb3IgSWZyYW1lIHRvIGxvYWQuLi4iOiAiIiwKKyAgICAgICAgICAgICJXaW5nRGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiUmVtb3ZlIEN1cnJlbnQgQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIlNldCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IHBhZ2UgYmFja2dyb3VuZCBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlNldCBQYWdlIEJhY2tncm91bmQgSW1hZ2UiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2xpZW50c2lkZVNwZWxsY2hlY2siOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVjayB1c2luZyBpZVNwZWxsIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEwJSI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiIiwKKyAgICAgICAgICAgICIyMDAlIjogIiIsCisgICAgICAgICAgICAiMjUlIjogIiIsCisgICAgICAgICAgICAiNTAlIjogIiIsCisgICAgICAgICAgICAiNzUlIjogIiIsCisgICAgICAgICAgICAiPkxpc3QgVmlldyI6ICIiLAorICAgICAgICAgICAgIj5UaHVtYm5haWwgVmlldyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIiIsCisgICAgICAgICAgICAiQWxpZ24iOiAiIiwKKyAgICAgICAgICAgICJBbHQiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJDcm9wIjogIiIsCisgICAgICAgICAgICAiRDoiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiIiwKKyAgICAgICAgICAgICJFZGl0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIiIsCisgICAgICAgICAgICAiRmlsZW5hbWU6IjogIiIsCisgICAgICAgICAgICAiRmlsZXNpemU6IjogIiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkZsaXAgVmVydGljYWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJHSUYiOiAiIiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiIiwKKyAgICAgICAgICAgICJIOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIiIsCisgICAgICAgICAgICAiSlBFRyBIaWdoIjogIiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiIiwKKyAgICAgICAgICAgICJKUEVHIE1lZGl1bSI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmciOiAiIiwKKyAgICAgICAgICAgICJMb2NrIjogIiIsCisgICAgICAgICAgICAiTWFya2VyIjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBmb2xkZXIgc2l6ZSBsaW1pdCByZWFjaGVkLiBVcGxvYWQgZGlzYWJsZWQuIjogIiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICIiLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJObyBGaWxlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB2YWx1ZSI6ICIiLAorICAgICAgICAgICAgIlBORyI6ICIiLAorICAgICAgICAgICAgIlByZXNldCI6ICIiLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIiIsCisgICAgICAgICAgICAiUmVmcmVzaCI6ICIiLAorICAgICAgICAgICAgIlJlbmFtZSI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIEltYWdlIjogIiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiIiwKKyAgICAgICAgICAgICJTdGFydCBZOiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgbWFya2VyIGNvbG9yIjogIiIsCisgICAgICAgICAgICAiVHJhc2giOiAiIiwKKyAgICAgICAgICAgICJVcGxvYWQiOiAiIiwKKyAgICAgICAgICAgICJXOiI6ICIiLAorICAgICAgICAgICAgIlg6IjogIiIsCisgICAgICAgICAgICAiWGluaGEgSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiWToiOiAiIiwKKyAgICAgICAgICAgICJab29tIjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNsZWFyIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiQ29sb3IiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJDb3B5IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiQ3V0IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiSGVpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiPDxNb290b29sc0ZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1hcmdpbiI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJQYWRkaW5nIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlNhdmUiOiAiPDxTYXZlU3VibWl0Pj4iLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiRmlsdGVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbHRlciI6ICI8PEluc2VydFNuaXBwZXQyPj4iCisgICAgICAgIH0sCisgICAgICAgICJIdG1sVGlkeSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEhUTUxUSURZIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkF1dG8tVGlkeSI6ICIiLAorICAgICAgICAgICAgIkRvbid0IFRpZHkiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIFRpZHkiOiAiIiwKKyAgICAgICAgICAgICJUaWR5IGZhaWxlZC4gIENoZWNrIHlvdXIgSFRNTCBmb3Igc3ludGF4IGVycm9ycy4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFuZ2xlOiI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgUGljdHVyZXMiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFVzZXJuYW1lL0VtYWlsIjogIiIsCisgICAgICAgICAgICAiRm9sZGVyIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgTGlzdCI6ICIiLAorICAgICAgICAgICAgIktleXdvcmQiOiAiIiwKKyAgICAgICAgICAgICJObyBJbWFnZXMgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBQaG90b3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBWaWRlb3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIFNlcnZlciI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBVc2VybmFtZSI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW8gTGlzdCI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW9zIjogIiIsCisgICAgICAgICAgICAiQToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkNsZWFyIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJDcm9wIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkVkaXQiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGVuYW1lOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIEltYWdlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgSGlnaCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgTWVkaXVtIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJMb2NrIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJNYXJrZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1lYXN1cmUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUE5HIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJRdWFsaXR5OiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUmVmcmVzaCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUmVzaXplIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIEltYWdlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJTdGFydCBYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU3RhcnQgWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlRyYXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJXOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJCZWhhdmlvcjoiOiAiIiwKKyAgICAgICAgICAgICJDb250aW51b3VzIjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uOiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBzY3JvbGxpbmcgbWFycXVlZSI6ICIiLAorICAgICAgICAgICAgIk1hcnF1ZWUgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIEFtb3VudDoiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgRGVsYXk6IjogIiIsCisgICAgICAgICAgICAiU2xpZGUiOiAiIiwKKyAgICAgICAgICAgICJTcGVlZCBDb250cm9sIjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk5hbWUiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlRleHQ6IjogIjw8Rm9ybXM+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBub3QgZGVmaW5lZCI6ICIiLAorICAgICAgICAgICAgIiBPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIk9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiVXBsb2FkIGZpbGUiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiU2l6ZSI6ICI8PEZvcm1zPj4iCisgICAgICAgIH0sCisgICAgICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIxMjAlIjogIiIsCisgICAgICAgICAgICAiMTUwJSI6ICIiLAorICAgICAgICAgICAgIjgwJSI6ICIiLAorICAgICAgICAgICAgIkFkZCBHVUlETyBDb2RlIGluIGEgdGV4dGJveCBvbiB0aGUgcGFnZSI6ICIiLAorICAgICAgICAgICAgIkFkZCBNSURJIGxpbmsgdG8gYWxsb3cgc3R1ZGVudHMgdG8gaGVhciB0aGUgbXVzaWMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJHdWlkbyBjb2RlIjogIiIsCisgICAgICAgICAgICAiR1VJRE8gQ29kZSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIGluIGFwcGxldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBHVUlETyBNdXNpYyBOb3RhdGlvbiI6ICIiLAorICAgICAgICAgICAgIk1JREkgRmlsZSI6ICIiLAorICAgICAgICAgICAgIlNvdXJjZSBDb2RlIjogIiIsCisgICAgICAgICAgICAiV2l0aCBNb3ppbGxhLCB0aGUgYXBwbGV0IHdpbGwgbm90IGJlIHZpc2libGUgaW4gZWRpdG9yLCBidXQgb25seSBpbiBXZWIgcGFnZSBhZnRlciBzdWJtaXR0aW5nLiI6ICIiLAorICAgICAgICAgICAgIlpvb20gOiI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJab29tIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBHZWFycyBpbiBvcmRlciB0byB1c2UgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZSBhbmQgY29uZmlndXJhdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGluZyBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiSW5zdGFsbCI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIEFib3V0IExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgcmVsb2FkIHRoZSBwYWdlLCBjYXVzaW5nIHlvdSB0byBsb3NlIGFueSB1bnNhdmVkIHdvcmsuICBQcmVzcyBcIk9LXCIgdG8gcmVsb2FkLiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIHVzZXMgR29vZ2xlIEdlYXJzIHRvIGVuYWJsZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlLiAgV2l0aCBHZWFycyBpbnN0YWxsZWQsIHlvdSBjYW4gc2F2ZSBkcmFmdHMgb2YgeW91ciBkb2N1bWVudHMgb24geW91ciBoYXJkIGRyaXZlLCBjb25maWd1cmUgWGluaGEgdG8gbG9vayB0aGUgd2F5IHlvdSB3YW50LCBhbmQgY2FycnkgdGhpcyBpbmZvcm1hdGlvbiB3aGVyZXZlciB5b3UgdXNlIFhpbmhhIG9uIHRoZSB3ZWIuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsZTogIjogIiIsCisgICAgICAgICAgICAiSW1wb3J0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGV0YWlscyI6ICIiLAorICAgICAgICAgICAgIkZpbGUgQnJvd3NlciI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICAgIFRoZXJlIEMgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gIFRoZXJlIEEgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gXCIgVGhlcmUgQiBcIiI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICcgVGhlcmUgRCAnIjogIiIsCisgICAgICAgICAgICAiTGlzdCBvZiBQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJOZXcgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJPcGVuIjogIiIsCisgICAgICAgICAgICAiT3BlbiBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHlvdSdkIGxpa2UgdG8gY3JlYXRlLiI6ICIiLAorICAgICAgICAgICAgIlNhdmUgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgZXJhc2UgYW55IHVuc2F2ZWQgY29udGVudC4gIElmIHlvdSdyZSBjZXJ0YWluLCBwbGVhc2UgY2xpY2sgT0sgdG8gY29udGludWUuIjogIiIsCisgICAgICAgICAgICAiV2ViIFVSTCI6ICIiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiPDxQU0xvY2FsPj4iLAorICAgICAgICAgICAgIkNvcHkiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTWFuYWdlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZW5hbWUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCI6ICI8PEluc2VydE5vdGU+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBTUEVMTENIRUNLRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGljdGlvbmFyeSI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGVkIGxpc3Qgb2YgbWlzcGVsbGVkIHdvcmRzIjogIiIsCisgICAgICAgICAgICAiSFRNTEFyZWEgU3BlbGwgQ2hlY2tlciI6ICIiLAorICAgICAgICAgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIGFsbCI6ICIiLAorICAgICAgICAgICAgIkluZm8iOiAiIiwKKyAgICAgICAgICAgICJMZWFybiI6ICIiLAorICAgICAgICAgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICIiLAorICAgICAgICAgICAgIk9yaWdpbmFsIHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQuICBDYWxsaW5nIHNwZWxsIGNoZWNrZXIuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAiIiwKKyAgICAgICAgICAgICJwbGl6IHdlaXQgOy0pIjogIiIsCisgICAgICAgICAgICAiUmUtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSBhbGwiOiAiIiwKKyAgICAgICAgICAgICJSZXZlcnQiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiU3BlbGwtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJTdWdnZXN0aW9ucyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBkcm9wIGNoYW5nZXMgYW5kIHF1aXQgc3BlbGwgY2hlY2tlci4gIFBsZWFzZSBjb25maXJtLiI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2Ugd2l0aCI6ICI8PEZpbmRSZXBsYWNlPj4iCisgICAgICAgIH0sCisgICAgICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFRFTVBMQVRFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkluc2VydCB0ZW1wbGF0ZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJVbkZvcm1hdCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFVORk9STUFUIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFsbCI6ICIiLAorICAgICAgICAgICAgIkFsbCBIVE1MOiI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIEFyZWEiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBvcHRpb25zIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0dGluZzoiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIENsZWFuZXIiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Qgd2hpY2ggdHlwZXMgb2YgZm9ybWF0dGluZyB5b3Ugd291bGQgbGlrZSB0byByZW1vdmUuIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0aW9uIjogIiIKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9mYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2ZhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ODJhNzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9mYS5qcwpAQCAtMCwwICsxLDE1NzMgQEAKKy8vIFhpbmhhIExhbmd1YWdlIENvbWJpbmVkIFRyYW5zbGF0aW9uIEZpbGUKKy8vCisvLyBMQU5HOiAiZmEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTlNUUlVDVElPTlMgVE8gVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFlvdXIgdHJhbnNsYXRpb24gbXVzdCBiZSBpbiBVVEYtOCBDaGFyYWN0ZXIgRW5jb2RpbmcuCisvLworLy8gVGhpcyBpcyBhIEpTT04gZW5jb2RlZCBmaWxlIChwbHVzIGNvbW1lbnRzKSwgc3RyaW5ncyBzaG91bGQgYmUgZG91YmxlLXF1b3RlCisvLyBvbmx5LCBkbyBub3QgdXNlIHNpbmdsZSBxdW90ZXMgdG8gc3Vycm91bmQgc3RyaW5ncyAtICJoZWxsbyIsIG5vdCAnaGVsbG8nCisvLyBkbyBub3QgaGF2ZSBhIHRyYWlsaW5nIGNvbW1hIGFmdGVyIHRoZSBsYXN0IGVudHJ5IGluIGEgc2VjdGlvbi4KKy8vCisvLyBPbmx5IGZ1bGwgbGluZSBjb21tZW50cyBhcmUgYWxsb3dlZCAodGhhdCBhIGNvbW1lbnRzIG9jY3VweSBlbnRpcmUgbGluZXMpLgorLy8KKy8vIFNlYXJjaCBmb3IgdGhlIF9fTkVXX1RSQU5TTEFUSU9OU19fIHNlY3Rpb24gYmVsb3csIHRoaXMgaXMgd2hlcmUgeW91IHdpbGwKKy8vIHdhbnQgdG8gZm9jdXMsIHRoaXMgc2VjdGlvbiBpbmNsdWRlcyB0aGluZ3MgdGhhdCBkbyBub3QgcHJlc2VudGx5IGhhdmUgYSAKKy8vIHRyYW5zbGF0aW9uIG9yIGZvciB3aGljaCB0aGUgdHJhbnNsYXRpb24gbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgYWNjdXJhY3kuCisvLworLy8gSW4gdGhlIE5ldyBUcmFuc2xhdGlvbnMgc2VjdGlvbiBhIHRyYW5zbGF0aW9uIHN0cmluZyBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZworLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiIgorLy8gICAgIFRoaXMgbWVhbnMgaXQgaXMgbm90IHRyYW5zbGF0ZWQgeWV0LCBhZGQgeW91ciB0cmFuc2xhdGlvbi4uLgorLy8gICAgICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJLbGluZ29uIFN0cmluZyBIZXJlIgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiVHJhbnNsYXRlZCBTdHJpbmcgSGVyZSIKKy8vICAgICBUaGlzIG1lYW5zIHRoYXQgYW4gZXhpc3RpbmcgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nLCBpbiBzb21lIG90aGVyCisvLyAgICAgc2VjdGlvbiBoYXMgYmVlbiBmb3VuZCwgYW5kIHVzZWQuICBDaGVjayB0aGF0IGl0IGlzIGFwcHJvcHJpdGUgZm9yIHRoaXMKKy8vICAgICBzZWN0aW9uIGFuZCBpZiBpdCBpcywgdGhhdCdzIGZpbmUgbGVhdmUgaXQgYXMgaXMsIG90aGVyd2lzZSBjaGFuZ2UgYXMKKy8vICAgICBhcHByb3ByaWF0ZS4KKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIjw8QW5vdGhlclNlY3Rpb24+PiIKKy8vICAgICBUaGlzIG1lYW5zIHVzZSB0aGUgc2FtZSB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcgYXMgPDxBbm90aGVyU2VjdGlvbj4+CisvLyAgICAgdGhpcyBzYXZlcyB5b3UgcmUtdHJhbmxhdGluZyBzdHJpbmdzLiAgSWYgdGhlIENvbnRleHQgb2YgdGhpcyBzZWN0aW9uCisvLyAgICAgYW5kIHRoZSBjb250ZXh0IG9mIEFub3RoZXJTZWN0aW9uIHNlZW0gdGhlIHNhbWUsIHRoYXQncyBmaW5lIGxlYXZlIGl0CisvLyAgICAgdXNpbmcgdGhhdCB0cmFuc2xhdGlvbiwgYnV0IGlmIHRoaXMgc2VjdGlvbiBuZWVkcyBhIGRpZmZlcmVudCB0cmFuc2xhdGlvbiwgCisvLyAgICAgeW91IGNhbiBwcm92aWRlIGl0IGJ5IHJlcGxhY2luZyB0aGUgbGluayAoPDxBbm90aGVyU2VjdGlvbj4+KSB3aXRoIHRoYXQKKy8vICAgICBuZXcgdHJhbnNsYXRpb24uICBGb3IgZXhhbXBsZSAtIGEgIlRhYmxlIiBpbiBzYXkgIkRhdGFQbHVnaW4iIGlzIAorLy8gICAgIHBlcmhhcHMgdHJhbnNsYXRlZCBkaWZmZXJlbnRseSB0byAiVGFibGUiIGluICJGdXJuaXR1cmVQbHVnaW4iLgorLy8KKy8vIFRFU1RJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgcGxhY2UgeW91ciB0cmFuc2xhdGlvbiBmaWxlIG9uIHlvdXIgd2Vic2VydmVyIHNvbWV3aGVyZSBmb3IgZXhhbXBsZQorLy8KKy8vICAgL3hpbmhhL2xhbmcvbWVyZ2VkL2ZhLmpzCisvLworLy8gYW5kIHRoZW4gdGVsbCBYaW5oYSB3aGVyZSB0byBnZXQgaXQgKGJlZm9yZSBsb2FkaW5nIFhpbmhhQ29yZS5qcykgYnkgCisvLworLy8gIF9lZGl0b3JfbGFuZyAgICAgICAgICAgICAgPSAnZmEnOworLy8gIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSAgPSAnL3hpbmhhL2xhbmcvbWVyZ2VkL2ZhLmpzJzsKKy8vCisvLyBYaW5oYSB3aWxsIGxvYWQgeW91ciBuZXcgbGFuZ3VhZ2UgZGVmaW5pdGlvbi4KKy8vCisvLyBTVUJNSVRUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IGNyZWF0ZSBhIFRpY2tldCBvbiB0aGUgWGluaGEgd2Vic2l0ZSBhbmQgYXR0YWNoIHlvdXIgdHJhbnNsYXRpb24gCisvLyBmaWxlLgorLy8KKy8vIFRoZSBYaW5oYSBkZXZlbG9wZXJzIHdpbGwgdGFrZSB5b3VyIGZpbGUgYW5kIHVzZSB0aGUgCisvLyAgICAgY29udHJpYi9sY19zcGxpdF9tZXJnZWRfZmlsZS5waHAKKy8vIHNjcmlwdCB0byBsb2FkIGl0IGludG8gdGhlIFhpbmhhIGRpc3RyaWJ1dGlvbi4KKworeworICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAi2KfZhti12LHYp9mBIiwKKyAgICAgICAgIk9LIjogItio2YTZhyIKKyAgICB9LAorICAgICJBYm91dEJveCI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogItiv2LHYqNin2LHZhyDYp9uM2YYg2YjbjNix2KfbjNi0INqv2LEiLAorICAgICAgICAiQ2xvc2UiOiAi2KjYs9iq2YYiCisgICAgfSwKKyAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIKKyAgICB9LAorICAgICJDb2xvclBpY2tlciI6IHsKKyAgICAgICAgIkNsb3NlIjogItio2LPYqtmGIiwKKyAgICAgICAgIk9LIjogItio2YTZhyIKKyAgICB9LAorICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogItiq2LHYp9iyINiv2LEg2YjYs9i3IiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICLYqtix2KfYsiDYp9iyINqG2b4g2Ygg2LHYp9iz2KoiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogItiq2LHYp9iyINin2LIg2obZviIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogItiq2LHYp9iyINiv2LEg2LHYp9iz2KoiCisgICAgfSwKKyAgICAiQ3JlYXRlTGluayI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogItin2YHYstmI2K/ZhiAvINmI24zYsdin24zYtCDZhNuM2YbaqSIsCisgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogItm+2YbYrNix2Ycg2KzYr9uM2K8gKF9ibGFuaykiLAorICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICLZh9uM2obaqdiv2KfZhSAo2KfYs9iq2YHYp9iv2Ycg2KfYsiDYqNiv2YjZhiDYtNix2LcpIiwKKyAgICAgICAgIk9LIjogItio2YTZhyIsCisgICAgICAgICJPdGhlciI6ICLYs9in24zYsSIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAi2YHYsduM2YUg24zaqdiz2KfZhiAoX3NlbGYpIiwKKyAgICAgICAgIlRhcmdldDoiOiAi2YfYr9mBIiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAi2LnZhtmI2KfZhiAo2LHYp9mH2YbZhdin24wg24zaqSDYrti324wpIiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAi2YHYsduM2YUg2KjYp9mE2KfbjNuMIChfdG9wKSIsCisgICAgICAgICJVUkw6IjogIlVSTDoiLAorICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogItio2KfbjNivINmC2KjZhCDYp9iyINiz2KfYrtiqINmE24zZhtqpINiMINmF2KrZhtuMINix2Kcg2KfZhtiq2K7Yp9ioINmG2YXYp9uM24zYryIKKyAgICB9LAorICAgICJFZGl0VGFnIjogeworICAgICAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIsCisgICAgICAgICJPSyI6ICLYqNmE2YciCisgICAgfSwKKyAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAi2KfZhti12LHYp9mBIiwKKyAgICAgICAgIk9LIjogItio2YTZhyIsCisgICAgICAgICJQcmV2aWV3IjogItm+24zYtCDZhtmF2KfbjNi0IgorICAgIH0sCisgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICJBYnNib3R0b20iOiAi2K/ZgtuM2YLYpyDZvtin24zbjNmGIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICLYr9mC24zZgtinINmI2LPYtyIsCisgICAgICAgICJCYXNlbGluZSI6ICLYp9io2KrYr9in24wg2K7YtyIsCisgICAgICAgICJCb3R0b20iOiAi2b7Yp9uM24zZhiIsCisgICAgICAgICJDYW5jZWwiOiAi2KfZhti12LHYp9mBIiwKKyAgICAgICAgIkxlZnQiOiAi2obZviIsCisgICAgICAgICJNaWRkbGUiOiAi2YjYs9i3IiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAi2b7Zhtis2LHZhyDYrNiv24zYryAoX2JsYW5rKSIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogItmH24zahtqp2K/Yp9mFICjYp9iz2KrZgdin2K/ZhyDYp9iyINio2K/ZiNmGINi02LHYtykiLAorICAgICAgICAiTm90IHNldCI6ICLYqtmG2LjbjNmFINmG2LTYr9mHIiwKKyAgICAgICAgIk9LIjogItio2YTZhyIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogItmF2YjZgti524zYqiDbjNin2KjbjCDYqti12YjbjNixIiwKKyAgICAgICAgIlByZXZpZXciOiAi2b7bjNi0INmG2YXYp9uM2LQiLAorICAgICAgICAiUmlnaHQiOiAi2LHYp9iz2KoiLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogItmB2LHbjNmFINuM2qnYs9in2YYgKF9zZWxmKSIsCisgICAgICAgICJUZXh0dG9wIjogItio2KfZhNin24wg2YXYqtmGIiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKSI6ICLYudmG2YjYp9mGICjYsdin2YfZhtmF2KfbjCDbjNqpINiu2LfbjCkiLAorICAgICAgICAiVG9wIjogItio2KfZhNinIiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAi2YHYsduM2YUg2KjYp9mE2KfbjNuMIChfdG9wKSIsCisgICAgICAgICJXaWR0aCI6ICLYt9mI2YQiLAorICAgICAgICAiV2lkdGg6IjogIti32YjZhCIKKyAgICB9LAorICAgICJGb3JtcyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJVUkwg2KrYtdmI24zYsSIsCisgICAgICAgICJPSyI6ICLYqNmE2YciLAorICAgICAgICAiUm93czoiOiAi2LHYr9uM2YEg2YfYpyIKKyAgICB9LAorICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiLAorICAgICAgICAiT0siOiAi2KjZhNmHIgorICAgIH0sCisgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAiQWxpZ25tZW50OiI6ICLYqtix2KfYsiDYqNmG2K/bjCIsCisgICAgICAgICJDYW5jZWwiOiAi2KfZhti12LHYp9mBIiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICLYrti3INin2YHZgtuMIiwKKyAgICAgICAgIkxheW91dCI6ICLZhNin24zZhyIsCisgICAgICAgICJMZWZ0IjogItqG2b4iLAorICAgICAgICAiT0siOiAi2KjZhNmHIiwKKyAgICAgICAgIlJpZ2h0IjogItix2KfYs9iqIiwKKyAgICAgICAgIldpZHRoOiI6ICLYt9mI2YQiCisgICAgfSwKKyAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAiQWJzYm90dG9tIjogItiv2YLbjNmC2Kcg2b7Yp9uM24zZhiIsCisgICAgICAgICJBYnNtaWRkbGUiOiAi2K/ZgtuM2YLYpyDZiNiz2LciLAorICAgICAgICAiQmFzZWxpbmUiOiAi2KfYqNiq2K/Yp9uMINiu2LciLAorICAgICAgICAiQm90dG9tIjogItm+2KfbjNuM2YYiLAorICAgICAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAi2KfZgdiy2YjYr9mGINiq2LXZiNuM2LEiLAorICAgICAgICAiTGVmdCI6ICLahtm+IiwKKyAgICAgICAgIk1pZGRsZSI6ICLZiNiz2LciLAorICAgICAgICAiTm90IHNldCI6ICLYqtmG2LjbjNmFINmG2LTYr9mHIiwKKyAgICAgICAgIk9LIjogItio2YTZhyIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogItmF2YjZgti524zYqiDbjNin2KjbjCDYqti12YjbjNixIiwKKyAgICAgICAgIlJpZ2h0IjogItix2KfYs9iqIiwKKyAgICAgICAgIlRleHR0b3AiOiAi2KjYp9mE2KfbjCDZhdiq2YYiLAorICAgICAgICAiVG9wIjogItio2KfZhNinIiwKKyAgICAgICAgIldpZHRoOiI6ICLYt9mI2YQiCisgICAgfSwKKyAgICAiSW5saW5lU3R5bGVyIjogeworICAgICAgICAiQmFzZWxpbmUiOiAi2KfYqNiq2K/Yp9uMINiu2LciLAorICAgICAgICAiQm90dG9tIjogItm+2KfbjNuM2YYiLAorICAgICAgICAiSW1hZ2UgVVJMIjogIlVSTCDYqti12YjbjNixIiwKKyAgICAgICAgIkxheW91dCI6ICLZhNin24zZhyIsCisgICAgICAgICJMZWZ0IjogItqG2b4iLAorICAgICAgICAiTWlkZGxlIjogItmI2LPYtyIsCisgICAgICAgICJSaWdodCI6ICLYsdin2LPYqiIsCisgICAgICAgICJUb3AiOiAi2KjYp9mE2KciLAorICAgICAgICAiV2lkdGgiOiAi2LfZiNmEIgorICAgIH0sCisgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiLAorICAgICAgICAiT0siOiAi2KjZhNmHIgorICAgIH0sCisgICAgIkluc2VydEltYWdlIjogeworICAgICAgICAiQWJzYm90dG9tIjogItiv2YLbjNmC2Kcg2b7Yp9uM24zZhiIsCisgICAgICAgICJBYnNtaWRkbGUiOiAi2K/ZgtuM2YLYpyDZiNiz2LciLAorICAgICAgICAiQWxpZ25tZW50OiI6ICLYqtix2KfYsiDYqNmG2K/bjCIsCisgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAi2YXYqtmGINis2KfbjNqv2LLbjNmGIiwKKyAgICAgICAgIkJhc2VsaW5lIjogItin2KjYqtiv2KfbjCDYrti3IiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIti22K7Yp9mF2Kog2YTYqNmHIiwKKyAgICAgICAgIkJvdHRvbSI6ICLZvtin24zbjNmGIiwKKyAgICAgICAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIlVSTCDYqti12YjbjNixINix2Kcg2KfbjNmG2KzYpyDZiNin2LHYryDaqdmG24zYryIsCisgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICLYqNix2KfbjCDZhdix2YjYsdqv2LHZh9in24zbjCDaqdmHINin2LIg2KrYtdin2YjbjNixINm+2LTYqtuM2KjYp9mG24wg2YbZhduMINqp2YbZhtivIiwKKyAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICLZvtix2qnZhtmG2K/ZhyDYp9mB2YLbjCIsCisgICAgICAgICJIb3Jpem9udGFsOiI6ICLYp9mB2YLbjCIsCisgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICLZvtuM2LQg2YbZhdin24zYtCDYqti12YjbjNixIiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiVVJMINiq2LXZiNuM2LEiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogItin2YHYstmI2K/ZhiDYqti12YjbjNixIiwKKyAgICAgICAgIkxheW91dCI6ICLZhNin24zZhyIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogItio2LHYp9uMINio2K/ZiNmGINmE2KjZhyDYrtin2YTbjCDYsdmH2Kcg2qnZhiIsCisgICAgICAgICJMZWZ0IjogItqG2b4iLAorICAgICAgICAiTWlkZGxlIjogItmI2LPYtyIsCisgICAgICAgICJOb3Qgc2V0IjogItiq2YbYuNuM2YUg2YbYtNiv2YciLAorICAgICAgICAiT0siOiAi2KjZhNmHIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAi2YXZiNmC2LnbjNiqINuM2KfYqNuMINiq2LXZiNuM2LEiLAorICAgICAgICAiUHJldmlldyI6ICLZvtuM2LQg2YbZhdin24zYtCIsCisgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAi2b7bjNi0INmG2YXYp9uM2LQg2KrYtdmI24zYsSDYr9ixINm+2YbYrNix2Ycg2KfbjCDYrNiv24zYryIsCisgICAgICAgICJSaWdodCI6ICLYsdin2LPYqiIsCisgICAgICAgICJTcGFjaW5nIjogItmB2KfYtdmE2Ycg2q/YsNin2LHbjCIsCisgICAgICAgICJUZXh0dG9wIjogItio2KfZhNin24wg2YXYqtmGIiwKKyAgICAgICAgIlRvcCI6ICLYqNin2YTYpyIsCisgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogItm+2LHaqdmG2YbYr9mHINi52YXZiNiv24wiLAorICAgICAgICAiVmVydGljYWw6IjogIti52YXZiNiv24wiLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICLYtNmF2Kcg2KjYp9uM2K8gVVJMINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8iCisgICAgfSwKKyAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiLAorICAgICAgICAiTGVmdCI6ICLahtm+IiwKKyAgICAgICAgIk9LIjogItio2YTZhyIsCisgICAgICAgICJSaWdodCI6ICLYsdin2LPYqiIsCisgICAgICAgICJXaWR0aDoiOiAi2LfZiNmEIgorICAgIH0sCisgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAi2KfZhti12LHYp9mBIgorICAgIH0sCisgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICJBYnNib3R0b20iOiAi2K/ZgtuM2YLYpyDZvtin24zbjNmGIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICLYr9mC24zZgtinINmI2LPYtyIsCisgICAgICAgICJBbGlnbm1lbnQ6IjogItiq2LHYp9iyINio2YbYr9uMIiwKKyAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICLZhdiq2YYg2KzYp9uM2q/YstuM2YYiLAorICAgICAgICAiQmFzZWxpbmUiOiAi2KfYqNiq2K/Yp9uMINiu2LciLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAi2LbYrtin2YXYqiDZhNio2YciLAorICAgICAgICAiQm90dG9tIjogItm+2KfbjNuM2YYiLAorICAgICAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIsCisgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiVVJMINiq2LXZiNuM2LEg2LHYpyDYp9uM2YbYrNinINmI2KfYsdivINqp2YbbjNivIiwKKyAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogItio2LHYp9uMINmF2LHZiNix2q/YsdmH2KfbjNuMINqp2Ycg2KfYsiDYqti12KfZiNuM2LEg2b7YtNiq24zYqNin2YbbjCDZhtmF24wg2qnZhtmG2K8iLAorICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogItm+2LHaqdmG2YbYr9mHINin2YHZgtuMIiwKKyAgICAgICAgIkhvcml6b250YWw6IjogItin2YHZgtuMIiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogItm+24zYtCDZhtmF2KfbjNi0INiq2LXZiNuM2LEiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJVUkwg2KrYtdmI24zYsSIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAi2KfZgdiy2YjYr9mGINiq2LXZiNuM2LEiLAorICAgICAgICAiTGF5b3V0IjogItmE2KfbjNmHIiwKKyAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAi2KjYsdin24wg2KjYr9mI2YYg2YTYqNmHINiu2KfZhNuMINix2YfYpyDaqdmGIiwKKyAgICAgICAgIkxlZnQiOiAi2obZviIsCisgICAgICAgICJNaWRkbGUiOiAi2YjYs9i3IiwKKyAgICAgICAgIk5vdCBzZXQiOiAi2KrZhti424zZhSDZhti02K/ZhyIsCisgICAgICAgICJPSyI6ICLYqNmE2YciLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICLZhdmI2YLYuduM2Kog24zYp9io24wg2KrYtdmI24zYsSIsCisgICAgICAgICJQcmV2aWV3IjogItm+24zYtCDZhtmF2KfbjNi0IiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICLZvtuM2LQg2YbZhdin24zYtCDYqti12YjbjNixINiv2LEg2b7Zhtis2LHZhyDYp9uMINis2K/bjNivIiwKKyAgICAgICAgIlJpZ2h0IjogItix2KfYs9iqIiwKKyAgICAgICAgIlNwYWNpbmciOiAi2YHYp9i12YTZhyDar9iw2KfYsduMIiwKKyAgICAgICAgIlRleHR0b3AiOiAi2KjYp9mE2KfbjCDZhdiq2YYiLAorICAgICAgICAiVG9wIjogItio2KfZhNinIiwKKyAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAi2b7Ysdqp2YbZhtiv2Ycg2LnZhdmI2K/bjCIsCisgICAgICAgICJWZXJ0aWNhbDoiOiAi2LnZhdmI2K/bjCIsCisgICAgICAgICJXaWR0aDoiOiAi2LfZiNmEIgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAi2KfZhti12LHYp9mBIgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIKKyAgICB9LAorICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICLYr9mC24zZgtinINm+2KfbjNuM2YYiLAorICAgICAgICAiQWJzbWlkZGxlIjogItiv2YLbjNmC2Kcg2YjYs9i3IiwKKyAgICAgICAgIkFsaWdubWVudDoiOiAi2KrYsdin2LIg2KjZhtiv24wiLAorICAgICAgICAiQmFzZWxpbmUiOiAi2KfYqNiq2K/Yp9uMINiu2LciLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAi2LbYrtin2YXYqiDZhNio2YciLAorICAgICAgICAiQm90dG9tIjogItm+2KfbjNuM2YYiLAorICAgICAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIsCisgICAgICAgICJDZWxsIHBhZGRpbmc6IjogItm+2LEg2qnZhtmG2K/ZhyDYs9mE2YjZhCIsCisgICAgICAgICJDZWxsIHNwYWNpbmc6IjogItmB2KfYtdmE2Ycg2LPZhNmI2YQg2YfYpyIsCisgICAgICAgICJDb2xzOiI6ICLYs9iq2YjZhiDZh9inIiwKKyAgICAgICAgIkVtIjogIkVtIiwKKyAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAi2LPYqtmI2YYg2YfYp9uMINi32YjZhCDYq9in2KjYqiIsCisgICAgICAgICJJbnNlcnQgVGFibGUiOiAi2KfZgdiy2YjYr9mGINis2K/ZiNmEIiwKKyAgICAgICAgIkxheW91dCI6ICLZhNin24zZhyIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogItio2LHYp9uMINio2K/ZiNmGINmE2KjZhyDYrtin2YTbjCDYsdmH2Kcg2qnZhiIsCisgICAgICAgICJMZWZ0IjogItqG2b4iLAorICAgICAgICAiTWlkZGxlIjogItmI2LPYtyIsCisgICAgICAgICJOb3Qgc2V0IjogItiq2YbYuNuM2YUg2YbYtNiv2YciLAorICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAi2KrYudiv2KfYryDYs9iq2YjZhiDZh9inIiwKKyAgICAgICAgIk51bWJlciBvZiByb3dzIjogItiq2LnYr9in2K8g2LHYr9uM2YEg2YfYpyIsCisgICAgICAgICJPSyI6ICLYqNmE2YciLAorICAgICAgICAiUGVyY2VudCI6ICLYr9ix2LXYryIsCisgICAgICAgICJQaXhlbHMiOiAi2b7bjNqp2LPZhCDZh9inIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAi2YXZiNmC2LnbjNiqINuM2KfYqNuMINin24zZhiDYrNiv2YjZhCIsCisgICAgICAgICJSaWdodCI6ICLYsdin2LPYqiIsCisgICAgICAgICJSb3dzOiI6ICLYsdiv24zZgSDZh9inIiwKKyAgICAgICAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAi2YHYp9i12YTZhyDYqNuM2YYg2LPZhNmI2YQg2YfYp9uMINmH2YXYrNmI2KfYsSIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogItmB2KfYtdmE2Ycg2KjbjNmGINmF2K3YqtmI2Kcg2Ygg2YTYqNmHINiv2LEg2LPZhNmI2YQiLAorICAgICAgICAiU3BhY2luZyI6ICLZgdin2LXZhNmHINqv2LDYp9ix24wiLAorICAgICAgICAiVGV4dHRvcCI6ICLYqNin2YTYp9uMINmF2KrZhiIsCisgICAgICAgICJUb3AiOiAi2KjYp9mE2KciLAorICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIti32YjZhCDYrNiv2YjZhCIsCisgICAgICAgICJXaWR0aCB1bml0IjogItmI2KfYrdivINi32YjZhCIsCisgICAgICAgICJXaWR0aDoiOiAi2LfZiNmEIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAi2KjYp9uM2K8g2KrYudiv2KfYryDYs9iq2YjZhiDZh9inINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8iLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICLYqNin24zYryDYqti52K/Yp9ivINix2K/bjNmBINmH2Kcg2LHYpyDZiNin2LHYryDaqdmG24zYryIKKyAgICB9LAorICAgICJMaW5rZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAi2KfZhti12LHYp9mBIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICLYp9mB2LLZiNiv2YYgLyDZiNuM2LHYp9uM2LQg2YTbjNmG2qkiLAorICAgICAgICAiT0siOiAi2KjZhNmHIiwKKyAgICAgICAgIlRhcmdldDoiOiAi2YfYr9mBIiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIKKyAgICB9LAorICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIsCisgICAgICAgICJJbWFnZSBQcmV2aWV3IjogItm+24zYtCDZhtmF2KfbjNi0INiq2LXZiNuM2LEiLAorICAgICAgICAiT0siOiAi2KjZhNmHIiwKKyAgICAgICAgIlByZXZpZXciOiAi2b7bjNi0INmG2YXYp9uM2LQiLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogItm+24zYtCDZhtmF2KfbjNi0INiq2LXZiNuM2LEg2K/YsSDZvtmG2KzYsdmHINin24wg2KzYr9uM2K8iCisgICAgfSwKKyAgICAiT3BlcmEiOiB7CisgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogItiv2qnZhdmHINqG2LPYqNin2YbYr9mGINiv2LEg2YXYsdmI2LHar9ix2YfYp9uMINiz2LHbjCBNb3ppbGxhINqp2KfYsSDZhtmF24wg2qnZhtivICjYqNmHINiv2YTYp9uM2YQg2YHZhtuMINin2YXZhtuM2KrbjCku2KjYsdin24wg2obYs9io2KfZhtiv2YYg2YXYs9iq2YLbjNmFINiMINiv2qnZhdmHIENUUkwtViDYsdinINiv2LEg2LXZgdit2Ycg2qnZhNuM2K8g2KjYstmG24zYry4iCisgICAgfSwKKyAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiCisgICAgfSwKKyAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIsCisgICAgICAgICJPSyI6ICLYqNmE2YciCisgICAgfSwKKyAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAi2KfZhti12LHYp9mBIiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICLYp9mB2LLZiNiv2YYg2KrYtdmI24zYsSIKKyAgICB9LAorICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiCisgICAgfSwKKyAgICAiU2V0SWQiOiB7CisgICAgICAgICJDYW5jZWwiOiAi2KfZhti12LHYp9mBIiwKKyAgICAgICAgIk9LIjogItio2YTZhyIKKyAgICB9LAorICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICJPSyI6ICLYqNmE2YciCisgICAgfSwKKyAgICAiU3BlbGxDaGVja2VyIjogeworICAgICAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIsCisgICAgICAgICJPSyI6ICLYqNmE2YciCisgICAgfSwKKyAgICAiU3VwZXJDbGVhbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiLAorICAgICAgICAiT0siOiAi2KjZhNmHIgorICAgIH0sCisgICAgIlRhYmxlT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiLAorICAgICAgICAiT0siOiAi2KjZhNmHIiwKKyAgICAgICAgIlJvd3MiOiAi2LHYr9uM2YEg2YfYpyIsCisgICAgICAgICJTcGFjaW5nIjogItmB2KfYtdmE2Ycg2q/YsNin2LHbjCIKKyAgICB9LAorICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiCisgICAgfSwKKyAgICAiVW5Gb3JtYXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAi2KfZhti12LHYp9mBIiwKKyAgICAgICAgIk9LIjogItio2YTZhyIKKyAgICB9LAorICAgICJYaW5oYSI6IHsKKyAgICAgICAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiJiM4MjEyOyDZgtin2YTYqCAmIzgyMTI7IiwKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogItiv2LHYqNin2LHZhyDYp9uM2YYg2YjbjNix2KfbjNi0INqv2LEiLAorICAgICAgICAiQWRkcmVzcyI6ICLYotiv2LHYsyIsCisgICAgICAgICJCYWNrZ3JvdW5kIENvbG9yIjogItix2YbaryDZvtizINiy2YXbjNmG2YciLAorICAgICAgICAiQm9sZCI6ICLYttiu24zZhSIsCisgICAgICAgICJCdWxsZXRlZCBMaXN0IjogItmB2YfYsdiz2Kog2q/ZhNmI2YTZhyDYp9uMIiwKKyAgICAgICAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICLYqtmF24zYsiDaqdix2K/ZhiDZhdit2KrZiNin24wg2obYs9io2KfZhtiv2Ycg2LTYr9mHINin2LIgV29yZCIsCisgICAgICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICLZvtin2qkg2qnYsdiv2YYg2YXYqtmGINin2LIg2YXYtNiu2LXYp9iqINmB2YjZhtiqIiwKKyAgICAgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAi2b7Yp9qpINqp2LHYr9mGINmF2KrZhiDYp9iyINio2LHahtiz2Kgg2YfYp9uMIE1TT2ZmaWNlIiwKKyAgICAgICAgIkNsb3NlIjogItio2LPYqtmGIiwKKyAgICAgICAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAi2LPYp9iu2KrZhiDYtNuM2KEiLAorICAgICAgICAiQ29weSBzZWxlY3Rpb24iOiAi2qnZvtuMINin2YbYqtiu2KfYqCDYtNiv2YciLAorICAgICAgICAiQ3JlYXRlIFRvb2xiYXIiOiAi2LPYp9iu2Kog2YbZiNin2LEg2KfYqNiy2KfYsSIsCisgICAgICAgICJDdXJyZW50IHN0eWxlIjogIti024zZiNmHINqp2YbZiNmG24wiLAorICAgICAgICAiQ3V0IHNlbGVjdGlvbiI6ICLYqNix24zYr9mGINin2YbYqtiu2KfYqCDYtNiv2YciLAorICAgICAgICAiRGVjcmVhc2UgSW5kZW50IjogItqp2KfZh9i0INiz2LEg2K7YtyIsCisgICAgICAgICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICLYrNmH2Kog2KfYsiDahtm+INio2Ycg2LHYp9iz2KoiLAorICAgICAgICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAi2KzZh9iqINin2LIg2LHYp9iz2Kog2KjZhyDahtm+IiwKKyAgICAgICAgIkVOVEVSIjogIkVOVFJFRSIsCisgICAgICAgICJFZGl0b3IgSGVscCI6ICLYsdin2YfZhtmF2KfbjCDZiNuM2LHYp9uM2LTar9ixIiwKKyAgICAgICAgIkZvbnQgQ29sb3IiOiAi2LHZhtqvINmB2YTZhSIsCisgICAgICAgICJGb3JtYXR0ZWQiOiAi2YLYp9mE2Kgg2KjZhtiv24wg2LTYr9mHIiwKKyAgICAgICAgIkhlYWRpbmcgMSI6ICLYqtuM2KrYsSAxIiwKKyAgICAgICAgIkhlYWRpbmcgMiI6ICLYqtuM2KrYsSAyIiwKKyAgICAgICAgIkhlYWRpbmcgMyI6ICLYqtuM2KrYsSAzIiwKKyAgICAgICAgIkhlYWRpbmcgNCI6ICLYqtuM2KrYsSA0IiwKKyAgICAgICAgIkhlYWRpbmcgNSI6ICLYqtuM2KrYsSA1IiwKKyAgICAgICAgIkhlYWRpbmcgNiI6ICLYqtuM2KrYsSA2IiwKKyAgICAgICAgIkhlYWRpbmdzIjogIti52YbZiNin2YYg2q/YsNin2LHbjCIsCisgICAgICAgICJIZWxwIHVzaW5nIGVkaXRvciI6ICLYsdin2YfZhtmF2KfbjCDYp9iz2KrZgdin2K/ZhyDZiNuM2LHYp9uM2LQg2q/YsSIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAi2K7YtyDYp9mB2YLbjCIsCisgICAgICAgICJJbmNyZWFzZSBJbmRlbnQiOiAi2KfZgdiy2KfbjNi0INiz2LEg2K7YtyIsCisgICAgICAgICJJbml0IGVkaXRvciBzaXplIjogItmF2YLYr9in2LEg2K/Zh9uMINin2YbYr9in2LLZhyDZiNuM2LHYp9uM2LTar9ixIiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICLYp9mB2LLZiNiv2YYg2KzYr9mI2YQiLAorICAgICAgICAiSW5zZXJ0IFdlYiBMaW5rIjogItin2YHYstmI2K/ZhiDZhNuM2YbaqSDZiNioIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAi2KfZgdiy2YjYr9mGINuM2Kcg2YjbjNix2KfbjNi0INiq2LXZiNuM2LEiLAorICAgICAgICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICLYp9mB2LLZiNiv2YYv2KzYp9mG2YjbjNiz24wiLAorICAgICAgICAiSXRhbGljIjogItmF2YjYsdioIiwKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogItiq2LHYp9iyINiv2LEg2YjYs9i3IiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICLYqtix2KfYsiDYp9iyINqG2b4g2Ygg2LHYp9iz2KoiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogItiq2LHYp9iyINin2LIg2obZviIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogItiq2LHYp9iyINiv2LEg2LHYp9iz2KoiLAorICAgICAgICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogItmF24zYp9mG2KjYsdmH2KfbjCDYtdmB2K3ZhyDaqdmE24zYryIsCisgICAgICAgICJOb3JtYWwiOiAi2YXYudmF2YjZhNuMIiwKKyAgICAgICAgIk9yZGVyZWQgTGlzdCI6ICLZgdmH2LHYs9iqINmF2LHYqtioIiwKKyAgICAgICAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogItqG2LPYqNin2YbYr9mGINin2LIg2KrYrtiq2Ycg2qnYp9ixIiwKKyAgICAgICAgIlBhdGgiOiAi2YXYs9uM2LEiLAorICAgICAgICAiUHJpbnQgZG9jdW1lbnQiOiAi2obYp9m+INiz2YbYryIsCisgICAgICAgICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLYp9mG2KzYp9mFINmF2KzYr9ivINii2K7YsduM2YYg2LnZhdmEIiwKKyAgICAgICAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIjogItir2KjYqiDZvtmE2Kfar9uM2YYgJHBsdWdpbiIsCisgICAgICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICLYrdiw2YEg2YHYsdmF2Kog2KjZhtiv24wiLAorICAgICAgICAiU0hJRlQtRU5URVIiOiAiU0hJRlQrRU5UUkVFIiwKKyAgICAgICAgIlNhdmUgYXMiOiAi2LDYrtuM2LHZhyDZhdin2YbZhtivLi4uIiwKKyAgICAgICAgIlNlbGVjdCBhbGwiOiAi2KfZhtiq2K7Yp9ioINmH2YXZhyIsCisgICAgICAgICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICLYqti624zbjNixINmC2KfZhNioINio2Ycg2b7Yp9ix2Kfar9ix2KfZgSIsCisgICAgICAgICJTcGxpdCBCbG9jayI6ICLYqNmE2KfaqSDYrNiv2KfYs9in2LLbjCIsCisgICAgICAgICJTdHJpa2V0aHJvdWdoIjogItix2Ygg2K7YtyIsCisgICAgICAgICJTdWJzY3JpcHQiOiAi2LLbjNix2YjZhtivIiwKKyAgICAgICAgIlN1cGVyc2NyaXB0IjogItio2KfZhNin2YjZhtivIiwKKyAgICAgICAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICLZiNuM2LHYp9uM2LTar9ixINin2LPYqtmB2KfYr9mHINin2LIg2qnZhNuM2K8g2YfYp9uMINqv2LHZiNmH24wg2LLbjNixINix2Kcg2YXYs9uM2LEg2YXbjCDYs9in2LLYryA6IiwKKyAgICAgICAgIlRvZ2dsZSBCb3JkZXJzIjogItmB2LnYp9mEL9i624zYsSDZgdi52KfZhCDaqdix2K/ZhiDZhNio2Ycg2YfYpyIsCisgICAgICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAi2YXYtNin2YfYr9mHINuM2Kcg2LnYr9mFINmF2LTYp9mH2K/ZhyDZhdiq2YYg2K/YsSDZgtin2YTYqCBIVE1MIiwKKyAgICAgICAgIlVuZGVybGluZSI6ICLYstuM2LEg2K7YtyIsCisgICAgICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLYqNix2q/Ysdiv2KfZhtiv2YYg2KLYrtix24zZhiDYudmF2YQiLAorICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICLYotuM2Kcg2KrZhdin24zZhCDYr9in2LHbjNivINix2YbaryDZgtmE2YUg2LHYpyDZvtin2qkg2qnZhtuM2K/YnyIsCisgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICLYotuM2Kcg2KrZhdin24zZhCDYr9in2LHbjNivINin2YbYr9in2LLZhyDZgtmE2YUg2LHYpyDZvtin2qkg2qnZhtuM2K8iLAorICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogItii24zYpyDYqtmF2KfbjNmEINiv2KfYsduM2K8g2LjYp9mH2LEg2YHZhNmFINix2Kcg2b7Yp9qpINqp2YbbjNiv2J8iLAorICAgICAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogItiv2LEg2YXYryDZhdiq2YbbjCDZh9iz2KrbjNivLiAg2KfYsiDYr9qp2YXZhyBbPD5dINin2LPYqtmB2KfYr9mHINmG2YXYp9uM24zYryDYqtinINio2Ycg2YXYryBXWVNJV1lHINio2LHar9ix2K/bjNivLiIsCisgICAgICAgICJpbnNlcnQgbGluZWJyZWFrIjogItin2YHYstmI2K/ZhiDYrNiv2Kcg2qnZhtmG2K/ZhyDYrti3IiwKKyAgICAgICAgIm5ldyBwYXJhZ3JhcGgiOiAi2b7Yp9ix2Kfar9ix2KfZgSDYrNiv24zYryIKKyAgICB9LAorICAgICJfX05FV19UUkFOU0xBVElPTlNfXyI6IHsKKyAgICAgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgICAgICJBYmJyZXZpYXRpb24iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiIiwKKyAgICAgICAgICAgICJFeHBhbnNpb246IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJDb3VudGVyIjogeworICAgICAgICAgICAgIi4uLiBpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIkNoYXJzIjogIiIsCisgICAgICAgICAgICAiSFRNTCI6ICIiLAorICAgICAgICAgICAgIldvcmRzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJhY3Rlck1hcCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgc3BlY2lhbCBjaGFyYWN0ZXIiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICAgICAiQ2xpY2sgYSBjb2xvci4uLiI6ICIiLAorICAgICAgICAgICAgIkNvbG9yOiAiOiAiIiwKKyAgICAgICAgICAgICJTYW1wbGUiOiAiIiwKKyAgICAgICAgICAgICJXZWIgU2FmZTogIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAgICAgIl9EZWxldGUgUm93IjogIiIsCisgICAgICAgICAgICAiX0ltYWdlIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJfTW9kaWZ5IExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJfUmVtb3ZlIExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJfVGFibGUgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIkNfZWxsIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJDaGVjX2sgTGluay4uLiI6ICIiLAorICAgICAgICAgICAgIkNvcHkiOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgYSBsaW5rIjogIiIsCisgICAgICAgICAgICAiQ3VycmVudCBVUkwgaXMiOiAiIiwKKyAgICAgICAgICAgICJDdXQiOiAiIiwKKyAgICAgICAgICAgICJEZV9sZXRlIENvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBDZWxsIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCByb3ciOiAiIiwKKyAgICAgICAgICAgICJIb3cgZGlkIHlvdSBnZXQgaGVyZT8gKFBsZWFzZSByZXBvcnQhKSI6ICIiLAorICAgICAgICAgICAgIklfbnNlcnQgUm93IEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluX3NlcnQgUm93IEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IF9Db2x1bW4gQmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBhZnRlciB0aGUgY3VycmVudCBub2RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGJlZm9yZSB0aGUgY3VycmVudCBub2RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENfb2x1bW4gQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDZWxsIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkxpbmsgcG9pbnRzIHRvOiI6ICIiLAorICAgICAgICAgICAgIk1ha2UgbGluX2suLi4iOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICIiLAorICAgICAgICAgICAgIk9wZW5zIHRoaXMgbGluayBpbiBhIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJQYXN0ZSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgZWxlbWVudDoiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHVubGluayB0aGlzIGVsZW1lbnQuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHRoZSAkZWxlbSBFbGVtZW50Li4uIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHRoaXMgbm9kZSBmcm9tIHRoZSBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlJvX3cgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIGltYWdlIHByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgVGFibGUgQ2VsbCBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgVGFibGUgUm93IFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiVW5saW5rIHRoZSBjdXJyZW50IGVsZW1lbnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ3JlYXRlTGluayI6IHsKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRGVmaW5pdGlvbkxpc3QiOiB7CisgICAgICAgICAgICAiZGVmaW5pdGlvbiBkZXNjcmlwdGlvbiI6ICIiLAorICAgICAgICAgICAgImRlZmluaXRpb24gbGlzdCI6ICIiLAorICAgICAgICAgICAgImRlZmluaXRpb24gdGVybSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEaWFsb2dzIjogeworICAgICAgICAgICAgIlNvbWUgVGV4dCBIZXJlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkR5bmFtaWNDU1MiOiB7CisgICAgICAgICAgICAiQ2hvb3NlIHN0eWxlc2hlZXQiOiAiIiwKKyAgICAgICAgICAgICJEZWZhdWx0IjogIiIsCisgICAgICAgICAgICAiVW5kZWZpbmVkIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVkaXRUYWciOiB7CisgICAgICAgICAgICAiRWRpdCBIVE1MIGZvciBzZWxlY3RlZCB0ZXh0IjogIiIsCisgICAgICAgICAgICAiRWRpdCBUYWcgQnkgUGVnIjogIiIsCisgICAgICAgICAgICAiVGFnIEVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgICAgICIhPSI6ICIiLAorICAgICAgICAgICAgIiFpbiI6ICIiLAorICAgICAgICAgICAgIiZndDstIjogIiIsCisgICAgICAgICAgICAiJmd0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZsdDt4Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgIWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAuYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDBgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAzYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDRgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA2YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDdgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA5YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYGVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyZuYnNwO2AxYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgK3s6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC06XFwgYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Atezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgQ2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgY29zYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BsbmAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgcGlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BzaW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRhbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGltZXNgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJnF1b3Q7dGV4dCZxdW90OyI6ICIiLAorICAgICAgICAgICAgIicrZm9ybXVsYSsnIjogIiIsCisgICAgICAgICAgICAiKChuKSwoaykpIjogIiIsCisgICAgICAgICAgICAiKHgrMSkvKHgtMSkiOiAiIiwKKyAgICAgICAgICAgICIqIjogIiIsCisgICAgICAgICAgICAiKioiOiAiIiwKKyAgICAgICAgICAgICIrLSI6ICIiLAorICAgICAgICAgICAgIi0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiLSZsdDsiOiAiIiwKKyAgICAgICAgICAgICItOiI6ICIiLAorICAgICAgICAgICAgIi09IjogIiIsCisgICAgICAgICAgICAiLy8iOiAiIiwKKyAgICAgICAgICAgICIvXyI6ICIiLAorICAgICAgICAgICAgIjouIjogIiIsCisgICAgICAgICAgICAiPSZndDsiOiAiIiwKKyAgICAgICAgICAgICJAIjogIiIsCisgICAgICAgICAgICAiW1thLGJdLFtjLGRdXSI6ICIiLAorICAgICAgICAgICAgIlxcXFwiOiAiIiwKKyAgICAgICAgICAgICJcXG5DbGljayBpbiB0aGUgYm94IHRvIHVzZSB5b3VyIGtleWJvYXJkIG9yIHVzZSB0aGUgYnV0dG9uc1xcbiI6ICIiLAorICAgICAgICAgICAgIl5eIjogIiIsCisgICAgICAgICAgICAiXl5eIjogIiIsCisgICAgICAgICAgICAiX198IjogIiIsCisgICAgICAgICAgICAiX3xfIjogIiIsCisgICAgICAgICAgICAiYCE9YCI6ICIiLAorICAgICAgICAgICAgImAhaW5gIjogIiIsCisgICAgICAgICAgICAiYCZhbmQ7YCI6ICIiLAorICAgICAgICAgICAgImAmY2FwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmN1cDtgIjogIiIsCisgICAgICAgICAgICAiYCZndDstYCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0O3gmZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmb3I7YCI6ICIiLAorICAgICAgICAgICAgImAmcXVvdDt0ZXh0JnF1b3Q7YCI6ICIiLAorICAgICAgICAgICAgImAoKG4pLChrKSlgIjogIiIsCisgICAgICAgICAgICAiYCh4KzEpLyh4LTEpYCI6ICIiLAorICAgICAgICAgICAgImAqKmAiOiAiIiwKKyAgICAgICAgICAgICJgKmAiOiAiIiwKKyAgICAgICAgICAgICJgKy1gIjogIiIsCisgICAgICAgICAgICAiYC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAtJmx0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLTpgIjogIiIsCisgICAgICAgICAgICAiYC09YCI6ICIiLAorICAgICAgICAgICAgImAvL2AiOiAiIiwKKyAgICAgICAgICAgICJgL19gIjogIiIsCisgICAgICAgICAgICAiYDouYCI6ICIiLAorICAgICAgICAgICAgImA9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgQGAiOiAiIiwKKyAgICAgICAgICAgICJgW1thLGJdLFtjLGRdXWAiOiAiIiwKKyAgICAgICAgICAgICJgXFxcXGAiOiAiIiwKKyAgICAgICAgICAgICJgX198YCI6ICIiLAorICAgICAgICAgICAgImBffF9gIjogIiIsCisgICAgICAgICAgICAiYEFBYCI6ICIiLAorICAgICAgICAgICAgImBhbGVwaGAiOiAiIiwKKyAgICAgICAgICAgICJgYWxwaGFgIjogIiIsCisgICAgICAgICAgICAiYGFuZGAiOiAiIiwKKyAgICAgICAgICAgICJgYmFyYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiZXRhYCI6ICIiLAorICAgICAgICAgICAgImBDQ2AiOiAiIiwKKyAgICAgICAgICAgICJgY2NhYCI6ICIiLAorICAgICAgICAgICAgImBjaGlgIjogIiIsCisgICAgICAgICAgICAiYGRhcnJgIjogIiIsCisgICAgICAgICAgICAiYGRkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkZWxgIjogIiIsCisgICAgICAgICAgICAiYERlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGlhbW9uZGAiOiAiIiwKKyAgICAgICAgICAgICJgZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZHkvZHhgIjogIiIsCisgICAgICAgICAgICAiYEVFYCI6ICIiLAorICAgICAgICAgICAgImBlcHNpYCI6ICIiLAorICAgICAgICAgICAgImBldGFgIjogIiIsCisgICAgICAgICAgICAiYGZyYWAiOiAiIiwKKyAgICAgICAgICAgICJgR2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBncmFkYCI6ICIiLAorICAgICAgICAgICAgImBoYXJyYCI6ICIiLAorICAgICAgICAgICAgImBoQXJyYCI6ICIiLAorICAgICAgICAgICAgImBoYXRhYCI6ICIiLAorICAgICAgICAgICAgImBpZmAiOiAiIiwKKyAgICAgICAgICAgICJgaW5gIjogIiIsCisgICAgICAgICAgICAiYGludGAiOiAiIiwKKyAgICAgICAgICAgICJgaW90YWAiOiAiIiwKKyAgICAgICAgICAgICJga2FwcGFgIjogIiIsCisgICAgICAgICAgICAiYGxhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgTGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBsQXJyYCI6ICIiLAorICAgICAgICAgICAgImBsYXJyYCI6ICIiLAorICAgICAgICAgICAgImBsaW1fKHgtJmd0O29vKWAiOiAiIiwKKyAgICAgICAgICAgICJgbG9nYCI6ICIiLAorICAgICAgICAgICAgImBtdWAiOiAiIiwKKyAgICAgICAgICAgICJgTk5gIjogIiIsCisgICAgICAgICAgICAiYG5uYCI6ICIiLAorICAgICAgICAgICAgImBub3RgIjogIiIsCisgICAgICAgICAgICAiYG51YCI6ICIiLAorICAgICAgICAgICAgImBvK2AiOiAiIiwKKyAgICAgICAgICAgICJgby5gIjogIiIsCisgICAgICAgICAgICAiYE8vYCI6ICIiLAorICAgICAgICAgICAgImBvaW50YCI6ICIiLAorICAgICAgICAgICAgImBvbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgT21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYG9vYCI6ICIiLAorICAgICAgICAgICAgImBvcmAiOiAiIiwKKyAgICAgICAgICAgICJgb3hgIjogIiIsCisgICAgICAgICAgICAiYFBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgcGhpYCI6ICIiLAorICAgICAgICAgICAgImBQaWAiOiAiIiwKKyAgICAgICAgICAgICJgcGlgIjogIiIsCisgICAgICAgICAgICAiYHByb2RgIjogIiIsCisgICAgICAgICAgICAiYHByb3BgIjogIiIsCisgICAgICAgICAgICAiYFBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgcHNpYCI6ICIiLAorICAgICAgICAgICAgImBRUWAiOiAiIiwKKyAgICAgICAgICAgICJgcXVhZGAiOiAiIiwKKyAgICAgICAgICAgICJgckFycmAiOiAiIiwKKyAgICAgICAgICAgICJgcmhvYCI6ICIiLAorICAgICAgICAgICAgImByb290KG4pKHgpYCI6ICIiLAorICAgICAgICAgICAgImBSUmAiOiAiIiwKKyAgICAgICAgICAgICJgc2ZhYCI6ICIiLAorICAgICAgICAgICAgImBzaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgU2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYHNxcnQoeClgIjogIiIsCisgICAgICAgICAgICAiYHNxdWFyZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3RhY2tyZWwoLSZndDspKCspYCI6ICIiLAorICAgICAgICAgICAgImBzdWJgIjogIiIsCisgICAgICAgICAgICAiYHN1YmVgIjogIiIsCisgICAgICAgICAgICAiYHN1bWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwYCI6ICIiLAorICAgICAgICAgICAgImBzdXBlYCI6ICIiLAorICAgICAgICAgICAgImB0YXVgIjogIiIsCisgICAgICAgICAgICAiYFRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImB0aGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgVFRgIjogIiIsCisgICAgICAgICAgICAiYHR0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdWFycmAiOiAiIiwKKyAgICAgICAgICAgICJgdWxhYCI6ICIiLAorICAgICAgICAgICAgImB1cHNpbG9uYCI6ICIiLAorICAgICAgICAgICAgImB1dWAiOiAiIiwKKyAgICAgICAgICAgICJgdmVjYWAiOiAiIiwKKyAgICAgICAgICAgICJgdnZgIjogIiIsCisgICAgICAgICAgICAiYHhfKG1uKWAiOiAiIiwKKyAgICAgICAgICAgICJgWGlgIjogIiIsCisgICAgICAgICAgICAiYHhpYCI6ICIiLAorICAgICAgICAgICAgImB4eGAiOiAiIiwKKyAgICAgICAgICAgICJgemV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgWlpgIjogIiIsCisgICAgICAgICAgICAiYHwtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgfC0tYCI6ICIiLAorICAgICAgICAgICAgImB8PT1gIjogIiIsCisgICAgICAgICAgICAiYHxfX2AiOiAiIiwKKyAgICAgICAgICAgICJgfH5gIjogIiIsCisgICAgICAgICAgICAiYH49YCI6ICIiLAorICAgICAgICAgICAgImB+fGAiOiAiIiwKKyAgICAgICAgICAgICJgfn5gIjogIiIsCisgICAgICAgICAgICAiQUEiOiAiIiwKKyAgICAgICAgICAgICJhbGVwaCI6ICIiLAorICAgICAgICAgICAgImFscGhhIjogIiIsCisgICAgICAgICAgICAiYW5kIjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoIEZvcm11bGEgSW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGhNTCBFeGFtcGxlIjogIiIsCisgICAgICAgICAgICAiYmFyYSI6ICIiLAorICAgICAgICAgICAgIkJhc2VkIG9uIEFTQ0lJTWF0aE1MIGJ5IjogIiIsCisgICAgICAgICAgICAiYmJhIjogIiIsCisgICAgICAgICAgICAiYmJiYSI6ICIiLAorICAgICAgICAgICAgImJldGEiOiAiIiwKKyAgICAgICAgICAgICJDQyI6ICIiLAorICAgICAgICAgICAgImNjYSI6ICIiLAorICAgICAgICAgICAgImNoaSI6ICIiLAorICAgICAgICAgICAgImRhcnIiOiAiIiwKKyAgICAgICAgICAgICJkZG90YSI6ICIiLAorICAgICAgICAgICAgImRlbCI6ICIiLAorICAgICAgICAgICAgIkRlbHRhIjogIiIsCisgICAgICAgICAgICAiZGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJkaWFtb25kIjogIiIsCisgICAgICAgICAgICAiZG90YSI6ICIiLAorICAgICAgICAgICAgImR5L2R4IjogIiIsCisgICAgICAgICAgICAiRUUiOiAiIiwKKyAgICAgICAgICAgICJlcHNpIjogIiIsCisgICAgICAgICAgICAiZXRhIjogIiIsCisgICAgICAgICAgICAiRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQXNjaWlNYXRoTUwgdmlzaXQgdGhpcyBwYWdlOiI6ICIiLAorICAgICAgICAgICAgIkZvcm11bGEgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiZnJhIjogIiIsCisgICAgICAgICAgICAiZ2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJHYW1tYSI6ICIiLAorICAgICAgICAgICAgImdyYWQiOiAiIiwKKyAgICAgICAgICAgICJoQXJyIjogIiIsCisgICAgICAgICAgICAiaGFyciI6ICIiLAorICAgICAgICAgICAgImhhdGEiOiAiIiwKKyAgICAgICAgICAgICJpZiI6ICIiLAorICAgICAgICAgICAgImluIjogIiIsCisgICAgICAgICAgICAiSW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJpbnQiOiAiIiwKKyAgICAgICAgICAgICJpbnRfYV5iZih4KWR4IjogIiIsCisgICAgICAgICAgICAiaW90YSI6ICIiLAorICAgICAgICAgICAgImthcHBhIjogIiIsCisgICAgICAgICAgICAiTGFtYmRhIjogIiIsCisgICAgICAgICAgICAibGFtYmRhIjogIiIsCisgICAgICAgICAgICAibGFyciI6ICIiLAorICAgICAgICAgICAgImxBcnIiOiAiIiwKKyAgICAgICAgICAgICJsaW1fKHgtJmd0O29vKSI6ICIiLAorICAgICAgICAgICAgIm11IjogIiIsCisgICAgICAgICAgICAiTk4iOiAiIiwKKyAgICAgICAgICAgICJubiI6ICIiLAorICAgICAgICAgICAgIm5ubiI6ICIiLAorICAgICAgICAgICAgIm5vdCI6ICIiLAorICAgICAgICAgICAgIm51IjogIiIsCisgICAgICAgICAgICAibysiOiAiIiwKKyAgICAgICAgICAgICJvLiI6ICIiLAorICAgICAgICAgICAgIk8vIjogIiIsCisgICAgICAgICAgICAib2ludCI6ICIiLAorICAgICAgICAgICAgIm9tZWdhIjogIiIsCisgICAgICAgICAgICAiT21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJvbyI6ICIiLAorICAgICAgICAgICAgIm9yIjogIiIsCisgICAgICAgICAgICAib3giOiAiIiwKKyAgICAgICAgICAgICJQaGkiOiAiIiwKKyAgICAgICAgICAgICJwaGkiOiAiIiwKKyAgICAgICAgICAgICJwaSI6ICIiLAorICAgICAgICAgICAgIlBpIjogIiIsCisgICAgICAgICAgICAicHJvZCI6ICIiLAorICAgICAgICAgICAgInByb3AiOiAiIiwKKyAgICAgICAgICAgICJwc2kiOiAiIiwKKyAgICAgICAgICAgICJQc2kiOiAiIiwKKyAgICAgICAgICAgICJRUSI6ICIiLAorICAgICAgICAgICAgInF1YWQiOiAiIiwKKyAgICAgICAgICAgICJyQXJyIjogIiIsCisgICAgICAgICAgICAicmhvIjogIiIsCisgICAgICAgICAgICAicm9vdChuKSh4KSI6ICIiLAorICAgICAgICAgICAgIlJSIjogIiIsCisgICAgICAgICAgICAic2ZhIjogIiIsCisgICAgICAgICAgICAic2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJTaWdtYSI6ICIiLAorICAgICAgICAgICAgInNxcnQoeCkiOiAiIiwKKyAgICAgICAgICAgICJzcXVhcmUiOiAiIiwKKyAgICAgICAgICAgICJzdGFja3JlbCgtJmd0OykoKykiOiAiIiwKKyAgICAgICAgICAgICJzdWIiOiAiIiwKKyAgICAgICAgICAgICJzdWJlIjogIiIsCisgICAgICAgICAgICAic3VtIjogIiIsCisgICAgICAgICAgICAic3VtXyhuPTEpXm9vIjogIiIsCisgICAgICAgICAgICAic3VwIjogIiIsCisgICAgICAgICAgICAic3VwZSI6ICIiLAorICAgICAgICAgICAgInRhdSI6ICIiLAorICAgICAgICAgICAgIlRoZXRhIjogIiIsCisgICAgICAgICAgICAidGhldGEiOiAiIiwKKyAgICAgICAgICAgICJUVCI6ICIiLAorICAgICAgICAgICAgInR0YSI6ICIiLAorICAgICAgICAgICAgInVhcnIiOiAiIiwKKyAgICAgICAgICAgICJ1bGEiOiAiIiwKKyAgICAgICAgICAgICJ1cHNpbG9uIjogIiIsCisgICAgICAgICAgICAidXUiOiAiIiwKKyAgICAgICAgICAgICJ1dXUiOiAiIiwKKyAgICAgICAgICAgICJ2ZWNhIjogIiIsCisgICAgICAgICAgICAidnYiOiAiIiwKKyAgICAgICAgICAgICJ2dnYiOiAiIiwKKyAgICAgICAgICAgICJ4XihtK24pIjogIiIsCisgICAgICAgICAgICAieF8obW4pIjogIiIsCisgICAgICAgICAgICAiWGkiOiAiIiwKKyAgICAgICAgICAgICJ4aSI6ICIiLAorICAgICAgICAgICAgInh4IjogIiIsCisgICAgICAgICAgICAiemV0YSI6ICIiLAorICAgICAgICAgICAgIlpaIjogIiIsCisgICAgICAgICAgICAifC0mZ3Q7IjogIiIsCisgICAgICAgICAgICAifC0tIjogIiIsCisgICAgICAgICAgICAifD09IjogIiIsCisgICAgICAgICAgICAifF9fIjogIiIsCisgICAgICAgICAgICAifH4iOiAiIiwKKyAgICAgICAgICAgICJ+PSI6ICIiLAorICAgICAgICAgICAgIn58IjogIiIsCisgICAgICAgICAgICAifn4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmFuY3lTZWxlY3RzIjogeworICAgICAgICAgICAgIicrb3B0LnRleHQrJyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGaW5kUmVwbGFjZSI6IHsKKyAgICAgICAgICAgICInO1xyXG4gIHZhciB0YWdjID0gJyI6ICIiLAorICAgICAgICAgICAgIkNhc2Ugc2Vuc2l0aXZlIHNlYXJjaCI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIjogIiIsCisgICAgICAgICAgICAiRG9uZSI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSB0ZXh0IHlvdSB3YW50IHRvIGZpbmQiOiAiIiwKKyAgICAgICAgICAgICJGaW5kIGFuZCBSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiZm91bmQgaXRlbSI6ICIiLAorICAgICAgICAgICAgImZvdW5kIGl0ZW1zIjogIiIsCisgICAgICAgICAgICAiSGlnaGxpZ2h0IjogIiIsCisgICAgICAgICAgICAiSW5mb3JtIGEgcmVwbGFjZW1lbnQgd29yZCI6ICIiLAorICAgICAgICAgICAgIk5leHQiOiAiIiwKKyAgICAgICAgICAgICJub3QgZm91bmQiOiAiIiwKKyAgICAgICAgICAgICJPcHRpb25zIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSB3aXRoOiI6ICIiLAorICAgICAgICAgICAgInJlcGxhY2VkIGl0ZW0iOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtcyI6ICIiLAorICAgICAgICAgICAgIlNlYXJjaCBmb3I6IjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSBhbGwgb2NjdXJyZW5jZXMiOiAiIiwKKyAgICAgICAgICAgICJTdWJzdGl0dXRlIHRoaXMgb2NjdXJyZW5jZT8iOiAiIiwKKyAgICAgICAgICAgICJVbmRvIjogIiIsCisgICAgICAgICAgICAiV2hvbGUgd29yZHMgb25seSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGb3JtT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJFbnRlciB0aGUgbmFtZSBmb3IgbmV3IG9wdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIGNoZWNrIGJveC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBGb3JtLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG11bHRpLWxpbmUgdGV4dCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSByYWRpbyBidXR0b24uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgc2VsZWN0IGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHN1Ym1pdC9yZXNldCBidXR0b24uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgdGV4dCwgcGFzc3dvcmQgb3IgaGlkZGVuIGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIk1lc3NhZ2UgU2VudCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBTZWxlY3QuLi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybXMiOiB7CisgICAgICAgICAgICAiJ29uQ2xpY2snPSI6ICIiLAorICAgICAgICAgICAgIkFjY2VzcyBLZXk6IjogIiIsCisgICAgICAgICAgICAiQWN0aW9uIFVSTDoiOiAiIiwKKyAgICAgICAgICAgICJCdXR0b24gU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiQ2hlY2tlZCI6ICIiLAorICAgICAgICAgICAgIkNvbHVtbnM6IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCB0ZXh0IChvcHRpb25hbCkiOiAiIiwKKyAgICAgICAgICAgICJEaW1lbnNpb25zIjogIiIsCisgICAgICAgICAgICAiRGlzYWJsZWQiOiAiIiwKKyAgICAgICAgICAgICJFbmNvZGluZzoiOiAiIiwKKyAgICAgICAgICAgICJGb3IgQ29udHJvbDoiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBGSUVMRFNFVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IExBQkVMIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBTRUxFQ1QiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiRm9ybSBoYW5kbGVyIHNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJHZXQiOiAiIiwKKyAgICAgICAgICAgICJIYXJkIjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0IGluIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiSFRNTC1Gb3JtIHRvIENHSSAoZGVmYXVsdCkiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBzb3VyY2UiOiAiIiwKKyAgICAgICAgICAgICJJbml0aWFsIFRleHQ6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBGSUVMRFNFVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBJTlBVVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBTRUxFQ1QiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgVEVYVEFSRUEiOiAiIiwKKyAgICAgICAgICAgICJKYXZhc2NyaXB0IGZvciBidXR0b24gY2xpY2siOiAiIiwKKyAgICAgICAgICAgICJMYWJlbDoiOiAiIiwKKyAgICAgICAgICAgICJMZWdlbmQ6IjogIiIsCisgICAgICAgICAgICAiTWF4IGxlbmd0aDoiOiAiIiwKKyAgICAgICAgICAgICJNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjY2VwdGVkIjogIiIsCisgICAgICAgICAgICAiTWV0aG9kOiI6ICIiLAorICAgICAgICAgICAgIm11bHRpcGFydCBGb3JtIERhdGEgKEZpbGUtVXBsb2FkKSI6ICIiLAorICAgICAgICAgICAgIk5hbWUiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJuYW1lIG9mIHRoZSB0ZXh0YXJlYSI6ICIiLAorICAgICAgICAgICAgIk5hbWUvSUQ6IjogIiIsCisgICAgICAgICAgICAibm9ybWFsIjogIiIsCisgICAgICAgICAgICAibm93cmFwIjogIiIsCisgICAgICAgICAgICAiT2ZmIjogIiIsCisgICAgICAgICAgICAiUGh5c2ljYWwiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgYSBMYWJlbCI6ICIiLAorICAgICAgICAgICAgIlBvc3QiOiAiIiwKKyAgICAgICAgICAgICJwcmUiOiAiIiwKKyAgICAgICAgICAgICJSZWFkIE9ubHkiOiAiIiwKKyAgICAgICAgICAgICJTaXplIG9mIHRleHQgYm94IGluIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJTaXplOiI6ICIiLAorICAgICAgICAgICAgIlNvZnQiOiAiIiwKKyAgICAgICAgICAgICJUYWIgSW5kZXg6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IEZyYW1lOiI6ICIiLAorICAgICAgICAgICAgIlRleHQ6IjogIiIsCisgICAgICAgICAgICAiVVJMIG9mIGltYWdlIjogIiIsCisgICAgICAgICAgICAiVmFsdWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZToiOiAiIiwKKyAgICAgICAgICAgICJWaXJ0dWFsIjogIiIsCisgICAgICAgICAgICAiV2lkdGggaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJXcmFwIE1vZGU6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBOYW1lIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iCisgICAgICAgIH0sCisgICAgICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgICAgICIuLi4iOiAiIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgc3R5bGUtc2hlZXQ6IjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZCBjb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJDaGFyYWN0ZXIgc2V0OiI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChJU08tODg1OS01KSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChLT0k4LVIpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKFdJTkRPV1MtMTI1MSkiOiAiIiwKKyAgICAgICAgICAgICJEZXNjcmlwdGlvbjoiOiAiIiwKKyAgICAgICAgICAgICJET0NUWVBFOiI6ICIiLAorICAgICAgICAgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCB0aXRsZToiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkczoiOiAiIiwKKyAgICAgICAgICAgICJQcmltYXJ5IHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIlRleHQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiVVRGLTggKHJlY29tbWVuZGVkKSI6ICIiLAorICAgICAgICAgICAgIndlc3Rlcm4gKElTTy04ODU5LTEpIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bGxTY3JlZW4iOiB7CisgICAgICAgICAgICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkdlY2tvIjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJIb3Jpem9udGFsUnVsZSI6IHsKKyAgICAgICAgICAgICImI3gwMGQ3OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIkNlbnRlciI6ICIiLAorICAgICAgICAgICAgIkNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvZWRpdCBob3Jpem9udGFsIHJ1bGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBIb3Jpem9udGFsIFJ1bGUiOiAiIiwKKyAgICAgICAgICAgICJObyBzaGFkaW5nIjogIiIsCisgICAgICAgICAgICAicGVyY2VudCI6ICIiLAorICAgICAgICAgICAgInBpeGVscyI6ICIiLAorICAgICAgICAgICAgIlN0eWxlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIiIsCisgICAgICAgICAgICAiQ2hhciI6ICIiLAorICAgICAgICAgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIiIsCisgICAgICAgICAgICAiQ1NTIFN0eWxlIjogIiIsCisgICAgICAgICAgICAiRkcgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJGbG9hdCI6ICIiLAorICAgICAgICAgICAgIkp1c3RpZnkiOiAiIiwKKyAgICAgICAgICAgICJNYXJnaW4iOiAiIiwKKyAgICAgICAgICAgICJOb25lIjogIiIsCisgICAgICAgICAgICAiUGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIlRleHQgYWxpZ24iOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICIiLAorICAgICAgICAgICAgIi0iOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJDZW50ZXIiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJwZXJjZW50IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAicGl4ZWxzIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgICAgICJBbmNob3IgbmFtZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBBbmNob3IiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGZvb3Rub3RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IE5vdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGFnZWJyZWFrIjogeworICAgICAgICAgICAgIlBhZ2UgYnJlYWsiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIEJyZWFrIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNtaWxleSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgU21pbGV5IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICAgICAiXFxuICBUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZ1xcbiI6ICIiLAorICAgICAgICAgICAgIkhpZGUgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMSI6ICIiLAorICAgICAgICAgICAgIkxpbmsyIjogIiIsCisgICAgICAgICAgICAiTGluazMiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNCI6ICIiLAorICAgICAgICAgICAgIkxpbms1IjogIiIsCisgICAgICAgICAgICAiU2hvdyBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmciOiAiIiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgICAgICJBbGwgQ2F0ZWdvcmllcyI6ICIiLAorICAgICAgICAgICAgIkZpbHRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyBIVE1MIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIHRlbXBsYXRlIHZhcmlhYmxlIjogIiIsCisgICAgICAgICAgICAiT25seSBzZWFyY2ggd29yZCBiZWdpbm5pbmciOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIjw8Q2hhckNvdW50ZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICI8PEluc2VydFNuaXBwZXQ+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAgICAgIkNhcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJDYXB0aW9uIGZvciB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZSBib3JkZXJzOiI6ICIiLAorICAgICAgICAgICAgIkxheW91IjogIiIsCisgICAgICAgICAgICAiU3R5bGUgb2YgdGhlIGJvcmRlciI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciI6ICI8PElubGluZVN0eWxlcj4+IgorICAgICAgICB9LAorICAgICAgICAiTGFuZ01hcmtzIjogeworICAgICAgICAgICAgIiZtZGFzaDsgbGFuZ3VhZ2UgJm1kYXNoOyI6ICIiLAorICAgICAgICAgICAgIicsICciOiAiIiwKKyAgICAgICAgICAgICJFbmdsaXNoIjogIiIsCisgICAgICAgICAgICAiRnJlbmNoIjogIiIsCisgICAgICAgICAgICAiR3JlZWsiOiAiIiwKKyAgICAgICAgICAgICJsYW5ndWFnZSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJMYXRpbiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJMaW5rZXIiOiB7CisgICAgICAgICAgICAiKHB4KSI6ICIiLAorICAgICAgICAgICAgIkFuY2hvci1MaW5rIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIEFkZHJlc3M6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgTGluayI6ICIiLAorICAgICAgICAgICAgIkxvY2F0aW9uIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZW51IEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFRlbXBsYXRlOiI6ICIiLAorICAgICAgICAgICAgIk5ldyBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcmRpbmFyeSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUG9wdXAgV2luZG93IjogIiIsCisgICAgICAgICAgICAiUG9wdXBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgTGluayI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZWFibGU6IjogIiIsCisgICAgICAgICAgICAiU2FtZSBXaW5kb3cgKGp1bXAgb3V0IG9mIGZyYW1lcykiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGxiYXJzOiI6ICIiLAorICAgICAgICAgICAgIlNob3dzIE9uIEhvdmVyIjogIiIsCisgICAgICAgICAgICAiU3RhdHVzIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJTdWJqZWN0OiI6ICIiLAorICAgICAgICAgICAgIlRpdGxlOiI6ICIiLAorICAgICAgICAgICAgIlRvb2xiYXI6IjogIiIsCisgICAgICAgICAgICAiVVJMIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiIiwKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIk5hbWU6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiU2l6ZToiOiAiPDxGb3Jtcz4+IgorICAgICAgICB9LAorICAgICAgICAiTGlzdFR5cGUiOiB7CisgICAgICAgICAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogIiIsCisgICAgICAgICAgICAiRGVjaW1hbCBudW1iZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgZ3JlZWsgbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIGxhdGluIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciByb21hbiBudW1iZXJzIjogIiIsCisgICAgICAgICAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIlVwcGVyIHJvbWFuIG51bWJlcnMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiTW9vdG9vbHNGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJPcGVyYSI6IHsKKyAgICAgICAgICAgICJNQVJLIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgdGV4dCBpbiBuZXcgcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiUGFzdGUgYXMgUGxhaW4gVGV4dCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQcmVzZXJ2ZVNjcmlwdHMiOiB7CisgICAgICAgICAgICAiSmF2YVNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIlBIUCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgICAgICInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnY2wnOiAnIjogIiIsCisgICAgICAgICAgICAiQVRUUklCVVRFUyI6ICIiLAorICAgICAgICAgICAgIkNvbG9ycyI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSBUQUcgeW91IHdhbnQgdG8gaW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiTm8gQ1NTIGNsYXNzIGF2YWlhYmxlIjogIiIsCisgICAgICAgICAgICAiT2siOiAiIiwKKyAgICAgICAgICAgICJPUFRJT05TIjogIiIsCisgICAgICAgICAgICAiUXVpY2sgVGFnIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlRBR3MiOiAiIiwKKyAgICAgICAgICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBUQUciOiAiIiwKKyAgICAgICAgICAgICJZb3UgaGF2ZSB0byBzZWxlY3Qgc29tZSB0ZXh0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNhdmVTdWJtaXQiOiB7CisgICAgICAgICAgICAiaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAgICAgICAgICJSZWFkeSI6ICIiLAorICAgICAgICAgICAgIlNhdmUiOiAiIiwKKyAgICAgICAgICAgICJTYXZpbmcuLi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiU2V0SWQiOiB7CisgICAgICAgICAgICAiSUQvTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQgYW5kIE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQvTmFtZSI6ICIiLAorICAgICAgICAgICAgIlNldCBJRC9OYW1lIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiQ2xvc2luZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIkNsb3NpbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIkNvbnZlcnQgYWxsIHF1b3RlcyBhbmQgZGFzaGVzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIGF1dG9tYXRpYyByZXBsYWNlbWVudHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN0eWxpc3QiOiB7CisgICAgICAgICAgICAiU3R5bGVzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBTZWxlY3Rpb24gT25seSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIHVwIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBTY29wZSI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYWwgdGlkeSB1cCBhbmQgY29ycmVjdGlvbiBvZiBzb21lIHByb2JsZW1zLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzZWxlY3QgZnJvbSB0aGUgZm9sbG93aW5nIGNsZWFuaW5nIG9wdGlvbnMuLi4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc3RhbmQgYnkgd2hpbGUgY2xlYW5pbmcgaW4gcHJvY2Vzcy4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGlnbm1lbnQgKGxlZnQvcmlnaHQvanVzdGlmeSkuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBjbGFzc2VzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBBbGwgSFRNTCBUYWdzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBzdHlsZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0eXBlZmFjZXMgKGZvbnQgXCJzdHlsZXNcIikuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGVtcGhhc2lzIGFuZCBhbm5vdGF0aW9ucy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgbGFuZyBhdHRyaWJ1dGVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBQYXJhZ3JhcGhzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cy4iOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzIHdpdGggbm9uLWRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzLiI6ICIiLAorICAgICAgICAgICAgIlZpZ29yb3VzbHkgcHVyZ2UgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiQWxsIGZvdXIgc2lkZXMiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXJzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBQcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBUeXBlOiI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIGRvd24iOiAiIiwKKyAgICAgICAgICAgICJDZWxscyB0byB0aGUgcmlnaHQsIGFuZCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBjZWxsIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSByb3ciOiAiIiwKKyAgICAgICAgICAgICJEbyBOb3QgQ2hhbmdlIjogIiIsCisgICAgICAgICAgICAiRnJhbWUgYW5kIGJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJGcmFtZXMiOiAiIiwKKyAgICAgICAgICAgICJIZWFkZXIgKHRoKSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjZWxsIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNlbGwgYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNvbHVtbiBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjb2x1bW4gYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCByb3cgYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBjdXJyZW50IGNlbGwgd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJObyBydWxlcyI6ICIiLAorICAgICAgICAgICAgIk5vIHNpZGVzIjogIiIsCisgICAgICAgICAgICAiTm9ybWFsICh0ZCkiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJSb3cgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlJvdyBQcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gY29sdW1ucyBvbmx5IjogIiIsCisgICAgICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiByb3dzIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgY29sdW1uIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgcm93IjogIiIsCisgICAgICAgICAgICAiU3VtbWFyeSI6ICIiLAorICAgICAgICAgICAgIlRhYmxlIFByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgbGVmdC1oYW5kIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSByaWdodCBhbmQgbGVmdCBzaWRlcyBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHRvcCBhbmQgYm90dG9tIHNpZGVzIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIiIsCisgICAgICAgICAgICAiQ2FwdGlvbiI6ICI8PEluc2VydFRhYmxlPj4iLAorICAgICAgICAgICAgIkNvbHVtbnMiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJEZXNjcmlwdGlvbiI6ICI8PEZ1bGxQYWdlPj4iLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiUGFkZGluZyI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJwaXhlbHMiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiVW5zYXZlZENoYW5nZXMiOiB7CisgICAgICAgICAgICAiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBlZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiV2ViS2l0IjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICI8PEdlY2tvPj4iCisgICAgICAgIH0sCisgICAgICAgICJYaW5oYSI6IHsKKyAgICAgICAgICAgICImIzgyMTI7IGZvbnQgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIiYjODIxMjsgc2l6ZSAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiMSAoOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIyICgxMCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIzICgxMiBwdCkiOiAiIiwKKyAgICAgICAgICAgICI0ICgxNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI1ICgxOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI2ICgyNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI3ICgzNiBwdCkiOiAiIiwKKyAgICAgICAgICAgICJBcmlhbCI6ICIiLAorICAgICAgICAgICAgIkNvdXJpZXIgTmV3IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFN0YXR1c2JhciI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMCAoemVybykiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTEgLi4gQ1RSTC02IjogIiIsCisgICAgICAgICAgICAiQ1RSTC1BIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1CIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1DIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1FIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1JIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1KIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1MIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1OIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1SIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1TIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1VIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1WIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1YIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1ZIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1aIjogIiIsCisgICAgICAgICAgICAiRXJyb3IgTG9hZGluZyBYaW5oYS4gIERldmVsb3BlcnMsIGNoZWNrIHRoZSBFcnJvciBDb25zb2xlIGZvciBpbmZvcm1hdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGaW5pc2hpbmciOiAiIiwKKyAgICAgICAgICAgICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiIiwKKyAgICAgICAgICAgICJHZW9yZ2lhIjogIiIsCisgICAgICAgICAgICAiSW1wYWN0IjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBDb3JlIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW4gJHBsdWdpbiI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgcGx1Z2lucyI6ICIiLAorICAgICAgICAgICAgIk1TIFdvcmQgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCBDb2xvciI6ICIiLAorICAgICAgICAgICAgIlRhaG9tYSI6ICIiLAorICAgICAgICAgICAgIlRpbWVzIE5ldyBSb21hbiI6ICIiLAorICAgICAgICAgICAgIlRvdWNoIGhlcmUgZmlyc3QgdG8gYWN0aXZhdGUgZWRpdG9yLiI6ICIiLAorICAgICAgICAgICAgIlZlcmRhbmEiOiAiIiwKKyAgICAgICAgICAgICJXYWl0aW5nIGZvciBJZnJhbWUgdG8gbG9hZC4uLiI6ICIiLAorICAgICAgICAgICAgIldpbmdEaW5ncyI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJSZW1vdmUgQ3VycmVudCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IEJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJTZXQgcGFnZSBiYWNrZ3JvdW5kIGltYWdlIjogIiIsCisgICAgICAgICAgICAiU2V0IFBhZ2UgQmFja2dyb3VuZCBJbWFnZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDbGllbnRzaWRlU3BlbGxjaGVjayI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIENMSUVOVFNJREVTUEVMTENIRUNLIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrIHVzaW5nIGllU3BlbGwiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTAlIjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICIiLAorICAgICAgICAgICAgIjIwMCUiOiAiIiwKKyAgICAgICAgICAgICIyNSUiOiAiIiwKKyAgICAgICAgICAgICI1MCUiOiAiIiwKKyAgICAgICAgICAgICI3NSUiOiAiIiwKKyAgICAgICAgICAgICI+TGlzdCBWaWV3IjogIiIsCisgICAgICAgICAgICAiPlRodW1ibmFpbCBWaWV3IjogIiIsCisgICAgICAgICAgICAiQToiOiAiIiwKKyAgICAgICAgICAgICJBbGlnbiI6ICIiLAorICAgICAgICAgICAgIkFsdCI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciBDb2xvciI6ICIiLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkNyb3AiOiAiIiwKKyAgICAgICAgICAgICJEOiI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICIiLAorICAgICAgICAgICAgIkVkaXQiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiIiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiIiwKKyAgICAgICAgICAgICJGaWxlc2l6ZToiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIEhvcml6b250YWwiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIEltYWdlIjogIiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciI6ICIiLAorICAgICAgICAgICAgIkdJRiI6ICIiLAorICAgICAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICIiLAorICAgICAgICAgICAgIkg6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiIiwKKyAgICAgICAgICAgICJKUEVHIEhpZ2giOiAiIiwKKyAgICAgICAgICAgICJKUEVHIExvdyI6ICIiLAorICAgICAgICAgICAgIkpQRUcgTWVkaXVtIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyI6ICIiLAorICAgICAgICAgICAgIkxvY2siOiAiIiwKKyAgICAgICAgICAgICJNYXJrZXIiOiAiIiwKKyAgICAgICAgICAgICJNYXhpbXVtIGZvbGRlciBzaXplIGxpbWl0IHJlYWNoZWQuIFVwbG9hZCBkaXNhYmxlZC4iOiAiIiwKKyAgICAgICAgICAgICJNZWFzdXJlIjogIiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICIiLAorICAgICAgICAgICAgIk5vIEZpbGVzIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHZhbHVlIjogIiIsCisgICAgICAgICAgICAiUE5HIjogIiIsCisgICAgICAgICAgICAiUHJlc2V0IjogIiIsCisgICAgICAgICAgICAiUXVhbGl0eToiOiAiIiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIiIsCisgICAgICAgICAgICAiUmVuYW1lIjogIiIsCisgICAgICAgICAgICAiUmVzaXplIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJTdGFydCBYOiI6ICIiLAorICAgICAgICAgICAgIlN0YXJ0IFk6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlRvZ2dsZSBtYXJrZXIgY29sb3IiOiAiIiwKKyAgICAgICAgICAgICJUcmFzaCI6ICIiLAorICAgICAgICAgICAgIlVwbG9hZCI6ICIiLAorICAgICAgICAgICAgIlc6IjogIiIsCisgICAgICAgICAgICAiWDoiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJZOiI6ICIiLAorICAgICAgICAgICAgIlpvb20iOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQ2xlYXIiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJDb2xvciI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkNvcHkiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJDdXQiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICI8PE1vb3Rvb2xzRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWFyZ2luIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJGaWx0ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsdGVyIjogIjw8SW5zZXJ0U25pcHBldDI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkh0bWxUaWR5IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQXV0by1UaWR5IjogIiIsCisgICAgICAgICAgICAiRG9uJ3QgVGlkeSI6ICIiLAorICAgICAgICAgICAgIkhUTUwgVGlkeSI6ICIiLAorICAgICAgICAgICAgIlRpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQW5nbGU6IjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlcyI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgVXNlcm5hbWUvRW1haWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIgTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFBob3RvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFZpZGVvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgU2VydmVyIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFVzZXJuYW1lIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlbyBMaXN0IjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlb3MiOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQ2xlYXIiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkNyb3AiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkQ6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRWRpdCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZW5hbWU6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIEhvcml6b250YWwiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZsaXAgSW1hZ2UiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZsaXAgVmVydGljYWwiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkdJRiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJIOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBIaWdoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIExvdyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBNZWRpdW0iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkxvY2siOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1hcmtlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJQTkciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZXNpemUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlNhdmUiOiAiPDxTYXZlU3VibWl0Pj4iLAorICAgICAgICAgICAgIlN0YXJ0IFg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTdGFydCBZOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiVHJhc2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlc6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUTUFSUVVFRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUiOiAiIiwKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kLUNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkJlaGF2aW9yOiI6ICIiLAorICAgICAgICAgICAgIkNvbnRpbnVvdXMiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3Rpb246IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHNjcm9sbGluZyBtYXJxdWVlIjogIiIsCisgICAgICAgICAgICAiTWFycXVlZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgQW1vdW50OiI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbCBEZWxheToiOiAiIiwKKyAgICAgICAgICAgICJTbGlkZSI6ICIiLAorICAgICAgICAgICAgIlNwZWVkIENvbnRyb2wiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTmFtZSI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIk5hbWUvSUQ6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiVGV4dDoiOiAiPDxGb3Jtcz4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGljdHVyZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVFBJQ1RVUkUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vdCBkZWZpbmVkIjogIiIsCisgICAgICAgICAgICAiIE9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJVcGxvYWQgZmlsZSI6ICIiLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJTaXplIjogIjw8Rm9ybXM+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEyMCUiOiAiIiwKKyAgICAgICAgICAgICIxNTAlIjogIiIsCisgICAgICAgICAgICAiODAlIjogIiIsCisgICAgICAgICAgICAiQWRkIEdVSURPIENvZGUgaW4gYSB0ZXh0Ym94IG9uIHRoZSBwYWdlIjogIiIsCisgICAgICAgICAgICAiQWRkIE1JREkgbGluayB0byBhbGxvdyBzdHVkZW50cyB0byBoZWFyIHRoZSBtdXNpYyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdCI6ICIiLAorICAgICAgICAgICAgIkd1aWRvIGNvZGUiOiAiIiwKKyAgICAgICAgICAgICJHVUlETyBDb2RlIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgaW4gYXBwbGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEdVSURPIE11c2ljIE5vdGF0aW9uIjogIiIsCisgICAgICAgICAgICAiTUlESSBGaWxlIjogIiIsCisgICAgICAgICAgICAiU291cmNlIENvZGUiOiAiIiwKKyAgICAgICAgICAgICJXaXRoIE1vemlsbGEsIHRoZSBhcHBsZXQgd2lsbCBub3QgYmUgdmlzaWJsZSBpbiBlZGl0b3IsIGJ1dCBvbmx5IGluIFdlYiBwYWdlIGFmdGVyIHN1Ym1pdHRpbmcuIjogIiIsCisgICAgICAgICAgICAiWm9vbSA6IjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIlpvb20iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJQU0xvY2FsIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNMT0NBTCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJDb25maXJtIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIEdlYXJzIGluIG9yZGVyIHRvIHVzZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlIGFuZCBjb25maWd1cmF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkVuYWJsaW5nIExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJJbnN0YWxsIjogIiIsCisgICAgICAgICAgICAiTGVhcm4gQWJvdXQgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCByZWxvYWQgdGhlIHBhZ2UsIGNhdXNpbmcgeW91IHRvIGxvc2UgYW55IHVuc2F2ZWQgd29yay4gIFByZXNzIFwiT0tcIiB0byByZWxvYWQuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgdXNlcyBHb29nbGUgR2VhcnMgdG8gZW5hYmxlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UuICBXaXRoIEdlYXJzIGluc3RhbGxlZCwgeW91IGNhbiBzYXZlIGRyYWZ0cyBvZiB5b3VyIGRvY3VtZW50cyBvbiB5b3VyIGhhcmQgZHJpdmUsIGNvbmZpZ3VyZSBYaW5oYSB0byBsb29rIHRoZSB3YXkgeW91IHdhbnQsIGFuZCBjYXJyeSB0aGlzIGluZm9ybWF0aW9uIHdoZXJldmVyIHlvdSB1c2UgWGluaGEgb24gdGhlIHdlYi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiUFNTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU1NFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWxlOiAiOiAiIiwKKyAgICAgICAgICAgICJJbXBvcnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEZXRhaWxzIjogIiIsCisgICAgICAgICAgICAiRmlsZSBCcm93c2VyIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gICAgVGhlcmUgQyAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgVGhlcmUgQSAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyBcIiBUaGVyZSBCIFwiIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gJyBUaGVyZSBEICciOiAiIiwKKyAgICAgICAgICAgICJMaXN0IG9mIFBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIk5ldyBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIk9wZW4iOiAiIiwKKyAgICAgICAgICAgICJPcGVuIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgeW91J2QgbGlrZSB0byBjcmVhdGUuIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBlcmFzZSBhbnkgdW5zYXZlZCBjb250ZW50LiAgSWYgeW91J3JlIGNlcnRhaW4sIHBsZWFzZSBjbGljayBPSyB0byBjb250aW51ZS4iOiAiIiwKKyAgICAgICAgICAgICJXZWIgVVJMIjogIiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICI8PFBTTG9jYWw+PiIsCisgICAgICAgICAgICAiQ29weSI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlbmFtZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IjogIjw8SW5zZXJ0Tm90ZT4+IiwKKyAgICAgICAgICAgICJOZXcgRm9sZGVyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEaWN0aW9uYXJ5IjogIiIsCisgICAgICAgICAgICAiRmluaXNoZWQgbGlzdCBvZiBtaXNwZWxsZWQgd29yZHMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MQXJlYSBTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiSSB3aWxsIG9wZW4gaXQgaW4gYSBuZXcgcGFnZS4iOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUiOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUgYWxsIjogIiIsCisgICAgICAgICAgICAiSW5mbyI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIjogIiIsCisgICAgICAgICAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIiIsCisgICAgICAgICAgICAiT3JpZ2luYWwgd29yZCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gb3BlbiB0aGlzIGxpbmsiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdDogY2hhbmdpbmcgZGljdGlvbmFyeSB0byI6ICIiLAorICAgICAgICAgICAgInBsaXogd2VpdCA7LSkiOiAiIiwKKyAgICAgICAgICAgICJSZS1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGFsbCI6ICIiLAorICAgICAgICAgICAgIlJldmVydCI6ICIiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrZXIiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbC1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlN1Z2dlc3Rpb25zIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSB3aXRoIjogIjw8RmluZFJlcGxhY2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlRlbXBsYXRlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiSW5zZXJ0IHRlbXBsYXRlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuRm9ybWF0IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWxsIjogIiIsCisgICAgICAgICAgICAiQWxsIEhUTUw6IjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgQXJlYSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIG9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0aW5nOiI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCB3aGljaCB0eXBlcyBvZiBmb3JtYXR0aW5nIHlvdSB3b3VsZCBsaWtlIHRvIHJlbW92ZS4iOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Rpb24iOiAiIgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2ZpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvZmkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E5NWVhYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2ZpLmpzCkBAIC0wLDAgKzEsMTU3NSBAQAorLy8gWGluaGEgTGFuZ3VhZ2UgQ29tYmluZWQgVHJhbnNsYXRpb24gRmlsZQorLy8KKy8vIExBTkc6ICJmaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElOU1RSVUNUSU9OUyBUTyBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gWW91ciB0cmFuc2xhdGlvbiBtdXN0IGJlIGluIFVURi04IENoYXJhY3RlciBFbmNvZGluZy4KKy8vCisvLyBUaGlzIGlzIGEgSlNPTiBlbmNvZGVkIGZpbGUgKHBsdXMgY29tbWVudHMpLCBzdHJpbmdzIHNob3VsZCBiZSBkb3VibGUtcXVvdGUKKy8vIG9ubHksIGRvIG5vdCB1c2Ugc2luZ2xlIHF1b3RlcyB0byBzdXJyb3VuZCBzdHJpbmdzIC0gImhlbGxvIiwgbm90ICdoZWxsbycKKy8vIGRvIG5vdCBoYXZlIGEgdHJhaWxpbmcgY29tbWEgYWZ0ZXIgdGhlIGxhc3QgZW50cnkgaW4gYSBzZWN0aW9uLgorLy8KKy8vIE9ubHkgZnVsbCBsaW5lIGNvbW1lbnRzIGFyZSBhbGxvd2VkICh0aGF0IGEgY29tbWVudHMgb2NjdXB5IGVudGlyZSBsaW5lcykuCisvLworLy8gU2VhcmNoIGZvciB0aGUgX19ORVdfVFJBTlNMQVRJT05TX18gc2VjdGlvbiBiZWxvdywgdGhpcyBpcyB3aGVyZSB5b3Ugd2lsbAorLy8gd2FudCB0byBmb2N1cywgdGhpcyBzZWN0aW9uIGluY2x1ZGVzIHRoaW5ncyB0aGF0IGRvIG5vdCBwcmVzZW50bHkgaGF2ZSBhIAorLy8gdHJhbnNsYXRpb24gb3IgZm9yIHdoaWNoIHRoZSB0cmFuc2xhdGlvbiBuZWVkcyB0byBiZSBjaGVja2VkIGZvciBhY2N1cmFjeS4KKy8vCisvLyBJbiB0aGUgTmV3IFRyYW5zbGF0aW9ucyBzZWN0aW9uIGEgdHJhbnNsYXRpb24gc3RyaW5nIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICIiCisvLyAgICAgVGhpcyBtZWFucyBpdCBpcyBub3QgdHJhbnNsYXRlZCB5ZXQsIGFkZCB5b3VyIHRyYW5zbGF0aW9uLi4uCisvLyAgICAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIktsaW5nb24gU3RyaW5nIEhlcmUiCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJUcmFuc2xhdGVkIFN0cmluZyBIZXJlIgorLy8gICAgIFRoaXMgbWVhbnMgdGhhdCBhbiBleGlzdGluZyB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcsIGluIHNvbWUgb3RoZXIKKy8vICAgICBzZWN0aW9uIGhhcyBiZWVuIGZvdW5kLCBhbmQgdXNlZC4gIENoZWNrIHRoYXQgaXQgaXMgYXBwcm9wcml0ZSBmb3IgdGhpcworLy8gICAgIHNlY3Rpb24gYW5kIGlmIGl0IGlzLCB0aGF0J3MgZmluZSBsZWF2ZSBpdCBhcyBpcywgb3RoZXJ3aXNlIGNoYW5nZSBhcworLy8gICAgIGFwcHJvcHJpYXRlLgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiPDxBbm90aGVyU2VjdGlvbj4+IgorLy8gICAgIFRoaXMgbWVhbnMgdXNlIHRoZSBzYW1lIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZyBhcyA8PEFub3RoZXJTZWN0aW9uPj4KKy8vICAgICB0aGlzIHNhdmVzIHlvdSByZS10cmFubGF0aW5nIHN0cmluZ3MuICBJZiB0aGUgQ29udGV4dCBvZiB0aGlzIHNlY3Rpb24KKy8vICAgICBhbmQgdGhlIGNvbnRleHQgb2YgQW5vdGhlclNlY3Rpb24gc2VlbSB0aGUgc2FtZSwgdGhhdCdzIGZpbmUgbGVhdmUgaXQKKy8vICAgICB1c2luZyB0aGF0IHRyYW5zbGF0aW9uLCBidXQgaWYgdGhpcyBzZWN0aW9uIG5lZWRzIGEgZGlmZmVyZW50IHRyYW5zbGF0aW9uLCAKKy8vICAgICB5b3UgY2FuIHByb3ZpZGUgaXQgYnkgcmVwbGFjaW5nIHRoZSBsaW5rICg8PEFub3RoZXJTZWN0aW9uPj4pIHdpdGggdGhhdAorLy8gICAgIG5ldyB0cmFuc2xhdGlvbi4gIEZvciBleGFtcGxlIC0gYSAiVGFibGUiIGluIHNheSAiRGF0YVBsdWdpbiIgaXMgCisvLyAgICAgcGVyaGFwcyB0cmFuc2xhdGVkIGRpZmZlcmVudGx5IHRvICJUYWJsZSIgaW4gIkZ1cm5pdHVyZVBsdWdpbiIuCisvLworLy8gVEVTVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBwbGFjZSB5b3VyIHRyYW5zbGF0aW9uIGZpbGUgb24geW91ciB3ZWJzZXJ2ZXIgc29tZXdoZXJlIGZvciBleGFtcGxlCisvLworLy8gICAveGluaGEvbGFuZy9tZXJnZWQvZmkuanMKKy8vCisvLyBhbmQgdGhlbiB0ZWxsIFhpbmhhIHdoZXJlIHRvIGdldCBpdCAoYmVmb3JlIGxvYWRpbmcgWGluaGFDb3JlLmpzKSBieSAKKy8vCisvLyAgX2VkaXRvcl9sYW5nICAgICAgICAgICAgICA9ICdmaSc7CisvLyAgX2VkaXRvcl9sYW5nX21lcmdlZF9maWxlICA9ICcveGluaGEvbGFuZy9tZXJnZWQvZmkuanMnOworLy8KKy8vIFhpbmhhIHdpbGwgbG9hZCB5b3VyIG5ldyBsYW5ndWFnZSBkZWZpbml0aW9uLgorLy8KKy8vIFNVQk1JVFRJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgY3JlYXRlIGEgVGlja2V0IG9uIHRoZSBYaW5oYSB3ZWJzaXRlIGFuZCBhdHRhY2ggeW91ciB0cmFuc2xhdGlvbiAKKy8vIGZpbGUuCisvLworLy8gVGhlIFhpbmhhIGRldmVsb3BlcnMgd2lsbCB0YWtlIHlvdXIgZmlsZSBhbmQgdXNlIHRoZSAKKy8vICAgICBjb250cmliL2xjX3NwbGl0X21lcmdlZF9maWxlLnBocAorLy8gc2NyaXB0IHRvIGxvYWQgaXQgaW50byB0aGUgWGluaGEgZGlzdHJpYnV0aW9uLgorCit7CisgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIiwKKyAgICAgICAgIk9LIjogIkh5dsOka3N5IgorICAgIH0sCisgICAgIkFib3V0Qm94IjogeworICAgICAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiVGlldG9qYSBlZGl0b3Jpc3RhIgorICAgIH0sCisgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIgorICAgIH0sCisgICAgIkNvbG9yUGlja2VyIjogeworICAgICAgICAiQ29sb3I6ICI6ICJWw6RyaSIsCisgICAgICAgICJPSyI6ICJIeXbDpGtzeSIKKyAgICB9LAorICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogIktlc2tpdMOkIiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICJUYXNhYSBtb2xlbW1hdCByZXVuYXQiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIlRhc2FhIHZhc2VtbWF0IHJldW5hdCIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIlRhc2FhIG9pa2VhdCByZXVuYXQiCisgICAgfSwKKyAgICAiQ3JlYXRlTGluayI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIiwKKyAgICAgICAgIk9LIjogIkh5dsOka3N5IgorICAgIH0sCisgICAgIkVkaXRUYWciOiB7CisgICAgICAgICJDYW5jZWwiOiAiUGVydXV0YSIsCisgICAgICAgICJPSyI6ICJIeXbDpGtzeSIKKyAgICB9LAorICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIiwKKyAgICAgICAgIk9LIjogIkh5dsOka3N5IgorICAgIH0sCisgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICJBbGlnbiI6ICJLb2hkaXN0dXMiLAorICAgICAgICAiQmFzZWxpbmUiOiAiVGFrYXJhamEiLAorICAgICAgICAiQm9yZGVyIjogIlJldW5hIiwKKyAgICAgICAgIkJvdHRvbSI6ICJBbGxlIiwKKyAgICAgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIiwKKyAgICAgICAgIkNvbG9yIjogIlbDpHJpIiwKKyAgICAgICAgIkxlZnQiOiAiVmFzZW4iLAorICAgICAgICAiTWFyZ2luIjogIk1hcmdpbmFhbGkiLAorICAgICAgICAiTWlkZGxlIjogIktlc2tlbGxlIiwKKyAgICAgICAgIk9LIjogIkh5dsOka3N5IiwKKyAgICAgICAgIlBhZGRpbmciOiAiUGFsc3RhbnTDpHl0ZSIsCisgICAgICAgICJSaWdodCI6ICJPaWtlYSIsCisgICAgICAgICJUb3AiOiAiWWzDtnMiLAorICAgICAgICAiV2lkdGgiOiAiTGV2ZXlzIiwKKyAgICAgICAgIldpZHRoOiI6ICJMZXZleXMiCisgICAgfSwKKyAgICAiRm9ybXMiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUGVydXV0YSIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIkt1dmFuIG9zb2l0ZSIsCisgICAgICAgICJPSyI6ICJIeXbDpGtzeSIKKyAgICB9LAorICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIiwKKyAgICAgICAgIkRlc2NyaXB0aW9uOiI6ICJLdXZhdXMiLAorICAgICAgICAiT0siOiAiSHl2w6Rrc3kiCisgICAgfSwKKyAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUGVydXV0YSIsCisgICAgICAgICJDZW50ZXIiOiAiS2Vza2VsbGUiLAorICAgICAgICAiQ29sb3I6IjogIlbDpHJpIiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICJWYWFrYXZpaXZhIiwKKyAgICAgICAgIkxheW91dCI6ICJTb21taXR0ZWx1IiwKKyAgICAgICAgIkxlZnQiOiAiVmFzZW4iLAorICAgICAgICAiT0siOiAiSHl2w6Rrc3kiLAorICAgICAgICAiUmlnaHQiOiAiT2lrZWEiLAorICAgICAgICAiV2lkdGg6IjogIkxldmV5cyIsCisgICAgICAgICJwZXJjZW50IjogInByb3NlbnR0aWEiLAorICAgICAgICAicGl4ZWxzIjogInBpa3NlbGnDpCIKKyAgICB9LAorICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICJCYXNlbGluZSI6ICJUYWthcmFqYSIsCisgICAgICAgICJCb3R0b20iOiAiQWxsZSIsCisgICAgICAgICJDYW5jZWwiOiAiUGVydXV0YSIsCisgICAgICAgICJMZWZ0IjogIlZhc2VuIiwKKyAgICAgICAgIk1pZGRsZSI6ICJLZXNrZWxsZSIsCisgICAgICAgICJPSyI6ICJIeXbDpGtzeSIsCisgICAgICAgICJSaWdodCI6ICJPaWtlYSIsCisgICAgICAgICJUb3AiOiAiWWzDtnMiLAorICAgICAgICAiV2lkdGg6IjogIkxldmV5cyIKKyAgICB9LAorICAgICJJbmxpbmVTdHlsZXIiOiB7CisgICAgICAgICJCYWNrZ3JvdW5kIjogIlRhdXN0YSIsCisgICAgICAgICJCYXNlbGluZSI6ICJUYWthcmFqYSIsCisgICAgICAgICJCb3JkZXIiOiAiUmV1bmEiLAorICAgICAgICAiQm90dG9tIjogIkFsbGUiLAorICAgICAgICAiQ2VudGVyIjogIktlc2tlbGxlIiwKKyAgICAgICAgIkNoYXIiOiAiTWVya2tpIiwKKyAgICAgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIkx1aGlzdGV0dXQgcmV1bmF0IiwKKyAgICAgICAgIkZHIENvbG9yIjogIkZHIFbDpHJpIiwKKyAgICAgICAgIkltYWdlIFVSTCI6ICJLdXZhbiBvc29pdGUiLAorICAgICAgICAiTGF5b3V0IjogIlNvbW1pdHRlbHUiLAorICAgICAgICAiTGVmdCI6ICJWYXNlbiIsCisgICAgICAgICJNYXJnaW4iOiAiTWFyZ2luYWFsaSIsCisgICAgICAgICJNaWRkbGUiOiAiS2Vza2VsbGUiLAorICAgICAgICAiUGFkZGluZyI6ICJQYWxzdGFudMOkeXRlIiwKKyAgICAgICAgIlJpZ2h0IjogIk9pa2VhIiwKKyAgICAgICAgIlRvcCI6ICJZbMO2cyIsCisgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICJWZXJ0aWthYWxpIGtvaGRpc3R1cyIsCisgICAgICAgICJXaWR0aCI6ICJMZXZleXMiLAorICAgICAgICAicGVyY2VudCI6ICJwcm9zZW50dGlhIiwKKyAgICAgICAgInBpeGVscyI6ICJwaWtzZWxpw6QiCisgICAgfSwKKyAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAiQ2FuY2VsIjogIlBlcnV1dGEiLAorICAgICAgICAiT0siOiAiSHl2w6Rrc3kiCisgICAgfSwKKyAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICJCYXNlbGluZSI6ICJUYWthcmFqYSIsCisgICAgICAgICJCb3R0b20iOiAiQWxsZSIsCisgICAgICAgICJDYW5jZWwiOiAiUGVydXV0YSIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIkt1dmFuIG9zb2l0ZSIsCisgICAgICAgICJMYXlvdXQiOiAiU29tbWl0dGVsdSIsCisgICAgICAgICJMZWZ0IjogIlZhc2VuIiwKKyAgICAgICAgIk1pZGRsZSI6ICJLZXNrZWxsZSIsCisgICAgICAgICJPSyI6ICJIeXbDpGtzeSIsCisgICAgICAgICJSaWdodCI6ICJPaWtlYSIsCisgICAgICAgICJTcGFjaW5nIjogIlBhbHN0YXRpbGEiLAorICAgICAgICAiVG9wIjogIllsw7ZzIgorICAgIH0sCisgICAgIkluc2VydE1hcnF1ZWUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUGVydXV0YSIsCisgICAgICAgICJMZWZ0IjogIlZhc2VuIiwKKyAgICAgICAgIk9LIjogIkh5dsOka3N5IiwKKyAgICAgICAgIlJpZ2h0IjogIk9pa2VhIiwKKyAgICAgICAgIldpZHRoOiI6ICJMZXZleXMiCisgICAgfSwKKyAgICAiSW5zZXJ0Tm90ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIgorICAgIH0sCisgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICJCYXNlbGluZSI6ICJUYWthcmFqYSIsCisgICAgICAgICJCb3R0b20iOiAiQWxsZSIsCisgICAgICAgICJDYW5jZWwiOiAiUGVydXV0YSIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIkt1dmFuIG9zb2l0ZSIsCisgICAgICAgICJMYXlvdXQiOiAiU29tbWl0dGVsdSIsCisgICAgICAgICJMZWZ0IjogIlZhc2VuIiwKKyAgICAgICAgIk1pZGRsZSI6ICJLZXNrZWxsZSIsCisgICAgICAgICJPSyI6ICJIeXbDpGtzeSIsCisgICAgICAgICJSaWdodCI6ICJPaWtlYSIsCisgICAgICAgICJTcGFjaW5nIjogIlBhbHN0YXRpbGEiLAorICAgICAgICAiVG9wIjogIllsw7ZzIiwKKyAgICAgICAgIldpZHRoOiI6ICJMZXZleXMiCisgICAgfSwKKyAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAiQ2FuY2VsIjogIlBlcnV1dGEiCisgICAgfSwKKyAgICAiSW5zZXJ0VGFibGUiOiB7CisgICAgICAgICJCYXNlbGluZSI6ICJUYWthcmFqYSIsCisgICAgICAgICJCb3JkZXIiOiAiUmV1bmEiLAorICAgICAgICAiQm90dG9tIjogIkFsbGUiLAorICAgICAgICAiQ2FuY2VsIjogIlBlcnV1dGEiLAorICAgICAgICAiQ2FwdGlvbiI6ICJPdHNpa2tvIiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICJMaXPDpMOkIHRhdWx1a2tvIiwKKyAgICAgICAgIkxheW91dCI6ICJTb21taXR0ZWx1IiwKKyAgICAgICAgIkxlZnQiOiAiVmFzZW4iLAorICAgICAgICAiTWlkZGxlIjogIktlc2tlbGxlIiwKKyAgICAgICAgIk9LIjogIkh5dsOka3N5IiwKKyAgICAgICAgIlBlcmNlbnQiOiAicHJvc2VudHRpYSIsCisgICAgICAgICJQaXhlbHMiOiAicGlrc2VsacOkIiwKKyAgICAgICAgIlJpZ2h0IjogIk9pa2VhIiwKKyAgICAgICAgIlNwYWNpbmciOiAiUGFsc3RhdGlsYSIsCisgICAgICAgICJUb3AiOiAiWWzDtnMiLAorICAgICAgICAiV2lkdGg6IjogIkxldmV5cyIKKyAgICB9LAorICAgICJMaW5rZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUGVydXV0YSIsCisgICAgICAgICJPSyI6ICJIeXbDpGtzeSIKKyAgICB9LAorICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAiQ2FuY2VsIjogIlBlcnV1dGEiLAorICAgICAgICAiT0siOiAiSHl2w6Rrc3kiCisgICAgfSwKKyAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIgorICAgIH0sCisgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIiwKKyAgICAgICAgIk9LIjogIkh5dsOka3N5IgorICAgIH0sCisgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIlBlcnV1dGEiCisgICAgfSwKKyAgICAiUXVpY2tUYWciOiB7CisgICAgICAgICJDYW5jZWwiOiAiUGVydXV0YSIKKyAgICB9LAorICAgICJTZXRJZCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIiwKKyAgICAgICAgIk9LIjogIkh5dsOka3N5IgorICAgIH0sCisgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgIk9LIjogIkh5dsOka3N5IgorICAgIH0sCisgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIiwKKyAgICAgICAgIk9LIjogIkh5dsOka3N5IgorICAgIH0sCisgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICJDYW5jZWwiOiAiUGVydXV0YSIsCisgICAgICAgICJPSyI6ICJIeXbDpGtzeSIKKyAgICB9LAorICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICJBbGwgZm91ciBzaWRlcyI6ICJLYWlra2kgbmVsasOkIHNpdnVhIiwKKyAgICAgICAgIkJvcmRlcnMiOiAiUmV1bmF0IiwKKyAgICAgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIiwKKyAgICAgICAgIkNhcHRpb24iOiAiT3RzaWtrbyIsCisgICAgICAgICJDZWxsIFByb3BlcnRpZXMiOiAiU29sdW4gYXNldHVrc2V0IiwKKyAgICAgICAgIkNlbGwgcHJvcGVydGllcyI6ICJTb2x1biBhc2V0dWtzZXQiLAorICAgICAgICAiRGVsZXRlIGNlbGwiOiAiUG9pc3RhIHNvbHUiLAorICAgICAgICAiRGVsZXRlIGNvbHVtbiI6ICJQb2lzdGEgc2FyYWtlIiwKKyAgICAgICAgIkRlbGV0ZSByb3ciOiAiUG9pc3RhIHJpdmkiLAorICAgICAgICAiRGVzY3JpcHRpb24iOiAiS3V2YXVzIiwKKyAgICAgICAgIkZyYW1lcyI6ICJLZWh5a3NldCIsCisgICAgICAgICJJbnNlcnQgY2VsbCBhZnRlciI6ICJMaXPDpMOkIHNvbHUgcGVyw6TDpG4iLAorICAgICAgICAiSW5zZXJ0IGNlbGwgYmVmb3JlIjogIkxpc8Okw6Qgc29sdSBlbm5lbiIsCisgICAgICAgICJJbnNlcnQgY29sdW1uIGFmdGVyIjogIkxpc8Okw6Qgc2FyYWtlIHBlcsOkw6RuIiwKKyAgICAgICAgIkluc2VydCBjb2x1bW4gYmVmb3JlIjogIkxpc8Okw6Qgc2FyYWtlIGVubmVuIiwKKyAgICAgICAgIkluc2VydCByb3cgYWZ0ZXIiOiAiTGlzw6TDpCByaXZpIGFsYXB1b2xlbGxlIiwKKyAgICAgICAgIkluc2VydCByb3cgYmVmb3JlIjogIkxpc8Okw6Qgcml2aSB5bMOkcHVvbGVsbGUiLAorICAgICAgICAiTWVyZ2UgY2VsbHMiOiAiWWhkaXN0w6Qgc29sdXQiLAorICAgICAgICAiTm8gcnVsZXMiOiAiRWkgdmlpdm9qYSIsCisgICAgICAgICJObyBzaWRlcyI6ICJFaSBzaXZ1amEiLAorICAgICAgICAiT0siOiAiSHl2w6Rrc3kiLAorICAgICAgICAiUGFkZGluZyI6ICJQYWxzdGFudMOkeXRlIiwKKyAgICAgICAgIlJvdyBQcm9wZXJ0aWVzIjogIlJpdmluIGFzZXR1a3NldCIsCisgICAgICAgICJSb3cgcHJvcGVydGllcyI6ICJSaXZpbiBhc2V0dWtzZXQiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICJWaWl2YXQgam9rYWlzZW4gcml2aW4gamEgc2FyYWtrZWVuIHbDpGxpbGzDpCIsCisgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGNvbHVtbnMgb25seSI6ICJWaWl2YXQgYWlub2FzdGFhbiBzYXJha2tlaWRlbiB2w6RsaWxsw6QiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiByb3dzIG9ubHkiOiAiVmlpdmF0IGFpbm9hc3RhYW4gcml2aWVuIHbDpGxpbGzDpCIsCisgICAgICAgICJTcGFjaW5nIjogIlBhbHN0YXRpbGEiLAorICAgICAgICAiU3BsaXQgY29sdW1uIjogIkphYSBzYXJha2UiLAorICAgICAgICAiU3BsaXQgcm93IjogIkphYSByaXZpIiwKKyAgICAgICAgIlN1bW1hcnkiOiAiWWh0ZWVudmV0byIsCisgICAgICAgICJUYWJsZSBQcm9wZXJ0aWVzIjogIlRhdWx1a29uIGFzZXR1a3NldCIsCisgICAgICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogIlRhdWx1a29uIGFzZXR1a3NldCIsCisgICAgICAgICJUaGUgYm90dG9tIHNpZGUgb25seSI6ICJBaW5vYXN0YWFuIGFsYXB1b2xlbGxlIiwKKyAgICAgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIkFpbm9hc3RhYW4gdmFzZW5yZXVuYSIsCisgICAgICAgICJUaGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb25seSI6ICJPaWtlYS0gamEgdmFzZW5yZXVuYSIsCisgICAgICAgICJUaGUgcmlnaHQtaGFuZCBzaWRlIG9ubHkiOiAiQWlub2FzdGFhbiBvaWtlYXJldW5hIiwKKyAgICAgICAgIlRoZSB0b3AgYW5kIGJvdHRvbSBzaWRlcyBvbmx5IjogIllsw6QtIGphIGFsYXB1b2xpLiIsCisgICAgICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICJBaW5vYXN0YWFuIHlsw6RwdW9saSIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiRWkgdm9pZGEgcG9pc3RhYSB2aWltZWlzdMOkIHNvbHVhIHJpdmlzdMOkLiIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjb2x1bW4gaW4gdGFibGUuIjogIkVpIHZvaWRhIHBvaXN0YWEgdmlpbWVpc3TDpCBzYXJha2V0dGEgdGF1bHVzdGEuIiwKKyAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iOiAiRWkgdm9pZGEgcG9pc3RhYSB2aWltZWlzdMOkIHJpdmnDpCB0YXVsdXN0YS4iLAorICAgICAgICAicGl4ZWxzIjogInBpa3NlbGnDpCIKKyAgICB9LAorICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIgorICAgIH0sCisgICAgIlVuRm9ybWF0IjogeworICAgICAgICAiQ2FuY2VsIjogIlBlcnV1dGEiLAorICAgICAgICAiT0siOiAiSHl2w6Rrc3kiCisgICAgfSwKKyAgICAiWGluaGEiOiB7CisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJUaWV0b2phIGVkaXRvcmlzdGEiLAorICAgICAgICAiQmFja2dyb3VuZCBDb2xvciI6ICJUYXVzdGF2w6RyaSIsCisgICAgICAgICJCb2xkIjogIkxpaGF2b2l0dSIsCisgICAgICAgICJCdWxsZXRlZCBMaXN0IjogIkx1ZXR0ZWxvbWVya2l0IiwKKyAgICAgICAgIkNvcHkgc2VsZWN0aW9uIjogIktvcGlvaSBtYWFsYXR0dSIsCisgICAgICAgICJDdXJyZW50IHN0eWxlIjogIk55a3lpbmVuIHR5eWxpIiwKKyAgICAgICAgIkN1dCBzZWxlY3Rpb24iOiAiTGVpa2thYSBtYWFsYXR0dSIsCisgICAgICAgICJEZWNyZWFzZSBJbmRlbnQiOiAiUGllbmVubsOkIHNpc2VubnlzdMOkIiwKKyAgICAgICAgIkZvbnQgQ29sb3IiOiAiRm9udGluIHbDpHJpIiwKKyAgICAgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIk7DpHl0w6Qgb2hqZSIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiVmFha2F2aWl2YSIsCisgICAgICAgICJJbmNyZWFzZSBJbmRlbnQiOiAiTGlzw6TDpCBzaXNlbm55c3TDpCIsCisgICAgICAgICJJbnNlcnQgVGFibGUiOiAiTGlzw6TDpCB0YXVsdWtrbyIsCisgICAgICAgICJJbnNlcnQgV2ViIExpbmsiOiAiTGlzw6TDpCBsaW5ra2kiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJMaXPDpMOkIGt1dmEiLAorICAgICAgICAiSXRhbGljIjogIkt1cnNpdm9pdHUiLAorICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiS2Vza2l0w6QiLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIlRhc2FhIG1vbGVtbWF0IHJldW5hdCIsCisgICAgICAgICJKdXN0aWZ5IExlZnQiOiAiVGFzYWEgdmFzZW1tYXQgcmV1bmF0IiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiVGFzYWEgb2lrZWF0IHJldW5hdCIsCisgICAgICAgICJPcmRlcmVkIExpc3QiOiAiTnVtZXJvaW50aSIsCisgICAgICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJMaWl0w6QgbGVpa2VwecO2ZMOkbHTDpCIsCisgICAgICAgICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJQYWxhdXRhIHZpaW1laW5lbiB0b2ltaW50byIsCisgICAgICAgICJTdHJpa2V0aHJvdWdoIjogIllsaXZpaXZhdHR1IiwKKyAgICAgICAgIlN1YnNjcmlwdCI6ICJBbGFpbmRla3NpIiwKKyAgICAgICAgIlN1cGVyc2NyaXB0IjogIllsw6RpbmRla3NpIiwKKyAgICAgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJIVE1MLWzDpGhkZWtvb2RpIHZzIFdZU0lXWUciLAorICAgICAgICAiVW5kZXJsaW5lIjogIkFsbGV2aWl2YXR0dSIsCisgICAgICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJQZXJ1dXRhIHZpaW1laW5lbiB0b2ltaW50byIKKyAgICB9LAorICAgICJfX05FV19UUkFOU0xBVElPTlNfXyI6IHsKKyAgICAgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgICAgICJBYmJyZXZpYXRpb24iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiIiwKKyAgICAgICAgICAgICJFeHBhbnNpb246IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkFib3V0Qm94IjogeworICAgICAgICAgICAgIkNsb3NlIjogIjw8WGluaGE+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJDb3VudGVyIjogeworICAgICAgICAgICAgIi4uLiBpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIkNoYXJzIjogIiIsCisgICAgICAgICAgICAiSFRNTCI6ICIiLAorICAgICAgICAgICAgIldvcmRzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJhY3Rlck1hcCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgc3BlY2lhbCBjaGFyYWN0ZXIiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICAgICAiQ2xpY2sgYSBjb2xvci4uLiI6ICIiLAorICAgICAgICAgICAgIlNhbXBsZSI6ICIiLAorICAgICAgICAgICAgIldlYiBTYWZlOiAiOiAiIiwKKyAgICAgICAgICAgICJDbG9zZSI6ICI8PFhpbmhhPj4iCisgICAgICAgIH0sCisgICAgICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgICAgICJfRGVsZXRlIFJvdyI6ICIiLAorICAgICAgICAgICAgIl9JbWFnZSBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiX01vZGlmeSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1JlbW92ZSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1RhYmxlIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJDX2VsbCBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiQ2hlY19rIExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJDb3B5IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIGEgbGluayI6ICIiLAorICAgICAgICAgICAgIkN1cnJlbnQgVVJMIGlzIjogIiIsCisgICAgICAgICAgICAiQ3V0IjogIiIsCisgICAgICAgICAgICAiRGVfbGV0ZSBDb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgQ2VsbCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIiIsCisgICAgICAgICAgICAiSG93IGRpZCB5b3UgZ2V0IGhlcmU/IChQbGVhc2UgcmVwb3J0ISkiOiAiIiwKKyAgICAgICAgICAgICJJX25zZXJ0IFJvdyBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYWZ0ZXIgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJMaW5rIHBvaW50cyB0bzoiOiAiIiwKKyAgICAgICAgICAgICJNYWtlIGxpbl9rLi4uIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiUGFzdGUiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGVsZW1lbnQ6IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJSb193IFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBpbWFnZSBwcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIFJvdyBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlVubGluayB0aGUgY3VycmVudCBlbGVtZW50IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIiIsCisgICAgICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICIiLAorICAgICAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiIiwKKyAgICAgICAgICAgICJPdGhlciI6ICIiLAorICAgICAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICIiLAorICAgICAgICAgICAgIlRhcmdldDoiOiAiIiwKKyAgICAgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogIiIsCisgICAgICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICIiLAorICAgICAgICAgICAgIlVSTDoiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGluZyBhIGxpbmsiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRGVmaW5pdGlvbkxpc3QiOiB7CisgICAgICAgICAgICAiZGVmaW5pdGlvbiBkZXNjcmlwdGlvbiI6ICIiLAorICAgICAgICAgICAgImRlZmluaXRpb24gbGlzdCI6ICIiLAorICAgICAgICAgICAgImRlZmluaXRpb24gdGVybSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEaWFsb2dzIjogeworICAgICAgICAgICAgIlNvbWUgVGV4dCBIZXJlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkR5bmFtaWNDU1MiOiB7CisgICAgICAgICAgICAiQ2hvb3NlIHN0eWxlc2hlZXQiOiAiIiwKKyAgICAgICAgICAgICJEZWZhdWx0IjogIiIsCisgICAgICAgICAgICAiVW5kZWZpbmVkIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVkaXRUYWciOiB7CisgICAgICAgICAgICAiRWRpdCBIVE1MIGZvciBzZWxlY3RlZCB0ZXh0IjogIiIsCisgICAgICAgICAgICAiRWRpdCBUYWcgQnkgUGVnIjogIiIsCisgICAgICAgICAgICAiVGFnIEVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgICAgICIhPSI6ICIiLAorICAgICAgICAgICAgIiFpbiI6ICIiLAorICAgICAgICAgICAgIiZndDstIjogIiIsCisgICAgICAgICAgICAiJmd0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZsdDt4Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgIWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAuYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDBgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAzYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDRgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA2YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDdgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA5YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYGVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyZuYnNwO2AxYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgK3s6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC06XFwgYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Atezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgQ2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgY29zYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BsbmAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgcGlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BzaW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRhbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGltZXNgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJnF1b3Q7dGV4dCZxdW90OyI6ICIiLAorICAgICAgICAgICAgIicrZm9ybXVsYSsnIjogIiIsCisgICAgICAgICAgICAiKChuKSwoaykpIjogIiIsCisgICAgICAgICAgICAiKHgrMSkvKHgtMSkiOiAiIiwKKyAgICAgICAgICAgICIqIjogIiIsCisgICAgICAgICAgICAiKioiOiAiIiwKKyAgICAgICAgICAgICIrLSI6ICIiLAorICAgICAgICAgICAgIi0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiLSZsdDsiOiAiIiwKKyAgICAgICAgICAgICItOiI6ICIiLAorICAgICAgICAgICAgIi09IjogIiIsCisgICAgICAgICAgICAiLy8iOiAiIiwKKyAgICAgICAgICAgICIvXyI6ICIiLAorICAgICAgICAgICAgIjouIjogIiIsCisgICAgICAgICAgICAiPSZndDsiOiAiIiwKKyAgICAgICAgICAgICJAIjogIiIsCisgICAgICAgICAgICAiW1thLGJdLFtjLGRdXSI6ICIiLAorICAgICAgICAgICAgIlxcXFwiOiAiIiwKKyAgICAgICAgICAgICJcXG5DbGljayBpbiB0aGUgYm94IHRvIHVzZSB5b3VyIGtleWJvYXJkIG9yIHVzZSB0aGUgYnV0dG9uc1xcbiI6ICIiLAorICAgICAgICAgICAgIl5eIjogIiIsCisgICAgICAgICAgICAiXl5eIjogIiIsCisgICAgICAgICAgICAiX198IjogIiIsCisgICAgICAgICAgICAiX3xfIjogIiIsCisgICAgICAgICAgICAiYCE9YCI6ICIiLAorICAgICAgICAgICAgImAhaW5gIjogIiIsCisgICAgICAgICAgICAiYCZhbmQ7YCI6ICIiLAorICAgICAgICAgICAgImAmY2FwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmN1cDtgIjogIiIsCisgICAgICAgICAgICAiYCZndDstYCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0O3gmZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmb3I7YCI6ICIiLAorICAgICAgICAgICAgImAmcXVvdDt0ZXh0JnF1b3Q7YCI6ICIiLAorICAgICAgICAgICAgImAoKG4pLChrKSlgIjogIiIsCisgICAgICAgICAgICAiYCh4KzEpLyh4LTEpYCI6ICIiLAorICAgICAgICAgICAgImAqKmAiOiAiIiwKKyAgICAgICAgICAgICJgKmAiOiAiIiwKKyAgICAgICAgICAgICJgKy1gIjogIiIsCisgICAgICAgICAgICAiYC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAtJmx0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLTpgIjogIiIsCisgICAgICAgICAgICAiYC09YCI6ICIiLAorICAgICAgICAgICAgImAvL2AiOiAiIiwKKyAgICAgICAgICAgICJgL19gIjogIiIsCisgICAgICAgICAgICAiYDouYCI6ICIiLAorICAgICAgICAgICAgImA9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgQGAiOiAiIiwKKyAgICAgICAgICAgICJgW1thLGJdLFtjLGRdXWAiOiAiIiwKKyAgICAgICAgICAgICJgXFxcXGAiOiAiIiwKKyAgICAgICAgICAgICJgX198YCI6ICIiLAorICAgICAgICAgICAgImBffF9gIjogIiIsCisgICAgICAgICAgICAiYEFBYCI6ICIiLAorICAgICAgICAgICAgImBhbGVwaGAiOiAiIiwKKyAgICAgICAgICAgICJgYWxwaGFgIjogIiIsCisgICAgICAgICAgICAiYGFuZGAiOiAiIiwKKyAgICAgICAgICAgICJgYmFyYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiZXRhYCI6ICIiLAorICAgICAgICAgICAgImBDQ2AiOiAiIiwKKyAgICAgICAgICAgICJgY2NhYCI6ICIiLAorICAgICAgICAgICAgImBjaGlgIjogIiIsCisgICAgICAgICAgICAiYGRhcnJgIjogIiIsCisgICAgICAgICAgICAiYGRkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkZWxgIjogIiIsCisgICAgICAgICAgICAiYERlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGlhbW9uZGAiOiAiIiwKKyAgICAgICAgICAgICJgZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZHkvZHhgIjogIiIsCisgICAgICAgICAgICAiYEVFYCI6ICIiLAorICAgICAgICAgICAgImBlcHNpYCI6ICIiLAorICAgICAgICAgICAgImBldGFgIjogIiIsCisgICAgICAgICAgICAiYGZyYWAiOiAiIiwKKyAgICAgICAgICAgICJgR2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBncmFkYCI6ICIiLAorICAgICAgICAgICAgImBoYXJyYCI6ICIiLAorICAgICAgICAgICAgImBoQXJyYCI6ICIiLAorICAgICAgICAgICAgImBoYXRhYCI6ICIiLAorICAgICAgICAgICAgImBpZmAiOiAiIiwKKyAgICAgICAgICAgICJgaW5gIjogIiIsCisgICAgICAgICAgICAiYGludGAiOiAiIiwKKyAgICAgICAgICAgICJgaW90YWAiOiAiIiwKKyAgICAgICAgICAgICJga2FwcGFgIjogIiIsCisgICAgICAgICAgICAiYExhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBsQXJyYCI6ICIiLAorICAgICAgICAgICAgImBsYXJyYCI6ICIiLAorICAgICAgICAgICAgImBsaW1fKHgtJmd0O29vKWAiOiAiIiwKKyAgICAgICAgICAgICJgbG9nYCI6ICIiLAorICAgICAgICAgICAgImBtdWAiOiAiIiwKKyAgICAgICAgICAgICJgTk5gIjogIiIsCisgICAgICAgICAgICAiYG5uYCI6ICIiLAorICAgICAgICAgICAgImBub3RgIjogIiIsCisgICAgICAgICAgICAiYG51YCI6ICIiLAorICAgICAgICAgICAgImBvK2AiOiAiIiwKKyAgICAgICAgICAgICJgby5gIjogIiIsCisgICAgICAgICAgICAiYE8vYCI6ICIiLAorICAgICAgICAgICAgImBvaW50YCI6ICIiLAorICAgICAgICAgICAgImBvbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgT21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYG9vYCI6ICIiLAorICAgICAgICAgICAgImBvcmAiOiAiIiwKKyAgICAgICAgICAgICJgb3hgIjogIiIsCisgICAgICAgICAgICAiYHBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGhpYCI6ICIiLAorICAgICAgICAgICAgImBQaWAiOiAiIiwKKyAgICAgICAgICAgICJgcGlgIjogIiIsCisgICAgICAgICAgICAiYHByb2RgIjogIiIsCisgICAgICAgICAgICAiYHByb3BgIjogIiIsCisgICAgICAgICAgICAiYFBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgcHNpYCI6ICIiLAorICAgICAgICAgICAgImBRUWAiOiAiIiwKKyAgICAgICAgICAgICJgcXVhZGAiOiAiIiwKKyAgICAgICAgICAgICJgckFycmAiOiAiIiwKKyAgICAgICAgICAgICJgcmhvYCI6ICIiLAorICAgICAgICAgICAgImByb290KG4pKHgpYCI6ICIiLAorICAgICAgICAgICAgImBSUmAiOiAiIiwKKyAgICAgICAgICAgICJgc2ZhYCI6ICIiLAorICAgICAgICAgICAgImBTaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgc2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYHNxcnQoeClgIjogIiIsCisgICAgICAgICAgICAiYHNxdWFyZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3RhY2tyZWwoLSZndDspKCspYCI6ICIiLAorICAgICAgICAgICAgImBzdWJgIjogIiIsCisgICAgICAgICAgICAiYHN1YmVgIjogIiIsCisgICAgICAgICAgICAiYHN1bWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwYCI6ICIiLAorICAgICAgICAgICAgImBzdXBlYCI6ICIiLAorICAgICAgICAgICAgImB0YXVgIjogIiIsCisgICAgICAgICAgICAiYFRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImB0aGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgVFRgIjogIiIsCisgICAgICAgICAgICAiYHR0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdWFycmAiOiAiIiwKKyAgICAgICAgICAgICJgdWxhYCI6ICIiLAorICAgICAgICAgICAgImB1cHNpbG9uYCI6ICIiLAorICAgICAgICAgICAgImB1dWAiOiAiIiwKKyAgICAgICAgICAgICJgdmVjYWAiOiAiIiwKKyAgICAgICAgICAgICJgdnZgIjogIiIsCisgICAgICAgICAgICAiYHhfKG1uKWAiOiAiIiwKKyAgICAgICAgICAgICJgWGlgIjogIiIsCisgICAgICAgICAgICAiYHhpYCI6ICIiLAorICAgICAgICAgICAgImB4eGAiOiAiIiwKKyAgICAgICAgICAgICJgemV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgWlpgIjogIiIsCisgICAgICAgICAgICAiYHwtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgfC0tYCI6ICIiLAorICAgICAgICAgICAgImB8PT1gIjogIiIsCisgICAgICAgICAgICAiYHxfX2AiOiAiIiwKKyAgICAgICAgICAgICJgfH5gIjogIiIsCisgICAgICAgICAgICAiYH49YCI6ICIiLAorICAgICAgICAgICAgImB+fGAiOiAiIiwKKyAgICAgICAgICAgICJgfn5gIjogIiIsCisgICAgICAgICAgICAiQUEiOiAiIiwKKyAgICAgICAgICAgICJhbGVwaCI6ICIiLAorICAgICAgICAgICAgImFscGhhIjogIiIsCisgICAgICAgICAgICAiYW5kIjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoIEZvcm11bGEgSW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGhNTCBFeGFtcGxlIjogIiIsCisgICAgICAgICAgICAiYmFyYSI6ICIiLAorICAgICAgICAgICAgIkJhc2VkIG9uIEFTQ0lJTWF0aE1MIGJ5IjogIiIsCisgICAgICAgICAgICAiYmJhIjogIiIsCisgICAgICAgICAgICAiYmJiYSI6ICIiLAorICAgICAgICAgICAgImJldGEiOiAiIiwKKyAgICAgICAgICAgICJDQyI6ICIiLAorICAgICAgICAgICAgImNjYSI6ICIiLAorICAgICAgICAgICAgImNoaSI6ICIiLAorICAgICAgICAgICAgImRhcnIiOiAiIiwKKyAgICAgICAgICAgICJkZG90YSI6ICIiLAorICAgICAgICAgICAgImRlbCI6ICIiLAorICAgICAgICAgICAgImRlbHRhIjogIiIsCisgICAgICAgICAgICAiRGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJkaWFtb25kIjogIiIsCisgICAgICAgICAgICAiZG90YSI6ICIiLAorICAgICAgICAgICAgImR5L2R4IjogIiIsCisgICAgICAgICAgICAiRUUiOiAiIiwKKyAgICAgICAgICAgICJlcHNpIjogIiIsCisgICAgICAgICAgICAiZXRhIjogIiIsCisgICAgICAgICAgICAiRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQXNjaWlNYXRoTUwgdmlzaXQgdGhpcyBwYWdlOiI6ICIiLAorICAgICAgICAgICAgIkZvcm11bGEgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiZnJhIjogIiIsCisgICAgICAgICAgICAiZ2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJHYW1tYSI6ICIiLAorICAgICAgICAgICAgImdyYWQiOiAiIiwKKyAgICAgICAgICAgICJoQXJyIjogIiIsCisgICAgICAgICAgICAiaGFyciI6ICIiLAorICAgICAgICAgICAgImhhdGEiOiAiIiwKKyAgICAgICAgICAgICJpZiI6ICIiLAorICAgICAgICAgICAgImluIjogIiIsCisgICAgICAgICAgICAiSW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJpbnQiOiAiIiwKKyAgICAgICAgICAgICJpbnRfYV5iZih4KWR4IjogIiIsCisgICAgICAgICAgICAiaW90YSI6ICIiLAorICAgICAgICAgICAgImthcHBhIjogIiIsCisgICAgICAgICAgICAiTGFtYmRhIjogIiIsCisgICAgICAgICAgICAibGFtYmRhIjogIiIsCisgICAgICAgICAgICAibGFyciI6ICIiLAorICAgICAgICAgICAgImxBcnIiOiAiIiwKKyAgICAgICAgICAgICJsaW1fKHgtJmd0O29vKSI6ICIiLAorICAgICAgICAgICAgIm11IjogIiIsCisgICAgICAgICAgICAiTk4iOiAiIiwKKyAgICAgICAgICAgICJubiI6ICIiLAorICAgICAgICAgICAgIm5ubiI6ICIiLAorICAgICAgICAgICAgIm5vdCI6ICIiLAorICAgICAgICAgICAgIm51IjogIiIsCisgICAgICAgICAgICAibysiOiAiIiwKKyAgICAgICAgICAgICJvLiI6ICIiLAorICAgICAgICAgICAgIk8vIjogIiIsCisgICAgICAgICAgICAib2ludCI6ICIiLAorICAgICAgICAgICAgIk9tZWdhIjogIiIsCisgICAgICAgICAgICAib21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJvbyI6ICIiLAorICAgICAgICAgICAgIm9yIjogIiIsCisgICAgICAgICAgICAib3giOiAiIiwKKyAgICAgICAgICAgICJwaGkiOiAiIiwKKyAgICAgICAgICAgICJQaGkiOiAiIiwKKyAgICAgICAgICAgICJwaSI6ICIiLAorICAgICAgICAgICAgIlBpIjogIiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICIiLAorICAgICAgICAgICAgInByb2QiOiAiIiwKKyAgICAgICAgICAgICJwcm9wIjogIiIsCisgICAgICAgICAgICAicHNpIjogIiIsCisgICAgICAgICAgICAiUHNpIjogIiIsCisgICAgICAgICAgICAiUVEiOiAiIiwKKyAgICAgICAgICAgICJxdWFkIjogIiIsCisgICAgICAgICAgICAickFyciI6ICIiLAorICAgICAgICAgICAgInJobyI6ICIiLAorICAgICAgICAgICAgInJvb3QobikoeCkiOiAiIiwKKyAgICAgICAgICAgICJSUiI6ICIiLAorICAgICAgICAgICAgInNmYSI6ICIiLAorICAgICAgICAgICAgInNpZ21hIjogIiIsCisgICAgICAgICAgICAiU2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJzcXJ0KHgpIjogIiIsCisgICAgICAgICAgICAic3F1YXJlIjogIiIsCisgICAgICAgICAgICAic3RhY2tyZWwoLSZndDspKCspIjogIiIsCisgICAgICAgICAgICAic3ViIjogIiIsCisgICAgICAgICAgICAic3ViZSI6ICIiLAorICAgICAgICAgICAgInN1bSI6ICIiLAorICAgICAgICAgICAgInN1bV8obj0xKV5vbyI6ICIiLAorICAgICAgICAgICAgInN1cCI6ICIiLAorICAgICAgICAgICAgInN1cGUiOiAiIiwKKyAgICAgICAgICAgICJ0YXUiOiAiIiwKKyAgICAgICAgICAgICJUaGV0YSI6ICIiLAorICAgICAgICAgICAgInRoZXRhIjogIiIsCisgICAgICAgICAgICAiVFQiOiAiIiwKKyAgICAgICAgICAgICJ0dGEiOiAiIiwKKyAgICAgICAgICAgICJ1YXJyIjogIiIsCisgICAgICAgICAgICAidWxhIjogIiIsCisgICAgICAgICAgICAidXBzaWxvbiI6ICIiLAorICAgICAgICAgICAgInV1IjogIiIsCisgICAgICAgICAgICAidXV1IjogIiIsCisgICAgICAgICAgICAidmVjYSI6ICIiLAorICAgICAgICAgICAgInZ2IjogIiIsCisgICAgICAgICAgICAidnZ2IjogIiIsCisgICAgICAgICAgICAieF4obStuKSI6ICIiLAorICAgICAgICAgICAgInhfKG1uKSI6ICIiLAorICAgICAgICAgICAgIlhpIjogIiIsCisgICAgICAgICAgICAieGkiOiAiIiwKKyAgICAgICAgICAgICJ4eCI6ICIiLAorICAgICAgICAgICAgInpldGEiOiAiIiwKKyAgICAgICAgICAgICJaWiI6ICIiLAorICAgICAgICAgICAgInwtJmd0OyI6ICIiLAorICAgICAgICAgICAgInwtLSI6ICIiLAorICAgICAgICAgICAgInw9PSI6ICIiLAorICAgICAgICAgICAgInxfXyI6ICIiLAorICAgICAgICAgICAgInx+IjogIiIsCisgICAgICAgICAgICAifj0iOiAiIiwKKyAgICAgICAgICAgICJ+fCI6ICIiLAorICAgICAgICAgICAgIn5+IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZhbmN5U2VsZWN0cyI6IHsKKyAgICAgICAgICAgICInK29wdC50ZXh0KyciOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiJztcclxuICB2YXIgdGFnYyA9ICciOiAiIiwKKyAgICAgICAgICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAiIiwKKyAgICAgICAgICAgICJDbGVhciI6ICIiLAorICAgICAgICAgICAgIkRvbmUiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgdGV4dCB5b3Ugd2FudCB0byBmaW5kIjogIiIsCisgICAgICAgICAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgImZvdW5kIGl0ZW0iOiAiIiwKKyAgICAgICAgICAgICJmb3VuZCBpdGVtcyI6ICIiLAorICAgICAgICAgICAgIkhpZ2hsaWdodCI6ICIiLAorICAgICAgICAgICAgIkluZm9ybSBhIHJlcGxhY2VtZW50IHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJOZXh0IjogIiIsCisgICAgICAgICAgICAibm90IGZvdW5kIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2Ugd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtIjogIiIsCisgICAgICAgICAgICAicmVwbGFjZWQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJTZWFyY2ggZm9yOiI6ICIiLAorICAgICAgICAgICAgIlN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IjogIiIsCisgICAgICAgICAgICAiVW5kbyI6ICIiLAorICAgICAgICAgICAgIldob2xlIHdvcmRzIG9ubHkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiRW50ZXIgdGhlIG5hbWUgZm9yIG5ldyBvcHRpb24uIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgRm9ybS4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBtdWx0aS1saW5lIHRleHQgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcmFkaW8gYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFNlbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgU2VsZWN0Li4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1zIjogeworICAgICAgICAgICAgIidvbkNsaWNrJz0iOiAiIiwKKyAgICAgICAgICAgICJBY2Nlc3MgS2V5OiI6ICIiLAorICAgICAgICAgICAgIkFjdGlvbiBVUkw6IjogIiIsCisgICAgICAgICAgICAiQnV0dG9uIFNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkNoZWNrZWQiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zOiI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQgdGV4dCAob3B0aW9uYWwpIjogIiIsCisgICAgICAgICAgICAiRGltZW5zaW9ucyI6ICIiLAorICAgICAgICAgICAgIkRpc2FibGVkIjogIiIsCisgICAgICAgICAgICAiRW5jb2Rpbmc6IjogIiIsCisgICAgICAgICAgICAiRm9yIENvbnRyb2w6IjogIiIsCisgICAgICAgICAgICAiRm9ybSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IElOUFVUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gaGFuZGxlciBzY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiR2V0IjogIiIsCisgICAgICAgICAgICAiSGFyZCI6ICIiLAorICAgICAgICAgICAgIkhlaWdodCBpbiBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkhUTUwtRm9ybSB0byBDR0kgKGRlZmF1bHQpIjogIiIsCisgICAgICAgICAgICAiSW1hZ2Ugc291cmNlIjogIiIsCisgICAgICAgICAgICAiSW5pdGlhbCBUZXh0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiSmF2YXNjcmlwdCBmb3IgYnV0dG9uIGNsaWNrIjogIiIsCisgICAgICAgICAgICAiTGFiZWw6IjogIiIsCisgICAgICAgICAgICAiTGVnZW5kOiI6ICIiLAorICAgICAgICAgICAgIk1heCBsZW5ndGg6IjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY2NlcHRlZCI6ICIiLAorICAgICAgICAgICAgIk1ldGhvZDoiOiAiIiwKKyAgICAgICAgICAgICJtdWx0aXBhcnQgRm9ybSBEYXRhIChGaWxlLVVwbG9hZCkiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gc2VsZWN0IjogIiIsCisgICAgICAgICAgICAibmFtZSBvZiB0aGUgdGV4dGFyZWEiOiAiIiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICIiLAorICAgICAgICAgICAgIm5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIm5vd3JhcCI6ICIiLAorICAgICAgICAgICAgIk9mZiI6ICIiLAorICAgICAgICAgICAgIlBoeXNpY2FsIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIGEgTGFiZWwiOiAiIiwKKyAgICAgICAgICAgICJQb3N0IjogIiIsCisgICAgICAgICAgICAicHJlIjogIiIsCisgICAgICAgICAgICAiUmVhZCBPbmx5IjogIiIsCisgICAgICAgICAgICAiUm93czoiOiAiIiwKKyAgICAgICAgICAgICJTaXplIG9mIHRleHQgYm94IGluIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJTaXplOiI6ICIiLAorICAgICAgICAgICAgIlNvZnQiOiAiIiwKKyAgICAgICAgICAgICJUYWIgSW5kZXg6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IEZyYW1lOiI6ICIiLAorICAgICAgICAgICAgIlRleHQ6IjogIiIsCisgICAgICAgICAgICAiVVJMIG9mIGltYWdlIjogIiIsCisgICAgICAgICAgICAiVmFsdWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZToiOiAiIiwKKyAgICAgICAgICAgICJWaXJ0dWFsIjogIiIsCisgICAgICAgICAgICAiV2lkdGggaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJXcmFwIE1vZGU6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBOYW1lIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iCisgICAgICAgIH0sCisgICAgICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgICAgICIuLi4iOiAiIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgc3R5bGUtc2hlZXQ6IjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZCBjb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJDaGFyYWN0ZXIgc2V0OiI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChJU08tODg1OS01KSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChLT0k4LVIpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKFdJTkRPV1MtMTI1MSkiOiAiIiwKKyAgICAgICAgICAgICJET0NUWVBFOiI6ICIiLAorICAgICAgICAgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCB0aXRsZToiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkczoiOiAiIiwKKyAgICAgICAgICAgICJQcmltYXJ5IHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIlRleHQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiVVRGLTggKHJlY29tbWVuZGVkKSI6ICIiLAorICAgICAgICAgICAgIndlc3Rlcm4gKElTTy04ODU5LTEpIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bGxTY3JlZW4iOiB7CisgICAgICAgICAgICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkdlY2tvIjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJIb3Jpem9udGFsUnVsZSI6IHsKKyAgICAgICAgICAgICImI3gwMGQ3OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgSG9yaXpvbnRhbCBSdWxlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L2VkaXQgaG9yaXpvbnRhbCBydWxlIjogIiIsCisgICAgICAgICAgICAiTm8gc2hhZGluZyI6ICIiLAorICAgICAgICAgICAgIlN0eWxlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgICAgICJDU1MgU3R5bGUiOiAiIiwKKyAgICAgICAgICAgICJGbG9hdCI6ICIiLAorICAgICAgICAgICAgIkp1c3RpZnkiOiAiIiwKKyAgICAgICAgICAgICJOb25lIjogIiIsCisgICAgICAgICAgICAiVGV4dCBhbGlnbiI6ICIiLAorICAgICAgICAgICAgIi0iOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJIZWlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAgICAgIkFuY2hvciBuYW1lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEFuY2hvciI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICAgICAiQWJzYm90dG9tIjogIiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiIiwKKyAgICAgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICIiLAorICAgICAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIkhvcml6b250YWw6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICIiLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIlZlcnRpY2FsOiI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiIiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAgICAgIkluc2VydCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBmb290bm90ZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBOb3RlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBhZ2VicmVhayI6IHsKKyAgICAgICAgICAgICJQYWdlIGJyZWFrIjogIiIsCisgICAgICAgICAgICAiUGFnZSBCcmVhayI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbWlsZXkiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IFNtaWxleSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0IjogeworICAgICAgICAgICAgIlxcbiAgVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmdcXG4iOiAiIiwKKyAgICAgICAgICAgICJIaWRlIHByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgU25pcHBldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIiIsCisgICAgICAgICAgICAiTGluazEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMiI6ICIiLAorICAgICAgICAgICAgIkxpbmszIjogIiIsCisgICAgICAgICAgICAiTGluazQiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNSI6ICIiLAorICAgICAgICAgICAgIlNob3cgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nIjogIiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldDIiOiB7CisgICAgICAgICAgICAiQWxsIENhdGVnb3JpZXMiOiAiIiwKKyAgICAgICAgICAgICJGaWx0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMgSFRNTCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyB0ZW1wbGF0ZSB2YXJpYWJsZSI6ICIiLAorICAgICAgICAgICAgIk9ubHkgc2VhcmNoIHdvcmQgYmVnaW5uaW5nIjogIiIsCisgICAgICAgICAgICAiSFRNTCI6ICI8PENoYXJDb3VudGVyPj4iLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICI8PEluc2VydFNuaXBwZXQ+PiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgICAgICJDYXB0aW9uIGZvciB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIHBhZGRpbmc6IjogIiIsCisgICAgICAgICAgICAiQ2VsbCBzcGFjaW5nOiI6ICIiLAorICAgICAgICAgICAgIkNvbGxhcHNlIGJvcmRlcnM6IjogIiIsCisgICAgICAgICAgICAiQ29sczoiOiAiIiwKKyAgICAgICAgICAgICJFbSI6ICIiLAorICAgICAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJMYXlvdSI6ICIiLAorICAgICAgICAgICAgIk51bWJlciBvZiBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICIiLAorICAgICAgICAgICAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSBvZiB0aGUgYm9yZGVyIjogIiIsCisgICAgICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiV2lkdGggdW5pdCI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJSb3dzOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IgorICAgICAgICB9LAorICAgICAgICAiTGFuZ01hcmtzIjogeworICAgICAgICAgICAgIiZtZGFzaDsgbGFuZ3VhZ2UgJm1kYXNoOyI6ICIiLAorICAgICAgICAgICAgIicsICciOiAiIiwKKyAgICAgICAgICAgICJFbmdsaXNoIjogIiIsCisgICAgICAgICAgICAiRnJlbmNoIjogIiIsCisgICAgICAgICAgICAiR3JlZWsiOiAiIiwKKyAgICAgICAgICAgICJsYW5ndWFnZSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJMYXRpbiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJMaW5rZXIiOiB7CisgICAgICAgICAgICAiKHB4KSI6ICIiLAorICAgICAgICAgICAgIkFuY2hvci1MaW5rIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIEFkZHJlc3M6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgTGluayI6ICIiLAorICAgICAgICAgICAgIkxvY2F0aW9uIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZW51IEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFRlbXBsYXRlOiI6ICIiLAorICAgICAgICAgICAgIk5ldyBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcmRpbmFyeSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUG9wdXAgV2luZG93IjogIiIsCisgICAgICAgICAgICAiUG9wdXBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgTGluayI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZWFibGU6IjogIiIsCisgICAgICAgICAgICAiU2FtZSBXaW5kb3cgKGp1bXAgb3V0IG9mIGZyYW1lcykiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGxiYXJzOiI6ICIiLAorICAgICAgICAgICAgIlNob3dzIE9uIEhvdmVyIjogIiIsCisgICAgICAgICAgICAiU3RhdHVzIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJTdWJqZWN0OiI6ICIiLAorICAgICAgICAgICAgIlRpdGxlOiI6ICIiLAorICAgICAgICAgICAgIlRvb2xiYXI6IjogIiIsCisgICAgICAgICAgICAiVVJMIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiIiwKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTmFtZToiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTaXplOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlRhcmdldDoiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIlVSTDoiOiAiPDxDcmVhdGVMaW5rPj4iCisgICAgICAgIH0sCisgICAgICAgICJMaXN0VHlwZSI6IHsKKyAgICAgICAgICAgICJDaG9vc2UgbGlzdCBzdHlsZSB0eXBlIChmb3Igb3JkZXJlZCBsaXN0cykiOiAiIiwKKyAgICAgICAgICAgICJEZWNpbWFsIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciBncmVlayBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgbGF0aW4gbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIHJvbWFuIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJVcHBlciBsYXRpbiBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiVXBwZXIgcm9tYW4gbnVtYmVycyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJNb290b29sc0ZpbGVNYW5hZ2VyIjogeworICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk9wZXJhIjogeworICAgICAgICAgICAgIk1BUksiOiAiIiwKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgdGV4dCBpbiBuZXcgcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiUGFzdGUgYXMgUGxhaW4gVGV4dCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQcmVzZXJ2ZVNjcmlwdHMiOiB7CisgICAgICAgICAgICAiSmF2YVNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIlBIUCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgICAgICInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnY2wnOiAnIjogIiIsCisgICAgICAgICAgICAiQVRUUklCVVRFUyI6ICIiLAorICAgICAgICAgICAgIkNvbG9ycyI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSBUQUcgeW91IHdhbnQgdG8gaW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiTm8gQ1NTIGNsYXNzIGF2YWlhYmxlIjogIiIsCisgICAgICAgICAgICAiT2siOiAiIiwKKyAgICAgICAgICAgICJPUFRJT05TIjogIiIsCisgICAgICAgICAgICAiUXVpY2sgVGFnIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlRBR3MiOiAiIiwKKyAgICAgICAgICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBUQUciOiAiIiwKKyAgICAgICAgICAgICJZb3UgaGF2ZSB0byBzZWxlY3Qgc29tZSB0ZXh0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNhdmVTdWJtaXQiOiB7CisgICAgICAgICAgICAiaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAgICAgICAgICJSZWFkeSI6ICIiLAorICAgICAgICAgICAgIlNhdmUiOiAiIiwKKyAgICAgICAgICAgICJTYXZpbmcuLi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiU2V0SWQiOiB7CisgICAgICAgICAgICAiSUQvTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQgYW5kIE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQvTmFtZSI6ICIiLAorICAgICAgICAgICAgIlNldCBJRC9OYW1lIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiQ2xvc2luZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIkNsb3NpbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIkNvbnZlcnQgYWxsIHF1b3RlcyBhbmQgZGFzaGVzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIGF1dG9tYXRpYyByZXBsYWNlbWVudHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN0eWxpc3QiOiB7CisgICAgICAgICAgICAiU3R5bGVzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBTZWxlY3Rpb24gT25seSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIHVwIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBTY29wZSI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYWwgdGlkeSB1cCBhbmQgY29ycmVjdGlvbiBvZiBzb21lIHByb2JsZW1zLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzZWxlY3QgZnJvbSB0aGUgZm9sbG93aW5nIGNsZWFuaW5nIG9wdGlvbnMuLi4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc3RhbmQgYnkgd2hpbGUgY2xlYW5pbmcgaW4gcHJvY2Vzcy4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGlnbm1lbnQgKGxlZnQvcmlnaHQvanVzdGlmeSkuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBjbGFzc2VzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBBbGwgSFRNTCBUYWdzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBzdHlsZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0eXBlZmFjZXMgKGZvbnQgXCJzdHlsZXNcIikuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGVtcGhhc2lzIGFuZCBhbm5vdGF0aW9ucy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgbGFuZyBhdHRyaWJ1dGVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBQYXJhZ3JhcGhzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cy4iOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzIHdpdGggbm9uLWRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzLiI6ICIiLAorICAgICAgICAgICAgIlZpZ29yb3VzbHkgcHVyZ2UgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiQ2VsbCBUeXBlOiI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIGRvd24iOiAiIiwKKyAgICAgICAgICAgICJDZWxscyB0byB0aGUgcmlnaHQsIGFuZCI6ICIiLAorICAgICAgICAgICAgIkRvIE5vdCBDaGFuZ2UiOiAiIiwKKyAgICAgICAgICAgICJGcmFtZSBhbmQgYm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkhlYWRlciAodGgpIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY3VycmVudCBjZWxsIHdpdGg6IjogIiIsCisgICAgICAgICAgICAiTm9ybWFsICh0ZCkiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiQ29sdW1ucyI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiUm93cyI6ICI8PEZvcm1zPj4iCisgICAgICAgIH0sCisgICAgICAgICJVbnNhdmVkQ2hhbmdlcyI6IHsKKyAgICAgICAgICAgICJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhlIGVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJXZWJLaXQiOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIjw8R2Vja28+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlhpbmhhIjogeworICAgICAgICAgICAgIiYjODIxMjsgZm9udCAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIiYjODIxMjsgc2l6ZSAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiMSAoOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIyICgxMCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIzICgxMiBwdCkiOiAiIiwKKyAgICAgICAgICAgICI0ICgxNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI1ICgxOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI2ICgyNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI3ICgzNiBwdCkiOiAiIiwKKyAgICAgICAgICAgICJBZGRyZXNzIjogIiIsCisgICAgICAgICAgICAiQXJpYWwiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBjb250ZW50IHBhc3RlZCBmcm9tIFdvcmQiOiAiIiwKKyAgICAgICAgICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiIiwKKyAgICAgICAgICAgICJDbG9zZSI6ICIiLAorICAgICAgICAgICAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAiIiwKKyAgICAgICAgICAgICJDb3VyaWVyIE5ldyI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBTdGF0dXNiYXIiOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgVG9vbGJhciI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMCAoemVybykiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTEgLi4gQ1RSTC02IjogIiIsCisgICAgICAgICAgICAiQ1RSTC1BIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1CIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1DIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1FIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1JIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1KIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1MIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1OIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1SIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1TIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1VIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1WIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1YIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1ZIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1aIjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICIiLAorICAgICAgICAgICAgIkVkaXRvciBIZWxwIjogIiIsCisgICAgICAgICAgICAiRU5URVIiOiAiIiwKKyAgICAgICAgICAgICJFcnJvciBMb2FkaW5nIFhpbmhhLiAgRGV2ZWxvcGVycywgY2hlY2sgdGhlIEVycm9yIENvbnNvbGUgZm9yIGluZm9ybWF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGluZyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdHRlZCI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYXRlIFhpbmhhIGZyYW1ld29yayI6ICIiLAorICAgICAgICAgICAgIkdlb3JnaWEiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDEiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDIiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDMiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDQiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDUiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDYiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5ncyI6ICIiLAorICAgICAgICAgICAgIkltcGFjdCI6ICIiLAorICAgICAgICAgICAgIkluaXQgZWRpdG9yIHNpemUiOiAiIiwKKyAgICAgICAgICAgICJpbnNlcnQgbGluZWJyZWFrIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICIiLAorICAgICAgICAgICAgIktleWJvYXJkIHNob3J0Y3V0cyI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgQ29yZSI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ISI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbnMiOiAiIiwKKyAgICAgICAgICAgICJNUyBXb3JkIENsZWFuZXIiOiAiIiwKKyAgICAgICAgICAgICJuZXcgcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiTm9ybWFsIjogIiIsCisgICAgICAgICAgICAiUGF0aCI6ICIiLAorICAgICAgICAgICAgIlByaW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICIiLAorICAgICAgICAgICAgIlNhdmUgYXMiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgYWxsIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IENvbG9yIjogIiIsCisgICAgICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJTSElGVC1FTlRFUiI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IEJsb2NrIjogIiIsCisgICAgICAgICAgICAiVGFob21hIjogIiIsCisgICAgICAgICAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogIiIsCisgICAgICAgICAgICAiVGltZXMgTmV3IFJvbWFuIjogIiIsCisgICAgICAgICAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJUb3VjaCBoZXJlIGZpcnN0IHRvIGFjdGl2YXRlIGVkaXRvci4iOiAiIiwKKyAgICAgICAgICAgICJWZXJkYW5hIjogIiIsCisgICAgICAgICAgICAiV2FpdGluZyBmb3IgSWZyYW1lIHRvIGxvYWQuLi4iOiAiIiwKKyAgICAgICAgICAgICJXaW5nRGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIiIsCisgICAgICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSI6ICIiLAorICAgICAgICAgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiUmVtb3ZlIEN1cnJlbnQgQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIlNldCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IHBhZ2UgYmFja2dyb3VuZCBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlNldCBQYWdlIEJhY2tncm91bmQgSW1hZ2UiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2xpZW50c2lkZVNwZWxsY2hlY2siOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVjayB1c2luZyBpZVNwZWxsIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEwJSI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiIiwKKyAgICAgICAgICAgICIyMDAlIjogIiIsCisgICAgICAgICAgICAiMjUlIjogIiIsCisgICAgICAgICAgICAiNTAlIjogIiIsCisgICAgICAgICAgICAiNzUlIjogIiIsCisgICAgICAgICAgICAiPkxpc3QgVmlldyI6ICIiLAorICAgICAgICAgICAgIj5UaHVtYm5haWwgVmlldyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIiIsCisgICAgICAgICAgICAiQWx0IjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIENvbG9yIjogIiIsCisgICAgICAgICAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIiIsCisgICAgICAgICAgICAiQ3JvcCI6ICIiLAorICAgICAgICAgICAgIkQ6IjogIiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IjogIiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIiIsCisgICAgICAgICAgICAiRWRpdCI6ICIiLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZpbGUgTWFuYWdlciI6ICIiLAorICAgICAgICAgICAgIkZpbGVuYW1lOiI6ICIiLAorICAgICAgICAgICAgIkZpbGVzaXplOiI6ICIiLAorICAgICAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICIiLAorICAgICAgICAgICAgIkZsaXAgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIiIsCisgICAgICAgICAgICAiRm9sZGVyIjogIiIsCisgICAgICAgICAgICAiR0lGIjogIiIsCisgICAgICAgICAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIiIsCisgICAgICAgICAgICAiSDoiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICIiLAorICAgICAgICAgICAgIkpQRUcgSGlnaCI6ICIiLAorICAgICAgICAgICAgIkpQRUcgTG93IjogIiIsCisgICAgICAgICAgICAiSlBFRyBNZWRpdW0iOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIjogIiIsCisgICAgICAgICAgICAiTG9jayI6ICIiLAorICAgICAgICAgICAgIk1hcmtlciI6ICIiLAorICAgICAgICAgICAgIk1heGltdW0gZm9sZGVyIHNpemUgbGltaXQgcmVhY2hlZC4gVXBsb2FkIGRpc2FibGVkLiI6ICIiLAorICAgICAgICAgICAgIk1lYXN1cmUiOiAiIiwKKyAgICAgICAgICAgICJOZXcgRm9sZGVyIjogIiIsCisgICAgICAgICAgICAiTm8gRmlsZXMgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgdmFsdWUiOiAiIiwKKyAgICAgICAgICAgICJQTkciOiAiIiwKKyAgICAgICAgICAgICJQcmVzZXQiOiAiIiwKKyAgICAgICAgICAgICJRdWFsaXR5OiI6ICIiLAorICAgICAgICAgICAgIlJlZnJlc2giOiAiIiwKKyAgICAgICAgICAgICJSZW5hbWUiOiAiIiwKKyAgICAgICAgICAgICJSZXNpemUiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENDVyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIlN0YXJ0IFg6IjogIiIsCisgICAgICAgICAgICAiU3RhcnQgWToiOiAiIiwKKyAgICAgICAgICAgICJUYXJnZXQgV2luZG93IjogIiIsCisgICAgICAgICAgICAiVG9nZ2xlIG1hcmtlciBjb2xvciI6ICIiLAorICAgICAgICAgICAgIlRyYXNoIjogIiIsCisgICAgICAgICAgICAiVXBsb2FkIjogIiIsCisgICAgICAgICAgICAiVzoiOiAiIiwKKyAgICAgICAgICAgICJYOiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIEltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlk6IjogIiIsCisgICAgICAgICAgICAiWm9vbSI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkNsZWFyIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiQ29weSI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkN1dCI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkhlaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIjw8TW9vdG9vbHNGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIlNhdmUiOiAiPDxTYXZlU3VibWl0Pj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUaXRsZSAodG9vbHRpcCkiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiRmlsdGVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbHRlciI6ICI8PEluc2VydFNuaXBwZXQyPj4iCisgICAgICAgIH0sCisgICAgICAgICJIdG1sVGlkeSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEhUTUxUSURZIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkF1dG8tVGlkeSI6ICIiLAorICAgICAgICAgICAgIkRvbid0IFRpZHkiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIFRpZHkiOiAiIiwKKyAgICAgICAgICAgICJUaWR5IGZhaWxlZC4gIENoZWNrIHlvdXIgSFRNTCBmb3Igc3ludGF4IGVycm9ycy4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFuZ2xlOiI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgUGljdHVyZXMiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFVzZXJuYW1lL0VtYWlsIjogIiIsCisgICAgICAgICAgICAiRm9sZGVyIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgTGlzdCI6ICIiLAorICAgICAgICAgICAgIktleXdvcmQiOiAiIiwKKyAgICAgICAgICAgICJObyBJbWFnZXMgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBQaG90b3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBWaWRlb3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIFNlcnZlciI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBVc2VybmFtZSI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW8gTGlzdCI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW9zIjogIiIsCisgICAgICAgICAgICAiQToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkNsZWFyIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJDcm9wIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkVkaXQiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGVuYW1lOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIEltYWdlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgSGlnaCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgTWVkaXVtIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJMb2NrIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJNYXJrZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1lYXN1cmUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlBORyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZXNpemUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlNhdmUiOiAiPDxTYXZlU3VibWl0Pj4iLAorICAgICAgICAgICAgIlN0YXJ0IFg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTdGFydCBZOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRyYXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJXOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJCZWhhdmlvcjoiOiAiIiwKKyAgICAgICAgICAgICJDb250aW51b3VzIjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uOiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBzY3JvbGxpbmcgbWFycXVlZSI6ICIiLAorICAgICAgICAgICAgIk1hcnF1ZWUgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIEFtb3VudDoiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgRGVsYXk6IjogIiIsCisgICAgICAgICAgICAiU2xpZGUiOiAiIiwKKyAgICAgICAgICAgICJTcGVlZCBDb250cm9sIjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk5hbWUiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlRleHQ6IjogIjw8Rm9ybXM+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBub3QgZGVmaW5lZCI6ICIiLAorICAgICAgICAgICAgIk9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiIE9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiVXBsb2FkIGZpbGUiOiAiIiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlNpemUiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlZlcnRpY2FsOiI6ICI8PEluc2VydEltYWdlPj4iCisgICAgICAgIH0sCisgICAgICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIxMjAlIjogIiIsCisgICAgICAgICAgICAiMTUwJSI6ICIiLAorICAgICAgICAgICAgIjgwJSI6ICIiLAorICAgICAgICAgICAgIkFkZCBHVUlETyBDb2RlIGluIGEgdGV4dGJveCBvbiB0aGUgcGFnZSI6ICIiLAorICAgICAgICAgICAgIkFkZCBNSURJIGxpbmsgdG8gYWxsb3cgc3R1ZGVudHMgdG8gaGVhciB0aGUgbXVzaWMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJHVUlETyBDb2RlIjogIiIsCisgICAgICAgICAgICAiR3VpZG8gY29kZSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIGluIGFwcGxldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBHVUlETyBNdXNpYyBOb3RhdGlvbiI6ICIiLAorICAgICAgICAgICAgIk1JREkgRmlsZSI6ICIiLAorICAgICAgICAgICAgIlNvdXJjZSBDb2RlIjogIiIsCisgICAgICAgICAgICAiV2l0aCBNb3ppbGxhLCB0aGUgYXBwbGV0IHdpbGwgbm90IGJlIHZpc2libGUgaW4gZWRpdG9yLCBidXQgb25seSBpbiBXZWIgcGFnZSBhZnRlciBzdWJtaXR0aW5nLiI6ICIiLAorICAgICAgICAgICAgIlpvb20gOiI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIFByZXZpZXciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJPcHRpb25zIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlpvb20iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJQU0xvY2FsIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNMT0NBTCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJDb25maXJtIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIEdlYXJzIGluIG9yZGVyIHRvIHVzZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlIGFuZCBjb25maWd1cmF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkVuYWJsaW5nIExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJJbnN0YWxsIjogIiIsCisgICAgICAgICAgICAiTGVhcm4gQWJvdXQgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCByZWxvYWQgdGhlIHBhZ2UsIGNhdXNpbmcgeW91IHRvIGxvc2UgYW55IHVuc2F2ZWQgd29yay4gIFByZXNzIFwiT0tcIiB0byByZWxvYWQuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgdXNlcyBHb29nbGUgR2VhcnMgdG8gZW5hYmxlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UuICBXaXRoIEdlYXJzIGluc3RhbGxlZCwgeW91IGNhbiBzYXZlIGRyYWZ0cyBvZiB5b3VyIGRvY3VtZW50cyBvbiB5b3VyIGhhcmQgZHJpdmUsIGNvbmZpZ3VyZSBYaW5oYSB0byBsb29rIHRoZSB3YXkgeW91IHdhbnQsIGFuZCBjYXJyeSB0aGlzIGluZm9ybWF0aW9uIHdoZXJldmVyIHlvdSB1c2UgWGluaGEgb24gdGhlIHdlYi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiUFNTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU1NFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWxlOiAiOiAiIiwKKyAgICAgICAgICAgICJJbXBvcnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEZXRhaWxzIjogIiIsCisgICAgICAgICAgICAiRmlsZSBCcm93c2VyIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gICAgVGhlcmUgQyAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgVGhlcmUgQSAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyBcIiBUaGVyZSBCIFwiIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gJyBUaGVyZSBEICciOiAiIiwKKyAgICAgICAgICAgICJMaXN0IG9mIFBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIk5ldyBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIk9wZW4iOiAiIiwKKyAgICAgICAgICAgICJPcGVuIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgeW91J2QgbGlrZSB0byBjcmVhdGUuIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBlcmFzZSBhbnkgdW5zYXZlZCBjb250ZW50LiAgSWYgeW91J3JlIGNlcnRhaW4sIHBsZWFzZSBjbGljayBPSyB0byBjb250aW51ZS4iOiAiIiwKKyAgICAgICAgICAgICJXZWIgVVJMIjogIiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICI8PFBTTG9jYWw+PiIsCisgICAgICAgICAgICAiQ29weSI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlbmFtZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IjogIjw8SW5zZXJ0Tm90ZT4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJOZXcgRm9sZGVyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEaWN0aW9uYXJ5IjogIiIsCisgICAgICAgICAgICAiRmluaXNoZWQgbGlzdCBvZiBtaXNwZWxsZWQgd29yZHMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MQXJlYSBTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiSSB3aWxsIG9wZW4gaXQgaW4gYSBuZXcgcGFnZS4iOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUiOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUgYWxsIjogIiIsCisgICAgICAgICAgICAiSW5mbyI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIjogIiIsCisgICAgICAgICAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIiIsCisgICAgICAgICAgICAiT3JpZ2luYWwgd29yZCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gb3BlbiB0aGlzIGxpbmsiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdDogY2hhbmdpbmcgZGljdGlvbmFyeSB0byI6ICIiLAorICAgICAgICAgICAgInBsaXogd2VpdCA7LSkiOiAiIiwKKyAgICAgICAgICAgICJSZS1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGFsbCI6ICIiLAorICAgICAgICAgICAgIlJldmVydCI6ICIiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrZXIiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbC1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlN1Z2dlc3Rpb25zIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSB3aXRoIjogIjw8RmluZFJlcGxhY2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlRlbXBsYXRlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiSW5zZXJ0IHRlbXBsYXRlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuRm9ybWF0IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWxsIjogIiIsCisgICAgICAgICAgICAiQWxsIEhUTUw6IjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgQXJlYSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIG9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0aW5nOiI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCB3aGljaCB0eXBlcyBvZiBmb3JtYXR0aW5nIHlvdSB3b3VsZCBsaWtlIHRvIHJlbW92ZS4iOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Rpb24iOiAiIgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvZnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkOTc4ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2ZyLmpzCkBAIC0wLDAgKzEsMTU3MCBAQAorLy8gWGluaGEgTGFuZ3VhZ2UgQ29tYmluZWQgVHJhbnNsYXRpb24gRmlsZQorLy8KKy8vIExBTkc6ICJmciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElOU1RSVUNUSU9OUyBUTyBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gWW91ciB0cmFuc2xhdGlvbiBtdXN0IGJlIGluIFVURi04IENoYXJhY3RlciBFbmNvZGluZy4KKy8vCisvLyBUaGlzIGlzIGEgSlNPTiBlbmNvZGVkIGZpbGUgKHBsdXMgY29tbWVudHMpLCBzdHJpbmdzIHNob3VsZCBiZSBkb3VibGUtcXVvdGUKKy8vIG9ubHksIGRvIG5vdCB1c2Ugc2luZ2xlIHF1b3RlcyB0byBzdXJyb3VuZCBzdHJpbmdzIC0gImhlbGxvIiwgbm90ICdoZWxsbycKKy8vIGRvIG5vdCBoYXZlIGEgdHJhaWxpbmcgY29tbWEgYWZ0ZXIgdGhlIGxhc3QgZW50cnkgaW4gYSBzZWN0aW9uLgorLy8KKy8vIE9ubHkgZnVsbCBsaW5lIGNvbW1lbnRzIGFyZSBhbGxvd2VkICh0aGF0IGEgY29tbWVudHMgb2NjdXB5IGVudGlyZSBsaW5lcykuCisvLworLy8gU2VhcmNoIGZvciB0aGUgX19ORVdfVFJBTlNMQVRJT05TX18gc2VjdGlvbiBiZWxvdywgdGhpcyBpcyB3aGVyZSB5b3Ugd2lsbAorLy8gd2FudCB0byBmb2N1cywgdGhpcyBzZWN0aW9uIGluY2x1ZGVzIHRoaW5ncyB0aGF0IGRvIG5vdCBwcmVzZW50bHkgaGF2ZSBhIAorLy8gdHJhbnNsYXRpb24gb3IgZm9yIHdoaWNoIHRoZSB0cmFuc2xhdGlvbiBuZWVkcyB0byBiZSBjaGVja2VkIGZvciBhY2N1cmFjeS4KKy8vCisvLyBJbiB0aGUgTmV3IFRyYW5zbGF0aW9ucyBzZWN0aW9uIGEgdHJhbnNsYXRpb24gc3RyaW5nIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICIiCisvLyAgICAgVGhpcyBtZWFucyBpdCBpcyBub3QgdHJhbnNsYXRlZCB5ZXQsIGFkZCB5b3VyIHRyYW5zbGF0aW9uLi4uCisvLyAgICAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIktsaW5nb24gU3RyaW5nIEhlcmUiCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJUcmFuc2xhdGVkIFN0cmluZyBIZXJlIgorLy8gICAgIFRoaXMgbWVhbnMgdGhhdCBhbiBleGlzdGluZyB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcsIGluIHNvbWUgb3RoZXIKKy8vICAgICBzZWN0aW9uIGhhcyBiZWVuIGZvdW5kLCBhbmQgdXNlZC4gIENoZWNrIHRoYXQgaXQgaXMgYXBwcm9wcml0ZSBmb3IgdGhpcworLy8gICAgIHNlY3Rpb24gYW5kIGlmIGl0IGlzLCB0aGF0J3MgZmluZSBsZWF2ZSBpdCBhcyBpcywgb3RoZXJ3aXNlIGNoYW5nZSBhcworLy8gICAgIGFwcHJvcHJpYXRlLgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiPDxBbm90aGVyU2VjdGlvbj4+IgorLy8gICAgIFRoaXMgbWVhbnMgdXNlIHRoZSBzYW1lIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZyBhcyA8PEFub3RoZXJTZWN0aW9uPj4KKy8vICAgICB0aGlzIHNhdmVzIHlvdSByZS10cmFubGF0aW5nIHN0cmluZ3MuICBJZiB0aGUgQ29udGV4dCBvZiB0aGlzIHNlY3Rpb24KKy8vICAgICBhbmQgdGhlIGNvbnRleHQgb2YgQW5vdGhlclNlY3Rpb24gc2VlbSB0aGUgc2FtZSwgdGhhdCdzIGZpbmUgbGVhdmUgaXQKKy8vICAgICB1c2luZyB0aGF0IHRyYW5zbGF0aW9uLCBidXQgaWYgdGhpcyBzZWN0aW9uIG5lZWRzIGEgZGlmZmVyZW50IHRyYW5zbGF0aW9uLCAKKy8vICAgICB5b3UgY2FuIHByb3ZpZGUgaXQgYnkgcmVwbGFjaW5nIHRoZSBsaW5rICg8PEFub3RoZXJTZWN0aW9uPj4pIHdpdGggdGhhdAorLy8gICAgIG5ldyB0cmFuc2xhdGlvbi4gIEZvciBleGFtcGxlIC0gYSAiVGFibGUiIGluIHNheSAiRGF0YVBsdWdpbiIgaXMgCisvLyAgICAgcGVyaGFwcyB0cmFuc2xhdGVkIGRpZmZlcmVudGx5IHRvICJUYWJsZSIgaW4gIkZ1cm5pdHVyZVBsdWdpbiIuCisvLworLy8gVEVTVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBwbGFjZSB5b3VyIHRyYW5zbGF0aW9uIGZpbGUgb24geW91ciB3ZWJzZXJ2ZXIgc29tZXdoZXJlIGZvciBleGFtcGxlCisvLworLy8gICAveGluaGEvbGFuZy9tZXJnZWQvZnIuanMKKy8vCisvLyBhbmQgdGhlbiB0ZWxsIFhpbmhhIHdoZXJlIHRvIGdldCBpdCAoYmVmb3JlIGxvYWRpbmcgWGluaGFDb3JlLmpzKSBieSAKKy8vCisvLyAgX2VkaXRvcl9sYW5nICAgICAgICAgICAgICA9ICdmcic7CisvLyAgX2VkaXRvcl9sYW5nX21lcmdlZF9maWxlICA9ICcveGluaGEvbGFuZy9tZXJnZWQvZnIuanMnOworLy8KKy8vIFhpbmhhIHdpbGwgbG9hZCB5b3VyIG5ldyBsYW5ndWFnZSBkZWZpbml0aW9uLgorLy8KKy8vIFNVQk1JVFRJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgY3JlYXRlIGEgVGlja2V0IG9uIHRoZSBYaW5oYSB3ZWJzaXRlIGFuZCBhdHRhY2ggeW91ciB0cmFuc2xhdGlvbiAKKy8vIGZpbGUuCisvLworLy8gVGhlIFhpbmhhIGRldmVsb3BlcnMgd2lsbCB0YWtlIHlvdXIgZmlsZSBhbmQgdXNlIHRoZSAKKy8vICAgICBjb250cmliL2xjX3NwbGl0X21lcmdlZF9maWxlLnBocAorLy8gc2NyaXB0IHRvIGxvYWQgaXQgaW50byB0aGUgWGluaGEgZGlzdHJpYnV0aW9uLgorCit7CisgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgIkFiYnJldmlhdGlvbiI6ICJBYnLDqXZpYXRpb24iLAorICAgICAgICAiQ2FuY2VsIjogIkFubnVsZXIiLAorICAgICAgICAiRGVsZXRlIjogIlN1cHByaW1lciIsCisgICAgICAgICJFeHBhbnNpb246IjogIkV4cGxpY2F0aW9uIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkFib3V0Qm94IjogeworICAgICAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiQSBwcm9wb3MiLAorICAgICAgICAiQ2xvc2UiOiAiRmVybWVyIgorICAgIH0sCisgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyIiwKKyAgICAgICAgIlJlbW92ZSBDdXJyZW50IEJhY2tncm91bmQiOiAiU3VwcHJpbWVyIGxlIGZvbmQgYWN0dWVsIiwKKyAgICAgICAgIlNldCBQYWdlIEJhY2tncm91bmQgSW1hZ2UiOiAiRMOpZmluaXIgbCdJbWFnZSBkZSBGb25kIiwKKyAgICAgICAgIlNldCBwYWdlIGJhY2tncm91bmQgaW1hZ2UiOiAiRMOpZmluaXIgbCdpbWFnZSBkZSBmb25kIgorICAgIH0sCisgICAgIkNoYXJDb3VudGVyIjogeworICAgICAgICAiQ2hhcnMiOiAiQ2FyYWN0w6hyZXMiLAorICAgICAgICAiV29yZHMiOiAiTW90cyIKKyAgICB9LAorICAgICJDaGFyYWN0ZXJNYXAiOiB7CisgICAgICAgICJJbnNlcnQgc3BlY2lhbCBjaGFyYWN0ZXIiOiAiSW5zw6lyZXIgdW4gY2FyYWN0w6hyZSBzcMOpY2lhbCIKKyAgICB9LAorICAgICJDb2xvclBpY2tlciI6IHsKKyAgICAgICAgIkNsb3NlIjogIkZlcm1lciIsCisgICAgICAgICJDb2xvcjogIjogIkNvdWxldXIiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiQ29udGV4dE1lbnUiOiB7CisgICAgICAgICJDX2VsbCBQcm9wZXJ0aWVzLi4uIjogIlBfcm9wcmnDqXTDqXMgZGUgbGEgY2VsbHVsZS4uLiIsCisgICAgICAgICJDaGVjX2sgTGluay4uLiI6ICJfVsOpcmlmaWVyIGxlIGxpZW4uLi4iLAorICAgICAgICAiQ29weSI6ICJDb3BpZXIiLAorICAgICAgICAiQ3JlYXRlIGEgbGluayI6ICJDcsOpZXIgdW4gbGllbiIsCisgICAgICAgICJDdXJyZW50IFVSTCBpcyI6ICJMJ1VSTCBjb3VyYW50ZSBlc3QiLAorICAgICAgICAiQ3V0IjogIkNvdXBlciIsCisgICAgICAgICJEZV9sZXRlIENvbHVtbiI6ICJfU3VwcHJpbWVyIGxhIGNvbG9ubmUiLAorICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IGNvbHVtbiI6ICJTdXBwcmltZXIgY2V0dGUgY29sb25uZSIsCisgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIlN1cHByaW1lciBsYSByYW5nw6llIGNvdXJhbnRlIiwKKyAgICAgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIkNvbW1lbnQgw6p0ZXMtdm91cyBhcnJpdsOpIGljaSA/IChSZXBvcnRleiBsZSBidWcgU1ZQICEpIiwKKyAgICAgICAgIklfbnNlcnQgUm93IEJlZm9yZSI6ICJJbnPDqXJlciB1bmUgcmFuZ8OpZSBhX3ZhbnQiLAorICAgICAgICAiSW5fc2VydCBSb3cgQWZ0ZXIiOiAiSW5zw6lyX2VyIHVuZSByYW5nw6llIGFwcsOocyIsCisgICAgICAgICJJbnNlcnQgQ19vbHVtbiBBZnRlciI6ICJJbnPDqXJlciB1bmUgY29sb25uZSBhcHLDqHMiLAorICAgICAgICAiSW5zZXJ0IF9Db2x1bW4gQmVmb3JlIjogIklfbnPDqXJlciB1bmUgY29sb25uZSBhdmFudCIsCisgICAgICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICJJbnPDqXJlciB1bmUgbm91dmVsbGUgY29sb25uZSBhcHLDqHMgY2VsbGUtY2kiLAorICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIkluc8OpcmVyIHVuZSBub3V2ZWxsZSByYW5nw6llIGF2YW50IGNlbGxlLWNpIiwKKyAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIkluc8OpcmVyIHVuZSBub3V2ZWxsZSByYW5nw6llIGFwcsOocyBjZWxsZS1jaSIsCisgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiSW5zw6lyZXIgdW5lIG5vdXZlbGxlIHJhbmfDqWUgYXZhbnQgY2VsbGUtY2kiLAorICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUiOiAiSW5zw6lyZXIgdW4gcGFyYWdyYXBoZSBhcHLDqHMgbGUgbm9ldWQgY291cmFudCIsCisgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUiOiAiSW5zw6lyZXIgdW4gcGFyYWdyYXBoZSBhdmFudCBsZSBub2V1ZCBjb3VyYW50IiwKKyAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYWZ0ZXIiOiAiSW5zw6lyZXIgdW4gcGFyYWdyYXBoZSBhcHLDqHMiLAorICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiSW5zw6lyZXIgdW4gcGFyYWdyYXBoZSBhdmFudCIsCisgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICJBbGlnbmVyIGF1IGNlbnRyZSIsCisgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAiSnVzdGlmaWVyIiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICJBbGlnbmVyIMOgIGdhdWNoZSIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIkFsaWduZXIgw6AgZHJvaXRlIiwKKyAgICAgICAgIkxpbmsgcG9pbnRzIHRvOiI6ICJMZSBsaWVuIHBvaW50ZSBzdXI6IiwKKyAgICAgICAgIk1ha2UgbGluX2suLi4iOiAiQ29udmVydGlyIGVuIGxpZW4uLi4iLAorICAgICAgICAiT3BlbnMgdGhpcyBsaW5rIGluIGEgbmV3IHdpbmRvdyI6ICJPdXZyaXIgY2UgbGllbiBkYW5zIHVuZSBub3V2ZWxsZSBmZW7DqnRyZSIsCisgICAgICAgICJQYXN0ZSI6ICJDb2xsZXIiLAorICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBlbGVtZW50OiI6ICJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgY2V0IMOpbMOpbWVudDoiLAorICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICJWb3VsZXotdm91cyB2cmFpbWVudCBlbmxldmVyIGxlIGxpZW4gcHLDqXNlbnQgc3VyIGNldCDDqWzDqW1lbnQuIiwKKyAgICAgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICJTdXBwcmltZXIgw4lsw6ltZW50ICRlbGVtLi4uIiwKKyAgICAgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiU3VwcHJpbWVyIGNlIG5vZXVkIGR1IGRvY3VtZW50IiwKKyAgICAgICAgIlJvX3cgUHJvcGVydGllcy4uLiI6ICJQcl9vcHJpw6l0w6lzIGRlIGxhIHJhbmfDqWUuLi4iLAorICAgICAgICAiU2hvdyB0aGUgVGFibGUgQ2VsbCBQcm9wZXJ0aWVzIGRpYWxvZyI6ICJBZmZpY2hlciBsYSBib2l0ZSBkZSBwcm9wcmnDqXTDqSBkZXMgY2VsbHVsZXMiLAorICAgICAgICAiU2hvdyB0aGUgVGFibGUgUHJvcGVydGllcyBkaWFsb2ciOiAiQWZmaWNoZXIgbGEgYm9pdGUgZGUgcHJvcHJpw6l0w6kgZGUgdGFibGVhdSIsCisgICAgICAgICJTaG93IHRoZSBUYWJsZSBSb3cgUHJvcGVydGllcyBkaWFsb2ciOiAiQWZmaWNoZXIgbGEgYm9pdGUgZGUgcHJvcHJpw6l0w6kgZGVzIHJhbmfDqWVzIiwKKyAgICAgICAgIlNob3cgdGhlIGltYWdlIHByb3BlcnRpZXMgZGlhbG9nIjogIkFmZmljaGVyIGxlIGRpYWxvZ3VlIGRlcyBwcm9wcmnDqXTDqXMgZCdpbWFnZSIsCisgICAgICAgICJVbmxpbmsgdGhlIGN1cnJlbnQgZWxlbWVudCI6ICJFbmxldmVyIGxlIGxpZW4gc3VyIGNldCDDqWzDqW1lbnQiLAorICAgICAgICAiX0RlbGV0ZSBSb3ciOiAiU3VwcHJfaW1lciB1bmUgcmFuZ8OpZSIsCisgICAgICAgICJfSW1hZ2UgUHJvcGVydGllcy4uLiI6ICJfUHJvcHJpw6l0w6lzIGRlIGwnaW1hZ2UuLi4iLAorICAgICAgICAiX01vZGlmeSBMaW5rLi4uIjogIl9Nb2RpZmllciBsZSBsaWVuLi4uIiwKKyAgICAgICAgIl9SZW1vdmUgTGluay4uLiI6ICJfU3VwcHJpbWVyIGxlIGxpZW4uLi4iLAorICAgICAgICAiX1RhYmxlIFByb3BlcnRpZXMuLi4iOiAiUHJvcHJpw6lfdMOpcyBkZSBsYSB0YWJsZS4uLiIKKyAgICB9LAorICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIkNvbmZpcm1lei12b3VzIGxhIHN1cHByZXNzaW9uIGRlIGNlIGxpZW4gPyIsCisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlciIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSW5zw6lyZXIgLyBNb2RpZmllciB1biBsaWVuIiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTm91dmVsbGUgZmVuw6p0cmUgKF9ibGFuaykiLAorICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJBdWN1bmUgKGltcGxpY2l0ZSkiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3RoZXIiOiAiQXV0cmUiLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIk3Dqm1lIGZyYW1lIChfc2VsZikiLAorICAgICAgICAiVGFyZ2V0OiI6ICJDaWJsZSIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogIlRleHRlIGFsdGVybmF0aWYiLAorICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJGcmFtZSBwcmluY2lwYWxlIChfdG9wKSIsCisgICAgICAgICJVUkw6IjogIlVSTDoiLAorICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIlZvdXMgZGV2ZXogc8OpbGVjdGlvbm5lciBkdSB0ZXh0ZSBhdmFudCBkZSBjcsOpZXIgdW4gbGllbiIKKyAgICB9LAorICAgICJEeW5hbWljQ1NTIjogeworICAgICAgICAiQ2hvb3NlIHN0eWxlc2hlZXQiOiAiQ2hvaXNpciBmZXVpbGxlIGRlIHN0eWxlIiwKKyAgICAgICAgIkRlZmF1bHQiOiAiRMOpZmF1dCIsCisgICAgICAgICJVbmRlZmluZWQiOiAiTm9uIGTDqWZpbmkiCisgICAgfSwKKyAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyIiwKKyAgICAgICAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICJFZGl0ZXIgbGUgY29kZSBIVE1MIGR1IHRleHRlIHPDqWxlY3Rpb25uw6kiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiVGFnIEVkaXRvciI6ICJFZGl0ZXVyIGRlIHRhZyBIVE1MIgorICAgIH0sCisgICAgIkVxdWF0aW9uIjogeworICAgICAgICAiQ2FuY2VsIjogIkFubnVsZXIiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUHJldmlldyI6ICJBcGVyw6d1ICIKKyAgICB9LAorICAgICJFeHRlbmRlZEZpbGVNYW5hZ2VyIjogeworICAgICAgICAiQWJzYm90dG9tIjogIkFic2JvdHRvbSIsCisgICAgICAgICJBYnNtaWRkbGUiOiAiQWJzbWlkZGxlIiwKKyAgICAgICAgIkFsaWduIjogIkFsaWduZW1lbnQiLAorICAgICAgICAiQWx0IjogIkFsdCIsCisgICAgICAgICJCYXNlbGluZSI6ICJCYXNlbGluZSIsCisgICAgICAgICJCb3JkZXIiOiAiQm9yZHVyZSIsCisgICAgICAgICJCb3JkZXIgQ29sb3IiOiAiQ291bGV1ciBkZSBsYSBib3JkdXJlIiwKKyAgICAgICAgIkJvdHRvbSI6ICJCYXMiLAorICAgICAgICAiQ2FuY2VsIjogIkFubnVsZXIiLAorICAgICAgICAiQ2xlYXIiOiAiRWZmYWNlciIsCisgICAgICAgICJDb2xvciI6ICJDb3VsZXVyIiwKKyAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICJNYWludGVuaXIgbGVzIHByb3BvcnRpb25zIiwKKyAgICAgICAgIkNvcHkiOiAiQ29waWVyIiwKKyAgICAgICAgIkNyb3AiOiAiUmVjYWRyZXIiLAorICAgICAgICAiQ3V0IjogIkNvdXBlciIsCisgICAgICAgICJEaXJlY3RvcnkiOiAiUsOpcGVydG9pcmUiLAorICAgICAgICAiRGlyZWN0b3J5IFVwIjogIlJlbW9udGVyIiwKKyAgICAgICAgIkVkaXQiOiAiTW9kaWZpZXIiLAorICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIkdlc3Rpb25uYWlyZSBkZSBmaWNoaWVycyIsCisgICAgICAgICJGaWxlbmFtZToiOiAiTm9tIGR1IGZpY2hpZXI6IiwKKyAgICAgICAgIkZpbGVzaXplOiI6ICJUYWlsbGUgZHUgZmljaGllcjoiLAorICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIlN5bcOpdHJpZSBob3IuIiwKKyAgICAgICAgIkZsaXAgSW1hZ2UiOiAiU3ltw6l0cmllIiwKKyAgICAgICAgIkZsaXAgVmVydGljYWwiOiAiU3ltw6l0cmllIHZlci4iLAorICAgICAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIkxlIGZvcm1hdCBHSUYgbidlc3QgcGFzIHN1cHBvcnTDqSwgw6lkaXRpb24gZCdpbWFnZSBpbXBvc3NpYmxlLiIsCisgICAgICAgICJIZWlnaHQiOiAiSGF1dGV1ciIsCisgICAgICAgICJIZWlnaHQ6IjogIkhhdXRldXI6IiwKKyAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiSW5zw6lyZXIgdW4gbGllbiB2ZXJzIGZpY2hpZXIiLAorICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiRG9zc2llciByYWNpbmUgaW52YWxpZGU6IiwKKyAgICAgICAgIkpQRUcgSGlnaCI6ICJKUEVHIGhhdXQiLAorICAgICAgICAiSlBFRyBMb3ciOiAiSlBFRyBiYXMiLAorICAgICAgICAiSlBFRyBNZWRpdW0iOiAiSlBFRyBtb3llbiIsCisgICAgICAgICJMZWZ0IjogIkdhdWNoZSIsCisgICAgICAgICJMb2FkaW5nIjogIkNoYXJnZW1lbnQiLAorICAgICAgICAiTG9jayI6ICJWZXJyb3VpbGxlciIsCisgICAgICAgICJNYXJnaW4iOiAiTWFyZ2UiLAorICAgICAgICAiTWFya2VyIjogIk1hcnF1ZXVyIiwKKyAgICAgICAgIk1lYXN1cmUiOiAiUsOoZ2xlIiwKKyAgICAgICAgIk1pZGRsZSI6ICJNaWxpZXUiLAorICAgICAgICAiTmV3IEZvbGRlciI6ICJOb3V2ZWF1IGRvc3NpZXIiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOb3V2ZWxsZSBmZW7DqnRyZSAoX2JsYW5rKSIsCisgICAgICAgICJObyBGaWxlcyBGb3VuZCI6ICJBdWN1biBmaWNoaWVyIiwKKyAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICJBdWN1bmUgaW1hZ2UgZGlzcG9uaWJsZSIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIkF1Y3VuZSAoaW1wbGljaXRlKSIsCisgICAgICAgICJOb3Qgc2V0IjogIkluZMOpZmluaSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQYWRkaW5nIjogIk1hcmdlIGludMOpcmlldXJlIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zaXRpb24gZGUgY2V0dGUgaW1hZ2UiLAorICAgICAgICAiUHJldmlldyI6ICJBcGVyw6d1ICIsCisgICAgICAgICJRdWFsaXR5OiI6ICJRdWFsaXTDqToiLAorICAgICAgICAiUmVmcmVzaCI6ICJBY3R1YWxpc2VyIiwKKyAgICAgICAgIlJlbmFtZSI6ICJSZW5vbW1lciIsCisgICAgICAgICJSZXNpemUiOiAiUmVkaW1lbi4iLAorICAgICAgICAiUmlnaHQiOiAiRHJvaXRlIiwKKyAgICAgICAgIlJvdGF0ZSI6ICJQaXZvdGVyIiwKKyAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICJQaXZvdGVyIGwnaW1hZ2UiLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIk3Dqm1lIGZyYW1lIChfc2VsZikiLAorICAgICAgICAiU2F2ZSI6ICJFbnJlZ2lzdHJlciIsCisgICAgICAgICJTdGFydCBYOiI6ICJEw6lwYXJ0IFgiLAorICAgICAgICAiU3RhcnQgWToiOiAiRMOpcGFydCBZIiwKKyAgICAgICAgIlRhcmdldCBXaW5kb3ciOiAiRmVuw6p0cmUgY2libGUiLAorICAgICAgICAiVGV4dHRvcCI6ICJUZXh0dG9wIiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKSI6ICJUb29sdGlwIiwKKyAgICAgICAgIlRvZ2dsZSBtYXJrZXIgY29sb3IiOiAiQ2hhbmdlciBsYSBjb3VsZXVyIGR1IG1hcnF1ZXVyIiwKKyAgICAgICAgIlRvcCI6ICJIYXV0IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiRnJhbWUgcHJpbmNpcGFsZSAoX3RvcCkiLAorICAgICAgICAiVHJhc2giOiAiQ29yYmVpbGxlIiwKKyAgICAgICAgIlVwbG9hZCI6ICJFbnZveWVyIiwKKyAgICAgICAgIlc6IjogIlc6IiwKKyAgICAgICAgIldpZHRoIjogIkxhcmdldXIiLAorICAgICAgICAiV2lkdGg6IjogIkxhcmdldXI6IiwKKyAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICJWb3VzIGRldmV6IHPDqWxlY3Rpb25uZXIgZHUgdGV4dGUgYXZhbnQgZGUgZmFpcmUgdW4gbm91dmVhdSBsaWVuLiIsCisgICAgICAgICJab29tIjogIlpvb20iCisgICAgfSwKKyAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAiUmVjaGVyY2hlIHNlbnNpYmxlIMOgIGxhIGNhc3NlIiwKKyAgICAgICAgIkNsZWFyIjogIkVmZmFjZXIiLAorICAgICAgICAiRG9uZSI6ICJGaW4iLAorICAgICAgICAiRW50ZXIgdGhlIHRleHQgeW91IHdhbnQgdG8gZmluZCI6ICJUZXh0ZSDDoCB0cm91dmVyIiwKKyAgICAgICAgIkZpbmQgYW5kIFJlcGxhY2UiOiAiQ2hlcmNoZXIgZXQgUmVtcGxhY2VyIiwKKyAgICAgICAgIkhpZ2hsaWdodCI6ICJTdXJsaWduZXIiLAorICAgICAgICAiSW5mb3JtIGEgcmVwbGFjZW1lbnQgd29yZCI6ICJJbmRpcXVleiB1biBtb3QgZGUgcmVtcGxhY2VtZW50IiwKKyAgICAgICAgIk5leHQiOiAiU3VpdmFudCIsCisgICAgICAgICJPcHRpb25zIjogIk9wdGlvbnMiLAorICAgICAgICAiUmVwbGFjZSB3aXRoOiI6ICJSZW1wbGFjZXIgcGFyIiwKKyAgICAgICAgIlNlYXJjaCBmb3I6IjogIkNoZXJjaGVyIiwKKyAgICAgICAgIlN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIjogIlJlbXBsYWNlciB0b3V0ZXMgbGVzIG9jY3VyZW5jZXMiLAorICAgICAgICAiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IjogIlJlbXBsYWNlciBjZXR0ZSBvY2N1cnJlbmNlID8iLAorICAgICAgICAiVW5kbyI6ICJBbm51bGVyIiwKKyAgICAgICAgIldob2xlIHdvcmRzIG9ubHkiOiAiTW90cyBlbnRpZXJzIHNldWxlbWVudCIsCisgICAgICAgICJmb3VuZCBpdGVtIjogIsOpbMOpbWVudCB0cm91dsOpIiwKKyAgICAgICAgImZvdW5kIGl0ZW1zIjogIsOpbMOpbWVudHMgdHJvdXbDqXMiLAorICAgICAgICAibm90IGZvdW5kIjogIm5vbiB0cm91dsOpIiwKKyAgICAgICAgInJlcGxhY2VkIGl0ZW0iOiAiw6lsw6ltZW50IHJlbXBsYWPDqSIsCisgICAgICAgICJyZXBsYWNlZCBpdGVtcyI6ICLDqWzDqW1lbnRzIHJlbXBsYWPDqXMiCisgICAgfSwKKyAgICAiRm9ybU9wZXJhdGlvbnMiOiB7CisgICAgICAgICJJbnNlcnQgYSBGb3JtLiI6ICJJbnPDqXJlciB1biBmb3JtdWxhaXJlIiwKKyAgICAgICAgIkluc2VydCBhIGNoZWNrIGJveC4iOiAiSW5zw6lyZXIgdW5lIGNhc2Ugw6AgY29jaGVyIiwKKyAgICAgICAgIkluc2VydCBhIG11bHRpLWxpbmUgdGV4dCBmaWVsZC4iOiAiSW5zw6lyZXIgdW4gY2hhbXAgdGV4dGUgw6AgbGlnbmVzIG11bHRpcGxlcyIsCisgICAgICAgICJJbnNlcnQgYSByYWRpbyBidXR0b24uIjogIkluc8OpcmVyIHVuIGJvdXRvbiByYWRpbyIsCisgICAgICAgICJJbnNlcnQgYSBzZWxlY3QgZmllbGQuIjogIkluc8OpcmVyIHVuZSBib2l0ZSBkZSBzw6lsZWN0aW9uIiwKKyAgICAgICAgIkluc2VydCBhIHN1Ym1pdC9yZXNldCBidXR0b24uIjogIkluc8OpcmVyIHVuIGJvdXRvbiBkZSBzb3VtaXNzaW9uL2FubnVsYXRpb24iLAorICAgICAgICAiSW5zZXJ0IGEgdGV4dCwgcGFzc3dvcmQgb3IgaGlkZGVuIGZpZWxkLiI6ICJJbnPDqXJlciB1biB0ZXh0ZSwgdW4gbW90IGRlIHBhc3NlIG91IHVuIGNoYW1wIGludmlzaWJsZSIKKyAgICB9LAorICAgICJGb3JtcyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyIiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiVVJMIiwKKyAgICAgICAgIk5hbWUiOiAiTm9tIiwKKyAgICAgICAgIk5hbWUvSUQ6IjogIk5vbS9JRCIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPcHRpb25zIjogIk9wdGlvbnMiLAorICAgICAgICAiUm93czoiOiAiTGlnbmVzIiwKKyAgICAgICAgIlNpemU6IjogIlRhaWxsZSIsCisgICAgICAgICJUZXh0OiI6ICJUZXh0ZSIKKyAgICB9LAorICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgIkFsdGVybmF0ZSBzdHlsZS1zaGVldDoiOiAiRmV1aWxsZSBDU1MgYWx0ZXJuYXRpdmUiLAorICAgICAgICAiQmFja2dyb3VuZCBjb2xvcjoiOiAiQ291bGV1ciBkJ2FycmnDqHJlIHBsYW4iLAorICAgICAgICAiQ2FuY2VsIjogIkFubnVsZXIiLAorICAgICAgICAiQ2hhcmFjdGVyIHNldDoiOiAiSmV1IGRlIGNhcmFjdMOocmVzIiwKKyAgICAgICAgIkRPQ1RZUEU6IjogIkRPQ1RZUEUiLAorICAgICAgICAiRGVzY3JpcHRpb246IjogIkRlc2NyaXB0aW9uIiwKKyAgICAgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAiUHJvcHJpw6l0w6lzIGR1IGRvY3VtZW50IiwKKyAgICAgICAgIkRvY3VtZW50IHRpdGxlOiI6ICJUaXRyZSBkdSBkb2N1bWVudCIsCisgICAgICAgICJLZXl3b3JkczoiOiAiTW90cyBjbMOpcyIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQcmltYXJ5IHN0eWxlLXNoZWV0OiI6ICJGZXVpbGxlIENTUyBwcmltYWlyZSIsCisgICAgICAgICJUZXh0IGNvbG9yOiI6ICJDb3VsZXVyIGRlIHRleHRlIiwKKyAgICAgICAgIlVURi04IChyZWNvbW1lbmRlZCkiOiAiVVRGLTggKHJlY29tbWFuZMOpKSIKKyAgICB9LAorICAgICJGdWxsU2NyZWVuIjogeworICAgICAgICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIkFncmFuZGlyL1LDqWR1aXJlIGwnw6lkaXRldXIiCisgICAgfSwKKyAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICJBbGlnbm1lbnQ6IjogIkFsaWduZW1lbnQiLAorICAgICAgICAiQ2FuY2VsIjogIkFubnVsZXIiLAorICAgICAgICAiQ2VudGVyIjogIkNlbnRyZSIsCisgICAgICAgICJDb2xvcjoiOiAiQ291bGV1ciIsCisgICAgICAgICJIZWlnaHQ6IjogIkhhdXRldXIiLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIlLDqGdsZSBob3Jpem9udGFsZSIsCisgICAgICAgICJJbnNlcnQvZWRpdCBob3Jpem9udGFsIHJ1bGUiOiAiSW5zw6lyZXIgdW5lIHLDqGdsZSBob3Jpem9udGFsZSIsCisgICAgICAgICJMYXlvdXQiOiAiTGF5b3V0IiwKKyAgICAgICAgIkxlZnQiOiAiR2F1Y2hlIiwKKyAgICAgICAgIk5vIHNoYWRpbmciOiAiUGFzIGQnb21icmUiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUmlnaHQiOiAiRHJvaXRlIiwKKyAgICAgICAgIlN0eWxlIjogIlN0eWxlIiwKKyAgICAgICAgIldpZHRoOiI6ICJMYXJnZXVyIiwKKyAgICAgICAgInBlcmNlbnQiOiAicG91cmNlbnQiLAorICAgICAgICAicGl4ZWxzIjogInBpeGVscyIKKyAgICB9LAorICAgICJIdG1sVGlkeSI6IHsKKyAgICAgICAgIkF1dG8tVGlkeSI6ICJUaWR5IGF1dG9tYXRpcXVlIiwKKyAgICAgICAgIkRvbid0IFRpZHkiOiAiVGlkeSBub24gdXRpbGlzw6kiLAorICAgICAgICAiSFRNTCBUaWR5IjogIkhUTUwgVGlkeSIsCisgICAgICAgICJUaWR5IGZhaWxlZC4gIENoZWNrIHlvdXIgSFRNTCBmb3Igc3ludGF4IGVycm9ycy4iOiAiVGlkeSBhIMOpY2hvdcOpLiBWw6lyaWZpZXogdm90cmUgSFRNTCBmb3IgZGVzIGVycmV1cnMgZGUgc3ludGF4ZSIKKyAgICB9LAorICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICJBYnNib3R0b20iOiAiQWJzYm90dG9tIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJBYnNtaWRkbGUiLAorICAgICAgICAiQW5nbGU6IjogIkFuZ2xlIiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkJhc2VsaW5lIiwKKyAgICAgICAgIkJvdHRvbSI6ICJCYXMiLAorICAgICAgICAiQ2FuY2VsIjogIkFubnVsZXIiLAorICAgICAgICAiQ2xlYXIiOiAiRWZmYWNlciIsCisgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiQ29uc2VydmVyIGxlcyBwcm9wb3J0aW9ucyIsCisgICAgICAgICJDcm9wIjogIlJlY2FkcmVyIiwKKyAgICAgICAgIkRpcmVjdG9yeSI6ICJSw6lwZXJ0b2lyZSIsCisgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiUmVtb250ZXIiLAorICAgICAgICAiRWRpdCI6ICJFZGl0ZXIiLAorICAgICAgICAiRmlsZW5hbWU6IjogIk5vbSIsCisgICAgICAgICJGbGlwIEhvcml6b250YWwiOiAiU3ltw6l0cmllIGhvcml6b250YWxlIiwKKyAgICAgICAgIkZsaXAgSW1hZ2UiOiAiU3ltw6l0cmllIiwKKyAgICAgICAgIkZsaXAgVmVydGljYWwiOiAiU3ltw6l0cmllIHZlcnRpY2FsZSIsCisgICAgICAgICJGb2xkZXIgTmFtZToiOiAiTm9tIGR1IHLDqXBlcnRvaXJlIiwKKyAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICJGb3JtYXQgR0lGIG5vbiBzdXBwb3J0w6ksIMOpZGl0aW9uIGQnaW1hZ2Ugbm9uIHN1cHBvcnTDqWUiLAorICAgICAgICAiSGVpZ2h0OiI6ICJIYXV0ZXVyIiwKKyAgICAgICAgIkltYWdlIEZvcm1hdCI6ICJGb3JtYXQgZCdpbWFnZSIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiSW5zw6lyZXIgdW5lIGltYWdlIiwKKyAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIlLDqXBlcnRvaXJlIGRlIGJhc2UgaW52YWxpZGU6IiwKKyAgICAgICAgIkpQRUcgSGlnaCI6ICJKUEVHIGhhdXQiLAorICAgICAgICAiSlBFRyBMb3ciOiAiSlBFRyBiYXMiLAorICAgICAgICAiSlBFRyBNZWRpdW0iOiAiSlBFRyBtb3llbiIsCisgICAgICAgICJMZWZ0IjogIkdhdWNoZSIsCisgICAgICAgICJMb2NrIjogIkNhZGVuYXMiLAorICAgICAgICAiTWFya2VyIjogIk1hcnF1ZXVyIiwKKyAgICAgICAgIk1lYXN1cmUiOiAiTWVzdXJlIiwKKyAgICAgICAgIk1pZGRsZSI6ICJNaWxpZXUiLAorICAgICAgICAiTmV3IEZvbGRlciI6ICJOb3V2ZWF1IHLDqXBlcnRvaXJlIiwKKyAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICJBdWN1bmUgaW1hZ2UgZGlzcG9uaWJsZSIsCisgICAgICAgICJObyBJbWFnZXMgRm91bmQiOiAiQXVjdW5lIGltYWdlIHRyb3V2w6llIiwKKyAgICAgICAgIk5vdCBzZXQiOiAiSW5kw6lmaW5pIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zaXRpb24gZGUgY2V0dGUgaW1hZ2UiLAorICAgICAgICAiUXVhbGl0eToiOiAiUXVhbGl0w6kiLAorICAgICAgICAiUmVmcmVzaCI6ICJSYWZyYcOuY2hpciIsCisgICAgICAgICJSZXNpemUiOiAiUmV0YWlsbGVyIiwKKyAgICAgICAgIlJpZ2h0IjogIkRyb2l0ZSIsCisgICAgICAgICJSb3RhdGUiOiAiUGl2b3RlciIsCisgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiUm90YXRpb24iLAorICAgICAgICAiU2F2ZSI6ICJTYXV2ZXIiLAorICAgICAgICAiU3RhcnQgWDoiOiAiRMOpYnV0IFgiLAorICAgICAgICAiU3RhcnQgWToiOiAiRMOpYnV0IFkiLAorICAgICAgICAiVGV4dHRvcCI6ICJUZXh0dG9wIiwKKyAgICAgICAgIlRvcCI6ICJIYXV0IiwKKyAgICAgICAgIlRyYXNoIjogIkTDqXRydWlyZSIsCisgICAgICAgICJXOiI6ICJMOiIsCisgICAgICAgICJXaWR0aDoiOiAiTGFyZ2V1ciIKKyAgICB9LAorICAgICJJbmxpbmVTdHlsZXIiOiB7CisgICAgICAgICJCYWNrZ3JvdW5kIjogIkFycmnDqHJlIHBsYW4iLAorICAgICAgICAiQmFzZWxpbmUiOiAiQmFzZWxpbmUiLAorICAgICAgICAiQm9yZGVyIjogIkJvcmR1cmUiLAorICAgICAgICAiQm90dG9tIjogIkJhcyIsCisgICAgICAgICJDZW50ZXIiOiAiQ2VudHJlIiwKKyAgICAgICAgIkNoYXIiOiAiQ2hhcmFjdMOocmUiLAorICAgICAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAiQm9yZHVyZSBlZmZvbmRyw6lzIiwKKyAgICAgICAgIkZHIENvbG9yIjogIkNvdWxldXIgZGUgZmFjZSIsCisgICAgICAgICJGbG9hdCI6ICJGbG90dGV1ciIsCisgICAgICAgICJIZWlnaHQiOiAiSGF1dGV1ciIsCisgICAgICAgICJJbWFnZSBVUkwiOiAiVVJMIHBvdXIgbCdpbWFnZSIsCisgICAgICAgICJKdXN0aWZ5IjogIkp1c3RpZmnDqSIsCisgICAgICAgICJMYXlvdXQiOiAiTGF5b3V0IiwKKyAgICAgICAgIkxlZnQiOiAiR2F1Y2hlIiwKKyAgICAgICAgIk1hcmdpbiI6ICJNYXJnZSIsCisgICAgICAgICJNaWRkbGUiOiAiTWlsaWV1IiwKKyAgICAgICAgIk5vbmUiOiAiQXVjdW4iLAorICAgICAgICAiUGFkZGluZyI6ICJSZW1wbGlzc2FnZSIsCisgICAgICAgICJSaWdodCI6ICJEcm9pdGUiLAorICAgICAgICAiVGV4dCBhbGlnbiI6ICJBbGlnbmVtZW50IiwKKyAgICAgICAgIlRvcCI6ICJIYXV0IiwKKyAgICAgICAgIlZlcnRpY2FsIGFsaWduIjogIlZlcnRpY2FsIiwKKyAgICAgICAgIldpZHRoIjogIkxhcmdldXIiLAorICAgICAgICAicGVyY2VudCI6ICJwb3VyY2VudCIsCisgICAgICAgICJwaXhlbHMiOiAicGl4ZWxzIgorICAgIH0sCisgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgIkFuY2hvciBuYW1lIjogIk5vbSBkZSBsJ2FuY3JlIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyIiwKKyAgICAgICAgIkRlbGV0ZSI6ICJTdXBwcmltZXIiLAorICAgICAgICAiSW5zZXJ0IEFuY2hvciI6ICJJbnPDqXJlciB1bmUgYW5jcmUiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICJBYnNib3R0b20iOiAiQWJzYm90dG9tIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJBYnNtaWRkbGUiLAorICAgICAgICAiQWxpZ25tZW50OiI6ICJBbGlnbmVtZW50IiwKKyAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJUZXh0ZSBhbHRlcm5hdGlmIiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkJhc2VsaW5lIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIkVwYWlzc2V1ciBib3JkdXJlIiwKKyAgICAgICAgIkJvdHRvbSI6ICJCYXMiLAorICAgICAgICAiQ2FuY2VsIjogIkFubnVsZXIiLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkVudHJlciBsJ1VSTCBkZSBsJ2ltYWdlIGljaSIsCisgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJQb3VyIGxlcyBuYXZpZ2F0ZXVycyBxdWkgbmUgc3VwcG9ydGVudCBwYXMgbGVzIGltYWdlcyIsCisgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiTWFyZ2UgaG9yaXpvbnRhbGUgaW50ZXJuZSIsCisgICAgICAgICJIb3Jpem9udGFsOiI6ICJIb3Jpem9udGFsIiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIlByw6l2aXN1YWxpc2F0aW9uIiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiVVJMIiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICJJbnPDqXJlciB1bmUgaW1hZ2UiLAorICAgICAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIkxhaXNzZXIgdmlkZSBwb3VyIHBhcyBkZSBib3JkdXJlIiwKKyAgICAgICAgIkxlZnQiOiAiR2F1Y2hlIiwKKyAgICAgICAgIk1pZGRsZSI6ICJNaWxpZXUiLAorICAgICAgICAiTm90IHNldCI6ICJJbmTDqWZpbmkiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJQb3NpdGlvbiBkZSBjZXR0ZSBpbWFnZSIsCisgICAgICAgICJQcmV2aWV3IjogIkFwZXLDp3UgIiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJQcsOpdmlzdWFsaXNlciBsJ2ltYWdlIGRhbnMgdW5lIG5vdXZlbGxlIGZlbsOqdHJlIiwKKyAgICAgICAgIlJpZ2h0IjogIkRyb2l0ZSIsCisgICAgICAgICJTcGFjaW5nIjogIkVzcGFjZW1lbnQiLAorICAgICAgICAiVGV4dHRvcCI6ICJUZXh0dG9wIiwKKyAgICAgICAgIlRvcCI6ICJIYXV0IiwKKyAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiTWFyZ2UgdmVydGljYWxlIGludGVybmUiLAorICAgICAgICAiVmVydGljYWw6IjogIlZlcnRpY2FsIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiVm91cyBkZXZleiBlbnRyZXIgbCdVUkwiCisgICAgfSwKKyAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgIkJhY2tncm91bmQtQ29sb3I6IjogIkNvdWxldXIgZGUgZm9uZCIsCisgICAgICAgICJCZWhhdmlvcjoiOiAiQ29tcG9ydGVtZW50IiwKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyIiwKKyAgICAgICAgIkRpcmVjdGlvbjoiOiAiRGlyZWN0aW9uIiwKKyAgICAgICAgIkhlaWdodDoiOiAiSGF1dGV1ciIsCisgICAgICAgICJJbnNlcnQgc2Nyb2xsaW5nIG1hcnF1ZWUiOiAiSW5zw6lyZXIgbWFycXVlZSBkw6lmaWxhbnQiLAorICAgICAgICAiTGVmdCI6ICJHYXVjaGUiLAorICAgICAgICAiTmFtZSI6ICJOb20iLAorICAgICAgICAiTmFtZS9JRDoiOiAiTm9tL0lEIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlJpZ2h0IjogIkRyb2l0ZSIsCisgICAgICAgICJTY3JvbGwgQW1vdW50OiI6ICJRdWFudGl0w6kgZGUgZMOpZmlsZW1lbnQiLAorICAgICAgICAiU2Nyb2xsIERlbGF5OiI6ICJEw6lsYWkgZHUgZMOpZmlsZW1lbnQiLAorICAgICAgICAiU3BlZWQgQ29udHJvbCI6ICJDb250cm9sZSBkZSB2aXRlc3NlIiwKKyAgICAgICAgIlRleHQ6IjogIlRleHRlIiwKKyAgICAgICAgIldpZHRoOiI6ICJMYXJnZXVyIgorICAgIH0sCisgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlciIKKyAgICB9LAorICAgICJJbnNlcnRQYWdlYnJlYWsiOiB7CisgICAgICAgICJQYWdlIGJyZWFrIjogIlPDqXBhcmF0ZXVyIGRlIHBhZ2UiCisgICAgfSwKKyAgICAiSW5zZXJ0UGljdHVyZSI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJBYnNib3R0b20iLAorICAgICAgICAiQWJzbWlkZGxlIjogIkFic21pZGRsZSIsCisgICAgICAgICJBbGlnbm1lbnQ6IjogIkFsaWduZW1lbnQiLAorICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIlRleHRlIGFsdGVybmF0aWYiLAorICAgICAgICAiQmFzZWxpbmUiOiAiQmFzZWxpbmUiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiRXBhaXNzZXVyIGJvcmR1cmUiLAorICAgICAgICAiQm90dG9tIjogIkJhcyIsCisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlciIsCisgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiRW50cmVyIGwnVVJMIGRlIGwnaW1hZ2UgaWNpIiwKKyAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIlBvdXIgbGVzIG5hdmlnYXRldXJzIHF1aSBuZSBzdXBwb3J0ZW50IHBhcyBsZXMgaW1hZ2VzIiwKKyAgICAgICAgIkhlaWdodDoiOiAiSGF1dGV1ciIsCisgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiTWFyZ2UgaG9yaXpvbnRhbGUgaW50ZXJuZSIsCisgICAgICAgICJIb3Jpem9udGFsOiI6ICJIb3Jpem9udGFsIiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIlByw6l2aXN1YWxpc2F0aW9uIiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiVVJMIiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICJJbnPDqXJlciB1bmUgaW1hZ2UiLAorICAgICAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIkxhaXNzZXIgdmlkZSBwb3VyIHBhcyBkZSBib3JkdXJlIiwKKyAgICAgICAgIkxlZnQiOiAiR2F1Y2hlIiwKKyAgICAgICAgIk1pZGRsZSI6ICJNaWxpZXUiLAorICAgICAgICAiTm90IHNldCI6ICJJbmTDqWZpbmkiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiT3V2cmlyIGxlIGZpY2hpZXIgZGFucyB1bmUgbm91dmVsbGUgZmVuw6p0cmUiLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJQb3NpdGlvbiBkZSBjZXR0ZSBpbWFnZSIsCisgICAgICAgICJQcmV2aWV3IjogIlByw6l2aXN1YWxpc2F0aW9uIiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJQcsOpdmlzdWFsaXNlciBsJ2ltYWdlIGRhbnMgdW5lIG5vdXZlbGxlIGZlbsOqdHJlIiwKKyAgICAgICAgIlJpZ2h0IjogIkRyb2l0ZSIsCisgICAgICAgICJTaXplIjogIlRhaWxsZSIsCisgICAgICAgICJTcGFjaW5nIjogIkVzcGFjZW1lbnQiLAorICAgICAgICAiVGV4dHRvcCI6ICJUZXh0dG9wIiwKKyAgICAgICAgIlRvcCI6ICJIYXV0IiwKKyAgICAgICAgIlVwbG9hZCBmaWxlIjogIlTDqWzDqWNoYXJnZXIiLAorICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICJNYXJnZSB2ZXJ0aWNhbGUgaW50ZXJuZSIsCisgICAgICAgICJWZXJ0aWNhbDoiOiAiVmVydGljYWwiLAorICAgICAgICAiV2lkdGg6IjogIkxhcmdldXIiCisgICAgfSwKKyAgICAiSW5zZXJ0U21pbGV5IjogeworICAgICAgICAiSW5zZXJ0IFNtaWxleSI6ICJJbnPDqXJlciB1biBzbWlsZXkiCisgICAgfSwKKyAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyIgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAiQ2FuY2VsIjogIkFubnVsZXIiCisgICAgfSwKKyAgICAiSW5zZXJ0VGFibGUiOiB7CisgICAgICAgICJBYnNib3R0b20iOiAiQWJzYm90dG9tIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJBYnNtaWRkbGUiLAorICAgICAgICAiQWxpZ25tZW50OiI6ICJBbGlnbmVtZW50IiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkJhc2VsaW5lIiwKKyAgICAgICAgIkJvcmRlciI6ICJCb3JkdXJlIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIkVwYWlzc2V1ciBib3JkdXJlIiwKKyAgICAgICAgIkJvdHRvbSI6ICJCYXMiLAorICAgICAgICAiQ2FuY2VsIjogIkFubnVsZXIiLAorICAgICAgICAiQ2FwdGlvbiI6ICLDiXRpcXVldHRlIiwKKyAgICAgICAgIkNlbGwgcGFkZGluZzoiOiAiTWFyZ2UgaW50ZXJuZSIsCisgICAgICAgICJDZWxsIHNwYWNpbmc6IjogIkVzcGFjZW1lbnQiLAorICAgICAgICAiQ29sczoiOiAiQ29sb25uZXMiLAorICAgICAgICAiRW0iOiAiRW0iLAorICAgICAgICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICJDb2xvbm5lcyDDoCB0YWlsbGUgZml4ZSIsCisgICAgICAgICJJbnNlcnQgVGFibGUiOiAiSW5zw6lyZXIgdW4gdGFibGVhdSIsCisgICAgICAgICJMYXlvdXQiOiAiTGF5b3V0IiwKKyAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiTGFpc3NlciB2aWRlIHBvdXIgcGFzIGRlIGJvcmR1cmUiLAorICAgICAgICAiTGVmdCI6ICJHYXVjaGUiLAorICAgICAgICAiTWlkZGxlIjogIk1pbGlldSIsCisgICAgICAgICJOb3Qgc2V0IjogIkluZMOpZmluaSIsCisgICAgICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICJOb21icmUgZGUgY29sb25uZXMiLAorICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAiTm9tYnJlIGRlIGxpZ25lcyIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQZXJjZW50IjogIlBvdXJjZW50IiwKKyAgICAgICAgIlBpeGVscyI6ICJQaXhlbHMiLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICJQb3NpdGlvbiBkdSB0YWJsZWF1IiwKKyAgICAgICAgIlJpZ2h0IjogIkRyb2l0ZSIsCisgICAgICAgICJSb3dzOiI6ICJMaWduZXMiLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICJFc3BhY2UgZW50cmUgbGVzIGNlbGx1bGVzIGFkamFjZW50ZXMiLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICJFc3BhY2UgZW50cmUgbGUgY29udGVudSBldCBsYSBib3JkdXJlIGQndW5lIGNlbGx1bGUiLAorICAgICAgICAiU3BhY2luZyI6ICJFc3BhY2VtZW50IiwKKyAgICAgICAgIlRleHR0b3AiOiAiVGV4dHRvcCIsCisgICAgICAgICJUb3AiOiAiSGF1dCIsCisgICAgICAgICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiTGFyZ2V1ciBkdSB0YWJsZWF1IiwKKyAgICAgICAgIldpZHRoIHVuaXQiOiAiVW5pdMOpcyBkZSBsYXJnZXVyIiwKKyAgICAgICAgIldpZHRoOiI6ICJMYXJnZXVyIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiVm91cyBkZXZleiBlbnRyZXIgbGUgbm9tYnJlIGRlIGNvbG9ubmVzIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAiVm91cyBkZXZleiBlbnRyZXIgbGUgbm9tYnJlIGRlIGxpZ25lcyIKKyAgICB9LAorICAgICJMYW5nTWFya3MiOiB7CisgICAgICAgICImbWRhc2g7IGxhbmd1YWdlICZtZGFzaDsiOiAiJm1kYXNoOyBMYW5ndWUgJm1kYXNoOyIsCisgICAgICAgICJFbmdsaXNoIjogImFuZ2xhaXMiLAorICAgICAgICAiRnJlbmNoIjogImZyYW7Dp2FpcyIsCisgICAgICAgICJHcmVlayI6ICJncmVjIiwKKyAgICAgICAgIkxhdGluIjogImxhdGluIiwKKyAgICAgICAgImxhbmd1YWdlIHNlbGVjdCI6ICJTw6lsZWN0aW9uIGRlIGxhIGxhbmd1ZSIKKyAgICB9LAorICAgICJMaW5rZXIiOiB7CisgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiQ29uZmlybWV6LXZvdXMgbGEgc3VwcHJlc3Npb24gZGUgY2UgbGllbiA/IiwKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyIiwKKyAgICAgICAgIkVtYWlsIEFkZHJlc3M6IjogIkFkcmVzc2UgZW1haWwiLAorICAgICAgICAiRW1haWwgTGluayI6ICJMaWVuIGVtYWlsIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJJbnPDqXJlciAvIE1vZGlmaWVyIHVuIGxpZW4iLAorICAgICAgICAiTWVzc2FnZSBUZW1wbGF0ZToiOiAiTWVzc2FnZSIsCisgICAgICAgICJOYW1lOiI6ICJOb20iLAorICAgICAgICAiTmV3IFdpbmRvdyI6ICJOb3V2ZWxsZSBmZW7DqnRyZSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPcmRpbmFyeSBMaW5rIjogIkxpZW4gc3RhbmRhcmQiLAorICAgICAgICAiUG9wdXAgV2luZG93IjogIkZlbsOqdHJlIHBvcHVwIiwKKyAgICAgICAgIlJlbW92ZSBMaW5rIjogIlN1cHByaW1lciIsCisgICAgICAgICJTYW1lIFdpbmRvdyAoanVtcCBvdXQgb2YgZnJhbWVzKSI6ICJNw6ptZSBmZW7DqnRyZSAoc29ydCBkZXMgZnJhbWVzKSIsCisgICAgICAgICJTaXplOiI6ICJUYWlsbGUiLAorICAgICAgICAiU3ViamVjdDoiOiAiU3VqZXQiLAorICAgICAgICAiVGFyZ2V0OiI6ICJDaWJsZSIsCisgICAgICAgICJVUkwgTGluayI6ICJMaWVuIFVSTCIsCisgICAgICAgICJVUkw6IjogIlVSTDoiLAorICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIlZvdXMgZGV2ZXogc8OpbGVjdGlvbm5lciB1biB0ZXh0ZSBhdmFudCBkZSBjcsOpZXIgdW4gbm91dmVhdSBsaWVuIgorICAgIH0sCisgICAgIkxpc3RUeXBlIjogeworICAgICAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogIkNob2lzaXNzZXogbGUgc3R5bGUgZGUgbGlzdGUgKHBvdXIgbGVzIGxpc3RlcyBvcmRvbm7DqWVzKSIsCisgICAgICAgICJEZWNpbWFsIG51bWJlcnMiOiAiTm9tYnJlcyBkw6ljaW1hdXgiLAorICAgICAgICAiTG93ZXIgZ3JlZWsgbGV0dGVycyI6ICJMZXR0cmVzIGdyZWNxdWVzIG1pbnVzY3VsZSIsCisgICAgICAgICJMb3dlciBsYXRpbiBsZXR0ZXJzIjogIkxldHRyZXMgbGF0aW5lcyBtaW51c2N1bGUiLAorICAgICAgICAiTG93ZXIgcm9tYW4gbnVtYmVycyI6ICJOb21icmVzIHJvbWFpbnMgbWludXNjdWxlIiwKKyAgICAgICAgIlVwcGVyIGxhdGluIGxldHRlcnMiOiAiTGV0dHJlcyBsYXRpbmVzIG1hanVzY3VsZSIsCisgICAgICAgICJVcHBlciByb21hbiBudW1iZXJzIjogIk5vbWJyZXMgcm9tYWlucyBtYWp1c2N1bGUiCisgICAgfSwKKyAgICAiTW9vdG9vbHNGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiSW5zw6lyZXIgdW4gbGllbiB2ZXJzIGZpY2hpZXIiLAorICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIlZvdXMgZGV2ZXogc8OpbGVjdGlvbm5lciB1biB0ZXh0ZSBhdmFudCBkZSBjcsOpZXIgdW4gbm91dmVhdSBsaWVuIgorICAgIH0sCisgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICJBZGQgR1VJRE8gQ29kZSBpbiBhIHRleHRib3ggb24gdGhlIHBhZ2UiOiAiQWpvdXRlciBsZSBjb2RlIHNvdXJjZSBHVUlETyBkYW5zIHVuIGNhZHJlIiwKKyAgICAgICAgIkFkZCBNSURJIGxpbmsgdG8gYWxsb3cgc3R1ZGVudHMgdG8gaGVhciB0aGUgbXVzaWMiOiAiQWpvdXRlciB1biBsaWVuIE1JREkgcG91ciBwZXJtZXR0cmUgYXV4IMOpdHVkaWFudHMgZCfDqWNvdXRlciBsYSBwYXJ0aXRpb24iLAorICAgICAgICAiQ2FuY2VsIjogIkFubnVsZXIiLAorICAgICAgICAiRm9ybWF0IjogIkZvcm1hdCIsCisgICAgICAgICJHdWlkbyBjb2RlIjogIkNvZGUgR3VpZG8iLAorICAgICAgICAiSW1hZ2UgUHJldmlldyI6ICJBcGVyw6d1IGRlIGwnaW1hZ2UiLAorICAgICAgICAiSW1hZ2UgaW4gYXBwbGV0IjogIkltYWdlIGRhbnMgdW5lIGFwcGxldCIsCisgICAgICAgICJJbnNlcnQgR1VJRE8gTXVzaWMgTm90YXRpb24iOiAiSW5zw6lyZXIgdW5lIHBhcnRpdGlvbiBtdXNpY2FsZSBHVUlETyIsCisgICAgICAgICJNSURJIEZpbGUiOiAiRmljaGllciBNSURJIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk9wdGlvbnMiOiAiT3B0aW9ucyIsCisgICAgICAgICJQcmV2aWV3IjogIkFwZXLDp3UgIiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJQcsOpdmlzdWFsaXNlciBsJ2ltYWdlIGRhbnMgdW5lIG5vdXZlbGxlIGZlbsOqdHJlIiwKKyAgICAgICAgIlNvdXJjZSBDb2RlIjogIkNvZGUgc291cmNlIiwKKyAgICAgICAgIlpvb20iOiAiWm9vbSIKKyAgICB9LAorICAgICJPcGVyYSI6IHsKKyAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiTGUgYm91dG9uIENvbGxlciBuZSBmb25jdGlvbm5lIHBhcyBzdXIgbGVzIG5hdmlnYXRldXJzIGJhc8OpcyBzdXIgTW96aWxsYSAocG91ciBkZXMgcmFpc29ucyBkZSBzw6ljdXJpdMOpKS4gUHJlc3NleiBDVFJMLVYgYXUgY2xhdmllciBwb3VyIGNvbGxlciBkaXJlY3RlbWVudC4iCisgICAgfSwKKyAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyIgorICAgIH0sCisgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBhc3RlIGFzIFBsYWluIFRleHQiOiAiQ29waWVyIGNvbW1lIHRleHRlIHB1ciIKKyAgICB9LAorICAgICJQZXJzaXN0ZW50U3RvcmFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyIiwKKyAgICAgICAgIkNvcHkiOiAiQ29waWVyIiwKKyAgICAgICAgIkRlbGV0ZSI6ICJTdXBwcmltZXIiLAorICAgICAgICAiRGlyZWN0b3J5IFVwIjogIlJlbW9udGVyIiwKKyAgICAgICAgIkZpbGUgTWFuYWdlciI6ICJHZXN0aW9ubmFpcmUgZGUgZmljaGllcnMiLAorICAgICAgICAiRmlsZW5hbWUiOiAiTm9tIiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICJJbnPDqXJlciB1bmUgaW1hZ2UiLAorICAgICAgICAiTmV3IEZvbGRlciI6ICJOb3V2ZWF1IHLDqXBlcnRvaXJlIiwKKyAgICAgICAgIlNhdmUiOiAiRW5yZWdpc3RyZXIiLAorICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIlZvdXMgZGV2ZXogc8OpbGVjdGlvbm5lciB1biB0ZXh0ZSBhdmFudCBkZSBjcsOpZXIgdW4gbm91dmVhdSBsaWVuIgorICAgIH0sCisgICAgIlF1aWNrVGFnIjogeworICAgICAgICAiQVRUUklCVVRFUyI6ICJBVFRSSUJVVFMiLAorICAgICAgICAiQ2FuY2VsIjogIkFubnVsZXIiLAorICAgICAgICAiQ29sb3JzIjogIkNvdWxldXJzIiwKKyAgICAgICAgIkVudGVyIHRoZSBUQUcgeW91IHdhbnQgdG8gaW5zZXJ0IjogIkVudHJleiBsYSBiYWxpc2UgcXVlIHZvdXMgdm91bGV6IGluc8OpcmVyIiwKKyAgICAgICAgIk5vIENTUyBjbGFzcyBhdmFpYWJsZSI6ICJQYXMgZGUgY2xhc3NlIENTUyBhY2Nlc3NpYmxlIiwKKyAgICAgICAgIk9QVElPTlMiOiAiT1BUSU9OUyIsCisgICAgICAgICJPayI6ICJPSyIsCisgICAgICAgICJRdWljayBUYWcgRWRpdG9yIjogIkVkaXRldXIgcmFwaWRlIGRlIGJhbGlzZSIsCisgICAgICAgICJUQUdzIjogIkJhbGlzZXMiLAorICAgICAgICAiVGhlcmUgYXJlIHNvbWUgdW5jbG9zZWQgcXVvdGUiOiAiSWwgeSBhIGRlcyBhcG9zdHJvcGhlcyBtYWwgZmVybcOpZXMiLAorICAgICAgICAiVGhpcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIFRBRyI6ICJDZXQgYXR0cmlidXRlIGV4aXN0ZSBkw6lqw6Agc3VyIGNldHRlIGJhbGlzZSIsCisgICAgICAgICJZb3UgaGF2ZSB0byBzZWxlY3Qgc29tZSB0ZXh0IjogIlZvdXMgZGV2ZXogc8OpbGVjdGlvbm5lciBkdSB0ZXh0ZSIKKyAgICB9LAorICAgICJTYXZlU3VibWl0IjogeworICAgICAgICAiUmVhZHkiOiAiUHLDqnQiLAorICAgICAgICAiU2F2ZSI6ICJFbnJlZ2lzdHJlciIsCisgICAgICAgICJTYXZpbmcuLi4iOiAiRW5yZWdpc3RyZW1lbnQuLi4iLAorICAgICAgICAiaW4gcHJvZ3Jlc3MiOiAiZW4gY291cnMiCisgICAgfSwKKyAgICAiU2V0SWQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlciIsCisgICAgICAgICJEZWxldGUiOiAiU3VwcHJpbWVyIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgIkNsb3NpbmdEb3VibGVRdW90ZXMiOiAiwqsiLAorICAgICAgICAiQ29udmVydCBhbGwgcXVvdGVzIGFuZCBkYXNoZXMgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQiOiAiQ29udmVydGlyIHRvdXMgbGVzIGd1aWxsZW1ldHMgZXQgdGlyZXRzIGRhbnMgbGUgZG9jdW1lbnQgYWN0dWVsIiwKKyAgICAgICAgIkVuYWJsZSBhdXRvbWF0aWMgcmVwbGFjZW1lbnRzIjogIkFjdGl2ZXIgbGUgcmVtcGxhY2VtZW50IGF1dG9tYXRpcXVlIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk9wZW5pbmdEb3VibGVRdW90ZXMiOiAiwrsiLAorICAgICAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIlBhcmFtw6h0cmVzIFNtYXJ0UmVwbGFjZSIKKyAgICB9LAorICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlciIsCisgICAgICAgICJEaWN0aW9uYXJ5IjogIkRpY3Rpb25uYWlyZSIsCisgICAgICAgICJGaW5pc2hlZCBsaXN0IG9mIG1pc3BlbGxlZCB3b3JkcyI6ICJMaXN0ZSBkZXMgbW90cyBtYWwgb3J0aG9ncmFwaGnDqXMiLAorICAgICAgICAiSSB3aWxsIG9wZW4gaXQgaW4gYSBuZXcgcGFnZS4iOiAiT3V2ZXJ0dXJlIGRhbnMgdW5lIG5vdXZlbGxlIGZlbsOqdHJlIiwKKyAgICAgICAgIklnbm9yZSI6ICJJZ25vcmVyIiwKKyAgICAgICAgIklnbm9yZSBhbGwiOiAiVG91dCBpZ25vcmVyIiwKKyAgICAgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICJBdWN1bmUgZXJyZXVyIG9ydGhvZ3JhcGhpcXVlIGF2ZWMgbGUgZGljdGlvbm5haXJlIHPDqWxlY3Rpb25uw6kuIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk9yaWdpbmFsIHdvcmQiOiAiTW90IG9yaWdpbmFsIiwKKyAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gb3BlbiB0aGlzIGxpbmsiOiAiVmV1aWxsZXogY29uZmlybWVyIGwnb3V2ZXJ0dXJlIGRlIGNlIGxpZW4iLAorICAgICAgICAiUGxlYXNlIHdhaXQuICBDYWxsaW5nIHNwZWxsIGNoZWNrZXIuIjogIlZldWlsbGV6IHBhdGllbnRlci4gIEFwcGVsIGR1IGNvcnJlY3RldXIuIiwKKyAgICAgICAgIlBsZWFzZSB3YWl0OiBjaGFuZ2luZyBkaWN0aW9uYXJ5IHRvIjogIlZldWlsbGV6IHBhdGllbnRlci4gQ2hhbmdlbWVudCBkdSBkaWN0aW9ubmFpcmUgdmVycyIsCisgICAgICAgICJSZS1jaGVjayI6ICJWw6lyaWZpZXIgZW5jb3JlIiwKKyAgICAgICAgIlJlcGxhY2UiOiAiUmVtcGxhY2VyIiwKKyAgICAgICAgIlJlcGxhY2UgYWxsIjogIlRvdXQgcmVtcGxhY2VyIiwKKyAgICAgICAgIlJlcGxhY2Ugd2l0aCI6ICJSZW1wbGFjZXIgcGFyIiwKKyAgICAgICAgIlJldmVydCI6ICJBbm51bGVyIiwKKyAgICAgICAgIlNwZWxsLWNoZWNrIjogIkNvcnJlY3Rpb24iLAorICAgICAgICAiU3VnZ2VzdGlvbnMiOiAiU3VnZ2VzdGlvbnMiLAorICAgICAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIkNlY2kgZmVybWVyYSBsYSBmZW7DqnRyZSBldCBhbm51bGVyYSBsZXMgbW9kaWZpY2F0aW9ucy4gVmV1aWxsZXogY29uZmlybWVyLiIKKyAgICB9LAorICAgICJTdHlsaXN0IjogeworICAgICAgICAiU3R5bGVzIjogIlN0eWxlcyIKKyAgICB9LAorICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAiQ2FuY2VsIjogIkFubnVsZXIiLAorICAgICAgICAiQ2xlYW4gdXAgSFRNTCI6ICJOZXR0b3llciBsZSBjb2RlIEhUTUwiLAorICAgICAgICAiR2VuZXJhbCB0aWR5IHVwIGFuZCBjb3JyZWN0aW9uIG9mIHNvbWUgcHJvYmxlbXMuIjogIk5ldHRveWFnZSBnw6luw6lyaXF1ZSBldCBjb3JyZWN0aW9uIGRlcyBwcm9ibMOobWVzIG1pbmV1cnMuIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBsZWFzZSBzZWxlY3QgZnJvbSB0aGUgZm9sbG93aW5nIGNsZWFuaW5nIG9wdGlvbnMuLi4iOiAiVmV1aWxsZXogc8OpbGVjdGlvbm5lciB1bmUgb3B0aW9uIGRlIG5ldHRveWFnZS4iLAorICAgICAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICJTdXBwcmltZXIgbGVzIHRhaWxsZXMgZGUgcG9saWNlcyBwZXJzb25uYWxpc8OpZXMuIiwKKyAgICAgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIlN1cHByaW1lciBsZXMgY291bGV1cnMgZGUgdGV4dGUgcGVyc29uYWxpc8OpZXMuIiwKKyAgICAgICAgIlJlbW92ZSBjdXN0b20gdHlwZWZhY2VzIChmb250IFwic3R5bGVzXCIpLiI6ICJTdXBwcmltZXIgbGVzIHBvbGljZXMgcGVyc29uYWxpc8OpZXMgKGZvbnQgXCJzdHlsZXNcIikuIiwKKyAgICAgICAgIlJlbW92ZSBsYW5nIGF0dHJpYnV0ZXMuIjogIlN1cHByaW1lciBsZXMgYXR0cmlidXRzIGRlIGxhbmd1ZS4iCisgICAgfSwKKyAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAiQWxsIGZvdXIgc2lkZXMiOiAiUXVhdHJlIGNvdMOpcyIsCisgICAgICAgICJCb3JkZXJzIjogIkJvcmR1cmVzIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyIiwKKyAgICAgICAgIkNhcHRpb24iOiAiw4l0aXF1ZXR0ZSIsCisgICAgICAgICJDZWxsIFByb3BlcnRpZXMiOiAiUHJvcHJpw6l0w6lzIGRlIGNlbGx1bGUiLAorICAgICAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogIkNlbGwgcHJvcGVydGllcyIsCisgICAgICAgICJEZWxldGUgY2VsbCI6ICJTdXBwcmltZXIgdW5lIGNlbGx1bGUiLAorICAgICAgICAiRGVsZXRlIGNvbHVtbiI6ICJTdXBwcmltZXIgbGEgY29sb25uZSIsCisgICAgICAgICJEZWxldGUgcm93IjogIlN1cHByaW1lciB1bmUgcmFuZ8OpZSIsCisgICAgICAgICJEZXNjcmlwdGlvbiI6ICJEZXNjcmlwdGlvbiIsCisgICAgICAgICJGcmFtZXMiOiAiVnVlcyIsCisgICAgICAgICJJbnNlcnQgY2VsbCBhZnRlciI6ICJJbnPDqXJlciB1bmUgY2VsbHVsZSBhcHLDqHMiLAorICAgICAgICAiSW5zZXJ0IGNlbGwgYmVmb3JlIjogIkluc8OpcmVyIHVuZSBjZWxsdWxlIGF2YW50IiwKKyAgICAgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAiSW5zw6lyZXIgdW5lIGNvbG9ubmUgYXByw6hzIiwKKyAgICAgICAgIkluc2VydCBjb2x1bW4gYmVmb3JlIjogIkluc8OpcmVyIHVuZSBjb2xvbm5lIGF2YW50IiwKKyAgICAgICAgIkluc2VydCByb3cgYWZ0ZXIiOiAiSW5zw6lyZXIgdW5lIHJhbmfDqWUgYXByw6hzIiwKKyAgICAgICAgIkluc2VydCByb3cgYmVmb3JlIjogIkluc8OpcmVyIHVuZSByYW5nw6llIGF2YW50IiwKKyAgICAgICAgIk1lcmdlIGNlbGxzIjogIkZ1c2lvbm5lciBsZXMgY2VsbHVsZXMiLAorICAgICAgICAiTm8gcnVsZXMiOiAiQXVjdW5lIHLDqGdsZSIsCisgICAgICAgICJObyBzaWRlcyI6ICJBdWN1biBjw7R0w6kiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUGFkZGluZyI6ICJSZW1wbGlzc2FnZSIsCisgICAgICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiQ2xpcXVlciBzdXIgdW5lIGNlbGx1bGUiLAorICAgICAgICAiUm93IFByb3BlcnRpZXMiOiAiUHJvcHJpw6l0w6lzIGRlIHJhbmfDqWUiLAorICAgICAgICAiUm93IHByb3BlcnRpZXMiOiAiUHJvcHJpw6l0w6lzIGRlIHJhbmfDqWUiLAorICAgICAgICAiUm93cyI6ICJMaWduZXMiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICJSw6hnbGVzIGVudHJlIGxlcyByYW5nw6llcyBldCBsZXMgY2VsbHVsZXMiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBjb2x1bW5zIG9ubHkiOiAiUsOoZ2xlcyBlbnRyZSBsZXMgY29sb25uZXMgc2V1bGVtZW50IiwKKyAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogIlLDqGdsZXMgZW50cmUgbGVzIHJhbmfDqWVzIHNldWxlbWVudCIsCisgICAgICAgICJTcGFjaW5nIjogIkVzcGFjZW1lbnQiLAorICAgICAgICAiU3BhY2luZyBhbmQgcGFkZGluZyI6ICJFc3BhY2VtZW50IGV0IHJlbXBsaXNzYWdlIiwKKyAgICAgICAgIlNwbGl0IGNvbHVtbiI6ICJEaXZpc2VyIHVuZSBjb2xvbm5lIiwKKyAgICAgICAgIlNwbGl0IHJvdyI6ICJEaXZpc2VyIGxhIHJhbmfDqWUiLAorICAgICAgICAiU3VtbWFyeSI6ICJTb21tYWlyZSIsCisgICAgICAgICJUYWJsZSBQcm9wZXJ0aWVzIjogIlByb3ByacOpdMOpcyBkZSB0YWJsZSIsCisgICAgICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogIlByb3ByacOpdMOpcyBkZSB0YWJsZSIsCisgICAgICAgICJUaGUgYm90dG9tIHNpZGUgb25seSI6ICJDw7R0w6kgZHUgYmFzIHNldWxlbWVudCIsCisgICAgICAgICJUaGUgbGVmdC1oYW5kIHNpZGUgb25seSI6ICJDw7R0w6kgZ2F1Y2hlIHNldWxlbWVudCIsCisgICAgICAgICJUaGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb25seSI6ICJDw7R0w6kgZ2F1Y2hlIGV0IGRyb2l0IHNldWxlbWVudCIsCisgICAgICAgICJUaGUgcmlnaHQtaGFuZCBzaWRlIG9ubHkiOiAiQ8O0dMOpIGRyb2l0IHNldWxlbWVudCIsCisgICAgICAgICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSI6ICJDw7R0w6kgaGF1dCBldCBiYXMgc2V1bGVtZW50IiwKKyAgICAgICAgIlRoZSB0b3Agc2lkZSBvbmx5IjogIkPDtHTDqSBoYXV0IHNldWxlbWVudCIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiSWwgZXN0IGltcG9zc2libGUgZGUgc3VwcHJpbWVyIGxhIGRlcm5pw6hyZSBjZWxsdWxlIGRlIGxhIHJhbmfDqWUuIiwKKyAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iOiAiSWwgZXN0IGltcG9zc2libGUgZGUgc3VwcHJpbWVyIGxhIGRlcm5pw6hyZSBjb2xvbm5lIGRlIGxhIHRhYmxlLiIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIklsIGVzdCBpbXBvc3NpYmxlIGRlIHN1cHByaW1lciBsYSBkZXJuacOocmUgcmFuZ8OpZSBkZSBsYSB0YWJsZSIsCisgICAgICAgICJwaXhlbHMiOiAicGl4ZWxzIgorICAgIH0sCisgICAgIlRlbXBsYXRlIjogeworICAgICAgICAiQ2FuY2VsIjogIkFubnVsYXRpb24iLAorICAgICAgICAiSW5zZXJ0IHRlbXBsYXRlIjogIkluc8OpcmVyIHVuIHRlbXBsYXRlIgorICAgIH0sCisgICAgIlVuRm9ybWF0IjogeworICAgICAgICAiQWxsIjogIlRvdXQiLAorICAgICAgICAiQWxsIEhUTUw6IjogIlRvdXQgbGUgSFRNTCIsCisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlciIsCisgICAgICAgICJDbGVhbmluZyBBcmVhIjogIlpvbmUgZGUgbmV0dG95YWdlIiwKKyAgICAgICAgIkNsZWFuaW5nIG9wdGlvbnMiOiAiT3B0aW9ucyBkZSBuZXR0b3lhZ2UiLAorICAgICAgICAiRm9ybWF0dGluZzoiOiAiRm9ybWF0IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBhZ2UgQ2xlYW5lciI6ICJOZXR0b3lldXIgZGUgcGFnZSIsCisgICAgICAgICJTZWxlY3Qgd2hpY2ggdHlwZXMgb2YgZm9ybWF0dGluZyB5b3Ugd291bGQgbGlrZSB0byByZW1vdmUuIjogIlPDqWxlY3Rpb25uZXogcXVlbCB0eXBlIGRlIGZvcm1hdGFnZSB2b3VzIHZvdWxleiBzdXBwcmltZXIuIiwKKyAgICAgICAgIlNlbGVjdGlvbiI6ICJTw6lsZWN0aW9uIgorICAgIH0sCisgICAgIlVuc2F2ZWRDaGFuZ2VzIjogeworICAgICAgICAiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBlZGl0b3IiOiAiVm91cyBuJ2F2ZXogcGFzIGVucmVnaXN0csOpIHZvcyBtb2RpZmljYXRpb25zIgorICAgIH0sCisgICAgIlhpbmhhIjogeworICAgICAgICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICImIzgyMTI7IEZvcm1hdCAmIzgyMTI7IiwKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIkEgcHJvcG9zIiwKKyAgICAgICAgIkFkZHJlc3MiOiAiQWRyZXNzZSIsCisgICAgICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIlN1cmxpZ25hZ2UiLAorICAgICAgICAiQm9sZCI6ICJHcmFzIiwKKyAgICAgICAgIkJ1bGxldGVkIExpc3QiOiAiTGlzdGUgw6AgcHVjZXMiLAorICAgICAgICAiQ2xlYW4gY29udGVudCBwYXN0ZWQgZnJvbSBXb3JkIjogIk5ldHRveWFnZSBkdSBjb250ZW51IGNvcGnDqSBkZXB1aXMgV29yZCIsCisgICAgICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICJTdXBwcmltZXIgcGFyYW3DqHRyZXMgaW5saW5lIGRlIGxhIHBvbGljZSIsCisgICAgICAgICJDbGVhciBNU09mZmljZSB0YWdzIjogIlN1cHByaW1lciB0YWdzIE1TT2ZmaWNlIiwKKyAgICAgICAgIkNsb3NlIjogIkZlcm1lciIsCisgICAgICAgICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIkNvbnN0cnVjdGlvbiBkZSBsJ29iamV0IiwKKyAgICAgICAgIkNvcHkgc2VsZWN0aW9uIjogIkNvcGllciBsYSBzw6lsZWN0aW9uIiwKKyAgICAgICAgIkNyZWF0ZSBTdGF0dXNiYXIiOiAiQ29uc3RydWN0aW9uIGRlIGxhIGJhcnJlIGRlIHN0YXR1cyIsCisgICAgICAgICJDcmVhdGUgVG9vbGJhciI6ICJDb25zdHJ1Y3Rpb24gZGUgbGEgYmFycmUgZCdpY29uZXMiLAorICAgICAgICAiQ3VycmVudCBzdHlsZSI6ICJTdHlsZSBjb3VyYW50IiwKKyAgICAgICAgIkN1dCBzZWxlY3Rpb24iOiAiQ291cGVyIGxhIHPDqWxlY3Rpb24iLAorICAgICAgICAiRGVjcmVhc2UgSW5kZW50IjogIkRpbWludWVyIGxlIHJldHJhaXQiLAorICAgICAgICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiRGlyZWN0aW9uIGRlIGdhdWNoZSDDoCBkcm9pdGUiLAorICAgICAgICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiRGlyZWN0aW9uIGRlIGRyb2l0ZSDDoCBnYXVjaGUiLAorICAgICAgICAiRU5URVIiOiAiRU5UUkVFIiwKKyAgICAgICAgIkVkaXRvciBIZWxwIjogIkFpZGUgZGUgbCfDqWRpdGV1ciIsCisgICAgICAgICJGaW5pc2hpbmciOiAiQ2hhcmdlbWVudCBiaWVudMO0dCB0ZXJtaW7DqSIsCisgICAgICAgICJGb250IENvbG9yIjogIkNvdWxldXIgZGUgcG9saWNlIiwKKyAgICAgICAgIkZvcm1hdHRlZCI6ICJGb3JtYXTDqSIsCisgICAgICAgICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiR8OpbsOpcmF0aW9uIGRlIFhpbmhhIiwKKyAgICAgICAgIkhlYWRpbmcgMSI6ICJUaXRyZSAxIiwKKyAgICAgICAgIkhlYWRpbmcgMiI6ICJUaXRyZSAyIiwKKyAgICAgICAgIkhlYWRpbmcgMyI6ICJUaXRyZSAzIiwKKyAgICAgICAgIkhlYWRpbmcgNCI6ICJUaXRyZSA0IiwKKyAgICAgICAgIkhlYWRpbmcgNSI6ICJUaXRyZSA1IiwKKyAgICAgICAgIkhlYWRpbmcgNiI6ICJUaXRyZSA2IiwKKyAgICAgICAgIkhlYWRpbmdzIjogIlRpdHJlcyIsCisgICAgICAgICJIZWxwIHVzaW5nIGVkaXRvciI6ICJBaWRlIiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICJMaWduZSBob3Jpem9udGFsZSIsCisgICAgICAgICJJbmNyZWFzZSBJbmRlbnQiOiAiQXVnbWVudGVyIGxlIHJldHJhaXQiLAorICAgICAgICAiSW5pdCBlZGl0b3Igc2l6ZSI6ICJJbml0aWFsaXNhdGlvbiBkZSBsYSB0YWlsbGUgZCfDqWRpdGlvbiIsCisgICAgICAgICJJbnNlcnQgVGFibGUiOiAiSW5zw6lyZXIgdW4gdGFibGVhdSIsCisgICAgICAgICJJbnNlcnQgV2ViIExpbmsiOiAiSW5zw6lyZXIgdW4gbGllbiIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIkluc8OpcmVyIC8gTW9kaWZpZXIgdW5lIGltYWdlIiwKKyAgICAgICAgIkluc2VydC9PdmVyd3JpdGUiOiAiSW5zZXJ0aW9uIC8gUmVtcGxhY2VtZW50IiwKKyAgICAgICAgIkl0YWxpYyI6ICJJdGFsaXF1ZSIsCisgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICJDZW50cmVyIiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICJKdXN0aWZpZXIiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIkFsaWduZXIgw6AgZ2F1Y2hlIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiQWxpZ25lciDDoCBkcm9pdGUiLAorICAgICAgICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogIlJhY2NvdXJjaXMgY2xhdmllciIsCisgICAgICAgICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiQ2hhcmdlbWVudCBlbiBjb3Vycy4gVmV1aWxsZXogcGF0aWVudGVyISIsCisgICAgICAgICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIjogIkNoYXJnZW1lbnQgZHUgcGx1Z2luICRwbHVnaW4iLAorICAgICAgICAiTm9ybWFsIjogIk5vcm1hbCIsCisgICAgICAgICJPcmRlcmVkIExpc3QiOiAiTGlzdGUgbnVtw6lyb3TDqWUiLAorICAgICAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiQ29sbGVyIGRlcHVpcyBsZSBwcmVzc2UtcGFwaWVyIiwKKyAgICAgICAgIlBhdGgiOiAiQ2hlbWluIiwKKyAgICAgICAgIlByaW50IGRvY3VtZW50IjogIkltcHJpbWVyIGRvY3VtZW50IiwKKyAgICAgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlLDqXDDqXRlciBsYSBkZXJuacOocmUgYWN0aW9uIiwKKyAgICAgICAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIjogIkVucmVnaXN0cmVtZW50IGR1IHBsdWdpbiAkcGx1Z2luIiwKKyAgICAgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIlN1cHByaW1lciBtaXNlIGVuIGZvcm1lIiwKKyAgICAgICAgIlNISUZULUVOVEVSIjogIlNISUZUK0VOVFJFRSIsCisgICAgICAgICJTYXZlIGFzIjogIkVucmVnaXN0cmVyIHNvdXMiLAorICAgICAgICAiU2VsZWN0IGFsbCI6ICJUb3V0IHPDqWxlY3Rpb25uZXIiLAorICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiQXBwbGlxdWUgbGUgZm9ybWF0IHBhcmFncmFwaGUiLAorICAgICAgICAiU3BsaXQgQmxvY2siOiAiU8OpcGFyZXIgbGVzIGJsb2NzIiwKKyAgICAgICAgIlN0cmlrZXRocm91Z2giOiAiQmFycsOpIiwKKyAgICAgICAgIlN1YnNjcmlwdCI6ICJJbmRpY2UiLAorICAgICAgICAiU3VwZXJzY3JpcHQiOiAiRXhwb3NhbnQiLAorICAgICAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogIkwnw6lkaXRldXIgZm91cm5pdCBsZXMgY29tYmluYWlzb25zIGRlIHRvdWNoZXMgc3VpdmFudGVzIDoiLAorICAgICAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiQWZmaWNoZXIgLyBNYXNxdWVyIGxlcyBib3JkdXJlcyIsCisgICAgICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiQWZmaWNoZXIgLyBNYXNxdWVyIGNvZGUgc291cmNlIiwKKyAgICAgICAgIlVuZGVybGluZSI6ICJTb3VsaWduw6kiLAorICAgICAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiQW5udWxlciBsYSBkZXJuacOocmUgYWN0aW9uIiwKKyAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiVm91bGV6LXZvdXMgc3VwcHJpbWVyIGxlcyBjb3VsZXVycyA/IiwKKyAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIlZvdWxlei12b3VzIHN1cHByaW1lciBsZXMgdGFpbGxlcyA/IiwKKyAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICJWb3VsZXotdm91cyBzdXBwcmltZXIgbGVzIHR5cGVzID8iLAorICAgICAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIlZvdXMgw6p0ZXMgZW4gTU9ERSBURVhURS4gIEFwcHV5ZXogc3VyIGxlIGJvdXRvbiBbPD5dIHBvdXIgcmV0b3VybmVyIGF1IG1vZGUgV1lTSVdZRy4iLAorICAgICAgICAiaW5zZXJ0IGxpbmVicmVhayI6ICJJbnPDqHJlIHVuIHNhdXQgZGUgbGlnbmUiLAorICAgICAgICAibmV3IHBhcmFncmFwaCI6ICJOb3V2ZWF1IHBhcmFncmFwaGUiCisgICAgfSwKKyAgICAiX19ORVdfVFJBTlNMQVRJT05TX18iOiB7CisgICAgICAgICJDaGFyQ291bnRlciI6IHsKKyAgICAgICAgICAgICIuLi4gaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbG9yUGlja2VyIjogeworICAgICAgICAgICAgIkNsaWNrIGEgY29sb3IuLi4iOiAiIiwKKyAgICAgICAgICAgICJTYW1wbGUiOiAiIiwKKyAgICAgICAgICAgICJXZWIgU2FmZTogIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAgICAgIkRlbGV0ZSBDZWxsIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEZWZpbml0aW9uTGlzdCI6IHsKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGRlc2NyaXB0aW9uIjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiBsaXN0IjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiB0ZXJtIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRpYWxvZ3MiOiB7CisgICAgICAgICAgICAiU29tZSBUZXh0IEhlcmUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgICAgICJFZGl0IFRhZyBCeSBQZWciOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICAgICAiIT0iOiAiIiwKKyAgICAgICAgICAgICIhaW4iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7LSI6ICIiLAorICAgICAgICAgICAgIiZndDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSZndDsiOiAiIiwKKyAgICAgICAgICAgICImbHQ7eCZndDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYCFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgLmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAwYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDJgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgM2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA0YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA3YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDhgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGBlYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsmbmJzcDtgMWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YCt7Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2AtOlxcIGAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLXs6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YENgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGNvc2AiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgbG5gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHBpYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgc2luYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0YW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRpbWVzYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZxdW90O3RleHQmcXVvdDsiOiAiIiwKKyAgICAgICAgICAgICInK2Zvcm11bGErJyI6ICIiLAorICAgICAgICAgICAgIigobiksKGspKSI6ICIiLAorICAgICAgICAgICAgIih4KzEpLyh4LTEpIjogIiIsCisgICAgICAgICAgICAiKiI6ICIiLAorICAgICAgICAgICAgIioqIjogIiIsCisgICAgICAgICAgICAiKy0iOiAiIiwKKyAgICAgICAgICAgICItJmd0OyI6ICIiLAorICAgICAgICAgICAgIi0mbHQ7IjogIiIsCisgICAgICAgICAgICAiLToiOiAiIiwKKyAgICAgICAgICAgICItPSI6ICIiLAorICAgICAgICAgICAgIi8vIjogIiIsCisgICAgICAgICAgICAiL18iOiAiIiwKKyAgICAgICAgICAgICI6LiI6ICIiLAorICAgICAgICAgICAgIj0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiQCI6ICIiLAorICAgICAgICAgICAgIltbYSxiXSxbYyxkXV0iOiAiIiwKKyAgICAgICAgICAgICJcXFxcIjogIiIsCisgICAgICAgICAgICAiXFxuQ2xpY2sgaW4gdGhlIGJveCB0byB1c2UgeW91ciBrZXlib2FyZCBvciB1c2UgdGhlIGJ1dHRvbnNcXG4iOiAiIiwKKyAgICAgICAgICAgICJeXiI6ICIiLAorICAgICAgICAgICAgIl5eXiI6ICIiLAorICAgICAgICAgICAgIl9ffCI6ICIiLAorICAgICAgICAgICAgIl98XyI6ICIiLAorICAgICAgICAgICAgImAhPWAiOiAiIiwKKyAgICAgICAgICAgICJgIWluYCI6ICIiLAorICAgICAgICAgICAgImAmYW5kO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmNhcDtgIjogIiIsCisgICAgICAgICAgICAiYCZjdXA7YCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7LWAiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDt4Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJm9yO2AiOiAiIiwKKyAgICAgICAgICAgICJgJnF1b3Q7dGV4dCZxdW90O2AiOiAiIiwKKyAgICAgICAgICAgICJgKChuKSwoaykpYCI6ICIiLAorICAgICAgICAgICAgImAoeCsxKS8oeC0xKWAiOiAiIiwKKyAgICAgICAgICAgICJgKipgIjogIiIsCisgICAgICAgICAgICAiYCpgIjogIiIsCisgICAgICAgICAgICAiYCstYCI6ICIiLAorICAgICAgICAgICAgImAtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLSZsdDtgIjogIiIsCisgICAgICAgICAgICAiYC06YCI6ICIiLAorICAgICAgICAgICAgImAtPWAiOiAiIiwKKyAgICAgICAgICAgICJgLy9gIjogIiIsCisgICAgICAgICAgICAiYC9fYCI6ICIiLAorICAgICAgICAgICAgImA6LmAiOiAiIiwKKyAgICAgICAgICAgICJgPSZndDtgIjogIiIsCisgICAgICAgICAgICAiYEBgIjogIiIsCisgICAgICAgICAgICAiYFtbYSxiXSxbYyxkXV1gIjogIiIsCisgICAgICAgICAgICAiYFxcXFxgIjogIiIsCisgICAgICAgICAgICAiYF9ffGAiOiAiIiwKKyAgICAgICAgICAgICJgX3xfYCI6ICIiLAorICAgICAgICAgICAgImBBQWAiOiAiIiwKKyAgICAgICAgICAgICJgYWxlcGhgIjogIiIsCisgICAgICAgICAgICAiYGFscGhhYCI6ICIiLAorICAgICAgICAgICAgImBhbmRgIjogIiIsCisgICAgICAgICAgICAiYGJhcmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgQ0NgIjogIiIsCisgICAgICAgICAgICAiYGNjYWAiOiAiIiwKKyAgICAgICAgICAgICJgY2hpYCI6ICIiLAorICAgICAgICAgICAgImBkYXJyYCI6ICIiLAorICAgICAgICAgICAgImBkZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsYCI6ICIiLAorICAgICAgICAgICAgImBEZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRpYW1vbmRgIjogIiIsCisgICAgICAgICAgICAiYGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGR5L2R4YCI6ICIiLAorICAgICAgICAgICAgImBFRWAiOiAiIiwKKyAgICAgICAgICAgICJgZXBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgZXRhYCI6ICIiLAorICAgICAgICAgICAgImBmcmFgIjogIiIsCisgICAgICAgICAgICAiYEdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBnYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ3JhZGAiOiAiIiwKKyAgICAgICAgICAgICJgaGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaGF0YWAiOiAiIiwKKyAgICAgICAgICAgICJgaWZgIjogIiIsCisgICAgICAgICAgICAiYGluYCI6ICIiLAorICAgICAgICAgICAgImBpbnRgIjogIiIsCisgICAgICAgICAgICAiYGlvdGFgIjogIiIsCisgICAgICAgICAgICAiYGthcHBhYCI6ICIiLAorICAgICAgICAgICAgImBsYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYExhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGltXyh4LSZndDtvbylgIjogIiIsCisgICAgICAgICAgICAiYGxvZ2AiOiAiIiwKKyAgICAgICAgICAgICJgbXVgIjogIiIsCisgICAgICAgICAgICAiYE5OYCI6ICIiLAorICAgICAgICAgICAgImBubmAiOiAiIiwKKyAgICAgICAgICAgICJgbm90YCI6ICIiLAorICAgICAgICAgICAgImBudWAiOiAiIiwKKyAgICAgICAgICAgICJgbytgIjogIiIsCisgICAgICAgICAgICAiYG8uYCI6ICIiLAorICAgICAgICAgICAgImBPL2AiOiAiIiwKKyAgICAgICAgICAgICJgb2ludGAiOiAiIiwKKyAgICAgICAgICAgICJgb21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYE9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBvb2AiOiAiIiwKKyAgICAgICAgICAgICJgb3JgIjogIiIsCisgICAgICAgICAgICAiYG94YCI6ICIiLAorICAgICAgICAgICAgImBQaGlgIjogIiIsCisgICAgICAgICAgICAiYHBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGlgIjogIiIsCisgICAgICAgICAgICAiYHBpYCI6ICIiLAorICAgICAgICAgICAgImBwcm9kYCI6ICIiLAorICAgICAgICAgICAgImBwcm9wYCI6ICIiLAorICAgICAgICAgICAgImBQc2lgIjogIiIsCisgICAgICAgICAgICAiYHBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgUVFgIjogIiIsCisgICAgICAgICAgICAiYHF1YWRgIjogIiIsCisgICAgICAgICAgICAiYHJBcnJgIjogIiIsCisgICAgICAgICAgICAiYHJob2AiOiAiIiwKKyAgICAgICAgICAgICJgcm9vdChuKSh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgUlJgIjogIiIsCisgICAgICAgICAgICAiYHNmYWAiOiAiIiwKKyAgICAgICAgICAgICJgc2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYFNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzcXJ0KHgpYCI6ICIiLAorICAgICAgICAgICAgImBzcXVhcmVgIjogIiIsCisgICAgICAgICAgICAiYHN0YWNrcmVsKC0mZ3Q7KSgrKWAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViYCI6ICIiLAorICAgICAgICAgICAgImBzdWJlYCI6ICIiLAorICAgICAgICAgICAgImBzdW1gIjogIiIsCisgICAgICAgICAgICAiYHN1cGAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwZWAiOiAiIiwKKyAgICAgICAgICAgICJgdGF1YCI6ICIiLAorICAgICAgICAgICAgImBUaGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdGhldGFgIjogIiIsCisgICAgICAgICAgICAiYFRUYCI6ICIiLAorICAgICAgICAgICAgImB0dGFgIjogIiIsCisgICAgICAgICAgICAiYHVhcnJgIjogIiIsCisgICAgICAgICAgICAiYHVsYWAiOiAiIiwKKyAgICAgICAgICAgICJgdXBzaWxvbmAiOiAiIiwKKyAgICAgICAgICAgICJgdXVgIjogIiIsCisgICAgICAgICAgICAiYHZlY2FgIjogIiIsCisgICAgICAgICAgICAiYHZ2YCI6ICIiLAorICAgICAgICAgICAgImB4XyhtbilgIjogIiIsCisgICAgICAgICAgICAiYFhpYCI6ICIiLAorICAgICAgICAgICAgImB4aWAiOiAiIiwKKyAgICAgICAgICAgICJgeHhgIjogIiIsCisgICAgICAgICAgICAiYHpldGFgIjogIiIsCisgICAgICAgICAgICAiYFpaYCI6ICIiLAorICAgICAgICAgICAgImB8LSZndDtgIjogIiIsCisgICAgICAgICAgICAiYHwtLWAiOiAiIiwKKyAgICAgICAgICAgICJgfD09YCI6ICIiLAorICAgICAgICAgICAgImB8X19gIjogIiIsCisgICAgICAgICAgICAiYHx+YCI6ICIiLAorICAgICAgICAgICAgImB+PWAiOiAiIiwKKyAgICAgICAgICAgICJgfnxgIjogIiIsCisgICAgICAgICAgICAiYH5+YCI6ICIiLAorICAgICAgICAgICAgIkFBIjogIiIsCisgICAgICAgICAgICAiYWxlcGgiOiAiIiwKKyAgICAgICAgICAgICJhbHBoYSI6ICIiLAorICAgICAgICAgICAgImFuZCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aCBGb3JtdWxhIElucHV0IjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoTUwgRXhhbXBsZSI6ICIiLAorICAgICAgICAgICAgImJhcmEiOiAiIiwKKyAgICAgICAgICAgICJCYXNlZCBvbiBBU0NJSU1hdGhNTCBieSI6ICIiLAorICAgICAgICAgICAgImJiYSI6ICIiLAorICAgICAgICAgICAgImJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiZXRhIjogIiIsCisgICAgICAgICAgICAiQ0MiOiAiIiwKKyAgICAgICAgICAgICJjY2EiOiAiIiwKKyAgICAgICAgICAgICJjaGkiOiAiIiwKKyAgICAgICAgICAgICJkYXJyIjogIiIsCisgICAgICAgICAgICAiZGRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkZWwiOiAiIiwKKyAgICAgICAgICAgICJEZWx0YSI6ICIiLAorICAgICAgICAgICAgImRlbHRhIjogIiIsCisgICAgICAgICAgICAiZGlhbW9uZCI6ICIiLAorICAgICAgICAgICAgImRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkeS9keCI6ICIiLAorICAgICAgICAgICAgIkVFIjogIiIsCisgICAgICAgICAgICAiZXBzaSI6ICIiLAorICAgICAgICAgICAgImV0YSI6ICIiLAorICAgICAgICAgICAgIkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFzY2lpTWF0aE1MIHZpc2l0IHRoaXMgcGFnZToiOiAiIiwKKyAgICAgICAgICAgICJGb3JtdWxhIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgImZyYSI6ICIiLAorICAgICAgICAgICAgImdhbW1hIjogIiIsCisgICAgICAgICAgICAiR2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJncmFkIjogIiIsCisgICAgICAgICAgICAiaEFyciI6ICIiLAorICAgICAgICAgICAgImhhcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXRhIjogIiIsCisgICAgICAgICAgICAiaWYiOiAiIiwKKyAgICAgICAgICAgICJpbiI6ICIiLAorICAgICAgICAgICAgIklucHV0IjogIiIsCisgICAgICAgICAgICAiaW50IjogIiIsCisgICAgICAgICAgICAiaW50X2FeYmYoeClkeCI6ICIiLAorICAgICAgICAgICAgImlvdGEiOiAiIiwKKyAgICAgICAgICAgICJrYXBwYSI6ICIiLAorICAgICAgICAgICAgIkxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhcnIiOiAiIiwKKyAgICAgICAgICAgICJsQXJyIjogIiIsCisgICAgICAgICAgICAibGltXyh4LSZndDtvbykiOiAiIiwKKyAgICAgICAgICAgICJtdSI6ICIiLAorICAgICAgICAgICAgIk5OIjogIiIsCisgICAgICAgICAgICAibm4iOiAiIiwKKyAgICAgICAgICAgICJubm4iOiAiIiwKKyAgICAgICAgICAgICJub3QiOiAiIiwKKyAgICAgICAgICAgICJudSI6ICIiLAorICAgICAgICAgICAgIm8rIjogIiIsCisgICAgICAgICAgICAiby4iOiAiIiwKKyAgICAgICAgICAgICJPLyI6ICIiLAorICAgICAgICAgICAgIm9pbnQiOiAiIiwKKyAgICAgICAgICAgICJvbWVnYSI6ICIiLAorICAgICAgICAgICAgIk9tZWdhIjogIiIsCisgICAgICAgICAgICAib28iOiAiIiwKKyAgICAgICAgICAgICJvciI6ICIiLAorICAgICAgICAgICAgIm94IjogIiIsCisgICAgICAgICAgICAiUGhpIjogIiIsCisgICAgICAgICAgICAicGhpIjogIiIsCisgICAgICAgICAgICAicGkiOiAiIiwKKyAgICAgICAgICAgICJQaSI6ICIiLAorICAgICAgICAgICAgInByb2QiOiAiIiwKKyAgICAgICAgICAgICJwcm9wIjogIiIsCisgICAgICAgICAgICAicHNpIjogIiIsCisgICAgICAgICAgICAiUHNpIjogIiIsCisgICAgICAgICAgICAiUVEiOiAiIiwKKyAgICAgICAgICAgICJxdWFkIjogIiIsCisgICAgICAgICAgICAickFyciI6ICIiLAorICAgICAgICAgICAgInJobyI6ICIiLAorICAgICAgICAgICAgInJvb3QobikoeCkiOiAiIiwKKyAgICAgICAgICAgICJSUiI6ICIiLAorICAgICAgICAgICAgInNmYSI6ICIiLAorICAgICAgICAgICAgInNpZ21hIjogIiIsCisgICAgICAgICAgICAiU2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJzcXJ0KHgpIjogIiIsCisgICAgICAgICAgICAic3F1YXJlIjogIiIsCisgICAgICAgICAgICAic3RhY2tyZWwoLSZndDspKCspIjogIiIsCisgICAgICAgICAgICAic3ViIjogIiIsCisgICAgICAgICAgICAic3ViZSI6ICIiLAorICAgICAgICAgICAgInN1bSI6ICIiLAorICAgICAgICAgICAgInN1bV8obj0xKV5vbyI6ICIiLAorICAgICAgICAgICAgInN1cCI6ICIiLAorICAgICAgICAgICAgInN1cGUiOiAiIiwKKyAgICAgICAgICAgICJ0YXUiOiAiIiwKKyAgICAgICAgICAgICJUaGV0YSI6ICIiLAorICAgICAgICAgICAgInRoZXRhIjogIiIsCisgICAgICAgICAgICAiVFQiOiAiIiwKKyAgICAgICAgICAgICJ0dGEiOiAiIiwKKyAgICAgICAgICAgICJ1YXJyIjogIiIsCisgICAgICAgICAgICAidWxhIjogIiIsCisgICAgICAgICAgICAidXBzaWxvbiI6ICIiLAorICAgICAgICAgICAgInV1IjogIiIsCisgICAgICAgICAgICAidXV1IjogIiIsCisgICAgICAgICAgICAidmVjYSI6ICIiLAorICAgICAgICAgICAgInZ2IjogIiIsCisgICAgICAgICAgICAidnZ2IjogIiIsCisgICAgICAgICAgICAieF4obStuKSI6ICIiLAorICAgICAgICAgICAgInhfKG1uKSI6ICIiLAorICAgICAgICAgICAgIlhpIjogIiIsCisgICAgICAgICAgICAieGkiOiAiIiwKKyAgICAgICAgICAgICJ4eCI6ICIiLAorICAgICAgICAgICAgInpldGEiOiAiIiwKKyAgICAgICAgICAgICJaWiI6ICIiLAorICAgICAgICAgICAgInwtJmd0OyI6ICIiLAorICAgICAgICAgICAgInwtLSI6ICIiLAorICAgICAgICAgICAgInw9PSI6ICIiLAorICAgICAgICAgICAgInxfXyI6ICIiLAorICAgICAgICAgICAgInx+IjogIiIsCisgICAgICAgICAgICAifj0iOiAiIiwKKyAgICAgICAgICAgICJ+fCI6ICIiLAorICAgICAgICAgICAgIn5+IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZhbmN5U2VsZWN0cyI6IHsKKyAgICAgICAgICAgICInK29wdC50ZXh0KyciOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiJztcclxuICB2YXIgdGFnYyA9ICciOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiRW50ZXIgdGhlIG5hbWUgZm9yIG5ldyBvcHRpb24uIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFNlbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgU2VsZWN0Li4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1zIjogeworICAgICAgICAgICAgIidvbkNsaWNrJz0iOiAiIiwKKyAgICAgICAgICAgICJBY2Nlc3MgS2V5OiI6ICIiLAorICAgICAgICAgICAgIkFjdGlvbiBVUkw6IjogIiIsCisgICAgICAgICAgICAiQnV0dG9uIFNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkNoZWNrZWQiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zOiI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQgdGV4dCAob3B0aW9uYWwpIjogIiIsCisgICAgICAgICAgICAiRGltZW5zaW9ucyI6ICIiLAorICAgICAgICAgICAgIkRpc2FibGVkIjogIiIsCisgICAgICAgICAgICAiRW5jb2Rpbmc6IjogIiIsCisgICAgICAgICAgICAiRm9yIENvbnRyb2w6IjogIiIsCisgICAgICAgICAgICAiRm9ybSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IElOUFVUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gaGFuZGxlciBzY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiR2V0IjogIiIsCisgICAgICAgICAgICAiSGFyZCI6ICIiLAorICAgICAgICAgICAgIkhlaWdodCBpbiBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkhUTUwtRm9ybSB0byBDR0kgKGRlZmF1bHQpIjogIiIsCisgICAgICAgICAgICAiSW1hZ2Ugc291cmNlIjogIiIsCisgICAgICAgICAgICAiSW5pdGlhbCBUZXh0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiSmF2YXNjcmlwdCBmb3IgYnV0dG9uIGNsaWNrIjogIiIsCisgICAgICAgICAgICAiTGFiZWw6IjogIiIsCisgICAgICAgICAgICAiTGVnZW5kOiI6ICIiLAorICAgICAgICAgICAgIk1heCBsZW5ndGg6IjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY2NlcHRlZCI6ICIiLAorICAgICAgICAgICAgIk1ldGhvZDoiOiAiIiwKKyAgICAgICAgICAgICJtdWx0aXBhcnQgRm9ybSBEYXRhIChGaWxlLVVwbG9hZCkiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJuYW1lIG9mIHRoZSB0ZXh0YXJlYSI6ICIiLAorICAgICAgICAgICAgIm5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIm5vd3JhcCI6ICIiLAorICAgICAgICAgICAgIk9mZiI6ICIiLAorICAgICAgICAgICAgIlBoeXNpY2FsIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIGEgTGFiZWwiOiAiIiwKKyAgICAgICAgICAgICJQb3N0IjogIiIsCisgICAgICAgICAgICAicHJlIjogIiIsCisgICAgICAgICAgICAiUmVhZCBPbmx5IjogIiIsCisgICAgICAgICAgICAiU2l6ZSBvZiB0ZXh0IGJveCBpbiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiU29mdCI6ICIiLAorICAgICAgICAgICAgIlRhYiBJbmRleDoiOiAiIiwKKyAgICAgICAgICAgICJUYXJnZXQgRnJhbWU6IjogIiIsCisgICAgICAgICAgICAiVVJMIG9mIGltYWdlIjogIiIsCisgICAgICAgICAgICAiVmFsdWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZToiOiAiIiwKKyAgICAgICAgICAgICJWaXJ0dWFsIjogIiIsCisgICAgICAgICAgICAiV2lkdGggaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJXcmFwIE1vZGU6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBOYW1lIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bGxQYWdlIjogeworICAgICAgICAgICAgIi4uLiI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChJU08tODg1OS01KSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChLT0k4LVIpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKFdJTkRPV1MtMTI1MSkiOiAiIiwKKyAgICAgICAgICAgICJ3ZXN0ZXJuIChJU08tODg1OS0xKSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJHZWNrbyI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICAgICAiJiN4MDBkNzsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBIb3Jpem9udGFsIFJ1bGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5saW5lU3R5bGVyIjogeworICAgICAgICAgICAgIkNTUyBTdHlsZSI6ICIiLAorICAgICAgICAgICAgIi0iOiAiPDxFcXVhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0Tm90ZSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgZm9vdG5vdGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgTm90ZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQYWdlYnJlYWsiOiB7CisgICAgICAgICAgICAiUGFnZSBCcmVhayI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0IjogeworICAgICAgICAgICAgIlxcbiAgVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmdcXG4iOiAiIiwKKyAgICAgICAgICAgICJIaWRlIHByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgU25pcHBldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIiIsCisgICAgICAgICAgICAiTGluazEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMiI6ICIiLAorICAgICAgICAgICAgIkxpbmszIjogIiIsCisgICAgICAgICAgICAiTGluazQiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNSI6ICIiLAorICAgICAgICAgICAgIlNob3cgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nIjogIiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldDIiOiB7CisgICAgICAgICAgICAiQWxsIENhdGVnb3JpZXMiOiAiIiwKKyAgICAgICAgICAgICJGaWx0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMgSFRNTCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyB0ZW1wbGF0ZSB2YXJpYWJsZSI6ICIiLAorICAgICAgICAgICAgIk9ubHkgc2VhcmNoIHdvcmQgYmVnaW5uaW5nIjogIiIsCisgICAgICAgICAgICAiSFRNTCI6ICI8PENoYXJDb3VudGVyPj4iLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICI8PEluc2VydFNuaXBwZXQ+PiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgICAgICJDYXB0aW9uIGZvciB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZSBib3JkZXJzOiI6ICIiLAorICAgICAgICAgICAgIkxheW91IjogIiIsCisgICAgICAgICAgICAiU3R5bGUgb2YgdGhlIGJvcmRlciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJMYW5nTWFya3MiOiB7CisgICAgICAgICAgICAiJywgJyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJMaW5rZXIiOiB7CisgICAgICAgICAgICAiKHB4KSI6ICIiLAorICAgICAgICAgICAgIkFuY2hvci1MaW5rIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yOiI6ICIiLAorICAgICAgICAgICAgIkxvY2F0aW9uIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZW51IEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJQb3B1cFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZWFibGU6IjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsYmFyczoiOiAiIiwKKyAgICAgICAgICAgICJTaG93cyBPbiBIb3ZlciI6ICIiLAorICAgICAgICAgICAgIlN0YXR1cyBCYXI6IjogIiIsCisgICAgICAgICAgICAiVGl0bGU6IjogIiIsCisgICAgICAgICAgICAiVG9vbGJhcjoiOiAiIgorICAgICAgICB9LAorICAgICAgICAiT3BlcmEiOiB7CisgICAgICAgICAgICAiTUFSSyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQYXN0ZVRleHQiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IHRleHQgaW4gbmV3IHBhcmFncmFwaCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQcmVzZXJ2ZVNjcmlwdHMiOiB7CisgICAgICAgICAgICAiSmF2YVNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIlBIUCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgICAgICInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnY2wnOiAnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNldElkIjogeworICAgICAgICAgICAgIklEL05hbWU6IjogIiIsCisgICAgICAgICAgICAiU2V0IElkIGFuZCBOYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElkL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSUQvTmFtZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiQ2xvc2luZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBTZWxlY3Rpb24gT25seSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIFNjb3BlIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHN0YW5kIGJ5IHdoaWxlIGNsZWFuaW5nIGluIHByb2Nlc3MuLi4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxpZ25tZW50IChsZWZ0L3JpZ2h0L2p1c3RpZnkpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgY2xhc3NlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgQWxsIEhUTUwgVGFncyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgc3R5bGVzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBlbXBoYXNpcyBhbmQgYW5ub3RhdGlvbnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIFBhcmFncmFwaHMiOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzLiI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UgZGlyZWN0aW9uYWwgcXVvdGUgbWFya3Mgd2l0aCBub24tZGlyZWN0aW9uYWwgcXVvdGUgbWFya3MuIjogIiIsCisgICAgICAgICAgICAiVmlnb3JvdXNseSBwdXJnZSBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlRhYmxlT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJDZWxsIFR5cGU6IjogIiIsCisgICAgICAgICAgICAiQ2VsbHMgZG93biI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIHRvIHRoZSByaWdodCwgYW5kIjogIiIsCisgICAgICAgICAgICAiRG8gTm90IENoYW5nZSI6ICIiLAorICAgICAgICAgICAgIkZyYW1lIGFuZCBib3JkZXJzIjogIiIsCisgICAgICAgICAgICAiSGVhZGVyICh0aCkiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBjdXJyZW50IGNlbGwgd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJOb3JtYWwgKHRkKSI6ICIiLAorICAgICAgICAgICAgIkNvbHVtbnMiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICI8PENvbnRleHRNZW51Pj4iCisgICAgICAgIH0sCisgICAgICAgICJXZWJLaXQiOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIjw8R2Vja28+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlhpbmhhIjogeworICAgICAgICAgICAgIiYjODIxMjsgZm9udCAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiJiM4MjEyOyBzaXplICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICIxICg4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjIgKDEwIHB0KSI6ICIiLAorICAgICAgICAgICAgIjMgKDEyIHB0KSI6ICIiLAorICAgICAgICAgICAgIjQgKDE0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjUgKDE4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjYgKDI0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjcgKDM2IHB0KSI6ICIiLAorICAgICAgICAgICAgIkFyaWFsIjogIiIsCisgICAgICAgICAgICAiQ291cmllciBOZXciOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTAgKHplcm8pIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0xIC4uIENUUkwtNiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtRSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtVSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtViI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWiI6ICIiLAorICAgICAgICAgICAgIkVycm9yIExvYWRpbmcgWGluaGEuICBEZXZlbG9wZXJzLCBjaGVjayB0aGUgRXJyb3IgQ29uc29sZSBmb3IgaW5mb3JtYXRpb24uIjogIiIsCisgICAgICAgICAgICAiR2VvcmdpYSI6ICIiLAorICAgICAgICAgICAgIkltcGFjdCI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgQ29yZSI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgcGx1Z2lucyI6ICIiLAorICAgICAgICAgICAgIk1TIFdvcmQgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCBDb2xvciI6ICIiLAorICAgICAgICAgICAgIlRhaG9tYSI6ICIiLAorICAgICAgICAgICAgIlRpbWVzIE5ldyBSb21hbiI6ICIiLAorICAgICAgICAgICAgIlRvdWNoIGhlcmUgZmlyc3QgdG8gYWN0aXZhdGUgZWRpdG9yLiI6ICIiLAorICAgICAgICAgICAgIlZlcmRhbmEiOiAiIiwKKyAgICAgICAgICAgICJXYWl0aW5nIGZvciBJZnJhbWUgdG8gbG9hZC4uLiI6ICIiLAorICAgICAgICAgICAgIldpbmdEaW5ncyI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJTZXQgQmFja2dyb3VuZCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDbGllbnRzaWRlU3BlbGxjaGVjayI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIENMSUVOVFNJREVTUEVMTENIRUNLIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrIHVzaW5nIGllU3BlbGwiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTAlIjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICIiLAorICAgICAgICAgICAgIjIwMCUiOiAiIiwKKyAgICAgICAgICAgICIyNSUiOiAiIiwKKyAgICAgICAgICAgICI1MCUiOiAiIiwKKyAgICAgICAgICAgICI3NSUiOiAiIiwKKyAgICAgICAgICAgICI+TGlzdCBWaWV3IjogIiIsCisgICAgICAgICAgICAiPlRodW1ibmFpbCBWaWV3IjogIiIsCisgICAgICAgICAgICAiQToiOiAiIiwKKyAgICAgICAgICAgICJEOiI6ICIiLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciI6ICIiLAorICAgICAgICAgICAgIkdJRiI6ICIiLAorICAgICAgICAgICAgIkg6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBmb2xkZXIgc2l6ZSBsaW1pdCByZWFjaGVkLiBVcGxvYWQgZGlzYWJsZWQuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHZhbHVlIjogIiIsCisgICAgICAgICAgICAiUE5HIjogIiIsCisgICAgICAgICAgICAiUHJlc2V0IjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiIiwKKyAgICAgICAgICAgICJYOiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIEltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlk6IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbHRlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEZJTFRFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWx0ZXIiOiAiPDxJbnNlcnRTbmlwcGV0Mj4+IgorICAgICAgICB9LAorICAgICAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgUGljdHVyZXMiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFVzZXJuYW1lL0VtYWlsIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgTGlzdCI6ICIiLAorICAgICAgICAgICAgIktleXdvcmQiOiAiIiwKKyAgICAgICAgICAgICJObyBQaG90b3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBWaWRlb3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIFNlcnZlciI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBVc2VybmFtZSI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW8gTGlzdCI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW9zIjogIiIsCisgICAgICAgICAgICAiQToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkQ6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUE5HIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJZOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE1hcnF1ZWUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTlNFUlRNQVJRVUVFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFsdGVybmF0ZSI6ICIiLAorICAgICAgICAgICAgIkNvbnRpbnVvdXMiOiAiIiwKKyAgICAgICAgICAgICJNYXJxdWVlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlNsaWRlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBub3QgZGVmaW5lZCI6ICIiLAorICAgICAgICAgICAgIiBPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIxMjAlIjogIiIsCisgICAgICAgICAgICAiMTUwJSI6ICIiLAorICAgICAgICAgICAgIjgwJSI6ICIiLAorICAgICAgICAgICAgIkdVSURPIENvZGUiOiAiIiwKKyAgICAgICAgICAgICJXaXRoIE1vemlsbGEsIHRoZSBhcHBsZXQgd2lsbCBub3QgYmUgdmlzaWJsZSBpbiBlZGl0b3IsIGJ1dCBvbmx5IGluIFdlYiBwYWdlIGFmdGVyIHN1Ym1pdHRpbmcuIjogIiIsCisgICAgICAgICAgICAiWm9vbSA6IjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgR2VhcnMgaW4gb3JkZXIgdG8gdXNlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UgYW5kIGNvbmZpZ3VyYXRpb24uIjogIiIsCisgICAgICAgICAgICAiRW5hYmxpbmcgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIkluc3RhbGwiOiAiIiwKKyAgICAgICAgICAgICJMZWFybiBBYm91dCBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIHJlbG9hZCB0aGUgcGFnZSwgY2F1c2luZyB5b3UgdG8gbG9zZSBhbnkgdW5zYXZlZCB3b3JrLiAgUHJlc3MgXCJPS1wiIHRvIHJlbG9hZC4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSB1c2VzIEdvb2dsZSBHZWFycyB0byBlbmFibGUgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZS4gIFdpdGggR2VhcnMgaW5zdGFsbGVkLCB5b3UgY2FuIHNhdmUgZHJhZnRzIG9mIHlvdXIgZG9jdW1lbnRzIG9uIHlvdXIgaGFyZCBkcml2ZSwgY29uZmlndXJlIFhpbmhhIHRvIGxvb2sgdGhlIHdheSB5b3Ugd2FudCwgYW5kIGNhcnJ5IHRoaXMgaW5mb3JtYXRpb24gd2hlcmV2ZXIgeW91IHVzZSBYaW5oYSBvbiB0aGUgd2ViLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQU1NlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbGU6ICI6ICIiLAorICAgICAgICAgICAgIkltcG9ydCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQZXJzaXN0ZW50U3RvcmFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkRldGFpbHMiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIEJyb3dzZXIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgICBUaGVyZSBDICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICBUaGVyZSBBICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvIFwiIFRoZXJlIEIgXCIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAnIFRoZXJlIEQgJyI6ICIiLAorICAgICAgICAgICAgIkxpc3Qgb2YgUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiTmV3IERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiT3BlbiI6ICIiLAorICAgICAgICAgICAgIk9wZW4gRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB5b3UnZCBsaWtlIHRvIGNyZWF0ZS4iOiAiIiwKKyAgICAgICAgICAgICJTYXZlIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGVyYXNlIGFueSB1bnNhdmVkIGNvbnRlbnQuICBJZiB5b3UncmUgY2VydGFpbiwgcGxlYXNlIGNsaWNrIE9LIHRvIGNvbnRpbnVlLiI6ICIiLAorICAgICAgICAgICAgIldlYiBVUkwiOiAiIiwKKyAgICAgICAgICAgICJDb25maXJtIjogIjw8UFNMb2NhbD4+IiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCI6ICI8PEluc2VydE5vdGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJIVE1MQXJlYSBTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiSW5mbyI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIjogIiIsCisgICAgICAgICAgICAicGxpeiB3ZWl0IDstKSI6ICIiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrZXIiOiAiIgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2ZyX2NhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvZnJfY2EuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA1ZWRjNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2ZyX2NhLmpzCkBAIC0wLDAgKzEsMTUwMyBAQAorLy8gWGluaGEgTGFuZ3VhZ2UgQ29tYmluZWQgVHJhbnNsYXRpb24gRmlsZQorLy8KKy8vIExBTkc6ICJmcl9jYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElOU1RSVUNUSU9OUyBUTyBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gWW91ciB0cmFuc2xhdGlvbiBtdXN0IGJlIGluIFVURi04IENoYXJhY3RlciBFbmNvZGluZy4KKy8vCisvLyBUaGlzIGlzIGEgSlNPTiBlbmNvZGVkIGZpbGUgKHBsdXMgY29tbWVudHMpLCBzdHJpbmdzIHNob3VsZCBiZSBkb3VibGUtcXVvdGUKKy8vIG9ubHksIGRvIG5vdCB1c2Ugc2luZ2xlIHF1b3RlcyB0byBzdXJyb3VuZCBzdHJpbmdzIC0gImhlbGxvIiwgbm90ICdoZWxsbycKKy8vIGRvIG5vdCBoYXZlIGEgdHJhaWxpbmcgY29tbWEgYWZ0ZXIgdGhlIGxhc3QgZW50cnkgaW4gYSBzZWN0aW9uLgorLy8KKy8vIE9ubHkgZnVsbCBsaW5lIGNvbW1lbnRzIGFyZSBhbGxvd2VkICh0aGF0IGEgY29tbWVudHMgb2NjdXB5IGVudGlyZSBsaW5lcykuCisvLworLy8gU2VhcmNoIGZvciB0aGUgX19ORVdfVFJBTlNMQVRJT05TX18gc2VjdGlvbiBiZWxvdywgdGhpcyBpcyB3aGVyZSB5b3Ugd2lsbAorLy8gd2FudCB0byBmb2N1cywgdGhpcyBzZWN0aW9uIGluY2x1ZGVzIHRoaW5ncyB0aGF0IGRvIG5vdCBwcmVzZW50bHkgaGF2ZSBhIAorLy8gdHJhbnNsYXRpb24gb3IgZm9yIHdoaWNoIHRoZSB0cmFuc2xhdGlvbiBuZWVkcyB0byBiZSBjaGVja2VkIGZvciBhY2N1cmFjeS4KKy8vCisvLyBJbiB0aGUgTmV3IFRyYW5zbGF0aW9ucyBzZWN0aW9uIGEgdHJhbnNsYXRpb24gc3RyaW5nIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICIiCisvLyAgICAgVGhpcyBtZWFucyBpdCBpcyBub3QgdHJhbnNsYXRlZCB5ZXQsIGFkZCB5b3VyIHRyYW5zbGF0aW9uLi4uCisvLyAgICAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIktsaW5nb24gU3RyaW5nIEhlcmUiCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJUcmFuc2xhdGVkIFN0cmluZyBIZXJlIgorLy8gICAgIFRoaXMgbWVhbnMgdGhhdCBhbiBleGlzdGluZyB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcsIGluIHNvbWUgb3RoZXIKKy8vICAgICBzZWN0aW9uIGhhcyBiZWVuIGZvdW5kLCBhbmQgdXNlZC4gIENoZWNrIHRoYXQgaXQgaXMgYXBwcm9wcml0ZSBmb3IgdGhpcworLy8gICAgIHNlY3Rpb24gYW5kIGlmIGl0IGlzLCB0aGF0J3MgZmluZSBsZWF2ZSBpdCBhcyBpcywgb3RoZXJ3aXNlIGNoYW5nZSBhcworLy8gICAgIGFwcHJvcHJpYXRlLgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiPDxBbm90aGVyU2VjdGlvbj4+IgorLy8gICAgIFRoaXMgbWVhbnMgdXNlIHRoZSBzYW1lIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZyBhcyA8PEFub3RoZXJTZWN0aW9uPj4KKy8vICAgICB0aGlzIHNhdmVzIHlvdSByZS10cmFubGF0aW5nIHN0cmluZ3MuICBJZiB0aGUgQ29udGV4dCBvZiB0aGlzIHNlY3Rpb24KKy8vICAgICBhbmQgdGhlIGNvbnRleHQgb2YgQW5vdGhlclNlY3Rpb24gc2VlbSB0aGUgc2FtZSwgdGhhdCdzIGZpbmUgbGVhdmUgaXQKKy8vICAgICB1c2luZyB0aGF0IHRyYW5zbGF0aW9uLCBidXQgaWYgdGhpcyBzZWN0aW9uIG5lZWRzIGEgZGlmZmVyZW50IHRyYW5zbGF0aW9uLCAKKy8vICAgICB5b3UgY2FuIHByb3ZpZGUgaXQgYnkgcmVwbGFjaW5nIHRoZSBsaW5rICg8PEFub3RoZXJTZWN0aW9uPj4pIHdpdGggdGhhdAorLy8gICAgIG5ldyB0cmFuc2xhdGlvbi4gIEZvciBleGFtcGxlIC0gYSAiVGFibGUiIGluIHNheSAiRGF0YVBsdWdpbiIgaXMgCisvLyAgICAgcGVyaGFwcyB0cmFuc2xhdGVkIGRpZmZlcmVudGx5IHRvICJUYWJsZSIgaW4gIkZ1cm5pdHVyZVBsdWdpbiIuCisvLworLy8gVEVTVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBwbGFjZSB5b3VyIHRyYW5zbGF0aW9uIGZpbGUgb24geW91ciB3ZWJzZXJ2ZXIgc29tZXdoZXJlIGZvciBleGFtcGxlCisvLworLy8gICAveGluaGEvbGFuZy9tZXJnZWQvZnJfY2EuanMKKy8vCisvLyBhbmQgdGhlbiB0ZWxsIFhpbmhhIHdoZXJlIHRvIGdldCBpdCAoYmVmb3JlIGxvYWRpbmcgWGluaGFDb3JlLmpzKSBieSAKKy8vCisvLyAgX2VkaXRvcl9sYW5nICAgICAgICAgICAgICA9ICdmcl9jYSc7CisvLyAgX2VkaXRvcl9sYW5nX21lcmdlZF9maWxlICA9ICcveGluaGEvbGFuZy9tZXJnZWQvZnJfY2EuanMnOworLy8KKy8vIFhpbmhhIHdpbGwgbG9hZCB5b3VyIG5ldyBsYW5ndWFnZSBkZWZpbml0aW9uLgorLy8KKy8vIFNVQk1JVFRJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgY3JlYXRlIGEgVGlja2V0IG9uIHRoZSBYaW5oYSB3ZWJzaXRlIGFuZCBhdHRhY2ggeW91ciB0cmFuc2xhdGlvbiAKKy8vIGZpbGUuCisvLworLy8gVGhlIFhpbmhhIGRldmVsb3BlcnMgd2lsbCB0YWtlIHlvdXIgZmlsZSBhbmQgdXNlIHRoZSAKKy8vICAgICBjb250cmliL2xjX3NwbGl0X21lcmdlZF9maWxlLnBocAorLy8gc2NyaXB0IHRvIGxvYWQgaXQgaW50byB0aGUgWGluaGEgZGlzdHJpYnV0aW9uLgorCit7CisgICAgIlVuc2F2ZWRDaGFuZ2VzIjogeworICAgICAgICAiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBlZGl0b3IiOiAiVHUgbidhcyBwYXMgZW5yZWdpc3Ryw6kgdGVzIG1vZGlmaWNhdGlvbnMiCisgICAgfSwKKyAgICAiX19ORVdfVFJBTlNMQVRJT05TX18iOiB7CisgICAgICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICAgICAiQWJicmV2aWF0aW9uIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIiIsCisgICAgICAgICAgICAiRXhwYW5zaW9uOiI6ICIiLAorICAgICAgICAgICAgIk9LIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkFib3V0Qm94IjogeworICAgICAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIjw8WGluaGE+PiIsCisgICAgICAgICAgICAiQ2xvc2UiOiAiPDxYaW5oYT4+IgorICAgICAgICB9LAorICAgICAgICAiQ2hhckNvdW50ZXIiOiB7CisgICAgICAgICAgICAiLi4uIGluIHByb2dyZXNzIjogIiIsCisgICAgICAgICAgICAiQ2hhcnMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIiIsCisgICAgICAgICAgICAiV29yZHMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2hhcmFjdGVyTWFwIjogeworICAgICAgICAgICAgIkluc2VydCBzcGVjaWFsIGNoYXJhY3RlciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDb2xvclBpY2tlciI6IHsKKyAgICAgICAgICAgICJDbGljayBhIGNvbG9yLi4uIjogIiIsCisgICAgICAgICAgICAiQ29sb3I6ICI6ICIiLAorICAgICAgICAgICAgIlNhbXBsZSI6ICIiLAorICAgICAgICAgICAgIldlYiBTYWZlOiAiOiAiIiwKKyAgICAgICAgICAgICJDbG9zZSI6ICI8PFhpbmhhPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgICAgICJfRGVsZXRlIFJvdyI6ICIiLAorICAgICAgICAgICAgIl9JbWFnZSBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiX01vZGlmeSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1JlbW92ZSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1RhYmxlIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJDX2VsbCBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiQ2hlY19rIExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJDb3B5IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIGEgbGluayI6ICIiLAorICAgICAgICAgICAgIkN1cnJlbnQgVVJMIGlzIjogIiIsCisgICAgICAgICAgICAiQ3V0IjogIiIsCisgICAgICAgICAgICAiRGVfbGV0ZSBDb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgQ2VsbCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIiIsCisgICAgICAgICAgICAiSG93IGRpZCB5b3UgZ2V0IGhlcmU/IChQbGVhc2UgcmVwb3J0ISkiOiAiIiwKKyAgICAgICAgICAgICJJX25zZXJ0IFJvdyBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYWZ0ZXIgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJMaW5rIHBvaW50cyB0bzoiOiAiIiwKKyAgICAgICAgICAgICJNYWtlIGxpbl9rLi4uIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiUGFzdGUiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGVsZW1lbnQ6IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJSb193IFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBpbWFnZSBwcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIFJvdyBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlVubGluayB0aGUgY3VycmVudCBlbGVtZW50IjogIiIsCisgICAgICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiPDxYaW5oYT4+IiwKKyAgICAgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAiPDxYaW5oYT4+IiwKKyAgICAgICAgICAgICJKdXN0aWZ5IExlZnQiOiAiPDxYaW5oYT4+IiwKKyAgICAgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIjw8WGluaGE+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIiIsCisgICAgICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICIiLAorICAgICAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiIiwKKyAgICAgICAgICAgICJPdGhlciI6ICIiLAorICAgICAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICIiLAorICAgICAgICAgICAgIlRhcmdldDoiOiAiIiwKKyAgICAgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogIiIsCisgICAgICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICIiLAorICAgICAgICAgICAgIlVSTDoiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGluZyBhIGxpbmsiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRlZmluaXRpb25MaXN0IjogeworICAgICAgICAgICAgImRlZmluaXRpb24gZGVzY3JpcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGxpc3QiOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIHRlcm0iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRGlhbG9ncyI6IHsKKyAgICAgICAgICAgICJTb21lIFRleHQgSGVyZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEeW5hbWljQ1NTIjogeworICAgICAgICAgICAgIkNob29zZSBzdHlsZXNoZWV0IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCI6ICIiLAorICAgICAgICAgICAgIlVuZGVmaW5lZCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFZGl0VGFnIjogeworICAgICAgICAgICAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICIiLAorICAgICAgICAgICAgIkVkaXQgVGFnIEJ5IFBlZyI6ICIiLAorICAgICAgICAgICAgIlRhZyBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVxdWF0aW9uIjogeworICAgICAgICAgICAgIiE9IjogIiIsCisgICAgICAgICAgICAiIWluIjogIiIsCisgICAgICAgICAgICAiJmd0Oy0iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiJmx0O3gmZ3Q7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAhYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYC5gICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAyYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDNgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA1YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDZgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgN2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA4YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgZWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7Jm5ic3A7YDFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Arezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLTpcXCBgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC17Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BDYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Bjb3NgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGxuYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BwaWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHNpbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGFuYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0aW1lc2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImcXVvdDt0ZXh0JnF1b3Q7IjogIiIsCisgICAgICAgICAgICAiJytmb3JtdWxhKyciOiAiIiwKKyAgICAgICAgICAgICIoKG4pLChrKSkiOiAiIiwKKyAgICAgICAgICAgICIoeCsxKS8oeC0xKSI6ICIiLAorICAgICAgICAgICAgIioiOiAiIiwKKyAgICAgICAgICAgICIqKiI6ICIiLAorICAgICAgICAgICAgIistIjogIiIsCisgICAgICAgICAgICAiLSZndDsiOiAiIiwKKyAgICAgICAgICAgICItJmx0OyI6ICIiLAorICAgICAgICAgICAgIi06IjogIiIsCisgICAgICAgICAgICAiLT0iOiAiIiwKKyAgICAgICAgICAgICIvLyI6ICIiLAorICAgICAgICAgICAgIi9fIjogIiIsCisgICAgICAgICAgICAiOi4iOiAiIiwKKyAgICAgICAgICAgICI9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIkAiOiAiIiwKKyAgICAgICAgICAgICJbW2EsYl0sW2MsZF1dIjogIiIsCisgICAgICAgICAgICAiXFxcXCI6ICIiLAorICAgICAgICAgICAgIlxcbkNsaWNrIGluIHRoZSBib3ggdG8gdXNlIHlvdXIga2V5Ym9hcmQgb3IgdXNlIHRoZSBidXR0b25zXFxuIjogIiIsCisgICAgICAgICAgICAiXl4iOiAiIiwKKyAgICAgICAgICAgICJeXl4iOiAiIiwKKyAgICAgICAgICAgICJfX3wiOiAiIiwKKyAgICAgICAgICAgICJffF8iOiAiIiwKKyAgICAgICAgICAgICJgIT1gIjogIiIsCisgICAgICAgICAgICAiYCFpbmAiOiAiIiwKKyAgICAgICAgICAgICJgJmFuZDtgIjogIiIsCisgICAgICAgICAgICAiYCZjYXA7YCI6ICIiLAorICAgICAgICAgICAgImAmY3VwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oy1gIjogIiIsCisgICAgICAgICAgICAiYCZndDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PSZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7eCZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZvcjtgIjogIiIsCisgICAgICAgICAgICAiYCZxdW90O3RleHQmcXVvdDtgIjogIiIsCisgICAgICAgICAgICAiYCgobiksKGspKWAiOiAiIiwKKyAgICAgICAgICAgICJgKHgrMSkvKHgtMSlgIjogIiIsCisgICAgICAgICAgICAiYCoqYCI6ICIiLAorICAgICAgICAgICAgImAqYCI6ICIiLAorICAgICAgICAgICAgImArLWAiOiAiIiwKKyAgICAgICAgICAgICJgLSZndDtgIjogIiIsCisgICAgICAgICAgICAiYC0mbHQ7YCI6ICIiLAorICAgICAgICAgICAgImAtOmAiOiAiIiwKKyAgICAgICAgICAgICJgLT1gIjogIiIsCisgICAgICAgICAgICAiYC8vYCI6ICIiLAorICAgICAgICAgICAgImAvX2AiOiAiIiwKKyAgICAgICAgICAgICJgOi5gIjogIiIsCisgICAgICAgICAgICAiYD0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImBAYCI6ICIiLAorICAgICAgICAgICAgImBbW2EsYl0sW2MsZF1dYCI6ICIiLAorICAgICAgICAgICAgImBcXFxcYCI6ICIiLAorICAgICAgICAgICAgImBfX3xgIjogIiIsCisgICAgICAgICAgICAiYF98X2AiOiAiIiwKKyAgICAgICAgICAgICJgQUFgIjogIiIsCisgICAgICAgICAgICAiYGFsZXBoYCI6ICIiLAorICAgICAgICAgICAgImBhbHBoYWAiOiAiIiwKKyAgICAgICAgICAgICJgYW5kYCI6ICIiLAorICAgICAgICAgICAgImBiYXJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJldGFgIjogIiIsCisgICAgICAgICAgICAiYENDYCI6ICIiLAorICAgICAgICAgICAgImBjY2FgIjogIiIsCisgICAgICAgICAgICAiYGNoaWAiOiAiIiwKKyAgICAgICAgICAgICJgZGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgZGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbGAiOiAiIiwKKyAgICAgICAgICAgICJgRGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkaWFtb25kYCI6ICIiLAorICAgICAgICAgICAgImBkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkeS9keGAiOiAiIiwKKyAgICAgICAgICAgICJgRUVgIjogIiIsCisgICAgICAgICAgICAiYGVwc2lgIjogIiIsCisgICAgICAgICAgICAiYGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZnJhYCI6ICIiLAorICAgICAgICAgICAgImBHYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdyYWRgIjogIiIsCisgICAgICAgICAgICAiYGhBcnJgIjogIiIsCisgICAgICAgICAgICAiYGhhcnJgIjogIiIsCisgICAgICAgICAgICAiYGhhdGFgIjogIiIsCisgICAgICAgICAgICAiYGlmYCI6ICIiLAorICAgICAgICAgICAgImBpbmAiOiAiIiwKKyAgICAgICAgICAgICJgaW50YCI6ICIiLAorICAgICAgICAgICAgImBpb3RhYCI6ICIiLAorICAgICAgICAgICAgImBrYXBwYWAiOiAiIiwKKyAgICAgICAgICAgICJgTGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBsYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYGxhcnJgIjogIiIsCisgICAgICAgICAgICAiYGxBcnJgIjogIiIsCisgICAgICAgICAgICAiYGxpbV8oeC0mZ3Q7b28pYCI6ICIiLAorICAgICAgICAgICAgImBsb2dgIjogIiIsCisgICAgICAgICAgICAiYG11YCI6ICIiLAorICAgICAgICAgICAgImBOTmAiOiAiIiwKKyAgICAgICAgICAgICJgbm5gIjogIiIsCisgICAgICAgICAgICAiYG5vdGAiOiAiIiwKKyAgICAgICAgICAgICJgbnVgIjogIiIsCisgICAgICAgICAgICAiYG8rYCI6ICIiLAorICAgICAgICAgICAgImBvLmAiOiAiIiwKKyAgICAgICAgICAgICJgTy9gIjogIiIsCisgICAgICAgICAgICAiYG9pbnRgIjogIiIsCisgICAgICAgICAgICAiYE9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBvbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgb29gIjogIiIsCisgICAgICAgICAgICAiYG9yYCI6ICIiLAorICAgICAgICAgICAgImBveGAiOiAiIiwKKyAgICAgICAgICAgICJgcGhpYCI6ICIiLAorICAgICAgICAgICAgImBQaGlgIjogIiIsCisgICAgICAgICAgICAiYFBpYCI6ICIiLAorICAgICAgICAgICAgImBwaWAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvZGAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvcGAiOiAiIiwKKyAgICAgICAgICAgICJgcHNpYCI6ICIiLAorICAgICAgICAgICAgImBQc2lgIjogIiIsCisgICAgICAgICAgICAiYFFRYCI6ICIiLAorICAgICAgICAgICAgImBxdWFkYCI6ICIiLAorICAgICAgICAgICAgImByQXJyYCI6ICIiLAorICAgICAgICAgICAgImByaG9gIjogIiIsCisgICAgICAgICAgICAiYHJvb3QobikoeClgIjogIiIsCisgICAgICAgICAgICAiYFJSYCI6ICIiLAorICAgICAgICAgICAgImBzZmFgIjogIiIsCisgICAgICAgICAgICAiYFNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgc3FydCh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgc3F1YXJlYCI6ICIiLAorICAgICAgICAgICAgImBzdGFja3JlbCgtJmd0OykoKylgIjogIiIsCisgICAgICAgICAgICAiYHN1YmAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VtYCI6ICIiLAorICAgICAgICAgICAgImBzdXBgIjogIiIsCisgICAgICAgICAgICAiYHN1cGVgIjogIiIsCisgICAgICAgICAgICAiYHRhdWAiOiAiIiwKKyAgICAgICAgICAgICJgdGhldGFgIjogIiIsCisgICAgICAgICAgICAiYFRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImBUVGAiOiAiIiwKKyAgICAgICAgICAgICJgdHRhYCI6ICIiLAorICAgICAgICAgICAgImB1YXJyYCI6ICIiLAorICAgICAgICAgICAgImB1bGFgIjogIiIsCisgICAgICAgICAgICAiYHVwc2lsb25gIjogIiIsCisgICAgICAgICAgICAiYHV1YCI6ICIiLAorICAgICAgICAgICAgImB2ZWNhYCI6ICIiLAorICAgICAgICAgICAgImB2dmAiOiAiIiwKKyAgICAgICAgICAgICJgeF8obW4pYCI6ICIiLAorICAgICAgICAgICAgImB4aWAiOiAiIiwKKyAgICAgICAgICAgICJgWGlgIjogIiIsCisgICAgICAgICAgICAiYHh4YCI6ICIiLAorICAgICAgICAgICAgImB6ZXRhYCI6ICIiLAorICAgICAgICAgICAgImBaWmAiOiAiIiwKKyAgICAgICAgICAgICJgfC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImB8LS1gIjogIiIsCisgICAgICAgICAgICAiYHw9PWAiOiAiIiwKKyAgICAgICAgICAgICJgfF9fYCI6ICIiLAorICAgICAgICAgICAgImB8fmAiOiAiIiwKKyAgICAgICAgICAgICJgfj1gIjogIiIsCisgICAgICAgICAgICAiYH58YCI6ICIiLAorICAgICAgICAgICAgImB+fmAiOiAiIiwKKyAgICAgICAgICAgICJBQSI6ICIiLAorICAgICAgICAgICAgImFsZXBoIjogIiIsCisgICAgICAgICAgICAiYWxwaGEiOiAiIiwKKyAgICAgICAgICAgICJhbmQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGggRm9ybXVsYSBJbnB1dCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aE1MIEV4YW1wbGUiOiAiIiwKKyAgICAgICAgICAgICJiYXJhIjogIiIsCisgICAgICAgICAgICAiQmFzZWQgb24gQVNDSUlNYXRoTUwgYnkiOiAiIiwKKyAgICAgICAgICAgICJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiYmJhIjogIiIsCisgICAgICAgICAgICAiYmV0YSI6ICIiLAorICAgICAgICAgICAgIkNDIjogIiIsCisgICAgICAgICAgICAiY2NhIjogIiIsCisgICAgICAgICAgICAiY2hpIjogIiIsCisgICAgICAgICAgICAiZGFyciI6ICIiLAorICAgICAgICAgICAgImRkb3RhIjogIiIsCisgICAgICAgICAgICAiZGVsIjogIiIsCisgICAgICAgICAgICAiZGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJEZWx0YSI6ICIiLAorICAgICAgICAgICAgImRpYW1vbmQiOiAiIiwKKyAgICAgICAgICAgICJkb3RhIjogIiIsCisgICAgICAgICAgICAiZHkvZHgiOiAiIiwKKyAgICAgICAgICAgICJFRSI6ICIiLAorICAgICAgICAgICAgImVwc2kiOiAiIiwKKyAgICAgICAgICAgICJldGEiOiAiIiwKKyAgICAgICAgICAgICJGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBBc2NpaU1hdGhNTCB2aXNpdCB0aGlzIHBhZ2U6IjogIiIsCisgICAgICAgICAgICAiRm9ybXVsYSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJmcmEiOiAiIiwKKyAgICAgICAgICAgICJnYW1tYSI6ICIiLAorICAgICAgICAgICAgIkdhbW1hIjogIiIsCisgICAgICAgICAgICAiZ3JhZCI6ICIiLAorICAgICAgICAgICAgImhBcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXJyIjogIiIsCisgICAgICAgICAgICAiaGF0YSI6ICIiLAorICAgICAgICAgICAgImlmIjogIiIsCisgICAgICAgICAgICAiaW4iOiAiIiwKKyAgICAgICAgICAgICJJbnB1dCI6ICIiLAorICAgICAgICAgICAgImludCI6ICIiLAorICAgICAgICAgICAgImludF9hXmJmKHgpZHgiOiAiIiwKKyAgICAgICAgICAgICJpb3RhIjogIiIsCisgICAgICAgICAgICAia2FwcGEiOiAiIiwKKyAgICAgICAgICAgICJsYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJMYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsQXJyIjogIiIsCisgICAgICAgICAgICAibGFyciI6ICIiLAorICAgICAgICAgICAgImxpbV8oeC0mZ3Q7b28pIjogIiIsCisgICAgICAgICAgICAibXUiOiAiIiwKKyAgICAgICAgICAgICJubiI6ICIiLAorICAgICAgICAgICAgIk5OIjogIiIsCisgICAgICAgICAgICAibm5uIjogIiIsCisgICAgICAgICAgICAibm90IjogIiIsCisgICAgICAgICAgICAibnUiOiAiIiwKKyAgICAgICAgICAgICJvKyI6ICIiLAorICAgICAgICAgICAgIm8uIjogIiIsCisgICAgICAgICAgICAiTy8iOiAiIiwKKyAgICAgICAgICAgICJvaW50IjogIiIsCisgICAgICAgICAgICAiT21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJvbWVnYSI6ICIiLAorICAgICAgICAgICAgIm9vIjogIiIsCisgICAgICAgICAgICAib3IiOiAiIiwKKyAgICAgICAgICAgICJveCI6ICIiLAorICAgICAgICAgICAgIlBoaSI6ICIiLAorICAgICAgICAgICAgInBoaSI6ICIiLAorICAgICAgICAgICAgInBpIjogIiIsCisgICAgICAgICAgICAiUGkiOiAiIiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIiIsCisgICAgICAgICAgICAicHJvZCI6ICIiLAorICAgICAgICAgICAgInByb3AiOiAiIiwKKyAgICAgICAgICAgICJwc2kiOiAiIiwKKyAgICAgICAgICAgICJQc2kiOiAiIiwKKyAgICAgICAgICAgICJRUSI6ICIiLAorICAgICAgICAgICAgInF1YWQiOiAiIiwKKyAgICAgICAgICAgICJyQXJyIjogIiIsCisgICAgICAgICAgICAicmhvIjogIiIsCisgICAgICAgICAgICAicm9vdChuKSh4KSI6ICIiLAorICAgICAgICAgICAgIlJSIjogIiIsCisgICAgICAgICAgICAic2ZhIjogIiIsCisgICAgICAgICAgICAiU2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJzaWdtYSI6ICIiLAorICAgICAgICAgICAgInNxcnQoeCkiOiAiIiwKKyAgICAgICAgICAgICJzcXVhcmUiOiAiIiwKKyAgICAgICAgICAgICJzdGFja3JlbCgtJmd0OykoKykiOiAiIiwKKyAgICAgICAgICAgICJzdWIiOiAiIiwKKyAgICAgICAgICAgICJzdWJlIjogIiIsCisgICAgICAgICAgICAic3VtIjogIiIsCisgICAgICAgICAgICAic3VtXyhuPTEpXm9vIjogIiIsCisgICAgICAgICAgICAic3VwIjogIiIsCisgICAgICAgICAgICAic3VwZSI6ICIiLAorICAgICAgICAgICAgInRhdSI6ICIiLAorICAgICAgICAgICAgIlRoZXRhIjogIiIsCisgICAgICAgICAgICAidGhldGEiOiAiIiwKKyAgICAgICAgICAgICJUVCI6ICIiLAorICAgICAgICAgICAgInR0YSI6ICIiLAorICAgICAgICAgICAgInVhcnIiOiAiIiwKKyAgICAgICAgICAgICJ1bGEiOiAiIiwKKyAgICAgICAgICAgICJ1cHNpbG9uIjogIiIsCisgICAgICAgICAgICAidXUiOiAiIiwKKyAgICAgICAgICAgICJ1dXUiOiAiIiwKKyAgICAgICAgICAgICJ2ZWNhIjogIiIsCisgICAgICAgICAgICAidnYiOiAiIiwKKyAgICAgICAgICAgICJ2dnYiOiAiIiwKKyAgICAgICAgICAgICJ4XihtK24pIjogIiIsCisgICAgICAgICAgICAieF8obW4pIjogIiIsCisgICAgICAgICAgICAiWGkiOiAiIiwKKyAgICAgICAgICAgICJ4aSI6ICIiLAorICAgICAgICAgICAgInh4IjogIiIsCisgICAgICAgICAgICAiemV0YSI6ICIiLAorICAgICAgICAgICAgIlpaIjogIiIsCisgICAgICAgICAgICAifC0mZ3Q7IjogIiIsCisgICAgICAgICAgICAifC0tIjogIiIsCisgICAgICAgICAgICAifD09IjogIiIsCisgICAgICAgICAgICAifF9fIjogIiIsCisgICAgICAgICAgICAifH4iOiAiIiwKKyAgICAgICAgICAgICJ+PSI6ICIiLAorICAgICAgICAgICAgIn58IjogIiIsCisgICAgICAgICAgICAifn4iOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZhbmN5U2VsZWN0cyI6IHsKKyAgICAgICAgICAgICInK29wdC50ZXh0KyciOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiJztcclxuICB2YXIgdGFnYyA9ICciOiAiIiwKKyAgICAgICAgICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAiIiwKKyAgICAgICAgICAgICJDbGVhciI6ICIiLAorICAgICAgICAgICAgIkRvbmUiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgdGV4dCB5b3Ugd2FudCB0byBmaW5kIjogIiIsCisgICAgICAgICAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgImZvdW5kIGl0ZW0iOiAiIiwKKyAgICAgICAgICAgICJmb3VuZCBpdGVtcyI6ICIiLAorICAgICAgICAgICAgIkhpZ2hsaWdodCI6ICIiLAorICAgICAgICAgICAgIkluZm9ybSBhIHJlcGxhY2VtZW50IHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJOZXh0IjogIiIsCisgICAgICAgICAgICAibm90IGZvdW5kIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2Ugd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtIjogIiIsCisgICAgICAgICAgICAicmVwbGFjZWQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJTZWFyY2ggZm9yOiI6ICIiLAorICAgICAgICAgICAgIlN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IjogIiIsCisgICAgICAgICAgICAiVW5kbyI6ICIiLAorICAgICAgICAgICAgIldob2xlIHdvcmRzIG9ubHkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiRW50ZXIgdGhlIG5hbWUgZm9yIG5ldyBvcHRpb24uIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgRm9ybS4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBtdWx0aS1saW5lIHRleHQgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcmFkaW8gYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFNlbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgU2VsZWN0Li4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1zIjogeworICAgICAgICAgICAgIidvbkNsaWNrJz0iOiAiIiwKKyAgICAgICAgICAgICJBY2Nlc3MgS2V5OiI6ICIiLAorICAgICAgICAgICAgIkFjdGlvbiBVUkw6IjogIiIsCisgICAgICAgICAgICAiQnV0dG9uIFNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkNoZWNrZWQiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zOiI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQgdGV4dCAob3B0aW9uYWwpIjogIiIsCisgICAgICAgICAgICAiRGltZW5zaW9ucyI6ICIiLAorICAgICAgICAgICAgIkRpc2FibGVkIjogIiIsCisgICAgICAgICAgICAiRW5jb2Rpbmc6IjogIiIsCisgICAgICAgICAgICAiRm9yIENvbnRyb2w6IjogIiIsCisgICAgICAgICAgICAiRm9ybSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IElOUFVUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gaGFuZGxlciBzY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiR2V0IjogIiIsCisgICAgICAgICAgICAiSGFyZCI6ICIiLAorICAgICAgICAgICAgIkhlaWdodCBpbiBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkhUTUwtRm9ybSB0byBDR0kgKGRlZmF1bHQpIjogIiIsCisgICAgICAgICAgICAiSW1hZ2Ugc291cmNlIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMOiI6ICIiLAorICAgICAgICAgICAgIkluaXRpYWwgVGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IEZJRUxEU0VUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IElOUFVUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IExBQkVMIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFNFTEVDVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkphdmFzY3JpcHQgZm9yIGJ1dHRvbiBjbGljayI6ICIiLAorICAgICAgICAgICAgIkxhYmVsOiI6ICIiLAorICAgICAgICAgICAgIkxlZ2VuZDoiOiAiIiwKKyAgICAgICAgICAgICJNYXggbGVuZ3RoOiI6ICIiLAorICAgICAgICAgICAgIk1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWNjZXB0ZWQiOiAiIiwKKyAgICAgICAgICAgICJNZXRob2Q6IjogIiIsCisgICAgICAgICAgICAibXVsdGlwYXJ0IEZvcm0gRGF0YSAoRmlsZS1VcGxvYWQpIjogIiIsCisgICAgICAgICAgICAiTmFtZSI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIm5hbWUgb2YgdGhlIHRleHRhcmVhIjogIiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiIiwKKyAgICAgICAgICAgICJub3JtYWwiOiAiIiwKKyAgICAgICAgICAgICJub3dyYXAiOiAiIiwKKyAgICAgICAgICAgICJPZmYiOiAiIiwKKyAgICAgICAgICAgICJQaHlzaWNhbCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciBhIExhYmVsIjogIiIsCisgICAgICAgICAgICAiUG9zdCI6ICIiLAorICAgICAgICAgICAgInByZSI6ICIiLAorICAgICAgICAgICAgIlJlYWQgT25seSI6ICIiLAorICAgICAgICAgICAgIlJvd3M6IjogIiIsCisgICAgICAgICAgICAiU2l6ZSBvZiB0ZXh0IGJveCBpbiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiU2l6ZToiOiAiIiwKKyAgICAgICAgICAgICJTb2Z0IjogIiIsCisgICAgICAgICAgICAiVGFiIEluZGV4OiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBGcmFtZToiOiAiIiwKKyAgICAgICAgICAgICJUZXh0OiI6ICIiLAorICAgICAgICAgICAgIlVSTCBvZiBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlZhbHVlIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiVmFsdWU6IjogIiIsCisgICAgICAgICAgICAiVmlydHVhbCI6ICIiLAorICAgICAgICAgICAgIldpZHRoIGluIG51bWJlciBvZiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiV3JhcCBNb2RlOiI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgTmFtZSI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPcHRpb25zIjogIjw8RmluZFJlcGxhY2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bGxQYWdlIjogeworICAgICAgICAgICAgIi4uLiI6ICIiLAorICAgICAgICAgICAgIkFsdGVybmF0ZSBzdHlsZS1zaGVldDoiOiAiIiwKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kIGNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkNoYXJhY3RlciBzZXQ6IjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKElTTy04ODU5LTUpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKEtPSTgtUikiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoV0lORE9XUy0xMjUxKSI6ICIiLAorICAgICAgICAgICAgIkRlc2NyaXB0aW9uOiI6ICIiLAorICAgICAgICAgICAgIkRPQ1RZUEU6IjogIiIsCisgICAgICAgICAgICAiRG9jdW1lbnQgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIkRvY3VtZW50IHRpdGxlOiI6ICIiLAorICAgICAgICAgICAgIktleXdvcmRzOiI6ICIiLAorICAgICAgICAgICAgIlByaW1hcnkgc3R5bGUtc2hlZXQ6IjogIiIsCisgICAgICAgICAgICAiVGV4dCBjb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJVVEYtOCAocmVjb21tZW5kZWQpIjogIiIsCisgICAgICAgICAgICAid2VzdGVybiAoSVNPLTg4NTktMSkiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bGxTY3JlZW4iOiB7CisgICAgICAgICAgICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkdlY2tvIjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJIb3Jpem9udGFsUnVsZSI6IHsKKyAgICAgICAgICAgICImI3gwMGQ3OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiIiwKKyAgICAgICAgICAgICJDZW50ZXIiOiAiIiwKKyAgICAgICAgICAgICJDb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgSG9yaXpvbnRhbCBSdWxlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L2VkaXQgaG9yaXpvbnRhbCBydWxlIjogIiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIiIsCisgICAgICAgICAgICAiTGVmdCI6ICIiLAorICAgICAgICAgICAgIk5vIHNoYWRpbmciOiAiIiwKKyAgICAgICAgICAgICJwZXJjZW50IjogIiIsCisgICAgICAgICAgICAicGl4ZWxzIjogIiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSI6ICIiLAorICAgICAgICAgICAgIldpZHRoOiI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiPDxYaW5oYT4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5saW5lU3R5bGVyIjogeworICAgICAgICAgICAgIkJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciI6ICIiLAorICAgICAgICAgICAgIkJvdHRvbSI6ICIiLAorICAgICAgICAgICAgIkNoYXIiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkNTUyBTdHlsZSI6ICIiLAorICAgICAgICAgICAgIkZHIENvbG9yIjogIiIsCisgICAgICAgICAgICAiRmxvYXQiOiAiIiwKKyAgICAgICAgICAgICJKdXN0aWZ5IjogIiIsCisgICAgICAgICAgICAiTWFyZ2luIjogIiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIiIsCisgICAgICAgICAgICAiTm9uZSI6ICIiLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJUZXh0IGFsaWduIjogIiIsCisgICAgICAgICAgICAiVG9wIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWwgYWxpZ24iOiAiIiwKKyAgICAgICAgICAgICItIjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiQ2VudGVyIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSGVpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgInBlcmNlbnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJwaXhlbHMiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIldpZHRoIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgICAgICJBbmNob3IgbmFtZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBBbmNob3IiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiIiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICIiLAorICAgICAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbDoiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiIiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlNwYWNpbmciOiAiIiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIlZlcnRpY2FsOiI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiIiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBVUkw6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJUb3AiOiAiPDxJbmxpbmVTdHlsZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGZvb3Rub3RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IE5vdGUiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBhZ2VicmVhayI6IHsKKyAgICAgICAgICAgICJQYWdlIGJyZWFrIjogIiIsCisgICAgICAgICAgICAiUGFnZSBCcmVhayI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbWlsZXkiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IFNtaWxleSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0IjogeworICAgICAgICAgICAgIlxcbiAgVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmdcXG4iOiAiIiwKKyAgICAgICAgICAgICJIaWRlIHByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgU25pcHBldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIiIsCisgICAgICAgICAgICAiTGluazEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMiI6ICIiLAorICAgICAgICAgICAgIkxpbmszIjogIiIsCisgICAgICAgICAgICAiTGluazQiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNSI6ICIiLAorICAgICAgICAgICAgIlNob3cgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nIjogIiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAgICAgIkFsbCBDYXRlZ29yaWVzIjogIiIsCisgICAgICAgICAgICAiRmlsdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMgdGVtcGxhdGUgdmFyaWFibGUiOiAiIiwKKyAgICAgICAgICAgICJPbmx5IHNlYXJjaCB3b3JkIGJlZ2lubmluZyI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJIVE1MIjogIjw8Q2hhckNvdW50ZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICI8PEluc2VydFNuaXBwZXQ+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAgICAgIkNhcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJDYXB0aW9uIGZvciB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIHBhZGRpbmc6IjogIiIsCisgICAgICAgICAgICAiQ2VsbCBzcGFjaW5nOiI6ICIiLAorICAgICAgICAgICAgIkNvbGxhcHNlIGJvcmRlcnM6IjogIiIsCisgICAgICAgICAgICAiQ29sczoiOiAiIiwKKyAgICAgICAgICAgICJFbSI6ICIiLAorICAgICAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJMYXlvdSI6ICIiLAorICAgICAgICAgICAgIk51bWJlciBvZiBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICIiLAorICAgICAgICAgICAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSBvZiB0aGUgYm9yZGVyIjogIiIsCisgICAgICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiV2lkdGggdW5pdCI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvcmRlciI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIjw8WGluaGE+PiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIlBlcmNlbnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJQaXhlbHMiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJvd3M6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiU3BhY2luZyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUb3AiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxhbmdNYXJrcyI6IHsKKyAgICAgICAgICAgICImbWRhc2g7IGxhbmd1YWdlICZtZGFzaDsiOiAiIiwKKyAgICAgICAgICAgICInLCAnIjogIiIsCisgICAgICAgICAgICAiRW5nbGlzaCI6ICIiLAorICAgICAgICAgICAgIkZyZW5jaCI6ICIiLAorICAgICAgICAgICAgIkdyZWVrIjogIiIsCisgICAgICAgICAgICAibGFuZ3VhZ2Ugc2VsZWN0IjogIiIsCisgICAgICAgICAgICAiTGF0aW4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiTGlua2VyIjogeworICAgICAgICAgICAgIihweCkiOiAiIiwKKyAgICAgICAgICAgICJBbmNob3ItTGluayI6ICIiLAorICAgICAgICAgICAgIkFuY2hvcjoiOiAiIiwKKyAgICAgICAgICAgICJFbWFpbCBBZGRyZXNzOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJMb2NhdGlvbiBCYXI6IjogIiIsCisgICAgICAgICAgICAiTWVudSBCYXI6IjogIiIsCisgICAgICAgICAgICAiTWVzc2FnZSBUZW1wbGF0ZToiOiAiIiwKKyAgICAgICAgICAgICJOZXcgV2luZG93IjogIiIsCisgICAgICAgICAgICAiT3JkaW5hcnkgTGluayI6ICIiLAorICAgICAgICAgICAgIlBvcHVwIFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlBvcHVwV2luZG93IjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJSZXNpemVhYmxlOiI6ICIiLAorICAgICAgICAgICAgIlNhbWUgV2luZG93IChqdW1wIG91dCBvZiBmcmFtZXMpIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsYmFyczoiOiAiIiwKKyAgICAgICAgICAgICJTaG93cyBPbiBIb3ZlciI6ICIiLAorICAgICAgICAgICAgIlN0YXR1cyBCYXI6IjogIiIsCisgICAgICAgICAgICAiU3ViamVjdDoiOiAiIiwKKyAgICAgICAgICAgICJUaXRsZToiOiAiIiwKKyAgICAgICAgICAgICJUb29sYmFyOiI6ICIiLAorICAgICAgICAgICAgIlVSTCBMaW5rIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIiIsCisgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJOYW1lOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIlNpemU6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiVGFyZ2V0OiI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiVVJMOiI6ICI8PENyZWF0ZUxpbms+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxpc3RUeXBlIjogeworICAgICAgICAgICAgIkNob29zZSBsaXN0IHN0eWxlIHR5cGUgKGZvciBvcmRlcmVkIGxpc3RzKSI6ICIiLAorICAgICAgICAgICAgIkRlY2ltYWwgbnVtYmVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIGdyZWVrIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciBsYXRpbiBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgcm9tYW4gbnVtYmVycyI6ICIiLAorICAgICAgICAgICAgIlVwcGVyIGxhdGluIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJVcHBlciByb21hbiBudW1iZXJzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIk1vb3Rvb2xzRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiT3BlcmEiOiB7CisgICAgICAgICAgICAiTUFSSyI6ICIiLAorICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAgICAgIkluc2VydCB0ZXh0IGluIG5ldyBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJQYXN0ZSBhcyBQbGFpbiBUZXh0IjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJQcmVzZXJ2ZVNjcmlwdHMiOiB7CisgICAgICAgICAgICAiSmF2YVNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIlBIUCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgICAgICInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnY2wnOiAnIjogIiIsCisgICAgICAgICAgICAiQVRUUklCVVRFUyI6ICIiLAorICAgICAgICAgICAgIkNvbG9ycyI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSBUQUcgeW91IHdhbnQgdG8gaW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiTm8gQ1NTIGNsYXNzIGF2YWlhYmxlIjogIiIsCisgICAgICAgICAgICAiT2siOiAiIiwKKyAgICAgICAgICAgICJPUFRJT05TIjogIiIsCisgICAgICAgICAgICAiUXVpY2sgVGFnIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlRBR3MiOiAiIiwKKyAgICAgICAgICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBUQUciOiAiIiwKKyAgICAgICAgICAgICJZb3UgaGF2ZSB0byBzZWxlY3Qgc29tZSB0ZXh0IjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJTYXZlU3VibWl0IjogeworICAgICAgICAgICAgImluIHByb2dyZXNzIjogIiIsCisgICAgICAgICAgICAiUmVhZHkiOiAiIiwKKyAgICAgICAgICAgICJTYXZlIjogIiIsCisgICAgICAgICAgICAiU2F2aW5nLi4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNldElkIjogeworICAgICAgICAgICAgIklEL05hbWU6IjogIiIsCisgICAgICAgICAgICAiU2V0IElkIGFuZCBOYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElkL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSUQvTmFtZSI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgICAgICJDbG9zaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiQ2xvc2luZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiQ29udmVydCBhbGwgcXVvdGVzIGFuZCBkYXNoZXMgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgYXV0b21hdGljIHJlcGxhY2VtZW50cyI6ICIiLAorICAgICAgICAgICAgIk9wZW5pbmdEb3VibGVRdW90ZXMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nU2luZ2xlUXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJTbWFydFJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJTbWFydFJlcGxhY2UgU2V0dGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiU3R5bGlzdCI6IHsKKyAgICAgICAgICAgICJTdHlsZXMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU3VwZXJDbGVhbiI6IHsKKyAgICAgICAgICAgICJDbGVhbiBiYWQgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIFNlbGVjdGlvbiBPbmx5IjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gdXAgSFRNTCI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIFNjb3BlIjogIiIsCisgICAgICAgICAgICAiR2VuZXJhbCB0aWR5IHVwIGFuZCBjb3JyZWN0aW9uIG9mIHNvbWUgcHJvYmxlbXMuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHNlbGVjdCBmcm9tIHRoZSBmb2xsb3dpbmcgY2xlYW5pbmcgb3B0aW9ucy4uLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzdGFuZCBieSB3aGlsZSBjbGVhbmluZyBpbiBwcm9jZXNzLi4uIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsaWdubWVudCAobGVmdC9yaWdodC9qdXN0aWZ5KS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxsIGNsYXNzZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIEFsbCBIVE1MIFRhZ3MiOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxsIHN0eWxlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIGZvbnQgc2l6ZXMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0ZXh0IGNvbG9ycy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIHR5cGVmYWNlcyAoZm9udCBcInN0eWxlc1wiKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZW1waGFzaXMgYW5kIGFubm90YXRpb25zLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBsYW5nIGF0dHJpYnV0ZXMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIFBhcmFncmFwaHMiOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzLiI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UgZGlyZWN0aW9uYWwgcXVvdGUgbWFya3Mgd2l0aCBub24tZGlyZWN0aW9uYWwgcXVvdGUgbWFya3MuIjogIiIsCisgICAgICAgICAgICAiVmlnb3JvdXNseSBwdXJnZSBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQuIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiQWxsIGZvdXIgc2lkZXMiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXJzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBQcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBUeXBlOiI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIGRvd24iOiAiIiwKKyAgICAgICAgICAgICJDZWxscyB0byB0aGUgcmlnaHQsIGFuZCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBjZWxsIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSByb3ciOiAiIiwKKyAgICAgICAgICAgICJEbyBOb3QgQ2hhbmdlIjogIiIsCisgICAgICAgICAgICAiRnJhbWUgYW5kIGJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJGcmFtZXMiOiAiIiwKKyAgICAgICAgICAgICJIZWFkZXIgKHRoKSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjZWxsIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNlbGwgYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNvbHVtbiBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjb2x1bW4gYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCByb3cgYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBjdXJyZW50IGNlbGwgd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJObyBydWxlcyI6ICIiLAorICAgICAgICAgICAgIk5vIHNpZGVzIjogIiIsCisgICAgICAgICAgICAiTm9ybWFsICh0ZCkiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJSb3cgUHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlJvdyBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gY29sdW1ucyBvbmx5IjogIiIsCisgICAgICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiByb3dzIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgY29sdW1uIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgcm93IjogIiIsCisgICAgICAgICAgICAiU3VtbWFyeSI6ICIiLAorICAgICAgICAgICAgIlRhYmxlIHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJUYWJsZSBQcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgbGVmdC1oYW5kIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSByaWdodCBhbmQgbGVmdCBzaWRlcyBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHRvcCBhbmQgYm90dG9tIHNpZGVzIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkNhcHRpb24iOiAiPDxJbnNlcnRUYWJsZT4+IiwKKyAgICAgICAgICAgICJDb2x1bW5zIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiRGVzY3JpcHRpb24iOiAiPDxGdWxsUGFnZT4+IiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAicGl4ZWxzIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUm93cyI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNwYWNpbmciOiAiPDxJbnNlcnRJbWFnZT4+IgorICAgICAgICB9LAorICAgICAgICAiV2ViS2l0IjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICI8PEdlY2tvPj4iCisgICAgICAgIH0sCisgICAgICAgICJYaW5oYSI6IHsKKyAgICAgICAgICAgICImIzgyMTI7IGZvbnQgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICImIzgyMTI7IHNpemUgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIjEgKDggcHQpIjogIiIsCisgICAgICAgICAgICAiMiAoMTAgcHQpIjogIiIsCisgICAgICAgICAgICAiMyAoMTIgcHQpIjogIiIsCisgICAgICAgICAgICAiNCAoMTQgcHQpIjogIiIsCisgICAgICAgICAgICAiNSAoMTggcHQpIjogIiIsCisgICAgICAgICAgICAiNiAoMjQgcHQpIjogIiIsCisgICAgICAgICAgICAiNyAoMzYgcHQpIjogIiIsCisgICAgICAgICAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJBZGRyZXNzIjogIiIsCisgICAgICAgICAgICAiQXJpYWwiOiAiIiwKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIiIsCisgICAgICAgICAgICAiQm9sZCI6ICIiLAorICAgICAgICAgICAgIkJ1bGxldGVkIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBjb250ZW50IHBhc3RlZCBmcm9tIFdvcmQiOiAiIiwKKyAgICAgICAgICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiIiwKKyAgICAgICAgICAgICJDbG9zZSI6ICIiLAorICAgICAgICAgICAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAiIiwKKyAgICAgICAgICAgICJDb3B5IHNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkNvdXJpZXIgTmV3IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFN0YXR1c2JhciI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBUb29sYmFyIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0wICh6ZXJvKSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMSAuLiBDVFJMLTYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUEiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUoiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUwiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLU4iOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVgiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVoiOiAiIiwKKyAgICAgICAgICAgICJDdXJyZW50IHN0eWxlIjogIiIsCisgICAgICAgICAgICAiQ3V0IHNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkRlY3JlYXNlIEluZGVudCI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiIiwKKyAgICAgICAgICAgICJFZGl0b3IgSGVscCI6ICIiLAorICAgICAgICAgICAgIkVOVEVSIjogIiIsCisgICAgICAgICAgICAiRXJyb3IgTG9hZGluZyBYaW5oYS4gIERldmVsb3BlcnMsIGNoZWNrIHRoZSBFcnJvciBDb25zb2xlIGZvciBpbmZvcm1hdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGaW5pc2hpbmciOiAiIiwKKyAgICAgICAgICAgICJGb250IENvbG9yIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0dGVkIjogIiIsCisgICAgICAgICAgICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIiIsCisgICAgICAgICAgICAiR2VvcmdpYSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMiI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMyI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNCI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNiI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmdzIjogIiIsCisgICAgICAgICAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiIiwKKyAgICAgICAgICAgICJJbXBhY3QiOiAiIiwKKyAgICAgICAgICAgICJJbmNyZWFzZSBJbmRlbnQiOiAiIiwKKyAgICAgICAgICAgICJJbml0IGVkaXRvciBzaXplIjogIiIsCisgICAgICAgICAgICAiaW5zZXJ0IGxpbmVicmVhayI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBUYWJsZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBXZWIgTGluayI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvT3ZlcndyaXRlIjogIiIsCisgICAgICAgICAgICAiSXRhbGljIjogIiIsCisgICAgICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiIiwKKyAgICAgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAiIiwKKyAgICAgICAgICAgICJKdXN0aWZ5IExlZnQiOiAiIiwKKyAgICAgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIiIsCisgICAgICAgICAgICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBDb3JlIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW4gJHBsdWdpbiI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgcGx1Z2lucyI6ICIiLAorICAgICAgICAgICAgIk1TIFdvcmQgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIm5ldyBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJOb3JtYWwiOiAiIiwKKyAgICAgICAgICAgICJPcmRlcmVkIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICIiLAorICAgICAgICAgICAgIlBhdGgiOiAiIiwKKyAgICAgICAgICAgICJQcmludCBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIiIsCisgICAgICAgICAgICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICIiLAorICAgICAgICAgICAgIlNhdmUgYXMiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgYWxsIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IENvbG9yIjogIiIsCisgICAgICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJTSElGVC1FTlRFUiI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IEJsb2NrIjogIiIsCisgICAgICAgICAgICAiU3RyaWtldGhyb3VnaCI6ICIiLAorICAgICAgICAgICAgIlN1YnNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIlN1cGVyc2NyaXB0IjogIiIsCisgICAgICAgICAgICAiVGFob21hIjogIiIsCisgICAgICAgICAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogIiIsCisgICAgICAgICAgICAiVGltZXMgTmV3IFJvbWFuIjogIiIsCisgICAgICAgICAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiIiwKKyAgICAgICAgICAgICJUb3VjaCBoZXJlIGZpcnN0IHRvIGFjdGl2YXRlIGVkaXRvci4iOiAiIiwKKyAgICAgICAgICAgICJVbmRlcmxpbmUiOiAiIiwKKyAgICAgICAgICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICIiLAorICAgICAgICAgICAgIlZlcmRhbmEiOiAiIiwKKyAgICAgICAgICAgICJXYWl0aW5nIGZvciBJZnJhbWUgdG8gbG9hZC4uLiI6ICIiLAorICAgICAgICAgICAgIldpbmdEaW5ncyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIjogIiIsCisgICAgICAgICAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJSZW1vdmUgQ3VycmVudCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IEJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJTZXQgcGFnZSBiYWNrZ3JvdW5kIGltYWdlIjogIiIsCisgICAgICAgICAgICAiU2V0IFBhZ2UgQmFja2dyb3VuZCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiQ2xpZW50c2lkZVNwZWxsY2hlY2siOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVjayB1c2luZyBpZVNwZWxsIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEwJSI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiIiwKKyAgICAgICAgICAgICIyMDAlIjogIiIsCisgICAgICAgICAgICAiMjUlIjogIiIsCisgICAgICAgICAgICAiNTAlIjogIiIsCisgICAgICAgICAgICAiNzUlIjogIiIsCisgICAgICAgICAgICAiPkxpc3QgVmlldyI6ICIiLAorICAgICAgICAgICAgIj5UaHVtYm5haWwgVmlldyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIiIsCisgICAgICAgICAgICAiQWxpZ24iOiAiIiwKKyAgICAgICAgICAgICJBbHQiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJDcm9wIjogIiIsCisgICAgICAgICAgICAiRDoiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiIiwKKyAgICAgICAgICAgICJFZGl0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIiIsCisgICAgICAgICAgICAiRmlsZW5hbWU6IjogIiIsCisgICAgICAgICAgICAiRmlsZXNpemU6IjogIiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkZsaXAgVmVydGljYWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJHSUYiOiAiIiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiIiwKKyAgICAgICAgICAgICJIOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIiIsCisgICAgICAgICAgICAiSlBFRyBIaWdoIjogIiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiIiwKKyAgICAgICAgICAgICJKUEVHIE1lZGl1bSI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmciOiAiIiwKKyAgICAgICAgICAgICJMb2NrIjogIiIsCisgICAgICAgICAgICAiTWFya2VyIjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBmb2xkZXIgc2l6ZSBsaW1pdCByZWFjaGVkLiBVcGxvYWQgZGlzYWJsZWQuIjogIiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICIiLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJObyBGaWxlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB2YWx1ZSI6ICIiLAorICAgICAgICAgICAgIlBORyI6ICIiLAorICAgICAgICAgICAgIlByZXNldCI6ICIiLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIiIsCisgICAgICAgICAgICAiUmVmcmVzaCI6ICIiLAorICAgICAgICAgICAgIlJlbmFtZSI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIEltYWdlIjogIiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiIiwKKyAgICAgICAgICAgICJTdGFydCBZOiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgbWFya2VyIGNvbG9yIjogIiIsCisgICAgICAgICAgICAiVHJhc2giOiAiIiwKKyAgICAgICAgICAgICJVcGxvYWQiOiAiIiwKKyAgICAgICAgICAgICJXOiI6ICIiLAorICAgICAgICAgICAgIlg6IjogIiIsCisgICAgICAgICAgICAiWGluaGEgSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiWToiOiAiIiwKKyAgICAgICAgICAgICJab29tIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiQ2xlYXIiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJDb2xvciI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkNvcHkiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJDdXQiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICI8PE1vb3Rvb2xzRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1hcmdpbiI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRpdGxlICh0b29sdGlwKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIldpZHRoIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJGaWx0ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsdGVyIjogIjw8SW5zZXJ0U25pcHBldDI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkh0bWxUaWR5IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQXV0by1UaWR5IjogIiIsCisgICAgICAgICAgICAiRG9uJ3QgVGlkeSI6ICIiLAorICAgICAgICAgICAgIkhUTUwgVGlkeSI6ICIiLAorICAgICAgICAgICAgIlRpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQW5nbGU6IjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlcyI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgVXNlcm5hbWUvRW1haWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIgTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFBob3RvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFZpZGVvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgU2VydmVyIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFVzZXJuYW1lIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlbyBMaXN0IjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlb3MiOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJDbGVhciI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQ3JvcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJFZGl0IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiR0lGIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIEhpZ2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgTG93IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIE1lZGl1bSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxvY2siOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1hcmtlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIlBORyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZXNpemUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUm90YXRlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlN0YXJ0IFk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlRyYXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJXOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJCZWhhdmlvcjoiOiAiIiwKKyAgICAgICAgICAgICJDb250aW51b3VzIjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uOiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBzY3JvbGxpbmcgbWFycXVlZSI6ICIiLAorICAgICAgICAgICAgIk1hcnF1ZWUgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIEFtb3VudDoiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgRGVsYXk6IjogIiIsCisgICAgICAgICAgICAiU2xpZGUiOiAiIiwKKyAgICAgICAgICAgICJTcGVlZCBDb250cm9sIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTmFtZSI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIk5hbWUvSUQ6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJUZXh0OiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIldpZHRoOiI6ICI8PEhvcml6b250YWxSdWxlPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm90IGRlZmluZWQiOiAiIiwKKyAgICAgICAgICAgICIgT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlVwbG9hZCBmaWxlIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkxheW91dCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiU2l6ZSI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNwYWNpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJWZXJ0aWNhbDoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiTm90ZVNlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTIwJSI6ICIiLAorICAgICAgICAgICAgIjE1MCUiOiAiIiwKKyAgICAgICAgICAgICI4MCUiOiAiIiwKKyAgICAgICAgICAgICJBZGQgR1VJRE8gQ29kZSBpbiBhIHRleHRib3ggb24gdGhlIHBhZ2UiOiAiIiwKKyAgICAgICAgICAgICJBZGQgTUlESSBsaW5rIHRvIGFsbG93IHN0dWRlbnRzIHRvIGhlYXIgdGhlIG11c2ljIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiR1VJRE8gQ29kZSI6ICIiLAorICAgICAgICAgICAgIkd1aWRvIGNvZGUiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBpbiBhcHBsZXQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgR1VJRE8gTXVzaWMgTm90YXRpb24iOiAiIiwKKyAgICAgICAgICAgICJNSURJIEZpbGUiOiAiIiwKKyAgICAgICAgICAgICJTb3VyY2UgQ29kZSI6ICIiLAorICAgICAgICAgICAgIldpdGggTW96aWxsYSwgdGhlIGFwcGxldCB3aWxsIG5vdCBiZSB2aXNpYmxlIGluIGVkaXRvciwgYnV0IG9ubHkgaW4gV2ViIHBhZ2UgYWZ0ZXIgc3VibWl0dGluZy4iOiAiIiwKKyAgICAgICAgICAgICJab29tIDoiOiAiIiwKKyAgICAgICAgICAgICIxMDAlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiWm9vbSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgR2VhcnMgaW4gb3JkZXIgdG8gdXNlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UgYW5kIGNvbmZpZ3VyYXRpb24uIjogIiIsCisgICAgICAgICAgICAiRW5hYmxpbmcgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIkluc3RhbGwiOiAiIiwKKyAgICAgICAgICAgICJMZWFybiBBYm91dCBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIHJlbG9hZCB0aGUgcGFnZSwgY2F1c2luZyB5b3UgdG8gbG9zZSBhbnkgdW5zYXZlZCB3b3JrLiAgUHJlc3MgXCJPS1wiIHRvIHJlbG9hZC4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSB1c2VzIEdvb2dsZSBHZWFycyB0byBlbmFibGUgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZS4gIFdpdGggR2VhcnMgaW5zdGFsbGVkLCB5b3UgY2FuIHNhdmUgZHJhZnRzIG9mIHlvdXIgZG9jdW1lbnRzIG9uIHlvdXIgaGFyZCBkcml2ZSwgY29uZmlndXJlIFhpbmhhIHRvIGxvb2sgdGhlIHdheSB5b3Ugd2FudCwgYW5kIGNhcnJ5IHRoaXMgaW5mb3JtYXRpb24gd2hlcmV2ZXIgeW91IHVzZSBYaW5oYSBvbiB0aGUgd2ViLiI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiUFNTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU1NFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWxlOiAiOiAiIiwKKyAgICAgICAgICAgICJJbXBvcnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEZXRhaWxzIjogIiIsCisgICAgICAgICAgICAiRmlsZSBCcm93c2VyIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gICAgVGhlcmUgQyAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgVGhlcmUgQSAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyBcIiBUaGVyZSBCIFwiIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gJyBUaGVyZSBEICciOiAiIiwKKyAgICAgICAgICAgICJMaXN0IG9mIFBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIk5ldyBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIk9wZW4iOiAiIiwKKyAgICAgICAgICAgICJPcGVuIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgeW91J2QgbGlrZSB0byBjcmVhdGUuIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBlcmFzZSBhbnkgdW5zYXZlZCBjb250ZW50LiAgSWYgeW91J3JlIGNlcnRhaW4sIHBsZWFzZSBjbGljayBPSyB0byBjb250aW51ZS4iOiAiIiwKKyAgICAgICAgICAgICJXZWIgVVJMIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiPDxQU0xvY2FsPj4iLAorICAgICAgICAgICAgIkNvcHkiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTWFuYWdlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZW5hbWUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCI6ICI8PEluc2VydE5vdGU+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBTUEVMTENIRUNLRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGljdGlvbmFyeSI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGVkIGxpc3Qgb2YgbWlzcGVsbGVkIHdvcmRzIjogIiIsCisgICAgICAgICAgICAiSFRNTEFyZWEgU3BlbGwgQ2hlY2tlciI6ICIiLAorICAgICAgICAgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIGFsbCI6ICIiLAorICAgICAgICAgICAgIkluZm8iOiAiIiwKKyAgICAgICAgICAgICJMZWFybiI6ICIiLAorICAgICAgICAgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICIiLAorICAgICAgICAgICAgIk9yaWdpbmFsIHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQuICBDYWxsaW5nIHNwZWxsIGNoZWNrZXIuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAiIiwKKyAgICAgICAgICAgICJwbGl6IHdlaXQgOy0pIjogIiIsCisgICAgICAgICAgICAiUmUtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSBhbGwiOiAiIiwKKyAgICAgICAgICAgICJSZXZlcnQiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiU3BlbGwtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJTdWdnZXN0aW9ucyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBkcm9wIGNoYW5nZXMgYW5kIHF1aXQgc3BlbGwgY2hlY2tlci4gIFBsZWFzZSBjb25maXJtLiI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJSZXBsYWNlIHdpdGgiOiAiPDxGaW5kUmVwbGFjZT4+IgorICAgICAgICB9LAorICAgICAgICAiVGVtcGxhdGUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBURU1QTEFURSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJJbnNlcnQgdGVtcGxhdGUiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuRm9ybWF0IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWxsIjogIiIsCisgICAgICAgICAgICAiQWxsIEhUTUw6IjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgQXJlYSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIG9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0aW5nOiI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCB3aGljaCB0eXBlcyBvZiBmb3JtYXR0aW5nIHlvdSB3b3VsZCBsaWtlIHRvIHJlbW92ZS4iOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9nYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2diLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Njg2ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9nYi5qcwpAQCAtMCwwICsxLDE1MDMgQEAKKy8vIFhpbmhhIExhbmd1YWdlIENvbWJpbmVkIFRyYW5zbGF0aW9uIEZpbGUKKy8vCisvLyBMQU5HOiAiZ2IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTlNUUlVDVElPTlMgVE8gVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFlvdXIgdHJhbnNsYXRpb24gbXVzdCBiZSBpbiBVVEYtOCBDaGFyYWN0ZXIgRW5jb2RpbmcuCisvLworLy8gVGhpcyBpcyBhIEpTT04gZW5jb2RlZCBmaWxlIChwbHVzIGNvbW1lbnRzKSwgc3RyaW5ncyBzaG91bGQgYmUgZG91YmxlLXF1b3RlCisvLyBvbmx5LCBkbyBub3QgdXNlIHNpbmdsZSBxdW90ZXMgdG8gc3Vycm91bmQgc3RyaW5ncyAtICJoZWxsbyIsIG5vdCAnaGVsbG8nCisvLyBkbyBub3QgaGF2ZSBhIHRyYWlsaW5nIGNvbW1hIGFmdGVyIHRoZSBsYXN0IGVudHJ5IGluIGEgc2VjdGlvbi4KKy8vCisvLyBPbmx5IGZ1bGwgbGluZSBjb21tZW50cyBhcmUgYWxsb3dlZCAodGhhdCBhIGNvbW1lbnRzIG9jY3VweSBlbnRpcmUgbGluZXMpLgorLy8KKy8vIFNlYXJjaCBmb3IgdGhlIF9fTkVXX1RSQU5TTEFUSU9OU19fIHNlY3Rpb24gYmVsb3csIHRoaXMgaXMgd2hlcmUgeW91IHdpbGwKKy8vIHdhbnQgdG8gZm9jdXMsIHRoaXMgc2VjdGlvbiBpbmNsdWRlcyB0aGluZ3MgdGhhdCBkbyBub3QgcHJlc2VudGx5IGhhdmUgYSAKKy8vIHRyYW5zbGF0aW9uIG9yIGZvciB3aGljaCB0aGUgdHJhbnNsYXRpb24gbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgYWNjdXJhY3kuCisvLworLy8gSW4gdGhlIE5ldyBUcmFuc2xhdGlvbnMgc2VjdGlvbiBhIHRyYW5zbGF0aW9uIHN0cmluZyBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZworLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiIgorLy8gICAgIFRoaXMgbWVhbnMgaXQgaXMgbm90IHRyYW5zbGF0ZWQgeWV0LCBhZGQgeW91ciB0cmFuc2xhdGlvbi4uLgorLy8gICAgICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJLbGluZ29uIFN0cmluZyBIZXJlIgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiVHJhbnNsYXRlZCBTdHJpbmcgSGVyZSIKKy8vICAgICBUaGlzIG1lYW5zIHRoYXQgYW4gZXhpc3RpbmcgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nLCBpbiBzb21lIG90aGVyCisvLyAgICAgc2VjdGlvbiBoYXMgYmVlbiBmb3VuZCwgYW5kIHVzZWQuICBDaGVjayB0aGF0IGl0IGlzIGFwcHJvcHJpdGUgZm9yIHRoaXMKKy8vICAgICBzZWN0aW9uIGFuZCBpZiBpdCBpcywgdGhhdCdzIGZpbmUgbGVhdmUgaXQgYXMgaXMsIG90aGVyd2lzZSBjaGFuZ2UgYXMKKy8vICAgICBhcHByb3ByaWF0ZS4KKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIjw8QW5vdGhlclNlY3Rpb24+PiIKKy8vICAgICBUaGlzIG1lYW5zIHVzZSB0aGUgc2FtZSB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcgYXMgPDxBbm90aGVyU2VjdGlvbj4+CisvLyAgICAgdGhpcyBzYXZlcyB5b3UgcmUtdHJhbmxhdGluZyBzdHJpbmdzLiAgSWYgdGhlIENvbnRleHQgb2YgdGhpcyBzZWN0aW9uCisvLyAgICAgYW5kIHRoZSBjb250ZXh0IG9mIEFub3RoZXJTZWN0aW9uIHNlZW0gdGhlIHNhbWUsIHRoYXQncyBmaW5lIGxlYXZlIGl0CisvLyAgICAgdXNpbmcgdGhhdCB0cmFuc2xhdGlvbiwgYnV0IGlmIHRoaXMgc2VjdGlvbiBuZWVkcyBhIGRpZmZlcmVudCB0cmFuc2xhdGlvbiwgCisvLyAgICAgeW91IGNhbiBwcm92aWRlIGl0IGJ5IHJlcGxhY2luZyB0aGUgbGluayAoPDxBbm90aGVyU2VjdGlvbj4+KSB3aXRoIHRoYXQKKy8vICAgICBuZXcgdHJhbnNsYXRpb24uICBGb3IgZXhhbXBsZSAtIGEgIlRhYmxlIiBpbiBzYXkgIkRhdGFQbHVnaW4iIGlzIAorLy8gICAgIHBlcmhhcHMgdHJhbnNsYXRlZCBkaWZmZXJlbnRseSB0byAiVGFibGUiIGluICJGdXJuaXR1cmVQbHVnaW4iLgorLy8KKy8vIFRFU1RJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgcGxhY2UgeW91ciB0cmFuc2xhdGlvbiBmaWxlIG9uIHlvdXIgd2Vic2VydmVyIHNvbWV3aGVyZSBmb3IgZXhhbXBsZQorLy8KKy8vICAgL3hpbmhhL2xhbmcvbWVyZ2VkL2diLmpzCisvLworLy8gYW5kIHRoZW4gdGVsbCBYaW5oYSB3aGVyZSB0byBnZXQgaXQgKGJlZm9yZSBsb2FkaW5nIFhpbmhhQ29yZS5qcykgYnkgCisvLworLy8gIF9lZGl0b3JfbGFuZyAgICAgICAgICAgICAgPSAnZ2InOworLy8gIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSAgPSAnL3hpbmhhL2xhbmcvbWVyZ2VkL2diLmpzJzsKKy8vCisvLyBYaW5oYSB3aWxsIGxvYWQgeW91ciBuZXcgbGFuZ3VhZ2UgZGVmaW5pdGlvbi4KKy8vCisvLyBTVUJNSVRUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IGNyZWF0ZSBhIFRpY2tldCBvbiB0aGUgWGluaGEgd2Vic2l0ZSBhbmQgYXR0YWNoIHlvdXIgdHJhbnNsYXRpb24gCisvLyBmaWxlLgorLy8KKy8vIFRoZSBYaW5oYSBkZXZlbG9wZXJzIHdpbGwgdGFrZSB5b3VyIGZpbGUgYW5kIHVzZSB0aGUgCisvLyAgICAgY29udHJpYi9sY19zcGxpdF9tZXJnZWRfZmlsZS5waHAKKy8vIHNjcmlwdCB0byBsb2FkIGl0IGludG8gdGhlIFhpbmhhIGRpc3RyaWJ1dGlvbi4KKworeworICAgICJfX05FV19UUkFOU0xBVElPTlNfXyI6IHsKKyAgICAgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgICAgICJBYmJyZXZpYXRpb24iOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiIiwKKyAgICAgICAgICAgICJFeHBhbnNpb246IjogIiIsCisgICAgICAgICAgICAiT0siOiAiIgorICAgICAgICB9LAorICAgICAgICAiQWJvdXRCb3giOiB7CisgICAgICAgICAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiPDxYaW5oYT4+IiwKKyAgICAgICAgICAgICJDbG9zZSI6ICI8PFhpbmhhPj4iCisgICAgICAgIH0sCisgICAgICAgICJDaGFyQ291bnRlciI6IHsKKyAgICAgICAgICAgICIuLi4gaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAgICAgICAgICJDaGFycyI6ICIiLAorICAgICAgICAgICAgIkhUTUwiOiAiIiwKKyAgICAgICAgICAgICJXb3JkcyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDaGFyYWN0ZXJNYXAiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IHNwZWNpYWwgY2hhcmFjdGVyIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbG9yUGlja2VyIjogeworICAgICAgICAgICAgIkNsaWNrIGEgY29sb3IuLi4iOiAiIiwKKyAgICAgICAgICAgICJDb2xvcjogIjogIiIsCisgICAgICAgICAgICAiU2FtcGxlIjogIiIsCisgICAgICAgICAgICAiV2ViIFNhZmU6ICI6ICIiLAorICAgICAgICAgICAgIkNsb3NlIjogIjw8WGluaGE+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAgICAgIl9EZWxldGUgUm93IjogIiIsCisgICAgICAgICAgICAiX0ltYWdlIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJfTW9kaWZ5IExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJfUmVtb3ZlIExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJfVGFibGUgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIkNfZWxsIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJDaGVjX2sgTGluay4uLiI6ICIiLAorICAgICAgICAgICAgIkNvcHkiOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgYSBsaW5rIjogIiIsCisgICAgICAgICAgICAiQ3VycmVudCBVUkwgaXMiOiAiIiwKKyAgICAgICAgICAgICJDdXQiOiAiIiwKKyAgICAgICAgICAgICJEZV9sZXRlIENvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBDZWxsIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCByb3ciOiAiIiwKKyAgICAgICAgICAgICJIb3cgZGlkIHlvdSBnZXQgaGVyZT8gKFBsZWFzZSByZXBvcnQhKSI6ICIiLAorICAgICAgICAgICAgIklfbnNlcnQgUm93IEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluX3NlcnQgUm93IEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IF9Db2x1bW4gQmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBhZnRlciB0aGUgY3VycmVudCBub2RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGJlZm9yZSB0aGUgY3VycmVudCBub2RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENfb2x1bW4gQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDZWxsIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkxpbmsgcG9pbnRzIHRvOiI6ICIiLAorICAgICAgICAgICAgIk1ha2UgbGluX2suLi4iOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICIiLAorICAgICAgICAgICAgIk9wZW5zIHRoaXMgbGluayBpbiBhIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJQYXN0ZSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgZWxlbWVudDoiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHVubGluayB0aGlzIGVsZW1lbnQuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHRoZSAkZWxlbSBFbGVtZW50Li4uIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHRoaXMgbm9kZSBmcm9tIHRoZSBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlJvX3cgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIGltYWdlIHByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgVGFibGUgQ2VsbCBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgVGFibGUgUm93IFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiVW5saW5rIHRoZSBjdXJyZW50IGVsZW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICI8PFhpbmhhPj4iLAorICAgICAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICI8PFhpbmhhPj4iLAorICAgICAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICI8PFhpbmhhPj4iLAorICAgICAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiPDxYaW5oYT4+IgorICAgICAgICB9LAorICAgICAgICAiQ3JlYXRlTGluayI6IHsKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiIiwKKyAgICAgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIiIsCisgICAgICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICIiLAorICAgICAgICAgICAgIk90aGVyIjogIiIsCisgICAgICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0OiI6ICIiLAorICAgICAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAiIiwKKyAgICAgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIiIsCisgICAgICAgICAgICAiVVJMOiI6ICIiLAorICAgICAgICAgICAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiRGVmaW5pdGlvbkxpc3QiOiB7CisgICAgICAgICAgICAiZGVmaW5pdGlvbiBkZXNjcmlwdGlvbiI6ICIiLAorICAgICAgICAgICAgImRlZmluaXRpb24gbGlzdCI6ICIiLAorICAgICAgICAgICAgImRlZmluaXRpb24gdGVybSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEaWFsb2dzIjogeworICAgICAgICAgICAgIlNvbWUgVGV4dCBIZXJlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkR5bmFtaWNDU1MiOiB7CisgICAgICAgICAgICAiQ2hvb3NlIHN0eWxlc2hlZXQiOiAiIiwKKyAgICAgICAgICAgICJEZWZhdWx0IjogIiIsCisgICAgICAgICAgICAiVW5kZWZpbmVkIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVkaXRUYWciOiB7CisgICAgICAgICAgICAiRWRpdCBIVE1MIGZvciBzZWxlY3RlZCB0ZXh0IjogIiIsCisgICAgICAgICAgICAiRWRpdCBUYWcgQnkgUGVnIjogIiIsCisgICAgICAgICAgICAiVGFnIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICAgICAiIT0iOiAiIiwKKyAgICAgICAgICAgICIhaW4iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7LSI6ICIiLAorICAgICAgICAgICAgIiZndDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSZndDsiOiAiIiwKKyAgICAgICAgICAgICImbHQ7eCZndDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYCFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgLmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAwYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDJgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgM2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA0YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA3YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDhgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGBlYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsmbmJzcDtgMWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YCt7Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2AtOlxcIGAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLXs6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YENgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGNvc2AiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgbG5gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHBpYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgc2luYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0YW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRpbWVzYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZxdW90O3RleHQmcXVvdDsiOiAiIiwKKyAgICAgICAgICAgICInK2Zvcm11bGErJyI6ICIiLAorICAgICAgICAgICAgIigobiksKGspKSI6ICIiLAorICAgICAgICAgICAgIih4KzEpLyh4LTEpIjogIiIsCisgICAgICAgICAgICAiKiI6ICIiLAorICAgICAgICAgICAgIioqIjogIiIsCisgICAgICAgICAgICAiKy0iOiAiIiwKKyAgICAgICAgICAgICItJmd0OyI6ICIiLAorICAgICAgICAgICAgIi0mbHQ7IjogIiIsCisgICAgICAgICAgICAiLToiOiAiIiwKKyAgICAgICAgICAgICItPSI6ICIiLAorICAgICAgICAgICAgIi8vIjogIiIsCisgICAgICAgICAgICAiL18iOiAiIiwKKyAgICAgICAgICAgICI6LiI6ICIiLAorICAgICAgICAgICAgIj0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiQCI6ICIiLAorICAgICAgICAgICAgIltbYSxiXSxbYyxkXV0iOiAiIiwKKyAgICAgICAgICAgICJcXFxcIjogIiIsCisgICAgICAgICAgICAiXFxuQ2xpY2sgaW4gdGhlIGJveCB0byB1c2UgeW91ciBrZXlib2FyZCBvciB1c2UgdGhlIGJ1dHRvbnNcXG4iOiAiIiwKKyAgICAgICAgICAgICJeXiI6ICIiLAorICAgICAgICAgICAgIl5eXiI6ICIiLAorICAgICAgICAgICAgIl9ffCI6ICIiLAorICAgICAgICAgICAgIl98XyI6ICIiLAorICAgICAgICAgICAgImAhPWAiOiAiIiwKKyAgICAgICAgICAgICJgIWluYCI6ICIiLAorICAgICAgICAgICAgImAmYW5kO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmNhcDtgIjogIiIsCisgICAgICAgICAgICAiYCZjdXA7YCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7LWAiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDt4Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJm9yO2AiOiAiIiwKKyAgICAgICAgICAgICJgJnF1b3Q7dGV4dCZxdW90O2AiOiAiIiwKKyAgICAgICAgICAgICJgKChuKSwoaykpYCI6ICIiLAorICAgICAgICAgICAgImAoeCsxKS8oeC0xKWAiOiAiIiwKKyAgICAgICAgICAgICJgKipgIjogIiIsCisgICAgICAgICAgICAiYCpgIjogIiIsCisgICAgICAgICAgICAiYCstYCI6ICIiLAorICAgICAgICAgICAgImAtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLSZsdDtgIjogIiIsCisgICAgICAgICAgICAiYC06YCI6ICIiLAorICAgICAgICAgICAgImAtPWAiOiAiIiwKKyAgICAgICAgICAgICJgLy9gIjogIiIsCisgICAgICAgICAgICAiYC9fYCI6ICIiLAorICAgICAgICAgICAgImA6LmAiOiAiIiwKKyAgICAgICAgICAgICJgPSZndDtgIjogIiIsCisgICAgICAgICAgICAiYEBgIjogIiIsCisgICAgICAgICAgICAiYFtbYSxiXSxbYyxkXV1gIjogIiIsCisgICAgICAgICAgICAiYFxcXFxgIjogIiIsCisgICAgICAgICAgICAiYF9ffGAiOiAiIiwKKyAgICAgICAgICAgICJgX3xfYCI6ICIiLAorICAgICAgICAgICAgImBBQWAiOiAiIiwKKyAgICAgICAgICAgICJgYWxlcGhgIjogIiIsCisgICAgICAgICAgICAiYGFscGhhYCI6ICIiLAorICAgICAgICAgICAgImBhbmRgIjogIiIsCisgICAgICAgICAgICAiYGJhcmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgQ0NgIjogIiIsCisgICAgICAgICAgICAiYGNjYWAiOiAiIiwKKyAgICAgICAgICAgICJgY2hpYCI6ICIiLAorICAgICAgICAgICAgImBkYXJyYCI6ICIiLAorICAgICAgICAgICAgImBkZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsYCI6ICIiLAorICAgICAgICAgICAgImBEZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRpYW1vbmRgIjogIiIsCisgICAgICAgICAgICAiYGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGR5L2R4YCI6ICIiLAorICAgICAgICAgICAgImBFRWAiOiAiIiwKKyAgICAgICAgICAgICJgZXBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgZXRhYCI6ICIiLAorICAgICAgICAgICAgImBmcmFgIjogIiIsCisgICAgICAgICAgICAiYEdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBnYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ3JhZGAiOiAiIiwKKyAgICAgICAgICAgICJgaEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaGF0YWAiOiAiIiwKKyAgICAgICAgICAgICJgaWZgIjogIiIsCisgICAgICAgICAgICAiYGluYCI6ICIiLAorICAgICAgICAgICAgImBpbnRgIjogIiIsCisgICAgICAgICAgICAiYGlvdGFgIjogIiIsCisgICAgICAgICAgICAiYGthcHBhYCI6ICIiLAorICAgICAgICAgICAgImBMYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYGxhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGltXyh4LSZndDtvbylgIjogIiIsCisgICAgICAgICAgICAiYGxvZ2AiOiAiIiwKKyAgICAgICAgICAgICJgbXVgIjogIiIsCisgICAgICAgICAgICAiYE5OYCI6ICIiLAorICAgICAgICAgICAgImBubmAiOiAiIiwKKyAgICAgICAgICAgICJgbm90YCI6ICIiLAorICAgICAgICAgICAgImBudWAiOiAiIiwKKyAgICAgICAgICAgICJgbytgIjogIiIsCisgICAgICAgICAgICAiYG8uYCI6ICIiLAorICAgICAgICAgICAgImBPL2AiOiAiIiwKKyAgICAgICAgICAgICJgb2ludGAiOiAiIiwKKyAgICAgICAgICAgICJgT21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYG9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBvb2AiOiAiIiwKKyAgICAgICAgICAgICJgb3JgIjogIiIsCisgICAgICAgICAgICAiYG94YCI6ICIiLAorICAgICAgICAgICAgImBwaGlgIjogIiIsCisgICAgICAgICAgICAiYFBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGlgIjogIiIsCisgICAgICAgICAgICAiYHBpYCI6ICIiLAorICAgICAgICAgICAgImBwcm9kYCI6ICIiLAorICAgICAgICAgICAgImBwcm9wYCI6ICIiLAorICAgICAgICAgICAgImBwc2lgIjogIiIsCisgICAgICAgICAgICAiYFBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgUVFgIjogIiIsCisgICAgICAgICAgICAiYHF1YWRgIjogIiIsCisgICAgICAgICAgICAiYHJBcnJgIjogIiIsCisgICAgICAgICAgICAiYHJob2AiOiAiIiwKKyAgICAgICAgICAgICJgcm9vdChuKSh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgUlJgIjogIiIsCisgICAgICAgICAgICAiYHNmYWAiOiAiIiwKKyAgICAgICAgICAgICJgU2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYHNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzcXJ0KHgpYCI6ICIiLAorICAgICAgICAgICAgImBzcXVhcmVgIjogIiIsCisgICAgICAgICAgICAiYHN0YWNrcmVsKC0mZ3Q7KSgrKWAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViYCI6ICIiLAorICAgICAgICAgICAgImBzdWJlYCI6ICIiLAorICAgICAgICAgICAgImBzdW1gIjogIiIsCisgICAgICAgICAgICAiYHN1cGAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwZWAiOiAiIiwKKyAgICAgICAgICAgICJgdGF1YCI6ICIiLAorICAgICAgICAgICAgImB0aGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgVGhldGFgIjogIiIsCisgICAgICAgICAgICAiYFRUYCI6ICIiLAorICAgICAgICAgICAgImB0dGFgIjogIiIsCisgICAgICAgICAgICAiYHVhcnJgIjogIiIsCisgICAgICAgICAgICAiYHVsYWAiOiAiIiwKKyAgICAgICAgICAgICJgdXBzaWxvbmAiOiAiIiwKKyAgICAgICAgICAgICJgdXVgIjogIiIsCisgICAgICAgICAgICAiYHZlY2FgIjogIiIsCisgICAgICAgICAgICAiYHZ2YCI6ICIiLAorICAgICAgICAgICAgImB4XyhtbilgIjogIiIsCisgICAgICAgICAgICAiYHhpYCI6ICIiLAorICAgICAgICAgICAgImBYaWAiOiAiIiwKKyAgICAgICAgICAgICJgeHhgIjogIiIsCisgICAgICAgICAgICAiYHpldGFgIjogIiIsCisgICAgICAgICAgICAiYFpaYCI6ICIiLAorICAgICAgICAgICAgImB8LSZndDtgIjogIiIsCisgICAgICAgICAgICAiYHwtLWAiOiAiIiwKKyAgICAgICAgICAgICJgfD09YCI6ICIiLAorICAgICAgICAgICAgImB8X19gIjogIiIsCisgICAgICAgICAgICAiYHx+YCI6ICIiLAorICAgICAgICAgICAgImB+PWAiOiAiIiwKKyAgICAgICAgICAgICJgfnxgIjogIiIsCisgICAgICAgICAgICAiYH5+YCI6ICIiLAorICAgICAgICAgICAgIkFBIjogIiIsCisgICAgICAgICAgICAiYWxlcGgiOiAiIiwKKyAgICAgICAgICAgICJhbHBoYSI6ICIiLAorICAgICAgICAgICAgImFuZCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aCBGb3JtdWxhIElucHV0IjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoTUwgRXhhbXBsZSI6ICIiLAorICAgICAgICAgICAgImJhcmEiOiAiIiwKKyAgICAgICAgICAgICJCYXNlZCBvbiBBU0NJSU1hdGhNTCBieSI6ICIiLAorICAgICAgICAgICAgImJiYSI6ICIiLAorICAgICAgICAgICAgImJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiZXRhIjogIiIsCisgICAgICAgICAgICAiQ0MiOiAiIiwKKyAgICAgICAgICAgICJjY2EiOiAiIiwKKyAgICAgICAgICAgICJjaGkiOiAiIiwKKyAgICAgICAgICAgICJkYXJyIjogIiIsCisgICAgICAgICAgICAiZGRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkZWwiOiAiIiwKKyAgICAgICAgICAgICJkZWx0YSI6ICIiLAorICAgICAgICAgICAgIkRlbHRhIjogIiIsCisgICAgICAgICAgICAiZGlhbW9uZCI6ICIiLAorICAgICAgICAgICAgImRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkeS9keCI6ICIiLAorICAgICAgICAgICAgIkVFIjogIiIsCisgICAgICAgICAgICAiZXBzaSI6ICIiLAorICAgICAgICAgICAgImV0YSI6ICIiLAorICAgICAgICAgICAgIkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFzY2lpTWF0aE1MIHZpc2l0IHRoaXMgcGFnZToiOiAiIiwKKyAgICAgICAgICAgICJGb3JtdWxhIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgImZyYSI6ICIiLAorICAgICAgICAgICAgImdhbW1hIjogIiIsCisgICAgICAgICAgICAiR2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJncmFkIjogIiIsCisgICAgICAgICAgICAiaEFyciI6ICIiLAorICAgICAgICAgICAgImhhcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXRhIjogIiIsCisgICAgICAgICAgICAiaWYiOiAiIiwKKyAgICAgICAgICAgICJpbiI6ICIiLAorICAgICAgICAgICAgIklucHV0IjogIiIsCisgICAgICAgICAgICAiaW50IjogIiIsCisgICAgICAgICAgICAiaW50X2FeYmYoeClkeCI6ICIiLAorICAgICAgICAgICAgImlvdGEiOiAiIiwKKyAgICAgICAgICAgICJrYXBwYSI6ICIiLAorICAgICAgICAgICAgImxhbWJkYSI6ICIiLAorICAgICAgICAgICAgIkxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxBcnIiOiAiIiwKKyAgICAgICAgICAgICJsYXJyIjogIiIsCisgICAgICAgICAgICAibGltXyh4LSZndDtvbykiOiAiIiwKKyAgICAgICAgICAgICJtdSI6ICIiLAorICAgICAgICAgICAgIm5uIjogIiIsCisgICAgICAgICAgICAiTk4iOiAiIiwKKyAgICAgICAgICAgICJubm4iOiAiIiwKKyAgICAgICAgICAgICJub3QiOiAiIiwKKyAgICAgICAgICAgICJudSI6ICIiLAorICAgICAgICAgICAgIm8rIjogIiIsCisgICAgICAgICAgICAiby4iOiAiIiwKKyAgICAgICAgICAgICJPLyI6ICIiLAorICAgICAgICAgICAgIm9pbnQiOiAiIiwKKyAgICAgICAgICAgICJPbWVnYSI6ICIiLAorICAgICAgICAgICAgIm9tZWdhIjogIiIsCisgICAgICAgICAgICAib28iOiAiIiwKKyAgICAgICAgICAgICJvciI6ICIiLAorICAgICAgICAgICAgIm94IjogIiIsCisgICAgICAgICAgICAiUGhpIjogIiIsCisgICAgICAgICAgICAicGhpIjogIiIsCisgICAgICAgICAgICAicGkiOiAiIiwKKyAgICAgICAgICAgICJQaSI6ICIiLAorICAgICAgICAgICAgIlByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJwcm9kIjogIiIsCisgICAgICAgICAgICAicHJvcCI6ICIiLAorICAgICAgICAgICAgInBzaSI6ICIiLAorICAgICAgICAgICAgIlBzaSI6ICIiLAorICAgICAgICAgICAgIlFRIjogIiIsCisgICAgICAgICAgICAicXVhZCI6ICIiLAorICAgICAgICAgICAgInJBcnIiOiAiIiwKKyAgICAgICAgICAgICJyaG8iOiAiIiwKKyAgICAgICAgICAgICJyb290KG4pKHgpIjogIiIsCisgICAgICAgICAgICAiUlIiOiAiIiwKKyAgICAgICAgICAgICJzZmEiOiAiIiwKKyAgICAgICAgICAgICJTaWdtYSI6ICIiLAorICAgICAgICAgICAgInNpZ21hIjogIiIsCisgICAgICAgICAgICAic3FydCh4KSI6ICIiLAorICAgICAgICAgICAgInNxdWFyZSI6ICIiLAorICAgICAgICAgICAgInN0YWNrcmVsKC0mZ3Q7KSgrKSI6ICIiLAorICAgICAgICAgICAgInN1YiI6ICIiLAorICAgICAgICAgICAgInN1YmUiOiAiIiwKKyAgICAgICAgICAgICJzdW0iOiAiIiwKKyAgICAgICAgICAgICJzdW1fKG49MSleb28iOiAiIiwKKyAgICAgICAgICAgICJzdXAiOiAiIiwKKyAgICAgICAgICAgICJzdXBlIjogIiIsCisgICAgICAgICAgICAidGF1IjogIiIsCisgICAgICAgICAgICAiVGhldGEiOiAiIiwKKyAgICAgICAgICAgICJ0aGV0YSI6ICIiLAorICAgICAgICAgICAgIlRUIjogIiIsCisgICAgICAgICAgICAidHRhIjogIiIsCisgICAgICAgICAgICAidWFyciI6ICIiLAorICAgICAgICAgICAgInVsYSI6ICIiLAorICAgICAgICAgICAgInVwc2lsb24iOiAiIiwKKyAgICAgICAgICAgICJ1dSI6ICIiLAorICAgICAgICAgICAgInV1dSI6ICIiLAorICAgICAgICAgICAgInZlY2EiOiAiIiwKKyAgICAgICAgICAgICJ2diI6ICIiLAorICAgICAgICAgICAgInZ2diI6ICIiLAorICAgICAgICAgICAgInheKG0rbikiOiAiIiwKKyAgICAgICAgICAgICJ4XyhtbikiOiAiIiwKKyAgICAgICAgICAgICJYaSI6ICIiLAorICAgICAgICAgICAgInhpIjogIiIsCisgICAgICAgICAgICAieHgiOiAiIiwKKyAgICAgICAgICAgICJ6ZXRhIjogIiIsCisgICAgICAgICAgICAiWloiOiAiIiwKKyAgICAgICAgICAgICJ8LSZndDsiOiAiIiwKKyAgICAgICAgICAgICJ8LS0iOiAiIiwKKyAgICAgICAgICAgICJ8PT0iOiAiIiwKKyAgICAgICAgICAgICJ8X18iOiAiIiwKKyAgICAgICAgICAgICJ8fiI6ICIiLAorICAgICAgICAgICAgIn49IjogIiIsCisgICAgICAgICAgICAifnwiOiAiIiwKKyAgICAgICAgICAgICJ+fiI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiRmFuY3lTZWxlY3RzIjogeworICAgICAgICAgICAgIicrb3B0LnRleHQrJyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGaW5kUmVwbGFjZSI6IHsKKyAgICAgICAgICAgICInO1xyXG4gIHZhciB0YWdjID0gJyI6ICIiLAorICAgICAgICAgICAgIkNhc2Ugc2Vuc2l0aXZlIHNlYXJjaCI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIjogIiIsCisgICAgICAgICAgICAiRG9uZSI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSB0ZXh0IHlvdSB3YW50IHRvIGZpbmQiOiAiIiwKKyAgICAgICAgICAgICJGaW5kIGFuZCBSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiZm91bmQgaXRlbSI6ICIiLAorICAgICAgICAgICAgImZvdW5kIGl0ZW1zIjogIiIsCisgICAgICAgICAgICAiSGlnaGxpZ2h0IjogIiIsCisgICAgICAgICAgICAiSW5mb3JtIGEgcmVwbGFjZW1lbnQgd29yZCI6ICIiLAorICAgICAgICAgICAgIk5leHQiOiAiIiwKKyAgICAgICAgICAgICJub3QgZm91bmQiOiAiIiwKKyAgICAgICAgICAgICJPcHRpb25zIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSB3aXRoOiI6ICIiLAorICAgICAgICAgICAgInJlcGxhY2VkIGl0ZW0iOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtcyI6ICIiLAorICAgICAgICAgICAgIlNlYXJjaCBmb3I6IjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSBhbGwgb2NjdXJyZW5jZXMiOiAiIiwKKyAgICAgICAgICAgICJTdWJzdGl0dXRlIHRoaXMgb2NjdXJyZW5jZT8iOiAiIiwKKyAgICAgICAgICAgICJVbmRvIjogIiIsCisgICAgICAgICAgICAiV2hvbGUgd29yZHMgb25seSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGb3JtT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJFbnRlciB0aGUgbmFtZSBmb3IgbmV3IG9wdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIGNoZWNrIGJveC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBGb3JtLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG11bHRpLWxpbmUgdGV4dCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSByYWRpbyBidXR0b24uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgc2VsZWN0IGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHN1Ym1pdC9yZXNldCBidXR0b24uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgdGV4dCwgcGFzc3dvcmQgb3IgaGlkZGVuIGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIk1lc3NhZ2UgU2VudCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBTZWxlY3QuLi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybXMiOiB7CisgICAgICAgICAgICAiJ29uQ2xpY2snPSI6ICIiLAorICAgICAgICAgICAgIkFjY2VzcyBLZXk6IjogIiIsCisgICAgICAgICAgICAiQWN0aW9uIFVSTDoiOiAiIiwKKyAgICAgICAgICAgICJCdXR0b24gU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiQ2hlY2tlZCI6ICIiLAorICAgICAgICAgICAgIkNvbHVtbnM6IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCB0ZXh0IChvcHRpb25hbCkiOiAiIiwKKyAgICAgICAgICAgICJEaW1lbnNpb25zIjogIiIsCisgICAgICAgICAgICAiRGlzYWJsZWQiOiAiIiwKKyAgICAgICAgICAgICJFbmNvZGluZzoiOiAiIiwKKyAgICAgICAgICAgICJGb3IgQ29udHJvbDoiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBGSUVMRFNFVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IExBQkVMIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBTRUxFQ1QiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiRm9ybSBoYW5kbGVyIHNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJHZXQiOiAiIiwKKyAgICAgICAgICAgICJIYXJkIjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0IGluIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiSFRNTC1Gb3JtIHRvIENHSSAoZGVmYXVsdCkiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBzb3VyY2UiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBVUkw6IjogIiIsCisgICAgICAgICAgICAiSW5pdGlhbCBUZXh0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiSmF2YXNjcmlwdCBmb3IgYnV0dG9uIGNsaWNrIjogIiIsCisgICAgICAgICAgICAiTGFiZWw6IjogIiIsCisgICAgICAgICAgICAiTGVnZW5kOiI6ICIiLAorICAgICAgICAgICAgIk1heCBsZW5ndGg6IjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY2NlcHRlZCI6ICIiLAorICAgICAgICAgICAgIk1ldGhvZDoiOiAiIiwKKyAgICAgICAgICAgICJtdWx0aXBhcnQgRm9ybSBEYXRhIChGaWxlLVVwbG9hZCkiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gc2VsZWN0IjogIiIsCisgICAgICAgICAgICAibmFtZSBvZiB0aGUgdGV4dGFyZWEiOiAiIiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICIiLAorICAgICAgICAgICAgIm5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIm5vd3JhcCI6ICIiLAorICAgICAgICAgICAgIk9mZiI6ICIiLAorICAgICAgICAgICAgIlBoeXNpY2FsIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIGEgTGFiZWwiOiAiIiwKKyAgICAgICAgICAgICJQb3N0IjogIiIsCisgICAgICAgICAgICAicHJlIjogIiIsCisgICAgICAgICAgICAiUmVhZCBPbmx5IjogIiIsCisgICAgICAgICAgICAiUm93czoiOiAiIiwKKyAgICAgICAgICAgICJTaXplIG9mIHRleHQgYm94IGluIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJTaXplOiI6ICIiLAorICAgICAgICAgICAgIlNvZnQiOiAiIiwKKyAgICAgICAgICAgICJUYWIgSW5kZXg6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IEZyYW1lOiI6ICIiLAorICAgICAgICAgICAgIlRleHQ6IjogIiIsCisgICAgICAgICAgICAiVVJMIG9mIGltYWdlIjogIiIsCisgICAgICAgICAgICAiVmFsdWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZToiOiAiIiwKKyAgICAgICAgICAgICJWaXJ0dWFsIjogIiIsCisgICAgICAgICAgICAiV2lkdGggaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJXcmFwIE1vZGU6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBOYW1lIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IgorICAgICAgICB9LAorICAgICAgICAiRnVsbFBhZ2UiOiB7CisgICAgICAgICAgICAiLi4uIjogIiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIkJhY2tncm91bmQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiQ2hhcmFjdGVyIHNldDoiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoSVNPLTg4NTktNSkiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoS09JOC1SKSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChXSU5ET1dTLTEyNTEpIjogIiIsCisgICAgICAgICAgICAiRGVzY3JpcHRpb246IjogIiIsCisgICAgICAgICAgICAiRE9DVFlQRToiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiRG9jdW1lbnQgdGl0bGU6IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZHM6IjogIiIsCisgICAgICAgICAgICAiUHJpbWFyeSBzdHlsZS1zaGVldDoiOiAiIiwKKyAgICAgICAgICAgICJUZXh0IGNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIlVURi04IChyZWNvbW1lbmRlZCkiOiAiIiwKKyAgICAgICAgICAgICJ3ZXN0ZXJuIChJU08tODg1OS0xKSI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiRnVsbFNjcmVlbiI6IHsKKyAgICAgICAgICAgICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiR2Vja28iOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAgICAgIiYjeDAwZDc7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICIiLAorICAgICAgICAgICAgIkNlbnRlciI6ICIiLAorICAgICAgICAgICAgIkNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBIb3Jpem9udGFsIFJ1bGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvZWRpdCBob3Jpem9udGFsIHJ1bGUiOiAiIiwKKyAgICAgICAgICAgICJMYXlvdXQiOiAiIiwKKyAgICAgICAgICAgICJMZWZ0IjogIiIsCisgICAgICAgICAgICAiTm8gc2hhZGluZyI6ICIiLAorICAgICAgICAgICAgInBlcmNlbnQiOiAiIiwKKyAgICAgICAgICAgICJwaXhlbHMiOiAiIiwKKyAgICAgICAgICAgICJSaWdodCI6ICIiLAorICAgICAgICAgICAgIlN0eWxlIjogIiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICI8PFhpbmhhPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbmxpbmVTdHlsZXIiOiB7CisgICAgICAgICAgICAiQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIiIsCisgICAgICAgICAgICAiQm90dG9tIjogIiIsCisgICAgICAgICAgICAiQ2hhciI6ICIiLAorICAgICAgICAgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIiIsCisgICAgICAgICAgICAiQ1NTIFN0eWxlIjogIiIsCisgICAgICAgICAgICAiRkcgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJGbG9hdCI6ICIiLAorICAgICAgICAgICAgIkp1c3RpZnkiOiAiIiwKKyAgICAgICAgICAgICJNYXJnaW4iOiAiIiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiIiwKKyAgICAgICAgICAgICJOb25lIjogIiIsCisgICAgICAgICAgICAiUGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIlRleHQgYWxpZ24iOiAiIiwKKyAgICAgICAgICAgICJUb3AiOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICIiLAorICAgICAgICAgICAgIi0iOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJDZW50ZXIiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBVUkwiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJMYXlvdXQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAicGVyY2VudCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgInBpeGVscyI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiV2lkdGgiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAgICAgIkFuY2hvciBuYW1lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEFuY2hvciI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydEltYWdlIjogeworICAgICAgICAgICAgIkFic2JvdHRvbSI6ICIiLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICIiLAorICAgICAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIiIsCisgICAgICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiIiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICIiLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiIiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIiIsCisgICAgICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiU3BhY2luZyI6ICIiLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWw6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICIiLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkltYWdlIFVSTDoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJMYXlvdXQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlRvcCI6ICI8PElubGluZVN0eWxlcj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0Tm90ZSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgZm9vdG5vdGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgTm90ZSI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGFnZWJyZWFrIjogeworICAgICAgICAgICAgIlBhZ2UgYnJlYWsiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIEJyZWFrIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNtaWxleSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgU21pbGV5IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICAgICAiXFxuICBUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZ1xcbiI6ICIiLAorICAgICAgICAgICAgIkhpZGUgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMSI6ICIiLAorICAgICAgICAgICAgIkxpbmsyIjogIiIsCisgICAgICAgICAgICAiTGluazMiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNCI6ICIiLAorICAgICAgICAgICAgIkxpbms1IjogIiIsCisgICAgICAgICAgICAiU2hvdyBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmciOiAiIiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldDIiOiB7CisgICAgICAgICAgICAiQWxsIENhdGVnb3JpZXMiOiAiIiwKKyAgICAgICAgICAgICJGaWx0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMgSFRNTCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyB0ZW1wbGF0ZSB2YXJpYWJsZSI6ICIiLAorICAgICAgICAgICAgIk9ubHkgc2VhcmNoIHdvcmQgYmVnaW5uaW5nIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkhUTUwiOiAiPDxDaGFyQ291bnRlcj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgU25pcHBldCI6ICI8PEluc2VydFNuaXBwZXQ+PiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIlZhcmlhYmxlIjogIjw8SW5zZXJ0U25pcHBldD4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0VGFibGUiOiB7CisgICAgICAgICAgICAiQ2FwdGlvbiI6ICIiLAorICAgICAgICAgICAgIkNhcHRpb24gZm9yIHRoZSB0YWJsZSI6ICIiLAorICAgICAgICAgICAgIkNlbGwgcGFkZGluZzoiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIHNwYWNpbmc6IjogIiIsCisgICAgICAgICAgICAiQ29sbGFwc2UgYm9yZGVyczoiOiAiIiwKKyAgICAgICAgICAgICJDb2xzOiI6ICIiLAorICAgICAgICAgICAgIkVtIjogIiIsCisgICAgICAgICAgICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIkxheW91IjogIiIsCisgICAgICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJOdW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIiIsCisgICAgICAgICAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICIiLAorICAgICAgICAgICAgIlN0eWxlIG9mIHRoZSBib3JkZXIiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aCB1bml0IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgVGFibGUiOiAiPDxYaW5oYT4+IiwKKyAgICAgICAgICAgICJMYXlvdXQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiUGVyY2VudCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlBpeGVscyI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUm93czoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTcGFjaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRvcCI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiTGFuZ01hcmtzIjogeworICAgICAgICAgICAgIiZtZGFzaDsgbGFuZ3VhZ2UgJm1kYXNoOyI6ICIiLAorICAgICAgICAgICAgIicsICciOiAiIiwKKyAgICAgICAgICAgICJFbmdsaXNoIjogIiIsCisgICAgICAgICAgICAiRnJlbmNoIjogIiIsCisgICAgICAgICAgICAiR3JlZWsiOiAiIiwKKyAgICAgICAgICAgICJsYW5ndWFnZSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJMYXRpbiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJMaW5rZXIiOiB7CisgICAgICAgICAgICAiKHB4KSI6ICIiLAorICAgICAgICAgICAgIkFuY2hvci1MaW5rIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIEFkZHJlc3M6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgTGluayI6ICIiLAorICAgICAgICAgICAgIkxvY2F0aW9uIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZW51IEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFRlbXBsYXRlOiI6ICIiLAorICAgICAgICAgICAgIk5ldyBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcmRpbmFyeSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUG9wdXAgV2luZG93IjogIiIsCisgICAgICAgICAgICAiUG9wdXBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgTGluayI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZWFibGU6IjogIiIsCisgICAgICAgICAgICAiU2FtZSBXaW5kb3cgKGp1bXAgb3V0IG9mIGZyYW1lcykiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGxiYXJzOiI6ICIiLAorICAgICAgICAgICAgIlNob3dzIE9uIEhvdmVyIjogIiIsCisgICAgICAgICAgICAiU3RhdHVzIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJTdWJqZWN0OiI6ICIiLAorICAgICAgICAgICAgIlRpdGxlOiI6ICIiLAorICAgICAgICAgICAgIlRvb2xiYXI6IjogIiIsCisgICAgICAgICAgICAiVVJMIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiIiwKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIk5hbWU6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiU2l6ZToiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJUYXJnZXQ6IjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJVUkw6IjogIjw8Q3JlYXRlTGluaz4+IgorICAgICAgICB9LAorICAgICAgICAiTGlzdFR5cGUiOiB7CisgICAgICAgICAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogIiIsCisgICAgICAgICAgICAiRGVjaW1hbCBudW1iZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgZ3JlZWsgbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIGxhdGluIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciByb21hbiBudW1iZXJzIjogIiIsCisgICAgICAgICAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIlVwcGVyIHJvbWFuIG51bWJlcnMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiTW9vdG9vbHNGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJPcGVyYSI6IHsKKyAgICAgICAgICAgICJNQVJLIjogIiIsCisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQYXN0ZVRleHQiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IHRleHQgaW4gbmV3IHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIlBhc3RlIGFzIFBsYWluIFRleHQiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlByZXNlcnZlU2NyaXB0cyI6IHsKKyAgICAgICAgICAgICJKYXZhU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiUEhQIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlF1aWNrVGFnIjogeworICAgICAgICAgICAgIicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbCc6ICciOiAiIiwKKyAgICAgICAgICAgICJBVFRSSUJVVEVTIjogIiIsCisgICAgICAgICAgICAiQ29sb3JzIjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIFRBRyB5b3Ugd2FudCB0byBpbnNlcnQiOiAiIiwKKyAgICAgICAgICAgICJObyBDU1MgY2xhc3MgYXZhaWFibGUiOiAiIiwKKyAgICAgICAgICAgICJPayI6ICIiLAorICAgICAgICAgICAgIk9QVElPTlMiOiAiIiwKKyAgICAgICAgICAgICJRdWljayBUYWcgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiVEFHcyI6ICIiLAorICAgICAgICAgICAgIlRoZXJlIGFyZSBzb21lIHVuY2xvc2VkIHF1b3RlIjogIiIsCisgICAgICAgICAgICAiVGhpcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIFRBRyI6ICIiLAorICAgICAgICAgICAgIllvdSBoYXZlIHRvIHNlbGVjdCBzb21lIHRleHQiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNhdmVTdWJtaXQiOiB7CisgICAgICAgICAgICAiaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAgICAgICAgICJSZWFkeSI6ICIiLAorICAgICAgICAgICAgIlNhdmUiOiAiIiwKKyAgICAgICAgICAgICJTYXZpbmcuLi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiU2V0SWQiOiB7CisgICAgICAgICAgICAiSUQvTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQgYW5kIE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQvTmFtZSI6ICIiLAorICAgICAgICAgICAgIlNldCBJRC9OYW1lIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiU21hcnRSZXBsYWNlIjogeworICAgICAgICAgICAgIkNsb3NpbmdEb3VibGVRdW90ZXMiOiAiIiwKKyAgICAgICAgICAgICJDbG9zaW5nU2luZ2xlUXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJDb252ZXJ0IGFsbCBxdW90ZXMgYW5kIGRhc2hlcyBpbiB0aGUgY3VycmVudCBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBhdXRvbWF0aWMgcmVwbGFjZW1lbnRzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIk9wZW5pbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIlNtYXJ0UmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgIlNtYXJ0UmVwbGFjZSBTZXR0aW5ncyI6ICIiLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJTdHlsaXN0IjogeworICAgICAgICAgICAgIlN0eWxlcyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAgICAgIkNsZWFuIGJhZCBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQuIjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gU2VsZWN0aW9uIE9ubHkiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiB1cCBIVE1MIjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgU2NvcGUiOiAiIiwKKyAgICAgICAgICAgICJHZW5lcmFsIHRpZHkgdXAgYW5kIGNvcnJlY3Rpb24gb2Ygc29tZSBwcm9ibGVtcy4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc2VsZWN0IGZyb20gdGhlIGZvbGxvd2luZyBjbGVhbmluZyBvcHRpb25zLi4uIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHN0YW5kIGJ5IHdoaWxlIGNsZWFuaW5nIGluIHByb2Nlc3MuLi4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxpZ25tZW50IChsZWZ0L3JpZ2h0L2p1c3RpZnkpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgY2xhc3NlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgQWxsIEhUTUwgVGFncyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgc3R5bGVzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gZm9udCBzaXplcy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIHRleHQgY29sb3JzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdHlwZWZhY2VzIChmb250IFwic3R5bGVzXCIpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBlbXBoYXNpcyBhbmQgYW5ub3RhdGlvbnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGxhbmcgYXR0cmlidXRlcy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgUGFyYWdyYXBocyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMuIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSBkaXJlY3Rpb25hbCBxdW90ZSBtYXJrcyB3aXRoIG5vbi1kaXJlY3Rpb25hbCBxdW90ZSBtYXJrcy4iOiAiIiwKKyAgICAgICAgICAgICJWaWdvcm91c2x5IHB1cmdlIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlRhYmxlT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJBbGwgZm91ciBzaWRlcyI6ICIiLAorICAgICAgICAgICAgIkJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIFByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIFR5cGU6IjogIiIsCisgICAgICAgICAgICAiQ2VsbHMgZG93biI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIHRvIHRoZSByaWdodCwgYW5kIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgY29sdW1uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIHJvdyI6ICIiLAorICAgICAgICAgICAgIkRvIE5vdCBDaGFuZ2UiOiAiIiwKKyAgICAgICAgICAgICJGcmFtZSBhbmQgYm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkZyYW1lcyI6ICIiLAorICAgICAgICAgICAgIkhlYWRlciAodGgpIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNlbGwgYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY2VsbCBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY29sdW1uIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcm93IGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHJvdyBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBjZWxscyI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIGN1cnJlbnQgY2VsbCB3aXRoOiI6ICIiLAorICAgICAgICAgICAgIk5vIHJ1bGVzIjogIiIsCisgICAgICAgICAgICAiTm8gc2lkZXMiOiAiIiwKKyAgICAgICAgICAgICJOb3JtYWwgKHRkKSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjbGljayBpbnRvIHNvbWUgY2VsbCI6ICIiLAorICAgICAgICAgICAgIlJvdyBQcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiUm93IHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGFsbCByb3dzIGFuZCBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBjb2x1bW5zIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIHJvd3Mgb25seSI6ICIiLAorICAgICAgICAgICAgIlNwYWNpbmcgYW5kIHBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJTcGxpdCBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJTcGxpdCByb3ciOiAiIiwKKyAgICAgICAgICAgICJTdW1tYXJ5IjogIiIsCisgICAgICAgICAgICAiVGFibGUgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlRhYmxlIFByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJUaGUgYm90dG9tIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHJpZ2h0IGFuZCBsZWZ0IHNpZGVzIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgcmlnaHQtaGFuZCBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSB0b3Agc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY2VsbCBpbiByb3cuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiQ2FwdGlvbiI6ICI8PEluc2VydFRhYmxlPj4iLAorICAgICAgICAgICAgIkNvbHVtbnMiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJEZXNjcmlwdGlvbiI6ICI8PEZ1bGxQYWdlPj4iLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiUGFkZGluZyI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJwaXhlbHMiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSb3dzIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiU3BhY2luZyI6ICI8PEluc2VydEltYWdlPj4iCisgICAgICAgIH0sCisgICAgICAgICJVbnNhdmVkQ2hhbmdlcyI6IHsKKyAgICAgICAgICAgICJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhlIGVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJXZWJLaXQiOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIjw8R2Vja28+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlhpbmhhIjogeworICAgICAgICAgICAgIiYjODIxMjsgZm9udCAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIiYjODIxMjsgc2l6ZSAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiMSAoOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIyICgxMCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIzICgxMiBwdCkiOiAiIiwKKyAgICAgICAgICAgICI0ICgxNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI1ICgxOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI2ICgyNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI3ICgzNiBwdCkiOiAiIiwKKyAgICAgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkFkZHJlc3MiOiAiIiwKKyAgICAgICAgICAgICJBcmlhbCI6ICIiLAorICAgICAgICAgICAgIkJhY2tncm91bmQgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJCb2xkIjogIiIsCisgICAgICAgICAgICAiQnVsbGV0ZWQgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICIiLAorICAgICAgICAgICAgIkNsb3NlIjogIiIsCisgICAgICAgICAgICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICIiLAorICAgICAgICAgICAgIkNvcHkgc2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiQ291cmllciBOZXciOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgU3RhdHVzYmFyIjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFRvb2xiYXIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTAgKHplcm8pIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0xIC4uIENUUkwtNiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtRSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtVSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtViI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWiI6ICIiLAorICAgICAgICAgICAgIkN1cnJlbnQgc3R5bGUiOiAiIiwKKyAgICAgICAgICAgICJDdXQgc2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiRGVjcmVhc2UgSW5kZW50IjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICIiLAorICAgICAgICAgICAgIkVkaXRvciBIZWxwIjogIiIsCisgICAgICAgICAgICAiRU5URVIiOiAiIiwKKyAgICAgICAgICAgICJFcnJvciBMb2FkaW5nIFhpbmhhLiAgRGV2ZWxvcGVycywgY2hlY2sgdGhlIEVycm9yIENvbnNvbGUgZm9yIGluZm9ybWF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGluZyI6ICIiLAorICAgICAgICAgICAgIkZvbnQgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0ZWQiOiAiIiwKKyAgICAgICAgICAgICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiIiwKKyAgICAgICAgICAgICJHZW9yZ2lhIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAxIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAyIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAzIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA0IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA1IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA2IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJIZWxwIHVzaW5nIGVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICIiLAorICAgICAgICAgICAgIkltcGFjdCI6ICIiLAorICAgICAgICAgICAgIkluY3JlYXNlIEluZGVudCI6ICIiLAorICAgICAgICAgICAgIkluaXQgZWRpdG9yIHNpemUiOiAiIiwKKyAgICAgICAgICAgICJpbnNlcnQgbGluZWJyZWFrIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IFdlYiBMaW5rIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9PdmVyd3JpdGUiOiAiIiwKKyAgICAgICAgICAgICJJdGFsaWMiOiAiIiwKKyAgICAgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICIiLAorICAgICAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICIiLAorICAgICAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICIiLAorICAgICAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiIiwKKyAgICAgICAgICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIENvcmUiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW5zIjogIiIsCisgICAgICAgICAgICAiTVMgV29yZCBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAibmV3IHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIk9yZGVyZWQgTGlzdCI6ICIiLAorICAgICAgICAgICAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIiIsCisgICAgICAgICAgICAiUGF0aCI6ICIiLAorICAgICAgICAgICAgIlByaW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJSZWdpc3RlciBwbHVnaW4gJHBsdWdpbiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBhcyI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCBhbGwiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIlNISUZULUVOVEVSIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgQmxvY2siOiAiIiwKKyAgICAgICAgICAgICJTdHJpa2V0aHJvdWdoIjogIiIsCisgICAgICAgICAgICAiU3Vic2NyaXB0IjogIiIsCisgICAgICAgICAgICAiU3VwZXJzY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJUYWhvbWEiOiAiIiwKKyAgICAgICAgICAgICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAiIiwKKyAgICAgICAgICAgICJUaW1lcyBOZXcgUm9tYW4iOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgQm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICIiLAorICAgICAgICAgICAgIlRvdWNoIGhlcmUgZmlyc3QgdG8gYWN0aXZhdGUgZWRpdG9yLiI6ICIiLAorICAgICAgICAgICAgIlVuZGVybGluZSI6ICIiLAorICAgICAgICAgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIiIsCisgICAgICAgICAgICAiVmVyZGFuYSI6ICIiLAorICAgICAgICAgICAgIldhaXRpbmcgZm9yIElmcmFtZSB0byBsb2FkLi4uIjogIiIsCisgICAgICAgICAgICAiV2luZ0RpbmdzIjogIiIsCisgICAgICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIiIsCisgICAgICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogIiIsCisgICAgICAgICAgICAiWGluaGEiOiAiIiwKKyAgICAgICAgICAgICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogQkFDS0dST1VORElNQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIlJlbW92ZSBDdXJyZW50IEJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJTZXQgQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIlNldCBwYWdlIGJhY2tncm91bmQgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJTZXQgUGFnZSBCYWNrZ3JvdW5kIEltYWdlIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJDbGllbnRzaWRlU3BlbGxjaGVjayI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIENMSUVOVFNJREVTUEVMTENIRUNLIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrIHVzaW5nIGllU3BlbGwiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTAlIjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICIiLAorICAgICAgICAgICAgIjIwMCUiOiAiIiwKKyAgICAgICAgICAgICIyNSUiOiAiIiwKKyAgICAgICAgICAgICI1MCUiOiAiIiwKKyAgICAgICAgICAgICI3NSUiOiAiIiwKKyAgICAgICAgICAgICI+TGlzdCBWaWV3IjogIiIsCisgICAgICAgICAgICAiPlRodW1ibmFpbCBWaWV3IjogIiIsCisgICAgICAgICAgICAiQToiOiAiIiwKKyAgICAgICAgICAgICJBbGlnbiI6ICIiLAorICAgICAgICAgICAgIkFsdCI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciBDb2xvciI6ICIiLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkNyb3AiOiAiIiwKKyAgICAgICAgICAgICJEOiI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICIiLAorICAgICAgICAgICAgIkVkaXQiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiIiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiIiwKKyAgICAgICAgICAgICJGaWxlc2l6ZToiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIEhvcml6b250YWwiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIEltYWdlIjogIiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciI6ICIiLAorICAgICAgICAgICAgIkdJRiI6ICIiLAorICAgICAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICIiLAorICAgICAgICAgICAgIkg6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiIiwKKyAgICAgICAgICAgICJKUEVHIEhpZ2giOiAiIiwKKyAgICAgICAgICAgICJKUEVHIExvdyI6ICIiLAorICAgICAgICAgICAgIkpQRUcgTWVkaXVtIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyI6ICIiLAorICAgICAgICAgICAgIkxvY2siOiAiIiwKKyAgICAgICAgICAgICJNYXJrZXIiOiAiIiwKKyAgICAgICAgICAgICJNYXhpbXVtIGZvbGRlciBzaXplIGxpbWl0IHJlYWNoZWQuIFVwbG9hZCBkaXNhYmxlZC4iOiAiIiwKKyAgICAgICAgICAgICJNZWFzdXJlIjogIiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICIiLAorICAgICAgICAgICAgIk5vIEZpbGVzIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHZhbHVlIjogIiIsCisgICAgICAgICAgICAiUE5HIjogIiIsCisgICAgICAgICAgICAiUHJlc2V0IjogIiIsCisgICAgICAgICAgICAiUXVhbGl0eToiOiAiIiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIiIsCisgICAgICAgICAgICAiUmVuYW1lIjogIiIsCisgICAgICAgICAgICAiUmVzaXplIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJTdGFydCBYOiI6ICIiLAorICAgICAgICAgICAgIlN0YXJ0IFk6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlRvZ2dsZSBtYXJrZXIgY29sb3IiOiAiIiwKKyAgICAgICAgICAgICJUcmFzaCI6ICIiLAorICAgICAgICAgICAgIlVwbG9hZCI6ICIiLAorICAgICAgICAgICAgIlc6IjogIiIsCisgICAgICAgICAgICAiWDoiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJZOiI6ICIiLAorICAgICAgICAgICAgIlpvb20iOiAiIiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3JkZXIiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJDbGVhciI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIkNvbG9yIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiQ29weSI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkN1dCI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkhlaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIjw8TW9vdG9vbHNGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTWFyZ2luIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiUGFkZGluZyI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVGl0bGUgKHRvb2x0aXApIjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJUb3AiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiV2lkdGgiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbHRlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEZJTFRFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWx0ZXIiOiAiPDxJbnNlcnRTbmlwcGV0Mj4+IgorICAgICAgICB9LAorICAgICAgICAiSHRtbFRpZHkiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBdXRvLVRpZHkiOiAiIiwKKyAgICAgICAgICAgICJEb24ndCBUaWR5IjogIiIsCisgICAgICAgICAgICAiSFRNTCBUaWR5IjogIiIsCisgICAgICAgICAgICAiVGlkeSBmYWlsZWQuICBDaGVjayB5b3VyIEhUTUwgZm9yIHN5bnRheCBlcnJvcnMuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkltYWdlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElNQUdFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbmdsZToiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgUGljdHVyZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmVzIjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBVc2VybmFtZS9FbWFpbCI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciBOYW1lOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIEZvcm1hdCI6ICIiLAorICAgICAgICAgICAgIkltYWdlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkIjogIiIsCisgICAgICAgICAgICAiTm8gSW1hZ2VzIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gUGhvdG9zIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gVmlkZW9zIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiVGhpcyBTZXJ2ZXIiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVXNlcm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFZpZGVvIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFZpZGVvcyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkNsZWFyIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJDcm9wIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkVkaXQiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGVuYW1lOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIEltYWdlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgSGlnaCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgTWVkaXVtIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTG9jayI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWFya2VyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJNZWFzdXJlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiUE5HIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUXVhbGl0eToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJlZnJlc2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJlc2l6ZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSb3RhdGUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIEltYWdlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJTdGFydCBYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU3RhcnQgWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUb3AiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiVHJhc2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlc6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUTUFSUVVFRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUiOiAiIiwKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kLUNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkJlaGF2aW9yOiI6ICIiLAorICAgICAgICAgICAgIkNvbnRpbnVvdXMiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3Rpb246IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHNjcm9sbGluZyBtYXJxdWVlIjogIiIsCisgICAgICAgICAgICAiTWFycXVlZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgQW1vdW50OiI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbCBEZWxheToiOiAiIiwKKyAgICAgICAgICAgICJTbGlkZSI6ICIiLAorICAgICAgICAgICAgIlNwZWVkIENvbnRyb2wiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJOYW1lIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlRleHQ6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBub3QgZGVmaW5lZCI6ICIiLAorICAgICAgICAgICAgIiBPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIk9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiVXBsb2FkIGZpbGUiOiAiIiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkhvcml6b250YWw6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBVUkw6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJTaXplIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiU3BhY2luZyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUb3AiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlZlcnRpY2FsOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIldpZHRoOiI6ICI8PEhvcml6b250YWxSdWxlPj4iCisgICAgICAgIH0sCisgICAgICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIxMjAlIjogIiIsCisgICAgICAgICAgICAiMTUwJSI6ICIiLAorICAgICAgICAgICAgIjgwJSI6ICIiLAorICAgICAgICAgICAgIkFkZCBHVUlETyBDb2RlIGluIGEgdGV4dGJveCBvbiB0aGUgcGFnZSI6ICIiLAorICAgICAgICAgICAgIkFkZCBNSURJIGxpbmsgdG8gYWxsb3cgc3R1ZGVudHMgdG8gaGVhciB0aGUgbXVzaWMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJHVUlETyBDb2RlIjogIiIsCisgICAgICAgICAgICAiR3VpZG8gY29kZSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIGluIGFwcGxldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBHVUlETyBNdXNpYyBOb3RhdGlvbiI6ICIiLAorICAgICAgICAgICAgIk1JREkgRmlsZSI6ICIiLAorICAgICAgICAgICAgIlNvdXJjZSBDb2RlIjogIiIsCisgICAgICAgICAgICAiV2l0aCBNb3ppbGxhLCB0aGUgYXBwbGV0IHdpbGwgbm90IGJlIHZpc2libGUgaW4gZWRpdG9yLCBidXQgb25seSBpbiBXZWIgcGFnZSBhZnRlciBzdWJtaXR0aW5nLiI6ICIiLAorICAgICAgICAgICAgIlpvb20gOiI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBQcmV2aWV3IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJab29tIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBHZWFycyBpbiBvcmRlciB0byB1c2UgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZSBhbmQgY29uZmlndXJhdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGluZyBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiSW5zdGFsbCI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIEFib3V0IExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgcmVsb2FkIHRoZSBwYWdlLCBjYXVzaW5nIHlvdSB0byBsb3NlIGFueSB1bnNhdmVkIHdvcmsuICBQcmVzcyBcIk9LXCIgdG8gcmVsb2FkLiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIHVzZXMgR29vZ2xlIEdlYXJzIHRvIGVuYWJsZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlLiAgV2l0aCBHZWFycyBpbnN0YWxsZWQsIHlvdSBjYW4gc2F2ZSBkcmFmdHMgb2YgeW91ciBkb2N1bWVudHMgb24geW91ciBoYXJkIGRyaXZlLCBjb25maWd1cmUgWGluaGEgdG8gbG9vayB0aGUgd2F5IHlvdSB3YW50LCBhbmQgY2FycnkgdGhpcyBpbmZvcm1hdGlvbiB3aGVyZXZlciB5b3UgdXNlIFhpbmhhIG9uIHRoZSB3ZWIuIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJQU1NlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbGU6ICI6ICIiLAorICAgICAgICAgICAgIkltcG9ydCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQZXJzaXN0ZW50U3RvcmFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkRldGFpbHMiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIEJyb3dzZXIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgICBUaGVyZSBDICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICBUaGVyZSBBICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvIFwiIFRoZXJlIEIgXCIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAnIFRoZXJlIEQgJyI6ICIiLAorICAgICAgICAgICAgIkxpc3Qgb2YgUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiTmV3IERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiT3BlbiI6ICIiLAorICAgICAgICAgICAgIk9wZW4gRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB5b3UnZCBsaWtlIHRvIGNyZWF0ZS4iOiAiIiwKKyAgICAgICAgICAgICJTYXZlIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGVyYXNlIGFueSB1bnNhdmVkIGNvbnRlbnQuICBJZiB5b3UncmUgY2VydGFpbiwgcGxlYXNlIGNsaWNrIE9LIHRvIGNvbnRpbnVlLiI6ICIiLAorICAgICAgICAgICAgIldlYiBVUkwiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICI8PFBTTG9jYWw+PiIsCisgICAgICAgICAgICAiQ29weSI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlbmFtZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IjogIjw8SW5zZXJ0Tm90ZT4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJOZXcgRm9sZGVyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEaWN0aW9uYXJ5IjogIiIsCisgICAgICAgICAgICAiRmluaXNoZWQgbGlzdCBvZiBtaXNwZWxsZWQgd29yZHMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MQXJlYSBTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiSSB3aWxsIG9wZW4gaXQgaW4gYSBuZXcgcGFnZS4iOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUiOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUgYWxsIjogIiIsCisgICAgICAgICAgICAiSW5mbyI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIjogIiIsCisgICAgICAgICAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIiIsCisgICAgICAgICAgICAiT3JpZ2luYWwgd29yZCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gb3BlbiB0aGlzIGxpbmsiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdDogY2hhbmdpbmcgZGljdGlvbmFyeSB0byI6ICIiLAorICAgICAgICAgICAgInBsaXogd2VpdCA7LSkiOiAiIiwKKyAgICAgICAgICAgICJSZS1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGFsbCI6ICIiLAorICAgICAgICAgICAgIlJldmVydCI6ICIiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrZXIiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbC1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlN1Z2dlc3Rpb25zIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIlJlcGxhY2Ugd2l0aCI6ICI8PEZpbmRSZXBsYWNlPj4iCisgICAgICAgIH0sCisgICAgICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFRFTVBMQVRFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkluc2VydCB0ZW1wbGF0ZSI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiVW5Gb3JtYXQiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBVTkZPUk1BVCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbGwiOiAiIiwKKyAgICAgICAgICAgICJBbGwgSFRNTDoiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBBcmVhIjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgb3B0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdHRpbmc6IjogIiIsCisgICAgICAgICAgICAiUGFnZSBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IHdoaWNoIHR5cGVzIG9mIGZvcm1hdHRpbmcgeW91IHdvdWxkIGxpa2UgdG8gcmVtb3ZlLiI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2hlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvaGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlmMDBlMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2hlLmpzCkBAIC0wLDAgKzEsMTU3NyBAQAorLy8gWGluaGEgTGFuZ3VhZ2UgQ29tYmluZWQgVHJhbnNsYXRpb24gRmlsZQorLy8KKy8vIExBTkc6ICJoZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElOU1RSVUNUSU9OUyBUTyBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gWW91ciB0cmFuc2xhdGlvbiBtdXN0IGJlIGluIFVURi04IENoYXJhY3RlciBFbmNvZGluZy4KKy8vCisvLyBUaGlzIGlzIGEgSlNPTiBlbmNvZGVkIGZpbGUgKHBsdXMgY29tbWVudHMpLCBzdHJpbmdzIHNob3VsZCBiZSBkb3VibGUtcXVvdGUKKy8vIG9ubHksIGRvIG5vdCB1c2Ugc2luZ2xlIHF1b3RlcyB0byBzdXJyb3VuZCBzdHJpbmdzIC0gImhlbGxvIiwgbm90ICdoZWxsbycKKy8vIGRvIG5vdCBoYXZlIGEgdHJhaWxpbmcgY29tbWEgYWZ0ZXIgdGhlIGxhc3QgZW50cnkgaW4gYSBzZWN0aW9uLgorLy8KKy8vIE9ubHkgZnVsbCBsaW5lIGNvbW1lbnRzIGFyZSBhbGxvd2VkICh0aGF0IGEgY29tbWVudHMgb2NjdXB5IGVudGlyZSBsaW5lcykuCisvLworLy8gU2VhcmNoIGZvciB0aGUgX19ORVdfVFJBTlNMQVRJT05TX18gc2VjdGlvbiBiZWxvdywgdGhpcyBpcyB3aGVyZSB5b3Ugd2lsbAorLy8gd2FudCB0byBmb2N1cywgdGhpcyBzZWN0aW9uIGluY2x1ZGVzIHRoaW5ncyB0aGF0IGRvIG5vdCBwcmVzZW50bHkgaGF2ZSBhIAorLy8gdHJhbnNsYXRpb24gb3IgZm9yIHdoaWNoIHRoZSB0cmFuc2xhdGlvbiBuZWVkcyB0byBiZSBjaGVja2VkIGZvciBhY2N1cmFjeS4KKy8vCisvLyBJbiB0aGUgTmV3IFRyYW5zbGF0aW9ucyBzZWN0aW9uIGEgdHJhbnNsYXRpb24gc3RyaW5nIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICIiCisvLyAgICAgVGhpcyBtZWFucyBpdCBpcyBub3QgdHJhbnNsYXRlZCB5ZXQsIGFkZCB5b3VyIHRyYW5zbGF0aW9uLi4uCisvLyAgICAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIktsaW5nb24gU3RyaW5nIEhlcmUiCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJUcmFuc2xhdGVkIFN0cmluZyBIZXJlIgorLy8gICAgIFRoaXMgbWVhbnMgdGhhdCBhbiBleGlzdGluZyB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcsIGluIHNvbWUgb3RoZXIKKy8vICAgICBzZWN0aW9uIGhhcyBiZWVuIGZvdW5kLCBhbmQgdXNlZC4gIENoZWNrIHRoYXQgaXQgaXMgYXBwcm9wcml0ZSBmb3IgdGhpcworLy8gICAgIHNlY3Rpb24gYW5kIGlmIGl0IGlzLCB0aGF0J3MgZmluZSBsZWF2ZSBpdCBhcyBpcywgb3RoZXJ3aXNlIGNoYW5nZSBhcworLy8gICAgIGFwcHJvcHJpYXRlLgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiPDxBbm90aGVyU2VjdGlvbj4+IgorLy8gICAgIFRoaXMgbWVhbnMgdXNlIHRoZSBzYW1lIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZyBhcyA8PEFub3RoZXJTZWN0aW9uPj4KKy8vICAgICB0aGlzIHNhdmVzIHlvdSByZS10cmFubGF0aW5nIHN0cmluZ3MuICBJZiB0aGUgQ29udGV4dCBvZiB0aGlzIHNlY3Rpb24KKy8vICAgICBhbmQgdGhlIGNvbnRleHQgb2YgQW5vdGhlclNlY3Rpb24gc2VlbSB0aGUgc2FtZSwgdGhhdCdzIGZpbmUgbGVhdmUgaXQKKy8vICAgICB1c2luZyB0aGF0IHRyYW5zbGF0aW9uLCBidXQgaWYgdGhpcyBzZWN0aW9uIG5lZWRzIGEgZGlmZmVyZW50IHRyYW5zbGF0aW9uLCAKKy8vICAgICB5b3UgY2FuIHByb3ZpZGUgaXQgYnkgcmVwbGFjaW5nIHRoZSBsaW5rICg8PEFub3RoZXJTZWN0aW9uPj4pIHdpdGggdGhhdAorLy8gICAgIG5ldyB0cmFuc2xhdGlvbi4gIEZvciBleGFtcGxlIC0gYSAiVGFibGUiIGluIHNheSAiRGF0YVBsdWdpbiIgaXMgCisvLyAgICAgcGVyaGFwcyB0cmFuc2xhdGVkIGRpZmZlcmVudGx5IHRvICJUYWJsZSIgaW4gIkZ1cm5pdHVyZVBsdWdpbiIuCisvLworLy8gVEVTVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBwbGFjZSB5b3VyIHRyYW5zbGF0aW9uIGZpbGUgb24geW91ciB3ZWJzZXJ2ZXIgc29tZXdoZXJlIGZvciBleGFtcGxlCisvLworLy8gICAveGluaGEvbGFuZy9tZXJnZWQvaGUuanMKKy8vCisvLyBhbmQgdGhlbiB0ZWxsIFhpbmhhIHdoZXJlIHRvIGdldCBpdCAoYmVmb3JlIGxvYWRpbmcgWGluaGFDb3JlLmpzKSBieSAKKy8vCisvLyAgX2VkaXRvcl9sYW5nICAgICAgICAgICAgICA9ICdoZSc7CisvLyAgX2VkaXRvcl9sYW5nX21lcmdlZF9maWxlICA9ICcveGluaGEvbGFuZy9tZXJnZWQvaGUuanMnOworLy8KKy8vIFhpbmhhIHdpbGwgbG9hZCB5b3VyIG5ldyBsYW5ndWFnZSBkZWZpbml0aW9uLgorLy8KKy8vIFNVQk1JVFRJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgY3JlYXRlIGEgVGlja2V0IG9uIHRoZSBYaW5oYSB3ZWJzaXRlIGFuZCBhdHRhY2ggeW91ciB0cmFuc2xhdGlvbiAKKy8vIGZpbGUuCisvLworLy8gVGhlIFhpbmhhIGRldmVsb3BlcnMgd2lsbCB0YWtlIHlvdXIgZmlsZSBhbmQgdXNlIHRoZSAKKy8vICAgICBjb250cmliL2xjX3NwbGl0X21lcmdlZF9maWxlLnBocAorLy8gc2NyaXB0IHRvIGxvYWQgaXQgaW50byB0aGUgWGluaGEgZGlzdHJpYnV0aW9uLgorCit7CisgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKKyAgICAgICAgIk9LIjogIteQ15nXqdeV16giCisgICAgfSwKKyAgICAiQWJvdXRCb3giOiB7CisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICLXkNeV15PXldeqINei15XXqNeaINeW15QiCisgICAgfSwKKyAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIteR15nXmNeV15wiCisgICAgfSwKKyAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICJDb2xvcjogIjogItem15HXoiIsCisgICAgICAgICJPSyI6ICLXkNeZ16nXldeoIgorICAgIH0sCisgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAiQ19lbGwgUHJvcGVydGllcy4uLiI6ICLXnteQ16TXmdeZ16DXmSDXql/XkC4uLiIsCisgICAgICAgICJDaGVjX2sgTGluay4uLiI6ICLXkdeT15Vf16cg16fXmdep15XXqC4uLiIsCisgICAgICAgICJDb3B5IjogIteU16LXqtenIiwKKyAgICAgICAgIkNyZWF0ZSBhIGxpbmsiOiAi15nXpteZ16jXqiDXp9eZ16nXldeoIiwKKyAgICAgICAgIkN1cnJlbnQgVVJMIGlzIjogIlVSTCDXoNeV15vXl9eZINeU15XXkCIsCisgICAgICAgICJDdXQiOiAi15LXlteV16giLAorICAgICAgICAiRGVfbGV0ZSBDb2x1bW4iOiAi157Xl1/XpyDXmNeV16giLAorICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IGNvbHVtbiI6ICLXnteX15nXp9eqINeQ16og15TXmNeV16gg15TXoNeV15vXl9eZIiwKKyAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCByb3ciOiAi157Xl9eZ16fXqiDXkNeqINeU16nXldeo15Qg15TXoNeV15vXl9eZ16oiLAorICAgICAgICAiSG93IGRpZCB5b3UgZ2V0IGhlcmU/IChQbGVhc2UgcmVwb3J0ISkiOiAi15DXmdeaINeU15LXoteqINeU16DXlD8gKNeQ16DXkCDXk9eV15XXlyEpIiwKKyAgICAgICAgIklfbnNlcnQgUm93IEJlZm9yZSI6ICLXlF/Xm9eg16Eg16nXldeo15Qg15zXpNeg15kiLAorICAgICAgICAiSW5fc2VydCBSb3cgQWZ0ZXIiOiAi15TXm9egX9ehINep15XXqNeUINeQ15fXqNeZIiwKKyAgICAgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIteU15vXoNehINeYX9eV16gg15DXl9eo15kiLAorICAgICAgICAiSW5zZXJ0IF9Db2x1bW4gQmVmb3JlIjogIteU15vXoNehIF/XmNeV16gg15zXpNeg15kiLAorICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAi15TXldeh16TXqiDXmNeV16gg15fXk9epINeQ15fXqNeZINeU16DXldeb15fXmSIsCisgICAgICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAi15TXldeh16TXqiDXmNeV16gg15fXk9epINec16TXoNeZINeU16DXldeb15fXmSIsCisgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICLXlNeV16HXpNeqINep15XXqNeUINeX15PXqdeUINeQ15fXqNeZINeU16DXldeb15fXmdeqIiwKKyAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICLXlNeV16HXpNeqINep15XXqNeUINeX15PXqdeUINec16TXoNeZINeU16DXldeb15fXmdeqIiwKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogIteZ16nXldeoINec157XqNeb15YiLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIteZ16nXldeoINec16nXldeo15Qg157XnNeQ15QiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIteZ16nXldeoINec16nXnteQ15wiLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICLXmdep15XXqCDXnNeZ157XmdefIiwKKyAgICAgICAgIkxpbmsgcG9pbnRzIHRvOiI6ICLXlNen15nXqdeV16gg157XpteR15nXoiDXkNecOiIsCisgICAgICAgICJNYWtlIGxpbl9rLi4uIjogItem15XXqCDXp9eZX9ep15XXqC4uLiIsCisgICAgICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogItek16rXmdeX16og16fXmdep15XXqCDXlteUINeR15fXnNeV158g15fXk9epIiwKKyAgICAgICAgIlBhc3RlIjogIteU15PXkdenIiwKKyAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgZWxlbWVudDoiOiAi15DXoNeQINeQ16nXqCDXqdeR16jXpteV16DXmiDXnNeU16HXmdeoINeQ16og15TXkNec157XoNeYINeU15bXlDoiLAorICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICLXkNeg15Ag15DXqdeoINep15DXqteUINeo15XXpteUINec16DXqtenINeQ16og15DXnNee16DXmCDXlteULiIsCisgICAgICAgICJSZW1vdmUgdGhlICRlbGVtIEVsZW1lbnQuLi4iOiAi15TXodeoINeQ16og15DXnNee16DXmCDXlC0gJGVsZW0uLi4iLAorICAgICAgICAiUmVtb3ZlIHRoaXMgbm9kZSBmcm9tIHRoZSBkb2N1bWVudCI6ICLXlNeh16jXlCDXqdecIG5vZGUg15bXlCDXnteU157Xodee15oiLAorICAgICAgICAiUm9fdyBQcm9wZXJ0aWVzLi4uIjogItee15DXpNeZ15nXoNeZIF/XmNeV16guLi4iLAorICAgICAgICAiU2hvdyB0aGUgVGFibGUgQ2VsbCBQcm9wZXJ0aWVzIGRpYWxvZyI6ICLXntem15nXkiDXkNeqINeX15zXldefINeU15PXlS3XqdeZ15cg16nXnCDXnteQ16TXmdeZ16DXmSDXqteQINeR15jXkdec15QiLAorICAgICAgICAiU2hvdyB0aGUgVGFibGUgUHJvcGVydGllcyBkaWFsb2ciOiAi157XpteZ15Ig15DXqiDXl9ec15XXnyDXlNeT15Ut16nXmdeXINep15wg157XkNek15nXmdeg15kg15jXkdec15QiLAorICAgICAgICAiU2hvdyB0aGUgVGFibGUgUm93IFByb3BlcnRpZXMgZGlhbG9nIjogItee16bXmdeSINeQ16og15fXnNeV158g15TXk9eVLdep15nXlyDXqdecINee15DXpNeZ15nXoNeZINep15XXqNeUINeR15jXkdec15QiLAorICAgICAgICAiU2hvdyB0aGUgaW1hZ2UgcHJvcGVydGllcyBkaWFsb2ciOiAi157XpteZ15Ig15DXqiDXl9ec15XXnyDXlNeT15Ut16nXmdeXINep15wg157XkNek15nXmdeg15kg16rXnteV16DXlCIsCisgICAgICAgICJVbmxpbmsgdGhlIGN1cnJlbnQgZWxlbWVudCI6ICLXoNeZ16rXldenINeQ16og15TXkNec157XoNeYINeU16DXldeb15fXmSIsCisgICAgICAgICJfRGVsZXRlIFJvdyI6ICJf157Xl9enINep15XXqNeUIiwKKyAgICAgICAgIl9JbWFnZSBQcm9wZXJ0aWVzLi4uIjogIl/XnteQ16TXmdeZ16DXmSDXqtee15XXoNeULi4uIiwKKyAgICAgICAgIl9Nb2RpZnkgTGluay4uLiI6ICJf16nXoNeUINen15nXqdeV16guLi4iLAorICAgICAgICAiX1JlbW92ZSBMaW5rLi4uIjogIl/XlNeh16gg16fXmdep15XXqC4uLiIsCisgICAgICAgICJfVGFibGUgUHJvcGVydGllcy4uLiI6ICLXnteQ16TXmdeZ16DXmSDXmF/Xkdec15QuLi4iCisgICAgfSwKKyAgICAiQ3JlYXRlTGluayI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICLXlNeV16HXoy/Xqdeg15Qg16fXmdep15XXqCIsCisgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIteX15zXldefINeX15PXqSAoX2JsYW5rKSIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogItec15zXkCAo15TXqdeq157XqSDXkS1mcmFtZSDXlNen15nXmdedKSIsCisgICAgICAgICJPSyI6ICLXkNeZ16nXldeoIiwKKyAgICAgICAgIk90aGVyIjogIteQ15fXqCIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAi15DXldeq15UgZnJhbWUgKF9zZWxmKSIsCisgICAgICAgICJUYXJnZXQ6IjogIteZ16LXkzoiLAorICAgICAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICLXm9eV16rXqNeqICh0b29sdGlwKToiLAorICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJGcmFtZSDXotec15nXldefIChfdG9wKSIsCisgICAgICAgICJVUkw6IjogIlVSTDoiCisgICAgfSwKKyAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKKyAgICAgICAgIk9LIjogIteQ15nXqdeV16giCisgICAgfSwKKyAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgICAgICJPSyI6ICLXkNeZ16nXldeoIgorICAgIH0sCisgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICJBbGlnbiI6ICLXmdep15XXqCIsCisgICAgICAgICJCYXNlbGluZSI6ICLXp9eVINeR16HXmdehIiwKKyAgICAgICAgIkJvcmRlciI6ICLXkteR15XXnCIsCisgICAgICAgICJCb3R0b20iOiAi16rXl9eq15XXnyIsCisgICAgICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgICAgICJDb2xvciI6ICLXpteR16IiLAorICAgICAgICAiQ29weSI6ICLXlNei16rXpyIsCisgICAgICAgICJDdXQiOiAi15LXlteV16giLAorICAgICAgICAiSGVpZ2h0IjogIteS15XXkdeUIiwKKyAgICAgICAgIkhlaWdodDoiOiAi15LXldeR15QiLAorICAgICAgICAiTGVmdCI6ICLXqdee15DXnCIsCisgICAgICAgICJNYXJnaW4iOiAi16nXldec15nXmdedIiwKKyAgICAgICAgIk1pZGRsZSI6ICLXkNee16bXoiIsCisgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIteX15zXldefINeX15PXqSAoX2JsYW5rKSIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogItec15zXkCAo15TXqdeq157XqSDXkS1mcmFtZSDXlNen15nXmdedKSIsCisgICAgICAgICJPSyI6ICLXkNeZ16nXldeoIiwKKyAgICAgICAgIlBhZGRpbmciOiAi16jXmdeV15XXlyDXkdep15XXnNeZ15nXnSIsCisgICAgICAgICJSaWdodCI6ICLXmdee15nXnyIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAi15DXldeq15UgZnJhbWUgKF9zZWxmKSIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCkiOiAi15vXldeq16jXqiAodG9vbHRpcCk6IiwKKyAgICAgICAgIlRvcCI6ICLXotec15nXldefIiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiRnJhbWUg16LXnNeZ15XXnyAoX3RvcCkiLAorICAgICAgICAiV2lkdGgiOiAi16jXldeX15EiLAorICAgICAgICAiV2lkdGg6IjogIteo15XXl9eRIgorICAgIH0sCisgICAgIkZpbmRSZXBsYWNlIjogeworICAgICAgICAiUmVwbGFjZSB3aXRoOiI6ICLXlNeX15zXoyDXkS0iCisgICAgfSwKKyAgICAiRm9ybXMiOiB7CisgICAgICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIlVSTCDXlNeq157Xldeg15QiLAorICAgICAgICAiT0siOiAi15DXmdep15XXqCIKKyAgICB9LAorICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgIkFsdGVybmF0ZSBzdHlsZS1zaGVldDoiOiAi15LXmdec15nXldefINeh15LXoNeV158g15DXl9eoOiIsCisgICAgICAgICJCYWNrZ3JvdW5kIGNvbG9yOiI6ICLXpteR16Ig16jXp9eiOiIsCisgICAgICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgICAgICJET0NUWVBFOiI6ICJET0NUWVBFOiIsCisgICAgICAgICJEZXNjcmlwdGlvbjoiOiAi16rXmdeQ15XXqCIsCisgICAgICAgICJEb2N1bWVudCBwcm9wZXJ0aWVzIjogItee15DXpNeZ15nXoNeZINee16HXnteaIiwKKyAgICAgICAgIkRvY3VtZW50IHRpdGxlOiI6ICLXm9eV16rXqNeqINee16HXnteaOiIsCisgICAgICAgICJPSyI6ICLXkNeZ16nXldeoIiwKKyAgICAgICAgIlByaW1hcnkgc3R5bGUtc2hlZXQ6IjogIteS15nXnNeZ15XXnyDXodeS16DXldefINeo15DXqdeZOiIsCisgICAgICAgICJUZXh0IGNvbG9yOiI6ICLXpteR16Ig15jXp9eh15g6IgorICAgIH0sCisgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAiQ2FuY2VsIjogIteR15nXmNeV15wiLAorICAgICAgICAiQ2VudGVyIjogItee16jXm9eWIiwKKyAgICAgICAgIkNvbG9yOiI6ICLXpteR16IiLAorICAgICAgICAiSGVpZ2h0OiI6ICLXkteV15HXlCIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAi16fXlSDXkNeg15vXmSIsCisgICAgICAgICJMYXlvdXQiOiAi16TXqNeZ16HXlCIsCisgICAgICAgICJMZWZ0IjogItep157XkNecIiwKKyAgICAgICAgIk9LIjogIteQ15nXqdeV16giLAorICAgICAgICAiUmlnaHQiOiAi15nXnteZ158iLAorICAgICAgICAiV2lkdGg6IjogIteo15XXl9eRIiwKKyAgICAgICAgInBlcmNlbnQiOiAi15DXl9eV15YiLAorICAgICAgICAicGl4ZWxzIjogItek15nXp9eh15zXmdedIgorICAgIH0sCisgICAgIkltYWdlTWFuYWdlciI6IHsKKyAgICAgICAgIkJhc2VsaW5lIjogIten15Ug15HXodeZ16EiLAorICAgICAgICAiQm90dG9tIjogIteq15fXqteV158iLAorICAgICAgICAiQ2FuY2VsIjogIteR15nXmNeV15wiLAorICAgICAgICAiSGVpZ2h0OiI6ICLXkteV15HXlCIsCisgICAgICAgICJMZWZ0IjogItep157XkNecIiwKKyAgICAgICAgIk1pZGRsZSI6ICLXkNee16bXoiIsCisgICAgICAgICJPSyI6ICLXkNeZ16nXldeoIiwKKyAgICAgICAgIlJpZ2h0IjogIteZ157XmdefIiwKKyAgICAgICAgIlRvcCI6ICLXotec15nXldefIiwKKyAgICAgICAgIldpZHRoOiI6ICLXqNeV15fXkSIKKyAgICB9LAorICAgICJJbmxpbmVTdHlsZXIiOiB7CisgICAgICAgICJCYWNrZ3JvdW5kIjogIteo16fXoiIsCisgICAgICAgICJCYXNlbGluZSI6ICLXp9eVINeR16HXmdehIiwKKyAgICAgICAgIkJvcmRlciI6ICLXkteR15XXnCIsCisgICAgICAgICJCb3R0b20iOiAi16rXl9eq15XXnyIsCisgICAgICAgICJDZW50ZXIiOiAi157XqNeb15YiLAorICAgICAgICAiQ2hhciI6ICLXqteVIiwKKyAgICAgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIteS15HXldec15XXqiDXp9eV16jXodeZ150iLAorICAgICAgICAiRkcgQ29sb3IiOiAi16bXkdeiINen15nXk9ee15QiLAorICAgICAgICAiRmxvYXQiOiAi157XqNeX16MiLAorICAgICAgICAiSGVpZ2h0IjogIteS15XXkdeUIiwKKyAgICAgICAgIkltYWdlIFVSTCI6ICJVUkwg15TXqtee15XXoNeUIiwKKyAgICAgICAgIkp1c3RpZnkiOiAi15nXqdeV16giLAorICAgICAgICAiTGF5b3V0IjogItek16jXmdeh15QiLAorICAgICAgICAiTGVmdCI6ICLXqdee15DXnCIsCisgICAgICAgICJNYXJnaW4iOiAi16nXldec15nXmdedIiwKKyAgICAgICAgIk1pZGRsZSI6ICLXkNee16bXoiIsCisgICAgICAgICJOb25lIjogIteQ15nXnyIsCisgICAgICAgICJQYWRkaW5nIjogIteo15nXldeV15cg15HXqdeV15zXmdeZ150iLAorICAgICAgICAiUmlnaHQiOiAi15nXnteZ158iLAorICAgICAgICAiVGV4dCBhbGlnbiI6ICLXmdep15XXqCDXmNen16HXmCIsCisgICAgICAgICJUb3AiOiAi16LXnNeZ15XXnyIsCisgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICLXmdeZ16nXldeoINeQ16DXm9eZIiwKKyAgICAgICAgIldpZHRoIjogIteo15XXl9eRIiwKKyAgICAgICAgInBlcmNlbnQiOiAi15DXl9eV15YiLAorICAgICAgICAicGl4ZWxzIjogItek15nXp9eh15zXmdedIgorICAgIH0sCisgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKKyAgICAgICAgIk9LIjogIteQ15nXqdeV16giCisgICAgfSwKKyAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICJCYXNlbGluZSI6ICLXp9eVINeR16HXmdehIiwKKyAgICAgICAgIkJvdHRvbSI6ICLXqteX16rXldefIiwKKyAgICAgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiVVJMINeU16rXnteV16DXlCIsCisgICAgICAgICJMYXlvdXQiOiAi16TXqNeZ16HXlCIsCisgICAgICAgICJMZWZ0IjogItep157XkNecIiwKKyAgICAgICAgIk1pZGRsZSI6ICLXkNee16bXoiIsCisgICAgICAgICJPSyI6ICLXkNeZ16nXldeoIiwKKyAgICAgICAgIlJpZ2h0IjogIteZ157XmdefIiwKKyAgICAgICAgIlNwYWNpbmciOiAi16jXmdeV15XXlyIsCisgICAgICAgICJUb3AiOiAi16LXnNeZ15XXnyIKKyAgICB9LAorICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAiQ2FuY2VsIjogIteR15nXmNeV15wiLAorICAgICAgICAiSGVpZ2h0OiI6ICLXkteV15HXlCIsCisgICAgICAgICJMZWZ0IjogItep157XkNecIiwKKyAgICAgICAgIk9LIjogIteQ15nXqdeV16giLAorICAgICAgICAiUmlnaHQiOiAi15nXnteZ158iLAorICAgICAgICAiV2lkdGg6IjogIteo15XXl9eRIgorICAgIH0sCisgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIKKyAgICB9LAorICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAiQmFzZWxpbmUiOiAi16fXlSDXkdeh15nXoSIsCisgICAgICAgICJCb3R0b20iOiAi16rXl9eq15XXnyIsCisgICAgICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgICAgICJIZWlnaHQ6IjogIteS15XXkdeUIiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiVVJMINeU16rXnteV16DXlCIsCisgICAgICAgICJMYXlvdXQiOiAi16TXqNeZ16HXlCIsCisgICAgICAgICJMZWZ0IjogItep157XkNecIiwKKyAgICAgICAgIk1pZGRsZSI6ICLXkNee16bXoiIsCisgICAgICAgICJPSyI6ICLXkNeZ16nXldeoIiwKKyAgICAgICAgIlJpZ2h0IjogIteZ157XmdefIiwKKyAgICAgICAgIlNwYWNpbmciOiAi16jXmdeV15XXlyIsCisgICAgICAgICJUb3AiOiAi16LXnNeZ15XXnyIsCisgICAgICAgICJXaWR0aDoiOiAi16jXldeX15EiCisgICAgfSwKKyAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAiQ2FuY2VsIjogIteR15nXmNeV15wiCisgICAgfSwKKyAgICAiSW5zZXJ0VGFibGUiOiB7CisgICAgICAgICJCYXNlbGluZSI6ICLXp9eVINeR16HXmdehIiwKKyAgICAgICAgIkJvcmRlciI6ICLXkteR15XXnCIsCisgICAgICAgICJCb3R0b20iOiAi16rXl9eq15XXnyIsCisgICAgICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgICAgICJDYXB0aW9uIjogIteb15XXqteo16oiLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIteU15vXoNehINeY15HXnNeUIiwKKyAgICAgICAgIkxheW91dCI6ICLXpNeo15nXodeUIiwKKyAgICAgICAgIkxlZnQiOiAi16nXnteQ15wiLAorICAgICAgICAiTWlkZGxlIjogIteQ157XpteiIiwKKyAgICAgICAgIk9LIjogIteQ15nXqdeV16giLAorICAgICAgICAiUGVyY2VudCI6ICLXkNeX15XXliIsCisgICAgICAgICJQaXhlbHMiOiAi16TXmden16HXnNeZ150iLAorICAgICAgICAiUmlnaHQiOiAi15nXnteZ158iLAorICAgICAgICAiU3BhY2luZyI6ICLXqNeZ15XXldeXIiwKKyAgICAgICAgIlRvcCI6ICLXotec15nXldefIiwKKyAgICAgICAgIldpZHRoOiI6ICLXqNeV15fXkSIKKyAgICB9LAorICAgICJMaW5rZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAi15TXldeh16Mv16nXoNeUINen15nXqdeV16giLAorICAgICAgICAiT0siOiAi15DXmdep15XXqCIsCisgICAgICAgICJUYXJnZXQ6IjogIteZ16LXkzoiLAorICAgICAgICAiVVJMOiI6ICJVUkw6IgorICAgIH0sCisgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgICAgICJPSyI6ICLXkNeZ16nXldeoIgorICAgIH0sCisgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIKKyAgICB9LAorICAgICJQYXN0ZVRleHQiOiB7CisgICAgICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgICAgICJPSyI6ICLXkNeZ16nXldeoIgorICAgIH0sCisgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIteR15nXmNeV15wiLAorICAgICAgICAiQ29weSI6ICLXlNei16rXpyIKKyAgICB9LAorICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIgorICAgIH0sCisgICAgIlNldElkIjogeworICAgICAgICAiQ2FuY2VsIjogIteR15nXmNeV15wiLAorICAgICAgICAiT0siOiAi15DXmdep15XXqCIKKyAgICB9LAorICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICJPSyI6ICLXkNeZ16nXldeoIgorICAgIH0sCisgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKKyAgICAgICAgIkRpY3Rpb25hcnkiOiAi157Xmdec15XXnyIsCisgICAgICAgICJGaW5pc2hlZCBsaXN0IG9mIG1pc3BlbGxlZCB3b3JkcyI6ICLXlNeh16rXmdeZ157XlCDXqNep15nXnteqINeU157Xmdec15nXnSDXlNee15DXldeZ16rXldeqINeR15DXldek158g16nXkteV15kiLAorICAgICAgICAiSSB3aWxsIG9wZW4gaXQgaW4gYSBuZXcgcGFnZS4iOiAi15DXoNeZINeQ16TXqteXINeQ16og15bXlCDXkdeX15zXldefINeX15PXqS4iLAorICAgICAgICAiSWdub3JlIjogIteU16rXotec150iLAorICAgICAgICAiSWdub3JlIGFsbCI6ICLXlNeq16LXnNedINee15TXm9ecIiwKKyAgICAgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICLXnNeQINeg157XpteQ15Ug157Xmdec15nXnSDXnteQ15XXmdeq15XXqiDXkdeQ15XXpNefINep15LXldeZINei150g15TXnteZ15zXldefINeU16DXkdeX16guIiwKKyAgICAgICAgIk9LIjogIteQ15nXqdeV16giLAorICAgICAgICAiT3JpZ2luYWwgd29yZCI6ICLXlNee15nXnNeUINeU157Xp9eV16jXmdeqIiwKKyAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gb3BlbiB0aGlzIGxpbmsiOiAi15DXoNeQINeQ16nXqCDXqdeR16jXpteV16DXmiDXnNek16rXldeXINen15nXqdeV16gg15bXlCIsCisgICAgICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAi15DXoNeQINeU157XqtefLiAg16fXldeo15Ag15zXkdeV15PXpyDXkNeZ15XXqi4iLAorICAgICAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAi15DXoNeQINeU157XqtefOiDXnteX15zXmdejINee15nXnNeV158g15wtIiwKKyAgICAgICAgIlJlLWNoZWNrIjogIteR15PXldenINee15fXk9epIiwKKyAgICAgICAgIlJlcGxhY2UiOiAi15TXl9ec16MiLAorICAgICAgICAiUmVwbGFjZSBhbGwiOiAi15TXl9ec16Mg15TXm9ecIiwKKyAgICAgICAgIlJlcGxhY2Ugd2l0aCI6ICLXlNeX15zXoyDXkS0iLAorICAgICAgICAiUmV2ZXJ0IjogIteU15fXlteoINep15nXoNeV15nXmdedIiwKKyAgICAgICAgIlNwZWxsLWNoZWNrIjogIteR15PXmden16og15DXmdeV16oiLAorICAgICAgICAiU3VnZ2VzdGlvbnMiOiAi15TXptei15XXqiIsCisgICAgICAgICJUaGlzIHdpbGwgZHJvcCBjaGFuZ2VzIGFuZCBxdWl0IHNwZWxsIGNoZWNrZXIuICBQbGVhc2UgY29uZmlybS4iOiAi15bXlCDXmdeR15jXnCDXkNeqINeU16nXmdeg15XXmdeZ150g15XXmdem15Ag157XkdeV15PXpyDXlNeQ15nXldeqLiAg15DXoNeQINeQ16nXqC4iCisgICAgfSwKKyAgICAiU3VwZXJDbGVhbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKKyAgICAgICAgIk9LIjogIteQ15nXqdeV16giCisgICAgfSwKKyAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAiQWxsIGZvdXIgc2lkZXMiOiAi15vXnCDXkNeo15HXoteqINeU16bXk9eT15nXnSIsCisgICAgICAgICJCb3JkZXJzIjogIteS15HXldec15XXqiIsCisgICAgICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgICAgICJDYXB0aW9uIjogIteb15XXqteo16oiLAorICAgICAgICAiQ2VsbCBQcm9wZXJ0aWVzIjogItee15DXpNeZ15nXoNeZINeq15AiLAorICAgICAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogItee15DXpNeZ15nXoNeZINeq15AiLAorICAgICAgICAiRGVsZXRlIGNlbGwiOiAi157Xl9enINeq15AiLAorICAgICAgICAiRGVsZXRlIGNvbHVtbiI6ICLXnteX16cg15jXldeoIiwKKyAgICAgICAgIkRlbGV0ZSByb3ciOiAi157Xl9enINep15XXqNeUIiwKKyAgICAgICAgIkRlc2NyaXB0aW9uIjogIteq15nXkNeV16giLAorICAgICAgICAiRnJhbWVzIjogItee16HXkteo15XXqiIsCisgICAgICAgICJJbnNlcnQgY2VsbCBhZnRlciI6ICLXlNeb16DXoSDXqteQINeQ15fXqNeZIiwKKyAgICAgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICLXlNeb16DXoSDXqteQINec16TXoNeZIiwKKyAgICAgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAi15TXm9eg16Eg15jXldeoINeQ15fXqNeZIiwKKyAgICAgICAgIkluc2VydCBjb2x1bW4gYmVmb3JlIjogIteU15vXoNehINeY15XXqCDXnNek16DXmSIsCisgICAgICAgICJJbnNlcnQgcm93IGFmdGVyIjogIteU15vXoNehINep15XXqNeUINeQ15fXqNeZIiwKKyAgICAgICAgIkluc2VydCByb3cgYmVmb3JlIjogIteU15vXoNehINep15XXqNeUINec16TXoNeZIiwKKyAgICAgICAgIk1lcmdlIGNlbGxzIjogItee15bXkiDXqteQ15nXnSIsCisgICAgICAgICJObyBydWxlcyI6ICLXnNec15Ag16fXldeV15nXnSIsCisgICAgICAgICJObyBzaWRlcyI6ICLXnNec15Ag16bXk9eT15nXnSIsCisgICAgICAgICJPSyI6ICLXkNeZ16nXldeoIiwKKyAgICAgICAgIlBhZGRpbmciOiAi16jXmdeV15XXlyDXkdep15XXnNeZ15nXnSIsCisgICAgICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAi15DXoNeQINec15fXpSDXotecINeq15Ag15vXnNep15TXlSIsCisgICAgICAgICJSb3cgUHJvcGVydGllcyI6ICLXnteQ16TXmdeZ16DXmSDXqdeV16jXlCIsCisgICAgICAgICJSb3cgcHJvcGVydGllcyI6ICLXnteQ16TXmdeZ16DXmSDXqdeV16jXlCIsCisgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGFsbCByb3dzIGFuZCBjb2x1bW5zIjogIten15XXldeZ150g15nXldek15nXoteVINeR15nXnyDXm9ecINeU16nXldeo15XXqiDXldeU15jXldeo15nXnSIsCisgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGNvbHVtbnMgb25seSI6ICLXp9eV15XXmdedINeZ15XXpNeZ16LXlSDXkdeZ158g15jXldeo15nXnSDXkdec15HXkyIsCisgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIHJvd3Mgb25seSI6ICLXp9eV15XXmdedINeZ15XXpNeZ16LXlSDXkdeZ158g16nXldeo15XXqiDXkdec15HXkyIsCisgICAgICAgICJTcGFjaW5nIjogIteo15nXldeV15ciLAorICAgICAgICAiU3BhY2luZyBhbmQgcGFkZGluZyI6ICLXqNeZ15XXldeXINeV16nXldec15nXmdedIiwKKyAgICAgICAgIlNwbGl0IGNvbHVtbiI6ICLXpNem15wg15jXldeoIiwKKyAgICAgICAgIlNwbGl0IHJvdyI6ICLXpNem15wg16nXldeo15QiLAorICAgICAgICAiU3VtbWFyeSI6ICLXodeZ15vXldedIiwKKyAgICAgICAgIlRhYmxlIFByb3BlcnRpZXMiOiAi157XkNek15nXmdeg15kg15jXkdec15QiLAorICAgICAgICAiVGFibGUgcHJvcGVydGllcyI6ICLXnteQ16TXmdeZ16DXmSDXmNeR15zXlCIsCisgICAgICAgICJUaGUgYm90dG9tIHNpZGUgb25seSI6ICLXlNem15Mg15TXqteX16rXldefINeR15zXkdeTIiwKKyAgICAgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIteU16bXkyDXlNep157XkNec15kg15HXnNeR15MiLAorICAgICAgICAiVGhlIHJpZ2h0IGFuZCBsZWZ0IHNpZGVzIG9ubHkiOiAi15TXpteT15PXmdedINeU15nXnteg15kg15XXlNep157XkNec15kg15HXnNeR15MiLAorICAgICAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIteU16bXkyDXlNeZ157XoNeZINeR15zXkdeTIiwKKyAgICAgICAgIlRoZSB0b3AgYW5kIGJvdHRvbSBzaWRlcyBvbmx5IjogIteU16bXk9eT15nXnSDXlNei15zXmdeV158g15XXlNeq15fXqteV158g15HXnNeR15MiLAorICAgICAgICAiVGhlIHRvcCBzaWRlIG9ubHkiOiAi15TXpteTINeU16LXnNeZ15XXnyDXkdec15HXkyIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiWGluaGEg157Xodeo15Eg15HXpNeX15PXoNeV16og15zXnteX15XXpyDXkNeqINeU16rXkCDXlNeQ15fXqNeV158g15HXqdeV16jXlC4iLAorICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICJYaW5oYSDXnteh16jXkSDXkdek15fXk9eg15XXqiDXnNee15fXldenINeQ16og15TXmNeV16gg15TXkNeX16jXldefINeR15jXkdec15QuIiwKKyAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iOiAiWGluaGEg157Xodeo15Eg15HXpNeX15PXoNeV16og15zXnteX15XXpyDXkNeqINeU16nXldeo15Qg15TXkNeX16jXldeg15Qg15HXmNeR15zXlC4iLAorICAgICAgICAicGl4ZWxzIjogItek15nXp9eh15zXmdedIgorICAgIH0sCisgICAgIlRlbXBsYXRlIjogeworICAgICAgICAiQ2FuY2VsIjogIteR15nXmNeV15wiCisgICAgfSwKKyAgICAiVW5Gb3JtYXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgICAgICJPSyI6ICLXkNeZ16nXldeoIgorICAgIH0sCisgICAgIlhpbmhhIjogeworICAgICAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAi15DXldeT15XXqiDXoteV16jXmiDXlteUIiwKKyAgICAgICAgIkJhY2tncm91bmQgQ29sb3IiOiAi16bXkdeiINeo16fXoiIsCisgICAgICAgICJCb2xkIjogItee15XXk9eS16kiLAorICAgICAgICAiQnVsbGV0ZWQgTGlzdCI6ICLXqNep15nXnteUINec15Ag157XnteV16HXpNeo16oiLAorICAgICAgICAiQ29weSBzZWxlY3Rpb24iOiAi15TXoteq16cg15HXl9eZ16jXlCIsCisgICAgICAgICJDdXJyZW50IHN0eWxlIjogIteh15LXoNeV158g16DXldeb15fXmSIsCisgICAgICAgICJDdXQgc2VsZWN0aW9uIjogIteS15bXldeoINeR15fXmdeo15QiLAorICAgICAgICAiRGVjcmVhc2UgSW5kZW50IjogIteU16fXmNefINeb16DXmdeh15QiLAorICAgICAgICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAi15vXmdeV15XXnyDXntep157XkNecINec15nXnteZ158iLAorICAgICAgICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAi15vXmdeV15XXnyDXnteZ157XmdefINec16nXnteQ15wiLAorICAgICAgICAiRm9udCBDb2xvciI6ICLXpteR16Ig15LXldek158iLAorICAgICAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAi16LXlteo15Qg15zXqdeZ157XldepINeR16LXldeo15oiLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIten15Ug15DXoNeb15kiLAorICAgICAgICAiSW5jcmVhc2UgSW5kZW50IjogIteU15LXk9ecINeb16DXmdeh15QiLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIteU15vXoNehINeY15HXnNeUIiwKKyAgICAgICAgIkluc2VydCBXZWIgTGluayI6ICLXlNeb16DXoSDXlNeZ16TXqC3Xp9eZ16nXldeoIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAi15TXm9eg16Ev16nXoNeUINeq157Xldeg15QiLAorICAgICAgICAiSXRhbGljIjogIteg15jXldeZIiwKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogIteZ16nXldeoINec157XqNeb15YiLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIteZ16nXldeoINec16nXldeo15Qg157XnNeQ15QiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIiDXmdep15XXqCDXnNep157XkNecIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAi15nXqdeV16gg15zXmdee15nXnyIsCisgICAgICAgICJPcmRlcmVkIExpc3QiOiAi16jXqdeZ157XlCDXntee15XXodek16jXqiIsCisgICAgICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICLXlNeT15HXpyDXnteU15zXldeXIiwKKyAgICAgICAgIlBhdGgiOiAi16DXqteZ15Eg16LXmdem15XXkSIsCisgICAgICAgICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLXnteR16bXoiDXnteX15PXqSDXkNeqINeU16TXoteV15zXlCDXlNeQ15fXqNeV16DXlCDXqdeR15nXmNec16oiLAorICAgICAgICAiU3RyaWtldGhyb3VnaCI6ICLXp9eVINeQ157XpteiIiwKKyAgICAgICAgIlN1YnNjcmlwdCI6ICLXm9eq15Eg16LXmdec15kiLAorICAgICAgICAiU3VwZXJzY3JpcHQiOiAi15vXqteRINeq15fXqteZIiwKKyAgICAgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICLXqdeg15Qg157XpteRINen15XXkyBIVE1MIiwKKyAgICAgICAgIlVuZGVybGluZSI6ICLXp9eVINeq15fXqteZIiwKKyAgICAgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogItee15HXmNecINeQ16og16TXoteV15zXqteaINeU15DXl9eo15XXoNeUIiwKKyAgICAgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICLXkNeq15Qg15HXntem15Eg15jXp9eh15gg16DXp9eZICjXp9eV15MpLiDXlNep16rXntepINeR15vXpNeq15XXqCBbPD5dINeb15PXmSDXnNeX15bXldeoINec157XpteRIFdZU0lXWUcgKNeq16bXldeS16og16LXmdem15XXkSkuIgorICAgIH0sCisgICAgIl9fTkVXX1RSQU5TTEFUSU9OU19fIjogeworICAgICAgICAiQWJicmV2aWF0aW9uIjogeworICAgICAgICAgICAgIkFiYnJldmlhdGlvbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICIiLAorICAgICAgICAgICAgIkV4cGFuc2lvbjoiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQWJvdXRCb3giOiB7CisgICAgICAgICAgICAiQ2xvc2UiOiAiPDxYaW5oYT4+IgorICAgICAgICB9LAorICAgICAgICAiQ2hhckNvdW50ZXIiOiB7CisgICAgICAgICAgICAiLi4uIGluIHByb2dyZXNzIjogIiIsCisgICAgICAgICAgICAiQ2hhcnMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIiIsCisgICAgICAgICAgICAiV29yZHMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2hhcmFjdGVyTWFwIjogeworICAgICAgICAgICAgIkluc2VydCBzcGVjaWFsIGNoYXJhY3RlciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDb2xvclBpY2tlciI6IHsKKyAgICAgICAgICAgICJDbGljayBhIGNvbG9yLi4uIjogIiIsCisgICAgICAgICAgICAiU2FtcGxlIjogIiIsCisgICAgICAgICAgICAiV2ViIFNhZmU6ICI6ICIiLAorICAgICAgICAgICAgIkNsb3NlIjogIjw8WGluaGE+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAgICAgIkRlbGV0ZSBDZWxsIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDZWxsIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIiIsCisgICAgICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRlZmluaXRpb25MaXN0IjogeworICAgICAgICAgICAgImRlZmluaXRpb24gZGVzY3JpcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGxpc3QiOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIHRlcm0iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRGlhbG9ncyI6IHsKKyAgICAgICAgICAgICJTb21lIFRleHQgSGVyZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEeW5hbWljQ1NTIjogeworICAgICAgICAgICAgIkNob29zZSBzdHlsZXNoZWV0IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCI6ICIiLAorICAgICAgICAgICAgIlVuZGVmaW5lZCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFZGl0VGFnIjogeworICAgICAgICAgICAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICIiLAorICAgICAgICAgICAgIkVkaXQgVGFnIEJ5IFBlZyI6ICIiLAorICAgICAgICAgICAgIlRhZyBFZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICAgICAiIT0iOiAiIiwKKyAgICAgICAgICAgICIhaW4iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7LSI6ICIiLAorICAgICAgICAgICAgIiZndDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSZndDsiOiAiIiwKKyAgICAgICAgICAgICImbHQ7eCZndDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYCFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgLmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAwYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDJgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgM2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA0YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA3YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDhgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGBlYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsmbmJzcDtgMWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YCt7Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2AtOlxcIGAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLXs6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YENgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGNvc2AiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgbG5gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHBpYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgc2luYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0YW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRpbWVzYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZxdW90O3RleHQmcXVvdDsiOiAiIiwKKyAgICAgICAgICAgICInK2Zvcm11bGErJyI6ICIiLAorICAgICAgICAgICAgIigobiksKGspKSI6ICIiLAorICAgICAgICAgICAgIih4KzEpLyh4LTEpIjogIiIsCisgICAgICAgICAgICAiKiI6ICIiLAorICAgICAgICAgICAgIioqIjogIiIsCisgICAgICAgICAgICAiKy0iOiAiIiwKKyAgICAgICAgICAgICItJmd0OyI6ICIiLAorICAgICAgICAgICAgIi0mbHQ7IjogIiIsCisgICAgICAgICAgICAiLToiOiAiIiwKKyAgICAgICAgICAgICItPSI6ICIiLAorICAgICAgICAgICAgIi8vIjogIiIsCisgICAgICAgICAgICAiL18iOiAiIiwKKyAgICAgICAgICAgICI6LiI6ICIiLAorICAgICAgICAgICAgIj0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiQCI6ICIiLAorICAgICAgICAgICAgIltbYSxiXSxbYyxkXV0iOiAiIiwKKyAgICAgICAgICAgICJcXFxcIjogIiIsCisgICAgICAgICAgICAiXFxuQ2xpY2sgaW4gdGhlIGJveCB0byB1c2UgeW91ciBrZXlib2FyZCBvciB1c2UgdGhlIGJ1dHRvbnNcXG4iOiAiIiwKKyAgICAgICAgICAgICJeXiI6ICIiLAorICAgICAgICAgICAgIl5eXiI6ICIiLAorICAgICAgICAgICAgIl9ffCI6ICIiLAorICAgICAgICAgICAgIl98XyI6ICIiLAorICAgICAgICAgICAgImAhPWAiOiAiIiwKKyAgICAgICAgICAgICJgIWluYCI6ICIiLAorICAgICAgICAgICAgImAmYW5kO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmNhcDtgIjogIiIsCisgICAgICAgICAgICAiYCZjdXA7YCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7LWAiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDt4Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJm9yO2AiOiAiIiwKKyAgICAgICAgICAgICJgJnF1b3Q7dGV4dCZxdW90O2AiOiAiIiwKKyAgICAgICAgICAgICJgKChuKSwoaykpYCI6ICIiLAorICAgICAgICAgICAgImAoeCsxKS8oeC0xKWAiOiAiIiwKKyAgICAgICAgICAgICJgKipgIjogIiIsCisgICAgICAgICAgICAiYCpgIjogIiIsCisgICAgICAgICAgICAiYCstYCI6ICIiLAorICAgICAgICAgICAgImAtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLSZsdDtgIjogIiIsCisgICAgICAgICAgICAiYC06YCI6ICIiLAorICAgICAgICAgICAgImAtPWAiOiAiIiwKKyAgICAgICAgICAgICJgLy9gIjogIiIsCisgICAgICAgICAgICAiYC9fYCI6ICIiLAorICAgICAgICAgICAgImA6LmAiOiAiIiwKKyAgICAgICAgICAgICJgPSZndDtgIjogIiIsCisgICAgICAgICAgICAiYEBgIjogIiIsCisgICAgICAgICAgICAiYFtbYSxiXSxbYyxkXV1gIjogIiIsCisgICAgICAgICAgICAiYFxcXFxgIjogIiIsCisgICAgICAgICAgICAiYF9ffGAiOiAiIiwKKyAgICAgICAgICAgICJgX3xfYCI6ICIiLAorICAgICAgICAgICAgImBBQWAiOiAiIiwKKyAgICAgICAgICAgICJgYWxlcGhgIjogIiIsCisgICAgICAgICAgICAiYGFscGhhYCI6ICIiLAorICAgICAgICAgICAgImBhbmRgIjogIiIsCisgICAgICAgICAgICAiYGJhcmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgQ0NgIjogIiIsCisgICAgICAgICAgICAiYGNjYWAiOiAiIiwKKyAgICAgICAgICAgICJgY2hpYCI6ICIiLAorICAgICAgICAgICAgImBkYXJyYCI6ICIiLAorICAgICAgICAgICAgImBkZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsYCI6ICIiLAorICAgICAgICAgICAgImBEZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRpYW1vbmRgIjogIiIsCisgICAgICAgICAgICAiYGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGR5L2R4YCI6ICIiLAorICAgICAgICAgICAgImBFRWAiOiAiIiwKKyAgICAgICAgICAgICJgZXBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgZXRhYCI6ICIiLAorICAgICAgICAgICAgImBmcmFgIjogIiIsCisgICAgICAgICAgICAiYEdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBnYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ3JhZGAiOiAiIiwKKyAgICAgICAgICAgICJgaGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaGF0YWAiOiAiIiwKKyAgICAgICAgICAgICJgaWZgIjogIiIsCisgICAgICAgICAgICAiYGluYCI6ICIiLAorICAgICAgICAgICAgImBpbnRgIjogIiIsCisgICAgICAgICAgICAiYGlvdGFgIjogIiIsCisgICAgICAgICAgICAiYGthcHBhYCI6ICIiLAorICAgICAgICAgICAgImBMYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYGxhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGltXyh4LSZndDtvbylgIjogIiIsCisgICAgICAgICAgICAiYGxvZ2AiOiAiIiwKKyAgICAgICAgICAgICJgbXVgIjogIiIsCisgICAgICAgICAgICAiYE5OYCI6ICIiLAorICAgICAgICAgICAgImBubmAiOiAiIiwKKyAgICAgICAgICAgICJgbm90YCI6ICIiLAorICAgICAgICAgICAgImBudWAiOiAiIiwKKyAgICAgICAgICAgICJgbytgIjogIiIsCisgICAgICAgICAgICAiYG8uYCI6ICIiLAorICAgICAgICAgICAgImBPL2AiOiAiIiwKKyAgICAgICAgICAgICJgb2ludGAiOiAiIiwKKyAgICAgICAgICAgICJgb21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYE9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBvb2AiOiAiIiwKKyAgICAgICAgICAgICJgb3JgIjogIiIsCisgICAgICAgICAgICAiYG94YCI6ICIiLAorICAgICAgICAgICAgImBwaGlgIjogIiIsCisgICAgICAgICAgICAiYFBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGlgIjogIiIsCisgICAgICAgICAgICAiYHBpYCI6ICIiLAorICAgICAgICAgICAgImBwcm9kYCI6ICIiLAorICAgICAgICAgICAgImBwcm9wYCI6ICIiLAorICAgICAgICAgICAgImBQc2lgIjogIiIsCisgICAgICAgICAgICAiYHBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgUVFgIjogIiIsCisgICAgICAgICAgICAiYHF1YWRgIjogIiIsCisgICAgICAgICAgICAiYHJBcnJgIjogIiIsCisgICAgICAgICAgICAiYHJob2AiOiAiIiwKKyAgICAgICAgICAgICJgcm9vdChuKSh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgUlJgIjogIiIsCisgICAgICAgICAgICAiYHNmYWAiOiAiIiwKKyAgICAgICAgICAgICJgU2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYHNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzcXJ0KHgpYCI6ICIiLAorICAgICAgICAgICAgImBzcXVhcmVgIjogIiIsCisgICAgICAgICAgICAiYHN0YWNrcmVsKC0mZ3Q7KSgrKWAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViYCI6ICIiLAorICAgICAgICAgICAgImBzdWJlYCI6ICIiLAorICAgICAgICAgICAgImBzdW1gIjogIiIsCisgICAgICAgICAgICAiYHN1cGAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwZWAiOiAiIiwKKyAgICAgICAgICAgICJgdGF1YCI6ICIiLAorICAgICAgICAgICAgImBUaGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdGhldGFgIjogIiIsCisgICAgICAgICAgICAiYFRUYCI6ICIiLAorICAgICAgICAgICAgImB0dGFgIjogIiIsCisgICAgICAgICAgICAiYHVhcnJgIjogIiIsCisgICAgICAgICAgICAiYHVsYWAiOiAiIiwKKyAgICAgICAgICAgICJgdXBzaWxvbmAiOiAiIiwKKyAgICAgICAgICAgICJgdXVgIjogIiIsCisgICAgICAgICAgICAiYHZlY2FgIjogIiIsCisgICAgICAgICAgICAiYHZ2YCI6ICIiLAorICAgICAgICAgICAgImB4XyhtbilgIjogIiIsCisgICAgICAgICAgICAiYFhpYCI6ICIiLAorICAgICAgICAgICAgImB4aWAiOiAiIiwKKyAgICAgICAgICAgICJgeHhgIjogIiIsCisgICAgICAgICAgICAiYHpldGFgIjogIiIsCisgICAgICAgICAgICAiYFpaYCI6ICIiLAorICAgICAgICAgICAgImB8LSZndDtgIjogIiIsCisgICAgICAgICAgICAiYHwtLWAiOiAiIiwKKyAgICAgICAgICAgICJgfD09YCI6ICIiLAorICAgICAgICAgICAgImB8X19gIjogIiIsCisgICAgICAgICAgICAiYHx+YCI6ICIiLAorICAgICAgICAgICAgImB+PWAiOiAiIiwKKyAgICAgICAgICAgICJgfnxgIjogIiIsCisgICAgICAgICAgICAiYH5+YCI6ICIiLAorICAgICAgICAgICAgIkFBIjogIiIsCisgICAgICAgICAgICAiYWxlcGgiOiAiIiwKKyAgICAgICAgICAgICJhbHBoYSI6ICIiLAorICAgICAgICAgICAgImFuZCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aCBGb3JtdWxhIElucHV0IjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoTUwgRXhhbXBsZSI6ICIiLAorICAgICAgICAgICAgImJhcmEiOiAiIiwKKyAgICAgICAgICAgICJCYXNlZCBvbiBBU0NJSU1hdGhNTCBieSI6ICIiLAorICAgICAgICAgICAgImJiYSI6ICIiLAorICAgICAgICAgICAgImJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiZXRhIjogIiIsCisgICAgICAgICAgICAiQ0MiOiAiIiwKKyAgICAgICAgICAgICJjY2EiOiAiIiwKKyAgICAgICAgICAgICJjaGkiOiAiIiwKKyAgICAgICAgICAgICJkYXJyIjogIiIsCisgICAgICAgICAgICAiZGRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkZWwiOiAiIiwKKyAgICAgICAgICAgICJkZWx0YSI6ICIiLAorICAgICAgICAgICAgIkRlbHRhIjogIiIsCisgICAgICAgICAgICAiZGlhbW9uZCI6ICIiLAorICAgICAgICAgICAgImRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkeS9keCI6ICIiLAorICAgICAgICAgICAgIkVFIjogIiIsCisgICAgICAgICAgICAiZXBzaSI6ICIiLAorICAgICAgICAgICAgImV0YSI6ICIiLAorICAgICAgICAgICAgIkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFzY2lpTWF0aE1MIHZpc2l0IHRoaXMgcGFnZToiOiAiIiwKKyAgICAgICAgICAgICJGb3JtdWxhIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgImZyYSI6ICIiLAorICAgICAgICAgICAgImdhbW1hIjogIiIsCisgICAgICAgICAgICAiR2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJncmFkIjogIiIsCisgICAgICAgICAgICAiaEFyciI6ICIiLAorICAgICAgICAgICAgImhhcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXRhIjogIiIsCisgICAgICAgICAgICAiaWYiOiAiIiwKKyAgICAgICAgICAgICJpbiI6ICIiLAorICAgICAgICAgICAgIklucHV0IjogIiIsCisgICAgICAgICAgICAiaW50IjogIiIsCisgICAgICAgICAgICAiaW50X2FeYmYoeClkeCI6ICIiLAorICAgICAgICAgICAgImlvdGEiOiAiIiwKKyAgICAgICAgICAgICJrYXBwYSI6ICIiLAorICAgICAgICAgICAgIkxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhcnIiOiAiIiwKKyAgICAgICAgICAgICJsQXJyIjogIiIsCisgICAgICAgICAgICAibGltXyh4LSZndDtvbykiOiAiIiwKKyAgICAgICAgICAgICJtdSI6ICIiLAorICAgICAgICAgICAgIk5OIjogIiIsCisgICAgICAgICAgICAibm4iOiAiIiwKKyAgICAgICAgICAgICJubm4iOiAiIiwKKyAgICAgICAgICAgICJub3QiOiAiIiwKKyAgICAgICAgICAgICJudSI6ICIiLAorICAgICAgICAgICAgIm8rIjogIiIsCisgICAgICAgICAgICAiby4iOiAiIiwKKyAgICAgICAgICAgICJPLyI6ICIiLAorICAgICAgICAgICAgIm9pbnQiOiAiIiwKKyAgICAgICAgICAgICJPbWVnYSI6ICIiLAorICAgICAgICAgICAgIm9tZWdhIjogIiIsCisgICAgICAgICAgICAib28iOiAiIiwKKyAgICAgICAgICAgICJvciI6ICIiLAorICAgICAgICAgICAgIm94IjogIiIsCisgICAgICAgICAgICAicGhpIjogIiIsCisgICAgICAgICAgICAiUGhpIjogIiIsCisgICAgICAgICAgICAicGkiOiAiIiwKKyAgICAgICAgICAgICJQaSI6ICIiLAorICAgICAgICAgICAgIlByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJwcm9kIjogIiIsCisgICAgICAgICAgICAicHJvcCI6ICIiLAorICAgICAgICAgICAgInBzaSI6ICIiLAorICAgICAgICAgICAgIlBzaSI6ICIiLAorICAgICAgICAgICAgIlFRIjogIiIsCisgICAgICAgICAgICAicXVhZCI6ICIiLAorICAgICAgICAgICAgInJBcnIiOiAiIiwKKyAgICAgICAgICAgICJyaG8iOiAiIiwKKyAgICAgICAgICAgICJyb290KG4pKHgpIjogIiIsCisgICAgICAgICAgICAiUlIiOiAiIiwKKyAgICAgICAgICAgICJzZmEiOiAiIiwKKyAgICAgICAgICAgICJzaWdtYSI6ICIiLAorICAgICAgICAgICAgIlNpZ21hIjogIiIsCisgICAgICAgICAgICAic3FydCh4KSI6ICIiLAorICAgICAgICAgICAgInNxdWFyZSI6ICIiLAorICAgICAgICAgICAgInN0YWNrcmVsKC0mZ3Q7KSgrKSI6ICIiLAorICAgICAgICAgICAgInN1YiI6ICIiLAorICAgICAgICAgICAgInN1YmUiOiAiIiwKKyAgICAgICAgICAgICJzdW0iOiAiIiwKKyAgICAgICAgICAgICJzdW1fKG49MSleb28iOiAiIiwKKyAgICAgICAgICAgICJzdXAiOiAiIiwKKyAgICAgICAgICAgICJzdXBlIjogIiIsCisgICAgICAgICAgICAidGF1IjogIiIsCisgICAgICAgICAgICAiVGhldGEiOiAiIiwKKyAgICAgICAgICAgICJ0aGV0YSI6ICIiLAorICAgICAgICAgICAgIlRUIjogIiIsCisgICAgICAgICAgICAidHRhIjogIiIsCisgICAgICAgICAgICAidWFyciI6ICIiLAorICAgICAgICAgICAgInVsYSI6ICIiLAorICAgICAgICAgICAgInVwc2lsb24iOiAiIiwKKyAgICAgICAgICAgICJ1dSI6ICIiLAorICAgICAgICAgICAgInV1dSI6ICIiLAorICAgICAgICAgICAgInZlY2EiOiAiIiwKKyAgICAgICAgICAgICJ2diI6ICIiLAorICAgICAgICAgICAgInZ2diI6ICIiLAorICAgICAgICAgICAgInheKG0rbikiOiAiIiwKKyAgICAgICAgICAgICJ4XyhtbikiOiAiIiwKKyAgICAgICAgICAgICJYaSI6ICIiLAorICAgICAgICAgICAgInhpIjogIiIsCisgICAgICAgICAgICAieHgiOiAiIiwKKyAgICAgICAgICAgICJ6ZXRhIjogIiIsCisgICAgICAgICAgICAiWloiOiAiIiwKKyAgICAgICAgICAgICJ8LSZndDsiOiAiIiwKKyAgICAgICAgICAgICJ8LS0iOiAiIiwKKyAgICAgICAgICAgICJ8PT0iOiAiIiwKKyAgICAgICAgICAgICJ8X18iOiAiIiwKKyAgICAgICAgICAgICJ8fiI6ICIiLAorICAgICAgICAgICAgIn49IjogIiIsCisgICAgICAgICAgICAifnwiOiAiIiwKKyAgICAgICAgICAgICJ+fiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGYW5jeVNlbGVjdHMiOiB7CisgICAgICAgICAgICAiJytvcHQudGV4dCsnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbmRSZXBsYWNlIjogeworICAgICAgICAgICAgIic7XHJcbiAgdmFyIHRhZ2MgPSAnIjogIiIsCisgICAgICAgICAgICAiQ2FzZSBzZW5zaXRpdmUgc2VhcmNoIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIiOiAiIiwKKyAgICAgICAgICAgICJEb25lIjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIHRleHQgeW91IHdhbnQgdG8gZmluZCI6ICIiLAorICAgICAgICAgICAgIkZpbmQgYW5kIFJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJmb3VuZCBpdGVtIjogIiIsCisgICAgICAgICAgICAiZm91bmQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJIaWdobGlnaHQiOiAiIiwKKyAgICAgICAgICAgICJJbmZvcm0gYSByZXBsYWNlbWVudCB3b3JkIjogIiIsCisgICAgICAgICAgICAiTmV4dCI6ICIiLAorICAgICAgICAgICAgIm5vdCBmb3VuZCI6ICIiLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtIjogIiIsCisgICAgICAgICAgICAicmVwbGFjZWQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJTZWFyY2ggZm9yOiI6ICIiLAorICAgICAgICAgICAgIlN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IjogIiIsCisgICAgICAgICAgICAiVW5kbyI6ICIiLAorICAgICAgICAgICAgIldob2xlIHdvcmRzIG9ubHkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiRW50ZXIgdGhlIG5hbWUgZm9yIG5ldyBvcHRpb24uIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgRm9ybS4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBtdWx0aS1saW5lIHRleHQgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcmFkaW8gYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFNlbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgU2VsZWN0Li4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1zIjogeworICAgICAgICAgICAgIidvbkNsaWNrJz0iOiAiIiwKKyAgICAgICAgICAgICJBY2Nlc3MgS2V5OiI6ICIiLAorICAgICAgICAgICAgIkFjdGlvbiBVUkw6IjogIiIsCisgICAgICAgICAgICAiQnV0dG9uIFNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkNoZWNrZWQiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zOiI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQgdGV4dCAob3B0aW9uYWwpIjogIiIsCisgICAgICAgICAgICAiRGltZW5zaW9ucyI6ICIiLAorICAgICAgICAgICAgIkRpc2FibGVkIjogIiIsCisgICAgICAgICAgICAiRW5jb2Rpbmc6IjogIiIsCisgICAgICAgICAgICAiRm9yIENvbnRyb2w6IjogIiIsCisgICAgICAgICAgICAiRm9ybSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IElOUFVUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gaGFuZGxlciBzY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiR2V0IjogIiIsCisgICAgICAgICAgICAiSGFyZCI6ICIiLAorICAgICAgICAgICAgIkhlaWdodCBpbiBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkhUTUwtRm9ybSB0byBDR0kgKGRlZmF1bHQpIjogIiIsCisgICAgICAgICAgICAiSW1hZ2Ugc291cmNlIjogIiIsCisgICAgICAgICAgICAiSW5pdGlhbCBUZXh0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiSmF2YXNjcmlwdCBmb3IgYnV0dG9uIGNsaWNrIjogIiIsCisgICAgICAgICAgICAiTGFiZWw6IjogIiIsCisgICAgICAgICAgICAiTGVnZW5kOiI6ICIiLAorICAgICAgICAgICAgIk1heCBsZW5ndGg6IjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY2NlcHRlZCI6ICIiLAorICAgICAgICAgICAgIk1ldGhvZDoiOiAiIiwKKyAgICAgICAgICAgICJtdWx0aXBhcnQgRm9ybSBEYXRhIChGaWxlLVVwbG9hZCkiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gc2VsZWN0IjogIiIsCisgICAgICAgICAgICAibmFtZSBvZiB0aGUgdGV4dGFyZWEiOiAiIiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICIiLAorICAgICAgICAgICAgIm5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIm5vd3JhcCI6ICIiLAorICAgICAgICAgICAgIk9mZiI6ICIiLAorICAgICAgICAgICAgIlBoeXNpY2FsIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIGEgTGFiZWwiOiAiIiwKKyAgICAgICAgICAgICJQb3N0IjogIiIsCisgICAgICAgICAgICAicHJlIjogIiIsCisgICAgICAgICAgICAiUmVhZCBPbmx5IjogIiIsCisgICAgICAgICAgICAiUm93czoiOiAiIiwKKyAgICAgICAgICAgICJTaXplIG9mIHRleHQgYm94IGluIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJTaXplOiI6ICIiLAorICAgICAgICAgICAgIlNvZnQiOiAiIiwKKyAgICAgICAgICAgICJUYWIgSW5kZXg6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IEZyYW1lOiI6ICIiLAorICAgICAgICAgICAgIlRleHQ6IjogIiIsCisgICAgICAgICAgICAiVVJMIG9mIGltYWdlIjogIiIsCisgICAgICAgICAgICAiVmFsdWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZToiOiAiIiwKKyAgICAgICAgICAgICJWaXJ0dWFsIjogIiIsCisgICAgICAgICAgICAiV2lkdGggaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJXcmFwIE1vZGU6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBOYW1lIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iCisgICAgICAgIH0sCisgICAgICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgICAgICIuLi4iOiAiIiwKKyAgICAgICAgICAgICJDaGFyYWN0ZXIgc2V0OiI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChJU08tODg1OS01KSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChLT0k4LVIpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKFdJTkRPV1MtMTI1MSkiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkczoiOiAiIiwKKyAgICAgICAgICAgICJVVEYtOCAocmVjb21tZW5kZWQpIjogIiIsCisgICAgICAgICAgICAid2VzdGVybiAoSVNPLTg4NTktMSkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRnVsbFNjcmVlbiI6IHsKKyAgICAgICAgICAgICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiR2Vja28iOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAgICAgIiYjeDAwZDc7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9lZGl0IGhvcml6b250YWwgcnVsZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEhvcml6b250YWwgUnVsZSI6ICIiLAorICAgICAgICAgICAgIk5vIHNoYWRpbmciOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbmxpbmVTdHlsZXIiOiB7CisgICAgICAgICAgICAiQ1NTIFN0eWxlIjogIiIsCisgICAgICAgICAgICAiLSI6ICI8PEVxdWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRBbmNob3IiOiB7CisgICAgICAgICAgICAiQW5jaG9yIG5hbWUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQW5jaG9yIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiIiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICIiLAorICAgICAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbDoiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiIiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWw6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICIiLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGZvb3Rub3RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IE5vdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGFnZWJyZWFrIjogeworICAgICAgICAgICAgIlBhZ2UgYnJlYWsiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIEJyZWFrIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNtaWxleSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgU21pbGV5IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICAgICAiXFxuICBUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZ1xcbiI6ICIiLAorICAgICAgICAgICAgIkhpZGUgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMSI6ICIiLAorICAgICAgICAgICAgIkxpbmsyIjogIiIsCisgICAgICAgICAgICAiTGluazMiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNCI6ICIiLAorICAgICAgICAgICAgIkxpbms1IjogIiIsCisgICAgICAgICAgICAiU2hvdyBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmciOiAiIiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgICAgICJBbGwgQ2F0ZWdvcmllcyI6ICIiLAorICAgICAgICAgICAgIkZpbHRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyBIVE1MIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIHRlbXBsYXRlIHZhcmlhYmxlIjogIiIsCisgICAgICAgICAgICAiT25seSBzZWFyY2ggd29yZCBiZWdpbm5pbmciOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIjw8Q2hhckNvdW50ZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICI8PEluc2VydFNuaXBwZXQ+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAgICAgIkNhcHRpb24gZm9yIHRoZSB0YWJsZSI6ICIiLAorICAgICAgICAgICAgIkNlbGwgcGFkZGluZzoiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIHNwYWNpbmc6IjogIiIsCisgICAgICAgICAgICAiQ29sbGFwc2UgYm9yZGVyczoiOiAiIiwKKyAgICAgICAgICAgICJDb2xzOiI6ICIiLAorICAgICAgICAgICAgIkVtIjogIiIsCisgICAgICAgICAgICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIkxheW91IjogIiIsCisgICAgICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJOdW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIiIsCisgICAgICAgICAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICIiLAorICAgICAgICAgICAgIlN0eWxlIG9mIHRoZSBib3JkZXIiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aCB1bml0IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlJvd3M6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iCisgICAgICAgIH0sCisgICAgICAgICJMYW5nTWFya3MiOiB7CisgICAgICAgICAgICAiJm1kYXNoOyBsYW5ndWFnZSAmbWRhc2g7IjogIiIsCisgICAgICAgICAgICAiJywgJyI6ICIiLAorICAgICAgICAgICAgIkVuZ2xpc2giOiAiIiwKKyAgICAgICAgICAgICJGcmVuY2giOiAiIiwKKyAgICAgICAgICAgICJHcmVlayI6ICIiLAorICAgICAgICAgICAgImxhbmd1YWdlIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIkxhdGluIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxpbmtlciI6IHsKKyAgICAgICAgICAgICIocHgpIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yLUxpbmsiOiAiIiwKKyAgICAgICAgICAgICJBbmNob3I6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgQWRkcmVzczoiOiAiIiwKKyAgICAgICAgICAgICJFbWFpbCBMaW5rIjogIiIsCisgICAgICAgICAgICAiTG9jYXRpb24gQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lbnUgQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lc3NhZ2UgVGVtcGxhdGU6IjogIiIsCisgICAgICAgICAgICAiTmV3IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIk9yZGluYXJ5IExpbmsiOiAiIiwKKyAgICAgICAgICAgICJQb3B1cCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJQb3B1cFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUmVzaXplYWJsZToiOiAiIiwKKyAgICAgICAgICAgICJTYW1lIFdpbmRvdyAoanVtcCBvdXQgb2YgZnJhbWVzKSI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbGJhcnM6IjogIiIsCisgICAgICAgICAgICAiU2hvd3MgT24gSG92ZXIiOiAiIiwKKyAgICAgICAgICAgICJTdGF0dXMgQmFyOiI6ICIiLAorICAgICAgICAgICAgIlN1YmplY3Q6IjogIiIsCisgICAgICAgICAgICAiVGl0bGU6IjogIiIsCisgICAgICAgICAgICAiVG9vbGJhcjoiOiAiIiwKKyAgICAgICAgICAgICJVUkwgTGluayI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICIiLAorICAgICAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTmFtZToiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTaXplOiI6ICI8PEZvcm1zPj4iCisgICAgICAgIH0sCisgICAgICAgICJMaXN0VHlwZSI6IHsKKyAgICAgICAgICAgICJDaG9vc2UgbGlzdCBzdHlsZSB0eXBlIChmb3Igb3JkZXJlZCBsaXN0cykiOiAiIiwKKyAgICAgICAgICAgICJEZWNpbWFsIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciBncmVlayBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgbGF0aW4gbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIHJvbWFuIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJVcHBlciBsYXRpbiBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiVXBwZXIgcm9tYW4gbnVtYmVycyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJNb290b29sc0ZpbGVNYW5hZ2VyIjogeworICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk9wZXJhIjogeworICAgICAgICAgICAgIk1BUksiOiAiIiwKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgdGV4dCBpbiBuZXcgcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiUGFzdGUgYXMgUGxhaW4gVGV4dCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQcmVzZXJ2ZVNjcmlwdHMiOiB7CisgICAgICAgICAgICAiSmF2YVNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIlBIUCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgICAgICInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnY2wnOiAnIjogIiIsCisgICAgICAgICAgICAiQVRUUklCVVRFUyI6ICIiLAorICAgICAgICAgICAgIkNvbG9ycyI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSBUQUcgeW91IHdhbnQgdG8gaW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiTm8gQ1NTIGNsYXNzIGF2YWlhYmxlIjogIiIsCisgICAgICAgICAgICAiT2siOiAiIiwKKyAgICAgICAgICAgICJPUFRJT05TIjogIiIsCisgICAgICAgICAgICAiUXVpY2sgVGFnIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlRBR3MiOiAiIiwKKyAgICAgICAgICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBUQUciOiAiIiwKKyAgICAgICAgICAgICJZb3UgaGF2ZSB0byBzZWxlY3Qgc29tZSB0ZXh0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNhdmVTdWJtaXQiOiB7CisgICAgICAgICAgICAiaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAgICAgICAgICJSZWFkeSI6ICIiLAorICAgICAgICAgICAgIlNhdmUiOiAiIiwKKyAgICAgICAgICAgICJTYXZpbmcuLi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiU2V0SWQiOiB7CisgICAgICAgICAgICAiSUQvTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQgYW5kIE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQvTmFtZSI6ICIiLAorICAgICAgICAgICAgIlNldCBJRC9OYW1lIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiQ2xvc2luZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIkNsb3NpbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIkNvbnZlcnQgYWxsIHF1b3RlcyBhbmQgZGFzaGVzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIGF1dG9tYXRpYyByZXBsYWNlbWVudHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN0eWxpc3QiOiB7CisgICAgICAgICAgICAiU3R5bGVzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBTZWxlY3Rpb24gT25seSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIHVwIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBTY29wZSI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYWwgdGlkeSB1cCBhbmQgY29ycmVjdGlvbiBvZiBzb21lIHByb2JsZW1zLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzZWxlY3QgZnJvbSB0aGUgZm9sbG93aW5nIGNsZWFuaW5nIG9wdGlvbnMuLi4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc3RhbmQgYnkgd2hpbGUgY2xlYW5pbmcgaW4gcHJvY2Vzcy4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGlnbm1lbnQgKGxlZnQvcmlnaHQvanVzdGlmeSkuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBjbGFzc2VzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBBbGwgSFRNTCBUYWdzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBzdHlsZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0eXBlZmFjZXMgKGZvbnQgXCJzdHlsZXNcIikuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGVtcGhhc2lzIGFuZCBhbm5vdGF0aW9ucy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgbGFuZyBhdHRyaWJ1dGVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBQYXJhZ3JhcGhzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cy4iOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzIHdpdGggbm9uLWRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzLiI6ICIiLAorICAgICAgICAgICAgIlZpZ29yb3VzbHkgcHVyZ2UgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiQ2VsbCBUeXBlOiI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIGRvd24iOiAiIiwKKyAgICAgICAgICAgICJDZWxscyB0byB0aGUgcmlnaHQsIGFuZCI6ICIiLAorICAgICAgICAgICAgIkRvIE5vdCBDaGFuZ2UiOiAiIiwKKyAgICAgICAgICAgICJGcmFtZSBhbmQgYm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkhlYWRlciAodGgpIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY3VycmVudCBjZWxsIHdpdGg6IjogIiIsCisgICAgICAgICAgICAiTm9ybWFsICh0ZCkiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJSb3dzIjogIjw8Rm9ybXM+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuc2F2ZWRDaGFuZ2VzIjogeworICAgICAgICAgICAgIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgZWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIldlYktpdCI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiPDxHZWNrbz4+IgorICAgICAgICB9LAorICAgICAgICAiWGluaGEiOiB7CisgICAgICAgICAgICAiJiM4MjEyOyBmb250ICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiJiM4MjEyOyBzaXplICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICIxICg4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjIgKDEwIHB0KSI6ICIiLAorICAgICAgICAgICAgIjMgKDEyIHB0KSI6ICIiLAorICAgICAgICAgICAgIjQgKDE0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjUgKDE4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjYgKDI0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjcgKDM2IHB0KSI6ICIiLAorICAgICAgICAgICAgIkFkZHJlc3MiOiAiIiwKKyAgICAgICAgICAgICJBcmlhbCI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICIiLAorICAgICAgICAgICAgIkNsb3NlIjogIiIsCisgICAgICAgICAgICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICIiLAorICAgICAgICAgICAgIkNvdXJpZXIgTmV3IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFN0YXR1c2JhciI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBUb29sYmFyIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0wICh6ZXJvKSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMSAuLiBDVFJMLTYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUEiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUoiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUwiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLU4iOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVgiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVoiOiAiIiwKKyAgICAgICAgICAgICJFZGl0b3IgSGVscCI6ICIiLAorICAgICAgICAgICAgIkVOVEVSIjogIiIsCisgICAgICAgICAgICAiRXJyb3IgTG9hZGluZyBYaW5oYS4gIERldmVsb3BlcnMsIGNoZWNrIHRoZSBFcnJvciBDb25zb2xlIGZvciBpbmZvcm1hdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGaW5pc2hpbmciOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0ZWQiOiAiIiwKKyAgICAgICAgICAgICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiIiwKKyAgICAgICAgICAgICJHZW9yZ2lhIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAxIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAyIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAzIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA0IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA1IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA2IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJJbXBhY3QiOiAiIiwKKyAgICAgICAgICAgICJJbml0IGVkaXRvciBzaXplIjogIiIsCisgICAgICAgICAgICAiaW5zZXJ0IGxpbmVicmVhayI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9PdmVyd3JpdGUiOiAiIiwKKyAgICAgICAgICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIENvcmUiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW5zIjogIiIsCisgICAgICAgICAgICAiTVMgV29yZCBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAibmV3IHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIlByaW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICIiLAorICAgICAgICAgICAgIlNhdmUgYXMiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgYWxsIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IENvbG9yIjogIiIsCisgICAgICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJTSElGVC1FTlRFUiI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IEJsb2NrIjogIiIsCisgICAgICAgICAgICAiVGFob21hIjogIiIsCisgICAgICAgICAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogIiIsCisgICAgICAgICAgICAiVGltZXMgTmV3IFJvbWFuIjogIiIsCisgICAgICAgICAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJUb3VjaCBoZXJlIGZpcnN0IHRvIGFjdGl2YXRlIGVkaXRvci4iOiAiIiwKKyAgICAgICAgICAgICJWZXJkYW5hIjogIiIsCisgICAgICAgICAgICAiV2FpdGluZyBmb3IgSWZyYW1lIHRvIGxvYWQuLi4iOiAiIiwKKyAgICAgICAgICAgICJXaW5nRGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIiIsCisgICAgICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiUmVtb3ZlIEN1cnJlbnQgQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIlNldCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IHBhZ2UgYmFja2dyb3VuZCBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlNldCBQYWdlIEJhY2tncm91bmQgSW1hZ2UiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2xpZW50c2lkZVNwZWxsY2hlY2siOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVjayB1c2luZyBpZVNwZWxsIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEwJSI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiIiwKKyAgICAgICAgICAgICIyMDAlIjogIiIsCisgICAgICAgICAgICAiMjUlIjogIiIsCisgICAgICAgICAgICAiNTAlIjogIiIsCisgICAgICAgICAgICAiNzUlIjogIiIsCisgICAgICAgICAgICAiPkxpc3QgVmlldyI6ICIiLAorICAgICAgICAgICAgIj5UaHVtYm5haWwgVmlldyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIiIsCisgICAgICAgICAgICAiQWx0IjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIENvbG9yIjogIiIsCisgICAgICAgICAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIiIsCisgICAgICAgICAgICAiQ3JvcCI6ICIiLAorICAgICAgICAgICAgIkQ6IjogIiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IjogIiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIiIsCisgICAgICAgICAgICAiRWRpdCI6ICIiLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZpbGUgTWFuYWdlciI6ICIiLAorICAgICAgICAgICAgIkZpbGVuYW1lOiI6ICIiLAorICAgICAgICAgICAgIkZpbGVzaXplOiI6ICIiLAorICAgICAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICIiLAorICAgICAgICAgICAgIkZsaXAgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIiIsCisgICAgICAgICAgICAiRm9sZGVyIjogIiIsCisgICAgICAgICAgICAiR0lGIjogIiIsCisgICAgICAgICAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIiIsCisgICAgICAgICAgICAiSDoiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICIiLAorICAgICAgICAgICAgIkpQRUcgSGlnaCI6ICIiLAorICAgICAgICAgICAgIkpQRUcgTG93IjogIiIsCisgICAgICAgICAgICAiSlBFRyBNZWRpdW0iOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIjogIiIsCisgICAgICAgICAgICAiTG9jayI6ICIiLAorICAgICAgICAgICAgIk1hcmtlciI6ICIiLAorICAgICAgICAgICAgIk1heGltdW0gZm9sZGVyIHNpemUgbGltaXQgcmVhY2hlZC4gVXBsb2FkIGRpc2FibGVkLiI6ICIiLAorICAgICAgICAgICAgIk1lYXN1cmUiOiAiIiwKKyAgICAgICAgICAgICJOZXcgRm9sZGVyIjogIiIsCisgICAgICAgICAgICAiTm8gRmlsZXMgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgdmFsdWUiOiAiIiwKKyAgICAgICAgICAgICJQTkciOiAiIiwKKyAgICAgICAgICAgICJQcmVzZXQiOiAiIiwKKyAgICAgICAgICAgICJRdWFsaXR5OiI6ICIiLAorICAgICAgICAgICAgIlJlZnJlc2giOiAiIiwKKyAgICAgICAgICAgICJSZW5hbWUiOiAiIiwKKyAgICAgICAgICAgICJSZXNpemUiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENDVyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIlN0YXJ0IFg6IjogIiIsCisgICAgICAgICAgICAiU3RhcnQgWToiOiAiIiwKKyAgICAgICAgICAgICJUYXJnZXQgV2luZG93IjogIiIsCisgICAgICAgICAgICAiVG9nZ2xlIG1hcmtlciBjb2xvciI6ICIiLAorICAgICAgICAgICAgIlRyYXNoIjogIiIsCisgICAgICAgICAgICAiVXBsb2FkIjogIiIsCisgICAgICAgICAgICAiVzoiOiAiIiwKKyAgICAgICAgICAgICJYOiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIEltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlk6IjogIiIsCisgICAgICAgICAgICAiWm9vbSI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkNsZWFyIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICI8PE1vb3Rvb2xzRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiRmlsdGVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbHRlciI6ICI8PEluc2VydFNuaXBwZXQyPj4iCisgICAgICAgIH0sCisgICAgICAgICJIdG1sVGlkeSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEhUTUxUSURZIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkF1dG8tVGlkeSI6ICIiLAorICAgICAgICAgICAgIkRvbid0IFRpZHkiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIFRpZHkiOiAiIiwKKyAgICAgICAgICAgICJUaWR5IGZhaWxlZC4gIENoZWNrIHlvdXIgSFRNTCBmb3Igc3ludGF4IGVycm9ycy4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFuZ2xlOiI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgUGljdHVyZXMiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFVzZXJuYW1lL0VtYWlsIjogIiIsCisgICAgICAgICAgICAiRm9sZGVyIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgTGlzdCI6ICIiLAorICAgICAgICAgICAgIktleXdvcmQiOiAiIiwKKyAgICAgICAgICAgICJObyBJbWFnZXMgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBQaG90b3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBWaWRlb3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIFNlcnZlciI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBVc2VybmFtZSI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW8gTGlzdCI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW9zIjogIiIsCisgICAgICAgICAgICAiQToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkNsZWFyIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJDcm9wIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkVkaXQiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGVuYW1lOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIEltYWdlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBIaWdoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIExvdyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBNZWRpdW0iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkxvY2siOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1hcmtlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUE5HIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUXVhbGl0eToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJlZnJlc2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJlc2l6ZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlN0YXJ0IFk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVHJhc2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlc6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUTUFSUVVFRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUiOiAiIiwKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kLUNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkJlaGF2aW9yOiI6ICIiLAorICAgICAgICAgICAgIkNvbnRpbnVvdXMiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3Rpb246IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHNjcm9sbGluZyBtYXJxdWVlIjogIiIsCisgICAgICAgICAgICAiTWFycXVlZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgQW1vdW50OiI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbCBEZWxheToiOiAiIiwKKyAgICAgICAgICAgICJTbGlkZSI6ICIiLAorICAgICAgICAgICAgIlNwZWVkIENvbnRyb2wiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJUZXh0OiI6ICI8PEZvcm1zPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm90IGRlZmluZWQiOiAiIiwKKyAgICAgICAgICAgICIgT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlVwbG9hZCBmaWxlIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlNpemUiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlZlcnRpY2FsOiI6ICI8PEluc2VydEltYWdlPj4iCisgICAgICAgIH0sCisgICAgICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIxMjAlIjogIiIsCisgICAgICAgICAgICAiMTUwJSI6ICIiLAorICAgICAgICAgICAgIjgwJSI6ICIiLAorICAgICAgICAgICAgIkFkZCBHVUlETyBDb2RlIGluIGEgdGV4dGJveCBvbiB0aGUgcGFnZSI6ICIiLAorICAgICAgICAgICAgIkFkZCBNSURJIGxpbmsgdG8gYWxsb3cgc3R1ZGVudHMgdG8gaGVhciB0aGUgbXVzaWMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJHVUlETyBDb2RlIjogIiIsCisgICAgICAgICAgICAiR3VpZG8gY29kZSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIGluIGFwcGxldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBHVUlETyBNdXNpYyBOb3RhdGlvbiI6ICIiLAorICAgICAgICAgICAgIk1JREkgRmlsZSI6ICIiLAorICAgICAgICAgICAgIlNvdXJjZSBDb2RlIjogIiIsCisgICAgICAgICAgICAiV2l0aCBNb3ppbGxhLCB0aGUgYXBwbGV0IHdpbGwgbm90IGJlIHZpc2libGUgaW4gZWRpdG9yLCBidXQgb25seSBpbiBXZWIgcGFnZSBhZnRlciBzdWJtaXR0aW5nLiI6ICIiLAorICAgICAgICAgICAgIlpvb20gOiI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIFByZXZpZXciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJPcHRpb25zIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlpvb20iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJQU0xvY2FsIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNMT0NBTCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJDb25maXJtIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIEdlYXJzIGluIG9yZGVyIHRvIHVzZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlIGFuZCBjb25maWd1cmF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkVuYWJsaW5nIExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJJbnN0YWxsIjogIiIsCisgICAgICAgICAgICAiTGVhcm4gQWJvdXQgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCByZWxvYWQgdGhlIHBhZ2UsIGNhdXNpbmcgeW91IHRvIGxvc2UgYW55IHVuc2F2ZWQgd29yay4gIFByZXNzIFwiT0tcIiB0byByZWxvYWQuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgdXNlcyBHb29nbGUgR2VhcnMgdG8gZW5hYmxlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UuICBXaXRoIEdlYXJzIGluc3RhbGxlZCwgeW91IGNhbiBzYXZlIGRyYWZ0cyBvZiB5b3VyIGRvY3VtZW50cyBvbiB5b3VyIGhhcmQgZHJpdmUsIGNvbmZpZ3VyZSBYaW5oYSB0byBsb29rIHRoZSB3YXkgeW91IHdhbnQsIGFuZCBjYXJyeSB0aGlzIGluZm9ybWF0aW9uIHdoZXJldmVyIHlvdSB1c2UgWGluaGEgb24gdGhlIHdlYi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiUFNTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU1NFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWxlOiAiOiAiIiwKKyAgICAgICAgICAgICJJbXBvcnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEZXRhaWxzIjogIiIsCisgICAgICAgICAgICAiRmlsZSBCcm93c2VyIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gICAgVGhlcmUgQyAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgVGhlcmUgQSAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyBcIiBUaGVyZSBCIFwiIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gJyBUaGVyZSBEICciOiAiIiwKKyAgICAgICAgICAgICJMaXN0IG9mIFBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIk5ldyBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIk9wZW4iOiAiIiwKKyAgICAgICAgICAgICJPcGVuIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgeW91J2QgbGlrZSB0byBjcmVhdGUuIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBlcmFzZSBhbnkgdW5zYXZlZCBjb250ZW50LiAgSWYgeW91J3JlIGNlcnRhaW4sIHBsZWFzZSBjbGljayBPSyB0byBjb250aW51ZS4iOiAiIiwKKyAgICAgICAgICAgICJXZWIgVVJMIjogIiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICI8PFBTTG9jYWw+PiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGVuYW1lIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQiOiAiPDxJbnNlcnROb3RlPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlNhdmUiOiAiPDxTYXZlU3VibWl0Pj4iLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiU3BlbGxDaGVja2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogU1BFTExDSEVDS0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkhUTUxBcmVhIFNwZWxsIENoZWNrZXIiOiAiIiwKKyAgICAgICAgICAgICJJbmZvIjogIiIsCisgICAgICAgICAgICAiTGVhcm4iOiAiIiwKKyAgICAgICAgICAgICJwbGl6IHdlaXQgOy0pIjogIiIsCisgICAgICAgICAgICAiU3BlbGwgQ2hlY2tlciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFRFTVBMQVRFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkluc2VydCB0ZW1wbGF0ZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJVbkZvcm1hdCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFVORk9STUFUIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFsbCI6ICIiLAorICAgICAgICAgICAgIkFsbCBIVE1MOiI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIEFyZWEiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBvcHRpb25zIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0dGluZzoiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIENsZWFuZXIiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Qgd2hpY2ggdHlwZXMgb2YgZm9ybWF0dGluZyB5b3Ugd291bGQgbGlrZSB0byByZW1vdmUuIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0aW9uIjogIiIKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9odS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2h1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNzhlZGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9odS5qcwpAQCAtMCwwICsxLDE1NzUgQEAKKy8vIFhpbmhhIExhbmd1YWdlIENvbWJpbmVkIFRyYW5zbGF0aW9uIEZpbGUKKy8vCisvLyBMQU5HOiAiaHUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTlNUUlVDVElPTlMgVE8gVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFlvdXIgdHJhbnNsYXRpb24gbXVzdCBiZSBpbiBVVEYtOCBDaGFyYWN0ZXIgRW5jb2RpbmcuCisvLworLy8gVGhpcyBpcyBhIEpTT04gZW5jb2RlZCBmaWxlIChwbHVzIGNvbW1lbnRzKSwgc3RyaW5ncyBzaG91bGQgYmUgZG91YmxlLXF1b3RlCisvLyBvbmx5LCBkbyBub3QgdXNlIHNpbmdsZSBxdW90ZXMgdG8gc3Vycm91bmQgc3RyaW5ncyAtICJoZWxsbyIsIG5vdCAnaGVsbG8nCisvLyBkbyBub3QgaGF2ZSBhIHRyYWlsaW5nIGNvbW1hIGFmdGVyIHRoZSBsYXN0IGVudHJ5IGluIGEgc2VjdGlvbi4KKy8vCisvLyBPbmx5IGZ1bGwgbGluZSBjb21tZW50cyBhcmUgYWxsb3dlZCAodGhhdCBhIGNvbW1lbnRzIG9jY3VweSBlbnRpcmUgbGluZXMpLgorLy8KKy8vIFNlYXJjaCBmb3IgdGhlIF9fTkVXX1RSQU5TTEFUSU9OU19fIHNlY3Rpb24gYmVsb3csIHRoaXMgaXMgd2hlcmUgeW91IHdpbGwKKy8vIHdhbnQgdG8gZm9jdXMsIHRoaXMgc2VjdGlvbiBpbmNsdWRlcyB0aGluZ3MgdGhhdCBkbyBub3QgcHJlc2VudGx5IGhhdmUgYSAKKy8vIHRyYW5zbGF0aW9uIG9yIGZvciB3aGljaCB0aGUgdHJhbnNsYXRpb24gbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgYWNjdXJhY3kuCisvLworLy8gSW4gdGhlIE5ldyBUcmFuc2xhdGlvbnMgc2VjdGlvbiBhIHRyYW5zbGF0aW9uIHN0cmluZyBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZworLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiIgorLy8gICAgIFRoaXMgbWVhbnMgaXQgaXMgbm90IHRyYW5zbGF0ZWQgeWV0LCBhZGQgeW91ciB0cmFuc2xhdGlvbi4uLgorLy8gICAgICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJLbGluZ29uIFN0cmluZyBIZXJlIgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiVHJhbnNsYXRlZCBTdHJpbmcgSGVyZSIKKy8vICAgICBUaGlzIG1lYW5zIHRoYXQgYW4gZXhpc3RpbmcgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nLCBpbiBzb21lIG90aGVyCisvLyAgICAgc2VjdGlvbiBoYXMgYmVlbiBmb3VuZCwgYW5kIHVzZWQuICBDaGVjayB0aGF0IGl0IGlzIGFwcHJvcHJpdGUgZm9yIHRoaXMKKy8vICAgICBzZWN0aW9uIGFuZCBpZiBpdCBpcywgdGhhdCdzIGZpbmUgbGVhdmUgaXQgYXMgaXMsIG90aGVyd2lzZSBjaGFuZ2UgYXMKKy8vICAgICBhcHByb3ByaWF0ZS4KKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIjw8QW5vdGhlclNlY3Rpb24+PiIKKy8vICAgICBUaGlzIG1lYW5zIHVzZSB0aGUgc2FtZSB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcgYXMgPDxBbm90aGVyU2VjdGlvbj4+CisvLyAgICAgdGhpcyBzYXZlcyB5b3UgcmUtdHJhbmxhdGluZyBzdHJpbmdzLiAgSWYgdGhlIENvbnRleHQgb2YgdGhpcyBzZWN0aW9uCisvLyAgICAgYW5kIHRoZSBjb250ZXh0IG9mIEFub3RoZXJTZWN0aW9uIHNlZW0gdGhlIHNhbWUsIHRoYXQncyBmaW5lIGxlYXZlIGl0CisvLyAgICAgdXNpbmcgdGhhdCB0cmFuc2xhdGlvbiwgYnV0IGlmIHRoaXMgc2VjdGlvbiBuZWVkcyBhIGRpZmZlcmVudCB0cmFuc2xhdGlvbiwgCisvLyAgICAgeW91IGNhbiBwcm92aWRlIGl0IGJ5IHJlcGxhY2luZyB0aGUgbGluayAoPDxBbm90aGVyU2VjdGlvbj4+KSB3aXRoIHRoYXQKKy8vICAgICBuZXcgdHJhbnNsYXRpb24uICBGb3IgZXhhbXBsZSAtIGEgIlRhYmxlIiBpbiBzYXkgIkRhdGFQbHVnaW4iIGlzIAorLy8gICAgIHBlcmhhcHMgdHJhbnNsYXRlZCBkaWZmZXJlbnRseSB0byAiVGFibGUiIGluICJGdXJuaXR1cmVQbHVnaW4iLgorLy8KKy8vIFRFU1RJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgcGxhY2UgeW91ciB0cmFuc2xhdGlvbiBmaWxlIG9uIHlvdXIgd2Vic2VydmVyIHNvbWV3aGVyZSBmb3IgZXhhbXBsZQorLy8KKy8vICAgL3hpbmhhL2xhbmcvbWVyZ2VkL2h1LmpzCisvLworLy8gYW5kIHRoZW4gdGVsbCBYaW5oYSB3aGVyZSB0byBnZXQgaXQgKGJlZm9yZSBsb2FkaW5nIFhpbmhhQ29yZS5qcykgYnkgCisvLworLy8gIF9lZGl0b3JfbGFuZyAgICAgICAgICAgICAgPSAnaHUnOworLy8gIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSAgPSAnL3hpbmhhL2xhbmcvbWVyZ2VkL2h1LmpzJzsKKy8vCisvLyBYaW5oYSB3aWxsIGxvYWQgeW91ciBuZXcgbGFuZ3VhZ2UgZGVmaW5pdGlvbi4KKy8vCisvLyBTVUJNSVRUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IGNyZWF0ZSBhIFRpY2tldCBvbiB0aGUgWGluaGEgd2Vic2l0ZSBhbmQgYXR0YWNoIHlvdXIgdHJhbnNsYXRpb24gCisvLyBmaWxlLgorLy8KKy8vIFRoZSBYaW5oYSBkZXZlbG9wZXJzIHdpbGwgdGFrZSB5b3VyIGZpbGUgYW5kIHVzZSB0aGUgCisvLyAgICAgY29udHJpYi9sY19zcGxpdF9tZXJnZWRfZmlsZS5waHAKKy8vIHNjcmlwdCB0byBsb2FkIGl0IGludG8gdGhlIFhpbmhhIGRpc3RyaWJ1dGlvbi4KKworeworICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIsCisgICAgICAgICJPSyI6ICJSZW5kYmVuIgorICAgIH0sCisgICAgIkFib3V0Qm94IjogeworICAgICAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiTsOpdmplZ3kiCisgICAgfSwKKyAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIk3DqWdzZW0iCisgICAgfSwKKyAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICJPSyI6ICJSZW5kYmVuIgorICAgIH0sCisgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiS8O2esOpcHJlIHrDoXJ0IiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICJTb3JraXrDoXJ0IiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICJCYWxyYSB6w6FydCIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIkpvYmJyYSB6w6FydCIKKyAgICB9LAorICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAiQ2FuY2VsIjogIk3DqWdzZW0iLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIkhpdmF0a296w6FzIEJlc3rDunLDoXNhL03Ds2Rvc8OtdMOhc2EiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICLDmmogYWJsYWsgKF9ibGFuaykiLAorICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJOaW5jcyAodXNlIGltcGxpY2l0KSIsCisgICAgICAgICJPSyI6ICJSZW5kYmVuIiwKKyAgICAgICAgIk90aGVyIjogIk3DoXMiLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlVneWFuYWJiYSBhIGtlcmV0YmUgKF9zZWxmKSIsCisgICAgICAgICJUYXJnZXQ6IjogIkPDqWw6IiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAiQ8OtbSAodG9vbHRpcCk6IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiRmVsc8WRIGtlcmV0IChfdG9wKSIsCisgICAgICAgICJVUkw6IjogIlVSTDoiCisgICAgfSwKKyAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJNw6lnc2VtIiwKKyAgICAgICAgIk9LIjogIlJlbmRiZW4iCisgICAgfSwKKyAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIsCisgICAgICAgICJPSyI6ICJSZW5kYmVuIgorICAgIH0sCisgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIsCisgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIsOaaiBhYmxhayAoX2JsYW5rKSIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIk5pbmNzICh1c2UgaW1wbGljaXQpIiwKKyAgICAgICAgIk9LIjogIlJlbmRiZW4iLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlVneWFuYWJiYSBhIGtlcmV0YmUgKF9zZWxmKSIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCkiOiAiQ8OtbSAodG9vbHRpcCk6IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiRmVsc8WRIGtlcmV0IChfdG9wKSIKKyAgICB9LAorICAgICJGaW5kUmVwbGFjZSI6IHsKKyAgICAgICAgIlJlcGxhY2Ugd2l0aDoiOiAiQ3NlcmUgYSBrw7Z2ZXRrZXrFkXJlOiIKKyAgICB9LAorICAgICJGb3JtcyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJNw6lnc2VtIiwKKyAgICAgICAgIk9LIjogIlJlbmRiZW4iCisgICAgfSwKKyAgICAiRnVsbFBhZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIsCisgICAgICAgICJPSyI6ICJSZW5kYmVuIgorICAgIH0sCisgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAiQ2FuY2VsIjogIk3DqWdzZW0iLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIkVsdsOhbGFzenTDsyB2b25hbCIsCisgICAgICAgICJPSyI6ICJSZW5kYmVuIgorICAgIH0sCisgICAgIkltYWdlTWFuYWdlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJNw6lnc2VtIiwKKyAgICAgICAgIk9LIjogIlJlbmRiZW4iCisgICAgfSwKKyAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAiQ2FuY2VsIjogIk3DqWdzZW0iLAorICAgICAgICAiT0siOiAiUmVuZGJlbiIKKyAgICB9LAorICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJNw6lnc2VtIiwKKyAgICAgICAgIk9LIjogIlJlbmRiZW4iCisgICAgfSwKKyAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJNw6lnc2VtIiwKKyAgICAgICAgIk9LIjogIlJlbmRiZW4iCisgICAgfSwKKyAgICAiSW5zZXJ0Tm90ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJNw6lnc2VtIgorICAgIH0sCisgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIsCisgICAgICAgICJPSyI6ICJSZW5kYmVuIgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJNw6lnc2VtIgorICAgIH0sCisgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAiQ2FuY2VsIjogIk3DqWdzZW0iLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIlTDoWJsw6F6YXQgYmVzesO6csOhc2EiLAorICAgICAgICAiT0siOiAiUmVuZGJlbiIKKyAgICB9LAorICAgICJMaW5rZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSGl2YXRrb3rDoXMgQmVzesO6csOhc2EvTcOzZG9zw610w6FzYSIsCisgICAgICAgICJPSyI6ICJSZW5kYmVuIiwKKyAgICAgICAgIlRhcmdldDoiOiAiQ8OpbDoiLAorICAgICAgICAiVVJMOiI6ICJVUkw6IgorICAgIH0sCisgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIsCisgICAgICAgICJPSyI6ICJSZW5kYmVuIgorICAgIH0sCisgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIKKyAgICB9LAorICAgICJQYXN0ZVRleHQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIsCisgICAgICAgICJPSyI6ICJSZW5kYmVuIgorICAgIH0sCisgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIk3DqWdzZW0iCisgICAgfSwKKyAgICAiUXVpY2tUYWciOiB7CisgICAgICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIKKyAgICB9LAorICAgICJTZXRJZCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJNw6lnc2VtIiwKKyAgICAgICAgIk9LIjogIlJlbmRiZW4iCisgICAgfSwKKyAgICAiU21hcnRSZXBsYWNlIjogeworICAgICAgICAiT0siOiAiUmVuZGJlbiIKKyAgICB9LAorICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIsCisgICAgICAgICJEaWN0aW9uYXJ5IjogIlN6w7N0w6FyIiwKKyAgICAgICAgIkZpbmlzaGVkIGxpc3Qgb2YgbWlzcGVsbGVkIHdvcmRzIjogIkEgdMOpdmVzenRldHQgc3phdmFrIGxpc3TDoWrDoW5hayB2w6lnZSIsCisgICAgICAgICJJIHdpbGwgb3BlbiBpdCBpbiBhIG5ldyBwYWdlLiI6ICJNZWdueWl0w6FzIMO6aiBsYXBvbiIsCisgICAgICAgICJJZ25vcmUiOiAiRWx2ZXTDqXMiLAorICAgICAgICAiSWdub3JlIGFsbCI6ICJNaW5kZW4gZWx2ZXTDqXNlIiwKKyAgICAgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICJBIHbDoWxhc3p0b3R0IHN6w7N0w6FyIHN6ZXJpbnQgbmluY3MgdMOpdmVzenRldHQgc3rDsy4iLAorICAgICAgICAiT0siOiAiUmVuZGJlbiIsCisgICAgICAgICJPcmlnaW5hbCB3b3JkIjogIkVyZWRldGkgc3rDsyIsCisgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIk1lZ2VyxZFzw610w6lzIiwKKyAgICAgICAgIlBsZWFzZSB3YWl0LiAgQ2FsbGluZyBzcGVsbCBjaGVja2VyLiI6ICJLaXMgdMO8cmVsbWV0LCBhIGhlbHllc8OtcsOhc2VsbGVuxZFyesWRIGjDrXbDoXNhIGZvbHlhbWF0YmFuLiIsCisgICAgICAgICJQbGVhc2Ugd2FpdDogY2hhbmdpbmcgZGljdGlvbmFyeSB0byI6ICJLaXMgdMO8cmVsbWV0LCBzesOzdMOhciBjc2Vyw6lqZSIsCisgICAgICAgICJSZS1jaGVjayI6ICLDmmpyYWVsbGVuxZFyesOpcyIsCisgICAgICAgICJSZXBsYWNlIjogIkNzZXJlIiwKKyAgICAgICAgIlJlcGxhY2UgYWxsIjogIk1pbmQgY3NlcsOpamUiLAorICAgICAgICAiUmVwbGFjZSB3aXRoIjogIkNzZXJlIGEga8O2dmV0a2V6xZFyZToiLAorICAgICAgICAiU3BlbGwtY2hlY2siOiAiSGVseWVzw61yw6FzZWxsZW7FkXJ6w6lzIiwKKyAgICAgICAgIlN1Z2dlc3Rpb25zIjogIlRpcHBlayIsCisgICAgICAgICJUaGlzIHdpbGwgZHJvcCBjaGFuZ2VzIGFuZCBxdWl0IHNwZWxsIGNoZWNrZXIuICBQbGVhc2UgY29uZmlybS4iOiAiS2lsw6lww6lzIGEgdsOhbHRvesOhc29rIGVsZG9iw6Fzw6F2YWwuIErDs3bDoWhhZ3lqYT8iCisgICAgfSwKKyAgICAiU3VwZXJDbGVhbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJNw6lnc2VtIiwKKyAgICAgICAgIk9LIjogIlJlbmRiZW4iCisgICAgfSwKKyAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAiQ2FuY2VsIjogIk3DqWdzZW0iLAorICAgICAgICAiT0siOiAiUmVuZGJlbiIKKyAgICB9LAorICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJNw6lnc2VtIgorICAgIH0sCisgICAgIlVuRm9ybWF0IjogeworICAgICAgICAiQ2FuY2VsIjogIk3DqWdzZW0iLAorICAgICAgICAiT0siOiAiUmVuZGJlbiIKKyAgICB9LAorICAgICJYaW5oYSI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIk7DqXZqZWd5IiwKKyAgICAgICAgIkJhY2tncm91bmQgQ29sb3IiOiAiSMOhdHTDqXJzesOtbiIsCisgICAgICAgICJCb2xkIjogIkbDqWxrw7Z2w6lyIiwKKyAgICAgICAgIkJ1bGxldGVkIExpc3QiOiAiU3rDoW1vemF0bGFuIGxpc3RhIiwKKyAgICAgICAgIkNvcHkgc2VsZWN0aW9uIjogIk3DoXNvbMOhcyIsCisgICAgICAgICJDdXJyZW50IHN0eWxlIjogIkFrdHXDoWxpcyBzdMOtbHVzIiwKKyAgICAgICAgIkN1dCBzZWxlY3Rpb24iOiAiS2l2w6Fnw6FzIiwKKyAgICAgICAgIkRlY3JlYXNlIEluZGVudCI6ICJCZWjDunrDoXMgY3PDtmtrZW50w6lzZSIsCisgICAgICAgICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICJJcsOhbnkgYmFscsOzbCBqb2JicmEiLAorICAgICAgICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiSXLDoW55IGpvYmJyw7NsIGJhbHJhIiwKKyAgICAgICAgIkZvbnQgQ29sb3IiOiAiS2FyYWt0ZXJzesOtbiIsCisgICAgICAgICJIZWxwIHVzaW5nIGVkaXRvciI6ICJTw7pnw7MiLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIkVsdsOhbGFzenTDsyB2b25hbCIsCisgICAgICAgICJJbmNyZWFzZSBJbmRlbnQiOiAiQmVow7p6w6FzIG7DtnZlbMOpc2UiLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIlTDoWJsw6F6YXQgYmVzesO6csOhc2EiLAorICAgICAgICAiSW5zZXJ0IFdlYiBMaW5rIjogIkhpcGVyaGl2YXRrb3rDoXMgYmVzesO6csOhc2EiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJLw6lwIGJlc3rDunLDoXNhIiwKKyAgICAgICAgIkl0YWxpYyI6ICJExZFsdCIsCisgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICJLw7Z6w6lwcmUgesOhcnQiLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIlNvcmtpesOhcnQiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIkJhbHJhIHrDoXJ0IiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiSm9iYnJhIHrDoXJ0IiwKKyAgICAgICAgIk9yZGVyZWQgTGlzdCI6ICJTesOhbW96b3R0IGxpc3RhIiwKKyAgICAgICAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIkJlaWxsZXN6dMOpcyIsCisgICAgICAgICJQYXRoIjogIkhpZXJhcmNoaWEiLAorICAgICAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiw5pqcmEgdsOpZ3JlaGFqdMOhcyIsCisgICAgICAgICJTdHJpa2V0aHJvdWdoIjogIsOBdGjDunpvdHQiLAorICAgICAgICAiU3Vic2NyaXB0IjogIkFsc8OzIGluZGV4IiwKKyAgICAgICAgIlN1cGVyc2NyaXB0IjogIkZlbHPFkSBpbmRleCIsCisgICAgICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiSFRNTCBmb3Jyw6FzIGJlL2tpIiwKKyAgICAgICAgIlVuZGVybGluZSI6ICJBbMOhaMO6em90dCIsCisgICAgICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJWaXNzemF2b27DoXMiLAorICAgICAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIkZvcnLDoXMgbcOzZC4gVmlzc3phdsOhbHTDoXMgWzw+XSBnb21iIgorICAgIH0sCisgICAgIl9fTkVXX1RSQU5TTEFUSU9OU19fIjogeworICAgICAgICAiQWJicmV2aWF0aW9uIjogeworICAgICAgICAgICAgIkFiYnJldmlhdGlvbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICIiLAorICAgICAgICAgICAgIkV4cGFuc2lvbjoiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQWJvdXRCb3giOiB7CisgICAgICAgICAgICAiQ2xvc2UiOiAiPDxYaW5oYT4+IgorICAgICAgICB9LAorICAgICAgICAiQ2hhckNvdW50ZXIiOiB7CisgICAgICAgICAgICAiLi4uIGluIHByb2dyZXNzIjogIiIsCisgICAgICAgICAgICAiQ2hhcnMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIiIsCisgICAgICAgICAgICAiV29yZHMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2hhcmFjdGVyTWFwIjogeworICAgICAgICAgICAgIkluc2VydCBzcGVjaWFsIGNoYXJhY3RlciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDb2xvclBpY2tlciI6IHsKKyAgICAgICAgICAgICJDbGljayBhIGNvbG9yLi4uIjogIiIsCisgICAgICAgICAgICAiQ29sb3I6ICI6ICIiLAorICAgICAgICAgICAgIlNhbXBsZSI6ICIiLAorICAgICAgICAgICAgIldlYiBTYWZlOiAiOiAiIiwKKyAgICAgICAgICAgICJDbG9zZSI6ICI8PFhpbmhhPj4iCisgICAgICAgIH0sCisgICAgICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgICAgICJfRGVsZXRlIFJvdyI6ICIiLAorICAgICAgICAgICAgIl9JbWFnZSBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiX01vZGlmeSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1JlbW92ZSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1RhYmxlIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJDX2VsbCBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiQ2hlY19rIExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJDb3B5IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIGEgbGluayI6ICIiLAorICAgICAgICAgICAgIkN1cnJlbnQgVVJMIGlzIjogIiIsCisgICAgICAgICAgICAiQ3V0IjogIiIsCisgICAgICAgICAgICAiRGVfbGV0ZSBDb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgQ2VsbCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIiIsCisgICAgICAgICAgICAiSG93IGRpZCB5b3UgZ2V0IGhlcmU/IChQbGVhc2UgcmVwb3J0ISkiOiAiIiwKKyAgICAgICAgICAgICJJX25zZXJ0IFJvdyBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYWZ0ZXIgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJMaW5rIHBvaW50cyB0bzoiOiAiIiwKKyAgICAgICAgICAgICJNYWtlIGxpbl9rLi4uIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiUGFzdGUiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGVsZW1lbnQ6IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJSb193IFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBpbWFnZSBwcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIFJvdyBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlVubGluayB0aGUgY3VycmVudCBlbGVtZW50IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIiIsCisgICAgICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRlZmluaXRpb25MaXN0IjogeworICAgICAgICAgICAgImRlZmluaXRpb24gZGVzY3JpcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGxpc3QiOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIHRlcm0iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRGlhbG9ncyI6IHsKKyAgICAgICAgICAgICJTb21lIFRleHQgSGVyZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEeW5hbWljQ1NTIjogeworICAgICAgICAgICAgIkNob29zZSBzdHlsZXNoZWV0IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCI6ICIiLAorICAgICAgICAgICAgIlVuZGVmaW5lZCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFZGl0VGFnIjogeworICAgICAgICAgICAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICIiLAorICAgICAgICAgICAgIkVkaXQgVGFnIEJ5IFBlZyI6ICIiLAorICAgICAgICAgICAgIlRhZyBFZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICAgICAiIT0iOiAiIiwKKyAgICAgICAgICAgICIhaW4iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7LSI6ICIiLAorICAgICAgICAgICAgIiZndDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSZndDsiOiAiIiwKKyAgICAgICAgICAgICImbHQ7eCZndDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYCFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgLmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAwYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDJgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgM2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA0YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA3YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDhgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGBlYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsmbmJzcDtgMWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YCt7Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2AtOlxcIGAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLXs6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YENgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGNvc2AiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgbG5gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHBpYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgc2luYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0YW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRpbWVzYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZxdW90O3RleHQmcXVvdDsiOiAiIiwKKyAgICAgICAgICAgICInK2Zvcm11bGErJyI6ICIiLAorICAgICAgICAgICAgIigobiksKGspKSI6ICIiLAorICAgICAgICAgICAgIih4KzEpLyh4LTEpIjogIiIsCisgICAgICAgICAgICAiKiI6ICIiLAorICAgICAgICAgICAgIioqIjogIiIsCisgICAgICAgICAgICAiKy0iOiAiIiwKKyAgICAgICAgICAgICItJmd0OyI6ICIiLAorICAgICAgICAgICAgIi0mbHQ7IjogIiIsCisgICAgICAgICAgICAiLToiOiAiIiwKKyAgICAgICAgICAgICItPSI6ICIiLAorICAgICAgICAgICAgIi8vIjogIiIsCisgICAgICAgICAgICAiL18iOiAiIiwKKyAgICAgICAgICAgICI6LiI6ICIiLAorICAgICAgICAgICAgIj0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiQCI6ICIiLAorICAgICAgICAgICAgIltbYSxiXSxbYyxkXV0iOiAiIiwKKyAgICAgICAgICAgICJcXFxcIjogIiIsCisgICAgICAgICAgICAiXFxuQ2xpY2sgaW4gdGhlIGJveCB0byB1c2UgeW91ciBrZXlib2FyZCBvciB1c2UgdGhlIGJ1dHRvbnNcXG4iOiAiIiwKKyAgICAgICAgICAgICJeXiI6ICIiLAorICAgICAgICAgICAgIl5eXiI6ICIiLAorICAgICAgICAgICAgIl9ffCI6ICIiLAorICAgICAgICAgICAgIl98XyI6ICIiLAorICAgICAgICAgICAgImAhPWAiOiAiIiwKKyAgICAgICAgICAgICJgIWluYCI6ICIiLAorICAgICAgICAgICAgImAmYW5kO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmNhcDtgIjogIiIsCisgICAgICAgICAgICAiYCZjdXA7YCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7LWAiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDt4Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJm9yO2AiOiAiIiwKKyAgICAgICAgICAgICJgJnF1b3Q7dGV4dCZxdW90O2AiOiAiIiwKKyAgICAgICAgICAgICJgKChuKSwoaykpYCI6ICIiLAorICAgICAgICAgICAgImAoeCsxKS8oeC0xKWAiOiAiIiwKKyAgICAgICAgICAgICJgKipgIjogIiIsCisgICAgICAgICAgICAiYCpgIjogIiIsCisgICAgICAgICAgICAiYCstYCI6ICIiLAorICAgICAgICAgICAgImAtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLSZsdDtgIjogIiIsCisgICAgICAgICAgICAiYC06YCI6ICIiLAorICAgICAgICAgICAgImAtPWAiOiAiIiwKKyAgICAgICAgICAgICJgLy9gIjogIiIsCisgICAgICAgICAgICAiYC9fYCI6ICIiLAorICAgICAgICAgICAgImA6LmAiOiAiIiwKKyAgICAgICAgICAgICJgPSZndDtgIjogIiIsCisgICAgICAgICAgICAiYEBgIjogIiIsCisgICAgICAgICAgICAiYFtbYSxiXSxbYyxkXV1gIjogIiIsCisgICAgICAgICAgICAiYFxcXFxgIjogIiIsCisgICAgICAgICAgICAiYF9ffGAiOiAiIiwKKyAgICAgICAgICAgICJgX3xfYCI6ICIiLAorICAgICAgICAgICAgImBBQWAiOiAiIiwKKyAgICAgICAgICAgICJgYWxlcGhgIjogIiIsCisgICAgICAgICAgICAiYGFscGhhYCI6ICIiLAorICAgICAgICAgICAgImBhbmRgIjogIiIsCisgICAgICAgICAgICAiYGJhcmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgQ0NgIjogIiIsCisgICAgICAgICAgICAiYGNjYWAiOiAiIiwKKyAgICAgICAgICAgICJgY2hpYCI6ICIiLAorICAgICAgICAgICAgImBkYXJyYCI6ICIiLAorICAgICAgICAgICAgImBkZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsYCI6ICIiLAorICAgICAgICAgICAgImBEZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRpYW1vbmRgIjogIiIsCisgICAgICAgICAgICAiYGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGR5L2R4YCI6ICIiLAorICAgICAgICAgICAgImBFRWAiOiAiIiwKKyAgICAgICAgICAgICJgZXBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgZXRhYCI6ICIiLAorICAgICAgICAgICAgImBmcmFgIjogIiIsCisgICAgICAgICAgICAiYEdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBnYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ3JhZGAiOiAiIiwKKyAgICAgICAgICAgICJgaGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaGF0YWAiOiAiIiwKKyAgICAgICAgICAgICJgaWZgIjogIiIsCisgICAgICAgICAgICAiYGluYCI6ICIiLAorICAgICAgICAgICAgImBpbnRgIjogIiIsCisgICAgICAgICAgICAiYGlvdGFgIjogIiIsCisgICAgICAgICAgICAiYGthcHBhYCI6ICIiLAorICAgICAgICAgICAgImBMYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYGxhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGltXyh4LSZndDtvbylgIjogIiIsCisgICAgICAgICAgICAiYGxvZ2AiOiAiIiwKKyAgICAgICAgICAgICJgbXVgIjogIiIsCisgICAgICAgICAgICAiYE5OYCI6ICIiLAorICAgICAgICAgICAgImBubmAiOiAiIiwKKyAgICAgICAgICAgICJgbm90YCI6ICIiLAorICAgICAgICAgICAgImBudWAiOiAiIiwKKyAgICAgICAgICAgICJgbytgIjogIiIsCisgICAgICAgICAgICAiYG8uYCI6ICIiLAorICAgICAgICAgICAgImBPL2AiOiAiIiwKKyAgICAgICAgICAgICJgb2ludGAiOiAiIiwKKyAgICAgICAgICAgICJgb21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYE9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBvb2AiOiAiIiwKKyAgICAgICAgICAgICJgb3JgIjogIiIsCisgICAgICAgICAgICAiYG94YCI6ICIiLAorICAgICAgICAgICAgImBwaGlgIjogIiIsCisgICAgICAgICAgICAiYFBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGlgIjogIiIsCisgICAgICAgICAgICAiYHBpYCI6ICIiLAorICAgICAgICAgICAgImBwcm9kYCI6ICIiLAorICAgICAgICAgICAgImBwcm9wYCI6ICIiLAorICAgICAgICAgICAgImBQc2lgIjogIiIsCisgICAgICAgICAgICAiYHBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgUVFgIjogIiIsCisgICAgICAgICAgICAiYHF1YWRgIjogIiIsCisgICAgICAgICAgICAiYHJBcnJgIjogIiIsCisgICAgICAgICAgICAiYHJob2AiOiAiIiwKKyAgICAgICAgICAgICJgcm9vdChuKSh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgUlJgIjogIiIsCisgICAgICAgICAgICAiYHNmYWAiOiAiIiwKKyAgICAgICAgICAgICJgU2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYHNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzcXJ0KHgpYCI6ICIiLAorICAgICAgICAgICAgImBzcXVhcmVgIjogIiIsCisgICAgICAgICAgICAiYHN0YWNrcmVsKC0mZ3Q7KSgrKWAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViYCI6ICIiLAorICAgICAgICAgICAgImBzdWJlYCI6ICIiLAorICAgICAgICAgICAgImBzdW1gIjogIiIsCisgICAgICAgICAgICAiYHN1cGAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwZWAiOiAiIiwKKyAgICAgICAgICAgICJgdGF1YCI6ICIiLAorICAgICAgICAgICAgImBUaGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdGhldGFgIjogIiIsCisgICAgICAgICAgICAiYFRUYCI6ICIiLAorICAgICAgICAgICAgImB0dGFgIjogIiIsCisgICAgICAgICAgICAiYHVhcnJgIjogIiIsCisgICAgICAgICAgICAiYHVsYWAiOiAiIiwKKyAgICAgICAgICAgICJgdXBzaWxvbmAiOiAiIiwKKyAgICAgICAgICAgICJgdXVgIjogIiIsCisgICAgICAgICAgICAiYHZlY2FgIjogIiIsCisgICAgICAgICAgICAiYHZ2YCI6ICIiLAorICAgICAgICAgICAgImB4XyhtbilgIjogIiIsCisgICAgICAgICAgICAiYFhpYCI6ICIiLAorICAgICAgICAgICAgImB4aWAiOiAiIiwKKyAgICAgICAgICAgICJgeHhgIjogIiIsCisgICAgICAgICAgICAiYHpldGFgIjogIiIsCisgICAgICAgICAgICAiYFpaYCI6ICIiLAorICAgICAgICAgICAgImB8LSZndDtgIjogIiIsCisgICAgICAgICAgICAiYHwtLWAiOiAiIiwKKyAgICAgICAgICAgICJgfD09YCI6ICIiLAorICAgICAgICAgICAgImB8X19gIjogIiIsCisgICAgICAgICAgICAiYHx+YCI6ICIiLAorICAgICAgICAgICAgImB+PWAiOiAiIiwKKyAgICAgICAgICAgICJgfnxgIjogIiIsCisgICAgICAgICAgICAiYH5+YCI6ICIiLAorICAgICAgICAgICAgIkFBIjogIiIsCisgICAgICAgICAgICAiYWxlcGgiOiAiIiwKKyAgICAgICAgICAgICJhbHBoYSI6ICIiLAorICAgICAgICAgICAgImFuZCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aCBGb3JtdWxhIElucHV0IjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoTUwgRXhhbXBsZSI6ICIiLAorICAgICAgICAgICAgImJhcmEiOiAiIiwKKyAgICAgICAgICAgICJCYXNlZCBvbiBBU0NJSU1hdGhNTCBieSI6ICIiLAorICAgICAgICAgICAgImJiYSI6ICIiLAorICAgICAgICAgICAgImJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiZXRhIjogIiIsCisgICAgICAgICAgICAiQ0MiOiAiIiwKKyAgICAgICAgICAgICJjY2EiOiAiIiwKKyAgICAgICAgICAgICJjaGkiOiAiIiwKKyAgICAgICAgICAgICJkYXJyIjogIiIsCisgICAgICAgICAgICAiZGRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkZWwiOiAiIiwKKyAgICAgICAgICAgICJkZWx0YSI6ICIiLAorICAgICAgICAgICAgIkRlbHRhIjogIiIsCisgICAgICAgICAgICAiZGlhbW9uZCI6ICIiLAorICAgICAgICAgICAgImRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkeS9keCI6ICIiLAorICAgICAgICAgICAgIkVFIjogIiIsCisgICAgICAgICAgICAiZXBzaSI6ICIiLAorICAgICAgICAgICAgImV0YSI6ICIiLAorICAgICAgICAgICAgIkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFzY2lpTWF0aE1MIHZpc2l0IHRoaXMgcGFnZToiOiAiIiwKKyAgICAgICAgICAgICJGb3JtdWxhIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgImZyYSI6ICIiLAorICAgICAgICAgICAgImdhbW1hIjogIiIsCisgICAgICAgICAgICAiR2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJncmFkIjogIiIsCisgICAgICAgICAgICAiaEFyciI6ICIiLAorICAgICAgICAgICAgImhhcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXRhIjogIiIsCisgICAgICAgICAgICAiaWYiOiAiIiwKKyAgICAgICAgICAgICJpbiI6ICIiLAorICAgICAgICAgICAgIklucHV0IjogIiIsCisgICAgICAgICAgICAiaW50IjogIiIsCisgICAgICAgICAgICAiaW50X2FeYmYoeClkeCI6ICIiLAorICAgICAgICAgICAgImlvdGEiOiAiIiwKKyAgICAgICAgICAgICJrYXBwYSI6ICIiLAorICAgICAgICAgICAgIkxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhcnIiOiAiIiwKKyAgICAgICAgICAgICJsQXJyIjogIiIsCisgICAgICAgICAgICAibGltXyh4LSZndDtvbykiOiAiIiwKKyAgICAgICAgICAgICJtdSI6ICIiLAorICAgICAgICAgICAgIk5OIjogIiIsCisgICAgICAgICAgICAibm4iOiAiIiwKKyAgICAgICAgICAgICJubm4iOiAiIiwKKyAgICAgICAgICAgICJub3QiOiAiIiwKKyAgICAgICAgICAgICJudSI6ICIiLAorICAgICAgICAgICAgIm8rIjogIiIsCisgICAgICAgICAgICAiby4iOiAiIiwKKyAgICAgICAgICAgICJPLyI6ICIiLAorICAgICAgICAgICAgIm9pbnQiOiAiIiwKKyAgICAgICAgICAgICJPbWVnYSI6ICIiLAorICAgICAgICAgICAgIm9tZWdhIjogIiIsCisgICAgICAgICAgICAib28iOiAiIiwKKyAgICAgICAgICAgICJvciI6ICIiLAorICAgICAgICAgICAgIm94IjogIiIsCisgICAgICAgICAgICAicGhpIjogIiIsCisgICAgICAgICAgICAiUGhpIjogIiIsCisgICAgICAgICAgICAicGkiOiAiIiwKKyAgICAgICAgICAgICJQaSI6ICIiLAorICAgICAgICAgICAgIlByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJwcm9kIjogIiIsCisgICAgICAgICAgICAicHJvcCI6ICIiLAorICAgICAgICAgICAgInBzaSI6ICIiLAorICAgICAgICAgICAgIlBzaSI6ICIiLAorICAgICAgICAgICAgIlFRIjogIiIsCisgICAgICAgICAgICAicXVhZCI6ICIiLAorICAgICAgICAgICAgInJBcnIiOiAiIiwKKyAgICAgICAgICAgICJyaG8iOiAiIiwKKyAgICAgICAgICAgICJyb290KG4pKHgpIjogIiIsCisgICAgICAgICAgICAiUlIiOiAiIiwKKyAgICAgICAgICAgICJzZmEiOiAiIiwKKyAgICAgICAgICAgICJzaWdtYSI6ICIiLAorICAgICAgICAgICAgIlNpZ21hIjogIiIsCisgICAgICAgICAgICAic3FydCh4KSI6ICIiLAorICAgICAgICAgICAgInNxdWFyZSI6ICIiLAorICAgICAgICAgICAgInN0YWNrcmVsKC0mZ3Q7KSgrKSI6ICIiLAorICAgICAgICAgICAgInN1YiI6ICIiLAorICAgICAgICAgICAgInN1YmUiOiAiIiwKKyAgICAgICAgICAgICJzdW0iOiAiIiwKKyAgICAgICAgICAgICJzdW1fKG49MSleb28iOiAiIiwKKyAgICAgICAgICAgICJzdXAiOiAiIiwKKyAgICAgICAgICAgICJzdXBlIjogIiIsCisgICAgICAgICAgICAidGF1IjogIiIsCisgICAgICAgICAgICAiVGhldGEiOiAiIiwKKyAgICAgICAgICAgICJ0aGV0YSI6ICIiLAorICAgICAgICAgICAgIlRUIjogIiIsCisgICAgICAgICAgICAidHRhIjogIiIsCisgICAgICAgICAgICAidWFyciI6ICIiLAorICAgICAgICAgICAgInVsYSI6ICIiLAorICAgICAgICAgICAgInVwc2lsb24iOiAiIiwKKyAgICAgICAgICAgICJ1dSI6ICIiLAorICAgICAgICAgICAgInV1dSI6ICIiLAorICAgICAgICAgICAgInZlY2EiOiAiIiwKKyAgICAgICAgICAgICJ2diI6ICIiLAorICAgICAgICAgICAgInZ2diI6ICIiLAorICAgICAgICAgICAgInheKG0rbikiOiAiIiwKKyAgICAgICAgICAgICJ4XyhtbikiOiAiIiwKKyAgICAgICAgICAgICJYaSI6ICIiLAorICAgICAgICAgICAgInhpIjogIiIsCisgICAgICAgICAgICAieHgiOiAiIiwKKyAgICAgICAgICAgICJ6ZXRhIjogIiIsCisgICAgICAgICAgICAiWloiOiAiIiwKKyAgICAgICAgICAgICJ8LSZndDsiOiAiIiwKKyAgICAgICAgICAgICJ8LS0iOiAiIiwKKyAgICAgICAgICAgICJ8PT0iOiAiIiwKKyAgICAgICAgICAgICJ8X18iOiAiIiwKKyAgICAgICAgICAgICJ8fiI6ICIiLAorICAgICAgICAgICAgIn49IjogIiIsCisgICAgICAgICAgICAifnwiOiAiIiwKKyAgICAgICAgICAgICJ+fiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGYW5jeVNlbGVjdHMiOiB7CisgICAgICAgICAgICAiJytvcHQudGV4dCsnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbmRSZXBsYWNlIjogeworICAgICAgICAgICAgIic7XHJcbiAgdmFyIHRhZ2MgPSAnIjogIiIsCisgICAgICAgICAgICAiQ2FzZSBzZW5zaXRpdmUgc2VhcmNoIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIiOiAiIiwKKyAgICAgICAgICAgICJEb25lIjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIHRleHQgeW91IHdhbnQgdG8gZmluZCI6ICIiLAorICAgICAgICAgICAgIkZpbmQgYW5kIFJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJmb3VuZCBpdGVtIjogIiIsCisgICAgICAgICAgICAiZm91bmQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJIaWdobGlnaHQiOiAiIiwKKyAgICAgICAgICAgICJJbmZvcm0gYSByZXBsYWNlbWVudCB3b3JkIjogIiIsCisgICAgICAgICAgICAiTmV4dCI6ICIiLAorICAgICAgICAgICAgIm5vdCBmb3VuZCI6ICIiLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtIjogIiIsCisgICAgICAgICAgICAicmVwbGFjZWQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJTZWFyY2ggZm9yOiI6ICIiLAorICAgICAgICAgICAgIlN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IjogIiIsCisgICAgICAgICAgICAiVW5kbyI6ICIiLAorICAgICAgICAgICAgIldob2xlIHdvcmRzIG9ubHkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiRW50ZXIgdGhlIG5hbWUgZm9yIG5ldyBvcHRpb24uIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgRm9ybS4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBtdWx0aS1saW5lIHRleHQgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcmFkaW8gYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFNlbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgU2VsZWN0Li4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1zIjogeworICAgICAgICAgICAgIidvbkNsaWNrJz0iOiAiIiwKKyAgICAgICAgICAgICJBY2Nlc3MgS2V5OiI6ICIiLAorICAgICAgICAgICAgIkFjdGlvbiBVUkw6IjogIiIsCisgICAgICAgICAgICAiQnV0dG9uIFNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkNoZWNrZWQiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zOiI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQgdGV4dCAob3B0aW9uYWwpIjogIiIsCisgICAgICAgICAgICAiRGltZW5zaW9ucyI6ICIiLAorICAgICAgICAgICAgIkRpc2FibGVkIjogIiIsCisgICAgICAgICAgICAiRW5jb2Rpbmc6IjogIiIsCisgICAgICAgICAgICAiRm9yIENvbnRyb2w6IjogIiIsCisgICAgICAgICAgICAiRm9ybSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IElOUFVUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gaGFuZGxlciBzY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiR2V0IjogIiIsCisgICAgICAgICAgICAiSGFyZCI6ICIiLAorICAgICAgICAgICAgIkhlaWdodCBpbiBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkhUTUwtRm9ybSB0byBDR0kgKGRlZmF1bHQpIjogIiIsCisgICAgICAgICAgICAiSW1hZ2Ugc291cmNlIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMOiI6ICIiLAorICAgICAgICAgICAgIkluaXRpYWwgVGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IEZJRUxEU0VUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IElOUFVUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IExBQkVMIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFNFTEVDVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkphdmFzY3JpcHQgZm9yIGJ1dHRvbiBjbGljayI6ICIiLAorICAgICAgICAgICAgIkxhYmVsOiI6ICIiLAorICAgICAgICAgICAgIkxlZ2VuZDoiOiAiIiwKKyAgICAgICAgICAgICJNYXggbGVuZ3RoOiI6ICIiLAorICAgICAgICAgICAgIk1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWNjZXB0ZWQiOiAiIiwKKyAgICAgICAgICAgICJNZXRob2Q6IjogIiIsCisgICAgICAgICAgICAibXVsdGlwYXJ0IEZvcm0gRGF0YSAoRmlsZS1VcGxvYWQpIjogIiIsCisgICAgICAgICAgICAiTmFtZSI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIm5hbWUgb2YgdGhlIHRleHRhcmVhIjogIiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiIiwKKyAgICAgICAgICAgICJub3JtYWwiOiAiIiwKKyAgICAgICAgICAgICJub3dyYXAiOiAiIiwKKyAgICAgICAgICAgICJPZmYiOiAiIiwKKyAgICAgICAgICAgICJQaHlzaWNhbCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciBhIExhYmVsIjogIiIsCisgICAgICAgICAgICAiUG9zdCI6ICIiLAorICAgICAgICAgICAgInByZSI6ICIiLAorICAgICAgICAgICAgIlJlYWQgT25seSI6ICIiLAorICAgICAgICAgICAgIlJvd3M6IjogIiIsCisgICAgICAgICAgICAiU2l6ZSBvZiB0ZXh0IGJveCBpbiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiU2l6ZToiOiAiIiwKKyAgICAgICAgICAgICJTb2Z0IjogIiIsCisgICAgICAgICAgICAiVGFiIEluZGV4OiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBGcmFtZToiOiAiIiwKKyAgICAgICAgICAgICJUZXh0OiI6ICIiLAorICAgICAgICAgICAgIlVSTCBvZiBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlZhbHVlIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiVmFsdWU6IjogIiIsCisgICAgICAgICAgICAiVmlydHVhbCI6ICIiLAorICAgICAgICAgICAgIldpZHRoIGluIG51bWJlciBvZiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiV3JhcCBNb2RlOiI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgTmFtZSI6ICIiLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IgorICAgICAgICB9LAorICAgICAgICAiRnVsbFBhZ2UiOiB7CisgICAgICAgICAgICAiLi4uIjogIiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIkJhY2tncm91bmQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiQ2hhcmFjdGVyIHNldDoiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoSVNPLTg4NTktNSkiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoS09JOC1SKSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChXSU5ET1dTLTEyNTEpIjogIiIsCisgICAgICAgICAgICAiRGVzY3JpcHRpb246IjogIiIsCisgICAgICAgICAgICAiRE9DVFlQRToiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiRG9jdW1lbnQgdGl0bGU6IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZHM6IjogIiIsCisgICAgICAgICAgICAiUHJpbWFyeSBzdHlsZS1zaGVldDoiOiAiIiwKKyAgICAgICAgICAgICJUZXh0IGNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIlVURi04IChyZWNvbW1lbmRlZCkiOiAiIiwKKyAgICAgICAgICAgICJ3ZXN0ZXJuIChJU08tODg1OS0xKSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGdWxsU2NyZWVuIjogeworICAgICAgICAgICAgIk1heGltaXplL01pbmltaXplIEVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJHZWNrbyI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICAgICAiJiN4MDBkNzsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIiIsCisgICAgICAgICAgICAiQ2VudGVyIjogIiIsCisgICAgICAgICAgICAiQ29sb3I6IjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9lZGl0IGhvcml6b250YWwgcnVsZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEhvcml6b250YWwgUnVsZSI6ICIiLAorICAgICAgICAgICAgIkxheW91dCI6ICIiLAorICAgICAgICAgICAgIkxlZnQiOiAiIiwKKyAgICAgICAgICAgICJObyBzaGFkaW5nIjogIiIsCisgICAgICAgICAgICAicGVyY2VudCI6ICIiLAorICAgICAgICAgICAgInBpeGVscyI6ICIiLAorICAgICAgICAgICAgIlJpZ2h0IjogIiIsCisgICAgICAgICAgICAiU3R5bGUiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5saW5lU3R5bGVyIjogeworICAgICAgICAgICAgIkJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciI6ICIiLAorICAgICAgICAgICAgIkJvdHRvbSI6ICIiLAorICAgICAgICAgICAgIkNoYXIiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkNTUyBTdHlsZSI6ICIiLAorICAgICAgICAgICAgIkZHIENvbG9yIjogIiIsCisgICAgICAgICAgICAiRmxvYXQiOiAiIiwKKyAgICAgICAgICAgICJKdXN0aWZ5IjogIiIsCisgICAgICAgICAgICAiTWFyZ2luIjogIiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIiIsCisgICAgICAgICAgICAiTm9uZSI6ICIiLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJUZXh0IGFsaWduIjogIiIsCisgICAgICAgICAgICAiVG9wIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWwgYWxpZ24iOiAiIiwKKyAgICAgICAgICAgICItIjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiQ2VudGVyIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSGVpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgInBlcmNlbnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJwaXhlbHMiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIldpZHRoIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgICAgICJBbmNob3IgbmFtZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBBbmNob3IiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydEltYWdlIjogeworICAgICAgICAgICAgIkFic2JvdHRvbSI6ICIiLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICIiLAorICAgICAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIiIsCisgICAgICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiIiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICIiLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiIiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIiIsCisgICAgICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiU3BhY2luZyI6ICIiLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWw6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICIiLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkxheW91dCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAgICAgIkluc2VydCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBmb290bm90ZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBOb3RlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBhZ2VicmVhayI6IHsKKyAgICAgICAgICAgICJQYWdlIGJyZWFrIjogIiIsCisgICAgICAgICAgICAiUGFnZSBCcmVhayI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbWlsZXkiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IFNtaWxleSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0IjogeworICAgICAgICAgICAgIlxcbiAgVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmdcXG4iOiAiIiwKKyAgICAgICAgICAgICJIaWRlIHByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgU25pcHBldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIiIsCisgICAgICAgICAgICAiTGluazEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMiI6ICIiLAorICAgICAgICAgICAgIkxpbmszIjogIiIsCisgICAgICAgICAgICAiTGluazQiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNSI6ICIiLAorICAgICAgICAgICAgIlNob3cgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nIjogIiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldDIiOiB7CisgICAgICAgICAgICAiQWxsIENhdGVnb3JpZXMiOiAiIiwKKyAgICAgICAgICAgICJGaWx0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMgSFRNTCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyB0ZW1wbGF0ZSB2YXJpYWJsZSI6ICIiLAorICAgICAgICAgICAgIk9ubHkgc2VhcmNoIHdvcmQgYmVnaW5uaW5nIjogIiIsCisgICAgICAgICAgICAiSFRNTCI6ICI8PENoYXJDb3VudGVyPj4iLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICI8PEluc2VydFNuaXBwZXQ+PiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgICAgICJDYXB0aW9uIjogIiIsCisgICAgICAgICAgICAiQ2FwdGlvbiBmb3IgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICIiLAorICAgICAgICAgICAgIkNlbGwgc3BhY2luZzoiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZSBib3JkZXJzOiI6ICIiLAorICAgICAgICAgICAgIkNvbHM6IjogIiIsCisgICAgICAgICAgICAiRW0iOiAiIiwKKyAgICAgICAgICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiTGF5b3UiOiAiIiwKKyAgICAgICAgICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIk51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICIiLAorICAgICAgICAgICAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIiIsCisgICAgICAgICAgICAiU3R5bGUgb2YgdGhlIGJvcmRlciI6ICIiLAorICAgICAgICAgICAgIldpZHRoIG9mIHRoZSB0YWJsZSI6ICIiLAorICAgICAgICAgICAgIldpZHRoIHVuaXQiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3JkZXIiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlBlcmNlbnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJQaXhlbHMiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJvd3M6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiU3BhY2luZyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUb3AiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxhbmdNYXJrcyI6IHsKKyAgICAgICAgICAgICImbWRhc2g7IGxhbmd1YWdlICZtZGFzaDsiOiAiIiwKKyAgICAgICAgICAgICInLCAnIjogIiIsCisgICAgICAgICAgICAiRW5nbGlzaCI6ICIiLAorICAgICAgICAgICAgIkZyZW5jaCI6ICIiLAorICAgICAgICAgICAgIkdyZWVrIjogIiIsCisgICAgICAgICAgICAibGFuZ3VhZ2Ugc2VsZWN0IjogIiIsCisgICAgICAgICAgICAiTGF0aW4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiTGlua2VyIjogeworICAgICAgICAgICAgIihweCkiOiAiIiwKKyAgICAgICAgICAgICJBbmNob3ItTGluayI6ICIiLAorICAgICAgICAgICAgIkFuY2hvcjoiOiAiIiwKKyAgICAgICAgICAgICJFbWFpbCBBZGRyZXNzOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJMb2NhdGlvbiBCYXI6IjogIiIsCisgICAgICAgICAgICAiTWVudSBCYXI6IjogIiIsCisgICAgICAgICAgICAiTWVzc2FnZSBUZW1wbGF0ZToiOiAiIiwKKyAgICAgICAgICAgICJOZXcgV2luZG93IjogIiIsCisgICAgICAgICAgICAiT3JkaW5hcnkgTGluayI6ICIiLAorICAgICAgICAgICAgIlBvcHVwIFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlBvcHVwV2luZG93IjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJSZXNpemVhYmxlOiI6ICIiLAorICAgICAgICAgICAgIlNhbWUgV2luZG93IChqdW1wIG91dCBvZiBmcmFtZXMpIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsYmFyczoiOiAiIiwKKyAgICAgICAgICAgICJTaG93cyBPbiBIb3ZlciI6ICIiLAorICAgICAgICAgICAgIlN0YXR1cyBCYXI6IjogIiIsCisgICAgICAgICAgICAiU3ViamVjdDoiOiAiIiwKKyAgICAgICAgICAgICJUaXRsZToiOiAiIiwKKyAgICAgICAgICAgICJUb29sYmFyOiI6ICIiLAorICAgICAgICAgICAgIlVSTCBMaW5rIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIiIsCisgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJOYW1lOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNpemU6IjogIjw8Rm9ybXM+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxpc3RUeXBlIjogeworICAgICAgICAgICAgIkNob29zZSBsaXN0IHN0eWxlIHR5cGUgKGZvciBvcmRlcmVkIGxpc3RzKSI6ICIiLAorICAgICAgICAgICAgIkRlY2ltYWwgbnVtYmVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIGdyZWVrIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciBsYXRpbiBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgcm9tYW4gbnVtYmVycyI6ICIiLAorICAgICAgICAgICAgIlVwcGVyIGxhdGluIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJVcHBlciByb21hbiBudW1iZXJzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIk1vb3Rvb2xzRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiT3BlcmEiOiB7CisgICAgICAgICAgICAiTUFSSyI6ICIiLAorICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAgICAgIkluc2VydCB0ZXh0IGluIG5ldyBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJQYXN0ZSBhcyBQbGFpbiBUZXh0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlByZXNlcnZlU2NyaXB0cyI6IHsKKyAgICAgICAgICAgICJKYXZhU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiUEhQIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlF1aWNrVGFnIjogeworICAgICAgICAgICAgIicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbCc6ICciOiAiIiwKKyAgICAgICAgICAgICJBVFRSSUJVVEVTIjogIiIsCisgICAgICAgICAgICAiQ29sb3JzIjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIFRBRyB5b3Ugd2FudCB0byBpbnNlcnQiOiAiIiwKKyAgICAgICAgICAgICJObyBDU1MgY2xhc3MgYXZhaWFibGUiOiAiIiwKKyAgICAgICAgICAgICJPayI6ICIiLAorICAgICAgICAgICAgIk9QVElPTlMiOiAiIiwKKyAgICAgICAgICAgICJRdWljayBUYWcgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiVEFHcyI6ICIiLAorICAgICAgICAgICAgIlRoZXJlIGFyZSBzb21lIHVuY2xvc2VkIHF1b3RlIjogIiIsCisgICAgICAgICAgICAiVGhpcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIFRBRyI6ICIiLAorICAgICAgICAgICAgIllvdSBoYXZlIHRvIHNlbGVjdCBzb21lIHRleHQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU2F2ZVN1Ym1pdCI6IHsKKyAgICAgICAgICAgICJpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIlJlYWR5IjogIiIsCisgICAgICAgICAgICAiU2F2ZSI6ICIiLAorICAgICAgICAgICAgIlNhdmluZy4uLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTZXRJZCI6IHsKKyAgICAgICAgICAgICJJRC9OYW1lOiI6ICIiLAorICAgICAgICAgICAgIlNldCBJZCBhbmQgTmFtZSI6ICIiLAorICAgICAgICAgICAgIlNldCBJZC9OYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElEL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgICAgICJDbG9zaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiQ2xvc2luZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiQ29udmVydCBhbGwgcXVvdGVzIGFuZCBkYXNoZXMgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgYXV0b21hdGljIHJlcGxhY2VtZW50cyI6ICIiLAorICAgICAgICAgICAgIk9wZW5pbmdEb3VibGVRdW90ZXMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nU2luZ2xlUXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJTbWFydFJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJTbWFydFJlcGxhY2UgU2V0dGluZ3MiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU3R5bGlzdCI6IHsKKyAgICAgICAgICAgICJTdHlsZXMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU3VwZXJDbGVhbiI6IHsKKyAgICAgICAgICAgICJDbGVhbiBiYWQgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIFNlbGVjdGlvbiBPbmx5IjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gdXAgSFRNTCI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIFNjb3BlIjogIiIsCisgICAgICAgICAgICAiR2VuZXJhbCB0aWR5IHVwIGFuZCBjb3JyZWN0aW9uIG9mIHNvbWUgcHJvYmxlbXMuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHNlbGVjdCBmcm9tIHRoZSBmb2xsb3dpbmcgY2xlYW5pbmcgb3B0aW9ucy4uLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzdGFuZCBieSB3aGlsZSBjbGVhbmluZyBpbiBwcm9jZXNzLi4uIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsaWdubWVudCAobGVmdC9yaWdodC9qdXN0aWZ5KS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxsIGNsYXNzZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIEFsbCBIVE1MIFRhZ3MiOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxsIHN0eWxlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIGZvbnQgc2l6ZXMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0ZXh0IGNvbG9ycy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIHR5cGVmYWNlcyAoZm9udCBcInN0eWxlc1wiKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZW1waGFzaXMgYW5kIGFubm90YXRpb25zLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBsYW5nIGF0dHJpYnV0ZXMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIFBhcmFncmFwaHMiOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzLiI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UgZGlyZWN0aW9uYWwgcXVvdGUgbWFya3Mgd2l0aCBub24tZGlyZWN0aW9uYWwgcXVvdGUgbWFya3MuIjogIiIsCisgICAgICAgICAgICAiVmlnb3JvdXNseSBwdXJnZSBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlRhYmxlT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJBbGwgZm91ciBzaWRlcyI6ICIiLAorICAgICAgICAgICAgIkJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIFByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIFR5cGU6IjogIiIsCisgICAgICAgICAgICAiQ2VsbHMgZG93biI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIHRvIHRoZSByaWdodCwgYW5kIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgY29sdW1uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIHJvdyI6ICIiLAorICAgICAgICAgICAgIkRvIE5vdCBDaGFuZ2UiOiAiIiwKKyAgICAgICAgICAgICJGcmFtZSBhbmQgYm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkZyYW1lcyI6ICIiLAorICAgICAgICAgICAgIkhlYWRlciAodGgpIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNlbGwgYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY2VsbCBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY29sdW1uIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcm93IGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHJvdyBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBjZWxscyI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIGN1cnJlbnQgY2VsbCB3aXRoOiI6ICIiLAorICAgICAgICAgICAgIk5vIHJ1bGVzIjogIiIsCisgICAgICAgICAgICAiTm8gc2lkZXMiOiAiIiwKKyAgICAgICAgICAgICJOb3JtYWwgKHRkKSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjbGljayBpbnRvIHNvbWUgY2VsbCI6ICIiLAorICAgICAgICAgICAgIlJvdyBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiUm93IFByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGFsbCByb3dzIGFuZCBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBjb2x1bW5zIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIHJvd3Mgb25seSI6ICIiLAorICAgICAgICAgICAgIlNwYWNpbmcgYW5kIHBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJTcGxpdCBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJTcGxpdCByb3ciOiAiIiwKKyAgICAgICAgICAgICJTdW1tYXJ5IjogIiIsCisgICAgICAgICAgICAiVGFibGUgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlRhYmxlIFByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJUaGUgYm90dG9tIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHJpZ2h0IGFuZCBsZWZ0IHNpZGVzIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgcmlnaHQtaGFuZCBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSB0b3Agc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY2VsbCBpbiByb3cuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iOiAiIiwKKyAgICAgICAgICAgICJDYXB0aW9uIjogIjw8SW5zZXJ0VGFibGU+PiIsCisgICAgICAgICAgICAiQ29sdW1ucyI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkRlc2NyaXB0aW9uIjogIjw8RnVsbFBhZ2U+PiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJQYWRkaW5nIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgInBpeGVscyI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJvd3MiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTcGFjaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuc2F2ZWRDaGFuZ2VzIjogeworICAgICAgICAgICAgIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgZWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIldlYktpdCI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiPDxHZWNrbz4+IgorICAgICAgICB9LAorICAgICAgICAiWGluaGEiOiB7CisgICAgICAgICAgICAiJiM4MjEyOyBmb250ICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiJiM4MjEyOyBzaXplICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICIxICg4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjIgKDEwIHB0KSI6ICIiLAorICAgICAgICAgICAgIjMgKDEyIHB0KSI6ICIiLAorICAgICAgICAgICAgIjQgKDE0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjUgKDE4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjYgKDI0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjcgKDM2IHB0KSI6ICIiLAorICAgICAgICAgICAgIkFkZHJlc3MiOiAiIiwKKyAgICAgICAgICAgICJBcmlhbCI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICIiLAorICAgICAgICAgICAgIkNsb3NlIjogIiIsCisgICAgICAgICAgICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICIiLAorICAgICAgICAgICAgIkNvdXJpZXIgTmV3IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFN0YXR1c2JhciI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBUb29sYmFyIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0wICh6ZXJvKSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMSAuLiBDVFJMLTYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUEiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUoiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUwiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLU4iOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVgiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVoiOiAiIiwKKyAgICAgICAgICAgICJFZGl0b3IgSGVscCI6ICIiLAorICAgICAgICAgICAgIkVOVEVSIjogIiIsCisgICAgICAgICAgICAiRXJyb3IgTG9hZGluZyBYaW5oYS4gIERldmVsb3BlcnMsIGNoZWNrIHRoZSBFcnJvciBDb25zb2xlIGZvciBpbmZvcm1hdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGaW5pc2hpbmciOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0ZWQiOiAiIiwKKyAgICAgICAgICAgICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiIiwKKyAgICAgICAgICAgICJHZW9yZ2lhIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAxIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAyIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAzIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA0IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA1IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA2IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJJbXBhY3QiOiAiIiwKKyAgICAgICAgICAgICJJbml0IGVkaXRvciBzaXplIjogIiIsCisgICAgICAgICAgICAiaW5zZXJ0IGxpbmVicmVhayI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9PdmVyd3JpdGUiOiAiIiwKKyAgICAgICAgICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIENvcmUiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW5zIjogIiIsCisgICAgICAgICAgICAiTVMgV29yZCBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAibmV3IHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIlByaW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICIiLAorICAgICAgICAgICAgIlNhdmUgYXMiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgYWxsIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IENvbG9yIjogIiIsCisgICAgICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJTSElGVC1FTlRFUiI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IEJsb2NrIjogIiIsCisgICAgICAgICAgICAiVGFob21hIjogIiIsCisgICAgICAgICAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogIiIsCisgICAgICAgICAgICAiVGltZXMgTmV3IFJvbWFuIjogIiIsCisgICAgICAgICAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJUb3VjaCBoZXJlIGZpcnN0IHRvIGFjdGl2YXRlIGVkaXRvci4iOiAiIiwKKyAgICAgICAgICAgICJWZXJkYW5hIjogIiIsCisgICAgICAgICAgICAiV2FpdGluZyBmb3IgSWZyYW1lIHRvIGxvYWQuLi4iOiAiIiwKKyAgICAgICAgICAgICJXaW5nRGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIiIsCisgICAgICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiUmVtb3ZlIEN1cnJlbnQgQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIlNldCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IHBhZ2UgYmFja2dyb3VuZCBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlNldCBQYWdlIEJhY2tncm91bmQgSW1hZ2UiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2xpZW50c2lkZVNwZWxsY2hlY2siOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVjayB1c2luZyBpZVNwZWxsIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEwJSI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiIiwKKyAgICAgICAgICAgICIyMDAlIjogIiIsCisgICAgICAgICAgICAiMjUlIjogIiIsCisgICAgICAgICAgICAiNTAlIjogIiIsCisgICAgICAgICAgICAiNzUlIjogIiIsCisgICAgICAgICAgICAiPkxpc3QgVmlldyI6ICIiLAorICAgICAgICAgICAgIj5UaHVtYm5haWwgVmlldyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIiIsCisgICAgICAgICAgICAiQWxpZ24iOiAiIiwKKyAgICAgICAgICAgICJBbHQiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJDcm9wIjogIiIsCisgICAgICAgICAgICAiRDoiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiIiwKKyAgICAgICAgICAgICJFZGl0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIiIsCisgICAgICAgICAgICAiRmlsZW5hbWU6IjogIiIsCisgICAgICAgICAgICAiRmlsZXNpemU6IjogIiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkZsaXAgVmVydGljYWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJHSUYiOiAiIiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiIiwKKyAgICAgICAgICAgICJIOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIiIsCisgICAgICAgICAgICAiSlBFRyBIaWdoIjogIiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiIiwKKyAgICAgICAgICAgICJKUEVHIE1lZGl1bSI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmciOiAiIiwKKyAgICAgICAgICAgICJMb2NrIjogIiIsCisgICAgICAgICAgICAiTWFya2VyIjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBmb2xkZXIgc2l6ZSBsaW1pdCByZWFjaGVkLiBVcGxvYWQgZGlzYWJsZWQuIjogIiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICIiLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJObyBGaWxlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB2YWx1ZSI6ICIiLAorICAgICAgICAgICAgIlBORyI6ICIiLAorICAgICAgICAgICAgIlByZXNldCI6ICIiLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIiIsCisgICAgICAgICAgICAiUmVmcmVzaCI6ICIiLAorICAgICAgICAgICAgIlJlbmFtZSI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIEltYWdlIjogIiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiIiwKKyAgICAgICAgICAgICJTdGFydCBZOiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgbWFya2VyIGNvbG9yIjogIiIsCisgICAgICAgICAgICAiVHJhc2giOiAiIiwKKyAgICAgICAgICAgICJVcGxvYWQiOiAiIiwKKyAgICAgICAgICAgICJXOiI6ICIiLAorICAgICAgICAgICAgIlg6IjogIiIsCisgICAgICAgICAgICAiWGluaGEgSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiWToiOiAiIiwKKyAgICAgICAgICAgICJab29tIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJDbGVhciI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIkNvbG9yIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiQ29weSI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkN1dCI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkhlaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIjw8TW9vdG9vbHNGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTWFyZ2luIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUGFkZGluZyI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRvcCI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJXaWR0aCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIldpZHRoOiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiRmlsdGVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbHRlciI6ICI8PEluc2VydFNuaXBwZXQyPj4iCisgICAgICAgIH0sCisgICAgICAgICJIdG1sVGlkeSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEhUTUxUSURZIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkF1dG8tVGlkeSI6ICIiLAorICAgICAgICAgICAgIkRvbid0IFRpZHkiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIFRpZHkiOiAiIiwKKyAgICAgICAgICAgICJUaWR5IGZhaWxlZC4gIENoZWNrIHlvdXIgSFRNTCBmb3Igc3ludGF4IGVycm9ycy4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFuZ2xlOiI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgUGljdHVyZXMiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFVzZXJuYW1lL0VtYWlsIjogIiIsCisgICAgICAgICAgICAiRm9sZGVyIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgTGlzdCI6ICIiLAorICAgICAgICAgICAgIktleXdvcmQiOiAiIiwKKyAgICAgICAgICAgICJObyBJbWFnZXMgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBQaG90b3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBWaWRlb3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIFNlcnZlciI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBVc2VybmFtZSI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW8gTGlzdCI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW9zIjogIiIsCisgICAgICAgICAgICAiQToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJDbGVhciI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQ3JvcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJFZGl0IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiR0lGIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIEhpZ2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgTG93IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIE1lZGl1bSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxvY2siOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1hcmtlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlBORyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZXNpemUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUm90YXRlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlN0YXJ0IFk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlRyYXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJXOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJCZWhhdmlvcjoiOiAiIiwKKyAgICAgICAgICAgICJDb250aW51b3VzIjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uOiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBzY3JvbGxpbmcgbWFycXVlZSI6ICIiLAorICAgICAgICAgICAgIk1hcnF1ZWUgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIEFtb3VudDoiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgRGVsYXk6IjogIiIsCisgICAgICAgICAgICAiU2xpZGUiOiAiIiwKKyAgICAgICAgICAgICJTcGVlZCBDb250cm9sIjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJOYW1lIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlRleHQ6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBub3QgZGVmaW5lZCI6ICIiLAorICAgICAgICAgICAgIk9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiIE9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiVXBsb2FkIGZpbGUiOiAiIiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbDoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkltYWdlIFVSTDoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJMYXlvdXQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlNpemUiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTcGFjaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRvcCI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVmVydGljYWw6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEyMCUiOiAiIiwKKyAgICAgICAgICAgICIxNTAlIjogIiIsCisgICAgICAgICAgICAiODAlIjogIiIsCisgICAgICAgICAgICAiQWRkIEdVSURPIENvZGUgaW4gYSB0ZXh0Ym94IG9uIHRoZSBwYWdlIjogIiIsCisgICAgICAgICAgICAiQWRkIE1JREkgbGluayB0byBhbGxvdyBzdHVkZW50cyB0byBoZWFyIHRoZSBtdXNpYyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdCI6ICIiLAorICAgICAgICAgICAgIkdVSURPIENvZGUiOiAiIiwKKyAgICAgICAgICAgICJHdWlkbyBjb2RlIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgaW4gYXBwbGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEdVSURPIE11c2ljIE5vdGF0aW9uIjogIiIsCisgICAgICAgICAgICAiTUlESSBGaWxlIjogIiIsCisgICAgICAgICAgICAiU291cmNlIENvZGUiOiAiIiwKKyAgICAgICAgICAgICJXaXRoIE1vemlsbGEsIHRoZSBhcHBsZXQgd2lsbCBub3QgYmUgdmlzaWJsZSBpbiBlZGl0b3IsIGJ1dCBvbmx5IGluIFdlYiBwYWdlIGFmdGVyIHN1Ym1pdHRpbmcuIjogIiIsCisgICAgICAgICAgICAiWm9vbSA6IjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiWm9vbSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgR2VhcnMgaW4gb3JkZXIgdG8gdXNlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UgYW5kIGNvbmZpZ3VyYXRpb24uIjogIiIsCisgICAgICAgICAgICAiRW5hYmxpbmcgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIkluc3RhbGwiOiAiIiwKKyAgICAgICAgICAgICJMZWFybiBBYm91dCBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIHJlbG9hZCB0aGUgcGFnZSwgY2F1c2luZyB5b3UgdG8gbG9zZSBhbnkgdW5zYXZlZCB3b3JrLiAgUHJlc3MgXCJPS1wiIHRvIHJlbG9hZC4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSB1c2VzIEdvb2dsZSBHZWFycyB0byBlbmFibGUgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZS4gIFdpdGggR2VhcnMgaW5zdGFsbGVkLCB5b3UgY2FuIHNhdmUgZHJhZnRzIG9mIHlvdXIgZG9jdW1lbnRzIG9uIHlvdXIgaGFyZCBkcml2ZSwgY29uZmlndXJlIFhpbmhhIHRvIGxvb2sgdGhlIHdheSB5b3Ugd2FudCwgYW5kIGNhcnJ5IHRoaXMgaW5mb3JtYXRpb24gd2hlcmV2ZXIgeW91IHVzZSBYaW5oYSBvbiB0aGUgd2ViLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQU1NlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbGU6ICI6ICIiLAorICAgICAgICAgICAgIkltcG9ydCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQZXJzaXN0ZW50U3RvcmFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkRldGFpbHMiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIEJyb3dzZXIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgICBUaGVyZSBDICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICBUaGVyZSBBICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvIFwiIFRoZXJlIEIgXCIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAnIFRoZXJlIEQgJyI6ICIiLAorICAgICAgICAgICAgIkxpc3Qgb2YgUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiTmV3IERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiT3BlbiI6ICIiLAorICAgICAgICAgICAgIk9wZW4gRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB5b3UnZCBsaWtlIHRvIGNyZWF0ZS4iOiAiIiwKKyAgICAgICAgICAgICJTYXZlIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGVyYXNlIGFueSB1bnNhdmVkIGNvbnRlbnQuICBJZiB5b3UncmUgY2VydGFpbiwgcGxlYXNlIGNsaWNrIE9LIHRvIGNvbnRpbnVlLiI6ICIiLAorICAgICAgICAgICAgIldlYiBVUkwiOiAiIiwKKyAgICAgICAgICAgICJDb25maXJtIjogIjw8UFNMb2NhbD4+IiwKKyAgICAgICAgICAgICJDb3B5IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGVuYW1lIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQiOiAiPDxJbnNlcnROb3RlPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlNhdmUiOiAiPDxTYXZlU3VibWl0Pj4iLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiU3BlbGxDaGVja2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogU1BFTExDSEVDS0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkhUTUxBcmVhIFNwZWxsIENoZWNrZXIiOiAiIiwKKyAgICAgICAgICAgICJJbmZvIjogIiIsCisgICAgICAgICAgICAiTGVhcm4iOiAiIiwKKyAgICAgICAgICAgICJwbGl6IHdlaXQgOy0pIjogIiIsCisgICAgICAgICAgICAiUmV2ZXJ0IjogIiIsCisgICAgICAgICAgICAiU3BlbGwgQ2hlY2tlciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFRFTVBMQVRFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkluc2VydCB0ZW1wbGF0ZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJVbkZvcm1hdCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFVORk9STUFUIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFsbCI6ICIiLAorICAgICAgICAgICAgIkFsbCBIVE1MOiI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIEFyZWEiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBvcHRpb25zIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0dGluZzoiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIENsZWFuZXIiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Qgd2hpY2ggdHlwZXMgb2YgZm9ybWF0dGluZyB5b3Ugd291bGQgbGlrZSB0byByZW1vdmUuIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0aW9uIjogIiIKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9pdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2l0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYzE0YjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9pdC5qcwpAQCAtMCwwICsxLDE1NzIgQEAKKy8vIFhpbmhhIExhbmd1YWdlIENvbWJpbmVkIFRyYW5zbGF0aW9uIEZpbGUKKy8vCisvLyBMQU5HOiAiaXQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTlNUUlVDVElPTlMgVE8gVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFlvdXIgdHJhbnNsYXRpb24gbXVzdCBiZSBpbiBVVEYtOCBDaGFyYWN0ZXIgRW5jb2RpbmcuCisvLworLy8gVGhpcyBpcyBhIEpTT04gZW5jb2RlZCBmaWxlIChwbHVzIGNvbW1lbnRzKSwgc3RyaW5ncyBzaG91bGQgYmUgZG91YmxlLXF1b3RlCisvLyBvbmx5LCBkbyBub3QgdXNlIHNpbmdsZSBxdW90ZXMgdG8gc3Vycm91bmQgc3RyaW5ncyAtICJoZWxsbyIsIG5vdCAnaGVsbG8nCisvLyBkbyBub3QgaGF2ZSBhIHRyYWlsaW5nIGNvbW1hIGFmdGVyIHRoZSBsYXN0IGVudHJ5IGluIGEgc2VjdGlvbi4KKy8vCisvLyBPbmx5IGZ1bGwgbGluZSBjb21tZW50cyBhcmUgYWxsb3dlZCAodGhhdCBhIGNvbW1lbnRzIG9jY3VweSBlbnRpcmUgbGluZXMpLgorLy8KKy8vIFNlYXJjaCBmb3IgdGhlIF9fTkVXX1RSQU5TTEFUSU9OU19fIHNlY3Rpb24gYmVsb3csIHRoaXMgaXMgd2hlcmUgeW91IHdpbGwKKy8vIHdhbnQgdG8gZm9jdXMsIHRoaXMgc2VjdGlvbiBpbmNsdWRlcyB0aGluZ3MgdGhhdCBkbyBub3QgcHJlc2VudGx5IGhhdmUgYSAKKy8vIHRyYW5zbGF0aW9uIG9yIGZvciB3aGljaCB0aGUgdHJhbnNsYXRpb24gbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgYWNjdXJhY3kuCisvLworLy8gSW4gdGhlIE5ldyBUcmFuc2xhdGlvbnMgc2VjdGlvbiBhIHRyYW5zbGF0aW9uIHN0cmluZyBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZworLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiIgorLy8gICAgIFRoaXMgbWVhbnMgaXQgaXMgbm90IHRyYW5zbGF0ZWQgeWV0LCBhZGQgeW91ciB0cmFuc2xhdGlvbi4uLgorLy8gICAgICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJLbGluZ29uIFN0cmluZyBIZXJlIgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiVHJhbnNsYXRlZCBTdHJpbmcgSGVyZSIKKy8vICAgICBUaGlzIG1lYW5zIHRoYXQgYW4gZXhpc3RpbmcgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nLCBpbiBzb21lIG90aGVyCisvLyAgICAgc2VjdGlvbiBoYXMgYmVlbiBmb3VuZCwgYW5kIHVzZWQuICBDaGVjayB0aGF0IGl0IGlzIGFwcHJvcHJpdGUgZm9yIHRoaXMKKy8vICAgICBzZWN0aW9uIGFuZCBpZiBpdCBpcywgdGhhdCdzIGZpbmUgbGVhdmUgaXQgYXMgaXMsIG90aGVyd2lzZSBjaGFuZ2UgYXMKKy8vICAgICBhcHByb3ByaWF0ZS4KKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIjw8QW5vdGhlclNlY3Rpb24+PiIKKy8vICAgICBUaGlzIG1lYW5zIHVzZSB0aGUgc2FtZSB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcgYXMgPDxBbm90aGVyU2VjdGlvbj4+CisvLyAgICAgdGhpcyBzYXZlcyB5b3UgcmUtdHJhbmxhdGluZyBzdHJpbmdzLiAgSWYgdGhlIENvbnRleHQgb2YgdGhpcyBzZWN0aW9uCisvLyAgICAgYW5kIHRoZSBjb250ZXh0IG9mIEFub3RoZXJTZWN0aW9uIHNlZW0gdGhlIHNhbWUsIHRoYXQncyBmaW5lIGxlYXZlIGl0CisvLyAgICAgdXNpbmcgdGhhdCB0cmFuc2xhdGlvbiwgYnV0IGlmIHRoaXMgc2VjdGlvbiBuZWVkcyBhIGRpZmZlcmVudCB0cmFuc2xhdGlvbiwgCisvLyAgICAgeW91IGNhbiBwcm92aWRlIGl0IGJ5IHJlcGxhY2luZyB0aGUgbGluayAoPDxBbm90aGVyU2VjdGlvbj4+KSB3aXRoIHRoYXQKKy8vICAgICBuZXcgdHJhbnNsYXRpb24uICBGb3IgZXhhbXBsZSAtIGEgIlRhYmxlIiBpbiBzYXkgIkRhdGFQbHVnaW4iIGlzIAorLy8gICAgIHBlcmhhcHMgdHJhbnNsYXRlZCBkaWZmZXJlbnRseSB0byAiVGFibGUiIGluICJGdXJuaXR1cmVQbHVnaW4iLgorLy8KKy8vIFRFU1RJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgcGxhY2UgeW91ciB0cmFuc2xhdGlvbiBmaWxlIG9uIHlvdXIgd2Vic2VydmVyIHNvbWV3aGVyZSBmb3IgZXhhbXBsZQorLy8KKy8vICAgL3hpbmhhL2xhbmcvbWVyZ2VkL2l0LmpzCisvLworLy8gYW5kIHRoZW4gdGVsbCBYaW5oYSB3aGVyZSB0byBnZXQgaXQgKGJlZm9yZSBsb2FkaW5nIFhpbmhhQ29yZS5qcykgYnkgCisvLworLy8gIF9lZGl0b3JfbGFuZyAgICAgICAgICAgICAgPSAnaXQnOworLy8gIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSAgPSAnL3hpbmhhL2xhbmcvbWVyZ2VkL2l0LmpzJzsKKy8vCisvLyBYaW5oYSB3aWxsIGxvYWQgeW91ciBuZXcgbGFuZ3VhZ2UgZGVmaW5pdGlvbi4KKy8vCisvLyBTVUJNSVRUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IGNyZWF0ZSBhIFRpY2tldCBvbiB0aGUgWGluaGEgd2Vic2l0ZSBhbmQgYXR0YWNoIHlvdXIgdHJhbnNsYXRpb24gCisvLyBmaWxlLgorLy8KKy8vIFRoZSBYaW5oYSBkZXZlbG9wZXJzIHdpbGwgdGFrZSB5b3VyIGZpbGUgYW5kIHVzZSB0aGUgCisvLyAgICAgY29udHJpYi9sY19zcGxpdF9tZXJnZWRfZmlsZS5waHAKKy8vIHNjcmlwdCB0byBsb2FkIGl0IGludG8gdGhlIFhpbmhhIGRpc3RyaWJ1dGlvbi4KKworeworICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkFib3V0Qm94IjogeworICAgICAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiSW5mb3JtYXppb25pIHN1IFhpbmhhIgorICAgIH0sCisgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iCisgICAgfSwKKyAgICAiQ2hhcmFjdGVyTWFwIjogeworICAgICAgICAiSW5zZXJ0IHNwZWNpYWwgY2hhcmFjdGVyIjogIkluc2VyaXNjYSBpbCBjYXJhdHRlcmUgc3BlY2lhbGUiCisgICAgfSwKKyAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICJDb2xvcjogIjogIkNvbG9yZSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogIkNlbnRyYXRvIiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICJHaXVzdGlmaWNhdG8iLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIlNpbmlzdHJhIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiRGVzdHJhIgorICAgIH0sCisgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJJbnNlcmlzY2kvbW9kaWZpY2EgbGluayIsCisgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIk51b3ZhIGZpbmVzdHJhIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiTmllbnRlICh1c2EgaW1wbGljaXRvKSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPdGhlciI6ICJBbHRybyIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiU3Rlc3NhIGZyYW1lIChfc2VsZikiLAorICAgICAgICAiVGFyZ2V0OiI6ICJUYXJnZXQ6IiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAiVGl0bGUgKHN1Z2dlcmltZW50byk6IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiUGFnaW5hIGludGVyYSAoX3RvcCkiLAorICAgICAgICAiVVJMOiI6ICJVUkw6IgorICAgIH0sCisgICAgIkVkaXRUYWciOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkVxdWF0aW9uIjogeworICAgICAgICAiQ2FuY2VsIjogIkFubnVsbGFtZW50byIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJFeHRlbmRlZEZpbGVNYW5hZ2VyIjogeworICAgICAgICAiQWxpZ24iOiAiQWxsaW5lYSIsCisgICAgICAgICJCYXNlbGluZSI6ICJBbGxpbmVhbWVudG8iLAorICAgICAgICAiQm9yZGVyIjogIkJvcmRvIiwKKyAgICAgICAgIkJvdHRvbSI6ICJCYXNzbyIsCisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIiwKKyAgICAgICAgIkNvbG9yIjogIkNvbG9yZSIsCisgICAgICAgICJIZWlnaHQiOiAiQWx0ZXp6YSIsCisgICAgICAgICJIZWlnaHQ6IjogIkFsdGV6emEiLAorICAgICAgICAiTGVmdCI6ICJTaW5pc3RyYSIsCisgICAgICAgICJNYXJnaW4iOiAiTWFyZ2luZSIsCisgICAgICAgICJNaWRkbGUiOiAiQ2VudHJhbGUiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOdW92YSBmaW5lc3RyYSAoX2JsYW5rKSIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIk5pZW50ZSAodXNhIGltcGxpY2l0bykiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUGFkZGluZyI6ICJQYWRkaW5nIiwKKyAgICAgICAgIlJpZ2h0IjogIkRlc3RyYSIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiU3Rlc3NhIGZyYW1lIChfc2VsZikiLAorICAgICAgICAiVGl0bGUgKHRvb2x0aXApIjogIlRpdGxlIChzdWdnZXJpbWVudG8pOiIsCisgICAgICAgICJUb3AiOiAiQWx0byIsCisgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIlBhZ2luYSBpbnRlcmEgKF90b3ApIiwKKyAgICAgICAgIldpZHRoIjogIkxhcmdoZXp6YSIsCisgICAgICAgICJXaWR0aDoiOiAiTGFyZ2hlenphIgorICAgIH0sCisgICAgIkZvcm1zIjogeworICAgICAgICAiQ2FuY2VsIjogIkFubnVsbGFtZW50byIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIlVSTCBkZWxsJ0ltbWFnaW5lIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkZ1bGxQYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIkFubnVsbGFtZW50byIsCisgICAgICAgICJEZXNjcmlwdGlvbjoiOiAiRGVzY3JpemlvbmUiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIiwKKyAgICAgICAgIkNlbnRlciI6ICJDZW50cmEiLAorICAgICAgICAiQ29sb3I6IjogIkNvbG9yZSIsCisgICAgICAgICJIZWlnaHQ6IjogIkFsdGV6emEiLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIlJpZ2hlbGxvIG9yaXp6b250YWxlIiwKKyAgICAgICAgIkxheW91dCI6ICJMYXlvdXQiLAorICAgICAgICAiTGVmdCI6ICJTaW5pc3RyYSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJSaWdodCI6ICJEZXN0cmEiLAorICAgICAgICAiV2lkdGg6IjogIkxhcmdoZXp6YSIsCisgICAgICAgICJwZXJjZW50IjogInBlcmNlbnRvIiwKKyAgICAgICAgInBpeGVscyI6ICJwaXhlbHMiCisgICAgfSwKKyAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAiQmFzZWxpbmUiOiAiQWxsaW5lYW1lbnRvIiwKKyAgICAgICAgIkJvdHRvbSI6ICJCYXNzbyIsCisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIiwKKyAgICAgICAgIkhlaWdodDoiOiAiQWx0ZXp6YSIsCisgICAgICAgICJMZWZ0IjogIlNpbmlzdHJhIiwKKyAgICAgICAgIk1pZGRsZSI6ICJDZW50cmFsZSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJSaWdodCI6ICJEZXN0cmEiLAorICAgICAgICAiVG9wIjogIkFsdG8iLAorICAgICAgICAiV2lkdGg6IjogIkxhcmdoZXp6YSIKKyAgICB9LAorICAgICJJbmxpbmVTdHlsZXIiOiB7CisgICAgICAgICJCYWNrZ3JvdW5kIjogIlNmb25kbyIsCisgICAgICAgICJCYXNlbGluZSI6ICJBbGxpbmVhbWVudG8iLAorICAgICAgICAiQm9yZGVyIjogIkJvcmRvIiwKKyAgICAgICAgIkJvdHRvbSI6ICJCYXNzbyIsCisgICAgICAgICJDZW50ZXIiOiAiQ2VudHJhIiwKKyAgICAgICAgIkNoYXIiOiAiQ2FyYXR0ZXJlIiwKKyAgICAgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIkJvcmRpIGNoaXVzaSIsCisgICAgICAgICJGRyBDb2xvciI6ICJDb2xvcmUgUHJpbmNpcGFsZSIsCisgICAgICAgICJGbG9hdCI6ICJGbHV0dHVhbnRlIiwKKyAgICAgICAgIkhlaWdodCI6ICJBbHRlenphIiwKKyAgICAgICAgIkltYWdlIFVSTCI6ICJVUkwgZGVsbCdJbW1hZ2luZSIsCisgICAgICAgICJKdXN0aWZ5IjogIkp1c3RpZmljYSIsCisgICAgICAgICJMYXlvdXQiOiAiTGF5b3V0IiwKKyAgICAgICAgIkxlZnQiOiAiU2luaXN0cmEiLAorICAgICAgICAiTWFyZ2luIjogIk1hcmdpbmUiLAorICAgICAgICAiTWlkZGxlIjogIkNlbnRyYWxlIiwKKyAgICAgICAgIk5vbmUiOiAiTnVsbGEiLAorICAgICAgICAiUGFkZGluZyI6ICJQYWRkaW5nIiwKKyAgICAgICAgIlJpZ2h0IjogIkRlc3RyYSIsCisgICAgICAgICJUZXh0IGFsaWduIjogIkFsbGluZWFtZW50byBkZWwgVGVzdG8iLAorICAgICAgICAiVG9wIjogIkFsdG8iLAorICAgICAgICAiVmVydGljYWwgYWxpZ24iOiAiQWxsaW5lYW1lbnRvIHZlcnRpY2FsZSIsCisgICAgICAgICJXaWR0aCI6ICJMYXJnaGV6emEiLAorICAgICAgICAicGVyY2VudCI6ICJwZXJjZW50byIsCisgICAgICAgICJwaXhlbHMiOiAicGl4ZWxzIgorICAgIH0sCisgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICJCYXNlbGluZSI6ICJBbGxpbmVhbWVudG8iLAorICAgICAgICAiQm90dG9tIjogIkJhc3NvIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJVUkwgZGVsbCdJbW1hZ2luZSIsCisgICAgICAgICJMYXlvdXQiOiAiTGF5b3V0IiwKKyAgICAgICAgIkxlZnQiOiAiU2luaXN0cmEiLAorICAgICAgICAiTWlkZGxlIjogIkNlbnRyYWxlIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlJpZ2h0IjogIkRlc3RyYSIsCisgICAgICAgICJTcGFjaW5nIjogIlNwYXppYXR1cmEiLAorICAgICAgICAiVG9wIjogIkFsdG8iCisgICAgfSwKKyAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iLAorICAgICAgICAiSGVpZ2h0OiI6ICJBbHRlenphIiwKKyAgICAgICAgIkluc2VydCBzY3JvbGxpbmcgbWFycXVlZSI6ICJJbnNlcmlzY2EgbWFycXVlZSIsCisgICAgICAgICJMZWZ0IjogIlNpbmlzdHJhIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlJpZ2h0IjogIkRlc3RyYSIsCisgICAgICAgICJXaWR0aDoiOiAiTGFyZ2hlenphIgorICAgIH0sCisgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIgorICAgIH0sCisgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICJCYXNlbGluZSI6ICJBbGxpbmVhbWVudG8iLAorICAgICAgICAiQm90dG9tIjogIkJhc3NvIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iLAorICAgICAgICAiSGVpZ2h0OiI6ICJBbHRlenphIiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiVVJMIGRlbGwnSW1tYWdpbmUiLAorICAgICAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgICAgICJMZWZ0IjogIlNpbmlzdHJhIiwKKyAgICAgICAgIk1pZGRsZSI6ICJDZW50cmFsZSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJSaWdodCI6ICJEZXN0cmEiLAorICAgICAgICAiU3BhY2luZyI6ICJTcGF6aWF0dXJhIiwKKyAgICAgICAgIlRvcCI6ICJBbHRvIiwKKyAgICAgICAgIldpZHRoOiI6ICJMYXJnaGV6emEiCisgICAgfSwKKyAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iCisgICAgfSwKKyAgICAiSW5zZXJ0U25pcHBldDIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIgorICAgIH0sCisgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAiQmFzZWxpbmUiOiAiQWxsaW5lYW1lbnRvIiwKKyAgICAgICAgIkJvcmRlciI6ICJCb3JkbyIsCisgICAgICAgICJCb3R0b20iOiAiQmFzc28iLAorICAgICAgICAiQ2FuY2VsIjogIkFubnVsbGFtZW50byIsCisgICAgICAgICJDYXB0aW9uIjogIlRpdG9sbyIsCisgICAgICAgICJJbnNlcnQgVGFibGUiOiAiSW5zZXJpc2NpIHRhYmVsbGEiLAorICAgICAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgICAgICJMZWZ0IjogIlNpbmlzdHJhIiwKKyAgICAgICAgIk1pZGRsZSI6ICJDZW50cmFsZSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQZXJjZW50IjogInBlcmNlbnRvIiwKKyAgICAgICAgIlBpeGVscyI6ICJwaXhlbHMiLAorICAgICAgICAiUmlnaHQiOiAiRGVzdHJhIiwKKyAgICAgICAgIlNwYWNpbmciOiAiU3BhemlhdHVyYSIsCisgICAgICAgICJUb3AiOiAiQWx0byIsCisgICAgICAgICJXaWR0aDoiOiAiTGFyZ2hlenphIgorICAgIH0sCisgICAgIkxpbmtlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIkluc2VyaXNjaS9tb2RpZmljYSBsaW5rIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlRhcmdldDoiOiAiVGFyZ2V0OiIsCisgICAgICAgICJVUkw6IjogIlVSTDoiCisgICAgfSwKKyAgICAiTm90ZVNlcnZlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iCisgICAgfSwKKyAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAiQ2FuY2VsIjogIkFubnVsbGFtZW50byIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJQZXJzaXN0ZW50U3RvcmFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iCisgICAgfSwKKyAgICAiUXVpY2tUYWciOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIgorICAgIH0sCisgICAgIlNldElkIjogeworICAgICAgICAiQ2FuY2VsIjogIkFubnVsbGFtZW50byIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlRhYmxlT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgIkFsbCBmb3VyIHNpZGVzIjogIlR1dHRpIGUgcXVhdHRybyBpIGxhdGkiLAorICAgICAgICAiQm9yZGVycyI6ICJCb3JkaSIsCisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIiwKKyAgICAgICAgIkNhcHRpb24iOiAiVGl0b2xvIiwKKyAgICAgICAgIkNlbGwgUHJvcGVydGllcyI6ICJQcm9wcmlldMODwqAgZGVsbGEgQ2VsbGEiLAorICAgICAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogIlByb3ByaWV0w4PCoCBkZWxsYSBjZWxsYSIsCisgICAgICAgICJEZWxldGUgY2VsbCI6ICJDYW5jZWxsYSBjZWxsYSIsCisgICAgICAgICJEZWxldGUgY29sdW1uIjogIkNhbmNlbGxhIGNvbG9ubmEiLAorICAgICAgICAiRGVsZXRlIHJvdyI6ICJDYW5jZWxsYSByaWdhIiwKKyAgICAgICAgIkRlc2NyaXB0aW9uIjogIkRlc2NyaXppb25lIiwKKyAgICAgICAgIkZyYW1lcyI6ICJGcmFtZXMiLAorICAgICAgICAiSW5zZXJ0IGNlbGwgYWZ0ZXIiOiAiSW5zZXJpc2NpIGNlbGxhIGRvcG8iLAorICAgICAgICAiSW5zZXJ0IGNlbGwgYmVmb3JlIjogIkluc2VyaXNjaSBjZWxsYSBwcmltYSIsCisgICAgICAgICJJbnNlcnQgY29sdW1uIGFmdGVyIjogIkluc2VyaXNjaSBjb2xvbm5hIGRvcG8iLAorICAgICAgICAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiOiAiSW5zZXJpc2NpIGNvbG9ubmEgcHJpbWEiLAorICAgICAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICJJbnNlcmlzY2kgcmlnYSBkb3BvIiwKKyAgICAgICAgIkluc2VydCByb3cgYmVmb3JlIjogIkluc2VyaXNjaSByaWdhIHByaW1hIiwKKyAgICAgICAgIk1lcmdlIGNlbGxzIjogIlVuaXNjaSBjZWxsZSIsCisgICAgICAgICJObyBydWxlcyI6ICJOZXNzdW4gcmlnaGVsbG8iLAorICAgICAgICAiTm8gc2lkZXMiOiAiTmVzc3VuIGxhdG8iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUGFkZGluZyI6ICJQYWRkaW5nIiwKKyAgICAgICAgIlBsZWFzZSBjbGljayBpbnRvIHNvbWUgY2VsbCI6ICJQZXIgZmF2b3JlLCBjbGljY2EgaW4gdW5hIGNlbGxhIiwKKyAgICAgICAgIlJvdyBQcm9wZXJ0aWVzIjogIlByb3ByaWV0w4PCoCBkZWxsYSBSaWdhIiwKKyAgICAgICAgIlJvdyBwcm9wZXJ0aWVzIjogIlByb3ByaWV0w4PCoCBkZWxsYSByaWdhIiwKKyAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAiTGUgbGluZWUgYXBwYXJpcmFubm8gdHJhIHR1dHRlIGxlIHJpZ2hlIGUgY29sb25uZSIsCisgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGNvbHVtbnMgb25seSI6ICJMZSBsaW5lZSBhcHBhcmlyYW5ubyBzb2xvIHRyYSBsZSBjb2xvbm5lIiwKKyAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogIkxlIGxpbmVlIGFwcGFyaXJhbm5vIHNvbG8gdHJhIGxlIHJpZ2hlIiwKKyAgICAgICAgIlNwYWNpbmciOiAiU3BhemlhdHVyYSIsCisgICAgICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogIlNwYXppYXR1cmEgZSBQYWRkaW5nIiwKKyAgICAgICAgIlNwbGl0IGNvbHVtbiI6ICJEaXZpZGkgY29sb25uYSIsCisgICAgICAgICJTcGxpdCByb3ciOiAiRGl2aWRpIHJpZ2EiLAorICAgICAgICAiU3VtbWFyeSI6ICJTb21tYXJpbyIsCisgICAgICAgICJUYWJsZSBQcm9wZXJ0aWVzIjogIlByb3ByaWV0w4PCoCBkZWxsYSBUYWJlbGxhIiwKKyAgICAgICAgIlRhYmxlIHByb3BlcnRpZXMiOiAiUHJvcHJpZXTDg8KgIGRlbGxhIFRhYmVsbGEiLAorICAgICAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAiU29sbyBsYSBwYXJ0ZSBpbmZlcmlvcmUiLAorICAgICAgICAiVGhlIGxlZnQtaGFuZCBzaWRlIG9ubHkiOiAiU29sbyBsYSBwYXJ0ZSBzaW5pc3RyYSIsCisgICAgICAgICJUaGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb25seSI6ICJTb2xvIGRlc3RyYSBlIHNpbmlzdHJhIiwKKyAgICAgICAgIlRoZSByaWdodC1oYW5kIHNpZGUgb25seSI6ICJTb2xvIGxhIHBhcnRlIGRlc3RyYSIsCisgICAgICAgICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSI6ICJTb2xvIHNvcHJhIGUgc290dG8iLAorICAgICAgICAiVGhlIHRvcCBzaWRlIG9ubHkiOiAiU29sbyBsYSBwYXJ0ZSBzb3ByYSIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiWGluaGEgc2kgcmlmaXV0YSBjb2RhcmRhbWVudGUgZGkgY2FuY2VsbGFyZSBsJ3VsdGltYSBjZWxsYSBuZWxsYSByaWdhLiIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjb2x1bW4gaW4gdGFibGUuIjogIlhpbmhhIHNpIHJpZml1dGEgY29kYXJkYW1lbnRlIGRpIGNhbmNlbGxhcmUgbCd1bHRpbWEgY29sb25uYSBuZWxsYSB0YWJlbGxhLiIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIlhpbmhhIHNpIHJpZml1dGEgY29kYXJkYW1lbnRlIGRpIGNhbmNlbGxhcmUgbCd1bHRpbWEgcmlnYSBuZWxsYSB0YWJlbGxhLiIsCisgICAgICAgICJwaXhlbHMiOiAicGl4ZWxzIgorICAgIH0sCisgICAgIlRlbXBsYXRlIjogeworICAgICAgICAiQ2FuY2VsIjogIkFubnVsbGFtZW50byIsCisgICAgICAgICJJbnNlcnQgdGVtcGxhdGUiOiAiSW5zZXJpc2NhIGlsIHRlbXBsYXRlIgorICAgIH0sCisgICAgIlVuRm9ybWF0IjogeworICAgICAgICAiQ2FuY2VsIjogIkFubnVsbGFtZW50byIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJYaW5oYSI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIkluZm9ybWF6aW9uaSBzdSBYaW5oYSIsCisgICAgICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIkNvbG9yZSBzZm9uZG8iLAorICAgICAgICAiQm9sZCI6ICJHcmFzc2V0dG8iLAorICAgICAgICAiQnVsbGV0ZWQgTGlzdCI6ICJMaXN0YSBub24gbnVtZXJhdGEiLAorICAgICAgICAiQ29weSBzZWxlY3Rpb24iOiAiQ29waWEiLAorICAgICAgICAiQ3VycmVudCBzdHlsZSI6ICJTdGlsZSBjb3JyZW50ZSIsCisgICAgICAgICJDdXQgc2VsZWN0aW9uIjogIlRhZ2xpYSIsCisgICAgICAgICJEZWNyZWFzZSBJbmRlbnQiOiAiRGltaW51aXNjaSBpbmRlbnRhemlvbmUiLAorICAgICAgICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiVGVzdG8gZGEgc3ggYSBkeCIsCisgICAgICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJUZXN0byBkYSBkeCBhIHN4IiwKKyAgICAgICAgIkZvbnQgQ29sb3IiOiAiQ29sb3JlIGZvbnQiLAorICAgICAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiQWl1dG8iLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIlJpZ2hlbGxvIG9yaXp6b250YWxlIiwKKyAgICAgICAgIkluY3JlYXNlIEluZGVudCI6ICJBdW1lbnRhIGluZGVudGF6aW9uZSIsCisgICAgICAgICJJbnNlcnQgVGFibGUiOiAiSW5zZXJpc2NpIHRhYmVsbGEiLAorICAgICAgICAiSW5zZXJ0IFdlYiBMaW5rIjogIkluc2VyaXNjaSBsaW5rIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiSW5zZXJpc2NpL21vZGlmaWNhIEltbWFnaW5lIiwKKyAgICAgICAgIkl0YWxpYyI6ICJDb3JzaXZvIiwKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogIkNlbnRyYXRvIiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICJHaXVzdGlmaWNhdG8iLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIlNpbmlzdHJhIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiRGVzdHJhIiwKKyAgICAgICAgIk9yZGVyZWQgTGlzdCI6ICJMaXN0YSBudW1lcmF0YSIsCisgICAgICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJJbmNvbGxhIiwKKyAgICAgICAgIlBhdGgiOiAiUGVyY29yc28iLAorICAgICAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiUmlwZXRpIHVsdGltYSBhemlvbmUiLAorICAgICAgICAiU3RyaWtldGhyb3VnaCI6ICJCYXJyYXRvIiwKKyAgICAgICAgIlN1YnNjcmlwdCI6ICJQZWRpY2UiLAorICAgICAgICAiU3VwZXJzY3JpcHQiOiAiQXBpY2UiLAorICAgICAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIlZpc3VhbGl6emEvbmFzY29uZGkgc29yZ2VudGUgSFRNTCIsCisgICAgICAgICJVbmRlcmxpbmUiOiAiU290dG9saW5lYXRvIiwKKyAgICAgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkFubnVsbGEgdWx0aW1hIGF6aW9uZSIsCisgICAgICAgICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiU2VpIGluIE1PREFMSVRBIgorICAgIH0sCisgICAgIl9fTkVXX1RSQU5TTEFUSU9OU19fIjogeworICAgICAgICAiQWJicmV2aWF0aW9uIjogeworICAgICAgICAgICAgIkFiYnJldmlhdGlvbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICIiLAorICAgICAgICAgICAgIkV4cGFuc2lvbjoiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQWJvdXRCb3giOiB7CisgICAgICAgICAgICAiQ2xvc2UiOiAiPDxYaW5oYT4+IgorICAgICAgICB9LAorICAgICAgICAiQ2hhckNvdW50ZXIiOiB7CisgICAgICAgICAgICAiLi4uIGluIHByb2dyZXNzIjogIiIsCisgICAgICAgICAgICAiQ2hhcnMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIiIsCisgICAgICAgICAgICAiV29yZHMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICAgICAiQ2xpY2sgYSBjb2xvci4uLiI6ICIiLAorICAgICAgICAgICAgIlNhbXBsZSI6ICIiLAorICAgICAgICAgICAgIldlYiBTYWZlOiAiOiAiIiwKKyAgICAgICAgICAgICJDbG9zZSI6ICI8PFhpbmhhPj4iCisgICAgICAgIH0sCisgICAgICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgICAgICJfRGVsZXRlIFJvdyI6ICIiLAorICAgICAgICAgICAgIl9JbWFnZSBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiX01vZGlmeSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1JlbW92ZSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1RhYmxlIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJDX2VsbCBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiQ2hlY19rIExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJDb3B5IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIGEgbGluayI6ICIiLAorICAgICAgICAgICAgIkN1cnJlbnQgVVJMIGlzIjogIiIsCisgICAgICAgICAgICAiQ3V0IjogIiIsCisgICAgICAgICAgICAiRGVfbGV0ZSBDb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgQ2VsbCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIiIsCisgICAgICAgICAgICAiSG93IGRpZCB5b3UgZ2V0IGhlcmU/IChQbGVhc2UgcmVwb3J0ISkiOiAiIiwKKyAgICAgICAgICAgICJJX25zZXJ0IFJvdyBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYWZ0ZXIgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJMaW5rIHBvaW50cyB0bzoiOiAiIiwKKyAgICAgICAgICAgICJNYWtlIGxpbl9rLi4uIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiUGFzdGUiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGVsZW1lbnQ6IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJSb193IFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBpbWFnZSBwcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIFJvdyBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlVubGluayB0aGUgY3VycmVudCBlbGVtZW50IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIiIsCisgICAgICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRlZmluaXRpb25MaXN0IjogeworICAgICAgICAgICAgImRlZmluaXRpb24gZGVzY3JpcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGxpc3QiOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIHRlcm0iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRGlhbG9ncyI6IHsKKyAgICAgICAgICAgICJTb21lIFRleHQgSGVyZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEeW5hbWljQ1NTIjogeworICAgICAgICAgICAgIkNob29zZSBzdHlsZXNoZWV0IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCI6ICIiLAorICAgICAgICAgICAgIlVuZGVmaW5lZCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFZGl0VGFnIjogeworICAgICAgICAgICAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICIiLAorICAgICAgICAgICAgIkVkaXQgVGFnIEJ5IFBlZyI6ICIiLAorICAgICAgICAgICAgIlRhZyBFZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICAgICAiIT0iOiAiIiwKKyAgICAgICAgICAgICIhaW4iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7LSI6ICIiLAorICAgICAgICAgICAgIiZndDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSZndDsiOiAiIiwKKyAgICAgICAgICAgICImbHQ7eCZndDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYCFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgLmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAwYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDJgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgM2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA0YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA3YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDhgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGBlYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsmbmJzcDtgMWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YCt7Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2AtOlxcIGAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLXs6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YENgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGNvc2AiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgbG5gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHBpYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgc2luYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0YW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRpbWVzYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZxdW90O3RleHQmcXVvdDsiOiAiIiwKKyAgICAgICAgICAgICInK2Zvcm11bGErJyI6ICIiLAorICAgICAgICAgICAgIigobiksKGspKSI6ICIiLAorICAgICAgICAgICAgIih4KzEpLyh4LTEpIjogIiIsCisgICAgICAgICAgICAiKiI6ICIiLAorICAgICAgICAgICAgIioqIjogIiIsCisgICAgICAgICAgICAiKy0iOiAiIiwKKyAgICAgICAgICAgICItJmd0OyI6ICIiLAorICAgICAgICAgICAgIi0mbHQ7IjogIiIsCisgICAgICAgICAgICAiLToiOiAiIiwKKyAgICAgICAgICAgICItPSI6ICIiLAorICAgICAgICAgICAgIi8vIjogIiIsCisgICAgICAgICAgICAiL18iOiAiIiwKKyAgICAgICAgICAgICI6LiI6ICIiLAorICAgICAgICAgICAgIj0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiQCI6ICIiLAorICAgICAgICAgICAgIltbYSxiXSxbYyxkXV0iOiAiIiwKKyAgICAgICAgICAgICJcXFxcIjogIiIsCisgICAgICAgICAgICAiXFxuQ2xpY2sgaW4gdGhlIGJveCB0byB1c2UgeW91ciBrZXlib2FyZCBvciB1c2UgdGhlIGJ1dHRvbnNcXG4iOiAiIiwKKyAgICAgICAgICAgICJeXiI6ICIiLAorICAgICAgICAgICAgIl5eXiI6ICIiLAorICAgICAgICAgICAgIl9ffCI6ICIiLAorICAgICAgICAgICAgIl98XyI6ICIiLAorICAgICAgICAgICAgImAhPWAiOiAiIiwKKyAgICAgICAgICAgICJgIWluYCI6ICIiLAorICAgICAgICAgICAgImAmYW5kO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmNhcDtgIjogIiIsCisgICAgICAgICAgICAiYCZjdXA7YCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7LWAiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDt4Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJm9yO2AiOiAiIiwKKyAgICAgICAgICAgICJgJnF1b3Q7dGV4dCZxdW90O2AiOiAiIiwKKyAgICAgICAgICAgICJgKChuKSwoaykpYCI6ICIiLAorICAgICAgICAgICAgImAoeCsxKS8oeC0xKWAiOiAiIiwKKyAgICAgICAgICAgICJgKipgIjogIiIsCisgICAgICAgICAgICAiYCpgIjogIiIsCisgICAgICAgICAgICAiYCstYCI6ICIiLAorICAgICAgICAgICAgImAtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLSZsdDtgIjogIiIsCisgICAgICAgICAgICAiYC06YCI6ICIiLAorICAgICAgICAgICAgImAtPWAiOiAiIiwKKyAgICAgICAgICAgICJgLy9gIjogIiIsCisgICAgICAgICAgICAiYC9fYCI6ICIiLAorICAgICAgICAgICAgImA6LmAiOiAiIiwKKyAgICAgICAgICAgICJgPSZndDtgIjogIiIsCisgICAgICAgICAgICAiYEBgIjogIiIsCisgICAgICAgICAgICAiYFtbYSxiXSxbYyxkXV1gIjogIiIsCisgICAgICAgICAgICAiYFxcXFxgIjogIiIsCisgICAgICAgICAgICAiYF9ffGAiOiAiIiwKKyAgICAgICAgICAgICJgX3xfYCI6ICIiLAorICAgICAgICAgICAgImBBQWAiOiAiIiwKKyAgICAgICAgICAgICJgYWxlcGhgIjogIiIsCisgICAgICAgICAgICAiYGFscGhhYCI6ICIiLAorICAgICAgICAgICAgImBhbmRgIjogIiIsCisgICAgICAgICAgICAiYGJhcmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgQ0NgIjogIiIsCisgICAgICAgICAgICAiYGNjYWAiOiAiIiwKKyAgICAgICAgICAgICJgY2hpYCI6ICIiLAorICAgICAgICAgICAgImBkYXJyYCI6ICIiLAorICAgICAgICAgICAgImBkZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsYCI6ICIiLAorICAgICAgICAgICAgImBEZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRpYW1vbmRgIjogIiIsCisgICAgICAgICAgICAiYGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGR5L2R4YCI6ICIiLAorICAgICAgICAgICAgImBFRWAiOiAiIiwKKyAgICAgICAgICAgICJgZXBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgZXRhYCI6ICIiLAorICAgICAgICAgICAgImBmcmFgIjogIiIsCisgICAgICAgICAgICAiYEdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBnYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ3JhZGAiOiAiIiwKKyAgICAgICAgICAgICJgaGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaGF0YWAiOiAiIiwKKyAgICAgICAgICAgICJgaWZgIjogIiIsCisgICAgICAgICAgICAiYGluYCI6ICIiLAorICAgICAgICAgICAgImBpbnRgIjogIiIsCisgICAgICAgICAgICAiYGlvdGFgIjogIiIsCisgICAgICAgICAgICAiYGthcHBhYCI6ICIiLAorICAgICAgICAgICAgImBMYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYGxhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGltXyh4LSZndDtvbylgIjogIiIsCisgICAgICAgICAgICAiYGxvZ2AiOiAiIiwKKyAgICAgICAgICAgICJgbXVgIjogIiIsCisgICAgICAgICAgICAiYE5OYCI6ICIiLAorICAgICAgICAgICAgImBubmAiOiAiIiwKKyAgICAgICAgICAgICJgbm90YCI6ICIiLAorICAgICAgICAgICAgImBudWAiOiAiIiwKKyAgICAgICAgICAgICJgbytgIjogIiIsCisgICAgICAgICAgICAiYG8uYCI6ICIiLAorICAgICAgICAgICAgImBPL2AiOiAiIiwKKyAgICAgICAgICAgICJgb2ludGAiOiAiIiwKKyAgICAgICAgICAgICJgb21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYE9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBvb2AiOiAiIiwKKyAgICAgICAgICAgICJgb3JgIjogIiIsCisgICAgICAgICAgICAiYG94YCI6ICIiLAorICAgICAgICAgICAgImBwaGlgIjogIiIsCisgICAgICAgICAgICAiYFBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGlgIjogIiIsCisgICAgICAgICAgICAiYHBpYCI6ICIiLAorICAgICAgICAgICAgImBwcm9kYCI6ICIiLAorICAgICAgICAgICAgImBwcm9wYCI6ICIiLAorICAgICAgICAgICAgImBQc2lgIjogIiIsCisgICAgICAgICAgICAiYHBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgUVFgIjogIiIsCisgICAgICAgICAgICAiYHF1YWRgIjogIiIsCisgICAgICAgICAgICAiYHJBcnJgIjogIiIsCisgICAgICAgICAgICAiYHJob2AiOiAiIiwKKyAgICAgICAgICAgICJgcm9vdChuKSh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgUlJgIjogIiIsCisgICAgICAgICAgICAiYHNmYWAiOiAiIiwKKyAgICAgICAgICAgICJgU2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYHNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzcXJ0KHgpYCI6ICIiLAorICAgICAgICAgICAgImBzcXVhcmVgIjogIiIsCisgICAgICAgICAgICAiYHN0YWNrcmVsKC0mZ3Q7KSgrKWAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViYCI6ICIiLAorICAgICAgICAgICAgImBzdWJlYCI6ICIiLAorICAgICAgICAgICAgImBzdW1gIjogIiIsCisgICAgICAgICAgICAiYHN1cGAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwZWAiOiAiIiwKKyAgICAgICAgICAgICJgdGF1YCI6ICIiLAorICAgICAgICAgICAgImBUaGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdGhldGFgIjogIiIsCisgICAgICAgICAgICAiYFRUYCI6ICIiLAorICAgICAgICAgICAgImB0dGFgIjogIiIsCisgICAgICAgICAgICAiYHVhcnJgIjogIiIsCisgICAgICAgICAgICAiYHVsYWAiOiAiIiwKKyAgICAgICAgICAgICJgdXBzaWxvbmAiOiAiIiwKKyAgICAgICAgICAgICJgdXVgIjogIiIsCisgICAgICAgICAgICAiYHZlY2FgIjogIiIsCisgICAgICAgICAgICAiYHZ2YCI6ICIiLAorICAgICAgICAgICAgImB4XyhtbilgIjogIiIsCisgICAgICAgICAgICAiYFhpYCI6ICIiLAorICAgICAgICAgICAgImB4aWAiOiAiIiwKKyAgICAgICAgICAgICJgeHhgIjogIiIsCisgICAgICAgICAgICAiYHpldGFgIjogIiIsCisgICAgICAgICAgICAiYFpaYCI6ICIiLAorICAgICAgICAgICAgImB8LSZndDtgIjogIiIsCisgICAgICAgICAgICAiYHwtLWAiOiAiIiwKKyAgICAgICAgICAgICJgfD09YCI6ICIiLAorICAgICAgICAgICAgImB8X19gIjogIiIsCisgICAgICAgICAgICAiYHx+YCI6ICIiLAorICAgICAgICAgICAgImB+PWAiOiAiIiwKKyAgICAgICAgICAgICJgfnxgIjogIiIsCisgICAgICAgICAgICAiYH5+YCI6ICIiLAorICAgICAgICAgICAgIkFBIjogIiIsCisgICAgICAgICAgICAiYWxlcGgiOiAiIiwKKyAgICAgICAgICAgICJhbHBoYSI6ICIiLAorICAgICAgICAgICAgImFuZCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aCBGb3JtdWxhIElucHV0IjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoTUwgRXhhbXBsZSI6ICIiLAorICAgICAgICAgICAgImJhcmEiOiAiIiwKKyAgICAgICAgICAgICJCYXNlZCBvbiBBU0NJSU1hdGhNTCBieSI6ICIiLAorICAgICAgICAgICAgImJiYSI6ICIiLAorICAgICAgICAgICAgImJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiZXRhIjogIiIsCisgICAgICAgICAgICAiQ0MiOiAiIiwKKyAgICAgICAgICAgICJjY2EiOiAiIiwKKyAgICAgICAgICAgICJjaGkiOiAiIiwKKyAgICAgICAgICAgICJkYXJyIjogIiIsCisgICAgICAgICAgICAiZGRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkZWwiOiAiIiwKKyAgICAgICAgICAgICJkZWx0YSI6ICIiLAorICAgICAgICAgICAgIkRlbHRhIjogIiIsCisgICAgICAgICAgICAiZGlhbW9uZCI6ICIiLAorICAgICAgICAgICAgImRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkeS9keCI6ICIiLAorICAgICAgICAgICAgIkVFIjogIiIsCisgICAgICAgICAgICAiZXBzaSI6ICIiLAorICAgICAgICAgICAgImV0YSI6ICIiLAorICAgICAgICAgICAgIkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFzY2lpTWF0aE1MIHZpc2l0IHRoaXMgcGFnZToiOiAiIiwKKyAgICAgICAgICAgICJGb3JtdWxhIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgImZyYSI6ICIiLAorICAgICAgICAgICAgImdhbW1hIjogIiIsCisgICAgICAgICAgICAiR2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJncmFkIjogIiIsCisgICAgICAgICAgICAiaEFyciI6ICIiLAorICAgICAgICAgICAgImhhcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXRhIjogIiIsCisgICAgICAgICAgICAiaWYiOiAiIiwKKyAgICAgICAgICAgICJpbiI6ICIiLAorICAgICAgICAgICAgIklucHV0IjogIiIsCisgICAgICAgICAgICAiaW50IjogIiIsCisgICAgICAgICAgICAiaW50X2FeYmYoeClkeCI6ICIiLAorICAgICAgICAgICAgImlvdGEiOiAiIiwKKyAgICAgICAgICAgICJrYXBwYSI6ICIiLAorICAgICAgICAgICAgIkxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhcnIiOiAiIiwKKyAgICAgICAgICAgICJsQXJyIjogIiIsCisgICAgICAgICAgICAibGltXyh4LSZndDtvbykiOiAiIiwKKyAgICAgICAgICAgICJtdSI6ICIiLAorICAgICAgICAgICAgIk5OIjogIiIsCisgICAgICAgICAgICAibm4iOiAiIiwKKyAgICAgICAgICAgICJubm4iOiAiIiwKKyAgICAgICAgICAgICJub3QiOiAiIiwKKyAgICAgICAgICAgICJudSI6ICIiLAorICAgICAgICAgICAgIm8rIjogIiIsCisgICAgICAgICAgICAiby4iOiAiIiwKKyAgICAgICAgICAgICJPLyI6ICIiLAorICAgICAgICAgICAgIm9pbnQiOiAiIiwKKyAgICAgICAgICAgICJPbWVnYSI6ICIiLAorICAgICAgICAgICAgIm9tZWdhIjogIiIsCisgICAgICAgICAgICAib28iOiAiIiwKKyAgICAgICAgICAgICJvciI6ICIiLAorICAgICAgICAgICAgIm94IjogIiIsCisgICAgICAgICAgICAicGhpIjogIiIsCisgICAgICAgICAgICAiUGhpIjogIiIsCisgICAgICAgICAgICAicGkiOiAiIiwKKyAgICAgICAgICAgICJQaSI6ICIiLAorICAgICAgICAgICAgIlByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJwcm9kIjogIiIsCisgICAgICAgICAgICAicHJvcCI6ICIiLAorICAgICAgICAgICAgInBzaSI6ICIiLAorICAgICAgICAgICAgIlBzaSI6ICIiLAorICAgICAgICAgICAgIlFRIjogIiIsCisgICAgICAgICAgICAicXVhZCI6ICIiLAorICAgICAgICAgICAgInJBcnIiOiAiIiwKKyAgICAgICAgICAgICJyaG8iOiAiIiwKKyAgICAgICAgICAgICJyb290KG4pKHgpIjogIiIsCisgICAgICAgICAgICAiUlIiOiAiIiwKKyAgICAgICAgICAgICJzZmEiOiAiIiwKKyAgICAgICAgICAgICJzaWdtYSI6ICIiLAorICAgICAgICAgICAgIlNpZ21hIjogIiIsCisgICAgICAgICAgICAic3FydCh4KSI6ICIiLAorICAgICAgICAgICAgInNxdWFyZSI6ICIiLAorICAgICAgICAgICAgInN0YWNrcmVsKC0mZ3Q7KSgrKSI6ICIiLAorICAgICAgICAgICAgInN1YiI6ICIiLAorICAgICAgICAgICAgInN1YmUiOiAiIiwKKyAgICAgICAgICAgICJzdW0iOiAiIiwKKyAgICAgICAgICAgICJzdW1fKG49MSleb28iOiAiIiwKKyAgICAgICAgICAgICJzdXAiOiAiIiwKKyAgICAgICAgICAgICJzdXBlIjogIiIsCisgICAgICAgICAgICAidGF1IjogIiIsCisgICAgICAgICAgICAiVGhldGEiOiAiIiwKKyAgICAgICAgICAgICJ0aGV0YSI6ICIiLAorICAgICAgICAgICAgIlRUIjogIiIsCisgICAgICAgICAgICAidHRhIjogIiIsCisgICAgICAgICAgICAidWFyciI6ICIiLAorICAgICAgICAgICAgInVsYSI6ICIiLAorICAgICAgICAgICAgInVwc2lsb24iOiAiIiwKKyAgICAgICAgICAgICJ1dSI6ICIiLAorICAgICAgICAgICAgInV1dSI6ICIiLAorICAgICAgICAgICAgInZlY2EiOiAiIiwKKyAgICAgICAgICAgICJ2diI6ICIiLAorICAgICAgICAgICAgInZ2diI6ICIiLAorICAgICAgICAgICAgInheKG0rbikiOiAiIiwKKyAgICAgICAgICAgICJ4XyhtbikiOiAiIiwKKyAgICAgICAgICAgICJYaSI6ICIiLAorICAgICAgICAgICAgInhpIjogIiIsCisgICAgICAgICAgICAieHgiOiAiIiwKKyAgICAgICAgICAgICJ6ZXRhIjogIiIsCisgICAgICAgICAgICAiWloiOiAiIiwKKyAgICAgICAgICAgICJ8LSZndDsiOiAiIiwKKyAgICAgICAgICAgICJ8LS0iOiAiIiwKKyAgICAgICAgICAgICJ8PT0iOiAiIiwKKyAgICAgICAgICAgICJ8X18iOiAiIiwKKyAgICAgICAgICAgICJ8fiI6ICIiLAorICAgICAgICAgICAgIn49IjogIiIsCisgICAgICAgICAgICAifnwiOiAiIiwKKyAgICAgICAgICAgICJ+fiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGYW5jeVNlbGVjdHMiOiB7CisgICAgICAgICAgICAiJytvcHQudGV4dCsnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbmRSZXBsYWNlIjogeworICAgICAgICAgICAgIic7XHJcbiAgdmFyIHRhZ2MgPSAnIjogIiIsCisgICAgICAgICAgICAiQ2FzZSBzZW5zaXRpdmUgc2VhcmNoIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIiOiAiIiwKKyAgICAgICAgICAgICJEb25lIjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIHRleHQgeW91IHdhbnQgdG8gZmluZCI6ICIiLAorICAgICAgICAgICAgIkZpbmQgYW5kIFJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJmb3VuZCBpdGVtIjogIiIsCisgICAgICAgICAgICAiZm91bmQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJIaWdobGlnaHQiOiAiIiwKKyAgICAgICAgICAgICJJbmZvcm0gYSByZXBsYWNlbWVudCB3b3JkIjogIiIsCisgICAgICAgICAgICAiTmV4dCI6ICIiLAorICAgICAgICAgICAgIm5vdCBmb3VuZCI6ICIiLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIHdpdGg6IjogIiIsCisgICAgICAgICAgICAicmVwbGFjZWQgaXRlbSI6ICIiLAorICAgICAgICAgICAgInJlcGxhY2VkIGl0ZW1zIjogIiIsCisgICAgICAgICAgICAiU2VhcmNoIGZvcjoiOiAiIiwKKyAgICAgICAgICAgICJTdWJzdGl0dXRlIGFsbCBvY2N1cnJlbmNlcyI6ICIiLAorICAgICAgICAgICAgIlN1YnN0aXR1dGUgdGhpcyBvY2N1cnJlbmNlPyI6ICIiLAorICAgICAgICAgICAgIlVuZG8iOiAiIiwKKyAgICAgICAgICAgICJXaG9sZSB3b3JkcyBvbmx5IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1PcGVyYXRpb25zIjogeworICAgICAgICAgICAgIkVudGVyIHRoZSBuYW1lIGZvciBuZXcgb3B0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgY2hlY2sgYm94LiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIEZvcm0uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbXVsdGktbGluZSB0ZXh0IGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHJhZGlvIGJ1dHRvbi4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzZWxlY3QgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgc3VibWl0L3Jlc2V0IGJ1dHRvbi4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSB0ZXh0LCBwYXNzd29yZCBvciBoaWRkZW4gZmllbGQuIjogIiIsCisgICAgICAgICAgICAiTWVzc2FnZSBTZW50IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIFNlbGVjdC4uLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGb3JtcyI6IHsKKyAgICAgICAgICAgICInb25DbGljayc9IjogIiIsCisgICAgICAgICAgICAiQWNjZXNzIEtleToiOiAiIiwKKyAgICAgICAgICAgICJBY3Rpb24gVVJMOiI6ICIiLAorICAgICAgICAgICAgIkJ1dHRvbiBTY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJDaGVja2VkIjogIiIsCisgICAgICAgICAgICAiQ29sdW1uczoiOiAiIiwKKyAgICAgICAgICAgICJEZWZhdWx0IHRleHQgKG9wdGlvbmFsKSI6ICIiLAorICAgICAgICAgICAgIkRpbWVuc2lvbnMiOiAiIiwKKyAgICAgICAgICAgICJEaXNhYmxlZCI6ICIiLAorICAgICAgICAgICAgIkVuY29kaW5nOiI6ICIiLAorICAgICAgICAgICAgIkZvciBDb250cm9sOiI6ICIiLAorICAgICAgICAgICAgIkZvcm0iOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IEZJRUxEU0VUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBJTlBVVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IFNFTEVDVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogVEVYVEFSRUEiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIGhhbmRsZXIgc2NyaXB0IjogIiIsCisgICAgICAgICAgICAiRm9ybSBOYW1lOiI6ICIiLAorICAgICAgICAgICAgIkdldCI6ICIiLAorICAgICAgICAgICAgIkhhcmQiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQgaW4gbnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJIVE1MLUZvcm0gdG8gQ0dJIChkZWZhdWx0KSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIHNvdXJjZSI6ICIiLAorICAgICAgICAgICAgIkluaXRpYWwgVGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IEZJRUxEU0VUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IElOUFVUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IExBQkVMIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFNFTEVDVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkphdmFzY3JpcHQgZm9yIGJ1dHRvbiBjbGljayI6ICIiLAorICAgICAgICAgICAgIkxhYmVsOiI6ICIiLAorICAgICAgICAgICAgIkxlZ2VuZDoiOiAiIiwKKyAgICAgICAgICAgICJNYXggbGVuZ3RoOiI6ICIiLAorICAgICAgICAgICAgIk1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWNjZXB0ZWQiOiAiIiwKKyAgICAgICAgICAgICJNZXRob2Q6IjogIiIsCisgICAgICAgICAgICAibXVsdGlwYXJ0IEZvcm0gRGF0YSAoRmlsZS1VcGxvYWQpIjogIiIsCisgICAgICAgICAgICAiTmFtZSI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIm5hbWUgb2YgdGhlIHRleHRhcmVhIjogIiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiIiwKKyAgICAgICAgICAgICJub3JtYWwiOiAiIiwKKyAgICAgICAgICAgICJub3dyYXAiOiAiIiwKKyAgICAgICAgICAgICJPZmYiOiAiIiwKKyAgICAgICAgICAgICJQaHlzaWNhbCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciBhIExhYmVsIjogIiIsCisgICAgICAgICAgICAiUG9zdCI6ICIiLAorICAgICAgICAgICAgInByZSI6ICIiLAorICAgICAgICAgICAgIlJlYWQgT25seSI6ICIiLAorICAgICAgICAgICAgIlJvd3M6IjogIiIsCisgICAgICAgICAgICAiU2l6ZSBvZiB0ZXh0IGJveCBpbiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiU2l6ZToiOiAiIiwKKyAgICAgICAgICAgICJTb2Z0IjogIiIsCisgICAgICAgICAgICAiVGFiIEluZGV4OiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBGcmFtZToiOiAiIiwKKyAgICAgICAgICAgICJUZXh0OiI6ICIiLAorICAgICAgICAgICAgIlVSTCBvZiBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlZhbHVlIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiVmFsdWU6IjogIiIsCisgICAgICAgICAgICAiVmlydHVhbCI6ICIiLAorICAgICAgICAgICAgIldpZHRoIGluIG51bWJlciBvZiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiV3JhcCBNb2RlOiI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgTmFtZSI6ICIiLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IgorICAgICAgICB9LAorICAgICAgICAiRnVsbFBhZ2UiOiB7CisgICAgICAgICAgICAiLi4uIjogIiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIkJhY2tncm91bmQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiQ2hhcmFjdGVyIHNldDoiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoSVNPLTg4NTktNSkiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoS09JOC1SKSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChXSU5ET1dTLTEyNTEpIjogIiIsCisgICAgICAgICAgICAiRE9DVFlQRToiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiRG9jdW1lbnQgdGl0bGU6IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZHM6IjogIiIsCisgICAgICAgICAgICAiUHJpbWFyeSBzdHlsZS1zaGVldDoiOiAiIiwKKyAgICAgICAgICAgICJUZXh0IGNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIlVURi04IChyZWNvbW1lbmRlZCkiOiAiIiwKKyAgICAgICAgICAgICJ3ZXN0ZXJuIChJU08tODg1OS0xKSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGdWxsU2NyZWVuIjogeworICAgICAgICAgICAgIk1heGltaXplL01pbmltaXplIEVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJHZWNrbyI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICAgICAiJiN4MDBkNzsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L2VkaXQgaG9yaXpvbnRhbCBydWxlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgSG9yaXpvbnRhbCBSdWxlIjogIiIsCisgICAgICAgICAgICAiTm8gc2hhZGluZyI6ICIiLAorICAgICAgICAgICAgIlN0eWxlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgICAgICJDU1MgU3R5bGUiOiAiIiwKKyAgICAgICAgICAgICItIjogIjw8RXF1YXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgICAgICJBbmNob3IgbmFtZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBBbmNob3IiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydEltYWdlIjogeworICAgICAgICAgICAgIkFic2JvdHRvbSI6ICIiLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICIiLAorICAgICAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIiIsCisgICAgICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiIiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICIiLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiIiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIiIsCisgICAgICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICIiLAorICAgICAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbDoiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0Tm90ZSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgZm9vdG5vdGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgTm90ZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQYWdlYnJlYWsiOiB7CisgICAgICAgICAgICAiUGFnZSBicmVhayI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQnJlYWsiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U21pbGV5IjogeworICAgICAgICAgICAgIkluc2VydCBTbWlsZXkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgICAgICJcXG4gIFRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nXFxuIjogIiIsCisgICAgICAgICAgICAiSGlkZSBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICIiLAorICAgICAgICAgICAgIkxpbmsxIjogIiIsCisgICAgICAgICAgICAiTGluazIiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMyI6ICIiLAorICAgICAgICAgICAgIkxpbms0IjogIiIsCisgICAgICAgICAgICAiTGluazUiOiAiIiwKKyAgICAgICAgICAgICJTaG93IHByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZyI6ICIiLAorICAgICAgICAgICAgIlZhcmlhYmxlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAgICAgIkFsbCBDYXRlZ29yaWVzIjogIiIsCisgICAgICAgICAgICAiRmlsdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMgdGVtcGxhdGUgdmFyaWFibGUiOiAiIiwKKyAgICAgICAgICAgICJPbmx5IHNlYXJjaCB3b3JkIGJlZ2lubmluZyI6ICIiLAorICAgICAgICAgICAgIkhUTUwiOiAiPDxDaGFyQ291bnRlcj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgU25pcHBldCI6ICI8PEluc2VydFNuaXBwZXQ+PiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIlZhcmlhYmxlIjogIjw8SW5zZXJ0U25pcHBldD4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0VGFibGUiOiB7CisgICAgICAgICAgICAiQ2FwdGlvbiBmb3IgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICIiLAorICAgICAgICAgICAgIkNlbGwgc3BhY2luZzoiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZSBib3JkZXJzOiI6ICIiLAorICAgICAgICAgICAgIkNvbHM6IjogIiIsCisgICAgICAgICAgICAiRW0iOiAiIiwKKyAgICAgICAgICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiTGF5b3UiOiAiIiwKKyAgICAgICAgICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIk51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICIiLAorICAgICAgICAgICAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIiIsCisgICAgICAgICAgICAiU3R5bGUgb2YgdGhlIGJvcmRlciI6ICIiLAorICAgICAgICAgICAgIldpZHRoIG9mIHRoZSB0YWJsZSI6ICIiLAorICAgICAgICAgICAgIldpZHRoIHVuaXQiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUm93czoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxhbmdNYXJrcyI6IHsKKyAgICAgICAgICAgICImbWRhc2g7IGxhbmd1YWdlICZtZGFzaDsiOiAiIiwKKyAgICAgICAgICAgICInLCAnIjogIiIsCisgICAgICAgICAgICAiRW5nbGlzaCI6ICIiLAorICAgICAgICAgICAgIkZyZW5jaCI6ICIiLAorICAgICAgICAgICAgIkdyZWVrIjogIiIsCisgICAgICAgICAgICAibGFuZ3VhZ2Ugc2VsZWN0IjogIiIsCisgICAgICAgICAgICAiTGF0aW4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiTGlua2VyIjogeworICAgICAgICAgICAgIihweCkiOiAiIiwKKyAgICAgICAgICAgICJBbmNob3ItTGluayI6ICIiLAorICAgICAgICAgICAgIkFuY2hvcjoiOiAiIiwKKyAgICAgICAgICAgICJFbWFpbCBBZGRyZXNzOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJMb2NhdGlvbiBCYXI6IjogIiIsCisgICAgICAgICAgICAiTWVudSBCYXI6IjogIiIsCisgICAgICAgICAgICAiTWVzc2FnZSBUZW1wbGF0ZToiOiAiIiwKKyAgICAgICAgICAgICJOZXcgV2luZG93IjogIiIsCisgICAgICAgICAgICAiT3JkaW5hcnkgTGluayI6ICIiLAorICAgICAgICAgICAgIlBvcHVwIFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlBvcHVwV2luZG93IjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJSZXNpemVhYmxlOiI6ICIiLAorICAgICAgICAgICAgIlNhbWUgV2luZG93IChqdW1wIG91dCBvZiBmcmFtZXMpIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsYmFyczoiOiAiIiwKKyAgICAgICAgICAgICJTaG93cyBPbiBIb3ZlciI6ICIiLAorICAgICAgICAgICAgIlN0YXR1cyBCYXI6IjogIiIsCisgICAgICAgICAgICAiU3ViamVjdDoiOiAiIiwKKyAgICAgICAgICAgICJUaXRsZToiOiAiIiwKKyAgICAgICAgICAgICJUb29sYmFyOiI6ICIiLAorICAgICAgICAgICAgIlVSTCBMaW5rIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIiIsCisgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJOYW1lOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNpemU6IjogIjw8Rm9ybXM+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxpc3RUeXBlIjogeworICAgICAgICAgICAgIkNob29zZSBsaXN0IHN0eWxlIHR5cGUgKGZvciBvcmRlcmVkIGxpc3RzKSI6ICIiLAorICAgICAgICAgICAgIkRlY2ltYWwgbnVtYmVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIGdyZWVrIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciBsYXRpbiBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgcm9tYW4gbnVtYmVycyI6ICIiLAorICAgICAgICAgICAgIlVwcGVyIGxhdGluIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJVcHBlciByb21hbiBudW1iZXJzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIk1vb3Rvb2xzRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiT3BlcmEiOiB7CisgICAgICAgICAgICAiTUFSSyI6ICIiLAorICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAgICAgIkluc2VydCB0ZXh0IGluIG5ldyBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJQYXN0ZSBhcyBQbGFpbiBUZXh0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlByZXNlcnZlU2NyaXB0cyI6IHsKKyAgICAgICAgICAgICJKYXZhU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiUEhQIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlF1aWNrVGFnIjogeworICAgICAgICAgICAgIicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbCc6ICciOiAiIiwKKyAgICAgICAgICAgICJBVFRSSUJVVEVTIjogIiIsCisgICAgICAgICAgICAiQ29sb3JzIjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIFRBRyB5b3Ugd2FudCB0byBpbnNlcnQiOiAiIiwKKyAgICAgICAgICAgICJObyBDU1MgY2xhc3MgYXZhaWFibGUiOiAiIiwKKyAgICAgICAgICAgICJPayI6ICIiLAorICAgICAgICAgICAgIk9QVElPTlMiOiAiIiwKKyAgICAgICAgICAgICJRdWljayBUYWcgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiVEFHcyI6ICIiLAorICAgICAgICAgICAgIlRoZXJlIGFyZSBzb21lIHVuY2xvc2VkIHF1b3RlIjogIiIsCisgICAgICAgICAgICAiVGhpcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIFRBRyI6ICIiLAorICAgICAgICAgICAgIllvdSBoYXZlIHRvIHNlbGVjdCBzb21lIHRleHQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU2F2ZVN1Ym1pdCI6IHsKKyAgICAgICAgICAgICJpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIlJlYWR5IjogIiIsCisgICAgICAgICAgICAiU2F2ZSI6ICIiLAorICAgICAgICAgICAgIlNhdmluZy4uLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTZXRJZCI6IHsKKyAgICAgICAgICAgICJJRC9OYW1lOiI6ICIiLAorICAgICAgICAgICAgIlNldCBJZCBhbmQgTmFtZSI6ICIiLAorICAgICAgICAgICAgIlNldCBJZC9OYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElEL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgICAgICJDbG9zaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiQ2xvc2luZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiQ29udmVydCBhbGwgcXVvdGVzIGFuZCBkYXNoZXMgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgYXV0b21hdGljIHJlcGxhY2VtZW50cyI6ICIiLAorICAgICAgICAgICAgIk9wZW5pbmdEb3VibGVRdW90ZXMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nU2luZ2xlUXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJTbWFydFJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJTbWFydFJlcGxhY2UgU2V0dGluZ3MiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU3R5bGlzdCI6IHsKKyAgICAgICAgICAgICJTdHlsZXMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU3VwZXJDbGVhbiI6IHsKKyAgICAgICAgICAgICJDbGVhbiBiYWQgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIFNlbGVjdGlvbiBPbmx5IjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gdXAgSFRNTCI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIFNjb3BlIjogIiIsCisgICAgICAgICAgICAiR2VuZXJhbCB0aWR5IHVwIGFuZCBjb3JyZWN0aW9uIG9mIHNvbWUgcHJvYmxlbXMuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHNlbGVjdCBmcm9tIHRoZSBmb2xsb3dpbmcgY2xlYW5pbmcgb3B0aW9ucy4uLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzdGFuZCBieSB3aGlsZSBjbGVhbmluZyBpbiBwcm9jZXNzLi4uIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsaWdubWVudCAobGVmdC9yaWdodC9qdXN0aWZ5KS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxsIGNsYXNzZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIEFsbCBIVE1MIFRhZ3MiOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxsIHN0eWxlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIGZvbnQgc2l6ZXMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0ZXh0IGNvbG9ycy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIHR5cGVmYWNlcyAoZm9udCBcInN0eWxlc1wiKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZW1waGFzaXMgYW5kIGFubm90YXRpb25zLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBsYW5nIGF0dHJpYnV0ZXMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIFBhcmFncmFwaHMiOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzLiI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UgZGlyZWN0aW9uYWwgcXVvdGUgbWFya3Mgd2l0aCBub24tZGlyZWN0aW9uYWwgcXVvdGUgbWFya3MuIjogIiIsCisgICAgICAgICAgICAiVmlnb3JvdXNseSBwdXJnZSBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlRhYmxlT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJDZWxsIFR5cGU6IjogIiIsCisgICAgICAgICAgICAiQ2VsbHMgZG93biI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIHRvIHRoZSByaWdodCwgYW5kIjogIiIsCisgICAgICAgICAgICAiRG8gTm90IENoYW5nZSI6ICIiLAorICAgICAgICAgICAgIkZyYW1lIGFuZCBib3JkZXJzIjogIiIsCisgICAgICAgICAgICAiSGVhZGVyICh0aCkiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBjdXJyZW50IGNlbGwgd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJOb3JtYWwgKHRkKSI6ICIiLAorICAgICAgICAgICAgIkNvbHVtbnMiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIlJvd3MiOiAiPDxGb3Jtcz4+IgorICAgICAgICB9LAorICAgICAgICAiVW5zYXZlZENoYW5nZXMiOiB7CisgICAgICAgICAgICAiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBlZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiV2ViS2l0IjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICI8PEdlY2tvPj4iCisgICAgICAgIH0sCisgICAgICAgICJYaW5oYSI6IHsKKyAgICAgICAgICAgICImIzgyMTI7IGZvbnQgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICImIzgyMTI7IHNpemUgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIjEgKDggcHQpIjogIiIsCisgICAgICAgICAgICAiMiAoMTAgcHQpIjogIiIsCisgICAgICAgICAgICAiMyAoMTIgcHQpIjogIiIsCisgICAgICAgICAgICAiNCAoMTQgcHQpIjogIiIsCisgICAgICAgICAgICAiNSAoMTggcHQpIjogIiIsCisgICAgICAgICAgICAiNiAoMjQgcHQpIjogIiIsCisgICAgICAgICAgICAiNyAoMzYgcHQpIjogIiIsCisgICAgICAgICAgICAiQWRkcmVzcyI6ICIiLAorICAgICAgICAgICAgIkFyaWFsIjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gY29udGVudCBwYXN0ZWQgZnJvbSBXb3JkIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJDbGVhciBNU09mZmljZSB0YWdzIjogIiIsCisgICAgICAgICAgICAiQ2xvc2UiOiAiIiwKKyAgICAgICAgICAgICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIiIsCisgICAgICAgICAgICAiQ291cmllciBOZXciOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgU3RhdHVzYmFyIjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFRvb2xiYXIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTAgKHplcm8pIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0xIC4uIENUUkwtNiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtRSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtVSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtViI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWiI6ICIiLAorICAgICAgICAgICAgIkVkaXRvciBIZWxwIjogIiIsCisgICAgICAgICAgICAiRU5URVIiOiAiIiwKKyAgICAgICAgICAgICJFcnJvciBMb2FkaW5nIFhpbmhhLiAgRGV2ZWxvcGVycywgY2hlY2sgdGhlIEVycm9yIENvbnNvbGUgZm9yIGluZm9ybWF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGluZyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdHRlZCI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYXRlIFhpbmhhIGZyYW1ld29yayI6ICIiLAorICAgICAgICAgICAgIkdlb3JnaWEiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDEiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDIiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDMiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDQiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDUiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDYiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5ncyI6ICIiLAorICAgICAgICAgICAgIkltcGFjdCI6ICIiLAorICAgICAgICAgICAgIkluaXQgZWRpdG9yIHNpemUiOiAiIiwKKyAgICAgICAgICAgICJpbnNlcnQgbGluZWJyZWFrIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICIiLAorICAgICAgICAgICAgIktleWJvYXJkIHNob3J0Y3V0cyI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgQ29yZSI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ISI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbnMiOiAiIiwKKyAgICAgICAgICAgICJNUyBXb3JkIENsZWFuZXIiOiAiIiwKKyAgICAgICAgICAgICJuZXcgcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiTm9ybWFsIjogIiIsCisgICAgICAgICAgICAiUHJpbnQgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJSZWdpc3RlciBwbHVnaW4gJHBsdWdpbiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBhcyI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCBhbGwiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIlNISUZULUVOVEVSIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgQmxvY2siOiAiIiwKKyAgICAgICAgICAgICJUYWhvbWEiOiAiIiwKKyAgICAgICAgICAgICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAiIiwKKyAgICAgICAgICAgICJUaW1lcyBOZXcgUm9tYW4iOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgQm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIlRvdWNoIGhlcmUgZmlyc3QgdG8gYWN0aXZhdGUgZWRpdG9yLiI6ICIiLAorICAgICAgICAgICAgIlZlcmRhbmEiOiAiIiwKKyAgICAgICAgICAgICJXYWl0aW5nIGZvciBJZnJhbWUgdG8gbG9hZC4uLiI6ICIiLAorICAgICAgICAgICAgIldpbmdEaW5ncyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJSZW1vdmUgQ3VycmVudCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IEJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJTZXQgcGFnZSBiYWNrZ3JvdW5kIGltYWdlIjogIiIsCisgICAgICAgICAgICAiU2V0IFBhZ2UgQmFja2dyb3VuZCBJbWFnZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDbGllbnRzaWRlU3BlbGxjaGVjayI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIENMSUVOVFNJREVTUEVMTENIRUNLIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrIHVzaW5nIGllU3BlbGwiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTAlIjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICIiLAorICAgICAgICAgICAgIjIwMCUiOiAiIiwKKyAgICAgICAgICAgICIyNSUiOiAiIiwKKyAgICAgICAgICAgICI1MCUiOiAiIiwKKyAgICAgICAgICAgICI3NSUiOiAiIiwKKyAgICAgICAgICAgICI+TGlzdCBWaWV3IjogIiIsCisgICAgICAgICAgICAiPlRodW1ibmFpbCBWaWV3IjogIiIsCisgICAgICAgICAgICAiQToiOiAiIiwKKyAgICAgICAgICAgICJBbHQiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJDcm9wIjogIiIsCisgICAgICAgICAgICAiRDoiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiIiwKKyAgICAgICAgICAgICJFZGl0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIiIsCisgICAgICAgICAgICAiRmlsZW5hbWU6IjogIiIsCisgICAgICAgICAgICAiRmlsZXNpemU6IjogIiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkZsaXAgVmVydGljYWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJHSUYiOiAiIiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiIiwKKyAgICAgICAgICAgICJIOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIiIsCisgICAgICAgICAgICAiSlBFRyBIaWdoIjogIiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiIiwKKyAgICAgICAgICAgICJKUEVHIE1lZGl1bSI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmciOiAiIiwKKyAgICAgICAgICAgICJMb2NrIjogIiIsCisgICAgICAgICAgICAiTWFya2VyIjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBmb2xkZXIgc2l6ZSBsaW1pdCByZWFjaGVkLiBVcGxvYWQgZGlzYWJsZWQuIjogIiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICIiLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJObyBGaWxlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB2YWx1ZSI6ICIiLAorICAgICAgICAgICAgIlBORyI6ICIiLAorICAgICAgICAgICAgIlByZXNldCI6ICIiLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIiIsCisgICAgICAgICAgICAiUmVmcmVzaCI6ICIiLAorICAgICAgICAgICAgIlJlbmFtZSI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIEltYWdlIjogIiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiIiwKKyAgICAgICAgICAgICJTdGFydCBZOiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgbWFya2VyIGNvbG9yIjogIiIsCisgICAgICAgICAgICAiVHJhc2giOiAiIiwKKyAgICAgICAgICAgICJVcGxvYWQiOiAiIiwKKyAgICAgICAgICAgICJXOiI6ICIiLAorICAgICAgICAgICAgIlg6IjogIiIsCisgICAgICAgICAgICAiWGluaGEgSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiWToiOiAiIiwKKyAgICAgICAgICAgICJab29tIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQ2xlYXIiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJDb3B5IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiQ3V0IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICI8PE1vb3Rvb2xzRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiRmlsdGVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbHRlciI6ICI8PEluc2VydFNuaXBwZXQyPj4iCisgICAgICAgIH0sCisgICAgICAgICJIdG1sVGlkeSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEhUTUxUSURZIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkF1dG8tVGlkeSI6ICIiLAorICAgICAgICAgICAgIkRvbid0IFRpZHkiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIFRpZHkiOiAiIiwKKyAgICAgICAgICAgICJUaWR5IGZhaWxlZC4gIENoZWNrIHlvdXIgSFRNTCBmb3Igc3ludGF4IGVycm9ycy4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFuZ2xlOiI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgUGljdHVyZXMiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFVzZXJuYW1lL0VtYWlsIjogIiIsCisgICAgICAgICAgICAiRm9sZGVyIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgTGlzdCI6ICIiLAorICAgICAgICAgICAgIktleXdvcmQiOiAiIiwKKyAgICAgICAgICAgICJObyBJbWFnZXMgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBQaG90b3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBWaWRlb3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIFNlcnZlciI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBVc2VybmFtZSI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW8gTGlzdCI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW9zIjogIiIsCisgICAgICAgICAgICAiQToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkNsZWFyIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJDcm9wIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkVkaXQiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGVuYW1lOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIEltYWdlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBIaWdoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIExvdyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBNZWRpdW0iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkxvY2siOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1hcmtlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUE5HIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUXVhbGl0eToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJlZnJlc2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJlc2l6ZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlN0YXJ0IFk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVHJhc2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlc6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUTUFSUVVFRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUiOiAiIiwKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kLUNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkJlaGF2aW9yOiI6ICIiLAorICAgICAgICAgICAgIkNvbnRpbnVvdXMiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3Rpb246IjogIiIsCisgICAgICAgICAgICAiTWFycXVlZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgQW1vdW50OiI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbCBEZWxheToiOiAiIiwKKyAgICAgICAgICAgICJTbGlkZSI6ICIiLAorICAgICAgICAgICAgIlNwZWVkIENvbnRyb2wiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJUZXh0OiI6ICI8PEZvcm1zPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm90IGRlZmluZWQiOiAiIiwKKyAgICAgICAgICAgICIgT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlVwbG9hZCBmaWxlIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlNpemUiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlZlcnRpY2FsOiI6ICI8PEluc2VydEltYWdlPj4iCisgICAgICAgIH0sCisgICAgICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIxMjAlIjogIiIsCisgICAgICAgICAgICAiMTUwJSI6ICIiLAorICAgICAgICAgICAgIjgwJSI6ICIiLAorICAgICAgICAgICAgIkFkZCBHVUlETyBDb2RlIGluIGEgdGV4dGJveCBvbiB0aGUgcGFnZSI6ICIiLAorICAgICAgICAgICAgIkFkZCBNSURJIGxpbmsgdG8gYWxsb3cgc3R1ZGVudHMgdG8gaGVhciB0aGUgbXVzaWMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJHVUlETyBDb2RlIjogIiIsCisgICAgICAgICAgICAiR3VpZG8gY29kZSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIGluIGFwcGxldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBHVUlETyBNdXNpYyBOb3RhdGlvbiI6ICIiLAorICAgICAgICAgICAgIk1JREkgRmlsZSI6ICIiLAorICAgICAgICAgICAgIlNvdXJjZSBDb2RlIjogIiIsCisgICAgICAgICAgICAiV2l0aCBNb3ppbGxhLCB0aGUgYXBwbGV0IHdpbGwgbm90IGJlIHZpc2libGUgaW4gZWRpdG9yLCBidXQgb25seSBpbiBXZWIgcGFnZSBhZnRlciBzdWJtaXR0aW5nLiI6ICIiLAorICAgICAgICAgICAgIlpvb20gOiI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIFByZXZpZXciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJPcHRpb25zIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlpvb20iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJQU0xvY2FsIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNMT0NBTCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJDb25maXJtIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIEdlYXJzIGluIG9yZGVyIHRvIHVzZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlIGFuZCBjb25maWd1cmF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkVuYWJsaW5nIExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJJbnN0YWxsIjogIiIsCisgICAgICAgICAgICAiTGVhcm4gQWJvdXQgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCByZWxvYWQgdGhlIHBhZ2UsIGNhdXNpbmcgeW91IHRvIGxvc2UgYW55IHVuc2F2ZWQgd29yay4gIFByZXNzIFwiT0tcIiB0byByZWxvYWQuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgdXNlcyBHb29nbGUgR2VhcnMgdG8gZW5hYmxlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UuICBXaXRoIEdlYXJzIGluc3RhbGxlZCwgeW91IGNhbiBzYXZlIGRyYWZ0cyBvZiB5b3VyIGRvY3VtZW50cyBvbiB5b3VyIGhhcmQgZHJpdmUsIGNvbmZpZ3VyZSBYaW5oYSB0byBsb29rIHRoZSB3YXkgeW91IHdhbnQsIGFuZCBjYXJyeSB0aGlzIGluZm9ybWF0aW9uIHdoZXJldmVyIHlvdSB1c2UgWGluaGEgb24gdGhlIHdlYi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiUFNTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU1NFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWxlOiAiOiAiIiwKKyAgICAgICAgICAgICJJbXBvcnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEZXRhaWxzIjogIiIsCisgICAgICAgICAgICAiRmlsZSBCcm93c2VyIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gICAgVGhlcmUgQyAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgVGhlcmUgQSAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyBcIiBUaGVyZSBCIFwiIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gJyBUaGVyZSBEICciOiAiIiwKKyAgICAgICAgICAgICJMaXN0IG9mIFBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIk5ldyBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIk9wZW4iOiAiIiwKKyAgICAgICAgICAgICJPcGVuIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgeW91J2QgbGlrZSB0byBjcmVhdGUuIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBlcmFzZSBhbnkgdW5zYXZlZCBjb250ZW50LiAgSWYgeW91J3JlIGNlcnRhaW4sIHBsZWFzZSBjbGljayBPSyB0byBjb250aW51ZS4iOiAiIiwKKyAgICAgICAgICAgICJXZWIgVVJMIjogIiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICI8PFBTTG9jYWw+PiIsCisgICAgICAgICAgICAiQ29weSI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlbmFtZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IjogIjw8SW5zZXJ0Tm90ZT4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJOZXcgRm9sZGVyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEaWN0aW9uYXJ5IjogIiIsCisgICAgICAgICAgICAiRmluaXNoZWQgbGlzdCBvZiBtaXNwZWxsZWQgd29yZHMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MQXJlYSBTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiSSB3aWxsIG9wZW4gaXQgaW4gYSBuZXcgcGFnZS4iOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUiOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUgYWxsIjogIiIsCisgICAgICAgICAgICAiSW5mbyI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIjogIiIsCisgICAgICAgICAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIiIsCisgICAgICAgICAgICAiT3JpZ2luYWwgd29yZCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gb3BlbiB0aGlzIGxpbmsiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdDogY2hhbmdpbmcgZGljdGlvbmFyeSB0byI6ICIiLAorICAgICAgICAgICAgInBsaXogd2VpdCA7LSkiOiAiIiwKKyAgICAgICAgICAgICJSZS1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGFsbCI6ICIiLAorICAgICAgICAgICAgIlJldmVydCI6ICIiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrZXIiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbC1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlN1Z2dlc3Rpb25zIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSB3aXRoIjogIjw8RmluZFJlcGxhY2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuRm9ybWF0IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWxsIjogIiIsCisgICAgICAgICAgICAiQWxsIEhUTUw6IjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgQXJlYSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIG9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0aW5nOiI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCB3aGljaCB0eXBlcyBvZiBmb3JtYXR0aW5nIHlvdSB3b3VsZCBsaWtlIHRvIHJlbW92ZS4iOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Rpb24iOiAiIgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTExMjAxNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2phLmpzCkBAIC0wLDAgKzEsMTU2MSBAQAorLy8gWGluaGEgTGFuZ3VhZ2UgQ29tYmluZWQgVHJhbnNsYXRpb24gRmlsZQorLy8KKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElOU1RSVUNUSU9OUyBUTyBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gWW91ciB0cmFuc2xhdGlvbiBtdXN0IGJlIGluIFVURi04IENoYXJhY3RlciBFbmNvZGluZy4KKy8vCisvLyBUaGlzIGlzIGEgSlNPTiBlbmNvZGVkIGZpbGUgKHBsdXMgY29tbWVudHMpLCBzdHJpbmdzIHNob3VsZCBiZSBkb3VibGUtcXVvdGUKKy8vIG9ubHksIGRvIG5vdCB1c2Ugc2luZ2xlIHF1b3RlcyB0byBzdXJyb3VuZCBzdHJpbmdzIC0gImhlbGxvIiwgbm90ICdoZWxsbycKKy8vIGRvIG5vdCBoYXZlIGEgdHJhaWxpbmcgY29tbWEgYWZ0ZXIgdGhlIGxhc3QgZW50cnkgaW4gYSBzZWN0aW9uLgorLy8KKy8vIE9ubHkgZnVsbCBsaW5lIGNvbW1lbnRzIGFyZSBhbGxvd2VkICh0aGF0IGEgY29tbWVudHMgb2NjdXB5IGVudGlyZSBsaW5lcykuCisvLworLy8gU2VhcmNoIGZvciB0aGUgX19ORVdfVFJBTlNMQVRJT05TX18gc2VjdGlvbiBiZWxvdywgdGhpcyBpcyB3aGVyZSB5b3Ugd2lsbAorLy8gd2FudCB0byBmb2N1cywgdGhpcyBzZWN0aW9uIGluY2x1ZGVzIHRoaW5ncyB0aGF0IGRvIG5vdCBwcmVzZW50bHkgaGF2ZSBhIAorLy8gdHJhbnNsYXRpb24gb3IgZm9yIHdoaWNoIHRoZSB0cmFuc2xhdGlvbiBuZWVkcyB0byBiZSBjaGVja2VkIGZvciBhY2N1cmFjeS4KKy8vCisvLyBJbiB0aGUgTmV3IFRyYW5zbGF0aW9ucyBzZWN0aW9uIGEgdHJhbnNsYXRpb24gc3RyaW5nIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICIiCisvLyAgICAgVGhpcyBtZWFucyBpdCBpcyBub3QgdHJhbnNsYXRlZCB5ZXQsIGFkZCB5b3VyIHRyYW5zbGF0aW9uLi4uCisvLyAgICAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIktsaW5nb24gU3RyaW5nIEhlcmUiCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJUcmFuc2xhdGVkIFN0cmluZyBIZXJlIgorLy8gICAgIFRoaXMgbWVhbnMgdGhhdCBhbiBleGlzdGluZyB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcsIGluIHNvbWUgb3RoZXIKKy8vICAgICBzZWN0aW9uIGhhcyBiZWVuIGZvdW5kLCBhbmQgdXNlZC4gIENoZWNrIHRoYXQgaXQgaXMgYXBwcm9wcml0ZSBmb3IgdGhpcworLy8gICAgIHNlY3Rpb24gYW5kIGlmIGl0IGlzLCB0aGF0J3MgZmluZSBsZWF2ZSBpdCBhcyBpcywgb3RoZXJ3aXNlIGNoYW5nZSBhcworLy8gICAgIGFwcHJvcHJpYXRlLgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiPDxBbm90aGVyU2VjdGlvbj4+IgorLy8gICAgIFRoaXMgbWVhbnMgdXNlIHRoZSBzYW1lIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZyBhcyA8PEFub3RoZXJTZWN0aW9uPj4KKy8vICAgICB0aGlzIHNhdmVzIHlvdSByZS10cmFubGF0aW5nIHN0cmluZ3MuICBJZiB0aGUgQ29udGV4dCBvZiB0aGlzIHNlY3Rpb24KKy8vICAgICBhbmQgdGhlIGNvbnRleHQgb2YgQW5vdGhlclNlY3Rpb24gc2VlbSB0aGUgc2FtZSwgdGhhdCdzIGZpbmUgbGVhdmUgaXQKKy8vICAgICB1c2luZyB0aGF0IHRyYW5zbGF0aW9uLCBidXQgaWYgdGhpcyBzZWN0aW9uIG5lZWRzIGEgZGlmZmVyZW50IHRyYW5zbGF0aW9uLCAKKy8vICAgICB5b3UgY2FuIHByb3ZpZGUgaXQgYnkgcmVwbGFjaW5nIHRoZSBsaW5rICg8PEFub3RoZXJTZWN0aW9uPj4pIHdpdGggdGhhdAorLy8gICAgIG5ldyB0cmFuc2xhdGlvbi4gIEZvciBleGFtcGxlIC0gYSAiVGFibGUiIGluIHNheSAiRGF0YVBsdWdpbiIgaXMgCisvLyAgICAgcGVyaGFwcyB0cmFuc2xhdGVkIGRpZmZlcmVudGx5IHRvICJUYWJsZSIgaW4gIkZ1cm5pdHVyZVBsdWdpbiIuCisvLworLy8gVEVTVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBwbGFjZSB5b3VyIHRyYW5zbGF0aW9uIGZpbGUgb24geW91ciB3ZWJzZXJ2ZXIgc29tZXdoZXJlIGZvciBleGFtcGxlCisvLworLy8gICAveGluaGEvbGFuZy9tZXJnZWQvamEuanMKKy8vCisvLyBhbmQgdGhlbiB0ZWxsIFhpbmhhIHdoZXJlIHRvIGdldCBpdCAoYmVmb3JlIGxvYWRpbmcgWGluaGFDb3JlLmpzKSBieSAKKy8vCisvLyAgX2VkaXRvcl9sYW5nICAgICAgICAgICAgICA9ICdqYSc7CisvLyAgX2VkaXRvcl9sYW5nX21lcmdlZF9maWxlICA9ICcveGluaGEvbGFuZy9tZXJnZWQvamEuanMnOworLy8KKy8vIFhpbmhhIHdpbGwgbG9hZCB5b3VyIG5ldyBsYW5ndWFnZSBkZWZpbml0aW9uLgorLy8KKy8vIFNVQk1JVFRJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgY3JlYXRlIGEgVGlja2V0IG9uIHRoZSBYaW5oYSB3ZWJzaXRlIGFuZCBhdHRhY2ggeW91ciB0cmFuc2xhdGlvbiAKKy8vIGZpbGUuCisvLworLy8gVGhlIFhpbmhhIGRldmVsb3BlcnMgd2lsbCB0YWtlIHlvdXIgZmlsZSBhbmQgdXNlIHRoZSAKKy8vICAgICBjb250cmliL2xjX3NwbGl0X21lcmdlZF9maWxlLnBocAorLy8gc2NyaXB0IHRvIGxvYWQgaXQgaW50byB0aGUgWGluaGEgZGlzdHJpYnV0aW9uLgorCit7CisgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgIkFiYnJldmlhdGlvbiI6ICLnlaXoqp4iLAorICAgICAgICAiQ2FuY2VsIjogIuS4reatoiIsCisgICAgICAgICJEZWxldGUiOiAi5YmK6ZmkIiwKKyAgICAgICAgIkV4cGFuc2lvbjoiOiAi5bGV6ZaL44GV44KM44KL6KqeOiIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJBYm91dEJveCI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIuODkOODvOOCuOODp+ODs+aDheWgsSIsCisgICAgICAgICJDbG9zZSI6ICLplonjgZjjgosiCisgICAgfSwKKyAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIuS4reatoiIsCisgICAgICAgICJSZW1vdmUgQ3VycmVudCBCYWNrZ3JvdW5kIjogIuePvuWcqOOBruiDjOaZr+eUu+WDj+OCkumZpOWOuyIsCisgICAgICAgICJTZXQgUGFnZSBCYWNrZ3JvdW5kIEltYWdlIjogIuODmuODvOOCuOOBruiDjOaZr+eUu+WDj+OCkuioreWumiIsCisgICAgICAgICJTZXQgcGFnZSBiYWNrZ3JvdW5kIGltYWdlIjogIuODmuODvOOCuOOBruiDjOaZr+eUu+WDj+OCkuioreWumiIKKyAgICB9LAorICAgICJDaGFyQ291bnRlciI6IHsKKyAgICAgICAgIi4uLiBpbiBwcm9ncmVzcyI6ICIuLi4g5Yem55CG5LitIiwKKyAgICAgICAgIkNoYXJzIjogIuaWh+Wtl+aVsCIsCisgICAgICAgICJXb3JkcyI6ICLljZjoqp7mlbAiCisgICAgfSwKKyAgICAiQ2hhcmFjdGVyTWFwIjogeworICAgICAgICAiSW5zZXJ0IHNwZWNpYWwgY2hhcmFjdGVyIjogIueJueauiuaWh+Wtl+OCkuaMv+WFpSIKKyAgICB9LAorICAgICJDbGllbnRzaWRlU3BlbGxjaGVjayI6IHsKKyAgICAgICAgIlNwZWxsIENoZWNrIHVzaW5nIGllU3BlbGwiOiAi44K544Oa44Or44OB44Kn44OD44Kv44GrIGllU3BlbGwg44KS5L2/44GGIgorICAgIH0sCisgICAgIkNvbG9yUGlja2VyIjogeworICAgICAgICAiQ2xpY2sgYSBjb2xvci4uLiI6ICLoibLjgpLjgq/jg6rjg4Pjgq8uLi4iLAorICAgICAgICAiQ2xvc2UiOiAi6ZaJ44GY44KLIiwKKyAgICAgICAgIkNvbG9yOiAiOiAi6ImyOiAiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiU2FtcGxlIjogIuOCteODs+ODl+ODqyIsCisgICAgICAgICJXZWIgU2FmZTogIjogIldlYuOCu+ODvOODlTogIgorICAgIH0sCisgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAiQ19lbGwgUHJvcGVydGllcy4uLiI6ICLjgrvjg6vjga7jg5fjg63jg5Hjg4bjgqMoX0UpLi4uIiwKKyAgICAgICAgIkNoZWNfayBMaW5rLi4uIjogIuODquODs+OCr+OCkueiuuiqjShfSykuLi4iLAorICAgICAgICAiQ29weSI6ICLjgrPjg5Tjg7wiLAorICAgICAgICAiQ3JlYXRlIGEgbGluayI6ICLmlrDjgZ/jgarjg6rjg7Pjgq/jgpLkvZzmiJDjgZfjgb7jgZkiLAorICAgICAgICAiQ3VycmVudCBVUkwgaXMiOiAi54++5Zyo44GuVVJMIiwKKyAgICAgICAgIkN1dCI6ICLliIfjgorlj5bjgooiLAorICAgICAgICAiRGVfbGV0ZSBDb2x1bW4iOiAi5YiX44Gu5YmK6ZmkKF9MKSIsCisgICAgICAgICJEZWxldGUgQ2VsbCI6ICLjgrvjg6vjga7liYrpmaQiLAorICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IGNvbHVtbiI6ICLpgbjmip7kuK3jga7liJfjgpLliYrpmaTjgZfjgb7jgZkiLAorICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IHJvdyI6ICLpgbjmip7kuK3jga7ooYzjgpLliYrpmaTjgZfjgb7jgZkiLAorICAgICAgICAiSG93IGRpZCB5b3UgZ2V0IGhlcmU/IChQbGVhc2UgcmVwb3J0ISkiOiAi44Gp44GG44KE44Gj44Gm44GT44GT44Gr5p2l44G+44GX44Gf44GLPyjjganjgYbjgYvloLHlkYrjgpIhKSIsCisgICAgICAgICJJX25zZXJ0IFJvdyBCZWZvcmUiOiAi5LiK44Gr6KGM44KS5oy/5YWlKF9OKSIsCisgICAgICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICLkuIvjgavooYzjgpLmjL/lhaUoX1MpIiwKKyAgICAgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIuWPs+OBq+WIl+OCkuaMv+WFpShfTykiLAorICAgICAgICAiSW5zZXJ0IENlbGwgQWZ0ZXIiOiAi5b6M44Gr44K744Or44KS5oy/5YWlIiwKKyAgICAgICAgIkluc2VydCBDZWxsIEJlZm9yZSI6ICLliY3jgavjgrvjg6vjgpLmjL/lhaUiLAorICAgICAgICAiSW5zZXJ0IF9Db2x1bW4gQmVmb3JlIjogIuW3puOBq+WIl+OCkuaMv+WFpShfQykiLAorICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAi6YG45oqe5Lit44Gu5YiX44Gu5Y+z44Gr5LiA5YiX5oy/5YWl44GX44G+44GZIiwKKyAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICLpgbjmip7kuK3jga7liJfjga7lt6bjgavkuIDliJfmjL/lhaXjgZfjgb7jgZkiLAorICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAi6YG45oqe5Lit44Gu6KGM44Gu5LiL44Gr5LiA6KGM5oy/5YWl44GX44G+44GZIiwKKyAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICLpgbjmip7kuK3jga7ooYzjga7kuIrjgavkuIDooYzmjL/lhaXjgZfjgb7jgZkiLAorICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUiOiAi6YG45oqe5Lit44Gu44OO44O844OJ44Gu5b6M44Gr5q616JC944KS5oy/5YWl44GX44G+44GZIiwKKyAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZSI6ICLpgbjmip7kuK3jga7jg47jg7zjg4njga7miYvliY3jgavmrrXokL3jgpLmjL/lhaXjgZfjgb7jgZkiLAorICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBhZnRlciI6ICLlvozjgavmrrXokL3jgpLmjL/lhaUiLAorICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAi5YmN44Gr5q616JC944KS5oy/5YWlIiwKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogIuS4reWkruWvhOOBmyIsCisgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAi5Z2H562J5Ymy5LuYIiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICLlt6blr4TjgZsiLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICLlj7Plr4TjgZsiLAorICAgICAgICAiTGluayBwb2ludHMgdG86IjogIuODquODs+OCr+WFiDoiLAorICAgICAgICAiTWFrZSBsaW5fay4uLiI6ICLjg6rjg7Pjgq/jga7kvZzmiJAoX0spLi4uIiwKKyAgICAgICAgIk1lcmdlIENlbGxzIjogIuOCu+ODq+OBrue1kOWQiCIsCisgICAgICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIuOBk+OBruODquODs+OCr+OCkuaWsOOBl+OBhOOCpuOCo+ODs+ODieOCpuOBp+mWi+OBjeOBvuOBmSIsCisgICAgICAgICJQYXN0ZSI6ICLosrzjgorku5jjgZEiLAorICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBlbGVtZW50OiI6ICLjgZPjga7opoHntKDjgpLliYrpmaTjgZfjgb7jgZnjgILjgojjgo3jgZfjgYTjgafjgZnjgYvjgII6IiwKKyAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gdW5saW5rIHRoaXMgZWxlbWVudC4iOiAi44GT44Gu6KaB57Sg44Gu44Oq44Oz44Kv44KS5YmK6Zmk44GX44G+44GZ44CC44KI44KN44GX44GE44Gn44GZ44GL44CCIiwKKyAgICAgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICIkZWxlbSDopoHntKDjgpLliYrpmaQgLi4uIiwKKyAgICAgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAi44OJ44Kt44Ol44Oh44Oz44OI44GL44KJ44GT44Gu44OO44O844OJ44KS5YmK6Zmk44GX44G+44GZIiwKKyAgICAgICAgIlJvX3cgUHJvcGVydGllcy4uLiI6ICLooYzjga7jg5fjg63jg5Hjg4bjgqMoX1cpLi4uIiwKKyAgICAgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAi44OG44O844OW44Or44K744Or44Gu44OX44Ot44OR44OG44Kj44OA44Kk44Ki44Ot44Kw44KS6KGo56S644GX44G+44GZIiwKKyAgICAgICAgIlNob3cgdGhlIFRhYmxlIFByb3BlcnRpZXMgZGlhbG9nIjogIuODhuODvOODluODq+OBruODl+ODreODkeODhuOCo+ODgOOCpOOCouODreOCsOOCkuihqOekuuOBl+OBvuOBmSIsCisgICAgICAgICJTaG93IHRoZSBUYWJsZSBSb3cgUHJvcGVydGllcyBkaWFsb2ciOiAi44OG44O844OW44Or6KGM44Gu44OX44Ot44OR44OG44Kj44OA44Kk44Ki44Ot44Kw44KS6KGo56S644GX44G+44GZIiwKKyAgICAgICAgIlNob3cgdGhlIGltYWdlIHByb3BlcnRpZXMgZGlhbG9nIjogIuOBk+OBrueUu+WDj+OBruODl+ODreODkeODhuOCo+ODgOOCpOOCouODreOCsOOCkuihqOekuuOBl+OBvuOBmSIsCisgICAgICAgICJVbmxpbmsgdGhlIGN1cnJlbnQgZWxlbWVudCI6ICLjgZPjga7opoHntKDjga7jg6rjg7Pjgq/jgpLop6PpmaQiLAorICAgICAgICAiX0RlbGV0ZSBSb3ciOiAi6KGM44Gu5YmK6ZmkKF9EKSIsCisgICAgICAgICJfSW1hZ2UgUHJvcGVydGllcy4uLiI6ICLnlLvlg4/jga7jg5fjg63jg5Hjg4bjgqMoX0kpLi4uIiwKKyAgICAgICAgIl9Nb2RpZnkgTGluay4uLiI6ICLjg6rjg7Pjgq/jga7kv67mraMoX00pLi4uIiwKKyAgICAgICAgIl9SZW1vdmUgTGluay4uLiI6ICLjg6rjg7Pjgq/jga7liYrpmaQoX1IpIiwKKyAgICAgICAgIl9UYWJsZSBQcm9wZXJ0aWVzLi4uIjogIuODhuODvOODluODq+OBruODl+ODreODkeODhuOCoyhfVCkuLi4iCisgICAgfSwKKyAgICAiQ3JlYXRlTGluayI6IHsKKyAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICLmnKzlvZPjgavjgZPjga7jg6rjg7Pjgq/jgpLliYrpmaTjgZfjgb7jgZnjgYs/IiwKKyAgICAgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIuODquODs+OCr+OBruaMv+WFpS/kv67mraMiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICLmlrDjgZfjgYTjgqbjgqPjg7Pjg4njgqYgKF9ibGFuaykiLAorICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICLjgarjgZcgKOODh+ODleOCqeODq+ODiOOBq+S7u+OBm+OCiykiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3RoZXIiOiAi44Gd44Gu5LuWIiwKKyAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICLoh6rlt7Hjg5Xjg6zjg7zjg6DlhoUgKF9zZWxmKSIsCisgICAgICAgICJUYXJnZXQ6IjogIuOCv+ODvOOCsuODg+ODiDoiLAorICAgICAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICLjgr/jgqTjg4jjg6s6IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAi5pyA5LiK5L2N44OV44Os44O844OgIChfdG9wKSIsCisgICAgICAgICJVUkw6IjogIlVSTDoiLAorICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIuODquODs+OCr+OCkuS9nOaIkOOBmeOCi+OBq+OBr+ODhuOCreOCueODiOOCkumBuOaKnuOBmeOCi+W/heimgeOBjOOBguOCiuOBvuOBmSIKKyAgICB9LAorICAgICJEZWZpbml0aW9uTGlzdCI6IHsKKyAgICAgICAgImRlZmluaXRpb24gZGVzY3JpcHRpb24iOiAi5a6a576p44Gu6Kqs5piOIiwKKyAgICAgICAgImRlZmluaXRpb24gbGlzdCI6ICLlrprnvqnjg6rjgrnjg4giLAorICAgICAgICAiZGVmaW5pdGlvbiB0ZXJtIjogIuWumue+qeiqniIKKyAgICB9LAorICAgICJEeW5hbWljQ1NTIjogeworICAgICAgICAiQ2hvb3NlIHN0eWxlc2hlZXQiOiAi44K544K/44Kk44Or44K344O844OI44Gu6YG45oqeIiwKKyAgICAgICAgIkRlZmF1bHQiOiAi44Gq44GXIiwKKyAgICAgICAgIlVuZGVmaW5lZCI6ICLmnKrlrprnvqkiCisgICAgfSwKKyAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICAgICAiRWRpdCBIVE1MIGZvciBzZWxlY3RlZCB0ZXh0IjogIumBuOaKnuS4reODhuOCreOCueODiOOBrkhUTUzjgpLnt6jpm4bjgZfjgb7jgZkiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiVGFnIEVkaXRvciI6ICLjgr/jgrDjgqjjg4fjgqPjgr8iCisgICAgfSwKKyAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICJBc2NpaU1hdGggRm9ybXVsYSBJbnB1dCI6ICJBc2NpaU1hdGgg5pWw5byP5YWl5YqbIiwKKyAgICAgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICAgICAiRm9ybXVsYSBFZGl0b3IiOiAi5pWw5byP44Ko44OH44Kj44K/IiwKKyAgICAgICAgIklucHV0IjogIuWFpeWKmyIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQcmV2aWV3IjogIuihqOekuiIKKyAgICB9LAorICAgICJFeHRlbmRlZEZpbGVNYW5hZ2VyIjogeworICAgICAgICAiQWJzYm90dG9tIjogIuS4iyjntbblr77nmoQpIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICLkuK3lpK4o57W25a++55qEKSIsCisgICAgICAgICJBbGlnbiI6ICLooYzmj4PjgYgiLAorICAgICAgICAiQWx0IjogIkFsdCIsCisgICAgICAgICJCYXNlbGluZSI6ICLjg5njg7zjgrnjg6njgqTjg7MiLAorICAgICAgICAiQm9yZGVyIjogIuODnOODvOODgOODvCIsCisgICAgICAgICJCb3JkZXIgQ29sb3IiOiAi5aKD55WM6ImyOiIsCisgICAgICAgICJCb3R0b20iOiAi5LiLIiwKKyAgICAgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICAgICAiQ2xlYXIiOiAi44Kv44Oq44KiIiwKKyAgICAgICAgIkNvbG9yIjogIuiJsiIsCisgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAi57im5qiq5q+U44KS5Zu65a6aIiwKKyAgICAgICAgIkNvcHkiOiAi44Kz44OU44O8IiwKKyAgICAgICAgIkNyb3AiOiAi5YiH44KK5oqc44GNIiwKKyAgICAgICAgIkN1dCI6ICLliIfjgorlj5bjgooiLAorICAgICAgICAiRGlyZWN0b3J5IjogIuODh+OCo+ODrOOCr+ODiOODqiIsCisgICAgICAgICJEaXJlY3RvcnkgVXAiOiAi6Kaq44OH44Kj44Os44Kv44OI44Oq44G4IiwKKyAgICAgICAgIkVkaXQiOiAi57eo6ZuGIiwKKyAgICAgICAgIkZpbGUgTWFuYWdlciI6ICLjg5XjgqHjgqTjg6vjg57jg43jg7zjgrjjg6MiLAorICAgICAgICAiRmlsZW5hbWU6IjogIuODleOCoeOCpOODq+WQjToiLAorICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIuW3puWPs+WPjei7oiIsCisgICAgICAgICJGbGlwIEltYWdlIjogIueUu+WDj+OCkuWPjei7oiIsCisgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIuS4iuS4i+WPjei7oiIsCisgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiR0lG5b2i5byP44Gv44K144Od44O844OI44GV44KM44Gm44GE44Gq44GE44Gf44KB44CB55S75YOP57eo6ZuG44Gn44GN44G+44Gb44KT44CCIiwKKyAgICAgICAgIkhlaWdodCI6ICLpq5jjgZUiLAorICAgICAgICAiSGVpZ2h0OiI6ICLpq5jjgZU6IiwKKyAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAi44OV44Kh44Kk44Or44G444Gu44Oq44Oz44Kv44KS5oy/5YWlIiwKKyAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIueEoeWKueOBquODh+OCo+ODrOOCr+ODiOODqjoiLAorICAgICAgICAiSlBFRyBIaWdoIjogIkpQRUcg6auY55S76LOqIiwKKyAgICAgICAgIkpQRUcgTG93IjogIkpQRUcg5L2O55S76LOqIiwKKyAgICAgICAgIkpQRUcgTWVkaXVtIjogIkpQRUcg5qiZ5rqWIiwKKyAgICAgICAgIkxlZnQiOiAi5bemIiwKKyAgICAgICAgIkxvYWRpbmciOiAi44Ot44O844OJ5LitIiwKKyAgICAgICAgIkxvY2siOiAi44Ot44OD44KvIiwKKyAgICAgICAgIk1hcmdpbiI6ICLplpPpmpQiLAorICAgICAgICAiTWFya2VyIjogIuODnuODvOOCq+ODvCIsCisgICAgICAgICJNZWFzdXJlIjogIuioiOa4rCIsCisgICAgICAgICJNaWRkbGUiOiAi5Lit5aSuIiwKKyAgICAgICAgIk5ldyBGb2xkZXIiOiAi5paw6KaP44OV44Kp44Or44OAIiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAi5paw44GX44GE44Km44Kj44Oz44OJ44KmIChfYmxhbmspIiwKKyAgICAgICAgIk5vIEZpbGVzIEZvdW5kIjogIuODleOCoeOCpOODq+OBjOOBguOCiuOBvuOBm+OCkyIsCisgICAgICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAi55S75YOP44GM44GC44KK44G+44Gb44KTIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi44Gq44GXICjjg4fjg5Xjgqnjg6vjg4jjgavku7vjgZvjgospIiwKKyAgICAgICAgIk5vdCBzZXQiOiAi44Gq44GXIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBhZGRpbmciOiAi5L2Z55m9IiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAi44GT44Gu55S75YOP44Gu6YWN572uIiwKKyAgICAgICAgIlByZXZpZXciOiAi6KGo56S6IiwKKyAgICAgICAgIlF1YWxpdHk6IjogIueUu+izqjoiLAorICAgICAgICAiUmVmcmVzaCI6ICLmm7TmlrAiLAorICAgICAgICAiUmVuYW1lIjogIuWQjeWJjeOBruWkieabtCIsCisgICAgICAgICJSZXNpemUiOiAi44K144Kk44K65aSJ5pu0IiwKKyAgICAgICAgIlJpZ2h0IjogIuWPsyIsCisgICAgICAgICJSb3RhdGUiOiAi5Zue6LuiIiwKKyAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICLnlLvlg4/jgpLlm57ou6IiLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIuiHquW3seODleODrOODvOODoOWGhSAoX3NlbGYpIiwKKyAgICAgICAgIlNhdmUiOiAi5L+d5a2YIiwKKyAgICAgICAgIlN0YXJ0IFg6IjogIumWi+WniyBYIiwKKyAgICAgICAgIlN0YXJ0IFk6IjogIumWi+WniyBZIiwKKyAgICAgICAgIlRhcmdldCBXaW5kb3ciOiAi44K/44O844Ky44OD44OIIiwKKyAgICAgICAgIlRleHR0b3AiOiAi44OG44Kt44K544OI5LiK6YOoIiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKSI6ICLjgr/jgqTjg4jjg6siLAorICAgICAgICAiVG9wIjogIuS4iiIsCisgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIuacgOS4iuS9jeODleODrOODvOODoCAoX3RvcCkiLAorICAgICAgICAiVHJhc2giOiAi5YmK6ZmkIiwKKyAgICAgICAgIlVwbG9hZCI6ICLjgqLjg4Pjg5fjg63jg7zjg4kiLAorICAgICAgICAiVzoiOiAiVzoiLAorICAgICAgICAiV2lkdGgiOiAi5bmFIiwKKyAgICAgICAgIldpZHRoOiI6ICLluYU6IiwKKyAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICLjg6rjg7Pjgq/jgpLkvZzmiJDjgZnjgovjgavjga/jg4bjgq3jgrnjg4jjgpLpgbjmip7jgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZnjgIIiLAorICAgICAgICAiWm9vbSI6ICLmi6HlpKfnjoc6IgorICAgIH0sCisgICAgIkZpbHRlciI6IHsKKyAgICAgICAgIkZpbHRlciI6ICLjg5XjgqPjg6vjgr/jg7wiCisgICAgfSwKKyAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAi5aSn5paH5a2XL+Wwj+aWh+Wtl+WMuuWIpSIsCisgICAgICAgICJDbGVhciI6ICLpgJrluLjooajnpLoiLAorICAgICAgICAiRG9uZSI6ICLntYLkuoYiLAorICAgICAgICAiRW50ZXIgdGhlIHRleHQgeW91IHdhbnQgdG8gZmluZCI6ICLmpJzntKLjgZfjgZ/jgYTjg4bjgq3jgrnjg4jjgpLlhaXlipvjgZfjgb7jgZkiLAorICAgICAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICLmpJzntKIv572u5o+bIiwKKyAgICAgICAgIkhpZ2hsaWdodCI6ICLlvLfoqr/ooajnpLoiLAorICAgICAgICAiSW5mb3JtIGEgcmVwbGFjZW1lbnQgd29yZCI6ICLljZjoqp7jga7nva7mj5vjgpLnn6XjgonjgZvjgosiLAorICAgICAgICAiTmV4dCI6ICLmrKHjgpLmpJzntKIiLAorICAgICAgICAiT3B0aW9ucyI6ICLoqK3lrpoiLAorICAgICAgICAiUmVwbGFjZSB3aXRoOiI6ICLnva7mj5s6IiwKKyAgICAgICAgIlNlYXJjaCBmb3I6IjogIuaknOe0ojoiLAorICAgICAgICAiU3Vic3RpdHV0ZSBhbGwgb2NjdXJyZW5jZXMiOiAi44GZ44G544Gm572u5o+bIiwKKyAgICAgICAgIlN1YnN0aXR1dGUgdGhpcyBvY2N1cnJlbmNlPyI6ICLnva7mj5vjgZfjgb7jgZnjgYs/IiwKKyAgICAgICAgIlVuZG8iOiAi5YWD44Gr5oi744GZIiwKKyAgICAgICAgIldob2xlIHdvcmRzIG9ubHkiOiAi5a6M5YWo5LiA6Ie044Gu44G/IiwKKyAgICAgICAgImZvdW5kIGl0ZW0iOiAi5Lu244GM5qSc57Si44GV44KM44G+44GX44GfIiwKKyAgICAgICAgImZvdW5kIGl0ZW1zIjogIuS7tuOBjOaknOe0ouOBleOCjOOBvuOBl+OBnyIsCisgICAgICAgICJub3QgZm91bmQiOiAi44Gv44GC44KK44G+44Gb44KTIiwKKyAgICAgICAgInJlcGxhY2VkIGl0ZW0iOiAi5Lu244GM572u5o+b44GV44KM44G+44GX44GfIiwKKyAgICAgICAgInJlcGxhY2VkIGl0ZW1zIjogIuS7tuOBjOe9ruaPm+OBleOCjOOBvuOBl+OBnyIKKyAgICB9LAorICAgICJGb3JtT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgIkVudGVyIHRoZSBuYW1lIGZvciBuZXcgb3B0aW9uLiI6ICLmlrDjgZfjgYTpgbjmip7ogqLjgavlkI3liY3jgpLjgaTjgZHjgabjgY/jgaDjgZXjgYTjgIIiLAorICAgICAgICAiRm9ybSBFZGl0b3IiOiAi44OV44Kp44O844Og44Ko44OH44Kj44K/IiwKKyAgICAgICAgIkluc2VydCBhIEZvcm0uIjogIuODleOCqeODvOODoOOCkuaMv+WFpSIsCisgICAgICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIuODgeOCp+ODg+OCr+ODnOODg+OCr+OCueOCkuaMv+WFpSIsCisgICAgICAgICJJbnNlcnQgYSBtdWx0aS1saW5lIHRleHQgZmllbGQuIjogIuikh+aVsOihjOODhuOCreOCueODiOODleOCo+ODvOODq+ODieOCkuaMv+WFpSIsCisgICAgICAgICJJbnNlcnQgYSByYWRpbyBidXR0b24uIjogIuODqeOCuOOCquODnOOCv+ODs+OCkuaMv+WFpSIsCisgICAgICAgICJJbnNlcnQgYSBzZWxlY3QgZmllbGQuIjogIumBuOaKnuODquOCueODiOOCkuaMv+WFpSIsCisgICAgICAgICJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiI6ICLpgIHkv6Ev44Oq44K744OD44OI44Oc44K/44Oz44KS5oy/5YWlIiwKKyAgICAgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAi44OG44Kt44K544OIL+ODkeOCueODr+ODvOODiS/pnZ7ooajnpLrjg5XjgqPjg7zjg6vjg4njgpLmjL/lhaUiCisgICAgfSwKKyAgICAiRm9ybXMiOiB7CisgICAgICAgICInb25DbGljayc9IjogIidvbkNsaWNrJz0iLAorICAgICAgICAiQWNjZXNzIEtleToiOiAi44Ki44Kv44K744K544Kt44O8OiIsCisgICAgICAgICJBY3Rpb24gVVJMOiI6ICLjgqLjgq/jgrfjg6fjg7NVUkw6IiwKKyAgICAgICAgIkJ1dHRvbiBTY3JpcHQiOiAi44Oc44K/44Oz44K544Kv44Oq44OX44OIIiwKKyAgICAgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICAgICAiQ2hlY2tlZCI6ICLjg4Hjgqfjg4Pjgq/muIjjgb8iLAorICAgICAgICAiQ29sdW1uczoiOiAi5YiX5pWwOiIsCisgICAgICAgICJEZWZhdWx0IHRleHQgKG9wdGlvbmFsKSI6ICLjg4bjgq3jgrnjg4jliJ3mnJ/lgKQo44Kq44OX44K344On44OzKSIsCisgICAgICAgICJEaW1lbnNpb25zIjogIuWkp+OBjeOBlSIsCisgICAgICAgICJEaXNhYmxlZCI6ICLnhKHlirkiLAorICAgICAgICAiRW5jb2Rpbmc6IjogIuOCqOODs+OCs+ODvOODiToiLAorICAgICAgICAiRm9yIENvbnRyb2w6IjogIuWItuW+oeWvvuixoToiLAorICAgICAgICAiRm9ybSI6ICLjg5Xjgqnjg7zjg6AiLAorICAgICAgICAiRm9ybSBFbGVtZW50OiBGSUVMRFNFVCI6ICLjg5Xjgqnjg7zjg6DopoHntKA6IEZJRUxEU0VUIiwKKyAgICAgICAgIkZvcm0gRWxlbWVudDogSU5QVVQiOiAi44OV44Kp44O844Og6KaB57SgOiBJTlBVVCIsCisgICAgICAgICJGb3JtIEVsZW1lbnQ6IExBQkVMIjogIuODleOCqeODvOODoOimgee0oDogTEFCRUwiLAorICAgICAgICAiRm9ybSBFbGVtZW50OiBTRUxFQ1QiOiAi44OV44Kp44O844Og6KaB57SgOiBTRUxFQ1QiLAorICAgICAgICAiRm9ybSBFbGVtZW50OiBURVhUQVJFQSI6ICLjg5Xjgqnjg7zjg6DopoHntKA6IFRFWFRBUkVBIiwKKyAgICAgICAgIkZvcm0gTmFtZToiOiAi44OV44Kp44O844Og5ZCNOiIsCisgICAgICAgICJGb3JtIGhhbmRsZXIgc2NyaXB0IjogIuODleOCqeODvOODoOWHpueQhuOCueOCr+ODquODl+ODiCIsCisgICAgICAgICJHZXQiOiAiR0VUIiwKKyAgICAgICAgIkhUTUwtRm9ybSB0byBDR0kgKGRlZmF1bHQpIjogIkhUTUzjg5Xjgqnjg7zjg6DjgYvjgolDR0njgbgo44OH44OV44Kp44Or44OIKSIsCisgICAgICAgICJIYXJkIjogIuODj+ODvOODiSIsCisgICAgICAgICJIZWlnaHQgaW4gbnVtYmVyIG9mIHJvd3MiOiAi6KGM5pWw44Gr44KI44KL6auY44GVIiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAi55S75YOPVVJMOiIsCisgICAgICAgICJJbWFnZSBzb3VyY2UiOiAi55S75YOP44K944O844K5IiwKKyAgICAgICAgIkluaXRpYWwgVGV4dDoiOiAi5Yid5pyf44OG44Kt44K544OIOiIsCisgICAgICAgICJKYXZhc2NyaXB0IGZvciBidXR0b24gY2xpY2siOiAi44Oc44K/44Oz44Kv44Oq44OD44Kv5pmC44GuSmF2YVNjcml0cCIsCisgICAgICAgICJMYWJlbDoiOiAi44Op44OZ44OrOiIsCisgICAgICAgICJMZWdlbmQ6IjogIuOCsOODq+ODvOODl+WQjToiLAorICAgICAgICAiTWF4IGxlbmd0aDoiOiAi5pyA5aSn6ZW3OiIsCisgICAgICAgICJNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjY2VwdGVkIjogIuWFpeWKm+WPr+iDveOBquacgOWkp+aWh+Wtl+aVsCIsCisgICAgICAgICJNZXRob2Q6IjogIuODoeOCveODg+ODiToiLAorICAgICAgICAiTmFtZSI6ICLlkI3liY0iLAorICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICLjg5Xjgqnjg7zjg6DlhaXlipvjga7lkI3liY0iLAorICAgICAgICAiTmFtZS9JRDoiOiAi5ZCN5YmNL0lEOiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPZmYiOiAi44Kq44OVIiwKKyAgICAgICAgIk9wdGlvbnMiOiAi6YG45oqe6IKiIiwKKyAgICAgICAgIlBoeXNpY2FsIjogIueJqeeQhueahCIsCisgICAgICAgICJQbGVhc2UgZW50ZXIgYSBMYWJlbCI6ICLjg6njg5njg6vjgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYQiLAorICAgICAgICAiUG9zdCI6ICJQT1NUIiwKKyAgICAgICAgIlJlYWQgT25seSI6ICLoqq3jgb/lj5bjgorlsILnlKgiLAorICAgICAgICAiUm93czoiOiAi6KGM5pWwOiIsCisgICAgICAgICJTaXplIG9mIHRleHQgYm94IGluIGNoYXJhY3RlcnMiOiAi5paH5a2X5pWw44Gr44KI44KL44OG44Kt44K544OI44Oc44OD44Kv44K544Gu5aSn44GN44GVIiwKKyAgICAgICAgIlNpemU6IjogIuOCteOCpOOCujoiLAorICAgICAgICAiU29mdCI6ICLjgr3jg5Xjg4giLAorICAgICAgICAiVGFiIEluZGV4OiI6ICLjgr/jg5bpoIbluo86IiwKKyAgICAgICAgIlRhcmdldCBGcmFtZToiOiAi44K/44O844Ky44OD44OIOiIsCisgICAgICAgICJUZXh0OiI6ICLjg4bjgq3jgrnjg4g6IiwKKyAgICAgICAgIlVSTCBvZiBpbWFnZSI6ICLnlLvlg4/jga5VUkwiLAorICAgICAgICAiVmFsdWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAi44OV44Kp44O844Og5YWl5Yqb44Gu5YCkIiwKKyAgICAgICAgIlZhbHVlOiI6ICLlgKQ6IiwKKyAgICAgICAgIlZpcnR1YWwiOiAi5Luu5oOzIiwKKyAgICAgICAgIldpZHRoIGluIG51bWJlciBvZiBjaGFyYWN0ZXJzIjogIuaWh+Wtl+aVsOOBq+OCiOOCi+W5hSIsCisgICAgICAgICJXcmFwIE1vZGU6IjogIuaKmOOCiui/lOOBlzoiLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBOYW1lIjogIuWQjeWJjeOBjOW/heimgeOBp+OBmSIsCisgICAgICAgICJtdWx0aXBhcnQgRm9ybSBEYXRhIChGaWxlLVVwbG9hZCkiOiAi44Oe44Or44OB44OR44O844OIKOODleOCoeOCpOODq+OCouODg+ODl+ODreODvOODieeUqCkiLAorICAgICAgICAibmFtZSBvZiB0aGUgdGV4dGFyZWEiOiAi44OG44Kt44K544OI44Ko44Oq44Ki44Gu5ZCN5YmNIiwKKyAgICAgICAgIm5vcm1hbCI6ICLmqJnmupYiLAorICAgICAgICAibm93cmFwIjogIuaKmOOCiui/lOOBl+OBquOBlyIsCisgICAgICAgICJwcmUiOiAi44OV44Kp44O844Oe44OD44OI5riI44G/IgorICAgIH0sCisgICAgIkZ1bGxQYWdlIjogeworICAgICAgICAiQWx0ZXJuYXRlIHN0eWxlLXNoZWV0OiI6ICLku6Pmm7/jgrnjgr/jgqTjg6vjgrfjg7zjg4g6IiwKKyAgICAgICAgIkJhY2tncm91bmQgY29sb3I6IjogIuiDjOaZr+iJsjoiLAorICAgICAgICAiQ2FuY2VsIjogIuS4reatoiIsCisgICAgICAgICJDaGFyYWN0ZXIgc2V0OiI6ICLmloflrZfjgrvjg4Pjg4g6IiwKKyAgICAgICAgIkRPQ1RZUEU6IjogIkRPQ1RZUEU6IiwKKyAgICAgICAgIkRlc2NyaXB0aW9uOiI6ICLoqqzmmI46IiwKKyAgICAgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAi5paH5pu444Gu44OX44Ot44OR44OG44KjIiwKKyAgICAgICAgIkRvY3VtZW50IHRpdGxlOiI6ICLmlofmm7jjga7ooajpoYw6IiwKKyAgICAgICAgIktleXdvcmRzOiI6ICLjgq3jg7zjg6/jg7zjg4k6IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlByaW1hcnkgc3R5bGUtc2hlZXQ6IjogIuWEquWFiOOCueOCv+OCpOODq+OCt+ODvOODiDoiLAorICAgICAgICAiVGV4dCBjb2xvcjoiOiAi5paH5a2X6ImyOiIsCisgICAgICAgICJVVEYtOCAocmVjb21tZW5kZWQpIjogIlVURi04ICjmjqjlpagpIgorICAgIH0sCisgICAgIkZ1bGxTY3JlZW4iOiB7CisgICAgICAgICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAi44Ko44OH44Kj44K/44Gu5pyA5aSn5YyWL+acgOWwj+WMliIKKyAgICB9LAorICAgICJIb3Jpem9udGFsUnVsZSI6IHsKKyAgICAgICAgIkFsaWdubWVudDoiOiAi6KGM5o+D44GIOiIsCisgICAgICAgICJDYW5jZWwiOiAi5Lit5q2iIiwKKyAgICAgICAgIkNlbnRlciI6ICLkuK3lpK4iLAorICAgICAgICAiQ29sb3I6IjogIuiJsjoiLAorICAgICAgICAiSGVpZ2h0OiI6ICLpq5jjgZU6IiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICLmsLTlubPnt5oiLAorICAgICAgICAiSW5zZXJ0L2VkaXQgaG9yaXpvbnRhbCBydWxlIjogIuawtOW5s+e3muOBruaMv+WFpS/kv67mraMiLAorICAgICAgICAiTGF5b3V0IjogIuODrOOCpOOCouOCpuODiCIsCisgICAgICAgICJMZWZ0IjogIuW3piIsCisgICAgICAgICJObyBzaGFkaW5nIjogIuW9seS7mOOBkeOBquOBlyIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJSaWdodCI6ICLlj7MiLAorICAgICAgICAiU3R5bGUiOiAi44K544K/44Kk44OrIiwKKyAgICAgICAgIldpZHRoOiI6ICLluYU6IiwKKyAgICAgICAgInBlcmNlbnQiOiAi44OR44O844K744Oz44OIIiwKKyAgICAgICAgInBpeGVscyI6ICLjg5Tjgq/jgrvjg6siCisgICAgfSwKKyAgICAiSHRtbFRpZHkiOiB7CisgICAgICAgICJBdXRvLVRpZHkiOiAi6Ieq5YuV6YGp5q2j5YyWIiwKKyAgICAgICAgIkRvbid0IFRpZHkiOiAi6YGp5q2j5YyW44GX44Gq44GEIiwKKyAgICAgICAgIkhUTUwgVGlkeSI6ICJIVE1MIFRpZHkiLAorICAgICAgICAiVGlkeSBmYWlsZWQuICBDaGVjayB5b3VyIEhUTUwgZm9yIHN5bnRheCBlcnJvcnMuIjogIumBqeato+WMluOBq+WkseaVl+OBl+OBvuOBl+OBn+OAgkhUTUzjga7mlofms5Xjgqjjg6njg7zjgpLnorroqo3jgZfjgabjgY/jgaDjgZXjgYTjgIIiCisgICAgfSwKKyAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAiQWJzYm90dG9tIjogIuS4iyjntbblr77nmoQpIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICLkuK3lpK4o57W25a++55qEKSIsCisgICAgICAgICJBbmdsZToiOiAi6KeS5bqmOiIsCisgICAgICAgICJCYXNlbGluZSI6ICLjg5njg7zjgrnjg6njgqTjg7MiLAorICAgICAgICAiQm90dG9tIjogIuS4iyIsCisgICAgICAgICJDYW5jZWwiOiAi5Lit5q2iIiwKKyAgICAgICAgIkNsZWFyIjogIuOCr+ODquOCoiIsCisgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAi57im5qiq5q+U44KS5Zu65a6aIiwKKyAgICAgICAgIkNyb3AiOiAi5YiH44KK5oqc44GNIiwKKyAgICAgICAgIkRpcmVjdG9yeSI6ICLjg4fjgqPjg6zjgq/jg4jjg6oiLAorICAgICAgICAiRGlyZWN0b3J5IFVwIjogIuimquODh+OCo+ODrOOCr+ODiOODquOBuCIsCisgICAgICAgICJFZGl0IjogIue3qOmbhiIsCisgICAgICAgICJGaWxlbmFtZToiOiAi44OV44Kh44Kk44Or5ZCNOiIsCisgICAgICAgICJGbGlwIEhvcml6b250YWwiOiAi5bem5Y+z5Y+N6LuiIiwKKyAgICAgICAgIkZsaXAgSW1hZ2UiOiAi55S75YOP44KS5Y+N6LuiIiwKKyAgICAgICAgIkZsaXAgVmVydGljYWwiOiAi5LiK5LiL5Y+N6LuiIiwKKyAgICAgICAgIkZvbGRlciBOYW1lOiI6ICLjg5Xjgqnjg6vjg4DlkI06IiwKKyAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICJHSUblvaLlvI/jga/jgrXjg53jg7zjg4jjgZXjgozjgabjgYTjgarjgYTjgZ/jgoHjgIHnlLvlg4/nt6jpm4bjgafjgY3jgb7jgZvjgpPjgIIiLAorICAgICAgICAiSGVpZ2h0OiI6ICLpq5jjgZU6IiwKKyAgICAgICAgIkltYWdlIEZvcm1hdCI6ICLnlLvlg4/lvaLlvI8iLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIueUu+WDj+OBruaMv+WFpSIsCisgICAgICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICLnhKHlirnjgarjg4fjgqPjg6zjgq/jg4jjg6o6IiwKKyAgICAgICAgIkpQRUcgSGlnaCI6ICJKUEVHIOmrmOeUu+izqiIsCisgICAgICAgICJKUEVHIExvdyI6ICJKUEVHIOS9jueUu+izqiIsCisgICAgICAgICJKUEVHIE1lZGl1bSI6ICJKUEVHIOaomea6liIsCisgICAgICAgICJMZWZ0IjogIuW3piIsCisgICAgICAgICJMb2NrIjogIuODreODg+OCryIsCisgICAgICAgICJNYXJrZXIiOiAi44Oe44O844Kr44O8IiwKKyAgICAgICAgIk1lYXN1cmUiOiAi6KiI5risIiwKKyAgICAgICAgIk1pZGRsZSI6ICLkuK3lpK4iLAorICAgICAgICAiTmV3IEZvbGRlciI6ICLmlrDopo/jg5Xjgqnjg6vjg4AiLAorICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIueUu+WDj+OBjOOBguOCiuOBvuOBm+OCkyIsCisgICAgICAgICJOb3Qgc2V0IjogIuOBquOBlyIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIuOBk+OBrueUu+WDj+OBrumFjee9riIsCisgICAgICAgICJRdWFsaXR5OiI6ICLnlLvos6o6IiwKKyAgICAgICAgIlJlZnJlc2giOiAi5pu05pawIiwKKyAgICAgICAgIlJlc2l6ZSI6ICLjgrXjgqTjgrrlpInmm7QiLAorICAgICAgICAiUmlnaHQiOiAi5Y+zIiwKKyAgICAgICAgIlJvdGF0ZSI6ICLlm57ou6IiLAorICAgICAgICAiUm90YXRlIEltYWdlIjogIueUu+WDj+OCkuWbnui7oiIsCisgICAgICAgICJTYXZlIjogIuS/neWtmCIsCisgICAgICAgICJTdGFydCBYOiI6ICLplovlp4sgWCIsCisgICAgICAgICJTdGFydCBZOiI6ICLplovlp4sgWSIsCisgICAgICAgICJUZXh0dG9wIjogIuODhuOCreOCueODiOS4iumDqCIsCisgICAgICAgICJUb3AiOiAi5LiKIiwKKyAgICAgICAgIlRyYXNoIjogIuWJiumZpCIsCisgICAgICAgICJXOiI6ICJXOiIsCisgICAgICAgICJXaWR0aDoiOiAi5bmFOiIKKyAgICB9LAorICAgICJJbmxpbmVTdHlsZXIiOiB7CisgICAgICAgICJCYWNrZ3JvdW5kIjogIuiDjOaZryIsCisgICAgICAgICJCYXNlbGluZSI6ICLjg5njg7zjgrnjg6njgqTjg7MiLAorICAgICAgICAiQm9yZGVyIjogIuODnOODvOODgOODvCIsCisgICAgICAgICJCb3R0b20iOiAi5LiLIiwKKyAgICAgICAgIkNTUyBTdHlsZSI6ICJDU1Pjgrnjgr/jgqTjg6siLAorICAgICAgICAiQ2VudGVyIjogIuS4reWkriIsCisgICAgICAgICJDaGFyIjogIuaWh+WtlyIsCisgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICLpmqPmjqXlooPnlYznt5rjgpLph43jga3jgosiLAorICAgICAgICAiRkcgQ29sb3IiOiAi5YmN5pmv6ImyIiwKKyAgICAgICAgIkZsb2F0IjogIuODleODreODvOODiCIsCisgICAgICAgICJIZWlnaHQiOiAi6auY44GVIiwKKyAgICAgICAgIkltYWdlIFVSTCI6ICLnlLvlg49VUkwiLAorICAgICAgICAiSnVzdGlmeSI6ICLkuKHnq6/mj4PjgYgiLAorICAgICAgICAiTGF5b3V0IjogIuODrOOCpOOCouOCpuODiCIsCisgICAgICAgICJMZWZ0IjogIuW3piIsCisgICAgICAgICJNYXJnaW4iOiAi6ZaT6ZqUIiwKKyAgICAgICAgIk1pZGRsZSI6ICLkuK3lpK4iLAorICAgICAgICAiTm9uZSI6ICLjgarjgZciLAorICAgICAgICAiUGFkZGluZyI6ICLkvZnnmb0iLAorICAgICAgICAiUmlnaHQiOiAi5Y+zIiwKKyAgICAgICAgIlRleHQgYWxpZ24iOiAi5rC05bmz5L2N572uIiwKKyAgICAgICAgIlRvcCI6ICLkuIoiLAorICAgICAgICAiVmVydGljYWwgYWxpZ24iOiAi5Z6C55u05L2N572uIiwKKyAgICAgICAgIldpZHRoIjogIuW5hSIsCisgICAgICAgICJwZXJjZW50IjogIuODkeODvOOCu+ODs+ODiCIsCisgICAgICAgICJwaXhlbHMiOiAi44OU44Kv44K744OrIgorICAgIH0sCisgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgIkFuY2hvciBuYW1lIjogIuOCouODs+OCq+ODvOOBruWQjeWJjSIsCisgICAgICAgICJDYW5jZWwiOiAi5Lit5q2iIiwKKyAgICAgICAgIkRlbGV0ZSI6ICLliYrpmaQiLAorICAgICAgICAiSW5zZXJ0IEFuY2hvciI6ICLjgqLjg7Pjgqvjg7zjga7mjL/lhaUiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICJBYnNib3R0b20iOiAi5LiLKOe1tuWvvueahCkiLAorICAgICAgICAiQWJzbWlkZGxlIjogIuS4reWkrijntbblr77nmoQpIiwKKyAgICAgICAgIkFsaWdubWVudDoiOiAi6KGM5o+D44GIOiIsCisgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAi5Luj5pu/44OG44Kt44K544OIOiIsCisgICAgICAgICJCYXNlbGluZSI6ICLjg5njg7zjgrnjg6njgqTjg7MiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAi5aKD55WM57ea44Gu5bmFOiIsCisgICAgICAgICJCb3R0b20iOiAi5LiLIiwKKyAgICAgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIueUu+WDj+OBrlVSTOOCkuOBk+OBk+OBq+WFpeWKm+OBl+OBvuOBmSIsCisgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICLnlLvlg4/ooajnpLrjgpLjgrXjg53jg7zjg4jjgZfjgarjgYTjg5bjg6njgqbjgrbjgavlv4XopoHjgafjgZkiLAorICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIuawtOW5s+S9meeZvSIsCisgICAgICAgICJIb3Jpem9udGFsOiI6ICLmsLTlubM6IiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIueUu+WDj+ODl+ODrOODk+ODpeODvDoiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICLnlLvlg49VUkw6IiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICLnlLvlg4/jga7mjL/lhaUiLAorICAgICAgICAiTGF5b3V0IjogIuODrOOCpOOCouOCpuODiCIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIuWig+eVjOe3muOBjOOBquOBhOWgtOWQiOOBr+epuuOBruOBvuOBvuOBq+OBmeOCiyIsCisgICAgICAgICJMZWZ0IjogIuW3piIsCisgICAgICAgICJNaWRkbGUiOiAi5Lit5aSuIiwKKyAgICAgICAgIk5vdCBzZXQiOiAi44Gq44GXIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAi44GT44Gu55S75YOP44Gu6YWN572uIiwKKyAgICAgICAgIlByZXZpZXciOiAi6KGo56S6IiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICLjgqbjgqPjg7Pjg4njgqbjgafnlLvlg4/jgpLooajnpLoiLAorICAgICAgICAiUmlnaHQiOiAi5Y+zIiwKKyAgICAgICAgIlNwYWNpbmciOiAi6ZaT6ZqUIiwKKyAgICAgICAgIlRleHR0b3AiOiAi44OG44Kt44K544OI5LiK6YOoIiwKKyAgICAgICAgIlRvcCI6ICLkuIoiLAorICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICLlnoLnm7TkvZnnmb0iLAorICAgICAgICAiVmVydGljYWw6IjogIuWeguebtDoiLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICJVUkzjgpLlhaXlipvjgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZkiCisgICAgfSwKKyAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgIkFsdGVybmF0ZSI6ICLmipjjgorov5TjgZciLAorICAgICAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAi6IOM5pmv6ImyOiIsCisgICAgICAgICJCZWhhdmlvcjoiOiAi5YuV5L2cOiIsCisgICAgICAgICJDYW5jZWwiOiAi5Lit5q2iIiwKKyAgICAgICAgIkNvbnRpbnVvdXMiOiAi5bem5Y+z6YCj57aaIiwKKyAgICAgICAgIkRpcmVjdGlvbjoiOiAi5pa55ZCROiIsCisgICAgICAgICJIZWlnaHQ6IjogIumrmOOBlToiLAorICAgICAgICAiSW5zZXJ0IHNjcm9sbGluZyBtYXJxdWVlIjogIuOCueOCr+ODreODvOODq+ODnuODvOOCreODvOOBruaMv+WFpSIsCisgICAgICAgICJMZWZ0IjogIuW3piIsCisgICAgICAgICJNYXJxdWVlIEVkaXRvciI6ICLjg57jg7zjgq3jg7zjgqjjg4fjgqPjgr8iLAorICAgICAgICAiTmFtZSI6ICLlkI3liY0iLAorICAgICAgICAiTmFtZS9JRDoiOiAi5ZCN5YmNL0lEIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlJpZ2h0IjogIuWPsyIsCisgICAgICAgICJTY3JvbGwgQW1vdW50OiI6ICLjgrnjgq/jg63jg7zjg6vph486IiwKKyAgICAgICAgIlNjcm9sbCBEZWxheToiOiAi44K544Kv44Ot44O844Or6YGF5bu2OiIsCisgICAgICAgICJTbGlkZSI6ICLjgrnjg6njgqTjg4kiLAorICAgICAgICAiU3BlZWQgQ29udHJvbCI6ICLpgJ/luqboqr/mlbQiLAorICAgICAgICAiVGV4dDoiOiAi44OG44Kt44K544OIOiIsCisgICAgICAgICJXaWR0aDoiOiAi5bmFOiIKKyAgICB9LAorICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAiQ2FuY2VsIjogIuS4reatoiIKKyAgICB9LAorICAgICJJbnNlcnRQYWdlYnJlYWsiOiB7CisgICAgICAgICJQYWdlIGJyZWFrIjogIuaUueODmuODvOOCuCIKKyAgICB9LAorICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAiQWJzYm90dG9tIjogIuS4iyjntbblr77nmoQpIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICLkuK3lpK4o57W25a++55qEKSIsCisgICAgICAgICJBbGlnbm1lbnQ6IjogIuihjOaPg+OBiDoiLAorICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIuS7o+abv+ODhuOCreOCueODiDoiLAorICAgICAgICAiQmFzZWxpbmUiOiAi44OZ44O844K544Op44Kk44OzIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIuWig+eVjOe3muOBruW5hToiLAorICAgICAgICAiQm90dG9tIjogIuS4iyIsCisgICAgICAgICJDYW5jZWwiOiAi5Lit5q2iIiwKKyAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICLnlLvlg4/jga5VUkzjgpLjgZPjgZPjgavlhaXlipvjgZfjgb7jgZkiLAorICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAi55S75YOP6KGo56S644KS44K144Od44O844OI44GX44Gq44GE44OW44Op44Km44K244Gr5b+F6KaB44Gn44GZIiwKKyAgICAgICAgIkhlaWdodDoiOiAi6auY44GVOiIsCisgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAi5rC05bmz5L2Z55m9IiwKKyAgICAgICAgIkhvcml6b250YWw6IjogIuawtOW5szoiLAorICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAi55S75YOP44OX44Os44OT44Ol44O8OiIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIueUu+WDj1VSTDoiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIueUu+WDj+OBruaMv+WFpSIsCisgICAgICAgICJMYXlvdXQiOiAi44Os44Kk44Ki44Km44OIIiwKKyAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAi5aKD55WM57ea44GM44Gq44GE5aC05ZCI44Gv56m644Gu44G+44G+44Gr44GZ44KLIiwKKyAgICAgICAgIkxlZnQiOiAi5bemIiwKKyAgICAgICAgIk1pZGRsZSI6ICLkuK3lpK4iLAorICAgICAgICAiTm90IHNldCI6ICLjgarjgZciLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAi5paw44GX44GE44Km44Kj44Oz44OJ44Km44Gn44OV44Kh44Kk44Or44KS6ZaL44GPIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAi44GT44Gu55S75YOP44Gu6YWN572uIiwKKyAgICAgICAgIlByZXZpZXciOiAi6KGo56S6IiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICLjgqbjgqPjg7Pjg4njgqbjgafnlLvlg4/jgpLooajnpLoiLAorICAgICAgICAiUmlnaHQiOiAi5Y+zIiwKKyAgICAgICAgIlNpemUiOiAi44K144Kk44K6IiwKKyAgICAgICAgIlNwYWNpbmciOiAi6ZaT6ZqUIiwKKyAgICAgICAgIlRleHR0b3AiOiAi44OG44Kt44K544OI5LiK6YOoIiwKKyAgICAgICAgIlRvcCI6ICLkuIoiLAorICAgICAgICAiVXBsb2FkIGZpbGUiOiAiVVBMT0FEIEZJTEUiLAorICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICLlnoLnm7TkvZnnmb0iLAorICAgICAgICAiVmVydGljYWw6IjogIuWeguebtDoiLAorICAgICAgICAiV2lkdGg6IjogIuW5hToiCisgICAgfSwKKyAgICAiSW5zZXJ0U21pbGV5IjogeworICAgICAgICAiSW5zZXJ0IFNtaWxleSI6ICLjgrnjg57jgqTjg6rjg7zjga7mjL/lhaUiCisgICAgfSwKKyAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICAgICAiSGlkZSBwcmV2aWV3IjogIuODl+ODrOODk+ODpeODvOmdnuihqOekuiIsCisgICAgICAgICJJbnNlcnQgU25pcHBldCI6ICLjgrnjg4vjg5rjg4Pjg4jjga7mjL/lhaUiLAorICAgICAgICAiSW5zZXJ0IGFzIjogIuW9ouW8j+OCkumBuOOCk+OBp+aMv+WFpSIsCisgICAgICAgICJTaG93IHByZXZpZXciOiAi44OX44Os44OT44Ol44O86KGo56S6IiwKKyAgICAgICAgIlZhcmlhYmxlIjogIuWkieaVsCIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICAgICAiRmlsdGVyIjogIuODleOCo+ODq+OCv+ODvCIsCisgICAgICAgICJJbnNlcnQgU25pcHBldCI6ICLjgrnjg4vjg5rjg4Pjg4jjga7mjL/lhaUiLAorICAgICAgICAiVmFyaWFibGUiOiAi5aSJ5pWwIgorICAgIH0sCisgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAiQWJzYm90dG9tIjogIuS4iyjntbblr77nmoQpIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICLkuK3lpK4o57W25a++55qEKSIsCisgICAgICAgICJBbGlnbm1lbnQ6IjogIuihjOaPg+OBiDoiLAorICAgICAgICAiQmFzZWxpbmUiOiAi44OZ44O844K544Op44Kk44OzIiwKKyAgICAgICAgIkJvcmRlciI6ICLjg5zjg7zjg4Djg7wiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAi5aKD55WM57ea44Gu5bmFOiIsCisgICAgICAgICJCb3R0b20iOiAi5LiLIiwKKyAgICAgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICAgICAiQ2FwdGlvbiI6ICLjgq3jg6Pjg5fjgrfjg6fjg7MiLAorICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICLjgrvjg6vkvZnnmb06IiwKKyAgICAgICAgIkNlbGwgc3BhY2luZzoiOiAi44K744Or6ZaT6ZqUOiIsCisgICAgICAgICJDb2xzOiI6ICLliJc6IiwKKyAgICAgICAgIkVtIjogIuebuOWvvuWApChlbSkiLAorICAgICAgICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICLliJfjga7luYXjgpLlm7rlrpoiLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIuODhuODvOODluODq+OBruaMv+WFpSIsCisgICAgICAgICJMYXlvdXQiOiAi44Os44Kk44Ki44Km44OIIiwKKyAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAi5aKD55WM57ea44GM44Gq44GE5aC05ZCI44Gv56m644Gu44G+44G+44Gr44GZ44KLIiwKKyAgICAgICAgIkxlZnQiOiAi5bemIiwKKyAgICAgICAgIk1pZGRsZSI6ICLkuK3lpK4iLAorICAgICAgICAiTm90IHNldCI6ICLjgarjgZciLAorICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAi5YiX5pWwIiwKKyAgICAgICAgIk51bWJlciBvZiByb3dzIjogIuihjOaVsCIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQZXJjZW50IjogIuODkeODvOOCu+ODs+ODiCglKSIsCisgICAgICAgICJQaXhlbHMiOiAi44OU44Kv44K744OrKHB4KSIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIuOBk+OBruODhuODvOODluODq+OBrumFjee9riIsCisgICAgICAgICJSaWdodCI6ICLlj7MiLAorICAgICAgICAiUm93czoiOiAi6KGM5pWwOiIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIumao+aOpeOBmeOCi+OCu+ODq+mWk+OBrui3nemboiIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIuOCu+ODq+WGheOBq+OBiuOBkeOCi+WGheWuueOBqOWig+eVjOe3muOBqOOBrui3nemboiIsCisgICAgICAgICJTcGFjaW5nIjogIumWk+malCIsCisgICAgICAgICJUZXh0dG9wIjogIuODhuOCreOCueODiOS4iumDqCIsCisgICAgICAgICJUb3AiOiAi5LiKIiwKKyAgICAgICAgIldpZHRoIG9mIHRoZSB0YWJsZSI6ICLjg4bjg7zjg5bjg6vjga7luYUiLAorICAgICAgICAiV2lkdGggdW5pdCI6ICLluYXjga7ljZjkvY0iLAorICAgICAgICAiV2lkdGg6IjogIuW5hToiLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICLliJfmlbDjgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYQiLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICLooYzmlbDjgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYQiCisgICAgfSwKKyAgICAiTGFuZ01hcmtzIjogeworICAgICAgICAiJm1kYXNoOyBsYW5ndWFnZSAmbWRhc2g7IjogIiZtZGFzaDsg6KiA6KqeICZtZGFzaDsiLAorICAgICAgICAiRW5nbGlzaCI6ICLoi7Hoqp4iLAorICAgICAgICAiRnJlbmNoIjogIuODleODqeODs+OCueiqniIsCisgICAgICAgICJHcmVlayI6ICLjgq7jg6rjgrfjg6Poqp4iLAorICAgICAgICAiTGF0aW4iOiAi44Op44OG44Oz6KqeIiwKKyAgICAgICAgImxhbmd1YWdlIHNlbGVjdCI6ICLoqIDoqp7jga7pgbjmip4iCisgICAgfSwKKyAgICAiTGlua2VyIjogeworICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIuacrOW9k+OBq+OBk+OBruODquODs+OCr+OCkuWJiumZpOOBl+OBvuOBmeOBiz8iLAorICAgICAgICAiQ2FuY2VsIjogIuS4reatoiIsCisgICAgICAgICJFbWFpbCBBZGRyZXNzOiI6ICLjgqLjg4njg6zjgrk6IiwKKyAgICAgICAgIkVtYWlsIExpbmsiOiAiReODoeODvOODq+ODquODs+OCryIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAi44Oq44Oz44Kv44Gu5oy/5YWlL+S/ruatoyIsCisgICAgICAgICJMb2NhdGlvbiBCYXI6IjogIuOCouODieODrOOCueODkOODvCIsCisgICAgICAgICJNZW51IEJhcjoiOiAi44Oh44OL44Ol44O8IiwKKyAgICAgICAgIk1lc3NhZ2UgVGVtcGxhdGU6IjogIuacrOaWh+mbm+W9ojoiLAorICAgICAgICAiTmFtZToiOiAi5ZCN5YmNOiIsCisgICAgICAgICJOZXcgV2luZG93IjogIuaWsOOBl+OBhOOCpuOCo+ODs+ODieOCpiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPcmRpbmFyeSBMaW5rIjogIuaomea6luODquODs+OCryIsCisgICAgICAgICJQb3B1cCBXaW5kb3ciOiAi44Od44OD44OX44Ki44OD44OX44Km44Kj44Oz44OJ44KmIiwKKyAgICAgICAgIlJlbW92ZSBMaW5rIjogIuODquODs+OCr+WJiumZpCIsCisgICAgICAgICJSZXNpemVhYmxlOiI6ICLjg6rjgrXjgqTjgroiLAorICAgICAgICAiU2FtZSBXaW5kb3cgKGp1bXAgb3V0IG9mIGZyYW1lcykiOiAi5ZCM5LiA44Km44Kj44Oz44OJ44KmICjjg5Xjg6zjg7zjg6DmnIDkuIrkvY0pIiwKKyAgICAgICAgIlNjcm9sbGJhcnM6IjogIuOCueOCr+ODreODvOODqyIsCisgICAgICAgICJTaXplOiI6ICLjgrXjgqTjgro6IiwKKyAgICAgICAgIlN0YXR1cyBCYXI6IjogIuOCueODhuODvOOCv+OCueODkOODvCIsCisgICAgICAgICJTdWJqZWN0OiI6ICLku7blkI06IiwKKyAgICAgICAgIlRhcmdldDoiOiAi44K/44O844Ky44OD44OIOiIsCisgICAgICAgICJUb29sYmFyOiI6ICLjg4Tjg7zjg6vjg5Djg7wiLAorICAgICAgICAiVVJMIExpbmsiOiAiVVJM44Oq44Oz44KvIiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIsCisgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAi44Oq44Oz44Kv44KS5L2c5oiQ44GZ44KL44Gr44Gv44OG44Kt44K544OI44KS6YG45oqe44GZ44KL5b+F6KaB44GM44GC44KK44G+44GZIgorICAgIH0sCisgICAgIkxpc3RUeXBlIjogeworICAgICAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogIuODquOCueODiOW9ouW8j+OBrumBuOaKnijpoIbluo/ku5jjgZHjg6rjgrnjg4jnlKgpIiwKKyAgICAgICAgIkRlY2ltYWwgbnVtYmVycyI6ICIxMOmAsuaVsCIsCisgICAgICAgICJMb3dlciBncmVlayBsZXR0ZXJzIjogIuOCruODquOCt+ODo+aWh+WtlyjlsI/mloflrZcpIiwKKyAgICAgICAgIkxvd2VyIGxhdGluIGxldHRlcnMiOiAi44Ki44Or44OV44Kh44OZ44OD44OIKOWwj+aWh+WtlykiLAorICAgICAgICAiTG93ZXIgcm9tYW4gbnVtYmVycyI6ICLjg63jg7zjg57mlbDlrZco5bCP5paH5a2XKSIsCisgICAgICAgICJVcHBlciBsYXRpbiBsZXR0ZXJzIjogIuOCouODq+ODleOCoeODmeODg+ODiCjlpKfmloflrZcpIiwKKyAgICAgICAgIlVwcGVyIHJvbWFuIG51bWJlcnMiOiAi44Ot44O844Oe5pWw5a2XKOWkp+aWh+WtlykiCisgICAgfSwKKyAgICAiTW9vdG9vbHNGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAi44OV44Kh44Kk44Or44G444Gu44Oq44Oz44Kv44KS5oy/5YWlIiwKKyAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICLjg6rjg7Pjgq/jgpLkvZzmiJDjgZnjgovjgavjga/jg4bjgq3jgrnjg4jjgpLpgbjmip7jgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZkiCisgICAgfSwKKyAgICAiTm90ZVNlcnZlciI6IHsKKyAgICAgICAgIkFkZCBHVUlETyBDb2RlIGluIGEgdGV4dGJveCBvbiB0aGUgcGFnZSI6ICLjg5rjg7zjgrjlhoXjga7jg4bjgq3jgrnjg4jjg5zjg4Pjgq/jgrnjgatHVUlET+OCs+ODvOODieOCkui/veWKoCIsCisgICAgICAgICJBZGQgTUlESSBsaW5rIHRvIGFsbG93IHN0dWRlbnRzIHRvIGhlYXIgdGhlIG11c2ljIjogIk1JREnjgbjjga7jg6rjg7Pjgq/jgpLov73liqDjgZfjgIHmpb3mm7LjgpLogbTjgYvjgZvjgabjgoLjgojjgYQiLAorICAgICAgICAiQ2FuY2VsIjogIuS4reatoiIsCisgICAgICAgICJGb3JtYXQiOiAi44OV44Kp44O844Oe44OD44OIIiwKKyAgICAgICAgIkd1aWRvIGNvZGUiOiAiR1VJRE/jgrPjg7zjg4kiLAorICAgICAgICAiSW1hZ2UgUHJldmlldyI6ICLnlLvlg4/jg5fjg6zjg5Pjg6Xjg7wiLAorICAgICAgICAiSW1hZ2UgaW4gYXBwbGV0IjogIuOCouODl+ODrOODg+ODiOeUu+WDjyIsCisgICAgICAgICJJbnNlcnQgR1VJRE8gTXVzaWMgTm90YXRpb24iOiAiR1VJRE8gTXVzaWMgTm90YXRpb27jga7mjL/lhaUiLAorICAgICAgICAiTUlESSBGaWxlIjogIk1JREnjg5XjgqHjgqTjg6siLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3B0aW9ucyI6ICLjgqrjg5fjgrfjg6fjg7MiLAorICAgICAgICAiUHJldmlldyI6ICLooajnpLoiLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIuOCpuOCo+ODs+ODieOCpuOBp+eUu+WDj+OCkuihqOekuiIsCisgICAgICAgICJTb3VyY2UgQ29kZSI6ICLjgr3jg7zjgrnjgrPjg7zjg4kiLAorICAgICAgICAiV2l0aCBNb3ppbGxhLCB0aGUgYXBwbGV0IHdpbGwgbm90IGJlIHZpc2libGUgaW4gZWRpdG9yLCBidXQgb25seSBpbiBXZWIgcGFnZSBhZnRlciBzdWJtaXR0aW5nLiI6ICJNb3ppbGxh44Gn44Gv44Ko44OH44Kj44K/5YaF44Gr44Ki44OX44Os44OD44OI44Gv6KGo56S644GV44KM44G+44Gb44KT44GM44CB6YCB5L+h5b6M44GuV2Vi44Oa44O844K45YaF44Gn44Gv5pyJ5Yq544Gn44GZ44CCIiwKKyAgICAgICAgIlpvb20iOiAi5ouh5aSn546HOiIKKyAgICB9LAorICAgICJPcGVyYSI6IHsKKyAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiTW96aWxsYeODmeODvOOCueOBrldlYuODluODqeOCpuOCtuOBp+OBr+OAgeiyvOOCiuS7mOOBkeODnOOCv+ODs+OBr+apn+iDveOBl+OBvuOBm+OCk++8iOaKgOihk+eahOOBquOCu+OCreODpeODquODhuOCo+S4iuOBrueQhueUseOBp++8ieOAgkN0cmwrVuOCreODvOOCkuaKvOOBl+OBpuebtOaOpeiyvOOCiuS7mOOBkeOBpuOBj+OBoOOBleOBhOOAgiIKKyAgICB9LAorICAgICJQU0xvY2FsIjogeworICAgICAgICAiQ2FuY2VsIjogIuS4reatoiIKKyAgICB9LAorICAgICJQYXN0ZVRleHQiOiB7CisgICAgICAgICJDYW5jZWwiOiAi5Lit5q2iIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBhc3RlIGFzIFBsYWluIFRleHQiOiAi44OX44Os44O844Oz44OG44Kt44K544OI44Go44GX44Gm6LK844KK5LuY44GRIgorICAgIH0sCisgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIuS4reatoiIsCisgICAgICAgICJDb3B5IjogIuOCs+ODlOODvCIsCisgICAgICAgICJEZWxldGUiOiAi5YmK6ZmkIiwKKyAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICLopqrjg4fjgqPjg6zjgq/jg4jjg6rjgbgiLAorICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIuODleOCoeOCpOODq+ODnuODjeODvOOCuOODoyIsCisgICAgICAgICJGaWxlbmFtZSI6ICLjg5XjgqHjgqTjg6vlkI06IiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICLnlLvlg4/jga7mjL/lhaUiLAorICAgICAgICAiTmV3IEZvbGRlciI6ICLmlrDopo/jg5Xjgqnjg6vjg4AiLAorICAgICAgICAiU2F2ZSI6ICLkv53lrZgiLAorICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIuODquODs+OCr+OCkuS9nOaIkOOBmeOCi+OBq+OBr+ODhuOCreOCueODiOOCkumBuOaKnuOBmeOCi+W/heimgeOBjOOBguOCiuOBvuOBmSIKKyAgICB9LAorICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgIkFUVFJJQlVURVMiOiAi5bGe5oCnIiwKKyAgICAgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICAgICAiQ29sb3JzIjogIuiJsiIsCisgICAgICAgICJFbnRlciB0aGUgVEFHIHlvdSB3YW50IHRvIGluc2VydCI6ICLmjL/lhaXjgZfjgZ/jgYTjgr/jgrDjgpLlhaXlipsiLAorICAgICAgICAiTm8gQ1NTIGNsYXNzIGF2YWlhYmxlIjogIkNTU+OCr+ODqeOCueOBjOOBguOCiuOBvuOBm+OCkyIsCisgICAgICAgICJPUFRJT05TIjogIumBuOaKnuiCoiIsCisgICAgICAgICJPayI6ICJPSyIsCisgICAgICAgICJRdWljayBUYWcgRWRpdG9yIjogIuOCr+OCpOODg+OCr+OCv+OCsOOCqOODh+OCo+OCvyIsCisgICAgICAgICJUQUdzIjogIuOCv+OCsCIsCisgICAgICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICLplonjgZjjgabjgYTjgarjgYTlvJXnlKjnrKbjgYzjgYLjgorjgb7jgZkiLAorICAgICAgICAiVGhpcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIFRBRyI6ICLjgr/jgrDjgavjga/jgZnjgafjgavlkIzjgZjlsZ7mgKfjgYzjgYLjgorjgb7jgZkiLAorICAgICAgICAiWW91IGhhdmUgdG8gc2VsZWN0IHNvbWUgdGV4dCI6ICLjg4bjgq3jgrnjg4jjgpLpgbjmip7jgZfjgarjgZHjgozjgbDjgarjgorjgb7jgZvjgpMiCisgICAgfSwKKyAgICAiU2F2ZVN1Ym1pdCI6IHsKKyAgICAgICAgIlJlYWR5IjogIuODrOODh+OCoyIsCisgICAgICAgICJTYXZlIjogIuS/neWtmCIsCisgICAgICAgICJTYXZpbmcuLi4iOiAi5L+d5a2Y5LitLi4uIiwKKyAgICAgICAgImluIHByb2dyZXNzIjogIuWHpueQhuS4rSIKKyAgICB9LAorICAgICJTZXRJZCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICAgICAiRGVsZXRlIjogIuWJiumZpCIsCisgICAgICAgICJJRC9OYW1lOiI6ICJJRC/lkI3liY06IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlNldCBJRC9OYW1lIjogIklE44Go5ZCN5YmN44Gu6Kit5a6aIiwKKyAgICAgICAgIlNldCBJZCBhbmQgTmFtZSI6ICJJROOBqOWQjeWJjeOBruioreWumiIKKyAgICB9LAorICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICJDbG9zaW5nRG91YmxlUXVvdGVzIjogIuKAnCIsCisgICAgICAgICJDbG9zaW5nU2luZ2xlUXVvdGUiOiAi4oCYIiwKKyAgICAgICAgIkNvbnZlcnQgYWxsIHF1b3RlcyBhbmQgZGFzaGVzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IjogIuaWh+abuOWGheOBruW8leeUqOespuOBqOODgOODg+OCt+ODpeOCkuOBmeOBueOBpuWkieaPmyIsCisgICAgICAgICJFbmFibGUgYXV0b21hdGljIHJlcGxhY2VtZW50cyI6ICLoh6rli5Xnva7mj5vjga7mnInlirnljJYiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3BlbmluZ0RvdWJsZVF1b3RlcyI6ICLigJ4iLAorICAgICAgICAiT3BlbmluZ1NpbmdsZVF1b3RlIjogIuKAmiIsCisgICAgICAgICJTbWFydFJlcGxhY2UgU2V0dGluZ3MiOiAiU21hcnRSZXBsYWNl6Kit5a6aIgorICAgIH0sCisgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICAgICAiRGljdGlvbmFyeSI6ICLovp7mm7giLAorICAgICAgICAiRmluaXNoZWQgbGlzdCBvZiBtaXNwZWxsZWQgd29yZHMiOiAi44Gk44Gl44KK6ZaT6YGV5Y2Y6Kqe44Gu5LiA6KanIiwKKyAgICAgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIuaWsOOBl+OBhOODmuODvOOCuOOBp+mWi+OBjeOBvuOBmeOAgiIsCisgICAgICAgICJJZ25vcmUiOiAi54Sh6KaWIiwKKyAgICAgICAgIklnbm9yZSBhbGwiOiAi44GZ44G544Gm54Sh6KaWIiwKKyAgICAgICAgIkluZm8iOiAi5oOF5aCxIiwKKyAgICAgICAgIkxlYXJuIjogIuWtpue/kiIsCisgICAgICAgICJObyBtaXNwZWxsZWQgd29yZHMgZm91bmQgd2l0aCB0aGUgc2VsZWN0ZWQgZGljdGlvbmFyeS4iOiAi6YG45oqe44GV44KM44Gf6L6e5pu444Gr44Gv44Gk44Gl44KK6ZaT6YGV44GE5Y2Y6Kqe44GM44GC44KK44G+44Gb44KT44CCIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk9yaWdpbmFsIHdvcmQiOiAi5YWD44Gu5Y2Y6KqeIiwKKyAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gb3BlbiB0aGlzIGxpbmsiOiAi5pys5b2T44Gr44GT44Gu44Oq44Oz44Kv44KS6ZaL44GN44G+44GZ44GLIiwKKyAgICAgICAgIlBsZWFzZSB3YWl0LiAgQ2FsbGluZyBzcGVsbCBjaGVja2VyLiI6ICLjgZfjgbDjgonjgY/jgYrlvoXjgaHjgY/jgaDjgZXjgYTjgILjgrnjg5rjg6vjg4Hjgqfjg4Pjgqvjg7zjgpLlkbzjgbPlh7rjgZfjgabjgYTjgb7jgZnjgIIiLAorICAgICAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAi44GX44Gw44KJ44GP44GK5b6F44Gh44GP44Gg44GV44GEOiDovp7mm7jjgpLliIfjgormm7/jgYjjgabjgYTjgb7jgZkiLAorICAgICAgICAiUmUtY2hlY2siOiAi5YaN44OB44Kn44OD44KvIiwKKyAgICAgICAgIlJlcGxhY2UiOiAi572u5o+bIiwKKyAgICAgICAgIlJlcGxhY2UgYWxsIjogIuOBmeOBueOBpue9ruaPmyIsCisgICAgICAgICJSZXBsYWNlIHdpdGgiOiAi44GT44KM44Gr572u5o+bIiwKKyAgICAgICAgIlJldmVydCI6ICLmiLvjgZkiLAorICAgICAgICAiU3BlbGwtY2hlY2siOiAi44K544Oa44Or44OB44Kn44OD44KvIiwKKyAgICAgICAgIlN1Z2dlc3Rpb25zIjogIuWAmeijnCIsCisgICAgICAgICJUaGlzIHdpbGwgZHJvcCBjaGFuZ2VzIGFuZCBxdWl0IHNwZWxsIGNoZWNrZXIuICBQbGVhc2UgY29uZmlybS4iOiAi5aSJ5pu044KS56C05qOE44GX44Gm44K544Oa44Or44OB44Kn44OD44Kr44O844KS57WC5LqG44GX44G+44GZ44CC44KI44KN44GX44GE44GE44Gn44GZ44GL44CCIgorICAgIH0sCisgICAgIlN0eWxpc3QiOiB7CisgICAgICAgICJTdHlsZXMiOiAi44K544K/44Kk44OrIgorICAgIH0sCisgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICJDYW5jZWwiOiAi5Lit5q2iIiwKKyAgICAgICAgIkNsZWFuIHVwIEhUTUwiOiAiSFRNTOOBruOCr+ODquODvOODs+ODiuODg+ODlyIsCisgICAgICAgICJHZW5lcmFsIHRpZHkgdXAgYW5kIGNvcnJlY3Rpb24gb2Ygc29tZSBwcm9ibGVtcy4iOiAi5LiA6Iis55qE44Gq6YGp5q2j5YyW44Go44GE44GP44Gk44GL44Gu5ZWP6aGM44KS5L+u5q2j44GX44G+44GZ44CCIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBsZWFzZSBzZWxlY3QgZnJvbSB0aGUgZm9sbG93aW5nIGNsZWFuaW5nIG9wdGlvbnMuLi4iOiAi5Lul5LiL44Gu44Kv44Oq44O844Oz44OK44OD44OX44Kq44OX44K344On44Oz44KS6YG45oqe44GX44Gm44GP44Gg44GV44GELi4uIiwKKyAgICAgICAgIlJlbW92ZSBjdXN0b20gZm9udCBzaXplcy4iOiAi54us6Ieq44OV44Kp44Oz44OI44K144Kk44K66Kit5a6a44Gu6Zmk5Y6744CCIiwKKyAgICAgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIueLrOiHquaWh+Wtl+iJsuioreWumuOBrumZpOWOu+OAgiIsCisgICAgICAgICJSZW1vdmUgY3VzdG9tIHR5cGVmYWNlcyAoZm9udCBcInN0eWxlc1wiKS4iOiAi54us6Ieq44OV44Kp44Oz44OI5ZCN6Kit5a6a44Gu6Zmk5Y67IChmb250IGZhY2Up44CCIiwKKyAgICAgICAgIlJlbW92ZSBsYW5nIGF0dHJpYnV0ZXMuIjogIuiogOiqnuWxnuaAp+OBrumZpOWOu+OAgiIsCisgICAgICAgICJSZXBsYWNlIGRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzIHdpdGggbm9uLWRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzLiI6ICLmlrnlkJHjgaTjgY3lvJXnlKjnrKbjgpLmlrnlkJHjgarjgZflvJXnlKjnrKbjgavnva7mj5vjgIIiCisgICAgfSwKKyAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAiQWxsIGZvdXIgc2lkZXMiOiAi5Zub6L6644GZ44G544GmIiwKKyAgICAgICAgIkJvcmRlcnMiOiAi5aKD55WM57eaIiwKKyAgICAgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICAgICAiQ2FwdGlvbiI6ICLjgq3jg6Pjg5fjgrfjg6fjg7MiLAorICAgICAgICAiQ2VsbCBQcm9wZXJ0aWVzIjogIuOCu+ODq+ODl+ODreODkeODhuOCoyIsCisgICAgICAgICJDZWxsIHByb3BlcnRpZXMiOiAi44K744Or44Gu44OX44Ot44OR44OG44KjIiwKKyAgICAgICAgIkNvbHVtbnMiOiAi5YiX5pWwOiIsCisgICAgICAgICJEZWxldGUgY2VsbCI6ICLjgrvjg6vjga7liYrpmaQiLAorICAgICAgICAiRGVsZXRlIGNvbHVtbiI6ICLliJfjga7liYrpmaQiLAorICAgICAgICAiRGVsZXRlIHJvdyI6ICLooYzjga7liYrpmaQiLAorICAgICAgICAiRGVzY3JpcHRpb24iOiAi6Kqs5piOIiwKKyAgICAgICAgIkZyYW1lIGFuZCBib3JkZXJzIjogIuWkluaeoOOBqOWig+eVjOe3miIsCisgICAgICAgICJGcmFtZXMiOiAi5aSW5p6gIiwKKyAgICAgICAgIkluc2VydCBjZWxsIGFmdGVyIjogIuasoeOBq+OCu+ODq+OCkuaMv+WFpSIsCisgICAgICAgICJJbnNlcnQgY2VsbCBiZWZvcmUiOiAi5YmN44Gr44K744Or44KS5oy/5YWlIiwKKyAgICAgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAi5Y+z44Gr5YiX44KS5oy/5YWlIiwKKyAgICAgICAgIkluc2VydCBjb2x1bW4gYmVmb3JlIjogIuW3puOBq+WIl+OCkuaMv+WFpSIsCisgICAgICAgICJJbnNlcnQgcm93IGFmdGVyIjogIuS4i+OBq+ihjOOCkuaMv+WFpSIsCisgICAgICAgICJJbnNlcnQgcm93IGJlZm9yZSI6ICLkuIrjgavooYzjgpLmjL/lhaUiLAorICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAi44K744Or44Gu57WQ5ZCIIiwKKyAgICAgICAgIk1lcmdlIGNlbGxzIjogIuOCu+ODq+OBrue1kOWQiCIsCisgICAgICAgICJObyBydWxlcyI6ICLljLrliIfjgorjgarjgZciLAorICAgICAgICAiTm8gc2lkZXMiOiAi5aSW5p6g44Gq44GXIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBhZGRpbmciOiAi5L2Z55m9IiwKKyAgICAgICAgIlBsZWFzZSBjbGljayBpbnRvIHNvbWUgY2VsbCI6ICLjgYTjgZrjgozjgYvjga7jgrvjg6vlhoXjgpLjgq/jg6rjg4Pjgq/jgZfjgabjgY/jgaDjgZXjgYQiLAorICAgICAgICAiUm93IFByb3BlcnRpZXMiOiAi6KGM44OX44Ot44OR44OG44KjIiwKKyAgICAgICAgIlJvdyBwcm9wZXJ0aWVzIjogIuihjOOBruODl+ODreODkeODhuOCoyIsCisgICAgICAgICJSb3dzIjogIuihjOaVsDoiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICLjgZnjgbnjgabjga7ooYzplpPjgajliJfplpPjgavnt5rjgpLlvJXjgY8iLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBjb2x1bW5zIG9ubHkiOiAi5YiX44Gu6ZaT44Gr44Gu44G/57ea44KS5byV44GPIiwKKyAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogIuihjOOBrumWk+OBq+OBruOBv+e3muOCkuW8leOBjyIsCisgICAgICAgICJTcGFjaW5nIjogIumWk+malCIsCisgICAgICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogIumWk+malOOBqOS9meeZvSIsCisgICAgICAgICJTcGxpdCBjb2x1bW4iOiAi5YiX44Gu5YiG5YmyIiwKKyAgICAgICAgIlNwbGl0IHJvdyI6ICLooYzjga7liIblibIiLAorICAgICAgICAiU3VtbWFyeSI6ICLopoHntIQiLAorICAgICAgICAiVGFibGUgUHJvcGVydGllcyI6ICLjg4bjg7zjg5bjg6vjga7jg5fjg63jg5Hjg4bjgqMiLAorICAgICAgICAiVGFibGUgcHJvcGVydGllcyI6ICLjg4bjg7zjg5bjg6vjga7jg5fjg63jg5Hjg4bjgqMiLAorICAgICAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAi5LiL6L6644Gu44G/IiwKKyAgICAgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIuW3pui+uuOBruOBvyIsCisgICAgICAgICJUaGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb25seSI6ICLlt6blj7Povrrjga7jgb8iLAorICAgICAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIuWPs+i+uuOBruOBvyIsCisgICAgICAgICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSI6ICLkuIrkuIvovrrjga7jgb8iLAorICAgICAgICAiVGhlIHRvcCBzaWRlIG9ubHkiOiAi5LiK6L6644Gu44G/IiwKKyAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiI6ICLlronlhajjga7jgZ/jgoHjgavjgIHooYzjgavjgbLjgajjgaTjgaDjgZHmrovjgaPjgabjgYTjgovliJfjga7liYrpmaTjga/mi5LlkKbjgZXjgozjgb7jgZnjgIIiLAorICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICLlronlhajjga7jgZ/jgoHjgavjgIHjg4bjg7zjg5bjg6vjgavjgbLjgajjgaTjgaDjgZHmrovjgaPjgabjgYTjgovliJfjga7liYrpmaTjga/mi5LlkKbjgZXjgozjgb7jgZnjgIIiLAorICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3Qgcm93IGluIHRhYmxlLiI6ICLlronlhajjga7jgZ/jgoHjgavjgIHjg4bjg7zjg5bjg6vjgavjgbLjgajjgaTjgaDjgZHmrovjgaPjgabjgYTjgovooYzjga7liYrpmaTjga/mi5LlkKbjgZXjgozjgb7jgZnjgIIiLAorICAgICAgICAicGl4ZWxzIjogIuODlOOCr+OCu+ODqyIKKyAgICB9LAorICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICAgICAiSW5zZXJ0IHRlbXBsYXRlIjogIuODhuODs+ODl+ODrOODvOODiOOBruaMv+WFpSIKKyAgICB9LAorICAgICJVbkZvcm1hdCI6IHsKKyAgICAgICAgIkFsbCI6ICLjgZnjgbnjgaYiLAorICAgICAgICAiQWxsIEhUTUw6IjogIuWFqEhUTUzjgr/jgrA6IiwKKyAgICAgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICAgICAiQ2xlYW5pbmcgQXJlYSI6ICLjgq/jg6rjg7zjg4vjg7PjgrDpoJjln58iLAorICAgICAgICAiQ2xlYW5pbmcgb3B0aW9ucyI6ICLjgq/jg6rjg7zjg4vjg7PjgrDjgqrjg5fjgrfjg6fjg7MiLAorICAgICAgICAiRm9ybWF0dGluZzoiOiAi5pu45byP5oyH5a6a44K/44KwOiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQYWdlIENsZWFuZXIiOiAi44Oa44O844K444Kv44Oq44O844OK44O8IiwKKyAgICAgICAgIlNlbGVjdCB3aGljaCB0eXBlcyBvZiBmb3JtYXR0aW5nIHlvdSB3b3VsZCBsaWtlIHRvIHJlbW92ZS4iOiAi5YmK6Zmk44GZ44KL5pu45byP44KS6YG45oqe44GX44Gm44GP44Gg44GV44GE44CCIiwKKyAgICAgICAgIlNlbGVjdGlvbiI6ICLpgbjmip7pg6jliIYiCisgICAgfSwKKyAgICAiWGluaGEiOiB7CisgICAgICAgICImIzgyMTI7IGZvbnQgJiM4MjEyOyI6ICImIzgyMTI7IOODleOCqeODs+ODiCAmIzgyMTI7IiwKKyAgICAgICAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiJiM4MjEyOyDmm7jlvI8gJiM4MjEyOyIsCisgICAgICAgICImIzgyMTI7IHNpemUgJiM4MjEyOyI6ICImIzgyMTI7IOOCteOCpOOCuiAmIzgyMTI7IiwKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIuODkOODvOOCuOODp+ODs+aDheWgsSIsCisgICAgICAgICJBZGRyZXNzIjogIuOCouODieODrOOCuSIsCisgICAgICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIuiDjOaZr+iJsiIsCisgICAgICAgICJCb2xkIjogIuWkquWtlyIsCisgICAgICAgICJCdWxsZXRlZCBMaXN0IjogIuiomOWPt+S7mOOBjeeuh+adoeabuOOBjSIsCisgICAgICAgICJDbGVhbiBjb250ZW50IHBhc3RlZCBmcm9tIFdvcmQiOiAiV29yZOOBi+OCieiyvOOCiuS7mOOBkeOCieOCjOOBn+WGheWuueOBrua4heabuCIsCisgICAgICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICLjgqTjg7Pjg6njgqTjg7Pjg5Xjgqnjg7Pjg4jmjIflrprjgpLjgq/jg6rjgqIiLAorICAgICAgICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICJNU09mZmljZeOCv+OCsOOCkuOCr+ODquOCoiIsCisgICAgICAgICJDbG9zZSI6ICLplonjgZjjgosiLAorICAgICAgICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICLjgqrjg5bjgrjjgqfjgq/jg4jmp4vnr4nkuK0iLAorICAgICAgICAiQ29weSBzZWxlY3Rpb24iOiAi44Kz44OU44O8IiwKKyAgICAgICAgIkNyZWF0ZSBTdGF0dXNiYXIiOiAi44K544OG44O844K/44K544OQ44O844Gu5L2c5oiQIiwKKyAgICAgICAgIkNyZWF0ZSBUb29sYmFyIjogIuODhOODvOODq+ODkOODvOOBruS9nOaIkCIsCisgICAgICAgICJDdXJyZW50IHN0eWxlIjogIuePvuWcqOOBruOCueOCv+OCpOODqyIsCisgICAgICAgICJDdXQgc2VsZWN0aW9uIjogIuWIh+OCiuWPluOCiiIsCisgICAgICAgICJEZWNyZWFzZSBJbmRlbnQiOiAi44Kk44Oz44OH44Oz44OI6Kej6ZmkIiwKKyAgICAgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIuW3puOBi+OCieWPs+OBuCIsCisgICAgICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICLlj7PjgYvjgonlt6bjgbgiLAorICAgICAgICAiRU5URVIiOiAiRU5URVIiLAorICAgICAgICAiRWRpdG9yIEhlbHAiOiAi44Ko44OH44Kj44K/44Gu44OY44Or44OXIiwKKyAgICAgICAgIkZpbmlzaGluZyI6ICLlrozkuoYiLAorICAgICAgICAiRm9udCBDb2xvciI6ICLmloflrZfoibIiLAorICAgICAgICAiRm9ybWF0dGVkIjogIuaVtOW9oua4iOOBvyIsCisgICAgICAgICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiWGluaGHjg5Xjg6zjg7zjg6Djg6/jg7zjgq/nlJ/miJDkuK0iLAorICAgICAgICAiSGVhZGluZyAxIjogIuimi+WHuuOBlzEiLAorICAgICAgICAiSGVhZGluZyAyIjogIuimi+WHuuOBlzIiLAorICAgICAgICAiSGVhZGluZyAzIjogIuimi+WHuuOBlzMiLAorICAgICAgICAiSGVhZGluZyA0IjogIuimi+WHuuOBlzQiLAorICAgICAgICAiSGVhZGluZyA1IjogIuimi+WHuuOBlzUiLAorICAgICAgICAiSGVhZGluZyA2IjogIuimi+WHuuOBlzYiLAorICAgICAgICAiSGVhZGluZ3MiOiAi6KaL5Ye644GXIiwKKyAgICAgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIuODmOODq+ODlyIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAi5rC05bmz57eaIiwKKyAgICAgICAgIkluY3JlYXNlIEluZGVudCI6ICLjgqTjg7Pjg4fjg7Pjg4joqK3lrpoiLAorICAgICAgICAiSW5pdCBlZGl0b3Igc2l6ZSI6ICLjgqjjg4fjgqPjgr/jgrXjgqTjgrrjga7liJ3mnJ/ljJYiLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIuODhuODvOODluODq+OBruaMv+WFpSIsCisgICAgICAgICJJbnNlcnQgV2ViIExpbmsiOiAi44Oq44Oz44Kv44Gu5oy/5YWlIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAi55S75YOP44Gu5oy/5YWlL+S/ruatoyIsCisgICAgICAgICJJbnNlcnQvT3ZlcndyaXRlIjogIuaMv+WFpS/kuIrmm7jjgY0iLAorICAgICAgICAiSXRhbGljIjogIuaWnOS9kyIsCisgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICLkuK3lpK7lr4TjgZsiLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIuWdh+etieWJsuS7mCIsCisgICAgICAgICJKdXN0aWZ5IExlZnQiOiAi5bem5a+E44GbIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAi5Y+z5a+E44GbIiwKKyAgICAgICAgIktleWJvYXJkIHNob3J0Y3V0cyI6ICLjgq3jg7zjg5zjg7zjg4njgrfjg6fjg7zjg4jjgqvjg4Pjg4giLAorICAgICAgICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIjogIuODreODvOODieS4reOBp+OBmeOAguOBl+OBsOOCieOBj+OBiuW+heOBoeOBj+OBoOOBleOBhCIsCisgICAgICAgICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIjogIuODreODvOODieS4reODl+ODqeOCsOOCpOODsyAkcGx1Z2luIiwKKyAgICAgICAgIk5vcm1hbCI6ICLmqJnmupYiLAorICAgICAgICAiT3JkZXJlZCBMaXN0IjogIueVquWPt+S7mOOBjeeuh+adoeabuOOBjSIsCisgICAgICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICLosrzjgorku5jjgZEiLAorICAgICAgICAiUGF0aCI6ICLjg5HjgrkiLAorICAgICAgICAiUHJpbnQgZG9jdW1lbnQiOiAi5Y2w5Yi3IiwKKyAgICAgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIuOChOOCiuebtOOBlyIsCisgICAgICAgICJSZWdpc3RlciBwbHVnaW4gJHBsdWdpbiI6ICLnmbvpjLLkuK3jg5fjg6njgrDjgqTjg7MgJHBsdWdpbiIsCisgICAgICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICLmm7jlvI/liYrpmaQiLAorICAgICAgICAiU0hJRlQtRU5URVIiOiAiU0hJRlQrRU5URVIiLAorICAgICAgICAiU2F2ZSBhcyI6ICLlkI3liY3jgpLjgaTjgZHjgabkv53lrZgiLAorICAgICAgICAiU2VsZWN0IGFsbCI6ICLjgZnjgbnjgabpgbjmip4iLAorICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAi5q616JC95pu45byP44Gu6Kit5a6aIiwKKyAgICAgICAgIlNwbGl0IEJsb2NrIjogIumgmOWfn+WIhuWJsiIsCisgICAgICAgICJTdHJpa2V0aHJvdWdoIjogIuaJk+OBoea2iOOBl+e3miIsCisgICAgICAgICJTdWJzY3JpcHQiOiAi5LiL5LuY44GN5re744GI5a2XIiwKKyAgICAgICAgIlN1cGVyc2NyaXB0IjogIuS4iuS7mOOBjea3u+OBiOWtlyIsCisgICAgICAgICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAi44Ko44OH44Kj44K/44Gv5Lul5LiL44Gu44Kt44O85pON5L2c44KS5o+Q5L6b44GX44Gm44GE44G+44GZOiIsCisgICAgICAgICJUb2dnbGUgQm9yZGVycyI6ICLlooPnlYznt5rjga7liIfmm78iLAorICAgICAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIkhUTUznt6jpm4bjg6Ljg7zjg4njgpLliIfmm78iLAorICAgICAgICAiVW5kZXJsaW5lIjogIuS4i+e3miIsCisgICAgICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLlhYPjgavmiLvjgZkiLAorICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICLoibLjgpLjgq/jg6rjgqLjgZfjgb7jgZnjgYs/IiwKKyAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIuOCteOCpOOCuuOCkuOCr+ODquOCouOBl+OBvuOBmeOBiz8iLAorICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogIuODleOCqeODs+ODiOWQjeOCkuOCr+ODquOCouOBl+OBvuOBmeOBiz8iLAorICAgICAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIuODhuOCreOCueODiOODouODvOODieOBp+aTjeS9nOOBl+OBpuOBhOOBvuOBmeOAgldZU0lXWUfnt6jpm4bjgavmiLvjgovjgavjga9bPD5d44Oc44K/44Oz44KS5L2/44Gj44Gm44GP44Gg44GV44GE44CCIiwKKyAgICAgICAgImluc2VydCBsaW5lYnJlYWsiOiAi5q616JC95YaF5pS56KGM44Gu5oy/5YWlIiwKKyAgICAgICAgIm5ldyBwYXJhZ3JhcGgiOiAi5paw6KaP5q616JC9IgorICAgIH0sCisgICAgIl9fTkVXX1RSQU5TTEFUSU9OU19fIjogeworICAgICAgICAiQ2hhckNvdW50ZXIiOiB7CisgICAgICAgICAgICAiSFRNTCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEaWFsb2dzIjogeworICAgICAgICAgICAgIlNvbWUgVGV4dCBIZXJlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVkaXRUYWciOiB7CisgICAgICAgICAgICAiRWRpdCBUYWcgQnkgUGVnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVxdWF0aW9uIjogeworICAgICAgICAgICAgIiE9IjogIiIsCisgICAgICAgICAgICAiIWluIjogIiIsCisgICAgICAgICAgICAiJmd0Oy0iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiJmx0O3gmZ3Q7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAhYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYC5gICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAyYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDNgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA1YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDZgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgN2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA4YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgZWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7Jm5ic3A7YDFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Arezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLTpcXCBgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC17Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BDYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Bjb3NgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGxuYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BwaWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHNpbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGFuYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0aW1lc2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImcXVvdDt0ZXh0JnF1b3Q7IjogIiIsCisgICAgICAgICAgICAiJytmb3JtdWxhKyciOiAiIiwKKyAgICAgICAgICAgICIoKG4pLChrKSkiOiAiIiwKKyAgICAgICAgICAgICIoeCsxKS8oeC0xKSI6ICIiLAorICAgICAgICAgICAgIioiOiAiIiwKKyAgICAgICAgICAgICIqKiI6ICIiLAorICAgICAgICAgICAgIistIjogIiIsCisgICAgICAgICAgICAiLSZndDsiOiAiIiwKKyAgICAgICAgICAgICItJmx0OyI6ICIiLAorICAgICAgICAgICAgIi06IjogIiIsCisgICAgICAgICAgICAiLT0iOiAiIiwKKyAgICAgICAgICAgICIvLyI6ICIiLAorICAgICAgICAgICAgIi9fIjogIiIsCisgICAgICAgICAgICAiOi4iOiAiIiwKKyAgICAgICAgICAgICI9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIkAiOiAiIiwKKyAgICAgICAgICAgICJbW2EsYl0sW2MsZF1dIjogIiIsCisgICAgICAgICAgICAiXFxcXCI6ICIiLAorICAgICAgICAgICAgIlxcbkNsaWNrIGluIHRoZSBib3ggdG8gdXNlIHlvdXIga2V5Ym9hcmQgb3IgdXNlIHRoZSBidXR0b25zXFxuIjogIiIsCisgICAgICAgICAgICAiXl4iOiAiIiwKKyAgICAgICAgICAgICJeXl4iOiAiIiwKKyAgICAgICAgICAgICJfX3wiOiAiIiwKKyAgICAgICAgICAgICJffF8iOiAiIiwKKyAgICAgICAgICAgICJgIT1gIjogIiIsCisgICAgICAgICAgICAiYCFpbmAiOiAiIiwKKyAgICAgICAgICAgICJgJmFuZDtgIjogIiIsCisgICAgICAgICAgICAiYCZjYXA7YCI6ICIiLAorICAgICAgICAgICAgImAmY3VwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oy1gIjogIiIsCisgICAgICAgICAgICAiYCZndDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PSZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7eCZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZvcjtgIjogIiIsCisgICAgICAgICAgICAiYCZxdW90O3RleHQmcXVvdDtgIjogIiIsCisgICAgICAgICAgICAiYCgobiksKGspKWAiOiAiIiwKKyAgICAgICAgICAgICJgKHgrMSkvKHgtMSlgIjogIiIsCisgICAgICAgICAgICAiYCoqYCI6ICIiLAorICAgICAgICAgICAgImAqYCI6ICIiLAorICAgICAgICAgICAgImArLWAiOiAiIiwKKyAgICAgICAgICAgICJgLSZndDtgIjogIiIsCisgICAgICAgICAgICAiYC0mbHQ7YCI6ICIiLAorICAgICAgICAgICAgImAtOmAiOiAiIiwKKyAgICAgICAgICAgICJgLT1gIjogIiIsCisgICAgICAgICAgICAiYC8vYCI6ICIiLAorICAgICAgICAgICAgImAvX2AiOiAiIiwKKyAgICAgICAgICAgICJgOi5gIjogIiIsCisgICAgICAgICAgICAiYD0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImBAYCI6ICIiLAorICAgICAgICAgICAgImBbW2EsYl0sW2MsZF1dYCI6ICIiLAorICAgICAgICAgICAgImBcXFxcYCI6ICIiLAorICAgICAgICAgICAgImBfX3xgIjogIiIsCisgICAgICAgICAgICAiYF98X2AiOiAiIiwKKyAgICAgICAgICAgICJgQUFgIjogIiIsCisgICAgICAgICAgICAiYGFsZXBoYCI6ICIiLAorICAgICAgICAgICAgImBhbHBoYWAiOiAiIiwKKyAgICAgICAgICAgICJgYW5kYCI6ICIiLAorICAgICAgICAgICAgImBiYXJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJldGFgIjogIiIsCisgICAgICAgICAgICAiYENDYCI6ICIiLAorICAgICAgICAgICAgImBjY2FgIjogIiIsCisgICAgICAgICAgICAiYGNoaWAiOiAiIiwKKyAgICAgICAgICAgICJgZGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgZGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbGAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYERlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkaWFtb25kYCI6ICIiLAorICAgICAgICAgICAgImBkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkeS9keGAiOiAiIiwKKyAgICAgICAgICAgICJgRUVgIjogIiIsCisgICAgICAgICAgICAiYGVwc2lgIjogIiIsCisgICAgICAgICAgICAiYGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZnJhYCI6ICIiLAorICAgICAgICAgICAgImBnYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgR2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdyYWRgIjogIiIsCisgICAgICAgICAgICAiYGhhcnJgIjogIiIsCisgICAgICAgICAgICAiYGhBcnJgIjogIiIsCisgICAgICAgICAgICAiYGhhdGFgIjogIiIsCisgICAgICAgICAgICAiYGlmYCI6ICIiLAorICAgICAgICAgICAgImBpbmAiOiAiIiwKKyAgICAgICAgICAgICJgaW50YCI6ICIiLAorICAgICAgICAgICAgImBpb3RhYCI6ICIiLAorICAgICAgICAgICAgImBrYXBwYWAiOiAiIiwKKyAgICAgICAgICAgICJgbGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBMYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYGxhcnJgIjogIiIsCisgICAgICAgICAgICAiYGxBcnJgIjogIiIsCisgICAgICAgICAgICAiYGxpbV8oeC0mZ3Q7b28pYCI6ICIiLAorICAgICAgICAgICAgImBsb2dgIjogIiIsCisgICAgICAgICAgICAiYG11YCI6ICIiLAorICAgICAgICAgICAgImBOTmAiOiAiIiwKKyAgICAgICAgICAgICJgbm5gIjogIiIsCisgICAgICAgICAgICAiYG5vdGAiOiAiIiwKKyAgICAgICAgICAgICJgbnVgIjogIiIsCisgICAgICAgICAgICAiYG8rYCI6ICIiLAorICAgICAgICAgICAgImBvLmAiOiAiIiwKKyAgICAgICAgICAgICJgTy9gIjogIiIsCisgICAgICAgICAgICAiYG9pbnRgIjogIiIsCisgICAgICAgICAgICAiYG9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBPbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgb29gIjogIiIsCisgICAgICAgICAgICAiYG9yYCI6ICIiLAorICAgICAgICAgICAgImBveGAiOiAiIiwKKyAgICAgICAgICAgICJgcGhpYCI6ICIiLAorICAgICAgICAgICAgImBQaGlgIjogIiIsCisgICAgICAgICAgICAiYFBpYCI6ICIiLAorICAgICAgICAgICAgImBwaWAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvZGAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvcGAiOiAiIiwKKyAgICAgICAgICAgICJgcHNpYCI6ICIiLAorICAgICAgICAgICAgImBQc2lgIjogIiIsCisgICAgICAgICAgICAiYFFRYCI6ICIiLAorICAgICAgICAgICAgImBxdWFkYCI6ICIiLAorICAgICAgICAgICAgImByQXJyYCI6ICIiLAorICAgICAgICAgICAgImByaG9gIjogIiIsCisgICAgICAgICAgICAiYHJvb3QobikoeClgIjogIiIsCisgICAgICAgICAgICAiYFJSYCI6ICIiLAorICAgICAgICAgICAgImBzZmFgIjogIiIsCisgICAgICAgICAgICAiYFNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgc3FydCh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgc3F1YXJlYCI6ICIiLAorICAgICAgICAgICAgImBzdGFja3JlbCgtJmd0OykoKylgIjogIiIsCisgICAgICAgICAgICAiYHN1YmAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VtYCI6ICIiLAorICAgICAgICAgICAgImBzdXBgIjogIiIsCisgICAgICAgICAgICAiYHN1cGVgIjogIiIsCisgICAgICAgICAgICAiYHRhdWAiOiAiIiwKKyAgICAgICAgICAgICJgdGhldGFgIjogIiIsCisgICAgICAgICAgICAiYFRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImBUVGAiOiAiIiwKKyAgICAgICAgICAgICJgdHRhYCI6ICIiLAorICAgICAgICAgICAgImB1YXJyYCI6ICIiLAorICAgICAgICAgICAgImB1bGFgIjogIiIsCisgICAgICAgICAgICAiYHVwc2lsb25gIjogIiIsCisgICAgICAgICAgICAiYHV1YCI6ICIiLAorICAgICAgICAgICAgImB2ZWNhYCI6ICIiLAorICAgICAgICAgICAgImB2dmAiOiAiIiwKKyAgICAgICAgICAgICJgeF8obW4pYCI6ICIiLAorICAgICAgICAgICAgImBYaWAiOiAiIiwKKyAgICAgICAgICAgICJgeGlgIjogIiIsCisgICAgICAgICAgICAiYHh4YCI6ICIiLAorICAgICAgICAgICAgImB6ZXRhYCI6ICIiLAorICAgICAgICAgICAgImBaWmAiOiAiIiwKKyAgICAgICAgICAgICJgfC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImB8LS1gIjogIiIsCisgICAgICAgICAgICAiYHw9PWAiOiAiIiwKKyAgICAgICAgICAgICJgfF9fYCI6ICIiLAorICAgICAgICAgICAgImB8fmAiOiAiIiwKKyAgICAgICAgICAgICJgfj1gIjogIiIsCisgICAgICAgICAgICAiYH58YCI6ICIiLAorICAgICAgICAgICAgImB+fmAiOiAiIiwKKyAgICAgICAgICAgICJBQSI6ICIiLAorICAgICAgICAgICAgImFsZXBoIjogIiIsCisgICAgICAgICAgICAiYWxwaGEiOiAiIiwKKyAgICAgICAgICAgICJhbmQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGhNTCBFeGFtcGxlIjogIiIsCisgICAgICAgICAgICAiYmFyYSI6ICIiLAorICAgICAgICAgICAgIkJhc2VkIG9uIEFTQ0lJTWF0aE1MIGJ5IjogIiIsCisgICAgICAgICAgICAiYmJhIjogIiIsCisgICAgICAgICAgICAiYmJiYSI6ICIiLAorICAgICAgICAgICAgImJldGEiOiAiIiwKKyAgICAgICAgICAgICJDQyI6ICIiLAorICAgICAgICAgICAgImNjYSI6ICIiLAorICAgICAgICAgICAgImNoaSI6ICIiLAorICAgICAgICAgICAgImRhcnIiOiAiIiwKKyAgICAgICAgICAgICJkZG90YSI6ICIiLAorICAgICAgICAgICAgImRlbCI6ICIiLAorICAgICAgICAgICAgImRlbHRhIjogIiIsCisgICAgICAgICAgICAiRGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJkaWFtb25kIjogIiIsCisgICAgICAgICAgICAiZG90YSI6ICIiLAorICAgICAgICAgICAgImR5L2R4IjogIiIsCisgICAgICAgICAgICAiRUUiOiAiIiwKKyAgICAgICAgICAgICJlcHNpIjogIiIsCisgICAgICAgICAgICAiZXRhIjogIiIsCisgICAgICAgICAgICAiRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQXNjaWlNYXRoTUwgdmlzaXQgdGhpcyBwYWdlOiI6ICIiLAorICAgICAgICAgICAgImZyYSI6ICIiLAorICAgICAgICAgICAgImdhbW1hIjogIiIsCisgICAgICAgICAgICAiR2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJncmFkIjogIiIsCisgICAgICAgICAgICAiaGFyciI6ICIiLAorICAgICAgICAgICAgImhBcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXRhIjogIiIsCisgICAgICAgICAgICAiaWYiOiAiIiwKKyAgICAgICAgICAgICJpbiI6ICIiLAorICAgICAgICAgICAgImludCI6ICIiLAorICAgICAgICAgICAgImludF9hXmJmKHgpZHgiOiAiIiwKKyAgICAgICAgICAgICJpb3RhIjogIiIsCisgICAgICAgICAgICAia2FwcGEiOiAiIiwKKyAgICAgICAgICAgICJMYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsQXJyIjogIiIsCisgICAgICAgICAgICAibGFyciI6ICIiLAorICAgICAgICAgICAgImxpbV8oeC0mZ3Q7b28pIjogIiIsCisgICAgICAgICAgICAibXUiOiAiIiwKKyAgICAgICAgICAgICJOTiI6ICIiLAorICAgICAgICAgICAgIm5uIjogIiIsCisgICAgICAgICAgICAibm5uIjogIiIsCisgICAgICAgICAgICAibm90IjogIiIsCisgICAgICAgICAgICAibnUiOiAiIiwKKyAgICAgICAgICAgICJvKyI6ICIiLAorICAgICAgICAgICAgIm8uIjogIiIsCisgICAgICAgICAgICAiTy8iOiAiIiwKKyAgICAgICAgICAgICJvaW50IjogIiIsCisgICAgICAgICAgICAiT21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJvbWVnYSI6ICIiLAorICAgICAgICAgICAgIm9vIjogIiIsCisgICAgICAgICAgICAib3IiOiAiIiwKKyAgICAgICAgICAgICJveCI6ICIiLAorICAgICAgICAgICAgInBoaSI6ICIiLAorICAgICAgICAgICAgIlBoaSI6ICIiLAorICAgICAgICAgICAgIlBpIjogIiIsCisgICAgICAgICAgICAicGkiOiAiIiwKKyAgICAgICAgICAgICJwcm9kIjogIiIsCisgICAgICAgICAgICAicHJvcCI6ICIiLAorICAgICAgICAgICAgInBzaSI6ICIiLAorICAgICAgICAgICAgIlBzaSI6ICIiLAorICAgICAgICAgICAgIlFRIjogIiIsCisgICAgICAgICAgICAicXVhZCI6ICIiLAorICAgICAgICAgICAgInJBcnIiOiAiIiwKKyAgICAgICAgICAgICJyaG8iOiAiIiwKKyAgICAgICAgICAgICJyb290KG4pKHgpIjogIiIsCisgICAgICAgICAgICAiUlIiOiAiIiwKKyAgICAgICAgICAgICJzZmEiOiAiIiwKKyAgICAgICAgICAgICJTaWdtYSI6ICIiLAorICAgICAgICAgICAgInNpZ21hIjogIiIsCisgICAgICAgICAgICAic3FydCh4KSI6ICIiLAorICAgICAgICAgICAgInNxdWFyZSI6ICIiLAorICAgICAgICAgICAgInN0YWNrcmVsKC0mZ3Q7KSgrKSI6ICIiLAorICAgICAgICAgICAgInN1YiI6ICIiLAorICAgICAgICAgICAgInN1YmUiOiAiIiwKKyAgICAgICAgICAgICJzdW0iOiAiIiwKKyAgICAgICAgICAgICJzdW1fKG49MSleb28iOiAiIiwKKyAgICAgICAgICAgICJzdXAiOiAiIiwKKyAgICAgICAgICAgICJzdXBlIjogIiIsCisgICAgICAgICAgICAidGF1IjogIiIsCisgICAgICAgICAgICAidGhldGEiOiAiIiwKKyAgICAgICAgICAgICJUaGV0YSI6ICIiLAorICAgICAgICAgICAgIlRUIjogIiIsCisgICAgICAgICAgICAidHRhIjogIiIsCisgICAgICAgICAgICAidWFyciI6ICIiLAorICAgICAgICAgICAgInVsYSI6ICIiLAorICAgICAgICAgICAgInVwc2lsb24iOiAiIiwKKyAgICAgICAgICAgICJ1dSI6ICIiLAorICAgICAgICAgICAgInV1dSI6ICIiLAorICAgICAgICAgICAgInZlY2EiOiAiIiwKKyAgICAgICAgICAgICJ2diI6ICIiLAorICAgICAgICAgICAgInZ2diI6ICIiLAorICAgICAgICAgICAgInheKG0rbikiOiAiIiwKKyAgICAgICAgICAgICJ4XyhtbikiOiAiIiwKKyAgICAgICAgICAgICJYaSI6ICIiLAorICAgICAgICAgICAgInhpIjogIiIsCisgICAgICAgICAgICAieHgiOiAiIiwKKyAgICAgICAgICAgICJ6ZXRhIjogIiIsCisgICAgICAgICAgICAiWloiOiAiIiwKKyAgICAgICAgICAgICJ8LSZndDsiOiAiIiwKKyAgICAgICAgICAgICJ8LS0iOiAiIiwKKyAgICAgICAgICAgICJ8PT0iOiAiIiwKKyAgICAgICAgICAgICJ8X18iOiAiIiwKKyAgICAgICAgICAgICJ8fiI6ICIiLAorICAgICAgICAgICAgIn49IjogIiIsCisgICAgICAgICAgICAifnwiOiAiIiwKKyAgICAgICAgICAgICJ+fiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGYW5jeVNlbGVjdHMiOiB7CisgICAgICAgICAgICAiJytvcHQudGV4dCsnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbmRSZXBsYWNlIjogeworICAgICAgICAgICAgIic7XHJcbiAgdmFyIHRhZ2MgPSAnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1PcGVyYXRpb25zIjogeworICAgICAgICAgICAgIk1lc3NhZ2UgU2VudCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBTZWxlY3QuLi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybXMiOiB7CisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBGSUVMRFNFVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBJTlBVVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBTRUxFQ1QiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgVEVYVEFSRUEiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIHNlbGVjdCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgICAgICIuLi4iOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoSVNPLTg4NTktNSkiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoS09JOC1SKSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChXSU5ET1dTLTEyNTEpIjogIiIsCisgICAgICAgICAgICAid2VzdGVybiAoSVNPLTg4NTktMSkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiR2Vja28iOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAgICAgIiYjeDAwZDc7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgSG9yaXpvbnRhbCBSdWxlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgICAgICItIjogIjw8RXF1YXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGZvb3Rub3RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IE5vdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGFnZWJyZWFrIjogeworICAgICAgICAgICAgIlBhZ2UgQnJlYWsiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgICAgICJcXG4gIFRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nXFxuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMSI6ICIiLAorICAgICAgICAgICAgIkxpbmsyIjogIiIsCisgICAgICAgICAgICAiTGluazMiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNCI6ICIiLAorICAgICAgICAgICAgIkxpbms1IjogIiIsCisgICAgICAgICAgICAiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmciOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldDIiOiB7CisgICAgICAgICAgICAiQWxsIENhdGVnb3JpZXMiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMgSFRNTCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyB0ZW1wbGF0ZSB2YXJpYWJsZSI6ICIiLAorICAgICAgICAgICAgIk9ubHkgc2VhcmNoIHdvcmQgYmVnaW5uaW5nIjogIiIsCisgICAgICAgICAgICAiSFRNTCI6ICI8PENoYXJDb3VudGVyPj4iLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIjw8SW5zZXJ0U25pcHBldD4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0VGFibGUiOiB7CisgICAgICAgICAgICAiQ2FwdGlvbiBmb3IgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiQ29sbGFwc2UgYm9yZGVyczoiOiAiIiwKKyAgICAgICAgICAgICJMYXlvdSI6ICIiLAorICAgICAgICAgICAgIlN0eWxlIG9mIHRoZSBib3JkZXIiOiAiIgorICAgICAgICB9LAorICAgICAgICAiTGFuZ01hcmtzIjogeworICAgICAgICAgICAgIicsICciOiAiIgorICAgICAgICB9LAorICAgICAgICAiTGlua2VyIjogeworICAgICAgICAgICAgIihweCkiOiAiIiwKKyAgICAgICAgICAgICJBbmNob3ItTGluayI6ICIiLAorICAgICAgICAgICAgIkFuY2hvcjoiOiAiIiwKKyAgICAgICAgICAgICJQb3B1cFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlNob3dzIE9uIEhvdmVyIjogIiIsCisgICAgICAgICAgICAiVGl0bGU6IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIk9wZXJhIjogeworICAgICAgICAgICAgIk1BUksiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAgICAgIkluc2VydCB0ZXh0IGluIG5ldyBwYXJhZ3JhcGgiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUHJlc2VydmVTY3JpcHRzIjogeworICAgICAgICAgICAgIkphdmFTY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJQSFAiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUXVpY2tUYWciOiB7CisgICAgICAgICAgICAiJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsJzogJyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTZXRJZCI6IHsKKyAgICAgICAgICAgICJTZXQgSWQvTmFtZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBTZWxlY3Rpb24gT25seSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIFNjb3BlIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHN0YW5kIGJ5IHdoaWxlIGNsZWFuaW5nIGluIHByb2Nlc3MuLi4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxpZ25tZW50IChsZWZ0L3JpZ2h0L2p1c3RpZnkpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgY2xhc3NlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgQWxsIEhUTUwgVGFncyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgc3R5bGVzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBlbXBoYXNpcyBhbmQgYW5ub3RhdGlvbnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIFBhcmFncmFwaHMiOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzLiI6ICIiLAorICAgICAgICAgICAgIlZpZ29yb3VzbHkgcHVyZ2UgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiQ2VsbCBUeXBlOiI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIGRvd24iOiAiIiwKKyAgICAgICAgICAgICJDZWxscyB0byB0aGUgcmlnaHQsIGFuZCI6ICIiLAorICAgICAgICAgICAgIkRvIE5vdCBDaGFuZ2UiOiAiIiwKKyAgICAgICAgICAgICJIZWFkZXIgKHRoKSI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIGN1cnJlbnQgY2VsbCB3aXRoOiI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCAodGQpIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuc2F2ZWRDaGFuZ2VzIjogeworICAgICAgICAgICAgIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgZWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIldlYktpdCI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiPDxHZWNrbz4+IgorICAgICAgICB9LAorICAgICAgICAiWGluaGEiOiB7CisgICAgICAgICAgICAiMSAoOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIyICgxMCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIzICgxMiBwdCkiOiAiIiwKKyAgICAgICAgICAgICI0ICgxNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI1ICgxOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI2ICgyNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI3ICgzNiBwdCkiOiAiIiwKKyAgICAgICAgICAgICJBcmlhbCI6ICIiLAorICAgICAgICAgICAgIkNvdXJpZXIgTmV3IjogIiIsCisgICAgICAgICAgICAiQ1RSTC0wICh6ZXJvKSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMSAuLiBDVFJMLTYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUEiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUoiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUwiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLU4iOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVgiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVoiOiAiIiwKKyAgICAgICAgICAgICJFcnJvciBMb2FkaW5nIFhpbmhhLiAgRGV2ZWxvcGVycywgY2hlY2sgdGhlIEVycm9yIENvbnNvbGUgZm9yIGluZm9ybWF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkdlb3JnaWEiOiAiIiwKKyAgICAgICAgICAgICJJbXBhY3QiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIENvcmUiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbnMiOiAiIiwKKyAgICAgICAgICAgICJNUyBXb3JkIENsZWFuZXIiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJUYWhvbWEiOiAiIiwKKyAgICAgICAgICAgICJUaW1lcyBOZXcgUm9tYW4iOiAiIiwKKyAgICAgICAgICAgICJUb3VjaCBoZXJlIGZpcnN0IHRvIGFjdGl2YXRlIGVkaXRvci4iOiAiIiwKKyAgICAgICAgICAgICJWZXJkYW5hIjogIiIsCisgICAgICAgICAgICAiV2FpdGluZyBmb3IgSWZyYW1lIHRvIGxvYWQuLi4iOiAiIiwKKyAgICAgICAgICAgICJXaW5nRGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiU2V0IEJhY2tncm91bmQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTAlIjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICIiLAorICAgICAgICAgICAgIjIwMCUiOiAiIiwKKyAgICAgICAgICAgICIyNSUiOiAiIiwKKyAgICAgICAgICAgICI1MCUiOiAiIiwKKyAgICAgICAgICAgICI3NSUiOiAiIiwKKyAgICAgICAgICAgICI+TGlzdCBWaWV3IjogIiIsCisgICAgICAgICAgICAiPlRodW1ibmFpbCBWaWV3IjogIiIsCisgICAgICAgICAgICAiQToiOiAiIiwKKyAgICAgICAgICAgICJEOiI6ICIiLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZpbGVzaXplOiI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciI6ICIiLAorICAgICAgICAgICAgIkdJRiI6ICIiLAorICAgICAgICAgICAgIkg6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBmb2xkZXIgc2l6ZSBsaW1pdCByZWFjaGVkLiBVcGxvYWQgZGlzYWJsZWQuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHZhbHVlIjogIiIsCisgICAgICAgICAgICAiUE5HIjogIiIsCisgICAgICAgICAgICAiUHJlc2V0IjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgbWFya2VyIGNvbG9yIjogIiIsCisgICAgICAgICAgICAiWDoiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJZOiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlcyI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgVXNlcm5hbWUvRW1haWwiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFBob3RvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFZpZGVvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgU2VydmVyIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFVzZXJuYW1lIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlbyBMaXN0IjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlb3MiOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkdJRiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJQTkciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGljdHVyZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVFBJQ1RVUkUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vdCBkZWZpbmVkIjogIiIsCisgICAgICAgICAgICAiIE9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEyMCUiOiAiIiwKKyAgICAgICAgICAgICIxNTAlIjogIiIsCisgICAgICAgICAgICAiODAlIjogIiIsCisgICAgICAgICAgICAiR1VJRE8gQ29kZSI6ICIiLAorICAgICAgICAgICAgIlpvb20gOiI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJQU0xvY2FsIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNMT0NBTCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJDb25maXJtIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIEdlYXJzIGluIG9yZGVyIHRvIHVzZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlIGFuZCBjb25maWd1cmF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkVuYWJsaW5nIExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJJbnN0YWxsIjogIiIsCisgICAgICAgICAgICAiTGVhcm4gQWJvdXQgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCByZWxvYWQgdGhlIHBhZ2UsIGNhdXNpbmcgeW91IHRvIGxvc2UgYW55IHVuc2F2ZWQgd29yay4gIFByZXNzIFwiT0tcIiB0byByZWxvYWQuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgdXNlcyBHb29nbGUgR2VhcnMgdG8gZW5hYmxlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UuICBXaXRoIEdlYXJzIGluc3RhbGxlZCwgeW91IGNhbiBzYXZlIGRyYWZ0cyBvZiB5b3VyIGRvY3VtZW50cyBvbiB5b3VyIGhhcmQgZHJpdmUsIGNvbmZpZ3VyZSBYaW5oYSB0byBsb29rIHRoZSB3YXkgeW91IHdhbnQsIGFuZCBjYXJyeSB0aGlzIGluZm9ybWF0aW9uIHdoZXJldmVyIHlvdSB1c2UgWGluaGEgb24gdGhlIHdlYi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiUFNTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU1NFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWxlOiAiOiAiIiwKKyAgICAgICAgICAgICJJbXBvcnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEZXRhaWxzIjogIiIsCisgICAgICAgICAgICAiRmlsZSBCcm93c2VyIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gICAgVGhlcmUgQyAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgVGhlcmUgQSAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyBcIiBUaGVyZSBCIFwiIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gJyBUaGVyZSBEICciOiAiIiwKKyAgICAgICAgICAgICJMaXN0IG9mIFBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIk5ldyBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIk9wZW4iOiAiIiwKKyAgICAgICAgICAgICJPcGVuIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgeW91J2QgbGlrZSB0byBjcmVhdGUuIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBlcmFzZSBhbnkgdW5zYXZlZCBjb250ZW50LiAgSWYgeW91J3JlIGNlcnRhaW4sIHBsZWFzZSBjbGljayBPSyB0byBjb250aW51ZS4iOiAiIiwKKyAgICAgICAgICAgICJXZWIgVVJMIjogIiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICI8PFBTTG9jYWw+PiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQiOiAiPDxJbnNlcnROb3RlPj4iCisgICAgICAgIH0sCisgICAgICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBTUEVMTENIRUNLRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiSFRNTEFyZWEgU3BlbGwgQ2hlY2tlciI6ICIiLAorICAgICAgICAgICAgInBsaXogd2VpdCA7LSkiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVja2VyIjogIiIKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9sdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL2x0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZDc2ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9sdC5qcwpAQCAtMCwwICsxLDE1NzMgQEAKKy8vIFhpbmhhIExhbmd1YWdlIENvbWJpbmVkIFRyYW5zbGF0aW9uIEZpbGUKKy8vCisvLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTlNUUlVDVElPTlMgVE8gVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFlvdXIgdHJhbnNsYXRpb24gbXVzdCBiZSBpbiBVVEYtOCBDaGFyYWN0ZXIgRW5jb2RpbmcuCisvLworLy8gVGhpcyBpcyBhIEpTT04gZW5jb2RlZCBmaWxlIChwbHVzIGNvbW1lbnRzKSwgc3RyaW5ncyBzaG91bGQgYmUgZG91YmxlLXF1b3RlCisvLyBvbmx5LCBkbyBub3QgdXNlIHNpbmdsZSBxdW90ZXMgdG8gc3Vycm91bmQgc3RyaW5ncyAtICJoZWxsbyIsIG5vdCAnaGVsbG8nCisvLyBkbyBub3QgaGF2ZSBhIHRyYWlsaW5nIGNvbW1hIGFmdGVyIHRoZSBsYXN0IGVudHJ5IGluIGEgc2VjdGlvbi4KKy8vCisvLyBPbmx5IGZ1bGwgbGluZSBjb21tZW50cyBhcmUgYWxsb3dlZCAodGhhdCBhIGNvbW1lbnRzIG9jY3VweSBlbnRpcmUgbGluZXMpLgorLy8KKy8vIFNlYXJjaCBmb3IgdGhlIF9fTkVXX1RSQU5TTEFUSU9OU19fIHNlY3Rpb24gYmVsb3csIHRoaXMgaXMgd2hlcmUgeW91IHdpbGwKKy8vIHdhbnQgdG8gZm9jdXMsIHRoaXMgc2VjdGlvbiBpbmNsdWRlcyB0aGluZ3MgdGhhdCBkbyBub3QgcHJlc2VudGx5IGhhdmUgYSAKKy8vIHRyYW5zbGF0aW9uIG9yIGZvciB3aGljaCB0aGUgdHJhbnNsYXRpb24gbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgYWNjdXJhY3kuCisvLworLy8gSW4gdGhlIE5ldyBUcmFuc2xhdGlvbnMgc2VjdGlvbiBhIHRyYW5zbGF0aW9uIHN0cmluZyBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZworLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiIgorLy8gICAgIFRoaXMgbWVhbnMgaXQgaXMgbm90IHRyYW5zbGF0ZWQgeWV0LCBhZGQgeW91ciB0cmFuc2xhdGlvbi4uLgorLy8gICAgICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJLbGluZ29uIFN0cmluZyBIZXJlIgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiVHJhbnNsYXRlZCBTdHJpbmcgSGVyZSIKKy8vICAgICBUaGlzIG1lYW5zIHRoYXQgYW4gZXhpc3RpbmcgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nLCBpbiBzb21lIG90aGVyCisvLyAgICAgc2VjdGlvbiBoYXMgYmVlbiBmb3VuZCwgYW5kIHVzZWQuICBDaGVjayB0aGF0IGl0IGlzIGFwcHJvcHJpdGUgZm9yIHRoaXMKKy8vICAgICBzZWN0aW9uIGFuZCBpZiBpdCBpcywgdGhhdCdzIGZpbmUgbGVhdmUgaXQgYXMgaXMsIG90aGVyd2lzZSBjaGFuZ2UgYXMKKy8vICAgICBhcHByb3ByaWF0ZS4KKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIjw8QW5vdGhlclNlY3Rpb24+PiIKKy8vICAgICBUaGlzIG1lYW5zIHVzZSB0aGUgc2FtZSB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcgYXMgPDxBbm90aGVyU2VjdGlvbj4+CisvLyAgICAgdGhpcyBzYXZlcyB5b3UgcmUtdHJhbmxhdGluZyBzdHJpbmdzLiAgSWYgdGhlIENvbnRleHQgb2YgdGhpcyBzZWN0aW9uCisvLyAgICAgYW5kIHRoZSBjb250ZXh0IG9mIEFub3RoZXJTZWN0aW9uIHNlZW0gdGhlIHNhbWUsIHRoYXQncyBmaW5lIGxlYXZlIGl0CisvLyAgICAgdXNpbmcgdGhhdCB0cmFuc2xhdGlvbiwgYnV0IGlmIHRoaXMgc2VjdGlvbiBuZWVkcyBhIGRpZmZlcmVudCB0cmFuc2xhdGlvbiwgCisvLyAgICAgeW91IGNhbiBwcm92aWRlIGl0IGJ5IHJlcGxhY2luZyB0aGUgbGluayAoPDxBbm90aGVyU2VjdGlvbj4+KSB3aXRoIHRoYXQKKy8vICAgICBuZXcgdHJhbnNsYXRpb24uICBGb3IgZXhhbXBsZSAtIGEgIlRhYmxlIiBpbiBzYXkgIkRhdGFQbHVnaW4iIGlzIAorLy8gICAgIHBlcmhhcHMgdHJhbnNsYXRlZCBkaWZmZXJlbnRseSB0byAiVGFibGUiIGluICJGdXJuaXR1cmVQbHVnaW4iLgorLy8KKy8vIFRFU1RJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgcGxhY2UgeW91ciB0cmFuc2xhdGlvbiBmaWxlIG9uIHlvdXIgd2Vic2VydmVyIHNvbWV3aGVyZSBmb3IgZXhhbXBsZQorLy8KKy8vICAgL3hpbmhhL2xhbmcvbWVyZ2VkL2x0LmpzCisvLworLy8gYW5kIHRoZW4gdGVsbCBYaW5oYSB3aGVyZSB0byBnZXQgaXQgKGJlZm9yZSBsb2FkaW5nIFhpbmhhQ29yZS5qcykgYnkgCisvLworLy8gIF9lZGl0b3JfbGFuZyAgICAgICAgICAgICAgPSAnbHQnOworLy8gIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSAgPSAnL3hpbmhhL2xhbmcvbWVyZ2VkL2x0LmpzJzsKKy8vCisvLyBYaW5oYSB3aWxsIGxvYWQgeW91ciBuZXcgbGFuZ3VhZ2UgZGVmaW5pdGlvbi4KKy8vCisvLyBTVUJNSVRUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IGNyZWF0ZSBhIFRpY2tldCBvbiB0aGUgWGluaGEgd2Vic2l0ZSBhbmQgYXR0YWNoIHlvdXIgdHJhbnNsYXRpb24gCisvLyBmaWxlLgorLy8KKy8vIFRoZSBYaW5oYSBkZXZlbG9wZXJzIHdpbGwgdGFrZSB5b3VyIGZpbGUgYW5kIHVzZSB0aGUgCisvLyAgICAgY29udHJpYi9sY19zcGxpdF9tZXJnZWRfZmlsZS5waHAKKy8vIHNjcmlwdCB0byBsb2FkIGl0IGludG8gdGhlIFhpbmhhIGRpc3RyaWJ1dGlvbi4KKworeworICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkFib3V0Qm94IjogeworICAgICAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiQXBpZSByZWRha3RvcmnFsyIKKyAgICB9LAorICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIgorICAgIH0sCisgICAgIkNvbG9yUGlja2VyIjogeworICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiQ29udGV4dE1lbnUiOiB7CisgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICJMeWdpYXZpbWFzIHBhZ2FsIGNlbnRyxIUiLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIkx5Z2l1b3RpIHBhc3RyYWlwxIUiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIkx5Z2lhdmltYXMgcGFnYWwga2FpcsSZIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiTHlnaWF2aW1hcyBwYWdhbCBkZcWhaW7EmSIKKyAgICB9LAorICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSWTEl3RpL01vZGlmaWt1b3RpIiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTmF1amFzIGxhbmdhcyAoX2JsYW5rKSIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIk5vbmUgKHVzZSBpbXBsaWNpdCkiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3RoZXIiOiAiS2l0YXMiLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlNhbWUgZnJhbWUgKF9zZWxmKSIsCisgICAgICAgICJUYXJnZXQ6IjogIlRhcmdldDoiLAorICAgICAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICJQYXZhZGluaW1hcyAodG9vbHRpcCk6IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiVG9wIGZyYW1lIChfdG9wKSIsCisgICAgICAgICJVUkw6IjogIlVSTDoiCisgICAgfSwKKyAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdMWhYXVrdGkiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTmF1amFzIGxhbmdhcyAoX2JsYW5rKSIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIk5vbmUgKHVzZSBpbXBsaWNpdCkiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlNhbWUgZnJhbWUgKF9zZWxmKSIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCkiOiAiUGF2YWRpbmltYXMgKHRvb2x0aXApOiIsCisgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIlRvcCBmcmFtZSAoX3RvcCkiCisgICAgfSwKKyAgICAiRm9ybXMiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkZ1bGxQYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJIb3Jpem9udGFsUnVsZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdMWhYXVrdGkiLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIkhvcml6b250YWxpIGxpbmlqYSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdMWhYXVrdGkiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkluc2VydE1hcnF1ZWUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIgorICAgIH0sCisgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIKKyAgICB9LAorICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdMWhYXVrdGkiLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIsSudGVycHRpIGxlbnRlbMSZIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkxpbmtlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdMWhYXVrdGkiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIklkxJd0aS9Nb2RpZmlrdW90aSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJUYXJnZXQ6IjogIlRhcmdldDoiLAorICAgICAgICAiVVJMOiI6ICJVUkw6IgorICAgIH0sCisgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIgorICAgIH0sCisgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdMWhYXVrdGkiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIgorICAgIH0sCisgICAgIlF1aWNrVGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIKKyAgICB9LAorICAgICJTZXRJZCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdMWhYXVrdGkiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiU21hcnRSZXBsYWNlIjogeworICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiU3BlbGxDaGVja2VyIjogeworICAgICAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlRlbXBsYXRlIjogeworICAgICAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIKKyAgICB9LAorICAgICJVbkZvcm1hdCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdMWhYXVrdGkiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiWGluaGEiOiB7CisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJBcGllIHJlZGFrdG9yacWzIiwKKyAgICAgICAgIkJhY2tncm91bmQgQ29sb3IiOiAiRm9ubyBzcGFsdmEiLAorICAgICAgICAiQm9sZCI6ICJQYXJ5xaFraW50aSIsCisgICAgICAgICJCdWxsZXRlZCBMaXN0IjogIlN1xb5lbmtsaW50YXMgc8SFcmHFoWFzIiwKKyAgICAgICAgIkNvcHkgc2VsZWN0aW9uIjogIktvcGlqdW90aSIsCisgICAgICAgICJDdXJyZW50IHN0eWxlIjogIkRhYmFydGluaXMgc3RpbGl1cyIsCisgICAgICAgICJDdXQgc2VsZWN0aW9uIjogIknFoWtpcnB0aSIsCisgICAgICAgICJEZWNyZWFzZSBJbmRlbnQiOiAiU3VtYcW+aW50aSBwYXJhxaF0xJkiLAorICAgICAgICAiRm9udCBDb2xvciI6ICLFoHJpZnRvIHNwYWx2YSIsCisgICAgICAgICJIZWxwIHVzaW5nIGVkaXRvciI6ICJQYWdhbGJhIG5hdWRvamFudCByZWRha3RvcmnFsyIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiSG9yaXpvbnRhbGkgbGluaWphIiwKKyAgICAgICAgIkluY3JlYXNlIEluZGVudCI6ICJQYWRpZGludGkgcGFyYcWhdMSZIiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICLErnRlcnB0aSBsZW50ZWzEmSIsCisgICAgICAgICJJbnNlcnQgV2ViIExpbmsiOiAixK50ZXJwdGkgbnVvcm9kxIUiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICLErnRlcnB0aSBwYXZlaWtzbGl1a8SFIiwKKyAgICAgICAgIkl0YWxpYyI6ICJLdXJzeXZhcyIsCisgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICJMeWdpYXZpbWFzIHBhZ2FsIGNlbnRyxIUiLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIkx5Z2l1b3RpIHBhc3RyYWlwxIUiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIkx5Z2lhdmltYXMgcGFnYWwga2FpcsSZIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiTHlnaWF2aW1hcyBwYWdhbCBkZcWhaW7EmSIsCisgICAgICAgICJPcmRlcmVkIExpc3QiOiAiTnVtZXJ1b3RhcyBzxIVyYcWhYXMiLAorICAgICAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAixK50ZXJwdGkiLAorICAgICAgICAiUGF0aCI6ICJLZWxpYXMiLAorICAgICAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiUGFrYXJ0b2phIHBhc2t1dGluxK8gYXTFoWF1a3TEhSBqxatzxbMgdmVpa3NtxIUiLAorICAgICAgICAiU3RyaWtldGhyb3VnaCI6ICJQZXJicmF1a3RpIiwKKyAgICAgICAgIlN1YnNjcmlwdCI6ICJBcGF0aW5pcyBpbmRla3NhcyIsCisgICAgICAgICJTdXBlcnNjcmlwdCI6ICJWaXLFoXV0aW5pcyBpbmRla3NhcyIsCisgICAgICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiUGVyanVuZ3RpIMSvIEhUTUwvV1lTSVdZRyIsCisgICAgICAgICJVbmRlcmxpbmUiOiAiUGFicmF1a3RpIiwKKyAgICAgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkF0xaFhdWtpYSBwYXNrdXRpbmkgasWrc8WzIHZlaWtzbcSFIiwKKyAgICAgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJKxatzIGVzZXRlIHRla3N0byByZcW+aW1lLiAgTmF1ZG9raXRlIFs8Pl0gbXlndHVrxIUgZ3LEr8W+aW11aSDEryBXWVNJV1lHLiIKKyAgICB9LAorICAgICJfX05FV19UUkFOU0xBVElPTlNfXyI6IHsKKyAgICAgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgICAgICJBYmJyZXZpYXRpb24iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiIiwKKyAgICAgICAgICAgICJFeHBhbnNpb246IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkFib3V0Qm94IjogeworICAgICAgICAgICAgIkNsb3NlIjogIjw8WGluaGE+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJDb3VudGVyIjogeworICAgICAgICAgICAgIi4uLiBpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIkNoYXJzIjogIiIsCisgICAgICAgICAgICAiSFRNTCI6ICIiLAorICAgICAgICAgICAgIldvcmRzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJhY3Rlck1hcCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgc3BlY2lhbCBjaGFyYWN0ZXIiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICAgICAiQ2xpY2sgYSBjb2xvci4uLiI6ICIiLAorICAgICAgICAgICAgIkNvbG9yOiAiOiAiIiwKKyAgICAgICAgICAgICJTYW1wbGUiOiAiIiwKKyAgICAgICAgICAgICJXZWIgU2FmZTogIjogIiIsCisgICAgICAgICAgICAiQ2xvc2UiOiAiPDxYaW5oYT4+IgorICAgICAgICB9LAorICAgICAgICAiQ29udGV4dE1lbnUiOiB7CisgICAgICAgICAgICAiX0RlbGV0ZSBSb3ciOiAiIiwKKyAgICAgICAgICAgICJfSW1hZ2UgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIl9Nb2RpZnkgTGluay4uLiI6ICIiLAorICAgICAgICAgICAgIl9SZW1vdmUgTGluay4uLiI6ICIiLAorICAgICAgICAgICAgIl9UYWJsZSBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiQ19lbGwgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIkNoZWNfayBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiQ29weSI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBhIGxpbmsiOiAiIiwKKyAgICAgICAgICAgICJDdXJyZW50IFVSTCBpcyI6ICIiLAorICAgICAgICAgICAgIkN1dCI6ICIiLAorICAgICAgICAgICAgIkRlX2xldGUgQ29sdW1uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIENlbGwiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgY29sdW1uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IHJvdyI6ICIiLAorICAgICAgICAgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIiIsCisgICAgICAgICAgICAiSV9uc2VydCBSb3cgQmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5fc2VydCBSb3cgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgX0NvbHVtbiBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ19vbHVtbiBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDZWxsIEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiTGluayBwb2ludHMgdG86IjogIiIsCisgICAgICAgICAgICAiTWFrZSBsaW5fay4uLiI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIiIsCisgICAgICAgICAgICAiT3BlbnMgdGhpcyBsaW5rIGluIGEgbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlBhc3RlIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBlbGVtZW50OiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gdW5saW5rIHRoaXMgZWxlbWVudC4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgdGhlICRlbGVtIEVsZW1lbnQuLi4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgdGhpcyBub2RlIGZyb20gdGhlIGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUm9fdyBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgaW1hZ2UgcHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBDZWxsIFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgVGFibGUgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBSb3cgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJVbmxpbmsgdGhlIGN1cnJlbnQgZWxlbWVudCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICIiLAorICAgICAgICAgICAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEZWZpbml0aW9uTGlzdCI6IHsKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGRlc2NyaXB0aW9uIjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiBsaXN0IjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiB0ZXJtIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRpYWxvZ3MiOiB7CisgICAgICAgICAgICAiU29tZSBUZXh0IEhlcmUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRHluYW1pY0NTUyI6IHsKKyAgICAgICAgICAgICJDaG9vc2Ugc3R5bGVzaGVldCI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQiOiAiIiwKKyAgICAgICAgICAgICJVbmRlZmluZWQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgICAgICJFZGl0IEhUTUwgZm9yIHNlbGVjdGVkIHRleHQiOiAiIiwKKyAgICAgICAgICAgICJFZGl0IFRhZyBCeSBQZWciOiAiIiwKKyAgICAgICAgICAgICJUYWcgRWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVxdWF0aW9uIjogeworICAgICAgICAgICAgIiE9IjogIiIsCisgICAgICAgICAgICAiIWluIjogIiIsCisgICAgICAgICAgICAiJmd0Oy0iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiJmx0O3gmZ3Q7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAhYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYC5gICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAyYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDNgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA1YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDZgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgN2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA4YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgZWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7Jm5ic3A7YDFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Arezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLTpcXCBgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC17Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BDYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Bjb3NgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGxuYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BwaWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHNpbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGFuYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0aW1lc2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImcXVvdDt0ZXh0JnF1b3Q7IjogIiIsCisgICAgICAgICAgICAiJytmb3JtdWxhKyciOiAiIiwKKyAgICAgICAgICAgICIoKG4pLChrKSkiOiAiIiwKKyAgICAgICAgICAgICIoeCsxKS8oeC0xKSI6ICIiLAorICAgICAgICAgICAgIioiOiAiIiwKKyAgICAgICAgICAgICIqKiI6ICIiLAorICAgICAgICAgICAgIistIjogIiIsCisgICAgICAgICAgICAiLSZndDsiOiAiIiwKKyAgICAgICAgICAgICItJmx0OyI6ICIiLAorICAgICAgICAgICAgIi06IjogIiIsCisgICAgICAgICAgICAiLT0iOiAiIiwKKyAgICAgICAgICAgICIvLyI6ICIiLAorICAgICAgICAgICAgIi9fIjogIiIsCisgICAgICAgICAgICAiOi4iOiAiIiwKKyAgICAgICAgICAgICI9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIkAiOiAiIiwKKyAgICAgICAgICAgICJbW2EsYl0sW2MsZF1dIjogIiIsCisgICAgICAgICAgICAiXFxcXCI6ICIiLAorICAgICAgICAgICAgIlxcbkNsaWNrIGluIHRoZSBib3ggdG8gdXNlIHlvdXIga2V5Ym9hcmQgb3IgdXNlIHRoZSBidXR0b25zXFxuIjogIiIsCisgICAgICAgICAgICAiXl4iOiAiIiwKKyAgICAgICAgICAgICJeXl4iOiAiIiwKKyAgICAgICAgICAgICJfX3wiOiAiIiwKKyAgICAgICAgICAgICJffF8iOiAiIiwKKyAgICAgICAgICAgICJgIT1gIjogIiIsCisgICAgICAgICAgICAiYCFpbmAiOiAiIiwKKyAgICAgICAgICAgICJgJmFuZDtgIjogIiIsCisgICAgICAgICAgICAiYCZjYXA7YCI6ICIiLAorICAgICAgICAgICAgImAmY3VwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oy1gIjogIiIsCisgICAgICAgICAgICAiYCZndDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PSZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7eCZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZvcjtgIjogIiIsCisgICAgICAgICAgICAiYCZxdW90O3RleHQmcXVvdDtgIjogIiIsCisgICAgICAgICAgICAiYCgobiksKGspKWAiOiAiIiwKKyAgICAgICAgICAgICJgKHgrMSkvKHgtMSlgIjogIiIsCisgICAgICAgICAgICAiYCoqYCI6ICIiLAorICAgICAgICAgICAgImAqYCI6ICIiLAorICAgICAgICAgICAgImArLWAiOiAiIiwKKyAgICAgICAgICAgICJgLSZndDtgIjogIiIsCisgICAgICAgICAgICAiYC0mbHQ7YCI6ICIiLAorICAgICAgICAgICAgImAtOmAiOiAiIiwKKyAgICAgICAgICAgICJgLT1gIjogIiIsCisgICAgICAgICAgICAiYC8vYCI6ICIiLAorICAgICAgICAgICAgImAvX2AiOiAiIiwKKyAgICAgICAgICAgICJgOi5gIjogIiIsCisgICAgICAgICAgICAiYD0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImBAYCI6ICIiLAorICAgICAgICAgICAgImBbW2EsYl0sW2MsZF1dYCI6ICIiLAorICAgICAgICAgICAgImBcXFxcYCI6ICIiLAorICAgICAgICAgICAgImBfX3xgIjogIiIsCisgICAgICAgICAgICAiYF98X2AiOiAiIiwKKyAgICAgICAgICAgICJgQUFgIjogIiIsCisgICAgICAgICAgICAiYGFsZXBoYCI6ICIiLAorICAgICAgICAgICAgImBhbHBoYWAiOiAiIiwKKyAgICAgICAgICAgICJgYW5kYCI6ICIiLAorICAgICAgICAgICAgImBiYXJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJldGFgIjogIiIsCisgICAgICAgICAgICAiYENDYCI6ICIiLAorICAgICAgICAgICAgImBjY2FgIjogIiIsCisgICAgICAgICAgICAiYGNoaWAiOiAiIiwKKyAgICAgICAgICAgICJgZGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgZGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbGAiOiAiIiwKKyAgICAgICAgICAgICJgRGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkaWFtb25kYCI6ICIiLAorICAgICAgICAgICAgImBkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkeS9keGAiOiAiIiwKKyAgICAgICAgICAgICJgRUVgIjogIiIsCisgICAgICAgICAgICAiYGVwc2lgIjogIiIsCisgICAgICAgICAgICAiYGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZnJhYCI6ICIiLAorICAgICAgICAgICAgImBHYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdyYWRgIjogIiIsCisgICAgICAgICAgICAiYGhhcnJgIjogIiIsCisgICAgICAgICAgICAiYGhBcnJgIjogIiIsCisgICAgICAgICAgICAiYGhhdGFgIjogIiIsCisgICAgICAgICAgICAiYGlmYCI6ICIiLAorICAgICAgICAgICAgImBpbmAiOiAiIiwKKyAgICAgICAgICAgICJgaW50YCI6ICIiLAorICAgICAgICAgICAgImBpb3RhYCI6ICIiLAorICAgICAgICAgICAgImBrYXBwYWAiOiAiIiwKKyAgICAgICAgICAgICJgTGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBsYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYGxBcnJgIjogIiIsCisgICAgICAgICAgICAiYGxhcnJgIjogIiIsCisgICAgICAgICAgICAiYGxpbV8oeC0mZ3Q7b28pYCI6ICIiLAorICAgICAgICAgICAgImBsb2dgIjogIiIsCisgICAgICAgICAgICAiYG11YCI6ICIiLAorICAgICAgICAgICAgImBOTmAiOiAiIiwKKyAgICAgICAgICAgICJgbm5gIjogIiIsCisgICAgICAgICAgICAiYG5vdGAiOiAiIiwKKyAgICAgICAgICAgICJgbnVgIjogIiIsCisgICAgICAgICAgICAiYG8rYCI6ICIiLAorICAgICAgICAgICAgImBvLmAiOiAiIiwKKyAgICAgICAgICAgICJgTy9gIjogIiIsCisgICAgICAgICAgICAiYG9pbnRgIjogIiIsCisgICAgICAgICAgICAiYG9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBPbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgb29gIjogIiIsCisgICAgICAgICAgICAiYG9yYCI6ICIiLAorICAgICAgICAgICAgImBveGAiOiAiIiwKKyAgICAgICAgICAgICJgcGhpYCI6ICIiLAorICAgICAgICAgICAgImBQaGlgIjogIiIsCisgICAgICAgICAgICAiYFBpYCI6ICIiLAorICAgICAgICAgICAgImBwaWAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvZGAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvcGAiOiAiIiwKKyAgICAgICAgICAgICJgUHNpYCI6ICIiLAorICAgICAgICAgICAgImBwc2lgIjogIiIsCisgICAgICAgICAgICAiYFFRYCI6ICIiLAorICAgICAgICAgICAgImBxdWFkYCI6ICIiLAorICAgICAgICAgICAgImByQXJyYCI6ICIiLAorICAgICAgICAgICAgImByaG9gIjogIiIsCisgICAgICAgICAgICAiYHJvb3QobikoeClgIjogIiIsCisgICAgICAgICAgICAiYFJSYCI6ICIiLAorICAgICAgICAgICAgImBzZmFgIjogIiIsCisgICAgICAgICAgICAiYFNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgc3FydCh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgc3F1YXJlYCI6ICIiLAorICAgICAgICAgICAgImBzdGFja3JlbCgtJmd0OykoKylgIjogIiIsCisgICAgICAgICAgICAiYHN1YmAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VtYCI6ICIiLAorICAgICAgICAgICAgImBzdXBgIjogIiIsCisgICAgICAgICAgICAiYHN1cGVgIjogIiIsCisgICAgICAgICAgICAiYHRhdWAiOiAiIiwKKyAgICAgICAgICAgICJgVGhldGFgIjogIiIsCisgICAgICAgICAgICAiYHRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImBUVGAiOiAiIiwKKyAgICAgICAgICAgICJgdHRhYCI6ICIiLAorICAgICAgICAgICAgImB1YXJyYCI6ICIiLAorICAgICAgICAgICAgImB1bGFgIjogIiIsCisgICAgICAgICAgICAiYHVwc2lsb25gIjogIiIsCisgICAgICAgICAgICAiYHV1YCI6ICIiLAorICAgICAgICAgICAgImB2ZWNhYCI6ICIiLAorICAgICAgICAgICAgImB2dmAiOiAiIiwKKyAgICAgICAgICAgICJgeF8obW4pYCI6ICIiLAorICAgICAgICAgICAgImBYaWAiOiAiIiwKKyAgICAgICAgICAgICJgeGlgIjogIiIsCisgICAgICAgICAgICAiYHh4YCI6ICIiLAorICAgICAgICAgICAgImB6ZXRhYCI6ICIiLAorICAgICAgICAgICAgImBaWmAiOiAiIiwKKyAgICAgICAgICAgICJgfC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImB8LS1gIjogIiIsCisgICAgICAgICAgICAiYHw9PWAiOiAiIiwKKyAgICAgICAgICAgICJgfF9fYCI6ICIiLAorICAgICAgICAgICAgImB8fmAiOiAiIiwKKyAgICAgICAgICAgICJgfj1gIjogIiIsCisgICAgICAgICAgICAiYH58YCI6ICIiLAorICAgICAgICAgICAgImB+fmAiOiAiIiwKKyAgICAgICAgICAgICJBQSI6ICIiLAorICAgICAgICAgICAgImFsZXBoIjogIiIsCisgICAgICAgICAgICAiYWxwaGEiOiAiIiwKKyAgICAgICAgICAgICJhbmQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGggRm9ybXVsYSBJbnB1dCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aE1MIEV4YW1wbGUiOiAiIiwKKyAgICAgICAgICAgICJiYXJhIjogIiIsCisgICAgICAgICAgICAiQmFzZWQgb24gQVNDSUlNYXRoTUwgYnkiOiAiIiwKKyAgICAgICAgICAgICJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiYmJhIjogIiIsCisgICAgICAgICAgICAiYmV0YSI6ICIiLAorICAgICAgICAgICAgIkNDIjogIiIsCisgICAgICAgICAgICAiY2NhIjogIiIsCisgICAgICAgICAgICAiY2hpIjogIiIsCisgICAgICAgICAgICAiZGFyciI6ICIiLAorICAgICAgICAgICAgImRkb3RhIjogIiIsCisgICAgICAgICAgICAiZGVsIjogIiIsCisgICAgICAgICAgICAiZGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJEZWx0YSI6ICIiLAorICAgICAgICAgICAgImRpYW1vbmQiOiAiIiwKKyAgICAgICAgICAgICJkb3RhIjogIiIsCisgICAgICAgICAgICAiZHkvZHgiOiAiIiwKKyAgICAgICAgICAgICJFRSI6ICIiLAorICAgICAgICAgICAgImVwc2kiOiAiIiwKKyAgICAgICAgICAgICJldGEiOiAiIiwKKyAgICAgICAgICAgICJGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBBc2NpaU1hdGhNTCB2aXNpdCB0aGlzIHBhZ2U6IjogIiIsCisgICAgICAgICAgICAiRm9ybXVsYSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJmcmEiOiAiIiwKKyAgICAgICAgICAgICJnYW1tYSI6ICIiLAorICAgICAgICAgICAgIkdhbW1hIjogIiIsCisgICAgICAgICAgICAiZ3JhZCI6ICIiLAorICAgICAgICAgICAgImhBcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXJyIjogIiIsCisgICAgICAgICAgICAiaGF0YSI6ICIiLAorICAgICAgICAgICAgImlmIjogIiIsCisgICAgICAgICAgICAiaW4iOiAiIiwKKyAgICAgICAgICAgICJJbnB1dCI6ICIiLAorICAgICAgICAgICAgImludCI6ICIiLAorICAgICAgICAgICAgImludF9hXmJmKHgpZHgiOiAiIiwKKyAgICAgICAgICAgICJpb3RhIjogIiIsCisgICAgICAgICAgICAia2FwcGEiOiAiIiwKKyAgICAgICAgICAgICJMYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsYXJyIjogIiIsCisgICAgICAgICAgICAibEFyciI6ICIiLAorICAgICAgICAgICAgImxpbV8oeC0mZ3Q7b28pIjogIiIsCisgICAgICAgICAgICAibXUiOiAiIiwKKyAgICAgICAgICAgICJOTiI6ICIiLAorICAgICAgICAgICAgIm5uIjogIiIsCisgICAgICAgICAgICAibm5uIjogIiIsCisgICAgICAgICAgICAibm90IjogIiIsCisgICAgICAgICAgICAibnUiOiAiIiwKKyAgICAgICAgICAgICJvKyI6ICIiLAorICAgICAgICAgICAgIm8uIjogIiIsCisgICAgICAgICAgICAiTy8iOiAiIiwKKyAgICAgICAgICAgICJvaW50IjogIiIsCisgICAgICAgICAgICAiT21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJvbWVnYSI6ICIiLAorICAgICAgICAgICAgIm9vIjogIiIsCisgICAgICAgICAgICAib3IiOiAiIiwKKyAgICAgICAgICAgICJveCI6ICIiLAorICAgICAgICAgICAgInBoaSI6ICIiLAorICAgICAgICAgICAgIlBoaSI6ICIiLAorICAgICAgICAgICAgInBpIjogIiIsCisgICAgICAgICAgICAiUGkiOiAiIiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIiIsCisgICAgICAgICAgICAicHJvZCI6ICIiLAorICAgICAgICAgICAgInByb3AiOiAiIiwKKyAgICAgICAgICAgICJwc2kiOiAiIiwKKyAgICAgICAgICAgICJQc2kiOiAiIiwKKyAgICAgICAgICAgICJRUSI6ICIiLAorICAgICAgICAgICAgInF1YWQiOiAiIiwKKyAgICAgICAgICAgICJyQXJyIjogIiIsCisgICAgICAgICAgICAicmhvIjogIiIsCisgICAgICAgICAgICAicm9vdChuKSh4KSI6ICIiLAorICAgICAgICAgICAgIlJSIjogIiIsCisgICAgICAgICAgICAic2ZhIjogIiIsCisgICAgICAgICAgICAic2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJTaWdtYSI6ICIiLAorICAgICAgICAgICAgInNxcnQoeCkiOiAiIiwKKyAgICAgICAgICAgICJzcXVhcmUiOiAiIiwKKyAgICAgICAgICAgICJzdGFja3JlbCgtJmd0OykoKykiOiAiIiwKKyAgICAgICAgICAgICJzdWIiOiAiIiwKKyAgICAgICAgICAgICJzdWJlIjogIiIsCisgICAgICAgICAgICAic3VtIjogIiIsCisgICAgICAgICAgICAic3VtXyhuPTEpXm9vIjogIiIsCisgICAgICAgICAgICAic3VwIjogIiIsCisgICAgICAgICAgICAic3VwZSI6ICIiLAorICAgICAgICAgICAgInRhdSI6ICIiLAorICAgICAgICAgICAgIlRoZXRhIjogIiIsCisgICAgICAgICAgICAidGhldGEiOiAiIiwKKyAgICAgICAgICAgICJUVCI6ICIiLAorICAgICAgICAgICAgInR0YSI6ICIiLAorICAgICAgICAgICAgInVhcnIiOiAiIiwKKyAgICAgICAgICAgICJ1bGEiOiAiIiwKKyAgICAgICAgICAgICJ1cHNpbG9uIjogIiIsCisgICAgICAgICAgICAidXUiOiAiIiwKKyAgICAgICAgICAgICJ1dXUiOiAiIiwKKyAgICAgICAgICAgICJ2ZWNhIjogIiIsCisgICAgICAgICAgICAidnYiOiAiIiwKKyAgICAgICAgICAgICJ2dnYiOiAiIiwKKyAgICAgICAgICAgICJ4XihtK24pIjogIiIsCisgICAgICAgICAgICAieF8obW4pIjogIiIsCisgICAgICAgICAgICAiWGkiOiAiIiwKKyAgICAgICAgICAgICJ4aSI6ICIiLAorICAgICAgICAgICAgInh4IjogIiIsCisgICAgICAgICAgICAiemV0YSI6ICIiLAorICAgICAgICAgICAgIlpaIjogIiIsCisgICAgICAgICAgICAifC0mZ3Q7IjogIiIsCisgICAgICAgICAgICAifC0tIjogIiIsCisgICAgICAgICAgICAifD09IjogIiIsCisgICAgICAgICAgICAifF9fIjogIiIsCisgICAgICAgICAgICAifH4iOiAiIiwKKyAgICAgICAgICAgICJ+PSI6ICIiLAorICAgICAgICAgICAgIn58IjogIiIsCisgICAgICAgICAgICAifn4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmFuY3lTZWxlY3RzIjogeworICAgICAgICAgICAgIicrb3B0LnRleHQrJyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGaW5kUmVwbGFjZSI6IHsKKyAgICAgICAgICAgICInO1xyXG4gIHZhciB0YWdjID0gJyI6ICIiLAorICAgICAgICAgICAgIkNhc2Ugc2Vuc2l0aXZlIHNlYXJjaCI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIjogIiIsCisgICAgICAgICAgICAiRG9uZSI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSB0ZXh0IHlvdSB3YW50IHRvIGZpbmQiOiAiIiwKKyAgICAgICAgICAgICJGaW5kIGFuZCBSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiZm91bmQgaXRlbSI6ICIiLAorICAgICAgICAgICAgImZvdW5kIGl0ZW1zIjogIiIsCisgICAgICAgICAgICAiSGlnaGxpZ2h0IjogIiIsCisgICAgICAgICAgICAiSW5mb3JtIGEgcmVwbGFjZW1lbnQgd29yZCI6ICIiLAorICAgICAgICAgICAgIk5leHQiOiAiIiwKKyAgICAgICAgICAgICJub3QgZm91bmQiOiAiIiwKKyAgICAgICAgICAgICJPcHRpb25zIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSB3aXRoOiI6ICIiLAorICAgICAgICAgICAgInJlcGxhY2VkIGl0ZW0iOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtcyI6ICIiLAorICAgICAgICAgICAgIlNlYXJjaCBmb3I6IjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSBhbGwgb2NjdXJyZW5jZXMiOiAiIiwKKyAgICAgICAgICAgICJTdWJzdGl0dXRlIHRoaXMgb2NjdXJyZW5jZT8iOiAiIiwKKyAgICAgICAgICAgICJVbmRvIjogIiIsCisgICAgICAgICAgICAiV2hvbGUgd29yZHMgb25seSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGb3JtT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJFbnRlciB0aGUgbmFtZSBmb3IgbmV3IG9wdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIGNoZWNrIGJveC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBGb3JtLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG11bHRpLWxpbmUgdGV4dCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSByYWRpbyBidXR0b24uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgc2VsZWN0IGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHN1Ym1pdC9yZXNldCBidXR0b24uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgdGV4dCwgcGFzc3dvcmQgb3IgaGlkZGVuIGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIk1lc3NhZ2UgU2VudCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBTZWxlY3QuLi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybXMiOiB7CisgICAgICAgICAgICAiJ29uQ2xpY2snPSI6ICIiLAorICAgICAgICAgICAgIkFjY2VzcyBLZXk6IjogIiIsCisgICAgICAgICAgICAiQWN0aW9uIFVSTDoiOiAiIiwKKyAgICAgICAgICAgICJCdXR0b24gU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiQ2hlY2tlZCI6ICIiLAorICAgICAgICAgICAgIkNvbHVtbnM6IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCB0ZXh0IChvcHRpb25hbCkiOiAiIiwKKyAgICAgICAgICAgICJEaW1lbnNpb25zIjogIiIsCisgICAgICAgICAgICAiRGlzYWJsZWQiOiAiIiwKKyAgICAgICAgICAgICJFbmNvZGluZzoiOiAiIiwKKyAgICAgICAgICAgICJGb3IgQ29udHJvbDoiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBGSUVMRFNFVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IExBQkVMIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBTRUxFQ1QiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiRm9ybSBoYW5kbGVyIHNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJHZXQiOiAiIiwKKyAgICAgICAgICAgICJIYXJkIjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0IGluIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiSFRNTC1Gb3JtIHRvIENHSSAoZGVmYXVsdCkiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBzb3VyY2UiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBVUkw6IjogIiIsCisgICAgICAgICAgICAiSW5pdGlhbCBUZXh0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiSmF2YXNjcmlwdCBmb3IgYnV0dG9uIGNsaWNrIjogIiIsCisgICAgICAgICAgICAiTGFiZWw6IjogIiIsCisgICAgICAgICAgICAiTGVnZW5kOiI6ICIiLAorICAgICAgICAgICAgIk1heCBsZW5ndGg6IjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY2NlcHRlZCI6ICIiLAorICAgICAgICAgICAgIk1ldGhvZDoiOiAiIiwKKyAgICAgICAgICAgICJtdWx0aXBhcnQgRm9ybSBEYXRhIChGaWxlLVVwbG9hZCkiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gc2VsZWN0IjogIiIsCisgICAgICAgICAgICAibmFtZSBvZiB0aGUgdGV4dGFyZWEiOiAiIiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICIiLAorICAgICAgICAgICAgIm5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIm5vd3JhcCI6ICIiLAorICAgICAgICAgICAgIk9mZiI6ICIiLAorICAgICAgICAgICAgIlBoeXNpY2FsIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIGEgTGFiZWwiOiAiIiwKKyAgICAgICAgICAgICJQb3N0IjogIiIsCisgICAgICAgICAgICAicHJlIjogIiIsCisgICAgICAgICAgICAiUmVhZCBPbmx5IjogIiIsCisgICAgICAgICAgICAiUm93czoiOiAiIiwKKyAgICAgICAgICAgICJTaXplIG9mIHRleHQgYm94IGluIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJTaXplOiI6ICIiLAorICAgICAgICAgICAgIlNvZnQiOiAiIiwKKyAgICAgICAgICAgICJUYWIgSW5kZXg6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IEZyYW1lOiI6ICIiLAorICAgICAgICAgICAgIlRleHQ6IjogIiIsCisgICAgICAgICAgICAiVVJMIG9mIGltYWdlIjogIiIsCisgICAgICAgICAgICAiVmFsdWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZToiOiAiIiwKKyAgICAgICAgICAgICJWaXJ0dWFsIjogIiIsCisgICAgICAgICAgICAiV2lkdGggaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJXcmFwIE1vZGU6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBOYW1lIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iCisgICAgICAgIH0sCisgICAgICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgICAgICIuLi4iOiAiIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgc3R5bGUtc2hlZXQ6IjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZCBjb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJDaGFyYWN0ZXIgc2V0OiI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChJU08tODg1OS01KSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChLT0k4LVIpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKFdJTkRPV1MtMTI1MSkiOiAiIiwKKyAgICAgICAgICAgICJEZXNjcmlwdGlvbjoiOiAiIiwKKyAgICAgICAgICAgICJET0NUWVBFOiI6ICIiLAorICAgICAgICAgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCB0aXRsZToiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkczoiOiAiIiwKKyAgICAgICAgICAgICJQcmltYXJ5IHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIlRleHQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiVVRGLTggKHJlY29tbWVuZGVkKSI6ICIiLAorICAgICAgICAgICAgIndlc3Rlcm4gKElTTy04ODU5LTEpIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bGxTY3JlZW4iOiB7CisgICAgICAgICAgICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkdlY2tvIjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJIb3Jpem9udGFsUnVsZSI6IHsKKyAgICAgICAgICAgICImI3gwMGQ3OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiIiwKKyAgICAgICAgICAgICJDZW50ZXIiOiAiIiwKKyAgICAgICAgICAgICJDb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L2VkaXQgaG9yaXpvbnRhbCBydWxlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgSG9yaXpvbnRhbCBSdWxlIjogIiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIiIsCisgICAgICAgICAgICAiTGVmdCI6ICIiLAorICAgICAgICAgICAgIk5vIHNoYWRpbmciOiAiIiwKKyAgICAgICAgICAgICJwZXJjZW50IjogIiIsCisgICAgICAgICAgICAicGl4ZWxzIjogIiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSI6ICIiLAorICAgICAgICAgICAgIldpZHRoOiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbmxpbmVTdHlsZXIiOiB7CisgICAgICAgICAgICAiQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIiIsCisgICAgICAgICAgICAiQm90dG9tIjogIiIsCisgICAgICAgICAgICAiQ2hhciI6ICIiLAorICAgICAgICAgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIiIsCisgICAgICAgICAgICAiQ1NTIFN0eWxlIjogIiIsCisgICAgICAgICAgICAiRkcgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJGbG9hdCI6ICIiLAorICAgICAgICAgICAgIkp1c3RpZnkiOiAiIiwKKyAgICAgICAgICAgICJNYXJnaW4iOiAiIiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiIiwKKyAgICAgICAgICAgICJOb25lIjogIiIsCisgICAgICAgICAgICAiUGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIlRleHQgYWxpZ24iOiAiIiwKKyAgICAgICAgICAgICJUb3AiOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICIiLAorICAgICAgICAgICAgIi0iOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJDZW50ZXIiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBVUkwiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJMYXlvdXQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAicGVyY2VudCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgInBpeGVscyI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiV2lkdGgiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAgICAgIkFuY2hvciBuYW1lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEFuY2hvciI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICAgICAiQWJzYm90dG9tIjogIiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiIiwKKyAgICAgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICIiLAorICAgICAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIkhvcml6b250YWw6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICIiLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJTcGFjaW5nIjogIiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICIiLAorICAgICAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbDoiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBVUkw6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJUb3AiOiAiPDxJbmxpbmVTdHlsZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGZvb3Rub3RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IE5vdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGFnZWJyZWFrIjogeworICAgICAgICAgICAgIlBhZ2UgYnJlYWsiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIEJyZWFrIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNtaWxleSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgU21pbGV5IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICAgICAiXFxuICBUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZ1xcbiI6ICIiLAorICAgICAgICAgICAgIkhpZGUgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMSI6ICIiLAorICAgICAgICAgICAgIkxpbmsyIjogIiIsCisgICAgICAgICAgICAiTGluazMiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNCI6ICIiLAorICAgICAgICAgICAgIkxpbms1IjogIiIsCisgICAgICAgICAgICAiU2hvdyBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmciOiAiIiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgICAgICJBbGwgQ2F0ZWdvcmllcyI6ICIiLAorICAgICAgICAgICAgIkZpbHRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyBIVE1MIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIHRlbXBsYXRlIHZhcmlhYmxlIjogIiIsCisgICAgICAgICAgICAiT25seSBzZWFyY2ggd29yZCBiZWdpbm5pbmciOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIjw8Q2hhckNvdW50ZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICI8PEluc2VydFNuaXBwZXQ+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAgICAgIkNhcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJDYXB0aW9uIGZvciB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIHBhZGRpbmc6IjogIiIsCisgICAgICAgICAgICAiQ2VsbCBzcGFjaW5nOiI6ICIiLAorICAgICAgICAgICAgIkNvbGxhcHNlIGJvcmRlcnM6IjogIiIsCisgICAgICAgICAgICAiQ29sczoiOiAiIiwKKyAgICAgICAgICAgICJFbSI6ICIiLAorICAgICAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJMYXlvdSI6ICIiLAorICAgICAgICAgICAgIk51bWJlciBvZiBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICIiLAorICAgICAgICAgICAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSBvZiB0aGUgYm9yZGVyIjogIiIsCisgICAgICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiV2lkdGggdW5pdCI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvcmRlciI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJMYXlvdXQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUGVyY2VudCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlBpeGVscyI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUm93czoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTcGFjaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRvcCI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiTGFuZ01hcmtzIjogeworICAgICAgICAgICAgIiZtZGFzaDsgbGFuZ3VhZ2UgJm1kYXNoOyI6ICIiLAorICAgICAgICAgICAgIicsICciOiAiIiwKKyAgICAgICAgICAgICJFbmdsaXNoIjogIiIsCisgICAgICAgICAgICAiRnJlbmNoIjogIiIsCisgICAgICAgICAgICAiR3JlZWsiOiAiIiwKKyAgICAgICAgICAgICJsYW5ndWFnZSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJMYXRpbiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJMaW5rZXIiOiB7CisgICAgICAgICAgICAiKHB4KSI6ICIiLAorICAgICAgICAgICAgIkFuY2hvci1MaW5rIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIEFkZHJlc3M6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgTGluayI6ICIiLAorICAgICAgICAgICAgIkxvY2F0aW9uIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZW51IEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFRlbXBsYXRlOiI6ICIiLAorICAgICAgICAgICAgIk5ldyBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcmRpbmFyeSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUG9wdXAgV2luZG93IjogIiIsCisgICAgICAgICAgICAiUG9wdXBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgTGluayI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZWFibGU6IjogIiIsCisgICAgICAgICAgICAiU2FtZSBXaW5kb3cgKGp1bXAgb3V0IG9mIGZyYW1lcykiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGxiYXJzOiI6ICIiLAorICAgICAgICAgICAgIlNob3dzIE9uIEhvdmVyIjogIiIsCisgICAgICAgICAgICAiU3RhdHVzIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJTdWJqZWN0OiI6ICIiLAorICAgICAgICAgICAgIlRpdGxlOiI6ICIiLAorICAgICAgICAgICAgIlRvb2xiYXI6IjogIiIsCisgICAgICAgICAgICAiVVJMIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiIiwKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIk5hbWU6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiU2l6ZToiOiAiPDxGb3Jtcz4+IgorICAgICAgICB9LAorICAgICAgICAiTGlzdFR5cGUiOiB7CisgICAgICAgICAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogIiIsCisgICAgICAgICAgICAiRGVjaW1hbCBudW1iZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgZ3JlZWsgbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIGxhdGluIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciByb21hbiBudW1iZXJzIjogIiIsCisgICAgICAgICAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIlVwcGVyIHJvbWFuIG51bWJlcnMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiTW9vdG9vbHNGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJPcGVyYSI6IHsKKyAgICAgICAgICAgICJNQVJLIjogIiIsCisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQYXN0ZVRleHQiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IHRleHQgaW4gbmV3IHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIlBhc3RlIGFzIFBsYWluIFRleHQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUHJlc2VydmVTY3JpcHRzIjogeworICAgICAgICAgICAgIkphdmFTY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJQSFAiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUXVpY2tUYWciOiB7CisgICAgICAgICAgICAiJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsJzogJyI6ICIiLAorICAgICAgICAgICAgIkFUVFJJQlVURVMiOiAiIiwKKyAgICAgICAgICAgICJDb2xvcnMiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgVEFHIHlvdSB3YW50IHRvIGluc2VydCI6ICIiLAorICAgICAgICAgICAgIk5vIENTUyBjbGFzcyBhdmFpYWJsZSI6ICIiLAorICAgICAgICAgICAgIk9rIjogIiIsCisgICAgICAgICAgICAiT1BUSU9OUyI6ICIiLAorICAgICAgICAgICAgIlF1aWNrIFRhZyBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJUQUdzIjogIiIsCisgICAgICAgICAgICAiVGhlcmUgYXJlIHNvbWUgdW5jbG9zZWQgcXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIGF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgVEFHIjogIiIsCisgICAgICAgICAgICAiWW91IGhhdmUgdG8gc2VsZWN0IHNvbWUgdGV4dCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTYXZlU3VibWl0IjogeworICAgICAgICAgICAgImluIHByb2dyZXNzIjogIiIsCisgICAgICAgICAgICAiUmVhZHkiOiAiIiwKKyAgICAgICAgICAgICJTYXZlIjogIiIsCisgICAgICAgICAgICAiU2F2aW5nLi4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNldElkIjogeworICAgICAgICAgICAgIklEL05hbWU6IjogIiIsCisgICAgICAgICAgICAiU2V0IElkIGFuZCBOYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElkL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSUQvTmFtZSI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiU21hcnRSZXBsYWNlIjogeworICAgICAgICAgICAgIkNsb3NpbmdEb3VibGVRdW90ZXMiOiAiIiwKKyAgICAgICAgICAgICJDbG9zaW5nU2luZ2xlUXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJDb252ZXJ0IGFsbCBxdW90ZXMgYW5kIGRhc2hlcyBpbiB0aGUgY3VycmVudCBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBhdXRvbWF0aWMgcmVwbGFjZW1lbnRzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIk9wZW5pbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIlNtYXJ0UmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgIlNtYXJ0UmVwbGFjZSBTZXR0aW5ncyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTdHlsaXN0IjogeworICAgICAgICAgICAgIlN0eWxlcyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAgICAgIkNsZWFuIGJhZCBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQuIjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gU2VsZWN0aW9uIE9ubHkiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiB1cCBIVE1MIjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgU2NvcGUiOiAiIiwKKyAgICAgICAgICAgICJHZW5lcmFsIHRpZHkgdXAgYW5kIGNvcnJlY3Rpb24gb2Ygc29tZSBwcm9ibGVtcy4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc2VsZWN0IGZyb20gdGhlIGZvbGxvd2luZyBjbGVhbmluZyBvcHRpb25zLi4uIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHN0YW5kIGJ5IHdoaWxlIGNsZWFuaW5nIGluIHByb2Nlc3MuLi4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxpZ25tZW50IChsZWZ0L3JpZ2h0L2p1c3RpZnkpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgY2xhc3NlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgQWxsIEhUTUwgVGFncyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgc3R5bGVzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gZm9udCBzaXplcy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIHRleHQgY29sb3JzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdHlwZWZhY2VzIChmb250IFwic3R5bGVzXCIpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBlbXBoYXNpcyBhbmQgYW5ub3RhdGlvbnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGxhbmcgYXR0cmlidXRlcy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgUGFyYWdyYXBocyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMuIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSBkaXJlY3Rpb25hbCBxdW90ZSBtYXJrcyB3aXRoIG5vbi1kaXJlY3Rpb25hbCBxdW90ZSBtYXJrcy4iOiAiIiwKKyAgICAgICAgICAgICJWaWdvcm91c2x5IHB1cmdlIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAgICAgIkFsbCBmb3VyIHNpZGVzIjogIiIsCisgICAgICAgICAgICAiQm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkNlbGwgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIkNlbGwgUHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIkNlbGwgVHlwZToiOiAiIiwKKyAgICAgICAgICAgICJDZWxscyBkb3duIjogIiIsCisgICAgICAgICAgICAiQ2VsbHMgdG8gdGhlIHJpZ2h0LCBhbmQiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgY2VsbCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgcm93IjogIiIsCisgICAgICAgICAgICAiRG8gTm90IENoYW5nZSI6ICIiLAorICAgICAgICAgICAgIkZyYW1lIGFuZCBib3JkZXJzIjogIiIsCisgICAgICAgICAgICAiRnJhbWVzIjogIiIsCisgICAgICAgICAgICAiSGVhZGVyICh0aCkiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY2VsbCBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY29sdW1uIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCByb3cgYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcm93IGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIGNlbGxzIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY3VycmVudCBjZWxsIHdpdGg6IjogIiIsCisgICAgICAgICAgICAiTm8gcnVsZXMiOiAiIiwKKyAgICAgICAgICAgICJObyBzaWRlcyI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCAodGQpIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNsaWNrIGludG8gc29tZSBjZWxsIjogIiIsCisgICAgICAgICAgICAiUm93IHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJSb3cgUHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGNvbHVtbnMgb25seSI6ICIiLAorICAgICAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogIiIsCisgICAgICAgICAgICAiU3BhY2luZyBhbmQgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IHJvdyI6ICIiLAorICAgICAgICAgICAgIlN1bW1hcnkiOiAiIiwKKyAgICAgICAgICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiVGFibGUgUHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlRoZSBib3R0b20gc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIGxlZnQtaGFuZCBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSByaWdodC1oYW5kIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSB0b3AgYW5kIGJvdHRvbSBzaWRlcyBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHRvcCBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjb2x1bW4gaW4gdGFibGUuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3Qgcm93IGluIHRhYmxlLiI6ICIiLAorICAgICAgICAgICAgIkNhcHRpb24iOiAiPDxJbnNlcnRUYWJsZT4+IiwKKyAgICAgICAgICAgICJDb2x1bW5zIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiRGVzY3JpcHRpb24iOiAiPDxGdWxsUGFnZT4+IiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAicGl4ZWxzIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUm93cyI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNwYWNpbmciOiAiPDxJbnNlcnRJbWFnZT4+IgorICAgICAgICB9LAorICAgICAgICAiVW5zYXZlZENoYW5nZXMiOiB7CisgICAgICAgICAgICAiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBlZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiV2ViS2l0IjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICI8PEdlY2tvPj4iCisgICAgICAgIH0sCisgICAgICAgICJYaW5oYSI6IHsKKyAgICAgICAgICAgICImIzgyMTI7IGZvbnQgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICImIzgyMTI7IHNpemUgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIjEgKDggcHQpIjogIiIsCisgICAgICAgICAgICAiMiAoMTAgcHQpIjogIiIsCisgICAgICAgICAgICAiMyAoMTIgcHQpIjogIiIsCisgICAgICAgICAgICAiNCAoMTQgcHQpIjogIiIsCisgICAgICAgICAgICAiNSAoMTggcHQpIjogIiIsCisgICAgICAgICAgICAiNiAoMjQgcHQpIjogIiIsCisgICAgICAgICAgICAiNyAoMzYgcHQpIjogIiIsCisgICAgICAgICAgICAiQWRkcmVzcyI6ICIiLAorICAgICAgICAgICAgIkFyaWFsIjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gY29udGVudCBwYXN0ZWQgZnJvbSBXb3JkIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJDbGVhciBNU09mZmljZSB0YWdzIjogIiIsCisgICAgICAgICAgICAiQ2xvc2UiOiAiIiwKKyAgICAgICAgICAgICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIiIsCisgICAgICAgICAgICAiQ291cmllciBOZXciOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgU3RhdHVzYmFyIjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFRvb2xiYXIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTAgKHplcm8pIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0xIC4uIENUUkwtNiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtRSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtVSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtViI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWiI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiIiwKKyAgICAgICAgICAgICJFZGl0b3IgSGVscCI6ICIiLAorICAgICAgICAgICAgIkVOVEVSIjogIiIsCisgICAgICAgICAgICAiRXJyb3IgTG9hZGluZyBYaW5oYS4gIERldmVsb3BlcnMsIGNoZWNrIHRoZSBFcnJvciBDb25zb2xlIGZvciBpbmZvcm1hdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGaW5pc2hpbmciOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0ZWQiOiAiIiwKKyAgICAgICAgICAgICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiIiwKKyAgICAgICAgICAgICJHZW9yZ2lhIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAxIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAyIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAzIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA0IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA1IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA2IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJJbXBhY3QiOiAiIiwKKyAgICAgICAgICAgICJJbml0IGVkaXRvciBzaXplIjogIiIsCisgICAgICAgICAgICAiaW5zZXJ0IGxpbmVicmVhayI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9PdmVyd3JpdGUiOiAiIiwKKyAgICAgICAgICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIENvcmUiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW5zIjogIiIsCisgICAgICAgICAgICAiTVMgV29yZCBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAibmV3IHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIlByaW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICIiLAorICAgICAgICAgICAgIlNhdmUgYXMiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgYWxsIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IENvbG9yIjogIiIsCisgICAgICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJTSElGVC1FTlRFUiI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IEJsb2NrIjogIiIsCisgICAgICAgICAgICAiVGFob21hIjogIiIsCisgICAgICAgICAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogIiIsCisgICAgICAgICAgICAiVGltZXMgTmV3IFJvbWFuIjogIiIsCisgICAgICAgICAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJUb3VjaCBoZXJlIGZpcnN0IHRvIGFjdGl2YXRlIGVkaXRvci4iOiAiIiwKKyAgICAgICAgICAgICJWZXJkYW5hIjogIiIsCisgICAgICAgICAgICAiV2FpdGluZyBmb3IgSWZyYW1lIHRvIGxvYWQuLi4iOiAiIiwKKyAgICAgICAgICAgICJXaW5nRGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIiIsCisgICAgICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiUmVtb3ZlIEN1cnJlbnQgQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIlNldCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IHBhZ2UgYmFja2dyb3VuZCBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlNldCBQYWdlIEJhY2tncm91bmQgSW1hZ2UiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2xpZW50c2lkZVNwZWxsY2hlY2siOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVjayB1c2luZyBpZVNwZWxsIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEwJSI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiIiwKKyAgICAgICAgICAgICIyMDAlIjogIiIsCisgICAgICAgICAgICAiMjUlIjogIiIsCisgICAgICAgICAgICAiNTAlIjogIiIsCisgICAgICAgICAgICAiNzUlIjogIiIsCisgICAgICAgICAgICAiPkxpc3QgVmlldyI6ICIiLAorICAgICAgICAgICAgIj5UaHVtYm5haWwgVmlldyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIiIsCisgICAgICAgICAgICAiQWxpZ24iOiAiIiwKKyAgICAgICAgICAgICJBbHQiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJDcm9wIjogIiIsCisgICAgICAgICAgICAiRDoiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiIiwKKyAgICAgICAgICAgICJFZGl0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIiIsCisgICAgICAgICAgICAiRmlsZW5hbWU6IjogIiIsCisgICAgICAgICAgICAiRmlsZXNpemU6IjogIiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkZsaXAgVmVydGljYWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJHSUYiOiAiIiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiIiwKKyAgICAgICAgICAgICJIOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIiIsCisgICAgICAgICAgICAiSlBFRyBIaWdoIjogIiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiIiwKKyAgICAgICAgICAgICJKUEVHIE1lZGl1bSI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmciOiAiIiwKKyAgICAgICAgICAgICJMb2NrIjogIiIsCisgICAgICAgICAgICAiTWFya2VyIjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBmb2xkZXIgc2l6ZSBsaW1pdCByZWFjaGVkLiBVcGxvYWQgZGlzYWJsZWQuIjogIiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICIiLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJObyBGaWxlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB2YWx1ZSI6ICIiLAorICAgICAgICAgICAgIlBORyI6ICIiLAorICAgICAgICAgICAgIlByZXNldCI6ICIiLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIiIsCisgICAgICAgICAgICAiUmVmcmVzaCI6ICIiLAorICAgICAgICAgICAgIlJlbmFtZSI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIEltYWdlIjogIiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiIiwKKyAgICAgICAgICAgICJTdGFydCBZOiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgbWFya2VyIGNvbG9yIjogIiIsCisgICAgICAgICAgICAiVHJhc2giOiAiIiwKKyAgICAgICAgICAgICJVcGxvYWQiOiAiIiwKKyAgICAgICAgICAgICJXOiI6ICIiLAorICAgICAgICAgICAgIlg6IjogIiIsCisgICAgICAgICAgICAiWGluaGEgSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiWToiOiAiIiwKKyAgICAgICAgICAgICJab29tIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJDbGVhciI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIkNvbG9yIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiQ29weSI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkN1dCI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkhlaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIjw8TW9vdG9vbHNGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTWFyZ2luIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUGFkZGluZyI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRvcCI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJXaWR0aCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIldpZHRoOiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiRmlsdGVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbHRlciI6ICI8PEluc2VydFNuaXBwZXQyPj4iCisgICAgICAgIH0sCisgICAgICAgICJIdG1sVGlkeSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEhUTUxUSURZIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkF1dG8tVGlkeSI6ICIiLAorICAgICAgICAgICAgIkRvbid0IFRpZHkiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIFRpZHkiOiAiIiwKKyAgICAgICAgICAgICJUaWR5IGZhaWxlZC4gIENoZWNrIHlvdXIgSFRNTCBmb3Igc3ludGF4IGVycm9ycy4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFuZ2xlOiI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgUGljdHVyZXMiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFVzZXJuYW1lL0VtYWlsIjogIiIsCisgICAgICAgICAgICAiRm9sZGVyIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgTGlzdCI6ICIiLAorICAgICAgICAgICAgIktleXdvcmQiOiAiIiwKKyAgICAgICAgICAgICJObyBJbWFnZXMgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBQaG90b3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBWaWRlb3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIFNlcnZlciI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBVc2VybmFtZSI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW8gTGlzdCI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW9zIjogIiIsCisgICAgICAgICAgICAiQToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJDbGVhciI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQ3JvcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJFZGl0IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiR0lGIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIEhpZ2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgTG93IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIE1lZGl1bSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxvY2siOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1hcmtlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlBORyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZXNpemUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUm90YXRlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlN0YXJ0IFk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlRyYXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJXOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJCZWhhdmlvcjoiOiAiIiwKKyAgICAgICAgICAgICJDb250aW51b3VzIjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uOiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBzY3JvbGxpbmcgbWFycXVlZSI6ICIiLAorICAgICAgICAgICAgIk1hcnF1ZWUgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIEFtb3VudDoiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgRGVsYXk6IjogIiIsCisgICAgICAgICAgICAiU2xpZGUiOiAiIiwKKyAgICAgICAgICAgICJTcGVlZCBDb250cm9sIjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJOYW1lIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlRleHQ6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBub3QgZGVmaW5lZCI6ICIiLAorICAgICAgICAgICAgIk9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiIE9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiVXBsb2FkIGZpbGUiOiAiIiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbDoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkltYWdlIFVSTDoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJMYXlvdXQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlNpemUiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTcGFjaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRvcCI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVmVydGljYWw6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEyMCUiOiAiIiwKKyAgICAgICAgICAgICIxNTAlIjogIiIsCisgICAgICAgICAgICAiODAlIjogIiIsCisgICAgICAgICAgICAiQWRkIEdVSURPIENvZGUgaW4gYSB0ZXh0Ym94IG9uIHRoZSBwYWdlIjogIiIsCisgICAgICAgICAgICAiQWRkIE1JREkgbGluayB0byBhbGxvdyBzdHVkZW50cyB0byBoZWFyIHRoZSBtdXNpYyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdCI6ICIiLAorICAgICAgICAgICAgIkdVSURPIENvZGUiOiAiIiwKKyAgICAgICAgICAgICJHdWlkbyBjb2RlIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgaW4gYXBwbGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEdVSURPIE11c2ljIE5vdGF0aW9uIjogIiIsCisgICAgICAgICAgICAiTUlESSBGaWxlIjogIiIsCisgICAgICAgICAgICAiU291cmNlIENvZGUiOiAiIiwKKyAgICAgICAgICAgICJXaXRoIE1vemlsbGEsIHRoZSBhcHBsZXQgd2lsbCBub3QgYmUgdmlzaWJsZSBpbiBlZGl0b3IsIGJ1dCBvbmx5IGluIFdlYiBwYWdlIGFmdGVyIHN1Ym1pdHRpbmcuIjogIiIsCisgICAgICAgICAgICAiWm9vbSA6IjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiWm9vbSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgR2VhcnMgaW4gb3JkZXIgdG8gdXNlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UgYW5kIGNvbmZpZ3VyYXRpb24uIjogIiIsCisgICAgICAgICAgICAiRW5hYmxpbmcgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIkluc3RhbGwiOiAiIiwKKyAgICAgICAgICAgICJMZWFybiBBYm91dCBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIHJlbG9hZCB0aGUgcGFnZSwgY2F1c2luZyB5b3UgdG8gbG9zZSBhbnkgdW5zYXZlZCB3b3JrLiAgUHJlc3MgXCJPS1wiIHRvIHJlbG9hZC4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSB1c2VzIEdvb2dsZSBHZWFycyB0byBlbmFibGUgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZS4gIFdpdGggR2VhcnMgaW5zdGFsbGVkLCB5b3UgY2FuIHNhdmUgZHJhZnRzIG9mIHlvdXIgZG9jdW1lbnRzIG9uIHlvdXIgaGFyZCBkcml2ZSwgY29uZmlndXJlIFhpbmhhIHRvIGxvb2sgdGhlIHdheSB5b3Ugd2FudCwgYW5kIGNhcnJ5IHRoaXMgaW5mb3JtYXRpb24gd2hlcmV2ZXIgeW91IHVzZSBYaW5oYSBvbiB0aGUgd2ViLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQU1NlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbGU6ICI6ICIiLAorICAgICAgICAgICAgIkltcG9ydCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQZXJzaXN0ZW50U3RvcmFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkRldGFpbHMiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIEJyb3dzZXIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgICBUaGVyZSBDICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICBUaGVyZSBBICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvIFwiIFRoZXJlIEIgXCIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAnIFRoZXJlIEQgJyI6ICIiLAorICAgICAgICAgICAgIkxpc3Qgb2YgUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiTmV3IERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiT3BlbiI6ICIiLAorICAgICAgICAgICAgIk9wZW4gRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB5b3UnZCBsaWtlIHRvIGNyZWF0ZS4iOiAiIiwKKyAgICAgICAgICAgICJTYXZlIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGVyYXNlIGFueSB1bnNhdmVkIGNvbnRlbnQuICBJZiB5b3UncmUgY2VydGFpbiwgcGxlYXNlIGNsaWNrIE9LIHRvIGNvbnRpbnVlLiI6ICIiLAorICAgICAgICAgICAgIldlYiBVUkwiOiAiIiwKKyAgICAgICAgICAgICJDb25maXJtIjogIjw8UFNMb2NhbD4+IiwKKyAgICAgICAgICAgICJDb3B5IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGVuYW1lIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQiOiAiPDxJbnNlcnROb3RlPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlNhdmUiOiAiPDxTYXZlU3VibWl0Pj4iLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiU3BlbGxDaGVja2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogU1BFTExDSEVDS0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkRpY3Rpb25hcnkiOiAiIiwKKyAgICAgICAgICAgICJGaW5pc2hlZCBsaXN0IG9mIG1pc3BlbGxlZCB3b3JkcyI6ICIiLAorICAgICAgICAgICAgIkhUTUxBcmVhIFNwZWxsIENoZWNrZXIiOiAiIiwKKyAgICAgICAgICAgICJJIHdpbGwgb3BlbiBpdCBpbiBhIG5ldyBwYWdlLiI6ICIiLAorICAgICAgICAgICAgIklnbm9yZSI6ICIiLAorICAgICAgICAgICAgIklnbm9yZSBhbGwiOiAiIiwKKyAgICAgICAgICAgICJJbmZvIjogIiIsCisgICAgICAgICAgICAiTGVhcm4iOiAiIiwKKyAgICAgICAgICAgICJObyBtaXNwZWxsZWQgd29yZHMgZm91bmQgd2l0aCB0aGUgc2VsZWN0ZWQgZGljdGlvbmFyeS4iOiAiIiwKKyAgICAgICAgICAgICJPcmlnaW5hbCB3b3JkIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byBvcGVuIHRoaXMgbGluayI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSB3YWl0LiAgQ2FsbGluZyBzcGVsbCBjaGVja2VyLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSB3YWl0OiBjaGFuZ2luZyBkaWN0aW9uYXJ5IHRvIjogIiIsCisgICAgICAgICAgICAicGxpeiB3ZWl0IDstKSI6ICIiLAorICAgICAgICAgICAgIlJlLWNoZWNrIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UgYWxsIjogIiIsCisgICAgICAgICAgICAiUmV2ZXJ0IjogIiIsCisgICAgICAgICAgICAiU3BlbGwgQ2hlY2tlciI6ICIiLAorICAgICAgICAgICAgIlNwZWxsLWNoZWNrIjogIiIsCisgICAgICAgICAgICAiU3VnZ2VzdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgZHJvcCBjaGFuZ2VzIGFuZCBxdWl0IHNwZWxsIGNoZWNrZXIuICBQbGVhc2UgY29uZmlybS4iOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIHdpdGgiOiAiPDxGaW5kUmVwbGFjZT4+IgorICAgICAgICB9LAorICAgICAgICAiVGVtcGxhdGUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBURU1QTEFURSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJJbnNlcnQgdGVtcGxhdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiVW5Gb3JtYXQiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBVTkZPUk1BVCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbGwiOiAiIiwKKyAgICAgICAgICAgICJBbGwgSFRNTDoiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBBcmVhIjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgb3B0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdHRpbmc6IjogIiIsCisgICAgICAgICAgICAiUGFnZSBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IHdoaWNoIHR5cGVzIG9mIGZvcm1hdHRpbmcgeW91IHdvdWxkIGxpa2UgdG8gcmVtb3ZlLiI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdGlvbiI6ICIiCisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvbHYuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9sdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjY2ZDQyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvbHYuanMKQEAgLTAsMCArMSwxNTczIEBACisvLyBYaW5oYSBMYW5ndWFnZSBDb21iaW5lZCBUcmFuc2xhdGlvbiBGaWxlCisvLworLy8gTEFORzogImx2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU5TVFJVQ1RJT05TIFRPIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBZb3VyIHRyYW5zbGF0aW9uIG11c3QgYmUgaW4gVVRGLTggQ2hhcmFjdGVyIEVuY29kaW5nLgorLy8KKy8vIFRoaXMgaXMgYSBKU09OIGVuY29kZWQgZmlsZSAocGx1cyBjb21tZW50cyksIHN0cmluZ3Mgc2hvdWxkIGJlIGRvdWJsZS1xdW90ZQorLy8gb25seSwgZG8gbm90IHVzZSBzaW5nbGUgcXVvdGVzIHRvIHN1cnJvdW5kIHN0cmluZ3MgLSAiaGVsbG8iLCBub3QgJ2hlbGxvJworLy8gZG8gbm90IGhhdmUgYSB0cmFpbGluZyBjb21tYSBhZnRlciB0aGUgbGFzdCBlbnRyeSBpbiBhIHNlY3Rpb24uCisvLworLy8gT25seSBmdWxsIGxpbmUgY29tbWVudHMgYXJlIGFsbG93ZWQgKHRoYXQgYSBjb21tZW50cyBvY2N1cHkgZW50aXJlIGxpbmVzKS4KKy8vCisvLyBTZWFyY2ggZm9yIHRoZSBfX05FV19UUkFOU0xBVElPTlNfXyBzZWN0aW9uIGJlbG93LCB0aGlzIGlzIHdoZXJlIHlvdSB3aWxsCisvLyB3YW50IHRvIGZvY3VzLCB0aGlzIHNlY3Rpb24gaW5jbHVkZXMgdGhpbmdzIHRoYXQgZG8gbm90IHByZXNlbnRseSBoYXZlIGEgCisvLyB0cmFuc2xhdGlvbiBvciBmb3Igd2hpY2ggdGhlIHRyYW5zbGF0aW9uIG5lZWRzIHRvIGJlIGNoZWNrZWQgZm9yIGFjY3VyYWN5LgorLy8KKy8vIEluIHRoZSBOZXcgVHJhbnNsYXRpb25zIHNlY3Rpb24gYSB0cmFuc2xhdGlvbiBzdHJpbmcgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcKKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIiIKKy8vICAgICBUaGlzIG1lYW5zIGl0IGlzIG5vdCB0cmFuc2xhdGVkIHlldCwgYWRkIHlvdXIgdHJhbnNsYXRpb24uLi4KKy8vICAgICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiS2xpbmdvbiBTdHJpbmcgSGVyZSIKKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIlRyYW5zbGF0ZWQgU3RyaW5nIEhlcmUiCisvLyAgICAgVGhpcyBtZWFucyB0aGF0IGFuIGV4aXN0aW5nIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZywgaW4gc29tZSBvdGhlcgorLy8gICAgIHNlY3Rpb24gaGFzIGJlZW4gZm91bmQsIGFuZCB1c2VkLiAgQ2hlY2sgdGhhdCBpdCBpcyBhcHByb3ByaXRlIGZvciB0aGlzCisvLyAgICAgc2VjdGlvbiBhbmQgaWYgaXQgaXMsIHRoYXQncyBmaW5lIGxlYXZlIGl0IGFzIGlzLCBvdGhlcndpc2UgY2hhbmdlIGFzCisvLyAgICAgYXBwcm9wcmlhdGUuCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICI8PEFub3RoZXJTZWN0aW9uPj4iCisvLyAgICAgVGhpcyBtZWFucyB1c2UgdGhlIHNhbWUgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nIGFzIDw8QW5vdGhlclNlY3Rpb24+PgorLy8gICAgIHRoaXMgc2F2ZXMgeW91IHJlLXRyYW5sYXRpbmcgc3RyaW5ncy4gIElmIHRoZSBDb250ZXh0IG9mIHRoaXMgc2VjdGlvbgorLy8gICAgIGFuZCB0aGUgY29udGV4dCBvZiBBbm90aGVyU2VjdGlvbiBzZWVtIHRoZSBzYW1lLCB0aGF0J3MgZmluZSBsZWF2ZSBpdAorLy8gICAgIHVzaW5nIHRoYXQgdHJhbnNsYXRpb24sIGJ1dCBpZiB0aGlzIHNlY3Rpb24gbmVlZHMgYSBkaWZmZXJlbnQgdHJhbnNsYXRpb24sIAorLy8gICAgIHlvdSBjYW4gcHJvdmlkZSBpdCBieSByZXBsYWNpbmcgdGhlIGxpbmsgKDw8QW5vdGhlclNlY3Rpb24+Pikgd2l0aCB0aGF0CisvLyAgICAgbmV3IHRyYW5zbGF0aW9uLiAgRm9yIGV4YW1wbGUgLSBhICJUYWJsZSIgaW4gc2F5ICJEYXRhUGx1Z2luIiBpcyAKKy8vICAgICBwZXJoYXBzIHRyYW5zbGF0ZWQgZGlmZmVyZW50bHkgdG8gIlRhYmxlIiBpbiAiRnVybml0dXJlUGx1Z2luIi4KKy8vCisvLyBURVNUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IHBsYWNlIHlvdXIgdHJhbnNsYXRpb24gZmlsZSBvbiB5b3VyIHdlYnNlcnZlciBzb21ld2hlcmUgZm9yIGV4YW1wbGUKKy8vCisvLyAgIC94aW5oYS9sYW5nL21lcmdlZC9sdi5qcworLy8KKy8vIGFuZCB0aGVuIHRlbGwgWGluaGEgd2hlcmUgdG8gZ2V0IGl0IChiZWZvcmUgbG9hZGluZyBYaW5oYUNvcmUuanMpIGJ5IAorLy8KKy8vICBfZWRpdG9yX2xhbmcgICAgICAgICAgICAgID0gJ2x2JzsKKy8vICBfZWRpdG9yX2xhbmdfbWVyZ2VkX2ZpbGUgID0gJy94aW5oYS9sYW5nL21lcmdlZC9sdi5qcyc7CisvLworLy8gWGluaGEgd2lsbCBsb2FkIHlvdXIgbmV3IGxhbmd1YWdlIGRlZmluaXRpb24uCisvLworLy8gU1VCTUlUVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBjcmVhdGUgYSBUaWNrZXQgb24gdGhlIFhpbmhhIHdlYnNpdGUgYW5kIGF0dGFjaCB5b3VyIHRyYW5zbGF0aW9uIAorLy8gZmlsZS4KKy8vCisvLyBUaGUgWGluaGEgZGV2ZWxvcGVycyB3aWxsIHRha2UgeW91ciBmaWxlIGFuZCB1c2UgdGhlIAorLy8gICAgIGNvbnRyaWIvbGNfc3BsaXRfbWVyZ2VkX2ZpbGUucGhwCisvLyBzY3JpcHQgdG8gbG9hZCBpdCBpbnRvIHRoZSBYaW5oYSBkaXN0cmlidXRpb24uCisKK3sKKyAgICAiQWJicmV2aWF0aW9uIjogeworICAgICAgICAiQ2FuY2VsIjogIkF0Y2VsdCIsCisgICAgICAgICJPSyI6ICJMYWJpIgorICAgIH0sCisgICAgIkFib3V0Qm94IjogeworICAgICAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiUGFyIMOwbyByZWRpw6zDp3TDomp1IgorICAgIH0sCisgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdGNlbHQiCisgICAgfSwKKyAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICJPSyI6ICJMYWJpIgorICAgIH0sCisgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiSXpsw65kemluw6J0IGNlbnRyw6IiLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIkl6bMOuZHppbsOidCBwYSB2aXN1IGxhcHUiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIkl6bMOuZHppbsOidCBwYSBrcmVpc2kiLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICJJemzDrmR6aW7DonQgcGEgbGFiaSIKKyAgICB9LAorICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAiQ2FuY2VsIjogIkF0Y2VsdCIsCisgICAgICAgICJPSyI6ICJMYWJpIgorICAgIH0sCisgICAgIkVkaXRUYWciOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXRjZWx0IiwKKyAgICAgICAgIk9LIjogIkxhYmkiCisgICAgfSwKKyAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXRjZWx0IiwKKyAgICAgICAgIk9LIjogIkxhYmkiCisgICAgfSwKKyAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdGNlbHQiLAorICAgICAgICAiT0siOiAiTGFiaSIKKyAgICB9LAorICAgICJGb3JtcyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdGNlbHQiLAorICAgICAgICAiT0siOiAiTGFiaSIKKyAgICB9LAorICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdGNlbHQiLAorICAgICAgICAiT0siOiAiTGFiaSIKKyAgICB9LAorICAgICJIb3Jpem9udGFsUnVsZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdGNlbHQiLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIkhvcml6b250w6JsYSBhdGRhbMOudMOianN2w650cmEiLAorICAgICAgICAiT0siOiAiTGFiaSIKKyAgICB9LAorICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXRjZWx0IiwKKyAgICAgICAgIk9LIjogIkxhYmkiCisgICAgfSwKKyAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAiQ2FuY2VsIjogIkF0Y2VsdCIsCisgICAgICAgICJPSyI6ICJMYWJpIgorICAgIH0sCisgICAgIkluc2VydEltYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIkF0Y2VsdCIsCisgICAgICAgICJPSyI6ICJMYWJpIgorICAgIH0sCisgICAgIkluc2VydE1hcnF1ZWUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXRjZWx0IiwKKyAgICAgICAgIk9LIjogIkxhYmkiCisgICAgfSwKKyAgICAiSW5zZXJ0Tm90ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdGNlbHQiCisgICAgfSwKKyAgICAiSW5zZXJ0UGljdHVyZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdGNlbHQiLAorICAgICAgICAiT0siOiAiTGFiaSIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0IjogeworICAgICAgICAiQ2FuY2VsIjogIkF0Y2VsdCIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdGNlbHQiCisgICAgfSwKKyAgICAiSW5zZXJ0VGFibGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXRjZWx0IiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICJJZXZpZXRvdCB0YWJ1bHUiLAorICAgICAgICAiT0siOiAiTGFiaSIKKyAgICB9LAorICAgICJMaW5rZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXRjZWx0IiwKKyAgICAgICAgIk9LIjogIkxhYmkiCisgICAgfSwKKyAgICAiTm90ZVNlcnZlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdGNlbHQiLAorICAgICAgICAiT0siOiAiTGFiaSIKKyAgICB9LAorICAgICJQU0xvY2FsIjogeworICAgICAgICAiQ2FuY2VsIjogIkF0Y2VsdCIKKyAgICB9LAorICAgICJQYXN0ZVRleHQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXRjZWx0IiwKKyAgICAgICAgIk9LIjogIkxhYmkiCisgICAgfSwKKyAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXRjZWx0IgorICAgIH0sCisgICAgIlF1aWNrVGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIkF0Y2VsdCIKKyAgICB9LAorICAgICJTZXRJZCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdGNlbHQiLAorICAgICAgICAiT0siOiAiTGFiaSIKKyAgICB9LAorICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICJPSyI6ICJMYWJpIgorICAgIH0sCisgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdGNlbHQiLAorICAgICAgICAiT0siOiAiTGFiaSIKKyAgICB9LAorICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAiQ2FuY2VsIjogIkF0Y2VsdCIsCisgICAgICAgICJPSyI6ICJMYWJpIgorICAgIH0sCisgICAgIlRhYmxlT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdGNlbHQiLAorICAgICAgICAiT0siOiAiTGFiaSIKKyAgICB9LAorICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdGNlbHQiCisgICAgfSwKKyAgICAiVW5Gb3JtYXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXRjZWx0IiwKKyAgICAgICAgIk9LIjogIkxhYmkiCisgICAgfSwKKyAgICAiWGluaGEiOiB7CisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJQYXIgw7BvIHJlZGnDrMOndMOianUiLAorICAgICAgICAiQmFja2dyb3VuZCBDb2xvciI6ICJGb25hIGtyw6JzYSIsCisgICAgICAgICJCb2xkIjogIlRyZWtuaWVtIGJ1cnRpZW0iLAorICAgICAgICAiQnVsbGV0ZWQgTGlzdCI6ICJTYXJha3N0cyIsCisgICAgICAgICJDb3B5IHNlbGVjdGlvbiI6ICJLb3DDp3QgaWV6w65tw6d0byIsCisgICAgICAgICJDdXJyZW50IHN0eWxlIjogIlBhdHJlaXrDp2phaXMgc3RpbHMiLAorICAgICAgICAiQ3V0IHNlbGVjdGlvbiI6ICJJemdyaWV6dCBpZXrDrm3Dp3RvIiwKKyAgICAgICAgIkRlY3JlYXNlIEluZGVudCI6ICJTYW1hemluw6J0IGF0a8OicGkiLAorICAgICAgICAiRm9udCBDb2xvciI6ICJCdXJ0dSBrcsOic2EiLAorICAgICAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiUmVkacOsw6d0w6JqYSBwYWzDrmdzIiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICJIb3Jpem9udMOibGEgYXRkYWzDrnTDompzdsOudHJhIiwKKyAgICAgICAgIkluY3JlYXNlIEluZGVudCI6ICJQYWxpZWxpbsOidCBhdGvDonBpIiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICJJZXZpZXRvdCB0YWJ1bHUiLAorICAgICAgICAiSW5zZXJ0IFdlYiBMaW5rIjogIklldmlldG90IGhpcGVyc2FpdGkiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJZXZpZXRvdCBhdHTDp2x1IiwKKyAgICAgICAgIkl0YWxpYyI6ICJLdXJzw652w6IiLAorICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiSXpsw65kemluw6J0IGNlbnRyw6IiLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIkl6bMOuZHppbsOidCBwYSB2aXN1IGxhcHUiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIkl6bMOuZHppbsOidCBwYSBrcmVpc2kiLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICJJemzDrmR6aW7DonQgcGEgbGFiaSIsCisgICAgICAgICJPcmRlcmVkIExpc3QiOiAiTnVtdXLDp3RzIHNhcmFrc3RzIiwKKyAgICAgICAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIklldmlldG90IGllesOubcOndG8iLAorICAgICAgICAiUGF0aCI6ICJDZcOvw7AiLAorICAgICAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiQXRrw6JydG90IHDDp2TDp2pvIGRhcmLDrmJ1IiwKKyAgICAgICAgIlN0cmlrZXRocm91Z2giOiAiUMOicnN2w650cm90cyIsCisgICAgICAgICJTdWJzY3JpcHQiOiAiTm92aWV0b3QgemVtIHJpbmRhcyIsCisgICAgICAgICJTdXBlcnNjcmlwdCI6ICJOb3ZpZXRvdCB2aXJzIHJpbmRhcyIsCisgICAgICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiU2thdMOudCBIVE1MIGtvZHUiLAorICAgICAgICAiVW5kZXJsaW5lIjogIlBhc3bDrnRyb3RzIiwKKyAgICAgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkF0Y2VsdCBww6dkw6dqbyBkYXJiw65idSIsCisgICAgICAgICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiSsO7cyBwYXRsYWJhbiBkYXJib2phdGllcyBURUtTVEEgUkXDnsOOTcOCLiBMYWkgcMOicmlldHUgYXRwYWthw68gdXogR1JBRklTS08gUkXDnsOOTVUgKFdZU0lXSUcpLCBsaWV0b2ppZXQgWzw+XSBwb2d1LiIKKyAgICB9LAorICAgICJfX05FV19UUkFOU0xBVElPTlNfXyI6IHsKKyAgICAgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgICAgICJBYmJyZXZpYXRpb24iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiIiwKKyAgICAgICAgICAgICJFeHBhbnNpb246IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkFib3V0Qm94IjogeworICAgICAgICAgICAgIkNsb3NlIjogIjw8WGluaGE+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJDb3VudGVyIjogeworICAgICAgICAgICAgIi4uLiBpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIkNoYXJzIjogIiIsCisgICAgICAgICAgICAiSFRNTCI6ICIiLAorICAgICAgICAgICAgIldvcmRzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJhY3Rlck1hcCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgc3BlY2lhbCBjaGFyYWN0ZXIiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICAgICAiQ2xpY2sgYSBjb2xvci4uLiI6ICIiLAorICAgICAgICAgICAgIkNvbG9yOiAiOiAiIiwKKyAgICAgICAgICAgICJTYW1wbGUiOiAiIiwKKyAgICAgICAgICAgICJXZWIgU2FmZTogIjogIiIsCisgICAgICAgICAgICAiQ2xvc2UiOiAiPDxYaW5oYT4+IgorICAgICAgICB9LAorICAgICAgICAiQ29udGV4dE1lbnUiOiB7CisgICAgICAgICAgICAiX0RlbGV0ZSBSb3ciOiAiIiwKKyAgICAgICAgICAgICJfSW1hZ2UgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIl9Nb2RpZnkgTGluay4uLiI6ICIiLAorICAgICAgICAgICAgIl9SZW1vdmUgTGluay4uLiI6ICIiLAorICAgICAgICAgICAgIl9UYWJsZSBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiQ19lbGwgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIkNoZWNfayBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiQ29weSI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBhIGxpbmsiOiAiIiwKKyAgICAgICAgICAgICJDdXJyZW50IFVSTCBpcyI6ICIiLAorICAgICAgICAgICAgIkN1dCI6ICIiLAorICAgICAgICAgICAgIkRlX2xldGUgQ29sdW1uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIENlbGwiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgY29sdW1uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IHJvdyI6ICIiLAorICAgICAgICAgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIiIsCisgICAgICAgICAgICAiSV9uc2VydCBSb3cgQmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5fc2VydCBSb3cgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgX0NvbHVtbiBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ19vbHVtbiBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDZWxsIEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiTGluayBwb2ludHMgdG86IjogIiIsCisgICAgICAgICAgICAiTWFrZSBsaW5fay4uLiI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIiIsCisgICAgICAgICAgICAiT3BlbnMgdGhpcyBsaW5rIGluIGEgbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlBhc3RlIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBlbGVtZW50OiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gdW5saW5rIHRoaXMgZWxlbWVudC4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgdGhlICRlbGVtIEVsZW1lbnQuLi4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgdGhpcyBub2RlIGZyb20gdGhlIGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUm9fdyBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgaW1hZ2UgcHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBDZWxsIFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgVGFibGUgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBSb3cgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJVbmxpbmsgdGhlIGN1cnJlbnQgZWxlbWVudCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICIiLAorICAgICAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiIiwKKyAgICAgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIiIsCisgICAgICAgICAgICAiT3RoZXIiOiAiIiwKKyAgICAgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiIiwKKyAgICAgICAgICAgICJUYXJnZXQ6IjogIiIsCisgICAgICAgICAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICIiLAorICAgICAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiIiwKKyAgICAgICAgICAgICJVUkw6IjogIiIsCisgICAgICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRlZmluaXRpb25MaXN0IjogeworICAgICAgICAgICAgImRlZmluaXRpb24gZGVzY3JpcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGxpc3QiOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIHRlcm0iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRGlhbG9ncyI6IHsKKyAgICAgICAgICAgICJTb21lIFRleHQgSGVyZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEeW5hbWljQ1NTIjogeworICAgICAgICAgICAgIkNob29zZSBzdHlsZXNoZWV0IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCI6ICIiLAorICAgICAgICAgICAgIlVuZGVmaW5lZCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFZGl0VGFnIjogeworICAgICAgICAgICAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICIiLAorICAgICAgICAgICAgIkVkaXQgVGFnIEJ5IFBlZyI6ICIiLAorICAgICAgICAgICAgIlRhZyBFZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICAgICAiIT0iOiAiIiwKKyAgICAgICAgICAgICIhaW4iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7LSI6ICIiLAorICAgICAgICAgICAgIiZndDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSZndDsiOiAiIiwKKyAgICAgICAgICAgICImbHQ7eCZndDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYCFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgLmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAwYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDJgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgM2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA0YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA3YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDhgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGBlYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsmbmJzcDtgMWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YCt7Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2AtOlxcIGAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLXs6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YENgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGNvc2AiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgbG5gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHBpYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgc2luYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0YW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRpbWVzYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZxdW90O3RleHQmcXVvdDsiOiAiIiwKKyAgICAgICAgICAgICInK2Zvcm11bGErJyI6ICIiLAorICAgICAgICAgICAgIigobiksKGspKSI6ICIiLAorICAgICAgICAgICAgIih4KzEpLyh4LTEpIjogIiIsCisgICAgICAgICAgICAiKiI6ICIiLAorICAgICAgICAgICAgIioqIjogIiIsCisgICAgICAgICAgICAiKy0iOiAiIiwKKyAgICAgICAgICAgICItJmd0OyI6ICIiLAorICAgICAgICAgICAgIi0mbHQ7IjogIiIsCisgICAgICAgICAgICAiLToiOiAiIiwKKyAgICAgICAgICAgICItPSI6ICIiLAorICAgICAgICAgICAgIi8vIjogIiIsCisgICAgICAgICAgICAiL18iOiAiIiwKKyAgICAgICAgICAgICI6LiI6ICIiLAorICAgICAgICAgICAgIj0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiQCI6ICIiLAorICAgICAgICAgICAgIltbYSxiXSxbYyxkXV0iOiAiIiwKKyAgICAgICAgICAgICJcXFxcIjogIiIsCisgICAgICAgICAgICAiXFxuQ2xpY2sgaW4gdGhlIGJveCB0byB1c2UgeW91ciBrZXlib2FyZCBvciB1c2UgdGhlIGJ1dHRvbnNcXG4iOiAiIiwKKyAgICAgICAgICAgICJeXiI6ICIiLAorICAgICAgICAgICAgIl5eXiI6ICIiLAorICAgICAgICAgICAgIl9ffCI6ICIiLAorICAgICAgICAgICAgIl98XyI6ICIiLAorICAgICAgICAgICAgImAhPWAiOiAiIiwKKyAgICAgICAgICAgICJgIWluYCI6ICIiLAorICAgICAgICAgICAgImAmYW5kO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmNhcDtgIjogIiIsCisgICAgICAgICAgICAiYCZjdXA7YCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7LWAiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDt4Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJm9yO2AiOiAiIiwKKyAgICAgICAgICAgICJgJnF1b3Q7dGV4dCZxdW90O2AiOiAiIiwKKyAgICAgICAgICAgICJgKChuKSwoaykpYCI6ICIiLAorICAgICAgICAgICAgImAoeCsxKS8oeC0xKWAiOiAiIiwKKyAgICAgICAgICAgICJgKipgIjogIiIsCisgICAgICAgICAgICAiYCpgIjogIiIsCisgICAgICAgICAgICAiYCstYCI6ICIiLAorICAgICAgICAgICAgImAtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLSZsdDtgIjogIiIsCisgICAgICAgICAgICAiYC06YCI6ICIiLAorICAgICAgICAgICAgImAtPWAiOiAiIiwKKyAgICAgICAgICAgICJgLy9gIjogIiIsCisgICAgICAgICAgICAiYC9fYCI6ICIiLAorICAgICAgICAgICAgImA6LmAiOiAiIiwKKyAgICAgICAgICAgICJgPSZndDtgIjogIiIsCisgICAgICAgICAgICAiYEBgIjogIiIsCisgICAgICAgICAgICAiYFtbYSxiXSxbYyxkXV1gIjogIiIsCisgICAgICAgICAgICAiYFxcXFxgIjogIiIsCisgICAgICAgICAgICAiYF9ffGAiOiAiIiwKKyAgICAgICAgICAgICJgX3xfYCI6ICIiLAorICAgICAgICAgICAgImBBQWAiOiAiIiwKKyAgICAgICAgICAgICJgYWxlcGhgIjogIiIsCisgICAgICAgICAgICAiYGFscGhhYCI6ICIiLAorICAgICAgICAgICAgImBhbmRgIjogIiIsCisgICAgICAgICAgICAiYGJhcmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgQ0NgIjogIiIsCisgICAgICAgICAgICAiYGNjYWAiOiAiIiwKKyAgICAgICAgICAgICJgY2hpYCI6ICIiLAorICAgICAgICAgICAgImBkYXJyYCI6ICIiLAorICAgICAgICAgICAgImBkZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsYCI6ICIiLAorICAgICAgICAgICAgImBEZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRpYW1vbmRgIjogIiIsCisgICAgICAgICAgICAiYGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGR5L2R4YCI6ICIiLAorICAgICAgICAgICAgImBFRWAiOiAiIiwKKyAgICAgICAgICAgICJgZXBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgZXRhYCI6ICIiLAorICAgICAgICAgICAgImBmcmFgIjogIiIsCisgICAgICAgICAgICAiYEdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBnYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ3JhZGAiOiAiIiwKKyAgICAgICAgICAgICJgaGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaGF0YWAiOiAiIiwKKyAgICAgICAgICAgICJgaWZgIjogIiIsCisgICAgICAgICAgICAiYGluYCI6ICIiLAorICAgICAgICAgICAgImBpbnRgIjogIiIsCisgICAgICAgICAgICAiYGlvdGFgIjogIiIsCisgICAgICAgICAgICAiYGthcHBhYCI6ICIiLAorICAgICAgICAgICAgImBMYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYGxhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGltXyh4LSZndDtvbylgIjogIiIsCisgICAgICAgICAgICAiYGxvZ2AiOiAiIiwKKyAgICAgICAgICAgICJgbXVgIjogIiIsCisgICAgICAgICAgICAiYE5OYCI6ICIiLAorICAgICAgICAgICAgImBubmAiOiAiIiwKKyAgICAgICAgICAgICJgbm90YCI6ICIiLAorICAgICAgICAgICAgImBudWAiOiAiIiwKKyAgICAgICAgICAgICJgbytgIjogIiIsCisgICAgICAgICAgICAiYG8uYCI6ICIiLAorICAgICAgICAgICAgImBPL2AiOiAiIiwKKyAgICAgICAgICAgICJgb2ludGAiOiAiIiwKKyAgICAgICAgICAgICJgb21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYE9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBvb2AiOiAiIiwKKyAgICAgICAgICAgICJgb3JgIjogIiIsCisgICAgICAgICAgICAiYG94YCI6ICIiLAorICAgICAgICAgICAgImBwaGlgIjogIiIsCisgICAgICAgICAgICAiYFBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGlgIjogIiIsCisgICAgICAgICAgICAiYHBpYCI6ICIiLAorICAgICAgICAgICAgImBwcm9kYCI6ICIiLAorICAgICAgICAgICAgImBwcm9wYCI6ICIiLAorICAgICAgICAgICAgImBQc2lgIjogIiIsCisgICAgICAgICAgICAiYHBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgUVFgIjogIiIsCisgICAgICAgICAgICAiYHF1YWRgIjogIiIsCisgICAgICAgICAgICAiYHJBcnJgIjogIiIsCisgICAgICAgICAgICAiYHJob2AiOiAiIiwKKyAgICAgICAgICAgICJgcm9vdChuKSh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgUlJgIjogIiIsCisgICAgICAgICAgICAiYHNmYWAiOiAiIiwKKyAgICAgICAgICAgICJgU2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYHNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzcXJ0KHgpYCI6ICIiLAorICAgICAgICAgICAgImBzcXVhcmVgIjogIiIsCisgICAgICAgICAgICAiYHN0YWNrcmVsKC0mZ3Q7KSgrKWAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViYCI6ICIiLAorICAgICAgICAgICAgImBzdWJlYCI6ICIiLAorICAgICAgICAgICAgImBzdW1gIjogIiIsCisgICAgICAgICAgICAiYHN1cGAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwZWAiOiAiIiwKKyAgICAgICAgICAgICJgdGF1YCI6ICIiLAorICAgICAgICAgICAgImBUaGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdGhldGFgIjogIiIsCisgICAgICAgICAgICAiYFRUYCI6ICIiLAorICAgICAgICAgICAgImB0dGFgIjogIiIsCisgICAgICAgICAgICAiYHVhcnJgIjogIiIsCisgICAgICAgICAgICAiYHVsYWAiOiAiIiwKKyAgICAgICAgICAgICJgdXBzaWxvbmAiOiAiIiwKKyAgICAgICAgICAgICJgdXVgIjogIiIsCisgICAgICAgICAgICAiYHZlY2FgIjogIiIsCisgICAgICAgICAgICAiYHZ2YCI6ICIiLAorICAgICAgICAgICAgImB4XyhtbilgIjogIiIsCisgICAgICAgICAgICAiYFhpYCI6ICIiLAorICAgICAgICAgICAgImB4aWAiOiAiIiwKKyAgICAgICAgICAgICJgeHhgIjogIiIsCisgICAgICAgICAgICAiYHpldGFgIjogIiIsCisgICAgICAgICAgICAiYFpaYCI6ICIiLAorICAgICAgICAgICAgImB8LSZndDtgIjogIiIsCisgICAgICAgICAgICAiYHwtLWAiOiAiIiwKKyAgICAgICAgICAgICJgfD09YCI6ICIiLAorICAgICAgICAgICAgImB8X19gIjogIiIsCisgICAgICAgICAgICAiYHx+YCI6ICIiLAorICAgICAgICAgICAgImB+PWAiOiAiIiwKKyAgICAgICAgICAgICJgfnxgIjogIiIsCisgICAgICAgICAgICAiYH5+YCI6ICIiLAorICAgICAgICAgICAgIkFBIjogIiIsCisgICAgICAgICAgICAiYWxlcGgiOiAiIiwKKyAgICAgICAgICAgICJhbHBoYSI6ICIiLAorICAgICAgICAgICAgImFuZCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aCBGb3JtdWxhIElucHV0IjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoTUwgRXhhbXBsZSI6ICIiLAorICAgICAgICAgICAgImJhcmEiOiAiIiwKKyAgICAgICAgICAgICJCYXNlZCBvbiBBU0NJSU1hdGhNTCBieSI6ICIiLAorICAgICAgICAgICAgImJiYSI6ICIiLAorICAgICAgICAgICAgImJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiZXRhIjogIiIsCisgICAgICAgICAgICAiQ0MiOiAiIiwKKyAgICAgICAgICAgICJjY2EiOiAiIiwKKyAgICAgICAgICAgICJjaGkiOiAiIiwKKyAgICAgICAgICAgICJkYXJyIjogIiIsCisgICAgICAgICAgICAiZGRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkZWwiOiAiIiwKKyAgICAgICAgICAgICJkZWx0YSI6ICIiLAorICAgICAgICAgICAgIkRlbHRhIjogIiIsCisgICAgICAgICAgICAiZGlhbW9uZCI6ICIiLAorICAgICAgICAgICAgImRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkeS9keCI6ICIiLAorICAgICAgICAgICAgIkVFIjogIiIsCisgICAgICAgICAgICAiZXBzaSI6ICIiLAorICAgICAgICAgICAgImV0YSI6ICIiLAorICAgICAgICAgICAgIkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFzY2lpTWF0aE1MIHZpc2l0IHRoaXMgcGFnZToiOiAiIiwKKyAgICAgICAgICAgICJGb3JtdWxhIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgImZyYSI6ICIiLAorICAgICAgICAgICAgImdhbW1hIjogIiIsCisgICAgICAgICAgICAiR2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJncmFkIjogIiIsCisgICAgICAgICAgICAiaEFyciI6ICIiLAorICAgICAgICAgICAgImhhcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXRhIjogIiIsCisgICAgICAgICAgICAiaWYiOiAiIiwKKyAgICAgICAgICAgICJpbiI6ICIiLAorICAgICAgICAgICAgIklucHV0IjogIiIsCisgICAgICAgICAgICAiaW50IjogIiIsCisgICAgICAgICAgICAiaW50X2FeYmYoeClkeCI6ICIiLAorICAgICAgICAgICAgImlvdGEiOiAiIiwKKyAgICAgICAgICAgICJrYXBwYSI6ICIiLAorICAgICAgICAgICAgIkxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhcnIiOiAiIiwKKyAgICAgICAgICAgICJsQXJyIjogIiIsCisgICAgICAgICAgICAibGltXyh4LSZndDtvbykiOiAiIiwKKyAgICAgICAgICAgICJtdSI6ICIiLAorICAgICAgICAgICAgIk5OIjogIiIsCisgICAgICAgICAgICAibm4iOiAiIiwKKyAgICAgICAgICAgICJubm4iOiAiIiwKKyAgICAgICAgICAgICJub3QiOiAiIiwKKyAgICAgICAgICAgICJudSI6ICIiLAorICAgICAgICAgICAgIm8rIjogIiIsCisgICAgICAgICAgICAiby4iOiAiIiwKKyAgICAgICAgICAgICJPLyI6ICIiLAorICAgICAgICAgICAgIm9pbnQiOiAiIiwKKyAgICAgICAgICAgICJPbWVnYSI6ICIiLAorICAgICAgICAgICAgIm9tZWdhIjogIiIsCisgICAgICAgICAgICAib28iOiAiIiwKKyAgICAgICAgICAgICJvciI6ICIiLAorICAgICAgICAgICAgIm94IjogIiIsCisgICAgICAgICAgICAicGhpIjogIiIsCisgICAgICAgICAgICAiUGhpIjogIiIsCisgICAgICAgICAgICAicGkiOiAiIiwKKyAgICAgICAgICAgICJQaSI6ICIiLAorICAgICAgICAgICAgIlByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJwcm9kIjogIiIsCisgICAgICAgICAgICAicHJvcCI6ICIiLAorICAgICAgICAgICAgInBzaSI6ICIiLAorICAgICAgICAgICAgIlBzaSI6ICIiLAorICAgICAgICAgICAgIlFRIjogIiIsCisgICAgICAgICAgICAicXVhZCI6ICIiLAorICAgICAgICAgICAgInJBcnIiOiAiIiwKKyAgICAgICAgICAgICJyaG8iOiAiIiwKKyAgICAgICAgICAgICJyb290KG4pKHgpIjogIiIsCisgICAgICAgICAgICAiUlIiOiAiIiwKKyAgICAgICAgICAgICJzZmEiOiAiIiwKKyAgICAgICAgICAgICJzaWdtYSI6ICIiLAorICAgICAgICAgICAgIlNpZ21hIjogIiIsCisgICAgICAgICAgICAic3FydCh4KSI6ICIiLAorICAgICAgICAgICAgInNxdWFyZSI6ICIiLAorICAgICAgICAgICAgInN0YWNrcmVsKC0mZ3Q7KSgrKSI6ICIiLAorICAgICAgICAgICAgInN1YiI6ICIiLAorICAgICAgICAgICAgInN1YmUiOiAiIiwKKyAgICAgICAgICAgICJzdW0iOiAiIiwKKyAgICAgICAgICAgICJzdW1fKG49MSleb28iOiAiIiwKKyAgICAgICAgICAgICJzdXAiOiAiIiwKKyAgICAgICAgICAgICJzdXBlIjogIiIsCisgICAgICAgICAgICAidGF1IjogIiIsCisgICAgICAgICAgICAiVGhldGEiOiAiIiwKKyAgICAgICAgICAgICJ0aGV0YSI6ICIiLAorICAgICAgICAgICAgIlRUIjogIiIsCisgICAgICAgICAgICAidHRhIjogIiIsCisgICAgICAgICAgICAidWFyciI6ICIiLAorICAgICAgICAgICAgInVsYSI6ICIiLAorICAgICAgICAgICAgInVwc2lsb24iOiAiIiwKKyAgICAgICAgICAgICJ1dSI6ICIiLAorICAgICAgICAgICAgInV1dSI6ICIiLAorICAgICAgICAgICAgInZlY2EiOiAiIiwKKyAgICAgICAgICAgICJ2diI6ICIiLAorICAgICAgICAgICAgInZ2diI6ICIiLAorICAgICAgICAgICAgInheKG0rbikiOiAiIiwKKyAgICAgICAgICAgICJ4XyhtbikiOiAiIiwKKyAgICAgICAgICAgICJYaSI6ICIiLAorICAgICAgICAgICAgInhpIjogIiIsCisgICAgICAgICAgICAieHgiOiAiIiwKKyAgICAgICAgICAgICJ6ZXRhIjogIiIsCisgICAgICAgICAgICAiWloiOiAiIiwKKyAgICAgICAgICAgICJ8LSZndDsiOiAiIiwKKyAgICAgICAgICAgICJ8LS0iOiAiIiwKKyAgICAgICAgICAgICJ8PT0iOiAiIiwKKyAgICAgICAgICAgICJ8X18iOiAiIiwKKyAgICAgICAgICAgICJ8fiI6ICIiLAorICAgICAgICAgICAgIn49IjogIiIsCisgICAgICAgICAgICAifnwiOiAiIiwKKyAgICAgICAgICAgICJ+fiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGYW5jeVNlbGVjdHMiOiB7CisgICAgICAgICAgICAiJytvcHQudGV4dCsnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbmRSZXBsYWNlIjogeworICAgICAgICAgICAgIic7XHJcbiAgdmFyIHRhZ2MgPSAnIjogIiIsCisgICAgICAgICAgICAiQ2FzZSBzZW5zaXRpdmUgc2VhcmNoIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIiOiAiIiwKKyAgICAgICAgICAgICJEb25lIjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIHRleHQgeW91IHdhbnQgdG8gZmluZCI6ICIiLAorICAgICAgICAgICAgIkZpbmQgYW5kIFJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJmb3VuZCBpdGVtIjogIiIsCisgICAgICAgICAgICAiZm91bmQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJIaWdobGlnaHQiOiAiIiwKKyAgICAgICAgICAgICJJbmZvcm0gYSByZXBsYWNlbWVudCB3b3JkIjogIiIsCisgICAgICAgICAgICAiTmV4dCI6ICIiLAorICAgICAgICAgICAgIm5vdCBmb3VuZCI6ICIiLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIHdpdGg6IjogIiIsCisgICAgICAgICAgICAicmVwbGFjZWQgaXRlbSI6ICIiLAorICAgICAgICAgICAgInJlcGxhY2VkIGl0ZW1zIjogIiIsCisgICAgICAgICAgICAiU2VhcmNoIGZvcjoiOiAiIiwKKyAgICAgICAgICAgICJTdWJzdGl0dXRlIGFsbCBvY2N1cnJlbmNlcyI6ICIiLAorICAgICAgICAgICAgIlN1YnN0aXR1dGUgdGhpcyBvY2N1cnJlbmNlPyI6ICIiLAorICAgICAgICAgICAgIlVuZG8iOiAiIiwKKyAgICAgICAgICAgICJXaG9sZSB3b3JkcyBvbmx5IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1PcGVyYXRpb25zIjogeworICAgICAgICAgICAgIkVudGVyIHRoZSBuYW1lIGZvciBuZXcgb3B0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgY2hlY2sgYm94LiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIEZvcm0uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbXVsdGktbGluZSB0ZXh0IGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHJhZGlvIGJ1dHRvbi4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzZWxlY3QgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgc3VibWl0L3Jlc2V0IGJ1dHRvbi4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSB0ZXh0LCBwYXNzd29yZCBvciBoaWRkZW4gZmllbGQuIjogIiIsCisgICAgICAgICAgICAiTWVzc2FnZSBTZW50IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIFNlbGVjdC4uLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGb3JtcyI6IHsKKyAgICAgICAgICAgICInb25DbGljayc9IjogIiIsCisgICAgICAgICAgICAiQWNjZXNzIEtleToiOiAiIiwKKyAgICAgICAgICAgICJBY3Rpb24gVVJMOiI6ICIiLAorICAgICAgICAgICAgIkJ1dHRvbiBTY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJDaGVja2VkIjogIiIsCisgICAgICAgICAgICAiQ29sdW1uczoiOiAiIiwKKyAgICAgICAgICAgICJEZWZhdWx0IHRleHQgKG9wdGlvbmFsKSI6ICIiLAorICAgICAgICAgICAgIkRpbWVuc2lvbnMiOiAiIiwKKyAgICAgICAgICAgICJEaXNhYmxlZCI6ICIiLAorICAgICAgICAgICAgIkVuY29kaW5nOiI6ICIiLAorICAgICAgICAgICAgIkZvciBDb250cm9sOiI6ICIiLAorICAgICAgICAgICAgIkZvcm0iOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IEZJRUxEU0VUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBJTlBVVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IFNFTEVDVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogVEVYVEFSRUEiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIGhhbmRsZXIgc2NyaXB0IjogIiIsCisgICAgICAgICAgICAiRm9ybSBOYW1lOiI6ICIiLAorICAgICAgICAgICAgIkdldCI6ICIiLAorICAgICAgICAgICAgIkhhcmQiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQgaW4gbnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJIVE1MLUZvcm0gdG8gQ0dJIChkZWZhdWx0KSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIHNvdXJjZSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIFVSTDoiOiAiIiwKKyAgICAgICAgICAgICJJbml0aWFsIFRleHQ6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBGSUVMRFNFVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBJTlBVVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBTRUxFQ1QiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgVEVYVEFSRUEiOiAiIiwKKyAgICAgICAgICAgICJKYXZhc2NyaXB0IGZvciBidXR0b24gY2xpY2siOiAiIiwKKyAgICAgICAgICAgICJMYWJlbDoiOiAiIiwKKyAgICAgICAgICAgICJMZWdlbmQ6IjogIiIsCisgICAgICAgICAgICAiTWF4IGxlbmd0aDoiOiAiIiwKKyAgICAgICAgICAgICJNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjY2VwdGVkIjogIiIsCisgICAgICAgICAgICAiTWV0aG9kOiI6ICIiLAorICAgICAgICAgICAgIm11bHRpcGFydCBGb3JtIERhdGEgKEZpbGUtVXBsb2FkKSI6ICIiLAorICAgICAgICAgICAgIk5hbWUiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJuYW1lIG9mIHRoZSB0ZXh0YXJlYSI6ICIiLAorICAgICAgICAgICAgIk5hbWUvSUQ6IjogIiIsCisgICAgICAgICAgICAibm9ybWFsIjogIiIsCisgICAgICAgICAgICAibm93cmFwIjogIiIsCisgICAgICAgICAgICAiT2ZmIjogIiIsCisgICAgICAgICAgICAiUGh5c2ljYWwiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgYSBMYWJlbCI6ICIiLAorICAgICAgICAgICAgIlBvc3QiOiAiIiwKKyAgICAgICAgICAgICJwcmUiOiAiIiwKKyAgICAgICAgICAgICJSZWFkIE9ubHkiOiAiIiwKKyAgICAgICAgICAgICJSb3dzOiI6ICIiLAorICAgICAgICAgICAgIlNpemUgb2YgdGV4dCBib3ggaW4gY2hhcmFjdGVycyI6ICIiLAorICAgICAgICAgICAgIlNpemU6IjogIiIsCisgICAgICAgICAgICAiU29mdCI6ICIiLAorICAgICAgICAgICAgIlRhYiBJbmRleDoiOiAiIiwKKyAgICAgICAgICAgICJUYXJnZXQgRnJhbWU6IjogIiIsCisgICAgICAgICAgICAiVGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJVUkwgb2YgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICAgICAgICAgIlZhbHVlOiI6ICIiLAorICAgICAgICAgICAgIlZpcnR1YWwiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aCBpbiBudW1iZXIgb2YgY2hhcmFjdGVycyI6ICIiLAorICAgICAgICAgICAgIldyYXAgTW9kZToiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJPcHRpb25zIjogIjw8RmluZFJlcGxhY2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bGxQYWdlIjogeworICAgICAgICAgICAgIi4uLiI6ICIiLAorICAgICAgICAgICAgIkFsdGVybmF0ZSBzdHlsZS1zaGVldDoiOiAiIiwKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kIGNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkNoYXJhY3RlciBzZXQ6IjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKElTTy04ODU5LTUpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKEtPSTgtUikiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoV0lORE9XUy0xMjUxKSI6ICIiLAorICAgICAgICAgICAgIkRlc2NyaXB0aW9uOiI6ICIiLAorICAgICAgICAgICAgIkRPQ1RZUEU6IjogIiIsCisgICAgICAgICAgICAiRG9jdW1lbnQgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIkRvY3VtZW50IHRpdGxlOiI6ICIiLAorICAgICAgICAgICAgIktleXdvcmRzOiI6ICIiLAorICAgICAgICAgICAgIlByaW1hcnkgc3R5bGUtc2hlZXQ6IjogIiIsCisgICAgICAgICAgICAiVGV4dCBjb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJVVEYtOCAocmVjb21tZW5kZWQpIjogIiIsCisgICAgICAgICAgICAid2VzdGVybiAoSVNPLTg4NTktMSkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRnVsbFNjcmVlbiI6IHsKKyAgICAgICAgICAgICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiR2Vja28iOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAgICAgIiYjeDAwZDc7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICIiLAorICAgICAgICAgICAgIkNlbnRlciI6ICIiLAorICAgICAgICAgICAgIkNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvZWRpdCBob3Jpem9udGFsIHJ1bGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBIb3Jpem9udGFsIFJ1bGUiOiAiIiwKKyAgICAgICAgICAgICJMYXlvdXQiOiAiIiwKKyAgICAgICAgICAgICJMZWZ0IjogIiIsCisgICAgICAgICAgICAiTm8gc2hhZGluZyI6ICIiLAorICAgICAgICAgICAgInBlcmNlbnQiOiAiIiwKKyAgICAgICAgICAgICJwaXhlbHMiOiAiIiwKKyAgICAgICAgICAgICJSaWdodCI6ICIiLAorICAgICAgICAgICAgIlN0eWxlIjogIiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIiOiAiIiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiIiwKKyAgICAgICAgICAgICJDaGFyIjogIiIsCisgICAgICAgICAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJDU1MgU3R5bGUiOiAiIiwKKyAgICAgICAgICAgICJGRyBDb2xvciI6ICIiLAorICAgICAgICAgICAgIkZsb2F0IjogIiIsCisgICAgICAgICAgICAiSnVzdGlmeSI6ICIiLAorICAgICAgICAgICAgIk1hcmdpbiI6ICIiLAorICAgICAgICAgICAgIk1pZGRsZSI6ICIiLAorICAgICAgICAgICAgIk5vbmUiOiAiIiwKKyAgICAgICAgICAgICJQYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiVGV4dCBhbGlnbiI6ICIiLAorICAgICAgICAgICAgIlRvcCI6ICIiLAorICAgICAgICAgICAgIlZlcnRpY2FsIGFsaWduIjogIiIsCisgICAgICAgICAgICAiLSI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIkNlbnRlciI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkhlaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkltYWdlIFVSTCI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkxheW91dCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJwZXJjZW50IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAicGl4ZWxzIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJXaWR0aCI6ICI8PEhvcml6b250YWxSdWxlPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRBbmNob3IiOiB7CisgICAgICAgICAgICAiQW5jaG9yIG5hbWUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQW5jaG9yIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiIiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICIiLAorICAgICAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbDoiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiIiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlNwYWNpbmciOiAiIiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIlZlcnRpY2FsOiI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiIiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkltYWdlIFVSTDoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJMYXlvdXQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlRvcCI6ICI8PElubGluZVN0eWxlcj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0Tm90ZSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgZm9vdG5vdGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgTm90ZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQYWdlYnJlYWsiOiB7CisgICAgICAgICAgICAiUGFnZSBicmVhayI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQnJlYWsiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U21pbGV5IjogeworICAgICAgICAgICAgIkluc2VydCBTbWlsZXkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgICAgICJcXG4gIFRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nXFxuIjogIiIsCisgICAgICAgICAgICAiSGlkZSBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICIiLAorICAgICAgICAgICAgIkxpbmsxIjogIiIsCisgICAgICAgICAgICAiTGluazIiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMyI6ICIiLAorICAgICAgICAgICAgIkxpbms0IjogIiIsCisgICAgICAgICAgICAiTGluazUiOiAiIiwKKyAgICAgICAgICAgICJTaG93IHByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZyI6ICIiLAorICAgICAgICAgICAgIlZhcmlhYmxlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAgICAgIkFsbCBDYXRlZ29yaWVzIjogIiIsCisgICAgICAgICAgICAiRmlsdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMgdGVtcGxhdGUgdmFyaWFibGUiOiAiIiwKKyAgICAgICAgICAgICJPbmx5IHNlYXJjaCB3b3JkIGJlZ2lubmluZyI6ICIiLAorICAgICAgICAgICAgIkhUTUwiOiAiPDxDaGFyQ291bnRlcj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgU25pcHBldCI6ICI8PEluc2VydFNuaXBwZXQ+PiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIlZhcmlhYmxlIjogIjw8SW5zZXJ0U25pcHBldD4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0VGFibGUiOiB7CisgICAgICAgICAgICAiQ2FwdGlvbiI6ICIiLAorICAgICAgICAgICAgIkNhcHRpb24gZm9yIHRoZSB0YWJsZSI6ICIiLAorICAgICAgICAgICAgIkNlbGwgcGFkZGluZzoiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIHNwYWNpbmc6IjogIiIsCisgICAgICAgICAgICAiQ29sbGFwc2UgYm9yZGVyczoiOiAiIiwKKyAgICAgICAgICAgICJDb2xzOiI6ICIiLAorICAgICAgICAgICAgIkVtIjogIiIsCisgICAgICAgICAgICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIkxheW91IjogIiIsCisgICAgICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJOdW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIiIsCisgICAgICAgICAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICIiLAorICAgICAgICAgICAgIlN0eWxlIG9mIHRoZSBib3JkZXIiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aCB1bml0IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkxheW91dCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQZXJjZW50IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUGl4ZWxzIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSb3dzOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNwYWNpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIldpZHRoOiI6ICI8PEhvcml6b250YWxSdWxlPj4iCisgICAgICAgIH0sCisgICAgICAgICJMYW5nTWFya3MiOiB7CisgICAgICAgICAgICAiJm1kYXNoOyBsYW5ndWFnZSAmbWRhc2g7IjogIiIsCisgICAgICAgICAgICAiJywgJyI6ICIiLAorICAgICAgICAgICAgIkVuZ2xpc2giOiAiIiwKKyAgICAgICAgICAgICJGcmVuY2giOiAiIiwKKyAgICAgICAgICAgICJHcmVlayI6ICIiLAorICAgICAgICAgICAgImxhbmd1YWdlIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIkxhdGluIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxpbmtlciI6IHsKKyAgICAgICAgICAgICIocHgpIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yLUxpbmsiOiAiIiwKKyAgICAgICAgICAgICJBbmNob3I6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgQWRkcmVzczoiOiAiIiwKKyAgICAgICAgICAgICJFbWFpbCBMaW5rIjogIiIsCisgICAgICAgICAgICAiTG9jYXRpb24gQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lbnUgQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lc3NhZ2UgVGVtcGxhdGU6IjogIiIsCisgICAgICAgICAgICAiTmV3IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIk9yZGluYXJ5IExpbmsiOiAiIiwKKyAgICAgICAgICAgICJQb3B1cCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJQb3B1cFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUmVzaXplYWJsZToiOiAiIiwKKyAgICAgICAgICAgICJTYW1lIFdpbmRvdyAoanVtcCBvdXQgb2YgZnJhbWVzKSI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbGJhcnM6IjogIiIsCisgICAgICAgICAgICAiU2hvd3MgT24gSG92ZXIiOiAiIiwKKyAgICAgICAgICAgICJTdGF0dXMgQmFyOiI6ICIiLAorICAgICAgICAgICAgIlN1YmplY3Q6IjogIiIsCisgICAgICAgICAgICAiVGl0bGU6IjogIiIsCisgICAgICAgICAgICAiVG9vbGJhcjoiOiAiIiwKKyAgICAgICAgICAgICJVUkwgTGluayI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICIiLAorICAgICAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJOYW1lOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNpemU6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiVGFyZ2V0OiI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiVVJMOiI6ICI8PENyZWF0ZUxpbms+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxpc3RUeXBlIjogeworICAgICAgICAgICAgIkNob29zZSBsaXN0IHN0eWxlIHR5cGUgKGZvciBvcmRlcmVkIGxpc3RzKSI6ICIiLAorICAgICAgICAgICAgIkRlY2ltYWwgbnVtYmVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIGdyZWVrIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciBsYXRpbiBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgcm9tYW4gbnVtYmVycyI6ICIiLAorICAgICAgICAgICAgIlVwcGVyIGxhdGluIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJVcHBlciByb21hbiBudW1iZXJzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIk1vb3Rvb2xzRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiT3BlcmEiOiB7CisgICAgICAgICAgICAiTUFSSyI6ICIiLAorICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAgICAgIkluc2VydCB0ZXh0IGluIG5ldyBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJQYXN0ZSBhcyBQbGFpbiBUZXh0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlByZXNlcnZlU2NyaXB0cyI6IHsKKyAgICAgICAgICAgICJKYXZhU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiUEhQIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlF1aWNrVGFnIjogeworICAgICAgICAgICAgIicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbCc6ICciOiAiIiwKKyAgICAgICAgICAgICJBVFRSSUJVVEVTIjogIiIsCisgICAgICAgICAgICAiQ29sb3JzIjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIFRBRyB5b3Ugd2FudCB0byBpbnNlcnQiOiAiIiwKKyAgICAgICAgICAgICJObyBDU1MgY2xhc3MgYXZhaWFibGUiOiAiIiwKKyAgICAgICAgICAgICJPayI6ICIiLAorICAgICAgICAgICAgIk9QVElPTlMiOiAiIiwKKyAgICAgICAgICAgICJRdWljayBUYWcgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiVEFHcyI6ICIiLAorICAgICAgICAgICAgIlRoZXJlIGFyZSBzb21lIHVuY2xvc2VkIHF1b3RlIjogIiIsCisgICAgICAgICAgICAiVGhpcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIFRBRyI6ICIiLAorICAgICAgICAgICAgIllvdSBoYXZlIHRvIHNlbGVjdCBzb21lIHRleHQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU2F2ZVN1Ym1pdCI6IHsKKyAgICAgICAgICAgICJpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIlJlYWR5IjogIiIsCisgICAgICAgICAgICAiU2F2ZSI6ICIiLAorICAgICAgICAgICAgIlNhdmluZy4uLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTZXRJZCI6IHsKKyAgICAgICAgICAgICJJRC9OYW1lOiI6ICIiLAorICAgICAgICAgICAgIlNldCBJZCBhbmQgTmFtZSI6ICIiLAorICAgICAgICAgICAgIlNldCBJZC9OYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElEL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgICAgICJDbG9zaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiQ2xvc2luZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiQ29udmVydCBhbGwgcXVvdGVzIGFuZCBkYXNoZXMgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgYXV0b21hdGljIHJlcGxhY2VtZW50cyI6ICIiLAorICAgICAgICAgICAgIk9wZW5pbmdEb3VibGVRdW90ZXMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nU2luZ2xlUXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJTbWFydFJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJTbWFydFJlcGxhY2UgU2V0dGluZ3MiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU3R5bGlzdCI6IHsKKyAgICAgICAgICAgICJTdHlsZXMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU3VwZXJDbGVhbiI6IHsKKyAgICAgICAgICAgICJDbGVhbiBiYWQgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIFNlbGVjdGlvbiBPbmx5IjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gdXAgSFRNTCI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIFNjb3BlIjogIiIsCisgICAgICAgICAgICAiR2VuZXJhbCB0aWR5IHVwIGFuZCBjb3JyZWN0aW9uIG9mIHNvbWUgcHJvYmxlbXMuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHNlbGVjdCBmcm9tIHRoZSBmb2xsb3dpbmcgY2xlYW5pbmcgb3B0aW9ucy4uLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzdGFuZCBieSB3aGlsZSBjbGVhbmluZyBpbiBwcm9jZXNzLi4uIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsaWdubWVudCAobGVmdC9yaWdodC9qdXN0aWZ5KS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxsIGNsYXNzZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIEFsbCBIVE1MIFRhZ3MiOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxsIHN0eWxlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIGZvbnQgc2l6ZXMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0ZXh0IGNvbG9ycy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIHR5cGVmYWNlcyAoZm9udCBcInN0eWxlc1wiKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZW1waGFzaXMgYW5kIGFubm90YXRpb25zLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBsYW5nIGF0dHJpYnV0ZXMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIFBhcmFncmFwaHMiOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzLiI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UgZGlyZWN0aW9uYWwgcXVvdGUgbWFya3Mgd2l0aCBub24tZGlyZWN0aW9uYWwgcXVvdGUgbWFya3MuIjogIiIsCisgICAgICAgICAgICAiVmlnb3JvdXNseSBwdXJnZSBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlRhYmxlT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJBbGwgZm91ciBzaWRlcyI6ICIiLAorICAgICAgICAgICAgIkJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIFByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIFR5cGU6IjogIiIsCisgICAgICAgICAgICAiQ2VsbHMgZG93biI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIHRvIHRoZSByaWdodCwgYW5kIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgY29sdW1uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIHJvdyI6ICIiLAorICAgICAgICAgICAgIkRvIE5vdCBDaGFuZ2UiOiAiIiwKKyAgICAgICAgICAgICJGcmFtZSBhbmQgYm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkZyYW1lcyI6ICIiLAorICAgICAgICAgICAgIkhlYWRlciAodGgpIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNlbGwgYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY2VsbCBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY29sdW1uIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcm93IGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHJvdyBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBjZWxscyI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIGN1cnJlbnQgY2VsbCB3aXRoOiI6ICIiLAorICAgICAgICAgICAgIk5vIHJ1bGVzIjogIiIsCisgICAgICAgICAgICAiTm8gc2lkZXMiOiAiIiwKKyAgICAgICAgICAgICJOb3JtYWwgKHRkKSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjbGljayBpbnRvIHNvbWUgY2VsbCI6ICIiLAorICAgICAgICAgICAgIlJvdyBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiUm93IFByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGFsbCByb3dzIGFuZCBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBjb2x1bW5zIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIHJvd3Mgb25seSI6ICIiLAorICAgICAgICAgICAgIlNwYWNpbmcgYW5kIHBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJTcGxpdCBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJTcGxpdCByb3ciOiAiIiwKKyAgICAgICAgICAgICJTdW1tYXJ5IjogIiIsCisgICAgICAgICAgICAiVGFibGUgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlRhYmxlIFByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJUaGUgYm90dG9tIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHJpZ2h0IGFuZCBsZWZ0IHNpZGVzIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgcmlnaHQtaGFuZCBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSB0b3Agc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY2VsbCBpbiByb3cuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iOiAiIiwKKyAgICAgICAgICAgICJDYXB0aW9uIjogIjw8SW5zZXJ0VGFibGU+PiIsCisgICAgICAgICAgICAiQ29sdW1ucyI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkRlc2NyaXB0aW9uIjogIjw8RnVsbFBhZ2U+PiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJQYWRkaW5nIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgInBpeGVscyI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJvd3MiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTcGFjaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuc2F2ZWRDaGFuZ2VzIjogeworICAgICAgICAgICAgIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgZWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIldlYktpdCI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiPDxHZWNrbz4+IgorICAgICAgICB9LAorICAgICAgICAiWGluaGEiOiB7CisgICAgICAgICAgICAiJiM4MjEyOyBmb250ICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiJiM4MjEyOyBzaXplICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICIxICg4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjIgKDEwIHB0KSI6ICIiLAorICAgICAgICAgICAgIjMgKDEyIHB0KSI6ICIiLAorICAgICAgICAgICAgIjQgKDE0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjUgKDE4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjYgKDI0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjcgKDM2IHB0KSI6ICIiLAorICAgICAgICAgICAgIkFkZHJlc3MiOiAiIiwKKyAgICAgICAgICAgICJBcmlhbCI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICIiLAorICAgICAgICAgICAgIkNsb3NlIjogIiIsCisgICAgICAgICAgICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICIiLAorICAgICAgICAgICAgIkNvdXJpZXIgTmV3IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFN0YXR1c2JhciI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBUb29sYmFyIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0wICh6ZXJvKSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMSAuLiBDVFJMLTYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUEiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUoiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUwiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLU4iOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVgiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVoiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIiIsCisgICAgICAgICAgICAiRWRpdG9yIEhlbHAiOiAiIiwKKyAgICAgICAgICAgICJFTlRFUiI6ICIiLAorICAgICAgICAgICAgIkVycm9yIExvYWRpbmcgWGluaGEuICBEZXZlbG9wZXJzLCBjaGVjayB0aGUgRXJyb3IgQ29uc29sZSBmb3IgaW5mb3JtYXRpb24uIjogIiIsCisgICAgICAgICAgICAiRmluaXNoaW5nIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0dGVkIjogIiIsCisgICAgICAgICAgICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIiIsCisgICAgICAgICAgICAiR2VvcmdpYSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMiI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMyI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNCI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNiI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmdzIjogIiIsCisgICAgICAgICAgICAiSW1wYWN0IjogIiIsCisgICAgICAgICAgICAiSW5pdCBlZGl0b3Igc2l6ZSI6ICIiLAorICAgICAgICAgICAgImluc2VydCBsaW5lYnJlYWsiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvT3ZlcndyaXRlIjogIiIsCisgICAgICAgICAgICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBDb3JlIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW4gJHBsdWdpbiI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgcGx1Z2lucyI6ICIiLAorICAgICAgICAgICAgIk1TIFdvcmQgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIm5ldyBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJOb3JtYWwiOiAiIiwKKyAgICAgICAgICAgICJQcmludCBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAiIiwKKyAgICAgICAgICAgICJTYXZlIGFzIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IGFsbCI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCBDb2xvciI6ICIiLAorICAgICAgICAgICAgIlNldCBmb3JtYXQgdG8gcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiU0hJRlQtRU5URVIiOiAiIiwKKyAgICAgICAgICAgICJTcGxpdCBCbG9jayI6ICIiLAorICAgICAgICAgICAgIlRhaG9tYSI6ICIiLAorICAgICAgICAgICAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICIiLAorICAgICAgICAgICAgIlRpbWVzIE5ldyBSb21hbiI6ICIiLAorICAgICAgICAgICAgIlRvZ2dsZSBCb3JkZXJzIjogIiIsCisgICAgICAgICAgICAiVG91Y2ggaGVyZSBmaXJzdCB0byBhY3RpdmF0ZSBlZGl0b3IuIjogIiIsCisgICAgICAgICAgICAiVmVyZGFuYSI6ICIiLAorICAgICAgICAgICAgIldhaXRpbmcgZm9yIElmcmFtZSB0byBsb2FkLi4uIjogIiIsCisgICAgICAgICAgICAiV2luZ0RpbmdzIjogIiIsCisgICAgICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIiIsCisgICAgICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogIiIsCisgICAgICAgICAgICAiWGluaGEiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogQkFDS0dST1VORElNQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIlJlbW92ZSBDdXJyZW50IEJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJTZXQgQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIlNldCBwYWdlIGJhY2tncm91bmQgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJTZXQgUGFnZSBCYWNrZ3JvdW5kIEltYWdlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNsaWVudHNpZGVTcGVsbGNoZWNrIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogQ0xJRU5UU0lERVNQRUxMQ0hFQ0sgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiU3BlbGwgQ2hlY2sgdXNpbmcgaWVTcGVsbCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFeHRlbmRlZEZpbGVNYW5hZ2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogRVhURU5ERURGSUxFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIxMCUiOiAiIiwKKyAgICAgICAgICAgICIxMDAlIjogIiIsCisgICAgICAgICAgICAiMjAwJSI6ICIiLAorICAgICAgICAgICAgIjI1JSI6ICIiLAorICAgICAgICAgICAgIjUwJSI6ICIiLAorICAgICAgICAgICAgIjc1JSI6ICIiLAorICAgICAgICAgICAgIj5MaXN0IFZpZXciOiAiIiwKKyAgICAgICAgICAgICI+VGh1bWJuYWlsIFZpZXciOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICIiLAorICAgICAgICAgICAgIkFsaWduIjogIiIsCisgICAgICAgICAgICAiQWx0IjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIENvbG9yIjogIiIsCisgICAgICAgICAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIiIsCisgICAgICAgICAgICAiQ3JvcCI6ICIiLAorICAgICAgICAgICAgIkQ6IjogIiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IjogIiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIiIsCisgICAgICAgICAgICAiRWRpdCI6ICIiLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZpbGUgTWFuYWdlciI6ICIiLAorICAgICAgICAgICAgIkZpbGVuYW1lOiI6ICIiLAorICAgICAgICAgICAgIkZpbGVzaXplOiI6ICIiLAorICAgICAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICIiLAorICAgICAgICAgICAgIkZsaXAgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIiIsCisgICAgICAgICAgICAiRm9sZGVyIjogIiIsCisgICAgICAgICAgICAiR0lGIjogIiIsCisgICAgICAgICAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIiIsCisgICAgICAgICAgICAiSDoiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICIiLAorICAgICAgICAgICAgIkpQRUcgSGlnaCI6ICIiLAorICAgICAgICAgICAgIkpQRUcgTG93IjogIiIsCisgICAgICAgICAgICAiSlBFRyBNZWRpdW0iOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIjogIiIsCisgICAgICAgICAgICAiTG9jayI6ICIiLAorICAgICAgICAgICAgIk1hcmtlciI6ICIiLAorICAgICAgICAgICAgIk1heGltdW0gZm9sZGVyIHNpemUgbGltaXQgcmVhY2hlZC4gVXBsb2FkIGRpc2FibGVkLiI6ICIiLAorICAgICAgICAgICAgIk1lYXN1cmUiOiAiIiwKKyAgICAgICAgICAgICJOZXcgRm9sZGVyIjogIiIsCisgICAgICAgICAgICAiTm8gRmlsZXMgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgdmFsdWUiOiAiIiwKKyAgICAgICAgICAgICJQTkciOiAiIiwKKyAgICAgICAgICAgICJQcmVzZXQiOiAiIiwKKyAgICAgICAgICAgICJRdWFsaXR5OiI6ICIiLAorICAgICAgICAgICAgIlJlZnJlc2giOiAiIiwKKyAgICAgICAgICAgICJSZW5hbWUiOiAiIiwKKyAgICAgICAgICAgICJSZXNpemUiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENDVyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIlN0YXJ0IFg6IjogIiIsCisgICAgICAgICAgICAiU3RhcnQgWToiOiAiIiwKKyAgICAgICAgICAgICJUYXJnZXQgV2luZG93IjogIiIsCisgICAgICAgICAgICAiVG9nZ2xlIG1hcmtlciBjb2xvciI6ICIiLAorICAgICAgICAgICAgIlRyYXNoIjogIiIsCisgICAgICAgICAgICAiVXBsb2FkIjogIiIsCisgICAgICAgICAgICAiVzoiOiAiIiwKKyAgICAgICAgICAgICJYOiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIEltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlk6IjogIiIsCisgICAgICAgICAgICAiWm9vbSI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvcmRlciI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQ2xlYXIiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJDb2xvciI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkNvcHkiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJDdXQiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICI8PE1vb3Rvb2xzRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1hcmdpbiI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRpdGxlICh0b29sdGlwKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIldpZHRoIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJGaWx0ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsdGVyIjogIjw8SW5zZXJ0U25pcHBldDI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkh0bWxUaWR5IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQXV0by1UaWR5IjogIiIsCisgICAgICAgICAgICAiRG9uJ3QgVGlkeSI6ICIiLAorICAgICAgICAgICAgIkhUTUwgVGlkeSI6ICIiLAorICAgICAgICAgICAgIlRpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQW5nbGU6IjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlcyI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgVXNlcm5hbWUvRW1haWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIgTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFBob3RvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFZpZGVvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgU2VydmVyIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFVzZXJuYW1lIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlbyBMaXN0IjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlb3MiOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNsZWFyIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJDcm9wIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkVkaXQiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGVuYW1lOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIEltYWdlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgSGlnaCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgTWVkaXVtIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTG9jayI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWFya2VyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJNZWFzdXJlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUE5HIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUXVhbGl0eToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJlZnJlc2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJlc2l6ZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSb3RhdGUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIEltYWdlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJTdGFydCBYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU3RhcnQgWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUb3AiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiVHJhc2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlc6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUTUFSUVVFRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUiOiAiIiwKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kLUNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkJlaGF2aW9yOiI6ICIiLAorICAgICAgICAgICAgIkNvbnRpbnVvdXMiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3Rpb246IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHNjcm9sbGluZyBtYXJxdWVlIjogIiIsCisgICAgICAgICAgICAiTWFycXVlZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgQW1vdW50OiI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbCBEZWxheToiOiAiIiwKKyAgICAgICAgICAgICJTbGlkZSI6ICIiLAorICAgICAgICAgICAgIlNwZWVkIENvbnRyb2wiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk5hbWUiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiVGV4dDoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGljdHVyZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVFBJQ1RVUkUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vdCBkZWZpbmVkIjogIiIsCisgICAgICAgICAgICAiT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICIgT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJVcGxvYWQgZmlsZSI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkxheW91dCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiU2l6ZSI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNwYWNpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJWZXJ0aWNhbDoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiTm90ZVNlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTIwJSI6ICIiLAorICAgICAgICAgICAgIjE1MCUiOiAiIiwKKyAgICAgICAgICAgICI4MCUiOiAiIiwKKyAgICAgICAgICAgICJBZGQgR1VJRE8gQ29kZSBpbiBhIHRleHRib3ggb24gdGhlIHBhZ2UiOiAiIiwKKyAgICAgICAgICAgICJBZGQgTUlESSBsaW5rIHRvIGFsbG93IHN0dWRlbnRzIHRvIGhlYXIgdGhlIG11c2ljIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiR1VJRE8gQ29kZSI6ICIiLAorICAgICAgICAgICAgIkd1aWRvIGNvZGUiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBpbiBhcHBsZXQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgR1VJRE8gTXVzaWMgTm90YXRpb24iOiAiIiwKKyAgICAgICAgICAgICJNSURJIEZpbGUiOiAiIiwKKyAgICAgICAgICAgICJTb3VyY2UgQ29kZSI6ICIiLAorICAgICAgICAgICAgIldpdGggTW96aWxsYSwgdGhlIGFwcGxldCB3aWxsIG5vdCBiZSB2aXNpYmxlIGluIGVkaXRvciwgYnV0IG9ubHkgaW4gV2ViIHBhZ2UgYWZ0ZXIgc3VibWl0dGluZy4iOiAiIiwKKyAgICAgICAgICAgICJab29tIDoiOiAiIiwKKyAgICAgICAgICAgICIxMDAlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBQcmV2aWV3IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJab29tIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBHZWFycyBpbiBvcmRlciB0byB1c2UgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZSBhbmQgY29uZmlndXJhdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGluZyBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiSW5zdGFsbCI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIEFib3V0IExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgcmVsb2FkIHRoZSBwYWdlLCBjYXVzaW5nIHlvdSB0byBsb3NlIGFueSB1bnNhdmVkIHdvcmsuICBQcmVzcyBcIk9LXCIgdG8gcmVsb2FkLiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIHVzZXMgR29vZ2xlIEdlYXJzIHRvIGVuYWJsZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlLiAgV2l0aCBHZWFycyBpbnN0YWxsZWQsIHlvdSBjYW4gc2F2ZSBkcmFmdHMgb2YgeW91ciBkb2N1bWVudHMgb24geW91ciBoYXJkIGRyaXZlLCBjb25maWd1cmUgWGluaGEgdG8gbG9vayB0aGUgd2F5IHlvdSB3YW50LCBhbmQgY2FycnkgdGhpcyBpbmZvcm1hdGlvbiB3aGVyZXZlciB5b3UgdXNlIFhpbmhhIG9uIHRoZSB3ZWIuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsZTogIjogIiIsCisgICAgICAgICAgICAiSW1wb3J0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGV0YWlscyI6ICIiLAorICAgICAgICAgICAgIkZpbGUgQnJvd3NlciI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICAgIFRoZXJlIEMgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gIFRoZXJlIEEgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gXCIgVGhlcmUgQiBcIiI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICcgVGhlcmUgRCAnIjogIiIsCisgICAgICAgICAgICAiTGlzdCBvZiBQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJOZXcgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJPcGVuIjogIiIsCisgICAgICAgICAgICAiT3BlbiBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHlvdSdkIGxpa2UgdG8gY3JlYXRlLiI6ICIiLAorICAgICAgICAgICAgIlNhdmUgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgZXJhc2UgYW55IHVuc2F2ZWQgY29udGVudC4gIElmIHlvdSdyZSBjZXJ0YWluLCBwbGVhc2UgY2xpY2sgT0sgdG8gY29udGludWUuIjogIiIsCisgICAgICAgICAgICAiV2ViIFVSTCI6ICIiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiPDxQU0xvY2FsPj4iLAorICAgICAgICAgICAgIkNvcHkiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTWFuYWdlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZW5hbWUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCI6ICI8PEluc2VydE5vdGU+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBTUEVMTENIRUNLRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGljdGlvbmFyeSI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGVkIGxpc3Qgb2YgbWlzcGVsbGVkIHdvcmRzIjogIiIsCisgICAgICAgICAgICAiSFRNTEFyZWEgU3BlbGwgQ2hlY2tlciI6ICIiLAorICAgICAgICAgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIGFsbCI6ICIiLAorICAgICAgICAgICAgIkluZm8iOiAiIiwKKyAgICAgICAgICAgICJMZWFybiI6ICIiLAorICAgICAgICAgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICIiLAorICAgICAgICAgICAgIk9yaWdpbmFsIHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQuICBDYWxsaW5nIHNwZWxsIGNoZWNrZXIuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAiIiwKKyAgICAgICAgICAgICJwbGl6IHdlaXQgOy0pIjogIiIsCisgICAgICAgICAgICAiUmUtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSBhbGwiOiAiIiwKKyAgICAgICAgICAgICJSZXZlcnQiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiU3BlbGwtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJTdWdnZXN0aW9ucyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBkcm9wIGNoYW5nZXMgYW5kIHF1aXQgc3BlbGwgY2hlY2tlci4gIFBsZWFzZSBjb25maXJtLiI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2Ugd2l0aCI6ICI8PEZpbmRSZXBsYWNlPj4iCisgICAgICAgIH0sCisgICAgICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFRFTVBMQVRFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkluc2VydCB0ZW1wbGF0ZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJVbkZvcm1hdCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFVORk9STUFUIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFsbCI6ICIiLAorICAgICAgICAgICAgIkFsbCBIVE1MOiI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIEFyZWEiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBvcHRpb25zIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0dGluZzoiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIENsZWFuZXIiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Qgd2hpY2ggdHlwZXMgb2YgZm9ybWF0dGluZyB5b3Ugd291bGQgbGlrZSB0byByZW1vdmUuIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0aW9uIjogIiIKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9uYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL25iLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZjkyNWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9uYi5qcwpAQCAtMCwwICsxLDE1NzkgQEAKKy8vIFhpbmhhIExhbmd1YWdlIENvbWJpbmVkIFRyYW5zbGF0aW9uIEZpbGUKKy8vCisvLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTlNUUlVDVElPTlMgVE8gVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFlvdXIgdHJhbnNsYXRpb24gbXVzdCBiZSBpbiBVVEYtOCBDaGFyYWN0ZXIgRW5jb2RpbmcuCisvLworLy8gVGhpcyBpcyBhIEpTT04gZW5jb2RlZCBmaWxlIChwbHVzIGNvbW1lbnRzKSwgc3RyaW5ncyBzaG91bGQgYmUgZG91YmxlLXF1b3RlCisvLyBvbmx5LCBkbyBub3QgdXNlIHNpbmdsZSBxdW90ZXMgdG8gc3Vycm91bmQgc3RyaW5ncyAtICJoZWxsbyIsIG5vdCAnaGVsbG8nCisvLyBkbyBub3QgaGF2ZSBhIHRyYWlsaW5nIGNvbW1hIGFmdGVyIHRoZSBsYXN0IGVudHJ5IGluIGEgc2VjdGlvbi4KKy8vCisvLyBPbmx5IGZ1bGwgbGluZSBjb21tZW50cyBhcmUgYWxsb3dlZCAodGhhdCBhIGNvbW1lbnRzIG9jY3VweSBlbnRpcmUgbGluZXMpLgorLy8KKy8vIFNlYXJjaCBmb3IgdGhlIF9fTkVXX1RSQU5TTEFUSU9OU19fIHNlY3Rpb24gYmVsb3csIHRoaXMgaXMgd2hlcmUgeW91IHdpbGwKKy8vIHdhbnQgdG8gZm9jdXMsIHRoaXMgc2VjdGlvbiBpbmNsdWRlcyB0aGluZ3MgdGhhdCBkbyBub3QgcHJlc2VudGx5IGhhdmUgYSAKKy8vIHRyYW5zbGF0aW9uIG9yIGZvciB3aGljaCB0aGUgdHJhbnNsYXRpb24gbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgYWNjdXJhY3kuCisvLworLy8gSW4gdGhlIE5ldyBUcmFuc2xhdGlvbnMgc2VjdGlvbiBhIHRyYW5zbGF0aW9uIHN0cmluZyBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZworLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiIgorLy8gICAgIFRoaXMgbWVhbnMgaXQgaXMgbm90IHRyYW5zbGF0ZWQgeWV0LCBhZGQgeW91ciB0cmFuc2xhdGlvbi4uLgorLy8gICAgICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJLbGluZ29uIFN0cmluZyBIZXJlIgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiVHJhbnNsYXRlZCBTdHJpbmcgSGVyZSIKKy8vICAgICBUaGlzIG1lYW5zIHRoYXQgYW4gZXhpc3RpbmcgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nLCBpbiBzb21lIG90aGVyCisvLyAgICAgc2VjdGlvbiBoYXMgYmVlbiBmb3VuZCwgYW5kIHVzZWQuICBDaGVjayB0aGF0IGl0IGlzIGFwcHJvcHJpdGUgZm9yIHRoaXMKKy8vICAgICBzZWN0aW9uIGFuZCBpZiBpdCBpcywgdGhhdCdzIGZpbmUgbGVhdmUgaXQgYXMgaXMsIG90aGVyd2lzZSBjaGFuZ2UgYXMKKy8vICAgICBhcHByb3ByaWF0ZS4KKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIjw8QW5vdGhlclNlY3Rpb24+PiIKKy8vICAgICBUaGlzIG1lYW5zIHVzZSB0aGUgc2FtZSB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcgYXMgPDxBbm90aGVyU2VjdGlvbj4+CisvLyAgICAgdGhpcyBzYXZlcyB5b3UgcmUtdHJhbmxhdGluZyBzdHJpbmdzLiAgSWYgdGhlIENvbnRleHQgb2YgdGhpcyBzZWN0aW9uCisvLyAgICAgYW5kIHRoZSBjb250ZXh0IG9mIEFub3RoZXJTZWN0aW9uIHNlZW0gdGhlIHNhbWUsIHRoYXQncyBmaW5lIGxlYXZlIGl0CisvLyAgICAgdXNpbmcgdGhhdCB0cmFuc2xhdGlvbiwgYnV0IGlmIHRoaXMgc2VjdGlvbiBuZWVkcyBhIGRpZmZlcmVudCB0cmFuc2xhdGlvbiwgCisvLyAgICAgeW91IGNhbiBwcm92aWRlIGl0IGJ5IHJlcGxhY2luZyB0aGUgbGluayAoPDxBbm90aGVyU2VjdGlvbj4+KSB3aXRoIHRoYXQKKy8vICAgICBuZXcgdHJhbnNsYXRpb24uICBGb3IgZXhhbXBsZSAtIGEgIlRhYmxlIiBpbiBzYXkgIkRhdGFQbHVnaW4iIGlzIAorLy8gICAgIHBlcmhhcHMgdHJhbnNsYXRlZCBkaWZmZXJlbnRseSB0byAiVGFibGUiIGluICJGdXJuaXR1cmVQbHVnaW4iLgorLy8KKy8vIFRFU1RJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgcGxhY2UgeW91ciB0cmFuc2xhdGlvbiBmaWxlIG9uIHlvdXIgd2Vic2VydmVyIHNvbWV3aGVyZSBmb3IgZXhhbXBsZQorLy8KKy8vICAgL3hpbmhhL2xhbmcvbWVyZ2VkL25iLmpzCisvLworLy8gYW5kIHRoZW4gdGVsbCBYaW5oYSB3aGVyZSB0byBnZXQgaXQgKGJlZm9yZSBsb2FkaW5nIFhpbmhhQ29yZS5qcykgYnkgCisvLworLy8gIF9lZGl0b3JfbGFuZyAgICAgICAgICAgICAgPSAnbmInOworLy8gIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSAgPSAnL3hpbmhhL2xhbmcvbWVyZ2VkL25iLmpzJzsKKy8vCisvLyBYaW5oYSB3aWxsIGxvYWQgeW91ciBuZXcgbGFuZ3VhZ2UgZGVmaW5pdGlvbi4KKy8vCisvLyBTVUJNSVRUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IGNyZWF0ZSBhIFRpY2tldCBvbiB0aGUgWGluaGEgd2Vic2l0ZSBhbmQgYXR0YWNoIHlvdXIgdHJhbnNsYXRpb24gCisvLyBmaWxlLgorLy8KKy8vIFRoZSBYaW5oYSBkZXZlbG9wZXJzIHdpbGwgdGFrZSB5b3VyIGZpbGUgYW5kIHVzZSB0aGUgCisvLyAgICAgY29udHJpYi9sY19zcGxpdF9tZXJnZWRfZmlsZS5waHAKKy8vIHNjcmlwdCB0byBsb2FkIGl0IGludG8gdGhlIFhpbmhhIGRpc3RyaWJ1dGlvbi4KKworeworICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICJBYmJyZXZpYXRpb24iOiAiQmVza3JpdmUgZm9ya29ydGVsc2UiLAorICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgICAgICJEZWxldGUiOiAiRmplcm5lIiwKKyAgICAgICAgIkV4cGFuc2lvbjoiOiAiQmV0eWRuaW5nOiIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJBYm91dEJveCI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIk9tIGRlbm5lIGVkaXRvciIKKyAgICB9LAorICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAgICAgIlJlbW92ZSBDdXJyZW50IEJhY2tncm91bmQiOiAiRmplcm4gZ2plbGRlbmRlIGJha2dydW5uIiwKKyAgICAgICAgIlNldCBQYWdlIEJhY2tncm91bmQgSW1hZ2UiOiAiVmVsZyBiYWtncnVubnNiaWxkZSBww6UgU2lkZW4iLAorICAgICAgICAiU2V0IHBhZ2UgYmFja2dyb3VuZCBpbWFnZSI6ICJWZWxnIGJha2dydW5uc2JpbGRlIHDDpSBzaWRlbiIKKyAgICB9LAorICAgICJDaGFyQ291bnRlciI6IHsKKyAgICAgICAgIkNoYXJzIjogIlRlZ24iCisgICAgfSwKKyAgICAiQ2hhcmFjdGVyTWFwIjogeworICAgICAgICAiSW5zZXJ0IHNwZWNpYWwgY2hhcmFjdGVyIjogIlNldHQgaW5uIHRlZ24iCisgICAgfSwKKyAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICJDb2xvcjogIjogIkZhcmdlIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAiQ19lbGwgUHJvcGVydGllcy4uLiI6ICJDX2VsbGVlZ2Vuc2thcGVyLi4uIiwKKyAgICAgICAgIkNoZWNfayBMaW5rLi4uIjogIlNqZV9rayBMaW5rLi4uIiwKKyAgICAgICAgIkNvcHkiOiAiS29waWVyIiwKKyAgICAgICAgIkNyZWF0ZSBhIGxpbmsiOiAiTGFnIG55IGxpbmsiLAorICAgICAgICAiQ3VycmVudCBVUkwgaXMiOiAiR2plbGRlbmRlIFVSTCBlciIsCisgICAgICAgICJDdXQiOiAiS2xpcHAgdXQiLAorICAgICAgICAiRGVfbGV0ZSBDb2x1bW4iOiAiU19sZXR0IGtvbG9ubmUiLAorICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IGNvbHVtbiI6ICJTbGV0dCBnamVsZGVuZGUga29sb25uZSIsCisgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIlNsZXR0IGdqZWxkZW5kZSByYWQiLAorICAgICAgICAiSG93IGRpZCB5b3UgZ2V0IGhlcmU/IChQbGVhc2UgcmVwb3J0ISkiOiAiSHZhIHNramVkZGU/IChWZW5ubGlnc3QgYmVza3JpdikiLAorICAgICAgICAiSV9uc2VydCBSb3cgQmVmb3JlIjogIlNldHQgSV9ubiByYWQgZsO4ciIsCisgICAgICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICJfU2V0dCBpbm4gcmFkIGV0dGVyIiwKKyAgICAgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIlNldHQgaW5uIGtfb2xvbm5lIGV0dGVyIiwKKyAgICAgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICJTZXR0IGlubiBrb2xvbm5lIGV0dGVyIChfYykiLAorICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiU2V0dCBpbm4ga29sb25uZSBldHRlciBnamVsZGVuZGUiLAorICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIlNldHQgaW5uIGtvbG9ubmUgZsO4ciBnamVsZGVuZGUiLAorICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiU2V0dCBpbm4gbnkgcmFkIGV0dGVyIGdqZWxkZW5kZSIsCisgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiU2V0dCBpbm4gbnkgcmFkIGbDuHIgZ2plbGRlbmRlIiwKKyAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBhZnRlciB0aGUgY3VycmVudCBub2RlIjogIlNldHQgaW5uIHBhcmFncmFmIGV0dGVyIGdqZWxkZW5kZSBub2RlIiwKKyAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZSI6ICJTZXR0IGlubiBwYXJhZ3JhZiBmw7hyIGdqZWxkZW5kZSBub2RlIiwKKyAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYWZ0ZXIiOiAiU2V0dCBpbm4gcGFyYWdyYWYgZXR0ZXIiLAorICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiU2V0dCBpbm4gcGFyYWdyYWYgZsO4ciIsCisgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICJfTWlkdGp1c3RlciIsCisgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAiQmxva2tfanVzdGVyIiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICJfVmVuc3RyZWp1c3RlciIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIl9Iw7h5cmVqdXN0ZXIiLAorICAgICAgICAiTGluayBwb2ludHMgdG86IjogIkxpbmsgcGVrZXIgdGlsOiIsCisgICAgICAgICJNYWtlIGxpbl9rLi4uIjogIkxhZyBsZW5fa2UuLi4iLAorICAgICAgICAiT3BlbnMgdGhpcyBsaW5rIGluIGEgbmV3IHdpbmRvdyI6ICLDhXBuZXIgZGVubmUgbGluayBpIG55dHQgdmluZHUiLAorICAgICAgICAiUGFzdGUiOiAiTGltIGlubiIsCisgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGVsZW1lbnQ6IjogIlZlbm5saWdzdCBiZWtyZWZ0IGF0IGR1IMO4bnNrZXIgw6UgZmplcm5lIGVsZW1lbnRldDoiLAorICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICJWZW5ubGlnc3QgYmVrcmVmdCBhdCBkdSDDuG5za2VyIMOlIGZqZXJuZSBsaW5rIHDDpSBlbGVtZW50ZXQiLAorICAgICAgICAiUmVtb3ZlIHRoZSAkZWxlbSBFbGVtZW50Li4uIjogIkZqZXJuZSAkZWxlbSBlbGVtZW50ZXQuLi4iLAorICAgICAgICAiUmVtb3ZlIHRoaXMgbm9kZSBmcm9tIHRoZSBkb2N1bWVudCI6ICJGamVybmUgZGVubmUgbm9kZSBmcmEgZG9rdW1lbnRldCIsCisgICAgICAgICJSb193IFByb3BlcnRpZXMuLi4iOiAiUmFkIEVnZW5za2FwZXIuLi4gKF93KSIsCisgICAgICAgICJTaG93IHRoZSBUYWJsZSBDZWxsIFByb3BlcnRpZXMgZGlhbG9nIjogIlZpcyBlZ2Vuc2thcGVyIGZvciBjZWxsZSIsCisgICAgICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICJWaXMgZWdlbnNrYXBlciBmb3IgdGFiZWxsZW4iLAorICAgICAgICAiU2hvdyB0aGUgVGFibGUgUm93IFByb3BlcnRpZXMgZGlhbG9nIjogIlZpcyBlZ2Vuc2thcGVyIGZvciByYWQiLAorICAgICAgICAiU2hvdyB0aGUgaW1hZ2UgcHJvcGVydGllcyBkaWFsb2ciOiAiVmlzIGJpbGRlZWdlbnNrYXBlciIsCisgICAgICAgICJVbmxpbmsgdGhlIGN1cnJlbnQgZWxlbWVudCI6ICJGamVybmUgbGluayBww6UgZ2plbGRlbmRlIGVsZW1lbnQiLAorICAgICAgICAiX0RlbGV0ZSBSb3ciOiAiU2xldHQgcmFkIChfZCkiLAorICAgICAgICAiX0ltYWdlIFByb3BlcnRpZXMuLi4iOiAiX0JpbGRlZWdlbnNrYXBlci4uLiIsCisgICAgICAgICJfTW9kaWZ5IExpbmsuLi4iOiAiX1JlZGlnZXIgTGluay4uLiIsCisgICAgICAgICJfUmVtb3ZlIExpbmsuLi4iOiAiX0ZqZXJuZSBMaW5rLi4uIiwKKyAgICAgICAgIl9UYWJsZSBQcm9wZXJ0aWVzLi4uIjogIl9UYWJlbGxlZ2Vuc2thcGVyLi4uIgorICAgIH0sCisgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiRXIgZHUgc2lra2VyIHDDpSBhdCBkdSB2aWwgZmplcm5lIGxlbmtlbj8iLAorICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiUmVkaWdlciBsZW5rZSIsCisgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIkVnZXQgdmluZHUgKF9ibGFuaykiLAorICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJJbmdlbiAoYnJ1ayBzdGFuZGFyZGlubnN0aWxsaW5nKSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPdGhlciI6ICJBbm5lbiIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiU2FtbWUgcmFtbWUgKF9zZWxmKSIsCisgICAgICAgICJUYXJnZXQ6IjogIk3DpWw6IiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAiVGl0dGVsICh0b29sdGlwKToiLAorICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJUb3BwcmFtbWUgKF90b3ApIiwKKyAgICAgICAgIlVSTDoiOiAiQWRyZXNzZToiCisgICAgfSwKKyAgICAiRHluYW1pY0NTUyI6IHsKKyAgICAgICAgIkNob29zZSBzdHlsZXNoZWV0IjogIlZlbGcgc3RpbHNldHQiLAorICAgICAgICAiRGVmYXVsdCI6ICJTdGFuZGFyZCIsCisgICAgICAgICJVbmRlZmluZWQiOiAiVWRlZmluZXJ0IgorICAgIH0sCisgICAgIkVkaXRUYWciOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAgICAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICJSZWRpZ2VyIEhUTUwgZm9yIGRlbiB2YWxndGUgdGVrc3RlbiIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUHJldmlldyI6ICJGb3Jow6VuZHN2aXNuaW5nIgorICAgIH0sCisgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICJBbGlnbiI6ICJKdXN0ZXIiLAorICAgICAgICAiQWx0IjogIkFsdCIsCisgICAgICAgICJCYXNlbGluZSI6ICJHcnVubmxpbmplIiwKKyAgICAgICAgIkJvcmRlciI6ICJSYW1tZSIsCisgICAgICAgICJCb3JkZXIgQ29sb3IiOiAiUmFtbWUgZmFyZ2U6IiwKKyAgICAgICAgIkJvdHRvbSI6ICJCdW5uIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiQ2xlYXIiOiAiVMO4bSIsCisgICAgICAgICJDb2xvciI6ICJGYXJnZSIsCisgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiQmVob2xkZSBwcm9wb3Nqb25lciIsCisgICAgICAgICJDb3B5IjogIkNvcHkiLAorICAgICAgICAiQ3JvcCI6ICJCZXNrasOmciIsCisgICAgICAgICJDdXQiOiAiQ3V0IiwKKyAgICAgICAgIkRpcmVjdG9yeSI6ICJNYXBwZSIsCisgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiT3BwIGV0IG5pdsOlIiwKKyAgICAgICAgIkVkaXQiOiAiUmVkaWdlciIsCisgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiRmlsYmVoYW5kbGVyIiwKKyAgICAgICAgIkZpbGVuYW1lOiI6ICJGaWxuYXZuOiIsCisgICAgICAgICJGbGlwIEhvcml6b250YWwiOiAiVmVuZCBob3Jpc29udGFsIiwKKyAgICAgICAgIkZsaXAgSW1hZ2UiOiAiVmVuZCBiaWxkZSIsCisgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIlZlbmQgdmVydGlrYWwiLAorICAgICAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIkdJRiBmb3JtYXQgZXIgaWtrZSBzdMO4dHRldCBvZyBiaWxkZXJlZGlnZXJpbmcgZXIgZGVyZm9yIGlra2UgdGlsZ2plbmdlbGlnLiIsCisgICAgICAgICJIZWlnaHQiOiAiSMO4eWRlIiwKKyAgICAgICAgIkhlaWdodDoiOiAiSMO4eWRlOiIsCisgICAgICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIlNldHQgaW5uIGxlbmtlIHRpbCBmaWwiLAorICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiVWd5bGRpZyBzdGkgdGlsIG1hcHBlOiIsCisgICAgICAgICJKUEVHIEhpZ2giOiAiSlBFRyBow7h5IiwKKyAgICAgICAgIkpQRUcgTG93IjogIkpQRUcgbGF2IiwKKyAgICAgICAgIkpQRUcgTWVkaXVtIjogIkpQRUcgbWlkZGVscyIsCisgICAgICAgICJMZWZ0IjogIlZlbnN0cmUiLAorICAgICAgICAiTG9hZGluZyI6ICJMYXN0ZXIiLAorICAgICAgICAiTG9jayI6ICJMw6VzIiwKKyAgICAgICAgIk1hcmdpbiI6ICJNYXJnIiwKKyAgICAgICAgIk1hcmtlciI6ICJNYXJrw7hyIiwKKyAgICAgICAgIk1lYXN1cmUiOiAiTcOlbCIsCisgICAgICAgICJNaWRkbGUiOiAiTWlkdGVuIiwKKyAgICAgICAgIk5ldyBGb2xkZXIiOiAiTnkgbWFwcGUiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJFZ2V0IHZpbmR1IChfYmxhbmspIiwKKyAgICAgICAgIk5vIEZpbGVzIEZvdW5kIjogIkluZ2VuIGZpbGVyIGZ1bm5ldCIsCisgICAgICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiSW5nZXQgYmlsZGUgdGlsZ2plbmdlbGlnLiIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIkluZ2VuIChicnVrIHN0YW5kYXJkaW5uc3RpbGxpbmcpIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBhZGRpbmciOiAiSW5udmVuZGlnIG1hcmciLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJCaWxkZXBvc3Npc2pvbiIsCisgICAgICAgICJQcmV2aWV3IjogIkZvcmjDpW5kc3Zpc25pbmciLAorICAgICAgICAiUXVhbGl0eToiOiAiS3ZhbGl0ZXQiLAorICAgICAgICAiUmVmcmVzaCI6ICJPcHBmcmlzayBzaWRlIiwKKyAgICAgICAgIlJlbmFtZSI6ICJOeXR0IG5hdm4iLAorICAgICAgICAiUmVzaXplIjogIkVuZHJlIHN0w7hycmVsc2UiLAorICAgICAgICAiUmlnaHQiOiAiSMO4eXJlIiwKKyAgICAgICAgIlJvdGF0ZSI6ICJSb3RlciIsCisgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiUm90ZXIgYmlsZGUiLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlNhbW1lIHJhbW1lIChfc2VsZikiLAorICAgICAgICAiU2F2ZSI6ICJMYWdyZSIsCisgICAgICAgICJTdGFydCBYOiI6ICJTdGFydCBYIiwKKyAgICAgICAgIlN0YXJ0IFk6IjogIlN0YXJ0IFkiLAorICAgICAgICAiVGFyZ2V0IFdpbmRvdyI6ICJNw6VsIiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKSI6ICJUaXR0ZWwgKHRvb2x0aXApIiwKKyAgICAgICAgIlRvcCI6ICJPdmVya2FudCIsCisgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIlRvcHByYW1tZSAoX3RvcCkiLAorICAgICAgICAiVHJhc2giOiAiU8O4cHBlbCIsCisgICAgICAgICJVcGxvYWQiOiAiTGFzdCBvcHAiLAorICAgICAgICAiVzoiOiAiTDoiLAorICAgICAgICAiV2lkdGgiOiAiQnJlZGRlIiwKKyAgICAgICAgIldpZHRoOiI6ICJCcmVkZGU6IiwKKyAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICJEdSBtw6UgdmVsZ2Ugbm9lIHRla3N0IGbDuHIgZHUga2FuIGxhZ2UgZW4gbnkgbGVua2UuIiwKKyAgICAgICAgIlpvb20iOiAiRm9yc3TDuHJyIgorICAgIH0sCisgICAgIkZpbmRSZXBsYWNlIjogeworICAgICAgICAiQ2FzZSBzZW5zaXRpdmUgc2VhcmNoIjogIlNraWxsZSBtZWxsb20gc3RvcmUgb2cgc23DpSBib2tzdGF2ZXIiLAorICAgICAgICAiQ2xlYXIiOiAiVMO4bSIsCisgICAgICAgICJEb25lIjogIkZlcmRpZyIsCisgICAgICAgICJFbnRlciB0aGUgdGV4dCB5b3Ugd2FudCB0byBmaW5kIjogIlNrcml2IGlubiB0ZWtzdGVuIGR1IMO4bnNrZXIgw6UgZmlubmUiLAorICAgICAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICJTw7hrIG9nIGVyc3RhdHQiLAorICAgICAgICAiSGlnaGxpZ2h0IjogIlV0aGV2IiwKKyAgICAgICAgIkluZm9ybSBhIHJlcGxhY2VtZW50IHdvcmQiOiAiVmVubmxpZ3N0IHNrcml2IGlubiBldCBlcnN0YXRuaW5nc29yZCAvIHNldG5pbmciLAorICAgICAgICAiTmV4dCI6ICJOZXN0ZSIsCisgICAgICAgICJPcHRpb25zIjogIlZhbGciLAorICAgICAgICAiUmVwbGFjZSB3aXRoOiI6ICJFcnN0YXR0IG1lZDoiLAorICAgICAgICAiU2VhcmNoIGZvcjoiOiAiU8O4ayBldHRlcjoiLAorICAgICAgICAiU3Vic3RpdHV0ZSBhbGwgb2NjdXJyZW5jZXMiOiAiRXJzdGF0dCBhbGxlIHRyZWZmIiwKKyAgICAgICAgIlN1YnN0aXR1dGUgdGhpcyBvY2N1cnJlbmNlPyI6ICJWZW5ubGlnc3QgYmVrcmVmdCBhdCBkdSB2aWwgZXJzdGF0dGU/IiwKKyAgICAgICAgIlVuZG8iOiAiVGlsYmFrZSIsCisgICAgICAgICJXaG9sZSB3b3JkcyBvbmx5IjogIkJhcmUgaGVsZSBvcmQiLAorICAgICAgICAiZm91bmQgaXRlbSI6ICJUcmVmZiIsCisgICAgICAgICJmb3VuZCBpdGVtcyI6ICJmb3Jla29tc3RlciBmdW5uZXQgaSBzw7hrZXQiLAorICAgICAgICAibm90IGZvdW5kIjogImlra2UgZnVubmV0IiwKKyAgICAgICAgInJlcGxhY2VkIGl0ZW0iOiAiZXJzdGF0dGV0IHRyZWZmIiwKKyAgICAgICAgInJlcGxhY2VkIGl0ZW1zIjogImZvcmVrb21zdGVyIGVyc3RhdHRldCIKKyAgICB9LAorICAgICJGb3JtT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgIkluc2VydCBhIEZvcm0uIjogIlNldHQgaW5uIHNramVtYSIsCisgICAgICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIkhha2Vib2tzIiwKKyAgICAgICAgIkluc2VydCBhIG11bHRpLWxpbmUgdGV4dCBmaWVsZC4iOiAiU2V0dCBpbm4gdGVrc3RmZWx0IG1lZCBmbGVyZSBsaW5qZXIiLAorICAgICAgICAiSW5zZXJ0IGEgcmFkaW8gYnV0dG9uLiI6ICJTZXR0IGlubiBlbiByYWRpb2tuYXBwIiwKKyAgICAgICAgIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iOiAiU2V0dCBpbm4gdmFsZ2Jva3MvIG5ldHJla2tzYm9rcyIsCisgICAgICAgICJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiI6ICJTZXR0IGlubiBzZW5kLS9udWxsc3RpbGwga25hcHAgZm9yIHNramVtYWV0IiwKKyAgICAgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiU2V0dCBpbm4gZm9ybWZlbHQiCisgICAgfSwKKyAgICAiRm9ybXMiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiQmlsZGV0cyBVUkw6IiwKKyAgICAgICAgIk5hbWUiOiAiTmF2biIsCisgICAgICAgICJOYW1lL0lEOiI6ICJOYXZuL0lEOiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPcHRpb25zIjogIlZhbGciLAorICAgICAgICAiU2l6ZToiOiAiU3TDuHJyZWxzZSIsCisgICAgICAgICJUZXh0OiI6ICJUZWtzdDoiCisgICAgfSwKKyAgICAiRnVsbFBhZ2UiOiB7CisgICAgICAgICJBbHRlcm5hdGUgc3R5bGUtc2hlZXQ6IjogIkFsdGVybmF0aXZ0IHN0aWxzZXR0OiIsCisgICAgICAgICJCYWNrZ3JvdW5kIGNvbG9yOiI6ICJCYWtncnVubnNmYXJnZToiLAorICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgICAgICJDaGFyYWN0ZXIgc2V0OiI6ICJUZWduc2V0dCIsCisgICAgICAgICJET0NUWVBFOiI6ICJET0NUWVBFOiIsCisgICAgICAgICJEZXNjcmlwdGlvbjoiOiAiQmVza3JpdmVsc2UiLAorICAgICAgICAiRG9jdW1lbnQgcHJvcGVydGllcyI6ICJFZ2Vuc2thcGVyIGZvciBkb2t1bWVudCIsCisgICAgICAgICJEb2N1bWVudCB0aXRsZToiOiAiVGl0dGVsIHDDpSBkb2t1bWVudDoiLAorICAgICAgICAiS2V5d29yZHM6IjogIk7DuGtrZWxvcmQiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUHJpbWFyeSBzdHlsZS1zaGVldDoiOiAiU3RpbHNldHQ6IiwKKyAgICAgICAgIlRleHQgY29sb3I6IjogIlRla3N0ZmFyZ2U6IgorICAgIH0sCisgICAgIkZ1bGxTY3JlZW4iOiB7CisgICAgICAgICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiTWFrc2ltZXIvTWluaW1lciBXWVNJV1lHIHZpbmR1IgorICAgIH0sCisgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAiQWxpZ25tZW50OiI6ICJKdXN0ZXJpbmc6IiwKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiQ2VudGVyIjogIlNlbnRyZXJ0IiwKKyAgICAgICAgIkNvbG9yOiI6ICJGYXJnZSIsCisgICAgICAgICJIZWlnaHQ6IjogIkjDuHlkZToiLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIkhvcmlzb250YWwgbGluamUiLAorICAgICAgICAiSW5zZXJ0L2VkaXQgaG9yaXpvbnRhbCBydWxlIjogIlNldHQgaW5uLyByZWRpZ2VyIGhvcmlzb250YWwgbGluamUiLAorICAgICAgICAiTGF5b3V0IjogIk9wcHNldHQiLAorICAgICAgICAiTGVmdCI6ICJWZW5zdHJlIiwKKyAgICAgICAgIk5vIHNoYWRpbmciOiAiSW5nZW4gc2t5Z2dlIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlJpZ2h0IjogIkjDuHlyZSIsCisgICAgICAgICJTdHlsZSI6ICJTdGlsIiwKKyAgICAgICAgIldpZHRoOiI6ICJCcmVkZGU6IiwKKyAgICAgICAgInBlcmNlbnQiOiAicHJvc2VudCIsCisgICAgICAgICJwaXhlbHMiOiAiUGlrc2VsIgorICAgIH0sCisgICAgIkh0bWxUaWR5IjogeworICAgICAgICAiSFRNTCBUaWR5IjogIkhUTUwgVGlkeSIsCisgICAgICAgICJUaWR5IGZhaWxlZC4gIENoZWNrIHlvdXIgSFRNTCBmb3Igc3ludGF4IGVycm9ycy4iOiAiVGlkeSBmZWlsZXQuIFNqZWtrIEhUTUwga29kZW4gZm9yIHN5bnRha3NmZWlsLiIKKyAgICB9LAorICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICJBbmdsZToiOiAiVmlua2VsOiIsCisgICAgICAgICJCYXNlbGluZSI6ICJHcnVubmxpbmplIiwKKyAgICAgICAgIkJvdHRvbSI6ICJCdW5uIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiQ2xlYXIiOiAiRmplcm4iLAorICAgICAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIkJlaG9sZCBwcm9wb3Nqb25lciIsCisgICAgICAgICJDcm9wIjogIkJlc2tqw6ZyIiwKKyAgICAgICAgIkRpcmVjdG9yeSI6ICJNYXBwZSIsCisgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiT3BwIGVuIG1hcHBlIiwKKyAgICAgICAgIkVkaXQiOiAiUmVkaWdlciIsCisgICAgICAgICJGaWxlbmFtZToiOiAiRmlsbmF2bjoiLAorICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIlZlbmQgaG9yaXNvbnRhbCIsCisgICAgICAgICJGbGlwIEltYWdlIjogIlZlbmQgYmlsZGUiLAorICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICJWZW5kIHZlcnRpa2FsIiwKKyAgICAgICAgIkZvbGRlciBOYW1lOiI6ICJNYXBwZW5hdm46IiwKKyAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICJCaWxkZWZvcm1hdGV0IEdJRiBlciBpa2tlIHN0w7h0dGV0LiIsCisgICAgICAgICJIZWlnaHQ6IjogIkjDuHlkZToiLAorICAgICAgICAiSW1hZ2UgRm9ybWF0IjogIkJpbGRlZm9ybWF0OiIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiU2V0dCBpbm4gYmlsZGUiLAorICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiRmVpbCByb3QtbWFwcGU6IiwKKyAgICAgICAgIkpQRUcgSGlnaCI6ICJKUEVHIGjDuHkiLAorICAgICAgICAiSlBFRyBMb3ciOiAiSlBFRyBsYXYiLAorICAgICAgICAiSlBFRyBNZWRpdW0iOiAiSlBFRyBtaWRkZWxzZSIsCisgICAgICAgICJMZWZ0IjogIlZlbnN0cmUiLAorICAgICAgICAiTG9jayI6ICJTcGVycmUiLAorICAgICAgICAiTWFya2VyIjogIk1hcmtlciIsCisgICAgICAgICJNZWFzdXJlIjogIk3DpWwiLAorICAgICAgICAiTWlkZGxlIjogIk1pZHRlbiIsCisgICAgICAgICJOZXcgRm9sZGVyIjogIk55IG1hcHBlIiwKKyAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICJJbmdldCBiaWxkZSBlciB0aWxnamVuZ2VsaWciLAorICAgICAgICAiTm8gSW1hZ2VzIEZvdW5kIjogIkluZ2VuIGJpbGRlciBmdW5uZXQiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJCaWxkZXBvc3Npc2pvbiIsCisgICAgICAgICJRdWFsaXR5OiI6ICJLdmFsaXRldCIsCisgICAgICAgICJSZWZyZXNoIjogIk9wcGZyaXNrIiwKKyAgICAgICAgIlJlc2l6ZSI6ICJFbmRyZSBzdMO4cnJlbHNlIiwKKyAgICAgICAgIlJpZ2h0IjogIkjDuHlyZSIsCisgICAgICAgICJSb3RhdGUiOiAiUm90ZXIiLAorICAgICAgICAiUm90YXRlIEltYWdlIjogIlJvdGVyIGJpbGRlIiwKKyAgICAgICAgIlNhdmUiOiAiTGFncmUiLAorICAgICAgICAiU3RhcnQgWDoiOiAiU3RhcnQgWCIsCisgICAgICAgICJTdGFydCBZOiI6ICJTdGFydCBZIiwKKyAgICAgICAgIlRvcCI6ICJPdmVya2FudCIsCisgICAgICAgICJUcmFzaCI6ICJTw7hwcGVsa3VydiIsCisgICAgICAgICJXOiI6ICJCOiIsCisgICAgICAgICJXaWR0aDoiOiAiQnJlZGRlOiIKKyAgICB9LAorICAgICJJbmxpbmVTdHlsZXIiOiB7CisgICAgICAgICJCYWNrZ3JvdW5kIjogIkJha2dydW5kIiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkdydW5ubGluamUiLAorICAgICAgICAiQm9yZGVyIjogIlJhbW1lIiwKKyAgICAgICAgIkJvdHRvbSI6ICJCdW5uIiwKKyAgICAgICAgIkNlbnRlciI6ICJTZW50cmVydCIsCisgICAgICAgICJDaGFyIjogIlRlZ24iLAorICAgICAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAiRmplcm4ga2FudGxpbmplciIsCisgICAgICAgICJGRyBDb2xvciI6ICJGRyBmYXJnZSIsCisgICAgICAgICJGbG9hdCI6ICJGbHl0ZW5kZSIsCisgICAgICAgICJIZWlnaHQiOiAiSMO4eWRlIiwKKyAgICAgICAgIkltYWdlIFVSTCI6ICJCaWxkZXRzIFVSTCIsCisgICAgICAgICJKdXN0aWZ5IjogIkp1c3RlciIsCisgICAgICAgICJMYXlvdXQiOiAiT3Bwc2V0dCIsCisgICAgICAgICJMZWZ0IjogIlZlbnN0cmUiLAorICAgICAgICAiTWFyZ2luIjogIk1hcmciLAorICAgICAgICAiTWlkZGxlIjogIk1pZHRlbiIsCisgICAgICAgICJOb25lIjogIkluZ2VuIiwKKyAgICAgICAgIlBhZGRpbmciOiAiTHVmdCIsCisgICAgICAgICJSaWdodCI6ICJIw7h5cmUiLAorICAgICAgICAiVGV4dCBhbGlnbiI6ICJKdXN0ZXIgdGVrc3QiLAorICAgICAgICAiVG9wIjogIk92ZXJrYW50IiwKKyAgICAgICAgIlZlcnRpY2FsIGFsaWduIjogIlZlcnRpa2FsIGp1c3RlcmluZyIsCisgICAgICAgICJXaWR0aCI6ICJCcmVkZGUiLAorICAgICAgICAicGVyY2VudCI6ICJwcm9zZW50IiwKKyAgICAgICAgInBpeGVscyI6ICJQaWtzZWwiCisgICAgfSwKKyAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAiQW5jaG9yIG5hbWUiOiAiQW5rZXJuYXZuIChJRCkiLAorICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgICAgICJEZWxldGUiOiAiRmplcm5lIiwKKyAgICAgICAgIkluc2VydCBBbmNob3IiOiAiU2V0dCBpbm4gYW5rZXIiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICJBbGlnbm1lbnQ6IjogIkp1c3RlcmluZzoiLAorICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIkFsdGVybmF0aXYgdGVrc3QiLAorICAgICAgICAiQmFzZWxpbmUiOiAiR3J1bm5saW5qZSIsCisgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJSYW1tZXR5a2tlbHNlOiIsCisgICAgICAgICJCb3R0b20iOiAiQnVubiIsCisgICAgICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAgICAgIkhvcml6b250YWw6IjogIkhvcmlzb250YWw6IiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIkZvcmjDpW5kc3Zpc25pbmc6IiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiQmlsZGV0cyBVUkw6IiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICJTZXR0IGlubiBiaWxkZSIsCisgICAgICAgICJMYXlvdXQiOiAiT3Bwc2V0dCIsCisgICAgICAgICJMZWZ0IjogIlZlbnN0cmUiLAorICAgICAgICAiTWlkZGxlIjogIk1pZHRlbiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIkJpbGRlcG9zc2lzam9uIiwKKyAgICAgICAgIlByZXZpZXciOiAiRm9yaMOlbmRzdmlzbmluZyIsCisgICAgICAgICJSaWdodCI6ICJIw7h5cmUiLAorICAgICAgICAiU3BhY2luZyI6ICJMdWZ0IiwKKyAgICAgICAgIlRvcCI6ICJPdmVya2FudCIsCisgICAgICAgICJWZXJ0aWNhbDoiOiAiVmVydGlrYWw6IgorICAgIH0sCisgICAgIkluc2VydE1hcnF1ZWUiOiB7CisgICAgICAgICJCYWNrZ3JvdW5kLUNvbG9yOiI6ICJCYWtncnVubnNmYXJnZToiLAorICAgICAgICAiQmVoYXZpb3I6IjogIk9wcGbDuHJzZWw6IiwKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiRGlyZWN0aW9uOiI6ICJSZXR0bmluZzoiLAorICAgICAgICAiSGVpZ2h0OiI6ICJIw7h5ZGU6IiwKKyAgICAgICAgIkluc2VydCBzY3JvbGxpbmcgbWFycXVlZSI6ICJTZXR0IGlubiBydWxsZXRla3N0IiwKKyAgICAgICAgIkxlZnQiOiAiVmVuc3RyZSIsCisgICAgICAgICJOYW1lIjogIk5hdm4iLAorICAgICAgICAiTmFtZS9JRDoiOiAiTmF2bi9JRDoiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUmlnaHQiOiAiSMO4eXJlIiwKKyAgICAgICAgIlNjcm9sbCBBbW91bnQ6IjogIkhhc3RpZ2hldDoiLAorICAgICAgICAiU2Nyb2xsIERlbGF5OiI6ICJGb3JzaW5rZWxzZToiLAorICAgICAgICAiU3BlZWQgQ29udHJvbCI6ICJFZ2Vuc2thcGVyIGZvciBoYXN0aWdoZXRlbiB0aWwgcnVsbGV0ZWtzdGVuIiwKKyAgICAgICAgIlRleHQ6IjogIlRla3N0OiIsCisgICAgICAgICJXaWR0aDoiOiAiQnJlZGRlOiIKKyAgICB9LAorICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIKKyAgICB9LAorICAgICJJbnNlcnRQYWdlYnJlYWsiOiB7CisgICAgICAgICJQYWdlIGJyZWFrIjogIlNldHQgaW5uIHNpZGVza2lmdCIKKyAgICB9LAorICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAiQWxpZ25tZW50OiI6ICJQbGFzc2VyaW5nIiwKKyAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJBbHRlcm5hdGl2IHRla3N0IiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkdydW5ubGluamUiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiUmFtbWV0eWtrZWxzZToiLAorICAgICAgICAiQm90dG9tIjogIkJ1bm4iLAorICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgICAgICJIZWlnaHQ6IjogIkjDuHlkZToiLAorICAgICAgICAiSG9yaXpvbnRhbDoiOiAiSG9yaXNvbnRhbDoiLAorICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiRm9yaMOlbmRzdmlzbmluZzoiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJCaWxkZXRzIFVSTDoiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIlNldHQgaW5uIGJpbGRlIiwKKyAgICAgICAgIkxheW91dCI6ICJPcHBzZXR0IiwKKyAgICAgICAgIkxlZnQiOiAiVmVuc3RyZSIsCisgICAgICAgICJNaWRkbGUiOiAiTWlkdGVuIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIsOFcG5lIGJpbGRlIGkgbnl0dCB2aW5kdSIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIkJpbGRlcG9zc2lzam9uIiwKKyAgICAgICAgIlByZXZpZXciOiAiRm9yaMOlbmRzdmlzbmluZyIsCisgICAgICAgICJSaWdodCI6ICJIw7h5cmUiLAorICAgICAgICAiU2l6ZSI6ICJTdMO4cnJlbHNlIiwKKyAgICAgICAgIlNwYWNpbmciOiAiTHVmdCBydW5kdCBiaWxkZXQiLAorICAgICAgICAiVG9wIjogIk92ZXJrYW50IiwKKyAgICAgICAgIlVwbG9hZCBmaWxlIjogIkxhc3Qgb3BwIGJpbGRlIiwKKyAgICAgICAgIlZlcnRpY2FsOiI6ICJWZXJ0aWthbDoiLAorICAgICAgICAiV2lkdGg6IjogIkJyZWRkZToiCisgICAgfSwKKyAgICAiSW5zZXJ0U21pbGV5IjogeworICAgICAgICAiSW5zZXJ0IFNtaWxleSI6ICJTZXR0IGlubiBzbWlsZXkiCisgICAgfSwKKyAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiSGlkZSBwcmV2aWV3IjogIlNranVsIGZvcmjDpW5kc3Zpc25pbmciLAorICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiU2V0dCBpbm4gc251dHQiLAorICAgICAgICAiSW5zZXJ0IGFzIjogIlNldHQgaW5uIHNvbSIsCisgICAgICAgICJTaG93IHByZXZpZXciOiAiVmlzIGZvcmjDpW5kc3Zpc25pbmciLAorICAgICAgICAiVmFyaWFibGUiOiAiVmFyaWFiZWwiCisgICAgfSwKKyAgICAiSW5zZXJ0U25pcHBldDIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIlNldHQgaW5uIHNudXR0IiwKKyAgICAgICAgIlZhcmlhYmxlIjogIlZhcmlhYmVsIgorICAgIH0sCisgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAiQWxpZ25tZW50OiI6ICJKdXN0ZXJpbmc6IiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkdydW5ubGluamUiLAorICAgICAgICAiQm9yZGVyIjogIlJhbW1lIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIlJhbW1ldHlra2Vsc2U6IiwKKyAgICAgICAgIkJvdHRvbSI6ICJCdW5uIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiQ2FwdGlvbiI6ICJPdmVyc2tyaWZ0IiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICJTZXR0IGlubiB0YWJlbGwiLAorICAgICAgICAiTGF5b3V0IjogIk9wcHNldHQiLAorICAgICAgICAiTGVmdCI6ICJWZW5zdHJlIiwKKyAgICAgICAgIk1pZGRsZSI6ICJNaWR0ZW4iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUGVyY2VudCI6ICJwcm9zZW50IiwKKyAgICAgICAgIlBpeGVscyI6ICJQaWtzZWwiLAorICAgICAgICAiUmlnaHQiOiAiSMO4eXJlIiwKKyAgICAgICAgIlNwYWNpbmciOiAiTHVmdCIsCisgICAgICAgICJUb3AiOiAiT3ZlcmthbnQiLAorICAgICAgICAiV2lkdGg6IjogIkJyZWRkZToiCisgICAgfSwKKyAgICAiTGFuZ01hcmtzIjogeworICAgICAgICAiJm1kYXNoOyBsYW5ndWFnZSAmbWRhc2g7IjogIiZtZGFzaDsgU3Byw6VrICZtZGFzaDsiLAorICAgICAgICAiRW5nbGlzaCI6ICJlbmdlbHNrIiwKKyAgICAgICAgIkZyZW5jaCI6ICJmcmFuc2siLAorICAgICAgICAiR3JlZWsiOiAiZ3Jla2lzayIsCisgICAgICAgICJMYXRpbiI6ICJsYXRpbiIsCisgICAgICAgICJsYW5ndWFnZSBzZWxlY3QiOiAiU3Byw6VrdmFsZyIKKyAgICB9LAorICAgICJMaW5rZXIiOiB7CisgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiRXIgZHUgc2lra2VyIHDDpSBhdCBkdSB2aWwgZmplcm5lIGxlbmtlbj8iLAorICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiUmVkaWdlciBsZW5rZSIsCisgICAgICAgICJOYW1lOiI6ICJOYXZuIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlNpemU6IjogIlN0w7hycmVsc2UiLAorICAgICAgICAiVGFyZ2V0OiI6ICJNw6VsOiIsCisgICAgICAgICJVUkw6IjogIkFkcmVzc2U6IiwKKyAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICJEdSBtw6UgbWFya2VyZSB0ZWtzdCBlbGxlciBldCBiaWxkZSBmw7hyIGR1IGthbiBsYWdlIGVuIGxlbmtlLiIKKyAgICB9LAorICAgICJMaXN0VHlwZSI6IHsKKyAgICAgICAgIkNob29zZSBsaXN0IHN0eWxlIHR5cGUgKGZvciBvcmRlcmVkIGxpc3RzKSI6ICJWZWxnIGxpc3RldHlwZSAoZm9yIG51bW1lcmVydGUgbGlzdGVyKSIsCisgICAgICAgICJEZWNpbWFsIG51bWJlcnMiOiAiRGVzaW1hbHRhbGwiLAorICAgICAgICAiTG93ZXIgZ3JlZWsgbGV0dGVycyI6ICJMb3dlciBncmVlayBsZXR0ZXJzIiwKKyAgICAgICAgIkxvd2VyIGxhdGluIGxldHRlcnMiOiAiTG93ZXIgbGF0aW4gbGV0dGVycyIsCisgICAgICAgICJMb3dlciByb21hbiBudW1iZXJzIjogIkxvd2VyIHJvbWFuIG51bWJlcnMiLAorICAgICAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICJVcHBlciBsYXRpbiBsZXR0ZXJzIiwKKyAgICAgICAgIlVwcGVyIHJvbWFuIG51bWJlcnMiOiAiVXBwZXIgcm9tYW4gbnVtYmVycyIKKyAgICB9LAorICAgICJNb290b29sc0ZpbGVNYW5hZ2VyIjogeworICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICJTZXR0IGlubiBsZW5rZSB0aWwgZmlsIiwKKyAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICJEdSBtw6UgbWFya2VyZSB0ZWtzdCBlbGxlciBldCBiaWxkZSBmw7hyIGR1IGthbiBsYWdlIGVuIGxlbmtlLiIKKyAgICB9LAorICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAiQWRkIEdVSURPIENvZGUgaW4gYSB0ZXh0Ym94IG9uIHRoZSBwYWdlIjogIlNldHQgaW5uIEdVSURPLWtvZGUgaSBldCB0ZWtzdGZlbHQgcMOlIHNpZGVuIiwKKyAgICAgICAgIkFkZCBNSURJIGxpbmsgdG8gYWxsb3cgc3R1ZGVudHMgdG8gaGVhciB0aGUgbXVzaWMiOiAiTGVnZyB0aWwgTUlESS1saW5rIGZvciBhdCBzdHVkZW50ZXIga2FuIGjDuHJlIG11c2lra2VuIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiRm9ybWF0IjogIkZvcm1hdCIsCisgICAgICAgICJHdWlkbyBjb2RlIjogIkdVSURPLWtvZGUiLAorICAgICAgICAiSW1hZ2UgUHJldmlldyI6ICJCaWxkZSBmb3Jow6VuZHN2aXNuaW5nIiwKKyAgICAgICAgIkltYWdlIGluIGFwcGxldCI6ICJCaWxkZSBpIGFwcGxldCIsCisgICAgICAgICJJbnNlcnQgR1VJRE8gTXVzaWMgTm90YXRpb24iOiAiU2V0dCBpbm4gR1VJRE8tbm90ZXIiLAorICAgICAgICAiTUlESSBGaWxlIjogIk1JRElmaWwiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3B0aW9ucyI6ICJNdWxpZ2hldGVyIiwKKyAgICAgICAgIlByZXZpZXciOiAiUHJldmlldyIsCisgICAgICAgICJTb3VyY2UgQ29kZSI6ICJLaWxkZWtvZGUiLAorICAgICAgICAiWm9vbSI6ICJGb3JzdMO4cnIiCisgICAgfSwKKyAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiCisgICAgfSwKKyAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQYXN0ZSBhcyBQbGFpbiBUZXh0IjogIkxpbSBpbm4gc29tIHJlbiB0ZWtzdCIKKyAgICB9LAorICAgICJQZXJzaXN0ZW50U3RvcmFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiQ29weSI6ICJLb3BpZXIiLAorICAgICAgICAiRGVsZXRlIjogIkZqZXJuZSIsCisgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiT3BwIGV0IG5pdsOlIiwKKyAgICAgICAgIkZpbGUgTWFuYWdlciI6ICJGaWxiZWhhbmRsZXIiLAorICAgICAgICAiRmlsZW5hbWUiOiAiRmlsbmF2bjoiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIlNldHQgaW5uIGJpbGRlIiwKKyAgICAgICAgIk5ldyBGb2xkZXIiOiAiTnkgbWFwcGUiLAorICAgICAgICAiU2F2ZSI6ICJMYWdyZSIsCisgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiRHUgbcOlIG1hcmtlcmUgdGVrc3QgZWxsZXIgZXQgYmlsZGUgZsO4ciBkdSBrYW4gbGFnZSBlbiBsZW5rZS4iCisgICAgfSwKKyAgICAiUXVpY2tUYWciOiB7CisgICAgICAgICJBVFRSSUJVVEVTIjogIkFUVFJJQlVUVEVSIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiQ29sb3JzIjogIkZhcmdlciIsCisgICAgICAgICJFbnRlciB0aGUgVEFHIHlvdSB3YW50IHRvIGluc2VydCI6ICJTa3JpdiBpbm4gdGFnZ2VuIGR1IHZpbCDDuG5za2VyIMOlIHNldHRlIGlubiIsCisgICAgICAgICJObyBDU1MgY2xhc3MgYXZhaWFibGUiOiAiSW5nZW4gQ1NTIGtsYXNzZSB0aWxnamVuZ2VsaWciLAorICAgICAgICAiT1BUSU9OUyI6ICJFR0VOU0tBUEVSIiwKKyAgICAgICAgIk9rIjogIk9LIiwKKyAgICAgICAgIlF1aWNrIFRhZyBFZGl0b3IiOiAiS2phcHAgVEFHRy1FZGl0b3IiLAorICAgICAgICAiVEFHcyI6ICJUQUdHZXIiLAorICAgICAgICAiVGhlcmUgYXJlIHNvbWUgdW5jbG9zZWQgcXVvdGUiOiAiRGV0IG1hbmdsZXIgZXQgaGVybWV0ZWduIiwKKyAgICAgICAgIlRoaXMgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBUQUciOiAiRGVubmUgYXR0cmlidXR0ZW4gZWtzaXN0ZXJlciBhbGxlcmVkZSBpIHRhZ2dlbiIsCisgICAgICAgICJZb3UgaGF2ZSB0byBzZWxlY3Qgc29tZSB0ZXh0IjogIkR1IG3DpSB2ZWxnZSBub2UgdGVrc3QiCisgICAgfSwKKyAgICAiU2F2ZVN1Ym1pdCI6IHsKKyAgICAgICAgIlNhdmUiOiAiTGFncmUiCisgICAgfSwKKyAgICAiU2V0SWQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAgICAgIkRlbGV0ZSI6ICJTbGV0dCIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJTZXQgSWQgYW5kIE5hbWUiOiAiU2V0dCBJRCBvZyBuYXZuIgorICAgIH0sCisgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiRGljdGlvbmFyeSI6ICJPcmRsaXN0ZSIsCisgICAgICAgICJGaW5pc2hlZCBsaXN0IG9mIG1pc3BlbGxlZCB3b3JkcyI6ICJGZXJkaWcgbWVkIGxpc3RlIG92ZXIgZmVpbHN0YXZlZGUgb3JkIiwKKyAgICAgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIsOFcG5lcyBpIG55IHNpZGUiLAorICAgICAgICAiSWdub3JlIjogIklnbm9yZXIiLAorICAgICAgICAiSWdub3JlIGFsbCI6ICJJZ25vcmVyIGFsbGUiLAorICAgICAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIkluZ2VuIGZlaWxzdGF2ZWRlIG9yZCBmdW5uZXQgbWVkIGRlbiB2YWxndGUgb3JkbGlzdGVuIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk9yaWdpbmFsIHdvcmQiOiAiT3BwcmlubmVsaWcgb3JkIiwKKyAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gb3BlbiB0aGlzIGxpbmsiOiAiw5huc2tlciBkdSDDpSDDpXBuZSBkZW5uZSBsZW5rZW4iLAorICAgICAgICAiUGxlYXNlIHdhaXQuICBDYWxsaW5nIHNwZWxsIGNoZWNrZXIuIjogIlZlbm5saWdzdCB2ZW50LCBrYWxsZXIgb3BwIHN0YXZla29udHJvbGxwcm9ncmFtbWV0IiwKKyAgICAgICAgIlBsZWFzZSB3YWl0OiBjaGFuZ2luZyBkaWN0aW9uYXJ5IHRvIjogIlZlbm5saWdzdCB2ZW50LCBlbmRyZXIgb3JkbGlzdGUgdGlsIiwKKyAgICAgICAgIlJlLWNoZWNrIjogIktqw7hyIHN0YXZla29udHJvbGwgcMOlIG55dHQiLAorICAgICAgICAiUmVwbGFjZSI6ICJFcnN0YXR0IiwKKyAgICAgICAgIlJlcGxhY2UgYWxsIjogIkVyc3RhdHQgYWxsZSIsCisgICAgICAgICJSZXBsYWNlIHdpdGgiOiAiRXJzdGF0dCBtZWQiLAorICAgICAgICAiU3BlbGwtY2hlY2siOiAiU3RhdmVrb250cm9sbCIsCisgICAgICAgICJTdWdnZXN0aW9ucyI6ICJGb3JzbGFnIiwKKyAgICAgICAgIlRoaXMgd2lsbCBkcm9wIGNoYW5nZXMgYW5kIHF1aXQgc3BlbGwgY2hlY2tlci4gIFBsZWFzZSBjb25maXJtLiI6ICJEZXR0ZSB2aWwgZHJvcHBlIGVuZHJpbmdlbmUgb2cgYXZicnl0ZSBzdGF2ZWtvbnRyb2xsZW4sIHZlbm5saWdzdCBiZWtyZWZ0LiIKKyAgICB9LAorICAgICJTdHlsaXN0IjogeworICAgICAgICAiU3R5bGVzIjogIlN0aWxlciIKKyAgICB9LAorICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgICAgICJDbGVhbiB1cCBIVE1MIjogIlZhc2sgSFRNTCBrb2RlIiwKKyAgICAgICAgIkdlbmVyYWwgdGlkeSB1cCBhbmQgY29ycmVjdGlvbiBvZiBzb21lIHByb2JsZW1zLiI6ICJHZW5lcmVsbCBvcHByeWRkaW5nIGkgSFRNTCBrb2RlbiBzYW10IGtvcnJpZ2VyaW5nIGF2IHR5cGlza2UgZmVpbCIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQbGVhc2Ugc2VsZWN0IGZyb20gdGhlIGZvbGxvd2luZyBjbGVhbmluZyBvcHRpb25zLi4uIjogIlZlbm5saWdzdCB2ZWxnIGJsYW5kdCBkZSBmb3Jza2plbGxpZ2UgbXVsaWdoZXRlbmUgw6UgdmFza2UvIHJ5ZGRlIGkgSFRNTCBrb2RlbiIsCisgICAgICAgICJSZW1vdmUgY3VzdG9tIGZvbnQgc2l6ZXMuIjogIkZqZXJuZSBlZ2VuZGVmaW5lcnRlIHNrcmlmdHN0w7hycmVsc2VyIChmb250IHNpemUpIiwKKyAgICAgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIkZqZXJuZSBlZ2VuZGVmaW5lcnRlIHNrcmlmdGZhcmdlciAoZm9udCBjb2xvcikiLAorICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0eXBlZmFjZXMgKGZvbnQgXCJzdHlsZXNcIikuIjogIkZqZXJuZSBlZ2VuZGVmaW5lcnRlIHNrcmlmdHR5cGVyIChmb250IGZhY2UpIiwKKyAgICAgICAgIlJlbW92ZSBsYW5nIGF0dHJpYnV0ZXMuIjogIkZqZXJuZSBsYW5nLWF0dHJpYnV0dGVyLiIKKyAgICB9LAorICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICJBbGwgZm91ciBzaWRlcyI6ICJBbGxlIGZpcmUgc2lkZXIiLAorICAgICAgICAiQm9yZGVycyI6ICJLYW50bGluamVyIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiQ2FwdGlvbiI6ICJPdmVyc2tyaWZ0IiwKKyAgICAgICAgIkNlbGwgUHJvcGVydGllcyI6ICJDZWxsZWVnZW5za2FwZXIiLAorICAgICAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogIkVnZW5za2FwZXIgZm9yIGNlbGxlIiwKKyAgICAgICAgIkRlbGV0ZSBjZWxsIjogIlNsZXR0IGNlbGxlIiwKKyAgICAgICAgIkRlbGV0ZSBjb2x1bW4iOiAiU2xldHQga29sb25uZSIsCisgICAgICAgICJEZWxldGUgcm93IjogIlNsZXR0IHJhZCIsCisgICAgICAgICJEZXNjcmlwdGlvbiI6ICJCZXNrcml2ZWxzZSIsCisgICAgICAgICJGcmFtZXMiOiAicmFtbWVyIiwKKyAgICAgICAgIkluc2VydCBjZWxsIGFmdGVyIjogIlNldHQgaW5uIGNlbGxlIGV0dGVyIiwKKyAgICAgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICJTZXR0IGlubiBjZWxsZSBmb3JhbiIsCisgICAgICAgICJJbnNlcnQgY29sdW1uIGFmdGVyIjogIlNreXQgaW5uIGtvbG9ubmUgZXR0ZXIiLAorICAgICAgICAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiOiAiU2t5dCBpbm4ga29sb25uZSBmw7hyIiwKKyAgICAgICAgIkluc2VydCByb3cgYWZ0ZXIiOiAiU2t5dCBpbm4gcmFkIGV0dGVyIiwKKyAgICAgICAgIkluc2VydCByb3cgYmVmb3JlIjogIlNreXQgaW5uIHJhZCBmb3JhbiIsCisgICAgICAgICJNZXJnZSBjZWxscyI6ICJTbMOlIHNhbW1lbiBjZWxsZXIiLAorICAgICAgICAiTm8gcnVsZXMiOiAiSW5nZW4gbGluamFsIiwKKyAgICAgICAgIk5vIHNpZGVzIjogIkluZ2VuIHNpZGVyIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBhZGRpbmciOiAiTHVmdCIsCisgICAgICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiS2xpa2sgaSBlbiBlbGxlciBhbm5lbiBjZWxsZSIsCisgICAgICAgICJSb3cgUHJvcGVydGllcyI6ICJFZ2Vuc2thcGVyIGZvciByYWQiLAorICAgICAgICAiUm93IHByb3BlcnRpZXMiOiAiRWdlbnNrYXBlciBmb3IgcmFkIiwKKyAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAiTGluamVyIHZpbCBzeW5lcyBtZWxsb20gYWxsZSByYWRlciBvZyBrb2xvbm5lciIsCisgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGNvbHVtbnMgb25seSI6ICJMaW5qZXIgdmlsIHN5bmVzIGt1biBtZWxsb20ga29sb25uZXIiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiByb3dzIG9ubHkiOiAiTGluamVyIHZpbCBzeW5lcyBrdW4gbWVsbG9tIHJhZGVyIiwKKyAgICAgICAgIlNwYWNpbmciOiAiTHVmdCIsCisgICAgICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogIkx1ZnQiLAorICAgICAgICAiU3BsaXQgY29sdW1uIjogIkRlbCBrb2xvbm5lIiwKKyAgICAgICAgIlNwbGl0IHJvdyI6ICJEZWwgcmFkIiwKKyAgICAgICAgIlN1bW1hcnkiOiAiU2FtbWVuZHJhZyIsCisgICAgICAgICJUYWJsZSBQcm9wZXJ0aWVzIjogIlRhYmVsbGVnZW5za2FwZXIiLAorICAgICAgICAiVGFibGUgcHJvcGVydGllcyI6ICJUYWJlbGxlZ2Vuc2thcGVyIiwKKyAgICAgICAgIlRoZSBib3R0b20gc2lkZSBvbmx5IjogIkJ1bm5lbiBrdW4iLAorICAgICAgICAiVGhlIGxlZnQtaGFuZCBzaWRlIG9ubHkiOiAiVmVuc3RyZXNpZGVuIGt1biIsCisgICAgICAgICJUaGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb25seSI6ICJIw7h5cmUtIG9nIHZlbnN0cmVzaWRlbiBrdW4iLAorICAgICAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIkjDuHlyZXNpZGVuIGt1biIsCisgICAgICAgICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSI6ICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSIsCisgICAgICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICJPdmVya2FudGVuIGt1biIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiWGluaGEgbmVrdGVyIMOlIHNsZXR0ZSBzaXN0ZSBjZWxsZW4gaSB0YWJlbGxlbi4iLAorICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICJYaW5oYSBuZWt0ZXIgw6Ugc2xldHRlIHNpc3RlIGtvbG9ubmVuIGkgdGFiZWxsZW4uIiwKKyAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iOiAiWGluaGEgbmVrdGVyIMOlIHNsZXR0ZSBzaXN0ZSByYWRlbiBpIHRhYmVsbGVuLiIsCisgICAgICAgICJwaXhlbHMiOiAiYmlsbGVkcHVua3RlciIKKyAgICB9LAorICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiSW5zZXJ0IHRlbXBsYXRlIjogIlNldHQgaW5uIHRlbXBsYXRlIgorICAgIH0sCisgICAgIlVuRm9ybWF0IjogeworICAgICAgICAiQWxsIjogIkhlbGUgZG9rdW1lbnRldCIsCisgICAgICAgICJBbGwgSFRNTDoiOiAiQWxsIEhUTUwta29kZToiLAorICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgICAgICJDbGVhbmluZyBBcmVhIjogIlZhc2tlb21yw6VkZSIsCisgICAgICAgICJDbGVhbmluZyBvcHRpb25zIjogIlZhc2tlbWV0b2RlciIsCisgICAgICAgICJGb3JtYXR0aW5nOiI6ICJGb3JtYXR0ZXJpbmc6IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBhZ2UgQ2xlYW5lciI6ICJEb2t1bWVudHZhc2tlciIsCisgICAgICAgICJTZWxlY3Qgd2hpY2ggdHlwZXMgb2YgZm9ybWF0dGluZyB5b3Ugd291bGQgbGlrZSB0byByZW1vdmUuIjogIlZlbGcgaHZhIHNsYWdzIGZvcm1hdHRlcmluZyBkdSDDuG5za2VyIMOlIGZqZXJuZS4iLAorICAgICAgICAiU2VsZWN0aW9uIjogIk1hcmtlcnQgb21yw6VkZSIKKyAgICB9LAorICAgICJYaW5oYSI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIk9tIGRlbm5lIGVkaXRvciIsCisgICAgICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIkJha2dydW5kc2ZhcmdlIiwKKyAgICAgICAgIkJvbGQiOiAiRmV0IiwKKyAgICAgICAgIkJ1bGxldGVkIExpc3QiOiAiUHVua3RsaXN0ZSIsCisgICAgICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICJGamVybmUgaW5saW5lIGZvbnQgc3Blc2lmaWthc2pvbmVyIiwKKyAgICAgICAgIkNvcHkgc2VsZWN0aW9uIjogIktvcGllciBvbXLDpWRlIiwKKyAgICAgICAgIkNyZWF0ZSBUb29sYmFyIjogIkxhZyB2ZXJrdMO4eWxpbmplIiwKKyAgICAgICAgIkN1cnJlbnQgc3R5bGUiOiAiTsOldsOmcmVuZGUgc3RpbCIsCisgICAgICAgICJDdXQgc2VsZWN0aW9uIjogIktsaXBwIHV0IG9tcsOlZGUiLAorICAgICAgICAiRGVjcmVhc2UgSW5kZW50IjogIlJlZHVzZXIgaW5ucnlrayIsCisgICAgICAgICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICJGcmEgdmVuc3RyZSBtb3QgaMO4eXJlIiwKKyAgICAgICAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIkZyYSBow7h5cmUgbW90IHZlbnN0cmUiLAorICAgICAgICAiRm9udCBDb2xvciI6ICJUZWtzdGZhcmdlIiwKKyAgICAgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIkhqZWxwIiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICJWYW5ucmV0dCBsaW5qZSIsCisgICAgICAgICJJbmNyZWFzZSBJbmRlbnQiOiAiw5hrZSBpbm5yeWtrIiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICJTZXR0IGlubiB0YWJlbGwiLAorICAgICAgICAiSW5zZXJ0IFdlYiBMaW5rIjogIkxhZyBsZW5rZSIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIlNldHQgaW5uIGJpbGRlIiwKKyAgICAgICAgIkluc2VydC9PdmVyd3JpdGUiOiAiU2V0dCBpbm4vT3ZlcnNrcml2IiwKKyAgICAgICAgIkl0YWxpYyI6ICJLdXJzaXYiLAorICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiTWlkdGp1c3RlciIsCisgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAiQmxva2tqdXN0ZXIiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIlZlbnN0cmVqdXN0ZXIiLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICJIw7h5cmVqdXN0ZXIiLAorICAgICAgICAiT3JkZXJlZCBMaXN0IjogIk51bW1lcmVydCBsaXN0ZSIsCisgICAgICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJMaW0gaW5uIiwKKyAgICAgICAgIlBhdGgiOiAiVGVrc3R2ZWxnZXIiLAorICAgICAgICAiUHJpbnQgZG9jdW1lbnQiOiAiU2tyaXYgdXQgZG9rdW1lbnRldCIsCisgICAgICAgICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJHasO4ciBvbSBzaXN0ZSBhbmdyaW5nIiwKKyAgICAgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIkZqZXJuIGZvcm1hdHRlcmluZyIsCisgICAgICAgICJTYXZlIGFzIjogIkxhZ3JlIHNvbSIsCisgICAgICAgICJTZWxlY3QgYWxsIjogIk1lcmsgYWx0IiwKKyAgICAgICAgIlNwbGl0IEJsb2NrIjogIlNlcGVyYXNqb25zYmxva2siLAorICAgICAgICAiU3RyaWtldGhyb3VnaCI6ICJHamVubm9tc3RyZWtldCIsCisgICAgICAgICJTdWJzY3JpcHQiOiAiTmVkc2Vua2V0IiwKKyAgICAgICAgIlN1cGVyc2NyaXB0IjogIk9wcGjDuHlldCIsCisgICAgICAgICJUb2dnbGUgQm9yZGVycyI6ICJTa3J1IGF2L3DDpSBoamVscGVsaW5qZXIgcMOlIHRhYmVsbGVyIiwKKyAgICAgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJWaXMga2lsZGVrb2RlIiwKKyAgICAgICAgIlVuZGVybGluZSI6ICJVbmRlcnN0cmVrZXQiLAorICAgICAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiQW5ncmVyIHNpc3RlIHJlZGlnZXJpbmciLAorICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICLDmG5za2VyIGR1IMOlIGZqZXJuZSBmYXJnZXIgcMOlIHNrcmlmdGVuIiwKKyAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIsOYbnNrZXIgZHUgw6UgZmplcm5lIHNrcmlmdCBzdMO4cnJlbHNlciIsCisgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiw5huc2tlciBkdSDDpSBmamVybmUgc2tyaWZ0dHlwZXIiLAorICAgICAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIkR1IGVyIGkgdGVrc3Rtb2R1cyAgS2xpa2sgcMOlIFs8Pl0gZm9yIMOlIGfDpSB0aWxiYWtlIHRpbCBXWVNJV0lHLiIKKyAgICB9LAorICAgICJfX05FV19UUkFOU0xBVElPTlNfXyI6IHsKKyAgICAgICAgIkFib3V0Qm94IjogeworICAgICAgICAgICAgIkNsb3NlIjogIjw8WGluaGE+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJDb3VudGVyIjogeworICAgICAgICAgICAgIi4uLiBpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIkhUTUwiOiAiIiwKKyAgICAgICAgICAgICJXb3JkcyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDb2xvclBpY2tlciI6IHsKKyAgICAgICAgICAgICJDbGljayBhIGNvbG9yLi4uIjogIiIsCisgICAgICAgICAgICAiU2FtcGxlIjogIiIsCisgICAgICAgICAgICAiV2ViIFNhZmU6ICI6ICIiLAorICAgICAgICAgICAgIkNsb3NlIjogIjw8WGluaGE+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAgICAgIkRlbGV0ZSBDZWxsIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAgICAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEZWZpbml0aW9uTGlzdCI6IHsKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGRlc2NyaXB0aW9uIjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiBsaXN0IjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiB0ZXJtIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRpYWxvZ3MiOiB7CisgICAgICAgICAgICAiU29tZSBUZXh0IEhlcmUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgICAgICJFZGl0IFRhZyBCeSBQZWciOiAiIiwKKyAgICAgICAgICAgICJUYWcgRWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVxdWF0aW9uIjogeworICAgICAgICAgICAgIiE9IjogIiIsCisgICAgICAgICAgICAiIWluIjogIiIsCisgICAgICAgICAgICAiJmd0Oy0iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiJmx0O3gmZ3Q7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAhYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYC5gICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAyYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDNgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA1YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDZgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgN2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA4YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgZWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7Jm5ic3A7YDFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Arezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLTpcXCBgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC17Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BDYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Bjb3NgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGxuYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BwaWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHNpbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGFuYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0aW1lc2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImcXVvdDt0ZXh0JnF1b3Q7IjogIiIsCisgICAgICAgICAgICAiJytmb3JtdWxhKyciOiAiIiwKKyAgICAgICAgICAgICIoKG4pLChrKSkiOiAiIiwKKyAgICAgICAgICAgICIoeCsxKS8oeC0xKSI6ICIiLAorICAgICAgICAgICAgIioiOiAiIiwKKyAgICAgICAgICAgICIqKiI6ICIiLAorICAgICAgICAgICAgIistIjogIiIsCisgICAgICAgICAgICAiLSZndDsiOiAiIiwKKyAgICAgICAgICAgICItJmx0OyI6ICIiLAorICAgICAgICAgICAgIi06IjogIiIsCisgICAgICAgICAgICAiLT0iOiAiIiwKKyAgICAgICAgICAgICIvLyI6ICIiLAorICAgICAgICAgICAgIi9fIjogIiIsCisgICAgICAgICAgICAiOi4iOiAiIiwKKyAgICAgICAgICAgICI9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIkAiOiAiIiwKKyAgICAgICAgICAgICJbW2EsYl0sW2MsZF1dIjogIiIsCisgICAgICAgICAgICAiXFxcXCI6ICIiLAorICAgICAgICAgICAgIlxcbkNsaWNrIGluIHRoZSBib3ggdG8gdXNlIHlvdXIga2V5Ym9hcmQgb3IgdXNlIHRoZSBidXR0b25zXFxuIjogIiIsCisgICAgICAgICAgICAiXl4iOiAiIiwKKyAgICAgICAgICAgICJeXl4iOiAiIiwKKyAgICAgICAgICAgICJfX3wiOiAiIiwKKyAgICAgICAgICAgICJffF8iOiAiIiwKKyAgICAgICAgICAgICJgIT1gIjogIiIsCisgICAgICAgICAgICAiYCFpbmAiOiAiIiwKKyAgICAgICAgICAgICJgJmFuZDtgIjogIiIsCisgICAgICAgICAgICAiYCZjYXA7YCI6ICIiLAorICAgICAgICAgICAgImAmY3VwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oy1gIjogIiIsCisgICAgICAgICAgICAiYCZndDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PSZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7eCZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZvcjtgIjogIiIsCisgICAgICAgICAgICAiYCZxdW90O3RleHQmcXVvdDtgIjogIiIsCisgICAgICAgICAgICAiYCgobiksKGspKWAiOiAiIiwKKyAgICAgICAgICAgICJgKHgrMSkvKHgtMSlgIjogIiIsCisgICAgICAgICAgICAiYCoqYCI6ICIiLAorICAgICAgICAgICAgImAqYCI6ICIiLAorICAgICAgICAgICAgImArLWAiOiAiIiwKKyAgICAgICAgICAgICJgLSZndDtgIjogIiIsCisgICAgICAgICAgICAiYC0mbHQ7YCI6ICIiLAorICAgICAgICAgICAgImAtOmAiOiAiIiwKKyAgICAgICAgICAgICJgLT1gIjogIiIsCisgICAgICAgICAgICAiYC8vYCI6ICIiLAorICAgICAgICAgICAgImAvX2AiOiAiIiwKKyAgICAgICAgICAgICJgOi5gIjogIiIsCisgICAgICAgICAgICAiYD0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImBAYCI6ICIiLAorICAgICAgICAgICAgImBbW2EsYl0sW2MsZF1dYCI6ICIiLAorICAgICAgICAgICAgImBcXFxcYCI6ICIiLAorICAgICAgICAgICAgImBfX3xgIjogIiIsCisgICAgICAgICAgICAiYF98X2AiOiAiIiwKKyAgICAgICAgICAgICJgQUFgIjogIiIsCisgICAgICAgICAgICAiYGFsZXBoYCI6ICIiLAorICAgICAgICAgICAgImBhbHBoYWAiOiAiIiwKKyAgICAgICAgICAgICJgYW5kYCI6ICIiLAorICAgICAgICAgICAgImBiYXJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJldGFgIjogIiIsCisgICAgICAgICAgICAiYENDYCI6ICIiLAorICAgICAgICAgICAgImBjY2FgIjogIiIsCisgICAgICAgICAgICAiYGNoaWAiOiAiIiwKKyAgICAgICAgICAgICJgZGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgZGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbGAiOiAiIiwKKyAgICAgICAgICAgICJgRGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkaWFtb25kYCI6ICIiLAorICAgICAgICAgICAgImBkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkeS9keGAiOiAiIiwKKyAgICAgICAgICAgICJgRUVgIjogIiIsCisgICAgICAgICAgICAiYGVwc2lgIjogIiIsCisgICAgICAgICAgICAiYGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZnJhYCI6ICIiLAorICAgICAgICAgICAgImBHYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdyYWRgIjogIiIsCisgICAgICAgICAgICAiYGhhcnJgIjogIiIsCisgICAgICAgICAgICAiYGhBcnJgIjogIiIsCisgICAgICAgICAgICAiYGhhdGFgIjogIiIsCisgICAgICAgICAgICAiYGlmYCI6ICIiLAorICAgICAgICAgICAgImBpbmAiOiAiIiwKKyAgICAgICAgICAgICJgaW50YCI6ICIiLAorICAgICAgICAgICAgImBpb3RhYCI6ICIiLAorICAgICAgICAgICAgImBrYXBwYWAiOiAiIiwKKyAgICAgICAgICAgICJgbGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBMYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYGxBcnJgIjogIiIsCisgICAgICAgICAgICAiYGxhcnJgIjogIiIsCisgICAgICAgICAgICAiYGxpbV8oeC0mZ3Q7b28pYCI6ICIiLAorICAgICAgICAgICAgImBsb2dgIjogIiIsCisgICAgICAgICAgICAiYG11YCI6ICIiLAorICAgICAgICAgICAgImBOTmAiOiAiIiwKKyAgICAgICAgICAgICJgbm5gIjogIiIsCisgICAgICAgICAgICAiYG5vdGAiOiAiIiwKKyAgICAgICAgICAgICJgbnVgIjogIiIsCisgICAgICAgICAgICAiYG8rYCI6ICIiLAorICAgICAgICAgICAgImBvLmAiOiAiIiwKKyAgICAgICAgICAgICJgTy9gIjogIiIsCisgICAgICAgICAgICAiYG9pbnRgIjogIiIsCisgICAgICAgICAgICAiYG9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBPbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgb29gIjogIiIsCisgICAgICAgICAgICAiYG9yYCI6ICIiLAorICAgICAgICAgICAgImBveGAiOiAiIiwKKyAgICAgICAgICAgICJgUGhpYCI6ICIiLAorICAgICAgICAgICAgImBwaGlgIjogIiIsCisgICAgICAgICAgICAiYFBpYCI6ICIiLAorICAgICAgICAgICAgImBwaWAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvZGAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvcGAiOiAiIiwKKyAgICAgICAgICAgICJgUHNpYCI6ICIiLAorICAgICAgICAgICAgImBwc2lgIjogIiIsCisgICAgICAgICAgICAiYFFRYCI6ICIiLAorICAgICAgICAgICAgImBxdWFkYCI6ICIiLAorICAgICAgICAgICAgImByQXJyYCI6ICIiLAorICAgICAgICAgICAgImByaG9gIjogIiIsCisgICAgICAgICAgICAiYHJvb3QobikoeClgIjogIiIsCisgICAgICAgICAgICAiYFJSYCI6ICIiLAorICAgICAgICAgICAgImBzZmFgIjogIiIsCisgICAgICAgICAgICAiYHNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBTaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgc3FydCh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgc3F1YXJlYCI6ICIiLAorICAgICAgICAgICAgImBzdGFja3JlbCgtJmd0OykoKylgIjogIiIsCisgICAgICAgICAgICAiYHN1YmAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VtYCI6ICIiLAorICAgICAgICAgICAgImBzdXBgIjogIiIsCisgICAgICAgICAgICAiYHN1cGVgIjogIiIsCisgICAgICAgICAgICAiYHRhdWAiOiAiIiwKKyAgICAgICAgICAgICJgVGhldGFgIjogIiIsCisgICAgICAgICAgICAiYHRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImBUVGAiOiAiIiwKKyAgICAgICAgICAgICJgdHRhYCI6ICIiLAorICAgICAgICAgICAgImB1YXJyYCI6ICIiLAorICAgICAgICAgICAgImB1bGFgIjogIiIsCisgICAgICAgICAgICAiYHVwc2lsb25gIjogIiIsCisgICAgICAgICAgICAiYHV1YCI6ICIiLAorICAgICAgICAgICAgImB2ZWNhYCI6ICIiLAorICAgICAgICAgICAgImB2dmAiOiAiIiwKKyAgICAgICAgICAgICJgeF8obW4pYCI6ICIiLAorICAgICAgICAgICAgImBYaWAiOiAiIiwKKyAgICAgICAgICAgICJgeGlgIjogIiIsCisgICAgICAgICAgICAiYHh4YCI6ICIiLAorICAgICAgICAgICAgImB6ZXRhYCI6ICIiLAorICAgICAgICAgICAgImBaWmAiOiAiIiwKKyAgICAgICAgICAgICJgfC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImB8LS1gIjogIiIsCisgICAgICAgICAgICAiYHw9PWAiOiAiIiwKKyAgICAgICAgICAgICJgfF9fYCI6ICIiLAorICAgICAgICAgICAgImB8fmAiOiAiIiwKKyAgICAgICAgICAgICJgfj1gIjogIiIsCisgICAgICAgICAgICAiYH58YCI6ICIiLAorICAgICAgICAgICAgImB+fmAiOiAiIiwKKyAgICAgICAgICAgICJBQSI6ICIiLAorICAgICAgICAgICAgImFsZXBoIjogIiIsCisgICAgICAgICAgICAiYWxwaGEiOiAiIiwKKyAgICAgICAgICAgICJhbmQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGggRm9ybXVsYSBJbnB1dCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aE1MIEV4YW1wbGUiOiAiIiwKKyAgICAgICAgICAgICJiYXJhIjogIiIsCisgICAgICAgICAgICAiQmFzZWQgb24gQVNDSUlNYXRoTUwgYnkiOiAiIiwKKyAgICAgICAgICAgICJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiYmJhIjogIiIsCisgICAgICAgICAgICAiYmV0YSI6ICIiLAorICAgICAgICAgICAgIkNDIjogIiIsCisgICAgICAgICAgICAiY2NhIjogIiIsCisgICAgICAgICAgICAiY2hpIjogIiIsCisgICAgICAgICAgICAiZGFyciI6ICIiLAorICAgICAgICAgICAgImRkb3RhIjogIiIsCisgICAgICAgICAgICAiZGVsIjogIiIsCisgICAgICAgICAgICAiRGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJkZWx0YSI6ICIiLAorICAgICAgICAgICAgImRpYW1vbmQiOiAiIiwKKyAgICAgICAgICAgICJkb3RhIjogIiIsCisgICAgICAgICAgICAiZHkvZHgiOiAiIiwKKyAgICAgICAgICAgICJFRSI6ICIiLAorICAgICAgICAgICAgImVwc2kiOiAiIiwKKyAgICAgICAgICAgICJldGEiOiAiIiwKKyAgICAgICAgICAgICJGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBBc2NpaU1hdGhNTCB2aXNpdCB0aGlzIHBhZ2U6IjogIiIsCisgICAgICAgICAgICAiRm9ybXVsYSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJmcmEiOiAiIiwKKyAgICAgICAgICAgICJnYW1tYSI6ICIiLAorICAgICAgICAgICAgIkdhbW1hIjogIiIsCisgICAgICAgICAgICAiZ3JhZCI6ICIiLAorICAgICAgICAgICAgImhBcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXJyIjogIiIsCisgICAgICAgICAgICAiaGF0YSI6ICIiLAorICAgICAgICAgICAgImlmIjogIiIsCisgICAgICAgICAgICAiaW4iOiAiIiwKKyAgICAgICAgICAgICJJbnB1dCI6ICIiLAorICAgICAgICAgICAgImludCI6ICIiLAorICAgICAgICAgICAgImludF9hXmJmKHgpZHgiOiAiIiwKKyAgICAgICAgICAgICJpb3RhIjogIiIsCisgICAgICAgICAgICAia2FwcGEiOiAiIiwKKyAgICAgICAgICAgICJMYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsYXJyIjogIiIsCisgICAgICAgICAgICAibEFyciI6ICIiLAorICAgICAgICAgICAgImxpbV8oeC0mZ3Q7b28pIjogIiIsCisgICAgICAgICAgICAibXUiOiAiIiwKKyAgICAgICAgICAgICJOTiI6ICIiLAorICAgICAgICAgICAgIm5uIjogIiIsCisgICAgICAgICAgICAibm5uIjogIiIsCisgICAgICAgICAgICAibm90IjogIiIsCisgICAgICAgICAgICAibnUiOiAiIiwKKyAgICAgICAgICAgICJvKyI6ICIiLAorICAgICAgICAgICAgIm8uIjogIiIsCisgICAgICAgICAgICAiTy8iOiAiIiwKKyAgICAgICAgICAgICJvaW50IjogIiIsCisgICAgICAgICAgICAib21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJPbWVnYSI6ICIiLAorICAgICAgICAgICAgIm9vIjogIiIsCisgICAgICAgICAgICAib3IiOiAiIiwKKyAgICAgICAgICAgICJveCI6ICIiLAorICAgICAgICAgICAgIlBoaSI6ICIiLAorICAgICAgICAgICAgInBoaSI6ICIiLAorICAgICAgICAgICAgInBpIjogIiIsCisgICAgICAgICAgICAiUGkiOiAiIiwKKyAgICAgICAgICAgICJwcm9kIjogIiIsCisgICAgICAgICAgICAicHJvcCI6ICIiLAorICAgICAgICAgICAgInBzaSI6ICIiLAorICAgICAgICAgICAgIlBzaSI6ICIiLAorICAgICAgICAgICAgIlFRIjogIiIsCisgICAgICAgICAgICAicXVhZCI6ICIiLAorICAgICAgICAgICAgInJBcnIiOiAiIiwKKyAgICAgICAgICAgICJyaG8iOiAiIiwKKyAgICAgICAgICAgICJyb290KG4pKHgpIjogIiIsCisgICAgICAgICAgICAiUlIiOiAiIiwKKyAgICAgICAgICAgICJzZmEiOiAiIiwKKyAgICAgICAgICAgICJzaWdtYSI6ICIiLAorICAgICAgICAgICAgIlNpZ21hIjogIiIsCisgICAgICAgICAgICAic3FydCh4KSI6ICIiLAorICAgICAgICAgICAgInNxdWFyZSI6ICIiLAorICAgICAgICAgICAgInN0YWNrcmVsKC0mZ3Q7KSgrKSI6ICIiLAorICAgICAgICAgICAgInN1YiI6ICIiLAorICAgICAgICAgICAgInN1YmUiOiAiIiwKKyAgICAgICAgICAgICJzdW0iOiAiIiwKKyAgICAgICAgICAgICJzdW1fKG49MSleb28iOiAiIiwKKyAgICAgICAgICAgICJzdXAiOiAiIiwKKyAgICAgICAgICAgICJzdXBlIjogIiIsCisgICAgICAgICAgICAidGF1IjogIiIsCisgICAgICAgICAgICAiVGhldGEiOiAiIiwKKyAgICAgICAgICAgICJ0aGV0YSI6ICIiLAorICAgICAgICAgICAgIlRUIjogIiIsCisgICAgICAgICAgICAidHRhIjogIiIsCisgICAgICAgICAgICAidWFyciI6ICIiLAorICAgICAgICAgICAgInVsYSI6ICIiLAorICAgICAgICAgICAgInVwc2lsb24iOiAiIiwKKyAgICAgICAgICAgICJ1dSI6ICIiLAorICAgICAgICAgICAgInV1dSI6ICIiLAorICAgICAgICAgICAgInZlY2EiOiAiIiwKKyAgICAgICAgICAgICJ2diI6ICIiLAorICAgICAgICAgICAgInZ2diI6ICIiLAorICAgICAgICAgICAgInheKG0rbikiOiAiIiwKKyAgICAgICAgICAgICJ4XyhtbikiOiAiIiwKKyAgICAgICAgICAgICJYaSI6ICIiLAorICAgICAgICAgICAgInhpIjogIiIsCisgICAgICAgICAgICAieHgiOiAiIiwKKyAgICAgICAgICAgICJ6ZXRhIjogIiIsCisgICAgICAgICAgICAiWloiOiAiIiwKKyAgICAgICAgICAgICJ8LSZndDsiOiAiIiwKKyAgICAgICAgICAgICJ8LS0iOiAiIiwKKyAgICAgICAgICAgICJ8PT0iOiAiIiwKKyAgICAgICAgICAgICJ8X18iOiAiIiwKKyAgICAgICAgICAgICJ8fiI6ICIiLAorICAgICAgICAgICAgIn49IjogIiIsCisgICAgICAgICAgICAifnwiOiAiIiwKKyAgICAgICAgICAgICJ+fiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGYW5jeVNlbGVjdHMiOiB7CisgICAgICAgICAgICAiJytvcHQudGV4dCsnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbmRSZXBsYWNlIjogeworICAgICAgICAgICAgIic7XHJcbiAgdmFyIHRhZ2MgPSAnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1PcGVyYXRpb25zIjogeworICAgICAgICAgICAgIkVudGVyIHRoZSBuYW1lIGZvciBuZXcgb3B0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiTWVzc2FnZSBTZW50IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIFNlbGVjdC4uLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGb3JtcyI6IHsKKyAgICAgICAgICAgICInb25DbGljayc9IjogIiIsCisgICAgICAgICAgICAiQWNjZXNzIEtleToiOiAiIiwKKyAgICAgICAgICAgICJBY3Rpb24gVVJMOiI6ICIiLAorICAgICAgICAgICAgIkJ1dHRvbiBTY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJDaGVja2VkIjogIiIsCisgICAgICAgICAgICAiQ29sdW1uczoiOiAiIiwKKyAgICAgICAgICAgICJEZWZhdWx0IHRleHQgKG9wdGlvbmFsKSI6ICIiLAorICAgICAgICAgICAgIkRpbWVuc2lvbnMiOiAiIiwKKyAgICAgICAgICAgICJEaXNhYmxlZCI6ICIiLAorICAgICAgICAgICAgIkVuY29kaW5nOiI6ICIiLAorICAgICAgICAgICAgIkZvciBDb250cm9sOiI6ICIiLAorICAgICAgICAgICAgIkZvcm0iOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IEZJRUxEU0VUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBJTlBVVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IFNFTEVDVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogVEVYVEFSRUEiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIGhhbmRsZXIgc2NyaXB0IjogIiIsCisgICAgICAgICAgICAiRm9ybSBOYW1lOiI6ICIiLAorICAgICAgICAgICAgIkdldCI6ICIiLAorICAgICAgICAgICAgIkhhcmQiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQgaW4gbnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJIVE1MLUZvcm0gdG8gQ0dJIChkZWZhdWx0KSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIHNvdXJjZSI6ICIiLAorICAgICAgICAgICAgIkluaXRpYWwgVGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IEZJRUxEU0VUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IElOUFVUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IExBQkVMIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFNFTEVDVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkphdmFzY3JpcHQgZm9yIGJ1dHRvbiBjbGljayI6ICIiLAorICAgICAgICAgICAgIkxhYmVsOiI6ICIiLAorICAgICAgICAgICAgIkxlZ2VuZDoiOiAiIiwKKyAgICAgICAgICAgICJNYXggbGVuZ3RoOiI6ICIiLAorICAgICAgICAgICAgIk1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWNjZXB0ZWQiOiAiIiwKKyAgICAgICAgICAgICJNZXRob2Q6IjogIiIsCisgICAgICAgICAgICAibXVsdGlwYXJ0IEZvcm0gRGF0YSAoRmlsZS1VcGxvYWQpIjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gc2VsZWN0IjogIiIsCisgICAgICAgICAgICAibmFtZSBvZiB0aGUgdGV4dGFyZWEiOiAiIiwKKyAgICAgICAgICAgICJub3JtYWwiOiAiIiwKKyAgICAgICAgICAgICJub3dyYXAiOiAiIiwKKyAgICAgICAgICAgICJPZmYiOiAiIiwKKyAgICAgICAgICAgICJQaHlzaWNhbCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciBhIExhYmVsIjogIiIsCisgICAgICAgICAgICAiUG9zdCI6ICIiLAorICAgICAgICAgICAgInByZSI6ICIiLAorICAgICAgICAgICAgIlJlYWQgT25seSI6ICIiLAorICAgICAgICAgICAgIlJvd3M6IjogIiIsCisgICAgICAgICAgICAiU2l6ZSBvZiB0ZXh0IGJveCBpbiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiU29mdCI6ICIiLAorICAgICAgICAgICAgIlRhYiBJbmRleDoiOiAiIiwKKyAgICAgICAgICAgICJUYXJnZXQgRnJhbWU6IjogIiIsCisgICAgICAgICAgICAiVVJMIG9mIGltYWdlIjogIiIsCisgICAgICAgICAgICAiVmFsdWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZToiOiAiIiwKKyAgICAgICAgICAgICJWaXJ0dWFsIjogIiIsCisgICAgICAgICAgICAiV2lkdGggaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJXcmFwIE1vZGU6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBOYW1lIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bGxQYWdlIjogeworICAgICAgICAgICAgIi4uLiI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChJU08tODg1OS01KSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChLT0k4LVIpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKFdJTkRPV1MtMTI1MSkiOiAiIiwKKyAgICAgICAgICAgICJVVEYtOCAocmVjb21tZW5kZWQpIjogIiIsCisgICAgICAgICAgICAid2VzdGVybiAoSVNPLTg4NTktMSkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiR2Vja28iOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAgICAgIiYjeDAwZDc7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgSG9yaXpvbnRhbCBSdWxlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgICAgICJDU1MgU3R5bGUiOiAiIiwKKyAgICAgICAgICAgICItIjogIjw8RXF1YXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydEltYWdlIjogeworICAgICAgICAgICAgIkFic2JvdHRvbSI6ICIiLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICIiLAorICAgICAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICIiLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiIiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0Tm90ZSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgZm9vdG5vdGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgTm90ZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQYWdlYnJlYWsiOiB7CisgICAgICAgICAgICAiUGFnZSBCcmVhayI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0IjogeworICAgICAgICAgICAgIlxcbiAgVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmdcXG4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICIiLAorICAgICAgICAgICAgIkxpbmsxIjogIiIsCisgICAgICAgICAgICAiTGluazIiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMyI6ICIiLAorICAgICAgICAgICAgIkxpbms0IjogIiIsCisgICAgICAgICAgICAiTGluazUiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgICAgICJBbGwgQ2F0ZWdvcmllcyI6ICIiLAorICAgICAgICAgICAgIkZpbHRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyBIVE1MIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIHRlbXBsYXRlIHZhcmlhYmxlIjogIiIsCisgICAgICAgICAgICAiT25seSBzZWFyY2ggd29yZCBiZWdpbm5pbmciOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIjw8Q2hhckNvdW50ZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgICAgICJDYXB0aW9uIGZvciB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIHBhZGRpbmc6IjogIiIsCisgICAgICAgICAgICAiQ2VsbCBzcGFjaW5nOiI6ICIiLAorICAgICAgICAgICAgIkNvbGxhcHNlIGJvcmRlcnM6IjogIiIsCisgICAgICAgICAgICAiQ29sczoiOiAiIiwKKyAgICAgICAgICAgICJFbSI6ICIiLAorICAgICAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJMYXlvdSI6ICIiLAorICAgICAgICAgICAgIk51bWJlciBvZiBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICIiLAorICAgICAgICAgICAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSBvZiB0aGUgYm9yZGVyIjogIiIsCisgICAgICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiV2lkdGggdW5pdCI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJSb3dzOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IgorICAgICAgICB9LAorICAgICAgICAiTGFuZ01hcmtzIjogeworICAgICAgICAgICAgIicsICciOiAiIgorICAgICAgICB9LAorICAgICAgICAiTGlua2VyIjogeworICAgICAgICAgICAgIihweCkiOiAiIiwKKyAgICAgICAgICAgICJBbmNob3ItTGluayI6ICIiLAorICAgICAgICAgICAgIkFuY2hvcjoiOiAiIiwKKyAgICAgICAgICAgICJFbWFpbCBBZGRyZXNzOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJMb2NhdGlvbiBCYXI6IjogIiIsCisgICAgICAgICAgICAiTWVudSBCYXI6IjogIiIsCisgICAgICAgICAgICAiTWVzc2FnZSBUZW1wbGF0ZToiOiAiIiwKKyAgICAgICAgICAgICJOZXcgV2luZG93IjogIiIsCisgICAgICAgICAgICAiT3JkaW5hcnkgTGluayI6ICIiLAorICAgICAgICAgICAgIlBvcHVwIFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlBvcHVwV2luZG93IjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJSZXNpemVhYmxlOiI6ICIiLAorICAgICAgICAgICAgIlNhbWUgV2luZG93IChqdW1wIG91dCBvZiBmcmFtZXMpIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsYmFyczoiOiAiIiwKKyAgICAgICAgICAgICJTaG93cyBPbiBIb3ZlciI6ICIiLAorICAgICAgICAgICAgIlN0YXR1cyBCYXI6IjogIiIsCisgICAgICAgICAgICAiU3ViamVjdDoiOiAiIiwKKyAgICAgICAgICAgICJUaXRsZToiOiAiIiwKKyAgICAgICAgICAgICJUb29sYmFyOiI6ICIiLAorICAgICAgICAgICAgIlVSTCBMaW5rIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIk9wZXJhIjogeworICAgICAgICAgICAgIk1BUksiOiAiIiwKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgdGV4dCBpbiBuZXcgcGFyYWdyYXBoIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlByZXNlcnZlU2NyaXB0cyI6IHsKKyAgICAgICAgICAgICJKYXZhU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiUEhQIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlF1aWNrVGFnIjogeworICAgICAgICAgICAgIicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbCc6ICciOiAiIgorICAgICAgICB9LAorICAgICAgICAiU2F2ZVN1Ym1pdCI6IHsKKyAgICAgICAgICAgICJpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIlJlYWR5IjogIiIsCisgICAgICAgICAgICAiU2F2aW5nLi4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNldElkIjogeworICAgICAgICAgICAgIklEL05hbWU6IjogIiIsCisgICAgICAgICAgICAiU2V0IElkL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSUQvTmFtZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiQ2xvc2luZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIkNsb3NpbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIkNvbnZlcnQgYWxsIHF1b3RlcyBhbmQgZGFzaGVzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIGF1dG9tYXRpYyByZXBsYWNlbWVudHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBTZWxlY3Rpb24gT25seSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIFNjb3BlIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHN0YW5kIGJ5IHdoaWxlIGNsZWFuaW5nIGluIHByb2Nlc3MuLi4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxpZ25tZW50IChsZWZ0L3JpZ2h0L2p1c3RpZnkpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgY2xhc3NlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgQWxsIEhUTUwgVGFncyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgc3R5bGVzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBlbXBoYXNpcyBhbmQgYW5ub3RhdGlvbnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIFBhcmFncmFwaHMiOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzLiI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UgZGlyZWN0aW9uYWwgcXVvdGUgbWFya3Mgd2l0aCBub24tZGlyZWN0aW9uYWwgcXVvdGUgbWFya3MuIjogIiIsCisgICAgICAgICAgICAiVmlnb3JvdXNseSBwdXJnZSBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlRhYmxlT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJDZWxsIFR5cGU6IjogIiIsCisgICAgICAgICAgICAiQ2VsbHMgZG93biI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIHRvIHRoZSByaWdodCwgYW5kIjogIiIsCisgICAgICAgICAgICAiRG8gTm90IENoYW5nZSI6ICIiLAorICAgICAgICAgICAgIkZyYW1lIGFuZCBib3JkZXJzIjogIiIsCisgICAgICAgICAgICAiSGVhZGVyICh0aCkiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBjdXJyZW50IGNlbGwgd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJOb3JtYWwgKHRkKSI6ICIiLAorICAgICAgICAgICAgIkNvbHVtbnMiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIlJvd3MiOiAiPDxGb3Jtcz4+IgorICAgICAgICB9LAorICAgICAgICAiVW5zYXZlZENoYW5nZXMiOiB7CisgICAgICAgICAgICAiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBlZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiV2ViS2l0IjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICI8PEdlY2tvPj4iCisgICAgICAgIH0sCisgICAgICAgICJYaW5oYSI6IHsKKyAgICAgICAgICAgICImIzgyMTI7IGZvbnQgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICImIzgyMTI7IHNpemUgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIjEgKDggcHQpIjogIiIsCisgICAgICAgICAgICAiMiAoMTAgcHQpIjogIiIsCisgICAgICAgICAgICAiMyAoMTIgcHQpIjogIiIsCisgICAgICAgICAgICAiNCAoMTQgcHQpIjogIiIsCisgICAgICAgICAgICAiNSAoMTggcHQpIjogIiIsCisgICAgICAgICAgICAiNiAoMjQgcHQpIjogIiIsCisgICAgICAgICAgICAiNyAoMzYgcHQpIjogIiIsCisgICAgICAgICAgICAiQWRkcmVzcyI6ICIiLAorICAgICAgICAgICAgIkFyaWFsIjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gY29udGVudCBwYXN0ZWQgZnJvbSBXb3JkIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICIiLAorICAgICAgICAgICAgIkNsb3NlIjogIiIsCisgICAgICAgICAgICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICIiLAorICAgICAgICAgICAgIkNvdXJpZXIgTmV3IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFN0YXR1c2JhciI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMCAoemVybykiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTEgLi4gQ1RSTC02IjogIiIsCisgICAgICAgICAgICAiQ1RSTC1BIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1CIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1DIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1FIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1JIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1KIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1MIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1OIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1SIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1TIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1VIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1WIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1YIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1ZIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1aIjogIiIsCisgICAgICAgICAgICAiRWRpdG9yIEhlbHAiOiAiIiwKKyAgICAgICAgICAgICJFTlRFUiI6ICIiLAorICAgICAgICAgICAgIkVycm9yIExvYWRpbmcgWGluaGEuICBEZXZlbG9wZXJzLCBjaGVjayB0aGUgRXJyb3IgQ29uc29sZSBmb3IgaW5mb3JtYXRpb24uIjogIiIsCisgICAgICAgICAgICAiRmluaXNoaW5nIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0dGVkIjogIiIsCisgICAgICAgICAgICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIiIsCisgICAgICAgICAgICAiR2VvcmdpYSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMiI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMyI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNCI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNiI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmdzIjogIiIsCisgICAgICAgICAgICAiSW1wYWN0IjogIiIsCisgICAgICAgICAgICAiSW5pdCBlZGl0b3Igc2l6ZSI6ICIiLAorICAgICAgICAgICAgImluc2VydCBsaW5lYnJlYWsiOiAiIiwKKyAgICAgICAgICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIENvcmUiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW5zIjogIiIsCisgICAgICAgICAgICAiTVMgV29yZCBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAibmV3IHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IENvbG9yIjogIiIsCisgICAgICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJTSElGVC1FTlRFUiI6ICIiLAorICAgICAgICAgICAgIlRhaG9tYSI6ICIiLAorICAgICAgICAgICAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICIiLAorICAgICAgICAgICAgIlRpbWVzIE5ldyBSb21hbiI6ICIiLAorICAgICAgICAgICAgIlRvdWNoIGhlcmUgZmlyc3QgdG8gYWN0aXZhdGUgZWRpdG9yLiI6ICIiLAorICAgICAgICAgICAgIlZlcmRhbmEiOiAiIiwKKyAgICAgICAgICAgICJXYWl0aW5nIGZvciBJZnJhbWUgdG8gbG9hZC4uLiI6ICIiLAorICAgICAgICAgICAgIldpbmdEaW5ncyI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJTZXQgQmFja2dyb3VuZCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDbGllbnRzaWRlU3BlbGxjaGVjayI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIENMSUVOVFNJREVTUEVMTENIRUNLIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrIHVzaW5nIGllU3BlbGwiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTAlIjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICIiLAorICAgICAgICAgICAgIjIwMCUiOiAiIiwKKyAgICAgICAgICAgICIyNSUiOiAiIiwKKyAgICAgICAgICAgICI1MCUiOiAiIiwKKyAgICAgICAgICAgICI3NSUiOiAiIiwKKyAgICAgICAgICAgICI+TGlzdCBWaWV3IjogIiIsCisgICAgICAgICAgICAiPlRodW1ibmFpbCBWaWV3IjogIiIsCisgICAgICAgICAgICAiQToiOiAiIiwKKyAgICAgICAgICAgICJEOiI6ICIiLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZpbGVzaXplOiI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciI6ICIiLAorICAgICAgICAgICAgIkdJRiI6ICIiLAorICAgICAgICAgICAgIkg6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBmb2xkZXIgc2l6ZSBsaW1pdCByZWFjaGVkLiBVcGxvYWQgZGlzYWJsZWQuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHZhbHVlIjogIiIsCisgICAgICAgICAgICAiUE5HIjogIiIsCisgICAgICAgICAgICAiUHJlc2V0IjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgbWFya2VyIGNvbG9yIjogIiIsCisgICAgICAgICAgICAiWDoiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJZOiI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbHRlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEZJTFRFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWx0ZXIiOiAiPDxJbnNlcnRTbmlwcGV0Mj4+IgorICAgICAgICB9LAorICAgICAgICAiSHRtbFRpZHkiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBdXRvLVRpZHkiOiAiIiwKKyAgICAgICAgICAgICJEb24ndCBUaWR5IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkltYWdlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElNQUdFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGbGlja3IgUGljdHVyZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmVzIjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBVc2VybmFtZS9FbWFpbCI6ICIiLAorICAgICAgICAgICAgIkltYWdlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkIjogIiIsCisgICAgICAgICAgICAiTm8gUGhvdG9zIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gVmlkZW9zIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiVGhpcyBTZXJ2ZXIiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVXNlcm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFZpZGVvIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFZpZGVvcyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJEOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiR0lGIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJIOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQTkciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJZOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE1hcnF1ZWUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTlNFUlRNQVJRVUVFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFsdGVybmF0ZSI6ICIiLAorICAgICAgICAgICAgIkNvbnRpbnVvdXMiOiAiIiwKKyAgICAgICAgICAgICJNYXJxdWVlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlNsaWRlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBub3QgZGVmaW5lZCI6ICIiLAorICAgICAgICAgICAgIiBPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICI8PEluc2VydEltYWdlPj4iCisgICAgICAgIH0sCisgICAgICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIxMjAlIjogIiIsCisgICAgICAgICAgICAiMTUwJSI6ICIiLAorICAgICAgICAgICAgIjgwJSI6ICIiLAorICAgICAgICAgICAgIkdVSURPIENvZGUiOiAiIiwKKyAgICAgICAgICAgICJXaXRoIE1vemlsbGEsIHRoZSBhcHBsZXQgd2lsbCBub3QgYmUgdmlzaWJsZSBpbiBlZGl0b3IsIGJ1dCBvbmx5IGluIFdlYiBwYWdlIGFmdGVyIHN1Ym1pdHRpbmcuIjogIiIsCisgICAgICAgICAgICAiWm9vbSA6IjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIjw8SW5zZXJ0SW1hZ2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgR2VhcnMgaW4gb3JkZXIgdG8gdXNlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UgYW5kIGNvbmZpZ3VyYXRpb24uIjogIiIsCisgICAgICAgICAgICAiRW5hYmxpbmcgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIkluc3RhbGwiOiAiIiwKKyAgICAgICAgICAgICJMZWFybiBBYm91dCBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIHJlbG9hZCB0aGUgcGFnZSwgY2F1c2luZyB5b3UgdG8gbG9zZSBhbnkgdW5zYXZlZCB3b3JrLiAgUHJlc3MgXCJPS1wiIHRvIHJlbG9hZC4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSB1c2VzIEdvb2dsZSBHZWFycyB0byBlbmFibGUgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZS4gIFdpdGggR2VhcnMgaW5zdGFsbGVkLCB5b3UgY2FuIHNhdmUgZHJhZnRzIG9mIHlvdXIgZG9jdW1lbnRzIG9uIHlvdXIgaGFyZCBkcml2ZSwgY29uZmlndXJlIFhpbmhhIHRvIGxvb2sgdGhlIHdheSB5b3Ugd2FudCwgYW5kIGNhcnJ5IHRoaXMgaW5mb3JtYXRpb24gd2hlcmV2ZXIgeW91IHVzZSBYaW5oYSBvbiB0aGUgd2ViLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQU1NlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbGU6ICI6ICIiLAorICAgICAgICAgICAgIkltcG9ydCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQZXJzaXN0ZW50U3RvcmFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkRldGFpbHMiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIEJyb3dzZXIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgICBUaGVyZSBDICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICBUaGVyZSBBICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvIFwiIFRoZXJlIEIgXCIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAnIFRoZXJlIEQgJyI6ICIiLAorICAgICAgICAgICAgIkxpc3Qgb2YgUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiTmV3IERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiT3BlbiI6ICIiLAorICAgICAgICAgICAgIk9wZW4gRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB5b3UnZCBsaWtlIHRvIGNyZWF0ZS4iOiAiIiwKKyAgICAgICAgICAgICJTYXZlIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGVyYXNlIGFueSB1bnNhdmVkIGNvbnRlbnQuICBJZiB5b3UncmUgY2VydGFpbiwgcGxlYXNlIGNsaWNrIE9LIHRvIGNvbnRpbnVlLiI6ICIiLAorICAgICAgICAgICAgIldlYiBVUkwiOiAiIiwKKyAgICAgICAgICAgICJDb25maXJtIjogIjw8UFNMb2NhbD4+IiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCI6ICI8PEluc2VydE5vdGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJIVE1MQXJlYSBTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiSW5mbyI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIjogIiIsCisgICAgICAgICAgICAicGxpeiB3ZWl0IDstKSI6ICIiLAorICAgICAgICAgICAgIlJldmVydCI6ICIiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrZXIiOiAiIgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvbmwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY3OTMxYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL25sLmpzCkBAIC0wLDAgKzEsMTU3NSBAQAorLy8gWGluaGEgTGFuZ3VhZ2UgQ29tYmluZWQgVHJhbnNsYXRpb24gRmlsZQorLy8KKy8vIExBTkc6ICJubCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElOU1RSVUNUSU9OUyBUTyBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gWW91ciB0cmFuc2xhdGlvbiBtdXN0IGJlIGluIFVURi04IENoYXJhY3RlciBFbmNvZGluZy4KKy8vCisvLyBUaGlzIGlzIGEgSlNPTiBlbmNvZGVkIGZpbGUgKHBsdXMgY29tbWVudHMpLCBzdHJpbmdzIHNob3VsZCBiZSBkb3VibGUtcXVvdGUKKy8vIG9ubHksIGRvIG5vdCB1c2Ugc2luZ2xlIHF1b3RlcyB0byBzdXJyb3VuZCBzdHJpbmdzIC0gImhlbGxvIiwgbm90ICdoZWxsbycKKy8vIGRvIG5vdCBoYXZlIGEgdHJhaWxpbmcgY29tbWEgYWZ0ZXIgdGhlIGxhc3QgZW50cnkgaW4gYSBzZWN0aW9uLgorLy8KKy8vIE9ubHkgZnVsbCBsaW5lIGNvbW1lbnRzIGFyZSBhbGxvd2VkICh0aGF0IGEgY29tbWVudHMgb2NjdXB5IGVudGlyZSBsaW5lcykuCisvLworLy8gU2VhcmNoIGZvciB0aGUgX19ORVdfVFJBTlNMQVRJT05TX18gc2VjdGlvbiBiZWxvdywgdGhpcyBpcyB3aGVyZSB5b3Ugd2lsbAorLy8gd2FudCB0byBmb2N1cywgdGhpcyBzZWN0aW9uIGluY2x1ZGVzIHRoaW5ncyB0aGF0IGRvIG5vdCBwcmVzZW50bHkgaGF2ZSBhIAorLy8gdHJhbnNsYXRpb24gb3IgZm9yIHdoaWNoIHRoZSB0cmFuc2xhdGlvbiBuZWVkcyB0byBiZSBjaGVja2VkIGZvciBhY2N1cmFjeS4KKy8vCisvLyBJbiB0aGUgTmV3IFRyYW5zbGF0aW9ucyBzZWN0aW9uIGEgdHJhbnNsYXRpb24gc3RyaW5nIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICIiCisvLyAgICAgVGhpcyBtZWFucyBpdCBpcyBub3QgdHJhbnNsYXRlZCB5ZXQsIGFkZCB5b3VyIHRyYW5zbGF0aW9uLi4uCisvLyAgICAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIktsaW5nb24gU3RyaW5nIEhlcmUiCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJUcmFuc2xhdGVkIFN0cmluZyBIZXJlIgorLy8gICAgIFRoaXMgbWVhbnMgdGhhdCBhbiBleGlzdGluZyB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcsIGluIHNvbWUgb3RoZXIKKy8vICAgICBzZWN0aW9uIGhhcyBiZWVuIGZvdW5kLCBhbmQgdXNlZC4gIENoZWNrIHRoYXQgaXQgaXMgYXBwcm9wcml0ZSBmb3IgdGhpcworLy8gICAgIHNlY3Rpb24gYW5kIGlmIGl0IGlzLCB0aGF0J3MgZmluZSBsZWF2ZSBpdCBhcyBpcywgb3RoZXJ3aXNlIGNoYW5nZSBhcworLy8gICAgIGFwcHJvcHJpYXRlLgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiPDxBbm90aGVyU2VjdGlvbj4+IgorLy8gICAgIFRoaXMgbWVhbnMgdXNlIHRoZSBzYW1lIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZyBhcyA8PEFub3RoZXJTZWN0aW9uPj4KKy8vICAgICB0aGlzIHNhdmVzIHlvdSByZS10cmFubGF0aW5nIHN0cmluZ3MuICBJZiB0aGUgQ29udGV4dCBvZiB0aGlzIHNlY3Rpb24KKy8vICAgICBhbmQgdGhlIGNvbnRleHQgb2YgQW5vdGhlclNlY3Rpb24gc2VlbSB0aGUgc2FtZSwgdGhhdCdzIGZpbmUgbGVhdmUgaXQKKy8vICAgICB1c2luZyB0aGF0IHRyYW5zbGF0aW9uLCBidXQgaWYgdGhpcyBzZWN0aW9uIG5lZWRzIGEgZGlmZmVyZW50IHRyYW5zbGF0aW9uLCAKKy8vICAgICB5b3UgY2FuIHByb3ZpZGUgaXQgYnkgcmVwbGFjaW5nIHRoZSBsaW5rICg8PEFub3RoZXJTZWN0aW9uPj4pIHdpdGggdGhhdAorLy8gICAgIG5ldyB0cmFuc2xhdGlvbi4gIEZvciBleGFtcGxlIC0gYSAiVGFibGUiIGluIHNheSAiRGF0YVBsdWdpbiIgaXMgCisvLyAgICAgcGVyaGFwcyB0cmFuc2xhdGVkIGRpZmZlcmVudGx5IHRvICJUYWJsZSIgaW4gIkZ1cm5pdHVyZVBsdWdpbiIuCisvLworLy8gVEVTVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBwbGFjZSB5b3VyIHRyYW5zbGF0aW9uIGZpbGUgb24geW91ciB3ZWJzZXJ2ZXIgc29tZXdoZXJlIGZvciBleGFtcGxlCisvLworLy8gICAveGluaGEvbGFuZy9tZXJnZWQvbmwuanMKKy8vCisvLyBhbmQgdGhlbiB0ZWxsIFhpbmhhIHdoZXJlIHRvIGdldCBpdCAoYmVmb3JlIGxvYWRpbmcgWGluaGFDb3JlLmpzKSBieSAKKy8vCisvLyAgX2VkaXRvcl9sYW5nICAgICAgICAgICAgICA9ICdubCc7CisvLyAgX2VkaXRvcl9sYW5nX21lcmdlZF9maWxlICA9ICcveGluaGEvbGFuZy9tZXJnZWQvbmwuanMnOworLy8KKy8vIFhpbmhhIHdpbGwgbG9hZCB5b3VyIG5ldyBsYW5ndWFnZSBkZWZpbml0aW9uLgorLy8KKy8vIFNVQk1JVFRJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgY3JlYXRlIGEgVGlja2V0IG9uIHRoZSBYaW5oYSB3ZWJzaXRlIGFuZCBhdHRhY2ggeW91ciB0cmFuc2xhdGlvbiAKKy8vIGZpbGUuCisvLworLy8gVGhlIFhpbmhhIGRldmVsb3BlcnMgd2lsbCB0YWtlIHlvdXIgZmlsZSBhbmQgdXNlIHRoZSAKKy8vICAgICBjb250cmliL2xjX3NwbGl0X21lcmdlZF9maWxlLnBocAorLy8gc2NyaXB0IHRvIGxvYWQgaXQgaW50byB0aGUgWGluaGEgZGlzdHJpYnV0aW9uLgorCit7CisgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgIkFiYnJldmlhdGlvbiI6ICJBZmtvcnRpbmciLAorICAgICAgICAiQ2FuY2VsIjogIkFubnVsZXJlbiIsCisgICAgICAgICJEZWxldGUiOiAiVmVyd2lqZGVyZW4iLAorICAgICAgICAiRXhwYW5zaW9uOiI6ICJVaXRicmVpZGluZzoiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiQWJvdXRCb3giOiB7CisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJPdmVyIGRlemUgZWRpdG9yIgorICAgIH0sCisgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iLAorICAgICAgICAiUmVtb3ZlIEN1cnJlbnQgQmFja2dyb3VuZCI6ICJIdWlkaWdlIEFjaHRlcmdyb25kIEFmYmVlbGRpbmcgVmVyd2lqZGVyZW4iLAorICAgICAgICAiU2V0IFBhZ2UgQmFja2dyb3VuZCBJbWFnZSI6ICJQYWdpbmEgQWNodGVyZ3JvbmQgQWZiZWVsZGluZyBJbnN0ZWxsZW4iLAorICAgICAgICAiU2V0IHBhZ2UgYmFja2dyb3VuZCBpbWFnZSI6ICJQYWdpbmEgYWNodGVyZ3JvbmQgYWZiZWVsZGluZyBpbnN0ZWxsZW4iCisgICAgfSwKKyAgICAiQ2hhckNvdW50ZXIiOiB7CisgICAgICAgICIuLi4gaW4gcHJvZ3Jlc3MiOiAiLi4uIHdvcmR0IHZlcndlcmt0IiwKKyAgICAgICAgIkNoYXJzIjogIlRla2VucyIsCisgICAgICAgICJXb3JkcyI6ICJXb29yZGVuIgorICAgIH0sCisgICAgIkNoYXJhY3Rlck1hcCI6IHsKKyAgICAgICAgIkluc2VydCBzcGVjaWFsIGNoYXJhY3RlciI6ICJTcGVjaWFhbCBjaGFyYWN0ZXIgaW52b2VnZW4iCisgICAgfSwKKyAgICAiQ2xpZW50c2lkZVNwZWxsY2hlY2siOiB7CisgICAgICAgICJTcGVsbCBDaGVjayB1c2luZyBpZVNwZWxsIjogIkVuZ2Vsc2Ugc3BlbGxpbmdzY29udHJvbGUgbWV0IGllU3BlbGwiCisgICAgfSwKKyAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICJDb2xvcjogIjogIktsZXVyIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAiQ19lbGwgUHJvcGVydGllcy4uLiI6ICJDX2VsZWlnZW5zY2hhcHBlbi4uLiIsCisgICAgICAgICJDaGVjX2sgTGluay4uLiI6ICJDb250cm9sZWVyIGh5cGVybGluX2suLi4iLAorICAgICAgICAiQ29weSI6ICJLb3Bpw6tyZW4iLAorICAgICAgICAiQ3JlYXRlIGEgbGluayI6ICJNYWFrIGVlbiBoeXBlcmxpbmsiLAorICAgICAgICAiQ3VycmVudCBVUkwgaXMiOiAiSHVpZGlnIFVSTCBpcyIsCisgICAgICAgICJDdXQiOiAiS25pcHBlbiIsCisgICAgICAgICJEZV9sZXRlIENvbHVtbiI6ICJLb2xvbSB2ZXJ3aWpkZXJlbiIsCisgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgY29sdW1uIjogIlZlcndpamRlciBkZSBodWlkaWdlIGtvbG9tIiwKKyAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCByb3ciOiAiVmVyd2lqZGVyIGRlIGh1aWRpZ2UgcmlqIiwKKyAgICAgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIkhvZSBrd2FtIGplIGhpZXI/IChBLlUuQi4gZG9vcmdldmVuISkiLAorICAgICAgICAiSV9uc2VydCBSb3cgQmVmb3JlIjogIlJpaiBpbnZvZWdlbiBib3ZlbiIsCisgICAgICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICJSaWogaW52b2VnZW4gb25kZXIiLAorICAgICAgICAiSW5zZXJ0IENfb2x1bW4gQWZ0ZXIiOiAiS29sb20gaW52b2VnZW4gbmEiLAorICAgICAgICAiSW5zZXJ0IF9Db2x1bW4gQmVmb3JlIjogIktvbG9tIGludm9lZ2VuIHZvb3IiLAorICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiVm9lZyBlZW4gbmlldXdlIGtvbG9tIGluIG5hIGRlIGh1aWRpZ2UiLAorICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIlZvZWcgZWVuIG5pZXV3ZSBrb2xvbSBpbiB2b29yIGRlIGh1aWRpZ2UiLAorICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiVm9lZyBlZW4gbmlldXdlIHJpaiBpbiBvbmRlciBkZSBodWlkaWdlIiwKKyAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICJWb2VnIGVlbiBuaWV1d2UgcmlqIGluIGJvdmVuIGRlIGh1aWRpZ2UiLAorICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiQ2VudHJlcmVuIiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICJVaXR2dWxsZW4iLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIkxpbmtzIHVpdGxpam5lbiIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIlJlY2h0cyB1aXRsaWpuZW4iLAorICAgICAgICAiTGluayBwb2ludHMgdG86IjogIkh5cGVybGluayB2ZXJ3aWpzdCBuYWFyOiIsCisgICAgICAgICJNYWtlIGxpbl9rLi4uIjogIk1hYWsgaHlwZXJsaW5fay4uLiIsCisgICAgICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIk9wZW5kIGRlemUgaHlwZXJsaW5rIGluIGVlbiBuaWV1dyB2ZW5zdGVyIiwKKyAgICAgICAgIlBhc3RlIjogIlBsYWtrZW4iLAorICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBlbGVtZW50OiI6ICJJcyBoZXQgd2Vya2VsaWprIGRlIGJlZG9lbGluZyBkaXQgZWxlbWVudCB0ZSB2ZXJ3aWpkZXJlbjoiLAorICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICJJcyBoZXQgd2Vya2VsaWprIGRlIGJlZG9lbGluZyBkaXQgZWxlbWVudCB0ZSB1bmxpbmtlbi4iLAorICAgICAgICAiUmVtb3ZlIHRoZSAkZWxlbSBFbGVtZW50Li4uIjogIlZlcndpamRlciBoZXQgJGVsZW0gZWxlbWVudC4uLiIsCisgICAgICAgICJSZW1vdmUgdGhpcyBub2RlIGZyb20gdGhlIGRvY3VtZW50IjogIlZlcndpamRlciBkaXQgcHVudCB2YW4gaGV0IGRvY3VtZW50IiwKKyAgICAgICAgIlJvX3cgUHJvcGVydGllcy4uLiI6ICJSaWplaWdlbnNjaGFfcHBlbi4uLiIsCisgICAgICAgICJTaG93IHRoZSBUYWJsZSBDZWxsIFByb3BlcnRpZXMgZGlhbG9nIjogIkxhYXQgZGUgdGFiZWwgY2VsZWlnZW5zY2hhcHBlbiBkaWFsb2cgemllbiIsCisgICAgICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICJMYWF0IGRlIHRhYmVsIGVpZ2Vuc2NoYXBwZW4gZGlhbG9nIHppZW4iLAorICAgICAgICAiU2hvdyB0aGUgVGFibGUgUm93IFByb3BlcnRpZXMgZGlhbG9nIjogIkxhYXQgZGUgdGFiZWwgcmlqZWlnZW5zY2hhcHBlbiBkaWFsb2cgemllbiIsCisgICAgICAgICJTaG93IHRoZSBpbWFnZSBwcm9wZXJ0aWVzIGRpYWxvZyI6ICJMYWF0IGhldCBhZmJlZWxkaW5nc2VpZ2Vuc2NoYXBwZW4gZGlhbG9nIHppZW4iLAorICAgICAgICAiVW5saW5rIHRoZSBjdXJyZW50IGVsZW1lbnQiOiAiVW5saW5rIGhldCBodWlkaWdlIGVsZW1lbnQiLAorICAgICAgICAiX0RlbGV0ZSBSb3ciOiAiUmlqIF92ZXJ3aWpkZXJlbiIsCisgICAgICAgICJfSW1hZ2UgUHJvcGVydGllcy4uLiI6ICJFaWdlbnNjaGFwcGVuIGFmYmVlbGRpbmcuLi4iLAorICAgICAgICAiX01vZGlmeSBMaW5rLi4uIjogIkh5cGVybGluX2sgYWFucGFzc2VuLi4uIiwKKyAgICAgICAgIl9SZW1vdmUgTGluay4uLiI6ICJWZV9yd2lqZGVyIGh5cGVybGluay4uLiIsCisgICAgICAgICJfVGFibGUgUHJvcGVydGllcy4uLiI6ICJfVGFiZWxlaWdlbnNjaGFwcGVuLi4uIgorICAgIH0sCisgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiV2lsdCB1IGRlemUgbGluayB3ZXJrZWxpamsgdmVyd2lqZGVyZW4/IiwKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIkh5cGVybGluayBpbnZvZWdlbi9hYW5wYXNzZW4iLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOaWV1dyB2ZW5zdGVyIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiR2VlbiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPdGhlciI6ICJBbmRlciIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiWmVsZmRlIGZyYW1lIChfc2VsZikiLAorICAgICAgICAiVGFyZ2V0OiI6ICJEb2VsOiIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogIlRpdGVsICh0b29sdGlwKToiLAorICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJCb3ZlbnN0ZSBmcmFtZSAoX3RvcCkiLAorICAgICAgICAiVVJMOiI6ICJVUkw6IgorICAgIH0sCisgICAgIkRlZmluaXRpb25MaXN0IjogeworICAgICAgICAiZGVmaW5pdGlvbiBkZXNjcmlwdGlvbiI6ICJkZWZpbml0aWUgb21zY2hyaWp2aW5nIiwKKyAgICAgICAgImRlZmluaXRpb24gbGlzdCI6ICJkZWZpbml0aWUgbGlqc3QiLAorICAgICAgICAiZGVmaW5pdGlvbiB0ZXJtIjogImRlZmluaXRpZSB0ZXJtIgorICAgIH0sCisgICAgIkR5bmFtaWNDU1MiOiB7CisgICAgICAgICJDaG9vc2Ugc3R5bGVzaGVldCI6ICJLaWVzIHN0eWxlc2hlZXQiLAorICAgICAgICAiRGVmYXVsdCI6ICJEZWZhdWx0IiwKKyAgICAgICAgIlVuZGVmaW5lZCI6ICJVbmdlZGVmaW5pZWVyZCIKKyAgICB9LAorICAgICJFZGl0VGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIkFubnVsZXJlbiIsCisgICAgICAgICJFZGl0IEhUTUwgZm9yIHNlbGVjdGVkIHRleHQiOiAiSFRNTCBiZXdlcmtlbiB2b29yIGdlc2VsZWN0ZWVyZGUgdGVrc3QiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiVGFnIEVkaXRvciI6ICJIVE1MIHRhZyBFZGl0b3IiCisgICAgfSwKKyAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICJBc2NpaU1hdGggRm9ybXVsYSBJbnB1dCI6ICJBc2NpaU1hdGggRm9ybXVsZSBJbnZvZXJlbiIsCisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAgICAgIkZvcm11bGEgRWRpdG9yIjogIkZvcm11bGUgSW52b2VyZW4iLAorICAgICAgICAiSW5wdXQiOiAiSW52b2VyIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlByZXZpZXciOiAiVm9vcmJlZWxkIgorICAgIH0sCisgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICJBbGlnbiI6ICJVaXRsaWpuZW4iLAorICAgICAgICAiQWx0IjogIkFsdCIsCisgICAgICAgICJCYXNlbGluZSI6ICJCYXNpcyIsCisgICAgICAgICJCb3JkZXIiOiAiS2FkZXIiLAorICAgICAgICAiQm9yZGVyIENvbG9yIjogIkthZGVya2xldXI6IiwKKyAgICAgICAgIkJvdHRvbSI6ICJPbmRlciIsCisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAgICAgIkNsZWFyIjogIldpc3NlbiIsCisgICAgICAgICJDb2xvciI6ICJLbGV1ciIsCisgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiUHJvcG9ydGllIGJlaG91ZGVuIiwKKyAgICAgICAgIkNvcHkiOiAiS29wacOrcmVuIiwKKyAgICAgICAgIkNyb3AiOiAiVWl0c25lZGVuIiwKKyAgICAgICAgIkN1dCI6ICJLbmlwcGVuIiwKKyAgICAgICAgIkRpcmVjdG9yeSI6ICJNYXAiLAorICAgICAgICAiRGlyZWN0b3J5IFVwIjogIkJvdmVubGlnZ2VuZGUgbWFwIiwKKyAgICAgICAgIkVkaXQiOiAiQmV3ZXJrZW4iLAorICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIkJlc3RhbmRzYmVoZWVyIiwKKyAgICAgICAgIkZpbGVuYW1lOiI6ICJCZXN0YW5kc25hYW06IiwKKyAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICJob3IuIHNwaWVnZWxlbiIsCisgICAgICAgICJGbGlwIEltYWdlIjogIkJlZWxkIHNwaWVnZWxlbiIsCisgICAgICAgICJGbGlwIFZlcnRpY2FsIjogInZlci4gc3BpZWdlbGVuIiwKKyAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICJHSUYtZm9ybWF0IG5pZXQgb25kZXJzdGV1bmQsIGJlZWxkYmV3ZXJraW5nIG5pZXQgb25kZXJzdGV1bmQuIiwKKyAgICAgICAgIkhlaWdodCI6ICJIb29nIiwKKyAgICAgICAgIkhlaWdodDoiOiAiSG9vZ3RlOiIsCisgICAgICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIkh5cGVsaW5rIHZhbiBiZXN0YW5kaW52b2VnZW4iLAorICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiT25nZWxkaWcgcGFkOiIsCisgICAgICAgICJKUEVHIEhpZ2giOiAiSlBFRyBob29nIiwKKyAgICAgICAgIkpQRUcgTG93IjogIkpQRUcgbGFhZyIsCisgICAgICAgICJKUEVHIE1lZGl1bSI6ICJKUEVHIG1pZGRlbiIsCisgICAgICAgICJMZWZ0IjogIkxpbmtzIiwKKyAgICAgICAgIkxvYWRpbmciOiAiTGFkZW4iLAorICAgICAgICAiTG9jayI6ICJPcC1zbG90IiwKKyAgICAgICAgIk1hcmdpbiI6ICJJbnNwcmluZ2VuIiwKKyAgICAgICAgIk1hcmtlciI6ICJNYXJrZXJlbiIsCisgICAgICAgICJNZWFzdXJlIjogIk9wbWV0ZW4iLAorICAgICAgICAiTWlkZGxlIjogIk1pZGRlbiIsCisgICAgICAgICJOZXcgRm9sZGVyIjogIk5pZXV3IG1hcCIsCisgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIk5pZXV3IHZlbnN0ZXIgKF9ibGFuaykiLAorICAgICAgICAiTm8gRmlsZXMgRm91bmQiOiAiR2VlbiBiZXN0YWFuZCBnZXZvbmRlbiIsCisgICAgICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiR2VlbiBiZWVsZCBiZXNjaGlrYmFhciIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIkdlZW4iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUGFkZGluZyI6ICJVaXR2dWxsZW4iLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJVaXRsaWpuZW4gdmFuIGRpdCBiZWVsZCIsCisgICAgICAgICJQcmV2aWV3IjogIlZvb3JiZWVsZCIsCisgICAgICAgICJRdWFsaXR5OiI6ICJLd2FsaXRlaXQiLAorICAgICAgICAiUmVmcmVzaCI6ICJWZXJuaWV1d2VuIiwKKyAgICAgICAgIlJlbmFtZSI6ICJOYWFtIHdpanppZ2VuIiwKKyAgICAgICAgIlJlc2l6ZSI6ICJGb3JtYWF0IHdpanppZ2VuIiwKKyAgICAgICAgIlJpZ2h0IjogIlJlY2h0cyIsCisgICAgICAgICJSb3RhdGUiOiAiRHJhYWllbiIsCisgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiQmVlbGQgZHJhYWllbiIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiWmVsZmRlIGZyYW1lIChfc2VsZikiLAorICAgICAgICAiU2F2ZSI6ICJPcHNsYWFuIiwKKyAgICAgICAgIlN0YXJ0IFg6IjogIlN0YXJ0IFgiLAorICAgICAgICAiU3RhcnQgWToiOiAiU3RhcnQgWSIsCisgICAgICAgICJUYXJnZXQgV2luZG93IjogIkRvZWwgdmVuc3RlciIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCkiOiAiVGl0ZWwgKHRvb2x0aXApIiwKKyAgICAgICAgIlRvcCI6ICJCb3ZlbiIsCisgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIkJvdmVuc3RlIGZyYW1lIChfdG9wKSIsCisgICAgICAgICJUcmFzaCI6ICJQcnVsbGVuYmFrIiwKKyAgICAgICAgIlVwbG9hZCI6ICJVcGxvYWQiLAorICAgICAgICAiVzoiOiAiVzoiLAorICAgICAgICAiV2lkdGgiOiAiQnJlZWQiLAorICAgICAgICAiV2lkdGg6IjogIkJyZWVkdGU6IiwKKyAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICJFZXJzdCB0ZWtzdCBzZWxlY3RlcmVuLiIsCisgICAgICAgICJab29tIjogIlZlcmdyb290L3ZlcmtsZWluIgorICAgIH0sCisgICAgIkZpbHRlciI6IHsKKyAgICAgICAgIkZpbHRlciI6ICJGaWx0ZXIiCisgICAgfSwKKyAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAiRXhhY3Qgem9la2VuIiwKKyAgICAgICAgIkNsZWFyIjogIkxlZWciLAorICAgICAgICAiRG9uZSI6ICJWb2x0b29pZW4iLAorICAgICAgICAiRW50ZXIgdGhlIHRleHQgeW91IHdhbnQgdG8gZmluZCI6ICJWb2VyIHRla3N0IGluIHdhYXIgamUgb3Agd2lsdCB6b2VrZW4iLAorICAgICAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICJab2VrIGVuIHZlcnZhbmciLAorICAgICAgICAiSGlnaGxpZ2h0IjogIk1hcmtlcmVuIiwKKyAgICAgICAgIkluZm9ybSBhIHJlcGxhY2VtZW50IHdvcmQiOiAiVm9lciBlZW4gdmVydmFuZyB3b29yZCBvZiB6aW4gaW4iLAorICAgICAgICAiTmV4dCI6ICJWb2xnZW5kZSIsCisgICAgICAgICJPcHRpb25zIjogIk9wdGllcyIsCisgICAgICAgICJSZXBsYWNlIHdpdGg6IjogIlZlcnZhbmcgbWV0OiIsCisgICAgICAgICJTZWFyY2ggZm9yOiI6ICJab2VrIG5hYXI6IiwKKyAgICAgICAgIlN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIjogIlZlcnZhbmcgYWxsZSBvdmVyZWVua29tc3RlbiIsCisgICAgICAgICJTdWJzdGl0dXRlIHRoaXMgb2NjdXJyZW5jZT8iOiAiRGV6ZSBvdmVyZWVua29tc3QgdmVydmFuZ2VuPyIsCisgICAgICAgICJVbmRvIjogIk9uZ2VkYWFuIG1ha2VuIiwKKyAgICAgICAgIldob2xlIHdvcmRzIG9ubHkiOiAiQWxsZWVuIGhlbGUgd29vcmRlbiIsCisgICAgICAgICJmb3VuZCBpdGVtIjogImdldm9uZGVuIG92ZXJlZW5rb21zdCIsCisgICAgICAgICJmb3VuZCBpdGVtcyI6ICJnZXZvbmRlbiBvdmVyZWVua29tc3RlbiIsCisgICAgICAgICJub3QgZm91bmQiOiAibmlldCBnZXZvbmRlbiIsCisgICAgICAgICJyZXBsYWNlZCBpdGVtIjogInZlcnZhbmdlbiBpdGVtIiwKKyAgICAgICAgInJlcGxhY2VkIGl0ZW1zIjogInZlcnZhbmdlbiBpdGVtcyIKKyAgICB9LAorICAgICJGb3JtT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgIkluc2VydCBhIEZvcm0uIjogIkZvcm11bGllciBpbnZvZWdlbiIsCisgICAgICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIkVlbiBjaGVja2JveCBpbnZvZWdlbiIsCisgICAgICAgICJJbnNlcnQgYSBtdWx0aS1saW5lIHRleHQgZmllbGQuIjogIkVlbiB0ZWtzdHZlbGQgbWV0IG1lZXJkZXJlIGxpam5lbiBpbnZvZWdlbiIsCisgICAgICAgICJJbnNlcnQgYSByYWRpbyBidXR0b24uIjogIkVlbiByYWRpbyBrbm9wIGludm9lZ2VuIiwKKyAgICAgICAgIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iOiAiRWVuIHNlbGVjdGllbGlqc3QgaW52b2VnZW4iLAorICAgICAgICAiSW5zZXJ0IGEgc3VibWl0L3Jlc2V0IGJ1dHRvbi4iOiAiRWVuIHZlcnplbmQvd2lzIGtub3AgaW52b2VnZW4iLAorICAgICAgICAiSW5zZXJ0IGEgdGV4dCwgcGFzc3dvcmQgb3IgaGlkZGVuIGZpZWxkLiI6ICJUZWtzdCwgd2FjaHR3b29yZCBvZiB2ZXJib3JnZW4gdmVsZCBpbnZvZWdlbiIKKyAgICB9LAorICAgICJGb3JtcyI6IHsKKyAgICAgICAgIidvbkNsaWNrJz0iOiAiJ29uQ2xpY2snPSIsCisgICAgICAgICJBY2Nlc3MgS2V5OiI6ICJUb2VnYW5ncyB0b2V0czoiLAorICAgICAgICAiQWN0aW9uIFVSTDoiOiAiQWN0aWUgVVJMOiIsCisgICAgICAgICJCdXR0b24gU2NyaXB0IjogIktub3Agc2NyaXB0IiwKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iLAorICAgICAgICAiQ2hlY2tlZCI6ICJDaGVja2VkIiwKKyAgICAgICAgIkNvbHVtbnM6IjogIktvbG9tbWVuOiIsCisgICAgICAgICJEZWZhdWx0IHRleHQgKG9wdGlvbmFsKSI6ICJTdGFuZGFhcmQgdGVrc3QgKG9wdGlvbmVlbCkiLAorICAgICAgICAiRGltZW5zaW9ucyI6ICJEaW1lbnRpZXMiLAorICAgICAgICAiRGlzYWJsZWQiOiAiVWl0Z2VzY2hha2VsZCIsCisgICAgICAgICJFbmNvZGluZzoiOiAiRW5jb2RlcmluZzoiLAorICAgICAgICAiRm9yIENvbnRyb2w6IjogIlZvb3IgY29udHJvbGU6IiwKKyAgICAgICAgIkZvcm0iOiAiRm9ybXVsaWVyIiwKKyAgICAgICAgIkZvcm0gRWxlbWVudDogRklFTERTRVQiOiAiRm9ybXVsaWVyIGVsZW1lbnQ6IEZJRUxEU0VUIiwKKyAgICAgICAgIkZvcm0gRWxlbWVudDogSU5QVVQiOiAiRm9ybXVsaWVyIGVsZW1lbnQ6IElOUFVUIiwKKyAgICAgICAgIkZvcm0gRWxlbWVudDogTEFCRUwiOiAiRm9ybXVsaWVyIGVsZW1lbnQ6IExBQkVMIiwKKyAgICAgICAgIkZvcm0gRWxlbWVudDogU0VMRUNUIjogIkZvcm11bGllciBlbGVtZW50OiBTRUxFQ1QiLAorICAgICAgICAiRm9ybSBFbGVtZW50OiBURVhUQVJFQSI6ICJGb3JtdWxpZXIgZWxlbWVudDogVEVYVEFSRUEiLAorICAgICAgICAiRm9ybSBOYW1lOiI6ICJGb3JtdWxpZXIgbmFhbWU6IiwKKyAgICAgICAgIkZvcm0gaGFuZGxlciBzY3JpcHQiOiAiRm9ybXVsaWVyIHNjcmlwdCIsCisgICAgICAgICJHZXQiOiAiR0VUIiwKKyAgICAgICAgIkhUTUwtRm9ybSB0byBDR0kgKGRlZmF1bHQpIjogIkhUTUwgZm9ybXVsaWVyIG5hYXIgQ0dJIChzdGFuZGFhcmQpIiwKKyAgICAgICAgIkhhcmQiOiAiSGFyZCIsCisgICAgICAgICJIZWlnaHQgaW4gbnVtYmVyIG9mIHJvd3MiOiAiSG9vZ3RlIGluIGFhbnRhbCB0ZWtlbnMiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJBZmJlZWxkaW5nIFVSTDoiLAorICAgICAgICAiSW1hZ2Ugc291cmNlIjogIkFmYmVlbGRpbmcgYnJvbiIsCisgICAgICAgICJJbml0aWFsIFRleHQ6IjogIlN0YXJ0IHRla3N0OiIsCisgICAgICAgICJKYXZhc2NyaXB0IGZvciBidXR0b24gY2xpY2siOiAiS25vcCBrbGlrIG1ldCBKYXZhU2NyaXB0IiwKKyAgICAgICAgIkxhYmVsOiI6ICJMYWJlbCIsCisgICAgICAgICJMZWdlbmQ6IjogIkxlZ2VuZDoiLAorICAgICAgICAiTWF4IGxlbmd0aDoiOiAiTWF4aW1hbGUgbGVuZ3RlOiIsCisgICAgICAgICJNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjY2VwdGVkIjogIk1heGltYWFsIGFhbnRhbCB0ZWtlbnMgdG9lZ2VzdGFhbiIsCisgICAgICAgICJNZXRob2Q6IjogIk1ldGhvZGU6IiwKKyAgICAgICAgIk5hbWUiOiAiTmFhbWUiLAorICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICJOYWFtIHZhbiBmb3JtdWxpZXIgaW52b2VyIiwKKyAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gc2VsZWN0IjogIk5hYW0gdmFuIGZvcm11bGllciBzZWxlY3QiLAorICAgICAgICAiTmFtZS9JRDoiOiAiTmFhbS9JRDoiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT2ZmIjogIlVpdCIsCisgICAgICAgICJPcHRpb25zIjogIk9wdGllcyIsCisgICAgICAgICJQaHlzaWNhbCI6ICJGeXNpZWsiLAorICAgICAgICAiUGxlYXNlIGVudGVyIGEgTGFiZWwiOiAiVm9lciBlZW4gTGFiZWwgaW4iLAorICAgICAgICAiUG9zdCI6ICJQT1NUIiwKKyAgICAgICAgIlJlYWQgT25seSI6ICJBbGxlZW4gbGV6ZW4iLAorICAgICAgICAiUm93czoiOiAiUmlqZW46IiwKKyAgICAgICAgIlNpemUgb2YgdGV4dCBib3ggaW4gY2hhcmFjdGVycyI6ICJHcm9vdHRlIHZhbiB0ZWtzdHZlbGQgaW4gdGVrZW5zIiwKKyAgICAgICAgIlNpemU6IjogIkdyb290dGU6IiwKKyAgICAgICAgIlNvZnQiOiAiWmFjaHQiLAorICAgICAgICAiVGFiIEluZGV4OiI6ICJUYWIgdm9sZ29yZGU6IiwKKyAgICAgICAgIlRhcmdldCBGcmFtZToiOiAiRG9lbCB2ZW5zdGVyOiIsCisgICAgICAgICJUZXh0OiI6ICJUZWtzdDoiLAorICAgICAgICAiVVJMIG9mIGltYWdlIjogIkFmYmVlbGRpbmcgVVJMIiwKKyAgICAgICAgIlZhbHVlIG9mIHRoZSBmb3JtIGlucHV0IjogIldhYXJkZSB2YW4gZm9ybXVsaWVyIGludm9lciIsCisgICAgICAgICJWYWx1ZToiOiAiV2FhcmRlOiIsCisgICAgICAgICJWaXJ0dWFsIjogIlZpcnR1ZWVsIiwKKyAgICAgICAgIldpZHRoIGluIG51bWJlciBvZiBjaGFyYWN0ZXJzIjogIkJyZWVkdGUgaW4gYWFudGFsIHRla2VucyIsCisgICAgICAgICJXcmFwIE1vZGU6IjogIlRlcnVnbG9vcDoiLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBOYW1lIjogIlZvZXIgZWVuIE5hYW0gaW4iLAorICAgICAgICAibXVsdGlwYXJ0IEZvcm0gRGF0YSAoRmlsZS1VcGxvYWQpIjogIk11bHRpcGFydCBmb3JtdWxpZXIgZGF0YShCZXN0YW5kcyB1cGxvYWQpIiwKKyAgICAgICAgIm5hbWUgb2YgdGhlIHRleHRhcmVhIjogIk5hYW0gdmFuIHRla3N0IGdlYmllZCIsCisgICAgICAgICJub3JtYWwiOiAibm9ybWFhbCIsCisgICAgICAgICJub3dyYXAiOiAiZ2VlbiB0ZXJ1Z2xvb3AiLAorICAgICAgICAicHJlIjogInByZSIKKyAgICB9LAorICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgIkFsdGVybmF0ZSBzdHlsZS1zaGVldDoiOiAiV2lzc2VsZW4gdmFuIHN0eWxlLXNoZWV0OiIsCisgICAgICAgICJCYWNrZ3JvdW5kIGNvbG9yOiI6ICJBY2h0ZXJncm9uZGtsZXVyOiIsCisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAgICAgIkRPQ1RZUEU6IjogIkRPQ1RZUEU6IiwKKyAgICAgICAgIkRlc2NyaXB0aW9uOiI6ICJCZXNjaHJpanZpbmc6IiwKKyAgICAgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAiRG9jdW1lbnRlaWdlbnNjaGFwcGVuIiwKKyAgICAgICAgIkRvY3VtZW50IHRpdGxlOiI6ICJEb2N1bWVudHRpdGVsOiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQcmltYXJ5IHN0eWxlLXNoZWV0OiI6ICJQcmltYWlyZSBzdHlsZS1zaGVldDoiLAorICAgICAgICAiVGV4dCBjb2xvcjoiOiAiVGVrc3RrbGV1cjoiCisgICAgfSwKKyAgICAiRnVsbFNjcmVlbiI6IHsKKyAgICAgICAgIk1heGltaXplL01pbmltaXplIEVkaXRvciI6ICJFZGl0b3IgbWF4aW1hbGlzZXJlbi92ZXJrbGVpbmVuIgorICAgIH0sCisgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAiQWxpZ25tZW50OiI6ICJVaXR2dWxsaW5nOiIsCisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAgICAgIkNlbnRlciI6ICJNaWRkZW4iLAorICAgICAgICAiQ29sb3I6IjogImtsZXVyIiwKKyAgICAgICAgIkhlaWdodDoiOiAiSG9vZ3RlOiIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiSG9yaXpvbnRhbGUgbGlqbiIsCisgICAgICAgICJJbnNlcnQvZWRpdCBob3Jpem9udGFsIHJ1bGUiOiAiSG9yaXpvbnRhbGUgbGlqbiBpbnZvZWdlbi9iZXdlcmtlbiIsCisgICAgICAgICJMYXlvdXQiOiAiV2VlcmdhdmUiLAorICAgICAgICAiTGVmdCI6ICJMaW5rcyIsCisgICAgICAgICJObyBzaGFkaW5nIjogIkdlZW4gc2NoYWR1dyIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJSaWdodCI6ICJSZWNodHMiLAorICAgICAgICAiU3R5bGUiOiAiU3R5bGUiLAorICAgICAgICAiV2lkdGg6IjogIkJyZWVkdGU6IiwKKyAgICAgICAgInBlcmNlbnQiOiAicHJvY2VudCIsCisgICAgICAgICJwaXhlbHMiOiAicGl4ZWxzIgorICAgIH0sCisgICAgIkh0bWxUaWR5IjogeworICAgICAgICAiVGlkeSBmYWlsZWQuICBDaGVjayB5b3VyIEhUTUwgZm9yIHN5bnRheCBlcnJvcnMuIjogIlRpZHkgbWlzbHVrdC4gQ29udHJvbGVlciBIVE1MIG9wIGZvdXRlbi4iCisgICAgfSwKKyAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAiQW5nbGU6IjogIkhvZWs6IiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkJhc2lzIiwKKyAgICAgICAgIkJvdHRvbSI6ICJPbmRlciIsCisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAgICAgIkNsZWFyIjogIkxlZWciLAorICAgICAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIlByb3BvcnRpZSBiZWhvdWRlbiIsCisgICAgICAgICJDcm9wIjogIlBhc3NlbmQgbWFrZW4iLAorICAgICAgICAiRGlyZWN0b3J5IjogIk1hcCIsCisgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiQm92ZW5saWdnZW5kZSBtYXAiLAorICAgICAgICAiRWRpdCI6ICJCZXdlcmtlbiIsCisgICAgICAgICJGaWxlbmFtZToiOiAiQmVzdGFuZHNuYWFtOiIsCisgICAgICAgICJGbGlwIEhvcml6b250YWwiOiAiaG9yLiBzcGllZ2VsZW4iLAorICAgICAgICAiRmxpcCBJbWFnZSI6ICJCZWVsZCBzcGllZ2VsZW4iLAorICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICJ2ZXIuIHNwaWVnZWxlbiIsCisgICAgICAgICJGb2xkZXIgTmFtZToiOiAiTWFwIG5hYW0iLAorICAgICAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIkdJRi1mb3JtYXQgbmlldCBvbmRlcnN0ZXVuZCwgYmVlbGRiZXdlcmtpbmcgbmlldCBvbmRlcnN0ZXVuZC4iLAorICAgICAgICAiSGVpZ2h0OiI6ICJIb29ndGU6IiwKKyAgICAgICAgIkltYWdlIEZvcm1hdCI6ICJCZWVsZGZvcm1hYXQ6IiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICJBZmJlZWxkaW5nIGludm9lZ2VuIiwKKyAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIk9uZ2VsZGlnIHBhZDoiLAorICAgICAgICAiSlBFRyBIaWdoIjogIkpQRUcgaG9vZyIsCisgICAgICAgICJKUEVHIExvdyI6ICJKUEVHIGxhYWciLAorICAgICAgICAiSlBFRyBNZWRpdW0iOiAiSlBFRyBtaWRkZW4iLAorICAgICAgICAiTGVmdCI6ICJMaW5rcyIsCisgICAgICAgICJMb2NrIjogIk9wLXNsb3QiLAorICAgICAgICAiTWFya2VyIjogIk1hcmtlcmVuIiwKKyAgICAgICAgIk1lYXN1cmUiOiAiT3BtZXRlbiIsCisgICAgICAgICJNaWRkbGUiOiAiTWlkZGVuIiwKKyAgICAgICAgIk5ldyBGb2xkZXIiOiAiTmlldXcgbWFwIiwKKyAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICJHZWVuIGJlZWxkIGJlc2NoaWtiYWFyIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiVWl0bGlqbmVuIHZhbiBkaXQgYmVlbGQiLAorICAgICAgICAiUXVhbGl0eToiOiAiS3dhbGl0ZWl0IiwKKyAgICAgICAgIlJlZnJlc2giOiAiVmVybmlldXdlbiIsCisgICAgICAgICJSZXNpemUiOiAiRm9ybWFhdCB3aWp6aWdlbiIsCisgICAgICAgICJSaWdodCI6ICJSZWNodHMiLAorICAgICAgICAiUm90YXRlIjogIkRyYWFpZW4iLAorICAgICAgICAiUm90YXRlIEltYWdlIjogIkJlZWxkIGRyYWFpZW4iLAorICAgICAgICAiU2F2ZSI6ICJPcHNsYWFuIiwKKyAgICAgICAgIlN0YXJ0IFg6IjogIlN0YXJ0IFgiLAorICAgICAgICAiU3RhcnQgWToiOiAiU3RhcnQgWSIsCisgICAgICAgICJUb3AiOiAiQm92ZW4iLAorICAgICAgICAiVHJhc2giOiAiUHJ1bGxlbmJhayIsCisgICAgICAgICJXOiI6ICJXOiIsCisgICAgICAgICJXaWR0aDoiOiAiQnJlZWR0ZToiCisgICAgfSwKKyAgICAiSW5saW5lU3R5bGVyIjogeworICAgICAgICAiQmFja2dyb3VuZCI6ICJBY2h0ZXJncm9uZCIsCisgICAgICAgICJCYXNlbGluZSI6ICJCYXNpcyIsCisgICAgICAgICJCb3JkZXIiOiAiS2FkZXIiLAorICAgICAgICAiQm90dG9tIjogIk9uZGVyIiwKKyAgICAgICAgIkNlbnRlciI6ICJNaWRkZW4iLAorICAgICAgICAiQ2hhciI6ICJLYXJha3RlciIsCisgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICJHZWVuIHJhbmRlbiIsCisgICAgICAgICJGRyBDb2xvciI6ICJWb29yZ3JvbmQiLAorICAgICAgICAiRmxvYXQiOiAiWndldmVuZCIsCisgICAgICAgICJIZWlnaHQiOiAiSG9vZyIsCisgICAgICAgICJJbWFnZSBVUkwiOiAiQWZiZWVsZGluZyBVUkwiLAorICAgICAgICAiSnVzdGlmeSI6ICJVaXR2dWxsZW4iLAorICAgICAgICAiTGF5b3V0IjogIldlZXJnYXZlIiwKKyAgICAgICAgIkxlZnQiOiAiTGlua3MiLAorICAgICAgICAiTWFyZ2luIjogIkluc3ByaW5nZW4iLAorICAgICAgICAiTWlkZGxlIjogIk1pZGRlbiIsCisgICAgICAgICJOb25lIjogIkdlZW4iLAorICAgICAgICAiUGFkZGluZyI6ICJDZWxtYXJnZSIsCisgICAgICAgICJSaWdodCI6ICJSZWNodHMiLAorICAgICAgICAiVGV4dCBhbGlnbiI6ICJUZXh0IHVpdGxpam5pbmciLAorICAgICAgICAiVG9wIjogIkJvdmVuIiwKKyAgICAgICAgIlZlcnRpY2FsIGFsaWduIjogIlZlcnRpa2FsZSB1aXRsaWpuaW5nIiwKKyAgICAgICAgIldpZHRoIjogIkJyZWVkIiwKKyAgICAgICAgInBlcmNlbnQiOiAicHJvY2VudCIsCisgICAgICAgICJwaXhlbHMiOiAicGl4ZWxzIgorICAgIH0sCisgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgIkFuY2hvciBuYW1lIjogIk5hYW0gKElEKSIsCisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAgICAgIkRlbGV0ZSI6ICJWZXJ3aWpkZXJlbiIsCisgICAgICAgICJJbnNlcnQgQW5jaG9yIjogIkFua2VyIGludm9lZ2VuIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkluc2VydEltYWdlIjogeworICAgICAgICAiQWxpZ25tZW50OiI6ICJVaXR2dWxsaW5nOiIsCisgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiQWx0ZXJuYXRpZXZlIHRla3N0OiIsCisgICAgICAgICJCYXNlbGluZSI6ICJCYXNpcyIsCisgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJSYW5kIGRpa3RlOiIsCisgICAgICAgICJCb3R0b20iOiAiT25kZXIiLAorICAgICAgICAiQ2FuY2VsIjogIkFubnVsZXJlbiIsCisgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiQWZiZWVsZGluZ3Nsb2NhdGllIChVUkwpIiwKKyAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIlZvb3IgYnJvd3NlcnMgd2Vsa2UgZ2VlbiBhZmJlZWxkaW5nZW4gb25kZXJzdGV1bmVuIiwKKyAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICJIb3Jpem9udGFsZSBydWltdGUiLAorICAgICAgICAiSG9yaXpvbnRhbDoiOiAiSG9yaXpvbnRhYWw6IiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIkFmYmVlbGRpbmdzdm9vcmJlZWxkOiIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIkFmYmVlbGRpbmcgVVJMOiIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiQWZiZWVsZGluZyBpbnZvZWdlbiIsCisgICAgICAgICJMYXlvdXQiOiAiV2VlcmdhdmUiLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJMZWVnIHZvb3IgZ2VlbiByYW5kIiwKKyAgICAgICAgIkxlZnQiOiAiTGlua3MiLAorICAgICAgICAiTWlkZGxlIjogIk1pZGRlbiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIlVpdGxpam5lbiB2YW4gZGl0IGJlZWxkIiwKKyAgICAgICAgIlByZXZpZXciOiAiVm9vcmJlZWxkIiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJBZmJlZWxkaW5nIGJla2lqa2VuIGluIG5pZXV3IHZlbnN0ZXIiLAorICAgICAgICAiUmlnaHQiOiAiUmVjaHRzIiwKKyAgICAgICAgIlNwYWNpbmciOiAibWFyZ2UiLAorICAgICAgICAiVG9wIjogIkJvdmVuIiwKKyAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiVmVydGljYWxlIHJ1aW10ZSIsCisgICAgICAgICJWZXJ0aWNhbDoiOiAiVmVydGljYWFsOiIKKyAgICB9LAorICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAiQWNodGVyZ3JvbmRrbGV1cjoiLAorICAgICAgICAiQmVoYXZpb3I6IjogIkdlZHJhZzoiLAorICAgICAgICAiQ2FuY2VsIjogIkFubnVsZXJlbiIsCisgICAgICAgICJEaXJlY3Rpb246IjogIlJpY2h0aW5nOiIsCisgICAgICAgICJIZWlnaHQ6IjogIkhvb2d0ZToiLAorICAgICAgICAiSW5zZXJ0IHNjcm9sbGluZyBtYXJxdWVlIjogIlNjcm9sbGVuZGUgdGVrc3QgaW52b2VnZW4iLAorICAgICAgICAiTGVmdCI6ICJMaW5rcyIsCisgICAgICAgICJOYW1lIjogIk5hYW1lIiwKKyAgICAgICAgIk5hbWUvSUQ6IjogIk5hYW0vSUQ6IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlJpZ2h0IjogIlJlY2h0cyIsCisgICAgICAgICJTY3JvbGwgQW1vdW50OiI6ICJTbmVsaGVpZDoiLAorICAgICAgICAiU2Nyb2xsIERlbGF5OiI6ICJWZXJ0cmFnaW5nOiIsCisgICAgICAgICJTcGVlZCBDb250cm9sIjogIlNuZWxoZWlkc2NvbnRyb2xlIiwKKyAgICAgICAgIlRleHQ6IjogIlRla3N0OiIsCisgICAgICAgICJXaWR0aDoiOiAiQnJlZWR0ZToiCisgICAgfSwKKyAgICAiSW5zZXJ0Tm90ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iCisgICAgfSwKKyAgICAiSW5zZXJ0UGFnZWJyZWFrIjogeworICAgICAgICAiUGFnZSBicmVhayI6ICJQYWdpbmEgZWluZGUiCisgICAgfSwKKyAgICAiSW5zZXJ0UGljdHVyZSI6IHsKKyAgICAgICAgIkFsaWdubWVudDoiOiAiUG9zaXRpZToiLAorICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIkFsdGVybmF0aWV2ZSB0ZWtzdDoiLAorICAgICAgICAiQmFzZWxpbmUiOiAiQmFzaXMiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiUmFuZCBkaWt0ZToiLAorICAgICAgICAiQm90dG9tIjogIk9uZGVyIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkFmYmVlbGRpbmdzbG9jYXRpZSAoVVJMKSIsCisgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJWb29yIGJyb3dzZXJzIHdlbGtlIGdlZW4gYWZiZWVsZGluZ2VuIG9uZGVyc3RldW5lbiIsCisgICAgICAgICJIZWlnaHQ6IjogIkhvb2d0ZToiLAorICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIkhvcml6b250YWxlIHJ1aW10ZSIsCisgICAgICAgICJIb3Jpem9udGFsOiI6ICJIb3Jpem9udGFhbDoiLAorICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiQWZiZWVsZGluZ3N2b29yYmVlbGQ6IiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiQWZiZWVsZGluZyBVUkw6IiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICJBZmJlZWxkaW5nIGludm9lZ2VuIiwKKyAgICAgICAgIkxheW91dCI6ICJXZWVyZ2F2ZSIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIkxlZWcgdm9vciBnZWVuIHJhbmQiLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vdCBkZWZpbmVkIjogIkxlZWcgdm9vciBuaWV0IGdlZGVmaW5pZWVyZCIsCisgICAgICAgICJMZWZ0IjogIkxpbmtzIiwKKyAgICAgICAgIk1pZGRsZSI6ICJNaWRkZW4iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJQb3NpdGllIHZhbiBkZSBhZmJlZWxkaW5nIiwKKyAgICAgICAgIlByZXZpZXciOiAiVm9vcmJlZWxkIiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJBZmJlZWxkaW5nIGJla2lqa2VuIGluIG5pZXV3IHZlbnN0ZXIiLAorICAgICAgICAiUmlnaHQiOiAiUmVjaHRzIiwKKyAgICAgICAgIlNpemUiOiAiR3Jvb3R0ZSIsCisgICAgICAgICJTcGFjaW5nIjogIk1hcmdlIiwKKyAgICAgICAgIlRvcCI6ICJCb3ZlbiIsCisgICAgICAgICJVcGxvYWQgZmlsZSI6ICJVcGxvYWQgYmVzdGFuZCIsCisgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIlZlcnRpY2FsZSBydWltdGUiLAorICAgICAgICAiVmVydGljYWw6IjogIlZlcnRpY2FhbDoiLAorICAgICAgICAiV2lkdGg6IjogIkJyZWVkdGU6IgorICAgIH0sCisgICAgIkluc2VydFNtaWxleSI6IHsKKyAgICAgICAgIkluc2VydCBTbWlsZXkiOiAiU21pbGV5IGludm9lZ2VuIgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAgICAgIkhpZGUgcHJldmlldyI6ICJWZXJiZXJnIHZvb3JiZWVsZCIsCisgICAgICAgICJJbnNlcnQgU25pcHBldCI6ICJTbmlwcGV0IGludm9lZ2VuIiwKKyAgICAgICAgIkluc2VydCBhcyI6ICJJbnZvZWdlbiBhbHMiLAorICAgICAgICAiU2hvdyBwcmV2aWV3IjogIkxhYXQgdm9vcmJlZWxkIHppZW4iLAorICAgICAgICAiVmFyaWFibGUiOiAiVmFyaWFiZWxlIgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAiQ2FuY2VsIjogIkFubnVsZXJlbiIsCisgICAgICAgICJGaWx0ZXIiOiAiRmlsdGVyIiwKKyAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIlNuaXBwZXQgaW52b2VnZW4iLAorICAgICAgICAiVmFyaWFibGUiOiAiVmFyaWFiZWxlIgorICAgIH0sCisgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAiQWxpZ25tZW50OiI6ICJVaXR2dWxsaW5nOiIsCisgICAgICAgICJCYXNlbGluZSI6ICJCYXNpcyIsCisgICAgICAgICJCb3JkZXIiOiAiS2FkZXIiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiUmFuZCBkaWt0ZToiLAorICAgICAgICAiQm90dG9tIjogIk9uZGVyIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iLAorICAgICAgICAiQ2FwdGlvbiI6ICJPcG1lcmtpbmciLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIlRhYmVsIGludm9lZ2VuIiwKKyAgICAgICAgIkxheW91dCI6ICJXZWVyZ2F2ZSIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIkxlZWcgdm9vciBnZWVuIHJhbmQiLAorICAgICAgICAiTGVmdCI6ICJMaW5rcyIsCisgICAgICAgICJNaWRkbGUiOiAiTWlkZGVuIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBlcmNlbnQiOiAicHJvY2VudCIsCisgICAgICAgICJQaXhlbHMiOiAicGl4ZWxzIiwKKyAgICAgICAgIlJpZ2h0IjogIlJlY2h0cyIsCisgICAgICAgICJSb3dzOiI6ICJSaWplbjoiLAorICAgICAgICAiU3BhY2luZyI6ICJtYXJnZSIsCisgICAgICAgICJUb3AiOiAiQm92ZW4iLAorICAgICAgICAiV2lkdGg6IjogIkJyZWVkdGU6IgorICAgIH0sCisgICAgIkxhbmdNYXJrcyI6IHsKKyAgICAgICAgIiZtZGFzaDsgbGFuZ3VhZ2UgJm1kYXNoOyI6ICImbWRhc2g7IHRhYWwgJm1kYXNoOyIsCisgICAgICAgICJFbmdsaXNoIjogIkVuZ2VscyIsCisgICAgICAgICJGcmVuY2giOiAiRnJhbnMiLAorICAgICAgICAiR3JlZWsiOiAiR3JpZWtzIiwKKyAgICAgICAgIkxhdGluIjogIkxhdGlqbiIsCisgICAgICAgICJsYW5ndWFnZSBzZWxlY3QiOiAiVGFhbGtldXplIgorICAgIH0sCisgICAgIkxpbmtlciI6IHsKKyAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICJXaWx0IHUgZGV6ZSBsaW5rIHdlcmtlbGlqayB2ZXJ3aWpkZXJlbj8iLAorICAgICAgICAiQ2FuY2VsIjogIkFubnVsZXJlbiIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSHlwZXJsaW5rIGludm9lZ2VuL2FhbnBhc3NlbiIsCisgICAgICAgICJOYW1lOiI6ICJOYWFtZSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJTaXplOiI6ICJHcm9vdHRlOiIsCisgICAgICAgICJUYXJnZXQ6IjogIkRvZWw6IiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIsCisgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiU2VsZWN0ZWVyIGRlIHRla3N0IHdlbGtlIGdlbGlua3QgbW9ldCB3b3JkZW4uIgorICAgIH0sCisgICAgIkxpc3RUeXBlIjogeworICAgICAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogIktpZXMgc3RpamwgdHlwZSAodm9vciBvcmRlcmVkIGxpc3RzKSIsCisgICAgICAgICJEZWNpbWFsIG51bWJlcnMiOiAiRGVjaW1hbGUgbnVtbWVycyIsCisgICAgICAgICJMb3dlciBncmVlayBsZXR0ZXJzIjogIkdyaWVrc2UgbGV0dGVycyIsCisgICAgICAgICJMb3dlciBsYXRpbiBsZXR0ZXJzIjogIkxhdGlqbnNlIGxldHRlcnMga2xlaW4iLAorICAgICAgICAiTG93ZXIgcm9tYW4gbnVtYmVycyI6ICJSb21laW5zZSBudW1tZXJzIGtsZWluIiwKKyAgICAgICAgIlVwcGVyIGxhdGluIGxldHRlcnMiOiAiTGF0aWpuc2UgbGV0dGVycyBncm9vdCIsCisgICAgICAgICJVcHBlciByb21hbiBudW1iZXJzIjogIlJvbWVpbnNlIG51bW1lcnMgZ3Jvb3QiCisgICAgfSwKKyAgICAiTW9vdG9vbHNGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiSHlwZWxpbmsgdmFuIGJlc3RhbmRpbnZvZWdlbiIsCisgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiU2VsZWN0ZWVyIGRlIHRla3N0IHdlbGtlIGdlbGlua3QgbW9ldCB3b3JkZW4uIgorICAgIH0sCisgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICJBZGQgR1VJRE8gQ29kZSBpbiBhIHRleHRib3ggb24gdGhlIHBhZ2UiOiAiR1VJRE8gY29kZSBpbiBlZW4gdGVrc3RnZWJpZWQgb3AgZGUgcGFnaW5hIGludm9lZ2VuIiwKKyAgICAgICAgIkFkZCBNSURJIGxpbmsgdG8gYWxsb3cgc3R1ZGVudHMgdG8gaGVhciB0aGUgbXVzaWMiOiAiTUlESSBsaW5rIGludm9lZ2VuIG9tIGRlIG11emllayB0ZSBiZWx1aXN0ZXJlbiIsCisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAgICAgIkZvcm1hdCI6ICJJbmRlbGluZyIsCisgICAgICAgICJHdWlkbyBjb2RlIjogIkdVSURPLWNvZGUiLAorICAgICAgICAiSW1hZ2UgUHJldmlldyI6ICJBZmJlZWxkaW5nc3Zvb3JiZWVsZCIsCisgICAgICAgICJJbWFnZSBpbiBhcHBsZXQiOiAiQWZiZWVsZGluZyBpbiBhcHBsZXQiLAorICAgICAgICAiSW5zZXJ0IEdVSURPIE11c2ljIE5vdGF0aW9uIjogIkdVSURPIG11emllayBub3RhdGllIGludm9lZ2VuIiwKKyAgICAgICAgIk1JREkgRmlsZSI6ICJNSURJIGJlc3RhbmQiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3B0aW9ucyI6ICJPcHRpZXMiLAorICAgICAgICAiUHJldmlldyI6ICJWb29yYmVlbGQiLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIkFmYmVlbGRpbmcgYmVraWprZW4gaW4gbmlldXcgdmVuc3RlciIsCisgICAgICAgICJTb3VyY2UgQ29kZSI6ICJCcm9uY29kZSIsCisgICAgICAgICJab29tIjogIlZlcmdyb290L3ZlcmtsZWluIgorICAgIH0sCisgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIgorICAgIH0sCisgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUGFzdGUgYXMgUGxhaW4gVGV4dCI6ICJLb3BpZWVyIGFscyBwbGF0dGUgdGVrc3QgKGdlZW4gb3BtYWFrKSIKKyAgICB9LAorICAgICJQZXJzaXN0ZW50U3RvcmFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iLAorICAgICAgICAiQ29weSI6ICJLb3Bpw6tyZW4iLAorICAgICAgICAiRGVsZXRlIjogIlZlcndpamRlcmVuIiwKKyAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICJCb3ZlbmxpZ2dlbmRlIG1hcCIsCisgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiQmVzdGFuZHNiZWhlZXIiLAorICAgICAgICAiRmlsZW5hbWUiOiAiQmVzdGFuZHNuYWFtOiIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiQWZiZWVsZGluZyBpbnZvZWdlbiIsCisgICAgICAgICJOZXcgRm9sZGVyIjogIk5pZXV3IG1hcCIsCisgICAgICAgICJTYXZlIjogIk9wc2xhYW4iLAorICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIlNlbGVjdGVlciBkZSB0ZWtzdCB3ZWxrZSBnZWxpbmt0IG1vZXQgd29yZGVuLiIKKyAgICB9LAorICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgIkFUVFJJQlVURVMiOiAiQVRUUklCVVRFTiIsCisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAgICAgIkNvbG9ycyI6ICJLbGV1cmVuIiwKKyAgICAgICAgIkVudGVyIHRoZSBUQUcgeW91IHdhbnQgdG8gaW5zZXJ0IjogIlZvZXIgZGUgVGFnIG5hYW0gaW4iLAorICAgICAgICAiTm8gQ1NTIGNsYXNzIGF2YWlhYmxlIjogIkdlZW4gQ1NTIGNsYXNzIGJlc2NoaWtiYWFyIiwKKyAgICAgICAgIk9QVElPTlMiOiAiT1BUSUVTIiwKKyAgICAgICAgIk9rIjogIk9rIiwKKyAgICAgICAgIlF1aWNrIFRhZyBFZGl0b3IiOiAiUXVpY2sgVGFnIEVkaXRvciIsCisgICAgICAgICJUQUdzIjogIlRBR3MiLAorICAgICAgICAiVGhlcmUgYXJlIHNvbWUgdW5jbG9zZWQgcXVvdGUiOiAiRXIgemlqbiBuaWV0IGdlc2xvdGVuIHF1b3RlcyIsCisgICAgICAgICJUaGlzIGF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgVEFHIjogIkRpdCBhdHRyaWJ1dXQgYmVzdGFhdCBhbCBpbiBkZSB0YWciLAorICAgICAgICAiWW91IGhhdmUgdG8gc2VsZWN0IHNvbWUgdGV4dCI6ICJTZWxlY3RlZXIgdGVrc3QiCisgICAgfSwKKyAgICAiU2F2ZVN1Ym1pdCI6IHsKKyAgICAgICAgIlJlYWR5IjogIktsYWFyIiwKKyAgICAgICAgIlNhdmUiOiAiT3BzbGFhbiIsCisgICAgICAgICJTYXZpbmcuLi4iOiAiQmV6aWcgbWV0IG9wc2xhYW4uLi4iLAorICAgICAgICAiaW4gcHJvZ3Jlc3MiOiAiYmV6aWcgbWV0IG9wc2xhYW4uLi4iCisgICAgfSwKKyAgICAiU2V0SWQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAgICAgIkRlbGV0ZSI6ICJWZXJ3aWpkZXJlbiIsCisgICAgICAgICJJRC9OYW1lOiI6ICJJRC9OYWFtOiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJTZXQgSUQvTmFtZSI6ICJJRC9OYWFtIGluc3RlbGxlbiIsCisgICAgICAgICJTZXQgSWQgYW5kIE5hbWUiOiAiSUQgZW4gTmFhbSBpbnN0ZWxsZW4iCisgICAgfSwKKyAgICAiU21hcnRSZXBsYWNlIjogeworICAgICAgICAiQ2xvc2luZ0RvdWJsZVF1b3RlcyI6ICLigJwiLAorICAgICAgICAiQ2xvc2luZ1NpbmdsZVF1b3RlIjogIuKAmCIsCisgICAgICAgICJDb252ZXJ0IGFsbCBxdW90ZXMgYW5kIGRhc2hlcyBpbiB0aGUgY3VycmVudCBkb2N1bWVudCI6ICJDb252ZXJ0ZWVyIGFsbGUgcXVvdGVzIGVuIHNjaHVpbmUgc3RyZXBlbiIsCisgICAgICAgICJFbmFibGUgYXV0b21hdGljIHJlcGxhY2VtZW50cyI6ICJBdXRvbWF0aXNjaCB2ZXJ2YW5nZW4gaW5zY2hha2VsZW4iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3BlbmluZ0RvdWJsZVF1b3RlcyI6ICLigJ4iLAorICAgICAgICAiT3BlbmluZ1NpbmdsZVF1b3RlIjogIuKAmiIsCisgICAgICAgICJTbWFydFJlcGxhY2UgU2V0dGluZ3MiOiAiU21hcnRSZXBsYWNlIEluc3RlbGxpbmdlbiIKKyAgICB9LAorICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlZXIiLAorICAgICAgICAiRGljdGlvbmFyeSI6ICJXb29yZGVuYm9layIsCisgICAgICAgICJGaW5pc2hlZCBsaXN0IG9mIG1pc3BlbGxlZCB3b3JkcyI6ICJrbGFhciBtZXQgZGUgbGlqc3QgdmFuIGZvdXRlbiB3b29yZGVuIiwKKyAgICAgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIklrIHphbCBoZXQgaW4gZWVuIG5pZXV3ZSBwYWdpbmEgb3BlbmVuLiIsCisgICAgICAgICJJZ25vcmUiOiAiT3ZlcnNsYWFuIiwKKyAgICAgICAgIklnbm9yZSBhbGwiOiAiYWxsZXMgb3ZlcnNsYWFuIiwKKyAgICAgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICJHZWVuIGZvdXRlbiBnZXZvbmRlbiBtZXQgZGl0IHdvb3JkZW5ib2VrLiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPcmlnaW5hbCB3b3JkIjogIk9yaWdpbmVsZSB3b29yZCIsCisgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIldlZXQgdSB6ZWtlciBkYXQgdSBkZXplIGxpbmsgd2lsdCBvcGVuZW4/IiwKKyAgICAgICAgIlBsZWFzZSB3YWl0LiAgQ2FsbGluZyBzcGVsbCBjaGVja2VyLiI6ICJFdmVuIHdhY2h0ZW4uIHNwZWxsIGNoZWNrZXIgd29yZHQgZ2VsYWRlbi4iLAorICAgICAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAiZXZlbiB3YWNodGVuOiB3b29yZGVuYm9layB3b3JkdCB2ZXJhbmRlcmQgbmFhciIsCisgICAgICAgICJSZS1jaGVjayI6ICJPcG5pZXV3IiwKKyAgICAgICAgIlJlcGxhY2UiOiAiVmVydmFuZ2VuIiwKKyAgICAgICAgIlJlcGxhY2UgYWxsIjogIkFsbGVzIHZlcnZhbmdlbiIsCisgICAgICAgICJSZXBsYWNlIHdpdGgiOiAiVmVydmFuZ2VuIG1ldCIsCisgICAgICAgICJSZXZlcnQiOiAiT21rZXJlbiIsCisgICAgICAgICJTcGVsbC1jaGVjayI6ICJTcGVsbC1jaGVjayIsCisgICAgICAgICJTdWdnZXN0aW9ucyI6ICJTdWdnZXN0aWUiLAorICAgICAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIkRpdCB6YWwgYWxsZSB2ZXJhbmRlcmluZ2VuIGFubnVsZXJlbiBlbiBkZSBzcGVsbCBjaGVja2VyIHNsdWl0ZW4uICBXZWV0IHUgaGV0IHpla2VyPyIKKyAgICB9LAorICAgICJTdHlsaXN0IjogeworICAgICAgICAiU3R5bGVzIjogIlN0eWxlIgorICAgIH0sCisgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAgICAgIkNsZWFuIHVwIEhUTUwiOiAiSFRNTCBvcHNjaG9uZW4iLAorICAgICAgICAiR2VuZXJhbCB0aWR5IHVwIGFuZCBjb3JyZWN0aW9uIG9mIHNvbWUgcHJvYmxlbXMuIjogIkFsZ2VtZWVuIG9wc2Nob25lbiBlbiBjb3JyZWN0aWUiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUGxlYXNlIHNlbGVjdCBmcm9tIHRoZSBmb2xsb3dpbmcgY2xlYW5pbmcgb3B0aW9ucy4uLiI6ICJTZWxlY3RlZXIgZGUgZ2V3ZW5zdGUgb3BzY2hvb24gb3B0aWVzLi4uIiwKKyAgICAgICAgIlJlbW92ZSBjdXN0b20gZm9udCBzaXplcy4iOiAiVmVyd2lqZGVyIGFhbmdlcGFzdGUgbGV0dGVyZ3Jvb3R0ZXMgKGZvbnQgc2l6ZSkiLAorICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0ZXh0IGNvbG9ycy4iOiAiVmVyd2lqZGVyIGFhbmdlcGFzdGUgdGVrc3RrbGV1cmVuIChmb250IGNvbG9yKSIsCisgICAgICAgICJSZW1vdmUgY3VzdG9tIHR5cGVmYWNlcyAoZm9udCBcInN0eWxlc1wiKS4iOiAiVmVyd2lqZGVyIGFhbmdlcGFzdGUgbGV0dGVydHlwZXMgKGZvbnQgZmFjZSkiLAorICAgICAgICAiUmVtb3ZlIGxhbmcgYXR0cmlidXRlcy4iOiAiVmVyd2lqZGVyIGFsbGUgdGFhbCAobGFuZykgYXR0cmlidXRlbi4iCisgICAgfSwKKyAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAiQWxsIGZvdXIgc2lkZXMiOiAiQWxsZSA0IHppamRlbiIsCisgICAgICAgICJCb3JkZXJzIjogIlJhbmRlbiIsCisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAgICAgIkNhcHRpb24iOiAiT3BtZXJraW5nIiwKKyAgICAgICAgIkNlbGwgUHJvcGVydGllcyI6ICJDZWxlaWdlbnNjaGFwcGVuIiwKKyAgICAgICAgIkNlbGwgcHJvcGVydGllcyI6ICJDZWxlaWdlbnNjaGFwcGVuIiwKKyAgICAgICAgIkNvbHVtbnMiOiAiS29sb21tZW46IiwKKyAgICAgICAgIkRlbGV0ZSBjZWxsIjogIkNlbCB2ZXJ3aWpkZXJlbiIsCisgICAgICAgICJEZWxldGUgY29sdW1uIjogIktvbG9tIHZlcndpamRlcmVuIiwKKyAgICAgICAgIkRlbGV0ZSByb3ciOiAiUmlqIHZlcndpamRlcmVuIiwKKyAgICAgICAgIkRlc2NyaXB0aW9uIjogIk9tc2NocmlqdmluZyIsCisgICAgICAgICJGcmFtZXMiOiAiRnJhbWVzIiwKKyAgICAgICAgIkluc2VydCBjZWxsIGFmdGVyIjogIlZvZWcgY2VsIHRvZSBhY2h0ZXIiLAorICAgICAgICAiSW5zZXJ0IGNlbGwgYmVmb3JlIjogIlZvZWcgY2VsIHRvZSB2b29yIiwKKyAgICAgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAiS29sb20gaW52b2VnZW4gYWNodGVyIiwKKyAgICAgICAgIkluc2VydCBjb2x1bW4gYmVmb3JlIjogIktvbG9tIGludm9lZ2VuIHZvb3IiLAorICAgICAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICJSaWogaW52b2VnZW4gb25kZXIiLAorICAgICAgICAiSW5zZXJ0IHJvdyBiZWZvcmUiOiAiUmlqIGludm9lZ2VuIGJvdmVuIiwKKyAgICAgICAgIk1lcmdlIGNlbGxzIjogIkNlbGxlbiBzYW1lbnZvZWdlbiIsCisgICAgICAgICJObyBydWxlcyI6ICJHZWVuIHJlZ2VscyIsCisgICAgICAgICJObyBzaWRlcyI6ICJHZWVuIHppamxpam5lbiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQYWRkaW5nIjogIkNlbG1hcmdlIiwKKyAgICAgICAgIlBsZWFzZSBjbGljayBpbnRvIHNvbWUgY2VsbCI6ICJLbGlrIGluIGVlbiBjZWwgYS51LmIuIiwKKyAgICAgICAgIlJvdyBQcm9wZXJ0aWVzIjogIlJpamVpZ2Vuc2NoYXBwZW4iLAorICAgICAgICAiUm93IHByb3BlcnRpZXMiOiAiUmlqIGVpZ2Vuc2NoYXBwZW4iLAorICAgICAgICAiUm93cyI6ICJSaWplbjoiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICJSZWdlbHMgdmVyc2NoaWpuZW4gdHVzc2VuIGFsbGUgcmlqZW4gZW4ga29sb21tZW4iLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBjb2x1bW5zIG9ubHkiOiAiUmVnZWxzIHZlcnNjaGlqbmVuIGVua2VsIHR1c3NlbiBkZSBrb2xvbW1lbiIsCisgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIHJvd3Mgb25seSI6ICJSZWdlbHMgdmVyc2NoaWpuZW4gZW5rZWwgdHVzc2VuIGRlIHJpamVuIiwKKyAgICAgICAgIlNwYWNpbmciOiAibWFyZ2UiLAorICAgICAgICAiU3BhY2luZyBhbmQgcGFkZGluZyI6ICJDZWxtYXJnZSBlbiBhZnN0YW5kIHR1c3NlbiBjZWxsZW4iLAorICAgICAgICAiU3BsaXQgY29sdW1uIjogIktvbG9tIHNwbGl0c2VuIiwKKyAgICAgICAgIlNwbGl0IHJvdyI6ICJSaWogc3BsaXRzZW4iLAorICAgICAgICAiU3VtbWFyeSI6ICJPdmVyemljaHQiLAorICAgICAgICAiVGFibGUgUHJvcGVydGllcyI6ICJUYWJlbCBlaWdlbnNjaGFwcGVuIiwKKyAgICAgICAgIlRhYmxlIHByb3BlcnRpZXMiOiAiVGFiZWwgZWlnZW5zY2hhcHBlbiIsCisgICAgICAgICJUaGUgYm90dG9tIHNpZGUgb25seSI6ICJFbmtlbCBhYW4gZGUgb25kZXJrYW50IiwKKyAgICAgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIkVua2VsIGFhbiBkZSBsaW5rZXJrYW50IiwKKyAgICAgICAgIlRoZSByaWdodCBhbmQgbGVmdCBzaWRlcyBvbmx5IjogIkVua2VsIGFhbiBkZSBsaW5rZXIgZW4gcmVjaHRlcmthbnQiLAorICAgICAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIkVua2VsIGFhbiBkZSByZWNodGVya2FudCIsCisgICAgICAgICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSI6ICJFbmtlbCBhYW4gZGUgYm92ZW5lbiBvbmRlcmthbnQiLAorICAgICAgICAiVGhlIHRvcCBzaWRlIG9ubHkiOiAiRW5rZWwgYWFuIGRlIGJvdmVua2FudCIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiWGluaGEga2FuIGRlIGxhYXRzdGUgY2VsIGluIGRlemUgdGFiZWwgbmlldCB2ZXJ3aWpkZXJlbi4iLAorICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICJYaW5oYSBrYW4gZGUgbGFhdHN0ZSBrb2xvbSBpbiBkZXplIHRhYmVsIG5pZXQgdmVyd2lqZGVyZW4uIiwKKyAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iOiAiWGluaGEga2FuIGRlIGxhYXRzdGUgcmlqIGluIGRlemUgdGFiZWwgbmlldCB2ZXJ3aWpkZXJlbi4iLAorICAgICAgICAicGl4ZWxzIjogInBpeGVscyIKKyAgICB9LAorICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iLAorICAgICAgICAiSW5zZXJ0IHRlbXBsYXRlIjogIlRlbXBsYXRlIGludm9lZ2VuIgorICAgIH0sCisgICAgIlVuRm9ybWF0IjogeworICAgICAgICAiQWxsIjogIkFsbGVzIiwKKyAgICAgICAgIkFsbCBIVE1MOiI6ICJBbGxlIGh0bWwiLAorICAgICAgICAiQ2FuY2VsIjogIkFubnVsZXJlbiIsCisgICAgICAgICJDbGVhbmluZyBBcmVhIjogIlNjaG9vbm1hYWsgZ2ViaWVkIiwKKyAgICAgICAgIkNsZWFuaW5nIG9wdGlvbnMiOiAiU2Nob29ubWFhayBvcHRpZXMiLAorICAgICAgICAiRm9ybWF0dGluZzoiOiAiRm9ybWF0IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBhZ2UgQ2xlYW5lciI6ICJQYWdpbmEgU2Nob29ubWFrZXIiLAorICAgICAgICAiU2VsZWN0IHdoaWNoIHR5cGVzIG9mIGZvcm1hdHRpbmcgeW91IHdvdWxkIGxpa2UgdG8gcmVtb3ZlLiI6ICJTZWxlY3RlZXIgd2Vsa2UgdHlwZXMgdmFuIEZvcm1hdHRlcmVuIGplIHdpbHQgdmVyd2lqZGVyZW4iLAorICAgICAgICAiU2VsZWN0aW9uIjogIkdlc2VsZWN0ZWVyZGUgdGVrc3QiCisgICAgfSwKKyAgICAiWGluaGEiOiB7CisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJPdmVyIGRlemUgZWRpdG9yIiwKKyAgICAgICAgIkJhY2tncm91bmQgQ29sb3IiOiAiQWNodGVyZ3JvbmRrbGV1ciIsCisgICAgICAgICJCb2xkIjogIlZldCIsCisgICAgICAgICJCdWxsZXRlZCBMaXN0IjogIk9wc29tbWluZ3N0ZWtlbnMiLAorICAgICAgICAiQ29weSBzZWxlY3Rpb24iOiAiS29waT9yZW4iLAorICAgICAgICAiQ3VycmVudCBzdHlsZSI6ICJIdWlkaWdlIHN0aWpsIiwKKyAgICAgICAgIkN1dCBzZWxlY3Rpb24iOiAiS25pcHBlbiIsCisgICAgICAgICJEZWNyZWFzZSBJbmRlbnQiOiAiSW5zcHJpbmdpbmcgdmVya2xlaW5lbiIsCisgICAgICAgICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICJUZWtzdHJpY2h0aW5nIGxpbmtzIG5hYXIgcmVjaHRzIiwKKyAgICAgICAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIlRla3N0cmljaHRpbmcgcmVjaHRzIG5hYXIgbGlua3MiLAorICAgICAgICAiRm9udCBDb2xvciI6ICJUZWtzdGtsZXVyIiwKKyAgICAgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIlhpbmhhIGhlbHAiLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIkhvcml6b250YWxlIGxpam4iLAorICAgICAgICAiSW5jcmVhc2UgSW5kZW50IjogIkluc3ByaW5naW5nIHZlcmdyb3RlbiIsCisgICAgICAgICJJbnNlcnQgVGFibGUiOiAiVGFiZWwgaW52b2VnZW4iLAorICAgICAgICAiSW5zZXJ0IFdlYiBMaW5rIjogIkh5cGVybGluayBpbnZvZWdlbi9hYW5wYXNzZW4iLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJBZmJlZWxkaW5nIGludm9lZ2VuL2FhbnBhc3NlbiIsCisgICAgICAgICJJdGFsaWMiOiAiQ3Vyc2llZiIsCisgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICJDZW50cmVyZW4iLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIlVpdHZ1bGxlbiIsCisgICAgICAgICJKdXN0aWZ5IExlZnQiOiAiTGlua3MgdWl0bGlqbmVuIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiUmVjaHRzIHVpdGxpam5lbiIsCisgICAgICAgICJOb3JtYWwiOiAibm9ybWFhbCIsCisgICAgICAgICJPcmRlcmVkIExpc3QiOiAiTnVtbWVyaW5nIiwKKyAgICAgICAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIlBsYWtrZW4iLAorICAgICAgICAiUGF0aCI6ICJQYWQiLAorICAgICAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiSGVyaGFsZW4iLAorICAgICAgICAiU3RyaWtldGhyb3VnaCI6ICJEb29yaGFsZW4iLAorICAgICAgICAiU3Vic2NyaXB0IjogIlN1YnNjcmlwdCIsCisgICAgICAgICJTdXBlcnNjcmlwdCI6ICJTdXBlcnNjcmlwdCIsCisgICAgICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiSFRNTCBicm9uY29kZSIsCisgICAgICAgICJVbmRlcmxpbmUiOiAiT25kZXJzdHJlcGVuIiwKKyAgICAgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIk9uZ2VkYWFuIG1ha2VuIiwKKyAgICAgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJKZSBiZW50IGluIFRFS1NULW1vZGUuIEdlYnJ1aWsgZGUgWzw+XSBrbm9wIG9tIHRlcnVnIHRlIGtlcmVuIG5hYXIgV1lTSVdZRy1tb2RlLiIKKyAgICB9LAorICAgICJfX05FV19UUkFOU0xBVElPTlNfXyI6IHsKKyAgICAgICAgIkFib3V0Qm94IjogeworICAgICAgICAgICAgIkNsb3NlIjogIjw8WGluaGE+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJDb3VudGVyIjogeworICAgICAgICAgICAgIkhUTUwiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICAgICAiQ2xpY2sgYSBjb2xvci4uLiI6ICIiLAorICAgICAgICAgICAgIlNhbXBsZSI6ICIiLAorICAgICAgICAgICAgIldlYiBTYWZlOiAiOiAiIiwKKyAgICAgICAgICAgICJDbG9zZSI6ICI8PFhpbmhhPj4iCisgICAgICAgIH0sCisgICAgICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgICAgICJEZWxldGUgQ2VsbCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBhZnRlciB0aGUgY3VycmVudCBub2RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGJlZm9yZSB0aGUgY3VycmVudCBub2RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAgICAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEaWFsb2dzIjogeworICAgICAgICAgICAgIlNvbWUgVGV4dCBIZXJlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVkaXRUYWciOiB7CisgICAgICAgICAgICAiRWRpdCBUYWcgQnkgUGVnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVxdWF0aW9uIjogeworICAgICAgICAgICAgIiE9IjogIiIsCisgICAgICAgICAgICAiIWluIjogIiIsCisgICAgICAgICAgICAiJmd0Oy0iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiJmx0O3gmZ3Q7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAhYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYC5gICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAyYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDNgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA1YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDZgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgN2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA4YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgZWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7Jm5ic3A7YDFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Arezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLTpcXCBgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC17Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BDYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Bjb3NgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGxuYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BwaWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHNpbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGFuYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0aW1lc2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImcXVvdDt0ZXh0JnF1b3Q7IjogIiIsCisgICAgICAgICAgICAiJytmb3JtdWxhKyciOiAiIiwKKyAgICAgICAgICAgICIoKG4pLChrKSkiOiAiIiwKKyAgICAgICAgICAgICIoeCsxKS8oeC0xKSI6ICIiLAorICAgICAgICAgICAgIioiOiAiIiwKKyAgICAgICAgICAgICIqKiI6ICIiLAorICAgICAgICAgICAgIistIjogIiIsCisgICAgICAgICAgICAiLSZndDsiOiAiIiwKKyAgICAgICAgICAgICItJmx0OyI6ICIiLAorICAgICAgICAgICAgIi06IjogIiIsCisgICAgICAgICAgICAiLT0iOiAiIiwKKyAgICAgICAgICAgICIvLyI6ICIiLAorICAgICAgICAgICAgIi9fIjogIiIsCisgICAgICAgICAgICAiOi4iOiAiIiwKKyAgICAgICAgICAgICI9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIkAiOiAiIiwKKyAgICAgICAgICAgICJbW2EsYl0sW2MsZF1dIjogIiIsCisgICAgICAgICAgICAiXFxcXCI6ICIiLAorICAgICAgICAgICAgIlxcbkNsaWNrIGluIHRoZSBib3ggdG8gdXNlIHlvdXIga2V5Ym9hcmQgb3IgdXNlIHRoZSBidXR0b25zXFxuIjogIiIsCisgICAgICAgICAgICAiXl4iOiAiIiwKKyAgICAgICAgICAgICJeXl4iOiAiIiwKKyAgICAgICAgICAgICJfX3wiOiAiIiwKKyAgICAgICAgICAgICJffF8iOiAiIiwKKyAgICAgICAgICAgICJgIT1gIjogIiIsCisgICAgICAgICAgICAiYCFpbmAiOiAiIiwKKyAgICAgICAgICAgICJgJmFuZDtgIjogIiIsCisgICAgICAgICAgICAiYCZjYXA7YCI6ICIiLAorICAgICAgICAgICAgImAmY3VwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oy1gIjogIiIsCisgICAgICAgICAgICAiYCZndDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PSZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7eCZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZvcjtgIjogIiIsCisgICAgICAgICAgICAiYCZxdW90O3RleHQmcXVvdDtgIjogIiIsCisgICAgICAgICAgICAiYCgobiksKGspKWAiOiAiIiwKKyAgICAgICAgICAgICJgKHgrMSkvKHgtMSlgIjogIiIsCisgICAgICAgICAgICAiYCoqYCI6ICIiLAorICAgICAgICAgICAgImAqYCI6ICIiLAorICAgICAgICAgICAgImArLWAiOiAiIiwKKyAgICAgICAgICAgICJgLSZndDtgIjogIiIsCisgICAgICAgICAgICAiYC0mbHQ7YCI6ICIiLAorICAgICAgICAgICAgImAtOmAiOiAiIiwKKyAgICAgICAgICAgICJgLT1gIjogIiIsCisgICAgICAgICAgICAiYC8vYCI6ICIiLAorICAgICAgICAgICAgImAvX2AiOiAiIiwKKyAgICAgICAgICAgICJgOi5gIjogIiIsCisgICAgICAgICAgICAiYD0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImBAYCI6ICIiLAorICAgICAgICAgICAgImBbW2EsYl0sW2MsZF1dYCI6ICIiLAorICAgICAgICAgICAgImBcXFxcYCI6ICIiLAorICAgICAgICAgICAgImBfX3xgIjogIiIsCisgICAgICAgICAgICAiYF98X2AiOiAiIiwKKyAgICAgICAgICAgICJgQUFgIjogIiIsCisgICAgICAgICAgICAiYGFsZXBoYCI6ICIiLAorICAgICAgICAgICAgImBhbHBoYWAiOiAiIiwKKyAgICAgICAgICAgICJgYW5kYCI6ICIiLAorICAgICAgICAgICAgImBiYXJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJldGFgIjogIiIsCisgICAgICAgICAgICAiYENDYCI6ICIiLAorICAgICAgICAgICAgImBjY2FgIjogIiIsCisgICAgICAgICAgICAiYGNoaWAiOiAiIiwKKyAgICAgICAgICAgICJgZGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgZGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbGAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYERlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkaWFtb25kYCI6ICIiLAorICAgICAgICAgICAgImBkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkeS9keGAiOiAiIiwKKyAgICAgICAgICAgICJgRUVgIjogIiIsCisgICAgICAgICAgICAiYGVwc2lgIjogIiIsCisgICAgICAgICAgICAiYGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZnJhYCI6ICIiLAorICAgICAgICAgICAgImBnYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgR2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdyYWRgIjogIiIsCisgICAgICAgICAgICAiYGhhcnJgIjogIiIsCisgICAgICAgICAgICAiYGhBcnJgIjogIiIsCisgICAgICAgICAgICAiYGhhdGFgIjogIiIsCisgICAgICAgICAgICAiYGlmYCI6ICIiLAorICAgICAgICAgICAgImBpbmAiOiAiIiwKKyAgICAgICAgICAgICJgaW50YCI6ICIiLAorICAgICAgICAgICAgImBpb3RhYCI6ICIiLAorICAgICAgICAgICAgImBrYXBwYWAiOiAiIiwKKyAgICAgICAgICAgICJgbGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBMYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYGxhcnJgIjogIiIsCisgICAgICAgICAgICAiYGxBcnJgIjogIiIsCisgICAgICAgICAgICAiYGxpbV8oeC0mZ3Q7b28pYCI6ICIiLAorICAgICAgICAgICAgImBsb2dgIjogIiIsCisgICAgICAgICAgICAiYG11YCI6ICIiLAorICAgICAgICAgICAgImBOTmAiOiAiIiwKKyAgICAgICAgICAgICJgbm5gIjogIiIsCisgICAgICAgICAgICAiYG5vdGAiOiAiIiwKKyAgICAgICAgICAgICJgbnVgIjogIiIsCisgICAgICAgICAgICAiYG8rYCI6ICIiLAorICAgICAgICAgICAgImBvLmAiOiAiIiwKKyAgICAgICAgICAgICJgTy9gIjogIiIsCisgICAgICAgICAgICAiYG9pbnRgIjogIiIsCisgICAgICAgICAgICAiYG9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBPbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgb29gIjogIiIsCisgICAgICAgICAgICAiYG9yYCI6ICIiLAorICAgICAgICAgICAgImBveGAiOiAiIiwKKyAgICAgICAgICAgICJgcGhpYCI6ICIiLAorICAgICAgICAgICAgImBQaGlgIjogIiIsCisgICAgICAgICAgICAiYFBpYCI6ICIiLAorICAgICAgICAgICAgImBwaWAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvZGAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvcGAiOiAiIiwKKyAgICAgICAgICAgICJgcHNpYCI6ICIiLAorICAgICAgICAgICAgImBQc2lgIjogIiIsCisgICAgICAgICAgICAiYFFRYCI6ICIiLAorICAgICAgICAgICAgImBxdWFkYCI6ICIiLAorICAgICAgICAgICAgImByQXJyYCI6ICIiLAorICAgICAgICAgICAgImByaG9gIjogIiIsCisgICAgICAgICAgICAiYHJvb3QobikoeClgIjogIiIsCisgICAgICAgICAgICAiYFJSYCI6ICIiLAorICAgICAgICAgICAgImBzZmFgIjogIiIsCisgICAgICAgICAgICAiYFNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgc3FydCh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgc3F1YXJlYCI6ICIiLAorICAgICAgICAgICAgImBzdGFja3JlbCgtJmd0OykoKylgIjogIiIsCisgICAgICAgICAgICAiYHN1YmAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VtYCI6ICIiLAorICAgICAgICAgICAgImBzdXBgIjogIiIsCisgICAgICAgICAgICAiYHN1cGVgIjogIiIsCisgICAgICAgICAgICAiYHRhdWAiOiAiIiwKKyAgICAgICAgICAgICJgdGhldGFgIjogIiIsCisgICAgICAgICAgICAiYFRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImBUVGAiOiAiIiwKKyAgICAgICAgICAgICJgdHRhYCI6ICIiLAorICAgICAgICAgICAgImB1YXJyYCI6ICIiLAorICAgICAgICAgICAgImB1bGFgIjogIiIsCisgICAgICAgICAgICAiYHVwc2lsb25gIjogIiIsCisgICAgICAgICAgICAiYHV1YCI6ICIiLAorICAgICAgICAgICAgImB2ZWNhYCI6ICIiLAorICAgICAgICAgICAgImB2dmAiOiAiIiwKKyAgICAgICAgICAgICJgeF8obW4pYCI6ICIiLAorICAgICAgICAgICAgImBYaWAiOiAiIiwKKyAgICAgICAgICAgICJgeGlgIjogIiIsCisgICAgICAgICAgICAiYHh4YCI6ICIiLAorICAgICAgICAgICAgImB6ZXRhYCI6ICIiLAorICAgICAgICAgICAgImBaWmAiOiAiIiwKKyAgICAgICAgICAgICJgfC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImB8LS1gIjogIiIsCisgICAgICAgICAgICAiYHw9PWAiOiAiIiwKKyAgICAgICAgICAgICJgfF9fYCI6ICIiLAorICAgICAgICAgICAgImB8fmAiOiAiIiwKKyAgICAgICAgICAgICJgfj1gIjogIiIsCisgICAgICAgICAgICAiYH58YCI6ICIiLAorICAgICAgICAgICAgImB+fmAiOiAiIiwKKyAgICAgICAgICAgICJBQSI6ICIiLAorICAgICAgICAgICAgImFsZXBoIjogIiIsCisgICAgICAgICAgICAiYWxwaGEiOiAiIiwKKyAgICAgICAgICAgICJhbmQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGhNTCBFeGFtcGxlIjogIiIsCisgICAgICAgICAgICAiYmFyYSI6ICIiLAorICAgICAgICAgICAgIkJhc2VkIG9uIEFTQ0lJTWF0aE1MIGJ5IjogIiIsCisgICAgICAgICAgICAiYmJhIjogIiIsCisgICAgICAgICAgICAiYmJiYSI6ICIiLAorICAgICAgICAgICAgImJldGEiOiAiIiwKKyAgICAgICAgICAgICJDQyI6ICIiLAorICAgICAgICAgICAgImNjYSI6ICIiLAorICAgICAgICAgICAgImNoaSI6ICIiLAorICAgICAgICAgICAgImRhcnIiOiAiIiwKKyAgICAgICAgICAgICJkZG90YSI6ICIiLAorICAgICAgICAgICAgImRlbCI6ICIiLAorICAgICAgICAgICAgImRlbHRhIjogIiIsCisgICAgICAgICAgICAiRGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJkaWFtb25kIjogIiIsCisgICAgICAgICAgICAiZG90YSI6ICIiLAorICAgICAgICAgICAgImR5L2R4IjogIiIsCisgICAgICAgICAgICAiRUUiOiAiIiwKKyAgICAgICAgICAgICJlcHNpIjogIiIsCisgICAgICAgICAgICAiZXRhIjogIiIsCisgICAgICAgICAgICAiRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQXNjaWlNYXRoTUwgdmlzaXQgdGhpcyBwYWdlOiI6ICIiLAorICAgICAgICAgICAgImZyYSI6ICIiLAorICAgICAgICAgICAgImdhbW1hIjogIiIsCisgICAgICAgICAgICAiR2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJncmFkIjogIiIsCisgICAgICAgICAgICAiaGFyciI6ICIiLAorICAgICAgICAgICAgImhBcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXRhIjogIiIsCisgICAgICAgICAgICAiaWYiOiAiIiwKKyAgICAgICAgICAgICJpbiI6ICIiLAorICAgICAgICAgICAgImludCI6ICIiLAorICAgICAgICAgICAgImludF9hXmJmKHgpZHgiOiAiIiwKKyAgICAgICAgICAgICJpb3RhIjogIiIsCisgICAgICAgICAgICAia2FwcGEiOiAiIiwKKyAgICAgICAgICAgICJMYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsQXJyIjogIiIsCisgICAgICAgICAgICAibGFyciI6ICIiLAorICAgICAgICAgICAgImxpbV8oeC0mZ3Q7b28pIjogIiIsCisgICAgICAgICAgICAibXUiOiAiIiwKKyAgICAgICAgICAgICJOTiI6ICIiLAorICAgICAgICAgICAgIm5uIjogIiIsCisgICAgICAgICAgICAibm5uIjogIiIsCisgICAgICAgICAgICAibm90IjogIiIsCisgICAgICAgICAgICAibnUiOiAiIiwKKyAgICAgICAgICAgICJvKyI6ICIiLAorICAgICAgICAgICAgIm8uIjogIiIsCisgICAgICAgICAgICAiTy8iOiAiIiwKKyAgICAgICAgICAgICJvaW50IjogIiIsCisgICAgICAgICAgICAiT21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJvbWVnYSI6ICIiLAorICAgICAgICAgICAgIm9vIjogIiIsCisgICAgICAgICAgICAib3IiOiAiIiwKKyAgICAgICAgICAgICJveCI6ICIiLAorICAgICAgICAgICAgInBoaSI6ICIiLAorICAgICAgICAgICAgIlBoaSI6ICIiLAorICAgICAgICAgICAgIlBpIjogIiIsCisgICAgICAgICAgICAicGkiOiAiIiwKKyAgICAgICAgICAgICJwcm9kIjogIiIsCisgICAgICAgICAgICAicHJvcCI6ICIiLAorICAgICAgICAgICAgInBzaSI6ICIiLAorICAgICAgICAgICAgIlBzaSI6ICIiLAorICAgICAgICAgICAgIlFRIjogIiIsCisgICAgICAgICAgICAicXVhZCI6ICIiLAorICAgICAgICAgICAgInJBcnIiOiAiIiwKKyAgICAgICAgICAgICJyaG8iOiAiIiwKKyAgICAgICAgICAgICJyb290KG4pKHgpIjogIiIsCisgICAgICAgICAgICAiUlIiOiAiIiwKKyAgICAgICAgICAgICJzZmEiOiAiIiwKKyAgICAgICAgICAgICJTaWdtYSI6ICIiLAorICAgICAgICAgICAgInNpZ21hIjogIiIsCisgICAgICAgICAgICAic3FydCh4KSI6ICIiLAorICAgICAgICAgICAgInNxdWFyZSI6ICIiLAorICAgICAgICAgICAgInN0YWNrcmVsKC0mZ3Q7KSgrKSI6ICIiLAorICAgICAgICAgICAgInN1YiI6ICIiLAorICAgICAgICAgICAgInN1YmUiOiAiIiwKKyAgICAgICAgICAgICJzdW0iOiAiIiwKKyAgICAgICAgICAgICJzdW1fKG49MSleb28iOiAiIiwKKyAgICAgICAgICAgICJzdXAiOiAiIiwKKyAgICAgICAgICAgICJzdXBlIjogIiIsCisgICAgICAgICAgICAidGF1IjogIiIsCisgICAgICAgICAgICAidGhldGEiOiAiIiwKKyAgICAgICAgICAgICJUaGV0YSI6ICIiLAorICAgICAgICAgICAgIlRUIjogIiIsCisgICAgICAgICAgICAidHRhIjogIiIsCisgICAgICAgICAgICAidWFyciI6ICIiLAorICAgICAgICAgICAgInVsYSI6ICIiLAorICAgICAgICAgICAgInVwc2lsb24iOiAiIiwKKyAgICAgICAgICAgICJ1dSI6ICIiLAorICAgICAgICAgICAgInV1dSI6ICIiLAorICAgICAgICAgICAgInZlY2EiOiAiIiwKKyAgICAgICAgICAgICJ2diI6ICIiLAorICAgICAgICAgICAgInZ2diI6ICIiLAorICAgICAgICAgICAgInheKG0rbikiOiAiIiwKKyAgICAgICAgICAgICJ4XyhtbikiOiAiIiwKKyAgICAgICAgICAgICJYaSI6ICIiLAorICAgICAgICAgICAgInhpIjogIiIsCisgICAgICAgICAgICAieHgiOiAiIiwKKyAgICAgICAgICAgICJ6ZXRhIjogIiIsCisgICAgICAgICAgICAiWloiOiAiIiwKKyAgICAgICAgICAgICJ8LSZndDsiOiAiIiwKKyAgICAgICAgICAgICJ8LS0iOiAiIiwKKyAgICAgICAgICAgICJ8PT0iOiAiIiwKKyAgICAgICAgICAgICJ8X18iOiAiIiwKKyAgICAgICAgICAgICJ8fiI6ICIiLAorICAgICAgICAgICAgIn49IjogIiIsCisgICAgICAgICAgICAifnwiOiAiIiwKKyAgICAgICAgICAgICJ+fiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGYW5jeVNlbGVjdHMiOiB7CisgICAgICAgICAgICAiJytvcHQudGV4dCsnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbmRSZXBsYWNlIjogeworICAgICAgICAgICAgIic7XHJcbiAgdmFyIHRhZ2MgPSAnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1PcGVyYXRpb25zIjogeworICAgICAgICAgICAgIkVudGVyIHRoZSBuYW1lIGZvciBuZXcgb3B0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiTWVzc2FnZSBTZW50IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIFNlbGVjdC4uLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGb3JtcyI6IHsKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IEZJRUxEU0VUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IElOUFVUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IExBQkVMIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFNFTEVDVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBURVhUQVJFQSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgICAgICIuLi4iOiAiIiwKKyAgICAgICAgICAgICJDaGFyYWN0ZXIgc2V0OiI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChJU08tODg1OS01KSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChLT0k4LVIpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKFdJTkRPV1MtMTI1MSkiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkczoiOiAiIiwKKyAgICAgICAgICAgICJVVEYtOCAocmVjb21tZW5kZWQpIjogIiIsCisgICAgICAgICAgICAid2VzdGVybiAoSVNPLTg4NTktMSkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiR2Vja28iOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAgICAgIiYjeDAwZDc7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgSG9yaXpvbnRhbCBSdWxlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgICAgICJDU1MgU3R5bGUiOiAiIiwKKyAgICAgICAgICAgICItIjogIjw8RXF1YXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydEltYWdlIjogeworICAgICAgICAgICAgIkFic2JvdHRvbSI6ICIiLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICIiLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiIiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAgICAgIkluc2VydCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBmb290bm90ZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBOb3RlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBhZ2VicmVhayI6IHsKKyAgICAgICAgICAgICJQYWdlIEJyZWFrIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICAgICAiXFxuICBUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZ1xcbiI6ICIiLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIiIsCisgICAgICAgICAgICAiTGluazEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMiI6ICIiLAorICAgICAgICAgICAgIkxpbmszIjogIiIsCisgICAgICAgICAgICAiTGluazQiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAgICAgIkFsbCBDYXRlZ29yaWVzIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMgdGVtcGxhdGUgdmFyaWFibGUiOiAiIiwKKyAgICAgICAgICAgICJPbmx5IHNlYXJjaCB3b3JkIGJlZ2lubmluZyI6ICIiLAorICAgICAgICAgICAgIkhUTUwiOiAiPDxDaGFyQ291bnRlcj4+IiwKKyAgICAgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICI8PEluc2VydFNuaXBwZXQ+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAgICAgIkNhcHRpb24gZm9yIHRoZSB0YWJsZSI6ICIiLAorICAgICAgICAgICAgIkNlbGwgcGFkZGluZzoiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIHNwYWNpbmc6IjogIiIsCisgICAgICAgICAgICAiQ29sbGFwc2UgYm9yZGVyczoiOiAiIiwKKyAgICAgICAgICAgICJDb2xzOiI6ICIiLAorICAgICAgICAgICAgIkVtIjogIiIsCisgICAgICAgICAgICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIkxheW91IjogIiIsCisgICAgICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJOdW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIiIsCisgICAgICAgICAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICIiLAorICAgICAgICAgICAgIlN0eWxlIG9mIHRoZSBib3JkZXIiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aCB1bml0IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iCisgICAgICAgIH0sCisgICAgICAgICJMYW5nTWFya3MiOiB7CisgICAgICAgICAgICAiJywgJyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJMaW5rZXIiOiB7CisgICAgICAgICAgICAiKHB4KSI6ICIiLAorICAgICAgICAgICAgIkFuY2hvci1MaW5rIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIEFkZHJlc3M6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgTGluayI6ICIiLAorICAgICAgICAgICAgIkxvY2F0aW9uIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZW51IEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFRlbXBsYXRlOiI6ICIiLAorICAgICAgICAgICAgIk5ldyBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcmRpbmFyeSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUG9wdXAgV2luZG93IjogIiIsCisgICAgICAgICAgICAiUG9wdXBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgTGluayI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZWFibGU6IjogIiIsCisgICAgICAgICAgICAiU2FtZSBXaW5kb3cgKGp1bXAgb3V0IG9mIGZyYW1lcykiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGxiYXJzOiI6ICIiLAorICAgICAgICAgICAgIlNob3dzIE9uIEhvdmVyIjogIiIsCisgICAgICAgICAgICAiU3RhdHVzIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJTdWJqZWN0OiI6ICIiLAorICAgICAgICAgICAgIlRpdGxlOiI6ICIiLAorICAgICAgICAgICAgIlRvb2xiYXI6IjogIiIsCisgICAgICAgICAgICAiVVJMIExpbmsiOiAiIgorICAgICAgICB9LAorICAgICAgICAiT3BlcmEiOiB7CisgICAgICAgICAgICAiTUFSSyI6ICIiLAorICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAgICAgIkluc2VydCB0ZXh0IGluIG5ldyBwYXJhZ3JhcGgiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUHJlc2VydmVTY3JpcHRzIjogeworICAgICAgICAgICAgIkphdmFTY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJQSFAiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUXVpY2tUYWciOiB7CisgICAgICAgICAgICAiJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsJzogJyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTZXRJZCI6IHsKKyAgICAgICAgICAgICJTZXQgSWQvTmFtZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBTZWxlY3Rpb24gT25seSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIFNjb3BlIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHN0YW5kIGJ5IHdoaWxlIGNsZWFuaW5nIGluIHByb2Nlc3MuLi4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxpZ25tZW50IChsZWZ0L3JpZ2h0L2p1c3RpZnkpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgY2xhc3NlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgQWxsIEhUTUwgVGFncyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgc3R5bGVzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBlbXBoYXNpcyBhbmQgYW5ub3RhdGlvbnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIFBhcmFncmFwaHMiOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzLiI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UgZGlyZWN0aW9uYWwgcXVvdGUgbWFya3Mgd2l0aCBub24tZGlyZWN0aW9uYWwgcXVvdGUgbWFya3MuIjogIiIsCisgICAgICAgICAgICAiVmlnb3JvdXNseSBwdXJnZSBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlRhYmxlT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJDZWxsIFR5cGU6IjogIiIsCisgICAgICAgICAgICAiQ2VsbHMgZG93biI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIHRvIHRoZSByaWdodCwgYW5kIjogIiIsCisgICAgICAgICAgICAiRG8gTm90IENoYW5nZSI6ICIiLAorICAgICAgICAgICAgIkZyYW1lIGFuZCBib3JkZXJzIjogIiIsCisgICAgICAgICAgICAiSGVhZGVyICh0aCkiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBjdXJyZW50IGNlbGwgd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJOb3JtYWwgKHRkKSI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIjw8Q29udGV4dE1lbnU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuc2F2ZWRDaGFuZ2VzIjogeworICAgICAgICAgICAgIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgZWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIldlYktpdCI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiPDxHZWNrbz4+IgorICAgICAgICB9LAorICAgICAgICAiWGluaGEiOiB7CisgICAgICAgICAgICAiJiM4MjEyOyBmb250ICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiJiM4MjEyOyBzaXplICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICIxICg4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjIgKDEwIHB0KSI6ICIiLAorICAgICAgICAgICAgIjMgKDEyIHB0KSI6ICIiLAorICAgICAgICAgICAgIjQgKDE0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjUgKDE4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjYgKDI0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjcgKDM2IHB0KSI6ICIiLAorICAgICAgICAgICAgIkFkZHJlc3MiOiAiIiwKKyAgICAgICAgICAgICJBcmlhbCI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICIiLAorICAgICAgICAgICAgIkNsb3NlIjogIiIsCisgICAgICAgICAgICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICIiLAorICAgICAgICAgICAgIkNvdXJpZXIgTmV3IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFN0YXR1c2JhciI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBUb29sYmFyIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0wICh6ZXJvKSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMSAuLiBDVFJMLTYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUEiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUoiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUwiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLU4iOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVgiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVoiOiAiIiwKKyAgICAgICAgICAgICJFZGl0b3IgSGVscCI6ICIiLAorICAgICAgICAgICAgIkVOVEVSIjogIiIsCisgICAgICAgICAgICAiRXJyb3IgTG9hZGluZyBYaW5oYS4gIERldmVsb3BlcnMsIGNoZWNrIHRoZSBFcnJvciBDb25zb2xlIGZvciBpbmZvcm1hdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGaW5pc2hpbmciOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0ZWQiOiAiIiwKKyAgICAgICAgICAgICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiIiwKKyAgICAgICAgICAgICJHZW9yZ2lhIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAxIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAyIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAzIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA0IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA1IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA2IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJJbXBhY3QiOiAiIiwKKyAgICAgICAgICAgICJJbml0IGVkaXRvciBzaXplIjogIiIsCisgICAgICAgICAgICAiaW5zZXJ0IGxpbmVicmVhayI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9PdmVyd3JpdGUiOiAiIiwKKyAgICAgICAgICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIENvcmUiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW5zIjogIiIsCisgICAgICAgICAgICAiTVMgV29yZCBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAibmV3IHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIlByaW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICIiLAorICAgICAgICAgICAgIlNhdmUgYXMiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgYWxsIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IENvbG9yIjogIiIsCisgICAgICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJTSElGVC1FTlRFUiI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IEJsb2NrIjogIiIsCisgICAgICAgICAgICAiVGFob21hIjogIiIsCisgICAgICAgICAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogIiIsCisgICAgICAgICAgICAiVGltZXMgTmV3IFJvbWFuIjogIiIsCisgICAgICAgICAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJUb3VjaCBoZXJlIGZpcnN0IHRvIGFjdGl2YXRlIGVkaXRvci4iOiAiIiwKKyAgICAgICAgICAgICJWZXJkYW5hIjogIiIsCisgICAgICAgICAgICAiV2FpdGluZyBmb3IgSWZyYW1lIHRvIGxvYWQuLi4iOiAiIiwKKyAgICAgICAgICAgICJXaW5nRGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIiIsCisgICAgICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiU2V0IEJhY2tncm91bmQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTAlIjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICIiLAorICAgICAgICAgICAgIjIwMCUiOiAiIiwKKyAgICAgICAgICAgICIyNSUiOiAiIiwKKyAgICAgICAgICAgICI1MCUiOiAiIiwKKyAgICAgICAgICAgICI3NSUiOiAiIiwKKyAgICAgICAgICAgICI+TGlzdCBWaWV3IjogIiIsCisgICAgICAgICAgICAiPlRodW1ibmFpbCBWaWV3IjogIiIsCisgICAgICAgICAgICAiQToiOiAiIiwKKyAgICAgICAgICAgICJEOiI6ICIiLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZpbGVzaXplOiI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciI6ICIiLAorICAgICAgICAgICAgIkdJRiI6ICIiLAorICAgICAgICAgICAgIkg6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBmb2xkZXIgc2l6ZSBsaW1pdCByZWFjaGVkLiBVcGxvYWQgZGlzYWJsZWQuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHZhbHVlIjogIiIsCisgICAgICAgICAgICAiUE5HIjogIiIsCisgICAgICAgICAgICAiUHJlc2V0IjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgbWFya2VyIGNvbG9yIjogIiIsCisgICAgICAgICAgICAiWDoiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJZOiI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkh0bWxUaWR5IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQXV0by1UaWR5IjogIiIsCisgICAgICAgICAgICAiRG9uJ3QgVGlkeSI6ICIiLAorICAgICAgICAgICAgIkhUTUwgVGlkeSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlcyI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgVXNlcm5hbWUvRW1haWwiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFBob3RvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFZpZGVvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgU2VydmVyIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFVzZXJuYW1lIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlbyBMaXN0IjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlb3MiOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiRDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkdJRiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUE5HIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUTUFSUVVFRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUiOiAiIiwKKyAgICAgICAgICAgICJDb250aW51b3VzIjogIiIsCisgICAgICAgICAgICAiTWFycXVlZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJTbGlkZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIgT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEyMCUiOiAiIiwKKyAgICAgICAgICAgICIxNTAlIjogIiIsCisgICAgICAgICAgICAiODAlIjogIiIsCisgICAgICAgICAgICAiR1VJRE8gQ29kZSI6ICIiLAorICAgICAgICAgICAgIldpdGggTW96aWxsYSwgdGhlIGFwcGxldCB3aWxsIG5vdCBiZSB2aXNpYmxlIGluIGVkaXRvciwgYnV0IG9ubHkgaW4gV2ViIHBhZ2UgYWZ0ZXIgc3VibWl0dGluZy4iOiAiIiwKKyAgICAgICAgICAgICJab29tIDoiOiAiIiwKKyAgICAgICAgICAgICIxMDAlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBHZWFycyBpbiBvcmRlciB0byB1c2UgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZSBhbmQgY29uZmlndXJhdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGluZyBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiSW5zdGFsbCI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIEFib3V0IExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgcmVsb2FkIHRoZSBwYWdlLCBjYXVzaW5nIHlvdSB0byBsb3NlIGFueSB1bnNhdmVkIHdvcmsuICBQcmVzcyBcIk9LXCIgdG8gcmVsb2FkLiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIHVzZXMgR29vZ2xlIEdlYXJzIHRvIGVuYWJsZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlLiAgV2l0aCBHZWFycyBpbnN0YWxsZWQsIHlvdSBjYW4gc2F2ZSBkcmFmdHMgb2YgeW91ciBkb2N1bWVudHMgb24geW91ciBoYXJkIGRyaXZlLCBjb25maWd1cmUgWGluaGEgdG8gbG9vayB0aGUgd2F5IHlvdSB3YW50LCBhbmQgY2FycnkgdGhpcyBpbmZvcm1hdGlvbiB3aGVyZXZlciB5b3UgdXNlIFhpbmhhIG9uIHRoZSB3ZWIuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsZTogIjogIiIsCisgICAgICAgICAgICAiSW1wb3J0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGV0YWlscyI6ICIiLAorICAgICAgICAgICAgIkZpbGUgQnJvd3NlciI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICAgIFRoZXJlIEMgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gIFRoZXJlIEEgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gXCIgVGhlcmUgQiBcIiI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICcgVGhlcmUgRCAnIjogIiIsCisgICAgICAgICAgICAiTGlzdCBvZiBQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJOZXcgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJPcGVuIjogIiIsCisgICAgICAgICAgICAiT3BlbiBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHlvdSdkIGxpa2UgdG8gY3JlYXRlLiI6ICIiLAorICAgICAgICAgICAgIlNhdmUgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgZXJhc2UgYW55IHVuc2F2ZWQgY29udGVudC4gIElmIHlvdSdyZSBjZXJ0YWluLCBwbGVhc2UgY2xpY2sgT0sgdG8gY29udGludWUuIjogIiIsCisgICAgICAgICAgICAiV2ViIFVSTCI6ICIiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiPDxQU0xvY2FsPj4iLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IjogIjw8SW5zZXJ0Tm90ZT4+IgorICAgICAgICB9LAorICAgICAgICAiU3BlbGxDaGVja2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogU1BFTExDSEVDS0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkhUTUxBcmVhIFNwZWxsIENoZWNrZXIiOiAiIiwKKyAgICAgICAgICAgICJJbmZvIjogIiIsCisgICAgICAgICAgICAiTGVhcm4iOiAiIiwKKyAgICAgICAgICAgICJwbGl6IHdlaXQgOy0pIjogIiIsCisgICAgICAgICAgICAiU3BlbGwgQ2hlY2tlciI6ICIiCisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvcGwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9wbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTgzZjc2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvcGwuanMKQEAgLTAsMCArMSwxNTc5IEBACisvLyBYaW5oYSBMYW5ndWFnZSBDb21iaW5lZCBUcmFuc2xhdGlvbiBGaWxlCisvLworLy8gTEFORzogInBsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU5TVFJVQ1RJT05TIFRPIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBZb3VyIHRyYW5zbGF0aW9uIG11c3QgYmUgaW4gVVRGLTggQ2hhcmFjdGVyIEVuY29kaW5nLgorLy8KKy8vIFRoaXMgaXMgYSBKU09OIGVuY29kZWQgZmlsZSAocGx1cyBjb21tZW50cyksIHN0cmluZ3Mgc2hvdWxkIGJlIGRvdWJsZS1xdW90ZQorLy8gb25seSwgZG8gbm90IHVzZSBzaW5nbGUgcXVvdGVzIHRvIHN1cnJvdW5kIHN0cmluZ3MgLSAiaGVsbG8iLCBub3QgJ2hlbGxvJworLy8gZG8gbm90IGhhdmUgYSB0cmFpbGluZyBjb21tYSBhZnRlciB0aGUgbGFzdCBlbnRyeSBpbiBhIHNlY3Rpb24uCisvLworLy8gT25seSBmdWxsIGxpbmUgY29tbWVudHMgYXJlIGFsbG93ZWQgKHRoYXQgYSBjb21tZW50cyBvY2N1cHkgZW50aXJlIGxpbmVzKS4KKy8vCisvLyBTZWFyY2ggZm9yIHRoZSBfX05FV19UUkFOU0xBVElPTlNfXyBzZWN0aW9uIGJlbG93LCB0aGlzIGlzIHdoZXJlIHlvdSB3aWxsCisvLyB3YW50IHRvIGZvY3VzLCB0aGlzIHNlY3Rpb24gaW5jbHVkZXMgdGhpbmdzIHRoYXQgZG8gbm90IHByZXNlbnRseSBoYXZlIGEgCisvLyB0cmFuc2xhdGlvbiBvciBmb3Igd2hpY2ggdGhlIHRyYW5zbGF0aW9uIG5lZWRzIHRvIGJlIGNoZWNrZWQgZm9yIGFjY3VyYWN5LgorLy8KKy8vIEluIHRoZSBOZXcgVHJhbnNsYXRpb25zIHNlY3Rpb24gYSB0cmFuc2xhdGlvbiBzdHJpbmcgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcKKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIiIKKy8vICAgICBUaGlzIG1lYW5zIGl0IGlzIG5vdCB0cmFuc2xhdGVkIHlldCwgYWRkIHlvdXIgdHJhbnNsYXRpb24uLi4KKy8vICAgICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiS2xpbmdvbiBTdHJpbmcgSGVyZSIKKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIlRyYW5zbGF0ZWQgU3RyaW5nIEhlcmUiCisvLyAgICAgVGhpcyBtZWFucyB0aGF0IGFuIGV4aXN0aW5nIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZywgaW4gc29tZSBvdGhlcgorLy8gICAgIHNlY3Rpb24gaGFzIGJlZW4gZm91bmQsIGFuZCB1c2VkLiAgQ2hlY2sgdGhhdCBpdCBpcyBhcHByb3ByaXRlIGZvciB0aGlzCisvLyAgICAgc2VjdGlvbiBhbmQgaWYgaXQgaXMsIHRoYXQncyBmaW5lIGxlYXZlIGl0IGFzIGlzLCBvdGhlcndpc2UgY2hhbmdlIGFzCisvLyAgICAgYXBwcm9wcmlhdGUuCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICI8PEFub3RoZXJTZWN0aW9uPj4iCisvLyAgICAgVGhpcyBtZWFucyB1c2UgdGhlIHNhbWUgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nIGFzIDw8QW5vdGhlclNlY3Rpb24+PgorLy8gICAgIHRoaXMgc2F2ZXMgeW91IHJlLXRyYW5sYXRpbmcgc3RyaW5ncy4gIElmIHRoZSBDb250ZXh0IG9mIHRoaXMgc2VjdGlvbgorLy8gICAgIGFuZCB0aGUgY29udGV4dCBvZiBBbm90aGVyU2VjdGlvbiBzZWVtIHRoZSBzYW1lLCB0aGF0J3MgZmluZSBsZWF2ZSBpdAorLy8gICAgIHVzaW5nIHRoYXQgdHJhbnNsYXRpb24sIGJ1dCBpZiB0aGlzIHNlY3Rpb24gbmVlZHMgYSBkaWZmZXJlbnQgdHJhbnNsYXRpb24sIAorLy8gICAgIHlvdSBjYW4gcHJvdmlkZSBpdCBieSByZXBsYWNpbmcgdGhlIGxpbmsgKDw8QW5vdGhlclNlY3Rpb24+Pikgd2l0aCB0aGF0CisvLyAgICAgbmV3IHRyYW5zbGF0aW9uLiAgRm9yIGV4YW1wbGUgLSBhICJUYWJsZSIgaW4gc2F5ICJEYXRhUGx1Z2luIiBpcyAKKy8vICAgICBwZXJoYXBzIHRyYW5zbGF0ZWQgZGlmZmVyZW50bHkgdG8gIlRhYmxlIiBpbiAiRnVybml0dXJlUGx1Z2luIi4KKy8vCisvLyBURVNUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IHBsYWNlIHlvdXIgdHJhbnNsYXRpb24gZmlsZSBvbiB5b3VyIHdlYnNlcnZlciBzb21ld2hlcmUgZm9yIGV4YW1wbGUKKy8vCisvLyAgIC94aW5oYS9sYW5nL21lcmdlZC9wbC5qcworLy8KKy8vIGFuZCB0aGVuIHRlbGwgWGluaGEgd2hlcmUgdG8gZ2V0IGl0IChiZWZvcmUgbG9hZGluZyBYaW5oYUNvcmUuanMpIGJ5IAorLy8KKy8vICBfZWRpdG9yX2xhbmcgICAgICAgICAgICAgID0gJ3BsJzsKKy8vICBfZWRpdG9yX2xhbmdfbWVyZ2VkX2ZpbGUgID0gJy94aW5oYS9sYW5nL21lcmdlZC9wbC5qcyc7CisvLworLy8gWGluaGEgd2lsbCBsb2FkIHlvdXIgbmV3IGxhbmd1YWdlIGRlZmluaXRpb24uCisvLworLy8gU1VCTUlUVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBjcmVhdGUgYSBUaWNrZXQgb24gdGhlIFhpbmhhIHdlYnNpdGUgYW5kIGF0dGFjaCB5b3VyIHRyYW5zbGF0aW9uIAorLy8gZmlsZS4KKy8vCisvLyBUaGUgWGluaGEgZGV2ZWxvcGVycyB3aWxsIHRha2UgeW91ciBmaWxlIGFuZCB1c2UgdGhlIAorLy8gICAgIGNvbnRyaWIvbGNfc3BsaXRfbWVyZ2VkX2ZpbGUucGhwCisvLyBzY3JpcHQgdG8gbG9hZCBpdCBpbnRvIHRoZSBYaW5oYSBkaXN0cmlidXRpb24uCisKK3sKKyAgICAiQWJicmV2aWF0aW9uIjogeworICAgICAgICAiQ2FuY2VsIjogIkFudWx1aiIsCisgICAgICAgICJEZWxldGUiOiAiVXN1xYQiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiQWJvdXRCb3giOiB7CisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJJbmZvcm1hY2plIG8gdHltIGVkeXRvcnplIgorICAgIH0sCisgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbnVsdWoiCisgICAgfSwKKyAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICJDb2xvcjogIjogIktvbG9yIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAiQ19lbGwgUHJvcGVydGllcy4uLiI6ICJXxYJhxZtjaXdvxZtjaSBrb23Ds3JraSIsCisgICAgICAgICJDaGVjX2sgTGluay4uLiI6ICJTcHJhd2TFuiBvZG5vxZtuaWsiLAorICAgICAgICAiQ29weSI6ICJLb3BpdWoiLAorICAgICAgICAiQ3JlYXRlIGEgbGluayI6ICJVdHfDs3J6IG9kbm/Fm25payIsCisgICAgICAgICJDdXJyZW50IFVSTCBpcyI6ICJCaWXFvMSFY3kgVVJMIG9kbm/Fm25pa2EiLAorICAgICAgICAiQ3V0IjogIld5dG5paiIsCisgICAgICAgICJEZV9sZXRlIENvbHVtbiI6ICJVc3XFhCBrb2x1bW7EmSIsCisgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgY29sdW1uIjogIlVzdXdhIGJpZcW8xIVjxIUga29sdW1uxJkiLAorICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IHJvdyI6ICJVc3XFhCBiaWXFvMSFY3kgd2llcnN6IiwKKyAgICAgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIkphayB0dSB0cmFmacWCZcWbIChQcm9zesSZLCBwb2RhaiBva29saWN6bm/Fm2NpISkiLAorICAgICAgICAiSV9uc2VydCBSb3cgQmVmb3JlIjogIldzdGF3IHdpZXJzeiBwcnplZCIsCisgICAgICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICJXc3RhdyB3aWVyc3ogcG8iLAorICAgICAgICAiSW5zZXJ0IENfb2x1bW4gQWZ0ZXIiOiAiV3N0YXcga29sdW1uxJkgcG8iLAorICAgICAgICAiSW5zZXJ0IF9Db2x1bW4gQmVmb3JlIjogIldzdGF3IGtvbHVtbsSZIHByemVkIiwKKyAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIldzdGF3IG5vd8SFIGtvbHVtbsSZIHBvIGJpZcW8xIVjZWoiLAorICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIldzdGF3IG5vd8SFIGtvbHVtbsSZIHByemVkIGJpZcW8xIVjxIUiLAorICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiV3N0YXcgbm93eSB3aWVyc3ogcG8gYmllxbzEhWN5bSIsCisgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiV3N0YXcgbm93eSB3aWVyc3ogcHJ6ZWQgYmllxbzEhWN5bSIsCisgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYWZ0ZXIgdGhlIGN1cnJlbnQgbm9kZSI6ICJXc3RhdyBha2FwaXQgcG8gYmllxbzEhWN5bSBlbGVtZW5jaWUiLAorICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGJlZm9yZSB0aGUgY3VycmVudCBub2RlIjogIldzdGF3IGFrYXBpdCBwcnplZCBiaWXFvMSFY3ltIGVsZW1lbnRlbSIsCisgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGFmdGVyIjogIldzdGF3IGFrYXBpdCBwbyIsCisgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGJlZm9yZSI6ICJXc3RhdyBha2FwaXQgcHJ6ZWQiLAorICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiV3ljZW50cnVqIiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICJXeWp1c3R1aiIsCisgICAgICAgICJKdXN0aWZ5IExlZnQiOiAiV3lyw7N3bmFqIGRvIGxld2VqIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiV3lyw7N3bmFqIGRvIHByYXdlaiIsCisgICAgICAgICJMaW5rIHBvaW50cyB0bzoiOiAiT2Rub8WbbmlrIHdza2F6dWplIG5hOiIsCisgICAgICAgICJNYWtlIGxpbl9rLi4uIjogIlV0d8Ozcnogb2Rub8WbbmlrIiwKKyAgICAgICAgIk9wZW5zIHRoaXMgbGluayBpbiBhIG5ldyB3aW5kb3ciOiAiT3R3aWVyYSB0ZW4gb2Rub8WbbmlrIHcgbm93eW0gb2tuaWUiLAorICAgICAgICAiUGFzdGUiOiAiV2tsZWoiLAorICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBlbGVtZW50OiI6ICJOYSBwZXdubyBjaGNlc3ogdXN1bsSFxIcgdGVuIGVsZW1lbnQ/IiwKKyAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gdW5saW5rIHRoaXMgZWxlbWVudC4iOiAiTmEgcGV3bm8gY2hjZXN6IHVzdW7EhcSHIG9kbm/Fm25paz8iLAorICAgICAgICAiUmVtb3ZlIHRoZSAkZWxlbSBFbGVtZW50Li4uIjogIlVzdcWEICRlbGVtLi4uIiwKKyAgICAgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiVXN1xYQgdGVuIGVsZW1lbnQgeiBkb2t1bWVudHUiLAorICAgICAgICAiUm9fdyBQcm9wZXJ0aWVzLi4uIjogIlfFgmHFm2Npd2/Fm2NpIHdpZXJzemEiLAorICAgICAgICAiU2hvdyB0aGUgVGFibGUgQ2VsbCBQcm9wZXJ0aWVzIGRpYWxvZyI6ICJQb2thxbwgb2tubyB3xYJhxZtjaXdvxZtjaSBrb23Ds3JraSIsCisgICAgICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICJQb2thxbwgb2tpZW5rbyB3xYJhxZtjaXdvxZtjaSB0YWJlbGkiLAorICAgICAgICAiU2hvdyB0aGUgVGFibGUgUm93IFByb3BlcnRpZXMgZGlhbG9nIjogIlBva2HFvCBva25vIHfFgmHFm2Npd2/Fm2NpIHdpZXJzemEiLAorICAgICAgICAiU2hvdyB0aGUgaW1hZ2UgcHJvcGVydGllcyBkaWFsb2ciOiAiUG9rYcW8IG9raWVua28gd8WCYcWbY2l3b8WbY2kgb2JyYXprYSIsCisgICAgICAgICJVbmxpbmsgdGhlIGN1cnJlbnQgZWxlbWVudCI6ICJVc3XFhCBvZG5vxZtuaWsgeiB6YXpuYWN6b25lZ28gZWxlbWVudHUiLAorICAgICAgICAiX0RlbGV0ZSBSb3ciOiAiVXN1xYQgd2llcnN6IiwKKyAgICAgICAgIl9JbWFnZSBQcm9wZXJ0aWVzLi4uIjogIlfFgmHFm2Npd2/Fm2NpIG9icmF6a2EiLAorICAgICAgICAiX01vZGlmeSBMaW5rLi4uIjogIlptaWXFhCBvZG5vxZtuaWsiLAorICAgICAgICAiX1JlbW92ZSBMaW5rLi4uIjogIlVzdcWEIG9kbm/Fm25payIsCisgICAgICAgICJfVGFibGUgUHJvcGVydGllcy4uLiI6ICJXxYJhxZtjaXdvxZtjaSB0YWJlbGkiCisgICAgfSwKKyAgICAiQ3JlYXRlTGluayI6IHsKKyAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICJOYSBwZXdubyBjaGNlc3ogdXN1bsSFxIcgb2Rub8WbbmlrPyIsCisgICAgICAgICJDYW5jZWwiOiAiQW51bHVqIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJXc3Rhdy9lZHl0dWogb2Rub8WbbmlrIiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTm93ZSBva25vIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiQnJhayIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPdGhlciI6ICJJbm5lIiwKKyAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJUYSBzYW1hIHJhbWthIChfc2VsZikiLAorICAgICAgICAiVGFyZ2V0OiI6ICJPa25vIGRvY2Vsb3dlOiIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogIlR5dHXFgiAodG9vbHRpcCk6IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiR8WCw7N3bmEgcmFta2EgKF90b3ApIiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIKKyAgICB9LAorICAgICJFZGl0VGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIkFudWx1aiIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUHJldmlldyI6ICJQb2RnbMSFZCIKKyAgICB9LAorICAgICJFeHRlbmRlZEZpbGVNYW5hZ2VyIjogeworICAgICAgICAiQWJzYm90dG9tIjogIkFicy4gZMOzxYIiLAorICAgICAgICAiQWJzbWlkZGxlIjogIkFicy4gxZtyb2RlayIsCisgICAgICAgICJBbGlnbiI6ICJXeXLDs3duYW5pZSIsCisgICAgICAgICJBbHQiOiAiQWx0IiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkxpbmlhIGJhem93YSIsCisgICAgICAgICJCb3JkZXIiOiAiUmFta2EiLAorICAgICAgICAiQm9yZGVyIENvbG9yIjogIktvbG9yIHJhbWtpIiwKKyAgICAgICAgIkJvdHRvbSI6ICJEw7PFgiIsCisgICAgICAgICJDYW5jZWwiOiAiQW51bHVqIiwKKyAgICAgICAgIkNsZWFyIjogIld5Y3p5xZvEhyIsCisgICAgICAgICJDb2xvciI6ICJLb2xvciIsCisgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiWmFjaG93YWogcHJvcG9yY2plIiwKKyAgICAgICAgIkNvcHkiOiAiS29waXVqIiwKKyAgICAgICAgIkNyb3AiOiAiUHJ6eXRuaWoiLAorICAgICAgICAiQ3V0IjogIld5dG5paiIsCisgICAgICAgICJEaXJlY3RvcnkiOiAiS2F0YWxvZyIsCisgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiS2F0YWxvZyB3ecW8ZWoiLAorICAgICAgICAiRWRpdCI6ICJFZHl0dWoiLAorICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIk1lbmVkxbxlciBwbGlrw7N3IiwKKyAgICAgICAgIkZpbGVuYW1lOiI6ICJOYXp3YSBwbGlrdToiLAorICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIk9kd3LDs8SHIHBvemlvbW8iLAorICAgICAgICAiRmxpcCBJbWFnZSI6ICJPZHdyw7PEhyIsCisgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIk9kd3LDs8SHIHBpb25vd28iLAorICAgICAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIkJyYWsgb2JzxYJ1Z2kgcGxpa8OzdyBHSUYsIGVkeWNqYSBqZXN0IG5pZW1vxbxsaXdhLiIsCisgICAgICAgICJIZWlnaHQiOiAiV3lzb2tvxZvEhyIsCisgICAgICAgICJIZWlnaHQ6IjogIld5c29rb8WbxIc6IiwKKyAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiV3N0YXcgb2Rub8WbbmlrIGRvIHBsaWt1IG5hIHNlcndlcnplIiwKKyAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIk5pZXByYXdpZMWCb3d5IGthdGFsb2cgYmF6b3d5OiIsCisgICAgICAgICJKUEVHIEhpZ2giOiAiSlBFRyB3eXNva2EiLAorICAgICAgICAiSlBFRyBMb3ciOiAiSlBFRyBuaXNrYSIsCisgICAgICAgICJKUEVHIE1lZGl1bSI6ICJKUEVHIMWbcmVkbmlhIiwKKyAgICAgICAgIkxlZnQiOiAiRG8gbGV3ZWoiLAorICAgICAgICAiTG9hZGluZyI6ICLFgWFkb3dhbmllIiwKKyAgICAgICAgIkxvY2siOiAiWmFibG9rdWoiLAorICAgICAgICAiTWFyZ2luIjogIk9kc3TEmXAiLAorICAgICAgICAiTWFya2VyIjogIlphem5hY3oiLAorICAgICAgICAiTWVhc3VyZSI6ICJabWllcnoiLAorICAgICAgICAiTWlkZGxlIjogIsWacm9kZWsiLAorICAgICAgICAiTmV3IEZvbGRlciI6ICJOb3d5IGthdGFsb2ciLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOb3dlIG9rbm8gKF9ibGFuaykiLAorICAgICAgICAiTm8gRmlsZXMgRm91bmQiOiAiTmllIHpuYWxlemlvbm8gcGxpa8OzdyIsCisgICAgICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiT2JyYXplayBuaWVkb3N0xJlwbnkiLAorICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJCcmFrIiwKKyAgICAgICAgIk5vdCBzZXQiOiAiTmllIHVzdGF3aW9uZSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQYWRkaW5nIjogIldjacSZY2llIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiV3lyw7N3bmFuaWUgdGVnbyBvYnJhemthIG5hIHN0cm9uaWUiLAorICAgICAgICAiUHJldmlldyI6ICJQb2RnbMSFZCIsCisgICAgICAgICJRdWFsaXR5OiI6ICJKYWtvxZvEhyIsCisgICAgICAgICJSZWZyZXNoIjogIk9kxZt3aWXFvCIsCisgICAgICAgICJSZW5hbWUiOiAiWm1pZcWEIG5henfEmSIsCisgICAgICAgICJSZXNpemUiOiAiUHJ6ZXNrYWx1aiIsCisgICAgICAgICJSaWdodCI6ICJEbyBwcmF3ZWoiLAorICAgICAgICAiUm90YXRlIjogIk9icsOzxIciLAorICAgICAgICAiUm90YXRlIEltYWdlIjogIk9icsOzxIciLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlRhIHNhbWEgcmFta2EgKF9zZWxmKSIsCisgICAgICAgICJTYXZlIjogIlphcGlzeiIsCisgICAgICAgICJTdGFydCBYOiI6ICJQb2N6xIV0ZWsgWDoiLAorICAgICAgICAiU3RhcnQgWToiOiAiUG9jesSFdGVrIFk6IiwKKyAgICAgICAgIlRhcmdldCBXaW5kb3ciOiAiRG9jZWxvd2Ugb2tubyIsCisgICAgICAgICJUZXh0dG9wIjogIkfDs3JhIHRla3N0dSIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCkiOiAiVHl0dcWCIiwKKyAgICAgICAgIlRvcCI6ICJHw7NyYSIsCisgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIkfFgsOzd25hIHJhbWthIChfdG9wKSIsCisgICAgICAgICJUcmFzaCI6ICJVc3XFhCIsCisgICAgICAgICJVcGxvYWQiOiAiV2dyYWoiLAorICAgICAgICAiVzoiOiAiTDoiLAorICAgICAgICAiV2lkdGgiOiAiU3plcm9rb8WbxIciLAorICAgICAgICAiV2lkdGg6IjogIlN6ZXJva2/Fm8SHOiIsCisgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiWmF6bmFjeiB0ZWtzdCBwcnplZCBkb2RhbmllbSBvZG5vxZtuaWthLiIKKyAgICB9LAorICAgICJGaW5kUmVwbGFjZSI6IHsKKyAgICAgICAgIkNhc2Ugc2Vuc2l0aXZlIHNlYXJjaCI6ICJXZyB3aWVsa2/Fm2NpIGxpdGVyIiwKKyAgICAgICAgIkNsZWFyIjogIld5Y3p5xZvEhyIsCisgICAgICAgICJEb25lIjogIkdvdG93ZSIsCisgICAgICAgICJFbnRlciB0aGUgdGV4dCB5b3Ugd2FudCB0byBmaW5kIjogIlBvZGFqIHRla3N0LCBqYWtpIGNoY2VzeiB3eXN6dWthxIciLAorICAgICAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICJabmFqZMW6IGkgemFtaWXFhCIsCisgICAgICAgICJIaWdobGlnaHQiOiAiUG9kxZt3aWV0bCIsCisgICAgICAgICJJbmZvcm0gYSByZXBsYWNlbWVudCB3b3JkIjogIlBvZGFqIHRla3N0IGRvIHphbWlhbnkiLAorICAgICAgICAiTmV4dCI6ICJOYXN0xJlwbnkiLAorICAgICAgICAiT3B0aW9ucyI6ICJPcGNqZSIsCisgICAgICAgICJSZXBsYWNlIHdpdGg6IjogIlphbWllxYQgbmE6IiwKKyAgICAgICAgIlNlYXJjaCBmb3I6IjogIlN6dWthajoiLAorICAgICAgICAiU3Vic3RpdHV0ZSBhbGwgb2NjdXJyZW5jZXMiOiAiWmFtaWXFhCB3c3p5c3RraWUgd3lzdMSFcGllbmlhIiwKKyAgICAgICAgIlN1YnN0aXR1dGUgdGhpcyBvY2N1cnJlbmNlPyI6ICJaYW1pZW5pxIcgdG8gd3lzdMSFcGllbmllPyIsCisgICAgICAgICJVbmRvIjogIkNvZm5paiIsCisgICAgICAgICJXaG9sZSB3b3JkcyBvbmx5IjogIkNhxYJlIHPFgm93YSIsCisgICAgICAgICJmb3VuZCBpdGVtIjogInpuYWxlemlvbnkiLAorICAgICAgICAiZm91bmQgaXRlbXMiOiAiem5hbGV6aW9ueWNoIiwKKyAgICAgICAgIm5vdCBmb3VuZCI6ICJuaWUgem5hbGV6aW9ueSIsCisgICAgICAgICJyZXBsYWNlZCBpdGVtIjogInphbWllbmlvbnkiLAorICAgICAgICAicmVwbGFjZWQgaXRlbXMiOiAiemFtaWVuaW9ueWNoIgorICAgIH0sCisgICAgIkZvcm1zIjogeworICAgICAgICAiQ2FuY2VsIjogIkFudWx1aiIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIlVSTCBvYnJhemthOiIsCisgICAgICAgICJOYW1lIjogIk5hendhIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk9wdGlvbnMiOiAiT3BjamUiLAorICAgICAgICAiUm93czoiOiAiV2llcnN6eToiLAorICAgICAgICAiU2l6ZToiOiAiUm96bWlhcjoiCisgICAgfSwKKyAgICAiRnVsbFBhZ2UiOiB7CisgICAgICAgICJBbHRlcm5hdGUgc3R5bGUtc2hlZXQ6IjogIkFsdGVybmF0eXdueSBhcmt1c3ogc3R5bMOzdzoiLAorICAgICAgICAiQmFja2dyb3VuZCBjb2xvcjoiOiAiS29sb3IgdMWCYToiLAorICAgICAgICAiQ2FuY2VsIjogIkFudWx1aiIsCisgICAgICAgICJDaGFyYWN0ZXIgc2V0OiI6ICJaZXN0YXcgem5ha8OzdyIsCisgICAgICAgICJET0NUWVBFOiI6ICJET0NUWVBFOiIsCisgICAgICAgICJEZXNjcmlwdGlvbjoiOiAiT3BpcyIsCisgICAgICAgICJEb2N1bWVudCBwcm9wZXJ0aWVzIjogIlfFgmHFm2Npd2/Fm2NpIGRva3VtZW50dSIsCisgICAgICAgICJEb2N1bWVudCB0aXRsZToiOiAiVHl0dcWCIGRva3VtZW50dToiLAorICAgICAgICAiS2V5d29yZHM6IjogIlPFgm93YSBrbHVjem93ZSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQcmltYXJ5IHN0eWxlLXNoZWV0OiI6ICJBcmt1c3ogc3R5bMOzdzoiLAorICAgICAgICAiVGV4dCBjb2xvcjoiOiAiS29sb3IgdGVrc3R1OiIsCisgICAgICAgICJVVEYtOCAocmVjb21tZW5kZWQpIjogIlVURi04ICh6YWxlY2FueSkiCisgICAgfSwKKyAgICAiRnVsbFNjcmVlbiI6IHsKKyAgICAgICAgIk1heGltaXplL01pbmltaXplIEVkaXRvciI6ICJNYWtzeW1hbGl6dWovbWluaW1hbGl6dWogZWR5dG9yIgorICAgIH0sCisgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAiQWxpZ25tZW50OiI6ICJXeXLDs3duYW5pZToiLAorICAgICAgICAiQ2FuY2VsIjogIkFudWx1aiIsCisgICAgICAgICJDZW50ZXIiOiAixZpyb2RlayIsCisgICAgICAgICJDb2xvcjoiOiAiS29sb3I6IiwKKyAgICAgICAgIkhlaWdodDoiOiAiV3lzb2tvxZvEhzoiLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIkxpbmlhIHBvemlvbWEiLAorICAgICAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgICAgICJMZWZ0IjogIkRvIGxld2VqIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlJpZ2h0IjogIkRvIHByYXdlaiIsCisgICAgICAgICJXaWR0aDoiOiAiU3plcm9rb8WbxIc6IiwKKyAgICAgICAgInBlcmNlbnQiOiAiJSIsCisgICAgICAgICJwaXhlbHMiOiAicGlrc2VsaSIKKyAgICB9LAorICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICJBYnNib3R0b20iOiAiQWJzLiBkw7PFgiIsCisgICAgICAgICJBYnNtaWRkbGUiOiAiQWJzLiDFm3JvZGVrIiwKKyAgICAgICAgIkFuZ2xlOiI6ICJLxIV0OiIsCisgICAgICAgICJCYXNlbGluZSI6ICJMaW5pYSBiYXpvd2EiLAorICAgICAgICAiQm90dG9tIjogIkTDs8WCIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICAgICAiQ2xlYXIiOiAiV3ljennFm8SHIiwKKyAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICJaYWNob3dhaiBwcm9wb3JjamUiLAorICAgICAgICAiQ3JvcCI6ICJQcnp5dG5paiIsCisgICAgICAgICJEaXJlY3RvcnkiOiAiS2F0YWxvZyIsCisgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiS2F0YWxvZyB3ecW8ZWoiLAorICAgICAgICAiRWRpdCI6ICJFZHl0dWoiLAorICAgICAgICAiRmlsZW5hbWU6IjogIk5hendhIHBsaWt1OiIsCisgICAgICAgICJGbGlwIEhvcml6b250YWwiOiAiT2R3csOzxIcgcG96aW9tbyIsCisgICAgICAgICJGbGlwIEltYWdlIjogIk9kd3LDs8SHIiwKKyAgICAgICAgIkZsaXAgVmVydGljYWwiOiAiT2R3csOzxIcgcGlvbm93byIsCisgICAgICAgICJGb2xkZXIgTmFtZToiOiAiTmF6d2Ega2F0YWxvZ3UiLAorICAgICAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIkJyYWsgb2JzxYJ1Z2kgcGxpa8OzdyBHSUYsIGVkeWNqYSBqZXN0IG5pZW1vxbxsaXdhLiIsCisgICAgICAgICJIZWlnaHQ6IjogIld5c29rb8WbxIc6IiwKKyAgICAgICAgIkltYWdlIEZvcm1hdCI6ICJGb3JtYXQgcGxpa3U6IiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICJXc3RhdyBvYnJhemVrIiwKKyAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIk5pZXByYXdpZMWCb3d5IGthdGFsb2cgYmF6b3d5OiIsCisgICAgICAgICJKUEVHIEhpZ2giOiAiSlBFRyB3eXNva2EiLAorICAgICAgICAiSlBFRyBMb3ciOiAiSlBFRyBuaXNrYSIsCisgICAgICAgICJKUEVHIE1lZGl1bSI6ICJKUEVHIMWbcmVkbmlhIiwKKyAgICAgICAgIkxlZnQiOiAiRG8gbGV3ZWoiLAorICAgICAgICAiTG9jayI6ICJaYWJsb2t1aiIsCisgICAgICAgICJNYXJrZXIiOiAiWmF6bmFjeiIsCisgICAgICAgICJNZWFzdXJlIjogIlptaWVyeiIsCisgICAgICAgICJNaWRkbGUiOiAixZpyb2RlayIsCisgICAgICAgICJOZXcgRm9sZGVyIjogIk5vd3kga2F0YWxvZyIsCisgICAgICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiT2JyYXplayBuaWVkb3N0xJlwbnkiLAorICAgICAgICAiTm8gSW1hZ2VzIEZvdW5kIjogIk5pZSB6bmFsZXppb25vIG9icmF6a8OzdyIsCisgICAgICAgICJOb3Qgc2V0IjogIk5pZSB1c3Rhd2lvbmUiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJXeXLDs3duYW5pZSB0ZWdvIG9icmF6a2EgbmEgc3Ryb25pZSIsCisgICAgICAgICJRdWFsaXR5OiI6ICJKYWtvxZvEhyIsCisgICAgICAgICJSZWZyZXNoIjogIk9kxZt3aWXFvCIsCisgICAgICAgICJSZXNpemUiOiAiUHJ6ZXNrYWx1aiIsCisgICAgICAgICJSaWdodCI6ICJEbyBwcmF3ZWoiLAorICAgICAgICAiUm90YXRlIjogIk9icsOzxIciLAorICAgICAgICAiUm90YXRlIEltYWdlIjogIk9icsOzxIciLAorICAgICAgICAiU2F2ZSI6ICJaYXBpc3oiLAorICAgICAgICAiU3RhcnQgWDoiOiAiUG9jesSFdGVrIFgiLAorICAgICAgICAiU3RhcnQgWToiOiAiUG9jesSFdGVrIFkiLAorICAgICAgICAiVGV4dHRvcCI6ICJHw7NyYSB0ZWtzdHUiLAorICAgICAgICAiVG9wIjogIkfDs3JhIiwKKyAgICAgICAgIlRyYXNoIjogIlVzdcWEIiwKKyAgICAgICAgIlc6IjogIkw6IiwKKyAgICAgICAgIldpZHRoOiI6ICJTemVyb2tvxZvEhzoiCisgICAgfSwKKyAgICAiSW5saW5lU3R5bGVyIjogeworICAgICAgICAiQmFja2dyb3VuZCI6ICJUxYJvIiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkxpbmlhIGJhem93YSIsCisgICAgICAgICJCb3JkZXIiOiAiUmFta2EiLAorICAgICAgICAiQm90dG9tIjogIkTDs8WCIiwKKyAgICAgICAgIkNTUyBTdHlsZSI6ICJTdHlsIENTUyIsCisgICAgICAgICJDZW50ZXIiOiAixZpyb2RlayIsCisgICAgICAgICJDaGFyIjogIlpuYWsiLAorICAgICAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAiUmFta2kgc2tvbGFwc293YW5lIiwKKyAgICAgICAgIkZHIENvbG9yIjogIktvbG9yIGN6Y2lvbmVrIiwKKyAgICAgICAgIkZsb2F0IjogIk9wxYJ5d2FuaWUiLAorICAgICAgICAiSGVpZ2h0IjogIld5c29rb8WbxIciLAorICAgICAgICAiSW1hZ2UgVVJMIjogIlVSTCBvYnJhemthIiwKKyAgICAgICAgIkp1c3RpZnkiOiAiV3lqdXN0dWoiLAorICAgICAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgICAgICJMZWZ0IjogIkRvIGxld2VqIiwKKyAgICAgICAgIk1hcmdpbiI6ICJPZHN0xJlwIiwKKyAgICAgICAgIk1pZGRsZSI6ICLFmnJvZGVrIiwKKyAgICAgICAgIk5vbmUiOiAiQnJhayIsCisgICAgICAgICJQYWRkaW5nIjogIldjacSZY2lhIiwKKyAgICAgICAgIlJpZ2h0IjogIkRvIHByYXdlaiIsCisgICAgICAgICJUZXh0IGFsaWduIjogIld5ci4gdyBwb3ppb21pZSIsCisgICAgICAgICJUb3AiOiAiR8OzcmEiLAorICAgICAgICAiVmVydGljYWwgYWxpZ24iOiAiV3lyLiB3IHBpb25pZSIsCisgICAgICAgICJXaWR0aCI6ICJTemVyb2tvxZvEhyIsCisgICAgICAgICJwZXJjZW50IjogIiUiLAorICAgICAgICAicGl4ZWxzIjogInBpa3NlbGkiCisgICAgfSwKKyAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAiQW5jaG9yIG5hbWUiOiAiTmF6d2Ega290d2ljeSIsCisgICAgICAgICJDYW5jZWwiOiAiQW51bHVqIiwKKyAgICAgICAgIkRlbGV0ZSI6ICJVc3XFhCIsCisgICAgICAgICJJbnNlcnQgQW5jaG9yIjogIldzdGF3IGtvdHdpY8SZIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkluc2VydEltYWdlIjogeworICAgICAgICAiQWJzYm90dG9tIjogIkFicy4gZMOzxYIiLAorICAgICAgICAiQWJzbWlkZGxlIjogIkFicy4gxZtyb2RlayIsCisgICAgICAgICJBbGlnbm1lbnQ6IjogIld5csOzd25hbmllOiIsCisgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiVGVrc3QgYWx0ZXJuYXR5d255OiIsCisgICAgICAgICJCYXNlbGluZSI6ICJMaW5pYSBiYXpvd2EiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiR3J1Ym/Fm8SHIG9icmFtb3dhbmlhOiIsCisgICAgICAgICJCb3R0b20iOiAiRMOzxYIiLAorICAgICAgICAiQ2FuY2VsIjogIkFudWx1aiIsCisgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiUG9kYWogVVJMIG9icmF6a2EiLAorICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiRGxhIHByemVnbMSFZGFyZWssIGt0w7NyZSBuaWUgb2JzxYJ1Z3VqxIUgb2JyYXprw7N3IiwKKyAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICJXY2nEmWNpZSBwb3ppb21lIiwKKyAgICAgICAgIkhvcml6b250YWw6IjogIlBvemlvbWU6IiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIlBvZGdsxIVkIG9icmF6a2E6IiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiVVJMIG9icmF6a2E6IiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICJXc3RhdyBvYnJhemVrIiwKKyAgICAgICAgIkxheW91dCI6ICJMYXlvdXQiLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJCZXogcmFtZWsgLSB6b3N0YXcgcHVzdGUiLAorICAgICAgICAiTGVmdCI6ICJEbyBsZXdlaiIsCisgICAgICAgICJNaWRkbGUiOiAixZpyb2RlayIsCisgICAgICAgICJOb3Qgc2V0IjogIk5pZSB1c3Rhd2lvbmUiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJXeXLDs3duYW5pZSB0ZWdvIG9icmF6a2EgbmEgc3Ryb25pZSIsCisgICAgICAgICJQcmV2aWV3IjogIlBvZGdsxIVkIiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJQb2RnbMSFZCBvYnJhemthIHcgbm93eW0gb2tuaWUiLAorICAgICAgICAiUmlnaHQiOiAiRG8gcHJhd2VqIiwKKyAgICAgICAgIlNwYWNpbmciOiAiT2RzdMSZcCIsCisgICAgICAgICJUZXh0dG9wIjogIkfDs3JhIHRla3N0dSIsCisgICAgICAgICJUb3AiOiAiR8OzcmEiLAorICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICJXY2nEmWNpZSBwaW9ub3dlIiwKKyAgICAgICAgIlZlcnRpY2FsOiI6ICJQaW9ub3dlOiIKKyAgICB9LAorICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAiQ2FuY2VsIjogIkFudWx1aiIsCisgICAgICAgICJIZWlnaHQ6IjogIld5c29rb8WbxIc6IiwKKyAgICAgICAgIkxlZnQiOiAiRG8gbGV3ZWoiLAorICAgICAgICAiTmFtZSI6ICJOYXp3YSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJSaWdodCI6ICJEbyBwcmF3ZWoiLAorICAgICAgICAiV2lkdGg6IjogIlN6ZXJva2/Fm8SHOiIKKyAgICB9LAorICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAiQ2FuY2VsIjogIkFudWx1aiIKKyAgICB9LAorICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAiQWJzYm90dG9tIjogIkFicy4gZMOzxYIiLAorICAgICAgICAiQWJzbWlkZGxlIjogIkFicy4gxZtyb2RlayIsCisgICAgICAgICJBbGlnbm1lbnQ6IjogIld5csOzd25hbmllOiIsCisgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiVGVrc3QgYWx0ZXJuYXR5d255OiIsCisgICAgICAgICJCYXNlbGluZSI6ICJMaW5pYSBiYXpvd2EiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiR3J1Ym/Fm8SHIG9icmFtb3dhbmlhOiIsCisgICAgICAgICJCb3R0b20iOiAiRMOzxYIiLAorICAgICAgICAiQ2FuY2VsIjogIkFudWx1aiIsCisgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiUG9kYWogVVJMIG9icmF6a2EiLAorICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiRGxhIHByemVnbMSFZGFyZWssIGt0w7NyZSBuaWUgb2JzxYJ1Z3VqxIUgb2JyYXprw7N3IiwKKyAgICAgICAgIkhlaWdodDoiOiAiV3lzb2tvxZvEhzoiLAorICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIldjacSZY2llIHBvemlvbWUiLAorICAgICAgICAiSG9yaXpvbnRhbDoiOiAiUG96aW9tZToiLAorICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiUG9kZ2zEhWQgb2JyYXprYToiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJVUkwgb2JyYXprYToiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIldzdGF3IG9icmF6ZWsiLAorICAgICAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIkJleiByYW1layAtIHpvc3RhdyBwdXN0ZSIsCisgICAgICAgICJMZWZ0IjogIkRvIGxld2VqIiwKKyAgICAgICAgIk1pZGRsZSI6ICLFmnJvZGVrIiwKKyAgICAgICAgIk5vdCBzZXQiOiAiTmllIHVzdGF3aW9uZSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIld5csOzd25hbmllIHRlZ28gb2JyYXprYSBuYSBzdHJvbmllIiwKKyAgICAgICAgIlByZXZpZXciOiAiUG9kZ2zEhWQiLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlBvZGdsxIVkIG9icmF6a2EgdyBub3d5bSBva25pZSIsCisgICAgICAgICJSaWdodCI6ICJEbyBwcmF3ZWoiLAorICAgICAgICAiU2l6ZSI6ICJSb3ptaWFyIiwKKyAgICAgICAgIlNwYWNpbmciOiAiT2RzdMSZcCIsCisgICAgICAgICJUZXh0dG9wIjogIkfDs3JhIHRla3N0dSIsCisgICAgICAgICJUb3AiOiAiR8OzcmEiLAorICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICJXY2nEmWNpZSBwaW9ub3dlIiwKKyAgICAgICAgIlZlcnRpY2FsOiI6ICJQaW9ub3dlOiIsCisgICAgICAgICJXaWR0aDoiOiAiU3plcm9rb8WbxIc6IgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW51bHVqIgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAiQ2FuY2VsIjogIkFudWx1aiIKKyAgICB9LAorICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJBYnMuIGTDs8WCIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJBYnMuIMWbcm9kZWsiLAorICAgICAgICAiQWxpZ25tZW50OiI6ICJXeXLDs3duYW5pZToiLAorICAgICAgICAiQmFzZWxpbmUiOiAiTGluaWEgYmF6b3dhIiwKKyAgICAgICAgIkJvcmRlciI6ICJSYW1rYSIsCisgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJHcnVib8WbxIcgb2JyYW1vd2FuaWE6IiwKKyAgICAgICAgIkJvdHRvbSI6ICJEw7PFgiIsCisgICAgICAgICJDYW5jZWwiOiAiQW51bHVqIiwKKyAgICAgICAgIkNhcHRpb24iOiAiUG9kcGlzIiwKKyAgICAgICAgIkNlbGwgcGFkZGluZzoiOiAiV2NpxJljaWUga29tw7NyZWs6IiwKKyAgICAgICAgIkNlbGwgc3BhY2luZzoiOiAiT2RzdMSZcCBrb23Ds3JlazoiLAorICAgICAgICAiQ29sczoiOiAiS29sdW1uOiIsCisgICAgICAgICJFbSI6ICJFbSIsCisgICAgICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIktvbHVtbnkgbyBzdGHFgmVqIHN6ZXJva2/Fm2NpIiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICJXc3RhdyB0YWJlbMSZIiwKKyAgICAgICAgIkxheW91dCI6ICJMYXlvdXQiLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJCZXogcmFtZWsgLSB6b3N0YXcgcHVzdGUiLAorICAgICAgICAiTGVmdCI6ICJEbyBsZXdlaiIsCisgICAgICAgICJNaWRkbGUiOiAixZpyb2RlayIsCisgICAgICAgICJOb3Qgc2V0IjogIk5pZSB1c3Rhd2lvbmUiLAorICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiTGljemJhIGtvbHVtbiIsCisgICAgICAgICJOdW1iZXIgb2Ygcm93cyI6ICJMaWN6YmEgd2llcnN6eSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQZXJjZW50IjogIlByb2NlbnQiLAorICAgICAgICAiUGl4ZWxzIjogIlBpa3NlbGkiLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICJQb3p5Y2pvbm93YW5pZSB0YWJlbGkiLAorICAgICAgICAiUmlnaHQiOiAiRG8gcHJhd2VqIiwKKyAgICAgICAgIlJvd3M6IjogIldpZXJzenk6IiwKKyAgICAgICAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAiUHJ6ZXN0cnplxYQgcG9tacSZZHp5IGtvbcOzcmthbWkiLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICJQcnplc3RyemXFhCBtacSZZHp5IGtyYXfEmWR6acSFIGEgemF3YXJ0b8WbY2nEhSBrb23Ds3JraSIsCisgICAgICAgICJTcGFjaW5nIjogIk9kc3TEmXAiLAorICAgICAgICAiVGV4dHRvcCI6ICJHw7NyYSB0ZWtzdHUiLAorICAgICAgICAiVG9wIjogIkfDs3JhIiwKKyAgICAgICAgIldpZHRoIG9mIHRoZSB0YWJsZSI6ICJTemVyb2tvxZvEhyB0YWJlbGkiLAorICAgICAgICAiV2lkdGggdW5pdCI6ICJKZWRub3N0a2EiLAorICAgICAgICAiV2lkdGg6IjogIlN6ZXJva2/Fm8SHOiIKKyAgICB9LAorICAgICJMaW5rZXIiOiB7CisgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiTmEgcGV3bm8gY2hjZXN6IHVzdW7EhcSHIG9kbm/Fm25paz8iLAorICAgICAgICAiQ2FuY2VsIjogIkFudWx1aiIsCisgICAgICAgICJFbWFpbCBBZGRyZXNzOiI6ICJBZHJlcyBlLW1haWwiLAorICAgICAgICAiRW1haWwgTGluayI6ICJMaW5rIGRvIGUtbWFpbGEiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIldzdGF3L2VkeXR1aiBvZG5vxZtuaWsiLAorICAgICAgICAiTWVzc2FnZSBUZW1wbGF0ZToiOiAiU3phYmxvbiB3aWFkbW/Fm2NpOiIsCisgICAgICAgICJOYW1lOiI6ICJOYXp3YToiLAorICAgICAgICAiTmV3IFdpbmRvdyI6ICJOb3dlIG9rbm8iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3JkaW5hcnkgTGluayI6ICJad3lrxYJ5IG9kbm/Fm25payIsCisgICAgICAgICJQb3B1cCBXaW5kb3ciOiAiT2tpZW5rbyBwb3AtdXAiLAorICAgICAgICAiUmVtb3ZlIExpbmsiOiAiVVNVxYMgT0ROT8WaTklLIiwKKyAgICAgICAgIlNhbWUgV2luZG93IChqdW1wIG91dCBvZiBmcmFtZXMpIjogIlRvIHNhbW8gb2tubyAod3lza29jeiB6IHJhbWVrKSIsCisgICAgICAgICJTaXplOiI6ICJSb3ptaWFyOiIsCisgICAgICAgICJTdWJqZWN0OiI6ICJUZW1hdDoiLAorICAgICAgICAiVGFyZ2V0OiI6ICJPa25vIGRvY2Vsb3dlOiIsCisgICAgICAgICJVUkwgTGluayI6ICJBZHJlcyBVUkwiLAorICAgICAgICAiVVJMOiI6ICJVUkw6IiwKKyAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICJaYXpuYWN6IHRla3N0IHByemVkIGRvZGFuaWVtIG9kbm/Fm25pa2EuIgorICAgIH0sCisgICAgIkxpc3RUeXBlIjogeworICAgICAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogIld5YmllcnogdHlwIGxpc3R5IG51bWVyb3dhbmVqIiwKKyAgICAgICAgIkRlY2ltYWwgbnVtYmVycyI6ICJDeWZyeSBhcmFic2tpZSIsCisgICAgICAgICJMb3dlciBncmVlayBsZXR0ZXJzIjogIk1hxYJlIGxpdGVyeSBncmVja2llIiwKKyAgICAgICAgIkxvd2VyIGxhdGluIGxldHRlcnMiOiAiTWHFgmUgbGl0ZXJ5IiwKKyAgICAgICAgIkxvd2VyIHJvbWFuIG51bWJlcnMiOiAiTWHFgmUgcnp5bXNraWUiLAorICAgICAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICJEdcW8ZSBsaXRlcnkiLAorICAgICAgICAiVXBwZXIgcm9tYW4gbnVtYmVycyI6ICJEdcW8ZSByenltc2tpZSIKKyAgICB9LAorICAgICJNb290b29sc0ZpbGVNYW5hZ2VyIjogeworICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICJXc3RhdyBvZG5vxZtuaWsgZG8gcGxpa3UgbmEgc2Vyd2VyemUiLAorICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIlphem5hY3ogdGVrc3QgcHJ6ZWQgZG9kYW5pZW0gb2Rub8WbbmlrYS4iCisgICAgfSwKKyAgICAiTm90ZVNlcnZlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICAgICAiSW1hZ2UgUHJldmlldyI6ICJQb2RnbMSFZCBvYnJhemthOiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPcHRpb25zIjogIk9wY2plIiwKKyAgICAgICAgIlByZXZpZXciOiAiUG9kZ2zEhWQiLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlBvZGdsxIVkIG9icmF6a2EgdyBub3d5bSBva25pZSIKKyAgICB9LAorICAgICJPcGVyYSI6IHsKKyAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiUHJ6eWNpc2sgV2tsZWogbmllIGR6aWHFgmEgdyBwcnplZ2zEhWRhcmthY2ggTW96aWxsYSB6IHV3YWdpIG5hIHVzdGF3aWVuaWEgYmV6cGllY3plxYRzdHdhLiBOYWNpxZtuaWogQ1JUTC1WLCBhYnkgd2tsZWnEhyB6YXdhcnRvxZvEhyBzY2hvd2thLiIKKyAgICB9LAorICAgICJQU0xvY2FsIjogeworICAgICAgICAiQ2FuY2VsIjogIkFudWx1aiIKKyAgICB9LAorICAgICJQYXN0ZVRleHQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW51bHVqIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBhc3RlIGFzIFBsYWluIFRleHQiOiAiV2tsZWogamFrbyBjenlzdHkgdGVrc3QiCisgICAgfSwKKyAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW51bHVqIiwKKyAgICAgICAgIkNvcHkiOiAiS29waXVqIiwKKyAgICAgICAgIkRlbGV0ZSI6ICJVc3XFhCIsCisgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiS2F0YWxvZyB3ecW8ZWoiLAorICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIk1lbmVkxbxlciBwbGlrw7N3IiwKKyAgICAgICAgIkZpbGVuYW1lIjogIk5hendhIHBsaWt1OiIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiV3N0YXcgb2JyYXplayIsCisgICAgICAgICJOZXcgRm9sZGVyIjogIk5vd3kga2F0YWxvZyIsCisgICAgICAgICJTYXZlIjogIlphcGlzeiIsCisgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiWmF6bmFjeiB0ZWtzdCBwcnplZCBkb2RhbmllbSBvZG5vxZtuaWthLiIKKyAgICB9LAorICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgIkFUVFJJQlVURVMiOiAiQVRSWUJVVFkiLAorICAgICAgICAiQ2FuY2VsIjogIkFudWx1aiIsCisgICAgICAgICJDb2xvcnMiOiAiS29sb3J5IiwKKyAgICAgICAgIkVudGVyIHRoZSBUQUcgeW91IHdhbnQgdG8gaW5zZXJ0IjogIlBvZGFqIFRBRywga3TDs3J5IGNoY2VzeiB3c3Rhd2nEhyIsCisgICAgICAgICJObyBDU1MgY2xhc3MgYXZhaWFibGUiOiAiQnJhayBkb3N0xJlwbnljaCBrbGFzIENTUyIsCisgICAgICAgICJPUFRJT05TIjogIk9QQ0pFIiwKKyAgICAgICAgIk9rIjogIk9rIiwKKyAgICAgICAgIlF1aWNrIFRhZyBFZGl0b3IiOiAiRWR5dG9yIFF1aWNrIFRhZyIsCisgICAgICAgICJUQUdzIjogIlRBR2kiLAorICAgICAgICAiVGhlcmUgYXJlIHNvbWUgdW5jbG9zZWQgcXVvdGUiOiAiU8SFIGpha2llxZsgbmllemFta25pxJl0ZSBjdWR6eXPFgm93aWEiLAorICAgICAgICAiVGhpcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIFRBRyI6ICJUQUcgcG9zaWFkYSBqdcW8IHRlbiBhdHJ5YnV0IiwKKyAgICAgICAgIllvdSBoYXZlIHRvIHNlbGVjdCBzb21lIHRleHQiOiAiTXVzaXN6IHphem5hY3p5xIcgdGVrc3QuIgorICAgIH0sCisgICAgIlNhdmVTdWJtaXQiOiB7CisgICAgICAgICJTYXZlIjogIlphcGlzeiIKKyAgICB9LAorICAgICJTZXRJZCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICAgICAiRGVsZXRlIjogIlVzdcWEIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUmVwbGFjZSB3aXRoIjogIlphbWllxYQgbmE6IgorICAgIH0sCisgICAgIlN0eWxpc3QiOiB7CisgICAgICAgICJTdHlsZXMiOiAiU3R5bGUiCisgICAgfSwKKyAgICAiU3VwZXJDbGVhbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAiQWxsIGZvdXIgc2lkZXMiOiAiV3N6eXN0a2llIDQgc3Ryb255IiwKKyAgICAgICAgIkJvcmRlcnMiOiAiUmFta2kiLAorICAgICAgICAiQ2FuY2VsIjogIkFudWx1aiIsCisgICAgICAgICJDYXB0aW9uIjogIlBvZHBpcyIsCisgICAgICAgICJDZWxsIFByb3BlcnRpZXMiOiAiV8WCYcWbY2l3b8WbY2kga29tw7Nya2kiLAorICAgICAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogIlfFgmHFm2Npd2/Fm2NpIGtvbcOzcmtpIiwKKyAgICAgICAgIkRlbGV0ZSBjZWxsIjogIlVzdcWEIGtvbcOzcmvEmSIsCisgICAgICAgICJEZWxldGUgY29sdW1uIjogIlVzdcWEIGtvbHVtbsSZIiwKKyAgICAgICAgIkRlbGV0ZSByb3ciOiAiVXN1xYQgd2llcnN6IiwKKyAgICAgICAgIkRlc2NyaXB0aW9uIjogIk9waXMiLAorICAgICAgICAiRnJhbWUgYW5kIGJvcmRlcnMiOiAiT2JyYW1vd2FuaWEiLAorICAgICAgICAiRnJhbWVzIjogIlJhbWtpIHpld24uIiwKKyAgICAgICAgIkluc2VydCBjZWxsIGFmdGVyIjogIldzdGF3IGtvbcOzcmvEmSBwbyIsCisgICAgICAgICJJbnNlcnQgY2VsbCBiZWZvcmUiOiAiV3N0YXcga29tw7Nya8SZIHByemVkIiwKKyAgICAgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAiV3N0YXcga29sdW1uxJkgcG8iLAorICAgICAgICAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiOiAiV3N0YXcga29sdW1uxJkgcHJ6ZWQiLAorICAgICAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICJXc3RhdyB3aWVyc3ogcG8iLAorICAgICAgICAiSW5zZXJ0IHJvdyBiZWZvcmUiOiAiV3N0YXcgd2llcnN6IHByemVkIiwKKyAgICAgICAgIk1lcmdlIGNlbGxzIjogIlNjYWwga29tw7Nya2kiLAorICAgICAgICAiTm8gcnVsZXMiOiAiQmV6IHdld27EmXRyenljaCIsCisgICAgICAgICJObyBzaWRlcyI6ICJCZXogcmFtZWsiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUGFkZGluZyI6ICJXY2nEmWNpYSIsCisgICAgICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiS2xpa25paiB3IGpha8SFxZsga29tw7Nya8SZIiwKKyAgICAgICAgIlJvdyBQcm9wZXJ0aWVzIjogIlfFgmHFm2Npd2/Fm2NpIHdpZXJzemEiLAorICAgICAgICAiUm93IHByb3BlcnRpZXMiOiAiV8WCYcWbY2l3b8WbY2kgd2llcnN6YSIsCisgICAgICAgICJSb3dzIjogIldpZXJzenk6IiwKKyAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAiTGluaWUgYsSZZMSFIHdpZG9jem5lIHBvbWnEmWR6eSBrb2x1bW5hbWkgaSB3aWVyc3phbWkiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBjb2x1bW5zIG9ubHkiOiAiTGluaWUgYsSZZMSFIHdpZG9jem5lIHR5bGtvIHBvbWnEmWR6eSBrb2x1bW5hbWkiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiByb3dzIG9ubHkiOiAiTGluaWUgYsSZZMSFIHdpZG9jem5lIHR5bGtvIHBvbWnEmWR6eSB3aWVyc3phbWkiLAorICAgICAgICAiU3BhY2luZyI6ICJPZHN0xJlwIiwKKyAgICAgICAgIlNwYWNpbmcgYW5kIHBhZGRpbmciOiAiU3BhY2pvd2FuaWUiLAorICAgICAgICAiU3BsaXQgY29sdW1uIjogIlJvemR6aWVsIGtvbHVtbsSZIiwKKyAgICAgICAgIlNwbGl0IHJvdyI6ICJSb3pkemllbCB3aWVyc3oiLAorICAgICAgICAiU3VtbWFyeSI6ICJQb2RzdW1vd2FuaWUiLAorICAgICAgICAiVGFibGUgUHJvcGVydGllcyI6ICJXxYJhxZtjaXdvxZtjaSB0YWJlbGkiLAorICAgICAgICAiVGFibGUgcHJvcGVydGllcyI6ICJXxYJhxZtjaXdvxZtjaSB0YWJlbGkiLAorICAgICAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAiVHlsa28gZG9sbmEgbGluaWEiLAorICAgICAgICAiVGhlIGxlZnQtaGFuZCBzaWRlIG9ubHkiOiAiVHlsa28gbGV3YSBsaW5pYSIsCisgICAgICAgICJUaGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb25seSI6ICJMZXdhIGkgcHJhd2EgbGluaWEiLAorICAgICAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIlR5bGtvIHByYXdhIGxpbmlhIiwKKyAgICAgICAgIlRoZSB0b3AgYW5kIGJvdHRvbSBzaWRlcyBvbmx5IjogIkfDs3JuYSBpIGRvbG5hIGxpbmlhIiwKKyAgICAgICAgIlRoZSB0b3Agc2lkZSBvbmx5IjogIlR5bGtvIGfDs3JuYSBsaW5pYSIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiTmllIG1vxbxlc3ogc2thc293YcSHIG9zdGF0bmllaiBrb23Ds3JraSB3IHdpZXJzenUuIiwKKyAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iOiAiTmllIG1vxbxlc3ogc2thc293YcSHIG9zdGF0bmllaiBrb2x1bW55IHcgdGFiZWxpLiIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIk5pZSBtb8W8ZXN6IHNrYXNvd2HEhyBvc3RhdG5pZWdvIHdpZXJzemEgdyB0YWJlbGkuIiwKKyAgICAgICAgInBpeGVscyI6ICJwaWtzZWxpIgorICAgIH0sCisgICAgIlRlbXBsYXRlIjogeworICAgICAgICAiQ2FuY2VsIjogIkFudWx1aiIKKyAgICB9LAorICAgICJVbkZvcm1hdCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiWGluaGEiOiB7CisgICAgICAgICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiYjODIxMjsgRm9ybWF0ICYjODIxMjsiLAorICAgICAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiSW5mb3JtYWNqZSBvIHR5bSBlZHl0b3J6ZSIsCisgICAgICAgICJBZGRyZXNzIjogIkFkcmVzIiwKKyAgICAgICAgIkJhY2tncm91bmQgQ29sb3IiOiAiS29sb3IgdMWCYSIsCisgICAgICAgICJCb2xkIjogIlBvZ3J1YmllbmllIiwKKyAgICAgICAgIkJ1bGxldGVkIExpc3QiOiAiV3lwdW5rdG93YW5pZSIsCisgICAgICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICJXeWNpc3ogYmV6cG/Fm3JlZG5pZSBwcnp5cGlzYW5pYSBjemNpb25layIsCisgICAgICAgICJDbGVhciBNU09mZmljZSB0YWdzIjogIld5Y3p5xZvEhyB0YWdpIE1TT2ZmaWNlIiwKKyAgICAgICAgIkNvcHkgc2VsZWN0aW9uIjogIktvcGl1amUgemF6bmFjemVuaWUgZG8gc2Nob3drYSIsCisgICAgICAgICJDdXJyZW50IHN0eWxlIjogIk9iZWNueSBzdHlsIiwKKyAgICAgICAgIkN1dCBzZWxlY3Rpb24iOiAiV3ljaW5hIHphem5hY3plbmllIGRvIHNjaG93a2EiLAorICAgICAgICAiRGVjcmVhc2UgSW5kZW50IjogIlptbmllanN6IHdjacSZY2llIiwKKyAgICAgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIktpZXJ1bmVrIHRla3N0dSBsZXdvLXByYXdvIiwKKyAgICAgICAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIktpZXJ1bmVrIHRla3N0dSBwcmF3by1sZXdvIiwKKyAgICAgICAgIkZvbnQgQ29sb3IiOiAiS29sb3IgY3pjaW9ua2kiLAorICAgICAgICAiRm9ybWF0dGVkIjogIlByZWZvcm1hdG93YW55IiwKKyAgICAgICAgIkhlYWRpbmcgMSI6ICJOYWfFgsOzd2VrIDEiLAorICAgICAgICAiSGVhZGluZyAyIjogIk5hZ8WCw7N3ZWsgMiIsCisgICAgICAgICJIZWFkaW5nIDMiOiAiTmFnxYLDs3dlayAzIiwKKyAgICAgICAgIkhlYWRpbmcgNCI6ICJOYWfFgsOzd2VrIDQiLAorICAgICAgICAiSGVhZGluZyA1IjogIk5hZ8WCw7N3ZWsgNSIsCisgICAgICAgICJIZWFkaW5nIDYiOiAiTmFnxYLDs3dlayA2IiwKKyAgICAgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIlBvbW9jIiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICJMaW5pYSBwb3ppb21hIiwKKyAgICAgICAgIkluY3JlYXNlIEluZGVudCI6ICJad2nEmWtzeiB3Y2nEmWNpZSIsCisgICAgICAgICJJbnNlcnQgVGFibGUiOiAiV3N0YXcgdGFiZWzEmSIsCisgICAgICAgICJJbnNlcnQgV2ViIExpbmsiOiAiV3N0YXcgYWRyZXMgc2llY2kgV2ViIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiV3N0YXcgb2JyYXoiLAorICAgICAgICAiSXRhbGljIjogIlBvY2h5bGVuaWUiLAorICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiV3nFm3JvZGt1aiIsCisgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAiV3lqdXN0dWoiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIld5csOzd25haiBkbyBsZXdlaiIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIld5csOzd25haiBkbyBwcmF3ZWoiLAorICAgICAgICAiTm9ybWFsIjogIk5vcm1hbG55IiwKKyAgICAgICAgIk9yZGVyZWQgTGlzdCI6ICJOdW1lcm93YW5pZSIsCisgICAgICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJXa2xlamEgemF3YXJ0b8WbxIcgc2Nob3drYSIsCisgICAgICAgICJQYXRoIjogIsWaY2llxbxrYSIsCisgICAgICAgICJQcmludCBkb2N1bWVudCI6ICJEcnVrdWogZG9rdW1lbnQiLAorICAgICAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiUG9uYXdpYSBvc3RhdG5pbyB3eWtvbmFuZSBwb2xlY2VuaWUiLAorICAgICAgICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAiVXN1xYQgZm9ybWF0b3dhbmllIiwKKyAgICAgICAgIlNlbGVjdCBhbGwiOiAiWmF6bmFjeiB3c3p5c3RrbyIsCisgICAgICAgICJTcGxpdCBCbG9jayI6ICJQb2R6aWVsIGJsb2siLAorICAgICAgICAiU3RyaWtldGhyb3VnaCI6ICJQcnpla3JlxZtsZW5pZSIsCisgICAgICAgICJTdWJzY3JpcHQiOiAiSW5kZWtzIGRvbG55IiwKKyAgICAgICAgIlN1cGVyc2NyaXB0IjogIkluZGVrcyBnw7NybnkiLAorICAgICAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiV8WCxIVjeiAvIHd5xYLEhWN6IHJhbWtpIiwKKyAgICAgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJFZHljamEgV1lTSVdZRy93IMW6csOzZGxlIHN0cm9ueSIsCisgICAgICAgICJVbmRlcmxpbmUiOiAiUG9ka3JlxZtsZW5pZSIsCisgICAgICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJDb2ZhIG9zdGF0bmlvIHd5a29uYW5lIHBvbGVjZW5pZSIsCisgICAgICAgICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiSmVzdGXFmyB3IFRSWUJJRSBURUtTVE9XWU0uIFXFvHlqIHByenljaXNrdSBbPD5dLCBhYnkgcHJ6ZcWCxIVjennEhyBzacSZIG5hIHRyeWIgV1lTSVdZRy4iCisgICAgfSwKKyAgICAiX19ORVdfVFJBTlNMQVRJT05TX18iOiB7CisgICAgICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICAgICAiQWJicmV2aWF0aW9uIjogIiIsCisgICAgICAgICAgICAiRXhwYW5zaW9uOiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJBYm91dEJveCI6IHsKKyAgICAgICAgICAgICJDbG9zZSI6ICI8PFhpbmhhPj4iCisgICAgICAgIH0sCisgICAgICAgICJDaGFyQ291bnRlciI6IHsKKyAgICAgICAgICAgICIuLi4gaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAgICAgICAgICJDaGFycyI6ICIiLAorICAgICAgICAgICAgIkhUTUwiOiAiIiwKKyAgICAgICAgICAgICJXb3JkcyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDaGFyYWN0ZXJNYXAiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IHNwZWNpYWwgY2hhcmFjdGVyIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbG9yUGlja2VyIjogeworICAgICAgICAgICAgIkNsaWNrIGEgY29sb3IuLi4iOiAiIiwKKyAgICAgICAgICAgICJTYW1wbGUiOiAiIiwKKyAgICAgICAgICAgICJXZWIgU2FmZTogIjogIiIsCisgICAgICAgICAgICAiQ2xvc2UiOiAiPDxYaW5oYT4+IgorICAgICAgICB9LAorICAgICAgICAiQ29udGV4dE1lbnUiOiB7CisgICAgICAgICAgICAiRGVsZXRlIENlbGwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDZWxsIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRlZmluaXRpb25MaXN0IjogeworICAgICAgICAgICAgImRlZmluaXRpb24gZGVzY3JpcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGxpc3QiOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIHRlcm0iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRGlhbG9ncyI6IHsKKyAgICAgICAgICAgICJTb21lIFRleHQgSGVyZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEeW5hbWljQ1NTIjogeworICAgICAgICAgICAgIkNob29zZSBzdHlsZXNoZWV0IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCI6ICIiLAorICAgICAgICAgICAgIlVuZGVmaW5lZCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFZGl0VGFnIjogeworICAgICAgICAgICAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICIiLAorICAgICAgICAgICAgIkVkaXQgVGFnIEJ5IFBlZyI6ICIiLAorICAgICAgICAgICAgIlRhZyBFZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICAgICAiIT0iOiAiIiwKKyAgICAgICAgICAgICIhaW4iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7LSI6ICIiLAorICAgICAgICAgICAgIiZndDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSZndDsiOiAiIiwKKyAgICAgICAgICAgICImbHQ7eCZndDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYCFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgLmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAwYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDJgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgM2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA0YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA3YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDhgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGBlYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsmbmJzcDtgMWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YCt7Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2AtOlxcIGAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLXs6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YENgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGNvc2AiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgbG5gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHBpYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgc2luYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0YW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRpbWVzYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZxdW90O3RleHQmcXVvdDsiOiAiIiwKKyAgICAgICAgICAgICInK2Zvcm11bGErJyI6ICIiLAorICAgICAgICAgICAgIigobiksKGspKSI6ICIiLAorICAgICAgICAgICAgIih4KzEpLyh4LTEpIjogIiIsCisgICAgICAgICAgICAiKiI6ICIiLAorICAgICAgICAgICAgIioqIjogIiIsCisgICAgICAgICAgICAiKy0iOiAiIiwKKyAgICAgICAgICAgICItJmd0OyI6ICIiLAorICAgICAgICAgICAgIi0mbHQ7IjogIiIsCisgICAgICAgICAgICAiLToiOiAiIiwKKyAgICAgICAgICAgICItPSI6ICIiLAorICAgICAgICAgICAgIi8vIjogIiIsCisgICAgICAgICAgICAiL18iOiAiIiwKKyAgICAgICAgICAgICI6LiI6ICIiLAorICAgICAgICAgICAgIj0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiQCI6ICIiLAorICAgICAgICAgICAgIltbYSxiXSxbYyxkXV0iOiAiIiwKKyAgICAgICAgICAgICJcXFxcIjogIiIsCisgICAgICAgICAgICAiXFxuQ2xpY2sgaW4gdGhlIGJveCB0byB1c2UgeW91ciBrZXlib2FyZCBvciB1c2UgdGhlIGJ1dHRvbnNcXG4iOiAiIiwKKyAgICAgICAgICAgICJeXiI6ICIiLAorICAgICAgICAgICAgIl5eXiI6ICIiLAorICAgICAgICAgICAgIl9ffCI6ICIiLAorICAgICAgICAgICAgIl98XyI6ICIiLAorICAgICAgICAgICAgImAhPWAiOiAiIiwKKyAgICAgICAgICAgICJgIWluYCI6ICIiLAorICAgICAgICAgICAgImAmYW5kO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmNhcDtgIjogIiIsCisgICAgICAgICAgICAiYCZjdXA7YCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7LWAiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDt4Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJm9yO2AiOiAiIiwKKyAgICAgICAgICAgICJgJnF1b3Q7dGV4dCZxdW90O2AiOiAiIiwKKyAgICAgICAgICAgICJgKChuKSwoaykpYCI6ICIiLAorICAgICAgICAgICAgImAoeCsxKS8oeC0xKWAiOiAiIiwKKyAgICAgICAgICAgICJgKipgIjogIiIsCisgICAgICAgICAgICAiYCpgIjogIiIsCisgICAgICAgICAgICAiYCstYCI6ICIiLAorICAgICAgICAgICAgImAtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLSZsdDtgIjogIiIsCisgICAgICAgICAgICAiYC06YCI6ICIiLAorICAgICAgICAgICAgImAtPWAiOiAiIiwKKyAgICAgICAgICAgICJgLy9gIjogIiIsCisgICAgICAgICAgICAiYC9fYCI6ICIiLAorICAgICAgICAgICAgImA6LmAiOiAiIiwKKyAgICAgICAgICAgICJgPSZndDtgIjogIiIsCisgICAgICAgICAgICAiYEBgIjogIiIsCisgICAgICAgICAgICAiYFtbYSxiXSxbYyxkXV1gIjogIiIsCisgICAgICAgICAgICAiYFxcXFxgIjogIiIsCisgICAgICAgICAgICAiYF9ffGAiOiAiIiwKKyAgICAgICAgICAgICJgX3xfYCI6ICIiLAorICAgICAgICAgICAgImBBQWAiOiAiIiwKKyAgICAgICAgICAgICJgYWxlcGhgIjogIiIsCisgICAgICAgICAgICAiYGFscGhhYCI6ICIiLAorICAgICAgICAgICAgImBhbmRgIjogIiIsCisgICAgICAgICAgICAiYGJhcmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgQ0NgIjogIiIsCisgICAgICAgICAgICAiYGNjYWAiOiAiIiwKKyAgICAgICAgICAgICJgY2hpYCI6ICIiLAorICAgICAgICAgICAgImBkYXJyYCI6ICIiLAorICAgICAgICAgICAgImBkZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsYCI6ICIiLAorICAgICAgICAgICAgImBEZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRpYW1vbmRgIjogIiIsCisgICAgICAgICAgICAiYGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGR5L2R4YCI6ICIiLAorICAgICAgICAgICAgImBFRWAiOiAiIiwKKyAgICAgICAgICAgICJgZXBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgZXRhYCI6ICIiLAorICAgICAgICAgICAgImBmcmFgIjogIiIsCisgICAgICAgICAgICAiYEdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBnYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ3JhZGAiOiAiIiwKKyAgICAgICAgICAgICJgaGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaGF0YWAiOiAiIiwKKyAgICAgICAgICAgICJgaWZgIjogIiIsCisgICAgICAgICAgICAiYGluYCI6ICIiLAorICAgICAgICAgICAgImBpbnRgIjogIiIsCisgICAgICAgICAgICAiYGlvdGFgIjogIiIsCisgICAgICAgICAgICAiYGthcHBhYCI6ICIiLAorICAgICAgICAgICAgImBsYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYExhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGltXyh4LSZndDtvbylgIjogIiIsCisgICAgICAgICAgICAiYGxvZ2AiOiAiIiwKKyAgICAgICAgICAgICJgbXVgIjogIiIsCisgICAgICAgICAgICAiYE5OYCI6ICIiLAorICAgICAgICAgICAgImBubmAiOiAiIiwKKyAgICAgICAgICAgICJgbm90YCI6ICIiLAorICAgICAgICAgICAgImBudWAiOiAiIiwKKyAgICAgICAgICAgICJgbytgIjogIiIsCisgICAgICAgICAgICAiYG8uYCI6ICIiLAorICAgICAgICAgICAgImBPL2AiOiAiIiwKKyAgICAgICAgICAgICJgb2ludGAiOiAiIiwKKyAgICAgICAgICAgICJgb21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYE9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBvb2AiOiAiIiwKKyAgICAgICAgICAgICJgb3JgIjogIiIsCisgICAgICAgICAgICAiYG94YCI6ICIiLAorICAgICAgICAgICAgImBQaGlgIjogIiIsCisgICAgICAgICAgICAiYHBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGlgIjogIiIsCisgICAgICAgICAgICAiYHBpYCI6ICIiLAorICAgICAgICAgICAgImBwcm9kYCI6ICIiLAorICAgICAgICAgICAgImBwcm9wYCI6ICIiLAorICAgICAgICAgICAgImBQc2lgIjogIiIsCisgICAgICAgICAgICAiYHBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgUVFgIjogIiIsCisgICAgICAgICAgICAiYHF1YWRgIjogIiIsCisgICAgICAgICAgICAiYHJBcnJgIjogIiIsCisgICAgICAgICAgICAiYHJob2AiOiAiIiwKKyAgICAgICAgICAgICJgcm9vdChuKSh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgUlJgIjogIiIsCisgICAgICAgICAgICAiYHNmYWAiOiAiIiwKKyAgICAgICAgICAgICJgc2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYFNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzcXJ0KHgpYCI6ICIiLAorICAgICAgICAgICAgImBzcXVhcmVgIjogIiIsCisgICAgICAgICAgICAiYHN0YWNrcmVsKC0mZ3Q7KSgrKWAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViYCI6ICIiLAorICAgICAgICAgICAgImBzdWJlYCI6ICIiLAorICAgICAgICAgICAgImBzdW1gIjogIiIsCisgICAgICAgICAgICAiYHN1cGAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwZWAiOiAiIiwKKyAgICAgICAgICAgICJgdGF1YCI6ICIiLAorICAgICAgICAgICAgImBUaGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdGhldGFgIjogIiIsCisgICAgICAgICAgICAiYFRUYCI6ICIiLAorICAgICAgICAgICAgImB0dGFgIjogIiIsCisgICAgICAgICAgICAiYHVhcnJgIjogIiIsCisgICAgICAgICAgICAiYHVsYWAiOiAiIiwKKyAgICAgICAgICAgICJgdXBzaWxvbmAiOiAiIiwKKyAgICAgICAgICAgICJgdXVgIjogIiIsCisgICAgICAgICAgICAiYHZlY2FgIjogIiIsCisgICAgICAgICAgICAiYHZ2YCI6ICIiLAorICAgICAgICAgICAgImB4XyhtbilgIjogIiIsCisgICAgICAgICAgICAiYFhpYCI6ICIiLAorICAgICAgICAgICAgImB4aWAiOiAiIiwKKyAgICAgICAgICAgICJgeHhgIjogIiIsCisgICAgICAgICAgICAiYHpldGFgIjogIiIsCisgICAgICAgICAgICAiYFpaYCI6ICIiLAorICAgICAgICAgICAgImB8LSZndDtgIjogIiIsCisgICAgICAgICAgICAiYHwtLWAiOiAiIiwKKyAgICAgICAgICAgICJgfD09YCI6ICIiLAorICAgICAgICAgICAgImB8X19gIjogIiIsCisgICAgICAgICAgICAiYHx+YCI6ICIiLAorICAgICAgICAgICAgImB+PWAiOiAiIiwKKyAgICAgICAgICAgICJgfnxgIjogIiIsCisgICAgICAgICAgICAiYH5+YCI6ICIiLAorICAgICAgICAgICAgIkFBIjogIiIsCisgICAgICAgICAgICAiYWxlcGgiOiAiIiwKKyAgICAgICAgICAgICJhbHBoYSI6ICIiLAorICAgICAgICAgICAgImFuZCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aCBGb3JtdWxhIElucHV0IjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoTUwgRXhhbXBsZSI6ICIiLAorICAgICAgICAgICAgImJhcmEiOiAiIiwKKyAgICAgICAgICAgICJCYXNlZCBvbiBBU0NJSU1hdGhNTCBieSI6ICIiLAorICAgICAgICAgICAgImJiYSI6ICIiLAorICAgICAgICAgICAgImJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiZXRhIjogIiIsCisgICAgICAgICAgICAiQ0MiOiAiIiwKKyAgICAgICAgICAgICJjY2EiOiAiIiwKKyAgICAgICAgICAgICJjaGkiOiAiIiwKKyAgICAgICAgICAgICJkYXJyIjogIiIsCisgICAgICAgICAgICAiZGRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkZWwiOiAiIiwKKyAgICAgICAgICAgICJEZWx0YSI6ICIiLAorICAgICAgICAgICAgImRlbHRhIjogIiIsCisgICAgICAgICAgICAiZGlhbW9uZCI6ICIiLAorICAgICAgICAgICAgImRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkeS9keCI6ICIiLAorICAgICAgICAgICAgIkVFIjogIiIsCisgICAgICAgICAgICAiZXBzaSI6ICIiLAorICAgICAgICAgICAgImV0YSI6ICIiLAorICAgICAgICAgICAgIkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFzY2lpTWF0aE1MIHZpc2l0IHRoaXMgcGFnZToiOiAiIiwKKyAgICAgICAgICAgICJGb3JtdWxhIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgImZyYSI6ICIiLAorICAgICAgICAgICAgImdhbW1hIjogIiIsCisgICAgICAgICAgICAiR2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJncmFkIjogIiIsCisgICAgICAgICAgICAiaEFyciI6ICIiLAorICAgICAgICAgICAgImhhcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXRhIjogIiIsCisgICAgICAgICAgICAiaWYiOiAiIiwKKyAgICAgICAgICAgICJpbiI6ICIiLAorICAgICAgICAgICAgIklucHV0IjogIiIsCisgICAgICAgICAgICAiaW50IjogIiIsCisgICAgICAgICAgICAiaW50X2FeYmYoeClkeCI6ICIiLAorICAgICAgICAgICAgImlvdGEiOiAiIiwKKyAgICAgICAgICAgICJrYXBwYSI6ICIiLAorICAgICAgICAgICAgIkxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhcnIiOiAiIiwKKyAgICAgICAgICAgICJsQXJyIjogIiIsCisgICAgICAgICAgICAibGltXyh4LSZndDtvbykiOiAiIiwKKyAgICAgICAgICAgICJtdSI6ICIiLAorICAgICAgICAgICAgIk5OIjogIiIsCisgICAgICAgICAgICAibm4iOiAiIiwKKyAgICAgICAgICAgICJubm4iOiAiIiwKKyAgICAgICAgICAgICJub3QiOiAiIiwKKyAgICAgICAgICAgICJudSI6ICIiLAorICAgICAgICAgICAgIm8rIjogIiIsCisgICAgICAgICAgICAiby4iOiAiIiwKKyAgICAgICAgICAgICJPLyI6ICIiLAorICAgICAgICAgICAgIm9pbnQiOiAiIiwKKyAgICAgICAgICAgICJvbWVnYSI6ICIiLAorICAgICAgICAgICAgIk9tZWdhIjogIiIsCisgICAgICAgICAgICAib28iOiAiIiwKKyAgICAgICAgICAgICJvciI6ICIiLAorICAgICAgICAgICAgIm94IjogIiIsCisgICAgICAgICAgICAiUGhpIjogIiIsCisgICAgICAgICAgICAicGhpIjogIiIsCisgICAgICAgICAgICAicGkiOiAiIiwKKyAgICAgICAgICAgICJQaSI6ICIiLAorICAgICAgICAgICAgInByb2QiOiAiIiwKKyAgICAgICAgICAgICJwcm9wIjogIiIsCisgICAgICAgICAgICAicHNpIjogIiIsCisgICAgICAgICAgICAiUHNpIjogIiIsCisgICAgICAgICAgICAiUVEiOiAiIiwKKyAgICAgICAgICAgICJxdWFkIjogIiIsCisgICAgICAgICAgICAickFyciI6ICIiLAorICAgICAgICAgICAgInJobyI6ICIiLAorICAgICAgICAgICAgInJvb3QobikoeCkiOiAiIiwKKyAgICAgICAgICAgICJSUiI6ICIiLAorICAgICAgICAgICAgInNmYSI6ICIiLAorICAgICAgICAgICAgInNpZ21hIjogIiIsCisgICAgICAgICAgICAiU2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJzcXJ0KHgpIjogIiIsCisgICAgICAgICAgICAic3F1YXJlIjogIiIsCisgICAgICAgICAgICAic3RhY2tyZWwoLSZndDspKCspIjogIiIsCisgICAgICAgICAgICAic3ViIjogIiIsCisgICAgICAgICAgICAic3ViZSI6ICIiLAorICAgICAgICAgICAgInN1bSI6ICIiLAorICAgICAgICAgICAgInN1bV8obj0xKV5vbyI6ICIiLAorICAgICAgICAgICAgInN1cCI6ICIiLAorICAgICAgICAgICAgInN1cGUiOiAiIiwKKyAgICAgICAgICAgICJ0YXUiOiAiIiwKKyAgICAgICAgICAgICJUaGV0YSI6ICIiLAorICAgICAgICAgICAgInRoZXRhIjogIiIsCisgICAgICAgICAgICAiVFQiOiAiIiwKKyAgICAgICAgICAgICJ0dGEiOiAiIiwKKyAgICAgICAgICAgICJ1YXJyIjogIiIsCisgICAgICAgICAgICAidWxhIjogIiIsCisgICAgICAgICAgICAidXBzaWxvbiI6ICIiLAorICAgICAgICAgICAgInV1IjogIiIsCisgICAgICAgICAgICAidXV1IjogIiIsCisgICAgICAgICAgICAidmVjYSI6ICIiLAorICAgICAgICAgICAgInZ2IjogIiIsCisgICAgICAgICAgICAidnZ2IjogIiIsCisgICAgICAgICAgICAieF4obStuKSI6ICIiLAorICAgICAgICAgICAgInhfKG1uKSI6ICIiLAorICAgICAgICAgICAgIlhpIjogIiIsCisgICAgICAgICAgICAieGkiOiAiIiwKKyAgICAgICAgICAgICJ4eCI6ICIiLAorICAgICAgICAgICAgInpldGEiOiAiIiwKKyAgICAgICAgICAgICJaWiI6ICIiLAorICAgICAgICAgICAgInwtJmd0OyI6ICIiLAorICAgICAgICAgICAgInwtLSI6ICIiLAorICAgICAgICAgICAgInw9PSI6ICIiLAorICAgICAgICAgICAgInxfXyI6ICIiLAorICAgICAgICAgICAgInx+IjogIiIsCisgICAgICAgICAgICAifj0iOiAiIiwKKyAgICAgICAgICAgICJ+fCI6ICIiLAorICAgICAgICAgICAgIn5+IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZhbmN5U2VsZWN0cyI6IHsKKyAgICAgICAgICAgICInK29wdC50ZXh0KyciOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiJztcclxuICB2YXIgdGFnYyA9ICciOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiRW50ZXIgdGhlIG5hbWUgZm9yIG5ldyBvcHRpb24uIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgRm9ybS4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBtdWx0aS1saW5lIHRleHQgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcmFkaW8gYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFNlbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgU2VsZWN0Li4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1zIjogeworICAgICAgICAgICAgIidvbkNsaWNrJz0iOiAiIiwKKyAgICAgICAgICAgICJBY2Nlc3MgS2V5OiI6ICIiLAorICAgICAgICAgICAgIkFjdGlvbiBVUkw6IjogIiIsCisgICAgICAgICAgICAiQnV0dG9uIFNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkNoZWNrZWQiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zOiI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQgdGV4dCAob3B0aW9uYWwpIjogIiIsCisgICAgICAgICAgICAiRGltZW5zaW9ucyI6ICIiLAorICAgICAgICAgICAgIkRpc2FibGVkIjogIiIsCisgICAgICAgICAgICAiRW5jb2Rpbmc6IjogIiIsCisgICAgICAgICAgICAiRm9yIENvbnRyb2w6IjogIiIsCisgICAgICAgICAgICAiRm9ybSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IElOUFVUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gaGFuZGxlciBzY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiR2V0IjogIiIsCisgICAgICAgICAgICAiSGFyZCI6ICIiLAorICAgICAgICAgICAgIkhlaWdodCBpbiBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkhUTUwtRm9ybSB0byBDR0kgKGRlZmF1bHQpIjogIiIsCisgICAgICAgICAgICAiSW1hZ2Ugc291cmNlIjogIiIsCisgICAgICAgICAgICAiSW5pdGlhbCBUZXh0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiSmF2YXNjcmlwdCBmb3IgYnV0dG9uIGNsaWNrIjogIiIsCisgICAgICAgICAgICAiTGFiZWw6IjogIiIsCisgICAgICAgICAgICAiTGVnZW5kOiI6ICIiLAorICAgICAgICAgICAgIk1heCBsZW5ndGg6IjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY2NlcHRlZCI6ICIiLAorICAgICAgICAgICAgIk1ldGhvZDoiOiAiIiwKKyAgICAgICAgICAgICJtdWx0aXBhcnQgRm9ybSBEYXRhIChGaWxlLVVwbG9hZCkiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJuYW1lIG9mIHRoZSB0ZXh0YXJlYSI6ICIiLAorICAgICAgICAgICAgIk5hbWUvSUQ6IjogIiIsCisgICAgICAgICAgICAibm9ybWFsIjogIiIsCisgICAgICAgICAgICAibm93cmFwIjogIiIsCisgICAgICAgICAgICAiT2ZmIjogIiIsCisgICAgICAgICAgICAiUGh5c2ljYWwiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgYSBMYWJlbCI6ICIiLAorICAgICAgICAgICAgIlBvc3QiOiAiIiwKKyAgICAgICAgICAgICJwcmUiOiAiIiwKKyAgICAgICAgICAgICJSZWFkIE9ubHkiOiAiIiwKKyAgICAgICAgICAgICJTaXplIG9mIHRleHQgYm94IGluIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJTb2Z0IjogIiIsCisgICAgICAgICAgICAiVGFiIEluZGV4OiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBGcmFtZToiOiAiIiwKKyAgICAgICAgICAgICJUZXh0OiI6ICIiLAorICAgICAgICAgICAgIlVSTCBvZiBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlZhbHVlIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiVmFsdWU6IjogIiIsCisgICAgICAgICAgICAiVmlydHVhbCI6ICIiLAorICAgICAgICAgICAgIldpZHRoIGluIG51bWJlciBvZiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiV3JhcCBNb2RlOiI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgTmFtZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgICAgICIuLi4iOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoSVNPLTg4NTktNSkiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoS09JOC1SKSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChXSU5ET1dTLTEyNTEpIjogIiIsCisgICAgICAgICAgICAid2VzdGVybiAoSVNPLTg4NTktMSkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiR2Vja28iOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAgICAgIiYjeDAwZDc7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L2VkaXQgaG9yaXpvbnRhbCBydWxlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgSG9yaXpvbnRhbCBSdWxlIjogIiIsCisgICAgICAgICAgICAiTm8gc2hhZGluZyI6ICIiLAorICAgICAgICAgICAgIlN0eWxlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgICAgICItIjogIjw8RXF1YXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydEltYWdlIjogeworICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0Tm90ZSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgZm9vdG5vdGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgTm90ZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQYWdlYnJlYWsiOiB7CisgICAgICAgICAgICAiUGFnZSBicmVhayI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQnJlYWsiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U21pbGV5IjogeworICAgICAgICAgICAgIkluc2VydCBTbWlsZXkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgICAgICJcXG4gIFRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nXFxuIjogIiIsCisgICAgICAgICAgICAiSGlkZSBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICIiLAorICAgICAgICAgICAgIkxpbmsxIjogIiIsCisgICAgICAgICAgICAiTGluazIiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMyI6ICIiLAorICAgICAgICAgICAgIkxpbms0IjogIiIsCisgICAgICAgICAgICAiTGluazUiOiAiIiwKKyAgICAgICAgICAgICJTaG93IHByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZyI6ICIiLAorICAgICAgICAgICAgIlZhcmlhYmxlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAgICAgIkFsbCBDYXRlZ29yaWVzIjogIiIsCisgICAgICAgICAgICAiRmlsdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMgdGVtcGxhdGUgdmFyaWFibGUiOiAiIiwKKyAgICAgICAgICAgICJPbmx5IHNlYXJjaCB3b3JkIGJlZ2lubmluZyI6ICIiLAorICAgICAgICAgICAgIkhUTUwiOiAiPDxDaGFyQ291bnRlcj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgU25pcHBldCI6ICI8PEluc2VydFNuaXBwZXQ+PiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIlZhcmlhYmxlIjogIjw8SW5zZXJ0U25pcHBldD4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0VGFibGUiOiB7CisgICAgICAgICAgICAiQ2FwdGlvbiBmb3IgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiQ29sbGFwc2UgYm9yZGVyczoiOiAiIiwKKyAgICAgICAgICAgICJMYXlvdSI6ICIiLAorICAgICAgICAgICAgIlN0eWxlIG9mIHRoZSBib3JkZXIiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJMYW5nTWFya3MiOiB7CisgICAgICAgICAgICAiJm1kYXNoOyBsYW5ndWFnZSAmbWRhc2g7IjogIiIsCisgICAgICAgICAgICAiJywgJyI6ICIiLAorICAgICAgICAgICAgIkVuZ2xpc2giOiAiIiwKKyAgICAgICAgICAgICJGcmVuY2giOiAiIiwKKyAgICAgICAgICAgICJHcmVlayI6ICIiLAorICAgICAgICAgICAgImxhbmd1YWdlIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIkxhdGluIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxpbmtlciI6IHsKKyAgICAgICAgICAgICIocHgpIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yLUxpbmsiOiAiIiwKKyAgICAgICAgICAgICJBbmNob3I6IjogIiIsCisgICAgICAgICAgICAiTG9jYXRpb24gQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lbnUgQmFyOiI6ICIiLAorICAgICAgICAgICAgIlBvcHVwV2luZG93IjogIiIsCisgICAgICAgICAgICAiUmVzaXplYWJsZToiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGxiYXJzOiI6ICIiLAorICAgICAgICAgICAgIlNob3dzIE9uIEhvdmVyIjogIiIsCisgICAgICAgICAgICAiU3RhdHVzIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJUaXRsZToiOiAiIiwKKyAgICAgICAgICAgICJUb29sYmFyOiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJPcGVyYSI6IHsKKyAgICAgICAgICAgICJNQVJLIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgdGV4dCBpbiBuZXcgcGFyYWdyYXBoIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlByZXNlcnZlU2NyaXB0cyI6IHsKKyAgICAgICAgICAgICJKYXZhU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiUEhQIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlF1aWNrVGFnIjogeworICAgICAgICAgICAgIicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbCc6ICciOiAiIgorICAgICAgICB9LAorICAgICAgICAiU2F2ZVN1Ym1pdCI6IHsKKyAgICAgICAgICAgICJpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIlJlYWR5IjogIiIsCisgICAgICAgICAgICAiU2F2aW5nLi4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNldElkIjogeworICAgICAgICAgICAgIklEL05hbWU6IjogIiIsCisgICAgICAgICAgICAiU2V0IElkIGFuZCBOYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElkL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSUQvTmFtZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiQ2xvc2luZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIkNsb3NpbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIkNvbnZlcnQgYWxsIHF1b3RlcyBhbmQgZGFzaGVzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIGF1dG9tYXRpYyByZXBsYWNlbWVudHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBTZWxlY3Rpb24gT25seSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIHVwIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBTY29wZSI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYWwgdGlkeSB1cCBhbmQgY29ycmVjdGlvbiBvZiBzb21lIHByb2JsZW1zLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzZWxlY3QgZnJvbSB0aGUgZm9sbG93aW5nIGNsZWFuaW5nIG9wdGlvbnMuLi4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc3RhbmQgYnkgd2hpbGUgY2xlYW5pbmcgaW4gcHJvY2Vzcy4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGlnbm1lbnQgKGxlZnQvcmlnaHQvanVzdGlmeSkuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBjbGFzc2VzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBBbGwgSFRNTCBUYWdzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBzdHlsZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0eXBlZmFjZXMgKGZvbnQgXCJzdHlsZXNcIikuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGVtcGhhc2lzIGFuZCBhbm5vdGF0aW9ucy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgbGFuZyBhdHRyaWJ1dGVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBQYXJhZ3JhcGhzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cy4iOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzIHdpdGggbm9uLWRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzLiI6ICIiLAorICAgICAgICAgICAgIlZpZ29yb3VzbHkgcHVyZ2UgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiQ2VsbCBUeXBlOiI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIGRvd24iOiAiIiwKKyAgICAgICAgICAgICJDZWxscyB0byB0aGUgcmlnaHQsIGFuZCI6ICIiLAorICAgICAgICAgICAgIkRvIE5vdCBDaGFuZ2UiOiAiIiwKKyAgICAgICAgICAgICJIZWFkZXIgKHRoKSI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIGN1cnJlbnQgY2VsbCB3aXRoOiI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCAodGQpIjogIiIsCisgICAgICAgICAgICAiQ29sdW1ucyI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIjw8Q29udGV4dE1lbnU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuc2F2ZWRDaGFuZ2VzIjogeworICAgICAgICAgICAgIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgZWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIldlYktpdCI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiPDxHZWNrbz4+IgorICAgICAgICB9LAorICAgICAgICAiWGluaGEiOiB7CisgICAgICAgICAgICAiJiM4MjEyOyBmb250ICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICImIzgyMTI7IHNpemUgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIjEgKDggcHQpIjogIiIsCisgICAgICAgICAgICAiMiAoMTAgcHQpIjogIiIsCisgICAgICAgICAgICAiMyAoMTIgcHQpIjogIiIsCisgICAgICAgICAgICAiNCAoMTQgcHQpIjogIiIsCisgICAgICAgICAgICAiNSAoMTggcHQpIjogIiIsCisgICAgICAgICAgICAiNiAoMjQgcHQpIjogIiIsCisgICAgICAgICAgICAiNyAoMzYgcHQpIjogIiIsCisgICAgICAgICAgICAiQXJpYWwiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBjb250ZW50IHBhc3RlZCBmcm9tIFdvcmQiOiAiIiwKKyAgICAgICAgICAgICJDbG9zZSI6ICIiLAorICAgICAgICAgICAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAiIiwKKyAgICAgICAgICAgICJDb3VyaWVyIE5ldyI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBTdGF0dXNiYXIiOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgVG9vbGJhciI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMCAoemVybykiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTEgLi4gQ1RSTC02IjogIiIsCisgICAgICAgICAgICAiQ1RSTC1BIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1CIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1DIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1FIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1JIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1KIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1MIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1OIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1SIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1TIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1VIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1WIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1YIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1ZIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1aIjogIiIsCisgICAgICAgICAgICAiRWRpdG9yIEhlbHAiOiAiIiwKKyAgICAgICAgICAgICJFTlRFUiI6ICIiLAorICAgICAgICAgICAgIkVycm9yIExvYWRpbmcgWGluaGEuICBEZXZlbG9wZXJzLCBjaGVjayB0aGUgRXJyb3IgQ29uc29sZSBmb3IgaW5mb3JtYXRpb24uIjogIiIsCisgICAgICAgICAgICAiRmluaXNoaW5nIjogIiIsCisgICAgICAgICAgICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIiIsCisgICAgICAgICAgICAiR2VvcmdpYSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmdzIjogIiIsCisgICAgICAgICAgICAiSW1wYWN0IjogIiIsCisgICAgICAgICAgICAiSW5pdCBlZGl0b3Igc2l6ZSI6ICIiLAorICAgICAgICAgICAgImluc2VydCBsaW5lYnJlYWsiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvT3ZlcndyaXRlIjogIiIsCisgICAgICAgICAgICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBDb3JlIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW4gJHBsdWdpbiI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgcGx1Z2lucyI6ICIiLAorICAgICAgICAgICAgIk1TIFdvcmQgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIm5ldyBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJSZWdpc3RlciBwbHVnaW4gJHBsdWdpbiI6ICIiLAorICAgICAgICAgICAgIlNhdmUgYXMiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIlNISUZULUVOVEVSIjogIiIsCisgICAgICAgICAgICAiVGFob21hIjogIiIsCisgICAgICAgICAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogIiIsCisgICAgICAgICAgICAiVGltZXMgTmV3IFJvbWFuIjogIiIsCisgICAgICAgICAgICAiVG91Y2ggaGVyZSBmaXJzdCB0byBhY3RpdmF0ZSBlZGl0b3IuIjogIiIsCisgICAgICAgICAgICAiVmVyZGFuYSI6ICIiLAorICAgICAgICAgICAgIldhaXRpbmcgZm9yIElmcmFtZSB0byBsb2FkLi4uIjogIiIsCisgICAgICAgICAgICAiV2luZ0RpbmdzIjogIiIsCisgICAgICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIiIsCisgICAgICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogIiIsCisgICAgICAgICAgICAiWGluaGEiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogQkFDS0dST1VORElNQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIlJlbW92ZSBDdXJyZW50IEJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJTZXQgQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIlNldCBwYWdlIGJhY2tncm91bmQgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJTZXQgUGFnZSBCYWNrZ3JvdW5kIEltYWdlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNsaWVudHNpZGVTcGVsbGNoZWNrIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogQ0xJRU5UU0lERVNQRUxMQ0hFQ0sgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiU3BlbGwgQ2hlY2sgdXNpbmcgaWVTcGVsbCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFeHRlbmRlZEZpbGVNYW5hZ2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogRVhURU5ERURGSUxFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIxMCUiOiAiIiwKKyAgICAgICAgICAgICIxMDAlIjogIiIsCisgICAgICAgICAgICAiMjAwJSI6ICIiLAorICAgICAgICAgICAgIjI1JSI6ICIiLAorICAgICAgICAgICAgIjUwJSI6ICIiLAorICAgICAgICAgICAgIjc1JSI6ICIiLAorICAgICAgICAgICAgIj5MaXN0IFZpZXciOiAiIiwKKyAgICAgICAgICAgICI+VGh1bWJuYWlsIFZpZXciOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICIiLAorICAgICAgICAgICAgIkQ6IjogIiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmlsZXNpemU6IjogIiIsCisgICAgICAgICAgICAiRm9sZGVyIjogIiIsCisgICAgICAgICAgICAiR0lGIjogIiIsCisgICAgICAgICAgICAiSDoiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJNYXhpbXVtIGZvbGRlciBzaXplIGxpbWl0IHJlYWNoZWQuIFVwbG9hZCBkaXNhYmxlZC4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgdmFsdWUiOiAiIiwKKyAgICAgICAgICAgICJQTkciOiAiIiwKKyAgICAgICAgICAgICJQcmVzZXQiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENDVyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICIiLAorICAgICAgICAgICAgIlRvZ2dsZSBtYXJrZXIgY29sb3IiOiAiIiwKKyAgICAgICAgICAgICJYOiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIEltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlk6IjogIiIsCisgICAgICAgICAgICAiWm9vbSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGaWx0ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsdGVyIjogIjw8SW5zZXJ0U25pcHBldDI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkh0bWxUaWR5IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQXV0by1UaWR5IjogIiIsCisgICAgICAgICAgICAiRG9uJ3QgVGlkeSI6ICIiLAorICAgICAgICAgICAgIkhUTUwgVGlkeSI6ICIiLAorICAgICAgICAgICAgIlRpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlcyI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgVXNlcm5hbWUvRW1haWwiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZCI6ICIiLAorICAgICAgICAgICAgIk5vIFBob3RvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFZpZGVvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgU2VydmVyIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFVzZXJuYW1lIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlbyBMaXN0IjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlb3MiOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkdJRiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJQTkciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJCZWhhdmlvcjoiOiAiIiwKKyAgICAgICAgICAgICJDb250aW51b3VzIjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uOiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBzY3JvbGxpbmcgbWFycXVlZSI6ICIiLAorICAgICAgICAgICAgIk1hcnF1ZWUgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIEFtb3VudDoiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgRGVsYXk6IjogIiIsCisgICAgICAgICAgICAiU2xpZGUiOiAiIiwKKyAgICAgICAgICAgICJTcGVlZCBDb250cm9sIjogIiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJUZXh0OiI6ICI8PEZvcm1zPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm90IGRlZmluZWQiOiAiIiwKKyAgICAgICAgICAgICIgT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlVwbG9hZCBmaWxlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEyMCUiOiAiIiwKKyAgICAgICAgICAgICIxNTAlIjogIiIsCisgICAgICAgICAgICAiODAlIjogIiIsCisgICAgICAgICAgICAiQWRkIEdVSURPIENvZGUgaW4gYSB0ZXh0Ym94IG9uIHRoZSBwYWdlIjogIiIsCisgICAgICAgICAgICAiQWRkIE1JREkgbGluayB0byBhbGxvdyBzdHVkZW50cyB0byBoZWFyIHRoZSBtdXNpYyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdCI6ICIiLAorICAgICAgICAgICAgIkd1aWRvIGNvZGUiOiAiIiwKKyAgICAgICAgICAgICJHVUlETyBDb2RlIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgaW4gYXBwbGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEdVSURPIE11c2ljIE5vdGF0aW9uIjogIiIsCisgICAgICAgICAgICAiTUlESSBGaWxlIjogIiIsCisgICAgICAgICAgICAiU291cmNlIENvZGUiOiAiIiwKKyAgICAgICAgICAgICJXaXRoIE1vemlsbGEsIHRoZSBhcHBsZXQgd2lsbCBub3QgYmUgdmlzaWJsZSBpbiBlZGl0b3IsIGJ1dCBvbmx5IGluIFdlYiBwYWdlIGFmdGVyIHN1Ym1pdHRpbmcuIjogIiIsCisgICAgICAgICAgICAiWm9vbSA6IjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWm9vbSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgR2VhcnMgaW4gb3JkZXIgdG8gdXNlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UgYW5kIGNvbmZpZ3VyYXRpb24uIjogIiIsCisgICAgICAgICAgICAiRW5hYmxpbmcgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIkluc3RhbGwiOiAiIiwKKyAgICAgICAgICAgICJMZWFybiBBYm91dCBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIHJlbG9hZCB0aGUgcGFnZSwgY2F1c2luZyB5b3UgdG8gbG9zZSBhbnkgdW5zYXZlZCB3b3JrLiAgUHJlc3MgXCJPS1wiIHRvIHJlbG9hZC4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSB1c2VzIEdvb2dsZSBHZWFycyB0byBlbmFibGUgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZS4gIFdpdGggR2VhcnMgaW5zdGFsbGVkLCB5b3UgY2FuIHNhdmUgZHJhZnRzIG9mIHlvdXIgZG9jdW1lbnRzIG9uIHlvdXIgaGFyZCBkcml2ZSwgY29uZmlndXJlIFhpbmhhIHRvIGxvb2sgdGhlIHdheSB5b3Ugd2FudCwgYW5kIGNhcnJ5IHRoaXMgaW5mb3JtYXRpb24gd2hlcmV2ZXIgeW91IHVzZSBYaW5oYSBvbiB0aGUgd2ViLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQU1NlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbGU6ICI6ICIiLAorICAgICAgICAgICAgIkltcG9ydCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQZXJzaXN0ZW50U3RvcmFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkRldGFpbHMiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIEJyb3dzZXIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgICBUaGVyZSBDICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICBUaGVyZSBBICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvIFwiIFRoZXJlIEIgXCIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAnIFRoZXJlIEQgJyI6ICIiLAorICAgICAgICAgICAgIkxpc3Qgb2YgUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiTmV3IERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiT3BlbiI6ICIiLAorICAgICAgICAgICAgIk9wZW4gRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB5b3UnZCBsaWtlIHRvIGNyZWF0ZS4iOiAiIiwKKyAgICAgICAgICAgICJTYXZlIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGVyYXNlIGFueSB1bnNhdmVkIGNvbnRlbnQuICBJZiB5b3UncmUgY2VydGFpbiwgcGxlYXNlIGNsaWNrIE9LIHRvIGNvbnRpbnVlLiI6ICIiLAorICAgICAgICAgICAgIldlYiBVUkwiOiAiIiwKKyAgICAgICAgICAgICJDb25maXJtIjogIjw8UFNMb2NhbD4+IiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCI6ICI8PEluc2VydE5vdGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEaWN0aW9uYXJ5IjogIiIsCisgICAgICAgICAgICAiRmluaXNoZWQgbGlzdCBvZiBtaXNwZWxsZWQgd29yZHMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MQXJlYSBTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiSSB3aWxsIG9wZW4gaXQgaW4gYSBuZXcgcGFnZS4iOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUiOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUgYWxsIjogIiIsCisgICAgICAgICAgICAiSW5mbyI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIjogIiIsCisgICAgICAgICAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIiIsCisgICAgICAgICAgICAiT3JpZ2luYWwgd29yZCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gb3BlbiB0aGlzIGxpbmsiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdDogY2hhbmdpbmcgZGljdGlvbmFyeSB0byI6ICIiLAorICAgICAgICAgICAgInBsaXogd2VpdCA7LSkiOiAiIiwKKyAgICAgICAgICAgICJSZS1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGFsbCI6ICIiLAorICAgICAgICAgICAgIlJldmVydCI6ICIiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrZXIiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbC1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlN1Z2dlc3Rpb25zIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlRlbXBsYXRlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiSW5zZXJ0IHRlbXBsYXRlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuRm9ybWF0IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWxsIjogIiIsCisgICAgICAgICAgICAiQWxsIEhUTUw6IjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgQXJlYSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIG9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0aW5nOiI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCB3aGljaCB0eXBlcyBvZiBmb3JtYXR0aW5nIHlvdSB3b3VsZCBsaWtlIHRvIHJlbW92ZS4iOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Rpb24iOiAiIgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvcHRfYnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY4MWY3MQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTU1MyBAQAorLy8gWGluaGEgTGFuZ3VhZ2UgQ29tYmluZWQgVHJhbnNsYXRpb24gRmlsZQorLy8KKy8vIExBTkc6ICJwdF9iciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElOU1RSVUNUSU9OUyBUTyBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gWW91ciB0cmFuc2xhdGlvbiBtdXN0IGJlIGluIFVURi04IENoYXJhY3RlciBFbmNvZGluZy4KKy8vCisvLyBUaGlzIGlzIGEgSlNPTiBlbmNvZGVkIGZpbGUgKHBsdXMgY29tbWVudHMpLCBzdHJpbmdzIHNob3VsZCBiZSBkb3VibGUtcXVvdGUKKy8vIG9ubHksIGRvIG5vdCB1c2Ugc2luZ2xlIHF1b3RlcyB0byBzdXJyb3VuZCBzdHJpbmdzIC0gImhlbGxvIiwgbm90ICdoZWxsbycKKy8vIGRvIG5vdCBoYXZlIGEgdHJhaWxpbmcgY29tbWEgYWZ0ZXIgdGhlIGxhc3QgZW50cnkgaW4gYSBzZWN0aW9uLgorLy8KKy8vIE9ubHkgZnVsbCBsaW5lIGNvbW1lbnRzIGFyZSBhbGxvd2VkICh0aGF0IGEgY29tbWVudHMgb2NjdXB5IGVudGlyZSBsaW5lcykuCisvLworLy8gU2VhcmNoIGZvciB0aGUgX19ORVdfVFJBTlNMQVRJT05TX18gc2VjdGlvbiBiZWxvdywgdGhpcyBpcyB3aGVyZSB5b3Ugd2lsbAorLy8gd2FudCB0byBmb2N1cywgdGhpcyBzZWN0aW9uIGluY2x1ZGVzIHRoaW5ncyB0aGF0IGRvIG5vdCBwcmVzZW50bHkgaGF2ZSBhIAorLy8gdHJhbnNsYXRpb24gb3IgZm9yIHdoaWNoIHRoZSB0cmFuc2xhdGlvbiBuZWVkcyB0byBiZSBjaGVja2VkIGZvciBhY2N1cmFjeS4KKy8vCisvLyBJbiB0aGUgTmV3IFRyYW5zbGF0aW9ucyBzZWN0aW9uIGEgdHJhbnNsYXRpb24gc3RyaW5nIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICIiCisvLyAgICAgVGhpcyBtZWFucyBpdCBpcyBub3QgdHJhbnNsYXRlZCB5ZXQsIGFkZCB5b3VyIHRyYW5zbGF0aW9uLi4uCisvLyAgICAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIktsaW5nb24gU3RyaW5nIEhlcmUiCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJUcmFuc2xhdGVkIFN0cmluZyBIZXJlIgorLy8gICAgIFRoaXMgbWVhbnMgdGhhdCBhbiBleGlzdGluZyB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcsIGluIHNvbWUgb3RoZXIKKy8vICAgICBzZWN0aW9uIGhhcyBiZWVuIGZvdW5kLCBhbmQgdXNlZC4gIENoZWNrIHRoYXQgaXQgaXMgYXBwcm9wcml0ZSBmb3IgdGhpcworLy8gICAgIHNlY3Rpb24gYW5kIGlmIGl0IGlzLCB0aGF0J3MgZmluZSBsZWF2ZSBpdCBhcyBpcywgb3RoZXJ3aXNlIGNoYW5nZSBhcworLy8gICAgIGFwcHJvcHJpYXRlLgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiPDxBbm90aGVyU2VjdGlvbj4+IgorLy8gICAgIFRoaXMgbWVhbnMgdXNlIHRoZSBzYW1lIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZyBhcyA8PEFub3RoZXJTZWN0aW9uPj4KKy8vICAgICB0aGlzIHNhdmVzIHlvdSByZS10cmFubGF0aW5nIHN0cmluZ3MuICBJZiB0aGUgQ29udGV4dCBvZiB0aGlzIHNlY3Rpb24KKy8vICAgICBhbmQgdGhlIGNvbnRleHQgb2YgQW5vdGhlclNlY3Rpb24gc2VlbSB0aGUgc2FtZSwgdGhhdCdzIGZpbmUgbGVhdmUgaXQKKy8vICAgICB1c2luZyB0aGF0IHRyYW5zbGF0aW9uLCBidXQgaWYgdGhpcyBzZWN0aW9uIG5lZWRzIGEgZGlmZmVyZW50IHRyYW5zbGF0aW9uLCAKKy8vICAgICB5b3UgY2FuIHByb3ZpZGUgaXQgYnkgcmVwbGFjaW5nIHRoZSBsaW5rICg8PEFub3RoZXJTZWN0aW9uPj4pIHdpdGggdGhhdAorLy8gICAgIG5ldyB0cmFuc2xhdGlvbi4gIEZvciBleGFtcGxlIC0gYSAiVGFibGUiIGluIHNheSAiRGF0YVBsdWdpbiIgaXMgCisvLyAgICAgcGVyaGFwcyB0cmFuc2xhdGVkIGRpZmZlcmVudGx5IHRvICJUYWJsZSIgaW4gIkZ1cm5pdHVyZVBsdWdpbiIuCisvLworLy8gVEVTVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBwbGFjZSB5b3VyIHRyYW5zbGF0aW9uIGZpbGUgb24geW91ciB3ZWJzZXJ2ZXIgc29tZXdoZXJlIGZvciBleGFtcGxlCisvLworLy8gICAveGluaGEvbGFuZy9tZXJnZWQvcHRfYnIuanMKKy8vCisvLyBhbmQgdGhlbiB0ZWxsIFhpbmhhIHdoZXJlIHRvIGdldCBpdCAoYmVmb3JlIGxvYWRpbmcgWGluaGFDb3JlLmpzKSBieSAKKy8vCisvLyAgX2VkaXRvcl9sYW5nICAgICAgICAgICAgICA9ICdwdF9icic7CisvLyAgX2VkaXRvcl9sYW5nX21lcmdlZF9maWxlICA9ICcveGluaGEvbGFuZy9tZXJnZWQvcHRfYnIuanMnOworLy8KKy8vIFhpbmhhIHdpbGwgbG9hZCB5b3VyIG5ldyBsYW5ndWFnZSBkZWZpbml0aW9uLgorLy8KKy8vIFNVQk1JVFRJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgY3JlYXRlIGEgVGlja2V0IG9uIHRoZSBYaW5oYSB3ZWJzaXRlIGFuZCBhdHRhY2ggeW91ciB0cmFuc2xhdGlvbiAKKy8vIGZpbGUuCisvLworLy8gVGhlIFhpbmhhIGRldmVsb3BlcnMgd2lsbCB0YWtlIHlvdXIgZmlsZSBhbmQgdXNlIHRoZSAKKy8vICAgICBjb250cmliL2xjX3NwbGl0X21lcmdlZF9maWxlLnBocAorLy8gc2NyaXB0IHRvIGxvYWQgaXQgaW50byB0aGUgWGluaGEgZGlzdHJpYnV0aW9uLgorCit7CisgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgIkFiYnJldmlhdGlvbiI6ICJBYnJldmlhw6fDo28iLAorICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkRlbGV0ZSI6ICJBcGFnYXIiLAorICAgICAgICAiRXhwYW5zaW9uOiI6ICJFeHBhbmRpcjoiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiQWJvdXRCb3giOiB7CisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJTb2JyZSBlc3RlIGVkaXRvciIsCisgICAgICAgICJDbG9zZSI6ICJGZWNoYXIiCisgICAgfSwKKyAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIlJlbW92ZSBDdXJyZW50IEJhY2tncm91bmQiOiAiUmVtb3ZlciBmdW5kbyBhdHVhbCIsCisgICAgICAgICJTZXQgUGFnZSBCYWNrZ3JvdW5kIEltYWdlIjogIkRlZmluaXIgSW1hZ2VtIGRlIEZ1bmRvIiwKKyAgICAgICAgIlNldCBwYWdlIGJhY2tncm91bmQgaW1hZ2UiOiAiRGVmaW5pciBpbWFnZW0gZGUgZnVuZG8iCisgICAgfSwKKyAgICAiQ2hhckNvdW50ZXIiOiB7CisgICAgICAgICIuLi4gaW4gcHJvZ3Jlc3MiOiAiLi4uIGVtIHByb2Nlc3NvIiwKKyAgICAgICAgIkNoYXJzIjogIkNhcmFjdGVyZXMiLAorICAgICAgICAiSFRNTCI6ICJIVE1MIiwKKyAgICAgICAgIldvcmRzIjogIlBhbGF2cmFzIgorICAgIH0sCisgICAgIkNoYXJhY3Rlck1hcCI6IHsKKyAgICAgICAgIkluc2VydCBzcGVjaWFsIGNoYXJhY3RlciI6ICJJbnNlcmlyIGNhcmFjdGVyIGVzcGVjaWFsIgorICAgIH0sCisgICAgIkNsaWVudHNpZGVTcGVsbGNoZWNrIjogeworICAgICAgICAiU3BlbGwgQ2hlY2sgdXNpbmcgaWVTcGVsbCI6ICJWZXJpZmljYcOnw6NvIE9ydG9ncsOhZmljYSB1dGlsaXphbmRvIGllU3BlbGwiCisgICAgfSwKKyAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICJDbGljayBhIGNvbG9yLi4uIjogIlNlbGVjaW9uZSB1bWEgY8O0ci4uLiIsCisgICAgICAgICJDbG9zZSI6ICJGZWNoYXIiLAorICAgICAgICAiQ29sb3I6ICI6ICJDw7RyOiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJTYW1wbGUiOiAiRXhlbXBsbyIsCisgICAgICAgICJXZWIgU2FmZTogIjogIldlYiBTZWd1cmE6IgorICAgIH0sCisgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAiQ19lbGwgUHJvcGVydGllcy4uLiI6ICJQcm9wcmllZGFkZXMgZGEgY8OpbHVsYSIsCisgICAgICAgICJDaGVjX2sgTGluay4uLiI6ICJWZXJpZmljYXIgTGluay4uLiIsCisgICAgICAgICJDb3B5IjogIkNvcGlhciIsCisgICAgICAgICJDcmVhdGUgYSBsaW5rIjogIkNyaWFyIHVtIG5vdm8gbGluayIsCisgICAgICAgICJDdXJyZW50IFVSTCBpcyI6ICJBIFVSTCBjb3JyZW50ZSDDqSIsCisgICAgICAgICJDdXQiOiAiUmVjb3J0YXIiLAorICAgICAgICAiRGVfbGV0ZSBDb2x1bW4iOiAiQXBhZ2FyIENvbHVuYSIsCisgICAgICAgICJEZWxldGUgQ2VsbCI6ICJBcGFnYXIgQ8OpbHVsYSIsCisgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgY29sdW1uIjogIkFwYWdhciBhIGNvbHVuYSBhdHVhbCIsCisgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIkFwYWdhciBhIGxpbmhhIGF0dWFsIiwKKyAgICAgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIkNvbW8gdm9jw6ogY29tZcOnb3UgYXF1aT8gKFBvciBmYXZvciwgaW5mb3JtZSEpIiwKKyAgICAgICAgIklfbnNlcnQgUm93IEJlZm9yZSI6ICJJbnNlcmlyIGxpbmhhIGFudGVzIGRlc3RlIHBvbnRvIiwKKyAgICAgICAgIkluX3NlcnQgUm93IEFmdGVyIjogIkluc2VyaXIgbGluaGEgZGVwb2lzIGRlc3RlIHBvbnRvIiwKKyAgICAgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIkluc2VyaXIgY29sdW5hIGFww7NzIGVzdGUgcG9udG8iLAorICAgICAgICAiSW5zZXJ0IENlbGwgQWZ0ZXIiOiAiSW5zZXJpciBDw6lsdWxhIERlcG9pcyIsCisgICAgICAgICJJbnNlcnQgQ2VsbCBCZWZvcmUiOiAiSW5zZXJpciBDw6lsdWxhIEFudGVzIiwKKyAgICAgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICJJbnNlcmlyIGNvbHVuYSBhbnRlcyBkZXN0ZSBwb250byIsCisgICAgICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICJJbnNlcmlyIHVtYSBub3ZhIGNvbHVuYSBhcMOzcyBlc3RhIiwKKyAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICJJbnNlcmlyIHVtYSBub3ZhIGNvbHVuYSBhbnRlcyBkZXN0YSIsCisgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICJJbnNlcmlyIHVtYSBsaW5oYSBhcMOzcyBlc3RhIiwKKyAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICJJbnNlcmlyIHVtYSBub3ZhIGxpbmhhIGFudGVzIGRlc3RhIiwKKyAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBhZnRlciB0aGUgY3VycmVudCBub2RlIjogIkluc2VyaXIgdW0gcGFyw6FncmFmbyBhcMOzcyBvIG7DsyBhdHVhbCIsCisgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUiOiAiSW5zZXJpciB1bSBwYXLDoWdyYWZvIGFudGVzIGRvIG7DsyBhdHVhbCIsCisgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGFmdGVyIjogIkluc2VyaXIgdW0gcGFyw6FncmFmbyBhcMOzcyIsCisgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGJlZm9yZSI6ICJJbnNlcmlyIHVtIHBhcsOhZ3JhZm8gYW50ZXMiLAorICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiSnVzdGlmaWNhciBjZW50cmFsaXphZG8iLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIkp1c3RpZmljYcOnw6NvIGNvbXBsZXRhIiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICJKdXN0aWZpY2FyIMOgIGVzcXVlcmRhIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiSnVzdGlmaWNhciDDoCBkaXJlaXRhIiwKKyAgICAgICAgIkxpbmsgcG9pbnRzIHRvOiI6ICJMaW5rIHBhcmE6IiwKKyAgICAgICAgIk1ha2UgbGluX2suLi4iOiAiQ3JpYXIgbGluay4uLiIsCisgICAgICAgICJNZXJnZSBDZWxscyI6ICJNZXNjbGFyIEPDqWx1bGFzIiwKKyAgICAgICAgIk9wZW5zIHRoaXMgbGluayBpbiBhIG5ldyB3aW5kb3ciOiAiQWJyaXIgZXN0ZSBsaW5rIGVtIHVtYSBub3ZhIGphbmVsYSIsCisgICAgICAgICJQYXN0ZSI6ICJDb2xhciIsCisgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGVsZW1lbnQ6IjogIlBvciBmYXZvciwgY29uZmlybWUgcXVlIGRlc2VqYSByZW1vdmVyIGVzdGUgZWxlbWVudG86IiwKKyAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gdW5saW5rIHRoaXMgZWxlbWVudC4iOiAiUG9yIGZhdm9yLCBjb25maXJtZSBxdWUgZGVzZWphIHJldGlyYXIgbyBsaW5rIGRvIGVsZW1lbnRvLiIsCisgICAgICAgICJSZW1vdmUgdGhlICRlbGVtIEVsZW1lbnQuLi4iOiAiUmVtb3ZlciBvIGVsZW1lbnRvICRlbGVtLi4uIiwKKyAgICAgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiUmVtb3ZlciBlc3RlIG7DsyBkbyBkb2N1bWVudG8iLAorICAgICAgICAiUm9fdyBQcm9wZXJ0aWVzLi4uIjogIlByb3ByaWVkYWRlcyBkYSBMaW5oYSIsCisgICAgICAgICJTaG93IHRoZSBUYWJsZSBDZWxsIFByb3BlcnRpZXMgZGlhbG9nIjogIk1vc3RyYXIgUHJvcHJpZWRhZGVzIGRhIFRhYmVsYXMiLAorICAgICAgICAiU2hvdyB0aGUgVGFibGUgUHJvcGVydGllcyBkaWFsb2ciOiAiTW9zdHJhciBjYWl4YSBkZSBkacOhbG9nbyBkZSBQcm9wcmllZGFkZXMgZGEgVGFiZWxhIiwKKyAgICAgICAgIlNob3cgdGhlIFRhYmxlIFJvdyBQcm9wZXJ0aWVzIGRpYWxvZyI6ICJNb3N0cmFyIGNhaXhhIGRlIGRpw6Fsb2dvIGRlIFByb3ByaWVkYWRlcyBkYSBMaW5oYSIsCisgICAgICAgICJTaG93IHRoZSBpbWFnZSBwcm9wZXJ0aWVzIGRpYWxvZyI6ICJNb3N0cmFyIGEgY2FpeGEgZGUgZGnDoWxvZ28gZGFzIFByb3ByaWVkYWRlcyBkYSBpbWFnZW0iLAorICAgICAgICAiVW5saW5rIHRoZSBjdXJyZW50IGVsZW1lbnQiOiAiUmVtb3ZlciBsaW5rIGRvIGVsZW1lbnRvIGF0dWFsIiwKKyAgICAgICAgIl9EZWxldGUgUm93IjogIkFwYWdhciBsaW5oYSIsCisgICAgICAgICJfSW1hZ2UgUHJvcGVydGllcy4uLiI6ICJQcm9wcmllZGFkZXMgZGEgaW1hZ2VtLi4uIiwKKyAgICAgICAgIl9Nb2RpZnkgTGluay4uLiI6ICJNb2RpZmljYXIgbGluayIsCisgICAgICAgICJfUmVtb3ZlIExpbmsuLi4iOiAiUmVtb3ZlciBMaW5rIiwKKyAgICAgICAgIl9UYWJsZSBQcm9wZXJ0aWVzLi4uIjogIlByb3ByaWVkYWRlcyBkYSBUYWJlbGEiCisgICAgfSwKKyAgICAiQ3JlYXRlTGluayI6IHsKKyAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICJWb2PDqiB0ZW0gY2VydGV6YSBxdWUgZGVzZWphIHJlbW92ZXIgZXN0ZSBsaW5rPyIsCisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIkluc2VyaXIvTW9kaWZpY2FyIExpbmsiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOb3ZhIGphbmVsYSAoX2JsYW5rKSIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIk5lbmh1bSAodXNvIGltcGzDrWNpdG8pIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJNZXNtYSBmcmFtZSAoX3NlbGYpIiwKKyAgICAgICAgIlRhcmdldDoiOiAiRGVzdGlubzoiLAorICAgICAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUw610dWxvICh0b29sdGlwKSIsCisgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIkZyYW1lIGRvIHRvcG8gKF90b3ApIiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIsCisgICAgICAgICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGluZyBhIGxpbmsiOiAiVm9jw6ogcHJlY2lzYSBzZWxlY2lvbmFyIHVtIHRleHRvIGFudGVzIGRlIGNyaWFyIHVtIGxpbmsiCisgICAgfSwKKyAgICAiRGVmaW5pdGlvbkxpc3QiOiB7CisgICAgICAgICJkZWZpbml0aW9uIGRlc2NyaXB0aW9uIjogIkRlc2NyacOnw6NvIGRlIGRlZmluacOnw6NvIiwKKyAgICAgICAgImRlZmluaXRpb24gbGlzdCI6ICJMaXN0YSBkZSBkZWZpbmnDp8OjbyIsCisgICAgICAgICJkZWZpbml0aW9uIHRlcm0iOiAiVGVybW8gZGUgZGVmaW5pw6fDo28iCisgICAgfSwKKyAgICAiRHluYW1pY0NTUyI6IHsKKyAgICAgICAgIkNob29zZSBzdHlsZXNoZWV0IjogIkVzY29saGVyIGVzdGlsbyIsCisgICAgICAgICJEZWZhdWx0IjogIlBhZHLDo28iLAorICAgICAgICAiVW5kZWZpbmVkIjogIkluZGVmaW5pZG8iCisgICAgfSwKKyAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCisgICAgICAgICJFZGl0IEhUTUwgZm9yIHNlbGVjdGVkIHRleHQiOiAiRWRpdGFyIEhUTUwgcGFyYSB0ZXh0byBzZWxlY2lvbmFkbyIsCisgICAgICAgICJFZGl0IFRhZyBCeSBQZWciOiAiRWRpdGFyIFRhZyBwb3IgUGVnIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlRhZyBFZGl0b3IiOiAiRWRpdG9yIGRlIFRhZyIKKyAgICB9LAorICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgIiZxdW90O3RleHQmcXVvdDsiOiAiJnF1b3Q7dGV4dCZxdW90OyIsCisgICAgICAgICJBc2NpaU1hdGggRm9ybXVsYSBJbnB1dCI6ICJJbnNlcmlyIEbDs3JtdWxhIEFzY2lpTWF0aCIsCisgICAgICAgICJBc2NpaU1hdGhNTCBFeGFtcGxlIjogIkV4ZW1wbG8gQXNjaWlNYXRoTUwiLAorICAgICAgICAiQmFzZWQgb24gQVNDSUlNYXRoTUwgYnkiOiAiQmFzZWFkbyBubyBBU0NJSU1hdGhNTCBwb3IiLAorICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFzY2lpTWF0aE1MIHZpc2l0IHRoaXMgcGFnZToiOiAiUGFyYSBtYWlvcmVzIGluZm9ybWHDp8O1ZXMgZG8gQXNjaWlNYXRoTUwgdmlzaXRlIGVzdGUgc2l0ZToiLAorICAgICAgICAiRm9ybXVsYSBFZGl0b3IiOiAiRWRpdG9yIGRlIEbDs3JtdWxhIiwKKyAgICAgICAgIklucHV0IjogIkVudHJhZGEiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUHJldmlldyI6ICJWaXN1YWxpemFyIiwKKyAgICAgICAgImAmcXVvdDt0ZXh0JnF1b3Q7YCI6ICJgJnF1b3Q7dGV4dG8mcXVvdDtgIgorICAgIH0sCisgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICI+TGlzdCBWaWV3IjogIj5MaXN0YSIsCisgICAgICAgICI+VGh1bWJuYWlsIFZpZXciOiAiPk1pbmlhdHVyYXMiLAorICAgICAgICAiQToiOiAiQToiLAorICAgICAgICAiQWJzYm90dG9tIjogIkluZmVyaW9yIGFic29sdXRvIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJNZWlvIGFic29sdXRvIiwKKyAgICAgICAgIkFsaWduIjogIkFsaW5oYW1lbnRvIiwKKyAgICAgICAgIkFsdCI6ICJBbHQiLAorICAgICAgICAiQmFzZWxpbmUiOiAiTGluaGEgZGUgYmFzZSIsCisgICAgICAgICJCb3JkZXIiOiAiQm9yZGEiLAorICAgICAgICAiQm9yZGVyIENvbG9yIjogIkPDtHIgZGEgQm9yZGEiLAorICAgICAgICAiQm90dG9tIjogIkluZmVyaW9yIiwKKyAgICAgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCisgICAgICAgICJDbGVhciI6ICJMaW1wYXIiLAorICAgICAgICAiQ29sb3IiOiAiQ8O0ciIsCisgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiTWFudGVyIFByb3BvcmNpb25hbGlkYWRlIiwKKyAgICAgICAgIkNvcHkiOiAiQ29waWFyIiwKKyAgICAgICAgIkNyb3AiOiAiUmVjb3J0YXIiLAorICAgICAgICAiQ3V0IjogIkNvcnRhciIsCisgICAgICAgICJEOiI6ICJHOiIsCisgICAgICAgICJEaXJlY3RvcnkiOiAiRGlyZXTDs3JpbyIsCisgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiRGlyZXTDs3JpbyBBY2ltYSIsCisgICAgICAgICJFZGl0IjogIkVkaXRhciIsCisgICAgICAgICJGaWxlIExpc3QiOiAiTGlzdGEgZGUgQXJxdWl2b3MiLAorICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIkdlcmVuY2lhZG9yIGRlIEFycXVpdm9zIiwKKyAgICAgICAgIkZpbGVuYW1lOiI6ICJOb21lIGRvIEFycXVpdm86IiwKKyAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICJFc3BlbGhhciBIb3Jpem9udGFsbWVudGUiLAorICAgICAgICAiRmxpcCBJbWFnZSI6ICJFc3BlbGhhciBJbWFnZW0iLAorICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICJFc3BlbGhhciBWZXJ0aWNhbG1lbnRlIiwKKyAgICAgICAgIkZvbGRlciI6ICJQYXN0YSIsCisgICAgICAgICJHSUYiOiAiR0lGIiwKKyAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICJGb3JtYXRvIEdJRiBuw6NvIMOpIHN1cG9ydGFkbywgbsOjbyDDqSBwb3Nzw612ZWwgZWRpdGFyIGltYWdlbS4iLAorICAgICAgICAiSDoiOiAiQToiLAorICAgICAgICAiSGVpZ2h0IjogIkFsdHVyYSIsCisgICAgICAgICJIZWlnaHQ6IjogIkFsdHVyYToiLAorICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIkVkaXRvciBkZSBJbWFnZW0iLAorICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIlNlbGXDp8OjbyBkZSBJbWFnZW0iLAorICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICJJbnNlcmlyIExpbmsgZGUgQXJxdWl2byIsCisgICAgICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICJEaXJldMOzcmlvIGJhc2UgaW52w6FsaWRvIiwKKyAgICAgICAgIkpQRUcgSGlnaCI6ICJKUEVHIEFsdG8iLAorICAgICAgICAiSlBFRyBMb3ciOiAiSlBFRyBCYWl4byIsCisgICAgICAgICJKUEVHIE1lZGl1bSI6ICJKUEVHIE3DqWRpbyIsCisgICAgICAgICJMZWZ0IjogIkVzcXVlcmRhIiwKKyAgICAgICAgIkxvYWRpbmciOiAiQ2FycmVnYW5kbyIsCisgICAgICAgICJMb2NrIjogIlRyYXZhciIsCisgICAgICAgICJNYXJnaW4iOiAiTWFyZ2VtIiwKKyAgICAgICAgIk1hcmtlciI6ICJNYXJjYXIiLAorICAgICAgICAiTWF4aW11bSBmb2xkZXIgc2l6ZSBsaW1pdCByZWFjaGVkLiBVcGxvYWQgZGlzYWJsZWQuIjogIkF0aW5naWRvIG8gbGltaXRlIG3DoXhpbW8gZGEgcGFzdGEuIEVudmlvIGRlc2F0aXZhZG8uIiwKKyAgICAgICAgIk1lYXN1cmUiOiAiTWVkaWRhOiIsCisgICAgICAgICJNaWRkbGUiOiAiTWVpbyIsCisgICAgICAgICJOZXcgRm9sZGVyIjogIk5vdmEgUGFzdGEiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOb3ZhIGphbmVsYSAoX2JsYW5rKSIsCisgICAgICAgICJObyBGaWxlcyBGb3VuZCI6ICJOZW5odW0gQXJxdWl2byBFbmNvbnRyYWRvIiwKKyAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICJOZW5odW1hIEltYWdlbSBEaXNwb27DrXZlbCIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIk5lbmh1bSAodXNvIGltcGzDrWNpdG8pIiwKKyAgICAgICAgIk5vdCBzZXQiOiAiTsOjbyBkZWZpbmlkbyIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQTkciOiAiUE5HIiwKKyAgICAgICAgIlBhZGRpbmciOiAiRXNwYcOnYW1lbnRvIEludGVybm8iLAorICAgICAgICAiUGxlYXNlIGVudGVyIHZhbHVlIjogIlBvciBmYXZvciwgZW50cmUgbyB2YWxvciIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIlBvc2ljaW9uYW1lbnRvIGRlc3RhIGltYWdlbSIsCisgICAgICAgICJQcmV2aWV3IjogIlZpc3VhbGl6YXIiLAorICAgICAgICAiUXVhbGl0eToiOiAiUXVhbGlkYWRlOiIsCisgICAgICAgICJSZWZyZXNoIjogIkF0dWFsaXphciIsCisgICAgICAgICJSZW5hbWUiOiAiUmVub21lYXIiLAorICAgICAgICAiUmVzaXplIjogIlJlZGltZW5jaW9uYXIiLAorICAgICAgICAiUmlnaHQiOiAiRGlyZWl0YShvKSIsCisgICAgICAgICJSb3RhdGUiOiAiUm90YWNpb25hciIsCisgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIlJvdGFjaW9uYXIgMTgwICZkZWc7IiwKKyAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiUm90YWNpb25hciA5MCAmZGVnOyBhbnRpLWhvcsOhcmlvIiwKKyAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICJSb3RhY2lvbmFyIDkwICZkZWc7IGhvcsOhcmlvIiwKKyAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICJSb3RhY2lvbmFyIEltYWdlbSIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiTWVzbWEgZnJhbWUgKF9zZWxmKSIsCisgICAgICAgICJTYXZlIjogIkdyYXZhciIsCisgICAgICAgICJTdGFydCBYOiI6ICJJbsOtY2lvIFg6IiwKKyAgICAgICAgIlN0YXJ0IFk6IjogIkluw61jaW8gWSIsCisgICAgICAgICJUYXJnZXQgV2luZG93IjogIkphbmVsYSBEZXN0aW5vIiwKKyAgICAgICAgIlRleHR0b3AiOiAiVGV4dG8gbm8gdG9wbyIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCkiOiAiVMOtdHVsbyAodG9vbHRpcCkiLAorICAgICAgICAiVG9wIjogIlRvcG8iLAorICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJGcmFtZSBkbyB0b3BvIChfdG9wKSIsCisgICAgICAgICJUcmFzaCI6ICJMaXhvIiwKKyAgICAgICAgIlVwbG9hZCI6ICJFbnZpYXIiLAorICAgICAgICAiVzoiOiAiTDoiLAorICAgICAgICAiV2lkdGgiOiAiTGFyZ3VyYSIsCisgICAgICAgICJXaWR0aDoiOiAiTGFyZ3VyYToiLAorICAgICAgICAiWDoiOiAiWDoiLAorICAgICAgICAiWToiOiAiWToiLAorICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIlZvY8OqIHByZWNpc2Egc2VsZWNpb25hciB1bSB0ZXh0byBhbnRlcyBkZSBjcmlhciB1bSBub3ZvIGxpbmsuIiwKKyAgICAgICAgIlpvb20iOiAiQW1wbGlhw6fDo28iCisgICAgfSwKKyAgICAiRmlsdGVyIjogeworICAgICAgICAiRmlsdGVyIjogIkZpbHRybyIKKyAgICB9LAorICAgICJGaW5kUmVwbGFjZSI6IHsKKyAgICAgICAgIkNhc2Ugc2Vuc2l0aXZlIHNlYXJjaCI6ICJQcm9jdXJhIGRpZmVyZW5jaWFkYSBNYWnDunNjdWxhcy9NaW7DunNjdWxhcyIsCisgICAgICAgICJDbGVhciI6ICJMaW1wYXIiLAorICAgICAgICAiRG9uZSI6ICJFeGVjdXRhZG8iLAorICAgICAgICAiRW50ZXIgdGhlIHRleHQgeW91IHdhbnQgdG8gZmluZCI6ICJGb3JuZcOnYSBvIHRleHRvIHF1ZSBkZXNlamEgcHJvY3VyYXIiLAorICAgICAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICJQcm9jdXJhciBlIFN1YnN0aXR1aXIiLAorICAgICAgICAiSGlnaGxpZ2h0IjogIk1hcmNhciIsCisgICAgICAgICJJbmZvcm0gYSByZXBsYWNlbWVudCB3b3JkIjogIkluZm9ybWUgdW1hIHBhbGF2cmEgcGFyYSBzdWJzdGl0dWlyIiwKKyAgICAgICAgIk5leHQiOiAiUHLDs3hpbWEiLAorICAgICAgICAiT3B0aW9ucyI6ICJPcMOnw7VlcyIsCisgICAgICAgICJSZXBsYWNlIHdpdGg6IjogIlN1YnN0aXR1aXIgcG9yOiIsCisgICAgICAgICJTZWFyY2ggZm9yOiI6ICJQcm9jdXJhciBwb3I6IiwKKyAgICAgICAgIlN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIjogIlN1YnN0aXR1aXIgdG9kYXMgYXMgb2NvcnLDqm5jaWFzIiwKKyAgICAgICAgIlN1YnN0aXR1dGUgdGhpcyBvY2N1cnJlbmNlPyI6ICJTdWJzdGl0dWlyIHRvZGFzIGFzIG9jb3Jyw6puY2lhcz8iLAorICAgICAgICAiVW5kbyI6ICJEZXNmYXplciIsCisgICAgICAgICJXaG9sZSB3b3JkcyBvbmx5IjogIkFwZW5hcyBwYWxhdnJhcyBpbnRlaXJhcyIsCisgICAgICAgICJmb3VuZCBpdGVtIjogIkl0ZW0gZW5jb250cmFkbyIsCisgICAgICAgICJmb3VuZCBpdGVtcyI6ICJJdGVucyBlbmNvbnRyYWRvcyIsCisgICAgICAgICJub3QgZm91bmQiOiAibmFkYSBlbmNvbnRyYWRvIiwKKyAgICAgICAgInJlcGxhY2VkIGl0ZW0iOiAic3Vic3RpdHVpciBpdGVtIiwKKyAgICAgICAgInJlcGxhY2VkIGl0ZW1zIjogInN1YnN0aXR1aXIgaXRlbnMiCisgICAgfSwKKyAgICAiRm9ybU9wZXJhdGlvbnMiOiB7CisgICAgICAgICJFbnRlciB0aGUgbmFtZSBmb3IgbmV3IG9wdGlvbi4iOiAiRW50cmUgY29tIG8gbm9tZSBwYXJhIG5vdmEgb3DDp8OjbyIsCisgICAgICAgICJGb3JtIEVkaXRvciI6ICJFZGl0b3IgZGUgRm9ybXVsw6FyaW9zIiwKKyAgICAgICAgIkluc2VydCBhIEZvcm0uIjogIkluc2VyaXIgdW0gRm9ybXVsw6FyaW8uIiwKKyAgICAgICAgIkluc2VydCBhIGNoZWNrIGJveC4iOiAiSW5zZXJpciB1bWEgY2FpeGEgZGUgb3DDp8OjbyIsCisgICAgICAgICJJbnNlcnQgYSBtdWx0aS1saW5lIHRleHQgZmllbGQuIjogIkluc2VyaXIgdW0gdGV4dG8gbXVsdGktbGluaGEuIiwKKyAgICAgICAgIkluc2VydCBhIHJhZGlvIGJ1dHRvbi4iOiAiSW5zZXJpciB1bSBjYW1wbyBkZSBlc2NvbGhhIiwKKyAgICAgICAgIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iOiAiSW5zZXJpciBzZWxlw6fDo28uIiwKKyAgICAgICAgIkluc2VydCBhIHN1Ym1pdC9yZXNldCBidXR0b24uIjogIkluc2VyaXIgdW0gYm90w6NvIGRlIGVudmlvL3Jlc2V0IiwKKyAgICAgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiSW5zZXJpciB1bSB0ZXh0bywgc2VuaGEgb3UgY2FtcG8gZXNjb25kaWRvLiIKKyAgICB9LAorICAgICJGb3JtcyI6IHsKKyAgICAgICAgIkFjY2VzcyBLZXk6IjogIlRlY2xhIGRlIEFjZXNzbzoiLAorICAgICAgICAiQWN0aW9uIFVSTDoiOiAiQcOnw6NvIC0gVVJMOiIsCisgICAgICAgICJCdXR0b24gU2NyaXB0IjogIlNjcmlwdCBkZSBCb3TDo28iLAorICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkNoZWNrZWQiOiAiRGVmaW5pZG8iLAorICAgICAgICAiQ29sdW1uczoiOiAiQ29sdW5hczoiLAorICAgICAgICAiRGVmYXVsdCB0ZXh0IChvcHRpb25hbCkiOiAiVGV4dG8gcGFkcsOjbyAob3BjaW9uYWwpIiwKKyAgICAgICAgIkRpbWVuc2lvbnMiOiAiRGltZW5zw7VlcyIsCisgICAgICAgICJEaXNhYmxlZCI6ICJEZXNhdGl2YWRvIiwKKyAgICAgICAgIkVuY29kaW5nOiI6ICJDb2RpZmljYcOnw6NvOiIsCisgICAgICAgICJGb3IgQ29udHJvbDoiOiAiUGFyYSBDb250cm9sZToiLAorICAgICAgICAiRm9ybSI6ICJGb3JtdWzDoXJpbyIsCisgICAgICAgICJGb3JtIEVsZW1lbnQ6IEZJRUxEU0VUIjogIkVsZW1lbnRvIGRvIGZvcm11bMOhcmlvOiBGSUVMRFNFVCIsCisgICAgICAgICJGb3JtIEVsZW1lbnQ6IElOUFVUIjogIkVsZW1lbnRvIGRvIGZvcm11bMOhcmlvOiBJTlBVVCIsCisgICAgICAgICJGb3JtIEVsZW1lbnQ6IExBQkVMIjogIkVsZW1lbnRvIGRvIGZvcm11bMOhcmlvOiBMQUJFTCIsCisgICAgICAgICJGb3JtIEVsZW1lbnQ6IFNFTEVDVCI6ICJFbGVtZW50byBkbyBmb3JtdWzDoXJpbzogU0VMRUNUIiwKKyAgICAgICAgIkZvcm0gRWxlbWVudDogVEVYVEFSRUEiOiAiRWxlbWVudG8gZG8gZm9ybXVsw6FyaW86IFRFWFRBUkVBIiwKKyAgICAgICAgIkZvcm0gTmFtZToiOiAiTm9tZSBkbyBGb3JtdWzDoXJpbzoiLAorICAgICAgICAiRm9ybSBoYW5kbGVyIHNjcmlwdCI6ICJTY3JpcHQgZG8gRm9ybXVsw6FyaW8iLAorICAgICAgICAiSFRNTC1Gb3JtIHRvIENHSSAoZGVmYXVsdCkiOiAiRm9ybXVsw6FyaW8gcGFyYSBDR0kgKHBhZHLDo28pIiwKKyAgICAgICAgIkhhcmQiOiAiRGlmw61jaWwiLAorICAgICAgICAiSGVpZ2h0IGluIG51bWJlciBvZiByb3dzIjogIkFsdHVyYSBlbSBuw7ptZXJvIGRlIGxpbmhhcyIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIlVSTCBkYSBpbWFnZW06IiwKKyAgICAgICAgIkltYWdlIHNvdXJjZSI6ICJJbWFnZW0gZGUgT3JpZ2VtIiwKKyAgICAgICAgIkluaXRpYWwgVGV4dDoiOiAiVGV4dG8gSW5pY2lhbDoiLAorICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSI6ICJJbnNlcmlyL0VkaXRhciBGb3JtdWzDoXJpbyIsCisgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgRklFTERTRVQiOiAiSW5zZXJpci9FZGl0YXIgRWxlbWVudG8gRklFTERTRVQiLAorICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IElOUFVUIjogIkluc2VyaXIvRWRpdGFyIEVsZW1lbnRvIElOUFVUIiwKKyAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBMQUJFTCI6ICJJbnNlcmlyL0VkaXRhciBFbGVtZW50byBMQUJFTCIsCisgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgU0VMRUNUIjogIkluc2VyaXIvRWRpdGFyIEVsZW1lbnRvIFNFTEVDVCIsCisgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgVEVYVEFSRUEiOiAiSW5zZXJpci9FZGl0YXIgRWxlbWVudG8gVEVYVEFSRUEiLAorICAgICAgICAiSmF2YXNjcmlwdCBmb3IgYnV0dG9uIGNsaWNrIjogIkphdmFzY3JpcHQgcGFyYSBib3TDo28gZGUgY2xpY2FyIiwKKyAgICAgICAgIkxhYmVsOiI6ICJFdGlxdWV0YToiLAorICAgICAgICAiTGVnZW5kOiI6ICJMZWdlbmRhOiIsCisgICAgICAgICJNYXggbGVuZ3RoOiI6ICJDb21wcmltZW50byBNw6F4LjoiLAorICAgICAgICAiTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY2NlcHRlZCI6ICJNw6F4aW1vIG7Dum1lcm8gZGUgY2FyYWN0ZXJlcyBhY2VpdG9zIiwKKyAgICAgICAgIk1ldGhvZDoiOiAiTcOpdG9kbzoiLAorICAgICAgICAiTmFtZSI6ICJOb21lIiwKKyAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiTm9tZSBkbyBmb3JtdWzDoXJpbyBkZSBlbnRyYWRhIiwKKyAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gc2VsZWN0IjogIk5vbWUgZG8gZm9ybXVsw6FyaW8gZGUgc2VsZcOnw6NvIiwKKyAgICAgICAgIk5hbWUvSUQ6IjogIk5vbWUvSUQ6IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk9mZiI6ICJEZXNsaWdhZG8iLAorICAgICAgICAiT3B0aW9ucyI6ICJPcMOnw7VlcyIsCisgICAgICAgICJQaHlzaWNhbCI6ICJGw61zaWNvIiwKKyAgICAgICAgIlBsZWFzZSBlbnRlciBhIExhYmVsIjogIlBvciBmYXZvciwgZW50cmUgdW1hIEV0aXF1ZXRhIiwKKyAgICAgICAgIlBvc3QiOiAiUG9zdCIsCisgICAgICAgICJSZWFkIE9ubHkiOiAiU29tZW50ZSBMZWl0dXJhIiwKKyAgICAgICAgIlJvd3M6IjogIkxpbmhhczoiLAorICAgICAgICAiU2l6ZSBvZiB0ZXh0IGJveCBpbiBjaGFyYWN0ZXJzIjogIlRhbWFuaG8gZGEgY2FpeGEgZGUgdGV4dG8gZW0gY2FyYWN0ZXJlcyIsCisgICAgICAgICJTaXplOiI6ICJUYW1hbmhvOiIsCisgICAgICAgICJTb2Z0IjogIkbDoWNpbCIsCisgICAgICAgICJUYWIgSW5kZXg6IjogIk9yZGVtIGRlIFRhYnVsYcOnw6NvOiIsCisgICAgICAgICJUYXJnZXQgRnJhbWU6IjogIkZyYW1lIGRlIGRlc3Rpbm86IiwKKyAgICAgICAgIlRleHQ6IjogIlRleHRvOiIsCisgICAgICAgICJVUkwgb2YgaW1hZ2UiOiAiVVJMIGRhIGltYWdlbSIsCisgICAgICAgICJWYWx1ZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICJWYWxvciBkbyBmb3JtdWzDoXJpbyBkZSBlbnRyYWRhIiwKKyAgICAgICAgIlZhbHVlOiI6ICJWYWxvcjoiLAorICAgICAgICAiVmlydHVhbCI6ICJWaXJ0dWFsIiwKKyAgICAgICAgIldpZHRoIGluIG51bWJlciBvZiBjaGFyYWN0ZXJzIjogIkxhcmd1cmEgZW0gbsO6bWVybyBkZSBjYXJhY3RlcmVzIiwKKyAgICAgICAgIldyYXAgTW9kZToiOiAiTW9kbyBkZSBxdWVicmFzOiIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIE5hbWUiOiAiVm9jw6ogcHJlY2lzYSBlbnRyYXIgY29tIHVtIE5vbWUiLAorICAgICAgICAibXVsdGlwYXJ0IEZvcm0gRGF0YSAoRmlsZS1VcGxvYWQpIjogIkZvcm11bMOhcmlvIGRlIGRhZG9zIG11bHRpcGFydCAoRW52aWFyIGFycXVpdm8pIiwKKyAgICAgICAgIm5hbWUgb2YgdGhlIHRleHRhcmVhIjogIm5vbWUgZGEgw6FyZWEgZGUgdGV4dG8iLAorICAgICAgICAibm9ybWFsIjogIm5vcm1hbCIsCisgICAgICAgICJub3dyYXAiOiAic2VtIHF1ZWJyYXMiCisgICAgfSwKKyAgICAiRnVsbFBhZ2UiOiB7CisgICAgICAgICJBbHRlcm5hdGUgc3R5bGUtc2hlZXQ6IjogIkVzdGlsbyBhbHRlcm5hdGl2bzoiLAorICAgICAgICAiQmFja2dyb3VuZCBjb2xvcjoiOiAiQ8O0ciBkZSBGdW5kbzoiLAorICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkNoYXJhY3RlciBzZXQ6IjogIkNvbmp1bnRvIGRlIENhcmFjdGVyZXM6IiwKKyAgICAgICAgIkRPQ1RZUEU6IjogIkRPQ1RZUEU6IiwKKyAgICAgICAgIkRlc2NyaXB0aW9uOiI6ICJEZXNjcmnDp8OjbzoiLAorICAgICAgICAiRG9jdW1lbnQgcHJvcGVydGllcyI6ICJQcm9wcmllZGFkZXMgZG8gRG9jdW1lbnRvIiwKKyAgICAgICAgIkRvY3VtZW50IHRpdGxlOiI6ICJUw610dWxvIGRvIERvY3VtZW50bzoiLAorICAgICAgICAiS2V5d29yZHM6IjogIlBhbGF2cmFzIGNoYXZlOiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQcmltYXJ5IHN0eWxlLXNoZWV0OiI6ICJFc3RpbG8gUHJpbcOhcmlvOiIsCisgICAgICAgICJUZXh0IGNvbG9yOiI6ICJDw7RyIGRvIFRleHRvOiIsCisgICAgICAgICJVVEYtOCAocmVjb21tZW5kZWQpIjogIlVURi04IChyZWNvbWVuZGFkbykiLAorICAgICAgICAiY3lyaWxsaWMgKElTTy04ODU5LTUpIjogIkNpcsOtbGljbyAoSVNPLTg4NTktNSkiLAorICAgICAgICAiY3lyaWxsaWMgKEtPSTgtUikiOiAiQ2lyw61saWNvIChLT0k4LVIpIiwKKyAgICAgICAgImN5cmlsbGljIChXSU5ET1dTLTEyNTEpIjogIkPDrXJpbGljbyAoV0lORE9XUy0xMjUxKSIsCisgICAgICAgICJ3ZXN0ZXJuIChJU08tODg1OS0xKSI6ICJPY2lkZW50YWwgKElTTy04ODU5LTEpIgorICAgIH0sCisgICAgIkZ1bGxTY3JlZW4iOiB7CisgICAgICAgICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiTWF4aW1pemFyL01pbmltaXphciBFZGl0b3IiCisgICAgfSwKKyAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICJBbGlnbm1lbnQ6IjogIkFsaW5oYW1lbnRvOiIsCisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiQ2VudGVyIjogIkNlbnRyYWxpemFyIiwKKyAgICAgICAgIkNvbG9yOiI6ICJDw7RyOiIsCisgICAgICAgICJIZWlnaHQ6IjogIkFsdHVyYXI6IiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICJMaW5oYSBIb3Jpem9udGFsIiwKKyAgICAgICAgIkluc2VydC9FZGl0IEhvcml6b250YWwgUnVsZSI6ICJJbnNlcmlyL0VkaXRhciBMaW5oYSBIb3Jpem9udGFsIiwKKyAgICAgICAgIkluc2VydC9lZGl0IGhvcml6b250YWwgcnVsZSI6ICJJbnNlcmlyL2VkaXRhciBsaW5oYSBob3Jpem9udGFsIiwKKyAgICAgICAgIkxheW91dCI6ICJFc3F1ZW1hIiwKKyAgICAgICAgIkxlZnQiOiAiRXNxdWVyZGEiLAorICAgICAgICAiTm8gc2hhZGluZyI6ICJTZW0gc29tYnJhIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlJpZ2h0IjogIkRpcmVpdGEiLAorICAgICAgICAiU3R5bGUiOiAiRXN0aWxvIiwKKyAgICAgICAgIldpZHRoOiI6ICJMYXJndXJhOiIsCisgICAgICAgICJwZXJjZW50IjogInBvcmNlbnRhZ2VtIiwKKyAgICAgICAgInBpeGVscyI6ICJwaXhlbHMiCisgICAgfSwKKyAgICAiSHRtbFRpZHkiOiB7CisgICAgICAgICJBdXRvLVRpZHkiOiAiQXV0by1UaWR5IiwKKyAgICAgICAgIkRvbid0IFRpZHkiOiAiU2VtIFRpZHkiLAorICAgICAgICAiSFRNTCBUaWR5IjogIkhUTUwgVGlkeSIsCisgICAgICAgICJUaWR5IGZhaWxlZC4gIENoZWNrIHlvdXIgSFRNTCBmb3Igc3ludGF4IGVycm9ycy4iOiAiVGlkeSBmYWxob3UuIFZlcmlmaXF1ZSBlcnJvcyBkZSBzaW50YXhlIGVtIHNldSBIVE1MLiIKKyAgICB9LAorICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICJBOiI6ICJBOiIsCisgICAgICAgICJBYnNib3R0b20iOiAiSW5mZXJpb3IgYWJzb2x1dG8iLAorICAgICAgICAiQWJzbWlkZGxlIjogIk1laW8gYWJzb2x1dG8iLAorICAgICAgICAiQW5nbGU6IjogIsOCbmd1bG86IiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkxpbmhhIGRlIGJhc2UiLAorICAgICAgICAiQm90dG9tIjogIkJhc2UiLAorICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkNsZWFyIjogIkxpbXBhciIsCisgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiTWFudGVyIHByb3BvcsOnw7VlcyIsCisgICAgICAgICJDcm9wIjogIlJlY29ydGFyIiwKKyAgICAgICAgIkQ6IjogIkc6IiwKKyAgICAgICAgIkRpcmVjdG9yeSI6ICJEaXJldMOzcmlvIiwKKyAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICJEaXJldMOzcmlvIEFjaW1hIiwKKyAgICAgICAgIkVkaXQiOiAiRWRpdGFyIiwKKyAgICAgICAgIkZpbGVuYW1lOiI6ICJOb21lIGRvIGFycXVpdm86IiwKKyAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICJFc3BlbGhhciBIb3Jpem9udGFsbWVudGUiLAorICAgICAgICAiRmxpcCBJbWFnZSI6ICJFc3BlbGhhciBJbWFnZW0iLAorICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICJFc3BlbGhhciBWZXJ0aWNhbG1lbnRlIiwKKyAgICAgICAgIkZvbGRlciBOYW1lOiI6ICJOb21lIGRhIFBhc3RhOiIsCisgICAgICAgICJHSUYiOiAiR0lGIiwKKyAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICJGb3JtYXRvIEdJRiBuw6NvIMOpIHN1cG9ydGFkbywgZWRpw6fDo28gZGUgaW1hZ2VtIG7Do28gw6kgc3Vwb3J0YWRhLiIsCisgICAgICAgICJIOiI6ICJBOiIsCisgICAgICAgICJIZWlnaHQ6IjogIkFsdHVyYToiLAorICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIkVkaXRvciBkZSBJbWFnZW0iLAorICAgICAgICAiSW1hZ2UgRm9ybWF0IjogIkZvcm1hdG8gZGEgSW1hZ2VtIiwKKyAgICAgICAgIkltYWdlIExpc3QiOiAiTGlzdGEgZGUgSW1hZ2VucyIsCisgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiU2VsZcOnw6NvIGRlIEltYWdlbSIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiSW5zZXJpciBJbWFnZW0iLAorICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiRGlyZXTDs3JpbyBiYXNlIGludsOhbGlkbzoiLAorICAgICAgICAiSlBFRyBIaWdoIjogIkpQRUcgQWx0byIsCisgICAgICAgICJKUEVHIExvdyI6ICJKUEVHIEJhaXhvIiwKKyAgICAgICAgIkpQRUcgTWVkaXVtIjogIkpQRUcgTcOpZGlvIiwKKyAgICAgICAgIkxlZnQiOiAiRXNxdWVyZGEiLAorICAgICAgICAiTG9jayI6ICJUcmF2YXIiLAorICAgICAgICAiTWFya2VyIjogIk1hcmNhciIsCisgICAgICAgICJNZWFzdXJlIjogIk1lZGlkYSIsCisgICAgICAgICJNaWRkbGUiOiAiTWVpbyIsCisgICAgICAgICJOZXcgRm9sZGVyIjogIk5vdmEgUGFzdGEiLAorICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIlNlbSBJbWFnZW0gRGlzcG9uw612ZWwiLAorICAgICAgICAiTm8gSW1hZ2VzIEZvdW5kIjogIk5lbmh1bWEgSW1hZ2VtIEVuY29udHJhZGEiLAorICAgICAgICAiTm90IHNldCI6ICJOw6NvIGRlZmluaWRvIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBORyI6ICJQTkciLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJQb3NpY2lvbmFtZW50byBkZXN0YSBpbWFnZW0iLAorICAgICAgICAiUXVhbGl0eToiOiAiUXVhbGlkYWRlOiIsCisgICAgICAgICJSZWZyZXNoIjogIkF0dWFsaXphw6fDo28iLAorICAgICAgICAiUmVzaXplIjogIlJlZGltZW5jaW9uYXIiLAorICAgICAgICAiUmlnaHQiOiAiRGlyZWl0YSIsCisgICAgICAgICJSb3RhdGUiOiAiUm90YWNpb25hciIsCisgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIlJvdGFjaW9uYXIgMTgwICZkZWc7IiwKKyAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiUm90YWNpb25hciA5MCAmZGVnOyBhbnRpLWhvcsOhcmlvIiwKKyAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICJSb3RhY2lvbmFyIDkwICZkZWc7IGhvcsOhcmlvIiwKKyAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICJSb3RhY2lvbmFyIEltYWdlbSIsCisgICAgICAgICJTYXZlIjogIkdyYXZhciIsCisgICAgICAgICJTdGFydCBYOiI6ICJJbsOtY2lvIFg6IiwKKyAgICAgICAgIlN0YXJ0IFk6IjogIkluw61jaW8gWToiLAorICAgICAgICAiVGV4dHRvcCI6ICJUZXh0byBubyB0b3BvIiwKKyAgICAgICAgIlRvcCI6ICJUb3BvIiwKKyAgICAgICAgIlRyYXNoIjogIkxpeG8iLAorICAgICAgICAiVzoiOiAiQzoiLAorICAgICAgICAiV2lkdGg6IjogIkxhcmd1cmE6IiwKKyAgICAgICAgIlg6IjogIlg6IiwKKyAgICAgICAgIlk6IjogIlk6IgorICAgIH0sCisgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgIkJhY2tncm91bmQiOiAiRnVuZG8iLAorICAgICAgICAiQmFzZWxpbmUiOiAiTGluaGEgZGUgYmFzZSIsCisgICAgICAgICJCb3JkZXIiOiAiQm9yZGEiLAorICAgICAgICAiQm90dG9tIjogIkJhc2UiLAorICAgICAgICAiQ1NTIFN0eWxlIjogIkVzdGlsbyAoQ1NTKSIsCisgICAgICAgICJDZW50ZXIiOiAiQ2VudHJhbGl6YXIiLAorICAgICAgICAiQ2hhciI6ICJDYXJhY3RlciIsCisgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICJCb3JkYXMgZmVjaGFkYXMiLAorICAgICAgICAiRkcgQ29sb3IiOiAiQ29yIGRlIHByaW1laXJvIHBsYW5vIiwKKyAgICAgICAgIkZsb2F0IjogIkZsdXR1YW50ZSIsCisgICAgICAgICJIZWlnaHQiOiAiQWx0dXJhIiwKKyAgICAgICAgIkltYWdlIFVSTCI6ICJVUkwgZGEgaW1hZ2VtIiwKKyAgICAgICAgIkp1c3RpZnkiOiAiSnVzdGlmaWNhZG8iLAorICAgICAgICAiTGF5b3V0IjogIkVzcXVlbWEiLAorICAgICAgICAiTGVmdCI6ICJFc3F1ZXJkYSIsCisgICAgICAgICJNYXJnaW4iOiAiTWFyZ2VtIiwKKyAgICAgICAgIk1pZGRsZSI6ICJNZWlvIiwKKyAgICAgICAgIk5vbmUiOiAiTmVuaHVtIiwKKyAgICAgICAgIlBhZGRpbmciOiAiRXNwYcOnbyBpbnRlcm5vIiwKKyAgICAgICAgIlJpZ2h0IjogIkRpcmVpdGEiLAorICAgICAgICAiVGV4dCBhbGlnbiI6ICJBbGluaGFtZW50byBkbyB0ZXh0byIsCisgICAgICAgICJUb3AiOiAiVG9wbyIsCisgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICJBbGluaGFtZW50byB2ZXJ0aWNhbCIsCisgICAgICAgICJXaWR0aCI6ICJMYXJndXJhIiwKKyAgICAgICAgInBlcmNlbnQiOiAicG9yY2VudGFnZW0iLAorICAgICAgICAicGl4ZWxzIjogInBpeGVscyIKKyAgICB9LAorICAgICJJbnNlcnRBbmNob3IiOiB7CisgICAgICAgICJBbmNob3IgbmFtZSI6ICJOb21lIGRhIMOibmNvcmEiLAorICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkRlbGV0ZSI6ICJEZWxldGFyIiwKKyAgICAgICAgIkluc2VydCBBbmNob3IiOiAiSW5zZXJpciDDgm5jb3JhIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkluc2VydEltYWdlIjogeworICAgICAgICAiQWJzYm90dG9tIjogIkluZmVyaW9yIGFic29sdXRvIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJNZWlvIGFic29sdXRvIiwKKyAgICAgICAgIkFsaWdubWVudDoiOiAiQWxpbmhhbWVudG86IiwKKyAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJUZXh0byBBbHRlcm5hdGl2bzoiLAorICAgICAgICAiQmFzZWxpbmUiOiAiTGluaGEgZGUgYmFzZSIsCisgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJFc3Blc3N1cmEgZGEgQm9yZGEiLAorICAgICAgICAiQm90dG9tIjogIkJhc2UiLAorICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICJFbnRyZSBhcXVpIGNvbSBhIFVSTCBkYSBpbWFnZW0iLAorICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiUGFyYSBuYXZlZ2Fkb3JlcyBxdWUgbsOjbyBzdXBvcnRhbSBpbWFnZW5zIiwKKyAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICJFc3Bhw6dvIGhvcml6b250YWwiLAorICAgICAgICAiSG9yaXpvbnRhbDoiOiAiSG9yaXpvbnRhbDoiLAorICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiVmlzdWFsaXphw6fDo28gZGEgSW1hZ2VtOiIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIlVSTCBkYSBpbWFnZW06IiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICJJbnNlcmlyIEltYWdlbSIsCisgICAgICAgICJMYXlvdXQiOiAiRXNxdWVtYSIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIkRlaXhlIGVtIGJyYW5jbyBwYXJhIHNlbSBib3JkYXMiLAorICAgICAgICAiTGVmdCI6ICJFc3F1ZXJkYSIsCisgICAgICAgICJNaWRkbGUiOiAiTWVpbyIsCisgICAgICAgICJOb3Qgc2V0IjogIk7Do28gZGVmaW5pZG8iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJQb3NpY2lvbmFtZW50byBkZXN0YSBpbWFnZW0iLAorICAgICAgICAiUHJldmlldyI6ICJWaXN1YWxpemFyIiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJWaXN1YWxpemFyIGltYWdlbSBlbSB1bWEgbm92YSBqYW5lbGEiLAorICAgICAgICAiUmlnaHQiOiAiRGlyZWl0YSIsCisgICAgICAgICJTcGFjaW5nIjogIkVzcGHDp2FtZW50byIsCisgICAgICAgICJUZXh0dG9wIjogIlRleHRvIG5vIHRvcG8iLAorICAgICAgICAiVG9wIjogIlRvcG8iLAorICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICJFc3Bhw6dvIHZlcnRpY2FsIiwKKyAgICAgICAgIlZlcnRpY2FsOiI6ICJWZXJ0aWNhbDoiCisgICAgfSwKKyAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgIkFsdGVybmF0ZSI6ICJBbHRlcm5hdGl2byIsCisgICAgICAgICJCYWNrZ3JvdW5kLUNvbG9yOiI6ICJDw7RyIGRlIEZ1bmRvOiIsCisgICAgICAgICJCZWhhdmlvcjoiOiAiQ29tcG9ydGFtZW50bzoiLAorICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkNvbnRpbnVvdXMiOiAiQ29udMOtbnVvIiwKKyAgICAgICAgIkRpcmVjdGlvbjoiOiAiRGlyZcOnw6NvOiIsCisgICAgICAgICJIZWlnaHQ6IjogIkFsdHVyYToiLAorICAgICAgICAiSW5zZXJ0IHNjcm9sbGluZyBtYXJxdWVlIjogIkluc2VyaXIgZmFpeGEgcm9sYW50ZSIsCisgICAgICAgICJMZWZ0IjogIkVzcXVlcmRhIiwKKyAgICAgICAgIk1hcnF1ZWUgRWRpdG9yIjogIkVkaXRvciBkZSBGYWl4YXMiLAorICAgICAgICAiTmFtZSI6ICJOb21lIiwKKyAgICAgICAgIk5hbWUvSUQ6IjogIk5vbWUvSUQ6IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlJpZ2h0IjogIkRpcmVpdGEiLAorICAgICAgICAiU2Nyb2xsIEFtb3VudDoiOiAiUXVhbnRpZGFkZSBkZSBSb2xhZ2VtOiIsCisgICAgICAgICJTY3JvbGwgRGVsYXk6IjogIkF0cmF6byBkZSBSb2xhZ2VtOiIsCisgICAgICAgICJTbGlkZSI6ICJDb3JyZWRpw6dvIiwKKyAgICAgICAgIlNwZWVkIENvbnRyb2wiOiAiQ29udHJvbGUgZGUgVmVsb2NpZGFkZSIsCisgICAgICAgICJUZXh0OiI6ICJUZXh0bzoiLAorICAgICAgICAiV2lkdGg6IjogIkxhcmd1cmE6IgorICAgIH0sCisgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiSW5zZXJ0IjogIkluc2VyaXIiCisgICAgfSwKKyAgICAiSW5zZXJ0UGFnZWJyZWFrIjogeworICAgICAgICAiUGFnZSBicmVhayI6ICJRdWVicmEgZGUgcMOhZ2luYSIKKyAgICB9LAorICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAiIE9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiBBYnJpciBhcnF1aXZvIGVtIHVtIG5vdmEgamFuZWxhIiwKKyAgICAgICAgIkFic2JvdHRvbSI6ICJJbmZlcmlvciBBYnNvbHV0byIsCisgICAgICAgICJBYnNtaWRkbGUiOiAiTWVpbyBBYnNvbHV0byIsCisgICAgICAgICJBbGlnbm1lbnQ6IjogIkFsaW5oYW1lbnRvOiIsCisgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiVGV4dG8gQWx0ZXJuYXRpdm86IiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkxpbmhhIGRlIEJhc2UiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiRXNwZXNzdXJhIGRhIEJvcmRhIiwKKyAgICAgICAgIkJvdHRvbSI6ICJJbmZlcmlvciIsCisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkVudHJlIGFxdWkgY29tIGEgVVJMIGRhIGltYWdlbSIsCisgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJQYXJhIG5hdmVnYWRvcmVzIHF1ZSBuw6NvIHN1cG9ydGFtIGltYWdlbnMiLAorICAgICAgICAiSGVpZ2h0OiI6ICJBbHR1cmE6IiwKKyAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICJFc3Bhw6dvIGhvcml6b250YWwiLAorICAgICAgICAiSG9yaXpvbnRhbDoiOiAiSG9yaXpvbnRhbDoiLAorICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiVmlzdWFsaXphw6fDo28gZGEgSW1hZ2VtOiIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIlVSTCBkYSBJbWFnZW06IiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICJJbnNlcmlyIEltYWdlbSIsCisgICAgICAgICJMYXlvdXQiOiAiRXNxdWVtYSIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIkRlaXhlIGVtIGJyYW5jbyBwYXJhIHNlbSBib3JkYXMiLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vdCBkZWZpbmVkIjogIkRlaXhlIGVtIGJyYW5jbyBwYXJhIG7Do28gZGVmaW5pZG8iLAorICAgICAgICAiTGVmdCI6ICJFc3F1ZXJkYSIsCisgICAgICAgICJNaWRkbGUiOiAiTWVpbyIsCisgICAgICAgICJOb3Qgc2V0IjogIk7Do28gZGVmaW5pZG8iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiQWJyaXIgYXJxdWl2byBlbSB1bWEgbm92YSBqYW5lbGEiLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJQb3NpY2lvbmFtZW50byBkZXN0YSBpbWFnZW0iLAorICAgICAgICAiUHJldmlldyI6ICJWaXN1YWxpemHDp8OjbyIsCisgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiVmlzdWFsaXphciBpbWFnZW0gZW0gdW1hIG5vdmEgamFuZWxhIiwKKyAgICAgICAgIlJpZ2h0IjogIkRpcmVpdGEiLAorICAgICAgICAiU2l6ZSI6ICJUYW1hbmhvIiwKKyAgICAgICAgIlNwYWNpbmciOiAiRXNwYcOnbyIsCisgICAgICAgICJUZXh0dG9wIjogIlRleHRvIG5vIHRvcG8iLAorICAgICAgICAiVG9wIjogIlRvcG8iLAorICAgICAgICAiVXBsb2FkIGZpbGUiOiAiRW52aWFyIGFycXVpdm8iLAorICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICJFc3Bhw6dvIHZlcnRpY2FsIiwKKyAgICAgICAgIlZlcnRpY2FsOiI6ICJWZXJ0aWNhbDoiLAorICAgICAgICAiV2lkdGg6IjogIkxhcmd1cmE6IgorICAgIH0sCisgICAgIkluc2VydFNtaWxleSI6IHsKKyAgICAgICAgIkluc2VydCBTbWlsZXkiOiAiSW5zZXJpciBTbWlsZXkiCisgICAgfSwKKyAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCisgICAgICAgICJIaWRlIHByZXZpZXciOiAiRXNjb25kZXIgVmlzdWFsaXphw6fDo28iLAorICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiSW5zZXJpciBGcmFnbWVudG8gZGUgQ8OzZGlnbyIsCisgICAgICAgICJJbnNlcnQgYXMiOiAiSW5zZXJpciBjb21vIiwKKyAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIkZyYWdtZW50byBkZSBDw7NkaWdvcyBwYXJhIG8gWGluaGEiLAorICAgICAgICAiU2hvdyBwcmV2aWV3IjogIk1vc3RyYXIgVmlzdWFsaXphw6fDo28iLAorICAgICAgICAiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmciOiAiSXN0byDDqSB1bWEgaW5mb3JtYcOnw6NvIHNvYnJlIGFsZ3VtYSBjb2lzYSIsCisgICAgICAgICJWYXJpYWJsZSI6ICJWYXJpw6F2ZWwiCisgICAgfSwKKyAgICAiSW5zZXJ0U25pcHBldDIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiRmlsdGVyIjogIkZpbHRybyIsCisgICAgICAgICJIVE1MIjogIkhUTUwiLAorICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiSW5zZXJpciBGcmFnbWVudG8gZGUgQ8OzZGlnbyIsCisgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICJGcmFnbWVudG8gZGUgQ8OzZGlnb3MgcGFyYSBvIFhpbmhhIiwKKyAgICAgICAgIlZhcmlhYmxlIjogIlZhcmnDoXZlbCIKKyAgICB9LAorICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJJbmZlcmlvciBhYnNvbHV0byIsCisgICAgICAgICJBYnNtaWRkbGUiOiAiTWVpbyBhYnNvbHV0byIsCisgICAgICAgICJBbGlnbm1lbnQ6IjogIkFsaW5oYW1lbnRvOiIsCisgICAgICAgICJCYXNlbGluZSI6ICJMaW5oYSBkZSBiYXNlIiwKKyAgICAgICAgIkJvcmRlciI6ICJCb3JkYSIsCisgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJFc3Blc3N1cmEgZGEgQm9yZGEiLAorICAgICAgICAiQm90dG9tIjogIkJhc2UiLAorICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkNhcHRpb24iOiAiQ2FwdGHDp8OjbyIsCisgICAgICAgICJDZWxsIHBhZGRpbmc6IjogIkVzcGHDp2FtZW50byBpbnRlcm5vIGRhIGPDqWx1bGE6IiwKKyAgICAgICAgIkNlbGwgc3BhY2luZzoiOiAiRXNwYcOnYW1lbnRvIGRhIGPDqWx1bGE6IiwKKyAgICAgICAgIkNvbGxhcHNlIGJvcmRlcnM6IjogIkJvcmRhcyBmZWNoYWRhczoiLAorICAgICAgICAiQ29sczoiOiAiQ29sdW5hczoiLAorICAgICAgICAiRW0iOiAiRW0iLAorICAgICAgICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICJDb2x1bmFzIGNvbSBsYXJndXJhIGZpeGEiLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIkluc2VyaXIgVGFiZWxhIiwKKyAgICAgICAgIkxheW91dCI6ICJFc3F1ZW1hIiwKKyAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiRGVpeGUgZW0gYnJhbmNvIHBhcmEgc2VtIGJvcmRhcyIsCisgICAgICAgICJMZWZ0IjogIkVzcXVlcmRhIiwKKyAgICAgICAgIk1pZGRsZSI6ICJNZWlvIiwKKyAgICAgICAgIk5vdCBzZXQiOiAiTsOjbyBkZWZpbmlkbyIsCisgICAgICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICJOw7ptZXJvIGRlIGNvbHVuYXMiLAorICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAiTsO6bWVybyBkZSBsaW5oYXMiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUGVyY2VudCI6ICJQb3JjZW50YWdlbSIsCisgICAgICAgICJQaXhlbHMiOiAiUGl4ZWxzIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiUG9zaWNpb25hbWVudG8gZGVzdGEgdGFiZWxhIiwKKyAgICAgICAgIlJpZ2h0IjogIkRpcmVpdGEiLAorICAgICAgICAiUm93czoiOiAiTGluaGFzOiIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIkVzcGHDp28gZW50cmUgY8OpbHVsYXMgYWRqYWNlbnRlcyIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIkVzcGHDp28gZW50cmUgY29udGXDumRvIGUgYm9yZGEgbmEgY8OpbHVsYSIsCisgICAgICAgICJTcGFjaW5nIjogIkVzcGHDp2FtZW50byIsCisgICAgICAgICJUZXh0dG9wIjogIlRleHRvIG5vIHRvcG8iLAorICAgICAgICAiVG9wIjogIlRvcG8iLAorICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIkxhcmd1cmEgZGEgdGFiZWxhIiwKKyAgICAgICAgIldpZHRoIHVuaXQiOiAiVW5pZGFkZSBkZSBsYXJndXJhIiwKKyAgICAgICAgIldpZHRoOiI6ICJMYXJndXJhOiIKKyAgICB9LAorICAgICJMYW5nTWFya3MiOiB7CisgICAgICAgICImbWRhc2g7IGxhbmd1YWdlICZtZGFzaDsiOiAiJm1kYXNoOyBJZGlvbWEgJm1kYXNoOyIsCisgICAgICAgICJFbmdsaXNoIjogIkluZ2zDqnMiLAorICAgICAgICAiRnJlbmNoIjogIkZyYW5jw6pzIiwKKyAgICAgICAgIkdyZWVrIjogIkdyZWdvIiwKKyAgICAgICAgIkxhdGluIjogIkxhdGltIiwKKyAgICAgICAgImxhbmd1YWdlIHNlbGVjdCI6ICJTZWxlY2lvbmFyIGlkaW9tYSIKKyAgICB9LAorICAgICJMaW5rZXIiOiB7CisgICAgICAgICJBbmNob3ItTGluayI6ICJMaW5rLcOCbmNvcmEiLAorICAgICAgICAiQW5jaG9yOiI6ICLDgm5jb3JhOiIsCisgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiVm9jw6ogdGVtIGNlcnRlemEgcXVlIGRlc2VqYSByZW1vdmVyIGVzdGUgbGluaz8iLAorICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkVtYWlsIEFkZHJlc3M6IjogIkVuZGVyZcOnbyBkZSBFLW1haWw6IiwKKyAgICAgICAgIkVtYWlsIExpbmsiOiAiTGluayBkZSBFLW1haWwiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIkluc2VyaXIvTW9kaWZpY2FyIExpbmsiLAorICAgICAgICAiTG9jYXRpb24gQmFyOiI6ICJCYXJyYSBkZSBMb2NhbGl6YcOnw6NvOiIsCisgICAgICAgICJNZW51IEJhcjoiOiAiQmFycmEgZGUgTWVudToiLAorICAgICAgICAiTWVzc2FnZSBUZW1wbGF0ZToiOiAiTW9kZWxvIGRlIE1lbnNhZ2VtOiIsCisgICAgICAgICJOYW1lOiI6ICJOb21lOiIsCisgICAgICAgICJOZXcgV2luZG93IjogIk5vdmEgSmFuZWxhIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk9yZGluYXJ5IExpbmsiOiAiTGluayBDb211bSIsCisgICAgICAgICJQb3B1cCBXaW5kb3ciOiAiSmFuZWxhIFBvcC11cCIsCisgICAgICAgICJSZW1vdmUgTGluayI6ICJSZW1vdmVyIExpbmsiLAorICAgICAgICAiUmVzaXplYWJsZToiOiAiUmVkaW1lbnNpb27DoXZlbCIsCisgICAgICAgICJTYW1lIFdpbmRvdyAoanVtcCBvdXQgb2YgZnJhbWVzKSI6ICJNZXNtYSBKYW5lbGEgKFNhaXIgZm9yYSBkb3MgZnJhbWVzKSIsCisgICAgICAgICJTY3JvbGxiYXJzOiI6ICJCYXJyYSBkZSBSb2xhZ2VtOiIsCisgICAgICAgICJTaXplOiI6ICJUYW1hbmhvOiIsCisgICAgICAgICJTdGF0dXMgQmFyOiI6ICJCYXJyYSBkZSBJbmZvcm1hw6fDtWVzOiIsCisgICAgICAgICJTdWJqZWN0OiI6ICJBc3N1bnRvOiIsCisgICAgICAgICJUYXJnZXQ6IjogIkRlc3Rpbm86IiwKKyAgICAgICAgIlRvb2xiYXI6IjogIkJhcnJhIGRlIEZlcnJhbWVudGFzOiIsCisgICAgICAgICJVUkwgTGluayI6ICJVUkwgZG8gTGluayIsCisgICAgICAgICJVUkw6IjogIlVSTDoiLAorICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIlZvY8OqIHByZWNpc2Egc2VsZWNpb25hciBhbGd1bSB0ZXh0byBhbnRlcyBkZSBjcmlhciB1bSBub3ZvIGxpbmsuIgorICAgIH0sCisgICAgIkxpc3RUeXBlIjogeworICAgICAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogIkVzY29saGEgdW0gdGlwbyBkZSBsaXN0YSAocGFyYSBsaXN0YSBvcmRlbmFkYSkiLAorICAgICAgICAiRGVjaW1hbCBudW1iZXJzIjogIk7Dum1lcm9zIGRlY2ltYWlzIiwKKyAgICAgICAgIkxvd2VyIGdyZWVrIGxldHRlcnMiOiAiTGV0cmFzIGdyZWdhcyBpbmZlcmlvcmVzIiwKKyAgICAgICAgIkxvd2VyIGxhdGluIGxldHRlcnMiOiAiTGV0cmFzIGxhdGluYXMgaW5mZXJpb3JlcyIsCisgICAgICAgICJMb3dlciByb21hbiBudW1iZXJzIjogIk7Dum1lcm9zIHJvbWFub3MgaW5mZXJpb3JlcyIsCisgICAgICAgICJVcHBlciBsYXRpbiBsZXR0ZXJzIjogIkxldHJhcyBsYXRpbmFzIHN1cGVyaW9yZXMiLAorICAgICAgICAiVXBwZXIgcm9tYW4gbnVtYmVycyI6ICJOw7ptZXJvcyByb21hbm9zIHN1cGVyaW9yZXMiCisgICAgfSwKKyAgICAiTW9vdG9vbHNGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiSW5zZXJpciBMaW5rIGRlIEFycXVpdm8iLAorICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIlZvY8OqIHByZWNpc2Egc2VsZWNpb25hciBhbGd1bSB0ZXh0byBhbnRlcyBkZSBjcmlhciB1bSBub3ZvIGxpbmsuIgorICAgIH0sCisgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICJBZGQgR1VJRE8gQ29kZSBpbiBhIHRleHRib3ggb24gdGhlIHBhZ2UiOiAiQWRpY2lvbmFyIGPDs2RpZ28gR1VJRE8gZW0gdW1hIGNhaXhhIGRlIHRleHRvIG5hIHDDoWdpbmEiLAorICAgICAgICAiQWRkIE1JREkgbGluayB0byBhbGxvdyBzdHVkZW50cyB0byBoZWFyIHRoZSBtdXNpYyI6ICJBZGljaW9uYXIgdW0gbGluayBNSURJIHBhcmEgcGVybWl0aXIgcXVlIG9zIGVzdHVkYW50ZXMgZXNjdXRlbSBhIG3DunNpY2EiLAorICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkZvcm1hdCI6ICJGb3JtYXRvIiwKKyAgICAgICAgIkdVSURPIENvZGUiOiAiQ8OzZGlnbyBHVUlETyIsCisgICAgICAgICJHdWlkbyBjb2RlIjogIkPDs2RpZ28gR3VpZG8iLAorICAgICAgICAiSW1hZ2UgUHJldmlldyI6ICJWaXN1YWxpemHDp8OjbyBkYSBJbWFnZW0iLAorICAgICAgICAiSW1hZ2UgaW4gYXBwbGV0IjogIkltYWdlbSBlbSBBcHBsZXQiLAorICAgICAgICAiSW5zZXJ0IEdVSURPIE11c2ljIE5vdGF0aW9uIjogIkluc2VyaXIgTm90YcOnw6NvIEdVSURPIGRlIE3DunNpY2EiLAorICAgICAgICAiTUlESSBGaWxlIjogIkFycXVpdm8gTUlESSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPcHRpb25zIjogIk9ww6fDtWVzIiwKKyAgICAgICAgIlByZXZpZXciOiAiVmlzdWFsaXphw6fDo28iLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlZpc3VhbGl6YXIgaW1hZ2VtIGVtIHVtYSBub3ZhIGphbmVsYSIsCisgICAgICAgICJTb3VyY2UgQ29kZSI6ICJDb2RpZ28gRm9udGUiLAorICAgICAgICAiV2l0aCBNb3ppbGxhLCB0aGUgYXBwbGV0IHdpbGwgbm90IGJlIHZpc2libGUgaW4gZWRpdG9yLCBidXQgb25seSBpbiBXZWIgcGFnZSBhZnRlciBzdWJtaXR0aW5nLiI6ICJDb20gTW96aWxsYSwgbyBhcHBsZXQgbsOjbyBlc3RhcsOhIHZpc8OtdmVsIG5vIGVkaXRvciwgc29tZW50ZSBuYSBQw6FnaW5hIFdlYiBkZXBvaXMgZG8gZW52aW8uIiwKKyAgICAgICAgIlpvb20iOiAiQW1wbGlhw6fDo28iLAorICAgICAgICAiWm9vbSA6IjogIkFtcGxpYcOnw6NvIDoiCisgICAgfSwKKyAgICAiT3BlcmEiOiB7CisgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIk8gYm90w6NvIENvbGFyIG7Do28gZnVuY2lvbmEgZW0gbmF2ZWdhZG9yZXMgYmFzZWFkbyBubyBNb3ppbGxhIChwb3IgcmF6w7VlcyB0w6ljbmljYXMgZGUgc2VndXJhbsOnYSkuIFByZXNzaW9uZSBDVFJMLVYgbm8gc2V1IHRlY2xhZG8gcGFyYSBjb2xhciBkaXJldGFtZW50ZS4iCisgICAgfSwKKyAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIKKyAgICB9LAorICAgICJQYXN0ZVRleHQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUGFzdGUgYXMgUGxhaW4gVGV4dCI6ICJDb2xhciB1bSB0ZXh0byBiw6FzaWNvIgorICAgIH0sCisgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkNvcHkiOiAiQ29waWFyIiwKKyAgICAgICAgIkRlbGV0ZSI6ICJEZWxldGFyIiwKKyAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICJEaXJldMOzcmlvIEFjaW1hIiwKKyAgICAgICAgIkZpbGUgTGlzdCI6ICJMaXN0YSBkZSBBcnF1aXZvcyIsCisgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiR2VyZW5jaWFkb3IgZGUgQXJxdWl2b3MiLAorICAgICAgICAiRmlsZW5hbWUiOiAiTm9tZSBkbyBhcnF1aXZvOiIsCisgICAgICAgICJJbnNlcnQiOiAiSW5zZXJpciIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiSW5zZXJpciBJbWFnZW0iLAorICAgICAgICAiTmV3IEZvbGRlciI6ICJOb3ZhIFBhc3RhIiwKKyAgICAgICAgIlNhdmUiOiAiU2FsdmFyIiwKKyAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICJWb2PDqiBwcmVjaXNhIHNlbGVjaW9uYXIgYWxndW0gdGV4dG8gYW50ZXMgZGUgY3JpYXIgdW0gbm92byBsaW5rLiIKKyAgICB9LAorICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgIkFUVFJJQlVURVMiOiAiQVRSSUJVVE9TIiwKKyAgICAgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCisgICAgICAgICJDb2xvcnMiOiAiQ29yZXMiLAorICAgICAgICAiRW50ZXIgdGhlIFRBRyB5b3Ugd2FudCB0byBpbnNlcnQiOiAiRW50cmUgY29tIGEgVEFHIHF1ZSBkZXNlamEgaW5zZXJpciIsCisgICAgICAgICJObyBDU1MgY2xhc3MgYXZhaWFibGUiOiAiTsOjbyBow6EgY2xhc3NlcyBDU1MgZGlzcG9uw612ZWwiLAorICAgICAgICAiT1BUSU9OUyI6ICJPUMOHw5VFUyIsCisgICAgICAgICJPayI6ICJPayIsCisgICAgICAgICJRdWljayBUYWcgRWRpdG9yIjogIkVkaXRvciBSw6FwaWRvIiwKKyAgICAgICAgIlRBR3MiOiAiVEFHcyIsCisgICAgICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICJIw6EgdW1hIG91IG1haXMgYXNwYXMgc2VtIGZlY2hhbWVudG8iLAorICAgICAgICAiVGhpcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIFRBRyI6ICJFc3NlIGF0cmlidXRvIGrDoSBleGlzdGUgbmEgVEFHIiwKKyAgICAgICAgIllvdSBoYXZlIHRvIHNlbGVjdCBzb21lIHRleHQiOiAiw4kgcHJlY2lzbyBzZWxlY2lvbmFyIGFsZ3VtIHRleHRvIgorICAgIH0sCisgICAgIlNhdmVTdWJtaXQiOiB7CisgICAgICAgICJSZWFkeSI6ICJQcm9udG8iLAorICAgICAgICAiU2F2ZSI6ICJTYWx2YXIiLAorICAgICAgICAiU2F2aW5nLi4uIjogIkdyYXZhbmRvLi4uIiwKKyAgICAgICAgImluIHByb2dyZXNzIjogImVtIHByb2Nlc3NvIgorICAgIH0sCisgICAgIlNldElkIjogeworICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkRlbGV0ZSI6ICJBcGFnYXIiLAorICAgICAgICAiSUQvTmFtZToiOiAiSUQvTm9tZToiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiU2V0IElEL05hbWUiOiAiRGVmaW5pciBJRC9Ob21lIiwKKyAgICAgICAgIlNldCBJZCBhbmQgTmFtZSI6ICJEZWZpbmlyIElkIGUgTm9tZSIsCisgICAgICAgICJTZXQgSWQvTmFtZSI6ICJEZWZpbmlyIElkL05vbWUiCisgICAgfSwKKyAgICAiU21hcnRSZXBsYWNlIjogeworICAgICAgICAiQ29udmVydCBhbGwgcXVvdGVzIGFuZCBkYXNoZXMgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQiOiAiQ29udmVydGVyIHRvZGFzIGFzIGNpdGHDp8O1ZXMgZSBow61mZW5zIG5vIGRvY3VtZW50byBhdHVhbCIsCisgICAgICAgICJFbmFibGUgYXV0b21hdGljIHJlcGxhY2VtZW50cyI6ICJBdGl2YXIgc3Vic3RpdHVpw6fDtWVzIGF1dG9tw6F0aWNhcyIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJTbWFydFJlcGxhY2UiOiAiU3Vic3RpdHVpw6fDo28gUsOhcGlkYSIsCisgICAgICAgICJTbWFydFJlcGxhY2UgU2V0dGluZ3MiOiAiQ29uZmlndXJhw6fDtWVzIGRhIFN1YnN0aXR1acOnw6NvIFLDoXBpZGEiCisgICAgfSwKKyAgICAiU3BlbGxDaGVja2VyIjogeworICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkRpY3Rpb25hcnkiOiAiRGljaW9uw6FyaW8iLAorICAgICAgICAiRmluaXNoZWQgbGlzdCBvZiBtaXNwZWxsZWQgd29yZHMiOiAiRmluYWxpemFkYSBsaXN0YSBkZSBwYWxhdnJhcyBkZXNjb25oZWNpZGFzIiwKKyAgICAgICAgIkhUTUxBcmVhIFNwZWxsIENoZWNrZXIiOiAiRGljaW9uw6FyaW8gSFRNTEFyZWEiLAorICAgICAgICAiSSB3aWxsIG9wZW4gaXQgaW4gYSBuZXcgcGFnZS4iOiAiU2Vyw6EgYWJlcnRvIGVtIHVtYSBub3ZhIHDDoWdpbmEiLAorICAgICAgICAiSWdub3JlIjogIklnbm9yYXIiLAorICAgICAgICAiSWdub3JlIGFsbCI6ICJJZ25vcmFyIHRvZGFzIiwKKyAgICAgICAgIkluZm8iOiAiSW5mb3JtYcOnw6NvIiwKKyAgICAgICAgIkxlYXJuIjogIkFwcmVuZGVyIiwKKyAgICAgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICJOZW5odW1hIHBhbGF2cmEgZGVzY29uaGVjaWRhIGZvaSBlbmNvbnRyYWRhIG5vIGRpY2lvbsOhcmlvIHNlbGVjaW9uYWRvIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk9yaWdpbmFsIHdvcmQiOiAiUGFsYXZyYSBPcmlnaW5hbCIsCisgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIlBvciBmYXZvciwgY29uZmlybWUgc2UgZGVzZWphIGFicmlyIGVzdGUgbGluayIsCisgICAgICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiUG9yIGZhdm9yLCBhZ3VhcmRlLiBDaGFtYW5kbyBkaWNpb27DoXJpby4iLAorICAgICAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAiUG9yIGZhdm9yLCBhZ3VhcmRlOiBtdWRhbmRvIGRpY2lvbsOhcmlvIHBhcmEiLAorICAgICAgICAiUmUtY2hlY2siOiAiUmUtdmVyaWZpY2FyIiwKKyAgICAgICAgIlJlcGxhY2UiOiAiU3Vic3RpdHVpciIsCisgICAgICAgICJSZXBsYWNlIGFsbCI6ICJTdWJzdGl0dWlyIHR1ZG8iLAorICAgICAgICAiUmVwbGFjZSB3aXRoIjogIlN1YnN0aXR1aXIgY29tIiwKKyAgICAgICAgIlJldmVydCI6ICJSZXZlcnRlciIsCisgICAgICAgICJTcGVsbCBDaGVja2VyIjogIkRpY2lvbsOhcmlvIiwKKyAgICAgICAgIlNwZWxsLWNoZWNrIjogIkRpY2lvbsOhcmlvIiwKKyAgICAgICAgIlN1Z2dlc3Rpb25zIjogIlN1Z2VzdMO1ZXMiLAorICAgICAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIklzc28gZGVzZmFyw6EgYXMgbXVkYW7Dp2FzIGUgZmluYWxpemFyw6EgbyBkaWNpb27DoXJpby4gUG9yIGZhdm9yLCBjb25maXJtZS4iLAorICAgICAgICAicGxpeiB3ZWl0IDstKSI6ICJQb3IgZmF2b3IsIGFndWFyZGUuLi4iCisgICAgfSwKKyAgICAiU3R5bGlzdCI6IHsKKyAgICAgICAgIlN0eWxlcyI6ICJFc3RpbG9zIgorICAgIH0sCisgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiQ2xlYW4gdXAgSFRNTCI6ICJMaW1wYXIgSFRNTCIsCisgICAgICAgICJHZW5lcmFsIHRpZHkgdXAgYW5kIGNvcnJlY3Rpb24gb2Ygc29tZSBwcm9ibGVtcy4iOiAiTGltcGVzYSBnZXJhbCBlIGNvcnJlw6fDo28gZGUgYWxndW5zIHByb2JsZW1hcy4iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUGxlYXNlIHNlbGVjdCBmcm9tIHRoZSBmb2xsb3dpbmcgY2xlYW5pbmcgb3B0aW9ucy4uLiI6ICJQb3IgZmF2b3IsIHNlbGVjaW9uZSB1bWEgZGFzIG9ww6fDtWVzIGRlIGxpbXBlc2EuLi4iLAorICAgICAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICJSZW1vdmVyIHRhbWFuaG8gZGUgZm9udGVzIHBlcnNvbmFsaXphZG9zIChmb250IHNpemUpLiIsCisgICAgICAgICJSZW1vdmUgY3VzdG9tIHRleHQgY29sb3JzLiI6ICJSZW1vdmVyIGNvcmVzIGRlIHRleHRvIHBlcnNvbmFsaXphZG9zIChmb250IGNvbG9yKS4iLAorICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0eXBlZmFjZXMgKGZvbnQgXCJzdHlsZXNcIikuIjogIlJlbW92ZXIgdGlwb3MgZGUgbGV0cmFzIHBlcnNvbmFsaXphZGFzIChmb250IFwic3R5bGVzXCIpLiIsCisgICAgICAgICJSZW1vdmUgbGFuZyBhdHRyaWJ1dGVzLiI6ICJSZW1vdmVyIGF0cmlidXRvcyBkZSBpZGlvbWEuIgorICAgIH0sCisgICAgIlRhYmxlT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgIkFsbCBmb3VyIHNpZGVzIjogInRvZG9zIG9zIHF1YXRybyBsYWRvcyIsCisgICAgICAgICJCb3JkZXJzIjogIkJvcmRhcyIsCisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiQ2FwdGlvbiI6ICJDYXB0YcOnw6NvIiwKKyAgICAgICAgIkNlbGwgUHJvcGVydGllcyI6ICJQcm9wcmllZGFkZXMgZGEgY8OpbHVsYSIsCisgICAgICAgICJDZWxscyBkb3duIjogIkPDqWx1bGFzIHBhcmEgYmFpeG8iLAorICAgICAgICAiQ2VsbHMgdG8gdGhlIHJpZ2h0LCBhbmQiOiAiQ8OpbHVsYXMgcGFyYSBkaXJlaXRhLCBlIiwKKyAgICAgICAgIkNvbHVtbnMiOiAiQ29sdW5hcyIsCisgICAgICAgICJEZWxldGUgY2VsbCI6ICJBcGFnYXIgY8OpbHVsYSIsCisgICAgICAgICJEZWxldGUgY29sdW1uIjogIkFwYWdhciBjb2x1bmEiLAorICAgICAgICAiRGVsZXRlIHJvdyI6ICJBcGFnYXIgbGluaGEiLAorICAgICAgICAiRGVzY3JpcHRpb24iOiAiRGVzY3Jpw6fDo28iLAorICAgICAgICAiRnJhbWUgYW5kIGJvcmRlcnMiOiAiRnJhbWVzIGUgYm9yZGFzIiwKKyAgICAgICAgIkZyYW1lcyI6ICJGcmFtZXMiLAorICAgICAgICAiSW5zZXJ0IGNlbGwgYWZ0ZXIiOiAiSW5zZXJpciBjw6lsdWxhIGFudGVzIiwKKyAgICAgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICJJbnNlcmlyIGPDqWx1bGEgZGVwb2lzIiwKKyAgICAgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAiSW5zZXJpciBjb2x1bmEgYW50ZXMiLAorICAgICAgICAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiOiAiSW5zZXJpciBjb2x1bmEgZGVwb2lzIiwKKyAgICAgICAgIkluc2VydCByb3cgYWZ0ZXIiOiAiSW5zZXJpciBsaW5oYSBkZXBvaXMiLAorICAgICAgICAiSW5zZXJ0IHJvdyBiZWZvcmUiOiAiSW5zZXJpciBsaW5oYSBhbnRlcyIsCisgICAgICAgICJNZXJnZSBDZWxscyI6ICJNZXNjbGFyIEPDqWx1bGFzIiwKKyAgICAgICAgIk1lcmdlIGN1cnJlbnQgY2VsbCB3aXRoOiI6ICJNZXNjbGFyIGPDqWx1bGEgYXR1YWwgY29tOiIsCisgICAgICAgICJObyBydWxlcyI6ICJTZW0gcmVncmFzIiwKKyAgICAgICAgIk5vIHNpZGVzIjogIlNlbSBsYWRvcyIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQYWRkaW5nIjogIkVzcGHDp28gaW50ZXJubyIsCisgICAgICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiUG9yIGZhdm9yLCBjbGlxdWUgZW0gYWxndW1hIGPDqWx1bGEiLAorICAgICAgICAiUm93IFByb3BlcnRpZXMiOiAiUHJvcHJpZWRhZGVzIGRhIExpbmhhIiwKKyAgICAgICAgIlJvd3MiOiAiTGluaGFzIiwKKyAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAiQXMgUmVncmFzIGFwYXJlY2VyYW0gZW50cmUgdG9kYXMgYXMgbGluaGFzIGUgY29sdW5hcyIsCisgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGNvbHVtbnMgb25seSI6ICJSZWdyYXMgYXBhcmVjZXJhbSBzb21lbnRlIG5hcyBjb2x1bmFzIiwKKyAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogIlJlZ3JhcyBhcGFyZWNlcmFtIHNvbWVudGUgbmFzIGxpbmhhcyIsCisgICAgICAgICJTcGFjaW5nIjogIkVzcGHDp2FtZW50byIsCisgICAgICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogIkVzcGHDp2FtZW50b3MiLAorICAgICAgICAiU3BsaXQgY29sdW1uIjogIlNlcGFyYXIgY29sdW5hcyIsCisgICAgICAgICJTcGxpdCByb3ciOiAiU2VwYXJhciBsaW5oYXMiLAorICAgICAgICAiU3VtbWFyeSI6ICJTdW3DoXJpbyIsCisgICAgICAgICJUYWJsZSBQcm9wZXJ0aWVzIjogIlByb3ByaWVkYWRlcyBkYSBUYWJlbGEiLAorICAgICAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAiU29tZW50ZSBuYSBwYXJ0ZSBpbmZlcmlvciIsCisgICAgICAgICJUaGUgbGVmdC1oYW5kIHNpZGUgb25seSI6ICJTb21lbnRlIG5hIHBhcnRlIGVzcXVlcmRhIiwKKyAgICAgICAgIlRoZSByaWdodCBhbmQgbGVmdCBzaWRlcyBvbmx5IjogIlNvbWVudGUgbmFzIHBhcnRlIGRpcmVpdGEgZSBlc3F1ZXJkYSIsCisgICAgICAgICJUaGUgcmlnaHQtaGFuZCBzaWRlIG9ubHkiOiAiU29tZW50ZSBuYSBwYXJ0ZSBkaXJlaXRhIiwKKyAgICAgICAgIlRoZSB0b3AgYW5kIGJvdHRvbSBzaWRlcyBvbmx5IjogIlNvbWVudGUgbmEgcGFydGUgaW5mZXJpb3IgZSBzdXBlcmlvciIsCisgICAgICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICJTb21lbnRlIG5hIHBhcnRlIHN1cGVyaW9yIiwKKyAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiI6ICJYaW5oYSByZWN1c2Etc2UgYSBhcGFnYXIgYSDDumx0aW1hIGPDqWx1bGEgbmEgbGluaGEiLAorICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICJYaW5oYSByZWN1c2Etc2UgYSBhcGFnYXIgYSDDumx0aW1hIGNvbHVuYSBkYSB0YWJlbGEiLAorICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3Qgcm93IGluIHRhYmxlLiI6ICJYaW5oYSByZWN1c2Etc2UgYSBhcGFnYXIgYSDDumx0aW1hIGxpbmhhIGRhIHRhYmVsYSIsCisgICAgICAgICJwaXhlbHMiOiAiUGl4ZWwiCisgICAgfSwKKyAgICAiVGVtcGxhdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICAgICAiSW5zZXJ0IHRlbXBsYXRlIjogIkluc2VyaXIgbW9kZWxvIgorICAgIH0sCisgICAgIlVuRm9ybWF0IjogeworICAgICAgICAiQWxsIjogIlR1ZG8iLAorICAgICAgICAiQWxsIEhUTUw6IjogIlRvZG8gSFRNTDoiLAorICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkNsZWFuaW5nIEFyZWEiOiAiTGltcGFuZG8gw4FyZWEiLAorICAgICAgICAiQ2xlYW5pbmcgb3B0aW9ucyI6ICJPcMOnw7VlcyBkZSBsaW1wZXNhIiwKKyAgICAgICAgIkZvcm1hdHRpbmc6IjogIkZvcm1hdGHDp8OjbzoiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUGFnZSBDbGVhbmVyIjogIkxpbXBlc2EgZGUgcMOhZ2luYSIsCisgICAgICAgICJTZWxlY3Qgd2hpY2ggdHlwZXMgb2YgZm9ybWF0dGluZyB5b3Ugd291bGQgbGlrZSB0byByZW1vdmUuIjogIlNlbGVjaW9uZSBvIHRpcG8gZGUgZm9ybWF0YcOnw6NvIHF1ZSBkZXNlamEgcmVtb3Zlci4iLAorICAgICAgICAiU2VsZWN0aW9uIjogIlNlbGXDp8OjbyIKKyAgICB9LAorICAgICJYaW5oYSI6IHsKKyAgICAgICAgIiYjODIxMjsgZm9udCAmIzgyMTI7IjogIiYjODIxMjsgZm9udGUgJiM4MjEyOyIsCisgICAgICAgICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiYjODIxMjsgZm9ybWF0byAmIzgyMTI7IiwKKyAgICAgICAgIiYjODIxMjsgc2l6ZSAmIzgyMTI7IjogIiYjODIxMjsgdGFtYW5obyAmIzgyMTI7IiwKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIlNvYnJlIGVzdGUgZWRpdG9yIiwKKyAgICAgICAgIkFkZHJlc3MiOiAiRW5kZXJlw6dvIiwKKyAgICAgICAgIkJhY2tncm91bmQgQ29sb3IiOiAiQ29yIGRvIEZ1bmRvIiwKKyAgICAgICAgIkJvbGQiOiAiTmVncml0byIsCisgICAgICAgICJCdWxsZXRlZCBMaXN0IjogIkxpc3RhIE1hcmNhZG9yZXMiLAorICAgICAgICAiQ1RSTC0wICh6ZXJvKSI6ICJDVFJMLTAgKHplcm8pIiwKKyAgICAgICAgIkNUUkwtMSAuLiBDVFJMLTYiOiAiQ1RSTC0xIC4uIENUUkwtNiIsCisgICAgICAgICJDVFJMLUEiOiAiQ1RSTC1BIiwKKyAgICAgICAgIkNUUkwtQiI6ICJDVFJMLUIiLAorICAgICAgICAiQ1RSTC1DIjogIkNUUkwtQyIsCisgICAgICAgICJDVFJMLUUiOiAiQ1RSTC1FIiwKKyAgICAgICAgIkNUUkwtSSI6ICJDVFJMLUkiLAorICAgICAgICAiQ1RSTC1KIjogIkNUUkwtSiIsCisgICAgICAgICJDVFJMLUwiOiAiQ1RSTC1MIiwKKyAgICAgICAgIkNUUkwtTiI6ICJDVFJMLU4iLAorICAgICAgICAiQ1RSTC1SIjogIkNUUkwtUiIsCisgICAgICAgICJDVFJMLVMiOiAiQ1RSTC1TIiwKKyAgICAgICAgIkNUUkwtVSI6ICJDVFJMLVUiLAorICAgICAgICAiQ1RSTC1WIjogIkNUUkwtViIsCisgICAgICAgICJDVFJMLVgiOiAiQ1RSTC1YIiwKKyAgICAgICAgIkNUUkwtWSI6ICJDVFJMLVkiLAorICAgICAgICAiQ1RSTC1aIjogIkNUUkwtWiIsCisgICAgICAgICJDbGVhbiBjb250ZW50IHBhc3RlZCBmcm9tIFdvcmQiOiAiTGltcGFyIGNvbnRlw7pkbyBjb3BpYWRvIGRvIFdvcmQiLAorICAgICAgICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiTGltcGFyIGVzcGVjaWZpY2HDp8O1ZXMgZGUgZm9udGVzIGlubGluZSIsCisgICAgICAgICJDbGVhciBNU09mZmljZSB0YWdzIjogIkxpbXBhciB0YWdzIGRvIE1TIE9mZmljZSIsCisgICAgICAgICJDbG9zZSI6ICJGZWNoYXIiLAorICAgICAgICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICJDb25zdHJ1aW5kbyBvYmpldG8iLAorICAgICAgICAiQ29weSBzZWxlY3Rpb24iOiAiQ29waWFyIHNlbGXDp8OjbyIsCisgICAgICAgICJDcmVhdGUgU3RhdHVzYmFyIjogIkNyaWFyIGJhcnJhIGRlIGluZm9ybWHDp8OjbyAoc3RhdHVzYmFyKSIsCisgICAgICAgICJDcmVhdGUgVG9vbGJhciI6ICJDcmlhciBCYXJyYSBkZSBGZXJyYW1lbnRhcyIsCisgICAgICAgICJDdXJyZW50IHN0eWxlIjogIkVzdGlsbyBBdHVhbCIsCisgICAgICAgICJDdXQgc2VsZWN0aW9uIjogIlJlY29ydGFyIHNlbGXDp8OjbyIsCisgICAgICAgICJEZWNyZWFzZSBJbmRlbnQiOiAiRGltaW51aXIgSW5kZW50YcOnw6NvIiwKKyAgICAgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIkRhIGVzcXVlcmRhIHBhcmEgZGlyZWl0YSIsCisgICAgICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJEYSBkaXJlaXRhIHBhcmEgZXNxdWVyZGEiLAorICAgICAgICAiRU5URVIiOiAiRU5URVIiLAorICAgICAgICAiRWRpdG9yIEhlbHAiOiAiQWp1ZGEgZG8gRWRpdG9yIiwKKyAgICAgICAgIkZpbmlzaGluZyI6ICJUZXJtaW5hbmRvIiwKKyAgICAgICAgIkZvbnQgQ29sb3IiOiAiQ29yIGRhIEZvbnRlIiwKKyAgICAgICAgIkZvcm1hdHRlZCI6ICJGb3JtYXRhZG8iLAorICAgICAgICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIkdlcmFyIMOBcmVhIGRlIFRyYWJhbGhvIGRvIFhpbmhhIiwKKyAgICAgICAgIkhlYWRpbmcgMSI6ICJUw610dWxvIDEiLAorICAgICAgICAiSGVhZGluZyAyIjogIlTDrXR1bG8gMiIsCisgICAgICAgICJIZWFkaW5nIDMiOiAiVMOtdHVsbyAzIiwKKyAgICAgICAgIkhlYWRpbmcgNCI6ICJUw610dWxvIDQiLAorICAgICAgICAiSGVhZGluZyA1IjogIlTDrXR1bG8gNSIsCisgICAgICAgICJIZWFkaW5nIDYiOiAiVMOtdHVsbyA2IiwKKyAgICAgICAgIkhlYWRpbmdzIjogIlTDrXR1bG9zIiwKKyAgICAgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIkFqdWRhIC0gVXNhbmRvIG8gZWRpdG9yIiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICJMaW5oYSBIb3Jpem9udGFsIiwKKyAgICAgICAgIkluY3JlYXNlIEluZGVudCI6ICJBdW1lbnRhciBJbmRlbnRhw6fDo28iLAorICAgICAgICAiSW5pdCBlZGl0b3Igc2l6ZSI6ICJJbmljaWFyIHRhbWFuaG8gZG8gZWRpdG9yIiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICJJbnNlcmlyIFRhYmVsYSIsCisgICAgICAgICJJbnNlcnQgV2ViIExpbmsiOiAiSW5zZXJpciBMaW5rIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiSW5zZXJpci9Nb2RpZmljYXIgSW1hZ2VtIiwKKyAgICAgICAgIkluc2VydC9PdmVyd3JpdGUiOiAiSW5zZXJpci9Tb2JyZXNjcmV2ZXIiLAorICAgICAgICAiSXRhbGljIjogIkl0w6FsaWNvIiwKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogIkp1c3RpZmljYXIgQ2VudHJhbGl6YWRvIiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICJKdXN0aWZpY2FyIENvbXBsZXRhbWVudGUiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIkp1c3RpZmljYXIgw6AgRXNxdWVyZGEiLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICJKdXN0aWZpY2FyIMOgIERpcmVpdGEiLAorICAgICAgICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogIkF0YWxob3MgZGUgVGVjbGFkbyIsCisgICAgICAgICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiQ2FycmVnYW1lbnRvIGVtIHByb2Nlc3NvLiBQb3IgZmF2b3IsIGFndWFyZGUhIiwKKyAgICAgICAgIk5vcm1hbCI6ICJOb3JtYWwiLAorICAgICAgICAiT3JkZXJlZCBMaXN0IjogIkxpc3RhIE51bWVyYWRhIiwKKyAgICAgICAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIkNvbGFyIGRhIMOBcmVhIGRlIFRyYW5zZmVyw6puY2lhIiwKKyAgICAgICAgIlBhdGgiOiAiQ2FtaW5obyIsCisgICAgICAgICJQcmludCBkb2N1bWVudCI6ICJJbXByaW1pciBkb2N1bWVudG8iLAorICAgICAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiUmVmYXplciBzdWEgw7psdGltYSBhw6fDo28iLAorICAgICAgICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAiUmVtb3ZlciBmb3JtYXRhw6fDo28iLAorICAgICAgICAiU0hJRlQtRU5URVIiOiAiU0hJRlQtRU5URVIiLAorICAgICAgICAiU2F2ZSBhcyI6ICJTYWx2YXIgY29tbyIsCisgICAgICAgICJTZWxlY3QgQ29sb3IiOiAiU2VsZWNpb25hciBjb3IiLAorICAgICAgICAiU2VsZWN0IGFsbCI6ICJTZWxlY2lvbmFyIHR1ZG8iLAorICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiRGVmaW5pciBmb3JtYXRvIHBhcmEgbyBwYXLDoWdyYWZvIiwKKyAgICAgICAgIlNwbGl0IEJsb2NrIjogIkRpdmlkaXIgQmxvY28iLAorICAgICAgICAiU3RyaWtldGhyb3VnaCI6ICJUYWNoYWRvIiwKKyAgICAgICAgIlN1YnNjcmlwdCI6ICJTdWJzY3JpdG8iLAorICAgICAgICAiU3VwZXJzY3JpcHQiOiAiU29icmVzY3JpdG8iLAorICAgICAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogIkVzdGUgZWRpdG9yIGZvcm5lY2UgYSBzZWd1aW50ZSBjb21iaW5hw6fDo28gZGUgdGVjbGFzOiIsCisgICAgICAgICJUb2dnbGUgQm9yZGVycyI6ICJNdWRhciBCb3JkYXMiLAorICAgICAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIlZlciBDw7NkaWdvLUZvbnRlIiwKKyAgICAgICAgIlVuZGVybGluZSI6ICJTdWJsaW5oYWRvIiwKKyAgICAgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkRlc2ZhemVyIHN1YSDDumx0aW1hIGHDp8OjbyIsCisgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIkRlc2VqYSBsaW1wYXIgYXMgY29yZXMgZGUgZm9udGUiLAorICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiRGVzZWphIGxpbXBhciBvcyB0YW1hbmhvcyBkZSBmb250ZSIsCisgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiRGVzZWphIGxpbXBhciBvcyB0aXBvcyBkZSBmb250ZSIsCisgICAgICAgICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiVm9jw6ogZXN0w6Egbm8gTU9ETyBURVhUTy4gIFVzZSBvIGJvdMOjbyBbPD5dIHBhcmEgbXVkYXIgcGFyYSBvIE1PRE8gVklTVUFMIChXWVNJV1lHKSIsCisgICAgICAgICJpbnNlcnQgbGluZWJyZWFrIjogImluc2VyaXIgcXVlYnJhIGRlIGxpbmhhIiwKKyAgICAgICAgIm5ldyBwYXJhZ3JhcGgiOiAibm92byBwYXLDoWdyYWZvIgorICAgIH0sCisgICAgIl9fTkVXX1RSQU5TTEFUSU9OU19fIjogeworICAgICAgICAiQ3JlYXRlTGluayI6IHsKKyAgICAgICAgICAgICJPdGhlciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEaWFsb2dzIjogeworICAgICAgICAgICAgIlNvbWUgVGV4dCBIZXJlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVxdWF0aW9uIjogeworICAgICAgICAgICAgIiE9IjogIiIsCisgICAgICAgICAgICAiIWluIjogIiIsCisgICAgICAgICAgICAiJmd0Oy0iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiJmx0O3gmZ3Q7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAhYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYC5gICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAyYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDNgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA1YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDZgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgN2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA4YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgZWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7Jm5ic3A7YDFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Arezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLTpcXCBgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC17Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BDYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Bjb3NgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGxuYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BwaWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHNpbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGFuYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0aW1lc2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICInK2Zvcm11bGErJyI6ICIiLAorICAgICAgICAgICAgIigobiksKGspKSI6ICIiLAorICAgICAgICAgICAgIih4KzEpLyh4LTEpIjogIiIsCisgICAgICAgICAgICAiKiI6ICIiLAorICAgICAgICAgICAgIioqIjogIiIsCisgICAgICAgICAgICAiKy0iOiAiIiwKKyAgICAgICAgICAgICItJmd0OyI6ICIiLAorICAgICAgICAgICAgIi0mbHQ7IjogIiIsCisgICAgICAgICAgICAiLToiOiAiIiwKKyAgICAgICAgICAgICItPSI6ICIiLAorICAgICAgICAgICAgIi8vIjogIiIsCisgICAgICAgICAgICAiL18iOiAiIiwKKyAgICAgICAgICAgICI6LiI6ICIiLAorICAgICAgICAgICAgIj0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiQCI6ICIiLAorICAgICAgICAgICAgIltbYSxiXSxbYyxkXV0iOiAiIiwKKyAgICAgICAgICAgICJcXFxcIjogIiIsCisgICAgICAgICAgICAiXFxuQ2xpY2sgaW4gdGhlIGJveCB0byB1c2UgeW91ciBrZXlib2FyZCBvciB1c2UgdGhlIGJ1dHRvbnNcXG4iOiAiIiwKKyAgICAgICAgICAgICJeXiI6ICIiLAorICAgICAgICAgICAgIl5eXiI6ICIiLAorICAgICAgICAgICAgIl9ffCI6ICIiLAorICAgICAgICAgICAgIl98XyI6ICIiLAorICAgICAgICAgICAgImAhPWAiOiAiIiwKKyAgICAgICAgICAgICJgIWluYCI6ICIiLAorICAgICAgICAgICAgImAmYW5kO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmNhcDtgIjogIiIsCisgICAgICAgICAgICAiYCZjdXA7YCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7LWAiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDt4Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJm9yO2AiOiAiIiwKKyAgICAgICAgICAgICJgKChuKSwoaykpYCI6ICIiLAorICAgICAgICAgICAgImAoeCsxKS8oeC0xKWAiOiAiIiwKKyAgICAgICAgICAgICJgKipgIjogIiIsCisgICAgICAgICAgICAiYCpgIjogIiIsCisgICAgICAgICAgICAiYCstYCI6ICIiLAorICAgICAgICAgICAgImAtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLSZsdDtgIjogIiIsCisgICAgICAgICAgICAiYC06YCI6ICIiLAorICAgICAgICAgICAgImAtPWAiOiAiIiwKKyAgICAgICAgICAgICJgLy9gIjogIiIsCisgICAgICAgICAgICAiYC9fYCI6ICIiLAorICAgICAgICAgICAgImA6LmAiOiAiIiwKKyAgICAgICAgICAgICJgPSZndDtgIjogIiIsCisgICAgICAgICAgICAiYEBgIjogIiIsCisgICAgICAgICAgICAiYFtbYSxiXSxbYyxkXV1gIjogIiIsCisgICAgICAgICAgICAiYFxcXFxgIjogIiIsCisgICAgICAgICAgICAiYF9ffGAiOiAiIiwKKyAgICAgICAgICAgICJgX3xfYCI6ICIiLAorICAgICAgICAgICAgImBBQWAiOiAiIiwKKyAgICAgICAgICAgICJgYWxlcGhgIjogIiIsCisgICAgICAgICAgICAiYGFscGhhYCI6ICIiLAorICAgICAgICAgICAgImBhbmRgIjogIiIsCisgICAgICAgICAgICAiYGJhcmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgQ0NgIjogIiIsCisgICAgICAgICAgICAiYGNjYWAiOiAiIiwKKyAgICAgICAgICAgICJgY2hpYCI6ICIiLAorICAgICAgICAgICAgImBkYXJyYCI6ICIiLAorICAgICAgICAgICAgImBkZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsYCI6ICIiLAorICAgICAgICAgICAgImBEZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRpYW1vbmRgIjogIiIsCisgICAgICAgICAgICAiYGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGR5L2R4YCI6ICIiLAorICAgICAgICAgICAgImBFRWAiOiAiIiwKKyAgICAgICAgICAgICJgZXBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgZXRhYCI6ICIiLAorICAgICAgICAgICAgImBmcmFgIjogIiIsCisgICAgICAgICAgICAiYEdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBnYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ3JhZGAiOiAiIiwKKyAgICAgICAgICAgICJgaGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaGF0YWAiOiAiIiwKKyAgICAgICAgICAgICJgaWZgIjogIiIsCisgICAgICAgICAgICAiYGluYCI6ICIiLAorICAgICAgICAgICAgImBpbnRgIjogIiIsCisgICAgICAgICAgICAiYGlvdGFgIjogIiIsCisgICAgICAgICAgICAiYGthcHBhYCI6ICIiLAorICAgICAgICAgICAgImBsYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYExhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGltXyh4LSZndDtvbylgIjogIiIsCisgICAgICAgICAgICAiYGxvZ2AiOiAiIiwKKyAgICAgICAgICAgICJgbXVgIjogIiIsCisgICAgICAgICAgICAiYG5uYCI6ICIiLAorICAgICAgICAgICAgImBOTmAiOiAiIiwKKyAgICAgICAgICAgICJgbm90YCI6ICIiLAorICAgICAgICAgICAgImBudWAiOiAiIiwKKyAgICAgICAgICAgICJgbytgIjogIiIsCisgICAgICAgICAgICAiYG8uYCI6ICIiLAorICAgICAgICAgICAgImBPL2AiOiAiIiwKKyAgICAgICAgICAgICJgb2ludGAiOiAiIiwKKyAgICAgICAgICAgICJgb21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYE9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBvb2AiOiAiIiwKKyAgICAgICAgICAgICJgb3JgIjogIiIsCisgICAgICAgICAgICAiYG94YCI6ICIiLAorICAgICAgICAgICAgImBQaGlgIjogIiIsCisgICAgICAgICAgICAiYHBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgcGlgIjogIiIsCisgICAgICAgICAgICAiYFBpYCI6ICIiLAorICAgICAgICAgICAgImBwcm9kYCI6ICIiLAorICAgICAgICAgICAgImBwcm9wYCI6ICIiLAorICAgICAgICAgICAgImBQc2lgIjogIiIsCisgICAgICAgICAgICAiYHBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgUVFgIjogIiIsCisgICAgICAgICAgICAiYHF1YWRgIjogIiIsCisgICAgICAgICAgICAiYHJBcnJgIjogIiIsCisgICAgICAgICAgICAiYHJob2AiOiAiIiwKKyAgICAgICAgICAgICJgcm9vdChuKSh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgUlJgIjogIiIsCisgICAgICAgICAgICAiYHNmYWAiOiAiIiwKKyAgICAgICAgICAgICJgc2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYFNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzcXJ0KHgpYCI6ICIiLAorICAgICAgICAgICAgImBzcXVhcmVgIjogIiIsCisgICAgICAgICAgICAiYHN0YWNrcmVsKC0mZ3Q7KSgrKWAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViYCI6ICIiLAorICAgICAgICAgICAgImBzdWJlYCI6ICIiLAorICAgICAgICAgICAgImBzdW1gIjogIiIsCisgICAgICAgICAgICAiYHN1cGAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwZWAiOiAiIiwKKyAgICAgICAgICAgICJgdGF1YCI6ICIiLAorICAgICAgICAgICAgImB0aGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgVGhldGFgIjogIiIsCisgICAgICAgICAgICAiYFRUYCI6ICIiLAorICAgICAgICAgICAgImB0dGFgIjogIiIsCisgICAgICAgICAgICAiYHVhcnJgIjogIiIsCisgICAgICAgICAgICAiYHVsYWAiOiAiIiwKKyAgICAgICAgICAgICJgdXBzaWxvbmAiOiAiIiwKKyAgICAgICAgICAgICJgdXVgIjogIiIsCisgICAgICAgICAgICAiYHZlY2FgIjogIiIsCisgICAgICAgICAgICAiYHZ2YCI6ICIiLAorICAgICAgICAgICAgImB4XyhtbilgIjogIiIsCisgICAgICAgICAgICAiYHhpYCI6ICIiLAorICAgICAgICAgICAgImBYaWAiOiAiIiwKKyAgICAgICAgICAgICJgeHhgIjogIiIsCisgICAgICAgICAgICAiYHpldGFgIjogIiIsCisgICAgICAgICAgICAiYFpaYCI6ICIiLAorICAgICAgICAgICAgImB8LSZndDtgIjogIiIsCisgICAgICAgICAgICAiYHwtLWAiOiAiIiwKKyAgICAgICAgICAgICJgfD09YCI6ICIiLAorICAgICAgICAgICAgImB8X19gIjogIiIsCisgICAgICAgICAgICAiYHx+YCI6ICIiLAorICAgICAgICAgICAgImB+PWAiOiAiIiwKKyAgICAgICAgICAgICJgfnxgIjogIiIsCisgICAgICAgICAgICAiYH5+YCI6ICIiLAorICAgICAgICAgICAgIkFBIjogIiIsCisgICAgICAgICAgICAiYWxlcGgiOiAiIiwKKyAgICAgICAgICAgICJhbHBoYSI6ICIiLAorICAgICAgICAgICAgImFuZCI6ICIiLAorICAgICAgICAgICAgImJhcmEiOiAiIiwKKyAgICAgICAgICAgICJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiYmJhIjogIiIsCisgICAgICAgICAgICAiYmV0YSI6ICIiLAorICAgICAgICAgICAgIkNDIjogIiIsCisgICAgICAgICAgICAiY2NhIjogIiIsCisgICAgICAgICAgICAiY2hpIjogIiIsCisgICAgICAgICAgICAiZGFyciI6ICIiLAorICAgICAgICAgICAgImRkb3RhIjogIiIsCisgICAgICAgICAgICAiZGVsIjogIiIsCisgICAgICAgICAgICAiZGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJEZWx0YSI6ICIiLAorICAgICAgICAgICAgImRpYW1vbmQiOiAiIiwKKyAgICAgICAgICAgICJkb3RhIjogIiIsCisgICAgICAgICAgICAiZHkvZHgiOiAiIiwKKyAgICAgICAgICAgICJFRSI6ICIiLAorICAgICAgICAgICAgImVwc2kiOiAiIiwKKyAgICAgICAgICAgICJldGEiOiAiIiwKKyAgICAgICAgICAgICJmcmEiOiAiIiwKKyAgICAgICAgICAgICJnYW1tYSI6ICIiLAorICAgICAgICAgICAgIkdhbW1hIjogIiIsCisgICAgICAgICAgICAiZ3JhZCI6ICIiLAorICAgICAgICAgICAgImhhcnIiOiAiIiwKKyAgICAgICAgICAgICJoQXJyIjogIiIsCisgICAgICAgICAgICAiaGF0YSI6ICIiLAorICAgICAgICAgICAgImlmIjogIiIsCisgICAgICAgICAgICAiaW4iOiAiIiwKKyAgICAgICAgICAgICJpbnQiOiAiIiwKKyAgICAgICAgICAgICJpbnRfYV5iZih4KWR4IjogIiIsCisgICAgICAgICAgICAiaW90YSI6ICIiLAorICAgICAgICAgICAgImthcHBhIjogIiIsCisgICAgICAgICAgICAibGFtYmRhIjogIiIsCisgICAgICAgICAgICAiTGFtYmRhIjogIiIsCisgICAgICAgICAgICAibGFyciI6ICIiLAorICAgICAgICAgICAgImxBcnIiOiAiIiwKKyAgICAgICAgICAgICJsaW1fKHgtJmd0O29vKSI6ICIiLAorICAgICAgICAgICAgIm11IjogIiIsCisgICAgICAgICAgICAibm4iOiAiIiwKKyAgICAgICAgICAgICJOTiI6ICIiLAorICAgICAgICAgICAgIm5ubiI6ICIiLAorICAgICAgICAgICAgIm5vdCI6ICIiLAorICAgICAgICAgICAgIm51IjogIiIsCisgICAgICAgICAgICAibysiOiAiIiwKKyAgICAgICAgICAgICJvLiI6ICIiLAorICAgICAgICAgICAgIk8vIjogIiIsCisgICAgICAgICAgICAib2ludCI6ICIiLAorICAgICAgICAgICAgIk9tZWdhIjogIiIsCisgICAgICAgICAgICAib21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJvbyI6ICIiLAorICAgICAgICAgICAgIm9yIjogIiIsCisgICAgICAgICAgICAib3giOiAiIiwKKyAgICAgICAgICAgICJwaGkiOiAiIiwKKyAgICAgICAgICAgICJQaGkiOiAiIiwKKyAgICAgICAgICAgICJwaSI6ICIiLAorICAgICAgICAgICAgIlBpIjogIiIsCisgICAgICAgICAgICAicHJvZCI6ICIiLAorICAgICAgICAgICAgInByb3AiOiAiIiwKKyAgICAgICAgICAgICJQc2kiOiAiIiwKKyAgICAgICAgICAgICJwc2kiOiAiIiwKKyAgICAgICAgICAgICJRUSI6ICIiLAorICAgICAgICAgICAgInF1YWQiOiAiIiwKKyAgICAgICAgICAgICJyQXJyIjogIiIsCisgICAgICAgICAgICAicmhvIjogIiIsCisgICAgICAgICAgICAicm9vdChuKSh4KSI6ICIiLAorICAgICAgICAgICAgIlJSIjogIiIsCisgICAgICAgICAgICAic2ZhIjogIiIsCisgICAgICAgICAgICAic2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJTaWdtYSI6ICIiLAorICAgICAgICAgICAgInNxcnQoeCkiOiAiIiwKKyAgICAgICAgICAgICJzcXVhcmUiOiAiIiwKKyAgICAgICAgICAgICJzdGFja3JlbCgtJmd0OykoKykiOiAiIiwKKyAgICAgICAgICAgICJzdWIiOiAiIiwKKyAgICAgICAgICAgICJzdWJlIjogIiIsCisgICAgICAgICAgICAic3VtIjogIiIsCisgICAgICAgICAgICAic3VtXyhuPTEpXm9vIjogIiIsCisgICAgICAgICAgICAic3VwIjogIiIsCisgICAgICAgICAgICAic3VwZSI6ICIiLAorICAgICAgICAgICAgInRhdSI6ICIiLAorICAgICAgICAgICAgInRoZXRhIjogIiIsCisgICAgICAgICAgICAiVGhldGEiOiAiIiwKKyAgICAgICAgICAgICJUVCI6ICIiLAorICAgICAgICAgICAgInR0YSI6ICIiLAorICAgICAgICAgICAgInVhcnIiOiAiIiwKKyAgICAgICAgICAgICJ1bGEiOiAiIiwKKyAgICAgICAgICAgICJ1cHNpbG9uIjogIiIsCisgICAgICAgICAgICAidXUiOiAiIiwKKyAgICAgICAgICAgICJ1dXUiOiAiIiwKKyAgICAgICAgICAgICJ2ZWNhIjogIiIsCisgICAgICAgICAgICAidnYiOiAiIiwKKyAgICAgICAgICAgICJ2dnYiOiAiIiwKKyAgICAgICAgICAgICJ4XihtK24pIjogIiIsCisgICAgICAgICAgICAieF8obW4pIjogIiIsCisgICAgICAgICAgICAieGkiOiAiIiwKKyAgICAgICAgICAgICJYaSI6ICIiLAorICAgICAgICAgICAgInh4IjogIiIsCisgICAgICAgICAgICAiemV0YSI6ICIiLAorICAgICAgICAgICAgIlpaIjogIiIsCisgICAgICAgICAgICAifC0mZ3Q7IjogIiIsCisgICAgICAgICAgICAifC0tIjogIiIsCisgICAgICAgICAgICAifD09IjogIiIsCisgICAgICAgICAgICAifF9fIjogIiIsCisgICAgICAgICAgICAifH4iOiAiIiwKKyAgICAgICAgICAgICJ+PSI6ICIiLAorICAgICAgICAgICAgIn58IjogIiIsCisgICAgICAgICAgICAifn4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmFuY3lTZWxlY3RzIjogeworICAgICAgICAgICAgIicrb3B0LnRleHQrJyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGaW5kUmVwbGFjZSI6IHsKKyAgICAgICAgICAgICInO1xyXG4gIHZhciB0YWdjID0gJyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGb3JtT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJNZXNzYWdlIFNlbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgU2VsZWN0Li4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1zIjogeworICAgICAgICAgICAgIidvbkNsaWNrJz0iOiAiIiwKKyAgICAgICAgICAgICJHZXQiOiAiIiwKKyAgICAgICAgICAgICJwcmUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRnVsbFBhZ2UiOiB7CisgICAgICAgICAgICAiLi4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkdlY2tvIjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJIb3Jpem9udGFsUnVsZSI6IHsKKyAgICAgICAgICAgICImI3gwMGQ3OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbmxpbmVTdHlsZXIiOiB7CisgICAgICAgICAgICAiLSI6ICI8PEVxdWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IGZvb3Rub3RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IE5vdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGFnZWJyZWFrIjogeworICAgICAgICAgICAgIlBhZ2UgQnJlYWsiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgICAgICJcXG4gIFRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nXFxuIjogIiIsCisgICAgICAgICAgICAiTGluazEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMiI6ICIiLAorICAgICAgICAgICAgIkxpbmszIjogIiIsCisgICAgICAgICAgICAiTGluazQiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgICAgICJBbGwgQ2F0ZWdvcmllcyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyBIVE1MIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIHRlbXBsYXRlIHZhcmlhYmxlIjogIiIsCisgICAgICAgICAgICAiT25seSBzZWFyY2ggd29yZCBiZWdpbm5pbmciOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0VGFibGUiOiB7CisgICAgICAgICAgICAiQ2FwdGlvbiBmb3IgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiTGF5b3UiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSBvZiB0aGUgYm9yZGVyIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAiIgorICAgICAgICB9LAorICAgICAgICAiTGFuZ01hcmtzIjogeworICAgICAgICAgICAgIicsICciOiAiIgorICAgICAgICB9LAorICAgICAgICAiTGlua2VyIjogeworICAgICAgICAgICAgIihweCkiOiAiIiwKKyAgICAgICAgICAgICJQb3B1cFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlNob3dzIE9uIEhvdmVyIjogIiIsCisgICAgICAgICAgICAiVGl0bGU6IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIk9wZXJhIjogeworICAgICAgICAgICAgIk1BUksiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAgICAgIkluc2VydCB0ZXh0IGluIG5ldyBwYXJhZ3JhcGgiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUHJlc2VydmVTY3JpcHRzIjogeworICAgICAgICAgICAgIkphdmFTY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJQSFAiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUXVpY2tUYWciOiB7CisgICAgICAgICAgICAiJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsJzogJyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiQ2xvc2luZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIkNsb3NpbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIk9wZW5pbmdEb3VibGVRdW90ZXMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nU2luZ2xlUXVvdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU3VwZXJDbGVhbiI6IHsKKyAgICAgICAgICAgICJDbGVhbiBiYWQgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIFNlbGVjdGlvbiBPbmx5IjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgU2NvcGUiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc3RhbmQgYnkgd2hpbGUgY2xlYW5pbmcgaW4gcHJvY2Vzcy4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGlnbm1lbnQgKGxlZnQvcmlnaHQvanVzdGlmeSkuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBjbGFzc2VzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBBbGwgSFRNTCBUYWdzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBzdHlsZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGVtcGhhc2lzIGFuZCBhbm5vdGF0aW9ucy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgUGFyYWdyYXBocyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMuIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSBkaXJlY3Rpb25hbCBxdW90ZSBtYXJrcyB3aXRoIG5vbi1kaXJlY3Rpb25hbCBxdW90ZSBtYXJrcy4iOiAiIiwKKyAgICAgICAgICAgICJWaWdvcm91c2x5IHB1cmdlIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAgICAgIkNlbGwgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIkNlbGwgVHlwZToiOiAiIiwKKyAgICAgICAgICAgICJEbyBOb3QgQ2hhbmdlIjogIiIsCisgICAgICAgICAgICAiSGVhZGVyICh0aCkiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBjZWxscyI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCAodGQpIjogIiIsCisgICAgICAgICAgICAiUm93IHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuc2F2ZWRDaGFuZ2VzIjogeworICAgICAgICAgICAgIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgZWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIldlYktpdCI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiPDxHZWNrbz4+IgorICAgICAgICB9LAorICAgICAgICAiWGluaGEiOiB7CisgICAgICAgICAgICAiMSAoOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIyICgxMCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIzICgxMiBwdCkiOiAiIiwKKyAgICAgICAgICAgICI0ICgxNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI1ICgxOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI2ICgyNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI3ICgzNiBwdCkiOiAiIiwKKyAgICAgICAgICAgICJBcmlhbCI6ICIiLAorICAgICAgICAgICAgIkNvdXJpZXIgTmV3IjogIiIsCisgICAgICAgICAgICAiRXJyb3IgTG9hZGluZyBYaW5oYS4gIERldmVsb3BlcnMsIGNoZWNrIHRoZSBFcnJvciBDb25zb2xlIGZvciBpbmZvcm1hdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJHZW9yZ2lhIjogIiIsCisgICAgICAgICAgICAiSW1wYWN0IjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBDb3JlIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW4gJHBsdWdpbiI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgcGx1Z2lucyI6ICIiLAorICAgICAgICAgICAgIk1TIFdvcmQgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIjogIiIsCisgICAgICAgICAgICAiVGFob21hIjogIiIsCisgICAgICAgICAgICAiVGltZXMgTmV3IFJvbWFuIjogIiIsCisgICAgICAgICAgICAiVG91Y2ggaGVyZSBmaXJzdCB0byBhY3RpdmF0ZSBlZGl0b3IuIjogIiIsCisgICAgICAgICAgICAiVmVyZGFuYSI6ICIiLAorICAgICAgICAgICAgIldhaXRpbmcgZm9yIElmcmFtZSB0byBsb2FkLi4uIjogIiIsCisgICAgICAgICAgICAiV2luZ0RpbmdzIjogIiIsCisgICAgICAgICAgICAiWGluaGEiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogQkFDS0dST1VORElNQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIlNldCBCYWNrZ3JvdW5kIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEwJSI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiIiwKKyAgICAgICAgICAgICIyMDAlIjogIiIsCisgICAgICAgICAgICAiMjUlIjogIiIsCisgICAgICAgICAgICAiNTAlIjogIiIsCisgICAgICAgICAgICAiNzUlIjogIiIsCisgICAgICAgICAgICAiRmlsZXNpemU6IjogIiIsCisgICAgICAgICAgICAiUHJlc2V0IjogIiIsCisgICAgICAgICAgICAiVG9nZ2xlIG1hcmtlciBjb2xvciI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIEltYWdlIEVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlcyI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgVXNlcm5hbWUvRW1haWwiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkIjogIiIsCisgICAgICAgICAgICAiTm8gUGhvdG9zIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gVmlkZW9zIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiVGhpcyBTZXJ2ZXIiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVXNlcm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFZpZGVvIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFZpZGVvcyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIxMjAlIjogIiIsCisgICAgICAgICAgICAiMTUwJSI6ICIiLAorICAgICAgICAgICAgIjgwJSI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJQU0xvY2FsIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNMT0NBTCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJDb25maXJtIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIEdlYXJzIGluIG9yZGVyIHRvIHVzZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlIGFuZCBjb25maWd1cmF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkVuYWJsaW5nIExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJJbnN0YWxsIjogIiIsCisgICAgICAgICAgICAiTGVhcm4gQWJvdXQgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCByZWxvYWQgdGhlIHBhZ2UsIGNhdXNpbmcgeW91IHRvIGxvc2UgYW55IHVuc2F2ZWQgd29yay4gIFByZXNzIFwiT0tcIiB0byByZWxvYWQuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgdXNlcyBHb29nbGUgR2VhcnMgdG8gZW5hYmxlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UuICBXaXRoIEdlYXJzIGluc3RhbGxlZCwgeW91IGNhbiBzYXZlIGRyYWZ0cyBvZiB5b3VyIGRvY3VtZW50cyBvbiB5b3VyIGhhcmQgZHJpdmUsIGNvbmZpZ3VyZSBYaW5oYSB0byBsb29rIHRoZSB3YXkgeW91IHdhbnQsIGFuZCBjYXJyeSB0aGlzIGluZm9ybWF0aW9uIHdoZXJldmVyIHlvdSB1c2UgWGluaGEgb24gdGhlIHdlYi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiUFNTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU1NFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWxlOiAiOiAiIiwKKyAgICAgICAgICAgICJJbXBvcnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEZXRhaWxzIjogIiIsCisgICAgICAgICAgICAiRmlsZSBCcm93c2VyIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gICAgVGhlcmUgQyAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgVGhlcmUgQSAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyBcIiBUaGVyZSBCIFwiIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gJyBUaGVyZSBEICciOiAiIiwKKyAgICAgICAgICAgICJMaXN0IG9mIFBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIk5ldyBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIk9wZW4iOiAiIiwKKyAgICAgICAgICAgICJPcGVuIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgeW91J2QgbGlrZSB0byBjcmVhdGUuIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBlcmFzZSBhbnkgdW5zYXZlZCBjb250ZW50LiAgSWYgeW91J3JlIGNlcnRhaW4sIHBsZWFzZSBjbGljayBPSyB0byBjb250aW51ZS4iOiAiIiwKKyAgICAgICAgICAgICJXZWIgVVJMIjogIiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICI8PFBTTG9jYWw+PiIKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9yby5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL3JvLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNmZiYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9yby5qcwpAQCAtMCwwICsxLDE1NzcgQEAKKy8vIFhpbmhhIExhbmd1YWdlIENvbWJpbmVkIFRyYW5zbGF0aW9uIEZpbGUKKy8vCisvLyBMQU5HOiAicm8iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTlNUUlVDVElPTlMgVE8gVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFlvdXIgdHJhbnNsYXRpb24gbXVzdCBiZSBpbiBVVEYtOCBDaGFyYWN0ZXIgRW5jb2RpbmcuCisvLworLy8gVGhpcyBpcyBhIEpTT04gZW5jb2RlZCBmaWxlIChwbHVzIGNvbW1lbnRzKSwgc3RyaW5ncyBzaG91bGQgYmUgZG91YmxlLXF1b3RlCisvLyBvbmx5LCBkbyBub3QgdXNlIHNpbmdsZSBxdW90ZXMgdG8gc3Vycm91bmQgc3RyaW5ncyAtICJoZWxsbyIsIG5vdCAnaGVsbG8nCisvLyBkbyBub3QgaGF2ZSBhIHRyYWlsaW5nIGNvbW1hIGFmdGVyIHRoZSBsYXN0IGVudHJ5IGluIGEgc2VjdGlvbi4KKy8vCisvLyBPbmx5IGZ1bGwgbGluZSBjb21tZW50cyBhcmUgYWxsb3dlZCAodGhhdCBhIGNvbW1lbnRzIG9jY3VweSBlbnRpcmUgbGluZXMpLgorLy8KKy8vIFNlYXJjaCBmb3IgdGhlIF9fTkVXX1RSQU5TTEFUSU9OU19fIHNlY3Rpb24gYmVsb3csIHRoaXMgaXMgd2hlcmUgeW91IHdpbGwKKy8vIHdhbnQgdG8gZm9jdXMsIHRoaXMgc2VjdGlvbiBpbmNsdWRlcyB0aGluZ3MgdGhhdCBkbyBub3QgcHJlc2VudGx5IGhhdmUgYSAKKy8vIHRyYW5zbGF0aW9uIG9yIGZvciB3aGljaCB0aGUgdHJhbnNsYXRpb24gbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgYWNjdXJhY3kuCisvLworLy8gSW4gdGhlIE5ldyBUcmFuc2xhdGlvbnMgc2VjdGlvbiBhIHRyYW5zbGF0aW9uIHN0cmluZyBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZworLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiIgorLy8gICAgIFRoaXMgbWVhbnMgaXQgaXMgbm90IHRyYW5zbGF0ZWQgeWV0LCBhZGQgeW91ciB0cmFuc2xhdGlvbi4uLgorLy8gICAgICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJLbGluZ29uIFN0cmluZyBIZXJlIgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiVHJhbnNsYXRlZCBTdHJpbmcgSGVyZSIKKy8vICAgICBUaGlzIG1lYW5zIHRoYXQgYW4gZXhpc3RpbmcgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nLCBpbiBzb21lIG90aGVyCisvLyAgICAgc2VjdGlvbiBoYXMgYmVlbiBmb3VuZCwgYW5kIHVzZWQuICBDaGVjayB0aGF0IGl0IGlzIGFwcHJvcHJpdGUgZm9yIHRoaXMKKy8vICAgICBzZWN0aW9uIGFuZCBpZiBpdCBpcywgdGhhdCdzIGZpbmUgbGVhdmUgaXQgYXMgaXMsIG90aGVyd2lzZSBjaGFuZ2UgYXMKKy8vICAgICBhcHByb3ByaWF0ZS4KKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIjw8QW5vdGhlclNlY3Rpb24+PiIKKy8vICAgICBUaGlzIG1lYW5zIHVzZSB0aGUgc2FtZSB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcgYXMgPDxBbm90aGVyU2VjdGlvbj4+CisvLyAgICAgdGhpcyBzYXZlcyB5b3UgcmUtdHJhbmxhdGluZyBzdHJpbmdzLiAgSWYgdGhlIENvbnRleHQgb2YgdGhpcyBzZWN0aW9uCisvLyAgICAgYW5kIHRoZSBjb250ZXh0IG9mIEFub3RoZXJTZWN0aW9uIHNlZW0gdGhlIHNhbWUsIHRoYXQncyBmaW5lIGxlYXZlIGl0CisvLyAgICAgdXNpbmcgdGhhdCB0cmFuc2xhdGlvbiwgYnV0IGlmIHRoaXMgc2VjdGlvbiBuZWVkcyBhIGRpZmZlcmVudCB0cmFuc2xhdGlvbiwgCisvLyAgICAgeW91IGNhbiBwcm92aWRlIGl0IGJ5IHJlcGxhY2luZyB0aGUgbGluayAoPDxBbm90aGVyU2VjdGlvbj4+KSB3aXRoIHRoYXQKKy8vICAgICBuZXcgdHJhbnNsYXRpb24uICBGb3IgZXhhbXBsZSAtIGEgIlRhYmxlIiBpbiBzYXkgIkRhdGFQbHVnaW4iIGlzIAorLy8gICAgIHBlcmhhcHMgdHJhbnNsYXRlZCBkaWZmZXJlbnRseSB0byAiVGFibGUiIGluICJGdXJuaXR1cmVQbHVnaW4iLgorLy8KKy8vIFRFU1RJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgcGxhY2UgeW91ciB0cmFuc2xhdGlvbiBmaWxlIG9uIHlvdXIgd2Vic2VydmVyIHNvbWV3aGVyZSBmb3IgZXhhbXBsZQorLy8KKy8vICAgL3hpbmhhL2xhbmcvbWVyZ2VkL3JvLmpzCisvLworLy8gYW5kIHRoZW4gdGVsbCBYaW5oYSB3aGVyZSB0byBnZXQgaXQgKGJlZm9yZSBsb2FkaW5nIFhpbmhhQ29yZS5qcykgYnkgCisvLworLy8gIF9lZGl0b3JfbGFuZyAgICAgICAgICAgICAgPSAncm8nOworLy8gIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSAgPSAnL3hpbmhhL2xhbmcvbWVyZ2VkL3JvLmpzJzsKKy8vCisvLyBYaW5oYSB3aWxsIGxvYWQgeW91ciBuZXcgbGFuZ3VhZ2UgZGVmaW5pdGlvbi4KKy8vCisvLyBTVUJNSVRUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IGNyZWF0ZSBhIFRpY2tldCBvbiB0aGUgWGluaGEgd2Vic2l0ZSBhbmQgYXR0YWNoIHlvdXIgdHJhbnNsYXRpb24gCisvLyBmaWxlLgorLy8KKy8vIFRoZSBYaW5oYSBkZXZlbG9wZXJzIHdpbGwgdGFrZSB5b3VyIGZpbGUgYW5kIHVzZSB0aGUgCisvLyAgICAgY29udHJpYi9sY19zcGxpdF9tZXJnZWRfZmlsZS5waHAKKy8vIHNjcmlwdCB0byBsb2FkIGl0IGludG8gdGhlIFhpbmhhIGRpc3RyaWJ1dGlvbi4KKworeworICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKKyAgICAgICAgIk9LIjogIkFjY2VwdMSDIgorICAgIH0sCisgICAgIkFib3V0Qm94IjogeworICAgICAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiRGVzcHJlIGVkaXRvciIKKyAgICB9LAorICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIgorICAgIH0sCisgICAgIkNvbG9yUGlja2VyIjogeworICAgICAgICAiQ29sb3I6ICI6ICJDdWxvYXJlIiwKKyAgICAgICAgIk9LIjogIkFjY2VwdMSDIgorICAgIH0sCisgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiQWxpbmllcmUgcGUgY2VudHJ1IiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICJBbGluaWVyZSDDrm4gYW1iZWxlIHDEg3LFo2kiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIkFsaW5pZXJlIGxhIHN0w6JuZ2EiLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICJBbGluaWVyZSBsYSBkcmVhcHRhIgorICAgIH0sCisgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJJbnNlcmVhesSDL21vZGlmY8SDIGxpbmsiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJGZXJlYXN0csSDIG5vdcSDIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiTmltaWMgKGZvbG9zZcWfdGUgY2UtaSBpbXBsaWNpdCkiLAorICAgICAgICAiT0siOiAiQWNjZXB0xIMiLAorICAgICAgICAiT3RoZXIiOiAiQWx0IHRhcmdldCIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiQWNlZWHFn2kgZmVyZWFzdHLEgyAoX3NlbGYpIiwKKyAgICAgICAgIlRhcmdldDoiOiAixaJpbnRhOiIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogIlRpdGx1bCAodG9vbHRpcCk6IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiRmVyZWFzdHJhIHByaW5jaXBhbMSDIChfdG9wKSIsCisgICAgICAgICJVUkw6IjogIlVSTDoiCisgICAgfSwKKyAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiLAorICAgICAgICAiT0siOiAiQWNjZXB0xIMiCisgICAgfSwKKyAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKKyAgICAgICAgIk9LIjogIkFjY2VwdMSDIgorICAgIH0sCisgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICJBbGlnbiI6ICJBbGluaWVyZSIsCisgICAgICAgICJCYXNlbGluZSI6ICJCYXNlbGluZSIsCisgICAgICAgICJCb3JkZXIiOiAiQ2hlbmFyIiwKKyAgICAgICAgIkJvdHRvbSI6ICJKb3MiLAorICAgICAgICAiQ2FuY2VsIjogIlJlbnVuxaPEgyIsCisgICAgICAgICJDb2xvciI6ICJDdWxvYXJlIiwKKyAgICAgICAgIkhlaWdodCI6ICLDjm7Eg2zFo2ltZWEiLAorICAgICAgICAiSGVpZ2h0OiI6ICLDjm7Eg2zFo2ltZWEiLAorICAgICAgICAiTGVmdCI6ICJTdMOibmdhIiwKKyAgICAgICAgIk1hcmdpbiI6ICJNYXJnaW5lIiwKKyAgICAgICAgIk1pZGRsZSI6ICJNaWpsb2MiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJGZXJlYXN0csSDIG5vdcSDIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiTmltaWMgKGZvbG9zZcWfdGUgY2UtaSBpbXBsaWNpdCkiLAorICAgICAgICAiT0siOiAiQWNjZXB0xIMiLAorICAgICAgICAiUGFkZGluZyI6ICJTcGHFo2llcmUiLAorICAgICAgICAiUmlnaHQiOiAiRHJlYXB0YSIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiQWNlZWHFn2kgZmVyZWFzdHLEgyAoX3NlbGYpIiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKSI6ICJUaXRsdWwgKHRvb2x0aXApOiIsCisgICAgICAgICJUb3AiOiAiU3VzIiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiRmVyZWFzdHJhIHByaW5jaXBhbMSDIChfdG9wKSIsCisgICAgICAgICJXaWR0aCI6ICJMxIPFo2ltZSIsCisgICAgICAgICJXaWR0aDoiOiAiTMSDxaNpbWUiCisgICAgfSwKKyAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICJSZXBsYWNlIHdpdGg6IjogIsOObmxvY3VpZcWfdGUgY3UiCisgICAgfSwKKyAgICAiRm9ybXMiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiVVJMLXVsIGltYWdpbmlpIiwKKyAgICAgICAgIk9LIjogIkFjY2VwdMSDIgorICAgIH0sCisgICAgIkZ1bGxQYWdlIjogeworICAgICAgICAiQWx0ZXJuYXRlIHN0eWxlLXNoZWV0OiI6ICJUZW1wbGF0ZSBDU1MgYWx0ZXJuYXRpdjoiLAorICAgICAgICAiQmFja2dyb3VuZCBjb2xvcjoiOiAiQ3Vsb2FyZSBkZSBmdW5kYWw6IiwKKyAgICAgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiLAorICAgICAgICAiRE9DVFlQRToiOiAiRE9DVFlQRToiLAorICAgICAgICAiRGVzY3JpcHRpb246IjogIkRlc2NyaWVyZSIsCisgICAgICAgICJEb2N1bWVudCBwcm9wZXJ0aWVzIjogIlByb3ByaWV0xIPFo2lsZSBkb2N1bWVudHVsdWkiLAorICAgICAgICAiRG9jdW1lbnQgdGl0bGU6IjogIlRpdGx1bCBkb2N1bWVudHVsdWk6IiwKKyAgICAgICAgIk9LIjogIkFjY2VwdMSDIiwKKyAgICAgICAgIlByaW1hcnkgc3R5bGUtc2hlZXQ6IjogIlRlbXBsYXRlIENTUyBwcmluY2lwYWw6IiwKKyAgICAgICAgIlRleHQgY29sb3I6IjogIkN1bG9hcmUgdGV4dDoiCisgICAgfSwKKyAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKKyAgICAgICAgIkNlbnRlciI6ICJDZW50cnUiLAorICAgICAgICAiQ29sb3I6IjogIkN1bG9hcmUiLAorICAgICAgICAiSGVpZ2h0OiI6ICLDjm7Eg2zFo2ltZWEiLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIkxpbmllIG9yaXpvbnRhbMSDIiwKKyAgICAgICAgIkxheW91dCI6ICJBcmFuamFtZW50IiwKKyAgICAgICAgIkxlZnQiOiAiU3TDom5nYSIsCisgICAgICAgICJPSyI6ICJBY2NlcHTEgyIsCisgICAgICAgICJSaWdodCI6ICJEcmVhcHRhIiwKKyAgICAgICAgIldpZHRoOiI6ICJMxIPFo2ltZSIsCisgICAgICAgICJwZXJjZW50IjogInByb2NlbnRlIiwKKyAgICAgICAgInBpeGVscyI6ICJwaXhlbGkiCisgICAgfSwKKyAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAiQmFzZWxpbmUiOiAiQmFzZWxpbmUiLAorICAgICAgICAiQm90dG9tIjogIkpvcyIsCisgICAgICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKKyAgICAgICAgIkhlaWdodDoiOiAiw45uxINsxaNpbWVhIiwKKyAgICAgICAgIkxlZnQiOiAiU3TDom5nYSIsCisgICAgICAgICJNaWRkbGUiOiAiTWlqbG9jIiwKKyAgICAgICAgIk9LIjogIkFjY2VwdMSDIiwKKyAgICAgICAgIlJpZ2h0IjogIkRyZWFwdGEiLAorICAgICAgICAiVG9wIjogIlN1cyIsCisgICAgICAgICJXaWR0aDoiOiAiTMSDxaNpbWUiCisgICAgfSwKKyAgICAiSW5saW5lU3R5bGVyIjogeworICAgICAgICAiQmFja2dyb3VuZCI6ICJGdW5kYWwiLAorICAgICAgICAiQmFzZWxpbmUiOiAiQmFzZWxpbmUiLAorICAgICAgICAiQm9yZGVyIjogIkNoZW5hciIsCisgICAgICAgICJCb3R0b20iOiAiSm9zIiwKKyAgICAgICAgIkNlbnRlciI6ICJDZW50cnUiLAorICAgICAgICAiQ2hhciI6ICJDYXJhY3RlciIsCisgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICJDaGVuYXJlIGFzaW1pbGF0ZSIsCisgICAgICAgICJGRyBDb2xvciI6ICJDdWxvYXJlIHRleHQiLAorICAgICAgICAiRmxvYXQiOiAiUG96acWjaWUiLAorICAgICAgICAiSGVpZ2h0IjogIsOObsSDbMWjaW1lYSIsCisgICAgICAgICJJbWFnZSBVUkwiOiAiVVJMLXVsIGltYWdpbmlpIiwKKyAgICAgICAgIkp1c3RpZnkiOiAiSnVzdGlmeSIsCisgICAgICAgICJMYXlvdXQiOiAiQXJhbmphbWVudCIsCisgICAgICAgICJMZWZ0IjogIlN0w6JuZ2EiLAorICAgICAgICAiTWFyZ2luIjogIk1hcmdpbmUiLAorICAgICAgICAiTWlkZGxlIjogIk1pamxvYyIsCisgICAgICAgICJOb25lIjogIk5pbWljIiwKKyAgICAgICAgIlBhZGRpbmciOiAiU3BhxaNpZXJlIiwKKyAgICAgICAgIlJpZ2h0IjogIkRyZWFwdGEiLAorICAgICAgICAiVGV4dCBhbGlnbiI6ICJBbGluaWVyZSIsCisgICAgICAgICJUb3AiOiAiU3VzIiwKKyAgICAgICAgIlZlcnRpY2FsIGFsaWduIjogIkFsaW5pZXJlIHBlIHZlcnRpY2FsxIMiLAorICAgICAgICAiV2lkdGgiOiAiTMSDxaNpbWUiLAorICAgICAgICAicGVyY2VudCI6ICJwcm9jZW50ZSIsCisgICAgICAgICJwaXhlbHMiOiAicGl4ZWxpIgorICAgIH0sCisgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiLAorICAgICAgICAiT0siOiAiQWNjZXB0xIMiCisgICAgfSwKKyAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICJCYXNlbGluZSI6ICJCYXNlbGluZSIsCisgICAgICAgICJCb3R0b20iOiAiSm9zIiwKKyAgICAgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJVUkwtdWwgaW1hZ2luaWkiLAorICAgICAgICAiTGF5b3V0IjogIkFyYW5qYW1lbnQiLAorICAgICAgICAiTGVmdCI6ICJTdMOibmdhIiwKKyAgICAgICAgIk1pZGRsZSI6ICJNaWpsb2MiLAorICAgICAgICAiT0siOiAiQWNjZXB0xIMiLAorICAgICAgICAiUmlnaHQiOiAiRHJlYXB0YSIsCisgICAgICAgICJTcGFjaW5nIjogIsOObnRyZSBjZWx1bGUiLAorICAgICAgICAiVG9wIjogIlN1cyIKKyAgICB9LAorICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAiQ2FuY2VsIjogIlJlbnVuxaPEgyIsCisgICAgICAgICJIZWlnaHQ6IjogIsOObsSDbMWjaW1lYSIsCisgICAgICAgICJMZWZ0IjogIlN0w6JuZ2EiLAorICAgICAgICAiT0siOiAiQWNjZXB0xIMiLAorICAgICAgICAiUmlnaHQiOiAiRHJlYXB0YSIsCisgICAgICAgICJXaWR0aDoiOiAiTMSDxaNpbWUiCisgICAgfSwKKyAgICAiSW5zZXJ0Tm90ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiCisgICAgfSwKKyAgICAiSW5zZXJ0UGljdHVyZSI6IHsKKyAgICAgICAgIkJhc2VsaW5lIjogIkJhc2VsaW5lIiwKKyAgICAgICAgIkJvdHRvbSI6ICJKb3MiLAorICAgICAgICAiQ2FuY2VsIjogIlJlbnVuxaPEgyIsCisgICAgICAgICJIZWlnaHQ6IjogIsOObsSDbMWjaW1lYSIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIlVSTC11bCBpbWFnaW5paSIsCisgICAgICAgICJMYXlvdXQiOiAiQXJhbmphbWVudCIsCisgICAgICAgICJMZWZ0IjogIlN0w6JuZ2EiLAorICAgICAgICAiTWlkZGxlIjogIk1pamxvYyIsCisgICAgICAgICJPSyI6ICJBY2NlcHTEgyIsCisgICAgICAgICJSaWdodCI6ICJEcmVhcHRhIiwKKyAgICAgICAgIlNwYWNpbmciOiAiw45udHJlIGNlbHVsZSIsCisgICAgICAgICJUb3AiOiAiU3VzIiwKKyAgICAgICAgIldpZHRoOiI6ICJMxIPFo2ltZSIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0IjogeworICAgICAgICAiQ2FuY2VsIjogIlJlbnVuxaPEgyIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiCisgICAgfSwKKyAgICAiSW5zZXJ0VGFibGUiOiB7CisgICAgICAgICJCYXNlbGluZSI6ICJCYXNlbGluZSIsCisgICAgICAgICJCb3JkZXIiOiAiQ2hlbmFyIiwKKyAgICAgICAgIkJvdHRvbSI6ICJKb3MiLAorICAgICAgICAiQ2FuY2VsIjogIlJlbnVuxaPEgyIsCisgICAgICAgICJDYXB0aW9uIjogIlRpdGx1IGRlIHRhYmVsIiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICJJbnNlcmVhesSDIHVuIHRhYmVsIiwKKyAgICAgICAgIkxheW91dCI6ICJBcmFuamFtZW50IiwKKyAgICAgICAgIkxlZnQiOiAiU3TDom5nYSIsCisgICAgICAgICJNaWRkbGUiOiAiTWlqbG9jIiwKKyAgICAgICAgIk9LIjogIkFjY2VwdMSDIiwKKyAgICAgICAgIlBlcmNlbnQiOiAicHJvY2VudGUiLAorICAgICAgICAiUGl4ZWxzIjogInBpeGVsaSIsCisgICAgICAgICJSaWdodCI6ICJEcmVhcHRhIiwKKyAgICAgICAgIlNwYWNpbmciOiAiw45udHJlIGNlbHVsZSIsCisgICAgICAgICJUb3AiOiAiU3VzIiwKKyAgICAgICAgIldpZHRoOiI6ICJMxIPFo2ltZSIKKyAgICB9LAorICAgICJMaW5rZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJJbnNlcmVhesSDL21vZGlmY8SDIGxpbmsiLAorICAgICAgICAiT0siOiAiQWNjZXB0xIMiLAorICAgICAgICAiVGFyZ2V0OiI6ICLFomludGE6IiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIKKyAgICB9LAorICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAiQ2FuY2VsIjogIlJlbnVuxaPEgyIsCisgICAgICAgICJPSyI6ICJBY2NlcHTEgyIKKyAgICB9LAorICAgICJQU0xvY2FsIjogeworICAgICAgICAiQ2FuY2VsIjogIlJlbnVuxaPEgyIKKyAgICB9LAorICAgICJQYXN0ZVRleHQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKKyAgICAgICAgIk9LIjogIkFjY2VwdMSDIgorICAgIH0sCisgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIlJlbnVuxaPEgyIKKyAgICB9LAorICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiCisgICAgfSwKKyAgICAiU2V0SWQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKKyAgICAgICAgIk9LIjogIkFjY2VwdMSDIgorICAgIH0sCisgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgIk9LIjogIkFjY2VwdMSDIgorICAgIH0sCisgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbnVsZWF6xIMiLAorICAgICAgICAiRGljdGlvbmFyeSI6ICJEaWPFo2lvbmFyIiwKKyAgICAgICAgIkZpbmlzaGVkIGxpc3Qgb2YgbWlzcGVsbGVkIHdvcmRzIjogIkFtIHRlcm1pbmF0IGxpc3RhIGRlIGN1dmludGUgZ3JlxZ9pdGUiLAorICAgICAgICAiSSB3aWxsIG9wZW4gaXQgaW4gYSBuZXcgcGFnZS4iOiAiTyB2b2kgZGVzY2hpZGUgw65udHItbyBhbHTEgyBmZXJlYXN0csSDLiIsCisgICAgICAgICJJZ25vcmUiOiAiSWdub3LEgyIsCisgICAgICAgICJJZ25vcmUgYWxsIjogIklnbm9yxIMgdG9hdGUiLAorICAgICAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIk51IGFtIGfEg3NpdCBuaWNpIHVuIGN1dsOibnQgZ3JlxZ9pdCBjdSBhY2VzdCBkaWPFo2lvbmFyLiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPcmlnaW5hbCB3b3JkIjogIkN1dsOibnR1bCBvcmlnaW5hbCIsCisgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIlbEgyByb2cgY29uZmlybWHFo2kgY8SDIHZyZcWjaSBzxIMgZGVzY2hpZGXFo2kgYWNlc3QgbGluayIsCisgICAgICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiVsSDIHJvZyBhxZ90ZXB0YcWjaS4gIEFwZWxleiBzcGVsbC1jaGVja2VyLXVsLiIsCisgICAgICAgICJQbGVhc2Ugd2FpdDogY2hhbmdpbmcgZGljdGlvbmFyeSB0byI6ICJWxIMgcm9nIGHFn3RlcHRhxaNpLiAgU2NoaW1iIGRpY8WjaW9uYXJ1bCBjdSIsCisgICAgICAgICJSZS1jaGVjayI6ICJTY2FuZWF6xIMiLAorICAgICAgICAiUmVwbGFjZSI6ICLDjm5sb2N1aWXFn3RlIiwKKyAgICAgICAgIlJlcGxhY2UgYWxsIjogIsOObmxvY3VpZcWfdGUgdG9hdGUiLAorICAgICAgICAiUmVwbGFjZSB3aXRoIjogIsOObmxvY3VpZcWfdGUgY3UiLAorICAgICAgICAiU3BlbGwtY2hlY2siOiAiRGV0ZWN0ZWF6xIMgZ3JlxZ9lbGkiLAorICAgICAgICAiU3VnZ2VzdGlvbnMiOiAiU3VnZXN0aWkiLAorICAgICAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIkRvcmnFo2kgc8SDIHJlbnVuxaNhxaNpIGxhIG1vZGlmaWPEg3JpIMWfaSBzxIMgw65uY2hpZCBzcGVsbC1jaGVja2VyLXVsPyIKKyAgICB9LAorICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAiQ2FuY2VsIjogIlJlbnVuxaPEgyIsCisgICAgICAgICJPSyI6ICJBY2NlcHTEgyIKKyAgICB9LAorICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICJBbGwgZm91ciBzaWRlcyI6ICJUb2F0ZSBwxINyxaNpbGUiLAorICAgICAgICAiQm9yZGVycyI6ICJDaGVuYXJlIiwKKyAgICAgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiLAorICAgICAgICAiQ2FwdGlvbiI6ICJUaXRsdSBkZSB0YWJlbCIsCisgICAgICAgICJDZWxsIFByb3BlcnRpZXMiOiAiUHJvcHJpZXTEg8WjaWxlIGNlbHVsZWkiLAorICAgICAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogIlByb3ByaWV0xIPFo2lsZSBjZWx1bGVpIiwKKyAgICAgICAgIkRlbGV0ZSBjZWxsIjogIsWedGVyZ2UgY2VsdWxhIiwKKyAgICAgICAgIkRlbGV0ZSBjb2x1bW4iOiAixZ50ZXJnZSBjb2xvYW5hIiwKKyAgICAgICAgIkRlbGV0ZSByb3ciOiAixZ50ZXJnZSByw6JuZHVsIiwKKyAgICAgICAgIkRlc2NyaXB0aW9uIjogIkRlc2NyaWVyZSIsCisgICAgICAgICJGcmFtZXMiOiAiQ2hlbmFyZSIsCisgICAgICAgICJJbnNlcnQgY2VsbCBhZnRlciI6ICJJbnNlcmVhesSDIG8gY2VsdWzEgyBsYSBkcmVhcHRhIiwKKyAgICAgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICJJbnNlcmVhesSDIG8gY2VsdWzEgyBsYSBzdMOibmdhIiwKKyAgICAgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAiSW5zZXJlYXrEgyBvIGNvbG9hbsSDIGxhIGRyZWFwdGEiLAorICAgICAgICAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiOiAiSW5zZXJlYXrEgyBvIGNvbG9hbsSDIGxhIHN0w6JuZ2EiLAorICAgICAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICJJbnNlcmVhesSDIHVuIHLDom5kIGR1cMSDIiwKKyAgICAgICAgIkluc2VydCByb3cgYmVmb3JlIjogIkluc2VyZWF6xIMgdW4gcsOibmQgw65uYWludGUiLAorICAgICAgICAiTWVyZ2UgY2VsbHMiOiAiVW5lxZ90ZSBjZWx1bGVsZSIsCisgICAgICAgICJObyBydWxlcyI6ICJGxINyxIMgbGluaWkiLAorICAgICAgICAiTm8gc2lkZXMiOiAiRsSDcsSDIHDEg3LFo2kiLAorICAgICAgICAiT0siOiAiQWNjZXB0xIMiLAorICAgICAgICAiUGFkZGluZyI6ICJTcGHFo2llcmUiLAorICAgICAgICAiUGxlYXNlIGNsaWNrIGludG8gc29tZSBjZWxsIjogIlbEgyByb2cgc8SDIGRhxaNpIGNsaWNrIMOubnRyLW8gY2VsdWzEgyIsCisgICAgICAgICJSb3cgUHJvcGVydGllcyI6ICJQcm9wcmlldMSDxaNpbGUgbGluaWVpIiwKKyAgICAgICAgIlJvdyBwcm9wZXJ0aWVzIjogIlByb3ByaWV0xIPFo2lsZSByw6JuZHVsdWkiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICJWb3IgYXDEg3JlYSBsaW5paSDDrm50cmUgdG9hdGUgcsOibmR1cmlsZSDFn2kgY29sb2FuZWxlIiwKKyAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gY29sdW1ucyBvbmx5IjogIlZvciBhcMSDcmVhIGRvYXIgbGluaWkgdmVydGljYWxlIiwKKyAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogIlZvciBhcMSDcmVhIGRvYXIgbGluaWkgb3Jpem9udGFsZSIsCisgICAgICAgICJTcGFjaW5nIjogIsOObnRyZSBjZWx1bGUiLAorICAgICAgICAiU3BhY2luZyBhbmQgcGFkZGluZyI6ICJTcGHFo2llcmVhIiwKKyAgICAgICAgIlNwbGl0IGNvbHVtbiI6ICLDjm1wYXJ0ZSBjb2xvYW5hIiwKKyAgICAgICAgIlNwbGl0IHJvdyI6ICLDjm1wYXJ0ZSByw6JuZHVsIiwKKyAgICAgICAgIlN1bW1hcnkiOiAiU3VtYXIiLAorICAgICAgICAiVGFibGUgUHJvcGVydGllcyI6ICJQcm9wcmlldMSDxaNpbGUgdGFiZWxlaSIsCisgICAgICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogIlByb3ByaWV0xIPFo2lsZSB0YWJlbGVpIiwKKyAgICAgICAgIlRoZSBib3R0b20gc2lkZSBvbmx5IjogIkRvYXIgcGFydGVhIGRlIGpvcyIsCisgICAgICAgICJUaGUgbGVmdC1oYW5kIHNpZGUgb25seSI6ICJEb2FyIHBhcnRlYSBkaW4gc3TDom5nYSIsCisgICAgICAgICJUaGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb25seSI6ICJQYXJ0ZWEgZGluIHN0w6JuZ2EgxZ9pIGNlYSBkaW4gZHJlYXB0YSIsCisgICAgICAgICJUaGUgcmlnaHQtaGFuZCBzaWRlIG9ubHkiOiAiRG9hciBwYXJ0ZWEgZGluIGRyZWFwdGEiLAorICAgICAgICAiVGhlIHRvcCBhbmQgYm90dG9tIHNpZGVzIG9ubHkiOiAiUGFydGVhIGRlIHN1cyBzaSBjZWEgZGUgam9zIiwKKyAgICAgICAgIlRoZSB0b3Agc2lkZSBvbmx5IjogIkRvYXIgcGFydGVhIGRlIHN1cyIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiWGluaGEgcmVmdXrEgyBjdSBsYcWfaXRhdGUgc8SDIMWfdGVhcmfEgyB1bHRpbWEgY2VsdWzEgyBkaW4gcsOibmQuIiwKKyAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iOiAiWGluaGEgcmVmdXrEgyBjdSBsYcWfaXRhdGUgc8SDIMWfdGVhcmfEgyB1bHRpbWEgY29sb2FtxIMgZGluIHRhYmVsYS4iLAorICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3Qgcm93IGluIHRhYmxlLiI6ICJYaW5oYSByZWZ1esSDIGN1IGxhxZ9pdGF0ZSBzxIMgxZ90ZWFyZ8SDIHVsdGltdWwgcsOibmQgZGluIHRhYmVsYS4iLAorICAgICAgICAicGl4ZWxzIjogInBpeGVsaSIKKyAgICB9LAorICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiCisgICAgfSwKKyAgICAiVW5Gb3JtYXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKKyAgICAgICAgIk9LIjogIkFjY2VwdMSDIgorICAgIH0sCisgICAgIlhpbmhhIjogeworICAgICAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiRGVzcHJlIGVkaXRvciIsCisgICAgICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIkN1bG9hcmUgZGUgZnVuZGFsIiwKKyAgICAgICAgIkJvbGQiOiAiw45uZ3JvxZ9hdCIsCisgICAgICAgICJCdWxsZXRlZCBMaXN0IjogIkxpc3TEgyBtYXJjYXTEgyIsCisgICAgICAgICJDb3B5IHNlbGVjdGlvbiI6ICJDb3BpZSDDrm4gY2xpcGJvYXJkIiwKKyAgICAgICAgIkN1cnJlbnQgc3R5bGUiOiAiU3RpbHVsIGN1cmVudCIsCisgICAgICAgICJDdXQgc2VsZWN0aW9uIjogIlRhaWUgw65uIGNsaXBib2FyZCIsCisgICAgICAgICJEZWNyZWFzZSBJbmRlbnQiOiAiTWljxZ9vcmVhesSDIGFsaW5lYXR1bCIsCisgICAgICAgICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICJEaXJlY8WjaWEgZGUgc2NyaWVyZTogc3TDom5nYSAtIGRyZWFwdGEiLAorICAgICAgICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiRGlyZWPFo2lhIGRlIHNjcmllcmU6IGRyZWFwdGEgLSBzdMOibmdhIiwKKyAgICAgICAgIkZvbnQgQ29sb3IiOiAiQ3Vsb2FyZWEgdGV4dHVsdWkiLAorICAgICAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiRG9jdW1lbnRhxaNpZSAoZGV2ZWwpIiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICJMaW5pZSBvcml6b250YWzEgyIsCisgICAgICAgICJJbmNyZWFzZSBJbmRlbnQiOiAiTcSDcmXFn3RlIGFsaW5lYXR1bCIsCisgICAgICAgICJJbnNlcnQgVGFibGUiOiAiSW5zZXJlYXrEgyB1biB0YWJlbCIsCisgICAgICAgICJJbnNlcnQgV2ViIExpbmsiOiAiSW5zZXJlYXrEgy9tb2RpZmljxIMgbGluayIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIkluc2VyZWF6xIMvbW9kaWZpY8SDIGltYWdpbmUiLAorICAgICAgICAiSXRhbGljIjogIkl0YWxpYyIsCisgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICJBbGluaWVyZSBwZSBjZW50cnUiLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIkFsaW5pZXJlIMOubiBhbWJlbGUgcMSDcsWjaSIsCisgICAgICAgICJKdXN0aWZ5IExlZnQiOiAiQWxpbmllcmUgbGEgc3TDom5nYSIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIkFsaW5pZXJlIGxhIGRyZWFwdGEiLAorICAgICAgICAiT3JkZXJlZCBMaXN0IjogIkxpc3TEgyBvcmRvbmF0xIMiLAorICAgICAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiQWR1Y2UgZGluIGNsaXBib2FyZCIsCisgICAgICAgICJQYXRoIjogIkNhbGVhIiwKKyAgICAgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlJlZmFjZSB1bHRpbWEgYWPFo2l1bmUgYW51bGF0xIMiLAorICAgICAgICAiU3RyaWtldGhyb3VnaCI6ICJUxINpYXQiLAorICAgICAgICAiU3Vic2NyaXB0IjogIkluZGljZSBqb3MiLAorICAgICAgICAiU3VwZXJzY3JpcHQiOiAiSW5kaWNlIHN1cyIsCisgICAgICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiU3Vyc2EgSFRNTCAvIFdZU0lXWUciLAorICAgICAgICAiVW5kZXJsaW5lIjogIlN1YmxpbmlhdCIsCisgICAgICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJBbnVsZWF6xIMgdWx0aW1hIGFjxaNpdW5lIiwKKyAgICAgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJFxZ90aSDDrm4gbW9kdWwgVEVYVC4gIEFwYXPEgyBidXRvbnVsIFs8Pl0gcGVudHJ1IGEgdGUgw65udG9hcmNlIMOubiBtb2R1bCBXWVNJV1lHLiIKKyAgICB9LAorICAgICJfX05FV19UUkFOU0xBVElPTlNfXyI6IHsKKyAgICAgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgICAgICJBYmJyZXZpYXRpb24iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiIiwKKyAgICAgICAgICAgICJFeHBhbnNpb246IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkFib3V0Qm94IjogeworICAgICAgICAgICAgIkNsb3NlIjogIjw8WGluaGE+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJDb3VudGVyIjogeworICAgICAgICAgICAgIi4uLiBpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIkNoYXJzIjogIiIsCisgICAgICAgICAgICAiSFRNTCI6ICIiLAorICAgICAgICAgICAgIldvcmRzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJhY3Rlck1hcCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgc3BlY2lhbCBjaGFyYWN0ZXIiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICAgICAiQ2xpY2sgYSBjb2xvci4uLiI6ICIiLAorICAgICAgICAgICAgIlNhbXBsZSI6ICIiLAorICAgICAgICAgICAgIldlYiBTYWZlOiAiOiAiIiwKKyAgICAgICAgICAgICJDbG9zZSI6ICI8PFhpbmhhPj4iCisgICAgICAgIH0sCisgICAgICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgICAgICJfRGVsZXRlIFJvdyI6ICIiLAorICAgICAgICAgICAgIl9JbWFnZSBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiX01vZGlmeSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1JlbW92ZSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1RhYmxlIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJDX2VsbCBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiQ2hlY19rIExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJDb3B5IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIGEgbGluayI6ICIiLAorICAgICAgICAgICAgIkN1cnJlbnQgVVJMIGlzIjogIiIsCisgICAgICAgICAgICAiQ3V0IjogIiIsCisgICAgICAgICAgICAiRGVfbGV0ZSBDb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgQ2VsbCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIiIsCisgICAgICAgICAgICAiSG93IGRpZCB5b3UgZ2V0IGhlcmU/IChQbGVhc2UgcmVwb3J0ISkiOiAiIiwKKyAgICAgICAgICAgICJJX25zZXJ0IFJvdyBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYWZ0ZXIgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJMaW5rIHBvaW50cyB0bzoiOiAiIiwKKyAgICAgICAgICAgICJNYWtlIGxpbl9rLi4uIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiUGFzdGUiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGVsZW1lbnQ6IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJSb193IFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBpbWFnZSBwcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIFJvdyBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlVubGluayB0aGUgY3VycmVudCBlbGVtZW50IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIiIsCisgICAgICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRlZmluaXRpb25MaXN0IjogeworICAgICAgICAgICAgImRlZmluaXRpb24gZGVzY3JpcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGxpc3QiOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIHRlcm0iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRGlhbG9ncyI6IHsKKyAgICAgICAgICAgICJTb21lIFRleHQgSGVyZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEeW5hbWljQ1NTIjogeworICAgICAgICAgICAgIkNob29zZSBzdHlsZXNoZWV0IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCI6ICIiLAorICAgICAgICAgICAgIlVuZGVmaW5lZCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFZGl0VGFnIjogeworICAgICAgICAgICAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICIiLAorICAgICAgICAgICAgIkVkaXQgVGFnIEJ5IFBlZyI6ICIiLAorICAgICAgICAgICAgIlRhZyBFZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICAgICAiIT0iOiAiIiwKKyAgICAgICAgICAgICIhaW4iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7LSI6ICIiLAorICAgICAgICAgICAgIiZndDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSZndDsiOiAiIiwKKyAgICAgICAgICAgICImbHQ7eCZndDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYCFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgLmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAwYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDJgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgM2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA0YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA3YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDhgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGBlYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsmbmJzcDtgMWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YCt7Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2AtOlxcIGAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLXs6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YENgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGNvc2AiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgbG5gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHBpYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgc2luYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0YW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRpbWVzYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZxdW90O3RleHQmcXVvdDsiOiAiIiwKKyAgICAgICAgICAgICInK2Zvcm11bGErJyI6ICIiLAorICAgICAgICAgICAgIigobiksKGspKSI6ICIiLAorICAgICAgICAgICAgIih4KzEpLyh4LTEpIjogIiIsCisgICAgICAgICAgICAiKiI6ICIiLAorICAgICAgICAgICAgIioqIjogIiIsCisgICAgICAgICAgICAiKy0iOiAiIiwKKyAgICAgICAgICAgICItJmd0OyI6ICIiLAorICAgICAgICAgICAgIi0mbHQ7IjogIiIsCisgICAgICAgICAgICAiLToiOiAiIiwKKyAgICAgICAgICAgICItPSI6ICIiLAorICAgICAgICAgICAgIi8vIjogIiIsCisgICAgICAgICAgICAiL18iOiAiIiwKKyAgICAgICAgICAgICI6LiI6ICIiLAorICAgICAgICAgICAgIj0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiQCI6ICIiLAorICAgICAgICAgICAgIltbYSxiXSxbYyxkXV0iOiAiIiwKKyAgICAgICAgICAgICJcXFxcIjogIiIsCisgICAgICAgICAgICAiXFxuQ2xpY2sgaW4gdGhlIGJveCB0byB1c2UgeW91ciBrZXlib2FyZCBvciB1c2UgdGhlIGJ1dHRvbnNcXG4iOiAiIiwKKyAgICAgICAgICAgICJeXiI6ICIiLAorICAgICAgICAgICAgIl5eXiI6ICIiLAorICAgICAgICAgICAgIl9ffCI6ICIiLAorICAgICAgICAgICAgIl98XyI6ICIiLAorICAgICAgICAgICAgImAhPWAiOiAiIiwKKyAgICAgICAgICAgICJgIWluYCI6ICIiLAorICAgICAgICAgICAgImAmYW5kO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmNhcDtgIjogIiIsCisgICAgICAgICAgICAiYCZjdXA7YCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7LWAiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDt4Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJm9yO2AiOiAiIiwKKyAgICAgICAgICAgICJgJnF1b3Q7dGV4dCZxdW90O2AiOiAiIiwKKyAgICAgICAgICAgICJgKChuKSwoaykpYCI6ICIiLAorICAgICAgICAgICAgImAoeCsxKS8oeC0xKWAiOiAiIiwKKyAgICAgICAgICAgICJgKipgIjogIiIsCisgICAgICAgICAgICAiYCpgIjogIiIsCisgICAgICAgICAgICAiYCstYCI6ICIiLAorICAgICAgICAgICAgImAtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLSZsdDtgIjogIiIsCisgICAgICAgICAgICAiYC06YCI6ICIiLAorICAgICAgICAgICAgImAtPWAiOiAiIiwKKyAgICAgICAgICAgICJgLy9gIjogIiIsCisgICAgICAgICAgICAiYC9fYCI6ICIiLAorICAgICAgICAgICAgImA6LmAiOiAiIiwKKyAgICAgICAgICAgICJgPSZndDtgIjogIiIsCisgICAgICAgICAgICAiYEBgIjogIiIsCisgICAgICAgICAgICAiYFtbYSxiXSxbYyxkXV1gIjogIiIsCisgICAgICAgICAgICAiYFxcXFxgIjogIiIsCisgICAgICAgICAgICAiYF9ffGAiOiAiIiwKKyAgICAgICAgICAgICJgX3xfYCI6ICIiLAorICAgICAgICAgICAgImBBQWAiOiAiIiwKKyAgICAgICAgICAgICJgYWxlcGhgIjogIiIsCisgICAgICAgICAgICAiYGFscGhhYCI6ICIiLAorICAgICAgICAgICAgImBhbmRgIjogIiIsCisgICAgICAgICAgICAiYGJhcmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgQ0NgIjogIiIsCisgICAgICAgICAgICAiYGNjYWAiOiAiIiwKKyAgICAgICAgICAgICJgY2hpYCI6ICIiLAorICAgICAgICAgICAgImBkYXJyYCI6ICIiLAorICAgICAgICAgICAgImBkZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsYCI6ICIiLAorICAgICAgICAgICAgImBEZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRpYW1vbmRgIjogIiIsCisgICAgICAgICAgICAiYGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGR5L2R4YCI6ICIiLAorICAgICAgICAgICAgImBFRWAiOiAiIiwKKyAgICAgICAgICAgICJgZXBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgZXRhYCI6ICIiLAorICAgICAgICAgICAgImBmcmFgIjogIiIsCisgICAgICAgICAgICAiYEdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBnYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ3JhZGAiOiAiIiwKKyAgICAgICAgICAgICJgaGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaGF0YWAiOiAiIiwKKyAgICAgICAgICAgICJgaWZgIjogIiIsCisgICAgICAgICAgICAiYGluYCI6ICIiLAorICAgICAgICAgICAgImBpbnRgIjogIiIsCisgICAgICAgICAgICAiYGlvdGFgIjogIiIsCisgICAgICAgICAgICAiYGthcHBhYCI6ICIiLAorICAgICAgICAgICAgImBMYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYGxhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGltXyh4LSZndDtvbylgIjogIiIsCisgICAgICAgICAgICAiYGxvZ2AiOiAiIiwKKyAgICAgICAgICAgICJgbXVgIjogIiIsCisgICAgICAgICAgICAiYE5OYCI6ICIiLAorICAgICAgICAgICAgImBubmAiOiAiIiwKKyAgICAgICAgICAgICJgbm90YCI6ICIiLAorICAgICAgICAgICAgImBudWAiOiAiIiwKKyAgICAgICAgICAgICJgbytgIjogIiIsCisgICAgICAgICAgICAiYG8uYCI6ICIiLAorICAgICAgICAgICAgImBPL2AiOiAiIiwKKyAgICAgICAgICAgICJgb2ludGAiOiAiIiwKKyAgICAgICAgICAgICJgb21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYE9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBvb2AiOiAiIiwKKyAgICAgICAgICAgICJgb3JgIjogIiIsCisgICAgICAgICAgICAiYG94YCI6ICIiLAorICAgICAgICAgICAgImBwaGlgIjogIiIsCisgICAgICAgICAgICAiYFBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGlgIjogIiIsCisgICAgICAgICAgICAiYHBpYCI6ICIiLAorICAgICAgICAgICAgImBwcm9kYCI6ICIiLAorICAgICAgICAgICAgImBwcm9wYCI6ICIiLAorICAgICAgICAgICAgImBQc2lgIjogIiIsCisgICAgICAgICAgICAiYHBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgUVFgIjogIiIsCisgICAgICAgICAgICAiYHF1YWRgIjogIiIsCisgICAgICAgICAgICAiYHJBcnJgIjogIiIsCisgICAgICAgICAgICAiYHJob2AiOiAiIiwKKyAgICAgICAgICAgICJgcm9vdChuKSh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgUlJgIjogIiIsCisgICAgICAgICAgICAiYHNmYWAiOiAiIiwKKyAgICAgICAgICAgICJgU2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYHNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzcXJ0KHgpYCI6ICIiLAorICAgICAgICAgICAgImBzcXVhcmVgIjogIiIsCisgICAgICAgICAgICAiYHN0YWNrcmVsKC0mZ3Q7KSgrKWAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViYCI6ICIiLAorICAgICAgICAgICAgImBzdWJlYCI6ICIiLAorICAgICAgICAgICAgImBzdW1gIjogIiIsCisgICAgICAgICAgICAiYHN1cGAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwZWAiOiAiIiwKKyAgICAgICAgICAgICJgdGF1YCI6ICIiLAorICAgICAgICAgICAgImBUaGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdGhldGFgIjogIiIsCisgICAgICAgICAgICAiYFRUYCI6ICIiLAorICAgICAgICAgICAgImB0dGFgIjogIiIsCisgICAgICAgICAgICAiYHVhcnJgIjogIiIsCisgICAgICAgICAgICAiYHVsYWAiOiAiIiwKKyAgICAgICAgICAgICJgdXBzaWxvbmAiOiAiIiwKKyAgICAgICAgICAgICJgdXVgIjogIiIsCisgICAgICAgICAgICAiYHZlY2FgIjogIiIsCisgICAgICAgICAgICAiYHZ2YCI6ICIiLAorICAgICAgICAgICAgImB4XyhtbilgIjogIiIsCisgICAgICAgICAgICAiYFhpYCI6ICIiLAorICAgICAgICAgICAgImB4aWAiOiAiIiwKKyAgICAgICAgICAgICJgeHhgIjogIiIsCisgICAgICAgICAgICAiYHpldGFgIjogIiIsCisgICAgICAgICAgICAiYFpaYCI6ICIiLAorICAgICAgICAgICAgImB8LSZndDtgIjogIiIsCisgICAgICAgICAgICAiYHwtLWAiOiAiIiwKKyAgICAgICAgICAgICJgfD09YCI6ICIiLAorICAgICAgICAgICAgImB8X19gIjogIiIsCisgICAgICAgICAgICAiYHx+YCI6ICIiLAorICAgICAgICAgICAgImB+PWAiOiAiIiwKKyAgICAgICAgICAgICJgfnxgIjogIiIsCisgICAgICAgICAgICAiYH5+YCI6ICIiLAorICAgICAgICAgICAgIkFBIjogIiIsCisgICAgICAgICAgICAiYWxlcGgiOiAiIiwKKyAgICAgICAgICAgICJhbHBoYSI6ICIiLAorICAgICAgICAgICAgImFuZCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aCBGb3JtdWxhIElucHV0IjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoTUwgRXhhbXBsZSI6ICIiLAorICAgICAgICAgICAgImJhcmEiOiAiIiwKKyAgICAgICAgICAgICJCYXNlZCBvbiBBU0NJSU1hdGhNTCBieSI6ICIiLAorICAgICAgICAgICAgImJiYSI6ICIiLAorICAgICAgICAgICAgImJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiZXRhIjogIiIsCisgICAgICAgICAgICAiQ0MiOiAiIiwKKyAgICAgICAgICAgICJjY2EiOiAiIiwKKyAgICAgICAgICAgICJjaGkiOiAiIiwKKyAgICAgICAgICAgICJkYXJyIjogIiIsCisgICAgICAgICAgICAiZGRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkZWwiOiAiIiwKKyAgICAgICAgICAgICJkZWx0YSI6ICIiLAorICAgICAgICAgICAgIkRlbHRhIjogIiIsCisgICAgICAgICAgICAiZGlhbW9uZCI6ICIiLAorICAgICAgICAgICAgImRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkeS9keCI6ICIiLAorICAgICAgICAgICAgIkVFIjogIiIsCisgICAgICAgICAgICAiZXBzaSI6ICIiLAorICAgICAgICAgICAgImV0YSI6ICIiLAorICAgICAgICAgICAgIkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFzY2lpTWF0aE1MIHZpc2l0IHRoaXMgcGFnZToiOiAiIiwKKyAgICAgICAgICAgICJGb3JtdWxhIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgImZyYSI6ICIiLAorICAgICAgICAgICAgImdhbW1hIjogIiIsCisgICAgICAgICAgICAiR2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJncmFkIjogIiIsCisgICAgICAgICAgICAiaEFyciI6ICIiLAorICAgICAgICAgICAgImhhcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXRhIjogIiIsCisgICAgICAgICAgICAiaWYiOiAiIiwKKyAgICAgICAgICAgICJpbiI6ICIiLAorICAgICAgICAgICAgIklucHV0IjogIiIsCisgICAgICAgICAgICAiaW50IjogIiIsCisgICAgICAgICAgICAiaW50X2FeYmYoeClkeCI6ICIiLAorICAgICAgICAgICAgImlvdGEiOiAiIiwKKyAgICAgICAgICAgICJrYXBwYSI6ICIiLAorICAgICAgICAgICAgIkxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhcnIiOiAiIiwKKyAgICAgICAgICAgICJsQXJyIjogIiIsCisgICAgICAgICAgICAibGltXyh4LSZndDtvbykiOiAiIiwKKyAgICAgICAgICAgICJtdSI6ICIiLAorICAgICAgICAgICAgIk5OIjogIiIsCisgICAgICAgICAgICAibm4iOiAiIiwKKyAgICAgICAgICAgICJubm4iOiAiIiwKKyAgICAgICAgICAgICJub3QiOiAiIiwKKyAgICAgICAgICAgICJudSI6ICIiLAorICAgICAgICAgICAgIm8rIjogIiIsCisgICAgICAgICAgICAiby4iOiAiIiwKKyAgICAgICAgICAgICJPLyI6ICIiLAorICAgICAgICAgICAgIm9pbnQiOiAiIiwKKyAgICAgICAgICAgICJPbWVnYSI6ICIiLAorICAgICAgICAgICAgIm9tZWdhIjogIiIsCisgICAgICAgICAgICAib28iOiAiIiwKKyAgICAgICAgICAgICJvciI6ICIiLAorICAgICAgICAgICAgIm94IjogIiIsCisgICAgICAgICAgICAicGhpIjogIiIsCisgICAgICAgICAgICAiUGhpIjogIiIsCisgICAgICAgICAgICAicGkiOiAiIiwKKyAgICAgICAgICAgICJQaSI6ICIiLAorICAgICAgICAgICAgIlByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJwcm9kIjogIiIsCisgICAgICAgICAgICAicHJvcCI6ICIiLAorICAgICAgICAgICAgInBzaSI6ICIiLAorICAgICAgICAgICAgIlBzaSI6ICIiLAorICAgICAgICAgICAgIlFRIjogIiIsCisgICAgICAgICAgICAicXVhZCI6ICIiLAorICAgICAgICAgICAgInJBcnIiOiAiIiwKKyAgICAgICAgICAgICJyaG8iOiAiIiwKKyAgICAgICAgICAgICJyb290KG4pKHgpIjogIiIsCisgICAgICAgICAgICAiUlIiOiAiIiwKKyAgICAgICAgICAgICJzZmEiOiAiIiwKKyAgICAgICAgICAgICJzaWdtYSI6ICIiLAorICAgICAgICAgICAgIlNpZ21hIjogIiIsCisgICAgICAgICAgICAic3FydCh4KSI6ICIiLAorICAgICAgICAgICAgInNxdWFyZSI6ICIiLAorICAgICAgICAgICAgInN0YWNrcmVsKC0mZ3Q7KSgrKSI6ICIiLAorICAgICAgICAgICAgInN1YiI6ICIiLAorICAgICAgICAgICAgInN1YmUiOiAiIiwKKyAgICAgICAgICAgICJzdW0iOiAiIiwKKyAgICAgICAgICAgICJzdW1fKG49MSleb28iOiAiIiwKKyAgICAgICAgICAgICJzdXAiOiAiIiwKKyAgICAgICAgICAgICJzdXBlIjogIiIsCisgICAgICAgICAgICAidGF1IjogIiIsCisgICAgICAgICAgICAiVGhldGEiOiAiIiwKKyAgICAgICAgICAgICJ0aGV0YSI6ICIiLAorICAgICAgICAgICAgIlRUIjogIiIsCisgICAgICAgICAgICAidHRhIjogIiIsCisgICAgICAgICAgICAidWFyciI6ICIiLAorICAgICAgICAgICAgInVsYSI6ICIiLAorICAgICAgICAgICAgInVwc2lsb24iOiAiIiwKKyAgICAgICAgICAgICJ1dSI6ICIiLAorICAgICAgICAgICAgInV1dSI6ICIiLAorICAgICAgICAgICAgInZlY2EiOiAiIiwKKyAgICAgICAgICAgICJ2diI6ICIiLAorICAgICAgICAgICAgInZ2diI6ICIiLAorICAgICAgICAgICAgInheKG0rbikiOiAiIiwKKyAgICAgICAgICAgICJ4XyhtbikiOiAiIiwKKyAgICAgICAgICAgICJYaSI6ICIiLAorICAgICAgICAgICAgInhpIjogIiIsCisgICAgICAgICAgICAieHgiOiAiIiwKKyAgICAgICAgICAgICJ6ZXRhIjogIiIsCisgICAgICAgICAgICAiWloiOiAiIiwKKyAgICAgICAgICAgICJ8LSZndDsiOiAiIiwKKyAgICAgICAgICAgICJ8LS0iOiAiIiwKKyAgICAgICAgICAgICJ8PT0iOiAiIiwKKyAgICAgICAgICAgICJ8X18iOiAiIiwKKyAgICAgICAgICAgICJ8fiI6ICIiLAorICAgICAgICAgICAgIn49IjogIiIsCisgICAgICAgICAgICAifnwiOiAiIiwKKyAgICAgICAgICAgICJ+fiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGYW5jeVNlbGVjdHMiOiB7CisgICAgICAgICAgICAiJytvcHQudGV4dCsnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbmRSZXBsYWNlIjogeworICAgICAgICAgICAgIic7XHJcbiAgdmFyIHRhZ2MgPSAnIjogIiIsCisgICAgICAgICAgICAiQ2FzZSBzZW5zaXRpdmUgc2VhcmNoIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIiOiAiIiwKKyAgICAgICAgICAgICJEb25lIjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIHRleHQgeW91IHdhbnQgdG8gZmluZCI6ICIiLAorICAgICAgICAgICAgIkZpbmQgYW5kIFJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJmb3VuZCBpdGVtIjogIiIsCisgICAgICAgICAgICAiZm91bmQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJIaWdobGlnaHQiOiAiIiwKKyAgICAgICAgICAgICJJbmZvcm0gYSByZXBsYWNlbWVudCB3b3JkIjogIiIsCisgICAgICAgICAgICAiTmV4dCI6ICIiLAorICAgICAgICAgICAgIm5vdCBmb3VuZCI6ICIiLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtIjogIiIsCisgICAgICAgICAgICAicmVwbGFjZWQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJTZWFyY2ggZm9yOiI6ICIiLAorICAgICAgICAgICAgIlN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IjogIiIsCisgICAgICAgICAgICAiVW5kbyI6ICIiLAorICAgICAgICAgICAgIldob2xlIHdvcmRzIG9ubHkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiRW50ZXIgdGhlIG5hbWUgZm9yIG5ldyBvcHRpb24uIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgRm9ybS4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBtdWx0aS1saW5lIHRleHQgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcmFkaW8gYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFNlbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgU2VsZWN0Li4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1zIjogeworICAgICAgICAgICAgIidvbkNsaWNrJz0iOiAiIiwKKyAgICAgICAgICAgICJBY2Nlc3MgS2V5OiI6ICIiLAorICAgICAgICAgICAgIkFjdGlvbiBVUkw6IjogIiIsCisgICAgICAgICAgICAiQnV0dG9uIFNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkNoZWNrZWQiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zOiI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQgdGV4dCAob3B0aW9uYWwpIjogIiIsCisgICAgICAgICAgICAiRGltZW5zaW9ucyI6ICIiLAorICAgICAgICAgICAgIkRpc2FibGVkIjogIiIsCisgICAgICAgICAgICAiRW5jb2Rpbmc6IjogIiIsCisgICAgICAgICAgICAiRm9yIENvbnRyb2w6IjogIiIsCisgICAgICAgICAgICAiRm9ybSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IElOUFVUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gaGFuZGxlciBzY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiR2V0IjogIiIsCisgICAgICAgICAgICAiSGFyZCI6ICIiLAorICAgICAgICAgICAgIkhlaWdodCBpbiBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkhUTUwtRm9ybSB0byBDR0kgKGRlZmF1bHQpIjogIiIsCisgICAgICAgICAgICAiSW1hZ2Ugc291cmNlIjogIiIsCisgICAgICAgICAgICAiSW5pdGlhbCBUZXh0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiSmF2YXNjcmlwdCBmb3IgYnV0dG9uIGNsaWNrIjogIiIsCisgICAgICAgICAgICAiTGFiZWw6IjogIiIsCisgICAgICAgICAgICAiTGVnZW5kOiI6ICIiLAorICAgICAgICAgICAgIk1heCBsZW5ndGg6IjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY2NlcHRlZCI6ICIiLAorICAgICAgICAgICAgIk1ldGhvZDoiOiAiIiwKKyAgICAgICAgICAgICJtdWx0aXBhcnQgRm9ybSBEYXRhIChGaWxlLVVwbG9hZCkiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gc2VsZWN0IjogIiIsCisgICAgICAgICAgICAibmFtZSBvZiB0aGUgdGV4dGFyZWEiOiAiIiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICIiLAorICAgICAgICAgICAgIm5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIm5vd3JhcCI6ICIiLAorICAgICAgICAgICAgIk9mZiI6ICIiLAorICAgICAgICAgICAgIlBoeXNpY2FsIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIGEgTGFiZWwiOiAiIiwKKyAgICAgICAgICAgICJQb3N0IjogIiIsCisgICAgICAgICAgICAicHJlIjogIiIsCisgICAgICAgICAgICAiUmVhZCBPbmx5IjogIiIsCisgICAgICAgICAgICAiUm93czoiOiAiIiwKKyAgICAgICAgICAgICJTaXplIG9mIHRleHQgYm94IGluIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJTaXplOiI6ICIiLAorICAgICAgICAgICAgIlNvZnQiOiAiIiwKKyAgICAgICAgICAgICJUYWIgSW5kZXg6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IEZyYW1lOiI6ICIiLAorICAgICAgICAgICAgIlRleHQ6IjogIiIsCisgICAgICAgICAgICAiVVJMIG9mIGltYWdlIjogIiIsCisgICAgICAgICAgICAiVmFsdWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZToiOiAiIiwKKyAgICAgICAgICAgICJWaXJ0dWFsIjogIiIsCisgICAgICAgICAgICAiV2lkdGggaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJXcmFwIE1vZGU6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBOYW1lIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iCisgICAgICAgIH0sCisgICAgICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgICAgICIuLi4iOiAiIiwKKyAgICAgICAgICAgICJDaGFyYWN0ZXIgc2V0OiI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChJU08tODg1OS01KSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChLT0k4LVIpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKFdJTkRPV1MtMTI1MSkiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkczoiOiAiIiwKKyAgICAgICAgICAgICJVVEYtOCAocmVjb21tZW5kZWQpIjogIiIsCisgICAgICAgICAgICAid2VzdGVybiAoSVNPLTg4NTktMSkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRnVsbFNjcmVlbiI6IHsKKyAgICAgICAgICAgICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiR2Vja28iOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAgICAgIiYjeDAwZDc7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9lZGl0IGhvcml6b250YWwgcnVsZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEhvcml6b250YWwgUnVsZSI6ICIiLAorICAgICAgICAgICAgIk5vIHNoYWRpbmciOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbmxpbmVTdHlsZXIiOiB7CisgICAgICAgICAgICAiQ1NTIFN0eWxlIjogIiIsCisgICAgICAgICAgICAiLSI6ICI8PEVxdWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRBbmNob3IiOiB7CisgICAgICAgICAgICAiQW5jaG9yIG5hbWUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQW5jaG9yIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiIiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICIiLAorICAgICAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbDoiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiIiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWw6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICIiLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGZvb3Rub3RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IE5vdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGFnZWJyZWFrIjogeworICAgICAgICAgICAgIlBhZ2UgYnJlYWsiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIEJyZWFrIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNtaWxleSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgU21pbGV5IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICAgICAiXFxuICBUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZ1xcbiI6ICIiLAorICAgICAgICAgICAgIkhpZGUgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMSI6ICIiLAorICAgICAgICAgICAgIkxpbmsyIjogIiIsCisgICAgICAgICAgICAiTGluazMiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNCI6ICIiLAorICAgICAgICAgICAgIkxpbms1IjogIiIsCisgICAgICAgICAgICAiU2hvdyBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmciOiAiIiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgICAgICJBbGwgQ2F0ZWdvcmllcyI6ICIiLAorICAgICAgICAgICAgIkZpbHRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyBIVE1MIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIHRlbXBsYXRlIHZhcmlhYmxlIjogIiIsCisgICAgICAgICAgICAiT25seSBzZWFyY2ggd29yZCBiZWdpbm5pbmciOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIjw8Q2hhckNvdW50ZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICI8PEluc2VydFNuaXBwZXQ+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAgICAgIkNhcHRpb24gZm9yIHRoZSB0YWJsZSI6ICIiLAorICAgICAgICAgICAgIkNlbGwgcGFkZGluZzoiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIHNwYWNpbmc6IjogIiIsCisgICAgICAgICAgICAiQ29sbGFwc2UgYm9yZGVyczoiOiAiIiwKKyAgICAgICAgICAgICJDb2xzOiI6ICIiLAorICAgICAgICAgICAgIkVtIjogIiIsCisgICAgICAgICAgICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIkxheW91IjogIiIsCisgICAgICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJOdW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIiIsCisgICAgICAgICAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICIiLAorICAgICAgICAgICAgIlN0eWxlIG9mIHRoZSBib3JkZXIiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aCB1bml0IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlJvd3M6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iCisgICAgICAgIH0sCisgICAgICAgICJMYW5nTWFya3MiOiB7CisgICAgICAgICAgICAiJm1kYXNoOyBsYW5ndWFnZSAmbWRhc2g7IjogIiIsCisgICAgICAgICAgICAiJywgJyI6ICIiLAorICAgICAgICAgICAgIkVuZ2xpc2giOiAiIiwKKyAgICAgICAgICAgICJGcmVuY2giOiAiIiwKKyAgICAgICAgICAgICJHcmVlayI6ICIiLAorICAgICAgICAgICAgImxhbmd1YWdlIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIkxhdGluIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxpbmtlciI6IHsKKyAgICAgICAgICAgICIocHgpIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yLUxpbmsiOiAiIiwKKyAgICAgICAgICAgICJBbmNob3I6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgQWRkcmVzczoiOiAiIiwKKyAgICAgICAgICAgICJFbWFpbCBMaW5rIjogIiIsCisgICAgICAgICAgICAiTG9jYXRpb24gQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lbnUgQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lc3NhZ2UgVGVtcGxhdGU6IjogIiIsCisgICAgICAgICAgICAiTmV3IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIk9yZGluYXJ5IExpbmsiOiAiIiwKKyAgICAgICAgICAgICJQb3B1cCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJQb3B1cFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUmVzaXplYWJsZToiOiAiIiwKKyAgICAgICAgICAgICJTYW1lIFdpbmRvdyAoanVtcCBvdXQgb2YgZnJhbWVzKSI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbGJhcnM6IjogIiIsCisgICAgICAgICAgICAiU2hvd3MgT24gSG92ZXIiOiAiIiwKKyAgICAgICAgICAgICJTdGF0dXMgQmFyOiI6ICIiLAorICAgICAgICAgICAgIlN1YmplY3Q6IjogIiIsCisgICAgICAgICAgICAiVGl0bGU6IjogIiIsCisgICAgICAgICAgICAiVG9vbGJhcjoiOiAiIiwKKyAgICAgICAgICAgICJVUkwgTGluayI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICIiLAorICAgICAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTmFtZToiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTaXplOiI6ICI8PEZvcm1zPj4iCisgICAgICAgIH0sCisgICAgICAgICJMaXN0VHlwZSI6IHsKKyAgICAgICAgICAgICJDaG9vc2UgbGlzdCBzdHlsZSB0eXBlIChmb3Igb3JkZXJlZCBsaXN0cykiOiAiIiwKKyAgICAgICAgICAgICJEZWNpbWFsIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciBncmVlayBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgbGF0aW4gbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIHJvbWFuIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJVcHBlciBsYXRpbiBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiVXBwZXIgcm9tYW4gbnVtYmVycyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJNb290b29sc0ZpbGVNYW5hZ2VyIjogeworICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk9wZXJhIjogeworICAgICAgICAgICAgIk1BUksiOiAiIiwKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgdGV4dCBpbiBuZXcgcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiUGFzdGUgYXMgUGxhaW4gVGV4dCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQcmVzZXJ2ZVNjcmlwdHMiOiB7CisgICAgICAgICAgICAiSmF2YVNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIlBIUCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgICAgICInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnY2wnOiAnIjogIiIsCisgICAgICAgICAgICAiQVRUUklCVVRFUyI6ICIiLAorICAgICAgICAgICAgIkNvbG9ycyI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSBUQUcgeW91IHdhbnQgdG8gaW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiTm8gQ1NTIGNsYXNzIGF2YWlhYmxlIjogIiIsCisgICAgICAgICAgICAiT2siOiAiIiwKKyAgICAgICAgICAgICJPUFRJT05TIjogIiIsCisgICAgICAgICAgICAiUXVpY2sgVGFnIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlRBR3MiOiAiIiwKKyAgICAgICAgICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBUQUciOiAiIiwKKyAgICAgICAgICAgICJZb3UgaGF2ZSB0byBzZWxlY3Qgc29tZSB0ZXh0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNhdmVTdWJtaXQiOiB7CisgICAgICAgICAgICAiaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAgICAgICAgICJSZWFkeSI6ICIiLAorICAgICAgICAgICAgIlNhdmUiOiAiIiwKKyAgICAgICAgICAgICJTYXZpbmcuLi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiU2V0SWQiOiB7CisgICAgICAgICAgICAiSUQvTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQgYW5kIE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQvTmFtZSI6ICIiLAorICAgICAgICAgICAgIlNldCBJRC9OYW1lIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiQ2xvc2luZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIkNsb3NpbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIkNvbnZlcnQgYWxsIHF1b3RlcyBhbmQgZGFzaGVzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIGF1dG9tYXRpYyByZXBsYWNlbWVudHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN0eWxpc3QiOiB7CisgICAgICAgICAgICAiU3R5bGVzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBTZWxlY3Rpb24gT25seSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIHVwIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBTY29wZSI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYWwgdGlkeSB1cCBhbmQgY29ycmVjdGlvbiBvZiBzb21lIHByb2JsZW1zLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzZWxlY3QgZnJvbSB0aGUgZm9sbG93aW5nIGNsZWFuaW5nIG9wdGlvbnMuLi4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc3RhbmQgYnkgd2hpbGUgY2xlYW5pbmcgaW4gcHJvY2Vzcy4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGlnbm1lbnQgKGxlZnQvcmlnaHQvanVzdGlmeSkuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBjbGFzc2VzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBBbGwgSFRNTCBUYWdzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBzdHlsZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0eXBlZmFjZXMgKGZvbnQgXCJzdHlsZXNcIikuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGVtcGhhc2lzIGFuZCBhbm5vdGF0aW9ucy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgbGFuZyBhdHRyaWJ1dGVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBQYXJhZ3JhcGhzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cy4iOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzIHdpdGggbm9uLWRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzLiI6ICIiLAorICAgICAgICAgICAgIlZpZ29yb3VzbHkgcHVyZ2UgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiQ2VsbCBUeXBlOiI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIGRvd24iOiAiIiwKKyAgICAgICAgICAgICJDZWxscyB0byB0aGUgcmlnaHQsIGFuZCI6ICIiLAorICAgICAgICAgICAgIkRvIE5vdCBDaGFuZ2UiOiAiIiwKKyAgICAgICAgICAgICJGcmFtZSBhbmQgYm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkhlYWRlciAodGgpIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY3VycmVudCBjZWxsIHdpdGg6IjogIiIsCisgICAgICAgICAgICAiTm9ybWFsICh0ZCkiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJSb3dzIjogIjw8Rm9ybXM+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuc2F2ZWRDaGFuZ2VzIjogeworICAgICAgICAgICAgIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgZWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIldlYktpdCI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiPDxHZWNrbz4+IgorICAgICAgICB9LAorICAgICAgICAiWGluaGEiOiB7CisgICAgICAgICAgICAiJiM4MjEyOyBmb250ICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiJiM4MjEyOyBzaXplICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICIxICg4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjIgKDEwIHB0KSI6ICIiLAorICAgICAgICAgICAgIjMgKDEyIHB0KSI6ICIiLAorICAgICAgICAgICAgIjQgKDE0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjUgKDE4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjYgKDI0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjcgKDM2IHB0KSI6ICIiLAorICAgICAgICAgICAgIkFkZHJlc3MiOiAiIiwKKyAgICAgICAgICAgICJBcmlhbCI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICIiLAorICAgICAgICAgICAgIkNsb3NlIjogIiIsCisgICAgICAgICAgICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICIiLAorICAgICAgICAgICAgIkNvdXJpZXIgTmV3IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFN0YXR1c2JhciI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBUb29sYmFyIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0wICh6ZXJvKSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMSAuLiBDVFJMLTYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUEiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUoiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUwiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLU4iOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVgiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVoiOiAiIiwKKyAgICAgICAgICAgICJFZGl0b3IgSGVscCI6ICIiLAorICAgICAgICAgICAgIkVOVEVSIjogIiIsCisgICAgICAgICAgICAiRXJyb3IgTG9hZGluZyBYaW5oYS4gIERldmVsb3BlcnMsIGNoZWNrIHRoZSBFcnJvciBDb25zb2xlIGZvciBpbmZvcm1hdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGaW5pc2hpbmciOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0ZWQiOiAiIiwKKyAgICAgICAgICAgICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiIiwKKyAgICAgICAgICAgICJHZW9yZ2lhIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAxIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAyIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAzIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA0IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA1IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA2IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJJbXBhY3QiOiAiIiwKKyAgICAgICAgICAgICJJbml0IGVkaXRvciBzaXplIjogIiIsCisgICAgICAgICAgICAiaW5zZXJ0IGxpbmVicmVhayI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9PdmVyd3JpdGUiOiAiIiwKKyAgICAgICAgICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIENvcmUiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW5zIjogIiIsCisgICAgICAgICAgICAiTVMgV29yZCBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAibmV3IHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIlByaW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICIiLAorICAgICAgICAgICAgIlNhdmUgYXMiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgYWxsIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IENvbG9yIjogIiIsCisgICAgICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJTSElGVC1FTlRFUiI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IEJsb2NrIjogIiIsCisgICAgICAgICAgICAiVGFob21hIjogIiIsCisgICAgICAgICAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogIiIsCisgICAgICAgICAgICAiVGltZXMgTmV3IFJvbWFuIjogIiIsCisgICAgICAgICAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJUb3VjaCBoZXJlIGZpcnN0IHRvIGFjdGl2YXRlIGVkaXRvci4iOiAiIiwKKyAgICAgICAgICAgICJWZXJkYW5hIjogIiIsCisgICAgICAgICAgICAiV2FpdGluZyBmb3IgSWZyYW1lIHRvIGxvYWQuLi4iOiAiIiwKKyAgICAgICAgICAgICJXaW5nRGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIiIsCisgICAgICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiUmVtb3ZlIEN1cnJlbnQgQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIlNldCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IHBhZ2UgYmFja2dyb3VuZCBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlNldCBQYWdlIEJhY2tncm91bmQgSW1hZ2UiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2xpZW50c2lkZVNwZWxsY2hlY2siOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVjayB1c2luZyBpZVNwZWxsIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEwJSI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiIiwKKyAgICAgICAgICAgICIyMDAlIjogIiIsCisgICAgICAgICAgICAiMjUlIjogIiIsCisgICAgICAgICAgICAiNTAlIjogIiIsCisgICAgICAgICAgICAiNzUlIjogIiIsCisgICAgICAgICAgICAiPkxpc3QgVmlldyI6ICIiLAorICAgICAgICAgICAgIj5UaHVtYm5haWwgVmlldyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIiIsCisgICAgICAgICAgICAiQWx0IjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIENvbG9yIjogIiIsCisgICAgICAgICAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIiIsCisgICAgICAgICAgICAiQ3JvcCI6ICIiLAorICAgICAgICAgICAgIkQ6IjogIiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IjogIiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIiIsCisgICAgICAgICAgICAiRWRpdCI6ICIiLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZpbGUgTWFuYWdlciI6ICIiLAorICAgICAgICAgICAgIkZpbGVuYW1lOiI6ICIiLAorICAgICAgICAgICAgIkZpbGVzaXplOiI6ICIiLAorICAgICAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICIiLAorICAgICAgICAgICAgIkZsaXAgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIiIsCisgICAgICAgICAgICAiRm9sZGVyIjogIiIsCisgICAgICAgICAgICAiR0lGIjogIiIsCisgICAgICAgICAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIiIsCisgICAgICAgICAgICAiSDoiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICIiLAorICAgICAgICAgICAgIkpQRUcgSGlnaCI6ICIiLAorICAgICAgICAgICAgIkpQRUcgTG93IjogIiIsCisgICAgICAgICAgICAiSlBFRyBNZWRpdW0iOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIjogIiIsCisgICAgICAgICAgICAiTG9jayI6ICIiLAorICAgICAgICAgICAgIk1hcmtlciI6ICIiLAorICAgICAgICAgICAgIk1heGltdW0gZm9sZGVyIHNpemUgbGltaXQgcmVhY2hlZC4gVXBsb2FkIGRpc2FibGVkLiI6ICIiLAorICAgICAgICAgICAgIk1lYXN1cmUiOiAiIiwKKyAgICAgICAgICAgICJOZXcgRm9sZGVyIjogIiIsCisgICAgICAgICAgICAiTm8gRmlsZXMgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgdmFsdWUiOiAiIiwKKyAgICAgICAgICAgICJQTkciOiAiIiwKKyAgICAgICAgICAgICJQcmVzZXQiOiAiIiwKKyAgICAgICAgICAgICJRdWFsaXR5OiI6ICIiLAorICAgICAgICAgICAgIlJlZnJlc2giOiAiIiwKKyAgICAgICAgICAgICJSZW5hbWUiOiAiIiwKKyAgICAgICAgICAgICJSZXNpemUiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENDVyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIlN0YXJ0IFg6IjogIiIsCisgICAgICAgICAgICAiU3RhcnQgWToiOiAiIiwKKyAgICAgICAgICAgICJUYXJnZXQgV2luZG93IjogIiIsCisgICAgICAgICAgICAiVG9nZ2xlIG1hcmtlciBjb2xvciI6ICIiLAorICAgICAgICAgICAgIlRyYXNoIjogIiIsCisgICAgICAgICAgICAiVXBsb2FkIjogIiIsCisgICAgICAgICAgICAiVzoiOiAiIiwKKyAgICAgICAgICAgICJYOiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIEltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlk6IjogIiIsCisgICAgICAgICAgICAiWm9vbSI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkNsZWFyIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiQ29weSI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkN1dCI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiPDxNb290b29sc0ZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlNhdmUiOiAiPDxTYXZlU3VibWl0Pj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbHRlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEZJTFRFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWx0ZXIiOiAiPDxJbnNlcnRTbmlwcGV0Mj4+IgorICAgICAgICB9LAorICAgICAgICAiSHRtbFRpZHkiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBdXRvLVRpZHkiOiAiIiwKKyAgICAgICAgICAgICJEb24ndCBUaWR5IjogIiIsCisgICAgICAgICAgICAiSFRNTCBUaWR5IjogIiIsCisgICAgICAgICAgICAiVGlkeSBmYWlsZWQuICBDaGVjayB5b3VyIEhUTUwgZm9yIHN5bnRheCBlcnJvcnMuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkltYWdlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElNQUdFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbmdsZToiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgUGljdHVyZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmVzIjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBVc2VybmFtZS9FbWFpbCI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciBOYW1lOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIEZvcm1hdCI6ICIiLAorICAgICAgICAgICAgIkltYWdlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkIjogIiIsCisgICAgICAgICAgICAiTm8gSW1hZ2VzIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gUGhvdG9zIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gVmlkZW9zIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiVGhpcyBTZXJ2ZXIiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVXNlcm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFZpZGVvIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFZpZGVvcyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJDbGVhciI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQ3JvcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJFZGl0IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiR0lGIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgSGlnaCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgTWVkaXVtIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJMb2NrIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJNYXJrZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1lYXN1cmUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlBORyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZXNpemUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlNhdmUiOiAiPDxTYXZlU3VibWl0Pj4iLAorICAgICAgICAgICAgIlN0YXJ0IFg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTdGFydCBZOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRyYXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJXOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJCZWhhdmlvcjoiOiAiIiwKKyAgICAgICAgICAgICJDb250aW51b3VzIjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uOiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBzY3JvbGxpbmcgbWFycXVlZSI6ICIiLAorICAgICAgICAgICAgIk1hcnF1ZWUgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIEFtb3VudDoiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgRGVsYXk6IjogIiIsCisgICAgICAgICAgICAiU2xpZGUiOiAiIiwKKyAgICAgICAgICAgICJTcGVlZCBDb250cm9sIjogIiIsCisgICAgICAgICAgICAiTmFtZSI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIk5hbWUvSUQ6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiVGV4dDoiOiAiPDxGb3Jtcz4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGljdHVyZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVFBJQ1RVUkUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vdCBkZWZpbmVkIjogIiIsCisgICAgICAgICAgICAiIE9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJVcGxvYWQgZmlsZSI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbDoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJTaXplIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJWZXJ0aWNhbDoiOiAiPDxJbnNlcnRJbWFnZT4+IgorICAgICAgICB9LAorICAgICAgICAiTm90ZVNlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTIwJSI6ICIiLAorICAgICAgICAgICAgIjE1MCUiOiAiIiwKKyAgICAgICAgICAgICI4MCUiOiAiIiwKKyAgICAgICAgICAgICJBZGQgR1VJRE8gQ29kZSBpbiBhIHRleHRib3ggb24gdGhlIHBhZ2UiOiAiIiwKKyAgICAgICAgICAgICJBZGQgTUlESSBsaW5rIHRvIGFsbG93IHN0dWRlbnRzIHRvIGhlYXIgdGhlIG11c2ljIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiR1VJRE8gQ29kZSI6ICIiLAorICAgICAgICAgICAgIkd1aWRvIGNvZGUiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBpbiBhcHBsZXQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgR1VJRE8gTXVzaWMgTm90YXRpb24iOiAiIiwKKyAgICAgICAgICAgICJNSURJIEZpbGUiOiAiIiwKKyAgICAgICAgICAgICJTb3VyY2UgQ29kZSI6ICIiLAorICAgICAgICAgICAgIldpdGggTW96aWxsYSwgdGhlIGFwcGxldCB3aWxsIG5vdCBiZSB2aXNpYmxlIGluIGVkaXRvciwgYnV0IG9ubHkgaW4gV2ViIHBhZ2UgYWZ0ZXIgc3VibWl0dGluZy4iOiAiIiwKKyAgICAgICAgICAgICJab29tIDoiOiAiIiwKKyAgICAgICAgICAgICIxMDAlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBQcmV2aWV3IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJab29tIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBHZWFycyBpbiBvcmRlciB0byB1c2UgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZSBhbmQgY29uZmlndXJhdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGluZyBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiSW5zdGFsbCI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIEFib3V0IExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgcmVsb2FkIHRoZSBwYWdlLCBjYXVzaW5nIHlvdSB0byBsb3NlIGFueSB1bnNhdmVkIHdvcmsuICBQcmVzcyBcIk9LXCIgdG8gcmVsb2FkLiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIHVzZXMgR29vZ2xlIEdlYXJzIHRvIGVuYWJsZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlLiAgV2l0aCBHZWFycyBpbnN0YWxsZWQsIHlvdSBjYW4gc2F2ZSBkcmFmdHMgb2YgeW91ciBkb2N1bWVudHMgb24geW91ciBoYXJkIGRyaXZlLCBjb25maWd1cmUgWGluaGEgdG8gbG9vayB0aGUgd2F5IHlvdSB3YW50LCBhbmQgY2FycnkgdGhpcyBpbmZvcm1hdGlvbiB3aGVyZXZlciB5b3UgdXNlIFhpbmhhIG9uIHRoZSB3ZWIuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsZTogIjogIiIsCisgICAgICAgICAgICAiSW1wb3J0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGV0YWlscyI6ICIiLAorICAgICAgICAgICAgIkZpbGUgQnJvd3NlciI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICAgIFRoZXJlIEMgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gIFRoZXJlIEEgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gXCIgVGhlcmUgQiBcIiI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICcgVGhlcmUgRCAnIjogIiIsCisgICAgICAgICAgICAiTGlzdCBvZiBQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJOZXcgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJPcGVuIjogIiIsCisgICAgICAgICAgICAiT3BlbiBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHlvdSdkIGxpa2UgdG8gY3JlYXRlLiI6ICIiLAorICAgICAgICAgICAgIlNhdmUgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgZXJhc2UgYW55IHVuc2F2ZWQgY29udGVudC4gIElmIHlvdSdyZSBjZXJ0YWluLCBwbGVhc2UgY2xpY2sgT0sgdG8gY29udGludWUuIjogIiIsCisgICAgICAgICAgICAiV2ViIFVSTCI6ICIiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiPDxQU0xvY2FsPj4iLAorICAgICAgICAgICAgIkNvcHkiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTWFuYWdlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZW5hbWUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCI6ICI8PEluc2VydE5vdGU+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBTUEVMTENIRUNLRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiSFRNTEFyZWEgU3BlbGwgQ2hlY2tlciI6ICIiLAorICAgICAgICAgICAgIkluZm8iOiAiIiwKKyAgICAgICAgICAgICJMZWFybiI6ICIiLAorICAgICAgICAgICAgInBsaXogd2VpdCA7LSkiOiAiIiwKKyAgICAgICAgICAgICJSZXZlcnQiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVja2VyIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlRlbXBsYXRlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiSW5zZXJ0IHRlbXBsYXRlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuRm9ybWF0IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWxsIjogIiIsCisgICAgICAgICAgICAiQWxsIEhUTUw6IjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgQXJlYSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIG9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0aW5nOiI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCB3aGljaCB0eXBlcyBvZiBmb3JtYXR0aW5nIHlvdSB3b3VsZCBsaWtlIHRvIHJlbW92ZS4iOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Rpb24iOiAiIgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ0NTFkMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL3J1LmpzCkBAIC0wLDAgKzEsMTU3NSBAQAorLy8gWGluaGEgTGFuZ3VhZ2UgQ29tYmluZWQgVHJhbnNsYXRpb24gRmlsZQorLy8KKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElOU1RSVUNUSU9OUyBUTyBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gWW91ciB0cmFuc2xhdGlvbiBtdXN0IGJlIGluIFVURi04IENoYXJhY3RlciBFbmNvZGluZy4KKy8vCisvLyBUaGlzIGlzIGEgSlNPTiBlbmNvZGVkIGZpbGUgKHBsdXMgY29tbWVudHMpLCBzdHJpbmdzIHNob3VsZCBiZSBkb3VibGUtcXVvdGUKKy8vIG9ubHksIGRvIG5vdCB1c2Ugc2luZ2xlIHF1b3RlcyB0byBzdXJyb3VuZCBzdHJpbmdzIC0gImhlbGxvIiwgbm90ICdoZWxsbycKKy8vIGRvIG5vdCBoYXZlIGEgdHJhaWxpbmcgY29tbWEgYWZ0ZXIgdGhlIGxhc3QgZW50cnkgaW4gYSBzZWN0aW9uLgorLy8KKy8vIE9ubHkgZnVsbCBsaW5lIGNvbW1lbnRzIGFyZSBhbGxvd2VkICh0aGF0IGEgY29tbWVudHMgb2NjdXB5IGVudGlyZSBsaW5lcykuCisvLworLy8gU2VhcmNoIGZvciB0aGUgX19ORVdfVFJBTlNMQVRJT05TX18gc2VjdGlvbiBiZWxvdywgdGhpcyBpcyB3aGVyZSB5b3Ugd2lsbAorLy8gd2FudCB0byBmb2N1cywgdGhpcyBzZWN0aW9uIGluY2x1ZGVzIHRoaW5ncyB0aGF0IGRvIG5vdCBwcmVzZW50bHkgaGF2ZSBhIAorLy8gdHJhbnNsYXRpb24gb3IgZm9yIHdoaWNoIHRoZSB0cmFuc2xhdGlvbiBuZWVkcyB0byBiZSBjaGVja2VkIGZvciBhY2N1cmFjeS4KKy8vCisvLyBJbiB0aGUgTmV3IFRyYW5zbGF0aW9ucyBzZWN0aW9uIGEgdHJhbnNsYXRpb24gc3RyaW5nIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICIiCisvLyAgICAgVGhpcyBtZWFucyBpdCBpcyBub3QgdHJhbnNsYXRlZCB5ZXQsIGFkZCB5b3VyIHRyYW5zbGF0aW9uLi4uCisvLyAgICAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIktsaW5nb24gU3RyaW5nIEhlcmUiCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJUcmFuc2xhdGVkIFN0cmluZyBIZXJlIgorLy8gICAgIFRoaXMgbWVhbnMgdGhhdCBhbiBleGlzdGluZyB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcsIGluIHNvbWUgb3RoZXIKKy8vICAgICBzZWN0aW9uIGhhcyBiZWVuIGZvdW5kLCBhbmQgdXNlZC4gIENoZWNrIHRoYXQgaXQgaXMgYXBwcm9wcml0ZSBmb3IgdGhpcworLy8gICAgIHNlY3Rpb24gYW5kIGlmIGl0IGlzLCB0aGF0J3MgZmluZSBsZWF2ZSBpdCBhcyBpcywgb3RoZXJ3aXNlIGNoYW5nZSBhcworLy8gICAgIGFwcHJvcHJpYXRlLgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiPDxBbm90aGVyU2VjdGlvbj4+IgorLy8gICAgIFRoaXMgbWVhbnMgdXNlIHRoZSBzYW1lIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZyBhcyA8PEFub3RoZXJTZWN0aW9uPj4KKy8vICAgICB0aGlzIHNhdmVzIHlvdSByZS10cmFubGF0aW5nIHN0cmluZ3MuICBJZiB0aGUgQ29udGV4dCBvZiB0aGlzIHNlY3Rpb24KKy8vICAgICBhbmQgdGhlIGNvbnRleHQgb2YgQW5vdGhlclNlY3Rpb24gc2VlbSB0aGUgc2FtZSwgdGhhdCdzIGZpbmUgbGVhdmUgaXQKKy8vICAgICB1c2luZyB0aGF0IHRyYW5zbGF0aW9uLCBidXQgaWYgdGhpcyBzZWN0aW9uIG5lZWRzIGEgZGlmZmVyZW50IHRyYW5zbGF0aW9uLCAKKy8vICAgICB5b3UgY2FuIHByb3ZpZGUgaXQgYnkgcmVwbGFjaW5nIHRoZSBsaW5rICg8PEFub3RoZXJTZWN0aW9uPj4pIHdpdGggdGhhdAorLy8gICAgIG5ldyB0cmFuc2xhdGlvbi4gIEZvciBleGFtcGxlIC0gYSAiVGFibGUiIGluIHNheSAiRGF0YVBsdWdpbiIgaXMgCisvLyAgICAgcGVyaGFwcyB0cmFuc2xhdGVkIGRpZmZlcmVudGx5IHRvICJUYWJsZSIgaW4gIkZ1cm5pdHVyZVBsdWdpbiIuCisvLworLy8gVEVTVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBwbGFjZSB5b3VyIHRyYW5zbGF0aW9uIGZpbGUgb24geW91ciB3ZWJzZXJ2ZXIgc29tZXdoZXJlIGZvciBleGFtcGxlCisvLworLy8gICAveGluaGEvbGFuZy9tZXJnZWQvcnUuanMKKy8vCisvLyBhbmQgdGhlbiB0ZWxsIFhpbmhhIHdoZXJlIHRvIGdldCBpdCAoYmVmb3JlIGxvYWRpbmcgWGluaGFDb3JlLmpzKSBieSAKKy8vCisvLyAgX2VkaXRvcl9sYW5nICAgICAgICAgICAgICA9ICdydSc7CisvLyAgX2VkaXRvcl9sYW5nX21lcmdlZF9maWxlICA9ICcveGluaGEvbGFuZy9tZXJnZWQvcnUuanMnOworLy8KKy8vIFhpbmhhIHdpbGwgbG9hZCB5b3VyIG5ldyBsYW5ndWFnZSBkZWZpbml0aW9uLgorLy8KKy8vIFNVQk1JVFRJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgY3JlYXRlIGEgVGlja2V0IG9uIHRoZSBYaW5oYSB3ZWJzaXRlIGFuZCBhdHRhY2ggeW91ciB0cmFuc2xhdGlvbiAKKy8vIGZpbGUuCisvLworLy8gVGhlIFhpbmhhIGRldmVsb3BlcnMgd2lsbCB0YWtlIHlvdXIgZmlsZSBhbmQgdXNlIHRoZSAKKy8vICAgICBjb250cmliL2xjX3NwbGl0X21lcmdlZF9maWxlLnBocAorLy8gc2NyaXB0IHRvIGxvYWQgaXQgaW50byB0aGUgWGluaGEgZGlzdHJpYnV0aW9uLgorCit7CisgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLQntGC0LzQtdC90LAiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiQWJvdXRCb3giOiB7CisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICLQniDRgNC10LTQsNC60YLQvtGA0LUiLAorICAgICAgICAiQ2xvc2UiOiAi0JfQsNC60YDRi9GC0YwiCisgICAgfSwKKyAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIKKyAgICB9LAorICAgICJDaGFyYWN0ZXJNYXAiOiB7CisgICAgICAgICJJbnNlcnQgc3BlY2lhbCBjaGFyYWN0ZXIiOiAi0JLRgdGC0LDQstC40YLRjCDRgdC/0LXRhtC40LDQu9GM0L3Ri9C5INGB0LjQvNCy0L7QuyIKKyAgICB9LAorICAgICJDb2xvclBpY2tlciI6IHsKKyAgICAgICAgIkNsb3NlIjogItCX0LDQutGA0YvRgtGMIiwKKyAgICAgICAgIkNvbG9yOiAiOiAi0KbQstC10YIiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiQ29udGV4dE1lbnUiOiB7CisgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICLQn9C+INGG0LXQvdGC0YDRgyIsCisgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAi0J/QviDRiNC40YDQuNC90LUiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogItCf0L4g0LvQtdCy0L7QvNGDINC60YDQsNGOIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAi0J/QviDQv9GA0LDQstC+0LzRgyDQutGA0LDRjiIKKyAgICB9LAorICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAi0JLRgdGC0LDQstC60LAv0LjQt9C80LXQvdC10L3QuNC1INGB0YHRi9C70LrQuCIsCisgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogItCd0L7QstC+0LUg0L7QutC90L4gKF9ibGFuaykiLAorICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICLQn9C+INGD0LzQvtC70YfQsNC90LjRjiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPdGhlciI6ICLQlNGA0YPQs9C+0LUiLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogItCi0L4g0LbQtSDQvtC60L3QviAoX3NlbGYpIiwKKyAgICAgICAgIlRhcmdldDoiOiAi0J7RgtC60YDRi9Cy0LDRgtGMINCyINC+0LrQvdC1OiIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogItCS0YHQv9C70YvQstCw0Y7RidCw0Y8g0L/QvtC00YHQutCw0LfQutCwIiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAi0KDQvtC00LjRgtC10LvRjNGB0LrQvtC1INC+0LrQvdC+IChfdG9wKSIsCisgICAgICAgICJVUkw6IjogIlVSTDoiLAorICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogItCS0Ysg0LTQvtC70LbQvdGLINCy0YvQtNC10LvQuNGC0Ywg0YLQtdC60YHRgiwg0LrQvtGC0L7RgNGL0Lkg0LHRg9C00LXRgiDQv9GA0LXQvtCx0YDQsNC30L7QstCw0L0g0LIg0YHRgdGL0LvQutGDIgorICAgIH0sCisgICAgIkRlZmluaXRpb25MaXN0IjogeworICAgICAgICAiZGVmaW5pdGlvbiBkZXNjcmlwdGlvbiI6ICLQn9C+0Y/RgdC90LXQvdC40LUiLAorICAgICAgICAiZGVmaW5pdGlvbiBsaXN0IjogItCh0L/QuNGB0L7QuiDRgSDQvtC/0YDQtdC00LXQu9C10L3QuNC10LwiLAorICAgICAgICAiZGVmaW5pdGlvbiB0ZXJtIjogItCX0LDQs9C+0LvQvtCy0L7QuiIKKyAgICB9LAorICAgICJFZGl0VGFnIjogeworICAgICAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLQntGC0LzQtdC90LAiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUHJldmlldyI6ICLQn9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdGL0Lkg0L/RgNC+0YHQvNC+0YLRgCIKKyAgICB9LAorICAgICJFeHRlbmRlZEZpbGVNYW5hZ2VyIjogeworICAgICAgICAiQWJzYm90dG9tIjogItCf0L4g0L3QuNC20L3QtdC5INCz0YDQsNC90LjRhtC1IiwKKyAgICAgICAgIkFic21pZGRsZSI6ICLQn9C+INGB0LXRgNC10LTQuNC90LUg0YLQtdC60YHRgtCwIiwKKyAgICAgICAgIkFsaWduIjogItCS0YvRgNCw0LLQvdC40LLQsNC90LjQtSIsCisgICAgICAgICJCYXNlbGluZSI6ICLQn9C+INC90LjQttC90LXQuSDQs9GA0LDQvdC40YbQtSDRgtC10LrRgdGC0LAiLAorICAgICAgICAiQm9yZGVyIjogItCg0LDQvNC60LAiLAorICAgICAgICAiQm90dG9tIjogItCf0L4g0L3QuNC20L3QtdC80YMg0LrRgNCw0Y4iLAorICAgICAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgICAgICJDbGVhciI6ICLQntGH0LjRgdGC0LjRgtGMIiwKKyAgICAgICAgIkNvbG9yIjogItCm0LLQtdGCIiwKKyAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICLQodC+0YXRgNCw0L3QuNGC0Ywg0L/RgNC+0L/QvtGA0YbQuNC4IiwKKyAgICAgICAgIkNyb3AiOiAi0J7QsdGA0LXQt9Cw0YLRjCIsCisgICAgICAgICJEaXJlY3RvcnkiOiAi0J/QsNC/0LrQsCIsCisgICAgICAgICJEaXJlY3RvcnkgVXAiOiAi0J/QsNC/0LrQsCDQvdCw0LLQtdGA0YUiLAorICAgICAgICAiRWRpdCI6ICLQn9GA0LDQstC60LAiLAorICAgICAgICAiRmlsZW5hbWU6IjogItCY0LzRjyDRhNCw0LnQu9CwIiwKKyAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICLQoNCw0LfQstC10YDQvdGD0YLRjCDQv9C+INCz0L7RgNC40LfQvtC90YLQsNC70LgiLAorICAgICAgICAiRmxpcCBJbWFnZSI6ICLQoNCw0LfQstC10YDQvdGD0YLRjCDQutCw0YDRgtC40L3QutGDIiwKKyAgICAgICAgIkZsaXAgVmVydGljYWwiOiAi0KDQsNC30LLQtdGA0L3Rg9GC0Ywg0L/QviDQstC10YDRgtC40LrQsNC70LgiLAorICAgICAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogItCk0L7RgNC80LDRgiBHSUYg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPLCDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1INC60LDRgNGC0LjQvdC60Lgg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPLiIsCisgICAgICAgICJIZWlnaHQiOiAi0JLRi9GB0L7RgtCwIiwKKyAgICAgICAgIkhlaWdodDoiOiAi0JLRi9GB0L7RgtCwIiwKKyAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogItCd0LXQstC10YDQvdCw0Y8g0LHQsNC30L7QstCw0Y8g0L/QsNC/0LrQsDoiLAorICAgICAgICAiSlBFRyBIaWdoIjogIkpQRUcg0LLRi9GB0L7Qui4iLAorICAgICAgICAiSlBFRyBMb3ciOiAiSlBFRyDQvdC40LfQui4iLAorICAgICAgICAiSlBFRyBNZWRpdW0iOiAiSlBFRyDRgdGA0LXQtNC9LiIsCisgICAgICAgICJMZWZ0IjogItCf0L4g0LvQtdCy0L7QvNGDINC60YDQsNGOIiwKKyAgICAgICAgIkxvYWRpbmciOiAi0JfQsNCz0YDRg9C30LrQsCIsCisgICAgICAgICJMb2NrIjogItCR0LvQvtC60LjRgNC+0LLQutCwIiwKKyAgICAgICAgIk1hcmdpbiI6ICLQntGC0YHRgtGD0L8iLAorICAgICAgICAiTWFya2VyIjogItCc0LDRgNC60LXRgCIsCisgICAgICAgICJNZWFzdXJlIjogItCY0LfQvNC10YDQtdC90LjQtSIsCisgICAgICAgICJNaWRkbGUiOiAi0J/QvtGB0YDQtdC00LjQvdC1IiwKKyAgICAgICAgIk5ldyBGb2xkZXIiOiAi0J3QvtCy0LDRjyDQv9Cw0L/QutCwIiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAi0J3QvtCy0L7QtSDQvtC60L3QviAoX2JsYW5rKSIsCisgICAgICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAi0J3QtdGCINC00L7RgdGC0YPQv9C90YvRhSDQutCw0YDRgtC40L3QvtC6IiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi0J/QviDRg9C80L7Qu9GH0LDQvdC40Y4iLAorICAgICAgICAiTm90IHNldCI6ICLQndC1INGD0YHRgtCw0L3QvtCy0LvQtdC90L4iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUGFkZGluZyI6ICLQn9C+0LvRjyIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogItCg0LDRgdC/0L7Qu9C+0LbQtdC90LjQtSDQuNC30L7QsdGA0LDQttC10L3QuNGPIiwKKyAgICAgICAgIlByZXZpZXciOiAi0J/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3Ri9C5INC/0YDQvtGB0LzQvtGC0YAiLAorICAgICAgICAiUXVhbGl0eToiOiAi0JrQsNGH0LXRgdGC0LLQviIsCisgICAgICAgICJSZWZyZXNoIjogItCe0LHQvdC+0LLQuNGC0YwiLAorICAgICAgICAiUmVzaXplIjogItCc0LDRgdGI0LDQsdC40YDQvtCy0LDRgtGMIiwKKyAgICAgICAgIlJpZ2h0IjogItCf0L4g0L/RgNCw0LLQvtC80YMg0LrRgNCw0Y4iLAorICAgICAgICAiUm90YXRlIjogItCf0L7QstC10YDQvdGD0YLRjCIsCisgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAi0J/QvtCy0LXRgNC90YPRgtGMINC60LDRgNGC0LjQvdC60YMiLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogItCi0L4g0LbQtSDQvtC60L3QviAoX3NlbGYpIiwKKyAgICAgICAgIlNhdmUiOiAi0KHQvtGF0YDQsNC90LjRgtGMIiwKKyAgICAgICAgIlN0YXJ0IFg6IjogItCd0LDRh9Cw0LvQviBYIiwKKyAgICAgICAgIlN0YXJ0IFk6IjogItCd0LDRh9Cw0LvQviBZIiwKKyAgICAgICAgIlRleHR0b3AiOiAi0J/QviDQstC10YDRhdC90LXQuSDQs9GA0LDQvdC40YbQtSDRgtC10LrRgdGC0LAiLAorICAgICAgICAiVGl0bGUgKHRvb2x0aXApIjogItCS0YHQv9C70YvQstCw0Y7RidCw0Y8g0L/QvtC00YHQutCw0LfQutCwIiwKKyAgICAgICAgIlRvcCI6ICLQn9C+INCy0LXRgNGF0L3QtdC80YMg0LrRgNCw0Y4iLAorICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICLQoNC+0LTQuNGC0LXQu9GM0YHQutC+0LUg0L7QutC90L4gKF90b3ApIiwKKyAgICAgICAgIlRyYXNoIjogItCa0L7RgNC30LjQvdCwIiwKKyAgICAgICAgIlVwbG9hZCI6ICLQl9Cw0LPRgNGD0LfQuNGC0YwiLAorICAgICAgICAiVzoiOiAi0Kg6IiwKKyAgICAgICAgIldpZHRoIjogItCo0LjRgNC40L3QsCIsCisgICAgICAgICJXaWR0aDoiOiAi0KjQuNGA0LjQvdCwIgorICAgIH0sCisgICAgIkZpbmRSZXBsYWNlIjogeworICAgICAgICAiQ2FzZSBzZW5zaXRpdmUgc2VhcmNoIjogItCf0L7QuNGB0Log0YEg0YPRh9C10YLQvtC8INGA0LXQs9C40YHRgtGA0LAiLAorICAgICAgICAiQ2xlYXIiOiAi0J7Rh9C40YHRgtC40YLRjCIsCisgICAgICAgICJEb25lIjogIk9LIiwKKyAgICAgICAgIkVudGVyIHRoZSB0ZXh0IHlvdSB3YW50IHRvIGZpbmQiOiAi0JLQstC10LTQuNGC0LUg0YLQtdC60YHRgiwg0LrQvtGC0L7RgNGL0Lkg0LLRiyDRhdC+0YLQuNGC0LUg0L3QsNC50YLQuCIsCisgICAgICAgICJGaW5kIGFuZCBSZXBsYWNlIjogItCd0LDQudGC0Lgg0Lgg0LfQsNC80LXQvdC40YLRjCIsCisgICAgICAgICJIaWdobGlnaHQiOiAi0JLRi9C00LXQu9C40YLRjCIsCisgICAgICAgICJJbmZvcm0gYSByZXBsYWNlbWVudCB3b3JkIjogItCf0L7QutCw0LfQsNGC0Ywg0LfQsNC80LXRidCw0Y7RidC10LUg0YHQu9C+0LLQviIsCisgICAgICAgICJOZXh0IjogItCh0LvQtdC0LiIsCisgICAgICAgICJPcHRpb25zIjogItCe0L/RhtC40LgiLAorICAgICAgICAiUmVwbGFjZSB3aXRoOiI6ICLQl9Cw0LzQtdC90LjRgtGMINGBIiwKKyAgICAgICAgIlNlYXJjaCBmb3I6IjogItCd0LDQudGC0LgiLAorICAgICAgICAiU3Vic3RpdHV0ZSBhbGwgb2NjdXJyZW5jZXMiOiAi0JfQsNC80LXQvdC40YLRjCDQstGB0LUg0LLRhdC+0LbQtNC10L3QuNGPIiwKKyAgICAgICAgIlN1YnN0aXR1dGUgdGhpcyBvY2N1cnJlbmNlPyI6ICLQl9Cw0LzQtdC90LjRgtGMINGN0YLQviDQstGF0L7QttC00LXQvdC40LU/IiwKKyAgICAgICAgIlVuZG8iOiAi0J7RgtC80LXQvdC40YLRjCIsCisgICAgICAgICJXaG9sZSB3b3JkcyBvbmx5IjogItCi0L7Qu9GM0LrQviDRgdC70L7QstCwINGG0LXQu9C40LrQvtC8IiwKKyAgICAgICAgImZvdW5kIGl0ZW0iOiAi0L3QsNC50YLQuCIsCisgICAgICAgICJmb3VuZCBpdGVtcyI6ICLQvdCw0LnRgtC4IiwKKyAgICAgICAgIm5vdCBmb3VuZCI6ICLQvdC1INC90LDQudC00LXQvdC+IiwKKyAgICAgICAgInJlcGxhY2VkIGl0ZW0iOiAi0LfQsNC80LXQvdC10L3QvdCw0Y8iLAorICAgICAgICAicmVwbGFjZWQgaXRlbXMiOiAi0LfQsNC80LXQvdC10L3QvdGL0LUiCisgICAgfSwKKyAgICAiRm9ybXMiOiB7CisgICAgICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiVVJMINC40LfQvtCx0YDQsNC20LXQvdC40Y8iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3B0aW9ucyI6ICLQntC/0YbQuNC4IiwKKyAgICAgICAgIlJvd3M6IjogItCh0YLRgNC+0LrQuCIKKyAgICB9LAorICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLQntGC0LzQtdC90LAiLAorICAgICAgICAiRGVzY3JpcHRpb246IjogItCe0L/QuNGB0LDQvdC40LUiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiRnVsbFNjcmVlbiI6IHsKKyAgICAgICAgIk1heGltaXplL01pbmltaXplIEVkaXRvciI6ICLQoNCw0LfQstC10YDQvdGD0YLRjC/QodCy0LXRgNC90YPRgtGMINGA0LXQtNCw0LrRgtC+0YAiCisgICAgfSwKKyAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICJBbGlnbm1lbnQ6IjogItCS0YvRgNCw0LLQvdC40LLQsNC90LjQtSIsCisgICAgICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIiwKKyAgICAgICAgIkNlbnRlciI6ICLQptC10L3RgtGAIiwKKyAgICAgICAgIkNvbG9yOiI6ICLQptCy0LXRgiIsCisgICAgICAgICJIZWlnaHQ6IjogItCS0YvRgdC+0YLQsCIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAi0JPQvtGA0LjQt9C+0L3RgtCw0LvRjNC90YvQuSDRgNCw0LfQtNC10LvQuNGC0LXQu9GMIiwKKyAgICAgICAgIkxheW91dCI6ICLQoNCw0YHQv9C+0LvQvtC20LXQvdC40LUiLAorICAgICAgICAiTGVmdCI6ICLQn9C+INC70LXQstC+0LzRgyDQutGA0LDRjiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJSaWdodCI6ICLQn9C+INC/0YDQsNCy0L7QvNGDINC60YDQsNGOIiwKKyAgICAgICAgIldpZHRoOiI6ICLQqNC40YDQuNC90LAiLAorICAgICAgICAicGVyY2VudCI6ICLQv9GA0L7RhtC10L3RgtC+0LIiLAorICAgICAgICAicGl4ZWxzIjogItC/0LjQutGB0LXQu9C10LkiCisgICAgfSwKKyAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAiQWJzYm90dG9tIjogItCf0L4g0L3QuNC20L3QtdC5INCz0YDQsNC90LjRhtC1IiwKKyAgICAgICAgIkFic21pZGRsZSI6ICLQn9C+INGB0LXRgNC10LTQuNC90LUg0YLQtdC60YHRgtCwIiwKKyAgICAgICAgIkFuZ2xlOiI6ICLQo9Cz0L7QuyIsCisgICAgICAgICJCYXNlbGluZSI6ICLQn9C+INC90LjQttC90LXQuSDQs9GA0LDQvdC40YbQtSDRgtC10LrRgdGC0LAiLAorICAgICAgICAiQm90dG9tIjogItCf0L4g0L3QuNC20L3QtdC80YMg0LrRgNCw0Y4iLAorICAgICAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgICAgICJDbGVhciI6ICLQntGH0LjRgdGC0LjRgtGMIiwKKyAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICLQodC+0YXRgNCw0L3QuNGC0Ywg0L/RgNC+0L/QvtGA0YbQuNC4IiwKKyAgICAgICAgIkNyb3AiOiAi0J7QsdGA0LXQt9Cw0YLRjCIsCisgICAgICAgICJEaXJlY3RvcnkiOiAi0J/QsNC/0LrQsCIsCisgICAgICAgICJEaXJlY3RvcnkgVXAiOiAi0J/QsNC/0LrQsCDQvdCw0LLQtdGA0YUiLAorICAgICAgICAiRWRpdCI6ICLQn9GA0LDQstC60LAiLAorICAgICAgICAiRmlsZW5hbWU6IjogItCY0LzRjyDRhNCw0LnQu9CwIiwKKyAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICLQoNCw0LfQstC10YDQvdGD0YLRjCDQv9C+INCz0L7RgNC40LfQvtC90YLQsNC70LgiLAorICAgICAgICAiRmxpcCBJbWFnZSI6ICLQoNCw0LfQstC10YDQvdGD0YLRjCDQutCw0YDRgtC40L3QutGDIiwKKyAgICAgICAgIkZsaXAgVmVydGljYWwiOiAi0KDQsNC30LLQtdGA0L3Rg9GC0Ywg0L/QviDQstC10YDRgtC40LrQsNC70LgiLAorICAgICAgICAiRm9sZGVyIE5hbWU6IjogItCd0LDQt9Cy0LDQvdC40LUg0L/QsNC/0LrQuDoiLAorICAgICAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogItCk0L7RgNC80LDRgiBHSUYg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPLCDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1INC60LDRgNGC0LjQvdC60Lgg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPLiIsCisgICAgICAgICJIZWlnaHQ6IjogItCS0YvRgdC+0YLQsCIsCisgICAgICAgICJJbWFnZSBGb3JtYXQiOiAi0KTQvtGA0LzQsNGCINC60LDRgNGC0LjQvdC60LgiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogItCS0YHRgtCw0LLQutCwINC60LDRgNGC0LjQvdC60LgiLAorICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAi0J3QtdCy0LXRgNC90LDRjyDQsdCw0LfQvtCy0LDRjyDQv9Cw0L/QutCwOiIsCisgICAgICAgICJKUEVHIEhpZ2giOiAiSlBFRyDQstGL0YHQvtC6LiIsCisgICAgICAgICJKUEVHIExvdyI6ICJKUEVHINC90LjQt9C6LiIsCisgICAgICAgICJKUEVHIE1lZGl1bSI6ICJKUEVHINGB0YDQtdC00L0uIiwKKyAgICAgICAgIkxlZnQiOiAi0J/QviDQu9C10LLQvtC80YMg0LrRgNCw0Y4iLAorICAgICAgICAiTG9jayI6ICLQkdC70L7QutC40YDQvtCy0LrQsCIsCisgICAgICAgICJNYXJrZXIiOiAi0JzQsNGA0LrQtdGAIiwKKyAgICAgICAgIk1lYXN1cmUiOiAi0JjQt9C80LXRgNC10L3QuNC1IiwKKyAgICAgICAgIk1pZGRsZSI6ICLQn9C+0YHRgNC10LTQuNC90LUiLAorICAgICAgICAiTmV3IEZvbGRlciI6ICLQndC+0LLQsNGPINC/0LDQv9C60LAiLAorICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogItCd0LXRgiDQtNC+0YHRgtGD0L/QvdGL0YUg0LrQsNGA0YLQuNC90L7QuiIsCisgICAgICAgICJObyBJbWFnZXMgRm91bmQiOiAi0JrQsNGA0YLQuNC90L7QuiDQvdC1INC90LDQudC00LXQvdC+IiwKKyAgICAgICAgIk5vdCBzZXQiOiAi0J3QtSDRg9GB0YLQsNC90L7QstC70LXQvdC+IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAi0KDQsNGB0L/QvtC70L7QttC10L3QuNC1INC40LfQvtCx0YDQsNC20LXQvdC40Y8iLAorICAgICAgICAiUXVhbGl0eToiOiAi0JrQsNGH0LXRgdGC0LLQviIsCisgICAgICAgICJSZWZyZXNoIjogItCe0LHQvdC+0LLQuNGC0YwiLAorICAgICAgICAiUmVzaXplIjogItCc0LDRgdGI0LDQsdC40YDQvtCy0LDRgtGMIiwKKyAgICAgICAgIlJpZ2h0IjogItCf0L4g0L/RgNCw0LLQvtC80YMg0LrRgNCw0Y4iLAorICAgICAgICAiUm90YXRlIjogItCf0L7QstC10YDQvdGD0YLRjCIsCisgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAi0J/QvtCy0LXRgNC90YPRgtGMINC60LDRgNGC0LjQvdC60YMiLAorICAgICAgICAiU2F2ZSI6ICLQodC+0YXRgNCw0L3QuNGC0YwiLAorICAgICAgICAiU3RhcnQgWDoiOiAi0J3QsNGH0LDQu9C+IFgiLAorICAgICAgICAiU3RhcnQgWToiOiAi0J3QsNGH0LDQu9C+IFkiLAorICAgICAgICAiVGV4dHRvcCI6ICLQn9C+INCy0LXRgNGF0L3QtdC5INCz0YDQsNC90LjRhtC1INGC0LXQutGB0YLQsCIsCisgICAgICAgICJUb3AiOiAi0J/QviDQstC10YDRhdC90LXQvNGDINC60YDQsNGOIiwKKyAgICAgICAgIlRyYXNoIjogItCa0L7RgNC30LjQvdCwIiwKKyAgICAgICAgIlc6IjogItCoOiIsCisgICAgICAgICJXaWR0aDoiOiAi0KjQuNGA0LjQvdCwIgorICAgIH0sCisgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgIkJhY2tncm91bmQiOiAi0KTQvtC9IiwKKyAgICAgICAgIkJhc2VsaW5lIjogItCf0L4g0L3QuNC20L3QtdC5INCz0YDQsNC90LjRhtC1INGC0LXQutGB0YLQsCIsCisgICAgICAgICJCb3JkZXIiOiAi0KDQsNC80LrQsCIsCisgICAgICAgICJCb3R0b20iOiAi0J/QviDQvdC40LbQvdC10LzRgyDQutGA0LDRjiIsCisgICAgICAgICJDZW50ZXIiOiAi0KbQtdC90YLRgCIsCisgICAgICAgICJDaGFyIjogItCh0LjQvNCy0L7QuyIsCisgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICLQndCw0LrQu9Cw0LTRi9Cy0LDRjtGJ0LjQtdGB0Y8g0YDQsNC80LrQuCIsCisgICAgICAgICJGRyBDb2xvciI6ICLQptCy0LXRgiDQv9C10YDQtdC00L3QtdCz0L4g0L/Qu9Cw0L3QsCIsCisgICAgICAgICJGbG9hdCI6ICLQntCx0YLQtdC60LDQvdC40LUiLAorICAgICAgICAiSGVpZ2h0IjogItCS0YvRgdC+0YLQsCIsCisgICAgICAgICJJbWFnZSBVUkwiOiAiVVJMINC60LDRgNGC0LjQvdC60LgiLAorICAgICAgICAiSnVzdGlmeSI6ICLQn9C+INC/0YDQsNCy0L7QvNGDINC60YDQsNGOIiwKKyAgICAgICAgIkxheW91dCI6ICLQoNCw0YHQv9C+0LvQvtC20LXQvdC40LUiLAorICAgICAgICAiTGVmdCI6ICLQn9C+INC70LXQstC+0LzRgyDQutGA0LDRjiIsCisgICAgICAgICJNYXJnaW4iOiAi0J7RgtGB0YLRg9C/IiwKKyAgICAgICAgIk1pZGRsZSI6ICLQn9C+0YHRgNC10LTQuNC90LUiLAorICAgICAgICAiTm9uZSI6ICLQndC40YfQtdCz0L4iLAorICAgICAgICAiUGFkZGluZyI6ICLQn9C+0LvRjyIsCisgICAgICAgICJSaWdodCI6ICLQn9C+INC/0YDQsNCy0L7QvNGDINC60YDQsNGOIiwKKyAgICAgICAgIlRleHQgYWxpZ24iOiAi0JLRi9GA0LDQstC90LjQstCw0L3QuNC1INGC0LXRgdGC0LAiLAorICAgICAgICAiVG9wIjogItCf0L4g0LLQtdGA0YXQvdC10LzRgyDQutGA0LDRjiIsCisgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICLQktC10YDRgtC40LrQsNC70YzQvdC+0LUgINCy0YvRgNCw0LLQvdC40LLQsNC90LjQtSIsCisgICAgICAgICJXaWR0aCI6ICLQqNC40YDQuNC90LAiLAorICAgICAgICAicGVyY2VudCI6ICLQv9GA0L7RhtC10L3RgtC+0LIiLAorICAgICAgICAicGl4ZWxzIjogItC/0LjQutGB0LXQu9C10LkiCisgICAgfSwKKyAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICLQn9C+INC90LjQttC90LXQuSDQs9GA0LDQvdC40YbQtSIsCisgICAgICAgICJBYnNtaWRkbGUiOiAi0J/QviDRgdC10YDQtdC00LjQvdC1INGC0LXQutGB0YLQsCIsCisgICAgICAgICJBbGlnbm1lbnQ6IjogItCS0YvRgNCw0LLQvdC40LLQsNC90LjQtSIsCisgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAi0JDQu9GM0YLQtdGA0L3QsNGC0LjQstC90YvQuSDRgtC10LrRgdGCIiwKKyAgICAgICAgIkJhc2VsaW5lIjogItCf0L4g0L3QuNC20L3QtdC5INCz0YDQsNC90LjRhtC1INGC0LXQutGB0YLQsCIsCisgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICLQotC+0LvRidC40L3QsCDRgNCw0LzQutC4IiwKKyAgICAgICAgIkJvdHRvbSI6ICLQn9C+INC90LjQttC90LXQvNGDINC60YDQsNGOIiwKKyAgICAgICAgIkNhbmNlbCI6ICLQntGC0LzQtdC90LAiLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogItCS0YHRgtCw0LLRjNGC0LUg0LDQtNGA0LXRgSDQuNC30L7QsdGA0LDQttC10L3QuNGPIiwKKyAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogItCU0LvRjyDQsdGA0LDRg9C30LXRgNC+0LIsINC60L7RgtC+0YDRi9C1INC90LUg0L7RgtC+0LHRgNCw0LbQsNGO0YIg0LrQsNGA0YLQuNC90LrQuCIsCisgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAi0JPQvtGA0LjQt9C+0L3RgtCw0LvRjNC90YvQtSDQv9C+0LvRjyIsCisgICAgICAgICJIb3Jpem9udGFsOiI6ICLQn9C+INCz0L7RgNC40LfQvtC90YLQsNC70LgiLAorICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAi0J/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3Ri9C5INC/0YDQvtGB0LzQvtGC0YAiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJVUkwg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAi0JLRgdGC0LDQstC60LAg0LrQsNGA0YLQuNC90LrQuCIsCisgICAgICAgICJMYXlvdXQiOiAi0KDQsNGB0L/QvtC70L7QttC10L3QuNC1IiwKKyAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAi0J7RgdGC0LDQstGM0YLQtSDQv9GD0YHRgtGL0LwsINGH0YLQvtCx0Ysg0YPQsdGA0LDRgtGMINGA0LDQvNC60YMiLAorICAgICAgICAiTGVmdCI6ICLQn9C+INC70LXQstC+0LzRgyDQutGA0LDRjiIsCisgICAgICAgICJNaWRkbGUiOiAi0J/QvtGB0YDQtdC00LjQvdC1IiwKKyAgICAgICAgIk5vdCBzZXQiOiAi0J3QtSDRg9GB0YLQsNC90L7QstC70LXQvdC+IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAi0KDQsNGB0L/QvtC70L7QttC10L3QuNC1INC40LfQvtCx0YDQsNC20LXQvdC40Y8iLAorICAgICAgICAiUHJldmlldyI6ICLQn9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdGL0Lkg0L/RgNC+0YHQvNC+0YLRgCIsCisgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAi0J/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3Ri9C5INC/0YDQvtGB0LzQvtGC0YAg0LIg0L7RgtC00LXQu9GM0L3QvtC8INC+0LrQvdC1IiwKKyAgICAgICAgIlJpZ2h0IjogItCf0L4g0L/RgNCw0LLQvtC80YMg0LrRgNCw0Y4iLAorICAgICAgICAiU3BhY2luZyI6ICLQntGC0YHRgtGD0L/RiyIsCisgICAgICAgICJUZXh0dG9wIjogItCf0L4g0LLQtdGA0YXQvdC10Lkg0LPRgNCw0L3QuNGG0LUg0YLQtdC60YHRgtCwIiwKKyAgICAgICAgIlRvcCI6ICLQn9C+INCy0LXRgNGF0L3QtdC80YMg0LrRgNCw0Y4iLAorICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICLQktC10YDRgtC40LrQsNC70YzQvdGL0LUg0L/QvtC70Y8iLAorICAgICAgICAiVmVydGljYWw6IjogItCf0L4g0LLQtdGA0YLQuNC60LDQu9C4IiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAi0JLRiyDQtNC+0LvQttC90Ysg0LLQstC10YHRgtC4IFVSTCIKKyAgICB9LAorICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgICAgICJIZWlnaHQ6IjogItCS0YvRgdC+0YLQsCIsCisgICAgICAgICJMZWZ0IjogItCf0L4g0LvQtdCy0L7QvNGDINC60YDQsNGOIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlJpZ2h0IjogItCf0L4g0L/RgNCw0LLQvtC80YMg0LrRgNCw0Y4iLAorICAgICAgICAiV2lkdGg6IjogItCo0LjRgNC40L3QsCIKKyAgICB9LAorICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIKKyAgICB9LAorICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAiQWJzYm90dG9tIjogItCf0L4g0L3QuNC20L3QtdC5INCz0YDQsNC90LjRhtC1IiwKKyAgICAgICAgIkFic21pZGRsZSI6ICLQn9C+INGB0LXRgNC10LTQuNC90LUg0YLQtdC60YHRgtCwIiwKKyAgICAgICAgIkFsaWdubWVudDoiOiAi0JLRi9GA0LDQstC90LjQstCw0L3QuNC1IiwKKyAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICLQkNC70YzRgtC10YDQvdCw0YLQuNCy0L3Ri9C5INGC0LXQutGB0YIiLAorICAgICAgICAiQmFzZWxpbmUiOiAi0J/QviDQvdC40LbQvdC10Lkg0LPRgNCw0L3QuNGG0LUg0YLQtdC60YHRgtCwIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogItCi0L7Qu9GJ0LjQvdCwINGA0LDQvNC60LgiLAorICAgICAgICAiQm90dG9tIjogItCf0L4g0L3QuNC20L3QtdC80YMg0LrRgNCw0Y4iLAorICAgICAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAi0JLRgdGC0LDQstGM0YLQtSDQsNC00YDQtdGBINC40LfQvtCx0YDQsNC20LXQvdC40Y8iLAorICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAi0JTQu9GPINCx0YDQsNGD0LfQtdGA0L7Qsiwg0LrQvtGC0L7RgNGL0LUg0L3QtSDQvtGC0L7QsdGA0LDQttCw0Y7RgiDQutCw0YDRgtC40L3QutC4IiwKKyAgICAgICAgIkhlaWdodDoiOiAi0JLRi9GB0L7RgtCwIiwKKyAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICLQk9C+0YDQuNC30L7QvdGC0LDQu9GM0L3Ri9C1INC/0L7Qu9GPIiwKKyAgICAgICAgIkhvcml6b250YWw6IjogItCf0L4g0LPQvtGA0LjQt9C+0L3RgtCw0LvQuCIsCisgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICLQn9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdGL0Lkg0L/RgNC+0YHQvNC+0YLRgCIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIlVSTCDQuNC30L7QsdGA0LDQttC10L3QuNGPIiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICLQktGB0YLQsNCy0LrQsCDQutCw0YDRgtC40L3QutC4IiwKKyAgICAgICAgIkxheW91dCI6ICLQoNCw0YHQv9C+0LvQvtC20LXQvdC40LUiLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICLQntGB0YLQsNCy0YzRgtC1INC/0YPRgdGC0YvQvCwg0YfRgtC+0LHRiyDRg9Cx0YDQsNGC0Ywg0YDQsNC80LrRgyIsCisgICAgICAgICJMZWZ0IjogItCf0L4g0LvQtdCy0L7QvNGDINC60YDQsNGOIiwKKyAgICAgICAgIk1pZGRsZSI6ICLQn9C+0YHRgNC10LTQuNC90LUiLAorICAgICAgICAiTm90IHNldCI6ICLQndC1INGD0YHRgtCw0L3QvtCy0LvQtdC90L4iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICLQoNCw0YHQv9C+0LvQvtC20LXQvdC40LUg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyIsCisgICAgICAgICJQcmV2aWV3IjogItCf0YDQtdC00LLQsNGA0LjRgtC10LvRjNC90YvQuSDQv9GA0L7RgdC80L7RgtGAIiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICLQn9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdGL0Lkg0L/RgNC+0YHQvNC+0YLRgCDQsiDQvtGC0LTQtdC70YzQvdC+0Lwg0L7QutC90LUiLAorICAgICAgICAiUmlnaHQiOiAi0J/QviDQv9GA0LDQstC+0LzRgyDQutGA0LDRjiIsCisgICAgICAgICJTcGFjaW5nIjogItCe0YLRgdGC0YPQv9GLIiwKKyAgICAgICAgIlRleHR0b3AiOiAi0J/QviDQstC10YDRhdC90LXQuSDQs9GA0LDQvdC40YbQtSDRgtC10LrRgdGC0LAiLAorICAgICAgICAiVG9wIjogItCf0L4g0LLQtdGA0YXQvdC10LzRgyDQutGA0LDRjiIsCisgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogItCS0LXRgNGC0LjQutCw0LvRjNC90YvQtSDQv9C+0LvRjyIsCisgICAgICAgICJWZXJ0aWNhbDoiOiAi0J/QviDQstC10YDRgtC40LrQsNC70LgiLAorICAgICAgICAiV2lkdGg6IjogItCo0LjRgNC40L3QsCIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0IjogeworICAgICAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLQntGC0LzQtdC90LAiCisgICAgfSwKKyAgICAiSW5zZXJ0VGFibGUiOiB7CisgICAgICAgICJBYnNib3R0b20iOiAi0J/QviDQvdC40LbQvdC10Lkg0LPRgNCw0L3QuNGG0LUiLAorICAgICAgICAiQWJzbWlkZGxlIjogItCf0L4g0YHQtdGA0LXQtNC40L3QtSDRgtC10LrRgdGC0LAiLAorICAgICAgICAiQWxpZ25tZW50OiI6ICLQktGL0YDQsNCy0L3QuNCy0LDQvdC40LUiLAorICAgICAgICAiQmFzZWxpbmUiOiAi0J/QviDQvdC40LbQvdC10Lkg0LPRgNCw0L3QuNGG0LUg0YLQtdC60YHRgtCwIiwKKyAgICAgICAgIkJvcmRlciI6ICLQoNCw0LzQutCwIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogItCi0L7Qu9GJ0LjQvdCwINGA0LDQvNC60LgiLAorICAgICAgICAiQm90dG9tIjogItCf0L4g0L3QuNC20L3QtdC80YMg0LrRgNCw0Y4iLAorICAgICAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgICAgICJDYXB0aW9uIjogItCX0LDQs9C+0LvQvtCy0L7QuiIsCisgICAgICAgICJDZWxsIHBhZGRpbmc6IjogItCf0L7Qu9GPINCyINGP0YfQtdC50LrQsNGFIiwKKyAgICAgICAgIkNlbGwgc3BhY2luZzoiOiAi0KDQsNGB0YHRgtC+0Y/QvdC40LUg0LzQtdC20LTRgyDRj9GH0LXQudC60LDQvNC4IiwKKyAgICAgICAgIkNvbHM6IjogItCh0YLQvtC70LHRhtGLIiwKKyAgICAgICAgIkVtIjogImVtIiwKKyAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAi0KHRgtC+0LvQsdGG0Ysg0YTQuNC60YHQuNGA0L7QstCw0L3QvdC+0Lkg0YjQuNGA0LjQvdGLIiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICLQktGB0YLQsNCy0LrQsCDRgtCw0LHQu9C40YbRiyIsCisgICAgICAgICJMYXlvdXQiOiAi0KDQsNGB0L/QvtC70L7QttC10L3QuNC1IiwKKyAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAi0J7RgdGC0LDQstGM0YLQtSDQv9GD0YHRgtGL0LwsINGH0YLQvtCx0Ysg0YPQsdGA0LDRgtGMINGA0LDQvNC60YMiLAorICAgICAgICAiTGVmdCI6ICLQn9C+INC70LXQstC+0LzRgyDQutGA0LDRjiIsCisgICAgICAgICJNaWRkbGUiOiAi0J/QvtGB0YDQtdC00LjQvdC1IiwKKyAgICAgICAgIk5vdCBzZXQiOiAi0J3QtSDRg9GB0YLQsNC90L7QstC70LXQvdC+IiwKKyAgICAgICAgIk51bWJlciBvZiBjb2x1bW5zIjogItCa0L7Qu9C40YfQtdGB0YLQstC+INGB0YLQvtC70LHRhtC+0LIiLAorICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAi0JrQvtC70LjRh9C10YHRgtCy0L4g0YHRgtGA0L7QuiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQZXJjZW50IjogItC/0YDQvtGG0LXQvdGC0YsiLAorICAgICAgICAiUGl4ZWxzIjogItC/0LjQutGB0LXQu9GLIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAi0KDQsNGB0L/QvtC70L7QttC10L3QuNC1INGC0LDQsdC70LjRhtGLIiwKKyAgICAgICAgIlJpZ2h0IjogItCf0L4g0L/RgNCw0LLQvtC80YMg0LrRgNCw0Y4iLAorICAgICAgICAiUm93czoiOiAi0KHRgtGA0L7QutC4IiwKKyAgICAgICAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAi0KDQsNGB0YHRgtC+0Y/QvdC40LUg0LzQtdC20LTRgyDRgdC+0YHQtdC00L3QuNC80Lgg0Y/Rh9C10LnQutCw0LzQuCIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogItCg0LDRgdGB0YLQvtGP0L3QuNC1INC80LXQttC00YMg0LPRgNCw0L3QuNGG0LXQuSDRj9GH0LXQudC60Lgg0Lgg0YLQtdC60YHRgtC+0LwiLAorICAgICAgICAiU3BhY2luZyI6ICLQntGC0YHRgtGD0L/RiyIsCisgICAgICAgICJUZXh0dG9wIjogItCf0L4g0LLQtdGA0YXQvdC10Lkg0LPRgNCw0L3QuNGG0LUg0YLQtdC60YHRgtCwIiwKKyAgICAgICAgIlRvcCI6ICLQn9C+INCy0LXRgNGF0L3QtdC80YMg0LrRgNCw0Y4iLAorICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogItCo0LjRgNC40L3QsCDRgtCw0LHQu9C40YbRiyIsCisgICAgICAgICJXaWR0aCB1bml0IjogItCV0LTQuNC90LjRhtGLINC40LfQvNC10YDQtdC90LjRjyIsCisgICAgICAgICJXaWR0aDoiOiAi0KjQuNGA0LjQvdCwIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAi0JLRiyDQtNC+0LvQttC90Ysg0LLQstC10YHRgtC4INC60L7Qu9C40YfQtdGB0YLQstC+INGB0YLQvtC70LHRhtC+0LIiLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICLQktGLINC00L7Qu9C20L3RiyDQstCy0LXRgdGC0Lgg0LrQvtC70LjRh9C10YHRgtCy0L4g0YHRgtGA0L7QuiIKKyAgICB9LAorICAgICJMaW5rZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICLQktGB0YLQsNCy0LrQsC/QuNC30LzQtdC90LXQvdC40LUg0YHRgdGL0LvQutC4IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlRhcmdldDoiOiAi0J7RgtC60YDRi9Cy0LDRgtGMINCyINC+0LrQvdC1OiIsCisgICAgICAgICJVUkw6IjogIlVSTDoiCisgICAgfSwKKyAgICAiTGlzdFR5cGUiOiB7CisgICAgICAgICJDaG9vc2UgbGlzdCBzdHlsZSB0eXBlIChmb3Igb3JkZXJlZCBsaXN0cykiOiAi0JLRi9Cx0LXRgNC40YLQtSDRgdGC0LjQu9GMINGB0L/QuNGB0LrQvtCyICjQtNC70Y8g0YPQv9C+0YDRj9C00L7Rh9C10L3QvdGL0YUg0YHQv9C40YHQutC+0LIpIiwKKyAgICAgICAgIkRlY2ltYWwgbnVtYmVycyI6ICLQlNC10YHRj9GC0LjRh9C90YvQtSDRh9C40YHQu9CwIiwKKyAgICAgICAgIkxvd2VyIGdyZWVrIGxldHRlcnMiOiAi0KHRgtGA0L7Rh9C90YvQtSDQs9GA0LXRh9C10YHQutC40LUg0YHQuNC80LLQvtC70YsiLAorICAgICAgICAiTG93ZXIgbGF0aW4gbGV0dGVycyI6ICLQodGC0YDQvtGH0L3Ri9C1INC70LDRgtC40L3RgdC60LjQtSDRgdC40LzQstC+0LvRiyIsCisgICAgICAgICJMb3dlciByb21hbiBudW1iZXJzIjogItCh0YLRgNC+0YfQvdGL0LUg0YDQvtC80LDQvdGB0LrQuNC1INGH0LjRgdC70LAiLAorICAgICAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICLQl9Cw0LPQu9Cw0LLQvdGL0LUg0LvQsNGC0LjQvdGB0LrQuNC1INGB0LjQvNCy0L7Qu9GLIiwKKyAgICAgICAgIlVwcGVyIHJvbWFuIG51bWJlcnMiOiAi0JfQsNCz0LvQsNCy0L3Ri9C1INGA0L7QvNCw0L3RgdC60LjQtSDRh9C40YHQu9CwIgorICAgIH0sCisgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIiwKKyAgICAgICAgIkltYWdlIFByZXZpZXciOiAi0J/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3Ri9C5INC/0YDQvtGB0LzQvtGC0YAiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3B0aW9ucyI6ICLQntC/0YbQuNC4IiwKKyAgICAgICAgIlByZXZpZXciOiAi0J/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3Ri9C5INC/0YDQvtGB0LzQvtGC0YAiLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogItCf0YDQtdC00LLQsNGA0LjRgtC10LvRjNC90YvQuSDQv9GA0L7RgdC80L7RgtGAINCyINC+0YLQtNC10LvRjNC90L7QvCDQvtC60L3QtSIKKyAgICB9LAorICAgICJPcGVyYSI6IHsKKyAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAi0JrQvdC+0L/QutCwINCS0YHRgtCw0LLQuNGC0Ywg0L3QtSDRgNCw0LHQvtGC0LDQtdGCINCyINCx0YDQsNGD0LfQtdGA0LDRhSDQvdCwINC+0YHQvdC+0LLQtSBNb3ppbGxhICjQv9C+INGC0LXRhdC90LjRh9C10YHQutC40Lwg0L/RgNC40YfQuNC90LDQvCwg0YHQstGP0LfQsNC90L3Ri9C8INGBINCx0LXQt9C+0L/QsNGB0L3QvtGB0YLRjNGOKS4g0J3QsNC20LzQuNGC0LUgQ3RybC1WINC90LAg0LrQu9Cw0LLQuNCw0YLRg9GA0LUsINGH0YLQvtCx0Ysg0LLRgdGC0LDQstC40YLRjC4iCisgICAgfSwKKyAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLQntGC0LzQtdC90LAiCisgICAgfSwKKyAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQYXN0ZSBhcyBQbGFpbiBUZXh0IjogItCS0YHRgtCw0LLQuNGC0Ywg0LrQsNC6INC+0LHRi9GH0L3Ri9C5INGC0LXQutGB0YIiCisgICAgfSwKKyAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIiwKKyAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICLQn9Cw0L/QutCwINC90LDQstC10YDRhSIsCisgICAgICAgICJGaWxlbmFtZSI6ICLQmNC80Y8g0YTQsNC50LvQsCIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAi0JLRgdGC0LDQstC60LAg0LrQsNGA0YLQuNC90LrQuCIsCisgICAgICAgICJOZXcgRm9sZGVyIjogItCd0L7QstCw0Y8g0L/QsNC/0LrQsCIsCisgICAgICAgICJTYXZlIjogItCh0L7RhdGA0LDQvdC40YLRjCIKKyAgICB9LAorICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLQntGC0LzQtdC90LAiCisgICAgfSwKKyAgICAiU2F2ZVN1Ym1pdCI6IHsKKyAgICAgICAgIlJlYWR5IjogItCT0L7RgtC+0LLQviIsCisgICAgICAgICJTYXZlIjogItCh0L7RhdGA0LDQvdC40YLRjCIsCisgICAgICAgICJTYXZpbmcuLi4iOiAi0KHQvtGF0YDQsNC90LXQvdC40LUuLi4iLAorICAgICAgICAiaW4gcHJvZ3Jlc3MiOiAi0L/QvtC20LDQu9GD0LnRgdGC0LAsINC20LTQuNGC0LUiCisgICAgfSwKKyAgICAiU2V0SWQiOiB7CisgICAgICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLQntGC0LzQtdC90LAiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUmVwbGFjZSB3aXRoIjogItCX0LDQvNC10L3QuNGC0Ywg0YEiCisgICAgfSwKKyAgICAiU3R5bGlzdCI6IHsKKyAgICAgICAgIlN0eWxlcyI6ICLQodGC0LjQu9C4IgorICAgIH0sCisgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlRhYmxlT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgIkFsbCBmb3VyIHNpZGVzIjogItCS0YHQtSA0INGB0YLQvtGA0L7QvdGLIiwKKyAgICAgICAgIkJvcmRlcnMiOiAi0KDQsNC80LrQuCIsCisgICAgICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIiwKKyAgICAgICAgIkNhcHRpb24iOiAi0JfQsNCz0L7Qu9C+0LLQvtC6IiwKKyAgICAgICAgIkNlbGwgUHJvcGVydGllcyI6ICLQodCy0L7QudGB0YLQstCwINGP0YfQtdC10LoiLAorICAgICAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogItCh0LLQvtC50YHRgtCy0LAg0Y/Rh9C10LXQuiIsCisgICAgICAgICJEZWxldGUgY2VsbCI6ICLQo9C00LDQu9C40YLRjCDRj9GH0LXQudC60YMiLAorICAgICAgICAiRGVsZXRlIGNvbHVtbiI6ICLQo9C00LDQu9C40YLRjCDRgdGC0L7Qu9Cx0LXRhiIsCisgICAgICAgICJEZWxldGUgcm93IjogItCj0LTQsNC70LjRgtGMINGB0YLRgNC+0LrRgyIsCisgICAgICAgICJEZXNjcmlwdGlvbiI6ICLQntC/0LjRgdCw0L3QuNC1IiwKKyAgICAgICAgIkZyYW1lcyI6ICLQpNGA0LXQudC80YsiLAorICAgICAgICAiSW5zZXJ0IGNlbGwgYWZ0ZXIiOiAi0JLRgdGC0LDQstC40YLRjCDRj9GH0LXQudC60YMg0L/QvtGB0LvQtSIsCisgICAgICAgICJJbnNlcnQgY2VsbCBiZWZvcmUiOiAi0JLRgdGC0LDQstC40YLRjCDRj9GH0LXQudC60YMg0LTQviIsCisgICAgICAgICJJbnNlcnQgY29sdW1uIGFmdGVyIjogItCS0YHRgtCw0LLQuNGC0Ywg0YHRgtC+0LvQsdC10YYg0L/QvtGB0LvQtSIsCisgICAgICAgICJJbnNlcnQgY29sdW1uIGJlZm9yZSI6ICLQktGB0YLQsNCy0LjRgtGMINGB0YLQvtC70LHQtdGGINC00L4iLAorICAgICAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICLQktGB0YLQsNCy0LjRgtGMINGB0YLRgNC+0LrRgyDQv9C+0YHQu9C1IiwKKyAgICAgICAgIkluc2VydCByb3cgYmVmb3JlIjogItCS0YHRgtCw0LLQuNGC0Ywg0YHRgtGA0L7QutGDINC00L4iLAorICAgICAgICAiTWVyZ2UgY2VsbHMiOiAi0J7QsdGK0LXQtNC40L3QuNGC0Ywg0Y/Rh9C10LnQutC4IiwKKyAgICAgICAgIk5vIHJ1bGVzIjogItCd0LXRgiDQu9C40L3QtdC50LrQuCIsCisgICAgICAgICJObyBzaWRlcyI6ICLQndC10YIg0YHRgtC+0YDQvtC9IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBhZGRpbmciOiAi0J/QvtC70Y8iLAorICAgICAgICAiUGxlYXNlIGNsaWNrIGludG8gc29tZSBjZWxsIjogItCf0L7QttCw0LvRg9C50YHRgtCwINGJ0LXQu9C60L3QuNGC0LUg0LIg0L3QtdC60L7RgtC+0YDRi9C1INGP0YfQtdC50LrQuCIsCisgICAgICAgICJSb3cgUHJvcGVydGllcyI6ICLQodCy0L7QudGB0YLQstCwINGB0YLRgNC+0LoiLAorICAgICAgICAiUm93IHByb3BlcnRpZXMiOiAi0KHQstC+0LnRgdGC0LLQsCDRgdGC0YDQvtC60LgiLAorICAgICAgICAiUm93cyI6ICLQodGC0YDQvtC60LgiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICLQm9C40L3QtdC50LrQuCDQv9C+0Y/QstGP0YLRgdGPINC80LXQttC00YMg0LLRgdC10LzQuCDRgdGC0YDQvtC60LDQvNC4INC4INGB0YLQvtC70LHRhtCw0LzQuCIsCisgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGNvbHVtbnMgb25seSI6ICLQm9C40L3QtdC50LrQuCDQv9C+0Y/QstGP0YLRgdGPINGC0L7Qu9GM0LrQviDQvNC10LbQtNGDINGB0YLQvtC70LHRhtCw0LzQuCIsCisgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIHJvd3Mgb25seSI6ICLQm9C40L3QtdC50LrQuCDQv9C+0Y/QstGP0YLRgdGPINGC0L7Qu9GM0LrQviDQvNC10LbQtNGDINGB0YLRgNC+0LrQsNC80LgiLAorICAgICAgICAiU3BhY2luZyI6ICLQntGC0YHRgtGD0L/RiyIsCisgICAgICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogItCf0L7Qu9GPINC4INC+0YLRgdGC0YPQv9GLIiwKKyAgICAgICAgIlNwbGl0IGNvbHVtbiI6ICLQoNCw0LfQtNC10LvQuNGC0Ywg0YHRgtC+0LvQsdC10YYiLAorICAgICAgICAiU3BsaXQgcm93IjogItCg0LDQt9C00LXQu9C40YLRjCDRgdGC0YDQvtC60YMiLAorICAgICAgICAiU3VtbWFyeSI6ICLQodCy0L7QtNC60LAiLAorICAgICAgICAiVGFibGUgUHJvcGVydGllcyI6ICLQodCy0L7QudGB0YLQstCwINGC0LDQsdC70LjRhiIsCisgICAgICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogItCh0LLQvtC50YHRgtCy0LAg0YLQsNCx0LvQuNGGIiwKKyAgICAgICAgIlRoZSBib3R0b20gc2lkZSBvbmx5IjogItCi0L7Qu9GM0LrQviDQvdC40LbQvdC40Lkg0LrRgNCw0LkiLAorICAgICAgICAiVGhlIGxlZnQtaGFuZCBzaWRlIG9ubHkiOiAi0KLQvtC70YzQutC+INC70LXQstGL0Lkg0LrRgNCw0LkiLAorICAgICAgICAiVGhlIHJpZ2h0IGFuZCBsZWZ0IHNpZGVzIG9ubHkiOiAi0KLQvtC70YzQutC+INC70LXQstGL0Lkg0Lgg0L/RgNCw0LLRi9C5INC60YDQsNC5IiwKKyAgICAgICAgIlRoZSByaWdodC1oYW5kIHNpZGUgb25seSI6ICLQotC+0LvRjNC60L4g0L/RgNCw0LLRi9C5INC60YDQsNC5IiwKKyAgICAgICAgIlRoZSB0b3AgYW5kIGJvdHRvbSBzaWRlcyBvbmx5IjogItCi0L7Qu9GM0LrQviDQstC10YDRhdC90LjQuSDQuCDQvdC40LbQvdC40Lkg0LrRgNCw0LkiLAorICAgICAgICAiVGhlIHRvcCBzaWRlIG9ubHkiOiAi0KLQvtC70YzQutC+INCy0LXRgNGF0L3QuNC5INC60YDQsNC5IiwKKyAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiI6ICJYaW5oYSDQvtGC0LrQsNC30LDQu9Cw0YHRjCDRg9C00LDQu9GP0YLRjCDQv9C+0YHQu9C10LTQvdGO0Y4g0Y/Rh9C10LnQutGDINCyINGB0YLRgNC+0LrQtS4iLAorICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICJYaW5oYSDQvtGC0LrQsNC30LDQu9Cw0YHRjCDRg9C00LDQu9GP0YLRjCDQv9C+0YHQu9C10LTQvdC40Lkg0YHRgtC+0LvQsdC10YYg0LIg0YLQsNCx0LvQuNGG0LUuIiwKKyAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iOiAiWGluaGEg0L7RgtC60LDQt9Cw0LvQsNGB0Ywg0YPQtNCw0LvRj9GC0Ywg0L/QvtGB0LvQtdC00L3RjtGOINGB0YLRgNC+0LrRgyDQsiDRgtCw0LHQu9C40YbQtS4iLAorICAgICAgICAicGl4ZWxzIjogItC/0LjQutGB0LXQu9C10LkiCisgICAgfSwKKyAgICAiVGVtcGxhdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIgorICAgIH0sCisgICAgIlVuRm9ybWF0IjogeworICAgICAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJYaW5oYSI6IHsKKyAgICAgICAgIiYjODIxMjsgZm9udCAmIzgyMTI7IjogIiYjODIxMjsg0YjRgNC40YTRgiAmIzgyMTI7IiwKKyAgICAgICAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiJiM4MjEyOyDRhNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QuNC1ICYjODIxMjsiLAorICAgICAgICAiJiM4MjEyOyBzaXplICYjODIxMjsiOiAiJiM4MjEyOyDRgNCw0LfQvNC10YAgJiM4MjEyOyIsCisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICLQniDRgNC10LTQsNC60YLQvtGA0LUiLAorICAgICAgICAiQWRkcmVzcyI6ICLQkNC00YDQtdGBIiwKKyAgICAgICAgIkJhY2tncm91bmQgQ29sb3IiOiAi0KbQstC10YIg0YTQvtC90LAiLAorICAgICAgICAiQm9sZCI6ICLQn9C+0LvRg9C20LjRgNC90YvQuSIsCisgICAgICAgICJCdWxsZXRlZCBMaXN0IjogItCc0LDRgNC60LjRgNC+0LLQsNC90L3Ri9C5INGB0L/QuNGB0L7QuiIsCisgICAgICAgICJDbGVhbiBjb250ZW50IHBhc3RlZCBmcm9tIFdvcmQiOiAi0J7Rh9C40YHRgtC40YLRjCDRgtC10LrRgdGCLCDQstGB0YLQsNCy0LvQtdC90L3Ri9C5INC40LcgV29yZCIsCisgICAgICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICLQo9C00LDQu9C40YLRjCDQvdC10L/QvtGB0YDQtdC00YHRgtCy0LXQvdC90L7QtSDQt9Cw0LTQsNC90LjQtSDRiNGA0LjRhNGC0L7QsiIsCisgICAgICAgICJDbGVhciBNU09mZmljZSB0YWdzIjogItCj0LTQsNC70LjRgtGMINGA0LDQt9C80LXRgtC60YMgTVNPZmZpY2UiLAorICAgICAgICAiQ2xvc2UiOiAi0JfQsNC60YDRi9GC0YwiLAorICAgICAgICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICLQodC+0LfQtNCw0L3QuNC1INC+0LHRitC10LrRgtCwIiwKKyAgICAgICAgIkNvcHkgc2VsZWN0aW9uIjogItCa0L7Qv9C40YDQvtCy0LDRgtGMIiwKKyAgICAgICAgIkNyZWF0ZSBUb29sYmFyIjogItCh0L7Qt9C00LDQvdC40LUg0L/QsNC90LXQu9C4INC40L3RgdGC0YDRg9C80LXQvdGC0L7QsiIsCisgICAgICAgICJDdXJyZW50IHN0eWxlIjogItCi0LXQutGD0YnQuNC5INGB0YLQuNC70YwiLAorICAgICAgICAiQ3V0IHNlbGVjdGlvbiI6ICLQktGL0YDQtdC30LDRgtGMIiwKKyAgICAgICAgIkRlY3JlYXNlIEluZGVudCI6ICLQo9C80LXQvdGM0YjQuNGC0Ywg0L7RgtGB0YLRg9C/IiwKKyAgICAgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogItCd0LDQv9GA0LDQstC70LXQvdC40LUg0YHQu9C10LLQsCDQvdCw0L/RgNCw0LLQviIsCisgICAgICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICLQndCw0L/RgNCw0LLQu9C10L3QuNC1INGB0L/RgNCw0LLQsCDQvdCw0LvQtdCy0L4iLAorICAgICAgICAiRU5URVIiOiAiRU5URVIiLAorICAgICAgICAiRWRpdG9yIEhlbHAiOiAi0J/QvtC80L7RidGMIiwKKyAgICAgICAgIkZvbnQgQ29sb3IiOiAi0KbQstC10YIg0YjRgNC40YTRgtCwIiwKKyAgICAgICAgIkZvcm1hdHRlZCI6ICLQntGC0YTQvtGA0LzQsNGC0LjRgNC+0LLQsNC90L3Ri9C5INGC0LXQutGB0YIiLAorICAgICAgICAiSGVhZGluZyAxIjogItCX0LDQs9C+0LvQvtCy0L7QuiAxIiwKKyAgICAgICAgIkhlYWRpbmcgMiI6ICLQl9Cw0LPQvtC70L7QstC+0LogMiIsCisgICAgICAgICJIZWFkaW5nIDMiOiAi0JfQsNCz0L7Qu9C+0LLQvtC6IDMiLAorICAgICAgICAiSGVhZGluZyA0IjogItCX0LDQs9C+0LvQvtCy0L7QuiA0IiwKKyAgICAgICAgIkhlYWRpbmcgNSI6ICLQl9Cw0LPQvtC70L7QstC+0LogNSIsCisgICAgICAgICJIZWFkaW5nIDYiOiAi0JfQsNCz0L7Qu9C+0LLQvtC6IDYiLAorICAgICAgICAiSGVhZGluZ3MiOiAi0JfQsNCz0L7Qu9C+0LLQutC4IiwKKyAgICAgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogItCf0L7QvNC+0YnRjCIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAi0JPQvtGA0LjQt9C+0L3RgtCw0LvRjNC90YvQuSDRgNCw0LfQtNC10LvQuNGC0LXQu9GMIiwKKyAgICAgICAgIkluY3JlYXNlIEluZGVudCI6ICLQo9Cy0LXQu9C40YfQuNGC0Ywg0L7RgtGB0YLRg9C/IiwKKyAgICAgICAgIkluaXQgZWRpdG9yIHNpemUiOiAi0JjQvdC40YbQuNCw0LvQuNC30LDRhtC40Y8g0YDQsNC30LzQtdGA0LAg0YDQtdC00LDQutGC0L7RgNCwIiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICLQktGB0YLQsNCy0LrQsCDRgtCw0LHQu9C40YbRiyIsCisgICAgICAgICJJbnNlcnQgV2ViIExpbmsiOiAi0JLRgdGC0LDQstC40YLRjCDQs9C40L/QtdGA0YHRgdGL0LvQutGDIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAi0JLRgdGC0LDQstC40YLRjCDQuNC30L7QsdGA0LDQttC10L3QuNC1IiwKKyAgICAgICAgIkluc2VydC9PdmVyd3JpdGUiOiAi0JLRgdGC0LDQstC60LAv0LfQsNC80LXQvdCwIiwKKyAgICAgICAgIkl0YWxpYyI6ICLQndCw0LrQu9C+0L3QvdGL0LkiLAorICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAi0J/QviDRhtC10L3RgtGA0YMiLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogItCf0L4g0YjQuNGA0LjQvdC1IiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICLQn9C+INC70LXQstC+0LzRgyDQutGA0LDRjiIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogItCf0L4g0L/RgNCw0LLQvtC80YMg0LrRgNCw0Y4iLAorICAgICAgICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogItCT0L7RgNGP0YfQuNC1INC60LvQsNCy0LjRiNC4IiwKKyAgICAgICAgIk5vcm1hbCI6ICLQntCx0YvRh9C90YvQuSDRgtC10LrRgdGCIiwKKyAgICAgICAgIk9yZGVyZWQgTGlzdCI6ICLQndGD0LzQtdGA0L7QstCw0L3QvdGL0Lkg0YHQv9C40YHQvtC6IiwKKyAgICAgICAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogItCS0YHRgtCw0LLQuNGC0YwiLAorICAgICAgICAiUGF0aCI6ICLQn9GD0YLRjCIsCisgICAgICAgICJQcmludCBkb2N1bWVudCI6ICLQn9C10YfQsNGC0YwiLAorICAgICAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi0J/QvtCy0YLQvtGA0LjRgtGMIiwKKyAgICAgICAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIjogItCg0LXQs9C40YHRgtGA0LDRhtC40Y8gJHBsdWdpbiIsCisgICAgICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICLQo9Cx0YDQsNGC0Ywg0YTQvtGA0LzQsNGC0LjRgNC+0LLQsNC90LjQtSIsCisgICAgICAgICJTSElGVC1FTlRFUiI6ICJTSElGVCtFTlRFUiIsCisgICAgICAgICJTYXZlIGFzIjogItCh0L7RhdGA0LDQvdC40YLRjCDQutCw0LoiLAorICAgICAgICAiU2VsZWN0IGFsbCI6ICLQktGL0LTQtdC70LjRgtGMINCy0YHQtSIsCisgICAgICAgICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICLQntGC0YTQvtGA0LzQsNGC0LjRgNC+0LLQsNGC0Ywg0LDQsdC30LDRhiIsCisgICAgICAgICJTcGxpdCBCbG9jayI6ICLQoNCw0LfQtNC10LvQuNGC0Ywg0LHQu9C+0LoiLAorICAgICAgICAiU3RyaWtldGhyb3VnaCI6ICLQn9C10YDQtdGH0LXRgNC60L3Rg9GC0YvQuSIsCisgICAgICAgICJTdWJzY3JpcHQiOiAi0J3QuNC20L3QuNC5INC40L3QtNC10LrRgSIsCisgICAgICAgICJTdXBlcnNjcmlwdCI6ICLQktC10YDRhdC90LjQuSDQuNC90LTQtdC60YEiLAorICAgICAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogItCg0LXQtNCw0LrRgtC+0YAg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINGB0LvQtdC00YPRjtGJ0LjQtSDQutC+0LzQsdC40L3QsNGG0LjQuCDQutC70LDQstC40Yg6IiwKKyAgICAgICAgIlRvZ2dsZSBCb3JkZXJzIjogItCS0LrQu9GO0YfQuNGC0Ywv0LLRi9C60LvRjtGH0LjRgtGMINC+0YLQvtCx0YDQsNC20LXQvdC40LUg0LPRgNCw0L3QuNGGIiwKKyAgICAgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICLQn9C+0LrQsNC30LDRgtGMIEh0bWwt0LrQvtC0IiwKKyAgICAgICAgIlVuZGVybGluZSI6ICLQn9C+0LTRh9C10YDQutC90YPRgtGL0LkiLAorICAgICAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi0J7RgtC80LXQvdC40YLRjCIsCisgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogItCj0LTQsNC70LjRgtGMINGG0LLQtdGC0LAg0YjRgNC40YTRgtC+0LIgPyIsCisgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICLQo9C00LDQu9C40YLRjCDRgNCw0LfQvNC10YDRiyDRiNGA0LjRhNGC0L7QsiA/IiwKKyAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICLQo9C00LDQu9C40YLRjCDRgtC40L/RiyDRiNGA0LjRhNGC0L7Qsj8iLAorICAgICAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogItCS0Ysg0LIg0YDQtdC20LjQvNC1INC+0YLQvtCx0YDQsNC20LXQvdC40Y8gSHRtbC3QutC+0LTQsC4g0L3QsNC20LzQuNGC0LUg0LrQvdC+0L/QutGDIFs8Pl0sINGH0YLQvtCx0Ysg0L/QtdGA0LXQutC70Y7Rh9C40YLRjNGB0Y8g0LIg0LLQuNC30YPQsNC70YzQvdGL0Lkg0YDQtdC20LjQvC4iLAorICAgICAgICAiaW5zZXJ0IGxpbmVicmVhayI6ICLQv9C10YDQtdC90L7RgSDRgdGC0YDQvtC60LgiLAorICAgICAgICAibmV3IHBhcmFncmFwaCI6ICLQvdC+0LLRi9C5INCw0LHQt9Cw0YYiCisgICAgfSwKKyAgICAiX19ORVdfVFJBTlNMQVRJT05TX18iOiB7CisgICAgICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICAgICAiQWJicmV2aWF0aW9uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIiIsCisgICAgICAgICAgICAiRXhwYW5zaW9uOiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDaGFyQ291bnRlciI6IHsKKyAgICAgICAgICAgICIuLi4gaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAgICAgICAgICJDaGFycyI6ICIiLAorICAgICAgICAgICAgIkhUTUwiOiAiIiwKKyAgICAgICAgICAgICJXb3JkcyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDb2xvclBpY2tlciI6IHsKKyAgICAgICAgICAgICJDbGljayBhIGNvbG9yLi4uIjogIiIsCisgICAgICAgICAgICAiU2FtcGxlIjogIiIsCisgICAgICAgICAgICAiV2ViIFNhZmU6ICI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgICAgICJfRGVsZXRlIFJvdyI6ICIiLAorICAgICAgICAgICAgIl9JbWFnZSBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiX01vZGlmeSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1JlbW92ZSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1RhYmxlIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJDX2VsbCBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiQ2hlY19rIExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJDb3B5IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIGEgbGluayI6ICIiLAorICAgICAgICAgICAgIkN1cnJlbnQgVVJMIGlzIjogIiIsCisgICAgICAgICAgICAiQ3V0IjogIiIsCisgICAgICAgICAgICAiRGVfbGV0ZSBDb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgQ2VsbCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIiIsCisgICAgICAgICAgICAiSG93IGRpZCB5b3UgZ2V0IGhlcmU/IChQbGVhc2UgcmVwb3J0ISkiOiAiIiwKKyAgICAgICAgICAgICJJX25zZXJ0IFJvdyBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYWZ0ZXIgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJMaW5rIHBvaW50cyB0bzoiOiAiIiwKKyAgICAgICAgICAgICJNYWtlIGxpbl9rLi4uIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiUGFzdGUiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGVsZW1lbnQ6IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJSb193IFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBpbWFnZSBwcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIFJvdyBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlVubGluayB0aGUgY3VycmVudCBlbGVtZW50IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRpYWxvZ3MiOiB7CisgICAgICAgICAgICAiU29tZSBUZXh0IEhlcmUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRHluYW1pY0NTUyI6IHsKKyAgICAgICAgICAgICJDaG9vc2Ugc3R5bGVzaGVldCI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQiOiAiIiwKKyAgICAgICAgICAgICJVbmRlZmluZWQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgICAgICJFZGl0IEhUTUwgZm9yIHNlbGVjdGVkIHRleHQiOiAiIiwKKyAgICAgICAgICAgICJFZGl0IFRhZyBCeSBQZWciOiAiIiwKKyAgICAgICAgICAgICJUYWcgRWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVxdWF0aW9uIjogeworICAgICAgICAgICAgIiE9IjogIiIsCisgICAgICAgICAgICAiIWluIjogIiIsCisgICAgICAgICAgICAiJmd0Oy0iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiJmx0O3gmZ3Q7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAhYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYC5gICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAyYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDNgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA1YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDZgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgN2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA4YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgZWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7Jm5ic3A7YDFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Arezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLTpcXCBgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC17Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BDYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Bjb3NgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGxuYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BwaWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHNpbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGFuYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0aW1lc2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImcXVvdDt0ZXh0JnF1b3Q7IjogIiIsCisgICAgICAgICAgICAiJytmb3JtdWxhKyciOiAiIiwKKyAgICAgICAgICAgICIoKG4pLChrKSkiOiAiIiwKKyAgICAgICAgICAgICIoeCsxKS8oeC0xKSI6ICIiLAorICAgICAgICAgICAgIioiOiAiIiwKKyAgICAgICAgICAgICIqKiI6ICIiLAorICAgICAgICAgICAgIistIjogIiIsCisgICAgICAgICAgICAiLSZndDsiOiAiIiwKKyAgICAgICAgICAgICItJmx0OyI6ICIiLAorICAgICAgICAgICAgIi06IjogIiIsCisgICAgICAgICAgICAiLT0iOiAiIiwKKyAgICAgICAgICAgICIvLyI6ICIiLAorICAgICAgICAgICAgIi9fIjogIiIsCisgICAgICAgICAgICAiOi4iOiAiIiwKKyAgICAgICAgICAgICI9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIkAiOiAiIiwKKyAgICAgICAgICAgICJbW2EsYl0sW2MsZF1dIjogIiIsCisgICAgICAgICAgICAiXFxcXCI6ICIiLAorICAgICAgICAgICAgIlxcbkNsaWNrIGluIHRoZSBib3ggdG8gdXNlIHlvdXIga2V5Ym9hcmQgb3IgdXNlIHRoZSBidXR0b25zXFxuIjogIiIsCisgICAgICAgICAgICAiXl4iOiAiIiwKKyAgICAgICAgICAgICJeXl4iOiAiIiwKKyAgICAgICAgICAgICJfX3wiOiAiIiwKKyAgICAgICAgICAgICJffF8iOiAiIiwKKyAgICAgICAgICAgICJgIT1gIjogIiIsCisgICAgICAgICAgICAiYCFpbmAiOiAiIiwKKyAgICAgICAgICAgICJgJmFuZDtgIjogIiIsCisgICAgICAgICAgICAiYCZjYXA7YCI6ICIiLAorICAgICAgICAgICAgImAmY3VwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oy1gIjogIiIsCisgICAgICAgICAgICAiYCZndDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PSZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7eCZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZvcjtgIjogIiIsCisgICAgICAgICAgICAiYCZxdW90O3RleHQmcXVvdDtgIjogIiIsCisgICAgICAgICAgICAiYCgobiksKGspKWAiOiAiIiwKKyAgICAgICAgICAgICJgKHgrMSkvKHgtMSlgIjogIiIsCisgICAgICAgICAgICAiYCoqYCI6ICIiLAorICAgICAgICAgICAgImAqYCI6ICIiLAorICAgICAgICAgICAgImArLWAiOiAiIiwKKyAgICAgICAgICAgICJgLSZndDtgIjogIiIsCisgICAgICAgICAgICAiYC0mbHQ7YCI6ICIiLAorICAgICAgICAgICAgImAtOmAiOiAiIiwKKyAgICAgICAgICAgICJgLT1gIjogIiIsCisgICAgICAgICAgICAiYC8vYCI6ICIiLAorICAgICAgICAgICAgImAvX2AiOiAiIiwKKyAgICAgICAgICAgICJgOi5gIjogIiIsCisgICAgICAgICAgICAiYD0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImBAYCI6ICIiLAorICAgICAgICAgICAgImBbW2EsYl0sW2MsZF1dYCI6ICIiLAorICAgICAgICAgICAgImBcXFxcYCI6ICIiLAorICAgICAgICAgICAgImBfX3xgIjogIiIsCisgICAgICAgICAgICAiYF98X2AiOiAiIiwKKyAgICAgICAgICAgICJgQUFgIjogIiIsCisgICAgICAgICAgICAiYGFsZXBoYCI6ICIiLAorICAgICAgICAgICAgImBhbHBoYWAiOiAiIiwKKyAgICAgICAgICAgICJgYW5kYCI6ICIiLAorICAgICAgICAgICAgImBiYXJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJldGFgIjogIiIsCisgICAgICAgICAgICAiYENDYCI6ICIiLAorICAgICAgICAgICAgImBjY2FgIjogIiIsCisgICAgICAgICAgICAiYGNoaWAiOiAiIiwKKyAgICAgICAgICAgICJgZGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgZGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbGAiOiAiIiwKKyAgICAgICAgICAgICJgRGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkaWFtb25kYCI6ICIiLAorICAgICAgICAgICAgImBkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkeS9keGAiOiAiIiwKKyAgICAgICAgICAgICJgRUVgIjogIiIsCisgICAgICAgICAgICAiYGVwc2lgIjogIiIsCisgICAgICAgICAgICAiYGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZnJhYCI6ICIiLAorICAgICAgICAgICAgImBHYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdyYWRgIjogIiIsCisgICAgICAgICAgICAiYGhhcnJgIjogIiIsCisgICAgICAgICAgICAiYGhBcnJgIjogIiIsCisgICAgICAgICAgICAiYGhhdGFgIjogIiIsCisgICAgICAgICAgICAiYGlmYCI6ICIiLAorICAgICAgICAgICAgImBpbmAiOiAiIiwKKyAgICAgICAgICAgICJgaW50YCI6ICIiLAorICAgICAgICAgICAgImBpb3RhYCI6ICIiLAorICAgICAgICAgICAgImBrYXBwYWAiOiAiIiwKKyAgICAgICAgICAgICJgbGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBMYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYGxBcnJgIjogIiIsCisgICAgICAgICAgICAiYGxhcnJgIjogIiIsCisgICAgICAgICAgICAiYGxpbV8oeC0mZ3Q7b28pYCI6ICIiLAorICAgICAgICAgICAgImBsb2dgIjogIiIsCisgICAgICAgICAgICAiYG11YCI6ICIiLAorICAgICAgICAgICAgImBOTmAiOiAiIiwKKyAgICAgICAgICAgICJgbm5gIjogIiIsCisgICAgICAgICAgICAiYG5vdGAiOiAiIiwKKyAgICAgICAgICAgICJgbnVgIjogIiIsCisgICAgICAgICAgICAiYG8rYCI6ICIiLAorICAgICAgICAgICAgImBvLmAiOiAiIiwKKyAgICAgICAgICAgICJgTy9gIjogIiIsCisgICAgICAgICAgICAiYG9pbnRgIjogIiIsCisgICAgICAgICAgICAiYG9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBPbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgb29gIjogIiIsCisgICAgICAgICAgICAiYG9yYCI6ICIiLAorICAgICAgICAgICAgImBveGAiOiAiIiwKKyAgICAgICAgICAgICJgUGhpYCI6ICIiLAorICAgICAgICAgICAgImBwaGlgIjogIiIsCisgICAgICAgICAgICAiYFBpYCI6ICIiLAorICAgICAgICAgICAgImBwaWAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvZGAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvcGAiOiAiIiwKKyAgICAgICAgICAgICJgUHNpYCI6ICIiLAorICAgICAgICAgICAgImBwc2lgIjogIiIsCisgICAgICAgICAgICAiYFFRYCI6ICIiLAorICAgICAgICAgICAgImBxdWFkYCI6ICIiLAorICAgICAgICAgICAgImByQXJyYCI6ICIiLAorICAgICAgICAgICAgImByaG9gIjogIiIsCisgICAgICAgICAgICAiYHJvb3QobikoeClgIjogIiIsCisgICAgICAgICAgICAiYFJSYCI6ICIiLAorICAgICAgICAgICAgImBzZmFgIjogIiIsCisgICAgICAgICAgICAiYHNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBTaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgc3FydCh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgc3F1YXJlYCI6ICIiLAorICAgICAgICAgICAgImBzdGFja3JlbCgtJmd0OykoKylgIjogIiIsCisgICAgICAgICAgICAiYHN1YmAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VtYCI6ICIiLAorICAgICAgICAgICAgImBzdXBgIjogIiIsCisgICAgICAgICAgICAiYHN1cGVgIjogIiIsCisgICAgICAgICAgICAiYHRhdWAiOiAiIiwKKyAgICAgICAgICAgICJgVGhldGFgIjogIiIsCisgICAgICAgICAgICAiYHRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImBUVGAiOiAiIiwKKyAgICAgICAgICAgICJgdHRhYCI6ICIiLAorICAgICAgICAgICAgImB1YXJyYCI6ICIiLAorICAgICAgICAgICAgImB1bGFgIjogIiIsCisgICAgICAgICAgICAiYHVwc2lsb25gIjogIiIsCisgICAgICAgICAgICAiYHV1YCI6ICIiLAorICAgICAgICAgICAgImB2ZWNhYCI6ICIiLAorICAgICAgICAgICAgImB2dmAiOiAiIiwKKyAgICAgICAgICAgICJgeF8obW4pYCI6ICIiLAorICAgICAgICAgICAgImBYaWAiOiAiIiwKKyAgICAgICAgICAgICJgeGlgIjogIiIsCisgICAgICAgICAgICAiYHh4YCI6ICIiLAorICAgICAgICAgICAgImB6ZXRhYCI6ICIiLAorICAgICAgICAgICAgImBaWmAiOiAiIiwKKyAgICAgICAgICAgICJgfC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImB8LS1gIjogIiIsCisgICAgICAgICAgICAiYHw9PWAiOiAiIiwKKyAgICAgICAgICAgICJgfF9fYCI6ICIiLAorICAgICAgICAgICAgImB8fmAiOiAiIiwKKyAgICAgICAgICAgICJgfj1gIjogIiIsCisgICAgICAgICAgICAiYH58YCI6ICIiLAorICAgICAgICAgICAgImB+fmAiOiAiIiwKKyAgICAgICAgICAgICJBQSI6ICIiLAorICAgICAgICAgICAgImFsZXBoIjogIiIsCisgICAgICAgICAgICAiYWxwaGEiOiAiIiwKKyAgICAgICAgICAgICJhbmQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGggRm9ybXVsYSBJbnB1dCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aE1MIEV4YW1wbGUiOiAiIiwKKyAgICAgICAgICAgICJiYXJhIjogIiIsCisgICAgICAgICAgICAiQmFzZWQgb24gQVNDSUlNYXRoTUwgYnkiOiAiIiwKKyAgICAgICAgICAgICJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiYmJhIjogIiIsCisgICAgICAgICAgICAiYmV0YSI6ICIiLAorICAgICAgICAgICAgIkNDIjogIiIsCisgICAgICAgICAgICAiY2NhIjogIiIsCisgICAgICAgICAgICAiY2hpIjogIiIsCisgICAgICAgICAgICAiZGFyciI6ICIiLAorICAgICAgICAgICAgImRkb3RhIjogIiIsCisgICAgICAgICAgICAiZGVsIjogIiIsCisgICAgICAgICAgICAiRGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJkZWx0YSI6ICIiLAorICAgICAgICAgICAgImRpYW1vbmQiOiAiIiwKKyAgICAgICAgICAgICJkb3RhIjogIiIsCisgICAgICAgICAgICAiZHkvZHgiOiAiIiwKKyAgICAgICAgICAgICJFRSI6ICIiLAorICAgICAgICAgICAgImVwc2kiOiAiIiwKKyAgICAgICAgICAgICJldGEiOiAiIiwKKyAgICAgICAgICAgICJGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBBc2NpaU1hdGhNTCB2aXNpdCB0aGlzIHBhZ2U6IjogIiIsCisgICAgICAgICAgICAiRm9ybXVsYSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJmcmEiOiAiIiwKKyAgICAgICAgICAgICJnYW1tYSI6ICIiLAorICAgICAgICAgICAgIkdhbW1hIjogIiIsCisgICAgICAgICAgICAiZ3JhZCI6ICIiLAorICAgICAgICAgICAgImhBcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXJyIjogIiIsCisgICAgICAgICAgICAiaGF0YSI6ICIiLAorICAgICAgICAgICAgImlmIjogIiIsCisgICAgICAgICAgICAiaW4iOiAiIiwKKyAgICAgICAgICAgICJJbnB1dCI6ICIiLAorICAgICAgICAgICAgImludCI6ICIiLAorICAgICAgICAgICAgImludF9hXmJmKHgpZHgiOiAiIiwKKyAgICAgICAgICAgICJpb3RhIjogIiIsCisgICAgICAgICAgICAia2FwcGEiOiAiIiwKKyAgICAgICAgICAgICJMYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsYXJyIjogIiIsCisgICAgICAgICAgICAibEFyciI6ICIiLAorICAgICAgICAgICAgImxpbV8oeC0mZ3Q7b28pIjogIiIsCisgICAgICAgICAgICAibXUiOiAiIiwKKyAgICAgICAgICAgICJOTiI6ICIiLAorICAgICAgICAgICAgIm5uIjogIiIsCisgICAgICAgICAgICAibm5uIjogIiIsCisgICAgICAgICAgICAibm90IjogIiIsCisgICAgICAgICAgICAibnUiOiAiIiwKKyAgICAgICAgICAgICJvKyI6ICIiLAorICAgICAgICAgICAgIm8uIjogIiIsCisgICAgICAgICAgICAiTy8iOiAiIiwKKyAgICAgICAgICAgICJvaW50IjogIiIsCisgICAgICAgICAgICAib21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJPbWVnYSI6ICIiLAorICAgICAgICAgICAgIm9vIjogIiIsCisgICAgICAgICAgICAib3IiOiAiIiwKKyAgICAgICAgICAgICJveCI6ICIiLAorICAgICAgICAgICAgIlBoaSI6ICIiLAorICAgICAgICAgICAgInBoaSI6ICIiLAorICAgICAgICAgICAgInBpIjogIiIsCisgICAgICAgICAgICAiUGkiOiAiIiwKKyAgICAgICAgICAgICJwcm9kIjogIiIsCisgICAgICAgICAgICAicHJvcCI6ICIiLAorICAgICAgICAgICAgInBzaSI6ICIiLAorICAgICAgICAgICAgIlBzaSI6ICIiLAorICAgICAgICAgICAgIlFRIjogIiIsCisgICAgICAgICAgICAicXVhZCI6ICIiLAorICAgICAgICAgICAgInJBcnIiOiAiIiwKKyAgICAgICAgICAgICJyaG8iOiAiIiwKKyAgICAgICAgICAgICJyb290KG4pKHgpIjogIiIsCisgICAgICAgICAgICAiUlIiOiAiIiwKKyAgICAgICAgICAgICJzZmEiOiAiIiwKKyAgICAgICAgICAgICJzaWdtYSI6ICIiLAorICAgICAgICAgICAgIlNpZ21hIjogIiIsCisgICAgICAgICAgICAic3FydCh4KSI6ICIiLAorICAgICAgICAgICAgInNxdWFyZSI6ICIiLAorICAgICAgICAgICAgInN0YWNrcmVsKC0mZ3Q7KSgrKSI6ICIiLAorICAgICAgICAgICAgInN1YiI6ICIiLAorICAgICAgICAgICAgInN1YmUiOiAiIiwKKyAgICAgICAgICAgICJzdW0iOiAiIiwKKyAgICAgICAgICAgICJzdW1fKG49MSleb28iOiAiIiwKKyAgICAgICAgICAgICJzdXAiOiAiIiwKKyAgICAgICAgICAgICJzdXBlIjogIiIsCisgICAgICAgICAgICAidGF1IjogIiIsCisgICAgICAgICAgICAiVGhldGEiOiAiIiwKKyAgICAgICAgICAgICJ0aGV0YSI6ICIiLAorICAgICAgICAgICAgIlRUIjogIiIsCisgICAgICAgICAgICAidHRhIjogIiIsCisgICAgICAgICAgICAidWFyciI6ICIiLAorICAgICAgICAgICAgInVsYSI6ICIiLAorICAgICAgICAgICAgInVwc2lsb24iOiAiIiwKKyAgICAgICAgICAgICJ1dSI6ICIiLAorICAgICAgICAgICAgInV1dSI6ICIiLAorICAgICAgICAgICAgInZlY2EiOiAiIiwKKyAgICAgICAgICAgICJ2diI6ICIiLAorICAgICAgICAgICAgInZ2diI6ICIiLAorICAgICAgICAgICAgInheKG0rbikiOiAiIiwKKyAgICAgICAgICAgICJ4XyhtbikiOiAiIiwKKyAgICAgICAgICAgICJYaSI6ICIiLAorICAgICAgICAgICAgInhpIjogIiIsCisgICAgICAgICAgICAieHgiOiAiIiwKKyAgICAgICAgICAgICJ6ZXRhIjogIiIsCisgICAgICAgICAgICAiWloiOiAiIiwKKyAgICAgICAgICAgICJ8LSZndDsiOiAiIiwKKyAgICAgICAgICAgICJ8LS0iOiAiIiwKKyAgICAgICAgICAgICJ8PT0iOiAiIiwKKyAgICAgICAgICAgICJ8X18iOiAiIiwKKyAgICAgICAgICAgICJ8fiI6ICIiLAorICAgICAgICAgICAgIn49IjogIiIsCisgICAgICAgICAgICAifnwiOiAiIiwKKyAgICAgICAgICAgICJ+fiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGYW5jeVNlbGVjdHMiOiB7CisgICAgICAgICAgICAiJytvcHQudGV4dCsnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbmRSZXBsYWNlIjogeworICAgICAgICAgICAgIic7XHJcbiAgdmFyIHRhZ2MgPSAnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1PcGVyYXRpb25zIjogeworICAgICAgICAgICAgIkVudGVyIHRoZSBuYW1lIGZvciBuZXcgb3B0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgY2hlY2sgYm94LiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIEZvcm0uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbXVsdGktbGluZSB0ZXh0IGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHJhZGlvIGJ1dHRvbi4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzZWxlY3QgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgc3VibWl0L3Jlc2V0IGJ1dHRvbi4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSB0ZXh0LCBwYXNzd29yZCBvciBoaWRkZW4gZmllbGQuIjogIiIsCisgICAgICAgICAgICAiTWVzc2FnZSBTZW50IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIFNlbGVjdC4uLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGb3JtcyI6IHsKKyAgICAgICAgICAgICInb25DbGljayc9IjogIiIsCisgICAgICAgICAgICAiQWNjZXNzIEtleToiOiAiIiwKKyAgICAgICAgICAgICJBY3Rpb24gVVJMOiI6ICIiLAorICAgICAgICAgICAgIkJ1dHRvbiBTY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJDaGVja2VkIjogIiIsCisgICAgICAgICAgICAiQ29sdW1uczoiOiAiIiwKKyAgICAgICAgICAgICJEZWZhdWx0IHRleHQgKG9wdGlvbmFsKSI6ICIiLAorICAgICAgICAgICAgIkRpbWVuc2lvbnMiOiAiIiwKKyAgICAgICAgICAgICJEaXNhYmxlZCI6ICIiLAorICAgICAgICAgICAgIkVuY29kaW5nOiI6ICIiLAorICAgICAgICAgICAgIkZvciBDb250cm9sOiI6ICIiLAorICAgICAgICAgICAgIkZvcm0iOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IEZJRUxEU0VUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBJTlBVVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IFNFTEVDVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogVEVYVEFSRUEiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIGhhbmRsZXIgc2NyaXB0IjogIiIsCisgICAgICAgICAgICAiRm9ybSBOYW1lOiI6ICIiLAorICAgICAgICAgICAgIkdldCI6ICIiLAorICAgICAgICAgICAgIkhhcmQiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQgaW4gbnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJIVE1MLUZvcm0gdG8gQ0dJIChkZWZhdWx0KSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIHNvdXJjZSI6ICIiLAorICAgICAgICAgICAgIkluaXRpYWwgVGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IEZJRUxEU0VUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IElOUFVUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IExBQkVMIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFNFTEVDVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkphdmFzY3JpcHQgZm9yIGJ1dHRvbiBjbGljayI6ICIiLAorICAgICAgICAgICAgIkxhYmVsOiI6ICIiLAorICAgICAgICAgICAgIkxlZ2VuZDoiOiAiIiwKKyAgICAgICAgICAgICJNYXggbGVuZ3RoOiI6ICIiLAorICAgICAgICAgICAgIk1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWNjZXB0ZWQiOiAiIiwKKyAgICAgICAgICAgICJNZXRob2Q6IjogIiIsCisgICAgICAgICAgICAibXVsdGlwYXJ0IEZvcm0gRGF0YSAoRmlsZS1VcGxvYWQpIjogIiIsCisgICAgICAgICAgICAiTmFtZSI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIm5hbWUgb2YgdGhlIHRleHRhcmVhIjogIiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiIiwKKyAgICAgICAgICAgICJub3JtYWwiOiAiIiwKKyAgICAgICAgICAgICJub3dyYXAiOiAiIiwKKyAgICAgICAgICAgICJPZmYiOiAiIiwKKyAgICAgICAgICAgICJQaHlzaWNhbCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciBhIExhYmVsIjogIiIsCisgICAgICAgICAgICAiUG9zdCI6ICIiLAorICAgICAgICAgICAgInByZSI6ICIiLAorICAgICAgICAgICAgIlJlYWQgT25seSI6ICIiLAorICAgICAgICAgICAgIlNpemUgb2YgdGV4dCBib3ggaW4gY2hhcmFjdGVycyI6ICIiLAorICAgICAgICAgICAgIlNpemU6IjogIiIsCisgICAgICAgICAgICAiU29mdCI6ICIiLAorICAgICAgICAgICAgIlRhYiBJbmRleDoiOiAiIiwKKyAgICAgICAgICAgICJUYXJnZXQgRnJhbWU6IjogIiIsCisgICAgICAgICAgICAiVGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJVUkwgb2YgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICAgICAgICAgIlZhbHVlOiI6ICIiLAorICAgICAgICAgICAgIlZpcnR1YWwiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aCBpbiBudW1iZXIgb2YgY2hhcmFjdGVycyI6ICIiLAorICAgICAgICAgICAgIldyYXAgTW9kZToiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIE5hbWUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRnVsbFBhZ2UiOiB7CisgICAgICAgICAgICAiLi4uIjogIiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIkJhY2tncm91bmQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiQ2hhcmFjdGVyIHNldDoiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoSVNPLTg4NTktNSkiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoS09JOC1SKSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChXSU5ET1dTLTEyNTEpIjogIiIsCisgICAgICAgICAgICAiRE9DVFlQRToiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiRG9jdW1lbnQgdGl0bGU6IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZHM6IjogIiIsCisgICAgICAgICAgICAiUHJpbWFyeSBzdHlsZS1zaGVldDoiOiAiIiwKKyAgICAgICAgICAgICJUZXh0IGNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIlVURi04IChyZWNvbW1lbmRlZCkiOiAiIiwKKyAgICAgICAgICAgICJ3ZXN0ZXJuIChJU08tODg1OS0xKSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJHZWNrbyI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICAgICAiJiN4MDBkNzsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvZWRpdCBob3Jpem9udGFsIHJ1bGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBIb3Jpem9udGFsIFJ1bGUiOiAiIiwKKyAgICAgICAgICAgICJObyBzaGFkaW5nIjogIiIsCisgICAgICAgICAgICAiU3R5bGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5saW5lU3R5bGVyIjogeworICAgICAgICAgICAgIkNTUyBTdHlsZSI6ICIiLAorICAgICAgICAgICAgIi0iOiAiPDxFcXVhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAgICAgIkFuY2hvciBuYW1lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEFuY2hvciI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0Tm90ZSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgZm9vdG5vdGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgTm90ZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQYWdlYnJlYWsiOiB7CisgICAgICAgICAgICAiUGFnZSBicmVhayI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQnJlYWsiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U21pbGV5IjogeworICAgICAgICAgICAgIkluc2VydCBTbWlsZXkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgICAgICJcXG4gIFRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nXFxuIjogIiIsCisgICAgICAgICAgICAiSGlkZSBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICIiLAorICAgICAgICAgICAgIkxpbmsxIjogIiIsCisgICAgICAgICAgICAiTGluazIiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMyI6ICIiLAorICAgICAgICAgICAgIkxpbms0IjogIiIsCisgICAgICAgICAgICAiTGluazUiOiAiIiwKKyAgICAgICAgICAgICJTaG93IHByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZyI6ICIiLAorICAgICAgICAgICAgIlZhcmlhYmxlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAgICAgIkFsbCBDYXRlZ29yaWVzIjogIiIsCisgICAgICAgICAgICAiRmlsdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMgdGVtcGxhdGUgdmFyaWFibGUiOiAiIiwKKyAgICAgICAgICAgICJPbmx5IHNlYXJjaCB3b3JkIGJlZ2lubmluZyI6ICIiLAorICAgICAgICAgICAgIkhUTUwiOiAiPDxDaGFyQ291bnRlcj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgU25pcHBldCI6ICI8PEluc2VydFNuaXBwZXQ+PiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIlZhcmlhYmxlIjogIjw8SW5zZXJ0U25pcHBldD4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0VGFibGUiOiB7CisgICAgICAgICAgICAiQ2FwdGlvbiBmb3IgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiQ29sbGFwc2UgYm9yZGVyczoiOiAiIiwKKyAgICAgICAgICAgICJMYXlvdSI6ICIiLAorICAgICAgICAgICAgIlN0eWxlIG9mIHRoZSBib3JkZXIiOiAiIgorICAgICAgICB9LAorICAgICAgICAiTGFuZ01hcmtzIjogeworICAgICAgICAgICAgIiZtZGFzaDsgbGFuZ3VhZ2UgJm1kYXNoOyI6ICIiLAorICAgICAgICAgICAgIicsICciOiAiIiwKKyAgICAgICAgICAgICJFbmdsaXNoIjogIiIsCisgICAgICAgICAgICAiRnJlbmNoIjogIiIsCisgICAgICAgICAgICAiR3JlZWsiOiAiIiwKKyAgICAgICAgICAgICJsYW5ndWFnZSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJMYXRpbiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJMaW5rZXIiOiB7CisgICAgICAgICAgICAiKHB4KSI6ICIiLAorICAgICAgICAgICAgIkFuY2hvci1MaW5rIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIEFkZHJlc3M6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgTGluayI6ICIiLAorICAgICAgICAgICAgIkxvY2F0aW9uIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZW51IEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFRlbXBsYXRlOiI6ICIiLAorICAgICAgICAgICAgIk5ldyBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcmRpbmFyeSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUG9wdXAgV2luZG93IjogIiIsCisgICAgICAgICAgICAiUG9wdXBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgTGluayI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZWFibGU6IjogIiIsCisgICAgICAgICAgICAiU2FtZSBXaW5kb3cgKGp1bXAgb3V0IG9mIGZyYW1lcykiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGxiYXJzOiI6ICIiLAorICAgICAgICAgICAgIlNob3dzIE9uIEhvdmVyIjogIiIsCisgICAgICAgICAgICAiU3RhdHVzIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJTdWJqZWN0OiI6ICIiLAorICAgICAgICAgICAgIlRpdGxlOiI6ICIiLAorICAgICAgICAgICAgIlRvb2xiYXI6IjogIiIsCisgICAgICAgICAgICAiVVJMIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiIiwKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIk5hbWU6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiU2l6ZToiOiAiPDxGb3Jtcz4+IgorICAgICAgICB9LAorICAgICAgICAiTW9vdG9vbHNGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJPcGVyYSI6IHsKKyAgICAgICAgICAgICJNQVJLIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgdGV4dCBpbiBuZXcgcGFyYWdyYXBoIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlByZXNlcnZlU2NyaXB0cyI6IHsKKyAgICAgICAgICAgICJKYXZhU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiUEhQIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlF1aWNrVGFnIjogeworICAgICAgICAgICAgIicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbCc6ICciOiAiIiwKKyAgICAgICAgICAgICJBVFRSSUJVVEVTIjogIiIsCisgICAgICAgICAgICAiQ29sb3JzIjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIFRBRyB5b3Ugd2FudCB0byBpbnNlcnQiOiAiIiwKKyAgICAgICAgICAgICJObyBDU1MgY2xhc3MgYXZhaWFibGUiOiAiIiwKKyAgICAgICAgICAgICJPayI6ICIiLAorICAgICAgICAgICAgIk9QVElPTlMiOiAiIiwKKyAgICAgICAgICAgICJRdWljayBUYWcgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiVEFHcyI6ICIiLAorICAgICAgICAgICAgIlRoZXJlIGFyZSBzb21lIHVuY2xvc2VkIHF1b3RlIjogIiIsCisgICAgICAgICAgICAiVGhpcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIFRBRyI6ICIiLAorICAgICAgICAgICAgIllvdSBoYXZlIHRvIHNlbGVjdCBzb21lIHRleHQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU2V0SWQiOiB7CisgICAgICAgICAgICAiSUQvTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQgYW5kIE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQvTmFtZSI6ICIiLAorICAgICAgICAgICAgIlNldCBJRC9OYW1lIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiQ2xvc2luZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIkNsb3NpbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIkNvbnZlcnQgYWxsIHF1b3RlcyBhbmQgZGFzaGVzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIGF1dG9tYXRpYyByZXBsYWNlbWVudHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBTZWxlY3Rpb24gT25seSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIHVwIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBTY29wZSI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYWwgdGlkeSB1cCBhbmQgY29ycmVjdGlvbiBvZiBzb21lIHByb2JsZW1zLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzZWxlY3QgZnJvbSB0aGUgZm9sbG93aW5nIGNsZWFuaW5nIG9wdGlvbnMuLi4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc3RhbmQgYnkgd2hpbGUgY2xlYW5pbmcgaW4gcHJvY2Vzcy4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGlnbm1lbnQgKGxlZnQvcmlnaHQvanVzdGlmeSkuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBjbGFzc2VzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBBbGwgSFRNTCBUYWdzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBzdHlsZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0eXBlZmFjZXMgKGZvbnQgXCJzdHlsZXNcIikuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGVtcGhhc2lzIGFuZCBhbm5vdGF0aW9ucy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgbGFuZyBhdHRyaWJ1dGVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBQYXJhZ3JhcGhzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cy4iOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzIHdpdGggbm9uLWRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzLiI6ICIiLAorICAgICAgICAgICAgIlZpZ29yb3VzbHkgcHVyZ2UgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiQ2VsbCBUeXBlOiI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIGRvd24iOiAiIiwKKyAgICAgICAgICAgICJDZWxscyB0byB0aGUgcmlnaHQsIGFuZCI6ICIiLAorICAgICAgICAgICAgIkRvIE5vdCBDaGFuZ2UiOiAiIiwKKyAgICAgICAgICAgICJGcmFtZSBhbmQgYm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkhlYWRlciAodGgpIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY3VycmVudCBjZWxsIHdpdGg6IjogIiIsCisgICAgICAgICAgICAiTm9ybWFsICh0ZCkiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiPDxDb250ZXh0TWVudT4+IgorICAgICAgICB9LAorICAgICAgICAiVW5zYXZlZENoYW5nZXMiOiB7CisgICAgICAgICAgICAiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBlZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiV2ViS2l0IjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICI8PEdlY2tvPj4iCisgICAgICAgIH0sCisgICAgICAgICJYaW5oYSI6IHsKKyAgICAgICAgICAgICIxICg4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjIgKDEwIHB0KSI6ICIiLAorICAgICAgICAgICAgIjMgKDEyIHB0KSI6ICIiLAorICAgICAgICAgICAgIjQgKDE0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjUgKDE4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjYgKDI0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjcgKDM2IHB0KSI6ICIiLAorICAgICAgICAgICAgIkFyaWFsIjogIiIsCisgICAgICAgICAgICAiQ291cmllciBOZXciOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgU3RhdHVzYmFyIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0wICh6ZXJvKSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMSAuLiBDVFJMLTYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUEiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUoiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUwiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLU4iOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVgiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVoiOiAiIiwKKyAgICAgICAgICAgICJFcnJvciBMb2FkaW5nIFhpbmhhLiAgRGV2ZWxvcGVycywgY2hlY2sgdGhlIEVycm9yIENvbnNvbGUgZm9yIGluZm9ybWF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGluZyI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYXRlIFhpbmhhIGZyYW1ld29yayI6ICIiLAorICAgICAgICAgICAgIkdlb3JnaWEiOiAiIiwKKyAgICAgICAgICAgICJJbXBhY3QiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIENvcmUiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW5zIjogIiIsCisgICAgICAgICAgICAiTVMgV29yZCBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IENvbG9yIjogIiIsCisgICAgICAgICAgICAiVGFob21hIjogIiIsCisgICAgICAgICAgICAiVGltZXMgTmV3IFJvbWFuIjogIiIsCisgICAgICAgICAgICAiVG91Y2ggaGVyZSBmaXJzdCB0byBhY3RpdmF0ZSBlZGl0b3IuIjogIiIsCisgICAgICAgICAgICAiVmVyZGFuYSI6ICIiLAorICAgICAgICAgICAgIldhaXRpbmcgZm9yIElmcmFtZSB0byBsb2FkLi4uIjogIiIsCisgICAgICAgICAgICAiV2luZ0RpbmdzIjogIiIsCisgICAgICAgICAgICAiWGluaGEiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogQkFDS0dST1VORElNQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIlJlbW92ZSBDdXJyZW50IEJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJTZXQgQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIlNldCBwYWdlIGJhY2tncm91bmQgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJTZXQgUGFnZSBCYWNrZ3JvdW5kIEltYWdlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNsaWVudHNpZGVTcGVsbGNoZWNrIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogQ0xJRU5UU0lERVNQRUxMQ0hFQ0sgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiU3BlbGwgQ2hlY2sgdXNpbmcgaWVTcGVsbCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFeHRlbmRlZEZpbGVNYW5hZ2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogRVhURU5ERURGSUxFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIxMCUiOiAiIiwKKyAgICAgICAgICAgICIxMDAlIjogIiIsCisgICAgICAgICAgICAiMjAwJSI6ICIiLAorICAgICAgICAgICAgIjI1JSI6ICIiLAorICAgICAgICAgICAgIjUwJSI6ICIiLAorICAgICAgICAgICAgIjc1JSI6ICIiLAorICAgICAgICAgICAgIj5MaXN0IFZpZXciOiAiIiwKKyAgICAgICAgICAgICI+VGh1bWJuYWlsIFZpZXciOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICIiLAorICAgICAgICAgICAgIkFsdCI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciBDb2xvciI6ICIiLAorICAgICAgICAgICAgIkQ6IjogIiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIiIsCisgICAgICAgICAgICAiRmlsZXNpemU6IjogIiIsCisgICAgICAgICAgICAiRm9sZGVyIjogIiIsCisgICAgICAgICAgICAiR0lGIjogIiIsCisgICAgICAgICAgICAiSDoiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJNYXhpbXVtIGZvbGRlciBzaXplIGxpbWl0IHJlYWNoZWQuIFVwbG9hZCBkaXNhYmxlZC4iOiAiIiwKKyAgICAgICAgICAgICJObyBGaWxlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB2YWx1ZSI6ICIiLAorICAgICAgICAgICAgIlBORyI6ICIiLAorICAgICAgICAgICAgIlByZXNldCI6ICIiLAorICAgICAgICAgICAgIlJlbmFtZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlRvZ2dsZSBtYXJrZXIgY29sb3IiOiAiIiwKKyAgICAgICAgICAgICJYOiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIEltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlk6IjogIiIsCisgICAgICAgICAgICAiWm9vbSI6ICIiLAorICAgICAgICAgICAgIkNvcHkiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJDdXQiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIjw8TW9vdG9vbHNGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbHRlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEZJTFRFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWx0ZXIiOiAiPDxJbnNlcnRTbmlwcGV0Mj4+IgorICAgICAgICB9LAorICAgICAgICAiSHRtbFRpZHkiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBdXRvLVRpZHkiOiAiIiwKKyAgICAgICAgICAgICJEb24ndCBUaWR5IjogIiIsCisgICAgICAgICAgICAiSFRNTCBUaWR5IjogIiIsCisgICAgICAgICAgICAiVGlkeSBmYWlsZWQuICBDaGVjayB5b3VyIEhUTUwgZm9yIHN5bnRheCBlcnJvcnMuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkltYWdlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElNQUdFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGbGlja3IgUGljdHVyZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmVzIjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBVc2VybmFtZS9FbWFpbCI6ICIiLAorICAgICAgICAgICAgIkltYWdlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkIjogIiIsCisgICAgICAgICAgICAiTm8gUGhvdG9zIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gVmlkZW9zIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiVGhpcyBTZXJ2ZXIiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVXNlcm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFZpZGVvIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFZpZGVvcyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiR0lGIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJIOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlBORyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUTUFSUVVFRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUiOiAiIiwKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kLUNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkJlaGF2aW9yOiI6ICIiLAorICAgICAgICAgICAgIkNvbnRpbnVvdXMiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3Rpb246IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHNjcm9sbGluZyBtYXJxdWVlIjogIiIsCisgICAgICAgICAgICAiTWFycXVlZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgQW1vdW50OiI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbCBEZWxheToiOiAiIiwKKyAgICAgICAgICAgICJTbGlkZSI6ICIiLAorICAgICAgICAgICAgIlNwZWVkIENvbnRyb2wiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJUZXh0OiI6ICI8PEZvcm1zPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm90IGRlZmluZWQiOiAiIiwKKyAgICAgICAgICAgICIgT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlVwbG9hZCBmaWxlIjogIiIsCisgICAgICAgICAgICAiU2l6ZSI6ICI8PEZvcm1zPj4iCisgICAgICAgIH0sCisgICAgICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIxMjAlIjogIiIsCisgICAgICAgICAgICAiMTUwJSI6ICIiLAorICAgICAgICAgICAgIjgwJSI6ICIiLAorICAgICAgICAgICAgIkFkZCBHVUlETyBDb2RlIGluIGEgdGV4dGJveCBvbiB0aGUgcGFnZSI6ICIiLAorICAgICAgICAgICAgIkFkZCBNSURJIGxpbmsgdG8gYWxsb3cgc3R1ZGVudHMgdG8gaGVhciB0aGUgbXVzaWMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJHdWlkbyBjb2RlIjogIiIsCisgICAgICAgICAgICAiR1VJRE8gQ29kZSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIGluIGFwcGxldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBHVUlETyBNdXNpYyBOb3RhdGlvbiI6ICIiLAorICAgICAgICAgICAgIk1JREkgRmlsZSI6ICIiLAorICAgICAgICAgICAgIlNvdXJjZSBDb2RlIjogIiIsCisgICAgICAgICAgICAiV2l0aCBNb3ppbGxhLCB0aGUgYXBwbGV0IHdpbGwgbm90IGJlIHZpc2libGUgaW4gZWRpdG9yLCBidXQgb25seSBpbiBXZWIgcGFnZSBhZnRlciBzdWJtaXR0aW5nLiI6ICIiLAorICAgICAgICAgICAgIlpvb20gOiI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlpvb20iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJQU0xvY2FsIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNMT0NBTCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJDb25maXJtIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIEdlYXJzIGluIG9yZGVyIHRvIHVzZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlIGFuZCBjb25maWd1cmF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkVuYWJsaW5nIExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJJbnN0YWxsIjogIiIsCisgICAgICAgICAgICAiTGVhcm4gQWJvdXQgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCByZWxvYWQgdGhlIHBhZ2UsIGNhdXNpbmcgeW91IHRvIGxvc2UgYW55IHVuc2F2ZWQgd29yay4gIFByZXNzIFwiT0tcIiB0byByZWxvYWQuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgdXNlcyBHb29nbGUgR2VhcnMgdG8gZW5hYmxlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UuICBXaXRoIEdlYXJzIGluc3RhbGxlZCwgeW91IGNhbiBzYXZlIGRyYWZ0cyBvZiB5b3VyIGRvY3VtZW50cyBvbiB5b3VyIGhhcmQgZHJpdmUsIGNvbmZpZ3VyZSBYaW5oYSB0byBsb29rIHRoZSB3YXkgeW91IHdhbnQsIGFuZCBjYXJyeSB0aGlzIGluZm9ybWF0aW9uIHdoZXJldmVyIHlvdSB1c2UgWGluaGEgb24gdGhlIHdlYi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiUFNTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU1NFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWxlOiAiOiAiIiwKKyAgICAgICAgICAgICJJbXBvcnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEZXRhaWxzIjogIiIsCisgICAgICAgICAgICAiRmlsZSBCcm93c2VyIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gICAgVGhlcmUgQyAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgVGhlcmUgQSAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyBcIiBUaGVyZSBCIFwiIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gJyBUaGVyZSBEICciOiAiIiwKKyAgICAgICAgICAgICJMaXN0IG9mIFBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIk5ldyBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIk9wZW4iOiAiIiwKKyAgICAgICAgICAgICJPcGVuIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgeW91J2QgbGlrZSB0byBjcmVhdGUuIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBlcmFzZSBhbnkgdW5zYXZlZCBjb250ZW50LiAgSWYgeW91J3JlIGNlcnRhaW4sIHBsZWFzZSBjbGljayBPSyB0byBjb250aW51ZS4iOiAiIiwKKyAgICAgICAgICAgICJXZWIgVVJMIjogIiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICI8PFBTTG9jYWw+PiIsCisgICAgICAgICAgICAiQ29weSI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTWFuYWdlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IjogIjw8SW5zZXJ0Tm90ZT4+IiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEaWN0aW9uYXJ5IjogIiIsCisgICAgICAgICAgICAiRmluaXNoZWQgbGlzdCBvZiBtaXNwZWxsZWQgd29yZHMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MQXJlYSBTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiSSB3aWxsIG9wZW4gaXQgaW4gYSBuZXcgcGFnZS4iOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUiOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUgYWxsIjogIiIsCisgICAgICAgICAgICAiSW5mbyI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIjogIiIsCisgICAgICAgICAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIiIsCisgICAgICAgICAgICAiT3JpZ2luYWwgd29yZCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gb3BlbiB0aGlzIGxpbmsiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdDogY2hhbmdpbmcgZGljdGlvbmFyeSB0byI6ICIiLAorICAgICAgICAgICAgInBsaXogd2VpdCA7LSkiOiAiIiwKKyAgICAgICAgICAgICJSZS1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGFsbCI6ICIiLAorICAgICAgICAgICAgIlJldmVydCI6ICIiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrZXIiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbC1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlN1Z2dlc3Rpb25zIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlRlbXBsYXRlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiSW5zZXJ0IHRlbXBsYXRlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuRm9ybWF0IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWxsIjogIiIsCisgICAgICAgICAgICAiQWxsIEhUTUw6IjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgQXJlYSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIG9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0aW5nOiI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCB3aGljaCB0eXBlcyBvZiBmb3JtYXR0aW5nIHlvdSB3b3VsZCBsaWtlIHRvIHJlbW92ZS4iOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Rpb24iOiAiIgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL3NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvc2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTczNGM1MgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL3NoLmpzCkBAIC0wLDAgKzEsMTU3NSBAQAorLy8gWGluaGEgTGFuZ3VhZ2UgQ29tYmluZWQgVHJhbnNsYXRpb24gRmlsZQorLy8KKy8vIExBTkc6ICJzaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElOU1RSVUNUSU9OUyBUTyBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gWW91ciB0cmFuc2xhdGlvbiBtdXN0IGJlIGluIFVURi04IENoYXJhY3RlciBFbmNvZGluZy4KKy8vCisvLyBUaGlzIGlzIGEgSlNPTiBlbmNvZGVkIGZpbGUgKHBsdXMgY29tbWVudHMpLCBzdHJpbmdzIHNob3VsZCBiZSBkb3VibGUtcXVvdGUKKy8vIG9ubHksIGRvIG5vdCB1c2Ugc2luZ2xlIHF1b3RlcyB0byBzdXJyb3VuZCBzdHJpbmdzIC0gImhlbGxvIiwgbm90ICdoZWxsbycKKy8vIGRvIG5vdCBoYXZlIGEgdHJhaWxpbmcgY29tbWEgYWZ0ZXIgdGhlIGxhc3QgZW50cnkgaW4gYSBzZWN0aW9uLgorLy8KKy8vIE9ubHkgZnVsbCBsaW5lIGNvbW1lbnRzIGFyZSBhbGxvd2VkICh0aGF0IGEgY29tbWVudHMgb2NjdXB5IGVudGlyZSBsaW5lcykuCisvLworLy8gU2VhcmNoIGZvciB0aGUgX19ORVdfVFJBTlNMQVRJT05TX18gc2VjdGlvbiBiZWxvdywgdGhpcyBpcyB3aGVyZSB5b3Ugd2lsbAorLy8gd2FudCB0byBmb2N1cywgdGhpcyBzZWN0aW9uIGluY2x1ZGVzIHRoaW5ncyB0aGF0IGRvIG5vdCBwcmVzZW50bHkgaGF2ZSBhIAorLy8gdHJhbnNsYXRpb24gb3IgZm9yIHdoaWNoIHRoZSB0cmFuc2xhdGlvbiBuZWVkcyB0byBiZSBjaGVja2VkIGZvciBhY2N1cmFjeS4KKy8vCisvLyBJbiB0aGUgTmV3IFRyYW5zbGF0aW9ucyBzZWN0aW9uIGEgdHJhbnNsYXRpb24gc3RyaW5nIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICIiCisvLyAgICAgVGhpcyBtZWFucyBpdCBpcyBub3QgdHJhbnNsYXRlZCB5ZXQsIGFkZCB5b3VyIHRyYW5zbGF0aW9uLi4uCisvLyAgICAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIktsaW5nb24gU3RyaW5nIEhlcmUiCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJUcmFuc2xhdGVkIFN0cmluZyBIZXJlIgorLy8gICAgIFRoaXMgbWVhbnMgdGhhdCBhbiBleGlzdGluZyB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcsIGluIHNvbWUgb3RoZXIKKy8vICAgICBzZWN0aW9uIGhhcyBiZWVuIGZvdW5kLCBhbmQgdXNlZC4gIENoZWNrIHRoYXQgaXQgaXMgYXBwcm9wcml0ZSBmb3IgdGhpcworLy8gICAgIHNlY3Rpb24gYW5kIGlmIGl0IGlzLCB0aGF0J3MgZmluZSBsZWF2ZSBpdCBhcyBpcywgb3RoZXJ3aXNlIGNoYW5nZSBhcworLy8gICAgIGFwcHJvcHJpYXRlLgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiPDxBbm90aGVyU2VjdGlvbj4+IgorLy8gICAgIFRoaXMgbWVhbnMgdXNlIHRoZSBzYW1lIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZyBhcyA8PEFub3RoZXJTZWN0aW9uPj4KKy8vICAgICB0aGlzIHNhdmVzIHlvdSByZS10cmFubGF0aW5nIHN0cmluZ3MuICBJZiB0aGUgQ29udGV4dCBvZiB0aGlzIHNlY3Rpb24KKy8vICAgICBhbmQgdGhlIGNvbnRleHQgb2YgQW5vdGhlclNlY3Rpb24gc2VlbSB0aGUgc2FtZSwgdGhhdCdzIGZpbmUgbGVhdmUgaXQKKy8vICAgICB1c2luZyB0aGF0IHRyYW5zbGF0aW9uLCBidXQgaWYgdGhpcyBzZWN0aW9uIG5lZWRzIGEgZGlmZmVyZW50IHRyYW5zbGF0aW9uLCAKKy8vICAgICB5b3UgY2FuIHByb3ZpZGUgaXQgYnkgcmVwbGFjaW5nIHRoZSBsaW5rICg8PEFub3RoZXJTZWN0aW9uPj4pIHdpdGggdGhhdAorLy8gICAgIG5ldyB0cmFuc2xhdGlvbi4gIEZvciBleGFtcGxlIC0gYSAiVGFibGUiIGluIHNheSAiRGF0YVBsdWdpbiIgaXMgCisvLyAgICAgcGVyaGFwcyB0cmFuc2xhdGVkIGRpZmZlcmVudGx5IHRvICJUYWJsZSIgaW4gIkZ1cm5pdHVyZVBsdWdpbiIuCisvLworLy8gVEVTVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBwbGFjZSB5b3VyIHRyYW5zbGF0aW9uIGZpbGUgb24geW91ciB3ZWJzZXJ2ZXIgc29tZXdoZXJlIGZvciBleGFtcGxlCisvLworLy8gICAveGluaGEvbGFuZy9tZXJnZWQvc2guanMKKy8vCisvLyBhbmQgdGhlbiB0ZWxsIFhpbmhhIHdoZXJlIHRvIGdldCBpdCAoYmVmb3JlIGxvYWRpbmcgWGluaGFDb3JlLmpzKSBieSAKKy8vCisvLyAgX2VkaXRvcl9sYW5nICAgICAgICAgICAgICA9ICdzaCc7CisvLyAgX2VkaXRvcl9sYW5nX21lcmdlZF9maWxlICA9ICcveGluaGEvbGFuZy9tZXJnZWQvc2guanMnOworLy8KKy8vIFhpbmhhIHdpbGwgbG9hZCB5b3VyIG5ldyBsYW5ndWFnZSBkZWZpbml0aW9uLgorLy8KKy8vIFNVQk1JVFRJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgY3JlYXRlIGEgVGlja2V0IG9uIHRoZSBYaW5oYSB3ZWJzaXRlIGFuZCBhdHRhY2ggeW91ciB0cmFuc2xhdGlvbiAKKy8vIGZpbGUuCisvLworLy8gVGhlIFhpbmhhIGRldmVsb3BlcnMgd2lsbCB0YWtlIHlvdXIgZmlsZSBhbmQgdXNlIHRoZSAKKy8vICAgICBjb250cmliL2xjX3NwbGl0X21lcmdlZF9maWxlLnBocAorLy8gc2NyaXB0IHRvIGxvYWQgaXQgaW50byB0aGUgWGluaGEgZGlzdHJpYnV0aW9uLgorCit7CisgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJBYm91dEJveCI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIk8gb3ZvbSBlZGl0b3J1IgorICAgIH0sCisgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIKKyAgICB9LAorICAgICJDb2xvclBpY2tlciI6IHsKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiUmF2bmFuamUgcG8gc2ltZXRyYWxpIiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICJQdW5vIHJhdm5hbmplIiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICJSYXZuYW5qZSB1bGV2byIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIlJhdm5hbmplIHVkZXNubyIKKyAgICB9LAorICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJEb2Rhai9wcm9tZW5pIExpbmsiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOb3ZvbSBwcm96b3J1IChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAia29yaXN0aSBwb2RyYXp1bWV2YW5vIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk90aGVyIjogIkRydWdvIiwKKyAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJJc3RpIGZyZWptIChfc2VsZikiLAorICAgICAgICAiVGFyZ2V0OiI6ICJPdHZvcmkgdToiLAorICAgICAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICJOYXppdiAodG9vbHRpcCk6IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiR2xhdm5pIGZyZWptIChfdG9wKSIsCisgICAgICAgICJVUkw6IjogIlVSTDoiCisgICAgfSwKKyAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQcmV2aWV3IjogIlByZWdsZWQiCisgICAgfSwKKyAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJBcHNvbHV0bm8gZG5vIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJBcHNvbHV0bmEgc3JlZGluYSIsCisgICAgICAgICJCYXNlbGluZSI6ICJEb25qYSBsaW5pamEiLAorICAgICAgICAiQm90dG9tIjogIkRubyIsCisgICAgICAgICJDYW5jZWwiOiAiUG9uacWhdGkiLAorICAgICAgICAiTGVmdCI6ICJMZXZvIiwKKyAgICAgICAgIk1pZGRsZSI6ICJTcmVkaW5hIiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTm92b20gcHJvem9ydSAoX2JsYW5rKSIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogImtvcmlzdGkgcG9kcmF6dW1ldmFubyIsCisgICAgICAgICJOb3Qgc2V0IjogIk5pamUgcG9zdGF2bGplbm8iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJQb3N0YXZsamFuamUgb3ZlIHNsaWtlIiwKKyAgICAgICAgIlByZXZpZXciOiAiUHJlZ2xlZCIsCisgICAgICAgICJSaWdodCI6ICJEZXNubyIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiSXN0aSBmcmVqbSAoX3NlbGYpIiwKKyAgICAgICAgIlRleHR0b3AiOiAiVnJoIHRla3N0YSIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCkiOiAiTmF6aXYgKHRvb2x0aXApOiIsCisgICAgICAgICJUb3AiOiAiVnJoIiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiR2xhdm5pIGZyZWptIChfdG9wKSIsCisgICAgICAgICJXaWR0aCI6ICLFoGlyaW5hIiwKKyAgICAgICAgIldpZHRoOiI6ICLFoGlyaW5hIgorICAgIH0sCisgICAgIkZvcm1zIjogeworICAgICAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiVVJMIHNsaWtlIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlJvd3M6IjogIlJlZG92aSIKKyAgICB9LAorICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJIb3Jpem9udGFsUnVsZSI6IHsKKyAgICAgICAgIkFsaWdubWVudDoiOiAiUmF2bmFuamUiLAorICAgICAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICJIb3Jpem9udGFsbmEgbGluaWphIiwKKyAgICAgICAgIkxheW91dCI6ICJQcmVsb20iLAorICAgICAgICAiTGVmdCI6ICJMZXZvIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlJpZ2h0IjogIkRlc25vIiwKKyAgICAgICAgIldpZHRoOiI6ICLFoGlyaW5hIgorICAgIH0sCisgICAgIkltYWdlTWFuYWdlciI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJBcHNvbHV0bm8gZG5vIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJBcHNvbHV0bmEgc3JlZGluYSIsCisgICAgICAgICJCYXNlbGluZSI6ICJEb25qYSBsaW5pamEiLAorICAgICAgICAiQm90dG9tIjogIkRubyIsCisgICAgICAgICJDYW5jZWwiOiAiUG9uacWhdGkiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIlViYWNpIHNsaWt1IiwKKyAgICAgICAgIkxlZnQiOiAiTGV2byIsCisgICAgICAgICJNaWRkbGUiOiAiU3JlZGluYSIsCisgICAgICAgICJOb3Qgc2V0IjogIk5pamUgcG9zdGF2bGplbm8iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJQb3N0YXZsamFuamUgb3ZlIHNsaWtlIiwKKyAgICAgICAgIlJpZ2h0IjogIkRlc25vIiwKKyAgICAgICAgIlRleHR0b3AiOiAiVnJoIHRla3N0YSIsCisgICAgICAgICJUb3AiOiAiVnJoIiwKKyAgICAgICAgIldpZHRoOiI6ICLFoGlyaW5hIgorICAgIH0sCisgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgIkJhc2VsaW5lIjogIkRvbmphIGxpbmlqYSIsCisgICAgICAgICJCb3R0b20iOiAiRG5vIiwKKyAgICAgICAgIkltYWdlIFVSTCI6ICJVUkwgc2xpa2UiLAorICAgICAgICAiTGF5b3V0IjogIlByZWxvbSIsCisgICAgICAgICJMZWZ0IjogIkxldm8iLAorICAgICAgICAiTWlkZGxlIjogIlNyZWRpbmEiLAorICAgICAgICAiUmlnaHQiOiAiRGVzbm8iLAorICAgICAgICAiVG9wIjogIlZyaCIsCisgICAgICAgICJXaWR0aCI6ICLFoGlyaW5hIgorICAgIH0sCisgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJBcHNvbHV0bm8gZG5vIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJBcHNvbHV0bmEgc3JlZGluYSIsCisgICAgICAgICJBbGlnbm1lbnQ6IjogIlJhdm5hbmplIiwKKyAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJBbHRlcm5hdGl2bmkgdGVrc3QiLAorICAgICAgICAiQmFzZWxpbmUiOiAiRG9uamEgbGluaWphIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIkRlYmxqaW5hIG9rdmlyYSIsCisgICAgICAgICJCb3R0b20iOiAiRG5vIiwKKyAgICAgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiVW5lc2l0ZSBVUkwgc2xpa2Ugb3ZkZSIsCisgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJaYSBwcmV0cmHFvml2YcSNZSBrb2ppIG5lIHBvZHLFvmF2YWp1IHNsaWtlIiwKKyAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICJIb3Jpem9udGFsbm8gb2RzdG9qYW5qZSIsCisgICAgICAgICJIb3Jpem9udGFsOiI6ICJQbyBob3Jpem9udGFsaSIsCisgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICJQcmVnbGVkIHNsaWtlIiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiVVJMIHNsaWtlIiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICJVYmFjaSBzbGlrdSIsCisgICAgICAgICJMYXlvdXQiOiAiUHJlbG9tIiwKKyAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiT3N0YXZpIHByYXpubyBrYWQgbmVtYSBva3ZpcmEiLAorICAgICAgICAiTGVmdCI6ICJMZXZvIiwKKyAgICAgICAgIk1pZGRsZSI6ICJTcmVkaW5hIiwKKyAgICAgICAgIk5vdCBzZXQiOiAiTmlqZSBwb3N0YXZsamVubyIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIlBvc3RhdmxqYW5qZSBvdmUgc2xpa2UiLAorICAgICAgICAiUHJldmlldyI6ICJQcmVnbGVkIiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJQcmVnbGVkYWogc2xpa3UgdSBub3ZvbSBwcm96b3J1IiwKKyAgICAgICAgIlJpZ2h0IjogIkRlc25vIiwKKyAgICAgICAgIlNwYWNpbmciOiAiUmF6bWFrIiwKKyAgICAgICAgIlRleHR0b3AiOiAiVnJoIHRla3N0YSIsCisgICAgICAgICJUb3AiOiAiVnJoIiwKKyAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiVmVydGlrYWxubyBvZHN0b2phbmplIiwKKyAgICAgICAgIlZlcnRpY2FsOiI6ICJQbyB2ZXJ0aWthbGkiCisgICAgfSwKKyAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgICAgICJMZWZ0IjogIkxldm8iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUmlnaHQiOiAiRGVzbm8iLAorICAgICAgICAiV2lkdGg6IjogIsWgaXJpbmEiCisgICAgfSwKKyAgICAiSW5zZXJ0Tm90ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIKKyAgICB9LAorICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAiQWJzYm90dG9tIjogIkFwc29sdXRubyBkbm8iLAorICAgICAgICAiQWJzbWlkZGxlIjogIkFwc29sdXRuYSBzcmVkaW5hIiwKKyAgICAgICAgIkFsaWdubWVudDoiOiAiUmF2bmFuamUiLAorICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIkFsdGVybmF0aXZuaSB0ZWtzdCIsCisgICAgICAgICJCYXNlbGluZSI6ICJEb25qYSBsaW5pamEiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiRGVibGppbmEgb2t2aXJhIiwKKyAgICAgICAgIkJvdHRvbSI6ICJEbm8iLAorICAgICAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIiwKKyAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICJVbmVzaXRlIFVSTCBzbGlrZSBvdmRlIiwKKyAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIlphIHByZXRyYcW+aXZhxI1lIGtvamkgbmUgcG9kcsW+YXZhanUgc2xpa2UiLAorICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIkhvcml6b250YWxubyBvZHN0b2phbmplIiwKKyAgICAgICAgIkhvcml6b250YWw6IjogIlBvIGhvcml6b250YWxpIiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIlByZWdsZWQgc2xpa2UiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJVUkwgc2xpa2UiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIlViYWNpIHNsaWt1IiwKKyAgICAgICAgIkxheW91dCI6ICJQcmVsb20iLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJPc3RhdmkgcHJhem5vIGthZCBuZW1hIG9rdmlyYSIsCisgICAgICAgICJMZWZ0IjogIkxldm8iLAorICAgICAgICAiTWlkZGxlIjogIlNyZWRpbmEiLAorICAgICAgICAiTm90IHNldCI6ICJOaWplIHBvc3RhdmxqZW5vIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zdGF2bGphbmplIG92ZSBzbGlrZSIsCisgICAgICAgICJQcmV2aWV3IjogIlByZWdsZWQiLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlByZWdsZWRhaiBzbGlrdSB1IG5vdm9tIHByb3pvcnUiLAorICAgICAgICAiUmlnaHQiOiAiRGVzbm8iLAorICAgICAgICAiU3BhY2luZyI6ICJSYXptYWsiLAorICAgICAgICAiVGV4dHRvcCI6ICJWcmggdGVrc3RhIiwKKyAgICAgICAgIlRvcCI6ICJWcmgiLAorICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICJWZXJ0aWthbG5vIG9kc3RvamFuamUiLAorICAgICAgICAiVmVydGljYWw6IjogIlBvIHZlcnRpa2FsaSIsCisgICAgICAgICJXaWR0aDoiOiAixaBpcmluYSIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0IjogeworICAgICAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIgorICAgIH0sCisgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAiQWJzYm90dG9tIjogIkFwc29sdXRubyBkbm8iLAorICAgICAgICAiQWJzbWlkZGxlIjogIkFwc29sdXRuYSBzcmVkaW5hIiwKKyAgICAgICAgIkFsaWdubWVudDoiOiAiUmF2bmFuamUiLAorICAgICAgICAiQmFzZWxpbmUiOiAiRG9uamEgbGluaWphIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIkRlYmxqaW5hIG9rdmlyYSIsCisgICAgICAgICJCb3R0b20iOiAiRG5vIiwKKyAgICAgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgICAgICJDZWxsIHBhZGRpbmc6IjogIlVudXRyYcWhbmphIG9kc3RvamFuamEgdSDEh2VsaWppIiwKKyAgICAgICAgIkNlbGwgc3BhY2luZzoiOiAiUmFzdG9qYW5qZSDEh2VsaWphIiwKKyAgICAgICAgIkNvbHM6IjogIktvbG9uZSIsCisgICAgICAgICJFbSI6ICJFbSIsCisgICAgICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIkZpa3NpcmFuYSDFoWlyaW5hIGtvbG9uYSIsCisgICAgICAgICJJbnNlcnQgVGFibGUiOiAiVWJhY2kgdGFiZWx1IiwKKyAgICAgICAgIkxheW91dCI6ICJQcmVsb20iLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJPc3RhdmkgcHJhem5vIGthZCBuZW1hIG9rdmlyYSIsCisgICAgICAgICJMZWZ0IjogIkxldm8iLAorICAgICAgICAiTWlkZGxlIjogIlNyZWRpbmEiLAorICAgICAgICAiTm90IHNldCI6ICJOaWplIHBvc3RhdmxqZW5vIiwKKyAgICAgICAgIk51bWJlciBvZiBjb2x1bW5zIjogIkJyb2oga29sb25hIiwKKyAgICAgICAgIk51bWJlciBvZiByb3dzIjogIkJyb2ogcmVkb3ZhIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBlcmNlbnQiOiAiUHJvY2VuYXQiLAorICAgICAgICAiUGl4ZWxzIjogIlBpa3NlbGkiLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICJQb3N0YXZsamFuamUgb3ZlIHRhYmVsZSIsCisgICAgICAgICJSaWdodCI6ICJEZXNubyIsCisgICAgICAgICJSb3dzOiI6ICJSZWRvdmkiLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICJSYXN0b2phbmplIG5hc3ByYW1uaWggxIdlbGlqYSIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIlJhc3RvamFuamUgaXptZcSRdSBzYWRyxb5hamEgaSBva3ZpcmEgxIdlbGlqZSIsCisgICAgICAgICJTcGFjaW5nIjogIlJhem1hayIsCisgICAgICAgICJUZXh0dG9wIjogIlZyaCB0ZWtzdGEiLAorICAgICAgICAiVG9wIjogIlZyaCIsCisgICAgICAgICJXaWR0aCBvZiB0aGUgdGFibGUiOiAixaBpcmluYSB0YWJlbGUiLAorICAgICAgICAiV2lkdGggdW5pdCI6ICJKZWRpbmljYSDFoWlyaW5lIiwKKyAgICAgICAgIldpZHRoOiI6ICLFoGlyaW5hIgorICAgIH0sCisgICAgIkxpbmtlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiRG9kYWovcHJvbWVuaSBMaW5rIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlRhcmdldDoiOiAiT3R2b3JpIHU6IiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIKKyAgICB9LAorICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIiwKKyAgICAgICAgIkltYWdlIFByZXZpZXciOiAiUHJlZ2xlZCBzbGlrZSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQcmV2aWV3IjogIlByZWdsZWQiLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlByZWdsZWRhaiBzbGlrdSB1IG5vdm9tIHByb3pvcnUiCisgICAgfSwKKyAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIKKyAgICB9LAorICAgICJQYXN0ZVRleHQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUG9uacWhdGkiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUG9uacWhdGkiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIlViYWNpIHNsaWt1IgorICAgIH0sCisgICAgIlF1aWNrVGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIgorICAgIH0sCisgICAgIlNldElkIjogeworICAgICAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlRhYmxlT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJSb3dzIjogIlJlZG92aSIsCisgICAgICAgICJTcGFjaW5nIjogIlJhem1hayIKKyAgICB9LAorICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIKKyAgICB9LAorICAgICJVbkZvcm1hdCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJYaW5oYSI6IHsKKyAgICAgICAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiJiM4MjEyOyBGb3JtYXQgJiM4MjEyOyIsCisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJPIG92b20gZWRpdG9ydSIsCisgICAgICAgICJBZGRyZXNzIjogIkFkcmVzYSIsCisgICAgICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIkJvamEgcG96YWRpbmUiLAorICAgICAgICAiQm9sZCI6ICJNYXNubyIsCisgICAgICAgICJCdWxsZXRlZCBMaXN0IjogIkxpc3RhIHNhIHNpbWJvbGltYSIsCisgICAgICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICJPYnJpxaFpIGRvZGVsamVuZSBvc29iaW5lIGZvbnRhIiwKKyAgICAgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiT2JyacWhaSBNU09mZmljZSB0YWdvdmUiLAorICAgICAgICAiQ29weSBzZWxlY3Rpb24iOiAiS29waXJhaiBpemFicmFubyIsCisgICAgICAgICJDdXJyZW50IHN0eWxlIjogIlZhxb5lxIdpIHN0aWwiLAorICAgICAgICAiQ3V0IHNlbGVjdGlvbiI6ICJJc2VjaSBpemFicmFubyIsCisgICAgICAgICJEZWNyZWFzZSBJbmRlbnQiOiAic21hbmppIHV2bGHEjWVuamUiLAorICAgICAgICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiUHJhdmFjIHMgbGV2YSBuYSBkZXNubyIsCisgICAgICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJQcmF2YWMgcyBkZXNuYSBuYSBsZXZvIiwKKyAgICAgICAgIkZvbnQgQ29sb3IiOiAiQm9qYSBzbG92YSIsCisgICAgICAgICJGb3JtYXR0ZWQiOiAiRm9ybWF0aXJhbiIsCisgICAgICAgICJIZWFkaW5nIDEiOiAiWmFnbGF2bGplIDEiLAorICAgICAgICAiSGVhZGluZyAyIjogIlphZ2xhdmxqZSAyIiwKKyAgICAgICAgIkhlYWRpbmcgMyI6ICJaYWdsYXZsamUgMyIsCisgICAgICAgICJIZWFkaW5nIDQiOiAiWmFnbGF2bGplIDQiLAorICAgICAgICAiSGVhZGluZyA1IjogIlphZ2xhdmxqZSA1IiwKKyAgICAgICAgIkhlYWRpbmcgNiI6ICJaYWdsYXZsamUgNiIsCisgICAgICAgICJIZWxwIHVzaW5nIGVkaXRvciI6ICJQb21vxIcgcHJpIGtvcmnFocSHZW5qdSBlZGl0b3JhIiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICJIb3Jpem9udGFsbmEgbGluaWphIiwKKyAgICAgICAgIkluY3JlYXNlIEluZGVudCI6ICJQb3ZlxIdhaiB1dmxhxI1lbmplIiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICJVYmFjaSB0YWJlbHUiLAorICAgICAgICAiSW5zZXJ0IFdlYiBMaW5rIjogIkRvZGFqIHdlYiBsaW5rIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiRG9kYWovcHJvbWVuaSBzbGlrdSIsCisgICAgICAgICJJdGFsaWMiOiAiS3Vyeml2IiwKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogIlJhdm5hbmplIHBvIHNpbWV0cmFsaSIsCisgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAiUHVubyByYXZuYW5qZSIsCisgICAgICAgICJKdXN0aWZ5IExlZnQiOiAiUmF2bmFuamUgdWxldm8iLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICJSYXZuYW5qZSB1ZGVzbm8iLAorICAgICAgICAiTm9ybWFsIjogIk9iacSNYW4iLAorICAgICAgICAiT3JkZXJlZCBMaXN0IjogIkxpc3RhIHNhIHJlZG5pbSBicm9qZXZpbWEiLAorICAgICAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiWmFsZXBpIGl6IGtsaXBib3JkYSIsCisgICAgICAgICJQYXRoIjogIlB1dGFuamEiLAorICAgICAgICAiUHJpbnQgZG9jdW1lbnQiOiAixaB0YW1wYWogZG9rdW1lbnQiLAorICAgICAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiVnJhxIdhIHBvc2xlZG5qdSByYWRuanUiLAorICAgICAgICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAiVWtvbmkgZm9ybWF0aXJhbmplIiwKKyAgICAgICAgIlNlbGVjdCBDb2xvciI6ICJJemFiZXJpdGUgYm9qdSIsCisgICAgICAgICJTZWxlY3QgYWxsIjogIkl6YWJlcmkgc3ZlIiwKKyAgICAgICAgIlNwbGl0IEJsb2NrIjogIlBvZGVsaSBibG9rIiwKKyAgICAgICAgIlN0cmlrZXRocm91Z2giOiAiUHJlY3J0YW5vIiwKKyAgICAgICAgIlN1YnNjcmlwdCI6ICJJbmRla3MtdGVrc3QiLAorICAgICAgICAiU3VwZXJzY3JpcHQiOiAiRWtzcG9uZW50LXRla3N0IiwKKyAgICAgICAgIlRvZ2dsZSBCb3JkZXJzIjogIkl6bWVuaSBva3ZpcmUiLAorICAgICAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIlByZWJhY2kgbmEgSFRNTCBrb2QiLAorICAgICAgICAiVW5kZXJsaW5lIjogIlBvZHZ1xI1lbm8iLAorICAgICAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiUG9uacWhdGF2YSBwb3NsZWRuanUgcmFkbmp1IiwKKyAgICAgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJOYWxheml0ZSBzZSB1IFRFWFQgcmXFvmltdS4gIEtvcmlzdGl0ZSBbPD5dIGR1Z21lIHphIHBvdnJhdGFrIG5hIFdZU0lXWUcuIgorICAgIH0sCisgICAgIl9fTkVXX1RSQU5TTEFUSU9OU19fIjogeworICAgICAgICAiQWJicmV2aWF0aW9uIjogeworICAgICAgICAgICAgIkFiYnJldmlhdGlvbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICIiLAorICAgICAgICAgICAgIkV4cGFuc2lvbjoiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQWJvdXRCb3giOiB7CisgICAgICAgICAgICAiQ2xvc2UiOiAiPDxYaW5oYT4+IgorICAgICAgICB9LAorICAgICAgICAiQ2hhckNvdW50ZXIiOiB7CisgICAgICAgICAgICAiLi4uIGluIHByb2dyZXNzIjogIiIsCisgICAgICAgICAgICAiQ2hhcnMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIiIsCisgICAgICAgICAgICAiV29yZHMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2hhcmFjdGVyTWFwIjogeworICAgICAgICAgICAgIkluc2VydCBzcGVjaWFsIGNoYXJhY3RlciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDb2xvclBpY2tlciI6IHsKKyAgICAgICAgICAgICJDbGljayBhIGNvbG9yLi4uIjogIiIsCisgICAgICAgICAgICAiQ29sb3I6ICI6ICIiLAorICAgICAgICAgICAgIlNhbXBsZSI6ICIiLAorICAgICAgICAgICAgIldlYiBTYWZlOiAiOiAiIiwKKyAgICAgICAgICAgICJDbG9zZSI6ICI8PFhpbmhhPj4iCisgICAgICAgIH0sCisgICAgICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgICAgICJfRGVsZXRlIFJvdyI6ICIiLAorICAgICAgICAgICAgIl9JbWFnZSBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiX01vZGlmeSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1JlbW92ZSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1RhYmxlIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJDX2VsbCBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiQ2hlY19rIExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJDb3B5IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIGEgbGluayI6ICIiLAorICAgICAgICAgICAgIkN1cnJlbnQgVVJMIGlzIjogIiIsCisgICAgICAgICAgICAiQ3V0IjogIiIsCisgICAgICAgICAgICAiRGVfbGV0ZSBDb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgQ2VsbCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIiIsCisgICAgICAgICAgICAiSG93IGRpZCB5b3UgZ2V0IGhlcmU/IChQbGVhc2UgcmVwb3J0ISkiOiAiIiwKKyAgICAgICAgICAgICJJX25zZXJ0IFJvdyBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYWZ0ZXIgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJMaW5rIHBvaW50cyB0bzoiOiAiIiwKKyAgICAgICAgICAgICJNYWtlIGxpbl9rLi4uIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiUGFzdGUiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGVsZW1lbnQ6IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJSb193IFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBpbWFnZSBwcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIFJvdyBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlVubGluayB0aGUgY3VycmVudCBlbGVtZW50IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIiIsCisgICAgICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRlZmluaXRpb25MaXN0IjogeworICAgICAgICAgICAgImRlZmluaXRpb24gZGVzY3JpcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGxpc3QiOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIHRlcm0iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRGlhbG9ncyI6IHsKKyAgICAgICAgICAgICJTb21lIFRleHQgSGVyZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEeW5hbWljQ1NTIjogeworICAgICAgICAgICAgIkNob29zZSBzdHlsZXNoZWV0IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCI6ICIiLAorICAgICAgICAgICAgIlVuZGVmaW5lZCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFZGl0VGFnIjogeworICAgICAgICAgICAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICIiLAorICAgICAgICAgICAgIkVkaXQgVGFnIEJ5IFBlZyI6ICIiLAorICAgICAgICAgICAgIlRhZyBFZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICAgICAiIT0iOiAiIiwKKyAgICAgICAgICAgICIhaW4iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7LSI6ICIiLAorICAgICAgICAgICAgIiZndDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSZndDsiOiAiIiwKKyAgICAgICAgICAgICImbHQ7eCZndDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYCFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgLmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAwYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDJgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgM2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA0YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA3YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDhgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGBlYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsmbmJzcDtgMWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YCt7Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2AtOlxcIGAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLXs6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YENgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGNvc2AiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgbG5gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHBpYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgc2luYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0YW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRpbWVzYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZxdW90O3RleHQmcXVvdDsiOiAiIiwKKyAgICAgICAgICAgICInK2Zvcm11bGErJyI6ICIiLAorICAgICAgICAgICAgIigobiksKGspKSI6ICIiLAorICAgICAgICAgICAgIih4KzEpLyh4LTEpIjogIiIsCisgICAgICAgICAgICAiKiI6ICIiLAorICAgICAgICAgICAgIioqIjogIiIsCisgICAgICAgICAgICAiKy0iOiAiIiwKKyAgICAgICAgICAgICItJmd0OyI6ICIiLAorICAgICAgICAgICAgIi0mbHQ7IjogIiIsCisgICAgICAgICAgICAiLToiOiAiIiwKKyAgICAgICAgICAgICItPSI6ICIiLAorICAgICAgICAgICAgIi8vIjogIiIsCisgICAgICAgICAgICAiL18iOiAiIiwKKyAgICAgICAgICAgICI6LiI6ICIiLAorICAgICAgICAgICAgIj0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiQCI6ICIiLAorICAgICAgICAgICAgIltbYSxiXSxbYyxkXV0iOiAiIiwKKyAgICAgICAgICAgICJcXFxcIjogIiIsCisgICAgICAgICAgICAiXFxuQ2xpY2sgaW4gdGhlIGJveCB0byB1c2UgeW91ciBrZXlib2FyZCBvciB1c2UgdGhlIGJ1dHRvbnNcXG4iOiAiIiwKKyAgICAgICAgICAgICJeXiI6ICIiLAorICAgICAgICAgICAgIl5eXiI6ICIiLAorICAgICAgICAgICAgIl9ffCI6ICIiLAorICAgICAgICAgICAgIl98XyI6ICIiLAorICAgICAgICAgICAgImAhPWAiOiAiIiwKKyAgICAgICAgICAgICJgIWluYCI6ICIiLAorICAgICAgICAgICAgImAmYW5kO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmNhcDtgIjogIiIsCisgICAgICAgICAgICAiYCZjdXA7YCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7LWAiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDt4Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJm9yO2AiOiAiIiwKKyAgICAgICAgICAgICJgJnF1b3Q7dGV4dCZxdW90O2AiOiAiIiwKKyAgICAgICAgICAgICJgKChuKSwoaykpYCI6ICIiLAorICAgICAgICAgICAgImAoeCsxKS8oeC0xKWAiOiAiIiwKKyAgICAgICAgICAgICJgKipgIjogIiIsCisgICAgICAgICAgICAiYCpgIjogIiIsCisgICAgICAgICAgICAiYCstYCI6ICIiLAorICAgICAgICAgICAgImAtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLSZsdDtgIjogIiIsCisgICAgICAgICAgICAiYC06YCI6ICIiLAorICAgICAgICAgICAgImAtPWAiOiAiIiwKKyAgICAgICAgICAgICJgLy9gIjogIiIsCisgICAgICAgICAgICAiYC9fYCI6ICIiLAorICAgICAgICAgICAgImA6LmAiOiAiIiwKKyAgICAgICAgICAgICJgPSZndDtgIjogIiIsCisgICAgICAgICAgICAiYEBgIjogIiIsCisgICAgICAgICAgICAiYFtbYSxiXSxbYyxkXV1gIjogIiIsCisgICAgICAgICAgICAiYFxcXFxgIjogIiIsCisgICAgICAgICAgICAiYF9ffGAiOiAiIiwKKyAgICAgICAgICAgICJgX3xfYCI6ICIiLAorICAgICAgICAgICAgImBBQWAiOiAiIiwKKyAgICAgICAgICAgICJgYWxlcGhgIjogIiIsCisgICAgICAgICAgICAiYGFscGhhYCI6ICIiLAorICAgICAgICAgICAgImBhbmRgIjogIiIsCisgICAgICAgICAgICAiYGJhcmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgQ0NgIjogIiIsCisgICAgICAgICAgICAiYGNjYWAiOiAiIiwKKyAgICAgICAgICAgICJgY2hpYCI6ICIiLAorICAgICAgICAgICAgImBkYXJyYCI6ICIiLAorICAgICAgICAgICAgImBkZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsYCI6ICIiLAorICAgICAgICAgICAgImBEZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRpYW1vbmRgIjogIiIsCisgICAgICAgICAgICAiYGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGR5L2R4YCI6ICIiLAorICAgICAgICAgICAgImBFRWAiOiAiIiwKKyAgICAgICAgICAgICJgZXBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgZXRhYCI6ICIiLAorICAgICAgICAgICAgImBmcmFgIjogIiIsCisgICAgICAgICAgICAiYEdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBnYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ3JhZGAiOiAiIiwKKyAgICAgICAgICAgICJgaGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaGF0YWAiOiAiIiwKKyAgICAgICAgICAgICJgaWZgIjogIiIsCisgICAgICAgICAgICAiYGluYCI6ICIiLAorICAgICAgICAgICAgImBpbnRgIjogIiIsCisgICAgICAgICAgICAiYGlvdGFgIjogIiIsCisgICAgICAgICAgICAiYGthcHBhYCI6ICIiLAorICAgICAgICAgICAgImBsYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYExhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGltXyh4LSZndDtvbylgIjogIiIsCisgICAgICAgICAgICAiYGxvZ2AiOiAiIiwKKyAgICAgICAgICAgICJgbXVgIjogIiIsCisgICAgICAgICAgICAiYE5OYCI6ICIiLAorICAgICAgICAgICAgImBubmAiOiAiIiwKKyAgICAgICAgICAgICJgbm90YCI6ICIiLAorICAgICAgICAgICAgImBudWAiOiAiIiwKKyAgICAgICAgICAgICJgbytgIjogIiIsCisgICAgICAgICAgICAiYG8uYCI6ICIiLAorICAgICAgICAgICAgImBPL2AiOiAiIiwKKyAgICAgICAgICAgICJgb2ludGAiOiAiIiwKKyAgICAgICAgICAgICJgb21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYE9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBvb2AiOiAiIiwKKyAgICAgICAgICAgICJgb3JgIjogIiIsCisgICAgICAgICAgICAiYG94YCI6ICIiLAorICAgICAgICAgICAgImBQaGlgIjogIiIsCisgICAgICAgICAgICAiYHBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGlgIjogIiIsCisgICAgICAgICAgICAiYHBpYCI6ICIiLAorICAgICAgICAgICAgImBwcm9kYCI6ICIiLAorICAgICAgICAgICAgImBwcm9wYCI6ICIiLAorICAgICAgICAgICAgImBQc2lgIjogIiIsCisgICAgICAgICAgICAiYHBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgUVFgIjogIiIsCisgICAgICAgICAgICAiYHF1YWRgIjogIiIsCisgICAgICAgICAgICAiYHJBcnJgIjogIiIsCisgICAgICAgICAgICAiYHJob2AiOiAiIiwKKyAgICAgICAgICAgICJgcm9vdChuKSh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgUlJgIjogIiIsCisgICAgICAgICAgICAiYHNmYWAiOiAiIiwKKyAgICAgICAgICAgICJgc2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYFNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzcXJ0KHgpYCI6ICIiLAorICAgICAgICAgICAgImBzcXVhcmVgIjogIiIsCisgICAgICAgICAgICAiYHN0YWNrcmVsKC0mZ3Q7KSgrKWAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViYCI6ICIiLAorICAgICAgICAgICAgImBzdWJlYCI6ICIiLAorICAgICAgICAgICAgImBzdW1gIjogIiIsCisgICAgICAgICAgICAiYHN1cGAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwZWAiOiAiIiwKKyAgICAgICAgICAgICJgdGF1YCI6ICIiLAorICAgICAgICAgICAgImBUaGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdGhldGFgIjogIiIsCisgICAgICAgICAgICAiYFRUYCI6ICIiLAorICAgICAgICAgICAgImB0dGFgIjogIiIsCisgICAgICAgICAgICAiYHVhcnJgIjogIiIsCisgICAgICAgICAgICAiYHVsYWAiOiAiIiwKKyAgICAgICAgICAgICJgdXBzaWxvbmAiOiAiIiwKKyAgICAgICAgICAgICJgdXVgIjogIiIsCisgICAgICAgICAgICAiYHZlY2FgIjogIiIsCisgICAgICAgICAgICAiYHZ2YCI6ICIiLAorICAgICAgICAgICAgImB4XyhtbilgIjogIiIsCisgICAgICAgICAgICAiYFhpYCI6ICIiLAorICAgICAgICAgICAgImB4aWAiOiAiIiwKKyAgICAgICAgICAgICJgeHhgIjogIiIsCisgICAgICAgICAgICAiYHpldGFgIjogIiIsCisgICAgICAgICAgICAiYFpaYCI6ICIiLAorICAgICAgICAgICAgImB8LSZndDtgIjogIiIsCisgICAgICAgICAgICAiYHwtLWAiOiAiIiwKKyAgICAgICAgICAgICJgfD09YCI6ICIiLAorICAgICAgICAgICAgImB8X19gIjogIiIsCisgICAgICAgICAgICAiYHx+YCI6ICIiLAorICAgICAgICAgICAgImB+PWAiOiAiIiwKKyAgICAgICAgICAgICJgfnxgIjogIiIsCisgICAgICAgICAgICAiYH5+YCI6ICIiLAorICAgICAgICAgICAgIkFBIjogIiIsCisgICAgICAgICAgICAiYWxlcGgiOiAiIiwKKyAgICAgICAgICAgICJhbHBoYSI6ICIiLAorICAgICAgICAgICAgImFuZCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aCBGb3JtdWxhIElucHV0IjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoTUwgRXhhbXBsZSI6ICIiLAorICAgICAgICAgICAgImJhcmEiOiAiIiwKKyAgICAgICAgICAgICJCYXNlZCBvbiBBU0NJSU1hdGhNTCBieSI6ICIiLAorICAgICAgICAgICAgImJiYSI6ICIiLAorICAgICAgICAgICAgImJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiZXRhIjogIiIsCisgICAgICAgICAgICAiQ0MiOiAiIiwKKyAgICAgICAgICAgICJjY2EiOiAiIiwKKyAgICAgICAgICAgICJjaGkiOiAiIiwKKyAgICAgICAgICAgICJkYXJyIjogIiIsCisgICAgICAgICAgICAiZGRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkZWwiOiAiIiwKKyAgICAgICAgICAgICJEZWx0YSI6ICIiLAorICAgICAgICAgICAgImRlbHRhIjogIiIsCisgICAgICAgICAgICAiZGlhbW9uZCI6ICIiLAorICAgICAgICAgICAgImRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkeS9keCI6ICIiLAorICAgICAgICAgICAgIkVFIjogIiIsCisgICAgICAgICAgICAiZXBzaSI6ICIiLAorICAgICAgICAgICAgImV0YSI6ICIiLAorICAgICAgICAgICAgIkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFzY2lpTWF0aE1MIHZpc2l0IHRoaXMgcGFnZToiOiAiIiwKKyAgICAgICAgICAgICJGb3JtdWxhIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgImZyYSI6ICIiLAorICAgICAgICAgICAgImdhbW1hIjogIiIsCisgICAgICAgICAgICAiR2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJncmFkIjogIiIsCisgICAgICAgICAgICAiaEFyciI6ICIiLAorICAgICAgICAgICAgImhhcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXRhIjogIiIsCisgICAgICAgICAgICAiaWYiOiAiIiwKKyAgICAgICAgICAgICJpbiI6ICIiLAorICAgICAgICAgICAgIklucHV0IjogIiIsCisgICAgICAgICAgICAiaW50IjogIiIsCisgICAgICAgICAgICAiaW50X2FeYmYoeClkeCI6ICIiLAorICAgICAgICAgICAgImlvdGEiOiAiIiwKKyAgICAgICAgICAgICJrYXBwYSI6ICIiLAorICAgICAgICAgICAgIkxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhcnIiOiAiIiwKKyAgICAgICAgICAgICJsQXJyIjogIiIsCisgICAgICAgICAgICAibGltXyh4LSZndDtvbykiOiAiIiwKKyAgICAgICAgICAgICJtdSI6ICIiLAorICAgICAgICAgICAgIk5OIjogIiIsCisgICAgICAgICAgICAibm4iOiAiIiwKKyAgICAgICAgICAgICJubm4iOiAiIiwKKyAgICAgICAgICAgICJub3QiOiAiIiwKKyAgICAgICAgICAgICJudSI6ICIiLAorICAgICAgICAgICAgIm8rIjogIiIsCisgICAgICAgICAgICAiby4iOiAiIiwKKyAgICAgICAgICAgICJPLyI6ICIiLAorICAgICAgICAgICAgIm9pbnQiOiAiIiwKKyAgICAgICAgICAgICJvbWVnYSI6ICIiLAorICAgICAgICAgICAgIk9tZWdhIjogIiIsCisgICAgICAgICAgICAib28iOiAiIiwKKyAgICAgICAgICAgICJvciI6ICIiLAorICAgICAgICAgICAgIm94IjogIiIsCisgICAgICAgICAgICAiUGhpIjogIiIsCisgICAgICAgICAgICAicGhpIjogIiIsCisgICAgICAgICAgICAicGkiOiAiIiwKKyAgICAgICAgICAgICJQaSI6ICIiLAorICAgICAgICAgICAgInByb2QiOiAiIiwKKyAgICAgICAgICAgICJwcm9wIjogIiIsCisgICAgICAgICAgICAicHNpIjogIiIsCisgICAgICAgICAgICAiUHNpIjogIiIsCisgICAgICAgICAgICAiUVEiOiAiIiwKKyAgICAgICAgICAgICJxdWFkIjogIiIsCisgICAgICAgICAgICAickFyciI6ICIiLAorICAgICAgICAgICAgInJobyI6ICIiLAorICAgICAgICAgICAgInJvb3QobikoeCkiOiAiIiwKKyAgICAgICAgICAgICJSUiI6ICIiLAorICAgICAgICAgICAgInNmYSI6ICIiLAorICAgICAgICAgICAgInNpZ21hIjogIiIsCisgICAgICAgICAgICAiU2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJzcXJ0KHgpIjogIiIsCisgICAgICAgICAgICAic3F1YXJlIjogIiIsCisgICAgICAgICAgICAic3RhY2tyZWwoLSZndDspKCspIjogIiIsCisgICAgICAgICAgICAic3ViIjogIiIsCisgICAgICAgICAgICAic3ViZSI6ICIiLAorICAgICAgICAgICAgInN1bSI6ICIiLAorICAgICAgICAgICAgInN1bV8obj0xKV5vbyI6ICIiLAorICAgICAgICAgICAgInN1cCI6ICIiLAorICAgICAgICAgICAgInN1cGUiOiAiIiwKKyAgICAgICAgICAgICJ0YXUiOiAiIiwKKyAgICAgICAgICAgICJUaGV0YSI6ICIiLAorICAgICAgICAgICAgInRoZXRhIjogIiIsCisgICAgICAgICAgICAiVFQiOiAiIiwKKyAgICAgICAgICAgICJ0dGEiOiAiIiwKKyAgICAgICAgICAgICJ1YXJyIjogIiIsCisgICAgICAgICAgICAidWxhIjogIiIsCisgICAgICAgICAgICAidXBzaWxvbiI6ICIiLAorICAgICAgICAgICAgInV1IjogIiIsCisgICAgICAgICAgICAidXV1IjogIiIsCisgICAgICAgICAgICAidmVjYSI6ICIiLAorICAgICAgICAgICAgInZ2IjogIiIsCisgICAgICAgICAgICAidnZ2IjogIiIsCisgICAgICAgICAgICAieF4obStuKSI6ICIiLAorICAgICAgICAgICAgInhfKG1uKSI6ICIiLAorICAgICAgICAgICAgIlhpIjogIiIsCisgICAgICAgICAgICAieGkiOiAiIiwKKyAgICAgICAgICAgICJ4eCI6ICIiLAorICAgICAgICAgICAgInpldGEiOiAiIiwKKyAgICAgICAgICAgICJaWiI6ICIiLAorICAgICAgICAgICAgInwtJmd0OyI6ICIiLAorICAgICAgICAgICAgInwtLSI6ICIiLAorICAgICAgICAgICAgInw9PSI6ICIiLAorICAgICAgICAgICAgInxfXyI6ICIiLAorICAgICAgICAgICAgInx+IjogIiIsCisgICAgICAgICAgICAifj0iOiAiIiwKKyAgICAgICAgICAgICJ+fCI6ICIiLAorICAgICAgICAgICAgIn5+IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZhbmN5U2VsZWN0cyI6IHsKKyAgICAgICAgICAgICInK29wdC50ZXh0KyciOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiJztcclxuICB2YXIgdGFnYyA9ICciOiAiIiwKKyAgICAgICAgICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAiIiwKKyAgICAgICAgICAgICJDbGVhciI6ICIiLAorICAgICAgICAgICAgIkRvbmUiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgdGV4dCB5b3Ugd2FudCB0byBmaW5kIjogIiIsCisgICAgICAgICAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgImZvdW5kIGl0ZW0iOiAiIiwKKyAgICAgICAgICAgICJmb3VuZCBpdGVtcyI6ICIiLAorICAgICAgICAgICAgIkhpZ2hsaWdodCI6ICIiLAorICAgICAgICAgICAgIkluZm9ybSBhIHJlcGxhY2VtZW50IHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJOZXh0IjogIiIsCisgICAgICAgICAgICAibm90IGZvdW5kIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2Ugd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtIjogIiIsCisgICAgICAgICAgICAicmVwbGFjZWQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJTZWFyY2ggZm9yOiI6ICIiLAorICAgICAgICAgICAgIlN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IjogIiIsCisgICAgICAgICAgICAiVW5kbyI6ICIiLAorICAgICAgICAgICAgIldob2xlIHdvcmRzIG9ubHkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiRW50ZXIgdGhlIG5hbWUgZm9yIG5ldyBvcHRpb24uIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgRm9ybS4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBtdWx0aS1saW5lIHRleHQgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcmFkaW8gYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFNlbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgU2VsZWN0Li4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1zIjogeworICAgICAgICAgICAgIidvbkNsaWNrJz0iOiAiIiwKKyAgICAgICAgICAgICJBY2Nlc3MgS2V5OiI6ICIiLAorICAgICAgICAgICAgIkFjdGlvbiBVUkw6IjogIiIsCisgICAgICAgICAgICAiQnV0dG9uIFNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkNoZWNrZWQiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zOiI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQgdGV4dCAob3B0aW9uYWwpIjogIiIsCisgICAgICAgICAgICAiRGltZW5zaW9ucyI6ICIiLAorICAgICAgICAgICAgIkRpc2FibGVkIjogIiIsCisgICAgICAgICAgICAiRW5jb2Rpbmc6IjogIiIsCisgICAgICAgICAgICAiRm9yIENvbnRyb2w6IjogIiIsCisgICAgICAgICAgICAiRm9ybSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IElOUFVUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gaGFuZGxlciBzY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiR2V0IjogIiIsCisgICAgICAgICAgICAiSGFyZCI6ICIiLAorICAgICAgICAgICAgIkhlaWdodCBpbiBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkhUTUwtRm9ybSB0byBDR0kgKGRlZmF1bHQpIjogIiIsCisgICAgICAgICAgICAiSW1hZ2Ugc291cmNlIjogIiIsCisgICAgICAgICAgICAiSW5pdGlhbCBUZXh0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiSmF2YXNjcmlwdCBmb3IgYnV0dG9uIGNsaWNrIjogIiIsCisgICAgICAgICAgICAiTGFiZWw6IjogIiIsCisgICAgICAgICAgICAiTGVnZW5kOiI6ICIiLAorICAgICAgICAgICAgIk1heCBsZW5ndGg6IjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY2NlcHRlZCI6ICIiLAorICAgICAgICAgICAgIk1ldGhvZDoiOiAiIiwKKyAgICAgICAgICAgICJtdWx0aXBhcnQgRm9ybSBEYXRhIChGaWxlLVVwbG9hZCkiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gc2VsZWN0IjogIiIsCisgICAgICAgICAgICAibmFtZSBvZiB0aGUgdGV4dGFyZWEiOiAiIiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICIiLAorICAgICAgICAgICAgIm5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIm5vd3JhcCI6ICIiLAorICAgICAgICAgICAgIk9mZiI6ICIiLAorICAgICAgICAgICAgIlBoeXNpY2FsIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIGEgTGFiZWwiOiAiIiwKKyAgICAgICAgICAgICJQb3N0IjogIiIsCisgICAgICAgICAgICAicHJlIjogIiIsCisgICAgICAgICAgICAiUmVhZCBPbmx5IjogIiIsCisgICAgICAgICAgICAiU2l6ZSBvZiB0ZXh0IGJveCBpbiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiU2l6ZToiOiAiIiwKKyAgICAgICAgICAgICJTb2Z0IjogIiIsCisgICAgICAgICAgICAiVGFiIEluZGV4OiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBGcmFtZToiOiAiIiwKKyAgICAgICAgICAgICJUZXh0OiI6ICIiLAorICAgICAgICAgICAgIlVSTCBvZiBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlZhbHVlIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiVmFsdWU6IjogIiIsCisgICAgICAgICAgICAiVmlydHVhbCI6ICIiLAorICAgICAgICAgICAgIldpZHRoIGluIG51bWJlciBvZiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiV3JhcCBNb2RlOiI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgTmFtZSI6ICIiLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IgorICAgICAgICB9LAorICAgICAgICAiRnVsbFBhZ2UiOiB7CisgICAgICAgICAgICAiLi4uIjogIiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIkJhY2tncm91bmQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiQ2hhcmFjdGVyIHNldDoiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoSVNPLTg4NTktNSkiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoS09JOC1SKSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChXSU5ET1dTLTEyNTEpIjogIiIsCisgICAgICAgICAgICAiRGVzY3JpcHRpb246IjogIiIsCisgICAgICAgICAgICAiRE9DVFlQRToiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiRG9jdW1lbnQgdGl0bGU6IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZHM6IjogIiIsCisgICAgICAgICAgICAiUHJpbWFyeSBzdHlsZS1zaGVldDoiOiAiIiwKKyAgICAgICAgICAgICJUZXh0IGNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIlVURi04IChyZWNvbW1lbmRlZCkiOiAiIiwKKyAgICAgICAgICAgICJ3ZXN0ZXJuIChJU08tODg1OS0xKSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGdWxsU2NyZWVuIjogeworICAgICAgICAgICAgIk1heGltaXplL01pbmltaXplIEVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJHZWNrbyI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICAgICAiJiN4MDBkNzsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICJDZW50ZXIiOiAiIiwKKyAgICAgICAgICAgICJDb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L2VkaXQgaG9yaXpvbnRhbCBydWxlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgSG9yaXpvbnRhbCBSdWxlIjogIiIsCisgICAgICAgICAgICAiTm8gc2hhZGluZyI6ICIiLAorICAgICAgICAgICAgInBlcmNlbnQiOiAiIiwKKyAgICAgICAgICAgICJwaXhlbHMiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbmxpbmVTdHlsZXIiOiB7CisgICAgICAgICAgICAiQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciI6ICIiLAorICAgICAgICAgICAgIkNoYXIiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkNTUyBTdHlsZSI6ICIiLAorICAgICAgICAgICAgIkZHIENvbG9yIjogIiIsCisgICAgICAgICAgICAiRmxvYXQiOiAiIiwKKyAgICAgICAgICAgICJKdXN0aWZ5IjogIiIsCisgICAgICAgICAgICAiTWFyZ2luIjogIiIsCisgICAgICAgICAgICAiTm9uZSI6ICIiLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJUZXh0IGFsaWduIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWwgYWxpZ24iOiAiIiwKKyAgICAgICAgICAgICItIjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiQ2VudGVyIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSGVpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAicGVyY2VudCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgInBpeGVscyI6ICI8PEhvcml6b250YWxSdWxlPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRBbmNob3IiOiB7CisgICAgICAgICAgICAiQW5jaG9yIG5hbWUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQW5jaG9yIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGZvb3Rub3RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IE5vdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGFnZWJyZWFrIjogeworICAgICAgICAgICAgIlBhZ2UgYnJlYWsiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIEJyZWFrIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNtaWxleSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgU21pbGV5IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICAgICAiXFxuICBUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZ1xcbiI6ICIiLAorICAgICAgICAgICAgIkhpZGUgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMSI6ICIiLAorICAgICAgICAgICAgIkxpbmsyIjogIiIsCisgICAgICAgICAgICAiTGluazMiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNCI6ICIiLAorICAgICAgICAgICAgIkxpbms1IjogIiIsCisgICAgICAgICAgICAiU2hvdyBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmciOiAiIiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgICAgICJBbGwgQ2F0ZWdvcmllcyI6ICIiLAorICAgICAgICAgICAgIkZpbHRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyBIVE1MIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIHRlbXBsYXRlIHZhcmlhYmxlIjogIiIsCisgICAgICAgICAgICAiT25seSBzZWFyY2ggd29yZCBiZWdpbm5pbmciOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIjw8Q2hhckNvdW50ZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICI8PEluc2VydFNuaXBwZXQ+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAgICAgIkNhcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJDYXB0aW9uIGZvciB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZSBib3JkZXJzOiI6ICIiLAorICAgICAgICAgICAgIkxheW91IjogIiIsCisgICAgICAgICAgICAiU3R5bGUgb2YgdGhlIGJvcmRlciI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIjw8SW5saW5lU3R5bGVyPj4iCisgICAgICAgIH0sCisgICAgICAgICJMYW5nTWFya3MiOiB7CisgICAgICAgICAgICAiJm1kYXNoOyBsYW5ndWFnZSAmbWRhc2g7IjogIiIsCisgICAgICAgICAgICAiJywgJyI6ICIiLAorICAgICAgICAgICAgIkVuZ2xpc2giOiAiIiwKKyAgICAgICAgICAgICJGcmVuY2giOiAiIiwKKyAgICAgICAgICAgICJHcmVlayI6ICIiLAorICAgICAgICAgICAgImxhbmd1YWdlIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIkxhdGluIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxpbmtlciI6IHsKKyAgICAgICAgICAgICIocHgpIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yLUxpbmsiOiAiIiwKKyAgICAgICAgICAgICJBbmNob3I6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgQWRkcmVzczoiOiAiIiwKKyAgICAgICAgICAgICJFbWFpbCBMaW5rIjogIiIsCisgICAgICAgICAgICAiTG9jYXRpb24gQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lbnUgQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lc3NhZ2UgVGVtcGxhdGU6IjogIiIsCisgICAgICAgICAgICAiTmV3IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIk9yZGluYXJ5IExpbmsiOiAiIiwKKyAgICAgICAgICAgICJQb3B1cCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJQb3B1cFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUmVzaXplYWJsZToiOiAiIiwKKyAgICAgICAgICAgICJTYW1lIFdpbmRvdyAoanVtcCBvdXQgb2YgZnJhbWVzKSI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbGJhcnM6IjogIiIsCisgICAgICAgICAgICAiU2hvd3MgT24gSG92ZXIiOiAiIiwKKyAgICAgICAgICAgICJTdGF0dXMgQmFyOiI6ICIiLAorICAgICAgICAgICAgIlN1YmplY3Q6IjogIiIsCisgICAgICAgICAgICAiVGl0bGU6IjogIiIsCisgICAgICAgICAgICAiVG9vbGJhcjoiOiAiIiwKKyAgICAgICAgICAgICJVUkwgTGluayI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICIiLAorICAgICAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTmFtZToiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTaXplOiI6ICI8PEZvcm1zPj4iCisgICAgICAgIH0sCisgICAgICAgICJMaXN0VHlwZSI6IHsKKyAgICAgICAgICAgICJDaG9vc2UgbGlzdCBzdHlsZSB0eXBlIChmb3Igb3JkZXJlZCBsaXN0cykiOiAiIiwKKyAgICAgICAgICAgICJEZWNpbWFsIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciBncmVlayBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgbGF0aW4gbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIHJvbWFuIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJVcHBlciBsYXRpbiBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiVXBwZXIgcm9tYW4gbnVtYmVycyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJNb290b29sc0ZpbGVNYW5hZ2VyIjogeworICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk9wZXJhIjogeworICAgICAgICAgICAgIk1BUksiOiAiIiwKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgdGV4dCBpbiBuZXcgcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiUGFzdGUgYXMgUGxhaW4gVGV4dCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQcmVzZXJ2ZVNjcmlwdHMiOiB7CisgICAgICAgICAgICAiSmF2YVNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIlBIUCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgICAgICInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnY2wnOiAnIjogIiIsCisgICAgICAgICAgICAiQVRUUklCVVRFUyI6ICIiLAorICAgICAgICAgICAgIkNvbG9ycyI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSBUQUcgeW91IHdhbnQgdG8gaW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiTm8gQ1NTIGNsYXNzIGF2YWlhYmxlIjogIiIsCisgICAgICAgICAgICAiT2siOiAiIiwKKyAgICAgICAgICAgICJPUFRJT05TIjogIiIsCisgICAgICAgICAgICAiUXVpY2sgVGFnIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlRBR3MiOiAiIiwKKyAgICAgICAgICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBUQUciOiAiIiwKKyAgICAgICAgICAgICJZb3UgaGF2ZSB0byBzZWxlY3Qgc29tZSB0ZXh0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNhdmVTdWJtaXQiOiB7CisgICAgICAgICAgICAiaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAgICAgICAgICJSZWFkeSI6ICIiLAorICAgICAgICAgICAgIlNhdmUiOiAiIiwKKyAgICAgICAgICAgICJTYXZpbmcuLi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiU2V0SWQiOiB7CisgICAgICAgICAgICAiSUQvTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQgYW5kIE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQvTmFtZSI6ICIiLAorICAgICAgICAgICAgIlNldCBJRC9OYW1lIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiQ2xvc2luZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIkNsb3NpbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIkNvbnZlcnQgYWxsIHF1b3RlcyBhbmQgZGFzaGVzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIGF1dG9tYXRpYyByZXBsYWNlbWVudHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN0eWxpc3QiOiB7CisgICAgICAgICAgICAiU3R5bGVzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBTZWxlY3Rpb24gT25seSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIHVwIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBTY29wZSI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYWwgdGlkeSB1cCBhbmQgY29ycmVjdGlvbiBvZiBzb21lIHByb2JsZW1zLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzZWxlY3QgZnJvbSB0aGUgZm9sbG93aW5nIGNsZWFuaW5nIG9wdGlvbnMuLi4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc3RhbmQgYnkgd2hpbGUgY2xlYW5pbmcgaW4gcHJvY2Vzcy4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGlnbm1lbnQgKGxlZnQvcmlnaHQvanVzdGlmeSkuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBjbGFzc2VzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBBbGwgSFRNTCBUYWdzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBzdHlsZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0eXBlZmFjZXMgKGZvbnQgXCJzdHlsZXNcIikuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGVtcGhhc2lzIGFuZCBhbm5vdGF0aW9ucy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgbGFuZyBhdHRyaWJ1dGVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBQYXJhZ3JhcGhzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cy4iOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzIHdpdGggbm9uLWRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzLiI6ICIiLAorICAgICAgICAgICAgIlZpZ29yb3VzbHkgcHVyZ2UgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiQWxsIGZvdXIgc2lkZXMiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXJzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBQcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBUeXBlOiI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIGRvd24iOiAiIiwKKyAgICAgICAgICAgICJDZWxscyB0byB0aGUgcmlnaHQsIGFuZCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBjZWxsIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSByb3ciOiAiIiwKKyAgICAgICAgICAgICJEbyBOb3QgQ2hhbmdlIjogIiIsCisgICAgICAgICAgICAiRnJhbWUgYW5kIGJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJGcmFtZXMiOiAiIiwKKyAgICAgICAgICAgICJIZWFkZXIgKHRoKSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjZWxsIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNlbGwgYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNvbHVtbiBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjb2x1bW4gYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCByb3cgYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBjdXJyZW50IGNlbGwgd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJObyBydWxlcyI6ICIiLAorICAgICAgICAgICAgIk5vIHNpZGVzIjogIiIsCisgICAgICAgICAgICAiTm9ybWFsICh0ZCkiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJSb3cgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlJvdyBQcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gY29sdW1ucyBvbmx5IjogIiIsCisgICAgICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiByb3dzIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgY29sdW1uIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgcm93IjogIiIsCisgICAgICAgICAgICAiU3VtbWFyeSI6ICIiLAorICAgICAgICAgICAgIlRhYmxlIFByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgbGVmdC1oYW5kIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSByaWdodCBhbmQgbGVmdCBzaWRlcyBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHRvcCBhbmQgYm90dG9tIHNpZGVzIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIiIsCisgICAgICAgICAgICAiQ2FwdGlvbiI6ICI8PEluc2VydFRhYmxlPj4iLAorICAgICAgICAgICAgIkNvbHVtbnMiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJEZXNjcmlwdGlvbiI6ICI8PEZ1bGxQYWdlPj4iLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiUGFkZGluZyI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJwaXhlbHMiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiVW5zYXZlZENoYW5nZXMiOiB7CisgICAgICAgICAgICAiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBlZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiV2ViS2l0IjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICI8PEdlY2tvPj4iCisgICAgICAgIH0sCisgICAgICAgICJYaW5oYSI6IHsKKyAgICAgICAgICAgICImIzgyMTI7IGZvbnQgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIiYjODIxMjsgc2l6ZSAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiMSAoOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIyICgxMCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIzICgxMiBwdCkiOiAiIiwKKyAgICAgICAgICAgICI0ICgxNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI1ICgxOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI2ICgyNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI3ICgzNiBwdCkiOiAiIiwKKyAgICAgICAgICAgICJBcmlhbCI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICIiLAorICAgICAgICAgICAgIkNsb3NlIjogIiIsCisgICAgICAgICAgICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICIiLAorICAgICAgICAgICAgIkNvdXJpZXIgTmV3IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFN0YXR1c2JhciI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBUb29sYmFyIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0wICh6ZXJvKSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMSAuLiBDVFJMLTYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUEiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUoiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLUwiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLU4iOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVMiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVUiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVYiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVgiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVkiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLVoiOiAiIiwKKyAgICAgICAgICAgICJFZGl0b3IgSGVscCI6ICIiLAorICAgICAgICAgICAgIkVOVEVSIjogIiIsCisgICAgICAgICAgICAiRXJyb3IgTG9hZGluZyBYaW5oYS4gIERldmVsb3BlcnMsIGNoZWNrIHRoZSBFcnJvciBDb25zb2xlIGZvciBpbmZvcm1hdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGaW5pc2hpbmciOiAiIiwKKyAgICAgICAgICAgICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiIiwKKyAgICAgICAgICAgICJHZW9yZ2lhIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJJbXBhY3QiOiAiIiwKKyAgICAgICAgICAgICJJbml0IGVkaXRvciBzaXplIjogIiIsCisgICAgICAgICAgICAiaW5zZXJ0IGxpbmVicmVhayI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9PdmVyd3JpdGUiOiAiIiwKKyAgICAgICAgICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIENvcmUiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW5zIjogIiIsCisgICAgICAgICAgICAiTVMgV29yZCBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAibmV3IHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBhcyI6ICIiLAorICAgICAgICAgICAgIlNldCBmb3JtYXQgdG8gcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiU0hJRlQtRU5URVIiOiAiIiwKKyAgICAgICAgICAgICJUYWhvbWEiOiAiIiwKKyAgICAgICAgICAgICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAiIiwKKyAgICAgICAgICAgICJUaW1lcyBOZXcgUm9tYW4iOiAiIiwKKyAgICAgICAgICAgICJUb3VjaCBoZXJlIGZpcnN0IHRvIGFjdGl2YXRlIGVkaXRvci4iOiAiIiwKKyAgICAgICAgICAgICJWZXJkYW5hIjogIiIsCisgICAgICAgICAgICAiV2FpdGluZyBmb3IgSWZyYW1lIHRvIGxvYWQuLi4iOiAiIiwKKyAgICAgICAgICAgICJXaW5nRGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIiIsCisgICAgICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiUmVtb3ZlIEN1cnJlbnQgQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIlNldCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IHBhZ2UgYmFja2dyb3VuZCBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlNldCBQYWdlIEJhY2tncm91bmQgSW1hZ2UiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2xpZW50c2lkZVNwZWxsY2hlY2siOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVjayB1c2luZyBpZVNwZWxsIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEwJSI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiIiwKKyAgICAgICAgICAgICIyMDAlIjogIiIsCisgICAgICAgICAgICAiMjUlIjogIiIsCisgICAgICAgICAgICAiNTAlIjogIiIsCisgICAgICAgICAgICAiNzUlIjogIiIsCisgICAgICAgICAgICAiPkxpc3QgVmlldyI6ICIiLAorICAgICAgICAgICAgIj5UaHVtYm5haWwgVmlldyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIiIsCisgICAgICAgICAgICAiQWxpZ24iOiAiIiwKKyAgICAgICAgICAgICJBbHQiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJDcm9wIjogIiIsCisgICAgICAgICAgICAiRDoiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiIiwKKyAgICAgICAgICAgICJFZGl0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIiIsCisgICAgICAgICAgICAiRmlsZW5hbWU6IjogIiIsCisgICAgICAgICAgICAiRmlsZXNpemU6IjogIiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkZsaXAgVmVydGljYWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJHSUYiOiAiIiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiIiwKKyAgICAgICAgICAgICJIOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIiIsCisgICAgICAgICAgICAiSlBFRyBIaWdoIjogIiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiIiwKKyAgICAgICAgICAgICJKUEVHIE1lZGl1bSI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmciOiAiIiwKKyAgICAgICAgICAgICJMb2NrIjogIiIsCisgICAgICAgICAgICAiTWFya2VyIjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBmb2xkZXIgc2l6ZSBsaW1pdCByZWFjaGVkLiBVcGxvYWQgZGlzYWJsZWQuIjogIiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICIiLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJObyBGaWxlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB2YWx1ZSI6ICIiLAorICAgICAgICAgICAgIlBORyI6ICIiLAorICAgICAgICAgICAgIlByZXNldCI6ICIiLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIiIsCisgICAgICAgICAgICAiUmVmcmVzaCI6ICIiLAorICAgICAgICAgICAgIlJlbmFtZSI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIEltYWdlIjogIiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiIiwKKyAgICAgICAgICAgICJTdGFydCBZOiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgbWFya2VyIGNvbG9yIjogIiIsCisgICAgICAgICAgICAiVHJhc2giOiAiIiwKKyAgICAgICAgICAgICJVcGxvYWQiOiAiIiwKKyAgICAgICAgICAgICJXOiI6ICIiLAorICAgICAgICAgICAgIlg6IjogIiIsCisgICAgICAgICAgICAiWGluaGEgSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiWToiOiAiIiwKKyAgICAgICAgICAgICJab29tIjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNsZWFyIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiQ29sb3IiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJDb3B5IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiQ3V0IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiSGVpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiPDxNb290b29sc0ZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1hcmdpbiI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJQYWRkaW5nIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlNhdmUiOiAiPDxTYXZlU3VibWl0Pj4iLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiRmlsdGVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbHRlciI6ICI8PEluc2VydFNuaXBwZXQyPj4iCisgICAgICAgIH0sCisgICAgICAgICJIdG1sVGlkeSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEhUTUxUSURZIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkF1dG8tVGlkeSI6ICIiLAorICAgICAgICAgICAgIkRvbid0IFRpZHkiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIFRpZHkiOiAiIiwKKyAgICAgICAgICAgICJUaWR5IGZhaWxlZC4gIENoZWNrIHlvdXIgSFRNTCBmb3Igc3ludGF4IGVycm9ycy4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFuZ2xlOiI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgUGljdHVyZXMiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFVzZXJuYW1lL0VtYWlsIjogIiIsCisgICAgICAgICAgICAiRm9sZGVyIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgTGlzdCI6ICIiLAorICAgICAgICAgICAgIktleXdvcmQiOiAiIiwKKyAgICAgICAgICAgICJObyBJbWFnZXMgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBQaG90b3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBWaWRlb3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIFNlcnZlciI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBVc2VybmFtZSI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW8gTGlzdCI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW9zIjogIiIsCisgICAgICAgICAgICAiQToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkNsZWFyIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJDcm9wIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkVkaXQiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGVuYW1lOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIEltYWdlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgSGlnaCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgTWVkaXVtIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJMb2NrIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJNYXJrZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1lYXN1cmUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUE5HIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJRdWFsaXR5OiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUmVmcmVzaCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUmVzaXplIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIEltYWdlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJTdGFydCBYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU3RhcnQgWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlRyYXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJXOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJCZWhhdmlvcjoiOiAiIiwKKyAgICAgICAgICAgICJDb250aW51b3VzIjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uOiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBzY3JvbGxpbmcgbWFycXVlZSI6ICIiLAorICAgICAgICAgICAgIk1hcnF1ZWUgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIEFtb3VudDoiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgRGVsYXk6IjogIiIsCisgICAgICAgICAgICAiU2xpZGUiOiAiIiwKKyAgICAgICAgICAgICJTcGVlZCBDb250cm9sIjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk5hbWUiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlRleHQ6IjogIjw8Rm9ybXM+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBub3QgZGVmaW5lZCI6ICIiLAorICAgICAgICAgICAgIiBPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIk9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiVXBsb2FkIGZpbGUiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiU2l6ZSI6ICI8PEZvcm1zPj4iCisgICAgICAgIH0sCisgICAgICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIxMjAlIjogIiIsCisgICAgICAgICAgICAiMTUwJSI6ICIiLAorICAgICAgICAgICAgIjgwJSI6ICIiLAorICAgICAgICAgICAgIkFkZCBHVUlETyBDb2RlIGluIGEgdGV4dGJveCBvbiB0aGUgcGFnZSI6ICIiLAorICAgICAgICAgICAgIkFkZCBNSURJIGxpbmsgdG8gYWxsb3cgc3R1ZGVudHMgdG8gaGVhciB0aGUgbXVzaWMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJHdWlkbyBjb2RlIjogIiIsCisgICAgICAgICAgICAiR1VJRE8gQ29kZSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIGluIGFwcGxldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBHVUlETyBNdXNpYyBOb3RhdGlvbiI6ICIiLAorICAgICAgICAgICAgIk1JREkgRmlsZSI6ICIiLAorICAgICAgICAgICAgIlNvdXJjZSBDb2RlIjogIiIsCisgICAgICAgICAgICAiV2l0aCBNb3ppbGxhLCB0aGUgYXBwbGV0IHdpbGwgbm90IGJlIHZpc2libGUgaW4gZWRpdG9yLCBidXQgb25seSBpbiBXZWIgcGFnZSBhZnRlciBzdWJtaXR0aW5nLiI6ICIiLAorICAgICAgICAgICAgIlpvb20gOiI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJab29tIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBHZWFycyBpbiBvcmRlciB0byB1c2UgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZSBhbmQgY29uZmlndXJhdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGluZyBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiSW5zdGFsbCI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIEFib3V0IExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgcmVsb2FkIHRoZSBwYWdlLCBjYXVzaW5nIHlvdSB0byBsb3NlIGFueSB1bnNhdmVkIHdvcmsuICBQcmVzcyBcIk9LXCIgdG8gcmVsb2FkLiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIHVzZXMgR29vZ2xlIEdlYXJzIHRvIGVuYWJsZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlLiAgV2l0aCBHZWFycyBpbnN0YWxsZWQsIHlvdSBjYW4gc2F2ZSBkcmFmdHMgb2YgeW91ciBkb2N1bWVudHMgb24geW91ciBoYXJkIGRyaXZlLCBjb25maWd1cmUgWGluaGEgdG8gbG9vayB0aGUgd2F5IHlvdSB3YW50LCBhbmQgY2FycnkgdGhpcyBpbmZvcm1hdGlvbiB3aGVyZXZlciB5b3UgdXNlIFhpbmhhIG9uIHRoZSB3ZWIuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsZTogIjogIiIsCisgICAgICAgICAgICAiSW1wb3J0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGV0YWlscyI6ICIiLAorICAgICAgICAgICAgIkZpbGUgQnJvd3NlciI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICAgIFRoZXJlIEMgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gIFRoZXJlIEEgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gXCIgVGhlcmUgQiBcIiI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICcgVGhlcmUgRCAnIjogIiIsCisgICAgICAgICAgICAiTGlzdCBvZiBQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJOZXcgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJPcGVuIjogIiIsCisgICAgICAgICAgICAiT3BlbiBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHlvdSdkIGxpa2UgdG8gY3JlYXRlLiI6ICIiLAorICAgICAgICAgICAgIlNhdmUgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgZXJhc2UgYW55IHVuc2F2ZWQgY29udGVudC4gIElmIHlvdSdyZSBjZXJ0YWluLCBwbGVhc2UgY2xpY2sgT0sgdG8gY29udGludWUuIjogIiIsCisgICAgICAgICAgICAiV2ViIFVSTCI6ICIiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiPDxQU0xvY2FsPj4iLAorICAgICAgICAgICAgIkNvcHkiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTWFuYWdlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZW5hbWUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCI6ICI8PEluc2VydE5vdGU+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBTUEVMTENIRUNLRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGljdGlvbmFyeSI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGVkIGxpc3Qgb2YgbWlzcGVsbGVkIHdvcmRzIjogIiIsCisgICAgICAgICAgICAiSFRNTEFyZWEgU3BlbGwgQ2hlY2tlciI6ICIiLAorICAgICAgICAgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIGFsbCI6ICIiLAorICAgICAgICAgICAgIkluZm8iOiAiIiwKKyAgICAgICAgICAgICJMZWFybiI6ICIiLAorICAgICAgICAgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICIiLAorICAgICAgICAgICAgIk9yaWdpbmFsIHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQuICBDYWxsaW5nIHNwZWxsIGNoZWNrZXIuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAiIiwKKyAgICAgICAgICAgICJwbGl6IHdlaXQgOy0pIjogIiIsCisgICAgICAgICAgICAiUmUtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSBhbGwiOiAiIiwKKyAgICAgICAgICAgICJSZXZlcnQiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiU3BlbGwtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJTdWdnZXN0aW9ucyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBkcm9wIGNoYW5nZXMgYW5kIHF1aXQgc3BlbGwgY2hlY2tlci4gIFBsZWFzZSBjb25maXJtLiI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2Ugd2l0aCI6ICI8PEZpbmRSZXBsYWNlPj4iCisgICAgICAgIH0sCisgICAgICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFRFTVBMQVRFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkluc2VydCB0ZW1wbGF0ZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJVbkZvcm1hdCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFVORk9STUFUIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFsbCI6ICIiLAorICAgICAgICAgICAgIkFsbCBIVE1MOiI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIEFyZWEiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBvcHRpb25zIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0dGluZzoiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIENsZWFuZXIiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Qgd2hpY2ggdHlwZXMgb2YgZm9ybWF0dGluZyB5b3Ugd291bGQgbGlrZSB0byByZW1vdmUuIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0aW9uIjogIiIKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9zaS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL3NpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZmViMGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9zaS5qcwpAQCAtMCwwICsxLDE1NzMgQEAKKy8vIFhpbmhhIExhbmd1YWdlIENvbWJpbmVkIFRyYW5zbGF0aW9uIEZpbGUKKy8vCisvLyBMQU5HOiAic2kiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTlNUUlVDVElPTlMgVE8gVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFlvdXIgdHJhbnNsYXRpb24gbXVzdCBiZSBpbiBVVEYtOCBDaGFyYWN0ZXIgRW5jb2RpbmcuCisvLworLy8gVGhpcyBpcyBhIEpTT04gZW5jb2RlZCBmaWxlIChwbHVzIGNvbW1lbnRzKSwgc3RyaW5ncyBzaG91bGQgYmUgZG91YmxlLXF1b3RlCisvLyBvbmx5LCBkbyBub3QgdXNlIHNpbmdsZSBxdW90ZXMgdG8gc3Vycm91bmQgc3RyaW5ncyAtICJoZWxsbyIsIG5vdCAnaGVsbG8nCisvLyBkbyBub3QgaGF2ZSBhIHRyYWlsaW5nIGNvbW1hIGFmdGVyIHRoZSBsYXN0IGVudHJ5IGluIGEgc2VjdGlvbi4KKy8vCisvLyBPbmx5IGZ1bGwgbGluZSBjb21tZW50cyBhcmUgYWxsb3dlZCAodGhhdCBhIGNvbW1lbnRzIG9jY3VweSBlbnRpcmUgbGluZXMpLgorLy8KKy8vIFNlYXJjaCBmb3IgdGhlIF9fTkVXX1RSQU5TTEFUSU9OU19fIHNlY3Rpb24gYmVsb3csIHRoaXMgaXMgd2hlcmUgeW91IHdpbGwKKy8vIHdhbnQgdG8gZm9jdXMsIHRoaXMgc2VjdGlvbiBpbmNsdWRlcyB0aGluZ3MgdGhhdCBkbyBub3QgcHJlc2VudGx5IGhhdmUgYSAKKy8vIHRyYW5zbGF0aW9uIG9yIGZvciB3aGljaCB0aGUgdHJhbnNsYXRpb24gbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgYWNjdXJhY3kuCisvLworLy8gSW4gdGhlIE5ldyBUcmFuc2xhdGlvbnMgc2VjdGlvbiBhIHRyYW5zbGF0aW9uIHN0cmluZyBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZworLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiIgorLy8gICAgIFRoaXMgbWVhbnMgaXQgaXMgbm90IHRyYW5zbGF0ZWQgeWV0LCBhZGQgeW91ciB0cmFuc2xhdGlvbi4uLgorLy8gICAgICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJLbGluZ29uIFN0cmluZyBIZXJlIgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiVHJhbnNsYXRlZCBTdHJpbmcgSGVyZSIKKy8vICAgICBUaGlzIG1lYW5zIHRoYXQgYW4gZXhpc3RpbmcgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nLCBpbiBzb21lIG90aGVyCisvLyAgICAgc2VjdGlvbiBoYXMgYmVlbiBmb3VuZCwgYW5kIHVzZWQuICBDaGVjayB0aGF0IGl0IGlzIGFwcHJvcHJpdGUgZm9yIHRoaXMKKy8vICAgICBzZWN0aW9uIGFuZCBpZiBpdCBpcywgdGhhdCdzIGZpbmUgbGVhdmUgaXQgYXMgaXMsIG90aGVyd2lzZSBjaGFuZ2UgYXMKKy8vICAgICBhcHByb3ByaWF0ZS4KKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIjw8QW5vdGhlclNlY3Rpb24+PiIKKy8vICAgICBUaGlzIG1lYW5zIHVzZSB0aGUgc2FtZSB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcgYXMgPDxBbm90aGVyU2VjdGlvbj4+CisvLyAgICAgdGhpcyBzYXZlcyB5b3UgcmUtdHJhbmxhdGluZyBzdHJpbmdzLiAgSWYgdGhlIENvbnRleHQgb2YgdGhpcyBzZWN0aW9uCisvLyAgICAgYW5kIHRoZSBjb250ZXh0IG9mIEFub3RoZXJTZWN0aW9uIHNlZW0gdGhlIHNhbWUsIHRoYXQncyBmaW5lIGxlYXZlIGl0CisvLyAgICAgdXNpbmcgdGhhdCB0cmFuc2xhdGlvbiwgYnV0IGlmIHRoaXMgc2VjdGlvbiBuZWVkcyBhIGRpZmZlcmVudCB0cmFuc2xhdGlvbiwgCisvLyAgICAgeW91IGNhbiBwcm92aWRlIGl0IGJ5IHJlcGxhY2luZyB0aGUgbGluayAoPDxBbm90aGVyU2VjdGlvbj4+KSB3aXRoIHRoYXQKKy8vICAgICBuZXcgdHJhbnNsYXRpb24uICBGb3IgZXhhbXBsZSAtIGEgIlRhYmxlIiBpbiBzYXkgIkRhdGFQbHVnaW4iIGlzIAorLy8gICAgIHBlcmhhcHMgdHJhbnNsYXRlZCBkaWZmZXJlbnRseSB0byAiVGFibGUiIGluICJGdXJuaXR1cmVQbHVnaW4iLgorLy8KKy8vIFRFU1RJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgcGxhY2UgeW91ciB0cmFuc2xhdGlvbiBmaWxlIG9uIHlvdXIgd2Vic2VydmVyIHNvbWV3aGVyZSBmb3IgZXhhbXBsZQorLy8KKy8vICAgL3hpbmhhL2xhbmcvbWVyZ2VkL3NpLmpzCisvLworLy8gYW5kIHRoZW4gdGVsbCBYaW5oYSB3aGVyZSB0byBnZXQgaXQgKGJlZm9yZSBsb2FkaW5nIFhpbmhhQ29yZS5qcykgYnkgCisvLworLy8gIF9lZGl0b3JfbGFuZyAgICAgICAgICAgICAgPSAnc2knOworLy8gIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSAgPSAnL3hpbmhhL2xhbmcvbWVyZ2VkL3NpLmpzJzsKKy8vCisvLyBYaW5oYSB3aWxsIGxvYWQgeW91ciBuZXcgbGFuZ3VhZ2UgZGVmaW5pdGlvbi4KKy8vCisvLyBTVUJNSVRUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IGNyZWF0ZSBhIFRpY2tldCBvbiB0aGUgWGluaGEgd2Vic2l0ZSBhbmQgYXR0YWNoIHlvdXIgdHJhbnNsYXRpb24gCisvLyBmaWxlLgorLy8KKy8vIFRoZSBYaW5oYSBkZXZlbG9wZXJzIHdpbGwgdGFrZSB5b3VyIGZpbGUgYW5kIHVzZSB0aGUgCisvLyAgICAgY29udHJpYi9sY19zcGxpdF9tZXJnZWRfZmlsZS5waHAKKy8vIHNjcmlwdCB0byBsb2FkIGl0IGludG8gdGhlIFhpbmhhIGRpc3RyaWJ1dGlvbi4KKworeworICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAiUHJla2xpxI1pIiwKKyAgICAgICAgIk9LIjogIlYgcmVkdSIKKyAgICB9LAorICAgICJBYm91dEJveCI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIlZpeml0a2EgemEgdXJlamV2YWxuaWsiCisgICAgfSwKKyAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIKKyAgICB9LAorICAgICJDb2xvclBpY2tlciI6IHsKKyAgICAgICAgIk9LIjogIlYgcmVkdSIKKyAgICB9LAorICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogIk5hIHNyZWRpbm8iLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIlBvcmF6ZGVsaSB2c2ViaW5vIiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICJQb3Jhdm5haiBsZXZvIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiUG9yYXZuYWogZGVzbm8iCisgICAgfSwKKyAgICAiQ3JlYXRlTGluayI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiLAorICAgICAgICAiT0siOiAiViByZWR1IgorICAgIH0sCisgICAgIkVkaXRUYWciOiB7CisgICAgICAgICJDYW5jZWwiOiAiUHJla2xpxI1pIiwKKyAgICAgICAgIk9LIjogIlYgcmVkdSIKKyAgICB9LAorICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiLAorICAgICAgICAiT0siOiAiViByZWR1IgorICAgIH0sCisgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUHJla2xpxI1pIiwKKyAgICAgICAgIk9LIjogIlYgcmVkdSIKKyAgICB9LAorICAgICJGb3JtcyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiLAorICAgICAgICAiT0siOiAiViByZWR1IgorICAgIH0sCisgICAgIkZ1bGxQYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIsCisgICAgICAgICJPSyI6ICJWIHJlZHUiCisgICAgfSwKKyAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUHJla2xpxI1pIiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICJWb2RvcmF2bmEgxI1ydGEiLAorICAgICAgICAiT0siOiAiViByZWR1IgorICAgIH0sCisgICAgIkltYWdlTWFuYWdlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiLAorICAgICAgICAiT0siOiAiViByZWR1IgorICAgIH0sCisgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiLAorICAgICAgICAiT0siOiAiViByZWR1IgorICAgIH0sCisgICAgIkluc2VydEltYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIsCisgICAgICAgICJPSyI6ICJWIHJlZHUiCisgICAgfSwKKyAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiLAorICAgICAgICAiT0siOiAiViByZWR1IgorICAgIH0sCisgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUHJla2xpxI1pIgorICAgIH0sCisgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUHJla2xpxI1pIiwKKyAgICAgICAgIk9LIjogIlYgcmVkdSIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0IjogeworICAgICAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiCisgICAgfSwKKyAgICAiSW5zZXJ0VGFibGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUHJla2xpxI1pIiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICJWc3RhdmkgdGFiZWxvIiwKKyAgICAgICAgIk9LIjogIlYgcmVkdSIKKyAgICB9LAorICAgICJMaW5rZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUHJla2xpxI1pIiwKKyAgICAgICAgIk9LIjogIlYgcmVkdSIKKyAgICB9LAorICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIsCisgICAgICAgICJPSyI6ICJWIHJlZHUiCisgICAgfSwKKyAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiCisgICAgfSwKKyAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIsCisgICAgICAgICJPSyI6ICJWIHJlZHUiCisgICAgfSwKKyAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUHJla2xpxI1pIgorICAgIH0sCisgICAgIlF1aWNrVGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIKKyAgICB9LAorICAgICJTZXRJZCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiLAorICAgICAgICAiT0siOiAiViByZWR1IgorICAgIH0sCisgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgIk9LIjogIlYgcmVkdSIKKyAgICB9LAorICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUHJla2xpxI1pIiwKKyAgICAgICAgIk9LIjogIlYgcmVkdSIKKyAgICB9LAorICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIsCisgICAgICAgICJPSyI6ICJWIHJlZHUiCisgICAgfSwKKyAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIsCisgICAgICAgICJPSyI6ICJWIHJlZHUiCisgICAgfSwKKyAgICAiVGVtcGxhdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiUHJla2xpxI1pIgorICAgIH0sCisgICAgIlVuRm9ybWF0IjogeworICAgICAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIsCisgICAgICAgICJPSyI6ICJWIHJlZHUiCisgICAgfSwKKyAgICAiWGluaGEiOiB7CisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJWaXppdGthIHphIHVyZWpldmFsbmlrIiwKKyAgICAgICAgIkJhY2tncm91bmQgQ29sb3IiOiAiQmFydmEgb3phZGphIiwKKyAgICAgICAgIkJvbGQiOiAiS3JlcGtvIiwKKyAgICAgICAgIkJ1bGxldGVkIExpc3QiOiAiT3puYcSNZXZhbmplIiwKKyAgICAgICAgIkNvcHkgc2VsZWN0aW9uIjogIktvcGlyYWoiLAorICAgICAgICAiQ3VycmVudCBzdHlsZSI6ICJUcmVudXRuaSBzbG9nIiwKKyAgICAgICAgIkN1dCBzZWxlY3Rpb24iOiAiSXpyZcW+aSIsCisgICAgICAgICJEZWNyZWFzZSBJbmRlbnQiOiAiWm1hbmrFoWFqIHphbWlrIiwKKyAgICAgICAgIkZvbnQgQ29sb3IiOiAiQmFydmEgcGlzYXZlIiwKKyAgICAgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIlBvbW/EjSB6YSB1cmVqZXZhbG5payIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiVm9kb3Jhdm5hIMSNcnRhIiwKKyAgICAgICAgIkluY3JlYXNlIEluZGVudCI6ICJQb3ZlxI1haiB6YW1payIsCisgICAgICAgICJJbnNlcnQgVGFibGUiOiAiVnN0YXZpIHRhYmVsbyIsCisgICAgICAgICJJbnNlcnQgV2ViIExpbmsiOiAiVnN0YXZpIGhpcGVycG92ZXphdm8iLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJWc3Rhdmkgc2xpa28iLAorICAgICAgICAiSXRhbGljIjogIkxlxb5lxI1lIiwKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogIk5hIHNyZWRpbm8iLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIlBvcmF6ZGVsaSB2c2ViaW5vIiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICJQb3Jhdm5haiBsZXZvIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiUG9yYXZuYWogZGVzbm8iLAorICAgICAgICAiT3JkZXJlZCBMaXN0IjogIk/FoXRldmlsxI1ldmFuamUiLAorICAgICAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiUHJpbGVwaSIsCisgICAgICAgICJQYXRoIjogIlBvdCIsCisgICAgICAgICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJVdmVsamF2aSB6YWRuam8gYWtjaWpvIiwKKyAgICAgICAgIlN0cmlrZXRocm91Z2giOiAiUHJlxI1ydGFubyIsCisgICAgICAgICJTdWJzY3JpcHQiOiAiUG9kcGlzYW5vIiwKKyAgICAgICAgIlN1cGVyc2NyaXB0IjogIk5hZHBpc2FubyIsCisgICAgICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiUHJla2xvcGkgbmEgSFRNTCBrb2RvIiwKKyAgICAgICAgIlVuZGVybGluZSI6ICJQb2TEjXJ0YW5vIiwKKyAgICAgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlJhenZlbGphdmkgemFkbmpvIGFrY2lqbyIsCisgICAgICAgICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiU2kgdiB0ZWtzdG92bmVtIG5hxI1pbnUuICBVcG9yYWJpIFs8Pl0gZ3VtYiB6YSBwcmtsb3AgbmF6YWogbmEgV1lTSVdZRy4iCisgICAgfSwKKyAgICAiX19ORVdfVFJBTlNMQVRJT05TX18iOiB7CisgICAgICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICAgICAiQWJicmV2aWF0aW9uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIiIsCisgICAgICAgICAgICAiRXhwYW5zaW9uOiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJBYm91dEJveCI6IHsKKyAgICAgICAgICAgICJDbG9zZSI6ICI8PFhpbmhhPj4iCisgICAgICAgIH0sCisgICAgICAgICJDaGFyQ291bnRlciI6IHsKKyAgICAgICAgICAgICIuLi4gaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAgICAgICAgICJDaGFycyI6ICIiLAorICAgICAgICAgICAgIkhUTUwiOiAiIiwKKyAgICAgICAgICAgICJXb3JkcyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDaGFyYWN0ZXJNYXAiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IHNwZWNpYWwgY2hhcmFjdGVyIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbG9yUGlja2VyIjogeworICAgICAgICAgICAgIkNsaWNrIGEgY29sb3IuLi4iOiAiIiwKKyAgICAgICAgICAgICJDb2xvcjogIjogIiIsCisgICAgICAgICAgICAiU2FtcGxlIjogIiIsCisgICAgICAgICAgICAiV2ViIFNhZmU6ICI6ICIiLAorICAgICAgICAgICAgIkNsb3NlIjogIjw8WGluaGE+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAgICAgIl9EZWxldGUgUm93IjogIiIsCisgICAgICAgICAgICAiX0ltYWdlIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJfTW9kaWZ5IExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJfUmVtb3ZlIExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJfVGFibGUgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIkNfZWxsIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJDaGVjX2sgTGluay4uLiI6ICIiLAorICAgICAgICAgICAgIkNvcHkiOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgYSBsaW5rIjogIiIsCisgICAgICAgICAgICAiQ3VycmVudCBVUkwgaXMiOiAiIiwKKyAgICAgICAgICAgICJDdXQiOiAiIiwKKyAgICAgICAgICAgICJEZV9sZXRlIENvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBDZWxsIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCByb3ciOiAiIiwKKyAgICAgICAgICAgICJIb3cgZGlkIHlvdSBnZXQgaGVyZT8gKFBsZWFzZSByZXBvcnQhKSI6ICIiLAorICAgICAgICAgICAgIklfbnNlcnQgUm93IEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluX3NlcnQgUm93IEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IF9Db2x1bW4gQmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBhZnRlciB0aGUgY3VycmVudCBub2RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGJlZm9yZSB0aGUgY3VycmVudCBub2RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENfb2x1bW4gQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDZWxsIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkxpbmsgcG9pbnRzIHRvOiI6ICIiLAorICAgICAgICAgICAgIk1ha2UgbGluX2suLi4iOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICIiLAorICAgICAgICAgICAgIk9wZW5zIHRoaXMgbGluayBpbiBhIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJQYXN0ZSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgZWxlbWVudDoiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHVubGluayB0aGlzIGVsZW1lbnQuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHRoZSAkZWxlbSBFbGVtZW50Li4uIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHRoaXMgbm9kZSBmcm9tIHRoZSBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlJvX3cgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIGltYWdlIHByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgVGFibGUgQ2VsbCBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgVGFibGUgUm93IFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiVW5saW5rIHRoZSBjdXJyZW50IGVsZW1lbnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ3JlYXRlTGluayI6IHsKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiIiwKKyAgICAgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIiIsCisgICAgICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICIiLAorICAgICAgICAgICAgIk90aGVyIjogIiIsCisgICAgICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0OiI6ICIiLAorICAgICAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAiIiwKKyAgICAgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIiIsCisgICAgICAgICAgICAiVVJMOiI6ICIiLAorICAgICAgICAgICAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEZWZpbml0aW9uTGlzdCI6IHsKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGRlc2NyaXB0aW9uIjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiBsaXN0IjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiB0ZXJtIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRpYWxvZ3MiOiB7CisgICAgICAgICAgICAiU29tZSBUZXh0IEhlcmUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRHluYW1pY0NTUyI6IHsKKyAgICAgICAgICAgICJDaG9vc2Ugc3R5bGVzaGVldCI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQiOiAiIiwKKyAgICAgICAgICAgICJVbmRlZmluZWQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgICAgICJFZGl0IEhUTUwgZm9yIHNlbGVjdGVkIHRleHQiOiAiIiwKKyAgICAgICAgICAgICJFZGl0IFRhZyBCeSBQZWciOiAiIiwKKyAgICAgICAgICAgICJUYWcgRWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVxdWF0aW9uIjogeworICAgICAgICAgICAgIiE9IjogIiIsCisgICAgICAgICAgICAiIWluIjogIiIsCisgICAgICAgICAgICAiJmd0Oy0iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiJmx0O3gmZ3Q7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAhYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYC5gICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAyYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDNgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA1YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDZgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgN2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA4YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgZWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7Jm5ic3A7YDFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Arezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLTpcXCBgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC17Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BDYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Bjb3NgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGxuYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BwaWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHNpbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGFuYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0aW1lc2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImcXVvdDt0ZXh0JnF1b3Q7IjogIiIsCisgICAgICAgICAgICAiJytmb3JtdWxhKyciOiAiIiwKKyAgICAgICAgICAgICIoKG4pLChrKSkiOiAiIiwKKyAgICAgICAgICAgICIoeCsxKS8oeC0xKSI6ICIiLAorICAgICAgICAgICAgIioiOiAiIiwKKyAgICAgICAgICAgICIqKiI6ICIiLAorICAgICAgICAgICAgIistIjogIiIsCisgICAgICAgICAgICAiLSZndDsiOiAiIiwKKyAgICAgICAgICAgICItJmx0OyI6ICIiLAorICAgICAgICAgICAgIi06IjogIiIsCisgICAgICAgICAgICAiLT0iOiAiIiwKKyAgICAgICAgICAgICIvLyI6ICIiLAorICAgICAgICAgICAgIi9fIjogIiIsCisgICAgICAgICAgICAiOi4iOiAiIiwKKyAgICAgICAgICAgICI9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIkAiOiAiIiwKKyAgICAgICAgICAgICJbW2EsYl0sW2MsZF1dIjogIiIsCisgICAgICAgICAgICAiXFxcXCI6ICIiLAorICAgICAgICAgICAgIlxcbkNsaWNrIGluIHRoZSBib3ggdG8gdXNlIHlvdXIga2V5Ym9hcmQgb3IgdXNlIHRoZSBidXR0b25zXFxuIjogIiIsCisgICAgICAgICAgICAiXl4iOiAiIiwKKyAgICAgICAgICAgICJeXl4iOiAiIiwKKyAgICAgICAgICAgICJfX3wiOiAiIiwKKyAgICAgICAgICAgICJffF8iOiAiIiwKKyAgICAgICAgICAgICJgIT1gIjogIiIsCisgICAgICAgICAgICAiYCFpbmAiOiAiIiwKKyAgICAgICAgICAgICJgJmFuZDtgIjogIiIsCisgICAgICAgICAgICAiYCZjYXA7YCI6ICIiLAorICAgICAgICAgICAgImAmY3VwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oy1gIjogIiIsCisgICAgICAgICAgICAiYCZndDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PSZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7eCZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZvcjtgIjogIiIsCisgICAgICAgICAgICAiYCZxdW90O3RleHQmcXVvdDtgIjogIiIsCisgICAgICAgICAgICAiYCgobiksKGspKWAiOiAiIiwKKyAgICAgICAgICAgICJgKHgrMSkvKHgtMSlgIjogIiIsCisgICAgICAgICAgICAiYCoqYCI6ICIiLAorICAgICAgICAgICAgImAqYCI6ICIiLAorICAgICAgICAgICAgImArLWAiOiAiIiwKKyAgICAgICAgICAgICJgLSZndDtgIjogIiIsCisgICAgICAgICAgICAiYC0mbHQ7YCI6ICIiLAorICAgICAgICAgICAgImAtOmAiOiAiIiwKKyAgICAgICAgICAgICJgLT1gIjogIiIsCisgICAgICAgICAgICAiYC8vYCI6ICIiLAorICAgICAgICAgICAgImAvX2AiOiAiIiwKKyAgICAgICAgICAgICJgOi5gIjogIiIsCisgICAgICAgICAgICAiYD0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImBAYCI6ICIiLAorICAgICAgICAgICAgImBbW2EsYl0sW2MsZF1dYCI6ICIiLAorICAgICAgICAgICAgImBcXFxcYCI6ICIiLAorICAgICAgICAgICAgImBfX3xgIjogIiIsCisgICAgICAgICAgICAiYF98X2AiOiAiIiwKKyAgICAgICAgICAgICJgQUFgIjogIiIsCisgICAgICAgICAgICAiYGFsZXBoYCI6ICIiLAorICAgICAgICAgICAgImBhbHBoYWAiOiAiIiwKKyAgICAgICAgICAgICJgYW5kYCI6ICIiLAorICAgICAgICAgICAgImBiYXJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJldGFgIjogIiIsCisgICAgICAgICAgICAiYENDYCI6ICIiLAorICAgICAgICAgICAgImBjY2FgIjogIiIsCisgICAgICAgICAgICAiYGNoaWAiOiAiIiwKKyAgICAgICAgICAgICJgZGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgZGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbGAiOiAiIiwKKyAgICAgICAgICAgICJgRGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkaWFtb25kYCI6ICIiLAorICAgICAgICAgICAgImBkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkeS9keGAiOiAiIiwKKyAgICAgICAgICAgICJgRUVgIjogIiIsCisgICAgICAgICAgICAiYGVwc2lgIjogIiIsCisgICAgICAgICAgICAiYGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZnJhYCI6ICIiLAorICAgICAgICAgICAgImBHYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdyYWRgIjogIiIsCisgICAgICAgICAgICAiYGhhcnJgIjogIiIsCisgICAgICAgICAgICAiYGhBcnJgIjogIiIsCisgICAgICAgICAgICAiYGhhdGFgIjogIiIsCisgICAgICAgICAgICAiYGlmYCI6ICIiLAorICAgICAgICAgICAgImBpbmAiOiAiIiwKKyAgICAgICAgICAgICJgaW50YCI6ICIiLAorICAgICAgICAgICAgImBpb3RhYCI6ICIiLAorICAgICAgICAgICAgImBrYXBwYWAiOiAiIiwKKyAgICAgICAgICAgICJgTGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBsYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYGxBcnJgIjogIiIsCisgICAgICAgICAgICAiYGxhcnJgIjogIiIsCisgICAgICAgICAgICAiYGxpbV8oeC0mZ3Q7b28pYCI6ICIiLAorICAgICAgICAgICAgImBsb2dgIjogIiIsCisgICAgICAgICAgICAiYG11YCI6ICIiLAorICAgICAgICAgICAgImBOTmAiOiAiIiwKKyAgICAgICAgICAgICJgbm5gIjogIiIsCisgICAgICAgICAgICAiYG5vdGAiOiAiIiwKKyAgICAgICAgICAgICJgbnVgIjogIiIsCisgICAgICAgICAgICAiYG8rYCI6ICIiLAorICAgICAgICAgICAgImBvLmAiOiAiIiwKKyAgICAgICAgICAgICJgTy9gIjogIiIsCisgICAgICAgICAgICAiYG9pbnRgIjogIiIsCisgICAgICAgICAgICAiYG9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBPbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgb29gIjogIiIsCisgICAgICAgICAgICAiYG9yYCI6ICIiLAorICAgICAgICAgICAgImBveGAiOiAiIiwKKyAgICAgICAgICAgICJgcGhpYCI6ICIiLAorICAgICAgICAgICAgImBQaGlgIjogIiIsCisgICAgICAgICAgICAiYFBpYCI6ICIiLAorICAgICAgICAgICAgImBwaWAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvZGAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvcGAiOiAiIiwKKyAgICAgICAgICAgICJgUHNpYCI6ICIiLAorICAgICAgICAgICAgImBwc2lgIjogIiIsCisgICAgICAgICAgICAiYFFRYCI6ICIiLAorICAgICAgICAgICAgImBxdWFkYCI6ICIiLAorICAgICAgICAgICAgImByQXJyYCI6ICIiLAorICAgICAgICAgICAgImByaG9gIjogIiIsCisgICAgICAgICAgICAiYHJvb3QobikoeClgIjogIiIsCisgICAgICAgICAgICAiYFJSYCI6ICIiLAorICAgICAgICAgICAgImBzZmFgIjogIiIsCisgICAgICAgICAgICAiYFNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgc3FydCh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgc3F1YXJlYCI6ICIiLAorICAgICAgICAgICAgImBzdGFja3JlbCgtJmd0OykoKylgIjogIiIsCisgICAgICAgICAgICAiYHN1YmAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VtYCI6ICIiLAorICAgICAgICAgICAgImBzdXBgIjogIiIsCisgICAgICAgICAgICAiYHN1cGVgIjogIiIsCisgICAgICAgICAgICAiYHRhdWAiOiAiIiwKKyAgICAgICAgICAgICJgVGhldGFgIjogIiIsCisgICAgICAgICAgICAiYHRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImBUVGAiOiAiIiwKKyAgICAgICAgICAgICJgdHRhYCI6ICIiLAorICAgICAgICAgICAgImB1YXJyYCI6ICIiLAorICAgICAgICAgICAgImB1bGFgIjogIiIsCisgICAgICAgICAgICAiYHVwc2lsb25gIjogIiIsCisgICAgICAgICAgICAiYHV1YCI6ICIiLAorICAgICAgICAgICAgImB2ZWNhYCI6ICIiLAorICAgICAgICAgICAgImB2dmAiOiAiIiwKKyAgICAgICAgICAgICJgeF8obW4pYCI6ICIiLAorICAgICAgICAgICAgImBYaWAiOiAiIiwKKyAgICAgICAgICAgICJgeGlgIjogIiIsCisgICAgICAgICAgICAiYHh4YCI6ICIiLAorICAgICAgICAgICAgImB6ZXRhYCI6ICIiLAorICAgICAgICAgICAgImBaWmAiOiAiIiwKKyAgICAgICAgICAgICJgfC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImB8LS1gIjogIiIsCisgICAgICAgICAgICAiYHw9PWAiOiAiIiwKKyAgICAgICAgICAgICJgfF9fYCI6ICIiLAorICAgICAgICAgICAgImB8fmAiOiAiIiwKKyAgICAgICAgICAgICJgfj1gIjogIiIsCisgICAgICAgICAgICAiYH58YCI6ICIiLAorICAgICAgICAgICAgImB+fmAiOiAiIiwKKyAgICAgICAgICAgICJBQSI6ICIiLAorICAgICAgICAgICAgImFsZXBoIjogIiIsCisgICAgICAgICAgICAiYWxwaGEiOiAiIiwKKyAgICAgICAgICAgICJhbmQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGggRm9ybXVsYSBJbnB1dCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aE1MIEV4YW1wbGUiOiAiIiwKKyAgICAgICAgICAgICJiYXJhIjogIiIsCisgICAgICAgICAgICAiQmFzZWQgb24gQVNDSUlNYXRoTUwgYnkiOiAiIiwKKyAgICAgICAgICAgICJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiYmJhIjogIiIsCisgICAgICAgICAgICAiYmV0YSI6ICIiLAorICAgICAgICAgICAgIkNDIjogIiIsCisgICAgICAgICAgICAiY2NhIjogIiIsCisgICAgICAgICAgICAiY2hpIjogIiIsCisgICAgICAgICAgICAiZGFyciI6ICIiLAorICAgICAgICAgICAgImRkb3RhIjogIiIsCisgICAgICAgICAgICAiZGVsIjogIiIsCisgICAgICAgICAgICAiZGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJEZWx0YSI6ICIiLAorICAgICAgICAgICAgImRpYW1vbmQiOiAiIiwKKyAgICAgICAgICAgICJkb3RhIjogIiIsCisgICAgICAgICAgICAiZHkvZHgiOiAiIiwKKyAgICAgICAgICAgICJFRSI6ICIiLAorICAgICAgICAgICAgImVwc2kiOiAiIiwKKyAgICAgICAgICAgICJldGEiOiAiIiwKKyAgICAgICAgICAgICJGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBBc2NpaU1hdGhNTCB2aXNpdCB0aGlzIHBhZ2U6IjogIiIsCisgICAgICAgICAgICAiRm9ybXVsYSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJmcmEiOiAiIiwKKyAgICAgICAgICAgICJnYW1tYSI6ICIiLAorICAgICAgICAgICAgIkdhbW1hIjogIiIsCisgICAgICAgICAgICAiZ3JhZCI6ICIiLAorICAgICAgICAgICAgImhBcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXJyIjogIiIsCisgICAgICAgICAgICAiaGF0YSI6ICIiLAorICAgICAgICAgICAgImlmIjogIiIsCisgICAgICAgICAgICAiaW4iOiAiIiwKKyAgICAgICAgICAgICJJbnB1dCI6ICIiLAorICAgICAgICAgICAgImludCI6ICIiLAorICAgICAgICAgICAgImludF9hXmJmKHgpZHgiOiAiIiwKKyAgICAgICAgICAgICJpb3RhIjogIiIsCisgICAgICAgICAgICAia2FwcGEiOiAiIiwKKyAgICAgICAgICAgICJMYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsYXJyIjogIiIsCisgICAgICAgICAgICAibEFyciI6ICIiLAorICAgICAgICAgICAgImxpbV8oeC0mZ3Q7b28pIjogIiIsCisgICAgICAgICAgICAibXUiOiAiIiwKKyAgICAgICAgICAgICJOTiI6ICIiLAorICAgICAgICAgICAgIm5uIjogIiIsCisgICAgICAgICAgICAibm5uIjogIiIsCisgICAgICAgICAgICAibm90IjogIiIsCisgICAgICAgICAgICAibnUiOiAiIiwKKyAgICAgICAgICAgICJvKyI6ICIiLAorICAgICAgICAgICAgIm8uIjogIiIsCisgICAgICAgICAgICAiTy8iOiAiIiwKKyAgICAgICAgICAgICJvaW50IjogIiIsCisgICAgICAgICAgICAiT21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJvbWVnYSI6ICIiLAorICAgICAgICAgICAgIm9vIjogIiIsCisgICAgICAgICAgICAib3IiOiAiIiwKKyAgICAgICAgICAgICJveCI6ICIiLAorICAgICAgICAgICAgInBoaSI6ICIiLAorICAgICAgICAgICAgIlBoaSI6ICIiLAorICAgICAgICAgICAgInBpIjogIiIsCisgICAgICAgICAgICAiUGkiOiAiIiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIiIsCisgICAgICAgICAgICAicHJvZCI6ICIiLAorICAgICAgICAgICAgInByb3AiOiAiIiwKKyAgICAgICAgICAgICJwc2kiOiAiIiwKKyAgICAgICAgICAgICJQc2kiOiAiIiwKKyAgICAgICAgICAgICJRUSI6ICIiLAorICAgICAgICAgICAgInF1YWQiOiAiIiwKKyAgICAgICAgICAgICJyQXJyIjogIiIsCisgICAgICAgICAgICAicmhvIjogIiIsCisgICAgICAgICAgICAicm9vdChuKSh4KSI6ICIiLAorICAgICAgICAgICAgIlJSIjogIiIsCisgICAgICAgICAgICAic2ZhIjogIiIsCisgICAgICAgICAgICAic2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJTaWdtYSI6ICIiLAorICAgICAgICAgICAgInNxcnQoeCkiOiAiIiwKKyAgICAgICAgICAgICJzcXVhcmUiOiAiIiwKKyAgICAgICAgICAgICJzdGFja3JlbCgtJmd0OykoKykiOiAiIiwKKyAgICAgICAgICAgICJzdWIiOiAiIiwKKyAgICAgICAgICAgICJzdWJlIjogIiIsCisgICAgICAgICAgICAic3VtIjogIiIsCisgICAgICAgICAgICAic3VtXyhuPTEpXm9vIjogIiIsCisgICAgICAgICAgICAic3VwIjogIiIsCisgICAgICAgICAgICAic3VwZSI6ICIiLAorICAgICAgICAgICAgInRhdSI6ICIiLAorICAgICAgICAgICAgIlRoZXRhIjogIiIsCisgICAgICAgICAgICAidGhldGEiOiAiIiwKKyAgICAgICAgICAgICJUVCI6ICIiLAorICAgICAgICAgICAgInR0YSI6ICIiLAorICAgICAgICAgICAgInVhcnIiOiAiIiwKKyAgICAgICAgICAgICJ1bGEiOiAiIiwKKyAgICAgICAgICAgICJ1cHNpbG9uIjogIiIsCisgICAgICAgICAgICAidXUiOiAiIiwKKyAgICAgICAgICAgICJ1dXUiOiAiIiwKKyAgICAgICAgICAgICJ2ZWNhIjogIiIsCisgICAgICAgICAgICAidnYiOiAiIiwKKyAgICAgICAgICAgICJ2dnYiOiAiIiwKKyAgICAgICAgICAgICJ4XihtK24pIjogIiIsCisgICAgICAgICAgICAieF8obW4pIjogIiIsCisgICAgICAgICAgICAiWGkiOiAiIiwKKyAgICAgICAgICAgICJ4aSI6ICIiLAorICAgICAgICAgICAgInh4IjogIiIsCisgICAgICAgICAgICAiemV0YSI6ICIiLAorICAgICAgICAgICAgIlpaIjogIiIsCisgICAgICAgICAgICAifC0mZ3Q7IjogIiIsCisgICAgICAgICAgICAifC0tIjogIiIsCisgICAgICAgICAgICAifD09IjogIiIsCisgICAgICAgICAgICAifF9fIjogIiIsCisgICAgICAgICAgICAifH4iOiAiIiwKKyAgICAgICAgICAgICJ+PSI6ICIiLAorICAgICAgICAgICAgIn58IjogIiIsCisgICAgICAgICAgICAifn4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmFuY3lTZWxlY3RzIjogeworICAgICAgICAgICAgIicrb3B0LnRleHQrJyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGaW5kUmVwbGFjZSI6IHsKKyAgICAgICAgICAgICInO1xyXG4gIHZhciB0YWdjID0gJyI6ICIiLAorICAgICAgICAgICAgIkNhc2Ugc2Vuc2l0aXZlIHNlYXJjaCI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIjogIiIsCisgICAgICAgICAgICAiRG9uZSI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSB0ZXh0IHlvdSB3YW50IHRvIGZpbmQiOiAiIiwKKyAgICAgICAgICAgICJGaW5kIGFuZCBSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiZm91bmQgaXRlbSI6ICIiLAorICAgICAgICAgICAgImZvdW5kIGl0ZW1zIjogIiIsCisgICAgICAgICAgICAiSGlnaGxpZ2h0IjogIiIsCisgICAgICAgICAgICAiSW5mb3JtIGEgcmVwbGFjZW1lbnQgd29yZCI6ICIiLAorICAgICAgICAgICAgIk5leHQiOiAiIiwKKyAgICAgICAgICAgICJub3QgZm91bmQiOiAiIiwKKyAgICAgICAgICAgICJPcHRpb25zIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSB3aXRoOiI6ICIiLAorICAgICAgICAgICAgInJlcGxhY2VkIGl0ZW0iOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtcyI6ICIiLAorICAgICAgICAgICAgIlNlYXJjaCBmb3I6IjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSBhbGwgb2NjdXJyZW5jZXMiOiAiIiwKKyAgICAgICAgICAgICJTdWJzdGl0dXRlIHRoaXMgb2NjdXJyZW5jZT8iOiAiIiwKKyAgICAgICAgICAgICJVbmRvIjogIiIsCisgICAgICAgICAgICAiV2hvbGUgd29yZHMgb25seSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGb3JtT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJFbnRlciB0aGUgbmFtZSBmb3IgbmV3IG9wdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIGNoZWNrIGJveC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBGb3JtLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG11bHRpLWxpbmUgdGV4dCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSByYWRpbyBidXR0b24uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgc2VsZWN0IGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHN1Ym1pdC9yZXNldCBidXR0b24uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgdGV4dCwgcGFzc3dvcmQgb3IgaGlkZGVuIGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIk1lc3NhZ2UgU2VudCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBTZWxlY3QuLi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybXMiOiB7CisgICAgICAgICAgICAiJ29uQ2xpY2snPSI6ICIiLAorICAgICAgICAgICAgIkFjY2VzcyBLZXk6IjogIiIsCisgICAgICAgICAgICAiQWN0aW9uIFVSTDoiOiAiIiwKKyAgICAgICAgICAgICJCdXR0b24gU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiQ2hlY2tlZCI6ICIiLAorICAgICAgICAgICAgIkNvbHVtbnM6IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCB0ZXh0IChvcHRpb25hbCkiOiAiIiwKKyAgICAgICAgICAgICJEaW1lbnNpb25zIjogIiIsCisgICAgICAgICAgICAiRGlzYWJsZWQiOiAiIiwKKyAgICAgICAgICAgICJFbmNvZGluZzoiOiAiIiwKKyAgICAgICAgICAgICJGb3IgQ29udHJvbDoiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBGSUVMRFNFVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IExBQkVMIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBTRUxFQ1QiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiRm9ybSBoYW5kbGVyIHNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJHZXQiOiAiIiwKKyAgICAgICAgICAgICJIYXJkIjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0IGluIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiSFRNTC1Gb3JtIHRvIENHSSAoZGVmYXVsdCkiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBzb3VyY2UiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBVUkw6IjogIiIsCisgICAgICAgICAgICAiSW5pdGlhbCBUZXh0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiSmF2YXNjcmlwdCBmb3IgYnV0dG9uIGNsaWNrIjogIiIsCisgICAgICAgICAgICAiTGFiZWw6IjogIiIsCisgICAgICAgICAgICAiTGVnZW5kOiI6ICIiLAorICAgICAgICAgICAgIk1heCBsZW5ndGg6IjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY2NlcHRlZCI6ICIiLAorICAgICAgICAgICAgIk1ldGhvZDoiOiAiIiwKKyAgICAgICAgICAgICJtdWx0aXBhcnQgRm9ybSBEYXRhIChGaWxlLVVwbG9hZCkiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gc2VsZWN0IjogIiIsCisgICAgICAgICAgICAibmFtZSBvZiB0aGUgdGV4dGFyZWEiOiAiIiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICIiLAorICAgICAgICAgICAgIm5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIm5vd3JhcCI6ICIiLAorICAgICAgICAgICAgIk9mZiI6ICIiLAorICAgICAgICAgICAgIlBoeXNpY2FsIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIGEgTGFiZWwiOiAiIiwKKyAgICAgICAgICAgICJQb3N0IjogIiIsCisgICAgICAgICAgICAicHJlIjogIiIsCisgICAgICAgICAgICAiUmVhZCBPbmx5IjogIiIsCisgICAgICAgICAgICAiUm93czoiOiAiIiwKKyAgICAgICAgICAgICJTaXplIG9mIHRleHQgYm94IGluIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJTaXplOiI6ICIiLAorICAgICAgICAgICAgIlNvZnQiOiAiIiwKKyAgICAgICAgICAgICJUYWIgSW5kZXg6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IEZyYW1lOiI6ICIiLAorICAgICAgICAgICAgIlRleHQ6IjogIiIsCisgICAgICAgICAgICAiVVJMIG9mIGltYWdlIjogIiIsCisgICAgICAgICAgICAiVmFsdWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZToiOiAiIiwKKyAgICAgICAgICAgICJWaXJ0dWFsIjogIiIsCisgICAgICAgICAgICAiV2lkdGggaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJXcmFwIE1vZGU6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBOYW1lIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iCisgICAgICAgIH0sCisgICAgICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgICAgICIuLi4iOiAiIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgc3R5bGUtc2hlZXQ6IjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZCBjb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJDaGFyYWN0ZXIgc2V0OiI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChJU08tODg1OS01KSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChLT0k4LVIpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKFdJTkRPV1MtMTI1MSkiOiAiIiwKKyAgICAgICAgICAgICJEZXNjcmlwdGlvbjoiOiAiIiwKKyAgICAgICAgICAgICJET0NUWVBFOiI6ICIiLAorICAgICAgICAgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCB0aXRsZToiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkczoiOiAiIiwKKyAgICAgICAgICAgICJQcmltYXJ5IHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIlRleHQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiVVRGLTggKHJlY29tbWVuZGVkKSI6ICIiLAorICAgICAgICAgICAgIndlc3Rlcm4gKElTTy04ODU5LTEpIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bGxTY3JlZW4iOiB7CisgICAgICAgICAgICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkdlY2tvIjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJIb3Jpem9udGFsUnVsZSI6IHsKKyAgICAgICAgICAgICImI3gwMGQ3OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiIiwKKyAgICAgICAgICAgICJDZW50ZXIiOiAiIiwKKyAgICAgICAgICAgICJDb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L2VkaXQgaG9yaXpvbnRhbCBydWxlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgSG9yaXpvbnRhbCBSdWxlIjogIiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIiIsCisgICAgICAgICAgICAiTGVmdCI6ICIiLAorICAgICAgICAgICAgIk5vIHNoYWRpbmciOiAiIiwKKyAgICAgICAgICAgICJwZXJjZW50IjogIiIsCisgICAgICAgICAgICAicGl4ZWxzIjogIiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSI6ICIiLAorICAgICAgICAgICAgIldpZHRoOiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbmxpbmVTdHlsZXIiOiB7CisgICAgICAgICAgICAiQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIiIsCisgICAgICAgICAgICAiQm90dG9tIjogIiIsCisgICAgICAgICAgICAiQ2hhciI6ICIiLAorICAgICAgICAgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIiIsCisgICAgICAgICAgICAiQ1NTIFN0eWxlIjogIiIsCisgICAgICAgICAgICAiRkcgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJGbG9hdCI6ICIiLAorICAgICAgICAgICAgIkp1c3RpZnkiOiAiIiwKKyAgICAgICAgICAgICJNYXJnaW4iOiAiIiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiIiwKKyAgICAgICAgICAgICJOb25lIjogIiIsCisgICAgICAgICAgICAiUGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIlRleHQgYWxpZ24iOiAiIiwKKyAgICAgICAgICAgICJUb3AiOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICIiLAorICAgICAgICAgICAgIi0iOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJDZW50ZXIiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBVUkwiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJMYXlvdXQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAicGVyY2VudCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgInBpeGVscyI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiV2lkdGgiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAgICAgIkFuY2hvciBuYW1lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEFuY2hvciI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICAgICAiQWJzYm90dG9tIjogIiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiIiwKKyAgICAgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICIiLAorICAgICAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIkhvcml6b250YWw6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICIiLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJTcGFjaW5nIjogIiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICIiLAorICAgICAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbDoiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBVUkw6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJUb3AiOiAiPDxJbmxpbmVTdHlsZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGZvb3Rub3RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IE5vdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGFnZWJyZWFrIjogeworICAgICAgICAgICAgIlBhZ2UgYnJlYWsiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIEJyZWFrIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNtaWxleSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgU21pbGV5IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICAgICAiXFxuICBUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZ1xcbiI6ICIiLAorICAgICAgICAgICAgIkhpZGUgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMSI6ICIiLAorICAgICAgICAgICAgIkxpbmsyIjogIiIsCisgICAgICAgICAgICAiTGluazMiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNCI6ICIiLAorICAgICAgICAgICAgIkxpbms1IjogIiIsCisgICAgICAgICAgICAiU2hvdyBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmciOiAiIiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgICAgICJBbGwgQ2F0ZWdvcmllcyI6ICIiLAorICAgICAgICAgICAgIkZpbHRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyBIVE1MIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIHRlbXBsYXRlIHZhcmlhYmxlIjogIiIsCisgICAgICAgICAgICAiT25seSBzZWFyY2ggd29yZCBiZWdpbm5pbmciOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIjw8Q2hhckNvdW50ZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICI8PEluc2VydFNuaXBwZXQ+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAgICAgIkNhcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJDYXB0aW9uIGZvciB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIHBhZGRpbmc6IjogIiIsCisgICAgICAgICAgICAiQ2VsbCBzcGFjaW5nOiI6ICIiLAorICAgICAgICAgICAgIkNvbGxhcHNlIGJvcmRlcnM6IjogIiIsCisgICAgICAgICAgICAiQ29sczoiOiAiIiwKKyAgICAgICAgICAgICJFbSI6ICIiLAorICAgICAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJMYXlvdSI6ICIiLAorICAgICAgICAgICAgIk51bWJlciBvZiBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICIiLAorICAgICAgICAgICAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSBvZiB0aGUgYm9yZGVyIjogIiIsCisgICAgICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiV2lkdGggdW5pdCI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvcmRlciI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJMYXlvdXQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUGVyY2VudCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlBpeGVscyI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUm93czoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTcGFjaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRvcCI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiTGFuZ01hcmtzIjogeworICAgICAgICAgICAgIiZtZGFzaDsgbGFuZ3VhZ2UgJm1kYXNoOyI6ICIiLAorICAgICAgICAgICAgIicsICciOiAiIiwKKyAgICAgICAgICAgICJFbmdsaXNoIjogIiIsCisgICAgICAgICAgICAiRnJlbmNoIjogIiIsCisgICAgICAgICAgICAiR3JlZWsiOiAiIiwKKyAgICAgICAgICAgICJsYW5ndWFnZSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJMYXRpbiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJMaW5rZXIiOiB7CisgICAgICAgICAgICAiKHB4KSI6ICIiLAorICAgICAgICAgICAgIkFuY2hvci1MaW5rIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIEFkZHJlc3M6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgTGluayI6ICIiLAorICAgICAgICAgICAgIkxvY2F0aW9uIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZW51IEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFRlbXBsYXRlOiI6ICIiLAorICAgICAgICAgICAgIk5ldyBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcmRpbmFyeSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUG9wdXAgV2luZG93IjogIiIsCisgICAgICAgICAgICAiUG9wdXBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgTGluayI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZWFibGU6IjogIiIsCisgICAgICAgICAgICAiU2FtZSBXaW5kb3cgKGp1bXAgb3V0IG9mIGZyYW1lcykiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGxiYXJzOiI6ICIiLAorICAgICAgICAgICAgIlNob3dzIE9uIEhvdmVyIjogIiIsCisgICAgICAgICAgICAiU3RhdHVzIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJTdWJqZWN0OiI6ICIiLAorICAgICAgICAgICAgIlRpdGxlOiI6ICIiLAorICAgICAgICAgICAgIlRvb2xiYXI6IjogIiIsCisgICAgICAgICAgICAiVVJMIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiIiwKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTmFtZToiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTaXplOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlRhcmdldDoiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIlVSTDoiOiAiPDxDcmVhdGVMaW5rPj4iCisgICAgICAgIH0sCisgICAgICAgICJMaXN0VHlwZSI6IHsKKyAgICAgICAgICAgICJDaG9vc2UgbGlzdCBzdHlsZSB0eXBlIChmb3Igb3JkZXJlZCBsaXN0cykiOiAiIiwKKyAgICAgICAgICAgICJEZWNpbWFsIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciBncmVlayBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgbGF0aW4gbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIHJvbWFuIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJVcHBlciBsYXRpbiBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiVXBwZXIgcm9tYW4gbnVtYmVycyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJNb290b29sc0ZpbGVNYW5hZ2VyIjogeworICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk9wZXJhIjogeworICAgICAgICAgICAgIk1BUksiOiAiIiwKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgdGV4dCBpbiBuZXcgcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiUGFzdGUgYXMgUGxhaW4gVGV4dCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQcmVzZXJ2ZVNjcmlwdHMiOiB7CisgICAgICAgICAgICAiSmF2YVNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIlBIUCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgICAgICInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnY2wnOiAnIjogIiIsCisgICAgICAgICAgICAiQVRUUklCVVRFUyI6ICIiLAorICAgICAgICAgICAgIkNvbG9ycyI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSBUQUcgeW91IHdhbnQgdG8gaW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiTm8gQ1NTIGNsYXNzIGF2YWlhYmxlIjogIiIsCisgICAgICAgICAgICAiT2siOiAiIiwKKyAgICAgICAgICAgICJPUFRJT05TIjogIiIsCisgICAgICAgICAgICAiUXVpY2sgVGFnIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlRBR3MiOiAiIiwKKyAgICAgICAgICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBUQUciOiAiIiwKKyAgICAgICAgICAgICJZb3UgaGF2ZSB0byBzZWxlY3Qgc29tZSB0ZXh0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNhdmVTdWJtaXQiOiB7CisgICAgICAgICAgICAiaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAgICAgICAgICJSZWFkeSI6ICIiLAorICAgICAgICAgICAgIlNhdmUiOiAiIiwKKyAgICAgICAgICAgICJTYXZpbmcuLi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiU2V0SWQiOiB7CisgICAgICAgICAgICAiSUQvTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQgYW5kIE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSWQvTmFtZSI6ICIiLAorICAgICAgICAgICAgIlNldCBJRC9OYW1lIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiQ2xvc2luZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIkNsb3NpbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIkNvbnZlcnQgYWxsIHF1b3RlcyBhbmQgZGFzaGVzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIGF1dG9tYXRpYyByZXBsYWNlbWVudHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN0eWxpc3QiOiB7CisgICAgICAgICAgICAiU3R5bGVzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBTZWxlY3Rpb24gT25seSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIHVwIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBTY29wZSI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYWwgdGlkeSB1cCBhbmQgY29ycmVjdGlvbiBvZiBzb21lIHByb2JsZW1zLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzZWxlY3QgZnJvbSB0aGUgZm9sbG93aW5nIGNsZWFuaW5nIG9wdGlvbnMuLi4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc3RhbmQgYnkgd2hpbGUgY2xlYW5pbmcgaW4gcHJvY2Vzcy4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGlnbm1lbnQgKGxlZnQvcmlnaHQvanVzdGlmeSkuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBjbGFzc2VzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBBbGwgSFRNTCBUYWdzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBzdHlsZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0eXBlZmFjZXMgKGZvbnQgXCJzdHlsZXNcIikuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGVtcGhhc2lzIGFuZCBhbm5vdGF0aW9ucy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgbGFuZyBhdHRyaWJ1dGVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBQYXJhZ3JhcGhzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cy4iOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzIHdpdGggbm9uLWRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzLiI6ICIiLAorICAgICAgICAgICAgIlZpZ29yb3VzbHkgcHVyZ2UgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiQWxsIGZvdXIgc2lkZXMiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXJzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBQcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBUeXBlOiI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIGRvd24iOiAiIiwKKyAgICAgICAgICAgICJDZWxscyB0byB0aGUgcmlnaHQsIGFuZCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBjZWxsIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSByb3ciOiAiIiwKKyAgICAgICAgICAgICJEbyBOb3QgQ2hhbmdlIjogIiIsCisgICAgICAgICAgICAiRnJhbWUgYW5kIGJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJGcmFtZXMiOiAiIiwKKyAgICAgICAgICAgICJIZWFkZXIgKHRoKSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjZWxsIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNlbGwgYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNvbHVtbiBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjb2x1bW4gYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCByb3cgYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBjdXJyZW50IGNlbGwgd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJObyBydWxlcyI6ICIiLAorICAgICAgICAgICAgIk5vIHNpZGVzIjogIiIsCisgICAgICAgICAgICAiTm9ybWFsICh0ZCkiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJSb3cgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlJvdyBQcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gY29sdW1ucyBvbmx5IjogIiIsCisgICAgICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiByb3dzIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgY29sdW1uIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgcm93IjogIiIsCisgICAgICAgICAgICAiU3VtbWFyeSI6ICIiLAorICAgICAgICAgICAgIlRhYmxlIHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJUYWJsZSBQcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgbGVmdC1oYW5kIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSByaWdodCBhbmQgbGVmdCBzaWRlcyBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHRvcCBhbmQgYm90dG9tIHNpZGVzIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIiIsCisgICAgICAgICAgICAiQ2FwdGlvbiI6ICI8PEluc2VydFRhYmxlPj4iLAorICAgICAgICAgICAgIkNvbHVtbnMiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJEZXNjcmlwdGlvbiI6ICI8PEZ1bGxQYWdlPj4iLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiUGFkZGluZyI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJwaXhlbHMiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSb3dzIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiU3BhY2luZyI6ICI8PEluc2VydEltYWdlPj4iCisgICAgICAgIH0sCisgICAgICAgICJVbnNhdmVkQ2hhbmdlcyI6IHsKKyAgICAgICAgICAgICJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhlIGVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJXZWJLaXQiOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIjw8R2Vja28+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlhpbmhhIjogeworICAgICAgICAgICAgIiYjODIxMjsgZm9udCAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIiYjODIxMjsgc2l6ZSAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiMSAoOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIyICgxMCBwdCkiOiAiIiwKKyAgICAgICAgICAgICIzICgxMiBwdCkiOiAiIiwKKyAgICAgICAgICAgICI0ICgxNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI1ICgxOCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI2ICgyNCBwdCkiOiAiIiwKKyAgICAgICAgICAgICI3ICgzNiBwdCkiOiAiIiwKKyAgICAgICAgICAgICJBZGRyZXNzIjogIiIsCisgICAgICAgICAgICAiQXJpYWwiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBjb250ZW50IHBhc3RlZCBmcm9tIFdvcmQiOiAiIiwKKyAgICAgICAgICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiIiwKKyAgICAgICAgICAgICJDbG9zZSI6ICIiLAorICAgICAgICAgICAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAiIiwKKyAgICAgICAgICAgICJDb3VyaWVyIE5ldyI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBTdGF0dXNiYXIiOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgVG9vbGJhciI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMCAoemVybykiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTEgLi4gQ1RSTC02IjogIiIsCisgICAgICAgICAgICAiQ1RSTC1BIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1CIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1DIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1FIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1JIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1KIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1MIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1OIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1SIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1TIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1VIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1WIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1YIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1ZIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1aIjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICIiLAorICAgICAgICAgICAgIkVkaXRvciBIZWxwIjogIiIsCisgICAgICAgICAgICAiRU5URVIiOiAiIiwKKyAgICAgICAgICAgICJFcnJvciBMb2FkaW5nIFhpbmhhLiAgRGV2ZWxvcGVycywgY2hlY2sgdGhlIEVycm9yIENvbnNvbGUgZm9yIGluZm9ybWF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGluZyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdHRlZCI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYXRlIFhpbmhhIGZyYW1ld29yayI6ICIiLAorICAgICAgICAgICAgIkdlb3JnaWEiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDEiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDIiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDMiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDQiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDUiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDYiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5ncyI6ICIiLAorICAgICAgICAgICAgIkltcGFjdCI6ICIiLAorICAgICAgICAgICAgIkluaXQgZWRpdG9yIHNpemUiOiAiIiwKKyAgICAgICAgICAgICJpbnNlcnQgbGluZWJyZWFrIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICIiLAorICAgICAgICAgICAgIktleWJvYXJkIHNob3J0Y3V0cyI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgQ29yZSI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ISI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbnMiOiAiIiwKKyAgICAgICAgICAgICJNUyBXb3JkIENsZWFuZXIiOiAiIiwKKyAgICAgICAgICAgICJuZXcgcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiTm9ybWFsIjogIiIsCisgICAgICAgICAgICAiUHJpbnQgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJSZWdpc3RlciBwbHVnaW4gJHBsdWdpbiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBhcyI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCBhbGwiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIlNISUZULUVOVEVSIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgQmxvY2siOiAiIiwKKyAgICAgICAgICAgICJUYWhvbWEiOiAiIiwKKyAgICAgICAgICAgICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAiIiwKKyAgICAgICAgICAgICJUaW1lcyBOZXcgUm9tYW4iOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgQm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIlRvdWNoIGhlcmUgZmlyc3QgdG8gYWN0aXZhdGUgZWRpdG9yLiI6ICIiLAorICAgICAgICAgICAgIlZlcmRhbmEiOiAiIiwKKyAgICAgICAgICAgICJXYWl0aW5nIGZvciBJZnJhbWUgdG8gbG9hZC4uLiI6ICIiLAorICAgICAgICAgICAgIldpbmdEaW5ncyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJSZW1vdmUgQ3VycmVudCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IEJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJTZXQgcGFnZSBiYWNrZ3JvdW5kIGltYWdlIjogIiIsCisgICAgICAgICAgICAiU2V0IFBhZ2UgQmFja2dyb3VuZCBJbWFnZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDbGllbnRzaWRlU3BlbGxjaGVjayI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIENMSUVOVFNJREVTUEVMTENIRUNLIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrIHVzaW5nIGllU3BlbGwiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTAlIjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICIiLAorICAgICAgICAgICAgIjIwMCUiOiAiIiwKKyAgICAgICAgICAgICIyNSUiOiAiIiwKKyAgICAgICAgICAgICI1MCUiOiAiIiwKKyAgICAgICAgICAgICI3NSUiOiAiIiwKKyAgICAgICAgICAgICI+TGlzdCBWaWV3IjogIiIsCisgICAgICAgICAgICAiPlRodW1ibmFpbCBWaWV3IjogIiIsCisgICAgICAgICAgICAiQToiOiAiIiwKKyAgICAgICAgICAgICJBbGlnbiI6ICIiLAorICAgICAgICAgICAgIkFsdCI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciBDb2xvciI6ICIiLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkNyb3AiOiAiIiwKKyAgICAgICAgICAgICJEOiI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICIiLAorICAgICAgICAgICAgIkVkaXQiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiIiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiIiwKKyAgICAgICAgICAgICJGaWxlc2l6ZToiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIEhvcml6b250YWwiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIEltYWdlIjogIiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciI6ICIiLAorICAgICAgICAgICAgIkdJRiI6ICIiLAorICAgICAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICIiLAorICAgICAgICAgICAgIkg6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiIiwKKyAgICAgICAgICAgICJKUEVHIEhpZ2giOiAiIiwKKyAgICAgICAgICAgICJKUEVHIExvdyI6ICIiLAorICAgICAgICAgICAgIkpQRUcgTWVkaXVtIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyI6ICIiLAorICAgICAgICAgICAgIkxvY2siOiAiIiwKKyAgICAgICAgICAgICJNYXJrZXIiOiAiIiwKKyAgICAgICAgICAgICJNYXhpbXVtIGZvbGRlciBzaXplIGxpbWl0IHJlYWNoZWQuIFVwbG9hZCBkaXNhYmxlZC4iOiAiIiwKKyAgICAgICAgICAgICJNZWFzdXJlIjogIiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICIiLAorICAgICAgICAgICAgIk5vIEZpbGVzIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHZhbHVlIjogIiIsCisgICAgICAgICAgICAiUE5HIjogIiIsCisgICAgICAgICAgICAiUHJlc2V0IjogIiIsCisgICAgICAgICAgICAiUXVhbGl0eToiOiAiIiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIiIsCisgICAgICAgICAgICAiUmVuYW1lIjogIiIsCisgICAgICAgICAgICAiUmVzaXplIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJTdGFydCBYOiI6ICIiLAorICAgICAgICAgICAgIlN0YXJ0IFk6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlRvZ2dsZSBtYXJrZXIgY29sb3IiOiAiIiwKKyAgICAgICAgICAgICJUcmFzaCI6ICIiLAorICAgICAgICAgICAgIlVwbG9hZCI6ICIiLAorICAgICAgICAgICAgIlc6IjogIiIsCisgICAgICAgICAgICAiWDoiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJZOiI6ICIiLAorICAgICAgICAgICAgIlpvb20iOiAiIiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3JkZXIiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNsZWFyIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiQ29sb3IiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJDb3B5IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiQ3V0IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiSGVpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiPDxNb290b29sc0ZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJNYXJnaW4iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQYWRkaW5nIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIlNhdmUiOiAiPDxTYXZlU3VibWl0Pj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUaXRsZSAodG9vbHRpcCkiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIlRvcCI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJXaWR0aCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIldpZHRoOiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiRmlsdGVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbHRlciI6ICI8PEluc2VydFNuaXBwZXQyPj4iCisgICAgICAgIH0sCisgICAgICAgICJIdG1sVGlkeSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEhUTUxUSURZIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkF1dG8tVGlkeSI6ICIiLAorICAgICAgICAgICAgIkRvbid0IFRpZHkiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIFRpZHkiOiAiIiwKKyAgICAgICAgICAgICJUaWR5IGZhaWxlZC4gIENoZWNrIHlvdXIgSFRNTCBmb3Igc3ludGF4IGVycm9ycy4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFuZ2xlOiI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgUGljdHVyZXMiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFVzZXJuYW1lL0VtYWlsIjogIiIsCisgICAgICAgICAgICAiRm9sZGVyIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgTGlzdCI6ICIiLAorICAgICAgICAgICAgIktleXdvcmQiOiAiIiwKKyAgICAgICAgICAgICJObyBJbWFnZXMgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBQaG90b3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBWaWRlb3MgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIFNlcnZlciI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBVc2VybmFtZSI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW8gTGlzdCI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVmlkZW9zIjogIiIsCisgICAgICAgICAgICAiQToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJDbGVhciI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQ3JvcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJFZGl0IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiR0lGIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIEhpZ2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgTG93IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIE1lZGl1bSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxvY2siOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1hcmtlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlBORyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZXNpemUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUm90YXRlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlN0YXJ0IFk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlRyYXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJXOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJCZWhhdmlvcjoiOiAiIiwKKyAgICAgICAgICAgICJDb250aW51b3VzIjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uOiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBzY3JvbGxpbmcgbWFycXVlZSI6ICIiLAorICAgICAgICAgICAgIk1hcnF1ZWUgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIEFtb3VudDoiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgRGVsYXk6IjogIiIsCisgICAgICAgICAgICAiU2xpZGUiOiAiIiwKKyAgICAgICAgICAgICJTcGVlZCBDb250cm9sIjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJOYW1lIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlRleHQ6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBub3QgZGVmaW5lZCI6ICIiLAorICAgICAgICAgICAgIk9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiIE9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiVXBsb2FkIGZpbGUiOiAiIiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSG9yaXpvbnRhbDoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkltYWdlIFVSTDoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJMYXlvdXQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlNpemUiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTcGFjaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRvcCI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVmVydGljYWw6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEyMCUiOiAiIiwKKyAgICAgICAgICAgICIxNTAlIjogIiIsCisgICAgICAgICAgICAiODAlIjogIiIsCisgICAgICAgICAgICAiQWRkIEdVSURPIENvZGUgaW4gYSB0ZXh0Ym94IG9uIHRoZSBwYWdlIjogIiIsCisgICAgICAgICAgICAiQWRkIE1JREkgbGluayB0byBhbGxvdyBzdHVkZW50cyB0byBoZWFyIHRoZSBtdXNpYyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdCI6ICIiLAorICAgICAgICAgICAgIkdVSURPIENvZGUiOiAiIiwKKyAgICAgICAgICAgICJHdWlkbyBjb2RlIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgaW4gYXBwbGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEdVSURPIE11c2ljIE5vdGF0aW9uIjogIiIsCisgICAgICAgICAgICAiTUlESSBGaWxlIjogIiIsCisgICAgICAgICAgICAiU291cmNlIENvZGUiOiAiIiwKKyAgICAgICAgICAgICJXaXRoIE1vemlsbGEsIHRoZSBhcHBsZXQgd2lsbCBub3QgYmUgdmlzaWJsZSBpbiBlZGl0b3IsIGJ1dCBvbmx5IGluIFdlYiBwYWdlIGFmdGVyIHN1Ym1pdHRpbmcuIjogIiIsCisgICAgICAgICAgICAiWm9vbSA6IjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiWm9vbSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgR2VhcnMgaW4gb3JkZXIgdG8gdXNlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UgYW5kIGNvbmZpZ3VyYXRpb24uIjogIiIsCisgICAgICAgICAgICAiRW5hYmxpbmcgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIkluc3RhbGwiOiAiIiwKKyAgICAgICAgICAgICJMZWFybiBBYm91dCBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIHJlbG9hZCB0aGUgcGFnZSwgY2F1c2luZyB5b3UgdG8gbG9zZSBhbnkgdW5zYXZlZCB3b3JrLiAgUHJlc3MgXCJPS1wiIHRvIHJlbG9hZC4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSB1c2VzIEdvb2dsZSBHZWFycyB0byBlbmFibGUgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZS4gIFdpdGggR2VhcnMgaW5zdGFsbGVkLCB5b3UgY2FuIHNhdmUgZHJhZnRzIG9mIHlvdXIgZG9jdW1lbnRzIG9uIHlvdXIgaGFyZCBkcml2ZSwgY29uZmlndXJlIFhpbmhhIHRvIGxvb2sgdGhlIHdheSB5b3Ugd2FudCwgYW5kIGNhcnJ5IHRoaXMgaW5mb3JtYXRpb24gd2hlcmV2ZXIgeW91IHVzZSBYaW5oYSBvbiB0aGUgd2ViLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQU1NlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbGU6ICI6ICIiLAorICAgICAgICAgICAgIkltcG9ydCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQZXJzaXN0ZW50U3RvcmFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkRldGFpbHMiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIEJyb3dzZXIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgICBUaGVyZSBDICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICBUaGVyZSBBICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvIFwiIFRoZXJlIEIgXCIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAnIFRoZXJlIEQgJyI6ICIiLAorICAgICAgICAgICAgIkxpc3Qgb2YgUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiTmV3IERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiT3BlbiI6ICIiLAorICAgICAgICAgICAgIk9wZW4gRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB5b3UnZCBsaWtlIHRvIGNyZWF0ZS4iOiAiIiwKKyAgICAgICAgICAgICJTYXZlIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGVyYXNlIGFueSB1bnNhdmVkIGNvbnRlbnQuICBJZiB5b3UncmUgY2VydGFpbiwgcGxlYXNlIGNsaWNrIE9LIHRvIGNvbnRpbnVlLiI6ICIiLAorICAgICAgICAgICAgIldlYiBVUkwiOiAiIiwKKyAgICAgICAgICAgICJDb25maXJtIjogIjw8UFNMb2NhbD4+IiwKKyAgICAgICAgICAgICJDb3B5IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGVuYW1lIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQiOiAiPDxJbnNlcnROb3RlPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlNhdmUiOiAiPDxTYXZlU3VibWl0Pj4iLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiU3BlbGxDaGVja2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogU1BFTExDSEVDS0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkRpY3Rpb25hcnkiOiAiIiwKKyAgICAgICAgICAgICJGaW5pc2hlZCBsaXN0IG9mIG1pc3BlbGxlZCB3b3JkcyI6ICIiLAorICAgICAgICAgICAgIkhUTUxBcmVhIFNwZWxsIENoZWNrZXIiOiAiIiwKKyAgICAgICAgICAgICJJIHdpbGwgb3BlbiBpdCBpbiBhIG5ldyBwYWdlLiI6ICIiLAorICAgICAgICAgICAgIklnbm9yZSI6ICIiLAorICAgICAgICAgICAgIklnbm9yZSBhbGwiOiAiIiwKKyAgICAgICAgICAgICJJbmZvIjogIiIsCisgICAgICAgICAgICAiTGVhcm4iOiAiIiwKKyAgICAgICAgICAgICJObyBtaXNwZWxsZWQgd29yZHMgZm91bmQgd2l0aCB0aGUgc2VsZWN0ZWQgZGljdGlvbmFyeS4iOiAiIiwKKyAgICAgICAgICAgICJPcmlnaW5hbCB3b3JkIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byBvcGVuIHRoaXMgbGluayI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSB3YWl0LiAgQ2FsbGluZyBzcGVsbCBjaGVja2VyLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSB3YWl0OiBjaGFuZ2luZyBkaWN0aW9uYXJ5IHRvIjogIiIsCisgICAgICAgICAgICAicGxpeiB3ZWl0IDstKSI6ICIiLAorICAgICAgICAgICAgIlJlLWNoZWNrIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UgYWxsIjogIiIsCisgICAgICAgICAgICAiUmV2ZXJ0IjogIiIsCisgICAgICAgICAgICAiU3BlbGwgQ2hlY2tlciI6ICIiLAorICAgICAgICAgICAgIlNwZWxsLWNoZWNrIjogIiIsCisgICAgICAgICAgICAiU3VnZ2VzdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgZHJvcCBjaGFuZ2VzIGFuZCBxdWl0IHNwZWxsIGNoZWNrZXIuICBQbGVhc2UgY29uZmlybS4iOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIHdpdGgiOiAiPDxGaW5kUmVwbGFjZT4+IgorICAgICAgICB9LAorICAgICAgICAiVGVtcGxhdGUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBURU1QTEFURSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJJbnNlcnQgdGVtcGxhdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiVW5Gb3JtYXQiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBVTkZPUk1BVCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbGwiOiAiIiwKKyAgICAgICAgICAgICJBbGwgSFRNTDoiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBBcmVhIjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgb3B0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdHRpbmc6IjogIiIsCisgICAgICAgICAgICAiUGFnZSBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IHdoaWNoIHR5cGVzIG9mIGZvcm1hdHRpbmcgeW91IHdvdWxkIGxpa2UgdG8gcmVtb3ZlLiI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdGlvbiI6ICIiCisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvc3IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC9zci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTViZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvc3IuanMKQEAgLTAsMCArMSwxNTc3IEBACisvLyBYaW5oYSBMYW5ndWFnZSBDb21iaW5lZCBUcmFuc2xhdGlvbiBGaWxlCisvLworLy8gTEFORzogInNyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU5TVFJVQ1RJT05TIFRPIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBZb3VyIHRyYW5zbGF0aW9uIG11c3QgYmUgaW4gVVRGLTggQ2hhcmFjdGVyIEVuY29kaW5nLgorLy8KKy8vIFRoaXMgaXMgYSBKU09OIGVuY29kZWQgZmlsZSAocGx1cyBjb21tZW50cyksIHN0cmluZ3Mgc2hvdWxkIGJlIGRvdWJsZS1xdW90ZQorLy8gb25seSwgZG8gbm90IHVzZSBzaW5nbGUgcXVvdGVzIHRvIHN1cnJvdW5kIHN0cmluZ3MgLSAiaGVsbG8iLCBub3QgJ2hlbGxvJworLy8gZG8gbm90IGhhdmUgYSB0cmFpbGluZyBjb21tYSBhZnRlciB0aGUgbGFzdCBlbnRyeSBpbiBhIHNlY3Rpb24uCisvLworLy8gT25seSBmdWxsIGxpbmUgY29tbWVudHMgYXJlIGFsbG93ZWQgKHRoYXQgYSBjb21tZW50cyBvY2N1cHkgZW50aXJlIGxpbmVzKS4KKy8vCisvLyBTZWFyY2ggZm9yIHRoZSBfX05FV19UUkFOU0xBVElPTlNfXyBzZWN0aW9uIGJlbG93LCB0aGlzIGlzIHdoZXJlIHlvdSB3aWxsCisvLyB3YW50IHRvIGZvY3VzLCB0aGlzIHNlY3Rpb24gaW5jbHVkZXMgdGhpbmdzIHRoYXQgZG8gbm90IHByZXNlbnRseSBoYXZlIGEgCisvLyB0cmFuc2xhdGlvbiBvciBmb3Igd2hpY2ggdGhlIHRyYW5zbGF0aW9uIG5lZWRzIHRvIGJlIGNoZWNrZWQgZm9yIGFjY3VyYWN5LgorLy8KKy8vIEluIHRoZSBOZXcgVHJhbnNsYXRpb25zIHNlY3Rpb24gYSB0cmFuc2xhdGlvbiBzdHJpbmcgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcKKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIiIKKy8vICAgICBUaGlzIG1lYW5zIGl0IGlzIG5vdCB0cmFuc2xhdGVkIHlldCwgYWRkIHlvdXIgdHJhbnNsYXRpb24uLi4KKy8vICAgICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiS2xpbmdvbiBTdHJpbmcgSGVyZSIKKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIlRyYW5zbGF0ZWQgU3RyaW5nIEhlcmUiCisvLyAgICAgVGhpcyBtZWFucyB0aGF0IGFuIGV4aXN0aW5nIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZywgaW4gc29tZSBvdGhlcgorLy8gICAgIHNlY3Rpb24gaGFzIGJlZW4gZm91bmQsIGFuZCB1c2VkLiAgQ2hlY2sgdGhhdCBpdCBpcyBhcHByb3ByaXRlIGZvciB0aGlzCisvLyAgICAgc2VjdGlvbiBhbmQgaWYgaXQgaXMsIHRoYXQncyBmaW5lIGxlYXZlIGl0IGFzIGlzLCBvdGhlcndpc2UgY2hhbmdlIGFzCisvLyAgICAgYXBwcm9wcmlhdGUuCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICI8PEFub3RoZXJTZWN0aW9uPj4iCisvLyAgICAgVGhpcyBtZWFucyB1c2UgdGhlIHNhbWUgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nIGFzIDw8QW5vdGhlclNlY3Rpb24+PgorLy8gICAgIHRoaXMgc2F2ZXMgeW91IHJlLXRyYW5sYXRpbmcgc3RyaW5ncy4gIElmIHRoZSBDb250ZXh0IG9mIHRoaXMgc2VjdGlvbgorLy8gICAgIGFuZCB0aGUgY29udGV4dCBvZiBBbm90aGVyU2VjdGlvbiBzZWVtIHRoZSBzYW1lLCB0aGF0J3MgZmluZSBsZWF2ZSBpdAorLy8gICAgIHVzaW5nIHRoYXQgdHJhbnNsYXRpb24sIGJ1dCBpZiB0aGlzIHNlY3Rpb24gbmVlZHMgYSBkaWZmZXJlbnQgdHJhbnNsYXRpb24sIAorLy8gICAgIHlvdSBjYW4gcHJvdmlkZSBpdCBieSByZXBsYWNpbmcgdGhlIGxpbmsgKDw8QW5vdGhlclNlY3Rpb24+Pikgd2l0aCB0aGF0CisvLyAgICAgbmV3IHRyYW5zbGF0aW9uLiAgRm9yIGV4YW1wbGUgLSBhICJUYWJsZSIgaW4gc2F5ICJEYXRhUGx1Z2luIiBpcyAKKy8vICAgICBwZXJoYXBzIHRyYW5zbGF0ZWQgZGlmZmVyZW50bHkgdG8gIlRhYmxlIiBpbiAiRnVybml0dXJlUGx1Z2luIi4KKy8vCisvLyBURVNUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IHBsYWNlIHlvdXIgdHJhbnNsYXRpb24gZmlsZSBvbiB5b3VyIHdlYnNlcnZlciBzb21ld2hlcmUgZm9yIGV4YW1wbGUKKy8vCisvLyAgIC94aW5oYS9sYW5nL21lcmdlZC9zci5qcworLy8KKy8vIGFuZCB0aGVuIHRlbGwgWGluaGEgd2hlcmUgdG8gZ2V0IGl0IChiZWZvcmUgbG9hZGluZyBYaW5oYUNvcmUuanMpIGJ5IAorLy8KKy8vICBfZWRpdG9yX2xhbmcgICAgICAgICAgICAgID0gJ3NyJzsKKy8vICBfZWRpdG9yX2xhbmdfbWVyZ2VkX2ZpbGUgID0gJy94aW5oYS9sYW5nL21lcmdlZC9zci5qcyc7CisvLworLy8gWGluaGEgd2lsbCBsb2FkIHlvdXIgbmV3IGxhbmd1YWdlIGRlZmluaXRpb24uCisvLworLy8gU1VCTUlUVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBjcmVhdGUgYSBUaWNrZXQgb24gdGhlIFhpbmhhIHdlYnNpdGUgYW5kIGF0dGFjaCB5b3VyIHRyYW5zbGF0aW9uIAorLy8gZmlsZS4KKy8vCisvLyBUaGUgWGluaGEgZGV2ZWxvcGVycyB3aWxsIHRha2UgeW91ciBmaWxlIGFuZCB1c2UgdGhlIAorLy8gICAgIGNvbnRyaWIvbGNfc3BsaXRfbWVyZ2VkX2ZpbGUucGhwCisvLyBzY3JpcHQgdG8gbG9hZCBpdCBpbnRvIHRoZSBYaW5oYSBkaXN0cmlidXRpb24uCisKK3sKKyAgICAiQWJicmV2aWF0aW9uIjogeworICAgICAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkFib3V0Qm94IjogeworICAgICAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAi0J4g0L7QstC+0Lwg0LXQtNC40YLQvtGA0YMiCisgICAgfSwKKyAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IgorICAgIH0sCisgICAgIkNvbG9yUGlja2VyIjogeworICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiQ29udGV4dE1lbnUiOiB7CisgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICLQoNCw0LLQvdCw0ZrQtSDQv9C+INGB0LjQvNC10YLRgNCw0LvQuCIsCisgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAi0J/Rg9C90L4g0YDQsNCy0L3QsNGa0LUiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogItCg0LDQstC90LDRmtC1INGD0LvQtdCy0L4iLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICLQoNCw0LLQvdCw0ZrQtSDRg9C00LXRgdC90L4iCisgICAgfSwKKyAgICAiQ3JlYXRlTGluayI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAi0LTQvtC00LDRmC/Qv9GA0L7QvNC10L3QuCDQu9C40L3QuiIsCisgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogItCd0L7QstC+0Lwg0L/RgNC+0LfQvtGA0YMgKF9ibGFuaykiLAorICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICLQutC+0YDQuNGB0YLQuCDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QviIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPdGhlciI6ICLQlNGA0YPQs9C+IiwKKyAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICLQmNGB0YLQuCDRhNGA0LXRmNC8IChfc2VsZikiLAorICAgICAgICAiVGFyZ2V0OiI6ICLQntGC0LLQvtGA0Lgg0YM6IiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAi0J3QsNC30LjQsiAodG9vbHRpcCk6IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAi0JPQu9Cw0LLQvdC4INGE0YDQtdGY0LwgKF90b3ApIiwKKyAgICAgICAgIlVSTDoiOiAi0KPQoNCbOiIKKyAgICB9LAorICAgICJFZGl0VGFnIjogeworICAgICAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkVxdWF0aW9uIjogeworICAgICAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlByZXZpZXciOiAi0J/RgNC10LPQu9C10LQiCisgICAgfSwKKyAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICLQkNC/0YHQvtC70YPRgtC90L4g0LTQvdC+IiwKKyAgICAgICAgIkFic21pZGRsZSI6ICLQkNC/0YHQvtC70YPRgtC90LAg0YHRgNC10LTQuNC90LAiLAorICAgICAgICAiQmFzZWxpbmUiOiAi0JTQvtGa0LAg0LvQuNC90LjRmNCwIiwKKyAgICAgICAgIkJvdHRvbSI6ICLQlNC90L4iLAorICAgICAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IiwKKyAgICAgICAgIkxlZnQiOiAi0JvQtdCy0L4iLAorICAgICAgICAiTWlkZGxlIjogItCh0YDQtdC00LjQvdCwIiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAi0J3QvtCy0L7QvCDQv9GA0L7Qt9C+0YDRgyAoX2JsYW5rKSIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogItC60L7RgNC40YHRgtC4INC/0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdC+IiwKKyAgICAgICAgIk5vdCBzZXQiOiAi0J3QuNGY0LUg0L/QvtGB0YLQsNCy0ZnQtdC90L4iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICLQn9C+0YHRgtCw0LLRmdCw0ZrQtSDQvtCy0LUg0YHQu9C40LrQtSIsCisgICAgICAgICJQcmV2aWV3IjogItCf0YDQtdCz0LvQtdC0IiwKKyAgICAgICAgIlJpZ2h0IjogItCU0LXRgdC90L4iLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogItCY0YHRgtC4INGE0YDQtdGY0LwgKF9zZWxmKSIsCisgICAgICAgICJUZXh0dG9wIjogItCS0YDRhSDRgtC10LrRgdGC0LAiLAorICAgICAgICAiVGl0bGUgKHRvb2x0aXApIjogItCd0LDQt9C40LIgKHRvb2x0aXApOiIsCisgICAgICAgICJUb3AiOiAi0JLRgNGFIiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAi0JPQu9Cw0LLQvdC4INGE0YDQtdGY0LwgKF90b3ApIiwKKyAgICAgICAgIldpZHRoIjogItCo0LjRgNC40L3QsCIsCisgICAgICAgICJXaWR0aDoiOiAi0KjQuNGA0LjQvdCwIgorICAgIH0sCisgICAgIkZvcm1zIjogeworICAgICAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAi0KPQoNCbINGB0LvQuNC60LUiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUm93czoiOiAi0KDQtdC00L7QstC4IgorICAgIH0sCisgICAgIkZ1bGxQYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAiQWxpZ25tZW50OiI6ICLQoNCw0LLQvdCw0ZrQtSIsCisgICAgICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogItCl0L7RgNC40LfQvtC90YLQsNC70L3QsCDQu9C40L3QuNGY0LAiLAorICAgICAgICAiTGF5b3V0IjogItCf0YDQtdC70L7QvCIsCisgICAgICAgICJMZWZ0IjogItCb0LXQstC+IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlJpZ2h0IjogItCU0LXRgdC90L4iLAorICAgICAgICAiV2lkdGg6IjogItCo0LjRgNC40L3QsCIKKyAgICB9LAorICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICJBYnNib3R0b20iOiAi0JDQv9GB0L7Qu9GD0YLQvdC+INC00L3QviIsCisgICAgICAgICJBYnNtaWRkbGUiOiAi0JDQv9GB0L7Qu9GD0YLQvdCwINGB0YDQtdC00LjQvdCwIiwKKyAgICAgICAgIkJhc2VsaW5lIjogItCU0L7RmtCwINC70LjQvdC40ZjQsCIsCisgICAgICAgICJCb3R0b20iOiAi0JTQvdC+IiwKKyAgICAgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAi0KPQsdCw0YbQuCDRgdC70LjQutGDIiwKKyAgICAgICAgIkxlZnQiOiAi0JvQtdCy0L4iLAorICAgICAgICAiTWlkZGxlIjogItCh0YDQtdC00LjQvdCwIiwKKyAgICAgICAgIk5vdCBzZXQiOiAi0J3QuNGY0LUg0L/QvtGB0YLQsNCy0ZnQtdC90L4iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICLQn9C+0YHRgtCw0LLRmdCw0ZrQtSDQvtCy0LUg0YHQu9C40LrQtSIsCisgICAgICAgICJSaWdodCI6ICLQlNC10YHQvdC+IiwKKyAgICAgICAgIlRleHR0b3AiOiAi0JLRgNGFINGC0LXQutGB0YLQsCIsCisgICAgICAgICJUb3AiOiAi0JLRgNGFIiwKKyAgICAgICAgIldpZHRoOiI6ICLQqNC40YDQuNC90LAiCisgICAgfSwKKyAgICAiSW5saW5lU3R5bGVyIjogeworICAgICAgICAiQmFzZWxpbmUiOiAi0JTQvtGa0LAg0LvQuNC90LjRmNCwIiwKKyAgICAgICAgIkJvdHRvbSI6ICLQlNC90L4iLAorICAgICAgICAiSW1hZ2UgVVJMIjogItCj0KDQmyDRgdC70LjQutC1IiwKKyAgICAgICAgIkxheW91dCI6ICLQn9GA0LXQu9C+0LwiLAorICAgICAgICAiTGVmdCI6ICLQm9C10LLQviIsCisgICAgICAgICJNaWRkbGUiOiAi0KHRgNC10LTQuNC90LAiLAorICAgICAgICAiUmlnaHQiOiAi0JTQtdGB0L3QviIsCisgICAgICAgICJUb3AiOiAi0JLRgNGFIiwKKyAgICAgICAgIldpZHRoIjogItCo0LjRgNC40L3QsCIKKyAgICB9LAorICAgICJJbnNlcnRBbmNob3IiOiB7CisgICAgICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICJBYnNib3R0b20iOiAi0JDQv9GB0L7Qu9GD0YLQvdC+INC00L3QviIsCisgICAgICAgICJBYnNtaWRkbGUiOiAi0JDQv9GB0L7Qu9GD0YLQvdCwINGB0YDQtdC00LjQvdCwIiwKKyAgICAgICAgIkFsaWdubWVudDoiOiAi0KDQsNCy0L3QsNGa0LUiLAorICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogItCw0LvRgtC10YDQvdCw0YLQuNCy0L3QuCDRgtC10LrRgdGCIiwKKyAgICAgICAgIkJhc2VsaW5lIjogItCU0L7RmtCwINC70LjQvdC40ZjQsCIsCisgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICLQlNC10LHRmdC40L3QsCDQvtC60LLQuNGA0LAiLAorICAgICAgICAiQm90dG9tIjogItCU0L3QviIsCisgICAgICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogItCj0L3QtdGB0LjRgtC1INCj0KDQmyDRgdC70LjQutC1INC+0LLQtNC1IiwKKyAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogItCX0LAg0L/RgNC10YLRgNCw0LbQuNCy0LDRh9C1INC60L7RmNC4INC90LUg0L/QvtC00YDQttCw0LLQsNGY0YMg0YHQu9C40LrQtSIsCisgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAi0KXQvtGA0YLQuNC30L7QvdGC0LDQu9C90L4g0L7QtNGB0YLQvtGY0LDRmtC1IiwKKyAgICAgICAgIkhvcml6b250YWw6IjogItCf0L4g0YXQvtGA0LjQt9C+0L3RgtCw0LvQuCIsCisgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICLQn9GA0LXQs9C70LXQtCDRgdC70LjQutC1IiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAi0KPQoNCbINGB0LvQuNC60LUiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogItCj0LHQsNGG0Lgg0YHQu9C40LrRgyIsCisgICAgICAgICJMYXlvdXQiOiAi0J/RgNC10LvQvtC8IiwKKyAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAi0J7RgdGC0LDQstC4INC/0YDQsNC30L3QviDQutCw0LQg0L3QtdC80LAg0L7QutCy0LjRgNCwIiwKKyAgICAgICAgIkxlZnQiOiAi0JvQtdCy0L4iLAorICAgICAgICAiTWlkZGxlIjogItCh0YDQtdC00LjQvdCwIiwKKyAgICAgICAgIk5vdCBzZXQiOiAi0J3QuNGY0LUg0L/QvtGB0YLQsNCy0ZnQtdC90L4iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICLQn9C+0YHRgtCw0LLRmdCw0ZrQtSDQvtCy0LUg0YHQu9C40LrQtSIsCisgICAgICAgICJQcmV2aWV3IjogItCf0YDQtdCz0LvQtdC0IiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICLQn9GA0LXQs9C70LXQtNCw0Zgg0YHQu9C40LrRgyDRgyDQvdC+0LLQvtC8INC/0YDQvtC30L7RgNGDIiwKKyAgICAgICAgIlJpZ2h0IjogItCU0LXRgdC90L4iLAorICAgICAgICAiU3BhY2luZyI6ICLQoNCw0LfQvNCw0LoiLAorICAgICAgICAiVGV4dHRvcCI6ICLQktGA0YUg0YLQtdC60YHRgtCwIiwKKyAgICAgICAgIlRvcCI6ICLQktGA0YUiLAorICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICLQktC10YDRgtC40LrQsNC70L3QviDQvtC00YHRgtC+0ZjQsNGa0LUiLAorICAgICAgICAiVmVydGljYWw6IjogItCf0L4g0LLQtdGA0YLQuNC60LDQu9C4IgorICAgIH0sCisgICAgIkluc2VydE1hcnF1ZWUiOiB7CisgICAgICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiLAorICAgICAgICAiTGVmdCI6ICLQm9C10LLQviIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJSaWdodCI6ICLQlNC10YHQvdC+IiwKKyAgICAgICAgIldpZHRoOiI6ICLQqNC40YDQuNC90LAiCisgICAgfSwKKyAgICAiSW5zZXJ0Tm90ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIKKyAgICB9LAorICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAiQWJzYm90dG9tIjogItCQ0L/RgdC+0LvRg9GC0L3QviDQtNC90L4iLAorICAgICAgICAiQWJzbWlkZGxlIjogItCQ0L/RgdC+0LvRg9GC0L3QsCDRgdGA0LXQtNC40L3QsCIsCisgICAgICAgICJBbGlnbm1lbnQ6IjogItCg0LDQstC90LDRmtC1IiwKKyAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICLQsNC70YLQtdGA0L3QsNGC0LjQstC90Lgg0YLQtdC60YHRgiIsCisgICAgICAgICJCYXNlbGluZSI6ICLQlNC+0ZrQsCDQu9C40L3QuNGY0LAiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAi0JTQtdCx0ZnQuNC90LAg0L7QutCy0LjRgNCwIiwKKyAgICAgICAgIkJvdHRvbSI6ICLQlNC90L4iLAorICAgICAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IiwKKyAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICLQo9C90LXRgdC40YLQtSDQo9Cg0Jsg0YHQu9C40LrQtSDQvtCy0LTQtSIsCisgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICLQl9CwINC/0YDQtdGC0YDQsNC20LjQstCw0YfQtSDQutC+0ZjQuCDQvdC1INC/0L7QtNGA0LbQsNCy0LDRmNGDINGB0LvQuNC60LUiLAorICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogItCl0L7RgNGC0LjQt9C+0L3RgtCw0LvQvdC+INC+0LTRgdGC0L7RmNCw0ZrQtSIsCisgICAgICAgICJIb3Jpem9udGFsOiI6ICLQn9C+INGF0L7RgNC40LfQvtC90YLQsNC70LgiLAorICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAi0J/RgNC10LPQu9C10LQg0YHQu9C40LrQtSIsCisgICAgICAgICJJbWFnZSBVUkw6IjogItCj0KDQmyDRgdC70LjQutC1IiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICLQo9Cx0LDRhtC4INGB0LvQuNC60YMiLAorICAgICAgICAiTGF5b3V0IjogItCf0YDQtdC70L7QvCIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogItCe0YHRgtCw0LLQuCDQv9GA0LDQt9C90L4g0LrQsNC0INC90LXQvNCwINC+0LrQstC40YDQsCIsCisgICAgICAgICJMZWZ0IjogItCb0LXQstC+IiwKKyAgICAgICAgIk1pZGRsZSI6ICLQodGA0LXQtNC40L3QsCIsCisgICAgICAgICJOb3Qgc2V0IjogItCd0LjRmNC1INC/0L7RgdGC0LDQstGZ0LXQvdC+IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAi0J/QvtGB0YLQsNCy0ZnQsNGa0LUg0L7QstC1INGB0LvQuNC60LUiLAorICAgICAgICAiUHJldmlldyI6ICLQn9GA0LXQs9C70LXQtCIsCisgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAi0J/RgNC10LPQu9C10LTQsNGYINGB0LvQuNC60YMg0YMg0L3QvtCy0L7QvCDQv9GA0L7Qt9C+0YDRgyIsCisgICAgICAgICJSaWdodCI6ICLQlNC10YHQvdC+IiwKKyAgICAgICAgIlNwYWNpbmciOiAi0KDQsNC30LzQsNC6IiwKKyAgICAgICAgIlRleHR0b3AiOiAi0JLRgNGFINGC0LXQutGB0YLQsCIsCisgICAgICAgICJUb3AiOiAi0JLRgNGFIiwKKyAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAi0JLQtdGA0YLQuNC60LDQu9C90L4g0L7QtNGB0YLQvtGY0LDRmtC1IiwKKyAgICAgICAgIlZlcnRpY2FsOiI6ICLQn9C+INCy0LXRgNGC0LjQutCw0LvQuCIsCisgICAgICAgICJXaWR0aDoiOiAi0KjQuNGA0LjQvdCwIgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiCisgICAgfSwKKyAgICAiSW5zZXJ0U25pcHBldDIiOiB7CisgICAgICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiCisgICAgfSwKKyAgICAiSW5zZXJ0VGFibGUiOiB7CisgICAgICAgICJBYnNib3R0b20iOiAi0JDQv9GB0L7Qu9GD0YLQvdC+INC00L3QviIsCisgICAgICAgICJBYnNtaWRkbGUiOiAi0JDQv9GB0L7Qu9GD0YLQvdCwINGB0YDQtdC00LjQvdCwIiwKKyAgICAgICAgIkFsaWdubWVudDoiOiAi0KDQsNCy0L3QsNGa0LUiLAorICAgICAgICAiQmFzZWxpbmUiOiAi0JTQvtGa0LAg0LvQuNC90LjRmNCwIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogItCU0LXQsdGZ0LjQvdCwINC+0LrQstC40YDQsCIsCisgICAgICAgICJCb3R0b20iOiAi0JTQvdC+IiwKKyAgICAgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIsCisgICAgICAgICJDZWxsIHBhZGRpbmc6IjogItCj0L3Rg9GC0YDQsNGI0ZrQsCDQvtC00YHRgtC+0ZjQsNGa0LAg0L7QtCDQuNCy0LjRhtCwINGb0LXQu9C40ZjQtSIsCisgICAgICAgICJDZWxsIHNwYWNpbmc6IjogItCg0LDQt9C80LDQuiDQuNC30LzQtdGS0YMg0ZvQtdC70LjRmNCwIiwKKyAgICAgICAgIkNvbHM6IjogItCa0L7Qu9C+0L3QtSIsCisgICAgICAgICJFbSI6ICLQldC8IiwKKyAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAi0KTQuNC60YHQuNGA0LDQvdCwINGI0LjRgNC40L3QsCDQutC+0LvQvtC90LUiLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogItCj0LHQsNGG0Lgg0YLQsNCx0LXQu9GDIiwKKyAgICAgICAgIkxheW91dCI6ICLQn9GA0LXQu9C+0LwiLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICLQntGB0YLQsNCy0Lgg0L/RgNCw0LfQvdC+INC60LDQtCDQvdC10LzQsCDQvtC60LLQuNGA0LAiLAorICAgICAgICAiTGVmdCI6ICLQm9C10LLQviIsCisgICAgICAgICJNaWRkbGUiOiAi0KHRgNC10LTQuNC90LAiLAorICAgICAgICAiTm90IHNldCI6ICLQndC40ZjQtSDQv9C+0YHRgtCw0LLRmdC10L3QviIsCisgICAgICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICLQkdGA0L7RmCDQutC+0LvQvtC90LAiLAorICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAi0JHRgNC+0Zgg0YDQtdC00L7QstCwIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBlcmNlbnQiOiAi0J/RgNC+0YbQtdC90LDRgtCwIiwKKyAgICAgICAgIlBpeGVscyI6ICLQn9C40LrRgdC10LvQsCIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogItCf0L7RgdGC0LDQstGZ0LDRmtC1INC+0LLQtSDRgtCw0LHQtdC70LUiLAorICAgICAgICAiUmlnaHQiOiAi0JTQtdGB0L3QviIsCisgICAgICAgICJSb3dzOiI6ICLQoNC10LTQvtCy0LgiLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICLQoNCw0LfQvNCw0Log0LjQt9C80LXRktGDINC90LDRgdC/0YDQsNC80L3QuNGFINGb0LXQu9C40ZjQsCIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogItCg0LDRgdGC0L7RmNCw0ZrQtSDQuNC30LzQtdGS0YMg0YHQsNC00YDQttCw0ZjQsCDRgyDRm9C10LvQuNGY0Lgg0Lgg0ZrQtdC90L7QsyDQvtC60LLQuNGA0LAiLAorICAgICAgICAiU3BhY2luZyI6ICLQoNCw0LfQvNCw0LoiLAorICAgICAgICAiVGV4dHRvcCI6ICLQktGA0YUg0YLQtdC60YHRgtCwIiwKKyAgICAgICAgIlRvcCI6ICLQktGA0YUiLAorICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogItCo0LjRgNC40L3QsCDRgtCw0LHQtdC70LUiLAorICAgICAgICAiV2lkdGggdW5pdCI6ICLQiNC10LTQuNC90LjRhtCwINGI0LjRgNC40L3QtSIsCisgICAgICAgICJXaWR0aDoiOiAi0KjQuNGA0LjQvdCwIgorICAgIH0sCisgICAgIkxpbmtlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAi0LTQvtC00LDRmC/Qv9GA0L7QvNC10L3QuCDQu9C40L3QuiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJUYXJnZXQ6IjogItCe0YLQstC+0YDQuCDRgzoiLAorICAgICAgICAiVVJMOiI6ICLQo9Cg0Js6IgorICAgIH0sCisgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiLAorICAgICAgICAiSW1hZ2UgUHJldmlldyI6ICLQn9GA0LXQs9C70LXQtCDRgdC70LjQutC1IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlByZXZpZXciOiAi0J/RgNC10LPQu9C10LQiLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogItCf0YDQtdCz0LvQtdC00LDRmCDRgdC70LjQutGDINGDINC90L7QstC+0Lwg0L/RgNC+0LfQvtGA0YMiCisgICAgfSwKKyAgICAiT3BlcmEiOiB7CisgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogItCU0YPQs9C80LUgJ9C30LDQu9C10L/QuCcg0L3QtSDRgNCw0LTQuCDRgyDQv9GA0LXRgtGA0LDQttC40LLQsNGH0LjQvNCwINC/0L7RgNC+0LTQuNGG0LUgTW96aWxsYSAo0LjQtyDRgNCw0LfQu9C+0LPQsCDRgdC40LPRg9GA0L3QvtGB0YLQuCkuINCf0YDQuNGC0LjRgdC90LjRgtC1IENUUkwtViDQvdCwINGC0LDRgdGC0LDRgtGD0YDQuCDQtNCwINC00LjRgNC10LrRgtC90L4g0LfQsNC70LXQv9C40YLQtS4iCisgICAgfSwKKyAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIKKyAgICB9LAorICAgICJQYXN0ZVRleHQiOiB7CisgICAgICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogItCj0LHQsNGG0Lgg0YHQu9C40LrRgyIKKyAgICB9LAorICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIKKyAgICB9LAorICAgICJTZXRJZCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiU3VwZXJDbGVhbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUm93cyI6ICLQoNC10LTQvtCy0LgiLAorICAgICAgICAiU3BhY2luZyI6ICLQoNCw0LfQvNCw0LoiCisgICAgfSwKKyAgICAiVGVtcGxhdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiCisgICAgfSwKKyAgICAiVW5Gb3JtYXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiWGluaGEiOiB7CisgICAgICAgICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiYjODIxMjsgRm9ybWF0ICYjODIxMjsiLAorICAgICAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAi0J4g0L7QstC+0Lwg0LXQtNC40YLQvtGA0YMiLAorICAgICAgICAiQWRkcmVzcyI6ICLQsNC00YDQtdGB0LAiLAorICAgICAgICAiQmFja2dyb3VuZCBDb2xvciI6ICLQkdC+0ZjQsCDQv9C+0LfQsNC00LjQvdC1IiwKKyAgICAgICAgIkJvbGQiOiAi0JzQsNGB0L3QviIsCisgICAgICAgICJCdWxsZXRlZCBMaXN0IjogItCb0LjRgdGC0LAg0YHQsCDRgdC40LzQsdC+0LvQuNC80LAiLAorICAgICAgICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAi0J7QsdGA0LjRiNC4INC/0YDQuNC80LXRmtC10L3QtSDQvtGB0L7QsdC40L3QtSDRhNC+0L3RgtCwIiwKKyAgICAgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAi0J7QsdGA0LjRiNC4IE1TT2ZmaWNlINGC0LDQs9C+0LLQtSIsCisgICAgICAgICJDb3B5IHNlbGVjdGlvbiI6ICLQmtC+0L/QuNGA0LDRmCDQuNC30LDQsdGA0LDQvdC+IiwKKyAgICAgICAgIkN1cnJlbnQgc3R5bGUiOiAi0JLQsNC20LXRm9C4INGB0YLQuNC7IiwKKyAgICAgICAgIkN1dCBzZWxlY3Rpb24iOiAi0JjRgdC10YbQuCDQuNC30LDQsdGA0LDQvdC+IiwKKyAgICAgICAgIkRlY3JlYXNlIEluZGVudCI6ICLQodC80LDRmtC4INGD0LLQu9Cw0YfQtdGa0LUiLAorICAgICAgICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAi0J/RgNCw0LLQsNGGINGBINC70LXQstCwINC90LAg0LTQtdGB0L3QviIsCisgICAgICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICLQn9GA0LDQstCw0YYg0YEg0LTQtdGB0L3QsCDQvdCwINC70LXQstC+IiwKKyAgICAgICAgIkZvbnQgQ29sb3IiOiAi0JHQvtGY0LAg0YHQu9C+0LLQsCIsCisgICAgICAgICJGb3JtYXR0ZWQiOiAi0YTQvtGA0LzQsNGC0LjRgNCw0L0iLAorICAgICAgICAiSGVhZGluZyAxIjogItCX0LDQs9C70LDQstGZ0LUgMSIsCisgICAgICAgICJIZWFkaW5nIDIiOiAi0JfQsNCz0LvQsNCy0ZnQtSAyIiwKKyAgICAgICAgIkhlYWRpbmcgMyI6ICLQl9Cw0LPQu9Cw0LLRmdC1IDMiLAorICAgICAgICAiSGVhZGluZyA0IjogItCX0LDQs9C70LDQstGZ0LUgNCIsCisgICAgICAgICJIZWFkaW5nIDUiOiAi0JfQsNCz0LvQsNCy0ZnQtSA1IiwKKyAgICAgICAgIkhlYWRpbmcgNiI6ICLQl9Cw0LPQu9Cw0LLRmdC1IDYiLAorICAgICAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAi0J/QvtC80L7RmyDQv9GA0Lgg0LrQvtGA0LjRiNGb0LXRmtGDINC10LTQuNGC0L7RgNCwIiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICLQpdC+0YDQuNC30L7QvdGC0LDQu9C90LAg0LvQuNC90LjRmNCwIiwKKyAgICAgICAgIkluY3JlYXNlIEluZGVudCI6ICLQn9C+0LLQtdGb0LDRmCDRg9Cy0LvQsNGH0LXRmtC1IiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICLQo9Cx0LDRhtC4INGC0LDQsdC10LvRgyIsCisgICAgICAgICJJbnNlcnQgV2ViIExpbmsiOiAi0LTQvtC00LDRmCDQstC10LEg0LvQuNC90LoiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICLQtNC+0LTQsNGYL9C/0YDQvtC80LXQvdC4INGB0LvQuNC60YMiLAorICAgICAgICAiSXRhbGljIjogItCa0YPRgNC30LjQsiIsCisgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICLQoNCw0LLQvdCw0ZrQtSDQv9C+INGB0LjQvNC10YLRgNCw0LvQuCIsCisgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAi0J/Rg9C90L4g0YDQsNCy0L3QsNGa0LUiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogItCg0LDQstC90LDRmtC1INGD0LvQtdCy0L4iLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICLQoNCw0LLQvdCw0ZrQtSDRg9C00LXRgdC90L4iLAorICAgICAgICAiTm9ybWFsIjogItC+0LHQuNGH0LDQvSIsCisgICAgICAgICJPcmRlcmVkIExpc3QiOiAi0JvQuNGB0YLQsCDRgdCwINGA0LXQtNC90LjQvCDQsdGA0L7RmNC10LLQuNC80LAiLAorICAgICAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAi0JfQsNC70LXQv9C4INC40Lcg0LrQu9C40L/QsdC+0YDQtNCwIiwKKyAgICAgICAgIlBhdGgiOiAi0J/Rg9GC0LDRmtCwIiwKKyAgICAgICAgIlByaW50IGRvY3VtZW50IjogItCo0YLQsNC80L/QsNGYINC00L7QutGD0LzQtdC90YIiLAorICAgICAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi0JLRgNCw0ZvQsCDQv9C+0YHQu9C10LTRmtGDINGA0LDQtNGa0YMiLAorICAgICAgICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAi0KPQutC70L7QvdC4INGE0L7RgNC80LDRgtC40YDQsNGa0LUiLAorICAgICAgICAiU2VsZWN0IENvbG9yIjogItCY0LfQsNCx0LXRgNC4INCx0L7RmNGDIiwKKyAgICAgICAgIlNlbGVjdCBhbGwiOiAi0JjQt9Cw0LHQtdGA0Lgg0YHQstC1IiwKKyAgICAgICAgIlNwbGl0IEJsb2NrIjogItCf0L7QtNC10LvQuCDQsdC70L7QuiIsCisgICAgICAgICJTdHJpa2V0aHJvdWdoIjogItCf0YDQtdGG0YDRgtCw0L3QviIsCisgICAgICAgICJTdWJzY3JpcHQiOiAi0JjQvdC00LXQutGBLdGC0LXQutGB0YIiLAorICAgICAgICAiU3VwZXJzY3JpcHQiOiAi0JXQutGB0L/QvtC90LXQvdGCLdGC0LXQutGB0YIiLAorICAgICAgICAiVG9nZ2xlIEJvcmRlcnMiOiAi0J/RgNC10LHQsNGG0Lgg0L7QutCy0LjRgNC90LUg0LvQuNC90LjRmNC1IiwKKyAgICAgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICLQn9GA0LXQsdCw0YbQuCDQvdCwINC/0YDQuNC60LDQtyDQpdCi0JzQmyDQutC+0LTQsCIsCisgICAgICAgICJVbmRlcmxpbmUiOiAi0J/QvtC00LLRg9GH0LXQvdC+IiwKKyAgICAgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogItCf0L7QvdC40YjRgtCw0LLQsCDQv9C+0YHQu9C10LTRmtGDINGA0LDQtNGa0YMiLAorICAgICAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogItCd0LDQu9Cw0LfQuNGC0LUg0YHQtSDRgyDQotCV0JrQodCiINGA0LXQttC40LzRgy4gINCa0L7RgNC40YHRgtC40YLQtSBbPD5dINC00YPQs9C80LUg0LfQsCDQv9C+0LLRgNCw0YLQsNC6INC90LAg0KjQktCi0JjQlCAoV1lTSVdZRykuIgorICAgIH0sCisgICAgIl9fTkVXX1RSQU5TTEFUSU9OU19fIjogeworICAgICAgICAiQWJicmV2aWF0aW9uIjogeworICAgICAgICAgICAgIkFiYnJldmlhdGlvbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICIiLAorICAgICAgICAgICAgIkV4cGFuc2lvbjoiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQWJvdXRCb3giOiB7CisgICAgICAgICAgICAiQ2xvc2UiOiAiPDxYaW5oYT4+IgorICAgICAgICB9LAorICAgICAgICAiQ2hhckNvdW50ZXIiOiB7CisgICAgICAgICAgICAiLi4uIGluIHByb2dyZXNzIjogIiIsCisgICAgICAgICAgICAiQ2hhcnMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIiIsCisgICAgICAgICAgICAiV29yZHMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2hhcmFjdGVyTWFwIjogeworICAgICAgICAgICAgIkluc2VydCBzcGVjaWFsIGNoYXJhY3RlciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDb2xvclBpY2tlciI6IHsKKyAgICAgICAgICAgICJDbGljayBhIGNvbG9yLi4uIjogIiIsCisgICAgICAgICAgICAiQ29sb3I6ICI6ICIiLAorICAgICAgICAgICAgIlNhbXBsZSI6ICIiLAorICAgICAgICAgICAgIldlYiBTYWZlOiAiOiAiIiwKKyAgICAgICAgICAgICJDbG9zZSI6ICI8PFhpbmhhPj4iCisgICAgICAgIH0sCisgICAgICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgICAgICJfRGVsZXRlIFJvdyI6ICIiLAorICAgICAgICAgICAgIl9JbWFnZSBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiX01vZGlmeSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1JlbW92ZSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1RhYmxlIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJDX2VsbCBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiQ2hlY19rIExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJDb3B5IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIGEgbGluayI6ICIiLAorICAgICAgICAgICAgIkN1cnJlbnQgVVJMIGlzIjogIiIsCisgICAgICAgICAgICAiQ3V0IjogIiIsCisgICAgICAgICAgICAiRGVfbGV0ZSBDb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgQ2VsbCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIiIsCisgICAgICAgICAgICAiSG93IGRpZCB5b3UgZ2V0IGhlcmU/IChQbGVhc2UgcmVwb3J0ISkiOiAiIiwKKyAgICAgICAgICAgICJJX25zZXJ0IFJvdyBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYWZ0ZXIgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJMaW5rIHBvaW50cyB0bzoiOiAiIiwKKyAgICAgICAgICAgICJNYWtlIGxpbl9rLi4uIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiUGFzdGUiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGVsZW1lbnQ6IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJSb193IFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBpbWFnZSBwcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIFJvdyBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlVubGluayB0aGUgY3VycmVudCBlbGVtZW50IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIiIsCisgICAgICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRlZmluaXRpb25MaXN0IjogeworICAgICAgICAgICAgImRlZmluaXRpb24gZGVzY3JpcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGxpc3QiOiAiIiwKKyAgICAgICAgICAgICJkZWZpbml0aW9uIHRlcm0iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRGlhbG9ncyI6IHsKKyAgICAgICAgICAgICJTb21lIFRleHQgSGVyZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEeW5hbWljQ1NTIjogeworICAgICAgICAgICAgIkNob29zZSBzdHlsZXNoZWV0IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCI6ICIiLAorICAgICAgICAgICAgIlVuZGVmaW5lZCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFZGl0VGFnIjogeworICAgICAgICAgICAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICIiLAorICAgICAgICAgICAgIkVkaXQgVGFnIEJ5IFBlZyI6ICIiLAorICAgICAgICAgICAgIlRhZyBFZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICAgICAiIT0iOiAiIiwKKyAgICAgICAgICAgICIhaW4iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7LSI6ICIiLAorICAgICAgICAgICAgIiZndDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSZndDsiOiAiIiwKKyAgICAgICAgICAgICImbHQ7eCZndDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYCFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgLmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAwYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDJgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgM2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA0YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA3YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDhgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGBlYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsmbmJzcDtgMWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YCt7Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2AtOlxcIGAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLXs6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YENgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGNvc2AiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgbG5gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHBpYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgc2luYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0YW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRpbWVzYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZxdW90O3RleHQmcXVvdDsiOiAiIiwKKyAgICAgICAgICAgICInK2Zvcm11bGErJyI6ICIiLAorICAgICAgICAgICAgIigobiksKGspKSI6ICIiLAorICAgICAgICAgICAgIih4KzEpLyh4LTEpIjogIiIsCisgICAgICAgICAgICAiKiI6ICIiLAorICAgICAgICAgICAgIioqIjogIiIsCisgICAgICAgICAgICAiKy0iOiAiIiwKKyAgICAgICAgICAgICItJmd0OyI6ICIiLAorICAgICAgICAgICAgIi0mbHQ7IjogIiIsCisgICAgICAgICAgICAiLToiOiAiIiwKKyAgICAgICAgICAgICItPSI6ICIiLAorICAgICAgICAgICAgIi8vIjogIiIsCisgICAgICAgICAgICAiL18iOiAiIiwKKyAgICAgICAgICAgICI6LiI6ICIiLAorICAgICAgICAgICAgIj0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiQCI6ICIiLAorICAgICAgICAgICAgIltbYSxiXSxbYyxkXV0iOiAiIiwKKyAgICAgICAgICAgICJcXFxcIjogIiIsCisgICAgICAgICAgICAiXFxuQ2xpY2sgaW4gdGhlIGJveCB0byB1c2UgeW91ciBrZXlib2FyZCBvciB1c2UgdGhlIGJ1dHRvbnNcXG4iOiAiIiwKKyAgICAgICAgICAgICJeXiI6ICIiLAorICAgICAgICAgICAgIl5eXiI6ICIiLAorICAgICAgICAgICAgIl9ffCI6ICIiLAorICAgICAgICAgICAgIl98XyI6ICIiLAorICAgICAgICAgICAgImAhPWAiOiAiIiwKKyAgICAgICAgICAgICJgIWluYCI6ICIiLAorICAgICAgICAgICAgImAmYW5kO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmNhcDtgIjogIiIsCisgICAgICAgICAgICAiYCZjdXA7YCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7LWAiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDt4Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJm9yO2AiOiAiIiwKKyAgICAgICAgICAgICJgJnF1b3Q7dGV4dCZxdW90O2AiOiAiIiwKKyAgICAgICAgICAgICJgKChuKSwoaykpYCI6ICIiLAorICAgICAgICAgICAgImAoeCsxKS8oeC0xKWAiOiAiIiwKKyAgICAgICAgICAgICJgKipgIjogIiIsCisgICAgICAgICAgICAiYCpgIjogIiIsCisgICAgICAgICAgICAiYCstYCI6ICIiLAorICAgICAgICAgICAgImAtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLSZsdDtgIjogIiIsCisgICAgICAgICAgICAiYC06YCI6ICIiLAorICAgICAgICAgICAgImAtPWAiOiAiIiwKKyAgICAgICAgICAgICJgLy9gIjogIiIsCisgICAgICAgICAgICAiYC9fYCI6ICIiLAorICAgICAgICAgICAgImA6LmAiOiAiIiwKKyAgICAgICAgICAgICJgPSZndDtgIjogIiIsCisgICAgICAgICAgICAiYEBgIjogIiIsCisgICAgICAgICAgICAiYFtbYSxiXSxbYyxkXV1gIjogIiIsCisgICAgICAgICAgICAiYFxcXFxgIjogIiIsCisgICAgICAgICAgICAiYF9ffGAiOiAiIiwKKyAgICAgICAgICAgICJgX3xfYCI6ICIiLAorICAgICAgICAgICAgImBBQWAiOiAiIiwKKyAgICAgICAgICAgICJgYWxlcGhgIjogIiIsCisgICAgICAgICAgICAiYGFscGhhYCI6ICIiLAorICAgICAgICAgICAgImBhbmRgIjogIiIsCisgICAgICAgICAgICAiYGJhcmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgQ0NgIjogIiIsCisgICAgICAgICAgICAiYGNjYWAiOiAiIiwKKyAgICAgICAgICAgICJgY2hpYCI6ICIiLAorICAgICAgICAgICAgImBkYXJyYCI6ICIiLAorICAgICAgICAgICAgImBkZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsYCI6ICIiLAorICAgICAgICAgICAgImBEZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRpYW1vbmRgIjogIiIsCisgICAgICAgICAgICAiYGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGR5L2R4YCI6ICIiLAorICAgICAgICAgICAgImBFRWAiOiAiIiwKKyAgICAgICAgICAgICJgZXBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgZXRhYCI6ICIiLAorICAgICAgICAgICAgImBmcmFgIjogIiIsCisgICAgICAgICAgICAiYEdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBnYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ3JhZGAiOiAiIiwKKyAgICAgICAgICAgICJgaGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaGF0YWAiOiAiIiwKKyAgICAgICAgICAgICJgaWZgIjogIiIsCisgICAgICAgICAgICAiYGluYCI6ICIiLAorICAgICAgICAgICAgImBpbnRgIjogIiIsCisgICAgICAgICAgICAiYGlvdGFgIjogIiIsCisgICAgICAgICAgICAiYGthcHBhYCI6ICIiLAorICAgICAgICAgICAgImBsYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYExhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGltXyh4LSZndDtvbylgIjogIiIsCisgICAgICAgICAgICAiYGxvZ2AiOiAiIiwKKyAgICAgICAgICAgICJgbXVgIjogIiIsCisgICAgICAgICAgICAiYE5OYCI6ICIiLAorICAgICAgICAgICAgImBubmAiOiAiIiwKKyAgICAgICAgICAgICJgbm90YCI6ICIiLAorICAgICAgICAgICAgImBudWAiOiAiIiwKKyAgICAgICAgICAgICJgbytgIjogIiIsCisgICAgICAgICAgICAiYG8uYCI6ICIiLAorICAgICAgICAgICAgImBPL2AiOiAiIiwKKyAgICAgICAgICAgICJgb2ludGAiOiAiIiwKKyAgICAgICAgICAgICJgb21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYE9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBvb2AiOiAiIiwKKyAgICAgICAgICAgICJgb3JgIjogIiIsCisgICAgICAgICAgICAiYG94YCI6ICIiLAorICAgICAgICAgICAgImBQaGlgIjogIiIsCisgICAgICAgICAgICAiYHBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGlgIjogIiIsCisgICAgICAgICAgICAiYHBpYCI6ICIiLAorICAgICAgICAgICAgImBwcm9kYCI6ICIiLAorICAgICAgICAgICAgImBwcm9wYCI6ICIiLAorICAgICAgICAgICAgImBQc2lgIjogIiIsCisgICAgICAgICAgICAiYHBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgUVFgIjogIiIsCisgICAgICAgICAgICAiYHF1YWRgIjogIiIsCisgICAgICAgICAgICAiYHJBcnJgIjogIiIsCisgICAgICAgICAgICAiYHJob2AiOiAiIiwKKyAgICAgICAgICAgICJgcm9vdChuKSh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgUlJgIjogIiIsCisgICAgICAgICAgICAiYHNmYWAiOiAiIiwKKyAgICAgICAgICAgICJgc2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYFNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzcXJ0KHgpYCI6ICIiLAorICAgICAgICAgICAgImBzcXVhcmVgIjogIiIsCisgICAgICAgICAgICAiYHN0YWNrcmVsKC0mZ3Q7KSgrKWAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViYCI6ICIiLAorICAgICAgICAgICAgImBzdWJlYCI6ICIiLAorICAgICAgICAgICAgImBzdW1gIjogIiIsCisgICAgICAgICAgICAiYHN1cGAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwZWAiOiAiIiwKKyAgICAgICAgICAgICJgdGF1YCI6ICIiLAorICAgICAgICAgICAgImBUaGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdGhldGFgIjogIiIsCisgICAgICAgICAgICAiYFRUYCI6ICIiLAorICAgICAgICAgICAgImB0dGFgIjogIiIsCisgICAgICAgICAgICAiYHVhcnJgIjogIiIsCisgICAgICAgICAgICAiYHVsYWAiOiAiIiwKKyAgICAgICAgICAgICJgdXBzaWxvbmAiOiAiIiwKKyAgICAgICAgICAgICJgdXVgIjogIiIsCisgICAgICAgICAgICAiYHZlY2FgIjogIiIsCisgICAgICAgICAgICAiYHZ2YCI6ICIiLAorICAgICAgICAgICAgImB4XyhtbilgIjogIiIsCisgICAgICAgICAgICAiYFhpYCI6ICIiLAorICAgICAgICAgICAgImB4aWAiOiAiIiwKKyAgICAgICAgICAgICJgeHhgIjogIiIsCisgICAgICAgICAgICAiYHpldGFgIjogIiIsCisgICAgICAgICAgICAiYFpaYCI6ICIiLAorICAgICAgICAgICAgImB8LSZndDtgIjogIiIsCisgICAgICAgICAgICAiYHwtLWAiOiAiIiwKKyAgICAgICAgICAgICJgfD09YCI6ICIiLAorICAgICAgICAgICAgImB8X19gIjogIiIsCisgICAgICAgICAgICAiYHx+YCI6ICIiLAorICAgICAgICAgICAgImB+PWAiOiAiIiwKKyAgICAgICAgICAgICJgfnxgIjogIiIsCisgICAgICAgICAgICAiYH5+YCI6ICIiLAorICAgICAgICAgICAgIkFBIjogIiIsCisgICAgICAgICAgICAiYWxlcGgiOiAiIiwKKyAgICAgICAgICAgICJhbHBoYSI6ICIiLAorICAgICAgICAgICAgImFuZCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aCBGb3JtdWxhIElucHV0IjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoTUwgRXhhbXBsZSI6ICIiLAorICAgICAgICAgICAgImJhcmEiOiAiIiwKKyAgICAgICAgICAgICJCYXNlZCBvbiBBU0NJSU1hdGhNTCBieSI6ICIiLAorICAgICAgICAgICAgImJiYSI6ICIiLAorICAgICAgICAgICAgImJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiZXRhIjogIiIsCisgICAgICAgICAgICAiQ0MiOiAiIiwKKyAgICAgICAgICAgICJjY2EiOiAiIiwKKyAgICAgICAgICAgICJjaGkiOiAiIiwKKyAgICAgICAgICAgICJkYXJyIjogIiIsCisgICAgICAgICAgICAiZGRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkZWwiOiAiIiwKKyAgICAgICAgICAgICJEZWx0YSI6ICIiLAorICAgICAgICAgICAgImRlbHRhIjogIiIsCisgICAgICAgICAgICAiZGlhbW9uZCI6ICIiLAorICAgICAgICAgICAgImRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkeS9keCI6ICIiLAorICAgICAgICAgICAgIkVFIjogIiIsCisgICAgICAgICAgICAiZXBzaSI6ICIiLAorICAgICAgICAgICAgImV0YSI6ICIiLAorICAgICAgICAgICAgIkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFzY2lpTWF0aE1MIHZpc2l0IHRoaXMgcGFnZToiOiAiIiwKKyAgICAgICAgICAgICJGb3JtdWxhIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgImZyYSI6ICIiLAorICAgICAgICAgICAgImdhbW1hIjogIiIsCisgICAgICAgICAgICAiR2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJncmFkIjogIiIsCisgICAgICAgICAgICAiaEFyciI6ICIiLAorICAgICAgICAgICAgImhhcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXRhIjogIiIsCisgICAgICAgICAgICAiaWYiOiAiIiwKKyAgICAgICAgICAgICJpbiI6ICIiLAorICAgICAgICAgICAgIklucHV0IjogIiIsCisgICAgICAgICAgICAiaW50IjogIiIsCisgICAgICAgICAgICAiaW50X2FeYmYoeClkeCI6ICIiLAorICAgICAgICAgICAgImlvdGEiOiAiIiwKKyAgICAgICAgICAgICJrYXBwYSI6ICIiLAorICAgICAgICAgICAgIkxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhcnIiOiAiIiwKKyAgICAgICAgICAgICJsQXJyIjogIiIsCisgICAgICAgICAgICAibGltXyh4LSZndDtvbykiOiAiIiwKKyAgICAgICAgICAgICJtdSI6ICIiLAorICAgICAgICAgICAgIk5OIjogIiIsCisgICAgICAgICAgICAibm4iOiAiIiwKKyAgICAgICAgICAgICJubm4iOiAiIiwKKyAgICAgICAgICAgICJub3QiOiAiIiwKKyAgICAgICAgICAgICJudSI6ICIiLAorICAgICAgICAgICAgIm8rIjogIiIsCisgICAgICAgICAgICAiby4iOiAiIiwKKyAgICAgICAgICAgICJPLyI6ICIiLAorICAgICAgICAgICAgIm9pbnQiOiAiIiwKKyAgICAgICAgICAgICJvbWVnYSI6ICIiLAorICAgICAgICAgICAgIk9tZWdhIjogIiIsCisgICAgICAgICAgICAib28iOiAiIiwKKyAgICAgICAgICAgICJvciI6ICIiLAorICAgICAgICAgICAgIm94IjogIiIsCisgICAgICAgICAgICAiUGhpIjogIiIsCisgICAgICAgICAgICAicGhpIjogIiIsCisgICAgICAgICAgICAicGkiOiAiIiwKKyAgICAgICAgICAgICJQaSI6ICIiLAorICAgICAgICAgICAgInByb2QiOiAiIiwKKyAgICAgICAgICAgICJwcm9wIjogIiIsCisgICAgICAgICAgICAicHNpIjogIiIsCisgICAgICAgICAgICAiUHNpIjogIiIsCisgICAgICAgICAgICAiUVEiOiAiIiwKKyAgICAgICAgICAgICJxdWFkIjogIiIsCisgICAgICAgICAgICAickFyciI6ICIiLAorICAgICAgICAgICAgInJobyI6ICIiLAorICAgICAgICAgICAgInJvb3QobikoeCkiOiAiIiwKKyAgICAgICAgICAgICJSUiI6ICIiLAorICAgICAgICAgICAgInNmYSI6ICIiLAorICAgICAgICAgICAgInNpZ21hIjogIiIsCisgICAgICAgICAgICAiU2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJzcXJ0KHgpIjogIiIsCisgICAgICAgICAgICAic3F1YXJlIjogIiIsCisgICAgICAgICAgICAic3RhY2tyZWwoLSZndDspKCspIjogIiIsCisgICAgICAgICAgICAic3ViIjogIiIsCisgICAgICAgICAgICAic3ViZSI6ICIiLAorICAgICAgICAgICAgInN1bSI6ICIiLAorICAgICAgICAgICAgInN1bV8obj0xKV5vbyI6ICIiLAorICAgICAgICAgICAgInN1cCI6ICIiLAorICAgICAgICAgICAgInN1cGUiOiAiIiwKKyAgICAgICAgICAgICJ0YXUiOiAiIiwKKyAgICAgICAgICAgICJUaGV0YSI6ICIiLAorICAgICAgICAgICAgInRoZXRhIjogIiIsCisgICAgICAgICAgICAiVFQiOiAiIiwKKyAgICAgICAgICAgICJ0dGEiOiAiIiwKKyAgICAgICAgICAgICJ1YXJyIjogIiIsCisgICAgICAgICAgICAidWxhIjogIiIsCisgICAgICAgICAgICAidXBzaWxvbiI6ICIiLAorICAgICAgICAgICAgInV1IjogIiIsCisgICAgICAgICAgICAidXV1IjogIiIsCisgICAgICAgICAgICAidmVjYSI6ICIiLAorICAgICAgICAgICAgInZ2IjogIiIsCisgICAgICAgICAgICAidnZ2IjogIiIsCisgICAgICAgICAgICAieF4obStuKSI6ICIiLAorICAgICAgICAgICAgInhfKG1uKSI6ICIiLAorICAgICAgICAgICAgIlhpIjogIiIsCisgICAgICAgICAgICAieGkiOiAiIiwKKyAgICAgICAgICAgICJ4eCI6ICIiLAorICAgICAgICAgICAgInpldGEiOiAiIiwKKyAgICAgICAgICAgICJaWiI6ICIiLAorICAgICAgICAgICAgInwtJmd0OyI6ICIiLAorICAgICAgICAgICAgInwtLSI6ICIiLAorICAgICAgICAgICAgInw9PSI6ICIiLAorICAgICAgICAgICAgInxfXyI6ICIiLAorICAgICAgICAgICAgInx+IjogIiIsCisgICAgICAgICAgICAifj0iOiAiIiwKKyAgICAgICAgICAgICJ+fCI6ICIiLAorICAgICAgICAgICAgIn5+IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZhbmN5U2VsZWN0cyI6IHsKKyAgICAgICAgICAgICInK29wdC50ZXh0KyciOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiJztcclxuICB2YXIgdGFnYyA9ICciOiAiIiwKKyAgICAgICAgICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAiIiwKKyAgICAgICAgICAgICJDbGVhciI6ICIiLAorICAgICAgICAgICAgIkRvbmUiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgdGV4dCB5b3Ugd2FudCB0byBmaW5kIjogIiIsCisgICAgICAgICAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgImZvdW5kIGl0ZW0iOiAiIiwKKyAgICAgICAgICAgICJmb3VuZCBpdGVtcyI6ICIiLAorICAgICAgICAgICAgIkhpZ2hsaWdodCI6ICIiLAorICAgICAgICAgICAgIkluZm9ybSBhIHJlcGxhY2VtZW50IHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJOZXh0IjogIiIsCisgICAgICAgICAgICAibm90IGZvdW5kIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2Ugd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtIjogIiIsCisgICAgICAgICAgICAicmVwbGFjZWQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJTZWFyY2ggZm9yOiI6ICIiLAorICAgICAgICAgICAgIlN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IjogIiIsCisgICAgICAgICAgICAiVW5kbyI6ICIiLAorICAgICAgICAgICAgIldob2xlIHdvcmRzIG9ubHkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiRW50ZXIgdGhlIG5hbWUgZm9yIG5ldyBvcHRpb24uIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgRm9ybS4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBtdWx0aS1saW5lIHRleHQgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcmFkaW8gYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFNlbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgU2VsZWN0Li4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1zIjogeworICAgICAgICAgICAgIidvbkNsaWNrJz0iOiAiIiwKKyAgICAgICAgICAgICJBY2Nlc3MgS2V5OiI6ICIiLAorICAgICAgICAgICAgIkFjdGlvbiBVUkw6IjogIiIsCisgICAgICAgICAgICAiQnV0dG9uIFNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkNoZWNrZWQiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zOiI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQgdGV4dCAob3B0aW9uYWwpIjogIiIsCisgICAgICAgICAgICAiRGltZW5zaW9ucyI6ICIiLAorICAgICAgICAgICAgIkRpc2FibGVkIjogIiIsCisgICAgICAgICAgICAiRW5jb2Rpbmc6IjogIiIsCisgICAgICAgICAgICAiRm9yIENvbnRyb2w6IjogIiIsCisgICAgICAgICAgICAiRm9ybSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IElOUFVUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gaGFuZGxlciBzY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiR2V0IjogIiIsCisgICAgICAgICAgICAiSGFyZCI6ICIiLAorICAgICAgICAgICAgIkhlaWdodCBpbiBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkhUTUwtRm9ybSB0byBDR0kgKGRlZmF1bHQpIjogIiIsCisgICAgICAgICAgICAiSW1hZ2Ugc291cmNlIjogIiIsCisgICAgICAgICAgICAiSW5pdGlhbCBUZXh0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiSmF2YXNjcmlwdCBmb3IgYnV0dG9uIGNsaWNrIjogIiIsCisgICAgICAgICAgICAiTGFiZWw6IjogIiIsCisgICAgICAgICAgICAiTGVnZW5kOiI6ICIiLAorICAgICAgICAgICAgIk1heCBsZW5ndGg6IjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY2NlcHRlZCI6ICIiLAorICAgICAgICAgICAgIk1ldGhvZDoiOiAiIiwKKyAgICAgICAgICAgICJtdWx0aXBhcnQgRm9ybSBEYXRhIChGaWxlLVVwbG9hZCkiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gc2VsZWN0IjogIiIsCisgICAgICAgICAgICAibmFtZSBvZiB0aGUgdGV4dGFyZWEiOiAiIiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICIiLAorICAgICAgICAgICAgIm5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIm5vd3JhcCI6ICIiLAorICAgICAgICAgICAgIk9mZiI6ICIiLAorICAgICAgICAgICAgIlBoeXNpY2FsIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIGEgTGFiZWwiOiAiIiwKKyAgICAgICAgICAgICJQb3N0IjogIiIsCisgICAgICAgICAgICAicHJlIjogIiIsCisgICAgICAgICAgICAiUmVhZCBPbmx5IjogIiIsCisgICAgICAgICAgICAiU2l6ZSBvZiB0ZXh0IGJveCBpbiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiU2l6ZToiOiAiIiwKKyAgICAgICAgICAgICJTb2Z0IjogIiIsCisgICAgICAgICAgICAiVGFiIEluZGV4OiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBGcmFtZToiOiAiIiwKKyAgICAgICAgICAgICJUZXh0OiI6ICIiLAorICAgICAgICAgICAgIlVSTCBvZiBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlZhbHVlIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiVmFsdWU6IjogIiIsCisgICAgICAgICAgICAiVmlydHVhbCI6ICIiLAorICAgICAgICAgICAgIldpZHRoIGluIG51bWJlciBvZiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiV3JhcCBNb2RlOiI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgTmFtZSI6ICIiLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IgorICAgICAgICB9LAorICAgICAgICAiRnVsbFBhZ2UiOiB7CisgICAgICAgICAgICAiLi4uIjogIiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIkJhY2tncm91bmQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiQ2hhcmFjdGVyIHNldDoiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoSVNPLTg4NTktNSkiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoS09JOC1SKSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChXSU5ET1dTLTEyNTEpIjogIiIsCisgICAgICAgICAgICAiRGVzY3JpcHRpb246IjogIiIsCisgICAgICAgICAgICAiRE9DVFlQRToiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiRG9jdW1lbnQgdGl0bGU6IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZHM6IjogIiIsCisgICAgICAgICAgICAiUHJpbWFyeSBzdHlsZS1zaGVldDoiOiAiIiwKKyAgICAgICAgICAgICJUZXh0IGNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIlVURi04IChyZWNvbW1lbmRlZCkiOiAiIiwKKyAgICAgICAgICAgICJ3ZXN0ZXJuIChJU08tODg1OS0xKSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGdWxsU2NyZWVuIjogeworICAgICAgICAgICAgIk1heGltaXplL01pbmltaXplIEVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJHZWNrbyI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICAgICAiJiN4MDBkNzsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICJDZW50ZXIiOiAiIiwKKyAgICAgICAgICAgICJDb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L2VkaXQgaG9yaXpvbnRhbCBydWxlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgSG9yaXpvbnRhbCBSdWxlIjogIiIsCisgICAgICAgICAgICAiTm8gc2hhZGluZyI6ICIiLAorICAgICAgICAgICAgInBlcmNlbnQiOiAiIiwKKyAgICAgICAgICAgICJwaXhlbHMiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbmxpbmVTdHlsZXIiOiB7CisgICAgICAgICAgICAiQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciI6ICIiLAorICAgICAgICAgICAgIkNoYXIiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkNTUyBTdHlsZSI6ICIiLAorICAgICAgICAgICAgIkZHIENvbG9yIjogIiIsCisgICAgICAgICAgICAiRmxvYXQiOiAiIiwKKyAgICAgICAgICAgICJKdXN0aWZ5IjogIiIsCisgICAgICAgICAgICAiTWFyZ2luIjogIiIsCisgICAgICAgICAgICAiTm9uZSI6ICIiLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJUZXh0IGFsaWduIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWwgYWxpZ24iOiAiIiwKKyAgICAgICAgICAgICItIjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiQ2VudGVyIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSGVpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAicGVyY2VudCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgInBpeGVscyI6ICI8PEhvcml6b250YWxSdWxlPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRBbmNob3IiOiB7CisgICAgICAgICAgICAiQW5jaG9yIG5hbWUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQW5jaG9yIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGZvb3Rub3RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IE5vdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGFnZWJyZWFrIjogeworICAgICAgICAgICAgIlBhZ2UgYnJlYWsiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIEJyZWFrIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNtaWxleSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgU21pbGV5IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICAgICAiXFxuICBUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZ1xcbiI6ICIiLAorICAgICAgICAgICAgIkhpZGUgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMSI6ICIiLAorICAgICAgICAgICAgIkxpbmsyIjogIiIsCisgICAgICAgICAgICAiTGluazMiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNCI6ICIiLAorICAgICAgICAgICAgIkxpbms1IjogIiIsCisgICAgICAgICAgICAiU2hvdyBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmciOiAiIiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgICAgICJBbGwgQ2F0ZWdvcmllcyI6ICIiLAorICAgICAgICAgICAgIkZpbHRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyBIVE1MIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIHRlbXBsYXRlIHZhcmlhYmxlIjogIiIsCisgICAgICAgICAgICAiT25seSBzZWFyY2ggd29yZCBiZWdpbm5pbmciOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIjw8Q2hhckNvdW50ZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICI8PEluc2VydFNuaXBwZXQ+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAgICAgIkNhcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJDYXB0aW9uIGZvciB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZSBib3JkZXJzOiI6ICIiLAorICAgICAgICAgICAgIkxheW91IjogIiIsCisgICAgICAgICAgICAiU3R5bGUgb2YgdGhlIGJvcmRlciI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIjw8SW5saW5lU3R5bGVyPj4iCisgICAgICAgIH0sCisgICAgICAgICJMYW5nTWFya3MiOiB7CisgICAgICAgICAgICAiJm1kYXNoOyBsYW5ndWFnZSAmbWRhc2g7IjogIiIsCisgICAgICAgICAgICAiJywgJyI6ICIiLAorICAgICAgICAgICAgIkVuZ2xpc2giOiAiIiwKKyAgICAgICAgICAgICJGcmVuY2giOiAiIiwKKyAgICAgICAgICAgICJHcmVlayI6ICIiLAorICAgICAgICAgICAgImxhbmd1YWdlIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIkxhdGluIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxpbmtlciI6IHsKKyAgICAgICAgICAgICIocHgpIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yLUxpbmsiOiAiIiwKKyAgICAgICAgICAgICJBbmNob3I6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgQWRkcmVzczoiOiAiIiwKKyAgICAgICAgICAgICJFbWFpbCBMaW5rIjogIiIsCisgICAgICAgICAgICAiTG9jYXRpb24gQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lbnUgQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lc3NhZ2UgVGVtcGxhdGU6IjogIiIsCisgICAgICAgICAgICAiTmV3IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIk9yZGluYXJ5IExpbmsiOiAiIiwKKyAgICAgICAgICAgICJQb3B1cCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJQb3B1cFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUmVzaXplYWJsZToiOiAiIiwKKyAgICAgICAgICAgICJTYW1lIFdpbmRvdyAoanVtcCBvdXQgb2YgZnJhbWVzKSI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbGJhcnM6IjogIiIsCisgICAgICAgICAgICAiU2hvd3MgT24gSG92ZXIiOiAiIiwKKyAgICAgICAgICAgICJTdGF0dXMgQmFyOiI6ICIiLAorICAgICAgICAgICAgIlN1YmplY3Q6IjogIiIsCisgICAgICAgICAgICAiVGl0bGU6IjogIiIsCisgICAgICAgICAgICAiVG9vbGJhcjoiOiAiIiwKKyAgICAgICAgICAgICJVUkwgTGluayI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICIiLAorICAgICAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTmFtZToiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTaXplOiI6ICI8PEZvcm1zPj4iCisgICAgICAgIH0sCisgICAgICAgICJMaXN0VHlwZSI6IHsKKyAgICAgICAgICAgICJDaG9vc2UgbGlzdCBzdHlsZSB0eXBlIChmb3Igb3JkZXJlZCBsaXN0cykiOiAiIiwKKyAgICAgICAgICAgICJEZWNpbWFsIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciBncmVlayBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgbGF0aW4gbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIHJvbWFuIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJVcHBlciBsYXRpbiBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiVXBwZXIgcm9tYW4gbnVtYmVycyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJNb290b29sc0ZpbGVNYW5hZ2VyIjogeworICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk9wZXJhIjogeworICAgICAgICAgICAgIk1BUksiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAgICAgIkluc2VydCB0ZXh0IGluIG5ldyBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJQYXN0ZSBhcyBQbGFpbiBUZXh0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlByZXNlcnZlU2NyaXB0cyI6IHsKKyAgICAgICAgICAgICJKYXZhU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiUEhQIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlF1aWNrVGFnIjogeworICAgICAgICAgICAgIicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbCc6ICciOiAiIiwKKyAgICAgICAgICAgICJBVFRSSUJVVEVTIjogIiIsCisgICAgICAgICAgICAiQ29sb3JzIjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIFRBRyB5b3Ugd2FudCB0byBpbnNlcnQiOiAiIiwKKyAgICAgICAgICAgICJObyBDU1MgY2xhc3MgYXZhaWFibGUiOiAiIiwKKyAgICAgICAgICAgICJPayI6ICIiLAorICAgICAgICAgICAgIk9QVElPTlMiOiAiIiwKKyAgICAgICAgICAgICJRdWljayBUYWcgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiVEFHcyI6ICIiLAorICAgICAgICAgICAgIlRoZXJlIGFyZSBzb21lIHVuY2xvc2VkIHF1b3RlIjogIiIsCisgICAgICAgICAgICAiVGhpcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIFRBRyI6ICIiLAorICAgICAgICAgICAgIllvdSBoYXZlIHRvIHNlbGVjdCBzb21lIHRleHQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU2F2ZVN1Ym1pdCI6IHsKKyAgICAgICAgICAgICJpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIlJlYWR5IjogIiIsCisgICAgICAgICAgICAiU2F2ZSI6ICIiLAorICAgICAgICAgICAgIlNhdmluZy4uLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTZXRJZCI6IHsKKyAgICAgICAgICAgICJJRC9OYW1lOiI6ICIiLAorICAgICAgICAgICAgIlNldCBJZCBhbmQgTmFtZSI6ICIiLAorICAgICAgICAgICAgIlNldCBJZC9OYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElEL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgICAgICJDbG9zaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiQ2xvc2luZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiQ29udmVydCBhbGwgcXVvdGVzIGFuZCBkYXNoZXMgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgYXV0b21hdGljIHJlcGxhY2VtZW50cyI6ICIiLAorICAgICAgICAgICAgIk9wZW5pbmdEb3VibGVRdW90ZXMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nU2luZ2xlUXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJTbWFydFJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJTbWFydFJlcGxhY2UgU2V0dGluZ3MiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU3R5bGlzdCI6IHsKKyAgICAgICAgICAgICJTdHlsZXMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU3VwZXJDbGVhbiI6IHsKKyAgICAgICAgICAgICJDbGVhbiBiYWQgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIFNlbGVjdGlvbiBPbmx5IjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gdXAgSFRNTCI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIFNjb3BlIjogIiIsCisgICAgICAgICAgICAiR2VuZXJhbCB0aWR5IHVwIGFuZCBjb3JyZWN0aW9uIG9mIHNvbWUgcHJvYmxlbXMuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHNlbGVjdCBmcm9tIHRoZSBmb2xsb3dpbmcgY2xlYW5pbmcgb3B0aW9ucy4uLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzdGFuZCBieSB3aGlsZSBjbGVhbmluZyBpbiBwcm9jZXNzLi4uIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsaWdubWVudCAobGVmdC9yaWdodC9qdXN0aWZ5KS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxsIGNsYXNzZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIEFsbCBIVE1MIFRhZ3MiOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxsIHN0eWxlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIGZvbnQgc2l6ZXMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0ZXh0IGNvbG9ycy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIHR5cGVmYWNlcyAoZm9udCBcInN0eWxlc1wiKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZW1waGFzaXMgYW5kIGFubm90YXRpb25zLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBsYW5nIGF0dHJpYnV0ZXMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIFBhcmFncmFwaHMiOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzLiI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UgZGlyZWN0aW9uYWwgcXVvdGUgbWFya3Mgd2l0aCBub24tZGlyZWN0aW9uYWwgcXVvdGUgbWFya3MuIjogIiIsCisgICAgICAgICAgICAiVmlnb3JvdXNseSBwdXJnZSBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlRhYmxlT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJBbGwgZm91ciBzaWRlcyI6ICIiLAorICAgICAgICAgICAgIkJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIFByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIFR5cGU6IjogIiIsCisgICAgICAgICAgICAiQ2VsbHMgZG93biI6ICIiLAorICAgICAgICAgICAgIkNlbGxzIHRvIHRoZSByaWdodCwgYW5kIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgY29sdW1uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIHJvdyI6ICIiLAorICAgICAgICAgICAgIkRvIE5vdCBDaGFuZ2UiOiAiIiwKKyAgICAgICAgICAgICJGcmFtZSBhbmQgYm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkZyYW1lcyI6ICIiLAorICAgICAgICAgICAgIkhlYWRlciAodGgpIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNlbGwgYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY2VsbCBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY29sdW1uIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcm93IGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHJvdyBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBjZWxscyI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIGN1cnJlbnQgY2VsbCB3aXRoOiI6ICIiLAorICAgICAgICAgICAgIk5vIHJ1bGVzIjogIiIsCisgICAgICAgICAgICAiTm8gc2lkZXMiOiAiIiwKKyAgICAgICAgICAgICJOb3JtYWwgKHRkKSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjbGljayBpbnRvIHNvbWUgY2VsbCI6ICIiLAorICAgICAgICAgICAgIlJvdyBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiUm93IFByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGFsbCByb3dzIGFuZCBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBjb2x1bW5zIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIHJvd3Mgb25seSI6ICIiLAorICAgICAgICAgICAgIlNwYWNpbmcgYW5kIHBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJTcGxpdCBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJTcGxpdCByb3ciOiAiIiwKKyAgICAgICAgICAgICJTdW1tYXJ5IjogIiIsCisgICAgICAgICAgICAiVGFibGUgUHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlRhYmxlIHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJUaGUgYm90dG9tIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHJpZ2h0IGFuZCBsZWZ0IHNpZGVzIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgcmlnaHQtaGFuZCBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSB0b3Agc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY2VsbCBpbiByb3cuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iOiAiIiwKKyAgICAgICAgICAgICJDYXB0aW9uIjogIjw8SW5zZXJ0VGFibGU+PiIsCisgICAgICAgICAgICAiQ29sdW1ucyI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkRlc2NyaXB0aW9uIjogIjw8RnVsbFBhZ2U+PiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJQYWRkaW5nIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgInBpeGVscyI6ICI8PEhvcml6b250YWxSdWxlPj4iCisgICAgICAgIH0sCisgICAgICAgICJVbnNhdmVkQ2hhbmdlcyI6IHsKKyAgICAgICAgICAgICJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhlIGVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJXZWJLaXQiOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIjw8R2Vja28+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlhpbmhhIjogeworICAgICAgICAgICAgIiYjODIxMjsgZm9udCAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiJiM4MjEyOyBzaXplICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICIxICg4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjIgKDEwIHB0KSI6ICIiLAorICAgICAgICAgICAgIjMgKDEyIHB0KSI6ICIiLAorICAgICAgICAgICAgIjQgKDE0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjUgKDE4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjYgKDI0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjcgKDM2IHB0KSI6ICIiLAorICAgICAgICAgICAgIkFyaWFsIjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gY29udGVudCBwYXN0ZWQgZnJvbSBXb3JkIjogIiIsCisgICAgICAgICAgICAiQ2xvc2UiOiAiIiwKKyAgICAgICAgICAgICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIiIsCisgICAgICAgICAgICAiQ291cmllciBOZXciOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgU3RhdHVzYmFyIjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFRvb2xiYXIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTAgKHplcm8pIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0xIC4uIENUUkwtNiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtRSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtVSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtViI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWiI6ICIiLAorICAgICAgICAgICAgIkVkaXRvciBIZWxwIjogIiIsCisgICAgICAgICAgICAiRU5URVIiOiAiIiwKKyAgICAgICAgICAgICJFcnJvciBMb2FkaW5nIFhpbmhhLiAgRGV2ZWxvcGVycywgY2hlY2sgdGhlIEVycm9yIENvbnNvbGUgZm9yIGluZm9ybWF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGluZyI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYXRlIFhpbmhhIGZyYW1ld29yayI6ICIiLAorICAgICAgICAgICAgIkdlb3JnaWEiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5ncyI6ICIiLAorICAgICAgICAgICAgIkltcGFjdCI6ICIiLAorICAgICAgICAgICAgIkluaXQgZWRpdG9yIHNpemUiOiAiIiwKKyAgICAgICAgICAgICJpbnNlcnQgbGluZWJyZWFrIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICIiLAorICAgICAgICAgICAgIktleWJvYXJkIHNob3J0Y3V0cyI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgQ29yZSI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ISI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbnMiOiAiIiwKKyAgICAgICAgICAgICJNUyBXb3JkIENsZWFuZXIiOiAiIiwKKyAgICAgICAgICAgICJuZXcgcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJTYXZlIGFzIjogIiIsCisgICAgICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJTSElGVC1FTlRFUiI6ICIiLAorICAgICAgICAgICAgIlRhaG9tYSI6ICIiLAorICAgICAgICAgICAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICIiLAorICAgICAgICAgICAgIlRpbWVzIE5ldyBSb21hbiI6ICIiLAorICAgICAgICAgICAgIlRvdWNoIGhlcmUgZmlyc3QgdG8gYWN0aXZhdGUgZWRpdG9yLiI6ICIiLAorICAgICAgICAgICAgIlZlcmRhbmEiOiAiIiwKKyAgICAgICAgICAgICJXYWl0aW5nIGZvciBJZnJhbWUgdG8gbG9hZC4uLiI6ICIiLAorICAgICAgICAgICAgIldpbmdEaW5ncyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJSZW1vdmUgQ3VycmVudCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IEJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJTZXQgcGFnZSBiYWNrZ3JvdW5kIGltYWdlIjogIiIsCisgICAgICAgICAgICAiU2V0IFBhZ2UgQmFja2dyb3VuZCBJbWFnZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDbGllbnRzaWRlU3BlbGxjaGVjayI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIENMSUVOVFNJREVTUEVMTENIRUNLIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrIHVzaW5nIGllU3BlbGwiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTAlIjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICIiLAorICAgICAgICAgICAgIjIwMCUiOiAiIiwKKyAgICAgICAgICAgICIyNSUiOiAiIiwKKyAgICAgICAgICAgICI1MCUiOiAiIiwKKyAgICAgICAgICAgICI3NSUiOiAiIiwKKyAgICAgICAgICAgICI+TGlzdCBWaWV3IjogIiIsCisgICAgICAgICAgICAiPlRodW1ibmFpbCBWaWV3IjogIiIsCisgICAgICAgICAgICAiQToiOiAiIiwKKyAgICAgICAgICAgICJBbGlnbiI6ICIiLAorICAgICAgICAgICAgIkFsdCI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciBDb2xvciI6ICIiLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkNyb3AiOiAiIiwKKyAgICAgICAgICAgICJEOiI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICIiLAorICAgICAgICAgICAgIkVkaXQiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiIiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiIiwKKyAgICAgICAgICAgICJGaWxlc2l6ZToiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIEhvcml6b250YWwiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIEltYWdlIjogIiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciI6ICIiLAorICAgICAgICAgICAgIkdJRiI6ICIiLAorICAgICAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICIiLAorICAgICAgICAgICAgIkg6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiIiwKKyAgICAgICAgICAgICJKUEVHIEhpZ2giOiAiIiwKKyAgICAgICAgICAgICJKUEVHIExvdyI6ICIiLAorICAgICAgICAgICAgIkpQRUcgTWVkaXVtIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyI6ICIiLAorICAgICAgICAgICAgIkxvY2siOiAiIiwKKyAgICAgICAgICAgICJNYXJrZXIiOiAiIiwKKyAgICAgICAgICAgICJNYXhpbXVtIGZvbGRlciBzaXplIGxpbWl0IHJlYWNoZWQuIFVwbG9hZCBkaXNhYmxlZC4iOiAiIiwKKyAgICAgICAgICAgICJNZWFzdXJlIjogIiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICIiLAorICAgICAgICAgICAgIk5vIEZpbGVzIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHZhbHVlIjogIiIsCisgICAgICAgICAgICAiUE5HIjogIiIsCisgICAgICAgICAgICAiUHJlc2V0IjogIiIsCisgICAgICAgICAgICAiUXVhbGl0eToiOiAiIiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIiIsCisgICAgICAgICAgICAiUmVuYW1lIjogIiIsCisgICAgICAgICAgICAiUmVzaXplIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJTdGFydCBYOiI6ICIiLAorICAgICAgICAgICAgIlN0YXJ0IFk6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlRvZ2dsZSBtYXJrZXIgY29sb3IiOiAiIiwKKyAgICAgICAgICAgICJUcmFzaCI6ICIiLAorICAgICAgICAgICAgIlVwbG9hZCI6ICIiLAorICAgICAgICAgICAgIlc6IjogIiIsCisgICAgICAgICAgICAiWDoiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJZOiI6ICIiLAorICAgICAgICAgICAgIlpvb20iOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQ2xlYXIiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJDb2xvciI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkNvcHkiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJDdXQiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICI8PE1vb3Rvb2xzRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWFyZ2luIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJGaWx0ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsdGVyIjogIjw8SW5zZXJ0U25pcHBldDI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkh0bWxUaWR5IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQXV0by1UaWR5IjogIiIsCisgICAgICAgICAgICAiRG9uJ3QgVGlkeSI6ICIiLAorICAgICAgICAgICAgIkhUTUwgVGlkeSI6ICIiLAorICAgICAgICAgICAgIlRpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQW5nbGU6IjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlcyI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgVXNlcm5hbWUvRW1haWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIgTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFBob3RvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFZpZGVvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgU2VydmVyIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFVzZXJuYW1lIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlbyBMaXN0IjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlb3MiOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQ2xlYXIiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkNyb3AiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkQ6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRWRpdCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZW5hbWU6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIEhvcml6b250YWwiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZsaXAgSW1hZ2UiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZsaXAgVmVydGljYWwiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkdJRiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJIOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBIaWdoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIExvdyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBNZWRpdW0iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkxvY2siOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1hcmtlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJQTkciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZXNpemUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlNhdmUiOiAiPDxTYXZlU3VibWl0Pj4iLAorICAgICAgICAgICAgIlN0YXJ0IFg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTdGFydCBZOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiVHJhc2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlc6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUTUFSUVVFRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUiOiAiIiwKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kLUNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkJlaGF2aW9yOiI6ICIiLAorICAgICAgICAgICAgIkNvbnRpbnVvdXMiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3Rpb246IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHNjcm9sbGluZyBtYXJxdWVlIjogIiIsCisgICAgICAgICAgICAiTWFycXVlZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgQW1vdW50OiI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbCBEZWxheToiOiAiIiwKKyAgICAgICAgICAgICJTbGlkZSI6ICIiLAorICAgICAgICAgICAgIlNwZWVkIENvbnRyb2wiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTmFtZSI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIk5hbWUvSUQ6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiVGV4dDoiOiAiPDxGb3Jtcz4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGljdHVyZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVFBJQ1RVUkUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vdCBkZWZpbmVkIjogIiIsCisgICAgICAgICAgICAiIE9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJVcGxvYWQgZmlsZSI6ICIiLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJTaXplIjogIjw8Rm9ybXM+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEyMCUiOiAiIiwKKyAgICAgICAgICAgICIxNTAlIjogIiIsCisgICAgICAgICAgICAiODAlIjogIiIsCisgICAgICAgICAgICAiQWRkIEdVSURPIENvZGUgaW4gYSB0ZXh0Ym94IG9uIHRoZSBwYWdlIjogIiIsCisgICAgICAgICAgICAiQWRkIE1JREkgbGluayB0byBhbGxvdyBzdHVkZW50cyB0byBoZWFyIHRoZSBtdXNpYyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdCI6ICIiLAorICAgICAgICAgICAgIkd1aWRvIGNvZGUiOiAiIiwKKyAgICAgICAgICAgICJHVUlETyBDb2RlIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgaW4gYXBwbGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEdVSURPIE11c2ljIE5vdGF0aW9uIjogIiIsCisgICAgICAgICAgICAiTUlESSBGaWxlIjogIiIsCisgICAgICAgICAgICAiU291cmNlIENvZGUiOiAiIiwKKyAgICAgICAgICAgICJXaXRoIE1vemlsbGEsIHRoZSBhcHBsZXQgd2lsbCBub3QgYmUgdmlzaWJsZSBpbiBlZGl0b3IsIGJ1dCBvbmx5IGluIFdlYiBwYWdlIGFmdGVyIHN1Ym1pdHRpbmcuIjogIiIsCisgICAgICAgICAgICAiWm9vbSA6IjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIlpvb20iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJQU0xvY2FsIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNMT0NBTCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJDb25maXJtIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIEdlYXJzIGluIG9yZGVyIHRvIHVzZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlIGFuZCBjb25maWd1cmF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkVuYWJsaW5nIExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJJbnN0YWxsIjogIiIsCisgICAgICAgICAgICAiTGVhcm4gQWJvdXQgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCByZWxvYWQgdGhlIHBhZ2UsIGNhdXNpbmcgeW91IHRvIGxvc2UgYW55IHVuc2F2ZWQgd29yay4gIFByZXNzIFwiT0tcIiB0byByZWxvYWQuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgdXNlcyBHb29nbGUgR2VhcnMgdG8gZW5hYmxlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UuICBXaXRoIEdlYXJzIGluc3RhbGxlZCwgeW91IGNhbiBzYXZlIGRyYWZ0cyBvZiB5b3VyIGRvY3VtZW50cyBvbiB5b3VyIGhhcmQgZHJpdmUsIGNvbmZpZ3VyZSBYaW5oYSB0byBsb29rIHRoZSB3YXkgeW91IHdhbnQsIGFuZCBjYXJyeSB0aGlzIGluZm9ybWF0aW9uIHdoZXJldmVyIHlvdSB1c2UgWGluaGEgb24gdGhlIHdlYi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiUFNTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU1NFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWxlOiAiOiAiIiwKKyAgICAgICAgICAgICJJbXBvcnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEZXRhaWxzIjogIiIsCisgICAgICAgICAgICAiRmlsZSBCcm93c2VyIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gICAgVGhlcmUgQyAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgVGhlcmUgQSAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyBcIiBUaGVyZSBCIFwiIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gJyBUaGVyZSBEICciOiAiIiwKKyAgICAgICAgICAgICJMaXN0IG9mIFBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIk5ldyBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIk9wZW4iOiAiIiwKKyAgICAgICAgICAgICJPcGVuIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgeW91J2QgbGlrZSB0byBjcmVhdGUuIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBlcmFzZSBhbnkgdW5zYXZlZCBjb250ZW50LiAgSWYgeW91J3JlIGNlcnRhaW4sIHBsZWFzZSBjbGljayBPSyB0byBjb250aW51ZS4iOiAiIiwKKyAgICAgICAgICAgICJXZWIgVVJMIjogIiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICI8PFBTTG9jYWw+PiIsCisgICAgICAgICAgICAiQ29weSI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlbmFtZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IjogIjw8SW5zZXJ0Tm90ZT4+IiwKKyAgICAgICAgICAgICJOZXcgRm9sZGVyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEaWN0aW9uYXJ5IjogIiIsCisgICAgICAgICAgICAiRmluaXNoZWQgbGlzdCBvZiBtaXNwZWxsZWQgd29yZHMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MQXJlYSBTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiSSB3aWxsIG9wZW4gaXQgaW4gYSBuZXcgcGFnZS4iOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUiOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUgYWxsIjogIiIsCisgICAgICAgICAgICAiSW5mbyI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIjogIiIsCisgICAgICAgICAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIiIsCisgICAgICAgICAgICAiT3JpZ2luYWwgd29yZCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gb3BlbiB0aGlzIGxpbmsiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdDogY2hhbmdpbmcgZGljdGlvbmFyeSB0byI6ICIiLAorICAgICAgICAgICAgInBsaXogd2VpdCA7LSkiOiAiIiwKKyAgICAgICAgICAgICJSZS1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGFsbCI6ICIiLAorICAgICAgICAgICAgIlJldmVydCI6ICIiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrZXIiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbC1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlN1Z2dlc3Rpb25zIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSB3aXRoIjogIjw8RmluZFJlcGxhY2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlRlbXBsYXRlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiSW5zZXJ0IHRlbXBsYXRlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuRm9ybWF0IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWxsIjogIiIsCisgICAgICAgICAgICAiQWxsIEhUTUw6IjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgQXJlYSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIG9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0aW5nOiI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCB3aGljaCB0eXBlcyBvZiBmb3JtYXR0aW5nIHlvdSB3b3VsZCBsaWtlIHRvIHJlbW92ZS4iOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Rpb24iOiAiIgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL3N2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVmZmVhMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL3N2LmpzCkBAIC0wLDAgKzEsMTU3NyBAQAorLy8gWGluaGEgTGFuZ3VhZ2UgQ29tYmluZWQgVHJhbnNsYXRpb24gRmlsZQorLy8KKy8vIExBTkc6ICJzdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElOU1RSVUNUSU9OUyBUTyBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gWW91ciB0cmFuc2xhdGlvbiBtdXN0IGJlIGluIFVURi04IENoYXJhY3RlciBFbmNvZGluZy4KKy8vCisvLyBUaGlzIGlzIGEgSlNPTiBlbmNvZGVkIGZpbGUgKHBsdXMgY29tbWVudHMpLCBzdHJpbmdzIHNob3VsZCBiZSBkb3VibGUtcXVvdGUKKy8vIG9ubHksIGRvIG5vdCB1c2Ugc2luZ2xlIHF1b3RlcyB0byBzdXJyb3VuZCBzdHJpbmdzIC0gImhlbGxvIiwgbm90ICdoZWxsbycKKy8vIGRvIG5vdCBoYXZlIGEgdHJhaWxpbmcgY29tbWEgYWZ0ZXIgdGhlIGxhc3QgZW50cnkgaW4gYSBzZWN0aW9uLgorLy8KKy8vIE9ubHkgZnVsbCBsaW5lIGNvbW1lbnRzIGFyZSBhbGxvd2VkICh0aGF0IGEgY29tbWVudHMgb2NjdXB5IGVudGlyZSBsaW5lcykuCisvLworLy8gU2VhcmNoIGZvciB0aGUgX19ORVdfVFJBTlNMQVRJT05TX18gc2VjdGlvbiBiZWxvdywgdGhpcyBpcyB3aGVyZSB5b3Ugd2lsbAorLy8gd2FudCB0byBmb2N1cywgdGhpcyBzZWN0aW9uIGluY2x1ZGVzIHRoaW5ncyB0aGF0IGRvIG5vdCBwcmVzZW50bHkgaGF2ZSBhIAorLy8gdHJhbnNsYXRpb24gb3IgZm9yIHdoaWNoIHRoZSB0cmFuc2xhdGlvbiBuZWVkcyB0byBiZSBjaGVja2VkIGZvciBhY2N1cmFjeS4KKy8vCisvLyBJbiB0aGUgTmV3IFRyYW5zbGF0aW9ucyBzZWN0aW9uIGEgdHJhbnNsYXRpb24gc3RyaW5nIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICIiCisvLyAgICAgVGhpcyBtZWFucyBpdCBpcyBub3QgdHJhbnNsYXRlZCB5ZXQsIGFkZCB5b3VyIHRyYW5zbGF0aW9uLi4uCisvLyAgICAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIktsaW5nb24gU3RyaW5nIEhlcmUiCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJUcmFuc2xhdGVkIFN0cmluZyBIZXJlIgorLy8gICAgIFRoaXMgbWVhbnMgdGhhdCBhbiBleGlzdGluZyB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcsIGluIHNvbWUgb3RoZXIKKy8vICAgICBzZWN0aW9uIGhhcyBiZWVuIGZvdW5kLCBhbmQgdXNlZC4gIENoZWNrIHRoYXQgaXQgaXMgYXBwcm9wcml0ZSBmb3IgdGhpcworLy8gICAgIHNlY3Rpb24gYW5kIGlmIGl0IGlzLCB0aGF0J3MgZmluZSBsZWF2ZSBpdCBhcyBpcywgb3RoZXJ3aXNlIGNoYW5nZSBhcworLy8gICAgIGFwcHJvcHJpYXRlLgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiPDxBbm90aGVyU2VjdGlvbj4+IgorLy8gICAgIFRoaXMgbWVhbnMgdXNlIHRoZSBzYW1lIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZyBhcyA8PEFub3RoZXJTZWN0aW9uPj4KKy8vICAgICB0aGlzIHNhdmVzIHlvdSByZS10cmFubGF0aW5nIHN0cmluZ3MuICBJZiB0aGUgQ29udGV4dCBvZiB0aGlzIHNlY3Rpb24KKy8vICAgICBhbmQgdGhlIGNvbnRleHQgb2YgQW5vdGhlclNlY3Rpb24gc2VlbSB0aGUgc2FtZSwgdGhhdCdzIGZpbmUgbGVhdmUgaXQKKy8vICAgICB1c2luZyB0aGF0IHRyYW5zbGF0aW9uLCBidXQgaWYgdGhpcyBzZWN0aW9uIG5lZWRzIGEgZGlmZmVyZW50IHRyYW5zbGF0aW9uLCAKKy8vICAgICB5b3UgY2FuIHByb3ZpZGUgaXQgYnkgcmVwbGFjaW5nIHRoZSBsaW5rICg8PEFub3RoZXJTZWN0aW9uPj4pIHdpdGggdGhhdAorLy8gICAgIG5ldyB0cmFuc2xhdGlvbi4gIEZvciBleGFtcGxlIC0gYSAiVGFibGUiIGluIHNheSAiRGF0YVBsdWdpbiIgaXMgCisvLyAgICAgcGVyaGFwcyB0cmFuc2xhdGVkIGRpZmZlcmVudGx5IHRvICJUYWJsZSIgaW4gIkZ1cm5pdHVyZVBsdWdpbiIuCisvLworLy8gVEVTVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBwbGFjZSB5b3VyIHRyYW5zbGF0aW9uIGZpbGUgb24geW91ciB3ZWJzZXJ2ZXIgc29tZXdoZXJlIGZvciBleGFtcGxlCisvLworLy8gICAveGluaGEvbGFuZy9tZXJnZWQvc3YuanMKKy8vCisvLyBhbmQgdGhlbiB0ZWxsIFhpbmhhIHdoZXJlIHRvIGdldCBpdCAoYmVmb3JlIGxvYWRpbmcgWGluaGFDb3JlLmpzKSBieSAKKy8vCisvLyAgX2VkaXRvcl9sYW5nICAgICAgICAgICAgICA9ICdzdic7CisvLyAgX2VkaXRvcl9sYW5nX21lcmdlZF9maWxlICA9ICcveGluaGEvbGFuZy9tZXJnZWQvc3YuanMnOworLy8KKy8vIFhpbmhhIHdpbGwgbG9hZCB5b3VyIG5ldyBsYW5ndWFnZSBkZWZpbml0aW9uLgorLy8KKy8vIFNVQk1JVFRJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgY3JlYXRlIGEgVGlja2V0IG9uIHRoZSBYaW5oYSB3ZWJzaXRlIGFuZCBhdHRhY2ggeW91ciB0cmFuc2xhdGlvbiAKKy8vIGZpbGUuCisvLworLy8gVGhlIFhpbmhhIGRldmVsb3BlcnMgd2lsbCB0YWtlIHlvdXIgZmlsZSBhbmQgdXNlIHRoZSAKKy8vICAgICBjb250cmliL2xjX3NwbGl0X21lcmdlZF9maWxlLnBocAorLy8gc2NyaXB0IHRvIGxvYWQgaXQgaW50byB0aGUgWGluaGEgZGlzdHJpYnV0aW9uLgorCit7CisgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiQWJvdXRCb3giOiB7CisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJPbSBkZW5uYSBlZGl0b3IiLAorICAgICAgICAiQ2xvc2UiOiAiU3TDpG5nIgorICAgIH0sCisgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiCisgICAgfSwKKyAgICAiQ2hhcmFjdGVyTWFwIjogeworICAgICAgICAiSW5zZXJ0IHNwZWNpYWwgY2hhcmFjdGVyIjogIkluZm9nYSB0ZWNrZW4iCisgICAgfSwKKyAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICJDbG9zZSI6ICJTdMOkbmciLAorICAgICAgICAiQ29sb3I6ICI6ICJGw6RyZyIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgIkNfZWxsIFByb3BlcnRpZXMuLi4iOiAiQ19lbGxlZ2Vuc2thcGVyLi4uIiwKKyAgICAgICAgIkNoZWNfayBMaW5rLi4uIjogIktvbnRyb2xsZXJhIGzDpG5rLi4uIiwKKyAgICAgICAgIkNvcHkiOiAiS29waWVyYSIsCisgICAgICAgICJDcmVhdGUgYSBsaW5rIjogIlNLYXBhIG55IGzDpG5rIiwKKyAgICAgICAgIkN1cnJlbnQgVVJMIGlzIjogIkFrdHVlbGx0IFVSTCDDpHIiLAorICAgICAgICAiQ3V0IjogIktsaXBwIHV0IiwKKyAgICAgICAgIkRlX2xldGUgQ29sdW1uIjogIl9SYWRlcmEga29sdW1uIiwKKyAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCBjb2x1bW4iOiAiUmFkZXJhIGFrdHVlbGwga29sdW1uIiwKKyAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCByb3ciOiAiVCBib3J0IGFrdHVlbGwgcmFkIiwKKyAgICAgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIkh1ciBoYW1uYWRlIGR1IGjDpHI/IChCZXNrcml2IGbDtnJsb3BwZXQpIiwKKyAgICAgICAgIklfbnNlcnQgUm93IEJlZm9yZSI6ICJJX25mb2dhIHJhZCBmw7ZyZSIsCisgICAgICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICJJbmZvZ2EgcmFkIGVmdGVyIGFrdHVlbGwgcmFkIiwKKyAgICAgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIkluZm9nYSBrX29sdW1uIGVmdGVyIiwKKyAgICAgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICJJbmZvZ2Ega29sdW1uIGVmdGVyIChfYykiLAorICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiSW5mb2dhIGtvbHVtbiBlZnRlciBha3R1ZWxsIiwKKyAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICJJbmZvZ2Ega29sdW1uIGbDtnJlIGFrdHVlbGwiLAorICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiSW5mb2dhIG55IHJhZCBlZnRlciBha3R1ZWxsIiwKKyAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICJJbmZvZ2EgbnkgcmFkIGbDtnJlIGFrdHVlbGwiLAorICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUiOiAiSW5mb2dhIHBhcmFncmFmIGVmdGVyIGFrdHVlbGwgbm9kIiwKKyAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZSI6ICJJbmZvZ2EgcGFyYWdyYWYgZsO2cmUgYWt0dWVsbCBub2QiLAorICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBhZnRlciI6ICJJbmZvZ2EgcGFyYWdyYWYgZWZ0ZXIiLAorICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiSW5mb2dhIHBhcmFncmFmIGbDtnJlIiwKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogIl9DZW50ZXJqdXN0ZXJhIiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICJCbG9ja19qdXN0ZXJhIiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICJfVsOkbnN0ZXJqdXN0ZXJhIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiX0jDtmdlcmp1c3RlcmEiLAorICAgICAgICAiTGluayBwb2ludHMgdG86IjogIkzDpG5rZW4gcGVrYXIgbW90OiIsCisgICAgICAgICJNYWtlIGxpbl9rLi4uIjogIlNrYXBhIGzDpG5fay4uLiIsCisgICAgICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIsOWcHBuYSBsw6RuayBpIG55dHQgZsO2bnN0ZXIiLAorICAgICAgICAiUGFzdGUiOiAiS2xpc3RyYSBpbiIsCisgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGVsZW1lbnQ6IjogIkJla3LDpGZ0YSBib3J0dGFnbmluZyBhdiBlbGVtZW50OiIsCisgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHVubGluayB0aGlzIGVsZW1lbnQuIjogIkJla3LDpGZ0YSBib3J0dGFnbmluZyBhdiBsw6RuayIsCisgICAgICAgICJSZW1vdmUgdGhlICRlbGVtIEVsZW1lbnQuLi4iOiAiUmFkZXJhIGVsZW1lbnRldCAkZWxlbS4uLiIsCisgICAgICAgICJSZW1vdmUgdGhpcyBub2RlIGZyb20gdGhlIGRvY3VtZW50IjogIlJhZGVyYSBub2QgZnLDpW4gZG9rdW1lbnRldCIsCisgICAgICAgICJSb193IFByb3BlcnRpZXMuLi4iOiAiUmFkZWdlbnNrYXBlci4uLiAoX3cpIiwKKyAgICAgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAiVmlzYSBlZ2Vuc2thcGVyIGZvciBjZWxsZW4iLAorICAgICAgICAiU2hvdyB0aGUgVGFibGUgUHJvcGVydGllcyBkaWFsb2ciOiAiVmlzYSB0YWJlbGxlZ2Vuc2thcGVyIiwKKyAgICAgICAgIlNob3cgdGhlIFRhYmxlIFJvdyBQcm9wZXJ0aWVzIGRpYWxvZyI6ICJWaXNhIGVnZW5za2FwZXIgZsO2ciByYWQiLAorICAgICAgICAiU2hvdyB0aGUgaW1hZ2UgcHJvcGVydGllcyBkaWFsb2ciOiAiVmlzYSBiaWxkZWdlbnNrYXBlciIsCisgICAgICAgICJVbmxpbmsgdGhlIGN1cnJlbnQgZWxlbWVudCI6ICJUYSBib3J0IGzDpG5rIGtvcHBsYWQgdGlsbCBlbGVtZW50ZXQiLAorICAgICAgICAiX0RlbGV0ZSBSb3ciOiAiUmFkZXJhIHJhZCAoX2QpIiwKKyAgICAgICAgIl9JbWFnZSBQcm9wZXJ0aWVzLi4uIjogIl9CaWxkZWdlbnNrYXBlci4uLiIsCisgICAgICAgICJfTW9kaWZ5IExpbmsuLi4iOiAiX1JlZGlnZXJhIEzDpG5rLi4uIiwKKyAgICAgICAgIl9SZW1vdmUgTGluay4uLiI6ICJfVGEgYm9ydCBsw6Ruay4uLiIsCisgICAgICAgICJfVGFibGUgUHJvcGVydGllcy4uLiI6ICJfVGFiZWxsZWdlbnNrYXBlci4uLiIKKyAgICB9LAorICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiUmVkaWdlcmEgbMOkbmsiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOeXR0IGbDtm5zdGVyIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiSW5nZW4gKGFudsOkbmQgc3RhbmRhcmRpbnN0w6RsbGluZykiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3RoZXIiOiAiQW5uYW4iLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlNhbW1hIHJhbSAoX3NlbGYpIiwKKyAgICAgICAgIlRhcmdldDoiOiAiTcOlbDoiLAorICAgICAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUaXRlbCAodG9vbHRpcCk6IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiVG9wcHJhbSAoX3RvcCkiLAorICAgICAgICAiVVJMOiI6ICJTw7ZrdsOkZzoiLAorICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIkR1IG3DpXN0YSBtYXJrZXJhIGV0dCBvYmpla3QgYXR0IGFwcGxpY2VyYSBsw6Rua2VuIHDDpSEiCisgICAgfSwKKyAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlByZXZpZXciOiAiRsO2cmhhbmRzZ3JhbnNrYSIKKyAgICB9LAorICAgICJFeHRlbmRlZEZpbGVNYW5hZ2VyIjogeworICAgICAgICAiQWxpZ24iOiAiSnVzdGVyYSIsCisgICAgICAgICJCYXNlbGluZSI6ICJCYXNsaW5qZSIsCisgICAgICAgICJCb3JkZXIiOiAiS2FudGxpbmplIiwKKyAgICAgICAgIkJvdHRvbSI6ICJCb3R0ZW4iLAorICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgICAgICJDbGVhciI6ICJUw7ZtIiwKKyAgICAgICAgIkNvbG9yIjogIkbDpHJnIiwKKyAgICAgICAgIkNvcHkiOiAiS29waWVyYSIsCisgICAgICAgICJDcm9wIjogIkJlc2tqw6RyIiwKKyAgICAgICAgIkN1dCI6ICJLbGlwcCB1dCIsCisgICAgICAgICJIZWlnaHQiOiAiSMO2amQiLAorICAgICAgICAiSGVpZ2h0OiI6ICJIw7ZqZDoiLAorICAgICAgICAiTGVmdCI6ICJWZW5zdGVyIiwKKyAgICAgICAgIk1hcmdpbiI6ICJNYXJnaW5hbCIsCisgICAgICAgICJNaWRkbGUiOiAiTWl0dGVuIiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTnl0dCBmw7Zuc3RlciAoX2JsYW5rKSIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIkluZ2VuIChhbnbDpG5kIHN0YW5kYXJkaW5zdMOkbGxpbmcpIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBhZGRpbmciOiAiTHVmdCIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIkJpbGRlbnMgcG9zaXRpb25lcmluZyIsCisgICAgICAgICJQcmV2aWV3IjogIkbDtnJoYW5kc2dyYW5za2EiLAorICAgICAgICAiUmlnaHQiOiAiSMO2Z2VyIiwKKyAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJTYW1tYSByYW0gKF9zZWxmKSIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCkiOiAiVGl0ZWwgKHRvb2x0aXApOiIsCisgICAgICAgICJUb3AiOiAiw5Z2ZXJrYW50IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiVG9wcHJhbSAoX3RvcCkiLAorICAgICAgICAiV2lkdGgiOiAiQnJlZGQiLAorICAgICAgICAiV2lkdGg6IjogIkJyZWRkOiIKKyAgICB9LAorICAgICJGaW5kUmVwbGFjZSI6IHsKKyAgICAgICAgIkNhc2Ugc2Vuc2l0aXZlIHNlYXJjaCI6ICJTa2lsaiBtZWxsYW4gc3RvcmEgb2NoIHNtw6UgYm9rc3TDpHZlciIsCisgICAgICAgICJDbGVhciI6ICJUw7ZtIiwKKyAgICAgICAgIkRvbmUiOiAiRsOkcmRpZyIsCisgICAgICAgICJFbnRlciB0aGUgdGV4dCB5b3Ugd2FudCB0byBmaW5kIjogIlNrcml2IGluIHRleHQgZHUgdmlsbCBzw7ZrYSIsCisgICAgICAgICJGaW5kIGFuZCBSZXBsYWNlIjogIlPDtmsgb2NoIGVyc8OkdHQiLAorICAgICAgICAiSGlnaGxpZ2h0IjogIk1hcmtlcmEiLAorICAgICAgICAiSW5mb3JtIGEgcmVwbGFjZW1lbnQgd29yZCI6ICJTa3JpdiBpbiBldHQgZXJzw6R0dG5pbmdzb3JkIiwKKyAgICAgICAgIk5leHQiOiAiTsOkc3RhIiwKKyAgICAgICAgIk9wdGlvbnMiOiAiVsOkbGoiLAorICAgICAgICAiUmVwbGFjZSB3aXRoOiI6ICJFcnPDpHR0IG1lZDoiLAorICAgICAgICAiU2VhcmNoIGZvcjoiOiAiU8O2ayBlZnRlcjoiLAorICAgICAgICAiU3Vic3RpdHV0ZSBhbGwgb2NjdXJyZW5jZXMiOiAiRXJzdGF0dCBhbGxhIHRyw6RmZmFyIiwKKyAgICAgICAgIlN1YnN0aXR1dGUgdGhpcyBvY2N1cnJlbmNlPyI6ICJFcnPDpHR0IGRlbm5hPyIsCisgICAgICAgICJVbmRvIjogIlRpbGxiYWthIiwKKyAgICAgICAgIldob2xlIHdvcmRzIG9ubHkiOiAiQmFyYSBoZWxhIG9yZCIsCisgICAgICAgICJmb3VuZCBpdGVtIjogIlRyw6RmZiIsCisgICAgICAgICJmb3VuZCBpdGVtcyI6ICJmw7ZyZWtvbXN0ZXIgZnVubmEgaSBzw7ZrbmluZ2VuIiwKKyAgICAgICAgIm5vdCBmb3VuZCI6ICJpbnRlIGZ1bm5ldCIsCisgICAgICAgICJyZXBsYWNlZCBpdGVtIjogImVyc3RhdHQgdHLDpGZmIiwKKyAgICAgICAgInJlcGxhY2VkIGl0ZW1zIjogImbDtnJla29tc3RlciBlcnN0YXR0YSIKKyAgICB9LAorICAgICJGb3JtcyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJCaWxkZW5zIFVSTDoiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3B0aW9ucyI6ICJWw6RsaiIsCisgICAgICAgICJSb3dzOiI6ICJSYWRlcjoiLAorICAgICAgICAiU2l6ZToiOiAiU3RvcmxlayIKKyAgICB9LAorICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiRGVzY3JpcHRpb246IjogIkJlc2tyaXZuaW5nIiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIkZ1bGxTY3JlZW4iOiB7CisgICAgICAgICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiTWF4aW1lcmEvTWluaW1lcmEgV1lTSVdZRyBmw7Zuc3RlciIKKyAgICB9LAorICAgICJIb3Jpem9udGFsUnVsZSI6IHsKKyAgICAgICAgIkFsaWdubWVudDoiOiAiUGxhY2VyaW5nOiIsCisgICAgICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAgICAgIkNlbnRlciI6ICJDZW50cmVyYSIsCisgICAgICAgICJDb2xvcjoiOiAiRsOkcmciLAorICAgICAgICAiSGVpZ2h0OiI6ICJIw7ZqZDoiLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIlbDpWdyw6R0IGxpbmplIiwKKyAgICAgICAgIkxheW91dCI6ICJMYXlvdXQiLAorICAgICAgICAiTGVmdCI6ICJWZW5zdGVyIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlJpZ2h0IjogIkjDtmdlciIsCisgICAgICAgICJXaWR0aDoiOiAiQnJlZGQ6IiwKKyAgICAgICAgInBlcmNlbnQiOiAicHJvY2VudCIsCisgICAgICAgICJwaXhlbHMiOiAiYmlsZHB1bmt0ZXIiCisgICAgfSwKKyAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAiQmFzZWxpbmUiOiAiQmFzbGluamUiLAorICAgICAgICAiQm90dG9tIjogIkJvdHRlbiIsCisgICAgICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAgICAgIkNsZWFyIjogIlTDtm0iLAorICAgICAgICAiQ3JvcCI6ICJCZXNrasOkciIsCisgICAgICAgICJIZWlnaHQ6IjogIkjDtmpkOiIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiSW5mb2dhIGJpbGQiLAorICAgICAgICAiTGVmdCI6ICJWZW5zdGVyIiwKKyAgICAgICAgIk1pZGRsZSI6ICJNaXR0ZW4iLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJCaWxkZW5zIHBvc2l0aW9uZXJpbmciLAorICAgICAgICAiUmlnaHQiOiAiSMO2Z2VyIiwKKyAgICAgICAgIlRvcCI6ICLDlnZlcmthbnQiLAorICAgICAgICAiV2lkdGg6IjogIkJyZWRkOiIKKyAgICB9LAorICAgICJJbmxpbmVTdHlsZXIiOiB7CisgICAgICAgICJCYWNrZ3JvdW5kIjogIkJha2dydW5kIiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkJhc2xpbmplIiwKKyAgICAgICAgIkJvcmRlciI6ICJLYW50bGluamUiLAorICAgICAgICAiQm90dG9tIjogIkJvdHRlbiIsCisgICAgICAgICJDZW50ZXIiOiAiQ2VudHJlcmEiLAorICAgICAgICAiQ2hhciI6ICJUZWNrZW4iLAorICAgICAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAiT3N5bmxpZ2Ega2FudGxpbmplciIsCisgICAgICAgICJGRyBDb2xvciI6ICJGw7ZyZ3J1bmRzZsOkcmciLAorICAgICAgICAiRmxvYXQiOiAiRmx5dGFuZGUiLAorICAgICAgICAiSGVpZ2h0IjogIkjDtmpkIiwKKyAgICAgICAgIkltYWdlIFVSTCI6ICJCaWxkZW5zIFVSTCIsCisgICAgICAgICJKdXN0aWZ5IjogIkp1c3RlcmEiLAorICAgICAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgICAgICJMZWZ0IjogIlZlbnN0ZXIiLAorICAgICAgICAiTWFyZ2luIjogIk1hcmdpbmFsIiwKKyAgICAgICAgIk1pZGRsZSI6ICJNaXR0ZW4iLAorICAgICAgICAiTm9uZSI6ICJJbmdlbiIsCisgICAgICAgICJQYWRkaW5nIjogIkx1ZnQiLAorICAgICAgICAiUmlnaHQiOiAiSMO2Z2VyIiwKKyAgICAgICAgIlRleHQgYWxpZ24iOiAiSnVzdGVyYSB0ZXh0IiwKKyAgICAgICAgIlRvcCI6ICLDlnZlcmthbnQiLAorICAgICAgICAiVmVydGljYWwgYWxpZ24iOiAiVmVydGlrYWwganVzdGVyaW5nIiwKKyAgICAgICAgIldpZHRoIjogIkJyZWRkIiwKKyAgICAgICAgInBlcmNlbnQiOiAicHJvY2VudCIsCisgICAgICAgICJwaXhlbHMiOiAiYmlsZHB1bmt0ZXIiCisgICAgfSwKKyAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgIkFsaWdubWVudDoiOiAiUGxhY2VyaW5nOiIsCisgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiQWx0ZXJuYXRpdiB0ZXh0OiIsCisgICAgICAgICJCYXNlbGluZSI6ICJCYXNsaW5qZSIsCisgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJSYW10am9ja2xlazoiLAorICAgICAgICAiQm90dG9tIjogIkJvdHRlbiIsCisgICAgICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICJCaWxkZW5zIHPDtmt2w6RnIChVUkwpIiwKKyAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIkJlc2tyaXZhbmRlIHRleHQgZsO2ciB3ZWJsw6RzYXJlIHNvbSBpbnRlIHN0w7ZkamVyIGluYsOkZGRhZGUgYmlsZGVyIiwKKyAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICJIb3Jpem9udGVsbHQgaW5kcmFnIHDDpSBiaWxkIiwKKyAgICAgICAgIkhvcml6b250YWw6IjogIkhvcmlzb250ZWxsOiIsCisgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICJGw7ZyaGFuZHNncmFuc2tuaW5nOiIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIkJpbGRlbnMgVVJMOiIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiSW5mb2dhIGJpbGQiLAorICAgICAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIkzDpG1uYSB0b210IGbDtnIgYXR0IHVuZHZpa2EgcmFtIiwKKyAgICAgICAgIkxlZnQiOiAiVmVuc3RlciIsCisgICAgICAgICJNaWRkbGUiOiAiTWl0dGVuIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiQmlsZGVucyBwb3NpdGlvbmVyaW5nIiwKKyAgICAgICAgIlByZXZpZXciOiAiRsO2cmhhbmRzZ3JhbnNrYSIsCisgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiw5ZwcG5hIGJpbGQgaSBueXR0IGbDtm5zdGVyIiwKKyAgICAgICAgIlJpZ2h0IjogIkjDtmdlciIsCisgICAgICAgICJTcGFjaW5nIjogIk1lbGxhbnJ1bSIsCisgICAgICAgICJUb3AiOiAiw5Z2ZXJrYW50IiwKKyAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiVmVydGlrYWx0IGluZHJhZyBww6UgYmlsZCIsCisgICAgICAgICJWZXJ0aWNhbDoiOiAiVmVydGlrYWw6IgorICAgIH0sCisgICAgIkluc2VydE1hcnF1ZWUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAgICAgIkhlaWdodDoiOiAiSMO2amQ6IiwKKyAgICAgICAgIkxlZnQiOiAiVmVuc3RlciIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJSaWdodCI6ICJIw7ZnZXIiLAorICAgICAgICAiV2lkdGg6IjogIkJyZWRkOiIKKyAgICB9LAorICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIKKyAgICB9LAorICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAiQWxpZ25tZW50OiI6ICJQbGFjZXJpbmc6IiwKKyAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJBbHRlcm5hdGl2IHRleHQ6IiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkJhc2xpbmplIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIlJhbXRqb2NrbGVrOiIsCisgICAgICAgICJCb3R0b20iOiAiQm90dGVuIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkJpbGRlbnMgc8O2a3bDpGcgKFVSTCkiLAorICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiQmVza3JpdmFuZGUgdGV4dCBmw7ZyIHdlYmzDpHNhcmUgc29tIGludGUgc3TDtmRqZXIgaW5iw6RkZGFkZSBiaWxkZXIiLAorICAgICAgICAiSGVpZ2h0OiI6ICJIw7ZqZDoiLAorICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIkhvcml6b250ZWxsdCBpbmRyYWcgcMOlIGJpbGQiLAorICAgICAgICAiSG9yaXpvbnRhbDoiOiAiSG9yaXNvbnRlbGw6IiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIkbDtnJoYW5kc2dyYW5za25pbmc6IiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiQmlsZGVucyBVUkw6IiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICJJbmZvZ2EgYmlsZCIsCisgICAgICAgICJMYXlvdXQiOiAiTGF5b3V0IiwKKyAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiTMOkbW5hIHRvbXQgZsO2ciBhdHQgdW5kdmlrYSByYW0iLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vdCBkZWZpbmVkIjogIkzDpG1uYSB0b210IGbDtnIgYXR0IGzDpXRhIHdlYmzDpHNhcmVuIGJlc3TDpG1tYSIsCisgICAgICAgICJMZWZ0IjogIlZlbnN0ZXIiLAorICAgICAgICAiTWlkZGxlIjogIk1pdHRlbiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIkJpbGRlbnMgcG9zaXRpb25lcmluZyIsCisgICAgICAgICJQcmV2aWV3IjogIkbDtnJoYW5kc2dyYW5za2EiLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIsOWcHBuYSBiaWxkIGkgbnl0dCBmw7Zuc3RlciIsCisgICAgICAgICJSaWdodCI6ICJIw7ZnZXIiLAorICAgICAgICAiU2l6ZSI6ICJTdG9ybGVrIiwKKyAgICAgICAgIlNwYWNpbmciOiAiTWFyZ2luYWwiLAorICAgICAgICAiVG9wIjogIsOWdmVya2FudCIsCisgICAgICAgICJVcGxvYWQgZmlsZSI6ICJMYWRkYSB1cHAgYmlsZCIsCisgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIlZlcnRpa2FsdCBpbmRyYWcgcMOlIGJpbGQiLAorICAgICAgICAiVmVydGljYWw6IjogIlZlcnRpa2FsOiIsCisgICAgICAgICJXaWR0aDoiOiAiQnJlZGQ6IgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXZicnl0IgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIKKyAgICB9LAorICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgIkFsaWdubWVudDoiOiAiUGxhY2VyaW5nOiIsCisgICAgICAgICJCYXNlbGluZSI6ICJCYXNsaW5qZSIsCisgICAgICAgICJCb3JkZXIiOiAiS2FudGxpbmplIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIlJhbXRqb2NrbGVrOiIsCisgICAgICAgICJCb3R0b20iOiAiQm90dGVuIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiQ2FwdGlvbiI6ICLDlnZlcnNrcmlmdCIsCisgICAgICAgICJDZWxsIHBhZGRpbmc6IjogIkNlbGxpbmRyYWc6IiwKKyAgICAgICAgIkNlbGwgc3BhY2luZzoiOiAiQ2VsbG1hcmdpbmFsZXI6IiwKKyAgICAgICAgIkNvbHM6IjogIktvbHVtbmVyOiIsCisgICAgICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIkZpeGVyYWQgYnJlZGQiLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIkluZm9nYSB0YWJlbGwiLAorICAgICAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIkzDpG1uYSB0b210IGbDtnIgYXR0IHVuZHZpa2EgcmFtIiwKKyAgICAgICAgIkxlZnQiOiAiVmVuc3RlciIsCisgICAgICAgICJNaWRkbGUiOiAiTWl0dGVuIiwKKyAgICAgICAgIk51bWJlciBvZiBjb2x1bW5zIjogIkFudGFsIGtvbHVtbmVyIiwKKyAgICAgICAgIk51bWJlciBvZiByb3dzIjogIkFudGFsIHJhZGVyIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIlBlcmNlbnQiOiAiUHJvY2VudCIsCisgICAgICAgICJQaXhlbHMiOiAiUGl4bGFyIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiVGFiZWxscG9zaXRpb24iLAorICAgICAgICAiUmlnaHQiOiAiSMO2Z2VyIiwKKyAgICAgICAgIlJvd3M6IjogIlJhZGVyOiIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIlV0cnltbWUgbWVsbGFuIGNlbGxlciIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIlV0cnltbWUgbWVsbGFuIHJhbSBvY2ggY2VsbGlubmVow6VsbCIsCisgICAgICAgICJTcGFjaW5nIjogIk1lbGxhbnJ1bSIsCisgICAgICAgICJUb3AiOiAiw5Z2ZXJrYW50IiwKKyAgICAgICAgIldpZHRoIG9mIHRoZSB0YWJsZSI6ICJUYWJlbGxicmVkZCIsCisgICAgICAgICJXaWR0aCB1bml0IjogIkJyZWRkZW5oZXRlciIsCisgICAgICAgICJXaWR0aDoiOiAiQnJlZGQ6IiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiQW5nZSBhbnRhbCBrb2x1bW5lciIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIkFuZ2UgZW50YWwgcmFkZXIiCisgICAgfSwKKyAgICAiTGlua2VyIjogeworICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiUmVkaWdlcmEgbMOkbmsiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiU2l6ZToiOiAiU3RvcmxlayIsCisgICAgICAgICJUYXJnZXQ6IjogIk3DpWw6IiwKKyAgICAgICAgIlVSTDoiOiAiU8O2a3bDpGc6IgorICAgIH0sCisgICAgIkxpc3RUeXBlIjogeworICAgICAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogIlbDpGxqIGxpc3R0eXAgKGbDtnIgbnVtcmVyYWRlIGxpc3RvcikiLAorICAgICAgICAiRGVjaW1hbCBudW1iZXJzIjogIkRlc2ltYWx0YWwiLAorICAgICAgICAiTG93ZXIgZ3JlZWsgbGV0dGVycyI6ICJTbcOlIGdyZWtpc2thIGJva3N0w6R2ZXIiLAorICAgICAgICAiTG93ZXIgbGF0aW4gbGV0dGVycyI6ICJTbcOlIGxhdGluc2thIGJva3N0w6R2ZXIiLAorICAgICAgICAiTG93ZXIgcm9tYW4gbnVtYmVycyI6ICJTbcOlIHJvbWVyc2thIHNpZmZyb3IiLAorICAgICAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICJTdG9yYSBsYXRpbnNrYSBib2tzdMOkdmVyIiwKKyAgICAgICAgIlVwcGVyIHJvbWFuIG51bWJlcnMiOiAiU3RvcmEgcm9tZXJza2Egc2lmZnJvciIKKyAgICB9LAorICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgICAgICJJbWFnZSBQcmV2aWV3IjogIkbDtnJoYW5kc2dyYW5za25pbmc6IiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk9wdGlvbnMiOiAiVsOkbGoiLAorICAgICAgICAiUHJldmlldyI6ICJGw7ZyaGFuZHNncmFuc2thIiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICLDlnBwbmEgYmlsZCBpIG55dHQgZsO2bnN0ZXIiCisgICAgfSwKKyAgICAiT3BlcmEiOiB7CisgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIkRlbm5hIGtuYXBwIGZ1bmdlcmFyIGVqIGkgTW96aWxsYWJhc2VyYWQgd2VibMOkc2FyZSwgYW52w6RuZCBpc3TDpGxsZXQgc25hYmJ0YW5nZW50ZXJuYSBDVFJMLVYgcMOlIHRhbmdlbnRib3JkZXQgZsO2ciBhdHQga2xpc3RyYSBpbi4iCisgICAgfSwKKyAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiCisgICAgfSwKKyAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJQZXJzaXN0ZW50U3RvcmFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiQ29weSI6ICJLb3BpZXJhIiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICJJbmZvZ2EgYmlsZCIKKyAgICB9LAorICAgICJRdWlja1RhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiCisgICAgfSwKKyAgICAiU2V0SWQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgIk9LIjogIk9LIgorICAgIH0sCisgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUmVwbGFjZSB3aXRoIjogIkVyc8OkdHQgbWVkOiIKKyAgICB9LAorICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgICAgICJPSyI6ICJPSyIKKyAgICB9LAorICAgICJUYWJsZU9wZXJhdGlvbnMiOiB7CisgICAgICAgICJBbGwgZm91ciBzaWRlcyI6ICJBbGxhIGZ5cmEgc2lkb3IiLAorICAgICAgICAiQm9yZGVycyI6ICJLYW50bGluamVyIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiQ2FwdGlvbiI6ICLDlnZlcnNrcmlmdCIsCisgICAgICAgICJDZWxsIFByb3BlcnRpZXMiOiAiQ2VsbGVnZW5za2FwZXIiLAorICAgICAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogIkVnZW5za2FwZXIgZm9yIGNlbGwiLAorICAgICAgICAiRGVsZXRlIGNlbGwiOiAiUmFkZXJhIGNlbGwiLAorICAgICAgICAiRGVsZXRlIGNvbHVtbiI6ICJSYWRlcmEga29sdW1uIiwKKyAgICAgICAgIkRlbGV0ZSByb3ciOiAiUmFkZXJhIHJhZCIsCisgICAgICAgICJEZXNjcmlwdGlvbiI6ICJCZXNrcml2bmluZyIsCisgICAgICAgICJGcmFtZXMiOiAicmFtYXIiLAorICAgICAgICAiSW5zZXJ0IGNlbGwgYWZ0ZXIiOiAiSW5mb2dhIGNlbGwgZWZ0ZXIiLAorICAgICAgICAiSW5zZXJ0IGNlbGwgYmVmb3JlIjogIkluZm9nYSBjZWxsIGbDtnJlIiwKKyAgICAgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAiSW5mb2dhIGtvbHVtbiBlZnRlciIsCisgICAgICAgICJJbnNlcnQgY29sdW1uIGJlZm9yZSI6ICJJbmZvZ2Ega29sdW1uIGbDtnJlIiwKKyAgICAgICAgIkluc2VydCByb3cgYWZ0ZXIiOiAiSW5mb2dhIHJhZCBlZnRlciIsCisgICAgICAgICJJbnNlcnQgcm93IGJlZm9yZSI6ICJJbmZvZ2EgcmFkIGbDtnJlIiwKKyAgICAgICAgIk1lcmdlIGNlbGxzIjogIlNsw6Ugc2FtbWFuIGNlbGxlciIsCisgICAgICAgICJObyBydWxlcyI6ICJJbmdlbiBsaW5qYWwiLAorICAgICAgICAiTm8gc2lkZXMiOiAiSW5nYSBzaWRvciIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJQYWRkaW5nIjogIkx1ZnQiLAorICAgICAgICAiUGxlYXNlIGNsaWNrIGludG8gc29tZSBjZWxsIjogIktsaWNrYSBpIHZhbGZyaSBjZWxsIiwKKyAgICAgICAgIlJvdyBQcm9wZXJ0aWVzIjogIkVnZW5za2FwZXIgZm9yIHJhZCIsCisgICAgICAgICJSb3cgcHJvcGVydGllcyI6ICJFZ2Vuc2thcGVyIGbDtnIgcmFkIiwKKyAgICAgICAgIlJvd3MiOiAiUmFkZXI6IiwKKyAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAiTGluamFsZXIga29tbWVyIGF0dCBzeW5hcyBtZWxsYW4gYWxsYSByYWRlciBvY2gga29sdW1uZXIiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBjb2x1bW5zIG9ubHkiOiAiTGluamFsZXIga29tbWVyIGVuYmFydCBzeW5hcyBtZWxsYW4ga29sdW1uZXIiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiByb3dzIG9ubHkiOiAiTGluamFsZXIga29tbWVyIGVuYmFydCBzeW5hcyBtZWxsYW4gcmFkZXIiLAorICAgICAgICAiU3BhY2luZyI6ICJNZWxsYW5ydW0iLAorICAgICAgICAiU3BhY2luZyBhbmQgcGFkZGluZyI6ICJNZWxsYW5ydW0gb2NoIGx1ZnQiLAorICAgICAgICAiU3BsaXQgY29sdW1uIjogIkRlbGEga29sdW1uIiwKKyAgICAgICAgIlNwbGl0IHJvdyI6ICJEZWxhIHJhZCIsCisgICAgICAgICJTdW1tYXJ5IjogIlNhbW1hbmRyYWciLAorICAgICAgICAiVGFibGUgUHJvcGVydGllcyI6ICJUYWJlbGxlZ2Vuc2thcGVyIiwKKyAgICAgICAgIlRhYmxlIHByb3BlcnRpZXMiOiAiVGFiZWxsZWdlbnNrYXBlciIsCisgICAgICAgICJUaGUgYm90dG9tIHNpZGUgb25seSI6ICJOZWRlcmthbnRlbiBlbmJhcnQiLAorICAgICAgICAiVGhlIGxlZnQtaGFuZCBzaWRlIG9ubHkiOiAiVsOkbnN0ZXJzaWRhbiBlbmJhcnQiLAorICAgICAgICAiVGhlIHJpZ2h0IGFuZCBsZWZ0IHNpZGVzIG9ubHkiOiAiSMO2Z2VyLSBvY2ggdsOkbnN0ZXJzaWRhbiBlbmJhcnQiLAorICAgICAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIkjDtmdlcnNpZGFuIGVuYmFydCIsCisgICAgICAgICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSI6ICLDlnZlci0gb2NoIG5lZGVya2FudGVuIGVuYmFydCIsCisgICAgICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICLDlnZlcmthbnRlbiBlbmJhcnQiLAorICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY2VsbCBpbiByb3cuIjogIlhpbmhhIG5la2FyIGF0dCByYWRlcmEgc2lzdGEgY2VsbGVuIGkgdGFiZWxsZW4uIiwKKyAgICAgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iOiAiWGluaGEgbmVrYXIgYXR0IHJhZGVyYSBzaXN0YSBrb2x1bW5lbiBpIHRhYmVsbGVuLiIsCisgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIlhpbmhhIG5la2FyIGF0dCByYWRlcmEgc2lzdGEgcmFkZW4gaSB0YWJlbGxlbi4iLAorICAgICAgICAicGl4ZWxzIjogImJpbGRwdW5rdGVyIgorICAgIH0sCisgICAgIlRlbXBsYXRlIjogeworICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIKKyAgICB9LAorICAgICJVbkZvcm1hdCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiT0siOiAiT0siCisgICAgfSwKKyAgICAiWGluaGEiOiB7CisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJPbSBkZW5uYSBlZGl0b3IiLAorICAgICAgICAiQmFja2dyb3VuZCBDb2xvciI6ICJCYWtncnVuZHNmw6RyZyIsCisgICAgICAgICJCb2xkIjogIkZldCIsCisgICAgICAgICJCdWxsZXRlZCBMaXN0IjogIlB1bmt0bGlzdGEiLAorICAgICAgICAiQ2xlYW4gY29udGVudCBwYXN0ZWQgZnJvbSBXb3JkIjogIlJlbnNhIGlubmVow6VsbCBpbmtsaXN0cmF0IGZyw6VuIE1TIFdvcmQiLAorICAgICAgICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiUmVuc2EgaW5iw6RkZGFkIHR5cHNuaXR0c2luZm9ybWF0aW9uIiwKKyAgICAgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiU3TDpGRhIGJvcnQgTVMgT2ZmaWNlIHRhZ2dhciIsCisgICAgICAgICJDbG9zZSI6ICJTdMOkbmciLAorICAgICAgICAiQ29weSBzZWxlY3Rpb24iOiAiS29waWVyYSAgbWFya2VyaW5nIiwKKyAgICAgICAgIkNyZWF0ZSBUb29sYmFyIjogIlNrYXBhciB2ZXJrdHlnc3BhbmVsIiwKKyAgICAgICAgIkN1cnJlbnQgc3R5bGUiOiAiTnV2YXJhbmRlIHN0aWwiLAorICAgICAgICAiQ3V0IHNlbGVjdGlvbiI6ICJLbGlwcCB1dCBtYXJrZXJpbmciLAorICAgICAgICAiRGVjcmVhc2UgSW5kZW50IjogIk1pbnNrYSBpbmRyYWciLAorICAgICAgICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiVsOkbnN0ZXIgdGlsbCBow7ZnZXIiLAorICAgICAgICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiSMO2Z2VyIHRpbGwgdsOkbnN0ZXIiLAorICAgICAgICAiRm9udCBDb2xvciI6ICJUZXh0ZsOkcmciLAorICAgICAgICAiSGVhZGluZ3MiOiAiU2thcGEgc3RhbmRhcmRydWJyaWsiLAorICAgICAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiSGrDpGxwIiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICJWw6VncsOkdCBsaW5qZSIsCisgICAgICAgICJJbmNyZWFzZSBJbmRlbnQiOiAiw5ZrYSBpbmRyYWciLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIkluZm9nYSB0YWJlbGwiLAorICAgICAgICAiSW5zZXJ0IFdlYiBMaW5rIjogIkluZm9nYSBsw6RuayIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIkluZm9nYSBiaWxkIiwKKyAgICAgICAgIkluc2VydC9PdmVyd3JpdGUiOiAiSW5mb2dhL1Nrcml2IMO2dmVyIiwKKyAgICAgICAgIkl0YWxpYyI6ICJLdXJzaXYiLAorICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiQ2VudHJlcmEiLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIk1hcmdpbmFsanVzdGVyYSIsCisgICAgICAgICJKdXN0aWZ5IExlZnQiOiAiVsOkbnN0ZXJqdXN0ZXJhIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAiSMO2Z2VyanVzdGVyYSIsCisgICAgICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiU25hYmJ0YW5nZW50ZXIiLAorICAgICAgICAiT3JkZXJlZCBMaXN0IjogIk51bXJlcmFkIGxpc3RhIiwKKyAgICAgICAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIktsaXN0cmEgaW4iLAorICAgICAgICAiUGF0aCI6ICJPYmpla3QiLAorICAgICAgICAiUHJpbnQgZG9jdW1lbnQiOiAiU2tyaXYgdXQiLAorICAgICAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiVXBwcmVwYSBrb21tYW5kbyIsCisgICAgICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICJSZW5zYSBmb3JtYXR0ZXJpbmciLAorICAgICAgICAiU2VsZWN0IGFsbCI6ICJNYXJrZXJhIGFsbHQiLAorICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiQWt0aXZlcmEgcGFyYWdyYWZsw6RnZSIsCisgICAgICAgICJTcGxpdCBCbG9jayI6ICJEZWxhIGJsb2NrIiwKKyAgICAgICAgIlN0cmlrZXRocm91Z2giOiAiR2Vub21zdHJ1a2VuIiwKKyAgICAgICAgIlN1YnNjcmlwdCI6ICJOZWRzw6Rua3QiLAorICAgICAgICAiU3VwZXJzY3JpcHQiOiAiVXBwaMO2amQiLAorICAgICAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogIkVkaXRvcm4gbnl0dGphciBmw7ZsamFuZGUga29tYmluYXRpb25lcjoiLAorICAgICAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiT2JqZWt0cmFtYXIiLAorICAgICAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIlZpc2Ega8OkbGxrb2QiLAorICAgICAgICAiVW5kZXJsaW5lIjogIlVuZGVyc3RydWtlbiIsCisgICAgICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLDhW5ncmEga29tbWFuZG8iLAorICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICJUYSBib3J0IGFsbCB0ZXh0ZsOkcmdlciA/IiwKKyAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIlJhZGVyYSBhbGxhIGZvbnRzdG9ybGVrYXIgPyIsCisgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiUmFkZXJhIGFsbGEgdHlwc25pdHRzaW5mb3JtYXRpb24gPyIsCisgICAgICAgICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiRHUgYmVmaW5uZXIgZGlnIGkgdGV4bMOkZ2UuIEtsaWNrYSBww6UgaWtvbmVuIFs8Pl0gb3ZhbiBmw7ZyIGF0dCB2w6R4bGEgdGlsbGJha2EgdGlsbCBXWVNJV0lHIGzDpGdlIiwKKyAgICAgICAgImluc2VydCBsaW5lYnJlYWsiOiAiSW5mb2dhIHJhZGJyeXRuaW5nICIsCisgICAgICAgICJuZXcgcGFyYWdyYXBoIjogIk55IHBhcmFncmFmICIKKyAgICB9LAorICAgICJfX05FV19UUkFOU0xBVElPTlNfXyI6IHsKKyAgICAgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgICAgICJBYmJyZXZpYXRpb24iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiIiwKKyAgICAgICAgICAgICJFeHBhbnNpb246IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJDb3VudGVyIjogeworICAgICAgICAgICAgIi4uLiBpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIkNoYXJzIjogIiIsCisgICAgICAgICAgICAiSFRNTCI6ICIiLAorICAgICAgICAgICAgIldvcmRzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbG9yUGlja2VyIjogeworICAgICAgICAgICAgIkNsaWNrIGEgY29sb3IuLi4iOiAiIiwKKyAgICAgICAgICAgICJTYW1wbGUiOiAiIiwKKyAgICAgICAgICAgICJXZWIgU2FmZTogIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNvbnRleHRNZW51IjogeworICAgICAgICAgICAgIkRlbGV0ZSBDZWxsIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEZWZpbml0aW9uTGlzdCI6IHsKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGRlc2NyaXB0aW9uIjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiBsaXN0IjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiB0ZXJtIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRpYWxvZ3MiOiB7CisgICAgICAgICAgICAiU29tZSBUZXh0IEhlcmUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRHluYW1pY0NTUyI6IHsKKyAgICAgICAgICAgICJDaG9vc2Ugc3R5bGVzaGVldCI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQiOiAiIiwKKyAgICAgICAgICAgICJVbmRlZmluZWQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgICAgICJFZGl0IEhUTUwgZm9yIHNlbGVjdGVkIHRleHQiOiAiIiwKKyAgICAgICAgICAgICJFZGl0IFRhZyBCeSBQZWciOiAiIiwKKyAgICAgICAgICAgICJUYWcgRWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVxdWF0aW9uIjogeworICAgICAgICAgICAgIiE9IjogIiIsCisgICAgICAgICAgICAiIWluIjogIiIsCisgICAgICAgICAgICAiJmd0Oy0iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiJmx0O3gmZ3Q7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAhYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYC5gICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAyYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDNgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA1YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDZgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgN2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA4YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgZWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7Jm5ic3A7YDFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Arezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLTpcXCBgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC17Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BDYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Bjb3NgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGxuYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BwaWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHNpbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGFuYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0aW1lc2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImcXVvdDt0ZXh0JnF1b3Q7IjogIiIsCisgICAgICAgICAgICAiJytmb3JtdWxhKyciOiAiIiwKKyAgICAgICAgICAgICIoKG4pLChrKSkiOiAiIiwKKyAgICAgICAgICAgICIoeCsxKS8oeC0xKSI6ICIiLAorICAgICAgICAgICAgIioiOiAiIiwKKyAgICAgICAgICAgICIqKiI6ICIiLAorICAgICAgICAgICAgIistIjogIiIsCisgICAgICAgICAgICAiLSZndDsiOiAiIiwKKyAgICAgICAgICAgICItJmx0OyI6ICIiLAorICAgICAgICAgICAgIi06IjogIiIsCisgICAgICAgICAgICAiLT0iOiAiIiwKKyAgICAgICAgICAgICIvLyI6ICIiLAorICAgICAgICAgICAgIi9fIjogIiIsCisgICAgICAgICAgICAiOi4iOiAiIiwKKyAgICAgICAgICAgICI9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIkAiOiAiIiwKKyAgICAgICAgICAgICJbW2EsYl0sW2MsZF1dIjogIiIsCisgICAgICAgICAgICAiXFxcXCI6ICIiLAorICAgICAgICAgICAgIlxcbkNsaWNrIGluIHRoZSBib3ggdG8gdXNlIHlvdXIga2V5Ym9hcmQgb3IgdXNlIHRoZSBidXR0b25zXFxuIjogIiIsCisgICAgICAgICAgICAiXl4iOiAiIiwKKyAgICAgICAgICAgICJeXl4iOiAiIiwKKyAgICAgICAgICAgICJfX3wiOiAiIiwKKyAgICAgICAgICAgICJffF8iOiAiIiwKKyAgICAgICAgICAgICJgIT1gIjogIiIsCisgICAgICAgICAgICAiYCFpbmAiOiAiIiwKKyAgICAgICAgICAgICJgJmFuZDtgIjogIiIsCisgICAgICAgICAgICAiYCZjYXA7YCI6ICIiLAorICAgICAgICAgICAgImAmY3VwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oy1gIjogIiIsCisgICAgICAgICAgICAiYCZndDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PSZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7eCZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZvcjtgIjogIiIsCisgICAgICAgICAgICAiYCZxdW90O3RleHQmcXVvdDtgIjogIiIsCisgICAgICAgICAgICAiYCgobiksKGspKWAiOiAiIiwKKyAgICAgICAgICAgICJgKHgrMSkvKHgtMSlgIjogIiIsCisgICAgICAgICAgICAiYCoqYCI6ICIiLAorICAgICAgICAgICAgImAqYCI6ICIiLAorICAgICAgICAgICAgImArLWAiOiAiIiwKKyAgICAgICAgICAgICJgLSZndDtgIjogIiIsCisgICAgICAgICAgICAiYC0mbHQ7YCI6ICIiLAorICAgICAgICAgICAgImAtOmAiOiAiIiwKKyAgICAgICAgICAgICJgLT1gIjogIiIsCisgICAgICAgICAgICAiYC8vYCI6ICIiLAorICAgICAgICAgICAgImAvX2AiOiAiIiwKKyAgICAgICAgICAgICJgOi5gIjogIiIsCisgICAgICAgICAgICAiYD0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImBAYCI6ICIiLAorICAgICAgICAgICAgImBbW2EsYl0sW2MsZF1dYCI6ICIiLAorICAgICAgICAgICAgImBcXFxcYCI6ICIiLAorICAgICAgICAgICAgImBfX3xgIjogIiIsCisgICAgICAgICAgICAiYF98X2AiOiAiIiwKKyAgICAgICAgICAgICJgQUFgIjogIiIsCisgICAgICAgICAgICAiYGFsZXBoYCI6ICIiLAorICAgICAgICAgICAgImBhbHBoYWAiOiAiIiwKKyAgICAgICAgICAgICJgYW5kYCI6ICIiLAorICAgICAgICAgICAgImBiYXJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJldGFgIjogIiIsCisgICAgICAgICAgICAiYENDYCI6ICIiLAorICAgICAgICAgICAgImBjY2FgIjogIiIsCisgICAgICAgICAgICAiYGNoaWAiOiAiIiwKKyAgICAgICAgICAgICJgZGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgZGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbGAiOiAiIiwKKyAgICAgICAgICAgICJgRGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkaWFtb25kYCI6ICIiLAorICAgICAgICAgICAgImBkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkeS9keGAiOiAiIiwKKyAgICAgICAgICAgICJgRUVgIjogIiIsCisgICAgICAgICAgICAiYGVwc2lgIjogIiIsCisgICAgICAgICAgICAiYGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZnJhYCI6ICIiLAorICAgICAgICAgICAgImBHYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdyYWRgIjogIiIsCisgICAgICAgICAgICAiYGhhcnJgIjogIiIsCisgICAgICAgICAgICAiYGhBcnJgIjogIiIsCisgICAgICAgICAgICAiYGhhdGFgIjogIiIsCisgICAgICAgICAgICAiYGlmYCI6ICIiLAorICAgICAgICAgICAgImBpbmAiOiAiIiwKKyAgICAgICAgICAgICJgaW50YCI6ICIiLAorICAgICAgICAgICAgImBpb3RhYCI6ICIiLAorICAgICAgICAgICAgImBrYXBwYWAiOiAiIiwKKyAgICAgICAgICAgICJgbGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBMYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYGxBcnJgIjogIiIsCisgICAgICAgICAgICAiYGxhcnJgIjogIiIsCisgICAgICAgICAgICAiYGxpbV8oeC0mZ3Q7b28pYCI6ICIiLAorICAgICAgICAgICAgImBsb2dgIjogIiIsCisgICAgICAgICAgICAiYG11YCI6ICIiLAorICAgICAgICAgICAgImBOTmAiOiAiIiwKKyAgICAgICAgICAgICJgbm5gIjogIiIsCisgICAgICAgICAgICAiYG5vdGAiOiAiIiwKKyAgICAgICAgICAgICJgbnVgIjogIiIsCisgICAgICAgICAgICAiYG8rYCI6ICIiLAorICAgICAgICAgICAgImBvLmAiOiAiIiwKKyAgICAgICAgICAgICJgTy9gIjogIiIsCisgICAgICAgICAgICAiYG9pbnRgIjogIiIsCisgICAgICAgICAgICAiYG9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBPbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgb29gIjogIiIsCisgICAgICAgICAgICAiYG9yYCI6ICIiLAorICAgICAgICAgICAgImBveGAiOiAiIiwKKyAgICAgICAgICAgICJgUGhpYCI6ICIiLAorICAgICAgICAgICAgImBwaGlgIjogIiIsCisgICAgICAgICAgICAiYFBpYCI6ICIiLAorICAgICAgICAgICAgImBwaWAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvZGAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvcGAiOiAiIiwKKyAgICAgICAgICAgICJgUHNpYCI6ICIiLAorICAgICAgICAgICAgImBwc2lgIjogIiIsCisgICAgICAgICAgICAiYFFRYCI6ICIiLAorICAgICAgICAgICAgImBxdWFkYCI6ICIiLAorICAgICAgICAgICAgImByQXJyYCI6ICIiLAorICAgICAgICAgICAgImByaG9gIjogIiIsCisgICAgICAgICAgICAiYHJvb3QobikoeClgIjogIiIsCisgICAgICAgICAgICAiYFJSYCI6ICIiLAorICAgICAgICAgICAgImBzZmFgIjogIiIsCisgICAgICAgICAgICAiYHNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBTaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgc3FydCh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgc3F1YXJlYCI6ICIiLAorICAgICAgICAgICAgImBzdGFja3JlbCgtJmd0OykoKylgIjogIiIsCisgICAgICAgICAgICAiYHN1YmAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VtYCI6ICIiLAorICAgICAgICAgICAgImBzdXBgIjogIiIsCisgICAgICAgICAgICAiYHN1cGVgIjogIiIsCisgICAgICAgICAgICAiYHRhdWAiOiAiIiwKKyAgICAgICAgICAgICJgVGhldGFgIjogIiIsCisgICAgICAgICAgICAiYHRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImBUVGAiOiAiIiwKKyAgICAgICAgICAgICJgdHRhYCI6ICIiLAorICAgICAgICAgICAgImB1YXJyYCI6ICIiLAorICAgICAgICAgICAgImB1bGFgIjogIiIsCisgICAgICAgICAgICAiYHVwc2lsb25gIjogIiIsCisgICAgICAgICAgICAiYHV1YCI6ICIiLAorICAgICAgICAgICAgImB2ZWNhYCI6ICIiLAorICAgICAgICAgICAgImB2dmAiOiAiIiwKKyAgICAgICAgICAgICJgeF8obW4pYCI6ICIiLAorICAgICAgICAgICAgImBYaWAiOiAiIiwKKyAgICAgICAgICAgICJgeGlgIjogIiIsCisgICAgICAgICAgICAiYHh4YCI6ICIiLAorICAgICAgICAgICAgImB6ZXRhYCI6ICIiLAorICAgICAgICAgICAgImBaWmAiOiAiIiwKKyAgICAgICAgICAgICJgfC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImB8LS1gIjogIiIsCisgICAgICAgICAgICAiYHw9PWAiOiAiIiwKKyAgICAgICAgICAgICJgfF9fYCI6ICIiLAorICAgICAgICAgICAgImB8fmAiOiAiIiwKKyAgICAgICAgICAgICJgfj1gIjogIiIsCisgICAgICAgICAgICAiYH58YCI6ICIiLAorICAgICAgICAgICAgImB+fmAiOiAiIiwKKyAgICAgICAgICAgICJBQSI6ICIiLAorICAgICAgICAgICAgImFsZXBoIjogIiIsCisgICAgICAgICAgICAiYWxwaGEiOiAiIiwKKyAgICAgICAgICAgICJhbmQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGggRm9ybXVsYSBJbnB1dCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aE1MIEV4YW1wbGUiOiAiIiwKKyAgICAgICAgICAgICJiYXJhIjogIiIsCisgICAgICAgICAgICAiQmFzZWQgb24gQVNDSUlNYXRoTUwgYnkiOiAiIiwKKyAgICAgICAgICAgICJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiYmJhIjogIiIsCisgICAgICAgICAgICAiYmV0YSI6ICIiLAorICAgICAgICAgICAgIkNDIjogIiIsCisgICAgICAgICAgICAiY2NhIjogIiIsCisgICAgICAgICAgICAiY2hpIjogIiIsCisgICAgICAgICAgICAiZGFyciI6ICIiLAorICAgICAgICAgICAgImRkb3RhIjogIiIsCisgICAgICAgICAgICAiZGVsIjogIiIsCisgICAgICAgICAgICAiRGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJkZWx0YSI6ICIiLAorICAgICAgICAgICAgImRpYW1vbmQiOiAiIiwKKyAgICAgICAgICAgICJkb3RhIjogIiIsCisgICAgICAgICAgICAiZHkvZHgiOiAiIiwKKyAgICAgICAgICAgICJFRSI6ICIiLAorICAgICAgICAgICAgImVwc2kiOiAiIiwKKyAgICAgICAgICAgICJldGEiOiAiIiwKKyAgICAgICAgICAgICJGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBBc2NpaU1hdGhNTCB2aXNpdCB0aGlzIHBhZ2U6IjogIiIsCisgICAgICAgICAgICAiRm9ybXVsYSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJmcmEiOiAiIiwKKyAgICAgICAgICAgICJnYW1tYSI6ICIiLAorICAgICAgICAgICAgIkdhbW1hIjogIiIsCisgICAgICAgICAgICAiZ3JhZCI6ICIiLAorICAgICAgICAgICAgImhBcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXJyIjogIiIsCisgICAgICAgICAgICAiaGF0YSI6ICIiLAorICAgICAgICAgICAgImlmIjogIiIsCisgICAgICAgICAgICAiaW4iOiAiIiwKKyAgICAgICAgICAgICJJbnB1dCI6ICIiLAorICAgICAgICAgICAgImludCI6ICIiLAorICAgICAgICAgICAgImludF9hXmJmKHgpZHgiOiAiIiwKKyAgICAgICAgICAgICJpb3RhIjogIiIsCisgICAgICAgICAgICAia2FwcGEiOiAiIiwKKyAgICAgICAgICAgICJMYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsYXJyIjogIiIsCisgICAgICAgICAgICAibEFyciI6ICIiLAorICAgICAgICAgICAgImxpbV8oeC0mZ3Q7b28pIjogIiIsCisgICAgICAgICAgICAibXUiOiAiIiwKKyAgICAgICAgICAgICJOTiI6ICIiLAorICAgICAgICAgICAgIm5uIjogIiIsCisgICAgICAgICAgICAibm5uIjogIiIsCisgICAgICAgICAgICAibm90IjogIiIsCisgICAgICAgICAgICAibnUiOiAiIiwKKyAgICAgICAgICAgICJvKyI6ICIiLAorICAgICAgICAgICAgIm8uIjogIiIsCisgICAgICAgICAgICAiTy8iOiAiIiwKKyAgICAgICAgICAgICJvaW50IjogIiIsCisgICAgICAgICAgICAib21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJPbWVnYSI6ICIiLAorICAgICAgICAgICAgIm9vIjogIiIsCisgICAgICAgICAgICAib3IiOiAiIiwKKyAgICAgICAgICAgICJveCI6ICIiLAorICAgICAgICAgICAgIlBoaSI6ICIiLAorICAgICAgICAgICAgInBoaSI6ICIiLAorICAgICAgICAgICAgInBpIjogIiIsCisgICAgICAgICAgICAiUGkiOiAiIiwKKyAgICAgICAgICAgICJwcm9kIjogIiIsCisgICAgICAgICAgICAicHJvcCI6ICIiLAorICAgICAgICAgICAgInBzaSI6ICIiLAorICAgICAgICAgICAgIlBzaSI6ICIiLAorICAgICAgICAgICAgIlFRIjogIiIsCisgICAgICAgICAgICAicXVhZCI6ICIiLAorICAgICAgICAgICAgInJBcnIiOiAiIiwKKyAgICAgICAgICAgICJyaG8iOiAiIiwKKyAgICAgICAgICAgICJyb290KG4pKHgpIjogIiIsCisgICAgICAgICAgICAiUlIiOiAiIiwKKyAgICAgICAgICAgICJzZmEiOiAiIiwKKyAgICAgICAgICAgICJzaWdtYSI6ICIiLAorICAgICAgICAgICAgIlNpZ21hIjogIiIsCisgICAgICAgICAgICAic3FydCh4KSI6ICIiLAorICAgICAgICAgICAgInNxdWFyZSI6ICIiLAorICAgICAgICAgICAgInN0YWNrcmVsKC0mZ3Q7KSgrKSI6ICIiLAorICAgICAgICAgICAgInN1YiI6ICIiLAorICAgICAgICAgICAgInN1YmUiOiAiIiwKKyAgICAgICAgICAgICJzdW0iOiAiIiwKKyAgICAgICAgICAgICJzdW1fKG49MSleb28iOiAiIiwKKyAgICAgICAgICAgICJzdXAiOiAiIiwKKyAgICAgICAgICAgICJzdXBlIjogIiIsCisgICAgICAgICAgICAidGF1IjogIiIsCisgICAgICAgICAgICAiVGhldGEiOiAiIiwKKyAgICAgICAgICAgICJ0aGV0YSI6ICIiLAorICAgICAgICAgICAgIlRUIjogIiIsCisgICAgICAgICAgICAidHRhIjogIiIsCisgICAgICAgICAgICAidWFyciI6ICIiLAorICAgICAgICAgICAgInVsYSI6ICIiLAorICAgICAgICAgICAgInVwc2lsb24iOiAiIiwKKyAgICAgICAgICAgICJ1dSI6ICIiLAorICAgICAgICAgICAgInV1dSI6ICIiLAorICAgICAgICAgICAgInZlY2EiOiAiIiwKKyAgICAgICAgICAgICJ2diI6ICIiLAorICAgICAgICAgICAgInZ2diI6ICIiLAorICAgICAgICAgICAgInheKG0rbikiOiAiIiwKKyAgICAgICAgICAgICJ4XyhtbikiOiAiIiwKKyAgICAgICAgICAgICJYaSI6ICIiLAorICAgICAgICAgICAgInhpIjogIiIsCisgICAgICAgICAgICAieHgiOiAiIiwKKyAgICAgICAgICAgICJ6ZXRhIjogIiIsCisgICAgICAgICAgICAiWloiOiAiIiwKKyAgICAgICAgICAgICJ8LSZndDsiOiAiIiwKKyAgICAgICAgICAgICJ8LS0iOiAiIiwKKyAgICAgICAgICAgICJ8PT0iOiAiIiwKKyAgICAgICAgICAgICJ8X18iOiAiIiwKKyAgICAgICAgICAgICJ8fiI6ICIiLAorICAgICAgICAgICAgIn49IjogIiIsCisgICAgICAgICAgICAifnwiOiAiIiwKKyAgICAgICAgICAgICJ+fiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGYW5jeVNlbGVjdHMiOiB7CisgICAgICAgICAgICAiJytvcHQudGV4dCsnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbmRSZXBsYWNlIjogeworICAgICAgICAgICAgIic7XHJcbiAgdmFyIHRhZ2MgPSAnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1PcGVyYXRpb25zIjogeworICAgICAgICAgICAgIkVudGVyIHRoZSBuYW1lIGZvciBuZXcgb3B0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgY2hlY2sgYm94LiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIEZvcm0uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbXVsdGktbGluZSB0ZXh0IGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHJhZGlvIGJ1dHRvbi4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzZWxlY3QgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgc3VibWl0L3Jlc2V0IGJ1dHRvbi4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSB0ZXh0LCBwYXNzd29yZCBvciBoaWRkZW4gZmllbGQuIjogIiIsCisgICAgICAgICAgICAiTWVzc2FnZSBTZW50IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIFNlbGVjdC4uLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGb3JtcyI6IHsKKyAgICAgICAgICAgICInb25DbGljayc9IjogIiIsCisgICAgICAgICAgICAiQWNjZXNzIEtleToiOiAiIiwKKyAgICAgICAgICAgICJBY3Rpb24gVVJMOiI6ICIiLAorICAgICAgICAgICAgIkJ1dHRvbiBTY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJDaGVja2VkIjogIiIsCisgICAgICAgICAgICAiQ29sdW1uczoiOiAiIiwKKyAgICAgICAgICAgICJEZWZhdWx0IHRleHQgKG9wdGlvbmFsKSI6ICIiLAorICAgICAgICAgICAgIkRpbWVuc2lvbnMiOiAiIiwKKyAgICAgICAgICAgICJEaXNhYmxlZCI6ICIiLAorICAgICAgICAgICAgIkVuY29kaW5nOiI6ICIiLAorICAgICAgICAgICAgIkZvciBDb250cm9sOiI6ICIiLAorICAgICAgICAgICAgIkZvcm0iOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IEZJRUxEU0VUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBJTlBVVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IFNFTEVDVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogVEVYVEFSRUEiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIGhhbmRsZXIgc2NyaXB0IjogIiIsCisgICAgICAgICAgICAiRm9ybSBOYW1lOiI6ICIiLAorICAgICAgICAgICAgIkdldCI6ICIiLAorICAgICAgICAgICAgIkhhcmQiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQgaW4gbnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJIVE1MLUZvcm0gdG8gQ0dJIChkZWZhdWx0KSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIHNvdXJjZSI6ICIiLAorICAgICAgICAgICAgIkluaXRpYWwgVGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IEZJRUxEU0VUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IElOUFVUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IExBQkVMIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFNFTEVDVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkphdmFzY3JpcHQgZm9yIGJ1dHRvbiBjbGljayI6ICIiLAorICAgICAgICAgICAgIkxhYmVsOiI6ICIiLAorICAgICAgICAgICAgIkxlZ2VuZDoiOiAiIiwKKyAgICAgICAgICAgICJNYXggbGVuZ3RoOiI6ICIiLAorICAgICAgICAgICAgIk1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWNjZXB0ZWQiOiAiIiwKKyAgICAgICAgICAgICJNZXRob2Q6IjogIiIsCisgICAgICAgICAgICAibXVsdGlwYXJ0IEZvcm0gRGF0YSAoRmlsZS1VcGxvYWQpIjogIiIsCisgICAgICAgICAgICAiTmFtZSI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIm5hbWUgb2YgdGhlIHRleHRhcmVhIjogIiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiIiwKKyAgICAgICAgICAgICJub3JtYWwiOiAiIiwKKyAgICAgICAgICAgICJub3dyYXAiOiAiIiwKKyAgICAgICAgICAgICJPZmYiOiAiIiwKKyAgICAgICAgICAgICJQaHlzaWNhbCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciBhIExhYmVsIjogIiIsCisgICAgICAgICAgICAiUG9zdCI6ICIiLAorICAgICAgICAgICAgInByZSI6ICIiLAorICAgICAgICAgICAgIlJlYWQgT25seSI6ICIiLAorICAgICAgICAgICAgIlNpemUgb2YgdGV4dCBib3ggaW4gY2hhcmFjdGVycyI6ICIiLAorICAgICAgICAgICAgIlNvZnQiOiAiIiwKKyAgICAgICAgICAgICJUYWIgSW5kZXg6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IEZyYW1lOiI6ICIiLAorICAgICAgICAgICAgIlRleHQ6IjogIiIsCisgICAgICAgICAgICAiVVJMIG9mIGltYWdlIjogIiIsCisgICAgICAgICAgICAiVmFsdWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZToiOiAiIiwKKyAgICAgICAgICAgICJWaXJ0dWFsIjogIiIsCisgICAgICAgICAgICAiV2lkdGggaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJXcmFwIE1vZGU6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBOYW1lIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bGxQYWdlIjogeworICAgICAgICAgICAgIi4uLiI6ICIiLAorICAgICAgICAgICAgIkFsdGVybmF0ZSBzdHlsZS1zaGVldDoiOiAiIiwKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kIGNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkNoYXJhY3RlciBzZXQ6IjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKElTTy04ODU5LTUpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKEtPSTgtUikiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoV0lORE9XUy0xMjUxKSI6ICIiLAorICAgICAgICAgICAgIkRPQ1RZUEU6IjogIiIsCisgICAgICAgICAgICAiRG9jdW1lbnQgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIkRvY3VtZW50IHRpdGxlOiI6ICIiLAorICAgICAgICAgICAgIktleXdvcmRzOiI6ICIiLAorICAgICAgICAgICAgIlByaW1hcnkgc3R5bGUtc2hlZXQ6IjogIiIsCisgICAgICAgICAgICAiVGV4dCBjb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJVVEYtOCAocmVjb21tZW5kZWQpIjogIiIsCisgICAgICAgICAgICAid2VzdGVybiAoSVNPLTg4NTktMSkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiR2Vja28iOiB7CisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAgICAgIiYjeDAwZDc7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L2VkaXQgaG9yaXpvbnRhbCBydWxlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgSG9yaXpvbnRhbCBSdWxlIjogIiIsCisgICAgICAgICAgICAiTm8gc2hhZGluZyI6ICIiLAorICAgICAgICAgICAgIlN0eWxlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgICAgICJDU1MgU3R5bGUiOiAiIiwKKyAgICAgICAgICAgICItIjogIjw8RXF1YXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgICAgICJBbmNob3IgbmFtZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBBbmNob3IiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydEltYWdlIjogeworICAgICAgICAgICAgIkFic2JvdHRvbSI6ICIiLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICIiLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiIiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAgICAgIkluc2VydCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBmb290bm90ZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBOb3RlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBhZ2VicmVhayI6IHsKKyAgICAgICAgICAgICJQYWdlIGJyZWFrIjogIiIsCisgICAgICAgICAgICAiUGFnZSBCcmVhayI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbWlsZXkiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IFNtaWxleSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0IjogeworICAgICAgICAgICAgIlxcbiAgVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmdcXG4iOiAiIiwKKyAgICAgICAgICAgICJIaWRlIHByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgU25pcHBldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIiIsCisgICAgICAgICAgICAiTGluazEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMiI6ICIiLAorICAgICAgICAgICAgIkxpbmszIjogIiIsCisgICAgICAgICAgICAiTGluazQiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNSI6ICIiLAorICAgICAgICAgICAgIlNob3cgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nIjogIiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldDIiOiB7CisgICAgICAgICAgICAiQWxsIENhdGVnb3JpZXMiOiAiIiwKKyAgICAgICAgICAgICJGaWx0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMgSFRNTCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyB0ZW1wbGF0ZSB2YXJpYWJsZSI6ICIiLAorICAgICAgICAgICAgIk9ubHkgc2VhcmNoIHdvcmQgYmVnaW5uaW5nIjogIiIsCisgICAgICAgICAgICAiSFRNTCI6ICI8PENoYXJDb3VudGVyPj4iLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICI8PEluc2VydFNuaXBwZXQ+PiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgICAgICJDYXB0aW9uIGZvciB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZSBib3JkZXJzOiI6ICIiLAorICAgICAgICAgICAgIkVtIjogIiIsCisgICAgICAgICAgICAiTGF5b3UiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSBvZiB0aGUgYm9yZGVyIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IgorICAgICAgICB9LAorICAgICAgICAiTGFuZ01hcmtzIjogeworICAgICAgICAgICAgIiZtZGFzaDsgbGFuZ3VhZ2UgJm1kYXNoOyI6ICIiLAorICAgICAgICAgICAgIicsICciOiAiIiwKKyAgICAgICAgICAgICJFbmdsaXNoIjogIiIsCisgICAgICAgICAgICAiRnJlbmNoIjogIiIsCisgICAgICAgICAgICAiR3JlZWsiOiAiIiwKKyAgICAgICAgICAgICJsYW5ndWFnZSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJMYXRpbiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJMaW5rZXIiOiB7CisgICAgICAgICAgICAiKHB4KSI6ICIiLAorICAgICAgICAgICAgIkFuY2hvci1MaW5rIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIEFkZHJlc3M6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgTGluayI6ICIiLAorICAgICAgICAgICAgIkxvY2F0aW9uIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZW51IEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFRlbXBsYXRlOiI6ICIiLAorICAgICAgICAgICAgIk5ldyBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcmRpbmFyeSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUG9wdXAgV2luZG93IjogIiIsCisgICAgICAgICAgICAiUG9wdXBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgTGluayI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZWFibGU6IjogIiIsCisgICAgICAgICAgICAiU2FtZSBXaW5kb3cgKGp1bXAgb3V0IG9mIGZyYW1lcykiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGxiYXJzOiI6ICIiLAorICAgICAgICAgICAgIlNob3dzIE9uIEhvdmVyIjogIiIsCisgICAgICAgICAgICAiU3RhdHVzIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJTdWJqZWN0OiI6ICIiLAorICAgICAgICAgICAgIlRpdGxlOiI6ICIiLAorICAgICAgICAgICAgIlRvb2xiYXI6IjogIiIsCisgICAgICAgICAgICAiVVJMIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiIiwKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIk5hbWU6IjogIjw8Rm9ybXM+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk1vb3Rvb2xzRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICI8PExpbmtlcj4+IgorICAgICAgICB9LAorICAgICAgICAiT3BlcmEiOiB7CisgICAgICAgICAgICAiTUFSSyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQYXN0ZVRleHQiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IHRleHQgaW4gbmV3IHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIlBhc3RlIGFzIFBsYWluIFRleHQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUHJlc2VydmVTY3JpcHRzIjogeworICAgICAgICAgICAgIkphdmFTY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJQSFAiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUXVpY2tUYWciOiB7CisgICAgICAgICAgICAiJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsJzogJyI6ICIiLAorICAgICAgICAgICAgIkFUVFJJQlVURVMiOiAiIiwKKyAgICAgICAgICAgICJDb2xvcnMiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgVEFHIHlvdSB3YW50IHRvIGluc2VydCI6ICIiLAorICAgICAgICAgICAgIk5vIENTUyBjbGFzcyBhdmFpYWJsZSI6ICIiLAorICAgICAgICAgICAgIk9rIjogIiIsCisgICAgICAgICAgICAiT1BUSU9OUyI6ICIiLAorICAgICAgICAgICAgIlF1aWNrIFRhZyBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJUQUdzIjogIiIsCisgICAgICAgICAgICAiVGhlcmUgYXJlIHNvbWUgdW5jbG9zZWQgcXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIGF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgVEFHIjogIiIsCisgICAgICAgICAgICAiWW91IGhhdmUgdG8gc2VsZWN0IHNvbWUgdGV4dCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTYXZlU3VibWl0IjogeworICAgICAgICAgICAgImluIHByb2dyZXNzIjogIiIsCisgICAgICAgICAgICAiUmVhZHkiOiAiIiwKKyAgICAgICAgICAgICJTYXZlIjogIiIsCisgICAgICAgICAgICAiU2F2aW5nLi4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNldElkIjogeworICAgICAgICAgICAgIklEL05hbWU6IjogIiIsCisgICAgICAgICAgICAiU2V0IElkIGFuZCBOYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElkL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSUQvTmFtZSI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiU21hcnRSZXBsYWNlIjogeworICAgICAgICAgICAgIkNsb3NpbmdEb3VibGVRdW90ZXMiOiAiIiwKKyAgICAgICAgICAgICJDbG9zaW5nU2luZ2xlUXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJDb252ZXJ0IGFsbCBxdW90ZXMgYW5kIGRhc2hlcyBpbiB0aGUgY3VycmVudCBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBhdXRvbWF0aWMgcmVwbGFjZW1lbnRzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIk9wZW5pbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIlNtYXJ0UmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgIlNtYXJ0UmVwbGFjZSBTZXR0aW5ncyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTdHlsaXN0IjogeworICAgICAgICAgICAgIlN0eWxlcyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAgICAgIkNsZWFuIGJhZCBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQuIjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gU2VsZWN0aW9uIE9ubHkiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiB1cCBIVE1MIjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgU2NvcGUiOiAiIiwKKyAgICAgICAgICAgICJHZW5lcmFsIHRpZHkgdXAgYW5kIGNvcnJlY3Rpb24gb2Ygc29tZSBwcm9ibGVtcy4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc2VsZWN0IGZyb20gdGhlIGZvbGxvd2luZyBjbGVhbmluZyBvcHRpb25zLi4uIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHN0YW5kIGJ5IHdoaWxlIGNsZWFuaW5nIGluIHByb2Nlc3MuLi4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxpZ25tZW50IChsZWZ0L3JpZ2h0L2p1c3RpZnkpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgY2xhc3NlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgQWxsIEhUTUwgVGFncyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgc3R5bGVzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gZm9udCBzaXplcy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIHRleHQgY29sb3JzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdHlwZWZhY2VzIChmb250IFwic3R5bGVzXCIpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBlbXBoYXNpcyBhbmQgYW5ub3RhdGlvbnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGxhbmcgYXR0cmlidXRlcy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgUGFyYWdyYXBocyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMuIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSBkaXJlY3Rpb25hbCBxdW90ZSBtYXJrcyB3aXRoIG5vbi1kaXJlY3Rpb25hbCBxdW90ZSBtYXJrcy4iOiAiIiwKKyAgICAgICAgICAgICJWaWdvcm91c2x5IHB1cmdlIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAgICAgIkNlbGwgVHlwZToiOiAiIiwKKyAgICAgICAgICAgICJDZWxscyBkb3duIjogIiIsCisgICAgICAgICAgICAiQ2VsbHMgdG8gdGhlIHJpZ2h0LCBhbmQiOiAiIiwKKyAgICAgICAgICAgICJEbyBOb3QgQ2hhbmdlIjogIiIsCisgICAgICAgICAgICAiRnJhbWUgYW5kIGJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJIZWFkZXIgKHRoKSI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIGN1cnJlbnQgY2VsbCB3aXRoOiI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCAodGQpIjogIiIsCisgICAgICAgICAgICAiQ29sdW1ucyI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIjw8Q29udGV4dE1lbnU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuc2F2ZWRDaGFuZ2VzIjogeworICAgICAgICAgICAgIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgZWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIldlYktpdCI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiPDxHZWNrbz4+IgorICAgICAgICB9LAorICAgICAgICAiWGluaGEiOiB7CisgICAgICAgICAgICAiJiM4MjEyOyBmb250ICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiJiM4MjEyOyBzaXplICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICIxICg4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjIgKDEwIHB0KSI6ICIiLAorICAgICAgICAgICAgIjMgKDEyIHB0KSI6ICIiLAorICAgICAgICAgICAgIjQgKDE0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjUgKDE4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjYgKDI0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjcgKDM2IHB0KSI6ICIiLAorICAgICAgICAgICAgIkFkZHJlc3MiOiAiIiwKKyAgICAgICAgICAgICJBcmlhbCI6ICIiLAorICAgICAgICAgICAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAiIiwKKyAgICAgICAgICAgICJDb3VyaWVyIE5ldyI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBTdGF0dXNiYXIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTAgKHplcm8pIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0xIC4uIENUUkwtNiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtRSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtVSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtViI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWiI6ICIiLAorICAgICAgICAgICAgIkVkaXRvciBIZWxwIjogIiIsCisgICAgICAgICAgICAiRU5URVIiOiAiIiwKKyAgICAgICAgICAgICJFcnJvciBMb2FkaW5nIFhpbmhhLiAgRGV2ZWxvcGVycywgY2hlY2sgdGhlIEVycm9yIENvbnNvbGUgZm9yIGluZm9ybWF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGluZyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdHRlZCI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYXRlIFhpbmhhIGZyYW1ld29yayI6ICIiLAorICAgICAgICAgICAgIkdlb3JnaWEiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDEiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDIiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDMiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDQiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDUiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDYiOiAiIiwKKyAgICAgICAgICAgICJJbXBhY3QiOiAiIiwKKyAgICAgICAgICAgICJJbml0IGVkaXRvciBzaXplIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBDb3JlIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW4gJHBsdWdpbiI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgcGx1Z2lucyI6ICIiLAorICAgICAgICAgICAgIk1TIFdvcmQgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBhcyI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCBDb2xvciI6ICIiLAorICAgICAgICAgICAgIlNISUZULUVOVEVSIjogIiIsCisgICAgICAgICAgICAiVGFob21hIjogIiIsCisgICAgICAgICAgICAiVGltZXMgTmV3IFJvbWFuIjogIiIsCisgICAgICAgICAgICAiVG91Y2ggaGVyZSBmaXJzdCB0byBhY3RpdmF0ZSBlZGl0b3IuIjogIiIsCisgICAgICAgICAgICAiVmVyZGFuYSI6ICIiLAorICAgICAgICAgICAgIldhaXRpbmcgZm9yIElmcmFtZSB0byBsb2FkLi4uIjogIiIsCisgICAgICAgICAgICAiV2luZ0RpbmdzIjogIiIsCisgICAgICAgICAgICAiWGluaGEiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogQkFDS0dST1VORElNQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIlJlbW92ZSBDdXJyZW50IEJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJTZXQgQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIlNldCBwYWdlIGJhY2tncm91bmQgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJTZXQgUGFnZSBCYWNrZ3JvdW5kIEltYWdlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNsaWVudHNpZGVTcGVsbGNoZWNrIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogQ0xJRU5UU0lERVNQRUxMQ0hFQ0sgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiU3BlbGwgQ2hlY2sgdXNpbmcgaWVTcGVsbCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFeHRlbmRlZEZpbGVNYW5hZ2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogRVhURU5ERURGSUxFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIxMCUiOiAiIiwKKyAgICAgICAgICAgICIxMDAlIjogIiIsCisgICAgICAgICAgICAiMjAwJSI6ICIiLAorICAgICAgICAgICAgIjI1JSI6ICIiLAorICAgICAgICAgICAgIjUwJSI6ICIiLAorICAgICAgICAgICAgIjc1JSI6ICIiLAorICAgICAgICAgICAgIj5MaXN0IFZpZXciOiAiIiwKKyAgICAgICAgICAgICI+VGh1bWJuYWlsIFZpZXciOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICIiLAorICAgICAgICAgICAgIkFsdCI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciBDb2xvciI6ICIiLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkQ6IjogIiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IjogIiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIiIsCisgICAgICAgICAgICAiRWRpdCI6ICIiLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZpbGUgTWFuYWdlciI6ICIiLAorICAgICAgICAgICAgIkZpbGVuYW1lOiI6ICIiLAorICAgICAgICAgICAgIkZpbGVzaXplOiI6ICIiLAorICAgICAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICIiLAorICAgICAgICAgICAgIkZsaXAgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIiIsCisgICAgICAgICAgICAiRm9sZGVyIjogIiIsCisgICAgICAgICAgICAiR0lGIjogIiIsCisgICAgICAgICAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIiIsCisgICAgICAgICAgICAiSDoiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICIiLAorICAgICAgICAgICAgIkpQRUcgSGlnaCI6ICIiLAorICAgICAgICAgICAgIkpQRUcgTG93IjogIiIsCisgICAgICAgICAgICAiSlBFRyBNZWRpdW0iOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIjogIiIsCisgICAgICAgICAgICAiTG9jayI6ICIiLAorICAgICAgICAgICAgIk1hcmtlciI6ICIiLAorICAgICAgICAgICAgIk1heGltdW0gZm9sZGVyIHNpemUgbGltaXQgcmVhY2hlZC4gVXBsb2FkIGRpc2FibGVkLiI6ICIiLAorICAgICAgICAgICAgIk1lYXN1cmUiOiAiIiwKKyAgICAgICAgICAgICJOZXcgRm9sZGVyIjogIiIsCisgICAgICAgICAgICAiTm8gRmlsZXMgRm91bmQiOiAiIiwKKyAgICAgICAgICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgdmFsdWUiOiAiIiwKKyAgICAgICAgICAgICJQTkciOiAiIiwKKyAgICAgICAgICAgICJQcmVzZXQiOiAiIiwKKyAgICAgICAgICAgICJRdWFsaXR5OiI6ICIiLAorICAgICAgICAgICAgIlJlZnJlc2giOiAiIiwKKyAgICAgICAgICAgICJSZW5hbWUiOiAiIiwKKyAgICAgICAgICAgICJSZXNpemUiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENDVyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIlN0YXJ0IFg6IjogIiIsCisgICAgICAgICAgICAiU3RhcnQgWToiOiAiIiwKKyAgICAgICAgICAgICJUYXJnZXQgV2luZG93IjogIiIsCisgICAgICAgICAgICAiVG9nZ2xlIG1hcmtlciBjb2xvciI6ICIiLAorICAgICAgICAgICAgIlRyYXNoIjogIiIsCisgICAgICAgICAgICAiVXBsb2FkIjogIiIsCisgICAgICAgICAgICAiVzoiOiAiIiwKKyAgICAgICAgICAgICJYOiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIEltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlk6IjogIiIsCisgICAgICAgICAgICAiWm9vbSI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiPDxNb290b29sc0ZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJGaWx0ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsdGVyIjogIjw8SW5zZXJ0U25pcHBldDI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkh0bWxUaWR5IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQXV0by1UaWR5IjogIiIsCisgICAgICAgICAgICAiRG9uJ3QgVGlkeSI6ICIiLAorICAgICAgICAgICAgIkhUTUwgVGlkeSI6ICIiLAorICAgICAgICAgICAgIlRpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQW5nbGU6IjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlcyI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgVXNlcm5hbWUvRW1haWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIgTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFBob3RvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFZpZGVvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgU2VydmVyIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFVzZXJuYW1lIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlbyBMaXN0IjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlb3MiOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkVkaXQiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGVuYW1lOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIEltYWdlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBIaWdoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIExvdyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBNZWRpdW0iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkxvY2siOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1hcmtlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUE5HIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJRdWFsaXR5OiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUmVmcmVzaCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUmVzaXplIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIEltYWdlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJTdGFydCBYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU3RhcnQgWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUcmFzaCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiVzoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJZOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE1hcnF1ZWUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTlNFUlRNQVJRVUVFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFsdGVybmF0ZSI6ICIiLAorICAgICAgICAgICAgIkJhY2tncm91bmQtQ29sb3I6IjogIiIsCisgICAgICAgICAgICAiQmVoYXZpb3I6IjogIiIsCisgICAgICAgICAgICAiQ29udGludW91cyI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdGlvbjoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgc2Nyb2xsaW5nIG1hcnF1ZWUiOiAiIiwKKyAgICAgICAgICAgICJNYXJxdWVlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbCBBbW91bnQ6IjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIERlbGF5OiI6ICIiLAorICAgICAgICAgICAgIlNsaWRlIjogIiIsCisgICAgICAgICAgICAiU3BlZWQgQ29udHJvbCI6ICIiLAorICAgICAgICAgICAgIk5hbWUiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlRleHQ6IjogIjw8Rm9ybXM+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIiBPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIk9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IgorICAgICAgICB9LAorICAgICAgICAiTm90ZVNlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTIwJSI6ICIiLAorICAgICAgICAgICAgIjE1MCUiOiAiIiwKKyAgICAgICAgICAgICI4MCUiOiAiIiwKKyAgICAgICAgICAgICJBZGQgR1VJRE8gQ29kZSBpbiBhIHRleHRib3ggb24gdGhlIHBhZ2UiOiAiIiwKKyAgICAgICAgICAgICJBZGQgTUlESSBsaW5rIHRvIGFsbG93IHN0dWRlbnRzIHRvIGhlYXIgdGhlIG11c2ljIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiR3VpZG8gY29kZSI6ICIiLAorICAgICAgICAgICAgIkdVSURPIENvZGUiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBpbiBhcHBsZXQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgR1VJRE8gTXVzaWMgTm90YXRpb24iOiAiIiwKKyAgICAgICAgICAgICJNSURJIEZpbGUiOiAiIiwKKyAgICAgICAgICAgICJTb3VyY2UgQ29kZSI6ICIiLAorICAgICAgICAgICAgIldpdGggTW96aWxsYSwgdGhlIGFwcGxldCB3aWxsIG5vdCBiZSB2aXNpYmxlIGluIGVkaXRvciwgYnV0IG9ubHkgaW4gV2ViIHBhZ2UgYWZ0ZXIgc3VibWl0dGluZy4iOiAiIiwKKyAgICAgICAgICAgICJab29tIDoiOiAiIiwKKyAgICAgICAgICAgICIxMDAlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJab29tIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBHZWFycyBpbiBvcmRlciB0byB1c2UgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZSBhbmQgY29uZmlndXJhdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGluZyBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiSW5zdGFsbCI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIEFib3V0IExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgcmVsb2FkIHRoZSBwYWdlLCBjYXVzaW5nIHlvdSB0byBsb3NlIGFueSB1bnNhdmVkIHdvcmsuICBQcmVzcyBcIk9LXCIgdG8gcmVsb2FkLiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIHVzZXMgR29vZ2xlIEdlYXJzIHRvIGVuYWJsZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlLiAgV2l0aCBHZWFycyBpbnN0YWxsZWQsIHlvdSBjYW4gc2F2ZSBkcmFmdHMgb2YgeW91ciBkb2N1bWVudHMgb24geW91ciBoYXJkIGRyaXZlLCBjb25maWd1cmUgWGluaGEgdG8gbG9vayB0aGUgd2F5IHlvdSB3YW50LCBhbmQgY2FycnkgdGhpcyBpbmZvcm1hdGlvbiB3aGVyZXZlciB5b3UgdXNlIFhpbmhhIG9uIHRoZSB3ZWIuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsZTogIjogIiIsCisgICAgICAgICAgICAiSW1wb3J0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGV0YWlscyI6ICIiLAorICAgICAgICAgICAgIkZpbGUgQnJvd3NlciI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICAgIFRoZXJlIEMgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gIFRoZXJlIEEgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gXCIgVGhlcmUgQiBcIiI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICcgVGhlcmUgRCAnIjogIiIsCisgICAgICAgICAgICAiTGlzdCBvZiBQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJOZXcgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJPcGVuIjogIiIsCisgICAgICAgICAgICAiT3BlbiBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHlvdSdkIGxpa2UgdG8gY3JlYXRlLiI6ICIiLAorICAgICAgICAgICAgIlNhdmUgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgZXJhc2UgYW55IHVuc2F2ZWQgY29udGVudC4gIElmIHlvdSdyZSBjZXJ0YWluLCBwbGVhc2UgY2xpY2sgT0sgdG8gY29udGludWUuIjogIiIsCisgICAgICAgICAgICAiV2ViIFVSTCI6ICIiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiPDxQU0xvY2FsPj4iLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlbmFtZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IjogIjw8SW5zZXJ0Tm90ZT4+IiwKKyAgICAgICAgICAgICJOZXcgRm9sZGVyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEaWN0aW9uYXJ5IjogIiIsCisgICAgICAgICAgICAiRmluaXNoZWQgbGlzdCBvZiBtaXNwZWxsZWQgd29yZHMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MQXJlYSBTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiSSB3aWxsIG9wZW4gaXQgaW4gYSBuZXcgcGFnZS4iOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUiOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUgYWxsIjogIiIsCisgICAgICAgICAgICAiSW5mbyI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIjogIiIsCisgICAgICAgICAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIiIsCisgICAgICAgICAgICAiT3JpZ2luYWwgd29yZCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gb3BlbiB0aGlzIGxpbmsiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdDogY2hhbmdpbmcgZGljdGlvbmFyeSB0byI6ICIiLAorICAgICAgICAgICAgInBsaXogd2VpdCA7LSkiOiAiIiwKKyAgICAgICAgICAgICJSZS1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGFsbCI6ICIiLAorICAgICAgICAgICAgIlJldmVydCI6ICIiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrZXIiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbC1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlN1Z2dlc3Rpb25zIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlRlbXBsYXRlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiSW5zZXJ0IHRlbXBsYXRlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuRm9ybWF0IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWxsIjogIiIsCisgICAgICAgICAgICAiQWxsIEhUTUw6IjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgQXJlYSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIG9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0aW5nOiI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCB3aGljaCB0eXBlcyBvZiBmb3JtYXR0aW5nIHlvdSB3b3VsZCBsaWtlIHRvIHJlbW92ZS4iOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Rpb24iOiAiIgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL3RoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvdGguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JhNDk4NQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL3RoLmpzCkBAIC0wLDAgKzEsMTU3MyBAQAorLy8gWGluaGEgTGFuZ3VhZ2UgQ29tYmluZWQgVHJhbnNsYXRpb24gRmlsZQorLy8KKy8vIExBTkc6ICJ0aCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElOU1RSVUNUSU9OUyBUTyBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gWW91ciB0cmFuc2xhdGlvbiBtdXN0IGJlIGluIFVURi04IENoYXJhY3RlciBFbmNvZGluZy4KKy8vCisvLyBUaGlzIGlzIGEgSlNPTiBlbmNvZGVkIGZpbGUgKHBsdXMgY29tbWVudHMpLCBzdHJpbmdzIHNob3VsZCBiZSBkb3VibGUtcXVvdGUKKy8vIG9ubHksIGRvIG5vdCB1c2Ugc2luZ2xlIHF1b3RlcyB0byBzdXJyb3VuZCBzdHJpbmdzIC0gImhlbGxvIiwgbm90ICdoZWxsbycKKy8vIGRvIG5vdCBoYXZlIGEgdHJhaWxpbmcgY29tbWEgYWZ0ZXIgdGhlIGxhc3QgZW50cnkgaW4gYSBzZWN0aW9uLgorLy8KKy8vIE9ubHkgZnVsbCBsaW5lIGNvbW1lbnRzIGFyZSBhbGxvd2VkICh0aGF0IGEgY29tbWVudHMgb2NjdXB5IGVudGlyZSBsaW5lcykuCisvLworLy8gU2VhcmNoIGZvciB0aGUgX19ORVdfVFJBTlNMQVRJT05TX18gc2VjdGlvbiBiZWxvdywgdGhpcyBpcyB3aGVyZSB5b3Ugd2lsbAorLy8gd2FudCB0byBmb2N1cywgdGhpcyBzZWN0aW9uIGluY2x1ZGVzIHRoaW5ncyB0aGF0IGRvIG5vdCBwcmVzZW50bHkgaGF2ZSBhIAorLy8gdHJhbnNsYXRpb24gb3IgZm9yIHdoaWNoIHRoZSB0cmFuc2xhdGlvbiBuZWVkcyB0byBiZSBjaGVja2VkIGZvciBhY2N1cmFjeS4KKy8vCisvLyBJbiB0aGUgTmV3IFRyYW5zbGF0aW9ucyBzZWN0aW9uIGEgdHJhbnNsYXRpb24gc3RyaW5nIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICIiCisvLyAgICAgVGhpcyBtZWFucyBpdCBpcyBub3QgdHJhbnNsYXRlZCB5ZXQsIGFkZCB5b3VyIHRyYW5zbGF0aW9uLi4uCisvLyAgICAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIktsaW5nb24gU3RyaW5nIEhlcmUiCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJUcmFuc2xhdGVkIFN0cmluZyBIZXJlIgorLy8gICAgIFRoaXMgbWVhbnMgdGhhdCBhbiBleGlzdGluZyB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcsIGluIHNvbWUgb3RoZXIKKy8vICAgICBzZWN0aW9uIGhhcyBiZWVuIGZvdW5kLCBhbmQgdXNlZC4gIENoZWNrIHRoYXQgaXQgaXMgYXBwcm9wcml0ZSBmb3IgdGhpcworLy8gICAgIHNlY3Rpb24gYW5kIGlmIGl0IGlzLCB0aGF0J3MgZmluZSBsZWF2ZSBpdCBhcyBpcywgb3RoZXJ3aXNlIGNoYW5nZSBhcworLy8gICAgIGFwcHJvcHJpYXRlLgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiPDxBbm90aGVyU2VjdGlvbj4+IgorLy8gICAgIFRoaXMgbWVhbnMgdXNlIHRoZSBzYW1lIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZyBhcyA8PEFub3RoZXJTZWN0aW9uPj4KKy8vICAgICB0aGlzIHNhdmVzIHlvdSByZS10cmFubGF0aW5nIHN0cmluZ3MuICBJZiB0aGUgQ29udGV4dCBvZiB0aGlzIHNlY3Rpb24KKy8vICAgICBhbmQgdGhlIGNvbnRleHQgb2YgQW5vdGhlclNlY3Rpb24gc2VlbSB0aGUgc2FtZSwgdGhhdCdzIGZpbmUgbGVhdmUgaXQKKy8vICAgICB1c2luZyB0aGF0IHRyYW5zbGF0aW9uLCBidXQgaWYgdGhpcyBzZWN0aW9uIG5lZWRzIGEgZGlmZmVyZW50IHRyYW5zbGF0aW9uLCAKKy8vICAgICB5b3UgY2FuIHByb3ZpZGUgaXQgYnkgcmVwbGFjaW5nIHRoZSBsaW5rICg8PEFub3RoZXJTZWN0aW9uPj4pIHdpdGggdGhhdAorLy8gICAgIG5ldyB0cmFuc2xhdGlvbi4gIEZvciBleGFtcGxlIC0gYSAiVGFibGUiIGluIHNheSAiRGF0YVBsdWdpbiIgaXMgCisvLyAgICAgcGVyaGFwcyB0cmFuc2xhdGVkIGRpZmZlcmVudGx5IHRvICJUYWJsZSIgaW4gIkZ1cm5pdHVyZVBsdWdpbiIuCisvLworLy8gVEVTVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBwbGFjZSB5b3VyIHRyYW5zbGF0aW9uIGZpbGUgb24geW91ciB3ZWJzZXJ2ZXIgc29tZXdoZXJlIGZvciBleGFtcGxlCisvLworLy8gICAveGluaGEvbGFuZy9tZXJnZWQvdGguanMKKy8vCisvLyBhbmQgdGhlbiB0ZWxsIFhpbmhhIHdoZXJlIHRvIGdldCBpdCAoYmVmb3JlIGxvYWRpbmcgWGluaGFDb3JlLmpzKSBieSAKKy8vCisvLyAgX2VkaXRvcl9sYW5nICAgICAgICAgICAgICA9ICd0aCc7CisvLyAgX2VkaXRvcl9sYW5nX21lcmdlZF9maWxlICA9ICcveGluaGEvbGFuZy9tZXJnZWQvdGguanMnOworLy8KKy8vIFhpbmhhIHdpbGwgbG9hZCB5b3VyIG5ldyBsYW5ndWFnZSBkZWZpbml0aW9uLgorLy8KKy8vIFNVQk1JVFRJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgY3JlYXRlIGEgVGlja2V0IG9uIHRoZSBYaW5oYSB3ZWJzaXRlIGFuZCBhdHRhY2ggeW91ciB0cmFuc2xhdGlvbiAKKy8vIGZpbGUuCisvLworLy8gVGhlIFhpbmhhIGRldmVsb3BlcnMgd2lsbCB0YWtlIHlvdXIgZmlsZSBhbmQgdXNlIHRoZSAKKy8vICAgICBjb250cmliL2xjX3NwbGl0X21lcmdlZF9maWxlLnBocAorLy8gc2NyaXB0IHRvIGxvYWQgaXQgaW50byB0aGUgWGluaGEgZGlzdHJpYnV0aW9uLgorCit7CisgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLguKLguIHguYDguKXguLTguIEiLAorICAgICAgICAiT0siOiAi4LiV4LiB4Lil4LiHIgorICAgIH0sCisgICAgIkFib3V0Qm94IjogeworICAgICAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAi4LmA4LiB4Li14LmI4Lii4Lin4LiB4Lix4Lia4LmC4Lib4Lij4LmB4LiB4Lij4Lih4LiZ4Li14LmJIgorICAgIH0sCisgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLguKLguIHguYDguKXguLTguIEiCisgICAgfSwKKyAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICJPSyI6ICLguJXguIHguKXguIciCisgICAgfSwKKyAgICAiQ29udGV4dE1lbnUiOiB7CisgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICLguIjguLHguJTguIHguLbguYjguIfguIHguKXguLLguIciLAorICAgICAgICAiSnVzdGlmeSBGdWxsIjogIuC4iOC4seC4lOC5gOC4leC5h+C4oeC4guC4reC4miIsCisgICAgICAgICJKdXN0aWZ5IExlZnQiOiAi4LiI4Lix4LiU4LiK4Li04LiU4LiL4LmJ4Liy4LiiIiwKKyAgICAgICAgIkp1c3RpZnkgUmlnaHQiOiAi4LiI4Lix4LiU4LiK4Li04LiU4LiC4Lin4LiyIgorICAgIH0sCisgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwKKyAgICAgICAgIk9LIjogIuC4leC4geC4peC4hyIKKyAgICB9LAorICAgICJFZGl0VGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIsCisgICAgICAgICJPSyI6ICLguJXguIHguKXguIciCisgICAgfSwKKyAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwKKyAgICAgICAgIk9LIjogIuC4leC4geC4peC4hyIKKyAgICB9LAorICAgICJFeHRlbmRlZEZpbGVNYW5hZ2VyIjogeworICAgICAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIsCisgICAgICAgICJPSyI6ICLguJXguIHguKXguIciCisgICAgfSwKKyAgICAiRm9ybXMiOiB7CisgICAgICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwKKyAgICAgICAgIk9LIjogIuC4leC4geC4peC4hyIKKyAgICB9LAorICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLguKLguIHguYDguKXguLTguIEiLAorICAgICAgICAiT0siOiAi4LiV4LiB4Lil4LiHIgorICAgIH0sCisgICAgIkhvcml6b250YWxSdWxlIjogeworICAgICAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAi4LmA4Liq4LmJ4LiZ4LiB4Li24LmI4LiH4LiB4Lil4Liy4LiHIiwKKyAgICAgICAgIk9LIjogIuC4leC4geC4peC4hyIKKyAgICB9LAorICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwKKyAgICAgICAgIk9LIjogIuC4leC4geC4peC4hyIKKyAgICB9LAorICAgICJJbnNlcnRBbmNob3IiOiB7CisgICAgICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwKKyAgICAgICAgIk9LIjogIuC4leC4geC4peC4hyIKKyAgICB9LAorICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLguKLguIHguYDguKXguLTguIEiLAorICAgICAgICAiT0siOiAi4LiV4LiB4Lil4LiHIgorICAgIH0sCisgICAgIkluc2VydE1hcnF1ZWUiOiB7CisgICAgICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwKKyAgICAgICAgIk9LIjogIuC4leC4geC4peC4hyIKKyAgICB9LAorICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIKKyAgICB9LAorICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIsCisgICAgICAgICJPSyI6ICLguJXguIHguKXguIciCisgICAgfSwKKyAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLguKLguIHguYDguKXguLTguIEiCisgICAgfSwKKyAgICAiSW5zZXJ0U25pcHBldDIiOiB7CisgICAgICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIgorICAgIH0sCisgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIsCisgICAgICAgICJJbnNlcnQgVGFibGUiOiAi4LmA4Lie4Li04LmI4Lih4LiV4Liy4Lij4Liy4LiHIiwKKyAgICAgICAgIk9LIjogIuC4leC4geC4peC4hyIKKyAgICB9LAorICAgICJMaW5rZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwKKyAgICAgICAgIk9LIjogIuC4leC4geC4peC4hyIKKyAgICB9LAorICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIsCisgICAgICAgICJPSyI6ICLguJXguIHguKXguIciCisgICAgfSwKKyAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLguKLguIHguYDguKXguLTguIEiCisgICAgfSwKKyAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIsCisgICAgICAgICJPSyI6ICLguJXguIHguKXguIciCisgICAgfSwKKyAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIgorICAgIH0sCisgICAgIlF1aWNrVGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIKKyAgICB9LAorICAgICJTZXRJZCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLguKLguIHguYDguKXguLTguIEiLAorICAgICAgICAiT0siOiAi4LiV4LiB4Lil4LiHIgorICAgIH0sCisgICAgIlNtYXJ0UmVwbGFjZSI6IHsKKyAgICAgICAgIk9LIjogIuC4leC4geC4peC4hyIKKyAgICB9LAorICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwKKyAgICAgICAgIk9LIjogIuC4leC4geC4peC4hyIKKyAgICB9LAorICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIsCisgICAgICAgICJPSyI6ICLguJXguIHguKXguIciCisgICAgfSwKKyAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIsCisgICAgICAgICJPSyI6ICLguJXguIHguKXguIciCisgICAgfSwKKyAgICAiVGVtcGxhdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIgorICAgIH0sCisgICAgIlVuRm9ybWF0IjogeworICAgICAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIsCisgICAgICAgICJPSyI6ICLguJXguIHguKXguIciCisgICAgfSwKKyAgICAiWGluaGEiOiB7CisgICAgICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICLguYDguIHguLXguYjguKLguKfguIHguLHguJrguYLguJvguKPguYHguIHguKPguKHguJnguLXguYkiLAorICAgICAgICAiQmFja2dyb3VuZCBDb2xvciI6ICLguKrguLXguJ7guLfguYnguJnguKvguKXguLHguIciLAorICAgICAgICAiQm9sZCI6ICLguJXguLHguKfguKvguJnguLIiLAorICAgICAgICAiQnVsbGV0ZWQgTGlzdCI6ICLguKXguLPguJTguLHguJoiLAorICAgICAgICAiQ29weSBzZWxlY3Rpb24iOiAi4Liq4Liz4LmA4LiZ4Liy4Liq4LmI4Lin4LiZ4LiX4Li14LmI4LmA4Lil4Li34Lit4LiBIiwKKyAgICAgICAgIkN1cnJlbnQgc3R5bGUiOiAi4Lij4Li54Lib4LmB4Lia4Lia4Lib4Lix4LiI4LiI4Li44Lia4Lix4LiZIiwKKyAgICAgICAgIkN1dCBzZWxlY3Rpb24iOiAi4LiV4Lix4LiU4Liq4LmI4Lin4LiZ4LiX4Li14LmI4LmA4Lil4Li34Lit4LiBIiwKKyAgICAgICAgIkRlY3JlYXNlIEluZGVudCI6ICLguKXguJTguKLguYjguK3guKvguJnguYnguLIiLAorICAgICAgICAiRm9udCBDb2xvciI6ICLguKrguLXguILguK3guJrguYHguJrguJrguK3guLHguIHguKnguKMiLAorICAgICAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAi4LiB4Liy4Lij4LmD4LiK4LmJ4LiH4Liy4LiZ4LmC4Lib4Lij4LmB4LiB4Lij4LihIiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICLguYDguKrguYnguJnguIHguLbguYjguIfguIHguKXguLLguIciLAorICAgICAgICAiSW5jcmVhc2UgSW5kZW50IjogIuC5gOC4nuC4tOC5iOC4oeC4ouC5iOC4reC4q+C4meC5ieC4siIsCisgICAgICAgICJJbnNlcnQgVGFibGUiOiAi4LmA4Lie4Li04LmI4Lih4LiV4Liy4Lij4Liy4LiHIiwKKyAgICAgICAgIkluc2VydCBXZWIgTGluayI6ICLguLTguYDguJ7guLTguYjguKHguKXguLTguYnguIfguITguYwiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICLguYDguJ7guLTguYjguKEv4LmB4LiB4LmJ4LmE4LiC4Lig4Liy4LieIiwKKyAgICAgICAgIkl0YWxpYyI6ICLguJXguLHguKfguYDguK3guLXguKLguIciLAorICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAi4LiI4Lix4LiU4LiB4Li24LmI4LiH4LiB4Lil4Liy4LiHIiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICLguIjguLHguJTguYDguJXguYfguKHguILguK3guJoiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIuC4iOC4seC4lOC4iuC4tOC4lOC4i+C5ieC4suC4oiIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIuC4iOC4seC4lOC4iuC4tOC4lOC4guC4p+C4siIsCisgICAgICAgICJPcmRlcmVkIExpc3QiOiAi4LmA4Lil4LiC4Lil4Liz4LiU4Lix4LiaIiwKKyAgICAgICAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIuC4p+C4suC4h+C4iOC4suC4geC4hOC4peC4tOC4m+C4muC4reC4o+C5jOC4lCIsCisgICAgICAgICJQYXRoIjogIuC5gOC4quC5ieC4meC4l+C4suC4hyIsCisgICAgICAgICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLguJfguLPguIvguYnguLMiLAorICAgICAgICAiU3RyaWtldGhyb3VnaCI6ICLguILguLXguJTguJfguLHguJoiLAorICAgICAgICAiU3Vic2NyaXB0IjogIuC4leC4seC4p+C4q+C5ieC4reC4oiIsCisgICAgICAgICJTdXBlcnNjcmlwdCI6ICLguJXguLHguKfguKLguIEiLAorICAgICAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIuC4quC4peC4seC4muC4geC4suC4o+C5geC4quC4lOC4h+C5guC4hOC5ieC4lCBIVE1MIiwKKyAgICAgICAgIlVuZGVybGluZSI6ICLguILguLXguJTguYDguKrguYnguJnguYPguJXguYkiLAorICAgICAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi4Lii4LmJ4Lit4LiZ4LiB4Lil4Lix4LiaIiwKKyAgICAgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICLguITguLjguJPguK3guKLguLnguYjguYPguJnguYLguKvguKHguJTguJjguKPguKPguKHguJTguLIg4LiB4LiU4LiX4Li14LmI4Lib4Li44LmI4LihIFs8Pl0g4LmA4Lie4Li34LmI4Lit4Liq4Lil4Lix4Lia4LiB4Lil4Lix4Lia4LmE4Lib4Lii4Lix4LiH4LmC4Lir4Lih4LiU4Lie4Li04Lih4Lie4LmM4LiH4Liy4LiZ4LmB4Lia4Lia4LmA4Lin4Li04Lij4LmM4LiUIgorICAgIH0sCisgICAgIl9fTkVXX1RSQU5TTEFUSU9OU19fIjogeworICAgICAgICAiQWJicmV2aWF0aW9uIjogeworICAgICAgICAgICAgIkFiYnJldmlhdGlvbiI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICIiLAorICAgICAgICAgICAgIkV4cGFuc2lvbjoiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQWJvdXRCb3giOiB7CisgICAgICAgICAgICAiQ2xvc2UiOiAiPDxYaW5oYT4+IgorICAgICAgICB9LAorICAgICAgICAiQ2hhckNvdW50ZXIiOiB7CisgICAgICAgICAgICAiLi4uIGluIHByb2dyZXNzIjogIiIsCisgICAgICAgICAgICAiQ2hhcnMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIiIsCisgICAgICAgICAgICAiV29yZHMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2hhcmFjdGVyTWFwIjogeworICAgICAgICAgICAgIkluc2VydCBzcGVjaWFsIGNoYXJhY3RlciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDb2xvclBpY2tlciI6IHsKKyAgICAgICAgICAgICJDbGljayBhIGNvbG9yLi4uIjogIiIsCisgICAgICAgICAgICAiQ29sb3I6ICI6ICIiLAorICAgICAgICAgICAgIlNhbXBsZSI6ICIiLAorICAgICAgICAgICAgIldlYiBTYWZlOiAiOiAiIiwKKyAgICAgICAgICAgICJDbG9zZSI6ICI8PFhpbmhhPj4iCisgICAgICAgIH0sCisgICAgICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgICAgICJfRGVsZXRlIFJvdyI6ICIiLAorICAgICAgICAgICAgIl9JbWFnZSBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiX01vZGlmeSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1JlbW92ZSBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiX1RhYmxlIFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJDX2VsbCBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiQ2hlY19rIExpbmsuLi4iOiAiIiwKKyAgICAgICAgICAgICJDb3B5IjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIGEgbGluayI6ICIiLAorICAgICAgICAgICAgIkN1cnJlbnQgVVJMIGlzIjogIiIsCisgICAgICAgICAgICAiQ3V0IjogIiIsCisgICAgICAgICAgICAiRGVfbGV0ZSBDb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgQ2VsbCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSB0aGUgY3VycmVudCBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIiIsCisgICAgICAgICAgICAiSG93IGRpZCB5b3UgZ2V0IGhlcmU/IChQbGVhc2UgcmVwb3J0ISkiOiAiIiwKKyAgICAgICAgICAgICJJX25zZXJ0IFJvdyBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYWZ0ZXIgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ2VsbCBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcGFyYWdyYXBoIGFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJMaW5rIHBvaW50cyB0bzoiOiAiIiwKKyAgICAgICAgICAgICJNYWtlIGxpbl9rLi4uIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiUGFzdGUiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGVsZW1lbnQ6IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJSb193IFByb3BlcnRpZXMuLi4iOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBpbWFnZSBwcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlNob3cgdGhlIFRhYmxlIFJvdyBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICAgICAgICAgIlVubGluayB0aGUgY3VycmVudCBlbGVtZW50IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIiIsCisgICAgICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICIiLAorICAgICAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiIiwKKyAgICAgICAgICAgICJPdGhlciI6ICIiLAorICAgICAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICIiLAorICAgICAgICAgICAgIlRhcmdldDoiOiAiIiwKKyAgICAgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogIiIsCisgICAgICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICIiLAorICAgICAgICAgICAgIlVSTDoiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGluZyBhIGxpbmsiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRGVmaW5pdGlvbkxpc3QiOiB7CisgICAgICAgICAgICAiZGVmaW5pdGlvbiBkZXNjcmlwdGlvbiI6ICIiLAorICAgICAgICAgICAgImRlZmluaXRpb24gbGlzdCI6ICIiLAorICAgICAgICAgICAgImRlZmluaXRpb24gdGVybSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEaWFsb2dzIjogeworICAgICAgICAgICAgIlNvbWUgVGV4dCBIZXJlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkR5bmFtaWNDU1MiOiB7CisgICAgICAgICAgICAiQ2hvb3NlIHN0eWxlc2hlZXQiOiAiIiwKKyAgICAgICAgICAgICJEZWZhdWx0IjogIiIsCisgICAgICAgICAgICAiVW5kZWZpbmVkIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVkaXRUYWciOiB7CisgICAgICAgICAgICAiRWRpdCBIVE1MIGZvciBzZWxlY3RlZCB0ZXh0IjogIiIsCisgICAgICAgICAgICAiRWRpdCBUYWcgQnkgUGVnIjogIiIsCisgICAgICAgICAgICAiVGFnIEVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgICAgICIhPSI6ICIiLAorICAgICAgICAgICAgIiFpbiI6ICIiLAorICAgICAgICAgICAgIiZndDstIjogIiIsCisgICAgICAgICAgICAiJmd0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZsdDt4Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgIWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAuYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDBgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAzYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDRgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA2YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDdgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA5YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYGVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyZuYnNwO2AxYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgK3s6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC06XFwgYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Atezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgQ2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgY29zYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BsbmAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgcGlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BzaW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRhbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGltZXNgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJnF1b3Q7dGV4dCZxdW90OyI6ICIiLAorICAgICAgICAgICAgIicrZm9ybXVsYSsnIjogIiIsCisgICAgICAgICAgICAiKChuKSwoaykpIjogIiIsCisgICAgICAgICAgICAiKHgrMSkvKHgtMSkiOiAiIiwKKyAgICAgICAgICAgICIqIjogIiIsCisgICAgICAgICAgICAiKioiOiAiIiwKKyAgICAgICAgICAgICIrLSI6ICIiLAorICAgICAgICAgICAgIi0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiLSZsdDsiOiAiIiwKKyAgICAgICAgICAgICItOiI6ICIiLAorICAgICAgICAgICAgIi09IjogIiIsCisgICAgICAgICAgICAiLy8iOiAiIiwKKyAgICAgICAgICAgICIvXyI6ICIiLAorICAgICAgICAgICAgIjouIjogIiIsCisgICAgICAgICAgICAiPSZndDsiOiAiIiwKKyAgICAgICAgICAgICJAIjogIiIsCisgICAgICAgICAgICAiW1thLGJdLFtjLGRdXSI6ICIiLAorICAgICAgICAgICAgIlxcXFwiOiAiIiwKKyAgICAgICAgICAgICJcXG5DbGljayBpbiB0aGUgYm94IHRvIHVzZSB5b3VyIGtleWJvYXJkIG9yIHVzZSB0aGUgYnV0dG9uc1xcbiI6ICIiLAorICAgICAgICAgICAgIl5eIjogIiIsCisgICAgICAgICAgICAiXl5eIjogIiIsCisgICAgICAgICAgICAiX198IjogIiIsCisgICAgICAgICAgICAiX3xfIjogIiIsCisgICAgICAgICAgICAiYCE9YCI6ICIiLAorICAgICAgICAgICAgImAhaW5gIjogIiIsCisgICAgICAgICAgICAiYCZhbmQ7YCI6ICIiLAorICAgICAgICAgICAgImAmY2FwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmN1cDtgIjogIiIsCisgICAgICAgICAgICAiYCZndDstYCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0O3gmZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmb3I7YCI6ICIiLAorICAgICAgICAgICAgImAmcXVvdDt0ZXh0JnF1b3Q7YCI6ICIiLAorICAgICAgICAgICAgImAoKG4pLChrKSlgIjogIiIsCisgICAgICAgICAgICAiYCh4KzEpLyh4LTEpYCI6ICIiLAorICAgICAgICAgICAgImAqKmAiOiAiIiwKKyAgICAgICAgICAgICJgKmAiOiAiIiwKKyAgICAgICAgICAgICJgKy1gIjogIiIsCisgICAgICAgICAgICAiYC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAtJmx0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLTpgIjogIiIsCisgICAgICAgICAgICAiYC09YCI6ICIiLAorICAgICAgICAgICAgImAvL2AiOiAiIiwKKyAgICAgICAgICAgICJgL19gIjogIiIsCisgICAgICAgICAgICAiYDouYCI6ICIiLAorICAgICAgICAgICAgImA9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgQGAiOiAiIiwKKyAgICAgICAgICAgICJgW1thLGJdLFtjLGRdXWAiOiAiIiwKKyAgICAgICAgICAgICJgXFxcXGAiOiAiIiwKKyAgICAgICAgICAgICJgX198YCI6ICIiLAorICAgICAgICAgICAgImBffF9gIjogIiIsCisgICAgICAgICAgICAiYEFBYCI6ICIiLAorICAgICAgICAgICAgImBhbGVwaGAiOiAiIiwKKyAgICAgICAgICAgICJgYWxwaGFgIjogIiIsCisgICAgICAgICAgICAiYGFuZGAiOiAiIiwKKyAgICAgICAgICAgICJgYmFyYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiZXRhYCI6ICIiLAorICAgICAgICAgICAgImBDQ2AiOiAiIiwKKyAgICAgICAgICAgICJgY2NhYCI6ICIiLAorICAgICAgICAgICAgImBjaGlgIjogIiIsCisgICAgICAgICAgICAiYGRhcnJgIjogIiIsCisgICAgICAgICAgICAiYGRkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkZWxgIjogIiIsCisgICAgICAgICAgICAiYERlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGlhbW9uZGAiOiAiIiwKKyAgICAgICAgICAgICJgZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZHkvZHhgIjogIiIsCisgICAgICAgICAgICAiYEVFYCI6ICIiLAorICAgICAgICAgICAgImBlcHNpYCI6ICIiLAorICAgICAgICAgICAgImBldGFgIjogIiIsCisgICAgICAgICAgICAiYGZyYWAiOiAiIiwKKyAgICAgICAgICAgICJgR2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBncmFkYCI6ICIiLAorICAgICAgICAgICAgImBoYXJyYCI6ICIiLAorICAgICAgICAgICAgImBoQXJyYCI6ICIiLAorICAgICAgICAgICAgImBoYXRhYCI6ICIiLAorICAgICAgICAgICAgImBpZmAiOiAiIiwKKyAgICAgICAgICAgICJgaW5gIjogIiIsCisgICAgICAgICAgICAiYGludGAiOiAiIiwKKyAgICAgICAgICAgICJgaW90YWAiOiAiIiwKKyAgICAgICAgICAgICJga2FwcGFgIjogIiIsCisgICAgICAgICAgICAiYExhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBsQXJyYCI6ICIiLAorICAgICAgICAgICAgImBsYXJyYCI6ICIiLAorICAgICAgICAgICAgImBsaW1fKHgtJmd0O29vKWAiOiAiIiwKKyAgICAgICAgICAgICJgbG9nYCI6ICIiLAorICAgICAgICAgICAgImBtdWAiOiAiIiwKKyAgICAgICAgICAgICJgTk5gIjogIiIsCisgICAgICAgICAgICAiYG5uYCI6ICIiLAorICAgICAgICAgICAgImBub3RgIjogIiIsCisgICAgICAgICAgICAiYG51YCI6ICIiLAorICAgICAgICAgICAgImBvK2AiOiAiIiwKKyAgICAgICAgICAgICJgby5gIjogIiIsCisgICAgICAgICAgICAiYE8vYCI6ICIiLAorICAgICAgICAgICAgImBvaW50YCI6ICIiLAorICAgICAgICAgICAgImBvbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgT21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYG9vYCI6ICIiLAorICAgICAgICAgICAgImBvcmAiOiAiIiwKKyAgICAgICAgICAgICJgb3hgIjogIiIsCisgICAgICAgICAgICAiYHBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGhpYCI6ICIiLAorICAgICAgICAgICAgImBQaWAiOiAiIiwKKyAgICAgICAgICAgICJgcGlgIjogIiIsCisgICAgICAgICAgICAiYHByb2RgIjogIiIsCisgICAgICAgICAgICAiYHByb3BgIjogIiIsCisgICAgICAgICAgICAiYFBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgcHNpYCI6ICIiLAorICAgICAgICAgICAgImBRUWAiOiAiIiwKKyAgICAgICAgICAgICJgcXVhZGAiOiAiIiwKKyAgICAgICAgICAgICJgckFycmAiOiAiIiwKKyAgICAgICAgICAgICJgcmhvYCI6ICIiLAorICAgICAgICAgICAgImByb290KG4pKHgpYCI6ICIiLAorICAgICAgICAgICAgImBSUmAiOiAiIiwKKyAgICAgICAgICAgICJgc2ZhYCI6ICIiLAorICAgICAgICAgICAgImBTaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgc2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYHNxcnQoeClgIjogIiIsCisgICAgICAgICAgICAiYHNxdWFyZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3RhY2tyZWwoLSZndDspKCspYCI6ICIiLAorICAgICAgICAgICAgImBzdWJgIjogIiIsCisgICAgICAgICAgICAiYHN1YmVgIjogIiIsCisgICAgICAgICAgICAiYHN1bWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwYCI6ICIiLAorICAgICAgICAgICAgImBzdXBlYCI6ICIiLAorICAgICAgICAgICAgImB0YXVgIjogIiIsCisgICAgICAgICAgICAiYFRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImB0aGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgVFRgIjogIiIsCisgICAgICAgICAgICAiYHR0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdWFycmAiOiAiIiwKKyAgICAgICAgICAgICJgdWxhYCI6ICIiLAorICAgICAgICAgICAgImB1cHNpbG9uYCI6ICIiLAorICAgICAgICAgICAgImB1dWAiOiAiIiwKKyAgICAgICAgICAgICJgdmVjYWAiOiAiIiwKKyAgICAgICAgICAgICJgdnZgIjogIiIsCisgICAgICAgICAgICAiYHhfKG1uKWAiOiAiIiwKKyAgICAgICAgICAgICJgWGlgIjogIiIsCisgICAgICAgICAgICAiYHhpYCI6ICIiLAorICAgICAgICAgICAgImB4eGAiOiAiIiwKKyAgICAgICAgICAgICJgemV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgWlpgIjogIiIsCisgICAgICAgICAgICAiYHwtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgfC0tYCI6ICIiLAorICAgICAgICAgICAgImB8PT1gIjogIiIsCisgICAgICAgICAgICAiYHxfX2AiOiAiIiwKKyAgICAgICAgICAgICJgfH5gIjogIiIsCisgICAgICAgICAgICAiYH49YCI6ICIiLAorICAgICAgICAgICAgImB+fGAiOiAiIiwKKyAgICAgICAgICAgICJgfn5gIjogIiIsCisgICAgICAgICAgICAiQUEiOiAiIiwKKyAgICAgICAgICAgICJhbGVwaCI6ICIiLAorICAgICAgICAgICAgImFscGhhIjogIiIsCisgICAgICAgICAgICAiYW5kIjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoIEZvcm11bGEgSW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGhNTCBFeGFtcGxlIjogIiIsCisgICAgICAgICAgICAiYmFyYSI6ICIiLAorICAgICAgICAgICAgIkJhc2VkIG9uIEFTQ0lJTWF0aE1MIGJ5IjogIiIsCisgICAgICAgICAgICAiYmJhIjogIiIsCisgICAgICAgICAgICAiYmJiYSI6ICIiLAorICAgICAgICAgICAgImJldGEiOiAiIiwKKyAgICAgICAgICAgICJDQyI6ICIiLAorICAgICAgICAgICAgImNjYSI6ICIiLAorICAgICAgICAgICAgImNoaSI6ICIiLAorICAgICAgICAgICAgImRhcnIiOiAiIiwKKyAgICAgICAgICAgICJkZG90YSI6ICIiLAorICAgICAgICAgICAgImRlbCI6ICIiLAorICAgICAgICAgICAgImRlbHRhIjogIiIsCisgICAgICAgICAgICAiRGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJkaWFtb25kIjogIiIsCisgICAgICAgICAgICAiZG90YSI6ICIiLAorICAgICAgICAgICAgImR5L2R4IjogIiIsCisgICAgICAgICAgICAiRUUiOiAiIiwKKyAgICAgICAgICAgICJlcHNpIjogIiIsCisgICAgICAgICAgICAiZXRhIjogIiIsCisgICAgICAgICAgICAiRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQXNjaWlNYXRoTUwgdmlzaXQgdGhpcyBwYWdlOiI6ICIiLAorICAgICAgICAgICAgIkZvcm11bGEgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiZnJhIjogIiIsCisgICAgICAgICAgICAiZ2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJHYW1tYSI6ICIiLAorICAgICAgICAgICAgImdyYWQiOiAiIiwKKyAgICAgICAgICAgICJoQXJyIjogIiIsCisgICAgICAgICAgICAiaGFyciI6ICIiLAorICAgICAgICAgICAgImhhdGEiOiAiIiwKKyAgICAgICAgICAgICJpZiI6ICIiLAorICAgICAgICAgICAgImluIjogIiIsCisgICAgICAgICAgICAiSW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJpbnQiOiAiIiwKKyAgICAgICAgICAgICJpbnRfYV5iZih4KWR4IjogIiIsCisgICAgICAgICAgICAiaW90YSI6ICIiLAorICAgICAgICAgICAgImthcHBhIjogIiIsCisgICAgICAgICAgICAiTGFtYmRhIjogIiIsCisgICAgICAgICAgICAibGFtYmRhIjogIiIsCisgICAgICAgICAgICAibGFyciI6ICIiLAorICAgICAgICAgICAgImxBcnIiOiAiIiwKKyAgICAgICAgICAgICJsaW1fKHgtJmd0O29vKSI6ICIiLAorICAgICAgICAgICAgIm11IjogIiIsCisgICAgICAgICAgICAiTk4iOiAiIiwKKyAgICAgICAgICAgICJubiI6ICIiLAorICAgICAgICAgICAgIm5ubiI6ICIiLAorICAgICAgICAgICAgIm5vdCI6ICIiLAorICAgICAgICAgICAgIm51IjogIiIsCisgICAgICAgICAgICAibysiOiAiIiwKKyAgICAgICAgICAgICJvLiI6ICIiLAorICAgICAgICAgICAgIk8vIjogIiIsCisgICAgICAgICAgICAib2ludCI6ICIiLAorICAgICAgICAgICAgIk9tZWdhIjogIiIsCisgICAgICAgICAgICAib21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJvbyI6ICIiLAorICAgICAgICAgICAgIm9yIjogIiIsCisgICAgICAgICAgICAib3giOiAiIiwKKyAgICAgICAgICAgICJwaGkiOiAiIiwKKyAgICAgICAgICAgICJQaGkiOiAiIiwKKyAgICAgICAgICAgICJwaSI6ICIiLAorICAgICAgICAgICAgIlBpIjogIiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICIiLAorICAgICAgICAgICAgInByb2QiOiAiIiwKKyAgICAgICAgICAgICJwcm9wIjogIiIsCisgICAgICAgICAgICAicHNpIjogIiIsCisgICAgICAgICAgICAiUHNpIjogIiIsCisgICAgICAgICAgICAiUVEiOiAiIiwKKyAgICAgICAgICAgICJxdWFkIjogIiIsCisgICAgICAgICAgICAickFyciI6ICIiLAorICAgICAgICAgICAgInJobyI6ICIiLAorICAgICAgICAgICAgInJvb3QobikoeCkiOiAiIiwKKyAgICAgICAgICAgICJSUiI6ICIiLAorICAgICAgICAgICAgInNmYSI6ICIiLAorICAgICAgICAgICAgInNpZ21hIjogIiIsCisgICAgICAgICAgICAiU2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJzcXJ0KHgpIjogIiIsCisgICAgICAgICAgICAic3F1YXJlIjogIiIsCisgICAgICAgICAgICAic3RhY2tyZWwoLSZndDspKCspIjogIiIsCisgICAgICAgICAgICAic3ViIjogIiIsCisgICAgICAgICAgICAic3ViZSI6ICIiLAorICAgICAgICAgICAgInN1bSI6ICIiLAorICAgICAgICAgICAgInN1bV8obj0xKV5vbyI6ICIiLAorICAgICAgICAgICAgInN1cCI6ICIiLAorICAgICAgICAgICAgInN1cGUiOiAiIiwKKyAgICAgICAgICAgICJ0YXUiOiAiIiwKKyAgICAgICAgICAgICJUaGV0YSI6ICIiLAorICAgICAgICAgICAgInRoZXRhIjogIiIsCisgICAgICAgICAgICAiVFQiOiAiIiwKKyAgICAgICAgICAgICJ0dGEiOiAiIiwKKyAgICAgICAgICAgICJ1YXJyIjogIiIsCisgICAgICAgICAgICAidWxhIjogIiIsCisgICAgICAgICAgICAidXBzaWxvbiI6ICIiLAorICAgICAgICAgICAgInV1IjogIiIsCisgICAgICAgICAgICAidXV1IjogIiIsCisgICAgICAgICAgICAidmVjYSI6ICIiLAorICAgICAgICAgICAgInZ2IjogIiIsCisgICAgICAgICAgICAidnZ2IjogIiIsCisgICAgICAgICAgICAieF4obStuKSI6ICIiLAorICAgICAgICAgICAgInhfKG1uKSI6ICIiLAorICAgICAgICAgICAgIlhpIjogIiIsCisgICAgICAgICAgICAieGkiOiAiIiwKKyAgICAgICAgICAgICJ4eCI6ICIiLAorICAgICAgICAgICAgInpldGEiOiAiIiwKKyAgICAgICAgICAgICJaWiI6ICIiLAorICAgICAgICAgICAgInwtJmd0OyI6ICIiLAorICAgICAgICAgICAgInwtLSI6ICIiLAorICAgICAgICAgICAgInw9PSI6ICIiLAorICAgICAgICAgICAgInxfXyI6ICIiLAorICAgICAgICAgICAgInx+IjogIiIsCisgICAgICAgICAgICAifj0iOiAiIiwKKyAgICAgICAgICAgICJ+fCI6ICIiLAorICAgICAgICAgICAgIn5+IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZhbmN5U2VsZWN0cyI6IHsKKyAgICAgICAgICAgICInK29wdC50ZXh0KyciOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiJztcclxuICB2YXIgdGFnYyA9ICciOiAiIiwKKyAgICAgICAgICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAiIiwKKyAgICAgICAgICAgICJDbGVhciI6ICIiLAorICAgICAgICAgICAgIkRvbmUiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgdGV4dCB5b3Ugd2FudCB0byBmaW5kIjogIiIsCisgICAgICAgICAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgImZvdW5kIGl0ZW0iOiAiIiwKKyAgICAgICAgICAgICJmb3VuZCBpdGVtcyI6ICIiLAorICAgICAgICAgICAgIkhpZ2hsaWdodCI6ICIiLAorICAgICAgICAgICAgIkluZm9ybSBhIHJlcGxhY2VtZW50IHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJOZXh0IjogIiIsCisgICAgICAgICAgICAibm90IGZvdW5kIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2Ugd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtIjogIiIsCisgICAgICAgICAgICAicmVwbGFjZWQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJTZWFyY2ggZm9yOiI6ICIiLAorICAgICAgICAgICAgIlN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IjogIiIsCisgICAgICAgICAgICAiVW5kbyI6ICIiLAorICAgICAgICAgICAgIldob2xlIHdvcmRzIG9ubHkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiRW50ZXIgdGhlIG5hbWUgZm9yIG5ldyBvcHRpb24uIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgRm9ybS4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBtdWx0aS1saW5lIHRleHQgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcmFkaW8gYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFNlbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgU2VsZWN0Li4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1zIjogeworICAgICAgICAgICAgIidvbkNsaWNrJz0iOiAiIiwKKyAgICAgICAgICAgICJBY2Nlc3MgS2V5OiI6ICIiLAorICAgICAgICAgICAgIkFjdGlvbiBVUkw6IjogIiIsCisgICAgICAgICAgICAiQnV0dG9uIFNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkNoZWNrZWQiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zOiI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQgdGV4dCAob3B0aW9uYWwpIjogIiIsCisgICAgICAgICAgICAiRGltZW5zaW9ucyI6ICIiLAorICAgICAgICAgICAgIkRpc2FibGVkIjogIiIsCisgICAgICAgICAgICAiRW5jb2Rpbmc6IjogIiIsCisgICAgICAgICAgICAiRm9yIENvbnRyb2w6IjogIiIsCisgICAgICAgICAgICAiRm9ybSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IElOUFVUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gaGFuZGxlciBzY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiR2V0IjogIiIsCisgICAgICAgICAgICAiSGFyZCI6ICIiLAorICAgICAgICAgICAgIkhlaWdodCBpbiBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkhUTUwtRm9ybSB0byBDR0kgKGRlZmF1bHQpIjogIiIsCisgICAgICAgICAgICAiSW1hZ2Ugc291cmNlIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMOiI6ICIiLAorICAgICAgICAgICAgIkluaXRpYWwgVGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IEZJRUxEU0VUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IElOUFVUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IExBQkVMIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFNFTEVDVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkphdmFzY3JpcHQgZm9yIGJ1dHRvbiBjbGljayI6ICIiLAorICAgICAgICAgICAgIkxhYmVsOiI6ICIiLAorICAgICAgICAgICAgIkxlZ2VuZDoiOiAiIiwKKyAgICAgICAgICAgICJNYXggbGVuZ3RoOiI6ICIiLAorICAgICAgICAgICAgIk1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWNjZXB0ZWQiOiAiIiwKKyAgICAgICAgICAgICJNZXRob2Q6IjogIiIsCisgICAgICAgICAgICAibXVsdGlwYXJ0IEZvcm0gRGF0YSAoRmlsZS1VcGxvYWQpIjogIiIsCisgICAgICAgICAgICAiTmFtZSI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIm5hbWUgb2YgdGhlIHRleHRhcmVhIjogIiIsCisgICAgICAgICAgICAiTmFtZS9JRDoiOiAiIiwKKyAgICAgICAgICAgICJub3JtYWwiOiAiIiwKKyAgICAgICAgICAgICJub3dyYXAiOiAiIiwKKyAgICAgICAgICAgICJPZmYiOiAiIiwKKyAgICAgICAgICAgICJQaHlzaWNhbCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciBhIExhYmVsIjogIiIsCisgICAgICAgICAgICAiUG9zdCI6ICIiLAorICAgICAgICAgICAgInByZSI6ICIiLAorICAgICAgICAgICAgIlJlYWQgT25seSI6ICIiLAorICAgICAgICAgICAgIlJvd3M6IjogIiIsCisgICAgICAgICAgICAiU2l6ZSBvZiB0ZXh0IGJveCBpbiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiU2l6ZToiOiAiIiwKKyAgICAgICAgICAgICJTb2Z0IjogIiIsCisgICAgICAgICAgICAiVGFiIEluZGV4OiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBGcmFtZToiOiAiIiwKKyAgICAgICAgICAgICJUZXh0OiI6ICIiLAorICAgICAgICAgICAgIlVSTCBvZiBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlZhbHVlIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiVmFsdWU6IjogIiIsCisgICAgICAgICAgICAiVmlydHVhbCI6ICIiLAorICAgICAgICAgICAgIldpZHRoIGluIG51bWJlciBvZiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiV3JhcCBNb2RlOiI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgTmFtZSI6ICIiLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IgorICAgICAgICB9LAorICAgICAgICAiRnVsbFBhZ2UiOiB7CisgICAgICAgICAgICAiLi4uIjogIiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIkJhY2tncm91bmQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiQ2hhcmFjdGVyIHNldDoiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoSVNPLTg4NTktNSkiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoS09JOC1SKSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChXSU5ET1dTLTEyNTEpIjogIiIsCisgICAgICAgICAgICAiRGVzY3JpcHRpb246IjogIiIsCisgICAgICAgICAgICAiRE9DVFlQRToiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiRG9jdW1lbnQgdGl0bGU6IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZHM6IjogIiIsCisgICAgICAgICAgICAiUHJpbWFyeSBzdHlsZS1zaGVldDoiOiAiIiwKKyAgICAgICAgICAgICJUZXh0IGNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIlVURi04IChyZWNvbW1lbmRlZCkiOiAiIiwKKyAgICAgICAgICAgICJ3ZXN0ZXJuIChJU08tODg1OS0xKSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGdWxsU2NyZWVuIjogeworICAgICAgICAgICAgIk1heGltaXplL01pbmltaXplIEVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJHZWNrbyI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICAgICAiJiN4MDBkNzsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIiIsCisgICAgICAgICAgICAiQ2VudGVyIjogIiIsCisgICAgICAgICAgICAiQ29sb3I6IjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9lZGl0IGhvcml6b250YWwgcnVsZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEhvcml6b250YWwgUnVsZSI6ICIiLAorICAgICAgICAgICAgIkxheW91dCI6ICIiLAorICAgICAgICAgICAgIkxlZnQiOiAiIiwKKyAgICAgICAgICAgICJObyBzaGFkaW5nIjogIiIsCisgICAgICAgICAgICAicGVyY2VudCI6ICIiLAorICAgICAgICAgICAgInBpeGVscyI6ICIiLAorICAgICAgICAgICAgIlJpZ2h0IjogIiIsCisgICAgICAgICAgICAiU3R5bGUiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5saW5lU3R5bGVyIjogeworICAgICAgICAgICAgIkJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciI6ICIiLAorICAgICAgICAgICAgIkJvdHRvbSI6ICIiLAorICAgICAgICAgICAgIkNoYXIiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkNTUyBTdHlsZSI6ICIiLAorICAgICAgICAgICAgIkZHIENvbG9yIjogIiIsCisgICAgICAgICAgICAiRmxvYXQiOiAiIiwKKyAgICAgICAgICAgICJKdXN0aWZ5IjogIiIsCisgICAgICAgICAgICAiTWFyZ2luIjogIiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIiIsCisgICAgICAgICAgICAiTm9uZSI6ICIiLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJUZXh0IGFsaWduIjogIiIsCisgICAgICAgICAgICAiVG9wIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWwgYWxpZ24iOiAiIiwKKyAgICAgICAgICAgICItIjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiQ2VudGVyIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSGVpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgInBlcmNlbnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJwaXhlbHMiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIldpZHRoIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydEFuY2hvciI6IHsKKyAgICAgICAgICAgICJBbmNob3IgbmFtZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBBbmNob3IiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydEltYWdlIjogeworICAgICAgICAgICAgIkFic2JvdHRvbSI6ICIiLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICIiLAorICAgICAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIiIsCisgICAgICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiIiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICIiLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiIiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIiIsCisgICAgICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiU3BhY2luZyI6ICIiLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiVmVydGljYWw6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICIiLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkxheW91dCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAgICAgIkluc2VydCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBmb290bm90ZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBOb3RlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBhZ2VicmVhayI6IHsKKyAgICAgICAgICAgICJQYWdlIGJyZWFrIjogIiIsCisgICAgICAgICAgICAiUGFnZSBCcmVhayI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbWlsZXkiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IFNtaWxleSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0IjogeworICAgICAgICAgICAgIlxcbiAgVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmdcXG4iOiAiIiwKKyAgICAgICAgICAgICJIaWRlIHByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgU25pcHBldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIiIsCisgICAgICAgICAgICAiTGluazEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMiI6ICIiLAorICAgICAgICAgICAgIkxpbmszIjogIiIsCisgICAgICAgICAgICAiTGluazQiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNSI6ICIiLAorICAgICAgICAgICAgIlNob3cgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nIjogIiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldDIiOiB7CisgICAgICAgICAgICAiQWxsIENhdGVnb3JpZXMiOiAiIiwKKyAgICAgICAgICAgICJGaWx0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMgSFRNTCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyB0ZW1wbGF0ZSB2YXJpYWJsZSI6ICIiLAorICAgICAgICAgICAgIk9ubHkgc2VhcmNoIHdvcmQgYmVnaW5uaW5nIjogIiIsCisgICAgICAgICAgICAiSFRNTCI6ICI8PENoYXJDb3VudGVyPj4iLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICI8PEluc2VydFNuaXBwZXQ+PiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgICAgICJDYXB0aW9uIjogIiIsCisgICAgICAgICAgICAiQ2FwdGlvbiBmb3IgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICIiLAorICAgICAgICAgICAgIkNlbGwgc3BhY2luZzoiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZSBib3JkZXJzOiI6ICIiLAorICAgICAgICAgICAgIkNvbHM6IjogIiIsCisgICAgICAgICAgICAiRW0iOiAiIiwKKyAgICAgICAgICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiTGF5b3UiOiAiIiwKKyAgICAgICAgICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIk51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICIiLAorICAgICAgICAgICAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIiIsCisgICAgICAgICAgICAiU3R5bGUgb2YgdGhlIGJvcmRlciI6ICIiLAorICAgICAgICAgICAgIldpZHRoIG9mIHRoZSB0YWJsZSI6ICIiLAorICAgICAgICAgICAgIldpZHRoIHVuaXQiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3JkZXIiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlBlcmNlbnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJQaXhlbHMiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJvd3M6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiU3BhY2luZyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUb3AiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxhbmdNYXJrcyI6IHsKKyAgICAgICAgICAgICImbWRhc2g7IGxhbmd1YWdlICZtZGFzaDsiOiAiIiwKKyAgICAgICAgICAgICInLCAnIjogIiIsCisgICAgICAgICAgICAiRW5nbGlzaCI6ICIiLAorICAgICAgICAgICAgIkZyZW5jaCI6ICIiLAorICAgICAgICAgICAgIkdyZWVrIjogIiIsCisgICAgICAgICAgICAibGFuZ3VhZ2Ugc2VsZWN0IjogIiIsCisgICAgICAgICAgICAiTGF0aW4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiTGlua2VyIjogeworICAgICAgICAgICAgIihweCkiOiAiIiwKKyAgICAgICAgICAgICJBbmNob3ItTGluayI6ICIiLAorICAgICAgICAgICAgIkFuY2hvcjoiOiAiIiwKKyAgICAgICAgICAgICJFbWFpbCBBZGRyZXNzOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJMb2NhdGlvbiBCYXI6IjogIiIsCisgICAgICAgICAgICAiTWVudSBCYXI6IjogIiIsCisgICAgICAgICAgICAiTWVzc2FnZSBUZW1wbGF0ZToiOiAiIiwKKyAgICAgICAgICAgICJOZXcgV2luZG93IjogIiIsCisgICAgICAgICAgICAiT3JkaW5hcnkgTGluayI6ICIiLAorICAgICAgICAgICAgIlBvcHVwIFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlBvcHVwV2luZG93IjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJSZXNpemVhYmxlOiI6ICIiLAorICAgICAgICAgICAgIlNhbWUgV2luZG93IChqdW1wIG91dCBvZiBmcmFtZXMpIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsYmFyczoiOiAiIiwKKyAgICAgICAgICAgICJTaG93cyBPbiBIb3ZlciI6ICIiLAorICAgICAgICAgICAgIlN0YXR1cyBCYXI6IjogIiIsCisgICAgICAgICAgICAiU3ViamVjdDoiOiAiIiwKKyAgICAgICAgICAgICJUaXRsZToiOiAiIiwKKyAgICAgICAgICAgICJUb29sYmFyOiI6ICIiLAorICAgICAgICAgICAgIlVSTCBMaW5rIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIiIsCisgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIk5hbWU6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiU2l6ZToiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJUYXJnZXQ6IjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJVUkw6IjogIjw8Q3JlYXRlTGluaz4+IgorICAgICAgICB9LAorICAgICAgICAiTGlzdFR5cGUiOiB7CisgICAgICAgICAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogIiIsCisgICAgICAgICAgICAiRGVjaW1hbCBudW1iZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgZ3JlZWsgbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIGxhdGluIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciByb21hbiBudW1iZXJzIjogIiIsCisgICAgICAgICAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIlVwcGVyIHJvbWFuIG51bWJlcnMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiTW9vdG9vbHNGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJPcGVyYSI6IHsKKyAgICAgICAgICAgICJNQVJLIjogIiIsCisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQYXN0ZVRleHQiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IHRleHQgaW4gbmV3IHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIlBhc3RlIGFzIFBsYWluIFRleHQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUHJlc2VydmVTY3JpcHRzIjogeworICAgICAgICAgICAgIkphdmFTY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJQSFAiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUXVpY2tUYWciOiB7CisgICAgICAgICAgICAiJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsJzogJyI6ICIiLAorICAgICAgICAgICAgIkFUVFJJQlVURVMiOiAiIiwKKyAgICAgICAgICAgICJDb2xvcnMiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgVEFHIHlvdSB3YW50IHRvIGluc2VydCI6ICIiLAorICAgICAgICAgICAgIk5vIENTUyBjbGFzcyBhdmFpYWJsZSI6ICIiLAorICAgICAgICAgICAgIk9rIjogIiIsCisgICAgICAgICAgICAiT1BUSU9OUyI6ICIiLAorICAgICAgICAgICAgIlF1aWNrIFRhZyBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJUQUdzIjogIiIsCisgICAgICAgICAgICAiVGhlcmUgYXJlIHNvbWUgdW5jbG9zZWQgcXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIGF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgVEFHIjogIiIsCisgICAgICAgICAgICAiWW91IGhhdmUgdG8gc2VsZWN0IHNvbWUgdGV4dCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTYXZlU3VibWl0IjogeworICAgICAgICAgICAgImluIHByb2dyZXNzIjogIiIsCisgICAgICAgICAgICAiUmVhZHkiOiAiIiwKKyAgICAgICAgICAgICJTYXZlIjogIiIsCisgICAgICAgICAgICAiU2F2aW5nLi4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNldElkIjogeworICAgICAgICAgICAgIklEL05hbWU6IjogIiIsCisgICAgICAgICAgICAiU2V0IElkIGFuZCBOYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElkL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSUQvTmFtZSI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiU21hcnRSZXBsYWNlIjogeworICAgICAgICAgICAgIkNsb3NpbmdEb3VibGVRdW90ZXMiOiAiIiwKKyAgICAgICAgICAgICJDbG9zaW5nU2luZ2xlUXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJDb252ZXJ0IGFsbCBxdW90ZXMgYW5kIGRhc2hlcyBpbiB0aGUgY3VycmVudCBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBhdXRvbWF0aWMgcmVwbGFjZW1lbnRzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIk9wZW5pbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIlNtYXJ0UmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgIlNtYXJ0UmVwbGFjZSBTZXR0aW5ncyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTdHlsaXN0IjogeworICAgICAgICAgICAgIlN0eWxlcyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAgICAgIkNsZWFuIGJhZCBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQuIjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gU2VsZWN0aW9uIE9ubHkiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiB1cCBIVE1MIjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgU2NvcGUiOiAiIiwKKyAgICAgICAgICAgICJHZW5lcmFsIHRpZHkgdXAgYW5kIGNvcnJlY3Rpb24gb2Ygc29tZSBwcm9ibGVtcy4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc2VsZWN0IGZyb20gdGhlIGZvbGxvd2luZyBjbGVhbmluZyBvcHRpb25zLi4uIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHN0YW5kIGJ5IHdoaWxlIGNsZWFuaW5nIGluIHByb2Nlc3MuLi4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxpZ25tZW50IChsZWZ0L3JpZ2h0L2p1c3RpZnkpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgY2xhc3NlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgQWxsIEhUTUwgVGFncyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgc3R5bGVzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gZm9udCBzaXplcy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIHRleHQgY29sb3JzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdHlwZWZhY2VzIChmb250IFwic3R5bGVzXCIpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBlbXBoYXNpcyBhbmQgYW5ub3RhdGlvbnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGxhbmcgYXR0cmlidXRlcy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgUGFyYWdyYXBocyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMuIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSBkaXJlY3Rpb25hbCBxdW90ZSBtYXJrcyB3aXRoIG5vbi1kaXJlY3Rpb25hbCBxdW90ZSBtYXJrcy4iOiAiIiwKKyAgICAgICAgICAgICJWaWdvcm91c2x5IHB1cmdlIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAgICAgIkFsbCBmb3VyIHNpZGVzIjogIiIsCisgICAgICAgICAgICAiQm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkNlbGwgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIkNlbGwgUHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIkNlbGwgVHlwZToiOiAiIiwKKyAgICAgICAgICAgICJDZWxscyBkb3duIjogIiIsCisgICAgICAgICAgICAiQ2VsbHMgdG8gdGhlIHJpZ2h0LCBhbmQiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgY2VsbCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgcm93IjogIiIsCisgICAgICAgICAgICAiRG8gTm90IENoYW5nZSI6ICIiLAorICAgICAgICAgICAgIkZyYW1lIGFuZCBib3JkZXJzIjogIiIsCisgICAgICAgICAgICAiRnJhbWVzIjogIiIsCisgICAgICAgICAgICAiSGVhZGVyICh0aCkiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY2VsbCBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY29sdW1uIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCByb3cgYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcm93IGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIGNlbGxzIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY3VycmVudCBjZWxsIHdpdGg6IjogIiIsCisgICAgICAgICAgICAiTm8gcnVsZXMiOiAiIiwKKyAgICAgICAgICAgICJObyBzaWRlcyI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCAodGQpIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNsaWNrIGludG8gc29tZSBjZWxsIjogIiIsCisgICAgICAgICAgICAiUm93IHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJSb3cgUHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGNvbHVtbnMgb25seSI6ICIiLAorICAgICAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogIiIsCisgICAgICAgICAgICAiU3BhY2luZyBhbmQgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IHJvdyI6ICIiLAorICAgICAgICAgICAgIlN1bW1hcnkiOiAiIiwKKyAgICAgICAgICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiVGFibGUgUHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlRoZSBib3R0b20gc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIGxlZnQtaGFuZCBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSByaWdodC1oYW5kIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSB0b3AgYW5kIGJvdHRvbSBzaWRlcyBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHRvcCBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjb2x1bW4gaW4gdGFibGUuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3Qgcm93IGluIHRhYmxlLiI6ICIiLAorICAgICAgICAgICAgIkNhcHRpb24iOiAiPDxJbnNlcnRUYWJsZT4+IiwKKyAgICAgICAgICAgICJDb2x1bW5zIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiRGVzY3JpcHRpb24iOiAiPDxGdWxsUGFnZT4+IiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAicGl4ZWxzIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUm93cyI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNwYWNpbmciOiAiPDxJbnNlcnRJbWFnZT4+IgorICAgICAgICB9LAorICAgICAgICAiVW5zYXZlZENoYW5nZXMiOiB7CisgICAgICAgICAgICAiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBlZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiV2ViS2l0IjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICI8PEdlY2tvPj4iCisgICAgICAgIH0sCisgICAgICAgICJYaW5oYSI6IHsKKyAgICAgICAgICAgICImIzgyMTI7IGZvbnQgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICImIzgyMTI7IHNpemUgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIjEgKDggcHQpIjogIiIsCisgICAgICAgICAgICAiMiAoMTAgcHQpIjogIiIsCisgICAgICAgICAgICAiMyAoMTIgcHQpIjogIiIsCisgICAgICAgICAgICAiNCAoMTQgcHQpIjogIiIsCisgICAgICAgICAgICAiNSAoMTggcHQpIjogIiIsCisgICAgICAgICAgICAiNiAoMjQgcHQpIjogIiIsCisgICAgICAgICAgICAiNyAoMzYgcHQpIjogIiIsCisgICAgICAgICAgICAiQWRkcmVzcyI6ICIiLAorICAgICAgICAgICAgIkFyaWFsIjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gY29udGVudCBwYXN0ZWQgZnJvbSBXb3JkIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJDbGVhciBNU09mZmljZSB0YWdzIjogIiIsCisgICAgICAgICAgICAiQ2xvc2UiOiAiIiwKKyAgICAgICAgICAgICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIiIsCisgICAgICAgICAgICAiQ291cmllciBOZXciOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgU3RhdHVzYmFyIjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFRvb2xiYXIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTAgKHplcm8pIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0xIC4uIENUUkwtNiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtRSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtVSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtViI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWiI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiIiwKKyAgICAgICAgICAgICJFZGl0b3IgSGVscCI6ICIiLAorICAgICAgICAgICAgIkVOVEVSIjogIiIsCisgICAgICAgICAgICAiRXJyb3IgTG9hZGluZyBYaW5oYS4gIERldmVsb3BlcnMsIGNoZWNrIHRoZSBFcnJvciBDb25zb2xlIGZvciBpbmZvcm1hdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGaW5pc2hpbmciOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0ZWQiOiAiIiwKKyAgICAgICAgICAgICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiIiwKKyAgICAgICAgICAgICJHZW9yZ2lhIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAxIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAyIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyAzIjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA0IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA1IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZyA2IjogIiIsCisgICAgICAgICAgICAiSGVhZGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJJbXBhY3QiOiAiIiwKKyAgICAgICAgICAgICJJbml0IGVkaXRvciBzaXplIjogIiIsCisgICAgICAgICAgICAiaW5zZXJ0IGxpbmVicmVhayI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9PdmVyd3JpdGUiOiAiIiwKKyAgICAgICAgICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIENvcmUiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW5zIjogIiIsCisgICAgICAgICAgICAiTVMgV29yZCBDbGVhbmVyIjogIiIsCisgICAgICAgICAgICAibmV3IHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIlByaW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICIiLAorICAgICAgICAgICAgIlNhdmUgYXMiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgYWxsIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IENvbG9yIjogIiIsCisgICAgICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJTSElGVC1FTlRFUiI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IEJsb2NrIjogIiIsCisgICAgICAgICAgICAiVGFob21hIjogIiIsCisgICAgICAgICAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogIiIsCisgICAgICAgICAgICAiVGltZXMgTmV3IFJvbWFuIjogIiIsCisgICAgICAgICAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJUb3VjaCBoZXJlIGZpcnN0IHRvIGFjdGl2YXRlIGVkaXRvci4iOiAiIiwKKyAgICAgICAgICAgICJWZXJkYW5hIjogIiIsCisgICAgICAgICAgICAiV2FpdGluZyBmb3IgSWZyYW1lIHRvIGxvYWQuLi4iOiAiIiwKKyAgICAgICAgICAgICJXaW5nRGluZ3MiOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIiIsCisgICAgICAgICAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJCYWNrZ3JvdW5kSW1hZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiUmVtb3ZlIEN1cnJlbnQgQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIlNldCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IHBhZ2UgYmFja2dyb3VuZCBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlNldCBQYWdlIEJhY2tncm91bmQgSW1hZ2UiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ2xpZW50c2lkZVNwZWxsY2hlY2siOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVjayB1c2luZyBpZVNwZWxsIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEwJSI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiIiwKKyAgICAgICAgICAgICIyMDAlIjogIiIsCisgICAgICAgICAgICAiMjUlIjogIiIsCisgICAgICAgICAgICAiNTAlIjogIiIsCisgICAgICAgICAgICAiNzUlIjogIiIsCisgICAgICAgICAgICAiPkxpc3QgVmlldyI6ICIiLAorICAgICAgICAgICAgIj5UaHVtYm5haWwgVmlldyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIiIsCisgICAgICAgICAgICAiQWxpZ24iOiAiIiwKKyAgICAgICAgICAgICJBbHQiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJDcm9wIjogIiIsCisgICAgICAgICAgICAiRDoiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiIiwKKyAgICAgICAgICAgICJFZGl0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIiIsCisgICAgICAgICAgICAiRmlsZW5hbWU6IjogIiIsCisgICAgICAgICAgICAiRmlsZXNpemU6IjogIiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkZsaXAgVmVydGljYWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJHSUYiOiAiIiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiIiwKKyAgICAgICAgICAgICJIOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIiIsCisgICAgICAgICAgICAiSlBFRyBIaWdoIjogIiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiIiwKKyAgICAgICAgICAgICJKUEVHIE1lZGl1bSI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmciOiAiIiwKKyAgICAgICAgICAgICJMb2NrIjogIiIsCisgICAgICAgICAgICAiTWFya2VyIjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBmb2xkZXIgc2l6ZSBsaW1pdCByZWFjaGVkLiBVcGxvYWQgZGlzYWJsZWQuIjogIiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICIiLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJObyBGaWxlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB2YWx1ZSI6ICIiLAorICAgICAgICAgICAgIlBORyI6ICIiLAorICAgICAgICAgICAgIlByZXNldCI6ICIiLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIiIsCisgICAgICAgICAgICAiUmVmcmVzaCI6ICIiLAorICAgICAgICAgICAgIlJlbmFtZSI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIEltYWdlIjogIiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiIiwKKyAgICAgICAgICAgICJTdGFydCBZOiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgbWFya2VyIGNvbG9yIjogIiIsCisgICAgICAgICAgICAiVHJhc2giOiAiIiwKKyAgICAgICAgICAgICJVcGxvYWQiOiAiIiwKKyAgICAgICAgICAgICJXOiI6ICIiLAorICAgICAgICAgICAgIlg6IjogIiIsCisgICAgICAgICAgICAiWGluaGEgSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiWToiOiAiIiwKKyAgICAgICAgICAgICJab29tIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJDbGVhciI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIkNvbG9yIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiQ29weSI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkN1dCI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkhlaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIjw8TW9vdG9vbHNGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTWFyZ2luIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUGFkZGluZyI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVGl0bGUgKHRvb2x0aXApIjogIjw8Q3JlYXRlTGluaz4+IiwKKyAgICAgICAgICAgICJUb3AiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiV2lkdGgiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbHRlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEZJTFRFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWx0ZXIiOiAiPDxJbnNlcnRTbmlwcGV0Mj4+IgorICAgICAgICB9LAorICAgICAgICAiSHRtbFRpZHkiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBdXRvLVRpZHkiOiAiIiwKKyAgICAgICAgICAgICJEb24ndCBUaWR5IjogIiIsCisgICAgICAgICAgICAiSFRNTCBUaWR5IjogIiIsCisgICAgICAgICAgICAiVGlkeSBmYWlsZWQuICBDaGVjayB5b3VyIEhUTUwgZm9yIHN5bnRheCBlcnJvcnMuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkltYWdlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElNQUdFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbmdsZToiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgUGljdHVyZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmVzIjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBVc2VybmFtZS9FbWFpbCI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciBOYW1lOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIEZvcm1hdCI6ICIiLAorICAgICAgICAgICAgIkltYWdlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkIjogIiIsCisgICAgICAgICAgICAiTm8gSW1hZ2VzIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gUGhvdG9zIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gVmlkZW9zIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiVGhpcyBTZXJ2ZXIiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVXNlcm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFZpZGVvIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFZpZGVvcyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQ2xlYXIiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkNyb3AiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkQ6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRWRpdCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZW5hbWU6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIEhvcml6b250YWwiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZsaXAgSW1hZ2UiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZsaXAgVmVydGljYWwiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkdJRiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJIOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBIaWdoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIExvdyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBNZWRpdW0iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMb2NrIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJNYXJrZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1lYXN1cmUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJOZXcgRm9sZGVyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQTkciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJRdWFsaXR5OiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUmVmcmVzaCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUmVzaXplIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlNhdmUiOiAiPDxTYXZlU3VibWl0Pj4iLAorICAgICAgICAgICAgIlN0YXJ0IFg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTdGFydCBZOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRvcCI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJUcmFzaCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiVzoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIldpZHRoOiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJZOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE1hcnF1ZWUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTlNFUlRNQVJRVUVFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFsdGVybmF0ZSI6ICIiLAorICAgICAgICAgICAgIkJhY2tncm91bmQtQ29sb3I6IjogIiIsCisgICAgICAgICAgICAiQmVoYXZpb3I6IjogIiIsCisgICAgICAgICAgICAiQ29udGludW91cyI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdGlvbjoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgc2Nyb2xsaW5nIG1hcnF1ZWUiOiAiIiwKKyAgICAgICAgICAgICJNYXJxdWVlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbCBBbW91bnQ6IjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIERlbGF5OiI6ICIiLAorICAgICAgICAgICAgIlNsaWRlIjogIiIsCisgICAgICAgICAgICAiU3BlZWQgQ29udHJvbCI6ICIiLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTmFtZSI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIk5hbWUvSUQ6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJUZXh0OiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIldpZHRoOiI6ICI8PEhvcml6b250YWxSdWxlPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm90IGRlZmluZWQiOiAiIiwKKyAgICAgICAgICAgICJPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIiBPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlVwbG9hZCBmaWxlIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkhvcml6b250YWw6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBVUkw6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJTaXplIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiU3BhY2luZyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUb3AiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlZlcnRpY2FsOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIldpZHRoOiI6ICI8PEhvcml6b250YWxSdWxlPj4iCisgICAgICAgIH0sCisgICAgICAgICJOb3RlU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIxMjAlIjogIiIsCisgICAgICAgICAgICAiMTUwJSI6ICIiLAorICAgICAgICAgICAgIjgwJSI6ICIiLAorICAgICAgICAgICAgIkFkZCBHVUlETyBDb2RlIGluIGEgdGV4dGJveCBvbiB0aGUgcGFnZSI6ICIiLAorICAgICAgICAgICAgIkFkZCBNSURJIGxpbmsgdG8gYWxsb3cgc3R1ZGVudHMgdG8gaGVhciB0aGUgbXVzaWMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJHVUlETyBDb2RlIjogIiIsCisgICAgICAgICAgICAiR3VpZG8gY29kZSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIGluIGFwcGxldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBHVUlETyBNdXNpYyBOb3RhdGlvbiI6ICIiLAorICAgICAgICAgICAgIk1JREkgRmlsZSI6ICIiLAorICAgICAgICAgICAgIlNvdXJjZSBDb2RlIjogIiIsCisgICAgICAgICAgICAiV2l0aCBNb3ppbGxhLCB0aGUgYXBwbGV0IHdpbGwgbm90IGJlIHZpc2libGUgaW4gZWRpdG9yLCBidXQgb25seSBpbiBXZWIgcGFnZSBhZnRlciBzdWJtaXR0aW5nLiI6ICIiLAorICAgICAgICAgICAgIlpvb20gOiI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIFByZXZpZXciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJPcHRpb25zIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlpvb20iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJQU0xvY2FsIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNMT0NBTCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJDb25maXJtIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIEdlYXJzIGluIG9yZGVyIHRvIHVzZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlIGFuZCBjb25maWd1cmF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkVuYWJsaW5nIExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJJbnN0YWxsIjogIiIsCisgICAgICAgICAgICAiTGVhcm4gQWJvdXQgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCByZWxvYWQgdGhlIHBhZ2UsIGNhdXNpbmcgeW91IHRvIGxvc2UgYW55IHVuc2F2ZWQgd29yay4gIFByZXNzIFwiT0tcIiB0byByZWxvYWQuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgdXNlcyBHb29nbGUgR2VhcnMgdG8gZW5hYmxlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UuICBXaXRoIEdlYXJzIGluc3RhbGxlZCwgeW91IGNhbiBzYXZlIGRyYWZ0cyBvZiB5b3VyIGRvY3VtZW50cyBvbiB5b3VyIGhhcmQgZHJpdmUsIGNvbmZpZ3VyZSBYaW5oYSB0byBsb29rIHRoZSB3YXkgeW91IHdhbnQsIGFuZCBjYXJyeSB0aGlzIGluZm9ybWF0aW9uIHdoZXJldmVyIHlvdSB1c2UgWGluaGEgb24gdGhlIHdlYi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiUFNTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU1NFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWxlOiAiOiAiIiwKKyAgICAgICAgICAgICJJbXBvcnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEZXRhaWxzIjogIiIsCisgICAgICAgICAgICAiRmlsZSBCcm93c2VyIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gICAgVGhlcmUgQyAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgVGhlcmUgQSAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyBcIiBUaGVyZSBCIFwiIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gJyBUaGVyZSBEICciOiAiIiwKKyAgICAgICAgICAgICJMaXN0IG9mIFBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIk5ldyBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIk9wZW4iOiAiIiwKKyAgICAgICAgICAgICJPcGVuIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgeW91J2QgbGlrZSB0byBjcmVhdGUuIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBlcmFzZSBhbnkgdW5zYXZlZCBjb250ZW50LiAgSWYgeW91J3JlIGNlcnRhaW4sIHBsZWFzZSBjbGljayBPSyB0byBjb250aW51ZS4iOiAiIiwKKyAgICAgICAgICAgICJXZWIgVVJMIjogIiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICI8PFBTTG9jYWw+PiIsCisgICAgICAgICAgICAiQ29weSI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTGlzdCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlbmFtZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IjogIjw8SW5zZXJ0Tm90ZT4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJOZXcgRm9sZGVyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNwZWxsQ2hlY2tlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEaWN0aW9uYXJ5IjogIiIsCisgICAgICAgICAgICAiRmluaXNoZWQgbGlzdCBvZiBtaXNwZWxsZWQgd29yZHMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MQXJlYSBTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiSSB3aWxsIG9wZW4gaXQgaW4gYSBuZXcgcGFnZS4iOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUiOiAiIiwKKyAgICAgICAgICAgICJJZ25vcmUgYWxsIjogIiIsCisgICAgICAgICAgICAiSW5mbyI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIjogIiIsCisgICAgICAgICAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIiIsCisgICAgICAgICAgICAiT3JpZ2luYWwgd29yZCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gb3BlbiB0aGlzIGxpbmsiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugd2FpdDogY2hhbmdpbmcgZGljdGlvbmFyeSB0byI6ICIiLAorICAgICAgICAgICAgInBsaXogd2VpdCA7LSkiOiAiIiwKKyAgICAgICAgICAgICJSZS1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGFsbCI6ICIiLAorICAgICAgICAgICAgIlJldmVydCI6ICIiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrZXIiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbC1jaGVjayI6ICIiLAorICAgICAgICAgICAgIlN1Z2dlc3Rpb25zIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSB3aXRoIjogIjw8RmluZFJlcGxhY2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlRlbXBsYXRlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiSW5zZXJ0IHRlbXBsYXRlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuRm9ybWF0IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWxsIjogIiIsCisgICAgICAgICAgICAiQWxsIEhUTUw6IjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgQXJlYSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIG9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0aW5nOiI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCB3aGljaCB0eXBlcyBvZiBmb3JtYXR0aW5nIHlvdSB3b3VsZCBsaWtlIHRvIHJlbW92ZS4iOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Rpb24iOiAiIgorICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL3RyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9tZXJnZWQvdHIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY0M2IwYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL3RyLmpzCkBAIC0wLDAgKzEsMTU2OSBAQAorLy8gWGluaGEgTGFuZ3VhZ2UgQ29tYmluZWQgVHJhbnNsYXRpb24gRmlsZQorLy8KKy8vIExBTkc6ICJ0ciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElOU1RSVUNUSU9OUyBUTyBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gWW91ciB0cmFuc2xhdGlvbiBtdXN0IGJlIGluIFVURi04IENoYXJhY3RlciBFbmNvZGluZy4KKy8vCisvLyBUaGlzIGlzIGEgSlNPTiBlbmNvZGVkIGZpbGUgKHBsdXMgY29tbWVudHMpLCBzdHJpbmdzIHNob3VsZCBiZSBkb3VibGUtcXVvdGUKKy8vIG9ubHksIGRvIG5vdCB1c2Ugc2luZ2xlIHF1b3RlcyB0byBzdXJyb3VuZCBzdHJpbmdzIC0gImhlbGxvIiwgbm90ICdoZWxsbycKKy8vIGRvIG5vdCBoYXZlIGEgdHJhaWxpbmcgY29tbWEgYWZ0ZXIgdGhlIGxhc3QgZW50cnkgaW4gYSBzZWN0aW9uLgorLy8KKy8vIE9ubHkgZnVsbCBsaW5lIGNvbW1lbnRzIGFyZSBhbGxvd2VkICh0aGF0IGEgY29tbWVudHMgb2NjdXB5IGVudGlyZSBsaW5lcykuCisvLworLy8gU2VhcmNoIGZvciB0aGUgX19ORVdfVFJBTlNMQVRJT05TX18gc2VjdGlvbiBiZWxvdywgdGhpcyBpcyB3aGVyZSB5b3Ugd2lsbAorLy8gd2FudCB0byBmb2N1cywgdGhpcyBzZWN0aW9uIGluY2x1ZGVzIHRoaW5ncyB0aGF0IGRvIG5vdCBwcmVzZW50bHkgaGF2ZSBhIAorLy8gdHJhbnNsYXRpb24gb3IgZm9yIHdoaWNoIHRoZSB0cmFuc2xhdGlvbiBuZWVkcyB0byBiZSBjaGVja2VkIGZvciBhY2N1cmFjeS4KKy8vCisvLyBJbiB0aGUgTmV3IFRyYW5zbGF0aW9ucyBzZWN0aW9uIGEgdHJhbnNsYXRpb24gc3RyaW5nIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICIiCisvLyAgICAgVGhpcyBtZWFucyBpdCBpcyBub3QgdHJhbnNsYXRlZCB5ZXQsIGFkZCB5b3VyIHRyYW5zbGF0aW9uLi4uCisvLyAgICAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIktsaW5nb24gU3RyaW5nIEhlcmUiCisvLworLy8gICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJUcmFuc2xhdGVkIFN0cmluZyBIZXJlIgorLy8gICAgIFRoaXMgbWVhbnMgdGhhdCBhbiBleGlzdGluZyB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcsIGluIHNvbWUgb3RoZXIKKy8vICAgICBzZWN0aW9uIGhhcyBiZWVuIGZvdW5kLCBhbmQgdXNlZC4gIENoZWNrIHRoYXQgaXQgaXMgYXBwcm9wcml0ZSBmb3IgdGhpcworLy8gICAgIHNlY3Rpb24gYW5kIGlmIGl0IGlzLCB0aGF0J3MgZmluZSBsZWF2ZSBpdCBhcyBpcywgb3RoZXJ3aXNlIGNoYW5nZSBhcworLy8gICAgIGFwcHJvcHJpYXRlLgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiPDxBbm90aGVyU2VjdGlvbj4+IgorLy8gICAgIFRoaXMgbWVhbnMgdXNlIHRoZSBzYW1lIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZyBhcyA8PEFub3RoZXJTZWN0aW9uPj4KKy8vICAgICB0aGlzIHNhdmVzIHlvdSByZS10cmFubGF0aW5nIHN0cmluZ3MuICBJZiB0aGUgQ29udGV4dCBvZiB0aGlzIHNlY3Rpb24KKy8vICAgICBhbmQgdGhlIGNvbnRleHQgb2YgQW5vdGhlclNlY3Rpb24gc2VlbSB0aGUgc2FtZSwgdGhhdCdzIGZpbmUgbGVhdmUgaXQKKy8vICAgICB1c2luZyB0aGF0IHRyYW5zbGF0aW9uLCBidXQgaWYgdGhpcyBzZWN0aW9uIG5lZWRzIGEgZGlmZmVyZW50IHRyYW5zbGF0aW9uLCAKKy8vICAgICB5b3UgY2FuIHByb3ZpZGUgaXQgYnkgcmVwbGFjaW5nIHRoZSBsaW5rICg8PEFub3RoZXJTZWN0aW9uPj4pIHdpdGggdGhhdAorLy8gICAgIG5ldyB0cmFuc2xhdGlvbi4gIEZvciBleGFtcGxlIC0gYSAiVGFibGUiIGluIHNheSAiRGF0YVBsdWdpbiIgaXMgCisvLyAgICAgcGVyaGFwcyB0cmFuc2xhdGVkIGRpZmZlcmVudGx5IHRvICJUYWJsZSIgaW4gIkZ1cm5pdHVyZVBsdWdpbiIuCisvLworLy8gVEVTVElORyBZT1VSIFRSQU5TTEFUSU9OCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNpbXBseSBwbGFjZSB5b3VyIHRyYW5zbGF0aW9uIGZpbGUgb24geW91ciB3ZWJzZXJ2ZXIgc29tZXdoZXJlIGZvciBleGFtcGxlCisvLworLy8gICAveGluaGEvbGFuZy9tZXJnZWQvdHIuanMKKy8vCisvLyBhbmQgdGhlbiB0ZWxsIFhpbmhhIHdoZXJlIHRvIGdldCBpdCAoYmVmb3JlIGxvYWRpbmcgWGluaGFDb3JlLmpzKSBieSAKKy8vCisvLyAgX2VkaXRvcl9sYW5nICAgICAgICAgICAgICA9ICd0cic7CisvLyAgX2VkaXRvcl9sYW5nX21lcmdlZF9maWxlICA9ICcveGluaGEvbGFuZy9tZXJnZWQvdHIuanMnOworLy8KKy8vIFhpbmhhIHdpbGwgbG9hZCB5b3VyIG5ldyBsYW5ndWFnZSBkZWZpbml0aW9uLgorLy8KKy8vIFNVQk1JVFRJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgY3JlYXRlIGEgVGlja2V0IG9uIHRoZSBYaW5oYSB3ZWJzaXRlIGFuZCBhdHRhY2ggeW91ciB0cmFuc2xhdGlvbiAKKy8vIGZpbGUuCisvLworLy8gVGhlIFhpbmhhIGRldmVsb3BlcnMgd2lsbCB0YWtlIHlvdXIgZmlsZSBhbmQgdXNlIHRoZSAKKy8vICAgICBjb250cmliL2xjX3NwbGl0X21lcmdlZF9maWxlLnBocAorLy8gc2NyaXB0IHRvIGxvYWQgaXQgaW50byB0aGUgWGluaGEgZGlzdHJpYnV0aW9uLgorCit7CisgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgIkFiYnJldmlhdGlvbiI6ICJLxLFzYWx0bWEiLAorICAgICAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgICAgICJEZWxldGUiOiAiU2lsIiwKKyAgICAgICAgIkV4cGFuc2lvbjoiOiAiQcOnxLFsxLFtOiIsCisgICAgICAgICJPSyI6ICJUYW1hbSIKKyAgICB9LAorICAgICJBYm91dEJveCI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIkJ1IGTDvHplbmxleWljaSBoYWtrxLFuZGEiLAorICAgICAgICAiQ2xvc2UiOiAiS2FwYXQiCisgICAgfSwKKyAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIsSwcHRhbCIKKyAgICB9LAorICAgICJDaGFyYWN0ZXJNYXAiOiB7CisgICAgICAgICJJbnNlcnQgc3BlY2lhbCBjaGFyYWN0ZXIiOiAiw5Z6ZWwga2FyYWt0ZXIgZWtsZSIKKyAgICB9LAorICAgICJDb2xvclBpY2tlciI6IHsKKyAgICAgICAgIkNsaWNrIGEgY29sb3IuLi4iOiAiQmlyIHJlbmsgc2XDp2luIiwKKyAgICAgICAgIkNsb3NlIjogIkthcGF0IiwKKyAgICAgICAgIkNvbG9yOiAiOiAiUmVuazogIiwKKyAgICAgICAgIk9LIjogIlRhbWFtIiwKKyAgICAgICAgIlNhbXBsZSI6ICLDlnJuZWsiLAorICAgICAgICAiV2ViIFNhZmU6ICI6ICJXZWIgZ8O8dmVubGkgbW9kOiAiCisgICAgfSwKKyAgICAiQ29udGV4dE1lbnUiOiB7CisgICAgICAgICJKdXN0aWZ5IENlbnRlciI6ICJPcnRheWEgaGl6YWxhIiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICJUYW0gaGl6YWxhIiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICJTb2xhIGhpemFsYSIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIlNhxJ9hIGhpemFsYSIKKyAgICB9LAorICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiQmHEn2xhbnTEsSBla2xlL2RlxJ9pxZ90aXIiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJZZW5pIHBlbmNlcmUgKF9ibGFuaykiLAorICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJIacOnYmlyaSAow5ZydMO8aykiLAorICAgICAgICAiT0siOiAiVGFtYW0iLAorICAgICAgICAiT3RoZXIiOiAiQmHFn2thIiwKKyAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJBeW7EsSDDp2Vyw6dldmUgKF9zZWxmKSIsCisgICAgICAgICJUYXJnZXQ6IjogIkhlZGVmOiIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogIkJhxZ9sxLFrIChBcmHDpyBpcHVjdSk6IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiRW4gw7xzdCDDp2Vyw6dldmUgKF90b3ApIiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIKKyAgICB9LAorICAgICJFZGl0VGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgICAgICJFZGl0IEhUTUwgZm9yIHNlbGVjdGVkIHRleHQiOiAiU2XDp2lsZW4gbWV0aW4gacOnaW4gSFRNTCBkw7x6ZW5sZW1lc2kgeWFwIiwKKyAgICAgICAgIk9LIjogIlRhbWFtIiwKKyAgICAgICAgIlRhZyBFZGl0b3IiOiAiSFRNTCBldGlrZXQgZMO8emVubGV5aWNpc2kiCisgICAgfSwKKyAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAixLBwdGFsIiwKKyAgICAgICAgIk9LIjogIlRhbWFtIiwKKyAgICAgICAgIlByZXZpZXciOiAiw5ZuaXpsZW1lIgorICAgIH0sCisgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICJBYnNib3R0b20iOiAiU2FsdCBhbHRhIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJTYWx0IG9ydGEiLAorICAgICAgICAiQWxpZ24iOiAiSGl6YWxhIiwKKyAgICAgICAgIkJhc2VsaW5lIjogIlRhYmFuIGhpemFzxLEiLAorICAgICAgICAiQm9yZGVyIjogIktlbmFybMSxayIsCisgICAgICAgICJCb3R0b20iOiAiQWx0YSIsCisgICAgICAgICJDYW5jZWwiOiAixLBwdGFsIiwKKyAgICAgICAgIkNvbG9yIjogIlJlbmsiLAorICAgICAgICAiSGVpZ2h0IjogIlnDvGtzZWtsaWsiLAorICAgICAgICAiSGVpZ2h0OiI6ICJZw7xrc2VrbGlrIiwKKyAgICAgICAgIkxlZnQiOiAiU29sYSIsCisgICAgICAgICJNYXJnaW4iOiAiS2VuYXIgYm/Fn2x1xJ91IiwKKyAgICAgICAgIk1pZGRsZSI6ICJPcnRhbGEiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJZZW5pIHBlbmNlcmUgKF9ibGFuaykiLAorICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJIacOnYmlyaSAow5ZydMO8aykiLAorICAgICAgICAiTm90IHNldCI6ICJBeWFybGFubWFtxLHFnyIsCisgICAgICAgICJPSyI6ICJUYW1hbSIsCisgICAgICAgICJQYWRkaW5nIjogIsSww6cgYm/Fn2x1ayIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIlJlc21pIGtvbnVtbGFuZMSxcm1hIiwKKyAgICAgICAgIlByZXZpZXciOiAiw5ZuaXpsZW1lIiwKKyAgICAgICAgIlJpZ2h0IjogIlNhxJ9hIiwKKyAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJBeW7EsSDDp2Vyw6dldmUgKF9zZWxmKSIsCisgICAgICAgICJUZXh0dG9wIjogIk1ldGluLcO8c3R0ZSIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCkiOiAiQmHFn2zEsWsgKEFyYcOnIGlwdWN1KToiLAorICAgICAgICAiVG9wIjogIll1a2FyxLEiLAorICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJFbiDDvHN0IMOnZXLDp2V2ZSAoX3RvcCkiLAorICAgICAgICAiV2lkdGgiOiAiR2VuacWfbGlrIiwKKyAgICAgICAgIldpZHRoOiI6ICJHZW5pxZ9saWs6IgorICAgIH0sCisgICAgIkZvcm1zIjogeworICAgICAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIlJlc2ltIFVSTCdzaToiLAorICAgICAgICAiT0siOiAiVGFtYW0iLAorICAgICAgICAiUm93czoiOiAiU2F0xLFyOiIKKyAgICB9LAorICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLEsHB0YWwiLAorICAgICAgICAiRGVzY3JpcHRpb246IjogIlRhbsSxbSIsCisgICAgICAgICJPSyI6ICJUYW1hbSIKKyAgICB9LAorICAgICJGdWxsU2NyZWVuIjogeworICAgICAgICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIkVkaXTDtnLDvCBzaW1nZSBkdXJ1bXVuYSBrw7zDp8O8bHQvZ2VyaSB5w7xrbGUiCisgICAgfSwKKyAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICJBbGlnbm1lbnQ6IjogIkhpemFsYW1hOiIsCisgICAgICAgICJDYW5jZWwiOiAixLBwdGFsIiwKKyAgICAgICAgIkNlbnRlciI6ICJPcnRhbGEiLAorICAgICAgICAiQ29sb3I6IjogIlJlbmsiLAorICAgICAgICAiSGVpZ2h0OiI6ICJZw7xrc2VrbGlrIiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICJZYXRheSBjZXR2ZWwiLAorICAgICAgICAiTGF5b3V0IjogIkTDvHplbiIsCisgICAgICAgICJMZWZ0IjogIlNvbGEiLAorICAgICAgICAiT0siOiAiVGFtYW0iLAorICAgICAgICAiUmlnaHQiOiAiU2HEn2EiLAorICAgICAgICAiV2lkdGg6IjogIkdlbmnFn2xpazoiLAorICAgICAgICAicGVyY2VudCI6ICIlIiwKKyAgICAgICAgInBpeGVscyI6ICJQaWtzZWwiCisgICAgfSwKKyAgICAiSW1hZ2VNYW5hZ2VyIjogeworICAgICAgICAiQWJzYm90dG9tIjogIlNhbHQgYWx0YSIsCisgICAgICAgICJBYnNtaWRkbGUiOiAiU2FsdCBvcnRhIiwKKyAgICAgICAgIkJhc2VsaW5lIjogIlRhYmFuIGhpemFzxLEiLAorICAgICAgICAiQm90dG9tIjogIkFsdGEiLAorICAgICAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgICAgICJIZWlnaHQ6IjogIlnDvGtzZWtsaWsiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIlJlc2ltIGVrbGUiLAorICAgICAgICAiTGVmdCI6ICJTb2xhIiwKKyAgICAgICAgIk1pZGRsZSI6ICJPcnRhbGEiLAorICAgICAgICAiTm90IHNldCI6ICJBeWFybGFubWFtxLHFnyIsCisgICAgICAgICJPSyI6ICJUYW1hbSIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIlJlc21pIGtvbnVtbGFuZMSxcm1hIiwKKyAgICAgICAgIlJpZ2h0IjogIlNhxJ9hIiwKKyAgICAgICAgIlRleHR0b3AiOiAiTWV0aW4tw7xzdHRlIiwKKyAgICAgICAgIlRvcCI6ICJZdWthcsSxIiwKKyAgICAgICAgIldpZHRoOiI6ICJHZW5pxZ9saWs6IgorICAgIH0sCisgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgIkJhY2tncm91bmQiOiAiQXJrYSBwbGFuIiwKKyAgICAgICAgIkJhc2VsaW5lIjogIlRhYmFuIGhpemFzxLEiLAorICAgICAgICAiQm9yZGVyIjogIktlbmFybMSxayIsCisgICAgICAgICJCb3R0b20iOiAiQWx0YSIsCisgICAgICAgICJDZW50ZXIiOiAiT3J0YWxhIiwKKyAgICAgICAgIkNoYXIiOiAiS2FyYWt0ZXIiLAorICAgICAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAiRGFyYWx0xLFsbcSxxZ8ga2VuYXJsxLFrbGFyIiwKKyAgICAgICAgIkZHIENvbG9yIjogIsOWbiBwbGFuIHJlbmdpIiwKKyAgICAgICAgIkZsb2F0IjogIktheWTEsXIiLAorICAgICAgICAiSGVpZ2h0IjogIlnDvGtzZWtsaWsiLAorICAgICAgICAiSW1hZ2UgVVJMIjogIlJlc2ltIFVSTCdzaSIsCisgICAgICAgICJKdXN0aWZ5IjogIllhc2xhIiwKKyAgICAgICAgIkxheW91dCI6ICJEw7x6ZW4iLAorICAgICAgICAiTGVmdCI6ICJTb2xhIiwKKyAgICAgICAgIk1hcmdpbiI6ICJLZW5hciBib8WfbHXEn3UiLAorICAgICAgICAiTWlkZGxlIjogIk9ydGFsYSIsCisgICAgICAgICJOb25lIjogIkhpw6diaXJpIiwKKyAgICAgICAgIlBhZGRpbmciOiAixLDDpyBib8WfbHVrIiwKKyAgICAgICAgIlJpZ2h0IjogIlNhxJ9hIiwKKyAgICAgICAgIlRleHQgYWxpZ24iOiAiTWV0aW4gaGl6YXPEsSIsCisgICAgICAgICJUb3AiOiAiWXVrYXLEsSIsCisgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICJEaWtleSBoaXphIiwKKyAgICAgICAgIldpZHRoIjogIkdlbmnFn2xpayIsCisgICAgICAgICJwZXJjZW50IjogIiUiLAorICAgICAgICAicGl4ZWxzIjogIlBpa3NlbCIKKyAgICB9LAorICAgICJJbnNlcnRBbmNob3IiOiB7CisgICAgICAgICJDYW5jZWwiOiAixLBwdGFsIiwKKyAgICAgICAgIkRlbGV0ZSI6ICJTaWwiLAorICAgICAgICAiT0siOiAiVGFtYW0iCisgICAgfSwKKyAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICJBYnNib3R0b20iOiAiU2FsdCBhbHRhIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJTYWx0IG9ydGEiLAorICAgICAgICAiQWxpZ25tZW50OiI6ICJIaXphbGFtYToiLAorICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIkFsdGVybmF0aWYgbWV0aW46IiwKKyAgICAgICAgIkJhc2VsaW5lIjogIlRhYmFuIGhpemFzxLEiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiS2VuYXJsxLFrIGthbMSxbmzEscSfxLE6IiwKKyAgICAgICAgIkJvdHRvbSI6ICJBbHRhIiwKKyAgICAgICAgIkNhbmNlbCI6ICLEsHB0YWwiLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkzDvHRmZW4gYnVyYXlhIHJlc2ltIFVSTCdzaW5pIGdpcmluIiwKKyAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIlJlc2ltIGRlc3Rla2xlbWV5ZW4gdGFyYXnEsWPEsWxhciBpw6dpbiIsCisgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiWWF0YXkgZG9sZHVybWEgbWlrdGFyxLEiLAorICAgICAgICAiSG9yaXpvbnRhbDoiOiAiWWF0YXk6IiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIlJlc2ltIMO2bml6bGVtZToiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJSZXNpbSBVUkwnc2k6IiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICJSZXNpbSBla2xlIiwKKyAgICAgICAgIkxheW91dCI6ICJEw7x6ZW4iLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJLZW5hcmzEsWsgaXN0ZW1peW9yc2FuxLF6IGJvxZ8gYsSxcmFrxLFuIiwKKyAgICAgICAgIkxlZnQiOiAiU29sYSIsCisgICAgICAgICJNaWRkbGUiOiAiT3J0YWxhIiwKKyAgICAgICAgIk5vdCBzZXQiOiAiQXlhcmxhbm1hbcSxxZ8iLAorICAgICAgICAiT0siOiAiVGFtYW0iLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJSZXNtaSBrb251bWxhbmTEsXJtYSIsCisgICAgICAgICJQcmV2aWV3IjogIsOWbml6bGVtZSIsCisgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiUmVzbWkgeWVuaSBwZW5jZXJlZGUgw7ZuaXpsZW1lIiwKKyAgICAgICAgIlJpZ2h0IjogIlNhxJ9hIiwKKyAgICAgICAgIlNwYWNpbmciOiAiQXJhbMSxayIsCisgICAgICAgICJUZXh0dG9wIjogIk1ldGluLcO8c3R0ZSIsCisgICAgICAgICJUb3AiOiAiWXVrYXLEsSIsCisgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIkRpa2V5IGRvbGR1cm1hIG1pa3RhcsSxIiwKKyAgICAgICAgIlZlcnRpY2FsOiI6ICJEaWtleToiLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICJMw7x0ZmVuIFVSTCBnaXJpbiIKKyAgICB9LAorICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgICAgICJIZWlnaHQ6IjogIlnDvGtzZWtsaWsiLAorICAgICAgICAiTGVmdCI6ICJTb2xhIiwKKyAgICAgICAgIk9LIjogIlRhbWFtIiwKKyAgICAgICAgIlJpZ2h0IjogIlNhxJ9hIiwKKyAgICAgICAgIldpZHRoOiI6ICJHZW5pxZ9saWs6IgorICAgIH0sCisgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAixLBwdGFsIgorICAgIH0sCisgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICJBYnNib3R0b20iOiAiU2FsdCBhbHRhIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJTYWx0IG9ydGEiLAorICAgICAgICAiQWxpZ25tZW50OiI6ICJIaXphbGFtYToiLAorICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIkFsdGVybmF0aWYgbWV0aW46IiwKKyAgICAgICAgIkJhc2VsaW5lIjogIlRhYmFuIGhpemFzxLEiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiS2VuYXJsxLFrIGthbMSxbmzEscSfxLE6IiwKKyAgICAgICAgIkJvdHRvbSI6ICJBbHRhIiwKKyAgICAgICAgIkNhbmNlbCI6ICLEsHB0YWwiLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkzDvHRmZW4gYnVyYXlhIHJlc2ltIFVSTCdzaW5pIGdpcmluIiwKKyAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIlJlc2ltIGRlc3Rla2xlbWV5ZW4gdGFyYXnEsWPEsWxhciBpw6dpbiIsCisgICAgICAgICJIZWlnaHQ6IjogIlnDvGtzZWtsaWsiLAorICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIllhdGF5IGRvbGR1cm1hIG1pa3RhcsSxIiwKKyAgICAgICAgIkhvcml6b250YWw6IjogIllhdGF5OiIsCisgICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICJSZXNpbSDDtm5pemxlbWU6IiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiUmVzaW0gVVJMJ3NpOiIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiUmVzaW0gZWtsZSIsCisgICAgICAgICJMYXlvdXQiOiAiRMO8emVuIiwKKyAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiS2VuYXJsxLFrIGlzdGVtaXlvcnNhbsSxeiBib8WfIGLEsXJha8SxbiIsCisgICAgICAgICJMZWZ0IjogIlNvbGEiLAorICAgICAgICAiTWlkZGxlIjogIk9ydGFsYSIsCisgICAgICAgICJOb3Qgc2V0IjogIkF5YXJsYW5tYW3EscWfIiwKKyAgICAgICAgIk9LIjogIlRhbWFtIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUmVzbWkga29udW1sYW5kxLFybWEiLAorICAgICAgICAiUHJldmlldyI6ICLDlm5pemxlbWUiLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlJlc21pIHllbmkgcGVuY2VyZWRlIMO2bml6bGVtZSIsCisgICAgICAgICJSaWdodCI6ICJTYcSfYSIsCisgICAgICAgICJTcGFjaW5nIjogIkFyYWzEsWsiLAorICAgICAgICAiVGV4dHRvcCI6ICJNZXRpbi3DvHN0dGUiLAorICAgICAgICAiVG9wIjogIll1a2FyxLEiLAorICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICJEaWtleSBkb2xkdXJtYSBtaWt0YXLEsSIsCisgICAgICAgICJWZXJ0aWNhbDoiOiAiRGlrZXk6IiwKKyAgICAgICAgIldpZHRoOiI6ICJHZW5pxZ9saWs6IgorICAgIH0sCisgICAgIkluc2VydFNtaWxleSI6IHsKKyAgICAgICAgIkluc2VydCBTbWlsZXkiOiAiR8O8bGVuIHnDvHogZWtsZSIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0IjogeworICAgICAgICAiQ2FuY2VsIjogIsSwcHRhbCIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLEsHB0YWwiCisgICAgfSwKKyAgICAiSW5zZXJ0VGFibGUiOiB7CisgICAgICAgICJBYnNib3R0b20iOiAiU2FsdCBhbHRhIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJTYWx0IG9ydGEiLAorICAgICAgICAiQWxpZ25tZW50OiI6ICJIaXphbGFtYToiLAorICAgICAgICAiQmFzZWxpbmUiOiAiVGFiYW4gaGl6YXPEsSIsCisgICAgICAgICJCb3JkZXIiOiAiS2VuYXJsxLFrIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIktlbmFybMSxayBrYWzEsW5sxLHEn8SxOiIsCisgICAgICAgICJCb3R0b20iOiAiQWx0YSIsCisgICAgICAgICJDYW5jZWwiOiAixLBwdGFsIiwKKyAgICAgICAgIkNhcHRpb24iOiAiQmHFn2zEsWsiLAorICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICJIw7xjcmUgZG9sZHVybWE6IiwKKyAgICAgICAgIkNlbGwgc3BhY2luZzoiOiAiSMO8Y3JlIGFyYWzEscSfxLE6IiwKKyAgICAgICAgIkNvbHM6IjogIlPDvHR1bjoiLAorICAgICAgICAiRW0iOiAiRW0iLAorICAgICAgICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICJTYWJpdCBiYcWfbMSxIHPDvHR1biIsCisgICAgICAgICJJbnNlcnQgVGFibGUiOiAiVGFibG8gZWtsZSIsCisgICAgICAgICJMYXlvdXQiOiAiRMO8emVuIiwKKyAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiS2VuYXJsxLFrIGlzdGVtaXlvcnNhbsSxeiBib8WfIGLEsXJha8SxbiIsCisgICAgICAgICJMZWZ0IjogIlNvbGEiLAorICAgICAgICAiTWlkZGxlIjogIk9ydGFsYSIsCisgICAgICAgICJOb3Qgc2V0IjogIkF5YXJsYW5tYW3EscWfIiwKKyAgICAgICAgIk51bWJlciBvZiBjb2x1bW5zIjogIlPDvHR1biBzYXnEsXPEsSIsCisgICAgICAgICJOdW1iZXIgb2Ygcm93cyI6ICJTYXTEsXIgc2F5xLFzxLEiLAorICAgICAgICAiT0siOiAiVGFtYW0iLAorICAgICAgICAiUGVyY2VudCI6ICJZw7x6ZGUiLAorICAgICAgICAiUGl4ZWxzIjogIlBpa3NlbCIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIlRhYmxvIGtvbnVtbGFuZMSxcm1hIiwKKyAgICAgICAgIlJpZ2h0IjogIlNhxJ9hIiwKKyAgICAgICAgIlJvd3M6IjogIlNhdMSxcjoiLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICJCaXRpxZ9payBow7xjcmUgYXJhbMSxxJ/EsSIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIsSww6cga2VuYXJsxLHEn8SxIHZlIGjDvGNyZSBpw6dlcmnEn2kgYXJhc8SxbmRha2kgYm/Fn2x1ayIsCisgICAgICAgICJTcGFjaW5nIjogIkFyYWzEsWsiLAorICAgICAgICAiVGV4dHRvcCI6ICJNZXRpbi3DvHN0dGUiLAorICAgICAgICAiVG9wIjogIll1a2FyxLEiLAorICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIlRhYmxvIGdlbmnFn2xpxJ9pIiwKKyAgICAgICAgIldpZHRoIHVuaXQiOiAiR2VuacWfbGlrIGJpcmltaSIsCisgICAgICAgICJXaWR0aDoiOiAiR2VuacWfbGlrOiIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiBjb2x1bW5zIjogIkzDvHRmZW4gc8O8dHVuIHNhecSxc8SxbsSxIGdpcmluIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAiTMO8dGZlbiBzYXTEsXIgc2F5xLFzxLFuxLEgZ2lyaW4iCisgICAgfSwKKyAgICAiTGlua2VyIjogeworICAgICAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiQmHEn2xhbnTEsSBla2xlL2RlxJ9pxZ90aXIiLAorICAgICAgICAiT0siOiAiVGFtYW0iLAorICAgICAgICAiVGFyZ2V0OiI6ICJIZWRlZjoiLAorICAgICAgICAiVVJMOiI6ICJVUkw6IgorICAgIH0sCisgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAixLBwdGFsIiwKKyAgICAgICAgIkltYWdlIFByZXZpZXciOiAiUmVzaW0gw7ZuaXpsZW1lOiIsCisgICAgICAgICJPSyI6ICJUYW1hbSIsCisgICAgICAgICJQcmV2aWV3IjogIsOWbml6bGVtZSIsCisgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiUmVzbWkgeWVuaSBwZW5jZXJlZGUgw7ZuaXpsZW1lIgorICAgIH0sCisgICAgIk9wZXJhIjogeworICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICJHw7x2ZW5saWsgc2ViZXBsZXJpbmRlbiBkb2xhecSxIGJhesSxIHRhcmF5xLFjxLFsYXIga2VzL2tvcHlhbGEveWFwxLHFn3TEsXIga29tdXRsYXLEsW5hIGVyacWfZW1lei4gS2VzbWUva29weWFsYW1hL3lhcMSxxZ90xLFybWEga29tdXR1bnUga3VsbGFubWFrIGnDp2luIGzDvHRmZW4gIGtsYXZ5ZW5pemluIGvEsXNheW9sbGFyxLFuxLEga3VsbGFuxLFuIChDVFJMICsgQy9WL1gpLiIKKyAgICB9LAorICAgICJQU0xvY2FsIjogeworICAgICAgICAiQ2FuY2VsIjogIsSwcHRhbCIKKyAgICB9LAorICAgICJQYXN0ZVRleHQiOiB7CisgICAgICAgICJDYW5jZWwiOiAixLBwdGFsIiwKKyAgICAgICAgIk9LIjogIlRhbWFtIgorICAgIH0sCisgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgICAgICJEZWxldGUiOiAiU2lsIiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICJSZXNpbSBla2xlIgorICAgIH0sCisgICAgIlF1aWNrVGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIsSwcHRhbCIKKyAgICB9LAorICAgICJTZXRJZCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLEsHB0YWwiLAorICAgICAgICAiRGVsZXRlIjogIlNpbCIsCisgICAgICAgICJPSyI6ICJUYW1hbSIKKyAgICB9LAorICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICJPSyI6ICJUYW1hbSIKKyAgICB9LAorICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAixLBwdGFsIiwKKyAgICAgICAgIk9LIjogIlRhbWFtIgorICAgIH0sCisgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICJDYW5jZWwiOiAixLBwdGFsIiwKKyAgICAgICAgIk9LIjogIlRhbWFtIgorICAgIH0sCisgICAgIlRhYmxlT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgIkFsbCBmb3VyIHNpZGVzIjogIkTDtnJ0IGtlbmFyxLEgZGEiLAorICAgICAgICAiQm9yZGVycyI6ICJLZW5hcmzEsWtsYXIiLAorICAgICAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgICAgICJDYXB0aW9uIjogIkJhxZ9sxLFrIiwKKyAgICAgICAgIkNlbGwgUHJvcGVydGllcyI6ICJIw7xjcmUgw7Z6ZWxsaWtsZXJpIiwKKyAgICAgICAgIkNlbGwgcHJvcGVydGllcyI6ICJTYXTEsXIgw7Z6ZWxsaWtsZXJpIiwKKyAgICAgICAgIkRlbGV0ZSBjZWxsIjogIkjDvGNyZXlpIHNpbCIsCisgICAgICAgICJEZWxldGUgY29sdW1uIjogIlPDvHR1bnUgc2lsIiwKKyAgICAgICAgIkRlbGV0ZSByb3ciOiAiU8SxcmF5xLEgc2lsIiwKKyAgICAgICAgIkRlc2NyaXB0aW9uIjogIlRhbsSxbSIsCisgICAgICAgICJGcmFtZXMiOiAiw4dlcsOnZXZlbGVyIiwKKyAgICAgICAgIkluc2VydCBjZWxsIGFmdGVyIjogIlNhxJ/EsW5hIHNhdMSxciBla2xlIiwKKyAgICAgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICJTb2x1bmEgc2F0xLFyIGVrbGUiLAorICAgICAgICAiSW5zZXJ0IGNvbHVtbiBhZnRlciI6ICJTYcSfxLFuYSBzw7x0dW4gZWtsZSIsCisgICAgICAgICJJbnNlcnQgY29sdW1uIGJlZm9yZSI6ICJTb2x1bmEgc8O8dHVuIGVrbGUiLAorICAgICAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICJTb2x1bmEgc8SxcmEgZWtsZSIsCisgICAgICAgICJJbnNlcnQgcm93IGJlZm9yZSI6ICJTYcSfxLFuYSBzxLFyYSBla2xlIiwKKyAgICAgICAgIk1lcmdlIGNlbGxzIjogIlNhdMSxcmxhcsSxIGJpcmxlxZ90aXIiLAorICAgICAgICAiTm8gcnVsZXMiOiAiw4dpemdpIG9sbWFzxLFuIiwKKyAgICAgICAgIk5vIHNpZGVzIjogIktlbmFyIG9sbWFzxLFuIiwKKyAgICAgICAgIk9LIjogIlRhbWFtIiwKKyAgICAgICAgIlBhZGRpbmciOiAixLDDpyBib8WfbHVrIiwKKyAgICAgICAgIlBsZWFzZSBjbGljayBpbnRvIHNvbWUgY2VsbCI6ICJMw7x0ZmVuIGJpciBow7xjcmUgc2XDp2luIiwKKyAgICAgICAgIlJvdyBQcm9wZXJ0aWVzIjogIlNhdMSxciDDtnplbGxpa2xlcmkiLAorICAgICAgICAiUm93IHByb3BlcnRpZXMiOiAiU8SxcmEgw7Z6ZWxsaWtsZXJpIiwKKyAgICAgICAgIlJvd3MiOiAiU2F0xLFyOiIsCisgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGFsbCByb3dzIGFuZCBjb2x1bW5zIjogIlTDvG0gc2F0xLFyIHZlIHPDvHR1bmxhcsSxbiBhcmFzxLFuZGEiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBjb2x1bW5zIG9ubHkiOiAiWWFsbsSxemNhIHPDvHR1bmxhcsSxbiBhcmFzxLFuZGEiLAorICAgICAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiByb3dzIG9ubHkiOiAiWWFsbsSxemNhIHNhdMSxcmxhcsSxbiBhcmFzxLFuZGEiLAorICAgICAgICAiU3BhY2luZyI6ICJBcmFsxLFrIiwKKyAgICAgICAgIlNwYWNpbmcgYW5kIHBhZGRpbmciOiAiQXJhbMSxa2xhciIsCisgICAgICAgICJTcGxpdCBjb2x1bW4iOiAiU8O8dHVudSBiw7ZsIiwKKyAgICAgICAgIlNwbGl0IHJvdyI6ICJTw7x0dW51IGLDtmwiLAorICAgICAgICAiU3VtbWFyeSI6ICLDlnpldCIsCisgICAgICAgICJUYWJsZSBQcm9wZXJ0aWVzIjogIlRhYmxvIMO2emVsbGlrbGVyaSIsCisgICAgICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogIlRhYmxvIMO2emVsbGlrbGVyaSIsCisgICAgICAgICJUaGUgYm90dG9tIHNpZGUgb25seSI6ICJZYWxuxLF6IGFsdCB0YXJhZiIsCisgICAgICAgICJUaGUgbGVmdC1oYW5kIHNpZGUgb25seSI6ICJZYWxuxLF6IHNvbCB0YXJhZiIsCisgICAgICAgICJUaGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb25seSI6ICJZYWxuxLF6IHNhxJ8gdmUgc29sIHRhcmFmIiwKKyAgICAgICAgIlRoZSByaWdodC1oYW5kIHNpZGUgb25seSI6ICJZYWxuxLF6IHNhxJ8gdGFyYWYiLAorICAgICAgICAiVGhlIHRvcCBhbmQgYm90dG9tIHNpZGVzIG9ubHkiOiAiWWFsbsSxeiDDvHN0IHZlIGFsdCB0YXJhZiIsCisgICAgICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICJZYWxuxLF6IMO8c3QgdGFyYWYiLAorICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY2VsbCBpbiByb3cuIjogIlNhdMSxcmRha2kgc29uIGjDvGNyZSBzaWxpbmVtZXoiLAorICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICJUYWJsb2Rha2kgc29uIHPDvHR1biBzaWxpbmVtZXoiLAorICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3Qgcm93IGluIHRhYmxlLiI6ICJUYWJsb2Rha2kgc29uIHNhdMSxciBzaWxpbmVtZXoiLAorICAgICAgICAicGl4ZWxzIjogIlBpa3NlbCIKKyAgICB9LAorICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICLEsHB0YWwiCisgICAgfSwKKyAgICAiVW5Gb3JtYXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAixLBwdGFsIiwKKyAgICAgICAgIk9LIjogIlRhbWFtIgorICAgIH0sCisgICAgIlhpbmhhIjogeworICAgICAgICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICImIzgyMTI7IELDp2ltICYjODIxMjsiLAorICAgICAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiQnUgZMO8emVubGV5aWNpIGhha2vEsW5kYSIsCisgICAgICAgICJBZGRyZXNzIjogIkFkcmVzIiwKKyAgICAgICAgIkJhY2tncm91bmQgQ29sb3IiOiAiQXJrYSBwbGFuIHJlbmdpIiwKKyAgICAgICAgIkJvbGQiOiAiS2FsxLFuIiwKKyAgICAgICAgIkJ1bGxldGVkIExpc3QiOiAiTWFkZGUgacWfYXJldGxpIGxpc3RlIiwKKyAgICAgICAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICJXb3JkJ2RhbiB5YXDEscWfdMSxcsSxbGFuIGnDp2VyacSfaSB0ZW1pemxlIiwKKyAgICAgICAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogIllhesSxIHRpcGkgYmnDp2ltbGVuZGlybWVzaW5pIHNpbCIsCisgICAgICAgICJDbGVhciBNU09mZmljZSB0YWdzIjogIk1TT2ZmaWNlIGV0aWtldGxlcmluaSBzaWwiLAorICAgICAgICAiQ2xvc2UiOiAiS2FwYXQiLAorICAgICAgICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICJOZXNuZSBvbHXFn3R1cnVsdXlvciIsCisgICAgICAgICJDb3B5IHNlbGVjdGlvbiI6ICJTZcOnaW1pIGtvcHlhbGEiLAorICAgICAgICAiQ3JlYXRlIFN0YXR1c2JhciI6ICJEdXJ1bSDDp3VidcSfdSBvbHXFn3R1cnVsdXlvciIsCisgICAgICAgICJDcmVhdGUgVG9vbGJhciI6ICJBcmHDpyDDp3VidcSfdSBvbHXFn3R1cnVsdXlvciIsCisgICAgICAgICJDdXJyZW50IHN0eWxlIjogIkdlw6dlcmxpIHN0aWwiLAorICAgICAgICAiQ3V0IHNlbGVjdGlvbiI6ICJTZcOnaW1pIGtlcyIsCisgICAgICAgICJEZWNyZWFzZSBJbmRlbnQiOiAiR2lyaW50aXlpIGF6YWx0IiwKKyAgICAgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIkJlbGdlIHnDtm5sZW5kaXJtZXNpIHNvbGRhbiBzYcSfYSIsCisgICAgICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJCZWxkZSB5w7ZubGVuZGlybWVzaSBzYcSfZGFuIHNvbGEiLAorICAgICAgICAiRmluaXNoaW5nIjogIkJhxZ9sYXTEsWzEsXlvciIsCisgICAgICAgICJGb250IENvbG9yIjogIllhesSxIHRpcGkgcmVuZ2kiLAorICAgICAgICAiRm9ybWF0dGVkIjogIkJpw6dpbWxpIiwKKyAgICAgICAgIkdlbmVyYXRlIFhpbmhhIGZyYW1ld29yayI6ICJYaW5oYSDDp2Vyw6dldmVzaSBvbHXFn3R1cnVsdXlvciIsCisgICAgICAgICJIZWFkaW5nIDEiOiAiQmHFn2zEsWsgMSIsCisgICAgICAgICJIZWFkaW5nIDIiOiAiQmHFn2zEsWsgMiIsCisgICAgICAgICJIZWFkaW5nIDMiOiAiQmHFn2zEsWsgMyIsCisgICAgICAgICJIZWFkaW5nIDQiOiAiQmHFn2zEsWsgNCIsCisgICAgICAgICJIZWFkaW5nIDUiOiAiQmHFn2zEsWsgNSIsCisgICAgICAgICJIZWFkaW5nIDYiOiAiQmHFn2zEsWsgNiIsCisgICAgICAgICJIZWFkaW5ncyI6ICJCYcWfbMSxayB0w7xybGVyaSIsCisgICAgICAgICJIZWxwIHVzaW5nIGVkaXRvciI6ICJZYXJkxLFtIiwKKyAgICAgICAgIkhvcml6b250YWwgUnVsZSI6ICJZYXRheSBjZXR2ZWwiLAorICAgICAgICAiSW5jcmVhc2UgSW5kZW50IjogIkdpcmludGl5aSBhcnR0xLFyIiwKKyAgICAgICAgIkluaXQgZWRpdG9yIHNpemUiOiAiRWRpdMO2ciBiw7x5w7xrbMO8xJ/DvCB0YW7EsW1sYW7EsXlvciIsCisgICAgICAgICJJbnNlcnQgVGFibGUiOiAiVGFibG8gZWtsZSIsCisgICAgICAgICJJbnNlcnQgV2ViIExpbmsiOiAiV2ViIGJhxJ9sYW50xLFzxLEgZ2lyIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiUmVzaW0gZWtsZS9kZcSfacWfdGlyIiwKKyAgICAgICAgIkluc2VydC9PdmVyd3JpdGUiOiAiRWtsZS/DnHplcmluZSB5YXoiLAorICAgICAgICAiSXRhbGljIjogIsSwdGFsaWsiLAorICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAiT3J0YXlhIGhpemFsYSIsCisgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAiVGFtIGhpemFsYSIsCisgICAgICAgICJKdXN0aWZ5IExlZnQiOiAiU29sYSBoaXphbGEiLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICJTYcSfYSBoaXphbGEiLAorICAgICAgICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogIktsYXZ5ZSBrxLFzYXlvbGxhcsSxIiwKKyAgICAgICAgIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ISI6ICJFZGl0w7ZyIHnDvGtsZW5peW9yLiBMw7x0ZmVuIGJla2xleWluISIsCisgICAgICAgICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIjogIiRwbHVnaW4gecO8a2xlbml5b3IiLAorICAgICAgICAiTm9ybWFsIjogIk5vcm1hbCAoUGFyYWdyYWYpIiwKKyAgICAgICAgIk9yZGVyZWQgTGlzdCI6ICJTxLFyYWzEsSBsaXN0ZSIsCisgICAgICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJQYW5vZGFuIHlhcMSxxZ90xLFyIiwKKyAgICAgICAgIlBhdGgiOiAiWW9sIiwKKyAgICAgICAgIlByaW50IGRvY3VtZW50IjogIkJlbGdleWkgeWF6ZMSxciIsCisgICAgICAgICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJZaW5lbGUiLAorICAgICAgICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAiJHBsdWdpbiBrYXnEsXQgZWRpbGl5b3IiLAorICAgICAgICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAiQmnDp2ltbGVuZGlybWV5aSBrYWxkxLFyIiwKKyAgICAgICAgIlNhdmUgYXMiOiAiRmFya2zEsSBrYXlkZXQiLAorICAgICAgICAiU2VsZWN0IGFsbCI6ICJUw7xtw7xuw7wgc2XDpyIsCisgICAgICAgICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICJQYXJhZ3JhZsSxbiBiacOnaW1pbmkgYXlhcmxhIiwKKyAgICAgICAgIlNwbGl0IEJsb2NrIjogIkJsb8SfdSBiw7ZsIiwKKyAgICAgICAgIlN0cmlrZXRocm91Z2giOiAiw5xzdMO8IMOnaXppbGkiLAorICAgICAgICAiU3Vic2NyaXB0IjogIkFsdHNpbWdlIiwKKyAgICAgICAgIlN1cGVyc2NyaXB0IjogIsOcc3RzaW1nZSIsCisgICAgICAgICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAiRWRpdMO2csO8biBkZXN0ZWtsZWRpxJ9pIGtvbWJpbmFzeW9ubGFyOiIsCisgICAgICAgICJUb2dnbGUgQm9yZGVycyI6ICJUYWJsbyBrZW5hcmzEsWtsYXLEsW7EsSBnw7ZzdGVyL2fDtnN0ZXJtZSIsCisgICAgICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiSFRNTCBrYXluYWsga29kdW51IGHDpy9rYXBhdCIsCisgICAgICAgICJVbmRlcmxpbmUiOiAiQWx0xLEgw6dpemlsaSIsCisgICAgICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJHZXJpIGFsIiwKKyAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiWWF6xLEgdGlwaSByZW5rbGVyaW5pIHPEsWbEsXJsYW1hayBtxLEgaXN0aXlvcnN1bnV6PyIsCisgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICJZYXrEsSB0aXBpIGJveXV0bGFyxLFuxLEgc8SxZsSxcmxhbWFrIG3EsSBpc3RpeW9yc3VudXo/IiwKKyAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICJZYXrEsSB0aXBpIGJpw6dpbWxlbmRpcm1lc2luaSBzaWxtZWsgbcSxIGlzdGl5b3JzdW51ej8iLAorICAgICAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIk1ldGluIG1vZHVuZGFzxLFuxLF6LiBHw7Zyc2VsIG1vZGEgKFdZU0lXSUcpIGTDtm5tZWsgacOnaW4gWzw+XSBkw7zEn21lc2luZSB0xLFrbGF5xLFuLiIsCisgICAgICAgICJpbnNlcnQgbGluZWJyZWFrIjogIlNhdMSxciBzb251IGVrbGUiLAorICAgICAgICAibmV3IHBhcmFncmFwaCI6ICJZZW5pIHBhcmFncmFmIgorICAgIH0sCisgICAgIl9fTkVXX1RSQU5TTEFUSU9OU19fIjogeworICAgICAgICAiQ2hhckNvdW50ZXIiOiB7CisgICAgICAgICAgICAiLi4uIGluIHByb2dyZXNzIjogIiIsCisgICAgICAgICAgICAiQ2hhcnMiOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIiIsCisgICAgICAgICAgICAiV29yZHMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ29udGV4dE1lbnUiOiB7CisgICAgICAgICAgICAiX0RlbGV0ZSBSb3ciOiAiIiwKKyAgICAgICAgICAgICJfSW1hZ2UgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIl9Nb2RpZnkgTGluay4uLiI6ICIiLAorICAgICAgICAgICAgIl9SZW1vdmUgTGluay4uLiI6ICIiLAorICAgICAgICAgICAgIl9UYWJsZSBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiQ19lbGwgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIkNoZWNfayBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiQ29weSI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBhIGxpbmsiOiAiIiwKKyAgICAgICAgICAgICJDdXJyZW50IFVSTCBpcyI6ICIiLAorICAgICAgICAgICAgIkN1dCI6ICIiLAorICAgICAgICAgICAgIkRlX2xldGUgQ29sdW1uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIENlbGwiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgY29sdW1uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IHJvdyI6ICIiLAorICAgICAgICAgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIiIsCisgICAgICAgICAgICAiSV9uc2VydCBSb3cgQmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5fc2VydCBSb3cgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgX0NvbHVtbiBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ19vbHVtbiBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDZWxsIEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiTGluayBwb2ludHMgdG86IjogIiIsCisgICAgICAgICAgICAiTWFrZSBsaW5fay4uLiI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIiIsCisgICAgICAgICAgICAiT3BlbnMgdGhpcyBsaW5rIGluIGEgbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlBhc3RlIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBlbGVtZW50OiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gdW5saW5rIHRoaXMgZWxlbWVudC4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgdGhlICRlbGVtIEVsZW1lbnQuLi4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgdGhpcyBub2RlIGZyb20gdGhlIGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUm9fdyBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgaW1hZ2UgcHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBDZWxsIFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgVGFibGUgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBSb3cgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJVbmxpbmsgdGhlIGN1cnJlbnQgZWxlbWVudCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICIiLAorICAgICAgICAgICAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEZWZpbml0aW9uTGlzdCI6IHsKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGRlc2NyaXB0aW9uIjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiBsaXN0IjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiB0ZXJtIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRpYWxvZ3MiOiB7CisgICAgICAgICAgICAiU29tZSBUZXh0IEhlcmUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRHluYW1pY0NTUyI6IHsKKyAgICAgICAgICAgICJDaG9vc2Ugc3R5bGVzaGVldCI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQiOiAiIiwKKyAgICAgICAgICAgICJVbmRlZmluZWQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgICAgICJFZGl0IFRhZyBCeSBQZWciOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXF1YXRpb24iOiB7CisgICAgICAgICAgICAiIT0iOiAiIiwKKyAgICAgICAgICAgICIhaW4iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7LSI6ICIiLAorICAgICAgICAgICAgIiZndDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSZndDsiOiAiIiwKKyAgICAgICAgICAgICImbHQ7eCZndDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYCFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgLmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAwYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDJgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgM2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA0YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA3YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDhgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGBlYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsmbmJzcDtgMWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YCt7Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2AtOlxcIGAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLXs6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YENgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGNvc2AiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgbG5gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHBpYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgc2luYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0YW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRpbWVzYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZxdW90O3RleHQmcXVvdDsiOiAiIiwKKyAgICAgICAgICAgICInK2Zvcm11bGErJyI6ICIiLAorICAgICAgICAgICAgIigobiksKGspKSI6ICIiLAorICAgICAgICAgICAgIih4KzEpLyh4LTEpIjogIiIsCisgICAgICAgICAgICAiKiI6ICIiLAorICAgICAgICAgICAgIioqIjogIiIsCisgICAgICAgICAgICAiKy0iOiAiIiwKKyAgICAgICAgICAgICItJmd0OyI6ICIiLAorICAgICAgICAgICAgIi0mbHQ7IjogIiIsCisgICAgICAgICAgICAiLToiOiAiIiwKKyAgICAgICAgICAgICItPSI6ICIiLAorICAgICAgICAgICAgIi8vIjogIiIsCisgICAgICAgICAgICAiL18iOiAiIiwKKyAgICAgICAgICAgICI6LiI6ICIiLAorICAgICAgICAgICAgIj0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiQCI6ICIiLAorICAgICAgICAgICAgIltbYSxiXSxbYyxkXV0iOiAiIiwKKyAgICAgICAgICAgICJcXFxcIjogIiIsCisgICAgICAgICAgICAiXFxuQ2xpY2sgaW4gdGhlIGJveCB0byB1c2UgeW91ciBrZXlib2FyZCBvciB1c2UgdGhlIGJ1dHRvbnNcXG4iOiAiIiwKKyAgICAgICAgICAgICJeXiI6ICIiLAorICAgICAgICAgICAgIl5eXiI6ICIiLAorICAgICAgICAgICAgIl9ffCI6ICIiLAorICAgICAgICAgICAgIl98XyI6ICIiLAorICAgICAgICAgICAgImAhPWAiOiAiIiwKKyAgICAgICAgICAgICJgIWluYCI6ICIiLAorICAgICAgICAgICAgImAmYW5kO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmNhcDtgIjogIiIsCisgICAgICAgICAgICAiYCZjdXA7YCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7LWAiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz1gIjogIiIsCisgICAgICAgICAgICAiYCZsdDt4Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgJm9yO2AiOiAiIiwKKyAgICAgICAgICAgICJgJnF1b3Q7dGV4dCZxdW90O2AiOiAiIiwKKyAgICAgICAgICAgICJgKChuKSwoaykpYCI6ICIiLAorICAgICAgICAgICAgImAoeCsxKS8oeC0xKWAiOiAiIiwKKyAgICAgICAgICAgICJgKipgIjogIiIsCisgICAgICAgICAgICAiYCpgIjogIiIsCisgICAgICAgICAgICAiYCstYCI6ICIiLAorICAgICAgICAgICAgImAtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLSZsdDtgIjogIiIsCisgICAgICAgICAgICAiYC06YCI6ICIiLAorICAgICAgICAgICAgImAtPWAiOiAiIiwKKyAgICAgICAgICAgICJgLy9gIjogIiIsCisgICAgICAgICAgICAiYC9fYCI6ICIiLAorICAgICAgICAgICAgImA6LmAiOiAiIiwKKyAgICAgICAgICAgICJgPSZndDtgIjogIiIsCisgICAgICAgICAgICAiYEBgIjogIiIsCisgICAgICAgICAgICAiYFtbYSxiXSxbYyxkXV1gIjogIiIsCisgICAgICAgICAgICAiYFxcXFxgIjogIiIsCisgICAgICAgICAgICAiYF9ffGAiOiAiIiwKKyAgICAgICAgICAgICJgX3xfYCI6ICIiLAorICAgICAgICAgICAgImBBQWAiOiAiIiwKKyAgICAgICAgICAgICJgYWxlcGhgIjogIiIsCisgICAgICAgICAgICAiYGFscGhhYCI6ICIiLAorICAgICAgICAgICAgImBhbmRgIjogIiIsCisgICAgICAgICAgICAiYGJhcmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJiYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgQ0NgIjogIiIsCisgICAgICAgICAgICAiYGNjYWAiOiAiIiwKKyAgICAgICAgICAgICJgY2hpYCI6ICIiLAorICAgICAgICAgICAgImBkYXJyYCI6ICIiLAorICAgICAgICAgICAgImBkZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsYCI6ICIiLAorICAgICAgICAgICAgImBEZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRpYW1vbmRgIjogIiIsCisgICAgICAgICAgICAiYGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGR5L2R4YCI6ICIiLAorICAgICAgICAgICAgImBFRWAiOiAiIiwKKyAgICAgICAgICAgICJgZXBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgZXRhYCI6ICIiLAorICAgICAgICAgICAgImBmcmFgIjogIiIsCisgICAgICAgICAgICAiYEdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBnYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ3JhZGAiOiAiIiwKKyAgICAgICAgICAgICJgaGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgaGF0YWAiOiAiIiwKKyAgICAgICAgICAgICJgaWZgIjogIiIsCisgICAgICAgICAgICAiYGluYCI6ICIiLAorICAgICAgICAgICAgImBpbnRgIjogIiIsCisgICAgICAgICAgICAiYGlvdGFgIjogIiIsCisgICAgICAgICAgICAiYGthcHBhYCI6ICIiLAorICAgICAgICAgICAgImBsYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYExhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbEFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgbGltXyh4LSZndDtvbylgIjogIiIsCisgICAgICAgICAgICAiYGxvZ2AiOiAiIiwKKyAgICAgICAgICAgICJgbXVgIjogIiIsCisgICAgICAgICAgICAiYE5OYCI6ICIiLAorICAgICAgICAgICAgImBubmAiOiAiIiwKKyAgICAgICAgICAgICJgbm90YCI6ICIiLAorICAgICAgICAgICAgImBudWAiOiAiIiwKKyAgICAgICAgICAgICJgbytgIjogIiIsCisgICAgICAgICAgICAiYG8uYCI6ICIiLAorICAgICAgICAgICAgImBPL2AiOiAiIiwKKyAgICAgICAgICAgICJgb2ludGAiOiAiIiwKKyAgICAgICAgICAgICJgb21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYE9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBvb2AiOiAiIiwKKyAgICAgICAgICAgICJgb3JgIjogIiIsCisgICAgICAgICAgICAiYG94YCI6ICIiLAorICAgICAgICAgICAgImBQaGlgIjogIiIsCisgICAgICAgICAgICAiYHBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGlgIjogIiIsCisgICAgICAgICAgICAiYHBpYCI6ICIiLAorICAgICAgICAgICAgImBwcm9kYCI6ICIiLAorICAgICAgICAgICAgImBwcm9wYCI6ICIiLAorICAgICAgICAgICAgImBQc2lgIjogIiIsCisgICAgICAgICAgICAiYHBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgUVFgIjogIiIsCisgICAgICAgICAgICAiYHF1YWRgIjogIiIsCisgICAgICAgICAgICAiYHJBcnJgIjogIiIsCisgICAgICAgICAgICAiYHJob2AiOiAiIiwKKyAgICAgICAgICAgICJgcm9vdChuKSh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgUlJgIjogIiIsCisgICAgICAgICAgICAiYHNmYWAiOiAiIiwKKyAgICAgICAgICAgICJgc2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYFNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzcXJ0KHgpYCI6ICIiLAorICAgICAgICAgICAgImBzcXVhcmVgIjogIiIsCisgICAgICAgICAgICAiYHN0YWNrcmVsKC0mZ3Q7KSgrKWAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViYCI6ICIiLAorICAgICAgICAgICAgImBzdWJlYCI6ICIiLAorICAgICAgICAgICAgImBzdW1gIjogIiIsCisgICAgICAgICAgICAiYHN1cGAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwZWAiOiAiIiwKKyAgICAgICAgICAgICJgdGF1YCI6ICIiLAorICAgICAgICAgICAgImBUaGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdGhldGFgIjogIiIsCisgICAgICAgICAgICAiYFRUYCI6ICIiLAorICAgICAgICAgICAgImB0dGFgIjogIiIsCisgICAgICAgICAgICAiYHVhcnJgIjogIiIsCisgICAgICAgICAgICAiYHVsYWAiOiAiIiwKKyAgICAgICAgICAgICJgdXBzaWxvbmAiOiAiIiwKKyAgICAgICAgICAgICJgdXVgIjogIiIsCisgICAgICAgICAgICAiYHZlY2FgIjogIiIsCisgICAgICAgICAgICAiYHZ2YCI6ICIiLAorICAgICAgICAgICAgImB4XyhtbilgIjogIiIsCisgICAgICAgICAgICAiYFhpYCI6ICIiLAorICAgICAgICAgICAgImB4aWAiOiAiIiwKKyAgICAgICAgICAgICJgeHhgIjogIiIsCisgICAgICAgICAgICAiYHpldGFgIjogIiIsCisgICAgICAgICAgICAiYFpaYCI6ICIiLAorICAgICAgICAgICAgImB8LSZndDtgIjogIiIsCisgICAgICAgICAgICAiYHwtLWAiOiAiIiwKKyAgICAgICAgICAgICJgfD09YCI6ICIiLAorICAgICAgICAgICAgImB8X19gIjogIiIsCisgICAgICAgICAgICAiYHx+YCI6ICIiLAorICAgICAgICAgICAgImB+PWAiOiAiIiwKKyAgICAgICAgICAgICJgfnxgIjogIiIsCisgICAgICAgICAgICAiYH5+YCI6ICIiLAorICAgICAgICAgICAgIkFBIjogIiIsCisgICAgICAgICAgICAiYWxlcGgiOiAiIiwKKyAgICAgICAgICAgICJhbHBoYSI6ICIiLAorICAgICAgICAgICAgImFuZCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aCBGb3JtdWxhIElucHV0IjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoTUwgRXhhbXBsZSI6ICIiLAorICAgICAgICAgICAgImJhcmEiOiAiIiwKKyAgICAgICAgICAgICJCYXNlZCBvbiBBU0NJSU1hdGhNTCBieSI6ICIiLAorICAgICAgICAgICAgImJiYSI6ICIiLAorICAgICAgICAgICAgImJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiZXRhIjogIiIsCisgICAgICAgICAgICAiQ0MiOiAiIiwKKyAgICAgICAgICAgICJjY2EiOiAiIiwKKyAgICAgICAgICAgICJjaGkiOiAiIiwKKyAgICAgICAgICAgICJkYXJyIjogIiIsCisgICAgICAgICAgICAiZGRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkZWwiOiAiIiwKKyAgICAgICAgICAgICJEZWx0YSI6ICIiLAorICAgICAgICAgICAgImRlbHRhIjogIiIsCisgICAgICAgICAgICAiZGlhbW9uZCI6ICIiLAorICAgICAgICAgICAgImRvdGEiOiAiIiwKKyAgICAgICAgICAgICJkeS9keCI6ICIiLAorICAgICAgICAgICAgIkVFIjogIiIsCisgICAgICAgICAgICAiZXBzaSI6ICIiLAorICAgICAgICAgICAgImV0YSI6ICIiLAorICAgICAgICAgICAgIkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFzY2lpTWF0aE1MIHZpc2l0IHRoaXMgcGFnZToiOiAiIiwKKyAgICAgICAgICAgICJGb3JtdWxhIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgImZyYSI6ICIiLAorICAgICAgICAgICAgImdhbW1hIjogIiIsCisgICAgICAgICAgICAiR2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJncmFkIjogIiIsCisgICAgICAgICAgICAiaEFyciI6ICIiLAorICAgICAgICAgICAgImhhcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXRhIjogIiIsCisgICAgICAgICAgICAiaWYiOiAiIiwKKyAgICAgICAgICAgICJpbiI6ICIiLAorICAgICAgICAgICAgIklucHV0IjogIiIsCisgICAgICAgICAgICAiaW50IjogIiIsCisgICAgICAgICAgICAiaW50X2FeYmYoeClkeCI6ICIiLAorICAgICAgICAgICAgImlvdGEiOiAiIiwKKyAgICAgICAgICAgICJrYXBwYSI6ICIiLAorICAgICAgICAgICAgIkxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhbWJkYSI6ICIiLAorICAgICAgICAgICAgImxhcnIiOiAiIiwKKyAgICAgICAgICAgICJsQXJyIjogIiIsCisgICAgICAgICAgICAibGltXyh4LSZndDtvbykiOiAiIiwKKyAgICAgICAgICAgICJtdSI6ICIiLAorICAgICAgICAgICAgIk5OIjogIiIsCisgICAgICAgICAgICAibm4iOiAiIiwKKyAgICAgICAgICAgICJubm4iOiAiIiwKKyAgICAgICAgICAgICJub3QiOiAiIiwKKyAgICAgICAgICAgICJudSI6ICIiLAorICAgICAgICAgICAgIm8rIjogIiIsCisgICAgICAgICAgICAiby4iOiAiIiwKKyAgICAgICAgICAgICJPLyI6ICIiLAorICAgICAgICAgICAgIm9pbnQiOiAiIiwKKyAgICAgICAgICAgICJvbWVnYSI6ICIiLAorICAgICAgICAgICAgIk9tZWdhIjogIiIsCisgICAgICAgICAgICAib28iOiAiIiwKKyAgICAgICAgICAgICJvciI6ICIiLAorICAgICAgICAgICAgIm94IjogIiIsCisgICAgICAgICAgICAiUGhpIjogIiIsCisgICAgICAgICAgICAicGhpIjogIiIsCisgICAgICAgICAgICAicGkiOiAiIiwKKyAgICAgICAgICAgICJQaSI6ICIiLAorICAgICAgICAgICAgInByb2QiOiAiIiwKKyAgICAgICAgICAgICJwcm9wIjogIiIsCisgICAgICAgICAgICAicHNpIjogIiIsCisgICAgICAgICAgICAiUHNpIjogIiIsCisgICAgICAgICAgICAiUVEiOiAiIiwKKyAgICAgICAgICAgICJxdWFkIjogIiIsCisgICAgICAgICAgICAickFyciI6ICIiLAorICAgICAgICAgICAgInJobyI6ICIiLAorICAgICAgICAgICAgInJvb3QobikoeCkiOiAiIiwKKyAgICAgICAgICAgICJSUiI6ICIiLAorICAgICAgICAgICAgInNmYSI6ICIiLAorICAgICAgICAgICAgInNpZ21hIjogIiIsCisgICAgICAgICAgICAiU2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJzcXJ0KHgpIjogIiIsCisgICAgICAgICAgICAic3F1YXJlIjogIiIsCisgICAgICAgICAgICAic3RhY2tyZWwoLSZndDspKCspIjogIiIsCisgICAgICAgICAgICAic3ViIjogIiIsCisgICAgICAgICAgICAic3ViZSI6ICIiLAorICAgICAgICAgICAgInN1bSI6ICIiLAorICAgICAgICAgICAgInN1bV8obj0xKV5vbyI6ICIiLAorICAgICAgICAgICAgInN1cCI6ICIiLAorICAgICAgICAgICAgInN1cGUiOiAiIiwKKyAgICAgICAgICAgICJ0YXUiOiAiIiwKKyAgICAgICAgICAgICJUaGV0YSI6ICIiLAorICAgICAgICAgICAgInRoZXRhIjogIiIsCisgICAgICAgICAgICAiVFQiOiAiIiwKKyAgICAgICAgICAgICJ0dGEiOiAiIiwKKyAgICAgICAgICAgICJ1YXJyIjogIiIsCisgICAgICAgICAgICAidWxhIjogIiIsCisgICAgICAgICAgICAidXBzaWxvbiI6ICIiLAorICAgICAgICAgICAgInV1IjogIiIsCisgICAgICAgICAgICAidXV1IjogIiIsCisgICAgICAgICAgICAidmVjYSI6ICIiLAorICAgICAgICAgICAgInZ2IjogIiIsCisgICAgICAgICAgICAidnZ2IjogIiIsCisgICAgICAgICAgICAieF4obStuKSI6ICIiLAorICAgICAgICAgICAgInhfKG1uKSI6ICIiLAorICAgICAgICAgICAgIlhpIjogIiIsCisgICAgICAgICAgICAieGkiOiAiIiwKKyAgICAgICAgICAgICJ4eCI6ICIiLAorICAgICAgICAgICAgInpldGEiOiAiIiwKKyAgICAgICAgICAgICJaWiI6ICIiLAorICAgICAgICAgICAgInwtJmd0OyI6ICIiLAorICAgICAgICAgICAgInwtLSI6ICIiLAorICAgICAgICAgICAgInw9PSI6ICIiLAorICAgICAgICAgICAgInxfXyI6ICIiLAorICAgICAgICAgICAgInx+IjogIiIsCisgICAgICAgICAgICAifj0iOiAiIiwKKyAgICAgICAgICAgICJ+fCI6ICIiLAorICAgICAgICAgICAgIn5+IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZhbmN5U2VsZWN0cyI6IHsKKyAgICAgICAgICAgICInK29wdC50ZXh0KyciOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmluZFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiJztcclxuICB2YXIgdGFnYyA9ICciOiAiIiwKKyAgICAgICAgICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAiIiwKKyAgICAgICAgICAgICJDbGVhciI6ICIiLAorICAgICAgICAgICAgIkRvbmUiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgdGV4dCB5b3Ugd2FudCB0byBmaW5kIjogIiIsCisgICAgICAgICAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgImZvdW5kIGl0ZW0iOiAiIiwKKyAgICAgICAgICAgICJmb3VuZCBpdGVtcyI6ICIiLAorICAgICAgICAgICAgIkhpZ2hsaWdodCI6ICIiLAorICAgICAgICAgICAgIkluZm9ybSBhIHJlcGxhY2VtZW50IHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJOZXh0IjogIiIsCisgICAgICAgICAgICAibm90IGZvdW5kIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2Ugd2l0aDoiOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtIjogIiIsCisgICAgICAgICAgICAicmVwbGFjZWQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJTZWFyY2ggZm9yOiI6ICIiLAorICAgICAgICAgICAgIlN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IjogIiIsCisgICAgICAgICAgICAiVW5kbyI6ICIiLAorICAgICAgICAgICAgIldob2xlIHdvcmRzIG9ubHkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybU9wZXJhdGlvbnMiOiB7CisgICAgICAgICAgICAiRW50ZXIgdGhlIG5hbWUgZm9yIG5ldyBvcHRpb24uIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgRm9ybS4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBtdWx0aS1saW5lIHRleHQgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcmFkaW8gYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFNlbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgU2VsZWN0Li4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1zIjogeworICAgICAgICAgICAgIidvbkNsaWNrJz0iOiAiIiwKKyAgICAgICAgICAgICJBY2Nlc3MgS2V5OiI6ICIiLAorICAgICAgICAgICAgIkFjdGlvbiBVUkw6IjogIiIsCisgICAgICAgICAgICAiQnV0dG9uIFNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkNoZWNrZWQiOiAiIiwKKyAgICAgICAgICAgICJDb2x1bW5zOiI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQgdGV4dCAob3B0aW9uYWwpIjogIiIsCisgICAgICAgICAgICAiRGltZW5zaW9ucyI6ICIiLAorICAgICAgICAgICAgIkRpc2FibGVkIjogIiIsCisgICAgICAgICAgICAiRW5jb2Rpbmc6IjogIiIsCisgICAgICAgICAgICAiRm9yIENvbnRyb2w6IjogIiIsCisgICAgICAgICAgICAiRm9ybSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IElOUFVUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBURVhUQVJFQSI6ICIiLAorICAgICAgICAgICAgIkZvcm0gaGFuZGxlciBzY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIE5hbWU6IjogIiIsCisgICAgICAgICAgICAiR2V0IjogIiIsCisgICAgICAgICAgICAiSGFyZCI6ICIiLAorICAgICAgICAgICAgIkhlaWdodCBpbiBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkhUTUwtRm9ybSB0byBDR0kgKGRlZmF1bHQpIjogIiIsCisgICAgICAgICAgICAiSW1hZ2Ugc291cmNlIjogIiIsCisgICAgICAgICAgICAiSW5pdGlhbCBUZXh0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiSmF2YXNjcmlwdCBmb3IgYnV0dG9uIGNsaWNrIjogIiIsCisgICAgICAgICAgICAiTGFiZWw6IjogIiIsCisgICAgICAgICAgICAiTGVnZW5kOiI6ICIiLAorICAgICAgICAgICAgIk1heCBsZW5ndGg6IjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY2NlcHRlZCI6ICIiLAorICAgICAgICAgICAgIk1ldGhvZDoiOiAiIiwKKyAgICAgICAgICAgICJtdWx0aXBhcnQgRm9ybSBEYXRhIChGaWxlLVVwbG9hZCkiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gc2VsZWN0IjogIiIsCisgICAgICAgICAgICAibmFtZSBvZiB0aGUgdGV4dGFyZWEiOiAiIiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICIiLAorICAgICAgICAgICAgIm5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIm5vd3JhcCI6ICIiLAorICAgICAgICAgICAgIk9mZiI6ICIiLAorICAgICAgICAgICAgIlBoeXNpY2FsIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIGEgTGFiZWwiOiAiIiwKKyAgICAgICAgICAgICJQb3N0IjogIiIsCisgICAgICAgICAgICAicHJlIjogIiIsCisgICAgICAgICAgICAiUmVhZCBPbmx5IjogIiIsCisgICAgICAgICAgICAiU2l6ZSBvZiB0ZXh0IGJveCBpbiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiU2l6ZToiOiAiIiwKKyAgICAgICAgICAgICJTb2Z0IjogIiIsCisgICAgICAgICAgICAiVGFiIEluZGV4OiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBGcmFtZToiOiAiIiwKKyAgICAgICAgICAgICJUZXh0OiI6ICIiLAorICAgICAgICAgICAgIlVSTCBvZiBpbWFnZSI6ICIiLAorICAgICAgICAgICAgIlZhbHVlIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiVmFsdWU6IjogIiIsCisgICAgICAgICAgICAiVmlydHVhbCI6ICIiLAorICAgICAgICAgICAgIldpZHRoIGluIG51bWJlciBvZiBjaGFyYWN0ZXJzIjogIiIsCisgICAgICAgICAgICAiV3JhcCBNb2RlOiI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgTmFtZSI6ICIiLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IgorICAgICAgICB9LAorICAgICAgICAiRnVsbFBhZ2UiOiB7CisgICAgICAgICAgICAiLi4uIjogIiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIkJhY2tncm91bmQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiQ2hhcmFjdGVyIHNldDoiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoSVNPLTg4NTktNSkiOiAiIiwKKyAgICAgICAgICAgICJjeXJpbGxpYyAoS09JOC1SKSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChXSU5ET1dTLTEyNTEpIjogIiIsCisgICAgICAgICAgICAiRE9DVFlQRToiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiRG9jdW1lbnQgdGl0bGU6IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZHM6IjogIiIsCisgICAgICAgICAgICAiUHJpbWFyeSBzdHlsZS1zaGVldDoiOiAiIiwKKyAgICAgICAgICAgICJUZXh0IGNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIlVURi04IChyZWNvbW1lbmRlZCkiOiAiIiwKKyAgICAgICAgICAgICJ3ZXN0ZXJuIChJU08tODg1OS0xKSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJHZWNrbyI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICAgICAiJiN4MDBkNzsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvZWRpdCBob3Jpem9udGFsIHJ1bGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBIb3Jpem9udGFsIFJ1bGUiOiAiIiwKKyAgICAgICAgICAgICJObyBzaGFkaW5nIjogIiIsCisgICAgICAgICAgICAiU3R5bGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5saW5lU3R5bGVyIjogeworICAgICAgICAgICAgIkNTUyBTdHlsZSI6ICIiLAorICAgICAgICAgICAgIi0iOiAiPDxFcXVhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAgICAgIkFuY2hvciBuYW1lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEFuY2hvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAgICAgIkluc2VydCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBmb290bm90ZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBOb3RlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFBhZ2VicmVhayI6IHsKKyAgICAgICAgICAgICJQYWdlIGJyZWFrIjogIiIsCisgICAgICAgICAgICAiUGFnZSBCcmVhayI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0IjogeworICAgICAgICAgICAgIlxcbiAgVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmdcXG4iOiAiIiwKKyAgICAgICAgICAgICJIaWRlIHByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgU25pcHBldCI6ICIiLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIiIsCisgICAgICAgICAgICAiTGluazEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMiI6ICIiLAorICAgICAgICAgICAgIkxpbmszIjogIiIsCisgICAgICAgICAgICAiTGluazQiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNSI6ICIiLAorICAgICAgICAgICAgIlNob3cgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nIjogIiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldDIiOiB7CisgICAgICAgICAgICAiQWxsIENhdGVnb3JpZXMiOiAiIiwKKyAgICAgICAgICAgICJGaWx0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYXMgSFRNTCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyB0ZW1wbGF0ZSB2YXJpYWJsZSI6ICIiLAorICAgICAgICAgICAgIk9ubHkgc2VhcmNoIHdvcmQgYmVnaW5uaW5nIjogIiIsCisgICAgICAgICAgICAiSFRNTCI6ICI8PENoYXJDb3VudGVyPj4iLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICI8PEluc2VydFNuaXBwZXQ+PiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgICAgICJDYXB0aW9uIGZvciB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZSBib3JkZXJzOiI6ICIiLAorICAgICAgICAgICAgIkxheW91IjogIiIsCisgICAgICAgICAgICAiU3R5bGUgb2YgdGhlIGJvcmRlciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJMYW5nTWFya3MiOiB7CisgICAgICAgICAgICAiJm1kYXNoOyBsYW5ndWFnZSAmbWRhc2g7IjogIiIsCisgICAgICAgICAgICAiJywgJyI6ICIiLAorICAgICAgICAgICAgIkVuZ2xpc2giOiAiIiwKKyAgICAgICAgICAgICJGcmVuY2giOiAiIiwKKyAgICAgICAgICAgICJHcmVlayI6ICIiLAorICAgICAgICAgICAgImxhbmd1YWdlIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIkxhdGluIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxpbmtlciI6IHsKKyAgICAgICAgICAgICIocHgpIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yLUxpbmsiOiAiIiwKKyAgICAgICAgICAgICJBbmNob3I6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgQWRkcmVzczoiOiAiIiwKKyAgICAgICAgICAgICJFbWFpbCBMaW5rIjogIiIsCisgICAgICAgICAgICAiTG9jYXRpb24gQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lbnUgQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lc3NhZ2UgVGVtcGxhdGU6IjogIiIsCisgICAgICAgICAgICAiTmV3IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIk9yZGluYXJ5IExpbmsiOiAiIiwKKyAgICAgICAgICAgICJQb3B1cCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJQb3B1cFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUmVzaXplYWJsZToiOiAiIiwKKyAgICAgICAgICAgICJTYW1lIFdpbmRvdyAoanVtcCBvdXQgb2YgZnJhbWVzKSI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbGJhcnM6IjogIiIsCisgICAgICAgICAgICAiU2hvd3MgT24gSG92ZXIiOiAiIiwKKyAgICAgICAgICAgICJTdGF0dXMgQmFyOiI6ICIiLAorICAgICAgICAgICAgIlN1YmplY3Q6IjogIiIsCisgICAgICAgICAgICAiVGl0bGU6IjogIiIsCisgICAgICAgICAgICAiVG9vbGJhcjoiOiAiIiwKKyAgICAgICAgICAgICJVUkwgTGluayI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICIiLAorICAgICAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTmFtZToiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTaXplOiI6ICI8PEZvcm1zPj4iCisgICAgICAgIH0sCisgICAgICAgICJMaXN0VHlwZSI6IHsKKyAgICAgICAgICAgICJDaG9vc2UgbGlzdCBzdHlsZSB0eXBlIChmb3Igb3JkZXJlZCBsaXN0cykiOiAiIiwKKyAgICAgICAgICAgICJEZWNpbWFsIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciBncmVlayBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgbGF0aW4gbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIHJvbWFuIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJVcHBlciBsYXRpbiBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiVXBwZXIgcm9tYW4gbnVtYmVycyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJNb290b29sc0ZpbGVNYW5hZ2VyIjogeworICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk9wZXJhIjogeworICAgICAgICAgICAgIk1BUksiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGFzdGVUZXh0IjogeworICAgICAgICAgICAgIkluc2VydCB0ZXh0IGluIG5ldyBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJQYXN0ZSBhcyBQbGFpbiBUZXh0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlByZXNlcnZlU2NyaXB0cyI6IHsKKyAgICAgICAgICAgICJKYXZhU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiUEhQIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlF1aWNrVGFnIjogeworICAgICAgICAgICAgIicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbCc6ICciOiAiIiwKKyAgICAgICAgICAgICJBVFRSSUJVVEVTIjogIiIsCisgICAgICAgICAgICAiQ29sb3JzIjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIFRBRyB5b3Ugd2FudCB0byBpbnNlcnQiOiAiIiwKKyAgICAgICAgICAgICJObyBDU1MgY2xhc3MgYXZhaWFibGUiOiAiIiwKKyAgICAgICAgICAgICJPayI6ICIiLAorICAgICAgICAgICAgIk9QVElPTlMiOiAiIiwKKyAgICAgICAgICAgICJRdWljayBUYWcgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiVEFHcyI6ICIiLAorICAgICAgICAgICAgIlRoZXJlIGFyZSBzb21lIHVuY2xvc2VkIHF1b3RlIjogIiIsCisgICAgICAgICAgICAiVGhpcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIFRBRyI6ICIiLAorICAgICAgICAgICAgIllvdSBoYXZlIHRvIHNlbGVjdCBzb21lIHRleHQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU2F2ZVN1Ym1pdCI6IHsKKyAgICAgICAgICAgICJpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIlJlYWR5IjogIiIsCisgICAgICAgICAgICAiU2F2ZSI6ICIiLAorICAgICAgICAgICAgIlNhdmluZy4uLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTZXRJZCI6IHsKKyAgICAgICAgICAgICJJRC9OYW1lOiI6ICIiLAorICAgICAgICAgICAgIlNldCBJZCBhbmQgTmFtZSI6ICIiLAorICAgICAgICAgICAgIlNldCBJZC9OYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElEL05hbWUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiU21hcnRSZXBsYWNlIjogeworICAgICAgICAgICAgIkNsb3NpbmdEb3VibGVRdW90ZXMiOiAiIiwKKyAgICAgICAgICAgICJDbG9zaW5nU2luZ2xlUXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJDb252ZXJ0IGFsbCBxdW90ZXMgYW5kIGRhc2hlcyBpbiB0aGUgY3VycmVudCBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBhdXRvbWF0aWMgcmVwbGFjZW1lbnRzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIk9wZW5pbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIlNtYXJ0UmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgIlNtYXJ0UmVwbGFjZSBTZXR0aW5ncyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTdHlsaXN0IjogeworICAgICAgICAgICAgIlN0eWxlcyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAgICAgIkNsZWFuIGJhZCBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQuIjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gU2VsZWN0aW9uIE9ubHkiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiB1cCBIVE1MIjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgU2NvcGUiOiAiIiwKKyAgICAgICAgICAgICJHZW5lcmFsIHRpZHkgdXAgYW5kIGNvcnJlY3Rpb24gb2Ygc29tZSBwcm9ibGVtcy4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc2VsZWN0IGZyb20gdGhlIGZvbGxvd2luZyBjbGVhbmluZyBvcHRpb25zLi4uIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHN0YW5kIGJ5IHdoaWxlIGNsZWFuaW5nIGluIHByb2Nlc3MuLi4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxpZ25tZW50IChsZWZ0L3JpZ2h0L2p1c3RpZnkpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgY2xhc3NlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgQWxsIEhUTUwgVGFncyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgc3R5bGVzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gZm9udCBzaXplcy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIHRleHQgY29sb3JzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdHlwZWZhY2VzIChmb250IFwic3R5bGVzXCIpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBlbXBoYXNpcyBhbmQgYW5ub3RhdGlvbnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGxhbmcgYXR0cmlidXRlcy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgUGFyYWdyYXBocyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMuIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSBkaXJlY3Rpb25hbCBxdW90ZSBtYXJrcyB3aXRoIG5vbi1kaXJlY3Rpb25hbCBxdW90ZSBtYXJrcy4iOiAiIiwKKyAgICAgICAgICAgICJWaWdvcm91c2x5IHB1cmdlIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAgICAgIkNlbGwgVHlwZToiOiAiIiwKKyAgICAgICAgICAgICJDZWxscyBkb3duIjogIiIsCisgICAgICAgICAgICAiQ2VsbHMgdG8gdGhlIHJpZ2h0LCBhbmQiOiAiIiwKKyAgICAgICAgICAgICJEbyBOb3QgQ2hhbmdlIjogIiIsCisgICAgICAgICAgICAiRnJhbWUgYW5kIGJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJIZWFkZXIgKHRoKSI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIGN1cnJlbnQgY2VsbCB3aXRoOiI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCAodGQpIjogIiIsCisgICAgICAgICAgICAiQ29sdW1ucyI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIjw8Q29udGV4dE1lbnU+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuc2F2ZWRDaGFuZ2VzIjogeworICAgICAgICAgICAgIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgZWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIldlYktpdCI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiPDxHZWNrbz4+IgorICAgICAgICB9LAorICAgICAgICAiWGluaGEiOiB7CisgICAgICAgICAgICAiJiM4MjEyOyBmb250ICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICImIzgyMTI7IHNpemUgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIjEgKDggcHQpIjogIiIsCisgICAgICAgICAgICAiMiAoMTAgcHQpIjogIiIsCisgICAgICAgICAgICAiMyAoMTIgcHQpIjogIiIsCisgICAgICAgICAgICAiNCAoMTQgcHQpIjogIiIsCisgICAgICAgICAgICAiNSAoMTggcHQpIjogIiIsCisgICAgICAgICAgICAiNiAoMjQgcHQpIjogIiIsCisgICAgICAgICAgICAiNyAoMzYgcHQpIjogIiIsCisgICAgICAgICAgICAiQXJpYWwiOiAiIiwKKyAgICAgICAgICAgICJDb3VyaWVyIE5ldyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtMCAoemVybykiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTEgLi4gQ1RSTC02IjogIiIsCisgICAgICAgICAgICAiQ1RSTC1BIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1CIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1DIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1FIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1JIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1KIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1MIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1OIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1SIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1TIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1VIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1WIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1YIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1ZIjogIiIsCisgICAgICAgICAgICAiQ1RSTC1aIjogIiIsCisgICAgICAgICAgICAiRWRpdG9yIEhlbHAiOiAiIiwKKyAgICAgICAgICAgICJFTlRFUiI6ICIiLAorICAgICAgICAgICAgIkVycm9yIExvYWRpbmcgWGluaGEuICBEZXZlbG9wZXJzLCBjaGVjayB0aGUgRXJyb3IgQ29uc29sZSBmb3IgaW5mb3JtYXRpb24uIjogIiIsCisgICAgICAgICAgICAiR2VvcmdpYSI6ICIiLAorICAgICAgICAgICAgIkltcGFjdCI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgQ29yZSI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgcGx1Z2lucyI6ICIiLAorICAgICAgICAgICAgIk1TIFdvcmQgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCBDb2xvciI6ICIiLAorICAgICAgICAgICAgIlNISUZULUVOVEVSIjogIiIsCisgICAgICAgICAgICAiVGFob21hIjogIiIsCisgICAgICAgICAgICAiVGltZXMgTmV3IFJvbWFuIjogIiIsCisgICAgICAgICAgICAiVG91Y2ggaGVyZSBmaXJzdCB0byBhY3RpdmF0ZSBlZGl0b3IuIjogIiIsCisgICAgICAgICAgICAiVmVyZGFuYSI6ICIiLAorICAgICAgICAgICAgIldhaXRpbmcgZm9yIElmcmFtZSB0byBsb2FkLi4uIjogIiIsCisgICAgICAgICAgICAiV2luZ0RpbmdzIjogIiIsCisgICAgICAgICAgICAiWGluaGEiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogQkFDS0dST1VORElNQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIlJlbW92ZSBDdXJyZW50IEJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJTZXQgQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIlNldCBwYWdlIGJhY2tncm91bmQgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJTZXQgUGFnZSBCYWNrZ3JvdW5kIEltYWdlIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNsaWVudHNpZGVTcGVsbGNoZWNrIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogQ0xJRU5UU0lERVNQRUxMQ0hFQ0sgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiU3BlbGwgQ2hlY2sgdXNpbmcgaWVTcGVsbCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJFeHRlbmRlZEZpbGVNYW5hZ2VyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogRVhURU5ERURGSUxFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICIxMCUiOiAiIiwKKyAgICAgICAgICAgICIxMDAlIjogIiIsCisgICAgICAgICAgICAiMjAwJSI6ICIiLAorICAgICAgICAgICAgIjI1JSI6ICIiLAorICAgICAgICAgICAgIjUwJSI6ICIiLAorICAgICAgICAgICAgIjc1JSI6ICIiLAorICAgICAgICAgICAgIj5MaXN0IFZpZXciOiAiIiwKKyAgICAgICAgICAgICI+VGh1bWJuYWlsIFZpZXciOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICIiLAorICAgICAgICAgICAgIkFsdCI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciBDb2xvciI6ICIiLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkNyb3AiOiAiIiwKKyAgICAgICAgICAgICJEOiI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICIiLAorICAgICAgICAgICAgIkVkaXQiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiIiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiIiwKKyAgICAgICAgICAgICJGaWxlc2l6ZToiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIEhvcml6b250YWwiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIEltYWdlIjogIiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciI6ICIiLAorICAgICAgICAgICAgIkdJRiI6ICIiLAorICAgICAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICIiLAorICAgICAgICAgICAgIkg6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiIiwKKyAgICAgICAgICAgICJKUEVHIEhpZ2giOiAiIiwKKyAgICAgICAgICAgICJKUEVHIExvdyI6ICIiLAorICAgICAgICAgICAgIkpQRUcgTWVkaXVtIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyI6ICIiLAorICAgICAgICAgICAgIkxvY2siOiAiIiwKKyAgICAgICAgICAgICJNYXJrZXIiOiAiIiwKKyAgICAgICAgICAgICJNYXhpbXVtIGZvbGRlciBzaXplIGxpbWl0IHJlYWNoZWQuIFVwbG9hZCBkaXNhYmxlZC4iOiAiIiwKKyAgICAgICAgICAgICJNZWFzdXJlIjogIiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICIiLAorICAgICAgICAgICAgIk5vIEZpbGVzIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHZhbHVlIjogIiIsCisgICAgICAgICAgICAiUE5HIjogIiIsCisgICAgICAgICAgICAiUHJlc2V0IjogIiIsCisgICAgICAgICAgICAiUXVhbGl0eToiOiAiIiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIiIsCisgICAgICAgICAgICAiUmVuYW1lIjogIiIsCisgICAgICAgICAgICAiUmVzaXplIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJTdGFydCBYOiI6ICIiLAorICAgICAgICAgICAgIlN0YXJ0IFk6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlRvZ2dsZSBtYXJrZXIgY29sb3IiOiAiIiwKKyAgICAgICAgICAgICJUcmFzaCI6ICIiLAorICAgICAgICAgICAgIlVwbG9hZCI6ICIiLAorICAgICAgICAgICAgIlc6IjogIiIsCisgICAgICAgICAgICAiWDoiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJZOiI6ICIiLAorICAgICAgICAgICAgIlpvb20iOiAiIiwKKyAgICAgICAgICAgICJDbGVhciI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIkNvcHkiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJDdXQiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIjw8TW9vdG9vbHNGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbHRlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEZJTFRFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWx0ZXIiOiAiPDxJbnNlcnRTbmlwcGV0Mj4+IgorICAgICAgICB9LAorICAgICAgICAiSHRtbFRpZHkiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBdXRvLVRpZHkiOiAiIiwKKyAgICAgICAgICAgICJEb24ndCBUaWR5IjogIiIsCisgICAgICAgICAgICAiSFRNTCBUaWR5IjogIiIsCisgICAgICAgICAgICAiVGlkeSBmYWlsZWQuICBDaGVjayB5b3VyIEhUTUwgZm9yIHN5bnRheCBlcnJvcnMuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkltYWdlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElNQUdFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbmdsZToiOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgUGljdHVyZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmVzIjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBVc2VybmFtZS9FbWFpbCI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciBOYW1lOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIEZvcm1hdCI6ICIiLAorICAgICAgICAgICAgIkltYWdlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkIjogIiIsCisgICAgICAgICAgICAiTm8gSW1hZ2VzIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gUGhvdG9zIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gVmlkZW9zIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiVGhpcyBTZXJ2ZXIiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIllvdVR1YmUgVXNlcm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFZpZGVvIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFZpZGVvcyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJDbGVhciI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQ3JvcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJFZGl0IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiR0lGIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgSGlnaCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgTWVkaXVtIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJMb2NrIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJNYXJrZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1lYXN1cmUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUE5HIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJRdWFsaXR5OiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUmVmcmVzaCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUmVzaXplIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIEltYWdlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJTdGFydCBYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU3RhcnQgWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlRyYXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJXOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJCZWhhdmlvcjoiOiAiIiwKKyAgICAgICAgICAgICJDb250aW51b3VzIjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uOiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBzY3JvbGxpbmcgbWFycXVlZSI6ICIiLAorICAgICAgICAgICAgIk1hcnF1ZWUgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIEFtb3VudDoiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgRGVsYXk6IjogIiIsCisgICAgICAgICAgICAiU2xpZGUiOiAiIiwKKyAgICAgICAgICAgICJTcGVlZCBDb250cm9sIjogIiIsCisgICAgICAgICAgICAiTmFtZSI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIk5hbWUvSUQ6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiVGV4dDoiOiAiPDxGb3Jtcz4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGljdHVyZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVFBJQ1RVUkUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vdCBkZWZpbmVkIjogIiIsCisgICAgICAgICAgICAiIE9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiIsCisgICAgICAgICAgICAiT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJVcGxvYWQgZmlsZSI6ICIiLAorICAgICAgICAgICAgIlNpemUiOiAiPDxGb3Jtcz4+IgorICAgICAgICB9LAorICAgICAgICAiTm90ZVNlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTIwJSI6ICIiLAorICAgICAgICAgICAgIjE1MCUiOiAiIiwKKyAgICAgICAgICAgICI4MCUiOiAiIiwKKyAgICAgICAgICAgICJBZGQgR1VJRE8gQ29kZSBpbiBhIHRleHRib3ggb24gdGhlIHBhZ2UiOiAiIiwKKyAgICAgICAgICAgICJBZGQgTUlESSBsaW5rIHRvIGFsbG93IHN0dWRlbnRzIHRvIGhlYXIgdGhlIG11c2ljIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiR3VpZG8gY29kZSI6ICIiLAorICAgICAgICAgICAgIkdVSURPIENvZGUiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBpbiBhcHBsZXQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgR1VJRE8gTXVzaWMgTm90YXRpb24iOiAiIiwKKyAgICAgICAgICAgICJNSURJIEZpbGUiOiAiIiwKKyAgICAgICAgICAgICJTb3VyY2UgQ29kZSI6ICIiLAorICAgICAgICAgICAgIldpdGggTW96aWxsYSwgdGhlIGFwcGxldCB3aWxsIG5vdCBiZSB2aXNpYmxlIGluIGVkaXRvciwgYnV0IG9ubHkgaW4gV2ViIHBhZ2UgYWZ0ZXIgc3VibWl0dGluZy4iOiAiIiwKKyAgICAgICAgICAgICJab29tIDoiOiAiIiwKKyAgICAgICAgICAgICIxMDAlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJPcHRpb25zIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiWm9vbSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgR2VhcnMgaW4gb3JkZXIgdG8gdXNlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UgYW5kIGNvbmZpZ3VyYXRpb24uIjogIiIsCisgICAgICAgICAgICAiRW5hYmxpbmcgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIkluc3RhbGwiOiAiIiwKKyAgICAgICAgICAgICJMZWFybiBBYm91dCBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIHJlbG9hZCB0aGUgcGFnZSwgY2F1c2luZyB5b3UgdG8gbG9zZSBhbnkgdW5zYXZlZCB3b3JrLiAgUHJlc3MgXCJPS1wiIHRvIHJlbG9hZC4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSB1c2VzIEdvb2dsZSBHZWFycyB0byBlbmFibGUgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZS4gIFdpdGggR2VhcnMgaW5zdGFsbGVkLCB5b3UgY2FuIHNhdmUgZHJhZnRzIG9mIHlvdXIgZG9jdW1lbnRzIG9uIHlvdXIgaGFyZCBkcml2ZSwgY29uZmlndXJlIFhpbmhhIHRvIGxvb2sgdGhlIHdheSB5b3Ugd2FudCwgYW5kIGNhcnJ5IHRoaXMgaW5mb3JtYXRpb24gd2hlcmV2ZXIgeW91IHVzZSBYaW5oYSBvbiB0aGUgd2ViLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQU1NlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkZpbGU6ICI6ICIiLAorICAgICAgICAgICAgIkltcG9ydCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQZXJzaXN0ZW50U3RvcmFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkRldGFpbHMiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIEJyb3dzZXIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgICBUaGVyZSBDICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICBUaGVyZSBBICI6ICIiLAorICAgICAgICAgICAgIkhlbGxvIFwiIFRoZXJlIEIgXCIiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAnIFRoZXJlIEQgJyI6ICIiLAorICAgICAgICAgICAgIkxpc3Qgb2YgUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiTmV3IERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiT3BlbiI6ICIiLAorICAgICAgICAgICAgIk9wZW4gRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB5b3UnZCBsaWtlIHRvIGNyZWF0ZS4iOiAiIiwKKyAgICAgICAgICAgICJTYXZlIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIGVyYXNlIGFueSB1bnNhdmVkIGNvbnRlbnQuICBJZiB5b3UncmUgY2VydGFpbiwgcGxlYXNlIGNsaWNrIE9LIHRvIGNvbnRpbnVlLiI6ICIiLAorICAgICAgICAgICAgIldlYiBVUkwiOiAiIiwKKyAgICAgICAgICAgICJDb25maXJtIjogIjw8UFNMb2NhbD4+IiwKKyAgICAgICAgICAgICJDb3B5IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTWFuYWdlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZW5hbWUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCI6ICI8PEluc2VydE5vdGU+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBTUEVMTENIRUNLRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGljdGlvbmFyeSI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGVkIGxpc3Qgb2YgbWlzcGVsbGVkIHdvcmRzIjogIiIsCisgICAgICAgICAgICAiSFRNTEFyZWEgU3BlbGwgQ2hlY2tlciI6ICIiLAorICAgICAgICAgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIGFsbCI6ICIiLAorICAgICAgICAgICAgIkluZm8iOiAiIiwKKyAgICAgICAgICAgICJMZWFybiI6ICIiLAorICAgICAgICAgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICIiLAorICAgICAgICAgICAgIk9yaWdpbmFsIHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQuICBDYWxsaW5nIHNwZWxsIGNoZWNrZXIuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAiIiwKKyAgICAgICAgICAgICJwbGl6IHdlaXQgOy0pIjogIiIsCisgICAgICAgICAgICAiUmUtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSBhbGwiOiAiIiwKKyAgICAgICAgICAgICJSZXZlcnQiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiU3BlbGwtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJTdWdnZXN0aW9ucyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBkcm9wIGNoYW5nZXMgYW5kIHF1aXQgc3BlbGwgY2hlY2tlci4gIFBsZWFzZSBjb25maXJtLiI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2Ugd2l0aCI6ICI8PEZpbmRSZXBsYWNlPj4iCisgICAgICAgIH0sCisgICAgICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFRFTVBMQVRFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkluc2VydCB0ZW1wbGF0ZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJVbkZvcm1hdCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFVORk9STUFUIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFsbCI6ICIiLAorICAgICAgICAgICAgIkFsbCBIVE1MOiI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIEFyZWEiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBvcHRpb25zIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0dGluZzoiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIENsZWFuZXIiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Qgd2hpY2ggdHlwZXMgb2YgZm9ybWF0dGluZyB5b3Ugd291bGQgbGlrZSB0byByZW1vdmUuIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0aW9uIjogIiIKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC92bi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL3ZuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNjE4N2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC92bi5qcwpAQCAtMCwwICsxLDE1NzMgQEAKKy8vIFhpbmhhIExhbmd1YWdlIENvbWJpbmVkIFRyYW5zbGF0aW9uIEZpbGUKKy8vCisvLyBMQU5HOiAidm4iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTlNUUlVDVElPTlMgVE8gVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFlvdXIgdHJhbnNsYXRpb24gbXVzdCBiZSBpbiBVVEYtOCBDaGFyYWN0ZXIgRW5jb2RpbmcuCisvLworLy8gVGhpcyBpcyBhIEpTT04gZW5jb2RlZCBmaWxlIChwbHVzIGNvbW1lbnRzKSwgc3RyaW5ncyBzaG91bGQgYmUgZG91YmxlLXF1b3RlCisvLyBvbmx5LCBkbyBub3QgdXNlIHNpbmdsZSBxdW90ZXMgdG8gc3Vycm91bmQgc3RyaW5ncyAtICJoZWxsbyIsIG5vdCAnaGVsbG8nCisvLyBkbyBub3QgaGF2ZSBhIHRyYWlsaW5nIGNvbW1hIGFmdGVyIHRoZSBsYXN0IGVudHJ5IGluIGEgc2VjdGlvbi4KKy8vCisvLyBPbmx5IGZ1bGwgbGluZSBjb21tZW50cyBhcmUgYWxsb3dlZCAodGhhdCBhIGNvbW1lbnRzIG9jY3VweSBlbnRpcmUgbGluZXMpLgorLy8KKy8vIFNlYXJjaCBmb3IgdGhlIF9fTkVXX1RSQU5TTEFUSU9OU19fIHNlY3Rpb24gYmVsb3csIHRoaXMgaXMgd2hlcmUgeW91IHdpbGwKKy8vIHdhbnQgdG8gZm9jdXMsIHRoaXMgc2VjdGlvbiBpbmNsdWRlcyB0aGluZ3MgdGhhdCBkbyBub3QgcHJlc2VudGx5IGhhdmUgYSAKKy8vIHRyYW5zbGF0aW9uIG9yIGZvciB3aGljaCB0aGUgdHJhbnNsYXRpb24gbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgYWNjdXJhY3kuCisvLworLy8gSW4gdGhlIE5ldyBUcmFuc2xhdGlvbnMgc2VjdGlvbiBhIHRyYW5zbGF0aW9uIHN0cmluZyBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZworLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiIgorLy8gICAgIFRoaXMgbWVhbnMgaXQgaXMgbm90IHRyYW5zbGF0ZWQgeWV0LCBhZGQgeW91ciB0cmFuc2xhdGlvbi4uLgorLy8gICAgICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJLbGluZ29uIFN0cmluZyBIZXJlIgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiVHJhbnNsYXRlZCBTdHJpbmcgSGVyZSIKKy8vICAgICBUaGlzIG1lYW5zIHRoYXQgYW4gZXhpc3RpbmcgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nLCBpbiBzb21lIG90aGVyCisvLyAgICAgc2VjdGlvbiBoYXMgYmVlbiBmb3VuZCwgYW5kIHVzZWQuICBDaGVjayB0aGF0IGl0IGlzIGFwcHJvcHJpdGUgZm9yIHRoaXMKKy8vICAgICBzZWN0aW9uIGFuZCBpZiBpdCBpcywgdGhhdCdzIGZpbmUgbGVhdmUgaXQgYXMgaXMsIG90aGVyd2lzZSBjaGFuZ2UgYXMKKy8vICAgICBhcHByb3ByaWF0ZS4KKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIjw8QW5vdGhlclNlY3Rpb24+PiIKKy8vICAgICBUaGlzIG1lYW5zIHVzZSB0aGUgc2FtZSB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcgYXMgPDxBbm90aGVyU2VjdGlvbj4+CisvLyAgICAgdGhpcyBzYXZlcyB5b3UgcmUtdHJhbmxhdGluZyBzdHJpbmdzLiAgSWYgdGhlIENvbnRleHQgb2YgdGhpcyBzZWN0aW9uCisvLyAgICAgYW5kIHRoZSBjb250ZXh0IG9mIEFub3RoZXJTZWN0aW9uIHNlZW0gdGhlIHNhbWUsIHRoYXQncyBmaW5lIGxlYXZlIGl0CisvLyAgICAgdXNpbmcgdGhhdCB0cmFuc2xhdGlvbiwgYnV0IGlmIHRoaXMgc2VjdGlvbiBuZWVkcyBhIGRpZmZlcmVudCB0cmFuc2xhdGlvbiwgCisvLyAgICAgeW91IGNhbiBwcm92aWRlIGl0IGJ5IHJlcGxhY2luZyB0aGUgbGluayAoPDxBbm90aGVyU2VjdGlvbj4+KSB3aXRoIHRoYXQKKy8vICAgICBuZXcgdHJhbnNsYXRpb24uICBGb3IgZXhhbXBsZSAtIGEgIlRhYmxlIiBpbiBzYXkgIkRhdGFQbHVnaW4iIGlzIAorLy8gICAgIHBlcmhhcHMgdHJhbnNsYXRlZCBkaWZmZXJlbnRseSB0byAiVGFibGUiIGluICJGdXJuaXR1cmVQbHVnaW4iLgorLy8KKy8vIFRFU1RJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgcGxhY2UgeW91ciB0cmFuc2xhdGlvbiBmaWxlIG9uIHlvdXIgd2Vic2VydmVyIHNvbWV3aGVyZSBmb3IgZXhhbXBsZQorLy8KKy8vICAgL3hpbmhhL2xhbmcvbWVyZ2VkL3ZuLmpzCisvLworLy8gYW5kIHRoZW4gdGVsbCBYaW5oYSB3aGVyZSB0byBnZXQgaXQgKGJlZm9yZSBsb2FkaW5nIFhpbmhhQ29yZS5qcykgYnkgCisvLworLy8gIF9lZGl0b3JfbGFuZyAgICAgICAgICAgICAgPSAndm4nOworLy8gIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSAgPSAnL3hpbmhhL2xhbmcvbWVyZ2VkL3ZuLmpzJzsKKy8vCisvLyBYaW5oYSB3aWxsIGxvYWQgeW91ciBuZXcgbGFuZ3VhZ2UgZGVmaW5pdGlvbi4KKy8vCisvLyBTVUJNSVRUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IGNyZWF0ZSBhIFRpY2tldCBvbiB0aGUgWGluaGEgd2Vic2l0ZSBhbmQgYXR0YWNoIHlvdXIgdHJhbnNsYXRpb24gCisvLyBmaWxlLgorLy8KKy8vIFRoZSBYaW5oYSBkZXZlbG9wZXJzIHdpbGwgdGFrZSB5b3VyIGZpbGUgYW5kIHVzZSB0aGUgCisvLyAgICAgY29udHJpYi9sY19zcGxpdF9tZXJnZWRfZmlsZS5waHAKKy8vIHNjcmlwdCB0byBsb2FkIGl0IGludG8gdGhlIFhpbmhhIGRpc3RyaWJ1dGlvbi4KKworeworICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICJDYW5jZWwiOiAiSOG7p3kiLAorICAgICAgICAiT0siOiAixJDhu5NuZyDDvSIKKyAgICB9LAorICAgICJBYm91dEJveCI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIlThu7EgR2nhu5tpIFRoaeG7h3UiCisgICAgfSwKKyAgICAiQmFja2dyb3VuZEltYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIkjhu6d5IgorICAgIH0sCisgICAgIkNvbG9yUGlja2VyIjogeworICAgICAgICAiT0siOiAixJDhu5NuZyDDvSIKKyAgICB9LAorICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogIkPEg24gR2nhu69hIiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICJDxINuIMSQ4buBdSIsCisgICAgICAgICJKdXN0aWZ5IExlZnQiOiAiQ8SDbiBUcsOhaSIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIkPEg24gUGjhuqNpIgorICAgIH0sCisgICAgIkNyZWF0ZUxpbmsiOiB7CisgICAgICAgICJDYW5jZWwiOiAiSOG7p3kiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIlRow6ptL0No4buJbmggc+G7rWEgxJHGsOG7nW5nIGThuqtuIiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiQ+G7rWEgc+G7lSBt4bubaSAoX2JsYW5rKSIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIktow7RuZyAoc+G7rSBk4bulbmcgaW1wbGljaXQpIiwKKyAgICAgICAgIk9LIjogIsSQ4buTbmcgw70iLAorICAgICAgICAiT3RoZXIiOiAiS2jDoWMiLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlRyw6puIGPDuW5nIGtodW5nIChfc2VsZikiLAorICAgICAgICAiVGFyZ2V0OiI6ICJOxqFpIGhp4buHbiB0aOG7izoiLAorICAgICAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUacOqdSDEkeG7gSAoY+G7p2EgaMaw4bubbmcgZOG6q24pOiIsCisgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIktodW5nIHRyw6puIGPDuW5nIChfdG9wKSIsCisgICAgICAgICJVUkw6IjogIlVSTDoiCisgICAgfSwKKyAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJI4buneSIsCisgICAgICAgICJPSyI6ICLEkOG7k25nIMO9IgorICAgIH0sCisgICAgIkVxdWF0aW9uIjogeworICAgICAgICAiQ2FuY2VsIjogIkjhu6d5IiwKKyAgICAgICAgIk9LIjogIsSQ4buTbmcgw70iCisgICAgfSwKKyAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJI4buneSIsCisgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIkPhu61hIHPhu5UgbeG7m2kgKF9ibGFuaykiLAorICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJLaMO0bmcgKHPhu60gZOG7pW5nIGltcGxpY2l0KSIsCisgICAgICAgICJPSyI6ICLEkOG7k25nIMO9IiwKKyAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJUcsOqbiBjw7luZyBraHVuZyAoX3NlbGYpIiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKSI6ICJUacOqdSDEkeG7gSAoY+G7p2EgaMaw4bubbmcgZOG6q24pOiIsCisgICAgICAgICJUb3AgZnJhbWUgKF90b3ApIjogIktodW5nIHRyw6puIGPDuW5nIChfdG9wKSIKKyAgICB9LAorICAgICJGb3JtcyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJI4buneSIsCisgICAgICAgICJPSyI6ICLEkOG7k25nIMO9IgorICAgIH0sCisgICAgIkZ1bGxQYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIkjhu6d5IiwKKyAgICAgICAgIk9LIjogIsSQ4buTbmcgw70iCisgICAgfSwKKyAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiSOG7p3kiLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIkTDsm5nIEvhursgTmdhbmciLAorICAgICAgICAiT0siOiAixJDhu5NuZyDDvSIKKyAgICB9LAorICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiSOG7p3kiLAorICAgICAgICAiT0siOiAixJDhu5NuZyDDvSIKKyAgICB9LAorICAgICJJbnNlcnRBbmNob3IiOiB7CisgICAgICAgICJDYW5jZWwiOiAiSOG7p3kiLAorICAgICAgICAiT0siOiAixJDhu5NuZyDDvSIKKyAgICB9LAorICAgICJJbnNlcnRJbWFnZSI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJI4buneSIsCisgICAgICAgICJPSyI6ICLEkOG7k25nIMO9IgorICAgIH0sCisgICAgIkluc2VydE1hcnF1ZWUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiSOG7p3kiLAorICAgICAgICAiT0siOiAixJDhu5NuZyDDvSIKKyAgICB9LAorICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAiQ2FuY2VsIjogIkjhu6d5IgorICAgIH0sCisgICAgIkluc2VydFBpY3R1cmUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiSOG7p3kiLAorICAgICAgICAiT0siOiAixJDhu5NuZyDDvSIKKyAgICB9LAorICAgICJJbnNlcnRTbmlwcGV0IjogeworICAgICAgICAiQ2FuY2VsIjogIkjhu6d5IgorICAgIH0sCisgICAgIkluc2VydFNuaXBwZXQyIjogeworICAgICAgICAiQ2FuY2VsIjogIkjhu6d5IgorICAgIH0sCisgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAiQ2FuY2VsIjogIkjhu6d5IiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICJDaMOobiBC4bqjbmciLAorICAgICAgICAiT0siOiAixJDhu5NuZyDDvSIKKyAgICB9LAorICAgICJMaW5rZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiSOG7p3kiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIlRow6ptL0No4buJbmggc+G7rWEgxJHGsOG7nW5nIGThuqtuIiwKKyAgICAgICAgIk9LIjogIsSQ4buTbmcgw70iLAorICAgICAgICAiVGFyZ2V0OiI6ICJOxqFpIGhp4buHbiB0aOG7izoiLAorICAgICAgICAiVVJMOiI6ICJVUkw6IgorICAgIH0sCisgICAgIk5vdGVTZXJ2ZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiSOG7p3kiLAorICAgICAgICAiT0siOiAixJDhu5NuZyDDvSIKKyAgICB9LAorICAgICJQU0xvY2FsIjogeworICAgICAgICAiQ2FuY2VsIjogIkjhu6d5IgorICAgIH0sCisgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJI4buneSIsCisgICAgICAgICJPSyI6ICLEkOG7k25nIMO9IgorICAgIH0sCisgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAiQ2FuY2VsIjogIkjhu6d5IgorICAgIH0sCisgICAgIlF1aWNrVGFnIjogeworICAgICAgICAiQ2FuY2VsIjogIkjhu6d5IgorICAgIH0sCisgICAgIlNldElkIjogeworICAgICAgICAiQ2FuY2VsIjogIkjhu6d5IiwKKyAgICAgICAgIk9LIjogIsSQ4buTbmcgw70iCisgICAgfSwKKyAgICAiU21hcnRSZXBsYWNlIjogeworICAgICAgICAiT0siOiAixJDhu5NuZyDDvSIKKyAgICB9LAorICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICJDYW5jZWwiOiAiSOG7p3kiLAorICAgICAgICAiT0siOiAixJDhu5NuZyDDvSIKKyAgICB9LAorICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAiQ2FuY2VsIjogIkjhu6d5IiwKKyAgICAgICAgIk9LIjogIsSQ4buTbmcgw70iCisgICAgfSwKKyAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAiQ2FuY2VsIjogIkjhu6d5IiwKKyAgICAgICAgIk9LIjogIsSQ4buTbmcgw70iCisgICAgfSwKKyAgICAiVGVtcGxhdGUiOiB7CisgICAgICAgICJDYW5jZWwiOiAiSOG7p3kiCisgICAgfSwKKyAgICAiVW5Gb3JtYXQiOiB7CisgICAgICAgICJDYW5jZWwiOiAiSOG7p3kiLAorICAgICAgICAiT0siOiAixJDhu5NuZyDDvSIKKyAgICB9LAorICAgICJYaW5oYSI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIlThu7EgR2nhu5tpIFRoaeG7h3UiLAorICAgICAgICAiQmFja2dyb3VuZCBDb2xvciI6ICJNw6B1IE7hu4FuIiwKKyAgICAgICAgIkJvbGQiOiAixJDhuq1tIiwKKyAgICAgICAgIkJ1bGxldGVkIExpc3QiOiAiRGFuaCBTw6FjaCBQaGkgVGjhu6kgVOG7sSAoQ2jhuqVtIMSR4bqndSBkw7JuZykiLAorICAgICAgICAiQ29weSBzZWxlY3Rpb24iOiAiU2FvIGNow6lwIiwKKyAgICAgICAgIkN1cnJlbnQgc3R5bGUiOiAixJDhu4tuaCBE4bqhbmcgSGnhu4duIFRo4budaSIsCisgICAgICAgICJDdXQgc2VsZWN0aW9uIjogIkPhuq90IiwKKyAgICAgICAgIkRlY3JlYXNlIEluZGVudCI6ICJMw7lpIFJhIE5nb8OgaSIsCisgICAgICAgICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICJWaeG6v3QgdOG7qyB0csOhaSBzYW5nIHBo4bqjaSIsCisgICAgICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJWaeG6v3QgdOG7qyBwaOG6o2kgc2FuZyB0csOhaSIsCisgICAgICAgICJGb250IENvbG9yIjogIk3DoHUgQ2jhu68iLAorICAgICAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiR2nDunAgxJDhu6EiLAorICAgICAgICAiSG9yaXpvbnRhbCBSdWxlIjogIkTDsm5nIEvhursgTmdhbmciLAorICAgICAgICAiSW5jcmVhc2UgSW5kZW50IjogIlRo4buldCBWw6BvIFRyb25nIiwKKyAgICAgICAgIkluc2VydCBUYWJsZSI6ICJDaMOobiBC4bqjbmciLAorICAgICAgICAiSW5zZXJ0IFdlYiBMaW5rIjogIlThuqFvIExpw6puIEvhur90IiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiQ2jDqG4g4bqibmgiLAorICAgICAgICAiSXRhbGljIjogIk5naGnDqm5nIiwKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogIkPEg24gR2nhu69hIiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICJDxINuIMSQ4buBdSIsCisgICAgICAgICJKdXN0aWZ5IExlZnQiOiAiQ8SDbiBUcsOhaSIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIkPEg24gUGjhuqNpIiwKKyAgICAgICAgIk9yZGVyZWQgTGlzdCI6ICJEYW5oIFPDoWNoIEPDsyBUaOG7qSBU4buxICgxLCAyLCAzKSIsCisgICAgICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJEw6FuIiwKKyAgICAgICAgIlBhdGgiOiAixJDGsOG7nW5nIEThuqtuIiwKKyAgICAgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkzhuqV5IGzhuqFpIHRoYW8gdMOhYyB24burYSBi4buPIiwKKyAgICAgICAgIlN0cmlrZXRocm91Z2giOiAiR+G6oWNoIFjDs2EiLAorICAgICAgICAiU3Vic2NyaXB0IjogIlZp4bq/dCBYdeG7kW5nIETGsOG7m2kiLAorICAgICAgICAiU3VwZXJzY3JpcHQiOiAiVmnhur90IEzDqm4gVHLDqm4iLAorICAgICAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIkNo4bq/IMSQ4buZIE3DoyBIVE1MIiwKKyAgICAgICAgIlVuZGVybGluZSI6ICJH4bqhY2ggQ2jDom4iLAorICAgICAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiSOG7p3kgdGhhbyB0w6FjIHRyxrDhu5tjIiwKKyAgICAgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJC4bqhbiDEkWFuZyDhu58gY2jhur8gxJHhu5kgdGV4dC4gIFPhu60gZOG7pW5nIG7DunQgWzw+XSDEkeG7gyBjaHV54buDbiBs4bqhaSBjaOG6vyDEkeG7mSBXWVNJV0lHLiIKKyAgICB9LAorICAgICJfX05FV19UUkFOU0xBVElPTlNfXyI6IHsKKyAgICAgICAgIkFiYnJldmlhdGlvbiI6IHsKKyAgICAgICAgICAgICJBYmJyZXZpYXRpb24iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiIiwKKyAgICAgICAgICAgICJFeHBhbnNpb246IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkFib3V0Qm94IjogeworICAgICAgICAgICAgIkNsb3NlIjogIjw8WGluaGE+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJDb3VudGVyIjogeworICAgICAgICAgICAgIi4uLiBpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIkNoYXJzIjogIiIsCisgICAgICAgICAgICAiSFRNTCI6ICIiLAorICAgICAgICAgICAgIldvcmRzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJhY3Rlck1hcCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgc3BlY2lhbCBjaGFyYWN0ZXIiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICAgICAiQ2xpY2sgYSBjb2xvci4uLiI6ICIiLAorICAgICAgICAgICAgIkNvbG9yOiAiOiAiIiwKKyAgICAgICAgICAgICJTYW1wbGUiOiAiIiwKKyAgICAgICAgICAgICJXZWIgU2FmZTogIjogIiIsCisgICAgICAgICAgICAiQ2xvc2UiOiAiPDxYaW5oYT4+IgorICAgICAgICB9LAorICAgICAgICAiQ29udGV4dE1lbnUiOiB7CisgICAgICAgICAgICAiX0RlbGV0ZSBSb3ciOiAiIiwKKyAgICAgICAgICAgICJfSW1hZ2UgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIl9Nb2RpZnkgTGluay4uLiI6ICIiLAorICAgICAgICAgICAgIl9SZW1vdmUgTGluay4uLiI6ICIiLAorICAgICAgICAgICAgIl9UYWJsZSBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiQ19lbGwgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIkNoZWNfayBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiQ29weSI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBhIGxpbmsiOiAiIiwKKyAgICAgICAgICAgICJDdXJyZW50IFVSTCBpcyI6ICIiLAorICAgICAgICAgICAgIkN1dCI6ICIiLAorICAgICAgICAgICAgIkRlX2xldGUgQ29sdW1uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIENlbGwiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgY29sdW1uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IHJvdyI6ICIiLAorICAgICAgICAgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIiIsCisgICAgICAgICAgICAiSV9uc2VydCBSb3cgQmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5fc2VydCBSb3cgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgX0NvbHVtbiBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ19vbHVtbiBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDZWxsIEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiTGluayBwb2ludHMgdG86IjogIiIsCisgICAgICAgICAgICAiTWFrZSBsaW5fay4uLiI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIiIsCisgICAgICAgICAgICAiT3BlbnMgdGhpcyBsaW5rIGluIGEgbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlBhc3RlIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBlbGVtZW50OiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gdW5saW5rIHRoaXMgZWxlbWVudC4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgdGhlICRlbGVtIEVsZW1lbnQuLi4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgdGhpcyBub2RlIGZyb20gdGhlIGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUm9fdyBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgaW1hZ2UgcHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBDZWxsIFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgVGFibGUgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBSb3cgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJVbmxpbmsgdGhlIGN1cnJlbnQgZWxlbWVudCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICIiLAorICAgICAgICAgICAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJEZWZpbml0aW9uTGlzdCI6IHsKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGRlc2NyaXB0aW9uIjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiBsaXN0IjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiB0ZXJtIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRpYWxvZ3MiOiB7CisgICAgICAgICAgICAiU29tZSBUZXh0IEhlcmUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRHluYW1pY0NTUyI6IHsKKyAgICAgICAgICAgICJDaG9vc2Ugc3R5bGVzaGVldCI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQiOiAiIiwKKyAgICAgICAgICAgICJVbmRlZmluZWQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgICAgICJFZGl0IEhUTUwgZm9yIHNlbGVjdGVkIHRleHQiOiAiIiwKKyAgICAgICAgICAgICJFZGl0IFRhZyBCeSBQZWciOiAiIiwKKyAgICAgICAgICAgICJUYWcgRWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkVxdWF0aW9uIjogeworICAgICAgICAgICAgIiE9IjogIiIsCisgICAgICAgICAgICAiIWluIjogIiIsCisgICAgICAgICAgICAiJmd0Oy0iOiAiIiwKKyAgICAgICAgICAgICImZ3Q7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9IjogIiIsCisgICAgICAgICAgICAiJmx0Oz0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiJmx0O3gmZ3Q7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAhYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYC5gICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAyYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDNgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA1YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDZgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgN2AgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA4YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgZWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7Jm5ic3A7YDFgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Arezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgLTpcXCBgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC17Ojp9YCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BDYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Bjb3NgIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YGxuYCZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BwaWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHNpbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGFuYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2B0aW1lc2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImcXVvdDt0ZXh0JnF1b3Q7IjogIiIsCisgICAgICAgICAgICAiJytmb3JtdWxhKyciOiAiIiwKKyAgICAgICAgICAgICIoKG4pLChrKSkiOiAiIiwKKyAgICAgICAgICAgICIoeCsxKS8oeC0xKSI6ICIiLAorICAgICAgICAgICAgIioiOiAiIiwKKyAgICAgICAgICAgICIqKiI6ICIiLAorICAgICAgICAgICAgIistIjogIiIsCisgICAgICAgICAgICAiLSZndDsiOiAiIiwKKyAgICAgICAgICAgICItJmx0OyI6ICIiLAorICAgICAgICAgICAgIi06IjogIiIsCisgICAgICAgICAgICAiLT0iOiAiIiwKKyAgICAgICAgICAgICIvLyI6ICIiLAorICAgICAgICAgICAgIi9fIjogIiIsCisgICAgICAgICAgICAiOi4iOiAiIiwKKyAgICAgICAgICAgICI9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIkAiOiAiIiwKKyAgICAgICAgICAgICJbW2EsYl0sW2MsZF1dIjogIiIsCisgICAgICAgICAgICAiXFxcXCI6ICIiLAorICAgICAgICAgICAgIlxcbkNsaWNrIGluIHRoZSBib3ggdG8gdXNlIHlvdXIga2V5Ym9hcmQgb3IgdXNlIHRoZSBidXR0b25zXFxuIjogIiIsCisgICAgICAgICAgICAiXl4iOiAiIiwKKyAgICAgICAgICAgICJeXl4iOiAiIiwKKyAgICAgICAgICAgICJfX3wiOiAiIiwKKyAgICAgICAgICAgICJffF8iOiAiIiwKKyAgICAgICAgICAgICJgIT1gIjogIiIsCisgICAgICAgICAgICAiYCFpbmAiOiAiIiwKKyAgICAgICAgICAgICJgJmFuZDtgIjogIiIsCisgICAgICAgICAgICAiYCZjYXA7YCI6ICIiLAorICAgICAgICAgICAgImAmY3VwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmd0Oy1gIjogIiIsCisgICAgICAgICAgICAiYCZndDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PSZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZsdDs9YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7eCZndDtgIjogIiIsCisgICAgICAgICAgICAiYCZvcjtgIjogIiIsCisgICAgICAgICAgICAiYCZxdW90O3RleHQmcXVvdDtgIjogIiIsCisgICAgICAgICAgICAiYCgobiksKGspKWAiOiAiIiwKKyAgICAgICAgICAgICJgKHgrMSkvKHgtMSlgIjogIiIsCisgICAgICAgICAgICAiYCoqYCI6ICIiLAorICAgICAgICAgICAgImAqYCI6ICIiLAorICAgICAgICAgICAgImArLWAiOiAiIiwKKyAgICAgICAgICAgICJgLSZndDtgIjogIiIsCisgICAgICAgICAgICAiYC0mbHQ7YCI6ICIiLAorICAgICAgICAgICAgImAtOmAiOiAiIiwKKyAgICAgICAgICAgICJgLT1gIjogIiIsCisgICAgICAgICAgICAiYC8vYCI6ICIiLAorICAgICAgICAgICAgImAvX2AiOiAiIiwKKyAgICAgICAgICAgICJgOi5gIjogIiIsCisgICAgICAgICAgICAiYD0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImBAYCI6ICIiLAorICAgICAgICAgICAgImBbW2EsYl0sW2MsZF1dYCI6ICIiLAorICAgICAgICAgICAgImBcXFxcYCI6ICIiLAorICAgICAgICAgICAgImBfX3xgIjogIiIsCisgICAgICAgICAgICAiYF98X2AiOiAiIiwKKyAgICAgICAgICAgICJgQUFgIjogIiIsCisgICAgICAgICAgICAiYGFsZXBoYCI6ICIiLAorICAgICAgICAgICAgImBhbHBoYWAiOiAiIiwKKyAgICAgICAgICAgICJgYW5kYCI6ICIiLAorICAgICAgICAgICAgImBiYXJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJiYmFgIjogIiIsCisgICAgICAgICAgICAiYGJldGFgIjogIiIsCisgICAgICAgICAgICAiYENDYCI6ICIiLAorICAgICAgICAgICAgImBjY2FgIjogIiIsCisgICAgICAgICAgICAiYGNoaWAiOiAiIiwKKyAgICAgICAgICAgICJgZGFycmAiOiAiIiwKKyAgICAgICAgICAgICJgZGRvdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbGAiOiAiIiwKKyAgICAgICAgICAgICJgRGVsdGFgIjogIiIsCisgICAgICAgICAgICAiYGRlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkaWFtb25kYCI6ICIiLAorICAgICAgICAgICAgImBkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkeS9keGAiOiAiIiwKKyAgICAgICAgICAgICJgRUVgIjogIiIsCisgICAgICAgICAgICAiYGVwc2lgIjogIiIsCisgICAgICAgICAgICAiYGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZnJhYCI6ICIiLAorICAgICAgICAgICAgImBHYW1tYWAiOiAiIiwKKyAgICAgICAgICAgICJgZ2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdyYWRgIjogIiIsCisgICAgICAgICAgICAiYGhhcnJgIjogIiIsCisgICAgICAgICAgICAiYGhBcnJgIjogIiIsCisgICAgICAgICAgICAiYGhhdGFgIjogIiIsCisgICAgICAgICAgICAiYGlmYCI6ICIiLAorICAgICAgICAgICAgImBpbmAiOiAiIiwKKyAgICAgICAgICAgICJgaW50YCI6ICIiLAorICAgICAgICAgICAgImBpb3RhYCI6ICIiLAorICAgICAgICAgICAgImBrYXBwYWAiOiAiIiwKKyAgICAgICAgICAgICJgTGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBsYW1iZGFgIjogIiIsCisgICAgICAgICAgICAiYGxBcnJgIjogIiIsCisgICAgICAgICAgICAiYGxhcnJgIjogIiIsCisgICAgICAgICAgICAiYGxpbV8oeC0mZ3Q7b28pYCI6ICIiLAorICAgICAgICAgICAgImBsb2dgIjogIiIsCisgICAgICAgICAgICAiYG11YCI6ICIiLAorICAgICAgICAgICAgImBOTmAiOiAiIiwKKyAgICAgICAgICAgICJgbm5gIjogIiIsCisgICAgICAgICAgICAiYG5vdGAiOiAiIiwKKyAgICAgICAgICAgICJgbnVgIjogIiIsCisgICAgICAgICAgICAiYG8rYCI6ICIiLAorICAgICAgICAgICAgImBvLmAiOiAiIiwKKyAgICAgICAgICAgICJgTy9gIjogIiIsCisgICAgICAgICAgICAiYG9pbnRgIjogIiIsCisgICAgICAgICAgICAiYG9tZWdhYCI6ICIiLAorICAgICAgICAgICAgImBPbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgb29gIjogIiIsCisgICAgICAgICAgICAiYG9yYCI6ICIiLAorICAgICAgICAgICAgImBveGAiOiAiIiwKKyAgICAgICAgICAgICJgcGhpYCI6ICIiLAorICAgICAgICAgICAgImBQaGlgIjogIiIsCisgICAgICAgICAgICAiYFBpYCI6ICIiLAorICAgICAgICAgICAgImBwaWAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvZGAiOiAiIiwKKyAgICAgICAgICAgICJgcHJvcGAiOiAiIiwKKyAgICAgICAgICAgICJgUHNpYCI6ICIiLAorICAgICAgICAgICAgImBwc2lgIjogIiIsCisgICAgICAgICAgICAiYFFRYCI6ICIiLAorICAgICAgICAgICAgImBxdWFkYCI6ICIiLAorICAgICAgICAgICAgImByQXJyYCI6ICIiLAorICAgICAgICAgICAgImByaG9gIjogIiIsCisgICAgICAgICAgICAiYHJvb3QobikoeClgIjogIiIsCisgICAgICAgICAgICAiYFJSYCI6ICIiLAorICAgICAgICAgICAgImBzZmFgIjogIiIsCisgICAgICAgICAgICAiYFNpZ21hYCI6ICIiLAorICAgICAgICAgICAgImBzaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgc3FydCh4KWAiOiAiIiwKKyAgICAgICAgICAgICJgc3F1YXJlYCI6ICIiLAorICAgICAgICAgICAgImBzdGFja3JlbCgtJmd0OykoKylgIjogIiIsCisgICAgICAgICAgICAiYHN1YmAiOiAiIiwKKyAgICAgICAgICAgICJgc3ViZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VtYCI6ICIiLAorICAgICAgICAgICAgImBzdXBgIjogIiIsCisgICAgICAgICAgICAiYHN1cGVgIjogIiIsCisgICAgICAgICAgICAiYHRhdWAiOiAiIiwKKyAgICAgICAgICAgICJgVGhldGFgIjogIiIsCisgICAgICAgICAgICAiYHRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImBUVGAiOiAiIiwKKyAgICAgICAgICAgICJgdHRhYCI6ICIiLAorICAgICAgICAgICAgImB1YXJyYCI6ICIiLAorICAgICAgICAgICAgImB1bGFgIjogIiIsCisgICAgICAgICAgICAiYHVwc2lsb25gIjogIiIsCisgICAgICAgICAgICAiYHV1YCI6ICIiLAorICAgICAgICAgICAgImB2ZWNhYCI6ICIiLAorICAgICAgICAgICAgImB2dmAiOiAiIiwKKyAgICAgICAgICAgICJgeF8obW4pYCI6ICIiLAorICAgICAgICAgICAgImBYaWAiOiAiIiwKKyAgICAgICAgICAgICJgeGlgIjogIiIsCisgICAgICAgICAgICAiYHh4YCI6ICIiLAorICAgICAgICAgICAgImB6ZXRhYCI6ICIiLAorICAgICAgICAgICAgImBaWmAiOiAiIiwKKyAgICAgICAgICAgICJgfC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImB8LS1gIjogIiIsCisgICAgICAgICAgICAiYHw9PWAiOiAiIiwKKyAgICAgICAgICAgICJgfF9fYCI6ICIiLAorICAgICAgICAgICAgImB8fmAiOiAiIiwKKyAgICAgICAgICAgICJgfj1gIjogIiIsCisgICAgICAgICAgICAiYH58YCI6ICIiLAorICAgICAgICAgICAgImB+fmAiOiAiIiwKKyAgICAgICAgICAgICJBQSI6ICIiLAorICAgICAgICAgICAgImFsZXBoIjogIiIsCisgICAgICAgICAgICAiYWxwaGEiOiAiIiwKKyAgICAgICAgICAgICJhbmQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGggRm9ybXVsYSBJbnB1dCI6ICIiLAorICAgICAgICAgICAgIkFzY2lpTWF0aE1MIEV4YW1wbGUiOiAiIiwKKyAgICAgICAgICAgICJiYXJhIjogIiIsCisgICAgICAgICAgICAiQmFzZWQgb24gQVNDSUlNYXRoTUwgYnkiOiAiIiwKKyAgICAgICAgICAgICJiYmEiOiAiIiwKKyAgICAgICAgICAgICJiYmJhIjogIiIsCisgICAgICAgICAgICAiYmV0YSI6ICIiLAorICAgICAgICAgICAgIkNDIjogIiIsCisgICAgICAgICAgICAiY2NhIjogIiIsCisgICAgICAgICAgICAiY2hpIjogIiIsCisgICAgICAgICAgICAiZGFyciI6ICIiLAorICAgICAgICAgICAgImRkb3RhIjogIiIsCisgICAgICAgICAgICAiZGVsIjogIiIsCisgICAgICAgICAgICAiZGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJEZWx0YSI6ICIiLAorICAgICAgICAgICAgImRpYW1vbmQiOiAiIiwKKyAgICAgICAgICAgICJkb3RhIjogIiIsCisgICAgICAgICAgICAiZHkvZHgiOiAiIiwKKyAgICAgICAgICAgICJFRSI6ICIiLAorICAgICAgICAgICAgImVwc2kiOiAiIiwKKyAgICAgICAgICAgICJldGEiOiAiIiwKKyAgICAgICAgICAgICJGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBBc2NpaU1hdGhNTCB2aXNpdCB0aGlzIHBhZ2U6IjogIiIsCisgICAgICAgICAgICAiRm9ybXVsYSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJmcmEiOiAiIiwKKyAgICAgICAgICAgICJnYW1tYSI6ICIiLAorICAgICAgICAgICAgIkdhbW1hIjogIiIsCisgICAgICAgICAgICAiZ3JhZCI6ICIiLAorICAgICAgICAgICAgImhBcnIiOiAiIiwKKyAgICAgICAgICAgICJoYXJyIjogIiIsCisgICAgICAgICAgICAiaGF0YSI6ICIiLAorICAgICAgICAgICAgImlmIjogIiIsCisgICAgICAgICAgICAiaW4iOiAiIiwKKyAgICAgICAgICAgICJJbnB1dCI6ICIiLAorICAgICAgICAgICAgImludCI6ICIiLAorICAgICAgICAgICAgImludF9hXmJmKHgpZHgiOiAiIiwKKyAgICAgICAgICAgICJpb3RhIjogIiIsCisgICAgICAgICAgICAia2FwcGEiOiAiIiwKKyAgICAgICAgICAgICJMYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsYW1iZGEiOiAiIiwKKyAgICAgICAgICAgICJsYXJyIjogIiIsCisgICAgICAgICAgICAibEFyciI6ICIiLAorICAgICAgICAgICAgImxpbV8oeC0mZ3Q7b28pIjogIiIsCisgICAgICAgICAgICAibXUiOiAiIiwKKyAgICAgICAgICAgICJOTiI6ICIiLAorICAgICAgICAgICAgIm5uIjogIiIsCisgICAgICAgICAgICAibm5uIjogIiIsCisgICAgICAgICAgICAibm90IjogIiIsCisgICAgICAgICAgICAibnUiOiAiIiwKKyAgICAgICAgICAgICJvKyI6ICIiLAorICAgICAgICAgICAgIm8uIjogIiIsCisgICAgICAgICAgICAiTy8iOiAiIiwKKyAgICAgICAgICAgICJvaW50IjogIiIsCisgICAgICAgICAgICAiT21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJvbWVnYSI6ICIiLAorICAgICAgICAgICAgIm9vIjogIiIsCisgICAgICAgICAgICAib3IiOiAiIiwKKyAgICAgICAgICAgICJveCI6ICIiLAorICAgICAgICAgICAgInBoaSI6ICIiLAorICAgICAgICAgICAgIlBoaSI6ICIiLAorICAgICAgICAgICAgInBpIjogIiIsCisgICAgICAgICAgICAiUGkiOiAiIiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIiIsCisgICAgICAgICAgICAicHJvZCI6ICIiLAorICAgICAgICAgICAgInByb3AiOiAiIiwKKyAgICAgICAgICAgICJwc2kiOiAiIiwKKyAgICAgICAgICAgICJQc2kiOiAiIiwKKyAgICAgICAgICAgICJRUSI6ICIiLAorICAgICAgICAgICAgInF1YWQiOiAiIiwKKyAgICAgICAgICAgICJyQXJyIjogIiIsCisgICAgICAgICAgICAicmhvIjogIiIsCisgICAgICAgICAgICAicm9vdChuKSh4KSI6ICIiLAorICAgICAgICAgICAgIlJSIjogIiIsCisgICAgICAgICAgICAic2ZhIjogIiIsCisgICAgICAgICAgICAic2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJTaWdtYSI6ICIiLAorICAgICAgICAgICAgInNxcnQoeCkiOiAiIiwKKyAgICAgICAgICAgICJzcXVhcmUiOiAiIiwKKyAgICAgICAgICAgICJzdGFja3JlbCgtJmd0OykoKykiOiAiIiwKKyAgICAgICAgICAgICJzdWIiOiAiIiwKKyAgICAgICAgICAgICJzdWJlIjogIiIsCisgICAgICAgICAgICAic3VtIjogIiIsCisgICAgICAgICAgICAic3VtXyhuPTEpXm9vIjogIiIsCisgICAgICAgICAgICAic3VwIjogIiIsCisgICAgICAgICAgICAic3VwZSI6ICIiLAorICAgICAgICAgICAgInRhdSI6ICIiLAorICAgICAgICAgICAgIlRoZXRhIjogIiIsCisgICAgICAgICAgICAidGhldGEiOiAiIiwKKyAgICAgICAgICAgICJUVCI6ICIiLAorICAgICAgICAgICAgInR0YSI6ICIiLAorICAgICAgICAgICAgInVhcnIiOiAiIiwKKyAgICAgICAgICAgICJ1bGEiOiAiIiwKKyAgICAgICAgICAgICJ1cHNpbG9uIjogIiIsCisgICAgICAgICAgICAidXUiOiAiIiwKKyAgICAgICAgICAgICJ1dXUiOiAiIiwKKyAgICAgICAgICAgICJ2ZWNhIjogIiIsCisgICAgICAgICAgICAidnYiOiAiIiwKKyAgICAgICAgICAgICJ2dnYiOiAiIiwKKyAgICAgICAgICAgICJ4XihtK24pIjogIiIsCisgICAgICAgICAgICAieF8obW4pIjogIiIsCisgICAgICAgICAgICAiWGkiOiAiIiwKKyAgICAgICAgICAgICJ4aSI6ICIiLAorICAgICAgICAgICAgInh4IjogIiIsCisgICAgICAgICAgICAiemV0YSI6ICIiLAorICAgICAgICAgICAgIlpaIjogIiIsCisgICAgICAgICAgICAifC0mZ3Q7IjogIiIsCisgICAgICAgICAgICAifC0tIjogIiIsCisgICAgICAgICAgICAifD09IjogIiIsCisgICAgICAgICAgICAifF9fIjogIiIsCisgICAgICAgICAgICAifH4iOiAiIiwKKyAgICAgICAgICAgICJ+PSI6ICIiLAorICAgICAgICAgICAgIn58IjogIiIsCisgICAgICAgICAgICAifn4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRmFuY3lTZWxlY3RzIjogeworICAgICAgICAgICAgIicrb3B0LnRleHQrJyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGaW5kUmVwbGFjZSI6IHsKKyAgICAgICAgICAgICInO1xyXG4gIHZhciB0YWdjID0gJyI6ICIiLAorICAgICAgICAgICAgIkNhc2Ugc2Vuc2l0aXZlIHNlYXJjaCI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIjogIiIsCisgICAgICAgICAgICAiRG9uZSI6ICIiLAorICAgICAgICAgICAgIkVudGVyIHRoZSB0ZXh0IHlvdSB3YW50IHRvIGZpbmQiOiAiIiwKKyAgICAgICAgICAgICJGaW5kIGFuZCBSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiZm91bmQgaXRlbSI6ICIiLAorICAgICAgICAgICAgImZvdW5kIGl0ZW1zIjogIiIsCisgICAgICAgICAgICAiSGlnaGxpZ2h0IjogIiIsCisgICAgICAgICAgICAiSW5mb3JtIGEgcmVwbGFjZW1lbnQgd29yZCI6ICIiLAorICAgICAgICAgICAgIk5leHQiOiAiIiwKKyAgICAgICAgICAgICJub3QgZm91bmQiOiAiIiwKKyAgICAgICAgICAgICJPcHRpb25zIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSB3aXRoOiI6ICIiLAorICAgICAgICAgICAgInJlcGxhY2VkIGl0ZW0iOiAiIiwKKyAgICAgICAgICAgICJyZXBsYWNlZCBpdGVtcyI6ICIiLAorICAgICAgICAgICAgIlNlYXJjaCBmb3I6IjogIiIsCisgICAgICAgICAgICAiU3Vic3RpdHV0ZSBhbGwgb2NjdXJyZW5jZXMiOiAiIiwKKyAgICAgICAgICAgICJTdWJzdGl0dXRlIHRoaXMgb2NjdXJyZW5jZT8iOiAiIiwKKyAgICAgICAgICAgICJVbmRvIjogIiIsCisgICAgICAgICAgICAiV2hvbGUgd29yZHMgb25seSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGb3JtT3BlcmF0aW9ucyI6IHsKKyAgICAgICAgICAgICJFbnRlciB0aGUgbmFtZSBmb3IgbmV3IG9wdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIGNoZWNrIGJveC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBGb3JtLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG11bHRpLWxpbmUgdGV4dCBmaWVsZC4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSByYWRpbyBidXR0b24uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgc2VsZWN0IGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHN1Ym1pdC9yZXNldCBidXR0b24uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgdGV4dCwgcGFzc3dvcmQgb3IgaGlkZGVuIGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIk1lc3NhZ2UgU2VudCI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBTZWxlY3QuLi4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiRm9ybXMiOiB7CisgICAgICAgICAgICAiJ29uQ2xpY2snPSI6ICIiLAorICAgICAgICAgICAgIkFjY2VzcyBLZXk6IjogIiIsCisgICAgICAgICAgICAiQWN0aW9uIFVSTDoiOiAiIiwKKyAgICAgICAgICAgICJCdXR0b24gU2NyaXB0IjogIiIsCisgICAgICAgICAgICAiQ2hlY2tlZCI6ICIiLAorICAgICAgICAgICAgIkNvbHVtbnM6IjogIiIsCisgICAgICAgICAgICAiRGVmYXVsdCB0ZXh0IChvcHRpb25hbCkiOiAiIiwKKyAgICAgICAgICAgICJEaW1lbnNpb25zIjogIiIsCisgICAgICAgICAgICAiRGlzYWJsZWQiOiAiIiwKKyAgICAgICAgICAgICJFbmNvZGluZzoiOiAiIiwKKyAgICAgICAgICAgICJGb3IgQ29udHJvbDoiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBGSUVMRFNFVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IExBQkVMIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBTRUxFQ1QiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiRm9ybSBoYW5kbGVyIHNjcmlwdCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJHZXQiOiAiIiwKKyAgICAgICAgICAgICJIYXJkIjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0IGluIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiSFRNTC1Gb3JtIHRvIENHSSAoZGVmYXVsdCkiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBzb3VyY2UiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBVUkw6IjogIiIsCisgICAgICAgICAgICAiSW5pdGlhbCBUZXh0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgRklFTERTRVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgSU5QVVQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgU0VMRUNUIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFRFWFRBUkVBIjogIiIsCisgICAgICAgICAgICAiSmF2YXNjcmlwdCBmb3IgYnV0dG9uIGNsaWNrIjogIiIsCisgICAgICAgICAgICAiTGFiZWw6IjogIiIsCisgICAgICAgICAgICAiTGVnZW5kOiI6ICIiLAorICAgICAgICAgICAgIk1heCBsZW5ndGg6IjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY2NlcHRlZCI6ICIiLAorICAgICAgICAgICAgIk1ldGhvZDoiOiAiIiwKKyAgICAgICAgICAgICJtdWx0aXBhcnQgRm9ybSBEYXRhIChGaWxlLVVwbG9hZCkiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICAgICAgICAgIk5hbWUgb2YgdGhlIGZvcm0gc2VsZWN0IjogIiIsCisgICAgICAgICAgICAibmFtZSBvZiB0aGUgdGV4dGFyZWEiOiAiIiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICIiLAorICAgICAgICAgICAgIm5vcm1hbCI6ICIiLAorICAgICAgICAgICAgIm5vd3JhcCI6ICIiLAorICAgICAgICAgICAgIk9mZiI6ICIiLAorICAgICAgICAgICAgIlBoeXNpY2FsIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIGEgTGFiZWwiOiAiIiwKKyAgICAgICAgICAgICJQb3N0IjogIiIsCisgICAgICAgICAgICAicHJlIjogIiIsCisgICAgICAgICAgICAiUmVhZCBPbmx5IjogIiIsCisgICAgICAgICAgICAiUm93czoiOiAiIiwKKyAgICAgICAgICAgICJTaXplIG9mIHRleHQgYm94IGluIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJTaXplOiI6ICIiLAorICAgICAgICAgICAgIlNvZnQiOiAiIiwKKyAgICAgICAgICAgICJUYWIgSW5kZXg6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IEZyYW1lOiI6ICIiLAorICAgICAgICAgICAgIlRleHQ6IjogIiIsCisgICAgICAgICAgICAiVVJMIG9mIGltYWdlIjogIiIsCisgICAgICAgICAgICAiVmFsdWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZToiOiAiIiwKKyAgICAgICAgICAgICJWaXJ0dWFsIjogIiIsCisgICAgICAgICAgICAiV2lkdGggaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMiOiAiIiwKKyAgICAgICAgICAgICJXcmFwIE1vZGU6IjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBOYW1lIjogIiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iCisgICAgICAgIH0sCisgICAgICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgICAgICIuLi4iOiAiIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgc3R5bGUtc2hlZXQ6IjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZCBjb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJDaGFyYWN0ZXIgc2V0OiI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChJU08tODg1OS01KSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChLT0k4LVIpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKFdJTkRPV1MtMTI1MSkiOiAiIiwKKyAgICAgICAgICAgICJEZXNjcmlwdGlvbjoiOiAiIiwKKyAgICAgICAgICAgICJET0NUWVBFOiI6ICIiLAorICAgICAgICAgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCB0aXRsZToiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkczoiOiAiIiwKKyAgICAgICAgICAgICJQcmltYXJ5IHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIlRleHQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiVVRGLTggKHJlY29tbWVuZGVkKSI6ICIiLAorICAgICAgICAgICAgIndlc3Rlcm4gKElTTy04ODU5LTEpIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bGxTY3JlZW4iOiB7CisgICAgICAgICAgICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkdlY2tvIjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJIb3Jpem9udGFsUnVsZSI6IHsKKyAgICAgICAgICAgICImI3gwMGQ3OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiIiwKKyAgICAgICAgICAgICJDZW50ZXIiOiAiIiwKKyAgICAgICAgICAgICJDb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L2VkaXQgaG9yaXpvbnRhbCBydWxlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgSG9yaXpvbnRhbCBSdWxlIjogIiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIiIsCisgICAgICAgICAgICAiTGVmdCI6ICIiLAorICAgICAgICAgICAgIk5vIHNoYWRpbmciOiAiIiwKKyAgICAgICAgICAgICJwZXJjZW50IjogIiIsCisgICAgICAgICAgICAicGl4ZWxzIjogIiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSI6ICIiLAorICAgICAgICAgICAgIldpZHRoOiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbmxpbmVTdHlsZXIiOiB7CisgICAgICAgICAgICAiQmFja2dyb3VuZCI6ICIiLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIiIsCisgICAgICAgICAgICAiQm90dG9tIjogIiIsCisgICAgICAgICAgICAiQ2hhciI6ICIiLAorICAgICAgICAgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIiIsCisgICAgICAgICAgICAiQ1NTIFN0eWxlIjogIiIsCisgICAgICAgICAgICAiRkcgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJGbG9hdCI6ICIiLAorICAgICAgICAgICAgIkp1c3RpZnkiOiAiIiwKKyAgICAgICAgICAgICJNYXJnaW4iOiAiIiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiIiwKKyAgICAgICAgICAgICJOb25lIjogIiIsCisgICAgICAgICAgICAiUGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIlRleHQgYWxpZ24iOiAiIiwKKyAgICAgICAgICAgICJUb3AiOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICIiLAorICAgICAgICAgICAgIi0iOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJDZW50ZXIiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBVUkwiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJMYXlvdXQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAicGVyY2VudCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgInBpeGVscyI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiV2lkdGgiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0QW5jaG9yIjogeworICAgICAgICAgICAgIkFuY2hvciBuYW1lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IEFuY2hvciI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICAgICAiQWJzYm90dG9tIjogIiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiIiwKKyAgICAgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICIiLAorICAgICAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIkhvcml6b250YWw6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICIiLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJTcGFjaW5nIjogIiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICIiLAorICAgICAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbDoiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBVUkw6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiTGF5b3V0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJUb3AiOiAiPDxJbmxpbmVTdHlsZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydE5vdGUiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGZvb3Rub3RlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IE5vdGUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGFnZWJyZWFrIjogeworICAgICAgICAgICAgIlBhZ2UgYnJlYWsiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIEJyZWFrIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNtaWxleSI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgU21pbGV5IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFNuaXBwZXQiOiB7CisgICAgICAgICAgICAiXFxuICBUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZ1xcbiI6ICIiLAorICAgICAgICAgICAgIkhpZGUgcHJldmlldyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMSI6ICIiLAorICAgICAgICAgICAgIkxpbmsyIjogIiIsCisgICAgICAgICAgICAiTGluazMiOiAiIiwKKyAgICAgICAgICAgICJMaW5rNCI6ICIiLAorICAgICAgICAgICAgIkxpbms1IjogIiIsCisgICAgICAgICAgICAiU2hvdyBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmciOiAiIiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgICAgICJBbGwgQ2F0ZWdvcmllcyI6ICIiLAorICAgICAgICAgICAgIkZpbHRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyBIVE1MIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIHRlbXBsYXRlIHZhcmlhYmxlIjogIiIsCisgICAgICAgICAgICAiT25seSBzZWFyY2ggd29yZCBiZWdpbm5pbmciOiAiIiwKKyAgICAgICAgICAgICJIVE1MIjogIjw8Q2hhckNvdW50ZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iLAorICAgICAgICAgICAgIkluc2VydFNuaXBwZXQgZm9yIFhpbmhhIjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJWYXJpYWJsZSI6ICI8PEluc2VydFNuaXBwZXQ+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAgICAgIkNhcHRpb24iOiAiIiwKKyAgICAgICAgICAgICJDYXB0aW9uIGZvciB0aGUgdGFibGUiOiAiIiwKKyAgICAgICAgICAgICJDZWxsIHBhZGRpbmc6IjogIiIsCisgICAgICAgICAgICAiQ2VsbCBzcGFjaW5nOiI6ICIiLAorICAgICAgICAgICAgIkNvbGxhcHNlIGJvcmRlcnM6IjogIiIsCisgICAgICAgICAgICAiQ29sczoiOiAiIiwKKyAgICAgICAgICAgICJFbSI6ICIiLAorICAgICAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJMYXlvdSI6ICIiLAorICAgICAgICAgICAgIk51bWJlciBvZiBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICIiLAorICAgICAgICAgICAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAiIiwKKyAgICAgICAgICAgICJTdHlsZSBvZiB0aGUgYm9yZGVyIjogIiIsCisgICAgICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiV2lkdGggdW5pdCI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvcmRlciI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJMYXlvdXQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1pZGRsZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUGVyY2VudCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlBpeGVscyI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUm93czoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTcGFjaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRvcCI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiTGFuZ01hcmtzIjogeworICAgICAgICAgICAgIiZtZGFzaDsgbGFuZ3VhZ2UgJm1kYXNoOyI6ICIiLAorICAgICAgICAgICAgIicsICciOiAiIiwKKyAgICAgICAgICAgICJFbmdsaXNoIjogIiIsCisgICAgICAgICAgICAiRnJlbmNoIjogIiIsCisgICAgICAgICAgICAiR3JlZWsiOiAiIiwKKyAgICAgICAgICAgICJsYW5ndWFnZSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJMYXRpbiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJMaW5rZXIiOiB7CisgICAgICAgICAgICAiKHB4KSI6ICIiLAorICAgICAgICAgICAgIkFuY2hvci1MaW5rIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yOiI6ICIiLAorICAgICAgICAgICAgIkVtYWlsIEFkZHJlc3M6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgTGluayI6ICIiLAorICAgICAgICAgICAgIkxvY2F0aW9uIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZW51IEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJNZXNzYWdlIFRlbXBsYXRlOiI6ICIiLAorICAgICAgICAgICAgIk5ldyBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcmRpbmFyeSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUG9wdXAgV2luZG93IjogIiIsCisgICAgICAgICAgICAiUG9wdXBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgTGluayI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZWFibGU6IjogIiIsCisgICAgICAgICAgICAiU2FtZSBXaW5kb3cgKGp1bXAgb3V0IG9mIGZyYW1lcykiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGxiYXJzOiI6ICIiLAorICAgICAgICAgICAgIlNob3dzIE9uIEhvdmVyIjogIiIsCisgICAgICAgICAgICAiU3RhdHVzIEJhcjoiOiAiIiwKKyAgICAgICAgICAgICJTdWJqZWN0OiI6ICIiLAorICAgICAgICAgICAgIlRpdGxlOiI6ICIiLAorICAgICAgICAgICAgIlRvb2xiYXI6IjogIiIsCisgICAgICAgICAgICAiVVJMIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiIiwKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIk5hbWU6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiU2l6ZToiOiAiPDxGb3Jtcz4+IgorICAgICAgICB9LAorICAgICAgICAiTGlzdFR5cGUiOiB7CisgICAgICAgICAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogIiIsCisgICAgICAgICAgICAiRGVjaW1hbCBudW1iZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgZ3JlZWsgbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIGxhdGluIGxldHRlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciByb21hbiBudW1iZXJzIjogIiIsCisgICAgICAgICAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIlVwcGVyIHJvbWFuIG51bWJlcnMiOiAiIgorICAgICAgICB9LAorICAgICAgICAiTW9vdG9vbHNGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJPcGVyYSI6IHsKKyAgICAgICAgICAgICJNQVJLIjogIiIsCisgICAgICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJQYXN0ZVRleHQiOiB7CisgICAgICAgICAgICAiSW5zZXJ0IHRleHQgaW4gbmV3IHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIlBhc3RlIGFzIFBsYWluIFRleHQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUHJlc2VydmVTY3JpcHRzIjogeworICAgICAgICAgICAgIkphdmFTY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJQSFAiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUXVpY2tUYWciOiB7CisgICAgICAgICAgICAiJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsJzogJyI6ICIiLAorICAgICAgICAgICAgIkFUVFJJQlVURVMiOiAiIiwKKyAgICAgICAgICAgICJDb2xvcnMiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgVEFHIHlvdSB3YW50IHRvIGluc2VydCI6ICIiLAorICAgICAgICAgICAgIk5vIENTUyBjbGFzcyBhdmFpYWJsZSI6ICIiLAorICAgICAgICAgICAgIk9rIjogIiIsCisgICAgICAgICAgICAiT1BUSU9OUyI6ICIiLAorICAgICAgICAgICAgIlF1aWNrIFRhZyBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJUQUdzIjogIiIsCisgICAgICAgICAgICAiVGhlcmUgYXJlIHNvbWUgdW5jbG9zZWQgcXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIGF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgVEFHIjogIiIsCisgICAgICAgICAgICAiWW91IGhhdmUgdG8gc2VsZWN0IHNvbWUgdGV4dCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTYXZlU3VibWl0IjogeworICAgICAgICAgICAgImluIHByb2dyZXNzIjogIiIsCisgICAgICAgICAgICAiUmVhZHkiOiAiIiwKKyAgICAgICAgICAgICJTYXZlIjogIiIsCisgICAgICAgICAgICAiU2F2aW5nLi4uIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlNldElkIjogeworICAgICAgICAgICAgIklEL05hbWU6IjogIiIsCisgICAgICAgICAgICAiU2V0IElkIGFuZCBOYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElkL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJTZXQgSUQvTmFtZSI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiU21hcnRSZXBsYWNlIjogeworICAgICAgICAgICAgIkNsb3NpbmdEb3VibGVRdW90ZXMiOiAiIiwKKyAgICAgICAgICAgICJDbG9zaW5nU2luZ2xlUXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJDb252ZXJ0IGFsbCBxdW90ZXMgYW5kIGRhc2hlcyBpbiB0aGUgY3VycmVudCBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBhdXRvbWF0aWMgcmVwbGFjZW1lbnRzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIk9wZW5pbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIlNtYXJ0UmVwbGFjZSI6ICIiLAorICAgICAgICAgICAgIlNtYXJ0UmVwbGFjZSBTZXR0aW5ncyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTdHlsaXN0IjogeworICAgICAgICAgICAgIlN0eWxlcyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTdXBlckNsZWFuIjogeworICAgICAgICAgICAgIkNsZWFuIGJhZCBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQuIjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gU2VsZWN0aW9uIE9ubHkiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiB1cCBIVE1MIjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgU2NvcGUiOiAiIiwKKyAgICAgICAgICAgICJHZW5lcmFsIHRpZHkgdXAgYW5kIGNvcnJlY3Rpb24gb2Ygc29tZSBwcm9ibGVtcy4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc2VsZWN0IGZyb20gdGhlIGZvbGxvd2luZyBjbGVhbmluZyBvcHRpb25zLi4uIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHN0YW5kIGJ5IHdoaWxlIGNsZWFuaW5nIGluIHByb2Nlc3MuLi4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgYWxpZ25tZW50IChsZWZ0L3JpZ2h0L2p1c3RpZnkpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgY2xhc3NlcyAoQ1NTKS4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgQWxsIEhUTUwgVGFncyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGwgc3R5bGVzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gZm9udCBzaXplcy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgY3VzdG9tIHRleHQgY29sb3JzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdHlwZWZhY2VzIChmb250IFwic3R5bGVzXCIpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBlbXBoYXNpcyBhbmQgYW5ub3RhdGlvbnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGxhbmcgYXR0cmlidXRlcy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgUGFyYWdyYXBocyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMuIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSBkaXJlY3Rpb25hbCBxdW90ZSBtYXJrcyB3aXRoIG5vbi1kaXJlY3Rpb25hbCBxdW90ZSBtYXJrcy4iOiAiIiwKKyAgICAgICAgICAgICJWaWdvcm91c2x5IHB1cmdlIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAgICAgIkFsbCBmb3VyIHNpZGVzIjogIiIsCisgICAgICAgICAgICAiQm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkNlbGwgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIkNlbGwgUHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIkNlbGwgVHlwZToiOiAiIiwKKyAgICAgICAgICAgICJDZWxscyBkb3duIjogIiIsCisgICAgICAgICAgICAiQ2VsbHMgdG8gdGhlIHJpZ2h0LCBhbmQiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgY2VsbCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgcm93IjogIiIsCisgICAgICAgICAgICAiRG8gTm90IENoYW5nZSI6ICIiLAorICAgICAgICAgICAgIkZyYW1lIGFuZCBib3JkZXJzIjogIiIsCisgICAgICAgICAgICAiRnJhbWVzIjogIiIsCisgICAgICAgICAgICAiSGVhZGVyICh0aCkiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY2VsbCBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY29sdW1uIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCByb3cgYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcm93IGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIGNlbGxzIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY3VycmVudCBjZWxsIHdpdGg6IjogIiIsCisgICAgICAgICAgICAiTm8gcnVsZXMiOiAiIiwKKyAgICAgICAgICAgICJObyBzaWRlcyI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCAodGQpIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNsaWNrIGludG8gc29tZSBjZWxsIjogIiIsCisgICAgICAgICAgICAiUm93IHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJSb3cgUHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGNvbHVtbnMgb25seSI6ICIiLAorICAgICAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogIiIsCisgICAgICAgICAgICAiU3BhY2luZyBhbmQgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IHJvdyI6ICIiLAorICAgICAgICAgICAgIlN1bW1hcnkiOiAiIiwKKyAgICAgICAgICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiVGFibGUgUHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlRoZSBib3R0b20gc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIGxlZnQtaGFuZCBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSByaWdodC1oYW5kIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSB0b3AgYW5kIGJvdHRvbSBzaWRlcyBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHRvcCBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjb2x1bW4gaW4gdGFibGUuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3Qgcm93IGluIHRhYmxlLiI6ICIiLAorICAgICAgICAgICAgIkNhcHRpb24iOiAiPDxJbnNlcnRUYWJsZT4+IiwKKyAgICAgICAgICAgICJDb2x1bW5zIjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiRGVzY3JpcHRpb24iOiAiPDxGdWxsUGFnZT4+IiwKKyAgICAgICAgICAgICJNZXJnZSBDZWxscyI6ICI8PENvbnRleHRNZW51Pj4iLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAicGl4ZWxzIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUm93cyI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNwYWNpbmciOiAiPDxJbnNlcnRJbWFnZT4+IgorICAgICAgICB9LAorICAgICAgICAiVW5zYXZlZENoYW5nZXMiOiB7CisgICAgICAgICAgICAiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBlZGl0b3IiOiAiIgorICAgICAgICB9LAorICAgICAgICAiV2ViS2l0IjogeworICAgICAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiB0aGlzIGJyb3dzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICI8PEdlY2tvPj4iCisgICAgICAgIH0sCisgICAgICAgICJYaW5oYSI6IHsKKyAgICAgICAgICAgICImIzgyMTI7IGZvbnQgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICImIzgyMTI7IHNpemUgJiM4MjEyOyI6ICIiLAorICAgICAgICAgICAgIjEgKDggcHQpIjogIiIsCisgICAgICAgICAgICAiMiAoMTAgcHQpIjogIiIsCisgICAgICAgICAgICAiMyAoMTIgcHQpIjogIiIsCisgICAgICAgICAgICAiNCAoMTQgcHQpIjogIiIsCisgICAgICAgICAgICAiNSAoMTggcHQpIjogIiIsCisgICAgICAgICAgICAiNiAoMjQgcHQpIjogIiIsCisgICAgICAgICAgICAiNyAoMzYgcHQpIjogIiIsCisgICAgICAgICAgICAiQWRkcmVzcyI6ICIiLAorICAgICAgICAgICAgIkFyaWFsIjogIiIsCisgICAgICAgICAgICAiQ2xlYW4gY29udGVudCBwYXN0ZWQgZnJvbSBXb3JkIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJDbGVhciBNU09mZmljZSB0YWdzIjogIiIsCisgICAgICAgICAgICAiQ2xvc2UiOiAiIiwKKyAgICAgICAgICAgICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIiIsCisgICAgICAgICAgICAiQ291cmllciBOZXciOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgU3RhdHVzYmFyIjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFRvb2xiYXIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTAgKHplcm8pIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0xIC4uIENUUkwtNiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtRSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtVSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtViI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWiI6ICIiLAorICAgICAgICAgICAgIkVkaXRvciBIZWxwIjogIiIsCisgICAgICAgICAgICAiRU5URVIiOiAiIiwKKyAgICAgICAgICAgICJFcnJvciBMb2FkaW5nIFhpbmhhLiAgRGV2ZWxvcGVycywgY2hlY2sgdGhlIEVycm9yIENvbnNvbGUgZm9yIGluZm9ybWF0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGluZyI6ICIiLAorICAgICAgICAgICAgIkZvcm1hdHRlZCI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYXRlIFhpbmhhIGZyYW1ld29yayI6ICIiLAorICAgICAgICAgICAgIkdlb3JnaWEiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDEiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDIiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDMiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDQiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDUiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5nIDYiOiAiIiwKKyAgICAgICAgICAgICJIZWFkaW5ncyI6ICIiLAorICAgICAgICAgICAgIkltcGFjdCI6ICIiLAorICAgICAgICAgICAgIkluaXQgZWRpdG9yIHNpemUiOiAiIiwKKyAgICAgICAgICAgICJpbnNlcnQgbGluZWJyZWFrIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICIiLAorICAgICAgICAgICAgIktleWJvYXJkIHNob3J0Y3V0cyI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgQ29yZSI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ISI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJMb2FkaW5nIHBsdWdpbnMiOiAiIiwKKyAgICAgICAgICAgICJNUyBXb3JkIENsZWFuZXIiOiAiIiwKKyAgICAgICAgICAgICJuZXcgcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiTm9ybWFsIjogIiIsCisgICAgICAgICAgICAiUHJpbnQgZG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJSZWdpc3RlciBwbHVnaW4gJHBsdWdpbiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBhcyI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCBhbGwiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICIiLAorICAgICAgICAgICAgIlNISUZULUVOVEVSIjogIiIsCisgICAgICAgICAgICAiU3BsaXQgQmxvY2siOiAiIiwKKyAgICAgICAgICAgICJUYWhvbWEiOiAiIiwKKyAgICAgICAgICAgICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAiIiwKKyAgICAgICAgICAgICJUaW1lcyBOZXcgUm9tYW4iOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgQm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIlRvdWNoIGhlcmUgZmlyc3QgdG8gYWN0aXZhdGUgZWRpdG9yLiI6ICIiLAorICAgICAgICAgICAgIlZlcmRhbmEiOiAiIiwKKyAgICAgICAgICAgICJXYWl0aW5nIGZvciBJZnJhbWUgdG8gbG9hZC4uLiI6ICIiLAorICAgICAgICAgICAgIldpbmdEaW5ncyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJSZW1vdmUgQ3VycmVudCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IEJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJTZXQgcGFnZSBiYWNrZ3JvdW5kIGltYWdlIjogIiIsCisgICAgICAgICAgICAiU2V0IFBhZ2UgQmFja2dyb3VuZCBJbWFnZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDbGllbnRzaWRlU3BlbGxjaGVjayI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIENMSUVOVFNJREVTUEVMTENIRUNLIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIlNwZWxsIENoZWNrIHVzaW5nIGllU3BlbGwiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRXh0ZW5kZWRGaWxlTWFuYWdlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTAlIjogIiIsCisgICAgICAgICAgICAiMTAwJSI6ICIiLAorICAgICAgICAgICAgIjIwMCUiOiAiIiwKKyAgICAgICAgICAgICIyNSUiOiAiIiwKKyAgICAgICAgICAgICI1MCUiOiAiIiwKKyAgICAgICAgICAgICI3NSUiOiAiIiwKKyAgICAgICAgICAgICI+TGlzdCBWaWV3IjogIiIsCisgICAgICAgICAgICAiPlRodW1ibmFpbCBWaWV3IjogIiIsCisgICAgICAgICAgICAiQToiOiAiIiwKKyAgICAgICAgICAgICJBbGlnbiI6ICIiLAorICAgICAgICAgICAgIkFsdCI6ICIiLAorICAgICAgICAgICAgIkJvcmRlciBDb2xvciI6ICIiLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICIiLAorICAgICAgICAgICAgIkNyb3AiOiAiIiwKKyAgICAgICAgICAgICJEOiI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdG9yeSBVcCI6ICIiLAorICAgICAgICAgICAgIkVkaXQiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiIiwKKyAgICAgICAgICAgICJGaWxlIE1hbmFnZXIiOiAiIiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiIiwKKyAgICAgICAgICAgICJGaWxlc2l6ZToiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIEhvcml6b250YWwiOiAiIiwKKyAgICAgICAgICAgICJGbGlwIEltYWdlIjogIiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICIiLAorICAgICAgICAgICAgIkZvbGRlciI6ICIiLAorICAgICAgICAgICAgIkdJRiI6ICIiLAorICAgICAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICIiLAorICAgICAgICAgICAgIkg6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgU2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiIiwKKyAgICAgICAgICAgICJKUEVHIEhpZ2giOiAiIiwKKyAgICAgICAgICAgICJKUEVHIExvdyI6ICIiLAorICAgICAgICAgICAgIkpQRUcgTWVkaXVtIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyI6ICIiLAorICAgICAgICAgICAgIkxvY2siOiAiIiwKKyAgICAgICAgICAgICJNYXJrZXIiOiAiIiwKKyAgICAgICAgICAgICJNYXhpbXVtIGZvbGRlciBzaXplIGxpbWl0IHJlYWNoZWQuIFVwbG9hZCBkaXNhYmxlZC4iOiAiIiwKKyAgICAgICAgICAgICJNZWFzdXJlIjogIiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICIiLAorICAgICAgICAgICAgIk5vIEZpbGVzIEZvdW5kIjogIiIsCisgICAgICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHZhbHVlIjogIiIsCisgICAgICAgICAgICAiUE5HIjogIiIsCisgICAgICAgICAgICAiUHJlc2V0IjogIiIsCisgICAgICAgICAgICAiUXVhbGl0eToiOiAiIiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIiIsCisgICAgICAgICAgICAiUmVuYW1lIjogIiIsCisgICAgICAgICAgICAiUmVzaXplIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJTdGFydCBYOiI6ICIiLAorICAgICAgICAgICAgIlN0YXJ0IFk6IjogIiIsCisgICAgICAgICAgICAiVGFyZ2V0IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlRvZ2dsZSBtYXJrZXIgY29sb3IiOiAiIiwKKyAgICAgICAgICAgICJUcmFzaCI6ICIiLAorICAgICAgICAgICAgIlVwbG9hZCI6ICIiLAorICAgICAgICAgICAgIlc6IjogIiIsCisgICAgICAgICAgICAiWDoiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJZOiI6ICIiLAorICAgICAgICAgICAgIlpvb20iOiAiIiwKKyAgICAgICAgICAgICJBYnNib3R0b20iOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJBYnNtaWRkbGUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3JkZXIiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNsZWFyIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiQ29sb3IiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJDb3B5IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiQ3V0IjogIjw8Q29udGV4dE1lbnU+PiIsCisgICAgICAgICAgICAiSGVpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiPDxNb290b29sc0ZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJNYXJnaW4iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQYWRkaW5nIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIldpZHRoIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJGaWx0ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsdGVyIjogIjw8SW5zZXJ0U25pcHBldDI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkh0bWxUaWR5IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQXV0by1UaWR5IjogIiIsCisgICAgICAgICAgICAiRG9uJ3QgVGlkeSI6ICIiLAorICAgICAgICAgICAgIkhUTUwgVGlkeSI6ICIiLAorICAgICAgICAgICAgIlRpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQW5nbGU6IjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlcyI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgVXNlcm5hbWUvRW1haWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIgTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFBob3RvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFZpZGVvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgU2VydmVyIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFVzZXJuYW1lIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlbyBMaXN0IjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlb3MiOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNsZWFyIjogIjw8RmluZFJlcGxhY2U+PiIsCisgICAgICAgICAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJDcm9wIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkVkaXQiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGVuYW1lOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIEltYWdlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGbGlwIFZlcnRpY2FsIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJJbWFnZSBFZGl0b3IiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgSGlnaCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgTWVkaXVtIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTG9jayI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWFya2VyIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJNZWFzdXJlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJOb3Qgc2V0IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUE5HIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUXVhbGl0eToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJlZnJlc2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJlc2l6ZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSb3RhdGUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUm90YXRlIEltYWdlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJTYXZlIjogIjw8U2F2ZVN1Ym1pdD4+IiwKKyAgICAgICAgICAgICJTdGFydCBYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU3RhcnQgWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlRleHR0b3AiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUb3AiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiVHJhc2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlc6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJYOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiWToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRNYXJxdWVlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUTUFSUVVFRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUiOiAiIiwKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kLUNvbG9yOiI6ICIiLAorICAgICAgICAgICAgIkJlaGF2aW9yOiI6ICIiLAorICAgICAgICAgICAgIkNvbnRpbnVvdXMiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3Rpb246IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHNjcm9sbGluZyBtYXJxdWVlIjogIiIsCisgICAgICAgICAgICAiTWFycXVlZSBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgQW1vdW50OiI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbCBEZWxheToiOiAiIiwKKyAgICAgICAgICAgICJTbGlkZSI6ICIiLAorICAgICAgICAgICAgIlNwZWVkIENvbnRyb2wiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk5hbWUiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJOYW1lL0lEOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiVGV4dDoiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0UGljdHVyZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVFBJQ1RVUkUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vdCBkZWZpbmVkIjogIiIsCisgICAgICAgICAgICAiT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICIgT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJVcGxvYWQgZmlsZSI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkxheW91dCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiU2l6ZSI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNwYWNpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJWZXJ0aWNhbDoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiTm90ZVNlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTIwJSI6ICIiLAorICAgICAgICAgICAgIjE1MCUiOiAiIiwKKyAgICAgICAgICAgICI4MCUiOiAiIiwKKyAgICAgICAgICAgICJBZGQgR1VJRE8gQ29kZSBpbiBhIHRleHRib3ggb24gdGhlIHBhZ2UiOiAiIiwKKyAgICAgICAgICAgICJBZGQgTUlESSBsaW5rIHRvIGFsbG93IHN0dWRlbnRzIHRvIGhlYXIgdGhlIG11c2ljIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiR1VJRE8gQ29kZSI6ICIiLAorICAgICAgICAgICAgIkd1aWRvIGNvZGUiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBpbiBhcHBsZXQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgR1VJRE8gTXVzaWMgTm90YXRpb24iOiAiIiwKKyAgICAgICAgICAgICJNSURJIEZpbGUiOiAiIiwKKyAgICAgICAgICAgICJTb3VyY2UgQ29kZSI6ICIiLAorICAgICAgICAgICAgIldpdGggTW96aWxsYSwgdGhlIGFwcGxldCB3aWxsIG5vdCBiZSB2aXNpYmxlIGluIGVkaXRvciwgYnV0IG9ubHkgaW4gV2ViIHBhZ2UgYWZ0ZXIgc3VibWl0dGluZy4iOiAiIiwKKyAgICAgICAgICAgICJab29tIDoiOiAiIiwKKyAgICAgICAgICAgICIxMDAlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBQcmV2aWV3IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJab29tIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiUFNMb2NhbCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQ29uZmlybSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSI6ICIiLAorICAgICAgICAgICAgIkVuYWJsZSBHZWFycyBpbiBvcmRlciB0byB1c2UgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZSBhbmQgY29uZmlndXJhdGlvbi4iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGluZyBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiSW5zdGFsbCI6ICIiLAorICAgICAgICAgICAgIkxlYXJuIEFib3V0IExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgcmVsb2FkIHRoZSBwYWdlLCBjYXVzaW5nIHlvdSB0byBsb3NlIGFueSB1bnNhdmVkIHdvcmsuICBQcmVzcyBcIk9LXCIgdG8gcmVsb2FkLiI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIHVzZXMgR29vZ2xlIEdlYXJzIHRvIGVuYWJsZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlLiAgV2l0aCBHZWFycyBpbnN0YWxsZWQsIHlvdSBjYW4gc2F2ZSBkcmFmdHMgb2YgeW91ciBkb2N1bWVudHMgb24geW91ciBoYXJkIGRyaXZlLCBjb25maWd1cmUgWGluaGEgdG8gbG9vayB0aGUgd2F5IHlvdSB3YW50LCBhbmQgY2FycnkgdGhpcyBpbmZvcm1hdGlvbiB3aGVyZXZlciB5b3UgdXNlIFhpbmhhIG9uIHRoZSB3ZWIuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTU2VydmVyIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsZTogIjogIiIsCisgICAgICAgICAgICAiSW1wb3J0IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBlcnNpc3RlbnRTdG9yYWdlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGV0YWlscyI6ICIiLAorICAgICAgICAgICAgIkZpbGUgQnJvd3NlciI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICAgIFRoZXJlIEMgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gIFRoZXJlIEEgIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gXCIgVGhlcmUgQiBcIiI6ICIiLAorICAgICAgICAgICAgIkhlbGxvICcgVGhlcmUgRCAnIjogIiIsCisgICAgICAgICAgICAiTGlzdCBvZiBQbGFjZXMiOiAiIiwKKyAgICAgICAgICAgICJOZXcgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJPcGVuIjogIiIsCisgICAgICAgICAgICAiT3BlbiBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHlvdSdkIGxpa2UgdG8gY3JlYXRlLiI6ICIiLAorICAgICAgICAgICAgIlNhdmUgRG9jdW1lbnQiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIHdpbGwgZXJhc2UgYW55IHVuc2F2ZWQgY29udGVudC4gIElmIHlvdSdyZSBjZXJ0YWluLCBwbGVhc2UgY2xpY2sgT0sgdG8gY29udGludWUuIjogIiIsCisgICAgICAgICAgICAiV2ViIFVSTCI6ICIiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiPDxQU0xvY2FsPj4iLAorICAgICAgICAgICAgIkNvcHkiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTWFuYWdlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZW5hbWUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCI6ICI8PEluc2VydE5vdGU+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBTUEVMTENIRUNLRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGljdGlvbmFyeSI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGVkIGxpc3Qgb2YgbWlzcGVsbGVkIHdvcmRzIjogIiIsCisgICAgICAgICAgICAiSFRNTEFyZWEgU3BlbGwgQ2hlY2tlciI6ICIiLAorICAgICAgICAgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIGFsbCI6ICIiLAorICAgICAgICAgICAgIkluZm8iOiAiIiwKKyAgICAgICAgICAgICJMZWFybiI6ICIiLAorICAgICAgICAgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICIiLAorICAgICAgICAgICAgIk9yaWdpbmFsIHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQuICBDYWxsaW5nIHNwZWxsIGNoZWNrZXIuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAiIiwKKyAgICAgICAgICAgICJwbGl6IHdlaXQgOy0pIjogIiIsCisgICAgICAgICAgICAiUmUtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSBhbGwiOiAiIiwKKyAgICAgICAgICAgICJSZXZlcnQiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiU3BlbGwtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJTdWdnZXN0aW9ucyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBkcm9wIGNoYW5nZXMgYW5kIHF1aXQgc3BlbGwgY2hlY2tlci4gIFBsZWFzZSBjb25maXJtLiI6ICIiLAorICAgICAgICAgICAgIlJlcGxhY2Ugd2l0aCI6ICI8PEZpbmRSZXBsYWNlPj4iCisgICAgICAgIH0sCisgICAgICAgICJUZW1wbGF0ZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFRFTVBMQVRFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkluc2VydCB0ZW1wbGF0ZSI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJVbkZvcm1hdCI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIFVORk9STUFUIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkFsbCI6ICIiLAorICAgICAgICAgICAgIkFsbCBIVE1MOiI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIEFyZWEiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBvcHRpb25zIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0dGluZzoiOiAiIiwKKyAgICAgICAgICAgICJQYWdlIENsZWFuZXIiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Qgd2hpY2ggdHlwZXMgb2YgZm9ybWF0dGluZyB5b3Ugd291bGQgbGlrZSB0byByZW1vdmUuIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0aW9uIjogIiIKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC96aF9jbi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbWVyZ2VkL3poX2NuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NjQyZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL21lcmdlZC96aF9jbi5qcwpAQCAtMCwwICsxLDE1MTMgQEAKKy8vIFhpbmhhIExhbmd1YWdlIENvbWJpbmVkIFRyYW5zbGF0aW9uIEZpbGUKKy8vCisvLyBMQU5HOiAiemhfY24iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTlNUUlVDVElPTlMgVE8gVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFlvdXIgdHJhbnNsYXRpb24gbXVzdCBiZSBpbiBVVEYtOCBDaGFyYWN0ZXIgRW5jb2RpbmcuCisvLworLy8gVGhpcyBpcyBhIEpTT04gZW5jb2RlZCBmaWxlIChwbHVzIGNvbW1lbnRzKSwgc3RyaW5ncyBzaG91bGQgYmUgZG91YmxlLXF1b3RlCisvLyBvbmx5LCBkbyBub3QgdXNlIHNpbmdsZSBxdW90ZXMgdG8gc3Vycm91bmQgc3RyaW5ncyAtICJoZWxsbyIsIG5vdCAnaGVsbG8nCisvLyBkbyBub3QgaGF2ZSBhIHRyYWlsaW5nIGNvbW1hIGFmdGVyIHRoZSBsYXN0IGVudHJ5IGluIGEgc2VjdGlvbi4KKy8vCisvLyBPbmx5IGZ1bGwgbGluZSBjb21tZW50cyBhcmUgYWxsb3dlZCAodGhhdCBhIGNvbW1lbnRzIG9jY3VweSBlbnRpcmUgbGluZXMpLgorLy8KKy8vIFNlYXJjaCBmb3IgdGhlIF9fTkVXX1RSQU5TTEFUSU9OU19fIHNlY3Rpb24gYmVsb3csIHRoaXMgaXMgd2hlcmUgeW91IHdpbGwKKy8vIHdhbnQgdG8gZm9jdXMsIHRoaXMgc2VjdGlvbiBpbmNsdWRlcyB0aGluZ3MgdGhhdCBkbyBub3QgcHJlc2VudGx5IGhhdmUgYSAKKy8vIHRyYW5zbGF0aW9uIG9yIGZvciB3aGljaCB0aGUgdHJhbnNsYXRpb24gbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgYWNjdXJhY3kuCisvLworLy8gSW4gdGhlIE5ldyBUcmFuc2xhdGlvbnMgc2VjdGlvbiBhIHRyYW5zbGF0aW9uIHN0cmluZyBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZworLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiIgorLy8gICAgIFRoaXMgbWVhbnMgaXQgaXMgbm90IHRyYW5zbGF0ZWQgeWV0LCBhZGQgeW91ciB0cmFuc2xhdGlvbi4uLgorLy8gICAgICJFbmdsaXNoIFN0cmluZyBIZXJlIiA6ICJLbGluZ29uIFN0cmluZyBIZXJlIgorLy8KKy8vICAiRW5nbGlzaCBTdHJpbmcgSGVyZSIgOiAiVHJhbnNsYXRlZCBTdHJpbmcgSGVyZSIKKy8vICAgICBUaGlzIG1lYW5zIHRoYXQgYW4gZXhpc3RpbmcgdHJhbnNsYXRpb24gZm9yIHRoaXMgc3RyaW5nLCBpbiBzb21lIG90aGVyCisvLyAgICAgc2VjdGlvbiBoYXMgYmVlbiBmb3VuZCwgYW5kIHVzZWQuICBDaGVjayB0aGF0IGl0IGlzIGFwcHJvcHJpdGUgZm9yIHRoaXMKKy8vICAgICBzZWN0aW9uIGFuZCBpZiBpdCBpcywgdGhhdCdzIGZpbmUgbGVhdmUgaXQgYXMgaXMsIG90aGVyd2lzZSBjaGFuZ2UgYXMKKy8vICAgICBhcHByb3ByaWF0ZS4KKy8vCisvLyAgIkVuZ2xpc2ggU3RyaW5nIEhlcmUiIDogIjw8QW5vdGhlclNlY3Rpb24+PiIKKy8vICAgICBUaGlzIG1lYW5zIHVzZSB0aGUgc2FtZSB0cmFuc2xhdGlvbiBmb3IgdGhpcyBzdHJpbmcgYXMgPDxBbm90aGVyU2VjdGlvbj4+CisvLyAgICAgdGhpcyBzYXZlcyB5b3UgcmUtdHJhbmxhdGluZyBzdHJpbmdzLiAgSWYgdGhlIENvbnRleHQgb2YgdGhpcyBzZWN0aW9uCisvLyAgICAgYW5kIHRoZSBjb250ZXh0IG9mIEFub3RoZXJTZWN0aW9uIHNlZW0gdGhlIHNhbWUsIHRoYXQncyBmaW5lIGxlYXZlIGl0CisvLyAgICAgdXNpbmcgdGhhdCB0cmFuc2xhdGlvbiwgYnV0IGlmIHRoaXMgc2VjdGlvbiBuZWVkcyBhIGRpZmZlcmVudCB0cmFuc2xhdGlvbiwgCisvLyAgICAgeW91IGNhbiBwcm92aWRlIGl0IGJ5IHJlcGxhY2luZyB0aGUgbGluayAoPDxBbm90aGVyU2VjdGlvbj4+KSB3aXRoIHRoYXQKKy8vICAgICBuZXcgdHJhbnNsYXRpb24uICBGb3IgZXhhbXBsZSAtIGEgIlRhYmxlIiBpbiBzYXkgIkRhdGFQbHVnaW4iIGlzIAorLy8gICAgIHBlcmhhcHMgdHJhbnNsYXRlZCBkaWZmZXJlbnRseSB0byAiVGFibGUiIGluICJGdXJuaXR1cmVQbHVnaW4iLgorLy8KKy8vIFRFU1RJTkcgWU9VUiBUUkFOU0xBVElPTgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTaW1wbHkgcGxhY2UgeW91ciB0cmFuc2xhdGlvbiBmaWxlIG9uIHlvdXIgd2Vic2VydmVyIHNvbWV3aGVyZSBmb3IgZXhhbXBsZQorLy8KKy8vICAgL3hpbmhhL2xhbmcvbWVyZ2VkL3poX2NuLmpzCisvLworLy8gYW5kIHRoZW4gdGVsbCBYaW5oYSB3aGVyZSB0byBnZXQgaXQgKGJlZm9yZSBsb2FkaW5nIFhpbmhhQ29yZS5qcykgYnkgCisvLworLy8gIF9lZGl0b3JfbGFuZyAgICAgICAgICAgICAgPSAnemhfY24nOworLy8gIF9lZGl0b3JfbGFuZ19tZXJnZWRfZmlsZSAgPSAnL3hpbmhhL2xhbmcvbWVyZ2VkL3poX2NuLmpzJzsKKy8vCisvLyBYaW5oYSB3aWxsIGxvYWQgeW91ciBuZXcgbGFuZ3VhZ2UgZGVmaW5pdGlvbi4KKy8vCisvLyBTVUJNSVRUSU5HIFlPVVIgVFJBTlNMQVRJT04KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU2ltcGx5IGNyZWF0ZSBhIFRpY2tldCBvbiB0aGUgWGluaGEgd2Vic2l0ZSBhbmQgYXR0YWNoIHlvdXIgdHJhbnNsYXRpb24gCisvLyBmaWxlLgorLy8KKy8vIFRoZSBYaW5oYSBkZXZlbG9wZXJzIHdpbGwgdGFrZSB5b3VyIGZpbGUgYW5kIHVzZSB0aGUgCisvLyAgICAgY29udHJpYi9sY19zcGxpdF9tZXJnZWRfZmlsZS5waHAKKy8vIHNjcmlwdCB0byBsb2FkIGl0IGludG8gdGhlIFhpbmhhIGRpc3RyaWJ1dGlvbi4KKworeworICAgICJBYm91dEJveCI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIuWFs+aWvCBYaW5oYSIKKyAgICB9LAorICAgICJDb250ZXh0TWVudSI6IHsKKyAgICAgICAgIkp1c3RpZnkgQ2VudGVyIjogIuS9jee9ruWxheS4rSIsCisgICAgICAgICJKdXN0aWZ5IEZ1bGwiOiAi5L2N572u5bem5Y+z5bmz562JIiwKKyAgICAgICAgIkp1c3RpZnkgTGVmdCI6ICLkvY3nva7pnaDlt6YiLAorICAgICAgICAiSnVzdGlmeSBSaWdodCI6ICLkvY3nva7pnaDlj7MiCisgICAgfSwKKyAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAi5rC05bmz57q/IgorICAgIH0sCisgICAgIkluc2VydFRhYmxlIjogeworICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIuaPkuWFpeihqOagvCIKKyAgICB9LAorICAgICJYaW5oYSI6IHsKKyAgICAgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIuWFs+aWvCBYaW5oYSIsCisgICAgICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIuiDjOaZr+minOiJsiIsCisgICAgICAgICJCb2xkIjogIueyl+S9kyIsCisgICAgICAgICJCdWxsZXRlZCBMaXN0IjogIuaXoOW6j+a4heWNlSIsCisgICAgICAgICJDdXJyZW50IHN0eWxlIjogIuWtl+S9k+S+i+WtkCIsCisgICAgICAgICJEZWNyZWFzZSBJbmRlbnQiOiAi5YeP5bCP6KGM5YmN56m655m9IiwKKyAgICAgICAgIkZvbnQgQ29sb3IiOiAi5paH5a2X6aKc6ImyIiwKKyAgICAgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIuivtOaYjiIsCisgICAgICAgICJIb3Jpem9udGFsIFJ1bGUiOiAi5rC05bmz57q/IiwKKyAgICAgICAgIkluY3JlYXNlIEluZGVudCI6ICLliqDlrr3ooYzliY3nqbrnmb0iLAorICAgICAgICAiSW5zZXJ0IFRhYmxlIjogIuaPkuWFpeihqOagvCIsCisgICAgICAgICJJbnNlcnQgV2ViIExpbmsiOiAi5o+S5YWl6L+e57uTIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAi5o+S5YWl5Zu+5b2iIiwKKyAgICAgICAgIkl0YWxpYyI6ICLmlpzkvZMiLAorICAgICAgICAiSnVzdGlmeSBDZW50ZXIiOiAi5L2N572u5bGF5LitIiwKKyAgICAgICAgIkp1c3RpZnkgRnVsbCI6ICLkvY3nva7lt6blj7PlubPnrYkiLAorICAgICAgICAiSnVzdGlmeSBMZWZ0IjogIuS9jee9rumdoOW3piIsCisgICAgICAgICJKdXN0aWZ5IFJpZ2h0IjogIuS9jee9rumdoOWPsyIsCisgICAgICAgICJPcmRlcmVkIExpc3QiOiAi6aG65bqP5riF5Y2VIiwKKyAgICAgICAgIlN0cmlrZXRocm91Z2giOiAi5Yig6Zmk57q/IiwKKyAgICAgICAgIlN1YnNjcmlwdCI6ICLkuIvmoIciLAorICAgICAgICAiU3VwZXJzY3JpcHQiOiAi5LiK5qCHIiwKKyAgICAgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICLliIfmjaJIVE1M5Y6f5aeL56CBIiwKKyAgICAgICAgIlVuZGVybGluZSI6ICLlupXnur8iCisgICAgfSwKKyAgICAiX19ORVdfVFJBTlNMQVRJT05TX18iOiB7CisgICAgICAgICJBYmJyZXZpYXRpb24iOiB7CisgICAgICAgICAgICAiQWJicmV2aWF0aW9uIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIiIsCisgICAgICAgICAgICAiRXhwYW5zaW9uOiI6ICIiLAorICAgICAgICAgICAgIk9LIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkFib3V0Qm94IjogeworICAgICAgICAgICAgIkNsb3NlIjogIjw8WGluaGE+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJDb3VudGVyIjogeworICAgICAgICAgICAgIi4uLiBpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIkNoYXJzIjogIiIsCisgICAgICAgICAgICAiSFRNTCI6ICIiLAorICAgICAgICAgICAgIldvcmRzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkNoYXJhY3Rlck1hcCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgc3BlY2lhbCBjaGFyYWN0ZXIiOiAiIgorICAgICAgICB9LAorICAgICAgICAiQ29sb3JQaWNrZXIiOiB7CisgICAgICAgICAgICAiQ2xpY2sgYSBjb2xvci4uLiI6ICIiLAorICAgICAgICAgICAgIkNvbG9yOiAiOiAiIiwKKyAgICAgICAgICAgICJTYW1wbGUiOiAiIiwKKyAgICAgICAgICAgICJXZWIgU2FmZTogIjogIiIsCisgICAgICAgICAgICAiQ2xvc2UiOiAiPDxYaW5oYT4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiQ29udGV4dE1lbnUiOiB7CisgICAgICAgICAgICAiX0RlbGV0ZSBSb3ciOiAiIiwKKyAgICAgICAgICAgICJfSW1hZ2UgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIl9Nb2RpZnkgTGluay4uLiI6ICIiLAorICAgICAgICAgICAgIl9SZW1vdmUgTGluay4uLiI6ICIiLAorICAgICAgICAgICAgIl9UYWJsZSBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiQ19lbGwgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICAgICAgICAgIkNoZWNfayBMaW5rLi4uIjogIiIsCisgICAgICAgICAgICAiQ29weSI6ICIiLAorICAgICAgICAgICAgIkNyZWF0ZSBhIGxpbmsiOiAiIiwKKyAgICAgICAgICAgICJDdXJyZW50IFVSTCBpcyI6ICIiLAorICAgICAgICAgICAgIkN1dCI6ICIiLAorICAgICAgICAgICAgIkRlX2xldGUgQ29sdW1uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIENlbGwiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgdGhlIGN1cnJlbnQgY29sdW1uIjogIiIsCisgICAgICAgICAgICAiRGVsZXRlIHRoZSBjdXJyZW50IHJvdyI6ICIiLAorICAgICAgICAgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIiIsCisgICAgICAgICAgICAiSV9uc2VydCBSb3cgQmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5fc2VydCBSb3cgQWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgX0NvbHVtbiBCZWZvcmUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIG5ldyByb3cgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbmV3IHJvdyBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQ19vbHVtbiBBZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBDZWxsIEFmdGVyIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IENlbGwgQmVmb3JlIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IHBhcmFncmFwaCBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYmVmb3JlIjogIiIsCisgICAgICAgICAgICAiTGluayBwb2ludHMgdG86IjogIiIsCisgICAgICAgICAgICAiTWFrZSBsaW5fay4uLiI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIENlbGxzIjogIiIsCisgICAgICAgICAgICAiT3BlbnMgdGhpcyBsaW5rIGluIGEgbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlBhc3RlIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBlbGVtZW50OiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gdW5saW5rIHRoaXMgZWxlbWVudC4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgdGhlICRlbGVtIEVsZW1lbnQuLi4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgdGhpcyBub2RlIGZyb20gdGhlIGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUm9fdyBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgaW1hZ2UgcHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBDZWxsIFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgICAgICAgICAiU2hvdyB0aGUgVGFibGUgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJTaG93IHRoZSBUYWJsZSBSb3cgUHJvcGVydGllcyBkaWFsb2ciOiAiIiwKKyAgICAgICAgICAgICJVbmxpbmsgdGhlIGN1cnJlbnQgZWxlbWVudCI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJDcmVhdGVMaW5rIjogeworICAgICAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICIiLAorICAgICAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiIiwKKyAgICAgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIiIsCisgICAgICAgICAgICAiT3RoZXIiOiAiIiwKKyAgICAgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiIiwKKyAgICAgICAgICAgICJUYXJnZXQ6IjogIiIsCisgICAgICAgICAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICIiLAorICAgICAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiIiwKKyAgICAgICAgICAgICJVUkw6IjogIiIsCisgICAgICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJEZWZpbml0aW9uTGlzdCI6IHsKKyAgICAgICAgICAgICJkZWZpbml0aW9uIGRlc2NyaXB0aW9uIjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiBsaXN0IjogIiIsCisgICAgICAgICAgICAiZGVmaW5pdGlvbiB0ZXJtIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkRpYWxvZ3MiOiB7CisgICAgICAgICAgICAiU29tZSBUZXh0IEhlcmUiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRHluYW1pY0NTUyI6IHsKKyAgICAgICAgICAgICJDaG9vc2Ugc3R5bGVzaGVldCI6ICIiLAorICAgICAgICAgICAgIkRlZmF1bHQiOiAiIiwKKyAgICAgICAgICAgICJVbmRlZmluZWQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiRWRpdFRhZyI6IHsKKyAgICAgICAgICAgICJFZGl0IEhUTUwgZm9yIHNlbGVjdGVkIHRleHQiOiAiIiwKKyAgICAgICAgICAgICJFZGl0IFRhZyBCeSBQZWciOiAiIiwKKyAgICAgICAgICAgICJUYWcgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJFcXVhdGlvbiI6IHsKKyAgICAgICAgICAgICIhPSI6ICIiLAorICAgICAgICAgICAgIiFpbiI6ICIiLAorICAgICAgICAgICAgIiZndDstIjogIiIsCisgICAgICAgICAgICAiJmd0Oz0iOiAiIiwKKyAgICAgICAgICAgICImbHQ7PSI6ICIiLAorICAgICAgICAgICAgIiZsdDs9Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZsdDt4Jmd0OyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgIWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAuYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDBgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgMmAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGAzYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDRgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgNWAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA2YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYDdgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyBgOGAgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7IGA5YCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsgYGVgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwOyZuYnNwO2AxYCAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgK3s6On1gJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YC06XFwgYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2Atezo6fWAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgQ2AmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgY29zYCI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BsbmAmbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgcGlgICZuYnNwOyI6ICIiLAorICAgICAgICAgICAgIiZuYnNwO2BzaW5gIjogIiIsCisgICAgICAgICAgICAiJm5ic3A7YHRhbmAiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDtgdGltZXNgJm5ic3A7IjogIiIsCisgICAgICAgICAgICAiJnF1b3Q7dGV4dCZxdW90OyI6ICIiLAorICAgICAgICAgICAgIicrZm9ybXVsYSsnIjogIiIsCisgICAgICAgICAgICAiKChuKSwoaykpIjogIiIsCisgICAgICAgICAgICAiKHgrMSkvKHgtMSkiOiAiIiwKKyAgICAgICAgICAgICIqIjogIiIsCisgICAgICAgICAgICAiKioiOiAiIiwKKyAgICAgICAgICAgICIrLSI6ICIiLAorICAgICAgICAgICAgIi0mZ3Q7IjogIiIsCisgICAgICAgICAgICAiLSZsdDsiOiAiIiwKKyAgICAgICAgICAgICItOiI6ICIiLAorICAgICAgICAgICAgIi09IjogIiIsCisgICAgICAgICAgICAiLy8iOiAiIiwKKyAgICAgICAgICAgICIvXyI6ICIiLAorICAgICAgICAgICAgIjouIjogIiIsCisgICAgICAgICAgICAiPSZndDsiOiAiIiwKKyAgICAgICAgICAgICJAIjogIiIsCisgICAgICAgICAgICAiW1thLGJdLFtjLGRdXSI6ICIiLAorICAgICAgICAgICAgIlxcXFwiOiAiIiwKKyAgICAgICAgICAgICJcXG5DbGljayBpbiB0aGUgYm94IHRvIHVzZSB5b3VyIGtleWJvYXJkIG9yIHVzZSB0aGUgYnV0dG9uc1xcbiI6ICIiLAorICAgICAgICAgICAgIl5eIjogIiIsCisgICAgICAgICAgICAiXl5eIjogIiIsCisgICAgICAgICAgICAiX198IjogIiIsCisgICAgICAgICAgICAiX3xfIjogIiIsCisgICAgICAgICAgICAiYCE9YCI6ICIiLAorICAgICAgICAgICAgImAhaW5gIjogIiIsCisgICAgICAgICAgICAiYCZhbmQ7YCI6ICIiLAorICAgICAgICAgICAgImAmY2FwO2AiOiAiIiwKKyAgICAgICAgICAgICJgJmN1cDtgIjogIiIsCisgICAgICAgICAgICAiYCZndDstYCI6ICIiLAorICAgICAgICAgICAgImAmZ3Q7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0Oz0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmbHQ7PWAiOiAiIiwKKyAgICAgICAgICAgICJgJmx0O3gmZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAmb3I7YCI6ICIiLAorICAgICAgICAgICAgImAmcXVvdDt0ZXh0JnF1b3Q7YCI6ICIiLAorICAgICAgICAgICAgImAoKG4pLChrKSlgIjogIiIsCisgICAgICAgICAgICAiYCh4KzEpLyh4LTEpYCI6ICIiLAorICAgICAgICAgICAgImAqKmAiOiAiIiwKKyAgICAgICAgICAgICJgKmAiOiAiIiwKKyAgICAgICAgICAgICJgKy1gIjogIiIsCisgICAgICAgICAgICAiYC0mZ3Q7YCI6ICIiLAorICAgICAgICAgICAgImAtJmx0O2AiOiAiIiwKKyAgICAgICAgICAgICJgLTpgIjogIiIsCisgICAgICAgICAgICAiYC09YCI6ICIiLAorICAgICAgICAgICAgImAvL2AiOiAiIiwKKyAgICAgICAgICAgICJgL19gIjogIiIsCisgICAgICAgICAgICAiYDouYCI6ICIiLAorICAgICAgICAgICAgImA9Jmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgQGAiOiAiIiwKKyAgICAgICAgICAgICJgW1thLGJdLFtjLGRdXWAiOiAiIiwKKyAgICAgICAgICAgICJgXFxcXGAiOiAiIiwKKyAgICAgICAgICAgICJgX198YCI6ICIiLAorICAgICAgICAgICAgImBffF9gIjogIiIsCisgICAgICAgICAgICAiYEFBYCI6ICIiLAorICAgICAgICAgICAgImBhbGVwaGAiOiAiIiwKKyAgICAgICAgICAgICJgYWxwaGFgIjogIiIsCisgICAgICAgICAgICAiYGFuZGAiOiAiIiwKKyAgICAgICAgICAgICJgYmFyYWAiOiAiIiwKKyAgICAgICAgICAgICJgYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiYmJhYCI6ICIiLAorICAgICAgICAgICAgImBiZXRhYCI6ICIiLAorICAgICAgICAgICAgImBDQ2AiOiAiIiwKKyAgICAgICAgICAgICJgY2NhYCI6ICIiLAorICAgICAgICAgICAgImBjaGlgIjogIiIsCisgICAgICAgICAgICAiYGRhcnJgIjogIiIsCisgICAgICAgICAgICAiYGRkb3RhYCI6ICIiLAorICAgICAgICAgICAgImBkZWxgIjogIiIsCisgICAgICAgICAgICAiYERlbHRhYCI6ICIiLAorICAgICAgICAgICAgImBkZWx0YWAiOiAiIiwKKyAgICAgICAgICAgICJgZGlhbW9uZGAiOiAiIiwKKyAgICAgICAgICAgICJgZG90YWAiOiAiIiwKKyAgICAgICAgICAgICJgZHkvZHhgIjogIiIsCisgICAgICAgICAgICAiYEVFYCI6ICIiLAorICAgICAgICAgICAgImBlcHNpYCI6ICIiLAorICAgICAgICAgICAgImBldGFgIjogIiIsCisgICAgICAgICAgICAiYGZyYWAiOiAiIiwKKyAgICAgICAgICAgICJgR2FtbWFgIjogIiIsCisgICAgICAgICAgICAiYGdhbW1hYCI6ICIiLAorICAgICAgICAgICAgImBncmFkYCI6ICIiLAorICAgICAgICAgICAgImBoQXJyYCI6ICIiLAorICAgICAgICAgICAgImBoYXJyYCI6ICIiLAorICAgICAgICAgICAgImBoYXRhYCI6ICIiLAorICAgICAgICAgICAgImBpZmAiOiAiIiwKKyAgICAgICAgICAgICJgaW5gIjogIiIsCisgICAgICAgICAgICAiYGludGAiOiAiIiwKKyAgICAgICAgICAgICJgaW90YWAiOiAiIiwKKyAgICAgICAgICAgICJga2FwcGFgIjogIiIsCisgICAgICAgICAgICAiYExhbWJkYWAiOiAiIiwKKyAgICAgICAgICAgICJgbGFtYmRhYCI6ICIiLAorICAgICAgICAgICAgImBsYXJyYCI6ICIiLAorICAgICAgICAgICAgImBsQXJyYCI6ICIiLAorICAgICAgICAgICAgImBsaW1fKHgtJmd0O29vKWAiOiAiIiwKKyAgICAgICAgICAgICJgbG9nYCI6ICIiLAorICAgICAgICAgICAgImBtdWAiOiAiIiwKKyAgICAgICAgICAgICJgTk5gIjogIiIsCisgICAgICAgICAgICAiYG5uYCI6ICIiLAorICAgICAgICAgICAgImBub3RgIjogIiIsCisgICAgICAgICAgICAiYG51YCI6ICIiLAorICAgICAgICAgICAgImBvK2AiOiAiIiwKKyAgICAgICAgICAgICJgby5gIjogIiIsCisgICAgICAgICAgICAiYE8vYCI6ICIiLAorICAgICAgICAgICAgImBvaW50YCI6ICIiLAorICAgICAgICAgICAgImBPbWVnYWAiOiAiIiwKKyAgICAgICAgICAgICJgb21lZ2FgIjogIiIsCisgICAgICAgICAgICAiYG9vYCI6ICIiLAorICAgICAgICAgICAgImBvcmAiOiAiIiwKKyAgICAgICAgICAgICJgb3hgIjogIiIsCisgICAgICAgICAgICAiYHBoaWAiOiAiIiwKKyAgICAgICAgICAgICJgUGhpYCI6ICIiLAorICAgICAgICAgICAgImBQaWAiOiAiIiwKKyAgICAgICAgICAgICJgcGlgIjogIiIsCisgICAgICAgICAgICAiYHByb2RgIjogIiIsCisgICAgICAgICAgICAiYHByb3BgIjogIiIsCisgICAgICAgICAgICAiYHBzaWAiOiAiIiwKKyAgICAgICAgICAgICJgUHNpYCI6ICIiLAorICAgICAgICAgICAgImBRUWAiOiAiIiwKKyAgICAgICAgICAgICJgcXVhZGAiOiAiIiwKKyAgICAgICAgICAgICJgckFycmAiOiAiIiwKKyAgICAgICAgICAgICJgcmhvYCI6ICIiLAorICAgICAgICAgICAgImByb290KG4pKHgpYCI6ICIiLAorICAgICAgICAgICAgImBSUmAiOiAiIiwKKyAgICAgICAgICAgICJgc2ZhYCI6ICIiLAorICAgICAgICAgICAgImBTaWdtYWAiOiAiIiwKKyAgICAgICAgICAgICJgc2lnbWFgIjogIiIsCisgICAgICAgICAgICAiYHNxcnQoeClgIjogIiIsCisgICAgICAgICAgICAiYHNxdWFyZWAiOiAiIiwKKyAgICAgICAgICAgICJgc3RhY2tyZWwoLSZndDspKCspYCI6ICIiLAorICAgICAgICAgICAgImBzdWJgIjogIiIsCisgICAgICAgICAgICAiYHN1YmVgIjogIiIsCisgICAgICAgICAgICAiYHN1bWAiOiAiIiwKKyAgICAgICAgICAgICJgc3VwYCI6ICIiLAorICAgICAgICAgICAgImBzdXBlYCI6ICIiLAorICAgICAgICAgICAgImB0YXVgIjogIiIsCisgICAgICAgICAgICAiYHRoZXRhYCI6ICIiLAorICAgICAgICAgICAgImBUaGV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgVFRgIjogIiIsCisgICAgICAgICAgICAiYHR0YWAiOiAiIiwKKyAgICAgICAgICAgICJgdWFycmAiOiAiIiwKKyAgICAgICAgICAgICJgdWxhYCI6ICIiLAorICAgICAgICAgICAgImB1cHNpbG9uYCI6ICIiLAorICAgICAgICAgICAgImB1dWAiOiAiIiwKKyAgICAgICAgICAgICJgdmVjYWAiOiAiIiwKKyAgICAgICAgICAgICJgdnZgIjogIiIsCisgICAgICAgICAgICAiYHhfKG1uKWAiOiAiIiwKKyAgICAgICAgICAgICJgeGlgIjogIiIsCisgICAgICAgICAgICAiYFhpYCI6ICIiLAorICAgICAgICAgICAgImB4eGAiOiAiIiwKKyAgICAgICAgICAgICJgemV0YWAiOiAiIiwKKyAgICAgICAgICAgICJgWlpgIjogIiIsCisgICAgICAgICAgICAiYHwtJmd0O2AiOiAiIiwKKyAgICAgICAgICAgICJgfC0tYCI6ICIiLAorICAgICAgICAgICAgImB8PT1gIjogIiIsCisgICAgICAgICAgICAiYHxfX2AiOiAiIiwKKyAgICAgICAgICAgICJgfH5gIjogIiIsCisgICAgICAgICAgICAiYH49YCI6ICIiLAorICAgICAgICAgICAgImB+fGAiOiAiIiwKKyAgICAgICAgICAgICJgfn5gIjogIiIsCisgICAgICAgICAgICAiQUEiOiAiIiwKKyAgICAgICAgICAgICJhbGVwaCI6ICIiLAorICAgICAgICAgICAgImFscGhhIjogIiIsCisgICAgICAgICAgICAiYW5kIjogIiIsCisgICAgICAgICAgICAiQXNjaWlNYXRoIEZvcm11bGEgSW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJBc2NpaU1hdGhNTCBFeGFtcGxlIjogIiIsCisgICAgICAgICAgICAiYmFyYSI6ICIiLAorICAgICAgICAgICAgIkJhc2VkIG9uIEFTQ0lJTWF0aE1MIGJ5IjogIiIsCisgICAgICAgICAgICAiYmJhIjogIiIsCisgICAgICAgICAgICAiYmJiYSI6ICIiLAorICAgICAgICAgICAgImJldGEiOiAiIiwKKyAgICAgICAgICAgICJDQyI6ICIiLAorICAgICAgICAgICAgImNjYSI6ICIiLAorICAgICAgICAgICAgImNoaSI6ICIiLAorICAgICAgICAgICAgImRhcnIiOiAiIiwKKyAgICAgICAgICAgICJkZG90YSI6ICIiLAorICAgICAgICAgICAgImRlbCI6ICIiLAorICAgICAgICAgICAgImRlbHRhIjogIiIsCisgICAgICAgICAgICAiRGVsdGEiOiAiIiwKKyAgICAgICAgICAgICJkaWFtb25kIjogIiIsCisgICAgICAgICAgICAiZG90YSI6ICIiLAorICAgICAgICAgICAgImR5L2R4IjogIiIsCisgICAgICAgICAgICAiRUUiOiAiIiwKKyAgICAgICAgICAgICJlcHNpIjogIiIsCisgICAgICAgICAgICAiZXRhIjogIiIsCisgICAgICAgICAgICAiRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQXNjaWlNYXRoTUwgdmlzaXQgdGhpcyBwYWdlOiI6ICIiLAorICAgICAgICAgICAgIkZvcm11bGEgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiZnJhIjogIiIsCisgICAgICAgICAgICAiZ2FtbWEiOiAiIiwKKyAgICAgICAgICAgICJHYW1tYSI6ICIiLAorICAgICAgICAgICAgImdyYWQiOiAiIiwKKyAgICAgICAgICAgICJoQXJyIjogIiIsCisgICAgICAgICAgICAiaGFyciI6ICIiLAorICAgICAgICAgICAgImhhdGEiOiAiIiwKKyAgICAgICAgICAgICJpZiI6ICIiLAorICAgICAgICAgICAgImluIjogIiIsCisgICAgICAgICAgICAiSW5wdXQiOiAiIiwKKyAgICAgICAgICAgICJpbnQiOiAiIiwKKyAgICAgICAgICAgICJpbnRfYV5iZih4KWR4IjogIiIsCisgICAgICAgICAgICAiaW90YSI6ICIiLAorICAgICAgICAgICAgImthcHBhIjogIiIsCisgICAgICAgICAgICAibGFtYmRhIjogIiIsCisgICAgICAgICAgICAiTGFtYmRhIjogIiIsCisgICAgICAgICAgICAibEFyciI6ICIiLAorICAgICAgICAgICAgImxhcnIiOiAiIiwKKyAgICAgICAgICAgICJsaW1fKHgtJmd0O29vKSI6ICIiLAorICAgICAgICAgICAgIm11IjogIiIsCisgICAgICAgICAgICAibm4iOiAiIiwKKyAgICAgICAgICAgICJOTiI6ICIiLAorICAgICAgICAgICAgIm5ubiI6ICIiLAorICAgICAgICAgICAgIm5vdCI6ICIiLAorICAgICAgICAgICAgIm51IjogIiIsCisgICAgICAgICAgICAibysiOiAiIiwKKyAgICAgICAgICAgICJvLiI6ICIiLAorICAgICAgICAgICAgIk8vIjogIiIsCisgICAgICAgICAgICAib2ludCI6ICIiLAorICAgICAgICAgICAgIk9tZWdhIjogIiIsCisgICAgICAgICAgICAib21lZ2EiOiAiIiwKKyAgICAgICAgICAgICJvbyI6ICIiLAorICAgICAgICAgICAgIm9yIjogIiIsCisgICAgICAgICAgICAib3giOiAiIiwKKyAgICAgICAgICAgICJQaGkiOiAiIiwKKyAgICAgICAgICAgICJwaGkiOiAiIiwKKyAgICAgICAgICAgICJwaSI6ICIiLAorICAgICAgICAgICAgIlBpIjogIiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICIiLAorICAgICAgICAgICAgInByb2QiOiAiIiwKKyAgICAgICAgICAgICJwcm9wIjogIiIsCisgICAgICAgICAgICAicHNpIjogIiIsCisgICAgICAgICAgICAiUHNpIjogIiIsCisgICAgICAgICAgICAiUVEiOiAiIiwKKyAgICAgICAgICAgICJxdWFkIjogIiIsCisgICAgICAgICAgICAickFyciI6ICIiLAorICAgICAgICAgICAgInJobyI6ICIiLAorICAgICAgICAgICAgInJvb3QobikoeCkiOiAiIiwKKyAgICAgICAgICAgICJSUiI6ICIiLAorICAgICAgICAgICAgInNmYSI6ICIiLAorICAgICAgICAgICAgIlNpZ21hIjogIiIsCisgICAgICAgICAgICAic2lnbWEiOiAiIiwKKyAgICAgICAgICAgICJzcXJ0KHgpIjogIiIsCisgICAgICAgICAgICAic3F1YXJlIjogIiIsCisgICAgICAgICAgICAic3RhY2tyZWwoLSZndDspKCspIjogIiIsCisgICAgICAgICAgICAic3ViIjogIiIsCisgICAgICAgICAgICAic3ViZSI6ICIiLAorICAgICAgICAgICAgInN1bSI6ICIiLAorICAgICAgICAgICAgInN1bV8obj0xKV5vbyI6ICIiLAorICAgICAgICAgICAgInN1cCI6ICIiLAorICAgICAgICAgICAgInN1cGUiOiAiIiwKKyAgICAgICAgICAgICJ0YXUiOiAiIiwKKyAgICAgICAgICAgICJUaGV0YSI6ICIiLAorICAgICAgICAgICAgInRoZXRhIjogIiIsCisgICAgICAgICAgICAiVFQiOiAiIiwKKyAgICAgICAgICAgICJ0dGEiOiAiIiwKKyAgICAgICAgICAgICJ1YXJyIjogIiIsCisgICAgICAgICAgICAidWxhIjogIiIsCisgICAgICAgICAgICAidXBzaWxvbiI6ICIiLAorICAgICAgICAgICAgInV1IjogIiIsCisgICAgICAgICAgICAidXV1IjogIiIsCisgICAgICAgICAgICAidmVjYSI6ICIiLAorICAgICAgICAgICAgInZ2IjogIiIsCisgICAgICAgICAgICAidnZ2IjogIiIsCisgICAgICAgICAgICAieF4obStuKSI6ICIiLAorICAgICAgICAgICAgInhfKG1uKSI6ICIiLAorICAgICAgICAgICAgIlhpIjogIiIsCisgICAgICAgICAgICAieGkiOiAiIiwKKyAgICAgICAgICAgICJ4eCI6ICIiLAorICAgICAgICAgICAgInpldGEiOiAiIiwKKyAgICAgICAgICAgICJaWiI6ICIiLAorICAgICAgICAgICAgInwtJmd0OyI6ICIiLAorICAgICAgICAgICAgInwtLSI6ICIiLAorICAgICAgICAgICAgInw9PSI6ICIiLAorICAgICAgICAgICAgInxfXyI6ICIiLAorICAgICAgICAgICAgInx+IjogIiIsCisgICAgICAgICAgICAifj0iOiAiIiwKKyAgICAgICAgICAgICJ+fCI6ICIiLAorICAgICAgICAgICAgIn5+IjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJGYW5jeVNlbGVjdHMiOiB7CisgICAgICAgICAgICAiJytvcHQudGV4dCsnIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZpbmRSZXBsYWNlIjogeworICAgICAgICAgICAgIic7XHJcbiAgdmFyIHRhZ2MgPSAnIjogIiIsCisgICAgICAgICAgICAiQ2FzZSBzZW5zaXRpdmUgc2VhcmNoIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIiOiAiIiwKKyAgICAgICAgICAgICJEb25lIjogIiIsCisgICAgICAgICAgICAiRW50ZXIgdGhlIHRleHQgeW91IHdhbnQgdG8gZmluZCI6ICIiLAorICAgICAgICAgICAgIkZpbmQgYW5kIFJlcGxhY2UiOiAiIiwKKyAgICAgICAgICAgICJmb3VuZCBpdGVtIjogIiIsCisgICAgICAgICAgICAiZm91bmQgaXRlbXMiOiAiIiwKKyAgICAgICAgICAgICJIaWdobGlnaHQiOiAiIiwKKyAgICAgICAgICAgICJJbmZvcm0gYSByZXBsYWNlbWVudCB3b3JkIjogIiIsCisgICAgICAgICAgICAiTmV4dCI6ICIiLAorICAgICAgICAgICAgIm5vdCBmb3VuZCI6ICIiLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIHdpdGg6IjogIiIsCisgICAgICAgICAgICAicmVwbGFjZWQgaXRlbSI6ICIiLAorICAgICAgICAgICAgInJlcGxhY2VkIGl0ZW1zIjogIiIsCisgICAgICAgICAgICAiU2VhcmNoIGZvcjoiOiAiIiwKKyAgICAgICAgICAgICJTdWJzdGl0dXRlIGFsbCBvY2N1cnJlbmNlcyI6ICIiLAorICAgICAgICAgICAgIlN1YnN0aXR1dGUgdGhpcyBvY2N1cnJlbmNlPyI6ICIiLAorICAgICAgICAgICAgIlVuZG8iOiAiIiwKKyAgICAgICAgICAgICJXaG9sZSB3b3JkcyBvbmx5IjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkZvcm1PcGVyYXRpb25zIjogeworICAgICAgICAgICAgIkVudGVyIHRoZSBuYW1lIGZvciBuZXcgb3B0aW9uLiI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgY2hlY2sgYm94LiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIEZvcm0uIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgbXVsdGktbGluZSB0ZXh0IGZpZWxkLiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhIHJhZGlvIGJ1dHRvbi4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSBzZWxlY3QgZmllbGQuIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGEgc3VibWl0L3Jlc2V0IGJ1dHRvbi4iOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgYSB0ZXh0LCBwYXNzd29yZCBvciBoaWRkZW4gZmllbGQuIjogIiIsCisgICAgICAgICAgICAiTWVzc2FnZSBTZW50IjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIFNlbGVjdC4uLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJGb3JtcyI6IHsKKyAgICAgICAgICAgICInb25DbGljayc9IjogIiIsCisgICAgICAgICAgICAiQWNjZXNzIEtleToiOiAiIiwKKyAgICAgICAgICAgICJBY3Rpb24gVVJMOiI6ICIiLAorICAgICAgICAgICAgIkJ1dHRvbiBTY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJDaGVja2VkIjogIiIsCisgICAgICAgICAgICAiQ29sdW1uczoiOiAiIiwKKyAgICAgICAgICAgICJEZWZhdWx0IHRleHQgKG9wdGlvbmFsKSI6ICIiLAorICAgICAgICAgICAgIkRpbWVuc2lvbnMiOiAiIiwKKyAgICAgICAgICAgICJEaXNhYmxlZCI6ICIiLAorICAgICAgICAgICAgIkVuY29kaW5nOiI6ICIiLAorICAgICAgICAgICAgIkZvciBDb250cm9sOiI6ICIiLAorICAgICAgICAgICAgIkZvcm0iOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IEZJRUxEU0VUIjogIiIsCisgICAgICAgICAgICAiRm9ybSBFbGVtZW50OiBJTlBVVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogTEFCRUwiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIEVsZW1lbnQ6IFNFTEVDVCI6ICIiLAorICAgICAgICAgICAgIkZvcm0gRWxlbWVudDogVEVYVEFSRUEiOiAiIiwKKyAgICAgICAgICAgICJGb3JtIGhhbmRsZXIgc2NyaXB0IjogIiIsCisgICAgICAgICAgICAiRm9ybSBOYW1lOiI6ICIiLAorICAgICAgICAgICAgIkdldCI6ICIiLAorICAgICAgICAgICAgIkhhcmQiOiAiIiwKKyAgICAgICAgICAgICJIZWlnaHQgaW4gbnVtYmVyIG9mIHJvd3MiOiAiIiwKKyAgICAgICAgICAgICJIVE1MLUZvcm0gdG8gQ0dJIChkZWZhdWx0KSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIHNvdXJjZSI6ICIiLAorICAgICAgICAgICAgIkltYWdlIFVSTDoiOiAiIiwKKyAgICAgICAgICAgICJJbml0aWFsIFRleHQ6IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0L0VkaXQgRm9ybSI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBGSUVMRFNFVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBJTlBVVCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBMQUJFTCI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBTRUxFQ1QiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgVEVYVEFSRUEiOiAiIiwKKyAgICAgICAgICAgICJKYXZhc2NyaXB0IGZvciBidXR0b24gY2xpY2siOiAiIiwKKyAgICAgICAgICAgICJMYWJlbDoiOiAiIiwKKyAgICAgICAgICAgICJMZWdlbmQ6IjogIiIsCisgICAgICAgICAgICAiTWF4IGxlbmd0aDoiOiAiIiwKKyAgICAgICAgICAgICJNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjY2VwdGVkIjogIiIsCisgICAgICAgICAgICAiTWV0aG9kOiI6ICIiLAorICAgICAgICAgICAgIm11bHRpcGFydCBGb3JtIERhdGEgKEZpbGUtVXBsb2FkKSI6ICIiLAorICAgICAgICAgICAgIk5hbWUiOiAiIiwKKyAgICAgICAgICAgICJOYW1lIG9mIHRoZSBmb3JtIGlucHV0IjogIiIsCisgICAgICAgICAgICAiTmFtZSBvZiB0aGUgZm9ybSBzZWxlY3QiOiAiIiwKKyAgICAgICAgICAgICJuYW1lIG9mIHRoZSB0ZXh0YXJlYSI6ICIiLAorICAgICAgICAgICAgIk5hbWUvSUQ6IjogIiIsCisgICAgICAgICAgICAibm9ybWFsIjogIiIsCisgICAgICAgICAgICAibm93cmFwIjogIiIsCisgICAgICAgICAgICAiT2ZmIjogIiIsCisgICAgICAgICAgICAiUGh5c2ljYWwiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgYSBMYWJlbCI6ICIiLAorICAgICAgICAgICAgIlBvc3QiOiAiIiwKKyAgICAgICAgICAgICJwcmUiOiAiIiwKKyAgICAgICAgICAgICJSZWFkIE9ubHkiOiAiIiwKKyAgICAgICAgICAgICJSb3dzOiI6ICIiLAorICAgICAgICAgICAgIlNpemUgb2YgdGV4dCBib3ggaW4gY2hhcmFjdGVycyI6ICIiLAorICAgICAgICAgICAgIlNpemU6IjogIiIsCisgICAgICAgICAgICAiU29mdCI6ICIiLAorICAgICAgICAgICAgIlRhYiBJbmRleDoiOiAiIiwKKyAgICAgICAgICAgICJUYXJnZXQgRnJhbWU6IjogIiIsCisgICAgICAgICAgICAiVGV4dDoiOiAiIiwKKyAgICAgICAgICAgICJVUkwgb2YgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJWYWx1ZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICAgICAgICAgIlZhbHVlOiI6ICIiLAorICAgICAgICAgICAgIlZpcnR1YWwiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aCBpbiBudW1iZXIgb2YgY2hhcmFjdGVycyI6ICIiLAorICAgICAgICAgICAgIldyYXAgTW9kZToiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT3B0aW9ucyI6ICI8PEZpbmRSZXBsYWNlPj4iCisgICAgICAgIH0sCisgICAgICAgICJGdWxsUGFnZSI6IHsKKyAgICAgICAgICAgICIuLi4iOiAiIiwKKyAgICAgICAgICAgICJBbHRlcm5hdGUgc3R5bGUtc2hlZXQ6IjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZCBjb2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJDaGFyYWN0ZXIgc2V0OiI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChJU08tODg1OS01KSI6ICIiLAorICAgICAgICAgICAgImN5cmlsbGljIChLT0k4LVIpIjogIiIsCisgICAgICAgICAgICAiY3lyaWxsaWMgKFdJTkRPV1MtMTI1MSkiOiAiIiwKKyAgICAgICAgICAgICJEZXNjcmlwdGlvbjoiOiAiIiwKKyAgICAgICAgICAgICJET0NUWVBFOiI6ICIiLAorICAgICAgICAgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJEb2N1bWVudCB0aXRsZToiOiAiIiwKKyAgICAgICAgICAgICJLZXl3b3JkczoiOiAiIiwKKyAgICAgICAgICAgICJQcmltYXJ5IHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICAgICAgICAgIlRleHQgY29sb3I6IjogIiIsCisgICAgICAgICAgICAiVVRGLTggKHJlY29tbWVuZGVkKSI6ICIiLAorICAgICAgICAgICAgIndlc3Rlcm4gKElTTy04ODU5LTEpIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJGdWxsU2NyZWVuIjogeworICAgICAgICAgICAgIk1heGltaXplL01pbmltaXplIEVkaXRvciI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJHZWNrbyI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorICAgICAgICB9LAorICAgICAgICAiSG9yaXpvbnRhbFJ1bGUiOiB7CisgICAgICAgICAgICAiJiN4MDBkNzsiOiAiIiwKKyAgICAgICAgICAgICImbmJzcDsiOiAiIiwKKyAgICAgICAgICAgICJBbGlnbm1lbnQ6IjogIiIsCisgICAgICAgICAgICAiQ2VudGVyIjogIiIsCisgICAgICAgICAgICAiQ29sb3I6IjogIiIsCisgICAgICAgICAgICAiSGVpZ2h0OiI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9FZGl0IEhvcml6b250YWwgUnVsZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydC9lZGl0IGhvcml6b250YWwgcnVsZSI6ICIiLAorICAgICAgICAgICAgIkxheW91dCI6ICIiLAorICAgICAgICAgICAgIkxlZnQiOiAiIiwKKyAgICAgICAgICAgICJObyBzaGFkaW5nIjogIiIsCisgICAgICAgICAgICAicGVyY2VudCI6ICIiLAorICAgICAgICAgICAgInBpeGVscyI6ICIiLAorICAgICAgICAgICAgIlJpZ2h0IjogIiIsCisgICAgICAgICAgICAiU3R5bGUiOiAiIiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIklubGluZVN0eWxlciI6IHsKKyAgICAgICAgICAgICJCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIiOiAiIiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiIiwKKyAgICAgICAgICAgICJDaGFyIjogIiIsCisgICAgICAgICAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJDU1MgU3R5bGUiOiAiIiwKKyAgICAgICAgICAgICJGRyBDb2xvciI6ICIiLAorICAgICAgICAgICAgIkZsb2F0IjogIiIsCisgICAgICAgICAgICAiSnVzdGlmeSI6ICIiLAorICAgICAgICAgICAgIk1hcmdpbiI6ICIiLAorICAgICAgICAgICAgIk1pZGRsZSI6ICIiLAorICAgICAgICAgICAgIk5vbmUiOiAiIiwKKyAgICAgICAgICAgICJQYWRkaW5nIjogIiIsCisgICAgICAgICAgICAiVGV4dCBhbGlnbiI6ICIiLAorICAgICAgICAgICAgIlRvcCI6ICIiLAorICAgICAgICAgICAgIlZlcnRpY2FsIGFsaWduIjogIiIsCisgICAgICAgICAgICAiLSI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIkNlbnRlciI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkhlaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkltYWdlIFVSTCI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkxheW91dCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJwZXJjZW50IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAicGl4ZWxzIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJXaWR0aCI6ICI8PEhvcml6b250YWxSdWxlPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRBbmNob3IiOiB7CisgICAgICAgICAgICAiQW5jaG9yIG5hbWUiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgQW5jaG9yIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkRlbGV0ZSI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0SW1hZ2UiOiB7CisgICAgICAgICAgICAiQWJzYm90dG9tIjogIiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiIiwKKyAgICAgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICIiLAorICAgICAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIkhvcml6b250YWw6IjogIiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICIiLAorICAgICAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiIiwKKyAgICAgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJTcGFjaW5nIjogIiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICIiLAorICAgICAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiIiwKKyAgICAgICAgICAgICJWZXJ0aWNhbDoiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkxheW91dCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlZnQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnROb3RlIjogeworICAgICAgICAgICAgIkluc2VydCI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBmb290bm90ZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBOb3RlIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQYWdlYnJlYWsiOiB7CisgICAgICAgICAgICAiUGFnZSBicmVhayI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQnJlYWsiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U21pbGV5IjogeworICAgICAgICAgICAgIkluc2VydCBTbWlsZXkiOiAiIgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0U25pcHBldCI6IHsKKyAgICAgICAgICAgICJcXG4gIFRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nXFxuIjogIiIsCisgICAgICAgICAgICAiSGlkZSBwcmV2aWV3IjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICIiLAorICAgICAgICAgICAgIkxpbmsxIjogIiIsCisgICAgICAgICAgICAiTGluazIiOiAiIiwKKyAgICAgICAgICAgICJMaW5rMyI6ICIiLAorICAgICAgICAgICAgIkxpbms0IjogIiIsCisgICAgICAgICAgICAiTGluazUiOiAiIiwKKyAgICAgICAgICAgICJTaG93IHByZXZpZXciOiAiIiwKKyAgICAgICAgICAgICJUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZyI6ICIiLAorICAgICAgICAgICAgIlZhcmlhYmxlIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRTbmlwcGV0MiI6IHsKKyAgICAgICAgICAgICJBbGwgQ2F0ZWdvcmllcyI6ICIiLAorICAgICAgICAgICAgIkZpbHRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBhcyBIVE1MIjogIiIsCisgICAgICAgICAgICAiSW5zZXJ0IGFzIHRlbXBsYXRlIHZhcmlhYmxlIjogIiIsCisgICAgICAgICAgICAiT25seSBzZWFyY2ggd29yZCBiZWdpbm5pbmciOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiSFRNTCI6ICI8PENoYXJDb3VudGVyPj4iLAorICAgICAgICAgICAgIkluc2VydCBTbmlwcGV0IjogIjw8SW5zZXJ0U25pcHBldD4+IiwKKyAgICAgICAgICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICI8PEluc2VydFNuaXBwZXQ+PiIsCisgICAgICAgICAgICAiVmFyaWFibGUiOiAiPDxJbnNlcnRTbmlwcGV0Pj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRUYWJsZSI6IHsKKyAgICAgICAgICAgICJDYXB0aW9uIjogIiIsCisgICAgICAgICAgICAiQ2FwdGlvbiBmb3IgdGhlIHRhYmxlIjogIiIsCisgICAgICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICIiLAorICAgICAgICAgICAgIkNlbGwgc3BhY2luZzoiOiAiIiwKKyAgICAgICAgICAgICJDb2xsYXBzZSBib3JkZXJzOiI6ICIiLAorICAgICAgICAgICAgIkNvbHM6IjogIiIsCisgICAgICAgICAgICAiRW0iOiAiIiwKKyAgICAgICAgICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiTGF5b3UiOiAiIiwKKyAgICAgICAgICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICIiLAorICAgICAgICAgICAgIk51bWJlciBvZiByb3dzIjogIiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICIiLAorICAgICAgICAgICAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAiIiwKKyAgICAgICAgICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIiIsCisgICAgICAgICAgICAiU3R5bGUgb2YgdGhlIGJvcmRlciI6ICIiLAorICAgICAgICAgICAgIldpZHRoIG9mIHRoZSB0YWJsZSI6ICIiLAorICAgICAgICAgICAgIldpZHRoIHVuaXQiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiBjb2x1bW5zIjogIiIsCisgICAgICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICAgICAgICAgIkFic2JvdHRvbSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFic21pZGRsZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkFsaWdubWVudDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJCYXNlbGluZSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJCb3JkZXIiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJCb3R0b20iOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkxheW91dCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJQZXJjZW50IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUGl4ZWxzIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJSb3dzOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNwYWNpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIldpZHRoOiI6ICI8PEhvcml6b250YWxSdWxlPj4iCisgICAgICAgIH0sCisgICAgICAgICJMYW5nTWFya3MiOiB7CisgICAgICAgICAgICAiJm1kYXNoOyBsYW5ndWFnZSAmbWRhc2g7IjogIiIsCisgICAgICAgICAgICAiJywgJyI6ICIiLAorICAgICAgICAgICAgIkVuZ2xpc2giOiAiIiwKKyAgICAgICAgICAgICJGcmVuY2giOiAiIiwKKyAgICAgICAgICAgICJHcmVlayI6ICIiLAorICAgICAgICAgICAgImxhbmd1YWdlIHNlbGVjdCI6ICIiLAorICAgICAgICAgICAgIkxhdGluIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkxpbmtlciI6IHsKKyAgICAgICAgICAgICIocHgpIjogIiIsCisgICAgICAgICAgICAiQW5jaG9yLUxpbmsiOiAiIiwKKyAgICAgICAgICAgICJBbmNob3I6IjogIiIsCisgICAgICAgICAgICAiRW1haWwgQWRkcmVzczoiOiAiIiwKKyAgICAgICAgICAgICJFbWFpbCBMaW5rIjogIiIsCisgICAgICAgICAgICAiTG9jYXRpb24gQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lbnUgQmFyOiI6ICIiLAorICAgICAgICAgICAgIk1lc3NhZ2UgVGVtcGxhdGU6IjogIiIsCisgICAgICAgICAgICAiTmV3IFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIk9yZGluYXJ5IExpbmsiOiAiIiwKKyAgICAgICAgICAgICJQb3B1cCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJQb3B1cFdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBMaW5rIjogIiIsCisgICAgICAgICAgICAiUmVzaXplYWJsZToiOiAiIiwKKyAgICAgICAgICAgICJTYW1lIFdpbmRvdyAoanVtcCBvdXQgb2YgZnJhbWVzKSI6ICIiLAorICAgICAgICAgICAgIlNjcm9sbGJhcnM6IjogIiIsCisgICAgICAgICAgICAiU2hvd3MgT24gSG92ZXIiOiAiIiwKKyAgICAgICAgICAgICJTdGF0dXMgQmFyOiI6ICIiLAorICAgICAgICAgICAgIlN1YmplY3Q6IjogIiIsCisgICAgICAgICAgICAiVGl0bGU6IjogIiIsCisgICAgICAgICAgICAiVG9vbGJhcjoiOiAiIiwKKyAgICAgICAgICAgICJVUkwgTGluayI6ICIiLAorICAgICAgICAgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICIiLAorICAgICAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTmFtZToiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJTaXplOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlRhcmdldDoiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIlVSTDoiOiAiPDxDcmVhdGVMaW5rPj4iCisgICAgICAgIH0sCisgICAgICAgICJMaXN0VHlwZSI6IHsKKyAgICAgICAgICAgICJDaG9vc2UgbGlzdCBzdHlsZSB0eXBlIChmb3Igb3JkZXJlZCBsaXN0cykiOiAiIiwKKyAgICAgICAgICAgICJEZWNpbWFsIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJMb3dlciBncmVlayBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiTG93ZXIgbGF0aW4gbGV0dGVycyI6ICIiLAorICAgICAgICAgICAgIkxvd2VyIHJvbWFuIG51bWJlcnMiOiAiIiwKKyAgICAgICAgICAgICJVcHBlciBsYXRpbiBsZXR0ZXJzIjogIiIsCisgICAgICAgICAgICAiVXBwZXIgcm9tYW4gbnVtYmVycyI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJNb290b29sc0ZpbGVNYW5hZ2VyIjogeworICAgICAgICAgICAgIkluc2VydCBGaWxlIExpbmsiOiAiIiwKKyAgICAgICAgICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiPDxMaW5rZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIk9wZXJhIjogeworICAgICAgICAgICAgIk1BUksiOiAiIiwKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBhc3RlVGV4dCI6IHsKKyAgICAgICAgICAgICJJbnNlcnQgdGV4dCBpbiBuZXcgcGFyYWdyYXBoIjogIiIsCisgICAgICAgICAgICAiUGFzdGUgYXMgUGxhaW4gVGV4dCI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiUHJlc2VydmVTY3JpcHRzIjogeworICAgICAgICAgICAgIkphdmFTY3JpcHQiOiAiIiwKKyAgICAgICAgICAgICJQSFAiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUXVpY2tUYWciOiB7CisgICAgICAgICAgICAiJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsJzogJyI6ICIiLAorICAgICAgICAgICAgIkFUVFJJQlVURVMiOiAiIiwKKyAgICAgICAgICAgICJDb2xvcnMiOiAiIiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgVEFHIHlvdSB3YW50IHRvIGluc2VydCI6ICIiLAorICAgICAgICAgICAgIk5vIENTUyBjbGFzcyBhdmFpYWJsZSI6ICIiLAorICAgICAgICAgICAgIk9rIjogIiIsCisgICAgICAgICAgICAiT1BUSU9OUyI6ICIiLAorICAgICAgICAgICAgIlF1aWNrIFRhZyBFZGl0b3IiOiAiIiwKKyAgICAgICAgICAgICJUQUdzIjogIiIsCisgICAgICAgICAgICAiVGhlcmUgYXJlIHNvbWUgdW5jbG9zZWQgcXVvdGUiOiAiIiwKKyAgICAgICAgICAgICJUaGlzIGF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgVEFHIjogIiIsCisgICAgICAgICAgICAiWW91IGhhdmUgdG8gc2VsZWN0IHNvbWUgdGV4dCI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiU2F2ZVN1Ym1pdCI6IHsKKyAgICAgICAgICAgICJpbiBwcm9ncmVzcyI6ICIiLAorICAgICAgICAgICAgIlJlYWR5IjogIiIsCisgICAgICAgICAgICAiU2F2ZSI6ICIiLAorICAgICAgICAgICAgIlNhdmluZy4uLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJTZXRJZCI6IHsKKyAgICAgICAgICAgICJJRC9OYW1lOiI6ICIiLAorICAgICAgICAgICAgIlNldCBJZCBhbmQgTmFtZSI6ICIiLAorICAgICAgICAgICAgIlNldCBJZC9OYW1lIjogIiIsCisgICAgICAgICAgICAiU2V0IElEL05hbWUiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiRGVsZXRlIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iCisgICAgICAgIH0sCisgICAgICAgICJTbWFydFJlcGxhY2UiOiB7CisgICAgICAgICAgICAiQ2xvc2luZ0RvdWJsZVF1b3RlcyI6ICIiLAorICAgICAgICAgICAgIkNsb3NpbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAgICAgIkNvbnZlcnQgYWxsIHF1b3RlcyBhbmQgZGFzaGVzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiRW5hYmxlIGF1dG9tYXRpYyByZXBsYWNlbWVudHMiOiAiIiwKKyAgICAgICAgICAgICJPcGVuaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgICAgICAgICAiT3BlbmluZ1NpbmdsZVF1b3RlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN0eWxpc3QiOiB7CisgICAgICAgICAgICAiU3R5bGVzIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIlN1cGVyQ2xlYW4iOiB7CisgICAgICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4iOiAiIiwKKyAgICAgICAgICAgICJDbGVhbiBTZWxlY3Rpb24gT25seSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIHVwIEhUTUwiOiAiIiwKKyAgICAgICAgICAgICJDbGVhbmluZyBTY29wZSI6ICIiLAorICAgICAgICAgICAgIkdlbmVyYWwgdGlkeSB1cCBhbmQgY29ycmVjdGlvbiBvZiBzb21lIHByb2JsZW1zLiI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBzZWxlY3QgZnJvbSB0aGUgZm9sbG93aW5nIGNsZWFuaW5nIG9wdGlvbnMuLi4iOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2Ugc3RhbmQgYnkgd2hpbGUgY2xlYW5pbmcgaW4gcHJvY2Vzcy4uLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBhbGlnbm1lbnQgKGxlZnQvcmlnaHQvanVzdGlmeSkuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBjbGFzc2VzIChDU1MpLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBBbGwgSFRNTCBUYWdzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGFsbCBzdHlsZXMgKENTUykuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGN1c3RvbSB0eXBlZmFjZXMgKGZvbnQgXCJzdHlsZXNcIikuIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIGVtcGhhc2lzIGFuZCBhbm5vdGF0aW9ucy4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgbGFuZyBhdHRyaWJ1dGVzLiI6ICIiLAorICAgICAgICAgICAgIlJlbW92ZSBQYXJhZ3JhcGhzIjogIiIsCisgICAgICAgICAgICAiUmVtb3ZlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cy4iOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIGRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzIHdpdGggbm9uLWRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzLiI6ICIiLAorICAgICAgICAgICAgIlZpZ29yb3VzbHkgcHVyZ2UgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiVGFibGVPcGVyYXRpb25zIjogeworICAgICAgICAgICAgIkFsbCBmb3VyIHNpZGVzIjogIiIsCisgICAgICAgICAgICAiQm9yZGVycyI6ICIiLAorICAgICAgICAgICAgIkNlbGwgUHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIkNlbGwgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIkNlbGwgVHlwZToiOiAiIiwKKyAgICAgICAgICAgICJDZWxscyBkb3duIjogIiIsCisgICAgICAgICAgICAiQ2VsbHMgdG8gdGhlIHJpZ2h0LCBhbmQiOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgY2VsbCI6ICIiLAorICAgICAgICAgICAgIkRlbGV0ZSBjb2x1bW4iOiAiIiwKKyAgICAgICAgICAgICJEZWxldGUgcm93IjogIiIsCisgICAgICAgICAgICAiRG8gTm90IENoYW5nZSI6ICIiLAorICAgICAgICAgICAgIkZyYW1lIGFuZCBib3JkZXJzIjogIiIsCisgICAgICAgICAgICAiRnJhbWVzIjogIiIsCisgICAgICAgICAgICAiSGVhZGVyICh0aCkiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY2VsbCBhZnRlciI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgY29sdW1uIGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIkluc2VydCByb3cgYWZ0ZXIiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgcm93IGJlZm9yZSI6ICIiLAorICAgICAgICAgICAgIk1lcmdlIGNlbGxzIjogIiIsCisgICAgICAgICAgICAiTWVyZ2UgY3VycmVudCBjZWxsIHdpdGg6IjogIiIsCisgICAgICAgICAgICAiTm8gcnVsZXMiOiAiIiwKKyAgICAgICAgICAgICJObyBzaWRlcyI6ICIiLAorICAgICAgICAgICAgIk5vcm1hbCAodGQpIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGNsaWNrIGludG8gc29tZSBjZWxsIjogIiIsCisgICAgICAgICAgICAiUm93IFByb3BlcnRpZXMiOiAiIiwKKyAgICAgICAgICAgICJSb3cgcHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAiIiwKKyAgICAgICAgICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGNvbHVtbnMgb25seSI6ICIiLAorICAgICAgICAgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogIiIsCisgICAgICAgICAgICAiU3BhY2luZyBhbmQgcGFkZGluZyI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IGNvbHVtbiI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IHJvdyI6ICIiLAorICAgICAgICAgICAgIlN1bW1hcnkiOiAiIiwKKyAgICAgICAgICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogIiIsCisgICAgICAgICAgICAiVGFibGUgUHJvcGVydGllcyI6ICIiLAorICAgICAgICAgICAgIlRoZSBib3R0b20gc2lkZSBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIGxlZnQtaGFuZCBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJUaGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSByaWdodC1oYW5kIHNpZGUgb25seSI6ICIiLAorICAgICAgICAgICAgIlRoZSB0b3AgYW5kIGJvdHRvbSBzaWRlcyBvbmx5IjogIiIsCisgICAgICAgICAgICAiVGhlIHRvcCBzaWRlIG9ubHkiOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjb2x1bW4gaW4gdGFibGUuIjogIiIsCisgICAgICAgICAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3Qgcm93IGluIHRhYmxlLiI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJDYXB0aW9uIjogIjw8SW5zZXJ0VGFibGU+PiIsCisgICAgICAgICAgICAiQ29sdW1ucyI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkRlc2NyaXB0aW9uIjogIjw8RnVsbFBhZ2U+PiIsCisgICAgICAgICAgICAiTWVyZ2UgQ2VsbHMiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJQYWRkaW5nIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgInBpeGVscyI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlJvd3MiOiAiPDxGb3Jtcz4+IiwKKyAgICAgICAgICAgICJTcGFjaW5nIjogIjw8SW5zZXJ0SW1hZ2U+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuc2F2ZWRDaGFuZ2VzIjogeworICAgICAgICAgICAgIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgZWRpdG9yIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIldlYktpdCI6IHsKKyAgICAgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiPDxHZWNrbz4+IgorICAgICAgICB9LAorICAgICAgICAiWGluaGEiOiB7CisgICAgICAgICAgICAiJiM4MjEyOyBmb250ICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiIsCisgICAgICAgICAgICAiJiM4MjEyOyBzaXplICYjODIxMjsiOiAiIiwKKyAgICAgICAgICAgICIxICg4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjIgKDEwIHB0KSI6ICIiLAorICAgICAgICAgICAgIjMgKDEyIHB0KSI6ICIiLAorICAgICAgICAgICAgIjQgKDE0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjUgKDE4IHB0KSI6ICIiLAorICAgICAgICAgICAgIjYgKDI0IHB0KSI6ICIiLAorICAgICAgICAgICAgIjcgKDM2IHB0KSI6ICIiLAorICAgICAgICAgICAgIkFkZHJlc3MiOiAiIiwKKyAgICAgICAgICAgICJBcmlhbCI6ICIiLAorICAgICAgICAgICAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICIiLAorICAgICAgICAgICAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogIiIsCisgICAgICAgICAgICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICIiLAorICAgICAgICAgICAgIkNsb3NlIjogIiIsCisgICAgICAgICAgICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICIiLAorICAgICAgICAgICAgIkNvcHkgc2VsZWN0aW9uIjogIiIsCisgICAgICAgICAgICAiQ291cmllciBOZXciOiAiIiwKKyAgICAgICAgICAgICJDcmVhdGUgU3RhdHVzYmFyIjogIiIsCisgICAgICAgICAgICAiQ3JlYXRlIFRvb2xiYXIiOiAiIiwKKyAgICAgICAgICAgICJDVFJMLTAgKHplcm8pIjogIiIsCisgICAgICAgICAgICAiQ1RSTC0xIC4uIENUUkwtNiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtQyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtRSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtSiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtTiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUiI6ICIiLAorICAgICAgICAgICAgIkNUUkwtUyI6ICIiLAorICAgICAgICAgICAgIkNUUkwtVSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtViI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWCI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWSI6ICIiLAorICAgICAgICAgICAgIkNUUkwtWiI6ICIiLAorICAgICAgICAgICAgIkN1dCBzZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICIiLAorICAgICAgICAgICAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIiIsCisgICAgICAgICAgICAiRWRpdG9yIEhlbHAiOiAiIiwKKyAgICAgICAgICAgICJFTlRFUiI6ICIiLAorICAgICAgICAgICAgIkVycm9yIExvYWRpbmcgWGluaGEuICBEZXZlbG9wZXJzLCBjaGVjayB0aGUgRXJyb3IgQ29uc29sZSBmb3IgaW5mb3JtYXRpb24uIjogIiIsCisgICAgICAgICAgICAiRmluaXNoaW5nIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0dGVkIjogIiIsCisgICAgICAgICAgICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIiIsCisgICAgICAgICAgICAiR2VvcmdpYSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMiI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgMyI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNCI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNSI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmcgNiI6ICIiLAorICAgICAgICAgICAgIkhlYWRpbmdzIjogIiIsCisgICAgICAgICAgICAiSW1wYWN0IjogIiIsCisgICAgICAgICAgICAiSW5pdCBlZGl0b3Igc2l6ZSI6ICIiLAorICAgICAgICAgICAgImluc2VydCBsaW5lYnJlYWsiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQvT3ZlcndyaXRlIjogIiIsCisgICAgICAgICAgICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBDb3JlIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIjogIiIsCisgICAgICAgICAgICAiTG9hZGluZyBwbHVnaW4gJHBsdWdpbiI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmcgcGx1Z2lucyI6ICIiLAorICAgICAgICAgICAgIk1TIFdvcmQgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIm5ldyBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJOb3JtYWwiOiAiIiwKKyAgICAgICAgICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICIiLAorICAgICAgICAgICAgIlBhdGgiOiAiIiwKKyAgICAgICAgICAgICJQcmludCBkb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIiIsCisgICAgICAgICAgICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAiIiwKKyAgICAgICAgICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICIiLAorICAgICAgICAgICAgIlNhdmUgYXMiOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3QgYWxsIjogIiIsCisgICAgICAgICAgICAiU2VsZWN0IENvbG9yIjogIiIsCisgICAgICAgICAgICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiIiwKKyAgICAgICAgICAgICJTSElGVC1FTlRFUiI6ICIiLAorICAgICAgICAgICAgIlNwbGl0IEJsb2NrIjogIiIsCisgICAgICAgICAgICAiVGFob21hIjogIiIsCisgICAgICAgICAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogIiIsCisgICAgICAgICAgICAiVGltZXMgTmV3IFJvbWFuIjogIiIsCisgICAgICAgICAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiIiwKKyAgICAgICAgICAgICJUb3VjaCBoZXJlIGZpcnN0IHRvIGFjdGl2YXRlIGVkaXRvci4iOiAiIiwKKyAgICAgICAgICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICIiLAorICAgICAgICAgICAgIlZlcmRhbmEiOiAiIiwKKyAgICAgICAgICAgICJXYWl0aW5nIGZvciBJZnJhbWUgdG8gbG9hZC4uLiI6ICIiLAorICAgICAgICAgICAgIldpbmdEaW5ncyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiIiwKKyAgICAgICAgICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICIiLAorICAgICAgICAgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICIiLAorICAgICAgICAgICAgIlhpbmhhIjogIiIsCisgICAgICAgICAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkJhY2tncm91bmRJbWFnZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJSZW1vdmUgQ3VycmVudCBCYWNrZ3JvdW5kIjogIiIsCisgICAgICAgICAgICAiU2V0IEJhY2tncm91bmQiOiAiIiwKKyAgICAgICAgICAgICJTZXQgcGFnZSBiYWNrZ3JvdW5kIGltYWdlIjogIiIsCisgICAgICAgICAgICAiU2V0IFBhZ2UgQmFja2dyb3VuZCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiQ2xpZW50c2lkZVNwZWxsY2hlY2siOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVjayB1c2luZyBpZVNwZWxsIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgIkV4dGVuZGVkRmlsZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIjEwJSI6ICIiLAorICAgICAgICAgICAgIjEwMCUiOiAiIiwKKyAgICAgICAgICAgICIyMDAlIjogIiIsCisgICAgICAgICAgICAiMjUlIjogIiIsCisgICAgICAgICAgICAiNTAlIjogIiIsCisgICAgICAgICAgICAiNzUlIjogIiIsCisgICAgICAgICAgICAiPkxpc3QgVmlldyI6ICIiLAorICAgICAgICAgICAgIj5UaHVtYm5haWwgVmlldyI6ICIiLAorICAgICAgICAgICAgIkE6IjogIiIsCisgICAgICAgICAgICAiQWxpZ24iOiAiIiwKKyAgICAgICAgICAgICJBbHQiOiAiIiwKKyAgICAgICAgICAgICJCb3JkZXIgQ29sb3IiOiAiIiwKKyAgICAgICAgICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJDcm9wIjogIiIsCisgICAgICAgICAgICAiRDoiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkiOiAiIiwKKyAgICAgICAgICAgICJEaXJlY3RvcnkgVXAiOiAiIiwKKyAgICAgICAgICAgICJFZGl0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiRmlsZSBNYW5hZ2VyIjogIiIsCisgICAgICAgICAgICAiRmlsZW5hbWU6IjogIiIsCisgICAgICAgICAgICAiRmlsZXNpemU6IjogIiIsCisgICAgICAgICAgICAiRmxpcCBIb3Jpem9udGFsIjogIiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICIiLAorICAgICAgICAgICAgIkZsaXAgVmVydGljYWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJHSUYiOiAiIiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiIiwKKyAgICAgICAgICAgICJIOiI6ICIiLAorICAgICAgICAgICAgIkltYWdlIEVkaXRvciI6ICIiLAorICAgICAgICAgICAgIkltYWdlIFNlbGVjdGlvbiI6ICIiLAorICAgICAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIiIsCisgICAgICAgICAgICAiSlBFRyBIaWdoIjogIiIsCisgICAgICAgICAgICAiSlBFRyBMb3ciOiAiIiwKKyAgICAgICAgICAgICJKUEVHIE1lZGl1bSI6ICIiLAorICAgICAgICAgICAgIkxvYWRpbmciOiAiIiwKKyAgICAgICAgICAgICJMb2NrIjogIiIsCisgICAgICAgICAgICAiTWFya2VyIjogIiIsCisgICAgICAgICAgICAiTWF4aW11bSBmb2xkZXIgc2l6ZSBsaW1pdCByZWFjaGVkLiBVcGxvYWQgZGlzYWJsZWQuIjogIiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICIiLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiIiwKKyAgICAgICAgICAgICJObyBGaWxlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICIiLAorICAgICAgICAgICAgIlBsZWFzZSBlbnRlciB2YWx1ZSI6ICIiLAorICAgICAgICAgICAgIlBORyI6ICIiLAorICAgICAgICAgICAgIlByZXNldCI6ICIiLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIiIsCisgICAgICAgICAgICAiUmVmcmVzaCI6ICIiLAorICAgICAgICAgICAgIlJlbmFtZSI6ICIiLAorICAgICAgICAgICAgIlJlc2l6ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSI6ICIiLAorICAgICAgICAgICAgIlJvdGF0ZSAxODAgJmRlZzsiOiAiIiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIiIsCisgICAgICAgICAgICAiUm90YXRlIEltYWdlIjogIiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiIiwKKyAgICAgICAgICAgICJTdGFydCBZOiI6ICIiLAorICAgICAgICAgICAgIlRhcmdldCBXaW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJUb2dnbGUgbWFya2VyIGNvbG9yIjogIiIsCisgICAgICAgICAgICAiVHJhc2giOiAiIiwKKyAgICAgICAgICAgICJVcGxvYWQiOiAiIiwKKyAgICAgICAgICAgICJXOiI6ICIiLAorICAgICAgICAgICAgIlg6IjogIiIsCisgICAgICAgICAgICAiWGluaGEgSW1hZ2UgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiWToiOiAiIiwKKyAgICAgICAgICAgICJab29tIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm9yZGVyIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvdHRvbSI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiQ2xlYXIiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJDb2xvciI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkNvcHkiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJDdXQiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICI8PE1vb3Rvb2xzRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIk1hcmdpbiI6ICI8PElubGluZVN0eWxlcj4+IiwKKyAgICAgICAgICAgICJNaWRkbGUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIlBhZGRpbmciOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlByZXZpZXciOiAiPDxFcXVhdGlvbj4+IiwKKyAgICAgICAgICAgICJSaWdodCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiVGV4dHRvcCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlRpdGxlICh0b29sdGlwKSI6ICI8PENyZWF0ZUxpbms+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiPDxDcmVhdGVMaW5rPj4iLAorICAgICAgICAgICAgIldpZHRoIjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJGaWx0ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRmlsdGVyIjogIjw8SW5zZXJ0U25pcHBldDI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIkh0bWxUaWR5IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQXV0by1UaWR5IjogIiIsCisgICAgICAgICAgICAiRG9uJ3QgVGlkeSI6ICIiLAorICAgICAgICAgICAgIkhUTUwgVGlkeSI6ICIiLAorICAgICAgICAgICAgIlRpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLiI6ICIiCisgICAgICAgIH0sCisgICAgICAgICJJbWFnZU1hbmFnZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQW5nbGU6IjogIiIsCisgICAgICAgICAgICAiRmxpY2tyIFBpY3R1cmUgTGlzdCI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBQaWN0dXJlcyI6ICIiLAorICAgICAgICAgICAgIkZsaWNrciBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJGbGlja3IgVXNlcm5hbWUvRW1haWwiOiAiIiwKKyAgICAgICAgICAgICJGb2xkZXIgTmFtZToiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBGb3JtYXQiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBMaXN0IjogIiIsCisgICAgICAgICAgICAiS2V5d29yZCI6ICIiLAorICAgICAgICAgICAgIk5vIEltYWdlcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFBob3RvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIk5vIFZpZGVvcyBGb3VuZCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgU2VydmVyIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJZb3VUdWJlIFVzZXJuYW1lIjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlbyBMaXN0IjogIiIsCisgICAgICAgICAgICAiWW91VHViZSBWaWRlb3MiOiAiIiwKKyAgICAgICAgICAgICJBOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQmFzZWxpbmUiOiAiPDxJbmxpbmVTdHlsZXI+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJDbGVhciI6ICI8PEZpbmRSZXBsYWNlPj4iLAorICAgICAgICAgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiQ3JvcCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkRpcmVjdG9yeSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJFZGl0IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlbmFtZToiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmxpcCBWZXJ0aWNhbCI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiR0lGIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkg6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJIZWlnaHQ6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiSW1hZ2UgRWRpdG9yIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIEhpZ2giOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkpQRUcgTG93IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJKUEVHIE1lZGl1bSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTGVmdCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxvY2siOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk1hcmtlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWVhc3VyZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5ldyBGb2xkZXIiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiTm90IHNldCI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIlBORyI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlF1YWxpdHk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZWZyZXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSZXNpemUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiUm90YXRlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgMTgwICZkZWc7IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlJvdGF0ZSBJbWFnZSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiU3RhcnQgWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlN0YXJ0IFk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlRyYXNoIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJXOiI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiV2lkdGg6IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiWDoiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIlk6IjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IgorICAgICAgICB9LAorICAgICAgICAiSW5zZXJ0TWFycXVlZSI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWx0ZXJuYXRlIjogIiIsCisgICAgICAgICAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAiIiwKKyAgICAgICAgICAgICJCZWhhdmlvcjoiOiAiIiwKKyAgICAgICAgICAgICJDb250aW51b3VzIjogIiIsCisgICAgICAgICAgICAiRGlyZWN0aW9uOiI6ICIiLAorICAgICAgICAgICAgIkluc2VydCBzY3JvbGxpbmcgbWFycXVlZSI6ICIiLAorICAgICAgICAgICAgIk1hcnF1ZWUgRWRpdG9yIjogIiIsCisgICAgICAgICAgICAiU2Nyb2xsIEFtb3VudDoiOiAiIiwKKyAgICAgICAgICAgICJTY3JvbGwgRGVsYXk6IjogIiIsCisgICAgICAgICAgICAiU2xpZGUiOiAiIiwKKyAgICAgICAgICAgICJTcGVlZCBDb250cm9sIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTmFtZSI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIk5hbWUvSUQ6IjogIjw8Rm9ybXM+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiUmlnaHQiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJUZXh0OiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIldpZHRoOiI6ICI8PEhvcml6b250YWxSdWxlPj4iCisgICAgICAgIH0sCisgICAgICAgICJJbnNlcnRQaWN0dXJlIjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm90IGRlZmluZWQiOiAiIiwKKyAgICAgICAgICAgICIgT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAgICAgICAgICJPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiLAorICAgICAgICAgICAgIlVwbG9hZCBmaWxlIjogIiIsCisgICAgICAgICAgICAiQWJzYm90dG9tIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWJzbWlkZGxlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQWxpZ25tZW50OiI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkJhc2VsaW5lIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiQm90dG9tIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkhlaWdodDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJIb3Jpem9udGFsOiI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiSW1hZ2UgVVJMOiI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIkluc2VydCBJbWFnZSI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIkxheW91dCI6ICI8PEhvcml6b250YWxSdWxlPj4iLAorICAgICAgICAgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJMZWZ0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiTWlkZGxlIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIk5vdCBzZXQiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiUHJldmlldyI6ICI8PEVxdWF0aW9uPj4iLAorICAgICAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIlJpZ2h0IjogIjw8SG9yaXpvbnRhbFJ1bGU+PiIsCisgICAgICAgICAgICAiU2l6ZSI6ICI8PEZvcm1zPj4iLAorICAgICAgICAgICAgIlNwYWNpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJUZXh0dG9wIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiVG9wIjogIjw8SW5saW5lU3R5bGVyPj4iLAorICAgICAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJWZXJ0aWNhbDoiOiAiPDxJbnNlcnRJbWFnZT4+IiwKKyAgICAgICAgICAgICJXaWR0aDoiOiAiPDxIb3Jpem9udGFsUnVsZT4+IgorICAgICAgICB9LAorICAgICAgICAiTm90ZVNlcnZlciI6IHsKKyAgICAgICAgICAgICJfXyBUUkFOU0xBVE9SIE5PVEUgX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiMTIwJSI6ICIiLAorICAgICAgICAgICAgIjE1MCUiOiAiIiwKKyAgICAgICAgICAgICI4MCUiOiAiIiwKKyAgICAgICAgICAgICJBZGQgR1VJRE8gQ29kZSBpbiBhIHRleHRib3ggb24gdGhlIHBhZ2UiOiAiIiwKKyAgICAgICAgICAgICJBZGQgTUlESSBsaW5rIHRvIGFsbG93IHN0dWRlbnRzIHRvIGhlYXIgdGhlIG11c2ljIjogIiIsCisgICAgICAgICAgICAiRm9ybWF0IjogIiIsCisgICAgICAgICAgICAiR1VJRE8gQ29kZSI6ICIiLAorICAgICAgICAgICAgIkd1aWRvIGNvZGUiOiAiIiwKKyAgICAgICAgICAgICJJbWFnZSBpbiBhcHBsZXQiOiAiIiwKKyAgICAgICAgICAgICJJbnNlcnQgR1VJRE8gTXVzaWMgTm90YXRpb24iOiAiIiwKKyAgICAgICAgICAgICJNSURJIEZpbGUiOiAiIiwKKyAgICAgICAgICAgICJTb3VyY2UgQ29kZSI6ICIiLAorICAgICAgICAgICAgIldpdGggTW96aWxsYSwgdGhlIGFwcGxldCB3aWxsIG5vdCBiZSB2aXNpYmxlIGluIGVkaXRvciwgYnV0IG9ubHkgaW4gV2ViIHBhZ2UgYWZ0ZXIgc3VibWl0dGluZy4iOiAiIiwKKyAgICAgICAgICAgICJab29tIDoiOiAiIiwKKyAgICAgICAgICAgICIxMDAlIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiSW1hZ2UgUHJldmlldyI6ICI8PEluc2VydEltYWdlPj4iLAorICAgICAgICAgICAgIk9LIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIk9wdGlvbnMiOiAiPDxGaW5kUmVwbGFjZT4+IiwKKyAgICAgICAgICAgICJQcmV2aWV3IjogIjw8RXF1YXRpb24+PiIsCisgICAgICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiWm9vbSI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlBTTG9jYWwiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUiOiAiIiwKKyAgICAgICAgICAgICJFbmFibGUgR2VhcnMgaW4gb3JkZXIgdG8gdXNlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UgYW5kIGNvbmZpZ3VyYXRpb24uIjogIiIsCisgICAgICAgICAgICAiRW5hYmxpbmcgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICAgICAgICAgIkluc3RhbGwiOiAiIiwKKyAgICAgICAgICAgICJMZWFybiBBYm91dCBMb2NhbCBTdG9yYWdlIjogIiIsCisgICAgICAgICAgICAiVGhpcyB3aWxsIHJlbG9hZCB0aGUgcGFnZSwgY2F1c2luZyB5b3UgdG8gbG9zZSBhbnkgdW5zYXZlZCB3b3JrLiAgUHJlc3MgXCJPS1wiIHRvIHJlbG9hZC4iOiAiIiwKKyAgICAgICAgICAgICJYaW5oYSB1c2VzIEdvb2dsZSBHZWFycyB0byBlbmFibGUgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZS4gIFdpdGggR2VhcnMgaW5zdGFsbGVkLCB5b3UgY2FuIHNhdmUgZHJhZnRzIG9mIHlvdXIgZG9jdW1lbnRzIG9uIHlvdXIgaGFyZCBkcml2ZSwgY29uZmlndXJlIFhpbmhhIHRvIGxvb2sgdGhlIHdheSB5b3Ugd2FudCwgYW5kIGNhcnJ5IHRoaXMgaW5mb3JtYXRpb24gd2hlcmV2ZXIgeW91IHVzZSBYaW5oYSBvbiB0aGUgd2ViLiI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IgorICAgICAgICB9LAorICAgICAgICAiUFNTZXJ2ZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQU1NFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJGaWxlOiAiOiAiIiwKKyAgICAgICAgICAgICJJbXBvcnQiOiAiIgorICAgICAgICB9LAorICAgICAgICAiUGVyc2lzdGVudFN0b3JhZ2UiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJEZXRhaWxzIjogIiIsCisgICAgICAgICAgICAiRmlsZSBCcm93c2VyIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gICAgVGhlcmUgQyAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyAgVGhlcmUgQSAiOiAiIiwKKyAgICAgICAgICAgICJIZWxsbyBcIiBUaGVyZSBCIFwiIjogIiIsCisgICAgICAgICAgICAiSGVsbG8gJyBUaGVyZSBEICciOiAiIiwKKyAgICAgICAgICAgICJMaXN0IG9mIFBsYWNlcyI6ICIiLAorICAgICAgICAgICAgIk5ldyBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIk9wZW4iOiAiIiwKKyAgICAgICAgICAgICJPcGVuIERvY3VtZW50IjogIiIsCisgICAgICAgICAgICAiUGxhY2VzIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgeW91J2QgbGlrZSB0byBjcmVhdGUuIjogIiIsCisgICAgICAgICAgICAiU2F2ZSBEb2N1bWVudCI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBlcmFzZSBhbnkgdW5zYXZlZCBjb250ZW50LiAgSWYgeW91J3JlIGNlcnRhaW4sIHBsZWFzZSBjbGljayBPSyB0byBjb250aW51ZS4iOiAiIiwKKyAgICAgICAgICAgICJXZWIgVVJMIjogIiIsCisgICAgICAgICAgICAiQ2FuY2VsIjogIjw8QWJicmV2aWF0aW9uPj4iLAorICAgICAgICAgICAgIkNvbmZpcm0iOiAiPDxQU0xvY2FsPj4iLAorICAgICAgICAgICAgIkNvcHkiOiAiPDxDb250ZXh0TWVudT4+IiwKKyAgICAgICAgICAgICJEZWxldGUiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiRGlyZWN0b3J5IFVwIjogIjw8RXh0ZW5kZWRGaWxlTWFuYWdlcj4+IiwKKyAgICAgICAgICAgICJGaWxlIExpc3QiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkZpbGUgTWFuYWdlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiRmlsZW5hbWUiOiAiPDxFeHRlbmRlZEZpbGVNYW5hZ2VyPj4iLAorICAgICAgICAgICAgIkluc2VydCI6ICI8PEluc2VydE5vdGU+PiIsCisgICAgICAgICAgICAiSW5zZXJ0IEltYWdlIjogIjw8SW5zZXJ0SW1hZ2U+PiIsCisgICAgICAgICAgICAiTmV3IEZvbGRlciI6ICI8PEV4dGVuZGVkRmlsZU1hbmFnZXI+PiIsCisgICAgICAgICAgICAiU2F2ZSI6ICI8PFNhdmVTdWJtaXQ+PiIsCisgICAgICAgICAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIjw8TGlua2VyPj4iCisgICAgICAgIH0sCisgICAgICAgICJTcGVsbENoZWNrZXIiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBTUEVMTENIRUNLRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiRGljdGlvbmFyeSI6ICIiLAorICAgICAgICAgICAgIkZpbmlzaGVkIGxpc3Qgb2YgbWlzcGVsbGVkIHdvcmRzIjogIiIsCisgICAgICAgICAgICAiSFRNTEFyZWEgU3BlbGwgQ2hlY2tlciI6ICIiLAorICAgICAgICAgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIjogIiIsCisgICAgICAgICAgICAiSWdub3JlIGFsbCI6ICIiLAorICAgICAgICAgICAgIkluZm8iOiAiIiwKKyAgICAgICAgICAgICJMZWFybiI6ICIiLAorICAgICAgICAgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICIiLAorICAgICAgICAgICAgIk9yaWdpbmFsIHdvcmQiOiAiIiwKKyAgICAgICAgICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQuICBDYWxsaW5nIHNwZWxsIGNoZWNrZXIuIjogIiIsCisgICAgICAgICAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAiIiwKKyAgICAgICAgICAgICJwbGl6IHdlaXQgOy0pIjogIiIsCisgICAgICAgICAgICAiUmUtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJSZXBsYWNlIjogIiIsCisgICAgICAgICAgICAiUmVwbGFjZSBhbGwiOiAiIiwKKyAgICAgICAgICAgICJSZXZlcnQiOiAiIiwKKyAgICAgICAgICAgICJTcGVsbCBDaGVja2VyIjogIiIsCisgICAgICAgICAgICAiU3BlbGwtY2hlY2siOiAiIiwKKyAgICAgICAgICAgICJTdWdnZXN0aW9ucyI6ICIiLAorICAgICAgICAgICAgIlRoaXMgd2lsbCBkcm9wIGNoYW5nZXMgYW5kIHF1aXQgc3BlbGwgY2hlY2tlci4gIFBsZWFzZSBjb25maXJtLiI6ICIiLAorICAgICAgICAgICAgIkNhbmNlbCI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJPSyI6ICI8PEFiYnJldmlhdGlvbj4+IiwKKyAgICAgICAgICAgICJSZXBsYWNlIHdpdGgiOiAiPDxGaW5kUmVwbGFjZT4+IgorICAgICAgICB9LAorICAgICAgICAiVGVtcGxhdGUiOiB7CisgICAgICAgICAgICAiX18gVFJBTlNMQVRPUiBOT1RFIF9fIjogIioqKiBURU1QTEFURSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIiwKKyAgICAgICAgICAgICJJbnNlcnQgdGVtcGxhdGUiOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfSwKKyAgICAgICAgIlVuRm9ybWF0IjogeworICAgICAgICAgICAgIl9fIFRSQU5TTEFUT1IgTk9URSBfXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIsCisgICAgICAgICAgICAiQWxsIjogIiIsCisgICAgICAgICAgICAiQWxsIEhUTUw6IjogIiIsCisgICAgICAgICAgICAiQ2xlYW5pbmcgQXJlYSI6ICIiLAorICAgICAgICAgICAgIkNsZWFuaW5nIG9wdGlvbnMiOiAiIiwKKyAgICAgICAgICAgICJGb3JtYXR0aW5nOiI6ICIiLAorICAgICAgICAgICAgIlBhZ2UgQ2xlYW5lciI6ICIiLAorICAgICAgICAgICAgIlNlbGVjdCB3aGljaCB0eXBlcyBvZiBmb3JtYXR0aW5nIHlvdSB3b3VsZCBsaWtlIHRvIHJlbW92ZS4iOiAiIiwKKyAgICAgICAgICAgICJTZWxlY3Rpb24iOiAiIiwKKyAgICAgICAgICAgICJDYW5jZWwiOiAiPDxBYmJyZXZpYXRpb24+PiIsCisgICAgICAgICAgICAiT0siOiAiPDxBYmJyZXZpYXRpb24+PiIKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9uYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2Q5YmQwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDc5IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIk9tIGRlbm5lIGVkaXRvciIsCisgICAgIkJhY2tncm91bmQgQ29sb3IiOiAiQmFrZ3J1bmRzZmFyZ2UiLAorICAgICJCb2xkIjogIkZldCIsCisgICAgIkJ1bGxldGVkIExpc3QiOiAiUHVua3RsaXN0ZSIsCisgICAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogIkZqZXJuZSBpbmxpbmUgZm9udCBzcGVzaWZpa2Fzam9uZXIiLAorICAgICJDb3B5IHNlbGVjdGlvbiI6ICJLb3BpZXIgb21yw6VkZSIsCisgICAgIkNyZWF0ZSBUb29sYmFyIjogIkxhZyB2ZXJrdMO4eWxpbmplIiwKKyAgICAiQ3VycmVudCBzdHlsZSI6ICJOw6V2w6ZyZW5kZSBzdGlsIiwKKyAgICAiQ3V0IHNlbGVjdGlvbiI6ICJLbGlwcCB1dCBvbXLDpWRlIiwKKyAgICAiRGVjcmVhc2UgSW5kZW50IjogIlJlZHVzZXIgaW5ucnlrayIsCisgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIkZyYSB2ZW5zdHJlIG1vdCBow7h5cmUiLAorICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJGcmEgaMO4eXJlIG1vdCB2ZW5zdHJlIiwKKyAgICAiRm9udCBDb2xvciI6ICJUZWtzdGZhcmdlIiwKKyAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiSGplbHAiLAorICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiVmFubnJldHQgbGluamUiLAorICAgICJJbmNyZWFzZSBJbmRlbnQiOiAiw5hrZSBpbm5yeWtrIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIlNldHQgaW5uIHRhYmVsbCIsCisgICAgIkluc2VydCBXZWIgTGluayI6ICJMYWcgbGVua2UiLAorICAgICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIlNldHQgaW5uIGJpbGRlIiwKKyAgICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICJTZXR0IGlubi9PdmVyc2tyaXYiLAorICAgICJJdGFsaWMiOiAiS3Vyc2l2IiwKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAiTWlkdGp1c3RlciIsCisgICAgIkp1c3RpZnkgRnVsbCI6ICJCbG9ra2p1c3RlciIsCisgICAgIkp1c3RpZnkgTGVmdCI6ICJWZW5zdHJlanVzdGVyIiwKKyAgICAiSnVzdGlmeSBSaWdodCI6ICJIw7h5cmVqdXN0ZXIiLAorICAgICJPcmRlcmVkIExpc3QiOiAiTnVtbWVyZXJ0IGxpc3RlIiwKKyAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiTGltIGlubiIsCisgICAgIlBhdGgiOiAiVGVrc3R2ZWxnZXIiLAorICAgICJQcmludCBkb2N1bWVudCI6ICJTa3JpdiB1dCBkb2t1bWVudGV0IiwKKyAgICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiR2rDuHIgb20gc2lzdGUgYW5ncmluZyIsCisgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIkZqZXJuIGZvcm1hdHRlcmluZyIsCisgICAgIlNhdmUgYXMiOiAiTGFncmUgc29tIiwKKyAgICAiU2VsZWN0IGFsbCI6ICJNZXJrIGFsdCIsCisgICAgIlNwbGl0IEJsb2NrIjogIlNlcGVyYXNqb25zYmxva2siLAorICAgICJTdHJpa2V0aHJvdWdoIjogIkdqZW5ub21zdHJla2V0IiwKKyAgICAiU3Vic2NyaXB0IjogIk5lZHNlbmtldCIsCisgICAgIlN1cGVyc2NyaXB0IjogIk9wcGjDuHlldCIsCisgICAgIlRvZ2dsZSBCb3JkZXJzIjogIlNrcnUgYXYvcMOlIGhqZWxwZWxpbmplciBww6UgdGFiZWxsZXIiLAorICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiVmlzIGtpbGRla29kZSIsCisgICAgIlVuZGVybGluZSI6ICJVbmRlcnN0cmVrZXQiLAorICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJBbmdyZXIgc2lzdGUgcmVkaWdlcmluZyIsCisgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiw5huc2tlciBkdSDDpSBmamVybmUgZmFyZ2VyIHDDpSBza3JpZnRlbiIsCisgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIsOYbnNrZXIgZHUgw6UgZmplcm5lIHNrcmlmdCBzdMO4cnJlbHNlciIsCisgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICLDmG5za2VyIGR1IMOlIGZqZXJuZSBza3JpZnR0eXBlciIsCisgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJEdSBlciBpIHRla3N0bW9kdXMgIEtsaWtrIHDDpSBbPD5dIGZvciDDpSBnw6UgdGlsYmFrZSB0aWwgV1lTSVdJRy4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAgICAgIkNvbnN0cnVjdGluZyBtYWluIG9iamVjdCI6ICJWZW5ubGlnc3QgdmVudCIsCisgICAgICAgICJFbmxhcmdlIEVkaXRvciI6ICJWaXMgaSBlZ2V0IHZpbmR1IiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJSZWRpZ2VyIGxlbmtlIiwKKyAgICAgICAgIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ICEiOiAiV1lTSVdZRyBsYXN0ZXIsIHZlbm5saWdzdCB2ZW50ISIsCisgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIkVnZXQgdmluZHUgKF9ibGFuaykiLAorICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJJbmdlbiAoYnJ1ayBzdGFuZGFyZGlubnN0aWxsaW5nKSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPdGhlciI6ICJBbm5lbiIsCisgICAgICAgICJSZWdpc3RlciBwYW5lbCBib3R0b20iOiAiUmVnaXN0cmVyIGJ1bm5wYW5lbCIsCisgICAgICAgICJSZWdpc3RlciBwYW5lbCBsZWZ0IjogIlJlZ2lzdHJlciB2ZW5zdHJlcGFuZWwiLAorICAgICAgICAiUmVnaXN0ZXIgcGFuZWwgcmlnaHQiOiAiUmVnaXN0cmVyIGjDuHlyZXBhbmVsIiwKKyAgICAgICAgIlJlZ2lzdGVyIHBhbmVsIHRvcCI6ICJSZWdpc3RyZXIgdG9wcGFuZWwiLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlNhbW1lIHJhbW1lIChfc2VsZikiLAorICAgICAgICAiVGFyZ2V0OiI6ICJNw6VsOiIsCisgICAgICAgICJUaGUgZnVsbCBzY3JlZW4gbW9kZSBpcyBrbm93biB0byBjYXVzZSBwcm9ibGVtcyB3aXRoIEludGVybmV0IEV4cGxvcmVyLCBkdWUgdG8gYnJvd3NlciBidWdzIHRoYXQgd2Ugd2VyZW4iOiAiVmlzbmluZyBpIGVnZXQgdmluZHUgaGFyIGtqZW50ZSBwcm9ibGVtZXIgbWVkIEludGVybmV0IEV4cGxvcmVyLCBww6UgZ3J1bm4gYXYgcHJvYmxlbWVyIG1lZCBkZW5uZSBuZXR0bGVzZXJlbi4gTXVsaWdlIHByb2JsZW1lciBlciBldCB1cnlkZGlnIHNramVybWJpbGRlLCBtYW5nbGVuZGUgZWRpdG9yZnVua3Nqb25lciBvZy9lbGxlciBhdCBuZXR0bGVzZXJlbiBjcmFzaGVyLiBIdmlzIGR1IGJydWtlciBXaW5kb3dzIDk1IGVsbGVyIFdpbmRvd3MgOTggZXIgZGV0IG9nc8OlIG11bGlnaGV0ZXIgZm9yIGF0IFdpbmRvd3Mgd2lsbCBjcmFzaGUuXG5cblRyeWtrICIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogIlRpdHRlbCAodG9vbHRpcCk6IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiVG9wcHJhbW1lIChfdG9wKSIsCisgICAgICAgICJVUkw6IjogIkFkcmVzc2U6IiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICJEdSBtw6Ugc2tyaXZlIGlubiBlbiBhZHJlc3NlIHNvbSBkZW5uZSBsZW5rZW4gc2thbCBwZWtlIHRpbCIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNzU5NjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL25sLmpzCkBAIC0wLDAgKzEsNjIgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiT3ZlciBkZXplIGVkaXRvciIsCisgICAgIkJhY2tncm91bmQgQ29sb3IiOiAiQWNodGVyZ3JvbmRrbGV1ciIsCisgICAgIkJvbGQiOiAiVmV0IiwKKyAgICAiQnVsbGV0ZWQgTGlzdCI6ICJPcHNvbW1pbmdzdGVrZW5zIiwKKyAgICAiQ29weSBzZWxlY3Rpb24iOiAiS29waT9yZW4iLAorICAgICJDdXJyZW50IHN0eWxlIjogIkh1aWRpZ2Ugc3RpamwiLAorICAgICJDdXQgc2VsZWN0aW9uIjogIktuaXBwZW4iLAorICAgICJEZWNyZWFzZSBJbmRlbnQiOiAiSW5zcHJpbmdpbmcgdmVya2xlaW5lbiIsCisgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIlRla3N0cmljaHRpbmcgbGlua3MgbmFhciByZWNodHMiLAorICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJUZWtzdHJpY2h0aW5nIHJlY2h0cyBuYWFyIGxpbmtzIiwKKyAgICAiRm9udCBDb2xvciI6ICJUZWtzdGtsZXVyIiwKKyAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiWGluaGEgaGVscCIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICJIb3Jpem9udGFsZSBsaWpuIiwKKyAgICAiSW5jcmVhc2UgSW5kZW50IjogIkluc3ByaW5naW5nIHZlcmdyb3RlbiIsCisgICAgIkluc2VydCBUYWJsZSI6ICJUYWJlbCBpbnZvZWdlbiIsCisgICAgIkluc2VydCBXZWIgTGluayI6ICJIeXBlcmxpbmsgaW52b2VnZW4vYWFucGFzc2VuIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJBZmJlZWxkaW5nIGludm9lZ2VuL2FhbnBhc3NlbiIsCisgICAgIkl0YWxpYyI6ICJDdXJzaWVmIiwKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAiQ2VudHJlcmVuIiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIlVpdHZ1bGxlbiIsCisgICAgIkp1c3RpZnkgTGVmdCI6ICJMaW5rcyB1aXRsaWpuZW4iLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogIlJlY2h0cyB1aXRsaWpuZW4iLAorICAgICJOb3JtYWwiOiAibm9ybWFhbCIsCisgICAgIk9yZGVyZWQgTGlzdCI6ICJOdW1tZXJpbmciLAorICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJQbGFra2VuIiwKKyAgICAiUGF0aCI6ICJQYWQiLAorICAgICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJIZXJoYWxlbiIsCisgICAgIlN0cmlrZXRocm91Z2giOiAiRG9vcmhhbGVuIiwKKyAgICAiU3Vic2NyaXB0IjogIlN1YnNjcmlwdCIsCisgICAgIlN1cGVyc2NyaXB0IjogIlN1cGVyc2NyaXB0IiwKKyAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIkhUTUwgYnJvbmNvZGUiLAorICAgICJVbmRlcmxpbmUiOiAiT25kZXJzdHJlcGVuIiwKKyAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiT25nZWRhYW4gbWFrZW4iLAorICAgICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiSmUgYmVudCBpbiBURUtTVC1tb2RlLiBHZWJydWlrIGRlIFs8Pl0ga25vcCBvbSB0ZXJ1ZyB0ZSBrZXJlbiBuYWFyIFdZU0lXWUctbW9kZS4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAgICAgIkVubGFyZ2UgRWRpdG9yIjogIlZlcmdyb290IEVkaXRvciIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSHlwZXJsaW5rIGludm9lZ2VuL2FhbnBhc3NlbiIsCisgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIk5pZXV3IHZlbnN0ZXIgKF9ibGFuaykiLAorICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJHZWVuIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk90aGVyIjogIkFuZGVyIiwKKyAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJaZWxmZGUgZnJhbWUgKF9zZWxmKSIsCisgICAgICAgICJUYXJnZXQ6IjogIkRvZWw6IiwKKyAgICAgICAgIlRoZSBmdWxsIHNjcmVlbiBtb2RlIGlzIGtub3duIHRvIGNhdXNlIHByb2JsZW1zIHdpdGggSW50ZXJuZXQgRXhwbG9yZXIsIGR1ZSB0byBicm93c2VyIGJ1Z3MgdGhhdCB3ZSB3ZXJlbiI6ICJGdWxsc2NyZWVuLW1vZGUgdmVyb29yemFha3QgcHJvYmxlbWVuIG1ldCBJbnRlcm5ldCBFeHBsb3JlciBkb29yIGJ1Z3MgaW4gZGUgd2ViYnJvd3NlciBkaWUgd2UgbmlldCBrdW5uZW4gb216ZWlsZW4uIEhpZXJkb29yIGt1bm5lbiBkZSB2b2xnZW5kZSBlZmZlY3RlbiBvcHRyZWRlbjogdmVya25vZWlkZSB0ZWtzdGVuLCBlZW4gdmVybGllcyBhYW4gZWRpdG9yLWZ1bmN0aW9uYWxpdGVpdCBlbi9vZiB3aWxsZWtldXJpZyB2YXN0bG9wZW4gdmFuIGRlIHdlYmJyb3dzZXIuIEFscyB1IFdpbmRvd3MgOTUgb2YgOTggZ2VicnVpa3QsIGlzIGhldCB6ZWVyIHdhYXJzY2hpam5saWprIGRhdCB1IGVlbiBhbGdlbWVuZSBiZXNjaGVybWluZ3Nmb3V0ICgiLAorICAgICAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUaXRlbCAodG9vbHRpcCk6IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiQm92ZW5zdGUgZnJhbWUgKF90b3ApIiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAiR2VlZiBkZSBVUkwgaW4gd2FhciBkZSBsaW5rIG5hYXIgdmVyd2lqc3QiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL3BsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9wbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTljOTNiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9wbC5qcwpAQCAtMCwwICsxLDEyMiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiYjODIxMjsgRm9ybWF0ICYjODIxMjsiLAorICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJJbmZvcm1hY2plIG8gdHltIGVkeXRvcnplIiwKKyAgICAiQWRkcmVzcyI6ICJBZHJlcyIsCisgICAgIkJhY2tncm91bmQgQ29sb3IiOiAiS29sb3IgdMWCYSIsCisgICAgIkJvbGQiOiAiUG9ncnViaWVuaWUiLAorICAgICJCdWxsZXRlZCBMaXN0IjogIld5cHVua3Rvd2FuaWUiLAorICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICJXeWNpc3ogYmV6cG/Fm3JlZG5pZSBwcnp5cGlzYW5pYSBjemNpb25layIsCisgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiV3ljennFm8SHIHRhZ2kgTVNPZmZpY2UiLAorICAgICJDb3B5IHNlbGVjdGlvbiI6ICJLb3BpdWplIHphem5hY3plbmllIGRvIHNjaG93a2EiLAorICAgICJDdXJyZW50IHN0eWxlIjogIk9iZWNueSBzdHlsIiwKKyAgICAiQ3V0IHNlbGVjdGlvbiI6ICJXeWNpbmEgemF6bmFjemVuaWUgZG8gc2Nob3drYSIsCisgICAgIkRlY3JlYXNlIEluZGVudCI6ICJabW5pZWpzeiB3Y2nEmWNpZSIsCisgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIktpZXJ1bmVrIHRla3N0dSBsZXdvLXByYXdvIiwKKyAgICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiS2llcnVuZWsgdGVrc3R1IHByYXdvLWxld28iLAorICAgICJGb250IENvbG9yIjogIktvbG9yIGN6Y2lvbmtpIiwKKyAgICAiRm9ybWF0dGVkIjogIlByZWZvcm1hdG93YW55IiwKKyAgICAiSGVhZGluZyAxIjogIk5hZ8WCw7N3ZWsgMSIsCisgICAgIkhlYWRpbmcgMiI6ICJOYWfFgsOzd2VrIDIiLAorICAgICJIZWFkaW5nIDMiOiAiTmFnxYLDs3dlayAzIiwKKyAgICAiSGVhZGluZyA0IjogIk5hZ8WCw7N3ZWsgNCIsCisgICAgIkhlYWRpbmcgNSI6ICJOYWfFgsOzd2VrIDUiLAorICAgICJIZWFkaW5nIDYiOiAiTmFnxYLDs3dlayA2IiwKKyAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiUG9tb2MiLAorICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiTGluaWEgcG96aW9tYSIsCisgICAgIkluY3JlYXNlIEluZGVudCI6ICJad2nEmWtzeiB3Y2nEmWNpZSIsCisgICAgIkluc2VydCBUYWJsZSI6ICJXc3RhdyB0YWJlbMSZIiwKKyAgICAiSW5zZXJ0IFdlYiBMaW5rIjogIldzdGF3IGFkcmVzIHNpZWNpIFdlYiIsCisgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiV3N0YXcgb2JyYXoiLAorICAgICJJdGFsaWMiOiAiUG9jaHlsZW5pZSIsCisgICAgIkp1c3RpZnkgQ2VudGVyIjogIld5xZtyb2RrdWoiLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAiV3lqdXN0dWoiLAorICAgICJKdXN0aWZ5IExlZnQiOiAiV3lyw7N3bmFqIGRvIGxld2VqIiwKKyAgICAiSnVzdGlmeSBSaWdodCI6ICJXeXLDs3duYWogZG8gcHJhd2VqIiwKKyAgICAiTm9ybWFsIjogIk5vcm1hbG55IiwKKyAgICAiT3JkZXJlZCBMaXN0IjogIk51bWVyb3dhbmllIiwKKyAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiV2tsZWphIHphd2FydG/Fm8SHIHNjaG93a2EiLAorICAgICJQYXRoIjogIsWaY2llxbxrYSIsCisgICAgIlByaW50IGRvY3VtZW50IjogIkRydWt1aiBkb2t1bWVudCIsCisgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlBvbmF3aWEgb3N0YXRuaW8gd3lrb25hbmUgcG9sZWNlbmllIiwKKyAgICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAiVXN1xYQgZm9ybWF0b3dhbmllIiwKKyAgICAiU2VsZWN0IGFsbCI6ICJaYXpuYWN6IHdzenlzdGtvIiwKKyAgICAiU3BsaXQgQmxvY2siOiAiUG9kemllbCBibG9rIiwKKyAgICAiU3RyaWtldGhyb3VnaCI6ICJQcnpla3JlxZtsZW5pZSIsCisgICAgIlN1YnNjcmlwdCI6ICJJbmRla3MgZG9sbnkiLAorICAgICJTdXBlcnNjcmlwdCI6ICJJbmRla3MgZ8Ozcm55IiwKKyAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiV8WCxIVjeiAvIHd5xYLEhWN6IHJhbWtpIiwKKyAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIkVkeWNqYSBXWVNJV1lHL3cgxbpyw7NkbGUgc3Ryb255IiwKKyAgICAiVW5kZXJsaW5lIjogIlBvZGtyZcWbbGVuaWUiLAorICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJDb2ZhIG9zdGF0bmlvIHd5a29uYW5lIHBvbGVjZW5pZSIsCisgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJKZXN0ZcWbIHcgVFJZQklFIFRFS1NUT1dZTS4gVcW8eWogcHJ6eWNpc2t1IFs8Pl0sIGFieSBwcnplxYLEhWN6ecSHIHNpxJkgbmEgdHJ5YiBXWVNJV1lHLiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICJBYnMuIGTDs8WCIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJBYnMuIMWbcm9kZWsiLAorICAgICAgICAiQWxpZ25tZW50OiI6ICJXeXLDs3duYW5pZToiLAorICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIlRla3N0IGFsdGVybmF0eXdueToiLAorICAgICAgICAiQmFzZWxpbmUiOiAiTGluaWEgYmF6b3dhIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIkdydWJvxZvEhyBvYnJhbW93YW5pYToiLAorICAgICAgICAiQm90dG9tIjogIkTDs8WCIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICJXY2nEmWNpZSBrb23Ds3JlazoiLAorICAgICAgICAiQ2VsbCBzcGFjaW5nOiI6ICJPZHN0xJlwIGtvbcOzcmVrOiIsCisgICAgICAgICJDb2xzOiI6ICJLb2x1bW46IiwKKyAgICAgICAgIkVtIjogIkVtIiwKKyAgICAgICAgIkVubGFyZ2UgRWRpdG9yIjogIlBlxYJueSBla3JhbiIsCisgICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiUG9kYWogVVJMIG9icmF6a2EiLAorICAgICAgICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICJLb2x1bW55IG8gc3RhxYJlaiBzemVyb2tvxZtjaSIsCisgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJEbGEgcHJ6ZWdsxIVkYXJlaywga3TDs3JlIG5pZSBvYnPFgnVndWrEhSBvYnJhemvDs3ciLAorICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIldjacSZY2llIHBvemlvbWUiLAorICAgICAgICAiSG9yaXpvbnRhbDoiOiAiUG96aW9tZToiLAorICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiUG9kZ2zEhWQgb2JyYXprYToiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJVUkwgb2JyYXprYToiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIldzdGF3IG9icmF6ZWsiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIldzdGF3L2VkeXR1aiBvZG5vxZtuaWsiLAorICAgICAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIkJleiByYW1layAtIHpvc3RhdyBwdXN0ZSIsCisgICAgICAgICJMZWZ0IjogIkRvIGxld2VqIiwKKyAgICAgICAgIk1pZGRsZSI6ICLFmnJvZGVrIiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTm93ZSBva25vIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiQnJhayIsCisgICAgICAgICJOb3Qgc2V0IjogIk5pZSB1c3Rhd2lvbmUiLAorICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiTGljemJhIGtvbHVtbiIsCisgICAgICAgICJOdW1iZXIgb2Ygcm93cyI6ICJMaWN6YmEgd2llcnN6eSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPdGhlciI6ICJJbm5lIiwKKyAgICAgICAgIlBlcmNlbnQiOiAiUHJvY2VudCIsCisgICAgICAgICJQaXhlbHMiOiAiUGlrc2VsaSIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIlBvenljam9ub3dhbmllIG9icmF6a2EiLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICJQb3p5Y2pvbm93YW5pZSB0YWJlbGkiLAorICAgICAgICAiUHJldmlldyI6ICJQb2RnbMSFZCIsCisgICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiUG9kZ2zEhWQgb2JyYXprYSB3IG5vd3ltIG9rbmllIiwKKyAgICAgICAgIlJpZ2h0IjogIkRvIHByYXdlaiIsCisgICAgICAgICJSb3dzOiI6ICJXaWVyc3p5OiIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiVGEgc2FtYSByYW1rYSAoX3NlbGYpIiwKKyAgICAgICAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAiUHJ6ZXN0cnplxYQgcG9tacSZZHp5IGtvbcOzcmthbWkiLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICJQcnplc3RyemXFhCBtacSZZHp5IGtyYXfEmWR6acSFIGEgemF3YXJ0b8WbY2nEhSBrb23Ds3JraSIsCisgICAgICAgICJTcGFjaW5nIjogIlNwYWNqb3dhbmllIiwKKyAgICAgICAgIlRhcmdldDoiOiAiT2tubyBkb2NlbG93ZToiLAorICAgICAgICAiVGV4dHRvcCI6ICJHw7NyYSB0ZWtzdHUiLAorICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICJQcnp5Y2lzayBXa2xlaiBuaWUgZHppYcWCYSB3IHByemVnbMSFZGFya2FjaCBNb3ppbGxhIHogdXdhZ2kgbmEgdXN0YXdpZW5pYSBiZXpwaWVjemXFhHN0d2EuIE5hY2nFm25paiBDUlRMLVYsIGFieSB3a2xlacSHIHphd2FydG/Fm8SHIHNjaG93a2EuIiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAiVHl0dcWCICh0b29sdGlwKToiLAorICAgICAgICAiVG9wIjogIkfDs3JhIiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiR8WCw7N3bmEgcmFta2EgKF90b3ApIiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIsCisgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIldjacSZY2llIHBpb25vd2UiLAorICAgICAgICAiVmVydGljYWw6IjogIlBpb25vd2U6IiwKKyAgICAgICAgIldpZHRoIG9mIHRoZSB0YWJsZSI6ICJTemVyb2tvxZvEhyB0YWJlbGkiLAorICAgICAgICAiV2lkdGggdW5pdCI6ICJKZWRub3N0a2EiLAorICAgICAgICAiV2lkdGg6IjogIlN6ZXJva2/Fm8SHOiIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAiTXVzaXN6IHBvZGHEhyBVUkwsIG5hIGpha2kgYsSZZHppZSB3c2thenl3YcWCIG9kbm/Fm25payIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNmM3NDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTc1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIiYjODIxMjsgZm9udCAmIzgyMTI7IjogIiYjODIxMjsgZm9udGUgJiM4MjEyOyIsCisgICAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiJiM4MjEyOyBmb3JtYXRvICYjODIxMjsiLAorICAgICImIzgyMTI7IHNpemUgJiM4MjEyOyI6ICImIzgyMTI7IHRhbWFuaG8gJiM4MjEyOyIsCisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIlNvYnJlIGVzdGUgZWRpdG9yIiwKKyAgICAiQWRkcmVzcyI6ICJFbmRlcmXDp28iLAorICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIkNvciBkbyBGdW5kbyIsCisgICAgIkJvbGQiOiAiTmVncml0byIsCisgICAgIkJ1bGxldGVkIExpc3QiOiAiTGlzdGEgTWFyY2Fkb3JlcyIsCisgICAgIkNUUkwtMCAoemVybykiOiAiQ1RSTC0wICh6ZXJvKSIsCisgICAgIkNUUkwtMSAuLiBDVFJMLTYiOiAiQ1RSTC0xIC4uIENUUkwtNiIsCisgICAgIkNUUkwtQSI6ICJDVFJMLUEiLAorICAgICJDVFJMLUIiOiAiQ1RSTC1CIiwKKyAgICAiQ1RSTC1DIjogIkNUUkwtQyIsCisgICAgIkNUUkwtRSI6ICJDVFJMLUUiLAorICAgICJDVFJMLUkiOiAiQ1RSTC1JIiwKKyAgICAiQ1RSTC1KIjogIkNUUkwtSiIsCisgICAgIkNUUkwtTCI6ICJDVFJMLUwiLAorICAgICJDVFJMLU4iOiAiQ1RSTC1OIiwKKyAgICAiQ1RSTC1SIjogIkNUUkwtUiIsCisgICAgIkNUUkwtUyI6ICJDVFJMLVMiLAorICAgICJDVFJMLVUiOiAiQ1RSTC1VIiwKKyAgICAiQ1RSTC1WIjogIkNUUkwtViIsCisgICAgIkNUUkwtWCI6ICJDVFJMLVgiLAorICAgICJDVFJMLVkiOiAiQ1RSTC1ZIiwKKyAgICAiQ1RSTC1aIjogIkNUUkwtWiIsCisgICAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICJMaW1wYXIgY29udGXDumRvIGNvcGlhZG8gZG8gV29yZCIsCisgICAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogIkxpbXBhciBlc3BlY2lmaWNhw6fDtWVzIGRlIGZvbnRlcyBpbmxpbmUiLAorICAgICJDbGVhciBNU09mZmljZSB0YWdzIjogIkxpbXBhciB0YWdzIGRvIE1TIE9mZmljZSIsCisgICAgIkNsb3NlIjogIkZlY2hhciIsCisgICAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAiQ29uc3RydWluZG8gb2JqZXRvIiwKKyAgICAiQ29weSBzZWxlY3Rpb24iOiAiQ29waWFyIHNlbGXDp8OjbyIsCisgICAgIkNyZWF0ZSBTdGF0dXNiYXIiOiAiQ3JpYXIgYmFycmEgZGUgaW5mb3JtYcOnw6NvIChzdGF0dXNiYXIpIiwKKyAgICAiQ3JlYXRlIFRvb2xiYXIiOiAiQ3JpYXIgQmFycmEgZGUgRmVycmFtZW50YXMiLAorICAgICJDdXJyZW50IHN0eWxlIjogIkVzdGlsbyBBdHVhbCIsCisgICAgIkN1dCBzZWxlY3Rpb24iOiAiUmVjb3J0YXIgc2VsZcOnw6NvIiwKKyAgICAiRGVjcmVhc2UgSW5kZW50IjogIkRpbWludWlyIEluZGVudGHDp8OjbyIsCisgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIkRhIGVzcXVlcmRhIHBhcmEgZGlyZWl0YSIsCisgICAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIkRhIGRpcmVpdGEgcGFyYSBlc3F1ZXJkYSIsCisgICAgIkVOVEVSIjogIkVOVEVSIiwKKyAgICAiRWRpdG9yIEhlbHAiOiAiQWp1ZGEgZG8gRWRpdG9yIiwKKyAgICAiRmluaXNoaW5nIjogIlRlcm1pbmFuZG8iLAorICAgICJGb250IENvbG9yIjogIkNvciBkYSBGb250ZSIsCisgICAgIkZvcm1hdHRlZCI6ICJGb3JtYXRhZG8iLAorICAgICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiR2VyYXIgw4FyZWEgZGUgVHJhYmFsaG8gZG8gWGluaGEiLAorICAgICJIZWFkaW5nIDEiOiAiVMOtdHVsbyAxIiwKKyAgICAiSGVhZGluZyAyIjogIlTDrXR1bG8gMiIsCisgICAgIkhlYWRpbmcgMyI6ICJUw610dWxvIDMiLAorICAgICJIZWFkaW5nIDQiOiAiVMOtdHVsbyA0IiwKKyAgICAiSGVhZGluZyA1IjogIlTDrXR1bG8gNSIsCisgICAgIkhlYWRpbmcgNiI6ICJUw610dWxvIDYiLAorICAgICJIZWFkaW5ncyI6ICJUw610dWxvcyIsCisgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIkFqdWRhIC0gVXNhbmRvIG8gZWRpdG9yIiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogIkxpbmhhIEhvcml6b250YWwiLAorICAgICJJbmNyZWFzZSBJbmRlbnQiOiAiQXVtZW50YXIgSW5kZW50YcOnw6NvIiwKKyAgICAiSW5pdCBlZGl0b3Igc2l6ZSI6ICJJbmljaWFyIHRhbWFuaG8gZG8gZWRpdG9yIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIkluc2VyaXIgVGFiZWxhIiwKKyAgICAiSW5zZXJ0IFdlYiBMaW5rIjogIkluc2VyaXIgTGluayIsCisgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiSW5zZXJpci9Nb2RpZmljYXIgSW1hZ2VtIiwKKyAgICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICJJbnNlcmlyL1NvYnJlc2NyZXZlciIsCisgICAgIkl0YWxpYyI6ICJJdMOhbGljbyIsCisgICAgIkp1c3RpZnkgQ2VudGVyIjogIkp1c3RpZmljYXIgQ2VudHJhbGl6YWRvIiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIkp1c3RpZmljYXIgQ29tcGxldGFtZW50ZSIsCisgICAgIkp1c3RpZnkgTGVmdCI6ICJKdXN0aWZpY2FyIMOgIEVzcXVlcmRhIiwKKyAgICAiSnVzdGlmeSBSaWdodCI6ICJKdXN0aWZpY2FyIMOgIERpcmVpdGEiLAorICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiQXRhbGhvcyBkZSBUZWNsYWRvIiwKKyAgICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIjogIkNhcnJlZ2FtZW50byBlbSBwcm9jZXNzby4gUG9yIGZhdm9yLCBhZ3VhcmRlISIsCisgICAgIk5vcm1hbCI6ICJOb3JtYWwiLAorICAgICJPcmRlcmVkIExpc3QiOiAiTGlzdGEgTnVtZXJhZGEiLAorICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJDb2xhciBkYSDDgXJlYSBkZSBUcmFuc2ZlcsOqbmNpYSIsCisgICAgIlBhdGgiOiAiQ2FtaW5obyIsCisgICAgIlByaW50IGRvY3VtZW50IjogIkltcHJpbWlyIGRvY3VtZW50byIsCisgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlJlZmF6ZXIgc3VhIMO6bHRpbWEgYcOnw6NvIiwKKyAgICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAiUmVtb3ZlciBmb3JtYXRhw6fDo28iLAorICAgICJTSElGVC1FTlRFUiI6ICJTSElGVC1FTlRFUiIsCisgICAgIlNhdmUgYXMiOiAiU2FsdmFyIGNvbW8iLAorICAgICJTZWxlY3QgQ29sb3IiOiAiU2VsZWNpb25hciBjb3IiLAorICAgICJTZWxlY3QgYWxsIjogIlNlbGVjaW9uYXIgdHVkbyIsCisgICAgIlNldCBmb3JtYXQgdG8gcGFyYWdyYXBoIjogIkRlZmluaXIgZm9ybWF0byBwYXJhIG8gcGFyw6FncmFmbyIsCisgICAgIlNwbGl0IEJsb2NrIjogIkRpdmlkaXIgQmxvY28iLAorICAgICJTdHJpa2V0aHJvdWdoIjogIlRhY2hhZG8iLAorICAgICJTdWJzY3JpcHQiOiAiU3Vic2NyaXRvIiwKKyAgICAiU3VwZXJzY3JpcHQiOiAiU29icmVzY3JpdG8iLAorICAgICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAiRXN0ZSBlZGl0b3IgZm9ybmVjZSBhIHNlZ3VpbnRlIGNvbWJpbmHDp8OjbyBkZSB0ZWNsYXM6IiwKKyAgICAiVG9nZ2xlIEJvcmRlcnMiOiAiTXVkYXIgQm9yZGFzIiwKKyAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIlZlciBDw7NkaWdvLUZvbnRlIiwKKyAgICAiVW5kZXJsaW5lIjogIlN1YmxpbmhhZG8iLAorICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJEZXNmYXplciBzdWEgw7psdGltYSBhw6fDo28iLAorICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIkRlc2VqYSBsaW1wYXIgYXMgY29yZXMgZGUgZm9udGUiLAorICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICJEZXNlamEgbGltcGFyIG9zIHRhbWFuaG9zIGRlIGZvbnRlIiwKKyAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogIkRlc2VqYSBsaW1wYXIgb3MgdGlwb3MgZGUgZm9udGUiLAorICAgICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiVm9jw6ogZXN0w6Egbm8gTU9ETyBURVhUTy4gIFVzZSBvIGJvdMOjbyBbPD5dIHBhcmEgbXVkYXIgcGFyYSBvIE1PRE8gVklTVUFMIChXWVNJV1lHKSIsCisgICAgImluc2VydCBsaW5lYnJlYWsiOiAiaW5zZXJpciBxdWVicmEgZGUgbGluaGEiLAorICAgICJuZXcgcGFyYWdyYXBoIjogIm5vdm8gcGFyw6FncmFmbyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFib3V0IjogIlNvYnJlIiwKKyAgICAgICAgIkFib3V0IFhpbmhhIjogIlNvYnJlIG8gWGluaGEiLAorICAgICAgICAiQWJzYm90dG9tIjogIkluZmVyaW9yIGFic29sdXRvIiwKKyAgICAgICAgIkFic21pZGRsZSI6ICJNZWlvIGFic29sdXRvIiwKKyAgICAgICAgIkFsaWdubWVudDoiOiAiQWxpbmhhbWVudG8iLAorICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIlRleHRvIGFsdGVybmF0aXZvIiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkxpbmhhIGJhc2UiLAorICAgICAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiRXNwZXNzdXJhIGRhIGJvcmRhIiwKKyAgICAgICAgIkJvdHRvbSI6ICJCb3TDo28iLAorICAgICAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAgICAgIkNlbGwgcGFkZGluZzoiOiAiRXNwYcOnYW1lbnRvIGludGVybm8gZGEgY8OpbHVsYToiLAorICAgICAgICAiQ2VsbCBzcGFjaW5nOiI6ICJFc3Bhw6dhbWVudG8gZGEgY8OpbHVsYToiLAorICAgICAgICAiQ29sbGFwc2UgYm9yZGVyczoiOiAiQm9yZGFzIGZlY2hhZGFzOiIsCisgICAgICAgICJDb2xzOiI6ICJDb2x1bmFzOiIsCisgICAgICAgICJEZXZlbG9wZXIiOiAiRGVzZW52b2x2ZWRvciIsCisgICAgICAgICJFbSI6ICJFbSIsCisgICAgICAgICJFbmxhcmdlIEVkaXRvciI6ICJFeHBhbmRpciBFZGl0b3IiLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkVudHJlIGFxdWkgY29tIGEgVVJMIGRhIGltYWdlbSIsCisgICAgICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIkNvbHVuYXMgY29tIGxhcmd1cmEgZml4YSIsCisgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJQYXJhIG5hdmVnYWRvcmVzIHF1ZSBuw6NvIHN1cG9ydGFtIGltYWdlbnMiLAorICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIkVzcGHDp2FtZW50byBpbnRlcm5vIGhvcml6b250YWwiLAorICAgICAgICAiSG9yaXpvbnRhbDoiOiAiSG9yaXpvbnRhbDoiLAorICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiVmlzdWFsaXphw6fDo28gZGEgSW1hZ2VtOiIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIlVSTCBkYSBpbWFnZW06IiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICJJbnNlcmlyIEltYWdlbSIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSW5zZXJpci9Nb2RpZmljYXIgTGluayIsCisgICAgICAgICJMYXlvdXQiOiAiRXNxdWVtYSIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIkRlaXhlIGVtIGJyYW5jbyBwYXJhIG7Do28gdGVyIGJvcmRhcyIsCisgICAgICAgICJMZWZ0IjogIkVzcXVlcmRhIiwKKyAgICAgICAgIkxpY2Vuc2UiOiAiTGljZW7Dp2EiLAorICAgICAgICAiTWlkZGxlIjogIk1laW8iLAorICAgICAgICAiTmFtZSI6ICJOb21lIiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTm92YSBqYW5lbGEgKF9ibGFuaykiLAorICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJOZW5odW0gKHVzbyBpbXBsaWNpdG8pIiwKKyAgICAgICAgIk5vdCBzZXQiOiAiTsOjbyBkZWZpbmlkbyIsCisgICAgICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICJOw7ptZXJvIGRlIGNvbHVuYXMiLAorICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAiTsO6bWVybyBkZSBsaW5oYXMiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiUGVyY2VudCI6ICJQb3JjZW50YWdlbSIsCisgICAgICAgICJQaXhlbHMiOiAiUGl4ZWxzIiwKKyAgICAgICAgIlBsdWdpbnMiOiAiUGx1Z2lucyIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIlBvc2ljaW9uYW1lbnRvIGRlc3RhIGltYWdlbSIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIlBvc2ljaW9uYW1lbnRvIGRlc3RhIHRhYmVsYSIsCisgICAgICAgICJQcmV2aWV3IjogIlZpc3VhbGl6YcOnw6NvIiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJWaXN1YWxpemFyIGEgaW1hZ2VtIGVtIHVtYSBub3ZhIGphbmVsYSIsCisgICAgICAgICJSaWdodCI6ICJEaXJlaXRhIiwKKyAgICAgICAgIlJvd3M6IjogIkxpbmhhczoiLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIk1lc21vIGZyYW1lIChfc2VsZikiLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICJFc3Bhw6dvIGVudHJlIGPDqWx1bGFzIGFkamFjZW50ZXMiLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICJFc3Bhw6dvIGVudHJlIGNvbnRlw7pkbyBlIGJvcmRhIG5hIGPDqWx1bGEiLAorICAgICAgICAiU3BhY2luZyI6ICJFc3Bhw6dhbWVudG8iLAorICAgICAgICAiU3BvbnNvcmVkIGJ5IjogIlBhdHJvY2luYWRvIHBvciIsCisgICAgICAgICJUYXJnZXQ6IjogIkRlc3Rpbm86IiwKKyAgICAgICAgIlRleHR0b3AiOiAiVGV4dG8gbm8gdG9wbyIsCisgICAgICAgICJUaGFua3MiOiAiQWdyYWRlY2ltZW50b3MiLAorICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICJPIGJvdMOjbyBDb2xhciBuw6NvIGZ1bmNpb25hIGVtIG5hdmVnYWRvcmVzIGJhc2VhZG8gbm8gTW96aWxsYSAocG9yIHJhesO1ZXMgdMOpY25pY2FzIGRlIHNlZ3VyYW7Dp2EpLiBQcmVzc2lvbmUgQ1RSTC1WIG5vIHNldSB0ZWNsYWRvIHBhcmEgY29sYXIgZGlyZXRhbWVudGUuIiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAiVMOtdHVsbyAodG9vbHRpcCkiLAorICAgICAgICAiVG9wIjogIlRvcG8iLAorICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJGcmFtZSBubyB0b3BvIChfdG9wKSIsCisgICAgICAgICJVUkw6IjogIlVSTDoiLAorICAgICAgICAiVmVyc2lvbiI6ICJWZXJzw6NvIiwKKyAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiRXNwYcOnYW1lbnRvIGludGVybm8gdmVydGljYWwiLAorICAgICAgICAiVmVydGljYWw6IjogIlZlcnRpY2FsOiIsCisgICAgICAgICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiTGFyZ3VyYSBkYSB0YWJlbGEiLAorICAgICAgICAiV2lkdGggdW5pdCI6ICJVbmlkYWRlIGRlIGxhcmd1cmEiLAorICAgICAgICAiV2lkdGg6IjogIkxhcmd1cmE6IiwKKyAgICAgICAgIlhpbmhhIEhlbHAiOiAiQWp1ZGEgZG8gWGluaGEiLAorICAgICAgICAiWW91ciBEb2N1bWVudCBpcyBub3Qgd2VsbCBmb3JtZWQuIENoZWNrIEphdmFTY3JpcHQgY29uc29sZSBmb3IgZGV0YWlscy4iOiAiU2V1IERvY3VtZW50byBuw6NvIGVzdMOhIGZvcm1hdGFkbyBjb3JyZXRhbWVudGUuIFZlcmlmaXF1ZSBvIGNvbnNvbGUgZG8gSmF2YVNjcmlwdCBwYXJhIG1haW9yZXMgZGV0YWxoZXMuIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9yby5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvcm8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk3N2Q4OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvcm8uanMKQEAgLTAsMCArMSw2MCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJybyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJEZXNwcmUgZWRpdG9yIiwKKyAgICAiQmFja2dyb3VuZCBDb2xvciI6ICJDdWxvYXJlIGRlIGZ1bmRhbCIsCisgICAgIkJvbGQiOiAiw45uZ3JvxZ9hdCIsCisgICAgIkJ1bGxldGVkIExpc3QiOiAiTGlzdMSDIG1hcmNhdMSDIiwKKyAgICAiQ29weSBzZWxlY3Rpb24iOiAiQ29waWUgw65uIGNsaXBib2FyZCIsCisgICAgIkN1cnJlbnQgc3R5bGUiOiAiU3RpbHVsIGN1cmVudCIsCisgICAgIkN1dCBzZWxlY3Rpb24iOiAiVGFpZSDDrm4gY2xpcGJvYXJkIiwKKyAgICAiRGVjcmVhc2UgSW5kZW50IjogIk1pY8Wfb3JlYXrEgyBhbGluZWF0dWwiLAorICAgICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICJEaXJlY8WjaWEgZGUgc2NyaWVyZTogc3TDom5nYSAtIGRyZWFwdGEiLAorICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJEaXJlY8WjaWEgZGUgc2NyaWVyZTogZHJlYXB0YSAtIHN0w6JuZ2EiLAorICAgICJGb250IENvbG9yIjogIkN1bG9hcmVhIHRleHR1bHVpIiwKKyAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiRG9jdW1lbnRhxaNpZSAoZGV2ZWwpIiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogIkxpbmllIG9yaXpvbnRhbMSDIiwKKyAgICAiSW5jcmVhc2UgSW5kZW50IjogIk3Eg3JlxZ90ZSBhbGluZWF0dWwiLAorICAgICJJbnNlcnQgVGFibGUiOiAiSW5zZXJlYXrEgyB1biB0YWJlbCIsCisgICAgIkluc2VydCBXZWIgTGluayI6ICJJbnNlcmVhesSDL21vZGlmaWPEgyBsaW5rIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJbnNlcmVhesSDL21vZGlmaWPEgyBpbWFnaW5lIiwKKyAgICAiSXRhbGljIjogIkl0YWxpYyIsCisgICAgIkp1c3RpZnkgQ2VudGVyIjogIkFsaW5pZXJlIHBlIGNlbnRydSIsCisgICAgIkp1c3RpZnkgRnVsbCI6ICJBbGluaWVyZSDDrm4gYW1iZWxlIHDEg3LFo2kiLAorICAgICJKdXN0aWZ5IExlZnQiOiAiQWxpbmllcmUgbGEgc3TDom5nYSIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAiQWxpbmllcmUgbGEgZHJlYXB0YSIsCisgICAgIk9yZGVyZWQgTGlzdCI6ICJMaXN0xIMgb3Jkb25hdMSDIiwKKyAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiQWR1Y2UgZGluIGNsaXBib2FyZCIsCisgICAgIlBhdGgiOiAiQ2FsZWEiLAorICAgICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJSZWZhY2UgdWx0aW1hIGFjxaNpdW5lIGFudWxhdMSDIiwKKyAgICAiU3RyaWtldGhyb3VnaCI6ICJUxINpYXQiLAorICAgICJTdWJzY3JpcHQiOiAiSW5kaWNlIGpvcyIsCisgICAgIlN1cGVyc2NyaXB0IjogIkluZGljZSBzdXMiLAorICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiU3Vyc2EgSFRNTCAvIFdZU0lXWUciLAorICAgICJVbmRlcmxpbmUiOiAiU3VibGluaWF0IiwKKyAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiQW51bGVhesSDIHVsdGltYSBhY8WjaXVuZSIsCisgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJFxZ90aSDDrm4gbW9kdWwgVEVYVC4gIEFwYXPEgyBidXRvbnVsIFs8Pl0gcGVudHJ1IGEgdGUgw65udG9hcmNlIMOubiBtb2R1bCBXWVNJV1lHLiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiLAorICAgICAgICAiRW5sYXJnZSBFZGl0b3IiOiAiTWF4aW1pemVhesSDIGVkaXRvcnVsIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJJbnNlcmVhesSDL21vZGlmY8SDIGxpbmsiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJGZXJlYXN0csSDIG5vdcSDIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiTmltaWMgKGZvbG9zZcWfdGUgY2UtaSBpbXBsaWNpdCkiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3RoZXIiOiAiQWx0IHRhcmdldCIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiQWNlZWHFn2kgZmVyZWFzdHLEgyAoX3NlbGYpIiwKKyAgICAgICAgIlRhcmdldDoiOiAixaJpbnRhOiIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogIlRpdGx1bCAodG9vbHRpcCk6IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiRmVyZWFzdHJhIHByaW5jaXBhbMSDIChfdG9wKSIsCisgICAgICAgICJVUkw6IjogIlVSTDoiLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogIlRyZWJ1aWUgc8SDIGludHJvZHVjZcWjaSB1biBVUkwiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9ydS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGNiZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9ydS5qcwpAQCAtMCwwICsxLDE1OSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICImIzgyMTI7IGZvbnQgJiM4MjEyOyI6ICImIzgyMTI7INGI0YDQuNGE0YIgJiM4MjEyOyIsCisgICAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiJiM4MjEyOyDRhNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QuNC1ICYjODIxMjsiLAorICAgICImIzgyMTI7IHNpemUgJiM4MjEyOyI6ICImIzgyMTI7INGA0LDQt9C80LXRgCAmIzgyMTI7IiwKKyAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAi0J4g0YDQtdC00LDQutGC0L7RgNC1IiwKKyAgICAiQWRkcmVzcyI6ICLQkNC00YDQtdGBIiwKKyAgICAiQmFja2dyb3VuZCBDb2xvciI6ICLQptCy0LXRgiDRhNC+0L3QsCIsCisgICAgIkJvbGQiOiAi0J/QvtC70YPQttC40YDQvdGL0LkiLAorICAgICJCdWxsZXRlZCBMaXN0IjogItCc0LDRgNC60LjRgNC+0LLQsNC90L3Ri9C5INGB0L/QuNGB0L7QuiIsCisgICAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICLQntGH0LjRgdGC0LjRgtGMINGC0LXQutGB0YIsINCy0YHRgtCw0LLQu9C10L3QvdGL0Lkg0LjQtyBXb3JkIiwKKyAgICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAi0KPQtNCw0LvQuNGC0Ywg0L3QtdC/0L7RgdGA0LXQtNGB0YLQstC10L3QvdC+0LUg0LfQsNC00LDQvdC40LUg0YjRgNC40YTRgtC+0LIiLAorICAgICJDbGVhciBNU09mZmljZSB0YWdzIjogItCj0LTQsNC70LjRgtGMINGA0LDQt9C80LXRgtC60YMgTVNPZmZpY2UiLAorICAgICJDbG9zZSI6ICLQl9Cw0LrRgNGL0YLRjCIsCisgICAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAi0KHQvtC30LTQsNC90LjQtSDQvtCx0YrQtdC60YLQsCIsCisgICAgIkNvcHkgc2VsZWN0aW9uIjogItCa0L7Qv9C40YDQvtCy0LDRgtGMIiwKKyAgICAiQ3JlYXRlIFRvb2xiYXIiOiAi0KHQvtC30LTQsNC90LjQtSDQv9Cw0L3QtdC70Lgg0LjQvdGB0YLRgNGD0LzQtdC90YLQvtCyIiwKKyAgICAiQ3VycmVudCBzdHlsZSI6ICLQotC10LrRg9GJ0LjQuSDRgdGC0LjQu9GMIiwKKyAgICAiQ3V0IHNlbGVjdGlvbiI6ICLQktGL0YDQtdC30LDRgtGMIiwKKyAgICAiRGVjcmVhc2UgSW5kZW50IjogItCj0LzQtdC90YzRiNC40YLRjCDQvtGC0YHRgtGD0L8iLAorICAgICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICLQndCw0L/RgNCw0LLQu9C10L3QuNC1INGB0LvQtdCy0LAg0L3QsNC/0YDQsNCy0L4iLAorICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICLQndCw0L/RgNCw0LLQu9C10L3QuNC1INGB0L/RgNCw0LLQsCDQvdCw0LvQtdCy0L4iLAorICAgICJFTlRFUiI6ICJFTlRFUiIsCisgICAgIkVkaXRvciBIZWxwIjogItCf0L7QvNC+0YnRjCIsCisgICAgIkZvbnQgQ29sb3IiOiAi0KbQstC10YIg0YjRgNC40YTRgtCwIiwKKyAgICAiRm9ybWF0dGVkIjogItCe0YLRhNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QvdGL0Lkg0YLQtdC60YHRgiIsCisgICAgIkhlYWRpbmcgMSI6ICLQl9Cw0LPQvtC70L7QstC+0LogMSIsCisgICAgIkhlYWRpbmcgMiI6ICLQl9Cw0LPQvtC70L7QstC+0LogMiIsCisgICAgIkhlYWRpbmcgMyI6ICLQl9Cw0LPQvtC70L7QstC+0LogMyIsCisgICAgIkhlYWRpbmcgNCI6ICLQl9Cw0LPQvtC70L7QstC+0LogNCIsCisgICAgIkhlYWRpbmcgNSI6ICLQl9Cw0LPQvtC70L7QstC+0LogNSIsCisgICAgIkhlYWRpbmcgNiI6ICLQl9Cw0LPQvtC70L7QstC+0LogNiIsCisgICAgIkhlYWRpbmdzIjogItCX0LDQs9C+0LvQvtCy0LrQuCIsCisgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogItCf0L7QvNC+0YnRjCIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICLQk9C+0YDQuNC30L7QvdGC0LDQu9GM0L3Ri9C5INGA0LDQt9C00LXQu9C40YLQtdC70YwiLAorICAgICJJbmNyZWFzZSBJbmRlbnQiOiAi0KPQstC10LvQuNGH0LjRgtGMINC+0YLRgdGC0YPQvyIsCisgICAgIkluaXQgZWRpdG9yIHNpemUiOiAi0JjQvdC40YbQuNCw0LvQuNC30LDRhtC40Y8g0YDQsNC30LzQtdGA0LAg0YDQtdC00LDQutGC0L7RgNCwIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogItCS0YHRgtCw0LLQutCwINGC0LDQsdC70LjRhtGLIiwKKyAgICAiSW5zZXJ0IFdlYiBMaW5rIjogItCS0YHRgtCw0LLQuNGC0Ywg0LPQuNC/0LXRgNGB0YHRi9C70LrRgyIsCisgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAi0JLRgdGC0LDQstC40YLRjCDQuNC30L7QsdGA0LDQttC10L3QuNC1IiwKKyAgICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICLQktGB0YLQsNCy0LrQsC/Qt9Cw0LzQtdC90LAiLAorICAgICJJdGFsaWMiOiAi0J3QsNC60LvQvtC90L3Ri9C5IiwKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAi0J/QviDRhtC10L3RgtGA0YMiLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAi0J/QviDRiNC40YDQuNC90LUiLAorICAgICJKdXN0aWZ5IExlZnQiOiAi0J/QviDQu9C10LLQvtC80YMg0LrRgNCw0Y4iLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogItCf0L4g0L/RgNCw0LLQvtC80YMg0LrRgNCw0Y4iLAorICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAi0JPQvtGA0Y/Rh9C40LUg0LrQu9Cw0LLQuNGI0LgiLAorICAgICJOb3JtYWwiOiAi0J7QsdGL0YfQvdGL0Lkg0YLQtdC60YHRgiIsCisgICAgIk9yZGVyZWQgTGlzdCI6ICLQndGD0LzQtdGA0L7QstCw0L3QvdGL0Lkg0YHQv9C40YHQvtC6IiwKKyAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAi0JLRgdGC0LDQstC40YLRjCIsCisgICAgIlBhdGgiOiAi0J/Rg9GC0YwiLAorICAgICJQcmludCBkb2N1bWVudCI6ICLQn9C10YfQsNGC0YwiLAorICAgICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLQn9C+0LLRgtC+0YDQuNGC0YwiLAorICAgICJSZWdpc3RlciBwbHVnaW4gJHBsdWdpbiI6ICLQoNC10LPQuNGB0YLRgNCw0YbQuNGPICRwbHVnaW4iLAorICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICLQo9Cx0YDQsNGC0Ywg0YTQvtGA0LzQsNGC0LjRgNC+0LLQsNC90LjQtSIsCisgICAgIlNISUZULUVOVEVSIjogIlNISUZUK0VOVEVSIiwKKyAgICAiU2F2ZSBhcyI6ICLQodC+0YXRgNCw0L3QuNGC0Ywg0LrQsNC6IiwKKyAgICAiU2VsZWN0IGFsbCI6ICLQktGL0LTQtdC70LjRgtGMINCy0YHQtSIsCisgICAgIlNldCBmb3JtYXQgdG8gcGFyYWdyYXBoIjogItCe0YLRhNC+0YDQvNCw0YLQuNGA0L7QstCw0YLRjCDQsNCx0LfQsNGGIiwKKyAgICAiU3BsaXQgQmxvY2siOiAi0KDQsNC30LTQtdC70LjRgtGMINCx0LvQvtC6IiwKKyAgICAiU3RyaWtldGhyb3VnaCI6ICLQn9C10YDQtdGH0LXRgNC60L3Rg9GC0YvQuSIsCisgICAgIlN1YnNjcmlwdCI6ICLQndC40LbQvdC40Lkg0LjQvdC00LXQutGBIiwKKyAgICAiU3VwZXJzY3JpcHQiOiAi0JLQtdGA0YXQvdC40Lkg0LjQvdC00LXQutGBIiwKKyAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogItCg0LXQtNCw0LrRgtC+0YAg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINGB0LvQtdC00YPRjtGJ0LjQtSDQutC+0LzQsdC40L3QsNGG0LjQuCDQutC70LDQstC40Yg6IiwKKyAgICAiVG9nZ2xlIEJvcmRlcnMiOiAi0JLQutC70Y7Rh9C40YLRjC/QstGL0LrQu9GO0YfQuNGC0Ywg0L7RgtC+0LHRgNCw0LbQtdC90LjQtSDQs9GA0LDQvdC40YYiLAorICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAi0J/QvtC60LDQt9Cw0YLRjCBIdG1sLdC60L7QtCIsCisgICAgIlVuZGVybGluZSI6ICLQn9C+0LTRh9C10YDQutC90YPRgtGL0LkiLAorICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLQntGC0LzQtdC90LjRgtGMIiwKKyAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICLQo9C00LDQu9C40YLRjCDRhtCy0LXRgtCwINGI0YDQuNGE0YLQvtCyID8iLAorICAgICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICLQo9C00LDQu9C40YLRjCDRgNCw0LfQvNC10YDRiyDRiNGA0LjRhNGC0L7QsiA/IiwKKyAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogItCj0LTQsNC70LjRgtGMINGC0LjQv9GLINGI0YDQuNGE0YLQvtCyPyIsCisgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICLQktGLINCyINGA0LXQttC40LzQtSDQvtGC0L7QsdGA0LDQttC10L3QuNGPIEh0bWwt0LrQvtC00LAuINC90LDQttC80LjRgtC1INC60L3QvtC/0LrRgyBbPD5dLCDRh9GC0L7QsdGLINC/0LXRgNC10LrQu9GO0YfQuNGC0YzRgdGPINCyINCy0LjQt9GD0LDQu9GM0L3Ri9C5INGA0LXQttC40LwuIiwKKyAgICAiaW5zZXJ0IGxpbmVicmVhayI6ICLQv9C10YDQtdC90L7RgSDRgdGC0YDQvtC60LgiLAorICAgICJuZXcgcGFyYWdyYXBoIjogItC90L7QstGL0Lkg0LDQsdC30LDRhiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFic2JvdHRvbSI6ICLQn9C+INC90LjQttC90LXQuSDQs9GA0LDQvdC40YbQtSIsCisgICAgICAgICJBYnNtaWRkbGUiOiAi0J/QviDRgdC10YDQtdC00LjQvdC1INGC0LXQutGB0YLQsCIsCisgICAgICAgICJBbGlnbm1lbnQ6IjogItCS0YvRgNCw0LLQvdC40LLQsNC90LjQtSIsCisgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAi0JDQu9GM0YLQtdGA0L3QsNGC0LjQstC90YvQuSDRgtC10LrRgdGCIiwKKyAgICAgICAgIkJhc2VsaW5lIjogItCf0L4g0L3QuNC20L3QtdC5INCz0YDQsNC90LjRhtC1INGC0LXQutGB0YLQsCIsCisgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICLQotC+0LvRidC40L3QsCDRgNCw0LzQutC4IiwKKyAgICAgICAgIkJvdHRvbSI6ICLQn9C+INC90LjQttC90LXQvNGDINC60YDQsNGOIiwKKyAgICAgICAgIkNhbmNlbCI6ICLQntGC0LzQtdC90LAiLAorICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICLQn9C+0LvRjyDQsiDRj9GH0LXQudC60LDRhSIsCisgICAgICAgICJDZWxsIHNwYWNpbmc6IjogItCg0LDRgdGB0YLQvtGP0L3QuNC1INC80LXQttC00YMg0Y/Rh9C10LnQutCw0LzQuCIsCisgICAgICAgICJDb2xzOiI6ICLQodGC0L7Qu9Cx0YbRiyIsCisgICAgICAgICJDb25zdHJ1Y3RpbmcgbWFpbiBvYmplY3QiOiAi0KHQvtC30LTQsNC90LjQtSDQs9C70LDQstC90L7Qs9C+INC+0LHRitC10LrRgtCwIiwKKyAgICAgICAgIkNyZWF0ZSBTdGF0dXNCYXIiOiAi0KHQvtC30LTQsNC90LjQtSDQv9Cw0L3QtdC70Lgg0YHQvtGB0YLQvtGP0L3QuNGPIiwKKyAgICAgICAgIkVtIjogImVtIiwKKyAgICAgICAgIkVubGFyZ2UgRWRpdG9yIjogItCj0LLQtdC70LjRh9C40YLRjCDRgNC10LTQsNC60YLQvtGAIiwKKyAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICLQktGB0YLQsNCy0YzRgtC1INCw0LTRgNC10YEg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyIsCisgICAgICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogItCh0YLQvtC70LHRhtGLINGE0LjQutGB0LjRgNC+0LLQsNC90L3QvtC5INGI0LjRgNC40L3RiyIsCisgICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICLQlNC70Y8g0LHRgNCw0YPQt9C10YDQvtCyLCDQutC+0YLQvtGA0YvQtSDQvdC1INC+0YLQvtCx0YDQsNC20LDRjtGCINC60LDRgNGC0LjQvdC60LgiLAorICAgICAgICAiR2VuZXJhdGUgWGluaGEgb2JqZWN0IjogItCh0L7Qt9C00LDQvdC40LUg0L7QsdGK0LXQutGC0LAgWGluaGEiLAorICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogItCT0L7RgNC40LfQvtC90YLQsNC70YzQvdGL0LUg0L/QvtC70Y8iLAorICAgICAgICAiSG9yaXpvbnRhbDoiOiAi0J/QviDQs9C+0YDQuNC30L7QvdGC0LDQu9C4IiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogItCf0YDQtdC00LLQsNGA0LjRgtC10LvRjNC90YvQuSDQv9GA0L7RgdC80L7RgtGAIiwKKyAgICAgICAgIkltYWdlIFVSTDoiOiAiVVJMINC40LfQvtCx0YDQsNC20LXQvdC40Y8iLAorICAgICAgICAiSW5pdCBJRnJhbWUiOiAi0LjQvdC40YbQuNCw0LvQuNC30LDRhtC40Y8gaWZyYW1lIiwKKyAgICAgICAgIkluc2VydCBJbWFnZSI6ICLQktGB0YLQsNCy0LrQsCDQuNC30L7QsdGA0LDQttC10L3QuNGPIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICLQktGB0YLQsNCy0LrQsC/QuNC30LzQtdC90LXQvdC40LUg0YHRgdGL0LvQutC4IiwKKyAgICAgICAgIkxheW91dCI6ICLQoNCw0YHQv9C+0LvQvtC20LXQvdC40LUiLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICLQntGB0YLQsNCy0YzRgtC1INC/0YPRgdGC0YvQvCwg0YfRgtC+0LHRiyDRg9Cx0YDQsNGC0Ywg0YDQsNC80LrRgyIsCisgICAgICAgICJMZWZ0IjogItCf0L4g0LvQtdCy0L7QvNGDINC60YDQsNGOIiwKKyAgICAgICAgIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ICEiOiAi0JfQsNCz0YDRg9C30LrQsC4uLiDQn9C+0LbQsNC70YPQudGB0YLQsCwg0L/QvtC00L7QttC00LjRgtC1LiIsCisgICAgICAgICJNaWRkbGUiOiAi0J/QvtGB0YDQtdC00LjQvdC1IiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAi0J3QvtCy0L7QtSDQvtC60L3QviAoX2JsYW5rKSIsCisgICAgICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogItCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOIiwKKyAgICAgICAgIk5vdCBzZXQiOiAi0J3QtSDRg9GB0YLQsNC90L7QstC70LXQvdC+IiwKKyAgICAgICAgIk51bWJlciBvZiBjb2x1bW5zIjogItCa0L7Qu9C40YfQtdGB0YLQstC+INGB0YLQvtC70LHRhtC+0LIiLAorICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAi0JrQvtC70LjRh9C10YHRgtCy0L4g0YHRgtGA0L7QuiIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPdGhlciI6ICLQlNGA0YPQs9C+0LUiLAorICAgICAgICAiUGVyY2VudCI6ICLQv9GA0L7RhtC10L3RgtGLIiwKKyAgICAgICAgIlBpeGVscyI6ICLQv9C40LrRgdC10LvRiyIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogItCg0LDRgdC/0L7Qu9C+0LbQtdC90LjQtSDQuNC30L7QsdGA0LDQttC10L3QuNGPIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAi0KDQsNGB0L/QvtC70L7QttC10L3QuNC1INGC0LDQsdC70LjRhtGLIiwKKyAgICAgICAgIlByZXZpZXciOiAi0J/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3Ri9C5INC/0YDQvtGB0LzQvtGC0YAiLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogItCf0YDQtdC00LLQsNGA0LjRgtC10LvRjNC90YvQuSDQv9GA0L7RgdC80L7RgtGAINCyINC+0YLQtNC10LvRjNC90L7QvCDQvtC60L3QtSIsCisgICAgICAgICJSZWdpc3RlciBwYW5lbCBib3R0b20iOiAi0KDQtdCz0LjRgdGC0YDQsNGG0LjRjyDQvdC40LbQvdC10Lkg0L/QsNC90LXQu9C4IiwKKyAgICAgICAgIlJlZ2lzdGVyIHBhbmVsIGxlZnQiOiAi0KDQtdCz0LjRgdGC0YDQsNGG0LjRjyDQu9C10LLQvtC5INC/0LDQvdC10LvQuCIsCisgICAgICAgICJSZWdpc3RlciBwYW5lbCByaWdodCI6ICLQoNC10LPQuNGB0YLRgNCw0YbQuNGPINC/0YDQsNCy0L7QuSDQv9Cw0L3QtdC70LgiLAorICAgICAgICAiUmVnaXN0ZXIgcGFuZWwgdG9wIjogItCg0LXQs9C40YHRgtGA0LDRhtC40Y8g0LLQtdGA0YXQvdC10Lkg0L/QsNC90LXQu9C4IiwKKyAgICAgICAgIlJpZ2h0IjogItCf0L4g0L/RgNCw0LLQvtC80YMg0LrRgNCw0Y4iLAorICAgICAgICAiUm93czoiOiAi0KHRgtGA0L7QutC4IiwKKyAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICLQotC+INC20LUg0L7QutC90L4gKF9zZWxmKSIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogItCg0LDRgdGB0YLQvtGP0L3QuNC1INC80LXQttC00YMg0YHQvtGB0LXQtNC90LjQvNC4INGP0YfQtdC50LrQsNC80LgiLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICLQoNCw0YHRgdGC0L7Rj9C90LjQtSDQvNC10LbQtNGDINCz0YDQsNC90LjRhtC10Lkg0Y/Rh9C10LnQutC4INC4INGC0LXQutGB0YLQvtC8IiwKKyAgICAgICAgIlNwYWNpbmciOiAi0J/QvtC70Y8iLAorICAgICAgICAiVGFyZ2V0OiI6ICLQntGC0LrRgNGL0LLQsNGC0Ywg0LIg0L7QutC90LU6IiwKKyAgICAgICAgIlRleHR0b3AiOiAi0J/QviDQstC10YDRhdC90LXQuSDQs9GA0LDQvdC40YbQtSDRgtC10LrRgdGC0LAiLAorICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICLQmtC90L7Qv9C60LAg0JLRgdGC0LDQstC40YLRjCDQvdC1INGA0LDQsdC+0YLQsNC10YIg0LIg0LHRgNCw0YPQt9C10YDQsNGFINC90LAg0L7RgdC90L7QstC1IE1vemlsbGEgKNC/0L4g0YLQtdGF0L3QuNGH0LXRgdC60LjQvCDQv9GA0LjRh9C40L3QsNC8LCDRgdCy0Y/Qt9Cw0L3QvdGL0Lwg0YEg0LHQtdC30L7Qv9Cw0YHQvdC+0YHRgtGM0Y4pLiDQndCw0LbQvNC40YLQtSBDdHJsLVYg0L3QsCDQutC70LDQstC40LDRgtGD0YDQtSwg0YfRgtC+0LHRiyDQstGB0YLQsNCy0LjRgtGMLiIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogItCS0YHQv9C70YvQstCw0Y7RidCw0Y8g0L/QvtC00YHQutCw0LfQutCwIiwKKyAgICAgICAgIlRvcCI6ICLQn9C+INCy0LXRgNGF0L3QtdC80YMg0LrRgNCw0Y4iLAorICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICLQoNC+0LTQuNGC0LXQu9GM0YHQutC+0LUg0L7QutC90L4gKF90b3ApIiwKKyAgICAgICAgIlVSTDoiOiAiVVJMOiIsCisgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogItCS0LXRgNGC0LjQutCw0LvRjNC90YvQtSDQv9C+0LvRjyIsCisgICAgICAgICJWZXJ0aWNhbDoiOiAi0J/QviDQstC10YDRgtC40LrQsNC70LgiLAorICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogItCo0LjRgNC40L3QsCDRgtCw0LHQu9C40YbRiyIsCisgICAgICAgICJXaWR0aCB1bml0IjogItCV0LTQuNC90LjRhtGLINC40LfQvNC10YDQtdC90LjRjyIsCisgICAgICAgICJXaWR0aDoiOiAi0KjQuNGA0LjQvdCwIiwKKyAgICAgICAgIlhpbmhhIEhlbHAiOiAi0J/QvtC80L7RidGMIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAi0JLRiyDQtNC+0LvQttC90Ysg0LLQstC10YHRgtC4INC60L7Qu9C40YfQtdGB0YLQstC+INGB0YLQvtC70LHRhtC+0LIiLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICLQktGLINC00L7Qu9C20L3RiyDQstCy0LXRgdGC0Lgg0LrQvtC70LjRh9C10YHRgtCy0L4g0YHRgtGA0L7QuiIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogItCS0Ysg0LTQvtC70LbQvdGLINCy0LLQtdGB0YLQuCBVUkwiLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogItCS0Ysg0LTQvtC70LbQvdGLINGD0LrQsNC30LDRgtGMIFVSTCwg0L3QsCDQutC+0YLQvtGA0YvQuSDQsdGD0LTQtdGCINGD0LrQsNC30YvQstCw0YLRjCDRgdGB0YvQu9C60LAiLAorICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogItCS0Ysg0LTQvtC70LbQvdGLINCy0YvQtNC10LvQuNGC0Ywg0YLQtdC60YHRgiwg0LrQvtGC0L7RgNGL0Lkg0LHRg9C00LXRgiDQv9GA0LXQvtCx0YDQsNC30L7QstCw0L0g0LIg0YHRgdGL0LvQutGDIiwKKyAgICAgICAgIllvdXIgRG9jdW1lbnQgaXMgbm90IHdlbGwgZm9ybWVkLiBDaGVjayBKYXZhU2NyaXB0IGNvbnNvbGUgZm9yIGRldGFpbHMuIjogItCS0LDRiCDQtNC+0LrRg9C80LXQvdGCINC90LXQv9GA0LDQstC40LvRjNC90L4g0YHRhNC+0YDQvNC40YDQvtCy0LDQvS4g0J/QvtGB0LzQvtGC0YDQuNGC0LUg0JrQvtC90YHQvtC70YwgSmF2YVNjcmlwdCwg0YfRgtC+0LHRiyDRg9C30L3QsNGC0Ywg0L/QvtC00YDQvtCx0L3QvtGB0YLQuC4iCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL3NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9zaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmFjOTgwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9zaC5qcwpAQCAtMCwwICsxLDEyMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiYjODIxMjsgRm9ybWF0ICYjODIxMjsiLAorICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJPIG92b20gZWRpdG9ydSIsCisgICAgIkFkZHJlc3MiOiAiQWRyZXNhIiwKKyAgICAiQmFja2dyb3VuZCBDb2xvciI6ICJCb2phIHBvemFkaW5lIiwKKyAgICAiQm9sZCI6ICJNYXNubyIsCisgICAgIkJ1bGxldGVkIExpc3QiOiAiTGlzdGEgc2Egc2ltYm9saW1hIiwKKyAgICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiT2JyacWhaSBkb2RlbGplbmUgb3NvYmluZSBmb250YSIsCisgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiT2JyacWhaSBNU09mZmljZSB0YWdvdmUiLAorICAgICJDb3B5IHNlbGVjdGlvbiI6ICJLb3BpcmFqIGl6YWJyYW5vIiwKKyAgICAiQ3VycmVudCBzdHlsZSI6ICJWYcW+ZcSHaSBzdGlsIiwKKyAgICAiQ3V0IHNlbGVjdGlvbiI6ICJJc2VjaSBpemFicmFubyIsCisgICAgIkRlY3JlYXNlIEluZGVudCI6ICJzbWFuamkgdXZsYcSNZW5qZSIsCisgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIlByYXZhYyBzIGxldmEgbmEgZGVzbm8iLAorICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJQcmF2YWMgcyBkZXNuYSBuYSBsZXZvIiwKKyAgICAiRm9udCBDb2xvciI6ICJCb2phIHNsb3ZhIiwKKyAgICAiRm9ybWF0dGVkIjogIkZvcm1hdGlyYW4iLAorICAgICJIZWFkaW5nIDEiOiAiWmFnbGF2bGplIDEiLAorICAgICJIZWFkaW5nIDIiOiAiWmFnbGF2bGplIDIiLAorICAgICJIZWFkaW5nIDMiOiAiWmFnbGF2bGplIDMiLAorICAgICJIZWFkaW5nIDQiOiAiWmFnbGF2bGplIDQiLAorICAgICJIZWFkaW5nIDUiOiAiWmFnbGF2bGplIDUiLAorICAgICJIZWFkaW5nIDYiOiAiWmFnbGF2bGplIDYiLAorICAgICJIZWxwIHVzaW5nIGVkaXRvciI6ICJQb21vxIcgcHJpIGtvcmnFocSHZW5qdSBlZGl0b3JhIiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogIkhvcml6b250YWxuYSBsaW5pamEiLAorICAgICJJbmNyZWFzZSBJbmRlbnQiOiAiUG92ZcSHYWogdXZsYcSNZW5qZSIsCisgICAgIkluc2VydCBUYWJsZSI6ICJVYmFjaSB0YWJlbHUiLAorICAgICJJbnNlcnQgV2ViIExpbmsiOiAiRG9kYWogd2ViIGxpbmsiLAorICAgICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIkRvZGFqL3Byb21lbmkgc2xpa3UiLAorICAgICJJdGFsaWMiOiAiS3Vyeml2IiwKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAiUmF2bmFuamUgcG8gc2ltZXRyYWxpIiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIlB1bm8gcmF2bmFuamUiLAorICAgICJKdXN0aWZ5IExlZnQiOiAiUmF2bmFuamUgdWxldm8iLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogIlJhdm5hbmplIHVkZXNubyIsCisgICAgIk5vcm1hbCI6ICJPYmnEjWFuIiwKKyAgICAiT3JkZXJlZCBMaXN0IjogIkxpc3RhIHNhIHJlZG5pbSBicm9qZXZpbWEiLAorICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJaYWxlcGkgaXoga2xpcGJvcmRhIiwKKyAgICAiUGF0aCI6ICJQdXRhbmphIiwKKyAgICAiUHJpbnQgZG9jdW1lbnQiOiAixaB0YW1wYWogZG9rdW1lbnQiLAorICAgICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJWcmHEh2EgcG9zbGVkbmp1IHJhZG5qdSIsCisgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIlVrb25pIGZvcm1hdGlyYW5qZSIsCisgICAgIlNlbGVjdCBDb2xvciI6ICJJemFiZXJpdGUgYm9qdSIsCisgICAgIlNlbGVjdCBhbGwiOiAiSXphYmVyaSBzdmUiLAorICAgICJTcGxpdCBCbG9jayI6ICJQb2RlbGkgYmxvayIsCisgICAgIlN0cmlrZXRocm91Z2giOiAiUHJlY3J0YW5vIiwKKyAgICAiU3Vic2NyaXB0IjogIkluZGVrcy10ZWtzdCIsCisgICAgIlN1cGVyc2NyaXB0IjogIkVrc3BvbmVudC10ZWtzdCIsCisgICAgIlRvZ2dsZSBCb3JkZXJzIjogIkl6bWVuaSBva3ZpcmUiLAorICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiUHJlYmFjaSBuYSBIVE1MIGtvZCIsCisgICAgIlVuZGVybGluZSI6ICJQb2R2dcSNZW5vIiwKKyAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiUG9uacWhdGF2YSBwb3NsZWRuanUgcmFkbmp1IiwKKyAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIk5hbGF6aXRlIHNlIHUgVEVYVCByZcW+aW11LiAgS29yaXN0aXRlIFs8Pl0gZHVnbWUgemEgcG92cmF0YWsgbmEgV1lTSVdZRy4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBYnNib3R0b20iOiAiQXBzb2x1dG5vIGRubyIsCisgICAgICAgICJBYnNtaWRkbGUiOiAiQXBzb2x1dG5hIHNyZWRpbmEiLAorICAgICAgICAiQWxpZ25tZW50OiI6ICJSYXZuYW5qZSIsCisgICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiQWx0ZXJuYXRpdm5pIHRla3N0IiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkRvbmphIGxpbmlqYSIsCisgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJEZWJsamluYSBva3ZpcmEiLAorICAgICAgICAiQm90dG9tIjogIkRubyIsCisgICAgICAgICJDYW5jZWwiOiAiUG9uacWhdGkiLAorICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICJVbnV0cmHFoW5qYSBvZHN0b2phbmphIHUgxIdlbGlqaSIsCisgICAgICAgICJDZWxsIHNwYWNpbmc6IjogIlJhc3RvamFuamUgxIdlbGlqYSIsCisgICAgICAgICJDb2xzOiI6ICJLb2xvbmUiLAorICAgICAgICAiRW0iOiAiRW0iLAorICAgICAgICAiRW5sYXJnZSBFZGl0b3IiOiAiUG92ZcSHYWogZWRpdG9yIiwKKyAgICAgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICJVbmVzaXRlIFVSTCBzbGlrZSBvdmRlIiwKKyAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiRmlrc2lyYW5hIMWhaXJpbmEga29sb25hIiwKKyAgICAgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIlphIHByZXRyYcW+aXZhxI1lIGtvamkgbmUgcG9kcsW+YXZhanUgc2xpa2UiLAorICAgICAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIkhvcml6b250YWxubyBvZHN0b2phbmplIiwKKyAgICAgICAgIkhvcml6b250YWw6IjogIlBvIGhvcml6b250YWxpIiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogIlByZWdsZWQgc2xpa2UiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICJVUkwgc2xpa2UiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIlViYWNpIHNsaWt1IiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJEb2Rhai9wcm9tZW5pIExpbmsiLAorICAgICAgICAiTGF5b3V0IjogIlByZWxvbSIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIk9zdGF2aSBwcmF6bm8ga2FkIG5lbWEgb2t2aXJhIiwKKyAgICAgICAgIkxlZnQiOiAiTGV2byIsCisgICAgICAgICJNaWRkbGUiOiAiU3JlZGluYSIsCisgICAgICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIk5vdm9tIHByb3pvcnUgKF9ibGFuaykiLAorICAgICAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJrb3Jpc3RpIHBvZHJhenVtZXZhbm8iLAorICAgICAgICAiTm90IHNldCI6ICJOaWplIHBvc3RhdmxqZW5vIiwKKyAgICAgICAgIk51bWJlciBvZiBjb2x1bW5zIjogIkJyb2oga29sb25hIiwKKyAgICAgICAgIk51bWJlciBvZiByb3dzIjogIkJyb2ogcmVkb3ZhIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk90aGVyIjogIkRydWdvIiwKKyAgICAgICAgIlBlcmNlbnQiOiAiUHJvY2VuYXQiLAorICAgICAgICAiUGl4ZWxzIjogIlBpa3NlbGkiLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJQb3N0YXZsamFuamUgb3ZlIHNsaWtlIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiUG9zdGF2bGphbmplIG92ZSB0YWJlbGUiLAorICAgICAgICAiUHJldmlldyI6ICJQcmVnbGVkIiwKKyAgICAgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJQcmVnbGVkYWogc2xpa3UgdSBub3ZvbSBwcm96b3J1IiwKKyAgICAgICAgIlJpZ2h0IjogIkRlc25vIiwKKyAgICAgICAgIlJvd3M6IjogIlJlZG92aSIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiSXN0aSBmcmVqbSAoX3NlbGYpIiwKKyAgICAgICAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAiUmFzdG9qYW5qZSBuYXNwcmFtbmloIMSHZWxpamEiLAorICAgICAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICJSYXN0b2phbmplIGl6bWXEkXUgc2FkcsW+YWphIGkgb2t2aXJhIMSHZWxpamUiLAorICAgICAgICAiU3BhY2luZyI6ICJSYXptYWsiLAorICAgICAgICAiVGFyZ2V0OiI6ICJPdHZvcmkgdToiLAorICAgICAgICAiVGV4dHRvcCI6ICJWcmggdGVrc3RhIiwKKyAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAiTmF6aXYgKHRvb2x0aXApOiIsCisgICAgICAgICJUb3AiOiAiVnJoIiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiR2xhdm5pIGZyZWptIChfdG9wKSIsCisgICAgICAgICJVUkw6IjogIlVSTDoiLAorICAgICAgICAiVmVydGljYWwgcGFkZGluZyI6ICJWZXJ0aWthbG5vIG9kc3RvamFuamUiLAorICAgICAgICAiVmVydGljYWw6IjogIlBvIHZlcnRpa2FsaSIsCisgICAgICAgICJXaWR0aCBvZiB0aGUgdGFibGUiOiAixaBpcmluYSB0YWJlbGUiLAorICAgICAgICAiV2lkdGggdW5pdCI6ICJKZWRpbmljYSDFoWlyaW5lIiwKKyAgICAgICAgIldpZHRoOiI6ICLFoGlyaW5hIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICJNb3JhdGUgdW5ldGkgVVJMIG5hIGtvamkgdm9kaSBvdmFqIGxpbmsiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL3NpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9zaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjYwMzczCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9zaS5qcwpAQCAtMCwwICsxLDQ4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIlZpeml0a2EgemEgdXJlamV2YWxuaWsiLAorICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIkJhcnZhIG96YWRqYSIsCisgICAgIkJvbGQiOiAiS3JlcGtvIiwKKyAgICAiQnVsbGV0ZWQgTGlzdCI6ICJPem5hxI1ldmFuamUiLAorICAgICJDb3B5IHNlbGVjdGlvbiI6ICJLb3BpcmFqIiwKKyAgICAiQ3VycmVudCBzdHlsZSI6ICJUcmVudXRuaSBzbG9nIiwKKyAgICAiQ3V0IHNlbGVjdGlvbiI6ICJJenJlxb5pIiwKKyAgICAiRGVjcmVhc2UgSW5kZW50IjogIlptYW5qxaFhaiB6YW1payIsCisgICAgIkZvbnQgQ29sb3IiOiAiQmFydmEgcGlzYXZlIiwKKyAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiUG9tb8SNIHphIHVyZWpldmFsbmlrIiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogIlZvZG9yYXZuYSDEjXJ0YSIsCisgICAgIkluY3JlYXNlIEluZGVudCI6ICJQb3ZlxI1haiB6YW1payIsCisgICAgIkluc2VydCBUYWJsZSI6ICJWc3RhdmkgdGFiZWxvIiwKKyAgICAiSW5zZXJ0IFdlYiBMaW5rIjogIlZzdGF2aSBoaXBlcnBvdmV6YXZvIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJWc3Rhdmkgc2xpa28iLAorICAgICJJdGFsaWMiOiAiTGXFvmXEjWUiLAorICAgICJKdXN0aWZ5IENlbnRlciI6ICJOYSBzcmVkaW5vIiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIlBvcmF6ZGVsaSB2c2ViaW5vIiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogIlBvcmF2bmFqIGxldm8iLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogIlBvcmF2bmFqIGRlc25vIiwKKyAgICAiT3JkZXJlZCBMaXN0IjogIk/FoXRldmlsxI1ldmFuamUiLAorICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJQcmlsZXBpIiwKKyAgICAiUGF0aCI6ICJQb3QiLAorICAgICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJVdmVsamF2aSB6YWRuam8gYWtjaWpvIiwKKyAgICAiU3RyaWtldGhyb3VnaCI6ICJQcmXEjXJ0YW5vIiwKKyAgICAiU3Vic2NyaXB0IjogIlBvZHBpc2FubyIsCisgICAgIlN1cGVyc2NyaXB0IjogIk5hZHBpc2FubyIsCisgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJQcmVrbG9waSBuYSBIVE1MIGtvZG8iLAorICAgICJVbmRlcmxpbmUiOiAiUG9kxI1ydGFubyIsCisgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlJhenZlbGphdmkgemFkbmpvIGFrY2lqbyIsCisgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJTaSB2IHRla3N0b3ZuZW0gbmHEjWludS4gIFVwb3JhYmkgWzw+XSBndW1iIHphIHBya2xvcCBuYXphaiBuYSBXWVNJV1lHLiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiLAorICAgICAgICAiRW5sYXJnZSBFZGl0b3IiOiAiUG92ZcSNYWogdXJlamV2YWxuaWsiLAorICAgICAgICAiT0siOiAiViByZWR1IgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy9zci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvc3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlMGM3MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvc3IuanMKQEAgLTAsMCArMSwxMjMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICImIzgyMTI7IEZvcm1hdCAmIzgyMTI7IiwKKyAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAi0J4g0L7QstC+0Lwg0LXQtNC40YLQvtGA0YMiLAorICAgICJBZGRyZXNzIjogItCw0LTRgNC10YHQsCIsCisgICAgIkJhY2tncm91bmQgQ29sb3IiOiAi0JHQvtGY0LAg0L/QvtC30LDQtNC40L3QtSIsCisgICAgIkJvbGQiOiAi0JzQsNGB0L3QviIsCisgICAgIkJ1bGxldGVkIExpc3QiOiAi0JvQuNGB0YLQsCDRgdCwINGB0LjQvNCx0L7Qu9C40LzQsCIsCisgICAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogItCe0LHRgNC40YjQuCDQv9GA0LjQvNC10ZrQtdC90LUg0L7RgdC+0LHQuNC90LUg0YTQvtC90YLQsCIsCisgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAi0J7QsdGA0LjRiNC4IE1TT2ZmaWNlINGC0LDQs9C+0LLQtSIsCisgICAgIkNvcHkgc2VsZWN0aW9uIjogItCa0L7Qv9C40YDQsNGYINC40LfQsNCx0YDQsNC90L4iLAorICAgICJDdXJyZW50IHN0eWxlIjogItCS0LDQttC10ZvQuCDRgdGC0LjQuyIsCisgICAgIkN1dCBzZWxlY3Rpb24iOiAi0JjRgdC10YbQuCDQuNC30LDQsdGA0LDQvdC+IiwKKyAgICAiRGVjcmVhc2UgSW5kZW50IjogItCh0LzQsNGa0Lgg0YPQstC70LDRh9C10ZrQtSIsCisgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogItCf0YDQsNCy0LDRhiDRgSDQu9C10LLQsCDQvdCwINC00LXRgdC90L4iLAorICAgICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICLQn9GA0LDQstCw0YYg0YEg0LTQtdGB0L3QsCDQvdCwINC70LXQstC+IiwKKyAgICAiRm9udCBDb2xvciI6ICLQkdC+0ZjQsCDRgdC70L7QstCwIiwKKyAgICAiRm9ybWF0dGVkIjogItGE0L7RgNC80LDRgtC40YDQsNC9IiwKKyAgICAiSGVhZGluZyAxIjogItCX0LDQs9C70LDQstGZ0LUgMSIsCisgICAgIkhlYWRpbmcgMiI6ICLQl9Cw0LPQu9Cw0LLRmdC1IDIiLAorICAgICJIZWFkaW5nIDMiOiAi0JfQsNCz0LvQsNCy0ZnQtSAzIiwKKyAgICAiSGVhZGluZyA0IjogItCX0LDQs9C70LDQstGZ0LUgNCIsCisgICAgIkhlYWRpbmcgNSI6ICLQl9Cw0LPQu9Cw0LLRmdC1IDUiLAorICAgICJIZWFkaW5nIDYiOiAi0JfQsNCz0LvQsNCy0ZnQtSA2IiwKKyAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAi0J/QvtC80L7RmyDQv9GA0Lgg0LrQvtGA0LjRiNGb0LXRmtGDINC10LTQuNGC0L7RgNCwIiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogItCl0L7RgNC40LfQvtC90YLQsNC70L3QsCDQu9C40L3QuNGY0LAiLAorICAgICJJbmNyZWFzZSBJbmRlbnQiOiAi0J/QvtCy0LXRm9Cw0Zgg0YPQstC70LDRh9C10ZrQtSIsCisgICAgIkluc2VydCBUYWJsZSI6ICLQo9Cx0LDRhtC4INGC0LDQsdC10LvRgyIsCisgICAgIkluc2VydCBXZWIgTGluayI6ICLQtNC+0LTQsNGYINCy0LXQsSDQu9C40L3QuiIsCisgICAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAi0LTQvtC00LDRmC/Qv9GA0L7QvNC10L3QuCDRgdC70LjQutGDIiwKKyAgICAiSXRhbGljIjogItCa0YPRgNC30LjQsiIsCisgICAgIkp1c3RpZnkgQ2VudGVyIjogItCg0LDQstC90LDRmtC1INC/0L4g0YHQuNC80LXRgtGA0LDQu9C4IiwKKyAgICAiSnVzdGlmeSBGdWxsIjogItCf0YPQvdC+INGA0LDQstC90LDRmtC1IiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogItCg0LDQstC90LDRmtC1INGD0LvQtdCy0L4iLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogItCg0LDQstC90LDRmtC1INGD0LTQtdGB0L3QviIsCisgICAgIk5vcm1hbCI6ICLQvtCx0LjRh9Cw0L0iLAorICAgICJPcmRlcmVkIExpc3QiOiAi0JvQuNGB0YLQsCDRgdCwINGA0LXQtNC90LjQvCDQsdGA0L7RmNC10LLQuNC80LAiLAorICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICLQl9Cw0LvQtdC/0Lgg0LjQtyDQutC70LjQv9Cx0L7RgNC00LAiLAorICAgICJQYXRoIjogItCf0YPRgtCw0ZrQsCIsCisgICAgIlByaW50IGRvY3VtZW50IjogItCo0YLQsNC80L/QsNGYINC00L7QutGD0LzQtdC90YIiLAorICAgICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLQktGA0LDRm9CwINC/0L7RgdC70LXQtNGa0YMg0YDQsNC00ZrRgyIsCisgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogItCj0LrQu9C+0L3QuCDRhNC+0YDQvNCw0YLQuNGA0LDRmtC1IiwKKyAgICAiU2VsZWN0IENvbG9yIjogItCY0LfQsNCx0LXRgNC4INCx0L7RmNGDIiwKKyAgICAiU2VsZWN0IGFsbCI6ICLQmNC30LDQsdC10YDQuCDRgdCy0LUiLAorICAgICJTcGxpdCBCbG9jayI6ICLQn9C+0LTQtdC70Lgg0LHQu9C+0LoiLAorICAgICJTdHJpa2V0aHJvdWdoIjogItCf0YDQtdGG0YDRgtCw0L3QviIsCisgICAgIlN1YnNjcmlwdCI6ICLQmNC90LTQtdC60YEt0YLQtdC60YHRgiIsCisgICAgIlN1cGVyc2NyaXB0IjogItCV0LrRgdC/0L7QvdC10L3Rgi3RgtC10LrRgdGCIiwKKyAgICAiVG9nZ2xlIEJvcmRlcnMiOiAi0J/RgNC10LHQsNGG0Lgg0L7QutCy0LjRgNC90LUg0LvQuNC90LjRmNC1IiwKKyAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogItCf0YDQtdCx0LDRhtC4INC90LAg0L/RgNC40LrQsNC3INCl0KLQnNCbINC60L7QtNCwIiwKKyAgICAiVW5kZXJsaW5lIjogItCf0L7QtNCy0YPRh9C10L3QviIsCisgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogItCf0L7QvdC40YjRgtCw0LLQsCDQv9C+0YHQu9C10LTRmtGDINGA0LDQtNGa0YMiLAorICAgICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAi0J3QsNC70LDQt9C40YLQtSDRgdC1INGDINCi0JXQmtCh0KIg0YDQtdC20LjQvNGDLiAg0JrQvtGA0LjRgdGC0LjRgtC1IFs8Pl0g0LTRg9Cz0LzQtSDQt9CwINC/0L7QstGA0LDRgtCw0Log0L3QsCDQqNCS0KLQmNCUIChXWVNJV1lHKS4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBYnNib3R0b20iOiAi0JDQv9GB0L7Qu9GD0YLQvdC+INC00L3QviIsCisgICAgICAgICJBYnNtaWRkbGUiOiAi0JDQv9GB0L7Qu9GD0YLQvdCwINGB0YDQtdC00LjQvdCwIiwKKyAgICAgICAgIkFsaWdubWVudDoiOiAi0KDQsNCy0L3QsNGa0LUiLAorICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogItCw0LvRgtC10YDQvdCw0YLQuNCy0L3QuCDRgtC10LrRgdGCIiwKKyAgICAgICAgIkJhc2VsaW5lIjogItCU0L7RmtCwINC70LjQvdC40ZjQsCIsCisgICAgICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICLQlNC10LHRmdC40L3QsCDQvtC60LLQuNGA0LAiLAorICAgICAgICAiQm90dG9tIjogItCU0L3QviIsCisgICAgICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiLAorICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICLQo9C90YPRgtGA0LDRiNGa0LAg0L7QtNGB0YLQvtGY0LDRmtCwINC+0LQg0LjQstC40YbQsCDRm9C10LvQuNGY0LUiLAorICAgICAgICAiQ2VsbCBzcGFjaW5nOiI6ICLQoNCw0LfQvNCw0Log0LjQt9C80LXRktGDINGb0LXQu9C40ZjQsCIsCisgICAgICAgICJDb2xzOiI6ICLQmtC+0LvQvtC90LUiLAorICAgICAgICAiRW0iOiAi0JXQvCIsCisgICAgICAgICJFbmxhcmdlIEVkaXRvciI6ICLQn9C+0LLQtdGb0LDRmCDQtdC00LjRgtC+0YAiLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogItCj0L3QtdGB0LjRgtC1INCj0KDQmyDRgdC70LjQutC1INC+0LLQtNC1IiwKKyAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAi0KTQuNC60YHQuNGA0LDQvdCwINGI0LjRgNC40L3QsCDQutC+0LvQvtC90LUiLAorICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAi0JfQsCDQv9GA0LXRgtGA0LDQttC40LLQsNGH0LUg0LrQvtGY0Lgg0L3QtSDQv9C+0LTRgNC20LDQstCw0ZjRgyDRgdC70LjQutC1IiwKKyAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICLQpdC+0YDRgtC40LfQvtC90YLQsNC70L3QviDQvtC00YHRgtC+0ZjQsNGa0LUiLAorICAgICAgICAiSG9yaXpvbnRhbDoiOiAi0J/QviDRhdC+0YDQuNC30L7QvdGC0LDQu9C4IiwKKyAgICAgICAgIkltYWdlIFByZXZpZXc6IjogItCf0YDQtdCz0LvQtdC0INGB0LvQuNC60LUiLAorICAgICAgICAiSW1hZ2UgVVJMOiI6ICLQo9Cg0Jsg0YHQu9C40LrQtSIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAi0KPQsdCw0YbQuCDRgdC70LjQutGDIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICLQtNC+0LTQsNGYL9C/0YDQvtC80LXQvdC4INC70LjQvdC6IiwKKyAgICAgICAgIkxheW91dCI6ICLQn9GA0LXQu9C+0LwiLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICLQntGB0YLQsNCy0Lgg0L/RgNCw0LfQvdC+INC60LDQtCDQvdC10LzQsCDQvtC60LLQuNGA0LAiLAorICAgICAgICAiTGVmdCI6ICLQm9C10LLQviIsCisgICAgICAgICJNaWRkbGUiOiAi0KHRgNC10LTQuNC90LAiLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICLQndC+0LLQvtC8INC/0YDQvtC30L7RgNGDIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi0LrQvtGA0LjRgdGC0Lgg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90L4iLAorICAgICAgICAiTm90IHNldCI6ICLQndC40ZjQtSDQv9C+0YHRgtCw0LLRmdC10L3QviIsCisgICAgICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICLQkdGA0L7RmCDQutC+0LvQvtC90LAiLAorICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAi0JHRgNC+0Zgg0YDQtdC00L7QstCwIiwKKyAgICAgICAgIk9LIjogIk9LIiwKKyAgICAgICAgIk90aGVyIjogItCU0YDRg9Cz0L4iLAorICAgICAgICAiUGVyY2VudCI6ICLQn9GA0L7RhtC10L3QsNGC0LAiLAorICAgICAgICAiUGl4ZWxzIjogItCf0LjQutGB0LXQu9CwIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAi0J/QvtGB0YLQsNCy0ZnQsNGa0LUg0L7QstC1INGB0LvQuNC60LUiLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICLQn9C+0YHRgtCw0LLRmdCw0ZrQtSDQvtCy0LUg0YLQsNCx0LXQu9C1IiwKKyAgICAgICAgIlByZXZpZXciOiAi0J/RgNC10LPQu9C10LQiLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogItCf0YDQtdCz0LvQtdC00LDRmCDRgdC70LjQutGDINGDINC90L7QstC+0Lwg0L/RgNC+0LfQvtGA0YMiLAorICAgICAgICAiUmlnaHQiOiAi0JTQtdGB0L3QviIsCisgICAgICAgICJSb3dzOiI6ICLQoNC10LTQvtCy0LgiLAorICAgICAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogItCY0YHRgtC4INGE0YDQtdGY0LwgKF9zZWxmKSIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogItCg0LDQt9C80LDQuiDQuNC30LzQtdGS0YMg0L3QsNGB0L/RgNCw0LzQvdC40YUg0ZvQtdC70LjRmNCwIiwKKyAgICAgICAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAi0KDQsNGB0YLQvtGY0LDRmtC1INC40LfQvNC10ZLRgyDRgdCw0LTRgNC20LDRmNCwINGDINGb0LXQu9C40ZjQuCDQuCDRmtC10L3QvtCzINC+0LrQstC40YDQsCIsCisgICAgICAgICJTcGFjaW5nIjogItCg0LDQt9C80LDQuiIsCisgICAgICAgICJUYXJnZXQ6IjogItCe0YLQstC+0YDQuCDRgzoiLAorICAgICAgICAiVGV4dHRvcCI6ICLQktGA0YUg0YLQtdC60YHRgtCwIiwKKyAgICAgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAi0JTRg9Cz0LzQtSAn0LfQsNC70LXQv9C4JyDQvdC1INGA0LDQtNC4INGDINC/0YDQtdGC0YDQsNC20LjQstCw0YfQuNC80LAg0L/QvtGA0L7QtNC40YbQtSBNb3ppbGxhICjQuNC3INGA0LDQt9C70L7Qs9CwINGB0LjQs9GD0YDQvdC+0YHRgtC4KS4g0J/RgNC40YLQuNGB0L3QuNGC0LUgQ1RSTC1WINC90LAg0YLQsNGB0YLQsNGC0YPRgNC4INC00LAg0LTQuNGA0LXQutGC0L3QviDQt9Cw0LvQtdC/0LjRgtC1LiIsCisgICAgICAgICJUaXRsZSAodG9vbHRpcCk6IjogItCd0LDQt9C40LIgKHRvb2x0aXApOiIsCisgICAgICAgICJUb3AiOiAi0JLRgNGFIiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAi0JPQu9Cw0LLQvdC4INGE0YDQtdGY0LwgKF90b3ApIiwKKyAgICAgICAgIlVSTDoiOiAi0KPQoNCbOiIsCisgICAgICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogItCS0LXRgNGC0LjQutCw0LvQvdC+INC+0LTRgdGC0L7RmNCw0ZrQtSIsCisgICAgICAgICJWZXJ0aWNhbDoiOiAi0J/QviDQstC10YDRgtC40LrQsNC70LgiLAorICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogItCo0LjRgNC40L3QsCDRgtCw0LHQtdC70LUiLAorICAgICAgICAiV2lkdGggdW5pdCI6ICLQiNC10LTQuNC90LjRhtCwINGI0LjRgNC40L3QtSIsCisgICAgICAgICJXaWR0aDoiOiAi0KjQuNGA0LjQvdCwIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICLQnNC+0YDQsNGC0LUg0YPQvdC10YLQuCDQo9Cg0Jsg0L3QsCDQutC+0ZjQuCDQstC+0LTQuCDQvtCy0LDRmCDQu9C40L3QuiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvc3YuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL3N2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YmY4YWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL3N2LmpzCkBAIC0wLDAgKzEsMTExIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInN2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIk9tIGRlbm5hIGVkaXRvciIsCisgICAgIkJhY2tncm91bmQgQ29sb3IiOiAiQmFrZ3J1bmRzZsOkcmciLAorICAgICJCb2xkIjogIkZldCIsCisgICAgIkJ1bGxldGVkIExpc3QiOiAiUHVua3RsaXN0YSIsCisgICAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICJSZW5zYSBpbm5laMOlbGwgaW5rbGlzdHJhdCBmcsOlbiBNUyBXb3JkIiwKKyAgICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiUmVuc2EgaW5iw6RkZGFkIHR5cHNuaXR0c2luZm9ybWF0aW9uIiwKKyAgICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICJTdMOkZGEgYm9ydCBNUyBPZmZpY2UgdGFnZ2FyIiwKKyAgICAiQ2xvc2UiOiAiU3TDpG5nIiwKKyAgICAiQ29weSBzZWxlY3Rpb24iOiAiS29waWVyYSAgbWFya2VyaW5nIiwKKyAgICAiQ3JlYXRlIFRvb2xiYXIiOiAiU2thcGFyIHZlcmt0eWdzcGFuZWwiLAorICAgICJDdXJyZW50IHN0eWxlIjogIk51dmFyYW5kZSBzdGlsIiwKKyAgICAiQ3V0IHNlbGVjdGlvbiI6ICJLbGlwcCB1dCBtYXJrZXJpbmciLAorICAgICJEZWNyZWFzZSBJbmRlbnQiOiAiTWluc2thIGluZHJhZyIsCisgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIlbDpG5zdGVyIHRpbGwgaMO2Z2VyIiwKKyAgICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiSMO2Z2VyIHRpbGwgdsOkbnN0ZXIiLAorICAgICJGb250IENvbG9yIjogIlRleHRmw6RyZyIsCisgICAgIkhlYWRpbmdzIjogIlNrYXBhIHN0YW5kYXJkcnVicmlrIiwKKyAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiSGrDpGxwIiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogIlbDpWdyw6R0IGxpbmplIiwKKyAgICAiSW5jcmVhc2UgSW5kZW50IjogIsOWa2EgaW5kcmFnIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIkluZm9nYSB0YWJlbGwiLAorICAgICJJbnNlcnQgV2ViIExpbmsiOiAiSW5mb2dhIGzDpG5rIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJbmZvZ2EgYmlsZCIsCisgICAgIkluc2VydC9PdmVyd3JpdGUiOiAiSW5mb2dhL1Nrcml2IMO2dmVyIiwKKyAgICAiSXRhbGljIjogIkt1cnNpdiIsCisgICAgIkp1c3RpZnkgQ2VudGVyIjogIkNlbnRyZXJhIiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIk1hcmdpbmFsanVzdGVyYSIsCisgICAgIkp1c3RpZnkgTGVmdCI6ICJWw6Ruc3Rlcmp1c3RlcmEiLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogIkjDtmdlcmp1c3RlcmEiLAorICAgICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiU25hYmJ0YW5nZW50ZXIiLAorICAgICJPcmRlcmVkIExpc3QiOiAiTnVtcmVyYWQgbGlzdGEiLAorICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJLbGlzdHJhIGluIiwKKyAgICAiUGF0aCI6ICJPYmpla3QiLAorICAgICJQcmludCBkb2N1bWVudCI6ICJTa3JpdiB1dCIsCisgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlVwcHJlcGEga29tbWFuZG8iLAorICAgICJSZW1vdmUgZm9ybWF0dGluZyI6ICJSZW5zYSBmb3JtYXR0ZXJpbmciLAorICAgICJTZWxlY3QgYWxsIjogIk1hcmtlcmEgYWxsdCIsCisgICAgIlNldCBmb3JtYXQgdG8gcGFyYWdyYXBoIjogIkFrdGl2ZXJhIHBhcmFncmFmbMOkZ2UiLAorICAgICJTcGxpdCBCbG9jayI6ICJEZWxhIGJsb2NrIiwKKyAgICAiU3RyaWtldGhyb3VnaCI6ICJHZW5vbXN0cnVrZW4iLAorICAgICJTdWJzY3JpcHQiOiAiTmVkc8Okbmt0IiwKKyAgICAiU3VwZXJzY3JpcHQiOiAiVXBwaMO2amQiLAorICAgICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAiRWRpdG9ybiBueXR0amFyIGbDtmxqYW5kZSBrb21iaW5hdGlvbmVyOiIsCisgICAgIlRvZ2dsZSBCb3JkZXJzIjogIk9iamVrdHJhbWFyIiwKKyAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIlZpc2Ega8OkbGxrb2QiLAorICAgICJVbmRlcmxpbmUiOiAiVW5kZXJzdHJ1a2VuIiwKKyAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiw4VuZ3JhIGtvbW1hbmRvIiwKKyAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICJUYSBib3J0IGFsbCB0ZXh0ZsOkcmdlciA/IiwKKyAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiUmFkZXJhIGFsbGEgZm9udHN0b3JsZWthciA/IiwKKyAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogIlJhZGVyYSBhbGxhIHR5cHNuaXR0c2luZm9ybWF0aW9uID8iLAorICAgICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiRHUgYmVmaW5uZXIgZGlnIGkgdGV4bMOkZ2UuIEtsaWNrYSBww6UgaWtvbmVuIFs8Pl0gb3ZhbiBmw7ZyIGF0dCB2w6R4bGEgdGlsbGJha2EgdGlsbCBXWVNJV0lHIGzDpGdlIiwKKyAgICAiaW5zZXJ0IGxpbmVicmVhayI6ICJJbmZvZ2EgcmFkYnJ5dG5pbmcgIiwKKyAgICAibmV3IHBhcmFncmFwaCI6ICJOeSBwYXJhZ3JhZiAiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBbGlnbm1lbnQ6IjogIk1hcmdpbmFsanVzdGVyaW5nIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIlJhbXRqb2NrbGVrIiwKKyAgICAgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICJDZWxsaW5kcmFnOiIsCisgICAgICAgICJDZWxsIHNwYWNpbmc6IjogIkNlbGxtYXJnaW5hbGVyOiIsCisgICAgICAgICJDb2xzOiI6ICJLb2x1bW5lcjoiLAorICAgICAgICAiQ29uc3RydWN0aW5nIG1haW4gb2JqZWN0IjogIlNrYXBhciBodXZ1ZG9iamVrdCIsCisgICAgICAgICJFbSI6ICIiLAorICAgICAgICAiRW5sYXJnZSBFZGl0b3IiOiAiVmlzYSBpIGVnZXQgZsO2bnN0ZXIiLAorICAgICAgICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICJGaXhlcmFkIGJyZWRkIiwKKyAgICAgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJSZWRpZ2VyYSBsw6RuayIsCisgICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIkzDpG1uYSBmw6RsdGV0IHRvbXQgZsO2ciBhdHQgdW5kdmlrYSByYW1hciIsCisgICAgICAgICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCAhIjogIkVkaXRvcm4gbGFkZGFzLiBWw6RudGEuLi4iLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOeXR0IGbDtm5zdGVyIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiSW5nZW4gKGFudsOkbmQgc3RhbmRhcmRpbnN0w6RsbGluZykiLAorICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiQW50YWwga29sdW1uZXIiLAorICAgICAgICAiTnVtYmVyIG9mIHJvd3MiOiAiQW50YWwgcmFkZXIiLAorICAgICAgICAiT0siOiAiT0siLAorICAgICAgICAiT3RoZXIiOiAiQW5uYW4iLAorICAgICAgICAiUGVyY2VudCI6ICJQcm9jZW50IiwKKyAgICAgICAgIlBpeGVscyI6ICJQaXhsYXIiLAorICAgICAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICJUYWJlbGxwb3NpdGlvbiIsCisgICAgICAgICJSZWdpc3RlciBwYW5lbCBib3R0b20iOiAiUmVnaXN0ZXJhciBmb3RwYW5lbCIsCisgICAgICAgICJSZWdpc3RlciBwYW5lbCBsZWZ0IjogIlJlZ2lzdGVyYXIgcGFuZWwgdsOkbnN0ZXIiLAorICAgICAgICAiUmVnaXN0ZXIgcGFuZWwgcmlnaHQiOiAiUmVnaXN0ZXJhciBwYW5lbCBow7ZnZXIiLAorICAgICAgICAiUmVnaXN0ZXIgcGFuZWwgdG9wIjogIlJlZ2lzdGVyYXIgdG9wcGFuZWwiLAorICAgICAgICAiUm93czoiOiAiUmFkZXI6IiwKKyAgICAgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJTYW1tYSByYW0gKF9zZWxmKSIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIlV0cnltbWUgbWVsbGFuIGNlbGxlciIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIlV0cnltbWUgbWVsbGFuIHJhbSBvY2ggY2VsbGlubmVow6VsbCIsCisgICAgICAgICJTcGFjaW5nIjogIkNlbGxlZ2Vuc2thcGVyIiwKKyAgICAgICAgIlRhcmdldDoiOiAiTcOlbDoiLAorICAgICAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICJEZW5uYSBrbmFwcCBmdW5nZXJhciBlaiBpIE1vemlsbGFiYXNlcmFkIHdlYmzDpHNhcmUsIGFudsOkbmQgaXN0w6RsbGV0IHNuYWJidGFuZ2VudGVybmEgQ1RSTC1WIHDDpSB0YW5nZW50Ym9yZGV0IGbDtnIgYXR0IGtsaXN0cmEgaW4uIiwKKyAgICAgICAgIlRoZSBmdWxsIHNjcmVlbiBtb2RlIGlzIGtub3duIHRvIGNhdXNlIHByb2JsZW1zIHdpdGggSW50ZXJuZXQgRXhwbG9yZXIsIGR1ZSB0byBicm93c2VyIGJ1Z3MgdGhhdCB3ZSB3ZXJlbiI6ICJWaXNuaW5nIGkgZnVsbHNrw6RybXNsw6RnYSBmdW5nZXJhciBkw6VsaWd0IGkgZGluIHdlYmzDpHNhcmUuIE3DtmpsaWdhIHByb2JsZW0gcmVzdWx0ZXJhciBpIGVuIHJ5Y2tpZyBlZGl0b3IsIHNha25hZGUgZWRpdG9yZnVua3Rpb25lciBvY2gvZWxsZXIgYXR0IHdlYmzDpHNhcmVuIGtyYXNjaGFyLiBPbSBkdSBhbnbDpG5kZXIgV2luZG93cyA5NS85OCBmaW5ucyBvY2tzw6UgbcO2amxpZ2hldGVuIGF0dCBXaW5kb3dzIGtyYXNjaGFyLlxuXG5UcnljayAiLAorICAgICAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUaXRlbCAodG9vbHRpcCk6IiwKKyAgICAgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiVG9wcHJhbSAoX3RvcCkiLAorICAgICAgICAiVVJMOiI6ICJTw7ZrdsOkZzoiLAorICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIlRhYmVsbGJyZWRkIiwKKyAgICAgICAgIldpZHRoIHVuaXQiOiAiQnJlZGRlbmhldGVyIiwKKyAgICAgICAgIldpZHRoOiI6ICJCcmVkZDoiLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICJBbmdlIGFudGFsIGtvbHVtbmVyIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAiQW5nZSBlbnRhbCByYWRlciIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAiRHUgbcOlc3RhIGFuZ2UgZW4gYWRyZXNzIHRpbGwgdmlsa2VuIGzDpG5rZW4gc2thbGwgcGVrYSBww6UiLAorICAgICAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIkR1IG3DpXN0YSBtYXJrZXJhIGV0dCBvYmpla3QgYXR0IGFwcGxpY2VyYSBsw6Rua2VuIHDDpSEiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL3RoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy90aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWRmYTE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy90aC5qcwpAQCAtMCwwICsxLDQ4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIuC5gOC4geC4teC5iOC4ouC4p+C4geC4seC4muC5guC4m+C4o+C5geC4geC4o+C4oeC4meC4teC5iSIsCisgICAgIkJhY2tncm91bmQgQ29sb3IiOiAi4Liq4Li14Lie4Li34LmJ4LiZ4Lir4Lil4Lix4LiHIiwKKyAgICAiQm9sZCI6ICLguJXguLHguKfguKvguJnguLIiLAorICAgICJCdWxsZXRlZCBMaXN0IjogIuC4peC4s+C4lOC4seC4miIsCisgICAgIkNvcHkgc2VsZWN0aW9uIjogIuC4quC4s+C5gOC4meC4suC4quC5iOC4p+C4meC4l+C4teC5iOC5gOC4peC4t+C4reC4gSIsCisgICAgIkN1cnJlbnQgc3R5bGUiOiAi4Lij4Li54Lib4LmB4Lia4Lia4Lib4Lix4LiI4LiI4Li44Lia4Lix4LiZIiwKKyAgICAiQ3V0IHNlbGVjdGlvbiI6ICLguJXguLHguJTguKrguYjguKfguJnguJfguLXguYjguYDguKXguLfguK3guIEiLAorICAgICJEZWNyZWFzZSBJbmRlbnQiOiAi4Lil4LiU4Lii4LmI4Lit4Lir4LiZ4LmJ4LiyIiwKKyAgICAiRm9udCBDb2xvciI6ICLguKrguLXguILguK3guJrguYHguJrguJrguK3guLHguIHguKnguKMiLAorICAgICJIZWxwIHVzaW5nIGVkaXRvciI6ICLguIHguLLguKPguYPguIrguYnguIfguLLguJnguYLguJvguKPguYHguIHguKPguKEiLAorICAgICJIb3Jpem9udGFsIFJ1bGUiOiAi4LmA4Liq4LmJ4LiZ4LiB4Li24LmI4LiH4LiB4Lil4Liy4LiHIiwKKyAgICAiSW5jcmVhc2UgSW5kZW50IjogIuC5gOC4nuC4tOC5iOC4oeC4ouC5iOC4reC4q+C4meC5ieC4siIsCisgICAgIkluc2VydCBUYWJsZSI6ICLguYDguJ7guLTguYjguKHguJXguLLguKPguLLguIciLAorICAgICJJbnNlcnQgV2ViIExpbmsiOiAi4Li04LmA4Lie4Li04LmI4Lih4Lil4Li04LmJ4LiH4LiE4LmMIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICLguYDguJ7guLTguYjguKEv4LmB4LiB4LmJ4LmE4LiC4Lig4Liy4LieIiwKKyAgICAiSXRhbGljIjogIuC4leC4seC4p+C5gOC4reC4teC4ouC4hyIsCisgICAgIkp1c3RpZnkgQ2VudGVyIjogIuC4iOC4seC4lOC4geC4tuC5iOC4h+C4geC4peC4suC4hyIsCisgICAgIkp1c3RpZnkgRnVsbCI6ICLguIjguLHguJTguYDguJXguYfguKHguILguK3guJoiLAorICAgICJKdXN0aWZ5IExlZnQiOiAi4LiI4Lix4LiU4LiK4Li04LiU4LiL4LmJ4Liy4LiiIiwKKyAgICAiSnVzdGlmeSBSaWdodCI6ICLguIjguLHguJTguIrguLTguJTguILguKfguLIiLAorICAgICJPcmRlcmVkIExpc3QiOiAi4LmA4Lil4LiC4Lil4Liz4LiU4Lix4LiaIiwKKyAgICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAi4Lin4Liy4LiH4LiI4Liy4LiB4LiE4Lil4Li04Lib4Lia4Lit4Lij4LmM4LiUIiwKKyAgICAiUGF0aCI6ICLguYDguKrguYnguJnguJfguLLguIciLAorICAgICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLguJfguLPguIvguYnguLMiLAorICAgICJTdHJpa2V0aHJvdWdoIjogIuC4guC4teC4lOC4l+C4seC4miIsCisgICAgIlN1YnNjcmlwdCI6ICLguJXguLHguKfguKvguYnguK3guKIiLAorICAgICJTdXBlcnNjcmlwdCI6ICLguJXguLHguKfguKLguIEiLAorICAgICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAi4Liq4Lil4Lix4Lia4LiB4Liy4Lij4LmB4Liq4LiU4LiH4LmC4LiE4LmJ4LiUIEhUTUwiLAorICAgICJVbmRlcmxpbmUiOiAi4LiC4Li14LiU4LmA4Liq4LmJ4LiZ4LmD4LiV4LmJIiwKKyAgICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi4Lii4LmJ4Lit4LiZ4LiB4Lil4Lix4LiaIiwKKyAgICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIuC4hOC4uOC4k+C4reC4ouC4ueC5iOC5g+C4meC5guC4q+C4oeC4lOC4mOC4o+C4o+C4oeC4lOC4siDguIHguJTguJfguLXguYjguJvguLjguYjguKEgWzw+XSDguYDguJ7guLfguYjguK3guKrguKXguLHguJrguIHguKXguLHguJrguYTguJvguKLguLHguIfguYLguKvguKHguJTguJ7guLTguKHguJ7guYzguIfguLLguJnguYHguJrguJrguYDguKfguLTguKPguYzguJQiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwKKyAgICAgICAgIkVubGFyZ2UgRWRpdG9yIjogIuC4guC4ouC4suC4ouC5g+C4q+C5ieC5gOC4leC5h+C4oeC4iOC4rSIsCisgICAgICAgICJPSyI6ICLguJXguIHguKXguIciCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL3RyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy90ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDFkMjgyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy90ci5qcwpAQCAtMCwwICsxLDE1NyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0ciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiYjODIxMjsgQsOnaW0gJiM4MjEyOyIsCisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIkJ1IGTDvHplbmxleWljaSBoYWtrxLFuZGEiLAorICAgICJBZGRyZXNzIjogIkFkcmVzIiwKKyAgICAiQmFja2dyb3VuZCBDb2xvciI6ICJBcmthIHBsYW4gcmVuZ2kiLAorICAgICJCb2xkIjogIkthbMSxbiIsCisgICAgIkJ1bGxldGVkIExpc3QiOiAiTWFkZGUgacWfYXJldGxpIGxpc3RlIiwKKyAgICAiQ2xlYW4gY29udGVudCBwYXN0ZWQgZnJvbSBXb3JkIjogIldvcmQnZGFuIHlhcMSxxZ90xLFyxLFsYW4gacOnZXJpxJ9pIHRlbWl6bGUiLAorICAgICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICJZYXrEsSB0aXBpIGJpw6dpbWxlbmRpcm1lc2luaSBzaWwiLAorICAgICJDbGVhciBNU09mZmljZSB0YWdzIjogIk1TT2ZmaWNlIGV0aWtldGxlcmluaSBzaWwiLAorICAgICJDbG9zZSI6ICJLYXBhdCIsCisgICAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAiTmVzbmUgb2x1xZ90dXJ1bHV5b3IiLAorICAgICJDb3B5IHNlbGVjdGlvbiI6ICJTZcOnaW1pIGtvcHlhbGEiLAorICAgICJDcmVhdGUgU3RhdHVzYmFyIjogIkR1cnVtIMOndWJ1xJ91IG9sdcWfdHVydWx1eW9yIiwKKyAgICAiQ3JlYXRlIFRvb2xiYXIiOiAiQXJhw6cgw6d1YnXEn3Ugb2x1xZ90dXJ1bHV5b3IiLAorICAgICJDdXJyZW50IHN0eWxlIjogIkdlw6dlcmxpIHN0aWwiLAorICAgICJDdXQgc2VsZWN0aW9uIjogIlNlw6dpbWkga2VzIiwKKyAgICAiRGVjcmVhc2UgSW5kZW50IjogIkdpcmludGl5aSBhemFsdCIsCisgICAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIkJlbGdlIHnDtm5sZW5kaXJtZXNpIHNvbGRhbiBzYcSfYSIsCisgICAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIkJlbGRlIHnDtm5sZW5kaXJtZXNpIHNhxJ9kYW4gc29sYSIsCisgICAgIkZpbmlzaGluZyI6ICJCYcWfbGF0xLFsxLF5b3IiLAorICAgICJGb250IENvbG9yIjogIllhesSxIHRpcGkgcmVuZ2kiLAorICAgICJGb3JtYXR0ZWQiOiAiQmnDp2ltbGkiLAorICAgICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiWGluaGEgw6dlcsOnZXZlc2kgb2x1xZ90dXJ1bHV5b3IiLAorICAgICJIZWFkaW5nIDEiOiAiQmHFn2zEsWsgMSIsCisgICAgIkhlYWRpbmcgMiI6ICJCYcWfbMSxayAyIiwKKyAgICAiSGVhZGluZyAzIjogIkJhxZ9sxLFrIDMiLAorICAgICJIZWFkaW5nIDQiOiAiQmHFn2zEsWsgNCIsCisgICAgIkhlYWRpbmcgNSI6ICJCYcWfbMSxayA1IiwKKyAgICAiSGVhZGluZyA2IjogIkJhxZ9sxLFrIDYiLAorICAgICJIZWFkaW5ncyI6ICJCYcWfbMSxayB0w7xybGVyaSIsCisgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIllhcmTEsW0iLAorICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiWWF0YXkgY2V0dmVsIiwKKyAgICAiSW5jcmVhc2UgSW5kZW50IjogIkdpcmludGl5aSBhcnR0xLFyIiwKKyAgICAiSW5pdCBlZGl0b3Igc2l6ZSI6ICJFZGl0w7ZyIGLDvHnDvGtsw7zEn8O8IHRhbsSxbWxhbsSxeW9yIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIlRhYmxvIGVrbGUiLAorICAgICJJbnNlcnQgV2ViIExpbmsiOiAiV2ViIGJhxJ9sYW50xLFzxLEgZ2lyIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJSZXNpbSBla2xlL2RlxJ9pxZ90aXIiLAorICAgICJJbnNlcnQvT3ZlcndyaXRlIjogIkVrbGUvw5x6ZXJpbmUgeWF6IiwKKyAgICAiSXRhbGljIjogIsSwdGFsaWsiLAorICAgICJKdXN0aWZ5IENlbnRlciI6ICJPcnRheWEgaGl6YWxhIiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIlRhbSBoaXphbGEiLAorICAgICJKdXN0aWZ5IExlZnQiOiAiU29sYSBoaXphbGEiLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogIlNhxJ9hIGhpemFsYSIsCisgICAgIktleWJvYXJkIHNob3J0Y3V0cyI6ICJLbGF2eWUga8Sxc2F5b2xsYXLEsSIsCisgICAgIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ISI6ICJFZGl0w7ZyIHnDvGtsZW5peW9yLiBMw7x0ZmVuIGJla2xleWluISIsCisgICAgIkxvYWRpbmcgcGx1Z2luICRwbHVnaW4iOiAiJHBsdWdpbiB5w7xrbGVuaXlvciIsCisgICAgIk5vcm1hbCI6ICJOb3JtYWwgKFBhcmFncmFmKSIsCisgICAgIk9yZGVyZWQgTGlzdCI6ICJTxLFyYWzEsSBsaXN0ZSIsCisgICAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIlBhbm9kYW4geWFwxLHFn3TEsXIiLAorICAgICJQYXRoIjogIllvbCIsCisgICAgIlByaW50IGRvY3VtZW50IjogIkJlbGdleWkgeWF6ZMSxciIsCisgICAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIllpbmVsZSIsCisgICAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIjogIiRwbHVnaW4ga2F5xLF0IGVkaWxpeW9yIiwKKyAgICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAiQmnDp2ltbGVuZGlybWV5aSBrYWxkxLFyIiwKKyAgICAiU2F2ZSBhcyI6ICJGYXJrbMSxIGtheWRldCIsCisgICAgIlNlbGVjdCBhbGwiOiAiVMO8bcO8bsO8IHNlw6ciLAorICAgICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICJQYXJhZ3JhZsSxbiBiacOnaW1pbmkgYXlhcmxhIiwKKyAgICAiU3BsaXQgQmxvY2siOiAiQmxvxJ91IGLDtmwiLAorICAgICJTdHJpa2V0aHJvdWdoIjogIsOcc3TDvCDDp2l6aWxpIiwKKyAgICAiU3Vic2NyaXB0IjogIkFsdHNpbWdlIiwKKyAgICAiU3VwZXJzY3JpcHQiOiAiw5xzdHNpbWdlIiwKKyAgICAiVGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6IjogIkVkaXTDtnLDvG4gZGVzdGVrbGVkacSfaSBrb21iaW5hc3lvbmxhcjoiLAorICAgICJUb2dnbGUgQm9yZGVycyI6ICJUYWJsbyBrZW5hcmzEsWtsYXLEsW7EsSBnw7ZzdGVyL2fDtnN0ZXJtZSIsCisgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJIVE1MIGtheW5hayBrb2R1bnUgYcOnL2thcGF0IiwKKyAgICAiVW5kZXJsaW5lIjogIkFsdMSxIMOnaXppbGkiLAorICAgICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJHZXJpIGFsIiwKKyAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICJZYXrEsSB0aXBpIHJlbmtsZXJpbmkgc8SxZsSxcmxhbWFrIG3EsSBpc3RpeW9yc3VudXo/IiwKKyAgICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiWWF6xLEgdGlwaSBib3l1dGxhcsSxbsSxIHPEsWbEsXJsYW1hayBtxLEgaXN0aXlvcnN1bnV6PyIsCisgICAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICJZYXrEsSB0aXBpIGJpw6dpbWxlbmRpcm1lc2luaSBzaWxtZWsgbcSxIGlzdGl5b3JzdW51ej8iLAorICAgICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiTWV0aW4gbW9kdW5kYXPEsW7EsXouIEfDtnJzZWwgbW9kYSAoV1lTSVdJRykgZMO2bm1layBpw6dpbiBbPD5dIGTDvMSfbWVzaW5lIHTEsWtsYXnEsW4uIiwKKyAgICAiaW5zZXJ0IGxpbmVicmVhayI6ICJTYXTEsXIgc29udSBla2xlIiwKKyAgICAibmV3IHBhcmFncmFwaCI6ICJZZW5pIHBhcmFncmFmIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQWJzYm90dG9tIjogIlNhbHQgYWx0YSIsCisgICAgICAgICJBYnNtaWRkbGUiOiAiU2FsdCBvcnRhIiwKKyAgICAgICAgIkFsaWdubWVudDoiOiAiSGl6YWxhbWE6IiwKKyAgICAgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJBbHRlcm5hdGlmIG1ldGluOiIsCisgICAgICAgICJCYXNlbGluZSI6ICJUYWJhbiBoaXphc8SxIiwKKyAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIktlbmFybMSxayBrYWzEsW5sxLHEn8SxOiIsCisgICAgICAgICJCb3R0b20iOiAiQWx0YSIsCisgICAgICAgICJDYW5jZWwiOiAixLBwdGFsIiwKKyAgICAgICAgIkNlbGwgcGFkZGluZzoiOiAiSMO8Y3JlIGRvbGR1cm1hOiIsCisgICAgICAgICJDZWxsIHNwYWNpbmc6IjogIkjDvGNyZSBhcmFsxLHEn8SxOiIsCisgICAgICAgICJDbGljayBhIGNvbG9yLi4uIjogIkJpciByZW5rIHNlw6dpbiIsCisgICAgICAgICJDb2xvcjogIjogIlJlbms6ICIsCisgICAgICAgICJDb2xzOiI6ICJTw7x0dW46IiwKKyAgICAgICAgIkVtIjogIkVtIiwKKyAgICAgICAgIkVubGFyZ2UgRWRpdG9yIjogIkTDvHplbmxleWljaXlpIGLDvHnDvHQiLAorICAgICAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkzDvHRmZW4gYnVyYXlhIHJlc2ltIFVSTCdzaW5pIGdpcmluIiwKKyAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiU2FiaXQgYmHFn2zEsSBzw7x0dW4iLAorICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiUmVzaW0gZGVzdGVrbGVtZXllbiB0YXJhecSxY8SxbGFyIGnDp2luIiwKKyAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICJZYXRheSBkb2xkdXJtYSBtaWt0YXLEsSIsCisgICAgICAgICJIb3Jpem9udGFsOiI6ICJZYXRheToiLAorICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAiUmVzaW0gw7ZuaXpsZW1lOiIsCisgICAgICAgICJJbWFnZSBVUkw6IjogIlJlc2ltIFVSTCdzaToiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIlJlc2ltIGVrbGUiLAorICAgICAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIkJhxJ9sYW50xLEgZWtsZS9kZcSfacWfdGlyIiwKKyAgICAgICAgIkxheW91dCI6ICJEw7x6ZW4iLAorICAgICAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJLZW5hcmzEsWsgaXN0ZW1peW9yc2FuxLF6IGJvxZ8gYsSxcmFrxLFuIiwKKyAgICAgICAgIkxlZnQiOiAiU29sYSIsCisgICAgICAgICJNaWRkbGUiOiAiT3J0YWxhIiwKKyAgICAgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiWWVuaSBwZW5jZXJlIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiSGnDp2JpcmkgKMOWcnTDvGspIiwKKyAgICAgICAgIk5vdCBzZXQiOiAiQXlhcmxhbm1hbcSxxZ8iLAorICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiU8O8dHVuIHNhecSxc8SxIiwKKyAgICAgICAgIk51bWJlciBvZiByb3dzIjogIlNhdMSxciBzYXnEsXPEsSIsCisgICAgICAgICJPSyI6ICJPSyIsCisgICAgICAgICJPdGhlciI6ICJCYcWfa2EiLAorICAgICAgICAiUGVyY2VudCI6ICJZw7x6ZGUiLAorICAgICAgICAiUGl4ZWxzIjogIlBpa3NlbCIsCisgICAgICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIlJlc21pIGtvbnVtbGFuZMSxcm1hIiwKKyAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiVGFibG8ga29udW1sYW5kxLFybWEiLAorICAgICAgICAiUHJldmlldyI6ICLDlm5pemxlbWUiLAorICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlJlc21pIHllbmkgcGVuY2VyZWRlIMO2bml6bGVtZSIsCisgICAgICAgICJSZWdpc3RlciBib3R0b20gcGFuZWwiOiAiQWx0IHBhbmVsIG9sdcWfdHVydWx1eW9yIiwKKyAgICAgICAgIlJlZ2lzdGVyIGxlZnQgcGFuZWwiOiAiU29sIHBhbmVsIG9sdcWfdHVydWx1eW9yIiwKKyAgICAgICAgIlJlZ2lzdGVyIHJpZ2h0IHBhbmVsIjogIlNhxJ8gcGFuZWwgb2x1xZ90dXJ1bHV5b3IiLAorICAgICAgICAiUmVnaXN0ZXIgdG9wIHBhbmVsIjogIsOcc3QgcGFuZWwgb2x1xZ90dXJ1bHV5b3IiLAorICAgICAgICAiUmlnaHQiOiAiU2HEn2EiLAorICAgICAgICAiUm93czoiOiAiU2F0xLFyOiIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiQXluxLEgw6dlcsOnZXZlIChfc2VsZikiLAorICAgICAgICAiU2FtcGxlIjogIsOWcm5layIsCisgICAgICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIkJpdGnFn2lrIGjDvGNyZSBhcmFsxLHEn8SxIiwKKyAgICAgICAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAixLDDpyBrZW5hcmzEscSfxLEgdmUgaMO8Y3JlIGnDp2VyacSfaSBhcmFzxLFuZGFraSBib8WfbHVrIiwKKyAgICAgICAgIlNwYWNpbmciOiAiQXJhbMSxayIsCisgICAgICAgICJUYXJnZXQ6IjogIkhlZGVmOiIsCisgICAgICAgICJUZXh0dG9wIjogIk1ldGluLcO8c3R0ZSIsCisgICAgICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIkfDvHZlbmxpayBzZWJlcGxlcmluZGVuIGRvbGF5xLEgYmF6xLEgdGFyYXnEsWPEsWxhciBrZXMva29weWFsYS95YXDEscWfdMSxciBrb211dGxhcsSxbmEgZXJpxZ9lbWV6LiBLZXNtZS9rb3B5YWxhbWEveWFwxLHFn3TEsXJtYSBrb211dHVudSBrdWxsYW5tYWsgacOnaW4gbMO8dGZlbiAga2xhdnllbml6aW4ga8Sxc2F5b2xsYXLEsW7EsSBrdWxsYW7EsW4gKENUUkwgKyBDL1YvWCkuIiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAiQmHFn2zEsWsgKEFyYcOnIGlwdWN1KToiLAorICAgICAgICAiVG9wIjogIll1a2FyxLEiLAorICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJFbiDDvHN0IMOnZXLDp2V2ZSAoX3RvcCkiLAorICAgICAgICAiVVJMOiI6ICJVUkw6IiwKKyAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiRGlrZXkgZG9sZHVybWEgbWlrdGFyxLEiLAorICAgICAgICAiVmVydGljYWw6IjogIkRpa2V5OiIsCisgICAgICAgICJXZWIgU2FmZTogIjogIldlYiBnw7x2ZW5saSBtb2Q6ICIsCisgICAgICAgICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiVGFibG8gZ2VuacWfbGnEn2kiLAorICAgICAgICAiV2lkdGggdW5pdCI6ICJHZW5pxZ9saWsgYmlyaW1pIiwKKyAgICAgICAgIldpZHRoOiI6ICJHZW5pxZ9saWs6IiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiTMO8dGZlbiBzw7x0dW4gc2F5xLFzxLFuxLEgZ2lyaW4iLAorICAgICAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICJMw7x0ZmVuIHNhdMSxciBzYXnEsXPEsW7EsSBnaXJpbiIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIkzDvHRmZW4gVVJMIGdpcmluIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICJCYcSfbGFudMSxbsSxbiBoYW5naSBrb251bWEgacWfYXJldCBldHRpxJ9pbmkgZ2lybWVsaXNpbml6IiwKKyAgICAgICAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0ZSBhIGxpbmsiOiAiQmHEn2xhbnTEsSBvbHXFn3R1cm1hayBpw6dpbiBiaXIgbWV0aW4gc2XDp21lbml6IGdlcmVraXIiLAorICAgICAgICAiWW91ciBEb2N1bWVudCBpcyBub3Qgd2VsbCBmb3JtZWQuIENoZWNrIEphdmFTY3JpcHQgY29uc29sZSBmb3IgZGV0YWlscy4iOiAiTWV0bmluaXppbiBiacOnaW1pIGl5aSBkZcSfaWwuIERhaGEgZmF6bGEgYmlsZ2kgacOnaW4gSmF2YXNjcmlwdCBrb25zb2x1bnUga29udHJvbCBlZGluLiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvdm4uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL3ZuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZDg3NDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9sYW5nL3ZuLmpzCkBAIC0wLDAgKzEsNjEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidm4iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiVOG7sSBHaeG7m2kgVGhp4buHdSIsCisgICAgIkJhY2tncm91bmQgQ29sb3IiOiAiTcOgdSBO4buBbiIsCisgICAgIkJvbGQiOiAixJDhuq1tIiwKKyAgICAiQnVsbGV0ZWQgTGlzdCI6ICJEYW5oIFPDoWNoIFBoaSBUaOG7qSBU4buxIChDaOG6pW0gxJHhuqd1IGTDsm5nKSIsCisgICAgIkNvcHkgc2VsZWN0aW9uIjogIlNhbyBjaMOpcCIsCisgICAgIkN1cnJlbnQgc3R5bGUiOiAixJDhu4tuaCBE4bqhbmcgSGnhu4duIFRo4budaSIsCisgICAgIkN1dCBzZWxlY3Rpb24iOiAiQ+G6r3QiLAorICAgICJEZWNyZWFzZSBJbmRlbnQiOiAiTMO5aSBSYSBOZ2/DoGkiLAorICAgICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICJWaeG6v3QgdOG7qyB0csOhaSBzYW5nIHBo4bqjaSIsCisgICAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIlZp4bq/dCB04burIHBo4bqjaSBzYW5nIHRyw6FpIiwKKyAgICAiRm9udCBDb2xvciI6ICJNw6B1IENo4buvIiwKKyAgICAiSGVscCB1c2luZyBlZGl0b3IiOiAiR2nDunAgxJDhu6EiLAorICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiRMOybmcgS+G6uyBOZ2FuZyIsCisgICAgIkluY3JlYXNlIEluZGVudCI6ICJUaOG7pXQgVsOgbyBUcm9uZyIsCisgICAgIkluc2VydCBUYWJsZSI6ICJDaMOobiBC4bqjbmciLAorICAgICJJbnNlcnQgV2ViIExpbmsiOiAiVOG6oW8gTGnDqm4gS+G6v3QiLAorICAgICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIkNow6huIOG6om5oIiwKKyAgICAiSXRhbGljIjogIk5naGnDqm5nIiwKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAiQ8SDbiBHaeG7r2EiLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAiQ8SDbiDEkOG7gXUiLAorICAgICJKdXN0aWZ5IExlZnQiOiAiQ8SDbiBUcsOhaSIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAiQ8SDbiBQaOG6o2kiLAorICAgICJPcmRlcmVkIExpc3QiOiAiRGFuaCBTw6FjaCBDw7MgVGjhu6kgVOG7sSAoMSwgMiwgMykiLAorICAgICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJEw6FuIiwKKyAgICAiUGF0aCI6ICLEkMaw4budbmcgROG6q24iLAorICAgICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJM4bqleSBs4bqhaSB0aGFvIHTDoWMgduG7q2EgYuG7jyIsCisgICAgIlN0cmlrZXRocm91Z2giOiAiR+G6oWNoIFjDs2EiLAorICAgICJTdWJzY3JpcHQiOiAiVmnhur90IFh14buRbmcgRMaw4bubaSIsCisgICAgIlN1cGVyc2NyaXB0IjogIlZp4bq/dCBMw6puIFRyw6puIiwKKyAgICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIkNo4bq/IMSQ4buZIE3DoyBIVE1MIiwKKyAgICAiVW5kZXJsaW5lIjogIkfhuqFjaCBDaMOibiIsCisgICAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkjhu6d5IHRoYW8gdMOhYyB0csaw4bubYyIsCisgICAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJC4bqhbiDEkWFuZyDhu58gY2jhur8gxJHhu5kgdGV4dC4gIFPhu60gZOG7pW5nIG7DunQgWzw+XSDEkeG7gyBjaHV54buDbiBs4bqhaSBjaOG6vyDEkeG7mSBXWVNJV0lHLiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJI4buneSIsCisgICAgICAgICJFbmxhcmdlIEVkaXRvciI6ICJQaMOzbmcgVG8gw5QgU2/huqFuIFRo4bqjbyIsCisgICAgICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiVGjDqm0vQ2jhu4luaCBz4butYSDEkcaw4budbmcgZOG6q24iLAorICAgICAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJD4butYSBz4buVIG3hu5tpIChfYmxhbmspIiwKKyAgICAgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiS2jDtG5nIChz4butIGThu6VuZyBpbXBsaWNpdCkiLAorICAgICAgICAiT0siOiAixJDhu5NuZyDDvSIsCisgICAgICAgICJPdGhlciI6ICJLaMOhYyIsCisgICAgICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiVHLDqm4gY8O5bmcga2h1bmcgKF9zZWxmKSIsCisgICAgICAgICJUYXJnZXQ6IjogIk7GoWkgaGnhu4duIHRo4buLOiIsCisgICAgICAgICJUaGUgZnVsbCBzY3JlZW4gbW9kZSBpcyBrbm93biB0byBjYXVzZSBwcm9ibGVtcyB3aXRoIEludGVybmV0IEV4cGxvcmVyLCBkdWUgdG8gYnJvd3NlciBidWdzIHRoYXQgd2Ugd2VyZW4iOiAiQ2jhur8gxJHhu5kgcGjDs25nIHRvIMO0IHNv4bqhbiB0aOG6o28gY8OzIHRo4buDIGfDonkgbOG7l2kgduG7m2kgSW50ZXJuZXQgRXhwbG9yZXIgdsOsIG3hu5l0IHPhu5EgbOG7l2kgY+G7p2EgdHLDrG5oIGR1eeG7h3QgbsOgeSwgdsOsIHRo4bq/IGNo4bq/IMSR4buZIG7DoHkgY8OzIHRo4buDIHPhur0ga2jDtG5nIGNo4bqheS4gSGnhu4NuIHRo4buLIGtow7RuZyDEkcO6bmcsIGzhu5luIHjhu5luLCBraMO0bmcgY8OzIMSR4bqneSDEkeG7pyBjaOG7qWMgbsSDbmcsIHbDoCBjxaluZyBjw7MgdGjhu4MgbMOgbSB0csOsbmggZHV54buHdCBj4bunYSBi4bqhbiBi4buLIHThuq90IG5nYW5nLiBO4bq/dSBi4bqhbiDEkWFuZyBz4butIGThu6VuZyBXaW5kb3dzIDl4IGLhuqFuIGPDsyB0aOG7gyBi4buLIGLDoW8gbOG7l2kgIiwKKyAgICAgICAgIlRpdGxlICh0b29sdGlwKToiOiAiVGnDqnUgxJHhu4EgKGPhu6dhIGjGsOG7m25nIGThuqtuKToiLAorICAgICAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJLaHVuZyB0csOqbiBjw7luZyAoX3RvcCkiLAorICAgICAgICAiVVJMOiI6ICJVUkw6IiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICJC4bqhbiBwaOG6o2kgxJFp4buBbiDEkeG7i2EgY2jhu4kgKFVSTCkgbcOgIMSRxrDhu51uZyBk4bqrbiBz4bq9IGxpw6puIGvhur90IHThu5tpIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGFuZy96aF9jbi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvemhfY24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBiYTkxMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xhbmcvemhfY24uanMKQEAgLTAsMCArMSwzOSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ6aF9jbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICLlhbPmlrwgWGluaGEiLAorICAgICJCYWNrZ3JvdW5kIENvbG9yIjogIuiDjOaZr+minOiJsiIsCisgICAgIkJvbGQiOiAi57KX5L2TIiwKKyAgICAiQnVsbGV0ZWQgTGlzdCI6ICLml6Dluo/muIXljZUiLAorICAgICJDdXJyZW50IHN0eWxlIjogIuWtl+S9k+S+i+WtkCIsCisgICAgIkRlY3JlYXNlIEluZGVudCI6ICLlh4/lsI/ooYzliY3nqbrnmb0iLAorICAgICJGb250IENvbG9yIjogIuaWh+Wtl+minOiJsiIsCisgICAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIuivtOaYjiIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICLmsLTlubPnur8iLAorICAgICJJbmNyZWFzZSBJbmRlbnQiOiAi5Yqg5a696KGM5YmN56m655m9IiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIuaPkuWFpeihqOagvCIsCisgICAgIkluc2VydCBXZWIgTGluayI6ICLmj5LlhaXov57nu5MiLAorICAgICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIuaPkuWFpeWbvuW9oiIsCisgICAgIkl0YWxpYyI6ICLmlpzkvZMiLAorICAgICJKdXN0aWZ5IENlbnRlciI6ICLkvY3nva7lsYXkuK0iLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAi5L2N572u5bem5Y+z5bmz562JIiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogIuS9jee9rumdoOW3piIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAi5L2N572u6Z2g5Y+zIiwKKyAgICAiT3JkZXJlZCBMaXN0IjogIumhuuW6j+a4heWNlSIsCisgICAgIlN0cmlrZXRocm91Z2giOiAi5Yig6Zmk57q/IiwKKyAgICAiU3Vic2NyaXB0IjogIuS4i+aghyIsCisgICAgIlN1cGVyc2NyaXB0IjogIuS4iuaghyIsCisgICAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICLliIfmjaJIVE1M5Y6f5aeL56CBIiwKKyAgICAiVW5kZXJsaW5lIjogIuW6lee6vyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkVubGFyZ2UgRWRpdG9yIjogIuaUvuWkpyIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xpYnJhcmllcy9Nb29Ub29scy1Db3JlLTEuMy4zZGV2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGlicmFyaWVzL01vb1Rvb2xzLUNvcmUtMS4zLjNkZXYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg0Nzg1MgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xpYnJhcmllcy9Nb29Ub29scy1Db3JlLTEuMy4zZGV2LmpzCkBAIC0wLDAgKzEsNTk1OCBAQAorLyoKKy0tLQorCituYW1lOiBDb3JlCisKK2Rlc2NyaXB0aW9uOiBUaGUgaGVhcnQgb2YgTW9vVG9vbHMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCitjb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDEwIFtWYWxlcmlvIFByb2lldHRpXShodHRwOi8vbWFkNG1pbGsubmV0LykuCisKK2F1dGhvcnM6IFRoZSBNb29Ub29scyBwcm9kdWN0aW9uIHRlYW0gKGh0dHA6Ly9tb290b29scy5uZXQvZGV2ZWxvcGVycy8pCisKK2luc3BpcmF0aW9uOgorICAtIENsYXNzIGltcGxlbWVudGF0aW9uIGluc3BpcmVkIGJ5IFtCYXNlLmpzXShodHRwOi8vZGVhbi5lZHdhcmRzLm5hbWUvd2VibG9nLzIwMDYvMDMvYmFzZS8pIENvcHlyaWdodCAoYykgMjAwNiBEZWFuIEVkd2FyZHMsIFtHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9sZ3BsLWxpY2Vuc2UucGhwKQorICAtIFNvbWUgZnVuY3Rpb25hbGl0eSBpbnNwaXJlZCBieSBbUHJvdG90eXBlLmpzXShodHRwOi8vcHJvdG90eXBlanMub3JnKSBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNyBTYW0gU3RlcGhlbnNvbiwgW01JVCBMaWNlbnNlXShodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKQorCitwcm92aWRlczogW0NvcmUsIE1vb1Rvb2xzLCBUeXBlLCB0eXBlT2YsIGluc3RhbmNlT2YsIE5hdGl2ZV0KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordGhpcy5Nb29Ub29scyA9IHsKKwl2ZXJzaW9uOiAnMS4zLjNkZXYnLAorCWJ1aWxkOiAnJWJ1aWxkJScKK307CisKKy8vIHR5cGVPZiwgaW5zdGFuY2VPZgorCit2YXIgdHlwZU9mID0gdGhpcy50eXBlT2YgPSBmdW5jdGlvbihpdGVtKXsKKwlpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gJ251bGwnOworCWlmIChpdGVtLiRmYW1pbHkpIHJldHVybiBpdGVtLiRmYW1pbHkoKTsKKworCWlmIChpdGVtLm5vZGVOYW1lKXsKKwkJaWYgKGl0ZW0ubm9kZVR5cGUgPT0gMSkgcmV0dXJuICdlbGVtZW50JzsKKwkJaWYgKGl0ZW0ubm9kZVR5cGUgPT0gMykgcmV0dXJuICgvXFMvKS50ZXN0KGl0ZW0ubm9kZVZhbHVlKSA/ICd0ZXh0bm9kZScgOiAnd2hpdGVzcGFjZSc7CisJfSBlbHNlIGlmICh0eXBlb2YgaXRlbS5sZW5ndGggPT0gJ251bWJlcicpeworCQlpZiAoaXRlbS5jYWxsZWUpIHJldHVybiAnYXJndW1lbnRzJzsKKwkJaWYgKCdpdGVtJyBpbiBpdGVtKSByZXR1cm4gJ2NvbGxlY3Rpb24nOworCX0KKworCXJldHVybiB0eXBlb2YgaXRlbTsKK307CisKK3ZhciBpbnN0YW5jZU9mID0gdGhpcy5pbnN0YW5jZU9mID0gZnVuY3Rpb24oaXRlbSwgb2JqZWN0KXsKKwlpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CisJdmFyIGNvbnN0cnVjdG9yID0gaXRlbS4kY29uc3RydWN0b3IgfHwgaXRlbS5jb25zdHJ1Y3RvcjsKKwl3aGlsZSAoY29uc3RydWN0b3IpeworCQlpZiAoY29uc3RydWN0b3IgPT09IG9iamVjdCkgcmV0dXJuIHRydWU7CisJCWNvbnN0cnVjdG9yID0gY29uc3RydWN0b3IucGFyZW50OworCX0KKwlyZXR1cm4gaXRlbSBpbnN0YW5jZW9mIG9iamVjdDsKK307CisKKy8vIEZ1bmN0aW9uIG92ZXJsb2FkaW5nCisKK3ZhciBGdW5jdGlvbiA9IHRoaXMuRnVuY3Rpb247CisKK3ZhciBlbnVtZXJhYmxlcyA9IHRydWU7Citmb3IgKHZhciBpIGluIHt0b1N0cmluZzogMX0pIGVudW1lcmFibGVzID0gbnVsbDsKK2lmIChlbnVtZXJhYmxlcykgZW51bWVyYWJsZXMgPSBbJ2hhc093blByb3BlcnR5JywgJ3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICd0b0xvY2FsZVN0cmluZycsICd0b1N0cmluZycsICdjb25zdHJ1Y3RvciddOworCitGdW5jdGlvbi5wcm90b3R5cGUub3ZlcmxvYWRTZXR0ZXIgPSBmdW5jdGlvbih1c2VQbHVyYWwpeworCXZhciBzZWxmID0gdGhpczsKKwlyZXR1cm4gZnVuY3Rpb24oYSwgYil7CisJCWlmIChhID09IG51bGwpIHJldHVybiB0aGlzOworCQlpZiAodXNlUGx1cmFsIHx8IHR5cGVvZiBhICE9ICdzdHJpbmcnKXsKKwkJCWZvciAodmFyIGsgaW4gYSkgc2VsZi5jYWxsKHRoaXMsIGssIGFba10pOworCQkJaWYgKGVudW1lcmFibGVzKSBmb3IgKHZhciBpID0gZW51bWVyYWJsZXMubGVuZ3RoOyBpLS07KXsKKwkJCQlrID0gZW51bWVyYWJsZXNbaV07CisJCQkJaWYgKGEuaGFzT3duUHJvcGVydHkoaykpIHNlbGYuY2FsbCh0aGlzLCBrLCBhW2tdKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXNlbGYuY2FsbCh0aGlzLCBhLCBiKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9OworfTsKKworRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkR2V0dGVyID0gZnVuY3Rpb24odXNlUGx1cmFsKXsKKwl2YXIgc2VsZiA9IHRoaXM7CisJcmV0dXJuIGZ1bmN0aW9uKGEpeworCQl2YXIgYXJncywgcmVzdWx0OworCQlpZiAodXNlUGx1cmFsIHx8IHR5cGVvZiBhICE9ICdzdHJpbmcnKSBhcmdzID0gYTsKKwkJZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIGFyZ3MgPSBhcmd1bWVudHM7CisJCWlmIChhcmdzKXsKKwkJCXJlc3VsdCA9IHt9OworCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSByZXN1bHRbYXJnc1tpXV0gPSBzZWxmLmNhbGwodGhpcywgYXJnc1tpXSk7CisJCX0gZWxzZSB7CisJCQlyZXN1bHQgPSBzZWxmLmNhbGwodGhpcywgYSk7CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9OworfTsKKworRnVuY3Rpb24ucHJvdG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpeworCXRoaXNba2V5XSA9IHZhbHVlOworfS5vdmVybG9hZFNldHRlcigpOworCitGdW5jdGlvbi5wcm90b3R5cGUuaW1wbGVtZW50ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7CisJdGhpcy5wcm90b3R5cGVba2V5XSA9IHZhbHVlOworfS5vdmVybG9hZFNldHRlcigpOworCisvLyBGcm9tCisKK3ZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTsKKworRnVuY3Rpb24uZnJvbSA9IGZ1bmN0aW9uKGl0ZW0peworCXJldHVybiAodHlwZU9mKGl0ZW0pID09ICdmdW5jdGlvbicpID8gaXRlbSA6IGZ1bmN0aW9uKCl7CisJCXJldHVybiBpdGVtOworCX07Cit9OworCitBcnJheS5mcm9tID0gZnVuY3Rpb24oaXRlbSl7CisJaWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIFtdOworCXJldHVybiAoVHlwZS5pc0VudW1lcmFibGUoaXRlbSkgJiYgdHlwZW9mIGl0ZW0gIT0gJ3N0cmluZycpID8gKHR5cGVPZihpdGVtKSA9PSAnYXJyYXknKSA/IGl0ZW0gOiBzbGljZS5jYWxsKGl0ZW0pIDogW2l0ZW1dOworfTsKKworTnVtYmVyLmZyb20gPSBmdW5jdGlvbihpdGVtKXsKKwl2YXIgbnVtYmVyID0gcGFyc2VGbG9hdChpdGVtKTsKKwlyZXR1cm4gaXNGaW5pdGUobnVtYmVyKSA/IG51bWJlciA6IG51bGw7Cit9OworCitTdHJpbmcuZnJvbSA9IGZ1bmN0aW9uKGl0ZW0peworCXJldHVybiBpdGVtICsgJyc7Cit9OworCisvLyBoaWRlLCBwcm90ZWN0CisKK0Z1bmN0aW9uLmltcGxlbWVudCh7CisKKwloaWRlOiBmdW5jdGlvbigpeworCQl0aGlzLiRoaWRkZW4gPSB0cnVlOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcHJvdGVjdDogZnVuY3Rpb24oKXsKKwkJdGhpcy4kcHJvdGVjdGVkID0gdHJ1ZTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKworLy8gVHlwZQorCit2YXIgVHlwZSA9IHRoaXMuVHlwZSA9IGZ1bmN0aW9uKG5hbWUsIG9iamVjdCl7CisJaWYgKG5hbWUpeworCQl2YXIgbG93ZXIgPSBuYW1lLnRvTG93ZXJDYXNlKCk7CisJCXZhciB0eXBlQ2hlY2sgPSBmdW5jdGlvbihpdGVtKXsKKwkJCXJldHVybiAodHlwZU9mKGl0ZW0pID09IGxvd2VyKTsKKwkJfTsKKworCQlUeXBlWydpcycgKyBuYW1lXSA9IHR5cGVDaGVjazsKKwkJaWYgKG9iamVjdCAhPSBudWxsKXsKKwkJCW9iamVjdC5wcm90b3R5cGUuJGZhbWlseSA9IChmdW5jdGlvbigpeworCQkJCXJldHVybiBsb3dlcjsKKwkJCX0pLmhpZGUoKTsKKwkJCS8vPDEuMmNvbXBhdD4KKwkJCW9iamVjdC50eXBlID0gdHlwZUNoZWNrOworCQkJLy88LzEuMmNvbXBhdD4KKwkJfQorCX0KKworCWlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisKKwlvYmplY3QuZXh0ZW5kKHRoaXMpOworCW9iamVjdC4kY29uc3RydWN0b3IgPSBUeXBlOworCW9iamVjdC5wcm90b3R5cGUuJGNvbnN0cnVjdG9yID0gb2JqZWN0OworCisJcmV0dXJuIG9iamVjdDsKK307CisKK3ZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CisKK1R5cGUuaXNFbnVtZXJhYmxlID0gZnVuY3Rpb24oaXRlbSl7CisJcmV0dXJuIChpdGVtICE9IG51bGwgJiYgdHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInICYmIHRvU3RyaW5nLmNhbGwoaXRlbSkgIT0gJ1tvYmplY3QgRnVuY3Rpb25dJyApOworfTsKKwordmFyIGhvb2tzID0ge307CisKK3ZhciBob29rc09mID0gZnVuY3Rpb24ob2JqZWN0KXsKKwl2YXIgdHlwZSA9IHR5cGVPZihvYmplY3QucHJvdG90eXBlKTsKKwlyZXR1cm4gaG9va3NbdHlwZV0gfHwgKGhvb2tzW3R5cGVdID0gW10pOworfTsKKwordmFyIGltcGxlbWVudCA9IGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7CisJaWYgKG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuOworCisJdmFyIGhvb2tzID0gaG9va3NPZih0aGlzKTsKKworCWZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspeworCQl2YXIgaG9vayA9IGhvb2tzW2ldOworCQlpZiAodHlwZU9mKGhvb2spID09ICd0eXBlJykgaW1wbGVtZW50LmNhbGwoaG9vaywgbmFtZSwgbWV0aG9kKTsKKwkJZWxzZSBob29rLmNhbGwodGhpcywgbmFtZSwgbWV0aG9kKTsKKwl9CisKKwl2YXIgcHJldmlvdXMgPSB0aGlzLnByb3RvdHlwZVtuYW1lXTsKKwlpZiAocHJldmlvdXMgPT0gbnVsbCB8fCAhcHJldmlvdXMuJHByb3RlY3RlZCkgdGhpcy5wcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7CisKKwlpZiAodGhpc1tuYW1lXSA9PSBudWxsICYmIHR5cGVPZihtZXRob2QpID09ICdmdW5jdGlvbicpIGV4dGVuZC5jYWxsKHRoaXMsIG5hbWUsIGZ1bmN0aW9uKGl0ZW0peworCQlyZXR1cm4gbWV0aG9kLmFwcGx5KGl0ZW0sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7CisJfSk7Cit9OworCit2YXIgZXh0ZW5kID0gZnVuY3Rpb24obmFtZSwgbWV0aG9kKXsKKwlpZiAobWV0aG9kICYmIG1ldGhvZC4kaGlkZGVuKSByZXR1cm47CisJdmFyIHByZXZpb3VzID0gdGhpc1tuYW1lXTsKKwlpZiAocHJldmlvdXMgPT0gbnVsbCB8fCAhcHJldmlvdXMuJHByb3RlY3RlZCkgdGhpc1tuYW1lXSA9IG1ldGhvZDsKK307CisKK1R5cGUuaW1wbGVtZW50KHsKKworCWltcGxlbWVudDogaW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCksCisKKwlleHRlbmQ6IGV4dGVuZC5vdmVybG9hZFNldHRlcigpLAorCisJYWxpYXM6IGZ1bmN0aW9uKG5hbWUsIGV4aXN0aW5nKXsKKwkJaW1wbGVtZW50LmNhbGwodGhpcywgbmFtZSwgdGhpcy5wcm90b3R5cGVbZXhpc3RpbmddKTsKKwl9Lm92ZXJsb2FkU2V0dGVyKCksCisKKwltaXJyb3I6IGZ1bmN0aW9uKGhvb2speworCQlob29rc09mKHRoaXMpLnB1c2goaG9vayk7CisJCXJldHVybiB0aGlzOworCX0KKworfSk7CisKK25ldyBUeXBlKCdUeXBlJywgVHlwZSk7CisKKy8vIERlZmF1bHQgVHlwZXMKKwordmFyIGZvcmNlID0gZnVuY3Rpb24obmFtZSwgb2JqZWN0LCBtZXRob2RzKXsKKwl2YXIgaXNUeXBlID0gKG9iamVjdCAhPSBPYmplY3QpLAorCQlwcm90b3R5cGUgPSBvYmplY3QucHJvdG90eXBlOworCisJaWYgKGlzVHlwZSkgb2JqZWN0ID0gbmV3IFR5cGUobmFtZSwgb2JqZWN0KTsKKworCWZvciAodmFyIGkgPSAwLCBsID0gbWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspeworCQl2YXIga2V5ID0gbWV0aG9kc1tpXSwKKwkJCWdlbmVyaWMgPSBvYmplY3Rba2V5XSwKKwkJCXByb3RvID0gcHJvdG90eXBlW2tleV07CisKKwkJaWYgKGdlbmVyaWMpIGdlbmVyaWMucHJvdGVjdCgpOworCisJCWlmIChpc1R5cGUgJiYgcHJvdG8peworCQkJZGVsZXRlIHByb3RvdHlwZVtrZXldOworCQkJcHJvdG90eXBlW2tleV0gPSBwcm90by5wcm90ZWN0KCk7CisJCX0KKwl9CisKKwlpZiAoaXNUeXBlKSBvYmplY3QuaW1wbGVtZW50KHByb3RvdHlwZSk7CisKKwlyZXR1cm4gZm9yY2U7Cit9OworCitmb3JjZSgnU3RyaW5nJywgU3RyaW5nLCBbCisJJ2NoYXJBdCcsICdjaGFyQ29kZUF0JywgJ2NvbmNhdCcsICdpbmRleE9mJywgJ2xhc3RJbmRleE9mJywgJ21hdGNoJywgJ3F1b3RlJywgJ3JlcGxhY2UnLCAnc2VhcmNoJywKKwknc2xpY2UnLCAnc3BsaXQnLCAnc3Vic3RyJywgJ3N1YnN0cmluZycsICd0b0xvd2VyQ2FzZScsICd0b1VwcGVyQ2FzZScKK10pKCdBcnJheScsIEFycmF5LCBbCisJJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZScsCisJJ2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnZmlsdGVyJywgJ2ZvckVhY2gnLCAnZXZlcnknLCAnbWFwJywgJ3NvbWUnLCAncmVkdWNlJywgJ3JlZHVjZVJpZ2h0JworXSkoJ051bWJlcicsIE51bWJlciwgWworCSd0b0V4cG9uZW50aWFsJywgJ3RvRml4ZWQnLCAndG9Mb2NhbGVTdHJpbmcnLCAndG9QcmVjaXNpb24nCitdKSgnRnVuY3Rpb24nLCBGdW5jdGlvbiwgWworCSdhcHBseScsICdjYWxsJywgJ2JpbmQnCitdKSgnUmVnRXhwJywgUmVnRXhwLCBbCisJJ2V4ZWMnLCAndGVzdCcKK10pKCdPYmplY3QnLCBPYmplY3QsIFsKKwknY3JlYXRlJywgJ2RlZmluZVByb3BlcnR5JywgJ2RlZmluZVByb3BlcnRpZXMnLCAna2V5cycsCisJJ2dldFByb3RvdHlwZU9mJywgJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJywKKwkncHJldmVudEV4dGVuc2lvbnMnLCAnaXNFeHRlbnNpYmxlJywgJ3NlYWwnLCAnaXNTZWFsZWQnLCAnZnJlZXplJywgJ2lzRnJvemVuJworXSkoJ0RhdGUnLCBEYXRlLCBbJ25vdyddKTsKKworT2JqZWN0LmV4dGVuZCA9IGV4dGVuZC5vdmVybG9hZFNldHRlcigpOworCitEYXRlLmV4dGVuZCgnbm93JywgZnVuY3Rpb24oKXsKKwlyZXR1cm4gKyhuZXcgRGF0ZSk7Cit9KTsKKworbmV3IFR5cGUoJ0Jvb2xlYW4nLCBCb29sZWFuKTsKKworLy8gZml4ZXMgTmFOIHJldHVybmluZyBhcyBOdW1iZXIKKworTnVtYmVyLnByb3RvdHlwZS4kZmFtaWx5ID0gZnVuY3Rpb24oKXsKKwlyZXR1cm4gaXNGaW5pdGUodGhpcykgPyAnbnVtYmVyJyA6ICdudWxsJzsKK30uaGlkZSgpOworCisvLyBOdW1iZXIucmFuZG9tCisKK051bWJlci5leHRlbmQoJ3JhbmRvbScsIGZ1bmN0aW9uKG1pbiwgbWF4KXsKKwlyZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpICsgbWluKTsKK30pOworCisvLyBmb3JFYWNoLCBlYWNoCisKK3ZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CitPYmplY3QuZXh0ZW5kKCdmb3JFYWNoJywgZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7CisJZm9yICh2YXIga2V5IGluIG9iamVjdCl7CisJCWlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkgZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpOworCX0KK30pOworCitPYmplY3QuZWFjaCA9IE9iamVjdC5mb3JFYWNoOworCitBcnJheS5pbXBsZW1lbnQoeworCisJZm9yRWFjaDogZnVuY3Rpb24oZm4sIGJpbmQpeworCQlmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXsKKwkJCWlmIChpIGluIHRoaXMpIGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcyk7CisJCX0KKwl9LAorCisJZWFjaDogZnVuY3Rpb24oZm4sIGJpbmQpeworCQlBcnJheS5mb3JFYWNoKHRoaXMsIGZuLCBiaW5kKTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKworLy8gQXJyYXkgJiBPYmplY3QgY2xvbmluZywgT2JqZWN0IG1lcmdpbmcgYW5kIGFwcGVuZGluZworCit2YXIgY2xvbmVPZiA9IGZ1bmN0aW9uKGl0ZW0peworCXN3aXRjaCAodHlwZU9mKGl0ZW0pKXsKKwkJY2FzZSAnYXJyYXknOiByZXR1cm4gaXRlbS5jbG9uZSgpOworCQljYXNlICdvYmplY3QnOiByZXR1cm4gT2JqZWN0LmNsb25lKGl0ZW0pOworCQlkZWZhdWx0OiByZXR1cm4gaXRlbTsKKwl9Cit9OworCitBcnJheS5pbXBsZW1lbnQoJ2Nsb25lJywgZnVuY3Rpb24oKXsKKwl2YXIgaSA9IHRoaXMubGVuZ3RoLCBjbG9uZSA9IG5ldyBBcnJheShpKTsKKwl3aGlsZSAoaS0tKSBjbG9uZVtpXSA9IGNsb25lT2YodGhpc1tpXSk7CisJcmV0dXJuIGNsb25lOworfSk7CisKK3ZhciBtZXJnZU9uZSA9IGZ1bmN0aW9uKHNvdXJjZSwga2V5LCBjdXJyZW50KXsKKwlzd2l0Y2ggKHR5cGVPZihjdXJyZW50KSl7CisJCWNhc2UgJ29iamVjdCc6CisJCQlpZiAodHlwZU9mKHNvdXJjZVtrZXldKSA9PSAnb2JqZWN0JykgT2JqZWN0Lm1lcmdlKHNvdXJjZVtrZXldLCBjdXJyZW50KTsKKwkJCWVsc2Ugc291cmNlW2tleV0gPSBPYmplY3QuY2xvbmUoY3VycmVudCk7CisJCWJyZWFrOworCQljYXNlICdhcnJheSc6IHNvdXJjZVtrZXldID0gY3VycmVudC5jbG9uZSgpOyBicmVhazsKKwkJZGVmYXVsdDogc291cmNlW2tleV0gPSBjdXJyZW50OworCX0KKwlyZXR1cm4gc291cmNlOworfTsKKworT2JqZWN0LmV4dGVuZCh7CisKKwltZXJnZTogZnVuY3Rpb24oc291cmNlLCBrLCB2KXsKKwkJaWYgKHR5cGVPZihrKSA9PSAnc3RyaW5nJykgcmV0dXJuIG1lcmdlT25lKHNvdXJjZSwgaywgdik7CisJCWZvciAodmFyIGkgPSAxLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7CisJCQl2YXIgb2JqZWN0ID0gYXJndW1lbnRzW2ldOworCQkJZm9yICh2YXIga2V5IGluIG9iamVjdCkgbWVyZ2VPbmUoc291cmNlLCBrZXksIG9iamVjdFtrZXldKTsKKwkJfQorCQlyZXR1cm4gc291cmNlOworCX0sCisKKwljbG9uZTogZnVuY3Rpb24ob2JqZWN0KXsKKwkJdmFyIGNsb25lID0ge307CisJCWZvciAodmFyIGtleSBpbiBvYmplY3QpIGNsb25lW2tleV0gPSBjbG9uZU9mKG9iamVjdFtrZXldKTsKKwkJcmV0dXJuIGNsb25lOworCX0sCisKKwlhcHBlbmQ6IGZ1bmN0aW9uKG9yaWdpbmFsKXsKKwkJZm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXsKKwkJCXZhciBleHRlbmRlZCA9IGFyZ3VtZW50c1tpXSB8fCB7fTsKKwkJCWZvciAodmFyIGtleSBpbiBleHRlbmRlZCkgb3JpZ2luYWxba2V5XSA9IGV4dGVuZGVkW2tleV07CisJCX0KKwkJcmV0dXJuIG9yaWdpbmFsOworCX0KKworfSk7CisKKy8vIE9iamVjdC1sZXNzIHR5cGVzCisKK1snT2JqZWN0JywgJ1doaXRlU3BhY2UnLCAnVGV4dE5vZGUnLCAnQ29sbGVjdGlvbicsICdBcmd1bWVudHMnXS5lYWNoKGZ1bmN0aW9uKG5hbWUpeworCW5ldyBUeXBlKG5hbWUpOworfSk7CisKKy8vIFVuaXF1ZSBJRAorCit2YXIgVUlEID0gRGF0ZS5ub3coKTsKKworU3RyaW5nLmV4dGVuZCgndW5pcXVlSUQnLCBmdW5jdGlvbigpeworCXJldHVybiAoVUlEKyspLnRvU3RyaW5nKDM2KTsKK30pOworCisvLzwxLjJjb21wYXQ+CisKK3ZhciBIYXNoID0gdGhpcy5IYXNoID0gbmV3IFR5cGUoJ0hhc2gnLCBmdW5jdGlvbihvYmplY3QpeworCWlmICh0eXBlT2Yob2JqZWN0KSA9PSAnaGFzaCcpIG9iamVjdCA9IE9iamVjdC5jbG9uZShvYmplY3QuZ2V0Q2xlYW4oKSk7CisJZm9yICh2YXIga2V5IGluIG9iamVjdCkgdGhpc1trZXldID0gb2JqZWN0W2tleV07CisJcmV0dXJuIHRoaXM7Cit9KTsKKworSGFzaC5pbXBsZW1lbnQoeworCisJZm9yRWFjaDogZnVuY3Rpb24oZm4sIGJpbmQpeworCQlPYmplY3QuZm9yRWFjaCh0aGlzLCBmbiwgYmluZCk7CisJfSwKKworCWdldENsZWFuOiBmdW5jdGlvbigpeworCQl2YXIgY2xlYW4gPSB7fTsKKwkJZm9yICh2YXIga2V5IGluIHRoaXMpeworCQkJaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSkgY2xlYW5ba2V5XSA9IHRoaXNba2V5XTsKKwkJfQorCQlyZXR1cm4gY2xlYW47CisJfSwKKworCWdldExlbmd0aDogZnVuY3Rpb24oKXsKKwkJdmFyIGxlbmd0aCA9IDA7CisJCWZvciAodmFyIGtleSBpbiB0aGlzKXsKKwkJCWlmICh0aGlzLmhhc093blByb3BlcnR5KGtleSkpIGxlbmd0aCsrOworCQl9CisJCXJldHVybiBsZW5ndGg7CisJfQorCit9KTsKKworSGFzaC5hbGlhcygnZWFjaCcsICdmb3JFYWNoJyk7CisKK09iamVjdC50eXBlID0gVHlwZS5pc09iamVjdDsKKwordmFyIE5hdGl2ZSA9IHRoaXMuTmF0aXZlID0gZnVuY3Rpb24ocHJvcGVydGllcyl7CisJcmV0dXJuIG5ldyBUeXBlKHByb3BlcnRpZXMubmFtZSwgcHJvcGVydGllcy5pbml0aWFsaXplKTsKK307CisKK05hdGl2ZS50eXBlID0gVHlwZS50eXBlOworCitOYXRpdmUuaW1wbGVtZW50ID0gZnVuY3Rpb24ob2JqZWN0cywgbWV0aG9kcyl7CisJZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSBvYmplY3RzW2ldLmltcGxlbWVudChtZXRob2RzKTsKKwlyZXR1cm4gTmF0aXZlOworfTsKKwordmFyIGFycmF5VHlwZSA9IEFycmF5LnR5cGU7CitBcnJheS50eXBlID0gZnVuY3Rpb24oaXRlbSl7CisJcmV0dXJuIGluc3RhbmNlT2YoaXRlbSwgQXJyYXkpIHx8IGFycmF5VHlwZShpdGVtKTsKK307CisKK3RoaXMuJEEgPSBmdW5jdGlvbihpdGVtKXsKKwlyZXR1cm4gQXJyYXkuZnJvbShpdGVtKS5zbGljZSgpOworfTsKKwordGhpcy4kYXJndW1lbnRzID0gZnVuY3Rpb24oaSl7CisJcmV0dXJuIGZ1bmN0aW9uKCl7CisJCXJldHVybiBhcmd1bWVudHNbaV07CisJfTsKK307CisKK3RoaXMuJGNoayA9IGZ1bmN0aW9uKG9iail7CisJcmV0dXJuICEhKG9iaiB8fCBvYmogPT09IDApOworfTsKKwordGhpcy4kY2xlYXIgPSBmdW5jdGlvbih0aW1lcil7CisJY2xlYXJUaW1lb3V0KHRpbWVyKTsKKwljbGVhckludGVydmFsKHRpbWVyKTsKKwlyZXR1cm4gbnVsbDsKK307CisKK3RoaXMuJGRlZmluZWQgPSBmdW5jdGlvbihvYmopeworCXJldHVybiAob2JqICE9IG51bGwpOworfTsKKwordGhpcy4kZWFjaCA9IGZ1bmN0aW9uKGl0ZXJhYmxlLCBmbiwgYmluZCl7CisJdmFyIHR5cGUgPSB0eXBlT2YoaXRlcmFibGUpOworCSgodHlwZSA9PSAnYXJndW1lbnRzJyB8fCB0eXBlID09ICdjb2xsZWN0aW9uJyB8fCB0eXBlID09ICdhcnJheScgfHwgdHlwZSA9PSAnZWxlbWVudHMnKSA/IEFycmF5IDogT2JqZWN0KS5lYWNoKGl0ZXJhYmxlLCBmbiwgYmluZCk7Cit9OworCit0aGlzLiRlbXB0eSA9IGZ1bmN0aW9uKCl7fTsKKwordGhpcy4kZXh0ZW5kID0gZnVuY3Rpb24ob3JpZ2luYWwsIGV4dGVuZGVkKXsKKwlyZXR1cm4gT2JqZWN0LmFwcGVuZChvcmlnaW5hbCwgZXh0ZW5kZWQpOworfTsKKwordGhpcy4kSCA9IGZ1bmN0aW9uKG9iamVjdCl7CisJcmV0dXJuIG5ldyBIYXNoKG9iamVjdCk7Cit9OworCit0aGlzLiRtZXJnZSA9IGZ1bmN0aW9uKCl7CisJdmFyIGFyZ3MgPSBBcnJheS5zbGljZShhcmd1bWVudHMpOworCWFyZ3MudW5zaGlmdCh7fSk7CisJcmV0dXJuIE9iamVjdC5tZXJnZS5hcHBseShudWxsLCBhcmdzKTsKK307CisKK3RoaXMuJGxhbWJkYSA9IEZ1bmN0aW9uLmZyb207Cit0aGlzLiRtaXhpbiA9IE9iamVjdC5tZXJnZTsKK3RoaXMuJHJhbmRvbSA9IE51bWJlci5yYW5kb207Cit0aGlzLiRzcGxhdCA9IEFycmF5LmZyb207Cit0aGlzLiR0aW1lID0gRGF0ZS5ub3c7CisKK3RoaXMuJHR5cGUgPSBmdW5jdGlvbihvYmplY3QpeworCXZhciB0eXBlID0gdHlwZU9mKG9iamVjdCk7CisJaWYgKHR5cGUgPT0gJ2VsZW1lbnRzJykgcmV0dXJuICdhcnJheSc7CisJcmV0dXJuICh0eXBlID09ICdudWxsJykgPyBmYWxzZSA6IHR5cGU7Cit9OworCit0aGlzLiR1bmxpbmsgPSBmdW5jdGlvbihvYmplY3QpeworCXN3aXRjaCAodHlwZU9mKG9iamVjdCkpeworCQljYXNlICdvYmplY3QnOiByZXR1cm4gT2JqZWN0LmNsb25lKG9iamVjdCk7CisJCWNhc2UgJ2FycmF5JzogcmV0dXJuIEFycmF5LmNsb25lKG9iamVjdCk7CisJCWNhc2UgJ2hhc2gnOiByZXR1cm4gbmV3IEhhc2gob2JqZWN0KTsKKwkJZGVmYXVsdDogcmV0dXJuIG9iamVjdDsKKwl9Cit9OworCisvLzwvMS4yY29tcGF0PgorCit9KSgpOworCisKKy8qCistLS0KKworbmFtZTogQXJyYXkKKworZGVzY3JpcHRpb246IENvbnRhaW5zIEFycmF5IFByb3RvdHlwZXMgbGlrZSBlYWNoLCBjb250YWlucywgYW5kIGVyYXNlLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworcmVxdWlyZXM6IFR5cGUKKworcHJvdmlkZXM6IEFycmF5CisKKy4uLgorKi8KKworQXJyYXkuaW1wbGVtZW50KHsKKworCS8qPCFFUzU+Ki8KKwlldmVyeTogZnVuY3Rpb24oZm4sIGJpbmQpeworCQlmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXsKKwkJCWlmICgoaSBpbiB0aGlzKSAmJiAhZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIGZhbHNlOworCQl9CisJCXJldHVybiB0cnVlOworCX0sCisKKwlmaWx0ZXI6IGZ1bmN0aW9uKGZuLCBiaW5kKXsKKwkJdmFyIHJlc3VsdHMgPSBbXTsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7CisJCQlpZiAoKGkgaW4gdGhpcykgJiYgZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKSkgcmVzdWx0cy5wdXNoKHRoaXNbaV0pOworCQl9CisJCXJldHVybiByZXN1bHRzOworCX0sCisKKwlpbmRleE9mOiBmdW5jdGlvbihpdGVtLCBmcm9tKXsKKwkJdmFyIGxlbiA9IHRoaXMubGVuZ3RoOworCQlmb3IgKHZhciBpID0gKGZyb20gPCAwKSA/IE1hdGgubWF4KDAsIGxlbiArIGZyb20pIDogZnJvbSB8fCAwOyBpIDwgbGVuOyBpKyspeworCQkJaWYgKHRoaXNbaV0gPT09IGl0ZW0pIHJldHVybiBpOworCQl9CisJCXJldHVybiAtMTsKKwl9LAorCisJbWFwOiBmdW5jdGlvbihmbiwgYmluZCl7CisJCXZhciByZXN1bHRzID0gW107CisJCWZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspeworCQkJaWYgKGkgaW4gdGhpcykgcmVzdWx0c1tpXSA9IGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcyk7CisJCX0KKwkJcmV0dXJuIHJlc3VsdHM7CisJfSwKKworCXNvbWU6IGZ1bmN0aW9uKGZuLCBiaW5kKXsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7CisJCQlpZiAoKGkgaW4gdGhpcykgJiYgZm4uY2FsbChiaW5kLCB0aGlzW2ldLCBpLCB0aGlzKSkgcmV0dXJuIHRydWU7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0sCisJLyo8LyFFUzU+Ki8KKworCWNsZWFuOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7CisJCQlyZXR1cm4gaXRlbSAhPSBudWxsOworCQl9KTsKKwl9LAorCisJaW52b2tlOiBmdW5jdGlvbihtZXRob2ROYW1lKXsKKwkJdmFyIGFyZ3MgPSBBcnJheS5zbGljZShhcmd1bWVudHMsIDEpOworCQlyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oaXRlbSl7CisJCQlyZXR1cm4gaXRlbVttZXRob2ROYW1lXS5hcHBseShpdGVtLCBhcmdzKTsKKwkJfSk7CisJfSwKKworCWFzc29jaWF0ZTogZnVuY3Rpb24oa2V5cyl7CisJCXZhciBvYmogPSB7fSwgbGVuZ3RoID0gTWF0aC5taW4odGhpcy5sZW5ndGgsIGtleXMubGVuZ3RoKTsKKwkJZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgb2JqW2tleXNbaV1dID0gdGhpc1tpXTsKKwkJcmV0dXJuIG9iajsKKwl9LAorCisJbGluazogZnVuY3Rpb24ob2JqZWN0KXsKKwkJdmFyIHJlc3VsdCA9IHt9OworCQlmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKXsKKwkJCWZvciAodmFyIGtleSBpbiBvYmplY3QpeworCQkJCWlmIChvYmplY3Rba2V5XSh0aGlzW2ldKSl7CisJCQkJCXJlc3VsdFtrZXldID0gdGhpc1tpXTsKKwkJCQkJZGVsZXRlIG9iamVjdFtrZXldOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9LAorCisJY29udGFpbnM6IGZ1bmN0aW9uKGl0ZW0sIGZyb20peworCQlyZXR1cm4gdGhpcy5pbmRleE9mKGl0ZW0sIGZyb20pICE9IC0xOworCX0sCisKKwlhcHBlbmQ6IGZ1bmN0aW9uKGFycmF5KXsKKwkJdGhpcy5wdXNoLmFwcGx5KHRoaXMsIGFycmF5KTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWdldExhc3Q6IGZ1bmN0aW9uKCl7CisJCXJldHVybiAodGhpcy5sZW5ndGgpID8gdGhpc1t0aGlzLmxlbmd0aCAtIDFdIDogbnVsbDsKKwl9LAorCisJZ2V0UmFuZG9tOiBmdW5jdGlvbigpeworCQlyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNbTnVtYmVyLnJhbmRvbSgwLCB0aGlzLmxlbmd0aCAtIDEpXSA6IG51bGw7CisJfSwKKworCWluY2x1ZGU6IGZ1bmN0aW9uKGl0ZW0peworCQlpZiAoIXRoaXMuY29udGFpbnMoaXRlbSkpIHRoaXMucHVzaChpdGVtKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWNvbWJpbmU6IGZ1bmN0aW9uKGFycmF5KXsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMuaW5jbHVkZShhcnJheVtpXSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwllcmFzZTogZnVuY3Rpb24oaXRlbSl7CisJCWZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaS0tOyl7CisJCQlpZiAodGhpc1tpXSA9PT0gaXRlbSkgdGhpcy5zcGxpY2UoaSwgMSk7CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWVtcHR5OiBmdW5jdGlvbigpeworCQl0aGlzLmxlbmd0aCA9IDA7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlmbGF0dGVuOiBmdW5jdGlvbigpeworCQl2YXIgYXJyYXkgPSBbXTsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7CisJCQl2YXIgdHlwZSA9IHR5cGVPZih0aGlzW2ldKTsKKwkJCWlmICh0eXBlID09ICdudWxsJykgY29udGludWU7CisJCQlhcnJheSA9IGFycmF5LmNvbmNhdCgodHlwZSA9PSAnYXJyYXknIHx8IHR5cGUgPT0gJ2NvbGxlY3Rpb24nIHx8IHR5cGUgPT0gJ2FyZ3VtZW50cycgfHwgaW5zdGFuY2VPZih0aGlzW2ldLCBBcnJheSkpID8gQXJyYXkuZmxhdHRlbih0aGlzW2ldKSA6IHRoaXNbaV0pOworCQl9CisJCXJldHVybiBhcnJheTsKKwl9LAorCisJcGljazogZnVuY3Rpb24oKXsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7CisJCQlpZiAodGhpc1tpXSAhPSBudWxsKSByZXR1cm4gdGhpc1tpXTsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9LAorCisJaGV4VG9SZ2I6IGZ1bmN0aW9uKGFycmF5KXsKKwkJaWYgKHRoaXMubGVuZ3RoICE9IDMpIHJldHVybiBudWxsOworCQl2YXIgcmdiID0gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUpeworCQkJaWYgKHZhbHVlLmxlbmd0aCA9PSAxKSB2YWx1ZSArPSB2YWx1ZTsKKwkJCXJldHVybiB2YWx1ZS50b0ludCgxNik7CisJCX0pOworCQlyZXR1cm4gKGFycmF5KSA/IHJnYiA6ICdyZ2IoJyArIHJnYiArICcpJzsKKwl9LAorCisJcmdiVG9IZXg6IGZ1bmN0aW9uKGFycmF5KXsKKwkJaWYgKHRoaXMubGVuZ3RoIDwgMykgcmV0dXJuIG51bGw7CisJCWlmICh0aGlzLmxlbmd0aCA9PSA0ICYmIHRoaXNbM10gPT0gMCAmJiAhYXJyYXkpIHJldHVybiAndHJhbnNwYXJlbnQnOworCQl2YXIgaGV4ID0gW107CisJCWZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKXsKKwkJCXZhciBiaXQgPSAodGhpc1tpXSAtIDApLnRvU3RyaW5nKDE2KTsKKwkJCWhleC5wdXNoKChiaXQubGVuZ3RoID09IDEpID8gJzAnICsgYml0IDogYml0KTsKKwkJfQorCQlyZXR1cm4gKGFycmF5KSA/IGhleCA6ICcjJyArIGhleC5qb2luKCcnKTsKKwl9CisKK30pOworCisvLzwxLjJjb21wYXQ+CisKK0FycmF5LmFsaWFzKCdleHRlbmQnLCAnYXBwZW5kJyk7CisKK3ZhciAkcGljayA9IGZ1bmN0aW9uKCl7CisJcmV0dXJuIEFycmF5LmZyb20oYXJndW1lbnRzKS5waWNrKCk7Cit9OworCisvLzwvMS4yY29tcGF0PgorCisKKy8qCistLS0KKworbmFtZTogU3RyaW5nCisKK2Rlc2NyaXB0aW9uOiBDb250YWlucyBTdHJpbmcgUHJvdG90eXBlcyBsaWtlIGNhbWVsQ2FzZSwgY2FwaXRhbGl6ZSwgdGVzdCwgYW5kIHRvSW50LgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworcmVxdWlyZXM6IFR5cGUKKworcHJvdmlkZXM6IFN0cmluZworCisuLi4KKyovCisKK1N0cmluZy5pbXBsZW1lbnQoeworCisJdGVzdDogZnVuY3Rpb24ocmVnZXgsIHBhcmFtcyl7CisJCXJldHVybiAoKHR5cGVPZihyZWdleCkgPT0gJ3JlZ2V4cCcpID8gcmVnZXggOiBuZXcgUmVnRXhwKCcnICsgcmVnZXgsIHBhcmFtcykpLnRlc3QodGhpcyk7CisJfSwKKworCWNvbnRhaW5zOiBmdW5jdGlvbihzdHJpbmcsIHNlcGFyYXRvcil7CisJCXJldHVybiAoc2VwYXJhdG9yKSA/IChzZXBhcmF0b3IgKyB0aGlzICsgc2VwYXJhdG9yKS5pbmRleE9mKHNlcGFyYXRvciArIHN0cmluZyArIHNlcGFyYXRvcikgPiAtMSA6IHRoaXMuaW5kZXhPZihzdHJpbmcpID4gLTE7CisJfSwKKworCXRyaW06IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7CisJfSwKKworCWNsZWFuOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCk7CisJfSwKKworCWNhbWVsQ2FzZTogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMucmVwbGFjZSgvLVxEL2csIGZ1bmN0aW9uKG1hdGNoKXsKKwkJCXJldHVybiBtYXRjaC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTsKKwkJfSk7CisJfSwKKworCWh5cGhlbmF0ZTogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMucmVwbGFjZSgvW0EtWl0vZywgZnVuY3Rpb24obWF0Y2gpeworCQkJcmV0dXJuICgnLScgKyBtYXRjaC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSk7CisJCX0pOworCX0sCisKKwljYXBpdGFsaXplOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5yZXBsYWNlKC9cYlthLXpdL2csIGZ1bmN0aW9uKG1hdGNoKXsKKwkJCXJldHVybiBtYXRjaC50b1VwcGVyQ2FzZSgpOworCQl9KTsKKwl9LAorCisJZXNjYXBlUmVnRXhwOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5yZXBsYWNlKC8oWy0uKis/XiR7fSgpfFtcXVwvXFxdKS9nLCAnXFwkMScpOworCX0sCisKKwl0b0ludDogZnVuY3Rpb24oYmFzZSl7CisJCXJldHVybiBwYXJzZUludCh0aGlzLCBiYXNlIHx8IDEwKTsKKwl9LAorCisJdG9GbG9hdDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7CisJfSwKKworCWhleFRvUmdiOiBmdW5jdGlvbihhcnJheSl7CisJCXZhciBoZXggPSB0aGlzLm1hdGNoKC9eIz8oXHd7MSwyfSkoXHd7MSwyfSkoXHd7MSwyfSkkLyk7CisJCXJldHVybiAoaGV4KSA/IGhleC5zbGljZSgxKS5oZXhUb1JnYihhcnJheSkgOiBudWxsOworCX0sCisKKwlyZ2JUb0hleDogZnVuY3Rpb24oYXJyYXkpeworCQl2YXIgcmdiID0gdGhpcy5tYXRjaCgvXGR7MSwzfS9nKTsKKwkJcmV0dXJuIChyZ2IpID8gcmdiLnJnYlRvSGV4KGFycmF5KSA6IG51bGw7CisJfSwKKworCXN1YnN0aXR1dGU6IGZ1bmN0aW9uKG9iamVjdCwgcmVnZXhwKXsKKwkJcmV0dXJuIHRoaXMucmVwbGFjZShyZWdleHAgfHwgKC9cXD9ceyhbXnt9XSspXH0vZyksIGZ1bmN0aW9uKG1hdGNoLCBuYW1lKXsKKwkJCWlmIChtYXRjaC5jaGFyQXQoMCkgPT0gJ1xcJykgcmV0dXJuIG1hdGNoLnNsaWNlKDEpOworCQkJcmV0dXJuIChvYmplY3RbbmFtZV0gIT0gbnVsbCkgPyBvYmplY3RbbmFtZV0gOiAnJzsKKwkJfSk7CisJfQorCit9KTsKKworCisvKgorLS0tCisKK25hbWU6IE51bWJlcgorCitkZXNjcmlwdGlvbjogQ29udGFpbnMgTnVtYmVyIFByb3RvdHlwZXMgbGlrZSBsaW1pdCwgcm91bmQsIHRpbWVzLCBhbmQgY2VpbC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuCisKK3JlcXVpcmVzOiBUeXBlCisKK3Byb3ZpZGVzOiBOdW1iZXIKKworLi4uCisqLworCitOdW1iZXIuaW1wbGVtZW50KHsKKworCWxpbWl0OiBmdW5jdGlvbihtaW4sIG1heCl7CisJCXJldHVybiBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgdGhpcykpOworCX0sCisKKwlyb3VuZDogZnVuY3Rpb24ocHJlY2lzaW9uKXsKKwkJcHJlY2lzaW9uID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiB8fCAwKS50b0ZpeGVkKHByZWNpc2lvbiA8IDAgPyAtcHJlY2lzaW9uIDogMCk7CisJCXJldHVybiBNYXRoLnJvdW5kKHRoaXMgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uOworCX0sCisKKwl0aW1lczogZnVuY3Rpb24oZm4sIGJpbmQpeworCQlmb3IgKHZhciBpID0gMDsgaSA8IHRoaXM7IGkrKykgZm4uY2FsbChiaW5kLCBpLCB0aGlzKTsKKwl9LAorCisJdG9GbG9hdDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7CisJfSwKKworCXRvSW50OiBmdW5jdGlvbihiYXNlKXsKKwkJcmV0dXJuIHBhcnNlSW50KHRoaXMsIGJhc2UgfHwgMTApOworCX0KKworfSk7CisKK051bWJlci5hbGlhcygnZWFjaCcsICd0aW1lcycpOworCisoZnVuY3Rpb24obWF0aCl7CisJdmFyIG1ldGhvZHMgPSB7fTsKKwltYXRoLmVhY2goZnVuY3Rpb24obmFtZSl7CisJCWlmICghTnVtYmVyW25hbWVdKSBtZXRob2RzW25hbWVdID0gZnVuY3Rpb24oKXsKKwkJCXJldHVybiBNYXRoW25hbWVdLmFwcGx5KG51bGwsIFt0aGlzXS5jb25jYXQoQXJyYXkuZnJvbShhcmd1bWVudHMpKSk7CisJCX07CisJfSk7CisJTnVtYmVyLmltcGxlbWVudChtZXRob2RzKTsKK30pKFsnYWJzJywgJ2Fjb3MnLCAnYXNpbicsICdhdGFuJywgJ2F0YW4yJywgJ2NlaWwnLCAnY29zJywgJ2V4cCcsICdmbG9vcicsICdsb2cnLCAnbWF4JywgJ21pbicsICdwb3cnLCAnc2luJywgJ3NxcnQnLCAndGFuJ10pOworCisKKy8qCistLS0KKworbmFtZTogRnVuY3Rpb24KKworZGVzY3JpcHRpb246IENvbnRhaW5zIEZ1bmN0aW9uIFByb3RvdHlwZXMgbGlrZSBjcmVhdGUsIGJpbmQsIHBhc3MsIGFuZCBkZWxheS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuCisKK3JlcXVpcmVzOiBUeXBlCisKK3Byb3ZpZGVzOiBGdW5jdGlvbgorCisuLi4KKyovCisKK0Z1bmN0aW9uLmV4dGVuZCh7CisKKwlhdHRlbXB0OiBmdW5jdGlvbigpeworCQlmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspeworCQkJdHJ5IHsKKwkJCQlyZXR1cm4gYXJndW1lbnRzW2ldKCk7CisJCQl9IGNhdGNoIChlKXt9CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCit9KTsKKworRnVuY3Rpb24uaW1wbGVtZW50KHsKKworCWF0dGVtcHQ6IGZ1bmN0aW9uKGFyZ3MsIGJpbmQpeworCQl0cnkgeworCQkJcmV0dXJuIHRoaXMuYXBwbHkoYmluZCwgQXJyYXkuZnJvbShhcmdzKSk7CisJCX0gY2F0Y2ggKGUpe30KKworCQlyZXR1cm4gbnVsbDsKKwl9LAorCisJLyo8IUVTNT4qLworCWJpbmQ6IGZ1bmN0aW9uKGJpbmQpeworCQl2YXIgc2VsZiA9IHRoaXMsCisJCQlhcmdzID0gKGFyZ3VtZW50cy5sZW5ndGggPiAxKSA/IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSkgOiBudWxsOworCisJCXJldHVybiBmdW5jdGlvbigpeworCQkJaWYgKCFhcmdzICYmICFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc2VsZi5jYWxsKGJpbmQpOworCQkJaWYgKGFyZ3MgJiYgYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHNlbGYuYXBwbHkoYmluZCwgYXJncy5jb25jYXQoQXJyYXkuZnJvbShhcmd1bWVudHMpKSk7CisJCQlyZXR1cm4gc2VsZi5hcHBseShiaW5kLCBhcmdzIHx8IGFyZ3VtZW50cyk7CisJCX07CisJfSwKKwkvKjwvIUVTNT4qLworCisJcGFzczogZnVuY3Rpb24oYXJncywgYmluZCl7CisJCXZhciBzZWxmID0gdGhpczsKKwkJaWYgKGFyZ3MgIT0gbnVsbCkgYXJncyA9IEFycmF5LmZyb20oYXJncyk7CisJCXJldHVybiBmdW5jdGlvbigpeworCQkJcmV0dXJuIHNlbGYuYXBwbHkoYmluZCwgYXJncyB8fCBhcmd1bWVudHMpOworCQl9OworCX0sCisKKwlkZWxheTogZnVuY3Rpb24oZGVsYXksIGJpbmQsIGFyZ3MpeworCQlyZXR1cm4gc2V0VGltZW91dCh0aGlzLnBhc3MoKGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJpbmQpLCBkZWxheSk7CisJfSwKKworCXBlcmlvZGljYWw6IGZ1bmN0aW9uKHBlcmlvZGljYWwsIGJpbmQsIGFyZ3MpeworCQlyZXR1cm4gc2V0SW50ZXJ2YWwodGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBbXSA6IGFyZ3MpLCBiaW5kKSwgcGVyaW9kaWNhbCk7CisJfQorCit9KTsKKworLy88MS4yY29tcGF0PgorCitkZWxldGUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7CisKK0Z1bmN0aW9uLmltcGxlbWVudCh7CisKKwljcmVhdGU6IGZ1bmN0aW9uKG9wdGlvbnMpeworCQl2YXIgc2VsZiA9IHRoaXM7CisJCW9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworCQlyZXR1cm4gZnVuY3Rpb24oZXZlbnQpeworCQkJdmFyIGFyZ3MgPSBvcHRpb25zLmFyZ3VtZW50czsKKwkJCWFyZ3MgPSAoYXJncyAhPSBudWxsKSA/IEFycmF5LmZyb20oYXJncykgOiBBcnJheS5zbGljZShhcmd1bWVudHMsIChvcHRpb25zLmV2ZW50KSA/IDEgOiAwKTsKKwkJCWlmIChvcHRpb25zLmV2ZW50KSBhcmdzID0gW2V2ZW50IHx8IHdpbmRvdy5ldmVudF0uZXh0ZW5kKGFyZ3MpOworCQkJdmFyIHJldHVybnMgPSBmdW5jdGlvbigpeworCQkJCXJldHVybiBzZWxmLmFwcGx5KG9wdGlvbnMuYmluZCB8fCBudWxsLCBhcmdzKTsKKwkJCX07CisJCQlpZiAob3B0aW9ucy5kZWxheSkgcmV0dXJuIHNldFRpbWVvdXQocmV0dXJucywgb3B0aW9ucy5kZWxheSk7CisJCQlpZiAob3B0aW9ucy5wZXJpb2RpY2FsKSByZXR1cm4gc2V0SW50ZXJ2YWwocmV0dXJucywgb3B0aW9ucy5wZXJpb2RpY2FsKTsKKwkJCWlmIChvcHRpb25zLmF0dGVtcHQpIHJldHVybiBGdW5jdGlvbi5hdHRlbXB0KHJldHVybnMpOworCQkJcmV0dXJuIHJldHVybnMoKTsKKwkJfTsKKwl9LAorCisJYmluZDogZnVuY3Rpb24oYmluZCwgYXJncyl7CisJCXZhciBzZWxmID0gdGhpczsKKwkJaWYgKGFyZ3MgIT0gbnVsbCkgYXJncyA9IEFycmF5LmZyb20oYXJncyk7CisJCXJldHVybiBmdW5jdGlvbigpeworCQkJcmV0dXJuIHNlbGYuYXBwbHkoYmluZCwgYXJncyB8fCBhcmd1bWVudHMpOworCQl9OworCX0sCisKKwliaW5kV2l0aEV2ZW50OiBmdW5jdGlvbihiaW5kLCBhcmdzKXsKKwkJdmFyIHNlbGYgPSB0aGlzOworCQlpZiAoYXJncyAhPSBudWxsKSBhcmdzID0gQXJyYXkuZnJvbShhcmdzKTsKKwkJcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KXsKKwkJCXJldHVybiBzZWxmLmFwcGx5KGJpbmQsIChhcmdzID09IG51bGwpID8gYXJndW1lbnRzIDogW2V2ZW50XS5jb25jYXQoYXJncykpOworCQl9OworCX0sCisKKwlydW46IGZ1bmN0aW9uKGFyZ3MsIGJpbmQpeworCQlyZXR1cm4gdGhpcy5hcHBseShiaW5kLCBBcnJheS5mcm9tKGFyZ3MpKTsKKwl9CisKK30pOworCit2YXIgJHRyeSA9IEZ1bmN0aW9uLmF0dGVtcHQ7CisKKy8vPC8xLjJjb21wYXQ+CisKKworLyoKKy0tLQorCituYW1lOiBPYmplY3QKKworZGVzY3JpcHRpb246IE9iamVjdCBnZW5lcmljIG1ldGhvZHMKKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuCisKK3JlcXVpcmVzOiBUeXBlCisKK3Byb3ZpZGVzOiBbT2JqZWN0LCBIYXNoXQorCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCit2YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OworCitPYmplY3QuZXh0ZW5kKHsKKworCXN1YnNldDogZnVuY3Rpb24ob2JqZWN0LCBrZXlzKXsKKwkJdmFyIHJlc3VsdHMgPSB7fTsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7CisJCQl2YXIgayA9IGtleXNbaV07CisJCQlpZiAoayBpbiBvYmplY3QpIHJlc3VsdHNba10gPSBvYmplY3Rba107CisJCX0KKwkJcmV0dXJuIHJlc3VsdHM7CisJfSwKKworCW1hcDogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7CisJCXZhciByZXN1bHRzID0ge307CisJCWZvciAodmFyIGtleSBpbiBvYmplY3QpeworCQkJaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSByZXN1bHRzW2tleV0gPSBmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIHJlc3VsdHM7CisJfSwKKworCWZpbHRlcjogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7CisJCXZhciByZXN1bHRzID0ge307CisJCWZvciAodmFyIGtleSBpbiBvYmplY3QpeworCQkJdmFyIHZhbHVlID0gb2JqZWN0W2tleV07CisJCQlpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZm4uY2FsbChiaW5kLCB2YWx1ZSwga2V5LCBvYmplY3QpKSByZXN1bHRzW2tleV0gPSB2YWx1ZTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0czsKKwl9LAorCisJZXZlcnk6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpeworCQlmb3IgKHZhciBrZXkgaW4gb2JqZWN0KXsKKwkJCWlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiAhZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5KSkgcmV0dXJuIGZhbHNlOworCQl9CisJCXJldHVybiB0cnVlOworCX0sCisKKwlzb21lOiBmdW5jdGlvbihvYmplY3QsIGZuLCBiaW5kKXsKKwkJZm9yICh2YXIga2V5IGluIG9iamVjdCl7CisJCQlpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5KSkgcmV0dXJuIHRydWU7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0sCisKKwlrZXlzOiBmdW5jdGlvbihvYmplY3QpeworCQl2YXIga2V5cyA9IFtdOworCQlmb3IgKHZhciBrZXkgaW4gb2JqZWN0KXsKKwkJCWlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkga2V5cy5wdXNoKGtleSk7CisJCX0KKwkJcmV0dXJuIGtleXM7CisJfSwKKworCXZhbHVlczogZnVuY3Rpb24ob2JqZWN0KXsKKwkJdmFyIHZhbHVlcyA9IFtdOworCQlmb3IgKHZhciBrZXkgaW4gb2JqZWN0KXsKKwkJCWlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkgdmFsdWVzLnB1c2gob2JqZWN0W2tleV0pOworCQl9CisJCXJldHVybiB2YWx1ZXM7CisJfSwKKworCWdldExlbmd0aDogZnVuY3Rpb24ob2JqZWN0KXsKKwkJcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoOworCX0sCisKKwlrZXlPZjogZnVuY3Rpb24ob2JqZWN0LCB2YWx1ZSl7CisJCWZvciAodmFyIGtleSBpbiBvYmplY3QpeworCQkJaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIG9iamVjdFtrZXldID09PSB2YWx1ZSkgcmV0dXJuIGtleTsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9LAorCisJY29udGFpbnM6IGZ1bmN0aW9uKG9iamVjdCwgdmFsdWUpeworCQlyZXR1cm4gT2JqZWN0LmtleU9mKG9iamVjdCwgdmFsdWUpICE9IG51bGw7CisJfSwKKworCXRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKG9iamVjdCwgYmFzZSl7CisJCXZhciBxdWVyeVN0cmluZyA9IFtdOworCisJCU9iamVjdC5lYWNoKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSl7CisJCQlpZiAoYmFzZSkga2V5ID0gYmFzZSArICdbJyArIGtleSArICddJzsKKwkJCXZhciByZXN1bHQ7CisJCQlzd2l0Y2ggKHR5cGVPZih2YWx1ZSkpeworCQkJCWNhc2UgJ29iamVjdCc6IHJlc3VsdCA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKHZhbHVlLCBrZXkpOyBicmVhazsKKwkJCQljYXNlICdhcnJheSc6CisJCQkJCXZhciBxcyA9IHt9OworCQkJCQl2YWx1ZS5lYWNoKGZ1bmN0aW9uKHZhbCwgaSl7CisJCQkJCQlxc1tpXSA9IHZhbDsKKwkJCQkJfSk7CisJCQkJCXJlc3VsdCA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKHFzLCBrZXkpOworCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6IHJlc3VsdCA9IGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7CisJCQl9CisJCQlpZiAodmFsdWUgIT0gbnVsbCkgcXVlcnlTdHJpbmcucHVzaChyZXN1bHQpOworCQl9KTsKKworCQlyZXR1cm4gcXVlcnlTdHJpbmcuam9pbignJicpOworCX0KKworfSk7CisKK30pKCk7CisKKy8vPDEuMmNvbXBhdD4KKworSGFzaC5pbXBsZW1lbnQoeworCisJaGFzOiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LAorCisJa2V5T2Y6IGZ1bmN0aW9uKHZhbHVlKXsKKwkJcmV0dXJuIE9iamVjdC5rZXlPZih0aGlzLCB2YWx1ZSk7CisJfSwKKworCWhhc1ZhbHVlOiBmdW5jdGlvbih2YWx1ZSl7CisJCXJldHVybiBPYmplY3QuY29udGFpbnModGhpcywgdmFsdWUpOworCX0sCisKKwlleHRlbmQ6IGZ1bmN0aW9uKHByb3BlcnRpZXMpeworCQlIYXNoLmVhY2gocHJvcGVydGllcyB8fCB7fSwgZnVuY3Rpb24odmFsdWUsIGtleSl7CisJCQlIYXNoLnNldCh0aGlzLCBrZXksIHZhbHVlKTsKKwkJfSwgdGhpcyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwljb21iaW5lOiBmdW5jdGlvbihwcm9wZXJ0aWVzKXsKKwkJSGFzaC5lYWNoKHByb3BlcnRpZXMgfHwge30sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpeworCQkJSGFzaC5pbmNsdWRlKHRoaXMsIGtleSwgdmFsdWUpOworCQl9LCB0aGlzKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWVyYXNlOiBmdW5jdGlvbihrZXkpeworCQlpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSBkZWxldGUgdGhpc1trZXldOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZ2V0OiBmdW5jdGlvbihrZXkpeworCQlyZXR1cm4gKHRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSkgPyB0aGlzW2tleV0gOiBudWxsOworCX0sCisKKwlzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsdWUpeworCQlpZiAoIXRoaXNba2V5XSB8fCB0aGlzLmhhc093blByb3BlcnR5KGtleSkpIHRoaXNba2V5XSA9IHZhbHVlOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZW1wdHk6IGZ1bmN0aW9uKCl7CisJCUhhc2guZWFjaCh0aGlzLCBmdW5jdGlvbih2YWx1ZSwga2V5KXsKKwkJCWRlbGV0ZSB0aGlzW2tleV07CisJCX0sIHRoaXMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJaW5jbHVkZTogZnVuY3Rpb24oa2V5LCB2YWx1ZSl7CisJCWlmICh0aGlzW2tleV0gPT0gbnVsbCkgdGhpc1trZXldID0gdmFsdWU7CisJCXJldHVybiB0aGlzOworCX0sCisKKwltYXA6IGZ1bmN0aW9uKGZuLCBiaW5kKXsKKwkJcmV0dXJuIG5ldyBIYXNoKE9iamVjdC5tYXAodGhpcywgZm4sIGJpbmQpKTsKKwl9LAorCisJZmlsdGVyOiBmdW5jdGlvbihmbiwgYmluZCl7CisJCXJldHVybiBuZXcgSGFzaChPYmplY3QuZmlsdGVyKHRoaXMsIGZuLCBiaW5kKSk7CisJfSwKKworCWV2ZXJ5OiBmdW5jdGlvbihmbiwgYmluZCl7CisJCXJldHVybiBPYmplY3QuZXZlcnkodGhpcywgZm4sIGJpbmQpOworCX0sCisKKwlzb21lOiBmdW5jdGlvbihmbiwgYmluZCl7CisJCXJldHVybiBPYmplY3Quc29tZSh0aGlzLCBmbiwgYmluZCk7CisJfSwKKworCWdldEtleXM6IGZ1bmN0aW9uKCl7CisJCXJldHVybiBPYmplY3Qua2V5cyh0aGlzKTsKKwl9LAorCisJZ2V0VmFsdWVzOiBmdW5jdGlvbigpeworCQlyZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzKTsKKwl9LAorCisJdG9RdWVyeVN0cmluZzogZnVuY3Rpb24oYmFzZSl7CisJCXJldHVybiBPYmplY3QudG9RdWVyeVN0cmluZyh0aGlzLCBiYXNlKTsKKwl9CisKK30pOworCitIYXNoLmV4dGVuZCA9IE9iamVjdC5hcHBlbmQ7CisKK0hhc2guYWxpYXMoe2luZGV4T2Y6ICdrZXlPZicsIGNvbnRhaW5zOiAnaGFzVmFsdWUnfSk7CisKKy8vPC8xLjJjb21wYXQ+CisKKworLyoKKy0tLQorCituYW1lOiBCcm93c2VyCisKK2Rlc2NyaXB0aW9uOiBUaGUgQnJvd3NlciBPYmplY3QuIENvbnRhaW5zIEJyb3dzZXIgaW5pdGlhbGl6YXRpb24sIFdpbmRvdyBhbmQgRG9jdW1lbnQsIGFuZCB0aGUgQnJvd3NlciBIYXNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworcmVxdWlyZXM6IFtBcnJheSwgRnVuY3Rpb24sIE51bWJlciwgU3RyaW5nXQorCitwcm92aWRlczogW0Jyb3dzZXIsIFdpbmRvdywgRG9jdW1lbnRdCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK3ZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnQ7Cit2YXIgd2luZG93ID0gZG9jdW1lbnQud2luZG93ID0gdGhpczsKKwordmFyIFVJRCA9IDE7CisKK3RoaXMuJHVpZCA9ICh3aW5kb3cuQWN0aXZlWE9iamVjdCkgPyBmdW5jdGlvbihpdGVtKXsKKwlyZXR1cm4gKGl0ZW0udWlkIHx8IChpdGVtLnVpZCA9IFtVSUQrK10pKVswXTsKK30gOiBmdW5jdGlvbihpdGVtKXsKKwlyZXR1cm4gaXRlbS51aWQgfHwgKGl0ZW0udWlkID0gVUlEKyspOworfTsKKworJHVpZCh3aW5kb3cpOworJHVpZChkb2N1bWVudCk7CisKK3ZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSwKKwlwbGF0Zm9ybSA9IG5hdmlnYXRvci5wbGF0Zm9ybS50b0xvd2VyQ2FzZSgpLAorCVVBID0gdWEubWF0Y2goLyhvcGVyYXxpZXxmaXJlZm94fGNocm9tZXx2ZXJzaW9uKVtcc1wvOl0oW1x3XGRcLl0rKT8uKj8oc2FmYXJpfHZlcnNpb25bXHNcLzpdKFtcd1xkXC5dKyl8JCkvKSB8fCBbbnVsbCwgJ3Vua25vd24nLCAwXSwKKwltb2RlID0gVUFbMV0gPT0gJ2llJyAmJiBkb2N1bWVudC5kb2N1bWVudE1vZGU7CisKK3ZhciBCcm93c2VyID0gdGhpcy5Ccm93c2VyID0geworCisJZXh0ZW5kOiBGdW5jdGlvbi5wcm90b3R5cGUuZXh0ZW5kLAorCisJbmFtZTogKFVBWzFdID09ICd2ZXJzaW9uJykgPyBVQVszXSA6IFVBWzFdLAorCisJdmVyc2lvbjogbW9kZSB8fCBwYXJzZUZsb2F0KChVQVsxXSA9PSAnb3BlcmEnICYmIFVBWzRdKSA/IFVBWzRdIDogVUFbMl0pLAorCisJUGxhdGZvcm06IHsKKwkJbmFtZTogdWEubWF0Y2goL2lwKD86YWR8b2R8aG9uZSkvKSA/ICdpb3MnIDogKHVhLm1hdGNoKC8oPzp3ZWJvc3xhbmRyb2lkKS8pIHx8IHBsYXRmb3JtLm1hdGNoKC9tYWN8d2lufGxpbnV4LykgfHwgWydvdGhlciddKVswXQorCX0sCisKKwlGZWF0dXJlczogeworCQl4cGF0aDogISEoZG9jdW1lbnQuZXZhbHVhdGUpLAorCQlhaXI6ICEhKHdpbmRvdy5ydW50aW1lKSwKKwkJcXVlcnk6ICEhKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IpLAorCQlqc29uOiAhISh3aW5kb3cuSlNPTikKKwl9LAorCisJUGx1Z2luczoge30KKworfTsKKworQnJvd3NlcltCcm93c2VyLm5hbWVdID0gdHJ1ZTsKK0Jyb3dzZXJbQnJvd3Nlci5uYW1lICsgcGFyc2VJbnQoQnJvd3Nlci52ZXJzaW9uLCAxMCldID0gdHJ1ZTsKK0Jyb3dzZXIuUGxhdGZvcm1bQnJvd3Nlci5QbGF0Zm9ybS5uYW1lXSA9IHRydWU7CisKKy8vIFJlcXVlc3QKKworQnJvd3Nlci5SZXF1ZXN0ID0gKGZ1bmN0aW9uKCl7CisKKwl2YXIgWE1MSFRUUCA9IGZ1bmN0aW9uKCl7CisJCXJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKwl9OworCisJdmFyIE1TWE1MMiA9IGZ1bmN0aW9uKCl7CisJCXJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTVNYTUwyLlhNTEhUVFAnKTsKKwl9OworCisJdmFyIE1TWE1MID0gZnVuY3Rpb24oKXsKKwkJcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpOworCX07CisKKwlyZXR1cm4gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpeworCQlYTUxIVFRQKCk7CisJCXJldHVybiBYTUxIVFRQOworCX0sIGZ1bmN0aW9uKCl7CisJCU1TWE1MMigpOworCQlyZXR1cm4gTVNYTUwyOworCX0sIGZ1bmN0aW9uKCl7CisJCU1TWE1MKCk7CisJCXJldHVybiBNU1hNTDsKKwl9KTsKKworfSkoKTsKKworQnJvd3Nlci5GZWF0dXJlcy54aHIgPSAhIShCcm93c2VyLlJlcXVlc3QpOworCisvLyBGbGFzaCBkZXRlY3Rpb24KKwordmFyIHZlcnNpb24gPSAoRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpeworCXJldHVybiBuYXZpZ2F0b3IucGx1Z2luc1snU2hvY2t3YXZlIEZsYXNoJ10uZGVzY3JpcHRpb247Cit9LCBmdW5jdGlvbigpeworCXJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2gnKS5HZXRWYXJpYWJsZSgnJHZlcnNpb24nKTsKK30pIHx8ICcwIHIwJykubWF0Y2goL1xkKy9nKTsKKworQnJvd3Nlci5QbHVnaW5zLkZsYXNoID0geworCXZlcnNpb246IE51bWJlcih2ZXJzaW9uWzBdIHx8ICcwLicgKyB2ZXJzaW9uWzFdKSB8fCAwLAorCWJ1aWxkOiBOdW1iZXIodmVyc2lvblsyXSkgfHwgMAorfTsKKworLy8gU3RyaW5nIHNjcmlwdHMKKworQnJvd3Nlci5leGVjID0gZnVuY3Rpb24odGV4dCl7CisJaWYgKCF0ZXh0KSByZXR1cm4gdGV4dDsKKwlpZiAod2luZG93LmV4ZWNTY3JpcHQpeworCQl3aW5kb3cuZXhlY1NjcmlwdCh0ZXh0KTsKKwl9IGVsc2UgeworCQl2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CisJCXNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9qYXZhc2NyaXB0Jyk7CisJCXNjcmlwdC50ZXh0ID0gdGV4dDsKKwkJZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpOworCQlkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKHNjcmlwdCk7CisJfQorCXJldHVybiB0ZXh0OworfTsKKworU3RyaW5nLmltcGxlbWVudCgnc3RyaXBTY3JpcHRzJywgZnVuY3Rpb24oZXhlYyl7CisJdmFyIHNjcmlwdHMgPSAnJzsKKwl2YXIgdGV4dCA9IHRoaXMucmVwbGFjZSgvPHNjcmlwdFtePl0qPihbXHNcU10qPyk8XC9zY3JpcHQ+L2dpLCBmdW5jdGlvbihhbGwsIGNvZGUpeworCQlzY3JpcHRzICs9IGNvZGUgKyAnXG4nOworCQlyZXR1cm4gJyc7CisJfSk7CisJaWYgKGV4ZWMgPT09IHRydWUpIEJyb3dzZXIuZXhlYyhzY3JpcHRzKTsKKwllbHNlIGlmICh0eXBlT2YoZXhlYykgPT0gJ2Z1bmN0aW9uJykgZXhlYyhzY3JpcHRzLCB0ZXh0KTsKKwlyZXR1cm4gdGV4dDsKK30pOworCisvLyBXaW5kb3csIERvY3VtZW50CisKK0Jyb3dzZXIuZXh0ZW5kKHsKKwlEb2N1bWVudDogdGhpcy5Eb2N1bWVudCwKKwlXaW5kb3c6IHRoaXMuV2luZG93LAorCUVsZW1lbnQ6IHRoaXMuRWxlbWVudCwKKwlFdmVudDogdGhpcy5FdmVudAorfSk7CisKK3RoaXMuV2luZG93ID0gdGhpcy4kY29uc3RydWN0b3IgPSBuZXcgVHlwZSgnV2luZG93JywgZnVuY3Rpb24oKXt9KTsKKwordGhpcy4kZmFtaWx5ID0gRnVuY3Rpb24uZnJvbSgnd2luZG93JykuaGlkZSgpOworCitXaW5kb3cubWlycm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7CisJd2luZG93W25hbWVdID0gbWV0aG9kOworfSk7CisKK3RoaXMuRG9jdW1lbnQgPSBkb2N1bWVudC4kY29uc3RydWN0b3IgPSBuZXcgVHlwZSgnRG9jdW1lbnQnLCBmdW5jdGlvbigpe30pOworCitkb2N1bWVudC4kZmFtaWx5ID0gRnVuY3Rpb24uZnJvbSgnZG9jdW1lbnQnKS5oaWRlKCk7CisKK0RvY3VtZW50Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2QpeworCWRvY3VtZW50W25hbWVdID0gbWV0aG9kOworfSk7CisKK2RvY3VtZW50Lmh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CitpZiAoIWRvY3VtZW50LmhlYWQpIGRvY3VtZW50LmhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdOworCitpZiAoZG9jdW1lbnQuZXhlY0NvbW1hbmQpIHRyeSB7CisJZG9jdW1lbnQuZXhlY0NvbW1hbmQoIkJhY2tncm91bmRJbWFnZUNhY2hlIiwgZmFsc2UsIHRydWUpOworfSBjYXRjaCAoZSl7fQorCisvKjxsdElFOT4qLworaWYgKHRoaXMuYXR0YWNoRXZlbnQgJiYgIXRoaXMuYWRkRXZlbnRMaXN0ZW5lcil7CisJdmFyIHVubG9hZEV2ZW50ID0gZnVuY3Rpb24oKXsKKwkJdGhpcy5kZXRhY2hFdmVudCgnb251bmxvYWQnLCB1bmxvYWRFdmVudCk7CisJCWRvY3VtZW50LmhlYWQgPSBkb2N1bWVudC5odG1sID0gZG9jdW1lbnQud2luZG93ID0gbnVsbDsKKwl9OworCXRoaXMuYXR0YWNoRXZlbnQoJ29udW5sb2FkJywgdW5sb2FkRXZlbnQpOworfQorCisvLyBJRSBmYWlscyBvbiBjb2xsZWN0aW9ucyBhbmQgPHNlbGVjdD4ub3B0aW9ucyAocmVmZXJzIHRvIDxzZWxlY3Q+KQordmFyIGFycmF5RnJvbSA9IEFycmF5LmZyb207Cit0cnkgeworCWFycmF5RnJvbShkb2N1bWVudC5odG1sLmNoaWxkTm9kZXMpOworfSBjYXRjaChlKXsKKwlBcnJheS5mcm9tID0gZnVuY3Rpb24oaXRlbSl7CisJCWlmICh0eXBlb2YgaXRlbSAhPSAnc3RyaW5nJyAmJiBUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAmJiB0eXBlT2YoaXRlbSkgIT0gJ2FycmF5Jyl7CisJCQl2YXIgaSA9IGl0ZW0ubGVuZ3RoLCBhcnJheSA9IG5ldyBBcnJheShpKTsKKwkJCXdoaWxlIChpLS0pIGFycmF5W2ldID0gaXRlbVtpXTsKKwkJCXJldHVybiBhcnJheTsKKwkJfQorCQlyZXR1cm4gYXJyYXlGcm9tKGl0ZW0pOworCX07CisKKwl2YXIgcHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlLAorCQlzbGljZSA9IHByb3RvdHlwZS5zbGljZTsKKwlbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCcsICdjb25jYXQnLCAnam9pbicsICdzbGljZSddLmVhY2goZnVuY3Rpb24obmFtZSl7CisJCXZhciBtZXRob2QgPSBwcm90b3R5cGVbbmFtZV07CisJCUFycmF5W25hbWVdID0gZnVuY3Rpb24oaXRlbSl7CisJCQlyZXR1cm4gbWV0aG9kLmFwcGx5KEFycmF5LmZyb20oaXRlbSksIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7CisJCX07CisJfSk7Cit9CisvKjwvbHRJRTk+Ki8KKworLy88MS4yY29tcGF0PgorCitpZiAoQnJvd3Nlci5QbGF0Zm9ybS5pb3MpIEJyb3dzZXIuUGxhdGZvcm0uaXBvZCA9IHRydWU7CisKK0Jyb3dzZXIuRW5naW5lID0ge307CisKK3ZhciBzZXRFbmdpbmUgPSBmdW5jdGlvbihuYW1lLCB2ZXJzaW9uKXsKKwlCcm93c2VyLkVuZ2luZS5uYW1lID0gbmFtZTsKKwlCcm93c2VyLkVuZ2luZVtuYW1lICsgdmVyc2lvbl0gPSB0cnVlOworCUJyb3dzZXIuRW5naW5lLnZlcnNpb24gPSB2ZXJzaW9uOworfTsKKworaWYgKEJyb3dzZXIuaWUpeworCUJyb3dzZXIuRW5naW5lLnRyaWRlbnQgPSB0cnVlOworCisJc3dpdGNoIChCcm93c2VyLnZlcnNpb24peworCQljYXNlIDY6IHNldEVuZ2luZSgndHJpZGVudCcsIDQpOyBicmVhazsKKwkJY2FzZSA3OiBzZXRFbmdpbmUoJ3RyaWRlbnQnLCA1KTsgYnJlYWs7CisJCWNhc2UgODogc2V0RW5naW5lKCd0cmlkZW50JywgNik7CisJfQorfQorCitpZiAoQnJvd3Nlci5maXJlZm94KXsKKwlCcm93c2VyLkVuZ2luZS5nZWNrbyA9IHRydWU7CisKKwlpZiAoQnJvd3Nlci52ZXJzaW9uID49IDMpIHNldEVuZ2luZSgnZ2Vja28nLCAxOSk7CisJZWxzZSBzZXRFbmdpbmUoJ2dlY2tvJywgMTgpOworfQorCitpZiAoQnJvd3Nlci5zYWZhcmkgfHwgQnJvd3Nlci5jaHJvbWUpeworCUJyb3dzZXIuRW5naW5lLndlYmtpdCA9IHRydWU7CisKKwlzd2l0Y2ggKEJyb3dzZXIudmVyc2lvbil7CisJCWNhc2UgMjogc2V0RW5naW5lKCd3ZWJraXQnLCA0MTkpOyBicmVhazsKKwkJY2FzZSAzOiBzZXRFbmdpbmUoJ3dlYmtpdCcsIDQyMCk7IGJyZWFrOworCQljYXNlIDQ6IHNldEVuZ2luZSgnd2Via2l0JywgNTI1KTsKKwl9Cit9CisKK2lmIChCcm93c2VyLm9wZXJhKXsKKwlCcm93c2VyLkVuZ2luZS5wcmVzdG8gPSB0cnVlOworCisJaWYgKEJyb3dzZXIudmVyc2lvbiA+PSA5LjYpIHNldEVuZ2luZSgncHJlc3RvJywgOTYwKTsKKwllbHNlIGlmIChCcm93c2VyLnZlcnNpb24gPj0gOS41KSBzZXRFbmdpbmUoJ3ByZXN0bycsIDk1MCk7CisJZWxzZSBzZXRFbmdpbmUoJ3ByZXN0bycsIDkyNSk7Cit9CisKK2lmIChCcm93c2VyLm5hbWUgPT0gJ3Vua25vd24nKXsKKwlzd2l0Y2ggKCh1YS5tYXRjaCgvKD86d2Via2l0fGtodG1sfGdlY2tvKS8pIHx8IFtdKVswXSl7CisJCWNhc2UgJ3dlYmtpdCc6CisJCWNhc2UgJ2todG1sJzoKKwkJCUJyb3dzZXIuRW5naW5lLndlYmtpdCA9IHRydWU7CisJCWJyZWFrOworCQljYXNlICdnZWNrbyc6CisJCQlCcm93c2VyLkVuZ2luZS5nZWNrbyA9IHRydWU7CisJfQorfQorCit0aGlzLiRleGVjID0gQnJvd3Nlci5leGVjOworCisvLzwvMS4yY29tcGF0PgorCit9KSgpOworCisKKy8qCistLS0KKworbmFtZTogRXZlbnQKKworZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBFdmVudCBDbGFzcywgdG8gbWFrZSB0aGUgZXZlbnQgb2JqZWN0IGNyb3NzLWJyb3dzZXIuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCityZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQsIEFycmF5LCBGdW5jdGlvbiwgU3RyaW5nLCBPYmplY3RdCisKK3Byb3ZpZGVzOiBFdmVudAorCisuLi4KKyovCisKK3ZhciBFdmVudCA9IG5ldyBUeXBlKCdFdmVudCcsIGZ1bmN0aW9uKGV2ZW50LCB3aW4peworCWlmICghd2luKSB3aW4gPSB3aW5kb3c7CisJdmFyIGRvYyA9IHdpbi5kb2N1bWVudDsKKwlldmVudCA9IGV2ZW50IHx8IHdpbi5ldmVudDsKKwlpZiAoZXZlbnQuJGV4dGVuZGVkKSByZXR1cm4gZXZlbnQ7CisJdGhpcy4kZXh0ZW5kZWQgPSB0cnVlOworCXZhciB0eXBlID0gZXZlbnQudHlwZSwKKwkJdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQsCisJCXBhZ2UgPSB7fSwKKwkJY2xpZW50ID0ge30sCisJCXJlbGF0ZWQgPSBudWxsLAorCQlyaWdodENsaWNrLCB3aGVlbCwgY29kZSwga2V5OworCXdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0Lm5vZGVUeXBlID09IDMpIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlOworCisJaWYgKHR5cGUuaW5kZXhPZigna2V5JykgIT0gLTEpeworCQljb2RlID0gZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZTsKKwkJa2V5ID0gT2JqZWN0LmtleU9mKEV2ZW50LktleXMsIGNvZGUpOworCQlpZiAodHlwZSA9PSAna2V5ZG93bicpeworCQkJdmFyIGZLZXkgPSBjb2RlIC0gMTExOworCQkJaWYgKGZLZXkgPiAwICYmIGZLZXkgPCAxMykga2V5ID0gJ2YnICsgZktleTsKKwkJfQorCQlpZiAoIWtleSkga2V5ID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKS50b0xvd2VyQ2FzZSgpOworCX0gZWxzZSBpZiAoKC9jbGlja3xtb3VzZXxtZW51L2kpLnRlc3QodHlwZSkpeworCQlkb2MgPSAoIWRvYy5jb21wYXRNb2RlIHx8IGRvYy5jb21wYXRNb2RlID09ICdDU1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5ib2R5OworCQlwYWdlID0geworCQkJeDogKGV2ZW50LnBhZ2VYICE9IG51bGwpID8gZXZlbnQucGFnZVggOiBldmVudC5jbGllbnRYICsgZG9jLnNjcm9sbExlZnQsCisJCQl5OiAoZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSA6IGV2ZW50LmNsaWVudFkgKyBkb2Muc2Nyb2xsVG9wCisJCX07CisJCWNsaWVudCA9IHsKKwkJCXg6IChldmVudC5wYWdlWCAhPSBudWxsKSA/IGV2ZW50LnBhZ2VYIC0gd2luLnBhZ2VYT2Zmc2V0IDogZXZlbnQuY2xpZW50WCwKKwkJCXk6IChldmVudC5wYWdlWSAhPSBudWxsKSA/IGV2ZW50LnBhZ2VZIC0gd2luLnBhZ2VZT2Zmc2V0IDogZXZlbnQuY2xpZW50WQorCQl9OworCQlpZiAoKC9ET01Nb3VzZVNjcm9sbHxtb3VzZXdoZWVsLykudGVzdCh0eXBlKSl7CisJCQl3aGVlbCA9IChldmVudC53aGVlbERlbHRhKSA/IGV2ZW50LndoZWVsRGVsdGEgLyAxMjAgOiAtKGV2ZW50LmRldGFpbCB8fCAwKSAvIDM7CisJCX0KKwkJcmlnaHRDbGljayA9IChldmVudC53aGljaCA9PSAzKSB8fCAoZXZlbnQuYnV0dG9uID09IDIpOworCQlpZiAoKC9vdmVyfG91dC8pLnRlc3QodHlwZSkpeworCQkJcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgZXZlbnRbKHR5cGUgPT0gJ21vdXNlb3ZlcicgPyAnZnJvbScgOiAndG8nKSArICdFbGVtZW50J107CisJCQl2YXIgdGVzdFJlbGF0ZWQgPSBmdW5jdGlvbigpeworCQkJCXdoaWxlIChyZWxhdGVkICYmIHJlbGF0ZWQubm9kZVR5cGUgPT0gMykgcmVsYXRlZCA9IHJlbGF0ZWQucGFyZW50Tm9kZTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX07CisJCQl2YXIgaGFzUmVsYXRlZCA9IChCcm93c2VyLmZpcmVmb3gyKSA/IHRlc3RSZWxhdGVkLmF0dGVtcHQoKSA6IHRlc3RSZWxhdGVkKCk7CisJCQlyZWxhdGVkID0gKGhhc1JlbGF0ZWQpID8gcmVsYXRlZCA6IG51bGw7CisJCX0KKwl9IGVsc2UgaWYgKCgvZ2VzdHVyZXx0b3VjaC9pKS50ZXN0KHR5cGUpKXsKKwkJdGhpcy5yb3RhdGlvbiA9IGV2ZW50LnJvdGF0aW9uOworCQl0aGlzLnNjYWxlID0gZXZlbnQuc2NhbGU7CisJCXRoaXMudGFyZ2V0VG91Y2hlcyA9IGV2ZW50LnRhcmdldFRvdWNoZXM7CisJCXRoaXMuY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlczsKKwkJdmFyIHRvdWNoZXMgPSB0aGlzLnRvdWNoZXMgPSBldmVudC50b3VjaGVzOworCQlpZiAodG91Y2hlcyAmJiB0b3VjaGVzWzBdKXsKKwkJCXZhciB0b3VjaCA9IHRvdWNoZXNbMF07CisJCQlwYWdlID0ge3g6IHRvdWNoLnBhZ2VYLCB5OiB0b3VjaC5wYWdlWX07CisJCQljbGllbnQgPSB7eDogdG91Y2guY2xpZW50WCwgeTogdG91Y2guY2xpZW50WX07CisJCX0KKwl9CisKKwlyZXR1cm4gT2JqZWN0LmFwcGVuZCh0aGlzLCB7CisJCWV2ZW50OiBldmVudCwKKwkJdHlwZTogdHlwZSwKKworCQlwYWdlOiBwYWdlLAorCQljbGllbnQ6IGNsaWVudCwKKwkJcmlnaHRDbGljazogcmlnaHRDbGljaywKKworCQl3aGVlbDogd2hlZWwsCisKKwkJcmVsYXRlZFRhcmdldDogZG9jdW1lbnQuaWQocmVsYXRlZCksCisJCXRhcmdldDogZG9jdW1lbnQuaWQodGFyZ2V0KSwKKworCQljb2RlOiBjb2RlLAorCQlrZXk6IGtleSwKKworCQlzaGlmdDogZXZlbnQuc2hpZnRLZXksCisJCWNvbnRyb2w6IGV2ZW50LmN0cmxLZXksCisJCWFsdDogZXZlbnQuYWx0S2V5LAorCQltZXRhOiBldmVudC5tZXRhS2V5CisJfSk7Cit9KTsKKworRXZlbnQuS2V5cyA9IHsKKwknZW50ZXInOiAxMywKKwkndXAnOiAzOCwKKwknZG93bic6IDQwLAorCSdsZWZ0JzogMzcsCisJJ3JpZ2h0JzogMzksCisJJ2VzYyc6IDI3LAorCSdzcGFjZSc6IDMyLAorCSdiYWNrc3BhY2UnOiA4LAorCSd0YWInOiA5LAorCSdkZWxldGUnOiA0NgorfTsKKworLy88MS4yY29tcGF0PgorCitFdmVudC5LZXlzID0gbmV3IEhhc2goRXZlbnQuS2V5cyk7CisKKy8vPC8xLjJjb21wYXQ+CisKK0V2ZW50LmltcGxlbWVudCh7CisKKwlzdG9wOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5zdG9wUHJvcGFnYXRpb24oKS5wcmV2ZW50RGVmYXVsdCgpOworCX0sCisKKwlzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCl7CisJCWlmICh0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbikgdGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKwkJZWxzZSB0aGlzLmV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQpIHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQoKTsKKwkJZWxzZSB0aGlzLmV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7CisJCXJldHVybiB0aGlzOworCX0KKworfSk7CisKKworLyoKKy0tLQorCituYW1lOiBDbGFzcworCitkZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIENsYXNzIEZ1bmN0aW9uIGZvciBlYXNpbHkgY3JlYXRpbmcsIGV4dGVuZGluZywgYW5kIGltcGxlbWVudGluZyByZXVzYWJsZSBDbGFzc2VzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworcmVxdWlyZXM6IFtBcnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgTnVtYmVyXQorCitwcm92aWRlczogQ2xhc3MKKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIENsYXNzID0gdGhpcy5DbGFzcyA9IG5ldyBUeXBlKCdDbGFzcycsIGZ1bmN0aW9uKHBhcmFtcyl7CisJaWYgKGluc3RhbmNlT2YocGFyYW1zLCBGdW5jdGlvbikpIHBhcmFtcyA9IHtpbml0aWFsaXplOiBwYXJhbXN9OworCisJdmFyIG5ld0NsYXNzID0gZnVuY3Rpb24oKXsKKwkJcmVzZXQodGhpcyk7CisJCWlmIChuZXdDbGFzcy4kcHJvdG90eXBpbmcpIHJldHVybiB0aGlzOworCQl0aGlzLiRjYWxsZXIgPSBudWxsOworCQl2YXIgdmFsdWUgPSAodGhpcy5pbml0aWFsaXplKSA/IHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogdGhpczsKKwkJdGhpcy4kY2FsbGVyID0gdGhpcy5jYWxsZXIgPSBudWxsOworCQlyZXR1cm4gdmFsdWU7CisJfS5leHRlbmQodGhpcykuaW1wbGVtZW50KHBhcmFtcyk7CisKKwluZXdDbGFzcy4kY29uc3RydWN0b3IgPSBDbGFzczsKKwluZXdDbGFzcy5wcm90b3R5cGUuJGNvbnN0cnVjdG9yID0gbmV3Q2xhc3M7CisJbmV3Q2xhc3MucHJvdG90eXBlLnBhcmVudCA9IHBhcmVudDsKKworCXJldHVybiBuZXdDbGFzczsKK30pOworCit2YXIgcGFyZW50ID0gZnVuY3Rpb24oKXsKKwlpZiAoIXRoaXMuJGNhbGxlcikgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kICJwYXJlbnQiIGNhbm5vdCBiZSBjYWxsZWQuJyk7CisJdmFyIG5hbWUgPSB0aGlzLiRjYWxsZXIuJG5hbWUsCisJCXBhcmVudCA9IHRoaXMuJGNhbGxlci4kb3duZXIucGFyZW50LAorCQlwcmV2aW91cyA9IChwYXJlbnQpID8gcGFyZW50LnByb3RvdHlwZVtuYW1lXSA6IG51bGw7CisJaWYgKCFwcmV2aW91cykgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kICInICsgbmFtZSArICciIGhhcyBubyBwYXJlbnQuJyk7CisJcmV0dXJuIHByZXZpb3VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cit9OworCit2YXIgcmVzZXQgPSBmdW5jdGlvbihvYmplY3QpeworCWZvciAodmFyIGtleSBpbiBvYmplY3QpeworCQl2YXIgdmFsdWUgPSBvYmplY3Rba2V5XTsKKwkJc3dpdGNoICh0eXBlT2YodmFsdWUpKXsKKwkJCWNhc2UgJ29iamVjdCc6CisJCQkJdmFyIEYgPSBmdW5jdGlvbigpe307CisJCQkJRi5wcm90b3R5cGUgPSB2YWx1ZTsKKwkJCQlvYmplY3Rba2V5XSA9IHJlc2V0KG5ldyBGKTsKKwkJCWJyZWFrOworCQkJY2FzZSAnYXJyYXknOiBvYmplY3Rba2V5XSA9IHZhbHVlLmNsb25lKCk7IGJyZWFrOworCQl9CisJfQorCXJldHVybiBvYmplY3Q7Cit9OworCit2YXIgd3JhcCA9IGZ1bmN0aW9uKHNlbGYsIGtleSwgbWV0aG9kKXsKKwlpZiAobWV0aG9kLiRvcmlnaW4pIG1ldGhvZCA9IG1ldGhvZC4kb3JpZ2luOworCXZhciB3cmFwcGVyID0gZnVuY3Rpb24oKXsKKwkJaWYgKG1ldGhvZC4kcHJvdGVjdGVkICYmIHRoaXMuJGNhbGxlciA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgIicgKyBrZXkgKyAnIiBjYW5ub3QgYmUgY2FsbGVkLicpOworCQl2YXIgY2FsbGVyID0gdGhpcy5jYWxsZXIsIGN1cnJlbnQgPSB0aGlzLiRjYWxsZXI7CisJCXRoaXMuY2FsbGVyID0gY3VycmVudDsgdGhpcy4kY2FsbGVyID0gd3JhcHBlcjsKKwkJdmFyIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCQl0aGlzLiRjYWxsZXIgPSBjdXJyZW50OyB0aGlzLmNhbGxlciA9IGNhbGxlcjsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9LmV4dGVuZCh7JG93bmVyOiBzZWxmLCAkb3JpZ2luOiBtZXRob2QsICRuYW1lOiBrZXl9KTsKKwlyZXR1cm4gd3JhcHBlcjsKK307CisKK3ZhciBpbXBsZW1lbnQgPSBmdW5jdGlvbihrZXksIHZhbHVlLCByZXRhaW4peworCWlmIChDbGFzcy5NdXRhdG9ycy5oYXNPd25Qcm9wZXJ0eShrZXkpKXsKKwkJdmFsdWUgPSBDbGFzcy5NdXRhdG9yc1trZXldLmNhbGwodGhpcywgdmFsdWUpOworCQlpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXM7CisJfQorCisJaWYgKHR5cGVPZih2YWx1ZSkgPT0gJ2Z1bmN0aW9uJyl7CisJCWlmICh2YWx1ZS4kaGlkZGVuKSByZXR1cm4gdGhpczsKKwkJdGhpcy5wcm90b3R5cGVba2V5XSA9IChyZXRhaW4pID8gdmFsdWUgOiB3cmFwKHRoaXMsIGtleSwgdmFsdWUpOworCX0gZWxzZSB7CisJCU9iamVjdC5tZXJnZSh0aGlzLnByb3RvdHlwZSwga2V5LCB2YWx1ZSk7CisJfQorCisJcmV0dXJuIHRoaXM7Cit9OworCit2YXIgZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbihrbGFzcyl7CisJa2xhc3MuJHByb3RvdHlwaW5nID0gdHJ1ZTsKKwl2YXIgcHJvdG8gPSBuZXcga2xhc3M7CisJZGVsZXRlIGtsYXNzLiRwcm90b3R5cGluZzsKKwlyZXR1cm4gcHJvdG87Cit9OworCitDbGFzcy5pbXBsZW1lbnQoJ2ltcGxlbWVudCcsIGltcGxlbWVudC5vdmVybG9hZFNldHRlcigpKTsKKworQ2xhc3MuTXV0YXRvcnMgPSB7CisKKwlFeHRlbmRzOiBmdW5jdGlvbihwYXJlbnQpeworCQl0aGlzLnBhcmVudCA9IHBhcmVudDsKKwkJdGhpcy5wcm90b3R5cGUgPSBnZXRJbnN0YW5jZShwYXJlbnQpOworCX0sCisKKwlJbXBsZW1lbnRzOiBmdW5jdGlvbihpdGVtcyl7CisJCUFycmF5LmZyb20oaXRlbXMpLmVhY2goZnVuY3Rpb24oaXRlbSl7CisJCQl2YXIgaW5zdGFuY2UgPSBuZXcgaXRlbTsKKwkJCWZvciAodmFyIGtleSBpbiBpbnN0YW5jZSkgaW1wbGVtZW50LmNhbGwodGhpcywga2V5LCBpbnN0YW5jZVtrZXldLCB0cnVlKTsKKwkJfSwgdGhpcyk7CisJfQorfTsKKworfSkoKTsKKworCisvKgorLS0tCisKK25hbWU6IENsYXNzLkV4dHJhcworCitkZXNjcmlwdGlvbjogQ29udGFpbnMgVXRpbGl0eSBDbGFzc2VzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGludG8geW91ciBvd24gQ2xhc3NlcyB0byBlYXNlIHRoZSBleGVjdXRpb24gb2YgbWFueSBjb21tb24gdGFza3MuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCityZXF1aXJlczogQ2xhc3MKKworcHJvdmlkZXM6IFtDbGFzcy5FeHRyYXMsIENoYWluLCBFdmVudHMsIE9wdGlvbnNdCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK3RoaXMuQ2hhaW4gPSBuZXcgQ2xhc3MoeworCisJJGNoYWluOiBbXSwKKworCWNoYWluOiBmdW5jdGlvbigpeworCQl0aGlzLiRjaGFpbi5hcHBlbmQoQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWNhbGxDaGFpbjogZnVuY3Rpb24oKXsKKwkJcmV0dXJuICh0aGlzLiRjaGFpbi5sZW5ndGgpID8gdGhpcy4kY2hhaW4uc2hpZnQoKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogZmFsc2U7CisJfSwKKworCWNsZWFyQ2hhaW46IGZ1bmN0aW9uKCl7CisJCXRoaXMuJGNoYWluLmVtcHR5KCk7CisJCXJldHVybiB0aGlzOworCX0KKworfSk7CisKK3ZhciByZW1vdmVPbiA9IGZ1bmN0aW9uKHN0cmluZyl7CisJcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9eb24oW0EtWl0pLywgZnVuY3Rpb24oZnVsbCwgZmlyc3QpeworCQlyZXR1cm4gZmlyc3QudG9Mb3dlckNhc2UoKTsKKwl9KTsKK307CisKK3RoaXMuRXZlbnRzID0gbmV3IENsYXNzKHsKKworCSRldmVudHM6IHt9LAorCisJYWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuLCBpbnRlcm5hbCl7CisJCXR5cGUgPSByZW1vdmVPbih0eXBlKTsKKworCQkvKjwxLjJjb21wYXQ+Ki8KKwkJaWYgKGZuID09ICRlbXB0eSkgcmV0dXJuIHRoaXM7CisJCS8qPC8xLjJjb21wYXQ+Ki8KKworCQl0aGlzLiRldmVudHNbdHlwZV0gPSAodGhpcy4kZXZlbnRzW3R5cGVdIHx8IFtdKS5pbmNsdWRlKGZuKTsKKwkJaWYgKGludGVybmFsKSBmbi5pbnRlcm5hbCA9IHRydWU7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlhZGRFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cyl7CisJCWZvciAodmFyIHR5cGUgaW4gZXZlbnRzKSB0aGlzLmFkZEV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlmaXJlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGFyZ3MsIGRlbGF5KXsKKwkJdHlwZSA9IHJlbW92ZU9uKHR5cGUpOworCQl2YXIgZXZlbnRzID0gdGhpcy4kZXZlbnRzW3R5cGVdOworCQlpZiAoIWV2ZW50cykgcmV0dXJuIHRoaXM7CisJCWFyZ3MgPSBBcnJheS5mcm9tKGFyZ3MpOworCQlldmVudHMuZWFjaChmdW5jdGlvbihmbil7CisJCQlpZiAoZGVsYXkpIGZuLmRlbGF5KGRlbGF5LCB0aGlzLCBhcmdzKTsKKwkJCWVsc2UgZm4uYXBwbHkodGhpcywgYXJncyk7CisJCX0sIHRoaXMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCQorCXJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7CisJCXR5cGUgPSByZW1vdmVPbih0eXBlKTsKKwkJdmFyIGV2ZW50cyA9IHRoaXMuJGV2ZW50c1t0eXBlXTsKKwkJaWYgKGV2ZW50cyAmJiAhZm4uaW50ZXJuYWwpeworCQkJdmFyIGluZGV4ID0gIGV2ZW50cy5pbmRleE9mKGZuKTsKKwkJCWlmIChpbmRleCAhPSAtMSkgZGVsZXRlIGV2ZW50c1tpbmRleF07CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXJlbW92ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXsKKwkJdmFyIHR5cGU7CisJCWlmICh0eXBlT2YoZXZlbnRzKSA9PSAnb2JqZWN0Jyl7CisJCQlmb3IgKHR5cGUgaW4gZXZlbnRzKSB0aGlzLnJlbW92ZUV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQlpZiAoZXZlbnRzKSBldmVudHMgPSByZW1vdmVPbihldmVudHMpOworCQlmb3IgKHR5cGUgaW4gdGhpcy4kZXZlbnRzKXsKKwkJCWlmIChldmVudHMgJiYgZXZlbnRzICE9IHR5cGUpIGNvbnRpbnVlOworCQkJdmFyIGZucyA9IHRoaXMuJGV2ZW50c1t0eXBlXTsKKwkJCWZvciAodmFyIGkgPSBmbnMubGVuZ3RoOyBpLS07KSBpZiAoaSBpbiBmbnMpeworCQkJCXRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZm5zW2ldKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCit0aGlzLk9wdGlvbnMgPSBuZXcgQ2xhc3MoeworCisJc2V0T3B0aW9uczogZnVuY3Rpb24oKXsKKwkJdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSBPYmplY3QubWVyZ2UuYXBwbHkobnVsbCwgW3t9LCB0aGlzLm9wdGlvbnNdLmFwcGVuZChhcmd1bWVudHMpKTsKKwkJaWYgKHRoaXMuYWRkRXZlbnQpIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKXsKKwkJCWlmICh0eXBlT2Yob3B0aW9uc1tvcHRpb25dKSAhPSAnZnVuY3Rpb24nIHx8ICEoL15vbltBLVpdLykudGVzdChvcHRpb24pKSBjb250aW51ZTsKKwkJCXRoaXMuYWRkRXZlbnQob3B0aW9uLCBvcHRpb25zW29wdGlvbl0pOworCQkJZGVsZXRlIG9wdGlvbnNbb3B0aW9uXTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCit9KSgpOworCisKKy8qCistLS0KK25hbWU6IFNsaWNrLlBhcnNlcgorZGVzY3JpcHRpb246IFN0YW5kYWxvbmUgQ1NTMyBTZWxlY3RvciBwYXJzZXIKK3Byb3ZpZGVzOiBTbGljay5QYXJzZXIKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK3ZhciBwYXJzZWQsCisJc2VwYXJhdG9ySW5kZXgsCisJY29tYmluYXRvckluZGV4LAorCXJldmVyc2VkLAorCWNhY2hlID0ge30sCisJcmV2ZXJzZUNhY2hlID0ge30sCisJcmVVbmVzY2FwZSA9IC9cXC9nOworCit2YXIgcGFyc2UgPSBmdW5jdGlvbihleHByZXNzaW9uLCBpc1JldmVyc2VkKXsKKwlpZiAoZXhwcmVzc2lvbiA9PSBudWxsKSByZXR1cm4gbnVsbDsKKwlpZiAoZXhwcmVzc2lvbi5TbGljayA9PT0gdHJ1ZSkgcmV0dXJuIGV4cHJlc3Npb247CisJZXhwcmVzc2lvbiA9ICgnJyArIGV4cHJlc3Npb24pLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7CisJcmV2ZXJzZWQgPSAhIWlzUmV2ZXJzZWQ7CisJdmFyIGN1cnJlbnRDYWNoZSA9IChyZXZlcnNlZCkgPyByZXZlcnNlQ2FjaGUgOiBjYWNoZTsKKwlpZiAoY3VycmVudENhY2hlW2V4cHJlc3Npb25dKSByZXR1cm4gY3VycmVudENhY2hlW2V4cHJlc3Npb25dOworCXBhcnNlZCA9IHsKKwkJU2xpY2s6IHRydWUsCisJCWV4cHJlc3Npb25zOiBbXSwKKwkJcmF3OiBleHByZXNzaW9uLAorCQlyZXZlcnNlOiBmdW5jdGlvbigpeworCQkJcmV0dXJuIHBhcnNlKHRoaXMucmF3LCB0cnVlKTsKKwkJfQorCX07CisJc2VwYXJhdG9ySW5kZXggPSAtMTsKKwl3aGlsZSAoZXhwcmVzc2lvbiAhPSAoZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZShyZWdleHAsIHBhcnNlcikpKTsKKwlwYXJzZWQubGVuZ3RoID0gcGFyc2VkLmV4cHJlc3Npb25zLmxlbmd0aDsKKwlyZXR1cm4gY3VycmVudENhY2hlW3BhcnNlZC5yYXddID0gKHJldmVyc2VkKSA/IHJldmVyc2UocGFyc2VkKSA6IHBhcnNlZDsKK307CisKK3ZhciByZXZlcnNlQ29tYmluYXRvciA9IGZ1bmN0aW9uKGNvbWJpbmF0b3IpeworCWlmIChjb21iaW5hdG9yID09PSAnIScpIHJldHVybiAnICc7CisJZWxzZSBpZiAoY29tYmluYXRvciA9PT0gJyAnKSByZXR1cm4gJyEnOworCWVsc2UgaWYgKCgvXiEvKS50ZXN0KGNvbWJpbmF0b3IpKSByZXR1cm4gY29tYmluYXRvci5yZXBsYWNlKC9eIS8sICcnKTsKKwllbHNlIHJldHVybiAnIScgKyBjb21iaW5hdG9yOworfTsKKwordmFyIHJldmVyc2UgPSBmdW5jdGlvbihleHByZXNzaW9uKXsKKwl2YXIgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zOworCWZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspeworCQl2YXIgZXhwID0gZXhwcmVzc2lvbnNbaV07CisJCXZhciBsYXN0ID0ge3BhcnRzOiBbXSwgdGFnOiAnKicsIGNvbWJpbmF0b3I6IHJldmVyc2VDb21iaW5hdG9yKGV4cFswXS5jb21iaW5hdG9yKX07CisKKwkJZm9yICh2YXIgaiA9IDA7IGogPCBleHAubGVuZ3RoOyBqKyspeworCQkJdmFyIGNleHAgPSBleHBbal07CisJCQlpZiAoIWNleHAucmV2ZXJzZUNvbWJpbmF0b3IpIGNleHAucmV2ZXJzZUNvbWJpbmF0b3IgPSAnICc7CisJCQljZXhwLmNvbWJpbmF0b3IgPSBjZXhwLnJldmVyc2VDb21iaW5hdG9yOworCQkJZGVsZXRlIGNleHAucmV2ZXJzZUNvbWJpbmF0b3I7CisJCX0KKworCQlleHAucmV2ZXJzZSgpLnB1c2gobGFzdCk7CisJfQorCXJldHVybiBleHByZXNzaW9uOworfTsKKwordmFyIGVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cmluZyl7Ly8gQ3JlZGl0OiBYUmVnRXhwIDAuNi4xIChjKSAyMDA3LTIwMDggU3RldmVuIExldml0aGFuIDxodHRwOi8vc3RldmVubGV2aXRoYW4uY29tL3JlZ2V4L3hyZWdleHAvPiBNSVQgTGljZW5zZQorCXJldHVybiBzdHJpbmcucmVwbGFjZSgvWy1bXF17fSgpKis/LlxcXiR8LCNcc10vZywgZnVuY3Rpb24obWF0Y2gpeworCQlyZXR1cm4gJ1xcJyArIG1hdGNoOworCX0pOworfTsKKwordmFyIHJlZ2V4cCA9IG5ldyBSZWdFeHAoCisvKgorIyEvdXNyL2Jpbi9lbnYgcnVieQorcHV0cyAiXHRcdCIgKyBEQVRBLnJlYWQuZ3N1YigvXChcP3hcKXxccysjLiokfFxzK3xcXCR8XFxuLywnJykKK19fRU5EX18KKwkiKD94KV4oPzpcCisJICBcXHMqICggLCApIFxccyogICAgICAgICAgICAgICAjIFNlcGFyYXRvciAgICAgICAgICBcblwKKwl8IFxccyogKCA8Y29tYmluYXRvcj4rICkgXFxzKiAgICMgQ29tYmluYXRvciAgICAgICAgIFxuXAorCXwgICAgICAoIFxccysgKSAgICAgICAgICAgICAgICAgIyBDb21iaW5hdG9yQ2hpbGRyZW4gXG5cCisJfCAgICAgICggPHVuaWNvZGU+KyB8IFxcKiApICAgICAjIFRhZyAgICAgICAgICAgICAgICBcblwKKwl8IFxcIyAgKCA8dW5pY29kZT4rICAgICAgICkgICAgICMgSUQgICAgICAgICAgICAgICAgIFxuXAorCXwgXFwuICAoIDx1bmljb2RlPisgICAgICAgKSAgICAgIyBDbGFzc05hbWUgICAgICAgICAgXG5cCisJfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEF0dHJpYnV0ZSAgICAgICAgICBcblwKKwlcXFsgIFwKKwkJXFxzKiAoPHVuaWNvZGUxPispICAoPzogIFwKKwkJCVxccyogKFsqXiQhfnxdPz0pICAoPzogIFwKKwkJCQlcXHMqICg/OlwKKwkJCQkJKFtcIiddPykoLio/KVxcOSBcCisJCQkJKVwKKwkJCSkgIFwKKwkJKT8gIFxccyogIFwKKwlcXF0oPyFcXF0pIFxuXAorCXwgICA6KyAoIDx1bmljb2RlPisgKSg/OlwKKwlcXCggKD86XAorCQkoPzooW1wiJ10pKFteXFwxMl0qKVxcMTIpfCgoPzpcXChbXildK1xcKXxbXigpXSopKylcCisJKSBcXClcCisJKT9cCisJKSIKKyovCisJIl4oPzpcXHMqKCwpXFxzKnxcXHMqKDxjb21iaW5hdG9yPispXFxzKnwoXFxzKyl8KDx1bmljb2RlPit8XFwqKXxcXCMoPHVuaWNvZGU+Kyl8XFwuKDx1bmljb2RlPispfFxcW1xccyooPHVuaWNvZGUxPispKD86XFxzKihbKl4kIX58XT89KSg/OlxccyooPzooW1wiJ10/KSguKj8pXFw5KSkpP1xccypcXF0oPyFcXF0pfCg6KykoPHVuaWNvZGU+KykoPzpcXCgoPzooPzooW1wiJ10pKFteXFwxM10qKVxcMTMpfCgoPzpcXChbXildK1xcKXxbXigpXSopKykpXFwpKT8pIgorCS5yZXBsYWNlKC88Y29tYmluYXRvcj4vLCAnWycgKyBlc2NhcGVSZWdFeHAoIj4rfmAhQCQlXiY9e31cXDs8LyIpICsgJ10nKQorCS5yZXBsYWNlKC88dW5pY29kZT4vZywgJyg/OltcXHdcXHUwMGExLVxcdUZGRkYtXXxcXFxcW15cXHMwLTlhLWZdKScpCisJLnJlcGxhY2UoLzx1bmljb2RlMT4vZywgJyg/Ols6XFx3XFx1MDBhMS1cXHVGRkZGLV18XFxcXFteXFxzMC05YS1mXSknKQorKTsKKworZnVuY3Rpb24gcGFyc2VyKAorCXJhd01hdGNoLAorCisJc2VwYXJhdG9yLAorCWNvbWJpbmF0b3IsCisJY29tYmluYXRvckNoaWxkcmVuLAorCisJdGFnTmFtZSwKKwlpZCwKKwljbGFzc05hbWUsCisKKwlhdHRyaWJ1dGVLZXksCisJYXR0cmlidXRlT3BlcmF0b3IsCisJYXR0cmlidXRlUXVvdGUsCisJYXR0cmlidXRlVmFsdWUsCisKKwlwc2V1ZG9NYXJrZXIsCisJcHNldWRvQ2xhc3MsCisJcHNldWRvUXVvdGUsCisJcHNldWRvQ2xhc3NRdW90ZWRWYWx1ZSwKKwlwc2V1ZG9DbGFzc1ZhbHVlCispeworCWlmIChzZXBhcmF0b3IgfHwgc2VwYXJhdG9ySW5kZXggPT09IC0xKXsKKwkJcGFyc2VkLmV4cHJlc3Npb25zWysrc2VwYXJhdG9ySW5kZXhdID0gW107CisJCWNvbWJpbmF0b3JJbmRleCA9IC0xOworCQlpZiAoc2VwYXJhdG9yKSByZXR1cm4gJyc7CisJfQorCisJaWYgKGNvbWJpbmF0b3IgfHwgY29tYmluYXRvckNoaWxkcmVuIHx8IGNvbWJpbmF0b3JJbmRleCA9PT0gLTEpeworCQljb21iaW5hdG9yID0gY29tYmluYXRvciB8fCAnICc7CisJCXZhciBjdXJyZW50U2VwYXJhdG9yID0gcGFyc2VkLmV4cHJlc3Npb25zW3NlcGFyYXRvckluZGV4XTsKKwkJaWYgKHJldmVyc2VkICYmIGN1cnJlbnRTZXBhcmF0b3JbY29tYmluYXRvckluZGV4XSkKKwkJCWN1cnJlbnRTZXBhcmF0b3JbY29tYmluYXRvckluZGV4XS5yZXZlcnNlQ29tYmluYXRvciA9IHJldmVyc2VDb21iaW5hdG9yKGNvbWJpbmF0b3IpOworCQljdXJyZW50U2VwYXJhdG9yWysrY29tYmluYXRvckluZGV4XSA9IHtjb21iaW5hdG9yOiBjb21iaW5hdG9yLCB0YWc6ICcqJ307CisJfQorCisJdmFyIGN1cnJlbnRQYXJzZWQgPSBwYXJzZWQuZXhwcmVzc2lvbnNbc2VwYXJhdG9ySW5kZXhdW2NvbWJpbmF0b3JJbmRleF07CisKKwlpZiAodGFnTmFtZSl7CisJCWN1cnJlbnRQYXJzZWQudGFnID0gdGFnTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTsKKworCX0gZWxzZSBpZiAoaWQpeworCQljdXJyZW50UGFyc2VkLmlkID0gaWQucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7CisKKwl9IGVsc2UgaWYgKGNsYXNzTmFtZSl7CisJCWNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTsKKworCQlpZiAoIWN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0KSBjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCA9IFtdOworCQlpZiAoIWN1cnJlbnRQYXJzZWQuY2xhc3NlcykgY3VycmVudFBhcnNlZC5jbGFzc2VzID0gW107CisJCWN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0LnB1c2goY2xhc3NOYW1lKTsKKwkJY3VycmVudFBhcnNlZC5jbGFzc2VzLnB1c2goeworCQkJdmFsdWU6IGNsYXNzTmFtZSwKKwkJCXJlZ2V4cDogbmV3IFJlZ0V4cCgnKF58XFxzKScgKyBlc2NhcGVSZWdFeHAoY2xhc3NOYW1lKSArICcoXFxzfCQpJykKKwkJfSk7CisKKwl9IGVsc2UgaWYgKHBzZXVkb0NsYXNzKXsKKwkJcHNldWRvQ2xhc3NWYWx1ZSA9IHBzZXVkb0NsYXNzVmFsdWUgfHwgcHNldWRvQ2xhc3NRdW90ZWRWYWx1ZTsKKwkJcHNldWRvQ2xhc3NWYWx1ZSA9IHBzZXVkb0NsYXNzVmFsdWUgPyBwc2V1ZG9DbGFzc1ZhbHVlLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpIDogbnVsbDsKKworCQlpZiAoIWN1cnJlbnRQYXJzZWQucHNldWRvcykgY3VycmVudFBhcnNlZC5wc2V1ZG9zID0gW107CisJCWN1cnJlbnRQYXJzZWQucHNldWRvcy5wdXNoKHsKKwkJCWtleTogcHNldWRvQ2xhc3MucmVwbGFjZShyZVVuZXNjYXBlLCAnJyksCisJCQl2YWx1ZTogcHNldWRvQ2xhc3NWYWx1ZSwKKwkJCXR5cGU6IHBzZXVkb01hcmtlci5sZW5ndGggPT0gMSA/ICdjbGFzcycgOiAnZWxlbWVudCcKKwkJfSk7CisKKwl9IGVsc2UgaWYgKGF0dHJpYnV0ZUtleSl7CisJCWF0dHJpYnV0ZUtleSA9IGF0dHJpYnV0ZUtleS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTsKKwkJYXR0cmlidXRlVmFsdWUgPSAoYXR0cmlidXRlVmFsdWUgfHwgJycpLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpOworCisJCXZhciB0ZXN0LCByZWdleHA7CisKKwkJc3dpdGNoIChhdHRyaWJ1dGVPcGVyYXRvcil7CisJCQljYXNlICdePScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAgICAgICAnXicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgICAgICAgICAgICApOyBicmVhazsKKwkJCWNhc2UgJyQ9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICAgICAgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSArJyQnICAgICAgICk7IGJyZWFrOworCQkJY2FzZSAnfj0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggJyhefFxccyknKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnKFxcc3wkKScgKTsgYnJlYWs7CisJCQljYXNlICd8PScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAgICAgICAnXicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKycoLXwkKScgICApOyBicmVhazsKKwkJCWNhc2UgICc9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7CisJCQkJcmV0dXJuIGF0dHJpYnV0ZVZhbHVlID09IHZhbHVlOworCQkJfTsgYnJlYWs7CisJCQljYXNlICcqPScgOiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpeworCQkJCXJldHVybiB2YWx1ZSAmJiB2YWx1ZS5pbmRleE9mKGF0dHJpYnV0ZVZhbHVlKSA+IC0xOworCQkJfTsgYnJlYWs7CisJCQljYXNlICchPScgOiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpeworCQkJCXJldHVybiBhdHRyaWJ1dGVWYWx1ZSAhPSB2YWx1ZTsKKwkJCX07IGJyZWFrOworCQkJZGVmYXVsdCAgIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXsKKwkJCQlyZXR1cm4gISF2YWx1ZTsKKwkJCX07CisJCX0KKworCQlpZiAoYXR0cmlidXRlVmFsdWUgPT0gJycgJiYgKC9eWyokXl09JC8pLnRlc3QoYXR0cmlidXRlT3BlcmF0b3IpKSB0ZXN0ID0gZnVuY3Rpb24oKXsKKwkJCXJldHVybiBmYWxzZTsKKwkJfTsKKworCQlpZiAoIXRlc3QpIHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7CisJCQlyZXR1cm4gdmFsdWUgJiYgcmVnZXhwLnRlc3QodmFsdWUpOworCQl9OworCisJCWlmICghY3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzKSBjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMgPSBbXTsKKwkJY3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzLnB1c2goeworCQkJa2V5OiBhdHRyaWJ1dGVLZXksCisJCQlvcGVyYXRvcjogYXR0cmlidXRlT3BlcmF0b3IsCisJCQl2YWx1ZTogYXR0cmlidXRlVmFsdWUsCisJCQl0ZXN0OiB0ZXN0CisJCX0pOworCisJfQorCisJcmV0dXJuICcnOworfTsKKworLy8gU2xpY2sgTlMKKwordmFyIFNsaWNrID0gKHRoaXMuU2xpY2sgfHwge30pOworCitTbGljay5wYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24peworCXJldHVybiBwYXJzZShleHByZXNzaW9uKTsKK307CisKK1NsaWNrLmVzY2FwZVJlZ0V4cCA9IGVzY2FwZVJlZ0V4cDsKKworaWYgKCF0aGlzLlNsaWNrKSB0aGlzLlNsaWNrID0gU2xpY2s7CisKK30pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBvcnRzICE9ICd1bmRlZmluZWQnKSA/IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTsKKworCisvKgorLS0tCituYW1lOiBTbGljay5GaW5kZXIKK2Rlc2NyaXB0aW9uOiBUaGUgbmV3LCBzdXBlcmZhc3QgY3NzIHNlbGVjdG9yIGVuZ2luZS4KK3Byb3ZpZGVzOiBTbGljay5GaW5kZXIKK3JlcXVpcmVzOiBTbGljay5QYXJzZXIKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK3ZhciBsb2NhbCA9IHt9LAorCWZlYXR1cmVzQ2FjaGUgPSB7fSwKKwl0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CisKKy8vIEZlYXR1cmUgLyBCdWcgZGV0ZWN0aW9uCisKK2xvY2FsLmlzTmF0aXZlQ29kZSA9IGZ1bmN0aW9uKGZuKXsKKwlyZXR1cm4gKC9ce1xzKlxbbmF0aXZlIGNvZGVcXVxzKlx9LykudGVzdCgnJyArIGZuKTsKK307CisKK2xvY2FsLmlzWE1MID0gZnVuY3Rpb24oZG9jdW1lbnQpeworCXJldHVybiAoISFkb2N1bWVudC54bWxWZXJzaW9uKSB8fCAoISFkb2N1bWVudC54bWwpIHx8ICh0b1N0cmluZy5jYWxsKGRvY3VtZW50KSA9PSAnW29iamVjdCBYTUxEb2N1bWVudF0nKSB8fAorCShkb2N1bWVudC5ub2RlVHlwZSA9PSA5ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPSAnSFRNTCcpOworfTsKKworbG9jYWwuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbihkb2N1bWVudCl7CisKKwkvLyBjb252ZXJ0IGVsZW1lbnRzIC8gd2luZG93IGFyZ3VtZW50cyB0byBkb2N1bWVudC4gaWYgZG9jdW1lbnQgY2Fubm90IGJlIGV4dHJhcG9sYXRlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMuCisJdmFyIG5vZGVUeXBlID0gZG9jdW1lbnQubm9kZVR5cGU7CisJaWYgKG5vZGVUeXBlID09IDkpOyAvLyBkb2N1bWVudAorCWVsc2UgaWYgKG5vZGVUeXBlKSBkb2N1bWVudCA9IGRvY3VtZW50Lm93bmVyRG9jdW1lbnQ7IC8vIG5vZGUKKwllbHNlIGlmIChkb2N1bWVudC5uYXZpZ2F0b3IpIGRvY3VtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnQ7IC8vIHdpbmRvdworCWVsc2UgcmV0dXJuOworCisJLy8gY2hlY2sgaWYgaXQncyB0aGUgb2xkIGRvY3VtZW50CisKKwlpZiAodGhpcy5kb2N1bWVudCA9PT0gZG9jdW1lbnQpIHJldHVybjsKKwl0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7CisKKwkvLyBjaGVjayBpZiB3ZSBoYXZlIGRvbmUgZmVhdHVyZSBkZXRlY3Rpb24gb24gdGhpcyBkb2N1bWVudCBiZWZvcmUKKworCXZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAorCQlyb290VWlkID0gdGhpcy5nZXRVSURYTUwocm9vdCksCisJCWZlYXR1cmVzID0gZmVhdHVyZXNDYWNoZVtyb290VWlkXSwKKwkJZmVhdHVyZTsKKworCWlmIChmZWF0dXJlcyl7CisJCWZvciAoZmVhdHVyZSBpbiBmZWF0dXJlcyl7CisJCQl0aGlzW2ZlYXR1cmVdID0gZmVhdHVyZXNbZmVhdHVyZV07CisJCX0KKwkJcmV0dXJuOworCX0KKworCWZlYXR1cmVzID0gZmVhdHVyZXNDYWNoZVtyb290VWlkXSA9IHt9OworCisJZmVhdHVyZXMucm9vdCA9IHJvb3Q7CisJZmVhdHVyZXMuaXNYTUxEb2N1bWVudCA9IHRoaXMuaXNYTUwoZG9jdW1lbnQpOworCisJZmVhdHVyZXMuYnJva2VuU3RhckdFQlROCisJPSBmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQQorCT0gZmVhdHVyZXMuaWRHZXRzTmFtZQorCT0gZmVhdHVyZXMuYnJva2VuTWl4ZWRDYXNlUVNBCisJPSBmZWF0dXJlcy5icm9rZW5HRUJDTgorCT0gZmVhdHVyZXMuYnJva2VuQ2hlY2tlZFFTQQorCT0gZmVhdHVyZXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0EKKwk9IGZlYXR1cmVzLmlzSFRNTERvY3VtZW50CisJPSBmZWF0dXJlcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3IKKwk9IGZhbHNlOworCisJdmFyIHN0YXJTZWxlY3RzQ2xvc2VkLCBzdGFyU2VsZWN0c0NvbW1lbnRzLAorCQlicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTiwgY2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSwKKwkJYnJva2VuRm9ybUF0dHJpYnV0ZUdldHRlcjsKKworCXZhciBzZWxlY3RlZCwgaWQgPSAnc2xpY2tfdW5pcXVlaWQnOworCXZhciB0ZXN0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworCisJdmFyIHRlc3RSb290ID0gZG9jdW1lbnQuYm9keSB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdIHx8IHJvb3Q7CisJdGVzdFJvb3QuYXBwZW5kQ2hpbGQodGVzdE5vZGUpOworCisJLy8gb24gbm9uLUhUTUwgZG9jdW1lbnRzIGlubmVySFRNTCBhbmQgZ2V0RWxlbWVudHNCeUlkIGRvZXNudCB3b3JrIHByb3Blcmx5CisJdHJ5IHsKKwkJdGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGlkPSInK2lkKyciPjwvYT4nOworCQlmZWF0dXJlcy5pc0hUTUxEb2N1bWVudCA9ICEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworCX0gY2F0Y2goZSl7fTsKKworCWlmIChmZWF0dXJlcy5pc0hUTUxEb2N1bWVudCl7CisKKwkJdGVzdE5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKworCQkvLyBJRSByZXR1cm5zIGNvbW1lbnQgbm9kZXMgZm9yIGdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzCisJCXRlc3ROb2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJycpKTsKKwkJc3RhclNlbGVjdHNDb21tZW50cyA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpLmxlbmd0aCA+IDEpOworCisJCS8vIElFIHJldHVybnMgY2xvc2VkIG5vZGVzIChFRzoiPC9mb28+IikgZm9yIGdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykgZm9yIHNvbWUgZG9jdW1lbnRzCisJCXRyeSB7CisJCQl0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnZm9vPC9mb28+JzsKKwkJCXNlbGVjdGVkID0gdGVzdE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTsKKwkJCXN0YXJTZWxlY3RzQ2xvc2VkID0gKHNlbGVjdGVkICYmICEhc2VsZWN0ZWQubGVuZ3RoICYmIHNlbGVjdGVkWzBdLm5vZGVOYW1lLmNoYXJBdCgwKSA9PSAnLycpOworCQl9IGNhdGNoKGUpe307CisKKwkJZmVhdHVyZXMuYnJva2VuU3RhckdFQlROID0gc3RhclNlbGVjdHNDb21tZW50cyB8fCBzdGFyU2VsZWN0c0Nsb3NlZDsKKworCQkvLyBJRSByZXR1cm5zIGVsZW1lbnRzIHdpdGggdGhlIG5hbWUgaW5zdGVhZCBvZiBqdXN0IGlkIGZvciBnZXRFbGVtZW50c0J5SWQgZm9yIHNvbWUgZG9jdW1lbnRzCisJCXRyeSB7CisJCQl0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgbmFtZT0iJysgaWQgKyciPjwvYT48YiBpZD0iJysgaWQgKyciPjwvYj4nOworCQkJZmVhdHVyZXMuaWRHZXRzTmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSA9PT0gdGVzdE5vZGUuZmlyc3RDaGlsZDsKKwkJfSBjYXRjaChlKXt9OworCisJCWlmICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXsKKworCQkJLy8gU2FmYXJpIDMuMiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGNhY2hlcyByZXN1bHRzCisJCQl0cnkgeworCQkJCXRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz0iZiI+PC9hPjxhIGNsYXNzPSJiIj48L2E+JzsKKwkJCQl0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiJykubGVuZ3RoOworCQkJCXRlc3ROb2RlLmZpcnN0Q2hpbGQuY2xhc3NOYW1lID0gJ2InOworCQkJCWNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aCAhPSAyKTsKKwkJCX0gY2F0Y2goZSl7fTsKKworCQkJLy8gT3BlcmEgOS42IGdldEVsZW1lbnRzQnlDbGFzc05hbWUgZG9lc250IGRldGVjdHMgdGhlIGNsYXNzIGlmIGl0cyBub3QgdGhlIGZpcnN0IG9uZQorCQkJdHJ5IHsKKwkJCQl0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9ImEiPjwvYT48YSBjbGFzcz0iZiBiIGEiPjwvYT4nOworCQkJCWJyb2tlblNlY29uZENsYXNzTmFtZUdFQkNOID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2EnKS5sZW5ndGggIT0gMik7CisJCQl9IGNhdGNoKGUpe307CisKKwkJCWZlYXR1cmVzLmJyb2tlbkdFQkNOID0gY2FjaGVkR2V0RWxlbWVudHNCeUNsYXNzTmFtZSB8fCBicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTjsKKwkJfQorCisJCWlmICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKXsKKwkJCS8vIElFIDggcmV0dXJucyBjbG9zZWQgbm9kZXMgKEVHOiI8L2Zvbz4iKSBmb3IgcXVlcnlTZWxlY3RvckFsbCgnKicpIGZvciBzb21lIGRvY3VtZW50cworCQkJdHJ5IHsKKwkJCQl0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnZm9vPC9mb28+JzsKKwkJCQlzZWxlY3RlZCA9IHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJyonKTsKKwkJCQlmZWF0dXJlcy5zdGFyU2VsZWN0c0Nsb3NlZFFTQSA9IChzZWxlY3RlZCAmJiAhIXNlbGVjdGVkLmxlbmd0aCAmJiBzZWxlY3RlZFswXS5ub2RlTmFtZS5jaGFyQXQoMCkgPT0gJy8nKTsKKwkJCX0gY2F0Y2goZSl7fTsKKworCQkJLy8gU2FmYXJpIDMuMiBxdWVyeVNlbGVjdG9yQWxsIGRvZXNudCB3b3JrIHdpdGggbWl4ZWRjYXNlIG9uIHF1aXJrc21vZGUKKwkJCXRyeSB7CisJCQkJdGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPSJNaVgiPjwvYT4nOworCQkJCWZlYXR1cmVzLmJyb2tlbk1peGVkQ2FzZVFTQSA9ICF0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcuTWlYJykubGVuZ3RoOworCQkJfSBjYXRjaChlKXt9OworCisJCQkvLyBXZWJraXQgYW5kIE9wZXJhIGRvbnQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbnMgb24gcXVlcnlTZWxlY3RvckFsbAorCQkJdHJ5IHsKKwkJCQl0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkPSJzZWxlY3RlZCI+YTwvb3B0aW9uPjwvc2VsZWN0Pic7CisJCQkJZmVhdHVyZXMuYnJva2VuQ2hlY2tlZFFTQSA9ICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCc6Y2hlY2tlZCcpLmxlbmd0aCA9PSAwKTsKKwkJCX0gY2F0Y2goZSl7fTsKKworCQkJLy8gSUUgcmV0dXJucyBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgYXR0clsqXiRdPSIiIHNlbGVjdG9ycyBvbiBxdWVyeVNlbGVjdG9yQWxsCisJCQl0cnkgeworCQkJCXRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz0iIj48L2E+JzsKKwkJCQlmZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQSA9ICh0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3MqPSIiXScpLmxlbmd0aCAhPSAwKTsKKwkJCX0gY2F0Y2goZSl7fTsKKworCQl9CisKKwkJLy8gSUU2LTcsIGlmIGEgZm9ybSBoYXMgYW4gaW5wdXQgb2YgaWQgeCwgZm9ybS5nZXRBdHRyaWJ1dGUoeCkgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgaW5wdXQKKwkJdHJ5IHsKKwkJCXRlc3ROb2RlLmlubmVySFRNTCA9ICc8Zm9ybSBhY3Rpb249InMiPjxpbnB1dCBpZD0iYWN0aW9uIi8+PC9mb3JtPic7CisJCQlicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyID0gKHRlc3ROb2RlLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCdhY3Rpb24nKSAhPSAncycpOworCQl9IGNhdGNoKGUpe307CisKKwkJLy8gbmF0aXZlIG1hdGNoZXNTZWxlY3RvciBmdW5jdGlvbgorCisJCWZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvciA9IHJvb3QubWF0Y2hlc1NlbGVjdG9yIHx8IC8qcm9vdC5tc01hdGNoZXNTZWxlY3RvciB8fCovIHJvb3QubW96TWF0Y2hlc1NlbGVjdG9yIHx8IHJvb3Qud2Via2l0TWF0Y2hlc1NlbGVjdG9yOworCQlpZiAoZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKSB0cnkgeworCQkJLy8gaWYgbWF0Y2hlc1NlbGVjdG9yIHRyb3dzIGVycm9ycyBvbiBpbmNvcnJlY3Qgc2ludGF4ZXMgd2UgY2FuIHVzZSBpdAorCQkJZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwocm9vdCwgJzpzbGljaycpOworCQkJZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gbnVsbDsKKwkJfSBjYXRjaChlKXt9OworCisJfQorCisJdHJ5IHsKKwkJcm9vdC5zbGlja19leHBhbmRvID0gMTsKKwkJZGVsZXRlIHJvb3Quc2xpY2tfZXhwYW5kbzsKKwkJZmVhdHVyZXMuZ2V0VUlEID0gdGhpcy5nZXRVSURIVE1MOworCX0gY2F0Y2goZSkgeworCQlmZWF0dXJlcy5nZXRVSUQgPSB0aGlzLmdldFVJRFhNTDsKKwl9CisKKwl0ZXN0Um9vdC5yZW1vdmVDaGlsZCh0ZXN0Tm9kZSk7CisJdGVzdE5vZGUgPSBzZWxlY3RlZCA9IHRlc3RSb290ID0gbnVsbDsKKworCS8vIGdldEF0dHJpYnV0ZQorCisJZmVhdHVyZXMuZ2V0QXR0cmlidXRlID0gKGZlYXR1cmVzLmlzSFRNTERvY3VtZW50ICYmIGJyb2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXIpID8gZnVuY3Rpb24obm9kZSwgbmFtZSl7CisJCXZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07CisJCWlmIChtZXRob2QpIHJldHVybiBtZXRob2QuY2FsbChub2RlKTsKKwkJdmFyIGF0dHJpYnV0ZU5vZGUgPSBub2RlLmdldEF0dHJpYnV0ZU5vZGUobmFtZSk7CisJCXJldHVybiAoYXR0cmlidXRlTm9kZSkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7CisJfSA6IGZ1bmN0aW9uKG5vZGUsIG5hbWUpeworCQl2YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdOworCQlyZXR1cm4gKG1ldGhvZCkgPyBtZXRob2QuY2FsbChub2RlKSA6IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpOworCX07CisKKwkvLyBoYXNBdHRyaWJ1dGUKKworCWZlYXR1cmVzLmhhc0F0dHJpYnV0ZSA9IChyb290ICYmIHRoaXMuaXNOYXRpdmVDb2RlKHJvb3QuaGFzQXR0cmlidXRlKSkgPyBmdW5jdGlvbihub2RlLCBhdHRyaWJ1dGUpIHsKKwkJcmV0dXJuIG5vZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSk7CisJfSA6IGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSkgeworCQlub2RlID0gbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0ZSk7CisJCXJldHVybiAhIShub2RlICYmIChub2RlLnNwZWNpZmllZCB8fCBub2RlLm5vZGVWYWx1ZSkpOworCX07CisKKwkvLyBjb250YWlucworCS8vIEZJWE1FOiBBZGQgc3BlY3M6IGxvY2FsLmNvbnRhaW5zIHNob3VsZCBiZSBkaWZmZXJlbnQgZm9yIHhtbCBhbmQgaHRtbCBkb2N1bWVudHM/CisJZmVhdHVyZXMuY29udGFpbnMgPSAocm9vdCAmJiB0aGlzLmlzTmF0aXZlQ29kZShyb290LmNvbnRhaW5zKSkgPyBmdW5jdGlvbihjb250ZXh0LCBub2RlKXsKKwkJcmV0dXJuIGNvbnRleHQuY29udGFpbnMobm9kZSk7CisJfSA6IChyb290ICYmIHJvb3QuY29tcGFyZURvY3VtZW50UG9zaXRpb24pID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7CisJCXJldHVybiBjb250ZXh0ID09PSBub2RlIHx8ICEhKGNvbnRleHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZSkgJiAxNik7CisJfSA6IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpeworCQlpZiAobm9kZSkgZG8geworCQkJaWYgKG5vZGUgPT09IGNvbnRleHQpIHJldHVybiB0cnVlOworCQl9IHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpOworCQlyZXR1cm4gZmFsc2U7CisJfTsKKworCS8vIGRvY3VtZW50IG9yZGVyIHNvcnRpbmcKKwkvLyBjcmVkaXRzIHRvIFNpenpsZSAoaHR0cDovL3NpenpsZWpzLmNvbS8pCisKKwlmZWF0dXJlcy5kb2N1bWVudFNvcnRlciA9IChyb290LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSA/IGZ1bmN0aW9uKGEsIGIpeworCQlpZiAoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gfHwgIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24pIHJldHVybiAwOworCQlyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDQgPyAtMSA6IGEgPT09IGIgPyAwIDogMTsKKwl9IDogKCdzb3VyY2VJbmRleCcgaW4gcm9vdCkgPyBmdW5jdGlvbihhLCBiKXsKKwkJaWYgKCFhLnNvdXJjZUluZGV4IHx8ICFiLnNvdXJjZUluZGV4KSByZXR1cm4gMDsKKwkJcmV0dXJuIGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4OworCX0gOiAoZG9jdW1lbnQuY3JlYXRlUmFuZ2UpID8gZnVuY3Rpb24oYSwgYil7CisJCWlmICghYS5vd25lckRvY3VtZW50IHx8ICFiLm93bmVyRG9jdW1lbnQpIHJldHVybiAwOworCQl2YXIgYVJhbmdlID0gYS5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCksIGJSYW5nZSA9IGIub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpOworCQlhUmFuZ2Uuc2V0U3RhcnQoYSwgMCk7CisJCWFSYW5nZS5zZXRFbmQoYSwgMCk7CisJCWJSYW5nZS5zZXRTdGFydChiLCAwKTsKKwkJYlJhbmdlLnNldEVuZChiLCAwKTsKKwkJcmV0dXJuIGFSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2UuU1RBUlRfVE9fRU5ELCBiUmFuZ2UpOworCX0gOiBudWxsIDsKKworCXJvb3QgPSBudWxsOworCisJZm9yIChmZWF0dXJlIGluIGZlYXR1cmVzKXsKKwkJdGhpc1tmZWF0dXJlXSA9IGZlYXR1cmVzW2ZlYXR1cmVdOworCX0KK307CisKKy8vIE1haW4gTWV0aG9kCisKK3ZhciByZVNpbXBsZVNlbGVjdG9yID0gL14oWyMuXT8pKCg/Oltcdy1dK3xcKikpJC8sCisJcmVFbXB0eUF0dHJpYnV0ZSA9IC9cWy4rWyokXl09KD86IiJ8JycpP1xdLywKKwlxc2FGYWlsRXhwQ2FjaGUgPSB7fTsKKworbG9jYWwuc2VhcmNoID0gZnVuY3Rpb24oY29udGV4dCwgZXhwcmVzc2lvbiwgYXBwZW5kLCBmaXJzdCl7CisKKwl2YXIgZm91bmQgPSB0aGlzLmZvdW5kID0gKGZpcnN0KSA/IG51bGwgOiAoYXBwZW5kIHx8IFtdKTsKKworCWlmICghY29udGV4dCkgcmV0dXJuIGZvdW5kOworCWVsc2UgaWYgKGNvbnRleHQubmF2aWdhdG9yKSBjb250ZXh0ID0gY29udGV4dC5kb2N1bWVudDsgLy8gQ29udmVydCB0aGUgbm9kZSBmcm9tIGEgd2luZG93IHRvIGEgZG9jdW1lbnQKKwllbHNlIGlmICghY29udGV4dC5ub2RlVHlwZSkgcmV0dXJuIGZvdW5kOworCisJLy8gc2V0dXAKKworCXZhciBwYXJzZWQsIGksCisJCXVuaXF1ZXMgPSB0aGlzLnVuaXF1ZXMgPSB7fSwKKwkJaGFzT3RoZXJzID0gISEoYXBwZW5kICYmIGFwcGVuZC5sZW5ndGgpLAorCQljb250ZXh0SXNEb2N1bWVudCA9IChjb250ZXh0Lm5vZGVUeXBlID09IDkpOworCisJaWYgKHRoaXMuZG9jdW1lbnQgIT09IChjb250ZXh0SXNEb2N1bWVudCA/IGNvbnRleHQgOiBjb250ZXh0Lm93bmVyRG9jdW1lbnQpKSB0aGlzLnNldERvY3VtZW50KGNvbnRleHQpOworCisJLy8gYXZvaWQgZHVwbGljYXRpbmcgaXRlbXMgYWxyZWFkeSBpbiB0aGUgYXBwZW5kIGFycmF5CisJaWYgKGhhc090aGVycykgZm9yIChpID0gZm91bmQubGVuZ3RoOyBpLS07KSB1bmlxdWVzW3RoaXMuZ2V0VUlEKGZvdW5kW2ldKV0gPSB0cnVlOworCisJLy8gZXhwcmVzc2lvbiBjaGVja3MKKworCWlmICh0eXBlb2YgZXhwcmVzc2lvbiA9PSAnc3RyaW5nJyl7IC8vIGV4cHJlc3Npb24gaXMgYSBzdHJpbmcKKworCQkvKjxzaW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovCisJCXZhciBzaW1wbGVTZWxlY3RvciA9IGV4cHJlc3Npb24ubWF0Y2gocmVTaW1wbGVTZWxlY3Rvcik7CisJCXNpbXBsZVNlbGVjdG9yczogaWYgKHNpbXBsZVNlbGVjdG9yKSB7CisKKwkJCXZhciBzeW1ib2wgPSBzaW1wbGVTZWxlY3RvclsxXSwKKwkJCQluYW1lID0gc2ltcGxlU2VsZWN0b3JbMl0sCisJCQkJbm9kZSwgbm9kZXM7CisKKwkJCWlmICghc3ltYm9sKXsKKworCQkJCWlmIChuYW1lID09ICcqJyAmJiB0aGlzLmJyb2tlblN0YXJHRUJUTikgYnJlYWsgc2ltcGxlU2VsZWN0b3JzOworCQkJCW5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZShuYW1lKTsKKwkJCQlpZiAoZmlyc3QpIHJldHVybiBub2Rlc1swXSB8fCBudWxsOworCQkJCWZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7CisJCQkJCWlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7CisJCQkJfQorCisJCQl9IGVsc2UgaWYgKHN5bWJvbCA9PSAnIycpeworCisJCQkJaWYgKCF0aGlzLmlzSFRNTERvY3VtZW50IHx8ICFjb250ZXh0SXNEb2N1bWVudCkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzOworCQkJCW5vZGUgPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKG5hbWUpOworCQkJCWlmICghbm9kZSkgcmV0dXJuIGZvdW5kOworCQkJCWlmICh0aGlzLmlkR2V0c05hbWUgJiYgbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLm5vZGVWYWx1ZSAhPSBuYW1lKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7CisJCQkJaWYgKGZpcnN0KSByZXR1cm4gbm9kZSB8fCBudWxsOworCQkJCWlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7CisKKwkJCX0gZWxzZSBpZiAoc3ltYm9sID09ICcuJyl7CisKKwkJCQlpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnQgfHwgKCghY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8IHRoaXMuYnJva2VuR0VCQ04pICYmIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCkpIGJyZWFrIHNpbXBsZVNlbGVjdG9yczsKKwkJCQlpZiAoY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlzLmJyb2tlbkdFQkNOKXsKKwkJCQkJbm9kZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUobmFtZSk7CisJCQkJCWlmIChmaXJzdCkgcmV0dXJuIG5vZGVzWzBdIHx8IG51bGw7CisJCQkJCWZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7CisJCQkJCQlpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJdmFyIG1hdGNoQ2xhc3MgPSBuZXcgUmVnRXhwKCcoXnxcXHMpJysgU2xpY2suZXNjYXBlUmVnRXhwKG5hbWUpICsnKFxcc3wkKScpOworCQkJCQlub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTsKKwkJCQkJZm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXsKKwkJCQkJCWNsYXNzTmFtZSA9IG5vZGUuY2xhc3NOYW1lOworCQkJCQkJaWYgKCEoY2xhc3NOYW1lICYmIG1hdGNoQ2xhc3MudGVzdChjbGFzc05hbWUpKSkgY29udGludWU7CisJCQkJCQlpZiAoZmlyc3QpIHJldHVybiBub2RlOworCQkJCQkJaWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTsKKwkJCQkJfQorCQkJCX0KKworCQkJfQorCisJCQlpZiAoaGFzT3RoZXJzKSB0aGlzLnNvcnQoZm91bmQpOworCQkJcmV0dXJuIChmaXJzdCkgPyBudWxsIDogZm91bmQ7CisKKwkJfQorCQkvKjwvc2ltcGxlLXNlbGVjdG9ycy1vdmVycmlkZT4qLworCisJCS8qPHF1ZXJ5LXNlbGVjdG9yLW92ZXJyaWRlPiovCisJCXF1ZXJ5U2VsZWN0b3I6IGlmIChjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwpIHsKKworCQkJaWYgKCF0aGlzLmlzSFRNTERvY3VtZW50CisJCQkJfHwgcXNhRmFpbEV4cENhY2hlW2V4cHJlc3Npb25dCisJCQkJLy9UT0RPOiBvbmx5IHNraXAgd2hlbiBleHByZXNzaW9uIGlzIGFjdHVhbGx5IG1peGVkIGNhc2UKKwkJCQl8fCB0aGlzLmJyb2tlbk1peGVkQ2FzZVFTQQorCQkJCXx8ICh0aGlzLmJyb2tlbkNoZWNrZWRRU0EgJiYgZXhwcmVzc2lvbi5pbmRleE9mKCc6Y2hlY2tlZCcpID4gLTEpCisJCQkJfHwgKHRoaXMuYnJva2VuRW1wdHlBdHRyaWJ1dGVRU0EgJiYgcmVFbXB0eUF0dHJpYnV0ZS50ZXN0KGV4cHJlc3Npb24pKQorCQkJCXx8ICghY29udGV4dElzRG9jdW1lbnQgLy9BYm9ydCB3aGVuICFjb250ZXh0SXNEb2N1bWVudCBhbmQuLi4KKwkJCQkJLy8gIHRoZXJlIGFyZSBtdWx0aXBsZSBleHByZXNzaW9ucyBpbiB0aGUgc2VsZWN0b3IKKwkJCQkJLy8gIHNpbmNlIHdlIGN1cnJlbnRseSBvbmx5IGZpeCBub24tZG9jdW1lbnQgcm9vdGVkIFFTQSBmb3Igc2luZ2xlIGV4cHJlc3Npb24gc2VsZWN0b3JzCisJCQkJCSYmIGV4cHJlc3Npb24uaW5kZXhPZignLCcpID4gLTEKKwkJCQkpCisJCQkJfHwgU2xpY2suZGlzYWJsZVFTQQorCQkJKSBicmVhayBxdWVyeVNlbGVjdG9yOworCisJCQl2YXIgX2V4cHJlc3Npb24gPSBleHByZXNzaW9uLCBfY29udGV4dCA9IGNvbnRleHQ7CisJCQlpZiAoIWNvbnRleHRJc0RvY3VtZW50KXsKKwkJCQkvLyBub24tZG9jdW1lbnQgcm9vdGVkIFFTQQorCQkJCS8vIGNyZWRpdHMgdG8gQW5kcmV3IER1cG9udAorCQkJCXZhciBjdXJyZW50SWQgPSBfY29udGV4dC5nZXRBdHRyaWJ1dGUoJ2lkJyksIHNsaWNraWQgPSAnc2xpY2tpZF9fJzsKKwkJCQlfY29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgc2xpY2tpZCk7CisJCQkJX2V4cHJlc3Npb24gPSAnIycgKyBzbGlja2lkICsgJyAnICsgX2V4cHJlc3Npb247CisJCQkJY29udGV4dCA9IF9jb250ZXh0LnBhcmVudE5vZGU7CisJCQl9CisKKwkJCXRyeSB7CisJCQkJaWYgKGNvbnRleHQgPT0gbnVsbCkgeworCQkJCQlxc2FGYWlsRXhwQ2FjaGVbZXhwcmVzc2lvbl0gPSAxOworCQkJCQlicmVhayBxdWVyeVNlbGVjdG9yOworCQkJCX0KKwkJCQllbHNlIGlmIChmaXJzdCkgcmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvcihfZXhwcmVzc2lvbikgfHwgbnVsbDsKKwkJCQllbHNlIG5vZGVzID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKF9leHByZXNzaW9uKTsKKwkJCX0gY2F0Y2goZSkgeworCQkJCXFzYUZhaWxFeHBDYWNoZVtleHByZXNzaW9uXSA9IDE7CisJCQkJYnJlYWsgcXVlcnlTZWxlY3RvcjsKKwkJCX0gZmluYWxseSB7CisJCQkJaWYgKCFjb250ZXh0SXNEb2N1bWVudCl7CisJCQkJCWlmIChjdXJyZW50SWQpIF9jb250ZXh0LnNldEF0dHJpYnV0ZSgnaWQnLCBjdXJyZW50SWQpOworCQkJCQllbHNlIF9jb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTsKKwkJCQkJY29udGV4dCA9IF9jb250ZXh0OworCQkJCX0KKwkJCX0KKworCQkJaWYgKHRoaXMuc3RhclNlbGVjdHNDbG9zZWRRU0EpIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7CisJCQkJaWYgKG5vZGUubm9kZU5hbWUgPiAnQCcgJiYgIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpOworCQkJfSBlbHNlIGZvciAoaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7CisJCQkJaWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTsKKwkJCX0KKworCQkJaWYgKGhhc090aGVycykgdGhpcy5zb3J0KGZvdW5kKTsKKwkJCXJldHVybiBmb3VuZDsKKworCQl9CisJCS8qPC9xdWVyeS1zZWxlY3Rvci1vdmVycmlkZT4qLworCisJCXBhcnNlZCA9IHRoaXMuU2xpY2sucGFyc2UoZXhwcmVzc2lvbik7CisJCWlmICghcGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZvdW5kOworCX0gZWxzZSBpZiAoZXhwcmVzc2lvbiA9PSBudWxsKXsgLy8gdGhlcmUgaXMgbm8gZXhwcmVzc2lvbgorCQlyZXR1cm4gZm91bmQ7CisJfSBlbHNlIGlmIChleHByZXNzaW9uLlNsaWNrKXsgLy8gZXhwcmVzc2lvbiBpcyBhIHBhcnNlZCBTbGljayBvYmplY3QKKwkJcGFyc2VkID0gZXhwcmVzc2lvbjsKKwl9IGVsc2UgaWYgKHRoaXMuY29udGFpbnMoY29udGV4dC5kb2N1bWVudEVsZW1lbnQgfHwgY29udGV4dCwgZXhwcmVzc2lvbikpeyAvLyBleHByZXNzaW9uIGlzIGEgbm9kZQorCQkoZm91bmQpID8gZm91bmQucHVzaChleHByZXNzaW9uKSA6IGZvdW5kID0gZXhwcmVzc2lvbjsKKwkJcmV0dXJuIGZvdW5kOworCX0gZWxzZSB7IC8vIG90aGVyIGp1bmsKKwkJcmV0dXJuIGZvdW5kOworCX0KKworCS8qPHBzZXVkby1zZWxlY3RvcnM+Ki8vKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qLworCisJLy8gY2FjaGUgZWxlbWVudHMgZm9yIHRoZSBudGggc2VsZWN0b3JzCisKKwl0aGlzLnBvc05USCA9IHt9OworCXRoaXMucG9zTlRITGFzdCA9IHt9OworCXRoaXMucG9zTlRIVHlwZSA9IHt9OworCXRoaXMucG9zTlRIVHlwZUxhc3QgPSB7fTsKKworCS8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4qLy8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovCisKKwkvLyBpZiBhcHBlbmQgaXMgbnVsbCBhbmQgdGhlcmUgaXMgb25seSBhIHNpbmdsZSBzZWxlY3RvciB3aXRoIG9uZSBleHByZXNzaW9uIHVzZSBwdXNoQXJyYXksIGVsc2UgdXNlIHB1c2hVSUQKKwl0aGlzLnB1c2ggPSAoIWhhc090aGVycyAmJiAoZmlyc3QgfHwgKHBhcnNlZC5sZW5ndGggPT0gMSAmJiBwYXJzZWQuZXhwcmVzc2lvbnNbMF0ubGVuZ3RoID09IDEpKSkgPyB0aGlzLnB1c2hBcnJheSA6IHRoaXMucHVzaFVJRDsKKworCWlmIChmb3VuZCA9PSBudWxsKSBmb3VuZCA9IFtdOworCisJLy8gZGVmYXVsdCBlbmdpbmUKKworCXZhciBqLCBtLCBuOworCXZhciBjb21iaW5hdG9yLCB0YWcsIGlkLCBjbGFzc0xpc3QsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3M7CisJdmFyIGN1cnJlbnRJdGVtcywgY3VycmVudEV4cHJlc3Npb24sIGN1cnJlbnRCaXQsIGxhc3RCaXQsIGV4cHJlc3Npb25zID0gcGFyc2VkLmV4cHJlc3Npb25zOworCisJc2VhcmNoOiBmb3IgKGkgPSAwOyAoY3VycmVudEV4cHJlc3Npb24gPSBleHByZXNzaW9uc1tpXSk7IGkrKykgZm9yIChqID0gMDsgKGN1cnJlbnRCaXQgPSBjdXJyZW50RXhwcmVzc2lvbltqXSk7IGorKyl7CisKKwkJY29tYmluYXRvciA9ICdjb21iaW5hdG9yOicgKyBjdXJyZW50Qml0LmNvbWJpbmF0b3I7CisJCWlmICghdGhpc1tjb21iaW5hdG9yXSkgY29udGludWUgc2VhcmNoOworCisJCXRhZyAgICAgICAgPSAodGhpcy5pc1hNTERvY3VtZW50KSA/IGN1cnJlbnRCaXQudGFnIDogY3VycmVudEJpdC50YWcudG9VcHBlckNhc2UoKTsKKwkJaWQgICAgICAgICA9IGN1cnJlbnRCaXQuaWQ7CisJCWNsYXNzTGlzdCAgPSBjdXJyZW50Qml0LmNsYXNzTGlzdDsKKwkJY2xhc3NlcyAgICA9IGN1cnJlbnRCaXQuY2xhc3NlczsKKwkJYXR0cmlidXRlcyA9IGN1cnJlbnRCaXQuYXR0cmlidXRlczsKKwkJcHNldWRvcyAgICA9IGN1cnJlbnRCaXQucHNldWRvczsKKwkJbGFzdEJpdCAgICA9IChqID09PSAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3RoIC0gMSkpOworCisJCXRoaXMuYml0VW5pcXVlcyA9IHt9OworCisJCWlmIChsYXN0Qml0KXsKKwkJCXRoaXMudW5pcXVlcyA9IHVuaXF1ZXM7CisJCQl0aGlzLmZvdW5kID0gZm91bmQ7CisJCX0gZWxzZSB7CisJCQl0aGlzLnVuaXF1ZXMgPSB7fTsKKwkJCXRoaXMuZm91bmQgPSBbXTsKKwkJfQorCisJCWlmIChqID09PSAwKXsKKwkJCXRoaXNbY29tYmluYXRvcl0oY29udGV4dCwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KTsKKwkJCWlmIChmaXJzdCAmJiBsYXN0Qml0ICYmIGZvdW5kLmxlbmd0aCkgYnJlYWsgc2VhcmNoOworCQl9IGVsc2UgeworCQkJaWYgKGZpcnN0ICYmIGxhc3RCaXQpIGZvciAobSA9IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsgbSsrKXsKKwkJCQl0aGlzW2NvbWJpbmF0b3JdKGN1cnJlbnRJdGVtc1ttXSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KTsKKwkJCQlpZiAoZm91bmQubGVuZ3RoKSBicmVhayBzZWFyY2g7CisJCQl9IGVsc2UgZm9yIChtID0gMCwgbiA9IGN1cnJlbnRJdGVtcy5sZW5ndGg7IG0gPCBuOyBtKyspIHRoaXNbY29tYmluYXRvcl0oY3VycmVudEl0ZW1zW21dLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpOworCQl9CisKKwkJY3VycmVudEl0ZW1zID0gdGhpcy5mb3VuZDsKKwl9CisKKwkvLyBzaG91bGQgc29ydCBpZiB0aGVyZSBhcmUgbm9kZXMgaW4gYXBwZW5kIGFuZCBpZiB5b3UgcGFzcyBtdWx0aXBsZSBleHByZXNzaW9ucy4KKwlpZiAoaGFzT3RoZXJzIHx8IChwYXJzZWQuZXhwcmVzc2lvbnMubGVuZ3RoID4gMSkpIHRoaXMuc29ydChmb3VuZCk7CisKKwlyZXR1cm4gKGZpcnN0KSA/IChmb3VuZFswXSB8fCBudWxsKSA6IGZvdW5kOworfTsKKworLy8gVXRpbHMKKworbG9jYWwudWlkeCA9IDE7Citsb2NhbC51aWRrID0gJ3NsaWNrLXVuaXF1ZWlkJzsKKworbG9jYWwuZ2V0VUlEWE1MID0gZnVuY3Rpb24obm9kZSl7CisJdmFyIHVpZCA9IG5vZGUuZ2V0QXR0cmlidXRlKHRoaXMudWlkayk7CisJaWYgKCF1aWQpeworCQl1aWQgPSB0aGlzLnVpZHgrKzsKKwkJbm9kZS5zZXRBdHRyaWJ1dGUodGhpcy51aWRrLCB1aWQpOworCX0KKwlyZXR1cm4gdWlkOworfTsKKworbG9jYWwuZ2V0VUlESFRNTCA9IGZ1bmN0aW9uKG5vZGUpeworCXJldHVybiBub2RlLnVuaXF1ZU51bWJlciB8fCAobm9kZS51bmlxdWVOdW1iZXIgPSB0aGlzLnVpZHgrKyk7Cit9OworCisvLyBzb3J0IGJhc2VkIG9uIHRoZSBzZXREb2N1bWVudCBkb2N1bWVudFNvcnRlciBtZXRob2QuCisKK2xvY2FsLnNvcnQgPSBmdW5jdGlvbihyZXN1bHRzKXsKKwlpZiAoIXRoaXMuZG9jdW1lbnRTb3J0ZXIpIHJldHVybiByZXN1bHRzOworCXJlc3VsdHMuc29ydCh0aGlzLmRvY3VtZW50U29ydGVyKTsKKwlyZXR1cm4gcmVzdWx0czsKK307CisKKy8qPHBzZXVkby1zZWxlY3RvcnM+Ki8vKjxudGgtcHNldWRvLXNlbGVjdG9ycz4qLworCitsb2NhbC5jYWNoZU5USCA9IHt9OworCitsb2NhbC5tYXRjaE5USCA9IC9eKFsrLV0/XGQqKT8oW2Etel0rKT8oWystXVxkKyk/JC87CisKK2xvY2FsLnBhcnNlTlRIQXJndW1lbnQgPSBmdW5jdGlvbihhcmd1bWVudCl7CisJdmFyIHBhcnNlZCA9IGFyZ3VtZW50Lm1hdGNoKHRoaXMubWF0Y2hOVEgpOworCWlmICghcGFyc2VkKSByZXR1cm4gZmFsc2U7CisJdmFyIHNwZWNpYWwgPSBwYXJzZWRbMl0gfHwgZmFsc2U7CisJdmFyIGEgPSBwYXJzZWRbMV0gfHwgMTsKKwlpZiAoYSA9PSAnLScpIGEgPSAtMTsKKwl2YXIgYiA9ICtwYXJzZWRbM10gfHwgMDsKKwlwYXJzZWQgPQorCQkoc3BlY2lhbCA9PSAnbicpCT8ge2E6IGEsIGI6IGJ9IDoKKwkJKHNwZWNpYWwgPT0gJ29kZCcpCT8ge2E6IDIsIGI6IDF9IDoKKwkJKHNwZWNpYWwgPT0gJ2V2ZW4nKQk/IHthOiAyLCBiOiAwfSA6IHthOiAwLCBiOiBhfTsKKworCXJldHVybiAodGhpcy5jYWNoZU5USFthcmd1bWVudF0gPSBwYXJzZWQpOworfTsKKworbG9jYWwuY3JlYXRlTlRIUHNldWRvID0gZnVuY3Rpb24oY2hpbGQsIHNpYmxpbmcsIHBvc2l0aW9ucywgb2ZUeXBlKXsKKwlyZXR1cm4gZnVuY3Rpb24obm9kZSwgYXJndW1lbnQpeworCQl2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7CisJCWlmICghdGhpc1twb3NpdGlvbnNdW3VpZF0peworCQkJdmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTsKKwkJCWlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7CisJCQl2YXIgZWwgPSBwYXJlbnRbY2hpbGRdLCBjb3VudCA9IDE7CisJCQlpZiAob2ZUeXBlKXsKKwkJCQl2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lOworCQkJCWRvIHsKKwkJCQkJaWYgKGVsLm5vZGVOYW1lICE9IG5vZGVOYW1lKSBjb250aW51ZTsKKwkJCQkJdGhpc1twb3NpdGlvbnNdW3RoaXMuZ2V0VUlEKGVsKV0gPSBjb3VudCsrOworCQkJCX0gd2hpbGUgKChlbCA9IGVsW3NpYmxpbmddKSk7CisJCQl9IGVsc2UgeworCQkJCWRvIHsKKwkJCQkJaWYgKGVsLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlOworCQkJCQl0aGlzW3Bvc2l0aW9uc11bdGhpcy5nZXRVSUQoZWwpXSA9IGNvdW50Kys7CisJCQkJfSB3aGlsZSAoKGVsID0gZWxbc2libGluZ10pKTsKKwkJCX0KKwkJfQorCQlhcmd1bWVudCA9IGFyZ3VtZW50IHx8ICduJzsKKwkJdmFyIHBhcnNlZCA9IHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdIHx8IHRoaXMucGFyc2VOVEhBcmd1bWVudChhcmd1bWVudCk7CisJCWlmICghcGFyc2VkKSByZXR1cm4gZmFsc2U7CisJCXZhciBhID0gcGFyc2VkLmEsIGIgPSBwYXJzZWQuYiwgcG9zID0gdGhpc1twb3NpdGlvbnNdW3VpZF07CisJCWlmIChhID09IDApIHJldHVybiBiID09IHBvczsKKwkJaWYgKGEgPiAwKXsKKwkJCWlmIChwb3MgPCBiKSByZXR1cm4gZmFsc2U7CisJCX0gZWxzZSB7CisJCQlpZiAoYiA8IHBvcykgcmV0dXJuIGZhbHNlOworCQl9CisJCXJldHVybiAoKHBvcyAtIGIpICUgYSkgPT0gMDsKKwl9OworfTsKKworLyo8L250aC1wc2V1ZG8tc2VsZWN0b3JzPiovLyo8L3BzZXVkby1zZWxlY3RvcnM+Ki8KKworbG9jYWwucHVzaEFycmF5ID0gZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7CisJaWYgKHRoaXMubWF0Y2hTZWxlY3Rvcihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKSkgdGhpcy5mb3VuZC5wdXNoKG5vZGUpOworfTsKKworbG9jYWwucHVzaFVJRCA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeworCXZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTsKKwlpZiAoIXRoaXMudW5pcXVlc1t1aWRdICYmIHRoaXMubWF0Y2hTZWxlY3Rvcihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKSl7CisJCXRoaXMudW5pcXVlc1t1aWRdID0gdHJ1ZTsKKwkJdGhpcy5mb3VuZC5wdXNoKG5vZGUpOworCX0KK307CisKK2xvY2FsLm1hdGNoTm9kZSA9IGZ1bmN0aW9uKG5vZGUsIHNlbGVjdG9yKXsKKwlpZiAodGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvcil7CisJCXRyeSB7CisJCQlyZXR1cm4gdGhpcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3IuY2FsbChub2RlLCBzZWxlY3Rvci5yZXBsYWNlKC9cWyhbXj1dKyk9XHMqKFteJyJcXV0rPylccypcXS9nLCAnWyQxPSIkMiJdJykpOworCQl9IGNhdGNoKG1hdGNoRXJyb3IpIHt9CisJfQorCisJdmFyIHBhcnNlZCA9IHRoaXMuU2xpY2sucGFyc2Uoc2VsZWN0b3IpOworCWlmICghcGFyc2VkKSByZXR1cm4gdHJ1ZTsKKworCS8vIHNpbXBsZSAoc2luZ2xlKSBzZWxlY3RvcnMKKwl2YXIgZXhwcmVzc2lvbnMgPSBwYXJzZWQuZXhwcmVzc2lvbnMsIHJldmVyc2VkRXhwcmVzc2lvbnMsIHNpbXBsZUV4cENvdW50ZXIgPSAwLCBpOworCWZvciAoaSA9IDA7IChjdXJyZW50RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zW2ldKTsgaSsrKXsKKwkJaWYgKGN1cnJlbnRFeHByZXNzaW9uLmxlbmd0aCA9PSAxKXsKKwkJCXZhciBleHAgPSBjdXJyZW50RXhwcmVzc2lvblswXTsKKwkJCWlmICh0aGlzLm1hdGNoU2VsZWN0b3Iobm9kZSwgKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBleHAudGFnIDogZXhwLnRhZy50b1VwcGVyQ2FzZSgpLCBleHAuaWQsIGV4cC5jbGFzc2VzLCBleHAuYXR0cmlidXRlcywgZXhwLnBzZXVkb3MpKSByZXR1cm4gdHJ1ZTsKKwkJCXNpbXBsZUV4cENvdW50ZXIrKzsKKwkJfQorCX0KKworCWlmIChzaW1wbGVFeHBDb3VudGVyID09IHBhcnNlZC5sZW5ndGgpIHJldHVybiBmYWxzZTsKKworCXZhciBub2RlcyA9IHRoaXMuc2VhcmNoKHRoaXMuZG9jdW1lbnQsIHBhcnNlZCksIGl0ZW07CisJZm9yIChpID0gMDsgaXRlbSA9IG5vZGVzW2krK107KXsKKwkJaWYgKGl0ZW0gPT09IG5vZGUpIHJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9OworCitsb2NhbC5tYXRjaFBzZXVkbyA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGFyZ3VtZW50KXsKKwl2YXIgcHNldWRvTmFtZSA9ICdwc2V1ZG86JyArIG5hbWU7CisJaWYgKHRoaXNbcHNldWRvTmFtZV0pIHJldHVybiB0aGlzW3BzZXVkb05hbWVdKG5vZGUsIGFyZ3VtZW50KTsKKwl2YXIgYXR0cmlidXRlID0gdGhpcy5nZXRBdHRyaWJ1dGUobm9kZSwgbmFtZSk7CisJcmV0dXJuIChhcmd1bWVudCkgPyBhcmd1bWVudCA9PSBhdHRyaWJ1dGUgOiAhIWF0dHJpYnV0ZTsKK307CisKK2xvY2FsLm1hdGNoU2VsZWN0b3IgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsKKwlpZiAodGFnKXsKKwkJdmFyIG5vZGVOYW1lID0gKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBub2RlLm5vZGVOYW1lIDogbm9kZS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpOworCQlpZiAodGFnID09ICcqJyl7CisJCQlpZiAobm9kZU5hbWUgPCAnQCcpIHJldHVybiBmYWxzZTsgLy8gRml4IGZvciBjb21tZW50IG5vZGVzIGFuZCBjbG9zZWQgbm9kZXMKKwkJfSBlbHNlIHsKKwkJCWlmIChub2RlTmFtZSAhPSB0YWcpIHJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCWlmIChpZCAmJiBub2RlLmdldEF0dHJpYnV0ZSgnaWQnKSAhPSBpZCkgcmV0dXJuIGZhbHNlOworCisJdmFyIGksIHBhcnQsIGNsczsKKwlpZiAoY2xhc3NlcykgZm9yIChpID0gY2xhc3Nlcy5sZW5ndGg7IGktLTspeworCQljbHMgPSBub2RlLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCBub2RlLmNsYXNzTmFtZTsKKwkJaWYgKCEoY2xzICYmIGNsYXNzZXNbaV0ucmVnZXhwLnRlc3QoY2xzKSkpIHJldHVybiBmYWxzZTsKKwl9CisJaWYgKGF0dHJpYnV0ZXMpIGZvciAoaSA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBpLS07KXsKKwkJcGFydCA9IGF0dHJpYnV0ZXNbaV07CisJCWlmIChwYXJ0Lm9wZXJhdG9yID8gIXBhcnQudGVzdCh0aGlzLmdldEF0dHJpYnV0ZShub2RlLCBwYXJ0LmtleSkpIDogIXRoaXMuaGFzQXR0cmlidXRlKG5vZGUsIHBhcnQua2V5KSkgcmV0dXJuIGZhbHNlOworCX0KKwlpZiAocHNldWRvcykgZm9yIChpID0gcHNldWRvcy5sZW5ndGg7IGktLTspeworCQlwYXJ0ID0gcHNldWRvc1tpXTsKKwkJaWYgKCF0aGlzLm1hdGNoUHNldWRvKG5vZGUsIHBhcnQua2V5LCBwYXJ0LnZhbHVlKSkgcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK307CisKK3ZhciBjb21iaW5hdG9ycyA9IHsKKworCScgJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KXsgLy8gYWxsIGNoaWxkIG5vZGVzLCBhbnkgbGV2ZWwKKworCQl2YXIgaSwgaXRlbSwgY2hpbGRyZW47CisKKwkJaWYgKHRoaXMuaXNIVE1MRG9jdW1lbnQpeworCQkJZ2V0QnlJZDogaWYgKGlkKXsKKwkJCQlpdGVtID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisJCQkJaWYgKCghaXRlbSAmJiBub2RlLmFsbCkgfHwgKHRoaXMuaWRHZXRzTmFtZSAmJiBpdGVtICYmIGl0ZW0uZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS5ub2RlVmFsdWUgIT0gaWQpKXsKKwkJCQkJLy8gYWxsW2lkXSByZXR1cm5zIGFsbCB0aGUgZWxlbWVudHMgd2l0aCB0aGF0IG5hbWUgb3IgaWQgaW5zaWRlIG5vZGUKKwkJCQkJLy8gaWYgdGhlcmVzIGp1c3Qgb25lIGl0IHdpbGwgcmV0dXJuIHRoZSBlbGVtZW50LCBlbHNlIGl0IHdpbGwgYmUgYSBjb2xsZWN0aW9uCisJCQkJCWNoaWxkcmVuID0gbm9kZS5hbGxbaWRdOworCQkJCQlpZiAoIWNoaWxkcmVuKSByZXR1cm47CisJCQkJCWlmICghY2hpbGRyZW5bMF0pIGNoaWxkcmVuID0gW2NoaWxkcmVuXTsKKwkJCQkJZm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2krK107KXsKKwkJCQkJCXZhciBpZE5vZGUgPSBpdGVtLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJyk7CisJCQkJCQlpZiAoaWROb2RlICYmIGlkTm9kZS5ub2RlVmFsdWUgPT0gaWQpeworCQkJCQkJCXRoaXMucHVzaChpdGVtLCB0YWcsIG51bGwsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJaWYgKCFpdGVtKXsKKwkJCQkJLy8gaWYgdGhlIGNvbnRleHQgaXMgaW4gdGhlIGRvbSB3ZSByZXR1cm4sIGVsc2Ugd2Ugd2lsbCB0cnkgR0VCVE4sIGJyZWFraW5nIHRoZSBnZXRCeUlkIGxhYmVsCisJCQkJCWlmICh0aGlzLmNvbnRhaW5zKHRoaXMucm9vdCwgbm9kZSkpIHJldHVybjsKKwkJCQkJZWxzZSBicmVhayBnZXRCeUlkOworCQkJCX0gZWxzZSBpZiAodGhpcy5kb2N1bWVudCAhPT0gbm9kZSAmJiAhdGhpcy5jb250YWlucyhub2RlLCBpdGVtKSkgcmV0dXJuOworCQkJCXRoaXMucHVzaChpdGVtLCB0YWcsIG51bGwsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWdldEJ5Q2xhc3M6IGlmIChjbGFzc2VzICYmIG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiAhdGhpcy5icm9rZW5HRUJDTil7CisJCQkJY2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NMaXN0LmpvaW4oJyAnKSk7CisJCQkJaWYgKCEoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSkgYnJlYWsgZ2V0QnlDbGFzczsKKwkJCQlmb3IgKGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVzaChpdGVtLCB0YWcsIGlkLCBudWxsLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwkJZ2V0QnlUYWc6IHsKKwkJCWNoaWxkcmVuID0gbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWcpOworCQkJaWYgKCEoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSkgYnJlYWsgZ2V0QnlUYWc7CisJCQlpZiAoIXRoaXMuYnJva2VuU3RhckdFQlROKSB0YWcgPSBudWxsOworCQkJZm9yIChpID0gMDsgaXRlbSA9IGNoaWxkcmVuW2krK107KSB0aGlzLnB1c2goaXRlbSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7CisJCX0KKwl9LAorCisJJz4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gZGlyZWN0IGNoaWxkcmVuCisJCWlmICgobm9kZSA9IG5vZGUuZmlyc3RDaGlsZCkpIGRvIHsKKwkJCWlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTsKKwkJfSB3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSk7CisJfSwKKworCScrJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZworCQl3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSl7CisJCQl0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7CisJCQlicmVhazsKKwkJfQorCX0sCisKKwknXic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBmaXJzdCBjaGlsZAorCQlub2RlID0gbm9kZS5maXJzdENoaWxkOworCQlpZiAobm9kZSl7CisJCQlpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7CisJCQllbHNlIHRoaXNbJ2NvbWJpbmF0b3I6KyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpOworCQl9CisJfSwKKworCSd+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ3MKKwkJd2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykpeworCQkJaWYgKG5vZGUubm9kZVR5cGUgIT0gMSkgY29udGludWU7CisJCQl2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7CisJCQlpZiAodGhpcy5iaXRVbmlxdWVzW3VpZF0pIGJyZWFrOworCQkJdGhpcy5iaXRVbmlxdWVzW3VpZF0gPSB0cnVlOworCQkJdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpOworCQl9CisJfSwKKworCScrKyc6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBuZXh0IHNpYmxpbmcgYW5kIHByZXZpb3VzIHNpYmxpbmcKKwkJdGhpc1snY29tYmluYXRvcjorJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7CisJCXRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTsKKwl9LAorCisJJ35+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZ3MgYW5kIHByZXZpb3VzIHNpYmxpbmdzCisJCXRoaXNbJ2NvbWJpbmF0b3I6fiddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpOworCQl0aGlzWydjb21iaW5hdG9yOiF+J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7CisJfSwKKworCSchJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGFsbCBwYXJlbnQgbm9kZXMgdXAgdG8gZG9jdW1lbnQKKwkJd2hpbGUgKChub2RlID0gbm9kZS5wYXJlbnROb2RlKSkgaWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTsKKwl9LAorCisJJyE+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGRpcmVjdCBwYXJlbnQgKG9uZSBsZXZlbCkKKwkJbm9kZSA9IG5vZGUucGFyZW50Tm9kZTsKKwkJaWYgKG5vZGUgIT09IHRoaXMuZG9jdW1lbnQpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTsKKwl9LAorCisJJyErJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIHByZXZpb3VzIHNpYmxpbmcKKwkJd2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKXsKKwkJCXRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTsKKwkJCWJyZWFrOworCQl9CisJfSwKKworCSchXic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBsYXN0IGNoaWxkCisJCW5vZGUgPSBub2RlLmxhc3RDaGlsZDsKKwkJaWYgKG5vZGUpeworCQkJaWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpOworCQkJZWxzZSB0aGlzWydjb21iaW5hdG9yOiErJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7CisJCX0KKwl9LAorCisJJyF+JzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIHByZXZpb3VzIHNpYmxpbmdzCisJCXdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSl7CisJCQlpZiAobm9kZS5ub2RlVHlwZSAhPSAxKSBjb250aW51ZTsKKwkJCXZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTsKKwkJCWlmICh0aGlzLmJpdFVuaXF1ZXNbdWlkXSkgYnJlYWs7CisJCQl0aGlzLmJpdFVuaXF1ZXNbdWlkXSA9IHRydWU7CisJCQl0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7CisJCX0KKwl9CisKK307CisKK2ZvciAodmFyIGMgaW4gY29tYmluYXRvcnMpIGxvY2FsWydjb21iaW5hdG9yOicgKyBjXSA9IGNvbWJpbmF0b3JzW2NdOworCit2YXIgcHNldWRvcyA9IHsKKworCS8qPHBzZXVkby1zZWxlY3RvcnM+Ki8KKworCSdlbXB0eSc6IGZ1bmN0aW9uKG5vZGUpeworCQl2YXIgY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7CisJCXJldHVybiAhKGNoaWxkICYmIGNoaWxkLm5vZGVUeXBlID09IDEpICYmICEobm9kZS5pbm5lclRleHQgfHwgbm9kZS50ZXh0Q29udGVudCB8fCAnJykubGVuZ3RoOworCX0sCisKKwknbm90JzogZnVuY3Rpb24obm9kZSwgZXhwcmVzc2lvbil7CisJCXJldHVybiAhdGhpcy5tYXRjaE5vZGUobm9kZSwgZXhwcmVzc2lvbik7CisJfSwKKworCSdjb250YWlucyc6IGZ1bmN0aW9uKG5vZGUsIHRleHQpeworCQlyZXR1cm4gKG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUudGV4dENvbnRlbnQgfHwgJycpLmluZGV4T2YodGV4dCkgPiAtMTsKKwl9LAorCisJJ2ZpcnN0LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7CisJCXdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gdHJ1ZTsKKwl9LAorCisJJ2xhc3QtY2hpbGQnOiBmdW5jdGlvbihub2RlKXsKKwkJd2hpbGUgKChub2RlID0gbm9kZS5uZXh0U2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTsKKwkJcmV0dXJuIHRydWU7CisJfSwKKworCSdvbmx5LWNoaWxkJzogZnVuY3Rpb24obm9kZSl7CisJCXZhciBwcmV2ID0gbm9kZTsKKwkJd2hpbGUgKChwcmV2ID0gcHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7CisJCXZhciBuZXh0ID0gbm9kZTsKKwkJd2hpbGUgKChuZXh0ID0gbmV4dC5uZXh0U2libGluZykpIGlmIChuZXh0Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTsKKwkJcmV0dXJuIHRydWU7CisJfSwKKworCS8qPG50aC1wc2V1ZG8tc2VsZWN0b3JzPiovCisKKwknbnRoLWNoaWxkJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5nJywgJ3Bvc05USCcpLAorCisJJ250aC1sYXN0LWNoaWxkJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQnLCAncHJldmlvdXNTaWJsaW5nJywgJ3Bvc05USExhc3QnKSwKKworCSdudGgtb2YtdHlwZSc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnZmlyc3RDaGlsZCcsICduZXh0U2libGluZycsICdwb3NOVEhUeXBlJywgdHJ1ZSksCisKKwknbnRoLWxhc3Qtb2YtdHlwZSc6IGxvY2FsLmNyZWF0ZU5USFBzZXVkbygnbGFzdENoaWxkJywgJ3ByZXZpb3VzU2libGluZycsICdwb3NOVEhUeXBlTGFzdCcsIHRydWUpLAorCisJJ2luZGV4JzogZnVuY3Rpb24obm9kZSwgaW5kZXgpeworCQlyZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcnICsgaW5kZXggKyAxKTsKKwl9LAorCisJJ2V2ZW4nOiBmdW5jdGlvbihub2RlKXsKKwkJcmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAnMm4nKTsKKwl9LAorCisJJ29kZCc6IGZ1bmN0aW9uKG5vZGUpeworCQlyZXR1cm4gdGhpc1sncHNldWRvOm50aC1jaGlsZCddKG5vZGUsICcybisxJyk7CisJfSwKKworCS8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4qLworCisJLyo8b2YtdHlwZS1wc2V1ZG8tc2VsZWN0b3JzPiovCisKKwknZmlyc3Qtb2YtdHlwZSc6IGZ1bmN0aW9uKG5vZGUpeworCQl2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lOworCQl3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpIGlmIChub2RlLm5vZGVOYW1lID09IG5vZGVOYW1lKSByZXR1cm4gZmFsc2U7CisJCXJldHVybiB0cnVlOworCX0sCisKKwknbGFzdC1vZi10eXBlJzogZnVuY3Rpb24obm9kZSl7CisJCXZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7CisJCXdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gdHJ1ZTsKKwl9LAorCisJJ29ubHktb2YtdHlwZSc6IGZ1bmN0aW9uKG5vZGUpeworCQl2YXIgcHJldiA9IG5vZGUsIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTsKKwkJd2hpbGUgKChwcmV2ID0gcHJldi5wcmV2aW91c1NpYmxpbmcpKSBpZiAocHJldi5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlOworCQl2YXIgbmV4dCA9IG5vZGU7CisJCXdoaWxlICgobmV4dCA9IG5leHQubmV4dFNpYmxpbmcpKSBpZiAobmV4dC5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gdHJ1ZTsKKwl9LAorCisJLyo8L29mLXR5cGUtcHNldWRvLXNlbGVjdG9ycz4qLworCisJLy8gY3VzdG9tIHBzZXVkb3MKKworCSdlbmFibGVkJzogZnVuY3Rpb24obm9kZSl7CisJCXJldHVybiAhbm9kZS5kaXNhYmxlZDsKKwl9LAorCisJJ2Rpc2FibGVkJzogZnVuY3Rpb24obm9kZSl7CisJCXJldHVybiBub2RlLmRpc2FibGVkOworCX0sCisKKwknY2hlY2tlZCc6IGZ1bmN0aW9uKG5vZGUpeworCQlyZXR1cm4gbm9kZS5jaGVja2VkIHx8IG5vZGUuc2VsZWN0ZWQ7CisJfSwKKworCSdmb2N1cyc6IGZ1bmN0aW9uKG5vZGUpeworCQlyZXR1cm4gdGhpcy5pc0hUTUxEb2N1bWVudCAmJiB0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IG5vZGUgJiYgKG5vZGUuaHJlZiB8fCBub2RlLnR5cGUgfHwgdGhpcy5oYXNBdHRyaWJ1dGUobm9kZSwgJ3RhYmluZGV4JykpOworCX0sCisKKwkncm9vdCc6IGZ1bmN0aW9uKG5vZGUpeworCQlyZXR1cm4gKG5vZGUgPT09IHRoaXMucm9vdCk7CisJfSwKKworCSdzZWxlY3RlZCc6IGZ1bmN0aW9uKG5vZGUpeworCQlyZXR1cm4gbm9kZS5zZWxlY3RlZDsKKwl9CisKKwkvKjwvcHNldWRvLXNlbGVjdG9ycz4qLworfTsKKworZm9yICh2YXIgcCBpbiBwc2V1ZG9zKSBsb2NhbFsncHNldWRvOicgKyBwXSA9IHBzZXVkb3NbcF07CisKKy8vIGF0dHJpYnV0ZXMgbWV0aG9kcworCitsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzID0geworCisJJ2NsYXNzJzogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8IHRoaXMuY2xhc3NOYW1lOworCX0sCisKKwknZm9yJzogZnVuY3Rpb24oKXsKKwkJcmV0dXJuICgnaHRtbEZvcicgaW4gdGhpcykgPyB0aGlzLmh0bWxGb3IgOiB0aGlzLmdldEF0dHJpYnV0ZSgnZm9yJyk7CisJfSwKKworCSdocmVmJzogZnVuY3Rpb24oKXsKKwkJcmV0dXJuICgnaHJlZicgaW4gdGhpcykgPyB0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicsIDIpIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTsKKwl9LAorCisJJ3N0eWxlJzogZnVuY3Rpb24oKXsKKwkJcmV0dXJuICh0aGlzLnN0eWxlKSA/IHRoaXMuc3R5bGUuY3NzVGV4dCA6IHRoaXMuZ2V0QXR0cmlidXRlKCdzdHlsZScpOworCX0sCisKKwkndGFiaW5kZXgnOiBmdW5jdGlvbigpeworCQl2YXIgYXR0cmlidXRlTm9kZSA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgndGFiaW5kZXgnKTsKKwkJcmV0dXJuIChhdHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0ZU5vZGUuc3BlY2lmaWVkKSA/IGF0dHJpYnV0ZU5vZGUubm9kZVZhbHVlIDogbnVsbDsKKwl9LAorCisJJ3R5cGUnOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ3R5cGUnKTsKKwl9CisKK307CisKKy8vIFNsaWNrCisKK3ZhciBTbGljayA9IGxvY2FsLlNsaWNrID0gKHRoaXMuU2xpY2sgfHwge30pOworCitTbGljay52ZXJzaW9uID0gJzEuMS41JzsKKworLy8gU2xpY2sgZmluZGVyCisKK1NsaWNrLnNlYXJjaCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCl7CisJcmV0dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQpOworfTsKKworU2xpY2suZmluZCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24peworCXJldHVybiBsb2NhbC5zZWFyY2goY29udGV4dCwgZXhwcmVzc2lvbiwgbnVsbCwgdHJ1ZSk7Cit9OworCisvLyBTbGljayBjb250YWlubWVudCBjaGVja2VyCisKK1NsaWNrLmNvbnRhaW5zID0gZnVuY3Rpb24oY29udGFpbmVyLCBub2RlKXsKKwlsb2NhbC5zZXREb2N1bWVudChjb250YWluZXIpOworCXJldHVybiBsb2NhbC5jb250YWlucyhjb250YWluZXIsIG5vZGUpOworfTsKKworLy8gU2xpY2sgYXR0cmlidXRlIGdldHRlcgorCitTbGljay5nZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbihub2RlLCBuYW1lKXsKKwlyZXR1cm4gbG9jYWwuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpOworfTsKKworLy8gU2xpY2sgbWF0Y2hlcgorCitTbGljay5tYXRjaCA9IGZ1bmN0aW9uKG5vZGUsIHNlbGVjdG9yKXsKKwlpZiAoIShub2RlICYmIHNlbGVjdG9yKSkgcmV0dXJuIGZhbHNlOworCWlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IG5vZGUpIHJldHVybiB0cnVlOworCWxvY2FsLnNldERvY3VtZW50KG5vZGUpOworCXJldHVybiBsb2NhbC5tYXRjaE5vZGUobm9kZSwgc2VsZWN0b3IpOworfTsKKworLy8gU2xpY2sgYXR0cmlidXRlIGFjY2Vzc29yCisKK1NsaWNrLmRlZmluZUF0dHJpYnV0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUsIGZuKXsKKwlsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdID0gZm47CisJcmV0dXJuIHRoaXM7Cit9OworCitTbGljay5sb29rdXBBdHRyaWJ1dGVHZXR0ZXIgPSBmdW5jdGlvbihuYW1lKXsKKwlyZXR1cm4gbG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXTsKK307CisKKy8vIFNsaWNrIHBzZXVkbyBhY2Nlc3NvcgorCitTbGljay5kZWZpbmVQc2V1ZG8gPSBmdW5jdGlvbihuYW1lLCBmbil7CisJbG9jYWxbJ3BzZXVkbzonICsgbmFtZV0gPSBmdW5jdGlvbihub2RlLCBhcmd1bWVudCl7CisJCXJldHVybiBmbi5jYWxsKG5vZGUsIGFyZ3VtZW50KTsKKwl9OworCXJldHVybiB0aGlzOworfTsKKworU2xpY2subG9va3VwUHNldWRvID0gZnVuY3Rpb24obmFtZSl7CisJdmFyIHBzZXVkbyA9IGxvY2FsWydwc2V1ZG86JyArIG5hbWVdOworCWlmIChwc2V1ZG8pIHJldHVybiBmdW5jdGlvbihhcmd1bWVudCl7CisJCXJldHVybiBwc2V1ZG8uY2FsbCh0aGlzLCBhcmd1bWVudCk7CisJfTsKKwlyZXR1cm4gbnVsbDsKK307CisKKy8vIFNsaWNrIG92ZXJyaWRlcyBhY2Nlc3NvcgorCitTbGljay5vdmVycmlkZSA9IGZ1bmN0aW9uKHJlZ2V4cCwgZm4peworCWxvY2FsLm92ZXJyaWRlKHJlZ2V4cCwgZm4pOworCXJldHVybiB0aGlzOworfTsKKworU2xpY2suaXNYTUwgPSBsb2NhbC5pc1hNTDsKKworU2xpY2sudWlkT2YgPSBmdW5jdGlvbihub2RlKXsKKwlyZXR1cm4gbG9jYWwuZ2V0VUlESFRNTChub2RlKTsKK307CisKK2lmICghdGhpcy5TbGljaykgdGhpcy5TbGljayA9IFNsaWNrOworCit9KS5hcHBseSgvKjxDb21tb25KUz4qLyh0eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgPyBleHBvcnRzIDogLyo8L0NvbW1vbkpTPiovdGhpcyk7CisKKworLyoKKy0tLQorCituYW1lOiBFbGVtZW50CisKK2Rlc2NyaXB0aW9uOiBPbmUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IGl0ZW1zIGluIE1vb1Rvb2xzLiBDb250YWlucyB0aGUgZG9sbGFyIGZ1bmN0aW9uLCB0aGUgZG9sbGFycyBmdW5jdGlvbiwgYW5kIGFuIGhhbmRmdWwgb2YgY3Jvc3MtYnJvd3NlciwgdGltZS1zYXZlciBtZXRob2RzIHRvIGxldCB5b3UgZWFzaWx5IHdvcmsgd2l0aCBIVE1MIEVsZW1lbnRzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworcmVxdWlyZXM6IFtXaW5kb3csIERvY3VtZW50LCBBcnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgTnVtYmVyLCBTbGljay5QYXJzZXIsIFNsaWNrLkZpbmRlcl0KKworcHJvdmlkZXM6IFtFbGVtZW50LCBFbGVtZW50cywgJCwgJCQsIElmcmFtZSwgU2VsZWN0b3JzXQorCisuLi4KKyovCisKK3ZhciBFbGVtZW50ID0gZnVuY3Rpb24odGFnLCBwcm9wcyl7CisJdmFyIGtvbnN0cnVjdG9yID0gRWxlbWVudC5Db25zdHJ1Y3RvcnNbdGFnXTsKKwlpZiAoa29uc3RydWN0b3IpIHJldHVybiBrb25zdHJ1Y3Rvcihwcm9wcyk7CisJaWYgKHR5cGVvZiB0YWcgIT0gJ3N0cmluZycpIHJldHVybiBkb2N1bWVudC5pZCh0YWcpLnNldChwcm9wcyk7CisKKwlpZiAoIXByb3BzKSBwcm9wcyA9IHt9OworCisJaWYgKCEoL15bXHctXSskLykudGVzdCh0YWcpKXsKKwkJdmFyIHBhcnNlZCA9IFNsaWNrLnBhcnNlKHRhZykuZXhwcmVzc2lvbnNbMF1bMF07CisJCXRhZyA9IChwYXJzZWQudGFnID09ICcqJykgPyAnZGl2JyA6IHBhcnNlZC50YWc7CisJCWlmIChwYXJzZWQuaWQgJiYgcHJvcHMuaWQgPT0gbnVsbCkgcHJvcHMuaWQgPSBwYXJzZWQuaWQ7CisKKwkJdmFyIGF0dHJpYnV0ZXMgPSBwYXJzZWQuYXR0cmlidXRlczsKKwkJaWYgKGF0dHJpYnV0ZXMpIGZvciAodmFyIGkgPSAwLCBsID0gYXR0cmlidXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspeworCQkJdmFyIGF0dHIgPSBhdHRyaWJ1dGVzW2ldOworCQkJaWYgKHByb3BzW2F0dHIua2V5XSAhPSBudWxsKSBjb250aW51ZTsKKworCQkJaWYgKGF0dHIudmFsdWUgIT0gbnVsbCAmJiBhdHRyLm9wZXJhdG9yID09ICc9JykgcHJvcHNbYXR0ci5rZXldID0gYXR0ci52YWx1ZTsKKwkJCWVsc2UgaWYgKCFhdHRyLnZhbHVlICYmICFhdHRyLm9wZXJhdG9yKSBwcm9wc1thdHRyLmtleV0gPSB0cnVlOworCQl9CisKKwkJaWYgKHBhcnNlZC5jbGFzc0xpc3QgJiYgcHJvcHNbJ2NsYXNzJ10gPT0gbnVsbCkgcHJvcHNbJ2NsYXNzJ10gPSBwYXJzZWQuY2xhc3NMaXN0LmpvaW4oJyAnKTsKKwl9CisKKwlyZXR1cm4gZG9jdW1lbnQubmV3RWxlbWVudCh0YWcsIHByb3BzKTsKK307CisKK2lmIChCcm93c2VyLkVsZW1lbnQpIEVsZW1lbnQucHJvdG90eXBlID0gQnJvd3Nlci5FbGVtZW50LnByb3RvdHlwZTsKKworbmV3IFR5cGUoJ0VsZW1lbnQnLCBFbGVtZW50KS5taXJyb3IoZnVuY3Rpb24obmFtZSl7CisJaWYgKEFycmF5LnByb3RvdHlwZVtuYW1lXSkgcmV0dXJuOworCisJdmFyIG9iaiA9IHt9OworCW9ialtuYW1lXSA9IGZ1bmN0aW9uKCl7CisJCXZhciByZXN1bHRzID0gW10sIGFyZ3MgPSBhcmd1bWVudHMsIGVsZW1lbnRzID0gdHJ1ZTsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7CisJCQl2YXIgZWxlbWVudCA9IHRoaXNbaV0sIHJlc3VsdCA9IHJlc3VsdHNbaV0gPSBlbGVtZW50W25hbWVdLmFwcGx5KGVsZW1lbnQsIGFyZ3MpOworCQkJZWxlbWVudHMgPSAoZWxlbWVudHMgJiYgdHlwZU9mKHJlc3VsdCkgPT0gJ2VsZW1lbnQnKTsKKwkJfQorCQlyZXR1cm4gKGVsZW1lbnRzKSA/IG5ldyBFbGVtZW50cyhyZXN1bHRzKSA6IHJlc3VsdHM7CisJfTsKKworCUVsZW1lbnRzLmltcGxlbWVudChvYmopOworfSk7CisKK2lmICghQnJvd3Nlci5FbGVtZW50KXsKKwlFbGVtZW50LnBhcmVudCA9IE9iamVjdDsKKworCUVsZW1lbnQuUHJvdG90eXBlID0geyckZmFtaWx5JzogRnVuY3Rpb24uZnJvbSgnZWxlbWVudCcpLmhpZGUoKX07CisKKwlFbGVtZW50Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2QpeworCQlFbGVtZW50LlByb3RvdHlwZVtuYW1lXSA9IG1ldGhvZDsKKwl9KTsKK30KKworRWxlbWVudC5Db25zdHJ1Y3RvcnMgPSB7fTsKKworLy88MS4yY29tcGF0PgorCitFbGVtZW50LkNvbnN0cnVjdG9ycyA9IG5ldyBIYXNoOworCisvLzwvMS4yY29tcGF0PgorCit2YXIgSUZyYW1lID0gbmV3IFR5cGUoJ0lGcmFtZScsIGZ1bmN0aW9uKCl7CisJdmFyIHBhcmFtcyA9IEFycmF5LmxpbmsoYXJndW1lbnRzLCB7CisJCXByb3BlcnRpZXM6IFR5cGUuaXNPYmplY3QsCisJCWlmcmFtZTogZnVuY3Rpb24ob2JqKXsKKwkJCXJldHVybiAob2JqICE9IG51bGwpOworCQl9CisJfSk7CisKKwl2YXIgcHJvcHMgPSBwYXJhbXMucHJvcGVydGllcyB8fCB7fSwgaWZyYW1lOworCWlmIChwYXJhbXMuaWZyYW1lKSBpZnJhbWUgPSBkb2N1bWVudC5pZChwYXJhbXMuaWZyYW1lKTsKKwl2YXIgb25sb2FkID0gcHJvcHMub25sb2FkIHx8IGZ1bmN0aW9uKCl7fTsKKwlkZWxldGUgcHJvcHMub25sb2FkOworCXByb3BzLmlkID0gcHJvcHMubmFtZSA9IFtwcm9wcy5pZCwgcHJvcHMubmFtZSwgaWZyYW1lID8gKGlmcmFtZS5pZCB8fCBpZnJhbWUubmFtZSkgOiAnSUZyYW1lXycgKyBTdHJpbmcudW5pcXVlSUQoKV0ucGljaygpOworCWlmcmFtZSA9IG5ldyBFbGVtZW50KGlmcmFtZSB8fCAnaWZyYW1lJywgcHJvcHMpOworCisJdmFyIG9uTG9hZCA9IGZ1bmN0aW9uKCl7CisJCW9ubG9hZC5jYWxsKGlmcmFtZS5jb250ZW50V2luZG93KTsKKwl9OworCisJaWYgKHdpbmRvdy5mcmFtZXNbcHJvcHMuaWRdKSBvbkxvYWQoKTsKKwllbHNlIGlmcmFtZS5hZGRMaXN0ZW5lcignbG9hZCcsIG9uTG9hZCk7CisJcmV0dXJuIGlmcmFtZTsKK30pOworCit2YXIgRWxlbWVudHMgPSB0aGlzLkVsZW1lbnRzID0gZnVuY3Rpb24obm9kZXMpeworCWlmIChub2RlcyAmJiBub2Rlcy5sZW5ndGgpeworCQl2YXIgdW5pcXVlcyA9IHt9LCBub2RlOworCQlmb3IgKHZhciBpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXsKKwkJCXZhciB1aWQgPSBTbGljay51aWRPZihub2RlKTsKKwkJCWlmICghdW5pcXVlc1t1aWRdKXsKKwkJCQl1bmlxdWVzW3VpZF0gPSB0cnVlOworCQkJCXRoaXMucHVzaChub2RlKTsKKwkJCX0KKwkJfQorCX0KK307CisKK0VsZW1lbnRzLnByb3RvdHlwZSA9IHtsZW5ndGg6IDB9OworRWxlbWVudHMucGFyZW50ID0gQXJyYXk7CisKK25ldyBUeXBlKCdFbGVtZW50cycsIEVsZW1lbnRzKS5pbXBsZW1lbnQoeworCisJZmlsdGVyOiBmdW5jdGlvbihmaWx0ZXIsIGJpbmQpeworCQlpZiAoIWZpbHRlcikgcmV0dXJuIHRoaXM7CisJCXJldHVybiBuZXcgRWxlbWVudHMoQXJyYXkuZmlsdGVyKHRoaXMsICh0eXBlT2YoZmlsdGVyKSA9PSAnc3RyaW5nJykgPyBmdW5jdGlvbihpdGVtKXsKKwkJCXJldHVybiBpdGVtLm1hdGNoKGZpbHRlcik7CisJCX0gOiBmaWx0ZXIsIGJpbmQpKTsKKwl9LnByb3RlY3QoKSwKKworCXB1c2g6IGZ1bmN0aW9uKCl7CisJCXZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXsKKwkJCXZhciBpdGVtID0gZG9jdW1lbnQuaWQoYXJndW1lbnRzW2ldKTsKKwkJCWlmIChpdGVtKSB0aGlzW2xlbmd0aCsrXSA9IGl0ZW07CisJCX0KKwkJcmV0dXJuICh0aGlzLmxlbmd0aCA9IGxlbmd0aCk7CisJfS5wcm90ZWN0KCksCisKKwl1bnNoaWZ0OiBmdW5jdGlvbigpeworCQl2YXIgaXRlbXMgPSBbXTsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXsKKwkJCXZhciBpdGVtID0gZG9jdW1lbnQuaWQoYXJndW1lbnRzW2ldKTsKKwkJCWlmIChpdGVtKSBpdGVtcy5wdXNoKGl0ZW0pOworCQl9CisJCXJldHVybiBBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseSh0aGlzLCBpdGVtcyk7CisJfS5wcm90ZWN0KCksCisKKwljb25jYXQ6IGZ1bmN0aW9uKCl7CisJCXZhciBuZXdFbGVtZW50cyA9IG5ldyBFbGVtZW50cyh0aGlzKTsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXsKKwkJCXZhciBpdGVtID0gYXJndW1lbnRzW2ldOworCQkJaWYgKFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pKSBuZXdFbGVtZW50cy5hcHBlbmQoaXRlbSk7CisJCQllbHNlIG5ld0VsZW1lbnRzLnB1c2goaXRlbSk7CisJCX0KKwkJcmV0dXJuIG5ld0VsZW1lbnRzOworCX0ucHJvdGVjdCgpLAorCisJYXBwZW5kOiBmdW5jdGlvbihjb2xsZWN0aW9uKXsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSBjb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykgdGhpcy5wdXNoKGNvbGxlY3Rpb25baV0pOworCQlyZXR1cm4gdGhpczsKKwl9LnByb3RlY3QoKSwKKworCWVtcHR5OiBmdW5jdGlvbigpeworCQl3aGlsZSAodGhpcy5sZW5ndGgpIGRlbGV0ZSB0aGlzWy0tdGhpcy5sZW5ndGhdOworCQlyZXR1cm4gdGhpczsKKwl9LnByb3RlY3QoKQorCit9KTsKKworLy88MS4yY29tcGF0PgorCitFbGVtZW50cy5hbGlhcygnZXh0ZW5kJywgJ2FwcGVuZCcpOworCisvLzwvMS4yY29tcGF0PgorCisoZnVuY3Rpb24oKXsKKworLy8gRkYsIElFCit2YXIgc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZSwgb2JqZWN0ID0geycwJzogMCwgJzEnOiAxLCBsZW5ndGg6IDJ9OworCitzcGxpY2UuY2FsbChvYmplY3QsIDEsIDEpOworaWYgKG9iamVjdFsxXSA9PSAxKSBFbGVtZW50cy5pbXBsZW1lbnQoJ3NwbGljZScsIGZ1bmN0aW9uKCl7CisJdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoOworCXNwbGljZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCXdoaWxlIChsZW5ndGggPj0gdGhpcy5sZW5ndGgpIGRlbGV0ZSB0aGlzW2xlbmd0aC0tXTsKKwlyZXR1cm4gdGhpczsKK30ucHJvdGVjdCgpKTsKKworRWxlbWVudHMuaW1wbGVtZW50KEFycmF5LnByb3RvdHlwZSk7CisKK0FycmF5Lm1pcnJvcihFbGVtZW50cyk7CisKKy8qPGx0SUU4PiovCit2YXIgY3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MOwordHJ5IHsKKwl2YXIgeCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJzxpbnB1dCBuYW1lPXg+Jyk7CisJY3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MID0gKHgubmFtZSA9PSAneCcpOworfSBjYXRjaChlKXt9CisKK3ZhciBlc2NhcGVRdW90ZXMgPSBmdW5jdGlvbihodG1sKXsKKwlyZXR1cm4gKCcnICsgaHRtbCkucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC8iL2csICcmcXVvdDsnKTsKK307CisvKjwvbHRJRTg+Ki8KKworRG9jdW1lbnQuaW1wbGVtZW50KHsKKworCW5ld0VsZW1lbnQ6IGZ1bmN0aW9uKHRhZywgcHJvcHMpeworCQlpZiAocHJvcHMgJiYgcHJvcHMuY2hlY2tlZCAhPSBudWxsKSBwcm9wcy5kZWZhdWx0Q2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7CisJCS8qPGx0SUU4PiovLy8gRml4IGZvciByZWFkb25seSBuYW1lIGFuZCB0eXBlIHByb3BlcnRpZXMgaW4gSUUgPCA4CisJCWlmIChjcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwgJiYgcHJvcHMpeworCQkJdGFnID0gJzwnICsgdGFnOworCQkJaWYgKHByb3BzLm5hbWUpIHRhZyArPSAnIG5hbWU9IicgKyBlc2NhcGVRdW90ZXMocHJvcHMubmFtZSkgKyAnIic7CisJCQlpZiAocHJvcHMudHlwZSkgdGFnICs9ICcgdHlwZT0iJyArIGVzY2FwZVF1b3Rlcyhwcm9wcy50eXBlKSArICciJzsKKwkJCXRhZyArPSAnPic7CisJCQlkZWxldGUgcHJvcHMubmFtZTsKKwkJCWRlbGV0ZSBwcm9wcy50eXBlOworCQl9CisJCS8qPC9sdElFOD4qLworCQlyZXR1cm4gdGhpcy5pZCh0aGlzLmNyZWF0ZUVsZW1lbnQodGFnKSkuc2V0KHByb3BzKTsKKwl9CisKK30pOworCit9KSgpOworCitEb2N1bWVudC5pbXBsZW1lbnQoeworCisJbmV3VGV4dE5vZGU6IGZ1bmN0aW9uKHRleHQpeworCQlyZXR1cm4gdGhpcy5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTsKKwl9LAorCisJZ2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLndpbmRvdzsKKwl9LAorCisJaWQ6IChmdW5jdGlvbigpeworCisJCXZhciB0eXBlcyA9IHsKKworCQkJc3RyaW5nOiBmdW5jdGlvbihpZCwgbm9jYXNoLCBkb2MpeworCQkJCWlkID0gU2xpY2suZmluZChkb2MsICcjJyArIGlkLnJlcGxhY2UoLyhcVykvZywgJ1xcJDEnKSk7CisJCQkJcmV0dXJuIChpZCkgPyB0eXBlcy5lbGVtZW50KGlkLCBub2Nhc2gpIDogbnVsbDsKKwkJCX0sCisKKwkJCWVsZW1lbnQ6IGZ1bmN0aW9uKGVsLCBub2Nhc2gpeworCQkJCSR1aWQoZWwpOworCQkJCWlmICghbm9jYXNoICYmICFlbC4kZmFtaWx5ICYmICEoL14oPzpvYmplY3R8ZW1iZWQpJC9pKS50ZXN0KGVsLnRhZ05hbWUpKXsKKwkJCQkJT2JqZWN0LmFwcGVuZChlbCwgRWxlbWVudC5Qcm90b3R5cGUpOworCQkJCX0KKwkJCQlyZXR1cm4gZWw7CisJCQl9LAorCisJCQlvYmplY3Q6IGZ1bmN0aW9uKG9iaiwgbm9jYXNoLCBkb2MpeworCQkJCWlmIChvYmoudG9FbGVtZW50KSByZXR1cm4gdHlwZXMuZWxlbWVudChvYmoudG9FbGVtZW50KGRvYyksIG5vY2FzaCk7CisJCQkJcmV0dXJuIG51bGw7CisJCQl9CisKKwkJfTsKKworCQl0eXBlcy50ZXh0bm9kZSA9IHR5cGVzLndoaXRlc3BhY2UgPSB0eXBlcy53aW5kb3cgPSB0eXBlcy5kb2N1bWVudCA9IGZ1bmN0aW9uKHplcm8peworCQkJcmV0dXJuIHplcm87CisJCX07CisKKwkJcmV0dXJuIGZ1bmN0aW9uKGVsLCBub2Nhc2gsIGRvYyl7CisJCQlpZiAoZWwgJiYgZWwuJGZhbWlseSAmJiBlbC51aWQpIHJldHVybiBlbDsKKwkJCXZhciB0eXBlID0gdHlwZU9mKGVsKTsKKwkJCXJldHVybiAodHlwZXNbdHlwZV0pID8gdHlwZXNbdHlwZV0oZWwsIG5vY2FzaCwgZG9jIHx8IGRvY3VtZW50KSA6IG51bGw7CisJCX07CisKKwl9KSgpCisKK30pOworCitpZiAod2luZG93LiQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCcsIGZ1bmN0aW9uKGVsLCBuYyl7CisJcmV0dXJuIGRvY3VtZW50LmlkKGVsLCBuYywgdGhpcy5kb2N1bWVudCk7Cit9KTsKKworV2luZG93LmltcGxlbWVudCh7CisKKwlnZXREb2N1bWVudDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuZG9jdW1lbnQ7CisJfSwKKworCWdldFdpbmRvdzogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKworW0RvY3VtZW50LCBFbGVtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHsKKworCWdldEVsZW1lbnRzOiBmdW5jdGlvbihleHByZXNzaW9uKXsKKwkJcmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLCBleHByZXNzaW9uLCBuZXcgRWxlbWVudHMpOworCX0sCisKKwlnZXRFbGVtZW50OiBmdW5jdGlvbihleHByZXNzaW9uKXsKKwkJcmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQodGhpcywgZXhwcmVzc2lvbikpOworCX0KKworfSk7CisKKy8vPDEuMmNvbXBhdD4KKworKGZ1bmN0aW9uKHNlYXJjaCwgZmluZCwgbWF0Y2gpeworCisJdGhpcy5TZWxlY3RvcnMgPSB7fTsKKwl2YXIgcHNldWRvcyA9IHRoaXMuU2VsZWN0b3JzLlBzZXVkbyA9IG5ldyBIYXNoKCk7CisKKwl2YXIgYWRkU2xpY2tQc2V1ZG9zID0gZnVuY3Rpb24oKXsKKwkJZm9yICh2YXIgbmFtZSBpbiBwc2V1ZG9zKSBpZiAocHNldWRvcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSl7CisJCQlTbGljay5kZWZpbmVQc2V1ZG8obmFtZSwgcHNldWRvc1tuYW1lXSk7CisJCQlkZWxldGUgcHNldWRvc1tuYW1lXTsKKwkJfQorCX07CisKKwlTbGljay5zZWFyY2ggPSBmdW5jdGlvbihjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQpeworCQlhZGRTbGlja1BzZXVkb3MoKTsKKwkJcmV0dXJuIHNlYXJjaC5jYWxsKHRoaXMsIGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCk7CisJfTsKKworCVNsaWNrLmZpbmQgPSBmdW5jdGlvbihjb250ZXh0LCBleHByZXNzaW9uKXsKKwkJYWRkU2xpY2tQc2V1ZG9zKCk7CisJCXJldHVybiBmaW5kLmNhbGwodGhpcywgY29udGV4dCwgZXhwcmVzc2lvbik7CisJfTsKKworCVNsaWNrLm1hdGNoID0gZnVuY3Rpb24obm9kZSwgc2VsZWN0b3IpeworCQlhZGRTbGlja1BzZXVkb3MoKTsKKwkJcmV0dXJuIG1hdGNoLmNhbGwodGhpcywgbm9kZSwgc2VsZWN0b3IpOworCX07CisKK30pKFNsaWNrLnNlYXJjaCwgU2xpY2suZmluZCwgU2xpY2subWF0Y2gpOworCitpZiAod2luZG93LiQkID09IG51bGwpIFdpbmRvdy5pbXBsZW1lbnQoJyQkJywgZnVuY3Rpb24oc2VsZWN0b3IpeworCXZhciBlbGVtZW50cyA9IG5ldyBFbGVtZW50czsKKwlpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxICYmIHR5cGVvZiBzZWxlY3RvciA9PSAnc3RyaW5nJykgcmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBzZWxlY3RvciwgZWxlbWVudHMpOworCXZhciBhcmdzID0gQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpOworCWZvciAodmFyIGkgPSAwLCBsID0gYXJncy5sZW5ndGg7IGkgPCBsOyBpKyspeworCQl2YXIgaXRlbSA9IGFyZ3NbaV07CisJCXN3aXRjaCAodHlwZU9mKGl0ZW0pKXsKKwkJCWNhc2UgJ2VsZW1lbnQnOiBlbGVtZW50cy5wdXNoKGl0ZW0pOyBicmVhazsKKwkJCWNhc2UgJ3N0cmluZyc6IFNsaWNrLnNlYXJjaCh0aGlzLmRvY3VtZW50LCBpdGVtLCBlbGVtZW50cyk7CisJCX0KKwl9CisJcmV0dXJuIGVsZW1lbnRzOworfSk7CisKKy8vPC8xLjJjb21wYXQ+CisKK2lmICh3aW5kb3cuJCQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCQnLCBmdW5jdGlvbihzZWxlY3Rvcil7CisJaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7CisJCWlmICh0eXBlb2Ygc2VsZWN0b3IgPT0gJ3N0cmluZycpIHJldHVybiBTbGljay5zZWFyY2godGhpcy5kb2N1bWVudCwgc2VsZWN0b3IsIG5ldyBFbGVtZW50cyk7CisJCWVsc2UgaWYgKFR5cGUuaXNFbnVtZXJhYmxlKHNlbGVjdG9yKSkgcmV0dXJuIG5ldyBFbGVtZW50cyhzZWxlY3Rvcik7CisJfQorCXJldHVybiBuZXcgRWxlbWVudHMoYXJndW1lbnRzKTsKK30pOworCisoZnVuY3Rpb24oKXsKKwordmFyIGNvbGxlY3RlZCA9IHt9LCBzdG9yYWdlID0ge307Cit2YXIgZm9ybVByb3BzID0ge2lucHV0OiAnY2hlY2tlZCcsIG9wdGlvbjogJ3NlbGVjdGVkJywgdGV4dGFyZWE6ICd2YWx1ZSd9OworCit2YXIgZ2V0ID0gZnVuY3Rpb24odWlkKXsKKwlyZXR1cm4gKHN0b3JhZ2VbdWlkXSB8fCAoc3RvcmFnZVt1aWRdID0ge30pKTsKK307CisKK3ZhciBjbGVhbiA9IGZ1bmN0aW9uKGl0ZW0peworCXZhciB1aWQgPSBpdGVtLnVpZDsKKwlpZiAoaXRlbS5yZW1vdmVFdmVudHMpIGl0ZW0ucmVtb3ZlRXZlbnRzKCk7CisJaWYgKGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKSBpdGVtLmNsZWFyQXR0cmlidXRlcygpOworCWlmICh1aWQgIT0gbnVsbCl7CisJCWRlbGV0ZSBjb2xsZWN0ZWRbdWlkXTsKKwkJZGVsZXRlIHN0b3JhZ2VbdWlkXTsKKwl9CisJcmV0dXJuIGl0ZW07Cit9OworCit2YXIgY2FtZWxzID0gWydkZWZhdWx0VmFsdWUnLCAnYWNjZXNzS2V5JywgJ2NlbGxQYWRkaW5nJywgJ2NlbGxTcGFjaW5nJywgJ2NvbFNwYW4nLCAnZnJhbWVCb3JkZXInLCAnbWF4TGVuZ3RoJywgJ3JlYWRPbmx5JywKKwkncm93U3BhbicsICd0YWJJbmRleCcsICd1c2VNYXAnCitdOwordmFyIGJvb2xzID0gWydjb21wYWN0JywgJ25vd3JhcCcsICdpc21hcCcsICdkZWNsYXJlJywgJ25vc2hhZGUnLCAnY2hlY2tlZCcsICdkaXNhYmxlZCcsICdyZWFkT25seScsICdtdWx0aXBsZScsICdzZWxlY3RlZCcsCisJJ25vcmVzaXplJywgJ2RlZmVyJywgJ2RlZmF1bHRDaGVja2VkJywgJ2F1dG9mb2N1cycKK107CisgdmFyIGF0dHJpYnV0ZXMgPSB7CisJJ2h0bWwnOiAnaW5uZXJIVE1MJywKKwknY2xhc3MnOiAnY2xhc3NOYW1lJywKKwknZm9yJzogJ2h0bWxGb3InLAorCSd0ZXh0JzogKGZ1bmN0aW9uKCl7CisJCXZhciB0ZW1wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisJCXJldHVybiAodGVtcC50ZXh0Q29udGVudCA9PSBudWxsKSA/ICdpbm5lclRleHQnIDogJ3RleHRDb250ZW50JzsKKwl9KSgpCit9OwordmFyIHJlYWRPbmx5ID0gWyd0eXBlJ107Cit2YXIgZXhwYW5kb3MgPSBbJ3ZhbHVlJywgJ2RlZmF1bHRWYWx1ZSddOwordmFyIHVyaUF0dHJzID0gL14oPzpocmVmfHNyY3x1c2VtYXApJC9pOworCitib29scyA9IGJvb2xzLmFzc29jaWF0ZShib29scyk7CitjYW1lbHMgPSBjYW1lbHMuYXNzb2NpYXRlKGNhbWVscy5tYXAoU3RyaW5nLnRvTG93ZXJDYXNlKSk7CityZWFkT25seSA9IHJlYWRPbmx5LmFzc29jaWF0ZShyZWFkT25seSk7CisKK09iamVjdC5hcHBlbmQoYXR0cmlidXRlcywgZXhwYW5kb3MuYXNzb2NpYXRlKGV4cGFuZG9zKSk7CisKK3ZhciBpbnNlcnRlcnMgPSB7CisKKwliZWZvcmU6IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW1lbnQpeworCQl2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlOworCQlpZiAocGFyZW50KSBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQpOworCX0sCisKKwlhZnRlcjogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7CisJCXZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7CisJCWlmIChwYXJlbnQpIHBhcmVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudC5uZXh0U2libGluZyk7CisJfSwKKworCWJvdHRvbTogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7CisJCWVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGV4dCk7CisJfSwKKworCXRvcDogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7CisJCWVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNvbnRleHQsIGVsZW1lbnQuZmlyc3RDaGlsZCk7CisJfQorCit9OworCitpbnNlcnRlcnMuaW5zaWRlID0gaW5zZXJ0ZXJzLmJvdHRvbTsKKworLy88MS4yY29tcGF0PgorCitPYmplY3QuZWFjaChpbnNlcnRlcnMsIGZ1bmN0aW9uKGluc2VydGVyLCB3aGVyZSl7CisKKwl3aGVyZSA9IHdoZXJlLmNhcGl0YWxpemUoKTsKKworCXZhciBtZXRob2RzID0ge307CisKKwltZXRob2RzWydpbmplY3QnICsgd2hlcmVdID0gZnVuY3Rpb24oZWwpeworCQlpbnNlcnRlcih0aGlzLCBkb2N1bWVudC5pZChlbCwgdHJ1ZSkpOworCQlyZXR1cm4gdGhpczsKKwl9OworCisJbWV0aG9kc1snZ3JhYicgKyB3aGVyZV0gPSBmdW5jdGlvbihlbCl7CisJCWluc2VydGVyKGRvY3VtZW50LmlkKGVsLCB0cnVlKSwgdGhpcyk7CisJCXJldHVybiB0aGlzOworCX07CisKKwlFbGVtZW50LmltcGxlbWVudChtZXRob2RzKTsKKworfSk7CisKKy8vPC8xLjJjb21wYXQ+CisKK3ZhciBpbmplY3RDb21iaW5hdG9yID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgY29tYmluYXRvcil7CisJaWYgKCFleHByZXNzaW9uKSByZXR1cm4gY29tYmluYXRvcjsKKworCWV4cHJlc3Npb24gPSBPYmplY3QuY2xvbmUoU2xpY2sucGFyc2UoZXhwcmVzc2lvbikpOworCisJdmFyIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHByZXNzaW9uczsKKwlmb3IgKHZhciBpID0gZXhwcmVzc2lvbnMubGVuZ3RoOyBpLS07KQorCQlleHByZXNzaW9uc1tpXVswXS5jb21iaW5hdG9yID0gY29tYmluYXRvcjsKKworCXJldHVybiBleHByZXNzaW9uOworfTsKKworRWxlbWVudC5pbXBsZW1lbnQoeworCisJc2V0OiBmdW5jdGlvbihwcm9wLCB2YWx1ZSl7CisJCXZhciBwcm9wZXJ0eSA9IEVsZW1lbnQuUHJvcGVydGllc1twcm9wXTsKKwkJKHByb3BlcnR5ICYmIHByb3BlcnR5LnNldCkgPyBwcm9wZXJ0eS5zZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB0aGlzLnNldFByb3BlcnR5KHByb3AsIHZhbHVlKTsKKwl9Lm92ZXJsb2FkU2V0dGVyKCksCisKKwlnZXQ6IGZ1bmN0aW9uKHByb3ApeworCQl2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07CisJCXJldHVybiAocHJvcGVydHkgJiYgcHJvcGVydHkuZ2V0KSA/IHByb3BlcnR5LmdldC5hcHBseSh0aGlzKSA6IHRoaXMuZ2V0UHJvcGVydHkocHJvcCk7CisJfS5vdmVybG9hZEdldHRlcigpLAorCisJZXJhc2U6IGZ1bmN0aW9uKHByb3ApeworCQl2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07CisJCShwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5lcmFzZSkgPyBwcm9wZXJ0eS5lcmFzZS5hcHBseSh0aGlzKSA6IHRoaXMucmVtb3ZlUHJvcGVydHkocHJvcCk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlzZXRQcm9wZXJ0eTogZnVuY3Rpb24oYXR0cmlidXRlLCB2YWx1ZSl7CisJCWF0dHJpYnV0ZSA9IGNhbWVsc1thdHRyaWJ1dGVdIHx8IGF0dHJpYnV0ZTsKKwkJaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnJlbW92ZVByb3BlcnR5KGF0dHJpYnV0ZSk7CisJCXZhciBrZXkgPSBhdHRyaWJ1dGVzW2F0dHJpYnV0ZV07CisJCShrZXkpID8gdGhpc1trZXldID0gdmFsdWUgOgorCQkJKGJvb2xzW2F0dHJpYnV0ZV0pID8gdGhpc1thdHRyaWJ1dGVdID0gISF2YWx1ZSA6IHRoaXMuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgJycgKyB2YWx1ZSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlzZXRQcm9wZXJ0aWVzOiBmdW5jdGlvbihhdHRyaWJ1dGVzKXsKKwkJZm9yICh2YXIgYXR0cmlidXRlIGluIGF0dHJpYnV0ZXMpIHRoaXMuc2V0UHJvcGVydHkoYXR0cmlidXRlLCBhdHRyaWJ1dGVzW2F0dHJpYnV0ZV0pOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZ2V0UHJvcGVydHk6IGZ1bmN0aW9uKGF0dHJpYnV0ZSl7CisJCWF0dHJpYnV0ZSA9IGNhbWVsc1thdHRyaWJ1dGVdIHx8IGF0dHJpYnV0ZTsKKwkJdmFyIGtleSA9IGF0dHJpYnV0ZXNbYXR0cmlidXRlXSB8fCByZWFkT25seVthdHRyaWJ1dGVdOworCQlyZXR1cm4gKGtleSkgPyB0aGlzW2tleV0gOgorCQkJKGJvb2xzW2F0dHJpYnV0ZV0pID8gISF0aGlzW2F0dHJpYnV0ZV0gOgorCQkJKHVyaUF0dHJzLnRlc3QoYXR0cmlidXRlKSA/IHRoaXMuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgMikgOgorCQkJKGtleSA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZShhdHRyaWJ1dGUpKSA/IGtleS5ub2RlVmFsdWUgOiBudWxsKSB8fCBudWxsOworCX0sCisKKwlnZXRQcm9wZXJ0aWVzOiBmdW5jdGlvbigpeworCQl2YXIgYXJncyA9IEFycmF5LmZyb20oYXJndW1lbnRzKTsKKwkJcmV0dXJuIGFyZ3MubWFwKHRoaXMuZ2V0UHJvcGVydHksIHRoaXMpLmFzc29jaWF0ZShhcmdzKTsKKwl9LAorCisJcmVtb3ZlUHJvcGVydHk6IGZ1bmN0aW9uKGF0dHJpYnV0ZSl7CisJCWF0dHJpYnV0ZSA9IGNhbWVsc1thdHRyaWJ1dGVdIHx8IGF0dHJpYnV0ZTsKKwkJdmFyIGtleSA9IGF0dHJpYnV0ZXNbYXR0cmlidXRlXTsKKwkJKGtleSkgPyB0aGlzW2tleV0gPSAnJyA6CisJCQkoYm9vbHNbYXR0cmlidXRlXSkgPyB0aGlzW2F0dHJpYnV0ZV0gPSBmYWxzZSA6IHRoaXMucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlyZW1vdmVQcm9wZXJ0aWVzOiBmdW5jdGlvbigpeworCQlBcnJheS5lYWNoKGFyZ3VtZW50cywgdGhpcy5yZW1vdmVQcm9wZXJ0eSwgdGhpcyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwloYXNDbGFzczogZnVuY3Rpb24oY2xhc3NOYW1lKXsKKwkJcmV0dXJuIHRoaXMuY2xhc3NOYW1lLmNsZWFuKCkuY29udGFpbnMoY2xhc3NOYW1lLCAnICcpOworCX0sCisKKwlhZGRDbGFzczogZnVuY3Rpb24oY2xhc3NOYW1lKXsKKwkJaWYgKCF0aGlzLmhhc0NsYXNzKGNsYXNzTmFtZSkpIHRoaXMuY2xhc3NOYW1lID0gKHRoaXMuY2xhc3NOYW1lICsgJyAnICsgY2xhc3NOYW1lKS5jbGVhbigpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7CisJCXRoaXMuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWUucmVwbGFjZShuZXcgUmVnRXhwKCcoXnxcXHMpJyArIGNsYXNzTmFtZSArICcoPzpcXHN8JCknKSwgJyQxJyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwl0b2dnbGVDbGFzczogZnVuY3Rpb24oY2xhc3NOYW1lLCBmb3JjZSl7CisJCWlmIChmb3JjZSA9PSBudWxsKSBmb3JjZSA9ICF0aGlzLmhhc0NsYXNzKGNsYXNzTmFtZSk7CisJCXJldHVybiAoZm9yY2UpID8gdGhpcy5hZGRDbGFzcyhjbGFzc05hbWUpIDogdGhpcy5yZW1vdmVDbGFzcyhjbGFzc05hbWUpOworCX0sCisKKwlhZG9wdDogZnVuY3Rpb24oKXsKKwkJdmFyIHBhcmVudCA9IHRoaXMsIGZyYWdtZW50LCBlbGVtZW50cyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSwgbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoOworCQlpZiAobGVuZ3RoID4gMSkgcGFyZW50ID0gZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisKKwkJZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7CisJCQl2YXIgZWxlbWVudCA9IGRvY3VtZW50LmlkKGVsZW1lbnRzW2ldLCB0cnVlKTsKKwkJCWlmIChlbGVtZW50KSBwYXJlbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CisJCX0KKworCQlpZiAoZnJhZ21lbnQpIHRoaXMuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOworCisJCXJldHVybiB0aGlzOworCX0sCisKKwlhcHBlbmRUZXh0OiBmdW5jdGlvbih0ZXh0LCB3aGVyZSl7CisJCXJldHVybiB0aGlzLmdyYWIodGhpcy5nZXREb2N1bWVudCgpLm5ld1RleHROb2RlKHRleHQpLCB3aGVyZSk7CisJfSwKKworCWdyYWI6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7CisJCWluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10oZG9jdW1lbnQuaWQoZWwsIHRydWUpLCB0aGlzKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWluamVjdDogZnVuY3Rpb24oZWwsIHdoZXJlKXsKKwkJaW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXSh0aGlzLCBkb2N1bWVudC5pZChlbCwgdHJ1ZSkpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVwbGFjZXM6IGZ1bmN0aW9uKGVsKXsKKwkJZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7CisJCWVsLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMsIGVsKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXdyYXBzOiBmdW5jdGlvbihlbCwgd2hlcmUpeworCQllbCA9IGRvY3VtZW50LmlkKGVsLCB0cnVlKTsKKwkJcmV0dXJuIHRoaXMucmVwbGFjZXMoZWwpLmdyYWIoZWwsIHdoZXJlKTsKKwl9LAorCisJZ2V0UHJldmlvdXM6IGZ1bmN0aW9uKGV4cHJlc3Npb24peworCQlyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suZmluZCh0aGlzLCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICchficpKSk7CisJfSwKKworCWdldEFsbFByZXZpb3VzOiBmdW5jdGlvbihleHByZXNzaW9uKXsKKwkJcmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICchficpLCBuZXcgRWxlbWVudHMpOworCX0sCisKKwlnZXROZXh0OiBmdW5jdGlvbihleHByZXNzaW9uKXsKKwkJcmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQodGhpcywgaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCAnficpKSk7CisJfSwKKworCWdldEFsbE5leHQ6IGZ1bmN0aW9uKGV4cHJlc3Npb24peworCQlyZXR1cm4gU2xpY2suc2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgJ34nKSwgbmV3IEVsZW1lbnRzKTsKKwl9LAorCisJZ2V0Rmlyc3Q6IGZ1bmN0aW9uKGV4cHJlc3Npb24peworCQlyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suc2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgJz4nKSlbMF0pOworCX0sCisKKwlnZXRMYXN0OiBmdW5jdGlvbihleHByZXNzaW9uKXsKKwkJcmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICc+JykpLmdldExhc3QoKSk7CisJfSwKKworCWdldFBhcmVudDogZnVuY3Rpb24oZXhwcmVzc2lvbil7CisJCXJldHVybiBkb2N1bWVudC5pZChTbGljay5maW5kKHRoaXMsIGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgJyEnKSkpOworCX0sCisKKwlnZXRQYXJlbnRzOiBmdW5jdGlvbihleHByZXNzaW9uKXsKKwkJcmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICchJyksIG5ldyBFbGVtZW50cyk7CisJfSwKKworCWdldFNpYmxpbmdzOiBmdW5jdGlvbihleHByZXNzaW9uKXsKKwkJcmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLCBpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sICd+ficpLCBuZXcgRWxlbWVudHMpOworCX0sCisKKwlnZXRDaGlsZHJlbjogZnVuY3Rpb24oZXhwcmVzc2lvbil7CisJCXJldHVybiBTbGljay5zZWFyY2godGhpcywgaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCAnPicpLCBuZXcgRWxlbWVudHMpOworCX0sCisKKwlnZXRXaW5kb3c6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQud2luZG93OworCX0sCisKKwlnZXREb2N1bWVudDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudDsKKwl9LAorCisJZ2V0RWxlbWVudEJ5SWQ6IGZ1bmN0aW9uKGlkKXsKKwkJcmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQodGhpcywgJyMnICsgKCcnICsgaWQpLnJlcGxhY2UoLyhcVykvZywgJ1xcJDEnKSkpOworCX0sCisKKwlnZXRTZWxlY3RlZDogZnVuY3Rpb24oKXsKKwkJdGhpcy5zZWxlY3RlZEluZGV4OyAvLyBTYWZhcmkgMy4yLjEKKwkJcmV0dXJuIG5ldyBFbGVtZW50cyhBcnJheS5mcm9tKHRoaXMub3B0aW9ucykuZmlsdGVyKGZ1bmN0aW9uKG9wdGlvbil7CisJCQlyZXR1cm4gb3B0aW9uLnNlbGVjdGVkOworCQl9KSk7CisJfSwKKworCXRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKCl7CisJCXZhciBxdWVyeVN0cmluZyA9IFtdOworCQl0aGlzLmdldEVsZW1lbnRzKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpLmVhY2goZnVuY3Rpb24oZWwpeworCQkJdmFyIHR5cGUgPSBlbC50eXBlOworCQkJaWYgKCFlbC5uYW1lIHx8IGVsLmRpc2FibGVkIHx8IHR5cGUgPT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PSAncmVzZXQnIHx8IHR5cGUgPT0gJ2ZpbGUnIHx8IHR5cGUgPT0gJ2ltYWdlJykgcmV0dXJuOworCisJCQl2YXIgdmFsdWUgPSAoZWwuZ2V0KCd0YWcnKSA9PSAnc2VsZWN0JykgPyBlbC5nZXRTZWxlY3RlZCgpLm1hcChmdW5jdGlvbihvcHQpeworCQkJCS8vIElFCisJCQkJcmV0dXJuIGRvY3VtZW50LmlkKG9wdCkuZ2V0KCd2YWx1ZScpOworCQkJfSkgOiAoKHR5cGUgPT0gJ3JhZGlvJyB8fCB0eXBlID09ICdjaGVja2JveCcpICYmICFlbC5jaGVja2VkKSA/IG51bGwgOiBlbC5nZXQoJ3ZhbHVlJyk7CisKKwkJCUFycmF5LmZyb20odmFsdWUpLmVhY2goZnVuY3Rpb24odmFsKXsKKwkJCQlpZiAodHlwZW9mIHZhbCAhPSAndW5kZWZpbmVkJykgcXVlcnlTdHJpbmcucHVzaChlbmNvZGVVUklDb21wb25lbnQoZWwubmFtZSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsKSk7CisJCQl9KTsKKwkJfSk7CisJCXJldHVybiBxdWVyeVN0cmluZy5qb2luKCcmJyk7CisJfSwKKworCWRlc3Ryb3k6IGZ1bmN0aW9uKCl7CisJCXZhciBjaGlsZHJlbiA9IGNsZWFuKHRoaXMpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7CisJCUFycmF5LmVhY2goY2hpbGRyZW4sIGNsZWFuKTsKKwkJRWxlbWVudC5kaXNwb3NlKHRoaXMpOworCQlyZXR1cm4gbnVsbDsKKwl9LAorCisJZW1wdHk6IGZ1bmN0aW9uKCl7CisJCUFycmF5LmZyb20odGhpcy5jaGlsZE5vZGVzKS5lYWNoKEVsZW1lbnQuZGlzcG9zZSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlkaXNwb3NlOiBmdW5jdGlvbigpeworCQlyZXR1cm4gKHRoaXMucGFyZW50Tm9kZSkgPyB0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcykgOiB0aGlzOworCX0sCisKKwltYXRjaDogZnVuY3Rpb24oZXhwcmVzc2lvbil7CisJCXJldHVybiAhZXhwcmVzc2lvbiB8fCBTbGljay5tYXRjaCh0aGlzLCBleHByZXNzaW9uKTsKKwl9CisKK30pOworCit2YXIgY2xlYW5DbG9uZSA9IGZ1bmN0aW9uKG5vZGUsIGVsZW1lbnQsIGtlZXBpZCl7CisJaWYgKCFrZWVwaWQpIG5vZGUuc2V0QXR0cmlidXRlTm9kZShkb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoJ2lkJykpOworCWlmIChub2RlLmNsZWFyQXR0cmlidXRlcyl7CisJCW5vZGUuY2xlYXJBdHRyaWJ1dGVzKCk7CisJCW5vZGUubWVyZ2VBdHRyaWJ1dGVzKGVsZW1lbnQpOworCQlub2RlLnJlbW92ZUF0dHJpYnV0ZSgndWlkJyk7CisJCWlmIChub2RlLm9wdGlvbnMpeworCQkJdmFyIG5vID0gbm9kZS5vcHRpb25zLCBlbyA9IGVsZW1lbnQub3B0aW9uczsKKwkJCWZvciAodmFyIGkgPSBuby5sZW5ndGg7IGktLTspIG5vW2ldLnNlbGVjdGVkID0gZW9baV0uc2VsZWN0ZWQ7CisJCX0KKwl9CisKKwl2YXIgcHJvcCA9IGZvcm1Qcm9wc1tlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKV07CisJaWYgKHByb3AgJiYgZWxlbWVudFtwcm9wXSkgbm9kZVtwcm9wXSA9IGVsZW1lbnRbcHJvcF07Cit9OworCitFbGVtZW50LmltcGxlbWVudCgnY2xvbmUnLCBmdW5jdGlvbihjb250ZW50cywga2VlcGlkKXsKKwljb250ZW50cyA9IGNvbnRlbnRzICE9PSBmYWxzZTsKKwl2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZShjb250ZW50cyksIGk7CisKKwlpZiAoY29udGVudHMpeworCQl2YXIgY2UgPSBjbG9uZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpLCB0ZSA9IHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTsKKwkJZm9yIChpID0gY2UubGVuZ3RoOyBpLS07KSBjbGVhbkNsb25lKGNlW2ldLCB0ZVtpXSwga2VlcGlkKTsKKwl9CisKKwljbGVhbkNsb25lKGNsb25lLCB0aGlzLCBrZWVwaWQpOworCisJaWYgKEJyb3dzZXIuaWUpeworCQl2YXIgY28gPSBjbG9uZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0JyksIHRvID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0Jyk7CisJCWZvciAoaSA9IGNvLmxlbmd0aDsgaS0tOykgY29baV0ub3V0ZXJIVE1MID0gdG9baV0ub3V0ZXJIVE1MOworCX0KKwlyZXR1cm4gZG9jdW1lbnQuaWQoY2xvbmUpOworfSk7CisKK3ZhciBjb250YWlucyA9IHtjb250YWluczogZnVuY3Rpb24oZWxlbWVudCl7CisJcmV0dXJuIFNsaWNrLmNvbnRhaW5zKHRoaXMsIGVsZW1lbnQpOworfX07CisKK2lmICghZG9jdW1lbnQuY29udGFpbnMpIERvY3VtZW50LmltcGxlbWVudChjb250YWlucyk7CitpZiAoIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNvbnRhaW5zKSBFbGVtZW50LmltcGxlbWVudChjb250YWlucyk7CisKKy8vPDEuMmNvbXBhdD4KKworRWxlbWVudC5pbXBsZW1lbnQoJ2hhc0NoaWxkJywgZnVuY3Rpb24oZWxlbWVudCl7CisJcmV0dXJuIHRoaXMgIT09IGVsZW1lbnQgJiYgdGhpcy5jb250YWlucyhlbGVtZW50KTsKK30pOworCisvLzwvMS4yY29tcGF0PgorCitbRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7CisKKwlhZGRMaXN0ZW5lcjogZnVuY3Rpb24odHlwZSwgZm4peworCQlpZiAodHlwZSA9PSAndW5sb2FkJyl7CisJCQl2YXIgb2xkID0gZm4sIHNlbGYgPSB0aGlzOworCQkJZm4gPSBmdW5jdGlvbigpeworCQkJCXNlbGYucmVtb3ZlTGlzdGVuZXIoJ3VubG9hZCcsIGZuKTsKKwkJCQlvbGQoKTsKKwkJCX07CisJCX0gZWxzZSB7CisJCQljb2xsZWN0ZWRbJHVpZCh0aGlzKV0gPSB0aGlzOworCQl9CisJCWlmICh0aGlzLmFkZEV2ZW50TGlzdGVuZXIpIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgISFhcmd1bWVudHNbMl0pOworCQllbHNlIHRoaXMuYXR0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGZuKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXJlbW92ZUxpc3RlbmVyOiBmdW5jdGlvbih0eXBlLCBmbil7CisJCWlmICh0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgISFhcmd1bWVudHNbMl0pOworCQllbHNlIHRoaXMuZGV0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGZuKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXJldHJpZXZlOiBmdW5jdGlvbihwcm9wZXJ0eSwgZGZsdCl7CisJCXZhciBzdG9yYWdlID0gZ2V0KCR1aWQodGhpcykpLCBwcm9wID0gc3RvcmFnZVtwcm9wZXJ0eV07CisJCWlmIChkZmx0ICE9IG51bGwgJiYgcHJvcCA9PSBudWxsKSBwcm9wID0gc3RvcmFnZVtwcm9wZXJ0eV0gPSBkZmx0OworCQlyZXR1cm4gcHJvcCAhPSBudWxsID8gcHJvcCA6IG51bGw7CisJfSwKKworCXN0b3JlOiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFsdWUpeworCQl2YXIgc3RvcmFnZSA9IGdldCgkdWlkKHRoaXMpKTsKKwkJc3RvcmFnZVtwcm9wZXJ0eV0gPSB2YWx1ZTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWVsaW1pbmF0ZTogZnVuY3Rpb24ocHJvcGVydHkpeworCQl2YXIgc3RvcmFnZSA9IGdldCgkdWlkKHRoaXMpKTsKKwkJZGVsZXRlIHN0b3JhZ2VbcHJvcGVydHldOworCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCisvKjxsdElFOT4qLworaWYgKHdpbmRvdy5hdHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpIHdpbmRvdy5hZGRMaXN0ZW5lcigndW5sb2FkJywgZnVuY3Rpb24oKXsKKwlPYmplY3QuZWFjaChjb2xsZWN0ZWQsIGNsZWFuKTsKKwlpZiAod2luZG93LkNvbGxlY3RHYXJiYWdlKSBDb2xsZWN0R2FyYmFnZSgpOworfSk7CisvKjwvbHRJRTk+Ki8KKworfSkoKTsKKworRWxlbWVudC5Qcm9wZXJ0aWVzID0ge307CisKKy8vPDEuMmNvbXBhdD4KKworRWxlbWVudC5Qcm9wZXJ0aWVzID0gbmV3IEhhc2g7CisKKy8vPC8xLjJjb21wYXQ+CisKK0VsZW1lbnQuUHJvcGVydGllcy5zdHlsZSA9IHsKKworCXNldDogZnVuY3Rpb24oc3R5bGUpeworCQl0aGlzLnN0eWxlLmNzc1RleHQgPSBzdHlsZTsKKwl9LAorCisJZ2V0OiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5zdHlsZS5jc3NUZXh0OworCX0sCisKKwllcmFzZTogZnVuY3Rpb24oKXsKKwkJdGhpcy5zdHlsZS5jc3NUZXh0ID0gJyc7CisJfQorCit9OworCitFbGVtZW50LlByb3BlcnRpZXMudGFnID0geworCisJZ2V0OiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7CisJfQorCit9OworCisvKjxsdElFOT4qLworKGZ1bmN0aW9uKG1heExlbmd0aCl7CisJaWYgKG1heExlbmd0aCAhPSBudWxsKSBFbGVtZW50LlByb3BlcnRpZXMubWF4bGVuZ3RoID0gRWxlbWVudC5Qcm9wZXJ0aWVzLm1heExlbmd0aCA9IHsKKwkJZ2V0OiBmdW5jdGlvbigpeworCQkJdmFyIG1heGxlbmd0aCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdtYXhMZW5ndGgnKTsKKwkJCXJldHVybiBtYXhsZW5ndGggPT0gbWF4TGVuZ3RoID8gbnVsbCA6IG1heGxlbmd0aDsKKwkJfQorCX07Cit9KShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpLmdldEF0dHJpYnV0ZSgnbWF4TGVuZ3RoJykpOworLyo8L2x0SUU5PiovCisKKy8qPCF3ZWJraXQ+Ki8KK0VsZW1lbnQuUHJvcGVydGllcy5odG1sID0gKGZ1bmN0aW9uKCl7CisKKwl2YXIgdGFibGVUZXN0ID0gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpeworCQl2YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpOworCQl0YWJsZS5pbm5lckhUTUwgPSAnPHRyPjx0ZD48L3RkPjwvdHI+JzsKKwl9KTsKKworCXZhciB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisKKwl2YXIgdHJhbnNsYXRpb25zID0geworCQl0YWJsZTogWzEsICc8dGFibGU+JywgJzwvdGFibGU+J10sCisJCXNlbGVjdDogWzEsICc8c2VsZWN0PicsICc8L3NlbGVjdD4nXSwKKwkJdGJvZHk6IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAnPC90Ym9keT48L3RhYmxlPiddLAorCQl0cjogWzMsICc8dGFibGU+PHRib2R5Pjx0cj4nLCAnPC90cj48L3Rib2R5PjwvdGFibGU+J10KKwl9OworCXRyYW5zbGF0aW9ucy50aGVhZCA9IHRyYW5zbGF0aW9ucy50Zm9vdCA9IHRyYW5zbGF0aW9ucy50Ym9keTsKKworCXZhciBodG1sID0geworCQlzZXQ6IGZ1bmN0aW9uKCl7CisJCQl2YXIgaHRtbCA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5qb2luKCcnKTsKKwkJCXZhciB3cmFwID0gKCF0YWJsZVRlc3QgJiYgdHJhbnNsYXRpb25zW3RoaXMuZ2V0KCd0YWcnKV0pOworCQkJaWYgKHdyYXApeworCQkJCXZhciBmaXJzdCA9IHdyYXBwZXI7CisJCQkJZmlyc3QuaW5uZXJIVE1MID0gd3JhcFsxXSArIGh0bWwgKyB3cmFwWzJdOworCQkJCWZvciAodmFyIGkgPSB3cmFwWzBdOyBpLS07KSBmaXJzdCA9IGZpcnN0LmZpcnN0Q2hpbGQ7CisJCQkJdGhpcy5lbXB0eSgpLmFkb3B0KGZpcnN0LmNoaWxkTm9kZXMpOworCQkJfSBlbHNlIHsKKwkJCQl0aGlzLmlubmVySFRNTCA9IGh0bWw7CisJCQl9CisJCX0KKwl9OworCisJaHRtbC5lcmFzZSA9IGh0bWwuc2V0OworCisJcmV0dXJuIGh0bWw7Cit9KSgpOworLyo8LyF3ZWJraXQ+Ki8KKworCisvKgorLS0tCisKK25hbWU6IEVsZW1lbnQuU3R5bGUKKworZGVzY3JpcHRpb246IENvbnRhaW5zIG1ldGhvZHMgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIHN0eWxlcyBvZiBFbGVtZW50cyBpbiBhIGZhc2hpb25hYmxlIHdheS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuCisKK3JlcXVpcmVzOiBFbGVtZW50CisKK3Byb3ZpZGVzOiBFbGVtZW50LlN0eWxlCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK3ZhciBodG1sID0gZG9jdW1lbnQuaHRtbDsKKworRWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlcyA9IHtzZXQ6IGZ1bmN0aW9uKHN0eWxlcyl7CisJdGhpcy5zZXRTdHlsZXMoc3R5bGVzKTsKK319OworCit2YXIgaGFzT3BhY2l0eSA9IChodG1sLnN0eWxlLm9wYWNpdHkgIT0gbnVsbCk7Cit2YXIgcmVBbHBoYSA9IC9hbHBoYVwob3BhY2l0eT0oW1xkLl0rKVwpL2k7CisKK3ZhciBzZXRPcGFjaXR5ID0gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7CisJaWYgKCFlbGVtZW50LmN1cnJlbnRTdHlsZSB8fCAhZWxlbWVudC5jdXJyZW50U3R5bGUuaGFzTGF5b3V0KSBlbGVtZW50LnN0eWxlLnpvb20gPSAxOworCWlmIChoYXNPcGFjaXR5KXsKKwkJZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gb3BhY2l0eTsKKwl9IGVsc2UgeworCQlvcGFjaXR5ID0gKG9wYWNpdHkgKiAxMDApLmxpbWl0KDAsIDEwMCkucm91bmQoKTsKKwkJb3BhY2l0eSA9IChvcGFjaXR5ID09IDEwMCkgPyAnJyA6ICdhbHBoYShvcGFjaXR5PScgKyBvcGFjaXR5ICsgJyknOworCQl2YXIgZmlsdGVyID0gZWxlbWVudC5zdHlsZS5maWx0ZXIgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdmaWx0ZXInKSB8fCAnJzsKKwkJZWxlbWVudC5zdHlsZS5maWx0ZXIgPSByZUFscGhhLnRlc3QoZmlsdGVyKSA/IGZpbHRlci5yZXBsYWNlKHJlQWxwaGEsIG9wYWNpdHkpIDogZmlsdGVyICsgb3BhY2l0eTsKKwl9Cit9OworCitFbGVtZW50LlByb3BlcnRpZXMub3BhY2l0eSA9IHsKKworCXNldDogZnVuY3Rpb24ob3BhY2l0eSl7CisJCXZhciB2aXNpYmlsaXR5ID0gdGhpcy5zdHlsZS52aXNpYmlsaXR5OworCQlpZiAob3BhY2l0eSA9PSAwICYmIHZpc2liaWxpdHkgIT0gJ2hpZGRlbicpIHRoaXMuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOworCQllbHNlIGlmIChvcGFjaXR5ICE9IDAgJiYgdmlzaWJpbGl0eSAhPSAndmlzaWJsZScpIHRoaXMuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsKKworCQlzZXRPcGFjaXR5KHRoaXMsIG9wYWNpdHkpOworCX0sCisKKwlnZXQ6IChoYXNPcGFjaXR5KSA/IGZ1bmN0aW9uKCl7CisJCXZhciBvcGFjaXR5ID0gdGhpcy5zdHlsZS5vcGFjaXR5IHx8IHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZSgnb3BhY2l0eScpOworCQlyZXR1cm4gKG9wYWNpdHkgPT0gJycpID8gMSA6IG9wYWNpdHk7CisJfSA6IGZ1bmN0aW9uKCl7CisJCXZhciBvcGFjaXR5LCBmaWx0ZXIgPSAodGhpcy5zdHlsZS5maWx0ZXIgfHwgdGhpcy5nZXRDb21wdXRlZFN0eWxlKCdmaWx0ZXInKSk7CisJCWlmIChmaWx0ZXIpIG9wYWNpdHkgPSBmaWx0ZXIubWF0Y2gocmVBbHBoYSk7CisJCXJldHVybiAob3BhY2l0eSA9PSBudWxsIHx8IGZpbHRlciA9PSBudWxsKSA/IDEgOiAob3BhY2l0eVsxXSAvIDEwMCk7CisJfQorCit9OworCit2YXIgZmxvYXROYW1lID0gKGh0bWwuc3R5bGUuY3NzRmxvYXQgPT0gbnVsbCkgPyAnc3R5bGVGbG9hdCcgOiAnY3NzRmxvYXQnOworCitFbGVtZW50LmltcGxlbWVudCh7CisKKwlnZXRDb21wdXRlZFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7CisJCWlmICh0aGlzLmN1cnJlbnRTdHlsZSkgcmV0dXJuIHRoaXMuY3VycmVudFN0eWxlW3Byb3BlcnR5LmNhbWVsQ2FzZSgpXTsKKwkJdmFyIGRlZmF1bHRWaWV3ID0gRWxlbWVudC5nZXREb2N1bWVudCh0aGlzKS5kZWZhdWx0VmlldywKKwkJCWNvbXB1dGVkID0gZGVmYXVsdFZpZXcgPyBkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMsIG51bGwpIDogbnVsbDsKKwkJcmV0dXJuIChjb21wdXRlZCkgPyBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKChwcm9wZXJ0eSA9PSBmbG9hdE5hbWUpID8gJ2Zsb2F0JyA6IHByb3BlcnR5Lmh5cGhlbmF0ZSgpKSA6IG51bGw7CisJfSwKKworCXNldE9wYWNpdHk6IGZ1bmN0aW9uKHZhbHVlKXsKKwkJc2V0T3BhY2l0eSh0aGlzLCB2YWx1ZSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXRPcGFjaXR5OiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5nZXQoJ29wYWNpdHknKTsKKwl9LAorCisJc2V0U3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7CisJCXN3aXRjaCAocHJvcGVydHkpeworCQkJY2FzZSAnb3BhY2l0eSc6IHJldHVybiB0aGlzLnNldCgnb3BhY2l0eScsIHBhcnNlRmxvYXQodmFsdWUpKTsKKwkJCWNhc2UgJ2Zsb2F0JzogcHJvcGVydHkgPSBmbG9hdE5hbWU7CisJCX0KKwkJcHJvcGVydHkgPSBwcm9wZXJ0eS5jYW1lbENhc2UoKTsKKwkJaWYgKHR5cGVPZih2YWx1ZSkgIT0gJ3N0cmluZycpeworCQkJdmFyIG1hcCA9IChFbGVtZW50LlN0eWxlc1twcm9wZXJ0eV0gfHwgJ0AnKS5zcGxpdCgnICcpOworCQkJdmFsdWUgPSBBcnJheS5mcm9tKHZhbHVlKS5tYXAoZnVuY3Rpb24odmFsLCBpKXsKKwkJCQlpZiAoIW1hcFtpXSkgcmV0dXJuICcnOworCQkJCXJldHVybiAodHlwZU9mKHZhbCkgPT0gJ251bWJlcicpID8gbWFwW2ldLnJlcGxhY2UoJ0AnLCBNYXRoLnJvdW5kKHZhbCkpIDogdmFsOworCQkJfSkuam9pbignICcpOworCQl9IGVsc2UgaWYgKHZhbHVlID09IFN0cmluZyhOdW1iZXIodmFsdWUpKSl7CisJCQl2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpOworCQl9CisJCWlmICgocHJvcGVydHkgPT09ICd3aWR0aCcgfHwgcHJvcGVydHkgPT09ICdoZWlnaHQnKSAmJiB2YWx1ZS50b1N0cmluZygpLmluZGV4T2YoJy0nKSA+PSAwKQorCQl7CisJCQkvLyBbaV9hXSBkb24ndCBzZXQgYSBuZWdhdGl2ZSB3aWR0aCBvciBoZWlnaHQ6IE1TSUU2IGNyb2FrcyEKKwkJCXRoaXMuc3R5bGVbcHJvcGVydHldID0gJzBweCc7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQllbHNlIGlmIChwcm9wZXJ0eSA9PT0gJ3pJbmRleCcgJiYgdmFsdWUgPT09ICdhdXRvJykKKwkJeworCQkJLy8gW2lfYV0gTVNJRTYgY3JvYWtzIG9uIHRoaXMgb25lOyBzZXQgdG8gbmlsIGluc3RlYWQKKwkJCXRoaXMuc3R5bGVbcHJvcGVydHldID0gJyc7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQl0aGlzLnN0eWxlW3Byb3BlcnR5XSA9IHZhbHVlOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZ2V0U3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5KXsKKwkJc3dpdGNoIChwcm9wZXJ0eSl7CisJCQljYXNlICdvcGFjaXR5JzogcmV0dXJuIHRoaXMuZ2V0KCdvcGFjaXR5Jyk7CisJCQljYXNlICdmbG9hdCc6IHByb3BlcnR5ID0gZmxvYXROYW1lOworCQl9CisJCXByb3BlcnR5ID0gcHJvcGVydHkuY2FtZWxDYXNlKCk7CisJCXZhciByZXN1bHQgPSB0aGlzLnN0eWxlW3Byb3BlcnR5XTsKKwkJaWYgKCFyZXN1bHQgfHwgcHJvcGVydHkgPT0gJ3pJbmRleCcpeworCQkJcmVzdWx0ID0gW107CisJCQlmb3IgKHZhciBzdHlsZSBpbiBFbGVtZW50LlNob3J0U3R5bGVzKXsKKwkJCQlpZiAocHJvcGVydHkgIT0gc3R5bGUpIGNvbnRpbnVlOworCQkJCWZvciAodmFyIHMgaW4gRWxlbWVudC5TaG9ydFN0eWxlc1tzdHlsZV0pIHJlc3VsdC5wdXNoKHRoaXMuZ2V0U3R5bGUocykpOworCQkJCXJldHVybiByZXN1bHQuam9pbignICcpOworCQkJfQorCQkJcmVzdWx0ID0gdGhpcy5nZXRDb21wdXRlZFN0eWxlKHByb3BlcnR5KTsKKwkJfQorCQlpZiAocmVzdWx0KXsKKwkJCXJlc3VsdCA9IFN0cmluZyhyZXN1bHQpOworCQkJdmFyIGNvbG9yID0gcmVzdWx0Lm1hdGNoKC9yZ2JhP1woW1xkXHMsXStcKS8pOworCQkJaWYgKGNvbG9yKSByZXN1bHQgPSByZXN1bHQucmVwbGFjZShjb2xvclswXSwgY29sb3JbMF0ucmdiVG9IZXgoKSk7CisJCX0KKwkJaWYgKEJyb3dzZXIub3BlcmEgfHwgKEJyb3dzZXIuaWUgJiYgaXNOYU4ocGFyc2VGbG9hdChyZXN1bHQpKSkpeworCQkJaWYgKCgvXihoZWlnaHR8d2lkdGgpJC8pLnRlc3QocHJvcGVydHkpKXsKKwkJCQl2YXIgdmFsdWVzID0gKHByb3BlcnR5ID09ICd3aWR0aCcpID8gWydsZWZ0JywgJ3JpZ2h0J10gOiBbJ3RvcCcsICdib3R0b20nXSwgc2l6ZSA9IDA7CisJCQkJdmFsdWVzLmVhY2goZnVuY3Rpb24odmFsdWUpeworCQkJCQlzaXplICs9IHRoaXMuZ2V0U3R5bGUoJ2JvcmRlci0nICsgdmFsdWUgKyAnLXdpZHRoJykudG9JbnQoKSArIHRoaXMuZ2V0U3R5bGUoJ3BhZGRpbmctJyArIHZhbHVlKS50b0ludCgpOworCQkJCX0sIHRoaXMpOworCQkJCXJldHVybiB0aGlzWydvZmZzZXQnICsgcHJvcGVydHkuY2FwaXRhbGl6ZSgpXSAtIHNpemUgKyAncHgnOworCQkJfQorCQkJaWYgKEJyb3dzZXIub3BlcmEgJiYgU3RyaW5nKHJlc3VsdCkuaW5kZXhPZigncHgnKSAhPSAtMSkgcmV0dXJuIHJlc3VsdDsKKwkJCWlmICgoL15ib3JkZXIoLispV2lkdGh8bWFyZ2lufHBhZGRpbmcvKS50ZXN0KHByb3BlcnR5KSkgcmV0dXJuICcwcHgnOworCQl9CisJCXJldHVybiByZXN1bHQ7CisJfSwKKworCXNldFN0eWxlczogZnVuY3Rpb24oc3R5bGVzKXsKKwkJZm9yICh2YXIgc3R5bGUgaW4gc3R5bGVzKSB0aGlzLnNldFN0eWxlKHN0eWxlLCBzdHlsZXNbc3R5bGVdKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWdldFN0eWxlczogZnVuY3Rpb24oKXsKKwkJdmFyIHJlc3VsdCA9IHt9OworCQlBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykuZWFjaChmdW5jdGlvbihrZXkpeworCQkJcmVzdWx0W2tleV0gPSB0aGlzLmdldFN0eWxlKGtleSk7CisJCX0sIHRoaXMpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworfSk7CisKK0VsZW1lbnQuU3R5bGVzID0geworCWxlZnQ6ICdAcHgnLCB0b3A6ICdAcHgnLCBib3R0b206ICdAcHgnLCByaWdodDogJ0BweCcsCisJd2lkdGg6ICdAcHgnLCBoZWlnaHQ6ICdAcHgnLCBtYXhXaWR0aDogJ0BweCcsIG1heEhlaWdodDogJ0BweCcsIG1pbldpZHRoOiAnQHB4JywgbWluSGVpZ2h0OiAnQHB4JywKKwliYWNrZ3JvdW5kQ29sb3I6ICdyZ2IoQCwgQCwgQCknLCBiYWNrZ3JvdW5kUG9zaXRpb246ICdAcHggQHB4JywgY29sb3I6ICdyZ2IoQCwgQCwgQCknLAorCWZvbnRTaXplOiAnQHB4JywgbGV0dGVyU3BhY2luZzogJ0BweCcsIGxpbmVIZWlnaHQ6ICdAcHgnLCBjbGlwOiAncmVjdChAcHggQHB4IEBweCBAcHgpJywKKwltYXJnaW46ICdAcHggQHB4IEBweCBAcHgnLCBwYWRkaW5nOiAnQHB4IEBweCBAcHggQHB4JywgYm9yZGVyOiAnQHB4IEAgcmdiKEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwgQCwgQCknLAorCWJvcmRlcldpZHRoOiAnQHB4IEBweCBAcHggQHB4JywgYm9yZGVyU3R5bGU6ICdAIEAgQCBAJywgYm9yZGVyQ29sb3I6ICdyZ2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKSByZ2IoQCwgQCwgQCknLAorCXpJbmRleDogJ0AnLCAnem9vbSc6ICdAJywgZm9udFdlaWdodDogJ0AnLCB0ZXh0SW5kZW50OiAnQHB4Jywgb3BhY2l0eTogJ0AnCit9OworCisvLzwxLjJjb21wYXQ+CisKK0VsZW1lbnQuU3R5bGVzID0gbmV3IEhhc2goRWxlbWVudC5TdHlsZXMpOworCisvLzwvMS4yY29tcGF0PgorCitFbGVtZW50LlNob3J0U3R5bGVzID0ge21hcmdpbjoge30sIHBhZGRpbmc6IHt9LCBib3JkZXI6IHt9LCBib3JkZXJXaWR0aDoge30sIGJvcmRlclN0eWxlOiB7fSwgYm9yZGVyQ29sb3I6IHt9fTsKKworWydUb3AnLCAnUmlnaHQnLCAnQm90dG9tJywgJ0xlZnQnXS5lYWNoKGZ1bmN0aW9uKGRpcmVjdGlvbil7CisJdmFyIFNob3J0ID0gRWxlbWVudC5TaG9ydFN0eWxlczsKKwl2YXIgQWxsID0gRWxlbWVudC5TdHlsZXM7CisJWydtYXJnaW4nLCAncGFkZGluZyddLmVhY2goZnVuY3Rpb24oc3R5bGUpeworCQl2YXIgc2QgPSBzdHlsZSArIGRpcmVjdGlvbjsKKwkJU2hvcnRbc3R5bGVdW3NkXSA9IEFsbFtzZF0gPSAnQHB4JzsKKwl9KTsKKwl2YXIgYmQgPSAnYm9yZGVyJyArIGRpcmVjdGlvbjsKKwlTaG9ydC5ib3JkZXJbYmRdID0gQWxsW2JkXSA9ICdAcHggQCByZ2IoQCwgQCwgQCknOworCXZhciBiZHcgPSBiZCArICdXaWR0aCcsIGJkcyA9IGJkICsgJ1N0eWxlJywgYmRjID0gYmQgKyAnQ29sb3InOworCVNob3J0W2JkXSA9IHt9OworCVNob3J0LmJvcmRlcldpZHRoW2Jkd10gPSBTaG9ydFtiZF1bYmR3XSA9IEFsbFtiZHddID0gJ0BweCc7CisJU2hvcnQuYm9yZGVyU3R5bGVbYmRzXSA9IFNob3J0W2JkXVtiZHNdID0gQWxsW2Jkc10gPSAnQCc7CisJU2hvcnQuYm9yZGVyQ29sb3JbYmRjXSA9IFNob3J0W2JkXVtiZGNdID0gQWxsW2JkY10gPSAncmdiKEAsIEAsIEApJzsKK30pOworCit9KSgpOworCisKKy8qCistLS0KKworbmFtZTogRWxlbWVudC5FdmVudAorCitkZXNjcmlwdGlvbjogQ29udGFpbnMgRWxlbWVudCBtZXRob2RzIGZvciBkZWFsaW5nIHdpdGggZXZlbnRzLiBUaGlzIGZpbGUgYWxzbyBpbmNsdWRlcyBtb3VzZWVudGVyIGFuZCBtb3VzZWxlYXZlIGN1c3RvbSBFbGVtZW50IEV2ZW50cy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuCisKK3JlcXVpcmVzOiBbRWxlbWVudCwgRXZlbnRdCisKK3Byb3ZpZGVzOiBFbGVtZW50LkV2ZW50CisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK0VsZW1lbnQuUHJvcGVydGllcy5ldmVudHMgPSB7c2V0OiBmdW5jdGlvbihldmVudHMpeworCXRoaXMuYWRkRXZlbnRzKGV2ZW50cyk7Cit9fTsKKworW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1wbGVtZW50JywgeworCisJYWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXsKKwkJdmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycsIHt9KTsKKwkJaWYgKCFldmVudHNbdHlwZV0pIGV2ZW50c1t0eXBlXSA9IHtrZXlzOiBbXSwgdmFsdWVzOiBbXX07CisJCWlmIChldmVudHNbdHlwZV0ua2V5cy5jb250YWlucyhmbikpIHJldHVybiB0aGlzOworCQlldmVudHNbdHlwZV0ua2V5cy5wdXNoKGZuKTsKKwkJdmFyIHJlYWxUeXBlID0gdHlwZSwKKwkJCWN1c3RvbSA9IEVsZW1lbnQuRXZlbnRzW3R5cGVdLAorCQkJY29uZGl0aW9uID0gZm4sCisJCQlzZWxmID0gdGhpczsKKwkJaWYgKGN1c3RvbSl7CisJCQlpZiAoY3VzdG9tLm9uQWRkKSBjdXN0b20ub25BZGQuY2FsbCh0aGlzLCBmbik7CisJCQlpZiAoY3VzdG9tLmNvbmRpdGlvbil7CisJCQkJY29uZGl0aW9uID0gZnVuY3Rpb24oZXZlbnQpeworCQkJCQlpZiAoY3VzdG9tLmNvbmRpdGlvbi5jYWxsKHRoaXMsIGV2ZW50KSkgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQpOworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9OworCQkJfQorCQkJcmVhbFR5cGUgPSBjdXN0b20uYmFzZSB8fCByZWFsVHlwZTsKKwkJfQorCQl2YXIgZGVmbiA9IGZ1bmN0aW9uKCl7CisJCQlyZXR1cm4gZm4uY2FsbChzZWxmKTsKKwkJfTsKKwkJdmFyIG5hdGl2ZUV2ZW50ID0gRWxlbWVudC5OYXRpdmVFdmVudHNbcmVhbFR5cGVdOworCQlpZiAobmF0aXZlRXZlbnQpeworCQkJaWYgKG5hdGl2ZUV2ZW50ID09IDIpeworCQkJCWRlZm4gPSBmdW5jdGlvbihldmVudCl7CisJCQkJCWV2ZW50ID0gbmV3IEV2ZW50KGV2ZW50LCBzZWxmLmdldFdpbmRvdygpKTsKKwkJCQkJaWYgKGNvbmRpdGlvbi5jYWxsKHNlbGYsIGV2ZW50KSA9PT0gZmFsc2UpIGV2ZW50LnN0b3AoKTsKKwkJCQl9OworCQkJfQorCQkJdGhpcy5hZGRMaXN0ZW5lcihyZWFsVHlwZSwgZGVmbiwgYXJndW1lbnRzWzJdKTsKKwkJfQorCQlldmVudHNbdHlwZV0udmFsdWVzLnB1c2goZGVmbik7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlyZW1vdmVFdmVudDogZnVuY3Rpb24odHlwZSwgZm4peworCQl2YXIgZXZlbnRzID0gdGhpcy5yZXRyaWV2ZSgnZXZlbnRzJyk7CisJCWlmICghZXZlbnRzIHx8ICFldmVudHNbdHlwZV0pIHJldHVybiB0aGlzOworCQl2YXIgbGlzdCA9IGV2ZW50c1t0eXBlXTsKKwkJdmFyIGluZGV4ID0gbGlzdC5rZXlzLmluZGV4T2YoZm4pOworCQlpZiAoaW5kZXggPT0gLTEpIHJldHVybiB0aGlzOworCQl2YXIgdmFsdWUgPSBsaXN0LnZhbHVlc1tpbmRleF07CisJCWRlbGV0ZSBsaXN0LmtleXNbaW5kZXhdOworCQlkZWxldGUgbGlzdC52YWx1ZXNbaW5kZXhdOworCQl2YXIgY3VzdG9tID0gRWxlbWVudC5FdmVudHNbdHlwZV07CisJCWlmIChjdXN0b20peworCQkJaWYgKGN1c3RvbS5vblJlbW92ZSkgY3VzdG9tLm9uUmVtb3ZlLmNhbGwodGhpcywgZm4pOworCQkJdHlwZSA9IGN1c3RvbS5iYXNlIHx8IHR5cGU7CisJCX0KKwkJcmV0dXJuIChFbGVtZW50Lk5hdGl2ZUV2ZW50c1t0eXBlXSkgPyB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIHZhbHVlLCBhcmd1bWVudHNbMl0pIDogdGhpczsKKwl9LAorCisJYWRkRXZlbnRzOiBmdW5jdGlvbihldmVudHMpeworCQlmb3IgKHZhciBldmVudCBpbiBldmVudHMpIHRoaXMuYWRkRXZlbnQoZXZlbnQsIGV2ZW50c1tldmVudF0pOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbihldmVudHMpeworCQl2YXIgdHlwZTsKKwkJaWYgKHR5cGVPZihldmVudHMpID09ICdvYmplY3QnKXsKKwkJCWZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZXZlbnRzW3R5cGVdKTsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCXZhciBhdHRhY2hlZCA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycpOworCQlpZiAoIWF0dGFjaGVkKSByZXR1cm4gdGhpczsKKwkJaWYgKCFldmVudHMpeworCQkJZm9yICh0eXBlIGluIGF0dGFjaGVkKSB0aGlzLnJlbW92ZUV2ZW50cyh0eXBlKTsKKwkJCXRoaXMuZWxpbWluYXRlKCdldmVudHMnKTsKKwkJfSBlbHNlIGlmIChhdHRhY2hlZFtldmVudHNdKXsKKwkJCWF0dGFjaGVkW2V2ZW50c10ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXsKKwkJCQl0aGlzLnJlbW92ZUV2ZW50KGV2ZW50cywgZm4pOworCQkJfSwgdGhpcyk7CisJCQlkZWxldGUgYXR0YWNoZWRbZXZlbnRzXTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZmlyZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBhcmdzLCBkZWxheSl7CisJCXZhciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTsKKwkJaWYgKCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7CisJCWFyZ3MgPSBBcnJheS5mcm9tKGFyZ3MpOworCisJCWV2ZW50c1t0eXBlXS5rZXlzLmVhY2goZnVuY3Rpb24oZm4peworCQkJaWYgKGRlbGF5KSBmbi5kZWxheShkZWxheSwgdGhpcywgYXJncyk7CisJCQllbHNlIGZuLmFwcGx5KHRoaXMsIGFyZ3MpOworCQl9LCB0aGlzKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWNsb25lRXZlbnRzOiBmdW5jdGlvbihmcm9tLCB0eXBlKXsKKwkJZnJvbSA9IGRvY3VtZW50LmlkKGZyb20pOworCQl2YXIgZXZlbnRzID0gZnJvbS5yZXRyaWV2ZSgnZXZlbnRzJyk7CisJCWlmICghZXZlbnRzKSByZXR1cm4gdGhpczsKKwkJaWYgKCF0eXBlKXsKKwkJCWZvciAodmFyIGV2ZW50VHlwZSBpbiBldmVudHMpIHRoaXMuY2xvbmVFdmVudHMoZnJvbSwgZXZlbnRUeXBlKTsKKwkJfSBlbHNlIGlmIChldmVudHNbdHlwZV0peworCQkJZXZlbnRzW3R5cGVdLmtleXMuZWFjaChmdW5jdGlvbihmbil7CisJCQkJdGhpcy5hZGRFdmVudCh0eXBlLCBmbik7CisJCQl9LCB0aGlzKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCitFbGVtZW50Lk5hdGl2ZUV2ZW50cyA9IHsKKwljbGljazogMiwgZGJsY2xpY2s6IDIsIG1vdXNldXA6IDIsIG1vdXNlZG93bjogMiwgY29udGV4dG1lbnU6IDIsIC8vbW91c2UgYnV0dG9ucworCW1vdXNld2hlZWw6IDIsIERPTU1vdXNlU2Nyb2xsOiAyLCAvL21vdXNlIHdoZWVsCisJbW91c2VvdmVyOiAyLCBtb3VzZW91dDogMiwgbW91c2Vtb3ZlOiAyLCBzZWxlY3RzdGFydDogMiwgc2VsZWN0ZW5kOiAyLCAvL21vdXNlIG1vdmVtZW50CisJa2V5ZG93bjogMiwga2V5cHJlc3M6IDIsIGtleXVwOiAyLCAvL2tleWJvYXJkCisJb3JpZW50YXRpb25jaGFuZ2U6IDIsIC8vIG1vYmlsZQorCXRvdWNoc3RhcnQ6IDIsIHRvdWNobW92ZTogMiwgdG91Y2hlbmQ6IDIsIHRvdWNoY2FuY2VsOiAyLCAvLyB0b3VjaAorCWdlc3R1cmVzdGFydDogMiwgZ2VzdHVyZWNoYW5nZTogMiwgZ2VzdHVyZWVuZDogMiwgLy8gZ2VzdHVyZQorCWZvY3VzOiAyLCBibHVyOiAyLCBjaGFuZ2U6IDIsIHJlc2V0OiAyLCBzZWxlY3Q6IDIsIHN1Ym1pdDogMiwgLy9mb3JtIGVsZW1lbnRzCisJbG9hZDogMiwgdW5sb2FkOiAxLCBiZWZvcmV1bmxvYWQ6IDIsIHJlc2l6ZTogMSwgbW92ZTogMSwgRE9NQ29udGVudExvYWRlZDogMSwgcmVhZHlzdGF0ZWNoYW5nZTogMSwgLy93aW5kb3cKKwllcnJvcjogMSwgYWJvcnQ6IDEsIHNjcm9sbDogMSAvL21pc2MKK307CisKK3ZhciBjaGVjayA9IGZ1bmN0aW9uKGV2ZW50KXsKKwl2YXIgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7CisJaWYgKHJlbGF0ZWQgPT0gbnVsbCkgcmV0dXJuIHRydWU7CisJaWYgKCFyZWxhdGVkKSByZXR1cm4gZmFsc2U7CisJcmV0dXJuIChyZWxhdGVkICE9IHRoaXMgJiYgcmVsYXRlZC5wcmVmaXggIT0gJ3h1bCcgJiYgdHlwZU9mKHRoaXMpICE9ICdkb2N1bWVudCcgJiYgIXRoaXMuY29udGFpbnMocmVsYXRlZCkpOworfTsKKworRWxlbWVudC5FdmVudHMgPSB7CisKKwltb3VzZWVudGVyOiB7CisJCWJhc2U6ICdtb3VzZW92ZXInLAorCQljb25kaXRpb246IGNoZWNrCisJfSwKKworCW1vdXNlbGVhdmU6IHsKKwkJYmFzZTogJ21vdXNlb3V0JywKKwkJY29uZGl0aW9uOiBjaGVjaworCX0sCisKKwltb3VzZXdoZWVsOiB7CisJCWJhc2U6IChCcm93c2VyLmZpcmVmb3gpID8gJ0RPTU1vdXNlU2Nyb2xsJyA6ICdtb3VzZXdoZWVsJworCX0KKworfTsKKworLy88MS4yY29tcGF0PgorCitFbGVtZW50LkV2ZW50cyA9IG5ldyBIYXNoKEVsZW1lbnQuRXZlbnRzKTsKKworLy88LzEuMmNvbXBhdD4KKworfSkoKTsKKworCisvKgorLS0tCisKK25hbWU6IEVsZW1lbnQuRGltZW5zaW9ucworCitkZXNjcmlwdGlvbjogQ29udGFpbnMgbWV0aG9kcyB0byB3b3JrIHdpdGggc2l6ZSwgc2Nyb2xsLCBvciBwb3NpdGlvbmluZyBvZiBFbGVtZW50cyBhbmQgdGhlIHdpbmRvdyBvYmplY3QuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCitjcmVkaXRzOgorICAtIEVsZW1lbnQgcG9zaXRpb25pbmcgYmFzZWQgb24gdGhlIFtxb294ZG9vXShodHRwOi8vcW9veGRvby5vcmcvKSBjb2RlIGFuZCBzbWFydCBicm93c2VyIGZpeGVzLCBbTEdQTCBMaWNlbnNlXShodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sKS4KKyAgLSBWaWV3cG9ydCBkaW1lbnNpb25zIGJhc2VkIG9uIFtZVUldKGh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3l1aS8pIGNvZGUsIFtCU0QgTGljZW5zZV0oaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpL2xpY2Vuc2UuaHRtbCkuCisKK3JlcXVpcmVzOiBbRWxlbWVudCwgRWxlbWVudC5TdHlsZV0KKworcHJvdmlkZXM6IFtFbGVtZW50LkRpbWVuc2lvbnNdCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK3ZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksCisJY2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKK2VsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJzAnOworZWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Cit2YXIgYnJva2VuT2Zmc2V0UGFyZW50ID0gKGNoaWxkLm9mZnNldFBhcmVudCA9PT0gZWxlbWVudCk7CitlbGVtZW50ID0gY2hpbGQgPSBudWxsOworCit2YXIgaXNPZmZzZXQgPSBmdW5jdGlvbihlbCl7CisJcmV0dXJuIHN0eWxlU3RyaW5nKGVsLCAncG9zaXRpb24nKSAhPSAnc3RhdGljJyB8fCBpc0JvZHkoZWwpOworfTsKKwordmFyIGlzT2Zmc2V0U3RhdGljID0gZnVuY3Rpb24oZWwpeworCXJldHVybiBpc09mZnNldChlbCkgfHwgKC9eKD86dGFibGV8dGR8dGgpJC9pKS50ZXN0KGVsLnRhZ05hbWUpOworfTsKKworRWxlbWVudC5pbXBsZW1lbnQoeworCisJc2Nyb2xsVG86IGZ1bmN0aW9uKHgsIHkpeworCQlpZiAoaXNCb2R5KHRoaXMpKXsKKwkJCXRoaXMuZ2V0V2luZG93KCkuc2Nyb2xsVG8oeCwgeSk7CisJCX0gZWxzZSB7CisJCQl0aGlzLnNjcm9sbExlZnQgPSB4OworCQkJdGhpcy5zY3JvbGxUb3AgPSB5OworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXRTaXplOiBmdW5jdGlvbigpeworCQlpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTaXplKCk7CisJCXJldHVybiB7eDogdGhpcy5vZmZzZXRXaWR0aCwgeTogdGhpcy5vZmZzZXRIZWlnaHR9OworCX0sCisKKwlnZXRTY3JvbGxTaXplOiBmdW5jdGlvbigpeworCQlpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGxTaXplKCk7CisJCXJldHVybiB7eDogdGhpcy5zY3JvbGxXaWR0aCwgeTogdGhpcy5zY3JvbGxIZWlnaHR9OworCX0sCisKKwlnZXRTY3JvbGw6IGZ1bmN0aW9uKCl7CisJCWlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdldFNjcm9sbCgpOworCQlyZXR1cm4ge3g6IHRoaXMuc2Nyb2xsTGVmdCwgeTogdGhpcy5zY3JvbGxUb3B9OworCX0sCisKKwlnZXRTY3JvbGxzOiBmdW5jdGlvbigpeworCQl2YXIgZWxlbWVudCA9IHRoaXMucGFyZW50Tm9kZSwgcG9zaXRpb24gPSB7eDogMCwgeTogMH07CisJCXdoaWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxlbWVudCkpeworCQkJcG9zaXRpb24ueCArPSBlbGVtZW50LnNjcm9sbExlZnQ7CisJCQlwb3NpdGlvbi55ICs9IGVsZW1lbnQuc2Nyb2xsVG9wOworCQkJZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTsKKwkJfQorCQlyZXR1cm4gcG9zaXRpb247CisJfSwKKworCWdldE9mZnNldFBhcmVudDogYnJva2VuT2Zmc2V0UGFyZW50ID8gZnVuY3Rpb24oKXsKKwkJdmFyIGVsZW1lbnQgPSB0aGlzOworCQlpZiAoaXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdmaXhlZCcpIHJldHVybiBudWxsOworCisJCXZhciBpc09mZnNldENoZWNrID0gKHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdzdGF0aWMnKSA/IGlzT2Zmc2V0U3RhdGljIDogaXNPZmZzZXQ7CisJCXdoaWxlICgoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSkpeworCQkJaWYgKGlzT2Zmc2V0Q2hlY2soZWxlbWVudCkpIHJldHVybiBlbGVtZW50OworCQl9CisJCXJldHVybiBudWxsOworCX0gOiBmdW5jdGlvbigpeworCQl2YXIgZWxlbWVudCA9IHRoaXM7CisJCWlmIChpc0JvZHkoZWxlbWVudCkgfHwgc3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJykgcmV0dXJuIG51bGw7CisKKwkJdHJ5IHsKKwkJCXJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDsKKwkJfSBjYXRjaChlKSB7fQorCQlyZXR1cm4gbnVsbDsKKwl9LAorCisJZ2V0T2Zmc2V0czogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICYmICFCcm93c2VyLlBsYXRmb3JtLmlvcyl7CisJCQl2YXIgYm91bmQgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLAorCQkJCWh0bWwgPSBkb2N1bWVudC5pZCh0aGlzLmdldERvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KSwKKwkJCQlodG1sU2Nyb2xsID0gaHRtbC5nZXRTY3JvbGwoKSwKKwkJCQllbGVtU2Nyb2xscyA9IHRoaXMuZ2V0U2Nyb2xscygpLAorCQkJCWlzRml4ZWQgPSAoc3R5bGVTdHJpbmcodGhpcywgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJyk7CisKKwkJCXJldHVybiB7CisJCQkJeDogYm91bmQubGVmdC50b0ludCgpICsgZWxlbVNjcm9sbHMueCArICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC54KSAtIGh0bWwuY2xpZW50TGVmdCwKKwkJCQl5OiBib3VuZC50b3AudG9JbnQoKSAgKyBlbGVtU2Nyb2xscy55ICsgKChpc0ZpeGVkKSA/IDAgOiBodG1sU2Nyb2xsLnkpIC0gaHRtbC5jbGllbnRUb3AKKwkJCX07CisJCX0KKworCQl2YXIgZWxlbWVudCA9IHRoaXMsIHBvc2l0aW9uID0ge3g6IDAsIHk6IDB9OworCQlpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gcG9zaXRpb247CisKKwkJd2hpbGUgKGVsZW1lbnQgJiYgIWlzQm9keShlbGVtZW50KSl7CisJCQlwb3NpdGlvbi54ICs9IGVsZW1lbnQub2Zmc2V0TGVmdDsKKwkJCXBvc2l0aW9uLnkgKz0gZWxlbWVudC5vZmZzZXRUb3A7CisKKwkJCWlmIChCcm93c2VyLmZpcmVmb3gpeworCQkJCWlmICghYm9yZGVyQm94KGVsZW1lbnQpKXsKKwkJCQkJcG9zaXRpb24ueCArPSBsZWZ0Qm9yZGVyKGVsZW1lbnQpOworCQkJCQlwb3NpdGlvbi55ICs9IHRvcEJvcmRlcihlbGVtZW50KTsKKwkJCQl9CisJCQkJdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTsKKwkJCQlpZiAocGFyZW50ICYmIHN0eWxlU3RyaW5nKHBhcmVudCwgJ292ZXJmbG93JykgIT0gJ3Zpc2libGUnKXsKKwkJCQkJcG9zaXRpb24ueCArPSBsZWZ0Qm9yZGVyKHBhcmVudCk7CisJCQkJCXBvc2l0aW9uLnkgKz0gdG9wQm9yZGVyKHBhcmVudCk7CisJCQkJfQorCQkJfSBlbHNlIGlmIChlbGVtZW50ICE9IHRoaXMgJiYgQnJvd3Nlci5zYWZhcmkpeworCQkJCXBvc2l0aW9uLnggKz0gbGVmdEJvcmRlcihlbGVtZW50KTsKKwkJCQlwb3NpdGlvbi55ICs9IHRvcEJvcmRlcihlbGVtZW50KTsKKwkJCX0KKworCQkJZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50OworCQl9CisJCWlmIChCcm93c2VyLmZpcmVmb3ggJiYgIWJvcmRlckJveCh0aGlzKSl7CisJCQlwb3NpdGlvbi54IC09IGxlZnRCb3JkZXIodGhpcyk7CisJCQlwb3NpdGlvbi55IC09IHRvcEJvcmRlcih0aGlzKTsKKwkJfQorCQlyZXR1cm4gcG9zaXRpb247CisJfSwKKworCWdldFBvc2l0aW9uOiBmdW5jdGlvbihyZWxhdGl2ZSl7CisJCWlmIChpc0JvZHkodGhpcykpIHJldHVybiB7eDogMCwgeTogMH07CisJCXZhciBvZmZzZXQgPSB0aGlzLmdldE9mZnNldHMoKSwKKwkJCXNjcm9sbCA9IHRoaXMuZ2V0U2Nyb2xscygpOworCQl2YXIgcG9zaXRpb24gPSB7CisJCQl4OiBvZmZzZXQueCAtIHNjcm9sbC54LAorCQkJeTogb2Zmc2V0LnkgLSBzY3JvbGwueQorCQl9OworCisJCWlmIChyZWxhdGl2ZSAmJiAocmVsYXRpdmUgPSBkb2N1bWVudC5pZChyZWxhdGl2ZSkpKXsKKwkJCXZhciByZWxhdGl2ZVBvc2l0aW9uID0gcmVsYXRpdmUuZ2V0UG9zaXRpb24oKTsKKwkJCXJldHVybiB7eDogcG9zaXRpb24ueCAtIHJlbGF0aXZlUG9zaXRpb24ueCAtIGxlZnRCb3JkZXIocmVsYXRpdmUpLCB5OiBwb3NpdGlvbi55IC0gcmVsYXRpdmVQb3NpdGlvbi55IC0gdG9wQm9yZGVyKHJlbGF0aXZlKX07CisJCX0KKwkJcmV0dXJuIHBvc2l0aW9uOworCX0sCisKKwlnZXRDb29yZGluYXRlczogZnVuY3Rpb24oZWxlbWVudCl7CisJCWlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdldENvb3JkaW5hdGVzKCk7CisJCXZhciBwb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRpb24oZWxlbWVudCksCisJCQlzaXplID0gdGhpcy5nZXRTaXplKCk7CisJCXZhciBvYmogPSB7CisJCQlsZWZ0OiBwb3NpdGlvbi54LAorCQkJdG9wOiBwb3NpdGlvbi55LAorCQkJd2lkdGg6IHNpemUueCwKKwkJCWhlaWdodDogc2l6ZS55CisJCX07CisJCW9iai5yaWdodCA9IG9iai5sZWZ0ICsgb2JqLndpZHRoOworCQlvYmouYm90dG9tID0gb2JqLnRvcCArIG9iai5oZWlnaHQ7CisJCXJldHVybiBvYmo7CisJfSwKKworCWNvbXB1dGVQb3NpdGlvbjogZnVuY3Rpb24ob2JqKXsKKwkJcmV0dXJuIHsKKwkJCWxlZnQ6IG9iai54IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi1sZWZ0JyksCisJCQl0b3A6IG9iai55IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi10b3AnKQorCQl9OworCX0sCisKKwlzZXRQb3NpdGlvbjogZnVuY3Rpb24ob2JqKXsKKwkJcmV0dXJuIHRoaXMuc2V0U3R5bGVzKHRoaXMuY29tcHV0ZVBvc2l0aW9uKG9iaikpOworCX0KKworfSk7CisKKworW0RvY3VtZW50LCBXaW5kb3ddLmludm9rZSgnaW1wbGVtZW50JywgeworCisJZ2V0U2l6ZTogZnVuY3Rpb24oKXsKKwkJdmFyIGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyk7CisJCXJldHVybiB7eDogZG9jLmNsaWVudFdpZHRoLCB5OiBkb2MuY2xpZW50SGVpZ2h0fTsKKwl9LAorCisJZ2V0U2Nyb2xsOiBmdW5jdGlvbigpeworCQl2YXIgd2luID0gdGhpcy5nZXRXaW5kb3coKSwgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlzKTsKKwkJcmV0dXJuIHt4OiB3aW4ucGFnZVhPZmZzZXQgfHwgZG9jLnNjcm9sbExlZnQsIHk6IHdpbi5wYWdlWU9mZnNldCB8fCBkb2Muc2Nyb2xsVG9wfTsKKwl9LAorCisJZ2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXsKKwkJdmFyIGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyksCisJCQltaW4gPSB0aGlzLmdldFNpemUoKSwKKwkJCWJvZHkgPSB0aGlzLmdldERvY3VtZW50KCkuYm9keTsKKworCQlyZXR1cm4ge3g6IE1hdGgubWF4KGRvYy5zY3JvbGxXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgbWluLngpLCB5OiBNYXRoLm1heChkb2Muc2Nyb2xsSGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgbWluLnkpfTsKKwl9LAorCisJZ2V0UG9zaXRpb246IGZ1bmN0aW9uKCl7CisJCXJldHVybiB7eDogMCwgeTogMH07CisJfSwKKworCWdldENvb3JkaW5hdGVzOiBmdW5jdGlvbigpeworCQl2YXIgc2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpOworCQlyZXR1cm4ge3RvcDogMCwgbGVmdDogMCwgYm90dG9tOiBzaXplLnksIHJpZ2h0OiBzaXplLngsIGhlaWdodDogc2l6ZS55LCB3aWR0aDogc2l6ZS54fTsKKwl9CisKK30pOworCisvLyBwcml2YXRlIG1ldGhvZHMKKwordmFyIHN0eWxlU3RyaW5nID0gRWxlbWVudC5nZXRDb21wdXRlZFN0eWxlOworCitmdW5jdGlvbiBzdHlsZU51bWJlcihlbGVtZW50LCBzdHlsZSl7CisJcmV0dXJuIHN0eWxlU3RyaW5nKGVsZW1lbnQsIHN0eWxlKS50b0ludCgpIHx8IDA7Cit9CisKK2Z1bmN0aW9uIGJvcmRlckJveChlbGVtZW50KXsKKwlyZXR1cm4gc3R5bGVTdHJpbmcoZWxlbWVudCwgJy1tb3otYm94LXNpemluZycpID09ICdib3JkZXItYm94JzsKK30KKworZnVuY3Rpb24gdG9wQm9yZGVyKGVsZW1lbnQpeworCXJldHVybiBzdHlsZU51bWJlcihlbGVtZW50LCAnYm9yZGVyLXRvcC13aWR0aCcpOworfQorCitmdW5jdGlvbiBsZWZ0Qm9yZGVyKGVsZW1lbnQpeworCXJldHVybiBzdHlsZU51bWJlcihlbGVtZW50LCAnYm9yZGVyLWxlZnQtd2lkdGgnKTsKK30KKworZnVuY3Rpb24gaXNCb2R5KGVsZW1lbnQpeworCXJldHVybiAoL14oPzpib2R5fGh0bWwpJC9pKS50ZXN0KGVsZW1lbnQudGFnTmFtZSk7Cit9CisKK2Z1bmN0aW9uIGdldENvbXBhdEVsZW1lbnQoZWxlbWVudCl7CisJdmFyIGRvYyA9IGVsZW1lbnQuZ2V0RG9jdW1lbnQoKTsKKwlyZXR1cm4gKCFkb2MuY29tcGF0TW9kZSB8fCBkb2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0bWwgOiBkb2MuYm9keTsKK30KKworfSkoKTsKKworLy9hbGlhc2VzCitFbGVtZW50LmFsaWFzKHtwb3NpdGlvbjogJ3NldFBvc2l0aW9uJ30pOyAvL2NvbXBhdGFiaWxpdHkKKworW1dpbmRvdywgRG9jdW1lbnQsIEVsZW1lbnRdLmludm9rZSgnaW1wbGVtZW50JywgeworCisJZ2V0SGVpZ2h0OiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5nZXRTaXplKCkueTsKKwl9LAorCisJZ2V0V2lkdGg6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLmdldFNpemUoKS54OworCX0sCisKKwlnZXRTY3JvbGxUb3A6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLmdldFNjcm9sbCgpLnk7CisJfSwKKworCWdldFNjcm9sbExlZnQ6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLmdldFNjcm9sbCgpLng7CisJfSwKKworCWdldFNjcm9sbEhlaWdodDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuZ2V0U2Nyb2xsU2l6ZSgpLnk7CisJfSwKKworCWdldFNjcm9sbFdpZHRoOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCkueDsKKwl9LAorCisJZ2V0VG9wOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLnk7CisJfSwKKworCWdldExlZnQ6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLmdldFBvc2l0aW9uKCkueDsKKwl9CisKK30pOworCisKKy8qCistLS0KKworbmFtZTogRngKKworZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBiYXNpYyBhbmltYXRpb24gbG9naWMgdG8gYmUgZXh0ZW5kZWQgYnkgYWxsIG90aGVyIEZ4IENsYXNzZXMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCityZXF1aXJlczogW0NoYWluLCBFdmVudHMsIE9wdGlvbnNdCisKK3Byb3ZpZGVzOiBGeAorCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCit2YXIgRnggPSB0aGlzLkZ4ID0gbmV3IENsYXNzKHsKKworCUltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zXSwKKworCW9wdGlvbnM6IHsKKwkJLyoKKwkJb25TdGFydDogbmlsLAorCQlvbkNhbmNlbDogbmlsLAorCQlvbkNvbXBsZXRlOiBuaWwsCisJCSovCisJCWZwczogNjAsCisJCXVuaXQ6IGZhbHNlLAorCQlkdXJhdGlvbjogNTAwLAorCQlmcmFtZXM6IG51bGwsCisJCWZyYW1lU2tpcDogdHJ1ZSwKKwkJbGluazogJ2lnbm9yZScKKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXRoaXMuc3ViamVjdCA9IHRoaXMuc3ViamVjdCB8fCB0aGlzOworCQl0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7CisJfSwKKworCWdldFRyYW5zaXRpb246IGZ1bmN0aW9uKCl7CisJCXJldHVybiBmdW5jdGlvbihwKXsKKwkJCXJldHVybiAtKE1hdGguY29zKE1hdGguUEkgKiBwKSAtIDEpIC8gMjsKKwkJfTsKKwl9LAorCisJc3RlcDogZnVuY3Rpb24obm93KXsKKwkJaWYgKHRoaXMub3B0aW9ucy5mcmFtZVNraXApeworCQkJdmFyIGRpZmYgPSAodGhpcy50aW1lICE9IG51bGwpID8gKG5vdyAtIHRoaXMudGltZSkgOiAwLCBmcmFtZXMgPSBkaWZmIC8gdGhpcy5mcmFtZUludGVydmFsOworCQkJdGhpcy50aW1lID0gbm93OworCQkJdGhpcy5mcmFtZSArPSBmcmFtZXM7CisJCX0gZWxzZSB7CisJCQl0aGlzLmZyYW1lKys7CisJCX0KKwkJCisJCWlmICh0aGlzLmZyYW1lIDwgdGhpcy5mcmFtZXMpeworCQkJdmFyIGRlbHRhID0gdGhpcy50cmFuc2l0aW9uKHRoaXMuZnJhbWUgLyB0aGlzLmZyYW1lcyk7CisJCQl0aGlzLnNldCh0aGlzLmNvbXB1dGUodGhpcy5mcm9tLCB0aGlzLnRvLCBkZWx0YSkpOworCQl9IGVsc2UgeworCQkJdGhpcy5mcmFtZSA9IHRoaXMuZnJhbWVzOworCQkJdGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgMSkpOworCQkJdGhpcy5zdG9wKCk7CisJCX0KKwl9LAorCisJc2V0OiBmdW5jdGlvbihub3cpeworCQlyZXR1cm4gbm93OworCX0sCisKKwljb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpeworCQlyZXR1cm4gRnguY29tcHV0ZShmcm9tLCB0bywgZGVsdGEpOworCX0sCisKKwljaGVjazogZnVuY3Rpb24oKXsKKwkJaWYgKCF0aGlzLmlzUnVubmluZygpKSByZXR1cm4gdHJ1ZTsKKwkJc3dpdGNoICh0aGlzLm9wdGlvbnMubGluayl7CisJCQljYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1cm4gdHJ1ZTsKKwkJCWNhc2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNzKGFyZ3VtZW50cywgdGhpcykpOyByZXR1cm4gZmFsc2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0sCisKKwlzdGFydDogZnVuY3Rpb24oZnJvbSwgdG8peworCQlpZiAoIXRoaXMuY2hlY2soZnJvbSwgdG8pKSByZXR1cm4gdGhpczsKKwkJdGhpcy5mcm9tID0gZnJvbTsKKwkJdGhpcy50byA9IHRvOworCQl0aGlzLmZyYW1lID0gKHRoaXMub3B0aW9ucy5mcmFtZVNraXApID8gMCA6IC0xOworCQl0aGlzLnRpbWUgPSBudWxsOworCQl0aGlzLnRyYW5zaXRpb24gPSB0aGlzLmdldFRyYW5zaXRpb24oKTsKKwkJdmFyIGZyYW1lcyA9IHRoaXMub3B0aW9ucy5mcmFtZXMsIGZwcyA9IHRoaXMub3B0aW9ucy5mcHMsIGR1cmF0aW9uID0gdGhpcy5vcHRpb25zLmR1cmF0aW9uOworCQl0aGlzLmR1cmF0aW9uID0gRnguRHVyYXRpb25zW2R1cmF0aW9uXSB8fCBkdXJhdGlvbi50b0ludCgpOworCQl0aGlzLmZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzOworCQl0aGlzLmZyYW1lcyA9IGZyYW1lcyB8fCBNYXRoLnJvdW5kKHRoaXMuZHVyYXRpb24gLyB0aGlzLmZyYW1lSW50ZXJ2YWwpOworCQl0aGlzLmZpcmVFdmVudCgnc3RhcnQnLCB0aGlzLnN1YmplY3QpOworCQlwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCBmcHMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCQorCXN0b3A6IGZ1bmN0aW9uKCl7CisJCWlmICh0aGlzLmlzUnVubmluZygpKXsKKwkJCXRoaXMudGltZSA9IG51bGw7CisJCQlwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTsKKwkJCWlmICh0aGlzLmZyYW1lcyA9PSB0aGlzLmZyYW1lKXsKKwkJCQl0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCB0aGlzLnN1YmplY3QpOworCQkJCWlmICghdGhpcy5jYWxsQ2hhaW4oKSkgdGhpcy5maXJlRXZlbnQoJ2NoYWluQ29tcGxldGUnLCB0aGlzLnN1YmplY3QpOworCQkJfSBlbHNlIHsKKwkJCQl0aGlzLmZpcmVFdmVudCgnc3RvcCcsIHRoaXMuc3ViamVjdCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfSwKKwkKKwljYW5jZWw6IGZ1bmN0aW9uKCl7CisJCWlmICh0aGlzLmlzUnVubmluZygpKXsKKwkJCXRoaXMudGltZSA9IG51bGw7CisJCQlwdWxsSW5zdGFuY2UuY2FsbCh0aGlzLCB0aGlzLm9wdGlvbnMuZnBzKTsKKwkJCXRoaXMuZnJhbWUgPSB0aGlzLmZyYW1lczsKKwkJCXRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnLCB0aGlzLnN1YmplY3QpLmNsZWFyQ2hhaW4oKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCQorCXBhdXNlOiBmdW5jdGlvbigpeworCQlpZiAodGhpcy5pc1J1bm5pbmcoKSl7CisJCQl0aGlzLnRpbWUgPSBudWxsOworCQkJcHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfSwKKwkKKwlyZXN1bWU6IGZ1bmN0aW9uKCl7CisJCWlmICgodGhpcy5mcmFtZSA8IHRoaXMuZnJhbWVzKSAmJiAhdGhpcy5pc1J1bm5pbmcoKSkgcHVzaEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7CisJCXJldHVybiB0aGlzOworCX0sCisJCisJaXNSdW5uaW5nOiBmdW5jdGlvbigpeworCQl2YXIgbGlzdCA9IGluc3RhbmNlc1t0aGlzLm9wdGlvbnMuZnBzXTsKKwkJcmV0dXJuIGxpc3QgJiYgbGlzdC5jb250YWlucyh0aGlzKTsKKwl9CisKK30pOworCitGeC5jb21wdXRlID0gZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXsKKwlyZXR1cm4gKHRvIC0gZnJvbSkgKiBkZWx0YSArIGZyb207Cit9OworCitGeC5EdXJhdGlvbnMgPSB7J3Nob3J0JzogMjUwLCAnbm9ybWFsJzogNTAwLCAnbG9uZyc6IDEwMDB9OworCisvLyBnbG9iYWwgdGltZXJzCisKK3ZhciBpbnN0YW5jZXMgPSB7fSwgdGltZXJzID0ge307CisKK3ZhciBsb29wID0gZnVuY3Rpb24oKXsKKwl2YXIgbm93ID0gRGF0ZS5ub3coKTsKKwlmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGktLTspeworCQl2YXIgaW5zdGFuY2UgPSB0aGlzW2ldOworCQlpZiAoaW5zdGFuY2UpIGluc3RhbmNlLnN0ZXAobm93KTsKKwl9Cit9OworCit2YXIgcHVzaEluc3RhbmNlID0gZnVuY3Rpb24oZnBzKXsKKwl2YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNdIHx8IChpbnN0YW5jZXNbZnBzXSA9IFtdKTsKKwlsaXN0LnB1c2godGhpcyk7CisJaWYgKCF0aW1lcnNbZnBzXSkgdGltZXJzW2Zwc10gPSBsb29wLnBlcmlvZGljYWwoTWF0aC5yb3VuZCgxMDAwIC8gZnBzKSwgbGlzdCk7Cit9OworCit2YXIgcHVsbEluc3RhbmNlID0gZnVuY3Rpb24oZnBzKXsKKwl2YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNdOworCWlmIChsaXN0KXsKKwkJbGlzdC5lcmFzZSh0aGlzKTsKKwkJaWYgKCFsaXN0Lmxlbmd0aCAmJiB0aW1lcnNbZnBzXSl7CisJCQlkZWxldGUgaW5zdGFuY2VzW2Zwc107CisJCQl0aW1lcnNbZnBzXSA9IGNsZWFySW50ZXJ2YWwodGltZXJzW2Zwc10pOworCQl9CisJfQorfTsKKworfSkoKTsKKworCisvKgorLS0tCisKK25hbWU6IEZ4LkNTUworCitkZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIENTUyBhbmltYXRpb24gbG9naWMuIFVzZWQgYnkgRnguVHdlZW4sIEZ4Lk1vcnBoLCBGeC5FbGVtZW50cy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuCisKK3JlcXVpcmVzOiBbRngsIEVsZW1lbnQuU3R5bGVdCisKK3Byb3ZpZGVzOiBGeC5DU1MKKworLi4uCisqLworCitGeC5DU1MgPSBuZXcgQ2xhc3MoeworCisJRXh0ZW5kczogRngsCisKKwkvL3ByZXBhcmVzIHRoZSBiYXNlIGZyb20vdG8gb2JqZWN0CisKKwlwcmVwYXJlOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWVzKXsKKwkJdmFsdWVzID0gQXJyYXkuZnJvbSh2YWx1ZXMpOworCQlpZiAodmFsdWVzWzFdID09IG51bGwpeworCQkJdmFsdWVzWzFdID0gdmFsdWVzWzBdOworCQkJdmFsdWVzWzBdID0gZWxlbWVudC5nZXRTdHlsZShwcm9wZXJ0eSk7CisJCX0KKwkJdmFyIHBhcnNlZCA9IHZhbHVlcy5tYXAodGhpcy5wYXJzZSk7CisJCXJldHVybiB7ZnJvbTogcGFyc2VkWzBdLCB0bzogcGFyc2VkWzFdfTsKKwl9LAorCisJLy9wYXJzZXMgYSB2YWx1ZSBpbnRvIGFuIGFycmF5CisKKwlwYXJzZTogZnVuY3Rpb24odmFsdWUpeworCQl2YWx1ZSA9IEZ1bmN0aW9uLmZyb20odmFsdWUpKCk7CisJCXZhbHVlID0gKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykgPyB2YWx1ZS5zcGxpdCgnICcpIDogQXJyYXkuZnJvbSh2YWx1ZSk7CisJCXJldHVybiB2YWx1ZS5tYXAoZnVuY3Rpb24odmFsKXsKKwkJCXZhbCA9IFN0cmluZyh2YWwpOworCQkJdmFyIGZvdW5kID0gZmFsc2U7CisJCQlPYmplY3QuZWFjaChGeC5DU1MuUGFyc2VycywgZnVuY3Rpb24ocGFyc2VyLCBrZXkpeworCQkJCWlmIChmb3VuZCkgcmV0dXJuOworCQkJCXZhciBwYXJzZWQgPSBwYXJzZXIucGFyc2UodmFsKTsKKwkJCQlpZiAocGFyc2VkIHx8IHBhcnNlZCA9PT0gMCkgZm91bmQgPSB7dmFsdWU6IHBhcnNlZCwgcGFyc2VyOiBwYXJzZXJ9OworCQkJfSk7CisJCQlmb3VuZCA9IGZvdW5kIHx8IHt2YWx1ZTogdmFsLCBwYXJzZXI6IEZ4LkNTUy5QYXJzZXJzLlN0cmluZ307CisJCQlyZXR1cm4gZm91bmQ7CisJCX0pOworCX0sCisKKwkvL2NvbXB1dGVzIGJ5IGEgZnJvbSBhbmQgdG8gcHJlcGFyZWQgb2JqZWN0cywgdXNpbmcgdGhlaXIgcGFyc2Vycy4KKworCWNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7CisJCXZhciBjb21wdXRlZCA9IFtdOworCQkoTWF0aC5taW4oZnJvbS5sZW5ndGgsIHRvLmxlbmd0aCkpLnRpbWVzKGZ1bmN0aW9uKGkpeworCQkJY29tcHV0ZWQucHVzaCh7dmFsdWU6IGZyb21baV0ucGFyc2VyLmNvbXB1dGUoZnJvbVtpXS52YWx1ZSwgdG9baV0udmFsdWUsIGRlbHRhKSwgcGFyc2VyOiBmcm9tW2ldLnBhcnNlcn0pOworCQl9KTsKKwkJY29tcHV0ZWQuJGZhbWlseSA9IEZ1bmN0aW9uLmZyb20oJ2Z4OmNzczp2YWx1ZScpOworCQlyZXR1cm4gY29tcHV0ZWQ7CisJfSwKKworCS8vc2VydmVzIHRoZSB2YWx1ZSBhcyBzZXR0YWJsZQorCisJc2VydmU6IGZ1bmN0aW9uKHZhbHVlLCB1bml0KXsKKwkJaWYgKHR5cGVPZih2YWx1ZSkgIT0gJ2Z4OmNzczp2YWx1ZScpIHZhbHVlID0gdGhpcy5wYXJzZSh2YWx1ZSk7CisJCXZhciByZXR1cm5lZCA9IFtdOworCQl2YWx1ZS5lYWNoKGZ1bmN0aW9uKGJpdCl7CisJCQlyZXR1cm5lZCA9IHJldHVybmVkLmNvbmNhdChiaXQucGFyc2VyLnNlcnZlKGJpdC52YWx1ZSwgdW5pdCkpOworCQl9KTsKKwkJcmV0dXJuIHJldHVybmVkOworCX0sCisKKwkvL3JlbmRlcnMgdGhlIGNoYW5nZSB0byBhbiBlbGVtZW50CisKKwlyZW5kZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSwgdW5pdCl7CisJCWVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRoaXMuc2VydmUodmFsdWUsIHVuaXQpKTsKKwl9LAorCisJLy9zZWFyY2hlcyBpbnNpZGUgdGhlIHBhZ2UgY3NzIHRvIGZpbmQgdGhlIHZhbHVlcyBmb3IgYSBzZWxlY3RvcgorCisJc2VhcmNoOiBmdW5jdGlvbihzZWxlY3Rvcil7CisJCWlmIChGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdKSByZXR1cm4gRnguQ1NTLkNhY2hlW3NlbGVjdG9yXTsKKwkJdmFyIHRvID0ge30sIHNlbGVjdG9yVGVzdCA9IG5ldyBSZWdFeHAoJ14nICsgc2VsZWN0b3IuZXNjYXBlUmVnRXhwKCkgKyAnJCcpOworCQlBcnJheS5lYWNoKGRvY3VtZW50LnN0eWxlU2hlZXRzLCBmdW5jdGlvbihzaGVldCwgail7CisJCQl2YXIgaHJlZiA9IHNoZWV0LmhyZWY7CisJCQlpZiAoaHJlZiAmJiBocmVmLmNvbnRhaW5zKCc6Ly8nKSAmJiAhaHJlZi5jb250YWlucyhkb2N1bWVudC5kb21haW4pKSByZXR1cm47CisJCQl2YXIgcnVsZXMgPSBzaGVldC5ydWxlcyB8fCBzaGVldC5jc3NSdWxlczsKKwkJCUFycmF5LmVhY2gocnVsZXMsIGZ1bmN0aW9uKHJ1bGUsIGkpeworCQkJCWlmICghcnVsZS5zdHlsZSkgcmV0dXJuOworCQkJCXZhciBzZWxlY3RvclRleHQgPSAocnVsZS5zZWxlY3RvclRleHQpID8gcnVsZS5zZWxlY3RvclRleHQucmVwbGFjZSgvXlx3Ky8sIGZ1bmN0aW9uKG0peworCQkJCQlyZXR1cm4gbS50b0xvd2VyQ2FzZSgpOworCQkJCX0pIDogbnVsbDsKKwkJCQlpZiAoIXNlbGVjdG9yVGV4dCB8fCAhc2VsZWN0b3JUZXN0LnRlc3Qoc2VsZWN0b3JUZXh0KSkgcmV0dXJuOworCQkJCU9iamVjdC5lYWNoKEVsZW1lbnQuU3R5bGVzLCBmdW5jdGlvbih2YWx1ZSwgc3R5bGUpeworCQkJCQlpZiAoIXJ1bGUuc3R5bGVbc3R5bGVdIHx8IEVsZW1lbnQuU2hvcnRTdHlsZXNbc3R5bGVdKSByZXR1cm47CisJCQkJCXZhbHVlID0gU3RyaW5nKHJ1bGUuc3R5bGVbc3R5bGVdKTsKKwkJCQkJdG9bc3R5bGVdID0gKCgvXnJnYi8pLnRlc3QodmFsdWUpKSA/IHZhbHVlLnJnYlRvSGV4KCkgOiB2YWx1ZTsKKwkJCQl9KTsKKwkJCX0pOworCQl9KTsKKwkJcmV0dXJuIEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0gPSB0bzsKKwl9CisKK30pOworCitGeC5DU1MuQ2FjaGUgPSB7fTsKKworRnguQ1NTLlBhcnNlcnMgPSB7CisKKwlDb2xvcjogeworCQlwYXJzZTogZnVuY3Rpb24odmFsdWUpeworCQkJaWYgKHZhbHVlLm1hdGNoKC9eI1swLTlhLWZdezMsNn0kL2kpKSByZXR1cm4gdmFsdWUuaGV4VG9SZ2IodHJ1ZSk7CisJCQlyZXR1cm4gKCh2YWx1ZSA9IHZhbHVlLm1hdGNoKC8oXGQrKSxccyooXGQrKSxccyooXGQrKS8pKSkgPyBbdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXV0gOiBmYWxzZTsKKwkJfSwKKwkJY29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXsKKwkJCXJldHVybiBmcm9tLm1hcChmdW5jdGlvbih2YWx1ZSwgaSl7CisJCQkJcmV0dXJuIE1hdGgucm91bmQoRnguY29tcHV0ZShmcm9tW2ldLCB0b1tpXSwgZGVsdGEpKTsKKwkJCX0pOworCQl9LAorCQlzZXJ2ZTogZnVuY3Rpb24odmFsdWUpeworCQkJcmV0dXJuIHZhbHVlLm1hcChOdW1iZXIpOworCQl9CisJfSwKKworCU51bWJlcjogeworCQlwYXJzZTogcGFyc2VGbG9hdCwKKwkJY29tcHV0ZTogRnguY29tcHV0ZSwKKwkJc2VydmU6IGZ1bmN0aW9uKHZhbHVlLCB1bml0KXsKKwkJCXJldHVybiAodW5pdCkgPyB2YWx1ZSArIHVuaXQgOiB2YWx1ZTsKKwkJfQorCX0sCisKKwlTdHJpbmc6IHsKKwkJcGFyc2U6IEZ1bmN0aW9uLmZyb20oZmFsc2UpLAorCQljb21wdXRlOiBmdW5jdGlvbih6ZXJvLCBvbmUpeworCQkJcmV0dXJuIG9uZTsKKwkJfSwKKwkJc2VydmU6IGZ1bmN0aW9uKHplcm8peworCQkJcmV0dXJuIHplcm87CisJCX0KKwl9CisKK307CisKKy8vPDEuMmNvbXBhdD4KKworRnguQ1NTLlBhcnNlcnMgPSBuZXcgSGFzaChGeC5DU1MuUGFyc2Vycyk7CisKKy8vPC8xLjJjb21wYXQ+CisKKworLyoKKy0tLQorCituYW1lOiBGeC5Ud2VlbgorCitkZXNjcmlwdGlvbjogRm9ybWVybHkgRnguU3R5bGUsIGVmZmVjdCB0byB0cmFuc2l0aW9uIGFueSBDU1MgcHJvcGVydHkgZm9yIGFuIGVsZW1lbnQuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCityZXF1aXJlczogRnguQ1NTCisKK3Byb3ZpZGVzOiBbRnguVHdlZW4sIEVsZW1lbnQuZmFkZSwgRWxlbWVudC5oaWdobGlnaHRdCisKKy4uLgorKi8KKworRnguVHdlZW4gPSBuZXcgQ2xhc3MoeworCisJRXh0ZW5kczogRnguQ1NTLAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucyl7CisJCXRoaXMuZWxlbWVudCA9IHRoaXMuc3ViamVjdCA9IGRvY3VtZW50LmlkKGVsZW1lbnQpOworCQl0aGlzLnBhcmVudChvcHRpb25zKTsKKwl9LAorCisJc2V0OiBmdW5jdGlvbihwcm9wZXJ0eSwgbm93KXsKKwkJaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7CisJCQlub3cgPSBwcm9wZXJ0eTsKKwkJCXByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0eSB8fCB0aGlzLm9wdGlvbnMucHJvcGVydHk7CisJCX0KKwkJdGhpcy5yZW5kZXIodGhpcy5lbGVtZW50LCBwcm9wZXJ0eSwgbm93LCB0aGlzLm9wdGlvbnMudW5pdCk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlzdGFydDogZnVuY3Rpb24ocHJvcGVydHksIGZyb20sIHRvKXsKKwkJaWYgKCF0aGlzLmNoZWNrKHByb3BlcnR5LCBmcm9tLCB0bykpIHJldHVybiB0aGlzOworCQl2YXIgYXJncyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKTsKKwkJdGhpcy5wcm9wZXJ0eSA9IHRoaXMub3B0aW9ucy5wcm9wZXJ0eSB8fCBhcmdzLnNoaWZ0KCk7CisJCXZhciBwYXJzZWQgPSB0aGlzLnByZXBhcmUodGhpcy5lbGVtZW50LCB0aGlzLnByb3BlcnR5LCBhcmdzKTsKKwkJcmV0dXJuIHRoaXMucGFyZW50KHBhcnNlZC5mcm9tLCBwYXJzZWQudG8pOworCX0KKworfSk7CisKK0VsZW1lbnQuUHJvcGVydGllcy50d2VlbiA9IHsKKworCXNldDogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXRoaXMuZ2V0KCd0d2VlbicpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXQ6IGZ1bmN0aW9uKCl7CisJCXZhciB0d2VlbiA9IHRoaXMucmV0cmlldmUoJ3R3ZWVuJyk7CisJCWlmICghdHdlZW4peworCQkJdHdlZW4gPSBuZXcgRnguVHdlZW4odGhpcywge2xpbms6ICdjYW5jZWwnfSk7CisJCQl0aGlzLnN0b3JlKCd0d2VlbicsIHR3ZWVuKTsKKwkJfQorCQlyZXR1cm4gdHdlZW47CisJfQorCit9OworCitFbGVtZW50LmltcGxlbWVudCh7CisKKwl0d2VlbjogZnVuY3Rpb24ocHJvcGVydHksIGZyb20sIHRvKXsKKwkJdGhpcy5nZXQoJ3R3ZWVuJykuc3RhcnQoYXJndW1lbnRzKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWZhZGU6IGZ1bmN0aW9uKGhvdyl7CisJCXZhciBmYWRlID0gdGhpcy5nZXQoJ3R3ZWVuJyksIG8gPSAnb3BhY2l0eScsIHRvZ2dsZTsKKwkJaG93ID0gW2hvdywgJ3RvZ2dsZSddLnBpY2soKTsKKwkJc3dpdGNoIChob3cpeworCQkJY2FzZSAnaW4nOiBmYWRlLnN0YXJ0KG8sIDEpOyBicmVhazsKKwkJCWNhc2UgJ291dCc6IGZhZGUuc3RhcnQobywgMCk7IGJyZWFrOworCQkJY2FzZSAnc2hvdyc6IGZhZGUuc2V0KG8sIDEpOyBicmVhazsKKwkJCWNhc2UgJ2hpZGUnOiBmYWRlLnNldChvLCAwKTsgYnJlYWs7CisJCQljYXNlICd0b2dnbGUnOgorCQkJCXZhciBmbGFnID0gdGhpcy5yZXRyaWV2ZSgnZmFkZTpmbGFnJywgdGhpcy5nZXQoJ29wYWNpdHknKSA9PSAxKTsKKwkJCQlmYWRlLnN0YXJ0KG8sIChmbGFnKSA/IDAgOiAxKTsKKwkJCQl0aGlzLnN0b3JlKCdmYWRlOmZsYWcnLCAhZmxhZyk7CisJCQkJdG9nZ2xlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQkJZGVmYXVsdDogZmFkZS5zdGFydChvLCBhcmd1bWVudHMpOworCQl9CisJCWlmICghdG9nZ2xlKSB0aGlzLmVsaW1pbmF0ZSgnZmFkZTpmbGFnJyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwloaWdobGlnaHQ6IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpeworCQlpZiAoIWVuZCl7CisJCQllbmQgPSB0aGlzLnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnLCB0aGlzLmdldFN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJykpOworCQkJZW5kID0gKGVuZCA9PSAndHJhbnNwYXJlbnQnKSA/ICcjZmZmJyA6IGVuZDsKKwkJfQorCQl2YXIgdHdlZW4gPSB0aGlzLmdldCgndHdlZW4nKTsKKwkJdHdlZW4uc3RhcnQoJ2JhY2tncm91bmQtY29sb3InLCBzdGFydCB8fCAnI2ZmZmY4OCcsIGVuZCkuY2hhaW4oZnVuY3Rpb24oKXsKKwkJCXRoaXMuc2V0U3R5bGUoJ2JhY2tncm91bmQtY29sb3InLCB0aGlzLnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnKSk7CisJCQl0d2Vlbi5jYWxsQ2hhaW4oKTsKKwkJfS5iaW5kKHRoaXMpKTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKworCisvKgorLS0tCisKK25hbWU6IEZ4Lk1vcnBoCisKK2Rlc2NyaXB0aW9uOiBGb3JtZXJseSBGeC5TdHlsZXMsIGVmZmVjdCB0byB0cmFuc2l0aW9uIGFueSBudW1iZXIgb2YgQ1NTIHByb3BlcnRpZXMgZm9yIGFuIGVsZW1lbnQgdXNpbmcgYW4gb2JqZWN0IG9mIHJ1bGVzLCBvciBDU1MgYmFzZWQgc2VsZWN0b3IgcnVsZXMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCityZXF1aXJlczogRnguQ1NTCisKK3Byb3ZpZGVzOiBGeC5Nb3JwaAorCisuLi4KKyovCisKK0Z4Lk1vcnBoID0gbmV3IENsYXNzKHsKKworCUV4dGVuZHM6IEZ4LkNTUywKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpeworCQl0aGlzLmVsZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTsKKwkJdGhpcy5wYXJlbnQob3B0aW9ucyk7CisJfSwKKworCXNldDogZnVuY3Rpb24obm93KXsKKwkJaWYgKHR5cGVvZiBub3cgPT0gJ3N0cmluZycpIG5vdyA9IHRoaXMuc2VhcmNoKG5vdyk7CisJCWZvciAodmFyIHAgaW4gbm93KSB0aGlzLnJlbmRlcih0aGlzLmVsZW1lbnQsIHAsIG5vd1twXSwgdGhpcy5vcHRpb25zLnVuaXQpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJY29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXsKKwkJdmFyIG5vdyA9IHt9OworCQlmb3IgKHZhciBwIGluIGZyb20pIG5vd1twXSA9IHRoaXMucGFyZW50KGZyb21bcF0sIHRvW3BdLCBkZWx0YSk7CisJCXJldHVybiBub3c7CisJfSwKKworCXN0YXJ0OiBmdW5jdGlvbihwcm9wZXJ0aWVzKXsKKwkJaWYgKCF0aGlzLmNoZWNrKHByb3BlcnRpZXMpKSByZXR1cm4gdGhpczsKKwkJaWYgKHR5cGVvZiBwcm9wZXJ0aWVzID09ICdzdHJpbmcnKSBwcm9wZXJ0aWVzID0gdGhpcy5zZWFyY2gocHJvcGVydGllcyk7CisJCXZhciBmcm9tID0ge30sIHRvID0ge307CisJCWZvciAodmFyIHAgaW4gcHJvcGVydGllcyl7CisJCQl2YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgcCwgcHJvcGVydGllc1twXSk7CisJCQlmcm9tW3BdID0gcGFyc2VkLmZyb207CisJCQl0b1twXSA9IHBhcnNlZC50bzsKKwkJfQorCQlyZXR1cm4gdGhpcy5wYXJlbnQoZnJvbSwgdG8pOworCX0KKworfSk7CisKK0VsZW1lbnQuUHJvcGVydGllcy5tb3JwaCA9IHsKKworCXNldDogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXRoaXMuZ2V0KCdtb3JwaCcpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXQ6IGZ1bmN0aW9uKCl7CisJCXZhciBtb3JwaCA9IHRoaXMucmV0cmlldmUoJ21vcnBoJyk7CisJCWlmICghbW9ycGgpeworCQkJbW9ycGggPSBuZXcgRnguTW9ycGgodGhpcywge2xpbms6ICdjYW5jZWwnfSk7CisJCQl0aGlzLnN0b3JlKCdtb3JwaCcsIG1vcnBoKTsKKwkJfQorCQlyZXR1cm4gbW9ycGg7CisJfQorCit9OworCitFbGVtZW50LmltcGxlbWVudCh7CisKKwltb3JwaDogZnVuY3Rpb24ocHJvcHMpeworCQl0aGlzLmdldCgnbW9ycGgnKS5zdGFydChwcm9wcyk7CisJCXJldHVybiB0aGlzOworCX0KKworfSk7CisKKworLyoKKy0tLQorCituYW1lOiBGeC5UcmFuc2l0aW9ucworCitkZXNjcmlwdGlvbjogQ29udGFpbnMgYSBzZXQgb2YgYWR2YW5jZWQgdHJhbnNpdGlvbnMgdG8gYmUgdXNlZCB3aXRoIGFueSBvZiB0aGUgRnggQ2xhc3Nlcy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuCisKK2NyZWRpdHM6CisgIC0gRWFzaW5nIEVxdWF0aW9ucyBieSBSb2JlcnQgUGVubmVyLCA8aHR0cDovL3d3dy5yb2JlcnRwZW5uZXIuY29tL2Vhc2luZy8+LCBtb2RpZmllZCBhbmQgb3B0aW1pemVkIHRvIGJlIHVzZWQgd2l0aCBNb29Ub29scy4KKworcmVxdWlyZXM6IEZ4CisKK3Byb3ZpZGVzOiBGeC5UcmFuc2l0aW9ucworCisuLi4KKyovCisKK0Z4LmltcGxlbWVudCh7CisKKwlnZXRUcmFuc2l0aW9uOiBmdW5jdGlvbigpeworCQl2YXIgdHJhbnMgPSB0aGlzLm9wdGlvbnMudHJhbnNpdGlvbiB8fCBGeC5UcmFuc2l0aW9ucy5TaW5lLmVhc2VJbk91dDsKKwkJaWYgKHR5cGVvZiB0cmFucyA9PSAnc3RyaW5nJyl7CisJCQl2YXIgZGF0YSA9IHRyYW5zLnNwbGl0KCc6Jyk7CisJCQl0cmFucyA9IEZ4LlRyYW5zaXRpb25zOworCQkJdHJhbnMgPSB0cmFuc1tkYXRhWzBdXSB8fCB0cmFuc1tkYXRhWzBdLmNhcGl0YWxpemUoKV07CisJCQlpZiAoZGF0YVsxXSkgdHJhbnMgPSB0cmFuc1snZWFzZScgKyBkYXRhWzFdLmNhcGl0YWxpemUoKSArIChkYXRhWzJdID8gZGF0YVsyXS5jYXBpdGFsaXplKCkgOiAnJyldOworCQl9CisJCXJldHVybiB0cmFuczsKKwl9CisKK30pOworCitGeC5UcmFuc2l0aW9uID0gZnVuY3Rpb24odHJhbnNpdGlvbiwgcGFyYW1zKXsKKwlwYXJhbXMgPSBBcnJheS5mcm9tKHBhcmFtcyk7CisJdmFyIGVhc2VJbiA9IGZ1bmN0aW9uKHBvcyl7CisJCXJldHVybiB0cmFuc2l0aW9uKHBvcywgcGFyYW1zKTsKKwl9OworCXJldHVybiBPYmplY3QuYXBwZW5kKGVhc2VJbiwgeworCQllYXNlSW46IGVhc2VJbiwKKwkJZWFzZU91dDogZnVuY3Rpb24ocG9zKXsKKwkJCXJldHVybiAxIC0gdHJhbnNpdGlvbigxIC0gcG9zLCBwYXJhbXMpOworCQl9LAorCQllYXNlSW5PdXQ6IGZ1bmN0aW9uKHBvcyl7CisJCQlyZXR1cm4gKHBvcyA8PSAwLjUgPyB0cmFuc2l0aW9uKDIgKiBwb3MsIHBhcmFtcykgOiAoMiAtIHRyYW5zaXRpb24oMiAqICgxIC0gcG9zKSwgcGFyYW1zKSkpIC8gMjsKKwkJfQorCX0pOworfTsKKworRnguVHJhbnNpdGlvbnMgPSB7CisKKwlsaW5lYXI6IGZ1bmN0aW9uKHplcm8peworCQlyZXR1cm4gemVybzsKKwl9CisKK307CisKKy8vPDEuMmNvbXBhdD4KKworRnguVHJhbnNpdGlvbnMgPSBuZXcgSGFzaChGeC5UcmFuc2l0aW9ucyk7CisKKy8vPC8xLjJjb21wYXQ+CisKK0Z4LlRyYW5zaXRpb25zLmV4dGVuZCA9IGZ1bmN0aW9uKHRyYW5zaXRpb25zKXsKKwlmb3IgKHZhciB0cmFuc2l0aW9uIGluIHRyYW5zaXRpb25zKSBGeC5UcmFuc2l0aW9uc1t0cmFuc2l0aW9uXSA9IG5ldyBGeC5UcmFuc2l0aW9uKHRyYW5zaXRpb25zW3RyYW5zaXRpb25dKTsKK307CisKK0Z4LlRyYW5zaXRpb25zLmV4dGVuZCh7CisKKwlQb3c6IGZ1bmN0aW9uKHAsIHgpeworCQlyZXR1cm4gTWF0aC5wb3cocCwgeCAmJiB4WzBdIHx8IDYpOworCX0sCisKKwlFeHBvOiBmdW5jdGlvbihwKXsKKwkJcmV0dXJuIE1hdGgucG93KDIsIDggKiAocCAtIDEpKTsKKwl9LAorCisJQ2lyYzogZnVuY3Rpb24ocCl7CisJCXJldHVybiAxIC0gTWF0aC5zaW4oTWF0aC5hY29zKHApKTsKKwl9LAorCisJU2luZTogZnVuY3Rpb24ocCl7CisJCXJldHVybiAxIC0gTWF0aC5jb3MocCAqIE1hdGguUEkgLyAyKTsKKwl9LAorCisJQmFjazogZnVuY3Rpb24ocCwgeCl7CisJCXggPSB4ICYmIHhbMF0gfHwgMS42MTg7CisJCXJldHVybiBNYXRoLnBvdyhwLCAyKSAqICgoeCArIDEpICogcCAtIHgpOworCX0sCisKKwlCb3VuY2U6IGZ1bmN0aW9uKHApeworCQl2YXIgdmFsdWU7CisJCWZvciAodmFyIGEgPSAwLCBiID0gMTsgMTsgYSArPSBiLCBiIC89IDIpeworCQkJaWYgKHAgPj0gKDcgLSA0ICogYSkgLyAxMSl7CisJCQkJdmFsdWUgPSBiICogYiAtIE1hdGgucG93KCgxMSAtIDYgKiBhIC0gMTEgKiBwKSAvIDQsIDIpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXJldHVybiB2YWx1ZTsKKwl9LAorCisJRWxhc3RpYzogZnVuY3Rpb24ocCwgeCl7CisJCXJldHVybiBNYXRoLnBvdygyLCAxMCAqIC0tcCkgKiBNYXRoLmNvcygyMCAqIHAgKiBNYXRoLlBJICogKHggJiYgeFswXSB8fCAxKSAvIDMpOworCX0KKworfSk7CisKK1snUXVhZCcsICdDdWJpYycsICdRdWFydCcsICdRdWludCddLmVhY2goZnVuY3Rpb24odHJhbnNpdGlvbiwgaSl7CisJRnguVHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0gPSBuZXcgRnguVHJhbnNpdGlvbihmdW5jdGlvbihwKXsKKwkJcmV0dXJuIE1hdGgucG93KHAsIGkgKyAyKTsKKwl9KTsKK30pOworCisKKy8qCistLS0KKworbmFtZTogUmVxdWVzdAorCitkZXNjcmlwdGlvbjogUG93ZXJmdWwgYWxsIHB1cnBvc2UgUmVxdWVzdCBDbGFzcy4gVXNlcyBYTUxIVFRQUmVxdWVzdC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuCisKK3JlcXVpcmVzOiBbT2JqZWN0LCBFbGVtZW50LCBDaGFpbiwgRXZlbnRzLCBPcHRpb25zLCBCcm93c2VyXQorCitwcm92aWRlczogUmVxdWVzdAorCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCit2YXIgZW1wdHkgPSBmdW5jdGlvbigpe30sCisJcHJvZ3Jlc3NTdXBwb3J0ID0gKCdvbnByb2dyZXNzJyBpbiBuZXcgQnJvd3Nlci5SZXF1ZXN0KTsKKwordmFyIFJlcXVlc3QgPSB0aGlzLlJlcXVlc3QgPSBuZXcgQ2xhc3MoeworCisJSW1wbGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnNdLAorCisJb3B0aW9uczogey8qCisJCW9uUmVxdWVzdDogZnVuY3Rpb24oKXt9LAorCQlvbkxvYWRzdGFydDogZnVuY3Rpb24oZXZlbnQsIHhocil7fSwKKwkJb25Qcm9ncmVzczogZnVuY3Rpb24oZXZlbnQsIHhocil7fSwKKwkJb25Db21wbGV0ZTogZnVuY3Rpb24oKXt9LAorCQlvbkNhbmNlbDogZnVuY3Rpb24oKXt9LAorCQlvblN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlVGV4dCwgcmVzcG9uc2VYTUwpe30sCisJCW9uRmFpbHVyZTogZnVuY3Rpb24oeGhyKXt9LAorCQlvbkV4Y2VwdGlvbjogZnVuY3Rpb24oaGVhZGVyTmFtZSwgdmFsdWUpe30sCisJCW9uVGltZW91dDogZnVuY3Rpb24oKXt9LAorCQl1c2VyOiAnJywKKwkJcGFzc3dvcmQ6ICcnLCovCisJCXVybDogJycsCisJCWRhdGE6ICcnLAorCQloZWFkZXJzOiB7CisJCQknWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRwUmVxdWVzdCcsCisJCQknQWNjZXB0JzogJ3RleHQvamF2YXNjcmlwdCwgdGV4dC9odG1sLCBhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sLCAqLyonCisJCX0sCisJCWFzeW5jOiB0cnVlLAorCQlmb3JtYXQ6IGZhbHNlLAorCQltZXRob2Q6ICdwb3N0JywKKwkJbGluazogJ2lnbm9yZScsCisJCWlzU3VjY2VzczogbnVsbCwKKwkJZW11bGF0aW9uOiB0cnVlLAorCQl1cmxFbmNvZGVkOiB0cnVlLAorCQllbmNvZGluZzogJ3V0Zi04JywKKwkJZXZhbFNjcmlwdHM6IGZhbHNlLAorCQlldmFsUmVzcG9uc2U6IGZhbHNlLAorCQl0aW1lb3V0OiAwLAorCQlub0NhY2hlOiBmYWxzZQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXsKKwkJdGhpcy54aHIgPSBuZXcgQnJvd3Nlci5SZXF1ZXN0KCk7CisJCXRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTsKKwkJdGhpcy5oZWFkZXJzID0gdGhpcy5vcHRpb25zLmhlYWRlcnM7CisJfSwKKworCW9uU3RhdGVDaGFuZ2U6IGZ1bmN0aW9uKCl7CisJCXZhciB4aHIgPSB0aGlzLnhocjsKKwkJaWYgKHhoci5yZWFkeVN0YXRlICE9IDQgfHwgIXRoaXMucnVubmluZykgcmV0dXJuOworCQl0aGlzLnJ1bm5pbmcgPSBmYWxzZTsKKwkJdGhpcy5zdGF0dXMgPSAwOworCQlGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7CisJCQl2YXIgc3RhdHVzID0geGhyLnN0YXR1czsKKwkJCXRoaXMuc3RhdHVzID0gKHN0YXR1cyA9PSAxMjIzKSA/IDIwNCA6IHN0YXR1czsKKwkJfS5iaW5kKHRoaXMpKTsKKwkJeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGVtcHR5OworCQlpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIub25wcm9ncmVzcyA9IHhoci5vbmxvYWRzdGFydCA9IGVtcHR5OworCQljbGVhclRpbWVvdXQodGhpcy50aW1lcik7CisJCQorCQl0aGlzLnJlc3BvbnNlID0ge3RleHQ6IHRoaXMueGhyLnJlc3BvbnNlVGV4dCB8fCAnJywgeG1sOiB0aGlzLnhoci5yZXNwb25zZVhNTH07CisJCWlmICh0aGlzLm9wdGlvbnMuaXNTdWNjZXNzLmNhbGwodGhpcywgdGhpcy5zdGF0dXMpKQorCQkJdGhpcy5zdWNjZXNzKHRoaXMucmVzcG9uc2UudGV4dCwgdGhpcy5yZXNwb25zZS54bWwpOworCQllbHNlCisJCQl0aGlzLmZhaWx1cmUoKTsKKwl9LAorCisJaXNTdWNjZXNzOiBmdW5jdGlvbigpeworCQl2YXIgc3RhdHVzID0gdGhpcy5zdGF0dXM7CisJCXJldHVybiAoc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDApOworCX0sCisKKwlpc1J1bm5pbmc6IGZ1bmN0aW9uKCl7CisJCXJldHVybiAhIXRoaXMucnVubmluZzsKKwl9LAorCisJcHJvY2Vzc1NjcmlwdHM6IGZ1bmN0aW9uKHRleHQpeworCQlpZiAodGhpcy5vcHRpb25zLmV2YWxSZXNwb25zZSB8fCAoLyhlY21hfGphdmEpc2NyaXB0LykudGVzdCh0aGlzLmdldEhlYWRlcignQ29udGVudC10eXBlJykpKSByZXR1cm4gQnJvd3Nlci5leGVjKHRleHQpOworCQlyZXR1cm4gdGV4dC5zdHJpcFNjcmlwdHModGhpcy5vcHRpb25zLmV2YWxTY3JpcHRzKTsKKwl9LAorCisJc3VjY2VzczogZnVuY3Rpb24odGV4dCwgeG1sKXsKKwkJdGhpcy5vblN1Y2Nlc3ModGhpcy5wcm9jZXNzU2NyaXB0cyh0ZXh0KSwgeG1sKTsKKwl9LAorCisJb25TdWNjZXNzOiBmdW5jdGlvbigpeworCQl0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCBhcmd1bWVudHMpLmZpcmVFdmVudCgnc3VjY2VzcycsIGFyZ3VtZW50cykuY2FsbENoYWluKCk7CisJfSwKKworCWZhaWx1cmU6IGZ1bmN0aW9uKCl7CisJCXRoaXMub25GYWlsdXJlKCk7CisJfSwKKworCW9uRmFpbHVyZTogZnVuY3Rpb24oKXsKKwkJdGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJykuZmlyZUV2ZW50KCdmYWlsdXJlJywgdGhpcy54aHIpOworCX0sCisJCisJbG9hZHN0YXJ0OiBmdW5jdGlvbihldmVudCl7CisJCXRoaXMuZmlyZUV2ZW50KCdsb2Fkc3RhcnQnLCBbZXZlbnQsIHRoaXMueGhyXSk7CisJfSwKKwkKKwlwcm9ncmVzczogZnVuY3Rpb24oZXZlbnQpeworCQl0aGlzLmZpcmVFdmVudCgncHJvZ3Jlc3MnLCBbZXZlbnQsIHRoaXMueGhyXSk7CisJfSwKKwkKKwl0aW1lb3V0OiBmdW5jdGlvbigpeworCQl0aGlzLmZpcmVFdmVudCgndGltZW91dCcsIHRoaXMueGhyKTsKKwl9LAorCisJc2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lLCB2YWx1ZSl7CisJCXRoaXMuaGVhZGVyc1tuYW1lXSA9IHZhbHVlOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZ2V0SGVhZGVyOiBmdW5jdGlvbihuYW1lKXsKKwkJcmV0dXJuIEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXsKKwkJCXJldHVybiB0aGlzLnhoci5nZXRSZXNwb25zZUhlYWRlcihuYW1lKTsKKwkJfS5iaW5kKHRoaXMpKTsKKwl9LAorCisJY2hlY2s6IGZ1bmN0aW9uKCl7CisJCWlmICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdHJ1ZTsKKwkJc3dpdGNoICh0aGlzLm9wdGlvbnMubGluayl7CisJCQljYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1cm4gdHJ1ZTsKKwkJCWNhc2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNzKGFyZ3VtZW50cywgdGhpcykpOyByZXR1cm4gZmFsc2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0sCisJCisJc2VuZDogZnVuY3Rpb24ob3B0aW9ucyl7CisJCWlmICghdGhpcy5jaGVjayhvcHRpb25zKSkgcmV0dXJuIHRoaXM7CisKKwkJdGhpcy5vcHRpb25zLmlzU3VjY2VzcyA9IHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MgfHwgdGhpcy5pc1N1Y2Nlc3M7CisJCXRoaXMucnVubmluZyA9IHRydWU7CisKKwkJdmFyIHR5cGUgPSB0eXBlT2Yob3B0aW9ucyk7CisJCWlmICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ2VsZW1lbnQnKSBvcHRpb25zID0ge2RhdGE6IG9wdGlvbnN9OworCisJCXZhciBvbGQgPSB0aGlzLm9wdGlvbnM7CisJCW9wdGlvbnMgPSBPYmplY3QuYXBwZW5kKHtkYXRhOiBvbGQuZGF0YSwgdXJsOiBvbGQudXJsLCBtZXRob2Q6IG9sZC5tZXRob2R9LCBvcHRpb25zKTsKKwkJdmFyIGRhdGEgPSBvcHRpb25zLmRhdGEsIHVybCA9IFN0cmluZyhvcHRpb25zLnVybCksIG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kLnRvTG93ZXJDYXNlKCk7CisKKwkJc3dpdGNoICh0eXBlT2YoZGF0YSkpeworCQkJY2FzZSAnZWxlbWVudCc6IGRhdGEgPSBkb2N1bWVudC5pZChkYXRhKS50b1F1ZXJ5U3RyaW5nKCk7IGJyZWFrOworCQkJY2FzZSAnb2JqZWN0JzogY2FzZSAnaGFzaCc6IGRhdGEgPSBPYmplY3QudG9RdWVyeVN0cmluZyhkYXRhKTsKKwkJfQorCisJCWlmICh0aGlzLm9wdGlvbnMuZm9ybWF0KXsKKwkJCXZhciBmb3JtYXQgPSAnZm9ybWF0PScgKyB0aGlzLm9wdGlvbnMuZm9ybWF0OworCQkJZGF0YSA9IChkYXRhKSA/IGZvcm1hdCArICcmJyArIGRhdGEgOiBmb3JtYXQ7CisJCX0KKworCQlpZiAodGhpcy5vcHRpb25zLmVtdWxhdGlvbiAmJiAhWydnZXQnLCAncG9zdCddLmNvbnRhaW5zKG1ldGhvZCkpeworCQkJdmFyIF9tZXRob2QgPSAnX21ldGhvZD0nICsgbWV0aG9kOworCQkJZGF0YSA9IChkYXRhKSA/IF9tZXRob2QgKyAnJicgKyBkYXRhIDogX21ldGhvZDsKKwkJCW1ldGhvZCA9ICdwb3N0JzsKKwkJfQorCisJCWlmICh0aGlzLm9wdGlvbnMudXJsRW5jb2RlZCAmJiBbJ3Bvc3QnLCAncHV0J10uY29udGFpbnMobWV0aG9kKSl7CisJCQl2YXIgZW5jb2RpbmcgPSAodGhpcy5vcHRpb25zLmVuY29kaW5nKSA/ICc7IGNoYXJzZXQ9JyArIHRoaXMub3B0aW9ucy5lbmNvZGluZyA6ICcnOworCQkJdGhpcy5oZWFkZXJzWydDb250ZW50LXR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnICsgZW5jb2Rpbmc7CisJCX0KKworCQlpZiAoIXVybCkgdXJsID0gZG9jdW1lbnQubG9jYXRpb24ucGF0aG5hbWU7CisJCQorCQl2YXIgdHJpbVBvc2l0aW9uID0gdXJsLmxhc3RJbmRleE9mKCcvJyk7CisJCWlmICh0cmltUG9zaXRpb24gPiAtMSAmJiAodHJpbVBvc2l0aW9uID0gdXJsLmluZGV4T2YoJyMnKSkgPiAtMSkgdXJsID0gdXJsLnN1YnN0cigwLCB0cmltUG9zaXRpb24pOworCisJCWlmICh0aGlzLm9wdGlvbnMubm9DYWNoZSkKKwkJCXVybCArPSAodXJsLmNvbnRhaW5zKCc/JykgPyAnJicgOiAnPycpICsgU3RyaW5nLnVuaXF1ZUlEKCk7CisKKwkJaWYgKGRhdGEgJiYgbWV0aG9kID09ICdnZXQnKXsKKwkJCXVybCArPSAodXJsLmNvbnRhaW5zKCc/JykgPyAnJicgOiAnPycpICsgZGF0YTsKKwkJCWRhdGEgPSBudWxsOworCQl9CisKKwkJdmFyIHhociA9IHRoaXMueGhyOworCQlpZiAocHJvZ3Jlc3NTdXBwb3J0KXsKKwkJCXhoci5vbmxvYWRzdGFydCA9IHRoaXMubG9hZHN0YXJ0LmJpbmQodGhpcyk7CisJCQl4aHIub25wcm9ncmVzcyA9IHRoaXMucHJvZ3Jlc3MuYmluZCh0aGlzKTsKKwkJfQorCisJCXhoci5vcGVuKG1ldGhvZC50b1VwcGVyQ2FzZSgpLCB1cmwsIHRoaXMub3B0aW9ucy5hc3luYywgdGhpcy5vcHRpb25zLnVzZXIsIHRoaXMub3B0aW9ucy5wYXNzd29yZCk7CisJCWlmICh0aGlzLm9wdGlvbnMudXNlciAmJiAnd2l0aENyZWRlbnRpYWxzJyBpbiB4aHIpIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlOworCQkKKwkJeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpOworCisJCU9iamVjdC5lYWNoKHRoaXMuaGVhZGVycywgZnVuY3Rpb24odmFsdWUsIGtleSl7CisJCQl0cnkgeworCQkJCXhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsdWUpOworCQkJfSBjYXRjaCAoZSl7CisJCQkJdGhpcy5maXJlRXZlbnQoJ2V4Y2VwdGlvbicsIFtrZXksIHZhbHVlXSk7CisJCQl9CisJCX0sIHRoaXMpOworCisJCXRoaXMuZmlyZUV2ZW50KCdyZXF1ZXN0Jyk7CisJCXhoci5zZW5kKGRhdGEpOworCQlpZiAoIXRoaXMub3B0aW9ucy5hc3luYykgdGhpcy5vblN0YXRlQ2hhbmdlKCk7CisJCWlmICh0aGlzLm9wdGlvbnMudGltZW91dCkgdGhpcy50aW1lciA9IHRoaXMudGltZW91dC5kZWxheSh0aGlzLm9wdGlvbnMudGltZW91dCwgdGhpcyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwljYW5jZWw6IGZ1bmN0aW9uKCl7CisJCWlmICghdGhpcy5ydW5uaW5nKSByZXR1cm4gdGhpczsKKwkJdGhpcy5ydW5uaW5nID0gZmFsc2U7CisJCXZhciB4aHIgPSB0aGlzLnhocjsKKwkJeGhyLmFib3J0KCk7CisJCWNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTsKKwkJeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGVtcHR5OworCQlpZiAocHJvZ3Jlc3NTdXBwb3J0KSB4aHIub25wcm9ncmVzcyA9IHhoci5vbmxvYWRzdGFydCA9IGVtcHR5OworCQl0aGlzLnhociA9IG5ldyBCcm93c2VyLlJlcXVlc3QoKTsKKwkJdGhpcy5maXJlRXZlbnQoJ2NhbmNlbCcpOworCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCit2YXIgbWV0aG9kcyA9IHt9OworWydnZXQnLCAncG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ0dFVCcsICdQT1NUJywgJ1BVVCcsICdERUxFVEUnXS5lYWNoKGZ1bmN0aW9uKG1ldGhvZCl7CisJbWV0aG9kc1ttZXRob2RdID0gZnVuY3Rpb24oZGF0YSl7CisJCXZhciBvYmplY3QgPSB7CisJCQltZXRob2Q6IG1ldGhvZAorCQl9OworCQlpZiAoZGF0YSAhPSBudWxsKSBvYmplY3QuZGF0YSA9IGRhdGE7CisJCXJldHVybiB0aGlzLnNlbmQob2JqZWN0KTsKKwl9OworfSk7CisKK1JlcXVlc3QuaW1wbGVtZW50KG1ldGhvZHMpOworCitFbGVtZW50LlByb3BlcnRpZXMuc2VuZCA9IHsKKworCXNldDogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXZhciBzZW5kID0gdGhpcy5nZXQoJ3NlbmQnKS5jYW5jZWwoKTsKKwkJc2VuZC5zZXRPcHRpb25zKG9wdGlvbnMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZ2V0OiBmdW5jdGlvbigpeworCQl2YXIgc2VuZCA9IHRoaXMucmV0cmlldmUoJ3NlbmQnKTsKKwkJaWYgKCFzZW5kKXsKKwkJCXNlbmQgPSBuZXcgUmVxdWVzdCh7CisJCQkJZGF0YTogdGhpcywgbGluazogJ2NhbmNlbCcsIG1ldGhvZDogdGhpcy5nZXQoJ21ldGhvZCcpIHx8ICdwb3N0JywgdXJsOiB0aGlzLmdldCgnYWN0aW9uJykKKwkJCX0pOworCQkJdGhpcy5zdG9yZSgnc2VuZCcsIHNlbmQpOworCQl9CisJCXJldHVybiBzZW5kOworCX0KKworfTsKKworRWxlbWVudC5pbXBsZW1lbnQoeworCisJc2VuZDogZnVuY3Rpb24odXJsKXsKKwkJdmFyIHNlbmRlciA9IHRoaXMuZ2V0KCdzZW5kJyk7CisJCXNlbmRlci5zZW5kKHtkYXRhOiB0aGlzLCB1cmw6IHVybCB8fCBzZW5kZXIub3B0aW9ucy51cmx9KTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKworfSkoKTsKKworLyoKKy0tLQorCituYW1lOiBSZXF1ZXN0LkhUTUwKKworZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIGludGVyYWN0aW5nIHdpdGggSFRNTCByZXNwb25zZXMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCityZXF1aXJlczogW0VsZW1lbnQsIFJlcXVlc3RdCisKK3Byb3ZpZGVzOiBSZXF1ZXN0LkhUTUwKKworLi4uCisqLworCitSZXF1ZXN0LkhUTUwgPSBuZXcgQ2xhc3MoeworCisJRXh0ZW5kczogUmVxdWVzdCwKKworCW9wdGlvbnM6IHsKKwkJdXBkYXRlOiBmYWxzZSwKKwkJYXBwZW5kOiBmYWxzZSwKKwkJZXZhbFNjcmlwdHM6IHRydWUsCisJCWZpbHRlcjogZmFsc2UsCisJCWhlYWRlcnM6IHsKKwkJCUFjY2VwdDogJ3RleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8qJworCQl9CisJfSwKKworCXN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQpeworCQl2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywgcmVzcG9uc2UgPSB0aGlzLnJlc3BvbnNlOworCisJCXJlc3BvbnNlLmh0bWwgPSB0ZXh0LnN0cmlwU2NyaXB0cyhmdW5jdGlvbihzY3JpcHQpeworCQkJcmVzcG9uc2UuamF2YXNjcmlwdCA9IHNjcmlwdDsKKwkJfSk7CisKKwkJdmFyIG1hdGNoID0gcmVzcG9uc2UuaHRtbC5tYXRjaCgvPGJvZHlbXj5dKj4oW1xzXFNdKj8pPFwvYm9keT4vaSk7CisJCWlmIChtYXRjaCkgcmVzcG9uc2UuaHRtbCA9IG1hdGNoWzFdOworCQl2YXIgdGVtcCA9IG5ldyBFbGVtZW50KCdkaXYnKS5zZXQoJ2h0bWwnLCByZXNwb25zZS5odG1sKTsKKworCQlyZXNwb25zZS50cmVlID0gdGVtcC5jaGlsZE5vZGVzOworCQlyZXNwb25zZS5lbGVtZW50cyA9IHRlbXAuZ2V0RWxlbWVudHMoJyonKTsKKworCQlpZiAob3B0aW9ucy5maWx0ZXIpIHJlc3BvbnNlLnRyZWUgPSByZXNwb25zZS5lbGVtZW50cy5maWx0ZXIob3B0aW9ucy5maWx0ZXIpOworCQlpZiAob3B0aW9ucy51cGRhdGUpIGRvY3VtZW50LmlkKG9wdGlvbnMudXBkYXRlKS5lbXB0eSgpLnNldCgnaHRtbCcsIHJlc3BvbnNlLmh0bWwpOworCQllbHNlIGlmIChvcHRpb25zLmFwcGVuZCkgZG9jdW1lbnQuaWQob3B0aW9ucy5hcHBlbmQpLmFkb3B0KHRlbXAuZ2V0Q2hpbGRyZW4oKSk7CisJCWlmIChvcHRpb25zLmV2YWxTY3JpcHRzKSBCcm93c2VyLmV4ZWMocmVzcG9uc2UuamF2YXNjcmlwdCk7CisKKwkJdGhpcy5vblN1Y2Nlc3MocmVzcG9uc2UudHJlZSwgcmVzcG9uc2UuZWxlbWVudHMsIHJlc3BvbnNlLmh0bWwsIHJlc3BvbnNlLmphdmFzY3JpcHQpOworCX0KKworfSk7CisKK0VsZW1lbnQuUHJvcGVydGllcy5sb2FkID0geworCisJc2V0OiBmdW5jdGlvbihvcHRpb25zKXsKKwkJdmFyIGxvYWQgPSB0aGlzLmdldCgnbG9hZCcpLmNhbmNlbCgpOworCQlsb2FkLnNldE9wdGlvbnMob3B0aW9ucyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXQ6IGZ1bmN0aW9uKCl7CisJCXZhciBsb2FkID0gdGhpcy5yZXRyaWV2ZSgnbG9hZCcpOworCQlpZiAoIWxvYWQpeworCQkJbG9hZCA9IG5ldyBSZXF1ZXN0LkhUTUwoe2RhdGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCB1cGRhdGU6IHRoaXMsIG1ldGhvZDogJ2dldCd9KTsKKwkJCXRoaXMuc3RvcmUoJ2xvYWQnLCBsb2FkKTsKKwkJfQorCQlyZXR1cm4gbG9hZDsKKwl9CisKK307CisKK0VsZW1lbnQuaW1wbGVtZW50KHsKKworCWxvYWQ6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZ2V0KCdsb2FkJykuc2VuZChBcnJheS5saW5rKGFyZ3VtZW50cywge2RhdGE6IFR5cGUuaXNPYmplY3QsIHVybDogVHlwZS5pc1N0cmluZ30pKTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKworCisvKgorLS0tCisKK25hbWU6IEpTT04KKworZGVzY3JpcHRpb246IEpTT04gZW5jb2RlciBhbmQgZGVjb2Rlci4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuCisKK1NlZSBBbHNvOiA8aHR0cDovL3d3dy5qc29uLm9yZy8+CisKK3JlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgTnVtYmVyLCBGdW5jdGlvbl0KKworcHJvdmlkZXM6IEpTT04KKworLi4uCisqLworCitpZiAodHlwZW9mIEpTT04gPT0gJ3VuZGVmaW5lZCcpIHRoaXMuSlNPTiA9IHt9OworCisvLzwxLjJjb21wYXQ+CisKK0pTT04gPSBuZXcgSGFzaCh7CisJc3RyaW5naWZ5OiBKU09OLnN0cmluZ2lmeSwKKwlwYXJzZTogSlNPTi5wYXJzZQorfSk7CisKKy8vPC8xLjJjb21wYXQ+CisKKyhmdW5jdGlvbigpeworCit2YXIgc3BlY2lhbCA9IHsnXGInOiAnXFxiJywgJ1x0JzogJ1xcdCcsICdcbic6ICdcXG4nLCAnXGYnOiAnXFxmJywgJ1xyJzogJ1xccicsICciJyA6ICdcXCInLCAnXFwnOiAnXFxcXCd9OworCit2YXIgZXNjYXBlID0gZnVuY3Rpb24oY2hyKXsKKwlyZXR1cm4gc3BlY2lhbFtjaHJdIHx8ICdcXHUnICsgKCcwMDAwJyArIGNoci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpOworfTsKKworSlNPTi52YWxpZGF0ZSA9IGZ1bmN0aW9uKHN0cmluZyl7CisJc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcKD86WyJcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywgJ0AnKS4KKwkJCQkJcmVwbGFjZSgvIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/L2csICddJykuCisJCQkJCXJlcGxhY2UoLyg/Ol58OnwsKSg/OlxzKlxbKSsvZywgJycpOworCisJcmV0dXJuICgvXltcXSw6e31cc10qJC8pLnRlc3Qoc3RyaW5nKTsKK307CisKK0pTT04uZW5jb2RlID0gSlNPTi5zdHJpbmdpZnkgPyBmdW5jdGlvbihvYmopeworCXJldHVybiBKU09OLnN0cmluZ2lmeShvYmopOworfSA6IGZ1bmN0aW9uKG9iail7CisJaWYgKG9iaiAmJiBvYmoudG9KU09OKSBvYmogPSBvYmoudG9KU09OKCk7CisKKwlzd2l0Y2ggKHR5cGVPZihvYmopKXsKKwkJY2FzZSAnc3RyaW5nJzoKKwkJCXJldHVybiAnIicgKyBvYmoucmVwbGFjZSgvW1x4MDAtXHgxZlxcIl0vZywgZXNjYXBlKSArICciJzsKKwkJY2FzZSAnYXJyYXknOgorCQkJcmV0dXJuICdbJyArIG9iai5tYXAoSlNPTi5lbmNvZGUpLmNsZWFuKCkgKyAnXSc7CisJCWNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOgorCQkJdmFyIHN0cmluZyA9IFtdOworCQkJT2JqZWN0LmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5KXsKKwkJCQl2YXIganNvbiA9IEpTT04uZW5jb2RlKHZhbHVlKTsKKwkJCQlpZiAoanNvbikgc3RyaW5nLnB1c2goSlNPTi5lbmNvZGUoa2V5KSArICc6JyArIGpzb24pOworCQkJfSk7CisJCQlyZXR1cm4gJ3snICsgc3RyaW5nICsgJ30nOworCQljYXNlICdudW1iZXInOiBjYXNlICdib29sZWFuJzogcmV0dXJuICcnICsgb2JqOworCQljYXNlICdudWxsJzogcmV0dXJuICdudWxsJzsKKwl9CisKKwlyZXR1cm4gbnVsbDsKK307CisKK0pTT04uZGVjb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBzZWN1cmUpeworCWlmICghc3RyaW5nIHx8IHR5cGVPZihzdHJpbmcpICE9ICdzdHJpbmcnKSByZXR1cm4gbnVsbDsKKworCWlmIChzZWN1cmUgfHwgSlNPTi5zZWN1cmUpeworCQlpZiAoSlNPTi5wYXJzZSkgcmV0dXJuIEpTT04ucGFyc2Uoc3RyaW5nKTsKKwkJaWYgKCFKU09OLnZhbGlkYXRlKHN0cmluZykpIHRocm93IG5ldyBFcnJvcignSlNPTiBjb3VsZCBub3QgZGVjb2RlIHRoZSBpbnB1dDsgc2VjdXJpdHkgaXMgZW5hYmxlZCBhbmQgdGhlIHZhbHVlIGlzIG5vdCBzZWN1cmUuJyk7CisJfQorCisJcmV0dXJuIGV2YWwoJygnICsgc3RyaW5nICsgJyknKTsKK307CisKK30pKCk7CisKKworLyoKKy0tLQorCituYW1lOiBSZXF1ZXN0LkpTT04KKworZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBKU09OIGRhdGEuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCityZXF1aXJlczogW1JlcXVlc3QsIEpTT05dCisKK3Byb3ZpZGVzOiBSZXF1ZXN0LkpTT04KKworLi4uCisqLworCitSZXF1ZXN0LkpTT04gPSBuZXcgQ2xhc3MoeworCisJRXh0ZW5kczogUmVxdWVzdCwKKworCW9wdGlvbnM6IHsKKwkJLypvbkVycm9yOiBmdW5jdGlvbih0ZXh0LCBlcnJvcil7fSwqLworCQlzZWN1cmU6IHRydWUKKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXRoaXMucGFyZW50KG9wdGlvbnMpOworCQlPYmplY3QuYXBwZW5kKHRoaXMuaGVhZGVycywgeworCQkJJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJywKKwkJCSdYLVJlcXVlc3QnOiAnSlNPTicKKwkJfSk7CisJfSwKKworCXN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQpeworCQl2YXIganNvbjsKKwkJdHJ5IHsKKwkJCWpzb24gPSB0aGlzLnJlc3BvbnNlLmpzb24gPSBKU09OLmRlY29kZSh0ZXh0LCB0aGlzLm9wdGlvbnMuc2VjdXJlKTsKKwkJfSBjYXRjaCAoZXJyb3IpeworCQkJdGhpcy5maXJlRXZlbnQoJ2Vycm9yJywgW3RleHQsIGVycm9yXSk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKGpzb24gPT0gbnVsbCkgdGhpcy5vbkZhaWx1cmUoKTsKKwkJZWxzZSB0aGlzLm9uU3VjY2Vzcyhqc29uLCB0ZXh0KTsKKwl9CisKK30pOworCisKKy8qCistLS0KKworbmFtZTogQ29va2llCisKK2Rlc2NyaXB0aW9uOiBDbGFzcyBmb3IgY3JlYXRpbmcsIHJlYWRpbmcsIGFuZCBkZWxldGluZyBicm93c2VyIENvb2tpZXMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCitjcmVkaXRzOgorICAtIEJhc2VkIG9uIHRoZSBmdW5jdGlvbnMgYnkgUGV0ZXItUGF1bCBLb2NoIChodHRwOi8vcXVpcmtzbW9kZS5vcmcpLgorCityZXF1aXJlczogW09wdGlvbnMsIEJyb3dzZXJdCisKK3Byb3ZpZGVzOiBDb29raWUKKworLi4uCisqLworCit2YXIgQ29va2llID0gbmV3IENsYXNzKHsKKworCUltcGxlbWVudHM6IE9wdGlvbnMsCisKKwlvcHRpb25zOiB7CisJCXBhdGg6ICcvJywKKwkJZG9tYWluOiBmYWxzZSwKKwkJZHVyYXRpb246IGZhbHNlLAorCQlzZWN1cmU6IGZhbHNlLAorCQlkb2N1bWVudDogZG9jdW1lbnQsCisJCWVuY29kZTogdHJ1ZQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihrZXksIG9wdGlvbnMpeworCQl0aGlzLmtleSA9IGtleTsKKwkJdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpOworCX0sCisKKwl3cml0ZTogZnVuY3Rpb24odmFsdWUpeworCQlpZiAodGhpcy5vcHRpb25zLmVuY29kZSkgdmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpOworCQlpZiAodGhpcy5vcHRpb25zLmRvbWFpbikgdmFsdWUgKz0gJzsgZG9tYWluPScgKyB0aGlzLm9wdGlvbnMuZG9tYWluOworCQlpZiAodGhpcy5vcHRpb25zLnBhdGgpIHZhbHVlICs9ICc7IHBhdGg9JyArIHRoaXMub3B0aW9ucy5wYXRoOworCQlpZiAodGhpcy5vcHRpb25zLmR1cmF0aW9uKXsKKwkJCXZhciBkYXRlID0gbmV3IERhdGUoKTsKKwkJCWRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIDI0ICogNjAgKiA2MCAqIDEwMDApOworCQkJdmFsdWUgKz0gJzsgZXhwaXJlcz0nICsgZGF0ZS50b0dNVFN0cmluZygpOworCQl9CisJCWlmICh0aGlzLm9wdGlvbnMuc2VjdXJlKSB2YWx1ZSArPSAnOyBzZWN1cmUnOworCQl0aGlzLm9wdGlvbnMuZG9jdW1lbnQuY29va2llID0gdGhpcy5rZXkgKyAnPScgKyB2YWx1ZTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXJlYWQ6IGZ1bmN0aW9uKCl7CisJCXZhciB2YWx1ZSA9IHRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29raWUubWF0Y2goJyg/Ol58OylcXHMqJyArIHRoaXMua2V5LmVzY2FwZVJlZ0V4cCgpICsgJz0oW147XSopJyk7CisJCXJldHVybiAodmFsdWUpID8gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlWzFdKSA6IG51bGw7CisJfSwKKworCWRpc3Bvc2U6IGZ1bmN0aW9uKCl7CisJCW5ldyBDb29raWUodGhpcy5rZXksIE9iamVjdC5tZXJnZSh7fSwgdGhpcy5vcHRpb25zLCB7ZHVyYXRpb246IC0xfSkpLndyaXRlKCcnKTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKworQ29va2llLndyaXRlID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgb3B0aW9ucyl7CisJcmV0dXJuIG5ldyBDb29raWUoa2V5LCBvcHRpb25zKS53cml0ZSh2YWx1ZSk7Cit9OworCitDb29raWUucmVhZCA9IGZ1bmN0aW9uKGtleSl7CisJcmV0dXJuIG5ldyBDb29raWUoa2V5KS5yZWFkKCk7Cit9OworCitDb29raWUuZGlzcG9zZSA9IGZ1bmN0aW9uKGtleSwgb3B0aW9ucyl7CisJcmV0dXJuIG5ldyBDb29raWUoa2V5LCBvcHRpb25zKS5kaXNwb3NlKCk7Cit9OworCisKKy8qCistLS0KKworbmFtZTogRE9NUmVhZHkKKworZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBjdXN0b20gZXZlbnQgZG9tcmVhZHkuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCityZXF1aXJlczogW0Jyb3dzZXIsIEVsZW1lbnQsIEVsZW1lbnQuRXZlbnRdCisKK3Byb3ZpZGVzOiBbRE9NUmVhZHksIERvbVJlYWR5XQorCisuLi4KKyovCisKKyhmdW5jdGlvbih3aW5kb3csIGRvY3VtZW50KXsKKwordmFyIHJlYWR5LAorCWxvYWRlZCwKKwljaGVja3MgPSBbXSwKKwlzaG91bGRQb2xsLAorCXRpbWVyLAorCXRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisKK3ZhciBkb21yZWFkeSA9IGZ1bmN0aW9uKCl7CisJY2xlYXJUaW1lb3V0KHRpbWVyKTsKKwlpZiAocmVhZHkpIHJldHVybjsKKwlCcm93c2VyLmxvYWRlZCA9IHJlYWR5ID0gdHJ1ZTsKKwlkb2N1bWVudC5yZW1vdmVMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGRvbXJlYWR5KS5yZW1vdmVMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTsKKwkKKwlkb2N1bWVudC5maXJlRXZlbnQoJ2RvbXJlYWR5Jyk7CisJd2luZG93LmZpcmVFdmVudCgnZG9tcmVhZHknKTsKK307CisKK3ZhciBjaGVjayA9IGZ1bmN0aW9uKCl7CisJZm9yICh2YXIgaSA9IGNoZWNrcy5sZW5ndGg7IGktLTspIGlmIChjaGVja3NbaV0oKSl7CisJCWRvbXJlYWR5KCk7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9OworCit2YXIgcG9sbCA9IGZ1bmN0aW9uKCl7CisJY2xlYXJUaW1lb3V0KHRpbWVyKTsKKwlpZiAoIWNoZWNrKCkpIHRpbWVyID0gc2V0VGltZW91dChwb2xsLCAxMCk7Cit9OworCitkb2N1bWVudC5hZGRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGRvbXJlYWR5KTsKKworLyo8bHRJRTg+Ki8KKy8vIGRvU2Nyb2xsIHRlY2huaXF1ZSBieSBEaWVnbyBQZXJpbmkgaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0lFQ29udGVudExvYWRlZC8KKy8vIHRlc3RFbGVtZW50LmRvU2Nyb2xsKCkgdGhyb3dzIHdoZW4gdGhlIERPTSBpcyBub3QgcmVhZHksIG9ubHkgaW4gdGhlIHRvcCB3aW5kb3cKK3ZhciBkb1Njcm9sbFdvcmtzID0gZnVuY3Rpb24oKXsKKwl0cnkgeworCQl0ZXN0RWxlbWVudC5kb1Njcm9sbCgpOworCQlyZXR1cm4gdHJ1ZTsKKwl9IGNhdGNoIChlKXt9CisJcmV0dXJuIGZhbHNlOworfQorLy8gSWYgZG9TY3JvbGwgd29ya3MgYWxyZWFkeSwgaXQgY2FuJ3QgYmUgdXNlZCB0byBkZXRlcm1pbmUgZG9tcmVhZHkKKy8vICAgZS5nLiBpbiBhbiBpZnJhbWUKK2lmICh0ZXN0RWxlbWVudC5kb1Njcm9sbCAmJiAhZG9TY3JvbGxXb3JrcygpKXsKKwljaGVja3MucHVzaChkb1Njcm9sbFdvcmtzKTsKKwlzaG91bGRQb2xsID0gdHJ1ZTsKK30KKy8qPC9sdElFOD4qLworCitpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSkgY2hlY2tzLnB1c2goZnVuY3Rpb24oKXsKKwl2YXIgc3RhdGUgPSBkb2N1bWVudC5yZWFkeVN0YXRlOworCXJldHVybiAoc3RhdGUgPT0gJ2xvYWRlZCcgfHwgc3RhdGUgPT0gJ2NvbXBsZXRlJyk7Cit9KTsKKworaWYgKCdvbnJlYWR5c3RhdGVjaGFuZ2UnIGluIGRvY3VtZW50KSBkb2N1bWVudC5hZGRMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTsKK2Vsc2Ugc2hvdWxkUG9sbCA9IHRydWU7CisKK2lmIChzaG91bGRQb2xsKSBwb2xsKCk7CisKK0VsZW1lbnQuRXZlbnRzLmRvbXJlYWR5ID0geworCW9uQWRkOiBmdW5jdGlvbihmbil7CisJCWlmIChyZWFkeSkgZm4uY2FsbCh0aGlzKTsKKwl9Cit9OworCisvLyBNYWtlIHN1cmUgdGhhdCBkb21yZWFkeSBmaXJlcyBiZWZvcmUgbG9hZAorRWxlbWVudC5FdmVudHMubG9hZCA9IHsKKwliYXNlOiAnbG9hZCcsCisJb25BZGQ6IGZ1bmN0aW9uKGZuKXsKKwkJaWYgKGxvYWRlZCAmJiB0aGlzID09IHdpbmRvdykgZm4uY2FsbCh0aGlzKTsKKwl9LAorCWNvbmRpdGlvbjogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMgPT0gd2luZG93KXsKKwkJCWRvbXJlYWR5KCk7CisJCQlkZWxldGUgRWxlbWVudC5FdmVudHMubG9hZDsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9OworCisvLyBUaGlzIGlzIGJhc2VkIG9uIHRoZSBjdXN0b20gbG9hZCBldmVudAord2luZG93LmFkZEV2ZW50KCdsb2FkJywgZnVuY3Rpb24oKXsKKwlsb2FkZWQgPSB0cnVlOworfSk7CisKK30pKHdpbmRvdywgZG9jdW1lbnQpOworCisKKy8qCistLS0KKworbmFtZTogU3dpZmYKKworZGVzY3JpcHRpb246IFdyYXBwZXIgZm9yIGVtYmVkZGluZyBTV0YgbW92aWVzLiBTdXBwb3J0cyBFeHRlcm5hbCBJbnRlcmZhY2UgQ29tbXVuaWNhdGlvbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuCisKK2NyZWRpdHM6CisgIC0gRmxhc2ggZGV0ZWN0aW9uICYgSW50ZXJuZXQgRXhwbG9yZXIgKyBGbGFzaCBQbGF5ZXIgOSBmaXggaW5zcGlyZWQgYnkgU1dGT2JqZWN0LgorCityZXF1aXJlczogW09wdGlvbnMsIE9iamVjdCwgRWxlbWVudF0KKworcHJvdmlkZXM6IFN3aWZmCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK3ZhciBTd2lmZiA9IHRoaXMuU3dpZmYgPSBuZXcgQ2xhc3MoeworCisJSW1wbGVtZW50czogT3B0aW9ucywKKworCW9wdGlvbnM6IHsKKwkJaWQ6IG51bGwsCisJCWhlaWdodDogMSwKKwkJd2lkdGg6IDEsCisJCWNvbnRhaW5lcjogbnVsbCwKKwkJcHJvcGVydGllczoge30sCisJCXBhcmFtczogeworCQkJcXVhbGl0eTogJ2hpZ2gnLAorCQkJYWxsb3dTY3JpcHRBY2Nlc3M6ICdhbHdheXMnLAorCQkJd01vZGU6ICd3aW5kb3cnLAorCQkJc3dMaXZlQ29ubmVjdDogdHJ1ZQorCQl9LAorCQljYWxsQmFja3M6IHt9LAorCQl2YXJzOiB7fQorCX0sCisKKwl0b0VsZW1lbnQ6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLm9iamVjdDsKKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24ocGF0aCwgb3B0aW9ucyl7CisJCXRoaXMuaW5zdGFuY2UgPSAnU3dpZmZfJyArIFN0cmluZy51bmlxdWVJRCgpOworCisJCXRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTsKKwkJb3B0aW9ucyA9IHRoaXMub3B0aW9uczsKKwkJdmFyIGlkID0gdGhpcy5pZCA9IG9wdGlvbnMuaWQgfHwgdGhpcy5pbnN0YW5jZTsKKwkJdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmlkKG9wdGlvbnMuY29udGFpbmVyKTsKKworCQlTd2lmZi5DYWxsQmFja3NbdGhpcy5pbnN0YW5jZV0gPSB7fTsKKworCQl2YXIgcGFyYW1zID0gb3B0aW9ucy5wYXJhbXMsIHZhcnMgPSBvcHRpb25zLnZhcnMsIGNhbGxCYWNrcyA9IG9wdGlvbnMuY2FsbEJhY2tzOworCQl2YXIgcHJvcGVydGllcyA9IE9iamVjdC5hcHBlbmQoe2hlaWdodDogb3B0aW9ucy5oZWlnaHQsIHdpZHRoOiBvcHRpb25zLndpZHRofSwgb3B0aW9ucy5wcm9wZXJ0aWVzKTsKKworCQl2YXIgc2VsZiA9IHRoaXM7CisKKwkJZm9yICh2YXIgY2FsbEJhY2sgaW4gY2FsbEJhY2tzKXsKKwkJCVN3aWZmLkNhbGxCYWNrc1t0aGlzLmluc3RhbmNlXVtjYWxsQmFja10gPSAoZnVuY3Rpb24ob3B0aW9uKXsKKwkJCQlyZXR1cm4gZnVuY3Rpb24oKXsKKwkJCQkJcmV0dXJuIG9wdGlvbi5hcHBseShzZWxmLm9iamVjdCwgYXJndW1lbnRzKTsKKwkJCQl9OworCQkJfSkoY2FsbEJhY2tzW2NhbGxCYWNrXSk7CisJCQl2YXJzW2NhbGxCYWNrXSA9ICdTd2lmZi5DYWxsQmFja3MuJyArIHRoaXMuaW5zdGFuY2UgKyAnLicgKyBjYWxsQmFjazsKKwkJfQorCisJCXBhcmFtcy5mbGFzaFZhcnMgPSBPYmplY3QudG9RdWVyeVN0cmluZyh2YXJzKTsKKwkJaWYgKEJyb3dzZXIuaWUpeworCQkJcHJvcGVydGllcy5jbGFzc2lkID0gJ2Nsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCc7CisJCQlwYXJhbXMubW92aWUgPSBwYXRoOworCQl9IGVsc2UgeworCQkJcHJvcGVydGllcy50eXBlID0gJ2FwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoJzsKKwkJfQorCQlwcm9wZXJ0aWVzLmRhdGEgPSBwYXRoOworCisJCXZhciBidWlsZCA9ICc8b2JqZWN0IGlkPSInICsgaWQgKyAnIic7CisJCWZvciAodmFyIHByb3BlcnR5IGluIHByb3BlcnRpZXMpIGJ1aWxkICs9ICcgJyArIHByb3BlcnR5ICsgJz0iJyArIHByb3BlcnRpZXNbcHJvcGVydHldICsgJyInOworCQlidWlsZCArPSAnPic7CisJCWZvciAodmFyIHBhcmFtIGluIHBhcmFtcyl7CisJCQlpZiAocGFyYW1zW3BhcmFtXSkgYnVpbGQgKz0gJzxwYXJhbSBuYW1lPSInICsgcGFyYW0gKyAnIiB2YWx1ZT0iJyArIHBhcmFtc1twYXJhbV0gKyAnIiAvPic7CisJCX0KKwkJYnVpbGQgKz0gJzwvb2JqZWN0Pic7CisJCXRoaXMub2JqZWN0ID0gKChjb250YWluZXIpID8gY29udGFpbmVyLmVtcHR5KCkgOiBuZXcgRWxlbWVudCgnZGl2JykpLnNldCgnaHRtbCcsIGJ1aWxkKS5maXJzdENoaWxkOworCX0sCisKKwlyZXBsYWNlczogZnVuY3Rpb24oZWxlbWVudCl7CisJCWVsZW1lbnQgPSBkb2N1bWVudC5pZChlbGVtZW50LCB0cnVlKTsKKwkJZWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0aGlzLnRvRWxlbWVudCgpLCBlbGVtZW50KTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWluamVjdDogZnVuY3Rpb24oZWxlbWVudCl7CisJCWRvY3VtZW50LmlkKGVsZW1lbnQsIHRydWUpLmFwcGVuZENoaWxkKHRoaXMudG9FbGVtZW50KCkpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVtb3RlOiBmdW5jdGlvbigpeworCQlyZXR1cm4gU3dpZmYucmVtb3RlLmFwcGx5KFN3aWZmLCBbdGhpcy50b0VsZW1lbnQoKV0uYXBwZW5kKGFyZ3VtZW50cykpOworCX0KKworfSk7CisKK1N3aWZmLkNhbGxCYWNrcyA9IHt9OworCitTd2lmZi5yZW1vdGUgPSBmdW5jdGlvbihvYmosIGZuKXsKKwl2YXIgcnMgPSBvYmouQ2FsbEZ1bmN0aW9uKCc8aW52b2tlIG5hbWU9IicgKyBmbiArICciIHJldHVybnR5cGU9ImphdmFzY3JpcHQiPicgKyBfX2ZsYXNoX19hcmd1bWVudHNUb1hNTChhcmd1bWVudHMsIDIpICsgJzwvaW52b2tlPicpOworCXJldHVybiBldmFsKHJzKTsKK307CisKK30pKCk7CisKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xpYnJhcmllcy9Nb29Ub29scy1Db3JlLTEuNi4wLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGlicmFyaWVzL01vb1Rvb2xzLUNvcmUtMS42LjAuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM1YzU0ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xpYnJhcmllcy9Nb29Ub29scy1Db3JlLTEuNi4wLmpzCkBAIC0wLDAgKzEsNjM4MiBAQAorLyogTW9vVG9vbHM6IHRoZSBqYXZhc2NyaXB0IGZyYW1ld29yay4gbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTggW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vbW9vdG9vbHMubmV0LykuKi8gCisvKiEKK1dlYiBCdWlsZDogaHR0cHM6Ly9tb290b29scy5uZXQvY29yZS9idWlsZGVyL2U0MjZhOWFlNzE2N2M1ODA3YjE3M2Q1ZGVmZjY3M2ZjCisqLworLyoKKy0tLQorCituYW1lOiBDb3JlCisKK2Rlc2NyaXB0aW9uOiBUaGUgaGVhcnQgb2YgTW9vVG9vbHMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCitjb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE1IFtWYWxlcmlvIFByb2lldHRpXShodHRwczovL2dpdGh1Yi5jb20va2FtaWNhbmUvKS4KKworYXV0aG9yczogVGhlIE1vb1Rvb2xzIHByb2R1Y3Rpb24gdGVhbSAoaHR0cDovL21vb3Rvb2xzLm5ldC9kZXZlbG9wZXJzLykKKworaW5zcGlyYXRpb246CisgIC0gQ2xhc3MgaW1wbGVtZW50YXRpb24gaW5zcGlyZWQgYnkgW0Jhc2UuanNdKGh0dHA6Ly9kZWFuLmVkd2FyZHMubmFtZS93ZWJsb2cvMjAwNi8wMy9iYXNlLykgQ29weXJpZ2h0IChjKSAyMDA2IERlYW4gRWR3YXJkcywgW0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZV0oaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2xncGwtbGljZW5zZS5waHApCisgIC0gU29tZSBmdW5jdGlvbmFsaXR5IGluc3BpcmVkIGJ5IFtQcm90b3R5cGUuanNdKGh0dHA6Ly9wcm90b3R5cGVqcy5vcmcpIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IFNhbSBTdGVwaGVuc29uLCBbTUlUIExpY2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHApCisKK3Byb3ZpZGVzOiBbQ29yZSwgTW9vVG9vbHMsIFR5cGUsIHR5cGVPZiwgaW5zdGFuY2VPZiwgTmF0aXZlXQorCisuLi4KKyovCisvKiEgTW9vVG9vbHM6IHRoZSBqYXZhc2NyaXB0IGZyYW1ld29yay4gbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuIGNvcHlyaWdodDogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTUgW1ZhbGVyaW8gUHJvaWV0dGldKGh0dHBzOi8vZ2l0aHViLmNvbS9rYW1pY2FuZS8pLiovCisoZnVuY3Rpb24oKXsKKwordGhpcy5Nb29Ub29scyA9IHsKKwl2ZXJzaW9uOiAnMS42LjAnLAorCWJ1aWxkOiAnNTI5NDIyODcyYWRmZmY0MDFiOTAxYjhiNmM3Y2E1MTE0ZWU5NWUyYicKK307CisKKy8vIHR5cGVPZiwgaW5zdGFuY2VPZgorCit2YXIgdHlwZU9mID0gdGhpcy50eXBlT2YgPSBmdW5jdGlvbihpdGVtKXsKKwlpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gJ251bGwnOworCWlmIChpdGVtLiRmYW1pbHkgIT0gbnVsbCkgcmV0dXJuIGl0ZW0uJGZhbWlseSgpOworCisJaWYgKGl0ZW0ubm9kZU5hbWUpeworCQlpZiAoaXRlbS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gJ2VsZW1lbnQnOworCQlpZiAoaXRlbS5ub2RlVHlwZSA9PSAzKSByZXR1cm4gKC9cUy8pLnRlc3QoaXRlbS5ub2RlVmFsdWUpID8gJ3RleHRub2RlJyA6ICd3aGl0ZXNwYWNlJzsKKwl9IGVsc2UgaWYgKHR5cGVvZiBpdGVtLmxlbmd0aCA9PSAnbnVtYmVyJyl7CisJCWlmICgnY2FsbGVlJyBpbiBpdGVtKSByZXR1cm4gJ2FyZ3VtZW50cyc7CisJCWlmICgnaXRlbScgaW4gaXRlbSkgcmV0dXJuICdjb2xsZWN0aW9uJzsKKwl9CisKKwlyZXR1cm4gdHlwZW9mIGl0ZW07Cit9OworCit2YXIgaW5zdGFuY2VPZiA9IHRoaXMuaW5zdGFuY2VPZiA9IGZ1bmN0aW9uKGl0ZW0sIG9iamVjdCl7CisJaWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworCXZhciBjb25zdHJ1Y3RvciA9IGl0ZW0uJGNvbnN0cnVjdG9yIHx8IGl0ZW0uY29uc3RydWN0b3I7CisJd2hpbGUgKGNvbnN0cnVjdG9yKXsKKwkJaWYgKGNvbnN0cnVjdG9yID09PSBvYmplY3QpIHJldHVybiB0cnVlOworCQljb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLnBhcmVudDsKKwl9CisJLyo8bHRJRTg+Ki8KKwlpZiAoIWl0ZW0uaGFzT3duUHJvcGVydHkpIHJldHVybiBmYWxzZTsKKwkvKjwvbHRJRTg+Ki8KKwlyZXR1cm4gaXRlbSBpbnN0YW5jZW9mIG9iamVjdDsKK307CisKK3ZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CisKKy8qPGx0SUU4PiovCit2YXIgZW51bWVyYWJsZXMgPSB0cnVlOworZm9yICh2YXIgaSBpbiB7dG9TdHJpbmc6IDF9KSBlbnVtZXJhYmxlcyA9IG51bGw7CitpZiAoZW51bWVyYWJsZXMpIGVudW1lcmFibGVzID0gWydoYXNPd25Qcm9wZXJ0eScsICd2YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAndG9Mb2NhbGVTdHJpbmcnLCAndG9TdHJpbmcnLCAnY29uc3RydWN0b3InXTsKK2Z1bmN0aW9uIGZvckVhY2hPYmplY3RFbnVtYmVyYWJsZUtleShvYmplY3QsIGZuLCBiaW5kKXsKKwlpZiAoZW51bWVyYWJsZXMpIGZvciAodmFyIGkgPSBlbnVtZXJhYmxlcy5sZW5ndGg7IGktLTspeworCQl2YXIgayA9IGVudW1lcmFibGVzW2ldOworCQkvLyBzaWduYXR1cmUgaGFzIGtleS12YWx1ZSwgc28gb3ZlcmxvYWRTZXR0ZXIgY2FuIGRpcmVjdGx5IHBhc3MgdGhlCisJCS8vIG1ldGhvZCBmdW5jdGlvbiwgd2l0aG91dCBzd2FwcGluZyBhcmd1bWVudHMuCisJCWlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgaykpIGZuLmNhbGwoYmluZCwgaywgb2JqZWN0W2tdKTsKKwl9Cit9CisvKjwvbHRJRTg+Ki8KKworLy8gRnVuY3Rpb24gb3ZlcmxvYWRpbmcKKwordmFyIEZ1bmN0aW9uID0gdGhpcy5GdW5jdGlvbjsKKworRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkU2V0dGVyID0gZnVuY3Rpb24odXNlUGx1cmFsKXsKKwl2YXIgc2VsZiA9IHRoaXM7CisJcmV0dXJuIGZ1bmN0aW9uKGEsIGIpeworCQlpZiAoYSA9PSBudWxsKSByZXR1cm4gdGhpczsKKwkJaWYgKHVzZVBsdXJhbCB8fCB0eXBlb2YgYSAhPSAnc3RyaW5nJyl7CisJCQlmb3IgKHZhciBrIGluIGEpIHNlbGYuY2FsbCh0aGlzLCBrLCBhW2tdKTsKKwkJCS8qPGx0SUU4PiovCisJCQlmb3JFYWNoT2JqZWN0RW51bWJlcmFibGVLZXkoYSwgc2VsZiwgdGhpcyk7CisJCQkvKjwvbHRJRTg+Ki8KKwkJfSBlbHNlIHsKKwkJCXNlbGYuY2FsbCh0aGlzLCBhLCBiKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9OworfTsKKworRnVuY3Rpb24ucHJvdG90eXBlLm92ZXJsb2FkR2V0dGVyID0gZnVuY3Rpb24odXNlUGx1cmFsKXsKKwl2YXIgc2VsZiA9IHRoaXM7CisJcmV0dXJuIGZ1bmN0aW9uKGEpeworCQl2YXIgYXJncywgcmVzdWx0OworCQlpZiAodHlwZW9mIGEgIT0gJ3N0cmluZycpIGFyZ3MgPSBhOworCQllbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgYXJncyA9IGFyZ3VtZW50czsKKwkJZWxzZSBpZiAodXNlUGx1cmFsKSBhcmdzID0gW2FdOworCQlpZiAoYXJncyl7CisJCQlyZXN1bHQgPSB7fTsKKwkJCWZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgcmVzdWx0W2FyZ3NbaV1dID0gc2VsZi5jYWxsKHRoaXMsIGFyZ3NbaV0pOworCQl9IGVsc2UgeworCQkJcmVzdWx0ID0gc2VsZi5jYWxsKHRoaXMsIGEpOworCQl9CisJCXJldHVybiByZXN1bHQ7CisJfTsKK307CisKK0Z1bmN0aW9uLnByb3RvdHlwZS5leHRlbmQgPSBmdW5jdGlvbihrZXksIHZhbHVlKXsKKwl0aGlzW2tleV0gPSB2YWx1ZTsKK30ub3ZlcmxvYWRTZXR0ZXIoKTsKKworRnVuY3Rpb24ucHJvdG90eXBlLmltcGxlbWVudCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpeworCXRoaXMucHJvdG90eXBlW2tleV0gPSB2YWx1ZTsKK30ub3ZlcmxvYWRTZXR0ZXIoKTsKKworLy8gRnJvbQorCit2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7CisKK0FycmF5LmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXsKKwlpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gW107CisJcmV0dXJuIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSAmJiB0eXBlb2YgaXRlbSAhPSAnc3RyaW5nJykgPyAodHlwZU9mKGl0ZW0pID09ICdhcnJheScpID8gaXRlbSA6IHNsaWNlLmNhbGwoaXRlbSkgOiBbaXRlbV07Cit9OworCitGdW5jdGlvbi5jb252ZXJ0ID0gZnVuY3Rpb24oaXRlbSl7CisJcmV0dXJuICh0eXBlT2YoaXRlbSkgPT0gJ2Z1bmN0aW9uJykgPyBpdGVtIDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIGl0ZW07CisJfTsKK307CisKKworTnVtYmVyLmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXsKKwl2YXIgbnVtYmVyID0gcGFyc2VGbG9hdChpdGVtKTsKKwlyZXR1cm4gaXNGaW5pdGUobnVtYmVyKSA/IG51bWJlciA6IG51bGw7Cit9OworCitTdHJpbmcuY29udmVydCA9IGZ1bmN0aW9uKGl0ZW0peworCXJldHVybiBpdGVtICsgJyc7Cit9OworCisKKworRnVuY3Rpb24uZnJvbSA9IEZ1bmN0aW9uLmNvbnZlcnQ7CitOdW1iZXIuZnJvbSA9IE51bWJlci5jb252ZXJ0OworU3RyaW5nLmZyb20gPSBTdHJpbmcuY29udmVydDsKKworLy8gaGlkZSwgcHJvdGVjdAorCitGdW5jdGlvbi5pbXBsZW1lbnQoeworCisJaGlkZTogZnVuY3Rpb24oKXsKKwkJdGhpcy4kaGlkZGVuID0gdHJ1ZTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXByb3RlY3Q6IGZ1bmN0aW9uKCl7CisJCXRoaXMuJHByb3RlY3RlZCA9IHRydWU7CisJCXJldHVybiB0aGlzOworCX0KKworfSk7CisKKy8vIFR5cGUKKwordmFyIFR5cGUgPSB0aGlzLlR5cGUgPSBmdW5jdGlvbihuYW1lLCBvYmplY3QpeworCWlmIChuYW1lKXsKKwkJdmFyIGxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpOworCQl2YXIgdHlwZUNoZWNrID0gZnVuY3Rpb24oaXRlbSl7CisJCQlyZXR1cm4gKHR5cGVPZihpdGVtKSA9PSBsb3dlcik7CisJCX07CisKKwkJVHlwZVsnaXMnICsgbmFtZV0gPSB0eXBlQ2hlY2s7CisJCWlmIChvYmplY3QgIT0gbnVsbCl7CisJCQlvYmplY3QucHJvdG90eXBlLiRmYW1pbHkgPSAoZnVuY3Rpb24oKXsKKwkJCQlyZXR1cm4gbG93ZXI7CisJCQl9KS5oaWRlKCk7CisJCQkKKwkJfQorCX0KKworCWlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisKKwlvYmplY3QuZXh0ZW5kKHRoaXMpOworCW9iamVjdC4kY29uc3RydWN0b3IgPSBUeXBlOworCW9iamVjdC5wcm90b3R5cGUuJGNvbnN0cnVjdG9yID0gb2JqZWN0OworCisJcmV0dXJuIG9iamVjdDsKK307CisKK3ZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CisKK1R5cGUuaXNFbnVtZXJhYmxlID0gZnVuY3Rpb24oaXRlbSl7CisJcmV0dXJuIChpdGVtICE9IG51bGwgJiYgdHlwZW9mIGl0ZW0ubGVuZ3RoID09ICdudW1iZXInICYmIHRvU3RyaW5nLmNhbGwoaXRlbSkgIT0gJ1tvYmplY3QgRnVuY3Rpb25dJyApOworfTsKKwordmFyIGhvb2tzID0ge307CisKK3ZhciBob29rc09mID0gZnVuY3Rpb24ob2JqZWN0KXsKKwl2YXIgdHlwZSA9IHR5cGVPZihvYmplY3QucHJvdG90eXBlKTsKKwlyZXR1cm4gaG9va3NbdHlwZV0gfHwgKGhvb2tzW3R5cGVdID0gW10pOworfTsKKwordmFyIGltcGxlbWVudCA9IGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7CisJaWYgKG1ldGhvZCAmJiBtZXRob2QuJGhpZGRlbikgcmV0dXJuOworCisJdmFyIGhvb2tzID0gaG9va3NPZih0aGlzKTsKKworCWZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspeworCQl2YXIgaG9vayA9IGhvb2tzW2ldOworCQlpZiAodHlwZU9mKGhvb2spID09ICd0eXBlJykgaW1wbGVtZW50LmNhbGwoaG9vaywgbmFtZSwgbWV0aG9kKTsKKwkJZWxzZSBob29rLmNhbGwodGhpcywgbmFtZSwgbWV0aG9kKTsKKwl9CisKKwl2YXIgcHJldmlvdXMgPSB0aGlzLnByb3RvdHlwZVtuYW1lXTsKKwlpZiAocHJldmlvdXMgPT0gbnVsbCB8fCAhcHJldmlvdXMuJHByb3RlY3RlZCkgdGhpcy5wcm90b3R5cGVbbmFtZV0gPSBtZXRob2Q7CisKKwlpZiAodGhpc1tuYW1lXSA9PSBudWxsICYmIHR5cGVPZihtZXRob2QpID09ICdmdW5jdGlvbicpIGV4dGVuZC5jYWxsKHRoaXMsIG5hbWUsIGZ1bmN0aW9uKGl0ZW0peworCQlyZXR1cm4gbWV0aG9kLmFwcGx5KGl0ZW0sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7CisJfSk7Cit9OworCit2YXIgZXh0ZW5kID0gZnVuY3Rpb24obmFtZSwgbWV0aG9kKXsKKwlpZiAobWV0aG9kICYmIG1ldGhvZC4kaGlkZGVuKSByZXR1cm47CisJdmFyIHByZXZpb3VzID0gdGhpc1tuYW1lXTsKKwlpZiAocHJldmlvdXMgPT0gbnVsbCB8fCAhcHJldmlvdXMuJHByb3RlY3RlZCkgdGhpc1tuYW1lXSA9IG1ldGhvZDsKK307CisKK1R5cGUuaW1wbGVtZW50KHsKKworCWltcGxlbWVudDogaW1wbGVtZW50Lm92ZXJsb2FkU2V0dGVyKCksCisKKwlleHRlbmQ6IGV4dGVuZC5vdmVybG9hZFNldHRlcigpLAorCisJYWxpYXM6IGZ1bmN0aW9uKG5hbWUsIGV4aXN0aW5nKXsKKwkJaW1wbGVtZW50LmNhbGwodGhpcywgbmFtZSwgdGhpcy5wcm90b3R5cGVbZXhpc3RpbmddKTsKKwl9Lm92ZXJsb2FkU2V0dGVyKCksCisKKwltaXJyb3I6IGZ1bmN0aW9uKGhvb2speworCQlob29rc09mKHRoaXMpLnB1c2goaG9vayk7CisJCXJldHVybiB0aGlzOworCX0KKworfSk7CisKK25ldyBUeXBlKCdUeXBlJywgVHlwZSk7CisKKy8vIERlZmF1bHQgVHlwZXMKKwordmFyIGZvcmNlID0gZnVuY3Rpb24obmFtZSwgb2JqZWN0LCBtZXRob2RzKXsKKwl2YXIgaXNUeXBlID0gKG9iamVjdCAhPSBPYmplY3QpLAorCQlwcm90b3R5cGUgPSBvYmplY3QucHJvdG90eXBlOworCisJaWYgKGlzVHlwZSkgb2JqZWN0ID0gbmV3IFR5cGUobmFtZSwgb2JqZWN0KTsKKworCWZvciAodmFyIGkgPSAwLCBsID0gbWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspeworCQl2YXIga2V5ID0gbWV0aG9kc1tpXSwKKwkJCWdlbmVyaWMgPSBvYmplY3Rba2V5XSwKKwkJCXByb3RvID0gcHJvdG90eXBlW2tleV07CisKKwkJaWYgKGdlbmVyaWMpIGdlbmVyaWMucHJvdGVjdCgpOworCQlpZiAoaXNUeXBlICYmIHByb3RvKSBvYmplY3QuaW1wbGVtZW50KGtleSwgcHJvdG8ucHJvdGVjdCgpKTsKKwl9CisKKwlpZiAoaXNUeXBlKXsKKwkJdmFyIG1ldGhvZHNFbnVtZXJhYmxlID0gcHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlKG1ldGhvZHNbMF0pOworCQlvYmplY3QuZm9yRWFjaE1ldGhvZCA9IGZ1bmN0aW9uKGZuKXsKKwkJCWlmICghbWV0aG9kc0VudW1lcmFibGUpIGZvciAodmFyIGkgPSAwLCBsID0gbWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspeworCQkJCWZuLmNhbGwocHJvdG90eXBlLCBwcm90b3R5cGVbbWV0aG9kc1tpXV0sIG1ldGhvZHNbaV0pOworCQkJfQorCQkJZm9yICh2YXIga2V5IGluIHByb3RvdHlwZSkgZm4uY2FsbChwcm90b3R5cGUsIHByb3RvdHlwZVtrZXldLCBrZXkpOworCQl9OworCX0KKworCXJldHVybiBmb3JjZTsKK307CisKK2ZvcmNlKCdTdHJpbmcnLCBTdHJpbmcsIFsKKwknY2hhckF0JywgJ2NoYXJDb2RlQXQnLCAnY29uY2F0JywgJ2NvbnRhaW5zJywgJ2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAnbWF0Y2gnLCAncXVvdGUnLCAncmVwbGFjZScsICdzZWFyY2gnLAorCSdzbGljZScsICdzcGxpdCcsICdzdWJzdHInLCAnc3Vic3RyaW5nJywgJ3RyaW0nLCAndG9Mb3dlckNhc2UnLCAndG9VcHBlckNhc2UnCitdKSgnQXJyYXknLCBBcnJheSwgWworCSdwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnLCAnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnLAorCSdpbmRleE9mJywgJ2xhc3RJbmRleE9mJywgJ2ZpbHRlcicsICdmb3JFYWNoJywgJ2V2ZXJ5JywgJ21hcCcsICdzb21lJywgJ3JlZHVjZScsICdyZWR1Y2VSaWdodCcsICdjb250YWlucycKK10pKCdOdW1iZXInLCBOdW1iZXIsIFsKKwkndG9FeHBvbmVudGlhbCcsICd0b0ZpeGVkJywgJ3RvTG9jYWxlU3RyaW5nJywgJ3RvUHJlY2lzaW9uJworXSkoJ0Z1bmN0aW9uJywgRnVuY3Rpb24sIFsKKwknYXBwbHknLCAnY2FsbCcsICdiaW5kJworXSkoJ1JlZ0V4cCcsIFJlZ0V4cCwgWworCSdleGVjJywgJ3Rlc3QnCitdKSgnT2JqZWN0JywgT2JqZWN0LCBbCisJJ2NyZWF0ZScsICdkZWZpbmVQcm9wZXJ0eScsICdkZWZpbmVQcm9wZXJ0aWVzJywgJ2tleXMnLAorCSdnZXRQcm90b3R5cGVPZicsICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InLCAnZ2V0T3duUHJvcGVydHlOYW1lcycsCisJJ3ByZXZlbnRFeHRlbnNpb25zJywgJ2lzRXh0ZW5zaWJsZScsICdzZWFsJywgJ2lzU2VhbGVkJywgJ2ZyZWV6ZScsICdpc0Zyb3plbicKK10pKCdEYXRlJywgRGF0ZSwgWydub3cnXSk7CisKK09iamVjdC5leHRlbmQgPSBleHRlbmQub3ZlcmxvYWRTZXR0ZXIoKTsKKworRGF0ZS5leHRlbmQoJ25vdycsIGZ1bmN0aW9uKCl7CisJcmV0dXJuICsobmV3IERhdGUpOworfSk7CisKK25ldyBUeXBlKCdCb29sZWFuJywgQm9vbGVhbik7CisKKy8vIGZpeGVzIE5hTiByZXR1cm5pbmcgYXMgTnVtYmVyCisKK051bWJlci5wcm90b3R5cGUuJGZhbWlseSA9IGZ1bmN0aW9uKCl7CisJcmV0dXJuIGlzRmluaXRlKHRoaXMpID8gJ251bWJlcicgOiAnbnVsbCc7Cit9LmhpZGUoKTsKKworLy8gTnVtYmVyLnJhbmRvbQorCitOdW1iZXIuZXh0ZW5kKCdyYW5kb20nLCBmdW5jdGlvbihtaW4sIG1heCl7CisJcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSArIG1pbik7Cit9KTsKKworLy8gZm9yRWFjaCwgZWFjaCwga2V5cworCitBcnJheS5pbXBsZW1lbnQoeworCisJLyo8IUVTNT4qLworCWZvckVhY2g6IGZ1bmN0aW9uKGZuLCBiaW5kKXsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7CisJCQlpZiAoaSBpbiB0aGlzKSBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpOworCQl9CisJfSwKKwkvKjwvIUVTNT4qLworCisJZWFjaDogZnVuY3Rpb24oZm4sIGJpbmQpeworCQlBcnJheS5mb3JFYWNoKHRoaXMsIGZuLCBiaW5kKTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKworT2JqZWN0LmV4dGVuZCh7CisKKwlrZXlzOiBmdW5jdGlvbihvYmplY3QpeworCQl2YXIga2V5cyA9IFtdOworCQlmb3IgKHZhciBrIGluIG9iamVjdCl7CisJCQlpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSBrZXlzLnB1c2goayk7CisJCX0KKwkJLyo8bHRJRTg+Ki8KKwkJZm9yRWFjaE9iamVjdEVudW1iZXJhYmxlS2V5KG9iamVjdCwgZnVuY3Rpb24oayl7CisJCQlrZXlzLnB1c2goayk7CisJCX0pOworCQkvKjwvbHRJRTg+Ki8KKwkJcmV0dXJuIGtleXM7CisJfSwKKworCWZvckVhY2g6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpeworCQlPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goZnVuY3Rpb24oa2V5KXsKKwkJCWZuLmNhbGwoYmluZCwgb2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTsKKwkJfSk7CisJfQorCit9KTsKKworT2JqZWN0LmVhY2ggPSBPYmplY3QuZm9yRWFjaDsKKworCisvLyBBcnJheSAmIE9iamVjdCBjbG9uaW5nLCBPYmplY3QgbWVyZ2luZyBhbmQgYXBwZW5kaW5nCisKK3ZhciBjbG9uZU9mID0gZnVuY3Rpb24oaXRlbSl7CisJc3dpdGNoICh0eXBlT2YoaXRlbSkpeworCQljYXNlICdhcnJheSc6IHJldHVybiBpdGVtLmNsb25lKCk7CisJCWNhc2UgJ29iamVjdCc6IHJldHVybiBPYmplY3QuY2xvbmUoaXRlbSk7CisJCWRlZmF1bHQ6IHJldHVybiBpdGVtOworCX0KK307CisKK0FycmF5LmltcGxlbWVudCgnY2xvbmUnLCBmdW5jdGlvbigpeworCXZhciBpID0gdGhpcy5sZW5ndGgsIGNsb25lID0gbmV3IEFycmF5KGkpOworCXdoaWxlIChpLS0pIGNsb25lW2ldID0gY2xvbmVPZih0aGlzW2ldKTsKKwlyZXR1cm4gY2xvbmU7Cit9KTsKKwordmFyIG1lcmdlT25lID0gZnVuY3Rpb24oc291cmNlLCBrZXksIGN1cnJlbnQpeworCXN3aXRjaCAodHlwZU9mKGN1cnJlbnQpKXsKKwkJY2FzZSAnb2JqZWN0JzoKKwkJCWlmICh0eXBlT2Yoc291cmNlW2tleV0pID09ICdvYmplY3QnKSBPYmplY3QubWVyZ2Uoc291cmNlW2tleV0sIGN1cnJlbnQpOworCQkJZWxzZSBzb3VyY2Vba2V5XSA9IE9iamVjdC5jbG9uZShjdXJyZW50KTsKKwkJCWJyZWFrOworCQljYXNlICdhcnJheSc6IHNvdXJjZVtrZXldID0gY3VycmVudC5jbG9uZSgpOyBicmVhazsKKwkJZGVmYXVsdDogc291cmNlW2tleV0gPSBjdXJyZW50OworCX0KKwlyZXR1cm4gc291cmNlOworfTsKKworT2JqZWN0LmV4dGVuZCh7CisKKwltZXJnZTogZnVuY3Rpb24oc291cmNlLCBrLCB2KXsKKwkJaWYgKHR5cGVPZihrKSA9PSAnc3RyaW5nJykgcmV0dXJuIG1lcmdlT25lKHNvdXJjZSwgaywgdik7CisJCWZvciAodmFyIGkgPSAxLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7CisJCQl2YXIgb2JqZWN0ID0gYXJndW1lbnRzW2ldOworCQkJZm9yICh2YXIga2V5IGluIG9iamVjdCkgbWVyZ2VPbmUoc291cmNlLCBrZXksIG9iamVjdFtrZXldKTsKKwkJfQorCQlyZXR1cm4gc291cmNlOworCX0sCisKKwljbG9uZTogZnVuY3Rpb24ob2JqZWN0KXsKKwkJdmFyIGNsb25lID0ge307CisJCWZvciAodmFyIGtleSBpbiBvYmplY3QpIGNsb25lW2tleV0gPSBjbG9uZU9mKG9iamVjdFtrZXldKTsKKwkJcmV0dXJuIGNsb25lOworCX0sCisKKwlhcHBlbmQ6IGZ1bmN0aW9uKG9yaWdpbmFsKXsKKwkJZm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXsKKwkJCXZhciBleHRlbmRlZCA9IGFyZ3VtZW50c1tpXSB8fCB7fTsKKwkJCWZvciAodmFyIGtleSBpbiBleHRlbmRlZCkgb3JpZ2luYWxba2V5XSA9IGV4dGVuZGVkW2tleV07CisJCX0KKwkJcmV0dXJuIG9yaWdpbmFsOworCX0KKworfSk7CisKKy8vIE9iamVjdC1sZXNzIHR5cGVzCisKK1snT2JqZWN0JywgJ1doaXRlU3BhY2UnLCAnVGV4dE5vZGUnLCAnQ29sbGVjdGlvbicsICdBcmd1bWVudHMnXS5lYWNoKGZ1bmN0aW9uKG5hbWUpeworCW5ldyBUeXBlKG5hbWUpOworfSk7CisKKy8vIFVuaXF1ZSBJRAorCit2YXIgVUlEID0gRGF0ZS5ub3coKTsKKworU3RyaW5nLmV4dGVuZCgndW5pcXVlSUQnLCBmdW5jdGlvbigpeworCXJldHVybiAoVUlEKyspLnRvU3RyaW5nKDM2KTsKK30pOworCisKKworfSkoKTsKKworLyoKKy0tLQorCituYW1lOiBBcnJheQorCitkZXNjcmlwdGlvbjogQ29udGFpbnMgQXJyYXkgUHJvdG90eXBlcyBsaWtlIGVhY2gsIGNvbnRhaW5zLCBhbmQgZXJhc2UuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCityZXF1aXJlczogW1R5cGVdCisKK3Byb3ZpZGVzOiBBcnJheQorCisuLi4KKyovCisKK0FycmF5LmltcGxlbWVudCh7CisKKwkvKjwhRVM1PiovCisJZXZlcnk6IGZ1bmN0aW9uKGZuLCBiaW5kKXsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aCA+Pj4gMDsgaSA8IGw7IGkrKyl7CisJCQlpZiAoKGkgaW4gdGhpcykgJiYgIWZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcykpIHJldHVybiBmYWxzZTsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9LAorCisJZmlsdGVyOiBmdW5jdGlvbihmbiwgYmluZCl7CisJCXZhciByZXN1bHRzID0gW107CisJCWZvciAodmFyIHZhbHVlLCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoID4+PiAwOyBpIDwgbDsgaSsrKSBpZiAoaSBpbiB0aGlzKXsKKwkJCXZhbHVlID0gdGhpc1tpXTsKKwkJCWlmIChmbi5jYWxsKGJpbmQsIHZhbHVlLCBpLCB0aGlzKSkgcmVzdWx0cy5wdXNoKHZhbHVlKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0czsKKwl9LAorCisJaW5kZXhPZjogZnVuY3Rpb24oaXRlbSwgZnJvbSl7CisJCXZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCA+Pj4gMDsKKwkJZm9yICh2YXIgaSA9IChmcm9tIDwgMCkgPyBNYXRoLm1heCgwLCBsZW5ndGggKyBmcm9tKSA6IGZyb20gfHwgMDsgaSA8IGxlbmd0aDsgaSsrKXsKKwkJCWlmICh0aGlzW2ldID09PSBpdGVtKSByZXR1cm4gaTsKKwkJfQorCQlyZXR1cm4gLTE7CisJfSwKKworCW1hcDogZnVuY3Rpb24oZm4sIGJpbmQpeworCQl2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggPj4+IDAsIHJlc3VsdHMgPSBBcnJheShsZW5ndGgpOworCQlmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKXsKKwkJCWlmIChpIGluIHRoaXMpIHJlc3VsdHNbaV0gPSBmbi5jYWxsKGJpbmQsIHRoaXNbaV0sIGksIHRoaXMpOworCQl9CisJCXJldHVybiByZXN1bHRzOworCX0sCisKKwlzb21lOiBmdW5jdGlvbihmbiwgYmluZCl7CisJCWZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGggPj4+IDA7IGkgPCBsOyBpKyspeworCQkJaWYgKChpIGluIHRoaXMpICYmIGZuLmNhbGwoYmluZCwgdGhpc1tpXSwgaSwgdGhpcykpIHJldHVybiB0cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9LAorCS8qPC8hRVM1PiovCisKKwljbGVhbjogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0peworCQkJcmV0dXJuIGl0ZW0gIT0gbnVsbDsKKwkJfSk7CisJfSwKKworCWludm9rZTogZnVuY3Rpb24obWV0aG9kTmFtZSl7CisJCXZhciBhcmdzID0gQXJyYXkuc2xpY2UoYXJndW1lbnRzLCAxKTsKKwkJcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKGl0ZW0peworCQkJcmV0dXJuIGl0ZW1bbWV0aG9kTmFtZV0uYXBwbHkoaXRlbSwgYXJncyk7CisJCX0pOworCX0sCisKKwlhc3NvY2lhdGU6IGZ1bmN0aW9uKGtleXMpeworCQl2YXIgb2JqID0ge30sIGxlbmd0aCA9IE1hdGgubWluKHRoaXMubGVuZ3RoLCBrZXlzLmxlbmd0aCk7CisJCWZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIG9ialtrZXlzW2ldXSA9IHRoaXNbaV07CisJCXJldHVybiBvYmo7CisJfSwKKworCWxpbms6IGZ1bmN0aW9uKG9iamVjdCl7CisJCXZhciByZXN1bHQgPSB7fTsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7CisJCQlmb3IgKHZhciBrZXkgaW4gb2JqZWN0KXsKKwkJCQlpZiAob2JqZWN0W2tleV0odGhpc1tpXSkpeworCQkJCQlyZXN1bHRba2V5XSA9IHRoaXNbaV07CisJCQkJCWRlbGV0ZSBvYmplY3Rba2V5XTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfSwKKworCWNvbnRhaW5zOiBmdW5jdGlvbihpdGVtLCBmcm9tKXsKKwkJcmV0dXJuIHRoaXMuaW5kZXhPZihpdGVtLCBmcm9tKSAhPSAtMTsKKwl9LAorCisJYXBwZW5kOiBmdW5jdGlvbihhcnJheSl7CisJCXRoaXMucHVzaC5hcHBseSh0aGlzLCBhcnJheSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXRMYXN0OiBmdW5jdGlvbigpeworCQlyZXR1cm4gKHRoaXMubGVuZ3RoKSA/IHRoaXNbdGhpcy5sZW5ndGggLSAxXSA6IG51bGw7CisJfSwKKworCWdldFJhbmRvbTogZnVuY3Rpb24oKXsKKwkJcmV0dXJuICh0aGlzLmxlbmd0aCkgPyB0aGlzW051bWJlci5yYW5kb20oMCwgdGhpcy5sZW5ndGggLSAxKV0gOiBudWxsOworCX0sCisKKwlpbmNsdWRlOiBmdW5jdGlvbihpdGVtKXsKKwkJaWYgKCF0aGlzLmNvbnRhaW5zKGl0ZW0pKSB0aGlzLnB1c2goaXRlbSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwljb21iaW5lOiBmdW5jdGlvbihhcnJheSl7CisJCWZvciAodmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrKSB0aGlzLmluY2x1ZGUoYXJyYXlbaV0pOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZXJhc2U6IGZ1bmN0aW9uKGl0ZW0peworCQlmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGktLTspeworCQkJaWYgKHRoaXNbaV0gPT09IGl0ZW0pIHRoaXMuc3BsaWNlKGksIDEpOworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwllbXB0eTogZnVuY3Rpb24oKXsKKwkJdGhpcy5sZW5ndGggPSAwOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZmxhdHRlbjogZnVuY3Rpb24oKXsKKwkJdmFyIGFycmF5ID0gW107CisJCWZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspeworCQkJdmFyIHR5cGUgPSB0eXBlT2YodGhpc1tpXSk7CisJCQlpZiAodHlwZSA9PSAnbnVsbCcpIGNvbnRpbnVlOworCQkJYXJyYXkgPSBhcnJheS5jb25jYXQoKHR5cGUgPT0gJ2FycmF5JyB8fCB0eXBlID09ICdjb2xsZWN0aW9uJyB8fCB0eXBlID09ICdhcmd1bWVudHMnIHx8IGluc3RhbmNlT2YodGhpc1tpXSwgQXJyYXkpKSA/IEFycmF5LmZsYXR0ZW4odGhpc1tpXSkgOiB0aGlzW2ldKTsKKwkJfQorCQlyZXR1cm4gYXJyYXk7CisJfSwKKworCXBpY2s6IGZ1bmN0aW9uKCl7CisJCWZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspeworCQkJaWYgKHRoaXNbaV0gIT0gbnVsbCkgcmV0dXJuIHRoaXNbaV07CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfSwKKworCWhleFRvUmdiOiBmdW5jdGlvbihhcnJheSl7CisJCWlmICh0aGlzLmxlbmd0aCAhPSAzKSByZXR1cm4gbnVsbDsKKwkJdmFyIHJnYiA9IHRoaXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKKwkJCWlmICh2YWx1ZS5sZW5ndGggPT0gMSkgdmFsdWUgKz0gdmFsdWU7CisJCQlyZXR1cm4gcGFyc2VJbnQodmFsdWUsIDE2KTsKKwkJfSk7CisJCXJldHVybiAoYXJyYXkpID8gcmdiIDogJ3JnYignICsgcmdiICsgJyknOworCX0sCisKKwlyZ2JUb0hleDogZnVuY3Rpb24oYXJyYXkpeworCQlpZiAodGhpcy5sZW5ndGggPCAzKSByZXR1cm4gbnVsbDsKKwkJaWYgKHRoaXMubGVuZ3RoID09IDQgJiYgdGhpc1szXSA9PSAwICYmICFhcnJheSkgcmV0dXJuICd0cmFuc3BhcmVudCc7CisJCXZhciBoZXggPSBbXTsKKwkJZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspeworCQkJdmFyIGJpdCA9ICh0aGlzW2ldIC0gMCkudG9TdHJpbmcoMTYpOworCQkJaGV4LnB1c2goKGJpdC5sZW5ndGggPT0gMSkgPyAnMCcgKyBiaXQgOiBiaXQpOworCQl9CisJCXJldHVybiAoYXJyYXkpID8gaGV4IDogJyMnICsgaGV4LmpvaW4oJycpOworCX0KKworfSk7CisKKworCisvKgorLS0tCisKK25hbWU6IEZ1bmN0aW9uCisKK2Rlc2NyaXB0aW9uOiBDb250YWlucyBGdW5jdGlvbiBQcm90b3R5cGVzIGxpa2UgY3JlYXRlLCBiaW5kLCBwYXNzLCBhbmQgZGVsYXkuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCityZXF1aXJlczogVHlwZQorCitwcm92aWRlczogRnVuY3Rpb24KKworLi4uCisqLworCitGdW5jdGlvbi5leHRlbmQoeworCisJYXR0ZW1wdDogZnVuY3Rpb24oKXsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKXsKKwkJCXRyeSB7CisJCQkJcmV0dXJuIGFyZ3VtZW50c1tpXSgpOworCQkJfSBjYXRjaCAoZSl7fQorCQl9CisJCXJldHVybiBudWxsOworCX0KKworfSk7CisKK0Z1bmN0aW9uLmltcGxlbWVudCh7CisKKwlhdHRlbXB0OiBmdW5jdGlvbihhcmdzLCBiaW5kKXsKKwkJdHJ5IHsKKwkJCXJldHVybiB0aGlzLmFwcGx5KGJpbmQsIEFycmF5LmNvbnZlcnQoYXJncykpOworCQl9IGNhdGNoIChlKXt9CisKKwkJcmV0dXJuIG51bGw7CisJfSwKKworCS8qPCFFUzUtYmluZD4qLworCWJpbmQ6IGZ1bmN0aW9uKHRoYXQpeworCQl2YXIgc2VsZiA9IHRoaXMsCisJCQlhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBBcnJheS5zbGljZShhcmd1bWVudHMsIDEpIDogbnVsbCwKKwkJCUYgPSBmdW5jdGlvbigpe307CisKKwkJdmFyIGJvdW5kID0gZnVuY3Rpb24oKXsKKwkJCXZhciBjb250ZXh0ID0gdGhhdCwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsKKwkJCWlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpeworCQkJCUYucHJvdG90eXBlID0gc2VsZi5wcm90b3R5cGU7CisJCQkJY29udGV4dCA9IG5ldyBGOworCQkJfQorCQkJdmFyIHJlc3VsdCA9ICghYXJncyAmJiAhbGVuZ3RoKQorCQkJCT8gc2VsZi5jYWxsKGNvbnRleHQpCisJCQkJOiBzZWxmLmFwcGx5KGNvbnRleHQsIGFyZ3MgJiYgbGVuZ3RoID8gYXJncy5jb25jYXQoQXJyYXkuc2xpY2UoYXJndW1lbnRzKSkgOiBhcmdzIHx8IGFyZ3VtZW50cyk7CisJCQlyZXR1cm4gY29udGV4dCA9PSB0aGF0ID8gcmVzdWx0IDogY29udGV4dDsKKwkJfTsKKwkJcmV0dXJuIGJvdW5kOworCX0sCisJLyo8LyFFUzUtYmluZD4qLworCisJcGFzczogZnVuY3Rpb24oYXJncywgYmluZCl7CisJCXZhciBzZWxmID0gdGhpczsKKwkJaWYgKGFyZ3MgIT0gbnVsbCkgYXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7CisJCXJldHVybiBmdW5jdGlvbigpeworCQkJcmV0dXJuIHNlbGYuYXBwbHkoYmluZCwgYXJncyB8fCBhcmd1bWVudHMpOworCQl9OworCX0sCisKKwlkZWxheTogZnVuY3Rpb24oZGVsYXksIGJpbmQsIGFyZ3MpeworCQlyZXR1cm4gc2V0VGltZW91dCh0aGlzLnBhc3MoKGFyZ3MgPT0gbnVsbCA/IFtdIDogYXJncyksIGJpbmQpLCBkZWxheSk7CisJfSwKKworCXBlcmlvZGljYWw6IGZ1bmN0aW9uKHBlcmlvZGljYWwsIGJpbmQsIGFyZ3MpeworCQlyZXR1cm4gc2V0SW50ZXJ2YWwodGhpcy5wYXNzKChhcmdzID09IG51bGwgPyBbXSA6IGFyZ3MpLCBiaW5kKSwgcGVyaW9kaWNhbCk7CisJfQorCit9KTsKKworCisKKy8qCistLS0KKworbmFtZTogTnVtYmVyCisKK2Rlc2NyaXB0aW9uOiBDb250YWlucyBOdW1iZXIgUHJvdG90eXBlcyBsaWtlIGxpbWl0LCByb3VuZCwgdGltZXMsIGFuZCBjZWlsLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworcmVxdWlyZXM6IFR5cGUKKworcHJvdmlkZXM6IE51bWJlcgorCisuLi4KKyovCisKK051bWJlci5pbXBsZW1lbnQoeworCisJbGltaXQ6IGZ1bmN0aW9uKG1pbiwgbWF4KXsKKwkJcmV0dXJuIE1hdGgubWluKG1heCwgTWF0aC5tYXgobWluLCB0aGlzKSk7CisJfSwKKworCXJvdW5kOiBmdW5jdGlvbihwcmVjaXNpb24peworCQlwcmVjaXNpb24gPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uIHx8IDApLnRvRml4ZWQocHJlY2lzaW9uIDwgMCA/IC1wcmVjaXNpb24gOiAwKTsKKwkJcmV0dXJuIE1hdGgucm91bmQodGhpcyAqIHByZWNpc2lvbikgLyBwcmVjaXNpb247CisJfSwKKworCXRpbWVzOiBmdW5jdGlvbihmbiwgYmluZCl7CisJCWZvciAodmFyIGkgPSAwOyBpIDwgdGhpczsgaSsrKSBmbi5jYWxsKGJpbmQsIGksIHRoaXMpOworCX0sCisKKwl0b0Zsb2F0OiBmdW5jdGlvbigpeworCQlyZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTsKKwl9LAorCisJdG9JbnQ6IGZ1bmN0aW9uKGJhc2UpeworCQlyZXR1cm4gcGFyc2VJbnQodGhpcywgYmFzZSB8fCAxMCk7CisJfQorCit9KTsKKworTnVtYmVyLmFsaWFzKCdlYWNoJywgJ3RpbWVzJyk7CisKKyhmdW5jdGlvbihtYXRoKXsKKwordmFyIG1ldGhvZHMgPSB7fTsKKworbWF0aC5lYWNoKGZ1bmN0aW9uKG5hbWUpeworCWlmICghTnVtYmVyW25hbWVdKSBtZXRob2RzW25hbWVdID0gZnVuY3Rpb24oKXsKKwkJcmV0dXJuIE1hdGhbbmFtZV0uYXBwbHkobnVsbCwgW3RoaXNdLmNvbmNhdChBcnJheS5jb252ZXJ0KGFyZ3VtZW50cykpKTsKKwl9OworfSk7CisKK051bWJlci5pbXBsZW1lbnQobWV0aG9kcyk7CisKK30pKFsnYWJzJywgJ2Fjb3MnLCAnYXNpbicsICdhdGFuJywgJ2F0YW4yJywgJ2NlaWwnLCAnY29zJywgJ2V4cCcsICdmbG9vcicsICdsb2cnLCAnbWF4JywgJ21pbicsICdwb3cnLCAnc2luJywgJ3NxcnQnLCAndGFuJ10pOworCisvKgorLS0tCisKK25hbWU6IFN0cmluZworCitkZXNjcmlwdGlvbjogQ29udGFpbnMgU3RyaW5nIFByb3RvdHlwZXMgbGlrZSBjYW1lbENhc2UsIGNhcGl0YWxpemUsIHRlc3QsIGFuZCB0b0ludC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuCisKK3JlcXVpcmVzOiBbVHlwZSwgQXJyYXldCisKK3Byb3ZpZGVzOiBTdHJpbmcKKworLi4uCisqLworCitTdHJpbmcuaW1wbGVtZW50KHsKKworCS8vPCFFUzY+CisJY29udGFpbnM6IGZ1bmN0aW9uKHN0cmluZywgaW5kZXgpeworCQlyZXR1cm4gKGluZGV4ID8gU3RyaW5nKHRoaXMpLnNsaWNlKGluZGV4KSA6IFN0cmluZyh0aGlzKSkuaW5kZXhPZihzdHJpbmcpID4gLTE7CisJfSwKKwkvLzwvIUVTNj4KKworCXRlc3Q6IGZ1bmN0aW9uKHJlZ2V4LCBwYXJhbXMpeworCQlyZXR1cm4gKCh0eXBlT2YocmVnZXgpID09ICdyZWdleHAnKSA/IHJlZ2V4IDogbmV3IFJlZ0V4cCgnJyArIHJlZ2V4LCBwYXJhbXMpKS50ZXN0KHRoaXMpOworCX0sCisKKwl0cmltOiBmdW5jdGlvbigpeworCQlyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7CisJfSwKKworCWNsZWFuOiBmdW5jdGlvbigpeworCQlyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKTsKKwl9LAorCisJY2FtZWxDYXNlOiBmdW5jdGlvbigpeworCQlyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoLy1cRC9nLCBmdW5jdGlvbihtYXRjaCl7CisJCQlyZXR1cm4gbWF0Y2guY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7CisJCX0pOworCX0sCisKKwloeXBoZW5hdGU6IGZ1bmN0aW9uKCl7CisJCXJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvW0EtWl0vZywgZnVuY3Rpb24obWF0Y2gpeworCQkJcmV0dXJuICgnLScgKyBtYXRjaC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSk7CisJCX0pOworCX0sCisKKwljYXBpdGFsaXplOiBmdW5jdGlvbigpeworCQlyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL1xiW2Etel0vZywgZnVuY3Rpb24obWF0Y2gpeworCQkJcmV0dXJuIG1hdGNoLnRvVXBwZXJDYXNlKCk7CisJCX0pOworCX0sCisKKwllc2NhcGVSZWdFeHA6IGZ1bmN0aW9uKCl7CisJCXJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSgvKFstLiorP14ke30oKXxbXF1cL1xcXSkvZywgJ1xcJDEnKTsKKwl9LAorCisJdG9JbnQ6IGZ1bmN0aW9uKGJhc2UpeworCQlyZXR1cm4gcGFyc2VJbnQodGhpcywgYmFzZSB8fCAxMCk7CisJfSwKKworCXRvRmxvYXQ6IGZ1bmN0aW9uKCl7CisJCXJldHVybiBwYXJzZUZsb2F0KHRoaXMpOworCX0sCisKKwloZXhUb1JnYjogZnVuY3Rpb24oYXJyYXkpeworCQl2YXIgaGV4ID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9eIz8oXHd7MSwyfSkoXHd7MSwyfSkoXHd7MSwyfSkkLyk7CisJCXJldHVybiAoaGV4KSA/IGhleC5zbGljZSgxKS5oZXhUb1JnYihhcnJheSkgOiBudWxsOworCX0sCisKKwlyZ2JUb0hleDogZnVuY3Rpb24oYXJyYXkpeworCQl2YXIgcmdiID0gU3RyaW5nKHRoaXMpLm1hdGNoKC9cZHsxLDN9L2cpOworCQlyZXR1cm4gKHJnYikgPyByZ2IucmdiVG9IZXgoYXJyYXkpIDogbnVsbDsKKwl9LAorCisJc3Vic3RpdHV0ZTogZnVuY3Rpb24ob2JqZWN0LCByZWdleHApeworCQlyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UocmVnZXhwIHx8ICgvXFw/XHsoW157fV0rKVx9L2cpLCBmdW5jdGlvbihtYXRjaCwgbmFtZSl7CisJCQlpZiAobWF0Y2guY2hhckF0KDApID09ICdcXCcpIHJldHVybiBtYXRjaC5zbGljZSgxKTsKKwkJCXJldHVybiAob2JqZWN0W25hbWVdICE9IG51bGwpID8gb2JqZWN0W25hbWVdIDogJyc7CisJCX0pOworCX0KKworfSk7CisKKworCisvKgorLS0tCisKK25hbWU6IEJyb3dzZXIKKworZGVzY3JpcHRpb246IFRoZSBCcm93c2VyIE9iamVjdC4gQ29udGFpbnMgQnJvd3NlciBpbml0aWFsaXphdGlvbiwgV2luZG93IGFuZCBEb2N1bWVudCwgYW5kIHRoZSBCcm93c2VyIEhhc2guCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCityZXF1aXJlczogW0FycmF5LCBGdW5jdGlvbiwgTnVtYmVyLCBTdHJpbmddCisKK3Byb3ZpZGVzOiBbQnJvd3NlciwgV2luZG93LCBEb2N1bWVudF0KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudDsKK3ZhciB3aW5kb3cgPSBkb2N1bWVudC53aW5kb3cgPSB0aGlzOworCit2YXIgcGFyc2UgPSBmdW5jdGlvbih1YSwgcGxhdGZvcm0peworCXVhID0gdWEudG9Mb3dlckNhc2UoKTsKKwlwbGF0Zm9ybSA9IChwbGF0Zm9ybSA/IHBsYXRmb3JtLnRvTG93ZXJDYXNlKCkgOiAnJyk7CisKKwkvLyBjaHJvbWUgaXMgaW5jbHVkZWQgaW4gdGhlIGVkZ2UgVUEsIHNvIG5lZWQgdG8gY2hlY2sgZm9yIGVkZ2UgZmlyc3QsCisJLy8gYmVmb3JlIGNoZWNraW5nIGlmIGl0J3MgY2hyb21lLgorCXZhciBVQSA9IHVhLm1hdGNoKC8oZWRnZSlbXHNcLzpdKFtcd1xkXC5dKykvKTsKKwlpZiAoIVVBKXsKKwkJVUEgPSB1YS5tYXRjaCgvKG9wZXJhfGllfGZpcmVmb3h8Y2hyb21lfHRyaWRlbnR8Y3Jpb3N8dmVyc2lvbilbXHNcLzpdKFtcd1xkXC5dKyk/Lio/KHNhZmFyaXwoPzpydltcc1wvOl18dmVyc2lvbltcc1wvOl0pKFtcd1xkXC5dKyl8JCkvKSB8fCBbbnVsbCwgJ3Vua25vd24nLCAwXTsKKwl9CisKKwlpZiAoVUFbMV0gPT0gJ3RyaWRlbnQnKXsKKwkJVUFbMV0gPSAnaWUnOworCQlpZiAoVUFbNF0pIFVBWzJdID0gVUFbNF07CisJfSBlbHNlIGlmIChVQVsxXSA9PSAnY3Jpb3MnKXsKKwkJVUFbMV0gPSAnY2hyb21lJzsKKwl9CisKKwlwbGF0Zm9ybSA9IHVhLm1hdGNoKC9pcCg/OmFkfG9kfGhvbmUpLykgPyAnaW9zJyA6ICh1YS5tYXRjaCgvKD86d2Vib3N8YW5kcm9pZCkvKSB8fCB1YS5tYXRjaCgvbWFjfHdpbnxsaW51eC8pIHx8IFsnb3RoZXInXSlbMF07CisJaWYgKHBsYXRmb3JtID09ICd3aW4nKSBwbGF0Zm9ybSA9ICd3aW5kb3dzJzsKKworCXJldHVybiB7CisJCWV4dGVuZDogRnVuY3Rpb24ucHJvdG90eXBlLmV4dGVuZCwKKwkJbmFtZTogKFVBWzFdID09ICd2ZXJzaW9uJykgPyBVQVszXSA6IFVBWzFdLAorCQl2ZXJzaW9uOiBwYXJzZUZsb2F0KChVQVsxXSA9PSAnb3BlcmEnICYmIFVBWzRdKSA/IFVBWzRdIDogVUFbMl0pLAorCQlwbGF0Zm9ybTogcGxhdGZvcm0KKwl9OworfTsKKwordmFyIEJyb3dzZXIgPSB0aGlzLkJyb3dzZXIgPSBwYXJzZShuYXZpZ2F0b3IudXNlckFnZW50LCBuYXZpZ2F0b3IucGxhdGZvcm0pOworCitpZiAoQnJvd3Nlci5uYW1lID09ICdpZScgJiYgZG9jdW1lbnQuZG9jdW1lbnRNb2RlKXsKKwlCcm93c2VyLnZlcnNpb24gPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7Cit9CisKK0Jyb3dzZXIuZXh0ZW5kKHsKKwlGZWF0dXJlczogeworCQl4cGF0aDogISEoZG9jdW1lbnQuZXZhbHVhdGUpLAorCQlhaXI6ICEhKHdpbmRvdy5ydW50aW1lKSwKKwkJcXVlcnk6ICEhKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IpLAorCQlqc29uOiAhISh3aW5kb3cuSlNPTikKKwl9LAorCXBhcnNlVUE6IHBhcnNlCit9KTsKKworCisKKy8vIFJlcXVlc3QKKworQnJvd3Nlci5SZXF1ZXN0ID0gKGZ1bmN0aW9uKCl7CisKKwl2YXIgWE1MSFRUUCA9IGZ1bmN0aW9uKCl7CisJCXJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKwl9OworCisJdmFyIE1TWE1MMiA9IGZ1bmN0aW9uKCl7CisJCXJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTVNYTUwyLlhNTEhUVFAnKTsKKwl9OworCisJdmFyIE1TWE1MID0gZnVuY3Rpb24oKXsKKwkJcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpOworCX07CisKKwlyZXR1cm4gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpeworCQlYTUxIVFRQKCk7CisJCXJldHVybiBYTUxIVFRQOworCX0sIGZ1bmN0aW9uKCl7CisJCU1TWE1MMigpOworCQlyZXR1cm4gTVNYTUwyOworCX0sIGZ1bmN0aW9uKCl7CisJCU1TWE1MKCk7CisJCXJldHVybiBNU1hNTDsKKwl9KTsKKworfSkoKTsKKworQnJvd3Nlci5GZWF0dXJlcy54aHIgPSAhIShCcm93c2VyLlJlcXVlc3QpOworCisKKworLy8gU3RyaW5nIHNjcmlwdHMKKworQnJvd3Nlci5leGVjID0gZnVuY3Rpb24odGV4dCl7CisJaWYgKCF0ZXh0KSByZXR1cm4gdGV4dDsKKwlpZiAod2luZG93LmV4ZWNTY3JpcHQpeworCQl3aW5kb3cuZXhlY1NjcmlwdCh0ZXh0KTsKKwl9IGVsc2UgeworCQl2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CisJCXNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9qYXZhc2NyaXB0Jyk7CisJCXNjcmlwdC50ZXh0ID0gdGV4dDsKKwkJZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpOworCQlkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKHNjcmlwdCk7CisJfQorCXJldHVybiB0ZXh0OworfTsKKworU3RyaW5nLmltcGxlbWVudCgnc3RyaXBTY3JpcHRzJywgZnVuY3Rpb24oZXhlYyl7CisJdmFyIHNjcmlwdHMgPSAnJzsKKwl2YXIgdGV4dCA9IHRoaXMucmVwbGFjZSgvPHNjcmlwdFtePl0qPihbXHNcU10qPyk8XC9zY3JpcHQ+L2dpLCBmdW5jdGlvbihhbGwsIGNvZGUpeworCQlzY3JpcHRzICs9IGNvZGUgKyAnXG4nOworCQlyZXR1cm4gJyc7CisJfSk7CisJaWYgKGV4ZWMgPT09IHRydWUpIEJyb3dzZXIuZXhlYyhzY3JpcHRzKTsKKwllbHNlIGlmICh0eXBlT2YoZXhlYykgPT0gJ2Z1bmN0aW9uJykgZXhlYyhzY3JpcHRzLCB0ZXh0KTsKKwlyZXR1cm4gdGV4dDsKK30pOworCisvLyBXaW5kb3csIERvY3VtZW50CisKK0Jyb3dzZXIuZXh0ZW5kKHsKKwlEb2N1bWVudDogdGhpcy5Eb2N1bWVudCwKKwlXaW5kb3c6IHRoaXMuV2luZG93LAorCUVsZW1lbnQ6IHRoaXMuRWxlbWVudCwKKwlFdmVudDogdGhpcy5FdmVudAorfSk7CisKK3RoaXMuV2luZG93ID0gdGhpcy4kY29uc3RydWN0b3IgPSBuZXcgVHlwZSgnV2luZG93JywgZnVuY3Rpb24oKXt9KTsKKwordGhpcy4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnd2luZG93JykuaGlkZSgpOworCitXaW5kb3cubWlycm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7CisJd2luZG93W25hbWVdID0gbWV0aG9kOworfSk7CisKK3RoaXMuRG9jdW1lbnQgPSBkb2N1bWVudC4kY29uc3RydWN0b3IgPSBuZXcgVHlwZSgnRG9jdW1lbnQnLCBmdW5jdGlvbigpe30pOworCitkb2N1bWVudC4kZmFtaWx5ID0gRnVuY3Rpb24uY29udmVydCgnZG9jdW1lbnQnKS5oaWRlKCk7CisKK0RvY3VtZW50Lm1pcnJvcihmdW5jdGlvbihuYW1lLCBtZXRob2QpeworCWRvY3VtZW50W25hbWVdID0gbWV0aG9kOworfSk7CisKK2RvY3VtZW50Lmh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CitpZiAoIWRvY3VtZW50LmhlYWQpIGRvY3VtZW50LmhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdOworCitpZiAoZG9jdW1lbnQuZXhlY0NvbW1hbmQpIHRyeSB7CisJZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ0JhY2tncm91bmRJbWFnZUNhY2hlJywgZmFsc2UsIHRydWUpOworfSBjYXRjaCAoZSl7fQorCisvKjxsdElFOT4qLworaWYgKHRoaXMuYXR0YWNoRXZlbnQgJiYgIXRoaXMuYWRkRXZlbnRMaXN0ZW5lcil7CisJdmFyIHVubG9hZEV2ZW50ID0gZnVuY3Rpb24oKXsKKwkJdGhpcy5kZXRhY2hFdmVudCgnb251bmxvYWQnLCB1bmxvYWRFdmVudCk7CisJCWRvY3VtZW50LmhlYWQgPSBkb2N1bWVudC5odG1sID0gZG9jdW1lbnQud2luZG93ID0gbnVsbDsKKwkJd2luZG93ID0gdGhpcy5XaW5kb3cgPSBkb2N1bWVudCA9IG51bGw7CisJfTsKKwl0aGlzLmF0dGFjaEV2ZW50KCdvbnVubG9hZCcsIHVubG9hZEV2ZW50KTsKK30KKworLy8gSUUgZmFpbHMgb24gY29sbGVjdGlvbnMgYW5kIDxzZWxlY3Q+Lm9wdGlvbnMgKHJlZmVycyB0byA8c2VsZWN0PikKK3ZhciBhcnJheUZyb20gPSBBcnJheS5jb252ZXJ0OwordHJ5IHsKKwlhcnJheUZyb20oZG9jdW1lbnQuaHRtbC5jaGlsZE5vZGVzKTsKK30gY2F0Y2ggKGUpeworCUFycmF5LmNvbnZlcnQgPSBmdW5jdGlvbihpdGVtKXsKKwkJaWYgKHR5cGVvZiBpdGVtICE9ICdzdHJpbmcnICYmIFR5cGUuaXNFbnVtZXJhYmxlKGl0ZW0pICYmIHR5cGVPZihpdGVtKSAhPSAnYXJyYXknKXsKKwkJCXZhciBpID0gaXRlbS5sZW5ndGgsIGFycmF5ID0gbmV3IEFycmF5KGkpOworCQkJd2hpbGUgKGktLSkgYXJyYXlbaV0gPSBpdGVtW2ldOworCQkJcmV0dXJuIGFycmF5OworCQl9CisJCXJldHVybiBhcnJheUZyb20oaXRlbSk7CisJfTsKKworCXZhciBwcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGUsCisJCXNsaWNlID0gcHJvdG90eXBlLnNsaWNlOworCVsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0JywgJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10uZWFjaChmdW5jdGlvbihuYW1lKXsKKwkJdmFyIG1ldGhvZCA9IHByb3RvdHlwZVtuYW1lXTsKKwkJQXJyYXlbbmFtZV0gPSBmdW5jdGlvbihpdGVtKXsKKwkJCXJldHVybiBtZXRob2QuYXBwbHkoQXJyYXkuY29udmVydChpdGVtKSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTsKKwkJfTsKKwl9KTsKK30KKy8qPC9sdElFOT4qLworCisKKworfSkoKTsKKworLyoKKy0tLQorCituYW1lOiBDbGFzcworCitkZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIENsYXNzIEZ1bmN0aW9uIGZvciBlYXNpbHkgY3JlYXRpbmcsIGV4dGVuZGluZywgYW5kIGltcGxlbWVudGluZyByZXVzYWJsZSBDbGFzc2VzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworcmVxdWlyZXM6IFtBcnJheSwgU3RyaW5nLCBGdW5jdGlvbiwgTnVtYmVyXQorCitwcm92aWRlczogQ2xhc3MKKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIENsYXNzID0gdGhpcy5DbGFzcyA9IG5ldyBUeXBlKCdDbGFzcycsIGZ1bmN0aW9uKHBhcmFtcyl7CisJaWYgKGluc3RhbmNlT2YocGFyYW1zLCBGdW5jdGlvbikpIHBhcmFtcyA9IHtpbml0aWFsaXplOiBwYXJhbXN9OworCisJdmFyIG5ld0NsYXNzID0gZnVuY3Rpb24oKXsKKwkJcmVzZXQodGhpcyk7CisJCWlmIChuZXdDbGFzcy4kcHJvdG90eXBpbmcpIHJldHVybiB0aGlzOworCQl0aGlzLiRjYWxsZXIgPSBudWxsOworCQl0aGlzLiRmYW1pbHkgPSBudWxsOworCQl2YXIgdmFsdWUgPSAodGhpcy5pbml0aWFsaXplKSA/IHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogdGhpczsKKwkJdGhpcy4kY2FsbGVyID0gdGhpcy5jYWxsZXIgPSBudWxsOworCQlyZXR1cm4gdmFsdWU7CisJfS5leHRlbmQodGhpcykuaW1wbGVtZW50KHBhcmFtcyk7CisKKwluZXdDbGFzcy4kY29uc3RydWN0b3IgPSBDbGFzczsKKwluZXdDbGFzcy5wcm90b3R5cGUuJGNvbnN0cnVjdG9yID0gbmV3Q2xhc3M7CisJbmV3Q2xhc3MucHJvdG90eXBlLnBhcmVudCA9IHBhcmVudDsKKworCXJldHVybiBuZXdDbGFzczsKK30pOworCit2YXIgcGFyZW50ID0gZnVuY3Rpb24oKXsKKwlpZiAoIXRoaXMuJGNhbGxlcikgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kICJwYXJlbnQiIGNhbm5vdCBiZSBjYWxsZWQuJyk7CisJdmFyIG5hbWUgPSB0aGlzLiRjYWxsZXIuJG5hbWUsCisJCXBhcmVudCA9IHRoaXMuJGNhbGxlci4kb3duZXIucGFyZW50LAorCQlwcmV2aW91cyA9IChwYXJlbnQpID8gcGFyZW50LnByb3RvdHlwZVtuYW1lXSA6IG51bGw7CisJaWYgKCFwcmV2aW91cykgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kICInICsgbmFtZSArICciIGhhcyBubyBwYXJlbnQuJyk7CisJcmV0dXJuIHByZXZpb3VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cit9OworCit2YXIgcmVzZXQgPSBmdW5jdGlvbihvYmplY3QpeworCWZvciAodmFyIGtleSBpbiBvYmplY3QpeworCQl2YXIgdmFsdWUgPSBvYmplY3Rba2V5XTsKKwkJc3dpdGNoICh0eXBlT2YodmFsdWUpKXsKKwkJCWNhc2UgJ29iamVjdCc6CisJCQkJdmFyIEYgPSBmdW5jdGlvbigpe307CisJCQkJRi5wcm90b3R5cGUgPSB2YWx1ZTsKKwkJCQlvYmplY3Rba2V5XSA9IHJlc2V0KG5ldyBGKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2FycmF5Jzogb2JqZWN0W2tleV0gPSB2YWx1ZS5jbG9uZSgpOyBicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gb2JqZWN0OworfTsKKwordmFyIHdyYXAgPSBmdW5jdGlvbihzZWxmLCBrZXksIG1ldGhvZCl7CisJaWYgKG1ldGhvZC4kb3JpZ2luKSBtZXRob2QgPSBtZXRob2QuJG9yaWdpbjsKKwl2YXIgd3JhcHBlciA9IGZ1bmN0aW9uKCl7CisJCWlmIChtZXRob2QuJHByb3RlY3RlZCAmJiB0aGlzLiRjYWxsZXIgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWV0aG9kICInICsga2V5ICsgJyIgY2Fubm90IGJlIGNhbGxlZC4nKTsKKwkJdmFyIGNhbGxlciA9IHRoaXMuY2FsbGVyLCBjdXJyZW50ID0gdGhpcy4kY2FsbGVyOworCQl0aGlzLmNhbGxlciA9IGN1cnJlbnQ7IHRoaXMuJGNhbGxlciA9IHdyYXBwZXI7CisJCXZhciByZXN1bHQgPSBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKwkJdGhpcy4kY2FsbGVyID0gY3VycmVudDsgdGhpcy5jYWxsZXIgPSBjYWxsZXI7CisJCXJldHVybiByZXN1bHQ7CisJfS5leHRlbmQoeyRvd25lcjogc2VsZiwgJG9yaWdpbjogbWV0aG9kLCAkbmFtZToga2V5fSk7CisJcmV0dXJuIHdyYXBwZXI7Cit9OworCit2YXIgaW1wbGVtZW50ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgcmV0YWluKXsKKwlpZiAoQ2xhc3MuTXV0YXRvcnMuaGFzT3duUHJvcGVydHkoa2V5KSl7CisJCXZhbHVlID0gQ2xhc3MuTXV0YXRvcnNba2V5XS5jYWxsKHRoaXMsIHZhbHVlKTsKKwkJaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzOworCX0KKworCWlmICh0eXBlT2YodmFsdWUpID09ICdmdW5jdGlvbicpeworCQlpZiAodmFsdWUuJGhpZGRlbikgcmV0dXJuIHRoaXM7CisJCXRoaXMucHJvdG90eXBlW2tleV0gPSAocmV0YWluKSA/IHZhbHVlIDogd3JhcCh0aGlzLCBrZXksIHZhbHVlKTsKKwl9IGVsc2UgeworCQlPYmplY3QubWVyZ2UodGhpcy5wcm90b3R5cGUsIGtleSwgdmFsdWUpOworCX0KKworCXJldHVybiB0aGlzOworfTsKKwordmFyIGdldEluc3RhbmNlID0gZnVuY3Rpb24oa2xhc3MpeworCWtsYXNzLiRwcm90b3R5cGluZyA9IHRydWU7CisJdmFyIHByb3RvID0gbmV3IGtsYXNzOworCWRlbGV0ZSBrbGFzcy4kcHJvdG90eXBpbmc7CisJcmV0dXJuIHByb3RvOworfTsKKworQ2xhc3MuaW1wbGVtZW50KCdpbXBsZW1lbnQnLCBpbXBsZW1lbnQub3ZlcmxvYWRTZXR0ZXIoKSk7CisKK0NsYXNzLk11dGF0b3JzID0geworCisJRXh0ZW5kczogZnVuY3Rpb24ocGFyZW50KXsKKwkJdGhpcy5wYXJlbnQgPSBwYXJlbnQ7CisJCXRoaXMucHJvdG90eXBlID0gZ2V0SW5zdGFuY2UocGFyZW50KTsKKwl9LAorCisJSW1wbGVtZW50czogZnVuY3Rpb24oaXRlbXMpeworCQlBcnJheS5jb252ZXJ0KGl0ZW1zKS5lYWNoKGZ1bmN0aW9uKGl0ZW0peworCQkJdmFyIGluc3RhbmNlID0gbmV3IGl0ZW07CisJCQlmb3IgKHZhciBrZXkgaW4gaW5zdGFuY2UpIGltcGxlbWVudC5jYWxsKHRoaXMsIGtleSwgaW5zdGFuY2Vba2V5XSwgdHJ1ZSk7CisJCX0sIHRoaXMpOworCX0KK307CisKK30pKCk7CisKKy8qCistLS0KKworbmFtZTogQ2xhc3MuRXh0cmFzCisKK2Rlc2NyaXB0aW9uOiBDb250YWlucyBVdGlsaXR5IENsYXNzZXMgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIGVhc2UgdGhlIGV4ZWN1dGlvbiBvZiBtYW55IGNvbW1vbiB0YXNrcy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuCisKK3JlcXVpcmVzOiBDbGFzcworCitwcm92aWRlczogW0NsYXNzLkV4dHJhcywgQ2hhaW4sIEV2ZW50cywgT3B0aW9uc10KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordGhpcy5DaGFpbiA9IG5ldyBDbGFzcyh7CisKKwkkY2hhaW46IFtdLAorCisJY2hhaW46IGZ1bmN0aW9uKCl7CisJCXRoaXMuJGNoYWluLmFwcGVuZChBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJY2FsbENoYWluOiBmdW5jdGlvbigpeworCQlyZXR1cm4gKHRoaXMuJGNoYWluLmxlbmd0aCkgPyB0aGlzLiRjaGFpbi5zaGlmdCgpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBmYWxzZTsKKwl9LAorCisJY2xlYXJDaGFpbjogZnVuY3Rpb24oKXsKKwkJdGhpcy4kY2hhaW4uZW1wdHkoKTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKwordmFyIHJlbW92ZU9uID0gZnVuY3Rpb24oc3RyaW5nKXsKKwlyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL15vbihbQS1aXSkvLCBmdW5jdGlvbihmdWxsLCBmaXJzdCl7CisJCXJldHVybiBmaXJzdC50b0xvd2VyQ2FzZSgpOworCX0pOworfTsKKwordGhpcy5FdmVudHMgPSBuZXcgQ2xhc3MoeworCisJJGV2ZW50czoge30sCisKKwlhZGRFdmVudDogZnVuY3Rpb24odHlwZSwgZm4sIGludGVybmFsKXsKKwkJdHlwZSA9IHJlbW92ZU9uKHR5cGUpOworCisJCQorCisJCXRoaXMuJGV2ZW50c1t0eXBlXSA9ICh0aGlzLiRldmVudHNbdHlwZV0gfHwgW10pLmluY2x1ZGUoZm4pOworCQlpZiAoaW50ZXJuYWwpIGZuLmludGVybmFsID0gdHJ1ZTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWFkZEV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXsKKwkJZm9yICh2YXIgdHlwZSBpbiBldmVudHMpIHRoaXMuYWRkRXZlbnQodHlwZSwgZXZlbnRzW3R5cGVdKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWZpcmVFdmVudDogZnVuY3Rpb24odHlwZSwgYXJncywgZGVsYXkpeworCQl0eXBlID0gcmVtb3ZlT24odHlwZSk7CisJCXZhciBldmVudHMgPSB0aGlzLiRldmVudHNbdHlwZV07CisJCWlmICghZXZlbnRzKSByZXR1cm4gdGhpczsKKwkJYXJncyA9IEFycmF5LmNvbnZlcnQoYXJncyk7CisJCWV2ZW50cy5lYWNoKGZ1bmN0aW9uKGZuKXsKKwkJCWlmIChkZWxheSkgZm4uZGVsYXkoZGVsYXksIHRoaXMsIGFyZ3MpOworCQkJZWxzZSBmbi5hcHBseSh0aGlzLCBhcmdzKTsKKwkJfSwgdGhpcyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlyZW1vdmVFdmVudDogZnVuY3Rpb24odHlwZSwgZm4peworCQl0eXBlID0gcmVtb3ZlT24odHlwZSk7CisJCXZhciBldmVudHMgPSB0aGlzLiRldmVudHNbdHlwZV07CisJCWlmIChldmVudHMgJiYgIWZuLmludGVybmFsKXsKKwkJCXZhciBpbmRleCA9IGV2ZW50cy5pbmRleE9mKGZuKTsKKwkJCWlmIChpbmRleCAhPSAtMSkgZGVsZXRlIGV2ZW50c1tpbmRleF07CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXJlbW92ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKXsKKwkJdmFyIHR5cGU7CisJCWlmICh0eXBlT2YoZXZlbnRzKSA9PSAnb2JqZWN0Jyl7CisJCQlmb3IgKHR5cGUgaW4gZXZlbnRzKSB0aGlzLnJlbW92ZUV2ZW50KHR5cGUsIGV2ZW50c1t0eXBlXSk7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQlpZiAoZXZlbnRzKSBldmVudHMgPSByZW1vdmVPbihldmVudHMpOworCQlmb3IgKHR5cGUgaW4gdGhpcy4kZXZlbnRzKXsKKwkJCWlmIChldmVudHMgJiYgZXZlbnRzICE9IHR5cGUpIGNvbnRpbnVlOworCQkJdmFyIGZucyA9IHRoaXMuJGV2ZW50c1t0eXBlXTsKKwkJCWZvciAodmFyIGkgPSBmbnMubGVuZ3RoOyBpLS07KSBpZiAoaSBpbiBmbnMpeworCQkJCXRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZm5zW2ldKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCit0aGlzLk9wdGlvbnMgPSBuZXcgQ2xhc3MoeworCisJc2V0T3B0aW9uczogZnVuY3Rpb24oKXsKKwkJdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSBPYmplY3QubWVyZ2UuYXBwbHkobnVsbCwgW3t9LCB0aGlzLm9wdGlvbnNdLmFwcGVuZChhcmd1bWVudHMpKTsKKwkJaWYgKHRoaXMuYWRkRXZlbnQpIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKXsKKwkJCWlmICh0eXBlT2Yob3B0aW9uc1tvcHRpb25dKSAhPSAnZnVuY3Rpb24nIHx8ICEoL15vbltBLVpdLykudGVzdChvcHRpb24pKSBjb250aW51ZTsKKwkJCXRoaXMuYWRkRXZlbnQob3B0aW9uLCBvcHRpb25zW29wdGlvbl0pOworCQkJZGVsZXRlIG9wdGlvbnNbb3B0aW9uXTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCit9KSgpOworCisvKgorLS0tCisKK25hbWU6IENsYXNzLlRoZW5hYmxlCisKK2Rlc2NyaXB0aW9uOiBDb250YWlucyBhIFV0aWxpdHkgQ2xhc3MgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgaW50byB5b3VyIG93biBDbGFzc2VzIHRvIG1ha2UgdGhlbSAidGhlbmFibGUiLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworcmVxdWlyZXM6IENsYXNzCisKK3Byb3ZpZGVzOiBbQ2xhc3MuVGhlbmFibGVdCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK3ZhciBTVEFURV9QRU5ESU5HID0gMCwKKwlTVEFURV9GVUxGSUxMRUQgPSAxLAorCVNUQVRFX1JFSkVDVEVEID0gMjsKKwordmFyIFRoZW5hYmxlID0gQ2xhc3MuVGhlbmFibGUgPSBuZXcgQ2xhc3MoeworCisJJHRoZW5hYmxlU3RhdGU6IFNUQVRFX1BFTkRJTkcsCisJJHRoZW5hYmxlUmVzdWx0OiBudWxsLAorCSR0aGVuYWJsZVJlYWN0aW9uczogW10sCisKKwlyZXNvbHZlOiBmdW5jdGlvbih2YWx1ZSl7CisJCXJlc29sdmUodGhpcywgdmFsdWUpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVqZWN0OiBmdW5jdGlvbihyZWFzb24peworCQlyZWplY3QodGhpcywgcmVhc29uKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWdldFRoZW5hYmxlU3RhdGU6IGZ1bmN0aW9uKCl7CisJCXN3aXRjaCAodGhpcy4kdGhlbmFibGVTdGF0ZSl7CisJCQljYXNlIFNUQVRFX1BFTkRJTkc6CisJCQkJcmV0dXJuICdwZW5kaW5nJzsKKworCQkJY2FzZSBTVEFURV9GVUxGSUxMRUQ6CisJCQkJcmV0dXJuICdmdWxmaWxsZWQnOworCisJCQljYXNlIFNUQVRFX1JFSkVDVEVEOgorCQkJCXJldHVybiAncmVqZWN0ZWQnOworCQl9CisJfSwKKworCXJlc2V0VGhlbmFibGU6IGZ1bmN0aW9uKHJlYXNvbil7CisJCXJlamVjdCh0aGlzLCByZWFzb24pOworCQlyZXNldCh0aGlzKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXRoZW46IGZ1bmN0aW9uKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKXsKKwkJaWYgKHR5cGVvZiBvbkZ1bGZpbGxlZCAhPT0gJ2Z1bmN0aW9uJykgb25GdWxmaWxsZWQgPSAnSWRlbnRpdHknOworCQlpZiAodHlwZW9mIG9uUmVqZWN0ZWQgIT09ICdmdW5jdGlvbicpIG9uUmVqZWN0ZWQgPSAnVGhyb3dlcic7CisKKwkJdmFyIHRoZW5hYmxlID0gbmV3IFRoZW5hYmxlKCk7CisKKwkJdGhpcy4kdGhlbmFibGVSZWFjdGlvbnMucHVzaCh7CisJCQl0aGVuYWJsZTogdGhlbmFibGUsCisJCQlmdWxmaWxsSGFuZGxlcjogb25GdWxmaWxsZWQsCisJCQlyZWplY3RIYW5kbGVyOiBvblJlamVjdGVkCisJCX0pOworCisJCWlmICh0aGlzLiR0aGVuYWJsZVN0YXRlICE9PSBTVEFURV9QRU5ESU5HKXsKKwkJCXJlYWN0KHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHRoZW5hYmxlOworCX0sCisKKwknY2F0Y2gnOiBmdW5jdGlvbihvblJlamVjdGVkKXsKKwkJcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTsKKwl9CisKK30pOworCitUaGVuYWJsZS5leHRlbmQoeworCXJlc29sdmU6IGZ1bmN0aW9uKHZhbHVlKXsKKwkJdmFyIHRoZW5hYmxlOworCQlpZiAodmFsdWUgaW5zdGFuY2VvZiBUaGVuYWJsZSl7CisJCQl0aGVuYWJsZSA9IHZhbHVlOworCQl9IGVsc2UgeworCQkJdGhlbmFibGUgPSBuZXcgVGhlbmFibGUoKTsKKwkJCXJlc29sdmUodGhlbmFibGUsIHZhbHVlKTsKKwkJfQorCQlyZXR1cm4gdGhlbmFibGU7CisJfSwKKwlyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbil7CisJCXZhciB0aGVuYWJsZSA9IG5ldyBUaGVuYWJsZSgpOworCQlyZWplY3QodGhlbmFibGUsIHJlYXNvbik7CisJCXJldHVybiB0aGVuYWJsZTsKKwl9Cit9KTsKKworLy8gUHJpdmF0ZSBmdW5jdGlvbnMKKworZnVuY3Rpb24gcmVzb2x2ZSh0aGVuYWJsZSwgdmFsdWUpeworCWlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7CisJCWlmICh0aGVuYWJsZSA9PT0gdmFsdWUpeworCQkJcmVqZWN0KHRoZW5hYmxlLCBuZXcgVHlwZUVycm9yKCdUcmllZCB0byByZXNvbHZlIGEgdGhlbmFibGUgd2l0aCBpdHNlbGYuJykpOworCQl9IGVsc2UgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpeworCQkJdmFyIHRoZW47CisJCQl0cnkgeworCQkJCXRoZW4gPSB2YWx1ZS50aGVuOworCQkJfSBjYXRjaCAoZXhjZXB0aW9uKXsKKwkJCQlyZWplY3QodGhlbmFibGUsIGV4Y2VwdGlvbik7CisJCQl9CisJCQlpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpeworCQkJCXZhciByZXNvbHZlZCA9IGZhbHNlOworCQkJCWRlZmVyKGZ1bmN0aW9uKCl7CisJCQkJCXRyeSB7CisJCQkJCQl0aGVuLmNhbGwoCisJCQkJCQkJdmFsdWUsCisJCQkJCQkJZnVuY3Rpb24obmV4dFZhbHVlKXsKKwkJCQkJCQkJaWYgKCFyZXNvbHZlZCl7CisJCQkJCQkJCQlyZXNvbHZlZCA9IHRydWU7CisJCQkJCQkJCQlyZXNvbHZlKHRoZW5hYmxlLCBuZXh0VmFsdWUpOworCQkJCQkJCQl9CisJCQkJCQkJfSwKKwkJCQkJCQlmdW5jdGlvbihyZWFzb24peworCQkJCQkJCQlpZiAoIXJlc29sdmVkKXsKKwkJCQkJCQkJCXJlc29sdmVkID0gdHJ1ZTsKKwkJCQkJCQkJCXJlamVjdCh0aGVuYWJsZSwgcmVhc29uKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCSk7CisJCQkJCX0gY2F0Y2ggKGV4Y2VwdGlvbil7CisJCQkJCQlpZiAoIXJlc29sdmVkKXsKKwkJCQkJCQlyZXNvbHZlZCA9IHRydWU7CisJCQkJCQkJcmVqZWN0KHRoZW5hYmxlLCBleGNlcHRpb24pOworCQkJCQkJfQorCQkJCQl9CisJCQkJfSk7CisJCQl9IGVsc2UgeworCQkJCWZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWZ1bGZpbGwodGhlbmFibGUsIHZhbHVlKTsKKwkJfQorCX0KK30KKworZnVuY3Rpb24gZnVsZmlsbCh0aGVuYWJsZSwgdmFsdWUpeworCWlmICh0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9PT0gU1RBVEVfUEVORElORyl7CisJCXRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCA9IHZhbHVlOworCQl0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX0ZVTEZJTExFRDsKKworCQlyZWFjdCh0aGVuYWJsZSk7CisJfQorfQorCitmdW5jdGlvbiByZWplY3QodGhlbmFibGUsIHJlYXNvbil7CisJaWYgKHRoZW5hYmxlLiR0aGVuYWJsZVN0YXRlID09PSBTVEFURV9QRU5ESU5HKXsKKwkJdGhlbmFibGUuJHRoZW5hYmxlUmVzdWx0ID0gcmVhc29uOworCQl0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX1JFSkVDVEVEOworCisJCXJlYWN0KHRoZW5hYmxlKTsKKwl9Cit9CisKK2Z1bmN0aW9uIHJlc2V0KHRoZW5hYmxlKXsKKwlpZiAodGhlbmFibGUuJHRoZW5hYmxlU3RhdGUgIT09IFNUQVRFX1BFTkRJTkcpeworCQl0aGVuYWJsZS4kdGhlbmFibGVSZXN1bHQgPSBudWxsOworCQl0aGVuYWJsZS4kdGhlbmFibGVTdGF0ZSA9IFNUQVRFX1BFTkRJTkc7CisJfQorfQorCitmdW5jdGlvbiByZWFjdCh0aGVuYWJsZSl7CisJdmFyIHN0YXRlID0gdGhlbmFibGUuJHRoZW5hYmxlU3RhdGUsCisJCXJlc3VsdCA9IHRoZW5hYmxlLiR0aGVuYWJsZVJlc3VsdCwKKwkJcmVhY3Rpb25zID0gdGhlbmFibGUuJHRoZW5hYmxlUmVhY3Rpb25zLAorCQl0eXBlOworCisJaWYgKHN0YXRlID09PSBTVEFURV9GVUxGSUxMRUQpeworCQl0aGVuYWJsZS4kdGhlbmFibGVSZWFjdGlvbnMgPSBbXTsKKwkJdHlwZSA9ICdmdWxmaWxsSGFuZGxlcic7CisJfSBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9SRUpFQ1RFRCl7CisJCXRoZW5hYmxlLiR0aGVuYWJsZVJlYWN0aW9ucyA9IFtdOworCQl0eXBlID0gJ3JlamVjdEhhbmRsZXInOworCX0KKworCWlmICh0eXBlKXsKKwkJZGVmZXIoaGFuZGxlLnBhc3MoW3Jlc3VsdCwgcmVhY3Rpb25zLCB0eXBlXSkpOworCX0KK30KKworZnVuY3Rpb24gaGFuZGxlKHJlc3VsdCwgcmVhY3Rpb25zLCB0eXBlKXsKKwlmb3IgKHZhciBpID0gMCwgbCA9IHJlYWN0aW9ucy5sZW5ndGg7IGkgPCBsOyArK2kpeworCQl2YXIgcmVhY3Rpb24gPSByZWFjdGlvbnNbaV0sCisJCQloYW5kbGVyID0gcmVhY3Rpb25bdHlwZV07CisKKwkJaWYgKGhhbmRsZXIgPT09ICdJZGVudGl0eScpeworCQkJcmVzb2x2ZShyZWFjdGlvbi50aGVuYWJsZSwgcmVzdWx0KTsKKwkJfSBlbHNlIGlmIChoYW5kbGVyID09PSAnVGhyb3dlcicpeworCQkJcmVqZWN0KHJlYWN0aW9uLnRoZW5hYmxlLCByZXN1bHQpOworCQl9IGVsc2UgeworCQkJdHJ5IHsKKwkJCQlyZXNvbHZlKHJlYWN0aW9uLnRoZW5hYmxlLCBoYW5kbGVyKHJlc3VsdCkpOworCQkJfSBjYXRjaCAoZXhjZXB0aW9uKXsKKwkJCQlyZWplY3QocmVhY3Rpb24udGhlbmFibGUsIGV4Y2VwdGlvbik7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZhciBkZWZlcjsKK2lmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT09ICdmdW5jdGlvbicpeworCWRlZmVyID0gcHJvY2Vzcy5uZXh0VGljazsKK30gZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpeworCWRlZmVyID0gc2V0SW1tZWRpYXRlOworfSBlbHNlIHsKKwlkZWZlciA9IGZ1bmN0aW9uKGZuKXsKKwkJc2V0VGltZW91dChmbiwgMCk7CisJfTsKK30KKworfSkoKTsKKworLyoKKy0tLQorCituYW1lOiBPYmplY3QKKworZGVzY3JpcHRpb246IE9iamVjdCBnZW5lcmljIG1ldGhvZHMKKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuCisKK3JlcXVpcmVzOiBUeXBlCisKK3Byb3ZpZGVzOiBbT2JqZWN0LCBIYXNoXQorCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCitPYmplY3QuZXh0ZW5kKHsKKworCXN1YnNldDogZnVuY3Rpb24ob2JqZWN0LCBrZXlzKXsKKwkJdmFyIHJlc3VsdHMgPSB7fTsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7CisJCQl2YXIgayA9IGtleXNbaV07CisJCQlpZiAoayBpbiBvYmplY3QpIHJlc3VsdHNba10gPSBvYmplY3Rba107CisJCX0KKwkJcmV0dXJuIHJlc3VsdHM7CisJfSwKKworCW1hcDogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7CisJCXZhciByZXN1bHRzID0ge307CisJCXZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsKKwkJZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXsKKwkJCXZhciBrZXkgPSBrZXlzW2ldOworCQkJcmVzdWx0c1trZXldID0gZm4uY2FsbChiaW5kLCBvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpOworCQl9CisJCXJldHVybiByZXN1bHRzOworCX0sCisKKwlmaWx0ZXI6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpeworCQl2YXIgcmVzdWx0cyA9IHt9OworCQl2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7CisJCWZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7CisJCQl2YXIga2V5ID0ga2V5c1tpXSwgdmFsdWUgPSBvYmplY3Rba2V5XTsKKwkJCWlmIChmbi5jYWxsKGJpbmQsIHZhbHVlLCBrZXksIG9iamVjdCkpIHJlc3VsdHNba2V5XSA9IHZhbHVlOworCQl9CisJCXJldHVybiByZXN1bHRzOworCX0sCisKKwlldmVyeTogZnVuY3Rpb24ob2JqZWN0LCBmbiwgYmluZCl7CisJCXZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsKKwkJZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXsKKwkJCXZhciBrZXkgPSBrZXlzW2ldOworCQkJaWYgKCFmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gZmFsc2U7CisJCX0KKwkJcmV0dXJuIHRydWU7CisJfSwKKworCXNvbWU6IGZ1bmN0aW9uKG9iamVjdCwgZm4sIGJpbmQpeworCQl2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7CisJCWZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7CisJCQl2YXIga2V5ID0ga2V5c1tpXTsKKwkJCWlmIChmbi5jYWxsKGJpbmQsIG9iamVjdFtrZXldLCBrZXkpKSByZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfSwKKworCXZhbHVlczogZnVuY3Rpb24ob2JqZWN0KXsKKwkJdmFyIHZhbHVlcyA9IFtdOworCQl2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7CisJCWZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7CisJCQl2YXIgayA9IGtleXNbaV07CisJCQl2YWx1ZXMucHVzaChvYmplY3Rba10pOworCQl9CisJCXJldHVybiB2YWx1ZXM7CisJfSwKKworCWdldExlbmd0aDogZnVuY3Rpb24ob2JqZWN0KXsKKwkJcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoOworCX0sCisKKwlrZXlPZjogZnVuY3Rpb24ob2JqZWN0LCB2YWx1ZSl7CisJCXZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsKKwkJZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXsKKwkJCXZhciBrZXkgPSBrZXlzW2ldOworCQkJaWYgKG9iamVjdFtrZXldID09PSB2YWx1ZSkgcmV0dXJuIGtleTsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9LAorCisJY29udGFpbnM6IGZ1bmN0aW9uKG9iamVjdCwgdmFsdWUpeworCQlyZXR1cm4gT2JqZWN0LmtleU9mKG9iamVjdCwgdmFsdWUpICE9IG51bGw7CisJfSwKKworCXRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKG9iamVjdCwgYmFzZSl7CisJCXZhciBxdWVyeVN0cmluZyA9IFtdOworCisJCU9iamVjdC5lYWNoKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSl7CisJCQlpZiAoYmFzZSkga2V5ID0gYmFzZSArICdbJyArIGtleSArICddJzsKKwkJCXZhciByZXN1bHQ7CisJCQlzd2l0Y2ggKHR5cGVPZih2YWx1ZSkpeworCQkJCWNhc2UgJ29iamVjdCc6IHJlc3VsdCA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKHZhbHVlLCBrZXkpOyBicmVhazsKKwkJCQljYXNlICdhcnJheSc6CisJCQkJCXZhciBxcyA9IHt9OworCQkJCQl2YWx1ZS5lYWNoKGZ1bmN0aW9uKHZhbCwgaSl7CisJCQkJCQlxc1tpXSA9IHZhbDsKKwkJCQkJfSk7CisJCQkJCXJlc3VsdCA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKHFzLCBrZXkpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OiByZXN1bHQgPSBrZXkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpOworCQkJfQorCQkJaWYgKHZhbHVlICE9IG51bGwpIHF1ZXJ5U3RyaW5nLnB1c2gocmVzdWx0KTsKKwkJfSk7CisKKwkJcmV0dXJuIHF1ZXJ5U3RyaW5nLmpvaW4oJyYnKTsKKwl9CisKK30pOworCit9KSgpOworCisKKworLyoKKy0tLQorbmFtZTogU2xpY2suUGFyc2VyCitkZXNjcmlwdGlvbjogU3RhbmRhbG9uZSBDU1MzIFNlbGVjdG9yIHBhcnNlcgorcHJvdmlkZXM6IFNsaWNrLlBhcnNlcgorLi4uCisqLworCis7KGZ1bmN0aW9uKCl7CisKK3ZhciBwYXJzZWQsCisJc2VwYXJhdG9ySW5kZXgsCisJY29tYmluYXRvckluZGV4LAorCXJldmVyc2VkLAorCWNhY2hlID0ge30sCisJcmV2ZXJzZUNhY2hlID0ge30sCisJcmVVbmVzY2FwZSA9IC9cXC9nOworCit2YXIgcGFyc2UgPSBmdW5jdGlvbihleHByZXNzaW9uLCBpc1JldmVyc2VkKXsKKwlpZiAoZXhwcmVzc2lvbiA9PSBudWxsKSByZXR1cm4gbnVsbDsKKwlpZiAoZXhwcmVzc2lvbi5TbGljayA9PT0gdHJ1ZSkgcmV0dXJuIGV4cHJlc3Npb247CisJZXhwcmVzc2lvbiA9ICgnJyArIGV4cHJlc3Npb24pLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7CisJcmV2ZXJzZWQgPSAhIWlzUmV2ZXJzZWQ7CisJdmFyIGN1cnJlbnRDYWNoZSA9IChyZXZlcnNlZCkgPyByZXZlcnNlQ2FjaGUgOiBjYWNoZTsKKwlpZiAoY3VycmVudENhY2hlW2V4cHJlc3Npb25dKSByZXR1cm4gY3VycmVudENhY2hlW2V4cHJlc3Npb25dOworCXBhcnNlZCA9IHsKKwkJU2xpY2s6IHRydWUsCisJCWV4cHJlc3Npb25zOiBbXSwKKwkJcmF3OiBleHByZXNzaW9uLAorCQlyZXZlcnNlOiBmdW5jdGlvbigpeworCQkJcmV0dXJuIHBhcnNlKHRoaXMucmF3LCB0cnVlKTsKKwkJfQorCX07CisJc2VwYXJhdG9ySW5kZXggPSAtMTsKKwl3aGlsZSAoZXhwcmVzc2lvbiAhPSAoZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZShyZWdleHAsIHBhcnNlcikpKTsKKwlwYXJzZWQubGVuZ3RoID0gcGFyc2VkLmV4cHJlc3Npb25zLmxlbmd0aDsKKwlyZXR1cm4gY3VycmVudENhY2hlW3BhcnNlZC5yYXddID0gKHJldmVyc2VkKSA/IHJldmVyc2UocGFyc2VkKSA6IHBhcnNlZDsKK307CisKK3ZhciByZXZlcnNlQ29tYmluYXRvciA9IGZ1bmN0aW9uKGNvbWJpbmF0b3IpeworCWlmIChjb21iaW5hdG9yID09PSAnIScpIHJldHVybiAnICc7CisJZWxzZSBpZiAoY29tYmluYXRvciA9PT0gJyAnKSByZXR1cm4gJyEnOworCWVsc2UgaWYgKCgvXiEvKS50ZXN0KGNvbWJpbmF0b3IpKSByZXR1cm4gY29tYmluYXRvci5yZXBsYWNlKC9eIS8sICcnKTsKKwllbHNlIHJldHVybiAnIScgKyBjb21iaW5hdG9yOworfTsKKwordmFyIHJldmVyc2UgPSBmdW5jdGlvbihleHByZXNzaW9uKXsKKwl2YXIgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zOworCWZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspeworCQl2YXIgZXhwID0gZXhwcmVzc2lvbnNbaV07CisJCXZhciBsYXN0ID0ge3BhcnRzOiBbXSwgdGFnOiAnKicsIGNvbWJpbmF0b3I6IHJldmVyc2VDb21iaW5hdG9yKGV4cFswXS5jb21iaW5hdG9yKX07CisKKwkJZm9yICh2YXIgaiA9IDA7IGogPCBleHAubGVuZ3RoOyBqKyspeworCQkJdmFyIGNleHAgPSBleHBbal07CisJCQlpZiAoIWNleHAucmV2ZXJzZUNvbWJpbmF0b3IpIGNleHAucmV2ZXJzZUNvbWJpbmF0b3IgPSAnICc7CisJCQljZXhwLmNvbWJpbmF0b3IgPSBjZXhwLnJldmVyc2VDb21iaW5hdG9yOworCQkJZGVsZXRlIGNleHAucmV2ZXJzZUNvbWJpbmF0b3I7CisJCX0KKworCQlleHAucmV2ZXJzZSgpLnB1c2gobGFzdCk7CisJfQorCXJldHVybiBleHByZXNzaW9uOworfTsKKwordmFyIGVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cmluZyl7Ly8gQ3JlZGl0OiBYUmVnRXhwIDAuNi4xIChjKSAyMDA3LTIwMDggU3RldmVuIExldml0aGFuIDxodHRwOi8vc3RldmVubGV2aXRoYW4uY29tL3JlZ2V4L3hyZWdleHAvPiBNSVQgTGljZW5zZQorCXJldHVybiBzdHJpbmcucmVwbGFjZSgvWy1bXF17fSgpKis/LlxcXiR8LCNcc10vZywgZnVuY3Rpb24obWF0Y2gpeworCQlyZXR1cm4gJ1xcJyArIG1hdGNoOworCX0pOworfTsKKwordmFyIHJlZ2V4cCA9IG5ldyBSZWdFeHAoCisvKgorIyEvdXNyL2Jpbi9lbnYgcnVieQorcHV0cyAiXHRcdCIgKyBEQVRBLnJlYWQuZ3N1YigvXChcP3hcKXxccysjLiokfFxzK3xcXCR8XFxuLywnJykKK19fRU5EX18KKwkiKD94KV4oPzpcCisJICBcXHMqICggLCApIFxccyogICAgICAgICAgICAgICAjIFNlcGFyYXRvciAgICAgICAgICBcblwKKwl8IFxccyogKCA8Y29tYmluYXRvcj4rICkgXFxzKiAgICMgQ29tYmluYXRvciAgICAgICAgIFxuXAorCXwgICAgICAoIFxccysgKSAgICAgICAgICAgICAgICAgIyBDb21iaW5hdG9yQ2hpbGRyZW4gXG5cCisJfCAgICAgICggPHVuaWNvZGU+KyB8IFxcKiApICAgICAjIFRhZyAgICAgICAgICAgICAgICBcblwKKwl8IFxcIyAgKCA8dW5pY29kZT4rICAgICAgICkgICAgICMgSUQgICAgICAgICAgICAgICAgIFxuXAorCXwgXFwuICAoIDx1bmljb2RlPisgICAgICAgKSAgICAgIyBDbGFzc05hbWUgICAgICAgICAgXG5cCisJfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEF0dHJpYnV0ZSAgICAgICAgICBcblwKKwlcXFsgIFwKKwkJXFxzKiAoPHVuaWNvZGUxPispICAoPzogIFwKKwkJCVxccyogKFsqXiQhfnxdPz0pICAoPzogIFwKKwkJCQlcXHMqICg/OlwKKwkJCQkJKFtcIiddPykoLio/KVxcOSBcCisJCQkJKVwKKwkJCSkgIFwKKwkJKT8gIFxccyogIFwKKwlcXF0oPyFcXF0pIFxuXAorCXwgICA6KyAoIDx1bmljb2RlPisgKSg/OlwKKwlcXCggKD86XAorCQkoPzooW1wiJ10pKFteXFwxMl0qKVxcMTIpfCgoPzpcXChbXildK1xcKXxbXigpXSopKylcCisJKSBcXClcCisJKT9cCisJKSIKKyovCisJIl4oPzpcXHMqKCwpXFxzKnxcXHMqKDxjb21iaW5hdG9yPispXFxzKnwoXFxzKyl8KDx1bmljb2RlPit8XFwqKXxcXCMoPHVuaWNvZGU+Kyl8XFwuKDx1bmljb2RlPispfFxcW1xccyooPHVuaWNvZGUxPispKD86XFxzKihbKl4kIX58XT89KSg/OlxccyooPzooW1wiJ10/KSguKj8pXFw5KSkpP1xccypcXF0oPyFcXF0pfCg6KykoPHVuaWNvZGU+KykoPzpcXCgoPzooPzooW1wiJ10pKFteXFwxM10qKVxcMTMpfCgoPzpcXChbXildK1xcKXxbXigpXSopKykpXFwpKT8pIgorCS5yZXBsYWNlKC88Y29tYmluYXRvcj4vLCAnWycgKyBlc2NhcGVSZWdFeHAoJz4rfmAhQCQlXiY9e31cXDs8LycpICsgJ10nKQorCS5yZXBsYWNlKC88dW5pY29kZT4vZywgJyg/OltcXHdcXHUwMGExLVxcdUZGRkYtXXxcXFxcW15cXHMwLTlhLWZdKScpCisJLnJlcGxhY2UoLzx1bmljb2RlMT4vZywgJyg/Ols6XFx3XFx1MDBhMS1cXHVGRkZGLV18XFxcXFteXFxzMC05YS1mXSknKQorKTsKKworZnVuY3Rpb24gcGFyc2VyKAorCXJhd01hdGNoLAorCisJc2VwYXJhdG9yLAorCWNvbWJpbmF0b3IsCisJY29tYmluYXRvckNoaWxkcmVuLAorCisJdGFnTmFtZSwKKwlpZCwKKwljbGFzc05hbWUsCisKKwlhdHRyaWJ1dGVLZXksCisJYXR0cmlidXRlT3BlcmF0b3IsCisJYXR0cmlidXRlUXVvdGUsCisJYXR0cmlidXRlVmFsdWUsCisKKwlwc2V1ZG9NYXJrZXIsCisJcHNldWRvQ2xhc3MsCisJcHNldWRvUXVvdGUsCisJcHNldWRvQ2xhc3NRdW90ZWRWYWx1ZSwKKwlwc2V1ZG9DbGFzc1ZhbHVlCispeworCWlmIChzZXBhcmF0b3IgfHwgc2VwYXJhdG9ySW5kZXggPT09IC0xKXsKKwkJcGFyc2VkLmV4cHJlc3Npb25zWysrc2VwYXJhdG9ySW5kZXhdID0gW107CisJCWNvbWJpbmF0b3JJbmRleCA9IC0xOworCQlpZiAoc2VwYXJhdG9yKSByZXR1cm4gJyc7CisJfQorCisJaWYgKGNvbWJpbmF0b3IgfHwgY29tYmluYXRvckNoaWxkcmVuIHx8IGNvbWJpbmF0b3JJbmRleCA9PT0gLTEpeworCQljb21iaW5hdG9yID0gY29tYmluYXRvciB8fCAnICc7CisJCXZhciBjdXJyZW50U2VwYXJhdG9yID0gcGFyc2VkLmV4cHJlc3Npb25zW3NlcGFyYXRvckluZGV4XTsKKwkJaWYgKHJldmVyc2VkICYmIGN1cnJlbnRTZXBhcmF0b3JbY29tYmluYXRvckluZGV4XSkKKwkJCWN1cnJlbnRTZXBhcmF0b3JbY29tYmluYXRvckluZGV4XS5yZXZlcnNlQ29tYmluYXRvciA9IHJldmVyc2VDb21iaW5hdG9yKGNvbWJpbmF0b3IpOworCQljdXJyZW50U2VwYXJhdG9yWysrY29tYmluYXRvckluZGV4XSA9IHtjb21iaW5hdG9yOiBjb21iaW5hdG9yLCB0YWc6ICcqJ307CisJfQorCisJdmFyIGN1cnJlbnRQYXJzZWQgPSBwYXJzZWQuZXhwcmVzc2lvbnNbc2VwYXJhdG9ySW5kZXhdW2NvbWJpbmF0b3JJbmRleF07CisKKwlpZiAodGFnTmFtZSl7CisJCWN1cnJlbnRQYXJzZWQudGFnID0gdGFnTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTsKKworCX0gZWxzZSBpZiAoaWQpeworCQljdXJyZW50UGFyc2VkLmlkID0gaWQucmVwbGFjZShyZVVuZXNjYXBlLCAnJyk7CisKKwl9IGVsc2UgaWYgKGNsYXNzTmFtZSl7CisJCWNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTsKKworCQlpZiAoIWN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0KSBjdXJyZW50UGFyc2VkLmNsYXNzTGlzdCA9IFtdOworCQlpZiAoIWN1cnJlbnRQYXJzZWQuY2xhc3NlcykgY3VycmVudFBhcnNlZC5jbGFzc2VzID0gW107CisJCWN1cnJlbnRQYXJzZWQuY2xhc3NMaXN0LnB1c2goY2xhc3NOYW1lKTsKKwkJY3VycmVudFBhcnNlZC5jbGFzc2VzLnB1c2goeworCQkJdmFsdWU6IGNsYXNzTmFtZSwKKwkJCXJlZ2V4cDogbmV3IFJlZ0V4cCgnKF58XFxzKScgKyBlc2NhcGVSZWdFeHAoY2xhc3NOYW1lKSArICcoXFxzfCQpJykKKwkJfSk7CisKKwl9IGVsc2UgaWYgKHBzZXVkb0NsYXNzKXsKKwkJcHNldWRvQ2xhc3NWYWx1ZSA9IHBzZXVkb0NsYXNzVmFsdWUgfHwgcHNldWRvQ2xhc3NRdW90ZWRWYWx1ZTsKKwkJcHNldWRvQ2xhc3NWYWx1ZSA9IHBzZXVkb0NsYXNzVmFsdWUgPyBwc2V1ZG9DbGFzc1ZhbHVlLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpIDogbnVsbDsKKworCQlpZiAoIWN1cnJlbnRQYXJzZWQucHNldWRvcykgY3VycmVudFBhcnNlZC5wc2V1ZG9zID0gW107CisJCWN1cnJlbnRQYXJzZWQucHNldWRvcy5wdXNoKHsKKwkJCWtleTogcHNldWRvQ2xhc3MucmVwbGFjZShyZVVuZXNjYXBlLCAnJyksCisJCQl2YWx1ZTogcHNldWRvQ2xhc3NWYWx1ZSwKKwkJCXR5cGU6IHBzZXVkb01hcmtlci5sZW5ndGggPT0gMSA/ICdjbGFzcycgOiAnZWxlbWVudCcKKwkJfSk7CisKKwl9IGVsc2UgaWYgKGF0dHJpYnV0ZUtleSl7CisJCWF0dHJpYnV0ZUtleSA9IGF0dHJpYnV0ZUtleS5yZXBsYWNlKHJlVW5lc2NhcGUsICcnKTsKKwkJYXR0cmlidXRlVmFsdWUgPSAoYXR0cmlidXRlVmFsdWUgfHwgJycpLnJlcGxhY2UocmVVbmVzY2FwZSwgJycpOworCisJCXZhciB0ZXN0LCByZWdleHA7CisKKwkJc3dpdGNoIChhdHRyaWJ1dGVPcGVyYXRvcil7CisJCQljYXNlICdePScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAgICAgICAnXicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgICAgICAgICAgICApOyBicmVhazsKKwkJCWNhc2UgJyQ9JyA6IHJlZ2V4cCA9IG5ldyBSZWdFeHAoICAgICAgICAgICAgZXNjYXBlUmVnRXhwKGF0dHJpYnV0ZVZhbHVlKSArJyQnICAgICAgICk7IGJyZWFrOworCQkJY2FzZSAnfj0nIDogcmVnZXhwID0gbmV3IFJlZ0V4cCggJyhefFxccyknKyBlc2NhcGVSZWdFeHAoYXR0cmlidXRlVmFsdWUpICsnKFxcc3wkKScgKTsgYnJlYWs7CisJCQljYXNlICd8PScgOiByZWdleHAgPSBuZXcgUmVnRXhwKCAgICAgICAnXicrIGVzY2FwZVJlZ0V4cChhdHRyaWJ1dGVWYWx1ZSkgKycoLXwkKScgICApOyBicmVhazsKKwkJCWNhc2UgICc9JyA6IHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7CisJCQkJcmV0dXJuIGF0dHJpYnV0ZVZhbHVlID09IHZhbHVlOworCQkJfTsgYnJlYWs7CisJCQljYXNlICcqPScgOiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpeworCQkJCXJldHVybiB2YWx1ZSAmJiB2YWx1ZS5pbmRleE9mKGF0dHJpYnV0ZVZhbHVlKSA+IC0xOworCQkJfTsgYnJlYWs7CisJCQljYXNlICchPScgOiB0ZXN0ID0gZnVuY3Rpb24odmFsdWUpeworCQkJCXJldHVybiBhdHRyaWJ1dGVWYWx1ZSAhPSB2YWx1ZTsKKwkJCX07IGJyZWFrOworCQkJZGVmYXVsdCAgIDogdGVzdCA9IGZ1bmN0aW9uKHZhbHVlKXsKKwkJCQlyZXR1cm4gISF2YWx1ZTsKKwkJCX07CisJCX0KKworCQlpZiAoYXR0cmlidXRlVmFsdWUgPT0gJycgJiYgKC9eWyokXl09JC8pLnRlc3QoYXR0cmlidXRlT3BlcmF0b3IpKSB0ZXN0ID0gZnVuY3Rpb24oKXsKKwkJCXJldHVybiBmYWxzZTsKKwkJfTsKKworCQlpZiAoIXRlc3QpIHRlc3QgPSBmdW5jdGlvbih2YWx1ZSl7CisJCQlyZXR1cm4gdmFsdWUgJiYgcmVnZXhwLnRlc3QodmFsdWUpOworCQl9OworCisJCWlmICghY3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzKSBjdXJyZW50UGFyc2VkLmF0dHJpYnV0ZXMgPSBbXTsKKwkJY3VycmVudFBhcnNlZC5hdHRyaWJ1dGVzLnB1c2goeworCQkJa2V5OiBhdHRyaWJ1dGVLZXksCisJCQlvcGVyYXRvcjogYXR0cmlidXRlT3BlcmF0b3IsCisJCQl2YWx1ZTogYXR0cmlidXRlVmFsdWUsCisJCQl0ZXN0OiB0ZXN0CisJCX0pOworCisJfQorCisJcmV0dXJuICcnOworfTsKKworLy8gU2xpY2sgTlMKKwordmFyIFNsaWNrID0gKHRoaXMuU2xpY2sgfHwge30pOworCitTbGljay5wYXJzZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24peworCXJldHVybiBwYXJzZShleHByZXNzaW9uKTsKK307CisKK1NsaWNrLmVzY2FwZVJlZ0V4cCA9IGVzY2FwZVJlZ0V4cDsKKworaWYgKCF0aGlzLlNsaWNrKSB0aGlzLlNsaWNrID0gU2xpY2s7CisKK30pLmFwcGx5KC8qPENvbW1vbkpTPiovKHR5cGVvZiBleHBvcnRzICE9ICd1bmRlZmluZWQnKSA/IGV4cG9ydHMgOiAvKjwvQ29tbW9uSlM+Ki90aGlzKTsKKworLyoKKy0tLQorbmFtZTogU2xpY2suRmluZGVyCitkZXNjcmlwdGlvbjogVGhlIG5ldywgc3VwZXJmYXN0IGNzcyBzZWxlY3RvciBlbmdpbmUuCitwcm92aWRlczogU2xpY2suRmluZGVyCityZXF1aXJlczogU2xpY2suUGFyc2VyCisuLi4KKyovCisKKzsoZnVuY3Rpb24oKXsKKwordmFyIGxvY2FsID0ge30sCisJZmVhdHVyZXNDYWNoZSA9IHt9LAorCXRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKKworLy8gRmVhdHVyZSAvIEJ1ZyBkZXRlY3Rpb24KKworbG9jYWwuaXNOYXRpdmVDb2RlID0gZnVuY3Rpb24oZm4peworCXJldHVybiAoL1x7XHMqXFtuYXRpdmUgY29kZVxdXHMqXH0vKS50ZXN0KCcnICsgZm4pOworfTsKKworbG9jYWwuaXNYTUwgPSBmdW5jdGlvbihkb2N1bWVudCl7CisJcmV0dXJuICghIWRvY3VtZW50LnhtbFZlcnNpb24pIHx8ICghIWRvY3VtZW50LnhtbCkgfHwgKHRvU3RyaW5nLmNhbGwoZG9jdW1lbnQpID09ICdbb2JqZWN0IFhNTERvY3VtZW50XScpIHx8CisJKGRvY3VtZW50Lm5vZGVUeXBlID09IDkgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9ICdIVE1MJyk7Cit9OworCitsb2NhbC5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKGRvY3VtZW50KXsKKworCS8vIGNvbnZlcnQgZWxlbWVudHMgLyB3aW5kb3cgYXJndW1lbnRzIHRvIGRvY3VtZW50LiBpZiBkb2N1bWVudCBjYW5ub3QgYmUgZXh0cmFwb2xhdGVkLCB0aGUgZnVuY3Rpb24gcmV0dXJucy4KKwl2YXIgbm9kZVR5cGUgPSBkb2N1bWVudC5ub2RlVHlwZTsKKwlpZiAobm9kZVR5cGUgPT0gOSk7IC8vIGRvY3VtZW50CisJZWxzZSBpZiAobm9kZVR5cGUpIGRvY3VtZW50ID0gZG9jdW1lbnQub3duZXJEb2N1bWVudDsgLy8gbm9kZQorCWVsc2UgaWYgKGRvY3VtZW50Lm5hdmlnYXRvcikgZG9jdW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudDsgLy8gd2luZG93CisJZWxzZSByZXR1cm47CisKKwkvLyBjaGVjayBpZiBpdCdzIHRoZSBvbGQgZG9jdW1lbnQKKworCWlmICh0aGlzLmRvY3VtZW50ID09PSBkb2N1bWVudCkgcmV0dXJuOworCXRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDsKKworCS8vIGNoZWNrIGlmIHdlIGhhdmUgZG9uZSBmZWF0dXJlIGRldGVjdGlvbiBvbiB0aGlzIGRvY3VtZW50IGJlZm9yZQorCisJdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsCisJCXJvb3RVaWQgPSB0aGlzLmdldFVJRFhNTChyb290KSwKKwkJZmVhdHVyZXMgPSBmZWF0dXJlc0NhY2hlW3Jvb3RVaWRdLAorCQlmZWF0dXJlOworCisJaWYgKGZlYXR1cmVzKXsKKwkJZm9yIChmZWF0dXJlIGluIGZlYXR1cmVzKXsKKwkJCXRoaXNbZmVhdHVyZV0gPSBmZWF0dXJlc1tmZWF0dXJlXTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJZmVhdHVyZXMgPSBmZWF0dXJlc0NhY2hlW3Jvb3RVaWRdID0ge307CisKKwlmZWF0dXJlcy5yb290ID0gcm9vdDsKKwlmZWF0dXJlcy5pc1hNTERvY3VtZW50ID0gdGhpcy5pc1hNTChkb2N1bWVudCk7CisKKwlmZWF0dXJlcy5icm9rZW5TdGFyR0VCVE4KKwk9IGZlYXR1cmVzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBCisJPSBmZWF0dXJlcy5pZEdldHNOYW1lCisJPSBmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0EKKwk9IGZlYXR1cmVzLmJyb2tlbkdFQkNOCisJPSBmZWF0dXJlcy5icm9rZW5DaGVja2VkUVNBCisJPSBmZWF0dXJlcy5icm9rZW5FbXB0eUF0dHJpYnV0ZVFTQQorCT0gZmVhdHVyZXMuaXNIVE1MRG9jdW1lbnQKKwk9IGZlYXR1cmVzLm5hdGl2ZU1hdGNoZXNTZWxlY3RvcgorCT0gZmFsc2U7CisKKwl2YXIgc3RhclNlbGVjdHNDbG9zZWQsIHN0YXJTZWxlY3RzQ29tbWVudHMsCisJCWJyb2tlblNlY29uZENsYXNzTmFtZUdFQkNOLCBjYWNoZWRHZXRFbGVtZW50c0J5Q2xhc3NOYW1lLAorCQlicm9rZW5Gb3JtQXR0cmlidXRlR2V0dGVyOworCisJdmFyIHNlbGVjdGVkLCBpZCA9ICdzbGlja191bmlxdWVpZCc7CisJdmFyIHRlc3ROb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisKKwl2YXIgdGVzdFJvb3QgPSBkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0gfHwgcm9vdDsKKwl0ZXN0Um9vdC5hcHBlbmRDaGlsZCh0ZXN0Tm9kZSk7CisKKwkvLyBvbiBub24tSFRNTCBkb2N1bWVudHMgaW5uZXJIVE1MIGFuZCBnZXRFbGVtZW50c0J5SWQgZG9lc250IHdvcmsgcHJvcGVybHkKKwl0cnkgeworCQl0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgaWQ9IicraWQrJyI+PC9hPic7CisJCWZlYXR1cmVzLmlzSFRNTERvY3VtZW50ID0gISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisJfSBjYXRjaCAoZSl7fQorCisJaWYgKGZlYXR1cmVzLmlzSFRNTERvY3VtZW50KXsKKworCQl0ZXN0Tm9kZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworCisJCS8vIElFIHJldHVybnMgY29tbWVudCBub2RlcyBmb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSBmb3Igc29tZSBkb2N1bWVudHMKKwkJdGVzdE5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgnJykpOworCQlzdGFyU2VsZWN0c0NvbW1lbnRzID0gKHRlc3ROb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykubGVuZ3RoID4gMSk7CisKKwkJLy8gSUUgcmV0dXJucyBjbG9zZWQgbm9kZXMgKEVHOiI8L2Zvbz4iKSBmb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSBmb3Igc29tZSBkb2N1bWVudHMKKwkJdHJ5IHsKKwkJCXRlc3ROb2RlLmlubmVySFRNTCA9ICdmb288L2Zvbz4nOworCQkJc2VsZWN0ZWQgPSB0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpOworCQkJc3RhclNlbGVjdHNDbG9zZWQgPSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2VsZWN0ZWRbMF0ubm9kZU5hbWUuY2hhckF0KDApID09ICcvJyk7CisJCX0gY2F0Y2ggKGUpe307CisKKwkJZmVhdHVyZXMuYnJva2VuU3RhckdFQlROID0gc3RhclNlbGVjdHNDb21tZW50cyB8fCBzdGFyU2VsZWN0c0Nsb3NlZDsKKworCQkvLyBJRSByZXR1cm5zIGVsZW1lbnRzIHdpdGggdGhlIG5hbWUgaW5zdGVhZCBvZiBqdXN0IGlkIGZvciBnZXRFbGVtZW50c0J5SWQgZm9yIHNvbWUgZG9jdW1lbnRzCisJCXRyeSB7CisJCQl0ZXN0Tm9kZS5pbm5lckhUTUwgPSAnPGEgbmFtZT0iJysgaWQgKyciPjwvYT48YiBpZD0iJysgaWQgKyciPjwvYj4nOworCQkJZmVhdHVyZXMuaWRHZXRzTmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSA9PT0gdGVzdE5vZGUuZmlyc3RDaGlsZDsKKwkJfSBjYXRjaCAoZSl7fQorCisJCWlmICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXsKKworCQkJLy8gU2FmYXJpIDMuMiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGNhY2hlcyByZXN1bHRzCisJCQl0cnkgeworCQkJCXRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz0iZiI+PC9hPjxhIGNsYXNzPSJiIj48L2E+JzsKKwkJCQl0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiJykubGVuZ3RoOworCQkJCXRlc3ROb2RlLmZpcnN0Q2hpbGQuY2xhc3NOYW1lID0gJ2InOworCQkJCWNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSAodGVzdE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYicpLmxlbmd0aCAhPSAyKTsKKwkJCX0gY2F0Y2ggKGUpe307CisKKwkJCS8vIE9wZXJhIDkuNiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGRvZXNudCBkZXRlY3RzIHRoZSBjbGFzcyBpZiBpdHMgbm90IHRoZSBmaXJzdCBvbmUKKwkJCXRyeSB7CisJCQkJdGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPSJhIj48L2E+PGEgY2xhc3M9ImYgYiBhIj48L2E+JzsKKwkJCQlicm9rZW5TZWNvbmRDbGFzc05hbWVHRUJDTiA9ICh0ZXN0Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhJykubGVuZ3RoICE9IDIpOworCQkJfSBjYXRjaCAoZSl7fQorCisJCQlmZWF0dXJlcy5icm9rZW5HRUJDTiA9IGNhY2hlZEdldEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgYnJva2VuU2Vjb25kQ2xhc3NOYW1lR0VCQ047CisJCX0KKworCQlpZiAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCl7CisJCQkvLyBJRSA4IHJldHVybnMgY2xvc2VkIG5vZGVzIChFRzoiPC9mb28+IikgZm9yIHF1ZXJ5U2VsZWN0b3JBbGwoJyonKSBmb3Igc29tZSBkb2N1bWVudHMKKwkJCXRyeSB7CisJCQkJdGVzdE5vZGUuaW5uZXJIVE1MID0gJ2ZvbzwvZm9vPic7CisJCQkJc2VsZWN0ZWQgPSB0ZXN0Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcqJyk7CisJCQkJZmVhdHVyZXMuc3RhclNlbGVjdHNDbG9zZWRRU0EgPSAoc2VsZWN0ZWQgJiYgISFzZWxlY3RlZC5sZW5ndGggJiYgc2VsZWN0ZWRbMF0ubm9kZU5hbWUuY2hhckF0KDApID09ICcvJyk7CisJCQl9IGNhdGNoIChlKXt9CisKKwkJCS8vIFNhZmFyaSAzLjIgcXVlcnlTZWxlY3RvckFsbCBkb2VzbnQgd29yayB3aXRoIG1peGVkY2FzZSBvbiBxdWlya3Ntb2RlCisJCQl0cnkgeworCQkJCXRlc3ROb2RlLmlubmVySFRNTCA9ICc8YSBjbGFzcz0iTWlYIj48L2E+JzsKKwkJCQlmZWF0dXJlcy5icm9rZW5NaXhlZENhc2VRU0EgPSAhdGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnLk1pWCcpLmxlbmd0aDsKKwkJCX0gY2F0Y2ggKGUpe30KKworCQkJLy8gV2Via2l0IGFuZCBPcGVyYSBkb250IHJldHVybiBzZWxlY3RlZCBvcHRpb25zIG9uIHF1ZXJ5U2VsZWN0b3JBbGwKKwkJCXRyeSB7CisJCQkJdGVzdE5vZGUuaW5uZXJIVE1MID0gJzxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZD0ic2VsZWN0ZWQiPmE8L29wdGlvbj48L3NlbGVjdD4nOworCQkJCWZlYXR1cmVzLmJyb2tlbkNoZWNrZWRRU0EgPSAodGVzdE5vZGUucXVlcnlTZWxlY3RvckFsbCgnOmNoZWNrZWQnKS5sZW5ndGggPT0gMCk7CisJCQl9IGNhdGNoIChlKXt9OworCisJCQkvLyBJRSByZXR1cm5zIGluY29ycmVjdCByZXN1bHRzIGZvciBhdHRyWypeJF09IiIgc2VsZWN0b3JzIG9uIHF1ZXJ5U2VsZWN0b3JBbGwKKwkJCXRyeSB7CisJCQkJdGVzdE5vZGUuaW5uZXJIVE1MID0gJzxhIGNsYXNzPSIiPjwvYT4nOworCQkJCWZlYXR1cmVzLmJyb2tlbkVtcHR5QXR0cmlidXRlUVNBID0gKHRlc3ROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjbGFzcyo9IiJdJykubGVuZ3RoICE9IDApOworCQkJfSBjYXRjaCAoZSl7fQorCisJCX0KKworCQkvLyBJRTYtNywgaWYgYSBmb3JtIGhhcyBhbiBpbnB1dCBvZiBpZCB4LCBmb3JtLmdldEF0dHJpYnV0ZSh4KSByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBpbnB1dAorCQl0cnkgeworCQkJdGVzdE5vZGUuaW5uZXJIVE1MID0gJzxmb3JtIGFjdGlvbj0icyI+PGlucHV0IGlkPSJhY3Rpb24iLz48L2Zvcm0+JzsKKwkJCWJyb2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXIgPSAodGVzdE5vZGUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoJ2FjdGlvbicpICE9ICdzJyk7CisJCX0gY2F0Y2ggKGUpe30KKworCQkvLyBuYXRpdmUgbWF0Y2hlc1NlbGVjdG9yIGZ1bmN0aW9uCisKKwkJZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gcm9vdC5tYXRjaGVzIHx8IC8qcm9vdC5tc01hdGNoZXNTZWxlY3RvciB8fCovIHJvb3QubW96TWF0Y2hlc1NlbGVjdG9yIHx8IHJvb3Qud2Via2l0TWF0Y2hlc1NlbGVjdG9yOworCQlpZiAoZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yKSB0cnkgeworCQkJLy8gaWYgbWF0Y2hlc1NlbGVjdG9yIHRyb3dzIGVycm9ycyBvbiBpbmNvcnJlY3Qgc2ludGF4ZXMgd2UgY2FuIHVzZSBpdAorCQkJZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwocm9vdCwgJzpzbGljaycpOworCQkJZmVhdHVyZXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yID0gbnVsbDsKKwkJfSBjYXRjaCAoZSl7fQorCisJfQorCisJdHJ5IHsKKwkJcm9vdC5zbGlja19leHBhbmRvID0gMTsKKwkJZGVsZXRlIHJvb3Quc2xpY2tfZXhwYW5kbzsKKwkJZmVhdHVyZXMuZ2V0VUlEID0gdGhpcy5nZXRVSURIVE1MOworCX0gY2F0Y2ggKGUpeworCQlmZWF0dXJlcy5nZXRVSUQgPSB0aGlzLmdldFVJRFhNTDsKKwl9CisKKwl0ZXN0Um9vdC5yZW1vdmVDaGlsZCh0ZXN0Tm9kZSk7CisJdGVzdE5vZGUgPSBzZWxlY3RlZCA9IHRlc3RSb290ID0gbnVsbDsKKworCS8vIGdldEF0dHJpYnV0ZQorCisJZmVhdHVyZXMuZ2V0QXR0cmlidXRlID0gKGZlYXR1cmVzLmlzSFRNTERvY3VtZW50ICYmIGJyb2tlbkZvcm1BdHRyaWJ1dGVHZXR0ZXIpID8gZnVuY3Rpb24obm9kZSwgbmFtZSl7CisJCXZhciBtZXRob2QgPSB0aGlzLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07CisJCWlmIChtZXRob2QpIHJldHVybiBtZXRob2QuY2FsbChub2RlKTsKKwkJdmFyIGF0dHJpYnV0ZU5vZGUgPSBub2RlLmdldEF0dHJpYnV0ZU5vZGUobmFtZSk7CisJCXJldHVybiAoYXR0cmlidXRlTm9kZSkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7CisJfSA6IGZ1bmN0aW9uKG5vZGUsIG5hbWUpeworCQl2YXIgbWV0aG9kID0gdGhpcy5hdHRyaWJ1dGVHZXR0ZXJzW25hbWVdOworCQlyZXR1cm4gKG1ldGhvZCkgPyBtZXRob2QuY2FsbChub2RlKSA6IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpOworCX07CisKKwkvLyBoYXNBdHRyaWJ1dGUKKworCWZlYXR1cmVzLmhhc0F0dHJpYnV0ZSA9IChyb290ICYmIHRoaXMuaXNOYXRpdmVDb2RlKHJvb3QuaGFzQXR0cmlidXRlKSkgPyBmdW5jdGlvbihub2RlLCBhdHRyaWJ1dGUpeworCQlyZXR1cm4gbm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKTsKKwl9IDogZnVuY3Rpb24obm9kZSwgYXR0cmlidXRlKXsKKwkJbm9kZSA9IG5vZGUuZ2V0QXR0cmlidXRlTm9kZShhdHRyaWJ1dGUpOworCQlyZXR1cm4gISEobm9kZSAmJiAobm9kZS5zcGVjaWZpZWQgfHwgbm9kZS5ub2RlVmFsdWUpKTsKKwl9OworCisJLy8gY29udGFpbnMKKwkvLyBGSVhNRTogQWRkIHNwZWNzOiBsb2NhbC5jb250YWlucyBzaG91bGQgYmUgZGlmZmVyZW50IGZvciB4bWwgYW5kIGh0bWwgZG9jdW1lbnRzPworCXZhciBuYXRpdmVSb290Q29udGFpbnMgPSByb290ICYmIHRoaXMuaXNOYXRpdmVDb2RlKHJvb3QuY29udGFpbnMpLAorCQluYXRpdmVEb2N1bWVudENvbnRhaW5zID0gZG9jdW1lbnQgJiYgdGhpcy5pc05hdGl2ZUNvZGUoZG9jdW1lbnQuY29udGFpbnMpOworCisJZmVhdHVyZXMuY29udGFpbnMgPSAobmF0aXZlUm9vdENvbnRhaW5zICYmIG5hdGl2ZURvY3VtZW50Q29udGFpbnMpID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7CisJCXJldHVybiBjb250ZXh0LmNvbnRhaW5zKG5vZGUpOworCX0gOiAobmF0aXZlUm9vdENvbnRhaW5zICYmICFuYXRpdmVEb2N1bWVudENvbnRhaW5zKSA/IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpeworCQkvLyBJRTggZG9lcyBub3QgaGF2ZSAuY29udGFpbnMgb24gZG9jdW1lbnQuCisJCXJldHVybiBjb250ZXh0ID09PSBub2RlIHx8ICgoY29udGV4dCA9PT0gZG9jdW1lbnQpID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDogY29udGV4dCkuY29udGFpbnMobm9kZSk7CisJfSA6IChyb290ICYmIHJvb3QuY29tcGFyZURvY3VtZW50UG9zaXRpb24pID8gZnVuY3Rpb24oY29udGV4dCwgbm9kZSl7CisJCXJldHVybiBjb250ZXh0ID09PSBub2RlIHx8ICEhKGNvbnRleHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZSkgJiAxNik7CisJfSA6IGZ1bmN0aW9uKGNvbnRleHQsIG5vZGUpeworCQlpZiAobm9kZSkgZG8geworCQkJaWYgKG5vZGUgPT09IGNvbnRleHQpIHJldHVybiB0cnVlOworCQl9IHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpOworCQlyZXR1cm4gZmFsc2U7CisJfTsKKworCS8vIGRvY3VtZW50IG9yZGVyIHNvcnRpbmcKKwkvLyBjcmVkaXRzIHRvIFNpenpsZSAoaHR0cDovL3NpenpsZWpzLmNvbS8pCisKKwlmZWF0dXJlcy5kb2N1bWVudFNvcnRlciA9IChyb290LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSA/IGZ1bmN0aW9uKGEsIGIpeworCQlpZiAoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gfHwgIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24pIHJldHVybiAwOworCQlyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDQgPyAtMSA6IGEgPT09IGIgPyAwIDogMTsKKwl9IDogKCdzb3VyY2VJbmRleCcgaW4gcm9vdCkgPyBmdW5jdGlvbihhLCBiKXsKKwkJaWYgKCFhLnNvdXJjZUluZGV4IHx8ICFiLnNvdXJjZUluZGV4KSByZXR1cm4gMDsKKwkJcmV0dXJuIGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4OworCX0gOiAoZG9jdW1lbnQuY3JlYXRlUmFuZ2UpID8gZnVuY3Rpb24oYSwgYil7CisJCWlmICghYS5vd25lckRvY3VtZW50IHx8ICFiLm93bmVyRG9jdW1lbnQpIHJldHVybiAwOworCQl2YXIgYVJhbmdlID0gYS5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCksIGJSYW5nZSA9IGIub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpOworCQlhUmFuZ2Uuc2V0U3RhcnQoYSwgMCk7CisJCWFSYW5nZS5zZXRFbmQoYSwgMCk7CisJCWJSYW5nZS5zZXRTdGFydChiLCAwKTsKKwkJYlJhbmdlLnNldEVuZChiLCAwKTsKKwkJcmV0dXJuIGFSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2UuU1RBUlRfVE9fRU5ELCBiUmFuZ2UpOworCX0gOiBudWxsOworCisJcm9vdCA9IG51bGw7CisKKwlmb3IgKGZlYXR1cmUgaW4gZmVhdHVyZXMpeworCQl0aGlzW2ZlYXR1cmVdID0gZmVhdHVyZXNbZmVhdHVyZV07CisJfQorfTsKKworLy8gTWFpbiBNZXRob2QKKwordmFyIHJlU2ltcGxlU2VsZWN0b3IgPSAvXihbIy5dPykoKD86W1x3LV0rfFwqKSkkLywKKwlyZUVtcHR5QXR0cmlidXRlID0gL1xbLitbKiReXT0oPzoiInwnJyk/XF0vLAorCXFzYUZhaWxFeHBDYWNoZSA9IHt9OworCitsb2NhbC5zZWFyY2ggPSBmdW5jdGlvbihjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQsIGZpcnN0KXsKKworCXZhciBmb3VuZCA9IHRoaXMuZm91bmQgPSAoZmlyc3QpID8gbnVsbCA6IChhcHBlbmQgfHwgW10pOworCisJaWYgKCFjb250ZXh0KSByZXR1cm4gZm91bmQ7CisJZWxzZSBpZiAoY29udGV4dC5uYXZpZ2F0b3IpIGNvbnRleHQgPSBjb250ZXh0LmRvY3VtZW50OyAvLyBDb252ZXJ0IHRoZSBub2RlIGZyb20gYSB3aW5kb3cgdG8gYSBkb2N1bWVudAorCWVsc2UgaWYgKCFjb250ZXh0Lm5vZGVUeXBlKSByZXR1cm4gZm91bmQ7CisKKwkvLyBzZXR1cAorCisJdmFyIHBhcnNlZCwgaSwgbm9kZSwgbm9kZXMsCisJCXVuaXF1ZXMgPSB0aGlzLnVuaXF1ZXMgPSB7fSwKKwkJaGFzT3RoZXJzID0gISEoYXBwZW5kICYmIGFwcGVuZC5sZW5ndGgpLAorCQljb250ZXh0SXNEb2N1bWVudCA9IChjb250ZXh0Lm5vZGVUeXBlID09IDkpOworCisJaWYgKHRoaXMuZG9jdW1lbnQgIT09IChjb250ZXh0SXNEb2N1bWVudCA/IGNvbnRleHQgOiBjb250ZXh0Lm93bmVyRG9jdW1lbnQpKSB0aGlzLnNldERvY3VtZW50KGNvbnRleHQpOworCisJLy8gYXZvaWQgZHVwbGljYXRpbmcgaXRlbXMgYWxyZWFkeSBpbiB0aGUgYXBwZW5kIGFycmF5CisJaWYgKGhhc090aGVycykgZm9yIChpID0gZm91bmQubGVuZ3RoOyBpLS07KSB1bmlxdWVzW3RoaXMuZ2V0VUlEKGZvdW5kW2ldKV0gPSB0cnVlOworCisJLy8gZXhwcmVzc2lvbiBjaGVja3MKKworCWlmICh0eXBlb2YgZXhwcmVzc2lvbiA9PSAnc3RyaW5nJyl7IC8vIGV4cHJlc3Npb24gaXMgYSBzdHJpbmcKKworCQkvKjxzaW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovCisJCXZhciBzaW1wbGVTZWxlY3RvciA9IGV4cHJlc3Npb24ubWF0Y2gocmVTaW1wbGVTZWxlY3Rvcik7CisJCXNpbXBsZVNlbGVjdG9yczogaWYgKHNpbXBsZVNlbGVjdG9yKXsKKworCQkJdmFyIHN5bWJvbCA9IHNpbXBsZVNlbGVjdG9yWzFdLAorCQkJCW5hbWUgPSBzaW1wbGVTZWxlY3RvclsyXTsKKworCQkJaWYgKCFzeW1ib2wpeworCisJCQkJaWYgKG5hbWUgPT0gJyonICYmIHRoaXMuYnJva2VuU3RhckdFQlROKSBicmVhayBzaW1wbGVTZWxlY3RvcnM7CisJCQkJbm9kZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKG5hbWUpOworCQkJCWlmIChmaXJzdCkgcmV0dXJuIG5vZGVzWzBdIHx8IG51bGw7CisJCQkJZm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXsKKwkJCQkJaWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTsKKwkJCQl9CisKKwkJCX0gZWxzZSBpZiAoc3ltYm9sID09ICcjJyl7CisKKwkJCQlpZiAoIXRoaXMuaXNIVE1MRG9jdW1lbnQgfHwgIWNvbnRleHRJc0RvY3VtZW50KSBicmVhayBzaW1wbGVTZWxlY3RvcnM7CisJCQkJbm9kZSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQobmFtZSk7CisJCQkJaWYgKCFub2RlKSByZXR1cm4gZm91bmQ7CisJCQkJaWYgKHRoaXMuaWRHZXRzTmFtZSAmJiBub2RlLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykubm9kZVZhbHVlICE9IG5hbWUpIGJyZWFrIHNpbXBsZVNlbGVjdG9yczsKKwkJCQlpZiAoZmlyc3QpIHJldHVybiBub2RlIHx8IG51bGw7CisJCQkJaWYgKCEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTsKKworCQkJfSBlbHNlIGlmIChzeW1ib2wgPT0gJy4nKXsKKworCQkJCWlmICghdGhpcy5pc0hUTUxEb2N1bWVudCB8fCAoKCFjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgdGhpcy5icm9rZW5HRUJDTikgJiYgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKSkgYnJlYWsgc2ltcGxlU2VsZWN0b3JzOworCQkJCWlmIChjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgIXRoaXMuYnJva2VuR0VCQ04peworCQkJCQlub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShuYW1lKTsKKwkJCQkJaWYgKGZpcnN0KSByZXR1cm4gbm9kZXNbMF0gfHwgbnVsbDsKKwkJCQkJZm9yIChpID0gMDsgbm9kZSA9IG5vZGVzW2krK107KXsKKwkJCQkJCWlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQl2YXIgbWF0Y2hDbGFzcyA9IG5ldyBSZWdFeHAoJyhefFxccyknKyBTbGljay5lc2NhcGVSZWdFeHAobmFtZSkgKycoXFxzfCQpJyk7CisJCQkJCW5vZGVzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpOworCQkJCQlmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspeworCQkJCQkJY2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWU7CisJCQkJCQlpZiAoIShjbGFzc05hbWUgJiYgbWF0Y2hDbGFzcy50ZXN0KGNsYXNzTmFtZSkpKSBjb250aW51ZTsKKwkJCQkJCWlmIChmaXJzdCkgcmV0dXJuIG5vZGU7CisJCQkJCQlpZiAoIShoYXNPdGhlcnMgJiYgdW5pcXVlc1t0aGlzLmdldFVJRChub2RlKV0pKSBmb3VuZC5wdXNoKG5vZGUpOworCQkJCQl9CisJCQkJfQorCisJCQl9CisKKwkJCWlmIChoYXNPdGhlcnMpIHRoaXMuc29ydChmb3VuZCk7CisJCQlyZXR1cm4gKGZpcnN0KSA/IG51bGwgOiBmb3VuZDsKKworCQl9CisJCS8qPC9zaW1wbGUtc2VsZWN0b3JzLW92ZXJyaWRlPiovCisKKwkJLyo8cXVlcnktc2VsZWN0b3Itb3ZlcnJpZGU+Ki8KKwkJcXVlcnlTZWxlY3RvcjogaWYgKGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCl7CisKKwkJCWlmICghdGhpcy5pc0hUTUxEb2N1bWVudAorCQkJCXx8IHFzYUZhaWxFeHBDYWNoZVtleHByZXNzaW9uXQorCQkJCS8vVE9ETzogb25seSBza2lwIHdoZW4gZXhwcmVzc2lvbiBpcyBhY3R1YWxseSBtaXhlZCBjYXNlCisJCQkJfHwgdGhpcy5icm9rZW5NaXhlZENhc2VRU0EKKwkJCQl8fCAodGhpcy5icm9rZW5DaGVja2VkUVNBICYmIGV4cHJlc3Npb24uaW5kZXhPZignOmNoZWNrZWQnKSA+IC0xKQorCQkJCXx8ICh0aGlzLmJyb2tlbkVtcHR5QXR0cmlidXRlUVNBICYmIHJlRW1wdHlBdHRyaWJ1dGUudGVzdChleHByZXNzaW9uKSkKKwkJCQl8fCAoIWNvbnRleHRJc0RvY3VtZW50IC8vQWJvcnQgd2hlbiAhY29udGV4dElzRG9jdW1lbnQgYW5kLi4uCisJCQkJCS8vICB0aGVyZSBhcmUgbXVsdGlwbGUgZXhwcmVzc2lvbnMgaW4gdGhlIHNlbGVjdG9yCisJCQkJCS8vICBzaW5jZSB3ZSBjdXJyZW50bHkgb25seSBmaXggbm9uLWRvY3VtZW50IHJvb3RlZCBRU0EgZm9yIHNpbmdsZSBleHByZXNzaW9uIHNlbGVjdG9ycworCQkJCQkmJiBleHByZXNzaW9uLmluZGV4T2YoJywnKSA+IC0xCisJCQkJKQorCQkJCXx8IFNsaWNrLmRpc2FibGVRU0EKKwkJCSkgYnJlYWsgcXVlcnlTZWxlY3RvcjsKKworCQkJdmFyIF9leHByZXNzaW9uID0gZXhwcmVzc2lvbiwgX2NvbnRleHQgPSBjb250ZXh0LCBjdXJyZW50SWQ7CisJCQlpZiAoIWNvbnRleHRJc0RvY3VtZW50KXsKKwkJCQkvLyBub24tZG9jdW1lbnQgcm9vdGVkIFFTQQorCQkJCS8vIGNyZWRpdHMgdG8gQW5kcmV3IER1cG9udAorCQkJCWN1cnJlbnRJZCA9IF9jb250ZXh0LmdldEF0dHJpYnV0ZSgnaWQnKSwgc2xpY2tpZCA9ICdzbGlja2lkX18nOworCQkJCV9jb250ZXh0LnNldEF0dHJpYnV0ZSgnaWQnLCBzbGlja2lkKTsKKwkJCQlfZXhwcmVzc2lvbiA9ICcjJyArIHNsaWNraWQgKyAnICcgKyBfZXhwcmVzc2lvbjsKKwkJCQljb250ZXh0ID0gX2NvbnRleHQucGFyZW50Tm9kZTsKKwkJCX0KKworCQkJdHJ5IHsKKwkJCQlpZiAoZmlyc3QpIHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3IoX2V4cHJlc3Npb24pIHx8IG51bGw7CisJCQkJZWxzZSBub2RlcyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChfZXhwcmVzc2lvbik7CisJCQl9IGNhdGNoIChlKXsKKwkJCQlxc2FGYWlsRXhwQ2FjaGVbZXhwcmVzc2lvbl0gPSAxOworCQkJCWJyZWFrIHF1ZXJ5U2VsZWN0b3I7CisJCQl9IGZpbmFsbHkgeworCQkJCWlmICghY29udGV4dElzRG9jdW1lbnQpeworCQkJCQlpZiAoY3VycmVudElkKSBfY29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgY3VycmVudElkKTsKKwkJCQkJZWxzZSBfY29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7CisJCQkJCWNvbnRleHQgPSBfY29udGV4dDsKKwkJCQl9CisJCQl9CisKKwkJCWlmICh0aGlzLnN0YXJTZWxlY3RzQ2xvc2VkUVNBKSBmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspeworCQkJCWlmIChub2RlLm5vZGVOYW1lID4gJ0AnICYmICEoaGFzT3RoZXJzICYmIHVuaXF1ZXNbdGhpcy5nZXRVSUQobm9kZSldKSkgZm91bmQucHVzaChub2RlKTsKKwkJCX0gZWxzZSBmb3IgKGkgPSAwOyBub2RlID0gbm9kZXNbaSsrXTspeworCQkJCWlmICghKGhhc090aGVycyAmJiB1bmlxdWVzW3RoaXMuZ2V0VUlEKG5vZGUpXSkpIGZvdW5kLnB1c2gobm9kZSk7CisJCQl9CisKKwkJCWlmIChoYXNPdGhlcnMpIHRoaXMuc29ydChmb3VuZCk7CisJCQlyZXR1cm4gZm91bmQ7CisKKwkJfQorCQkvKjwvcXVlcnktc2VsZWN0b3Itb3ZlcnJpZGU+Ki8KKworCQlwYXJzZWQgPSB0aGlzLlNsaWNrLnBhcnNlKGV4cHJlc3Npb24pOworCQlpZiAoIXBhcnNlZC5sZW5ndGgpIHJldHVybiBmb3VuZDsKKwl9IGVsc2UgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCl7IC8vIHRoZXJlIGlzIG5vIGV4cHJlc3Npb24KKwkJcmV0dXJuIGZvdW5kOworCX0gZWxzZSBpZiAoZXhwcmVzc2lvbi5TbGljayl7IC8vIGV4cHJlc3Npb24gaXMgYSBwYXJzZWQgU2xpY2sgb2JqZWN0CisJCXBhcnNlZCA9IGV4cHJlc3Npb247CisJfSBlbHNlIGlmICh0aGlzLmNvbnRhaW5zKGNvbnRleHQuZG9jdW1lbnRFbGVtZW50IHx8IGNvbnRleHQsIGV4cHJlc3Npb24pKXsgLy8gZXhwcmVzc2lvbiBpcyBhIG5vZGUKKwkJKGZvdW5kKSA/IGZvdW5kLnB1c2goZXhwcmVzc2lvbikgOiBmb3VuZCA9IGV4cHJlc3Npb247CisJCXJldHVybiBmb3VuZDsKKwl9IGVsc2UgeyAvLyBvdGhlciBqdW5rCisJCXJldHVybiBmb3VuZDsKKwl9CisKKwkvKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8KKworCS8vIGNhY2hlIGVsZW1lbnRzIGZvciB0aGUgbnRoIHNlbGVjdG9ycworCisJdGhpcy5wb3NOVEggPSB7fTsKKwl0aGlzLnBvc05USExhc3QgPSB7fTsKKwl0aGlzLnBvc05USFR5cGUgPSB7fTsKKwl0aGlzLnBvc05USFR5cGVMYXN0ID0ge307CisKKwkvKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8vKjwvcHNldWRvLXNlbGVjdG9ycz4qLworCisJLy8gaWYgYXBwZW5kIGlzIG51bGwgYW5kIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgc2VsZWN0b3Igd2l0aCBvbmUgZXhwcmVzc2lvbiB1c2UgcHVzaEFycmF5LCBlbHNlIHVzZSBwdXNoVUlECisJdGhpcy5wdXNoID0gKCFoYXNPdGhlcnMgJiYgKGZpcnN0IHx8IChwYXJzZWQubGVuZ3RoID09IDEgJiYgcGFyc2VkLmV4cHJlc3Npb25zWzBdLmxlbmd0aCA9PSAxKSkpID8gdGhpcy5wdXNoQXJyYXkgOiB0aGlzLnB1c2hVSUQ7CisKKwlpZiAoZm91bmQgPT0gbnVsbCkgZm91bmQgPSBbXTsKKworCS8vIGRlZmF1bHQgZW5naW5lCisKKwl2YXIgaiwgbSwgbjsKKwl2YXIgY29tYmluYXRvciwgdGFnLCBpZCwgY2xhc3NMaXN0LCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zOworCXZhciBjdXJyZW50SXRlbXMsIGN1cnJlbnRFeHByZXNzaW9uLCBjdXJyZW50Qml0LCBsYXN0Qml0LCBleHByZXNzaW9ucyA9IHBhcnNlZC5leHByZXNzaW9uczsKKworCXNlYXJjaDogZm9yIChpID0gMDsgKGN1cnJlbnRFeHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspIGZvciAoaiA9IDA7IChjdXJyZW50Qml0ID0gY3VycmVudEV4cHJlc3Npb25bal0pOyBqKyspeworCisJCWNvbWJpbmF0b3IgPSAnY29tYmluYXRvcjonICsgY3VycmVudEJpdC5jb21iaW5hdG9yOworCQlpZiAoIXRoaXNbY29tYmluYXRvcl0pIGNvbnRpbnVlIHNlYXJjaDsKKworCQl0YWcgICAgICAgID0gKHRoaXMuaXNYTUxEb2N1bWVudCkgPyBjdXJyZW50Qml0LnRhZyA6IGN1cnJlbnRCaXQudGFnLnRvVXBwZXJDYXNlKCk7CisJCWlkICAgICAgICAgPSBjdXJyZW50Qml0LmlkOworCQljbGFzc0xpc3QgID0gY3VycmVudEJpdC5jbGFzc0xpc3Q7CisJCWNsYXNzZXMgICAgPSBjdXJyZW50Qml0LmNsYXNzZXM7CisJCWF0dHJpYnV0ZXMgPSBjdXJyZW50Qml0LmF0dHJpYnV0ZXM7CisJCXBzZXVkb3MgICAgPSBjdXJyZW50Qml0LnBzZXVkb3M7CisJCWxhc3RCaXQgICAgPSAoaiA9PT0gKGN1cnJlbnRFeHByZXNzaW9uLmxlbmd0aCAtIDEpKTsKKworCQl0aGlzLmJpdFVuaXF1ZXMgPSB7fTsKKworCQlpZiAobGFzdEJpdCl7CisJCQl0aGlzLnVuaXF1ZXMgPSB1bmlxdWVzOworCQkJdGhpcy5mb3VuZCA9IGZvdW5kOworCQl9IGVsc2UgeworCQkJdGhpcy51bmlxdWVzID0ge307CisJCQl0aGlzLmZvdW5kID0gW107CisJCX0KKworCQlpZiAoaiA9PT0gMCl7CisJCQl0aGlzW2NvbWJpbmF0b3JdKGNvbnRleHQsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7CisJCQlpZiAoZmlyc3QgJiYgbGFzdEJpdCAmJiBmb3VuZC5sZW5ndGgpIGJyZWFrIHNlYXJjaDsKKwkJfSBlbHNlIHsKKwkJCWlmIChmaXJzdCAmJiBsYXN0Qml0KSBmb3IgKG0gPSAwLCBuID0gY3VycmVudEl0ZW1zLmxlbmd0aDsgbSA8IG47IG0rKyl7CisJCQkJdGhpc1tjb21iaW5hdG9yXShjdXJyZW50SXRlbXNbbV0sIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MsIGNsYXNzTGlzdCk7CisJCQkJaWYgKGZvdW5kLmxlbmd0aCkgYnJlYWsgc2VhcmNoOworCQkJfSBlbHNlIGZvciAobSA9IDAsIG4gPSBjdXJyZW50SXRlbXMubGVuZ3RoOyBtIDwgbjsgbSsrKSB0aGlzW2NvbWJpbmF0b3JdKGN1cnJlbnRJdGVtc1ttXSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcywgY2xhc3NMaXN0KTsKKwkJfQorCisJCWN1cnJlbnRJdGVtcyA9IHRoaXMuZm91bmQ7CisJfQorCisJLy8gc2hvdWxkIHNvcnQgaWYgdGhlcmUgYXJlIG5vZGVzIGluIGFwcGVuZCBhbmQgaWYgeW91IHBhc3MgbXVsdGlwbGUgZXhwcmVzc2lvbnMuCisJaWYgKGhhc090aGVycyB8fCAocGFyc2VkLmV4cHJlc3Npb25zLmxlbmd0aCA+IDEpKSB0aGlzLnNvcnQoZm91bmQpOworCisJcmV0dXJuIChmaXJzdCkgPyAoZm91bmRbMF0gfHwgbnVsbCkgOiBmb3VuZDsKK307CisKKy8vIFV0aWxzCisKK2xvY2FsLnVpZHggPSAxOworbG9jYWwudWlkayA9ICdzbGljay11bmlxdWVpZCc7CisKK2xvY2FsLmdldFVJRFhNTCA9IGZ1bmN0aW9uKG5vZGUpeworCXZhciB1aWQgPSBub2RlLmdldEF0dHJpYnV0ZSh0aGlzLnVpZGspOworCWlmICghdWlkKXsKKwkJdWlkID0gdGhpcy51aWR4Kys7CisJCW5vZGUuc2V0QXR0cmlidXRlKHRoaXMudWlkaywgdWlkKTsKKwl9CisJcmV0dXJuIHVpZDsKK307CisKK2xvY2FsLmdldFVJREhUTUwgPSBmdW5jdGlvbihub2RlKXsKKwlyZXR1cm4gbm9kZS51bmlxdWVOdW1iZXIgfHwgKG5vZGUudW5pcXVlTnVtYmVyID0gdGhpcy51aWR4KyspOworfTsKKworLy8gc29ydCBiYXNlZCBvbiB0aGUgc2V0RG9jdW1lbnQgZG9jdW1lbnRTb3J0ZXIgbWV0aG9kLgorCitsb2NhbC5zb3J0ID0gZnVuY3Rpb24ocmVzdWx0cyl7CisJaWYgKCF0aGlzLmRvY3VtZW50U29ydGVyKSByZXR1cm4gcmVzdWx0czsKKwlyZXN1bHRzLnNvcnQodGhpcy5kb2N1bWVudFNvcnRlcik7CisJcmV0dXJuIHJlc3VsdHM7Cit9OworCisvKjxwc2V1ZG8tc2VsZWN0b3JzPiovLyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8KKworbG9jYWwuY2FjaGVOVEggPSB7fTsKKworbG9jYWwubWF0Y2hOVEggPSAvXihbKy1dP1xkKik/KFthLXpdKyk/KFsrLV1cZCspPyQvOworCitsb2NhbC5wYXJzZU5USEFyZ3VtZW50ID0gZnVuY3Rpb24oYXJndW1lbnQpeworCXZhciBwYXJzZWQgPSBhcmd1bWVudC5tYXRjaCh0aGlzLm1hdGNoTlRIKTsKKwlpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlOworCXZhciBzcGVjaWFsID0gcGFyc2VkWzJdIHx8IGZhbHNlOworCXZhciBhID0gcGFyc2VkWzFdIHx8IDE7CisJaWYgKGEgPT0gJy0nKSBhID0gLTE7CisJdmFyIGIgPSArcGFyc2VkWzNdIHx8IDA7CisJcGFyc2VkID0KKwkJKHNwZWNpYWwgPT0gJ24nKQk/IHthOiBhLCBiOiBifSA6CisJCShzcGVjaWFsID09ICdvZGQnKQk/IHthOiAyLCBiOiAxfSA6CisJCShzcGVjaWFsID09ICdldmVuJykJPyB7YTogMiwgYjogMH0gOiB7YTogMCwgYjogYX07CisKKwlyZXR1cm4gKHRoaXMuY2FjaGVOVEhbYXJndW1lbnRdID0gcGFyc2VkKTsKK307CisKK2xvY2FsLmNyZWF0ZU5USFBzZXVkbyA9IGZ1bmN0aW9uKGNoaWxkLCBzaWJsaW5nLCBwb3NpdGlvbnMsIG9mVHlwZSl7CisJcmV0dXJuIGZ1bmN0aW9uKG5vZGUsIGFyZ3VtZW50KXsKKwkJdmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5vZGUpOworCQlpZiAoIXRoaXNbcG9zaXRpb25zXVt1aWRdKXsKKwkJCXZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7CisJCQlpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlOworCQkJdmFyIGVsID0gcGFyZW50W2NoaWxkXSwgY291bnQgPSAxOworCQkJaWYgKG9mVHlwZSl7CisJCQkJdmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTsKKwkJCQlkbyB7CisJCQkJCWlmIChlbC5ub2RlTmFtZSAhPSBub2RlTmFtZSkgY29udGludWU7CisJCQkJCXRoaXNbcG9zaXRpb25zXVt0aGlzLmdldFVJRChlbCldID0gY291bnQrKzsKKwkJCQl9IHdoaWxlICgoZWwgPSBlbFtzaWJsaW5nXSkpOworCQkJfSBlbHNlIHsKKwkJCQlkbyB7CisJCQkJCWlmIChlbC5ub2RlVHlwZSAhPSAxKSBjb250aW51ZTsKKwkJCQkJdGhpc1twb3NpdGlvbnNdW3RoaXMuZ2V0VUlEKGVsKV0gPSBjb3VudCsrOworCQkJCX0gd2hpbGUgKChlbCA9IGVsW3NpYmxpbmddKSk7CisJCQl9CisJCX0KKwkJYXJndW1lbnQgPSBhcmd1bWVudCB8fCAnbic7CisJCXZhciBwYXJzZWQgPSB0aGlzLmNhY2hlTlRIW2FyZ3VtZW50XSB8fCB0aGlzLnBhcnNlTlRIQXJndW1lbnQoYXJndW1lbnQpOworCQlpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlOworCQl2YXIgYSA9IHBhcnNlZC5hLCBiID0gcGFyc2VkLmIsIHBvcyA9IHRoaXNbcG9zaXRpb25zXVt1aWRdOworCQlpZiAoYSA9PSAwKSByZXR1cm4gYiA9PSBwb3M7CisJCWlmIChhID4gMCl7CisJCQlpZiAocG9zIDwgYikgcmV0dXJuIGZhbHNlOworCQl9IGVsc2UgeworCQkJaWYgKGIgPCBwb3MpIHJldHVybiBmYWxzZTsKKwkJfQorCQlyZXR1cm4gKChwb3MgLSBiKSAlIGEpID09IDA7CisJfTsKK307CisKKy8qPC9udGgtcHNldWRvLXNlbGVjdG9ycz4qLy8qPC9wc2V1ZG8tc2VsZWN0b3JzPiovCisKK2xvY2FsLnB1c2hBcnJheSA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeworCWlmICh0aGlzLm1hdGNoU2VsZWN0b3Iobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcykpIHRoaXMuZm91bmQucHVzaChub2RlKTsKK307CisKK2xvY2FsLnB1c2hVSUQgPSBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsKKwl2YXIgdWlkID0gdGhpcy5nZXRVSUQobm9kZSk7CisJaWYgKCF0aGlzLnVuaXF1ZXNbdWlkXSAmJiB0aGlzLm1hdGNoU2VsZWN0b3Iobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcykpeworCQl0aGlzLnVuaXF1ZXNbdWlkXSA9IHRydWU7CisJCXRoaXMuZm91bmQucHVzaChub2RlKTsKKwl9Cit9OworCitsb2NhbC5tYXRjaE5vZGUgPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7CisJaWYgKHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYgdGhpcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3IpeworCQl0cnkgeworCQkJcmV0dXJuIHRoaXMubmF0aXZlTWF0Y2hlc1NlbGVjdG9yLmNhbGwobm9kZSwgc2VsZWN0b3IucmVwbGFjZSgvXFsoW149XSspPVxzKihbXiciXF1dKz8pXHMqXF0vZywgJ1skMT0iJDIiXScpKTsKKwkJfSBjYXRjaCAobWF0Y2hFcnJvcil7fQorCX0KKworCXZhciBwYXJzZWQgPSB0aGlzLlNsaWNrLnBhcnNlKHNlbGVjdG9yKTsKKwlpZiAoIXBhcnNlZCkgcmV0dXJuIHRydWU7CisKKwkvLyBzaW1wbGUgKHNpbmdsZSkgc2VsZWN0b3JzCisJdmFyIGV4cHJlc3Npb25zID0gcGFyc2VkLmV4cHJlc3Npb25zLCBzaW1wbGVFeHBDb3VudGVyID0gMCwgaSwgY3VycmVudEV4cHJlc3Npb247CisJZm9yIChpID0gMDsgKGN1cnJlbnRFeHByZXNzaW9uID0gZXhwcmVzc2lvbnNbaV0pOyBpKyspeworCQlpZiAoY3VycmVudEV4cHJlc3Npb24ubGVuZ3RoID09IDEpeworCQkJdmFyIGV4cCA9IGN1cnJlbnRFeHByZXNzaW9uWzBdOworCQkJaWYgKHRoaXMubWF0Y2hTZWxlY3Rvcihub2RlLCAodGhpcy5pc1hNTERvY3VtZW50KSA/IGV4cC50YWcgOiBleHAudGFnLnRvVXBwZXJDYXNlKCksIGV4cC5pZCwgZXhwLmNsYXNzZXMsIGV4cC5hdHRyaWJ1dGVzLCBleHAucHNldWRvcykpIHJldHVybiB0cnVlOworCQkJc2ltcGxlRXhwQ291bnRlcisrOworCQl9CisJfQorCisJaWYgKHNpbXBsZUV4cENvdW50ZXIgPT0gcGFyc2VkLmxlbmd0aCkgcmV0dXJuIGZhbHNlOworCisJdmFyIG5vZGVzID0gdGhpcy5zZWFyY2godGhpcy5kb2N1bWVudCwgcGFyc2VkKSwgaXRlbTsKKwlmb3IgKGkgPSAwOyBpdGVtID0gbm9kZXNbaSsrXTspeworCQlpZiAoaXRlbSA9PT0gbm9kZSkgcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK307CisKK2xvY2FsLm1hdGNoUHNldWRvID0gZnVuY3Rpb24obm9kZSwgbmFtZSwgYXJndW1lbnQpeworCXZhciBwc2V1ZG9OYW1lID0gJ3BzZXVkbzonICsgbmFtZTsKKwlpZiAodGhpc1twc2V1ZG9OYW1lXSkgcmV0dXJuIHRoaXNbcHNldWRvTmFtZV0obm9kZSwgYXJndW1lbnQpOworCXZhciBhdHRyaWJ1dGUgPSB0aGlzLmdldEF0dHJpYnV0ZShub2RlLCBuYW1lKTsKKwlyZXR1cm4gKGFyZ3VtZW50KSA/IGFyZ3VtZW50ID09IGF0dHJpYnV0ZSA6ICEhYXR0cmlidXRlOworfTsKKworbG9jYWwubWF0Y2hTZWxlY3RvciA9IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeworCWlmICh0YWcpeworCQl2YXIgbm9kZU5hbWUgPSAodGhpcy5pc1hNTERvY3VtZW50KSA/IG5vZGUubm9kZU5hbWUgOiBub2RlLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7CisJCWlmICh0YWcgPT0gJyonKXsKKwkJCWlmIChub2RlTmFtZSA8ICdAJykgcmV0dXJuIGZhbHNlOyAvLyBGaXggZm9yIGNvbW1lbnQgbm9kZXMgYW5kIGNsb3NlZCBub2RlcworCQl9IGVsc2UgeworCQkJaWYgKG5vZGVOYW1lICE9IHRhZykgcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJaWYgKGlkICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdpZCcpICE9IGlkKSByZXR1cm4gZmFsc2U7CisKKwl2YXIgaSwgcGFydCwgY2xzOworCWlmIChjbGFzc2VzKSBmb3IgKGkgPSBjbGFzc2VzLmxlbmd0aDsgaS0tOyl7CisJCWNscyA9IHRoaXMuZ2V0QXR0cmlidXRlKG5vZGUsICdjbGFzcycpOworCQlpZiAoIShjbHMgJiYgY2xhc3Nlc1tpXS5yZWdleHAudGVzdChjbHMpKSkgcmV0dXJuIGZhbHNlOworCX0KKwlpZiAoYXR0cmlidXRlcykgZm9yIChpID0gYXR0cmlidXRlcy5sZW5ndGg7IGktLTspeworCQlwYXJ0ID0gYXR0cmlidXRlc1tpXTsKKwkJaWYgKHBhcnQub3BlcmF0b3IgPyAhcGFydC50ZXN0KHRoaXMuZ2V0QXR0cmlidXRlKG5vZGUsIHBhcnQua2V5KSkgOiAhdGhpcy5oYXNBdHRyaWJ1dGUobm9kZSwgcGFydC5rZXkpKSByZXR1cm4gZmFsc2U7CisJfQorCWlmIChwc2V1ZG9zKSBmb3IgKGkgPSBwc2V1ZG9zLmxlbmd0aDsgaS0tOyl7CisJCXBhcnQgPSBwc2V1ZG9zW2ldOworCQlpZiAoIXRoaXMubWF0Y2hQc2V1ZG8obm9kZSwgcGFydC5rZXksIHBhcnQudmFsdWUpKSByZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfTsKKwordmFyIGNvbWJpbmF0b3JzID0geworCisJJyAnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zLCBjbGFzc0xpc3QpeyAvLyBhbGwgY2hpbGQgbm9kZXMsIGFueSBsZXZlbAorCisJCXZhciBpLCBpdGVtLCBjaGlsZHJlbjsKKworCQlpZiAodGhpcy5pc0hUTUxEb2N1bWVudCl7CisJCQlnZXRCeUlkOiBpZiAoaWQpeworCQkJCWl0ZW0gPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKwkJCQlpZiAoKCFpdGVtICYmIG5vZGUuYWxsKSB8fCAodGhpcy5pZEdldHNOYW1lICYmIGl0ZW0gJiYgaXRlbS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLm5vZGVWYWx1ZSAhPSBpZCkpeworCQkJCQkvLyBhbGxbaWRdIHJldHVybnMgYWxsIHRoZSBlbGVtZW50cyB3aXRoIHRoYXQgbmFtZSBvciBpZCBpbnNpZGUgbm9kZQorCQkJCQkvLyBpZiB0aGVyZXMganVzdCBvbmUgaXQgd2lsbCByZXR1cm4gdGhlIGVsZW1lbnQsIGVsc2UgaXQgd2lsbCBiZSBhIGNvbGxlY3Rpb24KKwkJCQkJY2hpbGRyZW4gPSBub2RlLmFsbFtpZF07CisJCQkJCWlmICghY2hpbGRyZW4pIHJldHVybjsKKwkJCQkJaWYgKCFjaGlsZHJlblswXSkgY2hpbGRyZW4gPSBbY2hpbGRyZW5dOworCQkJCQlmb3IgKGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspeworCQkJCQkJdmFyIGlkTm9kZSA9IGl0ZW0uZ2V0QXR0cmlidXRlTm9kZSgnaWQnKTsKKwkJCQkJCWlmIChpZE5vZGUgJiYgaWROb2RlLm5vZGVWYWx1ZSA9PSBpZCl7CisJCQkJCQkJdGhpcy5wdXNoKGl0ZW0sIHRhZywgbnVsbCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCQlpZiAoIWl0ZW0peworCQkJCQkvLyBpZiB0aGUgY29udGV4dCBpcyBpbiB0aGUgZG9tIHdlIHJldHVybiwgZWxzZSB3ZSB3aWxsIHRyeSBHRUJUTiwgYnJlYWtpbmcgdGhlIGdldEJ5SWQgbGFiZWwKKwkJCQkJaWYgKHRoaXMuY29udGFpbnModGhpcy5yb290LCBub2RlKSkgcmV0dXJuOworCQkJCQllbHNlIGJyZWFrIGdldEJ5SWQ7CisJCQkJfSBlbHNlIGlmICh0aGlzLmRvY3VtZW50ICE9PSBub2RlICYmICF0aGlzLmNvbnRhaW5zKG5vZGUsIGl0ZW0pKSByZXR1cm47CisJCQkJdGhpcy5wdXNoKGl0ZW0sIHRhZywgbnVsbCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJZ2V0QnlDbGFzczogaWYgKGNsYXNzZXMgJiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmICF0aGlzLmJyb2tlbkdFQkNOKXsKKwkJCQljaGlsZHJlbiA9IG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc0xpc3Quam9pbignICcpKTsKKwkJCQlpZiAoIShjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpKSBicmVhayBnZXRCeUNsYXNzOworCQkJCWZvciAoaSA9IDA7IGl0ZW0gPSBjaGlsZHJlbltpKytdOykgdGhpcy5wdXNoKGl0ZW0sIHRhZywgaWQsIG51bGwsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQlnZXRCeVRhZzogeworCQkJY2hpbGRyZW4gPSBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZyk7CisJCQlpZiAoIShjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpKSBicmVhayBnZXRCeVRhZzsKKwkJCWlmICghdGhpcy5icm9rZW5TdGFyR0VCVE4pIHRhZyA9IG51bGw7CisJCQlmb3IgKGkgPSAwOyBpdGVtID0gY2hpbGRyZW5baSsrXTspIHRoaXMucHVzaChpdGVtLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTsKKwkJfQorCX0sCisKKwknPic6IGZ1bmN0aW9uKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpeyAvLyBkaXJlY3QgY2hpbGRyZW4KKwkJaWYgKChub2RlID0gbm9kZS5maXJzdENoaWxkKSkgZG8geworCQkJaWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpOworCQl9IHdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKTsKKwl9LAorCisJJysnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5nCisJCXdoaWxlICgobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKXsKKwkJCXRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTsKKwkJCWJyZWFrOworCQl9CisJfSwKKworCSdeJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGZpcnN0IGNoaWxkCisJCW5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7CisJCWlmIChub2RlKXsKKwkJCWlmIChub2RlLm5vZGVUeXBlID09IDEpIHRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTsKKwkJCWVsc2UgdGhpc1snY29tYmluYXRvcjorJ10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7CisJCX0KKwl9LAorCisJJ34nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5ncworCQl3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSl7CisJCQlpZiAobm9kZS5ub2RlVHlwZSAhPSAxKSBjb250aW51ZTsKKwkJCXZhciB1aWQgPSB0aGlzLmdldFVJRChub2RlKTsKKwkJCWlmICh0aGlzLmJpdFVuaXF1ZXNbdWlkXSkgYnJlYWs7CisJCQl0aGlzLmJpdFVuaXF1ZXNbdWlkXSA9IHRydWU7CisJCQl0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7CisJCX0KKwl9LAorCisJJysrJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIG5leHQgc2libGluZyBhbmQgcHJldmlvdXMgc2libGluZworCQl0aGlzWydjb21iaW5hdG9yOisnXShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTsKKwkJdGhpc1snY29tYmluYXRvcjohKyddKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpOworCX0sCisKKwknfn4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gbmV4dCBzaWJsaW5ncyBhbmQgcHJldmlvdXMgc2libGluZ3MKKwkJdGhpc1snY29tYmluYXRvcjp+J10obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7CisJCXRoaXNbJ2NvbWJpbmF0b3I6IX4nXShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTsKKwl9LAorCisJJyEnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gYWxsIHBhcmVudCBub2RlcyB1cCB0byBkb2N1bWVudAorCQl3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSBpZiAobm9kZSAhPT0gdGhpcy5kb2N1bWVudCkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpOworCX0sCisKKwknIT4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gZGlyZWN0IHBhcmVudCAob25lIGxldmVsKQorCQlub2RlID0gbm9kZS5wYXJlbnROb2RlOworCQlpZiAobm9kZSAhPT0gdGhpcy5kb2N1bWVudCkgdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpOworCX0sCisKKwknISsnOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2libGluZworCQl3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpIGlmIChub2RlLm5vZGVUeXBlID09IDEpeworCQkJdGhpcy5wdXNoKG5vZGUsIHRhZywgaWQsIGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHBzZXVkb3MpOworCQkJYnJlYWs7CisJCX0KKwl9LAorCisJJyFeJzogZnVuY3Rpb24obm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyl7IC8vIGxhc3QgY2hpbGQKKwkJbm9kZSA9IG5vZGUubGFzdENoaWxkOworCQlpZiAobm9kZSl7CisJCQlpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB0aGlzLnB1c2gobm9kZSwgdGFnLCBpZCwgY2xhc3NlcywgYXR0cmlidXRlcywgcHNldWRvcyk7CisJCQllbHNlIHRoaXNbJ2NvbWJpbmF0b3I6ISsnXShub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTsKKwkJfQorCX0sCisKKwknIX4nOiBmdW5jdGlvbihub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKXsgLy8gcHJldmlvdXMgc2libGluZ3MKKwkJd2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKXsKKwkJCWlmIChub2RlLm5vZGVUeXBlICE9IDEpIGNvbnRpbnVlOworCQkJdmFyIHVpZCA9IHRoaXMuZ2V0VUlEKG5vZGUpOworCQkJaWYgKHRoaXMuYml0VW5pcXVlc1t1aWRdKSBicmVhazsKKwkJCXRoaXMuYml0VW5pcXVlc1t1aWRdID0gdHJ1ZTsKKwkJCXRoaXMucHVzaChub2RlLCB0YWcsIGlkLCBjbGFzc2VzLCBhdHRyaWJ1dGVzLCBwc2V1ZG9zKTsKKwkJfQorCX0KKworfTsKKworZm9yICh2YXIgYyBpbiBjb21iaW5hdG9ycykgbG9jYWxbJ2NvbWJpbmF0b3I6JyArIGNdID0gY29tYmluYXRvcnNbY107CisKK3ZhciBwc2V1ZG9zID0geworCisJLyo8cHNldWRvLXNlbGVjdG9ycz4qLworCisJJ2VtcHR5JzogZnVuY3Rpb24obm9kZSl7CisJCXZhciBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDsKKwkJcmV0dXJuICEoY2hpbGQgJiYgY2hpbGQubm9kZVR5cGUgPT0gMSkgJiYgIShub2RlLmlubmVyVGV4dCB8fCBub2RlLnRleHRDb250ZW50IHx8ICcnKS5sZW5ndGg7CisJfSwKKworCSdub3QnOiBmdW5jdGlvbihub2RlLCBleHByZXNzaW9uKXsKKwkJcmV0dXJuICF0aGlzLm1hdGNoTm9kZShub2RlLCBleHByZXNzaW9uKTsKKwl9LAorCisJJ2NvbnRhaW5zJzogZnVuY3Rpb24obm9kZSwgdGV4dCl7CisJCXJldHVybiAobm9kZS5pbm5lclRleHQgfHwgbm9kZS50ZXh0Q29udGVudCB8fCAnJykuaW5kZXhPZih0ZXh0KSA+IC0xOworCX0sCisKKwknZmlyc3QtY2hpbGQnOiBmdW5jdGlvbihub2RlKXsKKwkJd2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSByZXR1cm4gZmFsc2U7CisJCXJldHVybiB0cnVlOworCX0sCisKKwknbGFzdC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGUpeworCQl3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gdHJ1ZTsKKwl9LAorCisJJ29ubHktY2hpbGQnOiBmdW5jdGlvbihub2RlKXsKKwkJdmFyIHByZXYgPSBub2RlOworCQl3aGlsZSAoKHByZXYgPSBwcmV2LnByZXZpb3VzU2libGluZykpIGlmIChwcmV2Lm5vZGVUeXBlID09IDEpIHJldHVybiBmYWxzZTsKKwkJdmFyIG5leHQgPSBub2RlOworCQl3aGlsZSAoKG5leHQgPSBuZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZVR5cGUgPT0gMSkgcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gdHJ1ZTsKKwl9LAorCisJLyo8bnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8KKworCSdudGgtY2hpbGQnOiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2ZpcnN0Q2hpbGQnLCAnbmV4dFNpYmxpbmcnLCAncG9zTlRIJyksCisKKwknbnRoLWxhc3QtY2hpbGQnOiBsb2NhbC5jcmVhdGVOVEhQc2V1ZG8oJ2xhc3RDaGlsZCcsICdwcmV2aW91c1NpYmxpbmcnLCAncG9zTlRITGFzdCcpLAorCisJJ250aC1vZi10eXBlJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5nJywgJ3Bvc05USFR5cGUnLCB0cnVlKSwKKworCSdudGgtbGFzdC1vZi10eXBlJzogbG9jYWwuY3JlYXRlTlRIUHNldWRvKCdsYXN0Q2hpbGQnLCAncHJldmlvdXNTaWJsaW5nJywgJ3Bvc05USFR5cGVMYXN0JywgdHJ1ZSksCisKKwknaW5kZXgnOiBmdW5jdGlvbihub2RlLCBpbmRleCl7CisJCXJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwgJycgKyAoaW5kZXggKyAxKSk7CisJfSwKKworCSdldmVuJzogZnVuY3Rpb24obm9kZSl7CisJCXJldHVybiB0aGlzWydwc2V1ZG86bnRoLWNoaWxkJ10obm9kZSwgJzJuJyk7CisJfSwKKworCSdvZGQnOiBmdW5jdGlvbihub2RlKXsKKwkJcmV0dXJuIHRoaXNbJ3BzZXVkbzpudGgtY2hpbGQnXShub2RlLCAnMm4rMScpOworCX0sCisKKwkvKjwvbnRoLXBzZXVkby1zZWxlY3RvcnM+Ki8KKworCS8qPG9mLXR5cGUtcHNldWRvLXNlbGVjdG9ycz4qLworCisJJ2ZpcnN0LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXsKKwkJdmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTsKKwkJd2hpbGUgKChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpKSBpZiAobm9kZS5ub2RlTmFtZSA9PSBub2RlTmFtZSkgcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gdHJ1ZTsKKwl9LAorCisJJ2xhc3Qtb2YtdHlwZSc6IGZ1bmN0aW9uKG5vZGUpeworCQl2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lOworCQl3aGlsZSAoKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSkgaWYgKG5vZGUubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTsKKwkJcmV0dXJuIHRydWU7CisJfSwKKworCSdvbmx5LW9mLXR5cGUnOiBmdW5jdGlvbihub2RlKXsKKwkJdmFyIHByZXYgPSBub2RlLCBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7CisJCXdoaWxlICgocHJldiA9IHByZXYucHJldmlvdXNTaWJsaW5nKSkgaWYgKHByZXYubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTsKKwkJdmFyIG5leHQgPSBub2RlOworCQl3aGlsZSAoKG5leHQgPSBuZXh0Lm5leHRTaWJsaW5nKSkgaWYgKG5leHQubm9kZU5hbWUgPT0gbm9kZU5hbWUpIHJldHVybiBmYWxzZTsKKwkJcmV0dXJuIHRydWU7CisJfSwKKworCS8qPC9vZi10eXBlLXBzZXVkby1zZWxlY3RvcnM+Ki8KKworCS8vIGN1c3RvbSBwc2V1ZG9zCisKKwknZW5hYmxlZCc6IGZ1bmN0aW9uKG5vZGUpeworCQlyZXR1cm4gIW5vZGUuZGlzYWJsZWQ7CisJfSwKKworCSdkaXNhYmxlZCc6IGZ1bmN0aW9uKG5vZGUpeworCQlyZXR1cm4gbm9kZS5kaXNhYmxlZDsKKwl9LAorCisJJ2NoZWNrZWQnOiBmdW5jdGlvbihub2RlKXsKKwkJcmV0dXJuIG5vZGUuY2hlY2tlZCB8fCBub2RlLnNlbGVjdGVkOworCX0sCisKKwknZm9jdXMnOiBmdW5jdGlvbihub2RlKXsKKwkJcmV0dXJuIHRoaXMuaXNIVE1MRG9jdW1lbnQgJiYgdGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBub2RlICYmIChub2RlLmhyZWYgfHwgbm9kZS50eXBlIHx8IHRoaXMuaGFzQXR0cmlidXRlKG5vZGUsICd0YWJpbmRleCcpKTsKKwl9LAorCisJJ3Jvb3QnOiBmdW5jdGlvbihub2RlKXsKKwkJcmV0dXJuIChub2RlID09PSB0aGlzLnJvb3QpOworCX0sCisKKwknc2VsZWN0ZWQnOiBmdW5jdGlvbihub2RlKXsKKwkJcmV0dXJuIG5vZGUuc2VsZWN0ZWQ7CisJfQorCisJLyo8L3BzZXVkby1zZWxlY3RvcnM+Ki8KK307CisKK2ZvciAodmFyIHAgaW4gcHNldWRvcykgbG9jYWxbJ3BzZXVkbzonICsgcF0gPSBwc2V1ZG9zW3BdOworCisvLyBhdHRyaWJ1dGVzIG1ldGhvZHMKKwordmFyIGF0dHJpYnV0ZUdldHRlcnMgPSBsb2NhbC5hdHRyaWJ1dGVHZXR0ZXJzID0geworCisJJ2Zvcic6IGZ1bmN0aW9uKCl7CisJCXJldHVybiAoJ2h0bWxGb3InIGluIHRoaXMpID8gdGhpcy5odG1sRm9yIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2ZvcicpOworCX0sCisKKwknaHJlZic6IGZ1bmN0aW9uKCl7CisJCXJldHVybiAoJ2hyZWYnIGluIHRoaXMpID8gdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnLCAyKSA6IHRoaXMuZ2V0QXR0cmlidXRlKCdocmVmJyk7CisJfSwKKworCSdzdHlsZSc6IGZ1bmN0aW9uKCl7CisJCXJldHVybiAodGhpcy5zdHlsZSkgPyB0aGlzLnN0eWxlLmNzc1RleHQgOiB0aGlzLmdldEF0dHJpYnV0ZSgnc3R5bGUnKTsKKwl9LAorCisJJ3RhYmluZGV4JzogZnVuY3Rpb24oKXsKKwkJdmFyIGF0dHJpYnV0ZU5vZGUgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUoJ3RhYmluZGV4Jyk7CisJCXJldHVybiAoYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7CisJfSwKKworCSd0eXBlJzogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCd0eXBlJyk7CisJfSwKKworCSdtYXhsZW5ndGgnOiBmdW5jdGlvbigpeworCQl2YXIgYXR0cmlidXRlTm9kZSA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgnbWF4TGVuZ3RoJyk7CisJCXJldHVybiAoYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCkgPyBhdHRyaWJ1dGVOb2RlLm5vZGVWYWx1ZSA6IG51bGw7CisJfQorCit9OworCithdHRyaWJ1dGVHZXR0ZXJzLk1BWExFTkdUSCA9IGF0dHJpYnV0ZUdldHRlcnMubWF4TGVuZ3RoID0gYXR0cmlidXRlR2V0dGVycy5tYXhsZW5ndGg7CisKKy8vIFNsaWNrCisKK3ZhciBTbGljayA9IGxvY2FsLlNsaWNrID0gKHRoaXMuU2xpY2sgfHwge30pOworCitTbGljay52ZXJzaW9uID0gJzEuMS43JzsKKworLy8gU2xpY2sgZmluZGVyCisKK1NsaWNrLnNlYXJjaCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24sIGFwcGVuZCl7CisJcmV0dXJuIGxvY2FsLnNlYXJjaChjb250ZXh0LCBleHByZXNzaW9uLCBhcHBlbmQpOworfTsKKworU2xpY2suZmluZCA9IGZ1bmN0aW9uKGNvbnRleHQsIGV4cHJlc3Npb24peworCXJldHVybiBsb2NhbC5zZWFyY2goY29udGV4dCwgZXhwcmVzc2lvbiwgbnVsbCwgdHJ1ZSk7Cit9OworCisvLyBTbGljayBjb250YWlubWVudCBjaGVja2VyCisKK1NsaWNrLmNvbnRhaW5zID0gZnVuY3Rpb24oY29udGFpbmVyLCBub2RlKXsKKwlsb2NhbC5zZXREb2N1bWVudChjb250YWluZXIpOworCXJldHVybiBsb2NhbC5jb250YWlucyhjb250YWluZXIsIG5vZGUpOworfTsKKworLy8gU2xpY2sgYXR0cmlidXRlIGdldHRlcgorCitTbGljay5nZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbihub2RlLCBuYW1lKXsKKwlsb2NhbC5zZXREb2N1bWVudChub2RlKTsKKwlyZXR1cm4gbG9jYWwuZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpOworfTsKKworU2xpY2suaGFzQXR0cmlidXRlID0gZnVuY3Rpb24obm9kZSwgbmFtZSl7CisJbG9jYWwuc2V0RG9jdW1lbnQobm9kZSk7CisJcmV0dXJuIGxvY2FsLmhhc0F0dHJpYnV0ZShub2RlLCBuYW1lKTsKK307CisKKy8vIFNsaWNrIG1hdGNoZXIKKworU2xpY2subWF0Y2ggPSBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcil7CisJaWYgKCEobm9kZSAmJiBzZWxlY3RvcikpIHJldHVybiBmYWxzZTsKKwlpZiAoIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBub2RlKSByZXR1cm4gdHJ1ZTsKKwlsb2NhbC5zZXREb2N1bWVudChub2RlKTsKKwlyZXR1cm4gbG9jYWwubWF0Y2hOb2RlKG5vZGUsIHNlbGVjdG9yKTsKK307CisKKy8vIFNsaWNrIGF0dHJpYnV0ZSBhY2Nlc3NvcgorCitTbGljay5kZWZpbmVBdHRyaWJ1dGVHZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCBmbil7CisJbG9jYWwuYXR0cmlidXRlR2V0dGVyc1tuYW1lXSA9IGZuOworCXJldHVybiB0aGlzOworfTsKKworU2xpY2subG9va3VwQXR0cmlidXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSl7CisJcmV0dXJuIGxvY2FsLmF0dHJpYnV0ZUdldHRlcnNbbmFtZV07Cit9OworCisvLyBTbGljayBwc2V1ZG8gYWNjZXNzb3IKKworU2xpY2suZGVmaW5lUHNldWRvID0gZnVuY3Rpb24obmFtZSwgZm4peworCWxvY2FsWydwc2V1ZG86JyArIG5hbWVdID0gZnVuY3Rpb24obm9kZSwgYXJndW1lbnQpeworCQlyZXR1cm4gZm4uY2FsbChub2RlLCBhcmd1bWVudCk7CisJfTsKKwlyZXR1cm4gdGhpczsKK307CisKK1NsaWNrLmxvb2t1cFBzZXVkbyA9IGZ1bmN0aW9uKG5hbWUpeworCXZhciBwc2V1ZG8gPSBsb2NhbFsncHNldWRvOicgKyBuYW1lXTsKKwlpZiAocHNldWRvKSByZXR1cm4gZnVuY3Rpb24oYXJndW1lbnQpeworCQlyZXR1cm4gcHNldWRvLmNhbGwodGhpcywgYXJndW1lbnQpOworCX07CisJcmV0dXJuIG51bGw7Cit9OworCisvLyBTbGljayBvdmVycmlkZXMgYWNjZXNzb3IKKworU2xpY2sub3ZlcnJpZGUgPSBmdW5jdGlvbihyZWdleHAsIGZuKXsKKwlsb2NhbC5vdmVycmlkZShyZWdleHAsIGZuKTsKKwlyZXR1cm4gdGhpczsKK307CisKK1NsaWNrLmlzWE1MID0gbG9jYWwuaXNYTUw7CisKK1NsaWNrLnVpZE9mID0gZnVuY3Rpb24obm9kZSl7CisJcmV0dXJuIGxvY2FsLmdldFVJREhUTUwobm9kZSk7Cit9OworCitpZiAoIXRoaXMuU2xpY2spIHRoaXMuU2xpY2sgPSBTbGljazsKKworfSkuYXBwbHkoLyo8Q29tbW9uSlM+Ki8odHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcpID8gZXhwb3J0cyA6IC8qPC9Db21tb25KUz4qL3RoaXMpOworCisvKgorLS0tCisKK25hbWU6IEVsZW1lbnQKKworZGVzY3JpcHRpb246IE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgaXRlbXMgaW4gTW9vVG9vbHMuIENvbnRhaW5zIHRoZSBkb2xsYXIgZnVuY3Rpb24sIHRoZSBkb2xsYXJzIGZ1bmN0aW9uLCBhbmQgYW4gaGFuZGZ1bCBvZiBjcm9zcy1icm93c2VyLCB0aW1lLXNhdmVyIG1ldGhvZHMgdG8gbGV0IHlvdSBlYXNpbHkgd29yayB3aXRoIEhUTUwgRWxlbWVudHMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCityZXF1aXJlczogW1dpbmRvdywgRG9jdW1lbnQsIEFycmF5LCBTdHJpbmcsIEZ1bmN0aW9uLCBPYmplY3QsIE51bWJlciwgU2xpY2suUGFyc2VyLCBTbGljay5GaW5kZXJdCisKK3Byb3ZpZGVzOiBbRWxlbWVudCwgRWxlbWVudHMsICQsICQkLCBJRnJhbWUsIFNlbGVjdG9yc10KKworLi4uCisqLworCit2YXIgRWxlbWVudCA9IHRoaXMuRWxlbWVudCA9IGZ1bmN0aW9uKHRhZywgcHJvcHMpeworCXZhciBrb25zdHJ1Y3RvciA9IEVsZW1lbnQuQ29uc3RydWN0b3JzW3RhZ107CisJaWYgKGtvbnN0cnVjdG9yKSByZXR1cm4ga29uc3RydWN0b3IocHJvcHMpOworCWlmICh0eXBlb2YgdGFnICE9ICdzdHJpbmcnKSByZXR1cm4gZG9jdW1lbnQuaWQodGFnKS5zZXQocHJvcHMpOworCisJaWYgKCFwcm9wcykgcHJvcHMgPSB7fTsKKworCWlmICghKC9eW1x3LV0rJC8pLnRlc3QodGFnKSl7CisJCXZhciBwYXJzZWQgPSBTbGljay5wYXJzZSh0YWcpLmV4cHJlc3Npb25zWzBdWzBdOworCQl0YWcgPSAocGFyc2VkLnRhZyA9PSAnKicpID8gJ2RpdicgOiBwYXJzZWQudGFnOworCQlpZiAocGFyc2VkLmlkICYmIHByb3BzLmlkID09IG51bGwpIHByb3BzLmlkID0gcGFyc2VkLmlkOworCisJCXZhciBhdHRyaWJ1dGVzID0gcGFyc2VkLmF0dHJpYnV0ZXM7CisJCWlmIChhdHRyaWJ1dGVzKSBmb3IgKHZhciBhdHRyLCBpID0gMCwgbCA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKXsKKwkJCWF0dHIgPSBhdHRyaWJ1dGVzW2ldOworCQkJaWYgKHByb3BzW2F0dHIua2V5XSAhPSBudWxsKSBjb250aW51ZTsKKworCQkJaWYgKGF0dHIudmFsdWUgIT0gbnVsbCAmJiBhdHRyLm9wZXJhdG9yID09ICc9JykgcHJvcHNbYXR0ci5rZXldID0gYXR0ci52YWx1ZTsKKwkJCWVsc2UgaWYgKCFhdHRyLnZhbHVlICYmICFhdHRyLm9wZXJhdG9yKSBwcm9wc1thdHRyLmtleV0gPSB0cnVlOworCQl9CisKKwkJaWYgKHBhcnNlZC5jbGFzc0xpc3QgJiYgcHJvcHNbJ2NsYXNzJ10gPT0gbnVsbCkgcHJvcHNbJ2NsYXNzJ10gPSBwYXJzZWQuY2xhc3NMaXN0LmpvaW4oJyAnKTsKKwl9CisKKwlyZXR1cm4gZG9jdW1lbnQubmV3RWxlbWVudCh0YWcsIHByb3BzKTsKK307CisKKworaWYgKEJyb3dzZXIuRWxlbWVudCl7CisJRWxlbWVudC5wcm90b3R5cGUgPSBCcm93c2VyLkVsZW1lbnQucHJvdG90eXBlOworCS8vIElFOCBhbmQgSUU5IHJlcXVpcmUgdGhlIHdyYXBwaW5nLgorCUVsZW1lbnQucHJvdG90eXBlLl9maXJlRXZlbnQgPSAoZnVuY3Rpb24oZmlyZUV2ZW50KXsKKwkJcmV0dXJuIGZ1bmN0aW9uKHR5cGUsIGV2ZW50KXsKKwkJCXJldHVybiBmaXJlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBldmVudCk7CisJCX07CisJfSkoRWxlbWVudC5wcm90b3R5cGUuZmlyZUV2ZW50KTsKK30KKworbmV3IFR5cGUoJ0VsZW1lbnQnLCBFbGVtZW50KS5taXJyb3IoZnVuY3Rpb24obmFtZSl7CisJaWYgKEFycmF5LnByb3RvdHlwZVtuYW1lXSkgcmV0dXJuOworCisJdmFyIG9iaiA9IHt9OworCW9ialtuYW1lXSA9IGZ1bmN0aW9uKCl7CisJCXZhciByZXN1bHRzID0gW10sIGFyZ3MgPSBhcmd1bWVudHMsIGVsZW1lbnRzID0gdHJ1ZTsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7CisJCQl2YXIgZWxlbWVudCA9IHRoaXNbaV0sIHJlc3VsdCA9IHJlc3VsdHNbaV0gPSBlbGVtZW50W25hbWVdLmFwcGx5KGVsZW1lbnQsIGFyZ3MpOworCQkJZWxlbWVudHMgPSAoZWxlbWVudHMgJiYgdHlwZU9mKHJlc3VsdCkgPT0gJ2VsZW1lbnQnKTsKKwkJfQorCQlyZXR1cm4gKGVsZW1lbnRzKSA/IG5ldyBFbGVtZW50cyhyZXN1bHRzKSA6IHJlc3VsdHM7CisJfTsKKworCUVsZW1lbnRzLmltcGxlbWVudChvYmopOworfSk7CisKK2lmICghQnJvd3Nlci5FbGVtZW50KXsKKwlFbGVtZW50LnBhcmVudCA9IE9iamVjdDsKKworCUVsZW1lbnQuUHJvdG90eXBlID0geworCQknJGNvbnN0cnVjdG9yJzogRWxlbWVudCwKKwkJJyRmYW1pbHknOiBGdW5jdGlvbi5jb252ZXJ0KCdlbGVtZW50JykuaGlkZSgpCisJfTsKKworCUVsZW1lbnQubWlycm9yKGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCl7CisJCUVsZW1lbnQuUHJvdG90eXBlW25hbWVdID0gbWV0aG9kOworCX0pOworfQorCitFbGVtZW50LkNvbnN0cnVjdG9ycyA9IHt9OworCisKKwordmFyIElGcmFtZSA9IG5ldyBUeXBlKCdJRnJhbWUnLCBmdW5jdGlvbigpeworCXZhciBwYXJhbXMgPSBBcnJheS5saW5rKGFyZ3VtZW50cywgeworCQlwcm9wZXJ0aWVzOiBUeXBlLmlzT2JqZWN0LAorCQlpZnJhbWU6IGZ1bmN0aW9uKG9iail7CisJCQlyZXR1cm4gKG9iaiAhPSBudWxsKTsKKwkJfQorCX0pOworCisJdmFyIHByb3BzID0gcGFyYW1zLnByb3BlcnRpZXMgfHwge30sIGlmcmFtZTsKKwlpZiAocGFyYW1zLmlmcmFtZSkgaWZyYW1lID0gZG9jdW1lbnQuaWQocGFyYW1zLmlmcmFtZSk7CisJdmFyIG9ubG9hZCA9IHByb3BzLm9ubG9hZCB8fCBmdW5jdGlvbigpe307CisJZGVsZXRlIHByb3BzLm9ubG9hZDsKKwlwcm9wcy5pZCA9IHByb3BzLm5hbWUgPSBbcHJvcHMuaWQsIHByb3BzLm5hbWUsIGlmcmFtZSA/IChpZnJhbWUuaWQgfHwgaWZyYW1lLm5hbWUpIDogJ0lGcmFtZV8nICsgU3RyaW5nLnVuaXF1ZUlEKCldLnBpY2soKTsKKwlpZnJhbWUgPSBuZXcgRWxlbWVudChpZnJhbWUgfHwgJ2lmcmFtZScsIHByb3BzKTsKKworCXZhciBvbkxvYWQgPSBmdW5jdGlvbigpeworCQlvbmxvYWQuY2FsbChpZnJhbWUuY29udGVudFdpbmRvdyk7CisJfTsKKworCWlmICh3aW5kb3cuZnJhbWVzW3Byb3BzLmlkXSkgb25Mb2FkKCk7CisJZWxzZSBpZnJhbWUuYWRkTGlzdGVuZXIoJ2xvYWQnLCBvbkxvYWQpOworCXJldHVybiBpZnJhbWU7Cit9KTsKKwordmFyIEVsZW1lbnRzID0gdGhpcy5FbGVtZW50cyA9IGZ1bmN0aW9uKG5vZGVzKXsKKwlpZiAobm9kZXMgJiYgbm9kZXMubGVuZ3RoKXsKKwkJdmFyIHVuaXF1ZXMgPSB7fSwgbm9kZTsKKwkJZm9yICh2YXIgaSA9IDA7IG5vZGUgPSBub2Rlc1tpKytdOyl7CisJCQl2YXIgdWlkID0gU2xpY2sudWlkT2Yobm9kZSk7CisJCQlpZiAoIXVuaXF1ZXNbdWlkXSl7CisJCQkJdW5pcXVlc1t1aWRdID0gdHJ1ZTsKKwkJCQl0aGlzLnB1c2gobm9kZSk7CisJCQl9CisJCX0KKwl9Cit9OworCitFbGVtZW50cy5wcm90b3R5cGUgPSB7bGVuZ3RoOiAwfTsKK0VsZW1lbnRzLnBhcmVudCA9IEFycmF5OworCituZXcgVHlwZSgnRWxlbWVudHMnLCBFbGVtZW50cykuaW1wbGVtZW50KHsKKworCWZpbHRlcjogZnVuY3Rpb24oZmlsdGVyLCBiaW5kKXsKKwkJaWYgKCFmaWx0ZXIpIHJldHVybiB0aGlzOworCQlyZXR1cm4gbmV3IEVsZW1lbnRzKEFycmF5LmZpbHRlcih0aGlzLCAodHlwZU9mKGZpbHRlcikgPT0gJ3N0cmluZycpID8gZnVuY3Rpb24oaXRlbSl7CisJCQlyZXR1cm4gaXRlbS5tYXRjaChmaWx0ZXIpOworCQl9IDogZmlsdGVyLCBiaW5kKSk7CisJfS5wcm90ZWN0KCksCisKKwlwdXNoOiBmdW5jdGlvbigpeworCQl2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CisJCWZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7CisJCQl2YXIgaXRlbSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7CisJCQlpZiAoaXRlbSkgdGhpc1tsZW5ndGgrK10gPSBpdGVtOworCQl9CisJCXJldHVybiAodGhpcy5sZW5ndGggPSBsZW5ndGgpOworCX0ucHJvdGVjdCgpLAorCisJdW5zaGlmdDogZnVuY3Rpb24oKXsKKwkJdmFyIGl0ZW1zID0gW107CisJCWZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7CisJCQl2YXIgaXRlbSA9IGRvY3VtZW50LmlkKGFyZ3VtZW50c1tpXSk7CisJCQlpZiAoaXRlbSkgaXRlbXMucHVzaChpdGVtKTsKKwkJfQorCQlyZXR1cm4gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkodGhpcywgaXRlbXMpOworCX0ucHJvdGVjdCgpLAorCisJY29uY2F0OiBmdW5jdGlvbigpeworCQl2YXIgbmV3RWxlbWVudHMgPSBuZXcgRWxlbWVudHModGhpcyk7CisJCWZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7CisJCQl2YXIgaXRlbSA9IGFyZ3VtZW50c1tpXTsKKwkJCWlmIChUeXBlLmlzRW51bWVyYWJsZShpdGVtKSkgbmV3RWxlbWVudHMuYXBwZW5kKGl0ZW0pOworCQkJZWxzZSBuZXdFbGVtZW50cy5wdXNoKGl0ZW0pOworCQl9CisJCXJldHVybiBuZXdFbGVtZW50czsKKwl9LnByb3RlY3QoKSwKKworCWFwcGVuZDogZnVuY3Rpb24oY29sbGVjdGlvbil7CisJCWZvciAodmFyIGkgPSAwLCBsID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMucHVzaChjb2xsZWN0aW9uW2ldKTsKKwkJcmV0dXJuIHRoaXM7CisJfS5wcm90ZWN0KCksCisKKwllbXB0eTogZnVuY3Rpb24oKXsKKwkJd2hpbGUgKHRoaXMubGVuZ3RoKSBkZWxldGUgdGhpc1stLXRoaXMubGVuZ3RoXTsKKwkJcmV0dXJuIHRoaXM7CisJfS5wcm90ZWN0KCkKKworfSk7CisKKworCisoZnVuY3Rpb24oKXsKKworLy8gRkYsIElFCit2YXIgc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZSwgb2JqZWN0ID0geycwJzogMCwgJzEnOiAxLCBsZW5ndGg6IDJ9OworCitzcGxpY2UuY2FsbChvYmplY3QsIDEsIDEpOworaWYgKG9iamVjdFsxXSA9PSAxKSBFbGVtZW50cy5pbXBsZW1lbnQoJ3NwbGljZScsIGZ1bmN0aW9uKCl7CisJdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoOworCXZhciByZXN1bHQgPSBzcGxpY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKwl3aGlsZSAobGVuZ3RoID49IHRoaXMubGVuZ3RoKSBkZWxldGUgdGhpc1tsZW5ndGgtLV07CisJcmV0dXJuIHJlc3VsdDsKK30ucHJvdGVjdCgpKTsKKworQXJyYXkuZm9yRWFjaE1ldGhvZChmdW5jdGlvbihtZXRob2QsIG5hbWUpeworCUVsZW1lbnRzLmltcGxlbWVudChuYW1lLCBtZXRob2QpOworfSk7CisKK0FycmF5Lm1pcnJvcihFbGVtZW50cyk7CisKKy8qPGx0SUU4PiovCit2YXIgY3JlYXRlRWxlbWVudEFjY2VwdHNIVE1MOwordHJ5IHsKKwljcmVhdGVFbGVtZW50QWNjZXB0c0hUTUwgPSAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnPGlucHV0IG5hbWU9eD4nKS5uYW1lID09ICd4Jyk7Cit9IGNhdGNoIChlKXt9CisKK3ZhciBlc2NhcGVRdW90ZXMgPSBmdW5jdGlvbihodG1sKXsKKwlyZXR1cm4gKCcnICsgaHRtbCkucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC8iL2csICcmcXVvdDsnKTsKK307CisvKjwvbHRJRTg+Ki8KKworLyo8bHRJRTk+Ki8KKy8vICMyNDc5IC0gSUU4IENhbm5vdCBzZXQgSFRNTCBvZiBzdHlsZSBlbGVtZW50Cit2YXIgY2FuQ2hhbmdlU3R5bGVIVE1MID0gKGZ1bmN0aW9uKCl7CisJdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksCisJCWZsYWcgPSBmYWxzZTsKKwl0cnkgeworCQlkaXYuaW5uZXJIVE1MID0gJyNqdXN0VGVzaW5ne21hcmdpbjogMHB4O30nOworCQlmbGFnID0gISFkaXYuaW5uZXJIVE1MOworCX0gY2F0Y2ggKGUpe30KKwlyZXR1cm4gZmxhZzsKK30pKCk7CisvKjwvbHRJRTk+Ki8KKworRG9jdW1lbnQuaW1wbGVtZW50KHsKKworCW5ld0VsZW1lbnQ6IGZ1bmN0aW9uKHRhZywgcHJvcHMpeworCQlpZiAocHJvcHMpeworCQkJaWYgKHByb3BzLmNoZWNrZWQgIT0gbnVsbCkgcHJvcHMuZGVmYXVsdENoZWNrZWQgPSBwcm9wcy5jaGVja2VkOworCQkJaWYgKChwcm9wcy50eXBlID09ICdjaGVja2JveCcgfHwgcHJvcHMudHlwZSA9PSAncmFkaW8nKSAmJiBwcm9wcy52YWx1ZSA9PSBudWxsKSBwcm9wcy52YWx1ZSA9ICdvbic7CisJCQkvKjxsdElFOT4qLyAvLyBJRSBuZWVkcyB0aGUgdHlwZSB0byBiZSBzZXQgYmVmb3JlIGNoYW5naW5nIGNvbnRlbnQgb2Ygc3R5bGUgZWxlbWVudAorCQkJaWYgKCFjYW5DaGFuZ2VTdHlsZUhUTUwgJiYgdGFnID09ICdzdHlsZScpeworCQkJCXZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpOworCQkJCXN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTsKKwkJCQlpZiAocHJvcHMudHlwZSkgZGVsZXRlIHByb3BzLnR5cGU7CisJCQkJcmV0dXJuIHRoaXMuaWQoc3R5bGVFbGVtZW50KS5zZXQocHJvcHMpOworCQkJfQorCQkJLyo8L2x0SUU5PiovCisJCQkvKjxsdElFOD4qLy8vIEZpeCBmb3IgcmVhZG9ubHkgbmFtZSBhbmQgdHlwZSBwcm9wZXJ0aWVzIGluIElFIDwgOAorCQkJaWYgKGNyZWF0ZUVsZW1lbnRBY2NlcHRzSFRNTCl7CisJCQkJdGFnID0gJzwnICsgdGFnOworCQkJCWlmIChwcm9wcy5uYW1lKSB0YWcgKz0gJyBuYW1lPSInICsgZXNjYXBlUXVvdGVzKHByb3BzLm5hbWUpICsgJyInOworCQkJCWlmIChwcm9wcy50eXBlKSB0YWcgKz0gJyB0eXBlPSInICsgZXNjYXBlUXVvdGVzKHByb3BzLnR5cGUpICsgJyInOworCQkJCXRhZyArPSAnPic7CisJCQkJZGVsZXRlIHByb3BzLm5hbWU7CisJCQkJZGVsZXRlIHByb3BzLnR5cGU7CisJCQl9CisJCQkvKjwvbHRJRTg+Ki8KKwkJfQorCQlyZXR1cm4gdGhpcy5pZCh0aGlzLmNyZWF0ZUVsZW1lbnQodGFnKSkuc2V0KHByb3BzKTsKKwl9CisKK30pOworCit9KSgpOworCisoZnVuY3Rpb24oKXsKKworU2xpY2sudWlkT2Yod2luZG93KTsKK1NsaWNrLnVpZE9mKGRvY3VtZW50KTsKKworRG9jdW1lbnQuaW1wbGVtZW50KHsKKworCW5ld1RleHROb2RlOiBmdW5jdGlvbih0ZXh0KXsKKwkJcmV0dXJuIHRoaXMuY3JlYXRlVGV4dE5vZGUodGV4dCk7CisJfSwKKworCWdldERvY3VtZW50OiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZ2V0V2luZG93OiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy53aW5kb3c7CisJfSwKKworCWlkOiAoZnVuY3Rpb24oKXsKKworCQl2YXIgdHlwZXMgPSB7CisKKwkJCXN0cmluZzogZnVuY3Rpb24oaWQsIG5vY2FzaCwgZG9jKXsKKwkJCQlpZCA9IFNsaWNrLmZpbmQoZG9jLCAnIycgKyBpZC5yZXBsYWNlKC8oXFcpL2csICdcXCQxJykpOworCQkJCXJldHVybiAoaWQpID8gdHlwZXMuZWxlbWVudChpZCwgbm9jYXNoKSA6IG51bGw7CisJCQl9LAorCisJCQllbGVtZW50OiBmdW5jdGlvbihlbCwgbm9jYXNoKXsKKwkJCQlTbGljay51aWRPZihlbCk7CisJCQkJaWYgKCFub2Nhc2ggJiYgIWVsLiRmYW1pbHkgJiYgISgvXig/Om9iamVjdHxlbWJlZCkkL2kpLnRlc3QoZWwudGFnTmFtZSkpeworCQkJCQl2YXIgZmlyZUV2ZW50ID0gZWwuZmlyZUV2ZW50OworCQkJCQkvLyB3cmFwcGluZyBuZWVkZWQgaW4gSUU3LCBvciBlbHNlIGNyYXNoCisJCQkJCWVsLl9maXJlRXZlbnQgPSBmdW5jdGlvbih0eXBlLCBldmVudCl7CisJCQkJCQlyZXR1cm4gZmlyZUV2ZW50KHR5cGUsIGV2ZW50KTsKKwkJCQkJfTsKKwkJCQkJT2JqZWN0LmFwcGVuZChlbCwgRWxlbWVudC5Qcm90b3R5cGUpOworCQkJCX0KKwkJCQlyZXR1cm4gZWw7CisJCQl9LAorCisJCQlvYmplY3Q6IGZ1bmN0aW9uKG9iaiwgbm9jYXNoLCBkb2MpeworCQkJCWlmIChvYmoudG9FbGVtZW50KSByZXR1cm4gdHlwZXMuZWxlbWVudChvYmoudG9FbGVtZW50KGRvYyksIG5vY2FzaCk7CisJCQkJcmV0dXJuIG51bGw7CisJCQl9CisKKwkJfTsKKworCQl0eXBlcy50ZXh0bm9kZSA9IHR5cGVzLndoaXRlc3BhY2UgPSB0eXBlcy53aW5kb3cgPSB0eXBlcy5kb2N1bWVudCA9IGZ1bmN0aW9uKHplcm8peworCQkJcmV0dXJuIHplcm87CisJCX07CisKKwkJcmV0dXJuIGZ1bmN0aW9uKGVsLCBub2Nhc2gsIGRvYyl7CisJCQlpZiAoZWwgJiYgZWwuJGZhbWlseSAmJiBlbC51bmlxdWVOdW1iZXIpIHJldHVybiBlbDsKKwkJCXZhciB0eXBlID0gdHlwZU9mKGVsKTsKKwkJCXJldHVybiAodHlwZXNbdHlwZV0pID8gdHlwZXNbdHlwZV0oZWwsIG5vY2FzaCwgZG9jIHx8IGRvY3VtZW50KSA6IG51bGw7CisJCX07CisKKwl9KSgpCisKK30pOworCitpZiAod2luZG93LiQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCcsIGZ1bmN0aW9uKGVsLCBuYyl7CisJcmV0dXJuIGRvY3VtZW50LmlkKGVsLCBuYywgdGhpcy5kb2N1bWVudCk7Cit9KTsKKworV2luZG93LmltcGxlbWVudCh7CisKKwlnZXREb2N1bWVudDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuZG9jdW1lbnQ7CisJfSwKKworCWdldFdpbmRvdzogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKworW0RvY3VtZW50LCBFbGVtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIHsKKworCWdldEVsZW1lbnRzOiBmdW5jdGlvbihleHByZXNzaW9uKXsKKwkJcmV0dXJuIFNsaWNrLnNlYXJjaCh0aGlzLCBleHByZXNzaW9uLCBuZXcgRWxlbWVudHMpOworCX0sCisKKwlnZXRFbGVtZW50OiBmdW5jdGlvbihleHByZXNzaW9uKXsKKwkJcmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLmZpbmQodGhpcywgZXhwcmVzc2lvbikpOworCX0KKworfSk7CisKK3ZhciBjb250YWlucyA9IHtjb250YWluczogZnVuY3Rpb24oZWxlbWVudCl7CisJcmV0dXJuIFNsaWNrLmNvbnRhaW5zKHRoaXMsIGVsZW1lbnQpOworfX07CisKK2lmICghZG9jdW1lbnQuY29udGFpbnMpIERvY3VtZW50LmltcGxlbWVudChjb250YWlucyk7CitpZiAoIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNvbnRhaW5zKSBFbGVtZW50LmltcGxlbWVudChjb250YWlucyk7CisKKworCisvLyB0cmVlIHdhbGtpbmcKKwordmFyIGluamVjdENvbWJpbmF0b3IgPSBmdW5jdGlvbihleHByZXNzaW9uLCBjb21iaW5hdG9yKXsKKwlpZiAoIWV4cHJlc3Npb24pIHJldHVybiBjb21iaW5hdG9yOworCisJZXhwcmVzc2lvbiA9IE9iamVjdC5jbG9uZShTbGljay5wYXJzZShleHByZXNzaW9uKSk7CisKKwl2YXIgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zOworCWZvciAodmFyIGkgPSBleHByZXNzaW9ucy5sZW5ndGg7IGktLTspCisJCWV4cHJlc3Npb25zW2ldWzBdLmNvbWJpbmF0b3IgPSBjb21iaW5hdG9yOworCisJcmV0dXJuIGV4cHJlc3Npb247Cit9OworCitPYmplY3QuZm9yRWFjaCh7CisJZ2V0TmV4dDogJ34nLAorCWdldFByZXZpb3VzOiAnIX4nLAorCWdldFBhcmVudDogJyEnCit9LCBmdW5jdGlvbihjb21iaW5hdG9yLCBtZXRob2QpeworCUVsZW1lbnQuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oZXhwcmVzc2lvbil7CisJCXJldHVybiB0aGlzLmdldEVsZW1lbnQoaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCBjb21iaW5hdG9yKSk7CisJfSk7Cit9KTsKKworT2JqZWN0LmZvckVhY2goeworCWdldEFsbE5leHQ6ICd+JywKKwlnZXRBbGxQcmV2aW91czogJyF+JywKKwlnZXRTaWJsaW5nczogJ35+JywKKwlnZXRDaGlsZHJlbjogJz4nLAorCWdldFBhcmVudHM6ICchJworfSwgZnVuY3Rpb24oY29tYmluYXRvciwgbWV0aG9kKXsKKwlFbGVtZW50LmltcGxlbWVudChtZXRob2QsIGZ1bmN0aW9uKGV4cHJlc3Npb24peworCQlyZXR1cm4gdGhpcy5nZXRFbGVtZW50cyhpbmplY3RDb21iaW5hdG9yKGV4cHJlc3Npb24sIGNvbWJpbmF0b3IpKTsKKwl9KTsKK30pOworCitFbGVtZW50LmltcGxlbWVudCh7CisKKwlnZXRGaXJzdDogZnVuY3Rpb24oZXhwcmVzc2lvbil7CisJCXJldHVybiBkb2N1bWVudC5pZChTbGljay5zZWFyY2godGhpcywgaW5qZWN0Q29tYmluYXRvcihleHByZXNzaW9uLCAnPicpKVswXSk7CisJfSwKKworCWdldExhc3Q6IGZ1bmN0aW9uKGV4cHJlc3Npb24peworCQlyZXR1cm4gZG9jdW1lbnQuaWQoU2xpY2suc2VhcmNoKHRoaXMsIGluamVjdENvbWJpbmF0b3IoZXhwcmVzc2lvbiwgJz4nKSkuZ2V0TGFzdCgpKTsKKwl9LAorCisJZ2V0V2luZG93OiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LndpbmRvdzsKKwl9LAorCisJZ2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQ7CisJfSwKKworCWdldEVsZW1lbnRCeUlkOiBmdW5jdGlvbihpZCl7CisJCXJldHVybiBkb2N1bWVudC5pZChTbGljay5maW5kKHRoaXMsICcjJyArICgnJyArIGlkKS5yZXBsYWNlKC8oXFcpL2csICdcXCQxJykpKTsKKwl9LAorCisJbWF0Y2g6IGZ1bmN0aW9uKGV4cHJlc3Npb24peworCQlyZXR1cm4gIWV4cHJlc3Npb24gfHwgU2xpY2subWF0Y2godGhpcywgZXhwcmVzc2lvbik7CisJfQorCit9KTsKKworCisKK2lmICh3aW5kb3cuJCQgPT0gbnVsbCkgV2luZG93LmltcGxlbWVudCgnJCQnLCBmdW5jdGlvbihzZWxlY3Rvcil7CisJaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSl7CisJCWlmICh0eXBlb2Ygc2VsZWN0b3IgPT0gJ3N0cmluZycpIHJldHVybiBTbGljay5zZWFyY2godGhpcy5kb2N1bWVudCwgc2VsZWN0b3IsIG5ldyBFbGVtZW50cyk7CisJCWVsc2UgaWYgKFR5cGUuaXNFbnVtZXJhYmxlKHNlbGVjdG9yKSkgcmV0dXJuIG5ldyBFbGVtZW50cyhzZWxlY3Rvcik7CisJfQorCXJldHVybiBuZXcgRWxlbWVudHMoYXJndW1lbnRzKTsKK30pOworCisvLyBJbnNlcnRlcnMKKwordmFyIGluc2VydGVycyA9IHsKKworCWJlZm9yZTogZnVuY3Rpb24oY29udGV4dCwgZWxlbWVudCl7CisJCXZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7CisJCWlmIChwYXJlbnQpIHBhcmVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudCk7CisJfSwKKworCWFmdGVyOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXsKKwkJdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTsKKwkJaWYgKHBhcmVudCkgcGFyZW50Lmluc2VydEJlZm9yZShjb250ZXh0LCBlbGVtZW50Lm5leHRTaWJsaW5nKTsKKwl9LAorCisJYm90dG9tOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXsKKwkJZWxlbWVudC5hcHBlbmRDaGlsZChjb250ZXh0KTsKKwl9LAorCisJdG9wOiBmdW5jdGlvbihjb250ZXh0LCBlbGVtZW50KXsKKwkJZWxlbWVudC5pbnNlcnRCZWZvcmUoY29udGV4dCwgZWxlbWVudC5maXJzdENoaWxkKTsKKwl9CisKK307CisKK2luc2VydGVycy5pbnNpZGUgPSBpbnNlcnRlcnMuYm90dG9tOworCisKKworLy8gZ2V0UHJvcGVydHkgLyBzZXRQcm9wZXJ0eQorCit2YXIgcHJvcGVydHlHZXR0ZXJzID0ge30sIHByb3BlcnR5U2V0dGVycyA9IHt9OworCisvLyBwcm9wZXJ0aWVzCisKK3ZhciBwcm9wZXJ0aWVzID0ge307CitBcnJheS5mb3JFYWNoKFsKKwkndHlwZScsICd2YWx1ZScsICdkZWZhdWx0VmFsdWUnLCAnYWNjZXNzS2V5JywgJ2NlbGxQYWRkaW5nJywgJ2NlbGxTcGFjaW5nJywgJ2NvbFNwYW4nLAorCSdmcmFtZUJvcmRlcicsICdyb3dTcGFuJywgJ3RhYkluZGV4JywgJ3VzZU1hcCcKK10sIGZ1bmN0aW9uKHByb3BlcnR5KXsKKwlwcm9wZXJ0aWVzW3Byb3BlcnR5LnRvTG93ZXJDYXNlKCldID0gcHJvcGVydHk7Cit9KTsKKworcHJvcGVydGllcy5odG1sID0gJ2lubmVySFRNTCc7Citwcm9wZXJ0aWVzLnRleHQgPSAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykudGV4dENvbnRlbnQgPT0gbnVsbCkgPyAnaW5uZXJUZXh0JzogJ3RleHRDb250ZW50JzsKKworT2JqZWN0LmZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24ocmVhbCwga2V5KXsKKwlwcm9wZXJ0eVNldHRlcnNba2V5XSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXsKKwkJbm9kZVtyZWFsXSA9IHZhbHVlOworCX07CisJcHJvcGVydHlHZXR0ZXJzW2tleV0gPSBmdW5jdGlvbihub2RlKXsKKwkJcmV0dXJuIG5vZGVbcmVhbF07CisJfTsKK30pOworCisvKjxsdElFOT4qLworcHJvcGVydHlTZXR0ZXJzLnRleHQgPSAoZnVuY3Rpb24oKXsKKwlyZXR1cm4gZnVuY3Rpb24obm9kZSwgdmFsdWUpeworCQlpZiAobm9kZS5nZXQoJ3RhZycpID09ICdzdHlsZScpIG5vZGUuc2V0KCdodG1sJywgdmFsdWUpOworCQllbHNlIG5vZGVbcHJvcGVydGllcy50ZXh0XSA9IHZhbHVlOworCX07Cit9KShwcm9wZXJ0eVNldHRlcnMudGV4dCk7CisKK3Byb3BlcnR5R2V0dGVycy50ZXh0ID0gKGZ1bmN0aW9uKGdldHRlcil7CisJcmV0dXJuIGZ1bmN0aW9uKG5vZGUpeworCQlyZXR1cm4gKG5vZGUuZ2V0KCd0YWcnKSA9PSAnc3R5bGUnKSA/IG5vZGUuaW5uZXJIVE1MIDogZ2V0dGVyKG5vZGUpOworCX07Cit9KShwcm9wZXJ0eUdldHRlcnMudGV4dCk7CisvKjwvbHRJRTk+Ki8KKworLy8gQm9vbGVhbnMKKwordmFyIGJvb2xzID0gWworCSdjb21wYWN0JywgJ25vd3JhcCcsICdpc21hcCcsICdkZWNsYXJlJywgJ25vc2hhZGUnLCAnY2hlY2tlZCcsCisJJ2Rpc2FibGVkJywgJ3JlYWRPbmx5JywgJ211bHRpcGxlJywgJ3NlbGVjdGVkJywgJ25vcmVzaXplJywKKwknZGVmZXInLCAnZGVmYXVsdENoZWNrZWQnLCAnYXV0b2ZvY3VzJywgJ2NvbnRyb2xzJywgJ2F1dG9wbGF5JywKKwknbG9vcCcKK107CisKK3ZhciBib29sZWFucyA9IHt9OworQXJyYXkuZm9yRWFjaChib29scywgZnVuY3Rpb24oYm9vbCl7CisJdmFyIGxvd2VyID0gYm9vbC50b0xvd2VyQ2FzZSgpOworCWJvb2xlYW5zW2xvd2VyXSA9IGJvb2w7CisJcHJvcGVydHlTZXR0ZXJzW2xvd2VyXSA9IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXsKKwkJbm9kZVtib29sXSA9ICEhdmFsdWU7CisJfTsKKwlwcm9wZXJ0eUdldHRlcnNbbG93ZXJdID0gZnVuY3Rpb24obm9kZSl7CisJCXJldHVybiAhIW5vZGVbYm9vbF07CisJfTsKK30pOworCisvLyBTcGVjaWFsIGNhc2VzCisKK09iamVjdC5hcHBlbmQocHJvcGVydHlTZXR0ZXJzLCB7CisKKwknY2xhc3MnOiBmdW5jdGlvbihub2RlLCB2YWx1ZSl7CisJCSgnY2xhc3NOYW1lJyBpbiBub2RlKSA/IG5vZGUuY2xhc3NOYW1lID0gKHZhbHVlIHx8ICcnKSA6IG5vZGUuc2V0QXR0cmlidXRlKCdjbGFzcycsIHZhbHVlKTsKKwl9LAorCisJJ2Zvcic6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKXsKKwkJKCdodG1sRm9yJyBpbiBub2RlKSA/IG5vZGUuaHRtbEZvciA9IHZhbHVlIDogbm9kZS5zZXRBdHRyaWJ1dGUoJ2ZvcicsIHZhbHVlKTsKKwl9LAorCisJJ3N0eWxlJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpeworCQkobm9kZS5zdHlsZSkgPyBub2RlLnN0eWxlLmNzc1RleHQgPSB2YWx1ZSA6IG5vZGUuc2V0QXR0cmlidXRlKCdzdHlsZScsIHZhbHVlKTsKKwl9LAorCisJJ3ZhbHVlJzogZnVuY3Rpb24obm9kZSwgdmFsdWUpeworCQlub2RlLnZhbHVlID0gKHZhbHVlICE9IG51bGwpID8gdmFsdWUgOiAnJzsKKwl9CisKK30pOworCitwcm9wZXJ0eUdldHRlcnNbJ2NsYXNzJ10gPSBmdW5jdGlvbihub2RlKXsKKwlyZXR1cm4gKCdjbGFzc05hbWUnIGluIG5vZGUpID8gbm9kZS5jbGFzc05hbWUgfHwgbnVsbCA6IG5vZGUuZ2V0QXR0cmlidXRlKCdjbGFzcycpOworfTsKKworLyogPHdlYmtpdD4gKi8KK3ZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOworLy8gSUUgc2V0cyB0eXBlIGFzIHJlYWRvbmx5IGFuZCB0aHJvd3MKK3RyeSB7IGVsLnR5cGUgPSAnYnV0dG9uJzsgfSBjYXRjaCAoZSl7fQoraWYgKGVsLnR5cGUgIT0gJ2J1dHRvbicpIHByb3BlcnR5U2V0dGVycy50eXBlID0gZnVuY3Rpb24obm9kZSwgdmFsdWUpeworCW5vZGUuc2V0QXR0cmlidXRlKCd0eXBlJywgdmFsdWUpOworfTsKK2VsID0gbnVsbDsKKy8qIDwvd2Via2l0PiAqLworCisvKjxJRT4qLworCisvKjxsdElFOT4qLworLy8gIzI0NzkgLSBJRTggQ2Fubm90IHNldCBIVE1MIG9mIHN0eWxlIGVsZW1lbnQKK3ZhciBjYW5DaGFuZ2VTdHlsZUhUTUwgPSAoZnVuY3Rpb24oKXsKKwl2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKSwKKwkJZmxhZyA9IGZhbHNlOworCXRyeSB7CisJCWRpdi5pbm5lckhUTUwgPSAnI2p1c3RUZXNpbmd7bWFyZ2luOiAwcHg7fSc7CisJCWZsYWcgPSAhIWRpdi5pbm5lckhUTUw7CisJfSBjYXRjaCAoZSl7fQorCXJldHVybiBmbGFnOworfSkoKTsKKy8qPC9sdElFOT4qLworCit2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpLCB2b2xhdGlsZUlucHV0VmFsdWUsIGh0bWw1SW5wdXRTdXBwb3J0OworCisvLyAjMjE3OAoraW5wdXQudmFsdWUgPSAndCc7CitpbnB1dC50eXBlID0gJ3N1Ym1pdCc7Cit2b2xhdGlsZUlucHV0VmFsdWUgPSBpbnB1dC52YWx1ZSAhPSAndCc7CisKKy8vICMyNDQzIC0gSUUgdGhyb3dzICJJbnZhbGlkIEFyZ3VtZW50IiB3aGVuIHRyeWluZyB0byB1c2UgaHRtbDUgaW5wdXQgdHlwZXMKK3RyeSB7CisJaW5wdXQudmFsdWUgPSAnJzsKKwlpbnB1dC50eXBlID0gJ2VtYWlsJzsKKwlodG1sNUlucHV0U3VwcG9ydCA9IGlucHV0LnR5cGUgPT0gJ2VtYWlsJzsKK30gY2F0Y2ggKGUpe30KKworaW5wdXQgPSBudWxsOworCitpZiAodm9sYXRpbGVJbnB1dFZhbHVlIHx8ICFodG1sNUlucHV0U3VwcG9ydCkgcHJvcGVydHlTZXR0ZXJzLnR5cGUgPSBmdW5jdGlvbihub2RlLCB0eXBlKXsKKwl0cnkgeworCQl2YXIgdmFsdWUgPSBub2RlLnZhbHVlOworCQlub2RlLnR5cGUgPSB0eXBlOworCQlub2RlLnZhbHVlID0gdmFsdWU7CisJfSBjYXRjaCAoZSl7fQorfTsKKy8qPC9JRT4qLworCisvKiBnZXRQcm9wZXJ0eSwgc2V0UHJvcGVydHkgKi8KKworLyogPGx0SUU5PiAqLwordmFyIHBvbGx1dGVzR2V0QXR0cmlidXRlID0gKGZ1bmN0aW9uKGRpdil7CisJZGl2LnJhbmRvbSA9ICdhdHRyaWJ1dGUnOworCXJldHVybiAoZGl2LmdldEF0dHJpYnV0ZSgncmFuZG9tJykgPT0gJ2F0dHJpYnV0ZScpOworfSkoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworCit2YXIgaGFzQ2xvbmVCdWcgPSAoZnVuY3Rpb24odGVzdCl7CisJdGVzdC5pbm5lckhUTUwgPSAnPG9iamVjdD48cGFyYW0gbmFtZT0ic2hvdWxkX2ZpeCIgdmFsdWU9InRoZSB1bmtub3duIiAvPjwvb2JqZWN0Pic7CisJcmV0dXJuIHRlc3QuY2xvbmVOb2RlKHRydWUpLmZpcnN0Q2hpbGQuY2hpbGROb2Rlcy5sZW5ndGggIT0gMTsKK30pKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKy8qIDwvbHRJRTk+ICovCisKK3ZhciBoYXNDbGFzc0xpc3QgPSAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNsYXNzTGlzdDsKKwordmFyIGNsYXNzZXMgPSBmdW5jdGlvbihjbGFzc05hbWUpeworCXZhciBjbGFzc05hbWVzID0gKGNsYXNzTmFtZSB8fCAnJykuY2xlYW4oKS5zcGxpdCgnICcpLCB1bmlxdWVzID0ge307CisJcmV0dXJuIGNsYXNzTmFtZXMuZmlsdGVyKGZ1bmN0aW9uKGNsYXNzTmFtZSl7CisJCWlmIChjbGFzc05hbWUgIT09ICcnICYmICF1bmlxdWVzW2NsYXNzTmFtZV0pIHJldHVybiB1bmlxdWVzW2NsYXNzTmFtZV0gPSBjbGFzc05hbWU7CisJfSk7Cit9OworCit2YXIgYWRkVG9DbGFzc0xpc3QgPSBmdW5jdGlvbihuYW1lKXsKKwl0aGlzLmNsYXNzTGlzdC5hZGQobmFtZSk7Cit9OworCit2YXIgcmVtb3ZlRnJvbUNsYXNzTGlzdCA9IGZ1bmN0aW9uKG5hbWUpeworCXRoaXMuY2xhc3NMaXN0LnJlbW92ZShuYW1lKTsKK307CisKK0VsZW1lbnQuaW1wbGVtZW50KHsKKworCXNldFByb3BlcnR5OiBmdW5jdGlvbihuYW1lLCB2YWx1ZSl7CisJCXZhciBzZXR0ZXIgPSBwcm9wZXJ0eVNldHRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTsKKwkJaWYgKHNldHRlcil7CisJCQlzZXR0ZXIodGhpcywgdmFsdWUpOworCQl9IGVsc2UgeworCQkJLyogPGx0SUU5PiAqLworCQkJdmFyIGF0dHJpYnV0ZVdoaXRlTGlzdDsKKwkJCWlmIChwb2xsdXRlc0dldEF0dHJpYnV0ZSkgYXR0cmlidXRlV2hpdGVMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZVdoaXRlTGlzdCcsIHt9KTsKKwkJCS8qIDwvbHRJRTk+ICovCisKKwkJCWlmICh2YWx1ZSA9PSBudWxsKXsKKwkJCQl0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTsKKwkJCQkvKiA8bHRJRTk+ICovCisJCQkJaWYgKHBvbGx1dGVzR2V0QXR0cmlidXRlKSBkZWxldGUgYXR0cmlidXRlV2hpdGVMaXN0W25hbWVdOworCQkJCS8qIDwvbHRJRTk+ICovCisJCQl9IGVsc2UgeworCQkJCXRoaXMuc2V0QXR0cmlidXRlKG5hbWUsICcnICsgdmFsdWUpOworCQkJCS8qIDxsdElFOT4gKi8KKwkJCQlpZiAocG9sbHV0ZXNHZXRBdHRyaWJ1dGUpIGF0dHJpYnV0ZVdoaXRlTGlzdFtuYW1lXSA9IHRydWU7CisJCQkJLyogPC9sdElFOT4gKi8KKwkJCX0KKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJc2V0UHJvcGVydGllczogZnVuY3Rpb24oYXR0cmlidXRlcyl7CisJCWZvciAodmFyIGF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzKSB0aGlzLnNldFByb3BlcnR5KGF0dHJpYnV0ZSwgYXR0cmlidXRlc1thdHRyaWJ1dGVdKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWdldFByb3BlcnR5OiBmdW5jdGlvbihuYW1lKXsKKwkJdmFyIGdldHRlciA9IHByb3BlcnR5R2V0dGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldOworCQlpZiAoZ2V0dGVyKSByZXR1cm4gZ2V0dGVyKHRoaXMpOworCQkvKiA8bHRJRTk+ICovCisJCWlmIChwb2xsdXRlc0dldEF0dHJpYnV0ZSl7CisJCQl2YXIgYXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZShuYW1lKSwgYXR0cmlidXRlV2hpdGVMaXN0ID0gdGhpcy5yZXRyaWV2ZSgnJGF0dHJpYnV0ZVdoaXRlTGlzdCcsIHt9KTsKKwkJCWlmICghYXR0cikgcmV0dXJuIG51bGw7CisJCQlpZiAoYXR0ci5leHBhbmRvICYmICFhdHRyaWJ1dGVXaGl0ZUxpc3RbbmFtZV0peworCQkJCXZhciBvdXRlciA9IHRoaXMub3V0ZXJIVE1MOworCQkJCS8vIHNlZ21lbnQgYnkgdGhlIG9wZW5pbmcgdGFnIGFuZCBmaW5kIG1lbnRpb24gb2YgYXR0cmlidXRlIG5hbWUKKwkJCQlpZiAob3V0ZXIuc3Vic3RyKDAsIG91dGVyLnNlYXJjaCgvXC8/WyciXT8+KD8hW148XSo8WyciXSkvKSkuaW5kZXhPZihuYW1lKSA8IDApIHJldHVybiBudWxsOworCQkJCWF0dHJpYnV0ZVdoaXRlTGlzdFtuYW1lXSA9IHRydWU7CisJCQl9CisJCX0KKwkJLyogPC9sdElFOT4gKi8KKwkJdmFyIHJlc3VsdCA9IFNsaWNrLmdldEF0dHJpYnV0ZSh0aGlzLCBuYW1lKTsKKwkJcmV0dXJuICghcmVzdWx0ICYmICFTbGljay5oYXNBdHRyaWJ1dGUodGhpcywgbmFtZSkpID8gbnVsbCA6IHJlc3VsdDsKKwl9LAorCisJZ2V0UHJvcGVydGllczogZnVuY3Rpb24oKXsKKwkJdmFyIGFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3VtZW50cyk7CisJCXJldHVybiBhcmdzLm1hcCh0aGlzLmdldFByb3BlcnR5LCB0aGlzKS5hc3NvY2lhdGUoYXJncyk7CisJfSwKKworCXJlbW92ZVByb3BlcnR5OiBmdW5jdGlvbihuYW1lKXsKKwkJcmV0dXJuIHRoaXMuc2V0UHJvcGVydHkobmFtZSwgbnVsbCk7CisJfSwKKworCXJlbW92ZVByb3BlcnRpZXM6IGZ1bmN0aW9uKCl7CisJCUFycmF5LmVhY2goYXJndW1lbnRzLCB0aGlzLnJlbW92ZVByb3BlcnR5LCB0aGlzKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXNldDogZnVuY3Rpb24ocHJvcCwgdmFsdWUpeworCQl2YXIgcHJvcGVydHkgPSBFbGVtZW50LlByb3BlcnRpZXNbcHJvcF07CisJCShwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQpID8gcHJvcGVydHkuc2V0LmNhbGwodGhpcywgdmFsdWUpIDogdGhpcy5zZXRQcm9wZXJ0eShwcm9wLCB2YWx1ZSk7CisJfS5vdmVybG9hZFNldHRlcigpLAorCisJZ2V0OiBmdW5jdGlvbihwcm9wKXsKKwkJdmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3BdOworCQlyZXR1cm4gKHByb3BlcnR5ICYmIHByb3BlcnR5LmdldCkgPyBwcm9wZXJ0eS5nZXQuYXBwbHkodGhpcykgOiB0aGlzLmdldFByb3BlcnR5KHByb3ApOworCX0ub3ZlcmxvYWRHZXR0ZXIoKSwKKworCWVyYXNlOiBmdW5jdGlvbihwcm9wKXsKKwkJdmFyIHByb3BlcnR5ID0gRWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3BdOworCQkocHJvcGVydHkgJiYgcHJvcGVydHkuZXJhc2UpID8gcHJvcGVydHkuZXJhc2UuYXBwbHkodGhpcykgOiB0aGlzLnJlbW92ZVByb3BlcnR5KHByb3ApOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJaGFzQ2xhc3M6IGhhc0NsYXNzTGlzdCA/IGZ1bmN0aW9uKGNsYXNzTmFtZSl7CisJCXJldHVybiB0aGlzLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpOworCX0gOiBmdW5jdGlvbihjbGFzc05hbWUpeworCQlyZXR1cm4gY2xhc3Nlcyh0aGlzLmNsYXNzTmFtZSkuY29udGFpbnMoY2xhc3NOYW1lKTsKKwl9LAorCisJYWRkQ2xhc3M6IGhhc0NsYXNzTGlzdCA/IGZ1bmN0aW9uKGNsYXNzTmFtZSl7CisJCWNsYXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNoKGFkZFRvQ2xhc3NMaXN0LCB0aGlzKTsKKwkJcmV0dXJuIHRoaXM7CisJfSA6IGZ1bmN0aW9uKGNsYXNzTmFtZSl7CisJCXRoaXMuY2xhc3NOYW1lID0gY2xhc3NlcyhjbGFzc05hbWUgKyAnICcgKyB0aGlzLmNsYXNzTmFtZSkuam9pbignICcpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVtb3ZlQ2xhc3M6IGhhc0NsYXNzTGlzdCA/IGZ1bmN0aW9uKGNsYXNzTmFtZSl7CisJCWNsYXNzZXMoY2xhc3NOYW1lKS5mb3JFYWNoKHJlbW92ZUZyb21DbGFzc0xpc3QsIHRoaXMpOworCQlyZXR1cm4gdGhpczsKKwl9IDogZnVuY3Rpb24oY2xhc3NOYW1lKXsKKwkJdmFyIGNsYXNzTmFtZXMgPSBjbGFzc2VzKHRoaXMuY2xhc3NOYW1lKTsKKwkJY2xhc3NlcyhjbGFzc05hbWUpLmZvckVhY2goY2xhc3NOYW1lcy5lcmFzZSwgY2xhc3NOYW1lcyk7CisJCXRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lcy5qb2luKCcgJyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwl0b2dnbGVDbGFzczogZnVuY3Rpb24oY2xhc3NOYW1lLCBmb3JjZSl7CisJCWlmIChmb3JjZSA9PSBudWxsKSBmb3JjZSA9ICF0aGlzLmhhc0NsYXNzKGNsYXNzTmFtZSk7CisJCXJldHVybiAoZm9yY2UpID8gdGhpcy5hZGRDbGFzcyhjbGFzc05hbWUpIDogdGhpcy5yZW1vdmVDbGFzcyhjbGFzc05hbWUpOworCX0sCisKKwlhZG9wdDogZnVuY3Rpb24oKXsKKwkJdmFyIHBhcmVudCA9IHRoaXMsIGZyYWdtZW50LCBlbGVtZW50cyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKSwgbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoOworCQlpZiAobGVuZ3RoID4gMSkgcGFyZW50ID0gZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisKKwkJZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7CisJCQl2YXIgZWxlbWVudCA9IGRvY3VtZW50LmlkKGVsZW1lbnRzW2ldLCB0cnVlKTsKKwkJCWlmIChlbGVtZW50KSBwYXJlbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CisJCX0KKworCQlpZiAoZnJhZ21lbnQpIHRoaXMuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOworCisJCXJldHVybiB0aGlzOworCX0sCisKKwlhcHBlbmRUZXh0OiBmdW5jdGlvbih0ZXh0LCB3aGVyZSl7CisJCXJldHVybiB0aGlzLmdyYWIodGhpcy5nZXREb2N1bWVudCgpLm5ld1RleHROb2RlKHRleHQpLCB3aGVyZSk7CisJfSwKKworCWdyYWI6IGZ1bmN0aW9uKGVsLCB3aGVyZSl7CisJCWluc2VydGVyc1t3aGVyZSB8fCAnYm90dG9tJ10oZG9jdW1lbnQuaWQoZWwsIHRydWUpLCB0aGlzKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWluamVjdDogZnVuY3Rpb24oZWwsIHdoZXJlKXsKKwkJaW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXSh0aGlzLCBkb2N1bWVudC5pZChlbCwgdHJ1ZSkpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVwbGFjZXM6IGZ1bmN0aW9uKGVsKXsKKwkJZWwgPSBkb2N1bWVudC5pZChlbCwgdHJ1ZSk7CisJCWVsLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMsIGVsKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXdyYXBzOiBmdW5jdGlvbihlbCwgd2hlcmUpeworCQllbCA9IGRvY3VtZW50LmlkKGVsLCB0cnVlKTsKKwkJcmV0dXJuIHRoaXMucmVwbGFjZXMoZWwpLmdyYWIoZWwsIHdoZXJlKTsKKwl9LAorCisJZ2V0U2VsZWN0ZWQ6IGZ1bmN0aW9uKCl7CisJCXRoaXMuc2VsZWN0ZWRJbmRleDsgLy8gU2FmYXJpIDMuMi4xCisJCXJldHVybiBuZXcgRWxlbWVudHMoQXJyYXkuY29udmVydCh0aGlzLm9wdGlvbnMpLmZpbHRlcihmdW5jdGlvbihvcHRpb24peworCQkJcmV0dXJuIG9wdGlvbi5zZWxlY3RlZDsKKwkJfSkpOworCX0sCisKKwl0b1F1ZXJ5U3RyaW5nOiBmdW5jdGlvbigpeworCQl2YXIgcXVlcnlTdHJpbmcgPSBbXTsKKwkJdGhpcy5nZXRFbGVtZW50cygnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEnKS5lYWNoKGZ1bmN0aW9uKGVsKXsKKwkJCXZhciB0eXBlID0gZWwudHlwZTsKKwkJCWlmICghZWwubmFtZSB8fCBlbC5kaXNhYmxlZCB8fCB0eXBlID09ICdzdWJtaXQnIHx8IHR5cGUgPT0gJ3Jlc2V0JyB8fCB0eXBlID09ICdmaWxlJyB8fCB0eXBlID09ICdpbWFnZScpIHJldHVybjsKKworCQkJdmFyIHZhbHVlID0gKGVsLmdldCgndGFnJykgPT0gJ3NlbGVjdCcpID8gZWwuZ2V0U2VsZWN0ZWQoKS5tYXAoZnVuY3Rpb24ob3B0KXsKKwkJCQkvLyBJRQorCQkJCXJldHVybiBkb2N1bWVudC5pZChvcHQpLmdldCgndmFsdWUnKTsKKwkJCX0pIDogKCh0eXBlID09ICdyYWRpbycgfHwgdHlwZSA9PSAnY2hlY2tib3gnKSAmJiAhZWwuY2hlY2tlZCkgPyBudWxsIDogZWwuZ2V0KCd2YWx1ZScpOworCisJCQlBcnJheS5jb252ZXJ0KHZhbHVlKS5lYWNoKGZ1bmN0aW9uKHZhbCl7CisJCQkJaWYgKHR5cGVvZiB2YWwgIT0gJ3VuZGVmaW5lZCcpIHF1ZXJ5U3RyaW5nLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGVsLm5hbWUpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkpOworCQkJfSk7CisJCX0pOworCQlyZXR1cm4gcXVlcnlTdHJpbmcuam9pbignJicpOworCX0KKworfSk7CisKKworLy8gYXBwZW5kSFRNTAorCit2YXIgYXBwZW5kSW5zZXJ0ZXJzID0geworCWJlZm9yZTogJ2JlZm9yZUJlZ2luJywKKwlhZnRlcjogJ2FmdGVyRW5kJywKKwlib3R0b206ICdiZWZvcmVFbmQnLAorCXRvcDogJ2FmdGVyQmVnaW4nLAorCWluc2lkZTogJ2JlZm9yZUVuZCcKK307CisKK0VsZW1lbnQuaW1wbGVtZW50KCdhcHBlbmRIVE1MJywgKCdpbnNlcnRBZGphY2VudEhUTUwnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKSA/IGZ1bmN0aW9uKGh0bWwsIHdoZXJlKXsKKwl0aGlzLmluc2VydEFkamFjZW50SFRNTChhcHBlbmRJbnNlcnRlcnNbd2hlcmUgfHwgJ2JvdHRvbSddLCBodG1sKTsKKwlyZXR1cm4gdGhpczsKK30gOiBmdW5jdGlvbihodG1sLCB3aGVyZSl7CisJdmFyIHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jywge2h0bWw6IGh0bWx9KSwKKwkJY2hpbGRyZW4gPSB0ZW1wLmNoaWxkTm9kZXMsCisJCWZyYWdtZW50ID0gdGVtcC5maXJzdENoaWxkOworCisJaWYgKCFmcmFnbWVudCkgcmV0dXJuIHRoaXM7CisJaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDEpeworCQlmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspeworCQkJZnJhZ21lbnQuYXBwZW5kQ2hpbGQoY2hpbGRyZW5baV0pOworCQl9CisJfQorCisJaW5zZXJ0ZXJzW3doZXJlIHx8ICdib3R0b20nXShmcmFnbWVudCwgdGhpcyk7CisJcmV0dXJuIHRoaXM7Cit9KTsKKwordmFyIGNvbGxlY3RlZCA9IHt9LCBzdG9yYWdlID0ge307CisKK3ZhciBnZXQgPSBmdW5jdGlvbih1aWQpeworCXJldHVybiAoc3RvcmFnZVt1aWRdIHx8IChzdG9yYWdlW3VpZF0gPSB7fSkpOworfTsKKwordmFyIGNsZWFuID0gZnVuY3Rpb24oaXRlbSl7CisJdmFyIHVpZCA9IGl0ZW0udW5pcXVlTnVtYmVyOworCWlmIChpdGVtLnJlbW92ZUV2ZW50cykgaXRlbS5yZW1vdmVFdmVudHMoKTsKKwlpZiAoaXRlbS5jbGVhckF0dHJpYnV0ZXMpIGl0ZW0uY2xlYXJBdHRyaWJ1dGVzKCk7CisJaWYgKHVpZCAhPSBudWxsKXsKKwkJZGVsZXRlIGNvbGxlY3RlZFt1aWRdOworCQlkZWxldGUgc3RvcmFnZVt1aWRdOworCX0KKwlyZXR1cm4gaXRlbTsKK307CisKK3ZhciBmb3JtUHJvcHMgPSB7aW5wdXQ6ICdjaGVja2VkJywgb3B0aW9uOiAnc2VsZWN0ZWQnLCB0ZXh0YXJlYTogJ3ZhbHVlJ307CisKK0VsZW1lbnQuaW1wbGVtZW50KHsKKworCWRlc3Ryb3k6IGZ1bmN0aW9uKCl7CisJCXZhciBjaGlsZHJlbiA9IGNsZWFuKHRoaXMpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7CisJCUFycmF5LmVhY2goY2hpbGRyZW4sIGNsZWFuKTsKKwkJRWxlbWVudC5kaXNwb3NlKHRoaXMpOworCQlyZXR1cm4gbnVsbDsKKwl9LAorCisJZW1wdHk6IGZ1bmN0aW9uKCl7CisJCUFycmF5LmNvbnZlcnQodGhpcy5jaGlsZE5vZGVzKS5lYWNoKEVsZW1lbnQuZGlzcG9zZSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlkaXNwb3NlOiBmdW5jdGlvbigpeworCQlyZXR1cm4gKHRoaXMucGFyZW50Tm9kZSkgPyB0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcykgOiB0aGlzOworCX0sCisKKwljbG9uZTogZnVuY3Rpb24oY29udGVudHMsIGtlZXBpZCl7CisJCWNvbnRlbnRzID0gY29udGVudHMgIT09IGZhbHNlOworCQl2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZShjb250ZW50cyksIGNlID0gW2Nsb25lXSwgdGUgPSBbdGhpc10sIGk7CisKKwkJaWYgKGNvbnRlbnRzKXsKKwkJCWNlLmFwcGVuZChBcnJheS5jb252ZXJ0KGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpKTsKKwkJCXRlLmFwcGVuZChBcnJheS5jb252ZXJ0KHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSkpOworCQl9CisKKwkJZm9yIChpID0gY2UubGVuZ3RoOyBpLS07KXsKKwkJCXZhciBub2RlID0gY2VbaV0sIGVsZW1lbnQgPSB0ZVtpXTsKKwkJCWlmICgha2VlcGlkKSBub2RlLnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTsKKwkJCS8qPGx0SUU5PiovCisJCQlpZiAobm9kZS5jbGVhckF0dHJpYnV0ZXMpeworCQkJCW5vZGUuY2xlYXJBdHRyaWJ1dGVzKCk7CisJCQkJbm9kZS5tZXJnZUF0dHJpYnV0ZXMoZWxlbWVudCk7CisJCQkJbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3VuaXF1ZU51bWJlcicpOworCQkJCWlmIChub2RlLm9wdGlvbnMpeworCQkJCQl2YXIgbm8gPSBub2RlLm9wdGlvbnMsIGVvID0gZWxlbWVudC5vcHRpb25zOworCQkJCQlmb3IgKHZhciBqID0gbm8ubGVuZ3RoOyBqLS07KSBub1tqXS5zZWxlY3RlZCA9IGVvW2pdLnNlbGVjdGVkOworCQkJCX0KKwkJCX0KKwkJCS8qPC9sdElFOT4qLworCQkJdmFyIHByb3AgPSBmb3JtUHJvcHNbZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCldOworCQkJaWYgKHByb3AgJiYgZWxlbWVudFtwcm9wXSkgbm9kZVtwcm9wXSA9IGVsZW1lbnRbcHJvcF07CisJCX0KKworCQkvKjxsdElFOT4qLworCQlpZiAoaGFzQ2xvbmVCdWcpeworCQkJdmFyIGNvID0gY2xvbmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpLCB0byA9IHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpOworCQkJZm9yIChpID0gY28ubGVuZ3RoOyBpLS07KSBjb1tpXS5vdXRlckhUTUwgPSB0b1tpXS5vdXRlckhUTUw7CisJCX0KKwkJLyo8L2x0SUU5PiovCisJCXJldHVybiBkb2N1bWVudC5pZChjbG9uZSk7CisJfQorCit9KTsKKworW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1wbGVtZW50JywgeworCisJYWRkTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXsKKwkJaWYgKHdpbmRvdy5hdHRhY2hFdmVudCAmJiAhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpeworCQkJY29sbGVjdGVkW1NsaWNrLnVpZE9mKHRoaXMpXSA9IHRoaXM7CisJCX0KKwkJaWYgKHRoaXMuYWRkRXZlbnRMaXN0ZW5lcikgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7CisJCWVsc2UgdGhpcy5hdHRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVtb3ZlTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGZuKXsKKwkJaWYgKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcikgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGZuLCAhIWFyZ3VtZW50c1syXSk7CisJCWVsc2UgdGhpcy5kZXRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmV0cmlldmU6IGZ1bmN0aW9uKHByb3BlcnR5LCBkZmx0KXsKKwkJdmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpLCBwcm9wID0gc3RvcmFnZVtwcm9wZXJ0eV07CisJCWlmIChkZmx0ICE9IG51bGwgJiYgcHJvcCA9PSBudWxsKSBwcm9wID0gc3RvcmFnZVtwcm9wZXJ0eV0gPSBkZmx0OworCQlyZXR1cm4gcHJvcCAhPSBudWxsID8gcHJvcCA6IG51bGw7CisJfSwKKworCXN0b3JlOiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFsdWUpeworCQl2YXIgc3RvcmFnZSA9IGdldChTbGljay51aWRPZih0aGlzKSk7CisJCXN0b3JhZ2VbcHJvcGVydHldID0gdmFsdWU7CisJCXJldHVybiB0aGlzOworCX0sCisKKwllbGltaW5hdGU6IGZ1bmN0aW9uKHByb3BlcnR5KXsKKwkJdmFyIHN0b3JhZ2UgPSBnZXQoU2xpY2sudWlkT2YodGhpcykpOworCQlkZWxldGUgc3RvcmFnZVtwcm9wZXJ0eV07CisJCXJldHVybiB0aGlzOworCX0KKworfSk7CisKKy8qPGx0SUU5PiovCitpZiAod2luZG93LmF0dGFjaEV2ZW50ICYmICF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7CisJdmFyIGdjID0gZnVuY3Rpb24oKXsKKwkJT2JqZWN0LmVhY2goY29sbGVjdGVkLCBjbGVhbik7CisJCWlmICh3aW5kb3cuQ29sbGVjdEdhcmJhZ2UpIENvbGxlY3RHYXJiYWdlKCk7CisJCXdpbmRvdy5yZW1vdmVMaXN0ZW5lcigndW5sb2FkJywgZ2MpOworCX07CisJd2luZG93LmFkZExpc3RlbmVyKCd1bmxvYWQnLCBnYyk7Cit9CisvKjwvbHRJRTk+Ki8KKworRWxlbWVudC5Qcm9wZXJ0aWVzID0ge307CisKKworCitFbGVtZW50LlByb3BlcnRpZXMuc3R5bGUgPSB7CisKKwlzZXQ6IGZ1bmN0aW9uKHN0eWxlKXsKKwkJdGhpcy5zdHlsZS5jc3NUZXh0ID0gc3R5bGU7CisJfSwKKworCWdldDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuc3R5bGUuY3NzVGV4dDsKKwl9LAorCisJZXJhc2U6IGZ1bmN0aW9uKCl7CisJCXRoaXMuc3R5bGUuY3NzVGV4dCA9ICcnOworCX0KKworfTsKKworRWxlbWVudC5Qcm9wZXJ0aWVzLnRhZyA9IHsKKworCWdldDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpOworCX0KKworfTsKKworRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwgPSB7CisKKwlzZXQ6IGZ1bmN0aW9uKGh0bWwpeworCQlpZiAoaHRtbCA9PSBudWxsKSBodG1sID0gJyc7CisJCWVsc2UgaWYgKHR5cGVPZihodG1sKSA9PSAnYXJyYXknKSBodG1sID0gaHRtbC5qb2luKCcnKTsKKworCQkvKjxsdElFOT4qLworCQlpZiAodGhpcy5zdHlsZVNoZWV0ICYmICFjYW5DaGFuZ2VTdHlsZUhUTUwpIHRoaXMuc3R5bGVTaGVldC5jc3NUZXh0ID0gaHRtbDsKKwkJZWxzZSAvKjwvbHRJRTk+Ki90aGlzLmlubmVySFRNTCA9IGh0bWw7CisJfSwKKwllcmFzZTogZnVuY3Rpb24oKXsKKwkJdGhpcy5zZXQoJ2h0bWwnLCAnJyk7CisJfQorCit9OworCit2YXIgc3VwcG9ydHNIVE1MNUVsZW1lbnRzID0gdHJ1ZSwgc3VwcG9ydHNUYWJsZUlubmVySFRNTCA9IHRydWUsIHN1cHBvcnRzVFJJbm5lckhUTUwgPSB0cnVlOworCisvKjxsdElFOT4qLworLy8gdGVjaG5pcXVlIGJ5IGpkYmFybGV0dCAtIGh0dHA6Ly9qZGJhcnRsZXR0LmNvbS9pbm5lcnNoaXYvCit2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Cit2YXIgZnJhZ21lbnQ7CitkaXYuaW5uZXJIVE1MID0gJzxuYXY+PC9uYXY+JzsKK3N1cHBvcnRzSFRNTDVFbGVtZW50cyA9IChkaXYuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSk7CitpZiAoIXN1cHBvcnRzSFRNTDVFbGVtZW50cyl7CisJdmFyIHRhZ3MgPSAnYWJiciBhcnRpY2xlIGFzaWRlIGF1ZGlvIGNhbnZhcyBkYXRhbGlzdCBkZXRhaWxzIGZpZ2NhcHRpb24gZmlndXJlIGZvb3RlciBoZWFkZXIgaGdyb3VwIG1hcmsgbWV0ZXIgbmF2IG91dHB1dCBwcm9ncmVzcyBzZWN0aW9uIHN1bW1hcnkgdGltZSB2aWRlbycuc3BsaXQoJyAnKTsKKwlmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgbCA9IHRhZ3MubGVuZ3RoOworCXdoaWxlIChsLS0pIGZyYWdtZW50LmNyZWF0ZUVsZW1lbnQodGFnc1tsXSk7Cit9CitkaXYgPSBudWxsOworLyo8L2x0SUU5PiovCisKKy8qPElFPiovCitzdXBwb3J0c1RhYmxlSW5uZXJIVE1MID0gRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpeworCXZhciB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7CisJdGFibGUuaW5uZXJIVE1MID0gJzx0cj48dGQ+PC90ZD48L3RyPic7CisJcmV0dXJuIHRydWU7Cit9KTsKKworLyo8bHRGRjQ+Ki8KK3ZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyksIGh0bWwgPSAnPHRkPjwvdGQ+JzsKK3RyLmlubmVySFRNTCA9IGh0bWw7CitzdXBwb3J0c1RSSW5uZXJIVE1MID0gKHRyLmlubmVySFRNTCA9PSBodG1sKTsKK3RyID0gbnVsbDsKKy8qPC9sdEZGND4qLworCitpZiAoIXN1cHBvcnRzVGFibGVJbm5lckhUTUwgfHwgIXN1cHBvcnRzVFJJbm5lckhUTUwgfHwgIXN1cHBvcnRzSFRNTDVFbGVtZW50cyl7CisKKwlFbGVtZW50LlByb3BlcnRpZXMuaHRtbC5zZXQgPSAoZnVuY3Rpb24oc2V0KXsKKworCQl2YXIgdHJhbnNsYXRpb25zID0geworCQkJdGFibGU6IFsxLCAnPHRhYmxlPicsICc8L3RhYmxlPiddLAorCQkJc2VsZWN0OiBbMSwgJzxzZWxlY3Q+JywgJzwvc2VsZWN0PiddLAorCQkJdGJvZHk6IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAnPC90Ym9keT48L3RhYmxlPiddLAorCQkJdHI6IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90Ym9keT48L3RhYmxlPiddCisJCX07CisKKwkJdHJhbnNsYXRpb25zLnRoZWFkID0gdHJhbnNsYXRpb25zLnRmb290ID0gdHJhbnNsYXRpb25zLnRib2R5OworCisJCXJldHVybiBmdW5jdGlvbihodG1sKXsKKworCQkJLyo8bHRJRTk+Ki8KKwkJCWlmICh0aGlzLnN0eWxlU2hlZXQpIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTsKKwkJCS8qPC9sdElFOT4qLworCQkJdmFyIHdyYXAgPSB0cmFuc2xhdGlvbnNbdGhpcy5nZXQoJ3RhZycpXTsKKwkJCWlmICghd3JhcCAmJiAhc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSB3cmFwID0gWzAsICcnLCAnJ107CisJCQlpZiAoIXdyYXApIHJldHVybiBzZXQuY2FsbCh0aGlzLCBodG1sKTsKKworCQkJdmFyIGxldmVsID0gd3JhcFswXSwgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLCB0YXJnZXQgPSB3cmFwcGVyOworCQkJaWYgKCFzdXBwb3J0c0hUTUw1RWxlbWVudHMpIGZyYWdtZW50LmFwcGVuZENoaWxkKHdyYXBwZXIpOworCQkJd3JhcHBlci5pbm5lckhUTUwgPSBbd3JhcFsxXSwgaHRtbCwgd3JhcFsyXV0uZmxhdHRlbigpLmpvaW4oJycpOworCQkJd2hpbGUgKGxldmVsLS0pIHRhcmdldCA9IHRhcmdldC5maXJzdENoaWxkOworCQkJdGhpcy5lbXB0eSgpLmFkb3B0KHRhcmdldC5jaGlsZE5vZGVzKTsKKwkJCWlmICghc3VwcG9ydHNIVE1MNUVsZW1lbnRzKSBmcmFnbWVudC5yZW1vdmVDaGlsZCh3cmFwcGVyKTsKKwkJCXdyYXBwZXIgPSBudWxsOworCQl9OworCisJfSkoRWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWwuc2V0KTsKK30KKy8qPC9JRT4qLworCisvKjxsdElFOT4qLwordmFyIHRlc3RGb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpOwordGVzdEZvcm0uaW5uZXJIVE1MID0gJzxzZWxlY3Q+PG9wdGlvbj5zPC9vcHRpb24+PC9zZWxlY3Q+JzsKKworaWYgKHRlc3RGb3JtLmZpcnN0Q2hpbGQudmFsdWUgIT0gJ3MnKSBFbGVtZW50LlByb3BlcnRpZXMudmFsdWUgPSB7CisKKwlzZXQ6IGZ1bmN0aW9uKHZhbHVlKXsKKwkJdmFyIHRhZyA9IHRoaXMuZ2V0KCd0YWcnKTsKKwkJaWYgKHRhZyAhPSAnc2VsZWN0JykgcmV0dXJuIHRoaXMuc2V0UHJvcGVydHkoJ3ZhbHVlJywgdmFsdWUpOworCQl2YXIgb3B0aW9ucyA9IHRoaXMuZ2V0RWxlbWVudHMoJ29wdGlvbicpOworCQl2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7CisJCWZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKyl7CisJCQl2YXIgb3B0aW9uID0gb3B0aW9uc1tpXSwKKwkJCQlhdHRyID0gb3B0aW9uLmdldEF0dHJpYnV0ZU5vZGUoJ3ZhbHVlJyksCisJCQkJb3B0aW9uVmFsdWUgPSAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBvcHRpb24udmFsdWUgOiBvcHRpb24uZ2V0KCd0ZXh0Jyk7CisJCQlpZiAob3B0aW9uVmFsdWUgPT09IHZhbHVlKSByZXR1cm4gb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTsKKwkJfQorCX0sCisKKwlnZXQ6IGZ1bmN0aW9uKCl7CisJCXZhciBvcHRpb24gPSB0aGlzLCB0YWcgPSBvcHRpb24uZ2V0KCd0YWcnKTsKKworCQlpZiAodGFnICE9ICdzZWxlY3QnICYmIHRhZyAhPSAnb3B0aW9uJykgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoJ3ZhbHVlJyk7CisKKwkJaWYgKHRhZyA9PSAnc2VsZWN0JyAmJiAhKG9wdGlvbiA9IG9wdGlvbi5nZXRTZWxlY3RlZCgpWzBdKSkgcmV0dXJuICcnOworCisJCXZhciBhdHRyID0gb3B0aW9uLmdldEF0dHJpYnV0ZU5vZGUoJ3ZhbHVlJyk7CisJCXJldHVybiAoYXR0ciAmJiBhdHRyLnNwZWNpZmllZCkgPyBvcHRpb24udmFsdWUgOiBvcHRpb24uZ2V0KCd0ZXh0Jyk7CisJfQorCit9OwordGVzdEZvcm0gPSBudWxsOworLyo8L2x0SUU5PiovCisKKy8qPElFPiovCitpZiAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKSkgRWxlbWVudC5Qcm9wZXJ0aWVzLmlkID0geworCXNldDogZnVuY3Rpb24oaWQpeworCQl0aGlzLmlkID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpLnZhbHVlID0gaWQ7CisJfSwKKwlnZXQ6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLmlkIHx8IG51bGw7CisJfSwKKwllcmFzZTogZnVuY3Rpb24oKXsKKwkJdGhpcy5pZCA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZSgnaWQnKS52YWx1ZSA9ICcnOworCX0KK307CisvKjwvSUU+Ki8KKworfSkoKTsKKworLyoKKy0tLQorCituYW1lOiBFdmVudAorCitkZXNjcmlwdGlvbjogQ29udGFpbnMgdGhlIEV2ZW50IFR5cGUsIHRvIG1ha2UgdGhlIGV2ZW50IG9iamVjdCBjcm9zcy1icm93c2VyLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworcmVxdWlyZXM6IFtXaW5kb3csIERvY3VtZW50LCBBcnJheSwgRnVuY3Rpb24sIFN0cmluZywgT2JqZWN0XQorCitwcm92aWRlczogRXZlbnQKKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIF9rZXlzID0ge307Cit2YXIgbm9ybWFsaXplV2hlZWxTcGVlZCA9IGZ1bmN0aW9uKGV2ZW50KXsKKwl2YXIgbm9ybWFsaXplZDsKKwlpZiAoZXZlbnQud2hlZWxEZWx0YSl7CisJCW5vcm1hbGl6ZWQgPSBldmVudC53aGVlbERlbHRhICUgMTIwID09IDAgPyBldmVudC53aGVlbERlbHRhIC8gMTIwIDogZXZlbnQud2hlZWxEZWx0YSAvIDEyOworCX0gZWxzZSB7CisJCXZhciByYXdBbW91bnQgPSBldmVudC5kZWx0YVkgfHwgZXZlbnQuZGV0YWlsIHx8IDA7CisJCW5vcm1hbGl6ZWQgPSAtKHJhd0Ftb3VudCAlIDMgPT0gMCA/IHJhd0Ftb3VudCAvIDMgOiByYXdBbW91bnQgKiAxMCk7CisJfQorCXJldHVybiBub3JtYWxpemVkOworfTsKKwordmFyIERPTUV2ZW50ID0gdGhpcy5ET01FdmVudCA9IG5ldyBUeXBlKCdET01FdmVudCcsIGZ1bmN0aW9uKGV2ZW50LCB3aW4peworCWlmICghd2luKSB3aW4gPSB3aW5kb3c7CisJZXZlbnQgPSBldmVudCB8fCB3aW4uZXZlbnQ7CisJaWYgKGV2ZW50LiRleHRlbmRlZCkgcmV0dXJuIGV2ZW50OworCXRoaXMuZXZlbnQgPSBldmVudDsKKwl0aGlzLiRleHRlbmRlZCA9IHRydWU7CisJdGhpcy5zaGlmdCA9IGV2ZW50LnNoaWZ0S2V5OworCXRoaXMuY29udHJvbCA9IGV2ZW50LmN0cmxLZXk7CisJdGhpcy5hbHQgPSBldmVudC5hbHRLZXk7CisJdGhpcy5tZXRhID0gZXZlbnQubWV0YUtleTsKKwl2YXIgdHlwZSA9IHRoaXMudHlwZSA9IGV2ZW50LnR5cGU7CisJdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50OworCXdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0Lm5vZGVUeXBlID09IDMpIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlOworCXRoaXMudGFyZ2V0ID0gZG9jdW1lbnQuaWQodGFyZ2V0KTsKKworCWlmICh0eXBlLmluZGV4T2YoJ2tleScpID09IDApeworCQl2YXIgY29kZSA9IHRoaXMuY29kZSA9IChldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKTsKKwkJaWYgKCF0aGlzLnNoaWZ0IHx8IHR5cGUgIT0gJ2tleXByZXNzJykgdGhpcy5rZXkgPSBfa2V5c1tjb2RlXTsKKwkJaWYgKHR5cGUgPT0gJ2tleWRvd24nIHx8IHR5cGUgPT0gJ2tleXVwJyl7CisJCQlpZiAoY29kZSA+IDExMSAmJiBjb2RlIDwgMTI0KSB0aGlzLmtleSA9ICdmJyArIChjb2RlIC0gMTExKTsKKwkJCWVsc2UgaWYgKGNvZGUgPiA5NSAmJiBjb2RlIDwgMTA2KSB0aGlzLmtleSA9IGNvZGUgLSA5NjsKKwkJfQorCQlpZiAodGhpcy5rZXkgPT0gbnVsbCkgdGhpcy5rZXkgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLnRvTG93ZXJDYXNlKCk7CisJfSBlbHNlIGlmICh0eXBlID09ICdjbGljaycgfHwgdHlwZSA9PSAnZGJsY2xpY2snIHx8IHR5cGUgPT0gJ2NvbnRleHRtZW51JyB8fCB0eXBlID09ICd3aGVlbCcgfHwgdHlwZSA9PSAnRE9NTW91c2VTY3JvbGwnIHx8IHR5cGUuaW5kZXhPZignbW91c2UnKSA9PSAwKXsKKwkJdmFyIGRvYyA9IHdpbi5kb2N1bWVudDsKKwkJZG9jID0gKCFkb2MuY29tcGF0TW9kZSB8fCBkb2MuY29tcGF0TW9kZSA9PSAnQ1NTMUNvbXBhdCcpID8gZG9jLmh0bWwgOiBkb2MuYm9keTsKKwkJdGhpcy5wYWdlID0geworCQkJeDogKGV2ZW50LnBhZ2VYICE9IG51bGwpID8gZXZlbnQucGFnZVggOiBldmVudC5jbGllbnRYICsgZG9jLnNjcm9sbExlZnQsCisJCQl5OiAoZXZlbnQucGFnZVkgIT0gbnVsbCkgPyBldmVudC5wYWdlWSA6IGV2ZW50LmNsaWVudFkgKyBkb2Muc2Nyb2xsVG9wCisJCX07CisJCXRoaXMuY2xpZW50ID0geworCQkJeDogKGV2ZW50LnBhZ2VYICE9IG51bGwpID8gZXZlbnQucGFnZVggLSB3aW4ucGFnZVhPZmZzZXQgOiBldmVudC5jbGllbnRYLAorCQkJeTogKGV2ZW50LnBhZ2VZICE9IG51bGwpID8gZXZlbnQucGFnZVkgLSB3aW4ucGFnZVlPZmZzZXQgOiBldmVudC5jbGllbnRZCisJCX07CisJCWlmICh0eXBlID09ICdET01Nb3VzZVNjcm9sbCcgfHwgdHlwZSA9PSAnd2hlZWwnIHx8IHR5cGUgPT0gJ21vdXNld2hlZWwnKSB0aGlzLndoZWVsID0gbm9ybWFsaXplV2hlZWxTcGVlZChldmVudCk7CisJCXRoaXMucmlnaHRDbGljayA9IChldmVudC53aGljaCA9PSAzIHx8IGV2ZW50LmJ1dHRvbiA9PSAyKTsKKwkJaWYgKHR5cGUgPT0gJ21vdXNlb3ZlcicgfHwgdHlwZSA9PSAnbW91c2VvdXQnIHx8IHR5cGUgPT0gJ21vdXNlZW50ZXInIHx8IHR5cGUgPT0gJ21vdXNlbGVhdmUnKXsKKwkJCXZhciBvdmVyVGFyZ2V0ID0gdHlwZSA9PSAnbW91c2VvdmVyJyB8fCB0eXBlID09ICdtb3VzZWVudGVyJzsKKwkJCXZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCB8fCBldmVudFsob3ZlclRhcmdldCA/ICdmcm9tJyA6ICd0bycpICsgJ0VsZW1lbnQnXTsKKwkJCXdoaWxlIChyZWxhdGVkICYmIHJlbGF0ZWQubm9kZVR5cGUgPT0gMykgcmVsYXRlZCA9IHJlbGF0ZWQucGFyZW50Tm9kZTsKKwkJCXRoaXMucmVsYXRlZFRhcmdldCA9IGRvY3VtZW50LmlkKHJlbGF0ZWQpOworCQl9CisJfSBlbHNlIGlmICh0eXBlLmluZGV4T2YoJ3RvdWNoJykgPT0gMCB8fCB0eXBlLmluZGV4T2YoJ2dlc3R1cmUnKSA9PSAwKXsKKwkJdGhpcy5yb3RhdGlvbiA9IGV2ZW50LnJvdGF0aW9uOworCQl0aGlzLnNjYWxlID0gZXZlbnQuc2NhbGU7CisJCXRoaXMudGFyZ2V0VG91Y2hlcyA9IGV2ZW50LnRhcmdldFRvdWNoZXM7CisJCXRoaXMuY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlczsKKwkJdmFyIHRvdWNoZXMgPSB0aGlzLnRvdWNoZXMgPSBldmVudC50b3VjaGVzOworCQlpZiAodG91Y2hlcyAmJiB0b3VjaGVzWzBdKXsKKwkJCXZhciB0b3VjaCA9IHRvdWNoZXNbMF07CisJCQl0aGlzLnBhZ2UgPSB7eDogdG91Y2gucGFnZVgsIHk6IHRvdWNoLnBhZ2VZfTsKKwkJCXRoaXMuY2xpZW50ID0ge3g6IHRvdWNoLmNsaWVudFgsIHk6IHRvdWNoLmNsaWVudFl9OworCQl9CisJfQorCisJaWYgKCF0aGlzLmNsaWVudCkgdGhpcy5jbGllbnQgPSB7fTsKKwlpZiAoIXRoaXMucGFnZSkgdGhpcy5wYWdlID0ge307Cit9KTsKKworRE9NRXZlbnQuaW1wbGVtZW50KHsKKworCXN0b3A6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLnByZXZlbnREZWZhdWx0KCkuc3RvcFByb3BhZ2F0aW9uKCk7CisJfSwKKworCXN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworCQllbHNlIHRoaXMuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpeworCQlpZiAodGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCkgdGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpOworCQllbHNlIHRoaXMuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKworRE9NRXZlbnQuZGVmaW5lS2V5ID0gZnVuY3Rpb24oY29kZSwga2V5KXsKKwlfa2V5c1tjb2RlXSA9IGtleTsKKwlyZXR1cm4gdGhpczsKK307CisKK0RPTUV2ZW50LmRlZmluZUtleXMgPSBET01FdmVudC5kZWZpbmVLZXkub3ZlcmxvYWRTZXR0ZXIodHJ1ZSk7CisKK0RPTUV2ZW50LmRlZmluZUtleXMoeworCSczOCc6ICd1cCcsICc0MCc6ICdkb3duJywgJzM3JzogJ2xlZnQnLCAnMzknOiAncmlnaHQnLAorCScyNyc6ICdlc2MnLCAnMzInOiAnc3BhY2UnLCAnOCc6ICdiYWNrc3BhY2UnLCAnOSc6ICd0YWInLAorCSc0Nic6ICdkZWxldGUnLCAnMTMnOiAnZW50ZXInCit9KTsKKworfSkoKTsKKworCisKKworCisvKgorLS0tCisKK25hbWU6IEVsZW1lbnQuRXZlbnQKKworZGVzY3JpcHRpb246IENvbnRhaW5zIEVsZW1lbnQgbWV0aG9kcyBmb3IgZGVhbGluZyB3aXRoIGV2ZW50cy4gVGhpcyBmaWxlIGFsc28gaW5jbHVkZXMgbW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBjdXN0b20gRWxlbWVudCBFdmVudHMsIGlmIG5lY2Vzc2FyeS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuCisKK3JlcXVpcmVzOiBbRWxlbWVudCwgRXZlbnRdCisKK3Byb3ZpZGVzOiBFbGVtZW50LkV2ZW50CisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK0VsZW1lbnQuUHJvcGVydGllcy5ldmVudHMgPSB7c2V0OiBmdW5jdGlvbihldmVudHMpeworCXRoaXMuYWRkRXZlbnRzKGV2ZW50cyk7Cit9fTsKKworW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1wbGVtZW50JywgeworCisJYWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXsKKwkJdmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycsIHt9KTsKKwkJaWYgKCFldmVudHNbdHlwZV0pIGV2ZW50c1t0eXBlXSA9IHtrZXlzOiBbXSwgdmFsdWVzOiBbXX07CisJCWlmIChldmVudHNbdHlwZV0ua2V5cy5jb250YWlucyhmbikpIHJldHVybiB0aGlzOworCQlldmVudHNbdHlwZV0ua2V5cy5wdXNoKGZuKTsKKwkJdmFyIHJlYWxUeXBlID0gdHlwZSwKKwkJCWN1c3RvbSA9IEVsZW1lbnQuRXZlbnRzW3R5cGVdLAorCQkJY29uZGl0aW9uID0gZm4sCisJCQlzZWxmID0gdGhpczsKKwkJaWYgKGN1c3RvbSl7CisJCQlpZiAoY3VzdG9tLm9uQWRkKSBjdXN0b20ub25BZGQuY2FsbCh0aGlzLCBmbiwgdHlwZSk7CisJCQlpZiAoY3VzdG9tLmNvbmRpdGlvbil7CisJCQkJY29uZGl0aW9uID0gZnVuY3Rpb24oZXZlbnQpeworCQkJCQlpZiAoY3VzdG9tLmNvbmRpdGlvbi5jYWxsKHRoaXMsIGV2ZW50LCB0eXBlKSkgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQpOworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9OworCQkJfQorCQkJaWYgKGN1c3RvbS5iYXNlKSByZWFsVHlwZSA9IEZ1bmN0aW9uLmNvbnZlcnQoY3VzdG9tLmJhc2UpLmNhbGwodGhpcywgdHlwZSk7CisJCX0KKwkJdmFyIGRlZm4gPSBmdW5jdGlvbigpeworCQkJcmV0dXJuIGZuLmNhbGwoc2VsZik7CisJCX07CisJCXZhciBuYXRpdmVFdmVudCA9IEVsZW1lbnQuTmF0aXZlRXZlbnRzW3JlYWxUeXBlXTsKKwkJaWYgKG5hdGl2ZUV2ZW50KXsKKwkJCWlmIChuYXRpdmVFdmVudCA9PSAyKXsKKwkJCQlkZWZuID0gZnVuY3Rpb24oZXZlbnQpeworCQkJCQlldmVudCA9IG5ldyBET01FdmVudChldmVudCwgc2VsZi5nZXRXaW5kb3coKSk7CisJCQkJCWlmIChjb25kaXRpb24uY2FsbChzZWxmLCBldmVudCkgPT09IGZhbHNlKSBldmVudC5zdG9wKCk7CisJCQkJfTsKKwkJCX0KKwkJCXRoaXMuYWRkTGlzdGVuZXIocmVhbFR5cGUsIGRlZm4sIGFyZ3VtZW50c1syXSk7CisJCX0KKwkJZXZlbnRzW3R5cGVdLnZhbHVlcy5wdXNoKGRlZm4pOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXsKKwkJdmFyIGV2ZW50cyA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycpOworCQlpZiAoIWV2ZW50cyB8fCAhZXZlbnRzW3R5cGVdKSByZXR1cm4gdGhpczsKKwkJdmFyIGxpc3QgPSBldmVudHNbdHlwZV07CisJCXZhciBpbmRleCA9IGxpc3Qua2V5cy5pbmRleE9mKGZuKTsKKwkJaWYgKGluZGV4ID09IC0xKSByZXR1cm4gdGhpczsKKwkJdmFyIHZhbHVlID0gbGlzdC52YWx1ZXNbaW5kZXhdOworCQlkZWxldGUgbGlzdC5rZXlzW2luZGV4XTsKKwkJZGVsZXRlIGxpc3QudmFsdWVzW2luZGV4XTsKKwkJdmFyIGN1c3RvbSA9IEVsZW1lbnQuRXZlbnRzW3R5cGVdOworCQlpZiAoY3VzdG9tKXsKKwkJCWlmIChjdXN0b20ub25SZW1vdmUpIGN1c3RvbS5vblJlbW92ZS5jYWxsKHRoaXMsIGZuLCB0eXBlKTsKKwkJCWlmIChjdXN0b20uYmFzZSkgdHlwZSA9IEZ1bmN0aW9uLmNvbnZlcnQoY3VzdG9tLmJhc2UpLmNhbGwodGhpcywgdHlwZSk7CisJCX0KKwkJcmV0dXJuIChFbGVtZW50Lk5hdGl2ZUV2ZW50c1t0eXBlXSkgPyB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIHZhbHVlLCBhcmd1bWVudHNbMl0pIDogdGhpczsKKwl9LAorCisJYWRkRXZlbnRzOiBmdW5jdGlvbihldmVudHMpeworCQlmb3IgKHZhciBldmVudCBpbiBldmVudHMpIHRoaXMuYWRkRXZlbnQoZXZlbnQsIGV2ZW50c1tldmVudF0pOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbihldmVudHMpeworCQl2YXIgdHlwZTsKKwkJaWYgKHR5cGVPZihldmVudHMpID09ICdvYmplY3QnKXsKKwkJCWZvciAodHlwZSBpbiBldmVudHMpIHRoaXMucmVtb3ZlRXZlbnQodHlwZSwgZXZlbnRzW3R5cGVdKTsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCXZhciBhdHRhY2hlZCA9IHRoaXMucmV0cmlldmUoJ2V2ZW50cycpOworCQlpZiAoIWF0dGFjaGVkKSByZXR1cm4gdGhpczsKKwkJaWYgKCFldmVudHMpeworCQkJZm9yICh0eXBlIGluIGF0dGFjaGVkKSB0aGlzLnJlbW92ZUV2ZW50cyh0eXBlKTsKKwkJCXRoaXMuZWxpbWluYXRlKCdldmVudHMnKTsKKwkJfSBlbHNlIGlmIChhdHRhY2hlZFtldmVudHNdKXsKKwkJCWF0dGFjaGVkW2V2ZW50c10ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXsKKwkJCQl0aGlzLnJlbW92ZUV2ZW50KGV2ZW50cywgZm4pOworCQkJfSwgdGhpcyk7CisJCQlkZWxldGUgYXR0YWNoZWRbZXZlbnRzXTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZmlyZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBhcmdzLCBkZWxheSl7CisJCXZhciBldmVudHMgPSB0aGlzLnJldHJpZXZlKCdldmVudHMnKTsKKwkJaWYgKCFldmVudHMgfHwgIWV2ZW50c1t0eXBlXSkgcmV0dXJuIHRoaXM7CisJCWFyZ3MgPSBBcnJheS5jb252ZXJ0KGFyZ3MpOworCisJCWV2ZW50c1t0eXBlXS5rZXlzLmVhY2goZnVuY3Rpb24oZm4peworCQkJaWYgKGRlbGF5KSBmbi5kZWxheShkZWxheSwgdGhpcywgYXJncyk7CisJCQllbHNlIGZuLmFwcGx5KHRoaXMsIGFyZ3MpOworCQl9LCB0aGlzKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWNsb25lRXZlbnRzOiBmdW5jdGlvbihmcm9tLCB0eXBlKXsKKwkJZnJvbSA9IGRvY3VtZW50LmlkKGZyb20pOworCQl2YXIgZXZlbnRzID0gZnJvbS5yZXRyaWV2ZSgnZXZlbnRzJyk7CisJCWlmICghZXZlbnRzKSByZXR1cm4gdGhpczsKKwkJaWYgKCF0eXBlKXsKKwkJCWZvciAodmFyIGV2ZW50VHlwZSBpbiBldmVudHMpIHRoaXMuY2xvbmVFdmVudHMoZnJvbSwgZXZlbnRUeXBlKTsKKwkJfSBlbHNlIGlmIChldmVudHNbdHlwZV0peworCQkJZXZlbnRzW3R5cGVdLmtleXMuZWFjaChmdW5jdGlvbihmbil7CisJCQkJdGhpcy5hZGRFdmVudCh0eXBlLCBmbik7CisJCQl9LCB0aGlzKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCitFbGVtZW50Lk5hdGl2ZUV2ZW50cyA9IHsKKwljbGljazogMiwgZGJsY2xpY2s6IDIsIG1vdXNldXA6IDIsIG1vdXNlZG93bjogMiwgY29udGV4dG1lbnU6IDIsIC8vbW91c2UgYnV0dG9ucworCXdoZWVsOiAyLCBtb3VzZXdoZWVsOiAyLCBET01Nb3VzZVNjcm9sbDogMiwgLy9tb3VzZSB3aGVlbAorCW1vdXNlb3ZlcjogMiwgbW91c2VvdXQ6IDIsIG1vdXNlbW92ZTogMiwgc2VsZWN0c3RhcnQ6IDIsIHNlbGVjdGVuZDogMiwgLy9tb3VzZSBtb3ZlbWVudAorCWtleWRvd246IDIsIGtleXByZXNzOiAyLCBrZXl1cDogMiwgLy9rZXlib2FyZAorCW9yaWVudGF0aW9uY2hhbmdlOiAyLCAvLyBtb2JpbGUKKwl0b3VjaHN0YXJ0OiAyLCB0b3VjaG1vdmU6IDIsIHRvdWNoZW5kOiAyLCB0b3VjaGNhbmNlbDogMiwgLy8gdG91Y2gKKwlnZXN0dXJlc3RhcnQ6IDIsIGdlc3R1cmVjaGFuZ2U6IDIsIGdlc3R1cmVlbmQ6IDIsIC8vIGdlc3R1cmUKKwlmb2N1czogMiwgYmx1cjogMiwgY2hhbmdlOiAyLCByZXNldDogMiwgc2VsZWN0OiAyLCBzdWJtaXQ6IDIsIHBhc3RlOiAyLCBpbnB1dDogMiwgLy9mb3JtIGVsZW1lbnRzCisJbG9hZDogMiwgdW5sb2FkOiAxLCBiZWZvcmV1bmxvYWQ6IDIsIHJlc2l6ZTogMSwgbW92ZTogMSwgRE9NQ29udGVudExvYWRlZDogMSwgcmVhZHlzdGF0ZWNoYW5nZTogMSwgLy93aW5kb3cKKwloYXNoY2hhbmdlOiAxLCBwb3BzdGF0ZTogMiwgcGFnZXNob3c6IDIsIHBhZ2VoaWRlOiAyLCAvLyBoaXN0b3J5CisJZXJyb3I6IDEsIGFib3J0OiAxLCBzY3JvbGw6IDEsIG1lc3NhZ2U6IDIgLy9taXNjCit9OworCitFbGVtZW50LkV2ZW50cyA9IHsKKwltb3VzZXdoZWVsOiB7CisJCWJhc2U6ICdvbndoZWVsJyBpbiBkb2N1bWVudCA/ICd3aGVlbCcgOiAnb25tb3VzZXdoZWVsJyBpbiBkb2N1bWVudCA/ICdtb3VzZXdoZWVsJyA6ICdET01Nb3VzZVNjcm9sbCcKKwl9Cit9OworCit2YXIgY2hlY2sgPSBmdW5jdGlvbihldmVudCl7CisJdmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0OworCWlmIChyZWxhdGVkID09IG51bGwpIHJldHVybiB0cnVlOworCWlmICghcmVsYXRlZCkgcmV0dXJuIGZhbHNlOworCXJldHVybiAocmVsYXRlZCAhPSB0aGlzICYmIHJlbGF0ZWQucHJlZml4ICE9ICd4dWwnICYmIHR5cGVPZih0aGlzKSAhPSAnZG9jdW1lbnQnICYmICF0aGlzLmNvbnRhaW5zKHJlbGF0ZWQpKTsKK307CisKK2lmICgnb25tb3VzZWVudGVyJyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpeworCUVsZW1lbnQuTmF0aXZlRXZlbnRzLm1vdXNlZW50ZXIgPSBFbGVtZW50Lk5hdGl2ZUV2ZW50cy5tb3VzZWxlYXZlID0gMjsKKwlFbGVtZW50Lk1vdXNlZW50ZXJDaGVjayA9IGNoZWNrOworfSBlbHNlIHsKKwlFbGVtZW50LkV2ZW50cy5tb3VzZWVudGVyID0geworCQliYXNlOiAnbW91c2VvdmVyJywKKwkJY29uZGl0aW9uOiBjaGVjaworCX07CisKKwlFbGVtZW50LkV2ZW50cy5tb3VzZWxlYXZlID0geworCQliYXNlOiAnbW91c2VvdXQnLAorCQljb25kaXRpb246IGNoZWNrCisJfTsKK30KKworLyo8bHRJRTk+Ki8KK2lmICghd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpeworCUVsZW1lbnQuTmF0aXZlRXZlbnRzLnByb3BlcnR5Y2hhbmdlID0gMjsKKwlFbGVtZW50LkV2ZW50cy5jaGFuZ2UgPSB7CisJCWJhc2U6IGZ1bmN0aW9uKCl7CisJCQl2YXIgdHlwZSA9IHRoaXMudHlwZTsKKwkJCXJldHVybiAodGhpcy5nZXQoJ3RhZycpID09ICdpbnB1dCcgJiYgKHR5cGUgPT0gJ3JhZGlvJyB8fCB0eXBlID09ICdjaGVja2JveCcpKSA/ICdwcm9wZXJ0eWNoYW5nZScgOiAnY2hhbmdlJzsKKwkJfSwKKwkJY29uZGl0aW9uOiBmdW5jdGlvbihldmVudCl7CisJCQlyZXR1cm4gZXZlbnQudHlwZSAhPSAncHJvcGVydHljaGFuZ2UnIHx8IGV2ZW50LmV2ZW50LnByb3BlcnR5TmFtZSA9PSAnY2hlY2tlZCc7CisJCX0KKwl9OworfQorLyo8L2x0SUU5PiovCisKKworCit9KSgpOworCisvKgorLS0tCisKK25hbWU6IEVsZW1lbnQuRGVsZWdhdGlvbgorCitkZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgRWxlbWVudCBuYXRpdmUgb2JqZWN0IHRvIGluY2x1ZGUgdGhlIGRlbGVnYXRlIG1ldGhvZCBmb3IgbW9yZSBlZmZpY2llbnQgZXZlbnQgbWFuYWdlbWVudC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuCisKK3JlcXVpcmVzOiBbRWxlbWVudC5FdmVudF0KKworcHJvdmlkZXM6IFtFbGVtZW50LkRlbGVnYXRpb25dCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK3ZhciBldmVudExpc3RlbmVyU3VwcG9ydCA9ICEhd2luZG93LmFkZEV2ZW50TGlzdGVuZXI7CisKK0VsZW1lbnQuTmF0aXZlRXZlbnRzLmZvY3VzaW4gPSBFbGVtZW50Lk5hdGl2ZUV2ZW50cy5mb2N1c291dCA9IDI7CisKK3ZhciBidWJibGVVcCA9IGZ1bmN0aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCl7CisJd2hpbGUgKHRhcmdldCAmJiB0YXJnZXQgIT0gc2VsZil7CisJCWlmIChtYXRjaCh0YXJnZXQsIGV2ZW50KSkgcmV0dXJuIGZuLmNhbGwodGFyZ2V0LCBldmVudCwgdGFyZ2V0KTsKKwkJdGFyZ2V0ID0gZG9jdW1lbnQuaWQodGFyZ2V0LnBhcmVudE5vZGUpOworCX0KK307CisKK3ZhciBtYXAgPSB7CisJbW91c2VlbnRlcjogeworCQliYXNlOiAnbW91c2VvdmVyJywKKwkJY29uZGl0aW9uOiBFbGVtZW50Lk1vdXNlZW50ZXJDaGVjaworCX0sCisJbW91c2VsZWF2ZTogeworCQliYXNlOiAnbW91c2VvdXQnLAorCQljb25kaXRpb246IEVsZW1lbnQuTW91c2VlbnRlckNoZWNrCisJfSwKKwlmb2N1czogeworCQliYXNlOiAnZm9jdXMnICsgKGV2ZW50TGlzdGVuZXJTdXBwb3J0ID8gJycgOiAnaW4nKSwKKwkJY2FwdHVyZTogdHJ1ZQorCX0sCisJYmx1cjogeworCQliYXNlOiBldmVudExpc3RlbmVyU3VwcG9ydCA/ICdibHVyJyA6ICdmb2N1c291dCcsCisJCWNhcHR1cmU6IHRydWUKKwl9Cit9OworCisvKjxsdElFOT4qLwordmFyIF9rZXkgPSAnJGRlbGVnYXRpb246JzsKK3ZhciBmb3JtT2JzZXJ2ZXIgPSBmdW5jdGlvbih0eXBlKXsKKworCXJldHVybiB7CisKKwkJYmFzZTogJ2ZvY3VzaW4nLAorCisJCXJlbW92ZTogZnVuY3Rpb24oc2VsZiwgdWlkKXsKKwkJCXZhciBsaXN0ID0gc2VsZi5yZXRyaWV2ZShfa2V5ICsgdHlwZSArICdsaXN0ZW5lcnMnLCB7fSlbdWlkXTsKKwkJCWlmIChsaXN0ICYmIGxpc3QuZm9ybXMpIGZvciAodmFyIGkgPSBsaXN0LmZvcm1zLmxlbmd0aDsgaS0tOyl7CisJCQkJLy8gdGhlIGZvcm0gbWF5IGhhdmUgYmVlbiBkZXN0cm95ZWQsIHNvIGl0IHdvbid0IGhhdmUgdGhlCisJCQkJLy8gcmVtb3ZlRXZlbnQgbWV0aG9kIGFueW1vcmUuIEluIHRoYXQgY2FzZSB0aGUgZXZlbnQgd2FzCisJCQkJLy8gcmVtb3ZlZCBhcyB3ZWxsLgorCQkJCWlmIChsaXN0LmZvcm1zW2ldLnJlbW92ZUV2ZW50KSBsaXN0LmZvcm1zW2ldLnJlbW92ZUV2ZW50KHR5cGUsIGxpc3QuZm5zW2ldKTsKKwkJCX0KKwkJfSwKKworCQlsaXN0ZW46IGZ1bmN0aW9uKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCwgdWlkKXsKKwkJCXZhciBmb3JtID0gKHRhcmdldC5nZXQoJ3RhZycpID09ICdmb3JtJykgPyB0YXJnZXQgOiBldmVudC50YXJnZXQuZ2V0UGFyZW50KCdmb3JtJyk7CisJCQlpZiAoIWZvcm0pIHJldHVybjsKKworCQkJdmFyIGxpc3RlbmVycyA9IHNlbGYucmV0cmlldmUoX2tleSArIHR5cGUgKyAnbGlzdGVuZXJzJywge30pLAorCQkJCWxpc3RlbmVyID0gbGlzdGVuZXJzW3VpZF0gfHwge2Zvcm1zOiBbXSwgZm5zOiBbXX0sCisJCQkJZm9ybXMgPSBsaXN0ZW5lci5mb3JtcywgZm5zID0gbGlzdGVuZXIuZm5zOworCisJCQlpZiAoZm9ybXMuaW5kZXhPZihmb3JtKSAhPSAtMSkgcmV0dXJuOworCQkJZm9ybXMucHVzaChmb3JtKTsKKworCQkJdmFyIF9mbiA9IGZ1bmN0aW9uKGV2ZW50KXsKKwkJCQlidWJibGVVcChzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpOworCQkJfTsKKwkJCWZvcm0uYWRkRXZlbnQodHlwZSwgX2ZuKTsKKwkJCWZucy5wdXNoKF9mbik7CisKKwkJCWxpc3RlbmVyc1t1aWRdID0gbGlzdGVuZXI7CisJCQlzZWxmLnN0b3JlKF9rZXkgKyB0eXBlICsgJ2xpc3RlbmVycycsIGxpc3RlbmVycyk7CisJCX0KKwl9OworfTsKKwordmFyIGlucHV0T2JzZXJ2ZXIgPSBmdW5jdGlvbih0eXBlKXsKKwlyZXR1cm4geworCQliYXNlOiAnZm9jdXNpbicsCisJCWxpc3RlbjogZnVuY3Rpb24oc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KXsKKwkJCXZhciBldmVudHMgPSB7Ymx1cjogZnVuY3Rpb24oKXsKKwkJCQl0aGlzLnJlbW92ZUV2ZW50cyhldmVudHMpOworCQkJfX07CisJCQlldmVudHNbdHlwZV0gPSBmdW5jdGlvbihldmVudCl7CisJCQkJYnViYmxlVXAoc2VsZiwgbWF0Y2gsIGZuLCBldmVudCwgdGFyZ2V0KTsKKwkJCX07CisJCQlldmVudC50YXJnZXQuYWRkRXZlbnRzKGV2ZW50cyk7CisJCX0KKwl9OworfTsKKworaWYgKCFldmVudExpc3RlbmVyU3VwcG9ydCkgT2JqZWN0LmFwcGVuZChtYXAsIHsKKwlzdWJtaXQ6IGZvcm1PYnNlcnZlcignc3VibWl0JyksCisJcmVzZXQ6IGZvcm1PYnNlcnZlcigncmVzZXQnKSwKKwljaGFuZ2U6IGlucHV0T2JzZXJ2ZXIoJ2NoYW5nZScpLAorCXNlbGVjdDogaW5wdXRPYnNlcnZlcignc2VsZWN0JykKK30pOworLyo8L2x0SUU5PiovCisKK3ZhciBwcm90byA9IEVsZW1lbnQucHJvdG90eXBlLAorCWFkZEV2ZW50ID0gcHJvdG8uYWRkRXZlbnQsCisJcmVtb3ZlRXZlbnQgPSBwcm90by5yZW1vdmVFdmVudDsKKwordmFyIHJlbGF5ID0gZnVuY3Rpb24ob2xkLCBtZXRob2QpeworCXJldHVybiBmdW5jdGlvbih0eXBlLCBmbiwgdXNlQ2FwdHVyZSl7CisJCWlmICh0eXBlLmluZGV4T2YoJzpyZWxheScpID09IC0xKSByZXR1cm4gb2xkLmNhbGwodGhpcywgdHlwZSwgZm4sIHVzZUNhcHR1cmUpOworCQl2YXIgcGFyc2VkID0gU2xpY2sucGFyc2UodHlwZSkuZXhwcmVzc2lvbnNbMF1bMF07CisJCWlmIChwYXJzZWQucHNldWRvc1swXS5rZXkgIT0gJ3JlbGF5JykgcmV0dXJuIG9sZC5jYWxsKHRoaXMsIHR5cGUsIGZuLCB1c2VDYXB0dXJlKTsKKwkJdmFyIG5ld1R5cGUgPSBwYXJzZWQudGFnOworCQlwYXJzZWQucHNldWRvcy5zbGljZSgxKS5lYWNoKGZ1bmN0aW9uKHBzZXVkbyl7CisJCQluZXdUeXBlICs9ICc6JyArIHBzZXVkby5rZXkgKyAocHNldWRvLnZhbHVlID8gJygnICsgcHNldWRvLnZhbHVlICsgJyknIDogJycpOworCQl9KTsKKwkJb2xkLmNhbGwodGhpcywgdHlwZSwgZm4pOworCQlyZXR1cm4gbWV0aG9kLmNhbGwodGhpcywgbmV3VHlwZSwgcGFyc2VkLnBzZXVkb3NbMF0udmFsdWUsIGZuKTsKKwl9OworfTsKKwordmFyIGRlbGVnYXRpb24gPSB7CisKKwlhZGRFdmVudDogZnVuY3Rpb24odHlwZSwgbWF0Y2gsIGZuKXsKKwkJdmFyIHN0b3JhZ2UgPSB0aGlzLnJldHJpZXZlKCckZGVsZWdhdGVzJywge30pLCBzdG9yZWQgPSBzdG9yYWdlW3R5cGVdOworCQlpZiAoc3RvcmVkKSBmb3IgKHZhciBfdWlkIGluIHN0b3JlZCl7CisJCQlpZiAoc3RvcmVkW191aWRdLmZuID09IGZuICYmIHN0b3JlZFtfdWlkXS5tYXRjaCA9PSBtYXRjaCkgcmV0dXJuIHRoaXM7CisJCX0KKworCQl2YXIgX3R5cGUgPSB0eXBlLCBfbWF0Y2ggPSBtYXRjaCwgX2ZuID0gZm4sIF9tYXAgPSBtYXBbdHlwZV0gfHwge307CisJCXR5cGUgPSBfbWFwLmJhc2UgfHwgX3R5cGU7CisKKwkJbWF0Y2ggPSBmdW5jdGlvbih0YXJnZXQpeworCQkJcmV0dXJuIFNsaWNrLm1hdGNoKHRhcmdldCwgX21hdGNoKTsKKwkJfTsKKworCQl2YXIgZWxlbWVudEV2ZW50ID0gRWxlbWVudC5FdmVudHNbX3R5cGVdOworCQlpZiAoX21hcC5jb25kaXRpb24gfHwgZWxlbWVudEV2ZW50ICYmIGVsZW1lbnRFdmVudC5jb25kaXRpb24peworCQkJdmFyIF9fbWF0Y2ggPSBtYXRjaCwgY29uZGl0aW9uID0gX21hcC5jb25kaXRpb24gfHwgZWxlbWVudEV2ZW50LmNvbmRpdGlvbjsKKwkJCW1hdGNoID0gZnVuY3Rpb24odGFyZ2V0LCBldmVudCl7CisJCQkJcmV0dXJuIF9fbWF0Y2godGFyZ2V0LCBldmVudCkgJiYgY29uZGl0aW9uLmNhbGwodGFyZ2V0LCBldmVudCwgdHlwZSk7CisJCQl9OworCQl9CisKKwkJdmFyIHNlbGYgPSB0aGlzLCB1aWQgPSBTdHJpbmcudW5pcXVlSUQoKTsKKwkJdmFyIGRlbGVnYXRvciA9IF9tYXAubGlzdGVuID8gZnVuY3Rpb24oZXZlbnQsIHRhcmdldCl7CisJCQlpZiAoIXRhcmdldCAmJiBldmVudCAmJiBldmVudC50YXJnZXQpIHRhcmdldCA9IGV2ZW50LnRhcmdldDsKKwkJCWlmICh0YXJnZXQpIF9tYXAubGlzdGVuKHNlbGYsIG1hdGNoLCBmbiwgZXZlbnQsIHRhcmdldCwgdWlkKTsKKwkJfSA6IGZ1bmN0aW9uKGV2ZW50LCB0YXJnZXQpeworCQkJaWYgKCF0YXJnZXQgJiYgZXZlbnQgJiYgZXZlbnQudGFyZ2V0KSB0YXJnZXQgPSBldmVudC50YXJnZXQ7CisJCQlpZiAodGFyZ2V0KSBidWJibGVVcChzZWxmLCBtYXRjaCwgZm4sIGV2ZW50LCB0YXJnZXQpOworCQl9OworCisJCWlmICghc3RvcmVkKSBzdG9yZWQgPSB7fTsKKwkJc3RvcmVkW3VpZF0gPSB7CisJCQltYXRjaDogX21hdGNoLAorCQkJZm46IF9mbiwKKwkJCWRlbGVnYXRvcjogZGVsZWdhdG9yCisJCX07CisJCXN0b3JhZ2VbX3R5cGVdID0gc3RvcmVkOworCQlyZXR1cm4gYWRkRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBkZWxlZ2F0b3IsIF9tYXAuY2FwdHVyZSk7CisJfSwKKworCXJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBtYXRjaCwgZm4sIF91aWQpeworCQl2YXIgc3RvcmFnZSA9IHRoaXMucmV0cmlldmUoJyRkZWxlZ2F0ZXMnLCB7fSksIHN0b3JlZCA9IHN0b3JhZ2VbdHlwZV07CisJCWlmICghc3RvcmVkKSByZXR1cm4gdGhpczsKKworCQlpZiAoX3VpZCl7CisJCQl2YXIgX3R5cGUgPSB0eXBlLCBkZWxlZ2F0b3IgPSBzdG9yZWRbX3VpZF0uZGVsZWdhdG9yLCBfbWFwID0gbWFwW3R5cGVdIHx8IHt9OworCQkJdHlwZSA9IF9tYXAuYmFzZSB8fCBfdHlwZTsKKwkJCWlmIChfbWFwLnJlbW92ZSkgX21hcC5yZW1vdmUodGhpcywgX3VpZCk7CisJCQlkZWxldGUgc3RvcmVkW191aWRdOworCQkJc3RvcmFnZVtfdHlwZV0gPSBzdG9yZWQ7CisJCQlyZXR1cm4gcmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBkZWxlZ2F0b3IsIF9tYXAuY2FwdHVyZSk7CisJCX0KKworCQl2YXIgX191aWQsIHM7CisJCWlmIChmbikgZm9yIChfX3VpZCBpbiBzdG9yZWQpeworCQkJcyA9IHN0b3JlZFtfX3VpZF07CisJCQlpZiAocy5tYXRjaCA9PSBtYXRjaCAmJiBzLmZuID09IGZuKSByZXR1cm4gZGVsZWdhdGlvbi5yZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBmbiwgX191aWQpOworCQl9IGVsc2UgZm9yIChfX3VpZCBpbiBzdG9yZWQpeworCQkJcyA9IHN0b3JlZFtfX3VpZF07CisJCQlpZiAocy5tYXRjaCA9PSBtYXRjaCkgZGVsZWdhdGlvbi5yZW1vdmVFdmVudC5jYWxsKHRoaXMsIHR5cGUsIG1hdGNoLCBzLmZuLCBfX3VpZCk7CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfQorCit9OworCitbRWxlbWVudCwgV2luZG93LCBEb2N1bWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7CisJYWRkRXZlbnQ6IHJlbGF5KGFkZEV2ZW50LCBkZWxlZ2F0aW9uLmFkZEV2ZW50KSwKKwlyZW1vdmVFdmVudDogcmVsYXkocmVtb3ZlRXZlbnQsIGRlbGVnYXRpb24ucmVtb3ZlRXZlbnQpCit9KTsKKworfSkoKTsKKworLyoKKy0tLQorCituYW1lOiBFbGVtZW50LlN0eWxlCisKK2Rlc2NyaXB0aW9uOiBDb250YWlucyBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdHlsZXMgb2YgRWxlbWVudHMgaW4gYSBmYXNoaW9uYWJsZSB3YXkuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCityZXF1aXJlczogRWxlbWVudAorCitwcm92aWRlczogRWxlbWVudC5TdHlsZQorCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCit2YXIgaHRtbCA9IGRvY3VtZW50Lmh0bWwsIGVsOworCisvLzxsdElFOT4KKy8vIENoZWNrIGZvciBvbGRJRSwgd2hpY2ggZG9lcyBub3QgcmVtb3ZlIHN0eWxlcyB3aGVuIHRoZXkncmUgc2V0IHRvIG51bGwKK2VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CitlbC5zdHlsZS5jb2xvciA9ICdyZWQnOworZWwuc3R5bGUuY29sb3IgPSBudWxsOwordmFyIGRvZXNOb3RSZW1vdmVTdHlsZXMgPSBlbC5zdHlsZS5jb2xvciA9PSAncmVkJzsKKworLy8gY2hlY2sgZm9yIG9sZElFLCB3aGljaCByZXR1cm5zIGJvcmRlciogc2hvcnRoYW5kIHN0eWxlcyBpbiB0aGUgd3Jvbmcgb3JkZXIgKGNvbG9yLXdpZHRoLXN0eWxlIGluc3RlYWQgb2Ygd2lkdGgtc3R5bGUtY29sb3IpCit2YXIgYm9yZGVyID0gJzFweCBzb2xpZCAjMTIzYWJjJzsKK2VsLnN0eWxlLmJvcmRlciA9IGJvcmRlcjsKK3ZhciByZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciA9IGVsLnN0eWxlLmJvcmRlciAhPSBib3JkZXI7CitlbCA9IG51bGw7CisvLzwvbHRJRTk+CisKK3ZhciBoYXNHZXRDb21wdXRlZFN0eWxlID0gISF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSwKKwlzdXBwb3J0Qm9yZGVyUmFkaXVzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGUuYm9yZGVyUmFkaXVzICE9IG51bGw7CisKK0VsZW1lbnQuUHJvcGVydGllcy5zdHlsZXMgPSB7c2V0OiBmdW5jdGlvbihzdHlsZXMpeworCXRoaXMuc2V0U3R5bGVzKHN0eWxlcyk7Cit9fTsKKwordmFyIGhhc09wYWNpdHkgPSAoaHRtbC5zdHlsZS5vcGFjaXR5ICE9IG51bGwpLAorCWhhc0ZpbHRlciA9IChodG1sLnN0eWxlLmZpbHRlciAhPSBudWxsKSwKKwlyZUFscGhhID0gL2FscGhhXChvcGFjaXR5PShbXGQuXSspXCkvaTsKKwordmFyIHNldFZpc2liaWxpdHkgPSBmdW5jdGlvbihlbGVtZW50LCBvcGFjaXR5KXsKKwllbGVtZW50LnN0b3JlKCckb3BhY2l0eScsIG9wYWNpdHkpOworCWVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9IG9wYWNpdHkgPiAwIHx8IG9wYWNpdHkgPT0gbnVsbCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nOworfTsKKworLy88bHRJRTk+Cit2YXIgc2V0RmlsdGVyID0gZnVuY3Rpb24oZWxlbWVudCwgcmVnZXhwLCB2YWx1ZSl7CisJdmFyIHN0eWxlID0gZWxlbWVudC5zdHlsZSwKKwkJZmlsdGVyID0gc3R5bGUuZmlsdGVyIHx8IGVsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSgnZmlsdGVyJykgfHwgJyc7CisJc3R5bGUuZmlsdGVyID0gKHJlZ2V4cC50ZXN0KGZpbHRlcikgPyBmaWx0ZXIucmVwbGFjZShyZWdleHAsIHZhbHVlKSA6IGZpbHRlciArICcgJyArIHZhbHVlKS50cmltKCk7CisJaWYgKCFzdHlsZS5maWx0ZXIpIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnZmlsdGVyJyk7Cit9OworLy88L2x0SUU5PgorCit2YXIgc2V0T3BhY2l0eSA9IChoYXNPcGFjaXR5ID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7CisJZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gb3BhY2l0eTsKK30gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCwgb3BhY2l0eSl7CisJaWYgKCFlbGVtZW50LmN1cnJlbnRTdHlsZSB8fCAhZWxlbWVudC5jdXJyZW50U3R5bGUuaGFzTGF5b3V0KSBlbGVtZW50LnN0eWxlLnpvb20gPSAxOworCWlmIChvcGFjaXR5ID09IG51bGwgfHwgb3BhY2l0eSA9PSAxKXsKKwkJc2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICcnKTsKKwkJaWYgKG9wYWNpdHkgPT0gMSAmJiBnZXRPcGFjaXR5KGVsZW1lbnQpICE9IDEpIHNldEZpbHRlcihlbGVtZW50LCByZUFscGhhLCAnYWxwaGEob3BhY2l0eT0xMDApJyk7CisJfSBlbHNlIHsKKwkJc2V0RmlsdGVyKGVsZW1lbnQsIHJlQWxwaGEsICdhbHBoYShvcGFjaXR5PScgKyAob3BhY2l0eSAqIDEwMCkubGltaXQoMCwgMTAwKS5yb3VuZCgpICsgJyknKTsKKwl9Cit9IDogc2V0VmlzaWJpbGl0eSkpOworCit2YXIgZ2V0T3BhY2l0eSA9IChoYXNPcGFjaXR5ID8gZnVuY3Rpb24oZWxlbWVudCl7CisJdmFyIG9wYWNpdHkgPSBlbGVtZW50LnN0eWxlLm9wYWNpdHkgfHwgZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKCdvcGFjaXR5Jyk7CisJcmV0dXJuIChvcGFjaXR5ID09ICcnKSA/IDEgOiBvcGFjaXR5LnRvRmxvYXQoKTsKK30gOiAoaGFzRmlsdGVyID8gZnVuY3Rpb24oZWxlbWVudCl7CisJdmFyIGZpbHRlciA9IChlbGVtZW50LnN0eWxlLmZpbHRlciB8fCBlbGVtZW50LmdldENvbXB1dGVkU3R5bGUoJ2ZpbHRlcicpKSwKKwkJb3BhY2l0eTsKKwlpZiAoZmlsdGVyKSBvcGFjaXR5ID0gZmlsdGVyLm1hdGNoKHJlQWxwaGEpOworCXJldHVybiAob3BhY2l0eSA9PSBudWxsIHx8IGZpbHRlciA9PSBudWxsKSA/IDEgOiAob3BhY2l0eVsxXSAvIDEwMCk7Cit9IDogZnVuY3Rpb24oZWxlbWVudCl7CisJdmFyIG9wYWNpdHkgPSBlbGVtZW50LnJldHJpZXZlKCckb3BhY2l0eScpOworCWlmIChvcGFjaXR5ID09IG51bGwpIG9wYWNpdHkgPSAoZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID09ICdoaWRkZW4nID8gMCA6IDEpOworCXJldHVybiBvcGFjaXR5OworfSkpOworCit2YXIgZmxvYXROYW1lID0gKGh0bWwuc3R5bGUuY3NzRmxvYXQgPT0gbnVsbCkgPyAnc3R5bGVGbG9hdCcgOiAnY3NzRmxvYXQnLAorCW5hbWVkUG9zaXRpb25zID0ge2xlZnQ6ICcwJScsIHRvcDogJzAlJywgY2VudGVyOiAnNTAlJywgcmlnaHQ6ICcxMDAlJywgYm90dG9tOiAnMTAwJSd9LAorCWhhc0JhY2tncm91bmRQb3NpdGlvblhZID0gKGh0bWwuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uWCAhPSBudWxsKSwKKwlwcmVmaXhQYXR0ZXJuID0gL14tKG1zKS0vOworCit2YXIgY2FtZWxDYXNlID0gZnVuY3Rpb24ocHJvcGVydHkpeworCXJldHVybiBwcm9wZXJ0eS5yZXBsYWNlKHByZWZpeFBhdHRlcm4sICckMS0nKS5jYW1lbENhc2UoKTsKK307CisKKy8vPGx0SUU5PgordmFyIHJlbW92ZVN0eWxlID0gZnVuY3Rpb24oc3R5bGUsIHByb3BlcnR5KXsKKwlpZiAocHJvcGVydHkgPT0gJ2JhY2tncm91bmRQb3NpdGlvbicpeworCQlzdHlsZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHkgKyAnWCcpOworCQlwcm9wZXJ0eSArPSAnWSc7CisJfQorCXN0eWxlLnJlbW92ZUF0dHJpYnV0ZShwcm9wZXJ0eSk7Cit9OworLy88L2x0SUU5PgorCitFbGVtZW50LmltcGxlbWVudCh7CisKKwlnZXRDb21wdXRlZFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSl7CisJCWlmICghaGFzR2V0Q29tcHV0ZWRTdHlsZSAmJiB0aGlzLmN1cnJlbnRTdHlsZSkgcmV0dXJuIHRoaXMuY3VycmVudFN0eWxlW2NhbWVsQ2FzZShwcm9wZXJ0eSldOworCQl2YXIgZGVmYXVsdFZpZXcgPSBFbGVtZW50LmdldERvY3VtZW50KHRoaXMpLmRlZmF1bHRWaWV3LAorCQkJY29tcHV0ZWQgPSBkZWZhdWx0VmlldyA/IGRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcywgbnVsbCkgOiBudWxsOworCQlyZXR1cm4gKGNvbXB1dGVkKSA/IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoKHByb3BlcnR5ID09IGZsb2F0TmFtZSkgPyAnZmxvYXQnIDogcHJvcGVydHkuaHlwaGVuYXRlKCkpIDogJyc7CisJfSwKKworCXNldFN0eWxlOiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFsdWUpeworCQlpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKXsKKwkJCWlmICh2YWx1ZSAhPSBudWxsKSB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpOworCQkJc2V0T3BhY2l0eSh0aGlzLCB2YWx1ZSk7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQlwcm9wZXJ0eSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSA9PSAnZmxvYXQnID8gZmxvYXROYW1lIDogcHJvcGVydHkpOworCQlpZiAodHlwZU9mKHZhbHVlKSAhPSAnc3RyaW5nJyl7CisJCQl2YXIgbWFwID0gKEVsZW1lbnQuU3R5bGVzW3Byb3BlcnR5XSB8fCAnQCcpLnNwbGl0KCcgJyk7CisJCQl2YWx1ZSA9IEFycmF5LmNvbnZlcnQodmFsdWUpLm1hcChmdW5jdGlvbih2YWwsIGkpeworCQkJCWlmICghbWFwW2ldKSByZXR1cm4gJyc7CisJCQkJcmV0dXJuICh0eXBlT2YodmFsKSA9PSAnbnVtYmVyJykgPyBtYXBbaV0ucmVwbGFjZSgnQCcsIE1hdGgucm91bmQodmFsKSkgOiB2YWw7CisJCQl9KS5qb2luKCcgJyk7CisJCX0gZWxzZSBpZiAodmFsdWUgPT0gU3RyaW5nKE51bWJlcih2YWx1ZSkpKXsKKwkJCXZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSk7CisJCX0KKwkJdGhpcy5zdHlsZVtwcm9wZXJ0eV0gPSB2YWx1ZTsKKwkJLy88bHRJRTk+CisJCWlmICgodmFsdWUgPT0gJycgfHwgdmFsdWUgPT0gbnVsbCkgJiYgZG9lc05vdFJlbW92ZVN0eWxlcyAmJiB0aGlzLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSl7CisJCQlyZW1vdmVTdHlsZSh0aGlzLnN0eWxlLCBwcm9wZXJ0eSk7CisJCX0KKwkJLy88L2x0SUU5PgorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZ2V0U3R5bGU6IGZ1bmN0aW9uKHByb3BlcnR5KXsKKwkJaWYgKHByb3BlcnR5ID09ICdvcGFjaXR5JykgcmV0dXJuIGdldE9wYWNpdHkodGhpcyk7CisJCXByb3BlcnR5ID0gY2FtZWxDYXNlKHByb3BlcnR5ID09ICdmbG9hdCcgPyBmbG9hdE5hbWUgOiBwcm9wZXJ0eSk7CisJCWlmIChzdXBwb3J0Qm9yZGVyUmFkaXVzICYmIHByb3BlcnR5LmluZGV4T2YoJ2JvcmRlclJhZGl1cycpICE9IC0xKXsKKwkJCXJldHVybiBbJ2JvcmRlclRvcExlZnRSYWRpdXMnLCAnYm9yZGVyVG9wUmlnaHRSYWRpdXMnLCAnYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMnLCAnYm9yZGVyQm90dG9tTGVmdFJhZGl1cyddLm1hcChmdW5jdGlvbihjb3JuZXIpeworCQkJCXJldHVybiB0aGlzLnN0eWxlW2Nvcm5lcl0gfHwgJzBweCc7CisJCQl9LCB0aGlzKS5qb2luKCcgJyk7CisJCX0KKwkJdmFyIHJlc3VsdCA9IHRoaXMuc3R5bGVbcHJvcGVydHldOworCQlpZiAoIXJlc3VsdCB8fCBwcm9wZXJ0eSA9PSAnekluZGV4Jyl7CisJCQlpZiAoRWxlbWVudC5TaG9ydFN0eWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpeworCQkJCXJlc3VsdCA9IFtdOworCQkJCWZvciAodmFyIHMgaW4gRWxlbWVudC5TaG9ydFN0eWxlc1twcm9wZXJ0eV0pIHJlc3VsdC5wdXNoKHRoaXMuZ2V0U3R5bGUocykpOworCQkJCXJldHVybiByZXN1bHQuam9pbignICcpOworCQkJfQorCQkJcmVzdWx0ID0gdGhpcy5nZXRDb21wdXRlZFN0eWxlKHByb3BlcnR5KTsKKwkJfQorCQlpZiAoaGFzQmFja2dyb3VuZFBvc2l0aW9uWFkgJiYgL15iYWNrZ3JvdW5kUG9zaXRpb25bWFldPyQvLnRlc3QocHJvcGVydHkpKXsKKwkJCXJldHVybiByZXN1bHQucmVwbGFjZSgvKHRvcHxyaWdodHxib3R0b218bGVmdCkvZywgZnVuY3Rpb24ocG9zaXRpb24peworCQkJCXJldHVybiBuYW1lZFBvc2l0aW9uc1twb3NpdGlvbl07CisJCQl9KSB8fCAnMHB4JzsKKwkJfQorCQlpZiAoIXJlc3VsdCAmJiBwcm9wZXJ0eSA9PSAnYmFja2dyb3VuZFBvc2l0aW9uJykgcmV0dXJuICcwcHggMHB4JzsKKwkJaWYgKHJlc3VsdCl7CisJCQlyZXN1bHQgPSBTdHJpbmcocmVzdWx0KTsKKwkJCXZhciBjb2xvciA9IHJlc3VsdC5tYXRjaCgvcmdiYT9cKFtcZFxzLF0rXCkvKTsKKwkJCWlmIChjb2xvcikgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoY29sb3JbMF0sIGNvbG9yWzBdLnJnYlRvSGV4KCkpOworCQl9CisJCWlmICghaGFzR2V0Q29tcHV0ZWRTdHlsZSAmJiAhdGhpcy5zdHlsZVtwcm9wZXJ0eV0peworCQkJaWYgKCgvXihoZWlnaHR8d2lkdGgpJC8pLnRlc3QocHJvcGVydHkpICYmICEoL3B4JC8udGVzdChyZXN1bHQpKSl7CisJCQkJdmFyIHZhbHVlcyA9IChwcm9wZXJ0eSA9PSAnd2lkdGgnKSA/IFsnbGVmdCcsICdyaWdodCddIDogWyd0b3AnLCAnYm90dG9tJ10sIHNpemUgPSAwOworCQkJCXZhbHVlcy5lYWNoKGZ1bmN0aW9uKHZhbHVlKXsKKwkJCQkJc2l6ZSArPSB0aGlzLmdldFN0eWxlKCdib3JkZXItJyArIHZhbHVlICsgJy13aWR0aCcpLnRvSW50KCkgKyB0aGlzLmdldFN0eWxlKCdwYWRkaW5nLScgKyB2YWx1ZSkudG9JbnQoKTsKKwkJCQl9LCB0aGlzKTsKKwkJCQlyZXR1cm4gdGhpc1snb2Zmc2V0JyArIHByb3BlcnR5LmNhcGl0YWxpemUoKV0gLSBzaXplICsgJ3B4JzsKKwkJCX0KKwkJCWlmICgoL15ib3JkZXIoLispV2lkdGh8bWFyZ2lufHBhZGRpbmcvKS50ZXN0KHByb3BlcnR5KSAmJiBpc05hTihwYXJzZUZsb2F0KHJlc3VsdCkpKXsKKwkJCQlyZXR1cm4gJzBweCc7CisJCQl9CisJCX0KKwkJLy88bHRJRTk+CisJCWlmIChyZXR1cm5zQm9yZGVyc0luV3JvbmdPcmRlciAmJiAvXmJvcmRlcihUb3B8UmlnaHR8Qm90dG9tfExlZnQpPyQvLnRlc3QocHJvcGVydHkpICYmIC9eIy8udGVzdChyZXN1bHQpKXsKKwkJCXJldHVybiByZXN1bHQucmVwbGFjZSgvXiguKylccyguKylccyguKykkLywgJyQyICQzICQxJyk7CisJCX0KKwkJLy88L2x0SUU5PgorCisJCXJldHVybiByZXN1bHQ7CisJfSwKKworCXNldFN0eWxlczogZnVuY3Rpb24oc3R5bGVzKXsKKwkJZm9yICh2YXIgc3R5bGUgaW4gc3R5bGVzKSB0aGlzLnNldFN0eWxlKHN0eWxlLCBzdHlsZXNbc3R5bGVdKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWdldFN0eWxlczogZnVuY3Rpb24oKXsKKwkJdmFyIHJlc3VsdCA9IHt9OworCQlBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykuZWFjaChmdW5jdGlvbihrZXkpeworCQkJcmVzdWx0W2tleV0gPSB0aGlzLmdldFN0eWxlKGtleSk7CisJCX0sIHRoaXMpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworfSk7CisKK0VsZW1lbnQuU3R5bGVzID0geworCWxlZnQ6ICdAcHgnLCB0b3A6ICdAcHgnLCBib3R0b206ICdAcHgnLCByaWdodDogJ0BweCcsCisJd2lkdGg6ICdAcHgnLCBoZWlnaHQ6ICdAcHgnLCBtYXhXaWR0aDogJ0BweCcsIG1heEhlaWdodDogJ0BweCcsIG1pbldpZHRoOiAnQHB4JywgbWluSGVpZ2h0OiAnQHB4JywKKwliYWNrZ3JvdW5kQ29sb3I6ICdyZ2IoQCwgQCwgQCknLCBiYWNrZ3JvdW5kU2l6ZTogJ0BweCcsIGJhY2tncm91bmRQb3NpdGlvbjogJ0BweCBAcHgnLCBjb2xvcjogJ3JnYihALCBALCBAKScsCisJZm9udFNpemU6ICdAcHgnLCBsZXR0ZXJTcGFjaW5nOiAnQHB4JywgbGluZUhlaWdodDogJ0BweCcsIGNsaXA6ICdyZWN0KEBweCBAcHggQHB4IEBweCknLAorCW1hcmdpbjogJ0BweCBAcHggQHB4IEBweCcsIHBhZGRpbmc6ICdAcHggQHB4IEBweCBAcHgnLCBib3JkZXI6ICdAcHggQCByZ2IoQCwgQCwgQCkgQHB4IEAgcmdiKEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKScsCisJYm9yZGVyV2lkdGg6ICdAcHggQHB4IEBweCBAcHgnLCBib3JkZXJTdHlsZTogJ0AgQCBAIEAnLCBib3JkZXJDb2xvcjogJ3JnYihALCBALCBAKSByZ2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKScsCisJekluZGV4OiAnQCcsICd6b29tJzogJ0AnLCBmb250V2VpZ2h0OiAnQCcsIHRleHRJbmRlbnQ6ICdAcHgnLCBvcGFjaXR5OiAnQCcsIGJvcmRlclJhZGl1czogJ0BweCBAcHggQHB4IEBweCcKK307CisKKworCisKKworRWxlbWVudC5TaG9ydFN0eWxlcyA9IHttYXJnaW46IHt9LCBwYWRkaW5nOiB7fSwgYm9yZGVyOiB7fSwgYm9yZGVyV2lkdGg6IHt9LCBib3JkZXJTdHlsZToge30sIGJvcmRlckNvbG9yOiB7fX07CisKK1snVG9wJywgJ1JpZ2h0JywgJ0JvdHRvbScsICdMZWZ0J10uZWFjaChmdW5jdGlvbihkaXJlY3Rpb24peworCXZhciBTaG9ydCA9IEVsZW1lbnQuU2hvcnRTdHlsZXM7CisJdmFyIEFsbCA9IEVsZW1lbnQuU3R5bGVzOworCVsnbWFyZ2luJywgJ3BhZGRpbmcnXS5lYWNoKGZ1bmN0aW9uKHN0eWxlKXsKKwkJdmFyIHNkID0gc3R5bGUgKyBkaXJlY3Rpb247CisJCVNob3J0W3N0eWxlXVtzZF0gPSBBbGxbc2RdID0gJ0BweCc7CisJfSk7CisJdmFyIGJkID0gJ2JvcmRlcicgKyBkaXJlY3Rpb247CisJU2hvcnQuYm9yZGVyW2JkXSA9IEFsbFtiZF0gPSAnQHB4IEAgcmdiKEAsIEAsIEApJzsKKwl2YXIgYmR3ID0gYmQgKyAnV2lkdGgnLCBiZHMgPSBiZCArICdTdHlsZScsIGJkYyA9IGJkICsgJ0NvbG9yJzsKKwlTaG9ydFtiZF0gPSB7fTsKKwlTaG9ydC5ib3JkZXJXaWR0aFtiZHddID0gU2hvcnRbYmRdW2Jkd10gPSBBbGxbYmR3XSA9ICdAcHgnOworCVNob3J0LmJvcmRlclN0eWxlW2Jkc10gPSBTaG9ydFtiZF1bYmRzXSA9IEFsbFtiZHNdID0gJ0AnOworCVNob3J0LmJvcmRlckNvbG9yW2JkY10gPSBTaG9ydFtiZF1bYmRjXSA9IEFsbFtiZGNdID0gJ3JnYihALCBALCBAKSc7Cit9KTsKKworaWYgKGhhc0JhY2tncm91bmRQb3NpdGlvblhZKSBFbGVtZW50LlNob3J0U3R5bGVzLmJhY2tncm91bmRQb3NpdGlvbiA9IHtiYWNrZ3JvdW5kUG9zaXRpb25YOiAnQCcsIGJhY2tncm91bmRQb3NpdGlvblk6ICdAJ307Cit9KSgpOworCisvKgorLS0tCisKK25hbWU6IEVsZW1lbnQuRGltZW5zaW9ucworCitkZXNjcmlwdGlvbjogQ29udGFpbnMgbWV0aG9kcyB0byB3b3JrIHdpdGggc2l6ZSwgc2Nyb2xsLCBvciBwb3NpdGlvbmluZyBvZiBFbGVtZW50cyBhbmQgdGhlIHdpbmRvdyBvYmplY3QuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCitjcmVkaXRzOgorICAtIEVsZW1lbnQgcG9zaXRpb25pbmcgYmFzZWQgb24gdGhlIFtxb294ZG9vXShodHRwOi8vcW9veGRvby5vcmcvKSBjb2RlIGFuZCBzbWFydCBicm93c2VyIGZpeGVzLCBbTEdQTCBMaWNlbnNlXShodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sKS4KKyAgLSBWaWV3cG9ydCBkaW1lbnNpb25zIGJhc2VkIG9uIFtZVUldKGh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3l1aS8pIGNvZGUsIFtCU0QgTGljZW5zZV0oaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpL2xpY2Vuc2UuaHRtbCkuCisKK3JlcXVpcmVzOiBbRWxlbWVudCwgRWxlbWVudC5TdHlsZV0KKworcHJvdmlkZXM6IFtFbGVtZW50LkRpbWVuc2lvbnNdCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK3ZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksCisJY2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKK2VsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJzAnOworZWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Cit2YXIgYnJva2VuT2Zmc2V0UGFyZW50ID0gKGNoaWxkLm9mZnNldFBhcmVudCA9PT0gZWxlbWVudCk7CitlbGVtZW50ID0gY2hpbGQgPSBudWxsOworCit2YXIgaGVpZ2h0Q29tcG9uZW50cyA9IFsnaGVpZ2h0JywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ0JvdHRvbScsICdib3JkZXJUb3BXaWR0aCcsICdib3JkZXJCb3R0b21XaWR0aCddLAorCXdpZHRoQ29tcG9uZW50cyA9IFsnd2lkdGgnLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1JpZ2h0JywgJ2JvcmRlckxlZnRXaWR0aCcsICdib3JkZXJSaWdodFdpZHRoJ107CisKK3ZhciBzdmdDYWxjdWxhdGVTaXplID0gZnVuY3Rpb24oZWwpeworCisJdmFyIGdDUyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKSwKKwkJYm91bmRzID0ge3g6IDAsIHk6IDB9OworCisJaGVpZ2h0Q29tcG9uZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7CisJCWJvdW5kcy55ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10pOworCX0pOworCXdpZHRoQ29tcG9uZW50cy5lYWNoKGZ1bmN0aW9uKGNzcyl7CisJCWJvdW5kcy54ICs9IHBhcnNlRmxvYXQoZ0NTW2Nzc10pOworCX0pOworCXJldHVybiBib3VuZHM7Cit9OworCit2YXIgaXNPZmZzZXQgPSBmdW5jdGlvbihlbCl7CisJcmV0dXJuIHN0eWxlU3RyaW5nKGVsLCAncG9zaXRpb24nKSAhPSAnc3RhdGljJyB8fCBpc0JvZHkoZWwpOworfTsKKwordmFyIGlzT2Zmc2V0U3RhdGljID0gZnVuY3Rpb24oZWwpeworCXJldHVybiBpc09mZnNldChlbCkgfHwgKC9eKD86dGFibGV8dGR8dGgpJC9pKS50ZXN0KGVsLnRhZ05hbWUpOworfTsKKworRWxlbWVudC5pbXBsZW1lbnQoeworCisJc2Nyb2xsVG86IGZ1bmN0aW9uKHgsIHkpeworCQlpZiAoaXNCb2R5KHRoaXMpKXsKKwkJCXRoaXMuZ2V0V2luZG93KCkuc2Nyb2xsVG8oeCwgeSk7CisJCX0gZWxzZSB7CisJCQl0aGlzLnNjcm9sbExlZnQgPSB4OworCQkJdGhpcy5zY3JvbGxUb3AgPSB5OworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXRTaXplOiBmdW5jdGlvbigpeworCQlpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTaXplKCk7CisKKwkJLy88bHRJRTk+CisJCS8vIFRoaXMgaWYgY2xhdXNlIGlzIGJlY2F1c2UgSUU4LSBjYW5ub3QgY2FsY3VsYXRlIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvZiBlbGVtZW50cyB3aXRoIHZpc2liaWxpdHkgaGlkZGVuLgorCQlpZiAoIXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKSByZXR1cm4ge3g6IHRoaXMub2Zmc2V0V2lkdGgsIHk6IHRoaXMub2Zmc2V0SGVpZ2h0fTsKKwkJLy88L2x0SUU5PgorCisJCS8vIFRoaXMgc3ZnIHNlY3Rpb24gdW5kZXIsIGNhbGxpbmcgYHN2Z0NhbGN1bGF0ZVNpemUoKWAsIGNhbiBiZSByZW1vdmVkIHdoZW4gRkYgZml4ZWQgdGhlIHN2ZyBzaXplIGJ1Zy4KKwkJLy8gQnVnIGluZm86IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDk4NQorCQlpZiAodGhpcy5nZXQoJ3RhZycpID09ICdzdmcnKSByZXR1cm4gc3ZnQ2FsY3VsYXRlU2l6ZSh0aGlzKTsKKworCQl0cnkgeworCQkJdmFyIGJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisJCQlyZXR1cm4ge3g6IGJvdW5kcy53aWR0aCwgeTogYm91bmRzLmhlaWdodH07CisJCX0gY2F0Y2ggKGUpeworCQkJcmV0dXJuIHt4OiAwLCB5OiAwfTsKKwkJfQorCX0sCisKKwlnZXRTY3JvbGxTaXplOiBmdW5jdGlvbigpeworCQlpZiAoaXNCb2R5KHRoaXMpKSByZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTY3JvbGxTaXplKCk7CisJCXJldHVybiB7eDogdGhpcy5zY3JvbGxXaWR0aCwgeTogdGhpcy5zY3JvbGxIZWlnaHR9OworCX0sCisKKwlnZXRTY3JvbGw6IGZ1bmN0aW9uKCl7CisJCWlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdldFNjcm9sbCgpOworCQlyZXR1cm4ge3g6IHRoaXMuc2Nyb2xsTGVmdCwgeTogdGhpcy5zY3JvbGxUb3B9OworCX0sCisKKwlnZXRTY3JvbGxzOiBmdW5jdGlvbigpeworCQl2YXIgZWxlbWVudCA9IHRoaXMucGFyZW50Tm9kZSwgcG9zaXRpb24gPSB7eDogMCwgeTogMH07CisJCXdoaWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxlbWVudCkpeworCQkJcG9zaXRpb24ueCArPSBlbGVtZW50LnNjcm9sbExlZnQ7CisJCQlwb3NpdGlvbi55ICs9IGVsZW1lbnQuc2Nyb2xsVG9wOworCQkJZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTsKKwkJfQorCQlyZXR1cm4gcG9zaXRpb247CisJfSwKKworCWdldE9mZnNldFBhcmVudDogYnJva2VuT2Zmc2V0UGFyZW50ID8gZnVuY3Rpb24oKXsKKwkJdmFyIGVsZW1lbnQgPSB0aGlzOworCQlpZiAoaXNCb2R5KGVsZW1lbnQpIHx8IHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdmaXhlZCcpIHJldHVybiBudWxsOworCisJCXZhciBpc09mZnNldENoZWNrID0gKHN0eWxlU3RyaW5nKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdzdGF0aWMnKSA/IGlzT2Zmc2V0U3RhdGljIDogaXNPZmZzZXQ7CisJCXdoaWxlICgoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSkpeworCQkJaWYgKGlzT2Zmc2V0Q2hlY2soZWxlbWVudCkpIHJldHVybiBlbGVtZW50OworCQl9CisJCXJldHVybiBudWxsOworCX0gOiBmdW5jdGlvbigpeworCQl2YXIgZWxlbWVudCA9IHRoaXM7CisJCWlmIChpc0JvZHkoZWxlbWVudCkgfHwgc3R5bGVTdHJpbmcoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJykgcmV0dXJuIG51bGw7CisKKwkJdHJ5IHsKKwkJCXJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDsKKwkJfSBjYXRjaCAoZSl7fQorCQlyZXR1cm4gbnVsbDsKKwl9LAorCisJZ2V0T2Zmc2V0czogZnVuY3Rpb24oKXsKKwkJdmFyIGhhc0dldEJvdW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0OworCisJCWlmIChoYXNHZXRCb3VuZGluZ0NsaWVudFJlY3QpeworCQkJdmFyIGJvdW5kID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwKKwkJCQlodG1sID0gZG9jdW1lbnQuaWQodGhpcy5nZXREb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCksCisJCQkJaHRtbFNjcm9sbCA9IGh0bWwuZ2V0U2Nyb2xsKCksCisJCQkJZWxlbVNjcm9sbHMgPSB0aGlzLmdldFNjcm9sbHMoKSwKKwkJCQlpc0ZpeGVkID0gKHN0eWxlU3RyaW5nKHRoaXMsICdwb3NpdGlvbicpID09ICdmaXhlZCcpOworCisJCQlyZXR1cm4geworCQkJCXg6IGJvdW5kLmxlZnQudG9GbG9hdCgpICsgZWxlbVNjcm9sbHMueCArICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC54KSAtIGh0bWwuY2xpZW50TGVmdCwKKwkJCQl5OiBib3VuZC50b3AudG9GbG9hdCgpICsgZWxlbVNjcm9sbHMueSArICgoaXNGaXhlZCkgPyAwIDogaHRtbFNjcm9sbC55KSAtIGh0bWwuY2xpZW50VG9wCisJCQl9OworCQl9CisKKwkJdmFyIGVsZW1lbnQgPSB0aGlzLCBwb3NpdGlvbiA9IHt4OiAwLCB5OiAwfTsKKwkJaWYgKGlzQm9keSh0aGlzKSkgcmV0dXJuIHBvc2l0aW9uOworCisJCXdoaWxlIChlbGVtZW50ICYmICFpc0JvZHkoZWxlbWVudCkpeworCQkJcG9zaXRpb24ueCArPSBlbGVtZW50Lm9mZnNldExlZnQ7CisJCQlwb3NpdGlvbi55ICs9IGVsZW1lbnQub2Zmc2V0VG9wOworCisJCQllbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7CisJCX0KKworCQlyZXR1cm4gcG9zaXRpb247CisJfSwKKworCWdldFBvc2l0aW9uOiBmdW5jdGlvbihyZWxhdGl2ZSl7CisJCXZhciBvZmZzZXQgPSB0aGlzLmdldE9mZnNldHMoKSwKKwkJCXNjcm9sbCA9IHRoaXMuZ2V0U2Nyb2xscygpOworCQl2YXIgcG9zaXRpb24gPSB7CisJCQl4OiBvZmZzZXQueCAtIHNjcm9sbC54LAorCQkJeTogb2Zmc2V0LnkgLSBzY3JvbGwueQorCQl9OworCisJCWlmIChyZWxhdGl2ZSAmJiAocmVsYXRpdmUgPSBkb2N1bWVudC5pZChyZWxhdGl2ZSkpKXsKKwkJCXZhciByZWxhdGl2ZVBvc2l0aW9uID0gcmVsYXRpdmUuZ2V0UG9zaXRpb24oKTsKKwkJCXJldHVybiB7eDogcG9zaXRpb24ueCAtIHJlbGF0aXZlUG9zaXRpb24ueCAtIGxlZnRCb3JkZXIocmVsYXRpdmUpLCB5OiBwb3NpdGlvbi55IC0gcmVsYXRpdmVQb3NpdGlvbi55IC0gdG9wQm9yZGVyKHJlbGF0aXZlKX07CisJCX0KKwkJcmV0dXJuIHBvc2l0aW9uOworCX0sCisKKwlnZXRDb29yZGluYXRlczogZnVuY3Rpb24oZWxlbWVudCl7CisJCWlmIChpc0JvZHkodGhpcykpIHJldHVybiB0aGlzLmdldFdpbmRvdygpLmdldENvb3JkaW5hdGVzKCk7CisJCXZhciBwb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRpb24oZWxlbWVudCksCisJCQlzaXplID0gdGhpcy5nZXRTaXplKCk7CisJCXZhciBvYmogPSB7CisJCQlsZWZ0OiBwb3NpdGlvbi54LAorCQkJdG9wOiBwb3NpdGlvbi55LAorCQkJd2lkdGg6IHNpemUueCwKKwkJCWhlaWdodDogc2l6ZS55CisJCX07CisJCW9iai5yaWdodCA9IG9iai5sZWZ0ICsgb2JqLndpZHRoOworCQlvYmouYm90dG9tID0gb2JqLnRvcCArIG9iai5oZWlnaHQ7CisJCXJldHVybiBvYmo7CisJfSwKKworCWNvbXB1dGVQb3NpdGlvbjogZnVuY3Rpb24ob2JqKXsKKwkJcmV0dXJuIHsKKwkJCWxlZnQ6IG9iai54IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi1sZWZ0JyksCisJCQl0b3A6IG9iai55IC0gc3R5bGVOdW1iZXIodGhpcywgJ21hcmdpbi10b3AnKQorCQl9OworCX0sCisKKwlzZXRQb3NpdGlvbjogZnVuY3Rpb24ob2JqKXsKKwkJcmV0dXJuIHRoaXMuc2V0U3R5bGVzKHRoaXMuY29tcHV0ZVBvc2l0aW9uKG9iaikpOworCX0KKworfSk7CisKKworW0RvY3VtZW50LCBXaW5kb3ddLmludm9rZSgnaW1wbGVtZW50JywgeworCisJZ2V0U2l6ZTogZnVuY3Rpb24oKXsKKwkJdmFyIGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyk7CisJCXJldHVybiB7eDogZG9jLmNsaWVudFdpZHRoLCB5OiBkb2MuY2xpZW50SGVpZ2h0fTsKKwl9LAorCisJZ2V0U2Nyb2xsOiBmdW5jdGlvbigpeworCQl2YXIgd2luID0gdGhpcy5nZXRXaW5kb3coKSwgZG9jID0gZ2V0Q29tcGF0RWxlbWVudCh0aGlzKTsKKwkJcmV0dXJuIHt4OiB3aW4ucGFnZVhPZmZzZXQgfHwgZG9jLnNjcm9sbExlZnQsIHk6IHdpbi5wYWdlWU9mZnNldCB8fCBkb2Muc2Nyb2xsVG9wfTsKKwl9LAorCisJZ2V0U2Nyb2xsU2l6ZTogZnVuY3Rpb24oKXsKKwkJdmFyIGRvYyA9IGdldENvbXBhdEVsZW1lbnQodGhpcyksCisJCQltaW4gPSB0aGlzLmdldFNpemUoKSwKKwkJCWJvZHkgPSB0aGlzLmdldERvY3VtZW50KCkuYm9keTsKKworCQlyZXR1cm4ge3g6IE1hdGgubWF4KGRvYy5zY3JvbGxXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgbWluLngpLCB5OiBNYXRoLm1heChkb2Muc2Nyb2xsSGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgbWluLnkpfTsKKwl9LAorCisJZ2V0UG9zaXRpb246IGZ1bmN0aW9uKCl7CisJCXJldHVybiB7eDogMCwgeTogMH07CisJfSwKKworCWdldENvb3JkaW5hdGVzOiBmdW5jdGlvbigpeworCQl2YXIgc2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpOworCQlyZXR1cm4ge3RvcDogMCwgbGVmdDogMCwgYm90dG9tOiBzaXplLnksIHJpZ2h0OiBzaXplLngsIGhlaWdodDogc2l6ZS55LCB3aWR0aDogc2l6ZS54fTsKKwl9CisKK30pOworCisvLyBwcml2YXRlIG1ldGhvZHMKKwordmFyIHN0eWxlU3RyaW5nID0gRWxlbWVudC5nZXRDb21wdXRlZFN0eWxlOworCitmdW5jdGlvbiBzdHlsZU51bWJlcihlbGVtZW50LCBzdHlsZSl7CisJcmV0dXJuIHN0eWxlU3RyaW5nKGVsZW1lbnQsIHN0eWxlKS50b0ludCgpIHx8IDA7Cit9CisKKworCitmdW5jdGlvbiB0b3BCb3JkZXIoZWxlbWVudCl7CisJcmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQsICdib3JkZXItdG9wLXdpZHRoJyk7Cit9CisKK2Z1bmN0aW9uIGxlZnRCb3JkZXIoZWxlbWVudCl7CisJcmV0dXJuIHN0eWxlTnVtYmVyKGVsZW1lbnQsICdib3JkZXItbGVmdC13aWR0aCcpOworfQorCitmdW5jdGlvbiBpc0JvZHkoZWxlbWVudCl7CisJcmV0dXJuICgvXig/OmJvZHl8aHRtbCkkL2kpLnRlc3QoZWxlbWVudC50YWdOYW1lKTsKK30KKworZnVuY3Rpb24gZ2V0Q29tcGF0RWxlbWVudChlbGVtZW50KXsKKwl2YXIgZG9jID0gZWxlbWVudC5nZXREb2N1bWVudCgpOworCXJldHVybiAoIWRvYy5jb21wYXRNb2RlIHx8IGRvYy5jb21wYXRNb2RlID09ICdDU1MxQ29tcGF0JykgPyBkb2MuaHRtbCA6IGRvYy5ib2R5OworfQorCit9KSgpOworCisvL2FsaWFzZXMKK0VsZW1lbnQuYWxpYXMoe3Bvc2l0aW9uOiAnc2V0UG9zaXRpb24nfSk7IC8vY29tcGF0YWJpbGl0eQorCitbV2luZG93LCBEb2N1bWVudCwgRWxlbWVudF0uaW52b2tlKCdpbXBsZW1lbnQnLCB7CisKKwlnZXRIZWlnaHQ6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLmdldFNpemUoKS55OworCX0sCisKKwlnZXRXaWR0aDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLng7CisJfSwKKworCWdldFNjcm9sbFRvcDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueTsKKwl9LAorCisJZ2V0U2Nyb2xsTGVmdDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueDsKKwl9LAorCisJZ2V0U2Nyb2xsSGVpZ2h0OiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5nZXRTY3JvbGxTaXplKCkueTsKKwl9LAorCisJZ2V0U2Nyb2xsV2lkdGg6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS54OworCX0sCisKKwlnZXRUb3A6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLmdldFBvc2l0aW9uKCkueTsKKwl9LAorCisJZ2V0TGVmdDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuZ2V0UG9zaXRpb24oKS54OworCX0KKworfSk7CisKKy8qCistLS0KKworbmFtZTogRngKKworZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBiYXNpYyBhbmltYXRpb24gbG9naWMgdG8gYmUgZXh0ZW5kZWQgYnkgYWxsIG90aGVyIEZ4IENsYXNzZXMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCityZXF1aXJlczogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXQorCitwcm92aWRlczogRngKKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIEZ4ID0gdGhpcy5GeCA9IG5ldyBDbGFzcyh7CisKKwlJbXBsZW1lbnRzOiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9ucywgQ2xhc3MuVGhlbmFibGVdLAorCisJb3B0aW9uczogeworCQkvKgorCQlvblN0YXJ0OiBuaWwsCisJCW9uQ2FuY2VsOiBuaWwsCisJCW9uQ29tcGxldGU6IG5pbCwKKwkJKi8KKwkJZnBzOiA2MCwKKwkJdW5pdDogZmFsc2UsCisJCWR1cmF0aW9uOiA1MDAsCisJCWZyYW1lczogbnVsbCwKKwkJZnJhbWVTa2lwOiB0cnVlLAorCQlsaW5rOiAnaWdub3JlJworCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXsKKwkJdGhpcy5zdWJqZWN0ID0gdGhpcy5zdWJqZWN0IHx8IHRoaXM7CisJCXRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTsKKwl9LAorCisJZ2V0VHJhbnNpdGlvbjogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIGZ1bmN0aW9uKHApeworCQkJcmV0dXJuIC0oTWF0aC5jb3MoTWF0aC5QSSAqIHApIC0gMSkgLyAyOworCQl9OworCX0sCisKKwlzdGVwOiBmdW5jdGlvbihub3cpeworCQlpZiAodGhpcy5vcHRpb25zLmZyYW1lU2tpcCl7CisJCQl2YXIgZGlmZiA9ICh0aGlzLnRpbWUgIT0gbnVsbCkgPyAobm93IC0gdGhpcy50aW1lKSA6IDAsIGZyYW1lcyA9IGRpZmYgLyB0aGlzLmZyYW1lSW50ZXJ2YWw7CisJCQl0aGlzLnRpbWUgPSBub3c7CisJCQl0aGlzLmZyYW1lICs9IGZyYW1lczsKKwkJfSBlbHNlIHsKKwkJCXRoaXMuZnJhbWUrKzsKKwkJfQorCisJCWlmICh0aGlzLmZyYW1lIDwgdGhpcy5mcmFtZXMpeworCQkJdmFyIGRlbHRhID0gdGhpcy50cmFuc2l0aW9uKHRoaXMuZnJhbWUgLyB0aGlzLmZyYW1lcyk7CisJCQl0aGlzLnNldCh0aGlzLmNvbXB1dGUodGhpcy5mcm9tLCB0aGlzLnRvLCBkZWx0YSkpOworCQl9IGVsc2UgeworCQkJdGhpcy5mcmFtZSA9IHRoaXMuZnJhbWVzOworCQkJdGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSwgdGhpcy50bywgMSkpOworCQkJdGhpcy5zdG9wKCk7CisJCX0KKwl9LAorCisJc2V0OiBmdW5jdGlvbihub3cpeworCQlyZXR1cm4gbm93OworCX0sCisKKwljb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpeworCQlyZXR1cm4gRnguY29tcHV0ZShmcm9tLCB0bywgZGVsdGEpOworCX0sCisKKwljaGVjazogZnVuY3Rpb24oKXsKKwkJaWYgKCF0aGlzLmlzUnVubmluZygpKSByZXR1cm4gdHJ1ZTsKKwkJc3dpdGNoICh0aGlzLm9wdGlvbnMubGluayl7CisJCQljYXNlICdjYW5jZWwnOiB0aGlzLmNhbmNlbCgpOyByZXR1cm4gdHJ1ZTsKKwkJCWNhc2UgJ2NoYWluJzogdGhpcy5jaGFpbih0aGlzLmNhbGxlci5wYXNzKGFyZ3VtZW50cywgdGhpcykpOyByZXR1cm4gZmFsc2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0sCisKKwlzdGFydDogZnVuY3Rpb24oZnJvbSwgdG8peworCQlpZiAoIXRoaXMuY2hlY2soZnJvbSwgdG8pKSByZXR1cm4gdGhpczsKKwkJdGhpcy5mcm9tID0gZnJvbTsKKwkJdGhpcy50byA9IHRvOworCQl0aGlzLmZyYW1lID0gKHRoaXMub3B0aW9ucy5mcmFtZVNraXApID8gMCA6IC0xOworCQl0aGlzLnRpbWUgPSBudWxsOworCQl0aGlzLnRyYW5zaXRpb24gPSB0aGlzLmdldFRyYW5zaXRpb24oKTsKKwkJdmFyIGZyYW1lcyA9IHRoaXMub3B0aW9ucy5mcmFtZXMsIGZwcyA9IHRoaXMub3B0aW9ucy5mcHMsIGR1cmF0aW9uID0gdGhpcy5vcHRpb25zLmR1cmF0aW9uOworCQl0aGlzLmR1cmF0aW9uID0gRnguRHVyYXRpb25zW2R1cmF0aW9uXSB8fCBkdXJhdGlvbi50b0ludCgpOworCQl0aGlzLmZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzOworCQl0aGlzLmZyYW1lcyA9IGZyYW1lcyB8fCBNYXRoLnJvdW5kKHRoaXMuZHVyYXRpb24gLyB0aGlzLmZyYW1lSW50ZXJ2YWwpOworCQlpZiAodGhpcy5nZXRUaGVuYWJsZVN0YXRlKCkgIT09ICdwZW5kaW5nJyl7CisJCQl0aGlzLnJlc2V0VGhlbmFibGUodGhpcy5zdWJqZWN0KTsKKwkJfQorCQl0aGlzLmZpcmVFdmVudCgnc3RhcnQnLCB0aGlzLnN1YmplY3QpOworCQlwdXNoSW5zdGFuY2UuY2FsbCh0aGlzLCBmcHMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJc3RvcDogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMuaXNSdW5uaW5nKCkpeworCQkJdGhpcy50aW1lID0gbnVsbDsKKwkJCXB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpOworCQkJaWYgKHRoaXMuZnJhbWVzID09IHRoaXMuZnJhbWUpeworCQkJCXRoaXMuZmlyZUV2ZW50KCdjb21wbGV0ZScsIHRoaXMuc3ViamVjdCk7CisJCQkJaWYgKCF0aGlzLmNhbGxDaGFpbigpKSB0aGlzLmZpcmVFdmVudCgnY2hhaW5Db21wbGV0ZScsIHRoaXMuc3ViamVjdCk7CisJCQl9IGVsc2UgeworCQkJCXRoaXMuZmlyZUV2ZW50KCdzdG9wJywgdGhpcy5zdWJqZWN0KTsKKwkJCX0KKwkJCXRoaXMucmVzb2x2ZSh0aGlzLnN1YmplY3QgPT09IHRoaXMgPyBudWxsIDogdGhpcy5zdWJqZWN0KTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJY2FuY2VsOiBmdW5jdGlvbigpeworCQlpZiAodGhpcy5pc1J1bm5pbmcoKSl7CisJCQl0aGlzLnRpbWUgPSBudWxsOworCQkJcHVsbEluc3RhbmNlLmNhbGwodGhpcywgdGhpcy5vcHRpb25zLmZwcyk7CisJCQl0aGlzLmZyYW1lID0gdGhpcy5mcmFtZXM7CisJCQl0aGlzLmZpcmVFdmVudCgnY2FuY2VsJywgdGhpcy5zdWJqZWN0KS5jbGVhckNoYWluKCk7CisJCQl0aGlzLnJlamVjdCh0aGlzLnN1YmplY3QpOworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwlwYXVzZTogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMuaXNSdW5uaW5nKCkpeworCQkJdGhpcy50aW1lID0gbnVsbDsKKwkJCXB1bGxJbnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpOworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwlyZXN1bWU6IGZ1bmN0aW9uKCl7CisJCWlmICh0aGlzLmlzUGF1c2VkKCkpIHB1c2hJbnN0YW5jZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mcHMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJaXNSdW5uaW5nOiBmdW5jdGlvbigpeworCQl2YXIgbGlzdCA9IGluc3RhbmNlc1t0aGlzLm9wdGlvbnMuZnBzXTsKKwkJcmV0dXJuIGxpc3QgJiYgbGlzdC5jb250YWlucyh0aGlzKTsKKwl9LAorCisJaXNQYXVzZWQ6IGZ1bmN0aW9uKCl7CisJCXJldHVybiAodGhpcy5mcmFtZSA8IHRoaXMuZnJhbWVzKSAmJiAhdGhpcy5pc1J1bm5pbmcoKTsKKwl9CisKK30pOworCitGeC5jb21wdXRlID0gZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXsKKwlyZXR1cm4gKHRvIC0gZnJvbSkgKiBkZWx0YSArIGZyb207Cit9OworCitGeC5EdXJhdGlvbnMgPSB7J3Nob3J0JzogMjUwLCAnbm9ybWFsJzogNTAwLCAnbG9uZyc6IDEwMDB9OworCisvLyBnbG9iYWwgdGltZXJzCisKK3ZhciBpbnN0YW5jZXMgPSB7fSwgdGltZXJzID0ge307CisKK3ZhciBsb29wID0gZnVuY3Rpb24oKXsKKwl2YXIgbm93ID0gRGF0ZS5ub3coKTsKKwlmb3IgKHZhciBpID0gdGhpcy5sZW5ndGg7IGktLTspeworCQl2YXIgaW5zdGFuY2UgPSB0aGlzW2ldOworCQlpZiAoaW5zdGFuY2UpIGluc3RhbmNlLnN0ZXAobm93KTsKKwl9Cit9OworCit2YXIgcHVzaEluc3RhbmNlID0gZnVuY3Rpb24oZnBzKXsKKwl2YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNdIHx8IChpbnN0YW5jZXNbZnBzXSA9IFtdKTsKKwlsaXN0LnB1c2godGhpcyk7CisJaWYgKCF0aW1lcnNbZnBzXSkgdGltZXJzW2Zwc10gPSBsb29wLnBlcmlvZGljYWwoTWF0aC5yb3VuZCgxMDAwIC8gZnBzKSwgbGlzdCk7Cit9OworCit2YXIgcHVsbEluc3RhbmNlID0gZnVuY3Rpb24oZnBzKXsKKwl2YXIgbGlzdCA9IGluc3RhbmNlc1tmcHNdOworCWlmIChsaXN0KXsKKwkJbGlzdC5lcmFzZSh0aGlzKTsKKwkJaWYgKCFsaXN0Lmxlbmd0aCAmJiB0aW1lcnNbZnBzXSl7CisJCQlkZWxldGUgaW5zdGFuY2VzW2Zwc107CisJCQl0aW1lcnNbZnBzXSA9IGNsZWFySW50ZXJ2YWwodGltZXJzW2Zwc10pOworCQl9CisJfQorfTsKKworfSkoKTsKKworLyoKKy0tLQorCituYW1lOiBGeC5DU1MKKworZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBDU1MgYW5pbWF0aW9uIGxvZ2ljLiBVc2VkIGJ5IEZ4LlR3ZWVuLCBGeC5Nb3JwaCwgRnguRWxlbWVudHMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCityZXF1aXJlczogW0Z4LCBFbGVtZW50LlN0eWxlXQorCitwcm92aWRlczogRnguQ1NTCisKKy4uLgorKi8KKworRnguQ1NTID0gbmV3IENsYXNzKHsKKworCUV4dGVuZHM6IEZ4LAorCisJLy9wcmVwYXJlcyB0aGUgYmFzZSBmcm9tL3RvIG9iamVjdAorCisJcHJlcGFyZTogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHksIHZhbHVlcyl7CisJCXZhbHVlcyA9IEFycmF5LmNvbnZlcnQodmFsdWVzKTsKKwkJdmFyIGZyb20gPSB2YWx1ZXNbMF0sIHRvID0gdmFsdWVzWzFdOworCQlpZiAodG8gPT0gbnVsbCl7CisJCQl0byA9IGZyb207CisJCQlmcm9tID0gZWxlbWVudC5nZXRTdHlsZShwcm9wZXJ0eSk7CisJCQl2YXIgdW5pdCA9IHRoaXMub3B0aW9ucy51bml0OworCQkJLy8gYWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcnlhbm1vcnIvZngvYmxvYi9tYXN0ZXIvZnguanMjTDI5OQorCQkJaWYgKHVuaXQgJiYgZnJvbSAmJiB0eXBlb2YgZnJvbSA9PSAnc3RyaW5nJyAmJiBmcm9tLnNsaWNlKC11bml0Lmxlbmd0aCkgIT0gdW5pdCAmJiBwYXJzZUZsb2F0KGZyb20pICE9IDApeworCQkJCWVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRvICsgdW5pdCk7CisJCQkJdmFyIHZhbHVlID0gZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKHByb3BlcnR5KTsKKwkJCQkvLyBJRSBhbmQgT3BlcmEgc3VwcG9ydCBwaXhlbExlZnQgb3IgcGl4ZWxXaWR0aAorCQkJCWlmICghKC9weCQvLnRlc3QodmFsdWUpKSl7CisJCQkJCXZhbHVlID0gZWxlbWVudC5zdHlsZVsoJ3BpeGVsLScgKyBwcm9wZXJ0eSkuY2FtZWxDYXNlKCldOworCQkJCQlpZiAodmFsdWUgPT0gbnVsbCl7CisJCQkJCQkvLyBhZGFwdGVkIGZyb20gRGVhbiBFZHdhcmRzJyBodHRwOi8vZXJpay5lYWUubmV0L2FyY2hpdmVzLzIwMDcvMDcvMjcvMTguNTQuMTUvI2NvbW1lbnQtMTAyMjkxCisJCQkJCQl2YXIgbGVmdCA9IGVsZW1lbnQuc3R5bGUubGVmdDsKKwkJCQkJCWVsZW1lbnQuc3R5bGUubGVmdCA9IHRvICsgdW5pdDsKKwkJCQkJCXZhbHVlID0gZWxlbWVudC5zdHlsZS5waXhlbExlZnQ7CisJCQkJCQllbGVtZW50LnN0eWxlLmxlZnQgPSBsZWZ0OworCQkJCQl9CisJCQkJfQorCQkJCWZyb20gPSAodG8gfHwgMSkgLyAocGFyc2VGbG9hdCh2YWx1ZSkgfHwgMSkgKiAocGFyc2VGbG9hdChmcm9tKSB8fCAwKTsKKwkJCQllbGVtZW50LnNldFN0eWxlKHByb3BlcnR5LCBmcm9tICsgdW5pdCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHtmcm9tOiB0aGlzLnBhcnNlKGZyb20pLCB0bzogdGhpcy5wYXJzZSh0byl9OworCX0sCisKKwkvL3BhcnNlcyBhIHZhbHVlIGludG8gYW4gYXJyYXkKKworCXBhcnNlOiBmdW5jdGlvbih2YWx1ZSl7CisJCXZhbHVlID0gRnVuY3Rpb24uY29udmVydCh2YWx1ZSkoKTsKKwkJdmFsdWUgPSAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSA/IHZhbHVlLnNwbGl0KCcgJykgOiBBcnJheS5jb252ZXJ0KHZhbHVlKTsKKwkJcmV0dXJuIHZhbHVlLm1hcChmdW5jdGlvbih2YWwpeworCQkJdmFsID0gU3RyaW5nKHZhbCk7CisJCQl2YXIgZm91bmQgPSBmYWxzZTsKKwkJCU9iamVjdC5lYWNoKEZ4LkNTUy5QYXJzZXJzLCBmdW5jdGlvbihwYXJzZXIpeworCQkJCWlmIChmb3VuZCkgcmV0dXJuOworCQkJCXZhciBwYXJzZWQgPSBwYXJzZXIucGFyc2UodmFsKTsKKwkJCQlpZiAocGFyc2VkIHx8IHBhcnNlZCA9PT0gMCkgZm91bmQgPSB7dmFsdWU6IHBhcnNlZCwgcGFyc2VyOiBwYXJzZXJ9OworCQkJfSk7CisJCQlmb3VuZCA9IGZvdW5kIHx8IHt2YWx1ZTogdmFsLCBwYXJzZXI6IEZ4LkNTUy5QYXJzZXJzLlN0cmluZ307CisJCQlyZXR1cm4gZm91bmQ7CisJCX0pOworCX0sCisKKwkvL2NvbXB1dGVzIGJ5IGEgZnJvbSBhbmQgdG8gcHJlcGFyZWQgb2JqZWN0cywgdXNpbmcgdGhlaXIgcGFyc2Vycy4KKworCWNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7CisJCXZhciBjb21wdXRlZCA9IFtdOworCQkoTWF0aC5taW4oZnJvbS5sZW5ndGgsIHRvLmxlbmd0aCkpLnRpbWVzKGZ1bmN0aW9uKGkpeworCQkJY29tcHV0ZWQucHVzaCh7dmFsdWU6IGZyb21baV0ucGFyc2VyLmNvbXB1dGUoZnJvbVtpXS52YWx1ZSwgdG9baV0udmFsdWUsIGRlbHRhKSwgcGFyc2VyOiBmcm9tW2ldLnBhcnNlcn0pOworCQl9KTsKKwkJY29tcHV0ZWQuJGZhbWlseSA9IEZ1bmN0aW9uLmNvbnZlcnQoJ2Z4OmNzczp2YWx1ZScpOworCQlyZXR1cm4gY29tcHV0ZWQ7CisJfSwKKworCS8vc2VydmVzIHRoZSB2YWx1ZSBhcyBzZXR0YWJsZQorCisJc2VydmU6IGZ1bmN0aW9uKHZhbHVlLCB1bml0KXsKKwkJaWYgKHR5cGVPZih2YWx1ZSkgIT0gJ2Z4OmNzczp2YWx1ZScpIHZhbHVlID0gdGhpcy5wYXJzZSh2YWx1ZSk7CisJCXZhciByZXR1cm5lZCA9IFtdOworCQl2YWx1ZS5lYWNoKGZ1bmN0aW9uKGJpdCl7CisJCQlyZXR1cm5lZCA9IHJldHVybmVkLmNvbmNhdChiaXQucGFyc2VyLnNlcnZlKGJpdC52YWx1ZSwgdW5pdCkpOworCQl9KTsKKwkJcmV0dXJuIHJldHVybmVkOworCX0sCisKKwkvL3JlbmRlcnMgdGhlIGNoYW5nZSB0byBhbiBlbGVtZW50CisKKwlyZW5kZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSwgdW5pdCl7CisJCWVsZW1lbnQuc2V0U3R5bGUocHJvcGVydHksIHRoaXMuc2VydmUodmFsdWUsIHVuaXQpKTsKKwl9LAorCisJLy9zZWFyY2hlcyBpbnNpZGUgdGhlIHBhZ2UgY3NzIHRvIGZpbmQgdGhlIHZhbHVlcyBmb3IgYSBzZWxlY3RvcgorCisJc2VhcmNoOiBmdW5jdGlvbihzZWxlY3Rvcil7CisJCWlmIChGeC5DU1MuQ2FjaGVbc2VsZWN0b3JdKSByZXR1cm4gRnguQ1NTLkNhY2hlW3NlbGVjdG9yXTsKKwkJdmFyIHRvID0ge30sIHNlbGVjdG9yVGVzdCA9IG5ldyBSZWdFeHAoJ14nICsgc2VsZWN0b3IuZXNjYXBlUmVnRXhwKCkgKyAnJCcpOworCisJCXZhciBzZWFyY2hTdHlsZXMgPSBmdW5jdGlvbihydWxlcyl7CisJCQlBcnJheS5lYWNoKHJ1bGVzLCBmdW5jdGlvbihydWxlKXsKKwkJCQlpZiAocnVsZS5tZWRpYSl7CisJCQkJCXNlYXJjaFN0eWxlcyhydWxlLnJ1bGVzIHx8IHJ1bGUuY3NzUnVsZXMpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCWlmICghcnVsZS5zdHlsZSkgcmV0dXJuOworCQkJCXZhciBzZWxlY3RvclRleHQgPSAocnVsZS5zZWxlY3RvclRleHQpID8gcnVsZS5zZWxlY3RvclRleHQucmVwbGFjZSgvXlx3Ky8sIGZ1bmN0aW9uKG0peworCQkJCQlyZXR1cm4gbS50b0xvd2VyQ2FzZSgpOworCQkJCX0pIDogbnVsbDsKKwkJCQlpZiAoIXNlbGVjdG9yVGV4dCB8fCAhc2VsZWN0b3JUZXN0LnRlc3Qoc2VsZWN0b3JUZXh0KSkgcmV0dXJuOworCQkJCU9iamVjdC5lYWNoKEVsZW1lbnQuU3R5bGVzLCBmdW5jdGlvbih2YWx1ZSwgc3R5bGUpeworCQkJCQlpZiAoIXJ1bGUuc3R5bGVbc3R5bGVdIHx8IEVsZW1lbnQuU2hvcnRTdHlsZXNbc3R5bGVdKSByZXR1cm47CisJCQkJCXZhbHVlID0gU3RyaW5nKHJ1bGUuc3R5bGVbc3R5bGVdKTsKKwkJCQkJdG9bc3R5bGVdID0gKCgvXnJnYi8pLnRlc3QodmFsdWUpKSA/IHZhbHVlLnJnYlRvSGV4KCkgOiB2YWx1ZTsKKwkJCQl9KTsKKwkJCX0pOworCQl9OworCisJCUFycmF5LmVhY2goZG9jdW1lbnQuc3R5bGVTaGVldHMsIGZ1bmN0aW9uKHNoZWV0KXsKKwkJCXZhciBocmVmID0gc2hlZXQuaHJlZjsKKwkJCWlmIChocmVmICYmIGhyZWYuaW5kZXhPZignOi8vJykgPiAtMSAmJiBocmVmLmluZGV4T2YoZG9jdW1lbnQuZG9tYWluKSA9PSAtMSkgcmV0dXJuOworCQkJdmFyIHJ1bGVzID0gc2hlZXQucnVsZXMgfHwgc2hlZXQuY3NzUnVsZXM7CisJCQlzZWFyY2hTdHlsZXMocnVsZXMpOworCQl9KTsKKwkJcmV0dXJuIEZ4LkNTUy5DYWNoZVtzZWxlY3Rvcl0gPSB0bzsKKwl9CisKK30pOworCitGeC5DU1MuQ2FjaGUgPSB7fTsKKworRnguQ1NTLlBhcnNlcnMgPSB7CisKKwlDb2xvcjogeworCQlwYXJzZTogZnVuY3Rpb24odmFsdWUpeworCQkJaWYgKHZhbHVlLm1hdGNoKC9eI1swLTlhLWZdezMsNn0kL2kpKSByZXR1cm4gdmFsdWUuaGV4VG9SZ2IodHJ1ZSk7CisJCQlyZXR1cm4gKCh2YWx1ZSA9IHZhbHVlLm1hdGNoKC8oXGQrKSxccyooXGQrKSxccyooXGQrKS8pKSkgPyBbdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXV0gOiBmYWxzZTsKKwkJfSwKKwkJY29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXsKKwkJCXJldHVybiBmcm9tLm1hcChmdW5jdGlvbih2YWx1ZSwgaSl7CisJCQkJcmV0dXJuIE1hdGgucm91bmQoRnguY29tcHV0ZShmcm9tW2ldLCB0b1tpXSwgZGVsdGEpKTsKKwkJCX0pOworCQl9LAorCQlzZXJ2ZTogZnVuY3Rpb24odmFsdWUpeworCQkJcmV0dXJuIHZhbHVlLm1hcChOdW1iZXIpOworCQl9CisJfSwKKworCU51bWJlcjogeworCQlwYXJzZTogcGFyc2VGbG9hdCwKKwkJY29tcHV0ZTogRnguY29tcHV0ZSwKKwkJc2VydmU6IGZ1bmN0aW9uKHZhbHVlLCB1bml0KXsKKwkJCXJldHVybiAodW5pdCkgPyB2YWx1ZSArIHVuaXQgOiB2YWx1ZTsKKwkJfQorCX0sCisKKwlTdHJpbmc6IHsKKwkJcGFyc2U6IEZ1bmN0aW9uLmNvbnZlcnQoZmFsc2UpLAorCQljb21wdXRlOiBmdW5jdGlvbih6ZXJvLCBvbmUpeworCQkJcmV0dXJuIG9uZTsKKwkJfSwKKwkJc2VydmU6IGZ1bmN0aW9uKHplcm8peworCQkJcmV0dXJuIHplcm87CisJCX0KKwl9CisKK307CisKKworCisvKgorLS0tCisKK25hbWU6IEZ4Lk1vcnBoCisKK2Rlc2NyaXB0aW9uOiBGb3JtZXJseSBGeC5TdHlsZXMsIGVmZmVjdCB0byB0cmFuc2l0aW9uIGFueSBudW1iZXIgb2YgQ1NTIHByb3BlcnRpZXMgZm9yIGFuIGVsZW1lbnQgdXNpbmcgYW4gb2JqZWN0IG9mIHJ1bGVzLCBvciBDU1MgYmFzZWQgc2VsZWN0b3IgcnVsZXMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCityZXF1aXJlczogRnguQ1NTCisKK3Byb3ZpZGVzOiBGeC5Nb3JwaAorCisuLi4KKyovCisKK0Z4Lk1vcnBoID0gbmV3IENsYXNzKHsKKworCUV4dGVuZHM6IEZ4LkNTUywKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpeworCQl0aGlzLmVsZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTsKKwkJdGhpcy5wYXJlbnQob3B0aW9ucyk7CisJfSwKKworCXNldDogZnVuY3Rpb24obm93KXsKKwkJaWYgKHR5cGVvZiBub3cgPT0gJ3N0cmluZycpIG5vdyA9IHRoaXMuc2VhcmNoKG5vdyk7CisJCWZvciAodmFyIHAgaW4gbm93KSB0aGlzLnJlbmRlcih0aGlzLmVsZW1lbnQsIHAsIG5vd1twXSwgdGhpcy5vcHRpb25zLnVuaXQpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJY29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXsKKwkJdmFyIG5vdyA9IHt9OworCQlmb3IgKHZhciBwIGluIGZyb20pIG5vd1twXSA9IHRoaXMucGFyZW50KGZyb21bcF0sIHRvW3BdLCBkZWx0YSk7CisJCXJldHVybiBub3c7CisJfSwKKworCXN0YXJ0OiBmdW5jdGlvbihwcm9wZXJ0aWVzKXsKKwkJaWYgKCF0aGlzLmNoZWNrKHByb3BlcnRpZXMpKSByZXR1cm4gdGhpczsKKwkJaWYgKHR5cGVvZiBwcm9wZXJ0aWVzID09ICdzdHJpbmcnKSBwcm9wZXJ0aWVzID0gdGhpcy5zZWFyY2gocHJvcGVydGllcyk7CisJCXZhciBmcm9tID0ge30sIHRvID0ge307CisJCWZvciAodmFyIHAgaW4gcHJvcGVydGllcyl7CisJCQl2YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgcCwgcHJvcGVydGllc1twXSk7CisJCQlmcm9tW3BdID0gcGFyc2VkLmZyb207CisJCQl0b1twXSA9IHBhcnNlZC50bzsKKwkJfQorCQlyZXR1cm4gdGhpcy5wYXJlbnQoZnJvbSwgdG8pOworCX0KKworfSk7CisKK0VsZW1lbnQuUHJvcGVydGllcy5tb3JwaCA9IHsKKworCXNldDogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXRoaXMuZ2V0KCdtb3JwaCcpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXQ6IGZ1bmN0aW9uKCl7CisJCXZhciBtb3JwaCA9IHRoaXMucmV0cmlldmUoJ21vcnBoJyk7CisJCWlmICghbW9ycGgpeworCQkJbW9ycGggPSBuZXcgRnguTW9ycGgodGhpcywge2xpbms6ICdjYW5jZWwnfSk7CisJCQl0aGlzLnN0b3JlKCdtb3JwaCcsIG1vcnBoKTsKKwkJfQorCQlyZXR1cm4gbW9ycGg7CisJfQorCit9OworCitFbGVtZW50LmltcGxlbWVudCh7CisKKwltb3JwaDogZnVuY3Rpb24ocHJvcHMpeworCQl0aGlzLmdldCgnbW9ycGgnKS5zdGFydChwcm9wcyk7CisJCXJldHVybiB0aGlzOworCX0KKworfSk7CisKKy8qCistLS0KKworbmFtZTogRnguVHJhbnNpdGlvbnMKKworZGVzY3JpcHRpb246IENvbnRhaW5zIGEgc2V0IG9mIGFkdmFuY2VkIHRyYW5zaXRpb25zIHRvIGJlIHVzZWQgd2l0aCBhbnkgb2YgdGhlIEZ4IENsYXNzZXMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCitjcmVkaXRzOgorICAtIEVhc2luZyBFcXVhdGlvbnMgYnkgUm9iZXJ0IFBlbm5lciwgPGh0dHA6Ly93d3cucm9iZXJ0cGVubmVyLmNvbS9lYXNpbmcvPiwgbW9kaWZpZWQgYW5kIG9wdGltaXplZCB0byBiZSB1c2VkIHdpdGggTW9vVG9vbHMuCisKK3JlcXVpcmVzOiBGeAorCitwcm92aWRlczogRnguVHJhbnNpdGlvbnMKKworLi4uCisqLworCitGeC5pbXBsZW1lbnQoeworCisJZ2V0VHJhbnNpdGlvbjogZnVuY3Rpb24oKXsKKwkJdmFyIHRyYW5zID0gdGhpcy5vcHRpb25zLnRyYW5zaXRpb24gfHwgRnguVHJhbnNpdGlvbnMuU2luZS5lYXNlSW5PdXQ7CisJCWlmICh0eXBlb2YgdHJhbnMgPT0gJ3N0cmluZycpeworCQkJdmFyIGRhdGEgPSB0cmFucy5zcGxpdCgnOicpOworCQkJdHJhbnMgPSBGeC5UcmFuc2l0aW9uczsKKwkJCXRyYW5zID0gdHJhbnNbZGF0YVswXV0gfHwgdHJhbnNbZGF0YVswXS5jYXBpdGFsaXplKCldOworCQkJaWYgKGRhdGFbMV0pIHRyYW5zID0gdHJhbnNbJ2Vhc2UnICsgZGF0YVsxXS5jYXBpdGFsaXplKCkgKyAoZGF0YVsyXSA/IGRhdGFbMl0uY2FwaXRhbGl6ZSgpIDogJycpXTsKKwkJfQorCQlyZXR1cm4gdHJhbnM7CisJfQorCit9KTsKKworRnguVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKHRyYW5zaXRpb24sIHBhcmFtcyl7CisJcGFyYW1zID0gQXJyYXkuY29udmVydChwYXJhbXMpOworCXZhciBlYXNlSW4gPSBmdW5jdGlvbihwb3MpeworCQlyZXR1cm4gdHJhbnNpdGlvbihwb3MsIHBhcmFtcyk7CisJfTsKKwlyZXR1cm4gT2JqZWN0LmFwcGVuZChlYXNlSW4sIHsKKwkJZWFzZUluOiBlYXNlSW4sCisJCWVhc2VPdXQ6IGZ1bmN0aW9uKHBvcyl7CisJCQlyZXR1cm4gMSAtIHRyYW5zaXRpb24oMSAtIHBvcywgcGFyYW1zKTsKKwkJfSwKKwkJZWFzZUluT3V0OiBmdW5jdGlvbihwb3MpeworCQkJcmV0dXJuIChwb3MgPD0gMC41ID8gdHJhbnNpdGlvbigyICogcG9zLCBwYXJhbXMpIDogKDIgLSB0cmFuc2l0aW9uKDIgKiAoMSAtIHBvcyksIHBhcmFtcykpKSAvIDI7CisJCX0KKwl9KTsKK307CisKK0Z4LlRyYW5zaXRpb25zID0geworCisJbGluZWFyOiBmdW5jdGlvbih6ZXJvKXsKKwkJcmV0dXJuIHplcm87CisJfQorCit9OworCisKKworRnguVHJhbnNpdGlvbnMuZXh0ZW5kID0gZnVuY3Rpb24odHJhbnNpdGlvbnMpeworCWZvciAodmFyIHRyYW5zaXRpb24gaW4gdHJhbnNpdGlvbnMpIEZ4LlRyYW5zaXRpb25zW3RyYW5zaXRpb25dID0gbmV3IEZ4LlRyYW5zaXRpb24odHJhbnNpdGlvbnNbdHJhbnNpdGlvbl0pOworfTsKKworRnguVHJhbnNpdGlvbnMuZXh0ZW5kKHsKKworCVBvdzogZnVuY3Rpb24ocCwgeCl7CisJCXJldHVybiBNYXRoLnBvdyhwLCB4ICYmIHhbMF0gfHwgNik7CisJfSwKKworCUV4cG86IGZ1bmN0aW9uKHApeworCQlyZXR1cm4gTWF0aC5wb3coMiwgOCAqIChwIC0gMSkpOworCX0sCisKKwlDaXJjOiBmdW5jdGlvbihwKXsKKwkJcmV0dXJuIDEgLSBNYXRoLnNpbihNYXRoLmFjb3MocCkpOworCX0sCisKKwlTaW5lOiBmdW5jdGlvbihwKXsKKwkJcmV0dXJuIDEgLSBNYXRoLmNvcyhwICogTWF0aC5QSSAvIDIpOworCX0sCisKKwlCYWNrOiBmdW5jdGlvbihwLCB4KXsKKwkJeCA9IHggJiYgeFswXSB8fCAxLjYxODsKKwkJcmV0dXJuIE1hdGgucG93KHAsIDIpICogKCh4ICsgMSkgKiBwIC0geCk7CisJfSwKKworCUJvdW5jZTogZnVuY3Rpb24ocCl7CisJCXZhciB2YWx1ZTsKKwkJZm9yICh2YXIgYSA9IDAsIGIgPSAxOyAxOyBhICs9IGIsIGIgLz0gMil7CisJCQlpZiAocCA+PSAoNyAtIDQgKiBhKSAvIDExKXsKKwkJCQl2YWx1ZSA9IGIgKiBiIC0gTWF0aC5wb3coKDExIC0gNiAqIGEgLSAxMSAqIHApIC8gNCwgMik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcmV0dXJuIHZhbHVlOworCX0sCisKKwlFbGFzdGljOiBmdW5jdGlvbihwLCB4KXsKKwkJcmV0dXJuIE1hdGgucG93KDIsIDEwICogLS1wKSAqIE1hdGguY29zKDIwICogcCAqIE1hdGguUEkgKiAoeCAmJiB4WzBdIHx8IDEpIC8gMyk7CisJfQorCit9KTsKKworWydRdWFkJywgJ0N1YmljJywgJ1F1YXJ0JywgJ1F1aW50J10uZWFjaChmdW5jdGlvbih0cmFuc2l0aW9uLCBpKXsKKwlGeC5UcmFuc2l0aW9uc1t0cmFuc2l0aW9uXSA9IG5ldyBGeC5UcmFuc2l0aW9uKGZ1bmN0aW9uKHApeworCQlyZXR1cm4gTWF0aC5wb3cocCwgaSArIDIpOworCX0pOworfSk7CisKKy8qCistLS0KKworbmFtZTogRnguVHdlZW4KKworZGVzY3JpcHRpb246IEZvcm1lcmx5IEZ4LlN0eWxlLCBlZmZlY3QgdG8gdHJhbnNpdGlvbiBhbnkgQ1NTIHByb3BlcnR5IGZvciBhbiBlbGVtZW50LgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworcmVxdWlyZXM6IEZ4LkNTUworCitwcm92aWRlczogW0Z4LlR3ZWVuLCBFbGVtZW50LmZhZGUsIEVsZW1lbnQuaGlnaGxpZ2h0XQorCisuLi4KKyovCisKK0Z4LlR3ZWVuID0gbmV3IENsYXNzKHsKKworCUV4dGVuZHM6IEZ4LkNTUywKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpeworCQl0aGlzLmVsZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTsKKwkJdGhpcy5wYXJlbnQob3B0aW9ucyk7CisJfSwKKworCXNldDogZnVuY3Rpb24ocHJvcGVydHksIG5vdyl7CisJCWlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpeworCQkJbm93ID0gcHJvcGVydHk7CisJCQlwcm9wZXJ0eSA9IHRoaXMucHJvcGVydHkgfHwgdGhpcy5vcHRpb25zLnByb3BlcnR5OworCQl9CisJCXRoaXMucmVuZGVyKHRoaXMuZWxlbWVudCwgcHJvcGVydHksIG5vdywgdGhpcy5vcHRpb25zLnVuaXQpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJc3RhcnQ6IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7CisJCWlmICghdGhpcy5jaGVjayhwcm9wZXJ0eSwgZnJvbSwgdG8pKSByZXR1cm4gdGhpczsKKwkJdmFyIGFyZ3MgPSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyk7CisJCXRoaXMucHJvcGVydHkgPSB0aGlzLm9wdGlvbnMucHJvcGVydHkgfHwgYXJncy5zaGlmdCgpOworCQl2YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCwgdGhpcy5wcm9wZXJ0eSwgYXJncyk7CisJCXJldHVybiB0aGlzLnBhcmVudChwYXJzZWQuZnJvbSwgcGFyc2VkLnRvKTsKKwl9CisKK30pOworCitFbGVtZW50LlByb3BlcnRpZXMudHdlZW4gPSB7CisKKwlzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpeworCQl0aGlzLmdldCgndHdlZW4nKS5jYW5jZWwoKS5zZXRPcHRpb25zKG9wdGlvbnMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZ2V0OiBmdW5jdGlvbigpeworCQl2YXIgdHdlZW4gPSB0aGlzLnJldHJpZXZlKCd0d2VlbicpOworCQlpZiAoIXR3ZWVuKXsKKwkJCXR3ZWVuID0gbmV3IEZ4LlR3ZWVuKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pOworCQkJdGhpcy5zdG9yZSgndHdlZW4nLCB0d2Vlbik7CisJCX0KKwkJcmV0dXJuIHR3ZWVuOworCX0KKworfTsKKworRWxlbWVudC5pbXBsZW1lbnQoeworCisJdHdlZW46IGZ1bmN0aW9uKHByb3BlcnR5LCBmcm9tLCB0byl7CisJCXRoaXMuZ2V0KCd0d2VlbicpLnN0YXJ0KHByb3BlcnR5LCBmcm9tLCB0byk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlmYWRlOiBmdW5jdGlvbigpeworCQl2YXIgZmFkZSA9IHRoaXMuZ2V0KCd0d2VlbicpLCBtZXRob2QsIGFyZ3MgPSBbJ29wYWNpdHknXS5hcHBlbmQoYXJndW1lbnRzKSwgdG9nZ2xlOworCQlpZiAoYXJnc1sxXSA9PSBudWxsKSBhcmdzWzFdID0gJ3RvZ2dsZSc7CisJCXN3aXRjaCAoYXJnc1sxXSl7CisJCQljYXNlICdpbic6IG1ldGhvZCA9ICdzdGFydCc7IGFyZ3NbMV0gPSAxOyBicmVhazsKKwkJCWNhc2UgJ291dCc6IG1ldGhvZCA9ICdzdGFydCc7IGFyZ3NbMV0gPSAwOyBicmVhazsKKwkJCWNhc2UgJ3Nob3cnOiBtZXRob2QgPSAnc2V0JzsgYXJnc1sxXSA9IDE7IGJyZWFrOworCQkJY2FzZSAnaGlkZSc6IG1ldGhvZCA9ICdzZXQnOyBhcmdzWzFdID0gMDsgYnJlYWs7CisJCQljYXNlICd0b2dnbGUnOgorCQkJCXZhciBmbGFnID0gdGhpcy5yZXRyaWV2ZSgnZmFkZTpmbGFnJywgdGhpcy5nZXRTdHlsZSgnb3BhY2l0eScpID09IDEpOworCQkJCW1ldGhvZCA9ICdzdGFydCc7CisJCQkJYXJnc1sxXSA9IGZsYWcgPyAwIDogMTsKKwkJCQl0aGlzLnN0b3JlKCdmYWRlOmZsYWcnLCAhZmxhZyk7CisJCQkJdG9nZ2xlID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6IG1ldGhvZCA9ICdzdGFydCc7CisJCX0KKwkJaWYgKCF0b2dnbGUpIHRoaXMuZWxpbWluYXRlKCdmYWRlOmZsYWcnKTsKKwkJZmFkZVttZXRob2RdLmFwcGx5KGZhZGUsIGFyZ3MpOworCQl2YXIgdG8gPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07CisKKwkJaWYgKG1ldGhvZCA9PSAnc2V0Jyl7CisJCQl0aGlzLnNldFN0eWxlKCd2aXNpYmlsaXR5JywgdG8gPT0gMCA/ICdoaWRkZW4nIDogJ3Zpc2libGUnKTsKKwkJfSBlbHNlIGlmICh0byAhPSAwKXsKKwkJCWlmIChmYWRlLiRjaGFpbi5sZW5ndGgpeworCQkJCWZhZGUuY2hhaW4oZnVuY3Rpb24oKXsKKwkJCQkJdGhpcy5lbGVtZW50LnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTsKKwkJCQkJdGhpcy5jYWxsQ2hhaW4oKTsKKwkJCQl9KTsKKwkJCX0gZWxzZSB7CisJCQkJdGhpcy5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlmYWRlLmNoYWluKGZ1bmN0aW9uKCl7CisJCQkJaWYgKHRoaXMuZWxlbWVudC5nZXRTdHlsZSgnb3BhY2l0eScpKSByZXR1cm47CisJCQkJdGhpcy5lbGVtZW50LnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpOworCQkJCXRoaXMuY2FsbENoYWluKCk7CisJCQl9KTsKKwkJfQorCisJCXJldHVybiB0aGlzOworCX0sCisKKwloaWdobGlnaHQ6IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpeworCQlpZiAoIWVuZCl7CisJCQllbmQgPSB0aGlzLnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnLCB0aGlzLmdldFN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJykpOworCQkJZW5kID0gKGVuZCA9PSAndHJhbnNwYXJlbnQnKSA/ICcjZmZmJyA6IGVuZDsKKwkJfQorCQl2YXIgdHdlZW4gPSB0aGlzLmdldCgndHdlZW4nKTsKKwkJdHdlZW4uc3RhcnQoJ2JhY2tncm91bmQtY29sb3InLCBzdGFydCB8fCAnI2ZmZmY4OCcsIGVuZCkuY2hhaW4oZnVuY3Rpb24oKXsKKwkJCXRoaXMuc2V0U3R5bGUoJ2JhY2tncm91bmQtY29sb3InLCB0aGlzLnJldHJpZXZlKCdoaWdobGlnaHQ6b3JpZ2luYWwnKSk7CisJCQl0d2Vlbi5jYWxsQ2hhaW4oKTsKKwkJfS5iaW5kKHRoaXMpKTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKworLyoKKy0tLQorCituYW1lOiBSZXF1ZXN0CisKK2Rlc2NyaXB0aW9uOiBQb3dlcmZ1bCBhbGwgcHVycG9zZSBSZXF1ZXN0IENsYXNzLiBVc2VzIFhNTEhUVFBSZXF1ZXN0LgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworcmVxdWlyZXM6IFtPYmplY3QsIEVsZW1lbnQsIENoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlLCBCcm93c2VyXQorCitwcm92aWRlczogUmVxdWVzdAorCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCit2YXIgZW1wdHkgPSBmdW5jdGlvbigpe30sCisJcHJvZ3Jlc3NTdXBwb3J0ID0gKCdvbnByb2dyZXNzJyBpbiBuZXcgQnJvd3Nlci5SZXF1ZXN0KTsKKwordmFyIFJlcXVlc3QgPSB0aGlzLlJlcXVlc3QgPSBuZXcgQ2xhc3MoeworCisJSW1wbGVtZW50czogW0NoYWluLCBFdmVudHMsIE9wdGlvbnMsIENsYXNzLlRoZW5hYmxlXSwKKworCW9wdGlvbnM6IHsvKgorCQlvblJlcXVlc3Q6IGZ1bmN0aW9uKCl7fSwKKwkJb25Mb2Fkc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50LCB4aHIpe30sCisJCW9uUHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50LCB4aHIpe30sCisJCW9uQ29tcGxldGU6IGZ1bmN0aW9uKCl7fSwKKwkJb25DYW5jZWw6IGZ1bmN0aW9uKCl7fSwKKwkJb25TdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZVRleHQsIHJlc3BvbnNlWE1MKXt9LAorCQlvbkZhaWx1cmU6IGZ1bmN0aW9uKHhocil7fSwKKwkJb25FeGNlcHRpb246IGZ1bmN0aW9uKGhlYWRlck5hbWUsIHZhbHVlKXt9LAorCQlvblRpbWVvdXQ6IGZ1bmN0aW9uKCl7fSwKKwkJdXNlcjogJycsCisJCXBhc3N3b3JkOiAnJywKKwkJd2l0aENyZWRlbnRpYWxzOiBmYWxzZSwqLworCQl1cmw6ICcnLAorCQlkYXRhOiAnJywKKwkJaGVhZGVyczogeworCQkJJ1gtUmVxdWVzdGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnLAorCQkJJ0FjY2VwdCc6ICd0ZXh0L2phdmFzY3JpcHQsIHRleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8qJworCQl9LAorCQlhc3luYzogdHJ1ZSwKKwkJZm9ybWF0OiBmYWxzZSwKKwkJbWV0aG9kOiAncG9zdCcsCisJCWxpbms6ICdpZ25vcmUnLAorCQlpc1N1Y2Nlc3M6IG51bGwsCisJCWVtdWxhdGlvbjogdHJ1ZSwKKwkJdXJsRW5jb2RlZDogdHJ1ZSwKKwkJZW5jb2Rpbmc6ICd1dGYtOCcsCisJCWV2YWxTY3JpcHRzOiBmYWxzZSwKKwkJZXZhbFJlc3BvbnNlOiBmYWxzZSwKKwkJdGltZW91dDogMCwKKwkJbm9DYWNoZTogZmFsc2UKKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXRoaXMueGhyID0gbmV3IEJyb3dzZXIuUmVxdWVzdCgpOworCQl0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7CisJCXRoaXMuaGVhZGVycyA9IHRoaXMub3B0aW9ucy5oZWFkZXJzOworCX0sCisKKwlvblN0YXRlQ2hhbmdlOiBmdW5jdGlvbigpeworCQl2YXIgeGhyID0gdGhpcy54aHI7CisJCWlmICh4aHIucmVhZHlTdGF0ZSAhPSA0IHx8ICF0aGlzLnJ1bm5pbmcpIHJldHVybjsKKwkJdGhpcy5ydW5uaW5nID0gZmFsc2U7CisJCXRoaXMuc3RhdHVzID0gMDsKKwkJRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpeworCQkJdmFyIHN0YXR1cyA9IHhoci5zdGF0dXM7CisJCQl0aGlzLnN0YXR1cyA9IChzdGF0dXMgPT0gMTIyMykgPyAyMDQgOiBzdGF0dXM7CisJCX0uYmluZCh0aGlzKSk7CisJCXhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBlbXB0eTsKKwkJaWYgKHByb2dyZXNzU3VwcG9ydCkgeGhyLm9ucHJvZ3Jlc3MgPSB4aHIub25sb2Fkc3RhcnQgPSBlbXB0eTsKKwkJaWYgKHRoaXMudGltZXIpeworCQkJY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpOworCQkJZGVsZXRlIHRoaXMudGltZXI7CisJCX0KKworCQl0aGlzLnJlc3BvbnNlID0ge3RleHQ6IHRoaXMueGhyLnJlc3BvbnNlVGV4dCB8fCAnJywgeG1sOiB0aGlzLnhoci5yZXNwb25zZVhNTH07CisJCWlmICh0aGlzLm9wdGlvbnMuaXNTdWNjZXNzLmNhbGwodGhpcywgdGhpcy5zdGF0dXMpKQorCQkJdGhpcy5zdWNjZXNzKHRoaXMucmVzcG9uc2UudGV4dCwgdGhpcy5yZXNwb25zZS54bWwpOworCQllbHNlCisJCQl0aGlzLmZhaWx1cmUoKTsKKwl9LAorCisJaXNTdWNjZXNzOiBmdW5jdGlvbigpeworCQl2YXIgc3RhdHVzID0gdGhpcy5zdGF0dXM7CisJCXJldHVybiAoc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDApOworCX0sCisKKwlpc1J1bm5pbmc6IGZ1bmN0aW9uKCl7CisJCXJldHVybiAhIXRoaXMucnVubmluZzsKKwl9LAorCisJcHJvY2Vzc1NjcmlwdHM6IGZ1bmN0aW9uKHRleHQpeworCQlpZiAodGhpcy5vcHRpb25zLmV2YWxSZXNwb25zZSB8fCAoLyhlY21hfGphdmEpc2NyaXB0LykudGVzdCh0aGlzLmdldEhlYWRlcignQ29udGVudC10eXBlJykpKSByZXR1cm4gQnJvd3Nlci5leGVjKHRleHQpOworCQlyZXR1cm4gdGV4dC5zdHJpcFNjcmlwdHModGhpcy5vcHRpb25zLmV2YWxTY3JpcHRzKTsKKwl9LAorCisJc3VjY2VzczogZnVuY3Rpb24odGV4dCwgeG1sKXsKKwkJdGhpcy5vblN1Y2Nlc3ModGhpcy5wcm9jZXNzU2NyaXB0cyh0ZXh0KSwgeG1sKTsKKwkJdGhpcy5yZXNvbHZlKHt0ZXh0OiB0ZXh0LCB4bWw6IHhtbH0pOworCX0sCisKKwlvblN1Y2Nlc3M6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZmlyZUV2ZW50KCdjb21wbGV0ZScsIGFyZ3VtZW50cykuZmlyZUV2ZW50KCdzdWNjZXNzJywgYXJndW1lbnRzKS5jYWxsQ2hhaW4oKTsKKwl9LAorCisJZmFpbHVyZTogZnVuY3Rpb24oKXsKKwkJdGhpcy5vbkZhaWx1cmUoKTsKKwkJdGhpcy5yZWplY3Qoe3JlYXNvbjogJ2ZhaWx1cmUnLCB4aHI6IHRoaXMueGhyfSk7CisJfSwKKworCW9uRmFpbHVyZTogZnVuY3Rpb24oKXsKKwkJdGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJykuZmlyZUV2ZW50KCdmYWlsdXJlJywgdGhpcy54aHIpOworCX0sCisKKwlsb2Fkc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50KXsKKwkJdGhpcy5maXJlRXZlbnQoJ2xvYWRzdGFydCcsIFtldmVudCwgdGhpcy54aHJdKTsKKwl9LAorCisJcHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2ZW50KXsKKwkJdGhpcy5maXJlRXZlbnQoJ3Byb2dyZXNzJywgW2V2ZW50LCB0aGlzLnhocl0pOworCX0sCisKKwl0aW1lb3V0OiBmdW5jdGlvbigpeworCQl0aGlzLmZpcmVFdmVudCgndGltZW91dCcsIHRoaXMueGhyKTsKKwkJdGhpcy5yZWplY3Qoe3JlYXNvbjogJ3RpbWVvdXQnLCB4aHI6IHRoaXMueGhyfSk7CisJfSwKKworCXNldEhlYWRlcjogZnVuY3Rpb24obmFtZSwgdmFsdWUpeworCQl0aGlzLmhlYWRlcnNbbmFtZV0gPSB2YWx1ZTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWdldEhlYWRlcjogZnVuY3Rpb24obmFtZSl7CisJCXJldHVybiBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7CisJCQlyZXR1cm4gdGhpcy54aHIuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSk7CisJCX0uYmluZCh0aGlzKSk7CisJfSwKKworCWNoZWNrOiBmdW5jdGlvbigpeworCQlpZiAoIXRoaXMucnVubmluZykgcmV0dXJuIHRydWU7CisJCXN3aXRjaCAodGhpcy5vcHRpb25zLmxpbmspeworCQkJY2FzZSAnY2FuY2VsJzogdGhpcy5jYW5jZWwoKTsgcmV0dXJuIHRydWU7CisJCQljYXNlICdjaGFpbic6IHRoaXMuY2hhaW4odGhpcy5jYWxsZXIucGFzcyhhcmd1bWVudHMsIHRoaXMpKTsgcmV0dXJuIGZhbHNlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9LAorCisJc2VuZDogZnVuY3Rpb24ob3B0aW9ucyl7CisJCWlmICghdGhpcy5jaGVjayhvcHRpb25zKSkgcmV0dXJuIHRoaXM7CisKKwkJdGhpcy5vcHRpb25zLmlzU3VjY2VzcyA9IHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MgfHwgdGhpcy5pc1N1Y2Nlc3M7CisJCXRoaXMucnVubmluZyA9IHRydWU7CisKKwkJdmFyIHR5cGUgPSB0eXBlT2Yob3B0aW9ucyk7CisJCWlmICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ2VsZW1lbnQnKSBvcHRpb25zID0ge2RhdGE6IG9wdGlvbnN9OworCisJCXZhciBvbGQgPSB0aGlzLm9wdGlvbnM7CisJCW9wdGlvbnMgPSBPYmplY3QuYXBwZW5kKHtkYXRhOiBvbGQuZGF0YSwgdXJsOiBvbGQudXJsLCBtZXRob2Q6IG9sZC5tZXRob2R9LCBvcHRpb25zKTsKKwkJdmFyIGRhdGEgPSBvcHRpb25zLmRhdGEsIHVybCA9IFN0cmluZyhvcHRpb25zLnVybCksIG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kLnRvTG93ZXJDYXNlKCk7CisKKwkJc3dpdGNoICh0eXBlT2YoZGF0YSkpeworCQkJY2FzZSAnZWxlbWVudCc6IGRhdGEgPSBkb2N1bWVudC5pZChkYXRhKS50b1F1ZXJ5U3RyaW5nKCk7IGJyZWFrOworCQkJY2FzZSAnb2JqZWN0JzogY2FzZSAnaGFzaCc6IGRhdGEgPSBPYmplY3QudG9RdWVyeVN0cmluZyhkYXRhKTsKKwkJfQorCisJCWlmICh0aGlzLm9wdGlvbnMuZm9ybWF0KXsKKwkJCXZhciBmb3JtYXQgPSAnZm9ybWF0PScgKyB0aGlzLm9wdGlvbnMuZm9ybWF0OworCQkJZGF0YSA9IChkYXRhKSA/IGZvcm1hdCArICcmJyArIGRhdGEgOiBmb3JtYXQ7CisJCX0KKworCQlpZiAodGhpcy5vcHRpb25zLmVtdWxhdGlvbiAmJiAhWydnZXQnLCAncG9zdCddLmNvbnRhaW5zKG1ldGhvZCkpeworCQkJdmFyIF9tZXRob2QgPSAnX21ldGhvZD0nICsgbWV0aG9kOworCQkJZGF0YSA9IChkYXRhKSA/IF9tZXRob2QgKyAnJicgKyBkYXRhIDogX21ldGhvZDsKKwkJCW1ldGhvZCA9ICdwb3N0JzsKKwkJfQorCisJCWlmICh0aGlzLm9wdGlvbnMudXJsRW5jb2RlZCAmJiBbJ3Bvc3QnLCAncHV0J10uY29udGFpbnMobWV0aG9kKSl7CisJCQl2YXIgZW5jb2RpbmcgPSAodGhpcy5vcHRpb25zLmVuY29kaW5nKSA/ICc7IGNoYXJzZXQ9JyArIHRoaXMub3B0aW9ucy5lbmNvZGluZyA6ICcnOworCQkJdGhpcy5oZWFkZXJzWydDb250ZW50LXR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnICsgZW5jb2Rpbmc7CisJCX0KKworCQlpZiAoIXVybCkgdXJsID0gZG9jdW1lbnQubG9jYXRpb24ucGF0aG5hbWU7CisKKwkJdmFyIHRyaW1Qb3NpdGlvbiA9IHVybC5sYXN0SW5kZXhPZignLycpOworCQlpZiAodHJpbVBvc2l0aW9uID4gLTEgJiYgKHRyaW1Qb3NpdGlvbiA9IHVybC5pbmRleE9mKCcjJykpID4gLTEpIHVybCA9IHVybC5zdWJzdHIoMCwgdHJpbVBvc2l0aW9uKTsKKworCQlpZiAodGhpcy5vcHRpb25zLm5vQ2FjaGUpCisJCQl1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBTdHJpbmcudW5pcXVlSUQoKTsKKworCQlpZiAoZGF0YSAmJiAobWV0aG9kID09ICdnZXQnIHx8IG1ldGhvZCA9PSAnZGVsZXRlJykpeworCQkJdXJsICs9ICh1cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgZGF0YTsKKwkJCWRhdGEgPSBudWxsOworCQl9CisKKwkJdmFyIHhociA9IHRoaXMueGhyOworCQlpZiAocHJvZ3Jlc3NTdXBwb3J0KXsKKwkJCXhoci5vbmxvYWRzdGFydCA9IHRoaXMubG9hZHN0YXJ0LmJpbmQodGhpcyk7CisJCQl4aHIub25wcm9ncmVzcyA9IHRoaXMucHJvZ3Jlc3MuYmluZCh0aGlzKTsKKwkJfQorCisJCXhoci5vcGVuKG1ldGhvZC50b1VwcGVyQ2FzZSgpLCB1cmwsIHRoaXMub3B0aW9ucy5hc3luYywgdGhpcy5vcHRpb25zLnVzZXIsIHRoaXMub3B0aW9ucy5wYXNzd29yZCk7CisJCWlmICgodGhpcy5vcHRpb25zLndpdGhDcmVkZW50aWFscykgJiYgJ3dpdGhDcmVkZW50aWFscycgaW4geGhyKSB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTsKKworCQl4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gdGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyk7CisKKwkJT2JqZWN0LmVhY2godGhpcy5oZWFkZXJzLCBmdW5jdGlvbih2YWx1ZSwga2V5KXsKKwkJCXRyeSB7CisJCQkJeGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWx1ZSk7CisJCQl9IGNhdGNoIChlKXsKKwkJCQl0aGlzLmZpcmVFdmVudCgnZXhjZXB0aW9uJywgW2tleSwgdmFsdWVdKTsKKwkJCQl0aGlzLnJlamVjdCh7cmVhc29uOiAnZXhjZXB0aW9uJywgeGhyOiB4aHIsIGV4Y2VwdGlvbjogZX0pOworCQkJfQorCQl9LCB0aGlzKTsKKworCQlpZiAodGhpcy5nZXRUaGVuYWJsZVN0YXRlKCkgIT09ICdwZW5kaW5nJyl7CisJCQl0aGlzLnJlc2V0VGhlbmFibGUoe3JlYXNvbjogJ3NlbmQnfSk7CisJCX0KKwkJdGhpcy5maXJlRXZlbnQoJ3JlcXVlc3QnKTsKKwkJeGhyLnNlbmQoZGF0YSk7CisJCWlmICghdGhpcy5vcHRpb25zLmFzeW5jKSB0aGlzLm9uU3RhdGVDaGFuZ2UoKTsKKwkJZWxzZSBpZiAodGhpcy5vcHRpb25zLnRpbWVvdXQpIHRoaXMudGltZXIgPSB0aGlzLnRpbWVvdXQuZGVsYXkodGhpcy5vcHRpb25zLnRpbWVvdXQsIHRoaXMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJY2FuY2VsOiBmdW5jdGlvbigpeworCQlpZiAoIXRoaXMucnVubmluZykgcmV0dXJuIHRoaXM7CisJCXRoaXMucnVubmluZyA9IGZhbHNlOworCQl2YXIgeGhyID0gdGhpcy54aHI7CisJCXhoci5hYm9ydCgpOworCQlpZiAodGhpcy50aW1lcil7CisJCQljbGVhclRpbWVvdXQodGhpcy50aW1lcik7CisJCQlkZWxldGUgdGhpcy50aW1lcjsKKwkJfQorCQl4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZW1wdHk7CisJCWlmIChwcm9ncmVzc1N1cHBvcnQpIHhoci5vbnByb2dyZXNzID0geGhyLm9ubG9hZHN0YXJ0ID0gZW1wdHk7CisJCXRoaXMueGhyID0gbmV3IEJyb3dzZXIuUmVxdWVzdCgpOworCQl0aGlzLmZpcmVFdmVudCgnY2FuY2VsJyk7CisJCXRoaXMucmVqZWN0KHtyZWFzb246ICdjYW5jZWwnLCB4aHI6IHhocn0pOworCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCit2YXIgbWV0aG9kcyA9IHt9OworWydnZXQnLCAncG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ3BhdGNoJywgJ2hlYWQnLCAnR0VUJywgJ1BPU1QnLCAnUFVUJywgJ0RFTEVURScsICdQQVRDSCcsICdIRUFEJ10uZWFjaChmdW5jdGlvbihtZXRob2QpeworCW1ldGhvZHNbbWV0aG9kXSA9IGZ1bmN0aW9uKGRhdGEpeworCQl2YXIgb2JqZWN0ID0geworCQkJbWV0aG9kOiBtZXRob2QKKwkJfTsKKwkJaWYgKGRhdGEgIT0gbnVsbCkgb2JqZWN0LmRhdGEgPSBkYXRhOworCQlyZXR1cm4gdGhpcy5zZW5kKG9iamVjdCk7CisJfTsKK30pOworCitSZXF1ZXN0LmltcGxlbWVudChtZXRob2RzKTsKKworRWxlbWVudC5Qcm9wZXJ0aWVzLnNlbmQgPSB7CisKKwlzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpeworCQl2YXIgc2VuZCA9IHRoaXMuZ2V0KCdzZW5kJykuY2FuY2VsKCk7CisJCXNlbmQuc2V0T3B0aW9ucyhvcHRpb25zKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWdldDogZnVuY3Rpb24oKXsKKwkJdmFyIHNlbmQgPSB0aGlzLnJldHJpZXZlKCdzZW5kJyk7CisJCWlmICghc2VuZCl7CisJCQlzZW5kID0gbmV3IFJlcXVlc3QoeworCQkJCWRhdGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCBtZXRob2Q6IHRoaXMuZ2V0KCdtZXRob2QnKSB8fCAncG9zdCcsIHVybDogdGhpcy5nZXQoJ2FjdGlvbicpCisJCQl9KTsKKwkJCXRoaXMuc3RvcmUoJ3NlbmQnLCBzZW5kKTsKKwkJfQorCQlyZXR1cm4gc2VuZDsKKwl9CisKK307CisKK0VsZW1lbnQuaW1wbGVtZW50KHsKKworCXNlbmQ6IGZ1bmN0aW9uKHVybCl7CisJCXZhciBzZW5kZXIgPSB0aGlzLmdldCgnc2VuZCcpOworCQlzZW5kZXIuc2VuZCh7ZGF0YTogdGhpcywgdXJsOiB1cmwgfHwgc2VuZGVyLm9wdGlvbnMudXJsfSk7CisJCXJldHVybiB0aGlzOworCX0KKworfSk7CisKK30pKCk7CisKKy8qCistLS0KKworbmFtZTogUmVxdWVzdC5IVE1MCisKK2Rlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBiYXNpYyBSZXF1ZXN0IENsYXNzIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIEhUTUwgcmVzcG9uc2VzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworcmVxdWlyZXM6IFtFbGVtZW50LCBSZXF1ZXN0XQorCitwcm92aWRlczogUmVxdWVzdC5IVE1MCisKKy4uLgorKi8KKworUmVxdWVzdC5IVE1MID0gbmV3IENsYXNzKHsKKworCUV4dGVuZHM6IFJlcXVlc3QsCisKKwlvcHRpb25zOiB7CisJCXVwZGF0ZTogZmFsc2UsCisJCWFwcGVuZDogZmFsc2UsCisJCWV2YWxTY3JpcHRzOiB0cnVlLAorCQlmaWx0ZXI6IGZhbHNlLAorCQloZWFkZXJzOiB7CisJCQlBY2NlcHQ6ICd0ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICovKicKKwkJfQorCX0sCisKKwlzdWNjZXNzOiBmdW5jdGlvbih0ZXh0KXsKKwkJdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsIHJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTsKKworCQlyZXNwb25zZS5odG1sID0gdGV4dC5zdHJpcFNjcmlwdHMoZnVuY3Rpb24oc2NyaXB0KXsKKwkJCXJlc3BvbnNlLmphdmFzY3JpcHQgPSBzY3JpcHQ7CisJCX0pOworCisJCXZhciBtYXRjaCA9IHJlc3BvbnNlLmh0bWwubWF0Y2goLzxib2R5W14+XSo+KFtcc1xTXSo/KTxcL2JvZHk+L2kpOworCQlpZiAobWF0Y2gpIHJlc3BvbnNlLmh0bWwgPSBtYXRjaFsxXTsKKwkJdmFyIHRlbXAgPSBuZXcgRWxlbWVudCgnZGl2Jykuc2V0KCdodG1sJywgcmVzcG9uc2UuaHRtbCk7CisKKwkJcmVzcG9uc2UudHJlZSA9IHRlbXAuY2hpbGROb2RlczsKKwkJcmVzcG9uc2UuZWxlbWVudHMgPSB0ZW1wLmdldEVsZW1lbnRzKG9wdGlvbnMuZmlsdGVyIHx8ICcqJyk7CisKKwkJaWYgKG9wdGlvbnMuZmlsdGVyKSByZXNwb25zZS50cmVlID0gcmVzcG9uc2UuZWxlbWVudHM7CisJCWlmIChvcHRpb25zLnVwZGF0ZSl7CisJCQl2YXIgdXBkYXRlID0gZG9jdW1lbnQuaWQob3B0aW9ucy51cGRhdGUpLmVtcHR5KCk7CisJCQlpZiAob3B0aW9ucy5maWx0ZXIpIHVwZGF0ZS5hZG9wdChyZXNwb25zZS5lbGVtZW50cyk7CisJCQllbHNlIHVwZGF0ZS5zZXQoJ2h0bWwnLCByZXNwb25zZS5odG1sKTsKKwkJfSBlbHNlIGlmIChvcHRpb25zLmFwcGVuZCl7CisJCQl2YXIgYXBwZW5kID0gZG9jdW1lbnQuaWQob3B0aW9ucy5hcHBlbmQpOworCQkJaWYgKG9wdGlvbnMuZmlsdGVyKSByZXNwb25zZS5lbGVtZW50cy5yZXZlcnNlKCkuaW5qZWN0KGFwcGVuZCk7CisJCQllbHNlIGFwcGVuZC5hZG9wdCh0ZW1wLmdldENoaWxkcmVuKCkpOworCQl9CisJCWlmIChvcHRpb25zLmV2YWxTY3JpcHRzKSBCcm93c2VyLmV4ZWMocmVzcG9uc2UuamF2YXNjcmlwdCk7CisKKwkJdGhpcy5vblN1Y2Nlc3MocmVzcG9uc2UudHJlZSwgcmVzcG9uc2UuZWxlbWVudHMsIHJlc3BvbnNlLmh0bWwsIHJlc3BvbnNlLmphdmFzY3JpcHQpOworCQl0aGlzLnJlc29sdmUoe3RyZWU6IHJlc3BvbnNlLnRyZWUsIGVsZW1lbnRzOiByZXNwb25zZS5lbGVtZW50cywgaHRtbDogcmVzcG9uc2UuaHRtbCwgamF2YXNjcmlwdDogcmVzcG9uc2UuamF2YXNjcmlwdH0pOworCX0KKworfSk7CisKK0VsZW1lbnQuUHJvcGVydGllcy5sb2FkID0geworCisJc2V0OiBmdW5jdGlvbihvcHRpb25zKXsKKwkJdmFyIGxvYWQgPSB0aGlzLmdldCgnbG9hZCcpLmNhbmNlbCgpOworCQlsb2FkLnNldE9wdGlvbnMob3B0aW9ucyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXQ6IGZ1bmN0aW9uKCl7CisJCXZhciBsb2FkID0gdGhpcy5yZXRyaWV2ZSgnbG9hZCcpOworCQlpZiAoIWxvYWQpeworCQkJbG9hZCA9IG5ldyBSZXF1ZXN0LkhUTUwoe2RhdGE6IHRoaXMsIGxpbms6ICdjYW5jZWwnLCB1cGRhdGU6IHRoaXMsIG1ldGhvZDogJ2dldCd9KTsKKwkJCXRoaXMuc3RvcmUoJ2xvYWQnLCBsb2FkKTsKKwkJfQorCQlyZXR1cm4gbG9hZDsKKwl9CisKK307CisKK0VsZW1lbnQuaW1wbGVtZW50KHsKKworCWxvYWQ6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZ2V0KCdsb2FkJykuc2VuZChBcnJheS5saW5rKGFyZ3VtZW50cywge2RhdGE6IFR5cGUuaXNPYmplY3QsIHVybDogVHlwZS5pc1N0cmluZ30pKTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKworLyoKKy0tLQorCituYW1lOiBKU09OCisKK2Rlc2NyaXB0aW9uOiBKU09OIGVuY29kZXIgYW5kIGRlY29kZXIuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCitTZWVBbHNvOiA8aHR0cDovL3d3dy5qc29uLm9yZy8+CisKK3JlcXVpcmVzOiBbQXJyYXksIFN0cmluZywgTnVtYmVyLCBGdW5jdGlvbl0KKworcHJvdmlkZXM6IEpTT04KKworLi4uCisqLworCitpZiAodHlwZW9mIEpTT04gPT0gJ3VuZGVmaW5lZCcpIHRoaXMuSlNPTiA9IHt9OworCisKKworKGZ1bmN0aW9uKCl7CisKK3ZhciBzcGVjaWFsID0geydcYic6ICdcXGInLCAnXHQnOiAnXFx0JywgJ1xuJzogJ1xcbicsICdcZic6ICdcXGYnLCAnXHInOiAnXFxyJywgJyInIDogJ1xcIicsICdcXCc6ICdcXFxcJ307CisKK3ZhciBlc2NhcGUgPSBmdW5jdGlvbihjaHIpeworCXJldHVybiBzcGVjaWFsW2Nocl0gfHwgJ1xcdScgKyAoJzAwMDAnICsgY2hyLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7Cit9OworCitKU09OLnZhbGlkYXRlID0gZnVuY3Rpb24oc3RyaW5nKXsKKwlzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFwoPzpbIlxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLCAnQCcpLgorCQkJCQlyZXBsYWNlKC8iW14iXFxcblxyXSoifHRydWV8ZmFsc2V8bnVsbHwtP1xkKyg/OlwuXGQqKT8oPzpbZUVdWytcLV0/XGQrKT8vZywgJ10nKS4KKwkJCQkJcmVwbGFjZSgvKD86Xnw6fCwpKD86XHMqXFspKy9nLCAnJyk7CisKKwlyZXR1cm4gKC9eW1xdLDp7fVxzXSokLykudGVzdChzdHJpbmcpOworfTsKKworSlNPTi5lbmNvZGUgPSBKU09OLnN0cmluZ2lmeSA/IGZ1bmN0aW9uKG9iail7CisJcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7Cit9IDogZnVuY3Rpb24ob2JqKXsKKwlpZiAob2JqICYmIG9iai50b0pTT04pIG9iaiA9IG9iai50b0pTT04oKTsKKworCXN3aXRjaCAodHlwZU9mKG9iaikpeworCQljYXNlICdzdHJpbmcnOgorCQkJcmV0dXJuICciJyArIG9iai5yZXBsYWNlKC9bXHgwMC1ceDFmXFwiXS9nLCBlc2NhcGUpICsgJyInOworCQljYXNlICdhcnJheSc6CisJCQlyZXR1cm4gJ1snICsgb2JqLm1hcChKU09OLmVuY29kZSkuY2xlYW4oKSArICddJzsKKwkJY2FzZSAnb2JqZWN0JzogY2FzZSAnaGFzaCc6CisJCQl2YXIgc3RyaW5nID0gW107CisJCQlPYmplY3QuZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXkpeworCQkJCXZhciBqc29uID0gSlNPTi5lbmNvZGUodmFsdWUpOworCQkJCWlmIChqc29uKSBzdHJpbmcucHVzaChKU09OLmVuY29kZShrZXkpICsgJzonICsganNvbik7CisJCQl9KTsKKwkJCXJldHVybiAneycgKyBzdHJpbmcgKyAnfSc7CisJCWNhc2UgJ251bWJlcic6IGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJycgKyBvYmo7CisJCWNhc2UgJ251bGwnOiByZXR1cm4gJ251bGwnOworCX0KKworCXJldHVybiBudWxsOworfTsKKworSlNPTi5zZWN1cmUgPSB0cnVlOworCisKK0pTT04uZGVjb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBzZWN1cmUpeworCWlmICghc3RyaW5nIHx8IHR5cGVPZihzdHJpbmcpICE9ICdzdHJpbmcnKSByZXR1cm4gbnVsbDsKKworCWlmIChzZWN1cmUgPT0gbnVsbCkgc2VjdXJlID0gSlNPTi5zZWN1cmU7CisJaWYgKHNlY3VyZSl7CisJCWlmIChKU09OLnBhcnNlKSByZXR1cm4gSlNPTi5wYXJzZShzdHJpbmcpOworCQlpZiAoIUpTT04udmFsaWRhdGUoc3RyaW5nKSkgdGhyb3cgbmV3IEVycm9yKCdKU09OIGNvdWxkIG5vdCBkZWNvZGUgdGhlIGlucHV0OyBzZWN1cml0eSBpcyBlbmFibGVkIGFuZCB0aGUgdmFsdWUgaXMgbm90IHNlY3VyZS4nKTsKKwl9CisKKwlyZXR1cm4gZXZhbCgnKCcgKyBzdHJpbmcgKyAnKScpOworfTsKKworfSkoKTsKKworLyoKKy0tLQorCituYW1lOiBSZXF1ZXN0LkpTT04KKworZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIGJhc2ljIFJlcXVlc3QgQ2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBKU09OIGRhdGEuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCityZXF1aXJlczogW1JlcXVlc3QsIEpTT05dCisKK3Byb3ZpZGVzOiBSZXF1ZXN0LkpTT04KKworLi4uCisqLworCitSZXF1ZXN0LkpTT04gPSBuZXcgQ2xhc3MoeworCisJRXh0ZW5kczogUmVxdWVzdCwKKworCW9wdGlvbnM6IHsKKwkJLypvbkVycm9yOiBmdW5jdGlvbih0ZXh0LCBlcnJvcil7fSwqLworCQlzZWN1cmU6IHRydWUKKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXRoaXMucGFyZW50KG9wdGlvbnMpOworCQlPYmplY3QuYXBwZW5kKHRoaXMuaGVhZGVycywgeworCQkJJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJywKKwkJCSdYLVJlcXVlc3QnOiAnSlNPTicKKwkJfSk7CisJfSwKKworCXN1Y2Nlc3M6IGZ1bmN0aW9uKHRleHQpeworCQl2YXIganNvbjsKKwkJdHJ5IHsKKwkJCWpzb24gPSB0aGlzLnJlc3BvbnNlLmpzb24gPSBKU09OLmRlY29kZSh0ZXh0LCB0aGlzLm9wdGlvbnMuc2VjdXJlKTsKKwkJfSBjYXRjaCAoZXJyb3IpeworCQkJdGhpcy5maXJlRXZlbnQoJ2Vycm9yJywgW3RleHQsIGVycm9yXSk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKGpzb24gPT0gbnVsbCl7CisJCQl0aGlzLmZhaWx1cmUoKTsKKwkJfSBlbHNlIHsKKwkJCXRoaXMub25TdWNjZXNzKGpzb24sIHRleHQpOworCQkJdGhpcy5yZXNvbHZlKHtqc29uOiBqc29uLCB0ZXh0OiB0ZXh0fSk7CisJCX0KKwl9CisKK30pOworCisvKgorLS0tCisKK25hbWU6IENvb2tpZQorCitkZXNjcmlwdGlvbjogQ2xhc3MgZm9yIGNyZWF0aW5nLCByZWFkaW5nLCBhbmQgZGVsZXRpbmcgYnJvd3NlciBDb29raWVzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworY3JlZGl0czoKKyAgLSBCYXNlZCBvbiB0aGUgZnVuY3Rpb25zIGJ5IFBldGVyLVBhdWwgS29jaCAoaHR0cDovL3F1aXJrc21vZGUub3JnKS4KKworcmVxdWlyZXM6IFtPcHRpb25zLCBCcm93c2VyXQorCitwcm92aWRlczogQ29va2llCisKKy4uLgorKi8KKwordmFyIENvb2tpZSA9IG5ldyBDbGFzcyh7CisKKwlJbXBsZW1lbnRzOiBPcHRpb25zLAorCisJb3B0aW9uczogeworCQlwYXRoOiAnLycsCisJCWRvbWFpbjogZmFsc2UsCisJCWR1cmF0aW9uOiBmYWxzZSwKKwkJc2VjdXJlOiBmYWxzZSwKKwkJZG9jdW1lbnQ6IGRvY3VtZW50LAorCQllbmNvZGU6IHRydWUsCisJCWh0dHBPbmx5OiBmYWxzZQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihrZXksIG9wdGlvbnMpeworCQl0aGlzLmtleSA9IGtleTsKKwkJdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpOworCX0sCisKKwl3cml0ZTogZnVuY3Rpb24odmFsdWUpeworCQlpZiAodGhpcy5vcHRpb25zLmVuY29kZSkgdmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpOworCQlpZiAodGhpcy5vcHRpb25zLmRvbWFpbikgdmFsdWUgKz0gJzsgZG9tYWluPScgKyB0aGlzLm9wdGlvbnMuZG9tYWluOworCQlpZiAodGhpcy5vcHRpb25zLnBhdGgpIHZhbHVlICs9ICc7IHBhdGg9JyArIHRoaXMub3B0aW9ucy5wYXRoOworCQlpZiAodGhpcy5vcHRpb25zLmR1cmF0aW9uKXsKKwkJCXZhciBkYXRlID0gbmV3IERhdGUoKTsKKwkJCWRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIDI0ICogNjAgKiA2MCAqIDEwMDApOworCQkJdmFsdWUgKz0gJzsgZXhwaXJlcz0nICsgZGF0ZS50b0dNVFN0cmluZygpOworCQl9CisJCWlmICh0aGlzLm9wdGlvbnMuc2VjdXJlKSB2YWx1ZSArPSAnOyBzZWN1cmUnOworCQlpZiAodGhpcy5vcHRpb25zLmh0dHBPbmx5KSB2YWx1ZSArPSAnOyBIdHRwT25seSc7CisJCXRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29raWUgPSB0aGlzLmtleSArICc9JyArIHZhbHVlOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVhZDogZnVuY3Rpb24oKXsKKwkJdmFyIHZhbHVlID0gdGhpcy5vcHRpb25zLmRvY3VtZW50LmNvb2tpZS5tYXRjaCgnKD86Xnw7KVxccyonICsgdGhpcy5rZXkuZXNjYXBlUmVnRXhwKCkgKyAnPShbXjtdKiknKTsKKwkJcmV0dXJuICh2YWx1ZSkgPyBkZWNvZGVVUklDb21wb25lbnQodmFsdWVbMV0pIDogbnVsbDsKKwl9LAorCisJZGlzcG9zZTogZnVuY3Rpb24oKXsKKwkJbmV3IENvb2tpZSh0aGlzLmtleSwgT2JqZWN0Lm1lcmdlKHt9LCB0aGlzLm9wdGlvbnMsIHtkdXJhdGlvbjogLTF9KSkud3JpdGUoJycpOworCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCitDb29raWUud3JpdGUgPSBmdW5jdGlvbihrZXksIHZhbHVlLCBvcHRpb25zKXsKKwlyZXR1cm4gbmV3IENvb2tpZShrZXksIG9wdGlvbnMpLndyaXRlKHZhbHVlKTsKK307CisKK0Nvb2tpZS5yZWFkID0gZnVuY3Rpb24oa2V5KXsKKwlyZXR1cm4gbmV3IENvb2tpZShrZXkpLnJlYWQoKTsKK307CisKK0Nvb2tpZS5kaXNwb3NlID0gZnVuY3Rpb24oa2V5LCBvcHRpb25zKXsKKwlyZXR1cm4gbmV3IENvb2tpZShrZXksIG9wdGlvbnMpLmRpc3Bvc2UoKTsKK307CisKKy8qCistLS0KKworbmFtZTogRE9NUmVhZHkKKworZGVzY3JpcHRpb246IENvbnRhaW5zIHRoZSBjdXN0b20gZXZlbnQgZG9tcmVhZHkuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCityZXF1aXJlczogW0Jyb3dzZXIsIEVsZW1lbnQsIEVsZW1lbnQuRXZlbnRdCisKK3Byb3ZpZGVzOiBbRE9NUmVhZHksIERvbVJlYWR5XQorCisuLi4KKyovCisKKyhmdW5jdGlvbih3aW5kb3csIGRvY3VtZW50KXsKKwordmFyIHJlYWR5LAorCWxvYWRlZCwKKwljaGVja3MgPSBbXSwKKwlzaG91bGRQb2xsLAorCXRpbWVyLAorCXRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisKK3ZhciBkb21yZWFkeSA9IGZ1bmN0aW9uKCl7CisJY2xlYXJUaW1lb3V0KHRpbWVyKTsKKwlpZiAoIXJlYWR5KXsKKwkJQnJvd3Nlci5sb2FkZWQgPSByZWFkeSA9IHRydWU7CisJCWRvY3VtZW50LnJlbW92ZUxpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpLnJlbW92ZUxpc3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdlJywgY2hlY2spOworCQlkb2N1bWVudC5maXJlRXZlbnQoJ2RvbXJlYWR5Jyk7CisJCXdpbmRvdy5maXJlRXZlbnQoJ2RvbXJlYWR5Jyk7CisJfQorCS8vIGNsZWFudXAgc2NvcGUgdmFycworCWRvY3VtZW50ID0gd2luZG93ID0gdGVzdEVsZW1lbnQgPSBudWxsOworfTsKKwordmFyIGNoZWNrID0gZnVuY3Rpb24oKXsKKwlmb3IgKHZhciBpID0gY2hlY2tzLmxlbmd0aDsgaS0tOykgaWYgKGNoZWNrc1tpXSgpKXsKKwkJZG9tcmVhZHkoKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK307CisKK3ZhciBwb2xsID0gZnVuY3Rpb24oKXsKKwljbGVhclRpbWVvdXQodGltZXIpOworCWlmICghY2hlY2soKSkgdGltZXIgPSBzZXRUaW1lb3V0KHBvbGwsIDEwKTsKK307CisKK2RvY3VtZW50LmFkZExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tcmVhZHkpOworCisvKjxsdElFOD4qLworLy8gZG9TY3JvbGwgdGVjaG5pcXVlIGJ5IERpZWdvIFBlcmluaSBodHRwOi8vamF2YXNjcmlwdC5ud2JveC5jb20vSUVDb250ZW50TG9hZGVkLworLy8gdGVzdEVsZW1lbnQuZG9TY3JvbGwoKSB0aHJvd3Mgd2hlbiB0aGUgRE9NIGlzIG5vdCByZWFkeSwgb25seSBpbiB0aGUgdG9wIHdpbmRvdwordmFyIGRvU2Nyb2xsV29ya3MgPSBmdW5jdGlvbigpeworCXRyeSB7CisJCXRlc3RFbGVtZW50LmRvU2Nyb2xsKCk7CisJCXJldHVybiB0cnVlOworCX0gY2F0Y2ggKGUpe30KKwlyZXR1cm4gZmFsc2U7Cit9OworLy8gSWYgZG9TY3JvbGwgd29ya3MgYWxyZWFkeSwgaXQgY2FuJ3QgYmUgdXNlZCB0byBkZXRlcm1pbmUgZG9tcmVhZHkKKy8vICAgZS5nLiBpbiBhbiBpZnJhbWUKK2lmICh0ZXN0RWxlbWVudC5kb1Njcm9sbCAmJiAhZG9TY3JvbGxXb3JrcygpKXsKKwljaGVja3MucHVzaChkb1Njcm9sbFdvcmtzKTsKKwlzaG91bGRQb2xsID0gdHJ1ZTsKK30KKy8qPC9sdElFOD4qLworCitpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSkgY2hlY2tzLnB1c2goZnVuY3Rpb24oKXsKKwl2YXIgc3RhdGUgPSBkb2N1bWVudC5yZWFkeVN0YXRlOworCXJldHVybiAoc3RhdGUgPT0gJ2xvYWRlZCcgfHwgc3RhdGUgPT0gJ2NvbXBsZXRlJyk7Cit9KTsKKworaWYgKCdvbnJlYWR5c3RhdGVjaGFuZ2UnIGluIGRvY3VtZW50KSBkb2N1bWVudC5hZGRMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIGNoZWNrKTsKK2Vsc2Ugc2hvdWxkUG9sbCA9IHRydWU7CisKK2lmIChzaG91bGRQb2xsKSBwb2xsKCk7CisKK0VsZW1lbnQuRXZlbnRzLmRvbXJlYWR5ID0geworCW9uQWRkOiBmdW5jdGlvbihmbil7CisJCWlmIChyZWFkeSkgZm4uY2FsbCh0aGlzKTsKKwl9Cit9OworCisvLyBNYWtlIHN1cmUgdGhhdCBkb21yZWFkeSBmaXJlcyBiZWZvcmUgbG9hZAorRWxlbWVudC5FdmVudHMubG9hZCA9IHsKKwliYXNlOiAnbG9hZCcsCisJb25BZGQ6IGZ1bmN0aW9uKGZuKXsKKwkJaWYgKGxvYWRlZCAmJiB0aGlzID09IHdpbmRvdykgZm4uY2FsbCh0aGlzKTsKKwl9LAorCWNvbmRpdGlvbjogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMgPT0gd2luZG93KXsKKwkJCWRvbXJlYWR5KCk7CisJCQlkZWxldGUgRWxlbWVudC5FdmVudHMubG9hZDsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9OworCisvLyBUaGlzIGlzIGJhc2VkIG9uIHRoZSBjdXN0b20gbG9hZCBldmVudAord2luZG93LmFkZEV2ZW50KCdsb2FkJywgZnVuY3Rpb24oKXsKKwlsb2FkZWQgPSB0cnVlOworfSk7CisKK30pKHdpbmRvdywgZG9jdW1lbnQpOwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGlicmFyaWVzL01vb1Rvb2xzLU1vcmUtMS4zLjNkZXYuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9saWJyYXJpZXMvTW9vVG9vbHMtTW9yZS0xLjMuM2Rldi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDhkZjA0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGlicmFyaWVzL01vb1Rvb2xzLU1vcmUtMS4zLjNkZXYuanMKQEAgLTAsMCArMSwxMzU0MyBAQAorLyoKKy0tLQorCitzY3JpcHQ6IE1vcmUuanMKKworbmFtZTogTW9yZQorCitkZXNjcmlwdGlvbjogTW9vVG9vbHMgTW9yZQorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEd1aWxsZXJtbyBSYXVjaAorICAtIFRob21hcyBBeWxvdHQKKyAgLSBTY290dCBLeWxlCisgIC0gQXJpYW4gU3RvbHdpamsKKyAgLSBUaW0gV2llbmsKKyAgLSBDaHJpc3RvcGggUG9qZXIKKyAgLSBBYXJvbiBOZXd0b24KKyAgLSBKYWNvYiBUaG9ybnRvbgorCityZXF1aXJlczoKKyAgLSBDb3JlL01vb1Rvb2xzCisKK3Byb3ZpZGVzOiBbTW9vVG9vbHMuTW9yZV0KKworLi4uCisqLworCitNb29Ub29scy5Nb3JlID0geworCSd2ZXJzaW9uJzogJzEuMy4yLjJkZXYnLAorCSdidWlsZCc6ICdiNmRjYmRjYzgyMWZiZjYyNDA0ZWY0M2YzMzJmNWM1OTRhYzc2YTNhJworfTsKKworCisvKgorLS0tCisKK25hbWU6IEV2ZW50cy5Qc2V1ZG9zCisKK2Rlc2NyaXB0aW9uOiBBZGRzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGFkZCBwc2V1ZG8gZXZlbnRzCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQXJpYW4gU3RvbHdpamsKKworcmVxdWlyZXM6IFtDb3JlL0NsYXNzLkV4dHJhcywgQ29yZS9TbGljay5QYXJzZXIsIE1vcmUvTW9vVG9vbHMuTW9yZV0KKworcHJvdmlkZXM6IFtFdmVudHMuUHNldWRvc10KKworLi4uCisqLworCitFdmVudHMuUHNldWRvcyA9IGZ1bmN0aW9uKHBzZXVkb3MsIGFkZEV2ZW50LCByZW1vdmVFdmVudCl7CisKKwl2YXIgc3RvcmVLZXkgPSAnbW9uaXRvckV2ZW50czonOworCisJdmFyIHN0b3JhZ2VPZiA9IGZ1bmN0aW9uKG9iamVjdCl7CisJCXJldHVybiB7CisJCQlzdG9yZTogb2JqZWN0LnN0b3JlID8gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7CisJCQkJb2JqZWN0LnN0b3JlKHN0b3JlS2V5ICsga2V5LCB2YWx1ZSk7CisJCQl9IDogZnVuY3Rpb24oa2V5LCB2YWx1ZSl7CisJCQkJKG9iamVjdC4kbW9uaXRvckV2ZW50cyB8fCAob2JqZWN0LiRtb25pdG9yRXZlbnRzID0ge30pKVtrZXldID0gdmFsdWU7CisJCQl9LAorCQkJcmV0cmlldmU6IG9iamVjdC5yZXRyaWV2ZSA/IGZ1bmN0aW9uKGtleSwgZGZsdCl7CisJCQkJcmV0dXJuIG9iamVjdC5yZXRyaWV2ZShzdG9yZUtleSArIGtleSwgZGZsdCk7CisJCQl9IDogZnVuY3Rpb24oa2V5LCBkZmx0KXsKKwkJCQlpZiAoIW9iamVjdC4kbW9uaXRvckV2ZW50cykgcmV0dXJuIGRmbHQ7CisJCQkJcmV0dXJuIG9iamVjdC4kbW9uaXRvckV2ZW50c1trZXldIHx8IGRmbHQ7CisJCQl9CisJCX07CisJfTsKKworCXZhciBzcGxpdFR5cGUgPSBmdW5jdGlvbih0eXBlKXsKKwkJaWYgKHR5cGUuaW5kZXhPZignOicpID09IC0xIHx8ICFwc2V1ZG9zKSByZXR1cm4gbnVsbDsKKworCQl2YXIgcGFyc2VkID0gU2xpY2sucGFyc2UodHlwZSkuZXhwcmVzc2lvbnNbMF1bMF0sCisJCQlwYXJzZWRQc2V1ZG9zID0gcGFyc2VkLnBzZXVkb3MsCisJCQlsID0gcGFyc2VkUHNldWRvcy5sZW5ndGgsCisJCQlzcGxpdHMgPSBbXTsKKworCQl3aGlsZSAobC0tKSBpZiAocHNldWRvc1twYXJzZWRQc2V1ZG9zW2xdLmtleV0peworCQkJc3BsaXRzLnB1c2goeworCQkJCWV2ZW50OiBwYXJzZWQudGFnLAorCQkJCXZhbHVlOiBwYXJzZWRQc2V1ZG9zW2xdLnZhbHVlLAorCQkJCXBzZXVkbzogcGFyc2VkUHNldWRvc1tsXS5rZXksCisJCQkJb3JpZ2luYWw6IHR5cGUKKwkJCX0pOworCQl9CisKKwkJcmV0dXJuIHNwbGl0cy5sZW5ndGggPyBzcGxpdHMgOiBudWxsOworCX07CisKKwl2YXIgbWVyZ2VQc2V1ZG9PcHRpb25zID0gZnVuY3Rpb24oc3BsaXQpeworCQlyZXR1cm4gT2JqZWN0Lm1lcmdlLmFwcGx5KHRoaXMsIHNwbGl0Lm1hcChmdW5jdGlvbihpdGVtKXsKKwkJCXJldHVybiBwc2V1ZG9zW2l0ZW0ucHNldWRvXS5vcHRpb25zIHx8IHt9OworCQl9KSk7CisJfTsKKworCXJldHVybiB7CisKKwkJYWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuLCBpbnRlcm5hbCl7CisJCQl2YXIgc3BsaXQgPSBzcGxpdFR5cGUodHlwZSk7CisJCQlpZiAoIXNwbGl0KSByZXR1cm4gYWRkRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgaW50ZXJuYWwpOworCisJCQl2YXIgc3RvcmFnZSA9IHN0b3JhZ2VPZih0aGlzKSwKKwkJCQlldmVudHMgPSBzdG9yYWdlLnJldHJpZXZlKHR5cGUsIFtdKSwKKwkJCQlldmVudFR5cGUgPSBzcGxpdFswXS5ldmVudCwKKwkJCQlvcHRpb25zID0gbWVyZ2VQc2V1ZG9PcHRpb25zKHNwbGl0KSwKKwkJCQlzdGFjayA9IGZuLAorCQkJCWV2ZW50T3B0aW9ucyA9IG9wdGlvbnNbZXZlbnRUeXBlXSB8fCB7fSwKKwkJCQlhcmdzID0gQXJyYXkuc2xpY2UoYXJndW1lbnRzLCAyKSwKKwkJCQlzZWxmID0gdGhpcywKKwkJCQltb25pdG9yOworCisJCQlpZiAoZXZlbnRPcHRpb25zLmFyZ3MpIGFyZ3MuYXBwZW5kKEFycmF5LmZyb20oZXZlbnRPcHRpb25zLmFyZ3MpKTsKKwkJCWlmIChldmVudE9wdGlvbnMuYmFzZSkgZXZlbnRUeXBlID0gZXZlbnRPcHRpb25zLmJhc2U7CisJCQlpZiAoZXZlbnRPcHRpb25zLm9uQWRkKSBldmVudE9wdGlvbnMub25BZGQodGhpcyk7CisKKwkJCXNwbGl0LmVhY2goZnVuY3Rpb24oaXRlbSl7CisJCQkJdmFyIHN0YWNrRm4gPSBzdGFjazsKKwkJCQlzdGFjayA9IGZ1bmN0aW9uKCl7CisJCQkJCShldmVudE9wdGlvbnMubGlzdGVuZXIgfHwgcHNldWRvc1tpdGVtLnBzZXVkb10ubGlzdGVuZXIpLmNhbGwoc2VsZiwgaXRlbSwgc3RhY2tGbiwgYXJndW1lbnRzLCBtb25pdG9yLCBvcHRpb25zKTsKKwkJCQl9OworCQkJfSk7CisJCQltb25pdG9yID0gc3RhY2suYmluZCh0aGlzKTsKKworCQkJZXZlbnRzLmluY2x1ZGUoe2V2ZW50OiBmbiwgbW9uaXRvcjogbW9uaXRvcn0pOworCQkJc3RvcmFnZS5zdG9yZSh0eXBlLCBldmVudHMpOworCisJCQlhZGRFdmVudC5hcHBseSh0aGlzLCBbdHlwZSwgZm5dLmNvbmNhdChhcmdzKSk7CisJCQlyZXR1cm4gYWRkRXZlbnQuYXBwbHkodGhpcywgW2V2ZW50VHlwZSwgbW9uaXRvcl0uY29uY2F0KGFyZ3MpKTsKKwkJfSwKKworCQlyZW1vdmVFdmVudDogZnVuY3Rpb24odHlwZSwgZm4peworCQkJdmFyIHNwbGl0ID0gc3BsaXRUeXBlKHR5cGUpOworCQkJaWYgKCFzcGxpdCkgcmV0dXJuIHJlbW92ZUV2ZW50LmNhbGwodGhpcywgdHlwZSwgZm4pOworCisJCQl2YXIgc3RvcmFnZSA9IHN0b3JhZ2VPZih0aGlzKSwKKwkJCQlldmVudHMgPSBzdG9yYWdlLnJldHJpZXZlKHR5cGUpOworCQkJaWYgKCFldmVudHMpIHJldHVybiB0aGlzOworCisJCQl2YXIgZXZlbnRUeXBlID0gc3BsaXRbMF0uZXZlbnQsCisJCQkJb3B0aW9ucyA9IG1lcmdlUHNldWRvT3B0aW9ucyhzcGxpdCksCisJCQkJZXZlbnRPcHRpb25zID0gb3B0aW9uc1tldmVudFR5cGVdIHx8IHt9LAorCQkJCWFyZ3MgPSBBcnJheS5zbGljZShhcmd1bWVudHMsIDIpOworCisJCQlpZiAoZXZlbnRPcHRpb25zLmFyZ3MpIGFyZ3MuYXBwZW5kKEFycmF5LmZyb20oZXZlbnRPcHRpb25zLmFyZ3MpKTsKKwkJCWlmIChldmVudE9wdGlvbnMuYmFzZSkgZXZlbnRUeXBlID0gZXZlbnRPcHRpb25zLmJhc2U7CisJCQlpZiAoZXZlbnRPcHRpb25zLm9uUmVtb3ZlKSBldmVudE9wdGlvbnMub25SZW1vdmUodGhpcyk7CisKKwkJCXJlbW92ZUV2ZW50LmFwcGx5KHRoaXMsIFt0eXBlLCBmbl0uY29uY2F0KGFyZ3MpKTsKKwkJCWV2ZW50cy5lYWNoKGZ1bmN0aW9uKG1vbml0b3IsIGkpeworCQkJCWlmICghZm4gfHwgbW9uaXRvci5ldmVudCA9PSBmbikgcmVtb3ZlRXZlbnQuYXBwbHkodGhpcywgW2V2ZW50VHlwZSwgbW9uaXRvci5tb25pdG9yXS5jb25jYXQoYXJncykpOworCQkJCWRlbGV0ZSBldmVudHNbaV07CisJCQl9LCB0aGlzKTsKKworCQkJc3RvcmFnZS5zdG9yZSh0eXBlLCBldmVudHMpOworCQkJcmV0dXJuIHRoaXM7CisJCX0KKworCX07CisKK307CisKKyhmdW5jdGlvbigpeworCit2YXIgcHNldWRvcyA9IHsKKworCW9uY2U6IHsKKwkJbGlzdGVuZXI6IGZ1bmN0aW9uKHNwbGl0LCBmbiwgYXJncywgbW9uaXRvcil7CisJCQlmbi5hcHBseSh0aGlzLCBhcmdzKTsKKwkJCXRoaXMucmVtb3ZlRXZlbnQoc3BsaXQuZXZlbnQsIG1vbml0b3IpCisJCQkJLnJlbW92ZUV2ZW50KHNwbGl0Lm9yaWdpbmFsLCBmbik7CisJCX0KKwl9LAorCisJdGhyb3R0bGU6IHsKKwkJbGlzdGVuZXI6IGZ1bmN0aW9uKHNwbGl0LCBmbiwgYXJncyl7CisJCQlpZiAoIWZuLl90aHJvdHRsZWQpeworCQkJCWZuLmFwcGx5KHRoaXMsIGFyZ3MpOworCQkJCWZuLl90aHJvdHRsZWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CisJCQkJCWZuLl90aHJvdHRsZWQgPSBmYWxzZTsKKwkJCQl9LCBzcGxpdC52YWx1ZSB8fCAyNTApOworCQkJfQorCQl9CisJfSwKKworCXBhdXNlOiB7CisJCWxpc3RlbmVyOiBmdW5jdGlvbihzcGxpdCwgZm4sIGFyZ3MpeworCQkJY2xlYXJUaW1lb3V0KGZuLl9wYXVzZSk7CisJCQlmbi5fcGF1c2UgPSBmbi5kZWxheShzcGxpdC52YWx1ZSB8fCAyNTAsIHRoaXMsIGFyZ3MpOworCQl9CisJfQorCit9OworCitFdmVudHMuZGVmaW5lUHNldWRvID0gZnVuY3Rpb24oa2V5LCBsaXN0ZW5lcil7CisJcHNldWRvc1trZXldID0gVHlwZS5pc0Z1bmN0aW9uKGxpc3RlbmVyKSA/IHtsaXN0ZW5lcjogbGlzdGVuZXJ9IDogbGlzdGVuZXI7CisJcmV0dXJuIHRoaXM7Cit9OworCitFdmVudHMubG9va3VwUHNldWRvID0gZnVuY3Rpb24oa2V5KXsKKwlyZXR1cm4gcHNldWRvc1trZXldOworfTsKKwordmFyIHByb3RvID0gRXZlbnRzLnByb3RvdHlwZTsKK0V2ZW50cy5pbXBsZW1lbnQoRXZlbnRzLlBzZXVkb3MocHNldWRvcywgcHJvdG8uYWRkRXZlbnQsIHByb3RvLnJlbW92ZUV2ZW50KSk7CisKK1snUmVxdWVzdCcsICdGeCddLmVhY2goZnVuY3Rpb24oa2xhc3MpeworCWlmICh0aGlzW2tsYXNzXSkgdGhpc1trbGFzc10uaW1wbGVtZW50KEV2ZW50cy5wcm90b3R5cGUpOworfSk7CisKK30pKCk7CisKKworLyoKKy0tLQorCitzY3JpcHQ6IENsYXNzLlJlZmFjdG9yLmpzCisKK25hbWU6IENsYXNzLlJlZmFjdG9yCisKK2Rlc2NyaXB0aW9uOiBFeHRlbmRzIGEgY2xhc3Mgb250byBpdHNlbGYgd2l0aCBuZXcgcHJvcGVydHksIHByZXNlcnZpbmcgYW55IGl0ZW1zIGF0dGFjaGVkIHRvIHRoZSBjbGFzcydzIG5hbWVzcGFjZS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9DbGFzcworICAtIC9Nb29Ub29scy5Nb3JlCisKKyMgU29tZSBtb2R1bGVzIGRlY2xhcmUgdGhlbXNlbHZlcyBkZXBlbmRlbnQgb24gQ2xhc3MuUmVmYWN0b3IKK3Byb3ZpZGVzOiBbQ2xhc3MucmVmYWN0b3IsIENsYXNzLlJlZmFjdG9yXQorCisuLi4KKyovCisKK0NsYXNzLnJlZmFjdG9yID0gZnVuY3Rpb24ob3JpZ2luYWwsIHJlZmFjdG9ycyl7CisKKwlPYmplY3QuZWFjaChyZWZhY3RvcnMsIGZ1bmN0aW9uKGl0ZW0sIG5hbWUpeworCQl2YXIgb3JpZ2luID0gb3JpZ2luYWwucHJvdG90eXBlW25hbWVdOworCQlvcmlnaW4gPSAob3JpZ2luICYmIG9yaWdpbi4kb3JpZ2luKSB8fCBvcmlnaW4gfHwgZnVuY3Rpb24oKXt9OworCQlvcmlnaW5hbC5pbXBsZW1lbnQobmFtZSwgKHR5cGVvZiBpdGVtID09ICdmdW5jdGlvbicpID8gZnVuY3Rpb24oKXsKKwkJCXZhciBvbGQgPSB0aGlzLnByZXZpb3VzOworCQkJdGhpcy5wcmV2aW91cyA9IG9yaWdpbjsKKwkJCXZhciB2YWx1ZSA9IGl0ZW0uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKwkJCXRoaXMucHJldmlvdXMgPSBvbGQ7CisJCQlyZXR1cm4gdmFsdWU7CisJCX0gOiBpdGVtKTsKKwl9KTsKKworCXJldHVybiBvcmlnaW5hbDsKKworfTsKKworCisvKgorLS0tCisKK3NjcmlwdDogQ2xhc3MuQmluZHMuanMKKworbmFtZTogQ2xhc3MuQmluZHMKKworZGVzY3JpcHRpb246IEF1dG9tYWdpY2FsbHkgYmluZHMgc3BlY2lmaWVkIG1ldGhvZHMgaW4gYSBjbGFzcyB0byB0aGUgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSBDb3JlL0NsYXNzCisgIC0gL01vb1Rvb2xzLk1vcmUKKworcHJvdmlkZXM6IFtDbGFzcy5CaW5kc10KKworLi4uCisqLworCitDbGFzcy5NdXRhdG9ycy5CaW5kcyA9IGZ1bmN0aW9uKGJpbmRzKXsKKwlpZiAoIXRoaXMucHJvdG90eXBlLmluaXRpYWxpemUpIHRoaXMuaW1wbGVtZW50KCdpbml0aWFsaXplJywgZnVuY3Rpb24oKXt9KTsKKwlyZXR1cm4gQXJyYXkuZnJvbShiaW5kcykuY29uY2F0KHRoaXMucHJvdG90eXBlLkJpbmRzIHx8IFtdKTsKK307CisKK0NsYXNzLk11dGF0b3JzLmluaXRpYWxpemUgPSBmdW5jdGlvbihpbml0aWFsaXplKXsKKwlyZXR1cm4gZnVuY3Rpb24oKXsKKwkJQXJyYXkuZnJvbSh0aGlzLkJpbmRzKS5lYWNoKGZ1bmN0aW9uKG5hbWUpeworCQkJdmFyIG9yaWdpbmFsID0gdGhpc1tuYW1lXTsKKwkJCWlmIChvcmlnaW5hbCkgdGhpc1tuYW1lXSA9IG9yaWdpbmFsLmJpbmQodGhpcyk7CisJCX0sIHRoaXMpOworCQlyZXR1cm4gaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCX07Cit9OworCisKKy8qCistLS0KKworc2NyaXB0OiBDbGFzcy5PY2NsdWRlLmpzCisKK25hbWU6IENsYXNzLk9jY2x1ZGUKKworZGVzY3JpcHRpb246IFByZXZlbnRzIGEgY2xhc3MgZnJvbSBiZWluZyBhcHBsaWVkIHRvIGEgRE9NIGVsZW1lbnQgdHdpY2UuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCithdXRob3JzOgorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSBDb3JlL0NsYXNzCisgIC0gQ29yZS9FbGVtZW50CisgIC0gL01vb1Rvb2xzLk1vcmUKKworcHJvdmlkZXM6IFtDbGFzcy5PY2NsdWRlXQorCisuLi4KKyovCisKK0NsYXNzLk9jY2x1ZGUgPSBuZXcgQ2xhc3MoeworCisJb2NjbHVkZTogZnVuY3Rpb24ocHJvcGVydHksIGVsZW1lbnQpeworCQllbGVtZW50ID0gZG9jdW1lbnQuaWQoZWxlbWVudCB8fCB0aGlzLmVsZW1lbnQpOworCQl2YXIgaW5zdGFuY2UgPSBlbGVtZW50LnJldHJpZXZlKHByb3BlcnR5IHx8IHRoaXMucHJvcGVydHkpOworCQlpZiAoaW5zdGFuY2UgJiYgIXRoaXMub2NjbHVkZWQpCisJCQlyZXR1cm4gKHRoaXMub2NjbHVkZWQgPSBpbnN0YW5jZSk7CisKKwkJdGhpcy5vY2NsdWRlZCA9IGZhbHNlOworCQllbGVtZW50LnN0b3JlKHByb3BlcnR5IHx8IHRoaXMucHJvcGVydHksIHRoaXMpOworCQlyZXR1cm4gdGhpcy5vY2NsdWRlZDsKKwl9CisKK30pOworCisKKy8qCistLS0KKworc2NyaXB0OiBDaGFpbi5XYWl0LmpzCisKK25hbWU6IENoYWluLldhaXQKKworZGVzY3JpcHRpb246IHZhbHVlLCBBZGRzIGEgbWV0aG9kIHRvIGluamVjdCBwYXVzZXMgYmV0d2VlbiBjaGFpbmVkIGV2ZW50cy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisKK3JlcXVpcmVzOgorICAtIENvcmUvQ2hhaW4KKyAgLSBDb3JlL0VsZW1lbnQKKyAgLSBDb3JlL0Z4CisgIC0gL01vb1Rvb2xzLk1vcmUKKworcHJvdmlkZXM6IFtDaGFpbi5XYWl0XQorCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCisJdmFyIHdhaXQgPSB7CisJCXdhaXQ6IGZ1bmN0aW9uKGR1cmF0aW9uKXsKKwkJCXJldHVybiB0aGlzLmNoYWluKGZ1bmN0aW9uKCl7CisJCQkJdGhpcy5jYWxsQ2hhaW4uZGVsYXkoZHVyYXRpb24gPT0gbnVsbCA/IDUwMCA6IGR1cmF0aW9uLCB0aGlzKTsKKwkJCQlyZXR1cm4gdGhpczsKKwkJCX0uYmluZCh0aGlzKSk7CisJCX0KKwl9OworCisJQ2hhaW4uaW1wbGVtZW50KHdhaXQpOworCisJaWYgKHRoaXMuRngpIEZ4LmltcGxlbWVudCh3YWl0KTsKKworCWlmICh0aGlzLkVsZW1lbnQgJiYgRWxlbWVudC5pbXBsZW1lbnQgJiYgdGhpcy5GeCl7CisJCUVsZW1lbnQuaW1wbGVtZW50KHsKKworCQkJY2hhaW5zOiBmdW5jdGlvbihlZmZlY3RzKXsKKwkJCQlBcnJheS5mcm9tKGVmZmVjdHMgfHwgWyd0d2VlbicsICdtb3JwaCcsICdyZXZlYWwnXSkuZWFjaChmdW5jdGlvbihlZmZlY3QpeworCQkJCQllZmZlY3QgPSB0aGlzLmdldChlZmZlY3QpOworCQkJCQlpZiAoIWVmZmVjdCkgcmV0dXJuOworCQkJCQllZmZlY3Quc2V0T3B0aW9ucyh7CisJCQkJCQlsaW5rOidjaGFpbicKKwkJCQkJfSk7CisJCQkJfSwgdGhpcyk7CisJCQkJcmV0dXJuIHRoaXM7CisJCQl9LAorCisJCQlwYXVzZUZ4OiBmdW5jdGlvbihkdXJhdGlvbiwgZWZmZWN0KXsKKwkJCQl0aGlzLmNoYWlucyhlZmZlY3QpLmdldChlZmZlY3QgfHwgJ3R3ZWVuJykud2FpdChkdXJhdGlvbik7CisJCQkJcmV0dXJuIHRoaXM7CisJCQl9CisKKwkJfSk7CisJfQorCit9KSgpOworCisKKy8qCistLS0KKworc2NyaXB0OiBBcnJheS5FeHRyYXMuanMKKworbmFtZTogQXJyYXkuRXh0cmFzCisKK2Rlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBBcnJheSBuYXRpdmUgb2JqZWN0IHRvIGluY2x1ZGUgdXNlZnVsIG1ldGhvZHMgdG8gd29yayB3aXRoIGFycmF5cy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBDaHJpc3RvcGggUG9qZXIKKyAgLSBTZWJhc3RpYW4gTWFya2LDpWdlCisKK3JlcXVpcmVzOgorICAtIENvcmUvQXJyYXkKKyAgLSBNb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbQXJyYXkuRXh0cmFzXQorCisuLi4KKyovCisKKyhmdW5jdGlvbihuaWwpeworCitBcnJheS5pbXBsZW1lbnQoeworCisJbWluOiBmdW5jdGlvbigpeworCQlyZXR1cm4gTWF0aC5taW4uYXBwbHkobnVsbCwgdGhpcyk7CisJfSwKKworCW1heDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsIHRoaXMpOworCX0sCisKKwlhdmVyYWdlOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5sZW5ndGggPyB0aGlzLnN1bSgpIC8gdGhpcy5sZW5ndGggOiAwOworCX0sCisKKwlzdW06IGZ1bmN0aW9uKCl7CisJCXZhciByZXN1bHQgPSAwLCBsID0gdGhpcy5sZW5ndGg7CisJCWlmIChsKXsKKwkJCXdoaWxlIChsLS0pIHJlc3VsdCArPSB0aGlzW2xdOworCQl9CisJCXJldHVybiByZXN1bHQ7CisJfSwKKworCXVuaXF1ZTogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIFtdLmNvbWJpbmUodGhpcyk7CisJfSwKKworCXNodWZmbGU6IGZ1bmN0aW9uKCl7CisJCWZvciAodmFyIGkgPSB0aGlzLmxlbmd0aDsgaSAmJiAtLWk7KXsKKwkJCXZhciB0ZW1wID0gdGhpc1tpXSwgciA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqICggaSArIDEgKSk7CisJCQl0aGlzW2ldID0gdGhpc1tyXTsKKwkJCXRoaXNbcl0gPSB0ZW1wOworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwlyZWR1Y2U6IGZ1bmN0aW9uKGZuLCB2YWx1ZSl7CisJCWZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspeworCQkJaWYgKGkgaW4gdGhpcykgdmFsdWUgPSB2YWx1ZSA9PT0gbmlsID8gdGhpc1tpXSA6IGZuLmNhbGwobnVsbCwgdmFsdWUsIHRoaXNbaV0sIGksIHRoaXMpOworCQl9CisJCXJldHVybiB2YWx1ZTsKKwl9LAorCisJcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uKGZuLCB2YWx1ZSl7CisJCXZhciBpID0gdGhpcy5sZW5ndGg7CisJCXdoaWxlIChpLS0peworCQkJaWYgKGkgaW4gdGhpcykgdmFsdWUgPSB2YWx1ZSA9PT0gbmlsID8gdGhpc1tpXSA6IGZuLmNhbGwobnVsbCwgdmFsdWUsIHRoaXNbaV0sIGksIHRoaXMpOworCQl9CisJCXJldHVybiB2YWx1ZTsKKwl9CisKK30pOworCit9KSgpOworCisKKy8qCistLS0KKworc2NyaXB0OiBPYmplY3QuRXh0cmFzLmpzCisKK25hbWU6IE9iamVjdC5FeHRyYXMKKworZGVzY3JpcHRpb246IEV4dHJhIE9iamVjdCBnZW5lcmljcywgbGlrZSBnZXRGcm9tUGF0aCB3aGljaCBhbGxvd3MgYSBwYXRoIG5vdGF0aW9uIHRvIGNoaWxkIGVsZW1lbnRzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSBDb3JlL09iamVjdAorICAtIC9Nb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbT2JqZWN0LkV4dHJhc10KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIGRlZmluZWQgPSBmdW5jdGlvbih2YWx1ZSl7CisJcmV0dXJuIHZhbHVlICE9IG51bGw7Cit9OworCit2YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OworCitPYmplY3QuZXh0ZW5kKHsKKworCWdldEZyb21QYXRoOiBmdW5jdGlvbihzb3VyY2UsIHBhcnRzKXsKKwkJaWYgKHR5cGVvZiBwYXJ0cyA9PSAnc3RyaW5nJykgcGFydHMgPSBwYXJ0cy5zcGxpdCgnLicpOworCQlmb3IgKHZhciBpID0gMCwgbCA9IHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKyl7CisJCQlpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIHBhcnRzW2ldKSkgc291cmNlID0gc291cmNlW3BhcnRzW2ldXTsKKwkJCWVsc2UgcmV0dXJuIG51bGw7CisJCX0KKwkJcmV0dXJuIHNvdXJjZTsKKwl9LAorCisJY2xlYW5WYWx1ZXM6IGZ1bmN0aW9uKG9iamVjdCwgbWV0aG9kKXsKKwkJbWV0aG9kID0gbWV0aG9kIHx8IGRlZmluZWQ7CisJCWZvciAodmFyIGtleSBpbiBvYmplY3QpIGlmICghbWV0aG9kKG9iamVjdFtrZXldKSl7CisJCQlkZWxldGUgb2JqZWN0W2tleV07CisJCX0KKwkJcmV0dXJuIG9iamVjdDsKKwl9LAorCisJZXJhc2U6IGZ1bmN0aW9uKG9iamVjdCwga2V5KXsKKwkJaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSBkZWxldGUgb2JqZWN0W2tleV07CisJCXJldHVybiBvYmplY3Q7CisJfSwKKworCXJ1bjogZnVuY3Rpb24ob2JqZWN0KXsKKwkJdmFyIGFyZ3MgPSBBcnJheS5zbGljZShhcmd1bWVudHMsIDEpOworCQlmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBpZiAob2JqZWN0W2tleV0uYXBwbHkpeworCQkJb2JqZWN0W2tleV0uYXBwbHkob2JqZWN0LCBhcmdzKTsKKwkJfQorCQlyZXR1cm4gb2JqZWN0OworCX0KKworfSk7CisKK30pKCk7CisKKworLyoKKy0tLQorCitzY3JpcHQ6IExvY2FsZS5qcworCituYW1lOiBMb2NhbGUKKworZGVzY3JpcHRpb246IFByb3ZpZGVzIG1ldGhvZHMgZm9yIGxvY2FsaXphdGlvbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKyAgLSBBcmlhbiBTdG9sd2lqaworCityZXF1aXJlczoKKyAgLSBDb3JlL0V2ZW50cworICAtIC9PYmplY3QuRXh0cmFzCisgIC0gL01vb1Rvb2xzLk1vcmUKKworcHJvdmlkZXM6IFtMb2NhbGUsIExhbmddCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK3ZhciBjdXJyZW50ID0gbnVsbCwKKwlsb2NhbGVzID0ge30sCisJaW5oZXJpdHMgPSB7fTsKKwordmFyIGdldFNldCA9IGZ1bmN0aW9uKHNldCl7CisJaWYgKGluc3RhbmNlT2Yoc2V0LCBMb2NhbGUuU2V0KSkgcmV0dXJuIHNldDsKKwllbHNlIHJldHVybiBsb2NhbGVzW3NldF07Cit9OworCit2YXIgTG9jYWxlID0gdGhpcy5Mb2NhbGUgPSB7CisKKwlkZWZpbmU6IGZ1bmN0aW9uKGxvY2FsZSwgc2V0LCBrZXksIHZhbHVlKXsKKwkJdmFyIG5hbWU7CisJCWlmIChpbnN0YW5jZU9mKGxvY2FsZSwgTG9jYWxlLlNldCkpeworCQkJbmFtZSA9IGxvY2FsZS5uYW1lOworCQkJaWYgKG5hbWUpIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGU7CisJCX0gZWxzZSB7CisJCQluYW1lID0gbG9jYWxlOworCQkJaWYgKCFsb2NhbGVzW25hbWVdKSBsb2NhbGVzW25hbWVdID0gbmV3IExvY2FsZS5TZXQobmFtZSk7CisJCQlsb2NhbGUgPSBsb2NhbGVzW25hbWVdOworCQl9CisKKwkJaWYgKHNldCkgbG9jYWxlLmRlZmluZShzZXQsIGtleSwgdmFsdWUpOworCisJCS8qPDEuMmNvbXBhdD4qLworCQlpZiAoc2V0ID09ICdjYXNjYWRlJykgcmV0dXJuIExvY2FsZS5pbmhlcml0KG5hbWUsIGtleSk7CisJCS8qPC8xLjJjb21wYXQ+Ki8KKworCQlpZiAoIWN1cnJlbnQpIGN1cnJlbnQgPSBsb2NhbGU7CisKKwkJcmV0dXJuIGxvY2FsZTsKKwl9LAorCisJdXNlOiBmdW5jdGlvbihsb2NhbGUpeworCQlsb2NhbGUgPSBnZXRTZXQobG9jYWxlKTsKKworCQlpZiAobG9jYWxlKXsKKwkJCWN1cnJlbnQgPSBsb2NhbGU7CisKKwkJCXRoaXMuZmlyZUV2ZW50KCdjaGFuZ2UnLCBsb2NhbGUpOworCisJCQkvKjwxLjJjb21wYXQ+Ki8KKwkJCXRoaXMuZmlyZUV2ZW50KCdsYW5nQ2hhbmdlJywgbG9jYWxlLm5hbWUpOworCQkJLyo8LzEuMmNvbXBhdD4qLworCQl9CisKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWdldEN1cnJlbnQ6IGZ1bmN0aW9uKCl7CisJCXJldHVybiBjdXJyZW50OworCX0sCisKKwlnZXQ6IGZ1bmN0aW9uKGtleSwgYXJncyl7CisJCXJldHVybiAoY3VycmVudCkgPyBjdXJyZW50LmdldChrZXksIGFyZ3MpIDogJyc7CisJfSwKKworCWluaGVyaXQ6IGZ1bmN0aW9uKGxvY2FsZSwgaW5oZXJpdHMsIHNldCl7CisJCWxvY2FsZSA9IGdldFNldChsb2NhbGUpOworCisJCWlmIChsb2NhbGUpIGxvY2FsZS5pbmhlcml0KGluaGVyaXRzLCBzZXQpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJbGlzdDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIE9iamVjdC5rZXlzKGxvY2FsZXMpOworCX0KKworfTsKKworT2JqZWN0LmFwcGVuZChMb2NhbGUsIG5ldyBFdmVudHMpOworCitMb2NhbGUuU2V0ID0gbmV3IENsYXNzKHsKKworCXNldHM6IHt9LAorCisJaW5oZXJpdHM6IHsKKwkJbG9jYWxlczogW10sCisJCXNldHM6IHt9CisJfSwKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKG5hbWUpeworCQl0aGlzLm5hbWUgPSBuYW1lIHx8ICcnOworCX0sCisKKwlkZWZpbmU6IGZ1bmN0aW9uKHNldCwga2V5LCB2YWx1ZSl7CisJCXZhciBkZWZpbmVEYXRhID0gdGhpcy5zZXRzW3NldF07CisJCWlmICghZGVmaW5lRGF0YSkgZGVmaW5lRGF0YSA9IHt9OworCisJCWlmIChrZXkpeworCQkJaWYgKHR5cGVPZihrZXkpID09ICdvYmplY3QnKSBkZWZpbmVEYXRhID0gT2JqZWN0Lm1lcmdlKGRlZmluZURhdGEsIGtleSk7CisJCQllbHNlIGRlZmluZURhdGFba2V5XSA9IHZhbHVlOworCQl9CisJCXRoaXMuc2V0c1tzZXRdID0gZGVmaW5lRGF0YTsKKworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZ2V0OiBmdW5jdGlvbihrZXksIGFyZ3MsIF9iYXNlKXsKKwkJdmFyIHZhbHVlID0gT2JqZWN0LmdldEZyb21QYXRoKHRoaXMuc2V0cywga2V5KTsKKwkJaWYgKHZhbHVlICE9IG51bGwpeworCQkJdmFyIHR5cGUgPSB0eXBlT2YodmFsdWUpOworCQkJaWYgKHR5cGUgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSB2YWx1ZS5hcHBseShudWxsLCBBcnJheS5mcm9tKGFyZ3MpKTsKKwkJCWVsc2UgaWYgKHR5cGUgPT0gJ29iamVjdCcpIHZhbHVlID0gT2JqZWN0LmNsb25lKHZhbHVlKTsKKwkJCXJldHVybiB2YWx1ZTsKKwkJfQorCisJCS8vIGdldCB2YWx1ZSBvZiBpbmhlcml0ZWQgbG9jYWxlcworCQl2YXIgaW5kZXggPSBrZXkuaW5kZXhPZignLicpLAorCQkJc2V0ID0gaW5kZXggPCAwID8ga2V5IDoga2V5LnN1YnN0cigwLCBpbmRleCksCisJCQluYW1lcyA9ICh0aGlzLmluaGVyaXRzLnNldHNbc2V0XSB8fCBbXSkuY29tYmluZSh0aGlzLmluaGVyaXRzLmxvY2FsZXMpLmluY2x1ZGUoJ2VuLVVTJyk7CisJCWlmICghX2Jhc2UpIF9iYXNlID0gW107CisKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSBuYW1lcy5sZW5ndGg7IGkgPCBsOyBpKyspeworCQkJaWYgKF9iYXNlLmNvbnRhaW5zKG5hbWVzW2ldKSkgY29udGludWU7CisJCQlfYmFzZS5pbmNsdWRlKG5hbWVzW2ldKTsKKworCQkJdmFyIGxvY2FsZSA9IGxvY2FsZXNbbmFtZXNbaV1dOworCQkJaWYgKCFsb2NhbGUpIGNvbnRpbnVlOworCisJCQl2YWx1ZSA9IGxvY2FsZS5nZXQoa2V5LCBhcmdzLCBfYmFzZSk7CisJCQlpZiAodmFsdWUgIT0gbnVsbCkgcmV0dXJuIHZhbHVlOworCQl9CisKKwkJcmV0dXJuICcnOworCX0sCisKKwlpbmhlcml0OiBmdW5jdGlvbihuYW1lcywgc2V0KXsKKwkJbmFtZXMgPSBBcnJheS5mcm9tKG5hbWVzKTsKKworCQlpZiAoc2V0ICYmICF0aGlzLmluaGVyaXRzLnNldHNbc2V0XSkgdGhpcy5pbmhlcml0cy5zZXRzW3NldF0gPSBbXTsKKworCQl2YXIgbCA9IG5hbWVzLmxlbmd0aDsKKwkJd2hpbGUgKGwtLSkgKHNldCA/IHRoaXMuaW5oZXJpdHMuc2V0c1tzZXRdIDogdGhpcy5pbmhlcml0cy5sb2NhbGVzKS51bnNoaWZ0KG5hbWVzW2xdKTsKKworCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCisvKjwxLjJjb21wYXQ+Ki8KK3ZhciBsYW5nID0gTW9vVG9vbHMubGFuZyA9IHt9OworCitPYmplY3QuYXBwZW5kKGxhbmcsIExvY2FsZSwgeworCXNldExhbmd1YWdlOiBMb2NhbGUudXNlLAorCWdldEN1cnJlbnRMYW5ndWFnZTogZnVuY3Rpb24oKXsKKwkJdmFyIGN1cnJlbnQgPSBMb2NhbGUuZ2V0Q3VycmVudCgpOworCQlyZXR1cm4gKGN1cnJlbnQpID8gY3VycmVudC5uYW1lIDogbnVsbDsKKwl9LAorCXNldDogZnVuY3Rpb24oKXsKKwkJTG9jYWxlLmRlZmluZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCWdldDogZnVuY3Rpb24oc2V0LCBrZXksIGFyZ3MpeworCQlpZiAoa2V5KSBzZXQgKz0gJy4nICsga2V5OworCQlyZXR1cm4gTG9jYWxlLmdldChzZXQsIGFyZ3MpOworCX0KK30pOworLyo8LzEuMmNvbXBhdD4qLworCit9KSgpOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmVuLVVTLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIFVTIEVuZ2xpc2guCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZW4tVVMuRGF0ZV0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdlbi1VUycsICdEYXRlJywgeworCisJbW9udGhzOiBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXSwKKwltb250aHNfYWJicjogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddLAorCWRheXM6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXSwKKwlkYXlzX2FiYnI6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sCisKKwkvLyBDdWx0dXJlJ3MgZGF0ZSBvcmRlcjogTU0vREQvWVlZWQorCWRhdGVPcmRlcjogWydtb250aCcsICdkYXRlJywgJ3llYXInXSwKKwlzaG9ydERhdGU6ICclbS8lZC8lWScsCisJc2hvcnRUaW1lOiAnJUk6JU0lcCcsCisJQU06ICdBTScsCisJUE06ICdQTScsCisJZmlyc3REYXlPZldlZWs6IDAsCisKKwkvLyBEYXRlLkV4dHJhcworCW9yZGluYWw6IGZ1bmN0aW9uKGRheU9mTW9udGgpeworCQkvLyAxc3QsIDJuZCwgM3JkLCBldGMuCisJCXJldHVybiAoZGF5T2ZNb250aCA+IDMgJiYgZGF5T2ZNb250aCA8IDIxKSA/ICd0aCcgOiBbJ3RoJywgJ3N0JywgJ25kJywgJ3JkJywgJ3RoJ11bTWF0aC5taW4oZGF5T2ZNb250aCAlIDEwLCA0KV07CisJfSwKKworCWxlc3NUaGFuTWludXRlQWdvOiAnbGVzcyB0aGFuIGEgbWludXRlIGFnbycsCisJbWludXRlQWdvOiAnYWJvdXQgYSBtaW51dGUgYWdvJywKKwltaW51dGVzQWdvOiAne2RlbHRhfSBtaW51dGVzIGFnbycsCisJaG91ckFnbzogJ2Fib3V0IGFuIGhvdXIgYWdvJywKKwlob3Vyc0FnbzogJ2Fib3V0IHtkZWx0YX0gaG91cnMgYWdvJywKKwlkYXlBZ286ICcxIGRheSBhZ28nLAorCWRheXNBZ286ICd7ZGVsdGF9IGRheXMgYWdvJywKKwl3ZWVrQWdvOiAnMSB3ZWVrIGFnbycsCisJd2Vla3NBZ286ICd7ZGVsdGF9IHdlZWtzIGFnbycsCisJbW9udGhBZ286ICcxIG1vbnRoIGFnbycsCisJbW9udGhzQWdvOiAne2RlbHRhfSBtb250aHMgYWdvJywKKwl5ZWFyQWdvOiAnMSB5ZWFyIGFnbycsCisJeWVhcnNBZ286ICd7ZGVsdGF9IHllYXJzIGFnbycsCisKKwlsZXNzVGhhbk1pbnV0ZVVudGlsOiAnbGVzcyB0aGFuIGEgbWludXRlIGZyb20gbm93JywKKwltaW51dGVVbnRpbDogJ2Fib3V0IGEgbWludXRlIGZyb20gbm93JywKKwltaW51dGVzVW50aWw6ICd7ZGVsdGF9IG1pbnV0ZXMgZnJvbSBub3cnLAorCWhvdXJVbnRpbDogJ2Fib3V0IGFuIGhvdXIgZnJvbSBub3cnLAorCWhvdXJzVW50aWw6ICdhYm91dCB7ZGVsdGF9IGhvdXJzIGZyb20gbm93JywKKwlkYXlVbnRpbDogJzEgZGF5IGZyb20gbm93JywKKwlkYXlzVW50aWw6ICd7ZGVsdGF9IGRheXMgZnJvbSBub3cnLAorCXdlZWtVbnRpbDogJzEgd2VlayBmcm9tIG5vdycsCisJd2Vla3NVbnRpbDogJ3tkZWx0YX0gd2Vla3MgZnJvbSBub3cnLAorCW1vbnRoVW50aWw6ICcxIG1vbnRoIGZyb20gbm93JywKKwltb250aHNVbnRpbDogJ3tkZWx0YX0gbW9udGhzIGZyb20gbm93JywKKwl5ZWFyVW50aWw6ICcxIHllYXIgZnJvbSBub3cnLAorCXllYXJzVW50aWw6ICd7ZGVsdGF9IHllYXJzIGZyb20gbm93JworCit9KTsKKworCisvKgorLS0tCisKK3NjcmlwdDogRGF0ZS5qcworCituYW1lOiBEYXRlCisKK2Rlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBEYXRlIG5hdGl2ZSBvYmplY3QgdG8gaW5jbHVkZSBtZXRob2RzIHVzZWZ1bCBpbiBtYW5hZ2luZyBkYXRlcy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKyAgLSBOaWNob2xhcyBCYXJ0aGVsZW15IC0gaHR0cHM6Ly9zdm4ubmJhcnRoZWxlbXkuY29tL2RhdGUtanMvCisgIC0gSGFyYWxkIEtpcnNobmVyIC0gbWFpbCBbYXRdIGRpZ2l0YXJhbGQuZGU7IGh0dHA6Ly9kaWdpdGFyYWxkLmRlCisgIC0gU2NvdHQgS3lsZSAtIHNjb3R0IFthdF0gYXBwZGVuLmNvbTsgaHR0cDovL2FwcGRlbi5jb20KKworcmVxdWlyZXM6CisgIC0gQ29yZS9BcnJheQorICAtIENvcmUvU3RyaW5nCisgIC0gQ29yZS9OdW1iZXIKKyAgLSBNb29Ub29scy5Nb3JlCisgIC0gTG9jYWxlCisgIC0gTG9jYWxlLmVuLVVTLkRhdGUKKworcHJvdmlkZXM6IFtEYXRlXQorCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCit2YXIgRGF0ZSA9IHRoaXMuRGF0ZTsKKwordmFyIERhdGVNZXRob2RzID0gRGF0ZS5NZXRob2RzID0geworCW1zOiAnTWlsbGlzZWNvbmRzJywKKwl5ZWFyOiAnRnVsbFllYXInLAorCW1pbjogJ01pbnV0ZXMnLAorCW1vOiAnTW9udGgnLAorCXNlYzogJ1NlY29uZHMnLAorCWhyOiAnSG91cnMnCit9OworCitbJ0RhdGUnLCAnRGF5JywgJ0Z1bGxZZWFyJywgJ0hvdXJzJywgJ01pbGxpc2Vjb25kcycsICdNaW51dGVzJywgJ01vbnRoJywgJ1NlY29uZHMnLCAnVGltZScsICdUaW1lem9uZU9mZnNldCcsCisJJ1dlZWsnLCAnVGltZXpvbmUnLCAnR01UT2Zmc2V0JywgJ0RheU9mWWVhcicsICdMYXN0TW9udGgnLCAnTGFzdERheU9mTW9udGgnLCAnVVRDRGF0ZScsICdVVENEYXknLCAnVVRDRnVsbFllYXInLAorCSdBTVBNJywgJ09yZGluYWwnLCAnVVRDSG91cnMnLCAnVVRDTWlsbGlzZWNvbmRzJywgJ1VUQ01pbnV0ZXMnLCAnVVRDTW9udGgnLCAnVVRDU2Vjb25kcycsICdVVENNaWxsaXNlY29uZHMnXS5lYWNoKGZ1bmN0aW9uKG1ldGhvZCl7CisJRGF0ZS5NZXRob2RzW21ldGhvZC50b0xvd2VyQ2FzZSgpXSA9IG1ldGhvZDsKK30pOworCit2YXIgcGFkID0gZnVuY3Rpb24obiwgZGlnaXRzLCBzdHJpbmcpeworCWlmIChkaWdpdHMgPT0gMSkgcmV0dXJuIG47CisJcmV0dXJuIG4gPCBNYXRoLnBvdygxMCwgZGlnaXRzIC0gMSkgPyAoc3RyaW5nIHx8ICcwJykgKyBwYWQobiwgZGlnaXRzIC0gMSwgc3RyaW5nKSA6IG47Cit9OworCitEYXRlLmltcGxlbWVudCh7CisKKwlzZXQ6IGZ1bmN0aW9uKHByb3AsIHZhbHVlKXsKKwkJcHJvcCA9IHByb3AudG9Mb3dlckNhc2UoKTsKKwkJdmFyIG1ldGhvZCA9IERhdGVNZXRob2RzW3Byb3BdICYmICdzZXQnICsgRGF0ZU1ldGhvZHNbcHJvcF07CisJCWlmIChtZXRob2QgJiYgdGhpc1ttZXRob2RdKSB0aGlzW21ldGhvZF0odmFsdWUpOworCQlyZXR1cm4gdGhpczsKKwl9Lm92ZXJsb2FkU2V0dGVyKCksCisKKwlnZXQ6IGZ1bmN0aW9uKHByb3ApeworCQlwcm9wID0gcHJvcC50b0xvd2VyQ2FzZSgpOworCQl2YXIgbWV0aG9kID0gRGF0ZU1ldGhvZHNbcHJvcF0gJiYgJ2dldCcgKyBEYXRlTWV0aG9kc1twcm9wXTsKKwkJaWYgKG1ldGhvZCAmJiB0aGlzW21ldGhvZF0pIHJldHVybiB0aGlzW21ldGhvZF0oKTsKKwkJcmV0dXJuIG51bGw7CisJfS5vdmVybG9hZEdldHRlcigpLAorCisJY2xvbmU6IGZ1bmN0aW9uKCl7CisJCXJldHVybiBuZXcgRGF0ZSh0aGlzLmdldCgndGltZScpKTsKKwl9LAorCisJaW5jcmVtZW50OiBmdW5jdGlvbihpbnRlcnZhbCwgdGltZXMpeworCQlpbnRlcnZhbCA9IGludGVydmFsIHx8ICdkYXknOworCQl0aW1lcyA9IHRpbWVzICE9IG51bGwgPyB0aW1lcyA6IDE7CisKKwkJc3dpdGNoIChpbnRlcnZhbCl7CisJCQljYXNlICd5ZWFyJzoKKwkJCQlyZXR1cm4gdGhpcy5pbmNyZW1lbnQoJ21vbnRoJywgdGltZXMgKiAxMik7CisJCQljYXNlICdtb250aCc6CisJCQkJdmFyIGQgPSB0aGlzLmdldCgnZGF0ZScpOworCQkJCXRoaXMuc2V0KCdkYXRlJywgMSkuc2V0KCdtbycsIHRoaXMuZ2V0KCdtbycpICsgdGltZXMpOworCQkJCXJldHVybiB0aGlzLnNldCgnZGF0ZScsIGQubWluKHRoaXMuZ2V0KCdsYXN0ZGF5b2Ztb250aCcpKSk7CisJCQljYXNlICd3ZWVrJzoKKwkJCQlyZXR1cm4gdGhpcy5pbmNyZW1lbnQoJ2RheScsIHRpbWVzICogNyk7CisJCQljYXNlICdkYXknOgorCQkJCXJldHVybiB0aGlzLnNldCgnZGF0ZScsIHRoaXMuZ2V0KCdkYXRlJykgKyB0aW1lcyk7CisJCX0KKworCQlpZiAoIURhdGUudW5pdHNbaW50ZXJ2YWxdKSB0aHJvdyBuZXcgRXJyb3IoaW50ZXJ2YWwgKyAnIGlzIG5vdCBhIHN1cHBvcnRlZCBpbnRlcnZhbCcpOworCisJCXJldHVybiB0aGlzLnNldCgndGltZScsIHRoaXMuZ2V0KCd0aW1lJykgKyB0aW1lcyAqIERhdGUudW5pdHNbaW50ZXJ2YWxdKCkpOworCX0sCisKKwlkZWNyZW1lbnQ6IGZ1bmN0aW9uKGludGVydmFsLCB0aW1lcyl7CisJCXJldHVybiB0aGlzLmluY3JlbWVudChpbnRlcnZhbCwgLTEgKiAodGltZXMgIT0gbnVsbCA/IHRpbWVzIDogMSkpOworCX0sCisKKwlpc0xlYXBZZWFyOiBmdW5jdGlvbigpeworCQlyZXR1cm4gRGF0ZS5pc0xlYXBZZWFyKHRoaXMuZ2V0KCd5ZWFyJykpOworCX0sCisKKwljbGVhclRpbWU6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLnNldCh7aHI6IDAsIG1pbjogMCwgc2VjOiAwLCBtczogMH0pOworCX0sCisKKwlkaWZmOiBmdW5jdGlvbihkYXRlLCByZXNvbHV0aW9uKXsKKwkJaWYgKHR5cGVPZihkYXRlKSA9PSAnc3RyaW5nJykgZGF0ZSA9IERhdGUucGFyc2UoZGF0ZSk7CisKKwkJcmV0dXJuICgoZGF0ZSAtIHRoaXMpIC8gRGF0ZS51bml0c1tyZXNvbHV0aW9uIHx8ICdkYXknXSgzLCAzKSkucm91bmQoKTsgLy8gbm9uLWxlYXAgeWVhciwgMzAtZGF5IG1vbnRoCisJfSwKKworCWdldExhc3REYXlPZk1vbnRoOiBmdW5jdGlvbigpeworCQlyZXR1cm4gRGF0ZS5kYXlzSW5Nb250aCh0aGlzLmdldCgnbW8nKSwgdGhpcy5nZXQoJ3llYXInKSk7CisJfSwKKworCWdldERheU9mWWVhcjogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIChEYXRlLlVUQyh0aGlzLmdldCgneWVhcicpLCB0aGlzLmdldCgnbW8nKSwgdGhpcy5nZXQoJ2RhdGUnKSArIDEpCisJCQktIERhdGUuVVRDKHRoaXMuZ2V0KCd5ZWFyJyksIDAsIDEpKSAvIERhdGUudW5pdHMuZGF5KCk7CisJfSwKKworCXNldERheTogZnVuY3Rpb24oZGF5LCBmaXJzdERheU9mV2Vlayl7CisJCWlmIChmaXJzdERheU9mV2VlayA9PSBudWxsKXsKKwkJCWZpcnN0RGF5T2ZXZWVrID0gRGF0ZS5nZXRNc2coJ2ZpcnN0RGF5T2ZXZWVrJyk7CisJCQlpZiAoZmlyc3REYXlPZldlZWsgPT09ICcnKSBmaXJzdERheU9mV2VlayA9IDE7CisJCX0KKworCQlkYXkgPSAoNyArIERhdGUucGFyc2VEYXkoZGF5LCB0cnVlKSAtIGZpcnN0RGF5T2ZXZWVrKSAlIDc7CisJCXZhciBjdXJyZW50RGF5ID0gKDcgKyB0aGlzLmdldCgnZGF5JykgLSBmaXJzdERheU9mV2VlaykgJSA3OworCisJCXJldHVybiB0aGlzLmluY3JlbWVudCgnZGF5JywgZGF5IC0gY3VycmVudERheSk7CisJfSwKKworCWdldFdlZWs6IGZ1bmN0aW9uKGZpcnN0RGF5T2ZXZWVrKXsKKwkJaWYgKGZpcnN0RGF5T2ZXZWVrID09IG51bGwpeworCQkJZmlyc3REYXlPZldlZWsgPSBEYXRlLmdldE1zZygnZmlyc3REYXlPZldlZWsnKTsKKwkJCWlmIChmaXJzdERheU9mV2VlayA9PT0gJycpIGZpcnN0RGF5T2ZXZWVrID0gMTsKKwkJfQorCisJCXZhciBkYXRlID0gdGhpcywKKwkJCWRheU9mV2VlayA9ICg3ICsgZGF0ZS5nZXQoJ2RheScpIC0gZmlyc3REYXlPZldlZWspICUgNywKKwkJCWRpdmlkZW5kID0gMCwKKwkJCWZpcnN0RGF5T2ZZZWFyOworCisJCWlmIChmaXJzdERheU9mV2VlayA9PSAxKXsKKwkJCS8vIElTTy04NjAxLCB3ZWVrIGJlbG9uZ3MgdG8geWVhciB0aGF0IGhhcyB0aGUgbW9zdCBkYXlzIG9mIHRoZSB3ZWVrIChpLmUuIGhhcyB0aGUgdGh1cnNkYXkgb2YgdGhlIHdlZWspCisJCQl2YXIgbW9udGggPSBkYXRlLmdldCgnbW9udGgnKSwKKwkJCQlzdGFydE9mV2VlayA9IGRhdGUuZ2V0KCdkYXRlJykgLSBkYXlPZldlZWs7CisKKwkJCWlmIChtb250aCA9PSAxMSAmJiBzdGFydE9mV2VlayA+IDI4KSByZXR1cm4gMTsgLy8gV2VlayAxIG9mIG5leHQgeWVhcgorCisJCQlpZiAobW9udGggPT0gMCAmJiBzdGFydE9mV2VlayA8IC0yKXsKKwkJCQkvLyBVc2UgYSBkYXRlIGZyb20gbGFzdCB5ZWFyIHRvIGRldGVybWluZSB0aGUgd2VlaworCQkJCWRhdGUgPSBuZXcgRGF0ZShkYXRlKS5kZWNyZW1lbnQoJ2RheScsIGRheU9mV2Vlayk7CisJCQkJZGF5T2ZXZWVrID0gMDsKKwkJCX0KKworCQkJZmlyc3REYXlPZlllYXIgPSBuZXcgRGF0ZShkYXRlLmdldCgneWVhcicpLCAwLCAxKS5nZXQoJ2RheScpIHx8IDc7CisJCQlpZiAoZmlyc3REYXlPZlllYXIgPiA0KSBkaXZpZGVuZCA9IC03OyAvLyBGaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyIGlzIG5vdCB3ZWVrIDEKKwkJfSBlbHNlIHsKKwkJCS8vIEluIG90aGVyIGN1bHR1cmVzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyIGlzIGFsd2F5cyB3ZWVrIDEgYW5kIHRoZSBsYXN0IHdlZWsgYWx3YXlzIDUzIG9yIDU0LgorCQkJLy8gRGF5cyBpbiB0aGUgc2FtZSB3ZWVrIGNhbiBoYXZlIGEgZGlmZmVyZW50IHdlZWtudW1iZXIgaWYgdGhlIHdlZWsgc3ByZWFkcyBhY3Jvc3MgdHdvIHllYXJzLgorCQkJZmlyc3REYXlPZlllYXIgPSBuZXcgRGF0ZShkYXRlLmdldCgneWVhcicpLCAwLCAxKS5nZXQoJ2RheScpOworCQl9CisKKwkJZGl2aWRlbmQgKz0gZGF0ZS5nZXQoJ2RheW9meWVhcicpOworCQlkaXZpZGVuZCArPSA2IC0gZGF5T2ZXZWVrOyAvLyBBZGQgZGF5cyBzbyB3ZSBjYWxjdWxhdGUgdGhlIGN1cnJlbnQgZGF0ZSdzIHdlZWsgYXMgYSBmdWxsIHdlZWsKKwkJZGl2aWRlbmQgKz0gKDcgKyBmaXJzdERheU9mWWVhciAtIGZpcnN0RGF5T2ZXZWVrKSAlIDc7IC8vIE1ha2UgdXAgZm9yIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIgbm90IGJlaW5nIGEgZnVsbCB3ZWVrCisKKwkJcmV0dXJuIChkaXZpZGVuZCAvIDcpOworCX0sCisKKwlnZXRPcmRpbmFsOiBmdW5jdGlvbihkYXkpeworCQlyZXR1cm4gRGF0ZS5nZXRNc2coJ29yZGluYWwnLCBkYXkgfHwgdGhpcy5nZXQoJ2RhdGUnKSk7CisJfSwKKworCWdldFRpbWV6b25lOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy50b1N0cmluZygpCisJCQkucmVwbGFjZSgvXi4qPyAoW0EtWl17M30pLlswLTldezR9LiokLywgJyQxJykKKwkJCS5yZXBsYWNlKC9eLio/XCgoW0EtWl0pW2Etel0rIChbQS1aXSlbYS16XSsgKFtBLVpdKVthLXpdK1wpJC8sICckMSQyJDMnKTsKKwl9LAorCisJZ2V0R01UT2Zmc2V0OiBmdW5jdGlvbigpeworCQl2YXIgb2ZmID0gdGhpcy5nZXQoJ3RpbWV6b25lT2Zmc2V0Jyk7CisJCXJldHVybiAoKG9mZiA+IDApID8gJy0nIDogJysnKSArIHBhZCgob2ZmLmFicygpIC8gNjApLmZsb29yKCksIDIpICsgcGFkKG9mZiAlIDYwLCAyKTsKKwl9LAorCisJc2V0QU1QTTogZnVuY3Rpb24oYW1wbSl7CisJCWFtcG0gPSBhbXBtLnRvVXBwZXJDYXNlKCk7CisJCXZhciBociA9IHRoaXMuZ2V0KCdocicpOworCQlpZiAoaHIgPiAxMSAmJiBhbXBtID09ICdBTScpIHJldHVybiB0aGlzLmRlY3JlbWVudCgnaG91cicsIDEyKTsKKwkJZWxzZSBpZiAoaHIgPCAxMiAmJiBhbXBtID09ICdQTScpIHJldHVybiB0aGlzLmluY3JlbWVudCgnaG91cicsIDEyKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWdldEFNUE06IGZ1bmN0aW9uKCl7CisJCXJldHVybiAodGhpcy5nZXQoJ2hyJykgPCAxMikgPyAnQU0nIDogJ1BNJzsKKwl9LAorCisJcGFyc2U6IGZ1bmN0aW9uKHN0cil7CisJCXRoaXMuc2V0KCd0aW1lJywgRGF0ZS5wYXJzZShzdHIpKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWlzVmFsaWQ6IGZ1bmN0aW9uKGRhdGUpeworCQlyZXR1cm4gIWlzTmFOKChkYXRlIHx8IHRoaXMpLnZhbHVlT2YoKSk7CisJfSwKKworCWZvcm1hdDogZnVuY3Rpb24oZil7CisJCWlmICghdGhpcy5pc1ZhbGlkKCkpIHJldHVybiAnaW52YWxpZCBkYXRlJzsKKwkJaWYgKCFmKSBmID0gJyV4ICVYJzsKKworCQl2YXIgZm9ybWF0TG93ZXIgPSBmLnRvTG93ZXJDYXNlKCk7CisJCWlmIChmb3JtYXR0ZXJzW2Zvcm1hdExvd2VyXSkgcmV0dXJuIGZvcm1hdHRlcnNbZm9ybWF0TG93ZXJdKHRoaXMpOyAvLyBpdCdzIGEgZm9ybWF0dGVyIQorCQlmID0gZm9ybWF0c1tmb3JtYXRMb3dlcl0gfHwgZjsgLy8gcmVwbGFjZSBzaG9ydC1oYW5kIHdpdGggYWN0dWFsIGZvcm1hdAorCisJCXZhciBkID0gdGhpczsKKwkJcmV0dXJuIGYucmVwbGFjZSgvJShbYS16JV0pL2dpLAorCQkJZnVuY3Rpb24oJDAsICQxKXsKKwkJCQlzd2l0Y2ggKCQxKXsKKwkJCQkJY2FzZSAnYSc6IHJldHVybiBEYXRlLmdldE1zZygnZGF5c19hYmJyJylbZC5nZXQoJ2RheScpXTsKKwkJCQkJY2FzZSAnQSc6IHJldHVybiBEYXRlLmdldE1zZygnZGF5cycpW2QuZ2V0KCdkYXknKV07CisJCQkJCWNhc2UgJ2InOiByZXR1cm4gRGF0ZS5nZXRNc2coJ21vbnRoc19hYmJyJylbZC5nZXQoJ21vbnRoJyldOworCQkJCQljYXNlICdCJzogcmV0dXJuIERhdGUuZ2V0TXNnKCdtb250aHMnKVtkLmdldCgnbW9udGgnKV07CisJCQkJCWNhc2UgJ2MnOiByZXR1cm4gZC5mb3JtYXQoJyVhICViICVkICVIOiVNOiVTICVZJyk7CisJCQkJCWNhc2UgJ2QnOiByZXR1cm4gcGFkKGQuZ2V0KCdkYXRlJyksIDIpOworCQkJCQljYXNlICdlJzogcmV0dXJuIHBhZChkLmdldCgnZGF0ZScpLCAyLCAnICcpOworCQkJCQljYXNlICdIJzogcmV0dXJuIHBhZChkLmdldCgnaHInKSwgMik7CisJCQkJCWNhc2UgJ0knOiByZXR1cm4gcGFkKChkLmdldCgnaHInKSAlIDEyKSB8fCAxMiwgMik7CisJCQkJCWNhc2UgJ2onOiByZXR1cm4gcGFkKGQuZ2V0KCdkYXlvZnllYXInKSwgMyk7CisJCQkJCWNhc2UgJ2snOiByZXR1cm4gcGFkKGQuZ2V0KCdocicpLCAyLCAnICcpOworCQkJCQljYXNlICdsJzogcmV0dXJuIHBhZCgoZC5nZXQoJ2hyJykgJSAxMikgfHwgMTIsIDIsICcgJyk7CisJCQkJCWNhc2UgJ0wnOiByZXR1cm4gcGFkKGQuZ2V0KCdtcycpLCAzKTsKKwkJCQkJY2FzZSAnbSc6IHJldHVybiBwYWQoKGQuZ2V0KCdtbycpICsgMSksIDIpOworCQkJCQljYXNlICdNJzogcmV0dXJuIHBhZChkLmdldCgnbWluJyksIDIpOworCQkJCQljYXNlICdvJzogcmV0dXJuIGQuZ2V0KCdvcmRpbmFsJyk7CisJCQkJCWNhc2UgJ3AnOiByZXR1cm4gRGF0ZS5nZXRNc2coZC5nZXQoJ2FtcG0nKSk7CisJCQkJCWNhc2UgJ3MnOiByZXR1cm4gTWF0aC5yb3VuZChkIC8gMTAwMCk7CisJCQkJCWNhc2UgJ1MnOiByZXR1cm4gcGFkKGQuZ2V0KCdzZWNvbmRzJyksIDIpOworCQkJCQljYXNlICdUJzogcmV0dXJuIGQuZm9ybWF0KCclSDolTTolUycpOworCQkJCQljYXNlICdVJzogcmV0dXJuIHBhZChkLmdldCgnd2VlaycpLCAyKTsKKwkJCQkJY2FzZSAndyc6IHJldHVybiBkLmdldCgnZGF5Jyk7CisJCQkJCWNhc2UgJ3gnOiByZXR1cm4gZC5mb3JtYXQoRGF0ZS5nZXRNc2coJ3Nob3J0RGF0ZScpKTsKKwkJCQkJY2FzZSAnWCc6IHJldHVybiBkLmZvcm1hdChEYXRlLmdldE1zZygnc2hvcnRUaW1lJykpOworCQkJCQljYXNlICd5JzogcmV0dXJuIGQuZ2V0KCd5ZWFyJykudG9TdHJpbmcoKS5zdWJzdHIoMik7CisJCQkJCWNhc2UgJ1knOiByZXR1cm4gZC5nZXQoJ3llYXInKTsKKwkJCQkJY2FzZSAneic6IHJldHVybiBkLmdldCgnR01UT2Zmc2V0Jyk7CisJCQkJCWNhc2UgJ1onOiByZXR1cm4gZC5nZXQoJ1RpbWV6b25lJyk7CisJCQkJfQorCQkJCXJldHVybiAkMTsKKwkJCX0KKwkJKTsKKwl9LAorCisJdG9JU09TdHJpbmc6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLmZvcm1hdCgnaXNvODYwMScpOworCX0KKworfSkuYWxpYXMoeworCXRvSlNPTjogJ3RvSVNPU3RyaW5nJywKKwljb21wYXJlOiAnZGlmZicsCisJc3RyZnRpbWU6ICdmb3JtYXQnCit9KTsKKwordmFyIGZvcm1hdHMgPSB7CisJZGI6ICclWS0lbS0lZCAlSDolTTolUycsCisJY29tcGFjdDogJyVZJW0lZFQlSCVNJVMnLAorCSdzaG9ydCc6ICclZCAlYiAlSDolTScsCisJJ2xvbmcnOiAnJUIgJWQsICVZICVIOiVNJworfTsKKworLy8gVGhlIGRheSBhbmQgbW9udGggYWJicmV2aWF0aW9ucyBhcmUgc3RhbmRhcmRpemVkLCBzbyB3ZSBjYW5ub3QgdXNlIHNpbXBseSAlYSBhbmQgJWIgYmVjYXVzZSB0aGV5IHdpbGwgZ2V0IGxvY2FsaXplZAordmFyIHJmY0RheUFiYnIgPSBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLAorCXJmY01vbnRoQWJiciA9IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXTsKKwordmFyIGZvcm1hdHRlcnMgPSB7CisJcmZjODIyOiBmdW5jdGlvbihkYXRlKXsKKwkJcmV0dXJuIHJmY0RheUFiYnJbZGF0ZS5nZXQoJ2RheScpXSArIGRhdGUuZm9ybWF0KCcsICVkICcpICsgcmZjTW9udGhBYmJyW2RhdGUuZ2V0KCdtb250aCcpXSArIGRhdGUuZm9ybWF0KCcgJVkgJUg6JU06JVMgJVonKTsKKwl9LAorCXJmYzI4MjI6IGZ1bmN0aW9uKGRhdGUpeworCQlyZXR1cm4gcmZjRGF5QWJicltkYXRlLmdldCgnZGF5JyldICsgZGF0ZS5mb3JtYXQoJywgJWQgJykgKyByZmNNb250aEFiYnJbZGF0ZS5nZXQoJ21vbnRoJyldICsgZGF0ZS5mb3JtYXQoJyAlWSAlSDolTTolUyAleicpOworCX0sCisJaXNvODYwMTogZnVuY3Rpb24oZGF0ZSl7CisJCXJldHVybiAoCisJCQlkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKyAnLScgKworCQkJcGFkKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEsIDIpICsgJy0nICsKKwkJCXBhZChkYXRlLmdldFVUQ0RhdGUoKSwgMikgKyAnVCcgKworCQkJcGFkKGRhdGUuZ2V0VVRDSG91cnMoKSwgMikgKyAnOicgKworCQkJcGFkKGRhdGUuZ2V0VVRDTWludXRlcygpLCAyKSArICc6JyArCisJCQlwYWQoZGF0ZS5nZXRVVENTZWNvbmRzKCksIDIpICsgJy4nICsKKwkJCXBhZChkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpLCAzKSArICdaJworCQkpOworCX0KK307CisKKwordmFyIHBhcnNlUGF0dGVybnMgPSBbXSwKKwluYXRpdmVQYXJzZSA9IERhdGUucGFyc2U7CisKK3ZhciBwYXJzZVdvcmQgPSBmdW5jdGlvbih0eXBlLCB3b3JkLCBudW0peworCXZhciByZXQgPSAtMSwKKwkJdHJhbnNsYXRlZCA9IERhdGUuZ2V0TXNnKHR5cGUgKyAncycpOworCXN3aXRjaCAodHlwZU9mKHdvcmQpKXsKKwkJY2FzZSAnb2JqZWN0JzoKKwkJCXJldCA9IHRyYW5zbGF0ZWRbd29yZC5nZXQodHlwZSldOworCQkJYnJlYWs7CisJCWNhc2UgJ251bWJlcic6CisJCQlyZXQgPSB0cmFuc2xhdGVkW3dvcmRdOworCQkJaWYgKCFyZXQpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCAnICsgdHlwZSArICcgaW5kZXg6ICcgKyB3b3JkKTsKKwkJCWJyZWFrOworCQljYXNlICdzdHJpbmcnOgorCQkJdmFyIG1hdGNoID0gdHJhbnNsYXRlZC5maWx0ZXIoZnVuY3Rpb24obmFtZSl7CisJCQkJcmV0dXJuIHRoaXMudGVzdChuYW1lKTsKKwkJCX0sIG5ldyBSZWdFeHAoJ14nICsgd29yZCwgJ2knKSk7CisJCQlpZiAoIW1hdGNoLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkICcgKyB0eXBlICsgJyBzdHJpbmcnKTsKKwkJCWlmIChtYXRjaC5sZW5ndGggPiAxKSB0aHJvdyBuZXcgRXJyb3IoJ0FtYmlndW91cyAnICsgdHlwZSk7CisJCQlyZXQgPSBtYXRjaFswXTsKKwl9CisKKwlyZXR1cm4gKG51bSkgPyB0cmFuc2xhdGVkLmluZGV4T2YocmV0KSA6IHJldDsKK307CisKK3ZhciBzdGFydENlbnR1cnkgPSAxOTAwLAorCXN0YXJ0WWVhciA9IDcwOworCitEYXRlLmV4dGVuZCh7CisKKwlnZXRNc2c6IGZ1bmN0aW9uKGtleSwgYXJncyl7CisJCXJldHVybiBMb2NhbGUuZ2V0KCdEYXRlLicgKyBrZXksIGFyZ3MpOworCX0sCisKKwl1bml0czogeworCQltczogRnVuY3Rpb24uZnJvbSgxKSwKKwkJc2Vjb25kOiBGdW5jdGlvbi5mcm9tKDEwMDApLAorCQltaW51dGU6IEZ1bmN0aW9uLmZyb20oNjAwMDApLAorCQlob3VyOiBGdW5jdGlvbi5mcm9tKDM2MDAwMDApLAorCQlkYXk6IEZ1bmN0aW9uLmZyb20oODY0MDAwMDApLAorCQl3ZWVrOiBGdW5jdGlvbi5mcm9tKDYwODQwMDAwMCksCisJCW1vbnRoOiBmdW5jdGlvbihtb250aCwgeWVhcil7CisJCQl2YXIgZCA9IG5ldyBEYXRlOworCQkJcmV0dXJuIERhdGUuZGF5c0luTW9udGgobW9udGggIT0gbnVsbCA/IG1vbnRoIDogZC5nZXQoJ21vJyksIHllYXIgIT0gbnVsbCA/IHllYXIgOiBkLmdldCgneWVhcicpKSAqIDg2NDAwMDAwOworCQl9LAorCQl5ZWFyOiBmdW5jdGlvbih5ZWFyKXsKKwkJCXllYXIgPSB5ZWFyIHx8IG5ldyBEYXRlKCkuZ2V0KCd5ZWFyJyk7CisJCQlyZXR1cm4gRGF0ZS5pc0xlYXBZZWFyKHllYXIpID8gMzE2MjI0MDAwMDAgOiAzMTUzNjAwMDAwMDsKKwkJfQorCX0sCisKKwlkYXlzSW5Nb250aDogZnVuY3Rpb24obW9udGgsIHllYXIpeworCQlyZXR1cm4gWzMxLCBEYXRlLmlzTGVhcFllYXIoeWVhcikgPyAyOSA6IDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV1bbW9udGhdOworCX0sCisKKwlpc0xlYXBZZWFyOiBmdW5jdGlvbih5ZWFyKXsKKwkJcmV0dXJuICgoeWVhciAlIDQgPT09IDApICYmICh5ZWFyICUgMTAwICE9PSAwKSkgfHwgKHllYXIgJSA0MDAgPT09IDApOworCX0sCisKKwlwYXJzZTogZnVuY3Rpb24oZnJvbSl7CisJCXZhciB0ID0gdHlwZU9mKGZyb20pOworCQlpZiAodCA9PSAnbnVtYmVyJykgcmV0dXJuIG5ldyBEYXRlKGZyb20pOworCQlpZiAodCAhPSAnc3RyaW5nJykgcmV0dXJuIGZyb207CisJCWZyb20gPSBmcm9tLmNsZWFuKCk7CisJCWlmICghZnJvbS5sZW5ndGgpIHJldHVybiBudWxsOworCisJCXZhciBwYXJzZWQ7CisJCXBhcnNlUGF0dGVybnMuc29tZShmdW5jdGlvbihwYXR0ZXJuKXsKKwkJCXZhciBiaXRzID0gcGF0dGVybi5yZS5leGVjKGZyb20pOworCQkJcmV0dXJuIChiaXRzKSA/IChwYXJzZWQgPSBwYXR0ZXJuLmhhbmRsZXIoYml0cykpIDogZmFsc2U7CisJCX0pOworCisJCWlmICghKHBhcnNlZCAmJiBwYXJzZWQuaXNWYWxpZCgpKSl7CisJCQlwYXJzZWQgPSBuZXcgRGF0ZShuYXRpdmVQYXJzZShmcm9tKSk7CisJCQlpZiAoIShwYXJzZWQgJiYgcGFyc2VkLmlzVmFsaWQoKSkpIHBhcnNlZCA9IG5ldyBEYXRlKGZyb20udG9JbnQoKSk7CisJCX0KKwkJcmV0dXJuIHBhcnNlZDsKKwl9LAorCisJcGFyc2VEYXk6IGZ1bmN0aW9uKGRheSwgbnVtKXsKKwkJcmV0dXJuIHBhcnNlV29yZCgnZGF5JywgZGF5LCBudW0pOworCX0sCisKKwlwYXJzZU1vbnRoOiBmdW5jdGlvbihtb250aCwgbnVtKXsKKwkJcmV0dXJuIHBhcnNlV29yZCgnbW9udGgnLCBtb250aCwgbnVtKTsKKwl9LAorCisJcGFyc2VVVEM6IGZ1bmN0aW9uKHZhbHVlKXsKKwkJdmFyIGxvY2FsRGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTsKKwkJdmFyIHV0Y1NlY29uZHMgPSBEYXRlLlVUQygKKwkJCWxvY2FsRGF0ZS5nZXQoJ3llYXInKSwKKwkJCWxvY2FsRGF0ZS5nZXQoJ21vJyksCisJCQlsb2NhbERhdGUuZ2V0KCdkYXRlJyksCisJCQlsb2NhbERhdGUuZ2V0KCdocicpLAorCQkJbG9jYWxEYXRlLmdldCgnbWluJyksCisJCQlsb2NhbERhdGUuZ2V0KCdzZWMnKSwKKwkJCWxvY2FsRGF0ZS5nZXQoJ21zJykKKwkJKTsKKwkJcmV0dXJuIG5ldyBEYXRlKHV0Y1NlY29uZHMpOworCX0sCisKKwlvcmRlckluZGV4OiBmdW5jdGlvbih1bml0KXsKKwkJcmV0dXJuIERhdGUuZ2V0TXNnKCdkYXRlT3JkZXInKS5pbmRleE9mKHVuaXQpICsgMTsKKwl9LAorCisJZGVmaW5lRm9ybWF0OiBmdW5jdGlvbihuYW1lLCBmb3JtYXQpeworCQlmb3JtYXRzW25hbWVdID0gZm9ybWF0OworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZGVmaW5lRm9ybWF0czogZnVuY3Rpb24oZm9ybWF0cyl7CisJCWZvciAodmFyIG5hbWUgaW4gZm9ybWF0cykgRGF0ZS5kZWZpbmVGb3JtYXQobmFtZSwgZm9ybWF0c1tuYW1lXSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwkvLzwxLjJjb21wYXQ+CisJcGFyc2VQYXR0ZXJuczogcGFyc2VQYXR0ZXJucywKKwkvLzwvMS4yY29tcGF0PgorCisJZGVmaW5lUGFyc2VyOiBmdW5jdGlvbihwYXR0ZXJuKXsKKwkJcGFyc2VQYXR0ZXJucy5wdXNoKChwYXR0ZXJuLnJlICYmIHBhdHRlcm4uaGFuZGxlcikgPyBwYXR0ZXJuIDogYnVpbGQocGF0dGVybikpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZGVmaW5lUGFyc2VyczogZnVuY3Rpb24oKXsKKwkJQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLmVhY2goRGF0ZS5kZWZpbmVQYXJzZXIpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZGVmaW5lMkRpZ2l0WWVhclN0YXJ0OiBmdW5jdGlvbih5ZWFyKXsKKwkJc3RhcnRZZWFyID0geWVhciAlIDEwMDsKKwkJc3RhcnRDZW50dXJ5ID0geWVhciAtIHN0YXJ0WWVhcjsKKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKwordmFyIHJlZ2V4T2YgPSBmdW5jdGlvbih0eXBlKXsKKwlyZXR1cm4gbmV3IFJlZ0V4cCgnKD86JyArIERhdGUuZ2V0TXNnKHR5cGUpLm1hcChmdW5jdGlvbihuYW1lKXsKKwkJcmV0dXJuIG5hbWUuc3Vic3RyKDAsIDMpOworCX0pLmpvaW4oJ3wnKSArICcpW2Etel0qJyk7Cit9OworCit2YXIgcmVwbGFjZXJzID0gZnVuY3Rpb24oa2V5KXsKKwlzd2l0Y2ggKGtleSl7CisJCWNhc2UgJ1QnOgorCQkJcmV0dXJuICclSDolTTolUyc7CisJCWNhc2UgJ3gnOiAvLyBpc284NjAxIGNvdmVycyB5eXl5LW1tLWRkLCBzbyBqdXN0IGNoZWNrIGlmIG1vbnRoIGlzIGZpcnN0CisJCQlyZXR1cm4gKChEYXRlLm9yZGVySW5kZXgoJ21vbnRoJykgPT0gMSkgPyAnJW1bLS4vXSVkJyA6ICclZFstLi9dJW0nKSArICcoWy0uL10leSk/JzsKKwkJY2FzZSAnWCc6CisJCQlyZXR1cm4gJyVIKFsuOl0lTSk/KFsuOl0lUyhbLjpdJXMpPyk/ID8lcD8gPyV6Pyc7CisJfQorCXJldHVybiBudWxsOworfTsKKwordmFyIGtleXMgPSB7CisJZDogL1swLTJdP1swLTldfDNbMDFdLywKKwlIOiAvWzAxXT9bMC05XXwyWzAtM10vLAorCUk6IC8wP1sxLTldfDFbMC0yXS8sCisJTTogL1swLTVdP1xkLywKKwlzOiAvXGQrLywKKwlvOiAvW2Etel0qLywKKwlwOiAvW2FwXVwuP21cLj8vLAorCXk6IC9cZHsyfXxcZHs0fS8sCisJWTogL1xkezR9LywKKwl6OiAvWnxbKy1dXGR7Mn0oPzo6P1xkezJ9KT8vCit9OworCitrZXlzLm0gPSBrZXlzLkk7CitrZXlzLlMgPSBrZXlzLk07CisKK3ZhciBjdXJyZW50TGFuZ3VhZ2U7CisKK3ZhciByZWNvbXBpbGUgPSBmdW5jdGlvbihsYW5ndWFnZSl7CisJY3VycmVudExhbmd1YWdlID0gbGFuZ3VhZ2U7CisKKwlrZXlzLmEgPSBrZXlzLkEgPSByZWdleE9mKCdkYXlzJyk7CisJa2V5cy5iID0ga2V5cy5CID0gcmVnZXhPZignbW9udGhzJyk7CisKKwlwYXJzZVBhdHRlcm5zLmVhY2goZnVuY3Rpb24ocGF0dGVybiwgaSl7CisJCWlmIChwYXR0ZXJuLmZvcm1hdCkgcGFyc2VQYXR0ZXJuc1tpXSA9IGJ1aWxkKHBhdHRlcm4uZm9ybWF0KTsKKwl9KTsKK307CisKK3ZhciBidWlsZCA9IGZ1bmN0aW9uKGZvcm1hdCl7CisJaWYgKCFjdXJyZW50TGFuZ3VhZ2UpIHJldHVybiB7Zm9ybWF0OiBmb3JtYXR9OworCisJdmFyIHBhcnNlZCA9IFtdOworCXZhciByZSA9IChmb3JtYXQuc291cmNlIHx8IGZvcm1hdCkgLy8gYWxsb3cgZm9ybWF0IHRvIGJlIHJlZ2V4CisJIC5yZXBsYWNlKC8lKFthLXpdKS9naSwKKwkJZnVuY3Rpb24oJDAsICQxKXsKKwkJCXJldHVybiByZXBsYWNlcnMoJDEpIHx8ICQwOworCQl9CisJKS5yZXBsYWNlKC9cKCg/IVw/KS9nLCAnKD86JykgLy8gbWFrZSBhbGwgZ3JvdXBzIG5vbi1jYXB0dXJpbmcKKwkgLnJlcGxhY2UoLyAoPyFcP3xcKikvZywgJyw/ICcpIC8vIGJlIGZvcmdpdmluZyB3aXRoIHNwYWNlcyBhbmQgY29tbWFzCisJIC5yZXBsYWNlKC8lKFthLXolXSkvZ2ksCisJCWZ1bmN0aW9uKCQwLCAkMSl7CisJCQl2YXIgcCA9IGtleXNbJDFdOworCQkJaWYgKCFwKSByZXR1cm4gJDE7CisJCQlwYXJzZWQucHVzaCgkMSk7CisJCQlyZXR1cm4gJygnICsgcC5zb3VyY2UgKyAnKSc7CisJCX0KKwkpLnJlcGxhY2UoL1xbYS16XF0vZ2ksICdbYS16XFx1MDBjMC1cXHVmZmZmO1wmXScpOyAvLyBoYW5kbGUgdW5pY29kZSB3b3JkcworCisJcmV0dXJuIHsKKwkJZm9ybWF0OiBmb3JtYXQsCisJCXJlOiBuZXcgUmVnRXhwKCdeJyArIHJlICsgJyQnLCAnaScpLAorCQloYW5kbGVyOiBmdW5jdGlvbihiaXRzKXsKKwkJCWJpdHMgPSBiaXRzLnNsaWNlKDEpLmFzc29jaWF0ZShwYXJzZWQpOworCQkJdmFyIGRhdGUgPSBuZXcgRGF0ZSgpLmNsZWFyVGltZSgpLAorCQkJCXllYXIgPSBiaXRzLnkgfHwgYml0cy5ZOworCisJCQlpZiAoeWVhciAhPSBudWxsKSBoYW5kbGUuY2FsbChkYXRlLCAneScsIHllYXIpOyAvLyBuZWVkIHRvIHN0YXJ0IGluIHRoZSByaWdodCB5ZWFyCisJCQlpZiAoJ2QnIGluIGJpdHMpIGhhbmRsZS5jYWxsKGRhdGUsICdkJywgMSk7CisJCQlpZiAoJ20nIGluIGJpdHMgfHwgYml0cy5iIHx8IGJpdHMuQikgaGFuZGxlLmNhbGwoZGF0ZSwgJ20nLCAxKTsKKworCQkJZm9yICh2YXIga2V5IGluIGJpdHMpIGhhbmRsZS5jYWxsKGRhdGUsIGtleSwgYml0c1trZXldKTsKKwkJCXJldHVybiBkYXRlOworCQl9CisJfTsKK307CisKK3ZhciBoYW5kbGUgPSBmdW5jdGlvbihrZXksIHZhbHVlKXsKKwlpZiAoIXZhbHVlKSByZXR1cm4gdGhpczsKKworCXN3aXRjaCAoa2V5KXsKKwkJY2FzZSAnYSc6IGNhc2UgJ0EnOiByZXR1cm4gdGhpcy5zZXQoJ2RheScsIERhdGUucGFyc2VEYXkodmFsdWUsIHRydWUpKTsKKwkJY2FzZSAnYic6IGNhc2UgJ0InOiByZXR1cm4gdGhpcy5zZXQoJ21vJywgRGF0ZS5wYXJzZU1vbnRoKHZhbHVlLCB0cnVlKSk7CisJCWNhc2UgJ2QnOiByZXR1cm4gdGhpcy5zZXQoJ2RhdGUnLCB2YWx1ZSk7CisJCWNhc2UgJ0gnOiBjYXNlICdJJzogcmV0dXJuIHRoaXMuc2V0KCdocicsIHZhbHVlKTsKKwkJY2FzZSAnbSc6IHJldHVybiB0aGlzLnNldCgnbW8nLCB2YWx1ZSAtIDEpOworCQljYXNlICdNJzogcmV0dXJuIHRoaXMuc2V0KCdtaW4nLCB2YWx1ZSk7CisJCWNhc2UgJ3AnOiByZXR1cm4gdGhpcy5zZXQoJ2FtcG0nLCB2YWx1ZS5yZXBsYWNlKC9cLi9nLCAnJykpOworCQljYXNlICdTJzogcmV0dXJuIHRoaXMuc2V0KCdzZWMnLCB2YWx1ZSk7CisJCWNhc2UgJ3MnOiByZXR1cm4gdGhpcy5zZXQoJ21zJywgKCcwLicgKyB2YWx1ZSkgKiAxMDAwKTsKKwkJY2FzZSAndyc6IHJldHVybiB0aGlzLnNldCgnZGF5JywgdmFsdWUpOworCQljYXNlICdZJzogcmV0dXJuIHRoaXMuc2V0KCd5ZWFyJywgdmFsdWUpOworCQljYXNlICd5JzoKKwkJCXZhbHVlID0gK3ZhbHVlOworCQkJaWYgKHZhbHVlIDwgMTAwKSB2YWx1ZSArPSBzdGFydENlbnR1cnkgKyAodmFsdWUgPCBzdGFydFllYXIgPyAxMDAgOiAwKTsKKwkJCXJldHVybiB0aGlzLnNldCgneWVhcicsIHZhbHVlKTsKKwkJY2FzZSAneic6CisJCQlpZiAodmFsdWUgPT0gJ1onKSB2YWx1ZSA9ICcrMDAnOworCQkJdmFyIG9mZnNldCA9IHZhbHVlLm1hdGNoKC8oWystXSkoXGR7Mn0pOj8oXGR7Mn0pPy8pOworCQkJb2Zmc2V0ID0gKG9mZnNldFsxXSArICcxJykgKiAob2Zmc2V0WzJdICogNjAgKyAoK29mZnNldFszXSB8fCAwKSkgKyB0aGlzLmdldFRpbWV6b25lT2Zmc2V0KCk7CisJCQlyZXR1cm4gdGhpcy5zZXQoJ3RpbWUnLCB0aGlzIC0gb2Zmc2V0ICogNjAwMDApOworCX0KKworCXJldHVybiB0aGlzOworfTsKKworRGF0ZS5kZWZpbmVQYXJzZXJzKAorCSclWShbLS4vXSVtKFstLi9dJWQoKFR8ICklWCk/KT8pPycsIC8vICIxOTk5LTEyLTMxIiwgIjE5OTktMTItMzEgMTE6NTlwbSIsICIxOTk5LTEyLTMxIDIzOjU5OjU5IiwgSVNPODYwMQorCSclWSVtJWQoVCVIKCVNJVM/KT8pPycsIC8vICIxOTk5MTIzMSIsICIxOTk5MTIzMVQxMTU5IiwgY29tcGFjdAorCScleCggJVgpPycsIC8vICIxMi8zMSIsICIxMi4zMS45OSIsICIxMi0zMS0xOTk5IiwgIjEyLzMxLzIwMDggMTE6NTkgUE0iCisJJyVkJW8oICViKCAlWSk/KT8oICVYKT8nLCAvLyAiMzFzdCIsICIzMXN0IERlY2VtYmVyIiwgIjMxIERlYyAxOTk5IiwgIjMxIERlYyAxOTk5IDExOjU5cG0iCisJJyViKCAlZCVvKT8oICVZKT8oICVYKT8nLCAvLyBTYW1lIGFzIGFib3ZlIHdpdGggbW9udGggYW5kIGRheSBzd2l0Y2hlZAorCSclWSAlYiggJWQlbyggJVgpPyk/JywgLy8gU2FtZSBhcyBhYm92ZSB3aXRoIHllYXIgY29taW5nIGZpcnN0CisJJyVvICViICVkICVYICV6ICVZJywgLy8gIlRodSBPY3QgMjIgMDg6MTE6MjMgKzAwMDAgMjAwOSIKKwknJVQnLCAvLyAlSDolTTolUworCSclSDolTSggPyVwKT8nIC8vICIxMTowNXBtIiwgIjExOjA1IGFtIiBhbmQgIjExOjA1IgorKTsKKworTG9jYWxlLmFkZEV2ZW50KCdjaGFuZ2UnLCBmdW5jdGlvbihsYW5ndWFnZSl7CisJaWYgKExvY2FsZS5nZXQoJ0RhdGUnKSkgcmVjb21waWxlKGxhbmd1YWdlKTsKK30pLmZpcmVFdmVudCgnY2hhbmdlJywgTG9jYWxlLmdldEN1cnJlbnQoKSk7CisKK30pKCk7CisKKworLyoKKy0tLQorCitzY3JpcHQ6IERhdGUuRXh0cmFzLmpzCisKK25hbWU6IERhdGUuRXh0cmFzCisKK2Rlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBEYXRlIG5hdGl2ZSBvYmplY3QgdG8gaW5jbHVkZSBleHRyYSBtZXRob2RzIChvbiB0b3Agb2YgdGhvc2UgaW4gRGF0ZS5qcykuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisgIC0gU2NvdHQgS3lsZQorCityZXF1aXJlczoKKyAgLSAvRGF0ZQorCitwcm92aWRlczogW0RhdGUuRXh0cmFzXQorCisuLi4KKyovCisKK0RhdGUuaW1wbGVtZW50KHsKKworCXRpbWVEaWZmSW5Xb3JkczogZnVuY3Rpb24odG8peworCQlyZXR1cm4gRGF0ZS5kaXN0YW5jZU9mVGltZUluV29yZHModGhpcywgdG8gfHwgbmV3IERhdGUpOworCX0sCisKKwl0aW1lRGlmZjogZnVuY3Rpb24odG8sIHNlcGFyYXRvcil7CisJCWlmICh0byA9PSBudWxsKSB0byA9IG5ldyBEYXRlOworCQl2YXIgZGVsdGEgPSAoKHRvIC0gdGhpcykgLyAxMDAwKS5mbG9vcigpLmFicygpOworCisJCXZhciB2YWxzID0gW10sCisJCQlkdXJhdGlvbnMgPSBbNjAsIDYwLCAyNCwgMzY1LCAwXSwKKwkJCW5hbWVzID0gWydzJywgJ20nLCAnaCcsICdkJywgJ3knXSwKKwkJCXZhbHVlLCBkdXJhdGlvbjsKKworCQlmb3IgKHZhciBpdGVtID0gMDsgaXRlbSA8IGR1cmF0aW9ucy5sZW5ndGg7IGl0ZW0rKyl7CisJCQlpZiAoaXRlbSAmJiAhZGVsdGEpIGJyZWFrOworCQkJdmFsdWUgPSBkZWx0YTsKKwkJCWlmICgoZHVyYXRpb24gPSBkdXJhdGlvbnNbaXRlbV0pKXsKKwkJCQl2YWx1ZSA9IChkZWx0YSAlIGR1cmF0aW9uKTsKKwkJCQlkZWx0YSA9IChkZWx0YSAvIGR1cmF0aW9uKS5mbG9vcigpOworCQkJfQorCQkJdmFscy51bnNoaWZ0KHZhbHVlICsgKG5hbWVzW2l0ZW1dIHx8ICcnKSk7CisJCX0KKworCQlyZXR1cm4gdmFscy5qb2luKHNlcGFyYXRvciB8fCAnOicpOworCX0KKworfSkuZXh0ZW5kKHsKKworCWRpc3RhbmNlT2ZUaW1lSW5Xb3JkczogZnVuY3Rpb24oZnJvbSwgdG8peworCQlyZXR1cm4gRGF0ZS5nZXRUaW1lUGhyYXNlKCgodG8gLSBmcm9tKSAvIDEwMDApLnRvSW50KCkpOworCX0sCisKKwlnZXRUaW1lUGhyYXNlOiBmdW5jdGlvbihkZWx0YSl7CisJCXZhciBzdWZmaXggPSAoZGVsdGEgPCAwKSA/ICdVbnRpbCcgOiAnQWdvJzsKKwkJaWYgKGRlbHRhIDwgMCkgZGVsdGEgKj0gLTE7CisKKwkJdmFyIHVuaXRzID0geworCQkJbWludXRlOiA2MCwKKwkJCWhvdXI6IDYwLAorCQkJZGF5OiAyNCwKKwkJCXdlZWs6IDcsCisJCQltb250aDogNTIgLyAxMiwKKwkJCXllYXI6IDEyLAorCQkJZW9uOiBJbmZpbml0eQorCQl9OworCisJCXZhciBtc2cgPSAnbGVzc1RoYW5NaW51dGUnOworCisJCWZvciAodmFyIHVuaXQgaW4gdW5pdHMpeworCQkJdmFyIGludGVydmFsID0gdW5pdHNbdW5pdF07CisJCQlpZiAoZGVsdGEgPCAxLjUgKiBpbnRlcnZhbCl7CisJCQkJaWYgKGRlbHRhID4gMC43NSAqIGludGVydmFsKSBtc2cgPSB1bml0OworCQkJCWJyZWFrOworCQkJfQorCQkJZGVsdGEgLz0gaW50ZXJ2YWw7CisJCQltc2cgPSB1bml0ICsgJ3MnOworCQl9CisKKwkJZGVsdGEgPSBkZWx0YS5yb3VuZCgpOworCQlyZXR1cm4gRGF0ZS5nZXRNc2cobXNnICsgc3VmZml4LCBkZWx0YSkuc3Vic3RpdHV0ZSh7ZGVsdGE6IGRlbHRhfSk7CisJfQorCit9KS5kZWZpbmVQYXJzZXJzKAorCisJeworCQkvLyAidG9kYXkiLCAidG9tb3Jyb3ciLCAieWVzdGVyZGF5IgorCQlyZTogL14oPzp0b2R8dG9tfHllcykvaSwKKwkJaGFuZGxlcjogZnVuY3Rpb24oYml0cyl7CisJCQl2YXIgZCA9IG5ldyBEYXRlKCkuY2xlYXJUaW1lKCk7CisJCQlzd2l0Y2ggKGJpdHNbMF0peworCQkJCWNhc2UgJ3RvbSc6IHJldHVybiBkLmluY3JlbWVudCgpOworCQkJCWNhc2UgJ3llcyc6IHJldHVybiBkLmRlY3JlbWVudCgpOworCQkJCWRlZmF1bHQ6IHJldHVybiBkOworCQkJfQorCQl9CisJfSwKKworCXsKKwkJLy8gIm5leHQgV2VkbmVzZGF5IiwgImxhc3QgVGh1cnNkYXkiCisJCXJlOiAvXihuZXh0fGxhc3QpIChbYS16XSspJC9pLAorCQloYW5kbGVyOiBmdW5jdGlvbihiaXRzKXsKKwkJCXZhciBkID0gbmV3IERhdGUoKS5jbGVhclRpbWUoKTsKKwkJCXZhciBkYXkgPSBkLmdldERheSgpOworCQkJdmFyIG5ld0RheSA9IERhdGUucGFyc2VEYXkoYml0c1syXSwgdHJ1ZSk7CisJCQl2YXIgYWRkRGF5cyA9IG5ld0RheSAtIGRheTsKKwkJCWlmIChuZXdEYXkgPD0gZGF5KSBhZGREYXlzICs9IDc7CisJCQlpZiAoYml0c1sxXSA9PSAnbGFzdCcpIGFkZERheXMgLT0gNzsKKwkJCXJldHVybiBkLnNldCgnZGF0ZScsIGQuZ2V0RGF0ZSgpICsgYWRkRGF5cyk7CisJCX0KKwl9CisKKykuYWxpYXMoJ3RpbWVBZ29JbldvcmRzJywgJ3RpbWVEaWZmSW5Xb3JkcycpOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmVuLVVTLk51bWJlcgorCitkZXNjcmlwdGlvbjogTnVtYmVyIG1lc3NhZ2VzIGZvciBVUyBFbmdsaXNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFyaWFuIFN0b2x3aWprCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZW4tVVMuTnVtYmVyXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2VuLVVTJywgJ051bWJlcicsIHsKKworCWRlY2ltYWw6ICcuJywKKwlncm91cDogJywnLAorCisvKiAJQ29tbWVudGVkIHByb3BlcnRpZXMgYXJlIHRoZSBkZWZhdWx0cyBmb3IgTnVtYmVyLmZvcm1hdAorCWRlY2ltYWxzOiAwLAorCXByZWNpc2lvbjogMCwKKwlzY2llbnRpZmljOiBudWxsLAorCisJcHJlZml4OiBudWxsLAorCXN1ZmZpYzogbnVsbCwKKworCS8vIE5lZ2F0aXZlL0N1cnJlbmN5L3BlcmNlbnRhZ2Ugd2lsbCBtaXhpbiBOdW1iZXIKKwluZWdhdGl2ZTogeworCQlwcmVmaXg6ICctJworCX0sKi8KKworCWN1cnJlbmN5OiB7CisvLwkJZGVjaW1hbHM6IDIsCisJCXByZWZpeDogJyQgJworCX0vKiwKKworCXBlcmNlbnRhZ2U6IHsKKwkJZGVjaW1hbHM6IDIsCisJCXN1ZmZpeDogJyUnCisJfSovCisKK30pOworCisKKworCisvKgorLS0tCituYW1lOiBOdW1iZXIuRm9ybWF0CitkZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgTnVtYmVyIFR5cGUgb2JqZWN0IHRvIGluY2x1ZGUgYSBudW1iZXIgZm9ybWF0dGluZyBtZXRob2QuCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorYXV0aG9yczogW0FyaWFuIFN0b2x3aWprXQorcmVxdWlyZXM6IFtDb3JlL051bWJlciwgTG9jYWxlLmVuLVVTLk51bWJlcl0KKyMgTnVtYmVyLkV4dHJhcyBpcyBmb3IgY29tcGF0aWJpbGl0eQorcHJvdmlkZXM6IFtOdW1iZXIuRm9ybWF0LCBOdW1iZXIuRXh0cmFzXQorLi4uCisqLworCisKK051bWJlci5pbXBsZW1lbnQoeworCisJZm9ybWF0OiBmdW5jdGlvbihvcHRpb25zKXsKKwkJLy8gVGhhbmtzIGRvam8gYW5kIFlVSSBmb3Igc29tZSBpbnNwaXJhdGlvbgorCQl2YXIgdmFsdWUgPSB0aGlzOworCQlvcHRpb25zID0gb3B0aW9ucyA/IE9iamVjdC5jbG9uZShvcHRpb25zKSA6IHt9OworCQl2YXIgZ2V0T3B0aW9uID0gZnVuY3Rpb24oa2V5KXsKKwkJCWlmIChvcHRpb25zW2tleV0gIT0gbnVsbCkgcmV0dXJuIG9wdGlvbnNba2V5XTsKKwkJCXJldHVybiBMb2NhbGUuZ2V0KCdOdW1iZXIuJyArIGtleSk7CisJCX07CisKKwkJdmFyIG5lZ2F0aXZlID0gdmFsdWUgPCAwLAorCQkJZGVjaW1hbCA9IGdldE9wdGlvbignZGVjaW1hbCcpLAorCQkJcHJlY2lzaW9uID0gZ2V0T3B0aW9uKCdwcmVjaXNpb24nKSwKKwkJCWdyb3VwID0gZ2V0T3B0aW9uKCdncm91cCcpLAorCQkJZGVjaW1hbHMgPSBnZXRPcHRpb24oJ2RlY2ltYWxzJyk7CisKKwkJaWYgKG5lZ2F0aXZlKXsKKwkJCXZhciBuZWdhdGl2ZUxvY2FsZSA9IGdldE9wdGlvbignbmVnYXRpdmUnKSB8fCB7fTsKKwkJCWlmIChuZWdhdGl2ZUxvY2FsZS5wcmVmaXggPT0gbnVsbCAmJiBuZWdhdGl2ZUxvY2FsZS5zdWZmaXggPT0gbnVsbCkgbmVnYXRpdmVMb2NhbGUucHJlZml4ID0gJy0nOworCQkJWydwcmVmaXgnLCAnc3VmZml4J10uZWFjaChmdW5jdGlvbihrZXkpeworCQkJCWlmIChuZWdhdGl2ZUxvY2FsZVtrZXldKSBvcHRpb25zW2tleV0gPSBnZXRPcHRpb24oa2V5KSArIG5lZ2F0aXZlTG9jYWxlW2tleV07CisJCQl9KTsKKworCQkJdmFsdWUgPSAtdmFsdWU7CisJCX0KKworCQl2YXIgcHJlZml4ID0gZ2V0T3B0aW9uKCdwcmVmaXgnKSwKKwkJCXN1ZmZpeCA9IGdldE9wdGlvbignc3VmZml4Jyk7CisKKwkJaWYgKGRlY2ltYWxzICE9PSAnJyAmJiBkZWNpbWFscyA+PSAwICYmIGRlY2ltYWxzIDw9IDIwKSB2YWx1ZSA9IHZhbHVlLnRvRml4ZWQoZGVjaW1hbHMpOworCQlpZiAocHJlY2lzaW9uID49IDEgJiYgcHJlY2lzaW9uIDw9IDIxKSB2YWx1ZSA9ICgrdmFsdWUpLnRvUHJlY2lzaW9uKHByZWNpc2lvbik7CisKKwkJdmFsdWUgKz0gJyc7CisJCXZhciBpbmRleDsKKwkJaWYgKGdldE9wdGlvbignc2NpZW50aWZpYycpID09PSBmYWxzZSAmJiB2YWx1ZS5pbmRleE9mKCdlJykgPiAtMSl7CisJCQl2YXIgbWF0Y2ggPSB2YWx1ZS5zcGxpdCgnZScpLAorCQkJCXplcm9zID0gK21hdGNoWzFdOworCQkJdmFsdWUgPSBtYXRjaFswXS5yZXBsYWNlKCcuJywgJycpOworCisJCQlpZiAoemVyb3MgPCAwKXsKKwkJCQl6ZXJvcyA9IC16ZXJvcyAtIDE7CisJCQkJaW5kZXggPSBtYXRjaFswXS5pbmRleE9mKCcuJyk7CisJCQkJaWYgKGluZGV4ID4gLTEpIHplcm9zIC09IGluZGV4IC0gMTsKKwkJCQl3aGlsZSAoemVyb3MtLSkgdmFsdWUgPSAnMCcgKyB2YWx1ZTsKKwkJCQl2YWx1ZSA9ICcwLicgKyB2YWx1ZTsKKwkJCX0gZWxzZSB7CisJCQkJaW5kZXggPSBtYXRjaFswXS5sYXN0SW5kZXhPZignLicpOworCQkJCWlmIChpbmRleCA+IC0xKSB6ZXJvcyAtPSBtYXRjaFswXS5sZW5ndGggLSBpbmRleCAtIDE7CisJCQkJd2hpbGUgKHplcm9zLS0pIHZhbHVlICs9ICcwJzsKKwkJCX0KKwkJfQorCisJCWlmIChkZWNpbWFsICE9ICcuJykgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCcuJywgZGVjaW1hbCk7CisKKwkJaWYgKGdyb3VwKXsKKwkJCWluZGV4ID0gdmFsdWUubGFzdEluZGV4T2YoZGVjaW1hbCk7CisJCQlpbmRleCA9IChpbmRleCA+IC0xKSA/IGluZGV4IDogdmFsdWUubGVuZ3RoOworCQkJdmFyIG5ld091dHB1dCA9IHZhbHVlLnN1YnN0cmluZyhpbmRleCksCisJCQkJaSA9IGluZGV4OworCisJCQl3aGlsZSAoaS0tKXsKKwkJCQlpZiAoKGluZGV4IC0gaSAtIDEpICUgMyA9PSAwICYmIGkgIT0gKGluZGV4IC0gMSkpIG5ld091dHB1dCA9IGdyb3VwICsgbmV3T3V0cHV0OworCQkJCW5ld091dHB1dCA9IHZhbHVlLmNoYXJBdChpKSArIG5ld091dHB1dDsKKwkJCX0KKworCQkJdmFsdWUgPSBuZXdPdXRwdXQ7CisJCX0KKworCQlpZiAocHJlZml4KSB2YWx1ZSA9IHByZWZpeCArIHZhbHVlOworCQlpZiAoc3VmZml4KSB2YWx1ZSArPSBzdWZmaXg7CisKKwkJcmV0dXJuIHZhbHVlOworCX0sCisKKwlmb3JtYXRDdXJyZW5jeTogZnVuY3Rpb24oKXsKKwkJdmFyIGxvY2FsZSA9IExvY2FsZS5nZXQoJ051bWJlci5jdXJyZW5jeScpIHx8IHt9OworCQlpZiAobG9jYWxlLnNjaWVudGlmaWMgPT0gbnVsbCkgbG9jYWxlLnNjaWVudGlmaWMgPSBmYWxzZTsKKwkJaWYgKGxvY2FsZS5kZWNpbWFscyA9PSBudWxsKSBsb2NhbGUuZGVjaW1hbHMgPSAyOworCisJCXJldHVybiB0aGlzLmZvcm1hdChsb2NhbGUpOworCX0sCisKKwlmb3JtYXRQZXJjZW50YWdlOiBmdW5jdGlvbigpeworCQl2YXIgbG9jYWxlID0gTG9jYWxlLmdldCgnTnVtYmVyLnBlcmNlbnRhZ2UnKSB8fCB7fTsKKwkJaWYgKGxvY2FsZS5zdWZmaXggPT0gbnVsbCkgbG9jYWxlLnN1ZmZpeCA9ICclJzsKKwkJaWYgKGxvY2FsZS5kZWNpbWFscyA9PSBudWxsKSBsb2NhbGUuZGVjaW1hbHMgPSAyOworCisJCXJldHVybiB0aGlzLmZvcm1hdChsb2NhbGUpOworCX0KKworfSk7CisKKworLyoKKy0tLQorCitzY3JpcHQ6IFN0cmluZy5FeHRyYXMuanMKKworbmFtZTogU3RyaW5nLkV4dHJhcworCitkZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgU3RyaW5nIG5hdGl2ZSBvYmplY3QgdG8gaW5jbHVkZSBtZXRob2RzIHVzZWZ1bCBpbiBtYW5hZ2luZyB2YXJpb3VzIGtpbmRzIG9mIHN0cmluZ3MgKHF1ZXJ5IHN0cmluZ3MsIHVybHMsIGh0bWwsIGV0YykuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisgIC0gR3VpbGxlcm1vIFJhdWNoCisgIC0gQ2hyaXN0b3BoZXIgUGl0dAorCityZXF1aXJlczoKKyAgLSBDb3JlL1N0cmluZworICAtIENvcmUvQXJyYXkKKyAgLSBNb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbU3RyaW5nLkV4dHJhc10KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIHNwZWNpYWwgPSB7CisJJ2EnOiAvW8Ogw6HDosOjw6TDpcSDxIVdL2csCisJJ0EnOiAvW8OAw4HDgsODw4TDhcSCxIRdL2csCisJJ2MnOiAvW8SHxI3Dp10vZywKKwknQyc6IC9bxIbEjMOHXS9nLAorCSdkJzogL1vEj8SRXS9nLAorCSdEJzogL1vEjsOQXS9nLAorCSdlJzogL1vDqMOpw6rDq8SbxJldL2csCisJJ0UnOiAvW8OIw4nDisOLxJrEmF0vZywKKwknZyc6IC9bxJ9dL2csCisJJ0cnOiAvW8SeXS9nLAorCSdpJzogL1vDrMOtw67Dr10vZywKKwknSSc6IC9bw4zDjcOOw49dL2csCisJJ2wnOiAvW8S6xL7Fgl0vZywKKwknTCc6IC9bxLnEvcWBXS9nLAorCSduJzogL1vDscWIxYRdL2csCisJJ04nOiAvW8ORxYfFg10vZywKKwknbyc6IC9bw7LDs8O0w7XDtsO4xZFdL2csCisJJ08nOiAvW8OSw5PDlMOVw5bDmF0vZywKKwkncic6IC9bxZnFlV0vZywKKwknUic6IC9bxZjFlF0vZywKKwkncyc6IC9bxaHFocWfXS9nLAorCSdTJzogL1vFoMWexZpdL2csCisJJ3QnOiAvW8WlxaNdL2csCisJJ1QnOiAvW8WkxaJdL2csCisJJ3VlJzogL1vDvF0vZywKKwknVUUnOiAvW8OcXS9nLAorCSd1JzogL1vDucO6w7vFr8K1XS9nLAorCSdVJzogL1vDmcOaw5vFrl0vZywKKwkneSc6IC9bw7/DvV0vZywKKwknWSc6IC9bxbjDnV0vZywKKwkneic6IC9bxb7FusW8XS9nLAorCSdaJzogL1vFvcW5xbtdL2csCisJJ3RoJzogL1vDvl0vZywKKwknVEgnOiAvW8OeXS9nLAorCSdkaCc6IC9bw7BdL2csCisJJ0RIJzogL1vDkF0vZywKKwknc3MnOiAvW8OfXS9nLAorCSdvZSc6IC9bxZNdL2csCisJJ09FJzogL1vFkl0vZywKKwknYWUnOiAvW8OmXS9nLAorCSdBRSc6IC9bw4ZdL2cKK30sCisKK3RpZHkgPSB7CisJJyAnOiAvW1x4YTBcdTIwMDJcdTIwMDNcdTIwMDldL2csCisJJyonOiAvW1x4YjddL2csCisJJ1wnJzogL1tcdTIwMThcdTIwMTldL2csCisJJyInOiAvW1x1MjAxY1x1MjAxZF0vZywKKwknLi4uJzogL1tcdTIwMjZdL2csCisJJy0nOiAvW1x1MjAxM10vZywKKy8vCSctLSc6IC9bXHUyMDE0XS9nLAorCScmcmFxdW87JzogL1tcdUZGRkRdL2cKK307CisKK3ZhciB3YWxrID0gZnVuY3Rpb24oc3RyaW5nLCByZXBsYWNlbWVudHMpeworCXZhciByZXN1bHQgPSBzdHJpbmcsIGtleTsKKwlmb3IgKGtleSBpbiByZXBsYWNlbWVudHMpIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKHJlcGxhY2VtZW50c1trZXldLCBrZXkpOworCXJldHVybiByZXN1bHQ7Cit9OworCit2YXIgZ2V0UmVnZXhGb3JUYWcgPSBmdW5jdGlvbih0YWcsIGNvbnRlbnRzKXsKKwl0YWcgPSB0YWcgfHwgJyc7CisJdmFyIHJlZ3N0ciA9IGNvbnRlbnRzID8gIjwiICsgdGFnICsgIig/IVxcdylbXj5dKj4oW1xcc1xcU10qPyk8XC8iICsgdGFnICsgIig/IVxcdyk+IiA6ICI8XC8/IiArIHRhZyArICIoW14+XSspPz4iLAorCQlyZWcgPSBuZXcgUmVnRXhwKHJlZ3N0ciwgImdpIik7CisJcmV0dXJuIHJlZzsKK307CisKK1N0cmluZy5pbXBsZW1lbnQoeworCisJc3RhbmRhcmRpemU6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB3YWxrKHRoaXMsIHNwZWNpYWwpOworCX0sCisKKwlyZXBlYXQ6IGZ1bmN0aW9uKHRpbWVzKXsKKwkJcmV0dXJuIG5ldyBBcnJheSh0aW1lcyArIDEpLmpvaW4odGhpcyk7CisJfSwKKworCXBhZDogZnVuY3Rpb24obGVuZ3RoLCBzdHIsIGRpcmVjdGlvbil7CisJCWlmICh0aGlzLmxlbmd0aCA+PSBsZW5ndGgpIHJldHVybiB0aGlzOworCisJCXZhciBwYWQgPSAoc3RyID09IG51bGwgPyAnICcgOiAnJyArIHN0cikKKwkJCS5yZXBlYXQobGVuZ3RoIC0gdGhpcy5sZW5ndGgpCisJCQkuc3Vic3RyKDAsIGxlbmd0aCAtIHRoaXMubGVuZ3RoKTsKKworCQlpZiAoIWRpcmVjdGlvbiB8fCBkaXJlY3Rpb24gPT0gJ3JpZ2h0JykgcmV0dXJuIHRoaXMgKyBwYWQ7CisJCWlmIChkaXJlY3Rpb24gPT0gJ2xlZnQnKSByZXR1cm4gcGFkICsgdGhpczsKKworCQlyZXR1cm4gcGFkLnN1YnN0cigwLCAocGFkLmxlbmd0aCAvIDIpLmZsb29yKCkpICsgdGhpcyArIHBhZC5zdWJzdHIoMCwgKHBhZC5sZW5ndGggLyAyKS5jZWlsKCkpOworCX0sCisKKwlnZXRUYWdzOiBmdW5jdGlvbih0YWcsIGNvbnRlbnRzKXsKKwkJcmV0dXJuIHRoaXMubWF0Y2goZ2V0UmVnZXhGb3JUYWcodGFnLCBjb250ZW50cykpIHx8IFtdOworCX0sCisKKwlzdHJpcFRhZ3M6IGZ1bmN0aW9uKHRhZywgY29udGVudHMpeworCQlyZXR1cm4gdGhpcy5yZXBsYWNlKGdldFJlZ2V4Rm9yVGFnKHRhZywgY29udGVudHMpLCAnJyk7CisJfSwKKworCXRpZHk6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB3YWxrKHRoaXMsIHRpZHkpOworCX0sCisKKwl0cnVuY2F0ZTogZnVuY3Rpb24obWF4LCB0cmFpbCwgYXRDaGFyKXsKKwkJdmFyIHN0cmluZyA9IHRoaXM7CisJCWlmICh0cmFpbCA9PSBudWxsICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgdHJhaWwgPSAn4oCmJzsKKwkJaWYgKHN0cmluZy5sZW5ndGggPiBtYXgpeworCQkJc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZygwLCBtYXgpOworCQkJaWYgKGF0Q2hhcil7CisJCQkJdmFyIGluZGV4ID0gc3RyaW5nLmxhc3RJbmRleE9mKGF0Q2hhcik7CisJCQkJaWYgKGluZGV4ICE9IC0xKSBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKDAsIGluZGV4KTsKKwkJCX0KKwkJCWlmICh0cmFpbCkgc3RyaW5nICs9IHRyYWlsOworCQl9CisJCXJldHVybiBzdHJpbmc7CisJfQorCit9KTsKKworfSkoKTsKKworCisvKgorLS0tCisKK3NjcmlwdDogU3RyaW5nLlF1ZXJ5U3RyaW5nLmpzCisKK25hbWU6IFN0cmluZy5RdWVyeVN0cmluZworCitkZXNjcmlwdGlvbjogTWV0aG9kcyBmb3IgZGVhbGluZyB3aXRoIFVSSSBxdWVyeSBzdHJpbmdzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFNlYmFzdGlhbiBNYXJrYsOlZ2UKKyAgLSBBYXJvbiBOZXd0b24KKyAgLSBMZW5uYXJ0IFBpbG9uCisgIC0gVmFsZXJpbyBQcm9pZXR0aQorCityZXF1aXJlczoKKyAgLSBDb3JlL0FycmF5CisgIC0gQ29yZS9TdHJpbmcKKyAgLSAvTW9vVG9vbHMuTW9yZQorCitwcm92aWRlczogW1N0cmluZy5RdWVyeVN0cmluZ10KKworLi4uCisqLworCitTdHJpbmcuaW1wbGVtZW50KHsKKworCXBhcnNlUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKGRlY29kZUtleXMsIGRlY29kZVZhbHVlcyl7CisJCWlmIChkZWNvZGVLZXlzID09IG51bGwpIGRlY29kZUtleXMgPSB0cnVlOworCQlpZiAoZGVjb2RlVmFsdWVzID09IG51bGwpIGRlY29kZVZhbHVlcyA9IHRydWU7CisKKwkJdmFyIHZhcnMgPSB0aGlzLnNwbGl0KC9bJjtdLyksCisJCQlvYmplY3QgPSB7fTsKKwkJaWYgKCF2YXJzLmxlbmd0aCkgcmV0dXJuIG9iamVjdDsKKworCQl2YXJzLmVhY2goZnVuY3Rpb24odmFsKXsKKwkJCXZhciBpbmRleCA9IHZhbC5pbmRleE9mKCc9JykgKyAxLAorCQkJCXZhbHVlID0gaW5kZXggPyB2YWwuc3Vic3RyKGluZGV4KSA6ICcnLAorCQkJCWtleXMgPSBpbmRleCA/IHZhbC5zdWJzdHIoMCwgaW5kZXggLSAxKS5tYXRjaCgvKFteXF1cW10rfChcQikoPz1cXSkpL2cpIDogW3ZhbF0sCisJCQkJb2JqID0gb2JqZWN0OworCQkJaWYgKCFrZXlzKSByZXR1cm47CisJCQlpZiAoZGVjb2RlVmFsdWVzKSB2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7CisJCQlrZXlzLmVhY2goZnVuY3Rpb24oa2V5LCBpKXsKKwkJCQlpZiAoZGVjb2RlS2V5cykga2V5ID0gZGVjb2RlVVJJQ29tcG9uZW50KGtleSk7CisJCQkJdmFyIGN1cnJlbnQgPSBvYmpba2V5XTsKKworCQkJCWlmIChpIDwga2V5cy5sZW5ndGggLSAxKSBvYmogPSBvYmpba2V5XSA9IGN1cnJlbnQgfHwge307CisJCQkJZWxzZSBpZiAodHlwZU9mKGN1cnJlbnQpID09ICdhcnJheScpIGN1cnJlbnQucHVzaCh2YWx1ZSk7CisJCQkJZWxzZSBvYmpba2V5XSA9IGN1cnJlbnQgIT0gbnVsbCA/IFtjdXJyZW50LCB2YWx1ZV0gOiB2YWx1ZTsKKwkJCX0pOworCQl9KTsKKworCQlyZXR1cm4gb2JqZWN0OworCX0sCisKKwljbGVhblF1ZXJ5U3RyaW5nOiBmdW5jdGlvbihtZXRob2QpeworCQlyZXR1cm4gdGhpcy5zcGxpdCgnJicpLmZpbHRlcihmdW5jdGlvbih2YWwpeworCQkJdmFyIGluZGV4ID0gdmFsLmluZGV4T2YoJz0nKSwKKwkJCQlrZXkgPSBpbmRleCA8IDAgPyAnJyA6IHZhbC5zdWJzdHIoMCwgaW5kZXgpLAorCQkJCXZhbHVlID0gdmFsLnN1YnN0cihpbmRleCArIDEpOworCisJCQlyZXR1cm4gbWV0aG9kID8gbWV0aG9kLmNhbGwobnVsbCwga2V5LCB2YWx1ZSkgOiAodmFsdWUgfHwgdmFsdWUgPT09IDApOworCQl9KS5qb2luKCcmJyk7CisJfQorCit9KTsKKworCisvKgorLS0tCisKK3NjcmlwdDogVVJJLmpzCisKK25hbWU6IFVSSQorCitkZXNjcmlwdGlvbjogUHJvdmlkZXMgbWV0aG9kcyB1c2VmdWwgaW4gbWFuYWdpbmcgdGhlIHdpbmRvdyBsb2NhdGlvbiBhbmQgdXJpcy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBTZWJhc3RpYW4gTWFya2LDpWdlCisgIC0gQWFyb24gTmV3dG9uCisKK3JlcXVpcmVzOgorICAtIENvcmUvT2JqZWN0CisgIC0gQ29yZS9DbGFzcworICAtIENvcmUvQ2xhc3MuRXh0cmFzCisgIC0gQ29yZS9FbGVtZW50CisgIC0gL1N0cmluZy5RdWVyeVN0cmluZworCitwcm92aWRlczogW1VSSV0KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIHRvU3RyaW5nID0gZnVuY3Rpb24oKXsKKwlyZXR1cm4gdGhpcy5nZXQoJ3ZhbHVlJyk7Cit9OworCit2YXIgVVJJID0gdGhpcy5VUkkgPSBuZXcgQ2xhc3MoeworCisJSW1wbGVtZW50czogT3B0aW9ucywKKworCW9wdGlvbnM6IHsKKwkJLypiYXNlOiBmYWxzZSovCisJfSwKKworCXJlZ2V4OiAvXig/OihcdyspOik/KD86XC9cLyg/Oig/OihbXjpAXC9dKik6PyhbXjpAXC9dKikpP0ApPyhbXjpcLz8jXSopKD86OihcZCopKT8pPyhcLlwuPyR8KD86W14/I1wvXSpcLykqKShbXj8jXSopKD86XD8oW14jXSopKT8oPzojKC4qKSk/LywKKwlwYXJ0czogWydzY2hlbWUnLCAndXNlcicsICdwYXNzd29yZCcsICdob3N0JywgJ3BvcnQnLCAnZGlyZWN0b3J5JywgJ2ZpbGUnLCAncXVlcnknLCAnZnJhZ21lbnQnXSwKKwlzY2hlbWVzOiB7aHR0cDogODAsIGh0dHBzOiA0NDMsIGZ0cDogMjEsIHJ0c3A6IDU1NCwgbW1zOiAxNzU1LCBmaWxlOiAwfSwKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKHVyaSwgb3B0aW9ucyl7CisJCXRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTsKKwkJdmFyIGJhc2UgPSB0aGlzLm9wdGlvbnMuYmFzZSB8fCBVUkkuYmFzZTsKKwkJaWYgKCF1cmkpIHVyaSA9IGJhc2U7CisKKwkJaWYgKHVyaSAmJiB1cmkucGFyc2VkKSB0aGlzLnBhcnNlZCA9IE9iamVjdC5jbG9uZSh1cmkucGFyc2VkKTsKKwkJZWxzZSB0aGlzLnNldCgndmFsdWUnLCB1cmkuaHJlZiB8fCB1cmkudG9TdHJpbmcoKSwgYmFzZSA/IG5ldyBVUkkoYmFzZSkgOiBmYWxzZSk7CisJfSwKKworCXBhcnNlOiBmdW5jdGlvbih2YWx1ZSwgYmFzZSl7CisJCXZhciBiaXRzID0gdmFsdWUubWF0Y2godGhpcy5yZWdleCk7CisJCWlmICghYml0cykgcmV0dXJuIGZhbHNlOworCQliaXRzLnNoaWZ0KCk7CisJCXJldHVybiB0aGlzLm1lcmdlKGJpdHMuYXNzb2NpYXRlKHRoaXMucGFydHMpLCBiYXNlKTsKKwl9LAorCisJbWVyZ2U6IGZ1bmN0aW9uKGJpdHMsIGJhc2UpeworCQlpZiAoKCFiaXRzIHx8ICFiaXRzLnNjaGVtZSkgJiYgKCFiYXNlIHx8ICFiYXNlLnNjaGVtZSkpIHJldHVybiBmYWxzZTsKKwkJaWYgKGJhc2UpeworCQkJdGhpcy5wYXJ0cy5ldmVyeShmdW5jdGlvbihwYXJ0KXsKKwkJCQlpZiAoYml0c1twYXJ0XSkgcmV0dXJuIGZhbHNlOworCQkJCWJpdHNbcGFydF0gPSBiYXNlW3BhcnRdIHx8ICcnOworCQkJCXJldHVybiB0cnVlOworCQkJfSk7CisJCX0KKwkJYml0cy5wb3J0ID0gYml0cy5wb3J0IHx8IHRoaXMuc2NoZW1lc1tiaXRzLnNjaGVtZS50b0xvd2VyQ2FzZSgpXTsKKwkJYml0cy5kaXJlY3RvcnkgPSBiaXRzLmRpcmVjdG9yeSA/IHRoaXMucGFyc2VEaXJlY3RvcnkoYml0cy5kaXJlY3RvcnksIGJhc2UgPyBiYXNlLmRpcmVjdG9yeSA6ICcnKSA6ICcvJzsKKwkJcmV0dXJuIGJpdHM7CisJfSwKKworCXBhcnNlRGlyZWN0b3J5OiBmdW5jdGlvbihkaXJlY3RvcnksIGJhc2VEaXJlY3RvcnkpeworCQlkaXJlY3RvcnkgPSAoZGlyZWN0b3J5LnN1YnN0cigwLCAxKSA9PSAnLycgPyAnJyA6IChiYXNlRGlyZWN0b3J5IHx8ICcvJykpICsgZGlyZWN0b3J5OworCQlpZiAoIWRpcmVjdG9yeS50ZXN0KFVSSS5yZWdzLmRpcmVjdG9yeURvdCkpIHJldHVybiBkaXJlY3Rvcnk7CisJCXZhciByZXN1bHQgPSBbXTsKKwkJZGlyZWN0b3J5LnJlcGxhY2UoVVJJLnJlZ3MuZW5kU2xhc2gsICcnKS5zcGxpdCgnLycpLmVhY2goZnVuY3Rpb24oZGlyKXsKKwkJCWlmIChkaXIgPT0gJy4uJyAmJiByZXN1bHQubGVuZ3RoID4gMCkgcmVzdWx0LnBvcCgpOworCQkJZWxzZSBpZiAoZGlyICE9ICcuJykgcmVzdWx0LnB1c2goZGlyKTsKKwkJfSk7CisJCXJldHVybiByZXN1bHQuam9pbignLycpICsgJy8nOworCX0sCisKKwljb21iaW5lOiBmdW5jdGlvbihiaXRzKXsKKwkJcmV0dXJuIGJpdHMudmFsdWUgfHwgYml0cy5zY2hlbWUgKyAnOi8vJyArCisJCQkoYml0cy51c2VyID8gYml0cy51c2VyICsgKGJpdHMucGFzc3dvcmQgPyAnOicgKyBiaXRzLnBhc3N3b3JkIDogJycpICsgJ0AnIDogJycpICsKKwkJCShiaXRzLmhvc3QgfHwgJycpICsgKGJpdHMucG9ydCAmJiBiaXRzLnBvcnQgIT0gdGhpcy5zY2hlbWVzW2JpdHMuc2NoZW1lXSA/ICc6JyArIGJpdHMucG9ydCA6ICcnKSArCisJCQkoYml0cy5kaXJlY3RvcnkgfHwgJy8nKSArIChiaXRzLmZpbGUgfHwgJycpICsKKwkJCShiaXRzLnF1ZXJ5ID8gJz8nICsgYml0cy5xdWVyeSA6ICcnKSArCisJCQkoYml0cy5mcmFnbWVudCA/ICcjJyArIGJpdHMuZnJhZ21lbnQgOiAnJyk7CisJfSwKKworCXNldDogZnVuY3Rpb24ocGFydCwgdmFsdWUsIGJhc2UpeworCQlpZiAocGFydCA9PSAndmFsdWUnKXsKKwkJCXZhciBzY2hlbWUgPSB2YWx1ZS5tYXRjaChVUkkucmVncy5zY2hlbWUpOworCQkJaWYgKHNjaGVtZSkgc2NoZW1lID0gc2NoZW1lWzFdOworCQkJaWYgKHNjaGVtZSAmJiB0aGlzLnNjaGVtZXNbc2NoZW1lLnRvTG93ZXJDYXNlKCldID09IG51bGwpIHRoaXMucGFyc2VkID0geyBzY2hlbWU6IHNjaGVtZSwgdmFsdWU6IHZhbHVlIH07CisJCQllbHNlIHRoaXMucGFyc2VkID0gdGhpcy5wYXJzZSh2YWx1ZSwgKGJhc2UgfHwgdGhpcykucGFyc2VkKSB8fCAoc2NoZW1lID8geyBzY2hlbWU6IHNjaGVtZSwgdmFsdWU6IHZhbHVlIH0gOiB7IHZhbHVlOiB2YWx1ZSB9KTsKKwkJfSBlbHNlIGlmIChwYXJ0ID09ICdkYXRhJyl7CisJCQl0aGlzLnNldERhdGEodmFsdWUpOworCQl9IGVsc2UgeworCQkJdGhpcy5wYXJzZWRbcGFydF0gPSB2YWx1ZTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZ2V0OiBmdW5jdGlvbihwYXJ0LCBiYXNlKXsKKwkJc3dpdGNoIChwYXJ0KXsKKwkJCWNhc2UgJ3ZhbHVlJzogcmV0dXJuIHRoaXMuY29tYmluZSh0aGlzLnBhcnNlZCwgYmFzZSA/IGJhc2UucGFyc2VkIDogZmFsc2UpOworCQkJY2FzZSAnZGF0YScgOiByZXR1cm4gdGhpcy5nZXREYXRhKCk7CisJCX0KKwkJcmV0dXJuIHRoaXMucGFyc2VkW3BhcnRdIHx8ICcnOworCX0sCisKKwlnbzogZnVuY3Rpb24oKXsKKwkJZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IHRoaXMudG9TdHJpbmcoKTsKKwl9LAorCisJdG9VUkk6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXREYXRhOiBmdW5jdGlvbihrZXksIHBhcnQpeworCQl2YXIgcXMgPSB0aGlzLmdldChwYXJ0IHx8ICdxdWVyeScpOworCQlpZiAoIShxcyB8fCBxcyA9PT0gMCkpIHJldHVybiBrZXkgPyBudWxsIDoge307CisJCXZhciBvYmogPSBxcy5wYXJzZVF1ZXJ5U3RyaW5nKCk7CisJCXJldHVybiBrZXkgPyBvYmpba2V5XSA6IG9iajsKKwl9LAorCisJc2V0RGF0YTogZnVuY3Rpb24odmFsdWVzLCBtZXJnZSwgcGFydCl7CisJCWlmICh0eXBlb2YgdmFsdWVzID09ICdzdHJpbmcnKXsKKwkJCXZhciBkYXRhID0gdGhpcy5nZXREYXRhKCk7CisJCQlkYXRhW2FyZ3VtZW50c1swXV0gPSBhcmd1bWVudHNbMV07CisJCQl2YWx1ZXMgPSBkYXRhOworCQl9IGVsc2UgaWYgKG1lcmdlKXsKKwkJCXZhbHVlcyA9IE9iamVjdC5tZXJnZSh0aGlzLmdldERhdGEoKSwgdmFsdWVzKTsKKwkJfQorCQlyZXR1cm4gdGhpcy5zZXQocGFydCB8fCAncXVlcnknLCBPYmplY3QudG9RdWVyeVN0cmluZyh2YWx1ZXMpKTsKKwl9LAorCisJY2xlYXJEYXRhOiBmdW5jdGlvbihwYXJ0KXsKKwkJcmV0dXJuIHRoaXMuc2V0KHBhcnQgfHwgJ3F1ZXJ5JywgJycpOworCX0sCisKKwl0b1N0cmluZzogdG9TdHJpbmcsCisJdmFsdWVPZjogdG9TdHJpbmcKKworfSk7CisKK1VSSS5yZWdzID0geworCWVuZFNsYXNoOiAvXC8kLywKKwlzY2hlbWU6IC9eKFx3Kyk6LywKKwlkaXJlY3RvcnlEb3Q6IC9cLlwvfFwuJC8KK307CisKK1VSSS5iYXNlID0gbmV3IFVSSShBcnJheS5mcm9tKGRvY3VtZW50LmdldEVsZW1lbnRzKCdiYXNlW2hyZWZdJywgdHJ1ZSkpLmdldExhc3QoKSwge2Jhc2U6IGRvY3VtZW50LmxvY2F0aW9ufSk7CisKK1N0cmluZy5pbXBsZW1lbnQoeworCisJdG9VUkk6IGZ1bmN0aW9uKG9wdGlvbnMpeworCQlyZXR1cm4gbmV3IFVSSSh0aGlzLCBvcHRpb25zKTsKKwl9CisKK30pOworCit9KSgpOworCisKKy8qCistLS0KKworc2NyaXB0OiBVUkkuUmVsYXRpdmUuanMKKworbmFtZTogVVJJLlJlbGF0aXZlCisKK2Rlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBVUkkgY2xhc3MgdG8gYWRkIG1ldGhvZHMgZm9yIGNvbXB1dGluZyByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgdXJscy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBTZWJhc3RpYW4gTWFya2LDpWdlCisKKworcmVxdWlyZXM6CisgIC0gL0NsYXNzLnJlZmFjdG9yCisgIC0gL1VSSQorCitwcm92aWRlczogW1VSSS5SZWxhdGl2ZV0KKworLi4uCisqLworCitVUkkgPSBDbGFzcy5yZWZhY3RvcihVUkksIHsKKworCWNvbWJpbmU6IGZ1bmN0aW9uKGJpdHMsIGJhc2UpeworCQlpZiAoIWJhc2UgfHwgYml0cy5zY2hlbWUgIT0gYmFzZS5zY2hlbWUgfHwgYml0cy5ob3N0ICE9IGJhc2UuaG9zdCB8fCBiaXRzLnBvcnQgIT0gYmFzZS5wb3J0KQorCQkJcmV0dXJuIHRoaXMucHJldmlvdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKwkJdmFyIGVuZCA9IGJpdHMuZmlsZSArIChiaXRzLnF1ZXJ5ID8gJz8nICsgYml0cy5xdWVyeSA6ICcnKSArIChiaXRzLmZyYWdtZW50ID8gJyMnICsgYml0cy5mcmFnbWVudCA6ICcnKTsKKworCQlpZiAoIWJhc2UuZGlyZWN0b3J5KSByZXR1cm4gKGJpdHMuZGlyZWN0b3J5IHx8IChiaXRzLmZpbGUgPyAnJyA6ICcuLycpKSArIGVuZDsKKworCQl2YXIgYmFzZURpciA9IGJhc2UuZGlyZWN0b3J5LnNwbGl0KCcvJyksCisJCQlyZWxEaXIgPSBiaXRzLmRpcmVjdG9yeS5zcGxpdCgnLycpLAorCQkJcGF0aCA9ICcnLAorCQkJb2Zmc2V0OworCisJCXZhciBpID0gMDsKKwkJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBiYXNlRGlyLmxlbmd0aCAmJiBvZmZzZXQgPCByZWxEaXIubGVuZ3RoICYmIGJhc2VEaXJbb2Zmc2V0XSA9PSByZWxEaXJbb2Zmc2V0XTsgb2Zmc2V0KyspOworCQlmb3IgKGkgPSAwOyBpIDwgYmFzZURpci5sZW5ndGggLSBvZmZzZXQgLSAxOyBpKyspIHBhdGggKz0gJy4uLyc7CisJCWZvciAoaSA9IG9mZnNldDsgaSA8IHJlbERpci5sZW5ndGggLSAxOyBpKyspIHBhdGggKz0gcmVsRGlyW2ldICsgJy8nOworCisJCXJldHVybiAocGF0aCB8fCAoYml0cy5maWxlID8gJycgOiAnLi8nKSkgKyBlbmQ7CisJfSwKKworCXRvQWJzb2x1dGU6IGZ1bmN0aW9uKGJhc2UpeworCQliYXNlID0gbmV3IFVSSShiYXNlKTsKKwkJaWYgKGJhc2UpIGJhc2Uuc2V0KCdkaXJlY3RvcnknLCAnJykuc2V0KCdmaWxlJywgJycpOworCQlyZXR1cm4gdGhpcy50b1JlbGF0aXZlKGJhc2UpOworCX0sCisKKwl0b1JlbGF0aXZlOiBmdW5jdGlvbihiYXNlKXsKKwkJcmV0dXJuIHRoaXMuZ2V0KCd2YWx1ZScsIG5ldyBVUkkoYmFzZSkpOworCX0KKworfSk7CisKKworLyoKKy0tLQorCituYW1lOiBIYXNoCisKK2Rlc2NyaXB0aW9uOiBDb250YWlucyBIYXNoIFByb3RvdHlwZXMuIFByb3ZpZGVzIGEgbWVhbnMgZm9yIG92ZXJjb21pbmcgdGhlIEphdmFTY3JpcHQgcHJhY3RpY2FsIGltcG9zc2liaWxpdHkgb2YgZXh0ZW5kaW5nIG5hdGl2ZSBPYmplY3RzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworcmVxdWlyZXM6CisgIC0gQ29yZS9PYmplY3QKKyAgLSAvTW9vVG9vbHMuTW9yZQorCitwcm92aWRlczogW0hhc2hdCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK2lmICh0aGlzLkhhc2gpIHJldHVybjsKKwordmFyIEhhc2ggPSB0aGlzLkhhc2ggPSBuZXcgVHlwZSgnSGFzaCcsIGZ1bmN0aW9uKG9iamVjdCl7CisJaWYgKHR5cGVPZihvYmplY3QpID09ICdoYXNoJykgb2JqZWN0ID0gT2JqZWN0LmNsb25lKG9iamVjdC5nZXRDbGVhbigpKTsKKwlmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB0aGlzW2tleV0gPSBvYmplY3Rba2V5XTsKKwlyZXR1cm4gdGhpczsKK30pOworCit0aGlzLiRIID0gZnVuY3Rpb24ob2JqZWN0KXsKKwlyZXR1cm4gbmV3IEhhc2gob2JqZWN0KTsKK307CisKK0hhc2guaW1wbGVtZW50KHsKKworCWZvckVhY2g6IGZ1bmN0aW9uKGZuLCBiaW5kKXsKKwkJT2JqZWN0LmZvckVhY2godGhpcywgZm4sIGJpbmQpOworCX0sCisKKwlnZXRDbGVhbjogZnVuY3Rpb24oKXsKKwkJdmFyIGNsZWFuID0ge307CisJCWZvciAodmFyIGtleSBpbiB0aGlzKXsKKwkJCWlmICh0aGlzLmhhc093blByb3BlcnR5KGtleSkpIGNsZWFuW2tleV0gPSB0aGlzW2tleV07CisJCX0KKwkJcmV0dXJuIGNsZWFuOworCX0sCisKKwlnZXRMZW5ndGg6IGZ1bmN0aW9uKCl7CisJCXZhciBsZW5ndGggPSAwOworCQlmb3IgKHZhciBrZXkgaW4gdGhpcyl7CisJCQlpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSBsZW5ndGgrKzsKKwkJfQorCQlyZXR1cm4gbGVuZ3RoOworCX0KKworfSk7CisKK0hhc2guYWxpYXMoJ2VhY2gnLCAnZm9yRWFjaCcpOworCitIYXNoLmltcGxlbWVudCh7CisKKwloYXM6IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksCisKKwlrZXlPZjogZnVuY3Rpb24odmFsdWUpeworCQlyZXR1cm4gT2JqZWN0LmtleU9mKHRoaXMsIHZhbHVlKTsKKwl9LAorCisJaGFzVmFsdWU6IGZ1bmN0aW9uKHZhbHVlKXsKKwkJcmV0dXJuIE9iamVjdC5jb250YWlucyh0aGlzLCB2YWx1ZSk7CisJfSwKKworCWV4dGVuZDogZnVuY3Rpb24ocHJvcGVydGllcyl7CisJCUhhc2guZWFjaChwcm9wZXJ0aWVzIHx8IHt9LCBmdW5jdGlvbih2YWx1ZSwga2V5KXsKKwkJCUhhc2guc2V0KHRoaXMsIGtleSwgdmFsdWUpOworCQl9LCB0aGlzKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWNvbWJpbmU6IGZ1bmN0aW9uKHByb3BlcnRpZXMpeworCQlIYXNoLmVhY2gocHJvcGVydGllcyB8fCB7fSwgZnVuY3Rpb24odmFsdWUsIGtleSl7CisJCQlIYXNoLmluY2x1ZGUodGhpcywga2V5LCB2YWx1ZSk7CisJCX0sIHRoaXMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZXJhc2U6IGZ1bmN0aW9uKGtleSl7CisJCWlmICh0aGlzLmhhc093blByb3BlcnR5KGtleSkpIGRlbGV0ZSB0aGlzW2tleV07CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXQ6IGZ1bmN0aW9uKGtleSl7CisJCXJldHVybiAodGhpcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSA/IHRoaXNba2V5XSA6IG51bGw7CisJfSwKKworCXNldDogZnVuY3Rpb24oa2V5LCB2YWx1ZSl7CisJCWlmICghdGhpc1trZXldIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSkgdGhpc1trZXldID0gdmFsdWU7CisJCXJldHVybiB0aGlzOworCX0sCisKKwllbXB0eTogZnVuY3Rpb24oKXsKKwkJSGFzaC5lYWNoKHRoaXMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpeworCQkJZGVsZXRlIHRoaXNba2V5XTsKKwkJfSwgdGhpcyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlpbmNsdWRlOiBmdW5jdGlvbihrZXksIHZhbHVlKXsKKwkJaWYgKHRoaXNba2V5XSA9PSB1bmRlZmluZWQpIHRoaXNba2V5XSA9IHZhbHVlOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJbWFwOiBmdW5jdGlvbihmbiwgYmluZCl7CisJCXJldHVybiBuZXcgSGFzaChPYmplY3QubWFwKHRoaXMsIGZuLCBiaW5kKSk7CisJfSwKKworCWZpbHRlcjogZnVuY3Rpb24oZm4sIGJpbmQpeworCQlyZXR1cm4gbmV3IEhhc2goT2JqZWN0LmZpbHRlcih0aGlzLCBmbiwgYmluZCkpOworCX0sCisKKwlldmVyeTogZnVuY3Rpb24oZm4sIGJpbmQpeworCQlyZXR1cm4gT2JqZWN0LmV2ZXJ5KHRoaXMsIGZuLCBiaW5kKTsKKwl9LAorCisJc29tZTogZnVuY3Rpb24oZm4sIGJpbmQpeworCQlyZXR1cm4gT2JqZWN0LnNvbWUodGhpcywgZm4sIGJpbmQpOworCX0sCisKKwlnZXRLZXlzOiBmdW5jdGlvbigpeworCQlyZXR1cm4gT2JqZWN0LmtleXModGhpcyk7CisJfSwKKworCWdldFZhbHVlczogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcyk7CisJfSwKKworCXRvUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKGJhc2UpeworCQlyZXR1cm4gT2JqZWN0LnRvUXVlcnlTdHJpbmcodGhpcywgYmFzZSk7CisJfQorCit9KTsKKworSGFzaC5hbGlhcyh7aW5kZXhPZjogJ2tleU9mJywgY29udGFpbnM6ICdoYXNWYWx1ZSd9KTsKKworCit9KSgpOworCisKKworLyoKKy0tLQorCitzY3JpcHQ6IEhhc2guRXh0cmFzLmpzCisKK25hbWU6IEhhc2guRXh0cmFzCisKK2Rlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBIYXNoIFR5cGUgdG8gaW5jbHVkZSBnZXRGcm9tUGF0aCB3aGljaCBhbGxvd3MgYSBwYXRoIG5vdGF0aW9uIHRvIGNoaWxkIGVsZW1lbnRzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSAvSGFzaAorICAtIC9PYmplY3QuRXh0cmFzCisKK3Byb3ZpZGVzOiBbSGFzaC5FeHRyYXNdCisKKy4uLgorKi8KKworSGFzaC5pbXBsZW1lbnQoeworCisJZ2V0RnJvbVBhdGg6IGZ1bmN0aW9uKG5vdGF0aW9uKXsKKwkJcmV0dXJuIE9iamVjdC5nZXRGcm9tUGF0aCh0aGlzLCBub3RhdGlvbik7CisJfSwKKworCWNsZWFuVmFsdWVzOiBmdW5jdGlvbihtZXRob2QpeworCQlyZXR1cm4gbmV3IEhhc2goT2JqZWN0LmNsZWFuVmFsdWVzKHRoaXMsIG1ldGhvZCkpOworCX0sCisKKwlydW46IGZ1bmN0aW9uKCl7CisJCU9iamVjdC5ydW4oYXJndW1lbnRzKTsKKwl9CisKK30pOworCisKKy8qCistLS0KKworc2NyaXB0OiBFbGVtZW50LkZvcm1zLmpzCisKK25hbWU6IEVsZW1lbnQuRm9ybXMKKworZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIEVsZW1lbnQgbmF0aXZlIG9iamVjdCB0byBpbmNsdWRlIG1ldGhvZHMgdXNlZnVsIGluIG1hbmFnaW5nIGlucHV0cy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9FbGVtZW50CisgIC0gL1N0cmluZy5FeHRyYXMKKyAgLSAvTW9vVG9vbHMuTW9yZQorCitwcm92aWRlczogW0VsZW1lbnQuRm9ybXNdCisKKy4uLgorKi8KKworRWxlbWVudC5pbXBsZW1lbnQoeworCisJdGlkeTogZnVuY3Rpb24oKXsKKwkJdGhpcy5zZXQoJ3ZhbHVlJywgdGhpcy5nZXQoJ3ZhbHVlJykudGlkeSgpKTsKKwl9LAorCisJZ2V0VGV4dEluUmFuZ2U6IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpeworCQlyZXR1cm4gdGhpcy5nZXQoJ3ZhbHVlJykuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpOworCX0sCisKKwlnZXRTZWxlY3RlZFRleHQ6IGZ1bmN0aW9uKCl7CisJCWlmICh0aGlzLnNldFNlbGVjdGlvblJhbmdlKSByZXR1cm4gdGhpcy5nZXRUZXh0SW5SYW5nZSh0aGlzLmdldFNlbGVjdGlvblN0YXJ0KCksIHRoaXMuZ2V0U2VsZWN0aW9uRW5kKCkpOworCQlyZXR1cm4gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkudGV4dDsKKwl9LAorCisJZ2V0U2VsZWN0ZWRSYW5nZTogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMuc2VsZWN0aW9uU3RhcnQgIT0gbnVsbCl7CisJCQlyZXR1cm4geworCQkJCXN0YXJ0OiB0aGlzLnNlbGVjdGlvblN0YXJ0LAorCQkJCWVuZDogdGhpcy5zZWxlY3Rpb25FbmQKKwkJCX07CisJCX0KKworCQl2YXIgcG9zID0geworCQkJc3RhcnQ6IDAsCisJCQllbmQ6IDAKKwkJfTsKKwkJdmFyIHJhbmdlID0gdGhpcy5nZXREb2N1bWVudCgpLnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpOworCQlpZiAoIXJhbmdlIHx8IHJhbmdlLnBhcmVudEVsZW1lbnQoKSAhPSB0aGlzKSByZXR1cm4gcG9zOworCQl2YXIgZHVwbGljYXRlID0gcmFuZ2UuZHVwbGljYXRlKCk7CisKKwkJaWYgKHRoaXMudHlwZSA9PSAndGV4dCcpeworCQkJcG9zLnN0YXJ0ID0gMCAtIGR1cGxpY2F0ZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIC0xMDAwMDApOworCQkJcG9zLmVuZCA9IHBvcy5zdGFydCArIHJhbmdlLnRleHQubGVuZ3RoOworCQl9IGVsc2UgeworCQkJdmFyIHZhbHVlID0gdGhpcy5nZXQoJ3ZhbHVlJyk7CisJCQl2YXIgb2Zmc2V0ID0gdmFsdWUubGVuZ3RoOworCQkJZHVwbGljYXRlLm1vdmVUb0VsZW1lbnRUZXh0KHRoaXMpOworCQkJZHVwbGljYXRlLnNldEVuZFBvaW50KCdTdGFydFRvRW5kJywgcmFuZ2UpOworCQkJaWYgKGR1cGxpY2F0ZS50ZXh0Lmxlbmd0aCkgb2Zmc2V0IC09IHZhbHVlLm1hdGNoKC9bXG5ccl0qJC8pWzBdLmxlbmd0aDsKKwkJCXBvcy5lbmQgPSBvZmZzZXQgLSBkdXBsaWNhdGUudGV4dC5sZW5ndGg7CisJCQlkdXBsaWNhdGUuc2V0RW5kUG9pbnQoJ1N0YXJ0VG9TdGFydCcsIHJhbmdlKTsKKwkJCXBvcy5zdGFydCA9IG9mZnNldCAtIGR1cGxpY2F0ZS50ZXh0Lmxlbmd0aDsKKwkJfQorCQlyZXR1cm4gcG9zOworCX0sCisKKwlnZXRTZWxlY3Rpb25TdGFydDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLnN0YXJ0OworCX0sCisKKwlnZXRTZWxlY3Rpb25FbmQ6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKS5lbmQ7CisJfSwKKworCXNldENhcmV0UG9zaXRpb246IGZ1bmN0aW9uKHBvcyl7CisJCWlmIChwb3MgPT0gJ2VuZCcpIHBvcyA9IHRoaXMuZ2V0KCd2YWx1ZScpLmxlbmd0aDsKKwkJdGhpcy5zZWxlY3RSYW5nZShwb3MsIHBvcyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXRDYXJldFBvc2l0aW9uOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkuc3RhcnQ7CisJfSwKKworCXNlbGVjdFJhbmdlOiBmdW5jdGlvbihzdGFydCwgZW5kKXsKKwkJaWYgKHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UpeworCQkJdGhpcy5mb2N1cygpOworCQkJdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKTsKKwkJfSBlbHNlIHsKKwkJCXZhciB2YWx1ZSA9IHRoaXMuZ2V0KCd2YWx1ZScpOworCQkJdmFyIGRpZmYgPSB2YWx1ZS5zdWJzdHIoc3RhcnQsIGVuZCAtIHN0YXJ0KS5yZXBsYWNlKC9cci9nLCAnJykubGVuZ3RoOworCQkJc3RhcnQgPSB2YWx1ZS5zdWJzdHIoMCwgc3RhcnQpLnJlcGxhY2UoL1xyL2csICcnKS5sZW5ndGg7CisJCQl2YXIgcmFuZ2UgPSB0aGlzLmNyZWF0ZVRleHRSYW5nZSgpOworCQkJcmFuZ2UuY29sbGFwc2UodHJ1ZSk7CisJCQlyYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBzdGFydCArIGRpZmYpOworCQkJcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBzdGFydCk7CisJCQlyYW5nZS5zZWxlY3QoKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJaW5zZXJ0QXRDdXJzb3I6IGZ1bmN0aW9uKHZhbHVlLCBzZWxlY3QpeworCQl2YXIgcG9zID0gdGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7CisJCXZhciB0ZXh0ID0gdGhpcy5nZXQoJ3ZhbHVlJyk7CisJCXRoaXMuc2V0KCd2YWx1ZScsIHRleHQuc3Vic3RyaW5nKDAsIHBvcy5zdGFydCkgKyB2YWx1ZSArIHRleHQuc3Vic3RyaW5nKHBvcy5lbmQsIHRleHQubGVuZ3RoKSk7CisJCWlmIChzZWxlY3QgIT09IGZhbHNlKSB0aGlzLnNlbGVjdFJhbmdlKHBvcy5zdGFydCwgcG9zLnN0YXJ0ICsgdmFsdWUubGVuZ3RoKTsKKwkJZWxzZSB0aGlzLnNldENhcmV0UG9zaXRpb24ocG9zLnN0YXJ0ICsgdmFsdWUubGVuZ3RoKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWluc2VydEFyb3VuZEN1cnNvcjogZnVuY3Rpb24ob3B0aW9ucywgc2VsZWN0KXsKKwkJb3B0aW9ucyA9IE9iamVjdC5hcHBlbmQoeworCQkJYmVmb3JlOiAnJywKKwkJCWRlZmF1bHRNaWRkbGU6ICcnLAorCQkJYWZ0ZXI6ICcnCisJCX0sIG9wdGlvbnMpOworCisJCXZhciB2YWx1ZSA9IHRoaXMuZ2V0U2VsZWN0ZWRUZXh0KCkgfHwgb3B0aW9ucy5kZWZhdWx0TWlkZGxlOworCQl2YXIgcG9zID0gdGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7CisJCXZhciB0ZXh0ID0gdGhpcy5nZXQoJ3ZhbHVlJyk7CisKKwkJaWYgKHBvcy5zdGFydCA9PSBwb3MuZW5kKXsKKwkJCXRoaXMuc2V0KCd2YWx1ZScsIHRleHQuc3Vic3RyaW5nKDAsIHBvcy5zdGFydCkgKyBvcHRpb25zLmJlZm9yZSArIHZhbHVlICsgb3B0aW9ucy5hZnRlciArIHRleHQuc3Vic3RyaW5nKHBvcy5lbmQsIHRleHQubGVuZ3RoKSk7CisJCQl0aGlzLnNlbGVjdFJhbmdlKHBvcy5zdGFydCArIG9wdGlvbnMuYmVmb3JlLmxlbmd0aCwgcG9zLmVuZCArIG9wdGlvbnMuYmVmb3JlLmxlbmd0aCArIHZhbHVlLmxlbmd0aCk7CisJCX0gZWxzZSB7CisJCQl2YXIgY3VycmVudCA9IHRleHQuc3Vic3RyaW5nKHBvcy5zdGFydCwgcG9zLmVuZCk7CisJCQl0aGlzLnNldCgndmFsdWUnLCB0ZXh0LnN1YnN0cmluZygwLCBwb3Muc3RhcnQpICsgb3B0aW9ucy5iZWZvcmUgKyBjdXJyZW50ICsgb3B0aW9ucy5hZnRlciArIHRleHQuc3Vic3RyaW5nKHBvcy5lbmQsIHRleHQubGVuZ3RoKSk7CisJCQl2YXIgc2VsU3RhcnQgPSBwb3Muc3RhcnQgKyBvcHRpb25zLmJlZm9yZS5sZW5ndGg7CisJCQlpZiAoc2VsZWN0ICE9PSBmYWxzZSkgdGhpcy5zZWxlY3RSYW5nZShzZWxTdGFydCwgc2VsU3RhcnQgKyBjdXJyZW50Lmxlbmd0aCk7CisJCQllbHNlIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihzZWxTdGFydCArIHRleHQubGVuZ3RoKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCisKKy8qCistLS0KKworc2NyaXB0OiBFbGVtZW50cy5Gcm9tLmpzCisKK25hbWU6IEVsZW1lbnRzLkZyb20KKworZGVzY3JpcHRpb246IFJldHVybnMgYSBjb2xsZWN0aW9uIG9mIGVsZW1lbnRzIGZyb20gYSBzdHJpbmcgb2YgaHRtbC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9TdHJpbmcKKyAgLSBDb3JlL0VsZW1lbnQKKyAgLSAvTW9vVG9vbHMuTW9yZQorCitwcm92aWRlczogW0VsZW1lbnRzLmZyb20sIEVsZW1lbnRzLkZyb21dCisKKy4uLgorKi8KKworRWxlbWVudHMuZnJvbSA9IGZ1bmN0aW9uKHRleHQsIGV4Y2x1ZGVTY3JpcHRzKXsKKwlpZiAoZXhjbHVkZVNjcmlwdHMgfHwgZXhjbHVkZVNjcmlwdHMgPT0gbnVsbCkgdGV4dCA9IHRleHQuc3RyaXBTY3JpcHRzKCk7CisKKwl2YXIgY29udGFpbmVyLCBtYXRjaCA9IHRleHQubWF0Y2goL15ccyo8KHRbZGhyXXx0Ym9keXx0Zm9vdHx0aGVhZCkvaSk7CisKKwlpZiAobWF0Y2gpeworCQljb250YWluZXIgPSBuZXcgRWxlbWVudCgndGFibGUnKTsKKwkJdmFyIHRhZyA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7CisJCWlmIChbJ3RkJywgJ3RoJywgJ3RyJ10uY29udGFpbnModGFnKSl7CisJCQljb250YWluZXIgPSBuZXcgRWxlbWVudCgndGJvZHknKS5pbmplY3QoY29udGFpbmVyKTsKKwkJCWlmICh0YWcgIT0gJ3RyJykgY29udGFpbmVyID0gbmV3IEVsZW1lbnQoJ3RyJykuaW5qZWN0KGNvbnRhaW5lcik7CisJCX0KKwl9CisKKwlyZXR1cm4gKGNvbnRhaW5lciB8fCBuZXcgRWxlbWVudCgnZGl2JykpLnNldCgnaHRtbCcsIHRleHQpLmdldENoaWxkcmVuKCk7Cit9OworCisKKy8qCistLS0KKworbmFtZTogRWxlbWVudC5FdmVudC5Qc2V1ZG9zCisKK2Rlc2NyaXB0aW9uOiBBZGRzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGFkZCBwc2V1ZG8gZXZlbnRzIGZvciBFbGVtZW50cworCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFyaWFuIFN0b2x3aWprCisKK3JlcXVpcmVzOiBbQ29yZS9FbGVtZW50LkV2ZW50LCBFdmVudHMuUHNldWRvc10KKworcHJvdmlkZXM6IFtFbGVtZW50LkV2ZW50LlBzZXVkb3NdCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK3ZhciBwc2V1ZG9zID0ge30sCisJY29weUZyb21FdmVudHMgPSBbJ29uY2UnLCAndGhyb3R0bGUnLCAncGF1c2UnXSwKKwljb3VudCA9IGNvcHlGcm9tRXZlbnRzLmxlbmd0aDsKKword2hpbGUgKGNvdW50LS0pIHBzZXVkb3NbY29weUZyb21FdmVudHNbY291bnRdXSA9IEV2ZW50cy5sb29rdXBQc2V1ZG8oY29weUZyb21FdmVudHNbY291bnRdKTsKKworRXZlbnQuZGVmaW5lUHNldWRvID0gZnVuY3Rpb24oa2V5LCBsaXN0ZW5lcil7CisJcHNldWRvc1trZXldID0gVHlwZS5pc0Z1bmN0aW9uKGxpc3RlbmVyKSA/IHtsaXN0ZW5lcjogbGlzdGVuZXJ9IDogbGlzdGVuZXI7CisJcmV0dXJuIHRoaXM7Cit9OworCit2YXIgcHJvdG8gPSBFbGVtZW50LnByb3RvdHlwZTsKK1tFbGVtZW50LCBXaW5kb3csIERvY3VtZW50XS5pbnZva2UoJ2ltcGxlbWVudCcsIEV2ZW50cy5Qc2V1ZG9zKHBzZXVkb3MsIHByb3RvLmFkZEV2ZW50LCBwcm90by5yZW1vdmVFdmVudCkpOworCit9KSgpOworCisKKy8qCistLS0KKworbmFtZTogRWxlbWVudC5FdmVudC5Qc2V1ZG9zLktleXMKKworZGVzY3JpcHRpb246IEFkZHMgZnVuY3Rpb25hbGl0eSBmaXJlIGV2ZW50cyBpZiBjZXJ0YWluIGtleWNvbWJpbmF0aW9ucyBhcmUgcHJlc3NlZAorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFyaWFuIFN0b2x3aWprCisKK3JlcXVpcmVzOiBbRWxlbWVudC5FdmVudC5Qc2V1ZG9zXQorCitwcm92aWRlczogW0VsZW1lbnQuRXZlbnQuUHNldWRvcy5LZXlzXQorCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCit2YXIga2V5c1N0b3JlS2V5ID0gJyRtb286a2V5cy1wcmVzc2VkJywKKwlrZXlzS2V5dXBTdG9yZUtleSA9ICckbW9vOmtleXMta2V5dXAnOworCisKK0V2ZW50LmRlZmluZVBzZXVkbygna2V5cycsIGZ1bmN0aW9uKHNwbGl0LCBmbiwgYXJncyl7CisKKwl2YXIgZXZlbnQgPSBhcmdzWzBdLAorCQlrZXlzID0gW10sCisJCXByZXNzZWQgPSB0aGlzLnJldHJpZXZlKGtleXNTdG9yZUtleSwgW10pOworCisJa2V5cy5hcHBlbmQoc3BsaXQudmFsdWUucmVwbGFjZSgnKysnLCBmdW5jdGlvbigpeworCQlrZXlzLnB1c2goJysnKTsgLy8gc2hpZnQrKyBhbmQgc2hpZnQrKythCisJCXJldHVybiAnJzsKKwl9KS5zcGxpdCgnKycpKTsKKworCXByZXNzZWQuaW5jbHVkZShldmVudC5rZXkpOworCisJaWYgKGtleXMuZXZlcnkoZnVuY3Rpb24oa2V5KXsKKwkJcmV0dXJuIHByZXNzZWQuY29udGFpbnMoa2V5KTsKKwl9KSkgZm4uYXBwbHkodGhpcywgYXJncyk7CisKKwl0aGlzLnN0b3JlKGtleXNTdG9yZUtleSwgcHJlc3NlZCk7CisKKwlpZiAoIXRoaXMucmV0cmlldmUoa2V5c0tleXVwU3RvcmVLZXkpKXsKKwkJdmFyIGtleXVwID0gZnVuY3Rpb24oZXZlbnQpeworCQkJKGZ1bmN0aW9uKCl7CisJCQkJcHJlc3NlZCA9IHRoaXMucmV0cmlldmUoa2V5c1N0b3JlS2V5LCBbXSkuZXJhc2UoZXZlbnQua2V5KTsKKwkJCQl0aGlzLnN0b3JlKGtleXNTdG9yZUtleSwgcHJlc3NlZCk7CisJCQl9KS5kZWxheSgwLCB0aGlzKTsgLy8gRml4IGZvciBJRQorCQl9OworCQl0aGlzLnN0b3JlKGtleXNLZXl1cFN0b3JlS2V5LCBrZXl1cCkuYWRkRXZlbnQoJ2tleXVwJywga2V5dXApOworCX0KKworfSk7CisKK09iamVjdC5hcHBlbmQoRXZlbnQuS2V5cywgeworCSdzaGlmdCc6IDE2LAorCSdjb250cm9sJzogMTcsCisJJ2FsdCc6IDE4LAorCSdjYXBzbG9jayc6IDIwLAorCSdwYWdldXAnOiAzMywKKwkncGFnZWRvd24nOiAzNCwKKwknZW5kJzogMzUsCisJJ2hvbWUnOiAzNiwKKwknbnVtbG9jayc6IDE0NCwKKwknc2Nyb2xsbG9jayc6IDE0NSwKKwknOyc6IDE4NiwKKwknPSc6IDE4NywKKwknLCc6IDE4OCwKKwknLSc6IEJyb3dzZXIuZmlyZWZveCA/IDEwOSA6IDE4OSwKKwknLic6IDE5MCwKKwknLyc6IDE5MSwKKwknYCc6IDE5MiwKKwknWyc6IDIxOSwKKwknXFwnOiAyMjAsCisJJ10nOiAyMjEsCisJIiciOiAyMjIsCisJJysnOiAxMDcKK30pOworCit9KSgpOworCisKKy8qCistLS0KKworc2NyaXB0OiBFbGVtZW50LkRlbGVnYXRpb24uanMKKworbmFtZTogRWxlbWVudC5EZWxlZ2F0aW9uCisKK2Rlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBFbGVtZW50IG5hdGl2ZSBvYmplY3QgdG8gaW5jbHVkZSB0aGUgZGVsZWdhdGUgbWV0aG9kIGZvciBtb3JlIGVmZmljaWVudCBldmVudCBtYW5hZ2VtZW50LgorCitjcmVkaXRzOgorICAtICJFdmVudCBjaGVja2luZyBiYXNlZCBvbiB0aGUgd29yayBvZiBEYW5pZWwgU3RlaWdlcndhbGQuIExpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLiBDb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwOCBEYW5pZWwgU3RlaWdlcndhbGQsIGRhbmllbC5zdGVpZ2Vyd2FsZC5jeiIKKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKyAgLSBEYW5pZWwgU3RlaWdlcndhbGQKKworcmVxdWlyZXM6IFsvTW9vVG9vbHMuTW9yZSwgRWxlbWVudC5FdmVudC5Qc2V1ZG9zXQorCitwcm92aWRlczogW0VsZW1lbnQuRGVsZWdhdGlvbl0KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIGV2ZW50TGlzdGVuZXJTdXBwb3J0ID0gISh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSwKKwluYXRpdmVFdmVudHMgPSBFbGVtZW50Lk5hdGl2ZUV2ZW50czsKKworbmF0aXZlRXZlbnRzLmZvY3VzaW4gPSAyOworbmF0aXZlRXZlbnRzLmZvY3Vzb3V0ID0gMjsKKwordmFyIGNoZWNrID0gZnVuY3Rpb24oc3BsaXQsIHRhcmdldCwgZXZlbnQpeworCXZhciBlbGVtZW50RXZlbnQgPSBFbGVtZW50LkV2ZW50c1tzcGxpdC5ldmVudF0sIGNvbmRpdGlvbjsKKwlpZiAoZWxlbWVudEV2ZW50KSBjb25kaXRpb24gPSBlbGVtZW50RXZlbnQuY29uZGl0aW9uOworCXJldHVybiBTbGljay5tYXRjaCh0YXJnZXQsIHNwbGl0LnZhbHVlKSAmJiAoIWNvbmRpdGlvbiB8fCBjb25kaXRpb24uY2FsbCh0YXJnZXQsIGV2ZW50KSk7Cit9OworCit2YXIgYnViYmxlVXAgPSBmdW5jdGlvbihzcGxpdCwgZXZlbnQsIGZuKXsKKwlmb3IgKHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7IHRhcmdldCAmJiB0YXJnZXQgIT0gdGhpczsgdGFyZ2V0ID0gZG9jdW1lbnQuaWQodGFyZ2V0LnBhcmVudE5vZGUpKXsKKwkJaWYgKHRhcmdldCAmJiBjaGVjayhzcGxpdCwgdGFyZ2V0LCBldmVudCkpIHJldHVybiBmbi5jYWxsKHRhcmdldCwgZXZlbnQsIHRhcmdldCk7CisJfQorfTsKKwordmFyIGZvcm1PYnNlcnZlciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSl7CisKKwl2YXIgJGRlbGVnYXRpb25LZXkgPSAnJGRlbGVnYXRpb246JzsKKworCXJldHVybiB7CisJCWJhc2U6ICdmb2N1c2luJywKKworCQlvblJlbW92ZTogZnVuY3Rpb24oZWxlbWVudCl7CisJCQllbGVtZW50LnJldHJpZXZlKCRkZWxlZ2F0aW9uS2V5ICsgJ2Zvcm1zJywgW10pLmVhY2goZnVuY3Rpb24oZWwpeworCQkJCWVsLnJldHJpZXZlKCRkZWxlZ2F0aW9uS2V5ICsgJ2xpc3RlbmVycycsIFtdKS5lYWNoKGZ1bmN0aW9uKGxpc3RlbmVyKXsKKwkJCQkJZWwucmVtb3ZlRXZlbnQoZXZlbnROYW1lLCBsaXN0ZW5lcik7CisJCQkJfSk7CisJCQkJZWwuZWxpbWluYXRlKCRkZWxlZ2F0aW9uS2V5ICsgZXZlbnROYW1lICsgJ2xpc3RlbmVycycpCisJCQkJCS5lbGltaW5hdGUoJGRlbGVnYXRpb25LZXkgKyBldmVudE5hbWUgKyAnb3JpZ2luYWxGbicpOworCQkJfSk7CisJCX0sCisKKwkJbGlzdGVuZXI6IGZ1bmN0aW9uKHNwbGl0LCBmbiwgYXJncywgbW9uaXRvciwgb3B0aW9ucyl7CisJCQl2YXIgZXZlbnQgPSBhcmdzWzBdLAorCQkJCWZvcm1zID0gdGhpcy5yZXRyaWV2ZSgkZGVsZWdhdGlvbktleSArICdmb3JtcycsIFtdKSwKKwkJCQl0YXJnZXQgPSBldmVudC50YXJnZXQsCisJCQkJZm9ybSA9ICh0YXJnZXQuZ2V0KCd0YWcnKSA9PSAnZm9ybScpID8gdGFyZ2V0IDogZXZlbnQudGFyZ2V0LmdldFBhcmVudCgnZm9ybScpOworCisJCQlpZiAoIWZvcm0pIHJldHVybjsKKworCQkJdmFyIGZvcm1FdmVudHMgPSBmb3JtLnJldHJpZXZlKCRkZWxlZ2F0aW9uS2V5ICsgJ29yaWdpbmFsRm4nLCBbXSksCisJCQkJZm9ybUxpc3RlbmVycyA9IGZvcm0ucmV0cmlldmUoJGRlbGVnYXRpb25LZXkgKyAnbGlzdGVuZXJzJywgW10pLAorCQkJCXNlbGYgPSB0aGlzOworCisJCQlmb3Jtcy5pbmNsdWRlKGZvcm0pOworCQkJdGhpcy5zdG9yZSgkZGVsZWdhdGlvbktleSArICdmb3JtcycsIGZvcm1zKTsKKworCQkJaWYgKCFmb3JtRXZlbnRzLmNvbnRhaW5zKGZuKSl7CisJCQkJdmFyIGZvcm1MaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50KXsKKwkJCQkJYnViYmxlVXAuY2FsbChzZWxmLCBzcGxpdCwgZXZlbnQsIGZuKTsKKwkJCQl9OworCQkJCWZvcm0uYWRkRXZlbnQoZXZlbnROYW1lLCBmb3JtTGlzdGVuZXIpOworCisJCQkJZm9ybUV2ZW50cy5wdXNoKGZuKTsKKwkJCQlmb3JtTGlzdGVuZXJzLnB1c2goZm9ybUxpc3RlbmVyKTsKKworCQkJCWZvcm0uc3RvcmUoJGRlbGVnYXRpb25LZXkgKyBldmVudE5hbWUgKyAnb3JpZ2luYWxGbicsIGZvcm1FdmVudHMpCisJCQkJCS5zdG9yZSgkZGVsZWdhdGlvbktleSArIGV2ZW50TmFtZSArICdsaXN0ZW5lcnMnLCBmb3JtTGlzdGVuZXJzKTsKKwkJCX0KKwkJfQorCX07Cit9OworCit2YXIgaW5wdXRPYnNlcnZlciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSl7CisJcmV0dXJuIHsKKwkJYmFzZTogJ2ZvY3VzaW4nLAorCQlsaXN0ZW5lcjogZnVuY3Rpb24oc3BsaXQsIGZuLCBhcmdzKXsKKwkJCXZhciBldmVudHMgPSB7Ymx1cjogZnVuY3Rpb24oKXsKKwkJCQl0aGlzLnJlbW92ZUV2ZW50cyhldmVudHMpOworCQkJfX0sIHNlbGYgPSB0aGlzOworCQkJZXZlbnRzW2V2ZW50TmFtZV0gPSBmdW5jdGlvbihldmVudCl7CisJCQkJYnViYmxlVXAuY2FsbChzZWxmLCBzcGxpdCwgZXZlbnQsIGZuKTsKKwkJCX07CisJCQlhcmdzWzBdLnRhcmdldC5hZGRFdmVudHMoZXZlbnRzKTsKKwkJfQorCX07Cit9OworCit2YXIgZXZlbnRPcHRpb25zID0geworCW1vdXNlZW50ZXI6IHsKKwkJYmFzZTogJ21vdXNlb3ZlcicKKwl9LAorCW1vdXNlbGVhdmU6IHsKKwkJYmFzZTogJ21vdXNlb3V0JworCX0sCisJZm9jdXM6IHsKKwkJYmFzZTogJ2ZvY3VzJyArIChldmVudExpc3RlbmVyU3VwcG9ydCA/ICcnIDogJ2luJyksCisJCWFyZ3M6IFt0cnVlXQorCX0sCisJYmx1cjogeworCQliYXNlOiBldmVudExpc3RlbmVyU3VwcG9ydCA/ICdibHVyJyA6ICdmb2N1c291dCcsCisJCWFyZ3M6IFt0cnVlXQorCX0KK307CisKK2lmICghZXZlbnRMaXN0ZW5lclN1cHBvcnQpIE9iamVjdC5hcHBlbmQoZXZlbnRPcHRpb25zLCB7CisJc3VibWl0OiBmb3JtT2JzZXJ2ZXIoJ3N1Ym1pdCcpLAorCXJlc2V0OiBmb3JtT2JzZXJ2ZXIoJ3Jlc2V0JyksCisJY2hhbmdlOiBpbnB1dE9ic2VydmVyKCdjaGFuZ2UnKSwKKwlzZWxlY3Q6IGlucHV0T2JzZXJ2ZXIoJ3NlbGVjdCcpCit9KTsKKworRXZlbnQuZGVmaW5lUHNldWRvKCdyZWxheScsIHsKKwlsaXN0ZW5lcjogZnVuY3Rpb24oc3BsaXQsIGZuLCBhcmdzKXsKKwkJYnViYmxlVXAuY2FsbCh0aGlzLCBzcGxpdCwgYXJnc1swXSwgZm4pOworCX0sCisJb3B0aW9uczogZXZlbnRPcHRpb25zCit9KTsKKworfSkoKTsKKworCisvKgorLS0tCisKK3NjcmlwdDogRWxlbWVudC5NZWFzdXJlLmpzCisKK25hbWU6IEVsZW1lbnQuTWVhc3VyZQorCitkZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgRWxlbWVudCBuYXRpdmUgb2JqZWN0IHRvIGluY2x1ZGUgbWV0aG9kcyB1c2VmdWwgaW4gbWVhc3VyaW5nIGRpbWVuc2lvbnMuCisKK2NyZWRpdHM6ICJFbGVtZW50Lm1lYXN1cmUgLyAuZXhwb3NlIG1ldGhvZHMgYnkgRGFuaWVsIFN0ZWlnZXJ3YWxkIExpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLiBDb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwOCBEYW5pZWwgU3RlaWdlcndhbGQsIGRhbmllbC5zdGVpZ2Vyd2FsZC5jeiIKKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9FbGVtZW50LlN0eWxlCisgIC0gQ29yZS9FbGVtZW50LkRpbWVuc2lvbnMKKyAgLSAvTW9vVG9vbHMuTW9yZQorCitwcm92aWRlczogW0VsZW1lbnQuTWVhc3VyZV0KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIGdldFN0eWxlc0xpc3QgPSBmdW5jdGlvbihzdHlsZXMsIHBsYW5lcyl7CisJdmFyIGxpc3QgPSBbXTsKKwlPYmplY3QuZWFjaChwbGFuZXMsIGZ1bmN0aW9uKGRpcmVjdGlvbnMpeworCQlPYmplY3QuZWFjaChkaXJlY3Rpb25zLCBmdW5jdGlvbihlZGdlKXsKKwkJCXN0eWxlcy5lYWNoKGZ1bmN0aW9uKHN0eWxlKXsKKwkJCQlsaXN0LnB1c2goc3R5bGUgKyAnLScgKyBlZGdlICsgKHN0eWxlID09ICdib3JkZXInID8gJy13aWR0aCcgOiAnJykpOworCQkJfSk7CisJCX0pOworCX0pOworCXJldHVybiBsaXN0OworfTsKKwordmFyIGNhbGN1bGF0ZUVkZ2VTaXplID0gZnVuY3Rpb24oZWRnZSwgc3R5bGVzKXsKKwl2YXIgdG90YWwgPSAwOworCU9iamVjdC5lYWNoKHN0eWxlcywgZnVuY3Rpb24odmFsdWUsIHN0eWxlKXsKKwkJaWYgKHN0eWxlLnRlc3QoZWRnZSkpIHRvdGFsID0gdG90YWwgKyB2YWx1ZS50b0ludCgpOworCX0pOworCXJldHVybiB0b3RhbDsKK307CisKK3ZhciBpc1Zpc2libGUgPSBmdW5jdGlvbihlbCl7CisJcmV0dXJuICEhKCFlbCB8fCBlbC5vZmZzZXRIZWlnaHQgfHwgZWwub2Zmc2V0V2lkdGgpOworfTsKKworCitFbGVtZW50LmltcGxlbWVudCh7CisKKwltZWFzdXJlOiBmdW5jdGlvbihmbil7CisJCWlmIChpc1Zpc2libGUodGhpcykpIHJldHVybiBmbi5jYWxsKHRoaXMpOworCQl2YXIgcGFyZW50ID0gdGhpcy5nZXRQYXJlbnQoKSwKKwkJCXRvTWVhc3VyZSA9IFtdOworCQl3aGlsZSAoIWlzVmlzaWJsZShwYXJlbnQpICYmIHBhcmVudCAhPSBkb2N1bWVudC5ib2R5KXsKKwkJCXRvTWVhc3VyZS5wdXNoKHBhcmVudC5leHBvc2UoKSk7CisJCQlwYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50KCk7CisJCX0KKwkJdmFyIHJlc3RvcmUgPSB0aGlzLmV4cG9zZSgpLAorCQkJcmVzdWx0ID0gZm4uY2FsbCh0aGlzKTsKKwkJcmVzdG9yZSgpOworCQl0b01lYXN1cmUuZWFjaChmdW5jdGlvbihyZXN0b3JlKXsKKwkJCXJlc3RvcmUoKTsKKwkJfSk7CisJCXJldHVybiByZXN1bHQ7CisJfSwKKworCWV4cG9zZTogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMuZ2V0U3R5bGUoJ2Rpc3BsYXknKSAhPSAnbm9uZScpIHJldHVybiBmdW5jdGlvbigpe307CisJCXZhciBiZWZvcmUgPSB0aGlzLnN0eWxlLmNzc1RleHQ7CisJCXRoaXMuc2V0U3R5bGVzKHsKKwkJCWRpc3BsYXk6ICdibG9jaycsCisJCQlwb3NpdGlvbjogJ2Fic29sdXRlJywKKwkJCXZpc2liaWxpdHk6ICdoaWRkZW4nCisJCX0pOworCQlyZXR1cm4gZnVuY3Rpb24oKXsKKwkJCXRoaXMuc3R5bGUuY3NzVGV4dCA9IGJlZm9yZTsKKwkJfS5iaW5kKHRoaXMpOworCX0sCisKKwlnZXREaW1lbnNpb25zOiBmdW5jdGlvbihvcHRpb25zKXsKKwkJb3B0aW9ucyA9IE9iamVjdC5tZXJnZSh7Y29tcHV0ZVNpemU6IGZhbHNlfSwgb3B0aW9ucyk7CisJCXZhciBkaW0gPSB7eDogMCwgeTogMH07CisKKwkJdmFyIGdldFNpemUgPSBmdW5jdGlvbihlbCwgb3B0aW9ucyl7CisJCQlyZXR1cm4gKG9wdGlvbnMuY29tcHV0ZVNpemUpID8gZWwuZ2V0Q29tcHV0ZWRTaXplKG9wdGlvbnMpIDogZWwuZ2V0U2l6ZSgpOworCQl9OworCisJCXZhciBwYXJlbnQgPSB0aGlzLmdldFBhcmVudCgnYm9keScpOworCisJCWlmIChwYXJlbnQgJiYgdGhpcy5nZXRTdHlsZSgnZGlzcGxheScpID09ICdub25lJyl7CisJCQlkaW0gPSB0aGlzLm1lYXN1cmUoZnVuY3Rpb24oKXsKKwkJCQlyZXR1cm4gZ2V0U2l6ZSh0aGlzLCBvcHRpb25zKTsKKwkJCX0pOworCQl9IGVsc2UgaWYgKHBhcmVudCl7CisJCQl0cnkgeyAvL3NhZmFyaSBzb21ldGltZXMgY3Jhc2hlcyBoZXJlLCBzbyBjYXRjaCBpdAorCQkJCWRpbSA9IGdldFNpemUodGhpcywgb3B0aW9ucyk7CisJCQl9Y2F0Y2goZSl7fQorCQl9CisKKwkJcmV0dXJuIE9iamVjdC5hcHBlbmQoZGltLCAoZGltLnggfHwgZGltLnggPT09IDApID8geworCQkJCXdpZHRoOiBkaW0ueCwKKwkJCQloZWlnaHQ6IGRpbS55CisJCQl9IDogeworCQkJCXg6IGRpbS53aWR0aCwKKwkJCQl5OiBkaW0uaGVpZ2h0CisJCQl9CisJCSk7CisJfSwKKworCWdldENvbXB1dGVkU2l6ZTogZnVuY3Rpb24ob3B0aW9ucyl7CisJCS8vPDEuMmNvbXBhdD4KKwkJLy9sZWdhY3kgc3VwcG9ydCBmb3IgbXkgc3R1cGlkIHNwZWxsaW5nIGVycm9yCisJCWlmIChvcHRpb25zICYmIG9wdGlvbnMucGxhaW5zKSBvcHRpb25zLnBsYW5lcyA9IG9wdGlvbnMucGxhaW5zOworCQkvLzwvMS4yY29tcGF0PgorCisJCW9wdGlvbnMgPSBPYmplY3QubWVyZ2UoeworCQkJc3R5bGVzOiBbJ3BhZGRpbmcnLCdib3JkZXInXSwKKwkJCXBsYW5lczogeworCQkJCWhlaWdodDogWyd0b3AnLCdib3R0b20nXSwKKwkJCQl3aWR0aDogWydsZWZ0JywncmlnaHQnXQorCQkJfSwKKwkJCW1vZGU6ICdib3RoJworCQl9LCBvcHRpb25zKTsKKworCQl2YXIgc3R5bGVzID0ge30sCisJCQlzaXplID0ge3dpZHRoOiAwLCBoZWlnaHQ6IDB9LAorCQkJZGltZW5zaW9uczsKKworCQlpZiAob3B0aW9ucy5tb2RlID09ICd2ZXJ0aWNhbCcpeworCQkJZGVsZXRlIHNpemUud2lkdGg7CisJCQlkZWxldGUgb3B0aW9ucy5wbGFuZXMud2lkdGg7CisJCX0gZWxzZSBpZiAob3B0aW9ucy5tb2RlID09ICdob3Jpem9udGFsJyl7CisJCQlkZWxldGUgc2l6ZS5oZWlnaHQ7CisJCQlkZWxldGUgb3B0aW9ucy5wbGFuZXMuaGVpZ2h0OworCQl9CisKKwkJZ2V0U3R5bGVzTGlzdChvcHRpb25zLnN0eWxlcywgb3B0aW9ucy5wbGFuZXMpLmVhY2goZnVuY3Rpb24oc3R5bGUpeworCQkJc3R5bGVzW3N0eWxlXSA9IHRoaXMuZ2V0U3R5bGUoc3R5bGUpLnRvSW50KCk7CisJCX0sIHRoaXMpOworCisJCU9iamVjdC5lYWNoKG9wdGlvbnMucGxhbmVzLCBmdW5jdGlvbihlZGdlcywgcGxhbmUpeworCisJCQl2YXIgY2FwaXRhbGl6ZWQgPSBwbGFuZS5jYXBpdGFsaXplKCksCisJCQkJc3R5bGUgPSB0aGlzLmdldFN0eWxlKHBsYW5lKTsKKworCQkJaWYgKHN0eWxlID09ICdhdXRvJyAmJiAhZGltZW5zaW9ucykgZGltZW5zaW9ucyA9IHRoaXMuZ2V0RGltZW5zaW9ucygpOworCisJCQlzdHlsZSA9IHN0eWxlc1twbGFuZV0gPSAoc3R5bGUgPT0gJ2F1dG8nKSA/IGRpbWVuc2lvbnNbcGxhbmVdIDogc3R5bGUudG9JbnQoKTsKKwkJCXNpemVbJ3RvdGFsJyArIGNhcGl0YWxpemVkXSA9IHN0eWxlOworCisJCQllZGdlcy5lYWNoKGZ1bmN0aW9uKGVkZ2UpeworCQkJCXZhciBlZGdlc2l6ZSA9IGNhbGN1bGF0ZUVkZ2VTaXplKGVkZ2UsIHN0eWxlcyk7CisJCQkJc2l6ZVsnY29tcHV0ZWQnICsgZWRnZS5jYXBpdGFsaXplKCldID0gZWRnZXNpemU7CisJCQkJc2l6ZVsndG90YWwnICsgY2FwaXRhbGl6ZWRdICs9IGVkZ2VzaXplOworCQkJfSk7CisKKwkJfSwgdGhpcyk7CisKKwkJcmV0dXJuIE9iamVjdC5hcHBlbmQoc2l6ZSwgc3R5bGVzKTsKKwl9CisKK30pOworCit9KSgpOworCisKKy8qCistLS0KKworc2NyaXB0OiBFbGVtZW50LlBpbi5qcworCituYW1lOiBFbGVtZW50LlBpbgorCitkZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgRWxlbWVudCBuYXRpdmUgb2JqZWN0IHRvIGluY2x1ZGUgdGhlIHBpbiBtZXRob2QgdXNlZnVsIGZvciBmaXhlZCBwb3NpdGlvbmluZyBmb3IgZWxlbWVudHMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisKK3JlcXVpcmVzOgorICAtIENvcmUvRWxlbWVudC5FdmVudAorICAtIENvcmUvRWxlbWVudC5EaW1lbnNpb25zCisgIC0gQ29yZS9FbGVtZW50LlN0eWxlCisgIC0gL01vb1Rvb2xzLk1vcmUKKworcHJvdmlkZXM6IFtFbGVtZW50LlBpbl0KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwl2YXIgc3VwcG9ydHNQb3NpdGlvbkZpeGVkID0gZmFsc2UsCisJCXN1cHBvcnRUZXN0ZWQgPSBmYWxzZTsKKworCXZhciB0ZXN0UG9zaXRpb25GaXhlZCA9IGZ1bmN0aW9uKCl7CisJCXZhciB0ZXN0ID0gbmV3IEVsZW1lbnQoJ2RpdicpLnNldFN0eWxlcyh7CisJCQlwb3NpdGlvbjogJ2ZpeGVkJywKKwkJCXRvcDogMCwKKwkJCXJpZ2h0OiAwCisJCX0pLmluamVjdChkb2N1bWVudC5ib2R5KTsKKwkJc3VwcG9ydHNQb3NpdGlvbkZpeGVkID0gKHRlc3Qub2Zmc2V0VG9wID09PSAwKTsKKwkJdGVzdC5kaXNwb3NlKCk7CisJCXN1cHBvcnRUZXN0ZWQgPSB0cnVlOworCX07CisKKwlFbGVtZW50LmltcGxlbWVudCh7CisKKwkJcGluOiBmdW5jdGlvbihlbmFibGUsIGZvcmNlU2Nyb2xsKXsKKwkJCWlmICghc3VwcG9ydFRlc3RlZCkgdGVzdFBvc2l0aW9uRml4ZWQoKTsKKwkJCWlmICh0aGlzLmdldFN0eWxlKCdkaXNwbGF5JykgPT0gJ25vbmUnKSByZXR1cm4gdGhpczsKKworCQkJdmFyIHBpbm5lZFBvc2l0aW9uLAorCQkJCXNjcm9sbCA9IHdpbmRvdy5nZXRTY3JvbGwoKSwKKwkJCQlwYXJlbnQsCisJCQkJc2Nyb2xsRml4ZXI7CisKKwkJCWlmIChlbmFibGUgIT09IGZhbHNlKXsKKwkJCQlwaW5uZWRQb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRpb24oc3VwcG9ydHNQb3NpdGlvbkZpeGVkID8gZG9jdW1lbnQuYm9keSA6IHRoaXMuZ2V0T2Zmc2V0UGFyZW50KCkpOworCQkJCWlmICghdGhpcy5yZXRyaWV2ZSgncGluOl9waW5uZWQnKSl7CisJCQkJCXZhciBjdXJyZW50UG9zaXRpb24gPSB7CisJCQkJCQl0b3A6IHBpbm5lZFBvc2l0aW9uLnkgLSBzY3JvbGwueSwKKwkJCQkJCWxlZnQ6IHBpbm5lZFBvc2l0aW9uLnggLSBzY3JvbGwueAorCQkJCQl9OworCisJCQkJCWlmIChzdXBwb3J0c1Bvc2l0aW9uRml4ZWQgJiYgIWZvcmNlU2Nyb2xsKXsKKwkJCQkJCXRoaXMuc2V0U3R5bGUoJ3Bvc2l0aW9uJywgJ2ZpeGVkJykuc2V0U3R5bGVzKGN1cnJlbnRQb3NpdGlvbik7CisJCQkJCX0gZWxzZSB7CisKKwkJCQkJCXBhcmVudCA9IHRoaXMuZ2V0T2Zmc2V0UGFyZW50KCk7CisJCQkJCQl2YXIgcG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uKHBhcmVudCksCisJCQkJCQkJc3R5bGVzID0gdGhpcy5nZXRTdHlsZXMoJ2xlZnQnLCAndG9wJyk7CisKKwkJCQkJCWlmIChwYXJlbnQgJiYgc3R5bGVzLmxlZnQgPT0gJ2F1dG8nIHx8IHN0eWxlcy50b3AgPT0gJ2F1dG8nKSB0aGlzLnNldFBvc2l0aW9uKHBvc2l0aW9uKTsKKwkJCQkJCWlmICh0aGlzLmdldFN0eWxlKCdwb3NpdGlvbicpID09ICdzdGF0aWMnKSB0aGlzLnNldFN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpOworCisJCQkJCQlwb3NpdGlvbiA9IHsKKwkJCQkJCQl4OiBzdHlsZXMubGVmdC50b0ludCgpIC0gc2Nyb2xsLngsCisJCQkJCQkJeTogc3R5bGVzLnRvcC50b0ludCgpIC0gc2Nyb2xsLnkKKwkJCQkJCX07CisKKwkJCQkJCXNjcm9sbEZpeGVyID0gZnVuY3Rpb24oKXsKKwkJCQkJCQlpZiAoIXRoaXMucmV0cmlldmUoJ3BpbjpfcGlubmVkJykpIHJldHVybjsKKwkJCQkJCQl2YXIgc2Nyb2xsID0gd2luZG93LmdldFNjcm9sbCgpOworCQkJCQkJCXRoaXMuc2V0U3R5bGVzKHsKKwkJCQkJCQkJbGVmdDogcG9zaXRpb24ueCArIHNjcm9sbC54LAorCQkJCQkJCQl0b3A6IHBvc2l0aW9uLnkgKyBzY3JvbGwueQorCQkJCQkJCX0pOworCQkJCQkJfS5iaW5kKHRoaXMpOworCisJCQkJCQl0aGlzLnN0b3JlKCdwaW46X3Njcm9sbEZpeGVyJywgc2Nyb2xsRml4ZXIpOworCQkJCQkJd2luZG93LmFkZEV2ZW50KCdzY3JvbGwnLCBzY3JvbGxGaXhlcik7CisJCQkJCX0KKwkJCQkJdGhpcy5zdG9yZSgncGluOl9waW5uZWQnLCB0cnVlKTsKKwkJCQl9CisKKwkJCX0gZWxzZSB7CisJCQkJaWYgKCF0aGlzLnJldHJpZXZlKCdwaW46X3Bpbm5lZCcpKSByZXR1cm4gdGhpczsKKworCQkJCXBhcmVudCA9IHRoaXMuZ2V0UGFyZW50KCk7CisJCQkJdmFyIG9mZnNldFBhcmVudCA9IChwYXJlbnQuZ2V0Q29tcHV0ZWRTdHlsZSgncG9zaXRpb24nKSAhPSAnc3RhdGljJyA/IHBhcmVudCA6IHBhcmVudC5nZXRPZmZzZXRQYXJlbnQoKSk7CisKKwkJCQlwaW5uZWRQb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRpb24ob2Zmc2V0UGFyZW50KTsKKworCQkJCXRoaXMuc3RvcmUoJ3BpbjpfcGlubmVkJywgZmFsc2UpOworCQkJCXNjcm9sbEZpeGVyID0gdGhpcy5yZXRyaWV2ZSgncGluOl9zY3JvbGxGaXhlcicpOworCQkJCWlmICghc2Nyb2xsRml4ZXIpeworCQkJCQl0aGlzLnNldFN0eWxlcyh7CisJCQkJCQlwb3NpdGlvbjogJ2Fic29sdXRlJywKKwkJCQkJCXRvcDogcGlubmVkUG9zaXRpb24ueSArIHNjcm9sbC55LAorCQkJCQkJbGVmdDogcGlubmVkUG9zaXRpb24ueCArIHNjcm9sbC54CisJCQkJCX0pOworCQkJCX0gZWxzZSB7CisJCQkJCXRoaXMuc3RvcmUoJ3Bpbjpfc2Nyb2xsRml4ZXInLCBudWxsKTsKKwkJCQkJd2luZG93LnJlbW92ZUV2ZW50KCdzY3JvbGwnLCBzY3JvbGxGaXhlcik7CisJCQkJfQorCQkJCXRoaXMucmVtb3ZlQ2xhc3MoJ2lzUGlubmVkJyk7CisJCQl9CisJCQlyZXR1cm4gdGhpczsKKwkJfSwKKworCQl1bnBpbjogZnVuY3Rpb24oKXsKKwkJCXJldHVybiB0aGlzLnBpbihmYWxzZSk7CisJCX0sCisKKwkJdG9nZ2xlUGluOiBmdW5jdGlvbigpeworCQkJcmV0dXJuIHRoaXMucGluKCF0aGlzLnJldHJpZXZlKCdwaW46X3Bpbm5lZCcpKTsKKwkJfQorCisJfSk7CisKKy8vPDEuMmNvbXBhdD4KK0VsZW1lbnQuYWxpYXMoJ3RvZ2dsZXBpbicsICd0b2dnbGVQaW4nKTsKKy8vPC8xLjJjb21wYXQ+CisKK30pKCk7CisKKworLyoKKy0tLQorCitzY3JpcHQ6IEVsZW1lbnQuUG9zaXRpb24uanMKKworbmFtZTogRWxlbWVudC5Qb3NpdGlvbgorCitkZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgRWxlbWVudCBuYXRpdmUgb2JqZWN0IHRvIGluY2x1ZGUgbWV0aG9kcyB1c2VmdWwgcG9zaXRpb25pbmcgZWxlbWVudHMgcmVsYXRpdmUgdG8gb3RoZXJzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFhcm9uIE5ld3RvbgorICAtIEphY29iIFRob3JudG9uCisKK3JlcXVpcmVzOgorICAtIENvcmUvT3B0aW9ucworICAtIENvcmUvRWxlbWVudC5EaW1lbnNpb25zCisgIC0gRWxlbWVudC5NZWFzdXJlCisKK3Byb3ZpZGVzOiBbRWxlbWVudC5Qb3NpdGlvbl0KKworLi4uCisqLworCisoZnVuY3Rpb24ob3JpZ2luYWwpeworCit2YXIgbG9jYWwgPSBFbGVtZW50LlBvc2l0aW9uID0geworCisJb3B0aW9uczogey8qCisJCWVkZ2U6IGZhbHNlLAorCQlyZXR1cm5Qb3M6IGZhbHNlLAorCQltaW5pbXVtOiB7eDogMCwgeTogMH0sCisJCW1heGltdW06IHt4OiAwLCB5OiAwfSwKKwkJcmVsRml4ZWRQb3NpdGlvbjogZmFsc2UsCisJCWlnbm9yZU1hcmdpbnM6IGZhbHNlLAorCQlpZ25vcmVTY3JvbGw6IGZhbHNlLAorCQlhbGxvd05lZ2F0aXZlOiBmYWxzZSwqLworCQlyZWxhdGl2ZVRvOiBkb2N1bWVudC5ib2R5LAorCQlwb3NpdGlvbjogeworCQkJeDogJ2NlbnRlcicsIC8vbGVmdCwgY2VudGVyLCByaWdodAorCQkJeTogJ2NlbnRlcicgLy90b3AsIGNlbnRlciwgYm90dG9tCisJCX0sCisJCW9mZnNldDoge3g6IDAsIHk6IDB9CisJfSwKKworCWdldE9wdGlvbnM6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpeworCQlvcHRpb25zID0gT2JqZWN0Lm1lcmdlKHt9LCBsb2NhbC5vcHRpb25zLCBvcHRpb25zKTsKKwkJbG9jYWwuc2V0UG9zaXRpb25PcHRpb24ob3B0aW9ucyk7CisJCWxvY2FsLnNldEVkZ2VPcHRpb24ob3B0aW9ucyk7CisJCWxvY2FsLnNldE9mZnNldE9wdGlvbihlbGVtZW50LCBvcHRpb25zKTsKKwkJbG9jYWwuc2V0RGltZW5zaW9uc09wdGlvbihlbGVtZW50LCBvcHRpb25zKTsKKwkJcmV0dXJuIG9wdGlvbnM7CisJfSwKKworCXNldFBvc2l0aW9uT3B0aW9uOiBmdW5jdGlvbihvcHRpb25zKXsKKwkJb3B0aW9ucy5wb3NpdGlvbiA9IGxvY2FsLmdldENvb3JkaW5hdGVGcm9tVmFsdWUob3B0aW9ucy5wb3NpdGlvbik7CisJfSwKKworCXNldEVkZ2VPcHRpb246IGZ1bmN0aW9uKG9wdGlvbnMpeworCQl2YXIgZWRnZU9wdGlvbiA9IGxvY2FsLmdldENvb3JkaW5hdGVGcm9tVmFsdWUob3B0aW9ucy5lZGdlKTsKKwkJb3B0aW9ucy5lZGdlID0gZWRnZU9wdGlvbiA/IGVkZ2VPcHRpb24gOgorCQkJKG9wdGlvbnMucG9zaXRpb24ueCA9PSAnY2VudGVyJyAmJiBvcHRpb25zLnBvc2l0aW9uLnkgPT0gJ2NlbnRlcicpID8ge3g6ICdjZW50ZXInLCB5OiAnY2VudGVyJ30gOgorCQkJe3g6ICdsZWZ0JywgeTogJ3RvcCd9OworCX0sCisKKwlzZXRPZmZzZXRPcHRpb246IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpeworCQl2YXIgcGFyZW50T2Zmc2V0ID0ge3g6IDAsIHk6IDB9LAorCQkJb2Zmc2V0UGFyZW50ID0gZWxlbWVudC5tZWFzdXJlKGZ1bmN0aW9uKCl7CisJCQkJcmV0dXJuIGRvY3VtZW50LmlkKHRoaXMuZ2V0T2Zmc2V0UGFyZW50KCkpOworCQkJfSksCisJCQlwYXJlbnRTY3JvbGwgPSBvZmZzZXRQYXJlbnQuZ2V0U2Nyb2xsKCk7CisKKwkJaWYgKCFvZmZzZXRQYXJlbnQgfHwgb2Zmc2V0UGFyZW50ID09IGVsZW1lbnQuZ2V0RG9jdW1lbnQoKS5ib2R5KSByZXR1cm47CisJCXBhcmVudE9mZnNldCA9IG9mZnNldFBhcmVudC5tZWFzdXJlKGZ1bmN0aW9uKCl7CisJCQl2YXIgcG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uKCk7CisJCQlpZiAodGhpcy5nZXRTdHlsZSgncG9zaXRpb24nKSA9PSAnZml4ZWQnKXsKKwkJCQl2YXIgc2Nyb2xsID0gd2luZG93LmdldFNjcm9sbCgpOworCQkJCXBvc2l0aW9uLnggKz0gc2Nyb2xsLng7CisJCQkJcG9zaXRpb24ueSArPSBzY3JvbGwueTsKKwkJCX0KKwkJCXJldHVybiBwb3NpdGlvbjsKKwkJfSk7CisKKwkJb3B0aW9ucy5vZmZzZXQgPSB7CisJCQlwYXJlbnRQb3NpdGlvbmVkOiBvZmZzZXRQYXJlbnQgIT0gZG9jdW1lbnQuaWQob3B0aW9ucy5yZWxhdGl2ZVRvKSwKKwkJCXg6IG9wdGlvbnMub2Zmc2V0LnggLSBwYXJlbnRPZmZzZXQueCArIHBhcmVudFNjcm9sbC54LAorCQkJeTogb3B0aW9ucy5vZmZzZXQueSAtIHBhcmVudE9mZnNldC55ICsgcGFyZW50U2Nyb2xsLnkKKwkJfTsKKwl9LAorCisJc2V0RGltZW5zaW9uc09wdGlvbjogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucyl7CisJCW9wdGlvbnMuZGltZW5zaW9ucyA9IGVsZW1lbnQuZ2V0RGltZW5zaW9ucyh7CisJCQljb21wdXRlU2l6ZTogdHJ1ZSwKKwkJCXN0eWxlczogWydwYWRkaW5nJywgJ2JvcmRlcicsICdtYXJnaW4nXQorCQl9KTsKKwl9LAorCisJZ2V0UG9zaXRpb246IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpeworCQl2YXIgcG9zaXRpb24gPSB7fTsKKwkJb3B0aW9ucyA9IGxvY2FsLmdldE9wdGlvbnMoZWxlbWVudCwgb3B0aW9ucyk7CisJCXZhciByZWxhdGl2ZVRvID0gZG9jdW1lbnQuaWQob3B0aW9ucy5yZWxhdGl2ZVRvKSB8fCBkb2N1bWVudC5ib2R5OworCisJCWxvY2FsLnNldFBvc2l0aW9uQ29vcmRpbmF0ZXMob3B0aW9ucywgcG9zaXRpb24sIHJlbGF0aXZlVG8pOworCQlpZiAob3B0aW9ucy5lZGdlKSBsb2NhbC50b0VkZ2UocG9zaXRpb24sIG9wdGlvbnMpOworCisJCXZhciBvZmZzZXQgPSBvcHRpb25zLm9mZnNldDsKKwkJcG9zaXRpb24ubGVmdCA9ICgocG9zaXRpb24ueCA+PSAwIHx8IG9mZnNldC5wYXJlbnRQb3NpdGlvbmVkIHx8IG9wdGlvbnMuYWxsb3dOZWdhdGl2ZSkgPyBwb3NpdGlvbi54IDogMCkudG9JbnQoKTsKKwkJcG9zaXRpb24udG9wID0gKChwb3NpdGlvbi55ID49IDAgfHwgb2Zmc2V0LnBhcmVudFBvc2l0aW9uZWQgfHwgb3B0aW9ucy5hbGxvd05lZ2F0aXZlKSA/IHBvc2l0aW9uLnkgOiAwKS50b0ludCgpOworCisJCWxvY2FsLnRvTWluTWF4KHBvc2l0aW9uLCBvcHRpb25zKTsKKworCQlpZiAob3B0aW9ucy5yZWxGaXhlZFBvc2l0aW9uIHx8IHJlbGF0aXZlVG8uZ2V0U3R5bGUoJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJykgbG9jYWwudG9SZWxGaXhlZFBvc2l0aW9uKHJlbGF0aXZlVG8sIHBvc2l0aW9uKTsKKwkJaWYgKG9wdGlvbnMuaWdub3JlU2Nyb2xsKSBsb2NhbC50b0lnbm9yZVNjcm9sbChyZWxhdGl2ZVRvLCBwb3NpdGlvbik7CisJCWlmIChvcHRpb25zLmlnbm9yZU1hcmdpbnMpIGxvY2FsLnRvSWdub3JlTWFyZ2lucyhwb3NpdGlvbiwgb3B0aW9ucyk7CisKKwkJcG9zaXRpb24ubGVmdCA9IE1hdGguY2VpbChwb3NpdGlvbi5sZWZ0KTsKKwkJcG9zaXRpb24udG9wID0gTWF0aC5jZWlsKHBvc2l0aW9uLnRvcCk7CisJCWRlbGV0ZSBwb3NpdGlvbi54OworCQlkZWxldGUgcG9zaXRpb24ueTsKKworCQlyZXR1cm4gcG9zaXRpb247CisJfSwKKworCXNldFBvc2l0aW9uQ29vcmRpbmF0ZXM6IGZ1bmN0aW9uKG9wdGlvbnMsIHBvc2l0aW9uLCByZWxhdGl2ZVRvKXsKKwkJdmFyIG9mZnNldFkgPSBvcHRpb25zLm9mZnNldC55LAorCQkJb2Zmc2V0WCA9IG9wdGlvbnMub2Zmc2V0LngsCisJCQljYWxjID0gKHJlbGF0aXZlVG8gPT0gZG9jdW1lbnQuYm9keSkgPyB3aW5kb3cuZ2V0U2Nyb2xsKCkgOiByZWxhdGl2ZVRvLmdldFBvc2l0aW9uKCksCisJCQl0b3AgPSBjYWxjLnksCisJCQlsZWZ0ID0gY2FsYy54LAorCQkJd2luU2l6ZSA9IHdpbmRvdy5nZXRTaXplKCk7CisKKwkJc3dpdGNoKG9wdGlvbnMucG9zaXRpb24ueCl7CisJCQljYXNlICdsZWZ0JzogcG9zaXRpb24ueCA9IGxlZnQgKyBvZmZzZXRYOyBicmVhazsKKwkJCWNhc2UgJ3JpZ2h0JzogcG9zaXRpb24ueCA9IGxlZnQgKyBvZmZzZXRYICsgcmVsYXRpdmVUby5vZmZzZXRXaWR0aDsgYnJlYWs7CisJCQlkZWZhdWx0OiBwb3NpdGlvbi54ID0gbGVmdCArICgocmVsYXRpdmVUbyA9PSBkb2N1bWVudC5ib2R5ID8gd2luU2l6ZS54IDogcmVsYXRpdmVUby5vZmZzZXRXaWR0aCkgLyAyKSArIG9mZnNldFg7IGJyZWFrOworCQl9CisKKwkJc3dpdGNoKG9wdGlvbnMucG9zaXRpb24ueSl7CisJCQljYXNlICd0b3AnOiBwb3NpdGlvbi55ID0gdG9wICsgb2Zmc2V0WTsgYnJlYWs7CisJCQljYXNlICdib3R0b20nOiBwb3NpdGlvbi55ID0gdG9wICsgb2Zmc2V0WSArIHJlbGF0aXZlVG8ub2Zmc2V0SGVpZ2h0OyBicmVhazsKKwkJCWRlZmF1bHQ6IHBvc2l0aW9uLnkgPSB0b3AgKyAoKHJlbGF0aXZlVG8gPT0gZG9jdW1lbnQuYm9keSA/IHdpblNpemUueSA6IHJlbGF0aXZlVG8ub2Zmc2V0SGVpZ2h0KSAvIDIpICsgb2Zmc2V0WTsgYnJlYWs7CisJCX0KKwl9LAorCisJdG9NaW5NYXg6IGZ1bmN0aW9uKHBvc2l0aW9uLCBvcHRpb25zKXsKKwkJdmFyIHh5ID0ge2xlZnQ6ICd4JywgdG9wOiAneSd9LCB2YWx1ZTsKKwkJWydtaW5pbXVtJywgJ21heGltdW0nXS5lYWNoKGZ1bmN0aW9uKG1pbm1heCl7CisJCQlbJ2xlZnQnLCAndG9wJ10uZWFjaChmdW5jdGlvbihscil7CisJCQkJdmFsdWUgPSBvcHRpb25zW21pbm1heF0gPyBvcHRpb25zW21pbm1heF1beHlbbHJdXSA6IG51bGw7CisJCQkJaWYgKHZhbHVlICE9IG51bGwgJiYgKChtaW5tYXggPT0gJ21pbmltdW0nKSA/IHBvc2l0aW9uW2xyXSA8IHZhbHVlIDogcG9zaXRpb25bbHJdID4gdmFsdWUpKSBwb3NpdGlvbltscl0gPSB2YWx1ZTsKKwkJCX0pOworCQl9KTsKKwl9LAorCisJdG9SZWxGaXhlZFBvc2l0aW9uOiBmdW5jdGlvbihyZWxhdGl2ZVRvLCBwb3NpdGlvbil7CisJCXZhciB3aW5TY3JvbGwgPSB3aW5kb3cuZ2V0U2Nyb2xsKCk7CisJCXBvc2l0aW9uLnRvcCArPSB3aW5TY3JvbGwueTsKKwkJcG9zaXRpb24ubGVmdCArPSB3aW5TY3JvbGwueDsKKwl9LAorCisJdG9JZ25vcmVTY3JvbGw6IGZ1bmN0aW9uKHJlbGF0aXZlVG8sIHBvc2l0aW9uKXsKKwkJdmFyIHJlbFNjcm9sbCA9IHJlbGF0aXZlVG8uZ2V0U2Nyb2xsKCk7CisJCXBvc2l0aW9uLnRvcCAtPSByZWxTY3JvbGwueTsKKwkJcG9zaXRpb24ubGVmdCAtPSByZWxTY3JvbGwueDsKKwl9LAorCisJdG9JZ25vcmVNYXJnaW5zOiBmdW5jdGlvbihwb3NpdGlvbiwgb3B0aW9ucyl7CisJCXBvc2l0aW9uLmxlZnQgKz0gb3B0aW9ucy5lZGdlLnggPT0gJ3JpZ2h0JworCQkJPyBvcHRpb25zLmRpbWVuc2lvbnNbJ21hcmdpbi1yaWdodCddCisJCQk6IChvcHRpb25zLmVkZ2UueCAhPSAnY2VudGVyJworCQkJCT8gLW9wdGlvbnMuZGltZW5zaW9uc1snbWFyZ2luLWxlZnQnXQorCQkJCTogLW9wdGlvbnMuZGltZW5zaW9uc1snbWFyZ2luLWxlZnQnXSArICgob3B0aW9ucy5kaW1lbnNpb25zWydtYXJnaW4tcmlnaHQnXSArIG9wdGlvbnMuZGltZW5zaW9uc1snbWFyZ2luLWxlZnQnXSkgLyAyKSk7CisKKwkJcG9zaXRpb24udG9wICs9IG9wdGlvbnMuZWRnZS55ID09ICdib3R0b20nCisJCQk/IG9wdGlvbnMuZGltZW5zaW9uc1snbWFyZ2luLWJvdHRvbSddCisJCQk6IChvcHRpb25zLmVkZ2UueSAhPSAnY2VudGVyJworCQkJCT8gLW9wdGlvbnMuZGltZW5zaW9uc1snbWFyZ2luLXRvcCddCisJCQkJOiAtb3B0aW9ucy5kaW1lbnNpb25zWydtYXJnaW4tdG9wJ10gKyAoKG9wdGlvbnMuZGltZW5zaW9uc1snbWFyZ2luLWJvdHRvbSddICsgb3B0aW9ucy5kaW1lbnNpb25zWydtYXJnaW4tdG9wJ10pIC8gMikpOworCX0sCisKKwl0b0VkZ2U6IGZ1bmN0aW9uKHBvc2l0aW9uLCBvcHRpb25zKXsKKwkJdmFyIGVkZ2VPZmZzZXQgPSB7fSwKKwkJCWRpbWVuc2lvbnMgPSBvcHRpb25zLmRpbWVuc2lvbnMsCisJCQllZGdlID0gb3B0aW9ucy5lZGdlOworCisJCXN3aXRjaChlZGdlLngpeworCQkJY2FzZSAnbGVmdCc6IGVkZ2VPZmZzZXQueCA9IDA7IGJyZWFrOworCQkJY2FzZSAncmlnaHQnOiBlZGdlT2Zmc2V0LnggPSAtZGltZW5zaW9ucy54IC0gZGltZW5zaW9ucy5jb21wdXRlZFJpZ2h0IC0gZGltZW5zaW9ucy5jb21wdXRlZExlZnQ7IGJyZWFrOworCQkJLy8gY2VudGVyCisJCQlkZWZhdWx0OiBlZGdlT2Zmc2V0LnggPSAtKE1hdGgucm91bmQoZGltZW5zaW9ucy50b3RhbFdpZHRoIC8gMikpOyBicmVhazsKKwkJfQorCisJCXN3aXRjaChlZGdlLnkpeworCQkJY2FzZSAndG9wJzogZWRnZU9mZnNldC55ID0gMDsgYnJlYWs7CisJCQljYXNlICdib3R0b20nOiBlZGdlT2Zmc2V0LnkgPSAtZGltZW5zaW9ucy55IC0gZGltZW5zaW9ucy5jb21wdXRlZFRvcCAtIGRpbWVuc2lvbnMuY29tcHV0ZWRCb3R0b207IGJyZWFrOworCQkJLy8gY2VudGVyCisJCQlkZWZhdWx0OiBlZGdlT2Zmc2V0LnkgPSAtKE1hdGgucm91bmQoZGltZW5zaW9ucy50b3RhbEhlaWdodCAvIDIpKTsgYnJlYWs7CisJCX0KKworCQlwb3NpdGlvbi54ICs9IGVkZ2VPZmZzZXQueDsKKwkJcG9zaXRpb24ueSArPSBlZGdlT2Zmc2V0Lnk7CisJfSwKKworCWdldENvb3JkaW5hdGVGcm9tVmFsdWU6IGZ1bmN0aW9uKG9wdGlvbil7CisJCWlmICh0eXBlT2Yob3B0aW9uKSAhPSAnc3RyaW5nJykgcmV0dXJuIG9wdGlvbjsKKwkJb3B0aW9uID0gb3B0aW9uLnRvTG93ZXJDYXNlKCk7CisKKwkJcmV0dXJuIHsKKwkJCXg6IG9wdGlvbi50ZXN0KCdsZWZ0JykgPyAnbGVmdCcKKwkJCQk6IChvcHRpb24udGVzdCgncmlnaHQnKSA/ICdyaWdodCcgOiAnY2VudGVyJyksCisJCQl5OiBvcHRpb24udGVzdCgvdXBwZXJ8dG9wLykgPyAndG9wJworCQkJCTogKG9wdGlvbi50ZXN0KCdib3R0b20nKSA/ICdib3R0b20nIDogJ2NlbnRlcicpCisJCX07CisJfQorCit9OworCitFbGVtZW50LmltcGxlbWVudCh7CisKKwlwb3NpdGlvbjogZnVuY3Rpb24ob3B0aW9ucyl7CisJCWlmIChvcHRpb25zICYmIChvcHRpb25zLnggIT0gbnVsbCB8fCBvcHRpb25zLnkgIT0gbnVsbCkpIHsKKwkJCXJldHVybiAob3JpZ2luYWwgPyBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogdGhpcyk7CisJCX0KKwkJdmFyIHBvc2l0aW9uID0gdGhpcy5zZXRTdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKS5jYWxjdWxhdGVQb3NpdGlvbihvcHRpb25zKTsKKwkJcmV0dXJuIChvcHRpb25zICYmIG9wdGlvbnMucmV0dXJuUG9zKSA/IHBvc2l0aW9uIDogdGhpcy5zZXRTdHlsZXMocG9zaXRpb24pOworCX0sCisKKwljYWxjdWxhdGVQb3NpdGlvbjogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXJldHVybiBsb2NhbC5nZXRQb3NpdGlvbih0aGlzLCBvcHRpb25zKTsKKwl9CisKK30pOworCit9KShFbGVtZW50LnByb3RvdHlwZS5wb3NpdGlvbik7CisKKworLyoKKy0tLQorCitzY3JpcHQ6IEVsZW1lbnQuU2hvcnRjdXRzLmpzCisKK25hbWU6IEVsZW1lbnQuU2hvcnRjdXRzCisKK2Rlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBFbGVtZW50IG5hdGl2ZSBvYmplY3QgdG8gaW5jbHVkZSBzb21lIHNob3J0Y3V0IG1ldGhvZHMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisKK3JlcXVpcmVzOgorICAtIENvcmUvRWxlbWVudC5TdHlsZQorICAtIC9Nb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbRWxlbWVudC5TaG9ydGN1dHNdCisKKy4uLgorKi8KKworRWxlbWVudC5pbXBsZW1lbnQoeworCisJaXNEaXNwbGF5ZWQ6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLmdldFN0eWxlKCdkaXNwbGF5JykgIT0gJ25vbmUnOworCX0sCisKKwlpc1Zpc2libGU6IGZ1bmN0aW9uKCl7CisJCXZhciB3ID0gdGhpcy5vZmZzZXRXaWR0aCwKKwkJCWggPSB0aGlzLm9mZnNldEhlaWdodDsKKwkJcmV0dXJuICh3ID09IDAgJiYgaCA9PSAwKSA/IGZhbHNlIDogKHcgPiAwICYmIGggPiAwKSA/IHRydWUgOiB0aGlzLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnOworCX0sCisKKwl0b2dnbGU6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzW3RoaXMuaXNEaXNwbGF5ZWQoKSA/ICdoaWRlJyA6ICdzaG93J10oKTsKKwl9LAorCisJaGlkZTogZnVuY3Rpb24oKXsKKwkJdmFyIGQ7CisJCXRyeSB7CisJCQkvL0lFIGZhaWxzIGhlcmUgaWYgdGhlIGVsZW1lbnQgaXMgbm90IGluIHRoZSBkb20KKwkJCWQgPSB0aGlzLmdldFN0eWxlKCdkaXNwbGF5Jyk7CisJCX0gY2F0Y2goZSl7fQorCQlpZiAoZCA9PSAnbm9uZScpIHJldHVybiB0aGlzOworCQlyZXR1cm4gdGhpcy5zdG9yZSgnZWxlbWVudDpfb3JpZ2luYWxEaXNwbGF5JywgZCB8fCAnJykuc2V0U3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpOworCX0sCisKKwlzaG93OiBmdW5jdGlvbihkaXNwbGF5KXsKKwkJaWYgKCFkaXNwbGF5ICYmIHRoaXMuaXNEaXNwbGF5ZWQoKSkgcmV0dXJuIHRoaXM7CisJCWRpc3BsYXkgPSBkaXNwbGF5IHx8IHRoaXMucmV0cmlldmUoJ2VsZW1lbnQ6X29yaWdpbmFsRGlzcGxheScpIHx8ICdibG9jayc7CisJCXJldHVybiB0aGlzLnNldFN0eWxlKCdkaXNwbGF5JywgKGRpc3BsYXkgPT0gJ25vbmUnKSA/ICdibG9jaycgOiBkaXNwbGF5KTsKKwl9LAorCisJc3dhcENsYXNzOiBmdW5jdGlvbihyZW1vdmUsIGFkZCl7CisJCXJldHVybiB0aGlzLnJlbW92ZUNsYXNzKHJlbW92ZSkuYWRkQ2xhc3MoYWRkKTsKKwl9CisKK30pOworCitEb2N1bWVudC5pbXBsZW1lbnQoeworCisJY2xlYXJTZWxlY3Rpb246IGZ1bmN0aW9uKCl7CisJCWlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKXsKKwkJCXZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisJCQlpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMpIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKKwkJfSBlbHNlIGlmIChkb2N1bWVudC5zZWxlY3Rpb24gJiYgZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KXsKKwkJCXRyeSB7CisJCQkJLy9JRSBmYWlscyBoZXJlIGlmIHNlbGVjdGVkIGVsZW1lbnQgaXMgbm90IGluIGRvbQorCQkJCWRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpOworCQkJfSBjYXRjaChlKXt9CisJCX0KKwl9CisKK30pOworCisKKy8qCistLS0KKworc2NyaXB0OiBJZnJhbWVTaGltLmpzCisKK25hbWU6IElmcmFtZVNoaW0KKworZGVzY3JpcHRpb246IERlZmluZXMgSWZyYW1lU2hpbSwgYSBjbGFzcyBmb3Igb2JzY3VyaW5nIHNlbGVjdCBsaXN0cyBhbmQgZmxhc2ggb2JqZWN0cyBpbiBJRS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9FbGVtZW50LkV2ZW50CisgIC0gQ29yZS9FbGVtZW50LlN0eWxlCisgIC0gQ29yZS9PcHRpb25zCisgIC0gQ29yZS9FdmVudHMKKyAgLSAvRWxlbWVudC5Qb3NpdGlvbgorICAtIC9DbGFzcy5PY2NsdWRlCisKK3Byb3ZpZGVzOiBbSWZyYW1lU2hpbV0KKworLi4uCisqLworCit2YXIgSWZyYW1lU2hpbSA9IG5ldyBDbGFzcyh7CisKKwlJbXBsZW1lbnRzOiBbT3B0aW9ucywgRXZlbnRzLCBDbGFzcy5PY2NsdWRlXSwKKworCW9wdGlvbnM6IHsKKwkJY2xhc3NOYW1lOiAnaWZyYW1lU2hpbScsCisJCXNyYzogJ2phdmFzY3JpcHQ6ZmFsc2U7ZG9jdW1lbnQud3JpdGUoIiIpOycsCisJCWRpc3BsYXk6IGZhbHNlLAorCQl6SW5kZXg6IG51bGwsCisJCW1hcmdpbjogMCwKKwkJb2Zmc2V0OiB7eDogMCwgeTogMH0sCisJCWJyb3dzZXJzOiAoQnJvd3Nlci5pZTYgfHwgKEJyb3dzZXIuZmlyZWZveCAmJiBCcm93c2VyLnZlcnNpb24gPCAzICYmIEJyb3dzZXIuUGxhdGZvcm0ubWFjKSkKKwl9LAorCisJcHJvcGVydHk6ICdJZnJhbWVTaGltJywKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpeworCQl0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5pZChlbGVtZW50KTsKKwkJaWYgKHRoaXMub2NjbHVkZSgpKSByZXR1cm4gdGhpcy5vY2NsdWRlZDsKKwkJdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpOworCQl0aGlzLm1ha2VTaGltKCk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwltYWtlU2hpbTogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMub3B0aW9ucy5icm93c2Vycyl7CisJCQl2YXIgekluZGV4ID0gdGhpcy5lbGVtZW50LmdldFN0eWxlKCd6SW5kZXgnKS50b0ludCgpOworCisJCQlpZiAoIXpJbmRleCl7CisJCQkJekluZGV4ID0gMTsKKwkJCQl2YXIgcG9zID0gdGhpcy5lbGVtZW50LmdldFN0eWxlKCdwb3NpdGlvbicpOworCQkJCWlmIChwb3MgPT0gJ3N0YXRpYycgfHwgIXBvcykgdGhpcy5lbGVtZW50LnNldFN0eWxlKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpOworCQkJCXRoaXMuZWxlbWVudC5zZXRTdHlsZSgnekluZGV4JywgekluZGV4KTsKKwkJCX0KKwkJCXpJbmRleCA9ICgodGhpcy5vcHRpb25zLnpJbmRleCAhPSBudWxsIHx8IHRoaXMub3B0aW9ucy56SW5kZXggPT09IDApICYmIHpJbmRleCA+IHRoaXMub3B0aW9ucy56SW5kZXgpID8gdGhpcy5vcHRpb25zLnpJbmRleCA6IHpJbmRleCAtIDE7CisJCQlpZiAoekluZGV4IDwgMCkgekluZGV4ID0gMTsKKwkJCXRoaXMuc2hpbSA9IG5ldyBFbGVtZW50KCdpZnJhbWUnLCB7CisJCQkJc3JjOiB0aGlzLm9wdGlvbnMuc3JjLAorCQkJCXNjcm9sbGluZzogJ25vJywKKwkJCQlmcmFtZWJvcmRlcjogMCwKKwkJCQlzdHlsZXM6IHsKKwkJCQkJekluZGV4OiB6SW5kZXgsCisJCQkJCXBvc2l0aW9uOiAnYWJzb2x1dGUnLAorCQkJCQlib3JkZXI6ICdub25lJywKKwkJCQkJZmlsdGVyOiAncHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKHN0eWxlPTAsb3BhY2l0eT0wKScKKwkJCQl9LAorCQkJCSdjbGFzcyc6IHRoaXMub3B0aW9ucy5jbGFzc05hbWUKKwkJCX0pLnN0b3JlKCdJZnJhbWVTaGltJywgdGhpcyk7CisJCQl2YXIgaW5qZWN0ID0gKGZ1bmN0aW9uKCl7CisJCQkJdGhpcy5zaGltLmluamVjdCh0aGlzLmVsZW1lbnQsICdhZnRlcicpOworCQkJCXRoaXNbdGhpcy5vcHRpb25zLmRpc3BsYXkgPyAnc2hvdycgOiAnaGlkZSddKCk7CisJCQkJdGhpcy5maXJlRXZlbnQoJ2luamVjdCcpOworCQkJfSkuYmluZCh0aGlzKTsKKwkJCWlmICghSWZyYW1lU2hpbS5yZWFkeSkgd2luZG93LmFkZEV2ZW50KCdsb2FkJywgaW5qZWN0KTsKKwkJCWVsc2UgaW5qZWN0KCk7CisJCX0gZWxzZSB7CisJCQl0aGlzLnBvc2l0aW9uID0gdGhpcy5oaWRlID0gdGhpcy5zaG93ID0gdGhpcy5kaXNwb3NlID0gRnVuY3Rpb24uZnJvbSh0aGlzKTsKKwkJfQorCX0sCisKKwlwb3NpdGlvbjogZnVuY3Rpb24oKXsKKwkJaWYgKCFJZnJhbWVTaGltLnJlYWR5IHx8ICF0aGlzLnNoaW0pIHJldHVybiB0aGlzOworCQl2YXIgc2l6ZSA9IHRoaXMuZWxlbWVudC5tZWFzdXJlKGZ1bmN0aW9uKCl7CisJCQlyZXR1cm4gdGhpcy5nZXRTaXplKCk7CisJCX0pOworCQlpZiAodGhpcy5vcHRpb25zLm1hcmdpbiAhPSB1bmRlZmluZWQpeworCQkJc2l6ZS54ID0gc2l6ZS54IC0gKHRoaXMub3B0aW9ucy5tYXJnaW4gKiAyKTsKKwkJCXNpemUueSA9IHNpemUueSAtICh0aGlzLm9wdGlvbnMubWFyZ2luICogMik7CisJCQl0aGlzLm9wdGlvbnMub2Zmc2V0LnggKz0gdGhpcy5vcHRpb25zLm1hcmdpbjsKKwkJCXRoaXMub3B0aW9ucy5vZmZzZXQueSArPSB0aGlzLm9wdGlvbnMubWFyZ2luOworCQl9CisJCXRoaXMuc2hpbS5zZXQoe3dpZHRoOiBzaXplLngsIGhlaWdodDogc2l6ZS55fSkucG9zaXRpb24oeworCQkJcmVsYXRpdmVUbzogdGhpcy5lbGVtZW50LAorCQkJb2Zmc2V0OiB0aGlzLm9wdGlvbnMub2Zmc2V0CisJCX0pOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJaGlkZTogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMuc2hpbSkgdGhpcy5zaGltLnNldFN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXNob3c6IGZ1bmN0aW9uKCl7CisJCWlmICh0aGlzLnNoaW0pIHRoaXMuc2hpbS5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpOworCQlyZXR1cm4gdGhpcy5wb3NpdGlvbigpOworCX0sCisKKwlkaXNwb3NlOiBmdW5jdGlvbigpeworCQlpZiAodGhpcy5zaGltKSB0aGlzLnNoaW0uZGlzcG9zZSgpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZGVzdHJveTogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMuc2hpbSkgdGhpcy5zaGltLmRlc3Ryb3koKTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKword2luZG93LmFkZEV2ZW50KCdsb2FkJywgZnVuY3Rpb24oKXsKKwlJZnJhbWVTaGltLnJlYWR5ID0gdHJ1ZTsKK30pOworCisKKy8qCistLS0KKworc2NyaXB0OiBNYXNrLmpzCisKK25hbWU6IE1hc2sKKworZGVzY3JpcHRpb246IENyZWF0ZXMgYSBtYXNrIGVsZW1lbnQgdG8gY292ZXIgYW5vdGhlci4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9PcHRpb25zCisgIC0gQ29yZS9FdmVudHMKKyAgLSBDb3JlL0VsZW1lbnQuRXZlbnQKKyAgLSAvQ2xhc3MuQmluZHMKKyAgLSAvRWxlbWVudC5Qb3NpdGlvbgorICAtIC9JZnJhbWVTaGltCisKK3Byb3ZpZGVzOiBbTWFza10KKworLi4uCisqLworCit2YXIgTWFzayA9IG5ldyBDbGFzcyh7CisKKwlJbXBsZW1lbnRzOiBbT3B0aW9ucywgRXZlbnRzXSwKKworCUJpbmRzOiBbJ3Bvc2l0aW9uJ10sCisKKwlvcHRpb25zOiB7LyoKKwkJb25TaG93OiBmdW5jdGlvbigpe30sCisJCW9uSGlkZTogZnVuY3Rpb24oKXt9LAorCQlvbkRlc3Ryb3k6IGZ1bmN0aW9uKCl7fSwKKwkJb25DbGljazogZnVuY3Rpb24oZXZlbnQpe30sCisJCWluamVjdDogeworCQkJd2hlcmU6ICdhZnRlcicsCisJCQl0YXJnZXQ6IG51bGwsCisJCX0sCisJCWhpZGVPbkNsaWNrOiBmYWxzZSwKKwkJaWQ6IG51bGwsCisJCWRlc3Ryb3lPbkhpZGU6IGZhbHNlLCovCisJCXN0eWxlOiB7fSwKKwkJJ2NsYXNzJzogJ21hc2snLAorCQltYXNrTWFyZ2luczogZmFsc2UsCisJCXVzZUlmcmFtZVNoaW06IHRydWUsCisJCWlmcmFtZVNoaW1PcHRpb25zOiB7fQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbih0YXJnZXQsIG9wdGlvbnMpeworCQl0aGlzLnRhcmdldCA9IGRvY3VtZW50LmlkKHRhcmdldCkgfHwgZG9jdW1lbnQuaWQoZG9jdW1lbnQuYm9keSk7CisJCXRoaXMudGFyZ2V0LnN0b3JlKCdtYXNrJywgdGhpcyk7CisJCXRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTsKKwkJdGhpcy5yZW5kZXIoKTsKKwkJdGhpcy5pbmplY3QoKTsKKwl9LAorCisJcmVuZGVyOiBmdW5jdGlvbigpeworCQl0aGlzLmVsZW1lbnQgPSBuZXcgRWxlbWVudCgnZGl2JywgeworCQkJJ2NsYXNzJzogdGhpcy5vcHRpb25zWydjbGFzcyddLAorCQkJaWQ6IHRoaXMub3B0aW9ucy5pZCB8fCAnbWFzay0nICsgU3RyaW5nLnVuaXF1ZUlEKCksCisJCQlzdHlsZXM6IE9iamVjdC5tZXJnZSh7fSwgdGhpcy5vcHRpb25zLnN0eWxlLCB7CisJCQkJZGlzcGxheTogJ25vbmUnCisJCQl9KSwKKwkJCWV2ZW50czogeworCQkJCWNsaWNrOiBmdW5jdGlvbihldmVudCl7CisJCQkJCXRoaXMuZmlyZUV2ZW50KCdjbGljaycsIGV2ZW50KTsKKwkJCQkJaWYgKHRoaXMub3B0aW9ucy5oaWRlT25DbGljaykgdGhpcy5oaWRlKCk7CisJCQkJfS5iaW5kKHRoaXMpCisJCQl9CisJCX0pOworCisJCXRoaXMuaGlkZGVuID0gdHJ1ZTsKKwl9LAorCisJdG9FbGVtZW50OiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5lbGVtZW50OworCX0sCisKKwlpbmplY3Q6IGZ1bmN0aW9uKHRhcmdldCwgd2hlcmUpeworCQl3aGVyZSA9IHdoZXJlIHx8ICh0aGlzLm9wdGlvbnMuaW5qZWN0ID8gdGhpcy5vcHRpb25zLmluamVjdC53aGVyZSA6ICcnKSB8fCB0aGlzLnRhcmdldCA9PSBkb2N1bWVudC5ib2R5ID8gJ2luc2lkZScgOiAnYWZ0ZXInOworCQl0YXJnZXQgPSB0YXJnZXQgfHwgKHRoaXMub3B0aW9ucy5pbmplY3QgJiYgdGhpcy5vcHRpb25zLmluamVjdC50YXJnZXQpIHx8IHRoaXMudGFyZ2V0OworCisJCXRoaXMuZWxlbWVudC5pbmplY3QodGFyZ2V0LCB3aGVyZSk7CisKKwkJaWYgKHRoaXMub3B0aW9ucy51c2VJZnJhbWVTaGltKXsKKwkJCXRoaXMuc2hpbSA9IG5ldyBJZnJhbWVTaGltKHRoaXMuZWxlbWVudCwgdGhpcy5vcHRpb25zLmlmcmFtZVNoaW1PcHRpb25zKTsKKworCQkJdGhpcy5hZGRFdmVudHMoeworCQkJCXNob3c6IHRoaXMuc2hpbS5zaG93LmJpbmQodGhpcy5zaGltKSwKKwkJCQloaWRlOiB0aGlzLnNoaW0uaGlkZS5iaW5kKHRoaXMuc2hpbSksCisJCQkJZGVzdHJveTogdGhpcy5zaGltLmRlc3Ryb3kuYmluZCh0aGlzLnNoaW0pCisJCQl9KTsKKwkJfQorCX0sCisKKwlwb3NpdGlvbjogZnVuY3Rpb24oKXsKKwkJdGhpcy5yZXNpemUodGhpcy5vcHRpb25zLndpZHRoLCB0aGlzLm9wdGlvbnMuaGVpZ2h0KTsKKworCQl0aGlzLmVsZW1lbnQucG9zaXRpb24oeworCQkJcmVsYXRpdmVUbzogdGhpcy50YXJnZXQsCisJCQlwb3NpdGlvbjogJ3RvcExlZnQnLAorCQkJaWdub3JlTWFyZ2luczogIXRoaXMub3B0aW9ucy5tYXNrTWFyZ2lucywKKwkJCWlnbm9yZVNjcm9sbDogdGhpcy50YXJnZXQgPT0gZG9jdW1lbnQuYm9keQorCQl9KTsKKworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVzaXplOiBmdW5jdGlvbih4LCB5KXsKKwkJdmFyIG9wdCA9IHsKKwkJCXN0eWxlczogWydwYWRkaW5nJywgJ2JvcmRlciddCisJCX07CisJCWlmICh0aGlzLm9wdGlvbnMubWFza01hcmdpbnMpIG9wdC5zdHlsZXMucHVzaCgnbWFyZ2luJyk7CisKKwkJdmFyIGRpbSA9IHRoaXMudGFyZ2V0LmdldENvbXB1dGVkU2l6ZShvcHQpOworCQlpZiAodGhpcy50YXJnZXQgPT0gZG9jdW1lbnQuYm9keSl7CisJCQl0aGlzLmVsZW1lbnQuc2V0U3R5bGVzKHt3aWR0aDogMCwgaGVpZ2h0OiAwfSk7CisJCQl2YXIgd2luID0gd2luZG93LmdldFNjcm9sbFNpemUoKTsKKwkJCWlmIChkaW0udG90YWxIZWlnaHQgPCB3aW4ueSkgZGltLnRvdGFsSGVpZ2h0ID0gd2luLnk7CisJCQlpZiAoZGltLnRvdGFsV2lkdGggPCB3aW4ueCkgZGltLnRvdGFsV2lkdGggPSB3aW4ueDsKKwkJfQorCQl0aGlzLmVsZW1lbnQuc2V0U3R5bGVzKHsKKwkJCXdpZHRoOiBBcnJheS5waWNrKFt4LCBkaW0udG90YWxXaWR0aCwgZGltLnhdKSwKKwkJCWhlaWdodDogQXJyYXkucGljayhbeSwgZGltLnRvdGFsSGVpZ2h0LCBkaW0ueV0pCisJCX0pOworCisJCXJldHVybiB0aGlzOworCX0sCisKKwlzaG93OiBmdW5jdGlvbigpeworCQlpZiAoIXRoaXMuaGlkZGVuKSByZXR1cm4gdGhpczsKKworCQl3aW5kb3cuYWRkRXZlbnQoJ3Jlc2l6ZScsIHRoaXMucG9zaXRpb24pOworCQl0aGlzLnBvc2l0aW9uKCk7CisJCXRoaXMuc2hvd01hc2suYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJc2hvd01hc2s6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZWxlbWVudC5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpOworCQl0aGlzLmhpZGRlbiA9IGZhbHNlOworCQl0aGlzLmZpcmVFdmVudCgnc2hvdycpOworCX0sCisKKwloaWRlOiBmdW5jdGlvbigpeworCQlpZiAodGhpcy5oaWRkZW4pIHJldHVybiB0aGlzOworCisJCXdpbmRvdy5yZW1vdmVFdmVudCgncmVzaXplJywgdGhpcy5wb3NpdGlvbik7CisJCXRoaXMuaGlkZU1hc2suYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKwkJaWYgKHRoaXMub3B0aW9ucy5kZXN0cm95T25IaWRlKSByZXR1cm4gdGhpcy5kZXN0cm95KCk7CisKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWhpZGVNYXNrOiBmdW5jdGlvbigpeworCQl0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpOworCQl0aGlzLmhpZGRlbiA9IHRydWU7CisJCXRoaXMuZmlyZUV2ZW50KCdoaWRlJyk7CisJfSwKKworCXRvZ2dsZTogZnVuY3Rpb24oKXsKKwkJdGhpc1t0aGlzLmhpZGRlbiA/ICdzaG93JyA6ICdoaWRlJ10oKTsKKwl9LAorCisJZGVzdHJveTogZnVuY3Rpb24oKXsKKwkJdGhpcy5oaWRlKCk7CisJCXRoaXMuZWxlbWVudC5kZXN0cm95KCk7CisJCXRoaXMuZmlyZUV2ZW50KCdkZXN0cm95Jyk7CisJCXRoaXMudGFyZ2V0LmVsaW1pbmF0ZSgnbWFzaycpOworCX0KKworfSk7CisKK0VsZW1lbnQuUHJvcGVydGllcy5tYXNrID0geworCisJc2V0OiBmdW5jdGlvbihvcHRpb25zKXsKKwkJdmFyIG1hc2sgPSB0aGlzLnJldHJpZXZlKCdtYXNrJyk7CisJCWlmIChtYXNrKSBtYXNrLmRlc3Ryb3koKTsKKwkJcmV0dXJuIHRoaXMuZWxpbWluYXRlKCdtYXNrJykuc3RvcmUoJ21hc2s6b3B0aW9ucycsIG9wdGlvbnMpOworCX0sCisKKwlnZXQ6IGZ1bmN0aW9uKCl7CisJCXZhciBtYXNrID0gdGhpcy5yZXRyaWV2ZSgnbWFzaycpOworCQlpZiAoIW1hc2speworCQkJbWFzayA9IG5ldyBNYXNrKHRoaXMsIHRoaXMucmV0cmlldmUoJ21hc2s6b3B0aW9ucycpKTsKKwkJCXRoaXMuc3RvcmUoJ21hc2snLCBtYXNrKTsKKwkJfQorCQlyZXR1cm4gbWFzazsKKwl9CisKK307CisKK0VsZW1lbnQuaW1wbGVtZW50KHsKKworCW1hc2s6IGZ1bmN0aW9uKG9wdGlvbnMpeworCQlpZiAob3B0aW9ucykgdGhpcy5zZXQoJ21hc2snLCBvcHRpb25zKTsKKwkJdGhpcy5nZXQoJ21hc2snKS5zaG93KCk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwl1bm1hc2s6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZ2V0KCdtYXNrJykuaGlkZSgpOworCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCisKKy8qCistLS0KKworc2NyaXB0OiBTcGlubmVyLmpzCisKK25hbWU6IFNwaW5uZXIKKworZGVzY3JpcHRpb246IEFkZHMgYSBzZW1pLXRyYW5zcGFyZW50IG92ZXJsYXkgb3ZlciBhIGRvbSBlbGVtZW50IHdpdGggYSBzcGlubmluIGFqYXggaWNvbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9GeC5Ud2VlbgorICAtIENvcmUvUmVxdWVzdAorICAtIC9DbGFzcy5yZWZhY3RvcgorICAtIC9NYXNrCisKK3Byb3ZpZGVzOiBbU3Bpbm5lcl0KKworLi4uCisqLworCit2YXIgU3Bpbm5lciA9IG5ldyBDbGFzcyh7CisKKwlFeHRlbmRzOiBNYXNrLAorCisJSW1wbGVtZW50czogQ2hhaW4sCisKKwlvcHRpb25zOiB7LyoKKwkJbWVzc2FnZTogZmFsc2UsKi8KKwkJJ2NsYXNzJzogJ3NwaW5uZXInLAorCQljb250YWluZXJQb3NpdGlvbjoge30sCisJCWNvbnRlbnQ6IHsKKwkJCSdjbGFzcyc6ICdzcGlubmVyLWNvbnRlbnQnCisJCX0sCisJCW1lc3NhZ2VDb250YWluZXI6IHsKKwkJCSdjbGFzcyc6ICdzcGlubmVyLW1zZycKKwkJfSwKKwkJaW1nOiB7CisJCQknY2xhc3MnOiAnc3Bpbm5lci1pbWcnCisJCX0sCisJCWZ4T3B0aW9uczogeworCQkJbGluazogJ2NoYWluJworCQl9CisJfSwKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKHRhcmdldCwgb3B0aW9ucyl7CisJCXRoaXMudGFyZ2V0ID0gZG9jdW1lbnQuaWQodGFyZ2V0KSB8fCBkb2N1bWVudC5pZChkb2N1bWVudC5ib2R5KTsKKwkJdGhpcy50YXJnZXQuc3RvcmUoJ3NwaW5uZXInLCB0aGlzKTsKKwkJdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpOworCQl0aGlzLnJlbmRlcigpOworCQl0aGlzLmluamVjdCgpOworCisJCS8vIEFkZCB0aGlzIHRvIGV2ZW50cyBmb3Igd2hlbiBub0Z4IGlzIHRydWU7IHBhcmVudCBtZXRob2RzIGhhbmRsZSBoaWRlL3Nob3cuCisJCXZhciBkZWFjdGl2YXRlID0gZnVuY3Rpb24oKXsgdGhpcy5hY3RpdmUgPSBmYWxzZTsgfS5iaW5kKHRoaXMpOworCQl0aGlzLmFkZEV2ZW50cyh7CisJCQloaWRlOiBkZWFjdGl2YXRlLAorCQkJc2hvdzogZGVhY3RpdmF0ZQorCQl9KTsKKwl9LAorCisJcmVuZGVyOiBmdW5jdGlvbigpeworCQl0aGlzLnBhcmVudCgpOworCisJCXRoaXMuZWxlbWVudC5zZXQoJ2lkJywgdGhpcy5vcHRpb25zLmlkIHx8ICdzcGlubmVyLScgKyBTdHJpbmcudW5pcXVlSUQoKSk7CisKKwkJdGhpcy5jb250ZW50ID0gZG9jdW1lbnQuaWQodGhpcy5vcHRpb25zLmNvbnRlbnQpIHx8IG5ldyBFbGVtZW50KCdkaXYnLCB0aGlzLm9wdGlvbnMuY29udGVudCk7CisJCXRoaXMuY29udGVudC5pbmplY3QodGhpcy5lbGVtZW50KTsKKworCQlpZiAodGhpcy5vcHRpb25zLm1lc3NhZ2UpeworCQkJdGhpcy5tc2cgPSBkb2N1bWVudC5pZCh0aGlzLm9wdGlvbnMubWVzc2FnZSkgfHwgbmV3IEVsZW1lbnQoJ3AnLCB0aGlzLm9wdGlvbnMubWVzc2FnZUNvbnRhaW5lcikuYXBwZW5kVGV4dCh0aGlzLm9wdGlvbnMubWVzc2FnZSk7CisJCQl0aGlzLm1zZy5pbmplY3QodGhpcy5jb250ZW50KTsKKwkJfQorCisJCWlmICh0aGlzLm9wdGlvbnMuaW1nKXsKKwkJCXRoaXMuaW1nID0gZG9jdW1lbnQuaWQodGhpcy5vcHRpb25zLmltZykgfHwgbmV3IEVsZW1lbnQoJ2RpdicsIHRoaXMub3B0aW9ucy5pbWcpOworCQkJdGhpcy5pbWcuaW5qZWN0KHRoaXMuY29udGVudCk7CisJCX0KKworCQl0aGlzLmVsZW1lbnQuc2V0KCd0d2VlbicsIHRoaXMub3B0aW9ucy5meE9wdGlvbnMpOworCX0sCisKKwlzaG93OiBmdW5jdGlvbihub0Z4KXsKKwkJaWYgKHRoaXMuYWN0aXZlKSByZXR1cm4gdGhpcy5jaGFpbih0aGlzLnNob3cuYmluZCh0aGlzKSk7CisJCWlmICghdGhpcy5oaWRkZW4peworCQkJdGhpcy5jYWxsQ2hhaW4uZGVsYXkoMjAsIHRoaXMpOworCQkJcmV0dXJuIHRoaXM7CisJCX0KKworCQl0aGlzLmFjdGl2ZSA9IHRydWU7CisKKwkJcmV0dXJuIHRoaXMucGFyZW50KG5vRngpOworCX0sCisKKwlzaG93TWFzazogZnVuY3Rpb24obm9GeCl7CisJCXZhciBwb3MgPSBmdW5jdGlvbigpeworCQkJdGhpcy5jb250ZW50LnBvc2l0aW9uKE9iamVjdC5tZXJnZSh7CisJCQkJcmVsYXRpdmVUbzogdGhpcy5lbGVtZW50CisJCQl9LCB0aGlzLm9wdGlvbnMuY29udGFpbmVyUG9zaXRpb24pKTsKKwkJfS5iaW5kKHRoaXMpOworCisJCWlmIChub0Z4KXsKKwkJCXRoaXMucGFyZW50KCk7CisJCQlwb3MoKTsKKwkJfSBlbHNlIHsKKwkJCWlmICghdGhpcy5vcHRpb25zLnN0eWxlLm9wYWNpdHkpIHRoaXMub3B0aW9ucy5zdHlsZS5vcGFjaXR5ID0gdGhpcy5lbGVtZW50LmdldFN0eWxlKCdvcGFjaXR5JykudG9GbG9hdCgpOworCQkJdGhpcy5lbGVtZW50LnNldFN0eWxlcyh7CisJCQkJZGlzcGxheTogJ2Jsb2NrJywKKwkJCQlvcGFjaXR5OiAwCisJCQl9KS50d2Vlbignb3BhY2l0eScsIHRoaXMub3B0aW9ucy5zdHlsZS5vcGFjaXR5KTsKKwkJCXBvcygpOworCQkJdGhpcy5oaWRkZW4gPSBmYWxzZTsKKwkJCXRoaXMuZmlyZUV2ZW50KCdzaG93Jyk7CisJCQl0aGlzLmNhbGxDaGFpbigpOworCQl9CisJfSwKKworCWhpZGU6IGZ1bmN0aW9uKG5vRngpeworCQlpZiAodGhpcy5hY3RpdmUpIHJldHVybiB0aGlzLmNoYWluKHRoaXMuaGlkZS5iaW5kKHRoaXMpKTsKKwkJaWYgKHRoaXMuaGlkZGVuKXsKKwkJCXRoaXMuY2FsbENoYWluLmRlbGF5KDIwLCB0aGlzKTsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCXRoaXMuYWN0aXZlID0gdHJ1ZTsKKwkJcmV0dXJuIHRoaXMucGFyZW50KG5vRngpOworCX0sCisKKwloaWRlTWFzazogZnVuY3Rpb24obm9GeCl7CisJCWlmIChub0Z4KSByZXR1cm4gdGhpcy5wYXJlbnQoKTsKKwkJdGhpcy5lbGVtZW50LnR3ZWVuKCdvcGFjaXR5JywgMCkuZ2V0KCd0d2VlbicpLmNoYWluKGZ1bmN0aW9uKCl7CisJCQl0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpOworCQkJdGhpcy5oaWRkZW4gPSB0cnVlOworCQkJdGhpcy5maXJlRXZlbnQoJ2hpZGUnKTsKKwkJCXRoaXMuY2FsbENoYWluKCk7CisJCX0uYmluZCh0aGlzKSk7CisJfSwKKworCWRlc3Ryb3k6IGZ1bmN0aW9uKCl7CisJCXRoaXMuY29udGVudC5kZXN0cm95KCk7CisJCXRoaXMucGFyZW50KCk7CisJCXRoaXMudGFyZ2V0LmVsaW1pbmF0ZSgnc3Bpbm5lcicpOworCX0KKworfSk7CisKK1JlcXVlc3QgPSBDbGFzcy5yZWZhY3RvcihSZXF1ZXN0LCB7CisKKwlvcHRpb25zOiB7CisJCXVzZVNwaW5uZXI6IGZhbHNlLAorCQlzcGlubmVyT3B0aW9uczoge30sCisJCXNwaW5uZXJUYXJnZXQ6IGZhbHNlCisJfSwKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpeworCQl0aGlzLl9zZW5kID0gdGhpcy5zZW5kOworCQl0aGlzLnNlbmQgPSBmdW5jdGlvbihvcHRpb25zKXsKKwkJCXZhciBzcGlubmVyID0gdGhpcy5nZXRTcGlubmVyKCk7CisJCQlpZiAoc3Bpbm5lcikgc3Bpbm5lci5jaGFpbih0aGlzLl9zZW5kLnBhc3Mob3B0aW9ucywgdGhpcykpLnNob3coKTsKKwkJCWVsc2UgdGhpcy5fc2VuZChvcHRpb25zKTsKKwkJCXJldHVybiB0aGlzOworCQl9OworCQl0aGlzLnByZXZpb3VzKG9wdGlvbnMpOworCX0sCisKKwlnZXRTcGlubmVyOiBmdW5jdGlvbigpeworCQlpZiAoIXRoaXMuc3Bpbm5lcil7CisJCQl2YXIgdXBkYXRlID0gZG9jdW1lbnQuaWQodGhpcy5vcHRpb25zLnNwaW5uZXJUYXJnZXQpIHx8IGRvY3VtZW50LmlkKHRoaXMub3B0aW9ucy51cGRhdGUpOworCQkJaWYgKHRoaXMub3B0aW9ucy51c2VTcGlubmVyICYmIHVwZGF0ZSl7CisJCQkJdXBkYXRlLnNldCgnc3Bpbm5lcicsIHRoaXMub3B0aW9ucy5zcGlubmVyT3B0aW9ucyk7CisJCQkJdmFyIHNwaW5uZXIgPSB0aGlzLnNwaW5uZXIgPSB1cGRhdGUuZ2V0KCdzcGlubmVyJyk7CisJCQkJWydjb21wbGV0ZScsICdleGNlcHRpb24nLCAnY2FuY2VsJ10uZWFjaChmdW5jdGlvbihldmVudCl7CisJCQkJCXRoaXMuYWRkRXZlbnQoZXZlbnQsIHNwaW5uZXIuaGlkZS5iaW5kKHNwaW5uZXIpKTsKKwkJCQl9LCB0aGlzKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gdGhpcy5zcGlubmVyOworCX0KKworfSk7CisKK0VsZW1lbnQuUHJvcGVydGllcy5zcGlubmVyID0geworCisJc2V0OiBmdW5jdGlvbihvcHRpb25zKXsKKwkJdmFyIHNwaW5uZXIgPSB0aGlzLnJldHJpZXZlKCdzcGlubmVyJyk7CisJCWlmIChzcGlubmVyKSBzcGlubmVyLmRlc3Ryb3koKTsKKwkJcmV0dXJuIHRoaXMuZWxpbWluYXRlKCdzcGlubmVyJykuc3RvcmUoJ3NwaW5uZXI6b3B0aW9ucycsIG9wdGlvbnMpOworCX0sCisKKwlnZXQ6IGZ1bmN0aW9uKCl7CisJCXZhciBzcGlubmVyID0gdGhpcy5yZXRyaWV2ZSgnc3Bpbm5lcicpOworCQlpZiAoIXNwaW5uZXIpeworCQkJc3Bpbm5lciA9IG5ldyBTcGlubmVyKHRoaXMsIHRoaXMucmV0cmlldmUoJ3NwaW5uZXI6b3B0aW9ucycpKTsKKwkJCXRoaXMuc3RvcmUoJ3NwaW5uZXInLCBzcGlubmVyKTsKKwkJfQorCQlyZXR1cm4gc3Bpbm5lcjsKKwl9CisKK307CisKK0VsZW1lbnQuaW1wbGVtZW50KHsKKworCXNwaW46IGZ1bmN0aW9uKG9wdGlvbnMpeworCQlpZiAob3B0aW9ucykgdGhpcy5zZXQoJ3NwaW5uZXInLCBvcHRpb25zKTsKKwkJdGhpcy5nZXQoJ3NwaW5uZXInKS5zaG93KCk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwl1bnNwaW46IGZ1bmN0aW9uKCl7CisJCXRoaXMuZ2V0KCdzcGlubmVyJykuaGlkZSgpOworCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCisKKy8qCistLS0KKworc2NyaXB0OiBGb3JtLlJlcXVlc3QuanMKKworbmFtZTogRm9ybS5SZXF1ZXN0CisKK2Rlc2NyaXB0aW9uOiBIYW5kbGVzIHRoZSBiYXNpYyBmdW5jdGlvbmFsaXR5IG9mIHN1Ym1pdHRpbmcgYSBmb3JtIGFuZCB1cGRhdGluZyBhIGRvbSBlbGVtZW50IHdpdGggdGhlIHJlc3VsdC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9SZXF1ZXN0LkhUTUwKKyAgLSAvQ2xhc3MuQmluZHMKKyAgLSAvQ2xhc3MuT2NjbHVkZQorICAtIC9TcGlubmVyCisgIC0gL1N0cmluZy5RdWVyeVN0cmluZworICAtIC9FbGVtZW50LkRlbGVnYXRpb24KKworcHJvdmlkZXM6IFtGb3JtLlJlcXVlc3RdCisKKy4uLgorKi8KKworaWYgKCF3aW5kb3cuRm9ybSkgd2luZG93LkZvcm0gPSB7fTsKKworKGZ1bmN0aW9uKCl7CisKKwlGb3JtLlJlcXVlc3QgPSBuZXcgQ2xhc3MoeworCisJCUJpbmRzOiBbJ29uU3VibWl0JywgJ29uRm9ybVZhbGlkYXRlJ10sCisKKwkJSW1wbGVtZW50czogW09wdGlvbnMsIEV2ZW50cywgQ2xhc3MuT2NjbHVkZV0sCisKKwkJb3B0aW9uczogey8qCisJCQlvbkZhaWx1cmU6IGZ1bmN0aW9uKCl7fSwKKwkJCW9uU3VjY2VzczogZnVuY3Rpb24oKXt9LCAvLyBhbGlhc2VkIHRvIG9uQ29tcGxldGUsCisJCQlvblNlbmQ6IGZ1bmN0aW9uKCl7fSovCisJCQlyZXF1ZXN0T3B0aW9uczogeworCQkJCWV2YWxTY3JpcHRzOiB0cnVlLAorCQkJCXVzZVNwaW5uZXI6IHRydWUsCisJCQkJZW11bGF0aW9uOiBmYWxzZSwKKwkJCQlsaW5rOiAnaWdub3JlJworCQkJfSwKKwkJCXNlbmRCdXR0b25DbGlja2VkOiB0cnVlLAorCQkJZXh0cmFEYXRhOiB7fSwKKwkJCXJlc2V0Rm9ybTogdHJ1ZQorCQl9LAorCisJCXByb3BlcnR5OiAnZm9ybS5yZXF1ZXN0JywKKworCQlpbml0aWFsaXplOiBmdW5jdGlvbihmb3JtLCB0YXJnZXQsIG9wdGlvbnMpeworCQkJdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuaWQoZm9ybSk7CisJCQlpZiAodGhpcy5vY2NsdWRlKCkpIHJldHVybiB0aGlzLm9jY2x1ZGVkOworCQkJdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpCisJCQkJLnNldFRhcmdldCh0YXJnZXQpCisJCQkJLmF0dGFjaCgpOworCQl9LAorCisJCXNldFRhcmdldDogZnVuY3Rpb24odGFyZ2V0KXsKKwkJCXRoaXMudGFyZ2V0ID0gZG9jdW1lbnQuaWQodGFyZ2V0KTsKKwkJCWlmICghdGhpcy5yZXF1ZXN0KXsKKwkJCQl0aGlzLm1ha2VSZXF1ZXN0KCk7CisJCQl9IGVsc2UgeworCQkJCXRoaXMucmVxdWVzdC5zZXRPcHRpb25zKHsKKwkJCQkJdXBkYXRlOiB0aGlzLnRhcmdldAorCQkJCX0pOworCQkJfQorCQkJcmV0dXJuIHRoaXM7CisJCX0sCisKKwkJdG9FbGVtZW50OiBmdW5jdGlvbigpeworCQkJcmV0dXJuIHRoaXMuZWxlbWVudDsKKwkJfSwKKworCQltYWtlUmVxdWVzdDogZnVuY3Rpb24oKXsKKwkJCXZhciBzZWxmID0gdGhpczsKKwkJCXRoaXMucmVxdWVzdCA9IG5ldyBSZXF1ZXN0LkhUTUwoT2JqZWN0Lm1lcmdlKHsKKwkJCQkJdXBkYXRlOiB0aGlzLnRhcmdldCwKKwkJCQkJZW11bGF0aW9uOiBmYWxzZSwKKwkJCQkJc3Bpbm5lclRhcmdldDogdGhpcy5lbGVtZW50LAorCQkJCQltZXRob2Q6IHRoaXMuZWxlbWVudC5nZXQoJ21ldGhvZCcpIHx8ICdwb3N0JworCQkJfSwgdGhpcy5vcHRpb25zLnJlcXVlc3RPcHRpb25zKSkuYWRkRXZlbnRzKHsKKwkJCQlzdWNjZXNzOiBmdW5jdGlvbih0cmVlLCBlbGVtZW50cywgaHRtbCwgamF2YXNjcmlwdCl7CisJCQkJCVsnY29tcGxldGUnLCAnc3VjY2VzcyddLmVhY2goZnVuY3Rpb24oZXZ0KXsKKwkJCQkJCXNlbGYuZmlyZUV2ZW50KGV2dCwgW3NlbGYudGFyZ2V0LCB0cmVlLCBlbGVtZW50cywgaHRtbCwgamF2YXNjcmlwdF0pOworCQkJCQl9KTsKKwkJCQl9LAorCQkJCWZhaWx1cmU6IGZ1bmN0aW9uKCl7CisJCQkJCXNlbGYuZmlyZUV2ZW50KCdjb21wbGV0ZScsIGFyZ3VtZW50cykuZmlyZUV2ZW50KCdmYWlsdXJlJywgYXJndW1lbnRzKTsKKwkJCQl9LAorCQkJCWV4Y2VwdGlvbjogZnVuY3Rpb24oKXsKKwkJCQkJc2VsZi5maXJlRXZlbnQoJ2ZhaWx1cmUnLCBhcmd1bWVudHMpOworCQkJCX0KKwkJCX0pOworCQkJcmV0dXJuIHRoaXMuYXR0YWNoUmVzZXQoKTsKKwkJfSwKKworCQlhdHRhY2hSZXNldDogZnVuY3Rpb24oKXsKKwkJCWlmICghdGhpcy5vcHRpb25zLnJlc2V0Rm9ybSkgcmV0dXJuIHRoaXM7CisJCQl0aGlzLnJlcXVlc3QuYWRkRXZlbnQoJ3N1Y2Nlc3MnLCBmdW5jdGlvbigpeworCQkJCUZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXsKKwkJCQkJdGhpcy5lbGVtZW50LnJlc2V0KCk7CisJCQkJfS5iaW5kKHRoaXMpKTsKKwkJCQlpZiAod2luZG93Lk92ZXJUZXh0KSBPdmVyVGV4dC51cGRhdGUoKTsKKwkJCX0uYmluZCh0aGlzKSk7CisJCQlyZXR1cm4gdGhpczsKKwkJfSwKKworCQlhdHRhY2g6IGZ1bmN0aW9uKGF0dGFjaCl7CisJCQl2YXIgbWV0aG9kID0gKGF0dGFjaCAhPSBmYWxzZSkgPyAnYWRkRXZlbnQnIDogJ3JlbW92ZUV2ZW50JzsKKwkJCXRoaXMuZWxlbWVudFttZXRob2RdKCdjbGljazpyZWxheShidXR0b24sIGlucHV0W3R5cGU9c3VibWl0XSknLCB0aGlzLnNhdmVDbGlja2VkQnV0dG9uLmJpbmQodGhpcykpOworCisJCQl2YXIgZnYgPSB0aGlzLmVsZW1lbnQucmV0cmlldmUoJ3ZhbGlkYXRvcicpOworCQkJaWYgKGZ2KSBmdlttZXRob2RdKCdvbkZvcm1WYWxpZGF0ZScsIHRoaXMub25Gb3JtVmFsaWRhdGUpOworCQkJZWxzZSB0aGlzLmVsZW1lbnRbbWV0aG9kXSgnc3VibWl0JywgdGhpcy5vblN1Ym1pdCk7CisKKwkJCXJldHVybiB0aGlzOworCQl9LAorCisJCWRldGFjaDogZnVuY3Rpb24oKXsKKwkJCXJldHVybiB0aGlzLmF0dGFjaChmYWxzZSk7CisJCX0sCisKKwkJLy9wdWJsaWMgbWV0aG9kCisJCWVuYWJsZTogZnVuY3Rpb24oKXsKKwkJCXJldHVybiB0aGlzLmF0dGFjaCgpOworCQl9LAorCisJCS8vcHVibGljIG1ldGhvZAorCQlkaXNhYmxlOiBmdW5jdGlvbigpeworCQkJcmV0dXJuIHRoaXMuZGV0YWNoKCk7CisJCX0sCisKKwkJb25Gb3JtVmFsaWRhdGU6IGZ1bmN0aW9uKHZhbGlkLCBmb3JtLCBldmVudCl7CisJCQkvL2lmIHRoZXJlJ3Mgbm8gZXZlbnQsIHRoZW4gdGhpcyB3YXNuJ3QgYSBzdWJtaXQgZXZlbnQKKwkJCWlmICghZXZlbnQpIHJldHVybjsKKwkJCXZhciBmdiA9IHRoaXMuZWxlbWVudC5yZXRyaWV2ZSgndmFsaWRhdG9yJyk7CisJCQlpZiAodmFsaWQgfHwgKGZ2ICYmICFmdi5vcHRpb25zLnN0b3BPbkZhaWx1cmUpKXsKKwkJCQlldmVudC5zdG9wKCk7CisJCQkJdGhpcy5zZW5kKCk7CisJCQl9CisJCX0sCisKKwkJb25TdWJtaXQ6IGZ1bmN0aW9uKGV2ZW50KXsKKwkJCXZhciBmdiA9IHRoaXMuZWxlbWVudC5yZXRyaWV2ZSgndmFsaWRhdG9yJyk7CisJCQlpZiAoZnYpeworCQkJCS8vZm9ybSB2YWxpZGF0b3Igd2FzIGNyZWF0ZWQgYWZ0ZXIgRm9ybS5SZXF1ZXN0CisJCQkJdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50KCdzdWJtaXQnLCB0aGlzLm9uU3VibWl0KTsKKwkJCQlmdi5hZGRFdmVudCgnb25Gb3JtVmFsaWRhdGUnLCB0aGlzLm9uRm9ybVZhbGlkYXRlKTsKKwkJCQl0aGlzLmVsZW1lbnQudmFsaWRhdGUoKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlpZiAoZXZlbnQpIGV2ZW50LnN0b3AoKTsKKwkJCXRoaXMuc2VuZCgpOworCQl9LAorCisJCXNhdmVDbGlja2VkQnV0dG9uOiBmdW5jdGlvbihldmVudCwgdGFyZ2V0KXsKKwkJCXZhciB0YXJnZXROYW1lID0gdGFyZ2V0LmdldCgnbmFtZScpOworCQkJaWYgKCF0YXJnZXROYW1lIHx8ICF0aGlzLm9wdGlvbnMuc2VuZEJ1dHRvbkNsaWNrZWQpIHJldHVybjsKKwkJCXRoaXMub3B0aW9ucy5leHRyYURhdGFbdGFyZ2V0TmFtZV0gPSB0YXJnZXQuZ2V0KCd2YWx1ZScpIHx8IHRydWU7CisJCQl0aGlzLmNsaWNrZWRDbGVhbmVyID0gZnVuY3Rpb24oKXsKKwkJCQlkZWxldGUgdGhpcy5vcHRpb25zLmV4dHJhRGF0YVt0YXJnZXROYW1lXTsKKwkJCQl0aGlzLmNsaWNrZWRDbGVhbmVyID0gZnVuY3Rpb24oKXt9OworCQkJfS5iaW5kKHRoaXMpOworCQl9LAorCisJCWNsaWNrZWRDbGVhbmVyOiBmdW5jdGlvbigpe30sCisKKwkJc2VuZDogZnVuY3Rpb24oKXsKKwkJCXZhciBzdHIgPSB0aGlzLmVsZW1lbnQudG9RdWVyeVN0cmluZygpLnRyaW0oKSwKKwkJCQlkYXRhID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcodGhpcy5vcHRpb25zLmV4dHJhRGF0YSk7CisKKwkJCWlmIChzdHIpIHN0ciArPSAiJiIgKyBkYXRhOworCQkJZWxzZSBzdHIgPSBkYXRhOworCisJCQl0aGlzLmZpcmVFdmVudCgnc2VuZCcsIFt0aGlzLmVsZW1lbnQsIHN0ci5wYXJzZVF1ZXJ5U3RyaW5nKCldKTsKKwkJCXRoaXMucmVxdWVzdC5zZW5kKHsKKwkJCQlkYXRhOiBzdHIsCisJCQkJdXJsOiB0aGlzLm9wdGlvbnMucmVxdWVzdE9wdGlvbnMudXJsIHx8IHRoaXMuZWxlbWVudC5nZXQoJ2FjdGlvbicpCisJCQl9KTsKKwkJCXRoaXMuY2xpY2tlZENsZWFuZXIoKTsKKwkJCXJldHVybiB0aGlzOworCQl9CisKKwl9KTsKKworCUVsZW1lbnQuaW1wbGVtZW50KCdmb3JtVXBkYXRlJywgZnVuY3Rpb24odXBkYXRlLCBvcHRpb25zKXsKKwkJdmFyIGZxID0gdGhpcy5yZXRyaWV2ZSgnZm9ybS5yZXF1ZXN0Jyk7CisJCWlmICghZnEpIHsKKwkJCWZxID0gbmV3IEZvcm0uUmVxdWVzdCh0aGlzLCB1cGRhdGUsIG9wdGlvbnMpOworCQl9IGVsc2UgeworCQkJaWYgKHVwZGF0ZSkgZnEuc2V0VGFyZ2V0KHVwZGF0ZSk7CisJCQlpZiAob3B0aW9ucykgZnEuc2V0T3B0aW9ucyhvcHRpb25zKS5tYWtlUmVxdWVzdCgpOworCQl9CisJCWZxLnNlbmQoKTsKKwkJcmV0dXJuIHRoaXM7CisJfSk7CisKK30pKCk7CisKKworLyoKKy0tLQorCitzY3JpcHQ6IEZ4LlJldmVhbC5qcworCituYW1lOiBGeC5SZXZlYWwKKworZGVzY3JpcHRpb246IERlZmluZXMgRnguUmV2ZWFsLCBhIGNsYXNzIHRoYXQgc2hvd3MgYW5kIGhpZGVzIGVsZW1lbnRzIHdpdGggYSB0cmFuc2l0aW9uLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSBDb3JlL0Z4Lk1vcnBoCisgIC0gL0VsZW1lbnQuU2hvcnRjdXRzCisgIC0gL0VsZW1lbnQuTWVhc3VyZQorCitwcm92aWRlczogW0Z4LlJldmVhbF0KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKworCit2YXIgaGlkZVRoZXNlT2YgPSBmdW5jdGlvbihvYmplY3QpeworCXZhciBoaWRlVGhlc2UgPSBvYmplY3Qub3B0aW9ucy5oaWRlSW5wdXRzOworCWlmICh3aW5kb3cuT3ZlclRleHQpeworCQl2YXIgb3RDbGFzc2VzID0gW251bGxdOworCQlPdmVyVGV4dC5lYWNoKGZ1bmN0aW9uKG90KXsKKwkJCW90Q2xhc3Nlcy5pbmNsdWRlKCcuJyArIG90Lm9wdGlvbnMubGFiZWxDbGFzcyk7CisJCX0pOworCQlpZiAob3RDbGFzc2VzKSBoaWRlVGhlc2UgKz0gb3RDbGFzc2VzLmpvaW4oJywgJyk7CisJfQorCXJldHVybiAoaGlkZVRoZXNlKSA/IG9iamVjdC5lbGVtZW50LmdldEVsZW1lbnRzKGhpZGVUaGVzZSkgOiBudWxsOworfTsKKworCitGeC5SZXZlYWwgPSBuZXcgQ2xhc3MoeworCisJRXh0ZW5kczogRnguTW9ycGgsCisKKwlvcHRpb25zOiB7LyoKKwkJb25TaG93OiBmdW5jdGlvbih0aGlzRWxlbWVudCl7fSwKKwkJb25IaWRlOiBmdW5jdGlvbih0aGlzRWxlbWVudCl7fSwKKwkJb25Db21wbGV0ZTogZnVuY3Rpb24odGhpc0VsZW1lbnQpe30sCisJCWhlaWdodE92ZXJyaWRlOiBudWxsLAorCQl3aWR0aE92ZXJyaWRlOiBudWxsLCovCisJCWxpbms6ICdjYW5jZWwnLAorCQlzdHlsZXM6IFsncGFkZGluZycsICdib3JkZXInLCAnbWFyZ2luJ10sCisJCXRyYW5zaXRpb25PcGFjaXR5OiAhQnJvd3Nlci5pZTYsCisJCW1vZGU6ICd2ZXJ0aWNhbCcsCisJCWRpc3BsYXk6IGZ1bmN0aW9uKCl7CisJCQlyZXR1cm4gdGhpcy5lbGVtZW50LmdldCgndGFnJykgIT0gJ3RyJyA/ICdibG9jaycgOiAndGFibGUtcm93JzsKKwkJfSwKKwkJb3BhY2l0eTogMSwKKwkJaGlkZUlucHV0czogQnJvd3Nlci5pZSA/ICdzZWxlY3QsIGlucHV0LCB0ZXh0YXJlYSwgb2JqZWN0LCBlbWJlZCcgOiBudWxsCisJfSwKKworCWRpc3NvbHZlOiBmdW5jdGlvbigpeworCQlpZiAoIXRoaXMuaGlkaW5nICYmICF0aGlzLnNob3dpbmcpeworCQkJaWYgKHRoaXMuZWxlbWVudC5nZXRTdHlsZSgnZGlzcGxheScpICE9ICdub25lJyl7CisJCQkJdGhpcy5oaWRpbmcgPSB0cnVlOworCQkJCXRoaXMuc2hvd2luZyA9IGZhbHNlOworCQkJCXRoaXMuaGlkZGVuID0gdHJ1ZTsKKwkJCQl0aGlzLmNzc1RleHQgPSB0aGlzLmVsZW1lbnQuc3R5bGUuY3NzVGV4dDsKKworCQkJCXZhciBzdGFydFN0eWxlcyA9IHRoaXMuZWxlbWVudC5nZXRDb21wdXRlZFNpemUoeworCQkJCQlzdHlsZXM6IHRoaXMub3B0aW9ucy5zdHlsZXMsCisJCQkJCW1vZGU6IHRoaXMub3B0aW9ucy5tb2RlCisJCQkJfSk7CisJCQkJaWYgKHRoaXMub3B0aW9ucy50cmFuc2l0aW9uT3BhY2l0eSkgc3RhcnRTdHlsZXMub3BhY2l0eSA9IHRoaXMub3B0aW9ucy5vcGFjaXR5OworCisJCQkJdmFyIHplcm8gPSB7fTsKKwkJCQlPYmplY3QuZWFjaChzdGFydFN0eWxlcywgZnVuY3Rpb24oc3R5bGUsIG5hbWUpeworCQkJCQl6ZXJvW25hbWVdID0gW3N0eWxlLCAwXTsKKwkJCQl9KTsKKworCQkJCXRoaXMuZWxlbWVudC5zZXRTdHlsZXMoeworCQkJCQlkaXNwbGF5OiBGdW5jdGlvbi5mcm9tKHRoaXMub3B0aW9ucy5kaXNwbGF5KS5jYWxsKHRoaXMpLAorCQkJCQlvdmVyZmxvdzogJ2hpZGRlbicKKwkJCQl9KTsKKworCQkJCXZhciBoaWRlVGhlc2UgPSBoaWRlVGhlc2VPZih0aGlzKTsKKwkJCQlpZiAoaGlkZVRoZXNlKSBoaWRlVGhlc2Uuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7CisKKwkJCQl0aGlzLiRjaGFpbi51bnNoaWZ0KGZ1bmN0aW9uKCl7CisJCQkJCWlmICh0aGlzLmhpZGRlbil7CisJCQkJCQl0aGlzLmhpZGluZyA9IGZhbHNlOworCQkJCQkJdGhpcy5lbGVtZW50LnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzc1RleHQ7CisJCQkJCQl0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpOworCQkJCQkJaWYgKGhpZGVUaGVzZSkgaGlkZVRoZXNlLnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTsKKwkJCQkJfQorCQkJCQl0aGlzLmZpcmVFdmVudCgnaGlkZScsIHRoaXMuZWxlbWVudCk7CisJCQkJCXRoaXMuY2FsbENoYWluKCk7CisJCQkJfS5iaW5kKHRoaXMpKTsKKworCQkJCXRoaXMuc3RhcnQoemVybyk7CisJCQl9IGVsc2UgeworCQkJCXRoaXMuY2FsbENoYWluLmRlbGF5KDEwLCB0aGlzKTsKKwkJCQl0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCB0aGlzLmVsZW1lbnQpOworCQkJCXRoaXMuZmlyZUV2ZW50KCdoaWRlJywgdGhpcy5lbGVtZW50KTsKKwkJCX0KKwkJfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMubGluayA9PSAnY2hhaW4nKXsKKwkJCXRoaXMuY2hhaW4odGhpcy5kaXNzb2x2ZS5iaW5kKHRoaXMpKTsKKwkJfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMubGluayA9PSAnY2FuY2VsJyAmJiAhdGhpcy5oaWRpbmcpeworCQkJdGhpcy5jYW5jZWwoKTsKKwkJCXRoaXMuZGlzc29sdmUoKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmV2ZWFsOiBmdW5jdGlvbigpeworCQlpZiAoIXRoaXMuc2hvd2luZyAmJiAhdGhpcy5oaWRpbmcpeworCQkJaWYgKHRoaXMuZWxlbWVudC5nZXRTdHlsZSgnZGlzcGxheScpID09ICdub25lJyl7CisJCQkJdGhpcy5oaWRpbmcgPSBmYWxzZTsKKwkJCQl0aGlzLnNob3dpbmcgPSB0cnVlOworCQkJCXRoaXMuaGlkZGVuID0gZmFsc2U7CisJCQkJdGhpcy5jc3NUZXh0ID0gdGhpcy5lbGVtZW50LnN0eWxlLmNzc1RleHQ7CisKKwkJCQl2YXIgc3RhcnRTdHlsZXM7CisJCQkJdGhpcy5lbGVtZW50Lm1lYXN1cmUoZnVuY3Rpb24oKXsKKwkJCQkJc3RhcnRTdHlsZXMgPSB0aGlzLmVsZW1lbnQuZ2V0Q29tcHV0ZWRTaXplKHsKKwkJCQkJCXN0eWxlczogdGhpcy5vcHRpb25zLnN0eWxlcywKKwkJCQkJCW1vZGU6IHRoaXMub3B0aW9ucy5tb2RlCisJCQkJCX0pOworCQkJCX0uYmluZCh0aGlzKSk7CisJCQkJaWYgKHRoaXMub3B0aW9ucy5oZWlnaHRPdmVycmlkZSAhPSBudWxsKSBzdGFydFN0eWxlcy5oZWlnaHQgPSB0aGlzLm9wdGlvbnMuaGVpZ2h0T3ZlcnJpZGUudG9JbnQoKTsKKwkJCQlpZiAodGhpcy5vcHRpb25zLndpZHRoT3ZlcnJpZGUgIT0gbnVsbCkgc3RhcnRTdHlsZXMud2lkdGggPSB0aGlzLm9wdGlvbnMud2lkdGhPdmVycmlkZS50b0ludCgpOworCQkJCWlmICh0aGlzLm9wdGlvbnMudHJhbnNpdGlvbk9wYWNpdHkpeworCQkJCQl0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ29wYWNpdHknLCAwKTsKKwkJCQkJc3RhcnRTdHlsZXMub3BhY2l0eSA9IHRoaXMub3B0aW9ucy5vcGFjaXR5OworCQkJCX0KKworCQkJCXZhciB6ZXJvID0geworCQkJCQloZWlnaHQ6IDAsCisJCQkJCWRpc3BsYXk6IEZ1bmN0aW9uLmZyb20odGhpcy5vcHRpb25zLmRpc3BsYXkpLmNhbGwodGhpcykKKwkJCQl9OworCQkJCU9iamVjdC5lYWNoKHN0YXJ0U3R5bGVzLCBmdW5jdGlvbihzdHlsZSwgbmFtZSl7CisJCQkJCXplcm9bbmFtZV0gPSAwOworCQkJCX0pOworCQkJCXplcm8ub3ZlcmZsb3cgPSAnaGlkZGVuJzsKKworCQkJCXRoaXMuZWxlbWVudC5zZXRTdHlsZXMoemVybyk7CisKKwkJCQl2YXIgaGlkZVRoZXNlID0gaGlkZVRoZXNlT2YodGhpcyk7CisJCQkJaWYgKGhpZGVUaGVzZSkgaGlkZVRoZXNlLnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpOworCisJCQkJdGhpcy4kY2hhaW4udW5zaGlmdChmdW5jdGlvbigpeworCQkJCQl0aGlzLmVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzVGV4dDsKKwkJCQkJdGhpcy5lbGVtZW50LnNldFN0eWxlKCdkaXNwbGF5JywgRnVuY3Rpb24uZnJvbSh0aGlzLm9wdGlvbnMuZGlzcGxheSkuY2FsbCh0aGlzKSk7CisJCQkJCWlmICghdGhpcy5oaWRkZW4pIHRoaXMuc2hvd2luZyA9IGZhbHNlOworCQkJCQlpZiAoaGlkZVRoZXNlKSBoaWRlVGhlc2Uuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpOworCQkJCQl0aGlzLmNhbGxDaGFpbigpOworCQkJCQl0aGlzLmZpcmVFdmVudCgnc2hvdycsIHRoaXMuZWxlbWVudCk7CisJCQkJfS5iaW5kKHRoaXMpKTsKKworCQkJCXRoaXMuc3RhcnQoc3RhcnRTdHlsZXMpOworCQkJfSBlbHNlIHsKKwkJCQl0aGlzLmNhbGxDaGFpbigpOworCQkJCXRoaXMuZmlyZUV2ZW50KCdjb21wbGV0ZScsIHRoaXMuZWxlbWVudCk7CisJCQkJdGhpcy5maXJlRXZlbnQoJ3Nob3cnLCB0aGlzLmVsZW1lbnQpOworCQkJfQorCQl9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5saW5rID09ICdjaGFpbicpeworCQkJdGhpcy5jaGFpbih0aGlzLnJldmVhbC5iaW5kKHRoaXMpKTsKKwkJfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMubGluayA9PSAnY2FuY2VsJyAmJiAhdGhpcy5zaG93aW5nKXsKKwkJCXRoaXMuY2FuY2VsKCk7CisJCQl0aGlzLnJldmVhbCgpOworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwl0b2dnbGU6IGZ1bmN0aW9uKCl7CisJCWlmICh0aGlzLmVsZW1lbnQuZ2V0U3R5bGUoJ2Rpc3BsYXknKSA9PSAnbm9uZScpeworCQkJdGhpcy5yZXZlYWwoKTsKKwkJfSBlbHNlIHsKKwkJCXRoaXMuZGlzc29sdmUoKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJY2FuY2VsOiBmdW5jdGlvbigpeworCQl0aGlzLnBhcmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCQlpZiAodGhpcy5jc3NUZXh0ICE9IG51bGwpIHRoaXMuZWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gdGhpcy5jc3NUZXh0OworCQl0aGlzLmhpZGluZyA9IGZhbHNlOworCQl0aGlzLnNob3dpbmcgPSBmYWxzZTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKworRWxlbWVudC5Qcm9wZXJ0aWVzLnJldmVhbCA9IHsKKworCXNldDogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXRoaXMuZ2V0KCdyZXZlYWwnKS5jYW5jZWwoKS5zZXRPcHRpb25zKG9wdGlvbnMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZ2V0OiBmdW5jdGlvbigpeworCQl2YXIgcmV2ZWFsID0gdGhpcy5yZXRyaWV2ZSgncmV2ZWFsJyk7CisJCWlmICghcmV2ZWFsKXsKKwkJCXJldmVhbCA9IG5ldyBGeC5SZXZlYWwodGhpcyk7CisJCQl0aGlzLnN0b3JlKCdyZXZlYWwnLCByZXZlYWwpOworCQl9CisJCXJldHVybiByZXZlYWw7CisJfQorCit9OworCitFbGVtZW50LlByb3BlcnRpZXMuZGlzc29sdmUgPSBFbGVtZW50LlByb3BlcnRpZXMucmV2ZWFsOworCitFbGVtZW50LmltcGxlbWVudCh7CisKKwlyZXZlYWw6IGZ1bmN0aW9uKG9wdGlvbnMpeworCQl0aGlzLmdldCgncmV2ZWFsJykuc2V0T3B0aW9ucyhvcHRpb25zKS5yZXZlYWwoKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWRpc3NvbHZlOiBmdW5jdGlvbihvcHRpb25zKXsKKwkJdGhpcy5nZXQoJ3JldmVhbCcpLnNldE9wdGlvbnMob3B0aW9ucykuZGlzc29sdmUoKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCW5peDogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXZhciBwYXJhbXMgPSBBcnJheS5saW5rKGFyZ3VtZW50cywge2Rlc3Ryb3k6IFR5cGUuaXNCb29sZWFuLCBvcHRpb25zOiBUeXBlLmlzT2JqZWN0fSk7CisJCXRoaXMuZ2V0KCdyZXZlYWwnKS5zZXRPcHRpb25zKG9wdGlvbnMpLmRpc3NvbHZlKCkuY2hhaW4oZnVuY3Rpb24oKXsKKwkJCXRoaXNbcGFyYW1zLmRlc3Ryb3kgPyAnZGVzdHJveScgOiAnZGlzcG9zZSddKCk7CisJCX0uYmluZCh0aGlzKSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwl3aW5rOiBmdW5jdGlvbigpeworCQl2YXIgcGFyYW1zID0gQXJyYXkubGluayhhcmd1bWVudHMsIHtkdXJhdGlvbjogVHlwZS5pc051bWJlciwgb3B0aW9uczogVHlwZS5pc09iamVjdH0pOworCQl2YXIgcmV2ZWFsID0gdGhpcy5nZXQoJ3JldmVhbCcpLnNldE9wdGlvbnMocGFyYW1zLm9wdGlvbnMpOworCQlyZXZlYWwucmV2ZWFsKCkuY2hhaW4oZnVuY3Rpb24oKXsKKwkJCShmdW5jdGlvbigpeworCQkJCXJldmVhbC5kaXNzb2x2ZSgpOworCQkJfSkuZGVsYXkocGFyYW1zLmR1cmF0aW9uIHx8IDIwMDApOworCQl9KTsKKwl9CisKK30pOworCit9KSgpOworCisKKy8qCistLS0KKworc2NyaXB0OiBGb3JtLlJlcXVlc3QuQXBwZW5kLmpzCisKK25hbWU6IEZvcm0uUmVxdWVzdC5BcHBlbmQKKworZGVzY3JpcHRpb246IEhhbmRsZXMgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgb2Ygc3VibWl0dGluZyBhIGZvcm0gYW5kIHVwZGF0aW5nIGEgZG9tIGVsZW1lbnQgd2l0aCB0aGUgcmVzdWx0LiBUaGUgcmVzdWx0IGlzIGFwcGVuZGVkIHRvIHRoZSBET00gZWxlbWVudCBpbnN0ZWFkIG9mIHJlcGxhY2luZyBpdHMgY29udGVudHMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisKK3JlcXVpcmVzOgorICAtIC9Gb3JtLlJlcXVlc3QKKyAgLSAvRnguUmV2ZWFsCisgIC0gL0VsZW1lbnRzLmZyb20KKworcHJvdmlkZXM6IFtGb3JtLlJlcXVlc3QuQXBwZW5kXQorCisuLi4KKyovCisKK0Zvcm0uUmVxdWVzdC5BcHBlbmQgPSBuZXcgQ2xhc3MoeworCisJRXh0ZW5kczogRm9ybS5SZXF1ZXN0LAorCisJb3B0aW9uczogeworCQkvL29uQmVmb3JlRWZmZWN0OiBmdW5jdGlvbigpe30sCisJCXVzZVJldmVhbDogdHJ1ZSwKKwkJcmV2ZWFsT3B0aW9uczoge30sCisJCWluamVjdDogJ2JvdHRvbScKKwl9LAorCisJbWFrZVJlcXVlc3Q6IGZ1bmN0aW9uKCl7CisJCXRoaXMucmVxdWVzdCA9IG5ldyBSZXF1ZXN0LkhUTUwoT2JqZWN0Lm1lcmdlKHsKKwkJCQl1cmw6IHRoaXMuZWxlbWVudC5nZXQoJ2FjdGlvbicpLAorCQkJCW1ldGhvZDogdGhpcy5lbGVtZW50LmdldCgnbWV0aG9kJykgfHwgJ3Bvc3QnLAorCQkJCXNwaW5uZXJUYXJnZXQ6IHRoaXMuZWxlbWVudAorCQkJfSwgdGhpcy5vcHRpb25zLnJlcXVlc3RPcHRpb25zLCB7CisJCQkJZXZhbFNjcmlwdHM6IGZhbHNlCisJCQl9KQorCQkpLmFkZEV2ZW50cyh7CisJCQlzdWNjZXNzOiBmdW5jdGlvbih0cmVlLCBlbGVtZW50cywgaHRtbCwgamF2YXNjcmlwdCl7CisJCQkJdmFyIGNvbnRhaW5lcjsKKwkJCQl2YXIga2lkcyA9IEVsZW1lbnRzLmZyb20oaHRtbCk7CisJCQkJaWYgKGtpZHMubGVuZ3RoID09IDEpeworCQkJCQljb250YWluZXIgPSBraWRzWzBdOworCQkJCX0gZWxzZSB7CisJCQkJCSBjb250YWluZXIgPSBuZXcgRWxlbWVudCgnZGl2JywgeworCQkJCQkJc3R5bGVzOiB7CisJCQkJCQkJZGlzcGxheTogJ25vbmUnCisJCQkJCQl9CisJCQkJCX0pLmFkb3B0KGtpZHMpOworCQkJCX0KKwkJCQljb250YWluZXIuaW5qZWN0KHRoaXMudGFyZ2V0LCB0aGlzLm9wdGlvbnMuaW5qZWN0KTsKKwkJCQlpZiAodGhpcy5vcHRpb25zLnJlcXVlc3RPcHRpb25zLmV2YWxTY3JpcHRzKSBCcm93c2VyLmV4ZWMoamF2YXNjcmlwdCk7CisJCQkJdGhpcy5maXJlRXZlbnQoJ2JlZm9yZUVmZmVjdCcsIGNvbnRhaW5lcik7CisJCQkJdmFyIGZpbmlzaCA9IGZ1bmN0aW9uKCl7CisJCQkJCXRoaXMuZmlyZUV2ZW50KCdzdWNjZXNzJywgW2NvbnRhaW5lciwgdGhpcy50YXJnZXQsIHRyZWUsIGVsZW1lbnRzLCBodG1sLCBqYXZhc2NyaXB0XSk7CisJCQkJfS5iaW5kKHRoaXMpOworCQkJCWlmICh0aGlzLm9wdGlvbnMudXNlUmV2ZWFsKXsKKwkJCQkJY29udGFpbmVyLnNldCgncmV2ZWFsJywgdGhpcy5vcHRpb25zLnJldmVhbE9wdGlvbnMpLmdldCgncmV2ZWFsJykuY2hhaW4oZmluaXNoKTsKKwkJCQkJY29udGFpbmVyLnJldmVhbCgpOworCQkJCX0gZWxzZSB7CisJCQkJCWZpbmlzaCgpOworCQkJCX0KKwkJCX0uYmluZCh0aGlzKSwKKwkJCWZhaWx1cmU6IGZ1bmN0aW9uKHhocil7CisJCQkJdGhpcy5maXJlRXZlbnQoJ2ZhaWx1cmUnLCB4aHIpOworCQkJfS5iaW5kKHRoaXMpCisJCX0pOworCQl0aGlzLmF0dGFjaFJlc2V0KCk7CisJfQorCit9KTsKKworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5lbi1VUy5Gb3JtLlZhbGlkYXRvcgorCitkZXNjcmlwdGlvbjogRm9ybSBWYWxpZGF0b3IgbWVzc2FnZXMgZm9yIEVuZ2xpc2guCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZW4tVVMuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZW4tVVMnLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4nLAorCW1pbkxlbmd0aDogJ1BsZWFzZSBlbnRlciBhdCBsZWFzdCB7bWluTGVuZ3RofSBjaGFyYWN0ZXJzICh5b3UgZW50ZXJlZCB7bGVuZ3RofSBjaGFyYWN0ZXJzKS4nLAorCW1heExlbmd0aDogJ1BsZWFzZSBlbnRlciBubyBtb3JlIHRoYW4ge21heExlbmd0aH0gY2hhcmFjdGVycyAoeW91IGVudGVyZWQge2xlbmd0aH0gY2hhcmFjdGVycykuJywKKwlpbnRlZ2VyOiAnUGxlYXNlIGVudGVyIGFuIGludGVnZXIgaW4gdGhpcyBmaWVsZC4gTnVtYmVycyB3aXRoIGRlY2ltYWxzIChlLmcuIDEuMjUpIGFyZSBub3QgcGVybWl0dGVkLicsCisJbnVtZXJpYzogJ1BsZWFzZSBlbnRlciBvbmx5IG51bWVyaWMgdmFsdWVzIGluIHRoaXMgZmllbGQgKGkuZS4gIjEiIG9yICIxLjEiIG9yICItMSIgb3IgIi0xLjEiKS4nLAorCWRpZ2l0czogJ1BsZWFzZSB1c2UgbnVtYmVycyBhbmQgcHVuY3R1YXRpb24gb25seSBpbiB0aGlzIGZpZWxkIChmb3IgZXhhbXBsZSwgYSBwaG9uZSBudW1iZXIgd2l0aCBkYXNoZXMgb3IgZG90cyBpcyBwZXJtaXR0ZWQpLicsCisJYWxwaGE6ICdQbGVhc2UgdXNlIG9ubHkgbGV0dGVycyAoYS16KSB3aXRoaW4gdGhpcyBmaWVsZC4gTm8gc3BhY2VzIG9yIG90aGVyIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQuJywKKwlhbHBoYW51bTogJ1BsZWFzZSB1c2Ugb25seSBsZXR0ZXJzIChhLXopIG9yIG51bWJlcnMgKDAtOSkgaW4gdGhpcyBmaWVsZC4gTm8gc3BhY2VzIG9yIG90aGVyIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQuJywKKwlkYXRlU3VjaEFzOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgZGF0ZSBzdWNoIGFzIHtkYXRlfScsCisJZGF0ZUluRm9ybWF0TURZOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgZGF0ZSBzdWNoIGFzIE1NL0REL1lZWVkgKGkuZS4gIjEyLzMxLzE5OTkiKScsCisJZW1haWw6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLiBGb3IgZXhhbXBsZSAiZnJlZEBkb21haW4uY29tIi4nLAorCXVybDogJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFVSTCBzdWNoIGFzIGh0dHA6Ly93d3cuZXhhbXBsZS5jb20uJywKKwljdXJyZW5jeURvbGxhcjogJ1BsZWFzZSBlbnRlciBhIHZhbGlkICQgYW1vdW50LiBGb3IgZXhhbXBsZSAkMTAwLjAwIC4nLAorCW9uZVJlcXVpcmVkOiAnUGxlYXNlIGVudGVyIHNvbWV0aGluZyBmb3IgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGlucHV0cy4nLAorCWVycm9yUHJlZml4OiAnRXJyb3I6ICcsCisJd2FybmluZ1ByZWZpeDogJ1dhcm5pbmc6ICcsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAnVGhlcmUgY2FuIGJlIG5vIHNwYWNlcyBpbiB0aGlzIGlucHV0LicsCisJcmVxQ2hrQnlOb2RlOiAnTm8gaXRlbXMgYXJlIHNlbGVjdGVkLicsCisJcmVxdWlyZWRDaGs6ICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLicsCisJcmVxQ2hrQnlOYW1lOiAnUGxlYXNlIHNlbGVjdCBhIHtsYWJlbH0uJywKKwltYXRjaDogJ1RoaXMgZmllbGQgbmVlZHMgdG8gbWF0Y2ggdGhlIHttYXRjaE5hbWV9IGZpZWxkJywKKwlzdGFydERhdGU6ICd0aGUgc3RhcnQgZGF0ZScsCisJZW5kRGF0ZTogJ3RoZSBlbmQgZGF0ZScsCisJY3VycmVuZERhdGU6ICd0aGUgY3VycmVudCBkYXRlJywKKwlhZnRlckRhdGU6ICdUaGUgZGF0ZSBzaG91bGQgYmUgdGhlIHNhbWUgb3IgYWZ0ZXIge2xhYmVsfS4nLAorCWJlZm9yZURhdGU6ICdUaGUgZGF0ZSBzaG91bGQgYmUgdGhlIHNhbWUgb3IgYmVmb3JlIHtsYWJlbH0uJywKKwlzdGFydE1vbnRoOiAnUGxlYXNlIHNlbGVjdCBhIHN0YXJ0IG1vbnRoJywKKwlzYW1lTW9udGg6ICdUaGVzZSB0d28gZGF0ZXMgbXVzdCBiZSBpbiB0aGUgc2FtZSBtb250aCAtIHlvdSBtdXN0IGNoYW5nZSBvbmUgb3IgdGhlIG90aGVyLicsCisJY3JlZGl0Y2FyZDogJ1RoZSBjcmVkaXQgY2FyZCBudW1iZXIgZW50ZXJlZCBpcyBpbnZhbGlkLiBQbGVhc2UgY2hlY2sgdGhlIG51bWJlciBhbmQgdHJ5IGFnYWluLiB7bGVuZ3RofSBkaWdpdHMgZW50ZXJlZC4nCisKK30pOworCisKKy8qCistLS0KKworc2NyaXB0OiBGb3JtLlZhbGlkYXRvci5qcworCituYW1lOiBGb3JtLlZhbGlkYXRvcgorCitkZXNjcmlwdGlvbjogQSBjc3MtY2xhc3MgYmFzZWQgZm9ybSB2YWxpZGF0aW9uIHN5c3RlbS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9PcHRpb25zCisgIC0gQ29yZS9FdmVudHMKKyAgLSBDb3JlL1NsaWNrLkZpbmRlcgorICAtIENvcmUvRWxlbWVudC5FdmVudAorICAtIENvcmUvRWxlbWVudC5TdHlsZQorICAtIENvcmUvSlNPTgorICAtIC9Mb2NhbGUKKyAgLSAvQ2xhc3MuQmluZHMKKyAgLSAvRGF0ZQorICAtIC9FbGVtZW50LkZvcm1zCisgIC0gL0xvY2FsZS5lbi1VUy5Gb3JtLlZhbGlkYXRvcgorICAtIC9FbGVtZW50LlNob3J0Y3V0cworCitwcm92aWRlczogW0Zvcm0uVmFsaWRhdG9yLCBJbnB1dFZhbGlkYXRvciwgRm9ybVZhbGlkYXRvci5CYXNlVmFsaWRhdG9yc10KKworLi4uCisqLworaWYgKCF3aW5kb3cuRm9ybSkgd2luZG93LkZvcm0gPSB7fTsKKwordmFyIElucHV0VmFsaWRhdG9yID0gdGhpcy5JbnB1dFZhbGlkYXRvciA9IG5ldyBDbGFzcyh7CisKKwlJbXBsZW1lbnRzOiBbT3B0aW9uc10sCisKKwlvcHRpb25zOiB7CisJCWVycm9yTXNnOiAnVmFsaWRhdGlvbiBmYWlsZWQuJywKKwkJdGVzdDogRnVuY3Rpb24uZnJvbSh0cnVlKQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihjbGFzc05hbWUsIG9wdGlvbnMpeworCQl0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7CisJCXRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lOworCX0sCisKKwl0ZXN0OiBmdW5jdGlvbihmaWVsZCwgcHJvcHMpeworCQlmaWVsZCA9IGRvY3VtZW50LmlkKGZpZWxkKTsKKwkJcmV0dXJuIChmaWVsZCkgPyB0aGlzLm9wdGlvbnMudGVzdChmaWVsZCwgcHJvcHMgfHwgdGhpcy5nZXRQcm9wcyhmaWVsZCkpIDogZmFsc2U7CisJfSwKKworCWdldEVycm9yOiBmdW5jdGlvbihmaWVsZCwgcHJvcHMpeworCQlmaWVsZCA9IGRvY3VtZW50LmlkKGZpZWxkKTsKKwkJdmFyIGVyciA9IHRoaXMub3B0aW9ucy5lcnJvck1zZzsKKwkJaWYgKHR5cGVPZihlcnIpID09ICdmdW5jdGlvbicpIGVyciA9IGVycihmaWVsZCwgcHJvcHMgfHwgdGhpcy5nZXRQcm9wcyhmaWVsZCkpOworCQlyZXR1cm4gZXJyOworCX0sCisKKwlnZXRQcm9wczogZnVuY3Rpb24oZmllbGQpeworCQlmaWVsZCA9IGRvY3VtZW50LmlkKGZpZWxkKTsKKwkJcmV0dXJuIChmaWVsZCkgPyBmaWVsZC5nZXQoJ3ZhbGlkYXRvclByb3BzJykgOiB7fTsKKwl9CisKK30pOworCitFbGVtZW50LlByb3BlcnRpZXMudmFsaWRhdG9ycyA9IHsKKworCWdldDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuICh0aGlzLmdldCgnZGF0YS12YWxpZGF0b3JzJykgfHwgdGhpcy5jbGFzc05hbWUpLmNsZWFuKCkuc3BsaXQoJyAnKTsKKwl9CisKK307CisKK0VsZW1lbnQuUHJvcGVydGllcy52YWxpZGF0b3JQcm9wcyA9IHsKKworCXNldDogZnVuY3Rpb24ocHJvcHMpeworCQlyZXR1cm4gdGhpcy5lbGltaW5hdGUoJyRtb286dmFsaWRhdG9yUHJvcHMnKS5zdG9yZSgnJG1vbzp2YWxpZGF0b3JQcm9wcycsIHByb3BzKTsKKwl9LAorCisJZ2V0OiBmdW5jdGlvbihwcm9wcyl7CisJCWlmIChwcm9wcykgdGhpcy5zZXQocHJvcHMpOworCQlpZiAodGhpcy5yZXRyaWV2ZSgnJG1vbzp2YWxpZGF0b3JQcm9wcycpKSByZXR1cm4gdGhpcy5yZXRyaWV2ZSgnJG1vbzp2YWxpZGF0b3JQcm9wcycpOworCQlpZiAodGhpcy5nZXRQcm9wZXJ0eSgnZGF0YS12YWxpZGF0b3ItcHJvcGVydGllcycpIHx8IHRoaXMuZ2V0UHJvcGVydHkoJ3ZhbGlkYXRvclByb3BzJykpeworCQkJdHJ5IHsKKwkJCQl0aGlzLnN0b3JlKCckbW9vOnZhbGlkYXRvclByb3BzJywgSlNPTi5kZWNvZGUodGhpcy5nZXRQcm9wZXJ0eSgndmFsaWRhdG9yUHJvcHMnKSB8fCB0aGlzLmdldFByb3BlcnR5KCdkYXRhLXZhbGlkYXRvci1wcm9wZXJ0aWVzJykpKTsKKwkJCX1jYXRjaChlKXsKKwkJCQlyZXR1cm4ge307CisJCQl9CisJCX0gZWxzZSB7CisJCQl2YXIgdmFscyA9IHRoaXMuZ2V0KCd2YWxpZGF0b3JzJykuZmlsdGVyKGZ1bmN0aW9uKGNscyl7CisJCQkJcmV0dXJuIGNscy50ZXN0KCc6Jyk7CisJCQl9KTsKKwkJCWlmICghdmFscy5sZW5ndGgpeworCQkJCXRoaXMuc3RvcmUoJyRtb286dmFsaWRhdG9yUHJvcHMnLCB7fSk7CisJCQl9IGVsc2UgeworCQkJCXByb3BzID0ge307CisJCQkJdmFscy5lYWNoKGZ1bmN0aW9uKGNscyl7CisJCQkJCXZhciBzcGxpdCA9IGNscy5zcGxpdCgnOicpOworCQkJCQlpZiAoc3BsaXRbMV0peworCQkJCQkJdHJ5IHsKKwkJCQkJCQlwcm9wc1tzcGxpdFswXV0gPSBKU09OLmRlY29kZShzcGxpdFsxXSk7CisJCQkJCQl9IGNhdGNoKGUpe30KKwkJCQkJfQorCQkJCX0pOworCQkJCXRoaXMuc3RvcmUoJyRtb286dmFsaWRhdG9yUHJvcHMnLCBwcm9wcyk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHRoaXMucmV0cmlldmUoJyRtb286dmFsaWRhdG9yUHJvcHMnKTsKKwl9CisKK307CisKK0Zvcm0uVmFsaWRhdG9yID0gbmV3IENsYXNzKHsKKworCUltcGxlbWVudHM6IFtPcHRpb25zLCBFdmVudHNdLAorCisJQmluZHM6IFsnb25TdWJtaXQnXSwKKworCW9wdGlvbnM6IHsvKgorCQlvbkZvcm1WYWxpZGF0ZTogZnVuY3Rpb24oaXNWYWxpZCwgZm9ybSwgZXZlbnQpe30sCisJCW9uRWxlbWVudFZhbGlkYXRlOiBmdW5jdGlvbihpc1ZhbGlkLCBmaWVsZCwgY2xhc3NOYW1lLCB3YXJuKXt9LAorCQlvbkVsZW1lbnRQYXNzOiBmdW5jdGlvbihmaWVsZCl7fSwKKwkJb25FbGVtZW50RmFpbDogZnVuY3Rpb24oZmllbGQsIHZhbGlkYXRvcnNGYWlsZWQpe30sICovCisJCWZpZWxkU2VsZWN0b3JzOiAnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEnLAorCQlpZ25vcmVIaWRkZW46IHRydWUsCisJCWlnbm9yZURpc2FibGVkOiB0cnVlLAorCQl1c2VUaXRsZXM6IGZhbHNlLAorCQlldmFsdWF0ZU9uU3VibWl0OiB0cnVlLAorCQlldmFsdWF0ZUZpZWxkc09uQmx1cjogdHJ1ZSwKKwkJZXZhbHVhdGVGaWVsZHNPbkNoYW5nZTogdHJ1ZSwKKwkJc2VyaWFsOiB0cnVlLAorCQlzdG9wT25GYWlsdXJlOiB0cnVlLAorCQl3YXJuaW5nUHJlZml4OiBmdW5jdGlvbigpeworCQkJcmV0dXJuIEZvcm0uVmFsaWRhdG9yLmdldE1zZygnd2FybmluZ1ByZWZpeCcpIHx8ICdXYXJuaW5nOiAnOworCQl9LAorCQllcnJvclByZWZpeDogZnVuY3Rpb24oKXsKKwkJCXJldHVybiBGb3JtLlZhbGlkYXRvci5nZXRNc2coJ2Vycm9yUHJlZml4JykgfHwgJ0Vycm9yOiAnOworCQl9CisJfSwKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKGZvcm0sIG9wdGlvbnMpeworCQl0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7CisJCXRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmlkKGZvcm0pOworCQl0aGlzLmVsZW1lbnQuc3RvcmUoJ3ZhbGlkYXRvcicsIHRoaXMpOworCQl0aGlzLndhcm5pbmdQcmVmaXggPSBGdW5jdGlvbi5mcm9tKHRoaXMub3B0aW9ucy53YXJuaW5nUHJlZml4KSgpOworCQl0aGlzLmVycm9yUHJlZml4ID0gRnVuY3Rpb24uZnJvbSh0aGlzLm9wdGlvbnMuZXJyb3JQcmVmaXgpKCk7CisJCWlmICh0aGlzLm9wdGlvbnMuZXZhbHVhdGVPblN1Ym1pdCkgdGhpcy5lbGVtZW50LmFkZEV2ZW50KCdzdWJtaXQnLCB0aGlzLm9uU3VibWl0KTsKKwkJaWYgKHRoaXMub3B0aW9ucy5ldmFsdWF0ZUZpZWxkc09uQmx1ciB8fCB0aGlzLm9wdGlvbnMuZXZhbHVhdGVGaWVsZHNPbkNoYW5nZSkgdGhpcy53YXRjaEZpZWxkcyh0aGlzLmdldEZpZWxkcygpKTsKKwl9LAorCisJdG9FbGVtZW50OiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5lbGVtZW50OworCX0sCisKKwlnZXRGaWVsZHM6IGZ1bmN0aW9uKCl7CisJCXJldHVybiAodGhpcy5maWVsZHMgPSB0aGlzLmVsZW1lbnQuZ2V0RWxlbWVudHModGhpcy5vcHRpb25zLmZpZWxkU2VsZWN0b3JzKSk7CisJfSwKKworCXdhdGNoRmllbGRzOiBmdW5jdGlvbihmaWVsZHMpeworCQlmaWVsZHMuZWFjaChmdW5jdGlvbihlbCl7CisJCQlpZiAodGhpcy5vcHRpb25zLmV2YWx1YXRlRmllbGRzT25CbHVyKQorCQkJCWVsLmFkZEV2ZW50KCdibHVyJywgdGhpcy52YWxpZGF0aW9uTW9uaXRvci5wYXNzKFtlbCwgZmFsc2VdLCB0aGlzKSk7CisJCQlpZiAodGhpcy5vcHRpb25zLmV2YWx1YXRlRmllbGRzT25DaGFuZ2UpCisJCQkJZWwuYWRkRXZlbnQoJ2NoYW5nZScsIHRoaXMudmFsaWRhdGlvbk1vbml0b3IucGFzcyhbZWwsIHRydWVdLCB0aGlzKSk7CisJCX0sIHRoaXMpOworCX0sCisKKwl2YWxpZGF0aW9uTW9uaXRvcjogZnVuY3Rpb24oKXsKKwkJY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpOworCQl0aGlzLnRpbWVyID0gdGhpcy52YWxpZGF0ZUZpZWxkLmRlbGF5KDUwLCB0aGlzLCBhcmd1bWVudHMpOworCX0sCisKKwlvblN1Ym1pdDogZnVuY3Rpb24oZXZlbnQpeworCQlpZiAodGhpcy52YWxpZGF0ZShldmVudCkpIHRoaXMucmVzZXQoKTsKKwl9LAorCisJcmVzZXQ6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZ2V0RmllbGRzKCkuZWFjaCh0aGlzLnJlc2V0RmllbGQsIHRoaXMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJdmFsaWRhdGU6IGZ1bmN0aW9uKGV2ZW50KXsKKwkJdmFyIHJlc3VsdCA9IHRoaXMuZ2V0RmllbGRzKCkubWFwKGZ1bmN0aW9uKGZpZWxkKXsKKwkJCXJldHVybiB0aGlzLnZhbGlkYXRlRmllbGQoZmllbGQsIHRydWUpOworCQl9LCB0aGlzKS5ldmVyeShmdW5jdGlvbih2KXsKKwkJCXJldHVybiB2OworCQl9KTsKKwkJdGhpcy5maXJlRXZlbnQoJ2Zvcm1WYWxpZGF0ZScsIFtyZXN1bHQsIHRoaXMuZWxlbWVudCwgZXZlbnRdKTsKKwkJaWYgKHRoaXMub3B0aW9ucy5zdG9wT25GYWlsdXJlICYmICFyZXN1bHQgJiYgZXZlbnQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisJCXJldHVybiByZXN1bHQ7CisJfSwKKworCXZhbGlkYXRlRmllbGQ6IGZ1bmN0aW9uKGZpZWxkLCBmb3JjZSl7CisJCWlmICh0aGlzLnBhdXNlZCkgcmV0dXJuIHRydWU7CisJCWZpZWxkID0gZG9jdW1lbnQuaWQoZmllbGQpOworCQl2YXIgcGFzc2VkID0gIWZpZWxkLmhhc0NsYXNzKCd2YWxpZGF0aW9uLWZhaWxlZCcpOworCQl2YXIgZmFpbGVkLCB3YXJuZWQ7CisJCWlmICh0aGlzLm9wdGlvbnMuc2VyaWFsICYmICFmb3JjZSl7CisJCQlmYWlsZWQgPSB0aGlzLmVsZW1lbnQuZ2V0RWxlbWVudCgnLnZhbGlkYXRpb24tZmFpbGVkJyk7CisJCQl3YXJuZWQgPSB0aGlzLmVsZW1lbnQuZ2V0RWxlbWVudCgnLndhcm5pbmcnKTsKKwkJfQorCQlpZiAoZmllbGQgJiYgKCFmYWlsZWQgfHwgZm9yY2UgfHwgZmllbGQuaGFzQ2xhc3MoJ3ZhbGlkYXRpb24tZmFpbGVkJykgfHwgKGZhaWxlZCAmJiAhdGhpcy5vcHRpb25zLnNlcmlhbCkpKXsKKwkJCXZhciB2YWxpZGF0aW9uVHlwZXMgPSBmaWVsZC5nZXQoJ3ZhbGlkYXRvcnMnKTsKKwkJCXZhciB2YWxpZGF0b3JzID0gdmFsaWRhdGlvblR5cGVzLnNvbWUoZnVuY3Rpb24oY24peworCQkJCXJldHVybiB0aGlzLmdldFZhbGlkYXRvcihjbik7CisJCQl9LCB0aGlzKTsKKwkJCXZhciB2YWxpZGF0b3JzRmFpbGVkID0gW107CisJCQl2YWxpZGF0aW9uVHlwZXMuZWFjaChmdW5jdGlvbihjbGFzc05hbWUpeworCQkJCWlmIChjbGFzc05hbWUgJiYgIXRoaXMudGVzdChjbGFzc05hbWUsIGZpZWxkKSkgdmFsaWRhdG9yc0ZhaWxlZC5pbmNsdWRlKGNsYXNzTmFtZSk7CisJCQl9LCB0aGlzKTsKKwkJCXBhc3NlZCA9IHZhbGlkYXRvcnNGYWlsZWQubGVuZ3RoID09PSAwOworCQkJaWYgKHZhbGlkYXRvcnMgJiYgIXRoaXMuaGFzVmFsaWRhdG9yKGZpZWxkLCAnd2Fybk9ubHknKSl7CisJCQkJaWYgKHBhc3NlZCl7CisJCQkJCWZpZWxkLmFkZENsYXNzKCd2YWxpZGF0aW9uLXBhc3NlZCcpLnJlbW92ZUNsYXNzKCd2YWxpZGF0aW9uLWZhaWxlZCcpOworCQkJCQl0aGlzLmZpcmVFdmVudCgnZWxlbWVudFBhc3MnLCBbZmllbGRdKTsKKwkJCQl9IGVsc2UgeworCQkJCQlmaWVsZC5hZGRDbGFzcygndmFsaWRhdGlvbi1mYWlsZWQnKS5yZW1vdmVDbGFzcygndmFsaWRhdGlvbi1wYXNzZWQnKTsKKwkJCQkJdGhpcy5maXJlRXZlbnQoJ2VsZW1lbnRGYWlsJywgW2ZpZWxkLCB2YWxpZGF0b3JzRmFpbGVkXSk7CisJCQkJfQorCQkJfQorCQkJaWYgKCF3YXJuZWQpeworCQkJCXZhciB3YXJuaW5ncyA9IHZhbGlkYXRpb25UeXBlcy5zb21lKGZ1bmN0aW9uKGNuKXsKKwkJCQkJaWYgKGNuLnRlc3QoJ153YXJuJykpCisJCQkJCQlyZXR1cm4gdGhpcy5nZXRWYWxpZGF0b3IoY24ucmVwbGFjZSgvXndhcm4tLywnJykpOworCQkJCQllbHNlIHJldHVybiBudWxsOworCQkJCX0sIHRoaXMpOworCQkJCWZpZWxkLnJlbW92ZUNsYXNzKCd3YXJuaW5nJyk7CisJCQkJdmFyIHdhcm5SZXN1bHQgPSB2YWxpZGF0aW9uVHlwZXMubWFwKGZ1bmN0aW9uKGNuKXsKKwkJCQkJaWYgKGNuLnRlc3QoJ153YXJuJykpCisJCQkJCQlyZXR1cm4gdGhpcy50ZXN0KGNuLnJlcGxhY2UoL153YXJuLS8sJycpLCBmaWVsZCwgdHJ1ZSk7CisJCQkJCWVsc2UgcmV0dXJuIG51bGw7CisJCQkJfSwgdGhpcyk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHBhc3NlZDsKKwl9LAorCisJdGVzdDogZnVuY3Rpb24oY2xhc3NOYW1lLCBmaWVsZCwgd2Fybil7CisJCWZpZWxkID0gZG9jdW1lbnQuaWQoZmllbGQpOworCQlpZiAoKHRoaXMub3B0aW9ucy5pZ25vcmVIaWRkZW4gJiYgIWZpZWxkLmlzVmlzaWJsZSgpKSB8fCAodGhpcy5vcHRpb25zLmlnbm9yZURpc2FibGVkICYmIGZpZWxkLmdldCgnZGlzYWJsZWQnKSkpIHJldHVybiB0cnVlOworCQl2YXIgdmFsaWRhdG9yID0gdGhpcy5nZXRWYWxpZGF0b3IoY2xhc3NOYW1lKTsKKwkJaWYgKHdhcm4gIT0gbnVsbCkgd2FybiA9IGZhbHNlOworCQlpZiAodGhpcy5oYXNWYWxpZGF0b3IoZmllbGQsICd3YXJuT25seScpKSB3YXJuID0gdHJ1ZTsKKwkJdmFyIGlzVmFsaWQgPSB0aGlzLmhhc1ZhbGlkYXRvcihmaWVsZCwgJ2lnbm9yZVZhbGlkYXRpb24nKSB8fCAodmFsaWRhdG9yID8gdmFsaWRhdG9yLnRlc3QoZmllbGQpIDogdHJ1ZSk7CisJCWlmICh2YWxpZGF0b3IgJiYgZmllbGQuaXNWaXNpYmxlKCkpIHRoaXMuZmlyZUV2ZW50KCdlbGVtZW50VmFsaWRhdGUnLCBbaXNWYWxpZCwgZmllbGQsIGNsYXNzTmFtZSwgd2Fybl0pOworCQlpZiAod2FybikgcmV0dXJuIHRydWU7CisJCXJldHVybiBpc1ZhbGlkOworCX0sCisKKwloYXNWYWxpZGF0b3I6IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSl7CisJCXJldHVybiBmaWVsZC5nZXQoJ3ZhbGlkYXRvcnMnKS5jb250YWlucyh2YWx1ZSk7CisJfSwKKworCXJlc2V0RmllbGQ6IGZ1bmN0aW9uKGZpZWxkKXsKKwkJZmllbGQgPSBkb2N1bWVudC5pZChmaWVsZCk7CisJCWlmIChmaWVsZCl7CisJCQlmaWVsZC5nZXQoJ3ZhbGlkYXRvcnMnKS5lYWNoKGZ1bmN0aW9uKGNsYXNzTmFtZSl7CisJCQkJaWYgKGNsYXNzTmFtZS50ZXN0KCded2Fybi0nKSkgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UoL153YXJuLS8sICcnKTsKKwkJCQlmaWVsZC5yZW1vdmVDbGFzcygndmFsaWRhdGlvbi1mYWlsZWQnKTsKKwkJCQlmaWVsZC5yZW1vdmVDbGFzcygnd2FybmluZycpOworCQkJCWZpZWxkLnJlbW92ZUNsYXNzKCd2YWxpZGF0aW9uLXBhc3NlZCcpOworCQkJfSwgdGhpcyk7CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXN0b3A6IGZ1bmN0aW9uKCl7CisJCXRoaXMucGF1c2VkID0gdHJ1ZTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXN0YXJ0OiBmdW5jdGlvbigpeworCQl0aGlzLnBhdXNlZCA9IGZhbHNlOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJaWdub3JlRmllbGQ6IGZ1bmN0aW9uKGZpZWxkLCB3YXJuKXsKKwkJZmllbGQgPSBkb2N1bWVudC5pZChmaWVsZCk7CisJCWlmIChmaWVsZCl7CisJCQl0aGlzLmVuZm9yY2VGaWVsZChmaWVsZCk7CisJCQlpZiAod2FybikgZmllbGQuYWRkQ2xhc3MoJ3dhcm5Pbmx5Jyk7CisJCQllbHNlIGZpZWxkLmFkZENsYXNzKCdpZ25vcmVWYWxpZGF0aW9uJyk7CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWVuZm9yY2VGaWVsZDogZnVuY3Rpb24oZmllbGQpeworCQlmaWVsZCA9IGRvY3VtZW50LmlkKGZpZWxkKTsKKwkJaWYgKGZpZWxkKSBmaWVsZC5yZW1vdmVDbGFzcygnd2Fybk9ubHknKS5yZW1vdmVDbGFzcygnaWdub3JlVmFsaWRhdGlvbicpOworCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCitGb3JtLlZhbGlkYXRvci5nZXRNc2cgPSBmdW5jdGlvbihrZXkpeworCXJldHVybiBMb2NhbGUuZ2V0KCdGb3JtVmFsaWRhdG9yLicgKyBrZXkpOworfTsKKworRm9ybS5WYWxpZGF0b3IuYWRkZXJzID0geworCisJdmFsaWRhdG9yczp7fSwKKworCWFkZCA6IGZ1bmN0aW9uKGNsYXNzTmFtZSwgb3B0aW9ucyl7CisJCXRoaXMudmFsaWRhdG9yc1tjbGFzc05hbWVdID0gbmV3IElucHV0VmFsaWRhdG9yKGNsYXNzTmFtZSwgb3B0aW9ucyk7CisJCS8vaWYgdGhpcyBpcyBhIGNsYXNzICh0aGlzIG1ldGhvZCBpcyB1c2VkIGJ5IGluc3RhbmNlcyBvZiBGb3JtLlZhbGlkYXRvciBhbmQgdGhlIEZvcm0uVmFsaWRhdG9yIG5hbWVzcGFjZSkKKwkJLy9leHRlbmQgdGhlc2UgdmFsaWRhdG9ycyBpbnRvIGl0CisJCS8vdGhpcyBhbGxvd3MgdmFsaWRhdG9ycyB0byBiZSBnbG9iYWwgYW5kL29yIHBlciBpbnN0YW5jZQorCQlpZiAoIXRoaXMuaW5pdGlhbGl6ZSl7CisJCQl0aGlzLmltcGxlbWVudCh7CisJCQkJdmFsaWRhdG9yczogdGhpcy52YWxpZGF0b3JzCisJCQl9KTsKKwkJfQorCX0sCisKKwlhZGRBbGxUaGVzZSA6IGZ1bmN0aW9uKHZhbGlkYXRvcnMpeworCQlBcnJheS5mcm9tKHZhbGlkYXRvcnMpLmVhY2goZnVuY3Rpb24odmFsaWRhdG9yKXsKKwkJCXRoaXMuYWRkKHZhbGlkYXRvclswXSwgdmFsaWRhdG9yWzFdKTsKKwkJfSwgdGhpcyk7CisJfSwKKworCWdldFZhbGlkYXRvcjogZnVuY3Rpb24oY2xhc3NOYW1lKXsKKwkJcmV0dXJuIHRoaXMudmFsaWRhdG9yc1tjbGFzc05hbWUuc3BsaXQoJzonKVswXV07CisJfQorCit9OworCitPYmplY3QuYXBwZW5kKEZvcm0uVmFsaWRhdG9yLCBGb3JtLlZhbGlkYXRvci5hZGRlcnMpOworCitGb3JtLlZhbGlkYXRvci5pbXBsZW1lbnQoRm9ybS5WYWxpZGF0b3IuYWRkZXJzKTsKKworRm9ybS5WYWxpZGF0b3IuYWRkKCdJc0VtcHR5JywgeworCisJZXJyb3JNc2c6IGZhbHNlLAorCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQpeworCQlpZiAoZWxlbWVudC50eXBlID09ICdzZWxlY3Qtb25lJyB8fCBlbGVtZW50LnR5cGUgPT0gJ3NlbGVjdCcpCisJCQlyZXR1cm4gIShlbGVtZW50LnNlbGVjdGVkSW5kZXggPj0gMCAmJiBlbGVtZW50Lm9wdGlvbnNbZWxlbWVudC5zZWxlY3RlZEluZGV4XS52YWx1ZSAhPSAnJyk7CisJCWVsc2UKKwkJCXJldHVybiAoKGVsZW1lbnQuZ2V0KCd2YWx1ZScpID09IG51bGwpIHx8IChlbGVtZW50LmdldCgndmFsdWUnKS5sZW5ndGggPT0gMCkpOworCX0KKworfSk7CisKK0Zvcm0uVmFsaWRhdG9yLmFkZEFsbFRoZXNlKFsKKworCVsncmVxdWlyZWQnLCB7CisJCWVycm9yTXNnOiBmdW5jdGlvbigpeworCQkJcmV0dXJuIEZvcm0uVmFsaWRhdG9yLmdldE1zZygncmVxdWlyZWQnKTsKKwkJfSwKKwkJdGVzdDogZnVuY3Rpb24oZWxlbWVudCl7CisJCQlyZXR1cm4gIUZvcm0uVmFsaWRhdG9yLmdldFZhbGlkYXRvcignSXNFbXB0eScpLnRlc3QoZWxlbWVudCk7CisJCX0KKwl9XSwKKworCVsnbWluTGVuZ3RoJywgeworCQllcnJvck1zZzogZnVuY3Rpb24oZWxlbWVudCwgcHJvcHMpeworCQkJaWYgKHR5cGVPZihwcm9wcy5taW5MZW5ndGgpICE9ICdudWxsJykKKwkJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0TXNnKCdtaW5MZW5ndGgnKS5zdWJzdGl0dXRlKHttaW5MZW5ndGg6cHJvcHMubWluTGVuZ3RoLGxlbmd0aDplbGVtZW50LmdldCgndmFsdWUnKS5sZW5ndGggfSk7CisJCQllbHNlIHJldHVybiAnJzsKKwkJfSwKKwkJdGVzdDogZnVuY3Rpb24oZWxlbWVudCwgcHJvcHMpeworCQkJaWYgKHR5cGVPZihwcm9wcy5taW5MZW5ndGgpICE9ICdudWxsJykgcmV0dXJuIChlbGVtZW50LmdldCgndmFsdWUnKS5sZW5ndGggPj0gKHByb3BzLm1pbkxlbmd0aCB8fCAwKSk7CisJCQllbHNlIHJldHVybiB0cnVlOworCQl9CisJfV0sCisKKwlbJ21heExlbmd0aCcsIHsKKwkJZXJyb3JNc2c6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BzKXsKKwkJCS8vcHJvcHMgaXMge21heExlbmd0aDoxMH0KKwkJCWlmICh0eXBlT2YocHJvcHMubWF4TGVuZ3RoKSAhPSAnbnVsbCcpCisJCQkJcmV0dXJuIEZvcm0uVmFsaWRhdG9yLmdldE1zZygnbWF4TGVuZ3RoJykuc3Vic3RpdHV0ZSh7bWF4TGVuZ3RoOnByb3BzLm1heExlbmd0aCxsZW5ndGg6ZWxlbWVudC5nZXQoJ3ZhbHVlJykubGVuZ3RoIH0pOworCQkJZWxzZSByZXR1cm4gJyc7CisJCX0sCisJCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BzKXsKKwkJCXJldHVybiBlbGVtZW50LmdldCgndmFsdWUnKS5sZW5ndGggPD0gKHByb3BzLm1heExlbmd0aCB8fCAxMDAwMCk7CisJCX0KKwl9XSwKKworCVsndmFsaWRhdGUtaW50ZWdlcicsIHsKKwkJZXJyb3JNc2c6IEZvcm0uVmFsaWRhdG9yLmdldE1zZy5wYXNzKCdpbnRlZ2VyJyksCisJCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQpeworCQkJcmV0dXJuIEZvcm0uVmFsaWRhdG9yLmdldFZhbGlkYXRvcignSXNFbXB0eScpLnRlc3QoZWxlbWVudCkgfHwgKC9eKC0/WzEtOV1cZCp8MCkkLykudGVzdChlbGVtZW50LmdldCgndmFsdWUnKSk7CisJCX0KKwl9XSwKKworCVsndmFsaWRhdGUtbnVtZXJpYycsIHsKKwkJZXJyb3JNc2c6IEZvcm0uVmFsaWRhdG9yLmdldE1zZy5wYXNzKCdudW1lcmljJyksCisJCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQpeworCQkJcmV0dXJuIEZvcm0uVmFsaWRhdG9yLmdldFZhbGlkYXRvcignSXNFbXB0eScpLnRlc3QoZWxlbWVudCkgfHwKKwkJCQkoL14tPyg/OjAkMCg/PVxkKlwuKXxbMS05XXwwKVxkKihcLlxkKyk/JC8pLnRlc3QoZWxlbWVudC5nZXQoJ3ZhbHVlJykpOworCQl9CisJfV0sCisKKwlbJ3ZhbGlkYXRlLWRpZ2l0cycsIHsKKwkJZXJyb3JNc2c6IEZvcm0uVmFsaWRhdG9yLmdldE1zZy5wYXNzKCdkaWdpdHMnKSwKKwkJdGVzdDogZnVuY3Rpb24oZWxlbWVudCl7CisJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0VmFsaWRhdG9yKCdJc0VtcHR5JykudGVzdChlbGVtZW50KSB8fCAoL15bXGQoKSAuOlwtXCsjXSskLy50ZXN0KGVsZW1lbnQuZ2V0KCd2YWx1ZScpKSk7CisJCX0KKwl9XSwKKworCVsndmFsaWRhdGUtYWxwaGEnLCB7CisJCWVycm9yTXNnOiBGb3JtLlZhbGlkYXRvci5nZXRNc2cucGFzcygnYWxwaGEnKSwKKwkJdGVzdDogZnVuY3Rpb24oZWxlbWVudCl7CisJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0VmFsaWRhdG9yKCdJc0VtcHR5JykudGVzdChlbGVtZW50KSB8fCAoL15bYS16QS1aXSskLykudGVzdChlbGVtZW50LmdldCgndmFsdWUnKSk7CisJCX0KKwl9XSwKKworCVsndmFsaWRhdGUtYWxwaGFudW0nLCB7CisJCWVycm9yTXNnOiBGb3JtLlZhbGlkYXRvci5nZXRNc2cucGFzcygnYWxwaGFudW0nKSwKKwkJdGVzdDogZnVuY3Rpb24oZWxlbWVudCl7CisJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0VmFsaWRhdG9yKCdJc0VtcHR5JykudGVzdChlbGVtZW50KSB8fCAhKC9cVy8pLnRlc3QoZWxlbWVudC5nZXQoJ3ZhbHVlJykpOworCQl9CisJfV0sCisKKwlbJ3ZhbGlkYXRlLWRhdGUnLCB7CisJCWVycm9yTXNnOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQlpZiAoRGF0ZS5wYXJzZSl7CisJCQkJdmFyIGZvcm1hdCA9IHByb3BzLmRhdGVGb3JtYXQgfHwgJyV4JzsKKwkJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0TXNnKCdkYXRlU3VjaEFzJykuc3Vic3RpdHV0ZSh7ZGF0ZTogbmV3IERhdGUoKS5mb3JtYXQoZm9ybWF0KX0pOworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0TXNnKCdkYXRlSW5Gb3JtYXRNRFknKTsKKwkJCX0KKwkJfSwKKwkJdGVzdDogZnVuY3Rpb24oZWxlbWVudCwgcHJvcHMpeworCQkJaWYgKEZvcm0uVmFsaWRhdG9yLmdldFZhbGlkYXRvcignSXNFbXB0eScpLnRlc3QoZWxlbWVudCkpIHJldHVybiB0cnVlOworCQkJdmFyIGRhdGVMb2NhbGUgPSBMb2NhbGUuZ2V0Q3VycmVudCgpLnNldHMuRGF0ZSwKKwkJCQlkYXRlTm91bnMgPSBuZXcgUmVnRXhwKFtkYXRlTG9jYWxlLmRheXMsIGRhdGVMb2NhbGUuZGF5c19hYmJyLCBkYXRlTG9jYWxlLm1vbnRocywgZGF0ZUxvY2FsZS5tb250aHNfYWJicl0uZmxhdHRlbigpLmpvaW4oJ3wnKSwgJ2knKSwKKwkJCQl2YWx1ZSA9IGVsZW1lbnQuZ2V0KCd2YWx1ZScpLAorCQkJCXdvcmRzSW5WYWx1ZSA9IHZhbHVlLm1hdGNoKC9bYS16XSsvZ2kpOworCisJCQkJaWYgKHdvcmRzSW5WYWx1ZSAmJiAhd29yZHNJblZhbHVlLmV2ZXJ5KGRhdGVOb3Vucy5leGVjLCBkYXRlTm91bnMpKSByZXR1cm4gZmFsc2U7CisKKwkJCQl2YXIgZGF0ZSA9IERhdGUucGFyc2UodmFsdWUpLAorCQkJCQlmb3JtYXQgPSBwcm9wcy5kYXRlRm9ybWF0IHx8ICcleCcsCisJCQkJCWZvcm1hdHRlZCA9IGRhdGUuZm9ybWF0KGZvcm1hdCk7CisKKwkJCQlpZiAoZm9ybWF0dGVkICE9ICdpbnZhbGlkIGRhdGUnKSBlbGVtZW50LnNldCgndmFsdWUnLCBmb3JtYXR0ZWQpOworCQkJCXJldHVybiBkYXRlLmlzVmFsaWQoKTsKKwkJfQorCX1dLAorCisJWyd2YWxpZGF0ZS1lbWFpbCcsIHsKKwkJZXJyb3JNc2c6IEZvcm0uVmFsaWRhdG9yLmdldE1zZy5wYXNzKCdlbWFpbCcpLAorCQl0ZXN0OiBmdW5jdGlvbihlbGVtZW50KXsKKwkJCS8qCisJCQl2YXIgY2hhcnMgPSAiW2EtejAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dIiwKKwkJCQlsb2NhbCA9ICcoPzonICsgY2hhcnMgKyAnXFwuPyl7MCw2M30nICsgY2hhcnMsCisKKwkJCQlsYWJlbCA9ICdbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT8nLAorCQkJCWhvc3RuYW1lID0gJyg/OicgKyBsYWJlbCArICdcXC4pKicgKyBsYWJlbDsKKworCQkJCW9jdGV0ID0gJyg/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPyknLAorCQkJCWlwdjQgPSAnXFxbKD86JyArIG9jdGV0ICsgJ1xcLil7M30nICsgb2N0ZXQgKyAnXFxdJywKKworCQkJCWRvbWFpbiA9ICcoPzonICsgaG9zdG5hbWUgKyAnfCcgKyBpcHY0ICsgJyknOworCisJCQl2YXIgcmVnZXggPSBuZXcgUmVnRXhwKCdeJyArIGxvY2FsICsgJ0AnICsgZG9tYWluICsgJyQnLCAnaScpOworCQkJKi8KKwkJCXJldHVybiBGb3JtLlZhbGlkYXRvci5nZXRWYWxpZGF0b3IoJ0lzRW1wdHknKS50ZXN0KGVsZW1lbnQpIHx8ICgvXig/OlthLXowLTkhIyQlJicqK1wvPT9eX2B7fH1+LV1cLj8pezAsNjN9W2EtejAtOSEjJCUmJyorXC89P15fYHt8fX4tXUAoPzooPzpbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT9cLikqW2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/fFxbKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KVwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcXSkkL2kpLnRlc3QoZWxlbWVudC5nZXQoJ3ZhbHVlJykpOworCQl9CisJfV0sCisKKwlbJ3ZhbGlkYXRlLXVybCcsIHsKKwkJZXJyb3JNc2c6IEZvcm0uVmFsaWRhdG9yLmdldE1zZy5wYXNzKCd1cmwnKSwKKwkJdGVzdDogZnVuY3Rpb24oZWxlbWVudCl7CisJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0VmFsaWRhdG9yKCdJc0VtcHR5JykudGVzdChlbGVtZW50KSB8fCAoL14oaHR0cHM/fGZ0cHxybXRwfG1tcyk6XC9cLygoW0EtWjAtOV1bQS1aMC05Xy1dKikoXC5bQS1aMC05XVtBLVowLTlfLV0qKSspKDooXGQrKSk/XC8/L2kpLnRlc3QoZWxlbWVudC5nZXQoJ3ZhbHVlJykpOworCQl9CisJfV0sCisKKwlbJ3ZhbGlkYXRlLWN1cnJlbmN5LWRvbGxhcicsIHsKKwkJZXJyb3JNc2c6IEZvcm0uVmFsaWRhdG9yLmdldE1zZy5wYXNzKCdjdXJyZW5jeURvbGxhcicpLAorCQl0ZXN0OiBmdW5jdGlvbihlbGVtZW50KXsKKwkJCXJldHVybiBGb3JtLlZhbGlkYXRvci5nZXRWYWxpZGF0b3IoJ0lzRW1wdHknKS50ZXN0KGVsZW1lbnQpIHx8ICgvXlwkP1wtPyhbMS05XXsxfVswLTldezAsMn0oXCxbMC05XXszfSkqKFwuWzAtOV17MCwyfSk/fFsxLTldezF9XGQqKFwuWzAtOV17MCwyfSk/fDAoXC5bMC05XXswLDJ9KT98KFwuWzAtOV17MSwyfSk/KSQvKS50ZXN0KGVsZW1lbnQuZ2V0KCd2YWx1ZScpKTsKKwkJfQorCX1dLAorCisJWyd2YWxpZGF0ZS1vbmUtcmVxdWlyZWQnLCB7CisJCWVycm9yTXNnOiBGb3JtLlZhbGlkYXRvci5nZXRNc2cucGFzcygnb25lUmVxdWlyZWQnKSwKKwkJdGVzdDogZnVuY3Rpb24oZWxlbWVudCwgcHJvcHMpeworCQkJdmFyIHAgPSBkb2N1bWVudC5pZChwcm9wc1sndmFsaWRhdGUtb25lLXJlcXVpcmVkJ10pIHx8IGVsZW1lbnQuZ2V0UGFyZW50KHByb3BzWyd2YWxpZGF0ZS1vbmUtcmVxdWlyZWQnXSk7CisJCQlyZXR1cm4gcC5nZXRFbGVtZW50cygnaW5wdXQnKS5zb21lKGZ1bmN0aW9uKGVsKXsKKwkJCQlpZiAoWydjaGVja2JveCcsICdyYWRpbyddLmNvbnRhaW5zKGVsLmdldCgndHlwZScpKSkgcmV0dXJuIGVsLmdldCgnY2hlY2tlZCcpOworCQkJCXJldHVybiBlbC5nZXQoJ3ZhbHVlJyk7CisJCQl9KTsKKwkJfQorCX1dCisKK10pOworCitFbGVtZW50LlByb3BlcnRpZXMudmFsaWRhdG9yID0geworCisJc2V0OiBmdW5jdGlvbihvcHRpb25zKXsKKwkJdGhpcy5nZXQoJ3ZhbGlkYXRvcicpLnNldE9wdGlvbnMob3B0aW9ucyk7CisJfSwKKworCWdldDogZnVuY3Rpb24oKXsKKwkJdmFyIHZhbGlkYXRvciA9IHRoaXMucmV0cmlldmUoJ3ZhbGlkYXRvcicpOworCQlpZiAoIXZhbGlkYXRvcil7CisJCQl2YWxpZGF0b3IgPSBuZXcgRm9ybS5WYWxpZGF0b3IodGhpcyk7CisJCQl0aGlzLnN0b3JlKCd2YWxpZGF0b3InLCB2YWxpZGF0b3IpOworCQl9CisJCXJldHVybiB2YWxpZGF0b3I7CisJfQorCit9OworCitFbGVtZW50LmltcGxlbWVudCh7CisKKwl2YWxpZGF0ZTogZnVuY3Rpb24ob3B0aW9ucyl7CisJCWlmIChvcHRpb25zKSB0aGlzLnNldCgndmFsaWRhdG9yJywgb3B0aW9ucyk7CisJCXJldHVybiB0aGlzLmdldCgndmFsaWRhdG9yJykudmFsaWRhdGUoKTsKKwl9CisKK30pOworCisKKy8vPDEuMmNvbXBhdD4KKy8vbGVnYWN5Cit2YXIgRm9ybVZhbGlkYXRvciA9IEZvcm0uVmFsaWRhdG9yOworLy88LzEuMmNvbXBhdD4KKworCisKKworLyoKKy0tLQorCitzY3JpcHQ6IEZvcm0uVmFsaWRhdG9yLklubGluZS5qcworCituYW1lOiBGb3JtLlZhbGlkYXRvci5JbmxpbmUKKworZGVzY3JpcHRpb246IEV4dGVuZHMgRm9ybS5WYWxpZGF0b3IgdG8gYWRkIGlubGluZSBtZXNzYWdlcy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gL0Zvcm0uVmFsaWRhdG9yCisKK3Byb3ZpZGVzOiBbRm9ybS5WYWxpZGF0b3IuSW5saW5lXQorCisuLi4KKyovCisKK0Zvcm0uVmFsaWRhdG9yLklubGluZSA9IG5ldyBDbGFzcyh7CisKKwlFeHRlbmRzOiBGb3JtLlZhbGlkYXRvciwKKworCW9wdGlvbnM6IHsKKwkJc2hvd0Vycm9yOiBmdW5jdGlvbihlcnJvckVsZW1lbnQpeworCQkJaWYgKGVycm9yRWxlbWVudC5yZXZlYWwpIGVycm9yRWxlbWVudC5yZXZlYWwoKTsKKwkJCWVsc2UgZXJyb3JFbGVtZW50LnNldFN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJyk7CisJCX0sCisJCWhpZGVFcnJvcjogZnVuY3Rpb24oZXJyb3JFbGVtZW50KXsKKwkJCWlmIChlcnJvckVsZW1lbnQuZGlzc29sdmUpIGVycm9yRWxlbWVudC5kaXNzb2x2ZSgpOworCQkJZWxzZSBlcnJvckVsZW1lbnQuc2V0U3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpOworCQl9LAorCQlzY3JvbGxUb0Vycm9yc09uU3VibWl0OiB0cnVlLAorCQlzY3JvbGxUb0Vycm9yc09uQmx1cjogZmFsc2UsCisJCXNjcm9sbFRvRXJyb3JzT25DaGFuZ2U6IGZhbHNlLAorCQlzY3JvbGxGeE9wdGlvbnM6IHsKKwkJCXRyYW5zaXRpb246ICdxdWFkOm91dCcsCisJCQlvZmZzZXQ6IHsKKwkJCQl5OiAtMjAKKwkJCX0KKwkJfQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihmb3JtLCBvcHRpb25zKXsKKwkJdGhpcy5wYXJlbnQoZm9ybSwgb3B0aW9ucyk7CisJCXRoaXMuYWRkRXZlbnQoJ29uRWxlbWVudFZhbGlkYXRlJywgZnVuY3Rpb24oaXNWYWxpZCwgZmllbGQsIGNsYXNzTmFtZSwgd2Fybil7CisJCQl2YXIgdmFsaWRhdG9yID0gdGhpcy5nZXRWYWxpZGF0b3IoY2xhc3NOYW1lKTsKKwkJCWlmICghaXNWYWxpZCAmJiB2YWxpZGF0b3IuZ2V0RXJyb3IoZmllbGQpKXsKKwkJCQlpZiAod2FybikgZmllbGQuYWRkQ2xhc3MoJ3dhcm5pbmcnKTsKKwkJCQl2YXIgYWR2aWNlID0gdGhpcy5tYWtlQWR2aWNlKGNsYXNzTmFtZSwgZmllbGQsIHZhbGlkYXRvci5nZXRFcnJvcihmaWVsZCksIHdhcm4pOworCQkJCXRoaXMuaW5zZXJ0QWR2aWNlKGFkdmljZSwgZmllbGQpOworCQkJCXRoaXMuc2hvd0FkdmljZShjbGFzc05hbWUsIGZpZWxkKTsKKwkJCX0gZWxzZSB7CisJCQkJdGhpcy5oaWRlQWR2aWNlKGNsYXNzTmFtZSwgZmllbGQpOworCQkJfQorCQl9KTsKKwl9LAorCisJbWFrZUFkdmljZTogZnVuY3Rpb24oY2xhc3NOYW1lLCBmaWVsZCwgZXJyb3IsIHdhcm4peworCQl2YXIgZXJyb3JNc2cgPSAod2FybikgPyB0aGlzLndhcm5pbmdQcmVmaXggOiB0aGlzLmVycm9yUHJlZml4OworCQkJZXJyb3JNc2cgKz0gKHRoaXMub3B0aW9ucy51c2VUaXRsZXMpID8gZmllbGQudGl0bGUgfHwgZXJyb3I6ZXJyb3I7CisJCXZhciBjc3NDbGFzcyA9ICh3YXJuKSA/ICd3YXJuaW5nLWFkdmljZScgOiAndmFsaWRhdGlvbi1hZHZpY2UnOworCQl2YXIgYWR2aWNlID0gdGhpcy5nZXRBZHZpY2UoY2xhc3NOYW1lLCBmaWVsZCk7CisJCWlmIChhZHZpY2UpeworCQkJYWR2aWNlID0gYWR2aWNlLnNldCgnaHRtbCcsIGVycm9yTXNnKTsKKwkJfSBlbHNlIHsKKwkJCWFkdmljZSA9IG5ldyBFbGVtZW50KCdkaXYnLCB7CisJCQkJaHRtbDogZXJyb3JNc2csCisJCQkJc3R5bGVzOiB7IGRpc3BsYXk6ICdub25lJyB9LAorCQkJCWlkOiAnYWR2aWNlLScgKyBjbGFzc05hbWUuc3BsaXQoJzonKVswXSArICctJyArIHRoaXMuZ2V0RmllbGRJZChmaWVsZCkKKwkJCX0pLmFkZENsYXNzKGNzc0NsYXNzKTsKKwkJfQorCQlmaWVsZC5zdG9yZSgnJG1vbzphZHZpY2UtJyArIGNsYXNzTmFtZSwgYWR2aWNlKTsKKwkJcmV0dXJuIGFkdmljZTsKKwl9LAorCisJZ2V0RmllbGRJZCA6IGZ1bmN0aW9uKGZpZWxkKXsKKwkJcmV0dXJuIGZpZWxkLmlkID8gZmllbGQuaWQgOiBmaWVsZC5pZCA9ICdpbnB1dF8nICsgZmllbGQubmFtZTsKKwl9LAorCisJc2hvd0FkdmljZTogZnVuY3Rpb24oY2xhc3NOYW1lLCBmaWVsZCl7CisJCXZhciBhZHZpY2UgPSB0aGlzLmdldEFkdmljZShjbGFzc05hbWUsIGZpZWxkKTsKKwkJaWYgKAorCQkJYWR2aWNlICYmCisJCQkhZmllbGQucmV0cmlldmUoJyRtb286JyArIHRoaXMuZ2V0UHJvcE5hbWUoY2xhc3NOYW1lKSkgJiYKKwkJCSgKKwkJCQlhZHZpY2UuZ2V0U3R5bGUoJ2Rpc3BsYXknKSA9PSAnbm9uZScgfHwKKwkJCQlhZHZpY2UuZ2V0U3R5bGUoJ3Zpc2libGl0eScpID09ICdoaWRkZW4nIHx8CisJCQkJYWR2aWNlLmdldFN0eWxlKCdvcGFjaXR5JykgPT0gMAorCQkJKQorCQkpeworCQkJZmllbGQuc3RvcmUoJyRtb286JyArIHRoaXMuZ2V0UHJvcE5hbWUoY2xhc3NOYW1lKSwgdHJ1ZSk7CisJCQl0aGlzLm9wdGlvbnMuc2hvd0Vycm9yKGFkdmljZSk7CisJCQl0aGlzLmZpcmVFdmVudCgnc2hvd0FkdmljZScsIFtmaWVsZCwgYWR2aWNlLCBjbGFzc05hbWVdKTsKKwkJfQorCX0sCisKKwloaWRlQWR2aWNlOiBmdW5jdGlvbihjbGFzc05hbWUsIGZpZWxkKXsKKwkJdmFyIGFkdmljZSA9IHRoaXMuZ2V0QWR2aWNlKGNsYXNzTmFtZSwgZmllbGQpOworCQlpZiAoYWR2aWNlICYmIGZpZWxkLnJldHJpZXZlKCckbW9vOicgKyB0aGlzLmdldFByb3BOYW1lKGNsYXNzTmFtZSkpKXsKKwkJCWZpZWxkLnN0b3JlKCckbW9vOicgKyB0aGlzLmdldFByb3BOYW1lKGNsYXNzTmFtZSksIGZhbHNlKTsKKwkJCXRoaXMub3B0aW9ucy5oaWRlRXJyb3IoYWR2aWNlKTsKKwkJCXRoaXMuZmlyZUV2ZW50KCdoaWRlQWR2aWNlJywgW2ZpZWxkLCBhZHZpY2UsIGNsYXNzTmFtZV0pOworCQl9CisJfSwKKworCWdldFByb3BOYW1lOiBmdW5jdGlvbihjbGFzc05hbWUpeworCQlyZXR1cm4gJ2FkdmljZScgKyBjbGFzc05hbWU7CisJfSwKKworCXJlc2V0RmllbGQ6IGZ1bmN0aW9uKGZpZWxkKXsKKwkJZmllbGQgPSBkb2N1bWVudC5pZChmaWVsZCk7CisJCWlmICghZmllbGQpIHJldHVybiB0aGlzOworCQl0aGlzLnBhcmVudChmaWVsZCk7CisJCWZpZWxkLmdldCgndmFsaWRhdG9ycycpLmVhY2goZnVuY3Rpb24oY2xhc3NOYW1lKXsKKwkJCXRoaXMuaGlkZUFkdmljZShjbGFzc05hbWUsIGZpZWxkKTsKKwkJfSwgdGhpcyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXRBbGxBZHZpY2VNZXNzYWdlczogZnVuY3Rpb24oZmllbGQsIGZvcmNlKXsKKwkJdmFyIGFkdmljZSA9IFtdOworCQlpZiAoZmllbGQuaGFzQ2xhc3MoJ2lnbm9yZVZhbGlkYXRpb24nKSAmJiAhZm9yY2UpIHJldHVybiBhZHZpY2U7CisJCXZhciB2YWxpZGF0b3JzID0gZmllbGQuZ2V0KCd2YWxpZGF0b3JzJykuc29tZShmdW5jdGlvbihjbil7CisJCQl2YXIgd2FybmVyID0gY24udGVzdCgnXndhcm4tJykgfHwgZmllbGQuaGFzQ2xhc3MoJ3dhcm5Pbmx5Jyk7CisJCQlpZiAod2FybmVyKSBjbiA9IGNuLnJlcGxhY2UoL153YXJuLS8sICcnKTsKKwkJCXZhciB2YWxpZGF0b3IgPSB0aGlzLmdldFZhbGlkYXRvcihjbik7CisJCQlpZiAoIXZhbGlkYXRvcikgcmV0dXJuOworCQkJYWR2aWNlLnB1c2goeworCQkJCW1lc3NhZ2U6IHZhbGlkYXRvci5nZXRFcnJvcihmaWVsZCksCisJCQkJd2Fybk9ubHk6IHdhcm5lciwKKwkJCQlwYXNzZWQ6IHZhbGlkYXRvci50ZXN0KCksCisJCQkJdmFsaWRhdG9yOiB2YWxpZGF0b3IKKwkJCX0pOworCQl9LCB0aGlzKTsKKwkJcmV0dXJuIGFkdmljZTsKKwl9LAorCisJZ2V0QWR2aWNlOiBmdW5jdGlvbihjbGFzc05hbWUsIGZpZWxkKXsKKwkJcmV0dXJuIGZpZWxkLnJldHJpZXZlKCckbW9vOmFkdmljZS0nICsgY2xhc3NOYW1lKTsKKwl9LAorCisJaW5zZXJ0QWR2aWNlOiBmdW5jdGlvbihhZHZpY2UsIGZpZWxkKXsKKwkJLy9DaGVjayBmb3IgZXJyb3IgcG9zaXRpb24gcHJvcAorCQl2YXIgcHJvcHMgPSBmaWVsZC5nZXQoJ3ZhbGlkYXRvclByb3BzJyk7CisJCS8vQnVpbGQgYWR2aWNlCisJCWlmICghcHJvcHMubXNnUG9zIHx8ICFkb2N1bWVudC5pZChwcm9wcy5tc2dQb3MpKXsKKwkJCWlmIChmaWVsZC50eXBlICYmIGZpZWxkLnR5cGUudG9Mb3dlckNhc2UoKSA9PSAncmFkaW8nKSBmaWVsZC5nZXRQYXJlbnQoKS5hZG9wdChhZHZpY2UpOworCQkJZWxzZSBhZHZpY2UuaW5qZWN0KGRvY3VtZW50LmlkKGZpZWxkKSwgJ2FmdGVyJyk7CisJCX0gZWxzZSB7CisJCQlkb2N1bWVudC5pZChwcm9wcy5tc2dQb3MpLmdyYWIoYWR2aWNlKTsKKwkJfQorCX0sCisKKwl2YWxpZGF0ZUZpZWxkOiBmdW5jdGlvbihmaWVsZCwgZm9yY2UsIHNjcm9sbCl7CisJCXZhciByZXN1bHQgPSB0aGlzLnBhcmVudChmaWVsZCwgZm9yY2UpOworCQlpZiAoKCh0aGlzLm9wdGlvbnMuc2Nyb2xsVG9FcnJvcnNPblN1Ym1pdCAmJiBzY3JvbGwgPT0gbnVsbCkgfHwgc2Nyb2xsKSAmJiAhcmVzdWx0KXsKKwkJCXZhciBmYWlsZWQgPSBkb2N1bWVudC5pZCh0aGlzKS5nZXRFbGVtZW50KCcudmFsaWRhdGlvbi1mYWlsZWQnKTsKKwkJCXZhciBwYXIgPSBkb2N1bWVudC5pZCh0aGlzKS5nZXRQYXJlbnQoKTsKKwkJCXdoaWxlIChwYXIgIT0gZG9jdW1lbnQuYm9keSAmJiBwYXIuZ2V0U2Nyb2xsU2l6ZSgpLnkgPT0gcGFyLmdldFNpemUoKS55KXsKKwkJCQlwYXIgPSBwYXIuZ2V0UGFyZW50KCk7CisJCQl9CisJCQl2YXIgZnggPSBwYXIucmV0cmlldmUoJyRtb286ZnZTY3JvbGxlcicpOworCQkJaWYgKCFmeCAmJiB3aW5kb3cuRnggJiYgRnguU2Nyb2xsKXsKKwkJCQlmeCA9IG5ldyBGeC5TY3JvbGwocGFyLCB0aGlzLm9wdGlvbnMuc2Nyb2xsRnhPcHRpb25zKTsKKwkJCQlwYXIuc3RvcmUoJyRtb286ZnZTY3JvbGxlcicsIGZ4KTsKKwkJCX0KKwkJCWlmIChmYWlsZWQpeworCQkJCWlmIChmeCkgZngudG9FbGVtZW50KGZhaWxlZCk7CisJCQkJZWxzZSBwYXIuc2Nyb2xsVG8ocGFyLmdldFNjcm9sbCgpLngsIGZhaWxlZC5nZXRQb3NpdGlvbihwYXIpLnkgLSAyMCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9LAorCisJd2F0Y2hGaWVsZHM6IGZ1bmN0aW9uKGZpZWxkcyl7CisJCWZpZWxkcy5lYWNoKGZ1bmN0aW9uKGVsKXsKKwkJaWYgKHRoaXMub3B0aW9ucy5ldmFsdWF0ZUZpZWxkc09uQmx1cil7CisJCQllbC5hZGRFdmVudCgnYmx1cicsIHRoaXMudmFsaWRhdGlvbk1vbml0b3IucGFzcyhbZWwsIGZhbHNlLCB0aGlzLm9wdGlvbnMuc2Nyb2xsVG9FcnJvcnNPbkJsdXJdLCB0aGlzKSk7CisJCX0KKwkJaWYgKHRoaXMub3B0aW9ucy5ldmFsdWF0ZUZpZWxkc09uQ2hhbmdlKXsKKwkJCQllbC5hZGRFdmVudCgnY2hhbmdlJywgdGhpcy52YWxpZGF0aW9uTW9uaXRvci5wYXNzKFtlbCwgdHJ1ZSwgdGhpcy5vcHRpb25zLnNjcm9sbFRvRXJyb3JzT25DaGFuZ2VdLCB0aGlzKSk7CisJCQl9CisJCX0sIHRoaXMpOworCX0KKworfSk7CisKKworLyoKKy0tLQorCitzY3JpcHQ6IEZvcm0uVmFsaWRhdG9yLkV4dHJhcy5qcworCituYW1lOiBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKworZGVzY3JpcHRpb246IEFkZGl0aW9uYWwgdmFsaWRhdG9ycyBmb3IgdGhlIEZvcm0uVmFsaWRhdG9yIGNsYXNzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSAvRm9ybS5WYWxpZGF0b3IKKworcHJvdmlkZXM6IFtGb3JtLlZhbGlkYXRvci5FeHRyYXNdCisKKy4uLgorKi8KK0Zvcm0uVmFsaWRhdG9yLmFkZEFsbFRoZXNlKFsKKworCVsndmFsaWRhdGUtZW5mb3JjZS1vbmNoZWNrJywgeworCQl0ZXN0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQl2YXIgZnYgPSBlbGVtZW50LmdldFBhcmVudCgnZm9ybScpLnJldHJpZXZlKCd2YWxpZGF0b3InKTsKKwkJCWlmICghZnYpIHJldHVybiB0cnVlOworCQkJKHByb3BzLnRvRW5mb3JjZSB8fCBkb2N1bWVudC5pZChwcm9wcy5lbmZvcmNlQ2hpbGRyZW5PZikuZ2V0RWxlbWVudHMoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJykpLm1hcChmdW5jdGlvbihpdGVtKXsKKwkJCQlpZiAoZWxlbWVudC5jaGVja2VkKXsKKwkJCQkJZnYuZW5mb3JjZUZpZWxkKGl0ZW0pOworCQkJCX0gZWxzZSB7CisJCQkJCWZ2Lmlnbm9yZUZpZWxkKGl0ZW0pOworCQkJCQlmdi5yZXNldEZpZWxkKGl0ZW0pOworCQkJCX0KKwkJCX0pOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9XSwKKworCVsndmFsaWRhdGUtaWdub3JlLW9uY2hlY2snLCB7CisJCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BzKXsKKwkJCXZhciBmdiA9IGVsZW1lbnQuZ2V0UGFyZW50KCdmb3JtJykucmV0cmlldmUoJ3ZhbGlkYXRvcicpOworCQkJaWYgKCFmdikgcmV0dXJuIHRydWU7CisJCQkocHJvcHMudG9JZ25vcmUgfHwgZG9jdW1lbnQuaWQocHJvcHMuaWdub3JlQ2hpbGRyZW5PZikuZ2V0RWxlbWVudHMoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJykpLmVhY2goZnVuY3Rpb24oaXRlbSl7CisJCQkJaWYgKGVsZW1lbnQuY2hlY2tlZCl7CisJCQkJCWZ2Lmlnbm9yZUZpZWxkKGl0ZW0pOworCQkJCQlmdi5yZXNldEZpZWxkKGl0ZW0pOworCQkJCX0gZWxzZSB7CisJCQkJCWZ2LmVuZm9yY2VGaWVsZChpdGVtKTsKKwkJCQl9CisJCQl9KTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfV0sCisKKwlbJ3ZhbGlkYXRlLW5vc3BhY2UnLCB7CisJCWVycm9yTXNnOiBmdW5jdGlvbigpeworCQkJcmV0dXJuIEZvcm0uVmFsaWRhdG9yLmdldE1zZygnbm9TcGFjZScpOworCQl9LAorCQl0ZXN0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQlyZXR1cm4gIWVsZW1lbnQuZ2V0KCd2YWx1ZScpLnRlc3QoL1xzLyk7CisJCX0KKwl9XSwKKworCVsndmFsaWRhdGUtdG9nZ2xlLW9uY2hlY2snLCB7CisJCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BzKXsKKwkJCXZhciBmdiA9IGVsZW1lbnQuZ2V0UGFyZW50KCdmb3JtJykucmV0cmlldmUoJ3ZhbGlkYXRvcicpOworCQkJaWYgKCFmdikgcmV0dXJuIHRydWU7CisJCQl2YXIgZWxlQXJyID0gcHJvcHMudG9Ub2dnbGUgfHwgZG9jdW1lbnQuaWQocHJvcHMudG9Ub2dnbGVDaGlsZHJlbk9mKS5nZXRFbGVtZW50cygnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEnKTsKKwkJCWlmICghZWxlbWVudC5jaGVja2VkKXsKKwkJCQllbGVBcnIuZWFjaChmdW5jdGlvbihpdGVtKXsKKwkJCQkJZnYuaWdub3JlRmllbGQoaXRlbSk7CisJCQkJCWZ2LnJlc2V0RmllbGQoaXRlbSk7CisJCQkJfSk7CisJCQl9IGVsc2UgeworCQkJCWVsZUFyci5lYWNoKGZ1bmN0aW9uKGl0ZW0peworCQkJCQlmdi5lbmZvcmNlRmllbGQoaXRlbSk7CisJCQkJfSk7CisJCQl9CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX1dLAorCisJWyd2YWxpZGF0ZS1yZXFjaGstYnlub2RlJywgeworCQllcnJvck1zZzogZnVuY3Rpb24oKXsKKwkJCXJldHVybiBGb3JtLlZhbGlkYXRvci5nZXRNc2coJ3JlcUNoa0J5Tm9kZScpOworCQl9LAorCQl0ZXN0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQlyZXR1cm4gKGRvY3VtZW50LmlkKHByb3BzLm5vZGVJZCkuZ2V0RWxlbWVudHMocHJvcHMuc2VsZWN0b3IgfHwgJ2lucHV0W3R5cGU9Y2hlY2tib3hdLCBpbnB1dFt0eXBlPXJhZGlvXScpKS5zb21lKGZ1bmN0aW9uKGl0ZW0peworCQkJCXJldHVybiBpdGVtLmNoZWNrZWQ7CisJCQl9KTsKKwkJfQorCX1dLAorCisJWyd2YWxpZGF0ZS1yZXF1aXJlZC1jaGVjaycsIHsKKwkJZXJyb3JNc2c6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BzKXsKKwkJCXJldHVybiBwcm9wcy51c2VUaXRsZSA/IGVsZW1lbnQuZ2V0KCd0aXRsZScpIDogRm9ybS5WYWxpZGF0b3IuZ2V0TXNnKCdyZXF1aXJlZENoaycpOworCQl9LAorCQl0ZXN0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQlyZXR1cm4gISFlbGVtZW50LmNoZWNrZWQ7CisJCX0KKwl9XSwKKworCVsndmFsaWRhdGUtcmVxY2hrLWJ5bmFtZScsIHsKKwkJZXJyb3JNc2c6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BzKXsKKwkJCXJldHVybiBGb3JtLlZhbGlkYXRvci5nZXRNc2coJ3JlcUNoa0J5TmFtZScpLnN1YnN0aXR1dGUoe2xhYmVsOiBwcm9wcy5sYWJlbCB8fCBlbGVtZW50LmdldCgndHlwZScpfSk7CisJCX0sCisJCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BzKXsKKwkJCXZhciBncnBOYW1lID0gcHJvcHMuZ3JvdXBOYW1lIHx8IGVsZW1lbnQuZ2V0KCduYW1lJyk7CisJCQl2YXIgb25lQ2hlY2tlZEl0ZW0gPSAkJChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShncnBOYW1lKSkuc29tZShmdW5jdGlvbihpdGVtLCBpbmRleCl7CisJCQkJcmV0dXJuIGl0ZW0uY2hlY2tlZDsKKwkJCX0pOworCQkJdmFyIGZ2ID0gZWxlbWVudC5nZXRQYXJlbnQoJ2Zvcm0nKS5yZXRyaWV2ZSgndmFsaWRhdG9yJyk7CisJCQlpZiAob25lQ2hlY2tlZEl0ZW0gJiYgZnYpIGZ2LnJlc2V0RmllbGQoZWxlbWVudCk7CisJCQlyZXR1cm4gb25lQ2hlY2tlZEl0ZW07CisJCX0KKwl9XSwKKworCVsndmFsaWRhdGUtbWF0Y2gnLCB7CisJCWVycm9yTXNnOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0TXNnKCdtYXRjaCcpLnN1YnN0aXR1dGUoe21hdGNoTmFtZTogcHJvcHMubWF0Y2hOYW1lIHx8IGRvY3VtZW50LmlkKHByb3BzLm1hdGNoSW5wdXQpLmdldCgnbmFtZScpfSk7CisJCX0sCisJCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BzKXsKKwkJCXZhciBlbGVWYWwgPSBlbGVtZW50LmdldCgndmFsdWUnKTsKKwkJCXZhciBtYXRjaFZhbCA9IGRvY3VtZW50LmlkKHByb3BzLm1hdGNoSW5wdXQpICYmIGRvY3VtZW50LmlkKHByb3BzLm1hdGNoSW5wdXQpLmdldCgndmFsdWUnKTsKKwkJCXJldHVybiBlbGVWYWwgJiYgbWF0Y2hWYWwgPyBlbGVWYWwgPT0gbWF0Y2hWYWwgOiB0cnVlOworCQl9CisJfV0sCisKKwlbJ3ZhbGlkYXRlLWFmdGVyLWRhdGUnLCB7CisJCWVycm9yTXNnOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0TXNnKCdhZnRlckRhdGUnKS5zdWJzdGl0dXRlKHsKKwkJCQlsYWJlbDogcHJvcHMuYWZ0ZXJMYWJlbCB8fCAocHJvcHMuYWZ0ZXJFbGVtZW50ID8gRm9ybS5WYWxpZGF0b3IuZ2V0TXNnKCdzdGFydERhdGUnKSA6IEZvcm0uVmFsaWRhdG9yLmdldE1zZygnY3VycmVudERhdGUnKSkKKwkJCX0pOworCQl9LAorCQl0ZXN0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQl2YXIgc3RhcnQgPSBkb2N1bWVudC5pZChwcm9wcy5hZnRlckVsZW1lbnQpID8gRGF0ZS5wYXJzZShkb2N1bWVudC5pZChwcm9wcy5hZnRlckVsZW1lbnQpLmdldCgndmFsdWUnKSkgOiBuZXcgRGF0ZSgpOworCQkJdmFyIGVuZCA9IERhdGUucGFyc2UoZWxlbWVudC5nZXQoJ3ZhbHVlJykpOworCQkJcmV0dXJuIGVuZCAmJiBzdGFydCA/IGVuZCA+PSBzdGFydCA6IHRydWU7CisJCX0KKwl9XSwKKworCVsndmFsaWRhdGUtYmVmb3JlLWRhdGUnLCB7CisJCWVycm9yTXNnOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0TXNnKCdiZWZvcmVEYXRlJykuc3Vic3RpdHV0ZSh7CisJCQkJbGFiZWw6IHByb3BzLmJlZm9yZUxhYmVsIHx8IChwcm9wcy5iZWZvcmVFbGVtZW50ID8gRm9ybS5WYWxpZGF0b3IuZ2V0TXNnKCdlbmREYXRlJykgOiBGb3JtLlZhbGlkYXRvci5nZXRNc2coJ2N1cnJlbnREYXRlJykpCisJCQl9KTsKKwkJfSwKKwkJdGVzdDogZnVuY3Rpb24oZWxlbWVudCwgcHJvcHMpeworCQkJdmFyIHN0YXJ0ID0gRGF0ZS5wYXJzZShlbGVtZW50LmdldCgndmFsdWUnKSk7CisJCQl2YXIgZW5kID0gZG9jdW1lbnQuaWQocHJvcHMuYmVmb3JlRWxlbWVudCkgPyBEYXRlLnBhcnNlKGRvY3VtZW50LmlkKHByb3BzLmJlZm9yZUVsZW1lbnQpLmdldCgndmFsdWUnKSkgOiBuZXcgRGF0ZSgpOworCQkJcmV0dXJuIGVuZCAmJiBzdGFydCA/IGVuZCA+PSBzdGFydCA6IHRydWU7CisJCX0KKwl9XSwKKworCVsndmFsaWRhdGUtY3VzdG9tLXJlcXVpcmVkJywgeworCQllcnJvck1zZzogZnVuY3Rpb24oKXsKKwkJCXJldHVybiBGb3JtLlZhbGlkYXRvci5nZXRNc2coJ3JlcXVpcmVkJyk7CisJCX0sCisJCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BzKXsKKwkJCXJldHVybiBlbGVtZW50LmdldCgndmFsdWUnKSAhPSBwcm9wcy5lbXB0eVZhbHVlOworCQl9CisJfV0sCisKKwlbJ3ZhbGlkYXRlLXNhbWUtbW9udGgnLCB7CisJCWVycm9yTXNnOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQl2YXIgc3RhcnRNbyA9IGRvY3VtZW50LmlkKHByb3BzLnNhbWVNb250aEFzKSAmJiBkb2N1bWVudC5pZChwcm9wcy5zYW1lTW9udGhBcykuZ2V0KCd2YWx1ZScpOworCQkJdmFyIGVsZVZhbCA9IGVsZW1lbnQuZ2V0KCd2YWx1ZScpOworCQkJaWYgKGVsZVZhbCAhPSAnJykgcmV0dXJuIEZvcm0uVmFsaWRhdG9yLmdldE1zZyhzdGFydE1vID8gJ3NhbWVNb250aCcgOiAnc3RhcnRNb250aCcpOworCQl9LAorCQl0ZXN0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQl2YXIgZDEgPSBEYXRlLnBhcnNlKGVsZW1lbnQuZ2V0KCd2YWx1ZScpKTsKKwkJCXZhciBkMiA9IERhdGUucGFyc2UoZG9jdW1lbnQuaWQocHJvcHMuc2FtZU1vbnRoQXMpICYmIGRvY3VtZW50LmlkKHByb3BzLnNhbWVNb250aEFzKS5nZXQoJ3ZhbHVlJykpOworCQkJcmV0dXJuIGQxICYmIGQyID8gZDEuZm9ybWF0KCclQicpID09IGQyLmZvcm1hdCgnJUInKSA6IHRydWU7CisJCX0KKwl9XSwKKworCisJWyd2YWxpZGF0ZS1jYy1udW0nLCB7CisJCWVycm9yTXNnOiBmdW5jdGlvbihlbGVtZW50KXsKKwkJCXZhciBjY051bSA9IGVsZW1lbnQuZ2V0KCd2YWx1ZScpLnJlcGxhY2UoL1teMC05XS9nLCAnJyk7CisJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0TXNnKCdjcmVkaXRjYXJkJykuc3Vic3RpdHV0ZSh7bGVuZ3RoOiBjY051bS5sZW5ndGh9KTsKKwkJfSwKKwkJdGVzdDogZnVuY3Rpb24oZWxlbWVudCl7CisJCQkvLyByZXF1aXJlZCBpcyBhIGRpZmZlcmVudCB0ZXN0CisJCQlpZiAoRm9ybS5WYWxpZGF0b3IuZ2V0VmFsaWRhdG9yKCdJc0VtcHR5JykudGVzdChlbGVtZW50KSkgcmV0dXJuIHRydWU7CisKKwkJCS8vIENsZWFuIG51bWJlciB2YWx1ZQorCQkJdmFyIGNjTnVtID0gZWxlbWVudC5nZXQoJ3ZhbHVlJyk7CisJCQljY051bSA9IGNjTnVtLnJlcGxhY2UoL1teMC05XS9nLCAnJyk7CisKKwkJCXZhciB2YWxpZF90eXBlID0gZmFsc2U7CisKKwkJCWlmIChjY051bS50ZXN0KC9eNFswLTldezEyfShbMC05XXszfSk/JC8pKSB2YWxpZF90eXBlID0gJ1Zpc2EnOworCQkJZWxzZSBpZiAoY2NOdW0udGVzdCgvXjVbMS01XShbMC05XXsxNH0pJC8pKSB2YWxpZF90eXBlID0gJ01hc3RlciBDYXJkJzsKKwkJCWVsc2UgaWYgKGNjTnVtLnRlc3QoL14zWzQ3XVswLTldezEzfSQvKSkgdmFsaWRfdHlwZSA9ICdBbWVyaWNhbiBFeHByZXNzJzsKKwkJCWVsc2UgaWYgKGNjTnVtLnRlc3QoL142MDExWzAtOV17MTJ9JC8pKSB2YWxpZF90eXBlID0gJ0Rpc2NvdmVyJzsKKworCQkJaWYgKHZhbGlkX3R5cGUpeworCQkJCXZhciBzdW0gPSAwOworCQkJCXZhciBjdXIgPSAwOworCisJCQkJZm9yICh2YXIgaT1jY051bS5sZW5ndGgtMTsgaT49MDsgLS1pKXsKKwkJCQkJY3VyID0gY2NOdW0uY2hhckF0KGkpLnRvSW50KCk7CisJCQkJCWlmIChjdXIgPT0gMCkgY29udGludWU7CisKKwkJCQkJaWYgKChjY051bS5sZW5ndGgtaSkgJSAyID09IDApIGN1ciArPSBjdXI7CisJCQkJCWlmIChjdXIgPiA5KXsKKwkJCQkJCWN1ciA9IGN1ci50b1N0cmluZygpLmNoYXJBdCgwKS50b0ludCgpICsgY3VyLnRvU3RyaW5nKCkuY2hhckF0KDEpLnRvSW50KCk7CisJCQkJCX0KKworCQkJCQlzdW0gKz0gY3VyOworCQkJCX0KKwkJCQlpZiAoKHN1bSAlIDEwKSA9PSAwKSByZXR1cm4gdHJ1ZTsKKwkJCX0KKworCQkJdmFyIGNodW5rcyA9ICcnOworCQkJd2hpbGUgKGNjTnVtICE9ICcnKXsKKwkJCQljaHVua3MgKz0gJyAnICsgY2NOdW0uc3Vic3RyKDAsNCk7CisJCQkJY2NOdW0gPSBjY051bS5zdWJzdHIoNCk7CisJCQl9CisKKwkJCWVsZW1lbnQuZ2V0UGFyZW50KCdmb3JtJykucmV0cmlldmUoJ3ZhbGlkYXRvcicpLmlnbm9yZUZpZWxkKGVsZW1lbnQpOworCQkJZWxlbWVudC5zZXQoJ3ZhbHVlJywgY2h1bmtzLmNsZWFuKCkpOworCQkJZWxlbWVudC5nZXRQYXJlbnQoJ2Zvcm0nKS5yZXRyaWV2ZSgndmFsaWRhdG9yJykuZW5mb3JjZUZpZWxkKGVsZW1lbnQpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfV0KKworCitdKTsKKworCisvKgorLS0tCisKK3NjcmlwdDogT3ZlclRleHQuanMKKworbmFtZTogT3ZlclRleHQKKworZGVzY3JpcHRpb246IFNob3dzIHRleHQgb3ZlciBhbiBpbnB1dCB0aGF0IGRpc2FwcGVhcnMgd2hlbiB0aGUgdXNlciBjbGlja3MgaW50byBpdC4gVGhlIHRleHQgcmVtYWlucyBoaWRkZW4gaWYgdGhlIHVzZXIgYWRkcyBhIHZhbHVlLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSBDb3JlL09wdGlvbnMKKyAgLSBDb3JlL0V2ZW50cworICAtIENvcmUvRWxlbWVudC5FdmVudAorICAtIENsYXNzLkJpbmRzCisgIC0gQ2xhc3MuT2NjbHVkZQorICAtIEVsZW1lbnQuUG9zaXRpb24KKyAgLSBFbGVtZW50LlNob3J0Y3V0cworCitwcm92aWRlczogW092ZXJUZXh0XQorCisuLi4KKyovCisKK3ZhciBPdmVyVGV4dCA9IG5ldyBDbGFzcyh7CisKKwlJbXBsZW1lbnRzOiBbT3B0aW9ucywgRXZlbnRzLCBDbGFzcy5PY2NsdWRlXSwKKworCUJpbmRzOiBbJ3JlcG9zaXRpb24nLCAnYXNzZXJ0JywgJ2ZvY3VzJywgJ2hpZGUnXSwKKworCW9wdGlvbnM6IHsvKgorCQl0ZXh0T3ZlcnJpZGU6IG51bGwsCisJCW9uRm9jdXM6IGZ1bmN0aW9uKCl7fSwKKwkJb25UZXh0SGlkZTogZnVuY3Rpb24odGV4dEVsLCBpbnB1dEVsKXt9LAorCQlvblRleHRTaG93OiBmdW5jdGlvbih0ZXh0RWwsIGlucHV0RWwpe30sICovCisJCWVsZW1lbnQ6ICdsYWJlbCcsCisJCWxhYmVsQ2xhc3M6ICdvdmVyVHh0TGFiZWwnLAorCQlwb3NpdGlvbk9wdGlvbnM6IHsKKwkJCXBvc2l0aW9uOiAndXBwZXJMZWZ0JywKKwkJCWVkZ2U6ICd1cHBlckxlZnQnLAorCQkJb2Zmc2V0OiB7CisJCQkJeDogNCwKKwkJCQl5OiAyCisJCQl9CisJCX0sCisJCXBvbGw6IGZhbHNlLAorCQlwb2xsSW50ZXJ2YWw6IDI1MCwKKwkJd3JhcDogZmFsc2UKKwl9LAorCisJcHJvcGVydHk6ICdPdmVyVGV4dCcsCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXsKKwkJZWxlbWVudCA9IHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmlkKGVsZW1lbnQpOworCisJCWlmICh0aGlzLm9jY2x1ZGUoKSkgcmV0dXJuIHRoaXMub2NjbHVkZWQ7CisJCXRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTsKKworCQl0aGlzLmF0dGFjaChlbGVtZW50KTsKKwkJT3ZlclRleHQuaW5zdGFuY2VzLnB1c2godGhpcyk7CisKKwkJaWYgKHRoaXMub3B0aW9ucy5wb2xsKSB0aGlzLnBvbGwoKTsKKwl9LAorCisJdG9FbGVtZW50OiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5lbGVtZW50OworCX0sCisKKwlhdHRhY2g6IGZ1bmN0aW9uKCl7CisJCXZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50LAorCQkJb3B0aW9ucyA9IHRoaXMub3B0aW9ucywKKwkJCXZhbHVlID0gb3B0aW9ucy50ZXh0T3ZlcnJpZGUgfHwgZWxlbWVudC5nZXQoJ2FsdCcpIHx8IGVsZW1lbnQuZ2V0KCd0aXRsZScpOworCisJCWlmICghdmFsdWUpIHJldHVybiB0aGlzOworCisJCXZhciB0ZXh0ID0gdGhpcy50ZXh0ID0gbmV3IEVsZW1lbnQob3B0aW9ucy5lbGVtZW50LCB7CisJCQknY2xhc3MnOiBvcHRpb25zLmxhYmVsQ2xhc3MsCisJCQlzdHlsZXM6IHsKKwkJCQlsaW5lSGVpZ2h0OiAnbm9ybWFsJywKKwkJCQlwb3NpdGlvbjogJ2Fic29sdXRlJywKKwkJCQljdXJzb3I6ICd0ZXh0JworCQkJfSwKKwkJCWh0bWw6IHZhbHVlLAorCQkJZXZlbnRzOiB7CisJCQkJY2xpY2s6IHRoaXMuaGlkZS5wYXNzKG9wdGlvbnMuZWxlbWVudCA9PSAnbGFiZWwnLCB0aGlzKQorCQkJfQorCQl9KS5pbmplY3QoZWxlbWVudCwgJ2FmdGVyJyk7CisKKwkJaWYgKG9wdGlvbnMuZWxlbWVudCA9PSAnbGFiZWwnKXsKKwkJCWlmICghZWxlbWVudC5nZXQoJ2lkJykpIGVsZW1lbnQuc2V0KCdpZCcsICdpbnB1dF8nICsgU3RyaW5nLnVuaXF1ZUlEKCkpOworCQkJdGV4dC5zZXQoJ2ZvcicsIGVsZW1lbnQuZ2V0KCdpZCcpKTsKKwkJfQorCisJCWlmIChvcHRpb25zLndyYXApeworCQkJdGhpcy50ZXh0SG9sZGVyID0gbmV3IEVsZW1lbnQoJ2Rpdi5vdmVyVHh0V3JhcHBlcicsIHsKKwkJCQlzdHlsZXM6IHsKKwkJCQkJbGluZUhlaWdodDogJ25vcm1hbCcsCisJCQkJCXBvc2l0aW9uOiAncmVsYXRpdmUnCisJCQkJfQorCQkJfSkuZ3JhYih0ZXh0KS5pbmplY3QoZWxlbWVudCwgJ2JlZm9yZScpOworCQl9CisKKwkJcmV0dXJuIHRoaXMuZW5hYmxlKCk7CisJfSwKKworCWRlc3Ryb3k6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZWxlbWVudC5lbGltaW5hdGUodGhpcy5wcm9wZXJ0eSk7IC8vIENsYXNzLk9jY2x1ZGUgc3RvcmFnZQorCQl0aGlzLmRpc2FibGUoKTsKKwkJaWYgKHRoaXMudGV4dCkgdGhpcy50ZXh0LmRlc3Ryb3koKTsKKwkJaWYgKHRoaXMudGV4dEhvbGRlcikgdGhpcy50ZXh0SG9sZGVyLmRlc3Ryb3koKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWRpc2FibGU6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZWxlbWVudC5yZW1vdmVFdmVudHMoeworCQkJZm9jdXM6IHRoaXMuZm9jdXMsCisJCQlibHVyOiB0aGlzLmFzc2VydCwKKwkJCWNoYW5nZTogdGhpcy5hc3NlcnQKKwkJfSk7CisJCXdpbmRvdy5yZW1vdmVFdmVudCgncmVzaXplJywgdGhpcy5yZXBvc2l0aW9uKTsKKwkJdGhpcy5oaWRlKHRydWUsIHRydWUpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZW5hYmxlOiBmdW5jdGlvbigpeworCQl0aGlzLmVsZW1lbnQuYWRkRXZlbnRzKHsKKwkJCWZvY3VzOiB0aGlzLmZvY3VzLAorCQkJYmx1cjogdGhpcy5hc3NlcnQsCisJCQljaGFuZ2U6IHRoaXMuYXNzZXJ0CisJCX0pOworCQl3aW5kb3cuYWRkRXZlbnQoJ3Jlc2l6ZScsIHRoaXMucmVwb3NpdGlvbik7CisJCXRoaXMuYXNzZXJ0KHRydWUpOworCQl0aGlzLnJlcG9zaXRpb24oKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXdyYXA6IGZ1bmN0aW9uKCl7CisJCWlmICh0aGlzLm9wdGlvbnMuZWxlbWVudCA9PSAnbGFiZWwnKXsKKwkJCWlmICghdGhpcy5lbGVtZW50LmdldCgnaWQnKSkgdGhpcy5lbGVtZW50LnNldCgnaWQnLCAnaW5wdXRfJyArIFN0cmluZy51bmlxdWVJRCgpKTsKKwkJCXRoaXMudGV4dC5zZXQoJ2ZvcicsIHRoaXMuZWxlbWVudC5nZXQoJ2lkJykpOworCQl9CisJfSwKKworCXN0YXJ0UG9sbGluZzogZnVuY3Rpb24oKXsKKwkJdGhpcy5wb2xsaW5nUGF1c2VkID0gZmFsc2U7CisJCXJldHVybiB0aGlzLnBvbGwoKTsKKwl9LAorCisJcG9sbDogZnVuY3Rpb24oc3RvcCl7CisJCS8vc3RhcnQgaW1tZWRpYXRlbHkKKwkJLy9wYXVzZSBvbiBmb2N1cworCQkvL3Jlc3VtZW9uIGJsdXIKKwkJaWYgKHRoaXMucG9sbGVyICYmICFzdG9wKSByZXR1cm4gdGhpczsKKwkJaWYgKHN0b3ApeworCQkJY2xlYXJJbnRlcnZhbCh0aGlzLnBvbGxlcik7CisJCX0gZWxzZSB7CisJCQl0aGlzLnBvbGxlciA9IChmdW5jdGlvbigpeworCQkJCWlmICghdGhpcy5wb2xsaW5nUGF1c2VkKSB0aGlzLmFzc2VydCh0cnVlKTsKKwkJCX0pLnBlcmlvZGljYWwodGhpcy5vcHRpb25zLnBvbGxJbnRlcnZhbCwgdGhpcyk7CisJCX0KKworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJc3RvcFBvbGxpbmc6IGZ1bmN0aW9uKCl7CisJCXRoaXMucG9sbGluZ1BhdXNlZCA9IHRydWU7CisJCXJldHVybiB0aGlzLnBvbGwodHJ1ZSk7CisJfSwKKworCWZvY3VzOiBmdW5jdGlvbigpeworCQlpZiAodGhpcy50ZXh0ICYmICghdGhpcy50ZXh0LmlzRGlzcGxheWVkKCkgfHwgdGhpcy5lbGVtZW50LmdldCgnZGlzYWJsZWQnKSkpIHJldHVybiB0aGlzOworCQlyZXR1cm4gdGhpcy5oaWRlKCk7CisJfSwKKworCWhpZGU6IGZ1bmN0aW9uKHN1cHByZXNzRm9jdXMsIGZvcmNlKXsKKwkJaWYgKHRoaXMudGV4dCAmJiAodGhpcy50ZXh0LmlzRGlzcGxheWVkKCkgJiYgKCF0aGlzLmVsZW1lbnQuZ2V0KCdkaXNhYmxlZCcpIHx8IGZvcmNlKSkpeworCQkJdGhpcy50ZXh0LmhpZGUoKTsKKwkJCXRoaXMuZmlyZUV2ZW50KCd0ZXh0SGlkZScsIFt0aGlzLnRleHQsIHRoaXMuZWxlbWVudF0pOworCQkJdGhpcy5wb2xsaW5nUGF1c2VkID0gdHJ1ZTsKKwkJCWlmICghc3VwcHJlc3NGb2N1cyl7CisJCQkJdHJ5IHsKKwkJCQkJdGhpcy5lbGVtZW50LmZpcmVFdmVudCgnZm9jdXMnKTsKKwkJCQkJdGhpcy5lbGVtZW50LmZvY3VzKCk7CisJCQkJfSBjYXRjaChlKXt9IC8vSUUgYmFyZnMgaWYgeW91IGNhbGwgZm9jdXMgb24gaGlkZGVuIGVsZW1lbnRzCisJCQl9CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXNob3c6IGZ1bmN0aW9uKCl7CisJCWlmICh0aGlzLnRleHQgJiYgIXRoaXMudGV4dC5pc0Rpc3BsYXllZCgpKXsKKwkJCXRoaXMudGV4dC5zaG93KCk7CisJCQl0aGlzLnJlcG9zaXRpb24oKTsKKwkJCXRoaXMuZmlyZUV2ZW50KCd0ZXh0U2hvdycsIFt0aGlzLnRleHQsIHRoaXMuZWxlbWVudF0pOworCQkJdGhpcy5wb2xsaW5nUGF1c2VkID0gZmFsc2U7CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXRlc3Q6IGZ1bmN0aW9uKCl7CisJCXJldHVybiAhdGhpcy5lbGVtZW50LmdldCgndmFsdWUnKTsKKwl9LAorCisJYXNzZXJ0OiBmdW5jdGlvbihzdXBwcmVzc0ZvY3VzKXsKKwkJcmV0dXJuIHRoaXNbdGhpcy50ZXN0KCkgPyAnc2hvdycgOiAnaGlkZSddKHN1cHByZXNzRm9jdXMpOworCX0sCisKKwlyZXBvc2l0aW9uOiBmdW5jdGlvbigpeworCQl0aGlzLmFzc2VydCh0cnVlKTsKKwkJaWYgKCF0aGlzLmVsZW1lbnQuaXNWaXNpYmxlKCkpIHJldHVybiB0aGlzLnN0b3BQb2xsaW5nKCkuaGlkZSgpOworCQlpZiAodGhpcy50ZXh0ICYmIHRoaXMudGVzdCgpKXsKKwkJCXRoaXMudGV4dC5wb3NpdGlvbihPYmplY3QubWVyZ2UodGhpcy5vcHRpb25zLnBvc2l0aW9uT3B0aW9ucywgeworCQkJCXJlbGF0aXZlVG86IHRoaXMuZWxlbWVudAorCQkJfSkpOworCQl9CisJCXJldHVybiB0aGlzOworCX0KKworfSk7CisKK092ZXJUZXh0Lmluc3RhbmNlcyA9IFtdOworCitPYmplY3QuYXBwZW5kKE92ZXJUZXh0LCB7CisKKwllYWNoOiBmdW5jdGlvbihmbil7CisJCXJldHVybiBPdmVyVGV4dC5pbnN0YW5jZXMuZWFjaChmdW5jdGlvbihvdCwgaSl7CisJCQlpZiAob3QuZWxlbWVudCAmJiBvdC50ZXh0KSBmbi5jYWxsKE92ZXJUZXh0LCBvdCwgaSk7CisJCX0pOworCX0sCisKKwl1cGRhdGU6IGZ1bmN0aW9uKCl7CisKKwkJcmV0dXJuIE92ZXJUZXh0LmVhY2goZnVuY3Rpb24ob3QpeworCQkJcmV0dXJuIG90LnJlcG9zaXRpb24oKTsKKwkJfSk7CisKKwl9LAorCisJaGlkZUFsbDogZnVuY3Rpb24oKXsKKworCQlyZXR1cm4gT3ZlclRleHQuZWFjaChmdW5jdGlvbihvdCl7CisJCQlyZXR1cm4gb3QuaGlkZSh0cnVlLCB0cnVlKTsKKwkJfSk7CisKKwl9LAorCisJc2hvd0FsbDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIE92ZXJUZXh0LmVhY2goZnVuY3Rpb24ob3QpeworCQkJcmV0dXJuIG90LnNob3coKTsKKwkJfSk7CisJfQorCit9KTsKKworCisKKy8qCistLS0KKworc2NyaXB0OiBGeC5FbGVtZW50cy5qcworCituYW1lOiBGeC5FbGVtZW50cworCitkZXNjcmlwdGlvbjogRWZmZWN0IHRvIGNoYW5nZSBhbnkgbnVtYmVyIG9mIENTUyBwcm9wZXJ0aWVzIG9mIGFueSBudW1iZXIgb2YgRWxlbWVudHMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gVmFsZXJpbyBQcm9pZXR0aQorCityZXF1aXJlczoKKyAgLSBDb3JlL0Z4LkNTUworICAtIC9Nb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbRnguRWxlbWVudHNdCisKKy4uLgorKi8KKworRnguRWxlbWVudHMgPSBuZXcgQ2xhc3MoeworCisJRXh0ZW5kczogRnguQ1NTLAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudHMsIG9wdGlvbnMpeworCQl0aGlzLmVsZW1lbnRzID0gdGhpcy5zdWJqZWN0ID0gJCQoZWxlbWVudHMpOworCQl0aGlzLnBhcmVudChvcHRpb25zKTsKKwl9LAorCisJY29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXsKKwkJdmFyIG5vdyA9IHt9OworCisJCWZvciAodmFyIGkgaW4gZnJvbSl7CisJCQl2YXIgaUZyb20gPSBmcm9tW2ldLCBpVG8gPSB0b1tpXSwgaU5vdyA9IG5vd1tpXSA9IHt9OworCQkJZm9yICh2YXIgcCBpbiBpRnJvbSkgaU5vd1twXSA9IHRoaXMucGFyZW50KGlGcm9tW3BdLCBpVG9bcF0sIGRlbHRhKTsKKwkJfQorCisJCXJldHVybiBub3c7CisJfSwKKworCXNldDogZnVuY3Rpb24obm93KXsKKwkJZm9yICh2YXIgaSBpbiBub3cpeworCQkJaWYgKCF0aGlzLmVsZW1lbnRzW2ldKSBjb250aW51ZTsKKworCQkJdmFyIGlOb3cgPSBub3dbaV07CisJCQlmb3IgKHZhciBwIGluIGlOb3cpIHRoaXMucmVuZGVyKHRoaXMuZWxlbWVudHNbaV0sIHAsIGlOb3dbcF0sIHRoaXMub3B0aW9ucy51bml0KTsKKwkJfQorCisJCXJldHVybiB0aGlzOworCX0sCisKKwlzdGFydDogZnVuY3Rpb24ob2JqKXsKKwkJaWYgKCF0aGlzLmNoZWNrKG9iaikpIHJldHVybiB0aGlzOworCQl2YXIgZnJvbSA9IHt9LCB0byA9IHt9OworCisJCWZvciAodmFyIGkgaW4gb2JqKXsKKwkJCWlmICghdGhpcy5lbGVtZW50c1tpXSkgY29udGludWU7CisKKwkJCXZhciBpUHJvcHMgPSBvYmpbaV0sIGlGcm9tID0gZnJvbVtpXSA9IHt9LCBpVG8gPSB0b1tpXSA9IHt9OworCisJCQlmb3IgKHZhciBwIGluIGlQcm9wcyl7CisJCQkJdmFyIHBhcnNlZCA9IHRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnRzW2ldLCBwLCBpUHJvcHNbcF0pOworCQkJCWlGcm9tW3BdID0gcGFyc2VkLmZyb207CisJCQkJaVRvW3BdID0gcGFyc2VkLnRvOworCQkJfQorCQl9CisKKwkJcmV0dXJuIHRoaXMucGFyZW50KGZyb20sIHRvKTsKKwl9CisKK30pOworCisKKy8qCistLS0KKworc2NyaXB0OiBGeC5BY2NvcmRpb24uanMKKworbmFtZTogRnguQWNjb3JkaW9uCisKK2Rlc2NyaXB0aW9uOiBBbiBGeC5FbGVtZW50cyBleHRlbnNpb24gd2hpY2ggYWxsb3dzIHlvdSB0byBlYXNpbHkgY3JlYXRlIGFjY29yZGlvbiB0eXBlIGNvbnRyb2xzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFZhbGVyaW8gUHJvaWV0dGkKKworcmVxdWlyZXM6CisgIC0gQ29yZS9FbGVtZW50LkV2ZW50CisgIC0gL0Z4LkVsZW1lbnRzCisKK3Byb3ZpZGVzOiBbRnguQWNjb3JkaW9uXQorCisuLi4KKyovCisKK0Z4LkFjY29yZGlvbiA9IG5ldyBDbGFzcyh7CisKKwlFeHRlbmRzOiBGeC5FbGVtZW50cywKKworCW9wdGlvbnM6IHsvKgorCQlvbkFjdGl2ZTogZnVuY3Rpb24odG9nZ2xlciwgc2VjdGlvbil7fSwKKwkJb25CYWNrZ3JvdW5kOiBmdW5jdGlvbih0b2dnbGVyLCBzZWN0aW9uKXt9LCovCisJCWZpeGVkSGVpZ2h0OiBmYWxzZSwKKwkJZml4ZWRXaWR0aDogZmFsc2UsCisJCWRpc3BsYXk6IDAsCisJCXNob3c6IGZhbHNlLAorCQloZWlnaHQ6IHRydWUsCisJCXdpZHRoOiBmYWxzZSwKKwkJb3BhY2l0eTogdHJ1ZSwKKwkJYWx3YXlzSGlkZTogZmFsc2UsCisJCXRyaWdnZXI6ICdjbGljaycsCisJCWluaXRpYWxEaXNwbGF5Rng6IHRydWUsCisJCXJlc2V0SGVpZ2h0OiB0cnVlCisJfSwKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKCl7CisJCXZhciBkZWZpbmVkID0gZnVuY3Rpb24ob2JqKXsKKwkJCXJldHVybiBvYmogIT0gbnVsbDsKKwkJfTsKKworCQl2YXIgcGFyYW1zID0gQXJyYXkubGluayhhcmd1bWVudHMsIHsKKwkJCSdjb250YWluZXInOiBUeXBlLmlzRWxlbWVudCwgLy9kZXByZWNhdGVkCisJCQknb3B0aW9ucyc6IFR5cGUuaXNPYmplY3QsCisJCQkndG9nZ2xlcnMnOiBkZWZpbmVkLAorCQkJJ2VsZW1lbnRzJzogZGVmaW5lZAorCQl9KTsKKwkJdGhpcy5wYXJlbnQocGFyYW1zLmVsZW1lbnRzLCBwYXJhbXMub3B0aW9ucyk7CisKKwkJdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsCisJCQl0b2dnbGVycyA9IHRoaXMudG9nZ2xlcnMgPSAkJChwYXJhbXMudG9nZ2xlcnMpOworCisJCXRoaXMucHJldmlvdXMgPSAtMTsKKwkJdGhpcy5pbnRlcm5hbENoYWluID0gbmV3IENoYWluKCk7CisKKwkJaWYgKG9wdGlvbnMuYWx3YXlzSGlkZSkgdGhpcy5vcHRpb25zLmxpbmsgPSAnY2hhaW4nOworCisJCWlmIChvcHRpb25zLnNob3cgfHwgdGhpcy5vcHRpb25zLnNob3cgPT09IDApeworCQkJb3B0aW9ucy5kaXNwbGF5ID0gZmFsc2U7CisJCQl0aGlzLnByZXZpb3VzID0gb3B0aW9ucy5zaG93OworCQl9CisKKwkJaWYgKG9wdGlvbnMuc3RhcnQpeworCQkJb3B0aW9ucy5kaXNwbGF5ID0gZmFsc2U7CisJCQlvcHRpb25zLnNob3cgPSBmYWxzZTsKKwkJfQorCisJCXZhciBlZmZlY3RzID0gdGhpcy5lZmZlY3RzID0ge307CisKKwkJaWYgKG9wdGlvbnMub3BhY2l0eSkgZWZmZWN0cy5vcGFjaXR5ID0gJ2Z1bGxPcGFjaXR5JzsKKwkJaWYgKG9wdGlvbnMud2lkdGgpIGVmZmVjdHMud2lkdGggPSBvcHRpb25zLmZpeGVkV2lkdGggPyAnZnVsbFdpZHRoJyA6ICdvZmZzZXRXaWR0aCc7CisJCWlmIChvcHRpb25zLmhlaWdodCkgZWZmZWN0cy5oZWlnaHQgPSBvcHRpb25zLmZpeGVkSGVpZ2h0ID8gJ2Z1bGxIZWlnaHQnIDogJ3Njcm9sbEhlaWdodCc7CisKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSB0b2dnbGVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMuYWRkU2VjdGlvbih0b2dnbGVyc1tpXSwgdGhpcy5lbGVtZW50c1tpXSk7CisKKwkJdGhpcy5lbGVtZW50cy5lYWNoKGZ1bmN0aW9uKGVsLCBpKXsKKwkJCWlmIChvcHRpb25zLnNob3cgPT09IGkpeworCQkJCXRoaXMuZmlyZUV2ZW50KCdhY3RpdmUnLCBbdG9nZ2xlcnNbaV0sIGVsXSk7CisJCQl9IGVsc2UgeworCQkJCWZvciAodmFyIGZ4IGluIGVmZmVjdHMpIGVsLnNldFN0eWxlKGZ4LCAwKTsKKwkJCX0KKwkJfSwgdGhpcyk7CisKKwkJaWYgKG9wdGlvbnMuZGlzcGxheSB8fCBvcHRpb25zLmRpc3BsYXkgPT09IDAgfHwgb3B0aW9ucy5pbml0aWFsRGlzcGxheUZ4ID09PSBmYWxzZSl7CisJCQl0aGlzLmRpc3BsYXkob3B0aW9ucy5kaXNwbGF5LCBvcHRpb25zLmluaXRpYWxEaXNwbGF5RngpOworCQl9CisKKwkJaWYgKG9wdGlvbnMuZml4ZWRIZWlnaHQgIT09IGZhbHNlKSBvcHRpb25zLnJlc2V0SGVpZ2h0ID0gZmFsc2U7CisJCXRoaXMuYWRkRXZlbnQoJ2NvbXBsZXRlJywgdGhpcy5pbnRlcm5hbENoYWluLmNhbGxDaGFpbi5iaW5kKHRoaXMuaW50ZXJuYWxDaGFpbikpOworCX0sCisKKwlhZGRTZWN0aW9uOiBmdW5jdGlvbih0b2dnbGVyLCBlbGVtZW50KXsKKwkJdG9nZ2xlciA9IGRvY3VtZW50LmlkKHRvZ2dsZXIpOworCQllbGVtZW50ID0gZG9jdW1lbnQuaWQoZWxlbWVudCk7CisJCXRoaXMudG9nZ2xlcnMuaW5jbHVkZSh0b2dnbGVyKTsKKwkJdGhpcy5lbGVtZW50cy5pbmNsdWRlKGVsZW1lbnQpOworCisJCXZhciB0b2dnbGVycyA9IHRoaXMudG9nZ2xlcnMsCisJCQlvcHRpb25zID0gdGhpcy5vcHRpb25zLAorCQkJdGVzdCA9IHRvZ2dsZXJzLmNvbnRhaW5zKHRvZ2dsZXIpLAorCQkJaWR4ID0gdG9nZ2xlcnMuaW5kZXhPZih0b2dnbGVyKSwKKwkJCWRpc3BsYXllciA9IHRoaXMuZGlzcGxheS5wYXNzKGlkeCwgdGhpcyk7CisKKwkJdG9nZ2xlci5zdG9yZSgnYWNjb3JkaW9uOmRpc3BsYXknLCBkaXNwbGF5ZXIpCisJCQkuYWRkRXZlbnQob3B0aW9ucy50cmlnZ2VyLCBkaXNwbGF5ZXIpOworCisJCWlmIChvcHRpb25zLmhlaWdodCkgZWxlbWVudC5zZXRTdHlsZXMoeydwYWRkaW5nLXRvcCc6IDAsICdib3JkZXItdG9wJzogJ25vbmUnLCAncGFkZGluZy1ib3R0b20nOiAwLCAnYm9yZGVyLWJvdHRvbSc6ICdub25lJ30pOworCQlpZiAob3B0aW9ucy53aWR0aCkgZWxlbWVudC5zZXRTdHlsZXMoeydwYWRkaW5nLWxlZnQnOiAwLCAnYm9yZGVyLWxlZnQnOiAnbm9uZScsICdwYWRkaW5nLXJpZ2h0JzogMCwgJ2JvcmRlci1yaWdodCc6ICdub25lJ30pOworCisJCWVsZW1lbnQuZnVsbE9wYWNpdHkgPSAxOworCQlpZiAob3B0aW9ucy5maXhlZFdpZHRoKSBlbGVtZW50LmZ1bGxXaWR0aCA9IG9wdGlvbnMuZml4ZWRXaWR0aDsKKwkJaWYgKG9wdGlvbnMuZml4ZWRIZWlnaHQpIGVsZW1lbnQuZnVsbEhlaWdodCA9IG9wdGlvbnMuZml4ZWRIZWlnaHQ7CisJCWVsZW1lbnQuc2V0U3R5bGUoJ292ZXJmbG93JywgJ2hpZGRlbicpOworCisJCWlmICghdGVzdCkgZm9yICh2YXIgZnggaW4gdGhpcy5lZmZlY3RzKXsKKwkJCWVsZW1lbnQuc2V0U3R5bGUoZngsIDApOworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwlyZW1vdmVTZWN0aW9uOiBmdW5jdGlvbih0b2dnbGVyLCBkaXNwbGF5SW5kZXgpeworCQl2YXIgdG9nZ2xlcnMgPSB0aGlzLnRvZ2dsZXJzLAorCQkJaWR4ID0gdG9nZ2xlcnMuaW5kZXhPZih0b2dnbGVyKSwKKwkJCWVsZW1lbnQgPSB0aGlzLmVsZW1lbnRzW2lkeF07CisKKwkJdmFyIHJlbW92ZXIgPSBmdW5jdGlvbigpeworCQkJdG9nZ2xlcnMuZXJhc2UodG9nZ2xlcik7CisJCQl0aGlzLmVsZW1lbnRzLmVyYXNlKGVsZW1lbnQpOworCQkJdGhpcy5kZXRhY2godG9nZ2xlcik7CisJCX0uYmluZCh0aGlzKTsKKworCQlpZiAodGhpcy5ub3cgPT0gaWR4IHx8IGRpc3BsYXlJbmRleCAhPSBudWxsKXsKKwkJCXRoaXMuZGlzcGxheShkaXNwbGF5SW5kZXggIT0gbnVsbCA/IGRpc3BsYXlJbmRleCA6IChpZHggLSAxID49IDAgPyBpZHggLSAxIDogMCkpLmNoYWluKHJlbW92ZXIpOworCQl9IGVsc2UgeworCQkJcmVtb3ZlcigpOworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwlkZXRhY2g6IGZ1bmN0aW9uKHRvZ2dsZXIpeworCQl2YXIgcmVtb3ZlID0gZnVuY3Rpb24odG9nZ2xlcil7CisJCQl0b2dnbGVyLnJlbW92ZUV2ZW50KHRoaXMub3B0aW9ucy50cmlnZ2VyLCB0b2dnbGVyLnJldHJpZXZlKCdhY2NvcmRpb246ZGlzcGxheScpKTsKKwkJfS5iaW5kKHRoaXMpOworCisJCWlmICghdG9nZ2xlcikgdGhpcy50b2dnbGVycy5lYWNoKHJlbW92ZSk7CisJCWVsc2UgcmVtb3ZlKHRvZ2dsZXIpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZGlzcGxheTogZnVuY3Rpb24oaW5kZXgsIHVzZUZ4KXsKKwkJaWYgKCF0aGlzLmNoZWNrKGluZGV4LCB1c2VGeCkpIHJldHVybiB0aGlzOworCisJCXZhciBvYmogPSB7fSwKKwkJCWVsZW1lbnRzID0gdGhpcy5lbGVtZW50cywKKwkJCW9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsCisJCQllZmZlY3RzID0gdGhpcy5lZmZlY3RzOworCisJCWlmICh1c2VGeCA9PSBudWxsKSB1c2VGeCA9IHRydWU7CisJCWlmICh0eXBlT2YoaW5kZXgpID09ICdlbGVtZW50JykgaW5kZXggPSBlbGVtZW50cy5pbmRleE9mKGluZGV4KTsKKwkJaWYgKGluZGV4ID09IHRoaXMucHJldmlvdXMgJiYgIW9wdGlvbnMuYWx3YXlzSGlkZSkgcmV0dXJuIHRoaXM7CisKKwkJaWYgKG9wdGlvbnMucmVzZXRIZWlnaHQpeworCQkJdmFyIHByZXYgPSBlbGVtZW50c1t0aGlzLnByZXZpb3VzXTsKKwkJCWlmIChwcmV2ICYmICF0aGlzLnNlbGZIaWRkZW4peworCQkJCWZvciAodmFyIGZ4IGluIGVmZmVjdHMpIHByZXYuc2V0U3R5bGUoZngsIHByZXZbZWZmZWN0c1tmeF1dKTsKKwkJCX0KKwkJfQorCisJCWlmICgodGhpcy50aW1lciAmJiBvcHRpb25zLmxpbmsgPT0gJ2NoYWluJykgfHwgKGluZGV4ID09PSB0aGlzLnByZXZpb3VzICYmICFvcHRpb25zLmFsd2F5c0hpZGUpKSByZXR1cm4gdGhpczsKKworCQl0aGlzLnByZXZpb3VzID0gaW5kZXg7CisJCXRoaXMuc2VsZkhpZGRlbiA9IGZhbHNlOworCisJCWVsZW1lbnRzLmVhY2goZnVuY3Rpb24oZWwsIGkpeworCQkJb2JqW2ldID0ge307CisJCQl2YXIgaGlkZTsKKwkJCWlmIChpICE9IGluZGV4KXsKKwkJCQloaWRlID0gdHJ1ZTsKKwkJCX0gZWxzZSBpZiAob3B0aW9ucy5hbHdheXNIaWRlICYmICgoZWwub2Zmc2V0SGVpZ2h0ID4gMCAmJiBvcHRpb25zLmhlaWdodCkgfHwgZWwub2Zmc2V0V2lkdGggPiAwICYmIG9wdGlvbnMud2lkdGgpKXsKKwkJCQloaWRlID0gdHJ1ZTsKKwkJCQl0aGlzLnNlbGZIaWRkZW4gPSB0cnVlOworCQkJfQorCQkJdGhpcy5maXJlRXZlbnQoaGlkZSA/ICdiYWNrZ3JvdW5kJyA6ICdhY3RpdmUnLCBbdGhpcy50b2dnbGVyc1tpXSwgZWxdKTsKKwkJCWZvciAodmFyIGZ4IGluIGVmZmVjdHMpIG9ialtpXVtmeF0gPSBoaWRlID8gMCA6IGVsW2VmZmVjdHNbZnhdXTsKKwkJCWlmICghdXNlRnggJiYgIWhpZGUgJiYgb3B0aW9ucy5yZXNldEhlaWdodCkgb2JqW2ldLmhlaWdodCA9ICdhdXRvJzsKKwkJfSwgdGhpcyk7CisKKwkJdGhpcy5pbnRlcm5hbENoYWluLmNsZWFyQ2hhaW4oKTsKKwkJdGhpcy5pbnRlcm5hbENoYWluLmNoYWluKGZ1bmN0aW9uKCl7CisJCQlpZiAob3B0aW9ucy5yZXNldEhlaWdodCAmJiAhdGhpcy5zZWxmSGlkZGVuKXsKKwkJCQl2YXIgZWwgPSBlbGVtZW50c1tpbmRleF07CisJCQkJaWYgKGVsKSBlbC5zZXRTdHlsZSgnaGVpZ2h0JywgJ2F1dG8nKTsKKwkJCX0KKwkJfS5iaW5kKHRoaXMpKTsKKworCQlyZXR1cm4gdXNlRnggPyB0aGlzLnN0YXJ0KG9iaikgOiB0aGlzLnNldChvYmopLmludGVybmFsQ2hhaW4uY2FsbENoYWluKCk7CisJfQorCit9KTsKKworLyo8MS4yY29tcGF0PiovCisvKgorCUNvbXBhdGliaWxpdHkgd2l0aCAxLjIuMAorKi8KK3ZhciBBY2NvcmRpb24gPSBuZXcgQ2xhc3MoeworCisJRXh0ZW5kczogRnguQWNjb3JkaW9uLAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24oKXsKKwkJdGhpcy5wYXJlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKwkJdmFyIHBhcmFtcyA9IEFycmF5LmxpbmsoYXJndW1lbnRzLCB7J2NvbnRhaW5lcic6IFR5cGUuaXNFbGVtZW50fSk7CisJCXRoaXMuY29udGFpbmVyID0gcGFyYW1zLmNvbnRhaW5lcjsKKwl9LAorCisJYWRkU2VjdGlvbjogZnVuY3Rpb24odG9nZ2xlciwgZWxlbWVudCwgcG9zKXsKKwkJdG9nZ2xlciA9IGRvY3VtZW50LmlkKHRvZ2dsZXIpOworCQllbGVtZW50ID0gZG9jdW1lbnQuaWQoZWxlbWVudCk7CisKKwkJdmFyIHRlc3QgPSB0aGlzLnRvZ2dsZXJzLmNvbnRhaW5zKHRvZ2dsZXIpOworCQl2YXIgbGVuID0gdGhpcy50b2dnbGVycy5sZW5ndGg7CisJCWlmIChsZW4gJiYgKCF0ZXN0IHx8IHBvcykpeworCQkJcG9zID0gcG9zICE9IG51bGwgPyBwb3MgOiBsZW4gLSAxOworCQkJdG9nZ2xlci5pbmplY3QodGhpcy50b2dnbGVyc1twb3NdLCAnYmVmb3JlJyk7CisJCQllbGVtZW50LmluamVjdCh0b2dnbGVyLCAnYWZ0ZXInKTsKKwkJfSBlbHNlIGlmICh0aGlzLmNvbnRhaW5lciAmJiAhdGVzdCl7CisJCQl0b2dnbGVyLmluamVjdCh0aGlzLmNvbnRhaW5lcik7CisJCQllbGVtZW50LmluamVjdCh0aGlzLmNvbnRhaW5lcik7CisJCX0KKwkJcmV0dXJuIHRoaXMucGFyZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisJfQorCit9KTsKKy8qPC8xLjJjb21wYXQ+Ki8KKworCisvKgorLS0tCisKK3NjcmlwdDogRnguTW92ZS5qcworCituYW1lOiBGeC5Nb3ZlCisKK2Rlc2NyaXB0aW9uOiBEZWZpbmVzIEZ4Lk1vdmUsIGEgY2xhc3MgdGhhdCB3b3JrcyB3aXRoIEVsZW1lbnQuUG9zaXRpb24uanMgdG8gdHJhbnNpdGlvbiBhbiBlbGVtZW50IGZyb20gb25lIGxvY2F0aW9uIHRvIGFub3RoZXIuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisKK3JlcXVpcmVzOgorICAtIENvcmUvRnguTW9ycGgKKyAgLSAvRWxlbWVudC5Qb3NpdGlvbgorCitwcm92aWRlczogW0Z4Lk1vdmVdCisKKy4uLgorKi8KKworRnguTW92ZSA9IG5ldyBDbGFzcyh7CisKKwlFeHRlbmRzOiBGeC5Nb3JwaCwKKworCW9wdGlvbnM6IHsKKwkJcmVsYXRpdmVUbzogZG9jdW1lbnQuYm9keSwKKwkJcG9zaXRpb246ICdjZW50ZXInLAorCQllZGdlOiBmYWxzZSwKKwkJb2Zmc2V0OiB7eDogMCwgeTogMH0KKwl9LAorCisJc3RhcnQ6IGZ1bmN0aW9uKGRlc3RpbmF0aW9uKXsKKwkJdmFyIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQsCisJCQl0b3BMZWZ0ID0gZWxlbWVudC5nZXRTdHlsZXMoJ3RvcCcsICdsZWZ0Jyk7CisJCWlmICh0b3BMZWZ0LnRvcCA9PSAnYXV0bycgfHwgdG9wTGVmdC5sZWZ0ID09ICdhdXRvJyl7CisJCQllbGVtZW50LnNldFBvc2l0aW9uKGVsZW1lbnQuZ2V0UG9zaXRpb24oZWxlbWVudC5nZXRPZmZzZXRQYXJlbnQoKSkpOworCQl9CisJCXJldHVybiB0aGlzLnBhcmVudChlbGVtZW50LnBvc2l0aW9uKE9iamVjdC5tZXJnZSh7fSwgdGhpcy5vcHRpb25zLCBkZXN0aW5hdGlvbiwge3JldHVyblBvczogdHJ1ZX0pKSk7CisJfQorCit9KTsKKworRWxlbWVudC5Qcm9wZXJ0aWVzLm1vdmUgPSB7CisKKwlzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpeworCQl0aGlzLmdldCgnbW92ZScpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXQ6IGZ1bmN0aW9uKCl7CisJCXZhciBtb3ZlID0gdGhpcy5yZXRyaWV2ZSgnbW92ZScpOworCQlpZiAoIW1vdmUpeworCQkJbW92ZSA9IG5ldyBGeC5Nb3ZlKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pOworCQkJdGhpcy5zdG9yZSgnbW92ZScsIG1vdmUpOworCQl9CisJCXJldHVybiBtb3ZlOworCX0KKworfTsKKworRWxlbWVudC5pbXBsZW1lbnQoeworCisJbW92ZTogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXRoaXMuZ2V0KCdtb3ZlJykuc3RhcnQob3B0aW9ucyk7CisJCXJldHVybiB0aGlzOworCX0KKworfSk7CisKKworLyoKKy0tLQorCitzY3JpcHQ6IEZ4LlNjcm9sbC5qcworCituYW1lOiBGeC5TY3JvbGwKKworZGVzY3JpcHRpb246IEVmZmVjdCB0byBzbW9vdGhseSBzY3JvbGwgYW55IGVsZW1lbnQsIGluY2x1ZGluZyB0aGUgd2luZG93LgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFZhbGVyaW8gUHJvaWV0dGkKKworcmVxdWlyZXM6CisgIC0gQ29yZS9GeAorICAtIENvcmUvRWxlbWVudC5FdmVudAorICAtIENvcmUvRWxlbWVudC5EaW1lbnNpb25zCisgIC0gL01vb1Rvb2xzLk1vcmUKKworcHJvdmlkZXM6IFtGeC5TY3JvbGxdCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK0Z4LlNjcm9sbCA9IG5ldyBDbGFzcyh7CisKKwlFeHRlbmRzOiBGeCwKKworCW9wdGlvbnM6IHsKKwkJb2Zmc2V0OiB7eDogMCwgeTogMH0sCisJCXdoZWVsU3RvcHM6IHRydWUKKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucyl7CisJCXRoaXMuZWxlbWVudCA9IHRoaXMuc3ViamVjdCA9IGRvY3VtZW50LmlkKGVsZW1lbnQpOworCQl0aGlzLnBhcmVudChvcHRpb25zKTsKKworCQlpZiAodHlwZU9mKHRoaXMuZWxlbWVudCkgIT0gJ2VsZW1lbnQnKSB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5pZCh0aGlzLmVsZW1lbnQuZ2V0RG9jdW1lbnQoKS5ib2R5KTsKKworCQlpZiAodGhpcy5vcHRpb25zLndoZWVsU3RvcHMpeworCQkJdmFyIHN0b3BwZXIgPSB0aGlzLmVsZW1lbnQsCisJCQkJY2FuY2VsID0gdGhpcy5jYW5jZWwucGFzcyhmYWxzZSwgdGhpcyk7CisJCQl0aGlzLmFkZEV2ZW50KCdzdGFydCcsIGZ1bmN0aW9uKCl7CisJCQkJc3RvcHBlci5hZGRFdmVudCgnbW91c2V3aGVlbCcsIGNhbmNlbCk7CisJCQl9LCB0cnVlKTsKKwkJCXRoaXMuYWRkRXZlbnQoJ2NvbXBsZXRlJywgZnVuY3Rpb24oKXsKKwkJCQlzdG9wcGVyLnJlbW92ZUV2ZW50KCdtb3VzZXdoZWVsJywgY2FuY2VsKTsKKwkJCX0sIHRydWUpOworCQl9CisJfSwKKworCXNldDogZnVuY3Rpb24oKXsKKwkJdmFyIG5vdyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKTsKKwkJaWYgKEJyb3dzZXIuZmlyZWZveCkgbm93ID0gW01hdGgucm91bmQobm93WzBdKSwgTWF0aC5yb3VuZChub3dbMV0pXTsgLy8gbm90IG5lZWRlZCBhbnltb3JlIGluIG5ld2VyIGZpcmVmb3ggdmVyc2lvbnMKKwkJdGhpcy5lbGVtZW50LnNjcm9sbFRvKG5vd1swXSwgbm93WzFdKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWNvbXB1dGU6IGZ1bmN0aW9uKGZyb20sIHRvLCBkZWx0YSl7CisJCXJldHVybiBbMCwgMV0ubWFwKGZ1bmN0aW9uKGkpeworCQkJcmV0dXJuIEZ4LmNvbXB1dGUoZnJvbVtpXSwgdG9baV0sIGRlbHRhKTsKKwkJfSk7CisJfSwKKworCXN0YXJ0OiBmdW5jdGlvbih4LCB5KXsKKwkJaWYgKCF0aGlzLmNoZWNrKHgsIHkpKSByZXR1cm4gdGhpczsKKwkJdmFyIHNjcm9sbCA9IHRoaXMuZWxlbWVudC5nZXRTY3JvbGwoKTsKKwkJcmV0dXJuIHRoaXMucGFyZW50KFtzY3JvbGwueCwgc2Nyb2xsLnldLCBbeCwgeV0pOworCX0sCisKKwljYWxjdWxhdGVTY3JvbGw6IGZ1bmN0aW9uKHgsIHkpeworCQl2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVudCwKKwkJCXNjcm9sbFNpemUgPSBlbGVtZW50LmdldFNjcm9sbFNpemUoKSwKKwkJCXNjcm9sbCA9IGVsZW1lbnQuZ2V0U2Nyb2xsKCksCisJCQlzaXplID0gZWxlbWVudC5nZXRTaXplKCksCisJCQlvZmZzZXQgPSB0aGlzLm9wdGlvbnMub2Zmc2V0LAorCQkJdmFsdWVzID0ge3g6IHgsIHk6IHl9OworCisJCWZvciAodmFyIHogaW4gdmFsdWVzKXsKKwkJCWlmICghdmFsdWVzW3pdICYmIHZhbHVlc1t6XSAhPT0gMCkgdmFsdWVzW3pdID0gc2Nyb2xsW3pdOworCQkJaWYgKHR5cGVPZih2YWx1ZXNbel0pICE9ICdudW1iZXInKSB2YWx1ZXNbel0gPSBzY3JvbGxTaXplW3pdIC0gc2l6ZVt6XTsKKwkJCXZhbHVlc1t6XSArPSBvZmZzZXRbel07CisJCX0KKworCQlyZXR1cm4gW3ZhbHVlcy54LCB2YWx1ZXMueV07CisJfSwKKworCXRvVG9wOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5zdGFydC5hcHBseSh0aGlzLCB0aGlzLmNhbGN1bGF0ZVNjcm9sbChmYWxzZSwgMCkpOworCX0sCisKKwl0b0xlZnQ6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLnN0YXJ0LmFwcGx5KHRoaXMsIHRoaXMuY2FsY3VsYXRlU2Nyb2xsKDAsIGZhbHNlKSk7CisJfSwKKworCXRvUmlnaHQ6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLnN0YXJ0LmFwcGx5KHRoaXMsIHRoaXMuY2FsY3VsYXRlU2Nyb2xsKCdyaWdodCcsIGZhbHNlKSk7CisJfSwKKworCXRvQm90dG9tOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5zdGFydC5hcHBseSh0aGlzLCB0aGlzLmNhbGN1bGF0ZVNjcm9sbChmYWxzZSwgJ2JvdHRvbScpKTsKKwl9LAorCisJdG9FbGVtZW50OiBmdW5jdGlvbihlbCwgYXhlcyl7CisJCWF4ZXMgPSBheGVzID8gQXJyYXkuZnJvbShheGVzKSA6IFsneCcsICd5J107CisJCXZhciBzY3JvbGwgPSBpc0JvZHkodGhpcy5lbGVtZW50KSA/IHt4OiAwLCB5OiAwfSA6IHRoaXMuZWxlbWVudC5nZXRTY3JvbGwoKTsKKwkJdmFyIHBvc2l0aW9uID0gT2JqZWN0Lm1hcChkb2N1bWVudC5pZChlbCkuZ2V0UG9zaXRpb24odGhpcy5lbGVtZW50KSwgZnVuY3Rpb24odmFsdWUsIGF4aXMpeworCQkJcmV0dXJuIGF4ZXMuY29udGFpbnMoYXhpcykgPyB2YWx1ZSArIHNjcm9sbFtheGlzXSA6IGZhbHNlOworCQl9KTsKKwkJcmV0dXJuIHRoaXMuc3RhcnQuYXBwbHkodGhpcywgdGhpcy5jYWxjdWxhdGVTY3JvbGwocG9zaXRpb24ueCwgcG9zaXRpb24ueSkpOworCX0sCisKKwl0b0VsZW1lbnRFZGdlOiBmdW5jdGlvbihlbCwgYXhlcywgb2Zmc2V0KXsKKwkJYXhlcyA9IGF4ZXMgPyBBcnJheS5mcm9tKGF4ZXMpIDogWyd4JywgJ3knXTsKKwkJZWwgPSBkb2N1bWVudC5pZChlbCk7CisJCXZhciB0byA9IHt9LAorCQkJcG9zaXRpb24gPSBlbC5nZXRQb3NpdGlvbih0aGlzLmVsZW1lbnQpLAorCQkJc2l6ZSA9IGVsLmdldFNpemUoKSwKKwkJCXNjcm9sbCA9IHRoaXMuZWxlbWVudC5nZXRTY3JvbGwoKSwKKwkJCWNvbnRhaW5lclNpemUgPSB0aGlzLmVsZW1lbnQuZ2V0U2l6ZSgpLAorCQkJZWRnZSA9IHsKKwkJCQl4OiBwb3NpdGlvbi54ICsgc2l6ZS54LAorCQkJCXk6IHBvc2l0aW9uLnkgKyBzaXplLnkKKwkJCX07CisKKwkJWyd4JywgJ3knXS5lYWNoKGZ1bmN0aW9uKGF4aXMpeworCQkJaWYgKGF4ZXMuY29udGFpbnMoYXhpcykpeworCQkJCWlmIChlZGdlW2F4aXNdID4gc2Nyb2xsW2F4aXNdICsgY29udGFpbmVyU2l6ZVtheGlzXSkgdG9bYXhpc10gPSBlZGdlW2F4aXNdIC0gY29udGFpbmVyU2l6ZVtheGlzXTsKKwkJCQlpZiAocG9zaXRpb25bYXhpc10gPCBzY3JvbGxbYXhpc10pIHRvW2F4aXNdID0gcG9zaXRpb25bYXhpc107CisJCQl9CisJCQlpZiAodG9bYXhpc10gPT0gbnVsbCkgdG9bYXhpc10gPSBzY3JvbGxbYXhpc107CisJCQlpZiAob2Zmc2V0ICYmIG9mZnNldFtheGlzXSkgdG9bYXhpc10gPSB0b1theGlzXSArIG9mZnNldFtheGlzXTsKKwkJfSwgdGhpcyk7CisKKwkJaWYgKHRvLnggIT0gc2Nyb2xsLnggfHwgdG8ueSAhPSBzY3JvbGwueSkgdGhpcy5zdGFydCh0by54LCB0by55KTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXRvRWxlbWVudENlbnRlcjogZnVuY3Rpb24oZWwsIGF4ZXMsIG9mZnNldCl7CisJCWF4ZXMgPSBheGVzID8gQXJyYXkuZnJvbShheGVzKSA6IFsneCcsICd5J107CisJCWVsID0gZG9jdW1lbnQuaWQoZWwpOworCQl2YXIgdG8gPSB7fSwKKwkJCXBvc2l0aW9uID0gZWwuZ2V0UG9zaXRpb24odGhpcy5lbGVtZW50KSwKKwkJCXNpemUgPSBlbC5nZXRTaXplKCksCisJCQlzY3JvbGwgPSB0aGlzLmVsZW1lbnQuZ2V0U2Nyb2xsKCksCisJCQljb250YWluZXJTaXplID0gdGhpcy5lbGVtZW50LmdldFNpemUoKTsKKworCQlbJ3gnLCAneSddLmVhY2goZnVuY3Rpb24oYXhpcyl7CisJCQlpZiAoYXhlcy5jb250YWlucyhheGlzKSl7CisJCQkJdG9bYXhpc10gPSBwb3NpdGlvbltheGlzXSAtIChjb250YWluZXJTaXplW2F4aXNdIC0gc2l6ZVtheGlzXSkgLyAyOworCQkJfQorCQkJaWYgKHRvW2F4aXNdID09IG51bGwpIHRvW2F4aXNdID0gc2Nyb2xsW2F4aXNdOworCQkJaWYgKG9mZnNldCAmJiBvZmZzZXRbYXhpc10pIHRvW2F4aXNdID0gdG9bYXhpc10gKyBvZmZzZXRbYXhpc107CisJCX0sIHRoaXMpOworCisJCWlmICh0by54ICE9IHNjcm9sbC54IHx8IHRvLnkgIT0gc2Nyb2xsLnkpIHRoaXMuc3RhcnQodG8ueCwgdG8ueSk7CisJCXJldHVybiB0aGlzOworCX0KKworfSk7CisKKy8vPDEuMmNvbXBhdD4KK0Z4LlNjcm9sbC5pbXBsZW1lbnQoeworCXNjcm9sbFRvQ2VudGVyOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy50b0VsZW1lbnRDZW50ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKwl9LAorCXNjcm9sbEludG9WaWV3OiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy50b0VsZW1lbnRFZGdlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisJfQorfSk7CisvLzwvMS4yY29tcGF0PgorCitmdW5jdGlvbiBpc0JvZHkoZWxlbWVudCl7CisJcmV0dXJuICgvXig/OmJvZHl8aHRtbCkkL2kpLnRlc3QoZWxlbWVudC50YWdOYW1lKTsKK30KKworfSkoKTsKKworCisvKgorLS0tCisKK3NjcmlwdDogRnguU2xpZGUuanMKKworbmFtZTogRnguU2xpZGUKKworZGVzY3JpcHRpb246IEVmZmVjdCB0byBzbGlkZSBhbiBlbGVtZW50IGluIGFuZCBvdXQgb2Ygdmlldy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBWYWxlcmlvIFByb2lldHRpCisKK3JlcXVpcmVzOgorICAtIENvcmUvRngKKyAgLSBDb3JlL0VsZW1lbnQuU3R5bGUKKyAgLSAvTW9vVG9vbHMuTW9yZQorCitwcm92aWRlczogW0Z4LlNsaWRlXQorCisuLi4KKyovCisKK0Z4LlNsaWRlID0gbmV3IENsYXNzKHsKKworCUV4dGVuZHM6IEZ4LAorCisJb3B0aW9uczogeworCQltb2RlOiAndmVydGljYWwnLAorCQl3cmFwcGVyOiBmYWxzZSwKKwkJaGlkZU92ZXJmbG93OiB0cnVlLAorCQlyZXNldEhlaWdodDogZmFsc2UKKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucyl7CisJCWVsZW1lbnQgPSB0aGlzLmVsZW1lbnQgPSB0aGlzLnN1YmplY3QgPSBkb2N1bWVudC5pZChlbGVtZW50KTsKKwkJdGhpcy5wYXJlbnQob3B0aW9ucyk7CisJCW9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7CisKKwkJdmFyIHdyYXBwZXIgPSBlbGVtZW50LnJldHJpZXZlKCd3cmFwcGVyJyksCisJCQlzdHlsZXMgPSBlbGVtZW50LmdldFN0eWxlcygnbWFyZ2luJywgJ3Bvc2l0aW9uJywgJ292ZXJmbG93Jyk7CisKKwkJaWYgKG9wdGlvbnMuaGlkZU92ZXJmbG93KSBzdHlsZXMgPSBPYmplY3QuYXBwZW5kKHN0eWxlcywge292ZXJmbG93OiAnaGlkZGVuJ30pOworCQlpZiAob3B0aW9ucy53cmFwcGVyKSB3cmFwcGVyID0gZG9jdW1lbnQuaWQob3B0aW9ucy53cmFwcGVyKS5zZXRTdHlsZXMoc3R5bGVzKTsKKworCQlpZiAoIXdyYXBwZXIpIHdyYXBwZXIgPSBuZXcgRWxlbWVudCgnZGl2JywgeworCQkJc3R5bGVzOiBzdHlsZXMKKwkJfSkud3JhcHMoZWxlbWVudCk7CisKKwkJZWxlbWVudC5zdG9yZSgnd3JhcHBlcicsIHdyYXBwZXIpLnNldFN0eWxlKCdtYXJnaW4nLCAwKTsKKwkJaWYgKGVsZW1lbnQuZ2V0U3R5bGUoJ292ZXJmbG93JykgPT0gJ3Zpc2libGUnKSBlbGVtZW50LnNldFN0eWxlKCdvdmVyZmxvdycsICdoaWRkZW4nKTsKKworCQl0aGlzLm5vdyA9IFtdOworCQl0aGlzLm9wZW4gPSB0cnVlOworCQl0aGlzLndyYXBwZXIgPSB3cmFwcGVyOworCisJCXRoaXMuYWRkRXZlbnQoJ2NvbXBsZXRlJywgZnVuY3Rpb24oKXsKKwkJCXRoaXMub3BlbiA9ICh3cmFwcGVyWydvZmZzZXQnICsgdGhpcy5sYXlvdXQuY2FwaXRhbGl6ZSgpXSAhPSAwKTsKKwkJCWlmICh0aGlzLm9wZW4gJiYgdGhpcy5vcHRpb25zLnJlc2V0SGVpZ2h0KSB3cmFwcGVyLnNldFN0eWxlKCdoZWlnaHQnLCAnJyk7CisJCX0sIHRydWUpOworCX0sCisKKwl2ZXJ0aWNhbDogZnVuY3Rpb24oKXsKKwkJdGhpcy5tYXJnaW4gPSAnbWFyZ2luLXRvcCc7CisJCXRoaXMubGF5b3V0ID0gJ2hlaWdodCc7CisJCXRoaXMub2Zmc2V0ID0gdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodDsKKwl9LAorCisJaG9yaXpvbnRhbDogZnVuY3Rpb24oKXsKKwkJdGhpcy5tYXJnaW4gPSAnbWFyZ2luLWxlZnQnOworCQl0aGlzLmxheW91dCA9ICd3aWR0aCc7CisJCXRoaXMub2Zmc2V0ID0gdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoOworCX0sCisKKwlzZXQ6IGZ1bmN0aW9uKG5vdyl7CisJCXRoaXMuZWxlbWVudC5zZXRTdHlsZSh0aGlzLm1hcmdpbiwgbm93WzBdKTsKKwkJdGhpcy53cmFwcGVyLnNldFN0eWxlKHRoaXMubGF5b3V0LCBub3dbMV0pOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJY29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXsKKwkJcmV0dXJuIFswLCAxXS5tYXAoZnVuY3Rpb24oaSl7CisJCQlyZXR1cm4gRnguY29tcHV0ZShmcm9tW2ldLCB0b1tpXSwgZGVsdGEpOworCQl9KTsKKwl9LAorCisJc3RhcnQ6IGZ1bmN0aW9uKGhvdywgbW9kZSl7CisJCWlmICghdGhpcy5jaGVjayhob3csIG1vZGUpKSByZXR1cm4gdGhpczsKKwkJdGhpc1ttb2RlIHx8IHRoaXMub3B0aW9ucy5tb2RlXSgpOworCisJCXZhciBtYXJnaW4gPSB0aGlzLmVsZW1lbnQuZ2V0U3R5bGUodGhpcy5tYXJnaW4pLnRvSW50KCksCisJCQlsYXlvdXQgPSB0aGlzLndyYXBwZXIuZ2V0U3R5bGUodGhpcy5sYXlvdXQpLnRvSW50KCksCisJCQljYXNlSW4gPSBbW21hcmdpbiwgbGF5b3V0XSwgWzAsIHRoaXMub2Zmc2V0XV0sCisJCQljYXNlT3V0ID0gW1ttYXJnaW4sIGxheW91dF0sIFstdGhpcy5vZmZzZXQsIDBdXSwKKwkJCXN0YXJ0OworCisJCXN3aXRjaCAoaG93KXsKKwkJCWNhc2UgJ2luJzogc3RhcnQgPSBjYXNlSW47IGJyZWFrOworCQkJY2FzZSAnb3V0Jzogc3RhcnQgPSBjYXNlT3V0OyBicmVhazsKKwkJCWNhc2UgJ3RvZ2dsZSc6IHN0YXJ0ID0gKGxheW91dCA9PSAwKSA/IGNhc2VJbiA6IGNhc2VPdXQ7CisJCX0KKwkJcmV0dXJuIHRoaXMucGFyZW50KHN0YXJ0WzBdLCBzdGFydFsxXSk7CisJfSwKKworCXNsaWRlSW46IGZ1bmN0aW9uKG1vZGUpeworCQlyZXR1cm4gdGhpcy5zdGFydCgnaW4nLCBtb2RlKTsKKwl9LAorCisJc2xpZGVPdXQ6IGZ1bmN0aW9uKG1vZGUpeworCQlyZXR1cm4gdGhpcy5zdGFydCgnb3V0JywgbW9kZSk7CisJfSwKKworCWhpZGU6IGZ1bmN0aW9uKG1vZGUpeworCQl0aGlzW21vZGUgfHwgdGhpcy5vcHRpb25zLm1vZGVdKCk7CisJCXRoaXMub3BlbiA9IGZhbHNlOworCQlyZXR1cm4gdGhpcy5zZXQoWy10aGlzLm9mZnNldCwgMF0pOworCX0sCisKKwlzaG93OiBmdW5jdGlvbihtb2RlKXsKKwkJdGhpc1ttb2RlIHx8IHRoaXMub3B0aW9ucy5tb2RlXSgpOworCQl0aGlzLm9wZW4gPSB0cnVlOworCQlyZXR1cm4gdGhpcy5zZXQoWzAsIHRoaXMub2Zmc2V0XSk7CisJfSwKKworCXRvZ2dsZTogZnVuY3Rpb24obW9kZSl7CisJCXJldHVybiB0aGlzLnN0YXJ0KCd0b2dnbGUnLCBtb2RlKTsKKwl9CisKK30pOworCitFbGVtZW50LlByb3BlcnRpZXMuc2xpZGUgPSB7CisKKwlzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpeworCQl0aGlzLmdldCgnc2xpZGUnKS5jYW5jZWwoKS5zZXRPcHRpb25zKG9wdGlvbnMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZ2V0OiBmdW5jdGlvbigpeworCQl2YXIgc2xpZGUgPSB0aGlzLnJldHJpZXZlKCdzbGlkZScpOworCQlpZiAoIXNsaWRlKXsKKwkJCXNsaWRlID0gbmV3IEZ4LlNsaWRlKHRoaXMsIHtsaW5rOiAnY2FuY2VsJ30pOworCQkJdGhpcy5zdG9yZSgnc2xpZGUnLCBzbGlkZSk7CisJCX0KKwkJcmV0dXJuIHNsaWRlOworCX0KKworfTsKKworRWxlbWVudC5pbXBsZW1lbnQoeworCisJc2xpZGU6IGZ1bmN0aW9uKGhvdywgbW9kZSl7CisJCWhvdyA9IGhvdyB8fCAndG9nZ2xlJzsKKwkJdmFyIHNsaWRlID0gdGhpcy5nZXQoJ3NsaWRlJyksIHRvZ2dsZTsKKwkJc3dpdGNoIChob3cpeworCQkJY2FzZSAnaGlkZSc6IHNsaWRlLmhpZGUobW9kZSk7IGJyZWFrOworCQkJY2FzZSAnc2hvdyc6IHNsaWRlLnNob3cobW9kZSk7IGJyZWFrOworCQkJY2FzZSAndG9nZ2xlJzoKKwkJCQl2YXIgZmxhZyA9IHRoaXMucmV0cmlldmUoJ3NsaWRlOmZsYWcnLCBzbGlkZS5vcGVuKTsKKwkJCQlzbGlkZVtmbGFnID8gJ3NsaWRlT3V0JyA6ICdzbGlkZUluJ10obW9kZSk7CisJCQkJdGhpcy5zdG9yZSgnc2xpZGU6ZmxhZycsICFmbGFnKTsKKwkJCQl0b2dnbGUgPSB0cnVlOworCQkJYnJlYWs7CisJCQlkZWZhdWx0OiBzbGlkZS5zdGFydChob3csIG1vZGUpOworCQl9CisJCWlmICghdG9nZ2xlKSB0aGlzLmVsaW1pbmF0ZSgnc2xpZGU6ZmxhZycpOworCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCisKKy8qCistLS0KKworc2NyaXB0OiBGeC5TbW9vdGhTY3JvbGwuanMKKworbmFtZTogRnguU21vb3RoU2Nyb2xsCisKK2Rlc2NyaXB0aW9uOiBDbGFzcyBmb3IgY3JlYXRpbmcgYSBzbW9vdGggc2Nyb2xsaW5nIGVmZmVjdCB0byBhbGwgaW50ZXJuYWwgbGlua3Mgb24gdGhlIHBhZ2UuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gVmFsZXJpbyBQcm9pZXR0aQorCityZXF1aXJlczoKKyAgLSBDb3JlL1NsaWNrLkZpbmRlcgorICAtIC9GeC5TY3JvbGwKKworcHJvdmlkZXM6IFtGeC5TbW9vdGhTY3JvbGxdCisKKy4uLgorKi8KKworLyo8MS4yY29tcGF0PiovdmFyIFNtb290aFNjcm9sbCA9IC8qPC8xLjJjb21wYXQ+Ki9GeC5TbW9vdGhTY3JvbGwgPSBuZXcgQ2xhc3MoeworCisJRXh0ZW5kczogRnguU2Nyb2xsLAorCisJb3B0aW9uczogeworCQlheGVzOiBbJ3gnLCAneSddCisJfSwKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMsIGNvbnRleHQpeworCQljb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKKwkJdGhpcy5kb2MgPSBjb250ZXh0LmdldERvY3VtZW50KCk7CisJCXRoaXMucGFyZW50KHRoaXMuZG9jLCBvcHRpb25zKTsKKworCQl2YXIgd2luID0gY29udGV4dC5nZXRXaW5kb3coKSwKKwkJCWxvY2F0aW9uID0gd2luLmxvY2F0aW9uLmhyZWYubWF0Y2goL15bXiNdKi8pWzBdICsgJyMnLAorCQkJbGlua3MgPSAkJCh0aGlzLm9wdGlvbnMubGlua3MgfHwgdGhpcy5kb2MubGlua3MpOworCisJCWxpbmtzLmVhY2goZnVuY3Rpb24obGluayl7CisJCQlpZiAobGluay5ocmVmLmluZGV4T2YobG9jYXRpb24pICE9IDApIHJldHVybjsKKwkJCXZhciBhbmNob3IgPSBsaW5rLmhyZWYuc3Vic3RyKGxvY2F0aW9uLmxlbmd0aCk7CisJCQlpZiAoYW5jaG9yKSB0aGlzLnVzZUxpbmsobGluaywgYW5jaG9yKTsKKwkJfSwgdGhpcyk7CisKKwkJdGhpcy5hZGRFdmVudCgnY29tcGxldGUnLCBmdW5jdGlvbigpeworCQkJd2luLmxvY2F0aW9uLmhhc2ggPSB0aGlzLmFuY2hvcjsKKwkJCXRoaXMuZWxlbWVudC5zY3JvbGxUbyh0aGlzLnRvWzBdLCB0aGlzLnRvWzFdKTsKKwkJfSwgdHJ1ZSk7CisJfSwKKworCXVzZUxpbms6IGZ1bmN0aW9uKGxpbmssIGFuY2hvcil7CisKKwkJbGluay5hZGRFdmVudCgnY2xpY2snLCBmdW5jdGlvbihldmVudCl7CisJCQl2YXIgZWwgPSBkb2N1bWVudC5pZChhbmNob3IpIHx8IHRoaXMuZG9jLmdldEVsZW1lbnQoJ2FbbmFtZT0nICsgYW5jaG9yICsgJ10nKTsKKwkJCWlmICghZWwpIHJldHVybjsKKworCQkJZXZlbnQucHJldmVudERlZmF1bHQoKTsKKwkJCXRoaXMudG9FbGVtZW50KGVsLCB0aGlzLm9wdGlvbnMuYXhlcykuY2hhaW4oZnVuY3Rpb24oKXsKKwkJCQl0aGlzLmZpcmVFdmVudCgnc2Nyb2xsZWRUbycsIFtsaW5rLCBlbF0pOworCQkJfS5iaW5kKHRoaXMpKTsKKworCQkJdGhpcy5hbmNob3IgPSBhbmNob3I7CisKKwkJfS5iaW5kKHRoaXMpKTsKKworCQlyZXR1cm4gdGhpczsKKwl9Cit9KTsKKworCisvKgorLS0tCisKK3NjcmlwdDogRnguU29ydC5qcworCituYW1lOiBGeC5Tb3J0CisKK2Rlc2NyaXB0aW9uOiBEZWZpbmVzIEZ4LlNvcnQsIGEgY2xhc3MgdGhhdCByZW9yZGVycyBsaXN0cyB3aXRoIGEgdHJhbnNpdGlvbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9FbGVtZW50LkRpbWVuc2lvbnMKKyAgLSAvRnguRWxlbWVudHMKKyAgLSAvRWxlbWVudC5NZWFzdXJlCisKK3Byb3ZpZGVzOiBbRnguU29ydF0KKworLi4uCisqLworCitGeC5Tb3J0ID0gbmV3IENsYXNzKHsKKworCUV4dGVuZHM6IEZ4LkVsZW1lbnRzLAorCisJb3B0aW9uczogeworCQltb2RlOiAndmVydGljYWwnCisJfSwKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnRzLCBvcHRpb25zKXsKKwkJdGhpcy5wYXJlbnQoZWxlbWVudHMsIG9wdGlvbnMpOworCQl0aGlzLmVsZW1lbnRzLmVhY2goZnVuY3Rpb24oZWwpeworCQkJaWYgKGVsLmdldFN0eWxlKCdwb3NpdGlvbicpID09ICdzdGF0aWMnKSBlbC5zZXRTdHlsZSgncG9zaXRpb24nLCAncmVsYXRpdmUnKTsKKwkJfSk7CisJCXRoaXMuc2V0RGVmYXVsdE9yZGVyKCk7CisJfSwKKworCXNldERlZmF1bHRPcmRlcjogZnVuY3Rpb24oKXsKKwkJdGhpcy5jdXJyZW50T3JkZXIgPSB0aGlzLmVsZW1lbnRzLm1hcChmdW5jdGlvbihlbCwgaW5kZXgpeworCQkJcmV0dXJuIGluZGV4OworCQl9KTsKKwl9LAorCisJc29ydDogZnVuY3Rpb24oKXsKKwkJaWYgKCF0aGlzLmNoZWNrKGFyZ3VtZW50cykpIHJldHVybiB0aGlzOworCQl2YXIgbmV3T3JkZXIgPSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyk7CisKKwkJdmFyIHRvcCA9IDAsCisJCQlsZWZ0ID0gMCwKKwkJCW5leHQgPSB7fSwKKwkJCXplcm8gPSB7fSwKKwkJCXZlcnQgPSB0aGlzLm9wdGlvbnMubW9kZSA9PSAndmVydGljYWwnOworCisJCXZhciBjdXJyZW50ID0gdGhpcy5lbGVtZW50cy5tYXAoZnVuY3Rpb24oZWwsIGluZGV4KXsKKwkJCXZhciBzaXplID0gZWwuZ2V0Q29tcHV0ZWRTaXplKHtzdHlsZXM6IFsnYm9yZGVyJywgJ3BhZGRpbmcnLCAnbWFyZ2luJ119KTsKKwkJCXZhciB2YWw7CisJCQlpZiAodmVydCl7CisJCQkJdmFsID0geworCQkJCQl0b3A6IHRvcCwKKwkJCQkJbWFyZ2luOiBzaXplWydtYXJnaW4tdG9wJ10sCisJCQkJCWhlaWdodDogc2l6ZS50b3RhbEhlaWdodAorCQkJCX07CisJCQkJdG9wICs9IHZhbC5oZWlnaHQgLSBzaXplWydtYXJnaW4tdG9wJ107CisJCQl9IGVsc2UgeworCQkJCXZhbCA9IHsKKwkJCQkJbGVmdDogbGVmdCwKKwkJCQkJbWFyZ2luOiBzaXplWydtYXJnaW4tbGVmdCddLAorCQkJCQl3aWR0aDogc2l6ZS50b3RhbFdpZHRoCisJCQkJfTsKKwkJCQlsZWZ0ICs9IHZhbC53aWR0aDsKKwkJCX0KKwkJCXZhciBwbGFuZSA9IHZlcnQgPyAndG9wJyA6ICdsZWZ0JzsKKwkJCXplcm9baW5kZXhdID0ge307CisJCQl2YXIgc3RhcnQgPSBlbC5nZXRTdHlsZShwbGFuZSkudG9JbnQoKTsKKwkJCXplcm9baW5kZXhdW3BsYW5lXSA9IHN0YXJ0IHx8IDA7CisJCQlyZXR1cm4gdmFsOworCQl9LCB0aGlzKTsKKworCQl0aGlzLnNldCh6ZXJvKTsKKwkJbmV3T3JkZXIgPSBuZXdPcmRlci5tYXAoZnVuY3Rpb24oaSl7IHJldHVybiBpLnRvSW50KCk7IH0pOworCQlpZiAobmV3T3JkZXIubGVuZ3RoICE9IHRoaXMuZWxlbWVudHMubGVuZ3RoKXsKKwkJCXRoaXMuY3VycmVudE9yZGVyLmVhY2goZnVuY3Rpb24oaW5kZXgpeworCQkJCWlmICghbmV3T3JkZXIuY29udGFpbnMoaW5kZXgpKSBuZXdPcmRlci5wdXNoKGluZGV4KTsKKwkJCX0pOworCQkJaWYgKG5ld09yZGVyLmxlbmd0aCA+IHRoaXMuZWxlbWVudHMubGVuZ3RoKQorCQkJCW5ld09yZGVyLnNwbGljZSh0aGlzLmVsZW1lbnRzLmxlbmd0aC0xLCBuZXdPcmRlci5sZW5ndGggLSB0aGlzLmVsZW1lbnRzLmxlbmd0aCk7CisJCX0KKwkJdmFyIG1hcmdpbiA9IDA7CisJCXRvcCA9IGxlZnQgPSAwOworCQluZXdPcmRlci5lYWNoKGZ1bmN0aW9uKGl0ZW0peworCQkJdmFyIG5ld1BvcyA9IHt9OworCQkJaWYgKHZlcnQpeworCQkJCW5ld1Bvcy50b3AgPSB0b3AgLSBjdXJyZW50W2l0ZW1dLnRvcCAtIG1hcmdpbjsKKwkJCQl0b3AgKz0gY3VycmVudFtpdGVtXS5oZWlnaHQ7CisJCQl9IGVsc2UgeworCQkJCW5ld1Bvcy5sZWZ0ID0gbGVmdCAtIGN1cnJlbnRbaXRlbV0ubGVmdDsKKwkJCQlsZWZ0ICs9IGN1cnJlbnRbaXRlbV0ud2lkdGg7CisJCQl9CisJCQltYXJnaW4gPSBtYXJnaW4gKyBjdXJyZW50W2l0ZW1dLm1hcmdpbjsKKwkJCW5leHRbaXRlbV09bmV3UG9zOworCQl9LCB0aGlzKTsKKwkJdmFyIG1hcHBlZCA9IHt9OworCQlBcnJheS5jbG9uZShuZXdPcmRlcikuc29ydCgpLmVhY2goZnVuY3Rpb24oaW5kZXgpeworCQkJbWFwcGVkW2luZGV4XSA9IG5leHRbaW5kZXhdOworCQl9KTsKKwkJdGhpcy5zdGFydChtYXBwZWQpOworCQl0aGlzLmN1cnJlbnRPcmRlciA9IG5ld09yZGVyOworCisJCXJldHVybiB0aGlzOworCX0sCisKKwlyZWFycmFuZ2VET006IGZ1bmN0aW9uKG5ld09yZGVyKXsKKwkJbmV3T3JkZXIgPSBuZXdPcmRlciB8fCB0aGlzLmN1cnJlbnRPcmRlcjsKKwkJdmFyIHBhcmVudCA9IHRoaXMuZWxlbWVudHNbMF0uZ2V0UGFyZW50KCk7CisJCXZhciByZWFycmFuZ2VkID0gW107CisJCXRoaXMuZWxlbWVudHMuc2V0U3R5bGUoJ29wYWNpdHknLCAwKTsKKwkJLy9tb3ZlIGVhY2ggZWxlbWVudCBhbmQgc3RvcmUgdGhlIG5ldyBkZWZhdWx0IG9yZGVyCisJCW5ld09yZGVyLmVhY2goZnVuY3Rpb24oaW5kZXgpeworCQkJcmVhcnJhbmdlZC5wdXNoKHRoaXMuZWxlbWVudHNbaW5kZXhdLmluamVjdChwYXJlbnQpLnNldFN0eWxlcyh7CisJCQkJdG9wOiAwLAorCQkJCWxlZnQ6IDAKKwkJCX0pKTsKKwkJfSwgdGhpcyk7CisJCXRoaXMuZWxlbWVudHMuc2V0U3R5bGUoJ29wYWNpdHknLCAxKTsKKwkJdGhpcy5lbGVtZW50cyA9ICQkKHJlYXJyYW5nZWQpOworCQl0aGlzLnNldERlZmF1bHRPcmRlcigpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZ2V0RGVmYXVsdE9yZGVyOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5lbGVtZW50cy5tYXAoZnVuY3Rpb24oZWwsIGluZGV4KXsKKwkJCXJldHVybiBpbmRleDsKKwkJfSk7CisJfSwKKworCWdldEN1cnJlbnRPcmRlcjogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuY3VycmVudE9yZGVyOworCX0sCisKKwlmb3J3YXJkOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5zb3J0KHRoaXMuZ2V0RGVmYXVsdE9yZGVyKCkpOworCX0sCisKKwliYWNrd2FyZDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuc29ydCh0aGlzLmdldERlZmF1bHRPcmRlcigpLnJldmVyc2UoKSk7CisJfSwKKworCXJldmVyc2U6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLnNvcnQodGhpcy5jdXJyZW50T3JkZXIucmV2ZXJzZSgpKTsKKwl9LAorCisJc29ydEJ5RWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnRzKXsKKwkJcmV0dXJuIHRoaXMuc29ydChlbGVtZW50cy5tYXAoZnVuY3Rpb24oZWwpeworCQkJcmV0dXJuIHRoaXMuZWxlbWVudHMuaW5kZXhPZihlbCk7CisJCX0sIHRoaXMpKTsKKwl9LAorCisJc3dhcDogZnVuY3Rpb24ob25lLCB0d28peworCQlpZiAodHlwZU9mKG9uZSkgPT0gJ2VsZW1lbnQnKSBvbmUgPSB0aGlzLmVsZW1lbnRzLmluZGV4T2Yob25lKTsKKwkJaWYgKHR5cGVPZih0d28pID09ICdlbGVtZW50JykgdHdvID0gdGhpcy5lbGVtZW50cy5pbmRleE9mKHR3byk7CisKKwkJdmFyIG5ld09yZGVyID0gQXJyYXkuY2xvbmUodGhpcy5jdXJyZW50T3JkZXIpOworCQluZXdPcmRlclt0aGlzLmN1cnJlbnRPcmRlci5pbmRleE9mKG9uZSldID0gdHdvOworCQluZXdPcmRlclt0aGlzLmN1cnJlbnRPcmRlci5pbmRleE9mKHR3byldID0gb25lOworCisJCXJldHVybiB0aGlzLnNvcnQobmV3T3JkZXIpOworCX0KKworfSk7CisKKworLyoKKy0tLQorCitzY3JpcHQ6IERyYWcuanMKKworbmFtZTogRHJhZworCitkZXNjcmlwdGlvbjogVGhlIGJhc2UgRHJhZyBDbGFzcy4gQ2FuIGJlIHVzZWQgdG8gZHJhZyBhbmQgcmVzaXplIEVsZW1lbnRzIHVzaW5nIG1vdXNlIGV2ZW50cy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBWYWxlcmlvIFByb2lldHRpCisgIC0gVG9tIE9jY2hpbm5vCisgIC0gSmFuIEthc3NlbnMKKworcmVxdWlyZXM6CisgIC0gQ29yZS9FdmVudHMKKyAgLSBDb3JlL09wdGlvbnMKKyAgLSBDb3JlL0VsZW1lbnQuRXZlbnQKKyAgLSBDb3JlL0VsZW1lbnQuU3R5bGUKKyAgLSBDb3JlL0VsZW1lbnQuRGltZW5zaW9ucworICAtIC9Nb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbRHJhZ10KKy4uLgorCisqLworCit2YXIgRHJhZyA9IG5ldyBDbGFzcyh7CisKKwlJbXBsZW1lbnRzOiBbRXZlbnRzLCBPcHRpb25zXSwKKworCW9wdGlvbnM6IHsvKgorCQlvbkJlZm9yZVN0YXJ0OiBmdW5jdGlvbih0aGlzRWxlbWVudCl7fSwKKwkJb25TdGFydDogZnVuY3Rpb24odGhpc0VsZW1lbnQsIGV2ZW50KXt9LAorCQlvblNuYXA6IGZ1bmN0aW9uKHRoaXNFbGVtZW50KXt9LAorCQlvbkRyYWc6IGZ1bmN0aW9uKHRoaXNFbGVtZW50LCBldmVudCl7fSwKKwkJb25DYW5jZWw6IGZ1bmN0aW9uKHRoaXNFbGVtZW50KXt9LAorCQlvbkNvbXBsZXRlOiBmdW5jdGlvbih0aGlzRWxlbWVudCwgZXZlbnQpe30sKi8KKwkJc25hcDogNiwKKwkJdW5pdDogJ3B4JywKKwkJZ3JpZDogZmFsc2UsCisJCXN0eWxlOiB0cnVlLAorCQlsaW1pdDogZmFsc2UsCisJCWhhbmRsZTogZmFsc2UsCisJCWludmVydDogZmFsc2UsCisJCXByZXZlbnREZWZhdWx0OiBmYWxzZSwKKwkJc3RvcFByb3BhZ2F0aW9uOiBmYWxzZSwKKwkJbW9kaWZpZXJzOiB7eDogJ2xlZnQnLCB5OiAndG9wJ30KKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24oKXsKKwkJdmFyIHBhcmFtcyA9IEFycmF5LmxpbmsoYXJndW1lbnRzLCB7CisJCQknb3B0aW9ucyc6IFR5cGUuaXNPYmplY3QsCisJCQknZWxlbWVudCc6IGZ1bmN0aW9uKG9iail7CisJCQkJcmV0dXJuIG9iaiAhPSBudWxsOworCQkJfQorCQl9KTsKKworCQl0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5pZChwYXJhbXMuZWxlbWVudCk7CisJCXRoaXMuZG9jdW1lbnQgPSB0aGlzLmVsZW1lbnQuZ2V0RG9jdW1lbnQoKTsKKwkJdGhpcy5zZXRPcHRpb25zKHBhcmFtcy5vcHRpb25zIHx8IHt9KTsKKwkJdmFyIGh0eXBlID0gdHlwZU9mKHRoaXMub3B0aW9ucy5oYW5kbGUpOworCQl0aGlzLmhhbmRsZXMgPSAoKGh0eXBlID09ICdhcnJheScgfHwgaHR5cGUgPT0gJ2NvbGxlY3Rpb24nKSA/ICQkKHRoaXMub3B0aW9ucy5oYW5kbGUpIDogZG9jdW1lbnQuaWQodGhpcy5vcHRpb25zLmhhbmRsZSkpIHx8IHRoaXMuZWxlbWVudDsKKwkJdGhpcy5tb3VzZSA9IHsnbm93Jzoge30sICdwb3MnOiB7fX07CisJCXRoaXMudmFsdWUgPSB7J3N0YXJ0Jzoge30sICdub3cnOiB7fX07CisKKwkJdGhpcy5zZWxlY3Rpb24gPSAoQnJvd3Nlci5pZSkgPyAnc2VsZWN0c3RhcnQnIDogJ21vdXNlZG93bic7CisKKworCQlpZiAoQnJvd3Nlci5pZSAmJiAhRHJhZy5vbmRyYWdzdGFydEZpeGVkKXsKKwkJCWRvY3VtZW50Lm9uZHJhZ3N0YXJ0ID0gRnVuY3Rpb24uZnJvbShmYWxzZSk7CisJCQlEcmFnLm9uZHJhZ3N0YXJ0Rml4ZWQgPSB0cnVlOworCQl9CisKKwkJdGhpcy5ib3VuZCA9IHsKKwkJCXN0YXJ0OiB0aGlzLnN0YXJ0LmJpbmQodGhpcyksCisJCQljaGVjazogdGhpcy5jaGVjay5iaW5kKHRoaXMpLAorCQkJZHJhZzogdGhpcy5kcmFnLmJpbmQodGhpcyksCisJCQlzdG9wOiB0aGlzLnN0b3AuYmluZCh0aGlzKSwKKwkJCWNhbmNlbDogdGhpcy5jYW5jZWwuYmluZCh0aGlzKSwKKwkJCWV2ZW50U3RvcDogRnVuY3Rpb24uZnJvbShmYWxzZSkKKwkJfTsKKwkJdGhpcy5hdHRhY2goKTsKKwl9LAorCisJYXR0YWNoOiBmdW5jdGlvbigpeworCQl0aGlzLmhhbmRsZXMuYWRkRXZlbnQoJ21vdXNlZG93bicsIHRoaXMuYm91bmQuc3RhcnQpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZGV0YWNoOiBmdW5jdGlvbigpeworCQl0aGlzLmhhbmRsZXMucmVtb3ZlRXZlbnQoJ21vdXNlZG93bicsIHRoaXMuYm91bmQuc3RhcnQpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50KXsKKwkJdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7CisKKwkJaWYgKGV2ZW50LnJpZ2h0Q2xpY2spIHJldHVybjsKKworCQlpZiAob3B0aW9ucy5wcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKwkJaWYgKG9wdGlvbnMuc3RvcFByb3BhZ2F0aW9uKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKwkJdGhpcy5tb3VzZS5zdGFydCA9IGV2ZW50LnBhZ2U7CisKKwkJdGhpcy5maXJlRXZlbnQoJ2JlZm9yZVN0YXJ0JywgdGhpcy5lbGVtZW50KTsKKworCQl2YXIgbGltaXQgPSBvcHRpb25zLmxpbWl0OworCQl0aGlzLmxpbWl0ID0ge3g6IFtdLCB5OiBbXX07CisKKwkJdmFyIHosIGNvb3JkaW5hdGVzOworCQlmb3IgKHogaW4gb3B0aW9ucy5tb2RpZmllcnMpeworCQkJaWYgKCFvcHRpb25zLm1vZGlmaWVyc1t6XSkgY29udGludWU7CisKKwkJCXZhciBzdHlsZSA9IHRoaXMuZWxlbWVudC5nZXRTdHlsZShvcHRpb25zLm1vZGlmaWVyc1t6XSk7CisKKwkJCS8vIFNvbWUgYnJvd3NlcnMgKElFIGFuZCBPcGVyYSkgZG9uJ3QgYWx3YXlzIHJldHVybiBwaXhlbHMuCisJCQlpZiAoc3R5bGUgJiYgIXN0eWxlLm1hdGNoKC9weCQvKSl7CisJCQkJaWYgKCFjb29yZGluYXRlcykgY29vcmRpbmF0ZXMgPSB0aGlzLmVsZW1lbnQuZ2V0Q29vcmRpbmF0ZXModGhpcy5lbGVtZW50LmdldE9mZnNldFBhcmVudCgpKTsKKwkJCQlzdHlsZSA9IGNvb3JkaW5hdGVzW29wdGlvbnMubW9kaWZpZXJzW3pdXTsKKwkJCX0KKworCQkJaWYgKG9wdGlvbnMuc3R5bGUpIHRoaXMudmFsdWUubm93W3pdID0gKHN0eWxlIHx8IDApLnRvSW50KCk7CisJCQllbHNlIHRoaXMudmFsdWUubm93W3pdID0gdGhpcy5lbGVtZW50W29wdGlvbnMubW9kaWZpZXJzW3pdXTsKKworCQkJaWYgKG9wdGlvbnMuaW52ZXJ0KSB0aGlzLnZhbHVlLm5vd1t6XSAqPSAtMTsKKworCQkJdGhpcy5tb3VzZS5wb3Nbel0gPSBldmVudC5wYWdlW3pdIC0gdGhpcy52YWx1ZS5ub3dbel07CisKKwkJCWlmIChsaW1pdCAmJiBsaW1pdFt6XSl7CisJCQkJdmFyIGkgPSAyOworCQkJCXdoaWxlIChpLS0peworCQkJCQl2YXIgbGltaXRaSSA9IGxpbWl0W3pdW2ldOworCQkJCQlpZiAobGltaXRaSSB8fCBsaW1pdFpJID09PSAwKSB0aGlzLmxpbWl0W3pdW2ldID0gKHR5cGVvZiBsaW1pdFpJID09ICdmdW5jdGlvbicpID8gbGltaXRaSSgpIDogbGltaXRaSTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAodHlwZU9mKHRoaXMub3B0aW9ucy5ncmlkKSA9PSAnbnVtYmVyJykgdGhpcy5vcHRpb25zLmdyaWQgPSB7CisJCQl4OiB0aGlzLm9wdGlvbnMuZ3JpZCwKKwkJCXk6IHRoaXMub3B0aW9ucy5ncmlkCisJCX07CisKKwkJdmFyIGV2ZW50cyA9IHsKKwkJCW1vdXNlbW92ZTogdGhpcy5ib3VuZC5jaGVjaywKKwkJCW1vdXNldXA6IHRoaXMuYm91bmQuY2FuY2VsCisJCX07CisJCWV2ZW50c1t0aGlzLnNlbGVjdGlvbl0gPSB0aGlzLmJvdW5kLmV2ZW50U3RvcDsKKwkJdGhpcy5kb2N1bWVudC5hZGRFdmVudHMoZXZlbnRzKTsKKwl9LAorCisJY2hlY2s6IGZ1bmN0aW9uKGV2ZW50KXsKKwkJaWYgKHRoaXMub3B0aW9ucy5wcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKwkJdmFyIGRpc3RhbmNlID0gTWF0aC5yb3VuZChNYXRoLnNxcnQoTWF0aC5wb3coZXZlbnQucGFnZS54IC0gdGhpcy5tb3VzZS5zdGFydC54LCAyKSArIE1hdGgucG93KGV2ZW50LnBhZ2UueSAtIHRoaXMubW91c2Uuc3RhcnQueSwgMikpKTsKKwkJaWYgKGRpc3RhbmNlID4gdGhpcy5vcHRpb25zLnNuYXApeworCQkJdGhpcy5jYW5jZWwoKTsKKwkJCXRoaXMuZG9jdW1lbnQuYWRkRXZlbnRzKHsKKwkJCQltb3VzZW1vdmU6IHRoaXMuYm91bmQuZHJhZywKKwkJCQltb3VzZXVwOiB0aGlzLmJvdW5kLnN0b3AKKwkJCX0pOworCQkJdGhpcy5maXJlRXZlbnQoJ3N0YXJ0JywgW3RoaXMuZWxlbWVudCwgZXZlbnRdKS5maXJlRXZlbnQoJ3NuYXAnLCB0aGlzLmVsZW1lbnQpOworCQl9CisJfSwKKworCWRyYWc6IGZ1bmN0aW9uKGV2ZW50KXsKKwkJdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7CisKKwkJaWYgKG9wdGlvbnMucHJldmVudERlZmF1bHQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisJCXRoaXMubW91c2Uubm93ID0gZXZlbnQucGFnZTsKKworCQlmb3IgKHZhciB6IGluIG9wdGlvbnMubW9kaWZpZXJzKXsKKwkJCWlmICghb3B0aW9ucy5tb2RpZmllcnNbel0pIGNvbnRpbnVlOworCQkJdGhpcy52YWx1ZS5ub3dbel0gPSB0aGlzLm1vdXNlLm5vd1t6XSAtIHRoaXMubW91c2UucG9zW3pdOworCisJCQlpZiAob3B0aW9ucy5pbnZlcnQpIHRoaXMudmFsdWUubm93W3pdICo9IC0xOworCisJCQlpZiAob3B0aW9ucy5saW1pdCAmJiB0aGlzLmxpbWl0W3pdKXsKKwkJCQlpZiAoKHRoaXMubGltaXRbel1bMV0gfHwgdGhpcy5saW1pdFt6XVsxXSA9PT0gMCkgJiYgKHRoaXMudmFsdWUubm93W3pdID4gdGhpcy5saW1pdFt6XVsxXSkpeworCQkJCQl0aGlzLnZhbHVlLm5vd1t6XSA9IHRoaXMubGltaXRbel1bMV07CisJCQkJfSBlbHNlIGlmICgodGhpcy5saW1pdFt6XVswXSB8fCB0aGlzLmxpbWl0W3pdWzBdID09PSAwKSAmJiAodGhpcy52YWx1ZS5ub3dbel0gPCB0aGlzLmxpbWl0W3pdWzBdKSl7CisJCQkJCXRoaXMudmFsdWUubm93W3pdID0gdGhpcy5saW1pdFt6XVswXTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChvcHRpb25zLmdyaWRbel0pIHRoaXMudmFsdWUubm93W3pdIC09ICgodGhpcy52YWx1ZS5ub3dbel0gLSAodGhpcy5saW1pdFt6XVswXXx8MCkpICUgb3B0aW9ucy5ncmlkW3pdKTsKKworCQkJaWYgKG9wdGlvbnMuc3R5bGUpIHRoaXMuZWxlbWVudC5zZXRTdHlsZShvcHRpb25zLm1vZGlmaWVyc1t6XSwgdGhpcy52YWx1ZS5ub3dbel0gKyBvcHRpb25zLnVuaXQpOworCQkJZWxzZSB0aGlzLmVsZW1lbnRbb3B0aW9ucy5tb2RpZmllcnNbel1dID0gdGhpcy52YWx1ZS5ub3dbel07CisJCX0KKworCQl0aGlzLmZpcmVFdmVudCgnZHJhZycsIFt0aGlzLmVsZW1lbnQsIGV2ZW50XSk7CisJfSwKKworCWNhbmNlbDogZnVuY3Rpb24oZXZlbnQpeworCQl0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50cyh7CisJCQltb3VzZW1vdmU6IHRoaXMuYm91bmQuY2hlY2ssCisJCQltb3VzZXVwOiB0aGlzLmJvdW5kLmNhbmNlbAorCQl9KTsKKwkJaWYgKGV2ZW50KXsKKwkJCXRoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnQodGhpcy5zZWxlY3Rpb24sIHRoaXMuYm91bmQuZXZlbnRTdG9wKTsKKwkJCXRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnLCB0aGlzLmVsZW1lbnQpOworCQl9CisJfSwKKworCXN0b3A6IGZ1bmN0aW9uKGV2ZW50KXsKKwkJdmFyIGV2ZW50cyA9IHsKKwkJCW1vdXNlbW92ZTogdGhpcy5ib3VuZC5kcmFnLAorCQkJbW91c2V1cDogdGhpcy5ib3VuZC5zdG9wCisJCX07CisJCWV2ZW50c1t0aGlzLnNlbGVjdGlvbl0gPSB0aGlzLmJvdW5kLmV2ZW50U3RvcDsKKwkJdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudHMoZXZlbnRzKTsKKwkJaWYgKGV2ZW50KSB0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCBbdGhpcy5lbGVtZW50LCBldmVudF0pOworCX0KKworfSk7CisKK0VsZW1lbnQuaW1wbGVtZW50KHsKKworCW1ha2VSZXNpemFibGU6IGZ1bmN0aW9uKG9wdGlvbnMpeworCQl2YXIgZHJhZyA9IG5ldyBEcmFnKHRoaXMsIE9iamVjdC5tZXJnZSh7CisJCQltb2RpZmllcnM6IHsKKwkJCQl4OiAnd2lkdGgnLAorCQkJCXk6ICdoZWlnaHQnCisJCQl9CisJCX0sIG9wdGlvbnMpKTsKKworCQl0aGlzLnN0b3JlKCdyZXNpemVyJywgZHJhZyk7CisJCXJldHVybiBkcmFnLmFkZEV2ZW50KCdkcmFnJywgZnVuY3Rpb24oKXsKKwkJCXRoaXMuZmlyZUV2ZW50KCdyZXNpemUnLCBkcmFnKTsKKwkJfS5iaW5kKHRoaXMpKTsKKwl9CisKK30pOworCisKKy8qCistLS0KKworc2NyaXB0OiBEcmFnLk1vdmUuanMKKworbmFtZTogRHJhZy5Nb3ZlCisKK2Rlc2NyaXB0aW9uOiBBIERyYWcgZXh0ZW5zaW9uIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIGNvbnN0cmFpbmluZyBvZiBkcmFnZ2FibGVzIHRvIGNvbnRhaW5lcnMgYW5kIGRyb3BwYWJsZXMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gVmFsZXJpbyBQcm9pZXR0aQorICAtIFRvbSBPY2NoaW5ubworICAtIEphbiBLYXNzZW5zCisgIC0gQWFyb24gTmV3dG9uCisgIC0gU2NvdHQgS3lsZQorCityZXF1aXJlczoKKyAgLSBDb3JlL0VsZW1lbnQuRGltZW5zaW9ucworICAtIC9EcmFnCisKK3Byb3ZpZGVzOiBbRHJhZy5Nb3ZlXQorCisuLi4KKyovCisKK0RyYWcuTW92ZSA9IG5ldyBDbGFzcyh7CisKKwlFeHRlbmRzOiBEcmFnLAorCisJb3B0aW9uczogey8qCisJCW9uRW50ZXI6IGZ1bmN0aW9uKHRoaXNFbGVtZW50LCBvdmVyZWQpe30sCisJCW9uTGVhdmU6IGZ1bmN0aW9uKHRoaXNFbGVtZW50LCBvdmVyZWQpe30sCisJCW9uRHJvcDogZnVuY3Rpb24odGhpc0VsZW1lbnQsIG92ZXJlZCwgZXZlbnQpe30sKi8KKwkJZHJvcHBhYmxlczogW10sCisJCWNvbnRhaW5lcjogZmFsc2UsCisJCXByZWNhbGN1bGF0ZTogZmFsc2UsCisJCWluY2x1ZGVNYXJnaW5zOiB0cnVlLAorCQljaGVja0Ryb3BwYWJsZXM6IHRydWUKKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucyl7CisJCXRoaXMucGFyZW50KGVsZW1lbnQsIG9wdGlvbnMpOworCQllbGVtZW50ID0gdGhpcy5lbGVtZW50OworCisJCXRoaXMuZHJvcHBhYmxlcyA9ICQkKHRoaXMub3B0aW9ucy5kcm9wcGFibGVzKTsKKwkJdGhpcy5jb250YWluZXIgPSBkb2N1bWVudC5pZCh0aGlzLm9wdGlvbnMuY29udGFpbmVyKTsKKworCQlpZiAodGhpcy5jb250YWluZXIgJiYgdHlwZU9mKHRoaXMuY29udGFpbmVyKSAhPSAnZWxlbWVudCcpCisJCQl0aGlzLmNvbnRhaW5lciA9IGRvY3VtZW50LmlkKHRoaXMuY29udGFpbmVyLmdldERvY3VtZW50KCkuYm9keSk7CisKKwkJaWYgKHRoaXMub3B0aW9ucy5zdHlsZSl7CisJCQlpZiAodGhpcy5vcHRpb25zLm1vZGlmaWVycy54ID09ICdsZWZ0JyAmJiB0aGlzLm9wdGlvbnMubW9kaWZpZXJzLnkgPT0gJ3RvcCcpeworCQkJCXZhciBwYXJlbnQgPSBlbGVtZW50LmdldE9mZnNldFBhcmVudCgpLAorCQkJCQlzdHlsZXMgPSBlbGVtZW50LmdldFN0eWxlcygnbGVmdCcsICd0b3AnKTsKKwkJCQlpZiAocGFyZW50ICYmIChzdHlsZXMubGVmdCA9PSAnYXV0bycgfHwgc3R5bGVzLnRvcCA9PSAnYXV0bycpKXsKKwkJCQkJZWxlbWVudC5zZXRQb3NpdGlvbihlbGVtZW50LmdldFBvc2l0aW9uKHBhcmVudCkpOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGVsZW1lbnQuZ2V0U3R5bGUoJ3Bvc2l0aW9uJykgPT0gJ3N0YXRpYycpIGVsZW1lbnQuc2V0U3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJyk7CisJCX0KKworCQl0aGlzLmFkZEV2ZW50KCdzdGFydCcsIHRoaXMuY2hlY2tEcm9wcGFibGVzLCB0cnVlKTsKKwkJdGhpcy5vdmVyZWQgPSBudWxsOworCX0sCisKKwlzdGFydDogZnVuY3Rpb24oZXZlbnQpeworCQlpZiAodGhpcy5jb250YWluZXIpIHRoaXMub3B0aW9ucy5saW1pdCA9IHRoaXMuY2FsY3VsYXRlTGltaXQoKTsKKworCQlpZiAodGhpcy5vcHRpb25zLnByZWNhbGN1bGF0ZSl7CisJCQl0aGlzLnBvc2l0aW9ucyA9IHRoaXMuZHJvcHBhYmxlcy5tYXAoZnVuY3Rpb24oZWwpeworCQkJCXJldHVybiBlbC5nZXRDb29yZGluYXRlcygpOworCQkJfSk7CisJCX0KKworCQl0aGlzLnBhcmVudChldmVudCk7CisJfSwKKworCWNhbGN1bGF0ZUxpbWl0OiBmdW5jdGlvbigpeworCQl2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVudCwKKwkJCWNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyLAorCisJCQlvZmZzZXRQYXJlbnQgPSBkb2N1bWVudC5pZChlbGVtZW50LmdldE9mZnNldFBhcmVudCgpKSB8fCBkb2N1bWVudC5ib2R5LAorCQkJY29udGFpbmVyQ29vcmRpbmF0ZXMgPSBjb250YWluZXIuZ2V0Q29vcmRpbmF0ZXMob2Zmc2V0UGFyZW50KSwKKwkJCWVsZW1lbnRNYXJnaW4gPSB7fSwKKwkJCWVsZW1lbnRCb3JkZXIgPSB7fSwKKwkJCWNvbnRhaW5lck1hcmdpbiA9IHt9LAorCQkJY29udGFpbmVyQm9yZGVyID0ge30sCisJCQlvZmZzZXRQYXJlbnRQYWRkaW5nID0ge307CisKKwkJWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXS5lYWNoKGZ1bmN0aW9uKHBhZCl7CisJCQllbGVtZW50TWFyZ2luW3BhZF0gPSBlbGVtZW50LmdldFN0eWxlKCdtYXJnaW4tJyArIHBhZCkudG9JbnQoKTsKKwkJCWVsZW1lbnRCb3JkZXJbcGFkXSA9IGVsZW1lbnQuZ2V0U3R5bGUoJ2JvcmRlci0nICsgcGFkKS50b0ludCgpOworCQkJY29udGFpbmVyTWFyZ2luW3BhZF0gPSBjb250YWluZXIuZ2V0U3R5bGUoJ21hcmdpbi0nICsgcGFkKS50b0ludCgpOworCQkJY29udGFpbmVyQm9yZGVyW3BhZF0gPSBjb250YWluZXIuZ2V0U3R5bGUoJ2JvcmRlci0nICsgcGFkKS50b0ludCgpOworCQkJb2Zmc2V0UGFyZW50UGFkZGluZ1twYWRdID0gb2Zmc2V0UGFyZW50LmdldFN0eWxlKCdwYWRkaW5nLScgKyBwYWQpLnRvSW50KCk7CisJCX0sIHRoaXMpOworCisJCXZhciB3aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGggKyBlbGVtZW50TWFyZ2luLmxlZnQgKyBlbGVtZW50TWFyZ2luLnJpZ2h0LAorCQkJaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgKyBlbGVtZW50TWFyZ2luLnRvcCArIGVsZW1lbnRNYXJnaW4uYm90dG9tLAorCQkJbGVmdCA9IDAsCisJCQl0b3AgPSAwLAorCQkJcmlnaHQgPSBjb250YWluZXJDb29yZGluYXRlcy5yaWdodCAtIGNvbnRhaW5lckJvcmRlci5yaWdodCAtIHdpZHRoLAorCQkJYm90dG9tID0gY29udGFpbmVyQ29vcmRpbmF0ZXMuYm90dG9tIC0gY29udGFpbmVyQm9yZGVyLmJvdHRvbSAtIGhlaWdodDsKKworCQlpZiAodGhpcy5vcHRpb25zLmluY2x1ZGVNYXJnaW5zKXsKKwkJCWxlZnQgKz0gZWxlbWVudE1hcmdpbi5sZWZ0OworCQkJdG9wICs9IGVsZW1lbnRNYXJnaW4udG9wOworCQl9IGVsc2UgeworCQkJcmlnaHQgKz0gZWxlbWVudE1hcmdpbi5yaWdodDsKKwkJCWJvdHRvbSArPSBlbGVtZW50TWFyZ2luLmJvdHRvbTsKKwkJfQorCisJCWlmIChlbGVtZW50LmdldFN0eWxlKCdwb3NpdGlvbicpID09ICdyZWxhdGl2ZScpeworCQkJdmFyIGNvb3JkcyA9IGVsZW1lbnQuZ2V0Q29vcmRpbmF0ZXMob2Zmc2V0UGFyZW50KTsKKwkJCWNvb3Jkcy5sZWZ0IC09IGVsZW1lbnQuZ2V0U3R5bGUoJ2xlZnQnKS50b0ludCgpOworCQkJY29vcmRzLnRvcCAtPSBlbGVtZW50LmdldFN0eWxlKCd0b3AnKS50b0ludCgpOworCisJCQlsZWZ0IC09IGNvb3Jkcy5sZWZ0OworCQkJdG9wIC09IGNvb3Jkcy50b3A7CisJCQlpZiAoY29udGFpbmVyLmdldFN0eWxlKCdwb3NpdGlvbicpICE9ICdyZWxhdGl2ZScpeworCQkJCWxlZnQgKz0gY29udGFpbmVyQm9yZGVyLmxlZnQ7CisJCQkJdG9wICs9IGNvbnRhaW5lckJvcmRlci50b3A7CisJCQl9CisJCQlyaWdodCArPSBlbGVtZW50TWFyZ2luLmxlZnQgLSBjb29yZHMubGVmdDsKKwkJCWJvdHRvbSArPSBlbGVtZW50TWFyZ2luLnRvcCAtIGNvb3Jkcy50b3A7CisKKwkJCWlmIChjb250YWluZXIgIT0gb2Zmc2V0UGFyZW50KXsKKwkJCQlsZWZ0ICs9IGNvbnRhaW5lck1hcmdpbi5sZWZ0ICsgb2Zmc2V0UGFyZW50UGFkZGluZy5sZWZ0OworCQkJCXRvcCArPSAoKEJyb3dzZXIuaWU2IHx8IEJyb3dzZXIuaWU3KSA/IDAgOiBjb250YWluZXJNYXJnaW4udG9wKSArIG9mZnNldFBhcmVudFBhZGRpbmcudG9wOworCQkJfQorCQl9IGVsc2UgeworCQkJbGVmdCAtPSBlbGVtZW50TWFyZ2luLmxlZnQ7CisJCQl0b3AgLT0gZWxlbWVudE1hcmdpbi50b3A7CisJCQlpZiAoY29udGFpbmVyICE9IG9mZnNldFBhcmVudCl7CisJCQkJbGVmdCArPSBjb250YWluZXJDb29yZGluYXRlcy5sZWZ0ICsgY29udGFpbmVyQm9yZGVyLmxlZnQ7CisJCQkJdG9wICs9IGNvbnRhaW5lckNvb3JkaW5hdGVzLnRvcCArIGNvbnRhaW5lckJvcmRlci50b3A7CisJCQl9CisJCX0KKworCQlyZXR1cm4geworCQkJeDogW2xlZnQsIHJpZ2h0XSwKKwkJCXk6IFt0b3AsIGJvdHRvbV0KKwkJfTsKKwl9LAorCisJZ2V0RHJvcHBhYmxlQ29vcmRpbmF0ZXM6IGZ1bmN0aW9uKGVsZW1lbnQpeworCQl2YXIgcG9zaXRpb24gPSBlbGVtZW50LmdldENvb3JkaW5hdGVzKCk7CisJCWlmIChlbGVtZW50LmdldFN0eWxlKCdwb3NpdGlvbicpID09ICdmaXhlZCcpeworCQkJdmFyIHNjcm9sbCA9IHdpbmRvdy5nZXRTY3JvbGwoKTsKKwkJCXBvc2l0aW9uLmxlZnQgKz0gc2Nyb2xsLng7CisJCQlwb3NpdGlvbi5yaWdodCArPSBzY3JvbGwueDsKKwkJCXBvc2l0aW9uLnRvcCArPSBzY3JvbGwueTsKKwkJCXBvc2l0aW9uLmJvdHRvbSArPSBzY3JvbGwueTsKKwkJfQorCQlyZXR1cm4gcG9zaXRpb247CisJfSwKKworCWNoZWNrRHJvcHBhYmxlczogZnVuY3Rpb24oKXsKKwkJdmFyIG92ZXJlZCA9IHRoaXMuZHJvcHBhYmxlcy5maWx0ZXIoZnVuY3Rpb24oZWwsIGkpeworCQkJZWwgPSB0aGlzLnBvc2l0aW9ucyA/IHRoaXMucG9zaXRpb25zW2ldIDogdGhpcy5nZXREcm9wcGFibGVDb29yZGluYXRlcyhlbCk7CisJCQl2YXIgbm93ID0gdGhpcy5tb3VzZS5ub3c7CisJCQlyZXR1cm4gKG5vdy54ID4gZWwubGVmdCAmJiBub3cueCA8IGVsLnJpZ2h0ICYmIG5vdy55IDwgZWwuYm90dG9tICYmIG5vdy55ID4gZWwudG9wKTsKKwkJfSwgdGhpcykuZ2V0TGFzdCgpOworCisJCWlmICh0aGlzLm92ZXJlZCAhPSBvdmVyZWQpeworCQkJaWYgKHRoaXMub3ZlcmVkKSB0aGlzLmZpcmVFdmVudCgnbGVhdmUnLCBbdGhpcy5lbGVtZW50LCB0aGlzLm92ZXJlZF0pOworCQkJaWYgKG92ZXJlZCkgdGhpcy5maXJlRXZlbnQoJ2VudGVyJywgW3RoaXMuZWxlbWVudCwgb3ZlcmVkXSk7CisJCQl0aGlzLm92ZXJlZCA9IG92ZXJlZDsKKwkJfQorCX0sCisKKwlkcmFnOiBmdW5jdGlvbihldmVudCl7CisJCXRoaXMucGFyZW50KGV2ZW50KTsKKwkJaWYgKHRoaXMub3B0aW9ucy5jaGVja0Ryb3BwYWJsZXMgJiYgdGhpcy5kcm9wcGFibGVzLmxlbmd0aCkgdGhpcy5jaGVja0Ryb3BwYWJsZXMoKTsKKwl9LAorCisJc3RvcDogZnVuY3Rpb24oZXZlbnQpeworCQl0aGlzLmNoZWNrRHJvcHBhYmxlcygpOworCQl0aGlzLmZpcmVFdmVudCgnZHJvcCcsIFt0aGlzLmVsZW1lbnQsIHRoaXMub3ZlcmVkLCBldmVudF0pOworCQl0aGlzLm92ZXJlZCA9IG51bGw7CisJCXJldHVybiB0aGlzLnBhcmVudChldmVudCk7CisJfQorCit9KTsKKworRWxlbWVudC5pbXBsZW1lbnQoeworCisJbWFrZURyYWdnYWJsZTogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXZhciBkcmFnID0gbmV3IERyYWcuTW92ZSh0aGlzLCBvcHRpb25zKTsKKwkJdGhpcy5zdG9yZSgnZHJhZ2dlcicsIGRyYWcpOworCQlyZXR1cm4gZHJhZzsKKwl9CisKK30pOworCisKKy8qCistLS0KKworc2NyaXB0OiBTbGlkZXIuanMKKworbmFtZTogU2xpZGVyCisKK2Rlc2NyaXB0aW9uOiBDbGFzcyBmb3IgY3JlYXRpbmcgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgc2xpZGVyIGNvbnRyb2xzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFZhbGVyaW8gUHJvaWV0dGkKKworcmVxdWlyZXM6CisgIC0gQ29yZS9FbGVtZW50LkRpbWVuc2lvbnMKKyAgLSAvQ2xhc3MuQmluZHMKKyAgLSAvRHJhZworICAtIC9FbGVtZW50Lk1lYXN1cmUKKworcHJvdmlkZXM6IFtTbGlkZXJdCisKKy4uLgorKi8KKwordmFyIFNsaWRlciA9IG5ldyBDbGFzcyh7CisKKwlJbXBsZW1lbnRzOiBbRXZlbnRzLCBPcHRpb25zXSwKKworCUJpbmRzOiBbJ2NsaWNrZWRFbGVtZW50JywgJ2RyYWdnZWRLbm9iJywgJ3Njcm9sbGVkRWxlbWVudCddLAorCisJb3B0aW9uczogey8qCisJCW9uVGljazogZnVuY3Rpb24oaW50UG9zaXRpb24pe30sCisJCW9uQ2hhbmdlOiBmdW5jdGlvbihpbnRTdGVwKXt9LAorCQlvbkNvbXBsZXRlOiBmdW5jdGlvbihzdHJTdGVwKXt9LCovCisJCW9uVGljazogZnVuY3Rpb24ocG9zaXRpb24peworCQkJdGhpcy5zZXRLbm9iUG9zaXRpb24ocG9zaXRpb24pOworCQl9LAorCQlpbml0aWFsU3RlcDogMCwKKwkJc25hcDogZmFsc2UsCisJCW9mZnNldDogMCwKKwkJcmFuZ2U6IGZhbHNlLAorCQl3aGVlbDogZmFsc2UsCisJCXN0ZXBzOiAxMDAsCisJCW1vZGU6ICdob3Jpem9udGFsJworCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBrbm9iLCBvcHRpb25zKXsKKwkJdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpOworCQlvcHRpb25zID0gdGhpcy5vcHRpb25zOworCQl0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5pZChlbGVtZW50KTsKKwkJa25vYiA9IHRoaXMua25vYiA9IGRvY3VtZW50LmlkKGtub2IpOworCQl0aGlzLnByZXZpb3VzQ2hhbmdlID0gdGhpcy5wcmV2aW91c0VuZCA9IHRoaXMuc3RlcCA9IC0xOworCisJCXZhciBsaW1pdCA9IHt9LAorCQkJbW9kaWZpZXJzID0ge3g6IGZhbHNlLCB5OiBmYWxzZX07CisKKwkJc3dpdGNoIChvcHRpb25zLm1vZGUpeworCQkJY2FzZSAndmVydGljYWwnOgorCQkJCXRoaXMuYXhpcyA9ICd5JzsKKwkJCQl0aGlzLnByb3BlcnR5ID0gJ3RvcCc7CisJCQkJdGhpcy5vZmZzZXQgPSAnb2Zmc2V0SGVpZ2h0JzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2hvcml6b250YWwnOgorCQkJCXRoaXMuYXhpcyA9ICd4JzsKKwkJCQl0aGlzLnByb3BlcnR5ID0gJ2xlZnQnOworCQkJCXRoaXMub2Zmc2V0ID0gJ29mZnNldFdpZHRoJzsKKwkJfQorCisJCXRoaXMuc2V0U2xpZGVyRGltZW5zaW9ucygpOworCQl0aGlzLnNldFJhbmdlKG9wdGlvbnMucmFuZ2UpOworCisJCWlmIChrbm9iLmdldFN0eWxlKCdwb3NpdGlvbicpID09ICdzdGF0aWMnKSBrbm9iLnNldFN0eWxlKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpOworCQlrbm9iLnNldFN0eWxlKHRoaXMucHJvcGVydHksIC1vcHRpb25zLm9mZnNldCk7CisJCW1vZGlmaWVyc1t0aGlzLmF4aXNdID0gdGhpcy5wcm9wZXJ0eTsKKwkJbGltaXRbdGhpcy5heGlzXSA9IFstb3B0aW9ucy5vZmZzZXQsIHRoaXMuZnVsbCAtIG9wdGlvbnMub2Zmc2V0XTsKKworCQl2YXIgZHJhZ09wdGlvbnMgPSB7CisJCQlzbmFwOiAwLAorCQkJbGltaXQ6IGxpbWl0LAorCQkJbW9kaWZpZXJzOiBtb2RpZmllcnMsCisJCQlvbkRyYWc6IHRoaXMuZHJhZ2dlZEtub2IsCisJCQlvblN0YXJ0OiB0aGlzLmRyYWdnZWRLbm9iLAorCQkJb25CZWZvcmVTdGFydDogKGZ1bmN0aW9uKCl7CisJCQkJdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTsKKwkJCX0pLmJpbmQodGhpcyksCisJCQlvbkNhbmNlbDogZnVuY3Rpb24oKXsKKwkJCQl0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTsKKwkJCX0uYmluZCh0aGlzKSwKKwkJCW9uQ29tcGxldGU6IGZ1bmN0aW9uKCl7CisJCQkJdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7CisJCQkJdGhpcy5kcmFnZ2VkS25vYigpOworCQkJCXRoaXMuZW5kKCk7CisJCQl9LmJpbmQodGhpcykKKwkJfTsKKwkJaWYgKG9wdGlvbnMuc25hcCkgdGhpcy5zZXRTbmFwKGRyYWdPcHRpb25zKTsKKworCQl0aGlzLmRyYWcgPSBuZXcgRHJhZyhrbm9iLCBkcmFnT3B0aW9ucyk7CisJCXRoaXMuYXR0YWNoKCk7CisJCWlmIChvcHRpb25zLmluaXRpYWxTdGVwICE9IG51bGwpIHRoaXMuc2V0KG9wdGlvbnMuaW5pdGlhbFN0ZXApOworCX0sCisKKwlhdHRhY2g6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZWxlbWVudC5hZGRFdmVudCgnbW91c2Vkb3duJywgdGhpcy5jbGlja2VkRWxlbWVudCk7CisJCWlmICh0aGlzLm9wdGlvbnMud2hlZWwpIHRoaXMuZWxlbWVudC5hZGRFdmVudCgnbW91c2V3aGVlbCcsIHRoaXMuc2Nyb2xsZWRFbGVtZW50KTsKKwkJdGhpcy5kcmFnLmF0dGFjaCgpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZGV0YWNoOiBmdW5jdGlvbigpeworCQl0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnQoJ21vdXNlZG93bicsIHRoaXMuY2xpY2tlZEVsZW1lbnQpCisJCQkucmVtb3ZlRXZlbnQoJ21vdXNld2hlZWwnLCB0aGlzLnNjcm9sbGVkRWxlbWVudCk7CisJCXRoaXMuZHJhZy5kZXRhY2goKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWF1dG9zaXplOiBmdW5jdGlvbigpeworCQl0aGlzLnNldFNsaWRlckRpbWVuc2lvbnMoKQorCQkJLnNldEtub2JQb3NpdGlvbih0aGlzLnRvUG9zaXRpb24odGhpcy5zdGVwKSk7CisJCXRoaXMuZHJhZy5vcHRpb25zLmxpbWl0W3RoaXMuYXhpc10gPSBbLXRoaXMub3B0aW9ucy5vZmZzZXQsIHRoaXMuZnVsbCAtIHRoaXMub3B0aW9ucy5vZmZzZXRdOworCQlpZiAodGhpcy5vcHRpb25zLnNuYXApIHRoaXMuc2V0U25hcCgpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJc2V0U25hcDogZnVuY3Rpb24ob3B0aW9ucyl7CisJCWlmICghb3B0aW9ucykgb3B0aW9ucyA9IHRoaXMuZHJhZy5vcHRpb25zOworCQlvcHRpb25zLmdyaWQgPSBNYXRoLmNlaWwodGhpcy5zdGVwV2lkdGgpOworCQlvcHRpb25zLmxpbWl0W3RoaXMuYXhpc11bMV0gPSB0aGlzLmZ1bGw7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlzZXRLbm9iUG9zaXRpb246IGZ1bmN0aW9uKHBvc2l0aW9uKXsKKwkJaWYgKHRoaXMub3B0aW9ucy5zbmFwKSBwb3NpdGlvbiA9IHRoaXMudG9Qb3NpdGlvbih0aGlzLnN0ZXApOworCQl0aGlzLmtub2Iuc2V0U3R5bGUodGhpcy5wcm9wZXJ0eSwgcG9zaXRpb24pOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJc2V0U2xpZGVyRGltZW5zaW9uczogZnVuY3Rpb24oKXsKKwkJdGhpcy5mdWxsID0gdGhpcy5lbGVtZW50Lm1lYXN1cmUoZnVuY3Rpb24oKXsKKwkJCXRoaXMuaGFsZiA9IHRoaXMua25vYlt0aGlzLm9mZnNldF0gLyAyOworCQkJcmV0dXJuIHRoaXMuZWxlbWVudFt0aGlzLm9mZnNldF0gLSB0aGlzLmtub2JbdGhpcy5vZmZzZXRdICsgKHRoaXMub3B0aW9ucy5vZmZzZXQgKiAyKTsKKwkJfS5iaW5kKHRoaXMpKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXNldDogZnVuY3Rpb24oc3RlcCl7CisJCWlmICghKCh0aGlzLnJhbmdlID4gMCkgXiAoc3RlcCA8IHRoaXMubWluKSkpIHN0ZXAgPSB0aGlzLm1pbjsKKwkJaWYgKCEoKHRoaXMucmFuZ2UgPiAwKSBeIChzdGVwID4gdGhpcy5tYXgpKSkgc3RlcCA9IHRoaXMubWF4OworCisJCXRoaXMuc3RlcCA9IE1hdGgucm91bmQoc3RlcCk7CisJCXJldHVybiB0aGlzLmNoZWNrU3RlcCgpCisJCQkuZmlyZUV2ZW50KCd0aWNrJywgdGhpcy50b1Bvc2l0aW9uKHRoaXMuc3RlcCkpCisJCQkuZW5kKCk7CisJfSwKKworCXNldFJhbmdlOiBmdW5jdGlvbihyYW5nZSwgcG9zKXsKKwkJdGhpcy5taW4gPSBBcnJheS5waWNrKFtyYW5nZVswXSwgMF0pOworCQl0aGlzLm1heCA9IEFycmF5LnBpY2soW3JhbmdlWzFdLCB0aGlzLm9wdGlvbnMuc3RlcHNdKTsKKwkJdGhpcy5yYW5nZSA9IHRoaXMubWF4IC0gdGhpcy5taW47CisJCXRoaXMuc3RlcHMgPSB0aGlzLm9wdGlvbnMuc3RlcHMgfHwgdGhpcy5mdWxsOworCQl0aGlzLnN0ZXBTaXplID0gTWF0aC5hYnModGhpcy5yYW5nZSkgLyB0aGlzLnN0ZXBzOworCQl0aGlzLnN0ZXBXaWR0aCA9IHRoaXMuc3RlcFNpemUgKiB0aGlzLmZ1bGwgLyBNYXRoLmFicyh0aGlzLnJhbmdlKTsKKwkJaWYgKHJhbmdlKSB0aGlzLnNldChBcnJheS5waWNrKFtwb3MsIHRoaXMuc3RlcF0pLmZsb29yKHRoaXMubWluKS5tYXgodGhpcy5tYXgpKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWNsaWNrZWRFbGVtZW50OiBmdW5jdGlvbihldmVudCl7CisJCWlmICh0aGlzLmlzRHJhZ2dpbmcgfHwgZXZlbnQudGFyZ2V0ID09IHRoaXMua25vYikgcmV0dXJuOworCisJCXZhciBkaXIgPSB0aGlzLnJhbmdlIDwgMCA/IC0xIDogMSwKKwkJCXBvc2l0aW9uID0gZXZlbnQucGFnZVt0aGlzLmF4aXNdIC0gdGhpcy5lbGVtZW50LmdldFBvc2l0aW9uKClbdGhpcy5heGlzXSAtIHRoaXMuaGFsZjsKKworCQlwb3NpdGlvbiA9IHBvc2l0aW9uLmxpbWl0KC10aGlzLm9wdGlvbnMub2Zmc2V0LCB0aGlzLmZ1bGwgLSB0aGlzLm9wdGlvbnMub2Zmc2V0KTsKKworCQl0aGlzLnN0ZXAgPSBNYXRoLnJvdW5kKHRoaXMubWluICsgZGlyICogdGhpcy50b1N0ZXAocG9zaXRpb24pKTsKKworCQl0aGlzLmNoZWNrU3RlcCgpCisJCQkuZmlyZUV2ZW50KCd0aWNrJywgcG9zaXRpb24pCisJCQkuZW5kKCk7CisJfSwKKworCXNjcm9sbGVkRWxlbWVudDogZnVuY3Rpb24oZXZlbnQpeworCQl2YXIgbW9kZSA9ICh0aGlzLm9wdGlvbnMubW9kZSA9PSAnaG9yaXpvbnRhbCcpID8gKGV2ZW50LndoZWVsIDwgMCkgOiAoZXZlbnQud2hlZWwgPiAwKTsKKwkJdGhpcy5zZXQodGhpcy5zdGVwICsgKG1vZGUgPyAtMSA6IDEpICogdGhpcy5zdGVwU2l6ZSk7CisJCWV2ZW50LnN0b3AoKTsKKwl9LAorCisJZHJhZ2dlZEtub2I6IGZ1bmN0aW9uKCl7CisJCXZhciBkaXIgPSB0aGlzLnJhbmdlIDwgMCA/IC0xIDogMSwKKwkJCXBvc2l0aW9uID0gdGhpcy5kcmFnLnZhbHVlLm5vd1t0aGlzLmF4aXNdOworCisJCXBvc2l0aW9uID0gcG9zaXRpb24ubGltaXQoLXRoaXMub3B0aW9ucy5vZmZzZXQsIHRoaXMuZnVsbCAtdGhpcy5vcHRpb25zLm9mZnNldCk7CisKKwkJdGhpcy5zdGVwID0gTWF0aC5yb3VuZCh0aGlzLm1pbiArIGRpciAqIHRoaXMudG9TdGVwKHBvc2l0aW9uKSk7CisJCXRoaXMuY2hlY2tTdGVwKCk7CisJfSwKKworCWNoZWNrU3RlcDogZnVuY3Rpb24oKXsKKwkJdmFyIHN0ZXAgPSB0aGlzLnN0ZXA7CisJCWlmICh0aGlzLnByZXZpb3VzQ2hhbmdlICE9IHN0ZXApeworCQkJdGhpcy5wcmV2aW91c0NoYW5nZSA9IHN0ZXA7CisJCQl0aGlzLmZpcmVFdmVudCgnY2hhbmdlJywgc3RlcCk7CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWVuZDogZnVuY3Rpb24oKXsKKwkJdmFyIHN0ZXAgPSB0aGlzLnN0ZXA7CisJCWlmICh0aGlzLnByZXZpb3VzRW5kICE9PSBzdGVwKXsKKwkJCXRoaXMucHJldmlvdXNFbmQgPSBzdGVwOworCQkJdGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJywgc3RlcCArICcnKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJdG9TdGVwOiBmdW5jdGlvbihwb3NpdGlvbil7CisJCXZhciBzdGVwID0gKHBvc2l0aW9uICsgdGhpcy5vcHRpb25zLm9mZnNldCkgKiB0aGlzLnN0ZXBTaXplIC8gdGhpcy5mdWxsICogdGhpcy5zdGVwczsKKwkJcmV0dXJuIHRoaXMub3B0aW9ucy5zdGVwcyA/IE1hdGgucm91bmQoc3RlcCAtPSBzdGVwICUgdGhpcy5zdGVwU2l6ZSkgOiBzdGVwOworCX0sCisKKwl0b1Bvc2l0aW9uOiBmdW5jdGlvbihzdGVwKXsKKwkJcmV0dXJuICh0aGlzLmZ1bGwgKiBNYXRoLmFicyh0aGlzLm1pbiAtIHN0ZXApKSAvICh0aGlzLnN0ZXBzICogdGhpcy5zdGVwU2l6ZSkgLSB0aGlzLm9wdGlvbnMub2Zmc2V0OworCX0KKworfSk7CisKKworLyoKKy0tLQorCitzY3JpcHQ6IFNvcnRhYmxlcy5qcworCituYW1lOiBTb3J0YWJsZXMKKworZGVzY3JpcHRpb246IENsYXNzIGZvciBjcmVhdGluZyBhIGRyYWcgYW5kIGRyb3Agc29ydGluZyBpbnRlcmZhY2UgZm9yIGxpc3RzIG9mIGl0ZW1zLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFRvbSBPY2NoaW5vCisKK3JlcXVpcmVzOgorICAtIENvcmUvRnguTW9ycGgKKyAgLSAvRHJhZy5Nb3ZlCisKK3Byb3ZpZGVzOiBbU29ydGFibGVzXQorCisuLi4KKyovCisKK3ZhciBTb3J0YWJsZXMgPSBuZXcgQ2xhc3MoeworCisJSW1wbGVtZW50czogW0V2ZW50cywgT3B0aW9uc10sCisKKwlvcHRpb25zOiB7LyoKKwkJb25Tb3J0OiBmdW5jdGlvbihlbGVtZW50LCBjbG9uZSl7fSwKKwkJb25TdGFydDogZnVuY3Rpb24oZWxlbWVudCwgY2xvbmUpe30sCisJCW9uQ29tcGxldGU6IGZ1bmN0aW9uKGVsZW1lbnQpe30sKi8KKwkJb3BhY2l0eTogMSwKKwkJY2xvbmU6IGZhbHNlLAorCQlyZXZlcnQ6IGZhbHNlLAorCQloYW5kbGU6IGZhbHNlLAorCQlkcmFnT3B0aW9uczoge30vKjwxLjJjb21wYXQ+Ki8sCisJCXNuYXA6IDQsCisJCWNvbnN0cmFpbjogZmFsc2UsCisJCXByZXZlbnREZWZhdWx0OiBmYWxzZQorCQkvKjwvMS4yY29tcGF0PiovCisJfSwKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKGxpc3RzLCBvcHRpb25zKXsKKwkJdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpOworCisJCXRoaXMuZWxlbWVudHMgPSBbXTsKKwkJdGhpcy5saXN0cyA9IFtdOworCQl0aGlzLmlkbGUgPSB0cnVlOworCisJCXRoaXMuYWRkTGlzdHMoJCQoZG9jdW1lbnQuaWQobGlzdHMpIHx8IGxpc3RzKSk7CisKKwkJaWYgKCF0aGlzLm9wdGlvbnMuY2xvbmUpIHRoaXMub3B0aW9ucy5yZXZlcnQgPSBmYWxzZTsKKwkJaWYgKHRoaXMub3B0aW9ucy5yZXZlcnQpIHRoaXMuZWZmZWN0ID0gbmV3IEZ4Lk1vcnBoKG51bGwsIE9iamVjdC5tZXJnZSh7CisJCQlkdXJhdGlvbjogMjUwLAorCQkJbGluazogJ2NhbmNlbCcKKwkJfSwgdGhpcy5vcHRpb25zLnJldmVydCkpOworCX0sCisKKwlhdHRhY2g6IGZ1bmN0aW9uKCl7CisJCXRoaXMuYWRkTGlzdHModGhpcy5saXN0cyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlkZXRhY2g6IGZ1bmN0aW9uKCl7CisJCXRoaXMubGlzdHMgPSB0aGlzLnJlbW92ZUxpc3RzKHRoaXMubGlzdHMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJYWRkSXRlbXM6IGZ1bmN0aW9uKCl7CisJCUFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5lYWNoKGZ1bmN0aW9uKGVsZW1lbnQpeworCQkJdGhpcy5lbGVtZW50cy5wdXNoKGVsZW1lbnQpOworCQkJdmFyIHN0YXJ0ID0gZWxlbWVudC5yZXRyaWV2ZSgnc29ydGFibGVzOnN0YXJ0JywgZnVuY3Rpb24oZXZlbnQpeworCQkJCXRoaXMuc3RhcnQuY2FsbCh0aGlzLCBldmVudCwgZWxlbWVudCk7CisJCQl9LmJpbmQodGhpcykpOworCQkJKHRoaXMub3B0aW9ucy5oYW5kbGUgPyBlbGVtZW50LmdldEVsZW1lbnQodGhpcy5vcHRpb25zLmhhbmRsZSkgfHwgZWxlbWVudCA6IGVsZW1lbnQpLmFkZEV2ZW50KCdtb3VzZWRvd24nLCBzdGFydCk7CisJCX0sIHRoaXMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJYWRkTGlzdHM6IGZ1bmN0aW9uKCl7CisJCUFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5lYWNoKGZ1bmN0aW9uKGxpc3QpeworCQkJdGhpcy5saXN0cy5pbmNsdWRlKGxpc3QpOworCQkJdGhpcy5hZGRJdGVtcyhsaXN0LmdldENoaWxkcmVuKCkpOworCQl9LCB0aGlzKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXJlbW92ZUl0ZW1zOiBmdW5jdGlvbigpeworCQlyZXR1cm4gJCQoQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLm1hcChmdW5jdGlvbihlbGVtZW50KXsKKwkJCXRoaXMuZWxlbWVudHMuZXJhc2UoZWxlbWVudCk7CisJCQl2YXIgc3RhcnQgPSBlbGVtZW50LnJldHJpZXZlKCdzb3J0YWJsZXM6c3RhcnQnKTsKKwkJCSh0aGlzLm9wdGlvbnMuaGFuZGxlID8gZWxlbWVudC5nZXRFbGVtZW50KHRoaXMub3B0aW9ucy5oYW5kbGUpIHx8IGVsZW1lbnQgOiBlbGVtZW50KS5yZW1vdmVFdmVudCgnbW91c2Vkb3duJywgc3RhcnQpOworCisJCQlyZXR1cm4gZWxlbWVudDsKKwkJfSwgdGhpcykpOworCX0sCisKKwlyZW1vdmVMaXN0czogZnVuY3Rpb24oKXsKKwkJcmV0dXJuICQkKEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5tYXAoZnVuY3Rpb24obGlzdCl7CisJCQl0aGlzLmxpc3RzLmVyYXNlKGxpc3QpOworCQkJdGhpcy5yZW1vdmVJdGVtcyhsaXN0LmdldENoaWxkcmVuKCkpOworCisJCQlyZXR1cm4gbGlzdDsKKwkJfSwgdGhpcykpOworCX0sCisKKwlnZXRDbG9uZTogZnVuY3Rpb24oZXZlbnQsIGVsZW1lbnQpeworCQlpZiAoIXRoaXMub3B0aW9ucy5jbG9uZSkgcmV0dXJuIG5ldyBFbGVtZW50KGVsZW1lbnQudGFnTmFtZSkuaW5qZWN0KGRvY3VtZW50LmJvZHkpOworCQlpZiAodHlwZU9mKHRoaXMub3B0aW9ucy5jbG9uZSkgPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHRoaXMub3B0aW9ucy5jbG9uZS5jYWxsKHRoaXMsIGV2ZW50LCBlbGVtZW50LCB0aGlzLmxpc3QpOworCQl2YXIgY2xvbmUgPSBlbGVtZW50LmNsb25lKHRydWUpLnNldFN0eWxlcyh7CisJCQltYXJnaW46IDAsCisJCQlwb3NpdGlvbjogJ2Fic29sdXRlJywKKwkJCXZpc2liaWxpdHk6ICdoaWRkZW4nLAorCQkJd2lkdGg6IGVsZW1lbnQuZ2V0U3R5bGUoJ3dpZHRoJykKKwkJfSkuYWRkRXZlbnQoJ21vdXNlZG93bicsIGZ1bmN0aW9uKGV2ZW50KXsKKwkJCWVsZW1lbnQuZmlyZUV2ZW50KCdtb3VzZWRvd24nLCBldmVudCk7CisJCX0pOworCQkvL3ByZXZlbnQgdGhlIGR1cGxpY2F0ZWQgcmFkaW8gaW5wdXRzIGZyb20gdW5jaGVja2luZyB0aGUgcmVhbCBvbmUKKwkJaWYgKGNsb25lLmdldCgnaHRtbCcpLnRlc3QoJ3JhZGlvJykpeworCQkJY2xvbmUuZ2V0RWxlbWVudHMoJ2lucHV0W3R5cGU9cmFkaW9dJykuZWFjaChmdW5jdGlvbihpbnB1dCwgaSl7CisJCQkJaW5wdXQuc2V0KCduYW1lJywgJ2Nsb25lXycgKyBpKTsKKwkJCQlpZiAoaW5wdXQuZ2V0KCdjaGVja2VkJykpIGVsZW1lbnQuZ2V0RWxlbWVudHMoJ2lucHV0W3R5cGU9cmFkaW9dJylbaV0uc2V0KCdjaGVja2VkJywgdHJ1ZSk7CisJCQl9KTsKKwkJfQorCisJCXJldHVybiBjbG9uZS5pbmplY3QodGhpcy5saXN0KS5zZXRQb3NpdGlvbihlbGVtZW50LmdldFBvc2l0aW9uKGVsZW1lbnQuZ2V0T2Zmc2V0UGFyZW50KCkpKTsKKwl9LAorCisJZ2V0RHJvcHBhYmxlczogZnVuY3Rpb24oKXsKKwkJdmFyIGRyb3BwYWJsZXMgPSB0aGlzLmxpc3QuZ2V0Q2hpbGRyZW4oKS5lcmFzZSh0aGlzLmNsb25lKS5lcmFzZSh0aGlzLmVsZW1lbnQpOworCQlpZiAoIXRoaXMub3B0aW9ucy5jb25zdHJhaW4pIGRyb3BwYWJsZXMuYXBwZW5kKHRoaXMubGlzdHMpLmVyYXNlKHRoaXMubGlzdCk7CisJCXJldHVybiBkcm9wcGFibGVzOworCX0sCisKKwlpbnNlcnQ6IGZ1bmN0aW9uKGRyYWdnaW5nLCBlbGVtZW50KXsKKwkJdmFyIHdoZXJlID0gJ2luc2lkZSc7CisJCWlmICh0aGlzLmxpc3RzLmNvbnRhaW5zKGVsZW1lbnQpKXsKKwkJCXRoaXMubGlzdCA9IGVsZW1lbnQ7CisJCQl0aGlzLmRyYWcuZHJvcHBhYmxlcyA9IHRoaXMuZ2V0RHJvcHBhYmxlcygpOworCQl9IGVsc2UgeworCQkJd2hlcmUgPSB0aGlzLmVsZW1lbnQuZ2V0QWxsUHJldmlvdXMoKS5jb250YWlucyhlbGVtZW50KSA/ICdiZWZvcmUnIDogJ2FmdGVyJzsKKwkJfQorCQl0aGlzLmVsZW1lbnQuaW5qZWN0KGVsZW1lbnQsIHdoZXJlKTsKKwkJdGhpcy5maXJlRXZlbnQoJ3NvcnQnLCBbdGhpcy5lbGVtZW50LCB0aGlzLmNsb25lXSk7CisJfSwKKworCXN0YXJ0OiBmdW5jdGlvbihldmVudCwgZWxlbWVudCl7CisJCWlmICgKKwkJCSF0aGlzLmlkbGUgfHwKKwkJCWV2ZW50LnJpZ2h0Q2xpY2sgfHwKKwkJCVsnYnV0dG9uJywgJ2lucHV0JywgJ2EnXS5jb250YWlucyhldmVudC50YXJnZXQuZ2V0KCd0YWcnKSkKKwkJKSByZXR1cm47CisKKwkJdGhpcy5pZGxlID0gZmFsc2U7CisJCXRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7CisJCXRoaXMub3BhY2l0eSA9IGVsZW1lbnQuZ2V0KCdvcGFjaXR5Jyk7CisJCXRoaXMubGlzdCA9IGVsZW1lbnQuZ2V0UGFyZW50KCk7CisJCXRoaXMuY2xvbmUgPSB0aGlzLmdldENsb25lKGV2ZW50LCBlbGVtZW50KTsKKworCQl0aGlzLmRyYWcgPSBuZXcgRHJhZy5Nb3ZlKHRoaXMuY2xvbmUsIE9iamVjdC5tZXJnZSh7CisJCQkvKjwxLjJjb21wYXQ+Ki8KKwkJCXByZXZlbnREZWZhdWx0OiB0aGlzLm9wdGlvbnMucHJldmVudERlZmF1bHQsCisJCQlzbmFwOiB0aGlzLm9wdGlvbnMuc25hcCwKKwkJCWNvbnRhaW5lcjogdGhpcy5vcHRpb25zLmNvbnN0cmFpbiAmJiB0aGlzLmVsZW1lbnQuZ2V0UGFyZW50KCksCisJCQkvKjwvMS4yY29tcGF0PiovCisJCQlkcm9wcGFibGVzOiB0aGlzLmdldERyb3BwYWJsZXMoKQorCQl9LCB0aGlzLm9wdGlvbnMuZHJhZ09wdGlvbnMpKS5hZGRFdmVudHMoeworCQkJb25TbmFwOiBmdW5jdGlvbigpeworCQkJCWV2ZW50LnN0b3AoKTsKKwkJCQl0aGlzLmNsb25lLnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTsKKwkJCQl0aGlzLmVsZW1lbnQuc2V0KCdvcGFjaXR5JywgdGhpcy5vcHRpb25zLm9wYWNpdHkgfHwgMCk7CisJCQkJdGhpcy5maXJlRXZlbnQoJ3N0YXJ0JywgW3RoaXMuZWxlbWVudCwgdGhpcy5jbG9uZV0pOworCQkJfS5iaW5kKHRoaXMpLAorCQkJb25FbnRlcjogdGhpcy5pbnNlcnQuYmluZCh0aGlzKSwKKwkJCW9uQ2FuY2VsOiB0aGlzLmVuZC5iaW5kKHRoaXMpLAorCQkJb25Db21wbGV0ZTogdGhpcy5lbmQuYmluZCh0aGlzKQorCQl9KTsKKworCQl0aGlzLmNsb25lLmluamVjdCh0aGlzLmVsZW1lbnQsICdiZWZvcmUnKTsKKwkJdGhpcy5kcmFnLnN0YXJ0KGV2ZW50KTsKKwl9LAorCisJZW5kOiBmdW5jdGlvbigpeworCQl0aGlzLmRyYWcuZGV0YWNoKCk7CisJCXRoaXMuZWxlbWVudC5zZXQoJ29wYWNpdHknLCB0aGlzLm9wYWNpdHkpOworCQlpZiAodGhpcy5lZmZlY3QpeworCQkJdmFyIGRpbSA9IHRoaXMuZWxlbWVudC5nZXRTdHlsZXMoJ3dpZHRoJywgJ2hlaWdodCcpLAorCQkJCWNsb25lID0gdGhpcy5jbG9uZSwKKwkJCQlwb3MgPSBjbG9uZS5jb21wdXRlUG9zaXRpb24odGhpcy5lbGVtZW50LmdldFBvc2l0aW9uKHRoaXMuY2xvbmUuZ2V0T2Zmc2V0UGFyZW50KCkpKTsKKworCQkJdmFyIGRlc3Ryb3kgPSBmdW5jdGlvbigpeworCQkJCXRoaXMucmVtb3ZlRXZlbnQoJ2NhbmNlbCcsIGRlc3Ryb3kpOworCQkJCWNsb25lLmRlc3Ryb3koKTsKKwkJCX07CisKKwkJCXRoaXMuZWZmZWN0LmVsZW1lbnQgPSBjbG9uZTsKKwkJCXRoaXMuZWZmZWN0LnN0YXJ0KHsKKwkJCQl0b3A6IHBvcy50b3AsCisJCQkJbGVmdDogcG9zLmxlZnQsCisJCQkJd2lkdGg6IGRpbS53aWR0aCwKKwkJCQloZWlnaHQ6IGRpbS5oZWlnaHQsCisJCQkJb3BhY2l0eTogMC4yNQorCQkJfSkuYWRkRXZlbnQoJ2NhbmNlbCcsIGRlc3Ryb3kpLmNoYWluKGRlc3Ryb3kpOworCQl9IGVsc2UgeworCQkJdGhpcy5jbG9uZS5kZXN0cm95KCk7CisJCX0KKwkJdGhpcy5yZXNldCgpOworCX0sCisKKwlyZXNldDogZnVuY3Rpb24oKXsKKwkJdGhpcy5pZGxlID0gdHJ1ZTsKKwkJdGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJywgdGhpcy5lbGVtZW50KTsKKwl9LAorCisJc2VyaWFsaXplOiBmdW5jdGlvbigpeworCQl2YXIgcGFyYW1zID0gQXJyYXkubGluayhhcmd1bWVudHMsIHsKKwkJCW1vZGlmaWVyOiBUeXBlLmlzRnVuY3Rpb24sCisJCQlpbmRleDogZnVuY3Rpb24ob2JqKXsKKwkJCQlyZXR1cm4gb2JqICE9IG51bGw7CisJCQl9CisJCX0pOworCQl2YXIgc2VyaWFsID0gdGhpcy5saXN0cy5tYXAoZnVuY3Rpb24obGlzdCl7CisJCQlyZXR1cm4gbGlzdC5nZXRDaGlsZHJlbigpLm1hcChwYXJhbXMubW9kaWZpZXIgfHwgZnVuY3Rpb24oZWxlbWVudCl7CisJCQkJcmV0dXJuIGVsZW1lbnQuZ2V0KCdpZCcpOworCQkJfSwgdGhpcyk7CisJCX0sIHRoaXMpOworCisJCXZhciBpbmRleCA9IHBhcmFtcy5pbmRleDsKKwkJaWYgKHRoaXMubGlzdHMubGVuZ3RoID09IDEpIGluZGV4ID0gMDsKKwkJcmV0dXJuIChpbmRleCB8fCBpbmRleCA9PT0gMCkgJiYgaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMubGlzdHMubGVuZ3RoID8gc2VyaWFsW2luZGV4XSA6IHNlcmlhbDsKKwl9CisKK30pOworCisKKy8qCistLS0KKworc2NyaXB0OiBSZXF1ZXN0LkpTT05QLmpzCisKK25hbWU6IFJlcXVlc3QuSlNPTlAKKworZGVzY3JpcHRpb246IERlZmluZXMgUmVxdWVzdC5KU09OUCwgYSBjbGFzcyBmb3IgY3Jvc3MgZG9tYWluIGphdmFzY3JpcHQgdmlhIHNjcmlwdCBpbmplY3Rpb24uCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisgIC0gR3VpbGxlcm1vIFJhdWNoCisgIC0gQXJpYW4gU3RvbHdpamsKKworcmVxdWlyZXM6CisgIC0gQ29yZS9FbGVtZW50CisgIC0gQ29yZS9SZXF1ZXN0CisgIC0gTW9vVG9vbHMuTW9yZQorCitwcm92aWRlczogW1JlcXVlc3QuSlNPTlBdCisKKy4uLgorKi8KKworUmVxdWVzdC5KU09OUCA9IG5ldyBDbGFzcyh7CisKKwlJbXBsZW1lbnRzOiBbQ2hhaW4sIEV2ZW50cywgT3B0aW9uc10sCisKKwlvcHRpb25zOiB7LyoKKwkJb25SZXF1ZXN0OiBmdW5jdGlvbihzcmMsIHNjcmlwdEVsZW1lbnQpe30sCisJCW9uQ29tcGxldGU6IGZ1bmN0aW9uKGRhdGEpe30sCisJCW9uU3VjY2VzczogZnVuY3Rpb24oZGF0YSl7fSwKKwkJb25DYW5jZWw6IGZ1bmN0aW9uKCl7fSwKKwkJb25UaW1lb3V0OiBmdW5jdGlvbigpe30sCisJCW9uRXJyb3I6IGZ1bmN0aW9uKCl7fSwgKi8KKwkJb25SZXF1ZXN0OiBmdW5jdGlvbihzcmMpeworCQkJaWYgKHRoaXMub3B0aW9ucy5sb2cgJiYgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5sb2cpeworCQkJCWNvbnNvbGUubG9nKCdKU09OUCByZXRyaWV2aW5nIHNjcmlwdCB3aXRoIHVybDonICsgc3JjKTsKKwkJCX0KKwkJfSwKKwkJb25FcnJvcjogZnVuY3Rpb24oc3JjKXsKKwkJCWlmICh0aGlzLm9wdGlvbnMubG9nICYmIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUud2Fybil7CisJCQkJY29uc29sZS53YXJuKCdKU09OUCAnKyBzcmMgKycgd2lsbCBmYWlsIGluIEludGVybmV0IEV4cGxvcmVyLCB3aGljaCBlbmZvcmNlcyBhIDIwODMgYnl0ZXMgbGVuZ3RoIGxpbWl0IG9uIFVSSXMnKTsKKwkJCX0KKwkJfSwKKwkJdXJsOiAnJywKKwkJY2FsbGJhY2tLZXk6ICdjYWxsYmFjaycsCisJCWluamVjdFNjcmlwdDogZG9jdW1lbnQuaGVhZCwKKwkJZGF0YTogJycsCisJCWxpbms6ICdpZ25vcmUnLAorCQl0aW1lb3V0OiAwLAorCQlsb2c6IGZhbHNlCisJfSwKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpeworCQl0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7CisJfSwKKworCXNlbmQ6IGZ1bmN0aW9uKG9wdGlvbnMpeworCQlpZiAoIVJlcXVlc3QucHJvdG90eXBlLmNoZWNrLmNhbGwodGhpcywgb3B0aW9ucykpIHJldHVybiB0aGlzOworCQl0aGlzLnJ1bm5pbmcgPSB0cnVlOworCisJCXZhciB0eXBlID0gdHlwZU9mKG9wdGlvbnMpOworCQlpZiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdlbGVtZW50Jykgb3B0aW9ucyA9IHtkYXRhOiBvcHRpb25zfTsKKwkJb3B0aW9ucyA9IE9iamVjdC5tZXJnZSh0aGlzLm9wdGlvbnMsIG9wdGlvbnMgfHwge30pOworCisJCXZhciBkYXRhID0gb3B0aW9ucy5kYXRhOworCQlzd2l0Y2ggKHR5cGVPZihkYXRhKSl7CisJCQljYXNlICdlbGVtZW50JzogZGF0YSA9IGRvY3VtZW50LmlkKGRhdGEpLnRvUXVlcnlTdHJpbmcoKTsgYnJlYWs7CisJCQljYXNlICdvYmplY3QnOiBjYXNlICdoYXNoJzogZGF0YSA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKGRhdGEpOworCQl9CisKKwkJdmFyIGluZGV4ID0gdGhpcy5pbmRleCA9IFJlcXVlc3QuSlNPTlAuY291bnRlcisrOworCisJCXZhciBzcmMgPSBvcHRpb25zLnVybCArCisJCQkob3B0aW9ucy51cmwudGVzdCgnXFw/JykgPyAnJicgOic/JykgKworCQkJKG9wdGlvbnMuY2FsbGJhY2tLZXkpICsKKwkJCSc9UmVxdWVzdC5KU09OUC5yZXF1ZXN0X21hcC5yZXF1ZXN0XycrIGluZGV4ICsKKwkJCShkYXRhID8gJyYnICsgZGF0YSA6ICcnKTsKKworCQlpZiAoc3JjLmxlbmd0aCA+IDIwODMpIHRoaXMuZmlyZUV2ZW50KCdlcnJvcicsIHNyYyk7CisKKwkJUmVxdWVzdC5KU09OUC5yZXF1ZXN0X21hcFsncmVxdWVzdF8nICsgaW5kZXhdID0gZnVuY3Rpb24oKXsKKwkJCXRoaXMuc3VjY2Vzcyhhcmd1bWVudHMsIGluZGV4KTsKKwkJfS5iaW5kKHRoaXMpOworCisJCXZhciBzY3JpcHQgPSB0aGlzLmdldFNjcmlwdChzcmMpLmluamVjdChvcHRpb25zLmluamVjdFNjcmlwdCk7CisJCXRoaXMuZmlyZUV2ZW50KCdyZXF1ZXN0JywgW3NyYywgc2NyaXB0XSk7CisKKwkJaWYgKG9wdGlvbnMudGltZW91dCkgdGhpcy50aW1lb3V0LmRlbGF5KG9wdGlvbnMudGltZW91dCwgdGhpcyk7CisKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWdldFNjcmlwdDogZnVuY3Rpb24oc3JjKXsKKwkJaWYgKCF0aGlzLnNjcmlwdCkgdGhpcy5zY3JpcHQgPSBuZXcgRWxlbWVudCgnc2NyaXB0JywgeworCQkJdHlwZTogJ3RleHQvamF2YXNjcmlwdCcsCisJCQlhc3luYzogdHJ1ZSwKKwkJCXNyYzogc3JjCisJCX0pOworCQlyZXR1cm4gdGhpcy5zY3JpcHQ7CisJfSwKKworCXN1Y2Nlc3M6IGZ1bmN0aW9uKGFyZ3MsIGluZGV4KXsKKwkJaWYgKCF0aGlzLnJ1bm5pbmcpIHJldHVybjsKKwkJdGhpcy5jbGVhcigpCisJCQkuZmlyZUV2ZW50KCdjb21wbGV0ZScsIGFyZ3MpLmZpcmVFdmVudCgnc3VjY2VzcycsIGFyZ3MpCisJCQkuY2FsbENoYWluKCk7CisJfSwKKworCWNhbmNlbDogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMucnVubmluZykgdGhpcy5jbGVhcigpLmZpcmVFdmVudCgnY2FuY2VsJyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlpc1J1bm5pbmc6IGZ1bmN0aW9uKCl7CisJCXJldHVybiAhIXRoaXMucnVubmluZzsKKwl9LAorCisJY2xlYXI6IGZ1bmN0aW9uKCl7CisJCXRoaXMucnVubmluZyA9IGZhbHNlOworCQlpZiAodGhpcy5zY3JpcHQpeworCQkJdGhpcy5zY3JpcHQuZGVzdHJveSgpOworCQkJdGhpcy5zY3JpcHQgPSBudWxsOworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwl0aW1lb3V0OiBmdW5jdGlvbigpeworCQlpZiAodGhpcy5ydW5uaW5nKXsKKwkJCXRoaXMucnVubmluZyA9IGZhbHNlOworCQkJdGhpcy5maXJlRXZlbnQoJ3RpbWVvdXQnLCBbdGhpcy5zY3JpcHQuZ2V0KCdzcmMnKSwgdGhpcy5zY3JpcHRdKS5maXJlRXZlbnQoJ2ZhaWx1cmUnKS5jYW5jZWwoKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCitSZXF1ZXN0LkpTT05QLmNvdW50ZXIgPSAwOworUmVxdWVzdC5KU09OUC5yZXF1ZXN0X21hcCA9IHt9OworCisKKy8qCistLS0KKworc2NyaXB0OiBSZXF1ZXN0LlF1ZXVlLmpzCisKK25hbWU6IFJlcXVlc3QuUXVldWUKKworZGVzY3JpcHRpb246IENvbnRyb2xzIHNldmVyYWwgaW5zdGFuY2VzIG9mIFJlcXVlc3QgYW5kIGl0cyB2YXJpYW50cyB0byBydW4gb25seSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisKK3JlcXVpcmVzOgorICAtIENvcmUvRWxlbWVudAorICAtIENvcmUvUmVxdWVzdAorICAtIC9DbGFzcy5CaW5kcworCitwcm92aWRlczogW1JlcXVlc3QuUXVldWVdCisKKy4uLgorKi8KKworUmVxdWVzdC5RdWV1ZSA9IG5ldyBDbGFzcyh7CisKKwlJbXBsZW1lbnRzOiBbT3B0aW9ucywgRXZlbnRzXSwKKworCUJpbmRzOiBbJ2F0dGFjaCcsICdyZXF1ZXN0JywgJ2NvbXBsZXRlJywgJ2NhbmNlbCcsICdzdWNjZXNzJywgJ2ZhaWx1cmUnLCAnZXhjZXB0aW9uJ10sCisKKwlvcHRpb25zOiB7LyoKKwkJb25SZXF1ZXN0OiBmdW5jdGlvbihhcmdzUGFzc2VkVG9PblJlcXVlc3Qpe30sCisJCW9uU3VjY2VzczogZnVuY3Rpb24oYXJnc1Bhc3NlZFRvT25TdWNjZXNzKXt9LAorCQlvbkNvbXBsZXRlOiBmdW5jdGlvbihhcmdzUGFzc2VkVG9PbkNvbXBsZXRlKXt9LAorCQlvbkNhbmNlbDogZnVuY3Rpb24oYXJnc1Bhc3NlZFRvT25DYW5jZWwpe30sCisJCW9uRXhjZXB0aW9uOiBmdW5jdGlvbihhcmdzUGFzc2VkVG9PbkV4Y2VwdGlvbil7fSwKKwkJb25GYWlsdXJlOiBmdW5jdGlvbihhcmdzUGFzc2VkVG9PbkZhaWx1cmUpe30sCisJCW9uRW5kOiBmdW5jdGlvbigpe30sCisJCSovCisJCXN0b3BPbkZhaWx1cmU6IHRydWUsCisJCWF1dG9BZHZhbmNlOiB0cnVlLAorCQljb25jdXJyZW50OiAxLAorCQlyZXF1ZXN0czoge30KKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXZhciByZXF1ZXN0czsKKwkJaWYgKG9wdGlvbnMpeworCQkJcmVxdWVzdHMgPSBvcHRpb25zLnJlcXVlc3RzOworCQkJZGVsZXRlIG9wdGlvbnMucmVxdWVzdHM7CisJCX0KKwkJdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpOworCQl0aGlzLnJlcXVlc3RzID0ge307CisJCXRoaXMucXVldWUgPSBbXTsKKwkJdGhpcy5yZXFCaW5kZXJzID0ge307CisKKwkJaWYgKHJlcXVlc3RzKSB0aGlzLmFkZFJlcXVlc3RzKHJlcXVlc3RzKTsKKwl9LAorCisJYWRkUmVxdWVzdDogZnVuY3Rpb24obmFtZSwgcmVxdWVzdCl7CisJCXRoaXMucmVxdWVzdHNbbmFtZV0gPSByZXF1ZXN0OworCQl0aGlzLmF0dGFjaChuYW1lLCByZXF1ZXN0KTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWFkZFJlcXVlc3RzOiBmdW5jdGlvbihvYmopeworCQlPYmplY3QuZWFjaChvYmosIGZ1bmN0aW9uKHJlcSwgbmFtZSl7CisJCQl0aGlzLmFkZFJlcXVlc3QobmFtZSwgcmVxKTsKKwkJfSwgdGhpcyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXROYW1lOiBmdW5jdGlvbihyZXEpeworCQlyZXR1cm4gT2JqZWN0LmtleU9mKHRoaXMucmVxdWVzdHMsIHJlcSk7CisJfSwKKworCWF0dGFjaDogZnVuY3Rpb24obmFtZSwgcmVxKXsKKwkJaWYgKHJlcS5fZ3JvdXBTZW5kKSByZXR1cm4gdGhpczsKKwkJWydyZXF1ZXN0JywgJ2NvbXBsZXRlJywgJ2NhbmNlbCcsICdzdWNjZXNzJywgJ2ZhaWx1cmUnLCAnZXhjZXB0aW9uJ10uZWFjaChmdW5jdGlvbihldnQpeworCQkJaWYgKCF0aGlzLnJlcUJpbmRlcnNbbmFtZV0pIHRoaXMucmVxQmluZGVyc1tuYW1lXSA9IHt9OworCQkJdGhpcy5yZXFCaW5kZXJzW25hbWVdW2V2dF0gPSBmdW5jdGlvbigpeworCQkJCXRoaXNbJ29uJyArIGV2dC5jYXBpdGFsaXplKCldLmFwcGx5KHRoaXMsIFtuYW1lLCByZXFdLmFwcGVuZChhcmd1bWVudHMpKTsKKwkJCX0uYmluZCh0aGlzKTsKKwkJCXJlcS5hZGRFdmVudChldnQsIHRoaXMucmVxQmluZGVyc1tuYW1lXVtldnRdKTsKKwkJfSwgdGhpcyk7CisJCXJlcS5fZ3JvdXBTZW5kID0gcmVxLnNlbmQ7CisJCXJlcS5zZW5kID0gZnVuY3Rpb24ob3B0aW9ucyl7CisJCQl0aGlzLnNlbmQobmFtZSwgb3B0aW9ucyk7CisJCQlyZXR1cm4gcmVxOworCQl9LmJpbmQodGhpcyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlyZW1vdmVSZXF1ZXN0OiBmdW5jdGlvbihyZXEpeworCQl2YXIgbmFtZSA9IHR5cGVPZihyZXEpID09ICdvYmplY3QnID8gdGhpcy5nZXROYW1lKHJlcSkgOiByZXE7CisJCWlmICghbmFtZSAmJiB0eXBlT2YobmFtZSkgIT0gJ3N0cmluZycpIHJldHVybiB0aGlzOworCQlyZXEgPSB0aGlzLnJlcXVlc3RzW25hbWVdOworCQlpZiAoIXJlcSkgcmV0dXJuIHRoaXM7CisJCVsncmVxdWVzdCcsICdjb21wbGV0ZScsICdjYW5jZWwnLCAnc3VjY2VzcycsICdmYWlsdXJlJywgJ2V4Y2VwdGlvbiddLmVhY2goZnVuY3Rpb24oZXZ0KXsKKwkJCXJlcS5yZW1vdmVFdmVudChldnQsIHRoaXMucmVxQmluZGVyc1tuYW1lXVtldnRdKTsKKwkJfSwgdGhpcyk7CisJCXJlcS5zZW5kID0gcmVxLl9ncm91cFNlbmQ7CisJCWRlbGV0ZSByZXEuX2dyb3VwU2VuZDsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWdldFJ1bm5pbmc6IGZ1bmN0aW9uKCl7CisJCXJldHVybiBPYmplY3QuZmlsdGVyKHRoaXMucmVxdWVzdHMsIGZ1bmN0aW9uKHIpeworCQkJcmV0dXJuIHIucnVubmluZzsKKwkJfSk7CisJfSwKKworCWlzUnVubmluZzogZnVuY3Rpb24oKXsKKwkJcmV0dXJuICEhKE9iamVjdC5rZXlzKHRoaXMuZ2V0UnVubmluZygpKS5sZW5ndGgpOworCX0sCisKKwlzZW5kOiBmdW5jdGlvbihuYW1lLCBvcHRpb25zKXsKKwkJdmFyIHEgPSBmdW5jdGlvbigpeworCQkJdGhpcy5yZXF1ZXN0c1tuYW1lXS5fZ3JvdXBTZW5kKG9wdGlvbnMpOworCQkJdGhpcy5xdWV1ZS5lcmFzZShxKTsKKwkJfS5iaW5kKHRoaXMpOworCisJCXEubmFtZSA9IG5hbWU7CisJCWlmIChPYmplY3Qua2V5cyh0aGlzLmdldFJ1bm5pbmcoKSkubGVuZ3RoID49IHRoaXMub3B0aW9ucy5jb25jdXJyZW50IHx8ICh0aGlzLmVycm9yICYmIHRoaXMub3B0aW9ucy5zdG9wT25GYWlsdXJlKSkgdGhpcy5xdWV1ZS5wdXNoKHEpOworCQllbHNlIHEoKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWhhc05leHQ6IGZ1bmN0aW9uKG5hbWUpeworCQlyZXR1cm4gKCFuYW1lKSA/ICEhdGhpcy5xdWV1ZS5sZW5ndGggOiAhIXRoaXMucXVldWUuZmlsdGVyKGZ1bmN0aW9uKHEpeyByZXR1cm4gcS5uYW1lID09IG5hbWU7IH0pLmxlbmd0aDsKKwl9LAorCisJcmVzdW1lOiBmdW5jdGlvbigpeworCQl0aGlzLmVycm9yID0gZmFsc2U7CisJCSh0aGlzLm9wdGlvbnMuY29uY3VycmVudCAtIE9iamVjdC5rZXlzKHRoaXMuZ2V0UnVubmluZygpKS5sZW5ndGgpLnRpbWVzKHRoaXMucnVuTmV4dCwgdGhpcyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlydW5OZXh0OiBmdW5jdGlvbihuYW1lKXsKKwkJaWYgKCF0aGlzLnF1ZXVlLmxlbmd0aCkgcmV0dXJuIHRoaXM7CisJCWlmICghbmFtZSl7CisJCQl0aGlzLnF1ZXVlWzBdKCk7CisJCX0gZWxzZSB7CisJCQl2YXIgZm91bmQ7CisJCQl0aGlzLnF1ZXVlLmVhY2goZnVuY3Rpb24ocSl7CisJCQkJaWYgKCFmb3VuZCAmJiBxLm5hbWUgPT0gbmFtZSl7CisJCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQkJcSgpOworCQkJCX0KKwkJCX0pOworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwlydW5BbGw6IGZ1bmN0aW9uKCl7CisJCXRoaXMucXVldWUuZWFjaChmdW5jdGlvbihxKXsKKwkJCXEoKTsKKwkJfSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwljbGVhcjogZnVuY3Rpb24obmFtZSl7CisJCWlmICghbmFtZSl7CisJCQl0aGlzLnF1ZXVlLmVtcHR5KCk7CisJCX0gZWxzZSB7CisJCQl0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5tYXAoZnVuY3Rpb24ocSl7CisJCQkJaWYgKHEubmFtZSAhPSBuYW1lKSByZXR1cm4gcTsKKwkJCQllbHNlIHJldHVybiBmYWxzZTsKKwkJCX0pLmZpbHRlcihmdW5jdGlvbihxKXsKKwkJCQlyZXR1cm4gcTsKKwkJCX0pOworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwljYW5jZWw6IGZ1bmN0aW9uKG5hbWUpeworCQl0aGlzLnJlcXVlc3RzW25hbWVdLmNhbmNlbCgpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJb25SZXF1ZXN0OiBmdW5jdGlvbigpeworCQl0aGlzLmZpcmVFdmVudCgncmVxdWVzdCcsIGFyZ3VtZW50cyk7CisJfSwKKworCW9uQ29tcGxldGU6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZmlyZUV2ZW50KCdjb21wbGV0ZScsIGFyZ3VtZW50cyk7CisJCWlmICghdGhpcy5xdWV1ZS5sZW5ndGgpIHRoaXMuZmlyZUV2ZW50KCdlbmQnKTsKKwl9LAorCisJb25DYW5jZWw6IGZ1bmN0aW9uKCl7CisJCWlmICh0aGlzLm9wdGlvbnMuYXV0b0FkdmFuY2UgJiYgIXRoaXMuZXJyb3IpIHRoaXMucnVuTmV4dCgpOworCQl0aGlzLmZpcmVFdmVudCgnY2FuY2VsJywgYXJndW1lbnRzKTsKKwl9LAorCisJb25TdWNjZXNzOiBmdW5jdGlvbigpeworCQlpZiAodGhpcy5vcHRpb25zLmF1dG9BZHZhbmNlICYmICF0aGlzLmVycm9yKSB0aGlzLnJ1bk5leHQoKTsKKwkJdGhpcy5maXJlRXZlbnQoJ3N1Y2Nlc3MnLCBhcmd1bWVudHMpOworCX0sCisKKwlvbkZhaWx1cmU6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZXJyb3IgPSB0cnVlOworCQlpZiAoIXRoaXMub3B0aW9ucy5zdG9wT25GYWlsdXJlICYmIHRoaXMub3B0aW9ucy5hdXRvQWR2YW5jZSkgdGhpcy5ydW5OZXh0KCk7CisJCXRoaXMuZmlyZUV2ZW50KCdmYWlsdXJlJywgYXJndW1lbnRzKTsKKwl9LAorCisJb25FeGNlcHRpb246IGZ1bmN0aW9uKCl7CisJCXRoaXMuZXJyb3IgPSB0cnVlOworCQlpZiAoIXRoaXMub3B0aW9ucy5zdG9wT25GYWlsdXJlICYmIHRoaXMub3B0aW9ucy5hdXRvQWR2YW5jZSkgdGhpcy5ydW5OZXh0KCk7CisJCXRoaXMuZmlyZUV2ZW50KCdleGNlcHRpb24nLCBhcmd1bWVudHMpOworCX0KKworfSk7CisKKworLyoKKy0tLQorCitzY3JpcHQ6IFJlcXVlc3QuUGVyaW9kaWNhbC5qcworCituYW1lOiBSZXF1ZXN0LlBlcmlvZGljYWwKKworZGVzY3JpcHRpb246IFJlcXVlc3RzIHRoZSBzYW1lIFVSTCB0byBwdWxsIGRhdGEgZnJvbSBhIHNlcnZlciBidXQgaW5jcmVhc2VzIHRoZSBpbnRlcnZhbHMgaWYgbm8gZGF0YSBpcyByZXR1cm5lZCB0byByZWR1Y2UgdGhlIGxvYWQKKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBDaHJpc3RvcGggUG9qZXIKKworcmVxdWlyZXM6CisgIC0gQ29yZS9SZXF1ZXN0CisgIC0gL01vb1Rvb2xzLk1vcmUKKworcHJvdmlkZXM6IFtSZXF1ZXN0LlBlcmlvZGljYWxdCisKKy4uLgorKi8KKworUmVxdWVzdC5pbXBsZW1lbnQoeworCisJb3B0aW9uczogeworCQlpbml0aWFsRGVsYXk6IDUwMDAsCisJCWRlbGF5OiA1MDAwLAorCQlsaW1pdDogNjAwMDAKKwl9LAorCisJc3RhcnRUaW1lcjogZnVuY3Rpb24oZGF0YSl7CisJCXZhciBmbiA9IGZ1bmN0aW9uKCl7CisJCQlpZiAoIXRoaXMucnVubmluZykgdGhpcy5zZW5kKHtkYXRhOiBkYXRhfSk7CisJCX07CisJCXRoaXMubGFzdERlbGF5ID0gdGhpcy5vcHRpb25zLmluaXRpYWxEZWxheTsKKwkJdGhpcy50aW1lciA9IGZuLmRlbGF5KHRoaXMubGFzdERlbGF5LCB0aGlzKTsKKwkJdGhpcy5jb21wbGV0ZUNoZWNrID0gZnVuY3Rpb24ocmVzcG9uc2UpeworCQkJY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpOworCQkJdGhpcy5sYXN0RGVsYXkgPSAocmVzcG9uc2UpID8gdGhpcy5vcHRpb25zLmRlbGF5IDogKHRoaXMubGFzdERlbGF5ICsgdGhpcy5vcHRpb25zLmRlbGF5KS5taW4odGhpcy5vcHRpb25zLmxpbWl0KTsKKwkJCXRoaXMudGltZXIgPSBmbi5kZWxheSh0aGlzLmxhc3REZWxheSwgdGhpcyk7CisJCX07CisJCXJldHVybiB0aGlzLmFkZEV2ZW50KCdjb21wbGV0ZScsIHRoaXMuY29tcGxldGVDaGVjayk7CisJfSwKKworCXN0b3BUaW1lcjogZnVuY3Rpb24oKXsKKwkJY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpOworCQlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudCgnY29tcGxldGUnLCB0aGlzLmNvbXBsZXRlQ2hlY2spOworCX0KKworfSk7CisKKworLyoKKy0tLQorCitzY3JpcHQ6IEFzc2V0cy5qcworCituYW1lOiBBc3NldHMKKworZGVzY3JpcHRpb246IFByb3ZpZGVzIG1ldGhvZHMgdG8gZHluYW1pY2FsbHkgbG9hZCBKYXZhU2NyaXB0LCBDU1MsIGFuZCBJbWFnZSBmaWxlcyBpbnRvIHRoZSBkb2N1bWVudC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBWYWxlcmlvIFByb2lldHRpCisKK3JlcXVpcmVzOgorICAtIENvcmUvRWxlbWVudC5FdmVudAorICAtIC9Nb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbQXNzZXRzXQorCisuLi4KKyovCisKK3ZhciBBc3NldCA9IHsKKworCWphdmFzY3JpcHQ6IGZ1bmN0aW9uKHNvdXJjZSwgcHJvcGVydGllcyl7CisJCWlmICghcHJvcGVydGllcykgcHJvcGVydGllcyA9IHt9OworCisJCXZhciBzY3JpcHQgPSBuZXcgRWxlbWVudCgnc2NyaXB0Jywge3NyYzogc291cmNlLCB0eXBlOiAndGV4dC9qYXZhc2NyaXB0J30pLAorCQkJZG9jID0gcHJvcGVydGllcy5kb2N1bWVudCB8fCBkb2N1bWVudCwKKwkJCWxvYWRlZCA9IDAsCisJCQlsb2FkRXZlbnQgPSBwcm9wZXJ0aWVzLm9ubG9hZCB8fCBwcm9wZXJ0aWVzLm9uTG9hZDsKKworCQl2YXIgbG9hZCA9IGxvYWRFdmVudCA/IGZ1bmN0aW9uKCl7IC8vIG1ha2Ugc3VyZSB3ZSBvbmx5IGNhbGwgdGhlIGV2ZW50IG9uY2UKKwkJCWlmICgrK2xvYWRlZCA9PSAxKSBsb2FkRXZlbnQuY2FsbCh0aGlzKTsKKwkJfSA6IGZ1bmN0aW9uKCl7fTsKKworCQlkZWxldGUgcHJvcGVydGllcy5vbmxvYWQ7CisJCWRlbGV0ZSBwcm9wZXJ0aWVzLm9uTG9hZDsKKwkJZGVsZXRlIHByb3BlcnRpZXMuZG9jdW1lbnQ7CisKKwkJcmV0dXJuIHNjcmlwdC5hZGRFdmVudHMoeworCQkJbG9hZDogbG9hZCwKKwkJCXJlYWR5c3RhdGVjaGFuZ2U6IGZ1bmN0aW9uKCl7CisJCQkJaWYgKFsnbG9hZGVkJywgJ2NvbXBsZXRlJ10uY29udGFpbnModGhpcy5yZWFkeVN0YXRlKSkgbG9hZC5jYWxsKHRoaXMpOworCQkJfQorCQl9KS5zZXQocHJvcGVydGllcykuaW5qZWN0KGRvYy5oZWFkKTsKKwl9LAorCisJY3NzOiBmdW5jdGlvbihzb3VyY2UsIHByb3BlcnRpZXMpeworCQlpZiAoIXByb3BlcnRpZXMpIHByb3BlcnRpZXMgPSB7fTsKKworCQl2YXIgbGluayA9IG5ldyBFbGVtZW50KCdsaW5rJywgeworCQkJcmVsOiAnc3R5bGVzaGVldCcsCisJCQltZWRpYTogJ3NjcmVlbicsCisJCQl0eXBlOiAndGV4dC9jc3MnLAorCQkJaHJlZjogc291cmNlCisJCX0pOworCisJCXZhciBsb2FkID0gcHJvcGVydGllcy5vbmxvYWQgfHwgcHJvcGVydGllcy5vbkxvYWQsCisJCQlkb2MgPSBwcm9wZXJ0aWVzLmRvY3VtZW50IHx8IGRvY3VtZW50OworCisJCWRlbGV0ZSBwcm9wZXJ0aWVzLm9ubG9hZDsKKwkJZGVsZXRlIHByb3BlcnRpZXMub25Mb2FkOworCQlkZWxldGUgcHJvcGVydGllcy5kb2N1bWVudDsKKworCQlpZiAobG9hZCkgbGluay5hZGRFdmVudCgnbG9hZCcsIGxvYWQpOworCQlyZXR1cm4gbGluay5zZXQocHJvcGVydGllcykuaW5qZWN0KGRvYy5oZWFkKTsKKwl9LAorCisJaW1hZ2U6IGZ1bmN0aW9uKHNvdXJjZSwgcHJvcGVydGllcyl7CisJCWlmICghcHJvcGVydGllcykgcHJvcGVydGllcyA9IHt9OworCisJCXZhciBpbWFnZSA9IG5ldyBJbWFnZSgpLAorCQkJZWxlbWVudCA9IGRvY3VtZW50LmlkKGltYWdlKSB8fCBuZXcgRWxlbWVudCgnaW1nJyk7CisKKwkJWydsb2FkJywgJ2Fib3J0JywgJ2Vycm9yJ10uZWFjaChmdW5jdGlvbihuYW1lKXsKKwkJCXZhciB0eXBlID0gJ29uJyArIG5hbWUsCisJCQkJY2FwID0gJ29uJyArIG5hbWUuY2FwaXRhbGl6ZSgpLAorCQkJCWV2ZW50ID0gcHJvcGVydGllc1t0eXBlXSB8fCBwcm9wZXJ0aWVzW2NhcF0gfHwgZnVuY3Rpb24oKXt9OworCisJCQlkZWxldGUgcHJvcGVydGllc1tjYXBdOworCQkJZGVsZXRlIHByb3BlcnRpZXNbdHlwZV07CisKKwkJCWltYWdlW3R5cGVdID0gZnVuY3Rpb24oKXsKKwkJCQlpZiAoIWltYWdlKSByZXR1cm47CisJCQkJaWYgKCFlbGVtZW50LnBhcmVudE5vZGUpeworCQkJCQllbGVtZW50LndpZHRoID0gaW1hZ2Uud2lkdGg7CisJCQkJCWVsZW1lbnQuaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0OworCQkJCX0KKwkJCQlpbWFnZSA9IGltYWdlLm9ubG9hZCA9IGltYWdlLm9uYWJvcnQgPSBpbWFnZS5vbmVycm9yID0gbnVsbDsKKwkJCQlldmVudC5kZWxheSgxLCBlbGVtZW50LCBlbGVtZW50KTsKKwkJCQllbGVtZW50LmZpcmVFdmVudChuYW1lLCBlbGVtZW50LCAxKTsKKwkJCX07CisJCX0pOworCisJCWltYWdlLnNyYyA9IGVsZW1lbnQuc3JjID0gc291cmNlOworCQlpZiAoaW1hZ2UgJiYgaW1hZ2UuY29tcGxldGUpIGltYWdlLm9ubG9hZC5kZWxheSgxKTsKKwkJcmV0dXJuIGVsZW1lbnQuc2V0KHByb3BlcnRpZXMpOworCX0sCisKKwlpbWFnZXM6IGZ1bmN0aW9uKHNvdXJjZXMsIG9wdGlvbnMpeworCQlzb3VyY2VzID0gQXJyYXkuZnJvbShzb3VyY2VzKTsKKworCQl2YXIgZm4gPSBmdW5jdGlvbigpe30sCisJCQljb3VudGVyID0gMDsKKworCQlvcHRpb25zID0gT2JqZWN0Lm1lcmdlKHsKKwkJCW9uQ29tcGxldGU6IGZuLAorCQkJb25Qcm9ncmVzczogZm4sCisJCQlvbkVycm9yOiBmbiwKKwkJCXByb3BlcnRpZXM6IHt9CisJCX0sIG9wdGlvbnMpOworCisJCXJldHVybiBuZXcgRWxlbWVudHMoc291cmNlcy5tYXAoZnVuY3Rpb24oc291cmNlLCBpbmRleCl7CisJCQlyZXR1cm4gQXNzZXQuaW1hZ2Uoc291cmNlLCBPYmplY3QuYXBwZW5kKG9wdGlvbnMucHJvcGVydGllcywgeworCQkJCW9ubG9hZDogZnVuY3Rpb24oKXsKKwkJCQkJY291bnRlcisrOworCQkJCQlvcHRpb25zLm9uUHJvZ3Jlc3MuY2FsbCh0aGlzLCBjb3VudGVyLCBpbmRleCwgc291cmNlKTsKKwkJCQkJaWYgKGNvdW50ZXIgPT0gc291cmNlcy5sZW5ndGgpIG9wdGlvbnMub25Db21wbGV0ZSgpOworCQkJCX0sCisJCQkJb25lcnJvcjogZnVuY3Rpb24oKXsKKwkJCQkJY291bnRlcisrOworCQkJCQlvcHRpb25zLm9uRXJyb3IuY2FsbCh0aGlzLCBjb3VudGVyLCBpbmRleCwgc291cmNlKTsKKwkJCQkJaWYgKGNvdW50ZXIgPT0gc291cmNlcy5sZW5ndGgpIG9wdGlvbnMub25Db21wbGV0ZSgpOworCQkJCX0KKwkJCX0pKTsKKwkJfSkpOworCX0KKworfTsKKworCisvKgorLS0tCisKK3NjcmlwdDogQ29sb3IuanMKKworbmFtZTogQ29sb3IKKworZGVzY3JpcHRpb246IENsYXNzIGZvciBjcmVhdGluZyBhbmQgbWFuaXB1bGF0aW5nIGNvbG9ycyBpbiBKYXZhU2NyaXB0LiBTdXBwb3J0cyBIU0IgLT4gUkdCIENvbnZlcnNpb25zIGFuZCB2aWNlIHZlcnNhLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFZhbGVyaW8gUHJvaWV0dGkKKworcmVxdWlyZXM6CisgIC0gQ29yZS9BcnJheQorICAtIENvcmUvU3RyaW5nCisgIC0gQ29yZS9OdW1iZXIKKyAgLSBDb3JlL0hhc2gKKyAgLSBDb3JlL0Z1bmN0aW9uCisgIC0gTW9vVG9vbHMuTW9yZQorCitwcm92aWRlczogW0NvbG9yXQorCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCit2YXIgQ29sb3IgPSB0aGlzLkNvbG9yID0gbmV3IFR5cGUoJ0NvbG9yJywgZnVuY3Rpb24oY29sb3IsIHR5cGUpeworCWlmIChhcmd1bWVudHMubGVuZ3RoID49IDMpeworCQl0eXBlID0gJ3JnYic7IGNvbG9yID0gQXJyYXkuc2xpY2UoYXJndW1lbnRzLCAwLCAzKTsKKwl9IGVsc2UgaWYgKHR5cGVvZiBjb2xvciA9PSAnc3RyaW5nJyl7CisJCWlmIChjb2xvci5tYXRjaCgvcmdiLykpIGNvbG9yID0gY29sb3IucmdiVG9IZXgoKS5oZXhUb1JnYih0cnVlKTsKKwkJZWxzZSBpZiAoY29sb3IubWF0Y2goL2hzYi8pKSBjb2xvciA9IGNvbG9yLmhzYlRvUmdiKCk7CisJCWVsc2UgY29sb3IgPSBjb2xvci5oZXhUb1JnYih0cnVlKTsKKwl9CisJdHlwZSA9IHR5cGUgfHwgJ3JnYic7CisJc3dpdGNoICh0eXBlKXsKKwkJY2FzZSAnaHNiJzoKKwkJCXZhciBvbGQgPSBjb2xvcjsKKwkJCWNvbG9yID0gY29sb3IuaHNiVG9SZ2IoKTsKKwkJCWNvbG9yLmhzYiA9IG9sZDsKKwkJYnJlYWs7CisJCWNhc2UgJ2hleCc6IGNvbG9yID0gY29sb3IuaGV4VG9SZ2IodHJ1ZSk7IGJyZWFrOworCX0KKwljb2xvci5yZ2IgPSBjb2xvci5zbGljZSgwLCAzKTsKKwljb2xvci5oc2IgPSBjb2xvci5oc2IgfHwgY29sb3IucmdiVG9Ic2IoKTsKKwljb2xvci5oZXggPSBjb2xvci5yZ2JUb0hleCgpOworCXJldHVybiBPYmplY3QuYXBwZW5kKGNvbG9yLCB0aGlzKTsKK30pOworCitDb2xvci5pbXBsZW1lbnQoeworCisJbWl4OiBmdW5jdGlvbigpeworCQl2YXIgY29sb3JzID0gQXJyYXkuc2xpY2UoYXJndW1lbnRzKTsKKwkJdmFyIGFscGhhID0gKHR5cGVPZihjb2xvcnMuZ2V0TGFzdCgpKSA9PSAnbnVtYmVyJykgPyBjb2xvcnMucG9wKCkgOiA1MDsKKwkJdmFyIHJnYiA9IHRoaXMuc2xpY2UoKTsKKwkJY29sb3JzLmVhY2goZnVuY3Rpb24oY29sb3IpeworCQkJY29sb3IgPSBuZXcgQ29sb3IoY29sb3IpOworCQkJZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHJnYltpXSA9IE1hdGgucm91bmQoKHJnYltpXSAvIDEwMCAqICgxMDAgLSBhbHBoYSkpICsgKGNvbG9yW2ldIC8gMTAwICogYWxwaGEpKTsKKwkJfSk7CisJCXJldHVybiBuZXcgQ29sb3IocmdiLCAncmdiJyk7CisJfSwKKworCWludmVydDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIG5ldyBDb2xvcih0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSl7CisJCQlyZXR1cm4gMjU1IC0gdmFsdWU7CisJCX0pKTsKKwl9LAorCisJc2V0SHVlOiBmdW5jdGlvbih2YWx1ZSl7CisJCXJldHVybiBuZXcgQ29sb3IoW3ZhbHVlLCB0aGlzLmhzYlsxXSwgdGhpcy5oc2JbMl1dLCAnaHNiJyk7CisJfSwKKworCXNldFNhdHVyYXRpb246IGZ1bmN0aW9uKHBlcmNlbnQpeworCQlyZXR1cm4gbmV3IENvbG9yKFt0aGlzLmhzYlswXSwgcGVyY2VudCwgdGhpcy5oc2JbMl1dLCAnaHNiJyk7CisJfSwKKworCXNldEJyaWdodG5lc3M6IGZ1bmN0aW9uKHBlcmNlbnQpeworCQlyZXR1cm4gbmV3IENvbG9yKFt0aGlzLmhzYlswXSwgdGhpcy5oc2JbMV0sIHBlcmNlbnRdLCAnaHNiJyk7CisJfQorCit9KTsKKwordGhpcy4kUkdCID0gZnVuY3Rpb24ociwgZywgYil7CisJcmV0dXJuIG5ldyBDb2xvcihbciwgZywgYl0sICdyZ2InKTsKK307CisKK3RoaXMuJEhTQiA9IGZ1bmN0aW9uKGgsIHMsIGIpeworCXJldHVybiBuZXcgQ29sb3IoW2gsIHMsIGJdLCAnaHNiJyk7Cit9OworCit0aGlzLiRIRVggPSBmdW5jdGlvbihoZXgpeworCXJldHVybiBuZXcgQ29sb3IoaGV4LCAnaGV4Jyk7Cit9OworCitBcnJheS5pbXBsZW1lbnQoeworCisJcmdiVG9Ic2I6IGZ1bmN0aW9uKCl7CisJCXZhciByZWQgPSB0aGlzWzBdLAorCQkJCWdyZWVuID0gdGhpc1sxXSwKKwkJCQlibHVlID0gdGhpc1syXSwKKwkJCQlodWUgPSAwOworCQl2YXIgbWF4ID0gTWF0aC5tYXgocmVkLCBncmVlbiwgYmx1ZSksCisJCQkJbWluID0gTWF0aC5taW4ocmVkLCBncmVlbiwgYmx1ZSk7CisJCXZhciBkZWx0YSA9IG1heCAtIG1pbjsKKwkJdmFyIGJyaWdodG5lc3MgPSBtYXggLyAyNTUsCisJCQkJc2F0dXJhdGlvbiA9IChtYXggIT0gMCkgPyBkZWx0YSAvIG1heCA6IDA7CisJCWlmIChzYXR1cmF0aW9uICE9IDApeworCQkJdmFyIHJyID0gKG1heCAtIHJlZCkgLyBkZWx0YTsKKwkJCXZhciBnciA9IChtYXggLSBncmVlbikgLyBkZWx0YTsKKwkJCXZhciBiciA9IChtYXggLSBibHVlKSAvIGRlbHRhOworCQkJaWYgKHJlZCA9PSBtYXgpIGh1ZSA9IGJyIC0gZ3I7CisJCQllbHNlIGlmIChncmVlbiA9PSBtYXgpIGh1ZSA9IDIgKyByciAtIGJyOworCQkJZWxzZSBodWUgPSA0ICsgZ3IgLSBycjsKKwkJCWh1ZSAvPSA2OworCQkJaWYgKGh1ZSA8IDApIGh1ZSsrOworCQl9CisJCXJldHVybiBbTWF0aC5yb3VuZChodWUgKiAzNjApLCBNYXRoLnJvdW5kKHNhdHVyYXRpb24gKiAxMDApLCBNYXRoLnJvdW5kKGJyaWdodG5lc3MgKiAxMDApXTsKKwl9LAorCisJaHNiVG9SZ2I6IGZ1bmN0aW9uKCl7CisJCXZhciBiciA9IE1hdGgucm91bmQodGhpc1syXSAvIDEwMCAqIDI1NSk7CisJCWlmICh0aGlzWzFdID09IDApeworCQkJcmV0dXJuIFticiwgYnIsIGJyXTsKKwkJfSBlbHNlIHsKKwkJCXZhciBodWUgPSB0aGlzWzBdICUgMzYwOworCQkJdmFyIGYgPSBodWUgJSA2MDsKKwkJCXZhciBwID0gTWF0aC5yb3VuZCgodGhpc1syXSAqICgxMDAgLSB0aGlzWzFdKSkgLyAxMDAwMCAqIDI1NSk7CisJCQl2YXIgcSA9IE1hdGgucm91bmQoKHRoaXNbMl0gKiAoNjAwMCAtIHRoaXNbMV0gKiBmKSkgLyA2MDAwMDAgKiAyNTUpOworCQkJdmFyIHQgPSBNYXRoLnJvdW5kKCh0aGlzWzJdICogKDYwMDAgLSB0aGlzWzFdICogKDYwIC0gZikpKSAvIDYwMDAwMCAqIDI1NSk7CisJCQlzd2l0Y2ggKE1hdGguZmxvb3IoaHVlIC8gNjApKXsKKwkJCQljYXNlIDA6IHJldHVybiBbYnIsIHQsIHBdOworCQkJCWNhc2UgMTogcmV0dXJuIFtxLCBiciwgcF07CisJCQkJY2FzZSAyOiByZXR1cm4gW3AsIGJyLCB0XTsKKwkJCQljYXNlIDM6IHJldHVybiBbcCwgcSwgYnJdOworCQkJCWNhc2UgNDogcmV0dXJuIFt0LCBwLCBicl07CisJCQkJY2FzZSA1OiByZXR1cm4gW2JyLCBwLCBxXTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCit9KTsKKworU3RyaW5nLmltcGxlbWVudCh7CisKKwlyZ2JUb0hzYjogZnVuY3Rpb24oKXsKKwkJdmFyIHJnYiA9IHRoaXMubWF0Y2goL1xkezEsM30vZyk7CisJCXJldHVybiAocmdiKSA/IHJnYi5yZ2JUb0hzYigpIDogbnVsbDsKKwl9LAorCisJaHNiVG9SZ2I6IGZ1bmN0aW9uKCl7CisJCXZhciBoc2IgPSB0aGlzLm1hdGNoKC9cZHsxLDN9L2cpOworCQlyZXR1cm4gKGhzYikgPyBoc2IuaHNiVG9SZ2IoKSA6IG51bGw7CisJfQorCit9KTsKKworfSkoKTsKKworCisKKy8qCistLS0KKworc2NyaXB0OiBHcm91cC5qcworCituYW1lOiBHcm91cAorCitkZXNjcmlwdGlvbjogQ2xhc3MgZm9yIG1vbml0b3JpbmcgY29sbGVjdGlvbnMgb2YgZXZlbnRzCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gVmFsZXJpbyBQcm9pZXR0aQorCityZXF1aXJlczoKKyAgLSBDb3JlL0V2ZW50cworICAtIC9Nb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbR3JvdXBdCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK3RoaXMuR3JvdXAgPSBuZXcgQ2xhc3MoeworCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24oKXsKKwkJdGhpcy5pbnN0YW5jZXMgPSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyk7CisJCXRoaXMuZXZlbnRzID0ge307CisJCXRoaXMuY2hlY2tlciA9IHt9OworCX0sCisKKwlhZGRFdmVudDogZnVuY3Rpb24odHlwZSwgZm4peworCQl0aGlzLmNoZWNrZXJbdHlwZV0gPSB0aGlzLmNoZWNrZXJbdHlwZV0gfHwge307CisJCXRoaXMuZXZlbnRzW3R5cGVdID0gdGhpcy5ldmVudHNbdHlwZV0gfHwgW107CisJCWlmICh0aGlzLmV2ZW50c1t0eXBlXS5jb250YWlucyhmbikpIHJldHVybiBmYWxzZTsKKwkJZWxzZSB0aGlzLmV2ZW50c1t0eXBlXS5wdXNoKGZuKTsKKwkJdGhpcy5pbnN0YW5jZXMuZWFjaChmdW5jdGlvbihpbnN0YW5jZSwgaSl7CisJCQlpbnN0YW5jZS5hZGRFdmVudCh0eXBlLCB0aGlzLmNoZWNrLnBhc3MoW3R5cGUsIGluc3RhbmNlLCBpXSwgdGhpcykpOworCQl9LCB0aGlzKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWNoZWNrOiBmdW5jdGlvbih0eXBlLCBpbnN0YW5jZSwgaSl7CisJCXRoaXMuY2hlY2tlclt0eXBlXVtpXSA9IHRydWU7CisJCXZhciBldmVyeSA9IHRoaXMuaW5zdGFuY2VzLmV2ZXJ5KGZ1bmN0aW9uKGN1cnJlbnQsIGopeworCQkJcmV0dXJuIHRoaXMuY2hlY2tlclt0eXBlXVtqXSB8fCBmYWxzZTsKKwkJfSwgdGhpcyk7CisJCWlmICghZXZlcnkpIHJldHVybjsKKwkJdGhpcy5jaGVja2VyW3R5cGVdID0ge307CisJCXRoaXMuZXZlbnRzW3R5cGVdLmVhY2goZnVuY3Rpb24oZXZlbnQpeworCQkJZXZlbnQuY2FsbCh0aGlzLCB0aGlzLmluc3RhbmNlcywgaW5zdGFuY2UpOworCQl9LCB0aGlzKTsKKwl9CisKK30pOworCit9KSgpOworCisKKworLyoKKy0tLQorCitzY3JpcHQ6IEhhc2guQ29va2llLmpzCisKK25hbWU6IEhhc2guQ29va2llCisKK2Rlc2NyaXB0aW9uOiBDbGFzcyBmb3IgY3JlYXRpbmcsIHJlYWRpbmcsIGFuZCBkZWxldGluZyBDb29raWVzIGluIEpTT04gZm9ybWF0LgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFZhbGVyaW8gUHJvaWV0dGkKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9Db29raWUKKyAgLSBDb3JlL0pTT04KKyAgLSAvTW9vVG9vbHMuTW9yZQorICAtIC9IYXNoCisKK3Byb3ZpZGVzOiBbSGFzaC5Db29raWVdCisKKy4uLgorKi8KKworSGFzaC5Db29raWUgPSBuZXcgQ2xhc3MoeworCisJRXh0ZW5kczogQ29va2llLAorCisJb3B0aW9uczogeworCQlhdXRvU2F2ZTogdHJ1ZQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihuYW1lLCBvcHRpb25zKXsKKwkJdGhpcy5wYXJlbnQobmFtZSwgb3B0aW9ucyk7CisJCXRoaXMubG9hZCgpOworCX0sCisKKwlzYXZlOiBmdW5jdGlvbigpeworCQl2YXIgdmFsdWUgPSBKU09OLmVuY29kZSh0aGlzLmhhc2gpOworCQlpZiAoIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCA+IDQwOTYpIHJldHVybiBmYWxzZTsgLy9jb29raWUgd291bGQgYmUgdHJ1bmNhdGVkIQorCQlpZiAodmFsdWUgPT0gJ3t9JykgdGhpcy5kaXNwb3NlKCk7CisJCWVsc2UgdGhpcy53cml0ZSh2YWx1ZSk7CisJCXJldHVybiB0cnVlOworCX0sCisKKwlsb2FkOiBmdW5jdGlvbigpeworCQl0aGlzLmhhc2ggPSBuZXcgSGFzaChKU09OLmRlY29kZSh0aGlzLnJlYWQoKSwgdHJ1ZSkpOworCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCitIYXNoLmVhY2goSGFzaC5wcm90b3R5cGUsIGZ1bmN0aW9uKG1ldGhvZCwgbmFtZSl7CisJaWYgKHR5cGVvZiBtZXRob2QgPT0gJ2Z1bmN0aW9uJykgSGFzaC5Db29raWUuaW1wbGVtZW50KG5hbWUsIGZ1bmN0aW9uKCl7CisJCXZhciB2YWx1ZSA9IG1ldGhvZC5hcHBseSh0aGlzLmhhc2gsIGFyZ3VtZW50cyk7CisJCWlmICh0aGlzLm9wdGlvbnMuYXV0b1NhdmUpIHRoaXMuc2F2ZSgpOworCQlyZXR1cm4gdmFsdWU7CisJfSk7Cit9KTsKKworCisvKgorLS0tCituYW1lOiBUYWJsZQorZGVzY3JpcHRpb246IExVQS1TdHlsZSB0YWJsZSBpbXBsZW1lbnRhdGlvbi4KK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCithdXRob3JzOgorICAtIFZhbGVyaW8gUHJvaWV0dGkKK3JlcXVpcmVzOiBbQ29yZS9BcnJheV0KK3Byb3ZpZGVzOiBbVGFibGVdCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCit2YXIgVGFibGUgPSB0aGlzLlRhYmxlID0gZnVuY3Rpb24oKXsKKworCXRoaXMubGVuZ3RoID0gMDsKKwl2YXIga2V5cyA9IFtdLAorCSAgICB2YWx1ZXMgPSBbXTsKKworCXRoaXMuc2V0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7CisJCXZhciBpbmRleCA9IGtleXMuaW5kZXhPZihrZXkpOworCQlpZiAoaW5kZXggPT0gLTEpeworCQkJdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoOworCQkJa2V5c1tsZW5ndGhdID0ga2V5OworCQkJdmFsdWVzW2xlbmd0aF0gPSB2YWx1ZTsKKwkJCXRoaXMubGVuZ3RoKys7CisJCX0gZWxzZSB7CisJCQl2YWx1ZXNbaW5kZXhdID0gdmFsdWU7CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfTsKKworCXRoaXMuZ2V0ID0gZnVuY3Rpb24oa2V5KXsKKwkJdmFyIGluZGV4ID0ga2V5cy5pbmRleE9mKGtleSk7CisJCXJldHVybiAoaW5kZXggPT0gLTEpID8gbnVsbCA6IHZhbHVlc1tpbmRleF07CisJfTsKKworCXRoaXMuZXJhc2UgPSBmdW5jdGlvbihrZXkpeworCQl2YXIgaW5kZXggPSBrZXlzLmluZGV4T2Yoa2V5KTsKKwkJaWYgKGluZGV4ICE9IC0xKXsKKwkJCXRoaXMubGVuZ3RoLS07CisJCQlrZXlzLnNwbGljZShpbmRleCwgMSk7CisJCQlyZXR1cm4gdmFsdWVzLnNwbGljZShpbmRleCwgMSlbMF07CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfTsKKworCXRoaXMuZWFjaCA9IHRoaXMuZm9yRWFjaCA9IGZ1bmN0aW9uKGZuLCBiaW5kKXsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKykgZm4uY2FsbChiaW5kLCBrZXlzW2ldLCB2YWx1ZXNbaV0sIHRoaXMpOworCX07CisKK307CisKK2lmICh0aGlzLlR5cGUpIG5ldyBUeXBlKCdUYWJsZScsIFRhYmxlKTsKKworfSkoKTsKKworCisvKgorLS0tCisKK3NjcmlwdDogSHRtbFRhYmxlLmpzCisKK25hbWU6IEh0bWxUYWJsZQorCitkZXNjcmlwdGlvbjogQnVpbGRzIHRhYmxlIGVsZW1lbnRzIHdpdGggbWV0aG9kcyB0byBhZGQgcm93cy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9PcHRpb25zCisgIC0gQ29yZS9FdmVudHMKKyAgLSAvQ2xhc3MuT2NjbHVkZQorCitwcm92aWRlczogW0h0bWxUYWJsZV0KKworLi4uCisqLworCit2YXIgSHRtbFRhYmxlID0gbmV3IENsYXNzKHsKKworCUltcGxlbWVudHM6IFtPcHRpb25zLCBFdmVudHMsIENsYXNzLk9jY2x1ZGVdLAorCisJb3B0aW9uczogeworCQlwcm9wZXJ0aWVzOiB7CisJCQljZWxscGFkZGluZzogMCwKKwkJCWNlbGxzcGFjaW5nOiAwLAorCQkJYm9yZGVyOiAwCisJCX0sCisJCXJvd3M6IFtdLAorCQloZWFkZXJzOiBbXSwKKwkJZm9vdGVyczogW10KKwl9LAorCisJcHJvcGVydHk6ICdIdG1sVGFibGUnLAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24oKXsKKwkJdmFyIHBhcmFtcyA9IEFycmF5LmxpbmsoYXJndW1lbnRzLCB7b3B0aW9uczogVHlwZS5pc09iamVjdCwgdGFibGU6IFR5cGUuaXNFbGVtZW50LCBpZDogVHlwZS5pc1N0cmluZ30pOworCQl0aGlzLnNldE9wdGlvbnMocGFyYW1zLm9wdGlvbnMpOworCQlpZiAoIXBhcmFtcy50YWJsZSAmJiBwYXJhbXMuaWQpIHBhcmFtcy50YWJsZSA9IGRvY3VtZW50LmlkKHBhcmFtcy5pZCk7CisJCXRoaXMuZWxlbWVudCA9IHBhcmFtcy50YWJsZSB8fCBuZXcgRWxlbWVudCgndGFibGUnLCB0aGlzLm9wdGlvbnMucHJvcGVydGllcyk7CisJCWlmICh0aGlzLm9jY2x1ZGUoKSkgcmV0dXJuIHRoaXMub2NjbHVkZWQ7CisJCXRoaXMuYnVpbGQoKTsKKwl9LAorCisJYnVpbGQ6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZWxlbWVudC5zdG9yZSgnSHRtbFRhYmxlJywgdGhpcyk7CisKKwkJdGhpcy5ib2R5ID0gZG9jdW1lbnQuaWQodGhpcy5lbGVtZW50LnRCb2RpZXNbMF0pIHx8IG5ldyBFbGVtZW50KCd0Ym9keScpLmluamVjdCh0aGlzLmVsZW1lbnQpOworCQkkJCh0aGlzLmJvZHkucm93cyk7CisKKwkJaWYgKHRoaXMub3B0aW9ucy5oZWFkZXJzLmxlbmd0aCkgdGhpcy5zZXRIZWFkZXJzKHRoaXMub3B0aW9ucy5oZWFkZXJzKTsKKwkJZWxzZSB0aGlzLnRoZWFkID0gZG9jdW1lbnQuaWQodGhpcy5lbGVtZW50LnRIZWFkKTsKKworCQlpZiAodGhpcy50aGVhZCkgdGhpcy5oZWFkID0gdGhpcy5nZXRIZWFkKCk7CisJCWlmICh0aGlzLm9wdGlvbnMuZm9vdGVycy5sZW5ndGgpIHRoaXMuc2V0Rm9vdGVycyh0aGlzLm9wdGlvbnMuZm9vdGVycyk7CisKKwkJdGhpcy50Zm9vdCA9IGRvY3VtZW50LmlkKHRoaXMuZWxlbWVudC50Rm9vdCk7CisJCWlmICh0aGlzLnRmb290KSB0aGlzLmZvb3QgPSBkb2N1bWVudC5pZCh0aGlzLnRmb290LnJvd3NbMF0pOworCisJCXRoaXMub3B0aW9ucy5yb3dzLmVhY2goZnVuY3Rpb24ocm93KXsKKwkJCXRoaXMucHVzaChyb3cpOworCQl9LCB0aGlzKTsKKwl9LAorCisJdG9FbGVtZW50OiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5lbGVtZW50OworCX0sCisKKwllbXB0eTogZnVuY3Rpb24oKXsKKwkJdGhpcy5ib2R5LmVtcHR5KCk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlzZXQ6IGZ1bmN0aW9uKHdoYXQsIGl0ZW1zKXsKKwkJdmFyIHRhcmdldCA9ICh3aGF0ID09ICdoZWFkZXJzJykgPyAndEhlYWQnIDogJ3RGb290JywKKwkJCWxvd2VyID0gdGFyZ2V0LnRvTG93ZXJDYXNlKCk7CisKKwkJdGhpc1tsb3dlcl0gPSAoZG9jdW1lbnQuaWQodGhpcy5lbGVtZW50W3RhcmdldF0pIHx8IG5ldyBFbGVtZW50KGxvd2VyKS5pbmplY3QodGhpcy5lbGVtZW50LCAndG9wJykpLmVtcHR5KCk7CisJCXZhciBkYXRhID0gdGhpcy5wdXNoKGl0ZW1zLCB7fSwgdGhpc1tsb3dlcl0sIHdoYXQgPT0gJ2hlYWRlcnMnID8gJ3RoJyA6ICd0ZCcpOworCisJCWlmICh3aGF0ID09ICdoZWFkZXJzJykgdGhpcy5oZWFkID0gdGhpcy5nZXRIZWFkKCk7CisJCWVsc2UgdGhpcy5mb290ID0gdGhpcy5nZXRIZWFkKCk7CisKKwkJcmV0dXJuIGRhdGE7CisJfSwKKworCWdldEhlYWQ6IGZ1bmN0aW9uKCl7CisJCXZhciByb3dzID0gdGhpcy50aGVhZC5yb3dzOworCQlyZXR1cm4gcm93cy5sZW5ndGggPiAxID8gJCQocm93cykgOiByb3dzLmxlbmd0aCA/IGRvY3VtZW50LmlkKHJvd3NbMF0pIDogZmFsc2U7CisJfSwKKworCXNldEhlYWRlcnM6IGZ1bmN0aW9uKGhlYWRlcnMpeworCQl0aGlzLnNldCgnaGVhZGVycycsIGhlYWRlcnMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJc2V0Rm9vdGVyczogZnVuY3Rpb24oZm9vdGVycyl7CisJCXRoaXMuc2V0KCdmb290ZXJzJywgZm9vdGVycyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlwdXNoOiBmdW5jdGlvbihyb3csIHJvd1Byb3BlcnRpZXMsIHRhcmdldCwgdGFnLCB3aGVyZSl7CisJCWlmICh0eXBlT2Yocm93KSA9PSAnZWxlbWVudCcgJiYgcm93LmdldCgndGFnJykgPT0gJ3RyJyl7CisJCQlyb3cuaW5qZWN0KHRhcmdldCB8fCB0aGlzLmJvZHksIHdoZXJlKTsKKwkJCXJldHVybiB7CisJCQkJdHI6IHJvdywKKwkJCQl0ZHM6IHJvdy5nZXRDaGlsZHJlbigndGQnKQorCQkJfTsKKwkJfQorCisJCXZhciB0ZHMgPSByb3cubWFwKGZ1bmN0aW9uKGRhdGEpeworCQkJdmFyIHRkID0gbmV3IEVsZW1lbnQodGFnIHx8ICd0ZCcsIGRhdGEgPyBkYXRhLnByb3BlcnRpZXMgOiB7fSksCisJCQkJY29udGVudCA9IChkYXRhID8gZGF0YS5jb250ZW50IDogJycpIHx8IGRhdGEsCisJCQkJdHlwZSA9IHR5cGVPZihjb250ZW50KTsKKworCQkJaWYgKFsnZWxlbWVudCcsICdhcnJheScsICdjb2xsZWN0aW9uJywgJ2VsZW1lbnRzJ10uY29udGFpbnModHlwZSkpIHRkLmFkb3B0KGNvbnRlbnQpOworCQkJZWxzZSB0ZC5zZXQoJ2h0bWwnLCBjb250ZW50KTsKKworCQkJcmV0dXJuIHRkOworCQl9KTsKKworCQlyZXR1cm4geworCQkJdHI6IG5ldyBFbGVtZW50KCd0cicsIHJvd1Byb3BlcnRpZXMpLmluamVjdCh0YXJnZXQgfHwgdGhpcy5ib2R5LCB3aGVyZSkuYWRvcHQodGRzKSwKKwkJCXRkczogdGRzCisJCX07CisJfQorCit9KTsKKworCitbJ2Fkb3B0JywgJ2luamVjdCcsICd3cmFwcycsICdncmFiJywgJ3JlcGxhY2VzJywgJ2Rpc3Bvc2UnXS5lYWNoKGZ1bmN0aW9uKG1ldGhvZCl7CisJSHRtbFRhYmxlLmltcGxlbWVudChtZXRob2QsIGZ1bmN0aW9uKCl7CisJCXRoaXMuZWxlbWVudFttZXRob2RdLmFwcGx5KHRoaXMuZWxlbWVudCwgYXJndW1lbnRzKTsKKwkJcmV0dXJuIHRoaXM7CisJfSk7Cit9KTsKKworCisKKworLyoKKy0tLQorCitzY3JpcHQ6IEh0bWxUYWJsZS5aZWJyYS5qcworCituYW1lOiBIdG1sVGFibGUuWmVicmEKKworZGVzY3JpcHRpb246IEJ1aWxkcyBhIHN0cmlweSB0YWJsZSB3aXRoIG1ldGhvZHMgdG8gYWRkIHJvd3MuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gSGFyYWxkIEtpcnNjaG5lcgorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSAvSHRtbFRhYmxlCisgIC0gL0NsYXNzLnJlZmFjdG9yCisKK3Byb3ZpZGVzOiBbSHRtbFRhYmxlLlplYnJhXQorCisuLi4KKyovCisKK0h0bWxUYWJsZSA9IENsYXNzLnJlZmFjdG9yKEh0bWxUYWJsZSwgeworCisJb3B0aW9uczogeworCQljbGFzc1plYnJhOiAndGFibGUtdHItb2RkJywKKwkJemVicmE6IHRydWUKKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24oKXsKKwkJdGhpcy5wcmV2aW91cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCQlpZiAodGhpcy5vY2NsdWRlZCkgcmV0dXJuIHRoaXMub2NjbHVkZWQ7CisJCWlmICh0aGlzLm9wdGlvbnMuemVicmEpIHRoaXMudXBkYXRlWmVicmFzKCk7CisJfSwKKworCXVwZGF0ZVplYnJhczogZnVuY3Rpb24oKXsKKwkJQXJyYXkuZWFjaCh0aGlzLmJvZHkucm93cywgdGhpcy56ZWJyYSwgdGhpcyk7CisJfSwKKworCXNldFJvd1N0eWxlOiBmdW5jdGlvbihyb3csIGkpeworCQlpZiAodGhpcy5wcmV2aW91cykgdGhpcy5wcmV2aW91cyhyb3csIGkpOworCQl0aGlzLnplYnJhKHJvdywgaSk7CisJfSwKKworCXplYnJhOiBmdW5jdGlvbihyb3csIGkpeworCQlyZXR1cm4gcm93WygoaSAlIDIpID8gJ3JlbW92ZScgOiAnYWRkJykrJ0NsYXNzJ10odGhpcy5vcHRpb25zLmNsYXNzWmVicmEpOworCX0sCisKKwlwdXNoOiBmdW5jdGlvbigpeworCQl2YXIgcHVzaGVkID0gdGhpcy5wcmV2aW91cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCQlpZiAodGhpcy5vcHRpb25zLnplYnJhKSB0aGlzLnVwZGF0ZVplYnJhcygpOworCQlyZXR1cm4gcHVzaGVkOworCX0KKworfSk7CisKKworLyoKKy0tLQorCitzY3JpcHQ6IEh0bWxUYWJsZS5Tb3J0LmpzCisKK25hbWU6IEh0bWxUYWJsZS5Tb3J0CisKK2Rlc2NyaXB0aW9uOiBCdWlsZHMgYSBzdHJpcHksIHNvcnRhYmxlIHRhYmxlIHdpdGggbWV0aG9kcyB0byBhZGQgcm93cy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBIYXJhbGQgS2lyc2NobmVyCisgIC0gQWFyb24gTmV3dG9uCisgIC0gSmFjb2IgVGhvcm50b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9IYXNoCisgIC0gL0h0bWxUYWJsZQorICAtIC9DbGFzcy5yZWZhY3RvcgorICAtIC9FbGVtZW50LkRlbGVnYXRpb24KKyAgLSAvU3RyaW5nLkV4dHJhcworICAtIC9EYXRlCisKK3Byb3ZpZGVzOiBbSHRtbFRhYmxlLlNvcnRdCisKKy4uLgorKi8KKworSHRtbFRhYmxlID0gQ2xhc3MucmVmYWN0b3IoSHRtbFRhYmxlLCB7CisKKwlvcHRpb25zOiB7LyoKKwkJb25Tb3J0OiBmdW5jdGlvbigpe30sICovCisJCXNvcnRJbmRleDogMCwKKwkJc29ydFJldmVyc2U6IGZhbHNlLAorCQlwYXJzZXJzOiBbXSwKKwkJZGVmYXVsdFBhcnNlcjogJ3N0cmluZycsCisJCWNsYXNzU29ydGFibGU6ICd0YWJsZS1zb3J0YWJsZScsCisJCWNsYXNzSGVhZFNvcnQ6ICd0YWJsZS10aC1zb3J0JywKKwkJY2xhc3NIZWFkU29ydFJldjogJ3RhYmxlLXRoLXNvcnQtcmV2JywKKwkJY2xhc3NOb1NvcnQ6ICd0YWJsZS10aC1ub3NvcnQnLAorCQljbGFzc0dyb3VwSGVhZDogJ3RhYmxlLXRyLWdyb3VwLWhlYWQnLAorCQljbGFzc0dyb3VwOiAndGFibGUtdHItZ3JvdXAnLAorCQljbGFzc0NlbGxTb3J0OiAndGFibGUtdGQtc29ydCcsCisJCWNsYXNzU29ydFNwYW46ICd0YWJsZS10aC1zb3J0LXNwYW4nLAorCQlzb3J0YWJsZTogZmFsc2UsCisJCXRoU2VsZWN0b3I6ICd0aCcKKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCl7CisJCXRoaXMucHJldmlvdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKwkJaWYgKHRoaXMub2NjbHVkZWQpIHJldHVybiB0aGlzLm9jY2x1ZGVkOworCQl0aGlzLnNvcnRlZCA9IHtpbmRleDogbnVsbCwgZGlyOiAxfTsKKwkJdGhpcy5ib3VuZCA9IHsKKwkJCWhlYWRDbGljazogdGhpcy5oZWFkQ2xpY2suYmluZCh0aGlzKQorCQl9OworCQl0aGlzLnNvcnRTcGFucyA9IG5ldyBFbGVtZW50cygpOworCQlpZiAodGhpcy5vcHRpb25zLnNvcnRhYmxlKXsKKwkJCXRoaXMuZW5hYmxlU29ydCgpOworCQkJaWYgKHRoaXMub3B0aW9ucy5zb3J0SW5kZXggIT0gbnVsbCkgdGhpcy5zb3J0KHRoaXMub3B0aW9ucy5zb3J0SW5kZXgsIHRoaXMub3B0aW9ucy5zb3J0UmV2ZXJzZSk7CisJCX0KKwl9LAorCisJYXR0YWNoU29ydHM6IGZ1bmN0aW9uKGF0dGFjaCl7CisJCXRoaXMuZGV0YWNoU29ydHMoKTsKKwkJaWYgKGF0dGFjaCAhPT0gZmFsc2UpIHRoaXMuZWxlbWVudC5hZGRFdmVudCgnY2xpY2s6cmVsYXkoJyArIHRoaXMub3B0aW9ucy50aFNlbGVjdG9yICsgJyknLCB0aGlzLmJvdW5kLmhlYWRDbGljayk7CisJfSwKKworCWRldGFjaFNvcnRzOiBmdW5jdGlvbigpeworCQl0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRzKCdjbGljazpyZWxheSgnICsgdGhpcy5vcHRpb25zLnRoU2VsZWN0b3IgKyAnKScpOworCX0sCisKKwlzZXRIZWFkZXJzOiBmdW5jdGlvbigpeworCQl0aGlzLnByZXZpb3VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisJCWlmICh0aGlzLnNvcnRFbmFibGVkKSB0aGlzLnNldFBhcnNlcnMoKTsKKwl9LAorCisJc2V0UGFyc2VyczogZnVuY3Rpb24oKXsKKwkJdGhpcy5wYXJzZXJzID0gdGhpcy5kZXRlY3RQYXJzZXJzKCk7CisJfSwKKworCWRldGVjdFBhcnNlcnM6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLmhlYWQgJiYgdGhpcy5oZWFkLmdldEVsZW1lbnRzKHRoaXMub3B0aW9ucy50aFNlbGVjdG9yKS5mbGF0dGVuKCkubWFwKHRoaXMuZGV0ZWN0UGFyc2VyLCB0aGlzKTsKKwl9LAorCisJZGV0ZWN0UGFyc2VyOiBmdW5jdGlvbihjZWxsLCBpbmRleCl7CisJCWlmIChjZWxsLmhhc0NsYXNzKHRoaXMub3B0aW9ucy5jbGFzc05vU29ydCkgfHwgY2VsbC5yZXRyaWV2ZSgnaHRtbHRhYmxlLXBhcnNlcicpKSByZXR1cm4gY2VsbC5yZXRyaWV2ZSgnaHRtbHRhYmxlLXBhcnNlcicpOworCQl2YXIgdGhEaXYgPSBuZXcgRWxlbWVudCgnZGl2Jyk7CisJCXRoRGl2LmFkb3B0KGNlbGwuY2hpbGROb2RlcykuaW5qZWN0KGNlbGwpOworCQl2YXIgc29ydFNwYW4gPSBuZXcgRWxlbWVudCgnc3BhbicsIHsnY2xhc3MnOiB0aGlzLm9wdGlvbnMuY2xhc3NTb3J0U3Bhbn0pLmluamVjdCh0aERpdiwgJ3RvcCcpOworCQl0aGlzLnNvcnRTcGFucy5wdXNoKHNvcnRTcGFuKTsKKwkJdmFyIHBhcnNlciA9IHRoaXMub3B0aW9ucy5wYXJzZXJzW2luZGV4XSwKKwkJCXJvd3MgPSB0aGlzLmJvZHkucm93cywKKwkJCWNhbmNlbDsKKwkJc3dpdGNoICh0eXBlT2YocGFyc2VyKSl7CisJCQljYXNlICdmdW5jdGlvbic6IHBhcnNlciA9IHtjb252ZXJ0OiBwYXJzZXJ9OyBjYW5jZWwgPSB0cnVlOyBicmVhazsKKwkJCWNhc2UgJ3N0cmluZyc6IHBhcnNlciA9IHBhcnNlcjsgY2FuY2VsID0gdHJ1ZTsgYnJlYWs7CisJCX0KKwkJaWYgKCFjYW5jZWwpeworCQkJSHRtbFRhYmxlLlBhcnNlclByaW9yaXR5LnNvbWUoZnVuY3Rpb24ocGFyc2VyTmFtZSl7CisJCQkJdmFyIGN1cnJlbnQgPSBIdG1sVGFibGUuUGFyc2Vyc1twYXJzZXJOYW1lXSwKKwkJCQkJbWF0Y2ggPSBjdXJyZW50Lm1hdGNoOworCQkJCWlmICghbWF0Y2gpIHJldHVybiBmYWxzZTsKKwkJCQlmb3IgKHZhciBpID0gMCwgaiA9IHJvd3MubGVuZ3RoOyBpIDwgajsgaSsrKXsKKwkJCQkJdmFyIGNlbGwgPSBkb2N1bWVudC5pZChyb3dzW2ldLmNlbGxzW2luZGV4XSksCisJCQkJCQl0ZXh0ID0gY2VsbCA/IGNlbGwuZ2V0KCdodG1sJykuY2xlYW4oKSA6ICcnOworCQkJCQlpZiAodGV4dCAmJiBtYXRjaC50ZXN0KHRleHQpKXsKKwkJCQkJCXBhcnNlciA9IGN1cnJlbnQ7CisJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJfQorCQkJCX0KKwkJCX0pOworCQl9CisJCWlmICghcGFyc2VyKSBwYXJzZXIgPSB0aGlzLm9wdGlvbnMuZGVmYXVsdFBhcnNlcjsKKwkJY2VsbC5zdG9yZSgnaHRtbHRhYmxlLXBhcnNlcicsIHBhcnNlcik7CisJCXJldHVybiBwYXJzZXI7CisJfSwKKworCWhlYWRDbGljazogZnVuY3Rpb24oZXZlbnQsIGVsKXsKKwkJaWYgKCF0aGlzLmhlYWQgfHwgZWwuaGFzQ2xhc3ModGhpcy5vcHRpb25zLmNsYXNzTm9Tb3J0KSkgcmV0dXJuOworCQlyZXR1cm4gdGhpcy5zb3J0KEFycmF5LmluZGV4T2YodGhpcy5oZWFkLmdldEVsZW1lbnRzKHRoaXMub3B0aW9ucy50aFNlbGVjdG9yKS5mbGF0dGVuKCksIGVsKSAlIHRoaXMuYm9keS5yb3dzWzBdLmNlbGxzLmxlbmd0aCk7CisJfSwKKworCXNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7CisJCXZhciBwcmV2aW91c1NlcmlhbGl6YXRpb24gPSB0aGlzLnByZXZpb3VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwge307CisJCWlmICh0aGlzLm9wdGlvbnMuc29ydGFibGUpIHsKKwkJCXByZXZpb3VzU2VyaWFsaXphdGlvbi5zb3J0SW5kZXggPSB0aGlzLnNvcnRlZC5pbmRleDsKKwkJCXByZXZpb3VzU2VyaWFsaXphdGlvbi5zb3J0UmV2ZXJzZSA9IHRoaXMuc29ydGVkLnJldmVyc2U7CisJCX0KKwkJcmV0dXJuIHByZXZpb3VzU2VyaWFsaXphdGlvbjsKKwl9LAorCisJcmVzdG9yZTogZnVuY3Rpb24odGFibGVTdGF0ZSkgeworCQlpZih0aGlzLm9wdGlvbnMuc29ydGFibGUgJiYgdGFibGVTdGF0ZS5zb3J0SW5kZXgpIHsKKwkJCXRoaXMuc29ydCh0YWJsZVN0YXRlLnNvcnRJbmRleCwgdGFibGVTdGF0ZS5zb3J0UmV2ZXJzZSk7CisJCX0KKwkJdGhpcy5wcmV2aW91cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCX0sCisKKwlzZXRTb3J0ZWRTdGF0ZTogZnVuY3Rpb24oaW5kZXgsIHJldmVyc2UpeworCQlpZiAocmV2ZXJzZSAhPSBudWxsKSB0aGlzLnNvcnRlZC5yZXZlcnNlID0gcmV2ZXJzZTsKKwkJZWxzZSBpZiAodGhpcy5zb3J0ZWQuaW5kZXggPT0gaW5kZXgpIHRoaXMuc29ydGVkLnJldmVyc2UgPSAhdGhpcy5zb3J0ZWQucmV2ZXJzZTsKKwkJZWxzZSB0aGlzLnNvcnRlZC5yZXZlcnNlID0gdGhpcy5zb3J0ZWQuaW5kZXggPT0gbnVsbDsKKworCQlpZiAoaW5kZXggIT0gbnVsbCkgdGhpcy5zb3J0ZWQuaW5kZXggPSBpbmRleDsKKwl9LAorCisJc2V0SGVhZFNvcnQ6IGZ1bmN0aW9uKHNvcnRlZCl7CisJCXZhciBoZWFkID0gJCQoIXRoaXMuaGVhZC5sZW5ndGggPyB0aGlzLmhlYWQuY2VsbHNbdGhpcy5zb3J0ZWQuaW5kZXhdIDogdGhpcy5oZWFkLm1hcChmdW5jdGlvbihyb3cpeworCQkJcmV0dXJuIHJvdy5nZXRFbGVtZW50cyh0aGlzLm9wdGlvbnMudGhTZWxlY3RvcilbdGhpcy5zb3J0ZWQuaW5kZXhdOworCQl9LCB0aGlzKS5jbGVhbigpKTsKKwkJaWYgKCFoZWFkLmxlbmd0aCkgcmV0dXJuOworCQlpZiAoc29ydGVkKXsKKwkJCWhlYWQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmNsYXNzSGVhZFNvcnQpOworCQkJaWYgKHRoaXMuc29ydGVkLnJldmVyc2UpIGhlYWQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmNsYXNzSGVhZFNvcnRSZXYpOworCQkJZWxzZSBoZWFkLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5jbGFzc0hlYWRTb3J0UmV2KTsKKwkJfSBlbHNlIHsKKwkJCWhlYWQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmNsYXNzSGVhZFNvcnQpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5jbGFzc0hlYWRTb3J0UmV2KTsKKwkJfQorCX0sCisKKwlzZXRSb3dTb3J0OiBmdW5jdGlvbihkYXRhLCBwcmUpeworCQl2YXIgY291bnQgPSBkYXRhLmxlbmd0aCwKKwkJCWJvZHkgPSB0aGlzLmJvZHksCisJCQlncm91cCwKKwkJCXJvd0luZGV4OworCisJCXdoaWxlIChjb3VudCl7CisJCQl2YXIgaXRlbSA9IGRhdGFbLS1jb3VudF0sCisJCQkJcG9zaXRpb24gPSBpdGVtLnBvc2l0aW9uLAorCQkJCXJvdyA9IGJvZHkucm93c1twb3NpdGlvbl07CisKKwkJCWlmIChyb3cuZGlzYWJsZWQpIGNvbnRpbnVlOworCQkJaWYgKCFwcmUpeworCQkJCWdyb3VwID0gdGhpcy5zZXRHcm91cFNvcnQoZ3JvdXAsIHJvdywgaXRlbSk7CisJCQkJdGhpcy5zZXRSb3dTdHlsZShyb3csIGNvdW50KTsKKwkJCX0KKwkJCWJvZHkuYXBwZW5kQ2hpbGQocm93KTsKKworCQkJZm9yIChyb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgY291bnQ7IHJvd0luZGV4KyspeworCQkJCWlmIChkYXRhW3Jvd0luZGV4XS5wb3NpdGlvbiA+IHBvc2l0aW9uKSBkYXRhW3Jvd0luZGV4XS5wb3NpdGlvbi0tOworCQkJfQorCQl9CisJfSwKKworCXNldFJvd1N0eWxlOiBmdW5jdGlvbihyb3csIGkpeworCQl0aGlzLnByZXZpb3VzKHJvdywgaSk7CisJCXJvdy5jZWxsc1t0aGlzLnNvcnRlZC5pbmRleF0uYWRkQ2xhc3ModGhpcy5vcHRpb25zLmNsYXNzQ2VsbFNvcnQpOworCX0sCisKKwlzZXRHcm91cFNvcnQ6IGZ1bmN0aW9uKGdyb3VwLCByb3csIGl0ZW0peworCQlpZiAoZ3JvdXAgPT0gaXRlbS52YWx1ZSkgcm93LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5jbGFzc0dyb3VwSGVhZCkuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmNsYXNzR3JvdXApOworCQllbHNlIHJvdy5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuY2xhc3NHcm91cCkuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmNsYXNzR3JvdXBIZWFkKTsKKwkJcmV0dXJuIGl0ZW0udmFsdWU7CisJfSwKKworCWdldFBhcnNlcjogZnVuY3Rpb24oKXsKKwkJdmFyIHBhcnNlciA9IHRoaXMucGFyc2Vyc1t0aGlzLnNvcnRlZC5pbmRleF07CisJCXJldHVybiB0eXBlT2YocGFyc2VyKSA9PSAnc3RyaW5nJyA/IEh0bWxUYWJsZS5QYXJzZXJzW3BhcnNlcl0gOiBwYXJzZXI7CisJfSwKKworCXNvcnQ6IGZ1bmN0aW9uKGluZGV4LCByZXZlcnNlLCBwcmUpeworCQlpZiAoIXRoaXMuaGVhZCkgcmV0dXJuOworCisJCWlmICghcHJlKXsKKwkJCXRoaXMuY2xlYXJTb3J0KCk7CisJCQl0aGlzLnNldFNvcnRlZFN0YXRlKGluZGV4LCByZXZlcnNlKTsKKwkJCXRoaXMuc2V0SGVhZFNvcnQodHJ1ZSk7CisJCX0KKworCQl2YXIgcGFyc2VyID0gdGhpcy5nZXRQYXJzZXIoKTsKKwkJaWYgKCFwYXJzZXIpIHJldHVybjsKKworCQl2YXIgcmVsOworCQlpZiAoIUJyb3dzZXIuaWUpeworCQkJcmVsID0gdGhpcy5ib2R5LmdldFBhcmVudCgpOworCQkJdGhpcy5ib2R5LmRpc3Bvc2UoKTsKKwkJfQorCisJCXZhciBkYXRhID0gdGhpcy5wYXJzZURhdGEocGFyc2VyKS5zb3J0KGZ1bmN0aW9uKGEsIGIpeworCQkJaWYgKGEudmFsdWUgPT09IGIudmFsdWUpIHJldHVybiAwOworCQkJcmV0dXJuIGEudmFsdWUgPiBiLnZhbHVlID8gMSA6IC0xOworCQl9KTsKKworCQlpZiAodGhpcy5zb3J0ZWQucmV2ZXJzZSA9PSAocGFyc2VyID09IEh0bWxUYWJsZS5QYXJzZXJzWydpbnB1dC1jaGVja2VkJ10pKSBkYXRhLnJldmVyc2UodHJ1ZSk7CisJCXRoaXMuc2V0Um93U29ydChkYXRhLCBwcmUpOworCisJCWlmIChyZWwpIHJlbC5ncmFiKHRoaXMuYm9keSk7CisJCXRoaXMuZmlyZUV2ZW50KCdzdGF0ZUNoYW5nZWQnKTsKKwkJcmV0dXJuIHRoaXMuZmlyZUV2ZW50KCdzb3J0JywgW3RoaXMuYm9keSwgdGhpcy5zb3J0ZWQuaW5kZXhdKTsKKwl9LAorCisJcGFyc2VEYXRhOiBmdW5jdGlvbihwYXJzZXIpeworCQlyZXR1cm4gQXJyYXkubWFwKHRoaXMuYm9keS5yb3dzLCBmdW5jdGlvbihyb3csIGkpeworCQkJdmFyIHZhbHVlID0gcGFyc2VyLmNvbnZlcnQuY2FsbChkb2N1bWVudC5pZChyb3cuY2VsbHNbdGhpcy5zb3J0ZWQuaW5kZXhdKSk7CisJCQlyZXR1cm4geworCQkJCXBvc2l0aW9uOiBpLAorCQkJCXZhbHVlOiB2YWx1ZQorCQkJfTsKKwkJfSwgdGhpcyk7CisJfSwKKworCWNsZWFyU29ydDogZnVuY3Rpb24oKXsKKwkJdGhpcy5zZXRIZWFkU29ydChmYWxzZSk7CisJCXRoaXMuYm9keS5nZXRFbGVtZW50cygndGQnKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuY2xhc3NDZWxsU29ydCk7CisJfSwKKworCXJlU29ydDogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMuc29ydEVuYWJsZWQpIHRoaXMuc29ydC5jYWxsKHRoaXMsIHRoaXMuc29ydGVkLmluZGV4LCB0aGlzLnNvcnRlZC5yZXZlcnNlKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWVuYWJsZVNvcnQ6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuY2xhc3NTb3J0YWJsZSk7CisJCXRoaXMuYXR0YWNoU29ydHModHJ1ZSk7CisJCXRoaXMuc2V0UGFyc2VycygpOworCQl0aGlzLnNvcnRFbmFibGVkID0gdHJ1ZTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWRpc2FibGVTb3J0OiBmdW5jdGlvbigpeworCQl0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmNsYXNzU29ydGFibGUpOworCQl0aGlzLmF0dGFjaFNvcnRzKGZhbHNlKTsKKwkJdGhpcy5zb3J0U3BhbnMuZWFjaChmdW5jdGlvbihzcGFuKXsKKwkJCXNwYW4uZGVzdHJveSgpOworCQl9KTsKKwkJdGhpcy5zb3J0U3BhbnMuZW1wdHkoKTsKKwkJdGhpcy5zb3J0RW5hYmxlZCA9IGZhbHNlOworCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCitIdG1sVGFibGUuUGFyc2VyUHJpb3JpdHkgPSBbJ2RhdGUnLCAnaW5wdXQtY2hlY2tlZCcsICdpbnB1dC12YWx1ZScsICdmbG9hdCcsICdudW1iZXInXTsKKworSHRtbFRhYmxlLlBhcnNlcnMgPSB7CisKKwknZGF0ZSc6IHsKKwkJbWF0Y2g6IC9eXGR7Mn1bLVwvIF1cZHsyfVstXC8gXVxkezIsNH0kLywKKwkJY29udmVydDogZnVuY3Rpb24oKXsKKwkJCXZhciBkID0gRGF0ZS5wYXJzZSh0aGlzLmdldCgndGV4dCcpLnN0cmlwVGFncygpKTsKKwkJCXJldHVybiAodHlwZU9mKGQpID09ICdkYXRlJykgPyBkLmZvcm1hdCgnZGInKSA6ICcnOworCQl9LAorCQl0eXBlOiAnZGF0ZScKKwl9LAorCSdpbnB1dC1jaGVja2VkJzogeworCQltYXRjaDogLyB0eXBlPSIocmFkaW98Y2hlY2tib3gpIiAvLAorCQljb252ZXJ0OiBmdW5jdGlvbigpeworCQkJcmV0dXJuIHRoaXMuZ2V0RWxlbWVudCgnaW5wdXQnKS5jaGVja2VkOworCQl9CisJfSwKKwknaW5wdXQtdmFsdWUnOiB7CisJCW1hdGNoOiAvPGlucHV0LywKKwkJY29udmVydDogZnVuY3Rpb24oKXsKKwkJCXJldHVybiB0aGlzLmdldEVsZW1lbnQoJ2lucHV0JykudmFsdWU7CisJCX0KKwl9LAorCSdudW1iZXInOiB7CisJCW1hdGNoOiAvXlxkK1teXGQuLF0qJC8sCisJCWNvbnZlcnQ6IGZ1bmN0aW9uKCl7CisJCQlyZXR1cm4gdGhpcy5nZXQoJ3RleHQnKS5zdHJpcFRhZ3MoKS50b0ludCgpOworCQl9LAorCQludW1iZXI6IHRydWUKKwl9LAorCSdudW1iZXJMYXgnOiB7CisJCW1hdGNoOiAvXlteXGRdK1xkKyQvLAorCQljb252ZXJ0OiBmdW5jdGlvbigpeworCQkJcmV0dXJuIHRoaXMuZ2V0KCd0ZXh0JykucmVwbGFjZSgvW14tP14wLTldLywgJycpLnN0cmlwVGFncygpLnRvSW50KCk7CisJCX0sCisJCW51bWJlcjogdHJ1ZQorCX0sCisJJ2Zsb2F0JzogeworCQltYXRjaDogL15bXGRdK1wuW1xkXSsvLAorCQljb252ZXJ0OiBmdW5jdGlvbigpeworCQkJcmV0dXJuIHRoaXMuZ2V0KCd0ZXh0JykucmVwbGFjZSgvW14tP15cZC5dLywgJycpLnN0cmlwVGFncygpLnRvRmxvYXQoKTsKKwkJfSwKKwkJbnVtYmVyOiB0cnVlCisJfSwKKwknZmxvYXRMYXgnOiB7CisJCW1hdGNoOiAvXlteXGRdK1tcZF0rXC5bXGRdKyQvLAorCQljb252ZXJ0OiBmdW5jdGlvbigpeworCQkJcmV0dXJuIHRoaXMuZ2V0KCd0ZXh0JykucmVwbGFjZSgvW14tP15cZC5dLywgJycpLnN0cmlwVGFncygpOworCQl9LAorCQludW1iZXI6IHRydWUKKwl9LAorCSdzdHJpbmcnOiB7CisJCW1hdGNoOiBudWxsLAorCQljb252ZXJ0OiBmdW5jdGlvbigpeworCQkJcmV0dXJuIHRoaXMuZ2V0KCd0ZXh0Jykuc3RyaXBUYWdzKCkudG9Mb3dlckNhc2UoKTsKKwkJfQorCX0sCisJJ3RpdGxlJzogeworCQltYXRjaDogbnVsbCwKKwkJY29udmVydDogZnVuY3Rpb24oKXsKKwkJCXJldHVybiB0aGlzLnRpdGxlOworCQl9CisJfQorCit9OworCisvLzwxLjJjb21wYXQ+CitIdG1sVGFibGUuUGFyc2VycyA9IG5ldyBIYXNoKEh0bWxUYWJsZS5QYXJzZXJzKTsKKy8vPC8xLjJjb21wYXQ+CisKK0h0bWxUYWJsZS5kZWZpbmVQYXJzZXJzID0gZnVuY3Rpb24ocGFyc2Vycyl7CisJSHRtbFRhYmxlLlBhcnNlcnMgPSBPYmplY3QuYXBwZW5kKEh0bWxUYWJsZS5QYXJzZXJzLCBwYXJzZXJzKTsKKwlmb3IgKHZhciBwYXJzZXIgaW4gcGFyc2Vycyl7CisJCUh0bWxUYWJsZS5QYXJzZXJQcmlvcml0eS51bnNoaWZ0KHBhcnNlcik7CisJfQorfTsKKworCisvKgorLS0tCisKK3NjcmlwdDogS2V5Ym9hcmQuanMKKworbmFtZTogS2V5Ym9hcmQKKworZGVzY3JpcHRpb246IEtleWJvYXJkRXZlbnRzIHVzZWQgdG8gaW50ZXJjZXB0IGV2ZW50cyBvbiBhIGNsYXNzIGZvciBrZXlib2FyZCBhbmQgZm9ybWF0IG1vZGlmaWVycyBpbiBhIHNwZWNpZmljIG9yZGVyIHNvIGFzIHRvIG1ha2UgYWx0K3NoaWZ0K2MgdGhlIHNhbWUgYXMgc2hpZnQrYWx0K2MuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gUGVycmluIFdlc3RyaWNoCisgIC0gQWFyb24gTmV3dG9uCisgIC0gU2NvdHQgS3lsZQorCityZXF1aXJlczoKKyAgLSBDb3JlL0V2ZW50cworICAtIENvcmUvT3B0aW9ucworICAtIENvcmUvRWxlbWVudC5FdmVudAorICAtIEVsZW1lbnQuRXZlbnQuUHNldWRvcy5LZXlzCisKK3Byb3ZpZGVzOiBbS2V5Ym9hcmRdCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKKwl2YXIgS2V5Ym9hcmQgPSB0aGlzLktleWJvYXJkID0gbmV3IENsYXNzKHsKKworCQlFeHRlbmRzOiBFdmVudHMsCisKKwkJSW1wbGVtZW50czogW09wdGlvbnNdLAorCisJCW9wdGlvbnM6IHsvKgorCQkJb25BY3RpdmF0ZTogZnVuY3Rpb24oKXt9LAorCQkJb25EZWFjdGl2YXRlOiBmdW5jdGlvbigpe30sKi8KKwkJCWRlZmF1bHRFdmVudFR5cGU6ICdrZXlkb3duJywKKwkJCWFjdGl2ZTogZmFsc2UsCisJCQltYW5hZ2VyOiBudWxsLAorCQkJZXZlbnRzOiB7fSwKKwkJCW5vblBhcnNlZEV2ZW50czogWydhY3RpdmF0ZScsICdkZWFjdGl2YXRlJywgJ29uYWN0aXZhdGUnLCAnb25kZWFjdGl2YXRlJywgJ2NoYW5nZWQnLCAnb25jaGFuZ2VkJ10KKwkJfSwKKworCQlpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXsKKwkJCWlmIChvcHRpb25zICYmIG9wdGlvbnMubWFuYWdlcil7CisJCQkJdGhpcy5fbWFuYWdlciA9IG9wdGlvbnMubWFuYWdlcjsKKwkJCQlkZWxldGUgb3B0aW9ucy5tYW5hZ2VyOworCQkJfQorCQkJdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpOworCQkJdGhpcy5fc2V0dXAoKTsKKwkJfSwKKworCQlhZGRFdmVudDogZnVuY3Rpb24odHlwZSwgZm4sIGludGVybmFsKXsKKwkJCXJldHVybiB0aGlzLnBhcmVudChLZXlib2FyZC5wYXJzZSh0eXBlLCB0aGlzLm9wdGlvbnMuZGVmYXVsdEV2ZW50VHlwZSwgdGhpcy5vcHRpb25zLm5vblBhcnNlZEV2ZW50cyksIGZuLCBpbnRlcm5hbCk7CisJCX0sCisKKwkJcmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXsKKwkJCXJldHVybiB0aGlzLnBhcmVudChLZXlib2FyZC5wYXJzZSh0eXBlLCB0aGlzLm9wdGlvbnMuZGVmYXVsdEV2ZW50VHlwZSwgdGhpcy5vcHRpb25zLm5vblBhcnNlZEV2ZW50cyksIGZuKTsKKwkJfSwKKworCQl0b2dnbGVBY3RpdmU6IGZ1bmN0aW9uKCl7CisJCQlyZXR1cm4gdGhpc1t0aGlzLmlzQWN0aXZlKCkgPyAnZGVhY3RpdmF0ZScgOiAnYWN0aXZhdGUnXSgpOworCQl9LAorCisJCWFjdGl2YXRlOiBmdW5jdGlvbihpbnN0YW5jZSl7CisJCQlpZiAoaW5zdGFuY2UpeworCQkJCWlmIChpbnN0YW5jZS5pc0FjdGl2ZSgpKSByZXR1cm4gdGhpczsKKwkJCQkvL2lmIHdlJ3JlIHN0ZWFsaW5nIGZvY3VzLCBzdG9yZSB0aGUgbGFzdCBrZXlib2FyZCB0byBoYXZlIGl0IHNvIHRoZSByZWxpbnF1aXNoIGNvbW1hbmQgd29ya3MKKwkJCQlpZiAodGhpcy5fYWN0aXZlS0IgJiYgaW5zdGFuY2UgIT0gdGhpcy5fYWN0aXZlS0IpeworCQkJCQl0aGlzLnByZXZpb3VzID0gdGhpcy5fYWN0aXZlS0I7CisJCQkJCXRoaXMucHJldmlvdXMuZmlyZUV2ZW50KCdkZWFjdGl2YXRlJyk7CisJCQkJfQorCQkJCS8vaWYgd2UncmUgZW5hYmxpbmcgYSBjaGlsZCwgYXNzaWduIGl0IHNvIHRoYXQgZXZlbnRzIGFyZSBub3cgcGFzc2VkIHRvIGl0CisJCQkJdGhpcy5fYWN0aXZlS0IgPSBpbnN0YW5jZS5maXJlRXZlbnQoJ2FjdGl2YXRlJyk7CisJCQkJS2V5Ym9hcmQubWFuYWdlci5maXJlRXZlbnQoJ2NoYW5nZWQnKTsKKwkJCX0gZWxzZSBpZiAodGhpcy5fbWFuYWdlcil7CisJCQkJLy9lbHNlIHdlJ3JlIGVuYWJsaW5nIG91cnNlbHZlcywgd2UgbXVzdCBhc2sgb3VyIHBhcmVudCB0byBkbyBpdCBmb3IgdXMKKwkJCQl0aGlzLl9tYW5hZ2VyLmFjdGl2YXRlKHRoaXMpOworCQkJfQorCQkJcmV0dXJuIHRoaXM7CisJCX0sCisKKwkJaXNBY3RpdmU6IGZ1bmN0aW9uKCl7CisJCQlyZXR1cm4gdGhpcy5fbWFuYWdlciA/ICh0aGlzLl9tYW5hZ2VyLl9hY3RpdmVLQiA9PSB0aGlzKSA6IChLZXlib2FyZC5tYW5hZ2VyID09IHRoaXMpOworCQl9LAorCisJCWRlYWN0aXZhdGU6IGZ1bmN0aW9uKGluc3RhbmNlKXsKKwkJCWlmIChpbnN0YW5jZSl7CisJCQkJaWYgKGluc3RhbmNlID09PSB0aGlzLl9hY3RpdmVLQil7CisJCQkJCXRoaXMuX2FjdGl2ZUtCID0gbnVsbDsKKwkJCQkJaW5zdGFuY2UuZmlyZUV2ZW50KCdkZWFjdGl2YXRlJyk7CisJCQkJCUtleWJvYXJkLm1hbmFnZXIuZmlyZUV2ZW50KCdjaGFuZ2VkJyk7CisJCQkJfQorCQkJfSBlbHNlIGlmICh0aGlzLl9tYW5hZ2VyKXsKKwkJCQl0aGlzLl9tYW5hZ2VyLmRlYWN0aXZhdGUodGhpcyk7CisJCQl9CisJCQlyZXR1cm4gdGhpczsKKwkJfSwKKworCQlyZWxpbnF1aXNoOiBmdW5jdGlvbigpeworCQkJaWYgKHRoaXMuaXNBY3RpdmUoKSAmJiB0aGlzLl9tYW5hZ2VyICYmIHRoaXMuX21hbmFnZXIucHJldmlvdXMpIHRoaXMuX21hbmFnZXIuYWN0aXZhdGUodGhpcy5fbWFuYWdlci5wcmV2aW91cyk7CisJCQllbHNlIHRoaXMuZGVhY3RpdmF0ZSgpOworCQkJcmV0dXJuIHRoaXM7CisJCX0sCisKKwkJLy9tYW5hZ2VtZW50IGxvZ2ljCisJCW1hbmFnZTogZnVuY3Rpb24oaW5zdGFuY2UpeworCQkJaWYgKGluc3RhbmNlLl9tYW5hZ2VyKSBpbnN0YW5jZS5fbWFuYWdlci5kcm9wKGluc3RhbmNlKTsKKwkJCXRoaXMuX2luc3RhbmNlcy5wdXNoKGluc3RhbmNlKTsKKwkJCWluc3RhbmNlLl9tYW5hZ2VyID0gdGhpczsKKwkJCWlmICghdGhpcy5fYWN0aXZlS0IpIHRoaXMuYWN0aXZhdGUoaW5zdGFuY2UpOworCQkJcmV0dXJuIHRoaXM7CisJCX0sCisKKwkJZHJvcDogZnVuY3Rpb24oaW5zdGFuY2UpeworCQkJaW5zdGFuY2UucmVsaW5xdWlzaCgpOworCQkJdGhpcy5faW5zdGFuY2VzLmVyYXNlKGluc3RhbmNlKTsKKwkJCWlmICh0aGlzLl9hY3RpdmVLQiA9PSBpbnN0YW5jZSl7CisJCQkJaWYgKHRoaXMucHJldmlvdXMgJiYgdGhpcy5faW5zdGFuY2VzLmNvbnRhaW5zKHRoaXMucHJldmlvdXMpKSB0aGlzLmFjdGl2YXRlKHRoaXMucHJldmlvdXMpOworCQkJCWVsc2UgdGhpcy5fYWN0aXZlS0IgPSB0aGlzLl9pbnN0YW5jZXNbMF07CisJCQl9CisJCQlyZXR1cm4gdGhpczsKKwkJfSwKKworCQl0cmFjZTogZnVuY3Rpb24oKXsKKwkJCUtleWJvYXJkLnRyYWNlKHRoaXMpOworCQl9LAorCisJCWVhY2g6IGZ1bmN0aW9uKGZuKXsKKwkJCUtleWJvYXJkLmVhY2godGhpcywgZm4pOworCQl9LAorCisJCS8qCisJCQlQUklWQVRFIE1FVEhPRFMKKwkJKi8KKworCQlfaW5zdGFuY2VzOiBbXSwKKworCQlfZGlzYWJsZTogZnVuY3Rpb24oaW5zdGFuY2UpeworCQkJaWYgKHRoaXMuX2FjdGl2ZUtCID09IGluc3RhbmNlKSB0aGlzLl9hY3RpdmVLQiA9IG51bGw7CisJCX0sCisKKwkJX3NldHVwOiBmdW5jdGlvbigpeworCQkJdGhpcy5hZGRFdmVudHModGhpcy5vcHRpb25zLmV2ZW50cyk7CisJCQkvL2lmIHRoaXMgaXMgdGhlIHJvb3QgbWFuYWdlciwgbm90aGluZyBtYW5hZ2VzIGl0CisJCQlpZiAoS2V5Ym9hcmQubWFuYWdlciAmJiAhdGhpcy5fbWFuYWdlcikgS2V5Ym9hcmQubWFuYWdlci5tYW5hZ2UodGhpcyk7CisJCQlpZiAodGhpcy5vcHRpb25zLmFjdGl2ZSkgdGhpcy5hY3RpdmF0ZSgpOworCQkJZWxzZSB0aGlzLnJlbGlucXVpc2goKTsKKwkJfSwKKworCQlfaGFuZGxlOiBmdW5jdGlvbihldmVudCwgdHlwZSl7CisJCQkvL0tleWJvYXJkLnN0b3AoZXZlbnQpIHByZXZlbnRzIGtleSBwcm9wYWdhdGlvbgorCQkJaWYgKGV2ZW50LnByZXZlbnRLZXlib2FyZFByb3BhZ2F0aW9uKSByZXR1cm47CisKKwkJCXZhciBidWJibGVzID0gISF0aGlzLl9tYW5hZ2VyOworCQkJaWYgKGJ1YmJsZXMgJiYgdGhpcy5fYWN0aXZlS0IpeworCQkJCXRoaXMuX2FjdGl2ZUtCLl9oYW5kbGUoZXZlbnQsIHR5cGUpOworCQkJCWlmIChldmVudC5wcmV2ZW50S2V5Ym9hcmRQcm9wYWdhdGlvbikgcmV0dXJuOworCQkJfQorCQkJdGhpcy5maXJlRXZlbnQodHlwZSwgZXZlbnQpOworCisJCQlpZiAoIWJ1YmJsZXMgJiYgdGhpcy5fYWN0aXZlS0IpIHRoaXMuX2FjdGl2ZUtCLl9oYW5kbGUoZXZlbnQsIHR5cGUpOworCQl9CisKKwl9KTsKKworCXZhciBwYXJzZWQgPSB7fTsKKwl2YXIgbW9kaWZpZXJzID0gWydzaGlmdCcsICdjb250cm9sJywgJ2FsdCcsICdtZXRhJ107CisJdmFyIHJlZ2V4ID0gL14oPzpzaGlmdHxjb250cm9sfGN0cmx8YWx0fG1ldGEpJC87CisKKwlLZXlib2FyZC5wYXJzZSA9IGZ1bmN0aW9uKHR5cGUsIGV2ZW50VHlwZSwgaWdub3JlKXsKKwkJaWYgKGlnbm9yZSAmJiBpZ25vcmUuY29udGFpbnModHlwZS50b0xvd2VyQ2FzZSgpKSkgcmV0dXJuIHR5cGU7CisKKwkJdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eKGtleXVwfGtleWRvd24pOi8sIGZ1bmN0aW9uKCQwLCAkMSl7CisJCQlldmVudFR5cGUgPSAkMTsKKwkJCXJldHVybiAnJzsKKwkJfSk7CisKKwkJaWYgKCFwYXJzZWRbdHlwZV0peworCQkJdmFyIGtleSwgbW9kcyA9IHt9OworCQkJdHlwZS5zcGxpdCgnKycpLmVhY2goZnVuY3Rpb24ocGFydCl7CisJCQkJaWYgKHJlZ2V4LnRlc3QocGFydCkpIG1vZHNbcGFydF0gPSB0cnVlOworCQkJCWVsc2Uga2V5ID0gcGFydDsKKwkJCX0pOworCisJCQltb2RzLmNvbnRyb2wgPSBtb2RzLmNvbnRyb2wgfHwgbW9kcy5jdHJsOyAvLyBhbGxvdyBib3RoIGNvbnRyb2wgYW5kIGN0cmwKKworCQkJdmFyIGtleXMgPSBbXTsKKwkJCW1vZGlmaWVycy5lYWNoKGZ1bmN0aW9uKG1vZCl7CisJCQkJaWYgKG1vZHNbbW9kXSkga2V5cy5wdXNoKG1vZCk7CisJCQl9KTsKKworCQkJaWYgKGtleSkga2V5cy5wdXNoKGtleSk7CisJCQlwYXJzZWRbdHlwZV0gPSBrZXlzLmpvaW4oJysnKTsKKwkJfQorCisJCXJldHVybiBldmVudFR5cGUgKyAnOmtleXMoJyArIHBhcnNlZFt0eXBlXSArICcpJzsKKwl9OworCisJS2V5Ym9hcmQuZWFjaCA9IGZ1bmN0aW9uKGtleWJvYXJkLCBmbil7CisJCXZhciBjdXJyZW50ID0ga2V5Ym9hcmQgfHwgS2V5Ym9hcmQubWFuYWdlcjsKKwkJd2hpbGUgKGN1cnJlbnQpeworCQkJZm4ucnVuKGN1cnJlbnQpOworCQkJY3VycmVudCA9IGN1cnJlbnQuX2FjdGl2ZUtCOworCQl9CisJfTsKKworCUtleWJvYXJkLnN0b3AgPSBmdW5jdGlvbihldmVudCl7CisJCWV2ZW50LnByZXZlbnRLZXlib2FyZFByb3BhZ2F0aW9uID0gdHJ1ZTsKKwl9OworCisJS2V5Ym9hcmQubWFuYWdlciA9IG5ldyBLZXlib2FyZCh7CisJCWFjdGl2ZTogdHJ1ZQorCX0pOworCisJS2V5Ym9hcmQudHJhY2UgPSBmdW5jdGlvbihrZXlib2FyZCl7CisJCWtleWJvYXJkID0ga2V5Ym9hcmQgfHwgS2V5Ym9hcmQubWFuYWdlcjsKKwkJdmFyIGhhc0NvbnNvbGUgPSB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLmxvZzsKKwkJaWYgKGhhc0NvbnNvbGUpIGNvbnNvbGUubG9nKCd0aGUgZm9sbG93aW5nIGl0ZW1zIGhhdmUgZm9jdXM6ICcpOworCQlLZXlib2FyZC5lYWNoKGtleWJvYXJkLCBmdW5jdGlvbihjdXJyZW50KXsKKwkJCWlmIChoYXNDb25zb2xlKSBjb25zb2xlLmxvZyhkb2N1bWVudC5pZChjdXJyZW50LndpZGdldCkgfHwgY3VycmVudC53aWdldCB8fCBjdXJyZW50KTsKKwkJfSk7CisJfTsKKworCXZhciBoYW5kbGVyID0gZnVuY3Rpb24oZXZlbnQpeworCQl2YXIga2V5cyA9IFtdOworCQltb2RpZmllcnMuZWFjaChmdW5jdGlvbihtb2QpeworCQkJaWYgKGV2ZW50W21vZF0pIGtleXMucHVzaChtb2QpOworCQl9KTsKKworCQlpZiAoIXJlZ2V4LnRlc3QoZXZlbnQua2V5KSkga2V5cy5wdXNoKGV2ZW50LmtleSk7CisJCUtleWJvYXJkLm1hbmFnZXIuX2hhbmRsZShldmVudCwgZXZlbnQudHlwZSArICc6a2V5cygnICsga2V5cy5qb2luKCcrJykgKyAnKScpOworCX07CisKKwlkb2N1bWVudC5hZGRFdmVudHMoeworCQkna2V5dXAnOiBoYW5kbGVyLAorCQkna2V5ZG93bic6IGhhbmRsZXIKKwl9KTsKKworfSkoKTsKKworCisvKgorLS0tCisKK3NjcmlwdDogS2V5Ym9hcmQuRXh0cmFzLmpzCisKK25hbWU6IEtleWJvYXJkLkV4dHJhcworCitkZXNjcmlwdGlvbjogRW5oYW5jZXMgS2V5Ym9hcmQgYnkgYWRkaW5nIHRoZSBhYmlsaXR5IHRvIG5hbWUgYW5kIGRlc2NyaWJlIGtleWJvYXJkIHNob3J0Y3V0cywgYW5kIHRoZSBhYmlsaXR5IHRvIGdyYWIgc2hvcnRjdXRzIGJ5IG5hbWUgYW5kIGJpbmQgdGhlIHNob3J0Y3V0IHRvIGRpZmZlcmVudCBrZXlzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFBlcnJpbiBXZXN0cmljaAorCityZXF1aXJlczoKKyAgLSAvS2V5Ym9hcmQKKyAgLSAvTW9vVG9vbHMuTW9yZQorCitwcm92aWRlczogW0tleWJvYXJkLkV4dHJhc10KKworLi4uCisqLworS2V5Ym9hcmQucHJvdG90eXBlLm9wdGlvbnMubm9uUGFyc2VkRXZlbnRzLmNvbWJpbmUoWydyZWJvdW5kJywgJ29ucmVib3VuZCddKTsKKworS2V5Ym9hcmQuaW1wbGVtZW50KHsKKworCS8qCisJCXNob3J0Y3V0IHNob3VsZCBiZSBpbiB0aGUgZm9ybWF0IG9mOgorCQl7CisJCQkna2V5cyc6ICdzaGlmdCtzJywgLy8gdGhlIGRlZmF1bHQgdG8gYWRkIGFzIGFuIGV2ZW50LgorCQkJJ2Rlc2NyaXB0aW9uJzogJ2JsYWggYmxhaCBibGFoJywgLy8gYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgZnVuY3Rpb25hbGl0eS4KKwkJCSdoYW5kbGVyJzogZnVuY3Rpb24oKXt9IC8vIHRoZSBldmVudCBoYW5kbGVyIHRvIHJ1biB3aGVuIGtleXMgYXJlIHByZXNzZWQuCisJCX0KKwkqLworCWFkZFNob3J0Y3V0OiBmdW5jdGlvbihuYW1lLCBzaG9ydGN1dCl7CisJCXRoaXMuX3Nob3J0Y3V0cyA9IHRoaXMuX3Nob3J0Y3V0cyB8fCBbXTsKKwkJdGhpcy5fc2hvcnRjdXRJbmRleCA9IHRoaXMuX3Nob3J0Y3V0SW5kZXggfHwge307CisKKwkJc2hvcnRjdXQuZ2V0S2V5Ym9hcmQgPSBGdW5jdGlvbi5mcm9tKHRoaXMpOworCQlzaG9ydGN1dC5uYW1lID0gbmFtZTsKKwkJdGhpcy5fc2hvcnRjdXRJbmRleFtuYW1lXSA9IHNob3J0Y3V0OworCQl0aGlzLl9zaG9ydGN1dHMucHVzaChzaG9ydGN1dCk7CisJCWlmIChzaG9ydGN1dC5rZXlzKSB0aGlzLmFkZEV2ZW50KHNob3J0Y3V0LmtleXMsIHNob3J0Y3V0LmhhbmRsZXIpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJYWRkU2hvcnRjdXRzOiBmdW5jdGlvbihvYmopeworCQlmb3IgKHZhciBuYW1lIGluIG9iaikgdGhpcy5hZGRTaG9ydGN1dChuYW1lLCBvYmpbbmFtZV0pOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVtb3ZlU2hvcnRjdXQ6IGZ1bmN0aW9uKG5hbWUpeworCQl2YXIgc2hvcnRjdXQgPSB0aGlzLmdldFNob3J0Y3V0KG5hbWUpOworCQlpZiAoc2hvcnRjdXQgJiYgc2hvcnRjdXQua2V5cyl7CisJCQl0aGlzLnJlbW92ZUV2ZW50KHNob3J0Y3V0LmtleXMsIHNob3J0Y3V0LmhhbmRsZXIpOworCQkJZGVsZXRlIHRoaXMuX3Nob3J0Y3V0SW5kZXhbbmFtZV07CisJCQl0aGlzLl9zaG9ydGN1dHMuZXJhc2Uoc2hvcnRjdXQpOworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwlyZW1vdmVTaG9ydGN1dHM6IGZ1bmN0aW9uKG5hbWVzKXsKKwkJbmFtZXMuZWFjaCh0aGlzLnJlbW92ZVNob3J0Y3V0LCB0aGlzKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWdldFNob3J0Y3V0czogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuX3Nob3J0Y3V0cyB8fCBbXTsKKwl9LAorCisJZ2V0U2hvcnRjdXQ6IGZ1bmN0aW9uKG5hbWUpeworCQlyZXR1cm4gKHRoaXMuX3Nob3J0Y3V0SW5kZXggfHwge30pW25hbWVdOworCX0KKworfSk7CisKK0tleWJvYXJkLnJlYmluZCA9IGZ1bmN0aW9uKG5ld0tleXMsIHNob3J0Y3V0cyl7CisJQXJyYXkuZnJvbShzaG9ydGN1dHMpLmVhY2goZnVuY3Rpb24oc2hvcnRjdXQpeworCQlzaG9ydGN1dC5nZXRLZXlib2FyZCgpLnJlbW92ZUV2ZW50KHNob3J0Y3V0LmtleXMsIHNob3J0Y3V0LmhhbmRsZXIpOworCQlzaG9ydGN1dC5nZXRLZXlib2FyZCgpLmFkZEV2ZW50KG5ld0tleXMsIHNob3J0Y3V0LmhhbmRsZXIpOworCQlzaG9ydGN1dC5rZXlzID0gbmV3S2V5czsKKwkJc2hvcnRjdXQuZ2V0S2V5Ym9hcmQoKS5maXJlRXZlbnQoJ3JlYm91bmQnKTsKKwl9KTsKK307CisKKworS2V5Ym9hcmQuZ2V0QWN0aXZlU2hvcnRjdXRzID0gZnVuY3Rpb24oa2V5Ym9hcmQpeworCXZhciBhY3RpdmVLQlMgPSBbXSwgYWN0aXZlU0NTID0gW107CisJS2V5Ym9hcmQuZWFjaChrZXlib2FyZCwgW10ucHVzaC5iaW5kKGFjdGl2ZUtCUykpOworCWFjdGl2ZUtCUy5lYWNoKGZ1bmN0aW9uKGtiKXsgYWN0aXZlU0NTLmV4dGVuZChrYi5nZXRTaG9ydGN1dHMoKSk7IH0pOworCXJldHVybiBhY3RpdmVTQ1M7Cit9OworCitLZXlib2FyZC5nZXRTaG9ydGN1dCA9IGZ1bmN0aW9uKG5hbWUsIGtleWJvYXJkLCBvcHRzKXsKKwlvcHRzID0gb3B0cyB8fCB7fTsKKwl2YXIgc2hvcnRjdXRzID0gb3B0cy5tYW55ID8gW10gOiBudWxsLAorCQlzZXQgPSBvcHRzLm1hbnkgPyBmdW5jdGlvbihrYil7CisJCQkJdmFyIHNob3J0Y3V0ID0ga2IuZ2V0U2hvcnRjdXQobmFtZSk7CisJCQkJaWYgKHNob3J0Y3V0KSBzaG9ydGN1dHMucHVzaChzaG9ydGN1dCk7CisJCQl9IDogZnVuY3Rpb24oa2IpeworCQkJCWlmICghc2hvcnRjdXRzKSBzaG9ydGN1dHMgPSBrYi5nZXRTaG9ydGN1dChuYW1lKTsKKwkJCX07CisJS2V5Ym9hcmQuZWFjaChrZXlib2FyZCwgc2V0KTsKKwlyZXR1cm4gc2hvcnRjdXRzOworfTsKKworS2V5Ym9hcmQuZ2V0U2hvcnRjdXRzID0gZnVuY3Rpb24obmFtZSwga2V5Ym9hcmQpeworCXJldHVybiBLZXlib2FyZC5nZXRTaG9ydGN1dChuYW1lLCBrZXlib2FyZCwgeyBtYW55OiB0cnVlIH0pOworfTsKKworCisvKgorLS0tCisKK3NjcmlwdDogSHRtbFRhYmxlLlNlbGVjdC5qcworCituYW1lOiBIdG1sVGFibGUuU2VsZWN0CisKK2Rlc2NyaXB0aW9uOiBCdWlsZHMgYSBzdHJpcHksIHNvcnRhYmxlIHRhYmxlIHdpdGggbWV0aG9kcyB0byBhZGQgcm93cy4gUm93cyBjYW4gYmUgc2VsZWN0ZWQgd2l0aCB0aGUgbW91c2Ugb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBIYXJhbGQgS2lyc2NobmVyCisgIC0gQWFyb24gTmV3dG9uCisKK3JlcXVpcmVzOgorICAtIC9LZXlib2FyZAorICAtIC9LZXlib2FyZC5FeHRyYXMKKyAgLSAvSHRtbFRhYmxlCisgIC0gL0NsYXNzLnJlZmFjdG9yCisgIC0gL0VsZW1lbnQuRGVsZWdhdGlvbgorICAtIC9FbGVtZW50LlNob3J0Y3V0cworCitwcm92aWRlczogW0h0bWxUYWJsZS5TZWxlY3RdCisKKy4uLgorKi8KKworSHRtbFRhYmxlID0gQ2xhc3MucmVmYWN0b3IoSHRtbFRhYmxlLCB7CisKKwlvcHRpb25zOiB7CisJCS8qb25Sb3dGb2N1czogZnVuY3Rpb24oKXt9LAorCQlvblJvd1VuZm9jdXM6IGZ1bmN0aW9uKCl7fSwqLworCQl1c2VLZXlib2FyZDogdHJ1ZSwKKwkJY2xhc3NSb3dTZWxlY3RlZDogJ3RhYmxlLXRyLXNlbGVjdGVkJywKKwkJY2xhc3NSb3dIb3ZlcmVkOiAndGFibGUtdHItaG92ZXJlZCcsCisJCWNsYXNzU2VsZWN0YWJsZTogJ3RhYmxlLXNlbGVjdGFibGUnLAorCQlzaGlmdEZvck11bHRpU2VsZWN0OiB0cnVlLAorCQlhbGxvd011bHRpU2VsZWN0OiB0cnVlLAorCQlzZWxlY3RhYmxlOiBmYWxzZQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbigpeworCQl0aGlzLnByZXZpb3VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisJCWlmICh0aGlzLm9jY2x1ZGVkKSByZXR1cm4gdGhpcy5vY2NsdWRlZDsKKworCQl0aGlzLnNlbGVjdGVkUm93cyA9IG5ldyBFbGVtZW50cygpOworCisJCXRoaXMuYm91bmQgPSB7CisJCQltb3VzZWxlYXZlOiB0aGlzLm1vdXNlbGVhdmUuYmluZCh0aGlzKSwKKwkJCWNsaWNrUm93OiB0aGlzLmNsaWNrUm93LmJpbmQodGhpcyksCisJCQlhY3RpdmF0ZUtleWJvYXJkOiBmdW5jdGlvbigpIHsKKwkJCQlpZiAodGhpcy5rZXlib2FyZCAmJiB0aGlzLnNlbGVjdEVuYWJsZWQpIHRoaXMua2V5Ym9hcmQuYWN0aXZhdGUoKTsKKwkJCX0uYmluZCh0aGlzKQorCQl9OworCisJCWlmICh0aGlzLm9wdGlvbnMuc2VsZWN0YWJsZSkgdGhpcy5lbmFibGVTZWxlY3QoKTsKKwl9LAorCisJZW1wdHk6IGZ1bmN0aW9uKCl7CisJCXRoaXMuc2VsZWN0Tm9uZSgpOworCQlyZXR1cm4gdGhpcy5wcmV2aW91cygpOworCX0sCisKKwllbmFibGVTZWxlY3Q6IGZ1bmN0aW9uKCl7CisJCXRoaXMuc2VsZWN0RW5hYmxlZCA9IHRydWU7CisJCXRoaXMuYXR0YWNoU2VsZWN0cygpOworCQl0aGlzLmVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmNsYXNzU2VsZWN0YWJsZSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlkaXNhYmxlU2VsZWN0OiBmdW5jdGlvbigpeworCQl0aGlzLnNlbGVjdEVuYWJsZWQgPSBmYWxzZTsKKwkJdGhpcy5hdHRhY2hTZWxlY3RzKGZhbHNlKTsKKwkJdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5jbGFzc1NlbGVjdGFibGUpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcHVzaDogZnVuY3Rpb24oKXsKKwkJdmFyIHJldCA9IHRoaXMucHJldmlvdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKwkJdGhpcy51cGRhdGVTZWxlY3RzKCk7CisJCXJldHVybiByZXQ7CisJfSwKKworCWlzU2VsZWN0ZWQ6IGZ1bmN0aW9uKHJvdyl7CisJCXJldHVybiB0aGlzLnNlbGVjdGVkUm93cy5jb250YWlucyhyb3cpOworCX0sCisKKwl0b2dnbGVSb3c6IGZ1bmN0aW9uKHJvdyl7CisJCXJldHVybiB0aGlzWyh0aGlzLmlzU2VsZWN0ZWQocm93KSA/ICdkZScgOiAnJykgKyAnc2VsZWN0Um93J10ocm93KTsKKwl9LAorCisJc2VsZWN0Um93OiBmdW5jdGlvbihyb3csIF9ub2NoZWNrKXsKKwkJLy9wcml2YXRlIHZhcmlhYmxlIF9ub2NoZWNrOiBib29sZWFuIHdoZXRoZXIgb3Igbm90IHRvIGNvbmZpcm0gdGhlIHJvdyBpcyBpbiB0aGUgdGFibGUgYm9keQorCQkvL2FkZGVkIGhlcmUgZm9yIG9wdGltaXphdGlvbiB3aGVuIHNlbGVjdGluZyByYW5nZXMKKwkJaWYgKHRoaXMuaXNTZWxlY3RlZChyb3cpIHx8ICghX25vY2hlY2sgJiYgIXRoaXMuYm9keS5nZXRDaGlsZHJlbigpLmNvbnRhaW5zKHJvdykpKSByZXR1cm47CisJCWlmICghdGhpcy5vcHRpb25zLmFsbG93TXVsdGlTZWxlY3QpIHRoaXMuc2VsZWN0Tm9uZSgpOworCisJCWlmICghdGhpcy5pc1NlbGVjdGVkKHJvdykpeworCQkJdGhpcy5zZWxlY3RlZFJvd3MucHVzaChyb3cpOworCQkJcm93LmFkZENsYXNzKHRoaXMub3B0aW9ucy5jbGFzc1Jvd1NlbGVjdGVkKTsKKwkJCXRoaXMuZmlyZUV2ZW50KCdyb3dGb2N1cycsIFtyb3csIHRoaXMuc2VsZWN0ZWRSb3dzXSk7CisJCQl0aGlzLmZpcmVFdmVudCgnc3RhdGVDaGFuZ2VkJyk7CisJCX0KKworCQl0aGlzLmZvY3VzZWQgPSByb3c7CisJCWRvY3VtZW50LmNsZWFyU2VsZWN0aW9uKCk7CisKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWdldFNlbGVjdGVkOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5zZWxlY3RlZFJvd3M7CisJfSwKKworCXNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7CisJCXZhciBwcmV2aW91c1NlcmlhbGl6YXRpb24gPSB0aGlzLnByZXZpb3VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwge307CisJCWlmICh0aGlzLm9wdGlvbnMuc2VsZWN0YWJsZSkgeworCQkJcHJldmlvdXNTZXJpYWxpemF0aW9uLnNlbGVjdGVkUm93cyA9IHRoaXMuc2VsZWN0ZWRSb3dzLm1hcChmdW5jdGlvbihyb3cpIHsKKwkJCQlyZXR1cm4gQXJyYXkuaW5kZXhPZih0aGlzLmJvZHkucm93cywgcm93KTsKKwkJCX0uYmluZCh0aGlzKSk7CisJCX0KKwkJcmV0dXJuIHByZXZpb3VzU2VyaWFsaXphdGlvbjsKKwl9LAorCisJcmVzdG9yZTogZnVuY3Rpb24odGFibGVTdGF0ZSkgeworCQlpZih0aGlzLm9wdGlvbnMuc2VsZWN0YWJsZSAmJiB0YWJsZVN0YXRlLnNlbGVjdGVkUm93cykgeworCQkJdGFibGVTdGF0ZS5zZWxlY3RlZFJvd3MuZWFjaChmdW5jdGlvbihpbmRleCkgeworCQkJCXRoaXMuc2VsZWN0Um93KHRoaXMuYm9keS5yb3dzW2luZGV4XSk7CisJCQl9LmJpbmQodGhpcykpOworCQl9CisJCXRoaXMucHJldmlvdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKwl9LAorCisJZGVzZWxlY3RSb3c6IGZ1bmN0aW9uKHJvdywgX25vY2hlY2speworCQlpZiAoIXRoaXMuaXNTZWxlY3RlZChyb3cpIHx8ICghX25vY2hlY2sgJiYgIXRoaXMuYm9keS5nZXRDaGlsZHJlbigpLmNvbnRhaW5zKHJvdykpKSByZXR1cm47CisKKwkJdGhpcy5zZWxlY3RlZFJvd3MgPSBuZXcgRWxlbWVudHMoQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUm93cykuZXJhc2Uocm93KSk7CisJCXJvdy5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuY2xhc3NSb3dTZWxlY3RlZCk7CisJCXRoaXMuZmlyZUV2ZW50KCdyb3dVbmZvY3VzJywgW3JvdywgdGhpcy5zZWxlY3RlZFJvd3NdKTsKKwkJdGhpcy5maXJlRXZlbnQoJ3N0YXRlQ2hhbmdlZCcpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJc2VsZWN0QWxsOiBmdW5jdGlvbihzZWxlY3ROb25lKXsKKwkJaWYgKCFzZWxlY3ROb25lICYmICF0aGlzLm9wdGlvbnMuYWxsb3dNdWx0aVNlbGVjdCkgcmV0dXJuOworCQl0aGlzLnNlbGVjdFJhbmdlKDAsIHRoaXMuYm9keS5yb3dzLmxlbmd0aCwgc2VsZWN0Tm9uZSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlzZWxlY3ROb25lOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5zZWxlY3RBbGwodHJ1ZSk7CisJfSwKKworCXNlbGVjdFJhbmdlOiBmdW5jdGlvbihzdGFydFJvdywgZW5kUm93LCBfZGVzZWxlY3QpeworCQlpZiAoIXRoaXMub3B0aW9ucy5hbGxvd011bHRpU2VsZWN0ICYmICFfZGVzZWxlY3QpIHJldHVybjsKKwkJdmFyIG1ldGhvZCA9IF9kZXNlbGVjdCA/ICdkZXNlbGVjdFJvdycgOiAnc2VsZWN0Um93JywKKwkJCXJvd3MgPSBBcnJheS5jbG9uZSh0aGlzLmJvZHkucm93cyk7CisKKwkJaWYgKHR5cGVPZihzdGFydFJvdykgPT0gJ2VsZW1lbnQnKSBzdGFydFJvdyA9IHJvd3MuaW5kZXhPZihzdGFydFJvdyk7CisJCWlmICh0eXBlT2YoZW5kUm93KSA9PSAnZWxlbWVudCcpIGVuZFJvdyA9IHJvd3MuaW5kZXhPZihlbmRSb3cpOworCQllbmRSb3cgPSBlbmRSb3cgPCByb3dzLmxlbmd0aCAtIDEgPyBlbmRSb3cgOiByb3dzLmxlbmd0aCAtIDE7CisKKwkJaWYgKGVuZFJvdyA8IHN0YXJ0Um93KXsKKwkJCXZhciB0bXAgPSBzdGFydFJvdzsKKwkJCXN0YXJ0Um93ID0gZW5kUm93OworCQkJZW5kUm93ID0gdG1wOworCQl9CisKKwkJZm9yICh2YXIgaSA9IHN0YXJ0Um93OyBpIDw9IGVuZFJvdzsgaSsrKSB0aGlzW21ldGhvZF0ocm93c1tpXSwgdHJ1ZSk7CisKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWRlc2VsZWN0UmFuZ2U6IGZ1bmN0aW9uKHN0YXJ0Um93LCBlbmRSb3cpeworCQl0aGlzLnNlbGVjdFJhbmdlKHN0YXJ0Um93LCBlbmRSb3csIHRydWUpOworCX0sCisKKwlnZXRTZWxlY3RlZDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzOworCX0sCisKKy8qCisJUHJpdmF0ZSBtZXRob2RzOgorKi8KKworCWVudGVyUm93OiBmdW5jdGlvbihyb3cpeworCQlpZiAodGhpcy5ob3ZlcmVkKSB0aGlzLmhvdmVyZWQgPSB0aGlzLmxlYXZlUm93KHRoaXMuaG92ZXJlZCk7CisJCXRoaXMuaG92ZXJlZCA9IHJvdy5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuY2xhc3NSb3dIb3ZlcmVkKTsKKwl9LAorCisJbGVhdmVSb3c6IGZ1bmN0aW9uKHJvdyl7CisJCXJvdy5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuY2xhc3NSb3dIb3ZlcmVkKTsKKwl9LAorCisJdXBkYXRlU2VsZWN0czogZnVuY3Rpb24oKXsKKwkJQXJyYXkuZWFjaCh0aGlzLmJvZHkucm93cywgZnVuY3Rpb24ocm93KXsKKwkJCXZhciBiaW5kZXJzID0gcm93LnJldHJpZXZlKCdiaW5kZXJzJyk7CisJCQlpZiAoIWJpbmRlcnMgJiYgIXRoaXMuc2VsZWN0RW5hYmxlZCkgcmV0dXJuOworCQkJaWYgKCFiaW5kZXJzKXsKKwkJCQliaW5kZXJzID0geworCQkJCQltb3VzZWVudGVyOiB0aGlzLmVudGVyUm93LnBhc3MoW3Jvd10sIHRoaXMpLAorCQkJCQltb3VzZWxlYXZlOiB0aGlzLmxlYXZlUm93LnBhc3MoW3Jvd10sIHRoaXMpCisJCQkJfTsKKwkJCQlyb3cuc3RvcmUoJ2JpbmRlcnMnLCBiaW5kZXJzKTsKKwkJCX0KKwkJCWlmICh0aGlzLnNlbGVjdEVuYWJsZWQpIHJvdy5hZGRFdmVudHMoYmluZGVycyk7CisJCQllbHNlIHJvdy5yZW1vdmVFdmVudHMoYmluZGVycyk7CisJCX0sIHRoaXMpOworCX0sCisKKwlzaGlmdEZvY3VzOiBmdW5jdGlvbihvZmZzZXQsIGV2ZW50KXsKKwkJaWYgKCF0aGlzLmZvY3VzZWQpIHJldHVybiB0aGlzLnNlbGVjdFJvdyh0aGlzLmJvZHkucm93c1swXSwgZXZlbnQpOworCQl2YXIgdG8gPSB0aGlzLmdldFJvd0J5T2Zmc2V0KG9mZnNldCk7CisJCWlmICh0byA9PT0gbnVsbCB8fCB0aGlzLmZvY3VzZWQgPT0gdGhpcy5ib2R5LnJvd3NbdG9dKSByZXR1cm4gdGhpczsKKwkJdGhpcy50b2dnbGVSb3codGhpcy5ib2R5LnJvd3NbdG9dLCBldmVudCk7CisJfSwKKworCWNsaWNrUm93OiBmdW5jdGlvbihldmVudCwgcm93KXsKKwkJdmFyIHNlbGVjdGluZyA9IChldmVudC5zaGlmdCB8fCBldmVudC5tZXRhIHx8IGV2ZW50LmNvbnRyb2wpICYmIHRoaXMub3B0aW9ucy5zaGlmdEZvck11bHRpU2VsZWN0OworCQlpZiAoIXNlbGVjdGluZyAmJiAhKGV2ZW50LnJpZ2h0Q2xpY2sgJiYgdGhpcy5pc1NlbGVjdGVkKHJvdykgJiYgdGhpcy5vcHRpb25zLmFsbG93TXVsdGlTZWxlY3QpKSB0aGlzLnNlbGVjdE5vbmUoKTsKKworCQlpZiAoZXZlbnQucmlnaHRDbGljaykgdGhpcy5zZWxlY3RSb3cocm93KTsKKwkJZWxzZSB0aGlzLnRvZ2dsZVJvdyhyb3cpOworCisJCWlmIChldmVudC5zaGlmdCl7CisJCQl0aGlzLnNlbGVjdFJhbmdlKHRoaXMucmFuZ2VTdGFydCB8fCB0aGlzLmJvZHkucm93c1swXSwgcm93LCB0aGlzLnJhbmdlU3RhcnQgPyAhdGhpcy5pc1NlbGVjdGVkKHJvdykgOiB0cnVlKTsKKwkJCXRoaXMuZm9jdXNlZCA9IHJvdzsKKwkJfQorCQl0aGlzLnJhbmdlU3RhcnQgPSByb3c7CisJfSwKKworCWdldFJvd0J5T2Zmc2V0OiBmdW5jdGlvbihvZmZzZXQpeworCQlpZiAoIXRoaXMuZm9jdXNlZCkgcmV0dXJuIDA7CisJCXZhciByb3dzID0gQXJyYXkuY2xvbmUodGhpcy5ib2R5LnJvd3MpLAorCQkJaW5kZXggPSByb3dzLmluZGV4T2YodGhpcy5mb2N1c2VkKSArIG9mZnNldDsKKworCQlpZiAoaW5kZXggPCAwKSBpbmRleCA9IG51bGw7CisJCWlmIChpbmRleCA+PSByb3dzLmxlbmd0aCkgaW5kZXggPSBudWxsOworCisJCXJldHVybiBpbmRleDsKKwl9LAorCisJYXR0YWNoU2VsZWN0czogZnVuY3Rpb24oYXR0YWNoKXsKKwkJYXR0YWNoID0gYXR0YWNoICE9IG51bGwgPyBhdHRhY2ggOiB0cnVlOworCisJCXZhciBtZXRob2QgPSBhdHRhY2ggPyAnYWRkRXZlbnRzJyA6ICdyZW1vdmVFdmVudHMnOworCQl0aGlzLmVsZW1lbnRbbWV0aG9kXSh7CisJCQltb3VzZWxlYXZlOiB0aGlzLmJvdW5kLm1vdXNlbGVhdmUsCisJCQljbGljazogdGhpcy5ib3VuZC5hY3RpdmF0ZUtleWJvYXJkCisJCX0pOworCisJCXRoaXMuYm9keVttZXRob2RdKHsKKwkJCSdjbGljazpyZWxheSh0ciknOiB0aGlzLmJvdW5kLmNsaWNrUm93LAorCQkJJ2NvbnRleHRtZW51OnJlbGF5KHRyKSc6IHRoaXMuYm91bmQuY2xpY2tSb3cKKwkJfSk7CisKKwkJaWYgKHRoaXMub3B0aW9ucy51c2VLZXlib2FyZCB8fCB0aGlzLmtleWJvYXJkKXsKKwkJCWlmICghdGhpcy5rZXlib2FyZCkgdGhpcy5rZXlib2FyZCA9IG5ldyBLZXlib2FyZCgpOworCQkJaWYgKCF0aGlzLnNlbGVjdEtleXNEZWZpbmVkKSB7CisJCQkJdGhpcy5zZWxlY3RLZXlzRGVmaW5lZCA9IHRydWU7CisJCQkJdmFyIHRpbWVyLCBoZWxkOworCisJCQkJdmFyIG1vdmUgPSBmdW5jdGlvbihvZmZzZXQpeworCQkJCQl2YXIgbW92ZXIgPSBmdW5jdGlvbihlKXsKKwkJCQkJCWNsZWFyVGltZW91dCh0aW1lcik7CisJCQkJCQllLnByZXZlbnREZWZhdWx0KCk7CisKKwkJCQkJCXZhciB0byA9IHRoaXMuYm9keS5yb3dzW3RoaXMuZ2V0Um93QnlPZmZzZXQob2Zmc2V0KV07CisJCQkJCQlpZiAoZS5zaGlmdCAmJiB0byAmJiB0aGlzLmlzU2VsZWN0ZWQodG8pKXsKKwkJCQkJCQl0aGlzLmRlc2VsZWN0Um93KHRoaXMuZm9jdXNlZCk7CisJCQkJCQkJdGhpcy5mb2N1c2VkID0gdG87CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCWlmICh0byAmJiAoIXRoaXMub3B0aW9ucy5hbGxvd011bHRpU2VsZWN0IHx8ICFlLnNoaWZ0KSl7CisJCQkJCQkJCXRoaXMuc2VsZWN0Tm9uZSgpOworCQkJCQkJCX0KKwkJCQkJCQl0aGlzLnNoaWZ0Rm9jdXMob2Zmc2V0LCBlKTsKKwkJCQkJCX0KKworCQkJCQkJaWYgKGhlbGQpeworCQkJCQkJCXRpbWVyID0gbW92ZXIuZGVsYXkoMTAwLCB0aGlzLCBlKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJdGltZXIgPSAoZnVuY3Rpb24oKXsKKwkJCQkJCQkJaGVsZCA9IHRydWU7CisJCQkJCQkJCW1vdmVyKGUpOworCQkJCQkJCX0pLmRlbGF5KDQwMCk7CisJCQkJCQl9CisJCQkJCX0uYmluZCh0aGlzKTsKKwkJCQkJcmV0dXJuIG1vdmVyOworCQkJCX0uYmluZCh0aGlzKTsKKworCQkJCXZhciBjbGVhciA9IGZ1bmN0aW9uKCl7CisJCQkJCWNsZWFyVGltZW91dCh0aW1lcik7CisJCQkJCWhlbGQgPSBmYWxzZTsKKwkJCQl9OworCisJCQkJdGhpcy5rZXlib2FyZC5hZGRFdmVudHMoeworCQkJCQkna2V5ZG93bjpzaGlmdCt1cCc6IG1vdmUoLTEpLAorCQkJCQkna2V5ZG93bjpzaGlmdCtkb3duJzogbW92ZSgxKSwKKwkJCQkJJ2tleXVwOnNoaWZ0K3VwJzogY2xlYXIsCisJCQkJCSdrZXl1cDpzaGlmdCtkb3duJzogY2xlYXIsCisJCQkJCSdrZXl1cDp1cCc6IGNsZWFyLAorCQkJCQkna2V5dXA6ZG93bic6IGNsZWFyCisJCQkJfSk7CisKKwkJCQl2YXIgc2hpZnRIaW50ID0gJyc7CisJCQkJaWYgKHRoaXMub3B0aW9ucy5hbGxvd011bHRpU2VsZWN0ICYmIHRoaXMub3B0aW9ucy5zaGlmdEZvck11bHRpU2VsZWN0ICYmIHRoaXMub3B0aW9ucy51c2VLZXlib2FyZCl7CisJCQkJCXNoaWZ0SGludCA9ICIgKFNoaWZ0IG11bHRpLXNlbGVjdHMpLiI7CisJCQkJfQorCisJCQkJdGhpcy5rZXlib2FyZC5hZGRTaG9ydGN1dHMoeworCQkJCQknU2VsZWN0IFByZXZpb3VzIFJvdyc6IHsKKwkJCQkJCWtleXM6ICd1cCcsCisJCQkJCQlzaG9ydGN1dDogJ3VwIGFycm93JywKKwkJCQkJCWhhbmRsZXI6IG1vdmUoLTEpLAorCQkJCQkJZGVzY3JpcHRpb246ICdTZWxlY3QgdGhlIHByZXZpb3VzIHJvdyBpbiB0aGUgdGFibGUuJyArIHNoaWZ0SGludAorCQkJCQl9LAorCQkJCQknU2VsZWN0IE5leHQgUm93JzogeworCQkJCQkJa2V5czogJ2Rvd24nLAorCQkJCQkJc2hvcnRjdXQ6ICdkb3duIGFycm93JywKKwkJCQkJCWhhbmRsZXI6IG1vdmUoMSksCisJCQkJCQlkZXNjcmlwdGlvbjogJ1NlbGVjdCB0aGUgbmV4dCByb3cgaW4gdGhlIHRhYmxlLicgKyBzaGlmdEhpbnQKKwkJCQkJfQorCQkJCX0pOworCisJCQl9CisJCQl0aGlzLmtleWJvYXJkW2F0dGFjaCA/ICdhY3RpdmF0ZScgOiAnZGVhY3RpdmF0ZSddKCk7CisJCX0KKwkJdGhpcy51cGRhdGVTZWxlY3RzKCk7CisJfSwKKworCW1vdXNlbGVhdmU6IGZ1bmN0aW9uKCl7CisJCWlmICh0aGlzLmhvdmVyZWQpIHRoaXMubGVhdmVSb3codGhpcy5ob3ZlcmVkKTsKKwl9CisKK30pOworCisKKy8qCistLS0KKworc2NyaXB0OiBTY3JvbGxlci5qcworCituYW1lOiBTY3JvbGxlcgorCitkZXNjcmlwdGlvbjogQ2xhc3Mgd2hpY2ggc2Nyb2xscyB0aGUgY29udGVudHMgb2YgYW55IEVsZW1lbnQgKGluY2x1ZGluZyB0aGUgd2luZG93KSB3aGVuIHRoZSBtb3VzZSByZWFjaGVzIHRoZSBFbGVtZW50J3MgYm91bmRhcmllcy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBWYWxlcmlvIFByb2lldHRpCisKK3JlcXVpcmVzOgorICAtIENvcmUvRXZlbnRzCisgIC0gQ29yZS9PcHRpb25zCisgIC0gQ29yZS9FbGVtZW50LkV2ZW50CisgIC0gQ29yZS9FbGVtZW50LkRpbWVuc2lvbnMKKyAgLSBNb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbU2Nyb2xsZXJdCisKKy4uLgorKi8KKwordmFyIFNjcm9sbGVyID0gbmV3IENsYXNzKHsKKworCUltcGxlbWVudHM6IFtFdmVudHMsIE9wdGlvbnNdLAorCisJb3B0aW9uczogeworCQlhcmVhOiAyMCwKKwkJdmVsb2NpdHk6IDEsCisJCW9uQ2hhbmdlOiBmdW5jdGlvbih4LCB5KXsKKwkJCXRoaXMuZWxlbWVudC5zY3JvbGxUbyh4LCB5KTsKKwkJfSwKKwkJZnBzOiA1MAorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXsKKwkJdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpOworCQl0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5pZChlbGVtZW50KTsKKwkJdGhpcy5kb2NCb2R5ID0gZG9jdW1lbnQuaWQodGhpcy5lbGVtZW50LmdldERvY3VtZW50KCkuYm9keSk7CisJCXRoaXMubGlzdGVuZXIgPSAodHlwZU9mKHRoaXMuZWxlbWVudCkgIT0gJ2VsZW1lbnQnKSA/IHRoaXMuZG9jQm9keSA6IHRoaXMuZWxlbWVudDsKKwkJdGhpcy50aW1lciA9IG51bGw7CisJCXRoaXMuYm91bmQgPSB7CisJCQlhdHRhY2g6IHRoaXMuYXR0YWNoLmJpbmQodGhpcyksCisJCQlkZXRhY2g6IHRoaXMuZGV0YWNoLmJpbmQodGhpcyksCisJCQlnZXRDb29yZHM6IHRoaXMuZ2V0Q29vcmRzLmJpbmQodGhpcykKKwkJfTsKKwl9LAorCisJc3RhcnQ6IGZ1bmN0aW9uKCl7CisJCXRoaXMubGlzdGVuZXIuYWRkRXZlbnRzKHsKKwkJCW1vdXNlb3ZlcjogdGhpcy5ib3VuZC5hdHRhY2gsCisJCQltb3VzZWxlYXZlOiB0aGlzLmJvdW5kLmRldGFjaAorCQl9KTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXN0b3A6IGZ1bmN0aW9uKCl7CisJCXRoaXMubGlzdGVuZXIucmVtb3ZlRXZlbnRzKHsKKwkJCW1vdXNlb3ZlcjogdGhpcy5ib3VuZC5hdHRhY2gsCisJCQltb3VzZWxlYXZlOiB0aGlzLmJvdW5kLmRldGFjaAorCQl9KTsKKwkJdGhpcy5kZXRhY2goKTsKKwkJdGhpcy50aW1lciA9IGNsZWFySW50ZXJ2YWwodGhpcy50aW1lcik7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlhdHRhY2g6IGZ1bmN0aW9uKCl7CisJCXRoaXMubGlzdGVuZXIuYWRkRXZlbnQoJ21vdXNlbW92ZScsIHRoaXMuYm91bmQuZ2V0Q29vcmRzKTsKKwl9LAorCisJZGV0YWNoOiBmdW5jdGlvbigpeworCQl0aGlzLmxpc3RlbmVyLnJlbW92ZUV2ZW50KCdtb3VzZW1vdmUnLCB0aGlzLmJvdW5kLmdldENvb3Jkcyk7CisJCXRoaXMudGltZXIgPSBjbGVhckludGVydmFsKHRoaXMudGltZXIpOworCX0sCisKKwlnZXRDb29yZHM6IGZ1bmN0aW9uKGV2ZW50KXsKKwkJdGhpcy5wYWdlID0gKHRoaXMubGlzdGVuZXIuZ2V0KCd0YWcnKSA9PSAnYm9keScpID8gZXZlbnQuY2xpZW50IDogZXZlbnQucGFnZTsKKwkJaWYgKCF0aGlzLnRpbWVyKSB0aGlzLnRpbWVyID0gdGhpcy5zY3JvbGwucGVyaW9kaWNhbChNYXRoLnJvdW5kKDEwMDAgLyB0aGlzLm9wdGlvbnMuZnBzKSwgdGhpcyk7CisJfSwKKworCXNjcm9sbDogZnVuY3Rpb24oKXsKKwkJdmFyIHNpemUgPSB0aGlzLmVsZW1lbnQuZ2V0U2l6ZSgpLAorCQkJc2Nyb2xsID0gdGhpcy5lbGVtZW50LmdldFNjcm9sbCgpLAorCQkJcG9zID0gdGhpcy5lbGVtZW50ICE9IHRoaXMuZG9jQm9keSA/IHRoaXMuZWxlbWVudC5nZXRPZmZzZXRzKCkgOiB7eDogMCwgeTowfSwKKwkJCXNjcm9sbFNpemUgPSB0aGlzLmVsZW1lbnQuZ2V0U2Nyb2xsU2l6ZSgpLAorCQkJY2hhbmdlID0ge3g6IDAsIHk6IDB9LAorCQkJdG9wID0gdGhpcy5vcHRpb25zLmFyZWEudG9wIHx8IHRoaXMub3B0aW9ucy5hcmVhLAorCQkJYm90dG9tID0gdGhpcy5vcHRpb25zLmFyZWEuYm90dG9tIHx8IHRoaXMub3B0aW9ucy5hcmVhOworCQlmb3IgKHZhciB6IGluIHRoaXMucGFnZSl7CisJCQlpZiAodGhpcy5wYWdlW3pdIDwgKHRvcCArIHBvc1t6XSkgJiYgc2Nyb2xsW3pdICE9IDApeworCQkJCWNoYW5nZVt6XSA9ICh0aGlzLnBhZ2Vbel0gLSB0b3AgLSBwb3Nbel0pICogdGhpcy5vcHRpb25zLnZlbG9jaXR5OworCQkJfSBlbHNlIGlmICh0aGlzLnBhZ2Vbel0gKyBib3R0b20gPiAoc2l6ZVt6XSArIHBvc1t6XSkgJiYgc2Nyb2xsW3pdICsgc2l6ZVt6XSAhPSBzY3JvbGxTaXplW3pdKXsKKwkJCQljaGFuZ2Vbel0gPSAodGhpcy5wYWdlW3pdIC0gc2l6ZVt6XSArIGJvdHRvbSAtIHBvc1t6XSkgKiB0aGlzLm9wdGlvbnMudmVsb2NpdHk7CisJCQl9CisJCQljaGFuZ2Vbel0gPSBjaGFuZ2Vbel0ucm91bmQoKTsKKwkJfQorCQlpZiAoY2hhbmdlLnkgfHwgY2hhbmdlLngpIHRoaXMuZmlyZUV2ZW50KCdjaGFuZ2UnLCBbc2Nyb2xsLnggKyBjaGFuZ2UueCwgc2Nyb2xsLnkgKyBjaGFuZ2UueV0pOworCX0KKworfSk7CisKKworLyoKKy0tLQorCitzY3JpcHQ6IFRpcHMuanMKKworbmFtZTogVGlwcworCitkZXNjcmlwdGlvbjogQ2xhc3MgZm9yIGNyZWF0aW5nIG5pY2UgdGlwcyB0aGF0IGZvbGxvdyB0aGUgbW91c2UgY3Vyc29yIHdoZW4gaG92ZXJpbmcgYW4gZWxlbWVudC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBWYWxlcmlvIFByb2lldHRpCisgIC0gQ2hyaXN0b3BoIFBvamVyCisgIC0gTHVpcyBNZXJpbm8KKworcmVxdWlyZXM6CisgIC0gQ29yZS9PcHRpb25zCisgIC0gQ29yZS9FdmVudHMKKyAgLSBDb3JlL0VsZW1lbnQuRXZlbnQKKyAgLSBDb3JlL0VsZW1lbnQuU3R5bGUKKyAgLSBDb3JlL0VsZW1lbnQuRGltZW5zaW9ucworICAtIC9Nb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbVGlwc10KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIHJlYWQgPSBmdW5jdGlvbihvcHRpb24sIGVsZW1lbnQpeworCXJldHVybiAob3B0aW9uKSA/ICh0eXBlT2Yob3B0aW9uKSA9PSAnZnVuY3Rpb24nID8gb3B0aW9uKGVsZW1lbnQpIDogZWxlbWVudC5nZXQob3B0aW9uKSkgOiAnJzsKK307CisKK3RoaXMuVGlwcyA9IG5ldyBDbGFzcyh7CisKKwlJbXBsZW1lbnRzOiBbRXZlbnRzLCBPcHRpb25zXSwKKworCW9wdGlvbnM6IHsvKgorCQlvbkF0dGFjaDogZnVuY3Rpb24oZWxlbWVudCl7fSwKKwkJb25EZXRhY2g6IGZ1bmN0aW9uKGVsZW1lbnQpe30sCisJCW9uQm91bmQ6IGZ1bmN0aW9uKGNvb3Jkcyl7fSwqLworCQlvblNob3c6IGZ1bmN0aW9uKCl7CisJCQl0aGlzLnRpcC5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpOworCQl9LAorCQlvbkhpZGU6IGZ1bmN0aW9uKCl7CisJCQl0aGlzLnRpcC5zZXRTdHlsZSgnZGlzcGxheScsICdub25lJyk7CisJCX0sCisJCXRpdGxlOiAndGl0bGUnLAorCQl0ZXh0OiBmdW5jdGlvbihlbGVtZW50KXsKKwkJCXJldHVybiBlbGVtZW50LmdldCgncmVsJykgfHwgZWxlbWVudC5nZXQoJ2hyZWYnKTsKKwkJfSwKKwkJc2hvd0RlbGF5OiAxMDAsCisJCWhpZGVEZWxheTogMTAwLAorCQljbGFzc05hbWU6ICd0aXAtd3JhcCcsCisJCW9mZnNldDoge3g6IDE2LCB5OiAxNn0sCisJCXdpbmRvd1BhZGRpbmc6IHt4OjAsIHk6MH0sCisJCWZpeGVkOiBmYWxzZQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbigpeworCQl2YXIgcGFyYW1zID0gQXJyYXkubGluayhhcmd1bWVudHMsIHsKKwkJCW9wdGlvbnM6IFR5cGUuaXNPYmplY3QsCisJCQllbGVtZW50czogZnVuY3Rpb24ob2JqKXsKKwkJCQlyZXR1cm4gb2JqICE9IG51bGw7CisJCQl9CisJCX0pOworCQl0aGlzLnNldE9wdGlvbnMocGFyYW1zLm9wdGlvbnMpOworCQlpZiAocGFyYW1zLmVsZW1lbnRzKSB0aGlzLmF0dGFjaChwYXJhbXMuZWxlbWVudHMpOworCQl0aGlzLmNvbnRhaW5lciA9IG5ldyBFbGVtZW50KCdkaXYnLCB7J2NsYXNzJzogJ3RpcCd9KTsKKwl9LAorCisJdG9FbGVtZW50OiBmdW5jdGlvbigpeworCQlpZiAodGhpcy50aXApIHJldHVybiB0aGlzLnRpcDsKKworCQl0aGlzLnRpcCA9IG5ldyBFbGVtZW50KCdkaXYnLCB7CisJCQknY2xhc3MnOiB0aGlzLm9wdGlvbnMuY2xhc3NOYW1lLAorCQkJc3R5bGVzOiB7CisJCQkJcG9zaXRpb246ICdhYnNvbHV0ZScsCisJCQkJdG9wOiAwLAorCQkJCWxlZnQ6IDAKKwkJCX0KKwkJfSkuYWRvcHQoCisJCQluZXcgRWxlbWVudCgnZGl2JywgeydjbGFzcyc6ICd0aXAtdG9wJ30pLAorCQkJdGhpcy5jb250YWluZXIsCisJCQluZXcgRWxlbWVudCgnZGl2JywgeydjbGFzcyc6ICd0aXAtYm90dG9tJ30pCisJCSk7CisKKwkJcmV0dXJuIHRoaXMudGlwOworCX0sCisKKwlhdHRhY2g6IGZ1bmN0aW9uKGVsZW1lbnRzKXsKKwkJJCQoZWxlbWVudHMpLmVhY2goZnVuY3Rpb24oZWxlbWVudCl7CisJCQl2YXIgdGl0bGUgPSByZWFkKHRoaXMub3B0aW9ucy50aXRsZSwgZWxlbWVudCksCisJCQkJdGV4dCA9IHJlYWQodGhpcy5vcHRpb25zLnRleHQsIGVsZW1lbnQpOworCisJCQllbGVtZW50LnNldCgndGl0bGUnLCAnJykuc3RvcmUoJ3RpcDpuYXRpdmUnLCB0aXRsZSkucmV0cmlldmUoJ3RpcDp0aXRsZScsIHRpdGxlKTsKKwkJCWVsZW1lbnQucmV0cmlldmUoJ3RpcDp0ZXh0JywgdGV4dCk7CisJCQl0aGlzLmZpcmVFdmVudCgnYXR0YWNoJywgW2VsZW1lbnRdKTsKKworCQkJdmFyIGV2ZW50cyA9IFsnZW50ZXInLCAnbGVhdmUnXTsKKwkJCWlmICghdGhpcy5vcHRpb25zLmZpeGVkKSBldmVudHMucHVzaCgnbW92ZScpOworCisJCQlldmVudHMuZWFjaChmdW5jdGlvbih2YWx1ZSl7CisJCQkJdmFyIGV2ZW50ID0gZWxlbWVudC5yZXRyaWV2ZSgndGlwOicgKyB2YWx1ZSk7CisJCQkJaWYgKCFldmVudCkgZXZlbnQgPSBmdW5jdGlvbihldmVudCl7CisJCQkJCXRoaXNbJ2VsZW1lbnQnICsgdmFsdWUuY2FwaXRhbGl6ZSgpXS5hcHBseSh0aGlzLCBbZXZlbnQsIGVsZW1lbnRdKTsKKwkJCQl9LmJpbmQodGhpcyk7CisKKwkJCQllbGVtZW50LnN0b3JlKCd0aXA6JyArIHZhbHVlLCBldmVudCkuYWRkRXZlbnQoJ21vdXNlJyArIHZhbHVlLCBldmVudCk7CisJCQl9LCB0aGlzKTsKKwkJfSwgdGhpcyk7CisKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWRldGFjaDogZnVuY3Rpb24oZWxlbWVudHMpeworCQkkJChlbGVtZW50cykuZWFjaChmdW5jdGlvbihlbGVtZW50KXsKKwkJCVsnZW50ZXInLCAnbGVhdmUnLCAnbW92ZSddLmVhY2goZnVuY3Rpb24odmFsdWUpeworCQkJCWVsZW1lbnQucmVtb3ZlRXZlbnQoJ21vdXNlJyArIHZhbHVlLCBlbGVtZW50LnJldHJpZXZlKCd0aXA6JyArIHZhbHVlKSkuZWxpbWluYXRlKCd0aXA6JyArIHZhbHVlKTsKKwkJCX0pOworCisJCQl0aGlzLmZpcmVFdmVudCgnZGV0YWNoJywgW2VsZW1lbnRdKTsKKworCQkJaWYgKHRoaXMub3B0aW9ucy50aXRsZSA9PSAndGl0bGUnKXsgLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gY2hlY2sgaWYgd2UgY2FuIHJldmVydCB0aGUgdGl0bGUKKwkJCQl2YXIgb3JpZ2luYWwgPSBlbGVtZW50LnJldHJpZXZlKCd0aXA6bmF0aXZlJyk7CisJCQkJaWYgKG9yaWdpbmFsKSBlbGVtZW50LnNldCgndGl0bGUnLCBvcmlnaW5hbCk7CisJCQl9CisJCX0sIHRoaXMpOworCisJCXJldHVybiB0aGlzOworCX0sCisKKwllbGVtZW50RW50ZXI6IGZ1bmN0aW9uKGV2ZW50LCBlbGVtZW50KXsKKwkJY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpOworCQl0aGlzLnRpbWVyID0gKGZ1bmN0aW9uKCl7CisJCQl0aGlzLmNvbnRhaW5lci5lbXB0eSgpOworCisJCQlbJ3RpdGxlJywgJ3RleHQnXS5lYWNoKGZ1bmN0aW9uKHZhbHVlKXsKKwkJCQl2YXIgY29udGVudCA9IGVsZW1lbnQucmV0cmlldmUoJ3RpcDonICsgdmFsdWUpOworCQkJCXZhciBkaXYgPSB0aGlzWydfJyArIHZhbHVlICsgJ0VsZW1lbnQnXSA9IG5ldyBFbGVtZW50KCdkaXYnLCB7CisJCQkJCQknY2xhc3MnOiAndGlwLScgKyB2YWx1ZQorCQkJCQl9KS5pbmplY3QodGhpcy5jb250YWluZXIpOworCQkJCWlmIChjb250ZW50KSB0aGlzLmZpbGwoZGl2LCBjb250ZW50KTsKKwkJCX0sIHRoaXMpOworCQkJdGhpcy5zaG93KGVsZW1lbnQpOworCQkJdGhpcy5wb3NpdGlvbigodGhpcy5vcHRpb25zLmZpeGVkKSA/IHtwYWdlOiBlbGVtZW50LmdldFBvc2l0aW9uKCl9IDogZXZlbnQpOworCQl9KS5kZWxheSh0aGlzLm9wdGlvbnMuc2hvd0RlbGF5LCB0aGlzKTsKKwl9LAorCisJZWxlbWVudExlYXZlOiBmdW5jdGlvbihldmVudCwgZWxlbWVudCl7CisJCWNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTsKKwkJdGhpcy50aW1lciA9IHRoaXMuaGlkZS5kZWxheSh0aGlzLm9wdGlvbnMuaGlkZURlbGF5LCB0aGlzLCBlbGVtZW50KTsKKwkJdGhpcy5maXJlRm9yUGFyZW50KGV2ZW50LCBlbGVtZW50KTsKKwl9LAorCisJc2V0VGl0bGU6IGZ1bmN0aW9uKHRpdGxlKXsKKwkJaWYgKHRoaXMuX3RpdGxlRWxlbWVudCl7CisJCQl0aGlzLl90aXRsZUVsZW1lbnQuZW1wdHkoKTsKKwkJCXRoaXMuZmlsbCh0aGlzLl90aXRsZUVsZW1lbnQsIHRpdGxlKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJc2V0VGV4dDogZnVuY3Rpb24odGV4dCl7CisJCWlmICh0aGlzLl90ZXh0RWxlbWVudCl7CisJCQl0aGlzLl90ZXh0RWxlbWVudC5lbXB0eSgpOworCQkJdGhpcy5maWxsKHRoaXMuX3RleHRFbGVtZW50LCB0ZXh0KTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZmlyZUZvclBhcmVudDogZnVuY3Rpb24oZXZlbnQsIGVsZW1lbnQpeworCQllbGVtZW50ID0gZWxlbWVudC5nZXRQYXJlbnQoKTsKKwkJaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQgPT0gZG9jdW1lbnQuYm9keSkgcmV0dXJuOworCQlpZiAoZWxlbWVudC5yZXRyaWV2ZSgndGlwOmVudGVyJykpIGVsZW1lbnQuZmlyZUV2ZW50KCdtb3VzZWVudGVyJywgZXZlbnQpOworCQllbHNlIHRoaXMuZmlyZUZvclBhcmVudChldmVudCwgZWxlbWVudCk7CisJfSwKKworCWVsZW1lbnRNb3ZlOiBmdW5jdGlvbihldmVudCwgZWxlbWVudCl7CisJCXRoaXMucG9zaXRpb24oZXZlbnQpOworCX0sCisKKwlwb3NpdGlvbjogZnVuY3Rpb24oZXZlbnQpeworCQlpZiAoIXRoaXMudGlwKSBkb2N1bWVudC5pZCh0aGlzKTsKKworCQl2YXIgc2l6ZSA9IHdpbmRvdy5nZXRTaXplKCksIHNjcm9sbCA9IHdpbmRvdy5nZXRTY3JvbGwoKSwKKwkJCXRpcCA9IHt4OiB0aGlzLnRpcC5vZmZzZXRXaWR0aCwgeTogdGhpcy50aXAub2Zmc2V0SGVpZ2h0fSwKKwkJCXByb3BzID0ge3g6ICdsZWZ0JywgeTogJ3RvcCd9LAorCQkJYm91bmRzID0ge3k6IGZhbHNlLCB4MjogZmFsc2UsIHkyOiBmYWxzZSwgeDogZmFsc2V9LAorCQkJb2JqID0ge307CisKKwkJZm9yICh2YXIgeiBpbiBwcm9wcyl7CisJCQlvYmpbcHJvcHNbel1dID0gZXZlbnQucGFnZVt6XSArIHRoaXMub3B0aW9ucy5vZmZzZXRbel07CisJCQlpZiAob2JqW3Byb3BzW3pdXSA8IDApIGJvdW5kc1t6XSA9IHRydWU7CisJCQlpZiAoKG9ialtwcm9wc1t6XV0gKyB0aXBbel0gLSBzY3JvbGxbel0pID4gc2l6ZVt6XSAtIHRoaXMub3B0aW9ucy53aW5kb3dQYWRkaW5nW3pdKXsKKwkJCQlvYmpbcHJvcHNbel1dID0gZXZlbnQucGFnZVt6XSAtIHRoaXMub3B0aW9ucy5vZmZzZXRbel0gLSB0aXBbel07CisJCQkJYm91bmRzW3orJzInXSA9IHRydWU7CisJCQl9CisJCX0KKworCQl0aGlzLmZpcmVFdmVudCgnYm91bmQnLCBib3VuZHMpOworCQl0aGlzLnRpcC5zZXRTdHlsZXMob2JqKTsKKwl9LAorCisJZmlsbDogZnVuY3Rpb24oZWxlbWVudCwgY29udGVudHMpeworCQlpZiAodHlwZW9mIGNvbnRlbnRzID09ICdzdHJpbmcnKSBlbGVtZW50LnNldCgnaHRtbCcsIGNvbnRlbnRzKTsKKwkJZWxzZSBlbGVtZW50LmFkb3B0KGNvbnRlbnRzKTsKKwl9LAorCisJc2hvdzogZnVuY3Rpb24oZWxlbWVudCl7CisJCWlmICghdGhpcy50aXApIGRvY3VtZW50LmlkKHRoaXMpOworCQlpZiAoIXRoaXMudGlwLmdldFBhcmVudCgpKSB0aGlzLnRpcC5pbmplY3QoZG9jdW1lbnQuYm9keSk7CisJCXRoaXMuZmlyZUV2ZW50KCdzaG93JywgW3RoaXMudGlwLCBlbGVtZW50XSk7CisJfSwKKworCWhpZGU6IGZ1bmN0aW9uKGVsZW1lbnQpeworCQlpZiAoIXRoaXMudGlwKSBkb2N1bWVudC5pZCh0aGlzKTsKKwkJdGhpcy5maXJlRXZlbnQoJ2hpZGUnLCBbdGhpcy50aXAsIGVsZW1lbnRdKTsKKwl9CisKK30pOworCit9KSgpOworCisKKy8qCistLS0KKworc2NyaXB0OiBMb2NhbGUuU2V0LkZyb20uanMKKworbmFtZTogTG9jYWxlLlNldC5Gcm9tCisKK2Rlc2NyaXB0aW9uOiBQcm92aWRlcyBhbiBhbHRlcm5hdGl2ZSB3YXkgdG8gY3JlYXRlIExvY2FsZS5TZXQgb2JqZWN0cy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBUaW0gV2llbmsKKworcmVxdWlyZXM6CisgIC0gQ29yZS9KU09OCisgIC0gL0xvY2FsZQorCitwcm92aWRlczogTG9jYWxlLlNldC5Gcm9tCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK3ZhciBwYXJzZXJzID0geworCSdqc29uJzogSlNPTi5kZWNvZGUKK307CisKK0xvY2FsZS5TZXQuZGVmaW5lUGFyc2VyID0gZnVuY3Rpb24obmFtZSwgZm4peworCXBhcnNlcnNbbmFtZV0gPSBmbjsKK307CisKK0xvY2FsZS5TZXQuZnJvbSA9IGZ1bmN0aW9uKHNldCwgdHlwZSl7CisJaWYgKGluc3RhbmNlT2Yoc2V0LCBMb2NhbGUuU2V0KSkgcmV0dXJuIHNldDsKKworCWlmICghdHlwZSAmJiB0eXBlT2Yoc2V0KSA9PSAnc3RyaW5nJykgdHlwZSA9ICdqc29uJzsKKwlpZiAocGFyc2Vyc1t0eXBlXSkgc2V0ID0gcGFyc2Vyc1t0eXBlXShzZXQpOworCisJdmFyIGxvY2FsZSA9IG5ldyBMb2NhbGUuU2V0OworCisJbG9jYWxlLnNldHMgPSBzZXQuc2V0cyB8fCB7fTsKKworCWlmIChzZXQuaW5oZXJpdHMpeworCQlsb2NhbGUuaW5oZXJpdHMubG9jYWxlcyA9IEFycmF5LmZyb20oc2V0LmluaGVyaXRzLmxvY2FsZXMpOworCQlsb2NhbGUuaW5oZXJpdHMuc2V0cyA9IHNldC5pbmhlcml0cy5zZXRzIHx8IHt9OworCX0KKworCXJldHVybiBsb2NhbGU7Cit9OworCit9KSgpOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmFyLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIEFyYWJpYy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBDaGFmaWsgQmFyYmFyCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuYXIuRGF0ZV0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdhcicsICdEYXRlJywgeworCisJLy8gQ3VsdHVyZSdzIGRhdGUgb3JkZXI6IEREL01NL1lZWVkKKwlkYXRlT3JkZXI6IFsnZGF0ZScsICdtb250aCcsICd5ZWFyJ10sCisJc2hvcnREYXRlOiAnJWQvJW0vJVknLAorCXNob3J0VGltZTogJyVIOiVNJworCit9KTsKKworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5hci5Gb3JtLlZhbGlkYXRvcgorCitkZXNjcmlwdGlvbjogRm9ybSBWYWxpZGF0b3IgbWVzc2FnZXMgZm9yIEFyYWJpYy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBDaGFmaWsgQmFyYmFyCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuYXIuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnYXInLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAn2YfYsNinINin2YTYrdmC2YQg2YXYt9mE2YjYqC4nLAorCW1pbkxlbmd0aDogJ9ix2KzYp9ih2Ysg2KXYr9iu2KfZhCB7bWluTGVuZ3RofSDYo9it2LHZgSDYudmE2Ykg2KfZhNij2YLZhCAo2KrZhSDYpdiv2K7Yp9mEIHtsZW5ndGh9INij2K3YsdmBKS4nLAorCW1heExlbmd0aDogJ9in2YTYsdis2KfYoSDYudiv2YUg2KXYr9iu2KfZhCDYo9mD2KvYsSDZhdmGIHttYXhMZW5ndGh9INij2K3YsdmBICjYqtmFINil2K/Yrtin2YQge2xlbmd0aH0g2KPYrdix2YEpLicsCisJaW50ZWdlcjogJ9in2YTYsdis2KfYoSDYpdiv2K7Yp9mEINi52K/YryDYtdit2YrYrSDZgdmKINmH2LDYpyDYp9mE2K3ZgtmELiDYo9mKINix2YLZhSDYsNmIINmD2LPYsSDYudi02LHZiiDYo9mIINmF2KbZiNmKICjZhdir2KfZhCAxLjI1ICkg2LrZitixINmF2LPZhdmI2K0uJywKKwludW1lcmljOiAn2KfZhNix2KzYp9ihINil2K/Yrtin2YQg2YLZitmFINix2YLZhdmK2Kkg2YHZiiDZh9iw2Kcg2KfZhNit2YLZhCAo2YXYq9in2YQgIjEiINij2YggIjEuMSIg2KPZiCAiLTEiINij2YggIi0xLjEiKS4nLAorCWRpZ2l0czogJ9in2YTYsdis2KfYoSDYo9iz2KrYrtiv2KfZhSDZgtmK2YUg2LHZgtmF2YrYqSDZiNi52YTYp9mF2KfYqiDYqtix2YLZitmF2YrYqSDZgdmC2Lcg2YHZiiDZh9iw2Kcg2KfZhNit2YLZhCAo2YXYq9in2YQsINix2YLZhSDZh9in2KrZgSDZhdi5INmG2YLYt9ipINij2Ygg2LTYrdi32KkpJywKKwlhbHBoYTogJ9in2YTYsdis2KfYoSDYo9iz2KrYrtiv2KfZhSDYo9it2LHZgSDZgdmC2LcgKNinLdmKKSDZgdmKINmH2LDYpyDYp9mE2K3ZgtmELiDYo9mKINmB2LHYp9i62KfYqiDYo9mIINi52YTYp9mF2KfYqiDYutmK2LEg2YXYs9mF2YjYrdipLicsCisJYWxwaGFudW06ICfYp9mE2LHYrNin2KEg2KPYs9iq2K7Yr9in2YUg2KPYrdix2YEg2YHZgti3ICjYpy3Ziikg2KPZiCDYo9ix2YLYp9mFICgwLTkpINmB2YLYtyDZgdmKINmH2LDYpyDYp9mE2K3ZgtmELiDYo9mKINmB2LHYp9i62KfYqiDYo9mIINi52YTYp9mF2KfYqiDYutmK2LEg2YXYs9mF2YjYrdipLicsCisJZGF0ZVN1Y2hBczogJ9in2YTYsdis2KfYoSDYpdiv2K7Yp9mEINiq2KfYsdmK2K4g2LXYrdmK2K0g2YPYp9mE2KrYp9mE2Yoge2RhdGV9JywKKwlkYXRlSW5Gb3JtYXRNRFk6ICfYp9mE2LHYrNin2KEg2KXYr9iu2KfZhCDYqtin2LHZitiuINi12K3ZititICjZhdir2KfZhCwgMzEtMTItMTk5OSknLAorCWVtYWlsOiAn2KfZhNix2KzYp9ihINil2K/Yrtin2YQg2KjYsdmK2K8g2KXZhNmD2KrYsdmI2YbZiiDYtdit2YrYrS4nLAorCXVybDogJ9in2YTYsdis2KfYoSDYpdiv2K7Yp9mEINi52YbZiNin2YYg2KXZhNmD2KrYsdmI2YbZiiDYtdit2YrYrSDZhdir2YQgaHR0cDovL3d3dy5leGFtcGxlLmNvbScsCisJY3VycmVuY3lEb2xsYXI6ICfYp9mE2LHYrNin2KEg2KXYr9iu2KfZhCDZgtmK2YXYqSAkINi12K3Zitit2KkuINmF2KvYp9mELCAxMDAuMDAkJywKKwlvbmVSZXF1aXJlZDogJ9in2YTYsdis2KfYoSDYpdiv2K7Yp9mEINmC2YrZhdipINmB2Yog2KPYrdivINmH2LDZhyDYp9mE2K3ZgtmI2YQg2LnZhNmJINin2YTYo9mC2YQuJywKKwllcnJvclByZWZpeDogJ9iu2LfYozogJywKKwl3YXJuaW5nUHJlZml4OiAn2KrYrdiw2YrYsTogJworCit9KTsKKworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5jYS1DQS5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBDYXRhbGFuLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIMODbGZvbnMgU2FuY2hlegorCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmNhLUNBLkRhdGVdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnY2EtQ0EnLCAnRGF0ZScsIHsKKworCW1vbnRoczogWydHZW5lcicsICdGZWJyZXInLCAnTWFyw6cnLCAnQWJyaWwnLCAnTWFpZycsICdKdW55JywgJ0p1bGknLCAnQWdvc3QnLCAnU2V0ZW1icmUnLCAnT2N0dWJyZScsICdOb3ZlbWJyZScsICdEZXNlbWJyZSddLAorCW1vbnRoc19hYmJyOiBbJ2dlbi4nLCAnZmVici4nLCAnbWFyw6cnLCAnYWJyLicsICdtYWlnJywgJ2p1bnknLCAnanVsLicsICdhZy4nLCAnc2V0LicsICdvY3QuJywgJ25vdi4nLCAnZGVzLiddLAorCWRheXM6IFsnRGl1bWVuZ2UnLCAnRGlsbHVucycsICdEaW1hcnRzJywgJ0RpbWVjcmVzJywgJ0Rpam91cycsICdEaXZlbmRyZXMnLCAnRGlzc2FidGUnXSwKKwlkYXlzX2FiYnI6IFsnZGcnLCAnZGwnLCAnZHQnLCAnZGMnLCAnZGonLCAnZHYnLCAnZHMnXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBERC9NTS9ZWVlZCisJZGF0ZU9yZGVyOiBbJ2RhdGUnLCAnbW9udGgnLCAneWVhciddLAorCXNob3J0RGF0ZTogJyVkLyVtLyVZJywKKwlzaG9ydFRpbWU6ICclSDolTScsCisJQU06ICdBTScsCisJUE06ICdQTScsCisJZmlyc3REYXlPZldlZWs6IDAsCisKKwkvLyBEYXRlLkV4dHJhcworCW9yZGluYWw6ICcnLAorCisJbGVzc1RoYW5NaW51dGVBZ286ICdmYSBtZW55cyBkYHVuIG1pbnV0JywKKwltaW51dGVBZ286ICdmYSB1biBtaW51dCcsCisJbWludXRlc0FnbzogJ2ZhIHtkZWx0YX0gbWludXRzJywKKwlob3VyQWdvOiAnZmEgdW4gaG9yYScsCisJaG91cnNBZ286ICdmYSB1bmVzIHtkZWx0YX0gaG9yZXMnLAorCWRheUFnbzogJ2ZhIHVuIGRpYScsCisJZGF5c0FnbzogJ2ZhIHtkZWx0YX0gZGllcycsCisKKwlsZXNzVGhhbk1pbnV0ZVVudGlsOiAnbWVueXMgZGB1biBtaW51dCBkZXMgZGBhcmEnLAorCW1pbnV0ZVVudGlsOiAndW4gbWludXQgZGVzIGRgYXJhJywKKwltaW51dGVzVW50aWw6ICd7ZGVsdGF9IG1pbnV0cyBkZXMgZGBhcmEnLAorCWhvdXJVbnRpbDogJ3VuIGhvcmEgZGVzIGRgYXJhJywKKwlob3Vyc1VudGlsOiAndW5lcyB7ZGVsdGF9IGhvcmVzIGRlcyBkYGFyYScsCisJZGF5VW50aWw6ICcxIGRpYSBkZXMgZGBhcmEnLAorCWRheXNVbnRpbDogJ3tkZWx0YX0gZGllcyBkZXMgZGBhcmEnCisKK30pOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmNhLUNBLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgQ2F0YWxhbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBNaXF1ZWwgSHVkaW4KKyAgLSDDg2xmb25zIFNhbmNoZXoKKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5jYS1DQS5Gb3JtLlZhbGlkYXRvcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdjYS1DQScsICdGb3JtVmFsaWRhdG9yJywgeworCisJcmVxdWlyZWQ6ICdBcXVlc3QgY2FtcCBlcyBvYmxpZ2F0b3JpLicsCisJbWluTGVuZ3RoOiAnUGVyIGZhdm9yIGludHJvZHVlaXggYWwgbWVueXMge21pbkxlbmd0aH0gY2FyYWN0ZXJzIChoYXMgaW50cm9kdWl0IHtsZW5ndGh9IGNhcmFjdGVycykuJywKKwltYXhMZW5ndGg6ICdQZXIgZmF2b3IgaW50cm9kdWVpeCBubyBtZXMgZGUge21heExlbmd0aH0gY2FyYWN0ZXJzIChoYXMgaW50cm9kdWl0IHtsZW5ndGh9IGNhcmFjdGVycykuJywKKwlpbnRlZ2VyOiAnUGVyIGZhdm9yIGludHJvZHVlaXggdW4gbm9tYnJlIGVudGVyIGVuIGFxdWVzdCBjYW1wLiBOb21icmVzIGFtYiBkZWNpbWFscyAocC5lLiAxLDI1KSBubyBlc3RhbiBwZXJtZXNvcy4nLAorCW51bWVyaWM6ICdQZXIgZmF2b3IgaW50cm9kdWVpeCBzb2xzIHZhbG9ycyBudW1lcmljcyBlbiBhcXVlc3QgY2FtcCAocC5lLiAiMSIgbyAiMSwxIiBvICItMSIgbyAiLTEsMSIpLicsCisJZGlnaXRzOiAnUGVyIGZhdm9yIHVzYSBzb2xzIG51bWVyb3MgaSBwdW50dWFjaW8gZW4gYXF1ZXN0IGNhbXAgKHBlciBleGVtcGxlLCB1biBub21icmUgZGUgdGVsZWZvbiBhbWIgZ3Vpb25zIGkgcHVudHMgbm8gZXN0YSBwZXJtZXMpLicsCisJYWxwaGE6ICdQZXIgZmF2b3IgdXRpbGl0emEgbGxldHJlcyBub21lcyAoYS16KSBlbiBhcXVlc3QgY2FtcC4gTm8gc8K0YWRtaXRlaXhlbiBlc3BhaXMgbmkgYWx0cmVzIGNhcmFjdGVycy4nLAorCWFscGhhbnVtOiAnUGVyIGZhdm9yLCB1dGlsaXR6YSBub21lcyBsbGV0cmVzIChhLXopIG8gbnVtZXJvcyAoMC05KSBlbiBhcXVlc3QgY2FtcC4gTm8gc8K0YWRtaXRlaXhlbiBlc3BhaXMgbmkgYWx0cmVzIGNhcmFjdGVycy4nLAorCWRhdGVTdWNoQXM6ICdQZXIgZmF2b3IgaW50cm9kdWVpeCB1bmEgZGF0YSB2YWxpZGEgY29tIHtkYXRlfScsCisJZGF0ZUluRm9ybWF0TURZOiAnUGVyIGZhdm9yIGludHJvZHVlaXggdW5hIGRhdGEgdmFsaWRhIGNvbSBERC9NTS9ZWVlZIChwLmUuICIzMS8xMi8xOTk5IiknLAorCWVtYWlsOiAnUGVyIGZhdm9yLCBpbnRyb2R1ZWl4IHVuYSBhZHJlw6dhIGRlIGNvcnJldSBlbGVjdHJvbmljIHZhbGlkYS4gUGVyIGV4ZW1wbGUsICJmcmVkQGRvbWFpbi5jb20iLicsCisJdXJsOiAnUGVyIGZhdm9yIGludHJvZHVlaXggdW5hIFVSTCB2YWxpZGEgY29tIGh0dHA6Ly93d3cuZXhhbXBsZS5jb20uJywKKwljdXJyZW5jeURvbGxhcjogJ1BlciBmYXZvciBpbnRyb2R1ZWl4IHVuYSBxdWFudGl0YXQgdmFsaWRhIGRlIOKCrC4gUGVyIGV4ZW1wbGUg4oKsMTAwLDAwIC4nLAorCW9uZVJlcXVpcmVkOiAnUGVyIGZhdm9yIGludHJvZHVlaXggYWxndW5hIGNvc2EgcGVyIGFsIG1lbnlzIHVuYSBkwrRhcXVlc3RlcyBlbnRyYWRlcy4nLAorCWVycm9yUHJlZml4OiAnRXJyb3I6ICcsCisJd2FybmluZ1ByZWZpeDogJ0F2aXM6ICcsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAnTm8gcG9kZW4gaGF2ZXIgZXNwYWlzIGVuIGFxdWVzdGEgZW50cmFkYS4nLAorCXJlcUNoa0J5Tm9kZTogJ05vIGhpIGhhbiBlbGVtZW50cyBzZWxlY2Npb25hdHMuJywKKwlyZXF1aXJlZENoazogJ0FxdWVzdCBjYW1wIGVzIG9ibGlnYXRvcmkuJywKKwlyZXFDaGtCeU5hbWU6ICdQZXIgZmF2b3Igc2VsZWNjaW9uYSB1bmEge2xhYmVsfS4nLAorCW1hdGNoOiAnQXF1ZXN0IGNhbXAgbmVjZXNzaXRhIGNvaW5jaWRpciBhbWIgZWwgY2FtcCB7bWF0Y2hOYW1lfScsCisJc3RhcnREYXRlOiAnbGEgZGF0YSBkZSBpbmljaScsCisJZW5kRGF0ZTogJ2xhIGRhdGEgZGUgZmknLAorCWN1cnJlbmREYXRlOiAnbGEgZGF0YSBhY3R1YWwnLAorCWFmdGVyRGF0ZTogJ0xhIGRhdGEgZGV1IHNlciBpZ3VhbCBvIHBvc3RlcmlvciBhIHtsYWJlbH0uJywKKwliZWZvcmVEYXRlOiAnTGEgZGF0YSBkZXUgc2VyIGlndWFsIG8gYW50ZXJpb3IgYSB7bGFiZWx9LicsCisJc3RhcnRNb250aDogJ1BlciBmYXZvciBzZWxlY2Npb25hIHVuIG1lcyBkwrRvcmlnZScsCisJc2FtZU1vbnRoOiAnQXF1ZXN0ZXMgZG9zIGRhdGVzIGRldWVuIGVzdGFyIGRpbnMgZGVsIG1hdGVpeCBtZXMgLSBkZXVzIGNhbnZpYXIgdW5hIG8gYWx0cmEuJworCit9KTsKKworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5jcy1DWi5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBDemVjaC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBKYW4gxIxlcm7DvSBjaGVtaVgKKyAgLSBDaHJpc3RvcGhlciBadWtvd3NraQorCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmNzLUNaLkRhdGVdCisKKy4uLgorKi8KKyhmdW5jdGlvbigpeworCisvLyBDemVjaCBsYW5ndWFnZSBwbHVyYWxpemF0aW9uIHJ1bGVzLCBzZWUgaHR0cDovL3VuaWNvZGUub3JnL3JlcG9zL2NsZHItdG1wL3RydW5rL2RpZmYvc3VwcGxlbWVudGFsL2xhbmd1YWdlX3BsdXJhbF9ydWxlcy5odG1sCisvLyBvbmUgLT4gbiBpcyAxOyAgICAgICAgICAgIDEKKy8vIGZldyAtPiBuIGluIDIuLjQ7ICAgICAgICAgMi00CisvLyBvdGhlciAtPiBldmVyeXRoaW5nIGVsc2UgIDAsIDUtOTk5LCAxLjMxLCAyLjMxLCA1LjMxLi4uCit2YXIgcGx1cmFsaXplID0gZnVuY3Rpb24gKG4sIG9uZSwgZmV3LCBvdGhlcil7CisJaWYgKG4gPT0gMSkgcmV0dXJuIG9uZTsKKwllbHNlIGlmIChuID09IDIgfHwgbiA9PSAzIHx8IG4gPT0gNCkgcmV0dXJuIGZldzsKKwllbHNlIHJldHVybiBvdGhlcjsKK307CisKK0xvY2FsZS5kZWZpbmUoJ2NzLUNaJywgJ0RhdGUnLCB7CisKKwltb250aHM6IFsnTGVkZW4nLCAnw5pub3InLCAnQsWZZXplbicsICdEdWJlbicsICdLdsSbdGVuJywgJ8SMZXJ2ZW4nLCAnxIxlcnZlbmVjJywgJ1NycGVuJywgJ1rDocWZw60nLCAnxZjDrWplbicsICdMaXN0b3BhZCcsICdQcm9zaW5lYyddLAorCW1vbnRoc19hYmJyOiBbJ2xlZG5hJywgJ8O6bm9yYScsICdixZllem5hJywgJ2R1Ym5hJywgJ2t2xJt0bmEnLCAnxI1lcnZuYScsICfEjWVydmVuY2UnLCAnc3JwbmEnLCAnesOhxZnDrScsICfFmcOtam5hJywgJ2xpc3RvcGFkdScsICdwcm9zaW5jZSddLAorCWRheXM6IFsnTmVkxJtsZScsICdQb25kxJtsw60nLCAnw5p0ZXLDvScsICdTdMWZZWRhJywgJ8SMdHZydGVrJywgJ1DDoXRlaycsICdTb2JvdGEnXSwKKwlkYXlzX2FiYnI6IFsnbmUnLCAncG8nLCAnw7p0JywgJ3N0JywgJ8SNdCcsICdww6EnLCAnc28nXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBERC5NTS5ZWVlZCisJZGF0ZU9yZGVyOiBbJ2RhdGUnLCAnbW9udGgnLCAneWVhciddLAorCXNob3J0RGF0ZTogJyVkLiVtLiVZJywKKwlzaG9ydFRpbWU6ICclSDolTScsCisJQU06ICdkb3AuJywKKwlQTTogJ29kcC4nLAorCWZpcnN0RGF5T2ZXZWVrOiAxLAorCisJLy8gRGF0ZS5FeHRyYXMKKwlvcmRpbmFsOiAnLicsCisKKwlsZXNzVGhhbk1pbnV0ZUFnbzogJ3DFmWVkIGNodsOtbMOtJywKKwltaW51dGVBZ286ICdwxZlpYmxpxb5uxJsgcMWZZWQgbWludXRvdScsCisJbWludXRlc0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3DFmWVkIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ21pbnV0b3UnLCAnbWludXRhbWknLCAnbWludXRhbWknKTsgfSwKKwlob3VyQWdvOiAncMWZaWJsacW+bsSbIHDFmWVkIGhvZGlub3UnLAorCWhvdXJzQWdvOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAncMWZZWQge2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAnaG9kaW5vdScsICdob2RpbmFtaScsICdob2RpbmFtaScpOyB9LAorCWRheUFnbzogJ3DFmWVkIGRuZW0nLAorCWRheXNBZ286IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICdwxZllZCB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICdkbmVtJywgJ2RueScsICdkbnknKTsgfSwKKwl3ZWVrQWdvOiAncMWZZWQgdMO9ZG5lbScsCisJd2Vla3NBZ286IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICdwxZllZCB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICd0w71kbmVtJywgJ3TDvWRueScsICd0w71kbnknKTsgfSwKKwltb250aEFnbzogJ3DFmWVkIG3Em3PDrWNlbScsCisJbW9udGhzQWdvOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAncMWZZWQge2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAnbcSbc8OtY2VtJywgJ23Em3PDrWNpJywgJ23Em3PDrWNpJyk7IH0sCisJeWVhckFnbzogJ3DFmWVkIHJva2VtJywKKwl5ZWFyc0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3DFmWVkIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ3Jva2VtJywgJ2xldHknLCAnbGV0eScpOyB9LAorCisJbGVzc1RoYW5NaW51dGVVbnRpbDogJ3phIGNodsOtbGknLAorCW1pbnV0ZVVudGlsOiAncMWZaWJsacW+bsSbIHphIG1pbnV0dScsCisJbWludXRlc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAnemEge2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAnbWludXR1JywgJ21pbnV0eScsICdtaW51dCcpOyB9LAorCWhvdXJVbnRpbDogJ3DFmWlibGnFvm7EmyB6YSBob2RpbnUnLAorCWhvdXJzVW50aWw6IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICd6YSB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICdob2RpbnUnLCAnaG9kaW55JywgJ2hvZGluJyk7IH0sCisJZGF5VW50aWw6ICd6YSBkZW4nLAorCWRheXNVbnRpbDogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3phIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ2RlbicsICdkbnknLCAnZG7FrycpOyB9LAorCXdlZWtVbnRpbDogJ3phIHTDvWRlbicsCisJd2Vla3NVbnRpbDogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3phIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ3TDvWRlbicsICd0w71kbnknLCAndMO9ZG7FrycpOyB9LAorCW1vbnRoVW50aWw6ICd6YSBtxJtzw61jJywKKwltb250aHNVbnRpbDogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3phIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ23Em3PDrWMnLCAnbcSbc8OtY2UnLCAnbcSbc8OtY8WvJyk7IH0sCisJeWVhclVudGlsOiAnemEgcm9rJywKKwl5ZWFyc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAnemEge2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAncm9rJywgJ3Jva3knLCAnbGV0Jyk7IH0KK30pOworCit9KSgpOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmNzLUNaLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgQ3plY2guCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gSmFuIMSMZXJuw70gY2hlbWlYCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuY3MtQ1ouRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnY3MtQ1onLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAnVGF0byBwb2xvxb5rYSBqZSBwb3Zpbm7DoS4nLAorCW1pbkxlbmd0aDogJ1phZGVqdGUgcHJvc8OtbSBhbGVzcG/FiCB7bWluTGVuZ3RofSB6bmFrxa8gKG5hcHPDoW5vIHtsZW5ndGh9IHpuYWvFrykuJywKKwltYXhMZW5ndGg6ICdaYWRlanRlIHByb3PDrW0gbcOpbsSbIG5lxb4ge21heExlbmd0aH0gem5ha8WvIChuw6Fwc8Ohbm8ge2xlbmd0aH0gem5ha8WvKS4nLAorCWludGVnZXI6ICdaYWRlanRlIHByb3PDrW0gY2Vsw6kgxI3DrXNsby4gRGVzZXRpbm7DoSDEjcOtc2xhIChuYXDFmS4gMS4yNSkgbmVqc291IHBvdm9sZW5hLicsCisJbnVtZXJpYzogJ1phZGVqdGUgamVuIMSNw61zZWxuw6kgaG9kbm90eSAodGouICIxIiBuZWJvICIxLjEiIG5lYm8gIi0xIiBuZWJvICItMS4xIikuJywKKwlkaWdpdHM6ICdaYWRlanRlIHByb3PDrW0gcG91emUgxI3DrXNsYSBhIGludGVycHVua8SNbsOtIHpuYW3DqW5rYShuYXDFmcOta2xhZCB0ZWxlZm9ubsOtIMSNw61zbG8gcyBwb21sxI1rYW1pIG5lYm8gdGXEjWthbWkgamUgcG92b2xlbm8pLicsCisJYWxwaGE6ICdaYWRlanRlIHByb3PDrW0gcG91emUgcMOtc21lbmEgKGEteikuIE1lemVyeSBuZWJvIGppbsOpIHpuYWt5IG5lanNvdSBwb3ZvbGVueS4nLAorCWFscGhhbnVtOiAnWmFkZWp0ZSBwcm9zw61tIHBvdXplIHDDrXNtZW5hIChhLXopIG5lYm8gxI3DrXNsaWNlICgwLTkpLiBNZXplcnkgbmVibyBqaW7DqSB6bmFreSBuZWpzb3UgcG92b2xlbnkuJywKKwlkYXRlU3VjaEFzOiAnWmFkZWp0ZSBwcm9zw61tIHBsYXRuw6kgZGF0dW0gamFrbyB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ1phZGVqdGUgcHJvc8OtbSBwbGF0bsOpIGRhdHVtIGpha28gTU0gLyBERCAvIFJSUlIgKHRqLiAiMTIvMzEvMTk5OSIpJywKKwllbWFpbDogJ1phZGVqdGUgcHJvc8OtbSBwbGF0bm91IGUtbWFpbG92b3UgYWRyZXN1LiBOYXDFmcOta2xhZCAiZnJlZEBkb21haW4uY29tIi4nLAorCXVybDogJ1phZGVqdGUgcHJvc8OtbSBwbGF0bm91IFVSTCBhZHJlc3UgamFrbyBodHRwOi8vd3d3LmV4YW1wbGUuY29tLicsCisJY3VycmVuY3lEb2xsYXI6ICdaYWRlanRlIHByb3PDrW0gcGxhdG5vdSDEjcOhc3RrdS4gTmFwxZnDrWtsYWQgJDEwMC4wMC4nLAorCW9uZVJlcXVpcmVkOiAnWmFkZWp0ZSBwcm9zw61tIGFsZXNwb8WIIGplZG51IGhvZG5vdHUgcHJvIHR5dG8gcG9sb8W+a3kuJywKKwllcnJvclByZWZpeDogJ0NoeWJhOiAnLAorCXdhcm5pbmdQcmVmaXg6ICdVcG96b3JuxJtuw606ICcsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAnViB0w6l0byBwb2xvxb5jZSBuZWpzb3UgcG92b2xlbnkgbWV6ZXJ5JywKKwlyZXFDaGtCeU5vZGU6ICdOZWpzb3UgdnlicsOhbnkgxb7DoWRuw6kgcG9sb8W+a3kuJywKKwlyZXF1aXJlZENoazogJ1RhdG8gcG9sb8W+a2EgamUgdnnFvmFkb3bDoW5hLicsCisJcmVxQ2hrQnlOYW1lOiAnUHJvc8OtbSB2eWJlcnRlIHtsYWJlbH0uJywKKwltYXRjaDogJ1RhdG8gcG9sb8W+a2Egc2UgbXVzw60gc2hvZG92YXQgcyBwb2xvxb5rb3Uge21hdGNoTmFtZX0nLAorCXN0YXJ0RGF0ZTogJ2RhdHVtIHphaMOhamVuw60nLAorCWVuZERhdGU6ICdkYXR1bSB1a29uxI1lbsOtJywKKwljdXJyZW5kRGF0ZTogJ2FrdHXDoWxuw60gZGF0dW0nLAorCWFmdGVyRGF0ZTogJ0RhdHVtIGJ5IG3Em2xvIGLDvXQgc3Rlam7DqSBuZWJvIHbEm3TFocOtIG5lxb4ge2xhYmVsfS4nLAorCWJlZm9yZURhdGU6ICdEYXR1bSBieSBtxJtsbyBiw710IHN0ZWpuw6kgbmVibyBtZW7FocOtIG5lxb4ge2xhYmVsfS4nLAorCXN0YXJ0TW9udGg6ICdWeWJlcnRlIHBvxI3DoXRlxI1uw60gbcSbc8OtYy4nLAorCXNhbWVNb250aDogJ1R5dG8gZHZhIGRhdHVteSBtdXPDrSBiw710IHZlIHN0ZWpuw6ltIG3Em3PDrWNpIC0gem3Em8WIdGUgamVkZW4geiBuaWNoLicsCisJY3JlZGl0Y2FyZDogJ1phZGFuw6kgxI3DrXNsbyBrcmVkaXRuw60ga2FydHkgamUgbmVwbGF0bsOpLiBQcm9zw61tIG9wcmF2dGUgaG8uIEJ5bG8gemFkw6FubyB7bGVuZ3RofSDEjcOtc2VsLicKKworfSk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuZGEtREsuRGF0ZQorCitkZXNjcmlwdGlvbjogRGF0ZSBtZXNzYWdlcyBmb3IgRGFuaXNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIE1hcnRpbiBPdmVyZ2FhcmQKKyAgLSBIZW5yaWsgSGFuc2VuCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZGEtREsuRGF0ZV0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdkYS1ESycsICdEYXRlJywgeworCisJbW9udGhzOiBbJ0phbnVhcicsICdGZWJydWFyJywgJ01hcnRzJywgJ0FwcmlsJywgJ01haicsICdKdW5pJywgJ0p1bGknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPa3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10sCisJbW9udGhzX2FiYnI6IFsnamFuLicsICdmZWIuJywgJ21hci4nLCAnYXByLicsICdtYWouJywgJ2p1bi4nLCAnanVsLicsICdhdWcuJywgJ3NlcC4nLCAnb2t0LicsICdub3YuJywgJ2RlYy4nXSwKKwlkYXlzOiBbJ1PDuG5kYWcnLCAnTWFuZGFnJywgJ1RpcnNkYWcnLCAnT25zZGFnJywgJ1RvcnNkYWcnLCAnRnJlZGFnJywgJ0zDuHJkYWcnXSwKKwlkYXlzX2FiYnI6IFsnc8O4bicsICdtYW4nLCAndGlyJywgJ29ucycsICd0b3InLCAnZnJlJywgJ2zDuHInXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBERC1NTS1ZWVlZCisJZGF0ZU9yZGVyOiBbJ2RhdGUnLCAnbW9udGgnLCAneWVhciddLAorCXNob3J0RGF0ZTogJyVkLSVtLSVZJywKKwlzaG9ydFRpbWU6ICclSDolTScsCisJQU06ICdBTScsCisJUE06ICdQTScsCisJZmlyc3REYXlPZldlZWs6IDEsCisKKwkvLyBEYXRlLkV4dHJhcworCW9yZGluYWw6ICcuJywKKworCWxlc3NUaGFuTWludXRlQWdvOiAnbWluZHJlIGVuZCBldCBtaW51dCBzaWRlbicsCisJbWludXRlQWdvOiAnb21rcmluZyBldCBtaW51dCBzaWRlbicsCisJbWludXRlc0FnbzogJ3tkZWx0YX0gbWludXR0ZXIgc2lkZW4nLAorCWhvdXJBZ286ICdvbWtyaW5nIGVuIHRpbWUgc2lkZW4nLAorCWhvdXJzQWdvOiAnb21rcmluZyB7ZGVsdGF9IHRpbWVyIHNpZGVuJywKKwlkYXlBZ286ICcxIGRhZyBzaWRlbicsCisJZGF5c0FnbzogJ3tkZWx0YX0gZGFnZSBzaWRlbicsCisJd2Vla0FnbzogJzEgdWdlIHNpZGVuJywKKwl3ZWVrc0FnbzogJ3tkZWx0YX0gdWdlciBzaWRlbicsCisJbW9udGhBZ286ICcxIG3DpW5lZCBzaWRlbicsCisJbW9udGhzQWdvOiAne2RlbHRhfSBtw6VuZWRlciBzaWRlbicsCisJeWVhckFnbzogJzEgw6VyIHNpZGVuJywKKwl5ZWFyc0FnbzogJ3tkZWx0YX0gw6VyIHNpZGVuJywKKworCWxlc3NUaGFuTWludXRlVW50aWw6ICdtaW5kcmUgZW5kIGV0IG1pbnV0IGZyYSBudScsCisJbWludXRlVW50aWw6ICdvbWtyaW5nIGV0IG1pbnV0IGZyYSBudScsCisJbWludXRlc1VudGlsOiAne2RlbHRhfSBtaW51dHRlciBmcmEgbnUnLAorCWhvdXJVbnRpbDogJ29ta3JpbmcgZW4gdGltZSBmcmEgbnUnLAorCWhvdXJzVW50aWw6ICdvbWtyaW5nIHtkZWx0YX0gdGltZXIgZnJhIG51JywKKwlkYXlVbnRpbDogJzEgZGFnIGZyYSBudScsCisJZGF5c1VudGlsOiAne2RlbHRhfSBkYWdlIGZyYSBudScsCisJd2Vla1VudGlsOiAnMSB1Z2UgZnJhIG51JywKKwl3ZWVrc1VudGlsOiAne2RlbHRhfSB1Z2VyIGZyYSBudScsCisJbW9udGhVbnRpbDogJzEgbcOlbmVkIGZyYSBudScsCisJbW9udGhzVW50aWw6ICd7ZGVsdGF9IG3DpW5lZGVyIGZyYSBudScsCisJeWVhclVudGlsOiAnMSDDpXIgZnJhIG51JywKKwl5ZWFyc1VudGlsOiAne2RlbHRhfSDDpXIgZnJhIG51JworCit9KTsKKworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5kYS1ESy5Gb3JtLlZhbGlkYXRvcgorCitkZXNjcmlwdGlvbjogRm9ybSBWYWxpZGF0b3IgbWVzc2FnZXMgZm9yIERhbmlzaC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBNYXJ0aW4gT3ZlcmdhYXJkCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZGEtREsuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZGEtREsnLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAnRmVsdGV0IHNrYWwgdWRmeWxkZXMuJywKKwltaW5MZW5ndGg6ICdTa3JpdiBtaW5kc3Qge21pbkxlbmd0aH0gdGVnbiAoZHUgc2tyZXYge2xlbmd0aH0gdGVnbikuJywKKwltYXhMZW5ndGg6ICdTa3JpdiBtYWtzaW1hbHQge21heExlbmd0aH0gdGVnbiAoZHUgc2tyZXYge2xlbmd0aH0gdGVnbikuJywKKwlpbnRlZ2VyOiAnU2tyaXYgZXQgdGFsIGkgZGV0dGUgZmVsdC4gRGVjaW1hbCB0YWwgKGYuZWtzLiAxLjI1KSBlciBpa2tlIHRpbGxhZHQuJywKKwludW1lcmljOiAnU2tyaXYga3VuIHRhbCBpIGRldHRlIGZlbHQgKGkuZS4gIjEiIGVsbGVyICIxLjEiIGVsbGVyICItMSIgZWxsZXIgIi0xLjEiKS4nLAorCWRpZ2l0czogJ1Nrcml2IGt1biB0YWwgb2cgdGVnbnPDpnRuaW5nIGkgZGV0dGUgZmVsdCAoZWtzZW1wZWwsIGV0IHRlbGVmb24gbnVtbWVyIG1lZCBiaW5kZXN0cmVnIGVsbGVyIHB1bmt0dW0gZXIgdGlsbGFkdCkuJywKKwlhbHBoYTogJ1Nrcml2IGt1biBib2dzdGF2ZXIgKGEteikgaSBkZXR0ZSBmZWx0LiBNZWxsZW1ydW0gb2cgYW5kcmUgdGVnbiBlciBpa2tlIHRpbGxhZHQuJywKKwlhbHBoYW51bTogJ1Nrcml2IGt1biBib2dzdGF2ZXIgKGEteikgZWxsZXIgdGFsICgwLTkpIGkgZGV0dGUgZmVsdC4gTWVsbGVtcnVtIG9nIGFuZHJlIHRlZ24gZXIgaWtrZSB0aWxsYWR0LicsCisJZGF0ZVN1Y2hBczogJ1Nrcml2IGVuIGd5bGRpZyBkYXRvIHNvbSB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ1Nrcml2IGRhdG8gaSBmb3JtYXRldCBERC1NTS1ZWVlZIChmLmVrcy4gIjMxLTEyLTE5OTkiKScsCisJZW1haWw6ICdTa3JpdiBlbiBneWxkaWcgZS1tYWlsIGFkcmVzc2UuIEYuZWtzICJmcmVkQGRvbWFpbi5jb20iLicsCisJdXJsOiAnU2tyaXYgZW4gZ3lsZGlnIFVSTCBhZHJlc3NlLiBGLmVrcyAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIuJywKKwljdXJyZW5jeURvbGxhcjogJ1Nrcml2IGV0IGdsZGlndCBiZWzDuGIuIEYuZWtzIEtyLjEwMC4wMCAuJywKKwlvbmVSZXF1aXJlZDogJ0V0IGVsbGVyIGZsZXJlIGFmIGZlbHRlcm5lIGkgZGVubmUgZm9ybXVsYXIgc2thbCB1ZGZ5bGRlcy4nLAorCWVycm9yUHJlZml4OiAnRmVqbDogJywKKwl3YXJuaW5nUHJlZml4OiAnQWR2YXJzZWw6ICcsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAnRGVyIG3DpSBpa2tlIGJlbnl0dGVzIG1lbGxlbXJ1bSBpIGRldHRlIGZlbHQuJywKKwlyZXFDaGtCeU5vZGU6ICdGb3JldGFnIGV0IHZhbGcuJywKKwlyZXF1aXJlZENoazogJ0RldHRlIGZlbHQgc2thbCB1ZGZ5bGRlcy4nLAorCXJlcUNoa0J5TmFtZTogJ1bDpmxnIGVuIHtsYWJlbH0uJywKKwltYXRjaDogJ0RldHRlIGZlbHQgc2thbCBtYXRjaGUge21hdGNoTmFtZX0gZmVsdGV0JywKKwlzdGFydERhdGU6ICdzdGFydCBkYXRvJywKKwllbmREYXRlOiAnc2x1dCBkYXRvJywKKwljdXJyZW5kRGF0ZTogJ2RhZ3MgZGF0bycsCisJYWZ0ZXJEYXRlOiAnRGF0b2VuIHNrYWwgdsOmcmUgc3TDuHJyZSBlbmQgZWxsZXIgbGlnIG1lZCB7bGFiZWx9LicsCisJYmVmb3JlRGF0ZTogJ0RhdG9lbiBza2FsIHbDpnJlIG1pbmRyZSBlbmQgZWxsZXIgbGlnIG1lZCB7bGFiZWx9LicsCisJc3RhcnRNb250aDogJ1bDpmxnIGVuIHN0YXJ0IG3DpW5lZCcsCisJc2FtZU1vbnRoOiAnRGUgdmFsZ3RlIGRhdG9lciBza2FsIHbDpnJlIGkgc2FtbWUgbcOlbmVkIC0gc2tpZnQgZW4gYWYgZGVtLicKKworfSk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuZGUtREUuRGF0ZQorCitkZXNjcmlwdGlvbjogRGF0ZSBtZXNzYWdlcyBmb3IgR2VybWFuLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIENocmlzdG9waCBQb2plcgorICAtIEZyYW5rIFJvc3NpCisgIC0gVWxyaWNoIFBldHJpCisgIC0gRmFiaWFuIEJlaW5lcgorCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmRlLURFLkRhdGVdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZGUtREUnLCAnRGF0ZScsIHsKKworCW1vbnRoczogWydKYW51YXInLCAnRmVicnVhcicsICdNw6RyeicsICdBcHJpbCcsICdNYWknLCAnSnVuaScsICdKdWxpJywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2t0b2JlcicsICdOb3ZlbWJlcicsICdEZXplbWJlciddLAorCW1vbnRoc19hYmJyOiBbJ0phbicsICdGZWInLCAnTcOkcicsICdBcHInLCAnTWFpJywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPa3QnLCAnTm92JywgJ0RleiddLAorCWRheXM6IFsnU29ubnRhZycsICdNb250YWcnLCAnRGllbnN0YWcnLCAnTWl0dHdvY2gnLCAnRG9ubmVyc3RhZycsICdGcmVpdGFnJywgJ1NhbXN0YWcnXSwKKwlkYXlzX2FiYnI6IFsnU28uJywgJ01vLicsICdEaS4nLCAnTWkuJywgJ0RvLicsICdGci4nLCAnU2EuJ10sCisKKwkvLyBDdWx0dXJlJ3MgZGF0ZSBvcmRlcjogREQuTU0uWVlZWQorCWRhdGVPcmRlcjogWydkYXRlJywgJ21vbnRoJywgJ3llYXInXSwKKwlzaG9ydERhdGU6ICclZC4lbS4lWScsCisJc2hvcnRUaW1lOiAnJUg6JU0nLAorCUFNOiAndm9ybWl0dGFncycsCisJUE06ICduYWNobWl0dGFncycsCisJZmlyc3REYXlPZldlZWs6IDEsCisKKwkvLyBEYXRlLkV4dHJhcworCW9yZGluYWw6ICcuJywKKworCWxlc3NUaGFuTWludXRlQWdvOiAndm9yIHdlbmlnZXIgYWxzIGVpbmVyIE1pbnV0ZScsCisJbWludXRlQWdvOiAndm9yIGVpbmVyIE1pbnV0ZScsCisJbWludXRlc0FnbzogJ3ZvciB7ZGVsdGF9IE1pbnV0ZW4nLAorCWhvdXJBZ286ICd2b3IgZWluZXIgU3R1bmRlJywKKwlob3Vyc0FnbzogJ3ZvciB7ZGVsdGF9IFN0dW5kZW4nLAorCWRheUFnbzogJ3ZvciBlaW5lbSBUYWcnLAorCWRheXNBZ286ICd2b3Ige2RlbHRhfSBUYWdlbicsCisJd2Vla0FnbzogJ3ZvciBlaW5lciBXb2NoZScsCisJd2Vla3NBZ286ICd2b3Ige2RlbHRhfSBXb2NoZW4nLAorCW1vbnRoQWdvOiAndm9yIGVpbmVtIE1vbmF0JywKKwltb250aHNBZ286ICd2b3Ige2RlbHRhfSBNb25hdGVuJywKKwl5ZWFyQWdvOiAndm9yIGVpbmVtIEphaHInLAorCXllYXJzQWdvOiAndm9yIHtkZWx0YX0gSmFocmVuJywKKworCWxlc3NUaGFuTWludXRlVW50aWw6ICdpbiB3ZW5pZ2VyIGFscyBlaW5lciBNaW51dGUnLAorCW1pbnV0ZVVudGlsOiAnaW4gZWluZXIgTWludXRlJywKKwltaW51dGVzVW50aWw6ICdpbiB7ZGVsdGF9IE1pbnV0ZW4nLAorCWhvdXJVbnRpbDogJ2luIGNhLiBlaW5lciBTdHVuZGUnLAorCWhvdXJzVW50aWw6ICdpbiBjYS4ge2RlbHRhfSBTdHVuZGVuJywKKwlkYXlVbnRpbDogJ2luIGVpbmVtIFRhZycsCisJZGF5c1VudGlsOiAnaW4ge2RlbHRhfSBUYWdlbicsCisJd2Vla1VudGlsOiAnaW4gZWluZXIgV29jaGUnLAorCXdlZWtzVW50aWw6ICdpbiB7ZGVsdGF9IFdvY2hlbicsCisJbW9udGhVbnRpbDogJ2luIGVpbmVtIE1vbmF0JywKKwltb250aHNVbnRpbDogJ2luIHtkZWx0YX0gTW9uYXRlbicsCisJeWVhclVudGlsOiAnaW4gZWluZW0gSmFocicsCisJeWVhcnNVbnRpbDogJ2luIHtkZWx0YX0gSmFocmVuJworCit9KTsKKworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5kZS1DSC5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBHZXJtYW4gKFN3aXR6ZXJsYW5kKS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBNaWNoYWVsIHZhbiBkZXIgV2VnCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKyAgLSAvTG9jYWxlLmRlLURFLkRhdGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZGUtQ0guRGF0ZV0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdkZS1DSCcpLmluaGVyaXQoJ2RlLURFJywgJ0RhdGUnKTsKKworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5kZS1DSC5Gb3JtLlZhbGlkYXRvcgorCitkZXNjcmlwdGlvbjogRm9ybSBWYWxpZGF0b3IgbWVzc2FnZXMgZm9yIEdlcm1hbiAoU3dpdHplcmxhbmQpLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIE1pY2hhZWwgdmFuIGRlciBXZWcKKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5kZS1DSC5Gb3JtLlZhbGlkYXRvcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdkZS1DSCcsICdGb3JtVmFsaWRhdG9yJywgeworCisJcmVxdWlyZWQ6ICdEaWVzZXMgRmVsZCBpc3Qgb2JsaWdhdG9yaXNjaC4nLAorCW1pbkxlbmd0aDogJ0dlYmVuIFNpZSBiaXR0ZSBtaW5kZXN0ZW5zIHttaW5MZW5ndGh9IFplaWNoZW4gZWluIChTaWUgaGFiZW4ge2xlbmd0aH0gWmVpY2hlbiBlaW5nZWdlYmVuKS4nLAorCW1heExlbmd0aDogJ0JpdHRlIGdlYmVuIFNpZSBuaWNodCBtZWhyIGFscyB7bWF4TGVuZ3RofSBaZWljaGVuIGVpbiAoU2llIGhhYmVuIHtsZW5ndGh9IFplaWNoZW4gZWluZ2VnZWJlbikuJywKKwlpbnRlZ2VyOiAnR2ViZW4gU2llIGJpdHRlIGVpbmUgZ2FuemUgWmFobCBlaW4uIERlemltYWx6YWhsZW4gKHouQi4gMS4yNSkgc2luZCBuaWNodCBlcmxhdWJ0LicsCisJbnVtZXJpYzogJ0dlYmVuIFNpZSBiaXR0ZSBudXIgWmFobGVud2VydGUgaW4gZGllc2VzIEVpbmdhYmVmZWxkIGVpbiAoei5CLiAmcXVvdDsxJnF1b3Q7LCAmcXVvdDsxLjEmcXVvdDssICZxdW90Oy0xJnF1b3Q7IG9kZXIgJnF1b3Q7LTEuMSZxdW90OykuJywKKwlkaWdpdHM6ICdCZW51dHplbiBTaWUgYml0dGUgbnVyIFphaGxlbiB1bmQgU2F0enplaWNoZW4gaW4gZGllc2VtIEVpbmdhYmVmZWxkIChlcmxhdWJ0IGlzdCB6LkIuIGVpbmUgVGVsZWZvbm51bW1lciBtaXQgQmluZGVzdHJpY2hlbiB1bmQgUHVua3RlbikuJywKKwlhbHBoYTogJ0JlbnV0emVuIFNpZSBiaXR0ZSBudXIgQnVjaHN0YWJlbiAoYS16KSBpbiBkaWVzZW0gRmVsZC4gTGVlcnplaWNoZW4gdW5kIGFuZGVyZSBaZWljaGVuIHNpbmQgbmljaHQgZXJsYXVidC4nLAorCWFscGhhbnVtOiAnQmVudXR6ZW4gU2llIGJpdHRlIG51ciBCdWNoc3RhYmVuIChhLXopIHVuZCBaYWhsZW4gKDAtOSkgaW4gZGllc2VtIEVpbmdhYmVmZWxkLiBMZWVyemVpY2hlbiB1bmQgYW5kZXJlIFplaWNoZW4gc2luZCBuaWNodCBlcmxhdWJ0LicsCisJZGF0ZVN1Y2hBczogJ0dlYmVuIFNpZSBiaXR0ZSBlaW4gZyZ1dW1sO2x0aWdlcyBEYXR1bSBlaW4uIFdpZSB6dW0gQmVpc3BpZWwge2RhdGV9JywKKwlkYXRlSW5Gb3JtYXRNRFk6ICdHZWJlbiBTaWUgYml0dGUgZWluIGcmdXVtbDtsdGlnZXMgRGF0dW0gZWluLiBXaWUgenVtIEJlaXNwaWVsIFRULk1NLkpKSkogKHouQi4gJnF1b3Q7MzEuMTIuMTk5OSZxdW90OyknLAorCWVtYWlsOiAnR2ViZW4gU2llIGJpdHRlIGVpbmUgZyZ1dW1sO2x0aWdlIEUtTWFpbCBBZHJlc3NlIGVpbi4gV2llIHp1bSBCZWlzcGllbCAmcXVvdDttYXJpYUBiZXJuYXNjb25pLmNoJnF1b3Q7LicsCisJdXJsOiAnR2ViZW4gU2llIGJpdHRlIGVpbmUgZyZ1dW1sO2x0aWdlIFVSTCBlaW4uIFdpZSB6dW0gQmVpc3BpZWwgaHR0cDovL3d3dy5leGFtcGxlLmNvbS4nLAorCWN1cnJlbmN5RG9sbGFyOiAnR2ViZW4gU2llIGJpdHRlIGVpbmVuIGcmdXVtbDtsdGlnZW4gQmV0cmFnIGluIFNjaHdlaXplciBGcmFua2VuIGVpbi4gV2llIHp1bSBCZWlzcGllbCAxMDAuMDAgQ0hGIC4nLAorCW9uZVJlcXVpcmVkOiAnTWFjaGVuIFNpZSBmJnV1bWw7ciBtaW5kZXN0ZW5zIGVpbmVzIGRlciBFaW5nYWJlZmVsZGVyIGVpbmVuIEVpbnRyYWcuJywKKwllcnJvclByZWZpeDogJ0ZlaGxlcjogJywKKwl3YXJuaW5nUHJlZml4OiAnV2FybnVuZzogJywKKworCS8vIEZvcm0uVmFsaWRhdG9yLkV4dHJhcworCW5vU3BhY2U6ICdJbiBkaWVzZW0gRWluZ2FiZWZlbGQgZGFyZiBrZWluIExlZXJ6ZWljaGVuIHNlaW4uJywKKwlyZXFDaGtCeU5vZGU6ICdFcyB3dXJkZW4ga2VpbmUgRWxlbWVudGUgZ2V3JmF1bWw7aGx0LicsCisJcmVxdWlyZWRDaGs6ICdEaWVzZXMgRmVsZCBpc3Qgb2JsaWdhdG9yaXNjaC4nLAorCXJlcUNoa0J5TmFtZTogJ0JpdHRlIHcmYXVtbDtobGVuIFNpZSBlaW4ge2xhYmVsfS4nLAorCW1hdGNoOiAnRGllc2VzIEVpbmdhYmVmZWxkIG11c3MgbWl0IGRlbSBGZWxkIHttYXRjaE5hbWV9ICZ1dW1sO2JlcmVpbnN0aW1tZW4uJywKKwlzdGFydERhdGU6ICdEYXMgQW5mYW5nc2RhdHVtJywKKwllbmREYXRlOiAnRGFzIEVuZGRhdHVtJywKKwljdXJyZW5kRGF0ZTogJ0RhcyBha3R1ZWxsZSBEYXR1bScsCisJYWZ0ZXJEYXRlOiAnRGFzIERhdHVtIHNvbGx0ZSB6dXIgZ2xlaWNoZW4gWmVpdCBvZGVyIHNwJmF1bWw7dGVyIHNlaW4ge2xhYmVsfS4nLAorCWJlZm9yZURhdGU6ICdEYXMgRGF0dW0gc29sbHRlIHp1ciBnbGVpY2hlbiBaZWl0IG9kZXIgZnImdXVtbDtoZXIgc2VpbiB7bGFiZWx9LicsCisJc3RhcnRNb250aDogJ1cmYXVtbDtobGVuIFNpZSBiaXR0ZSBlaW5lbiBBbmZhbmdzbW9uYXQnLAorCXNhbWVNb250aDogJ0RpZXNlIHp3ZWkgRGF0dW1zYW5nYWJlbiBtJnV1bWw7c3NlbiBpbSBzZWxiZW4gTW9uYXQgc2VpbiAtIFNpZSBtJnV1bWw7c3NlbiBlaW5lIHZvbiBiZWlkZW4gdmVyJmF1bWw7bmRlcm4uJywKKwljcmVkaXRjYXJkOiAnRGllIGVpbmdlZ2ViZW5lIEtyZWRpdGthcnRlbm51bW1lciBpc3QgdW5nJnV1bWw7bHRpZy4gQml0dGUgJnV1bWw7YmVycHImdXVtbDtmZW4gU2llIGRpZXNlIHVuZCB2ZXJzdWNoZW4gU2llIGVzIGVybmV1dC4ge2xlbmd0aH0gWmFobGVuIGVpbmdlZ2ViZW4uJworCit9KTsKKworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5kZS1ERS5Gb3JtLlZhbGlkYXRvcgorCitkZXNjcmlwdGlvbjogRm9ybSBWYWxpZGF0b3IgbWVzc2FnZXMgZm9yIEdlcm1hbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBGcmFuayBSb3NzaQorICAtIFVscmljaCBQZXRyaQorICAtIEZhYmlhbiBCZWluZXIKKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5kZS1ERS5Gb3JtLlZhbGlkYXRvcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdkZS1ERScsICdGb3JtVmFsaWRhdG9yJywgeworCisJcmVxdWlyZWQ6ICdEaWVzZXMgRWluZ2FiZWZlbGQgbXVzcyBhdXNnZWbDvGxsdCB3ZXJkZW4uJywKKwltaW5MZW5ndGg6ICdHZWJlbiBTaWUgYml0dGUgbWluZGVzdGVucyB7bWluTGVuZ3RofSBaZWljaGVuIGVpbiAoU2llIGhhYmVuIG51ciB7bGVuZ3RofSBaZWljaGVuIGVpbmdlZ2ViZW4pLicsCisJbWF4TGVuZ3RoOiAnR2ViZW4gU2llIGJpdHRlIG5pY2h0IG1laHIgYWxzIHttYXhMZW5ndGh9IFplaWNoZW4gZWluIChTaWUgaGFiZW4ge2xlbmd0aH0gWmVpY2hlbiBlaW5nZWdlYmVuKS4nLAorCWludGVnZXI6ICdHZWJlbiBTaWUgaW4gZGllc2VtIEVpbmdhYmVmZWxkIGJpdHRlIGVpbmUgZ2FuemUgWmFobCBlaW4uIERlemltYWx6YWhsZW4gKHouQi4gIjEuMjUiKSBzaW5kIG5pY2h0IGVybGF1YnQuJywKKwludW1lcmljOiAnR2ViZW4gU2llIGluIGRpZXNlbSBFaW5nYWJlZmVsZCBiaXR0ZSBudXIgWmFobGVud2VydGUgKHouQi4gIjEiLCAiMS4xIiwgIi0xIiBvZGVyICItMS4xIikgZWluLicsCisJZGlnaXRzOiAnR2ViZW4gU2llIGluIGRpZXNlbSBFaW5nYWJlZmVsZCBiaXR0ZSBudXIgWmFobGVuIHVuZCBTYXR6emVpY2hlbiBlaW4gKHouQi4gZWluZSBUZWxlZm9ubnVtbWVyIG1pdCBCaW5kZXN0cmljaGVuIHVuZCBQdW5rdGVuIGlzdCBlcmxhdWJ0KS4nLAorCWFscGhhOiAnR2ViZW4gU2llIGluIGRpZXNlbSBFaW5nYWJlZmVsZCBiaXR0ZSBudXIgQnVjaHN0YWJlbiAoYS16KSBlaW4uIExlZXJ6ZWljaGVuIHVuZCBhbmRlcmUgWmVpY2hlbiBzaW5kIG5pY2h0IGVybGF1YnQuJywKKwlhbHBoYW51bTogJ0dlYmVuIFNpZSBpbiBkaWVzZW0gRWluZ2FiZWZlbGQgYml0dGUgbnVyIEJ1Y2hzdGFiZW4gKGEteikgdW5kIFphaGxlbiAoMC05KSBlaW4uIExlZXJ6ZWljaGVuIG9kZXIgYW5kZXJlIFplaWNoZW4gc2luZCBuaWNodCBlcmxhdWJ0LicsCisJZGF0ZVN1Y2hBczogJ0dlYmVuIFNpZSBiaXR0ZSBlaW4gZ8O8bHRpZ2VzIERhdHVtIGVpbiAoei5CLiAie2RhdGV9IikuJywKKwlkYXRlSW5Gb3JtYXRNRFk6ICdHZWJlbiBTaWUgYml0dGUgZWluIGfDvGx0aWdlcyBEYXR1bSBpbSBGb3JtYXQgVFQuTU0uSkpKSiBlaW4gKHouQi4gIjMxLjEyLjE5OTkiKS4nLAorCWVtYWlsOiAnR2ViZW4gU2llIGJpdHRlIGVpbmUgZ8O8bHRpZ2UgRS1NYWlsLUFkcmVzc2UgZWluICh6LkIuICJtYXhAbXVzdGVybWFubi5kZSIpLicsCisJdXJsOiAnR2ViZW4gU2llIGJpdHRlIGVpbmUgZ8O8bHRpZ2UgVVJMIGVpbiAoei5CLiAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpLicsCisJY3VycmVuY3lEb2xsYXI6ICdHZWJlbiBTaWUgYml0dGUgZWluZW4gZ8O8bHRpZ2VuIEJldHJhZyBpbiBFVVJPIGVpbiAoei5CLiAxMDAuMDDigqwpLicsCisJb25lUmVxdWlyZWQ6ICdCaXR0ZSBmw7xsbGVuIFNpZSBtaW5kZXN0ZW5zIGVpbiBFaW5nYWJlZmVsZCBhdXMuJywKKwllcnJvclByZWZpeDogJ0ZlaGxlcjogJywKKwl3YXJuaW5nUHJlZml4OiAnV2FybnVuZzogJywKKworCS8vIEZvcm0uVmFsaWRhdG9yLkV4dHJhcworCW5vU3BhY2U6ICdFcyBkYXJmIGtlaW4gTGVlcnplaWNoZW4gaW4gZGllc2VtIEVpbmdhYmVmZWxkIHNlaW4uJywKKwlyZXFDaGtCeU5vZGU6ICdFcyB3dXJkZW4ga2VpbmUgRWxlbWVudGUgZ2V3w6RobHQuJywKKwlyZXF1aXJlZENoazogJ0RpZXNlcyBGZWxkIG11c3MgYXVzZ2Vmw7xsbHQgd2VyZGVuLicsCisJcmVxQ2hrQnlOYW1lOiAnQml0dGUgd8OkaGxlbiBTaWUgZWluIHtsYWJlbH0uJywKKwltYXRjaDogJ0RpZXNlcyBFaW5nYWJlZmVsZCBtdXNzIG1pdCBkZW0ge21hdGNoTmFtZX0gRWluZ2FiZWZlbGQgw7xiZXJlaW5zdGltbWVuLicsCisJc3RhcnREYXRlOiAnRGFzIEFuZmFuZ3NkYXR1bScsCisJZW5kRGF0ZTogJ0RhcyBFbmRkYXR1bScsCisJY3VycmVuZERhdGU6ICdEYXMgYWt0dWVsbGUgRGF0dW0nLAorCWFmdGVyRGF0ZTogJ0RhcyBEYXR1bSBzb2xsdGUgenVyIGdsZWljaGVuIFplaXQgb2RlciBzcMOkdGVyIHNlaW4gYWxzIHtsYWJlbH0uJywKKwliZWZvcmVEYXRlOiAnRGFzIERhdHVtIHNvbGx0ZSB6dXIgZ2xlaWNoZW4gWmVpdCBvZGVyIGZyw7xoZXIgc2VpbiBhbHMge2xhYmVsfS4nLAorCXN0YXJ0TW9udGg6ICdXw6RobGVuIFNpZSBiaXR0ZSBlaW5lbiBBbmZhbmdzbW9uYXQnLAorCXNhbWVNb250aDogJ0RpZXNlIHp3ZWkgRGF0dW1zYW5nYWJlbiBtw7xzc2VuIGltIHNlbGJlbiBNb25hdCBzZWluIC0gU2llIG3DvHNzZW4gZWluZXMgdm9uIGJlaWRlbiB2ZXLDpG5kZXJuLicsCisJY3JlZGl0Y2FyZDogJ0RpZSBlaW5nZWdlYmVuZSBLcmVkaXRrYXJ0ZW5udW1tZXIgaXN0IHVuZ8O8bHRpZy4gQml0dGUgw7xiZXJwcsO8ZmVuIFNpZSBkaWVzZSB1bmQgdmVyc3VjaGVuIFNpZSBlcyBlcm5ldXQuIHtsZW5ndGh9IFphaGxlbiBlaW5nZWdlYmVuLicKKworfSk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuRVUuTnVtYmVyCisKK2Rlc2NyaXB0aW9uOiBOdW1iZXIgbWVzc2FnZXMgZm9yIEV1cm9wZS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBcmlhbiBTdG9sd2lqaworCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLkVVLk51bWJlcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdFVScsICdOdW1iZXInLCB7CisKKwlkZWNpbWFsOiAnLCcsCisJZ3JvdXA6ICcuJywKKworCWN1cnJlbmN5OiB7CisJCXByZWZpeDogJ+KCrCAnCisJfQorCit9KTsKKworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5kZS1ERS5OdW1iZXIKKworZGVzY3JpcHRpb246IE51bWJlciBtZXNzYWdlcyBmb3IgR2VybWFuLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIENocmlzdG9waCBQb2plcgorCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisgIC0gL0xvY2FsZS5FVS5OdW1iZXIKKworcHJvdmlkZXM6IFtMb2NhbGUuZGUtREUuTnVtYmVyXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2RlLURFJykuaW5oZXJpdCgnRVUnLCAnTnVtYmVyJyk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuZW4tR0IuRGF0ZQorCitkZXNjcmlwdGlvbjogRGF0ZSBtZXNzYWdlcyBmb3IgQnJpdGlzaCBFbmdsaXNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisgIC0gL0xvY2FsZS5lbi1VUy5EYXRlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmVuLUdCLkRhdGVdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZW4tR0InLCAnRGF0ZScsIHsKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBERC9NTS9ZWVlZCisJZGF0ZU9yZGVyOiBbJ2RhdGUnLCAnbW9udGgnLCAneWVhciddLAorCXNob3J0RGF0ZTogJyVkLyVtLyVZJywKKwlzaG9ydFRpbWU6ICclSDolTScKKworfSkuaW5oZXJpdCgnZW4tVVMnLCAnRGF0ZScpOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmVzLUVTLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIFNwYW5pc2guCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gw4NsZm9ucyBTYW5jaGV6CisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZXMtRVMuRGF0ZV0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdlcy1FUycsICdEYXRlJywgeworCisJbW9udGhzOiBbJ0VuZXJvJywgJ0ZlYnJlcm8nLCAnTWFyem8nLCAnQWJyaWwnLCAnTWF5bycsICdKdW5pbycsICdKdWxpbycsICdBZ29zdG8nLCAnU2VwdGllbWJyZScsICdPY3R1YnJlJywgJ05vdmllbWJyZScsICdEaWNpZW1icmUnXSwKKwltb250aHNfYWJicjogWydlbmUnLCAnZmViJywgJ21hcicsICdhYnInLCAnbWF5JywgJ2p1bicsICdqdWwnLCAnYWdvJywgJ3NlcCcsICdvY3QnLCAnbm92JywgJ2RpYyddLAorCWRheXM6IFsnRG9taW5nbycsICdMdW5lcycsICdNYXJ0ZXMnLCAnTWnDqXJjb2xlcycsICdKdWV2ZXMnLCAnVmllcm5lcycsICdTw6FiYWRvJ10sCisJZGF5c19hYmJyOiBbJ2RvbScsICdsdW4nLCAnbWFyJywgJ21pw6knLCAnanV2JywgJ3ZpZScsICdzw6FiJ10sCisKKwkvLyBDdWx0dXJlJ3MgZGF0ZSBvcmRlcjogREQvTU0vWVlZWQorCWRhdGVPcmRlcjogWydkYXRlJywgJ21vbnRoJywgJ3llYXInXSwKKwlzaG9ydERhdGU6ICclZC8lbS8lWScsCisJc2hvcnRUaW1lOiAnJUg6JU0nLAorCUFNOiAnQU0nLAorCVBNOiAnUE0nLAorCWZpcnN0RGF5T2ZXZWVrOiAxLAorCisJLy8gRGF0ZS5FeHRyYXMKKwlvcmRpbmFsOiAnJywKKworCWxlc3NUaGFuTWludXRlQWdvOiAnaGFjZSBtZW5vcyBkZSB1biBtaW51dG8nLAorCW1pbnV0ZUFnbzogJ2hhY2UgdW4gbWludXRvJywKKwltaW51dGVzQWdvOiAnaGFjZSB7ZGVsdGF9IG1pbnV0b3MnLAorCWhvdXJBZ286ICdoYWNlIHVuYSBob3JhJywKKwlob3Vyc0FnbzogJ2hhY2UgdW5hcyB7ZGVsdGF9IGhvcmFzJywKKwlkYXlBZ286ICdoYWNlIHVuIGTDrWEnLAorCWRheXNBZ286ICdoYWNlIHtkZWx0YX0gZMOtYXMnLAorCXdlZWtBZ286ICdoYWNlIHVuYSBzZW1hbmEnLAorCXdlZWtzQWdvOiAnaGFjZSB1bmFzIHtkZWx0YX0gc2VtYW5hcycsCisJbW9udGhBZ286ICdoYWNlIHVuIG1lcycsCisJbW9udGhzQWdvOiAnaGFjZSB7ZGVsdGF9IG1lc2VzJywKKwl5ZWFyQWdvOiAnaGFjZSB1biBhw7FvJywKKwl5ZWFyc0FnbzogJ2hhY2Uge2RlbHRhfSBhw7FvcycsCisKKwlsZXNzVGhhbk1pbnV0ZVVudGlsOiAnbWVub3MgZGUgdW4gbWludXRvIGRlc2RlIGFob3JhJywKKwltaW51dGVVbnRpbDogJ3VuIG1pbnV0byBkZXNkZSBhaG9yYScsCisJbWludXRlc1VudGlsOiAne2RlbHRhfSBtaW51dG9zIGRlc2RlIGFob3JhJywKKwlob3VyVW50aWw6ICd1bmEgaG9yYSBkZXNkZSBhaG9yYScsCisJaG91cnNVbnRpbDogJ3VuYXMge2RlbHRhfSBob3JhcyBkZXNkZSBhaG9yYScsCisJZGF5VW50aWw6ICd1biBkw61hIGRlc2RlIGFob3JhJywKKwlkYXlzVW50aWw6ICd7ZGVsdGF9IGTDrWFzIGRlc2RlIGFob3JhJywKKwl3ZWVrVW50aWw6ICd1bmEgc2VtYW5hIGRlc2RlIGFob3JhJywKKwl3ZWVrc1VudGlsOiAndW5hcyB7ZGVsdGF9IHNlbWFuYXMgZGVzZGUgYWhvcmEnLAorCW1vbnRoVW50aWw6ICd1biBtZXMgZGVzZGUgYWhvcmEnLAorCW1vbnRoc1VudGlsOiAne2RlbHRhfSBtZXNlcyBkZXNkZSBhaG9yYScsCisJeWVhclVudGlsOiAndW4gYcOxbyBkZXNkZSBhaG9yYScsCisJeWVhcnNVbnRpbDogJ3tkZWx0YX0gYcOxb3MgZGVzZGUgYWhvcmEnCisKK30pOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmVzLUFSLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIFNwYW5pc2ggKEFyZ2VudGluYSkuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gw4NsZm9ucyBTYW5jaGV6CisgIC0gRGllZ28gTWFzc2FudGkKKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorICAtIC9Mb2NhbGUuZXMtRVMuRGF0ZQorCitwcm92aWRlczogW0xvY2FsZS5lcy1BUi5EYXRlXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2VzLUFSJykuaW5oZXJpdCgnZXMtRVMnLCAnRGF0ZScpOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmVzLUFSLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgU3BhbmlzaCAoQXJnZW50aW5hKS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBEaWVnbyBNYXNzYW50aQorCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmVzLUFSLkZvcm0uVmFsaWRhdG9yXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2VzLUFSJywgJ0Zvcm1WYWxpZGF0b3InLCB7CisKKwlyZXF1aXJlZDogJ0VzdGUgY2FtcG8gZXMgb2JsaWdhdG9yaW8uJywKKwltaW5MZW5ndGg6ICdQb3IgZmF2b3IgaW5ncmVzZSBhbCBtZW5vcyB7bWluTGVuZ3RofSBjYXJhY3RlcmVzIChoYSBpbmdyZXNhZG8ge2xlbmd0aH0gY2FyYWN0ZXJlcykuJywKKwltYXhMZW5ndGg6ICdQb3IgZmF2b3Igbm8gaW5ncmVzZSBtw6FzIGRlIHttYXhMZW5ndGh9IGNhcmFjdGVyZXMgKGhhIGluZ3Jlc2FkbyB7bGVuZ3RofSBjYXJhY3RlcmVzKS4nLAorCWludGVnZXI6ICdQb3IgZmF2b3IgaW5ncmVzZSB1biBuw7ptZXJvIGVudGVybyBlbiBlc3RlIGNhbXBvLiBOw7ptZXJvcyBjb24gZGVjaW1hbGVzIChwLmUuIDEsMjUpIG5vIHNlIHBlcm1pdGVuLicsCisJbnVtZXJpYzogJ1BvciBmYXZvciBpbmdyZXNlIHNvbG8gdmFsb3JlcyBudW3DqXJpY29zIGVuIGVzdGUgY2FtcG8gKHAuZS4gIjEiIG8gIjEsMSIgbyAiLTEiIG8gIi0xLDEiKS4nLAorCWRpZ2l0czogJ1BvciBmYXZvciB1c2Ugc8OzbG8gbsO6bWVyb3MgeSBwdW50dWFjacOzbiBlbiBlc3RlIGNhbXBvIChwb3IgZWplbXBsbywgdW4gbsO6bWVybyBkZSB0ZWzDqWZvbm8gY29uIGd1aW9uZXMgeS9vIHB1bnRvcyBubyBlc3TDoSBwZXJtaXRpZG8pLicsCisJYWxwaGE6ICdQb3IgZmF2b3IgdXNlIHPDs2xvIGxldHJhcyAoYS16KSBlbiBlc3RlIGNhbXBvLiBObyBzZSBwZXJtaXRlbiBlc3BhY2lvcyBuaSBvdHJvcyBjYXJhY3RlcmVzLicsCisJYWxwaGFudW06ICdQb3IgZmF2b3IsIHVzYSBzw7NsbyBsZXRyYXMgKGEteikgbyBuw7ptZXJvcyAoMC05KSBlbiBlc3RlIGNhbXBvLiBObyBzZSBwZXJtaXRlbiBlc3BhY2lvcyB1IG90cm9zIGNhcmFjdGVyZXMuJywKKwlkYXRlU3VjaEFzOiAnUG9yIGZhdm9yIGluZ3Jlc2UgdW5hIGZlY2hhIHbDoWxpZGEgY29tbyB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ1BvciBmYXZvciBpbmdyZXNlIHVuYSBmZWNoYSB2w6FsaWRhLCB1dHVsaXphbmRvIGVsIGZvcm1hdG8gREQvTU0vWVlZWSAocC5lLiAiMzEvMTIvMTk5OSIpJywKKwllbWFpbDogJ1BvciBmYXZvciwgaW5ncmVzZSB1bmEgZGlyZWNjacOzbiBkZSBlLW1haWwgdsOhbGlkYS4gUG9yIGVqZW1wbG8sICJmcmVkQGRvbWluaW8uY29tIi4nLAorCXVybDogJ1BvciBmYXZvciBpbmdyZXNlIHVuYSBVUkwgdsOhbGlkYSBjb21vIGh0dHA6Ly93d3cuZXhhbXBsZS5jb20uJywKKwljdXJyZW5jeURvbGxhcjogJ1BvciBmYXZvciBpbmdyZXNlIHVuYSBjYW50aWRhZCB2w6FsaWRhIGRlIHBlc29zLiBQb3IgZWplbXBsbyAkMTAwLDAwIC4nLAorCW9uZVJlcXVpcmVkOiAnUG9yIGZhdm9yIGluZ3Jlc2UgYWxnbyBwYXJhIHBvciBsbyBtZW5vcyB1bmEgZGUgZXN0YXMgZW50cmFkYXMuJywKKwllcnJvclByZWZpeDogJ0Vycm9yOiAnLAorCXdhcm5pbmdQcmVmaXg6ICdBZHZlcnRlbmNpYTogJywKKworCS8vIEZvcm0uVmFsaWRhdG9yLkV4dHJhcworCW5vU3BhY2U6ICdObyBzZSBwZXJtaXRlbiBlc3BhY2lvcyBlbiBlc3RlIGNhbXBvLicsCisJcmVxQ2hrQnlOb2RlOiAnTm8gaGF5IGVsZW1lbnRvcyBzZWxlY2Npb25hZG9zLicsCisJcmVxdWlyZWRDaGs6ICdFc3RlIGNhbXBvIGVzIG9ibGlnYXRvcmlvLicsCisJcmVxQ2hrQnlOYW1lOiAnUG9yIGZhdm9yIHNlbGVjY2lvbmEgdW5hIHtsYWJlbH0uJywKKwltYXRjaDogJ0VzdGUgY2FtcG8gbmVjZXNpdGEgY29pbmNpZGlyIGNvbiBlbCBjYW1wbyB7bWF0Y2hOYW1lfScsCisJc3RhcnREYXRlOiAnbGEgZmVjaGEgZGUgaW5pY2lvJywKKwllbmREYXRlOiAnbGEgZmVjaGEgZGUgZmluJywKKwljdXJyZW5kRGF0ZTogJ2xhIGZlY2hhIGFjdHVhbCcsCisJYWZ0ZXJEYXRlOiAnTGEgZmVjaGEgZGViZSBzZXIgaWd1YWwgbyBwb3N0ZXJpb3IgYSB7bGFiZWx9LicsCisJYmVmb3JlRGF0ZTogJ0xhIGZlY2hhIGRlYmUgc2VyIGlndWFsIG8gYW50ZXJpb3IgYSB7bGFiZWx9LicsCisJc3RhcnRNb250aDogJ1BvciBmYXZvciBzZWxlY2Npb25hIHVuIG1lcyBkZSBvcmlnZW4nLAorCXNhbWVNb250aDogJ0VzdGFzIGRvcyBmZWNoYXMgZGViZW4gZXN0YXIgZW4gZWwgbWlzbW8gbWVzIC0gZGViZXMgY2FtYmlhciB1bmEgdSBvdHJhLicKKworfSk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuZXMtRVMuRm9ybS5WYWxpZGF0b3IKKworZGVzY3JpcHRpb246IEZvcm0gVmFsaWRhdG9yIG1lc3NhZ2VzIGZvciBTcGFuaXNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIMODbGZvbnMgU2FuY2hlegorCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmVzLUVTLkZvcm0uVmFsaWRhdG9yXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2VzLUVTJywgJ0Zvcm1WYWxpZGF0b3InLCB7CisKKwlyZXF1aXJlZDogJ0VzdGUgY2FtcG8gZXMgb2JsaWdhdG9yaW8uJywKKwltaW5MZW5ndGg6ICdQb3IgZmF2b3IgaW50cm9kdWNlIGFsIG1lbm9zIHttaW5MZW5ndGh9IGNhcmFjdGVyZXMgKGhhcyBpbnRyb2R1Y2lkbyB7bGVuZ3RofSBjYXJhY3RlcmVzKS4nLAorCW1heExlbmd0aDogJ1BvciBmYXZvciBpbnRyb2R1Y2Ugbm8gbSZhYWN1dGU7cyBkZSB7bWF4TGVuZ3RofSBjYXJhY3RlcmVzIChoYXMgaW50cm9kdWNpZG8ge2xlbmd0aH0gY2FyYWN0ZXJlcykuJywKKwlpbnRlZ2VyOiAnUG9yIGZhdm9yIGludHJvZHVjZSB1biBuJnVhY3V0ZTttZXJvIGVudGVybyBlbiBlc3RlIGNhbXBvLiBOJnVhY3V0ZTttZXJvcyBjb24gZGVjaW1hbGVzIChwLmUuIDEsMjUpIG5vIHNlIHBlcm1pdGVuLicsCisJbnVtZXJpYzogJ1BvciBmYXZvciBpbnRyb2R1Y2Ugc29sbyB2YWxvcmVzIG51bSZlYWN1dGU7cmljb3MgZW4gZXN0ZSBjYW1wbyAocC5lLiAiMSIgbyAiMSwxIiBvICItMSIgbyAiLTEsMSIpLicsCisJZGlnaXRzOiAnUG9yIGZhdm9yIHVzYSBzb2xvIG4mdWFjdXRlO21lcm9zIHkgcHVudHVhY2kmb2FjdXRlO24gZW4gZXN0ZSBjYW1wbyAocG9yIGVqZW1wbG8sIHVuIG4mdWFjdXRlO21lcm8gZGUgdGVsJmVhY3V0ZTtmb25vIGNvbiBndWlvbmVzIHkgcHVudG9zIG5vIGVzdGEgcGVybWl0aWRvKS4nLAorCWFscGhhOiAnUG9yIGZhdm9yIHVzYSBsZXRyYXMgc29sbyAoYS16KSBlbiBlc3RlIGNhbXBvLiBObyBzZSBhZG1pdGVuIGVzcGFjaW9zIG5pIG90cm9zIGNhcmFjdGVyZXMuJywKKwlhbHBoYW51bTogJ1BvciBmYXZvciwgdXNhIHNvbG8gbGV0cmFzIChhLXopIG8gbiZ1YWN1dGU7bWVyb3MgKDAtOSkgZW4gZXN0ZSBjYW1wby4gTm8gc2UgYWRtaXRlbiBlc3BhY2lvcyBuaSBvdHJvcyBjYXJhY3RlcmVzLicsCisJZGF0ZVN1Y2hBczogJ1BvciBmYXZvciBpbnRyb2R1Y2UgdW5hIGZlY2hhIHYmYWFjdXRlO2xpZGEgY29tbyB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ1BvciBmYXZvciBpbnRyb2R1Y2UgdW5hIGZlY2hhIHYmYWFjdXRlO2xpZGEgY29tbyBERC9NTS9ZWVlZIChwLmUuICIzMS8xMi8xOTk5IiknLAorCWVtYWlsOiAnUG9yIGZhdm9yLCBpbnRyb2R1Y2UgdW5hIGRpcmVjY2kmb2FjdXRlO24gZGUgZW1haWwgdiZhYWN1dGU7bGlkYS4gUG9yIGVqZW1wbG8sICJmcmVkQGRvbWFpbi5jb20iLicsCisJdXJsOiAnUG9yIGZhdm9yIGludHJvZHVjZSB1bmEgVVJMIHYmYWFjdXRlO2xpZGEgY29tbyBodHRwOi8vd3d3LmV4YW1wbGUuY29tLicsCisJY3VycmVuY3lEb2xsYXI6ICdQb3IgZmF2b3IgaW50cm9kdWNlIHVuYSBjYW50aWRhZCB2JmFhY3V0ZTtsaWRhIGRlIOKCrC4gUG9yIGVqZW1wbG8g4oKsMTAwLDAwIC4nLAorCW9uZVJlcXVpcmVkOiAnUG9yIGZhdm9yIGludHJvZHVjZSBhbGdvIHBhcmEgcG9yIGxvIG1lbm9zIHVuYSBkZSBlc3RhcyBlbnRyYWRhcy4nLAorCWVycm9yUHJlZml4OiAnRXJyb3I6ICcsCisJd2FybmluZ1ByZWZpeDogJ0F2aXNvOiAnLAorCisJLy8gRm9ybS5WYWxpZGF0b3IuRXh0cmFzCisJbm9TcGFjZTogJ05vIHB1ZWRlbiBoYWJlciBlc3BhY2lvcyBlbiBlc3RhIGVudHJhZGEuJywKKwlyZXFDaGtCeU5vZGU6ICdObyBoYXkgZWxlbWVudG9zIHNlbGVjY2lvbmFkb3MuJywKKwlyZXF1aXJlZENoazogJ0VzdGUgY2FtcG8gZXMgb2JsaWdhdG9yaW8uJywKKwlyZXFDaGtCeU5hbWU6ICdQb3IgZmF2b3Igc2VsZWNjaW9uYSB1bmEge2xhYmVsfS4nLAorCW1hdGNoOiAnRXN0ZSBjYW1wbyBuZWNlc2l0YSBjb2luY2lkaXIgY29uIGVsIGNhbXBvIHttYXRjaE5hbWV9JywKKwlzdGFydERhdGU6ICdsYSBmZWNoYSBkZSBpbmljaW8nLAorCWVuZERhdGU6ICdsYSBmZWNoYSBkZSBmaW4nLAorCWN1cnJlbmREYXRlOiAnbGEgZmVjaGEgYWN0dWFsJywKKwlhZnRlckRhdGU6ICdMYSBmZWNoYSBkZWJlIHNlciBpZ3VhbCBvIHBvc3RlcmlvciBhIHtsYWJlbH0uJywKKwliZWZvcmVEYXRlOiAnTGEgZmVjaGEgZGViZSBzZXIgaWd1YWwgbyBhbnRlcmlvciBhIHtsYWJlbH0uJywKKwlzdGFydE1vbnRoOiAnUG9yIGZhdm9yIHNlbGVjY2lvbmEgdW4gbWVzIGRlIG9yaWdlbicsCisJc2FtZU1vbnRoOiAnRXN0YXMgZG9zIGZlY2hhcyBkZWJlbiBlc3RhciBlbiBlbCBtaXNtbyBtZXMgLSBkZWJlcyBjYW1iaWFyIHVuYSB1IG90cmEuJworCit9KTsKKworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5ldC1FRS5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBFc3Rvbmlhbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBLZXZpbiBWYWxkZWsKKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5ldC1FRS5EYXRlXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2V0LUVFJywgJ0RhdGUnLCB7CisKKwltb250aHM6IFsnamFhbnVhcicsICd2ZWVicnVhcicsICdtw6RydHMnLCAnYXByaWxsJywgJ21haScsICdqdXVuaScsICdqdXVsaScsICdhdWd1c3QnLCAnc2VwdGVtYmVyJywgJ29rdG9vYmVyJywgJ25vdmVtYmVyJywgJ2RldHNlbWJlciddLAorCW1vbnRoc19hYmJyOiBbJ2phYW4nLCAndmVlYnInLCAnbcOkcnRzJywgJ2FwcicsICdtYWknLCAnanV1bmknLCAnanV1bGknLCAnYXVnJywgJ3NlcHQnLCAnb2t0JywgJ25vdicsICdkZXRzJ10sCisJZGF5czogWydww7xoYXDDpGV2JywgJ2VzbWFzcMOkZXYnLCAndGVpc2lww6RldicsICdrb2xtYXDDpGV2JywgJ25lbGphcMOkZXYnLCAncmVlZGUnLCAnbGF1cMOkZXYnXSwKKwlkYXlzX2FiYnI6IFsncMO8aGFwJywgJ2VzbWFzcCcsICd0ZWlzaXAnLCAna29sbWFwJywgJ25lbGphcCcsICdyZWVkZScsICdsYXVwJ10sCisKKwkvLyBDdWx0dXJlJ3MgZGF0ZSBvcmRlcjogTU0uREQuWVlZWQorCWRhdGVPcmRlcjogWydtb250aCcsICdkYXRlJywgJ3llYXInXSwKKwlzaG9ydERhdGU6ICclbS4lZC4lWScsCisJc2hvcnRUaW1lOiAnJUg6JU0nLAorCUFNOiAnQU0nLAorCVBNOiAnUE0nLAorCWZpcnN0RGF5T2ZXZWVrOiAxLAorCisJLy8gRGF0ZS5FeHRyYXMKKwlvcmRpbmFsOiAnJywKKworCWxlc3NUaGFuTWludXRlQWdvOiAndsOkaGVtIGt1aSBtaW51dCBhZWdhIHRhZ2FzaScsCisJbWludXRlQWdvOiAndW1iZXMgbWludXQgYWVnYSB0YWdhc2knLAorCW1pbnV0ZXNBZ286ICd7ZGVsdGF9IG1pbnV0aXQgdGFnYXNpJywKKwlob3VyQWdvOiAndW1iZXMgdHVuZCBhZWdhIHRhZ2FzaScsCisJaG91cnNBZ286ICd1bWJlcyB7ZGVsdGF9IHR1bmRpIHRhZ2FzaScsCisJZGF5QWdvOiAnMSBww6RldiB0YWdhc2knLAorCWRheXNBZ286ICd7ZGVsdGF9IHDDpGV2YSB0YWdhc2knLAorCXdlZWtBZ286ICcxIG7DpGRhbCB0YWdhc2knLAorCXdlZWtzQWdvOiAne2RlbHRhfSBuw6RkYWxhdCB0YWdhc2knLAorCW1vbnRoQWdvOiAnMSBrdXUgdGFnYXNpJywKKwltb250aHNBZ286ICd7ZGVsdGF9IGt1dWQgdGFnYXNpJywKKwl5ZWFyQWdvOiAnMSBhYXN0YSB0YWdhc2knLAorCXllYXJzQWdvOiAne2RlbHRhfSBhYXN0YXQgdGFnYXNpJywKKworCWxlc3NUaGFuTWludXRlVW50aWw6ICd2w6RoZW0ga3VpIG1pbnV0aSBhamEgcMOkcmFzdCcsCisJbWludXRlVW50aWw6ICd1bWJlcyBtaW51dGkgYWphIHDDpHJhc3QnLAorCW1pbnV0ZXNVbnRpbDogJ3tkZWx0YX0gbWludXRpIHDDpHJhc3QnLAorCWhvdXJVbnRpbDogJ3VtYmVzIHR1bm5pIGFqYSBww6RyYXN0JywKKwlob3Vyc1VudGlsOiAndW1iZXMge2RlbHRhfSB0dW5uaSBww6RyYXN0JywKKwlkYXlVbnRpbDogJzEgcMOkZXZhIHDDpHJhc3QnLAorCWRheXNVbnRpbDogJ3tkZWx0YX0gcMOkZXZhIHDDpHJhc3QnLAorCXdlZWtVbnRpbDogJzEgbsOkZGFsYSBww6RyYXN0JywKKwl3ZWVrc1VudGlsOiAne2RlbHRhfSBuw6RkYWxhIHDDpHJhc3QnLAorCW1vbnRoVW50aWw6ICcxIGt1dSBww6RyYXN0JywKKwltb250aHNVbnRpbDogJ3tkZWx0YX0ga3V1IHDDpHJhc3QnLAorCXllYXJVbnRpbDogJzEgYWFzdGEgcMOkcmFzdCcsCisJeWVhcnNVbnRpbDogJ3tkZWx0YX0gYWFzdGEgcMOkcmFzdCcKKworfSk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuZXQtRUUuRm9ybS5WYWxpZGF0b3IKKworZGVzY3JpcHRpb246IEZvcm0gVmFsaWRhdG9yIG1lc3NhZ2VzIGZvciBFc3Rvbmlhbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBLZXZpbiBWYWxkZWsKKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5ldC1FRS5Gb3JtLlZhbGlkYXRvcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdldC1FRScsICdGb3JtVmFsaWRhdG9yJywgeworCisJcmVxdWlyZWQ6ICdWw6RsaSBwZWFiIG9sZW1hIHTDpGlkZXR1ZC4nLAorCW1pbkxlbmd0aDogJ1BhbHVuIHNpc2VzdGFnZSB2w6RoZW1hbHQge21pbkxlbmd0aH0gdMOkaHRlICh0ZSBzaXNlc3Rhc2l0ZSB7bGVuZ3RofSB0w6RodGUpLicsCisJbWF4TGVuZ3RoOiAnUGFsdW4gw6RyZ2Ugc2lzZXN0YWdlIHJvaGtlbSBrdWkge21heExlbmd0aH0gdMOkaHRlICh0ZSBzaXNlc3Rhc2l0ZSB7bGVuZ3RofSB0w6RodGUpLicsCisJaW50ZWdlcjogJ1BhbHVuIHNpc2VzdGFnZSB2w6RsamFsZSB0w6Rpc2Fydi4gS8O8bW5lbmRhcnZ1ZCAobsOkaXRla3MgMS4yNSkgZWkgb2xlIGx1YmF0dWQuJywKKwludW1lcmljOiAnUGFsdW4gc2lzZXN0YWdlIGFpbnVsdCBudW1icmVpZCB2w6RsamFsZSAobsOkaXRla3MgIjEiLCAiMS4xIiwgIi0xIiB2w7VpICItMS4xIikuJywKKwlkaWdpdHM6ICdQYWx1biBrYXN1dGFnZSBhaW51bHQgbnVtYnJlaWQgamEga2lyamF2YWhlbcOkcmtlICh0ZWxlZm9uaW51bWJyaSBzaXNlc3RhbWlzZWwgb24gbHViYXR1ZCBrYXN1dGFkYSBrcmlpcHNlIGphIHB1bmt0ZSkuJywKKwlhbHBoYTogJ1BhbHVuIGthc3V0YWdlIGFpbnVsdCB0w6RodGkgKGEteikuIFTDvGhpa3VkIGphIHRlaXNlZCBzw7xtYm9saWQgb24ga2VlbGF0dWQuJywKKwlhbHBoYW51bTogJ1BhbHVuIGthc3V0YWdlIGFpbnVsdCB0w6RodGkgKGEteikgdsO1aSBudW1icmVpZCAoMC05KS4gVMO8aGlrdWQgamEgdGVpc2VkIHPDvG1ib2xpZCBvbiBrZWVsYXR1ZC4nLAorCWRhdGVTdWNoQXM6ICdQYWx1biBzaXNlc3RhZ2Uga2VodGl2IGt1dXDDpGV2IGt1anVsIHtkYXRlfScsCisJZGF0ZUluRm9ybWF0TURZOiAnUGFsdW4gc2lzZXN0YWdlIGtlaHRpdiBrdXVww6RldiBrdWp1bCBNTS5ERC5ZWVlZIChuw6RpdGVrczogIjEyLjMxLjE5OTkiKS4nLAorCWVtYWlsOiAnUGFsdW4gc2lzZXN0YWdlIGtlaHRpdiBlLW1haWxpIGFhZHJlc3MgKG7DpGl0ZWtzOiAiZnJlZEBkb21haW4uY29tIikuJywKKwl1cmw6ICdQYWx1biBzaXNlc3RhZ2Uga2VodGl2IFVSTCAobsOkaXRla3M6IGh0dHA6Ly93d3cuZXhhbXBsZS5jb20pLicsCisJY3VycmVuY3lEb2xsYXI6ICdQYWx1biBzaXNlc3RhZ2Uga2VodGl2ICQgc3VtbWEgKG7DpGl0ZWtzOiAkMTAwLjAwKS4nLAorCW9uZVJlcXVpcmVkOiAnUGFsdW4gc2lzZXN0YWdlIG1pZGFnaSB2w6RoZW1hbHQgw7xoZWxlIGFudHVkIHbDpGxqYWRlc3QuJywKKwllcnJvclByZWZpeDogJ1ZpZ2E6ICcsCisJd2FybmluZ1ByZWZpeDogJ0hvaWF0dXM6ICcsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAnVsOkbGkgZWkgdG9oaSBzaXNhbGRhZGEgdMO8aGlrdWlkLicsCisJcmVxQ2hrQnlOb2RlOiAnw5xrc2tpIHbDpGxqYWRlc3QgcG9sZSB2YWxpdHVkLicsCisJcmVxdWlyZWRDaGs6ICdWw6RsamEgdMOkaXRtaW5lIG9uIHZhamFsaWsuJywKKwlyZXFDaGtCeU5hbWU6ICdQYWx1biB2YWxpZ2Ugw7xrcyB7bGFiZWx9LicsCisJbWF0Y2g6ICdWw6RsaSBwZWFiIHNvYmltYSB7bWF0Y2hOYW1lfSB2w6RsamFnYScsCisJc3RhcnREYXRlOiAnYWxna3V1cMOkZXYnLAorCWVuZERhdGU6ICdsw7VwcGt1dXDDpGV2JywKKwljdXJyZW5kRGF0ZTogJ3ByYWVndW5lIGt1dXDDpGV2JywKKwlhZnRlckRhdGU6ICdLdXVww6RldiBwZWFiIG9sZW1hIHbDtXJkbmUgdsO1aSBww6RyYXN0IHtsYWJlbH0uJywKKwliZWZvcmVEYXRlOiAnS3V1cMOkZXYgcGVhYiBvbGVtYSB2w7VyZG5lIHbDtWkgZW5uZSB7bGFiZWx9LicsCisJc3RhcnRNb250aDogJ1BhbHVuIHZhbGlnZSBhbGdrdXVww6Rldi4nLAorCXNhbWVNb250aDogJ0FudHVkIGtha3Mga3V1cMOkZXZhIHBlYXZhZCBvbGVtYSBzYW1hcyBrdXVzIC0gcGVhdGUgbXV1dG1hIMO8aHRlIGt1dXDDpGV2YS4nCisKK30pOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmZhLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIFBlcnNpYW4uCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQW1pciBIb3NzZWluIEhvZGphdHkgUG91cgorCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmZhLkRhdGVdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZmEnLCAnRGF0ZScsIHsKKworCW1vbnRoczogWyfamNin2YbZiNuM2YcnLCAn2YHZiNix24zZhycsICfZhdin2LHYsycsICfYotm+2LHbjNmEJywgJ9mF2YcnLCAn2pjZiNim2YYnLCAn2pjZiNim24zZhycsICfYotqv2YjYs9iqJywgJ9iz2b7Yqtin2YXYqNixJywgJ9in2qnYqtio2LEnLCAn2YbZiNin2YXYqNixJywgJ9iv2LPYp9mF2KjYsSddLAorCW1vbnRoc19hYmJyOiBbJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJzEwJywgJzExJywgJzEyJ10sCisJZGF5czogWyfbjNqp2LTZhtio2YcnLCAn2K/ZiNi02YbYqNmHJywgJ9iz2Ycg2LTZhtio2YcnLCAn2obZh9in2LHYtNmG2KjZhycsICfZvtmG2KzYtNmG2KjZhycsICfYrNmF2LnZhycsICfYtNmG2KjZhyddLAorCWRheXNfYWJicjogWyfZiicsICfYrycsICfYsycsICfahicsICfZvicsICfYrCcsICfYtCddLAorCisJLy8gQ3VsdHVyZSdzIGRhdGUgb3JkZXI6IE1NL0REL1lZWVkKKwlkYXRlT3JkZXI6IFsnbW9udGgnLCAnZGF0ZScsICd5ZWFyJ10sCisJc2hvcnREYXRlOiAnJW0vJWQvJVknLAorCXNob3J0VGltZTogJyVJOiVNJXAnLAorCUFNOiAn2YIu2LgnLAorCVBNOiAn2Kgu2LgnLAorCisJLy8gRGF0ZS5FeHRyYXMKKwlvcmRpbmFsOiAn2KfZhScsCisKKwlsZXNzVGhhbk1pbnV0ZUFnbzogJ9qp2YXYqtixINin2LIg24zaqSDYr9mC24zZgtmHINm+24zYtCcsCisJbWludXRlQWdvOiAn2K3Yr9mI2K8g24zaqSDYr9mC24zZgtmHINm+24zYtCcsCisJbWludXRlc0FnbzogJ3tkZWx0YX0g2K/ZgtuM2YLZhyDZvtuM2LQnLAorCWhvdXJBZ286ICfYrdiv2YjYryDbjNqpINiz2KfYudiqINm+24zYtCcsCisJaG91cnNBZ286ICfYrdiv2YjYryB7ZGVsdGF9INiz2KfYudiqINm+24zYtCcsCisJZGF5QWdvOiAnMSDYsdmI2LIg2b7bjNi0JywKKwlkYXlzQWdvOiAne2RlbHRhfSDYsdmI2LIg2b7bjNi0JywKKwl3ZWVrQWdvOiAnMSDZh9mB2KrZhyDZvtuM2LQnLAorCXdlZWtzQWdvOiAne2RlbHRhfSDZh9mB2KrZhyDZvtuM2LQnLAorCW1vbnRoQWdvOiAnMSDZhdin2Ycg2b7bjNi0JywKKwltb250aHNBZ286ICd7ZGVsdGF9INmF2KfZhyDZvtuM2LQnLAorCXllYXJBZ286ICcxINiz2KfZhCDZvtuM2LQnLAorCXllYXJzQWdvOiAne2RlbHRhfSDYs9in2YQg2b7bjNi0JywKKworCWxlc3NUaGFuTWludXRlVW50aWw6ICfaqdmF2KrYsSDYp9iyINuM2qkg2K/ZgtuM2YLZhyDYp9iyINit2KfZhNinJywKKwltaW51dGVVbnRpbDogJ9it2K/ZiNivINuM2qkg2K/ZgtuM2YLZhyDYp9iyINit2KfZhNinJywKKwltaW51dGVzVW50aWw6ICd7ZGVsdGF9INiv2YLbjNmC2Ycg2KfYsiDYrdin2YTYpycsCisJaG91clVudGlsOiAn2K3Yr9mI2K8g24zaqSDYs9in2LnYqiDYp9iyINit2KfZhNinJywKKwlob3Vyc1VudGlsOiAn2K3Yr9mI2K8ge2RlbHRhfSDYs9in2LnYqiDYp9iyINit2KfZhNinJywKKwlkYXlVbnRpbDogJzEg2LHZiNiyINin2LIg2K3Yp9mE2KcnLAorCWRheXNVbnRpbDogJ3tkZWx0YX0g2LHZiNiyINin2LIg2K3Yp9mE2KcnLAorCXdlZWtVbnRpbDogJzEg2YfZgdiq2Ycg2KfYsiDYrdin2YTYpycsCisJd2Vla3NVbnRpbDogJ3tkZWx0YX0g2YfZgdiq2Ycg2KfYsiDYrdin2YTYpycsCisJbW9udGhVbnRpbDogJzEg2YXYp9mHINin2LIg2K3Yp9mE2KcnLAorCW1vbnRoc1VudGlsOiAne2RlbHRhfSDZhdin2Ycg2KfYsiDYrdin2YTYpycsCisJeWVhclVudGlsOiAnMSDYs9in2YQg2KfYsiDYrdin2YTYpycsCisJeWVhcnNVbnRpbDogJ3tkZWx0YX0g2LPYp9mEINin2LIg2K3Yp9mE2KcnCisKK30pOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmZhLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgUGVyc2lhbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBbWlyIEhvc3NlaW4gSG9kamF0eSBQb3VyCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZmEuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZmEnLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAn2KfbjNmGINmB24zZhNivINin2YTYstin2YXbjCDYp9iz2KouJywKKwltaW5MZW5ndGg6ICfYtNmF2Kcg2KjYp9uM2K8g2K3Yr9in2YLZhCB7bWluTGVuZ3RofSDYrdix2YEg2YjYp9ix2K8g2qnZhtuM2K8gKHtsZW5ndGh9INit2LHZgSDZiNin2LHYryDaqdix2K/ZhyDYp9uM2K8pLicsCisJbWF4TGVuZ3RoOiAn2YTYt9mB2Kcg2K3Yr9in2qnYq9ixIHttYXhMZW5ndGh9INit2LHZgSDZiNin2LHYryDaqdmG24zYryAo2LTZhdinIHtsZW5ndGh9INit2LHZgSDZiNin2LHYryDaqdix2K/ZhyDYp9uM2K8pLicsCisJaW50ZWdlcjogJ9mE2LfZgdinINin2LIg2LnYr9ivINi12K3bjNitINin2LPYqtmB2KfYr9mHINqp2YbbjNivLiDYp9i52K/Yp9ivINin2LnYtNin2LHbjCAo2YXYp9mG2YbYryAxLjI1KSDZhdis2KfYsiDZhtuM2LPYqtmG2K8uJywKKwludW1lcmljOiAn2YTYt9mB2Kcg2YHZgti3INiv2KfYr9mHINi52K/Yr9uMINmI2KfYsdivINqp2YbbjNivICjZhdin2YbZhtivICIxIiDbjNinICIxLjEiINuM2KcgIjEtIiDbjNinICIxLjEtIikuJywKKwlkaWdpdHM6ICfZhNi32YHYpyDZgdmC2Lcg2KfYsiDYp9i52K/Yp9ivINmIINi52YTYp9mF2KrZh9inINiv2LEg2KfbjNmGINmB24zZhNivINin2LPYqtmB2KfYr9mHINqp2YbbjNivICjYqNix2KfbjCDZhdir2KfZhCDYtNmF2KfYsdmHINiq2YTZgdmGINio2Kcg2K7YtyDYqtuM2LHZhyDZiCDZhtmC2LfZhyDZgtin2KjZhCDZgtio2YjZhCDYp9iz2KopLicsCisJYWxwaGE6ICfZhNi32YHYpyDZgdmC2Lcg2KfYsiDYrdix2YjZgSDYp9mE2YHYqNin2KEg2KjYsdin24wg2KfbjNmGINio2K7YtCDYp9iz2KrZgdin2K/ZhyDaqdmG24zYry4g2qnYp9ix2Kfaqdiq2LHZh9in24wg2K/bjNqv2LEg2Ygg2YHYp9i12YTZhyDZhdis2KfYsiDZhtuM2LPYqtmG2K8uJywKKwlhbHBoYW51bTogJ9mE2LfZgdinINmB2YLYtyDYp9iyINit2LHZiNmBINin2YTZgdio2KfYoSDZiCDYp9i52K/Yp9ivINiv2LEg2KfbjNmGINio2K7YtCDYp9iz2KrZgdin2K/ZhyDaqdmG24zYry4g2qnYp9ix2Kfaqdiq2LHZh9in24wg2K/bjNqv2LEg2Ygg2YHYp9i12YTZhyDZhdis2KfYsiDZhtuM2LPYqtmG2K8uJywKKwlkYXRlU3VjaEFzOiAn2YTYt9mB2Kcg24zaqSDYqtin2LHbjNiuINmF2LnYqtio2LEg2YXYp9mG2YbYryB7ZGF0ZX0g2YjYp9ix2K8g2qnZhtuM2K8uJywKKwlkYXRlSW5Gb3JtYXRNRFk6ICfZhNi32YHYpyDbjNqpINiq2KfYsduM2K4g2YXYudiq2KjYsSDYqNmHINi02qnZhCBNTS9ERC9ZWVlZINmI2KfYsdivINqp2YbbjNivICjZhdin2YbZhtivICIxMi8zMS8xOTk5IikuJywKKwllbWFpbDogJ9mE2LfZgdinINuM2qkg2KLYr9ix2LMg2KfbjNmF24zZhCDZhdi52KrYqNixINmI2KfYsdivINqp2YbbjNivLiDYqNix2KfbjCDZhdir2KfZhCAiZnJlZEBkb21haW4uY29tIi4nLAorCXVybDogJ9mE2LfZgdinINuM2qkgVVJMINmF2LnYqtio2LEg2YXYp9mG2YbYryBodHRwOi8vd3d3LmV4YW1wbGUuY29tINmI2KfYsdivINqp2YbbjNivLicsCisJY3VycmVuY3lEb2xsYXI6ICfZhNi32YHYpyDbjNqpINmF2K3Yr9mI2K/ZhyDZhdi52KrYqNixINio2LHYp9uMINin24zZhiDYqNiu2LQg2YjYp9ix2K8g2qnZhtuM2K8g2YXYp9mG2YbYryAxMDAuMDAkIC4nLAorCW9uZVJlcXVpcmVkOiAn2YTYt9mB2Kcg2K3Yr9in2YLZhCDbjNqp24wg2KfYsiDZgduM2YTYr9mH2Kcg2LHYpyDZvtixINqp2YbbjNivLicsCisJZXJyb3JQcmVmaXg6ICfYrti32Kc6ICcsCisJd2FybmluZ1ByZWZpeDogJ9mH2LTYr9in2LE6ICcsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAn2KfYs9iq2YHYp9iv2Ycg2KfYsiDZgdin2LXZhNmHINiv2LEg2KfbjNmGINio2K7YtCDZhdis2KfYsiDZhtuM2LPYqi4nLAorCXJlcUNoa0J5Tm9kZTogJ9mF2YjYsdiv24wg2KfZhtiq2K7Yp9ioINmG2LTYr9mHINin2LPYqi4nLAorCXJlcXVpcmVkQ2hrOiAn2KfbjNmGINmB24zZhNivINin2YTYstin2YXbjCDYp9iz2KouJywKKwlyZXFDaGtCeU5hbWU6ICfZhNi32YHYpyDbjNqpIHtsYWJlbH0g2LHYpyDYp9mG2KrYrtin2Kgg2qnZhtuM2K8uJywKKwltYXRjaDogJ9in24zZhiDZgduM2YTYryDYqNin24zYryDYqNinINmB24zZhNivIHttYXRjaE5hbWV9INmF2LfYp9io2YLYqiDYr9in2LTYqtmHINio2KfYtNivLicsCisJc3RhcnREYXRlOiAn2KrYp9ix24zYriDYtNix2YjYuScsCisJZW5kRGF0ZTogJ9iq2KfYsduM2K4g2b7Yp9uM2KfZhicsCisJY3VycmVuZERhdGU6ICfYqtin2LHbjNiuINqp2YbZiNmG24wnLAorCWFmdGVyRGF0ZTogJ9iq2KfYsduM2K4g2YXbjNio2KfbjNiz2Kog2KjYsdin2KjYsSDbjNinINio2LnYryDYp9iyIHtsYWJlbH0g2KjYp9i02K8nLAorCWJlZm9yZURhdGU6ICfYqtin2LHbjNiuINmF24zYqNin24zYs9iqINio2LHYp9io2LEg24zYpyDZgtio2YQg2KfYsiB7bGFiZWx9INio2KfYtNivJywKKwlzdGFydE1vbnRoOiAn2YTYt9mB2Kcg2YXYp9mHINi02LHZiNi5INix2Kcg2KfZhtiq2K7Yp9ioINqp2YbbjNivJywKKwlzYW1lTW9udGg6ICfYp9uM2YYg2K/ZiCDYqtin2LHbjNiuINio2KfbjNivINiv2LEg24zaqSDZhdin2Ycg2KjYp9i02YbYryAtINi02YXYpyDYqNin24zYryDbjNqp24wg24zYpyDZh9ixINiv2Ygg2LHYpyDYqti624zbjNixINiv2YfbjNivLicsCisJY3JlZGl0Y2FyZDogJ9i02YXYp9ix2Ycg2qnYp9ix2Kog2KfYudiq2KjYp9ix24wg2qnZhyDZiNin2LHYryDaqdix2K/ZhyDYp9uM2K8g2YXYudiq2KjYsSDZhtuM2LPYqi4g2YTYt9mB2Kcg2LTZhdin2LHZhyDYsdinINio2LHYsdiz24wg2qnZhtuM2K8g2Ygg2YXYrNiv2K/YpyDYqtmE2KfYtCDaqdmG24zYry4ge2xlbmd0aH0g2LHZgtmFINmI2KfYsdivINi02K/ZhyDYp9iz2KouJworCit9KTsKKworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5maS1GSS5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBGaW5uaXNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIGtzZWwKKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5maS1GSS5EYXRlXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2ZpLUZJJywgJ0RhdGUnLCB7CisKKwkvLyBOT1RFOiBtb250aHMgYW5kIGRheXMgYXJlIG5vdCBjYXBpdGFsaXplZCBpbiBmaW5uaXNoCisJbW9udGhzOiBbJ3RhbW1pa3V1JywgJ2hlbG1pa3V1JywgJ21hYWxpc2t1dScsICdodWh0aWt1dScsICd0b3Vrb2t1dScsICdrZXPDpGt1dScsICdoZWluw6RrdXUnLCAnZWxva3V1JywgJ3N5eXNrdXUnLCAnbG9rYWt1dScsICdtYXJyYXNrdXUnLCAnam91bHVrdXUnXSwKKworCS8vIHRoZXNlIGFiYnJldmlhdGlvbnMgYXJlIHJlYWxseSBub3QgbXVjaCB1c2VkIGluIGZpbm5pc2ggYmVjYXVzZSB0aGV5IG9idmlvdXNseSB3b24ndCBhYmJyZXZpYXRlIHZlcnkgbXVjaC4gOykKKwkvLyBOT1RFOiBzb21ldGltZXMgb25lIGNhbiBzZWUgZm9ybXMgc3VjaCBhcyAidGFtbWkiLCAiaGVsbWkiLCBldGMuIGJ1dCB0aGF0IGlzIG5vdCBwcm9wZXIgZmlubmlzaC4KKwltb250aHNfYWJicjogWyd0YW1taWsuJywgJ2hlbG1pay4nLCAnbWFhbGlzay4nLCAnaHVodGlrLicsICd0b3Vrb2suJywgJ2tlc8Okay4nLCAnaGVpbsOkay4nLCAnZWxvay4nLCAnc3l5c2suJywgJ2xva2FrLicsICdtYXJyYXNrLicsICdqb3VsdWsuJ10sCisKKwlkYXlzOiBbJ3N1bm51bnRhaScsICdtYWFuYW50YWknLCAndGlpc3RhaScsICdrZXNraXZpaWtrbycsICd0b3JzdGFpJywgJ3BlcmphbnRhaScsICdsYXVhbnRhaSddLAorCWRheXNfYWJicjogWydzdScsICdtYScsICd0aScsICdrZScsICd0bycsICdwZScsICdsYSddLAorCisJLy8gQ3VsdHVyZSdzIGRhdGUgb3JkZXI6IEREL01NL1lZWVkKKwlkYXRlT3JkZXI6IFsnZGF0ZScsICdtb250aCcsICd5ZWFyJ10sCisJc2hvcnREYXRlOiAnJWQuJW0uJVknLAorCXNob3J0VGltZTogJyVIOiVNJywKKwlBTTogJ0FNJywKKwlQTTogJ1BNJywKKwlmaXJzdERheU9mV2VlazogMSwKKworCS8vIERhdGUuRXh0cmFzCisJb3JkaW5hbDogJy4nLAorCisJbGVzc1RoYW5NaW51dGVBZ286ICd2YWphYSBtaW51dXR0aSBzaXR0ZW4nLAorCW1pbnV0ZUFnbzogJ25vaW4gbWludXV0dGkgc2l0dGVuJywKKwltaW51dGVzQWdvOiAne2RlbHRhfSBtaW51dXR0aWEgc2l0dGVuJywKKwlob3VyQWdvOiAnbm9pbiB0dW50aSBzaXR0ZW4nLAorCWhvdXJzQWdvOiAnbm9pbiB7ZGVsdGF9IHR1bnRpYSBzaXR0ZW4nLAorCWRheUFnbzogJ3DDpGl2w6Qgc2l0dGVuJywKKwlkYXlzQWdvOiAne2RlbHRhfSBww6RpdsOkw6Qgc2l0dGVuJywKKwl3ZWVrQWdvOiAndmlpa2tvIHNpdHRlbicsCisJd2Vla3NBZ286ICd7ZGVsdGF9IHZpaWtrb2Egc2l0dGVuJywKKwltb250aEFnbzogJ2t1dWthdXNpIHNpdHRlbicsCisJbW9udGhzQWdvOiAne2RlbHRhfSBrdXVrYXV0dGEgc2l0dGVuJywKKwl5ZWFyQWdvOiAndnVvc2kgc2l0dGVuJywKKwl5ZWFyc0FnbzogJ3tkZWx0YX0gdnVvdHRhIHNpdHRlbicsCisKKwlsZXNzVGhhbk1pbnV0ZVVudGlsOiAndmFqYWFuIG1pbnV1dGluIGt1bHV0dHVhJywKKwltaW51dGVVbnRpbDogJ25vaW4gbWludXV0aW4ga3VsdXR0dWEnLAorCW1pbnV0ZXNVbnRpbDogJ3tkZWx0YX0gbWludXV0aW4ga3VsdXR0dWEnLAorCWhvdXJVbnRpbDogJ25vaW4gdHVubmluIGt1bHV0dHVhJywKKwlob3Vyc1VudGlsOiAnbm9pbiB7ZGVsdGF9IHR1bm5pbiBrdWx1dHR1YScsCisJZGF5VW50aWw6ICdww6RpdsOkbiBrdWx1dHR1YScsCisJZGF5c1VudGlsOiAne2RlbHRhfSBww6RpdsOkbiBrdWx1dHR1YScsCisJd2Vla1VudGlsOiAndmlpa29uIGt1bHV0dHVhJywKKwl3ZWVrc1VudGlsOiAne2RlbHRhfSB2aWlrb24ga3VsdXR0dWEnLAorCW1vbnRoVW50aWw6ICdrdXVrYXVkZW4ga3VsdXR0dWEnLAorCW1vbnRoc1VudGlsOiAne2RlbHRhfSBrdXVrYXVkZW4ga3VsdXR0dWEnLAorCXllYXJVbnRpbDogJ3Z1b2RlbiBrdWx1dHR1YScsCisJeWVhcnNVbnRpbDogJ3tkZWx0YX0gdnVvZGVuIGt1bHV0dHVhJworCit9KTsKKworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5maS1GSS5Gb3JtLlZhbGlkYXRvcgorCitkZXNjcmlwdGlvbjogRm9ybSBWYWxpZGF0b3IgbWVzc2FnZXMgZm9yIEZpbm5pc2guCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0ga3NlbAorCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmZpLUZJLkZvcm0uVmFsaWRhdG9yXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2ZpLUZJJywgJ0Zvcm1WYWxpZGF0b3InLCB7CisKKwlyZXF1aXJlZDogJ1TDpG3DpCBrZW50dMOkIG9uIHBha29sbGluZW4uJywKKwltaW5MZW5ndGg6ICdPbGUgaHl2w6QgamEgYW5uYSB2w6RoaW50w6TDpG4ge21pbkxlbmd0aH0gbWVya2tpw6QgKGFubm9pdCB7bGVuZ3RofSBtZXJra2nDpCkuJywKKwltYXhMZW5ndGg6ICfDhGzDpCBhbm5hIGVuZW1ww6TDpCBrdWluIHttYXhMZW5ndGh9IG1lcmtracOkIChhbm5vaXQge2xlbmd0aH0gbWVya2tpw6QpLicsCisJaW50ZWdlcjogJ09sZSBoeXbDpCBqYSBhbm5hIGtva29uYWlzbHVrdS4gTHV2dXQsIGpvaXNzYSBvbiBkZXNpbWFhbGVqYSAoZXNpbS4gMS4yNSkgZWl2w6R0IG9sZSBzYWxsaXR0dWphLicsCisJbnVtZXJpYzogJ0FubmEgdMOkaMOkbiBrZW50dMOkw6RuIGx1a3VhcnZvIChrdXRlbiAiMSIgdGFpICIxLjEiIHRhaSAiLTEiIHRhaSAiLTEuMSIpLicsCisJZGlnaXRzOiAnS8OkeXTDpCBwZWxrw6RzdMOkw6RuIG51bWVyb2l0YSBqYSB2w6RsaW1lcmtrZWrDpCB0w6Rzc8OkIGtlbnTDpHNzw6QgKHN5w7Z0dGVldCwga3V0ZW4gZXNpbS4gcHVoZWxpbm51bWVybywgam9zc2Egb24gdsOkbGl2aWl2b2phLCBwaWxra3VqYSB0YWkgcGlzdGVpdMOkLCBrZWxwYWEpLicsCisJYWxwaGE6ICdBbm5hIHTDpGjDpG4ga2VudHTDpMOkbiB2YWluIGtpcmphaW1pYSAoYS16KS4gVsOkbGlsecO2bm5pdCB0YWkgbXV1dCBtZXJraXQgZWl2w6R0IG9sZSBzYWxsaXR0dWphLicsCisJYWxwaGFudW06ICdBbm5hIHTDpGjDpG4ga2VudHTDpMOkbiB2YWluIGtpcmphaW1pYSAoYS16KSB0YWkgbnVtZXJvaXRhICgwLTkpLiBWw6RsaWx5w7Zubml0IHRhaSBtdXV0IG1lcmtpdCBlaXbDpHQgb2xlIHNhbGxpdHR1amEuJywKKwlkYXRlU3VjaEFzOiAnT2xlIGh5dsOkIGphIGFubmEga2Vsdm9sbGluZW4gcMOkaXZtw6TDpHLDpCwga3V0ZW4gZXNpbWVya2lrc2kge2RhdGV9JywKKwlkYXRlSW5Gb3JtYXRNRFk6ICdPbGUgaHl2w6QgamEgYW5uYSBrZWx2b2xsaW5lbiBww6RpdsOkbcOkw6Ryw6QgbXVvZG9zc2EgcHAva2svdnZ2diAoa3V0ZW4gIjEyLzMxLzE5OTkiKScsCisJZW1haWw6ICdPbGUgaHl2w6QgamEgYW5uYSBrZWx2b2xsaW5lbiBzw6Roa8O2cG9zdGlvc29pdGUgKGt1dGVuIGVzaW1lcmtpa3NpICJtYXR0aUBtZWlrYWxhaW5lbi5jb20iKS4nLAorCXVybDogJ09sZSBoeXbDpCBqYSBhbm5hIGtlbHZvbGxpbmVuIFVSTCwga3V0ZW4gZXNpbWVya2lrc2kgaHR0cDovL3d3dy5leGFtcGxlLmNvbS4nLAorCWN1cnJlbmN5RG9sbGFyOiAnT2xlIGh5dsOkIGphIGFubmEga2Vsdm9sbGluZW4gZXVyb3N1bW1hIChrdXRlbiBlc2ltZXJraWtzaSAxMDAsMDAgRVVSKSAuJywKKwlvbmVSZXF1aXJlZDogJ09sZSBoeXbDpCBqYSBzecO2dMOkIGpvdGFraW4gYWluYWtpbiBqb2hvbmtpbiBuw6Rpc3TDpCBrZW50aXN0w6QuJywKKwllcnJvclByZWZpeDogJ1ZpcmhlOiAnLAorCXdhcm5pbmdQcmVmaXg6ICdWYXJvaXR1czogJywKKworCS8vIEZvcm0uVmFsaWRhdG9yLkV4dHJhcworCW5vU3BhY2U6ICdUw6Rzc8OkIHN5w7Z0dGVlc3PDpCBlaSB2b2kgb2xsYSB2w6RsaWx5w7ZudGVqw6QnLAorCXJlcUNoa0J5Tm9kZTogJ0VpIHZhbGludG9qYS4nLAorCXJlcXVpcmVkQ2hrOiAnVMOkbcOkIGtlbnR0w6Qgb24gcGFrb2xsaW5lbi4nLAorCXJlcUNoa0J5TmFtZTogJ09sZSBoeXbDpCBqYSB2YWxpdHNlIHtsYWJlbH0uJywKKwltYXRjaDogJ1TDpG3DpG4ga2VudMOkbiB0dWxlZSB2YXN0YXRhIGtlbnR0w6TDpCB7bWF0Y2hOYW1lfScsCisJc3RhcnREYXRlOiAnYWxrdXDDpGl2w6Rtw6TDpHLDpCcsCisJZW5kRGF0ZTogJ2xvcHB1cMOkaXbDpG3DpMOkcsOkJywKKwljdXJyZW5kRGF0ZTogJ255a3lpbmVuIHDDpGl2w6Rtw6TDpHLDpCcsCisJYWZ0ZXJEYXRlOiAnUMOkaXbDpG3DpMOkcsOkbiB0dWxpc2kgb2xsYSBzYW1hIHRhaSBtecO2aMOkaXNlbXBpIGFqYW5rb2h0YSBrdWluIHtsYWJlbH0uJywKKwliZWZvcmVEYXRlOiAnUMOkaXbDpG3DpMOkcsOkbiB0dWxpc2kgb2xsYSBzYW1hIHRhaSBhaWthaXNlbXBpIGFqYW5rb2h0YSBrdWluIHtsYWJlbH0uJywKKwlzdGFydE1vbnRoOiAnT2xlIGh5dsOkIGphIHZhbGl0c2UgYWxvaXR1c2t1dWthdXNpJywKKwlzYW1lTW9udGg6ICdOw6RpZGVuIGthaGRlbiBww6RpdsOkbcOkw6Ryw6RuIHR1bGVlIG9sbGEgc2FtYW4ga3V1biBzaXPDpGxsw6QgLS0gc2ludW4gcGl0w6TDpCBtdXV0dGFhIGpvbXBhYSBrdW1wYWEuJywKKwljcmVkaXRjYXJkOiAnQW5uZXR0dSBsdW90dG9rb3J0aW4gbnVtZXJvIGVpIGtlbHBhYS4gT2xlIGh5dsOkIGphIHRhcmtpc3RhIG51bWVybyBzZWvDpCB5cml0w6QgdXVkZWxsZWVuLiB7bGVuZ3RofSBudW1lcm9hIHN5w7Z0ZXR0eS4nCisKK30pOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmZpLUZJLk51bWJlcgorCitkZXNjcmlwdGlvbjogRmlubmlzaCBudW1iZXIgbWVzc2FnZXMKKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBrc2VsCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKyAgLSAvTG9jYWxlLkVVLk51bWJlcgorCitwcm92aWRlczogW0xvY2FsZS5maS1GSS5OdW1iZXJdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZmktRkknLCAnTnVtYmVyJywgeworCisJZ3JvdXA6ICcgJyAvLyBncm91cGVkIGJ5IHNwYWNlCisKK30pLmluaGVyaXQoJ0VVJywgJ051bWJlcicpOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmZyLUZSLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIEZyZW5jaC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBOaWNvbGFzIFNvcm9zYWMKKyAgLSBBbnRvaW5lIEFidAorCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmZyLUZSLkRhdGVdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZnItRlInLCAnRGF0ZScsIHsKKworCW1vbnRoczogWydKYW52aWVyJywgJ0bDqXZyaWVyJywgJ01hcnMnLCAnQXZyaWwnLCAnTWFpJywgJ0p1aW4nLCAnSnVpbGxldCcsICdBb8O7dCcsICdTZXB0ZW1icmUnLCAnT2N0b2JyZScsICdOb3ZlbWJyZScsICdEw6ljZW1icmUnXSwKKwltb250aHNfYWJicjogWydqYW52LicsICdmw6l2ci4nLCAnbWFycycsICdhdnIuJywgJ21haScsICdqdWluJywgJ2p1aWwuJywgJ2Fvw7t0JywgJ3NlcHQuJywgJ29jdC4nLCAnbm92LicsICdkw6ljLiddLAorCWRheXM6IFsnRGltYW5jaGUnLCAnTHVuZGknLCAnTWFyZGknLCAnTWVyY3JlZGknLCAnSmV1ZGknLCAnVmVuZHJlZGknLCAnU2FtZWRpJ10sCisJZGF5c19hYmJyOiBbJ2RpbS4nLCAnbHVuLicsICdtYXIuJywgJ21lci4nLCAnamV1LicsICd2ZW4uJywgJ3NhbS4nXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBERC9NTS9ZWVlZCisJZGF0ZU9yZGVyOiBbJ2RhdGUnLCAnbW9udGgnLCAneWVhciddLAorCXNob3J0RGF0ZTogJyVkLyVtLyVZJywKKwlzaG9ydFRpbWU6ICclSDolTScsCisJQU06ICdBTScsCisJUE06ICdQTScsCisJZmlyc3REYXlPZldlZWs6IDEsCisKKwkvLyBEYXRlLkV4dHJhcworCW9yZGluYWw6IGZ1bmN0aW9uKGRheU9mTW9udGgpeworCQlyZXR1cm4gKGRheU9mTW9udGggPiAxKSA/ICcnIDogJ2VyJzsKKwl9LAorCisJbGVzc1RoYW5NaW51dGVBZ286ICJpbCB5IGEgbW9pbnMgZCd1bmUgbWludXRlIiwKKwltaW51dGVBZ286ICdpbCB5IGEgdW5lIG1pbnV0ZScsCisJbWludXRlc0FnbzogJ2lsIHkgYSB7ZGVsdGF9IG1pbnV0ZXMnLAorCWhvdXJBZ286ICdpbCB5IGEgdW5lIGhldXJlJywKKwlob3Vyc0FnbzogJ2lsIHkgYSB7ZGVsdGF9IGhldXJlcycsCisJZGF5QWdvOiAnaWwgeSBhIHVuIGpvdXInLAorCWRheXNBZ286ICdpbCB5IGEge2RlbHRhfSBqb3VycycsCisJd2Vla0FnbzogJ2lsIHkgYSB1bmUgc2VtYWluZScsCisJd2Vla3NBZ286ICdpbCB5IGEge2RlbHRhfSBzZW1haW5lcycsCisJbW9udGhBZ286ICdpbCB5IGEgMSBtb2lzJywKKwltb250aHNBZ286ICdpbCB5IGEge2RlbHRhfSBtb2lzJywKKwl5ZWFydGhBZ286ICdpbCB5IGEgMSBhbicsCisJeWVhcnNBZ286ICdpbCB5IGEge2RlbHRhfSBhbnMnLAorCisJbGVzc1RoYW5NaW51dGVVbnRpbDogImRhbnMgbW9pbnMgZCd1bmUgbWludXRlIiwKKwltaW51dGVVbnRpbDogJ2RhbnMgdW5lIG1pbnV0ZScsCisJbWludXRlc1VudGlsOiAnZGFucyB7ZGVsdGF9IG1pbnV0ZXMnLAorCWhvdXJVbnRpbDogJ2RhbnMgdW5lIGhldXJlJywKKwlob3Vyc1VudGlsOiAnZGFucyB7ZGVsdGF9IGhldXJlcycsCisJZGF5VW50aWw6ICdkYW5zIHVuIGpvdXInLAorCWRheXNVbnRpbDogJ2RhbnMge2RlbHRhfSBqb3VycycsCisJd2Vla1VudGlsOiAnZGFucyAxIHNlbWFpbmUnLAorCXdlZWtzVW50aWw6ICdkYW5zIHtkZWx0YX0gc2VtYWluZXMnLAorCW1vbnRoVW50aWw6ICdkYW5zIDEgbW9pcycsCisJbW9udGhzVW50aWw6ICdkYW5zIHtkZWx0YX0gbW9pcycsCisJeWVhclVudGlsOiAnZGFucyAxIGFuJywKKwl5ZWFyc1VudGlsOiAnZGFucyB7ZGVsdGF9IGFucycKKworfSk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuZnItRlIuRm9ybS5WYWxpZGF0b3IKKworZGVzY3JpcHRpb246IEZvcm0gVmFsaWRhdG9yIG1lc3NhZ2VzIGZvciBGcmVuY2guCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gTWlxdWVsIEh1ZGluCisgIC0gTmljb2xhcyBTb3Jvc2FjCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZnItRlIuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZnItRlInLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAnQ2UgY2hhbXAgZXN0IG9ibGlnYXRvaXJlLicsCisJbWluTGVuZ3RoOiAnVmV1aWxsZXogc2Fpc2lyIHVuIG1pbmltdW0gZGUge21pbkxlbmd0aH0gY2FyYWN0JmVncmF2ZTtyZShzKSAodm91cyBhdmV6IHNhaXNpIHtsZW5ndGh9IGNhcmFjdCZlZ3JhdmU7cmUocykpLicsCisJbWF4TGVuZ3RoOiAnVmV1aWxsZXogc2Fpc2lyIHVuIG1heGltdW0gZGUge21heExlbmd0aH0gY2FyYWN0JmVncmF2ZTtyZShzKSAodm91cyBhdmV6IHNhaXNpIHtsZW5ndGh9IGNhcmFjdCZlZ3JhdmU7cmUocykpLicsCisJaW50ZWdlcjogJ1ZldWlsbGV6IHNhaXNpciB1biBub21icmUgZW50aWVyIGRhbnMgY2UgY2hhbXAuIExlcyBub21icmVzIGQmZWFjdXRlO2NpbWF1eCAoZXggOiAiMSwyNSIpIG5lIHNvbnQgcGFzIGF1dG9yaXMmZWFjdXRlO3MuJywKKwludW1lcmljOiAnVmV1aWxsZXogc2Fpc2lyIHVuaXF1ZW1lbnQgZGVzIGNoaWZmcmVzIGRhbnMgY2UgY2hhbXAgKGV4IDogIjEiIG91ICIxLDEiIG91ICItMSIgb3UgIi0xLDEiKS4nLAorCWRpZ2l0czogIlZldWlsbGV6IHNhaXNpciB1bmlxdWVtZW50IGRlcyBjaGlmZnJlcyBldCBkZXMgc2lnbmVzIGRlIHBvbmN0dWF0aW9uIGRhbnMgY2UgY2hhbXAgKGV4IDogdW4gbnVtJmVhY3V0ZTtybyBkZSB0JmVhY3V0ZTtsJmVhY3V0ZTtwaG9uZSBhdmVjIGRlcyB0cmFpdHMgZCd1bmlvbiBlc3QgYXV0b3JpcyZlYWN1dGU7KS4iLAorCWFscGhhOiAnVmV1aWxsZXogc2Fpc2lyIHVuaXF1ZW1lbnQgZGVzIGxldHRyZXMgKGEteikgZGFucyBjZSBjaGFtcC4gTGVzIGVzcGFjZXMgb3UgYXV0cmVzIGNhcmFjdCZlZ3JhdmU7cmVzIG5lIHNvbnQgcGFzIGF1dG9yaXMmZWFjdXRlO3MuJywKKwlhbHBoYW51bTogJ1ZldWlsbGV6IHNhaXNpciB1bmlxdWVtZW50IGRlcyBsZXR0cmVzIChhLXopIG91IGRlcyBjaGlmZnJlcyAoMC05KSBkYW5zIGNlIGNoYW1wLiBMZXMgZXNwYWNlcyBvdSBhdXRyZXMgY2FyYWN0JmVncmF2ZTtyZXMgbmUgc29udCBwYXMgYXV0b3JpcyZlYWN1dGU7cy4nLAorCWRhdGVTdWNoQXM6ICdWZXVpbGxleiBzYWlzaXIgdW5lIGRhdGUgY29ycmVjdGUgY29tbWUge2RhdGV9JywKKwlkYXRlSW5Gb3JtYXRNRFk6ICdWZXVpbGxleiBzYWlzaXIgdW5lIGRhdGUgY29ycmVjdGUsIGF1IGZvcm1hdCBKSi9NTS9BQUFBIChleCA6ICIzMS8xMS8xOTk5IikuJywKKwllbWFpbDogJ1ZldWlsbGV6IHNhaXNpciB1bmUgYWRyZXNzZSBkZSBjb3VycmllciAmZWFjdXRlO2xlY3Ryb25pcXVlLiBQYXIgZXhhbXBsZSAiZnJlZEBkb21haW5lLmNvbSIuJywKKwl1cmw6ICdWZXVpbGxleiBzYWlzaXIgdW5lIFVSTCwgY29tbWUgaHR0cDovL3d3dy5leGFtcGxlLmNvbS4nLAorCWN1cnJlbmN5RG9sbGFyOiAnVmV1aWxsZXogc2Fpc2lyIHVuZSBxdWFudGl0JmVhY3V0ZTsgY29ycmVjdGUuIFBhciBleGFtcGxlIDEwMCwwMCZldXJvOy4nLAorCW9uZVJlcXVpcmVkOiAnVmV1aWxsZXogcyZlYWN1dGU7bGVjdGlvbm5lciBhdSBtb2lucyB1bmUgZGUgY2VzIG9wdGlvbnMuJywKKwllcnJvclByZWZpeDogJ0VycmV1ciA6ICcsCisJd2FybmluZ1ByZWZpeDogJ0F0dGVudGlvbiA6ICcsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAiQ2UgY2hhbXAgbidhY2NlcHRlIHBhcyBsZXMgZXNwYWNlcy4iLAorCXJlcUNoa0J5Tm9kZTogIkF1Y3VuICZlYWN1dGU7bCZlYWN1dGU7bWVudCBuJ2VzdCBzJmVhY3V0ZTtsZWN0aW9ubiZlYWN1dGU7LiIsCisJcmVxdWlyZWRDaGs6ICdDZSBjaGFtcCBlc3Qgb2JsaWdhdG9pcmUuJywKKwlyZXFDaGtCeU5hbWU6ICdWZXVpbGxleiBzJmVhY3V0ZTtsZWN0aW9ubmVyIHVuKGUpIHtsYWJlbH0uJywKKwltYXRjaDogJ0NlIGNoYW1wIGRvaXQgY29ycmVzcG9uZHJlIGF2ZWMgbGUgY2hhbXAge21hdGNoTmFtZX0uJywKKwlzdGFydERhdGU6ICdkYXRlIGRlIGQmZWFjdXRlO2J1dCcsCisJZW5kRGF0ZTogJ2RhdGUgZGUgZmluJywKKwljdXJyZW5kRGF0ZTogJ2RhdGUgYWN0dWVsbGUnLAorCWFmdGVyRGF0ZTogJ0xhIGRhdGUgZG9pdCAmZWNpcmM7dHJlIGlkZW50aXF1ZSBvdSBwb3N0JmVhY3V0ZTtyaWV1cmUgJmFncmF2ZTsge2xhYmVsfS4nLAorCWJlZm9yZURhdGU6ICdMYSBkYXRlIGRvaXQgJmVjaXJjO3RyZSBpZGVudGlxdWUgb3UgYW50JmVhY3V0ZTtyaWV1cmUgJmFncmF2ZTsge2xhYmVsfS4nLAorCXN0YXJ0TW9udGg6ICdWZXVpbGxleiBzJmVhY3V0ZTtsZWN0aW9ubmVyIHVuIG1vaXMgZGUgZCZlYWN1dGU7YnV0LicsCisJc2FtZU1vbnRoOiAnQ2VzIGRldXggZGF0ZXMgZG9pdmVudCAmZWNpcmM7dHJlIGRhbnMgbGUgbSZlY2lyYzttZSBtb2lzIC0gdm91cyBkZXZleiBlbiBtb2RpZmllciB1bmUuJywKKwljcmVkaXRjYXJkOiAnTGUgbnVtJmVhY3V0ZTtybyBkZSBjYXJ0ZSBkZSBjciZlYWN1dGU7ZGl0IGVzdCBpbnZhbGlkZS4gTWVyY2kgZGUgdiZlYWN1dGU7cmlmaWVyIGxlIG51bSZlYWN1dGU7cm8gZXQgZGUgciZlYWN1dGU7ZXNzYXllci4gVm91cyBhdmV6IGVudHImZWFjdXRlOyB7bGVuZ3RofSBjaGlmZnJlKHMpLicKKworfSk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuZnItRlIuTnVtYmVyCisKK2Rlc2NyaXB0aW9uOiBOdW1iZXIgbWVzc2FnZXMgZm9yIEZyZW5jaC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBcmlhbiBTdG9sd2lqaworICAtIHN2MWwKKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorICAtIC9Mb2NhbGUuRVUuTnVtYmVyCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmZyLUZSLk51bWJlcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdmci1GUicsICdOdW1iZXInLCB7CisKKwlncm91cDogJyAnIC8vIEluIGZyLUZSIGxvY2FsaXphdGlvbiwgZ3JvdXAgY2hhcmFjdGVyIGlzIGEgYmxhbmsgc3BhY2UKKworfSkuaW5oZXJpdCgnRVUnLCAnTnVtYmVyJyk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuaGUtSUwuRGF0ZQorCitkZXNjcmlwdGlvbjogRGF0ZSBtZXNzYWdlcyBmb3IgSGVicmV3LgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEVsYWQgT3NzYWRvbgorCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmhlLUlMLkRhdGVdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnaGUtSUwnLCAnRGF0ZScsIHsKKworCW1vbnRoczogWyfXmdeg15XXkNeoJywgJ9ek15HXqNeV15DXqCcsICfXnteo16UnLCAn15DXpNeo15nXnCcsICfXnteQ15knLCAn15nXldeg15knLCAn15nXldec15knLCAn15DXldeS15XXodeYJywgJ9eh16TXmNee15HXqCcsICfXkNeV16fXmNeV15HXqCcsICfXoNeV15HXnteR16gnLCAn15PXptee15HXqCddLAorCW1vbnRoc19hYmJyOiBbJ9eZ16DXldeQ16gnLCAn16TXkdeo15XXkNeoJywgJ9ee16jXpScsICfXkNek16jXmdecJywgJ9ee15DXmScsICfXmdeV16DXmScsICfXmdeV15zXmScsICfXkNeV15LXldeh15gnLCAn16HXpNeY157XkdeoJywgJ9eQ15XXp9eY15XXkdeoJywgJ9eg15XXkdee15HXqCcsICfXk9em157XkdeoJ10sCisJZGF5czogWyfXqNeQ16nXldefJywgJ9ep16DXmScsICfXqdec15nXqdeZJywgJ9eo15HXmdei15knLCAn15fXnteZ16nXmScsICfXqdeZ16nXmScsICfXqdeR16onXSwKKwlkYXlzX2FiYnI6IFsn16jXkNep15XXnycsICfXqdeg15knLCAn16nXnNeZ16nXmScsICfXqNeR15nXoteZJywgJ9eX157Xmdep15knLCAn16nXmdep15knLCAn16nXkdeqJ10sCisKKwkvLyBDdWx0dXJlJ3MgZGF0ZSBvcmRlcjogTU0vREQvWVlZWQorCWRhdGVPcmRlcjogWydkYXRlJywgJ21vbnRoJywgJ3llYXInXSwKKwlzaG9ydERhdGU6ICclZC8lbS8lWScsCisJc2hvcnRUaW1lOiAnJUg6JU0nLAorCUFNOiAnQU0nLAorCVBNOiAnUE0nLAorCWZpcnN0RGF5T2ZXZWVrOiAwLAorCisJLy8gRGF0ZS5FeHRyYXMKKwlvcmRpbmFsOiAnJywKKworCWxlc3NUaGFuTWludXRlQWdvOiAn15zXpNeg15kg16TXl9eV16og157Xk9en15QnLAorCW1pbnV0ZUFnbzogJ9ec16TXoNeZINeb15PXp9eUJywKKwltaW51dGVzQWdvOiAn15zXpNeg15kge2RlbHRhfSDXk9en15XXqicsCisJaG91ckFnbzogJ9ec16TXoNeZINeb16nXoteUJywKKwlob3Vyc0FnbzogJ9ec16TXoNeZIHtkZWx0YX0g16nXoteV16onLAorCWRheUFnbzogJ9ec16TXoNeZINeZ15XXnScsCisJZGF5c0FnbzogJ9ec16TXoNeZIHtkZWx0YX0g15nXnteZ150nLAorCXdlZWtBZ286ICfXnNek16DXmSDXqdeR15XXoicsCisJd2Vla3NBZ286ICfXnNek16DXmSB7ZGVsdGF9INep15HXldei15XXqicsCisJbW9udGhBZ286ICfXnNek16DXmSDXl9eV15PXqScsCisJbW9udGhzQWdvOiAn15zXpNeg15kge2RlbHRhfSDXl9eV15PXqdeZ150nLAorCXllYXJBZ286ICfXnNek16DXmSDXqdeg15QnLAorCXllYXJzQWdvOiAn15zXpNeg15kge2RlbHRhfSDXqdeg15nXnScsCisKKwlsZXNzVGhhbk1pbnV0ZVVudGlsOiAn15HXoteV15Mg16TXl9eV16og157Xk9en15QnLAorCW1pbnV0ZVVudGlsOiAn15HXoteV15Mg15vXk9en15QnLAorCW1pbnV0ZXNVbnRpbDogJ9eR16LXldeTIHtkZWx0YX0g15PXp9eV16onLAorCWhvdXJVbnRpbDogJ9eR16LXldeTINeb16nXoteUJywKKwlob3Vyc1VudGlsOiAn15HXoteV15Mge2RlbHRhfSDXqdei15XXqicsCisJZGF5VW50aWw6ICfXkdei15XXkyDXmdeV150nLAorCWRheXNVbnRpbDogJ9eR16LXldeTIHtkZWx0YX0g15nXnteZ150nLAorCXdlZWtVbnRpbDogJ9eR16LXldeTINep15HXldeiJywKKwl3ZWVrc1VudGlsOiAn15HXoteV15Mge2RlbHRhfSDXqdeR15XXoteV16onLAorCW1vbnRoVW50aWw6ICfXkdei15XXkyDXl9eV15PXqScsCisJbW9udGhzVW50aWw6ICfXkdei15XXkyB7ZGVsdGF9INeX15XXk9ep15nXnScsCisJeWVhclVudGlsOiAn15HXoteV15Mg16nXoNeUJywKKwl5ZWFyc1VudGlsOiAn15HXoteV15Mge2RlbHRhfSDXqdeg15nXnScKKworfSk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuaGUtSUwuRm9ybS5WYWxpZGF0b3IKKworZGVzY3JpcHRpb246IEZvcm0gVmFsaWRhdG9yIG1lc3NhZ2VzIGZvciBIZWJyZXcuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gRWxhZCBPc3NhZG9uCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuaGUtSUwuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnaGUtSUwnLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAn16DXkCDXnNee15zXkCDXqdeT15Qg15bXlC4nLAorCW1pbkxlbmd0aDogJ9eg15Ag15zXlNeW15nXnyDXnNek15fXldeqIHttaW5MZW5ndGh9INeq15XXldeZ150gKNeU15bXoNeqIHtsZW5ndGh9INeq15XXldeZ150pLicsCisJbWF4TGVuZ3RoOiAn16DXkCDXnNeU15bXmdefINei15Mge21heExlbmd0aH0g16rXldeV15nXnSAo15TXlteg16oge2xlbmd0aH0g16rXldeV15nXnSkuJywKKwlpbnRlZ2VyOiAn16DXkCDXnNeU15bXmdefINee16HXpNeoINep15zXnSDXnNep15PXlCDXlteULiDXnteh16TXqNeZ150g16LXqdeo15XXoNeZ15nXnSAo15vXnteVIDEuMjUpINeQ15nXoNedINeX15XXp9eZ15nXnS4nLAorCW51bWVyaWM6ICfXoNeQINec15TXlteZ158g16LXqNeaINee16HXpNeo15kg15HXnNeR15Mg15HXqdeT15Qg15bXlCAo15vXnteVICIxIiwgIjEuMSIsICItMSIg15DXlSAiLTEuMSIpLicsCisJZGlnaXRzOiAn16DXkCDXnNeU15bXmdefINeo16cg16HXpNeo15XXqiDXldeh15nXnteg15kg15TXpNeo15PXlCDXkdep15PXlCDXlteUICjXnNee16nXnCwg157Xodek16gg15jXnNek15XXnyDXotedINee16fXpNeZ150g15DXlSDXoNen15XXk9eV16og15TXldeQINeX15XXp9eZKS4nLAorCWFscGhhOiAn16DXkCDXnNeU15bXmdefINeo16cg15DXldeq15nXldeqINeR15DXoNeS15zXmdeqIChhLXopINeR16nXk9eUINeW15QuINeo15XXldeX15nXnSDXkNeVINeq15XXldeZ150g15DXl9eo15nXnSDXkNeZ16DXnSDXl9eV16fXmdeZ150uJywKKwlhbHBoYW51bTogJ9eg15Ag15zXlNeW15nXnyDXqNenINeQ15XXqteo15nXldeqINeR15DXoNeS15zXmdeqIChhLXopINeQ15Ug16HXpNeo15XXqiAoMC05KSDXkdep15PXlCDXlteULiDXkNeV15XXl9eo15nXnSDXkNeVINeq15XXldeZ150g15DXl9eo15nXnSDXkNeZ16DXnSDXl9eV16fXmdeZ150uJywKKwlkYXRlU3VjaEFzOiAn16DXkCDXnNeU15bXmdefINeq15DXqNeZ15og15fXlden15ksINeb157XlSB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ9eg15Ag15zXlNeW15nXnyDXqteQ16jXmdeaINeX15XXp9eZINeR16TXldeo157XmCBNTS9ERC9ZWVlZICjXm9ee15UgIjEyLzMxLzE5OTkiKScsCisJZW1haWw6ICfXoNeQINec15TXlteZ158g15vXqteV15HXqiDXkNeZ157XmdeZ15wg15fXlden15nXqi4g15zXk9eV15LXnteUOiAiZnJlZEBkb21haW4uY29tIi4nLAorCXVybDogJ9eg15Ag15zXlNeW15nXnyDXm9eq15XXkdeqINeQ16rXqCDXl9eV16fXmdeqLCDXm9ee15UgaHR0cDovL3d3dy5leGFtcGxlLmNvbS4nLAorCWN1cnJlbmN5RG9sbGFyOiAn16DXkCDXnNeU15bXmdefINeh15vXldedINeT15XXnNeo15kg15fXlden15kuINec15PXldeS157XlCAkMTAwLjAwLicsCisJb25lUmVxdWlyZWQ6ICfXoNeQINec15HXl9eV16gg15zXpNeX15XXqiDXkdep15PXlCDXkNeX15MuJywKKwllcnJvclByZWZpeDogJ9ep15LXmdeQ15Q6ICcsCisJd2FybmluZ1ByZWZpeDogJ9eQ15bXlNeo15Q6ICcsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAn15DXmdefINec15TXlteZ158g16jXldeV15fXmdedINeR16nXk9eUINeW15QuJywKKwlyZXFDaGtCeU5vZGU6ICfXoNeQINec15HXl9eV16gg15DXl9eqINee15TXkNek16nXqNeV15nXldeqLicsCisJcmVxdWlyZWRDaGs6ICfXqdeT15Qg15bXlCDXoNeT16jXqS4nLAorCXJlcUNoa0J5TmFtZTogJ9eg15Ag15zXkdeX15XXqCB7bGFiZWx9LicsCisJbWF0Y2g6ICfXqdeT15Qg15bXlCDXpteo15nXmiDXnNeU16rXkNeZ150g15zXqdeT15Qge21hdGNoTmFtZX0nLAorCXN0YXJ0RGF0ZTogJ9eq15DXqNeZ15og15TXlNeq15fXnNeUJywKKwllbmREYXRlOiAn16rXkNeo15nXmiDXlNeh15nXldedJywKKwljdXJyZW5kRGF0ZTogJ9eU16rXkNeo15nXmiDXlNeg15XXm9eX15knLAorCWFmdGVyRGF0ZTogJ9eU16rXkNeo15nXmiDXpteo15nXmiDXnNeU15nXldeqINeW15TXlCDXkNeVINeQ15fXqNeZIHtsYWJlbH0uJywKKwliZWZvcmVEYXRlOiAn15TXqteQ16jXmdeaINem16jXmdeaINec15TXmdeV16og15bXlNeUINeQ15Ug15zXpNeg15kge2xhYmVsfS4nLAorCXN0YXJ0TW9udGg6ICfXoNeQINec15HXl9eV16gg15fXldeT16kg15TXqteX15zXlCcsCisJc2FtZU1vbnRoOiAn16nXoNeZINeq15DXqNeZ15vXmdedINeQ15zXlCDXpteo15nXm9eZ150g15zXlNeZ15XXqiDXkdeQ15XXqteVINeX15XXk9epIC0g16DXkCDXnNep16DXldeqINeQ15fXkyDXlNeq15DXqNeZ15vXmdedLicsCisJY3JlZGl0Y2FyZDogJ9ee16HXpNeoINeb16jXmNeZ16Eg15TXkNep16jXkNeZINep15TXldeW158g15DXmdeg15Ug15fXlden15kuINeg15Ag15zXkdeT15XXpyDXqdeg15nXqi4g15TXldeW16DXlSB7bGVuZ3RofSDXodek16jXldeqLicKKworfSk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuaGUtSUwuTnVtYmVyCisKK2Rlc2NyaXB0aW9uOiBOdW1iZXIgbWVzc2FnZXMgZm9yIEhlYnJldy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBFbGFkIE9zc2Fkb24KKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5oZS1JTC5OdW1iZXJdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnaGUtSUwnLCAnTnVtYmVyJywgeworCisJZGVjaW1hbDogJy4nLAorCWdyb3VwOiAnLCcsCisKKwljdXJyZW5jeTogeworCQlzdWZmaXg6ICcg4oKqJworCX0KKworfSk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuaHUtSFUuRGF0ZQorCitkZXNjcmlwdGlvbjogRGF0ZSBtZXNzYWdlcyBmb3IgSHVuZ2FyaWFuLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFpzb2x0IFN6ZWdoZcWRCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuaHUtSFUuRGF0ZV0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdodS1IVScsICdEYXRlJywgeworCisJbW9udGhzOiBbJ0phbnXDoXInLCAnRmVicnXDoXInLCAnTcOhcmNpdXMnLCAnw4FwcmlsaXMnLCAnTcOhanVzJywgJ0rDum5pdXMnLCAnSsO6bGl1cycsICdBdWd1c3p0dXMnLCAnU3plcHRlbWJlcicsICdPa3TDs2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddLAorCW1vbnRoc19hYmJyOiBbJ2phbi4nLCAnZmVici4nLCAnbcOhcmMuJywgJ8OhcHIuJywgJ23DoWouJywgJ2rDum4uJywgJ2rDumwuJywgJ2F1Zy4nLCAnc3plcHQuJywgJ29rdC4nLCAnbm92LicsICdkZWMuJ10sCisJZGF5czogWydWYXPDoXJuYXAnLCAnSMOpdGbFkScsICdLZWRkJywgJ1N6ZXJkYScsICdDc8O8dMO2cnTDtmsnLCAnUMOpbnRlaycsICdTem9tYmF0J10sCisJZGF5c19hYmJyOiBbJ1YnLCAnSCcsICdLJywgJ1N6ZScsICdDcycsICdQJywgJ1N6byddLAorCisJLy8gQ3VsdHVyZSdzIGRhdGUgb3JkZXI6IFlZWVkuTU0uREQuCisJZGF0ZU9yZGVyOiBbJ3llYXInLCAnbW9udGgnLCAnZGF0ZSddLAorCXNob3J0RGF0ZTogJyVZLiVtLiVkLicsCisJc2hvcnRUaW1lOiAnJUk6JU0nLAorCUFNOiAnZGUuJywKKwlQTTogJ2R1LicsCisJZmlyc3REYXlPZldlZWs6IDEsCisKKwkvLyBEYXRlLkV4dHJhcworCW9yZGluYWw6ICcuJywKKworCWxlc3NUaGFuTWludXRlQWdvOiAnYWxpZyBlZ3kgcGVyY2UnLAorCW1pbnV0ZUFnbzogJ2VneSBwZXJjZScsCisJbWludXRlc0FnbzogJ3tkZWx0YX0gcGVyY2UnLAorCWhvdXJBZ286ICdlZ3kgw7Nyw6FqYScsCisJaG91cnNBZ286ICd7ZGVsdGF9IMOzcsOhamEnLAorCWRheUFnbzogJzEgbmFwamEnLAorCWRheXNBZ286ICd7ZGVsdGF9IG5hcGphJywKKwl3ZWVrQWdvOiAnMSBoZXRlJywKKwl3ZWVrc0FnbzogJ3tkZWx0YX0gaGV0ZScsCisJbW9udGhBZ286ICcxIGjDs25hcGphJywKKwltb250aHNBZ286ICd7ZGVsdGF9IGjDs25hcGphJywKKwl5ZWFyQWdvOiAnMSDDqXZlJywKKwl5ZWFyc0FnbzogJ3tkZWx0YX0gw6l2ZScsCisKKwlsZXNzVGhhbk1pbnV0ZVVudGlsOiAnYWxpZyBlZ3kgcGVyYyBtw7psdmEnLAorCW1pbnV0ZVVudGlsOiAnZWd5IHBlcmMgbcO6bHZhJywKKwltaW51dGVzVW50aWw6ICd7ZGVsdGF9IHBlcmMgbcO6bHZhJywKKwlob3VyVW50aWw6ICdlZ3kgw7NyYSBtw7psdmEnLAorCWhvdXJzVW50aWw6ICd7ZGVsdGF9IMOzcmEgbcO6bHZhJywKKwlkYXlVbnRpbDogJzEgbmFwIG3Dumx2YScsCisJZGF5c1VudGlsOiAne2RlbHRhfSBuYXAgbcO6bHZhJywKKwl3ZWVrVW50aWw6ICcxIGjDqXQgbcO6bHZhJywKKwl3ZWVrc1VudGlsOiAne2RlbHRhfSBow6l0IG3Dumx2YScsCisJbW9udGhVbnRpbDogJzEgaMOzbmFwIG3Dumx2YScsCisJbW9udGhzVW50aWw6ICd7ZGVsdGF9IGjDs25hcCBtw7psdmEnLAorCXllYXJVbnRpbDogJzEgw6l2IG3Dumx2YScsCisJeWVhcnNVbnRpbDogJ3tkZWx0YX0gw6l2IG3Dumx2YScKKworfSk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuaHUtSFUuRm9ybS5WYWxpZGF0b3IKKworZGVzY3JpcHRpb246IEZvcm0gVmFsaWRhdG9yIG1lc3NhZ2VzIGZvciBIdW5nYXJpYW4uCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gWnNvbHQgU3plZ2hlxZEKKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5odS1IVS5Gb3JtLlZhbGlkYXRvcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdodS1IVScsICdGb3JtVmFsaWRhdG9yJywgeworCisJcmVxdWlyZWQ6ICdBIG1lesWRIGtpdMO2bHTDqXNlIGvDtnRlbGV6xZEuJywKKwltaW5MZW5ndGg6ICdMZWdhbMOhYmIge21pbkxlbmd0aH0ga2FyYWt0ZXIgbWVnYWTDoXNhIHN6w7xrc8OpZ2VzIChtZWdhZHZhIHtsZW5ndGh9IGthcmFrdGVyKS4nLAorCW1heExlbmd0aDogJ0xlZ2ZlbGplYmIge21heExlbmd0aH0ga2FyYWt0ZXIgbWVnYWTDoXNhIGxlaGV0c8OpZ2VzIChtZWdhZHZhIHtsZW5ndGh9IGthcmFrdGVyKS4nLAorCWludGVnZXI6ICdFZ8Opc3ogc3rDoW0gbWVnYWTDoXNhIHN6w7xrc8OpZ2VzLiBBIHRpemVkZXNqZWd5ZWsgKHBsLiAxLjI1KSBuZW0gZW5nZWTDqWx5ZXpldHRlay4nLAorCW51bWVyaWM6ICdTesOhbSBtZWdhZMOhc2Egc3rDvGtzw6lnZXMgKHBsLiAiMSIgdmFneSAiMS4xIiB2YWd5ICItMSIgdmFneSAiLTEuMSIpLicsCisJZGlnaXRzOiAnQ3NhayBzesOhbW9rIMOpcyDDrXLDoXNqZWxlayBtZWdhZMOhc2EgbGVoZXRzw6lnZXMgKHBsLiB0ZWxlZm9uc3rDoW0ga8O2dMWRamVsZWsgw6lzL3ZhZ3kgcGVyamVsZWtrZWwpLicsCisJYWxwaGE6ICdDc2FrIGJldMWxayAoYS16KSBtZWdhZMOhc2EgbGVoZXRzw6lnZXMuIFN6w7Nrw7Z6IMOpcyBlZ3nDqWIga2FyYWt0ZXJlayBuZW0gZW5nZWTDqWx5ZXpldHRlay4nLAorCWFscGhhbnVtOiAnQ3NhayBiZXTFsWsgKGEteikgdmFneSBzesOhbW9rICgwLTkpIG1lZ2Fkw6FzYSBsZWhldHPDqWdlcy4gU3rDs2vDtnogw6lzIGVnecOpYiBrYXJha3RlcmVrIG5lbSBlbmdlZMOpbHllemV0dGVrLicsCisJZGF0ZVN1Y2hBczogJ1ZhbMOzcyBkw6F0dW0gbWVnYWTDoXNhIHN6w7xrc8OpZ2VzIChwbC4ge2RhdGV9KS4nLAorCWRhdGVJbkZvcm1hdE1EWTogJ1ZhbMOzcyBkw6F0dW0gbWVnYWTDoXNhIHN6w7xrc8OpZ2VzIMOJw4nDicOJLkhILk5OLiBmb3Jtw6FiYW4uIChwbC4gIjE5OTkuMTIuMzEuIiknLAorCWVtYWlsOiAnVmFsw7NzIGUtbWFpbCBjw61tIG1lZ2Fkw6FzYSBzesO8a3PDqWdlcyAocGwuICJmcmVkQGRvbWFpbi5odSIpLicsCisJdXJsOiAnVmFsw7NzIFVSTCBtZWdhZMOhc2Egc3rDvGtzw6lnZXMgKHBsLiBodHRwOi8vd3d3LmV4YW1wbGUuY29tKS4nLAorCWN1cnJlbmN5RG9sbGFyOiAnVmFsw7NzIHDDqW56w7Zzc3plZyBtZWdhZMOhc2Egc3rDvGtzw6lnZXMgKHBsLiAxMDAuMDAgRnQuKS4nLAorCW9uZVJlcXVpcmVkOiAnQXogYWzDoWJiaSBtZXrFkWsgbGVnYWzDoWJiIGVneWlrw6luZWsga2l0w7ZsdMOpc2Uga8O2dGVsZXrFkS4nLAorCWVycm9yUHJlZml4OiAnSGliYTogJywKKwl3YXJuaW5nUHJlZml4OiAnRmlneWVsZW06ICcsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAnQSBtZXrFkSBuZW0gdGFydGFsbWF6aGF0IHN6w7Nrw7Z6w7ZrZXQuJywKKwlyZXFDaGtCeU5vZGU6ICdOaW5jcyBlZ3lldGxlbiBraWplbMO2bHQgZWxlbSBzZW0uJywKKwlyZXF1aXJlZENoazogJ0EgbWV6xZEga2l0w7ZsdMOpc2Uga8O2dGVsZXrFkS4nLAorCXJlcUNoa0J5TmFtZTogJ0VneSB7bGFiZWx9IGtpdsOhbGFzenTDoXNhIHN6w7xrc8OpZ2VzLicsCisJbWF0Y2g6ICdBIG1lesWRbmVrIGVneWV6bmllIGtlbGwgYSh6KSB7bWF0Y2hOYW1lfSBtZXrFkXZlbC4nLAorCXN0YXJ0RGF0ZTogJ2Ega2V6ZGV0IGTDoXR1bWEnLAorCWVuZERhdGU6ICdhIHbDqWcgZMOhdHVtYScsCisJY3VycmVuZERhdGU6ICdqZWxlbmxlZ2kgZMOhdHVtJywKKwlhZnRlckRhdGU6ICdBIGTDoXR1bSBuZW0gbGVoZXQga2lzZWJiLCBtaW50IHtsYWJlbH0uJywKKwliZWZvcmVEYXRlOiAnQSBkw6F0dW0gbmVtIGxlaGV0IG5hZ3lvYmIsIG1pbnQge2xhYmVsfS4nLAorCXN0YXJ0TW9udGg6ICdLZXpkZXRpIGjDs25hcCBtZWdhZMOhc2Egc3rDvGtzw6lnZXMuJywKKwlzYW1lTW9udGg6ICdBIGvDqXQgZMOhdHVtbmFrIHVneWFuYXpvbiBow7NuYXBiYW4ga2VsbCBsZW5uaWUuJywKKwljcmVkaXRjYXJkOiAnQSBtZWdhZG90dCBiYW5ra8OhcnR5YXN6w6FtIG5lbSB2YWzDs2RpIChtZWdhZHZhIHtsZW5ndGh9IHN6w6FtamVneSkuJworCit9KTsKKworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5pdC1JVC5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBJdGFsaWFuLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworYXV0aG9yczoKKyAgLSBBbmRyZWEgTm92ZXJvCisgIC0gVmFsZXJpbyBQcm9pZXR0aQorCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLml0LUlULkRhdGVdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnaXQtSVQnLCAnRGF0ZScsIHsKKworCW1vbnRoczogWydHZW5uYWlvJywgJ0ZlYmJyYWlvJywgJ01hcnpvJywgJ0FwcmlsZScsICdNYWdnaW8nLCAnR2l1Z25vJywgJ0x1Z2xpbycsICdBZ29zdG8nLCAnU2V0dGVtYnJlJywgJ090dG9icmUnLCAnTm92ZW1icmUnLCAnRGljZW1icmUnXSwKKwltb250aHNfYWJicjogWydnZW4nLCAnZmViJywgJ21hcicsICdhcHInLCAnbWFnJywgJ2dpdScsICdsdWcnLCAnYWdvJywgJ3NldCcsICdvdHQnLCAnbm92JywgJ2RpYyddLAorCWRheXM6IFsnRG9tZW5pY2EnLCAnTHVuZWTDrCcsICdNYXJ0ZWTDrCcsICdNZXJjb2xlZMOsJywgJ0dpb3ZlZMOsJywgJ1ZlbmVyZMOsJywgJ1NhYmF0byddLAorCWRheXNfYWJicjogWydkb20nLCAnbHVuJywgJ21hcicsICdtZXInLCAnZ2lvJywgJ3ZlbicsICdzYWInXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBERC9NTS9ZWVlZCisJZGF0ZU9yZGVyOiBbJ2RhdGUnLCAnbW9udGgnLCAneWVhciddLAorCXNob3J0RGF0ZTogJyVkLyVtLyVZJywKKwlzaG9ydFRpbWU6ICclSC4lTScsCisJQU06ICdBTScsCisJUE06ICdQTScsCisJZmlyc3REYXlPZldlZWs6IDEsCisKKwkvLyBEYXRlLkV4dHJhcworCW9yZGluYWw6ICfCuicsCisKKwlsZXNzVGhhbk1pbnV0ZUFnbzogJ21lbm8gZGkgdW4gbWludXRvIGZhJywKKwltaW51dGVBZ286ICdjaXJjYSB1biBtaW51dG8gZmEnLAorCW1pbnV0ZXNBZ286ICdjaXJjYSB7ZGVsdGF9IG1pbnV0aSBmYScsCisJaG91ckFnbzogImNpcmNhIHVuJ29yYSBmYSIsCisJaG91cnNBZ286ICdjaXJjYSB7ZGVsdGF9IG9yZSBmYScsCisJZGF5QWdvOiAnY2lyY2EgMSBnaW9ybm8gZmEnLAorCWRheXNBZ286ICdjaXJjYSB7ZGVsdGF9IGdpb3JuaSBmYScsCisKKwlsZXNzVGhhbk1pbnV0ZVVudGlsOiAndHJhIG1lbm8gZGkgdW4gbWludXRvJywKKwltaW51dGVVbnRpbDogJ3RyYSBjaXJjYSB1biBtaW51dG8nLAorCW1pbnV0ZXNVbnRpbDogJ3RyYSBjaXJjYSB7ZGVsdGF9IG1pbnV0aScsCisJaG91clVudGlsOiAidHJhIGNpcmNhIHVuJ29yYSIsCisJaG91cnNVbnRpbDogJ3RyYSBjaXJjYSB7ZGVsdGF9IG9yZScsCisJZGF5VW50aWw6ICd0cmEgY2lyY2EgdW4gZ2lvcm5vJywKKwlkYXlzVW50aWw6ICd0cmEgY2lyY2Ege2RlbHRhfSBnaW9ybmknCisKK30pOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLml0LUlULkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgSXRhbGlhbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBMZW9uYXJkbyBMYXVyZXRpCisgIC0gQW5kcmVhIE5vdmVybworCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLml0LUlULkZvcm0uVmFsaWRhdG9yXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2l0LUlUJywgJ0Zvcm1WYWxpZGF0b3InLCB7CisKKwlyZXF1aXJlZDogJ0lsIGNhbXBvICZlZ3JhdmU7IG9iYmxpZ2F0b3Jpby4nLAorCW1pbkxlbmd0aDogJ0luc2VyaXJlIGFsbWVubyB7bWluTGVuZ3RofSBjYXJhdHRlcmkgKG5lIHNvbm8gc3RhdGkgaW5zZXJpdGkge2xlbmd0aH0pLicsCisJbWF4TGVuZ3RoOiAnSW5zZXJpcmUgYWwgbWFzc2ltbyB7bWF4TGVuZ3RofSBjYXJhdHRlcmkgKG5lIHNvbm8gc3RhdGkgaW5zZXJpdGkge2xlbmd0aH0pLicsCisJaW50ZWdlcjogJ0luc2VyaXJlIHVuIG51bWVybyBpbnRlcm8uIE5vbiBzb25vIGNvbnNlbnRpdGkgZGVjaW1hbGkgKGVzLjogMS4yNSkuJywKKwludW1lcmljOiAnSW5zZXJpcmUgc29sbyB2YWxvcmkgbnVtZXJpY2kgKGVzLjogIjEiIG9wcHVyZSAiMS4xIiBvcHB1cmUgIi0xIiBvcHB1cmUgIi0xLjEiKS4nLAorCWRpZ2l0czogJ0luc2VyaXJlIHNvbG8gbnVtZXJpIGUgY2FyYXR0ZXJpIGRpIHB1bnRlZ2dpYXR1cmEuIFBlciBlc2VtcGlvICZlZ3JhdmU7IGNvbnNlbnRpdG8gdW4gbnVtZXJvIHRlbGVmb25pY28gY29uIHRyYXR0aW5pIG8gcHVudGkuJywKKwlhbHBoYTogJ0luc2VyaXJlIHNvbG8gbGV0dGVyZSAoYS16KS4gTm9uIHNvbm8gY29uc2VudGl0aSBzcGF6aSBvIGFsdHJpIGNhcmF0dGVyaS4nLAorCWFscGhhbnVtOiAnSW5zZXJpcmUgc29sbyBsZXR0ZXJlIChhLXopIG8gbnVtZXJpICgwLTkpLiBOb24gc29ubyBjb25zZW50aXRpIHNwYXppIG8gYWx0cmkgY2FyYXR0ZXJpLicsCisJZGF0ZVN1Y2hBczogJ0luc2VyaXJlIHVuYSBkYXRhIHZhbGlkYSBkZWwgdGlwbyB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ0luc2VyaXJlIHVuYSBkYXRhIHZhbGlkYSBuZWwgZm9ybWF0byBNTS9HRy9BQUFBIChlcy46ICIxMi8zMS8xOTk5IiknLAorCWVtYWlsOiAnSW5zZXJpcmUgdW4gaW5kaXJpenpvIGVtYWlsIHZhbGlkby4gUGVyIGVzZW1waW8gIm5vbWVAZG9taW5pby5jb20iLicsCisJdXJsOiAnSW5zZXJpcmUgdW4gaW5kaXJpenpvIHZhbGlkby4gUGVyIGVzZW1waW8gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iLicsCisJY3VycmVuY3lEb2xsYXI6ICdJbnNlcmlyZSB1biBpbXBvcnRvIHZhbGlkby4gUGVyIGVzZW1waW8gIiQxMDAuMDAiLicsCisJb25lUmVxdWlyZWQ6ICdDb21wbGV0YXJlIGFsbWVubyB1bm8gZGVpIGNhbXBpIHJpY2hpZXN0aS4nLAorCWVycm9yUHJlZml4OiAnRXJyb3JlOiAnLAorCXdhcm5pbmdQcmVmaXg6ICdBdHRlbnppb25lOiAnLAorCisJLy8gRm9ybS5WYWxpZGF0b3IuRXh0cmFzCisJbm9TcGFjZTogJ05vbiBzb25vIGNvbnNlbnRpdGkgc3BhemkuJywKKwlyZXFDaGtCeU5vZGU6ICdOZXNzdW5hIHZvY2Ugc2VsZXppb25hdGEuJywKKwlyZXF1aXJlZENoazogJ0lsIGNhbXBvICZlZ3JhdmU7IG9iYmxpZ2F0b3Jpby4nLAorCXJlcUNoa0J5TmFtZTogJ1NlbGV6aW9uYXJlIHVuKGEpIHtsYWJlbH0uJywKKwltYXRjaDogJ0lsIHZhbG9yZSBkZXZlIGNvcnJpc3BvbmRlcmUgYWwgY2FtcG8ge21hdGNoTmFtZX0nLAorCXN0YXJ0RGF0ZTogImRhdGEgZCdpbml6aW8iLAorCWVuZERhdGU6ICdkYXRhIGRpIGZpbmUnLAorCWN1cnJlbmREYXRlOiAnZGF0YSBhdHR1YWxlJywKKwlhZnRlckRhdGU6ICdMYSBkYXRhIGRldmUgY29ycmlzcG9uZGVyZSBvIGVzc2VyZSBzdWNjZXNzaXZhIGFsIHtsYWJlbH0uJywKKwliZWZvcmVEYXRlOiAnTGEgZGF0YSBkZXZlIGNvcnJpc3BvbmRlcmUgbyBlc3NlcmUgcHJlY2VkZW50ZSBhbCB7bGFiZWx9LicsCisJc3RhcnRNb250aDogIlNlbGV6aW9uYXJlIHVuIG1lc2UgZCdpbml6aW8iLAorCXNhbWVNb250aDogJ0xlIGR1ZSBkYXRlIGRldm9ubyBlc3NlcmUgZGVsbG8gc3Rlc3NvIG1lc2UgLSBvY2NvcnJlIG1vZGlmaWNhcm5lIHVuYS4nCisKK30pOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmphLUpQLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIEphcGFuZXNlLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIE5vcml0YWthIEhvcmlvCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuamEtSlAuRGF0ZV0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdqYS1KUCcsICdEYXRlJywgeworCisJbW9udGhzOiBbJzHmnIgnLCAnMuaciCcsICcz5pyIJywgJzTmnIgnLCAnNeaciCcsICc25pyIJywgJzfmnIgnLCAnOOaciCcsICc55pyIJywgJzEw5pyIJywgJzEx5pyIJywgJzEy5pyIJ10sCisJbW9udGhzX2FiYnI6IFsnMeaciCcsICcy5pyIJywgJzPmnIgnLCAnNOaciCcsICc15pyIJywgJzbmnIgnLCAnN+aciCcsICc45pyIJywgJznmnIgnLCAnMTDmnIgnLCAnMTHmnIgnLCAnMTLmnIgnXSwKKwlkYXlzOiBbJ+aXpeabnOaXpScsICfmnIjmm5zml6UnLCAn54Gr5puc5pelJywgJ+awtOabnOaXpScsICfmnKjmm5zml6UnLCAn6YeR5puc5pelJywgJ+Wcn+abnOaXpSddLAorCWRheXNfYWJicjogWyfml6UnLCAn5pyIJywgJ+eBqycsICfmsLQnLCAn5pyoJywgJ+mHkScsICflnJ8nXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBZWVlZL01NL0RECisJZGF0ZU9yZGVyOiBbJ3llYXInLCAnbW9udGgnLCAnZGF0ZSddLAorCXNob3J0RGF0ZTogJyVZLyVtLyVkJywKKwlzaG9ydFRpbWU6ICclSDolTScsCisJQU06ICfljYjliY0nLAorCVBNOiAn5Y2I5b6MJywKKwlmaXJzdERheU9mV2VlazogMCwKKworCS8vIERhdGUuRXh0cmFzCisJb3JkaW5hbDogJycsCisKKwlsZXNzVGhhbk1pbnV0ZUFnbzogJzHliIbku6XlhoXliY0nLAorCW1pbnV0ZUFnbzogJ+e0hDHliIbliY0nLAorCW1pbnV0ZXNBZ286ICfntIR7ZGVsdGF95YiG5YmNJywKKwlob3VyQWdvOiAn57SEMeaZgumWk+WJjScsCisJaG91cnNBZ286ICfntIR7ZGVsdGF95pmC6ZaT5YmNJywKKwlkYXlBZ286ICcx5pel5YmNJywKKwlkYXlzQWdvOiAne2RlbHRhfeaXpeWJjScsCisJd2Vla0FnbzogJzHpgLHplpPliY0nLAorCXdlZWtzQWdvOiAne2RlbHRhfemAsemWk+WJjScsCisJbW9udGhBZ286ICcx44O25pyI5YmNJywKKwltb250aHNBZ286ICd7ZGVsdGF944O25pyI5YmNJywKKwl5ZWFyQWdvOiAnMeW5tOWJjScsCisJeWVhcnNBZ286ICd7ZGVsdGF95bm05YmNJywKKworCWxlc3NUaGFuTWludXRlVW50aWw6ICfku4rjgYvjgonntIQx5YiG5Lul5YaFJywKKwltaW51dGVVbnRpbDogJ+S7iuOBi+OCiee0hDHliIYnLAorCW1pbnV0ZXNVbnRpbDogJ+S7iuOBi+OCiee0hHtkZWx0YX3liIYnLAorCWhvdXJVbnRpbDogJ+S7iuOBi+OCiee0hDHmmYLplpMnLAorCWhvdXJzVW50aWw6ICfku4rjgYvjgonntIR7ZGVsdGF95pmC6ZaTJywKKwlkYXlVbnRpbDogJ+S7iuOBi+OCiTHml6XplpMnLAorCWRheXNVbnRpbDogJ+S7iuOBi+OCiXtkZWx0YX3ml6XplpMnLAorCXdlZWtVbnRpbDogJ+S7iuOBi+OCiTHpgLHplpMnLAorCXdlZWtzVW50aWw6ICfku4rjgYvjgol7ZGVsdGF96YCx6ZaTJywKKwltb250aFVudGlsOiAn5LuK44GL44KJMeODtuaciCcsCisJbW9udGhzVW50aWw6ICfku4rjgYvjgol7ZGVsdGF944O25pyIJywKKwl5ZWFyVW50aWw6ICfku4rjgYvjgokx5bm0JywKKwl5ZWFyc1VudGlsOiAn5LuK44GL44KJe2RlbHRhfeW5tCcKKworfSk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuamEtSlAuRm9ybS5WYWxpZGF0b3IKKworZGVzY3JpcHRpb246IEZvcm0gVmFsaWRhdG9yIG1lc3NhZ2VzIGZvciBKYXBhbmVzZS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBOb3JpdGFrYSBIb3JpbworCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmphLUpQLkZvcm0uVmFsaWRhdG9yXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoImphLUpQIiwgIkZvcm1WYWxpZGF0b3IiLCB7CisKKwlyZXF1aXJlZDogJ+WFpeWKm+OBr+W/hemgiOOBp+OBmeOAgicsCisJbWluTGVuZ3RoOiAn5YWl5Yqb5paH5a2X5pWw44Gve21pbkxlbmd0aH3ku6XkuIrjgavjgZfjgabjgY/jgaDjgZXjgYTjgIIoe2xlbmd0aH3mloflrZcpJywKKwltYXhMZW5ndGg6ICflhaXlipvmloflrZfmlbDjga97bWF4TGVuZ3RofeS7peS4i+OBq+OBl+OBpuOBj+OBoOOBleOBhOOAgih7bGVuZ3RofeaWh+WtlyknLAorCWludGVnZXI6ICfmlbTmlbDjgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIInLAorCW51bWVyaWM6ICflhaXlipvjgafjgY3jgovjga7jga/mlbDlgKTjgaDjgZHjgafjgZnjgIIo5L6LOiAiMSIsICIxLjEiLCAiLTEiLCAiLTEuMSIuLi4uKScsCisJZGlnaXRzOiAn5YWl5Yqb44Gn44GN44KL44Gu44Gv5pWw5YCk44Go5Y+l6Kqt6KiY5Y+344Gn44GZ44CCICjkvos6IC3jgoQr44KS5ZCr44KA6Zu76Kmx55Wq5Y+344Gq44GpKS4nLAorCWFscGhhOiAn5YWl5Yqb44Gn44GN44KL44Gu44Gv5Y2K6KeS6Iux5a2X44Gg44GR44Gn44GZ44CC44Gd44KM5Lul5aSW44Gu5paH5a2X44Gv5YWl5Yqb44Gn44GN44G+44Gb44KT44CCJywKKwlhbHBoYW51bTogJ+WFpeWKm+OBp+OBjeOCi+OBruOBr+WNiuinkuiLseaVsOWtl+OBoOOBkeOBp+OBmeOAguOBneOCjOS7peWkluOBruaWh+Wtl+OBr+WFpeWKm+OBp+OBjeOBvuOBm+OCk+OAgicsCisJZGF0ZVN1Y2hBczogJ+acieWKueOBquaXpeS7mOOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAgntkYXRlfScsCisJZGF0ZUluRm9ybWF0TURZOiAn5pel5LuY44Gu5pu45byP44Gr6Kqk44KK44GM44GC44KK44G+44GZ44CCWVlZWS9NTS9ERCAoaS5lLiAiMTk5OS8xMi8zMSIpJywKKwllbWFpbDogJ+ODoeODvOODq+OCouODieODrOOCueOBq+iqpOOCiuOBjOOBguOCiuOBvuOBmeOAgicsCisJdXJsOiAnVVJM44Ki44OJ44Os44K544Gr6Kqk44KK44GM44GC44KK44G+44GZ44CCJywKKwljdXJyZW5jeURvbGxhcjogJ+mHkemhjeOBq+iqpOOCiuOBjOOBguOCiuOBvuOBmeOAgicsCisJb25lUmVxdWlyZWQ6ICfjgbLjgajjgaTku6XkuIrlhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIInLAorCWVycm9yUHJlZml4OiAn44Ko44Op44O8OiAnLAorCXdhcm5pbmdQcmVmaXg6ICforablkYo6ICcsCisKKwkvLyBGb3JtVmFsaWRhdG9yLkV4dHJhcworCW5vU3BhY2U6ICfjgrnjg5rjg7zjgrnjga/lhaXlipvjgafjgY3jgb7jgZvjgpPjgIInLAorCXJlcUNoa0J5Tm9kZTogJ+mBuOaKnuOBleOCjOOBpuOBhOOBvuOBm+OCk+OAgicsCisJcmVxdWlyZWRDaGs6ICfjgZPjga7poIXnm67jga/lv4XpoIjjgafjgZnjgIInLAorCXJlcUNoa0J5TmFtZTogJ3tsYWJlbH3jgpLpgbjmip7jgZfjgabjgY/jgaDjgZXjgYTjgIInLAorCW1hdGNoOiAne21hdGNoTmFtZX3jgYzlhaXlipvjgZXjgozjgabjgYTjgovloLTlkIjlv4XpoIjjgafjgZnjgIInLAorCXN0YXJ0RGF0ZTogJ+mWi+Wni+aXpScsCisJZW5kRGF0ZTogJ+e1guS6huaXpScsCisJY3VycmVuZERhdGU6ICfku4rml6UnLAorCWFmdGVyRGF0ZTogJ3tsYWJlbH3ku6XpmY3jga7ml6Xku5jjgavjgZfjgabjgY/jgaDjgZXjgYTjgIInLAorCWJlZm9yZURhdGU6ICd7bGFiZWx95Lul5YmN44Gu5pel5LuY44Gr44GX44Gm44GP44Gg44GV44GE44CCJywKKwlzdGFydE1vbnRoOiAn6ZaL5aeL5pyI44KS6YG45oqe44GX44Gm44GP44Gg44GV44GE44CCJywKKwlzYW1lTW9udGg6ICfml6Xku5jjgYzlkIzkuIDjgafjgZnjgILjganjgaHjgonjgYvjgpLlpInmm7TjgZfjgabjgY/jgaDjgZXjgYTjgIInCisKK30pOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmphLUpQLk51bWJlcgorCitkZXNjcmlwdGlvbjogTnVtYmVyIG1lc3NhZ2VzIGZvciBKYXBhbmVzZS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBOb3JpdGFrYSBIb3JpbworCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmphLUpQLk51bWJlcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdqYS1KUCcsICdOdW1iZXInLCB7CisKKwlkZWNpbWFsOiAnLicsCisJZ3JvdXA6ICcsJywKKworCWN1cnJlbmN5OiB7CisJCWRlY2ltYWxzOiAwLAorCQlwcmVmaXg6ICdcXCcKKwl9CisKK30pOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLm5sLU5MLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIER1dGNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIExlbm5hcnQgUGlsb24KKyAgLSBUaW0gV2llbmsKKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5ubC1OTC5EYXRlXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ25sLU5MJywgJ0RhdGUnLCB7CisKKwltb250aHM6IFsnamFudWFyaScsICdmZWJydWFyaScsICdtYWFydCcsICdhcHJpbCcsICdtZWknLCAnanVuaScsICdqdWxpJywgJ2F1Z3VzdHVzJywgJ3NlcHRlbWJlcicsICdva3RvYmVyJywgJ25vdmVtYmVyJywgJ2RlY2VtYmVyJ10sCisJbW9udGhzX2FiYnI6IFsnamFuJywgJ2ZlYicsICdtcnQnLCAnYXByJywgJ21laScsICdqdW4nLCAnanVsJywgJ2F1ZycsICdzZXAnLCAnb2t0JywgJ25vdicsICdkZWMnXSwKKwlkYXlzOiBbJ3pvbmRhZycsICdtYWFuZGFnJywgJ2RpbnNkYWcnLCAnd29lbnNkYWcnLCAnZG9uZGVyZGFnJywgJ3ZyaWpkYWcnLCAnemF0ZXJkYWcnXSwKKwlkYXlzX2FiYnI6IFsnem8nLCAnbWEnLCAnZGknLCAnd28nLCAnZG8nLCAndnInLCAnemEnXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBERC1NTS1ZWVlZCisJZGF0ZU9yZGVyOiBbJ2RhdGUnLCAnbW9udGgnLCAneWVhciddLAorCXNob3J0RGF0ZTogJyVkLSVtLSVZJywKKwlzaG9ydFRpbWU6ICclSDolTScsCisJQU06ICdBTScsCisJUE06ICdQTScsCisJZmlyc3REYXlPZldlZWs6IDEsCisKKwkvLyBEYXRlLkV4dHJhcworCW9yZGluYWw6ICdlJywKKworCWxlc3NUaGFuTWludXRlQWdvOiAnbWluZGVyIGRhbiBlZW4gbWludXV0IGdlbGVkZW4nLAorCW1pbnV0ZUFnbzogJ29uZ2V2ZWVyIGVlbiBtaW51dXQgZ2VsZWRlbicsCisJbWludXRlc0FnbzogJ3tkZWx0YX0gbWludXRlbiBnZWxlZGVuJywKKwlob3VyQWdvOiAnb25nZXZlZXIgZWVuIHV1ciBnZWxlZGVuJywKKwlob3Vyc0FnbzogJ29uZ2V2ZWVyIHtkZWx0YX0gdXVyIGdlbGVkZW4nLAorCWRheUFnbzogJ2VlbiBkYWcgZ2VsZWRlbicsCisJZGF5c0FnbzogJ3tkZWx0YX0gZGFnZW4gZ2VsZWRlbicsCisJd2Vla0FnbzogJ2VlbiB3ZWVrIGdlbGVkZW4nLAorCXdlZWtzQWdvOiAne2RlbHRhfSB3ZWtlbiBnZWxlZGVuJywKKwltb250aEFnbzogJ2VlbiBtYWFuZCBnZWxlZGVuJywKKwltb250aHNBZ286ICd7ZGVsdGF9IG1hYW5kZW4gZ2VsZWRlbicsCisJeWVhckFnbzogJ2VlbiBqYWFyIGdlbGVkZW4nLAorCXllYXJzQWdvOiAne2RlbHRhfSBqYWFyIGdlbGVkZW4nLAorCisJbGVzc1RoYW5NaW51dGVVbnRpbDogJ292ZXIgbWluZGVyIGRhbiBlZW4gbWludXV0JywKKwltaW51dGVVbnRpbDogJ292ZXIgb25nZXZlZXIgZWVuIG1pbnV1dCcsCisJbWludXRlc1VudGlsOiAnb3ZlciB7ZGVsdGF9IG1pbnV0ZW4nLAorCWhvdXJVbnRpbDogJ292ZXIgb25nZXZlZXIgZWVuIHV1cicsCisJaG91cnNVbnRpbDogJ292ZXIge2RlbHRhfSB1dXInLAorCWRheVVudGlsOiAnb3ZlciBvbmdldmVlciBlZW4gZGFnJywKKwlkYXlzVW50aWw6ICdvdmVyIHtkZWx0YX0gZGFnZW4nLAorCXdlZWtVbnRpbDogJ292ZXIgZWVuIHdlZWsnLAorCXdlZWtzVW50aWw6ICdvdmVyIHtkZWx0YX0gd2VrZW4nLAorCW1vbnRoVW50aWw6ICdvdmVyIGVlbiBtYWFuZCcsCisJbW9udGhzVW50aWw6ICdvdmVyIHtkZWx0YX0gbWFhbmRlbicsCisJeWVhclVudGlsOiAnb3ZlciBlZW4gamFhcicsCisJeWVhcnNVbnRpbDogJ292ZXIge2RlbHRhfSBqYWFyJworCit9KTsKKworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5ubC1OTC5Gb3JtLlZhbGlkYXRvcgorCitkZXNjcmlwdGlvbjogRm9ybSBWYWxpZGF0b3IgbWVzc2FnZXMgZm9yIER1dGNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIExlbm5hcnQgUGlsb24KKyAgLSBBcmlhbiBTdG9sd2lqaworICAtIFRpbSBXaWVuaworCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLm5sLU5MLkZvcm0uVmFsaWRhdG9yXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ25sLU5MJywgJ0Zvcm1WYWxpZGF0b3InLCB7CisKKwlyZXF1aXJlZDogJ0RpdCB2ZWxkIGlzIHZlcnBsaWNodC4nLAorCW1pbkxlbmd0aDogJ1Z1bCBtaW5pbWFhbCB7bWluTGVuZ3RofSBrYXJha3RlcnMgaW4gKGplIGhlYnQge2xlbmd0aH0ga2FyYWt0ZXJzIGluZ2V2b2VyZCkuJywKKwltYXhMZW5ndGg6ICdWdWwgbmlldCBtZWVyIGRhbiB7bWF4TGVuZ3RofSBrYXJha3RlcnMgaW4gKGplIGhlYnQge2xlbmd0aH0ga2FyYWt0ZXJzIGluZ2V2b2VyZCkuJywKKwlpbnRlZ2VyOiAnVnVsIGVlbiBnZXRhbCBpbi4gR2V0YWxsZW4gbWV0IGRlY2ltYWxlbiAoYmlqdm9vcmJlZWxkIDEuMjUpIHppam4gbmlldCB0b2VnZXN0YWFuLicsCisJbnVtZXJpYzogJ1Z1bCBhbGxlZW4gbnVtZXJpZWtlIHdhYXJkZW4gaW4gKGJpanZvb3JiZWVsZCAiMSIgb2YgIjEuMSIgb2YgIi0xIiBvZiAiLTEuMSIpLicsCisJZGlnaXRzOiAnVnVsIGFsbGVlbiBudW1tZXJzIGVuIGxlZXN0ZWtlbnMgaW4gKGJpanZvb3JiZWVsZCBlZW4gdGVsZWZvb25udW1tZXIgbWV0IHN0cmVlcGplcyBpcyB0b2VnZXN0YWFuKS4nLAorCWFscGhhOiAnVnVsIGFsbGVlbiBsZXR0ZXJzIGluIChhLXopLiBTcGF0aWVzIGVuIGFuZGVyZSBrYXJha3RlcnMgemlqbiBuaWV0IHRvZWdlc3RhYW4uJywKKwlhbHBoYW51bTogJ1Z1bCBhbGxlZW4gbGV0dGVycyAoYS16KSBvZiBudW1tZXJzICgwLTkpIGluLiBTcGF0aWVzIGVuIGFuZGVyZSBrYXJha3RlcnMgemlqbiBuaWV0IHRvZWdlc3RhYW4uJywKKwlkYXRlU3VjaEFzOiAnVnVsIGVlbiBnZWxkaWdlIGRhdHVtIGluLCB6b2FscyB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ1Z1bCBlZW4gZ2VsZGlnZSBkYXR1bSwgaW4gaGV0IGZvcm1hYXQgTU0vREQvWVlZWSAoYmlqdm9vcmJlZWxkICIxMi8zMS8xOTk5IiknLAorCWVtYWlsOiAnVnVsIGVlbiBnZWxkaWcgZS1tYWlsYWRyZXMgaW4uIEJpanZvb3JiZWVsZCAiZnJlZEBkb21laW4ubmwiLicsCisJdXJsOiAnVnVsIGVlbiBnZWxkaWdlIFVSTCBpbiwgem9hbHMgaHR0cDovL3d3dy5leGFtcGxlLmNvbS4nLAorCWN1cnJlbmN5RG9sbGFyOiAnVnVsIGVlbiBnZWxkaWcgJCBiZWRyYWcgaW4uIEJpanZvb3JiZWVsZCAkMTAwLjAwIC4nLAorCW9uZVJlcXVpcmVkOiAnVnVsIGlldHMgaW4gYmlqIGluIGllZGVyIGdldmFsIGVlbiB2YW4gZGV6ZSB2ZWxkZW4uJywKKwl3YXJuaW5nUHJlZml4OiAnV2FhcnNjaHV3aW5nOiAnLAorCWVycm9yUHJlZml4OiAnRm91dDogJywKKworCS8vIEZvcm0uVmFsaWRhdG9yLkV4dHJhcworCW5vU3BhY2U6ICdTcGF0aWVzIHppam4gbmlldCB0b2VnZXN0YWFuIGluIGRpdCB2ZWxkLicsCisJcmVxQ2hrQnlOb2RlOiAnRXIgemlqbiBnZWVuIGl0ZW1zIGdlc2VsZWN0ZWVyZC4nLAorCXJlcXVpcmVkQ2hrOiAnRGl0IHZlbGQgaXMgdmVycGxpY2h0LicsCisJcmVxQ2hrQnlOYW1lOiAnU2VsZWN0ZWVyIGVlbiB7bGFiZWx9LicsCisJbWF0Y2g6ICdEaXQgdmVsZCBtb2V0IG92ZXJlZW4ga29tZW4gbWV0IGhldCB7bWF0Y2hOYW1lfSB2ZWxkJywKKwlzdGFydERhdGU6ICdkZSBiZWdpbiBkYXR1bScsCisJZW5kRGF0ZTogJ2RlIGVpbmQgZGF0dW0nLAorCWN1cnJlbmREYXRlOiAnZGUgaHVpZGlnZSBkYXR1bScsCisJYWZ0ZXJEYXRlOiAnRGUgZGF0dW0gbW9ldCBoZXR6ZWxmZGUgb2YgbmEge2xhYmVsfSB6aWpuLicsCisJYmVmb3JlRGF0ZTogJ0RlIGRhdHVtIG1vZXQgaGV0emVsZmRlIG9mIHZvb3Ige2xhYmVsfSB6aWpuLicsCisJc3RhcnRNb250aDogJ1NlbGVjdGVlciBlZW4gYmVnaW4gbWFhbmQnLAorCXNhbWVNb250aDogJ0RlemUgdHdlZSBkYXRhIG1vZXRlbiBpbiBkZXplbGZkZSBtYWFuZCB6aWpuIC0gdSBtb2V0IGVlbiB2YW4gYmVpZGUgYWFucGFzc2VuLicsCisJY3JlZGl0Y2FyZDogJ0hldCBpbmdldnVsZGUgY3JlZGl0Y2FyZG51bW1lciBpcyBuaWV0IGdlbGRpZy4gQ29udHJvbGVlciBoZXQgbnVtbWVyIGVuIHByb2JlZXIgb3BuaWV1dy4ge2xlbmd0aH0gZ2V0YWxsZW4gaW5nZXZ1bGQuJworCit9KTsKKworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5ubC1OTC5OdW1iZXIKKworZGVzY3JpcHRpb246IE51bWJlciBtZXNzYWdlcyBmb3IgRHV0Y2guCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQXJpYW4gU3RvbHdpamsKKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorICAtIC9Mb2NhbGUuRVUuTnVtYmVyCisKK3Byb3ZpZGVzOiBbTG9jYWxlLm5sLU5MLk51bWJlcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdubC1OTCcpLmluaGVyaXQoJ0VVJywgJ051bWJlcicpOworCisKKworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLm5vLU5PLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIE5vcndlZ2lhbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBFc3BlbiAnUmV4eGFycycgSG92bGFuZHNkYWwKKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5uby1OTy5EYXRlXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ25vLU5PJywgJ0RhdGUnLCB7CisKKwkvLyBDdWx0dXJlJ3MgZGF0ZSBvcmRlcjogREQuTU0uWVlZWQorCWRhdGVPcmRlcjogWydkYXRlJywgJ21vbnRoJywgJ3llYXInXSwKKwlzaG9ydERhdGU6ICclZC4lbS4lWScsCisJc2hvcnRUaW1lOiAnJUg6JU0nLAorCUFNOiAnQU0nLAorCVBNOiAnUE0nLAorCWZpcnN0RGF5T2ZXZWVrOiAxLAorCisJbGVzc1RoYW5NaW51dGVBZ286ICdrb3J0ZXJlIGVubiBldCBtaW51dHQgc2lkZW4nLAorCW1pbnV0ZUFnbzogJ29tdHJlbnQgZXQgbWludXR0IHNpZGVuJywKKwltaW51dGVzQWdvOiAne2RlbHRhfSBtaW51dHRlciBzaWRlbicsCisJaG91ckFnbzogJ29tdHJlbnQgZW4gdGltZSBzaWRlbicsCisJaG91cnNBZ286ICdvbXRyZW50IHtkZWx0YX0gdGltZXIgc2lkZW4nLAorCWRheUFnbzogJ3tkZWx0YX0gZGFnIHNpZGVuJywKKwlkYXlzQWdvOiAne2RlbHRhfSBkYWdlciBzaWRlbicKKworfSk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUubm8tTk8uRm9ybS5WYWxpZGF0b3IKKworZGVzY3JpcHRpb246IEZvcm0gVmFsaWRhdG9yIG1lc3NhZ2VzIGZvciBOb3J3ZWdpYW4uCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gRXNwZW4gJ1JleHhhcnMnIEhvdmxhbmRzZGFsCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUubm8tTk8uRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnbm8tTk8nLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAnRGV0dGUgZmVsdGV0IGVyIHDDg8Kla3JldmQuJywKKwltaW5MZW5ndGg6ICdWZW5ubGlnc3Qgc2tyaXYgaW5uIG1pbnN0IHttaW5MZW5ndGh9IHRlZ24gKGR1IHNrcmV2IHtsZW5ndGh9IHRlZ24pLicsCisJbWF4TGVuZ3RoOiAnVmVubmxpZ3N0IHNrcml2IGlubiBtYWtzaW1hbHQge21heExlbmd0aH0gdGVnbiAoZHUgc2tyZXYge2xlbmd0aH0gdGVnbikuJywKKwlpbnRlZ2VyOiAnVmVubmxpZ3N0IHNrcml2IGlubiBldCB0YWxsIGkgZGV0dGUgZmVsdGV0LiBUYWxsIG1lZCBkZXNpbWFsZXIgKGZvciBla3NlbXBlbCAxLDI1KSBlciBpa2tlIHRpbGxhdC4nLAorCW51bWVyaWM6ICdWZW5ubGlnc3Qgc2tyaXYgaW5uIGt1biBudW1lcmlza2UgdmVyZGllciBpIGRldHRlIGZlbHRldCAoZm9yIGVrc2VtcGVsICIxIiwgIjEuMSIsICItMSIgZWxsZXIgIi0xLjEiKS4nLAorCWRpZ2l0czogJ1Zlbm5saWdzdCBicnVrIGt1biBudW1tZXIgb2cgc2tpbGxldGVnbiBpIGRldHRlIGZlbHRldC4nLAorCWFscGhhOiAnVmVubmxpZ3N0IGJydWsga3VuIGJva3N0YXZlciAoYS16KSBpIGRldHRlIGZlbHRldC4gSW5nZW4gbWVsbG9tcm9tIGVsbGVyIGFuZHJlIHRlZ24gZXIgdGlsbGF0LicsCisJYWxwaGFudW06ICdWZW5ubGlnc3QgYnJ1ayBrdW4gYm9rc3RhdmVyIChhLXopIGVsbGVyIG51bW1lciAoMC05KSBpIGRldHRlIGZlbHRldC4gSW5nZW4gbWVsbG9tcm9tIGVsbGVyIGFuZHJlIHRlZ24gZXIgdGlsbGF0LicsCisJZGF0ZVN1Y2hBczogJ1Zlbm5saWdzdCBza3JpdiBpbm4gZW4gZ3lsZGlnIGRhdG8sIHNvbSB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ1Zlbm5saWdzdCBza3JpdiBpbm4gZW4gZ3lsZGlnIGRhdG8sIGkgZm9ybWF0ZXQgTU0vREQvWVlZWSAoZm9yIGVrc2VtcGVsICIxMi8zMS8xOTk5IiknLAorCWVtYWlsOiAnVmVubmxpZ3N0IHNrcml2IGlubiBlbiBneWxkaWcgZXBvc3QtYWRyZXNzZS4gRm9yIGVrc2VtcGVsICJlc3BlbkBkb21lbmUubm8iLicsCisJdXJsOiAnVmVubmxpZ3N0IHNrcml2IGlubiBlbiBneWxkaWcgVVJMLCBmb3IgZWtzZW1wZWwgaHR0cDovL3d3dy5leGFtcGxlLmNvbS4nLAorCWN1cnJlbmN5RG9sbGFyOiAnVmVubmxpZ3N0IGZ5bGwgdXQgZXQgZ3lsZGlnICQgYmVsw4PCuHAuIEZvciBla3NlbXBlbCAkMTAwLjAwIC4nLAorCW9uZVJlcXVpcmVkOiAnVmVubmxpZ3N0IGZ5bGwgdXQgbm9lIGkgbWluc3QgZXR0IGF2IGRpc3NlIGZlbHRlbmUuJywKKwllcnJvclByZWZpeDogJ0ZlaWw6ICcsCisJd2FybmluZ1ByZWZpeDogJ0FkdmFyc2VsOiAnCisKK30pOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLnBsLVBMLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIFBvbGlzaC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBPc2thciBLcmF3Y3p5aworCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLnBsLVBMLkRhdGVdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgncGwtUEwnLCAnRGF0ZScsIHsKKworCW1vbnRoczogWydTdHljemXFhCcsICdMdXR5JywgJ01hcnplYycsICdLd2llY2llxYQnLCAnTWFqJywgJ0N6ZXJ3aWVjJywgJ0xpcGllYycsICdTaWVycGllxYQnLCAnV3J6ZXNpZcWEJywgJ1Bhxbpkemllcm5paycsICdMaXN0b3BhZCcsICdHcnVkemllxYQnXSwKKwltb250aHNfYWJicjogWydzdHknLCAnbHV0JywgJ21hcicsICdrd2knLCAnbWFqJywgJ2N6ZScsICdsaXAnLCAnc2llJywgJ3dyeicsICdwYcW6JywgJ2xpcycsICdncnUnXSwKKwlkYXlzOiBbJ05pZWR6aWVsYScsICdQb25pZWR6aWHFgmVrJywgJ1d0b3JlaycsICfFmnJvZGEnLCAnQ3p3YXJ0ZWsnLCAnUGnEhXRlaycsICdTb2JvdGEnXSwKKwlkYXlzX2FiYnI6IFsnbmllZHouJywgJ3Bvbi4nLCAnd3QuJywgJ8Wbci4nLCAnY3p3LicsICdwdC4nLCAnc29iLiddLAorCisJLy8gQ3VsdHVyZSdzIGRhdGUgb3JkZXI6IFlZWVktTU0tREQKKwlkYXRlT3JkZXI6IFsneWVhcicsICdtb250aCcsICdkYXRlJ10sCisJc2hvcnREYXRlOiAnJVktJW0tJWQnLAorCXNob3J0VGltZTogJyVIOiVNJywKKwlBTTogJ25hZCByYW5lbScsCisJUE06ICdwbyBwb8WCdWRuaXUnLAorCWZpcnN0RGF5T2ZXZWVrOiAxLAorCisJLy8gRGF0ZS5FeHRyYXMKKwlvcmRpbmFsOiBmdW5jdGlvbihkYXlPZk1vbnRoKXsKKwkJcmV0dXJuIChkYXlPZk1vbnRoID4gMyAmJiBkYXlPZk1vbnRoIDwgMjEpID8gJ3R5JyA6IFsndHknLCAnc3p5JywgJ2dpJywgJ2NpJywgJ3R5J11bTWF0aC5taW4oZGF5T2ZNb250aCAlIDEwLCA0KV07CisJfSwKKworCWxlc3NUaGFuTWludXRlQWdvOiAnbW5pZWogbmnFvCBtaW51dGUgdGVtdScsCisJbWludXRlQWdvOiAnb2tvxYJvIG1pbnV0xJkgdGVtdScsCisJbWludXRlc0FnbzogJ3tkZWx0YX0gbWludXQgdGVtdScsCisJaG91ckFnbzogJ29rb8WCbyBnb2R6aW7EmSB0ZW11JywKKwlob3Vyc0FnbzogJ29rb8WCbyB7ZGVsdGF9IGdvZHppbiB0ZW11JywKKwlkYXlBZ286ICdXY3pvcmFqJywKKwlkYXlzQWdvOiAne2RlbHRhfSBkbmkgdGVtdScsCisKKwlsZXNzVGhhbk1pbnV0ZVVudGlsOiAnemEgbmllY2HFgsSFIG1pbnV0xJknLAorCW1pbnV0ZVVudGlsOiAnemEgb2tvxYJvIG1pbnV0xJknLAorCW1pbnV0ZXNVbnRpbDogJ3phIHtkZWx0YX0gbWludXQnLAorCWhvdXJVbnRpbDogJ3phIG9rb8WCbyBnb2R6aW7EmScsCisJaG91cnNVbnRpbDogJ3phIG9rb8WCbyB7ZGVsdGF9IGdvZHppbicsCisJZGF5VW50aWw6ICd6YSAxIGR6aWXFhCcsCisJZGF5c1VudGlsOiAnemEge2RlbHRhfSBkbmknCisKK30pOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLnBsLVBMLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgUG9saXNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIE9za2FyIEtyYXdjenlrCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUucGwtUEwuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgncGwtUEwnLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAnVG8gcG9sZSBqZXN0IHd5bWFnYW5lLicsCisJbWluTGVuZ3RoOiAnV3ltYWdhbmUgamVzdCBwcnp5bmFqbW5pZWoge21pbkxlbmd0aH0gem5ha8OzdyAod3Bpc2FueWNoIHpvc3RhxYJvIHR5bGtvIHtsZW5ndGh9KS4nLAorCW1heExlbmd0aDogJ0RvendvbG9uZSBqZXN0IG5pZSB3acSZY2VqIG5pxbwge21heExlbmd0aH0gem5ha8OzdyAod3Bpc2FueWNoIHpvc3RhxYJvIHtsZW5ndGh9KScsCisJaW50ZWdlcjogJ1RvIHBvbGUgd3ltYWdhIGxpY3piIGNhxYJ5Y2guIExpY3pieSBkemllc2nEmXRuZSAobnAuIDEuMjUpIHPEhSBuaWVkb3p3b2xvbmUuJywKKwludW1lcmljOiAnUHJvc2lteSB1xbx5d2HEhyB0eWxrbyBudW1lcnljem55Y2ggd2FydG/Fm2NpIHcgdHltIHBvbHUgKG5wLiAiMSIsICIxLjEiLCAiLTEiIGx1YiAiLTEuMSIpLicsCisJZGlnaXRzOiAnUHJvc2lteSB1xbx5d2HEhyBsaWN6YiBvcmF6IHphbmtvdyBwdW5rdHVhY3lqbnljaCB3IHR5cCBwb2x1IChkbGEgcHJ6eWvFgmFkdSwgcHJ6eSBudW1lcnplIHRlbGVmb251IG15xZtsbmlraSBpIGtyb3BraSBzxIUgZG96d29sb25lKS4nLAorCWFscGhhOiAnUHJvc2lteSB1xbx5d2HEhyB0eWxrbyBsaXRlciAoYS16KSB3IHR5bSBwb2x1LiBTcGFjamUgb3JheiBpbm5lIHpuYWtpIHPEhSBuaWVkb3p3b2xvbmUuJywKKwlhbHBoYW51bTogJ1Byb3NpbXkgdcW8eXdhxIcgdHlsa28gbGl0ZXIgKGEteikgbHViIGxpY3piICgwLTkpIHcgdHltIHBvbHUuIFNwYWNqZSBvcmF6IGlubmUgem5ha2kgc8SFIG5pZWRvendvbG9uZS4nLAorCWRhdGVTdWNoQXM6ICdQcm9zaW15IHBvZGHEhyBwcmF3aWTFgm93xIUgZGF0xJkgdyBmb3JtYWNpZToge2RhdGV9JywKKwlkYXRlSW5Gb3JtYXRNRFk6ICdQcm9zaW15IHBvZGHEhyBwb3ByYXduxIUgZGF0ZSB3IGZvcm1hY2llIERELk1NLlJSUlIgKGkuZS4gIjEyLjAxLjIwMDkiKScsCisJZW1haWw6ICdQcm9zaW15IHBvZGHEhyBwcmF3aWTFgm93eSBhZHJlcyBlLW1haWwsIG5wLiAiamFuQGRvbWVuYS5wbCIuJywKKwl1cmw6ICdQcm9zaW15IHBvZGHEhyBwcmF3aWTFgm93eSBhZHJlcyBVUkwsIG5wLiBodHRwOi8vd3d3LmV4YW1wbGUuY29tLicsCisJY3VycmVuY3lEb2xsYXI6ICdQcm9zaW15IHBvZGHEhyBwcmF3aWTFgm93xIUgc3VtxJkgdyBQTE4uIERsYSBwcnp5a8WCYWR1OiAxMDAuMDAgUExOLicsCisJb25lUmVxdWlyZWQ6ICdQcm9zaW15IHd5cGXFgm5pxIcgY2hvY2lhxbwgamVkbm8geiBww7NsLicsCisJZXJyb3JQcmVmaXg6ICdCxYLEhWQ6ICcsCisJd2FybmluZ1ByZWZpeDogJ1V3YWdhOiAnLAorCisJLy8gRm9ybS5WYWxpZGF0b3IuRXh0cmFzCisJbm9TcGFjZTogJ1cgdHltIHBvbHUgbmllIG1vZ8SFIHpuYWpkb3dhxIcgc2nEmSBzcGFjamUuJywKKwlyZXFDaGtCeU5vZGU6ICdCcmFrIHphem5hY3pvbnljaCBlbGVtZW50w7N3LicsCisJcmVxdWlyZWRDaGs6ICdUbyBwb2xlIGplc3Qgd3ltYWdhbmUuJywKKwlyZXFDaGtCeU5hbWU6ICdQcm9zaW15IHd5YnJhxIcgeiB7bGFiZWx9LicsCisJbWF0Y2g6ICdUbyBwb2xlIG11c2kgYnnEhyB0YWtpZSBzYW1vIGphayB7bWF0Y2hOYW1lfScsCisJc3RhcnREYXRlOiAnZGF0YSBwb2N6xIV0a293YScsCisJZW5kRGF0ZTogJ2RhdGEga2/FhGNvd2EnLAorCWN1cnJlbmREYXRlOiAnYWt0dWFsbmEgZGF0YScsCisJYWZ0ZXJEYXRlOiAnUG9kYW5hIGRhdGEgcG9pbm5hIGJ5xIcgdGFrYSBzYW1hIGx1YiBwbyB7bGFiZWx9LicsCisJYmVmb3JlRGF0ZTogJ1BvZGFuYSBkYXRhIHBvaW5uYSBiecSHIHRha2Egc2FtYSBsdWIgcHJ6ZWQge2xhYmVsfS4nLAorCXN0YXJ0TW9udGg6ICdQcm9zaW15IHd5YnJhxIcgcG9jesSFdGtvd3kgbWllc2nEhWMuJywKKwlzYW1lTW9udGg6ICdUZSBkd2llIGRhdHkgbXVzesSFIGJ5xIcgdyB6YWtyZXNpZSB0ZWdvIHNhbWVnbyBtaWVzacSFY2EgLSB3eW1hZ2FuYSBqZXN0IHptaWFuYSBrdMOzcmVnb8WbIHogcMOzbC4nCisKK30pOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLnB0LVBULkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIFBvcnR1Z3Vlc2UuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gRmFiaW8gTWlyYW5kYSBDb3N0YQorCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLnB0LVBULkRhdGVdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgncHQtUFQnLCAnRGF0ZScsIHsKKworCW1vbnRoczogWydKYW5laXJvJywgJ0ZldmVyZWlybycsICdNYXLDp28nLCAnQWJyaWwnLCAnTWFpbycsICdKdW5obycsICdKdWxobycsICdBZ29zdG8nLCAnU2V0ZW1icm8nLCAnT3V0dWJybycsICdOb3ZlbWJybycsICdEZXplbWJybyddLAorCW1vbnRoc19hYmJyOiBbJ0phbicsICdGZXYnLCAnTWFyJywgJ0FicicsICdNYWknLCAnSnVuJywgJ0p1bCcsICdBZ28nLCAnU2V0JywgJ091dCcsICdOb3YnLCAnRGV6J10sCisJZGF5czogWydEb21pbmdvJywgJ1NlZ3VuZGEtZmVpcmEnLCAnVGVyw6dhLWZlaXJhJywgJ1F1YXJ0YS1mZWlyYScsICdRdWludGEtZmVpcmEnLCAnU2V4dGEtZmVpcmEnLCAnU8OhYmFkbyddLAorCWRheXNfYWJicjogWydEb20nLCAnU2VnJywgJ1RlcicsICdRdWEnLCAnUXVpJywgJ1NleCcsICdTw6FiJ10sCisKKwkvLyBDdWx0dXJlJ3MgZGF0ZSBvcmRlcjogREQtTU0tWVlZWQorCWRhdGVPcmRlcjogWydkYXRlJywgJ21vbnRoJywgJ3llYXInXSwKKwlzaG9ydERhdGU6ICclZC0lbS0lWScsCisJc2hvcnRUaW1lOiAnJUg6JU0nLAorCUFNOiAnQU0nLAorCVBNOiAnUE0nLAorCWZpcnN0RGF5T2ZXZWVrOiAxLAorCisJLy8gRGF0ZS5FeHRyYXMKKwlvcmRpbmFsOiAnwronLAorCisJbGVzc1RoYW5NaW51dGVBZ286ICdow6EgbWVub3MgZGUgdW0gbWludXRvJywKKwltaW51dGVBZ286ICdow6EgY2VyY2EgZGUgdW0gbWludXRvJywKKwltaW51dGVzQWdvOiAnaMOhIHtkZWx0YX0gbWludXRvcycsCisJaG91ckFnbzogJ2jDoSBjZXJjYSBkZSB1bWEgaG9yYScsCisJaG91cnNBZ286ICdow6EgY2VyY2EgZGUge2RlbHRhfSBob3JhcycsCisJZGF5QWdvOiAnaMOhIHVtIGRpYScsCisJZGF5c0FnbzogJ2jDoSB7ZGVsdGF9IGRpYXMnLAorCXdlZWtBZ286ICdow6EgdW1hIHNlbWFuYScsCisJd2Vla3NBZ286ICdow6Ege2RlbHRhfSBzZW1hbmFzJywKKwltb250aEFnbzogJ2jDoSB1bSBtw6pzJywKKwltb250aHNBZ286ICdow6Ege2RlbHRhfSBtZXNlcycsCisJeWVhckFnbzogJ2jDoSB1bSBhbm8nLAorCXllYXJzQWdvOiAnaMOhIHtkZWx0YX0gYW5vcycsCisKKwlsZXNzVGhhbk1pbnV0ZVVudGlsOiAnZW0gbWVub3MgZGUgdW0gbWludXRvJywKKwltaW51dGVVbnRpbDogJ2VtIHVtIG1pbnV0bycsCisJbWludXRlc1VudGlsOiAnZW0ge2RlbHRhfSBtaW51dG9zJywKKwlob3VyVW50aWw6ICdlbSB1bWEgaG9yYScsCisJaG91cnNVbnRpbDogJ2VtIHtkZWx0YX0gaG9yYXMnLAorCWRheVVudGlsOiAnZW0gdW0gZGlhJywKKwlkYXlzVW50aWw6ICdlbSB7ZGVsdGF9IGRpYXMnLAorCXdlZWtVbnRpbDogJ2VtIHVtYSBzZW1hbmEnLAorCXdlZWtzVW50aWw6ICdlbSB7ZGVsdGF9IHNlbWFuYXMnLAorCW1vbnRoVW50aWw6ICdlbSB1bSBtw6pzJywKKwltb250aHNVbnRpbDogJ2VtIHtkZWx0YX0gbWVzZXMnLAorCXllYXJVbnRpbDogJ2VtIHVtIGFubycsCisJeWVhcnNVbnRpbDogJ2VtIHtkZWx0YX0gYW5vcycKKworfSk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUucHQtQlIuRGF0ZQorCitkZXNjcmlwdGlvbjogRGF0ZSBtZXNzYWdlcyBmb3IgUG9ydHVndWVzZSAoQnJhemlsKS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBGYWJpbyBNaXJhbmRhIENvc3RhCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKyAgLSAvTG9jYWxlLnB0LVBULkRhdGUKKworcHJvdmlkZXM6IFtMb2NhbGUucHQtQlIuRGF0ZV0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdwdC1CUicsICdEYXRlJywgeworCisJLy8gQ3VsdHVyZSdzIGRhdGUgb3JkZXI6IEREL01NL1lZWVkKKwlzaG9ydERhdGU6ICclZC8lbS8lWScKKworfSkuaW5oZXJpdCgncHQtUFQnLCAnRGF0ZScpOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLnB0LUJSLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgUG9ydHVndWVzZSAoQnJhemlsKS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBGw6FiaW8gTWlyYW5kYSBDb3N0YQorCityZXF1aXJlczoKKyAgLSAvTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLnB0LUJSLkZvcm0uVmFsaWRhdG9yXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ3B0LUJSJywgJ0Zvcm1WYWxpZGF0b3InLCB7CisKKwlyZXF1aXJlZDogJ0VzdGUgY2FtcG8gw6kgb2JyaWdhdMOzcmlvLicsCisJbWluTGVuZ3RoOiAnRGlnaXRlIHBlbG8gbWVub3Mge21pbkxlbmd0aH0gY2FyYWN0ZXJlcyAodGFtYW5obyBhdHVhbDoge2xlbmd0aH0pLicsCisJbWF4TGVuZ3RoOiAnTsOjbyBkaWdpdGUgbWFpcyBkZSB7bWF4TGVuZ3RofSBjYXJhY3RlcmVzICh0YW1hbmhvIGF0dWFsOiB7bGVuZ3RofSkuJywKKwlpbnRlZ2VyOiAnUG9yIGZhdm9yIGRpZ2l0ZSBhcGVuYXMgdW0gbsO6bWVybyBpbnRlaXJvIG5lc3RlIGNhbXBvLiBOw6NvIHPDo28gcGVybWl0aWRvcyBuw7ptZXJvcyBkZWNpbWFpcyAocG9yIGV4ZW1wbG8sIDEsMjUpLicsCisJbnVtZXJpYzogJ1BvciBmYXZvciBkaWdpdGUgYXBlbmFzIHZhbG9yZXMgbnVtw6lyaWNvcyBuZXN0ZSBjYW1wbyAocG9yIGV4ZW1wbG8sICIxIiBvdSAiMS4xIiBvdSAiLTEiIG91ICItMSwxIikuJywKKwlkaWdpdHM6ICdQb3IgZmF2b3IgdXNlIGFwZW5hcyBuw7ptZXJvcyBlIHBvbnR1YcOnw6NvIG5lc3RlIGNhbXBvIChwb3IgZXhlbXBsbywgdW0gbsO6bWVybyBkZSB0ZWxlZm9uZSBjb20gdHJhw6dvcyBvdSBwb250b3Mgw6kgcGVybWl0aWRvKS4nLAorCWFscGhhOiAnUG9yIGZhdm9yIHVzZSBzb21lbnRlIGxldHJhcyAoYS16KS4gRXNwYcOnbyBlIG91dHJvcyBjYXJhY3RlcmVzIG7Do28gc8OjbyBwZXJtaXRpZG9zLicsCisJYWxwaGFudW06ICdVc2Ugc29tZW50ZSBsZXRyYXMgKGEteikgb3UgbsO6bWVyb3MgKDAtOSkgbmVzdGUgY2FtcG8uIEVzcGHDp28gZSBvdXRyb3MgY2FyYWN0ZXJlcyBuw6NvIHPDo28gcGVybWl0aWRvcy4nLAorCWRhdGVTdWNoQXM6ICdEaWdpdGUgdW1hIGRhdGEgdsOhbGlkYSwgY29tbyB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ0RpZ2l0ZSB1bWEgZGF0YSB2w6FsaWRhLCBjb21vIEREL01NL1lZWVkgKHBvciBleGVtcGxvLCAiMzEvMTIvMTk5OSIpJywKKwllbWFpbDogJ0RpZ2l0ZSB1bSBlbmRlcmXDp28gZGUgZW1haWwgdsOhbGlkby4gUG9yIGV4ZW1wbG8gIm5vbWVAZG9taW5pby5jb20iLicsCisJdXJsOiAnRGlnaXRlIHVtYSBVUkwgdsOhbGlkYS4gRXhlbXBsbzogaHR0cDovL3d3dy5leGFtcGxlLmNvbS4nLAorCWN1cnJlbmN5RG9sbGFyOiAnRGlnaXRlIHVtIHZhbG9yIGVtIGRpbmhlaXJvIHbDoWxpZG8uIEV4ZW1wbG86IFIkMTAwLDAwIC4nLAorCW9uZVJlcXVpcmVkOiAnRGlnaXRlIGFsZ28gcGFyYSBwZWxvIG1lbm9zIHVtIGRlc3NlcyBjYW1wb3MuJywKKwllcnJvclByZWZpeDogJ0Vycm86ICcsCisJd2FybmluZ1ByZWZpeDogJ0F2aXNvOiAnLAorCisJLy8gRm9ybS5WYWxpZGF0b3IuRXh0cmFzCisJbm9TcGFjZTogJ07Do28gw6kgcG9zc8OtdmVsIGRpZ2l0YXIgZXNwYcOnb3MgbmVzdGUgY2FtcG8uJywKKwlyZXFDaGtCeU5vZGU6ICdOw6NvIGZvaSBzZWxlY2lvbmFkbyBuZW5odW0gaXRlbS4nLAorCXJlcXVpcmVkQ2hrOiAnRXN0ZSBjYW1wbyDDqSBvYnJpZ2F0w7NyaW8uJywKKwlyZXFDaGtCeU5hbWU6ICdQb3IgZmF2b3IgZGlnaXRlIHVtIHtsYWJlbH0uJywKKwltYXRjaDogJ0VzdGUgY2FtcG8gZGV2ZSBzZXIgaWd1YWwgYW8gY2FtcG8ge21hdGNoTmFtZX0uJywKKwlzdGFydERhdGU6ICdhIGRhdGEgaW5pY2lhbCcsCisJZW5kRGF0ZTogJ2EgZGF0YSBmaW5hbCcsCisJY3VycmVuZERhdGU6ICdhIGRhdGEgYXR1YWwnLAorCWFmdGVyRGF0ZTogJ0EgZGF0YSBkZXZlIHNlciBpZ3VhbCBvdSBwb3N0ZXJpb3IgYSB7bGFiZWx9LicsCisJYmVmb3JlRGF0ZTogJ0EgZGF0YSBkZXZlIHNlciBpZ3VhbCBvdSBhbnRlcmlvciBhIHtsYWJlbH0uJywKKwlzdGFydE1vbnRoOiAnUG9yIGZhdm9yIHNlbGVjaW9uZSB1bWEgZGF0YSBpbmljaWFsLicsCisJc2FtZU1vbnRoOiAnRXN0YXMgZHVhcyBkYXRhcyBkZXZlbSB0ZXIgbyBtZXNtbyBtw6pzIC0gdm9jw6ogZGV2ZSBtb2RpZmljYXIgdW1hIGRhcyBkdWFzLicsCisJY3JlZGl0Y2FyZDogJ08gbsO6bWVybyBkbyBjYXJ0w6NvIGRlIGNyw6lkaXRvIGluZm9ybWFkbyDDqSBpbnbDoWxpZG8uIFBvciBmYXZvciB2ZXJpZmlxdWUgbyB2YWxvciBlIHRlbnRlIG5vdmFtZW50ZS4ge2xlbmd0aH0gbsO6bWVyb3MgaW5mb3JtYWRvcy4nCisKK30pOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLnB0LVBULkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgUG9ydHVndWVzZS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBNaXF1ZWwgSHVkaW4KKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5wdC1QVC5Gb3JtLlZhbGlkYXRvcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdwdC1QVCcsICdGb3JtVmFsaWRhdG9yJywgeworCisJcmVxdWlyZWQ6ICdFc3RlIGNhbXBvIMOpIG5lY2Vzc8OhcmlvLicsCisJbWluTGVuZ3RoOiAnRGlnaXRlIHBlbG8gbWVub3N7bWluTGVuZ3RofSBjYXJhY3RlcmVzIChjb21wcmltZW50byB7bGVuZ3RofSBjYXJhY3RlcmVzKS4nLAorCW1heExlbmd0aDogJ07Do28gaW5zaXJhIG1haXMgZGUge21heExlbmd0aH0gY2FyYWN0ZXJlcyAoY29tcHJpbWVudG8ge2xlbmd0aH0gY2FyYWN0ZXJlcykuJywKKwlpbnRlZ2VyOiAnRGlnaXRlIHVtIG7Dum1lcm8gaW50ZWlybyBuZXN0ZSBkb23DrW5pby4gQ29tIG7Dum1lcm9zIGRlY2ltYWlzIChwb3IgZXhlbXBsbywgMSwyNSksIG7Do28gc8OjbyBwZXJtaXRpZGFzLicsCisJbnVtZXJpYzogJ0RpZ2l0ZSBhcGVuYXMgdmFsb3JlcyBudW3DqXJpY29zIG5lc3RlIGRvbcOtbmlvIChwLmV4LiwgIjEiIG91ICIxLjEiIG91ICItMSIgb3UgIi0xLDEiKS4nLAorCWRpZ2l0czogJ1BvciBmYXZvciwgdXNlIG7Dum1lcm9zIGUgcG9udHVhw6fDo28gYXBlbmFzIG5lc3RlIGNhbXBvIChwLmV4LiwgdW0gbsO6bWVybyBkZSB0ZWxlZm9uZSBjb20gdHJhw6dvcyBvdSBwb250b3Mgw6kgcGVybWl0aWRhKS4nLAorCWFscGhhOiAnUG9yIGZhdm9yIHVzZSBzb21lbnRlIGxldHJhcyAoYS16KSwgY29tIG5lc3RhIMOhcmVhLiBOw6NvIHV0aWxpemUgZXNwYcOnb3MgbmVtIG91dHJvcyBjYXJhY3RlcmVzIHPDo28gcGVybWl0aWRvcy4nLAorCWFscGhhbnVtOiAnVXNlIHNvbWVudGUgbGV0cmFzIChhLXopIG91IG7Dum1lcm9zICgwLTkpIG5lc3RlIGNhbXBvLiBOw6NvIHV0aWxpemUgZXNwYcOnb3MgbmVtIG91dHJvcyBjYXJhY3RlcmVzIHPDo28gcGVybWl0aWRvcy4nLAorCWRhdGVTdWNoQXM6ICdEaWdpdGUgdW1hIGRhdGEgdsOhbGlkYSwgY29tbyB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ0RpZ2l0ZSB1bWEgZGF0YSB2w6FsaWRhLCBjb21vIEREL01NL1lZWVkgKHAuZXguICIzMS8xMi8xOTk5IiknLAorCWVtYWlsOiAnRGlnaXRlIHVtIGVuZGVyZcOnbyBkZSBlbWFpbCB2w6FsaWRvLiBQb3IgZXhlbXBsbyAiZnJlZEBkb21haW4uY29tIi4nLAorCXVybDogJ0RpZ2l0ZSB1bWEgVVJMIHbDoWxpZGEsIGNvbW8gaHR0cDovL3d3dy5leGFtcGxlLmNvbS4nLAorCWN1cnJlbmN5RG9sbGFyOiAnRGlnaXRlIHVtIHZhbG9yIHbDoWxpZG8gJC4gUG9yIGV4ZW1wbG8gJCAxMDAsMDAuICcsCisJb25lUmVxdWlyZWQ6ICdEaWdpdGUgYWxnbyBwYXJhIHBlbG8gbWVub3MgdW0gZGVzc2VzIGluc3Vtb3MuJywKKwllcnJvclByZWZpeDogJ0Vycm86ICcsCisJd2FybmluZ1ByZWZpeDogJ0F2aXNvOiAnCisKK30pOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLnJ1LVJVLXVuaWNvZGUuRGF0ZQorCitkZXNjcmlwdGlvbjogRGF0ZSBtZXNzYWdlcyBmb3IgUnVzc2lhbiAodXRmLTgpLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEV2c3RpZ25lZXYgUGF2ZWwKKyAgLSBLdXJ5YW5vdmljaCBFZ29yCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUucnUtUlUuRGF0ZV0KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKworLy8gUnVzc2lhbiBsYW5ndWFnZSBwbHVyYWxpemF0aW9uIHJ1bGVzLCB0YWtlbiBmcm9tIENMRFIgcHJvamVjdCwgaHR0cDovL3VuaWNvZGUub3JnL2NsZHIvCisvLyBvbmUgLT4gbiBtb2QgMTAgaXMgMSBhbmQgbiBtb2QgMTAwIGlzIG5vdCAxMTsKKy8vIGZldyAtPiBuIG1vZCAxMCBpbiAyLi40IGFuZCBuIG1vZCAxMDAgbm90IGluIDEyLi4xNDsKKy8vIG1hbnkgLT4gbiBtb2QgMTAgaXMgMCBvciBuIG1vZCAxMCBpbiA1Li45IG9yIG4gbW9kIDEwMCBpbiAxMS4uMTQ7CisvLyBvdGhlciAtPiBldmVyeXRoaW5nIGVsc2UgKGV4YW1wbGUgMy4xNCkKK3ZhciBwbHVyYWxpemUgPSBmdW5jdGlvbiAobiwgb25lLCBmZXcsIG1hbnksIG90aGVyKXsKKwl2YXIgbW9kdWxvMTAgPSBuICUgMTAsCisJCW1vZHVsbzEwMCA9IG4gJSAxMDA7CisKKwlpZiAobW9kdWxvMTAgPT0gMSAmJiBtb2R1bG8xMDAgIT0gMTEpeworCQlyZXR1cm4gb25lOworCX0gZWxzZSBpZiAoKG1vZHVsbzEwID09IDIgfHwgbW9kdWxvMTAgPT0gMyB8fCBtb2R1bG8xMCA9PSA0KSAmJiAhKG1vZHVsbzEwMCA9PSAxMiB8fCBtb2R1bG8xMDAgPT0gMTMgfHwgbW9kdWxvMTAwID09IDE0KSl7CisJCXJldHVybiBmZXc7CisJfSBlbHNlIGlmIChtb2R1bG8xMCA9PSAwIHx8IChtb2R1bG8xMCA9PSA1IHx8IG1vZHVsbzEwID09IDYgfHwgbW9kdWxvMTAgPT0gNyB8fCBtb2R1bG8xMCA9PSA4IHx8IG1vZHVsbzEwID09IDkpIHx8IChtb2R1bG8xMDAgPT0gMTEgfHwgbW9kdWxvMTAwID09IDEyIHx8IG1vZHVsbzEwMCA9PSAxMyB8fCBtb2R1bG8xMDAgPT0gMTQpKXsKKwkJcmV0dXJuIG1hbnk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIG90aGVyOworCX0KK307CisKK0xvY2FsZS5kZWZpbmUoJ3J1LVJVJywgJ0RhdGUnLCB7CisKKwltb250aHM6IFsn0K/QvdCy0LDRgNGMJywgJ9Ck0LXQstGA0LDQu9GMJywgJ9Cc0LDRgNGCJywgJ9CQ0L/RgNC10LvRjCcsICfQnNCw0LknLCAn0JjRjtC90YwnLCAn0JjRjtC70YwnLCAn0JDQstCz0YPRgdGCJywgJ9Ch0LXQvdGC0Y/QsdGA0YwnLCAn0J7QutGC0Y/QsdGA0YwnLCAn0J3QvtGP0LHRgNGMJywgJ9CU0LXQutCw0LHRgNGMJ10sCisJbW9udGhzX2FiYnI6IFsn0Y/QvdCyJywgJ9GE0LXQstGAJywgJ9C80LDRgNGCJywgJ9Cw0L/RgCcsICfQvNCw0LknLCfQuNGO0L3RjCcsJ9C40Y7Qu9GMJywn0LDQstCzJywn0YHQtdC90YInLCfQvtC60YInLCfQvdC+0Y/QsScsJ9C00LXQuiddLAorCWRheXM6IFsn0JLQvtGB0LrRgNC10YHQtdC90YzQtScsICfQn9C+0L3QtdC00LXQu9GM0L3QuNC6JywgJ9CS0YLQvtGA0L3QuNC6JywgJ9Ch0YDQtdC00LAnLCAn0KfQtdGC0LLQtdGA0LMnLCAn0J/Rj9GC0L3QuNGG0LAnLCAn0KHRg9Cx0LHQvtGC0LAnXSwKKwlkYXlzX2FiYnI6IFsn0JLRgScsICfQn9C9JywgJ9CS0YInLCAn0KHRgCcsICfQp9GCJywgJ9Cf0YInLCAn0KHQsSddLAorCisJLy8gQ3VsdHVyZSdzIGRhdGUgb3JkZXI6IERELk1NLllZWVkKKwlkYXRlT3JkZXI6IFsnZGF0ZScsICdtb250aCcsICd5ZWFyJ10sCisJc2hvcnREYXRlOiAnJWQuJW0uJVknLAorCXNob3J0VGltZTogJyVIOiVNJywKKwlBTTogJ0FNJywKKwlQTTogJ1BNJywKKwlmaXJzdERheU9mV2VlazogMSwKKworCS8vIERhdGUuRXh0cmFzCisJb3JkaW5hbDogJycsCisKKwlsZXNzVGhhbk1pbnV0ZUFnbzogJ9C80LXQvdGM0YjQtSDQvNC40L3Rg9GC0Ysg0L3QsNC30LDQtCcsCisJbWludXRlQWdvOiAn0LzQuNC90YPRgtGDINC90LDQt9Cw0LQnLAorCW1pbnV0ZXNBZ286IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICd7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICfQvNC40L3Rg9GC0YMnLCAn0LzQuNC90YPRgtGLJywgJ9C80LjQvdGD0YInKSArICcg0L3QsNC30LDQtCc7IH0sCisJaG91ckFnbzogJ9GH0LDRgSDQvdCw0LfQsNC0JywKKwlob3Vyc0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3tkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ9GH0LDRgScsICfRh9Cw0YHQsCcsICfRh9Cw0YHQvtCyJykgKyAnINC90LDQt9Cw0LQnOyB9LAorCWRheUFnbzogJ9Cy0YfQtdGA0LAnLAorCWRheXNBZ286IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICd7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICfQtNC10L3RjCcsICfQtNC90Y8nLCAn0LTQvdC10LknKSArICcg0L3QsNC30LDQtCc7IH0sCisJd2Vla0FnbzogJ9C90LXQtNC10LvRjiDQvdCw0LfQsNC0JywKKwl3ZWVrc0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3tkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ9C90LXQtNC10LvRjycsICfQvdC10LTQtdC70LgnLCAn0L3QtdC00LXQu9GMJykgKyAnINC90LDQt9Cw0LQnOyB9LAorCW1vbnRoQWdvOiAn0LzQtdGB0Y/RhiDQvdCw0LfQsNC0JywKKwltb250aHNBZ286IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICd7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICfQvNC10YHRj9GGJywgJ9C80LXRgdGP0YbQsCcsICfQvNC10YHQtdGG0LXQsicpICsgJyDQvdCw0LfQsNC0JzsgfSwKKwl5ZWFyQWdvOiAn0LPQvtC0INC90LDQt9Cw0LQnLAorCXllYXJzQWdvOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAne2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAn0LPQvtC0JywgJ9Cz0L7QtNCwJywgJ9C70LXRgicpICsgJyDQvdCw0LfQsNC0JzsgfSwKKworCWxlc3NUaGFuTWludXRlVW50aWw6ICfQvNC10L3RjNGI0LUg0YfQtdC8INGH0LXRgNC10Lcg0LzQuNC90YPRgtGDJywKKwltaW51dGVVbnRpbDogJ9GH0LXRgNC10Lcg0LzQuNC90YPRgtGDJywKKwltaW51dGVzVW50aWw6IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICfRh9C10YDQtdC3IHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ9GH0LDRgScsICfRh9Cw0YHQsCcsICfRh9Cw0YHQvtCyJykgKyAnJzsgfSwKKwlob3VyVW50aWw6ICfRh9C10YDQtdC3INGH0LDRgScsCisJaG91cnNVbnRpbDogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ9GH0LXRgNC10Lcge2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAn0YfQsNGBJywgJ9GH0LDRgdCwJywgJ9GH0LDRgdC+0LInKSArICcnOyB9LAorCWRheVVudGlsOiAn0LfQsNCy0YLRgNCwJywKKwlkYXlzVW50aWw6IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICfRh9C10YDQtdC3IHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ9C00LXQvdGMJywgJ9C00L3RjycsICfQtNC90LXQuScpICsgJyc7IH0sCisJd2Vla1VudGlsOiAn0YfQtdGA0LXQtyDQvdC10LTQtdC70Y4nLAorCXdlZWtzVW50aWw6IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICfRh9C10YDQtdC3IHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ9C90LXQtNC10LvRjicsICfQvdC10LTQtdC70LgnLCAn0L3QtdC00LXQu9GMJykgKyAnJzsgfSwKKwltb250aFVudGlsOiAn0YfQtdGA0LXQtyDQvNC10YHRj9GGJywKKwltb250aHNVbnRpbDogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ9GH0LXRgNC10Lcge2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAn0LzQtdGB0Y/RhicsICfQvNC10YHRj9GG0LAnLCAn0LzQtdGB0LXRhtC10LInKSArICcnOyB9LAorCXllYXJVbnRpbDogJ9GH0LXRgNC10LcnLAorCXllYXJzVW50aWw6IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICfRh9C10YDQtdC3IHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ9Cz0L7QtCcsICfQs9C+0LTQsCcsICfQu9C10YInKSArICcnOyB9CisKK30pOworCisvLzwxLjJjb21wYXQ+CisKK0xvY2FsZS5kZWZpbmUoJ3J1LVJVLXVuaWNvZGUnKS5pbmhlcml0KCdydS1SVScsICdEYXRlJyk7CisKKy8vPC8xLjJjb21wYXQ+CisKK30pKCk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUucnUtUlUtdW5pY29kZS5Gb3JtLlZhbGlkYXRvcgorCitkZXNjcmlwdGlvbjogRm9ybSBWYWxpZGF0b3IgbWVzc2FnZXMgZm9yIFJ1c3NpYW4gKHV0Zi04KS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBDaGVybm9kYXJvdiBFZ29yCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUucnUtUlUuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgncnUtUlUnLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAn0K3RgtC+INC/0L7Qu9C1INC+0LHRj9C30LDRgtC10LvRjNC90L4g0Log0LfQsNC/0L7Qu9C90LXQvdC40Y4uJywKKwltaW5MZW5ndGg6ICfQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0YXQvtGC0Y8g0LHRiyB7bWluTGVuZ3RofSDRgdC40LzQstC+0LvQvtCyICjQktGLINCy0LLQtdC70Lgge2xlbmd0aH0pLicsCisJbWF4TGVuZ3RoOiAn0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INC90LUg0LHQvtC70YzRiNC1IHttYXhMZW5ndGh9INGB0LjQvNCy0L7Qu9C+0LIgKNCS0Ysg0LLQstC10LvQuCB7bGVuZ3RofSkuJywKKwlpbnRlZ2VyOiAn0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INCyINGN0YLQviDQv9C+0LvQtSDRh9C40YHQu9C+LiDQlNGA0L7QsdC90YvQtSDRh9C40YHQu9CwICjQvdCw0L/RgNC40LzQtdGAIDEuMjUpINGC0YPRgiDQvdC1INGA0LDQt9GA0LXRiNC10L3Riy4nLAorCW51bWVyaWM6ICfQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0LIg0Y3RgtC+INC/0L7Qu9C1INGH0LjRgdC70L4gKNC90LDQv9GA0LjQvNC10YAgIjEiINC40LvQuCAiMS4xIiwg0LjQu9C4ICItMSIsINC40LvQuCAiLTEuMSIpLicsCisJZGlnaXRzOiAn0JIg0Y3RgtC+0Lwg0L/QvtC70LUg0JLRiyDQvNC+0LbQtdGC0LUg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGC0L7Qu9GM0LrQviDRhtC40YTRgNGLINC4INC30L3QsNC60Lgg0L/Rg9C90LrRgtGD0LDRhtC40LggKNC90LDQv9GA0LjQvNC10YAsINGC0LXQu9C10YTQvtC90L3Ri9C5INC90L7QvNC10YAg0YHQviDQt9C90LDQutCw0LzQuCDQtNC10YTQuNGB0LAg0LjQu9C4INGBINGC0L7Rh9C60LDQvNC4KS4nLAorCWFscGhhOiAn0JIg0Y3RgtC+0Lwg0L/QvtC70LUg0LzQvtC20L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQvtC70YzQutC+INC70LDRgtC40L3RgdC60LjQtSDQsdGD0LrQstGLIChhLXopLiDQn9GA0L7QsdC10LvRiyDQuCDQtNGA0YPQs9C40LUg0YHQuNC80LLQvtC70Ysg0LfQsNC/0YDQtdGJ0LXQvdGLLicsCisJYWxwaGFudW06ICfQkiDRjdGC0L7QvCDQv9C+0LvQtSDQvNC+0LbQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0LvQsNGC0LjQvdGB0LrQuNC1INCx0YPQutCy0YsgKGEteikg0Lgg0YbQuNGE0YDRiyAoMC05KS4g0J/RgNC+0LHQtdC70Ysg0Lgg0LTRgNGD0LPQuNC1INGB0LjQvNCy0L7Qu9GLINC30LDQv9GA0LXRidC10L3Riy4nLAorCWRhdGVTdWNoQXM6ICfQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0LrQvtGA0YDQtdC60YLQvdGD0Y4g0LTQsNGC0YMge2RhdGV9JywKKwlkYXRlSW5Gb3JtYXRNRFk6ICfQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0LTQsNGC0YMg0LIg0YTQvtGA0LzQsNGC0LUg0JzQnC/QlNCUL9CT0JPQk9CTICjQvdCw0L/RgNC40LzQtdGAICIxMi8zMS8xOTk5IiknLAorCWVtYWlsOiAn0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INC60L7RgNGA0LXQutGC0L3Ri9C5INC10LzQtdC50Lst0LDQtNGA0LXRgS4g0JTQu9GPINC/0YDQuNC80LXRgNCwICJmcmVkQGRvbWFpbi5jb20iLicsCisJdXJsOiAn0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INC/0YDQsNCy0LjQu9GM0L3Rg9GOINGB0YHRi9C70LrRgyDQstC40LTQsCBodHRwOi8vd3d3LmV4YW1wbGUuY29tLicsCisJY3VycmVuY3lEb2xsYXI6ICfQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0YHRg9C80LzRgyDQsiDQtNC+0LvQu9Cw0YDQsNGFLiDQndCw0L/RgNC40LzQtdGAOiAkMTAwLjAwIC4nLAorCW9uZVJlcXVpcmVkOiAn0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0YvQsdC10YDQuNGC0LUg0YXQvtGC0Ywg0YfRgtC+LdC90LjQsdGD0LTRjCDQsiDQvtC00L3QvtC8INC40Lcg0Y3RgtC40YUg0L/QvtC70LXQuS4nLAorCWVycm9yUHJlZml4OiAn0J7RiNC40LHQutCwOiAnLAorCXdhcm5pbmdQcmVmaXg6ICfQktC90LjQvNCw0L3QuNC1OiAnCisKK30pOworCisvLzwxLjJjb21wYXQ+CisKK0xvY2FsZS5kZWZpbmUoJ3J1LVJVLXVuaWNvZGUnKS5pbmhlcml0KCdydS1SVScsICdGb3JtVmFsaWRhdG9yJyk7CisKKy8vPC8xLjJjb21wYXQ+CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuc2ktU0kuRGF0ZQorCitkZXNjcmlwdGlvbjogRGF0ZSBtZXNzYWdlcyBmb3IgU2xvdmVuaWFuLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFJhZG92YW4gTG96ZWoKKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5zaS1TSS5EYXRlXQorCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCit2YXIgcGx1cmFsaXplID0gZnVuY3Rpb24obiwgb25lLCB0d28sIHRocmVlLCBvdGhlcil7CisJcmV0dXJuIChuID49IDEgJiYgbiA8PSAzKSA/IGFyZ3VtZW50c1tuXSA6IG90aGVyOworfTsKKworTG9jYWxlLmRlZmluZSgnc2ktU0knLCAnRGF0ZScsIHsKKworCW1vbnRoczogWydqYW51YXInLCAnZmVicnVhcicsICdtYXJlYycsICdhcHJpbCcsICdtYWonLCAnanVuaWonLCAnanVsaWonLCAnYXZndXN0JywgJ3NlcHRlbWJlcicsICdva3RvYmVyJywgJ25vdmVtYmVyJywgJ2RlY2VtYmVyJ10sCisJbW9udGhzX2FiYnI6IFsnamFuJywgJ2ZlYicsICdtYXInLCAnYXByJywgJ21haicsICdqdW4nLCAnanVsJywgJ2F2ZycsICdzZXAnLCAnb2t0JywgJ25vdicsICdkZWMnXSwKKwlkYXlzOiBbJ25lZGVsamEnLCAncG9uZWRlbGplaycsICd0b3JlaycsICdzcmVkYScsICfEjWV0cnRlaycsICdwZXRlaycsICdzb2JvdGEnXSwKKwlkYXlzX2FiYnI6IFsnbmVkJywgJ3BvbicsICd0b3InLCAnc3JlJywgJ8SNZXQnLCAncGV0JywgJ3NvYiddLAorCisJLy8gQ3VsdHVyZSdzIGRhdGUgb3JkZXI6IERELk1NLllZWVkKKwlkYXRlT3JkZXI6IFsnZGF0ZScsICdtb250aCcsICd5ZWFyJ10sCisJc2hvcnREYXRlOiAnJWQuJW0uJVknLAorCXNob3J0VGltZTogJyVILiVNJywKKwlBTTogJ0FNJywKKwlQTTogJ1BNJywKKwlmaXJzdERheU9mV2VlazogMSwKKworCS8vIERhdGUuRXh0cmFzCisJb3JkaW5hbDogJy4nLAorCisJbGVzc1RoYW5NaW51dGVBZ286ICdtYW5qIGtvdCBtaW51dG8gbmF6YWonLAorCW1pbnV0ZUFnbzogJ21pbnV0byBuYXphaicsCisJbWludXRlc0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3tkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ21pbnV0bycsICdtaW51dGknLCAnbWludXRlJywgJ21pbnV0JykgKyAnIG5hemFqJzsgfSwKKwlob3VyQWdvOiAndXJvIG5hemFqJywKKwlob3Vyc0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3tkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ3VybycsICd1cmknLCAndXJlJywgJ3VyJykgKyAnIG5hemFqJzsgfSwKKwlkYXlBZ286ICdkYW4gbmF6YWonLAorCWRheXNBZ286IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICd7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICdkYW4nLCAnZG5ldmEnLCAnZG5pJywgJ2RuaScpICsgJyBuYXphaic7IH0sCisJd2Vla0FnbzogJ3RlZGVuIG5hemFqJywKKwl3ZWVrc0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3tkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ3RlZGVuJywgJ3RlZG5hJywgJ3RlZG5lJywgJ3RlZG5vdicpICsgJyBuYXphaic7IH0sCisJbW9udGhBZ286ICdtZXNlYyBuYXphaicsCisJbW9udGhzQWdvOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAne2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAnbWVzZWMnLCAnbWVzZWNhJywgJ21lc2VjZScsICdtZXNlY292JykgKyAnIG5hemFqJzsgfSwKKwl5ZWFydGhBZ286ICdsZXRvIG5hemFqJywKKwl5ZWFyc0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3tkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ2xldG8nLCAnbGV0aScsICdsZXRhJywgJ2xldCcpICsgJyBuYXphaic7IH0sCisKKwlsZXNzVGhhbk1pbnV0ZVVudGlsOiAnxaFlIG1hbmoga290IG1pbnV0bycsCisJbWludXRlVW50aWw6ICfFoWUgbWludXRhJywKKwltaW51dGVzVW50aWw6IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICfFoWUge2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAnbWludXRhJywgJ21pbnV0aScsICdtaW51dGUnLCAnbWludXQnKTsgfSwKKwlob3VyVW50aWw6ICfFoWUgdXJhJywKKwlob3Vyc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAnxaFlIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ3VyYScsICd1cmknLCAndXJlJywgJ3VyJyk7IH0sCisJZGF5VW50aWw6ICfFoWUgZGFuJywKKwlkYXlzVW50aWw6IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICfFoWUge2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAnZGFuJywgJ2RuZXZhJywgJ2RuZXZpJywgJ2RuaScpOyB9LAorCXdlZWtVbnRpbDogJ8WhZSB0ZWRuJywKKwl3ZWVrc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAnxaFlIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ3RlZGVuJywgJ3RlZG5hJywgJ3RlZG5pJywgJ3RlZG5vdicpOyB9LAorCW1vbnRoVW50aWw6ICfFoWUgbWVzZWMnLAorCW1vbnRoc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAnxaFlIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ21lc2VjJywgJ21lc2VjYScsICdtZXNlY2knLCAnbWVzZWNvdicpOyB9LAorCXllYXJVbnRpbDogJ8WhZSBsZXRvJywKKwl5ZWFyc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAnxaFlIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ2xldG8nLCAnbGV0aScsICdsZXRhJywgJ2xldCcpOyB9CisKK30pOworCit9KSgpOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLnNpLVNJLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgU2xvdmVuaWFuLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFJhZG92YW4gTG96ZWoKKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5zaS1TSS5Gb3JtLlZhbGlkYXRvcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdzaS1TSScsICdGb3JtVmFsaWRhdG9yJywgeworCisJcmVxdWlyZWQ6ICdUbyBwb2xqZSBqZSBvYnZlem5vJywKKwltaW5MZW5ndGg6ICdQcm9zaW0sIHZuZXNpdGUgdnNhaiB7bWluTGVuZ3RofSB6bmFrb3YgKHZuZXNsaSBzdGUge2xlbmd0aH0gem5ha292KS4nLAorCW1heExlbmd0aDogJ1Byb3NpbSwgbmUgdm5lc2l0ZSB2ZcSNIGtvdCB7bWF4TGVuZ3RofSB6bmFrb3YgKHZuZXNsaSBzdGUge2xlbmd0aH0gem5ha292KS4nLAorCWludGVnZXI6ICdQcm9zaW0sIHZuZXNpdGUgY2VsbyDFoXRldmlsby4gRGVjaW1hbG5hIMWhdGV2aWxhIChrb3QgMSwyNSkgbmlzbyBkb3ZvbGplbmEuJywKKwludW1lcmljOiAnUHJvc2ltLCB2bmVzaXRlIHNhbW8gbnVtZXJpxI1uZSB2cmVkbm9zdGkgKGtvdCAiMSIgYWxpICIxLjEiIGFsaSAiLTEiIGFsaSAiLTEuMSIpLicsCisJZGlnaXRzOiAnUHJvc2ltLCB1cG9yYWJpdGUgxaF0ZXZpbGtlIGluIGxvxI1pbGEgbGUgbmEgdGVtIHBvbGp1IChuYSBwcmltZXIsIGRvdm9samVuYSBqZSB0ZWxlZm9uc2thIMWhdGV2aWxrYSB6IHBvbWnFoWxhamkgYWxpIHBpa2FtaSkuJywKKwlhbHBoYTogJ1Byb3NpbSwgdXBvcmFiaXRlIGxlIMSNcmtlIHYgdGVtIHBsanUuIFByZXNsZWRraSBpbiBkcnVnaSB6bmFraSBuaXNvIGRvdm9samVuaS4nLAorCWFscGhhbnVtOiAnUHJvc2ltLCB1cG9yYWJpdGUgc2FtbyDEjXJrZSBhbGkgxaF0ZXZpbGtlIHYgdGVtIHBvbGp1LiBQcmVzbGVka2kgaW4gZHJ1Z2kgem5ha2kgbmlzbyBkb3ZvbGplbmkuJywKKwlkYXRlU3VjaEFzOiAnUHJvc2ltLCB2bmVzaXRlIHByYXZpbGVuIGRhdHVtIGtvdCB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ1Byb3NpbSwgdm5lc2l0ZSBwcmF2aWxlbiBkYXR1bSBrb3QgTU0uREQuWVlZWSAocHJpbWVyICIxMi4zMS4xOTk5IiknLAorCWVtYWlsOiAnUHJvc2ltLCB2bmVzaXRlIHByYXZpbGVuIGVtYWlsIG5hc2xvdi4gTmEgcHJpbWVyICJmcmVkQGRvbWFpbi5jb20iLicsCisJdXJsOiAnUHJvc2ltLCB2bmVzaXRlIHByYXZpbGVuIFVSTCBrb3QgaHR0cDovL3d3dy5leGFtcGxlLmNvbS4nLAorCWN1cnJlbmN5RG9sbGFyOiAnUHJvc2ltLCB2bmVzaXQgZXByYXZpbG5vIHZyZWRub3N0IOKCrC4gUHJpbWVyIDEwMCwwMOKCrCAuJywKKwlvbmVSZXF1aXJlZDogJ1Byb3NpbW8sIHZuZXNpdGUgbmVrYWogemEgdnNhaiBlbm8gaXptZWQgdGVoIHBvbGouJywKKwllcnJvclByZWZpeDogJ05hcGFrYTogJywKKwl3YXJuaW5nUHJlZml4OiAnT3Bvem9yaWxvOiAnLAorCisJLy8gRm9ybS5WYWxpZGF0b3IuRXh0cmFzCisJbm9TcGFjZTogJ1RvIHZub3NubyBwb2xqZSBuZSBkb3B1xaHEjWEgcHJlc2xlZGtvdi4nLAorCXJlcUNoa0J5Tm9kZTogJ05pxI0gbmlzdGUgaXpicmFsaS4nLAorCXJlcXVpcmVkQ2hrOiAnVG8gcG9samUgamUgb2J2ZXpubycsCisJcmVxQ2hrQnlOYW1lOiAnUHJvc2ltLCBpemJlcml0ZSB7bGFiZWx9LicsCisJbWF0Y2g6ICdUbyBwb2xqZSBzZSBtb3JhIHVqZW1hdGkgeiBwb2xqZW0ge21hdGNoTmFtZX0nLAorCXN0YXJ0RGF0ZTogJ2RhdHVtIHphxI1ldGthJywKKwllbmREYXRlOiAnZGF0dW0ga29uY2EnLAorCWN1cnJlbmREYXRlOiAndHJlbnV0ZW4gZGF0dW0nLAorCWFmdGVyRGF0ZTogJ0RhdHVtIGJpIG1vcmFsIGJpdGkgaXN0aSBhbGkgcG8ge2xhYmVsfS4nLAorCWJlZm9yZURhdGU6ICdEYXR1bSBiaSBtb3JhbCBiaXRpIGlzdGkgYWxpIHByZWQge2xhYmVsfS4nLAorCXN0YXJ0TW9udGg6ICdQcm9zaW0sIHZuZXNpdGUgemHEjWV0bmkgZGF0dW0nLAorCXNhbWVNb250aDogJ1RhIGR2YSBkYXR1bWEgbW9yYXRhIGJpdGkgdiBpc3RlbSBtZXNlY3UgLSBwcmVtZW5pdGkgbW9yYXRlIGVubyBhbGkgZHJ1Z28uJywKKwljcmVkaXRjYXJkOiAnxaB0ZXZpbGthIGtyZWRpdG5lIGthcnRpY2UgbmkgcHJhdmlsbmEuIFByZXZlcml0ZSDFoXRldmlsa28gYWxpIHBvc2t1c2l0ZSDFoWUgZW5rcmF0LiBWbmXFoWVuaWgge2xlbmd0aH0gem5ha292LicKKworfSk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuc3YtU0UuRGF0ZQorCitkZXNjcmlwdGlvbjogRGF0ZSBtZXNzYWdlcyBmb3IgU3dlZGlzaC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBNYXJ0aW4gTHVuZGdyZW4KKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5zdi1TRS5EYXRlXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ3N2LVNFJywgJ0RhdGUnLCB7CisKKwltb250aHM6IFsnamFudWFyaScsICdmZWJydWFyaScsICdtYXJzJywgJ2FwcmlsJywgJ21haicsICdqdW5pJywgJ2p1bGknLCAnYXVndXN0aScsICdzZXB0ZW1iZXInLCAnb2t0b2JlcicsICdub3ZlbWJlcicsICdkZWNlbWJlciddLAorCW1vbnRoc19hYmJyOiBbJ2phbicsICdmZWInLCAnbWFyJywgJ2FwcicsICdtYWonLCAnanVuJywgJ2p1bCcsICdhdWcnLCAnc2VwJywgJ29rdCcsICdub3YnLCAnZGVjJ10sCisJZGF5czogWydzw7ZuZGFnJywgJ23DpW5kYWcnLCAndGlzZGFnJywgJ29uc2RhZycsICd0b3JzZGFnJywgJ2ZyZWRhZycsICdsw7ZyZGFnJ10sCisJZGF5c19hYmJyOiBbJ3PDtm4nLCAnbcOlbicsICd0aXMnLCAnb25zJywgJ3RvcicsICdmcmUnLCAnbMO2ciddLAorCisJLy8gQ3VsdHVyZSdzIGRhdGUgb3JkZXI6IFlZWVktTU0tREQKKwlkYXRlT3JkZXI6IFsneWVhcicsICdtb250aCcsICdkYXRlJ10sCisJc2hvcnREYXRlOiAnJVktJW0tJWQnLAorCXNob3J0VGltZTogJyVIOiVNJywKKwlBTTogJycsCisJUE06ICcnLAorCWZpcnN0RGF5T2ZXZWVrOiAxLAorCisJLy8gRGF0ZS5FeHRyYXMKKwlvcmRpbmFsOiAnJywKKworCWxlc3NUaGFuTWludXRlQWdvOiAnbWluZHJlIMOkbiBlbiBtaW51dCBzZWRhbicsCisJbWludXRlQWdvOiAndW5nZWbDpHIgZW4gbWludXQgc2VkYW4nLAorCW1pbnV0ZXNBZ286ICd7ZGVsdGF9IG1pbnV0ZXIgc2VkYW4nLAorCWhvdXJBZ286ICd1bmdlZsOkciBlbiB0aW1tZSBzZWRhbicsCisJaG91cnNBZ286ICd1bmdlZsOkciB7ZGVsdGF9IHRpbW1hciBzZWRhbicsCisJZGF5QWdvOiAnMSBkYWcgc2VkYW4nLAorCWRheXNBZ286ICd7ZGVsdGF9IGRhZ2FyIHNlZGFuJywKKworCWxlc3NUaGFuTWludXRlVW50aWw6ICdtaW5kcmUgw6RuIGVuIG1pbnV0IHNlZGFuJywKKwltaW51dGVVbnRpbDogJ3VuZ2Vmw6RyIGVuIG1pbnV0IHNlZGFuJywKKwltaW51dGVzVW50aWw6ICd7ZGVsdGF9IG1pbnV0ZXIgc2VkYW4nLAorCWhvdXJVbnRpbDogJ3VuZ2Vmw6RyIGVuIHRpbW1lIHNlZGFuJywKKwlob3Vyc1VudGlsOiAndW5nZWbDpHIge2RlbHRhfSB0aW1tYXIgc2VkYW4nLAorCWRheVVudGlsOiAnMSBkYWcgc2VkYW4nLAorCWRheXNVbnRpbDogJ3tkZWx0YX0gZGFnYXIgc2VkYW4nCisKK30pOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLnN2LVNFLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgU3dlZGlzaC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBNYXJ0aW4gTHVuZGdyZW4KKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5zdi1TRS5Gb3JtLlZhbGlkYXRvcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdzdi1TRScsICdGb3JtVmFsaWRhdG9yJywgeworCisJcmVxdWlyZWQ6ICdGw6RsdGV0IMOkciBvYmxpZ2F0b3Jpc2t0LicsCisJbWluTGVuZ3RoOiAnQW5nZSBtaW5zdCB7bWluTGVuZ3RofSB0ZWNrZW4gKGR1IGFuZ2F2IHtsZW5ndGh9IHRlY2tlbikuJywKKwltYXhMZW5ndGg6ICdBbmdlIGjDtmdzdCB7bWF4TGVuZ3RofSB0ZWNrZW4gKGR1IGFuZ2F2IHtsZW5ndGh9IHRlY2tlbikuICcsCisJaW50ZWdlcjogJ0FuZ2UgZXR0IGhlbHRhbCBpIGbDpGx0ZXQuIFRhbCBtZWQgZGVjaW1hbGVyICh0LmV4LiAxLDI1KSDDpHIgaW50ZSB0aWxsw6V0bmEuJywKKwludW1lcmljOiAnQW5nZSBlbmRhc3QgbnVtZXJpc2thIHbDpHJkZW4gaSBkZXR0YSBmw6RsdCAodC5leC4gIjEiIGVsbGVyICIxLjEiIGVsbGVyICItMSIgZWxsZXIgIi0xLDEiKS4nLAorCWRpZ2l0czogJ0FudsOkbmQgZW5kYXN0IHNpZmZyb3Igb2NoIHNraWxqZXRlY2tlbiBpIGRldHRhIGbDpGx0ICh0aWxsIGV4ZW1wZWwgZXR0IHRlbGVmb25udW1tZXIgbWVkIGJpbmRlc3RyZWNrIHRpbGzDpXRldCkuJywKKwlhbHBoYTogJ0FudsOkbmQgZW5kYXN0IGJva3N0w6R2ZXIgKGEtw7YpIGkgZGV0dGEgZsOkbHQuIEluZ2EgbWVsbGFuc2xhZyBlbGxlciBhbmRyYSB0ZWNrZW4gw6RyIHRpbGzDpXRuYS4nLAorCWFscGhhbnVtOiAnQW52w6RuZCBlbmRhc3QgYm9rc3TDpHZlciAoYS3Dtikgb2NoIHNpZmZyb3IgKDAtOSkgaSBkZXR0YSBmw6RsdC4gSW5nYSBtZWxsYW5zbGFnIGVsbGVyIGFuZHJhIHRlY2tlbiDDpHIgdGlsbMOldG5hLicsCisJZGF0ZVN1Y2hBczogJ0FuZ2UgZXR0IGdpbHRpZ3QgZGF0dW0gc29tIHQuZXguIHtkYXRlfScsCisJZGF0ZUluRm9ybWF0TURZOiAnQW5nZSBldHQgZ2lsdGlndCBkYXR1bSBzb20gdC5leC4gWVlZWS1NTS1ERCAoaS5lLiAiMTk5OS0xMi0zMSIpJywKKwllbWFpbDogJ0FuZ2UgZW4gZ2lsdGlnIGUtcG9zdGFkcmVzcy4gVGlsbCBleGVtcGVsICJlcmlrQGRvbWFpbi5jb20iLicsCisJdXJsOiAnQW5nZSBlbiBnaWx0aWcgd2ViYmFkcmVzcyBzb20gaHR0cDovL3d3dy5leGFtcGxlLmNvbS4nLAorCWN1cnJlbmN5RG9sbGFyOiAnQW5nZSBlbiBnaWx0aWcgYmVsb3BwLiBFeGVtcGVsdmlzIDEwMCwwMC4nLAorCW9uZVJlcXVpcmVkOiAnVsOkbmxpZ2VuIGFuZ2UgbWluc3QgZXR0IGF2IGRlc3NhIGFsdGVybmF0aXYuJywKKwllcnJvclByZWZpeDogJ0ZlbDogJywKKwl3YXJuaW5nUHJlZml4OiAnVmFybmluZzogJywKKworCS8vIEZvcm0uVmFsaWRhdG9yLkV4dHJhcworCW5vU3BhY2U6ICdEZXQgZsOlciBpbnRlIGZpbm5hcyBuw6VncmEgbWVsbGFuc2xhZyBpIGRldHRhIGbDpGx0LicsCisJcmVxQ2hrQnlOb2RlOiAnSW5nYSBvYmpla3Qgw6RyIHZhbGRhLicsCisJcmVxdWlyZWRDaGs6ICdEZXR0YSDDpHIgZXR0IG9ibGlnYXRvcmlza3QgZsOkbHQuJywKKwlyZXFDaGtCeU5hbWU6ICdWw6RsaiBlbiB7bGFiZWx9LicsCisJbWF0Y2g6ICdEZXR0YSBmw6RsdCBtw6VzdGUgbWF0Y2hhIHttYXRjaE5hbWV9JywKKwlzdGFydERhdGU6ICdzdGFydGRhdHVtZXQnLAorCWVuZERhdGU6ICdzbHV0ZGF0dW0nLAorCWN1cnJlbmREYXRlOiAnZGFnZW5zIGRhdHVtJywKKwlhZnRlckRhdGU6ICdEYXR1bWV0IGLDtnIgdmFyYSBzYW1tYSBlbGxlciBzZW5hcmUgw6RuIHtsYWJlbH0uJywKKwliZWZvcmVEYXRlOiAnRGF0dW1ldCBiw7ZyIHZhcmEgc2FtbWEgZWxsZXIgdGlkaWdhcmUgw6RuIHtsYWJlbH0uJywKKwlzdGFydE1vbnRoOiAnVsOkbGogZW4gc3RhcnQgbcOlbmFkJywKKwlzYW1lTW9udGg6ICdEZXNzYSB0dsOlIGRhdHVtIG3DpXN0ZSB2YXJhIGkgc2FtbWEgbcOlbmFkIC0gZHUgbcOlc3RlIMOkbmRyYSBkZXQgZW5hIGVsbGVyIGRldCBhbmRyYS4nCisKK30pOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLnVrLVVBLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIFVrcmFpbmlhbiAodXRmLTgpLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFNsaWsKKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS51ay1VQS5EYXRlXQorCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCit2YXIgcGx1cmFsaXplID0gZnVuY3Rpb24obiwgb25lLCBmZXcsIG1hbnksIG90aGVyKXsKKwl2YXIgZCA9IChuIC8gMTApLnRvSW50KCksCisJCXogPSBuICUgMTAsCisJCXMgPSAobiAvIDEwMCkudG9JbnQoKTsKKworCWlmIChkID09IDEgJiYgbiA+IDEwKSByZXR1cm4gbWFueTsKKwlpZiAoeiA9PSAxKSByZXR1cm4gb25lOworCWlmICh6ID4gMCAmJiB6IDwgNSkgcmV0dXJuIGZldzsKKwlyZXR1cm4gbWFueTsKK307CisKK0xvY2FsZS5kZWZpbmUoJ3VrLVVBJywgJ0RhdGUnLCB7CisKKwltb250aHM6IFsn0KHRltGH0LXQvdGMJywgJ9Cb0Y7RgtC40LknLCAn0JHQtdGA0LXQt9C10L3RjCcsICfQmtCy0ZbRgtC10L3RjCcsICfQotGA0LDQstC10L3RjCcsICfQp9C10YDQstC10L3RjCcsICfQm9C40L/QtdC90YwnLCAn0KHQtdGA0L/QtdC90YwnLCAn0JLQtdGA0LXRgdC10L3RjCcsICfQltC+0LLRgtC10L3RjCcsICfQm9C40YHRgtC+0L/QsNC0JywgJ9CT0YDRg9C00LXQvdGMJ10sCisJbW9udGhzX2FiYnI6IFsn0KHRltGHJywgJ9Cb0Y7RgicsICfQkdC10YAnLCAn0JrQstGW0YInLCAn0KLRgNCw0LInLCAn0KfQtdGA0LInLCAn0JvQuNC/JywgJ9Ch0LXRgNC/JywgJ9CS0LXRgCcsICfQltC+0LLRgicsICfQm9C40YHRgicsICfQk9GA0YPQtCcgXSwKKwlkYXlzOiBbJ9Cd0LXQtNGW0LvRjycsICfQn9C+0L3QtdC00ZbQu9C+0LonLCAn0JLRltCy0YLQvtGA0L7QuicsICfQodC10YDQtdC00LAnLCAn0KfQtdGC0LLQtdGAJywgItCfJ9GP0YLQvdC40YbRjyIsICfQodGD0LHQvtGC0LAnXSwKKwlkYXlzX2FiYnI6IFsn0J3QtCcsICfQn9C9JywgJ9CS0YInLCAn0KHRgCcsICfQp9GCJywgJ9Cf0YInLCAn0KHQsSddLAorCisJLy8gQ3VsdHVyZSdzIGRhdGUgb3JkZXI6IEREL01NL1lZWVkKKwlkYXRlT3JkZXI6IFsnZGF0ZScsICdtb250aCcsICd5ZWFyJ10sCisJc2hvcnREYXRlOiAnJWQvJW0vJVknLAorCXNob3J0VGltZTogJyVIOiVNJywKKwlBTTogJ9C00L4g0L/QvtC70YPQtNC90Y8nLAorCVBNOiAn0L/QviDQv9C+0LvRg9C00L3RjicsCisJZmlyc3REYXlPZldlZWs6IDEsCisKKwkvLyBEYXRlLkV4dHJhcworCW9yZGluYWw6ICcnLAorCisJbGVzc1RoYW5NaW51dGVBZ286ICfQvNC10L3RjNGI0LUg0YXQstC40LvQuNC90Lgg0YLQvtC80YMnLAorCW1pbnV0ZUFnbzogJ9GF0LLQuNC70LjQvdGDINGC0L7QvNGDJywKKwltaW51dGVzQWdvOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAne2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAn0YXQstC40LvQuNC90YMnLCAn0YXQstC40LvQuNC90LgnLCAn0YXQstC40LvQuNC9JykgKyAnINGC0L7QvNGDJzsgfSwKKwlob3VyQWdvOiAn0LPQvtC00LjQvdGDINGC0L7QvNGDJywKKwlob3Vyc0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3tkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ9Cz0L7QtNC40L3RgycsICfQs9C+0LTQuNC90LgnLCAn0LPQvtC00LjQvScpICsgJyDRgtC+0LzRgyc7IH0sCisJZGF5QWdvOiAn0LLRh9C+0YDQsCcsCisJZGF5c0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3tkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ9C00LXQvdGMJywgJ9C00L3RjycsICfQtNC90ZbQsicpICsgJyDRgtC+0LzRgyc7IH0sCisJd2Vla0FnbzogJ9GC0LjQttC00LXQvdGMINGC0L7QvNGDJywKKwl3ZWVrc0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3tkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ9GC0LjQttC00LXQvdGMJywgJ9GC0LjQttC90ZYnLCAn0YLQuNC20L3RltCyJykgKyAnINGC0L7QvNGDJzsgfSwKKwltb250aEFnbzogJ9C80ZbRgdGP0YbRjCDRgtC+0LzRgycsCisJbW9udGhzQWdvOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAne2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAn0LzRltGB0Y/RhtGMJywgJ9C80ZbRgdGP0YbRlicsICfQvNGW0YHRj9GG0ZbQsicpICsgJyDRgtC+0LzRgyc7IH0sCisJeWVhckFnbzogJ9GA0ZbQuiDRgtC+0LzRgycsCisJeWVhcnNBZ286IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICd7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICfRgNGW0LonLCAn0YDQvtC60LgnLCAn0YDQvtC60ZbQsicpICsgJyDRgtC+0LzRgyc7IH0sCisKKwlsZXNzVGhhbk1pbnV0ZVVudGlsOiAn0LfQsCDQvNC40YLRjCcsCisJbWludXRlVW50aWw6ICfRh9C10YDQtdC3INGF0LLQuNC70LjQvdGDJywKKwltaW51dGVzVW50aWw6IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICfRh9C10YDQtdC3IHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ9GF0LLQuNC70LjQvdGDJywgJ9GF0LLQuNC70LjQvdC4JywgJ9GF0LLQuNC70LjQvScpOyB9LAorCWhvdXJVbnRpbDogJ9GH0LXRgNC10Lcg0LPQvtC00LjQvdGDJywKKwlob3Vyc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAn0YfQtdGA0LXQtyB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICfQs9C+0LTQuNC90YMnLCAn0LPQvtC00LjQvdC4JywgJ9Cz0L7QtNC40L0nKTsgfSwKKwlkYXlVbnRpbDogJ9C30LDQstGC0YDQsCcsCisJZGF5c1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAn0YfQtdGA0LXQtyB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICfQtNC10L3RjCcsICfQtNC90Y8nLCAn0LTQvdGW0LInKTsgfSwKKwl3ZWVrVW50aWw6ICfRh9C10YDQtdC3INGC0LjQttC00LXQvdGMJywKKwl3ZWVrc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAn0YfQtdGA0LXQtyB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICfRgtC40LbQtNC10L3RjCcsICfRgtC40LbQvdGWJywgJ9GC0LjQttC90ZbQsicpOyB9LAorCW1vbnRoVW50aWw6ICfRh9C10YDQtdC3INC80ZbRgdGP0YbRjCcsCisJbW9udGhlc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAn0YfQtdGA0LXQtyB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICfQvNGW0YHRj9GG0YwnLCAn0LzRltGB0Y/RhtGWJywgJ9C80ZbRgdGP0YbRltCyJyk7IH0sCisJeWVhclVudGlsOiAn0YfQtdGA0LXQtyDRgNGW0LonLAorCXllYXJzVW50aWw6IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICfRh9C10YDQtdC3IHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ9GA0ZbQuicsICfRgNC+0LrQuCcsICfRgNC+0LrRltCyJyk7IH0KKworfSk7CisKK30pKCk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUudWstVUEuRm9ybS5WYWxpZGF0b3IKKworZGVzY3JpcHRpb246IEZvcm0gVmFsaWRhdG9yIG1lc3NhZ2VzIGZvciBVa3JhaW5pYW4gKHV0Zi04KS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBTbGlrCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUudWstVUEuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgndWstVUEnLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAn0KbQtSDQv9C+0LvQtSDQv9C+0LLQuNC90L3QtSDQsdGD0YLQuCDQt9Cw0L/QvtCy0L3QtdC90LjQvC4nLAorCW1pbkxlbmd0aDogJ9CS0LLQtdC00ZbRgtGMINGF0L7Rh9CwINCxIHttaW5MZW5ndGh9INGB0LjQvNCy0L7Qu9GW0LIgKNCS0Lgg0LLQstC10LvQuCB7bGVuZ3RofSkuJywKKwltYXhMZW5ndGg6ICfQmtGW0LvRjNC60ZbRgdGC0Ywg0YHQuNC80LLQvtC70ZbQsiDQvdC1INC80L7QttC1INCx0YPRgtC4INCx0ZbQu9GM0YjQtSB7bWF4TGVuZ3RofSAo0JLQuCDQstCy0LXQu9C4IHtsZW5ndGh9KS4nLAorCWludGVnZXI6ICfQktCy0LXQtNGW0YLRjCDQsiDRhtC1INC/0L7Qu9C1INGH0LjRgdC70L4uINCU0YDQvtCx0L7QstGWINGH0LjRgdC70LAgKNC90LDQv9GA0LjQutC70LDQtCAxLjI1KSDQvdC1INC00L7Qt9Cy0L7Qu9C10L3Rli4nLAorCW51bWVyaWM6ICfQktCy0LXQtNGW0YLRjCDQsiDRhtC1INC/0L7Qu9C1INGH0LjRgdC70L4gKNC90LDQv9GA0LjQutC70LDQtCAiMSIg0LDQsdC+ICIxLjEiLCDQsNCx0L4gIi0xIiwg0LDQsdC+ICItMS4xIikuJywKKwlkaWdpdHM6ICfQkiDRhtGM0L7QvNGDINC/0L7Qu9GWINCy0Lgg0LzQvtC20LXRgtC1INCy0LjQutC+0YDQuNGB0YLQvtCy0YPQstCw0YLQuCDQu9C40YjQtSDRhtC40YTRgNC4INGWINC30L3QsNC60Lgg0L/Rg9C90LrRgtGW0LDRhtGW0ZcgKNC90LDQv9GA0LjQutC70LDQtCwg0YLQtdC70LXRhNC+0L3QvdC40Lkg0L3QvtC80LXRgCDQtyDQt9C90LDQutCw0LzQuCDQtNC10YTRltC30YMg0LDQsdC+INC3INC60YDQsNC/0LrQsNC80LgpLicsCisJYWxwaGE6ICfQkiDRhtGM0L7QvNGDINC/0L7Qu9GWINC80L7QttC90LAg0LLQuNC60L7RgNC40YHRgtC+0LLRg9Cy0LDRgtC4INC70LjRiNC1INC70LDRgtC40L3RgdGM0LrRliDQu9GW0YLQtdGA0LggKGEteikuINCf0YDQvtCx0ZbQu9C4INGWINGW0L3RiNGWINGB0LjQvNCy0L7Qu9C4INC30LDQsdC+0YDQvtC90LXQvdGWLicsCisJYWxwaGFudW06ICfQkiDRhtGM0L7QvNGDINC/0L7Qu9GWINC80L7QttC90LAg0LLQuNC60L7RgNC40YHRgtC+0LLRg9Cy0LDRgtC4INC70LjRiNC1INC70LDRgtC40L3RgdGM0LrRliDQu9GW0YLQtdGA0LggKGEteikg0ZYg0YbQuNGE0YDQuCAoMC05KS4g0J/RgNC+0LHRltC70Lgg0ZYg0ZbQvdGI0ZYg0YHQuNC80LLQvtC70Lgg0LfQsNCx0L7RgNC+0L3QtdC90ZYuJywKKwlkYXRlU3VjaEFzOiAn0JLQstC10LTRltGC0Ywg0LrQvtGA0LXQutGC0L3RgyDQtNCw0YLRgyB7ZGF0ZX0uJywKKwlkYXRlSW5Gb3JtYXRNRFk6ICfQktCy0LXQtNGW0YLRjCDQtNCw0YLRgyDQsiDRhNC+0YDQvNCw0YLRliDQnNCcL9CU0JQv0KDQoNCg0KAgKNC90LDQv9GA0LjQutC70LDQtCAiMTIvMzEvMjAwOSIpLicsCisJZW1haWw6ICfQktCy0LXQtNGW0YLRjCDQutC+0YDQtdC60YLQvdGDINCw0LTRgNC10YHRgyDQtdC70LXQutGC0YDQvtC90L3QvtGXINC/0L7RiNGC0LggKNC90LDQv9GA0LjQutC70LDQtCAibmFtZUBkb21haW4uY29tIikuJywKKwl1cmw6ICfQktCy0LXQtNGW0YLRjCDQutC+0YDQtdC60YLQvdC1INGW0L3RgtC10YDQvdC10YIt0L/QvtGB0LjQu9Cw0L3QvdGPICjQvdCw0L/RgNC40LrQu9Cw0LQgaHR0cDovL3d3dy5leGFtcGxlLmNvbSkuJywKKwljdXJyZW5jeURvbGxhcjogJ9CS0LLQtdC00ZbRgtGMINGB0YPQvNGDINCyINC00L7Qu9Cw0YDQsNGFICjQvdCw0L/RgNC40LrQu9Cw0LQgIiQxMDAuMDAiKS4nLAorCW9uZVJlcXVpcmVkOiAn0JfQsNC/0L7QstC90ZbRgtGMINC+0LTQvdC1INC3INC/0L7Qu9GW0LIuJywKKwllcnJvclByZWZpeDogJ9Cf0L7QvNC40LvQutCwOiAnLAorCXdhcm5pbmdQcmVmaXg6ICfQo9Cy0LDQs9CwOiAnLAorCisJbm9TcGFjZTogJ9Cf0YDQvtCx0ZbQu9C4INC30LDQsdC+0YDQvtC90LXQvdGWLicsCisJcmVxQ2hrQnlOb2RlOiAn0J3QtSDQstGW0LTQvNGW0YfQtdC90L4g0LbQvtC00L3QvtCz0L4g0LLQsNGA0ZbQsNC90YLRgy4nLAorCXJlcXVpcmVkQ2hrOiAn0KbQtSDQv9C+0LvQtSDQv9C+0LLQuNC90L3QtSDQsdGD0YLQuCDQstGW0LzRltGH0LXQvdC40LwuJywKKwlyZXFDaGtCeU5hbWU6ICfQkdGD0LTRjCDQu9Cw0YHQutCwLCDQstGW0LTQvNGW0YLRjNGC0LUge2xhYmVsfS4nLAorCW1hdGNoOiAn0KbQtSDQv9C+0LvQtSDQv9C+0LLQuNC90L3QviDQstGW0LTQv9C+0LLRltC00LDRgtC4IHttYXRjaE5hbWV9JywKKwlzdGFydERhdGU6ICfQv9C+0YfQsNGC0LrQvtCy0LAg0LTQsNGC0LAnLAorCWVuZERhdGU6ICfQutGW0L3RhtC10LLQsCDQtNCw0YLQsCcsCisJY3VycmVuZERhdGU6ICfRgdGM0L7Qs9C+0LTQvdGW0YjQvdGPINC00LDRgtCwJywKKwlhZnRlckRhdGU6ICfQptGPINC00LDRgtCwINC/0L7QstC40L3QvdCwINCx0YPRgtC4INGC0LDQutC+0Y4g0LYsINCw0LHQviDQv9GW0LfQvdGW0YjQvtGOINC30LAge2xhYmVsfS4nLAorCWJlZm9yZURhdGU6ICfQptGPINC00LDRgtCwINC/0L7QstC40L3QvdCwINCx0YPRgtC4INGC0LDQutC+0Y4g0LYsINCw0LHQviDRgNCw0L3RltGI0L7RjiDQt9CwIHtsYWJlbH0uJywKKwlzdGFydE1vbnRoOiAn0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LLQuNCx0LXRgNGW0YLRjCDQv9C+0YfQsNGC0LrQvtCy0LjQuSDQvNGW0YHRj9GG0YwnLAorCXNhbWVNb250aDogJ9Cm0ZYg0LTQsNGC0Lgg0L/QvtCy0LjQvdC90ZYg0LLRltC00L3QvtGB0LjRgtC40YHRjCDQvtC00L3QvtCz0L4g0ZYg0YLQvtCz0L4g0LYg0LzRltGB0Y/RhtGPLiDQkdGD0LTRjCDQu9Cw0YHQutCwLCDQt9C80ZbQvdGW0YLRjCDQvtC00L3RgyDQtyDQvdC40YUuJywKKwljcmVkaXRjYXJkOiAn0J3QvtC80LXRgCDQutGA0LXQtNC40YLQvdC+0Zcg0LrQsNGA0YLQuCDQstCy0LXQtNC10L3QuNC5INC90LXQv9GA0LDQstC40LvRjNC90L4uINCR0YPQtNGMINC70LDRgdC60LAsINC/0LXRgNC10LLRltGA0YLQtSDQudC+0LPQvi4g0JLQstC10LTQtdC90L4ge2xlbmd0aH0g0YHQuNC80LLQvtC70ZbQsi4nCisKK30pOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLnpoLUNILkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIENoaW5lc2UgKHNpbXBsaWZpZWQgYW5kIHRyYWRpdGlvbmFsKS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBZTWluZCBDaGFuCisKK3JlcXVpcmVzOgorICAtIC9Mb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuemgtQ0guRGF0ZV0KKworLi4uCisqLworCisvLyBTaW1wbGlmaWVkIENoaW5lc2UKK0xvY2FsZS5kZWZpbmUoJ3poLUNIUycsICdEYXRlJywgeworCisJbW9udGhzOiBbJ+S4gOaciCcsICfkuozmnIgnLCAn5LiJ5pyIJywgJ+Wbm+aciCcsICfkupTmnIgnLCAn5YWt5pyIJywgJ+S4g+aciCcsICflhavmnIgnLCAn5Lmd5pyIJywgJ+WNgeaciCcsICfljYHkuIDmnIgnLCAn5Y2B5LqM5pyIJ10sCisJbW9udGhzX2FiYnI6IFsn5LiAJywgJ+S6jCcsICfkuIknLCAn5ZubJywgJ+S6lCcsICflha0nLCAn5LiDJywgJ+WFqycsICfkuZ0nLCAn5Y2BJywgJ+WNgeS4gCcsICfljYHkuownXSwKKwlkYXlzOiBbJ+aYn+acn+aXpScsICfmmJ/mnJ/kuIAnLCAn5pif5pyf5LqMJywgJ+aYn+acn+S4iScsICfmmJ/mnJ/lm5snLCAn5pif5pyf5LqUJywgJ+aYn+acn+WFrSddLAorCWRheXNfYWJicjogWyfml6UnLCAn5LiAJywgJ+S6jCcsICfkuIknLCAn5ZubJywgJ+S6lCcsICflha0nXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBZWVlZLU1NLURECisJZGF0ZU9yZGVyOiBbJ3llYXInLCAnbW9udGgnLCAnZGF0ZSddLAorCXNob3J0RGF0ZTogJyVZLSVtLSVkJywKKwlzaG9ydFRpbWU6ICclSTolTSVwJywKKwlBTTogJ0FNJywKKwlQTTogJ1BNJywKKwlmaXJzdERheU9mV2VlazogMSwKKworCS8vIERhdGUuRXh0cmFzCisJb3JkaW5hbDogJycsCisKKwlsZXNzVGhhbk1pbnV0ZUFnbzogJ+S4jeWIsDHliIbpkp/liY0nLAorCW1pbnV0ZUFnbzogJ+Wkp+e6pjHliIbpkp/liY0nLAorCW1pbnV0ZXNBZ286ICd7ZGVsdGF95YiG6ZKf5LmL5YmNJywKKwlob3VyQWdvOiAn5aSn57qmMeWwj+aXtuWJjScsCisJaG91cnNBZ286ICflpKfnuqZ7ZGVsdGF95bCP5pe25YmNJywKKwlkYXlBZ286ICcx5aSp5YmNJywKKwlkYXlzQWdvOiAne2RlbHRhfeWkqeWJjScsCisJd2Vla0FnbzogJzHmmJ/mnJ/liY0nLAorCXdlZWtzQWdvOiAne2RlbHRhfeaYn+acn+WJjScsCisJbW9udGhBZ286ICcx5Liq5pyI5YmNJywKKwltb250aHNBZ286ICd7ZGVsdGF95Liq5pyI5YmNJywKKwl5ZWFyQWdvOiAnMeW5tOWJjScsCisJeWVhcnNBZ286ICd7ZGVsdGF95bm05YmNJywKKworCWxlc3NUaGFuTWludXRlVW50aWw6ICfku47njrDlnKjlvIDlp4vkuI3liLAx5YiG6ZKfJywKKwltaW51dGVVbnRpbDogJ+S7jueOsOWcqOW8gOWni+e0hDHliIbpkp8nLAorCW1pbnV0ZXNVbnRpbDogJ+S7jueOsOWcqOW8gOWni+e6pntkZWx0YX3liIbpkp8nLAorCWhvdXJVbnRpbDogJ+S7jueOsOWcqOW8gOWnizHlsI/ml7YnLAorCWhvdXJzVW50aWw6ICfku47njrDlnKjlvIDlp4vnuqZ7ZGVsdGF95bCP5pe2JywKKwlkYXlVbnRpbDogJ+S7jueOsOWcqOW8gOWnizHlpKknLAorCWRheXNVbnRpbDogJ+S7jueOsOWcqOW8gOWni3tkZWx0YX3lpKknLAorCXdlZWtVbnRpbDogJ+S7jueOsOWcqOW8gOWnizHmmJ/mnJ8nLAorCXdlZWtzVW50aWw6ICfku47njrDlnKjlvIDlp4t7ZGVsdGF95pif5pyfJywKKwltb250aFVudGlsOiAn5LuO546w5Zyo5byA5aeL5LiA5Liq5pyIJywKKwltb250aHNVbnRpbDogJ+S7jueOsOWcqOW8gOWni3tkZWx0YX3kuKrmnIgnLAorCXllYXJVbnRpbDogJ+S7jueOsOWcqOW8gOWnizHlubQnLAorCXllYXJzVW50aWw6ICfku47njrDlnKjlvIDlp4t7ZGVsdGF95bm0JworCit9KTsKKworLy8gVHJhZGl0aW9uYWwgQ2hpbmVzZQorTG9jYWxlLmRlZmluZSgnemgtQ0hUJywgJ0RhdGUnLCB7CisKKwltb250aHM6IFsn5LiA5pyIJywgJ+S6jOaciCcsICfkuInmnIgnLCAn5Zub5pyIJywgJ+S6lOaciCcsICflha3mnIgnLCAn5LiD5pyIJywgJ+WFq+aciCcsICfkuZ3mnIgnLCAn5Y2B5pyIJywgJ+WNgeS4gOaciCcsICfljYHkuozmnIgnXSwKKwltb250aHNfYWJicjogWyfkuIAnLCAn5LqMJywgJ+S4iScsICflm5snLCAn5LqUJywgJ+WFrScsICfkuIMnLCAn5YWrJywgJ+S5nScsICfljYEnLCAn5Y2B5LiAJywgJ+WNgeS6jCddLAorCWRheXM6IFsn5pif5pyf5pelJywgJ+aYn+acn+S4gCcsICfmmJ/mnJ/kuownLCAn5pif5pyf5LiJJywgJ+aYn+acn+WbmycsICfmmJ/mnJ/kupQnLCAn5pif5pyf5YWtJ10sCisJZGF5c19hYmJyOiBbJ+aXpScsICfkuIAnLCAn5LqMJywgJ+S4iScsICflm5snLCAn5LqUJywgJ+WFrSddLAorCisJLy8gQ3VsdHVyZSdzIGRhdGUgb3JkZXI6IFlZWVktTU0tREQKKwlkYXRlT3JkZXI6IFsneWVhcicsICdtb250aCcsICdkYXRlJ10sCisJc2hvcnREYXRlOiAnJVktJW0tJWQnLAorCXNob3J0VGltZTogJyVJOiVNJXAnLAorCUFNOiAnQU0nLAorCVBNOiAnUE0nLAorCWZpcnN0RGF5T2ZXZWVrOiAxLAorCisJLy8gRGF0ZS5FeHRyYXMKKwlvcmRpbmFsOiAnJywKKworCWxlc3NUaGFuTWludXRlQWdvOiAn5LiN5YiwMeWIhumQmOWJjScsCisJbWludXRlQWdvOiAn5aSn57SEMeWIhumQmOWJjScsCisJbWludXRlc0FnbzogJ3tkZWx0YX3liIbpkJjkuYvliY0nLAorCWhvdXJBZ286ICflpKfntIQx5bCP5pmC5YmNJywKKwlob3Vyc0FnbzogJ+Wkp+e0hHtkZWx0YX3lsI/mmYLliY0nLAorCWRheUFnbzogJzHlpKnliY0nLAorCWRheXNBZ286ICd7ZGVsdGF95aSp5YmNJywKKwl3ZWVrQWdvOiAnMeaYn+acn+WJjScsCisJd2Vla3NBZ286ICd7ZGVsdGF95pif5pyf5YmNJywKKwltb250aEFnbzogJzHkuKrmnIjliY0nLAorCW1vbnRoc0FnbzogJ3tkZWx0YX3kuKrmnIjliY0nLAorCXllYXJBZ286ICcx5bm05YmNJywKKwl5ZWFyc0FnbzogJ3tkZWx0YX3lubTliY0nLAorCisJbGVzc1RoYW5NaW51dGVVbnRpbDogJ+W+nuePvuWcqOmWi+Wni+S4jeWIsDHliIbpkJgnLAorCW1pbnV0ZVVudGlsOiAn5b6e54++5Zyo6ZaL5aeL57SEMeWIhumQmCcsCisJbWludXRlc1VudGlsOiAn5b6e54++5Zyo6ZaL5aeL57SEe2RlbHRhfeWIhumQmCcsCisJaG91clVudGlsOiAn5b6e54++5Zyo6ZaL5aeLMeWwj+aZgicsCisJaG91cnNVbnRpbDogJ+W+nuePvuWcqOmWi+Wni+e0hHtkZWx0YX3lsI/mmYInLAorCWRheVVudGlsOiAn5b6e54++5Zyo6ZaL5aeLMeWkqScsCisJZGF5c1VudGlsOiAn5b6e54++5Zyo6ZaL5aeLe2RlbHRhfeWkqScsCisJd2Vla1VudGlsOiAn5b6e54++5Zyo6ZaL5aeLMeaYn+acnycsCisJd2Vla3NVbnRpbDogJ+W+nuePvuWcqOmWi+Wni3tkZWx0YX3mmJ/mnJ8nLAorCW1vbnRoVW50aWw6ICflvp7nj77lnKjplovlp4vkuIDlgIvmnIgnLAorCW1vbnRoc1VudGlsOiAn5b6e54++5Zyo6ZaL5aeLe2RlbHRhfeWAi+aciCcsCisJeWVhclVudGlsOiAn5b6e54++5Zyo6ZaL5aeLMeW5tCcsCisJeWVhcnNVbnRpbDogJ+W+nuePvuWcqOmWi+Wni3tkZWx0YX3lubQnCisKK30pOworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLnpoLUNILkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgQ2hpbmVzZSAoc2ltcGxpZmllZCBhbmQgdHJhZGl0aW9uYWwpLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFlNaW5kIENoYW4KKworcmVxdWlyZXM6CisgIC0gL0xvY2FsZQorICAtIC9Gb3JtLlZhbGlkYXRvcgorCitwcm92aWRlczogW0Zvcm0uemgtQ0guRm9ybS5WYWxpZGF0b3IsIEZvcm0uVmFsaWRhdG9yLkN1cnJlbmN5WXVhblZhbGlkYXRvcl0KKworLi4uCisqLworCisvLyBTaW1wbGlmaWVkIENoaW5lc2UKK0xvY2FsZS5kZWZpbmUoJ3poLUNIUycsICdGb3JtVmFsaWRhdG9yJywgeworCisJcmVxdWlyZWQ6ICfmraTpobnlv4XloavjgIInLAorCW1pbkxlbmd0aDogJ+ivt+iHs+Wwkei+k+WFpSB7bWluTGVuZ3RofSDkuKrlrZfnrKYgKOW3sui+k+WFpSB7bGVuZ3RofSDkuKop44CCJywKKwltYXhMZW5ndGg6ICfmnIDlpJrlj6rog73ovpPlhaUge21heExlbmd0aH0g5Liq5a2X56ymICjlt7LovpPlhaUge2xlbmd0aH0g5LiqKeOAgicsCisJaW50ZWdlcjogJ+ivt+i+k+WFpeS4gOS4quaVtOaVsO+8jOS4jeiDveWMheWQq+Wwj+aVsOeCueOAguS+i+Wmgu+8miIxIiwgIjIwMCLjgIInLAorCW51bWVyaWM6ICfor7fovpPlhaXkuIDkuKrmlbDlrZfvvIzkvovlpoLvvJoiMSIsICIxLjEiLCAiLTEiLCAiLTEuMSLjgIInLAorCWRpZ2l0czogJ+ivt+i+k+WFpeeUseaVsOWtl+WSjOagh+eCueespuWPt+e7hOaIkOeahOWGheWuueOAguS+i+WmgueUteivneWPt+eggeOAgicsCisJYWxwaGE6ICfor7fovpPlhaUgQS1aIOeahCAyNiDkuKrlrZfmr43vvIzkuI3og73ljIXlkKvnqbrmoLzmiJbku7vkvZXlhbbku5blrZfnrKbjgIInLAorCWFscGhhbnVtOiAn6K+36L6T5YWlIEEtWiDnmoQgMjYg5Liq5a2X5q+N5oiWIDAtOSDnmoQgMTAg5Liq5pWw5a2X77yM5LiN6IO95YyF5ZCr56m65qC85oiW5Lu75L2V5YW25LuW5a2X56ym44CCJywKKwlkYXRlU3VjaEFzOiAn6K+36L6T5YWl5ZCI5rOV55qE5pel5pyf5qC85byP77yM5aaC77yae2RhdGV944CCJywKKwlkYXRlSW5Gb3JtYXRNRFk6ICfor7fovpPlhaXlkIjms5XnmoTml6XmnJ/moLzlvI/vvIzkvovlpoLvvJpZWVlZLU1NLUREICgiMjAxMC0xMi0zMSIp44CCJywKKwllbWFpbDogJ+ivt+i+k+WFpeWQiOazleeahOeUteWtkOS/oeeuseWcsOWdgO+8jOS+i+Wmgu+8miJmcmVkQGRvbWFpbi5jb20i44CCJywKKwl1cmw6ICfor7fovpPlhaXlkIjms5XnmoQgVXJsIOWcsOWdgO+8jOS+i+Wmgu+8mmh0dHA6Ly93d3cuZXhhbXBsZS5jb23jgIInLAorCWN1cnJlbmN5RG9sbGFyOiAn6K+36L6T5YWl5ZCI5rOV55qE6LSn5biB56ym5Y+377yM5L6L5aaC77ya77+lMTAwLjAnLAorCW9uZVJlcXVpcmVkOiAn6K+36Iez5bCR6YCJ5oup5LiA6aG544CCJywKKwllcnJvclByZWZpeDogJ+mUmeivr++8micsCisJd2FybmluZ1ByZWZpeDogJ+itpuWRiu+8micsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAn5LiN6IO95YyF5ZCr56m65qC844CCJywKKwlyZXFDaGtCeU5vZGU6ICfmnKrpgInmi6nku7vkvZXlhoXlrrnjgIInLAorCXJlcXVpcmVkQ2hrOiAn5q2k6aG55b+F5aGr44CCJywKKwlyZXFDaGtCeU5hbWU6ICfor7fpgInmi6kge2xhYmVsfS4nLAorCW1hdGNoOiAn5b+F6aG75LiOe21hdGNoTmFtZX3nm7jljLnphY0nLAorCXN0YXJ0RGF0ZTogJ+i1t+Wni+aXpeacnycsCisJZW5kRGF0ZTogJ+e7k+adn+aXpeacnycsCisJY3VycmVuZERhdGU6ICflvZPliY3ml6XmnJ8nLAorCWFmdGVyRGF0ZTogJ+aXpeacn+W/hemhu+etieS6juaIluaZmuS6jiB7bGFiZWx9LicsCisJYmVmb3JlRGF0ZTogJ+aXpeacn+W/hemhu+aXqeS6juaIluetieS6jiB7bGFiZWx9LicsCisJc3RhcnRNb250aDogJ+ivt+mAieaLqei1t+Wni+aciOS7vScsCisJc2FtZU1vbnRoOiAn5oKo5b+F6aG75L+u5pS55Lik5Liq5pel5pyf5Lit55qE5LiA5Liq77yM5Lul56Gu5L+d5a6D5Lus5Zyo5ZCM5LiA5pyI5Lu944CCJywKKwljcmVkaXRjYXJkOiAn5oKo6L6T5YWl55qE5L+h55So5Y2h5Y+356CB5LiN5q2j56Gu44CC5b2T5YmN5bey6L6T5YWle2xlbmd0aH3kuKrlrZfnrKbjgIInCisKK30pOworCisvLyBUcmFkaXRpb25hbCBDaGluZXNlCitMb2NhbGUuZGVmaW5lKCd6aC1DSFQnLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAn5q2k6aCF5b+F5aGr44CCICcsCisJbWluTGVuZ3RoOiAn6KuL6Iez5bCR6Ly45YWle21pbkxlbmd0aH0g5YCL5a2X56ymKOW3sui8uOWFpXtsZW5ndGh9IOWAiynjgIIgJywKKwltYXhMZW5ndGg6ICfmnIDlpJrlj6rog73ovLjlhaV7bWF4TGVuZ3RofSDlgIvlrZfnrKYo5bey6Ly45YWle2xlbmd0aH0g5YCLKeOAgiAnLAorCWludGVnZXI6ICfoq4vovLjlhaXkuIDlgIvmlbTmlbjvvIzkuI3og73ljIXlkKvlsI/mlbjpu57jgILkvovlpoLvvJoiMSIsICIyMDAi44CCICcsCisJbnVtZXJpYzogJ+iri+i8uOWFpeS4gOWAi+aVuOWtl++8jOS+i+Wmgu+8miIxIiwgIjEuMSIsICItMSIsICItMS4xIuOAgiAnLAorCWRpZ2l0czogJ+iri+i8uOWFpeeUseaVuOWtl+WSjOaomem7nuespuiZn+e1hOaIkOeahOWFp+WuueOAguS+i+Wmgumbu+ipseiZn+eivOOAgiAnLAorCWFscGhhOiAn6KuL6Ly45YWlQVog55qEMjYg5YCL5a2X5q+N77yM5LiN6IO95YyF5ZCr56m65qC85oiW5Lu75L2V5YW25LuW5a2X56ym44CCICcsCisJYWxwaGFudW06ICfoq4vovLjlhaVBWiDnmoQyNiDlgIvlrZfmr43miJYwLTkg55qEMTAg5YCL5pW45a2X77yM5LiN6IO95YyF5ZCr56m65qC85oiW5Lu75L2V5YW25LuW5a2X56ym44CCICcsCisJZGF0ZVN1Y2hBczogJ+iri+i8uOWFpeWQiOazleeahOaXpeacn+agvOW8j++8jOWmgu+8mntkYXRlfeOAgiAnLAorCWRhdGVJbkZvcm1hdE1EWTogJ+iri+i8uOWFpeWQiOazleeahOaXpeacn+agvOW8j++8jOS+i+Wmgu+8mllZWVktTU0tREQgKCIyMDEwLTEyLTMxIinjgIIgJywKKwllbWFpbDogJ+iri+i8uOWFpeWQiOazleeahOmbu+WtkOS/oeeuseWcsOWdgO+8jOS+i+Wmgu+8miJmcmVkQGRvbWFpbi5jb20i44CCICcsCisJdXJsOiAn6KuL6Ly45YWl5ZCI5rOV55qEVXJsIOWcsOWdgO+8jOS+i+Wmgu+8mmh0dHA6Ly93d3cuZXhhbXBsZS5jb23jgIIgJywKKwljdXJyZW5jeURvbGxhcjogJ+iri+i8uOWFpeWQiOazleeahOiyqOW5o+espuiZn++8jOS+i+Wmgu+8mu+/pTEwMC4wJywKKwlvbmVSZXF1aXJlZDogJ+iri+iHs+WwkemBuOaTh+S4gOmgheOAgiAnLAorCWVycm9yUHJlZml4OiAn6Yyv6Kqk77yaJywKKwl3YXJuaW5nUHJlZml4OiAn6K2m5ZGK77yaJywKKworCS8vIEZvcm0uVmFsaWRhdG9yLkV4dHJhcworCW5vU3BhY2U6ICfkuI3og73ljIXlkKvnqbrmoLzjgIIgJywKKwlyZXFDaGtCeU5vZGU6ICfmnKrpgbjmk4fku7vkvZXlhaflrrnjgIIgJywKKwlyZXF1aXJlZENoazogJ+atpOmgheW/heWhq+OAgiAnLAorCXJlcUNoa0J5TmFtZTogJ+iri+mBuOaThyB7bGFiZWx9LicsCisJbWF0Y2g6ICflv4XpoIjoiId7bWF0Y2hOYW1lfeebuOWMuemFjScsCisJc3RhcnREYXRlOiAn6LW35aeL5pel5pyfJywKKwllbmREYXRlOiAn57WQ5p2f5pel5pyfJywKKwljdXJyZW5kRGF0ZTogJ+eVtuWJjeaXpeacnycsCisJYWZ0ZXJEYXRlOiAn5pel5pyf5b+F6aCI562J5pa85oiW5pma5pa8e2xhYmVsfS4nLAorCWJlZm9yZURhdGU6ICfml6XmnJ/lv4XpoIjml6nmlrzmiJbnrYnmlrx7bGFiZWx9LicsCisJc3RhcnRNb250aDogJ+iri+mBuOaTh+i1t+Wni+aciOS7vScsCisJc2FtZU1vbnRoOiAn5oKo5b+F6aCI5L+u5pS55YWp5YCL5pel5pyf5Lit55qE5LiA5YCL77yM5Lul56K65L+d5a6D5YCR5Zyo5ZCM5LiA5pyI5Lu944CCICcsCisJY3JlZGl0Y2FyZDogJ+aCqOi8uOWFpeeahOS/oeeUqOWNoeiZn+eivOS4jeato+eiuuOAgueVtuWJjeW3sui8uOWFpXtsZW5ndGh95YCL5a2X56ym44CCICcKKworfSk7CisKK0Zvcm0uVmFsaWRhdG9yLmFkZCgndmFsaWRhdGUtY3VycmVuY3kteXVhbicsIHsKKworCWVycm9yTXNnOiBmdW5jdGlvbigpeworCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0TXNnKCdjdXJyZW5jeVl1YW4nKTsKKwl9LAorCisJdGVzdDogZnVuY3Rpb24oZWxlbWVudCl7CisJCS8vIFvvv6VdMVsjI11bLCMjI10rWy4jI10KKwkJLy8gW++/pV0xIyMjK1suIyNdCisJCS8vIFvvv6VdMC4jIworCQkvLyBb77+lXS4jIworCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0VmFsaWRhdG9yKCdJc0VtcHR5JykudGVzdChlbGVtZW50KSB8fCAoL17vv6U/XC0/KFsxLTldezF9WzAtOV17MCwyfShcLFswLTldezN9KSooXC5bMC05XXswLDJ9KT98WzEtOV17MX1cZCooXC5bMC05XXswLDJ9KT98MChcLlswLTldezAsMn0pP3woXC5bMC05XXsxLDJ9KT8pJC8pLnRlc3QoZWxlbWVudC5nZXQoJ3ZhbHVlJykpOworCX0KKworfSk7CisKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xpYnJhcmllcy9Nb29Ub29scy1Nb3JlLTEuNi4wLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGlicmFyaWVzL01vb1Rvb2xzLU1vcmUtMS42LjAuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIwYjNkNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xpYnJhcmllcy9Nb29Ub29scy1Nb3JlLTEuNi4wLmpzCkBAIC0wLDAgKzEsMTQ2NTggQEAKKy8qIE1vb1Rvb2xzOiB0aGUgamF2YXNjcmlwdCBmcmFtZXdvcmsuIGxpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLiBjb3B5cmlnaHQ6IENvcHlyaWdodCAoYykgMjAwNi0yMDE4IFtWYWxlcmlvIFByb2lldHRpXShodHRwczovL21vb3Rvb2xzLm5ldC8pLiovIAorLyohCitXZWIgQnVpbGQ6IGh0dHBzOi8vbW9vdG9vbHMubmV0L21vcmUvYnVpbGRlci9hMzA0OGY0YmZkZjYwM2IyMmE2OWMxNDFkYmQwZmNhOQorKi8KKy8qCistLS0KKworc2NyaXB0OiBNb3JlLmpzCisKK25hbWU6IE1vcmUKKworZGVzY3JpcHRpb246IE1vb1Rvb2xzIE1vcmUKKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBHdWlsbGVybW8gUmF1Y2gKKyAgLSBUaG9tYXMgQXlsb3R0CisgIC0gU2NvdHQgS3lsZQorICAtIEFyaWFuIFN0b2x3aWprCisgIC0gVGltIFdpZW5rCisgIC0gQ2hyaXN0b3BoIFBvamVyCisgIC0gQWFyb24gTmV3dG9uCisgIC0gSmFjb2IgVGhvcm50b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9Nb29Ub29scworCitwcm92aWRlczogW01vb1Rvb2xzLk1vcmVdCisKKy4uLgorKi8KKworTW9vVG9vbHMuTW9yZSA9IHsKKwl2ZXJzaW9uOiAnMS42LjAnLAorCWJ1aWxkOiAnNDViNzFkYjcwZjg3OTc4MWE3ZTBiMGQzZmIzYmIxMzA3YzI1MjFlYicKK307CisKKy8qCistLS0KKworc2NyaXB0OiBDaGFpbi5XYWl0LmpzCisKK25hbWU6IENoYWluLldhaXQKKworZGVzY3JpcHRpb246IHZhbHVlLCBBZGRzIGEgbWV0aG9kIHRvIGluamVjdCBwYXVzZXMgYmV0d2VlbiBjaGFpbmVkIGV2ZW50cy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisKK3JlcXVpcmVzOgorICAtIENvcmUvQ2hhaW4KKyAgLSBDb3JlL0VsZW1lbnQKKyAgLSBDb3JlL0Z4CisgIC0gTW9vVG9vbHMuTW9yZQorCitwcm92aWRlczogW0NoYWluLldhaXRdCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK3ZhciB3YWl0ID0geworCXdhaXQ6IGZ1bmN0aW9uKGR1cmF0aW9uKXsKKwkJcmV0dXJuIHRoaXMuY2hhaW4oZnVuY3Rpb24oKXsKKwkJCXRoaXMuY2FsbENoYWluLmRlbGF5KGR1cmF0aW9uID09IG51bGwgPyA1MDAgOiBkdXJhdGlvbiwgdGhpcyk7CisJCQlyZXR1cm4gdGhpczsKKwkJfS5iaW5kKHRoaXMpKTsKKwl9Cit9OworCitDaGFpbi5pbXBsZW1lbnQod2FpdCk7CisKK2lmICh0aGlzLkZ4KSBGeC5pbXBsZW1lbnQod2FpdCk7CisKK2lmICh0aGlzLkVsZW1lbnQgJiYgRWxlbWVudC5pbXBsZW1lbnQgJiYgdGhpcy5GeCl7CisJRWxlbWVudC5pbXBsZW1lbnQoeworCisJCWNoYWluczogZnVuY3Rpb24oZWZmZWN0cyl7CisJCQlBcnJheS5jb252ZXJ0KGVmZmVjdHMgfHwgWyd0d2VlbicsICdtb3JwaCcsICdyZXZlYWwnXSkuZWFjaChmdW5jdGlvbihlZmZlY3QpeworCQkJCWVmZmVjdCA9IHRoaXMuZ2V0KGVmZmVjdCk7CisJCQkJaWYgKCFlZmZlY3QpIHJldHVybjsKKwkJCQllZmZlY3Quc2V0T3B0aW9ucyh7CisJCQkJCWxpbms6J2NoYWluJworCQkJCX0pOworCQkJfSwgdGhpcyk7CisJCQlyZXR1cm4gdGhpczsKKwkJfSwKKworCQlwYXVzZUZ4OiBmdW5jdGlvbihkdXJhdGlvbiwgZWZmZWN0KXsKKwkJCXRoaXMuY2hhaW5zKGVmZmVjdCkuZ2V0KGVmZmVjdCB8fCAndHdlZW4nKS53YWl0KGR1cmF0aW9uKTsKKwkJCXJldHVybiB0aGlzOworCQl9CisKKwl9KTsKK30KKworfSkoKTsKKworLyoKKy0tLQorCitzY3JpcHQ6IENsYXNzLkJpbmRzLmpzCisKK25hbWU6IENsYXNzLkJpbmRzCisKK2Rlc2NyaXB0aW9uOiBBdXRvbWFnaWNhbGx5IGJpbmRzIHNwZWNpZmllZCBtZXRob2RzIGluIGEgY2xhc3MgdG8gdGhlIGluc3RhbmNlIG9mIHRoZSBjbGFzcy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9DbGFzcworICAtIE1vb1Rvb2xzLk1vcmUKKworcHJvdmlkZXM6IFtDbGFzcy5CaW5kc10KKworLi4uCisqLworCitDbGFzcy5NdXRhdG9ycy5CaW5kcyA9IGZ1bmN0aW9uKGJpbmRzKXsKKwlpZiAoIXRoaXMucHJvdG90eXBlLmluaXRpYWxpemUpIHRoaXMuaW1wbGVtZW50KCdpbml0aWFsaXplJywgZnVuY3Rpb24oKXt9KTsKKwlyZXR1cm4gQXJyYXkuY29udmVydChiaW5kcykuY29uY2F0KHRoaXMucHJvdG90eXBlLkJpbmRzIHx8IFtdKTsKK307CisKK0NsYXNzLk11dGF0b3JzLmluaXRpYWxpemUgPSBmdW5jdGlvbihpbml0aWFsaXplKXsKKwlyZXR1cm4gZnVuY3Rpb24oKXsKKwkJQXJyYXkuY29udmVydCh0aGlzLkJpbmRzKS5lYWNoKGZ1bmN0aW9uKG5hbWUpeworCQkJdmFyIG9yaWdpbmFsID0gdGhpc1tuYW1lXTsKKwkJCWlmIChvcmlnaW5hbCkgdGhpc1tuYW1lXSA9IG9yaWdpbmFsLmJpbmQodGhpcyk7CisJCX0sIHRoaXMpOworCQlyZXR1cm4gaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCX07Cit9OworCisvKgorLS0tCisKK3NjcmlwdDogQ2xhc3MuT2NjbHVkZS5qcworCituYW1lOiBDbGFzcy5PY2NsdWRlCisKK2Rlc2NyaXB0aW9uOiBQcmV2ZW50cyBhIGNsYXNzIGZyb20gYmVpbmcgYXBwbGllZCB0byBhIERPTSBlbGVtZW50IHR3aWNlLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9DbGFzcworICAtIENvcmUvRWxlbWVudAorICAtIE1vb1Rvb2xzLk1vcmUKKworcHJvdmlkZXM6IFtDbGFzcy5PY2NsdWRlXQorCisuLi4KKyovCisKK0NsYXNzLk9jY2x1ZGUgPSBuZXcgQ2xhc3MoeworCisJb2NjbHVkZTogZnVuY3Rpb24ocHJvcGVydHksIGVsZW1lbnQpeworCQllbGVtZW50ID0gZG9jdW1lbnQuaWQoZWxlbWVudCB8fCB0aGlzLmVsZW1lbnQpOworCQl2YXIgaW5zdGFuY2UgPSBlbGVtZW50LnJldHJpZXZlKHByb3BlcnR5IHx8IHRoaXMucHJvcGVydHkpOworCQlpZiAoaW5zdGFuY2UgJiYgIXRoaXMub2NjbHVkZWQpCisJCQlyZXR1cm4gKHRoaXMub2NjbHVkZWQgPSBpbnN0YW5jZSk7CisKKwkJdGhpcy5vY2NsdWRlZCA9IGZhbHNlOworCQllbGVtZW50LnN0b3JlKHByb3BlcnR5IHx8IHRoaXMucHJvcGVydHksIHRoaXMpOworCQlyZXR1cm4gdGhpcy5vY2NsdWRlZDsKKwl9CisKK30pOworCisvKgorLS0tCisKK3NjcmlwdDogQ2xhc3MuUmVmYWN0b3IuanMKKworbmFtZTogQ2xhc3MuUmVmYWN0b3IKKworZGVzY3JpcHRpb246IEV4dGVuZHMgYSBjbGFzcyBvbnRvIGl0c2VsZiB3aXRoIG5ldyBwcm9wZXJ0eSwgcHJlc2VydmluZyBhbnkgaXRlbXMgYXR0YWNoZWQgdG8gdGhlIGNsYXNzJ3MgbmFtZXNwYWNlLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSBDb3JlL0NsYXNzCisgIC0gTW9vVG9vbHMuTW9yZQorCisjIFNvbWUgbW9kdWxlcyBkZWNsYXJlIHRoZW1zZWx2ZXMgZGVwZW5kZW50IG9uIENsYXNzLlJlZmFjdG9yCitwcm92aWRlczogW0NsYXNzLnJlZmFjdG9yLCBDbGFzcy5SZWZhY3Rvcl0KKworLi4uCisqLworCitDbGFzcy5yZWZhY3RvciA9IGZ1bmN0aW9uKG9yaWdpbmFsLCByZWZhY3RvcnMpeworCisJT2JqZWN0LmVhY2gocmVmYWN0b3JzLCBmdW5jdGlvbihpdGVtLCBuYW1lKXsKKwkJdmFyIG9yaWdpbiA9IG9yaWdpbmFsLnByb3RvdHlwZVtuYW1lXTsKKwkJb3JpZ2luID0gKG9yaWdpbiAmJiBvcmlnaW4uJG9yaWdpbikgfHwgb3JpZ2luIHx8IGZ1bmN0aW9uKCl7fTsKKwkJb3JpZ2luYWwuaW1wbGVtZW50KG5hbWUsICh0eXBlb2YgaXRlbSA9PSAnZnVuY3Rpb24nKSA/IGZ1bmN0aW9uKCl7CisJCQl2YXIgb2xkID0gdGhpcy5wcmV2aW91czsKKwkJCXRoaXMucHJldmlvdXMgPSBvcmlnaW47CisJCQl2YXIgdmFsdWUgPSBpdGVtLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisJCQl0aGlzLnByZXZpb3VzID0gb2xkOworCQkJcmV0dXJuIHZhbHVlOworCQl9IDogaXRlbSk7CisJfSk7CisKKwlyZXR1cm4gb3JpZ2luYWw7CisKK307CisKKy8qCistLS0KKworc2NyaXB0OiBDbGFzcy5TaW5nbGV0b24uanMKKworbmFtZTogQ2xhc3MuU2luZ2xldG9uCisKK2Rlc2NyaXB0aW9uOiBBbHdheXMgcHJvdmlkZXMgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgYSBjbGFzcworCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworYXV0aG9yczoKKyAgLSBIcmlzdG8gQ2hha2Fyb3YKKworcmVxdWlyZXM6CisgIC0gQ29yZS9DbGFzcworCitwcm92aWRlczogW0NsYXNzLlNpbmdsZXRvbl0KKworLi4uCisqLworCitDbGFzcy5TaW5nbGV0b24gPSBuZXcgQ2xhc3MoeworCisJaW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKGRlc2NyaXB0b3IpeworCQkvLyBoZXJlIHdlIGtlZXAgcmVmZXJlbmNlIG9mIHRoZSBzaW5nbGUgaW5zdGFuY2UKKwkJdmFyIHNpbmdsZXRvbjsKKwkJLy8gY3JlYXRlIGEgcmVndWxhciBDbGFzcworCQl2YXIgY29uc3RydWN0b3IgPSBuZXcgQ2xhc3MoZGVzY3JpcHRvcik7CisJCS8vIFdlIHJldHVybiBhbm90aGVyIGNvbnN0cnVjdG9yLCBiZWNhdXNlIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UKKwkJLy8gYWx3YXlzIHJldHVybiB0aGUgc2FtZSBvbmUgYW5kIG9ubHkgaW5zdGFuY2UuCisJCXJldHVybiBmdW5jdGlvbigpeworCQkJaWYgKHNpbmdsZXRvbil7CisJCQkJcmV0dXJuIHNpbmdsZXRvbjsKKwkJCX0KKwkJCS8vIE9idmlvdXNseSB3ZSBpbnN0YW50aWF0ZSB0aGF0IGNsYXNzIGZvciB0aGUgZmlyc3QgdGltZS4KKwkJCS8vIENyZWF0ZSBicmFuZCBuZXcgb2JqZWN0ICYgZXh0ZW5kIGl0IHdpdGggdGhlIHByb3RvdHlwZSBvZiB0aGUKKwkJCS8vIG9yaWdpbmFsIGBjb25zdHJ1Y3RvcmAuCisJCQlzaW5nbGV0b24gPSBPYmplY3QuYXBwZW5kKHt9LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpOworCQkJc2luZ2xldG9uLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7CisJCQkvLyBXZSBhbHNvIG5lZWQgdG8gY2FsbCB0aGUgY29uc3RydWN0b3IgYXMgYSBmdW5jdGlvbiwgcGFzc2luZyB0aGUKKwkJCS8vIGFyZ3VtZW50cyBvYmplY3QuCisJCQl2YXIgcmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3Rvci5hcHBseShzaW5nbGV0b24sIGFyZ3VtZW50cyk7CisJCQkvLyBJbiBjYXNlIHRoZSBgY29uc3RydWN0b3JgIHJldHVybnMgc29tZXRoaW5nIG90aGVyIHRoYW4gYHRoaXNgIC0KKwkJCS8vIHJldHVybiB0aGF0IHZhbHVlOyBvdGhlcndpc2UgcmV0dXJuIHRoZSBgc2luZ2xldG9uYC4KKwkJCXNpbmdsZXRvbiA9IHR5cGVvZiByZXR1cm5WYWx1ZSA9PSAnb2JqZWN0JyA/IHJldHVyblZhbHVlIDogc2luZ2xldG9uOworCQkJcmV0dXJuIHNpbmdsZXRvbjsKKwkJfTsKKwl9CisKK30pOworCisvKgorLS0tCisKK25hbWU6IEV2ZW50cy5Qc2V1ZG9zCisKK2Rlc2NyaXB0aW9uOiBBZGRzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGFkZCBwc2V1ZG8gZXZlbnRzCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQXJpYW4gU3RvbHdpamsKKworcmVxdWlyZXM6IFtDb3JlL0NsYXNzLkV4dHJhcywgQ29yZS9TbGljay5QYXJzZXIsIE1vb1Rvb2xzLk1vcmVdCisKK3Byb3ZpZGVzOiBbRXZlbnRzLlBzZXVkb3NdCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK0V2ZW50cy5Qc2V1ZG9zID0gZnVuY3Rpb24ocHNldWRvcywgYWRkRXZlbnQsIHJlbW92ZUV2ZW50KXsKKworCXZhciBzdG9yZUtleSA9ICdfbW9uaXRvckV2ZW50czonOworCisJdmFyIHN0b3JhZ2VPZiA9IGZ1bmN0aW9uKG9iamVjdCl7CisJCXJldHVybiB7CisJCQlzdG9yZTogb2JqZWN0LnN0b3JlID8gZnVuY3Rpb24oa2V5LCB2YWx1ZSl7CisJCQkJb2JqZWN0LnN0b3JlKHN0b3JlS2V5ICsga2V5LCB2YWx1ZSk7CisJCQl9IDogZnVuY3Rpb24oa2V5LCB2YWx1ZSl7CisJCQkJKG9iamVjdC5fbW9uaXRvckV2ZW50cyB8fCAob2JqZWN0Ll9tb25pdG9yRXZlbnRzID0ge30pKVtrZXldID0gdmFsdWU7CisJCQl9LAorCQkJcmV0cmlldmU6IG9iamVjdC5yZXRyaWV2ZSA/IGZ1bmN0aW9uKGtleSwgZGZsdCl7CisJCQkJcmV0dXJuIG9iamVjdC5yZXRyaWV2ZShzdG9yZUtleSArIGtleSwgZGZsdCk7CisJCQl9IDogZnVuY3Rpb24oa2V5LCBkZmx0KXsKKwkJCQlpZiAoIW9iamVjdC5fbW9uaXRvckV2ZW50cykgcmV0dXJuIGRmbHQ7CisJCQkJcmV0dXJuIG9iamVjdC5fbW9uaXRvckV2ZW50c1trZXldIHx8IGRmbHQ7CisJCQl9CisJCX07CisJfTsKKworCXZhciBzcGxpdFR5cGUgPSBmdW5jdGlvbih0eXBlKXsKKwkJaWYgKHR5cGUuaW5kZXhPZignOicpID09IC0xIHx8ICFwc2V1ZG9zKSByZXR1cm4gbnVsbDsKKworCQl2YXIgcGFyc2VkID0gU2xpY2sucGFyc2UodHlwZSkuZXhwcmVzc2lvbnNbMF1bMF0sCisJCQlwYXJzZWRQc2V1ZG9zID0gcGFyc2VkLnBzZXVkb3MsCisJCQlsID0gcGFyc2VkUHNldWRvcy5sZW5ndGgsCisJCQlzcGxpdHMgPSBbXTsKKworCQl3aGlsZSAobC0tKXsKKwkJCXZhciBwc2V1ZG8gPSBwYXJzZWRQc2V1ZG9zW2xdLmtleSwKKwkJCQlsaXN0ZW5lciA9IHBzZXVkb3NbcHNldWRvXTsKKwkJCWlmIChsaXN0ZW5lciAhPSBudWxsKSBzcGxpdHMucHVzaCh7CisJCQkJZXZlbnQ6IHBhcnNlZC50YWcsCisJCQkJdmFsdWU6IHBhcnNlZFBzZXVkb3NbbF0udmFsdWUsCisJCQkJcHNldWRvOiBwc2V1ZG8sCisJCQkJb3JpZ2luYWw6IHR5cGUsCisJCQkJbGlzdGVuZXI6IGxpc3RlbmVyCisJCQl9KTsKKwkJfQorCQlyZXR1cm4gc3BsaXRzLmxlbmd0aCA/IHNwbGl0cyA6IG51bGw7CisJfTsKKworCXJldHVybiB7CisKKwkJYWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuLCBpbnRlcm5hbCl7CisJCQl2YXIgc3BsaXQgPSBzcGxpdFR5cGUodHlwZSk7CisJCQlpZiAoIXNwbGl0KSByZXR1cm4gYWRkRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBmbiwgaW50ZXJuYWwpOworCisJCQl2YXIgc3RvcmFnZSA9IHN0b3JhZ2VPZih0aGlzKSwKKwkJCQlldmVudHMgPSBzdG9yYWdlLnJldHJpZXZlKHR5cGUsIFtdKSwKKwkJCQlldmVudFR5cGUgPSBzcGxpdFswXS5ldmVudCwKKwkJCQlhcmdzID0gQXJyYXkuc2xpY2UoYXJndW1lbnRzLCAyKSwKKwkJCQlzdGFjayA9IGZuLAorCQkJCXNlbGYgPSB0aGlzOworCisJCQlzcGxpdC5lYWNoKGZ1bmN0aW9uKGl0ZW0peworCQkJCXZhciBsaXN0ZW5lciA9IGl0ZW0ubGlzdGVuZXIsCisJCQkJCXN0YWNrRm4gPSBzdGFjazsKKwkJCQlpZiAobGlzdGVuZXIgPT0gZmFsc2UpIGV2ZW50VHlwZSArPSAnOicgKyBpdGVtLnBzZXVkbyArICcoJyArIGl0ZW0udmFsdWUgKyAnKSc7CisJCQkJZWxzZSBzdGFjayA9IGZ1bmN0aW9uKCl7CisJCQkJCWxpc3RlbmVyLmNhbGwoc2VsZiwgaXRlbSwgc3RhY2tGbiwgYXJndW1lbnRzLCBzdGFjayk7CisJCQkJfTsKKwkJCX0pOworCisJCQlldmVudHMuaW5jbHVkZSh7dHlwZTogZXZlbnRUeXBlLCBldmVudDogZm4sIG1vbml0b3I6IHN0YWNrfSk7CisJCQlzdG9yYWdlLnN0b3JlKHR5cGUsIGV2ZW50cyk7CisKKwkJCWlmICh0eXBlICE9IGV2ZW50VHlwZSkgYWRkRXZlbnQuYXBwbHkodGhpcywgW3R5cGUsIGZuXS5jb25jYXQoYXJncykpOworCQkJcmV0dXJuIGFkZEV2ZW50LmFwcGx5KHRoaXMsIFtldmVudFR5cGUsIHN0YWNrXS5jb25jYXQoYXJncykpOworCQl9LAorCisJCXJlbW92ZUV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbil7CisJCQl2YXIgc3BsaXQgPSBzcGxpdFR5cGUodHlwZSk7CisJCQlpZiAoIXNwbGl0KSByZXR1cm4gcmVtb3ZlRXZlbnQuY2FsbCh0aGlzLCB0eXBlLCBmbik7CisKKwkJCXZhciBzdG9yYWdlID0gc3RvcmFnZU9mKHRoaXMpLAorCQkJCWV2ZW50cyA9IHN0b3JhZ2UucmV0cmlldmUodHlwZSk7CisJCQlpZiAoIWV2ZW50cykgcmV0dXJuIHRoaXM7CisKKwkJCXZhciBhcmdzID0gQXJyYXkuc2xpY2UoYXJndW1lbnRzLCAyKTsKKworCQkJcmVtb3ZlRXZlbnQuYXBwbHkodGhpcywgW3R5cGUsIGZuXS5jb25jYXQoYXJncykpOworCQkJZXZlbnRzLmVhY2goZnVuY3Rpb24obW9uaXRvciwgaSl7CisJCQkJaWYgKCFmbiB8fCBtb25pdG9yLmV2ZW50ID09IGZuKSByZW1vdmVFdmVudC5hcHBseSh0aGlzLCBbbW9uaXRvci50eXBlLCBtb25pdG9yLm1vbml0b3JdLmNvbmNhdChhcmdzKSk7CisJCQkJZGVsZXRlIGV2ZW50c1tpXTsKKwkJCX0sIHRoaXMpOworCisJCQlzdG9yYWdlLnN0b3JlKHR5cGUsIGV2ZW50cyk7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCisJfTsKKworfTsKKwordmFyIHBzZXVkb3MgPSB7CisKKwlvbmNlOiBmdW5jdGlvbihzcGxpdCwgZm4sIGFyZ3MsIG1vbml0b3IpeworCQlmbi5hcHBseSh0aGlzLCBhcmdzKTsKKwkJdGhpcy5yZW1vdmVFdmVudChzcGxpdC5ldmVudCwgbW9uaXRvcikKKwkJCS5yZW1vdmVFdmVudChzcGxpdC5vcmlnaW5hbCwgZm4pOworCX0sCisKKwl0aHJvdHRsZTogZnVuY3Rpb24oc3BsaXQsIGZuLCBhcmdzKXsKKwkJaWYgKCFmbi5fdGhyb3R0bGVkKXsKKwkJCWZuLmFwcGx5KHRoaXMsIGFyZ3MpOworCQkJZm4uX3Rocm90dGxlZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKKwkJCQlmbi5fdGhyb3R0bGVkID0gZmFsc2U7CisJCQl9LCBzcGxpdC52YWx1ZSB8fCAyNTApOworCQl9CisJfSwKKworCXBhdXNlOiBmdW5jdGlvbihzcGxpdCwgZm4sIGFyZ3MpeworCQljbGVhclRpbWVvdXQoZm4uX3BhdXNlKTsKKwkJZm4uX3BhdXNlID0gZm4uZGVsYXkoc3BsaXQudmFsdWUgfHwgMjUwLCB0aGlzLCBhcmdzKTsKKwl9CisKK307CisKK0V2ZW50cy5kZWZpbmVQc2V1ZG8gPSBmdW5jdGlvbihrZXksIGxpc3RlbmVyKXsKKwlwc2V1ZG9zW2tleV0gPSBsaXN0ZW5lcjsKKwlyZXR1cm4gdGhpczsKK307CisKK0V2ZW50cy5sb29rdXBQc2V1ZG8gPSBmdW5jdGlvbihrZXkpeworCXJldHVybiBwc2V1ZG9zW2tleV07Cit9OworCit2YXIgcHJvdG8gPSBFdmVudHMucHJvdG90eXBlOworRXZlbnRzLmltcGxlbWVudChFdmVudHMuUHNldWRvcyhwc2V1ZG9zLCBwcm90by5hZGRFdmVudCwgcHJvdG8ucmVtb3ZlRXZlbnQpKTsKKworWydSZXF1ZXN0JywgJ0Z4J10uZWFjaChmdW5jdGlvbihrbGFzcyl7CisJaWYgKHRoaXNba2xhc3NdKSB0aGlzW2tsYXNzXS5pbXBsZW1lbnQoRXZlbnRzLnByb3RvdHlwZSk7Cit9KTsKKworfSkoKTsKKworLyoKKy0tLQorCitzY3JpcHQ6IERyYWcuanMKKworbmFtZTogRHJhZworCitkZXNjcmlwdGlvbjogVGhlIGJhc2UgRHJhZyBDbGFzcy4gQ2FuIGJlIHVzZWQgdG8gZHJhZyBhbmQgcmVzaXplIEVsZW1lbnRzIHVzaW5nIG1vdXNlIGV2ZW50cy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBWYWxlcmlvIFByb2lldHRpCisgIC0gVG9tIE9jY2hpbm5vCisgIC0gSmFuIEthc3NlbnMKKworcmVxdWlyZXM6CisgIC0gQ29yZS9FdmVudHMKKyAgLSBDb3JlL09wdGlvbnMKKyAgLSBDb3JlL0VsZW1lbnQuRXZlbnQKKyAgLSBDb3JlL0VsZW1lbnQuU3R5bGUKKyAgLSBDb3JlL0VsZW1lbnQuRGltZW5zaW9ucworICAtIE1vb1Rvb2xzLk1vcmUKKworcHJvdmlkZXM6IFtEcmFnXQorLi4uCisKKyovCisoZnVuY3Rpb24oKXsKKwordmFyIERyYWcgPSB0aGlzLkRyYWcgPSBuZXcgQ2xhc3MoeworCisJSW1wbGVtZW50czogW0V2ZW50cywgT3B0aW9uc10sCisKKwlvcHRpb25zOiB7LyoKKwkJb25CZWZvcmVTdGFydDogZnVuY3Rpb24odGhpc0VsZW1lbnQpe30sCisJCW9uU3RhcnQ6IGZ1bmN0aW9uKHRoaXNFbGVtZW50LCBldmVudCl7fSwKKwkJb25TbmFwOiBmdW5jdGlvbih0aGlzRWxlbWVudCl7fSwKKwkJb25EcmFnOiBmdW5jdGlvbih0aGlzRWxlbWVudCwgZXZlbnQpe30sCisJCW9uQ2FuY2VsOiBmdW5jdGlvbih0aGlzRWxlbWVudCl7fSwKKwkJb25Db21wbGV0ZTogZnVuY3Rpb24odGhpc0VsZW1lbnQsIGV2ZW50KXt9LCovCisJCXNuYXA6IDYsCisJCXVuaXQ6ICdweCcsCisJCWdyaWQ6IGZhbHNlLAorCQlzdHlsZTogdHJ1ZSwKKwkJbGltaXQ6IGZhbHNlLAorCQloYW5kbGU6IGZhbHNlLAorCQlpbnZlcnQ6IGZhbHNlLAorCQl1bkRyYWdnYWJsZVRhZ3M6IFsnYnV0dG9uJywgJ2lucHV0JywgJ2EnLCAndGV4dGFyZWEnLCAnc2VsZWN0JywgJ29wdGlvbiddLAorCQlwcmV2ZW50RGVmYXVsdDogZmFsc2UsCisJCXN0b3BQcm9wYWdhdGlvbjogZmFsc2UsCisJCWNvbXBlbnNhdGVTY3JvbGw6IGZhbHNlLAorCQltb2RpZmllcnM6IHt4OiAnbGVmdCcsIHk6ICd0b3AnfQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbigpeworCQl2YXIgcGFyYW1zID0gQXJyYXkubGluayhhcmd1bWVudHMsIHsKKwkJCSdvcHRpb25zJzogVHlwZS5pc09iamVjdCwKKwkJCSdlbGVtZW50JzogZnVuY3Rpb24ob2JqKXsKKwkJCQlyZXR1cm4gb2JqICE9IG51bGw7CisJCQl9CisJCX0pOworCisJCXRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmlkKHBhcmFtcy5lbGVtZW50KTsKKwkJdGhpcy5kb2N1bWVudCA9IHRoaXMuZWxlbWVudC5nZXREb2N1bWVudCgpOworCQl0aGlzLnNldE9wdGlvbnMocGFyYW1zLm9wdGlvbnMgfHwge30pOworCQl2YXIgaHR5cGUgPSB0eXBlT2YodGhpcy5vcHRpb25zLmhhbmRsZSk7CisJCXRoaXMuaGFuZGxlcyA9ICgoaHR5cGUgPT0gJ2FycmF5JyB8fCBodHlwZSA9PSAnY29sbGVjdGlvbicpID8gJCQodGhpcy5vcHRpb25zLmhhbmRsZSkgOiBkb2N1bWVudC5pZCh0aGlzLm9wdGlvbnMuaGFuZGxlKSkgfHwgdGhpcy5lbGVtZW50OworCQl0aGlzLm1vdXNlID0geydub3cnOiB7fSwgJ3Bvcyc6IHt9fTsKKwkJdGhpcy52YWx1ZSA9IHsnc3RhcnQnOiB7fSwgJ25vdyc6IHt9fTsKKwkJdGhpcy5vZmZzZXRQYXJlbnQgPSAoZnVuY3Rpb24oZWwpeworCQkJdmFyIG9mZnNldFBhcmVudCA9IGVsLmdldE9mZnNldFBhcmVudCgpOworCQkJdmFyIGlzQm9keSA9ICFvZmZzZXRQYXJlbnQgfHwgKC9eKD86Ym9keXxodG1sKSQvaSkudGVzdChvZmZzZXRQYXJlbnQudGFnTmFtZSk7CisJCQlyZXR1cm4gaXNCb2R5ID8gd2luZG93IDogZG9jdW1lbnQuaWQob2Zmc2V0UGFyZW50KTsKKwkJfSkodGhpcy5lbGVtZW50KTsKKwkJdGhpcy5zZWxlY3Rpb24gPSAnc2VsZWN0c3RhcnQnIGluIGRvY3VtZW50ID8gJ3NlbGVjdHN0YXJ0JyA6ICdtb3VzZWRvd24nOworCisJCXRoaXMuY29tcGVuc2F0ZVNjcm9sbCA9IHtzdGFydDoge30sIGRpZmY6IHt9LCBsYXN0OiB7fX07CisKKwkJaWYgKCdvbmRyYWdzdGFydCcgaW4gZG9jdW1lbnQgJiYgISgnRmlsZVJlYWRlcicgaW4gd2luZG93KSAmJiAhRHJhZy5vbmRyYWdzdGFydEZpeGVkKXsKKwkJCWRvY3VtZW50Lm9uZHJhZ3N0YXJ0ID0gRnVuY3Rpb24uY29udmVydChmYWxzZSk7CisJCQlEcmFnLm9uZHJhZ3N0YXJ0Rml4ZWQgPSB0cnVlOworCQl9CisKKwkJdGhpcy5ib3VuZCA9IHsKKwkJCXN0YXJ0OiB0aGlzLnN0YXJ0LmJpbmQodGhpcyksCisJCQljaGVjazogdGhpcy5jaGVjay5iaW5kKHRoaXMpLAorCQkJZHJhZzogdGhpcy5kcmFnLmJpbmQodGhpcyksCisJCQlzdG9wOiB0aGlzLnN0b3AuYmluZCh0aGlzKSwKKwkJCWNhbmNlbDogdGhpcy5jYW5jZWwuYmluZCh0aGlzKSwKKwkJCWV2ZW50U3RvcDogRnVuY3Rpb24uY29udmVydChmYWxzZSksCisJCQlzY3JvbGxMaXN0ZW5lcjogdGhpcy5zY3JvbGxMaXN0ZW5lci5iaW5kKHRoaXMpCisJCX07CisJCXRoaXMuYXR0YWNoKCk7CisJfSwKKworCWF0dGFjaDogZnVuY3Rpb24oKXsKKwkJdGhpcy5oYW5kbGVzLmFkZEV2ZW50KCdtb3VzZWRvd24nLCB0aGlzLmJvdW5kLnN0YXJ0KTsKKwkJdGhpcy5oYW5kbGVzLmFkZEV2ZW50KCd0b3VjaHN0YXJ0JywgdGhpcy5ib3VuZC5zdGFydCk7CisJCWlmICh0aGlzLm9wdGlvbnMuY29tcGVuc2F0ZVNjcm9sbCkgdGhpcy5vZmZzZXRQYXJlbnQuYWRkRXZlbnQoJ3Njcm9sbCcsIHRoaXMuYm91bmQuc2Nyb2xsTGlzdGVuZXIpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZGV0YWNoOiBmdW5jdGlvbigpeworCQl0aGlzLmhhbmRsZXMucmVtb3ZlRXZlbnQoJ21vdXNlZG93bicsIHRoaXMuYm91bmQuc3RhcnQpOworCQl0aGlzLmhhbmRsZXMucmVtb3ZlRXZlbnQoJ3RvdWNoc3RhcnQnLCB0aGlzLmJvdW5kLnN0YXJ0KTsKKwkJaWYgKHRoaXMub3B0aW9ucy5jb21wZW5zYXRlU2Nyb2xsKSB0aGlzLm9mZnNldFBhcmVudC5yZW1vdmVFdmVudCgnc2Nyb2xsJywgdGhpcy5ib3VuZC5zY3JvbGxMaXN0ZW5lcik7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlzY3JvbGxMaXN0ZW5lcjogZnVuY3Rpb24oKXsKKworCQlpZiAoIXRoaXMubW91c2Uuc3RhcnQpIHJldHVybjsKKwkJdmFyIG5ld1Njcm9sbFZhbHVlID0gdGhpcy5vZmZzZXRQYXJlbnQuZ2V0U2Nyb2xsKCk7CisKKwkJaWYgKHRoaXMuZWxlbWVudC5nZXRTdHlsZSgncG9zaXRpb24nKSA9PSAnYWJzb2x1dGUnKXsKKwkJCXZhciBzY3JvbGxEaWZmID0gdGhpcy5zdW1WYWx1ZXMobmV3U2Nyb2xsVmFsdWUsIHRoaXMuY29tcGVuc2F0ZVNjcm9sbC5sYXN0LCAtMSk7CisJCQl0aGlzLm1vdXNlLm5vdyA9IHRoaXMuc3VtVmFsdWVzKHRoaXMubW91c2Uubm93LCBzY3JvbGxEaWZmLCAxKTsKKwkJfSBlbHNlIHsKKwkJCXRoaXMuY29tcGVuc2F0ZVNjcm9sbC5kaWZmID0gdGhpcy5zdW1WYWx1ZXMobmV3U2Nyb2xsVmFsdWUsIHRoaXMuY29tcGVuc2F0ZVNjcm9sbC5zdGFydCwgLTEpOworCQl9CisJCWlmICh0aGlzLm9mZnNldFBhcmVudCAhPSB3aW5kb3cpIHRoaXMuY29tcGVuc2F0ZVNjcm9sbC5kaWZmID0gdGhpcy5zdW1WYWx1ZXModGhpcy5jb21wZW5zYXRlU2Nyb2xsLnN0YXJ0LCBuZXdTY3JvbGxWYWx1ZSwgLTEpOworCQl0aGlzLmNvbXBlbnNhdGVTY3JvbGwubGFzdCA9IG5ld1Njcm9sbFZhbHVlOworCQl0aGlzLnJlbmRlcih0aGlzLm9wdGlvbnMpOworCX0sCisKKwlzdW1WYWx1ZXM6IGZ1bmN0aW9uKGFscGhhLCBiZXRhLCBvcCl7CisJCXZhciBzdW0gPSB7fSwgb3B0aW9ucyA9IHRoaXMub3B0aW9uczsKKwkJZm9yICh2YXIgeiBpbiBvcHRpb25zLm1vZGlmaWVycyl7CisJCQlpZiAoIW9wdGlvbnMubW9kaWZpZXJzW3pdKSBjb250aW51ZTsKKwkJCXN1bVt6XSA9IGFscGhhW3pdICsgYmV0YVt6XSAqIG9wOworCQl9CisJCXJldHVybiBzdW07CisJfSwKKworCXN0YXJ0OiBmdW5jdGlvbihldmVudCl7CisJCWlmICh0aGlzLm9wdGlvbnMudW5EcmFnZ2FibGVUYWdzLmNvbnRhaW5zKGV2ZW50LnRhcmdldC5nZXQoJ3RhZycpKSkgcmV0dXJuOworCisJCXZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zOworCisJCWlmIChldmVudC5yaWdodENsaWNrKSByZXR1cm47CisKKwkJaWYgKG9wdGlvbnMucHJldmVudERlZmF1bHQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisJCWlmIChvcHRpb25zLnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisJCXRoaXMuY29tcGVuc2F0ZVNjcm9sbC5zdGFydCA9IHRoaXMuY29tcGVuc2F0ZVNjcm9sbC5sYXN0ID0gdGhpcy5vZmZzZXRQYXJlbnQuZ2V0U2Nyb2xsKCk7CisJCXRoaXMuY29tcGVuc2F0ZVNjcm9sbC5kaWZmID0ge3g6IDAsIHk6IDB9OworCQl0aGlzLm1vdXNlLnN0YXJ0ID0gZXZlbnQucGFnZTsKKwkJdGhpcy5maXJlRXZlbnQoJ2JlZm9yZVN0YXJ0JywgdGhpcy5lbGVtZW50KTsKKworCQl2YXIgbGltaXQgPSBvcHRpb25zLmxpbWl0OworCQl0aGlzLmxpbWl0ID0ge3g6IFtdLCB5OiBbXX07CisKKwkJdmFyIHosIGNvb3JkaW5hdGVzLCBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCA9PSB3aW5kb3cgPyBudWxsIDogdGhpcy5vZmZzZXRQYXJlbnQ7CisJCWZvciAoeiBpbiBvcHRpb25zLm1vZGlmaWVycyl7CisJCQlpZiAoIW9wdGlvbnMubW9kaWZpZXJzW3pdKSBjb250aW51ZTsKKworCQkJdmFyIHN0eWxlID0gdGhpcy5lbGVtZW50LmdldFN0eWxlKG9wdGlvbnMubW9kaWZpZXJzW3pdKTsKKworCQkJLy8gU29tZSBicm93c2VycyAoSUUgYW5kIE9wZXJhKSBkb24ndCBhbHdheXMgcmV0dXJuIHBpeGVscy4KKwkJCWlmIChzdHlsZSAmJiAhc3R5bGUubWF0Y2goL3B4JC8pKXsKKwkJCQlpZiAoIWNvb3JkaW5hdGVzKSBjb29yZGluYXRlcyA9IHRoaXMuZWxlbWVudC5nZXRDb29yZGluYXRlcyhvZmZzZXRQYXJlbnQpOworCQkJCXN0eWxlID0gY29vcmRpbmF0ZXNbb3B0aW9ucy5tb2RpZmllcnNbel1dOworCQkJfQorCisJCQlpZiAob3B0aW9ucy5zdHlsZSkgdGhpcy52YWx1ZS5ub3dbel0gPSAoc3R5bGUgfHwgMCkudG9JbnQoKTsKKwkJCWVsc2UgdGhpcy52YWx1ZS5ub3dbel0gPSB0aGlzLmVsZW1lbnRbb3B0aW9ucy5tb2RpZmllcnNbel1dOworCisJCQlpZiAob3B0aW9ucy5pbnZlcnQpIHRoaXMudmFsdWUubm93W3pdICo9IC0xOworCisJCQl0aGlzLm1vdXNlLnBvc1t6XSA9IGV2ZW50LnBhZ2Vbel0gLSB0aGlzLnZhbHVlLm5vd1t6XTsKKworCQkJaWYgKGxpbWl0ICYmIGxpbWl0W3pdKXsKKwkJCQl2YXIgaSA9IDI7CisJCQkJd2hpbGUgKGktLSl7CisJCQkJCXZhciBsaW1pdFpJID0gbGltaXRbel1baV07CisJCQkJCWlmIChsaW1pdFpJIHx8IGxpbWl0WkkgPT09IDApIHRoaXMubGltaXRbel1baV0gPSAodHlwZW9mIGxpbWl0WkkgPT0gJ2Z1bmN0aW9uJykgPyBsaW1pdFpJKCkgOiBsaW1pdFpJOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmICh0eXBlT2YodGhpcy5vcHRpb25zLmdyaWQpID09ICdudW1iZXInKSB0aGlzLm9wdGlvbnMuZ3JpZCA9IHsKKwkJCXg6IHRoaXMub3B0aW9ucy5ncmlkLAorCQkJeTogdGhpcy5vcHRpb25zLmdyaWQKKwkJfTsKKworCQl2YXIgZXZlbnRzID0geworCQkJbW91c2Vtb3ZlOiB0aGlzLmJvdW5kLmNoZWNrLAorCQkJbW91c2V1cDogdGhpcy5ib3VuZC5jYW5jZWwsCisJCQl0b3VjaG1vdmU6IHRoaXMuYm91bmQuY2hlY2ssCisJCQl0b3VjaGVuZDogdGhpcy5ib3VuZC5jYW5jZWwKKwkJfTsKKwkJZXZlbnRzW3RoaXMuc2VsZWN0aW9uXSA9IHRoaXMuYm91bmQuZXZlbnRTdG9wOworCQl0aGlzLmRvY3VtZW50LmFkZEV2ZW50cyhldmVudHMpOworCX0sCisKKwljaGVjazogZnVuY3Rpb24oZXZlbnQpeworCQlpZiAodGhpcy5vcHRpb25zLnByZXZlbnREZWZhdWx0KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworCQl2YXIgZGlzdGFuY2UgPSBNYXRoLnJvdW5kKE1hdGguc3FydChNYXRoLnBvdyhldmVudC5wYWdlLnggLSB0aGlzLm1vdXNlLnN0YXJ0LngsIDIpICsgTWF0aC5wb3coZXZlbnQucGFnZS55IC0gdGhpcy5tb3VzZS5zdGFydC55LCAyKSkpOworCQlpZiAoZGlzdGFuY2UgPiB0aGlzLm9wdGlvbnMuc25hcCl7CisJCQl0aGlzLmNhbmNlbCgpOworCQkJdGhpcy5kb2N1bWVudC5hZGRFdmVudHMoeworCQkJCW1vdXNlbW92ZTogdGhpcy5ib3VuZC5kcmFnLAorCQkJCW1vdXNldXA6IHRoaXMuYm91bmQuc3RvcCwKKwkJCQl0b3VjaG1vdmU6IHRoaXMuYm91bmQuZHJhZywKKwkJCQl0b3VjaGVuZDogdGhpcy5ib3VuZC5zdG9wCisJCQl9KTsKKwkJCXRoaXMuZmlyZUV2ZW50KCdzdGFydCcsIFt0aGlzLmVsZW1lbnQsIGV2ZW50XSkuZmlyZUV2ZW50KCdzbmFwJywgdGhpcy5lbGVtZW50KTsKKwkJfQorCX0sCisKKwlkcmFnOiBmdW5jdGlvbihldmVudCl7CisJCXZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zOworCQlpZiAob3B0aW9ucy5wcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKwkJdGhpcy5tb3VzZS5ub3cgPSB0aGlzLnN1bVZhbHVlcyhldmVudC5wYWdlLCB0aGlzLmNvbXBlbnNhdGVTY3JvbGwuZGlmZiwgLTEpOworCisJCXRoaXMucmVuZGVyKG9wdGlvbnMpOworCQl0aGlzLmZpcmVFdmVudCgnZHJhZycsIFt0aGlzLmVsZW1lbnQsIGV2ZW50XSk7CisJfSwKKworCXJlbmRlcjogZnVuY3Rpb24ob3B0aW9ucyl7CisJCWZvciAodmFyIHogaW4gb3B0aW9ucy5tb2RpZmllcnMpeworCQkJaWYgKCFvcHRpb25zLm1vZGlmaWVyc1t6XSkgY29udGludWU7CisJCQl0aGlzLnZhbHVlLm5vd1t6XSA9IHRoaXMubW91c2Uubm93W3pdIC0gdGhpcy5tb3VzZS5wb3Nbel07CisKKwkJCWlmIChvcHRpb25zLmludmVydCkgdGhpcy52YWx1ZS5ub3dbel0gKj0gLTE7CisJCQlpZiAob3B0aW9ucy5saW1pdCAmJiB0aGlzLmxpbWl0W3pdKXsKKwkJCQlpZiAoKHRoaXMubGltaXRbel1bMV0gfHwgdGhpcy5saW1pdFt6XVsxXSA9PT0gMCkgJiYgKHRoaXMudmFsdWUubm93W3pdID4gdGhpcy5saW1pdFt6XVsxXSkpeworCQkJCQl0aGlzLnZhbHVlLm5vd1t6XSA9IHRoaXMubGltaXRbel1bMV07CisJCQkJfSBlbHNlIGlmICgodGhpcy5saW1pdFt6XVswXSB8fCB0aGlzLmxpbWl0W3pdWzBdID09PSAwKSAmJiAodGhpcy52YWx1ZS5ub3dbel0gPCB0aGlzLmxpbWl0W3pdWzBdKSl7CisJCQkJCXRoaXMudmFsdWUubm93W3pdID0gdGhpcy5saW1pdFt6XVswXTsKKwkJCQl9CisJCQl9CisJCQlpZiAob3B0aW9ucy5ncmlkW3pdKSB0aGlzLnZhbHVlLm5vd1t6XSAtPSAoKHRoaXMudmFsdWUubm93W3pdIC0gKHRoaXMubGltaXRbel1bMF18fDApKSAlIG9wdGlvbnMuZ3JpZFt6XSk7CisJCQlpZiAob3B0aW9ucy5zdHlsZSkgdGhpcy5lbGVtZW50LnNldFN0eWxlKG9wdGlvbnMubW9kaWZpZXJzW3pdLCB0aGlzLnZhbHVlLm5vd1t6XSArIG9wdGlvbnMudW5pdCk7CisJCQllbHNlIHRoaXMuZWxlbWVudFtvcHRpb25zLm1vZGlmaWVyc1t6XV0gPSB0aGlzLnZhbHVlLm5vd1t6XTsKKwkJfQorCX0sCisKKwljYW5jZWw6IGZ1bmN0aW9uKGV2ZW50KXsKKwkJdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudHMoeworCQkJbW91c2Vtb3ZlOiB0aGlzLmJvdW5kLmNoZWNrLAorCQkJbW91c2V1cDogdGhpcy5ib3VuZC5jYW5jZWwsCisJCQl0b3VjaG1vdmU6IHRoaXMuYm91bmQuY2hlY2ssCisJCQl0b3VjaGVuZDogdGhpcy5ib3VuZC5jYW5jZWwKKwkJfSk7CisJCWlmIChldmVudCl7CisJCQl0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50KHRoaXMuc2VsZWN0aW9uLCB0aGlzLmJvdW5kLmV2ZW50U3RvcCk7CisJCQl0aGlzLmZpcmVFdmVudCgnY2FuY2VsJywgdGhpcy5lbGVtZW50KTsKKwkJfQorCX0sCisKKwlzdG9wOiBmdW5jdGlvbihldmVudCl7CisJCXZhciBldmVudHMgPSB7CisJCQltb3VzZW1vdmU6IHRoaXMuYm91bmQuZHJhZywKKwkJCW1vdXNldXA6IHRoaXMuYm91bmQuc3RvcCwKKwkJCXRvdWNobW92ZTogdGhpcy5ib3VuZC5kcmFnLAorCQkJdG91Y2hlbmQ6IHRoaXMuYm91bmQuc3RvcAorCQl9OworCQlldmVudHNbdGhpcy5zZWxlY3Rpb25dID0gdGhpcy5ib3VuZC5ldmVudFN0b3A7CisJCXRoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnRzKGV2ZW50cyk7CisJCXRoaXMubW91c2Uuc3RhcnQgPSBudWxsOworCQlpZiAoZXZlbnQpIHRoaXMuZmlyZUV2ZW50KCdjb21wbGV0ZScsIFt0aGlzLmVsZW1lbnQsIGV2ZW50XSk7CisJfQorCit9KTsKKworfSkoKTsKKworCitFbGVtZW50LmltcGxlbWVudCh7CisKKwltYWtlUmVzaXphYmxlOiBmdW5jdGlvbihvcHRpb25zKXsKKwkJdmFyIGRyYWcgPSBuZXcgRHJhZyh0aGlzLCBPYmplY3QubWVyZ2UoeworCQkJbW9kaWZpZXJzOiB7CisJCQkJeDogJ3dpZHRoJywKKwkJCQl5OiAnaGVpZ2h0JworCQkJfQorCQl9LCBvcHRpb25zKSk7CisKKwkJdGhpcy5zdG9yZSgncmVzaXplcicsIGRyYWcpOworCQlyZXR1cm4gZHJhZy5hZGRFdmVudCgnZHJhZycsIGZ1bmN0aW9uKCl7CisJCQl0aGlzLmZpcmVFdmVudCgncmVzaXplJywgZHJhZyk7CisJCX0uYmluZCh0aGlzKSk7CisJfQorCit9KTsKKworLyoKKy0tLQorCitzY3JpcHQ6IERyYWcuTW92ZS5qcworCituYW1lOiBEcmFnLk1vdmUKKworZGVzY3JpcHRpb246IEEgRHJhZyBleHRlbnNpb24gdGhhdCBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgY29uc3RyYWluaW5nIG9mIGRyYWdnYWJsZXMgdG8gY29udGFpbmVycyBhbmQgZHJvcHBhYmxlcy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBWYWxlcmlvIFByb2lldHRpCisgIC0gVG9tIE9jY2hpbm5vCisgIC0gSmFuIEthc3NlbnMKKyAgLSBBYXJvbiBOZXd0b24KKyAgLSBTY290dCBLeWxlCisKK3JlcXVpcmVzOgorICAtIENvcmUvRWxlbWVudC5EaW1lbnNpb25zCisgIC0gRHJhZworCitwcm92aWRlczogW0RyYWcuTW92ZV0KKworLi4uCisqLworCitEcmFnLk1vdmUgPSBuZXcgQ2xhc3MoeworCisJRXh0ZW5kczogRHJhZywKKworCW9wdGlvbnM6IHsvKgorCQlvbkVudGVyOiBmdW5jdGlvbih0aGlzRWxlbWVudCwgb3ZlcmVkKXt9LAorCQlvbkxlYXZlOiBmdW5jdGlvbih0aGlzRWxlbWVudCwgb3ZlcmVkKXt9LAorCQlvbkRyb3A6IGZ1bmN0aW9uKHRoaXNFbGVtZW50LCBvdmVyZWQsIGV2ZW50KXt9LCovCisJCWRyb3BwYWJsZXM6IFtdLAorCQljb250YWluZXI6IGZhbHNlLAorCQlwcmVjYWxjdWxhdGU6IGZhbHNlLAorCQlpbmNsdWRlTWFyZ2luczogdHJ1ZSwKKwkJY2hlY2tEcm9wcGFibGVzOiB0cnVlCisJfSwKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpeworCQl0aGlzLnBhcmVudChlbGVtZW50LCBvcHRpb25zKTsKKwkJZWxlbWVudCA9IHRoaXMuZWxlbWVudDsKKworCQl0aGlzLmRyb3BwYWJsZXMgPSAkJCh0aGlzLm9wdGlvbnMuZHJvcHBhYmxlcyk7CisJCXRoaXMuc2V0Q29udGFpbmVyKHRoaXMub3B0aW9ucy5jb250YWluZXIpOworCisJCWlmICh0aGlzLm9wdGlvbnMuc3R5bGUpeworCQkJaWYgKHRoaXMub3B0aW9ucy5tb2RpZmllcnMueCA9PSAnbGVmdCcgJiYgdGhpcy5vcHRpb25zLm1vZGlmaWVycy55ID09ICd0b3AnKXsKKwkJCQl2YXIgcGFyZW50ID0gZWxlbWVudC5nZXRPZmZzZXRQYXJlbnQoKSwKKwkJCQkJc3R5bGVzID0gZWxlbWVudC5nZXRTdHlsZXMoJ2xlZnQnLCAndG9wJyk7CisJCQkJaWYgKHBhcmVudCAmJiAoc3R5bGVzLmxlZnQgPT0gJ2F1dG8nIHx8IHN0eWxlcy50b3AgPT0gJ2F1dG8nKSl7CisJCQkJCWVsZW1lbnQuc2V0UG9zaXRpb24oZWxlbWVudC5nZXRQb3NpdGlvbihwYXJlbnQpKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChlbGVtZW50LmdldFN0eWxlKCdwb3NpdGlvbicpID09ICdzdGF0aWMnKSBlbGVtZW50LnNldFN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpOworCQl9CisKKwkJdGhpcy5hZGRFdmVudCgnc3RhcnQnLCB0aGlzLmNoZWNrRHJvcHBhYmxlcywgdHJ1ZSk7CisJCXRoaXMub3ZlcmVkID0gbnVsbDsKKwl9LAorCisJc2V0Q29udGFpbmVyOiBmdW5jdGlvbihjb250YWluZXIpeworCQl0aGlzLmNvbnRhaW5lciA9IGRvY3VtZW50LmlkKGNvbnRhaW5lcik7CisJCWlmICh0aGlzLmNvbnRhaW5lciAmJiB0eXBlT2YodGhpcy5jb250YWluZXIpICE9ICdlbGVtZW50Jyl7CisJCQl0aGlzLmNvbnRhaW5lciA9IGRvY3VtZW50LmlkKHRoaXMuY29udGFpbmVyLmdldERvY3VtZW50KCkuYm9keSk7CisJCX0KKwl9LAorCisJc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50KXsKKwkJaWYgKHRoaXMuY29udGFpbmVyKSB0aGlzLm9wdGlvbnMubGltaXQgPSB0aGlzLmNhbGN1bGF0ZUxpbWl0KCk7CisKKwkJaWYgKHRoaXMub3B0aW9ucy5wcmVjYWxjdWxhdGUpeworCQkJdGhpcy5wb3NpdGlvbnMgPSB0aGlzLmRyb3BwYWJsZXMubWFwKGZ1bmN0aW9uKGVsKXsKKwkJCQlyZXR1cm4gZWwuZ2V0Q29vcmRpbmF0ZXMoKTsKKwkJCX0pOworCQl9CisKKwkJdGhpcy5wYXJlbnQoZXZlbnQpOworCX0sCisKKwljYWxjdWxhdGVMaW1pdDogZnVuY3Rpb24oKXsKKwkJdmFyIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQsCisJCQljb250YWluZXIgPSB0aGlzLmNvbnRhaW5lciwKKworCQkJb2Zmc2V0UGFyZW50ID0gZG9jdW1lbnQuaWQoZWxlbWVudC5nZXRPZmZzZXRQYXJlbnQoKSkgfHwgZG9jdW1lbnQuYm9keSwKKwkJCWNvbnRhaW5lckNvb3JkaW5hdGVzID0gY29udGFpbmVyLmdldENvb3JkaW5hdGVzKG9mZnNldFBhcmVudCksCisJCQllbGVtZW50TWFyZ2luID0ge30sCisJCQllbGVtZW50Qm9yZGVyID0ge30sCisJCQljb250YWluZXJNYXJnaW4gPSB7fSwKKwkJCWNvbnRhaW5lckJvcmRlciA9IHt9LAorCQkJb2Zmc2V0UGFyZW50UGFkZGluZyA9IHt9LAorCQkJb2Zmc2V0U2Nyb2xsID0gb2Zmc2V0UGFyZW50LmdldFNjcm9sbCgpOworCisJCVsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J10uZWFjaChmdW5jdGlvbihwYWQpeworCQkJZWxlbWVudE1hcmdpbltwYWRdID0gZWxlbWVudC5nZXRTdHlsZSgnbWFyZ2luLScgKyBwYWQpLnRvSW50KCk7CisJCQllbGVtZW50Qm9yZGVyW3BhZF0gPSBlbGVtZW50LmdldFN0eWxlKCdib3JkZXItJyArIHBhZCkudG9JbnQoKTsKKwkJCWNvbnRhaW5lck1hcmdpbltwYWRdID0gY29udGFpbmVyLmdldFN0eWxlKCdtYXJnaW4tJyArIHBhZCkudG9JbnQoKTsKKwkJCWNvbnRhaW5lckJvcmRlcltwYWRdID0gY29udGFpbmVyLmdldFN0eWxlKCdib3JkZXItJyArIHBhZCkudG9JbnQoKTsKKwkJCW9mZnNldFBhcmVudFBhZGRpbmdbcGFkXSA9IG9mZnNldFBhcmVudC5nZXRTdHlsZSgncGFkZGluZy0nICsgcGFkKS50b0ludCgpOworCQl9LCB0aGlzKTsKKworCQl2YXIgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoICsgZWxlbWVudE1hcmdpbi5sZWZ0ICsgZWxlbWVudE1hcmdpbi5yaWdodCwKKwkJCWhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgZWxlbWVudE1hcmdpbi50b3AgKyBlbGVtZW50TWFyZ2luLmJvdHRvbSwKKwkJCWxlZnQgPSAwICsgb2Zmc2V0U2Nyb2xsLngsCisJCQl0b3AgPSAwICsgb2Zmc2V0U2Nyb2xsLnksCisJCQlyaWdodCA9IGNvbnRhaW5lckNvb3JkaW5hdGVzLnJpZ2h0IC0gY29udGFpbmVyQm9yZGVyLnJpZ2h0IC0gd2lkdGggKyBvZmZzZXRTY3JvbGwueCwKKwkJCWJvdHRvbSA9IGNvbnRhaW5lckNvb3JkaW5hdGVzLmJvdHRvbSAtIGNvbnRhaW5lckJvcmRlci5ib3R0b20gLSBoZWlnaHQgKyBvZmZzZXRTY3JvbGwueTsKKworCQlpZiAodGhpcy5vcHRpb25zLmluY2x1ZGVNYXJnaW5zKXsKKwkJCWxlZnQgKz0gZWxlbWVudE1hcmdpbi5sZWZ0OworCQkJdG9wICs9IGVsZW1lbnRNYXJnaW4udG9wOworCQl9IGVsc2UgeworCQkJcmlnaHQgKz0gZWxlbWVudE1hcmdpbi5yaWdodDsKKwkJCWJvdHRvbSArPSBlbGVtZW50TWFyZ2luLmJvdHRvbTsKKwkJfQorCisJCWlmIChlbGVtZW50LmdldFN0eWxlKCdwb3NpdGlvbicpID09ICdyZWxhdGl2ZScpeworCQkJdmFyIGNvb3JkcyA9IGVsZW1lbnQuZ2V0Q29vcmRpbmF0ZXMob2Zmc2V0UGFyZW50KTsKKwkJCWNvb3Jkcy5sZWZ0IC09IGVsZW1lbnQuZ2V0U3R5bGUoJ2xlZnQnKS50b0ludCgpOworCQkJY29vcmRzLnRvcCAtPSBlbGVtZW50LmdldFN0eWxlKCd0b3AnKS50b0ludCgpOworCisJCQlsZWZ0IC09IGNvb3Jkcy5sZWZ0OworCQkJdG9wIC09IGNvb3Jkcy50b3A7CisJCQlpZiAoY29udGFpbmVyLmdldFN0eWxlKCdwb3NpdGlvbicpICE9ICdyZWxhdGl2ZScpeworCQkJCWxlZnQgKz0gY29udGFpbmVyQm9yZGVyLmxlZnQ7CisJCQkJdG9wICs9IGNvbnRhaW5lckJvcmRlci50b3A7CisJCQl9CisJCQlyaWdodCArPSBlbGVtZW50TWFyZ2luLmxlZnQgLSBjb29yZHMubGVmdDsKKwkJCWJvdHRvbSArPSBlbGVtZW50TWFyZ2luLnRvcCAtIGNvb3Jkcy50b3A7CisKKwkJCWlmIChjb250YWluZXIgIT0gb2Zmc2V0UGFyZW50KXsKKwkJCQlsZWZ0ICs9IGNvbnRhaW5lck1hcmdpbi5sZWZ0ICsgb2Zmc2V0UGFyZW50UGFkZGluZy5sZWZ0OworCQkJCWlmICghb2Zmc2V0UGFyZW50UGFkZGluZy5sZWZ0ICYmIGxlZnQgPCAwKSBsZWZ0ID0gMDsKKwkJCQl0b3AgKz0gb2Zmc2V0UGFyZW50ID09IGRvY3VtZW50LmJvZHkgPyAwIDogY29udGFpbmVyTWFyZ2luLnRvcCArIG9mZnNldFBhcmVudFBhZGRpbmcudG9wOworCQkJCWlmICghb2Zmc2V0UGFyZW50UGFkZGluZy50b3AgJiYgdG9wIDwgMCkgdG9wID0gMDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWxlZnQgLT0gZWxlbWVudE1hcmdpbi5sZWZ0OworCQkJdG9wIC09IGVsZW1lbnRNYXJnaW4udG9wOworCQkJaWYgKGNvbnRhaW5lciAhPSBvZmZzZXRQYXJlbnQpeworCQkJCWxlZnQgKz0gY29udGFpbmVyQ29vcmRpbmF0ZXMubGVmdCArIGNvbnRhaW5lckJvcmRlci5sZWZ0OworCQkJCXRvcCArPSBjb250YWluZXJDb29yZGluYXRlcy50b3AgKyBjb250YWluZXJCb3JkZXIudG9wOworCQkJfQorCQl9CisKKwkJcmV0dXJuIHsKKwkJCXg6IFtsZWZ0LCByaWdodF0sCisJCQl5OiBbdG9wLCBib3R0b21dCisJCX07CisJfSwKKworCWdldERyb3BwYWJsZUNvb3JkaW5hdGVzOiBmdW5jdGlvbihlbGVtZW50KXsKKwkJdmFyIHBvc2l0aW9uID0gZWxlbWVudC5nZXRDb29yZGluYXRlcygpOworCQlpZiAoZWxlbWVudC5nZXRTdHlsZSgncG9zaXRpb24nKSA9PSAnZml4ZWQnKXsKKwkJCXZhciBzY3JvbGwgPSB3aW5kb3cuZ2V0U2Nyb2xsKCk7CisJCQlwb3NpdGlvbi5sZWZ0ICs9IHNjcm9sbC54OworCQkJcG9zaXRpb24ucmlnaHQgKz0gc2Nyb2xsLng7CisJCQlwb3NpdGlvbi50b3AgKz0gc2Nyb2xsLnk7CisJCQlwb3NpdGlvbi5ib3R0b20gKz0gc2Nyb2xsLnk7CisJCX0KKwkJcmV0dXJuIHBvc2l0aW9uOworCX0sCisKKwljaGVja0Ryb3BwYWJsZXM6IGZ1bmN0aW9uKCl7CisJCXZhciBvdmVyZWQgPSB0aGlzLmRyb3BwYWJsZXMuZmlsdGVyKGZ1bmN0aW9uKGVsLCBpKXsKKwkJCWVsID0gdGhpcy5wb3NpdGlvbnMgPyB0aGlzLnBvc2l0aW9uc1tpXSA6IHRoaXMuZ2V0RHJvcHBhYmxlQ29vcmRpbmF0ZXMoZWwpOworCQkJdmFyIG5vdyA9IHRoaXMubW91c2Uubm93OworCQkJcmV0dXJuIChub3cueCA+IGVsLmxlZnQgJiYgbm93LnggPCBlbC5yaWdodCAmJiBub3cueSA8IGVsLmJvdHRvbSAmJiBub3cueSA+IGVsLnRvcCk7CisJCX0sIHRoaXMpLmdldExhc3QoKTsKKworCQlpZiAodGhpcy5vdmVyZWQgIT0gb3ZlcmVkKXsKKwkJCWlmICh0aGlzLm92ZXJlZCkgdGhpcy5maXJlRXZlbnQoJ2xlYXZlJywgW3RoaXMuZWxlbWVudCwgdGhpcy5vdmVyZWRdKTsKKwkJCWlmIChvdmVyZWQpIHRoaXMuZmlyZUV2ZW50KCdlbnRlcicsIFt0aGlzLmVsZW1lbnQsIG92ZXJlZF0pOworCQkJdGhpcy5vdmVyZWQgPSBvdmVyZWQ7CisJCX0KKwl9LAorCisJZHJhZzogZnVuY3Rpb24oZXZlbnQpeworCQl0aGlzLnBhcmVudChldmVudCk7CisJCWlmICh0aGlzLm9wdGlvbnMuY2hlY2tEcm9wcGFibGVzICYmIHRoaXMuZHJvcHBhYmxlcy5sZW5ndGgpIHRoaXMuY2hlY2tEcm9wcGFibGVzKCk7CisJfSwKKworCXN0b3A6IGZ1bmN0aW9uKGV2ZW50KXsKKwkJdGhpcy5jaGVja0Ryb3BwYWJsZXMoKTsKKwkJdGhpcy5maXJlRXZlbnQoJ2Ryb3AnLCBbdGhpcy5lbGVtZW50LCB0aGlzLm92ZXJlZCwgZXZlbnRdKTsKKwkJdGhpcy5vdmVyZWQgPSBudWxsOworCQlyZXR1cm4gdGhpcy5wYXJlbnQoZXZlbnQpOworCX0KKworfSk7CisKK0VsZW1lbnQuaW1wbGVtZW50KHsKKworCW1ha2VEcmFnZ2FibGU6IGZ1bmN0aW9uKG9wdGlvbnMpeworCQl2YXIgZHJhZyA9IG5ldyBEcmFnLk1vdmUodGhpcywgb3B0aW9ucyk7CisJCXRoaXMuc3RvcmUoJ2RyYWdnZXInLCBkcmFnKTsKKwkJcmV0dXJuIGRyYWc7CisJfQorCit9KTsKKworLyoKKy0tLQorCitzY3JpcHQ6IEVsZW1lbnQuTWVhc3VyZS5qcworCituYW1lOiBFbGVtZW50Lk1lYXN1cmUKKworZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIEVsZW1lbnQgbmF0aXZlIG9iamVjdCB0byBpbmNsdWRlIG1ldGhvZHMgdXNlZnVsIGluIG1lYXN1cmluZyBkaW1lbnNpb25zLgorCitjcmVkaXRzOiAiRWxlbWVudC5tZWFzdXJlIC8gLmV4cG9zZSBtZXRob2RzIGJ5IERhbmllbCBTdGVpZ2Vyd2FsZCBMaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4gQ29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDggRGFuaWVsIFN0ZWlnZXJ3YWxkLCBkYW5pZWwuc3RlaWdlcndhbGQuY3oiCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisKK3JlcXVpcmVzOgorICAtIENvcmUvRWxlbWVudC5TdHlsZQorICAtIENvcmUvRWxlbWVudC5EaW1lbnNpb25zCisgIC0gTW9vVG9vbHMuTW9yZQorCitwcm92aWRlczogW0VsZW1lbnQuTWVhc3VyZV0KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIGdldFN0eWxlc0xpc3QgPSBmdW5jdGlvbihzdHlsZXMsIHBsYW5lcyl7CisJdmFyIGxpc3QgPSBbXTsKKwlPYmplY3QuZWFjaChwbGFuZXMsIGZ1bmN0aW9uKGRpcmVjdGlvbnMpeworCQlPYmplY3QuZWFjaChkaXJlY3Rpb25zLCBmdW5jdGlvbihlZGdlKXsKKwkJCXN0eWxlcy5lYWNoKGZ1bmN0aW9uKHN0eWxlKXsKKwkJCQlsaXN0LnB1c2goc3R5bGUgKyAnLScgKyBlZGdlICsgKHN0eWxlID09ICdib3JkZXInID8gJy13aWR0aCcgOiAnJykpOworCQkJfSk7CisJCX0pOworCX0pOworCXJldHVybiBsaXN0OworfTsKKwordmFyIGNhbGN1bGF0ZUVkZ2VTaXplID0gZnVuY3Rpb24oZWRnZSwgc3R5bGVzKXsKKwl2YXIgdG90YWwgPSAwOworCU9iamVjdC5lYWNoKHN0eWxlcywgZnVuY3Rpb24odmFsdWUsIHN0eWxlKXsKKwkJaWYgKHN0eWxlLnRlc3QoZWRnZSkpIHRvdGFsID0gdG90YWwgKyB2YWx1ZS50b0ludCgpOworCX0pOworCXJldHVybiB0b3RhbDsKK307CisKK3ZhciBpc1Zpc2libGUgPSBmdW5jdGlvbihlbCl7CisJcmV0dXJuICEhKCFlbCB8fCBlbC5vZmZzZXRIZWlnaHQgfHwgZWwub2Zmc2V0V2lkdGgpOworfTsKKworCitFbGVtZW50LmltcGxlbWVudCh7CisKKwltZWFzdXJlOiBmdW5jdGlvbihmbil7CisJCWlmIChpc1Zpc2libGUodGhpcykpIHJldHVybiBmbi5jYWxsKHRoaXMpOworCQl2YXIgcGFyZW50ID0gdGhpcy5nZXRQYXJlbnQoKSwKKwkJCXRvTWVhc3VyZSA9IFtdOworCQl3aGlsZSAoIWlzVmlzaWJsZShwYXJlbnQpICYmIHBhcmVudCAhPSBkb2N1bWVudC5ib2R5KXsKKwkJCXRvTWVhc3VyZS5wdXNoKHBhcmVudC5leHBvc2UoKSk7CisJCQlwYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50KCk7CisJCX0KKwkJdmFyIHJlc3RvcmUgPSB0aGlzLmV4cG9zZSgpLAorCQkJcmVzdWx0ID0gZm4uY2FsbCh0aGlzKTsKKwkJcmVzdG9yZSgpOworCQl0b01lYXN1cmUuZWFjaChmdW5jdGlvbihyZXN0b3JlKXsKKwkJCXJlc3RvcmUoKTsKKwkJfSk7CisJCXJldHVybiByZXN1bHQ7CisJfSwKKworCWV4cG9zZTogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMuZ2V0U3R5bGUoJ2Rpc3BsYXknKSAhPSAnbm9uZScpIHJldHVybiBmdW5jdGlvbigpe307CisJCXZhciBiZWZvcmUgPSB0aGlzLnN0eWxlLmNzc1RleHQ7CisJCXRoaXMuc2V0U3R5bGVzKHsKKwkJCWRpc3BsYXk6ICdibG9jaycsCisJCQlwb3NpdGlvbjogJ2Fic29sdXRlJywKKwkJCXZpc2liaWxpdHk6ICdoaWRkZW4nCisJCX0pOworCQlyZXR1cm4gZnVuY3Rpb24oKXsKKwkJCXRoaXMuc3R5bGUuY3NzVGV4dCA9IGJlZm9yZTsKKwkJfS5iaW5kKHRoaXMpOworCX0sCisKKwlnZXREaW1lbnNpb25zOiBmdW5jdGlvbihvcHRpb25zKXsKKwkJb3B0aW9ucyA9IE9iamVjdC5tZXJnZSh7Y29tcHV0ZVNpemU6IGZhbHNlfSwgb3B0aW9ucyk7CisJCXZhciBkaW0gPSB7eDogMCwgeTogMH07CisKKwkJdmFyIGdldFNpemUgPSBmdW5jdGlvbihlbCwgb3B0aW9ucyl7CisJCQlyZXR1cm4gKG9wdGlvbnMuY29tcHV0ZVNpemUpID8gZWwuZ2V0Q29tcHV0ZWRTaXplKG9wdGlvbnMpIDogZWwuZ2V0U2l6ZSgpOworCQl9OworCisJCXZhciBwYXJlbnQgPSB0aGlzLmdldFBhcmVudCgnYm9keScpOworCisJCWlmIChwYXJlbnQgJiYgdGhpcy5nZXRTdHlsZSgnZGlzcGxheScpID09ICdub25lJyl7CisJCQlkaW0gPSB0aGlzLm1lYXN1cmUoZnVuY3Rpb24oKXsKKwkJCQlyZXR1cm4gZ2V0U2l6ZSh0aGlzLCBvcHRpb25zKTsKKwkJCX0pOworCQl9IGVsc2UgaWYgKHBhcmVudCl7CisJCQl0cnkgeyAvL3NhZmFyaSBzb21ldGltZXMgY3Jhc2hlcyBoZXJlLCBzbyBjYXRjaCBpdAorCQkJCWRpbSA9IGdldFNpemUodGhpcywgb3B0aW9ucyk7CisJCQl9IGNhdGNoIChlKXt9CisJCX0KKworCQlyZXR1cm4gT2JqZWN0LmFwcGVuZChkaW0sIChkaW0ueCB8fCBkaW0ueCA9PT0gMCkgPyB7CisJCQl3aWR0aDogZGltLngsCisJCQloZWlnaHQ6IGRpbS55CisJCX0gOiB7CisJCQl4OiBkaW0ud2lkdGgsCisJCQl5OiBkaW0uaGVpZ2h0CisJCX0pOworCX0sCisKKwlnZXRDb21wdXRlZFNpemU6IGZ1bmN0aW9uKG9wdGlvbnMpeworCQkKKworCQlvcHRpb25zID0gT2JqZWN0Lm1lcmdlKHsKKwkJCXN0eWxlczogWydwYWRkaW5nJywnYm9yZGVyJ10sCisJCQlwbGFuZXM6IHsKKwkJCQloZWlnaHQ6IFsndG9wJywnYm90dG9tJ10sCisJCQkJd2lkdGg6IFsnbGVmdCcsJ3JpZ2h0J10KKwkJCX0sCisJCQltb2RlOiAnYm90aCcKKwkJfSwgb3B0aW9ucyk7CisKKwkJdmFyIHN0eWxlcyA9IHt9LAorCQkJc2l6ZSA9IHt3aWR0aDogMCwgaGVpZ2h0OiAwfSwKKwkJCWRpbWVuc2lvbnM7CisKKwkJaWYgKG9wdGlvbnMubW9kZSA9PSAndmVydGljYWwnKXsKKwkJCWRlbGV0ZSBzaXplLndpZHRoOworCQkJZGVsZXRlIG9wdGlvbnMucGxhbmVzLndpZHRoOworCQl9IGVsc2UgaWYgKG9wdGlvbnMubW9kZSA9PSAnaG9yaXpvbnRhbCcpeworCQkJZGVsZXRlIHNpemUuaGVpZ2h0OworCQkJZGVsZXRlIG9wdGlvbnMucGxhbmVzLmhlaWdodDsKKwkJfQorCisJCWdldFN0eWxlc0xpc3Qob3B0aW9ucy5zdHlsZXMsIG9wdGlvbnMucGxhbmVzKS5lYWNoKGZ1bmN0aW9uKHN0eWxlKXsKKwkJCXN0eWxlc1tzdHlsZV0gPSB0aGlzLmdldFN0eWxlKHN0eWxlKS50b0ludCgpOworCQl9LCB0aGlzKTsKKworCQlPYmplY3QuZWFjaChvcHRpb25zLnBsYW5lcywgZnVuY3Rpb24oZWRnZXMsIHBsYW5lKXsKKworCQkJdmFyIGNhcGl0YWxpemVkID0gcGxhbmUuY2FwaXRhbGl6ZSgpLAorCQkJCXN0eWxlID0gdGhpcy5nZXRTdHlsZShwbGFuZSk7CisKKwkJCWlmIChzdHlsZSA9PSAnYXV0bycgJiYgIWRpbWVuc2lvbnMpIGRpbWVuc2lvbnMgPSB0aGlzLmdldERpbWVuc2lvbnMoKTsKKworCQkJc3R5bGUgPSBzdHlsZXNbcGxhbmVdID0gKHN0eWxlID09ICdhdXRvJykgPyBkaW1lbnNpb25zW3BsYW5lXSA6IHN0eWxlLnRvSW50KCk7CisJCQlzaXplWyd0b3RhbCcgKyBjYXBpdGFsaXplZF0gPSBzdHlsZTsKKworCQkJZWRnZXMuZWFjaChmdW5jdGlvbihlZGdlKXsKKwkJCQl2YXIgZWRnZXNpemUgPSBjYWxjdWxhdGVFZGdlU2l6ZShlZGdlLCBzdHlsZXMpOworCQkJCXNpemVbJ2NvbXB1dGVkJyArIGVkZ2UuY2FwaXRhbGl6ZSgpXSA9IGVkZ2VzaXplOworCQkJCXNpemVbJ3RvdGFsJyArIGNhcGl0YWxpemVkXSArPSBlZGdlc2l6ZTsKKwkJCX0pOworCisJCX0sIHRoaXMpOworCisJCXJldHVybiBPYmplY3QuYXBwZW5kKHNpemUsIHN0eWxlcyk7CisJfQorCit9KTsKKworfSkoKTsKKworLyoKKy0tLQorCitzY3JpcHQ6IFNsaWRlci5qcworCituYW1lOiBTbGlkZXIKKworZGVzY3JpcHRpb246IENsYXNzIGZvciBjcmVhdGluZyBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzbGlkZXIgY29udHJvbHMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gVmFsZXJpbyBQcm9pZXR0aQorCityZXF1aXJlczoKKyAgLSBDb3JlL0VsZW1lbnQuRGltZW5zaW9ucworICAtIENvcmUvTnVtYmVyCisgIC0gQ2xhc3MuQmluZHMKKyAgLSBEcmFnCisgIC0gRWxlbWVudC5NZWFzdXJlCisKK3Byb3ZpZGVzOiBbU2xpZGVyXQorCisuLi4KKyovCisoZnVuY3Rpb24oKXsKKwordmFyIFNsaWRlciA9IHRoaXMuU2xpZGVyID0gbmV3IENsYXNzKHsKKworCUltcGxlbWVudHM6IFtFdmVudHMsIE9wdGlvbnNdLAorCisJQmluZHM6IFsnY2xpY2tlZEVsZW1lbnQnLCAnZHJhZ2dlZEtub2InLCAnc2Nyb2xsZWRFbGVtZW50J10sCisKKwlvcHRpb25zOiB7LyoKKwkJb25UaWNrOiBmdW5jdGlvbihpbnRQb3NpdGlvbil7fSwKKwkJb25Nb3ZlOiBmdW5jdGlvbigpe30sCisJCW9uQ2hhbmdlOiBmdW5jdGlvbihpbnRTdGVwKXt9LAorCQlvbkNvbXBsZXRlOiBmdW5jdGlvbihzdHJTdGVwKXt9LCovCisJCW9uVGljazogZnVuY3Rpb24ocG9zaXRpb24peworCQkJdGhpcy5zZXRLbm9iUG9zaXRpb24ocG9zaXRpb24pOworCQl9LAorCQlpbml0aWFsU3RlcDogMCwKKwkJc25hcDogZmFsc2UsCisJCW9mZnNldDogMCwKKwkJcmFuZ2U6IGZhbHNlLAorCQl3aGVlbDogZmFsc2UsCisJCXN0ZXBzOiAxMDAsCisJCW1vZGU6ICdob3Jpem9udGFsJworCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBrbm9iLCBvcHRpb25zKXsKKwkJdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpOworCQlvcHRpb25zID0gdGhpcy5vcHRpb25zOworCQl0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5pZChlbGVtZW50KTsKKwkJa25vYiA9IHRoaXMua25vYiA9IGRvY3VtZW50LmlkKGtub2IpOworCQl0aGlzLnByZXZpb3VzQ2hhbmdlID0gdGhpcy5wcmV2aW91c0VuZCA9IHRoaXMuc3RlcCA9IG9wdGlvbnMuaW5pdGlhbFN0ZXAgPyBvcHRpb25zLmluaXRpYWxTdGVwIDogb3B0aW9ucy5yYW5nZSA/IG9wdGlvbnMucmFuZ2VbMF0gOiAwOworCisJCXZhciBsaW1pdCA9IHt9LAorCQkJbW9kaWZpZXJzID0ge3g6IGZhbHNlLCB5OiBmYWxzZX07CisKKwkJc3dpdGNoIChvcHRpb25zLm1vZGUpeworCQkJY2FzZSAndmVydGljYWwnOgorCQkJCXRoaXMuYXhpcyA9ICd5JzsKKwkJCQl0aGlzLnByb3BlcnR5ID0gJ3RvcCc7CisJCQkJdGhpcy5vZmZzZXQgPSAnb2Zmc2V0SGVpZ2h0JzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2hvcml6b250YWwnOgorCQkJCXRoaXMuYXhpcyA9ICd4JzsKKwkJCQl0aGlzLnByb3BlcnR5ID0gJ2xlZnQnOworCQkJCXRoaXMub2Zmc2V0ID0gJ29mZnNldFdpZHRoJzsKKwkJfQorCisJCXRoaXMuc2V0U2xpZGVyRGltZW5zaW9ucygpOworCQl0aGlzLnNldFJhbmdlKG9wdGlvbnMucmFuZ2UsIG51bGwsIHRydWUpOworCisJCWlmIChrbm9iLmdldFN0eWxlKCdwb3NpdGlvbicpID09ICdzdGF0aWMnKSBrbm9iLnNldFN0eWxlKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpOworCQlrbm9iLnNldFN0eWxlKHRoaXMucHJvcGVydHksIC1vcHRpb25zLm9mZnNldCk7CisJCW1vZGlmaWVyc1t0aGlzLmF4aXNdID0gdGhpcy5wcm9wZXJ0eTsKKwkJbGltaXRbdGhpcy5heGlzXSA9IFstb3B0aW9ucy5vZmZzZXQsIHRoaXMuZnVsbCAtIG9wdGlvbnMub2Zmc2V0XTsKKworCQl2YXIgZHJhZ09wdGlvbnMgPSB7CisJCQlzbmFwOiAwLAorCQkJbGltaXQ6IGxpbWl0LAorCQkJbW9kaWZpZXJzOiBtb2RpZmllcnMsCisJCQlvbkRyYWc6IHRoaXMuZHJhZ2dlZEtub2IsCisJCQlvblN0YXJ0OiB0aGlzLmRyYWdnZWRLbm9iLAorCQkJb25CZWZvcmVTdGFydDogKGZ1bmN0aW9uKCl7CisJCQkJdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTsKKwkJCX0pLmJpbmQodGhpcyksCisJCQlvbkNhbmNlbDogZnVuY3Rpb24oKXsKKwkJCQl0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTsKKwkJCX0uYmluZCh0aGlzKSwKKwkJCW9uQ29tcGxldGU6IGZ1bmN0aW9uKCl7CisJCQkJdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7CisJCQkJdGhpcy5kcmFnZ2VkS25vYigpOworCQkJCXRoaXMuZW5kKCk7CisJCQl9LmJpbmQodGhpcykKKwkJfTsKKwkJaWYgKG9wdGlvbnMuc25hcCkgdGhpcy5zZXRTbmFwKGRyYWdPcHRpb25zKTsKKworCQl0aGlzLmRyYWcgPSBuZXcgRHJhZyhrbm9iLCBkcmFnT3B0aW9ucyk7CisJCWlmIChvcHRpb25zLmluaXRpYWxTdGVwICE9IG51bGwpIHRoaXMuc2V0KG9wdGlvbnMuaW5pdGlhbFN0ZXAsIHRydWUpOworCQl0aGlzLmF0dGFjaCgpOworCX0sCisKKwlhdHRhY2g6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZWxlbWVudC5hZGRFdmVudCgnbW91c2Vkb3duJywgdGhpcy5jbGlja2VkRWxlbWVudCk7CisJCWlmICh0aGlzLm9wdGlvbnMud2hlZWwpIHRoaXMuZWxlbWVudC5hZGRFdmVudCgnbW91c2V3aGVlbCcsIHRoaXMuc2Nyb2xsZWRFbGVtZW50KTsKKwkJdGhpcy5kcmFnLmF0dGFjaCgpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZGV0YWNoOiBmdW5jdGlvbigpeworCQl0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnQoJ21vdXNlZG93bicsIHRoaXMuY2xpY2tlZEVsZW1lbnQpCisJCQkucmVtb3ZlRXZlbnQoJ21vdXNld2hlZWwnLCB0aGlzLnNjcm9sbGVkRWxlbWVudCk7CisJCXRoaXMuZHJhZy5kZXRhY2goKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWF1dG9zaXplOiBmdW5jdGlvbigpeworCQl0aGlzLnNldFNsaWRlckRpbWVuc2lvbnMoKQorCQkJLnNldEtub2JQb3NpdGlvbih0aGlzLnRvUG9zaXRpb24odGhpcy5zdGVwKSk7CisJCXRoaXMuZHJhZy5vcHRpb25zLmxpbWl0W3RoaXMuYXhpc10gPSBbLXRoaXMub3B0aW9ucy5vZmZzZXQsIHRoaXMuZnVsbCAtIHRoaXMub3B0aW9ucy5vZmZzZXRdOworCQlpZiAodGhpcy5vcHRpb25zLnNuYXApIHRoaXMuc2V0U25hcCgpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJc2V0U25hcDogZnVuY3Rpb24ob3B0aW9ucyl7CisJCWlmICghb3B0aW9ucykgb3B0aW9ucyA9IHRoaXMuZHJhZy5vcHRpb25zOworCQlvcHRpb25zLmdyaWQgPSBNYXRoLmNlaWwodGhpcy5zdGVwV2lkdGgpOworCQlvcHRpb25zLmxpbWl0W3RoaXMuYXhpc11bMV0gPSB0aGlzLmVsZW1lbnRbdGhpcy5vZmZzZXRdOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJc2V0S25vYlBvc2l0aW9uOiBmdW5jdGlvbihwb3NpdGlvbil7CisJCWlmICh0aGlzLm9wdGlvbnMuc25hcCkgcG9zaXRpb24gPSB0aGlzLnRvUG9zaXRpb24odGhpcy5zdGVwKTsKKwkJdGhpcy5rbm9iLnNldFN0eWxlKHRoaXMucHJvcGVydHksIHBvc2l0aW9uKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXNldFNsaWRlckRpbWVuc2lvbnM6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZnVsbCA9IHRoaXMuZWxlbWVudC5tZWFzdXJlKGZ1bmN0aW9uKCl7CisJCQl0aGlzLmhhbGYgPSB0aGlzLmtub2JbdGhpcy5vZmZzZXRdIC8gMjsKKwkJCXJldHVybiB0aGlzLmVsZW1lbnRbdGhpcy5vZmZzZXRdIC0gdGhpcy5rbm9iW3RoaXMub2Zmc2V0XSArICh0aGlzLm9wdGlvbnMub2Zmc2V0ICogMik7CisJCX0uYmluZCh0aGlzKSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlzZXQ6IGZ1bmN0aW9uKHN0ZXAsIHNpbGVudGx5KXsKKwkJaWYgKCEoKHRoaXMucmFuZ2UgPiAwKSBeIChzdGVwIDwgdGhpcy5taW4pKSkgc3RlcCA9IHRoaXMubWluOworCQlpZiAoISgodGhpcy5yYW5nZSA+IDApIF4gKHN0ZXAgPiB0aGlzLm1heCkpKSBzdGVwID0gdGhpcy5tYXg7CisKKwkJdGhpcy5zdGVwID0gKHN0ZXApLnJvdW5kKHRoaXMubW9kdWx1cy5kZWNpbWFsTGVuZ3RoKTsKKwkJaWYgKHNpbGVudGx5KSB0aGlzLmNoZWNrU3RlcCgpLnNldEtub2JQb3NpdGlvbih0aGlzLnRvUG9zaXRpb24odGhpcy5zdGVwKSk7CisJCWVsc2UgdGhpcy5jaGVja1N0ZXAoKS5maXJlRXZlbnQoJ3RpY2snLCB0aGlzLnRvUG9zaXRpb24odGhpcy5zdGVwKSkuZmlyZUV2ZW50KCdtb3ZlJykuZW5kKCk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlzZXRSYW5nZTogZnVuY3Rpb24ocmFuZ2UsIHBvcywgc2lsZW50bHkpeworCQl0aGlzLm1pbiA9IEFycmF5LnBpY2soW3JhbmdlWzBdLCAwXSk7CisJCXRoaXMubWF4ID0gQXJyYXkucGljayhbcmFuZ2VbMV0sIHRoaXMub3B0aW9ucy5zdGVwc10pOworCQl0aGlzLnJhbmdlID0gdGhpcy5tYXggLSB0aGlzLm1pbjsKKwkJdGhpcy5zdGVwcyA9IHRoaXMub3B0aW9ucy5zdGVwcyB8fCB0aGlzLmZ1bGw7CisJCXZhciBzdGVwU2l6ZSA9IHRoaXMuc3RlcFNpemUgPSBNYXRoLmFicyh0aGlzLnJhbmdlKSAvIHRoaXMuc3RlcHM7CisJCXRoaXMuc3RlcFdpZHRoID0gdGhpcy5zdGVwU2l6ZSAqIHRoaXMuZnVsbCAvIE1hdGguYWJzKHRoaXMucmFuZ2UpOworCQl0aGlzLnNldE1vZHVsdXMoKTsKKworCQlpZiAocmFuZ2UpIHRoaXMuc2V0KEFycmF5LnBpY2soW3BvcywgdGhpcy5zdGVwXSkubGltaXQodGhpcy5taW4sdGhpcy5tYXgpLCBzaWxlbnRseSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlzZXRNb2R1bHVzOiBmdW5jdGlvbigpeworCQl2YXIgZGVjaW1hbHMgPSAoKHRoaXMuc3RlcFNpemUgKyAnJykuc3BsaXQoJy4nKVsxXSB8fCBbXSkubGVuZ3RoLAorCQkJbW9kdWx1cyA9IDEgKyAnJzsKKwkJd2hpbGUgKGRlY2ltYWxzLS0pIG1vZHVsdXMgKz0gJzAnOworCQl0aGlzLm1vZHVsdXMgPSB7bXVsdGlwbGllcjogKG1vZHVsdXMpLnRvSW50KDEwKSwgZGVjaW1hbExlbmd0aDogbW9kdWx1cy5sZW5ndGggLSAxfTsKKwl9LAorCisJY2xpY2tlZEVsZW1lbnQ6IGZ1bmN0aW9uKGV2ZW50KXsKKwkJaWYgKHRoaXMuaXNEcmFnZ2luZyB8fCBldmVudC50YXJnZXQgPT0gdGhpcy5rbm9iKSByZXR1cm47CisKKwkJdmFyIGRpciA9IHRoaXMucmFuZ2UgPCAwID8gLTEgOiAxLAorCQkJcG9zaXRpb24gPSBldmVudC5wYWdlW3RoaXMuYXhpc10gLSB0aGlzLmVsZW1lbnQuZ2V0UG9zaXRpb24oKVt0aGlzLmF4aXNdIC0gdGhpcy5oYWxmOworCisJCXBvc2l0aW9uID0gcG9zaXRpb24ubGltaXQoLXRoaXMub3B0aW9ucy5vZmZzZXQsIHRoaXMuZnVsbCAtIHRoaXMub3B0aW9ucy5vZmZzZXQpOworCisJCXRoaXMuc3RlcCA9ICh0aGlzLm1pbiArIGRpciAqIHRoaXMudG9TdGVwKHBvc2l0aW9uKSkucm91bmQodGhpcy5tb2R1bHVzLmRlY2ltYWxMZW5ndGgpOworCisJCXRoaXMuY2hlY2tTdGVwKCkKKwkJCS5maXJlRXZlbnQoJ3RpY2snLCBwb3NpdGlvbikKKwkJCS5maXJlRXZlbnQoJ21vdmUnKQorCQkJLmVuZCgpOworCX0sCisKKwlzY3JvbGxlZEVsZW1lbnQ6IGZ1bmN0aW9uKGV2ZW50KXsKKwkJdmFyIG1vZGUgPSAodGhpcy5vcHRpb25zLm1vZGUgPT0gJ2hvcml6b250YWwnKSA/IChldmVudC53aGVlbCA8IDApIDogKGV2ZW50LndoZWVsID4gMCk7CisJCXRoaXMuc2V0KHRoaXMuc3RlcCArIChtb2RlID8gLTEgOiAxKSAqIHRoaXMuc3RlcFNpemUpOworCQlldmVudC5zdG9wKCk7CisJfSwKKworCWRyYWdnZWRLbm9iOiBmdW5jdGlvbigpeworCQl2YXIgZGlyID0gdGhpcy5yYW5nZSA8IDAgPyAtMSA6IDEsCisJCQlwb3NpdGlvbiA9IHRoaXMuZHJhZy52YWx1ZS5ub3dbdGhpcy5heGlzXTsKKworCQlwb3NpdGlvbiA9IHBvc2l0aW9uLmxpbWl0KC10aGlzLm9wdGlvbnMub2Zmc2V0LCB0aGlzLmZ1bGwgLXRoaXMub3B0aW9ucy5vZmZzZXQpOworCisJCXRoaXMuc3RlcCA9ICh0aGlzLm1pbiArIGRpciAqIHRoaXMudG9TdGVwKHBvc2l0aW9uKSkucm91bmQodGhpcy5tb2R1bHVzLmRlY2ltYWxMZW5ndGgpOworCQl0aGlzLmNoZWNrU3RlcCgpOworCQl0aGlzLmZpcmVFdmVudCgnbW92ZScpOworCX0sCisKKwljaGVja1N0ZXA6IGZ1bmN0aW9uKCl7CisJCXZhciBzdGVwID0gdGhpcy5zdGVwOworCQlpZiAodGhpcy5wcmV2aW91c0NoYW5nZSAhPSBzdGVwKXsKKwkJCXRoaXMucHJldmlvdXNDaGFuZ2UgPSBzdGVwOworCQkJdGhpcy5maXJlRXZlbnQoJ2NoYW5nZScsIHN0ZXApOworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwllbmQ6IGZ1bmN0aW9uKCl7CisJCXZhciBzdGVwID0gdGhpcy5zdGVwOworCQlpZiAodGhpcy5wcmV2aW91c0VuZCAhPT0gc3RlcCl7CisJCQl0aGlzLnByZXZpb3VzRW5kID0gc3RlcDsKKwkJCXRoaXMuZmlyZUV2ZW50KCdjb21wbGV0ZScsIHN0ZXAgKyAnJyk7CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXRvU3RlcDogZnVuY3Rpb24ocG9zaXRpb24peworCQl2YXIgc3RlcCA9IChwb3NpdGlvbiArIHRoaXMub3B0aW9ucy5vZmZzZXQpICogdGhpcy5zdGVwU2l6ZSAvIHRoaXMuZnVsbCAqIHRoaXMuc3RlcHM7CisJCXJldHVybiB0aGlzLm9wdGlvbnMuc3RlcHMgPyAoc3RlcCAtIChzdGVwICogdGhpcy5tb2R1bHVzLm11bHRpcGxpZXIpICUgKHRoaXMuc3RlcFNpemUgKiB0aGlzLm1vZHVsdXMubXVsdGlwbGllcikgLyB0aGlzLm1vZHVsdXMubXVsdGlwbGllcikucm91bmQodGhpcy5tb2R1bHVzLmRlY2ltYWxMZW5ndGgpIDogc3RlcDsKKwl9LAorCisJdG9Qb3NpdGlvbjogZnVuY3Rpb24oc3RlcCl7CisJCXJldHVybiAodGhpcy5mdWxsICogTWF0aC5hYnModGhpcy5taW4gLSBzdGVwKSkgLyAodGhpcy5zdGVwcyAqIHRoaXMuc3RlcFNpemUpIC0gdGhpcy5vcHRpb25zLm9mZnNldCB8fCAwOworCX0KKworfSk7CisKK30pKCk7CisKKworLyoKKy0tLQorCitzY3JpcHQ6IFNvcnRhYmxlcy5qcworCituYW1lOiBTb3J0YWJsZXMKKworZGVzY3JpcHRpb246IENsYXNzIGZvciBjcmVhdGluZyBhIGRyYWcgYW5kIGRyb3Agc29ydGluZyBpbnRlcmZhY2UgZm9yIGxpc3RzIG9mIGl0ZW1zLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFRvbSBPY2NoaW5vCisKK3JlcXVpcmVzOgorICAtIENvcmUvRnguTW9ycGgKKyAgLSBEcmFnLk1vdmUKKworcHJvdmlkZXM6IFtTb3J0YWJsZXNdCisKKy4uLgorKi8KKyhmdW5jdGlvbigpeworCit2YXIgU29ydGFibGVzID0gdGhpcy5Tb3J0YWJsZXMgPSBuZXcgQ2xhc3MoeworCisJSW1wbGVtZW50czogW0V2ZW50cywgT3B0aW9uc10sCisKKwlvcHRpb25zOiB7LyoKKwkJb25Tb3J0OiBmdW5jdGlvbihlbGVtZW50LCBjbG9uZSl7fSwKKwkJb25TdGFydDogZnVuY3Rpb24oZWxlbWVudCwgY2xvbmUpe30sCisJCW9uQ29tcGxldGU6IGZ1bmN0aW9uKGVsZW1lbnQpe30sKi8KKwkJb3BhY2l0eTogMSwKKwkJY2xvbmU6IGZhbHNlLAorCQlyZXZlcnQ6IGZhbHNlLAorCQloYW5kbGU6IGZhbHNlLAorCQlkcmFnT3B0aW9uczoge30sCisJCXVuRHJhZ2dhYmxlVGFnczogWydidXR0b24nLCAnaW5wdXQnLCAnYScsICd0ZXh0YXJlYScsICdzZWxlY3QnLCAnb3B0aW9uJ10KKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24obGlzdHMsIG9wdGlvbnMpeworCQl0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7CisKKwkJdGhpcy5lbGVtZW50cyA9IFtdOworCQl0aGlzLmxpc3RzID0gW107CisJCXRoaXMuaWRsZSA9IHRydWU7CisKKwkJdGhpcy5hZGRMaXN0cygkJChkb2N1bWVudC5pZChsaXN0cykgfHwgbGlzdHMpKTsKKworCQlpZiAoIXRoaXMub3B0aW9ucy5jbG9uZSkgdGhpcy5vcHRpb25zLnJldmVydCA9IGZhbHNlOworCQlpZiAodGhpcy5vcHRpb25zLnJldmVydCkgdGhpcy5lZmZlY3QgPSBuZXcgRnguTW9ycGgobnVsbCwgT2JqZWN0Lm1lcmdlKHsKKwkJCWR1cmF0aW9uOiAyNTAsCisJCQlsaW5rOiAnY2FuY2VsJworCQl9LCB0aGlzLm9wdGlvbnMucmV2ZXJ0KSk7CisJfSwKKworCWF0dGFjaDogZnVuY3Rpb24oKXsKKwkJdGhpcy5hZGRMaXN0cyh0aGlzLmxpc3RzKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWRldGFjaDogZnVuY3Rpb24oKXsKKwkJdGhpcy5saXN0cyA9IHRoaXMucmVtb3ZlTGlzdHModGhpcy5saXN0cyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlhZGRJdGVtczogZnVuY3Rpb24oKXsKKwkJQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLmVhY2goZnVuY3Rpb24oZWxlbWVudCl7CisJCQl0aGlzLmVsZW1lbnRzLnB1c2goZWxlbWVudCk7CisJCQl2YXIgc3RhcnQgPSBlbGVtZW50LnJldHJpZXZlKCdzb3J0YWJsZXM6c3RhcnQnLCBmdW5jdGlvbihldmVudCl7CisJCQkJdGhpcy5zdGFydC5jYWxsKHRoaXMsIGV2ZW50LCBlbGVtZW50KTsKKwkJCX0uYmluZCh0aGlzKSk7CisJCQkodGhpcy5vcHRpb25zLmhhbmRsZSA/IGVsZW1lbnQuZ2V0RWxlbWVudCh0aGlzLm9wdGlvbnMuaGFuZGxlKSB8fCBlbGVtZW50IDogZWxlbWVudCkuYWRkRXZlbnQoJ21vdXNlZG93bicsIHN0YXJ0KTsKKwkJfSwgdGhpcyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlhZGRMaXN0czogZnVuY3Rpb24oKXsKKwkJQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLmVhY2goZnVuY3Rpb24obGlzdCl7CisJCQl0aGlzLmxpc3RzLmluY2x1ZGUobGlzdCk7CisJCQl0aGlzLmFkZEl0ZW1zKGxpc3QuZ2V0Q2hpbGRyZW4oKSk7CisJCX0sIHRoaXMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVtb3ZlSXRlbXM6IGZ1bmN0aW9uKCl7CisJCXJldHVybiAkJChBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykubWFwKGZ1bmN0aW9uKGVsZW1lbnQpeworCQkJdGhpcy5lbGVtZW50cy5lcmFzZShlbGVtZW50KTsKKwkJCXZhciBzdGFydCA9IGVsZW1lbnQucmV0cmlldmUoJ3NvcnRhYmxlczpzdGFydCcpOworCQkJKHRoaXMub3B0aW9ucy5oYW5kbGUgPyBlbGVtZW50LmdldEVsZW1lbnQodGhpcy5vcHRpb25zLmhhbmRsZSkgfHwgZWxlbWVudCA6IGVsZW1lbnQpLnJlbW92ZUV2ZW50KCdtb3VzZWRvd24nLCBzdGFydCk7CisKKwkJCXJldHVybiBlbGVtZW50OworCQl9LCB0aGlzKSk7CisJfSwKKworCXJlbW92ZUxpc3RzOiBmdW5jdGlvbigpeworCQlyZXR1cm4gJCQoQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLm1hcChmdW5jdGlvbihsaXN0KXsKKwkJCXRoaXMubGlzdHMuZXJhc2UobGlzdCk7CisJCQl0aGlzLnJlbW92ZUl0ZW1zKGxpc3QuZ2V0Q2hpbGRyZW4oKSk7CisKKwkJCXJldHVybiBsaXN0OworCQl9LCB0aGlzKSk7CisJfSwKKworCWdldERyb3BwYWJsZUNvb3JkaW5hdGVzOiBmdW5jdGlvbihlbGVtZW50KXsKKwkJdmFyIG9mZnNldFBhcmVudCA9IGVsZW1lbnQuZ2V0T2Zmc2V0UGFyZW50KCk7CisJCXZhciBwb3NpdGlvbiA9IGVsZW1lbnQuZ2V0UG9zaXRpb24ob2Zmc2V0UGFyZW50KTsKKwkJdmFyIHNjcm9sbCA9IHsKKwkJCXc6IHdpbmRvdy5nZXRTY3JvbGwoKSwKKwkJCW9mZnNldFBhcmVudDogb2Zmc2V0UGFyZW50LmdldFNjcm9sbCgpCisJCX07CisJCXBvc2l0aW9uLnggKz0gc2Nyb2xsLm9mZnNldFBhcmVudC54OworCQlwb3NpdGlvbi55ICs9IHNjcm9sbC5vZmZzZXRQYXJlbnQueTsKKworCQlpZiAob2Zmc2V0UGFyZW50LmdldFN0eWxlKCdwb3NpdGlvbicpID09ICdmaXhlZCcpeworCQkJcG9zaXRpb24ueCAtPSBzY3JvbGwudy54OworCQkJcG9zaXRpb24ueSAtPSBzY3JvbGwudy55OworCQl9CisKKwkJcmV0dXJuIHBvc2l0aW9uOworCX0sCisKKwlnZXRDbG9uZTogZnVuY3Rpb24oZXZlbnQsIGVsZW1lbnQpeworCQlpZiAoIXRoaXMub3B0aW9ucy5jbG9uZSkgcmV0dXJuIG5ldyBFbGVtZW50KGVsZW1lbnQudGFnTmFtZSkuaW5qZWN0KGRvY3VtZW50LmJvZHkpOworCQlpZiAodHlwZU9mKHRoaXMub3B0aW9ucy5jbG9uZSkgPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHRoaXMub3B0aW9ucy5jbG9uZS5jYWxsKHRoaXMsIGV2ZW50LCBlbGVtZW50LCB0aGlzLmxpc3QpOworCQl2YXIgY2xvbmUgPSBlbGVtZW50LmNsb25lKHRydWUpLnNldFN0eWxlcyh7CisJCQltYXJnaW46IDAsCisJCQlwb3NpdGlvbjogJ2Fic29sdXRlJywKKwkJCXZpc2liaWxpdHk6ICdoaWRkZW4nLAorCQkJd2lkdGg6IGVsZW1lbnQuZ2V0U3R5bGUoJ3dpZHRoJykKKwkJfSkuYWRkRXZlbnQoJ21vdXNlZG93bicsIGZ1bmN0aW9uKGV2ZW50KXsKKwkJCWVsZW1lbnQuZmlyZUV2ZW50KCdtb3VzZWRvd24nLCBldmVudCk7CisJCX0pOworCQkvL3ByZXZlbnQgdGhlIGR1cGxpY2F0ZWQgcmFkaW8gaW5wdXRzIGZyb20gdW5jaGVja2luZyB0aGUgcmVhbCBvbmUKKwkJaWYgKGNsb25lLmdldCgnaHRtbCcpLnRlc3QoJ3JhZGlvJykpeworCQkJY2xvbmUuZ2V0RWxlbWVudHMoJ2lucHV0W3R5cGU9cmFkaW9dJykuZWFjaChmdW5jdGlvbihpbnB1dCwgaSl7CisJCQkJaW5wdXQuc2V0KCduYW1lJywgJ2Nsb25lXycgKyBpKTsKKwkJCQlpZiAoaW5wdXQuZ2V0KCdjaGVja2VkJykpIGVsZW1lbnQuZ2V0RWxlbWVudHMoJ2lucHV0W3R5cGU9cmFkaW9dJylbaV0uc2V0KCdjaGVja2VkJywgdHJ1ZSk7CisJCQl9KTsKKwkJfQorCisJCXJldHVybiBjbG9uZS5pbmplY3QodGhpcy5saXN0KS5zZXRQb3NpdGlvbih0aGlzLmdldERyb3BwYWJsZUNvb3JkaW5hdGVzKHRoaXMuZWxlbWVudCkpOworCX0sCisKKwlnZXREcm9wcGFibGVzOiBmdW5jdGlvbigpeworCQl2YXIgZHJvcHBhYmxlcyA9IHRoaXMubGlzdC5nZXRDaGlsZHJlbigpLmVyYXNlKHRoaXMuY2xvbmUpLmVyYXNlKHRoaXMuZWxlbWVudCk7CisJCWlmICghdGhpcy5vcHRpb25zLmNvbnN0cmFpbikgZHJvcHBhYmxlcy5hcHBlbmQodGhpcy5saXN0cykuZXJhc2UodGhpcy5saXN0KTsKKwkJcmV0dXJuIGRyb3BwYWJsZXM7CisJfSwKKworCWluc2VydDogZnVuY3Rpb24oZHJhZ2dpbmcsIGVsZW1lbnQpeworCQl2YXIgd2hlcmUgPSAnaW5zaWRlJzsKKwkJaWYgKHRoaXMubGlzdHMuY29udGFpbnMoZWxlbWVudCkpeworCQkJdGhpcy5saXN0ID0gZWxlbWVudDsKKwkJCXRoaXMuZHJhZy5kcm9wcGFibGVzID0gdGhpcy5nZXREcm9wcGFibGVzKCk7CisJCX0gZWxzZSB7CisJCQl3aGVyZSA9IHRoaXMuZWxlbWVudC5nZXRBbGxQcmV2aW91cygpLmNvbnRhaW5zKGVsZW1lbnQpID8gJ2JlZm9yZScgOiAnYWZ0ZXInOworCQl9CisJCXRoaXMuZWxlbWVudC5pbmplY3QoZWxlbWVudCwgd2hlcmUpOworCQl0aGlzLmZpcmVFdmVudCgnc29ydCcsIFt0aGlzLmVsZW1lbnQsIHRoaXMuY2xvbmVdKTsKKwl9LAorCisJc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50LCBlbGVtZW50KXsKKwkJaWYgKAorCQkJIXRoaXMuaWRsZSB8fAorCQkJZXZlbnQucmlnaHRDbGljayB8fAorCQkJKCF0aGlzLm9wdGlvbnMuaGFuZGxlICYmIHRoaXMub3B0aW9ucy51bkRyYWdnYWJsZVRhZ3MuY29udGFpbnMoZXZlbnQudGFyZ2V0LmdldCgndGFnJykpKQorCQkpIHJldHVybjsKKworCQl0aGlzLmlkbGUgPSBmYWxzZTsKKwkJdGhpcy5lbGVtZW50ID0gZWxlbWVudDsKKwkJdGhpcy5vcGFjaXR5ID0gZWxlbWVudC5nZXRTdHlsZSgnb3BhY2l0eScpOworCQl0aGlzLmxpc3QgPSBlbGVtZW50LmdldFBhcmVudCgpOworCQl0aGlzLmNsb25lID0gdGhpcy5nZXRDbG9uZShldmVudCwgZWxlbWVudCk7CisKKwkJdGhpcy5kcmFnID0gbmV3IERyYWcuTW92ZSh0aGlzLmNsb25lLCBPYmplY3QubWVyZ2UoeworCQkJCisJCQlkcm9wcGFibGVzOiB0aGlzLmdldERyb3BwYWJsZXMoKQorCQl9LCB0aGlzLm9wdGlvbnMuZHJhZ09wdGlvbnMpKS5hZGRFdmVudHMoeworCQkJb25TbmFwOiBmdW5jdGlvbigpeworCQkJCWV2ZW50LnN0b3AoKTsKKwkJCQl0aGlzLmNsb25lLnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTsKKwkJCQl0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ29wYWNpdHknLCB0aGlzLm9wdGlvbnMub3BhY2l0eSB8fCAwKTsKKwkJCQl0aGlzLmZpcmVFdmVudCgnc3RhcnQnLCBbdGhpcy5lbGVtZW50LCB0aGlzLmNsb25lXSk7CisJCQl9LmJpbmQodGhpcyksCisJCQlvbkVudGVyOiB0aGlzLmluc2VydC5iaW5kKHRoaXMpLAorCQkJb25DYW5jZWw6IHRoaXMuZW5kLmJpbmQodGhpcyksCisJCQlvbkNvbXBsZXRlOiB0aGlzLmVuZC5iaW5kKHRoaXMpCisJCX0pOworCisJCXRoaXMuY2xvbmUuaW5qZWN0KHRoaXMuZWxlbWVudCwgJ2JlZm9yZScpOworCQl0aGlzLmRyYWcuc3RhcnQoZXZlbnQpOworCX0sCisKKwllbmQ6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZHJhZy5kZXRhY2goKTsKKwkJdGhpcy5lbGVtZW50LnNldFN0eWxlKCdvcGFjaXR5JywgdGhpcy5vcGFjaXR5KTsKKwkJdmFyIHNlbGYgPSB0aGlzOworCQlpZiAodGhpcy5lZmZlY3QpeworCQkJdmFyIGRpbSA9IHRoaXMuZWxlbWVudC5nZXRTdHlsZXMoJ3dpZHRoJywgJ2hlaWdodCcpLAorCQkJCWNsb25lID0gdGhpcy5jbG9uZSwKKwkJCQlwb3MgPSBjbG9uZS5jb21wdXRlUG9zaXRpb24odGhpcy5nZXREcm9wcGFibGVDb29yZGluYXRlcyhjbG9uZSkpOworCisJCQl2YXIgZGVzdHJveSA9IGZ1bmN0aW9uKCl7CisJCQkJdGhpcy5yZW1vdmVFdmVudCgnY2FuY2VsJywgZGVzdHJveSk7CisJCQkJY2xvbmUuZGVzdHJveSgpOworCQkJCXNlbGYucmVzZXQoKTsKKwkJCX07CisKKwkJCXRoaXMuZWZmZWN0LmVsZW1lbnQgPSBjbG9uZTsKKwkJCXRoaXMuZWZmZWN0LnN0YXJ0KHsKKwkJCQl0b3A6IHBvcy50b3AsCisJCQkJbGVmdDogcG9zLmxlZnQsCisJCQkJd2lkdGg6IGRpbS53aWR0aCwKKwkJCQloZWlnaHQ6IGRpbS5oZWlnaHQsCisJCQkJb3BhY2l0eTogMC4yNQorCQkJfSkuYWRkRXZlbnQoJ2NhbmNlbCcsIGRlc3Ryb3kpLmNoYWluKGRlc3Ryb3kpOworCQl9IGVsc2UgeworCQkJdGhpcy5jbG9uZS5kZXN0cm95KCk7CisJCQlzZWxmLnJlc2V0KCk7CisJCX0KKworCX0sCisKKwlyZXNldDogZnVuY3Rpb24oKXsKKwkJdGhpcy5pZGxlID0gdHJ1ZTsKKwkJdGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJywgdGhpcy5lbGVtZW50KTsKKwl9LAorCisJc2VyaWFsaXplOiBmdW5jdGlvbigpeworCQl2YXIgcGFyYW1zID0gQXJyYXkubGluayhhcmd1bWVudHMsIHsKKwkJCW1vZGlmaWVyOiBUeXBlLmlzRnVuY3Rpb24sCisJCQlpbmRleDogZnVuY3Rpb24ob2JqKXsKKwkJCQlyZXR1cm4gb2JqICE9IG51bGw7CisJCQl9CisJCX0pOworCQl2YXIgc2VyaWFsID0gdGhpcy5saXN0cy5tYXAoZnVuY3Rpb24obGlzdCl7CisJCQlyZXR1cm4gbGlzdC5nZXRDaGlsZHJlbigpLm1hcChwYXJhbXMubW9kaWZpZXIgfHwgZnVuY3Rpb24oZWxlbWVudCl7CisJCQkJcmV0dXJuIGVsZW1lbnQuZ2V0KCdpZCcpOworCQkJfSwgdGhpcyk7CisJCX0sIHRoaXMpOworCisJCXZhciBpbmRleCA9IHBhcmFtcy5pbmRleDsKKwkJaWYgKHRoaXMubGlzdHMubGVuZ3RoID09IDEpIGluZGV4ID0gMDsKKwkJcmV0dXJuIChpbmRleCB8fCBpbmRleCA9PT0gMCkgJiYgaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMubGlzdHMubGVuZ3RoID8gc2VyaWFsW2luZGV4XSA6IHNlcmlhbDsKKwl9CisKK30pOworCit9KSgpOworCisvKgorLS0tCisKK25hbWU6IEVsZW1lbnQuRXZlbnQuUHNldWRvcworCitkZXNjcmlwdGlvbjogQWRkcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBhZGQgcHNldWRvIGV2ZW50cyBmb3IgRWxlbWVudHMKKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBcmlhbiBTdG9sd2lqaworCityZXF1aXJlczogW0NvcmUvRWxlbWVudC5FdmVudCwgQ29yZS9FbGVtZW50LkRlbGVnYXRpb24sIEV2ZW50cy5Qc2V1ZG9zXQorCitwcm92aWRlczogW0VsZW1lbnQuRXZlbnQuUHNldWRvcywgRWxlbWVudC5EZWxlZ2F0aW9uLlBzZXVkb10KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIHBzZXVkb3MgPSB7cmVsYXk6IGZhbHNlfSwKKwljb3B5RnJvbUV2ZW50cyA9IFsnb25jZScsICd0aHJvdHRsZScsICdwYXVzZSddLAorCWNvdW50ID0gY29weUZyb21FdmVudHMubGVuZ3RoOworCit3aGlsZSAoY291bnQtLSkgcHNldWRvc1tjb3B5RnJvbUV2ZW50c1tjb3VudF1dID0gRXZlbnRzLmxvb2t1cFBzZXVkbyhjb3B5RnJvbUV2ZW50c1tjb3VudF0pOworCitET01FdmVudC5kZWZpbmVQc2V1ZG8gPSBmdW5jdGlvbihrZXksIGxpc3RlbmVyKXsKKwlwc2V1ZG9zW2tleV0gPSBsaXN0ZW5lcjsKKwlyZXR1cm4gdGhpczsKK307CisKK3ZhciBwcm90byA9IEVsZW1lbnQucHJvdG90eXBlOworW0VsZW1lbnQsIFdpbmRvdywgRG9jdW1lbnRdLmludm9rZSgnaW1wbGVtZW50JywgRXZlbnRzLlBzZXVkb3MocHNldWRvcywgcHJvdG8uYWRkRXZlbnQsIHByb3RvLnJlbW92ZUV2ZW50KSk7CisKK30pKCk7CisKKy8qCistLS0KKworbmFtZTogRWxlbWVudC5FdmVudC5Qc2V1ZG9zLktleXMKKworZGVzY3JpcHRpb246IEFkZHMgZnVuY3Rpb25hbGl0eSBmaXJlIGV2ZW50cyBpZiBjZXJ0YWluIGtleWNvbWJpbmF0aW9ucyBhcmUgcHJlc3NlZAorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFyaWFuIFN0b2x3aWprCisKK3JlcXVpcmVzOiBbRWxlbWVudC5FdmVudC5Qc2V1ZG9zXQorCitwcm92aWRlczogW0VsZW1lbnQuRXZlbnQuUHNldWRvcy5LZXlzXQorCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCit2YXIga2V5c1N0b3JlS2V5ID0gJyRtb286a2V5cy1wcmVzc2VkJywKKwlrZXlzS2V5dXBTdG9yZUtleSA9ICckbW9vOmtleXMta2V5dXAnOworCisKK0RPTUV2ZW50LmRlZmluZVBzZXVkbygna2V5cycsIGZ1bmN0aW9uKHNwbGl0LCBmbiwgYXJncyl7CisKKwl2YXIgZXZlbnQgPSBhcmdzWzBdLAorCQlrZXlzID0gW10sCisJCXByZXNzZWQgPSB0aGlzLnJldHJpZXZlKGtleXNTdG9yZUtleSwgW10pLAorCQl2YWx1ZSA9IHNwbGl0LnZhbHVlOworCisJaWYgKHZhbHVlICE9ICcrJykga2V5cy5hcHBlbmQodmFsdWUucmVwbGFjZSgnKysnLCBmdW5jdGlvbigpeworCQlrZXlzLnB1c2goJysnKTsgLy8gc2hpZnQrKyBhbmQgc2hpZnQrKythCisJCXJldHVybiAnJzsKKwl9KS5zcGxpdCgnKycpKTsKKwllbHNlIGtleXMgPSBbJysnXTsKKworCXByZXNzZWQuaW5jbHVkZShldmVudC5rZXkpOworCisJaWYgKGtleXMuZXZlcnkoZnVuY3Rpb24oa2V5KXsKKwkJcmV0dXJuIHByZXNzZWQuY29udGFpbnMoa2V5KTsKKwl9KSkgZm4uYXBwbHkodGhpcywgYXJncyk7CisKKwl0aGlzLnN0b3JlKGtleXNTdG9yZUtleSwgcHJlc3NlZCk7CisKKwlpZiAoIXRoaXMucmV0cmlldmUoa2V5c0tleXVwU3RvcmVLZXkpKXsKKwkJdmFyIGtleXVwID0gZnVuY3Rpb24oZXZlbnQpeworCQkJKGZ1bmN0aW9uKCl7CisJCQkJcHJlc3NlZCA9IHRoaXMucmV0cmlldmUoa2V5c1N0b3JlS2V5LCBbXSkuZXJhc2UoZXZlbnQua2V5KTsKKwkJCQl0aGlzLnN0b3JlKGtleXNTdG9yZUtleSwgcHJlc3NlZCk7CisJCQl9KS5kZWxheSgwLCB0aGlzKTsgLy8gRml4IGZvciBJRQorCQl9OworCQl0aGlzLnN0b3JlKGtleXNLZXl1cFN0b3JlS2V5LCBrZXl1cCkuYWRkRXZlbnQoJ2tleXVwJywga2V5dXApOworCX0KKworfSk7CisKK0RPTUV2ZW50LmRlZmluZUtleXMoeworCScxNic6ICdzaGlmdCcsCisJJzE3JzogJ2NvbnRyb2wnLAorCScxOCc6ICdhbHQnLAorCScyMCc6ICdjYXBzbG9jaycsCisJJzMzJzogJ3BhZ2V1cCcsCisJJzM0JzogJ3BhZ2Vkb3duJywKKwknMzUnOiAnZW5kJywKKwknMzYnOiAnaG9tZScsCisJJzE0NCc6ICdudW1sb2NrJywKKwknMTQ1JzogJ3Njcm9sbGxvY2snLAorCScxODYnOiAnOycsCisJJzE4Nyc6ICc9JywKKwknMTg4JzogJywnLAorCScxOTAnOiAnLicsCisJJzE5MSc6ICcvJywKKwknMTkyJzogJ2AnLAorCScyMTknOiAnWycsCisJJzIyMCc6ICdcXCcsCisJJzIyMSc6ICddJywKKwknMjIyJzogIiciLAorCScxMDcnOiAnKycsCisJJzEwOSc6ICctJywgLy8gc3VidHJhY3QKKwknMTg5JzogJy0nICAvLyBkYXNoCit9KTsKKworfSkoKTsKKworLyoKKy0tLQorCitzY3JpcHQ6IFN0cmluZy5FeHRyYXMuanMKKworbmFtZTogU3RyaW5nLkV4dHJhcworCitkZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgU3RyaW5nIG5hdGl2ZSBvYmplY3QgdG8gaW5jbHVkZSBtZXRob2RzIHVzZWZ1bCBpbiBtYW5hZ2luZyB2YXJpb3VzIGtpbmRzIG9mIHN0cmluZ3MgKHF1ZXJ5IHN0cmluZ3MsIHVybHMsIGh0bWwsIGV0YykuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisgIC0gR3VpbGxlcm1vIFJhdWNoCisgIC0gQ2hyaXN0b3BoZXIgUGl0dAorCityZXF1aXJlczoKKyAgLSBDb3JlL1N0cmluZworICAtIENvcmUvQXJyYXkKKyAgLSBNb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbU3RyaW5nLkV4dHJhc10KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIHNwZWNpYWwgPSB7CisJCSdhJzogL1vDoMOhw6LDo8Okw6XEg8SFXS9nLAorCQknQSc6IC9bw4DDgcOCw4PDhMOFxILEhF0vZywKKwkJJ2MnOiAvW8SHxI3Dp10vZywKKwkJJ0MnOiAvW8SGxIzDh10vZywKKwkJJ2QnOiAvW8SPxJFdL2csCisJCSdEJzogL1vEjsOQXS9nLAorCQknZSc6IC9bw6jDqcOqw6vEm8SZXS9nLAorCQknRSc6IC9bw4jDicOKw4vEmsSYXS9nLAorCQknZyc6IC9bxJ9dL2csCisJCSdHJzogL1vEnl0vZywKKwkJJ2knOiAvW8Osw63DrsOvXS9nLAorCQknSSc6IC9bw4zDjcOOw49dL2csCisJCSdsJzogL1vEusS+xYJdL2csCisJCSdMJzogL1vEucS9xYFdL2csCisJCSduJzogL1vDscWIxYRdL2csCisJCSdOJzogL1vDkcWHxYNdL2csCisJCSdvJzogL1vDssOzw7TDtcO2w7jFkV0vZywKKwkJJ08nOiAvW8OSw5PDlMOVw5bDmF0vZywKKwkJJ3InOiAvW8WZxZVdL2csCisJCSdSJzogL1vFmMWUXS9nLAorCQkncyc6IC9bxaHFocWfXS9nLAorCQknUyc6IC9bxaDFnsWaXS9nLAorCQkndCc6IC9bxaXFo10vZywKKwkJJ1QnOiAvW8WkxaJdL2csCisJCSd1JzogL1vDucO6w7vFr8O8wrVdL2csCisJCSdVJzogL1vDmcOaw5vFrsOcXS9nLAorCQkneSc6IC9bw7/DvV0vZywKKwkJJ1knOiAvW8W4w51dL2csCisJCSd6JzogL1vFvsW6xbxdL2csCisJCSdaJzogL1vFvcW5xbtdL2csCisJCSd0aCc6IC9bw75dL2csCisJCSdUSCc6IC9bw55dL2csCisJCSdkaCc6IC9bw7BdL2csCisJCSdESCc6IC9bw5BdL2csCisJCSdzcyc6IC9bw59dL2csCisJCSdvZSc6IC9bxZNdL2csCisJCSdPRSc6IC9bxZJdL2csCisJCSdhZSc6IC9bw6ZdL2csCisJCSdBRSc6IC9bw4ZdL2cKKwl9LAorCisJdGlkeSA9IHsKKwkJJyAnOiAvW1x4YTBcdTIwMDJcdTIwMDNcdTIwMDldL2csCisJCScqJzogL1tceGI3XS9nLAorCQknXCcnOiAvW1x1MjAxOFx1MjAxOV0vZywKKwkJJyInOiAvW1x1MjAxY1x1MjAxZF0vZywKKwkJJy4uLic6IC9bXHUyMDI2XS9nLAorCQknLSc6IC9bXHUyMDEzXS9nLAorCS8vCSctLSc6IC9bXHUyMDE0XS9nLAorCQknJnJhcXVvOyc6IC9bXHVGRkZEXS9nCisJfSwKKworCWNvbnZlcnNpb25zID0geworCQltczogMSwKKwkJczogMTAwMCwKKwkJbTogNmU0LAorCQloOiAzNmU1CisJfSwKKworCWZpbmRVbml0cyA9IC8oXGQqLj9cZCspKFttc2hdKykvOworCit2YXIgd2FsayA9IGZ1bmN0aW9uKHN0cmluZywgcmVwbGFjZW1lbnRzKXsKKwl2YXIgcmVzdWx0ID0gc3RyaW5nLCBrZXk7CisJZm9yIChrZXkgaW4gcmVwbGFjZW1lbnRzKSByZXN1bHQgPSByZXN1bHQucmVwbGFjZShyZXBsYWNlbWVudHNba2V5XSwga2V5KTsKKwlyZXR1cm4gcmVzdWx0OworfTsKKwordmFyIGdldFJlZ2V4Rm9yVGFnID0gZnVuY3Rpb24odGFnLCBjb250ZW50cyl7CisJdGFnID0gdGFnIHx8IChjb250ZW50cyA/ICcnIDogJ1xcdysnKTsKKwl2YXIgcmVnc3RyID0gY29udGVudHMgPyAnPCcgKyB0YWcgKyAnKD8hXFx3KVtePl0qPihbXFxzXFxTXSo/KTxcLycgKyB0YWcgKyAnKD8hXFx3KT4nIDogJzxcLz8nICsgdGFnICsgJ1wvPz58PCcgKyB0YWcgKyAnW1xcc3xcL11bXj5dKj4nOworCXJldHVybiBuZXcgUmVnRXhwKHJlZ3N0ciwgJ2dpJyk7Cit9OworCitTdHJpbmcuaW1wbGVtZW50KHsKKworCXN0YW5kYXJkaXplOiBmdW5jdGlvbigpeworCQlyZXR1cm4gd2Fsayh0aGlzLCBzcGVjaWFsKTsKKwl9LAorCisJcmVwZWF0OiBmdW5jdGlvbih0aW1lcyl7CisJCXJldHVybiBuZXcgQXJyYXkodGltZXMgKyAxKS5qb2luKHRoaXMpOworCX0sCisKKwlwYWQ6IGZ1bmN0aW9uKGxlbmd0aCwgc3RyLCBkaXJlY3Rpb24peworCQlpZiAodGhpcy5sZW5ndGggPj0gbGVuZ3RoKSByZXR1cm4gdGhpczsKKworCQl2YXIgcGFkID0gKHN0ciA9PSBudWxsID8gJyAnIDogJycgKyBzdHIpCisJCQkucmVwZWF0KGxlbmd0aCAtIHRoaXMubGVuZ3RoKQorCQkJLnN1YnN0cigwLCBsZW5ndGggLSB0aGlzLmxlbmd0aCk7CisKKwkJaWYgKCFkaXJlY3Rpb24gfHwgZGlyZWN0aW9uID09ICdyaWdodCcpIHJldHVybiB0aGlzICsgcGFkOworCQlpZiAoZGlyZWN0aW9uID09ICdsZWZ0JykgcmV0dXJuIHBhZCArIHRoaXM7CisKKwkJcmV0dXJuIHBhZC5zdWJzdHIoMCwgKHBhZC5sZW5ndGggLyAyKS5mbG9vcigpKSArIHRoaXMgKyBwYWQuc3Vic3RyKDAsIChwYWQubGVuZ3RoIC8gMikuY2VpbCgpKTsKKwl9LAorCisJZ2V0VGFnczogZnVuY3Rpb24odGFnLCBjb250ZW50cyl7CisJCXJldHVybiB0aGlzLm1hdGNoKGdldFJlZ2V4Rm9yVGFnKHRhZywgY29udGVudHMpKSB8fCBbXTsKKwl9LAorCisJc3RyaXBUYWdzOiBmdW5jdGlvbih0YWcsIGNvbnRlbnRzKXsKKwkJcmV0dXJuIHRoaXMucmVwbGFjZShnZXRSZWdleEZvclRhZyh0YWcsIGNvbnRlbnRzKSwgJycpOworCX0sCisKKwl0aWR5OiBmdW5jdGlvbigpeworCQlyZXR1cm4gd2Fsayh0aGlzLCB0aWR5KTsKKwl9LAorCisJdHJ1bmNhdGU6IGZ1bmN0aW9uKG1heCwgdHJhaWwsIGF0Q2hhcil7CisJCXZhciBzdHJpbmcgPSB0aGlzOworCQlpZiAodHJhaWwgPT0gbnVsbCAmJiBhcmd1bWVudHMubGVuZ3RoID09IDEpIHRyYWlsID0gJ+KApic7CisJCWlmIChzdHJpbmcubGVuZ3RoID4gbWF4KXsKKwkJCXN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmcoMCwgbWF4KTsKKwkJCWlmIChhdENoYXIpeworCQkJCXZhciBpbmRleCA9IHN0cmluZy5sYXN0SW5kZXhPZihhdENoYXIpOworCQkJCWlmIChpbmRleCAhPSAtMSkgc3RyaW5nID0gc3RyaW5nLnN1YnN0cigwLCBpbmRleCk7CisJCQl9CisJCQlpZiAodHJhaWwpIHN0cmluZyArPSB0cmFpbDsKKwkJfQorCQlyZXR1cm4gc3RyaW5nOworCX0sCisKKwltczogZnVuY3Rpb24oKXsKKwkJLy8gIkJvcnJvd2VkIiBmcm9tIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzE1MDM5NDQKKwkJdmFyIHVuaXRzID0gZmluZFVuaXRzLmV4ZWModGhpcyk7CisJCWlmICh1bml0cyA9PSBudWxsKSByZXR1cm4gTnVtYmVyKHRoaXMpOworCQlyZXR1cm4gTnVtYmVyKHVuaXRzWzFdKSAqIGNvbnZlcnNpb25zW3VuaXRzWzJdXTsKKwl9CisKK30pOworCit9KSgpOworCisvKgorLS0tCisKK3NjcmlwdDogRWxlbWVudC5Gb3Jtcy5qcworCituYW1lOiBFbGVtZW50LkZvcm1zCisKK2Rlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBFbGVtZW50IG5hdGl2ZSBvYmplY3QgdG8gaW5jbHVkZSBtZXRob2RzIHVzZWZ1bCBpbiBtYW5hZ2luZyBpbnB1dHMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisKK3JlcXVpcmVzOgorICAtIENvcmUvRWxlbWVudAorICAtIFN0cmluZy5FeHRyYXMKKyAgLSBNb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbRWxlbWVudC5Gb3Jtc10KKworLi4uCisqLworCitFbGVtZW50LmltcGxlbWVudCh7CisKKwl0aWR5OiBmdW5jdGlvbigpeworCQl0aGlzLnNldCgndmFsdWUnLCB0aGlzLmdldCgndmFsdWUnKS50aWR5KCkpOworCX0sCisKKwlnZXRUZXh0SW5SYW5nZTogZnVuY3Rpb24oc3RhcnQsIGVuZCl7CisJCXJldHVybiB0aGlzLmdldCgndmFsdWUnKS5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7CisJfSwKKworCWdldFNlbGVjdGVkVGV4dDogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UpIHJldHVybiB0aGlzLmdldFRleHRJblJhbmdlKHRoaXMuZ2V0U2VsZWN0aW9uU3RhcnQoKSwgdGhpcy5nZXRTZWxlY3Rpb25FbmQoKSk7CisJCXJldHVybiBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS50ZXh0OworCX0sCisKKwlnZXRTZWxlY3RlZFJhbmdlOiBmdW5jdGlvbigpeworCQlpZiAodGhpcy5zZWxlY3Rpb25TdGFydCAhPSBudWxsKXsKKwkJCXJldHVybiB7CisJCQkJc3RhcnQ6IHRoaXMuc2VsZWN0aW9uU3RhcnQsCisJCQkJZW5kOiB0aGlzLnNlbGVjdGlvbkVuZAorCQkJfTsKKwkJfQorCisJCXZhciBwb3MgPSB7CisJCQlzdGFydDogMCwKKwkJCWVuZDogMAorCQl9OworCQl2YXIgcmFuZ2UgPSB0aGlzLmdldERvY3VtZW50KCkuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7CisJCWlmICghcmFuZ2UgfHwgcmFuZ2UucGFyZW50RWxlbWVudCgpICE9IHRoaXMpIHJldHVybiBwb3M7CisJCXZhciBkdXBsaWNhdGUgPSByYW5nZS5kdXBsaWNhdGUoKTsKKworCQlpZiAodGhpcy50eXBlID09ICd0ZXh0Jyl7CisJCQlwb3Muc3RhcnQgPSAwIC0gZHVwbGljYXRlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgLTEwMDAwMCk7CisJCQlwb3MuZW5kID0gcG9zLnN0YXJ0ICsgcmFuZ2UudGV4dC5sZW5ndGg7CisJCX0gZWxzZSB7CisJCQl2YXIgdmFsdWUgPSB0aGlzLmdldCgndmFsdWUnKTsKKwkJCXZhciBvZmZzZXQgPSB2YWx1ZS5sZW5ndGg7CisJCQlkdXBsaWNhdGUubW92ZVRvRWxlbWVudFRleHQodGhpcyk7CisJCQlkdXBsaWNhdGUuc2V0RW5kUG9pbnQoJ1N0YXJ0VG9FbmQnLCByYW5nZSk7CisJCQlpZiAoZHVwbGljYXRlLnRleHQubGVuZ3RoKSBvZmZzZXQgLT0gdmFsdWUubWF0Y2goL1tcblxyXSokLylbMF0ubGVuZ3RoOworCQkJcG9zLmVuZCA9IG9mZnNldCAtIGR1cGxpY2F0ZS50ZXh0Lmxlbmd0aDsKKwkJCWR1cGxpY2F0ZS5zZXRFbmRQb2ludCgnU3RhcnRUb1N0YXJ0JywgcmFuZ2UpOworCQkJcG9zLnN0YXJ0ID0gb2Zmc2V0IC0gZHVwbGljYXRlLnRleHQubGVuZ3RoOworCQl9CisJCXJldHVybiBwb3M7CisJfSwKKworCWdldFNlbGVjdGlvblN0YXJ0OiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkuc3RhcnQ7CisJfSwKKworCWdldFNlbGVjdGlvbkVuZDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLmVuZDsKKwl9LAorCisJc2V0Q2FyZXRQb3NpdGlvbjogZnVuY3Rpb24ocG9zKXsKKwkJaWYgKHBvcyA9PSAnZW5kJykgcG9zID0gdGhpcy5nZXQoJ3ZhbHVlJykubGVuZ3RoOworCQl0aGlzLnNlbGVjdFJhbmdlKHBvcywgcG9zKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWdldENhcmV0UG9zaXRpb246IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKS5zdGFydDsKKwl9LAorCisJc2VsZWN0UmFuZ2U6IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpeworCQlpZiAodGhpcy5zZXRTZWxlY3Rpb25SYW5nZSl7CisJCQl0aGlzLmZvY3VzKCk7CisJCQl0aGlzLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpOworCQl9IGVsc2UgeworCQkJdmFyIHZhbHVlID0gdGhpcy5nZXQoJ3ZhbHVlJyk7CisJCQl2YXIgZGlmZiA9IHZhbHVlLnN1YnN0cihzdGFydCwgZW5kIC0gc3RhcnQpLnJlcGxhY2UoL1xyL2csICcnKS5sZW5ndGg7CisJCQlzdGFydCA9IHZhbHVlLnN1YnN0cigwLCBzdGFydCkucmVwbGFjZSgvXHIvZywgJycpLmxlbmd0aDsKKwkJCXZhciByYW5nZSA9IHRoaXMuY3JlYXRlVGV4dFJhbmdlKCk7CisJCQlyYW5nZS5jb2xsYXBzZSh0cnVlKTsKKwkJCXJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIHN0YXJ0ICsgZGlmZik7CisJCQlyYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHN0YXJ0KTsKKwkJCXJhbmdlLnNlbGVjdCgpOworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwlpbnNlcnRBdEN1cnNvcjogZnVuY3Rpb24odmFsdWUsIHNlbGVjdCl7CisJCXZhciBwb3MgPSB0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTsKKwkJdmFyIHRleHQgPSB0aGlzLmdldCgndmFsdWUnKTsKKwkJdGhpcy5zZXQoJ3ZhbHVlJywgdGV4dC5zdWJzdHJpbmcoMCwgcG9zLnN0YXJ0KSArIHZhbHVlICsgdGV4dC5zdWJzdHJpbmcocG9zLmVuZCwgdGV4dC5sZW5ndGgpKTsKKwkJaWYgKHNlbGVjdCAhPT0gZmFsc2UpIHRoaXMuc2VsZWN0UmFuZ2UocG9zLnN0YXJ0LCBwb3Muc3RhcnQgKyB2YWx1ZS5sZW5ndGgpOworCQllbHNlIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihwb3Muc3RhcnQgKyB2YWx1ZS5sZW5ndGgpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJaW5zZXJ0QXJvdW5kQ3Vyc29yOiBmdW5jdGlvbihvcHRpb25zLCBzZWxlY3QpeworCQlvcHRpb25zID0gT2JqZWN0LmFwcGVuZCh7CisJCQliZWZvcmU6ICcnLAorCQkJZGVmYXVsdE1pZGRsZTogJycsCisJCQlhZnRlcjogJycKKwkJfSwgb3B0aW9ucyk7CisKKwkJdmFyIHZhbHVlID0gdGhpcy5nZXRTZWxlY3RlZFRleHQoKSB8fCBvcHRpb25zLmRlZmF1bHRNaWRkbGU7CisJCXZhciBwb3MgPSB0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTsKKwkJdmFyIHRleHQgPSB0aGlzLmdldCgndmFsdWUnKTsKKworCQlpZiAocG9zLnN0YXJ0ID09IHBvcy5lbmQpeworCQkJdGhpcy5zZXQoJ3ZhbHVlJywgdGV4dC5zdWJzdHJpbmcoMCwgcG9zLnN0YXJ0KSArIG9wdGlvbnMuYmVmb3JlICsgdmFsdWUgKyBvcHRpb25zLmFmdGVyICsgdGV4dC5zdWJzdHJpbmcocG9zLmVuZCwgdGV4dC5sZW5ndGgpKTsKKwkJCXRoaXMuc2VsZWN0UmFuZ2UocG9zLnN0YXJ0ICsgb3B0aW9ucy5iZWZvcmUubGVuZ3RoLCBwb3MuZW5kICsgb3B0aW9ucy5iZWZvcmUubGVuZ3RoICsgdmFsdWUubGVuZ3RoKTsKKwkJfSBlbHNlIHsKKwkJCXZhciBjdXJyZW50ID0gdGV4dC5zdWJzdHJpbmcocG9zLnN0YXJ0LCBwb3MuZW5kKTsKKwkJCXRoaXMuc2V0KCd2YWx1ZScsIHRleHQuc3Vic3RyaW5nKDAsIHBvcy5zdGFydCkgKyBvcHRpb25zLmJlZm9yZSArIGN1cnJlbnQgKyBvcHRpb25zLmFmdGVyICsgdGV4dC5zdWJzdHJpbmcocG9zLmVuZCwgdGV4dC5sZW5ndGgpKTsKKwkJCXZhciBzZWxTdGFydCA9IHBvcy5zdGFydCArIG9wdGlvbnMuYmVmb3JlLmxlbmd0aDsKKwkJCWlmIChzZWxlY3QgIT09IGZhbHNlKSB0aGlzLnNlbGVjdFJhbmdlKHNlbFN0YXJ0LCBzZWxTdGFydCArIGN1cnJlbnQubGVuZ3RoKTsKKwkJCWVsc2UgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHNlbFN0YXJ0ICsgdGV4dC5sZW5ndGgpOworCQl9CisJCXJldHVybiB0aGlzOworCX0KKworfSk7CisKKy8qCistLS0KKworc2NyaXB0OiBFbGVtZW50LlBpbi5qcworCituYW1lOiBFbGVtZW50LlBpbgorCitkZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgRWxlbWVudCBuYXRpdmUgb2JqZWN0IHRvIGluY2x1ZGUgdGhlIHBpbiBtZXRob2QgdXNlZnVsIGZvciBmaXhlZCBwb3NpdGlvbmluZyBmb3IgZWxlbWVudHMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisKK3JlcXVpcmVzOgorICAtIENvcmUvRWxlbWVudC5FdmVudAorICAtIENvcmUvRWxlbWVudC5EaW1lbnNpb25zCisgIC0gQ29yZS9FbGVtZW50LlN0eWxlCisgIC0gTW9vVG9vbHMuTW9yZQorCitwcm92aWRlczogW0VsZW1lbnQuUGluXQorCisuLi4KKyovCisKKyhmdW5jdGlvbigpewordmFyIHN1cHBvcnRzUG9zaXRpb25GaXhlZCA9IGZhbHNlLAorCXN1cHBvcnRUZXN0ZWQgPSBmYWxzZTsKKwordmFyIHRlc3RQb3NpdGlvbkZpeGVkID0gZnVuY3Rpb24oKXsKKwl2YXIgdGVzdCA9IG5ldyBFbGVtZW50KCdkaXYnKS5zZXRTdHlsZXMoeworCQlwb3NpdGlvbjogJ2ZpeGVkJywKKwkJdG9wOiAwLAorCQlyaWdodDogMAorCX0pLmluamVjdChkb2N1bWVudC5ib2R5KTsKKwlzdXBwb3J0c1Bvc2l0aW9uRml4ZWQgPSAodGVzdC5vZmZzZXRUb3AgPT09IDApOworCXRlc3QuZGlzcG9zZSgpOworCXN1cHBvcnRUZXN0ZWQgPSB0cnVlOworfTsKKworRWxlbWVudC5pbXBsZW1lbnQoeworCisJcGluOiBmdW5jdGlvbihlbmFibGUsIGZvcmNlU2Nyb2xsKXsKKwkJaWYgKCFzdXBwb3J0VGVzdGVkKSB0ZXN0UG9zaXRpb25GaXhlZCgpOworCQlpZiAodGhpcy5nZXRTdHlsZSgnZGlzcGxheScpID09ICdub25lJykgcmV0dXJuIHRoaXM7CisKKwkJdmFyIHBpbm5lZFBvc2l0aW9uLAorCQkJc2Nyb2xsID0gd2luZG93LmdldFNjcm9sbCgpLAorCQkJcGFyZW50LAorCQkJc2Nyb2xsRml4ZXI7CisKKwkJaWYgKGVuYWJsZSAhPT0gZmFsc2UpeworCQkJcGlubmVkUG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uKCk7CisJCQlpZiAoIXRoaXMucmV0cmlldmUoJ3BpbjpfcGlubmVkJykpeworCQkJCXZhciBjdXJyZW50UG9zaXRpb24gPSB7CisJCQkJCXRvcDogcGlubmVkUG9zaXRpb24ueSAtIHNjcm9sbC55LAorCQkJCQlsZWZ0OiBwaW5uZWRQb3NpdGlvbi54IC0gc2Nyb2xsLngsCisJCQkJCW1hcmdpbjogJzBweCcsCisJCQkJCXBhZGRpbmc6ICcwcHgnCisJCQkJfTsKKworCQkJCWlmIChzdXBwb3J0c1Bvc2l0aW9uRml4ZWQgJiYgIWZvcmNlU2Nyb2xsKXsKKwkJCQkJdGhpcy5zZXRTdHlsZSgncG9zaXRpb24nLCAnZml4ZWQnKS5zZXRTdHlsZXMoY3VycmVudFBvc2l0aW9uKTsKKwkJCQl9IGVsc2UgeworCisJCQkJCXBhcmVudCA9IHRoaXMuZ2V0T2Zmc2V0UGFyZW50KCk7CisJCQkJCXZhciBwb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRpb24ocGFyZW50KSwKKwkJCQkJCXN0eWxlcyA9IHRoaXMuZ2V0U3R5bGVzKCdsZWZ0JywgJ3RvcCcpOworCisJCQkJCWlmIChwYXJlbnQgJiYgc3R5bGVzLmxlZnQgPT0gJ2F1dG8nIHx8IHN0eWxlcy50b3AgPT0gJ2F1dG8nKSB0aGlzLnNldFBvc2l0aW9uKHBvc2l0aW9uKTsKKwkJCQkJaWYgKHRoaXMuZ2V0U3R5bGUoJ3Bvc2l0aW9uJykgPT0gJ3N0YXRpYycpIHRoaXMuc2V0U3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJyk7CisKKwkJCQkJcG9zaXRpb24gPSB7CisJCQkJCQl4OiBzdHlsZXMubGVmdC50b0ludCgpIC0gc2Nyb2xsLngsCisJCQkJCQl5OiBzdHlsZXMudG9wLnRvSW50KCkgLSBzY3JvbGwueQorCQkJCQl9OworCisJCQkJCXNjcm9sbEZpeGVyID0gZnVuY3Rpb24oKXsKKwkJCQkJCWlmICghdGhpcy5yZXRyaWV2ZSgncGluOl9waW5uZWQnKSkgcmV0dXJuOworCQkJCQkJdmFyIHNjcm9sbCA9IHdpbmRvdy5nZXRTY3JvbGwoKTsKKwkJCQkJCXRoaXMuc2V0U3R5bGVzKHsKKwkJCQkJCQlsZWZ0OiBwb3NpdGlvbi54ICsgc2Nyb2xsLngsCisJCQkJCQkJdG9wOiBwb3NpdGlvbi55ICsgc2Nyb2xsLnkKKwkJCQkJCX0pOworCQkJCQl9LmJpbmQodGhpcyk7CisKKwkJCQkJdGhpcy5zdG9yZSgncGluOl9zY3JvbGxGaXhlcicsIHNjcm9sbEZpeGVyKTsKKwkJCQkJd2luZG93LmFkZEV2ZW50KCdzY3JvbGwnLCBzY3JvbGxGaXhlcik7CisJCQkJfQorCQkJCXRoaXMuc3RvcmUoJ3BpbjpfcGlubmVkJywgdHJ1ZSk7CisJCQl9CisKKwkJfSBlbHNlIHsKKwkJCWlmICghdGhpcy5yZXRyaWV2ZSgncGluOl9waW5uZWQnKSkgcmV0dXJuIHRoaXM7CisKKwkJCXBhcmVudCA9IHRoaXMuZ2V0UGFyZW50KCk7CisJCQl2YXIgb2Zmc2V0UGFyZW50ID0gKHBhcmVudC5nZXRDb21wdXRlZFN0eWxlKCdwb3NpdGlvbicpICE9ICdzdGF0aWMnID8gcGFyZW50IDogcGFyZW50LmdldE9mZnNldFBhcmVudCgpKTsKKworCQkJcGlubmVkUG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uKCk7CisKKwkJCXRoaXMuc3RvcmUoJ3BpbjpfcGlubmVkJywgZmFsc2UpOworCQkJc2Nyb2xsRml4ZXIgPSB0aGlzLnJldHJpZXZlKCdwaW46X3Njcm9sbEZpeGVyJyk7CisJCQlpZiAoIXNjcm9sbEZpeGVyKXsKKwkJCQl0aGlzLnNldFN0eWxlcyh7CisJCQkJCXBvc2l0aW9uOiAnYWJzb2x1dGUnLAorCQkJCQl0b3A6IHBpbm5lZFBvc2l0aW9uLnkgKyBzY3JvbGwueSwKKwkJCQkJbGVmdDogcGlubmVkUG9zaXRpb24ueCArIHNjcm9sbC54CisJCQkJfSk7CisJCQl9IGVsc2UgeworCQkJCXRoaXMuc3RvcmUoJ3Bpbjpfc2Nyb2xsRml4ZXInLCBudWxsKTsKKwkJCQl3aW5kb3cucmVtb3ZlRXZlbnQoJ3Njcm9sbCcsIHNjcm9sbEZpeGVyKTsKKwkJCX0KKwkJCXRoaXMucmVtb3ZlQ2xhc3MoJ2lzUGlubmVkJyk7CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXVucGluOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5waW4oZmFsc2UpOworCX0sCisKKwl0b2dnbGVQaW46IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLnBpbighdGhpcy5yZXRyaWV2ZSgncGluOl9waW5uZWQnKSk7CisJfQorCit9KTsKKworCisKK30pKCk7CisKKy8qCistLS0KKworc2NyaXB0OiBFbGVtZW50LlBvc2l0aW9uLmpzCisKK25hbWU6IEVsZW1lbnQuUG9zaXRpb24KKworZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIEVsZW1lbnQgbmF0aXZlIG9iamVjdCB0byBpbmNsdWRlIG1ldGhvZHMgdXNlZnVsIHBvc2l0aW9uaW5nIGVsZW1lbnRzIHJlbGF0aXZlIHRvIG90aGVycy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKyAgLSBKYWNvYiBUaG9ybnRvbgorCityZXF1aXJlczoKKyAgLSBDb3JlL09wdGlvbnMKKyAgLSBDb3JlL0VsZW1lbnQuRGltZW5zaW9ucworICAtIEVsZW1lbnQuTWVhc3VyZQorCitwcm92aWRlczogW0VsZW1lbnQuUG9zaXRpb25dCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKG9yaWdpbmFsKXsKKwordmFyIGxvY2FsID0gRWxlbWVudC5Qb3NpdGlvbiA9IHsKKworCW9wdGlvbnM6IHsvKgorCQllZGdlOiBmYWxzZSwKKwkJcmV0dXJuUG9zOiBmYWxzZSwKKwkJbWluaW11bToge3g6IDAsIHk6IDB9LAorCQltYXhpbXVtOiB7eDogMCwgeTogMH0sCisJCXJlbEZpeGVkUG9zaXRpb246IGZhbHNlLAorCQlpZ25vcmVNYXJnaW5zOiBmYWxzZSwKKwkJaWdub3JlU2Nyb2xsOiBmYWxzZSwKKwkJYWxsb3dOZWdhdGl2ZTogZmFsc2UsKi8KKwkJcmVsYXRpdmVUbzogZG9jdW1lbnQuYm9keSwKKwkJcG9zaXRpb246IHsKKwkJCXg6ICdjZW50ZXInLCAvL2xlZnQsIGNlbnRlciwgcmlnaHQKKwkJCXk6ICdjZW50ZXInIC8vdG9wLCBjZW50ZXIsIGJvdHRvbQorCQl9LAorCQlvZmZzZXQ6IHt4OiAwLCB5OiAwfQorCX0sCisKKwlnZXRPcHRpb25zOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXsKKwkJb3B0aW9ucyA9IE9iamVjdC5tZXJnZSh7fSwgbG9jYWwub3B0aW9ucywgb3B0aW9ucyk7CisJCWxvY2FsLnNldFBvc2l0aW9uT3B0aW9uKG9wdGlvbnMpOworCQlsb2NhbC5zZXRFZGdlT3B0aW9uKG9wdGlvbnMpOworCQlsb2NhbC5zZXRPZmZzZXRPcHRpb24oZWxlbWVudCwgb3B0aW9ucyk7CisJCWxvY2FsLnNldERpbWVuc2lvbnNPcHRpb24oZWxlbWVudCwgb3B0aW9ucyk7CisJCXJldHVybiBvcHRpb25zOworCX0sCisKKwlzZXRQb3NpdGlvbk9wdGlvbjogZnVuY3Rpb24ob3B0aW9ucyl7CisJCW9wdGlvbnMucG9zaXRpb24gPSBsb2NhbC5nZXRDb29yZGluYXRlRnJvbVZhbHVlKG9wdGlvbnMucG9zaXRpb24pOworCX0sCisKKwlzZXRFZGdlT3B0aW9uOiBmdW5jdGlvbihvcHRpb25zKXsKKwkJdmFyIGVkZ2VPcHRpb24gPSBsb2NhbC5nZXRDb29yZGluYXRlRnJvbVZhbHVlKG9wdGlvbnMuZWRnZSk7CisJCW9wdGlvbnMuZWRnZSA9IGVkZ2VPcHRpb24gPyBlZGdlT3B0aW9uIDoKKwkJCShvcHRpb25zLnBvc2l0aW9uLnggPT0gJ2NlbnRlcicgJiYgb3B0aW9ucy5wb3NpdGlvbi55ID09ICdjZW50ZXInKSA/IHt4OiAnY2VudGVyJywgeTogJ2NlbnRlcid9IDoKKwkJCXt4OiAnbGVmdCcsIHk6ICd0b3AnfTsKKwl9LAorCisJc2V0T2Zmc2V0T3B0aW9uOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXsKKwkJdmFyIHBhcmVudE9mZnNldCA9IHt4OiAwLCB5OiAwfTsKKwkJdmFyIHBhcmVudFNjcm9sbCA9IHt4OiAwLCB5OiAwfTsKKwkJdmFyIG9mZnNldFBhcmVudCA9IGVsZW1lbnQubWVhc3VyZShmdW5jdGlvbigpeworCQkJcmV0dXJuIGRvY3VtZW50LmlkKHRoaXMuZ2V0T2Zmc2V0UGFyZW50KCkpOworCQl9KTsKKworCQlpZiAoIW9mZnNldFBhcmVudCB8fCBvZmZzZXRQYXJlbnQgPT0gZWxlbWVudC5nZXREb2N1bWVudCgpLmJvZHkpIHJldHVybjsKKworCQlwYXJlbnRTY3JvbGwgPSBvZmZzZXRQYXJlbnQuZ2V0U2Nyb2xsKCk7CisJCXBhcmVudE9mZnNldCA9IG9mZnNldFBhcmVudC5tZWFzdXJlKGZ1bmN0aW9uKCl7CisJCQl2YXIgcG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uKCk7CisJCQlpZiAodGhpcy5nZXRTdHlsZSgncG9zaXRpb24nKSA9PSAnZml4ZWQnKXsKKwkJCQl2YXIgc2Nyb2xsID0gd2luZG93LmdldFNjcm9sbCgpOworCQkJCXBvc2l0aW9uLnggKz0gc2Nyb2xsLng7CisJCQkJcG9zaXRpb24ueSArPSBzY3JvbGwueTsKKwkJCX0KKwkJCXJldHVybiBwb3NpdGlvbjsKKwkJfSk7CisKKwkJb3B0aW9ucy5vZmZzZXQgPSB7CisJCQlwYXJlbnRQb3NpdGlvbmVkOiBvZmZzZXRQYXJlbnQgIT0gZG9jdW1lbnQuaWQob3B0aW9ucy5yZWxhdGl2ZVRvKSwKKwkJCXg6IG9wdGlvbnMub2Zmc2V0LnggLSBwYXJlbnRPZmZzZXQueCArIHBhcmVudFNjcm9sbC54LAorCQkJeTogb3B0aW9ucy5vZmZzZXQueSAtIHBhcmVudE9mZnNldC55ICsgcGFyZW50U2Nyb2xsLnkKKwkJfTsKKwl9LAorCisJc2V0RGltZW5zaW9uc09wdGlvbjogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucyl7CisJCW9wdGlvbnMuZGltZW5zaW9ucyA9IGVsZW1lbnQuZ2V0RGltZW5zaW9ucyh7CisJCQljb21wdXRlU2l6ZTogdHJ1ZSwKKwkJCXN0eWxlczogWydwYWRkaW5nJywgJ2JvcmRlcicsICdtYXJnaW4nXQorCQl9KTsKKwl9LAorCisJZ2V0UG9zaXRpb246IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpeworCQl2YXIgcG9zaXRpb24gPSB7fTsKKwkJb3B0aW9ucyA9IGxvY2FsLmdldE9wdGlvbnMoZWxlbWVudCwgb3B0aW9ucyk7CisJCXZhciByZWxhdGl2ZVRvID0gZG9jdW1lbnQuaWQob3B0aW9ucy5yZWxhdGl2ZVRvKSB8fCBkb2N1bWVudC5ib2R5OworCisJCWxvY2FsLnNldFBvc2l0aW9uQ29vcmRpbmF0ZXMob3B0aW9ucywgcG9zaXRpb24sIHJlbGF0aXZlVG8pOworCQlpZiAob3B0aW9ucy5lZGdlKSBsb2NhbC50b0VkZ2UocG9zaXRpb24sIG9wdGlvbnMpOworCisJCXZhciBvZmZzZXQgPSBvcHRpb25zLm9mZnNldDsKKwkJcG9zaXRpb24ubGVmdCA9ICgocG9zaXRpb24ueCA+PSAwIHx8IG9mZnNldC5wYXJlbnRQb3NpdGlvbmVkIHx8IG9wdGlvbnMuYWxsb3dOZWdhdGl2ZSkgPyBwb3NpdGlvbi54IDogMCkudG9JbnQoKTsKKwkJcG9zaXRpb24udG9wID0gKChwb3NpdGlvbi55ID49IDAgfHwgb2Zmc2V0LnBhcmVudFBvc2l0aW9uZWQgfHwgb3B0aW9ucy5hbGxvd05lZ2F0aXZlKSA/IHBvc2l0aW9uLnkgOiAwKS50b0ludCgpOworCisJCWxvY2FsLnRvTWluTWF4KHBvc2l0aW9uLCBvcHRpb25zKTsKKworCQlpZiAob3B0aW9ucy5yZWxGaXhlZFBvc2l0aW9uIHx8IHJlbGF0aXZlVG8uZ2V0U3R5bGUoJ3Bvc2l0aW9uJykgPT0gJ2ZpeGVkJykgbG9jYWwudG9SZWxGaXhlZFBvc2l0aW9uKHJlbGF0aXZlVG8sIHBvc2l0aW9uKTsKKwkJaWYgKG9wdGlvbnMuaWdub3JlU2Nyb2xsKSBsb2NhbC50b0lnbm9yZVNjcm9sbChyZWxhdGl2ZVRvLCBwb3NpdGlvbik7CisJCWlmIChvcHRpb25zLmlnbm9yZU1hcmdpbnMpIGxvY2FsLnRvSWdub3JlTWFyZ2lucyhwb3NpdGlvbiwgb3B0aW9ucyk7CisKKwkJcG9zaXRpb24ubGVmdCA9IE1hdGguY2VpbChwb3NpdGlvbi5sZWZ0KTsKKwkJcG9zaXRpb24udG9wID0gTWF0aC5jZWlsKHBvc2l0aW9uLnRvcCk7CisJCWRlbGV0ZSBwb3NpdGlvbi54OworCQlkZWxldGUgcG9zaXRpb24ueTsKKworCQlyZXR1cm4gcG9zaXRpb247CisJfSwKKworCXNldFBvc2l0aW9uQ29vcmRpbmF0ZXM6IGZ1bmN0aW9uKG9wdGlvbnMsIHBvc2l0aW9uLCByZWxhdGl2ZVRvKXsKKwkJdmFyIG9mZnNldFkgPSBvcHRpb25zLm9mZnNldC55LAorCQkJb2Zmc2V0WCA9IG9wdGlvbnMub2Zmc2V0LngsCisJCQljYWxjID0gKHJlbGF0aXZlVG8gPT0gZG9jdW1lbnQuYm9keSkgPyB3aW5kb3cuZ2V0U2Nyb2xsKCkgOiByZWxhdGl2ZVRvLmdldFBvc2l0aW9uKCksCisJCQl0b3AgPSBjYWxjLnksCisJCQlsZWZ0ID0gY2FsYy54LAorCQkJd2luU2l6ZSA9IHdpbmRvdy5nZXRTaXplKCk7CisKKwkJc3dpdGNoIChvcHRpb25zLnBvc2l0aW9uLngpeworCQkJY2FzZSAnbGVmdCc6IHBvc2l0aW9uLnggPSBsZWZ0ICsgb2Zmc2V0WDsgYnJlYWs7CisJCQljYXNlICdyaWdodCc6IHBvc2l0aW9uLnggPSBsZWZ0ICsgb2Zmc2V0WCArIHJlbGF0aXZlVG8ub2Zmc2V0V2lkdGg7IGJyZWFrOworCQkJZGVmYXVsdDogcG9zaXRpb24ueCA9IGxlZnQgKyAoKHJlbGF0aXZlVG8gPT0gZG9jdW1lbnQuYm9keSA/IHdpblNpemUueCA6IHJlbGF0aXZlVG8ub2Zmc2V0V2lkdGgpIC8gMikgKyBvZmZzZXRYOyBicmVhazsKKwkJfQorCisJCXN3aXRjaCAob3B0aW9ucy5wb3NpdGlvbi55KXsKKwkJCWNhc2UgJ3RvcCc6IHBvc2l0aW9uLnkgPSB0b3AgKyBvZmZzZXRZOyBicmVhazsKKwkJCWNhc2UgJ2JvdHRvbSc6IHBvc2l0aW9uLnkgPSB0b3AgKyBvZmZzZXRZICsgcmVsYXRpdmVUby5vZmZzZXRIZWlnaHQ7IGJyZWFrOworCQkJZGVmYXVsdDogcG9zaXRpb24ueSA9IHRvcCArICgocmVsYXRpdmVUbyA9PSBkb2N1bWVudC5ib2R5ID8gd2luU2l6ZS55IDogcmVsYXRpdmVUby5vZmZzZXRIZWlnaHQpIC8gMikgKyBvZmZzZXRZOyBicmVhazsKKwkJfQorCX0sCisKKwl0b01pbk1heDogZnVuY3Rpb24ocG9zaXRpb24sIG9wdGlvbnMpeworCQl2YXIgeHkgPSB7bGVmdDogJ3gnLCB0b3A6ICd5J30sIHZhbHVlOworCQlbJ21pbmltdW0nLCAnbWF4aW11bSddLmVhY2goZnVuY3Rpb24obWlubWF4KXsKKwkJCVsnbGVmdCcsICd0b3AnXS5lYWNoKGZ1bmN0aW9uKGxyKXsKKwkJCQl2YWx1ZSA9IG9wdGlvbnNbbWlubWF4XSA/IG9wdGlvbnNbbWlubWF4XVt4eVtscl1dIDogbnVsbDsKKwkJCQlpZiAodmFsdWUgIT0gbnVsbCAmJiAoKG1pbm1heCA9PSAnbWluaW11bScpID8gcG9zaXRpb25bbHJdIDwgdmFsdWUgOiBwb3NpdGlvbltscl0gPiB2YWx1ZSkpIHBvc2l0aW9uW2xyXSA9IHZhbHVlOworCQkJfSk7CisJCX0pOworCX0sCisKKwl0b1JlbEZpeGVkUG9zaXRpb246IGZ1bmN0aW9uKHJlbGF0aXZlVG8sIHBvc2l0aW9uKXsKKwkJdmFyIHdpblNjcm9sbCA9IHdpbmRvdy5nZXRTY3JvbGwoKTsKKwkJcG9zaXRpb24udG9wICs9IHdpblNjcm9sbC55OworCQlwb3NpdGlvbi5sZWZ0ICs9IHdpblNjcm9sbC54OworCX0sCisKKwl0b0lnbm9yZVNjcm9sbDogZnVuY3Rpb24ocmVsYXRpdmVUbywgcG9zaXRpb24peworCQl2YXIgcmVsU2Nyb2xsID0gcmVsYXRpdmVUby5nZXRTY3JvbGwoKTsKKwkJcG9zaXRpb24udG9wIC09IHJlbFNjcm9sbC55OworCQlwb3NpdGlvbi5sZWZ0IC09IHJlbFNjcm9sbC54OworCX0sCisKKwl0b0lnbm9yZU1hcmdpbnM6IGZ1bmN0aW9uKHBvc2l0aW9uLCBvcHRpb25zKXsKKwkJcG9zaXRpb24ubGVmdCArPSBvcHRpb25zLmVkZ2UueCA9PSAncmlnaHQnCisJCQk/IG9wdGlvbnMuZGltZW5zaW9uc1snbWFyZ2luLXJpZ2h0J10KKwkJCTogKG9wdGlvbnMuZWRnZS54ICE9ICdjZW50ZXInCisJCQkJPyAtb3B0aW9ucy5kaW1lbnNpb25zWydtYXJnaW4tbGVmdCddCisJCQkJOiAtb3B0aW9ucy5kaW1lbnNpb25zWydtYXJnaW4tbGVmdCddICsgKChvcHRpb25zLmRpbWVuc2lvbnNbJ21hcmdpbi1yaWdodCddICsgb3B0aW9ucy5kaW1lbnNpb25zWydtYXJnaW4tbGVmdCddKSAvIDIpKTsKKworCQlwb3NpdGlvbi50b3AgKz0gb3B0aW9ucy5lZGdlLnkgPT0gJ2JvdHRvbScKKwkJCT8gb3B0aW9ucy5kaW1lbnNpb25zWydtYXJnaW4tYm90dG9tJ10KKwkJCTogKG9wdGlvbnMuZWRnZS55ICE9ICdjZW50ZXInCisJCQkJPyAtb3B0aW9ucy5kaW1lbnNpb25zWydtYXJnaW4tdG9wJ10KKwkJCQk6IC1vcHRpb25zLmRpbWVuc2lvbnNbJ21hcmdpbi10b3AnXSArICgob3B0aW9ucy5kaW1lbnNpb25zWydtYXJnaW4tYm90dG9tJ10gKyBvcHRpb25zLmRpbWVuc2lvbnNbJ21hcmdpbi10b3AnXSkgLyAyKSk7CisJfSwKKworCXRvRWRnZTogZnVuY3Rpb24ocG9zaXRpb24sIG9wdGlvbnMpeworCQl2YXIgZWRnZU9mZnNldCA9IHt9LAorCQkJZGltZW5zaW9ucyA9IG9wdGlvbnMuZGltZW5zaW9ucywKKwkJCWVkZ2UgPSBvcHRpb25zLmVkZ2U7CisKKwkJc3dpdGNoIChlZGdlLngpeworCQkJY2FzZSAnbGVmdCc6IGVkZ2VPZmZzZXQueCA9IDA7IGJyZWFrOworCQkJY2FzZSAncmlnaHQnOiBlZGdlT2Zmc2V0LnggPSAtZGltZW5zaW9ucy54IC0gZGltZW5zaW9ucy5jb21wdXRlZFJpZ2h0IC0gZGltZW5zaW9ucy5jb21wdXRlZExlZnQ7IGJyZWFrOworCQkJLy8gY2VudGVyCisJCQlkZWZhdWx0OiBlZGdlT2Zmc2V0LnggPSAtKE1hdGgucm91bmQoZGltZW5zaW9ucy50b3RhbFdpZHRoIC8gMikpOyBicmVhazsKKwkJfQorCisJCXN3aXRjaCAoZWRnZS55KXsKKwkJCWNhc2UgJ3RvcCc6IGVkZ2VPZmZzZXQueSA9IDA7IGJyZWFrOworCQkJY2FzZSAnYm90dG9tJzogZWRnZU9mZnNldC55ID0gLWRpbWVuc2lvbnMueSAtIGRpbWVuc2lvbnMuY29tcHV0ZWRUb3AgLSBkaW1lbnNpb25zLmNvbXB1dGVkQm90dG9tOyBicmVhazsKKwkJCS8vIGNlbnRlcgorCQkJZGVmYXVsdDogZWRnZU9mZnNldC55ID0gLShNYXRoLnJvdW5kKGRpbWVuc2lvbnMudG90YWxIZWlnaHQgLyAyKSk7IGJyZWFrOworCQl9CisKKwkJcG9zaXRpb24ueCArPSBlZGdlT2Zmc2V0Lng7CisJCXBvc2l0aW9uLnkgKz0gZWRnZU9mZnNldC55OworCX0sCisKKwlnZXRDb29yZGluYXRlRnJvbVZhbHVlOiBmdW5jdGlvbihvcHRpb24peworCQlpZiAodHlwZU9mKG9wdGlvbikgIT0gJ3N0cmluZycpIHJldHVybiBvcHRpb247CisJCW9wdGlvbiA9IG9wdGlvbi50b0xvd2VyQ2FzZSgpOworCisJCXJldHVybiB7CisJCQl4OiBvcHRpb24udGVzdCgnbGVmdCcpID8gJ2xlZnQnCisJCQkJOiAob3B0aW9uLnRlc3QoJ3JpZ2h0JykgPyAncmlnaHQnIDogJ2NlbnRlcicpLAorCQkJeTogb3B0aW9uLnRlc3QoL3VwcGVyfHRvcC8pID8gJ3RvcCcKKwkJCQk6IChvcHRpb24udGVzdCgnYm90dG9tJykgPyAnYm90dG9tJyA6ICdjZW50ZXInKQorCQl9OworCX0KKworfTsKKworRWxlbWVudC5pbXBsZW1lbnQoeworCisJcG9zaXRpb246IGZ1bmN0aW9uKG9wdGlvbnMpeworCQlpZiAob3B0aW9ucyAmJiAob3B0aW9ucy54ICE9IG51bGwgfHwgb3B0aW9ucy55ICE9IG51bGwpKXsKKwkJCXJldHVybiAob3JpZ2luYWwgPyBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogdGhpcyk7CisJCX0KKwkJdmFyIHBvc2l0aW9uID0gdGhpcy5zZXRTdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKS5jYWxjdWxhdGVQb3NpdGlvbihvcHRpb25zKTsKKwkJcmV0dXJuIChvcHRpb25zICYmIG9wdGlvbnMucmV0dXJuUG9zKSA/IHBvc2l0aW9uIDogdGhpcy5zZXRTdHlsZXMocG9zaXRpb24pOworCX0sCisKKwljYWxjdWxhdGVQb3NpdGlvbjogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXJldHVybiBsb2NhbC5nZXRQb3NpdGlvbih0aGlzLCBvcHRpb25zKTsKKwl9CisKK30pOworCit9KShFbGVtZW50LnByb3RvdHlwZS5wb3NpdGlvbik7CisKKy8qCistLS0KKworc2NyaXB0OiBFbGVtZW50LlNob3J0Y3V0cy5qcworCituYW1lOiBFbGVtZW50LlNob3J0Y3V0cworCitkZXNjcmlwdGlvbjogRXh0ZW5kcyB0aGUgRWxlbWVudCBuYXRpdmUgb2JqZWN0IHRvIGluY2x1ZGUgc29tZSBzaG9ydGN1dCBtZXRob2RzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSBDb3JlL0VsZW1lbnQuU3R5bGUKKyAgLSBNb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbRWxlbWVudC5TaG9ydGN1dHNdCisKKy4uLgorKi8KKworRWxlbWVudC5pbXBsZW1lbnQoeworCisJaXNEaXNwbGF5ZWQ6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLmdldFN0eWxlKCdkaXNwbGF5JykgIT0gJ25vbmUnOworCX0sCisKKwlpc1Zpc2libGU6IGZ1bmN0aW9uKCl7CisJCXZhciB3ID0gdGhpcy5vZmZzZXRXaWR0aCwKKwkJCWggPSB0aGlzLm9mZnNldEhlaWdodDsKKwkJcmV0dXJuICh3ID09IDAgJiYgaCA9PSAwKSA/IGZhbHNlIDogKHcgPiAwICYmIGggPiAwKSA/IHRydWUgOiB0aGlzLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnOworCX0sCisKKwl0b2dnbGU6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzW3RoaXMuaXNEaXNwbGF5ZWQoKSA/ICdoaWRlJyA6ICdzaG93J10oKTsKKwl9LAorCisJaGlkZTogZnVuY3Rpb24oKXsKKwkJdmFyIGQ7CisJCXRyeSB7CisJCQkvL0lFIGZhaWxzIGhlcmUgaWYgdGhlIGVsZW1lbnQgaXMgbm90IGluIHRoZSBkb20KKwkJCWQgPSB0aGlzLmdldFN0eWxlKCdkaXNwbGF5Jyk7CisJCX0gY2F0Y2ggKGUpe30KKwkJaWYgKGQgPT0gJ25vbmUnKSByZXR1cm4gdGhpczsKKwkJcmV0dXJuIHRoaXMuc3RvcmUoJ2VsZW1lbnQ6X29yaWdpbmFsRGlzcGxheScsIGQgfHwgJycpLnNldFN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTsKKwl9LAorCisJc2hvdzogZnVuY3Rpb24oZGlzcGxheSl7CisJCWlmICghZGlzcGxheSAmJiB0aGlzLmlzRGlzcGxheWVkKCkpIHJldHVybiB0aGlzOworCQlkaXNwbGF5ID0gZGlzcGxheSB8fCB0aGlzLnJldHJpZXZlKCdlbGVtZW50Ol9vcmlnaW5hbERpc3BsYXknKSB8fCAnYmxvY2snOworCQlyZXR1cm4gdGhpcy5zZXRTdHlsZSgnZGlzcGxheScsIChkaXNwbGF5ID09ICdub25lJykgPyAnYmxvY2snIDogZGlzcGxheSk7CisJfSwKKworCXN3YXBDbGFzczogZnVuY3Rpb24ocmVtb3ZlLCBhZGQpeworCQlyZXR1cm4gdGhpcy5yZW1vdmVDbGFzcyhyZW1vdmUpLmFkZENsYXNzKGFkZCk7CisJfQorCit9KTsKKworRG9jdW1lbnQuaW1wbGVtZW50KHsKKworCWNsZWFyU2VsZWN0aW9uOiBmdW5jdGlvbigpeworCQlpZiAod2luZG93LmdldFNlbGVjdGlvbil7CisJCQl2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOworCQkJaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKSBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7CisJCX0gZWxzZSBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uICYmIGRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSl7CisJCQl0cnkgeworCQkJCS8vSUUgZmFpbHMgaGVyZSBpZiBzZWxlY3RlZCBlbGVtZW50IGlzIG5vdCBpbiBkb20KKwkJCQlkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkoKTsKKwkJCX0gY2F0Y2ggKGUpe30KKwkJfQorCX0KKworfSk7CisKKy8qCistLS0KKworc2NyaXB0OiBFbGVtZW50cy5Gcm9tLmpzCisKK25hbWU6IEVsZW1lbnRzLkZyb20KKworZGVzY3JpcHRpb246IFJldHVybnMgYSBjb2xsZWN0aW9uIG9mIGVsZW1lbnRzIGZyb20gYSBzdHJpbmcgb2YgaHRtbC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9TdHJpbmcKKyAgLSBDb3JlL0VsZW1lbnQKKyAgLSBNb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbRWxlbWVudHMuZnJvbSwgRWxlbWVudHMuRnJvbV0KKworLi4uCisqLworCitFbGVtZW50cy5mcm9tID0gZnVuY3Rpb24odGV4dCwgZXhjbHVkZVNjcmlwdHMpeworCWlmIChleGNsdWRlU2NyaXB0cyB8fCBleGNsdWRlU2NyaXB0cyA9PSBudWxsKSB0ZXh0ID0gdGV4dC5zdHJpcFNjcmlwdHMoKTsKKworCXZhciBjb250YWluZXIsIG1hdGNoID0gdGV4dC5tYXRjaCgvXlxzKig/OjwhLS0uKj8tLT5ccyopKjwodFtkaHJdfHRib2R5fHRmb290fHRoZWFkKS9pKTsKKworCWlmIChtYXRjaCl7CisJCWNvbnRhaW5lciA9IG5ldyBFbGVtZW50KCd0YWJsZScpOworCQl2YXIgdGFnID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTsKKwkJaWYgKFsndGQnLCAndGgnLCAndHInXS5jb250YWlucyh0YWcpKXsKKwkJCWNvbnRhaW5lciA9IG5ldyBFbGVtZW50KCd0Ym9keScpLmluamVjdChjb250YWluZXIpOworCQkJaWYgKHRhZyAhPSAndHInKSBjb250YWluZXIgPSBuZXcgRWxlbWVudCgndHInKS5pbmplY3QoY29udGFpbmVyKTsKKwkJfQorCX0KKworCXJldHVybiAoY29udGFpbmVyIHx8IG5ldyBFbGVtZW50KCdkaXYnKSkuc2V0KCdodG1sJywgdGV4dCkuZ2V0Q2hpbGRyZW4oKTsKK307CisKKy8qCistLS0KKworc2NyaXB0OiBJZnJhbWVTaGltLmpzCisKK25hbWU6IElmcmFtZVNoaW0KKworZGVzY3JpcHRpb246IERlZmluZXMgSWZyYW1lU2hpbSwgYSBjbGFzcyBmb3Igb2JzY3VyaW5nIHNlbGVjdCBsaXN0cyBhbmQgZmxhc2ggb2JqZWN0cyBpbiBJRS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9FbGVtZW50LkV2ZW50CisgIC0gQ29yZS9FbGVtZW50LlN0eWxlCisgIC0gQ29yZS9PcHRpb25zCisgIC0gQ29yZS9FdmVudHMKKyAgLSBFbGVtZW50LlBvc2l0aW9uCisgIC0gQ2xhc3MuT2NjbHVkZQorCitwcm92aWRlczogW0lmcmFtZVNoaW1dCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK3ZhciBicm93c2VycyA9IGZhbHNlOworCisKK3ZhciBJZnJhbWVTaGltID0gdGhpcy5JZnJhbWVTaGltID0gbmV3IENsYXNzKHsKKworCUltcGxlbWVudHM6IFtPcHRpb25zLCBFdmVudHMsIENsYXNzLk9jY2x1ZGVdLAorCisJb3B0aW9uczogeworCQljbGFzc05hbWU6ICdpZnJhbWVTaGltJywKKwkJc3JjOiAnamF2YXNjcmlwdDpmYWxzZTtkb2N1bWVudC53cml0ZSgiIik7JywKKwkJZGlzcGxheTogZmFsc2UsCisJCXpJbmRleDogbnVsbCwKKwkJbWFyZ2luOiAwLAorCQlvZmZzZXQ6IHt4OiAwLCB5OiAwfSwKKwkJYnJvd3NlcnM6IGJyb3dzZXJzCisJfSwKKworCXByb3BlcnR5OiAnSWZyYW1lU2hpbScsCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXsKKwkJdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuaWQoZWxlbWVudCk7CisJCWlmICh0aGlzLm9jY2x1ZGUoKSkgcmV0dXJuIHRoaXMub2NjbHVkZWQ7CisJCXRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTsKKwkJdGhpcy5tYWtlU2hpbSgpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJbWFrZVNoaW06IGZ1bmN0aW9uKCl7CisJCWlmICh0aGlzLm9wdGlvbnMuYnJvd3NlcnMpeworCQkJdmFyIHpJbmRleCA9IHRoaXMuZWxlbWVudC5nZXRTdHlsZSgnekluZGV4JykudG9JbnQoKTsKKworCQkJaWYgKCF6SW5kZXgpeworCQkJCXpJbmRleCA9IDE7CisJCQkJdmFyIHBvcyA9IHRoaXMuZWxlbWVudC5nZXRTdHlsZSgncG9zaXRpb24nKTsKKwkJCQlpZiAocG9zID09ICdzdGF0aWMnIHx8ICFwb3MpIHRoaXMuZWxlbWVudC5zZXRTdHlsZSgncG9zaXRpb24nLCAncmVsYXRpdmUnKTsKKwkJCQl0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ3pJbmRleCcsIHpJbmRleCk7CisJCQl9CisJCQl6SW5kZXggPSAoKHRoaXMub3B0aW9ucy56SW5kZXggIT0gbnVsbCB8fCB0aGlzLm9wdGlvbnMuekluZGV4ID09PSAwKSAmJiB6SW5kZXggPiB0aGlzLm9wdGlvbnMuekluZGV4KSA/IHRoaXMub3B0aW9ucy56SW5kZXggOiB6SW5kZXggLSAxOworCQkJaWYgKHpJbmRleCA8IDApIHpJbmRleCA9IDE7CisJCQl0aGlzLnNoaW0gPSBuZXcgRWxlbWVudCgnaWZyYW1lJywgeworCQkJCXNyYzogdGhpcy5vcHRpb25zLnNyYywKKwkJCQlzY3JvbGxpbmc6ICdubycsCisJCQkJZnJhbWVib3JkZXI6IDAsCisJCQkJc3R5bGVzOiB7CisJCQkJCXpJbmRleDogekluZGV4LAorCQkJCQlwb3NpdGlvbjogJ2Fic29sdXRlJywKKwkJCQkJYm9yZGVyOiAnbm9uZScsCisJCQkJCWZpbHRlcjogJ3Byb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShzdHlsZT0wLG9wYWNpdHk9MCknCisJCQkJfSwKKwkJCQknY2xhc3MnOiB0aGlzLm9wdGlvbnMuY2xhc3NOYW1lCisJCQl9KS5zdG9yZSgnSWZyYW1lU2hpbScsIHRoaXMpOworCQkJdmFyIGluamVjdCA9IChmdW5jdGlvbigpeworCQkJCXRoaXMuc2hpbS5pbmplY3QodGhpcy5lbGVtZW50LCAnYWZ0ZXInKTsKKwkJCQl0aGlzW3RoaXMub3B0aW9ucy5kaXNwbGF5ID8gJ3Nob3cnIDogJ2hpZGUnXSgpOworCQkJCXRoaXMuZmlyZUV2ZW50KCdpbmplY3QnKTsKKwkJCX0pLmJpbmQodGhpcyk7CisJCQlpZiAoIUlmcmFtZVNoaW0ucmVhZHkpIHdpbmRvdy5hZGRFdmVudCgnbG9hZCcsIGluamVjdCk7CisJCQllbHNlIGluamVjdCgpOworCQl9IGVsc2UgeworCQkJdGhpcy5wb3NpdGlvbiA9IHRoaXMuaGlkZSA9IHRoaXMuc2hvdyA9IHRoaXMuZGlzcG9zZSA9IEZ1bmN0aW9uLmNvbnZlcnQodGhpcyk7CisJCX0KKwl9LAorCisJcG9zaXRpb246IGZ1bmN0aW9uKCl7CisJCWlmICghSWZyYW1lU2hpbS5yZWFkeSB8fCAhdGhpcy5zaGltKSByZXR1cm4gdGhpczsKKwkJdmFyIHNpemUgPSB0aGlzLmVsZW1lbnQubWVhc3VyZShmdW5jdGlvbigpeworCQkJcmV0dXJuIHRoaXMuZ2V0U2l6ZSgpOworCQl9KTsKKwkJaWYgKHRoaXMub3B0aW9ucy5tYXJnaW4gIT0gdW5kZWZpbmVkKXsKKwkJCXNpemUueCA9IHNpemUueCAtICh0aGlzLm9wdGlvbnMubWFyZ2luICogMik7CisJCQlzaXplLnkgPSBzaXplLnkgLSAodGhpcy5vcHRpb25zLm1hcmdpbiAqIDIpOworCQkJdGhpcy5vcHRpb25zLm9mZnNldC54ICs9IHRoaXMub3B0aW9ucy5tYXJnaW47CisJCQl0aGlzLm9wdGlvbnMub2Zmc2V0LnkgKz0gdGhpcy5vcHRpb25zLm1hcmdpbjsKKwkJfQorCQl0aGlzLnNoaW0uc2V0KHt3aWR0aDogc2l6ZS54LCBoZWlnaHQ6IHNpemUueX0pLnBvc2l0aW9uKHsKKwkJCXJlbGF0aXZlVG86IHRoaXMuZWxlbWVudCwKKwkJCW9mZnNldDogdGhpcy5vcHRpb25zLm9mZnNldAorCQl9KTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWhpZGU6IGZ1bmN0aW9uKCl7CisJCWlmICh0aGlzLnNoaW0pIHRoaXMuc2hpbS5zZXRTdHlsZSgnZGlzcGxheScsICdub25lJyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlzaG93OiBmdW5jdGlvbigpeworCQlpZiAodGhpcy5zaGltKSB0aGlzLnNoaW0uc2V0U3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKTsKKwkJcmV0dXJuIHRoaXMucG9zaXRpb24oKTsKKwl9LAorCisJZGlzcG9zZTogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMuc2hpbSkgdGhpcy5zaGltLmRpc3Bvc2UoKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWRlc3Ryb3k6IGZ1bmN0aW9uKCl7CisJCWlmICh0aGlzLnNoaW0pIHRoaXMuc2hpbS5kZXN0cm95KCk7CisJCXJldHVybiB0aGlzOworCX0KKworfSk7CisKK30pKCk7CisKK3dpbmRvdy5hZGRFdmVudCgnbG9hZCcsIGZ1bmN0aW9uKCl7CisJSWZyYW1lU2hpbS5yZWFkeSA9IHRydWU7Cit9KTsKKworLyoKKy0tLQorCitzY3JpcHQ6IE1hc2suanMKKworbmFtZTogTWFzaworCitkZXNjcmlwdGlvbjogQ3JlYXRlcyBhIG1hc2sgZWxlbWVudCB0byBjb3ZlciBhbm90aGVyLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSBDb3JlL09wdGlvbnMKKyAgLSBDb3JlL0V2ZW50cworICAtIENvcmUvRWxlbWVudC5FdmVudAorICAtIENsYXNzLkJpbmRzCisgIC0gRWxlbWVudC5Qb3NpdGlvbgorICAtIElmcmFtZVNoaW0KKworcHJvdmlkZXM6IFtNYXNrXQorCisuLi4KKyovCisoZnVuY3Rpb24oKXsKKwordmFyIE1hc2sgPSB0aGlzLk1hc2sgPSBuZXcgQ2xhc3MoeworCisJSW1wbGVtZW50czogW09wdGlvbnMsIEV2ZW50c10sCisKKwlCaW5kczogWydwb3NpdGlvbiddLAorCisJb3B0aW9uczogey8qCisJCW9uU2hvdzogZnVuY3Rpb24oKXt9LAorCQlvbkhpZGU6IGZ1bmN0aW9uKCl7fSwKKwkJb25EZXN0cm95OiBmdW5jdGlvbigpe30sCisJCW9uQ2xpY2s6IGZ1bmN0aW9uKGV2ZW50KXt9LAorCQlpbmplY3Q6IHsKKwkJCXdoZXJlOiAnYWZ0ZXInLAorCQkJdGFyZ2V0OiBudWxsLAorCQl9LAorCQloaWRlT25DbGljazogZmFsc2UsCisJCWlkOiBudWxsLAorCQlkZXN0cm95T25IaWRlOiBmYWxzZSwqLworCQlzdHlsZToge30sCisJCSdjbGFzcyc6ICdtYXNrJywKKwkJbWFza01hcmdpbnM6IGZhbHNlLAorCQl1c2VJZnJhbWVTaGltOiB0cnVlLAorCQlpZnJhbWVTaGltT3B0aW9uczoge30KKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24odGFyZ2V0LCBvcHRpb25zKXsKKwkJdGhpcy50YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJnZXQpIHx8IGRvY3VtZW50LmlkKGRvY3VtZW50LmJvZHkpOworCQl0aGlzLnRhcmdldC5zdG9yZSgnbWFzaycsIHRoaXMpOworCQl0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7CisJCXRoaXMucmVuZGVyKCk7CisJCXRoaXMuaW5qZWN0KCk7CisJfSwKKworCXJlbmRlcjogZnVuY3Rpb24oKXsKKwkJdGhpcy5lbGVtZW50ID0gbmV3IEVsZW1lbnQoJ2RpdicsIHsKKwkJCSdjbGFzcyc6IHRoaXMub3B0aW9uc1snY2xhc3MnXSwKKwkJCWlkOiB0aGlzLm9wdGlvbnMuaWQgfHwgJ21hc2stJyArIFN0cmluZy51bmlxdWVJRCgpLAorCQkJc3R5bGVzOiBPYmplY3QubWVyZ2Uoe30sIHRoaXMub3B0aW9ucy5zdHlsZSwgeworCQkJCWRpc3BsYXk6ICdub25lJworCQkJfSksCisJCQlldmVudHM6IHsKKwkJCQljbGljazogZnVuY3Rpb24oZXZlbnQpeworCQkJCQl0aGlzLmZpcmVFdmVudCgnY2xpY2snLCBldmVudCk7CisJCQkJCWlmICh0aGlzLm9wdGlvbnMuaGlkZU9uQ2xpY2spIHRoaXMuaGlkZSgpOworCQkJCX0uYmluZCh0aGlzKQorCQkJfQorCQl9KTsKKworCQl0aGlzLmhpZGRlbiA9IHRydWU7CisJfSwKKworCXRvRWxlbWVudDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuZWxlbWVudDsKKwl9LAorCisJaW5qZWN0OiBmdW5jdGlvbih0YXJnZXQsIHdoZXJlKXsKKwkJd2hlcmUgPSB3aGVyZSB8fCAodGhpcy5vcHRpb25zLmluamVjdCA/IHRoaXMub3B0aW9ucy5pbmplY3Qud2hlcmUgOiAnJykgfHwgKHRoaXMudGFyZ2V0ID09IGRvY3VtZW50LmJvZHkgPyAnaW5zaWRlJyA6ICdhZnRlcicpOworCQl0YXJnZXQgPSB0YXJnZXQgfHwgKHRoaXMub3B0aW9ucy5pbmplY3QgJiYgdGhpcy5vcHRpb25zLmluamVjdC50YXJnZXQpIHx8IHRoaXMudGFyZ2V0OworCisJCXRoaXMuZWxlbWVudC5pbmplY3QodGFyZ2V0LCB3aGVyZSk7CisKKwkJaWYgKHRoaXMub3B0aW9ucy51c2VJZnJhbWVTaGltKXsKKwkJCXRoaXMuc2hpbSA9IG5ldyBJZnJhbWVTaGltKHRoaXMuZWxlbWVudCwgdGhpcy5vcHRpb25zLmlmcmFtZVNoaW1PcHRpb25zKTsKKworCQkJdGhpcy5hZGRFdmVudHMoeworCQkJCXNob3c6IHRoaXMuc2hpbS5zaG93LmJpbmQodGhpcy5zaGltKSwKKwkJCQloaWRlOiB0aGlzLnNoaW0uaGlkZS5iaW5kKHRoaXMuc2hpbSksCisJCQkJZGVzdHJveTogdGhpcy5zaGltLmRlc3Ryb3kuYmluZCh0aGlzLnNoaW0pCisJCQl9KTsKKwkJfQorCX0sCisKKwlwb3NpdGlvbjogZnVuY3Rpb24oKXsKKwkJdGhpcy5yZXNpemUodGhpcy5vcHRpb25zLndpZHRoLCB0aGlzLm9wdGlvbnMuaGVpZ2h0KTsKKworCQl0aGlzLmVsZW1lbnQucG9zaXRpb24oeworCQkJcmVsYXRpdmVUbzogdGhpcy50YXJnZXQsCisJCQlwb3NpdGlvbjogJ3RvcExlZnQnLAorCQkJaWdub3JlTWFyZ2luczogIXRoaXMub3B0aW9ucy5tYXNrTWFyZ2lucywKKwkJCWlnbm9yZVNjcm9sbDogdGhpcy50YXJnZXQgPT0gZG9jdW1lbnQuYm9keQorCQl9KTsKKworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVzaXplOiBmdW5jdGlvbih4LCB5KXsKKwkJdmFyIG9wdCA9IHsKKwkJCXN0eWxlczogWydwYWRkaW5nJywgJ2JvcmRlciddCisJCX07CisJCWlmICh0aGlzLm9wdGlvbnMubWFza01hcmdpbnMpIG9wdC5zdHlsZXMucHVzaCgnbWFyZ2luJyk7CisKKwkJdmFyIGRpbSA9IHRoaXMudGFyZ2V0LmdldENvbXB1dGVkU2l6ZShvcHQpOworCQlpZiAodGhpcy50YXJnZXQgPT0gZG9jdW1lbnQuYm9keSl7CisJCQl0aGlzLmVsZW1lbnQuc2V0U3R5bGVzKHt3aWR0aDogMCwgaGVpZ2h0OiAwfSk7CisJCQl2YXIgd2luID0gd2luZG93LmdldFNjcm9sbFNpemUoKTsKKwkJCWlmIChkaW0udG90YWxIZWlnaHQgPCB3aW4ueSkgZGltLnRvdGFsSGVpZ2h0ID0gd2luLnk7CisJCQlpZiAoZGltLnRvdGFsV2lkdGggPCB3aW4ueCkgZGltLnRvdGFsV2lkdGggPSB3aW4ueDsKKwkJfQorCQl0aGlzLmVsZW1lbnQuc2V0U3R5bGVzKHsKKwkJCXdpZHRoOiBBcnJheS5waWNrKFt4LCBkaW0udG90YWxXaWR0aCwgZGltLnhdKSwKKwkJCWhlaWdodDogQXJyYXkucGljayhbeSwgZGltLnRvdGFsSGVpZ2h0LCBkaW0ueV0pCisJCX0pOworCisJCXJldHVybiB0aGlzOworCX0sCisKKwlzaG93OiBmdW5jdGlvbigpeworCQlpZiAoIXRoaXMuaGlkZGVuKSByZXR1cm4gdGhpczsKKworCQl3aW5kb3cuYWRkRXZlbnQoJ3Jlc2l6ZScsIHRoaXMucG9zaXRpb24pOworCQl0aGlzLnBvc2l0aW9uKCk7CisJCXRoaXMuc2hvd01hc2suYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJc2hvd01hc2s6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZWxlbWVudC5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpOworCQl0aGlzLmhpZGRlbiA9IGZhbHNlOworCQl0aGlzLmZpcmVFdmVudCgnc2hvdycpOworCX0sCisKKwloaWRlOiBmdW5jdGlvbigpeworCQlpZiAodGhpcy5oaWRkZW4pIHJldHVybiB0aGlzOworCisJCXdpbmRvdy5yZW1vdmVFdmVudCgncmVzaXplJywgdGhpcy5wb3NpdGlvbik7CisJCXRoaXMuaGlkZU1hc2suYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKwkJaWYgKHRoaXMub3B0aW9ucy5kZXN0cm95T25IaWRlKSByZXR1cm4gdGhpcy5kZXN0cm95KCk7CisKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWhpZGVNYXNrOiBmdW5jdGlvbigpeworCQl0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpOworCQl0aGlzLmhpZGRlbiA9IHRydWU7CisJCXRoaXMuZmlyZUV2ZW50KCdoaWRlJyk7CisJfSwKKworCXRvZ2dsZTogZnVuY3Rpb24oKXsKKwkJdGhpc1t0aGlzLmhpZGRlbiA/ICdzaG93JyA6ICdoaWRlJ10oKTsKKwl9LAorCisJZGVzdHJveTogZnVuY3Rpb24oKXsKKwkJdGhpcy5oaWRlKCk7CisJCXRoaXMuZWxlbWVudC5kZXN0cm95KCk7CisJCXRoaXMuZmlyZUV2ZW50KCdkZXN0cm95Jyk7CisJCXRoaXMudGFyZ2V0LmVsaW1pbmF0ZSgnbWFzaycpOworCX0KKworfSk7CisKK30pKCk7CisKKworRWxlbWVudC5Qcm9wZXJ0aWVzLm1hc2sgPSB7CisKKwlzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpeworCQl2YXIgbWFzayA9IHRoaXMucmV0cmlldmUoJ21hc2snKTsKKwkJaWYgKG1hc2spIG1hc2suZGVzdHJveSgpOworCQlyZXR1cm4gdGhpcy5lbGltaW5hdGUoJ21hc2snKS5zdG9yZSgnbWFzazpvcHRpb25zJywgb3B0aW9ucyk7CisJfSwKKworCWdldDogZnVuY3Rpb24oKXsKKwkJdmFyIG1hc2sgPSB0aGlzLnJldHJpZXZlKCdtYXNrJyk7CisJCWlmICghbWFzayl7CisJCQltYXNrID0gbmV3IE1hc2sodGhpcywgdGhpcy5yZXRyaWV2ZSgnbWFzazpvcHRpb25zJykpOworCQkJdGhpcy5zdG9yZSgnbWFzaycsIG1hc2spOworCQl9CisJCXJldHVybiBtYXNrOworCX0KKworfTsKKworRWxlbWVudC5pbXBsZW1lbnQoeworCisJbWFzazogZnVuY3Rpb24ob3B0aW9ucyl7CisJCWlmIChvcHRpb25zKSB0aGlzLnNldCgnbWFzaycsIG9wdGlvbnMpOworCQl0aGlzLmdldCgnbWFzaycpLnNob3coKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXVubWFzazogZnVuY3Rpb24oKXsKKwkJdGhpcy5nZXQoJ21hc2snKS5oaWRlKCk7CisJCXJldHVybiB0aGlzOworCX0KKworfSk7CisKKy8qCistLS0KKworc2NyaXB0OiBTcGlubmVyLmpzCisKK25hbWU6IFNwaW5uZXIKKworZGVzY3JpcHRpb246IEFkZHMgYSBzZW1pLXRyYW5zcGFyZW50IG92ZXJsYXkgb3ZlciBhIGRvbSBlbGVtZW50IHdpdGggYSBzcGlubmluIGFqYXggaWNvbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9GeC5Ud2VlbgorICAtIENvcmUvUmVxdWVzdAorICAtIENsYXNzLnJlZmFjdG9yCisgIC0gTWFzaworCitwcm92aWRlczogW1NwaW5uZXJdCisKKy4uLgorKi8KKyhmdW5jdGlvbigpeworCit2YXIgU3Bpbm5lciA9IHRoaXMuU3Bpbm5lciA9IG5ldyBDbGFzcyh7CisKKwlFeHRlbmRzOiB0aGlzLk1hc2ssCisKKwlJbXBsZW1lbnRzOiBDaGFpbiwKKworCW9wdGlvbnM6IHsvKgorCQltZXNzYWdlOiBmYWxzZSwqLworCQknY2xhc3MnOiAnc3Bpbm5lcicsCisJCWNvbnRhaW5lclBvc2l0aW9uOiB7fSwKKwkJY29udGVudDogeworCQkJJ2NsYXNzJzogJ3NwaW5uZXItY29udGVudCcKKwkJfSwKKwkJbWVzc2FnZUNvbnRhaW5lcjogeworCQkJJ2NsYXNzJzogJ3NwaW5uZXItbXNnJworCQl9LAorCQlpbWc6IHsKKwkJCSdjbGFzcyc6ICdzcGlubmVyLWltZycKKwkJfSwKKwkJZnhPcHRpb25zOiB7CisJCQlsaW5rOiAnY2hhaW4nCisJCX0KKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24odGFyZ2V0LCBvcHRpb25zKXsKKwkJdGhpcy50YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJnZXQpIHx8IGRvY3VtZW50LmlkKGRvY3VtZW50LmJvZHkpOworCQl0aGlzLnRhcmdldC5zdG9yZSgnc3Bpbm5lcicsIHRoaXMpOworCQl0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7CisJCXRoaXMucmVuZGVyKCk7CisJCXRoaXMuaW5qZWN0KCk7CisKKwkJLy8gQWRkIHRoaXMgdG8gZXZlbnRzIGZvciB3aGVuIG5vRnggaXMgdHJ1ZTsgcGFyZW50IG1ldGhvZHMgaGFuZGxlIGhpZGUvc2hvdy4KKwkJdmFyIGRlYWN0aXZhdGUgPSBmdW5jdGlvbigpeyB0aGlzLmFjdGl2ZSA9IGZhbHNlOyB9LmJpbmQodGhpcyk7CisJCXRoaXMuYWRkRXZlbnRzKHsKKwkJCWhpZGU6IGRlYWN0aXZhdGUsCisJCQlzaG93OiBkZWFjdGl2YXRlCisJCX0pOworCX0sCisKKwlyZW5kZXI6IGZ1bmN0aW9uKCl7CisJCXRoaXMucGFyZW50KCk7CisKKwkJdGhpcy5lbGVtZW50LnNldCgnaWQnLCB0aGlzLm9wdGlvbnMuaWQgfHwgJ3NwaW5uZXItJyArIFN0cmluZy51bmlxdWVJRCgpKTsKKworCQl0aGlzLmNvbnRlbnQgPSBkb2N1bWVudC5pZCh0aGlzLm9wdGlvbnMuY29udGVudCkgfHwgbmV3IEVsZW1lbnQoJ2RpdicsIHRoaXMub3B0aW9ucy5jb250ZW50KTsKKwkJdGhpcy5jb250ZW50LmluamVjdCh0aGlzLmVsZW1lbnQpOworCisJCWlmICh0aGlzLm9wdGlvbnMubWVzc2FnZSl7CisJCQl0aGlzLm1zZyA9IGRvY3VtZW50LmlkKHRoaXMub3B0aW9ucy5tZXNzYWdlKSB8fCBuZXcgRWxlbWVudCgncCcsIHRoaXMub3B0aW9ucy5tZXNzYWdlQ29udGFpbmVyKS5hcHBlbmRUZXh0KHRoaXMub3B0aW9ucy5tZXNzYWdlKTsKKwkJCXRoaXMubXNnLmluamVjdCh0aGlzLmNvbnRlbnQpOworCQl9CisKKwkJaWYgKHRoaXMub3B0aW9ucy5pbWcpeworCQkJdGhpcy5pbWcgPSBkb2N1bWVudC5pZCh0aGlzLm9wdGlvbnMuaW1nKSB8fCBuZXcgRWxlbWVudCgnZGl2JywgdGhpcy5vcHRpb25zLmltZyk7CisJCQl0aGlzLmltZy5pbmplY3QodGhpcy5jb250ZW50KTsKKwkJfQorCisJCXRoaXMuZWxlbWVudC5zZXQoJ3R3ZWVuJywgdGhpcy5vcHRpb25zLmZ4T3B0aW9ucyk7CisJfSwKKworCXNob3c6IGZ1bmN0aW9uKG5vRngpeworCQlpZiAodGhpcy5hY3RpdmUpIHJldHVybiB0aGlzLmNoYWluKHRoaXMuc2hvdy5iaW5kKHRoaXMpKTsKKwkJaWYgKCF0aGlzLmhpZGRlbil7CisJCQl0aGlzLmNhbGxDaGFpbi5kZWxheSgyMCwgdGhpcyk7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCisJCXRoaXMudGFyZ2V0LnNldCgnYXJpYS1idXN5JywgJ3RydWUnKTsKKwkJdGhpcy5hY3RpdmUgPSB0cnVlOworCisJCXJldHVybiB0aGlzLnBhcmVudChub0Z4KTsKKwl9LAorCisJc2hvd01hc2s6IGZ1bmN0aW9uKG5vRngpeworCQl2YXIgcG9zID0gZnVuY3Rpb24oKXsKKwkJCXRoaXMuY29udGVudC5wb3NpdGlvbihPYmplY3QubWVyZ2UoeworCQkJCXJlbGF0aXZlVG86IHRoaXMuZWxlbWVudAorCQkJfSwgdGhpcy5vcHRpb25zLmNvbnRhaW5lclBvc2l0aW9uKSk7CisJCX0uYmluZCh0aGlzKTsKKworCQlpZiAobm9GeCl7CisJCQl0aGlzLnBhcmVudCgpOworCQkJcG9zKCk7CisJCX0gZWxzZSB7CisJCQlpZiAoIXRoaXMub3B0aW9ucy5zdHlsZS5vcGFjaXR5KSB0aGlzLm9wdGlvbnMuc3R5bGUub3BhY2l0eSA9IHRoaXMuZWxlbWVudC5nZXRTdHlsZSgnb3BhY2l0eScpLnRvRmxvYXQoKTsKKwkJCXRoaXMuZWxlbWVudC5zZXRTdHlsZXMoeworCQkJCWRpc3BsYXk6ICdibG9jaycsCisJCQkJb3BhY2l0eTogMAorCQkJfSkudHdlZW4oJ29wYWNpdHknLCB0aGlzLm9wdGlvbnMuc3R5bGUub3BhY2l0eSk7CisJCQlwb3MoKTsKKwkJCXRoaXMuaGlkZGVuID0gZmFsc2U7CisJCQl0aGlzLmZpcmVFdmVudCgnc2hvdycpOworCQkJdGhpcy5jYWxsQ2hhaW4oKTsKKwkJfQorCX0sCisKKwloaWRlOiBmdW5jdGlvbihub0Z4KXsKKwkJaWYgKHRoaXMuYWN0aXZlKSByZXR1cm4gdGhpcy5jaGFpbih0aGlzLmhpZGUuYmluZCh0aGlzKSk7CisJCWlmICh0aGlzLmhpZGRlbil7CisJCQl0aGlzLmNhbGxDaGFpbi5kZWxheSgyMCwgdGhpcyk7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCisJCXRoaXMudGFyZ2V0LnNldCgnYXJpYS1idXN5JywgJ2ZhbHNlJyk7CisJCXRoaXMuYWN0aXZlID0gdHJ1ZTsKKworCQlyZXR1cm4gdGhpcy5wYXJlbnQobm9GeCk7CisJfSwKKworCWhpZGVNYXNrOiBmdW5jdGlvbihub0Z4KXsKKwkJaWYgKG5vRngpIHJldHVybiB0aGlzLnBhcmVudCgpOworCQl0aGlzLmVsZW1lbnQudHdlZW4oJ29wYWNpdHknLCAwKS5nZXQoJ3R3ZWVuJykuY2hhaW4oZnVuY3Rpb24oKXsKKwkJCXRoaXMuZWxlbWVudC5zZXRTdHlsZSgnZGlzcGxheScsICdub25lJyk7CisJCQl0aGlzLmhpZGRlbiA9IHRydWU7CisJCQl0aGlzLmZpcmVFdmVudCgnaGlkZScpOworCQkJdGhpcy5jYWxsQ2hhaW4oKTsKKwkJfS5iaW5kKHRoaXMpKTsKKwl9LAorCisJZGVzdHJveTogZnVuY3Rpb24oKXsKKwkJdGhpcy5jb250ZW50LmRlc3Ryb3koKTsKKwkJdGhpcy5wYXJlbnQoKTsKKwkJdGhpcy50YXJnZXQuZWxpbWluYXRlKCdzcGlubmVyJyk7CisJfQorCit9KTsKKworfSkoKTsKKworUmVxdWVzdCA9IENsYXNzLnJlZmFjdG9yKFJlcXVlc3QsIHsKKworCW9wdGlvbnM6IHsKKwkJdXNlU3Bpbm5lcjogZmFsc2UsCisJCXNwaW5uZXJPcHRpb25zOiB7fSwKKwkJc3Bpbm5lclRhcmdldDogZmFsc2UKKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXRoaXMuX3NlbmQgPSB0aGlzLnNlbmQ7CisJCXRoaXMuc2VuZCA9IGZ1bmN0aW9uKG9wdGlvbnMpeworCQkJdmFyIHNwaW5uZXIgPSB0aGlzLmdldFNwaW5uZXIoKTsKKwkJCWlmIChzcGlubmVyKSBzcGlubmVyLmNoYWluKHRoaXMuX3NlbmQucGFzcyhvcHRpb25zLCB0aGlzKSkuc2hvdygpOworCQkJZWxzZSB0aGlzLl9zZW5kKG9wdGlvbnMpOworCQkJcmV0dXJuIHRoaXM7CisJCX07CisJCXRoaXMucHJldmlvdXMob3B0aW9ucyk7CisJfSwKKworCWdldFNwaW5uZXI6IGZ1bmN0aW9uKCl7CisJCWlmICghdGhpcy5zcGlubmVyKXsKKwkJCXZhciB1cGRhdGUgPSBkb2N1bWVudC5pZCh0aGlzLm9wdGlvbnMuc3Bpbm5lclRhcmdldCkgfHwgZG9jdW1lbnQuaWQodGhpcy5vcHRpb25zLnVwZGF0ZSk7CisJCQlpZiAodGhpcy5vcHRpb25zLnVzZVNwaW5uZXIgJiYgdXBkYXRlKXsKKwkJCQl1cGRhdGUuc2V0KCdzcGlubmVyJywgdGhpcy5vcHRpb25zLnNwaW5uZXJPcHRpb25zKTsKKwkJCQl2YXIgc3Bpbm5lciA9IHRoaXMuc3Bpbm5lciA9IHVwZGF0ZS5nZXQoJ3NwaW5uZXInKTsKKwkJCQlbJ2NvbXBsZXRlJywgJ2V4Y2VwdGlvbicsICdjYW5jZWwnXS5lYWNoKGZ1bmN0aW9uKGV2ZW50KXsKKwkJCQkJdGhpcy5hZGRFdmVudChldmVudCwgc3Bpbm5lci5oaWRlLmJpbmQoc3Bpbm5lcikpOworCQkJCX0sIHRoaXMpOworCQkJfQorCQl9CisJCXJldHVybiB0aGlzLnNwaW5uZXI7CisJfQorCit9KTsKKworRWxlbWVudC5Qcm9wZXJ0aWVzLnNwaW5uZXIgPSB7CisKKwlzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpeworCQl2YXIgc3Bpbm5lciA9IHRoaXMucmV0cmlldmUoJ3NwaW5uZXInKTsKKwkJaWYgKHNwaW5uZXIpIHNwaW5uZXIuZGVzdHJveSgpOworCQlyZXR1cm4gdGhpcy5lbGltaW5hdGUoJ3NwaW5uZXInKS5zdG9yZSgnc3Bpbm5lcjpvcHRpb25zJywgb3B0aW9ucyk7CisJfSwKKworCWdldDogZnVuY3Rpb24oKXsKKwkJdmFyIHNwaW5uZXIgPSB0aGlzLnJldHJpZXZlKCdzcGlubmVyJyk7CisJCWlmICghc3Bpbm5lcil7CisJCQlzcGlubmVyID0gbmV3IFNwaW5uZXIodGhpcywgdGhpcy5yZXRyaWV2ZSgnc3Bpbm5lcjpvcHRpb25zJykpOworCQkJdGhpcy5zdG9yZSgnc3Bpbm5lcicsIHNwaW5uZXIpOworCQl9CisJCXJldHVybiBzcGlubmVyOworCX0KKworfTsKKworRWxlbWVudC5pbXBsZW1lbnQoeworCisJc3BpbjogZnVuY3Rpb24ob3B0aW9ucyl7CisJCWlmIChvcHRpb25zKSB0aGlzLnNldCgnc3Bpbm5lcicsIG9wdGlvbnMpOworCQl0aGlzLmdldCgnc3Bpbm5lcicpLnNob3coKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXVuc3BpbjogZnVuY3Rpb24oKXsKKwkJdGhpcy5nZXQoJ3NwaW5uZXInKS5oaWRlKCk7CisJCXJldHVybiB0aGlzOworCX0KKworfSk7CisKKy8qCistLS0KKworc2NyaXB0OiBTdHJpbmcuUXVlcnlTdHJpbmcuanMKKworbmFtZTogU3RyaW5nLlF1ZXJ5U3RyaW5nCisKK2Rlc2NyaXB0aW9uOiBNZXRob2RzIGZvciBkZWFsaW5nIHdpdGggVVJJIHF1ZXJ5IHN0cmluZ3MuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gU2ViYXN0aWFuIE1hcmtiw6VnZQorICAtIEFhcm9uIE5ld3RvbgorICAtIExlbm5hcnQgUGlsb24KKyAgLSBWYWxlcmlvIFByb2lldHRpCisKK3JlcXVpcmVzOgorICAtIENvcmUvQXJyYXkKKyAgLSBDb3JlL1N0cmluZworICAtIE1vb1Rvb2xzLk1vcmUKKworcHJvdmlkZXM6IFtTdHJpbmcuUXVlcnlTdHJpbmddCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKKy8qKgorICogZGVjb2RlVVJJQ29tcG9uZW50IGRvZXNuJ3QgZG8gdGhlIGNvcnJlY3QgdGhpbmcgd2l0aCBxdWVyeSBwYXJhbWV0ZXIga2V5cyBvcgorICogdmFsdWVzLiBTcGVjaWZpY2FsbHksIGl0IGxlYXZlcyAnKycgYXMgJysnIHdoZW4gaXQgc2hvdWxkIGJlIGNvbnZlcnRpbmcgdGhlbQorICogdG8gc3BhY2VzIGFzIHRoYXQncyB0aGUgc3BlY2lmaWNhdGlvbi4gV2hlbiBicm93c2VycyBzdWJtaXQgSFRNTCBmb3JtcyB2aWEKKyAqIEdFVCwgdGhlIHZhbHVlcyBhcmUgZW5jb2RlZCB1c2luZyAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJworICogd2hpY2ggY29udmVydHMgc3BhY2VzIHRvICcrJy4KKyAqCisgKiBTZWU6IGh0dHA6Ly91bml4cGFwYS5jb20vanMvcXVlcnlzdHJpbmcuaHRtbCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUKKyAqIHByb2JsZW0uCisgKi8KK3ZhciBkZWNvZGVDb21wb25lbnQgPSBmdW5jdGlvbihzdHIpeworCXJldHVybiBkZWNvZGVVUklDb21wb25lbnQoc3RyLnJlcGxhY2UoL1wrL2csICcgJykpOworfTsKKworU3RyaW5nLmltcGxlbWVudCh7CisKKwlwYXJzZVF1ZXJ5U3RyaW5nOiBmdW5jdGlvbihkZWNvZGVLZXlzLCBkZWNvZGVWYWx1ZXMpeworCQlpZiAoZGVjb2RlS2V5cyA9PSBudWxsKSBkZWNvZGVLZXlzID0gdHJ1ZTsKKwkJaWYgKGRlY29kZVZhbHVlcyA9PSBudWxsKSBkZWNvZGVWYWx1ZXMgPSB0cnVlOworCisJCXZhciB2YXJzID0gdGhpcy5zcGxpdCgvWyY7XS8pLAorCQkJb2JqZWN0ID0ge307CisJCWlmICghdmFycy5sZW5ndGgpIHJldHVybiBvYmplY3Q7CisKKwkJdmFycy5lYWNoKGZ1bmN0aW9uKHZhbCl7CisJCQl2YXIgaW5kZXggPSB2YWwuaW5kZXhPZignPScpICsgMSwKKwkJCQl2YWx1ZSA9IGluZGV4ID8gdmFsLnN1YnN0cihpbmRleCkgOiAnJywKKwkJCQlrZXlzID0gaW5kZXggPyB2YWwuc3Vic3RyKDAsIGluZGV4IC0gMSkubWF0Y2goLyhbXlxdXFtdK3woXEIpKD89XF0pKS9nKSA6IFt2YWxdLAorCQkJCW9iaiA9IG9iamVjdDsKKwkJCWlmICgha2V5cykgcmV0dXJuOworCQkJaWYgKGRlY29kZVZhbHVlcykgdmFsdWUgPSBkZWNvZGVDb21wb25lbnQodmFsdWUpOworCQkJa2V5cy5lYWNoKGZ1bmN0aW9uKGtleSwgaSl7CisJCQkJaWYgKGRlY29kZUtleXMpIGtleSA9IGRlY29kZUNvbXBvbmVudChrZXkpOworCQkJCXZhciBjdXJyZW50ID0gb2JqW2tleV07CisKKwkJCQlpZiAoaSA8IGtleXMubGVuZ3RoIC0gMSkgb2JqID0gb2JqW2tleV0gPSBjdXJyZW50IHx8IHt9OworCQkJCWVsc2UgaWYgKHR5cGVPZihjdXJyZW50KSA9PSAnYXJyYXknKSBjdXJyZW50LnB1c2godmFsdWUpOworCQkJCWVsc2Ugb2JqW2tleV0gPSBjdXJyZW50ICE9IG51bGwgPyBbY3VycmVudCwgdmFsdWVdIDogdmFsdWU7CisJCQl9KTsKKwkJfSk7CisKKwkJcmV0dXJuIG9iamVjdDsKKwl9LAorCisJY2xlYW5RdWVyeVN0cmluZzogZnVuY3Rpb24obWV0aG9kKXsKKwkJcmV0dXJuIHRoaXMuc3BsaXQoJyYnKS5maWx0ZXIoZnVuY3Rpb24odmFsKXsKKwkJCXZhciBpbmRleCA9IHZhbC5pbmRleE9mKCc9JyksCisJCQkJa2V5ID0gaW5kZXggPCAwID8gJycgOiB2YWwuc3Vic3RyKDAsIGluZGV4KSwKKwkJCQl2YWx1ZSA9IHZhbC5zdWJzdHIoaW5kZXggKyAxKTsKKworCQkJcmV0dXJuIG1ldGhvZCA/IG1ldGhvZC5jYWxsKG51bGwsIGtleSwgdmFsdWUpIDogKHZhbHVlIHx8IHZhbHVlID09PSAwKTsKKwkJfSkuam9pbignJicpOworCX0KKworfSk7CisKK30pKCk7CisKKy8qCistLS0KKworc2NyaXB0OiBGb3JtLlJlcXVlc3QuanMKKworbmFtZTogRm9ybS5SZXF1ZXN0CisKK2Rlc2NyaXB0aW9uOiBIYW5kbGVzIHRoZSBiYXNpYyBmdW5jdGlvbmFsaXR5IG9mIHN1Ym1pdHRpbmcgYSBmb3JtIGFuZCB1cGRhdGluZyBhIGRvbSBlbGVtZW50IHdpdGggdGhlIHJlc3VsdC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9SZXF1ZXN0LkhUTUwKKyAgLSBDbGFzcy5CaW5kcworICAtIENsYXNzLk9jY2x1ZGUKKyAgLSBTcGlubmVyCisgIC0gU3RyaW5nLlF1ZXJ5U3RyaW5nCisgIC0gRWxlbWVudC5EZWxlZ2F0aW9uLlBzZXVkbworCitwcm92aWRlczogW0Zvcm0uUmVxdWVzdF0KKworLi4uCisqLworCitpZiAoIXdpbmRvdy5Gb3JtKSB3aW5kb3cuRm9ybSA9IHt9OworCisoZnVuY3Rpb24oKXsKKworRm9ybS5SZXF1ZXN0ID0gbmV3IENsYXNzKHsKKworCUJpbmRzOiBbJ29uU3VibWl0JywgJ29uRm9ybVZhbGlkYXRlJ10sCisKKwlJbXBsZW1lbnRzOiBbT3B0aW9ucywgRXZlbnRzLCBDbGFzcy5PY2NsdWRlXSwKKworCW9wdGlvbnM6IHsvKgorCQlvbkZhaWx1cmU6IGZ1bmN0aW9uKCl7fSwKKwkJb25TdWNjZXNzOiBmdW5jdGlvbigpe30sIC8vIGFsaWFzZWQgdG8gb25Db21wbGV0ZSwKKwkJb25TZW5kOiBmdW5jdGlvbigpe30qLworCQlyZXF1ZXN0T3B0aW9uczogeworCQkJZXZhbFNjcmlwdHM6IHRydWUsCisJCQl1c2VTcGlubmVyOiB0cnVlLAorCQkJZW11bGF0aW9uOiBmYWxzZSwKKwkJCWxpbms6ICdpZ25vcmUnCisJCX0sCisJCXNlbmRCdXR0b25DbGlja2VkOiB0cnVlLAorCQlleHRyYURhdGE6IHt9LAorCQlyZXNldEZvcm06IHRydWUKKwl9LAorCisJcHJvcGVydHk6ICdmb3JtLnJlcXVlc3QnLAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24oZm9ybSwgdGFyZ2V0LCBvcHRpb25zKXsKKwkJdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuaWQoZm9ybSk7CisJCWlmICh0aGlzLm9jY2x1ZGUoKSkgcmV0dXJuIHRoaXMub2NjbHVkZWQ7CisJCXRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKQorCQkJLnNldFRhcmdldCh0YXJnZXQpCisJCQkuYXR0YWNoKCk7CisJfSwKKworCXNldFRhcmdldDogZnVuY3Rpb24odGFyZ2V0KXsKKwkJdGhpcy50YXJnZXQgPSBkb2N1bWVudC5pZCh0YXJnZXQpOworCQlpZiAoIXRoaXMucmVxdWVzdCl7CisJCQl0aGlzLm1ha2VSZXF1ZXN0KCk7CisJCX0gZWxzZSB7CisJCQl0aGlzLnJlcXVlc3Quc2V0T3B0aW9ucyh7CisJCQkJdXBkYXRlOiB0aGlzLnRhcmdldAorCQkJfSk7CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXRvRWxlbWVudDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuZWxlbWVudDsKKwl9LAorCisJbWFrZVJlcXVlc3Q6IGZ1bmN0aW9uKCl7CisJCXZhciBzZWxmID0gdGhpczsKKwkJdGhpcy5yZXF1ZXN0ID0gbmV3IFJlcXVlc3QuSFRNTChPYmplY3QubWVyZ2UoeworCQkJdXBkYXRlOiB0aGlzLnRhcmdldCwKKwkJCWVtdWxhdGlvbjogZmFsc2UsCisJCQlzcGlubmVyVGFyZ2V0OiB0aGlzLmVsZW1lbnQsCisJCQltZXRob2Q6IHRoaXMuZWxlbWVudC5nZXQoJ21ldGhvZCcpIHx8ICdwb3N0JworCQl9LCB0aGlzLm9wdGlvbnMucmVxdWVzdE9wdGlvbnMpKS5hZGRFdmVudHMoeworCQkJc3VjY2VzczogZnVuY3Rpb24odHJlZSwgZWxlbWVudHMsIGh0bWwsIGphdmFzY3JpcHQpeworCQkJCVsnY29tcGxldGUnLCAnc3VjY2VzcyddLmVhY2goZnVuY3Rpb24oZXZ0KXsKKwkJCQkJc2VsZi5maXJlRXZlbnQoZXZ0LCBbc2VsZi50YXJnZXQsIHRyZWUsIGVsZW1lbnRzLCBodG1sLCBqYXZhc2NyaXB0XSk7CisJCQkJfSk7CisJCQl9LAorCQkJZmFpbHVyZTogZnVuY3Rpb24oKXsKKwkJCQlzZWxmLmZpcmVFdmVudCgnY29tcGxldGUnLCBhcmd1bWVudHMpLmZpcmVFdmVudCgnZmFpbHVyZScsIGFyZ3VtZW50cyk7CisJCQl9LAorCQkJZXhjZXB0aW9uOiBmdW5jdGlvbigpeworCQkJCXNlbGYuZmlyZUV2ZW50KCdmYWlsdXJlJywgYXJndW1lbnRzKTsKKwkJCX0KKwkJfSk7CisJCXJldHVybiB0aGlzLmF0dGFjaFJlc2V0KCk7CisJfSwKKworCWF0dGFjaFJlc2V0OiBmdW5jdGlvbigpeworCQlpZiAoIXRoaXMub3B0aW9ucy5yZXNldEZvcm0pIHJldHVybiB0aGlzOworCQl0aGlzLnJlcXVlc3QuYWRkRXZlbnQoJ3N1Y2Nlc3MnLCBmdW5jdGlvbigpeworCQkJRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpeworCQkJCXRoaXMuZWxlbWVudC5yZXNldCgpOworCQkJfS5iaW5kKHRoaXMpKTsKKwkJCWlmICh3aW5kb3cuT3ZlclRleHQpIE92ZXJUZXh0LnVwZGF0ZSgpOworCQl9LmJpbmQodGhpcykpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJYXR0YWNoOiBmdW5jdGlvbihhdHRhY2gpeworCQl2YXIgbWV0aG9kID0gKGF0dGFjaCAhPSBmYWxzZSkgPyAnYWRkRXZlbnQnIDogJ3JlbW92ZUV2ZW50JzsKKwkJdGhpcy5lbGVtZW50W21ldGhvZF0oJ2NsaWNrOnJlbGF5KGJ1dHRvbiwgaW5wdXRbdHlwZT1zdWJtaXRdKScsIHRoaXMuc2F2ZUNsaWNrZWRCdXR0b24uYmluZCh0aGlzKSk7CisKKwkJdmFyIGZ2ID0gdGhpcy5lbGVtZW50LnJldHJpZXZlKCd2YWxpZGF0b3InKTsKKwkJaWYgKGZ2KSBmdlttZXRob2RdKCdvbkZvcm1WYWxpZGF0ZScsIHRoaXMub25Gb3JtVmFsaWRhdGUpOworCQllbHNlIHRoaXMuZWxlbWVudFttZXRob2RdKCdzdWJtaXQnLCB0aGlzLm9uU3VibWl0KTsKKworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZGV0YWNoOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5hdHRhY2goZmFsc2UpOworCX0sCisKKwkvL3B1YmxpYyBtZXRob2QKKwllbmFibGU6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLmF0dGFjaCgpOworCX0sCisKKwkvL3B1YmxpYyBtZXRob2QKKwlkaXNhYmxlOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5kZXRhY2goKTsKKwl9LAorCisJb25Gb3JtVmFsaWRhdGU6IGZ1bmN0aW9uKHZhbGlkLCBmb3JtLCBldmVudCl7CisJCS8vaWYgdGhlcmUncyBubyBldmVudCwgdGhlbiB0aGlzIHdhc24ndCBhIHN1Ym1pdCBldmVudAorCQlpZiAoIWV2ZW50KSByZXR1cm47CisJCXZhciBmdiA9IHRoaXMuZWxlbWVudC5yZXRyaWV2ZSgndmFsaWRhdG9yJyk7CisJCWlmICh2YWxpZCB8fCAoZnYgJiYgIWZ2Lm9wdGlvbnMuc3RvcE9uRmFpbHVyZSkpeworCQkJZXZlbnQuc3RvcCgpOworCQkJdGhpcy5zZW5kKCk7CisJCX0KKwl9LAorCisJb25TdWJtaXQ6IGZ1bmN0aW9uKGV2ZW50KXsKKwkJdmFyIGZ2ID0gdGhpcy5lbGVtZW50LnJldHJpZXZlKCd2YWxpZGF0b3InKTsKKwkJaWYgKGZ2KXsKKwkJCS8vZm9ybSB2YWxpZGF0b3Igd2FzIGNyZWF0ZWQgYWZ0ZXIgRm9ybS5SZXF1ZXN0CisJCQl0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnQoJ3N1Ym1pdCcsIHRoaXMub25TdWJtaXQpOworCQkJZnYuYWRkRXZlbnQoJ29uRm9ybVZhbGlkYXRlJywgdGhpcy5vbkZvcm1WYWxpZGF0ZSk7CisJCQlmdi52YWxpZGF0ZShldmVudCk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKGV2ZW50KSBldmVudC5zdG9wKCk7CisJCXRoaXMuc2VuZCgpOworCX0sCisKKwlzYXZlQ2xpY2tlZEJ1dHRvbjogZnVuY3Rpb24oZXZlbnQsIHRhcmdldCl7CisJCXZhciB0YXJnZXROYW1lID0gdGFyZ2V0LmdldCgnbmFtZScpOworCQlpZiAoIXRhcmdldE5hbWUgfHwgIXRoaXMub3B0aW9ucy5zZW5kQnV0dG9uQ2xpY2tlZCkgcmV0dXJuOworCQl0aGlzLm9wdGlvbnMuZXh0cmFEYXRhW3RhcmdldE5hbWVdID0gdGFyZ2V0LmdldCgndmFsdWUnKSB8fCB0cnVlOworCQl0aGlzLmNsaWNrZWRDbGVhbmVyID0gZnVuY3Rpb24oKXsKKwkJCWRlbGV0ZSB0aGlzLm9wdGlvbnMuZXh0cmFEYXRhW3RhcmdldE5hbWVdOworCQkJdGhpcy5jbGlja2VkQ2xlYW5lciA9IGZ1bmN0aW9uKCl7fTsKKwkJfS5iaW5kKHRoaXMpOworCX0sCisKKwljbGlja2VkQ2xlYW5lcjogZnVuY3Rpb24oKXt9LAorCisJc2VuZDogZnVuY3Rpb24oKXsKKwkJdmFyIHN0ciA9IHRoaXMuZWxlbWVudC50b1F1ZXJ5U3RyaW5nKCkudHJpbSgpLAorCQkJZGF0YSA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKHRoaXMub3B0aW9ucy5leHRyYURhdGEpOworCisJCWlmIChzdHIpIHN0ciArPSAnJicgKyBkYXRhOworCQllbHNlIHN0ciA9IGRhdGE7CisKKwkJdGhpcy5maXJlRXZlbnQoJ3NlbmQnLCBbdGhpcy5lbGVtZW50LCBzdHIucGFyc2VRdWVyeVN0cmluZygpXSk7CisJCXRoaXMucmVxdWVzdC5zZW5kKHsKKwkJCWRhdGE6IHN0ciwKKwkJCXVybDogdGhpcy5vcHRpb25zLnJlcXVlc3RPcHRpb25zLnVybCB8fCB0aGlzLmVsZW1lbnQuZ2V0KCdhY3Rpb24nKQorCQl9KTsKKwkJdGhpcy5jbGlja2VkQ2xlYW5lcigpOworCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCitFbGVtZW50LmltcGxlbWVudCgnZm9ybVVwZGF0ZScsIGZ1bmN0aW9uKHVwZGF0ZSwgb3B0aW9ucyl7CisJdmFyIGZxID0gdGhpcy5yZXRyaWV2ZSgnZm9ybS5yZXF1ZXN0Jyk7CisJaWYgKCFmcSl7CisJCWZxID0gbmV3IEZvcm0uUmVxdWVzdCh0aGlzLCB1cGRhdGUsIG9wdGlvbnMpOworCX0gZWxzZSB7CisJCWlmICh1cGRhdGUpIGZxLnNldFRhcmdldCh1cGRhdGUpOworCQlpZiAob3B0aW9ucykgZnEuc2V0T3B0aW9ucyhvcHRpb25zKS5tYWtlUmVxdWVzdCgpOworCX0KKwlmcS5zZW5kKCk7CisJcmV0dXJuIHRoaXM7Cit9KTsKKworfSkoKTsKKworLyoKKy0tLQorCitzY3JpcHQ6IEZ4LlJldmVhbC5qcworCituYW1lOiBGeC5SZXZlYWwKKworZGVzY3JpcHRpb246IERlZmluZXMgRnguUmV2ZWFsLCBhIGNsYXNzIHRoYXQgc2hvd3MgYW5kIGhpZGVzIGVsZW1lbnRzIHdpdGggYSB0cmFuc2l0aW9uLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSBDb3JlL0Z4Lk1vcnBoCisgIC0gRWxlbWVudC5TaG9ydGN1dHMKKyAgLSBFbGVtZW50Lk1lYXN1cmUKKworcHJvdmlkZXM6IFtGeC5SZXZlYWxdCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKKwordmFyIGhpZGVUaGVzZU9mID0gZnVuY3Rpb24ob2JqZWN0KXsKKwl2YXIgaGlkZVRoZXNlID0gb2JqZWN0Lm9wdGlvbnMuaGlkZUlucHV0czsKKwlpZiAod2luZG93Lk92ZXJUZXh0KXsKKwkJdmFyIG90Q2xhc3NlcyA9IFtudWxsXTsKKwkJT3ZlclRleHQuZWFjaChmdW5jdGlvbihvdCl7CisJCQlvdENsYXNzZXMuaW5jbHVkZSgnLicgKyBvdC5vcHRpb25zLmxhYmVsQ2xhc3MpOworCQl9KTsKKwkJaWYgKG90Q2xhc3NlcykgaGlkZVRoZXNlICs9IG90Q2xhc3Nlcy5qb2luKCcsICcpOworCX0KKwlyZXR1cm4gKGhpZGVUaGVzZSkgPyBvYmplY3QuZWxlbWVudC5nZXRFbGVtZW50cyhoaWRlVGhlc2UpIDogbnVsbDsKK307CisKKworRnguUmV2ZWFsID0gbmV3IENsYXNzKHsKKworCUV4dGVuZHM6IEZ4Lk1vcnBoLAorCisJb3B0aW9uczogey8qCisJCW9uU2hvdzogZnVuY3Rpb24odGhpc0VsZW1lbnQpe30sCisJCW9uSGlkZTogZnVuY3Rpb24odGhpc0VsZW1lbnQpe30sCisJCW9uQ29tcGxldGU6IGZ1bmN0aW9uKHRoaXNFbGVtZW50KXt9LAorCQloZWlnaHRPdmVycmlkZTogbnVsbCwKKwkJd2lkdGhPdmVycmlkZTogbnVsbCwqLworCQlsaW5rOiAnY2FuY2VsJywKKwkJc3R5bGVzOiBbJ3BhZGRpbmcnLCAnYm9yZGVyJywgJ21hcmdpbiddLAorCQl0cmFuc2l0aW9uT3BhY2l0eTogJ29wYWNpdHknIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwKKwkJbW9kZTogJ3ZlcnRpY2FsJywKKwkJZGlzcGxheTogZnVuY3Rpb24oKXsKKwkJCXJldHVybiB0aGlzLmVsZW1lbnQuZ2V0KCd0YWcnKSAhPSAndHInID8gJ2Jsb2NrJyA6ICd0YWJsZS1yb3cnOworCQl9LAorCQlvcGFjaXR5OiAxLAorCQloaWRlSW5wdXRzOiAhKCdvcGFjaXR5JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpID8gJ3NlbGVjdCwgaW5wdXQsIHRleHRhcmVhLCBvYmplY3QsIGVtYmVkJyA6IG51bGwKKwl9LAorCisJZGlzc29sdmU6IGZ1bmN0aW9uKCl7CisJCWlmICghdGhpcy5oaWRpbmcgJiYgIXRoaXMuc2hvd2luZyl7CisJCQlpZiAodGhpcy5lbGVtZW50LmdldFN0eWxlKCdkaXNwbGF5JykgIT0gJ25vbmUnKXsKKwkJCQl0aGlzLmhpZGluZyA9IHRydWU7CisJCQkJdGhpcy5zaG93aW5nID0gZmFsc2U7CisJCQkJdGhpcy5oaWRkZW4gPSB0cnVlOworCQkJCXRoaXMuY3NzVGV4dCA9IHRoaXMuZWxlbWVudC5zdHlsZS5jc3NUZXh0OworCisJCQkJdmFyIHN0YXJ0U3R5bGVzID0gdGhpcy5lbGVtZW50LmdldENvbXB1dGVkU2l6ZSh7CisJCQkJCXN0eWxlczogdGhpcy5vcHRpb25zLnN0eWxlcywKKwkJCQkJbW9kZTogdGhpcy5vcHRpb25zLm1vZGUKKwkJCQl9KTsKKwkJCQlpZiAodGhpcy5vcHRpb25zLnRyYW5zaXRpb25PcGFjaXR5KSBzdGFydFN0eWxlcy5vcGFjaXR5ID0gdGhpcy5vcHRpb25zLm9wYWNpdHk7CisKKwkJCQl2YXIgemVybyA9IHt9OworCQkJCU9iamVjdC5lYWNoKHN0YXJ0U3R5bGVzLCBmdW5jdGlvbihzdHlsZSwgbmFtZSl7CisJCQkJCXplcm9bbmFtZV0gPSBbc3R5bGUsIDBdOworCQkJCX0pOworCisJCQkJdGhpcy5lbGVtZW50LnNldFN0eWxlcyh7CisJCQkJCWRpc3BsYXk6IEZ1bmN0aW9uLmNvbnZlcnQodGhpcy5vcHRpb25zLmRpc3BsYXkpLmNhbGwodGhpcyksCisJCQkJCW92ZXJmbG93OiAnaGlkZGVuJworCQkJCX0pOworCisJCQkJdmFyIGhpZGVUaGVzZSA9IGhpZGVUaGVzZU9mKHRoaXMpOworCQkJCWlmIChoaWRlVGhlc2UpIGhpZGVUaGVzZS5zZXRTdHlsZSgndmlzaWJpbGl0eScsICdoaWRkZW4nKTsKKworCQkJCXRoaXMuJGNoYWluLnVuc2hpZnQoZnVuY3Rpb24oKXsKKwkJCQkJaWYgKHRoaXMuaGlkZGVuKXsKKwkJCQkJCXRoaXMuaGlkaW5nID0gZmFsc2U7CisJCQkJCQl0aGlzLmVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IHRoaXMuY3NzVGV4dDsKKwkJCQkJCXRoaXMuZWxlbWVudC5zZXRTdHlsZSgnZGlzcGxheScsICdub25lJyk7CisJCQkJCQlpZiAoaGlkZVRoZXNlKSBoaWRlVGhlc2Uuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpOworCQkJCQl9CisJCQkJCXRoaXMuZmlyZUV2ZW50KCdoaWRlJywgdGhpcy5lbGVtZW50KTsKKwkJCQkJdGhpcy5jYWxsQ2hhaW4oKTsKKwkJCQl9LmJpbmQodGhpcykpOworCisJCQkJdGhpcy5zdGFydCh6ZXJvKTsKKwkJCX0gZWxzZSB7CisJCQkJdGhpcy5jYWxsQ2hhaW4uZGVsYXkoMTAsIHRoaXMpOworCQkJCXRoaXMuZmlyZUV2ZW50KCdjb21wbGV0ZScsIHRoaXMuZWxlbWVudCk7CisJCQkJdGhpcy5maXJlRXZlbnQoJ2hpZGUnLCB0aGlzLmVsZW1lbnQpOworCQkJfQorCQl9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5saW5rID09ICdjaGFpbicpeworCQkJdGhpcy5jaGFpbih0aGlzLmRpc3NvbHZlLmJpbmQodGhpcykpOworCQl9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5saW5rID09ICdjYW5jZWwnICYmICF0aGlzLmhpZGluZyl7CisJCQl0aGlzLmNhbmNlbCgpOworCQkJdGhpcy5kaXNzb2x2ZSgpOworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwlyZXZlYWw6IGZ1bmN0aW9uKCl7CisJCWlmICghdGhpcy5zaG93aW5nICYmICF0aGlzLmhpZGluZyl7CisJCQlpZiAodGhpcy5lbGVtZW50LmdldFN0eWxlKCdkaXNwbGF5JykgPT0gJ25vbmUnKXsKKwkJCQl0aGlzLmhpZGluZyA9IGZhbHNlOworCQkJCXRoaXMuc2hvd2luZyA9IHRydWU7CisJCQkJdGhpcy5oaWRkZW4gPSBmYWxzZTsKKwkJCQl0aGlzLmNzc1RleHQgPSB0aGlzLmVsZW1lbnQuc3R5bGUuY3NzVGV4dDsKKworCQkJCXZhciBzdGFydFN0eWxlczsKKwkJCQl0aGlzLmVsZW1lbnQubWVhc3VyZShmdW5jdGlvbigpeworCQkJCQlzdGFydFN0eWxlcyA9IHRoaXMuZWxlbWVudC5nZXRDb21wdXRlZFNpemUoeworCQkJCQkJc3R5bGVzOiB0aGlzLm9wdGlvbnMuc3R5bGVzLAorCQkJCQkJbW9kZTogdGhpcy5vcHRpb25zLm1vZGUKKwkJCQkJfSk7CisJCQkJfS5iaW5kKHRoaXMpKTsKKwkJCQlpZiAodGhpcy5vcHRpb25zLmhlaWdodE92ZXJyaWRlICE9IG51bGwpIHN0YXJ0U3R5bGVzLmhlaWdodCA9IHRoaXMub3B0aW9ucy5oZWlnaHRPdmVycmlkZS50b0ludCgpOworCQkJCWlmICh0aGlzLm9wdGlvbnMud2lkdGhPdmVycmlkZSAhPSBudWxsKSBzdGFydFN0eWxlcy53aWR0aCA9IHRoaXMub3B0aW9ucy53aWR0aE92ZXJyaWRlLnRvSW50KCk7CisJCQkJaWYgKHRoaXMub3B0aW9ucy50cmFuc2l0aW9uT3BhY2l0eSl7CisJCQkJCXRoaXMuZWxlbWVudC5zZXRTdHlsZSgnb3BhY2l0eScsIDApOworCQkJCQlzdGFydFN0eWxlcy5vcGFjaXR5ID0gdGhpcy5vcHRpb25zLm9wYWNpdHk7CisJCQkJfQorCisJCQkJdmFyIHplcm8gPSB7CisJCQkJCWhlaWdodDogMCwKKwkJCQkJZGlzcGxheTogRnVuY3Rpb24uY29udmVydCh0aGlzLm9wdGlvbnMuZGlzcGxheSkuY2FsbCh0aGlzKQorCQkJCX07CisJCQkJT2JqZWN0LmVhY2goc3RhcnRTdHlsZXMsIGZ1bmN0aW9uKHN0eWxlLCBuYW1lKXsKKwkJCQkJemVyb1tuYW1lXSA9IDA7CisJCQkJfSk7CisJCQkJemVyby5vdmVyZmxvdyA9ICdoaWRkZW4nOworCisJCQkJdGhpcy5lbGVtZW50LnNldFN0eWxlcyh6ZXJvKTsKKworCQkJCXZhciBoaWRlVGhlc2UgPSBoaWRlVGhlc2VPZih0aGlzKTsKKwkJCQlpZiAoaGlkZVRoZXNlKSBoaWRlVGhlc2Uuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7CisKKwkJCQl0aGlzLiRjaGFpbi51bnNoaWZ0KGZ1bmN0aW9uKCl7CisJCQkJCXRoaXMuZWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gdGhpcy5jc3NUZXh0OworCQkJCQl0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ2Rpc3BsYXknLCBGdW5jdGlvbi5jb252ZXJ0KHRoaXMub3B0aW9ucy5kaXNwbGF5KS5jYWxsKHRoaXMpKTsKKwkJCQkJaWYgKCF0aGlzLmhpZGRlbikgdGhpcy5zaG93aW5nID0gZmFsc2U7CisJCQkJCWlmIChoaWRlVGhlc2UpIGhpZGVUaGVzZS5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7CisJCQkJCXRoaXMuY2FsbENoYWluKCk7CisJCQkJCXRoaXMuZmlyZUV2ZW50KCdzaG93JywgdGhpcy5lbGVtZW50KTsKKwkJCQl9LmJpbmQodGhpcykpOworCisJCQkJdGhpcy5zdGFydChzdGFydFN0eWxlcyk7CisJCQl9IGVsc2UgeworCQkJCXRoaXMuY2FsbENoYWluKCk7CisJCQkJdGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJywgdGhpcy5lbGVtZW50KTsKKwkJCQl0aGlzLmZpcmVFdmVudCgnc2hvdycsIHRoaXMuZWxlbWVudCk7CisJCQl9CisJCX0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmxpbmsgPT0gJ2NoYWluJyl7CisJCQl0aGlzLmNoYWluKHRoaXMucmV2ZWFsLmJpbmQodGhpcykpOworCQl9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5saW5rID09ICdjYW5jZWwnICYmICF0aGlzLnNob3dpbmcpeworCQkJdGhpcy5jYW5jZWwoKTsKKwkJCXRoaXMucmV2ZWFsKCk7CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXRvZ2dsZTogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMuZWxlbWVudC5nZXRTdHlsZSgnZGlzcGxheScpID09ICdub25lJyl7CisJCQl0aGlzLnJldmVhbCgpOworCQl9IGVsc2UgeworCQkJdGhpcy5kaXNzb2x2ZSgpOworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwljYW5jZWw6IGZ1bmN0aW9uKCl7CisJCXRoaXMucGFyZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisJCWlmICh0aGlzLmNzc1RleHQgIT0gbnVsbCkgdGhpcy5lbGVtZW50LnN0eWxlLmNzc1RleHQgPSB0aGlzLmNzc1RleHQ7CisJCXRoaXMuaGlkaW5nID0gZmFsc2U7CisJCXRoaXMuc2hvd2luZyA9IGZhbHNlOworCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCitFbGVtZW50LlByb3BlcnRpZXMucmV2ZWFsID0geworCisJc2V0OiBmdW5jdGlvbihvcHRpb25zKXsKKwkJdGhpcy5nZXQoJ3JldmVhbCcpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXQ6IGZ1bmN0aW9uKCl7CisJCXZhciByZXZlYWwgPSB0aGlzLnJldHJpZXZlKCdyZXZlYWwnKTsKKwkJaWYgKCFyZXZlYWwpeworCQkJcmV2ZWFsID0gbmV3IEZ4LlJldmVhbCh0aGlzKTsKKwkJCXRoaXMuc3RvcmUoJ3JldmVhbCcsIHJldmVhbCk7CisJCX0KKwkJcmV0dXJuIHJldmVhbDsKKwl9CisKK307CisKK0VsZW1lbnQuUHJvcGVydGllcy5kaXNzb2x2ZSA9IEVsZW1lbnQuUHJvcGVydGllcy5yZXZlYWw7CisKK0VsZW1lbnQuaW1wbGVtZW50KHsKKworCXJldmVhbDogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXRoaXMuZ2V0KCdyZXZlYWwnKS5zZXRPcHRpb25zKG9wdGlvbnMpLnJldmVhbCgpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZGlzc29sdmU6IGZ1bmN0aW9uKG9wdGlvbnMpeworCQl0aGlzLmdldCgncmV2ZWFsJykuc2V0T3B0aW9ucyhvcHRpb25zKS5kaXNzb2x2ZSgpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJbml4OiBmdW5jdGlvbihvcHRpb25zKXsKKwkJdmFyIHBhcmFtcyA9IEFycmF5LmxpbmsoYXJndW1lbnRzLCB7ZGVzdHJveTogVHlwZS5pc0Jvb2xlYW4sIG9wdGlvbnM6IFR5cGUuaXNPYmplY3R9KTsKKwkJdGhpcy5nZXQoJ3JldmVhbCcpLnNldE9wdGlvbnMob3B0aW9ucykuZGlzc29sdmUoKS5jaGFpbihmdW5jdGlvbigpeworCQkJdGhpc1twYXJhbXMuZGVzdHJveSA/ICdkZXN0cm95JyA6ICdkaXNwb3NlJ10oKTsKKwkJfS5iaW5kKHRoaXMpKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXdpbms6IGZ1bmN0aW9uKCl7CisJCXZhciBwYXJhbXMgPSBBcnJheS5saW5rKGFyZ3VtZW50cywge2R1cmF0aW9uOiBUeXBlLmlzTnVtYmVyLCBvcHRpb25zOiBUeXBlLmlzT2JqZWN0fSk7CisJCXZhciByZXZlYWwgPSB0aGlzLmdldCgncmV2ZWFsJykuc2V0T3B0aW9ucyhwYXJhbXMub3B0aW9ucyk7CisJCXJldmVhbC5yZXZlYWwoKS5jaGFpbihmdW5jdGlvbigpeworCQkJKGZ1bmN0aW9uKCl7CisJCQkJcmV2ZWFsLmRpc3NvbHZlKCk7CisJCQl9KS5kZWxheShwYXJhbXMuZHVyYXRpb24gfHwgMjAwMCk7CisJCX0pOworCX0KKworfSk7CisKK30pKCk7CisKKy8qCistLS0KKworc2NyaXB0OiBGb3JtLlJlcXVlc3QuQXBwZW5kLmpzCisKK25hbWU6IEZvcm0uUmVxdWVzdC5BcHBlbmQKKworZGVzY3JpcHRpb246IEhhbmRsZXMgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgb2Ygc3VibWl0dGluZyBhIGZvcm0gYW5kIHVwZGF0aW5nIGEgZG9tIGVsZW1lbnQgd2l0aCB0aGUgcmVzdWx0LiBUaGUgcmVzdWx0IGlzIGFwcGVuZGVkIHRvIHRoZSBET00gZWxlbWVudCBpbnN0ZWFkIG9mIHJlcGxhY2luZyBpdHMgY29udGVudHMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisKK3JlcXVpcmVzOgorICAtIEZvcm0uUmVxdWVzdAorICAtIEZ4LlJldmVhbAorICAtIEVsZW1lbnRzLmZyb20KKworcHJvdmlkZXM6IFtGb3JtLlJlcXVlc3QuQXBwZW5kXQorCisuLi4KKyovCisKK0Zvcm0uUmVxdWVzdC5BcHBlbmQgPSBuZXcgQ2xhc3MoeworCisJRXh0ZW5kczogRm9ybS5SZXF1ZXN0LAorCisJb3B0aW9uczogeworCQkvL29uQmVmb3JlRWZmZWN0OiBmdW5jdGlvbigpe30sCisJCXVzZVJldmVhbDogdHJ1ZSwKKwkJcmV2ZWFsT3B0aW9uczoge30sCisJCWluamVjdDogJ2JvdHRvbScKKwl9LAorCisJbWFrZVJlcXVlc3Q6IGZ1bmN0aW9uKCl7CisJCXRoaXMucmVxdWVzdCA9IG5ldyBSZXF1ZXN0LkhUTUwoT2JqZWN0Lm1lcmdlKHsKKwkJCXVybDogdGhpcy5lbGVtZW50LmdldCgnYWN0aW9uJyksCisJCQltZXRob2Q6IHRoaXMuZWxlbWVudC5nZXQoJ21ldGhvZCcpIHx8ICdwb3N0JywKKwkJCXNwaW5uZXJUYXJnZXQ6IHRoaXMuZWxlbWVudAorCQl9LCB0aGlzLm9wdGlvbnMucmVxdWVzdE9wdGlvbnMsIHsKKwkJCWV2YWxTY3JpcHRzOiBmYWxzZQorCQl9KSkuYWRkRXZlbnRzKHsKKwkJCXN1Y2Nlc3M6IGZ1bmN0aW9uKHRyZWUsIGVsZW1lbnRzLCBodG1sLCBqYXZhc2NyaXB0KXsKKwkJCQl2YXIgY29udGFpbmVyOworCQkJCXZhciBraWRzID0gRWxlbWVudHMuZnJvbShodG1sKTsKKwkJCQlpZiAoa2lkcy5sZW5ndGggPT0gMSl7CisJCQkJCWNvbnRhaW5lciA9IGtpZHNbMF07CisJCQkJfSBlbHNlIHsKKwkJCQkJY29udGFpbmVyID0gbmV3IEVsZW1lbnQoJ2RpdicsIHsKKwkJCQkJCXN0eWxlczogeworCQkJCQkJCWRpc3BsYXk6ICdub25lJworCQkJCQkJfQorCQkJCQl9KS5hZG9wdChraWRzKTsKKwkJCQl9CisJCQkJY29udGFpbmVyLmluamVjdCh0aGlzLnRhcmdldCwgdGhpcy5vcHRpb25zLmluamVjdCk7CisJCQkJaWYgKHRoaXMub3B0aW9ucy5yZXF1ZXN0T3B0aW9ucy5ldmFsU2NyaXB0cykgQnJvd3Nlci5leGVjKGphdmFzY3JpcHQpOworCQkJCXRoaXMuZmlyZUV2ZW50KCdiZWZvcmVFZmZlY3QnLCBjb250YWluZXIpOworCQkJCXZhciBmaW5pc2ggPSBmdW5jdGlvbigpeworCQkJCQl0aGlzLmZpcmVFdmVudCgnc3VjY2VzcycsIFtjb250YWluZXIsIHRoaXMudGFyZ2V0LCB0cmVlLCBlbGVtZW50cywgaHRtbCwgamF2YXNjcmlwdF0pOworCQkJCX0uYmluZCh0aGlzKTsKKwkJCQlpZiAodGhpcy5vcHRpb25zLnVzZVJldmVhbCl7CisJCQkJCWNvbnRhaW5lci5zZXQoJ3JldmVhbCcsIHRoaXMub3B0aW9ucy5yZXZlYWxPcHRpb25zKS5nZXQoJ3JldmVhbCcpLmNoYWluKGZpbmlzaCk7CisJCQkJCWNvbnRhaW5lci5yZXZlYWwoKTsKKwkJCQl9IGVsc2UgeworCQkJCQlmaW5pc2goKTsKKwkJCQl9CisJCQl9LmJpbmQodGhpcyksCisJCQlmYWlsdXJlOiBmdW5jdGlvbih4aHIpeworCQkJCXRoaXMuZmlyZUV2ZW50KCdmYWlsdXJlJywgeGhyKTsKKwkJCX0uYmluZCh0aGlzKQorCQl9KTsKKwkJdGhpcy5hdHRhY2hSZXNldCgpOworCX0KKworfSk7CisKKy8qCistLS0KKworc2NyaXB0OiBPYmplY3QuRXh0cmFzLmpzCisKK25hbWU6IE9iamVjdC5FeHRyYXMKKworZGVzY3JpcHRpb246IEV4dHJhIE9iamVjdCBnZW5lcmljcywgbGlrZSBnZXRGcm9tUGF0aCB3aGljaCBhbGxvd3MgYSBwYXRoIG5vdGF0aW9uIHRvIGNoaWxkIGVsZW1lbnRzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSBDb3JlL09iamVjdAorICAtIE1vb1Rvb2xzLk1vcmUKKworcHJvdmlkZXM6IFtPYmplY3QuRXh0cmFzXQorCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCit2YXIgZGVmaW5lZCA9IGZ1bmN0aW9uKHZhbHVlKXsKKwlyZXR1cm4gdmFsdWUgIT0gbnVsbDsKK307CisKK3ZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CisKK09iamVjdC5leHRlbmQoeworCisJZ2V0RnJvbVBhdGg6IGZ1bmN0aW9uKHNvdXJjZSwgcGFydHMpeworCQlpZiAodHlwZW9mIHBhcnRzID09ICdzdHJpbmcnKSBwYXJ0cyA9IHBhcnRzLnNwbGl0KCcuJyk7CisJCWZvciAodmFyIGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKXsKKwkJCWlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwgcGFydHNbaV0pKSBzb3VyY2UgPSBzb3VyY2VbcGFydHNbaV1dOworCQkJZWxzZSByZXR1cm4gbnVsbDsKKwkJfQorCQlyZXR1cm4gc291cmNlOworCX0sCisKKwljbGVhblZhbHVlczogZnVuY3Rpb24ob2JqZWN0LCBtZXRob2QpeworCQltZXRob2QgPSBtZXRob2QgfHwgZGVmaW5lZDsKKwkJZm9yICh2YXIga2V5IGluIG9iamVjdCkgaWYgKCFtZXRob2Qob2JqZWN0W2tleV0pKXsKKwkJCWRlbGV0ZSBvYmplY3Rba2V5XTsKKwkJfQorCQlyZXR1cm4gb2JqZWN0OworCX0sCisKKwllcmFzZTogZnVuY3Rpb24ob2JqZWN0LCBrZXkpeworCQlpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIGRlbGV0ZSBvYmplY3Rba2V5XTsKKwkJcmV0dXJuIG9iamVjdDsKKwl9LAorCisJcnVuOiBmdW5jdGlvbihvYmplY3QpeworCQl2YXIgYXJncyA9IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSk7CisJCWZvciAodmFyIGtleSBpbiBvYmplY3QpIGlmIChvYmplY3Rba2V5XS5hcHBseSl7CisJCQlvYmplY3Rba2V5XS5hcHBseShvYmplY3QsIGFyZ3MpOworCQl9CisJCXJldHVybiBvYmplY3Q7CisJfQorCit9KTsKKworfSkoKTsKKworLyoKKy0tLQorCitzY3JpcHQ6IExvY2FsZS5qcworCituYW1lOiBMb2NhbGUKKworZGVzY3JpcHRpb246IFByb3ZpZGVzIG1ldGhvZHMgZm9yIGxvY2FsaXphdGlvbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKyAgLSBBcmlhbiBTdG9sd2lqaworCityZXF1aXJlczoKKyAgLSBDb3JlL0V2ZW50cworICAtIE9iamVjdC5FeHRyYXMKKyAgLSBNb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLCBMYW5nXQorCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCit2YXIgY3VycmVudCA9IG51bGwsCisJbG9jYWxlcyA9IHt9LAorCWluaGVyaXRzID0ge307CisKK3ZhciBnZXRTZXQgPSBmdW5jdGlvbihzZXQpeworCWlmIChpbnN0YW5jZU9mKHNldCwgTG9jYWxlLlNldCkpIHJldHVybiBzZXQ7CisJZWxzZSByZXR1cm4gbG9jYWxlc1tzZXRdOworfTsKKwordmFyIExvY2FsZSA9IHRoaXMuTG9jYWxlID0geworCisJZGVmaW5lOiBmdW5jdGlvbihsb2NhbGUsIHNldCwga2V5LCB2YWx1ZSl7CisJCXZhciBuYW1lOworCQlpZiAoaW5zdGFuY2VPZihsb2NhbGUsIExvY2FsZS5TZXQpKXsKKwkJCW5hbWUgPSBsb2NhbGUubmFtZTsKKwkJCWlmIChuYW1lKSBsb2NhbGVzW25hbWVdID0gbG9jYWxlOworCQl9IGVsc2UgeworCQkJbmFtZSA9IGxvY2FsZTsKKwkJCWlmICghbG9jYWxlc1tuYW1lXSkgbG9jYWxlc1tuYW1lXSA9IG5ldyBMb2NhbGUuU2V0KG5hbWUpOworCQkJbG9jYWxlID0gbG9jYWxlc1tuYW1lXTsKKwkJfQorCisJCWlmIChzZXQpIGxvY2FsZS5kZWZpbmUoc2V0LCBrZXksIHZhbHVlKTsKKworCQkKKworCQlpZiAoIWN1cnJlbnQpIGN1cnJlbnQgPSBsb2NhbGU7CisKKwkJcmV0dXJuIGxvY2FsZTsKKwl9LAorCisJdXNlOiBmdW5jdGlvbihsb2NhbGUpeworCQlsb2NhbGUgPSBnZXRTZXQobG9jYWxlKTsKKworCQlpZiAobG9jYWxlKXsKKwkJCWN1cnJlbnQgPSBsb2NhbGU7CisKKwkJCXRoaXMuZmlyZUV2ZW50KCdjaGFuZ2UnLCBsb2NhbGUpOworCisJCQkKKwkJfQorCisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXRDdXJyZW50OiBmdW5jdGlvbigpeworCQlyZXR1cm4gY3VycmVudDsKKwl9LAorCisJZ2V0OiBmdW5jdGlvbihrZXksIGFyZ3MpeworCQlyZXR1cm4gKGN1cnJlbnQpID8gY3VycmVudC5nZXQoa2V5LCBhcmdzKSA6ICcnOworCX0sCisKKwlpbmhlcml0OiBmdW5jdGlvbihsb2NhbGUsIGluaGVyaXRzLCBzZXQpeworCQlsb2NhbGUgPSBnZXRTZXQobG9jYWxlKTsKKworCQlpZiAobG9jYWxlKSBsb2NhbGUuaW5oZXJpdChpbmhlcml0cywgc2V0KTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWxpc3Q6IGZ1bmN0aW9uKCl7CisJCXJldHVybiBPYmplY3Qua2V5cyhsb2NhbGVzKTsKKwl9CisKK307CisKK09iamVjdC5hcHBlbmQoTG9jYWxlLCBuZXcgRXZlbnRzKTsKKworTG9jYWxlLlNldCA9IG5ldyBDbGFzcyh7CisKKwlzZXRzOiB7fSwKKworCWluaGVyaXRzOiB7CisJCWxvY2FsZXM6IFtdLAorCQlzZXRzOiB7fQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihuYW1lKXsKKwkJdGhpcy5uYW1lID0gbmFtZSB8fCAnJzsKKwl9LAorCisJZGVmaW5lOiBmdW5jdGlvbihzZXQsIGtleSwgdmFsdWUpeworCQl2YXIgZGVmaW5lRGF0YSA9IHRoaXMuc2V0c1tzZXRdOworCQlpZiAoIWRlZmluZURhdGEpIGRlZmluZURhdGEgPSB7fTsKKworCQlpZiAoa2V5KXsKKwkJCWlmICh0eXBlT2Yoa2V5KSA9PSAnb2JqZWN0JykgZGVmaW5lRGF0YSA9IE9iamVjdC5tZXJnZShkZWZpbmVEYXRhLCBrZXkpOworCQkJZWxzZSBkZWZpbmVEYXRhW2tleV0gPSB2YWx1ZTsKKwkJfQorCQl0aGlzLnNldHNbc2V0XSA9IGRlZmluZURhdGE7CisKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWdldDogZnVuY3Rpb24oa2V5LCBhcmdzLCBfYmFzZSl7CisJCXZhciB2YWx1ZSA9IE9iamVjdC5nZXRGcm9tUGF0aCh0aGlzLnNldHMsIGtleSk7CisJCWlmICh2YWx1ZSAhPSBudWxsKXsKKwkJCXZhciB0eXBlID0gdHlwZU9mKHZhbHVlKTsKKwkJCWlmICh0eXBlID09ICdmdW5jdGlvbicpIHZhbHVlID0gdmFsdWUuYXBwbHkobnVsbCwgQXJyYXkuY29udmVydChhcmdzKSk7CisJCQllbHNlIGlmICh0eXBlID09ICdvYmplY3QnKSB2YWx1ZSA9IE9iamVjdC5jbG9uZSh2YWx1ZSk7CisJCQlyZXR1cm4gdmFsdWU7CisJCX0KKworCQkvLyBnZXQgdmFsdWUgb2YgaW5oZXJpdGVkIGxvY2FsZXMKKwkJdmFyIGluZGV4ID0ga2V5LmluZGV4T2YoJy4nKSwKKwkJCXNldCA9IGluZGV4IDwgMCA/IGtleSA6IGtleS5zdWJzdHIoMCwgaW5kZXgpLAorCQkJbmFtZXMgPSAodGhpcy5pbmhlcml0cy5zZXRzW3NldF0gfHwgW10pLmNvbWJpbmUodGhpcy5pbmhlcml0cy5sb2NhbGVzKS5pbmNsdWRlKCdlbi1VUycpOworCQlpZiAoIV9iYXNlKSBfYmFzZSA9IFtdOworCisJCWZvciAodmFyIGkgPSAwLCBsID0gbmFtZXMubGVuZ3RoOyBpIDwgbDsgaSsrKXsKKwkJCWlmIChfYmFzZS5jb250YWlucyhuYW1lc1tpXSkpIGNvbnRpbnVlOworCQkJX2Jhc2UuaW5jbHVkZShuYW1lc1tpXSk7CisKKwkJCXZhciBsb2NhbGUgPSBsb2NhbGVzW25hbWVzW2ldXTsKKwkJCWlmICghbG9jYWxlKSBjb250aW51ZTsKKworCQkJdmFsdWUgPSBsb2NhbGUuZ2V0KGtleSwgYXJncywgX2Jhc2UpOworCQkJaWYgKHZhbHVlICE9IG51bGwpIHJldHVybiB2YWx1ZTsKKwkJfQorCisJCXJldHVybiAnJzsKKwl9LAorCisJaW5oZXJpdDogZnVuY3Rpb24obmFtZXMsIHNldCl7CisJCW5hbWVzID0gQXJyYXkuY29udmVydChuYW1lcyk7CisKKwkJaWYgKHNldCAmJiAhdGhpcy5pbmhlcml0cy5zZXRzW3NldF0pIHRoaXMuaW5oZXJpdHMuc2V0c1tzZXRdID0gW107CisKKwkJdmFyIGwgPSBuYW1lcy5sZW5ndGg7CisJCXdoaWxlIChsLS0pIChzZXQgPyB0aGlzLmluaGVyaXRzLnNldHNbc2V0XSA6IHRoaXMuaW5oZXJpdHMubG9jYWxlcykudW5zaGlmdChuYW1lc1tsXSk7CisKKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKworCisKK30pKCk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmVuLVVTLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIFVTIEVuZ2xpc2guCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5lbi1VUy5EYXRlXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2VuLVVTJywgJ0RhdGUnLCB7CisKKwltb250aHM6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddLAorCW1vbnRoc19hYmJyOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sCisJZGF5czogWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddLAorCWRheXNfYWJicjogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBNTS9ERC9ZWVlZCisJZGF0ZU9yZGVyOiBbJ21vbnRoJywgJ2RhdGUnLCAneWVhciddLAorCXNob3J0RGF0ZTogJyVtLyVkLyVZJywKKwlzaG9ydFRpbWU6ICclSTolTSVwJywKKwlBTTogJ0FNJywKKwlQTTogJ1BNJywKKwlmaXJzdERheU9mV2VlazogMCwKKworCS8vIERhdGUuRXh0cmFzCisJb3JkaW5hbDogZnVuY3Rpb24oZGF5T2ZNb250aCl7CisJCS8vIDFzdCwgMm5kLCAzcmQsIGV0Yy4KKwkJcmV0dXJuIChkYXlPZk1vbnRoID4gMyAmJiBkYXlPZk1vbnRoIDwgMjEpID8gJ3RoJyA6IFsndGgnLCAnc3QnLCAnbmQnLCAncmQnLCAndGgnXVtNYXRoLm1pbihkYXlPZk1vbnRoICUgMTAsIDQpXTsKKwl9LAorCisJbGVzc1RoYW5NaW51dGVBZ286ICdsZXNzIHRoYW4gYSBtaW51dGUgYWdvJywKKwltaW51dGVBZ286ICdhYm91dCBhIG1pbnV0ZSBhZ28nLAorCW1pbnV0ZXNBZ286ICd7ZGVsdGF9IG1pbnV0ZXMgYWdvJywKKwlob3VyQWdvOiAnYWJvdXQgYW4gaG91ciBhZ28nLAorCWhvdXJzQWdvOiAnYWJvdXQge2RlbHRhfSBob3VycyBhZ28nLAorCWRheUFnbzogJzEgZGF5IGFnbycsCisJZGF5c0FnbzogJ3tkZWx0YX0gZGF5cyBhZ28nLAorCXdlZWtBZ286ICcxIHdlZWsgYWdvJywKKwl3ZWVrc0FnbzogJ3tkZWx0YX0gd2Vla3MgYWdvJywKKwltb250aEFnbzogJzEgbW9udGggYWdvJywKKwltb250aHNBZ286ICd7ZGVsdGF9IG1vbnRocyBhZ28nLAorCXllYXJBZ286ICcxIHllYXIgYWdvJywKKwl5ZWFyc0FnbzogJ3tkZWx0YX0geWVhcnMgYWdvJywKKworCWxlc3NUaGFuTWludXRlVW50aWw6ICdsZXNzIHRoYW4gYSBtaW51dGUgZnJvbSBub3cnLAorCW1pbnV0ZVVudGlsOiAnYWJvdXQgYSBtaW51dGUgZnJvbSBub3cnLAorCW1pbnV0ZXNVbnRpbDogJ3tkZWx0YX0gbWludXRlcyBmcm9tIG5vdycsCisJaG91clVudGlsOiAnYWJvdXQgYW4gaG91ciBmcm9tIG5vdycsCisJaG91cnNVbnRpbDogJ2Fib3V0IHtkZWx0YX0gaG91cnMgZnJvbSBub3cnLAorCWRheVVudGlsOiAnMSBkYXkgZnJvbSBub3cnLAorCWRheXNVbnRpbDogJ3tkZWx0YX0gZGF5cyBmcm9tIG5vdycsCisJd2Vla1VudGlsOiAnMSB3ZWVrIGZyb20gbm93JywKKwl3ZWVrc1VudGlsOiAne2RlbHRhfSB3ZWVrcyBmcm9tIG5vdycsCisJbW9udGhVbnRpbDogJzEgbW9udGggZnJvbSBub3cnLAorCW1vbnRoc1VudGlsOiAne2RlbHRhfSBtb250aHMgZnJvbSBub3cnLAorCXllYXJVbnRpbDogJzEgeWVhciBmcm9tIG5vdycsCisJeWVhcnNVbnRpbDogJ3tkZWx0YX0geWVhcnMgZnJvbSBub3cnCisKK30pOworCisvKgorLS0tCisKK3NjcmlwdDogRGF0ZS5qcworCituYW1lOiBEYXRlCisKK2Rlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBEYXRlIG5hdGl2ZSBvYmplY3QgdG8gaW5jbHVkZSBtZXRob2RzIHVzZWZ1bCBpbiBtYW5hZ2luZyBkYXRlcy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKyAgLSBOaWNob2xhcyBCYXJ0aGVsZW15IC0gaHR0cHM6Ly9zdm4ubmJhcnRoZWxlbXkuY29tL2RhdGUtanMvCisgIC0gSGFyYWxkIEtpcnNobmVyIC0gbWFpbCBbYXRdIGRpZ2l0YXJhbGQuZGU7IGh0dHA6Ly9kaWdpdGFyYWxkLmRlCisgIC0gU2NvdHQgS3lsZSAtIHNjb3R0IFthdF0gYXBwZGVuLmNvbTsgaHR0cDovL2FwcGRlbi5jb20KKworcmVxdWlyZXM6CisgIC0gQ29yZS9BcnJheQorICAtIENvcmUvU3RyaW5nCisgIC0gQ29yZS9OdW1iZXIKKyAgLSBNb29Ub29scy5Nb3JlCisgIC0gTG9jYWxlCisgIC0gTG9jYWxlLmVuLVVTLkRhdGUKKworcHJvdmlkZXM6IFtEYXRlXQorCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCit2YXIgRGF0ZSA9IHRoaXMuRGF0ZTsKKwordmFyIERhdGVNZXRob2RzID0gRGF0ZS5NZXRob2RzID0geworCW1zOiAnTWlsbGlzZWNvbmRzJywKKwl5ZWFyOiAnRnVsbFllYXInLAorCW1pbjogJ01pbnV0ZXMnLAorCW1vOiAnTW9udGgnLAorCXNlYzogJ1NlY29uZHMnLAorCWhyOiAnSG91cnMnCit9OworCitbCisJJ0RhdGUnLCAnRGF5JywgJ0Z1bGxZZWFyJywgJ0hvdXJzJywgJ01pbGxpc2Vjb25kcycsICdNaW51dGVzJywgJ01vbnRoJywgJ1NlY29uZHMnLCAnVGltZScsICdUaW1lem9uZU9mZnNldCcsCisJJ1dlZWsnLCAnVGltZXpvbmUnLCAnR01UT2Zmc2V0JywgJ0RheU9mWWVhcicsICdMYXN0TW9udGgnLCAnTGFzdERheU9mTW9udGgnLCAnVVRDRGF0ZScsICdVVENEYXknLCAnVVRDRnVsbFllYXInLAorCSdBTVBNJywgJ09yZGluYWwnLCAnVVRDSG91cnMnLCAnVVRDTWlsbGlzZWNvbmRzJywgJ1VUQ01pbnV0ZXMnLCAnVVRDTW9udGgnLCAnVVRDU2Vjb25kcycsICdVVENNaWxsaXNlY29uZHMnCitdLmVhY2goZnVuY3Rpb24obWV0aG9kKXsKKwlEYXRlLk1ldGhvZHNbbWV0aG9kLnRvTG93ZXJDYXNlKCldID0gbWV0aG9kOworfSk7CisKK3ZhciBwYWQgPSBmdW5jdGlvbihuLCBkaWdpdHMsIHN0cmluZyl7CisJaWYgKGRpZ2l0cyA9PSAxKSByZXR1cm4gbjsKKwlyZXR1cm4gbiA8IE1hdGgucG93KDEwLCBkaWdpdHMgLSAxKSA/IChzdHJpbmcgfHwgJzAnKSArIHBhZChuLCBkaWdpdHMgLSAxLCBzdHJpbmcpIDogbjsKK307CisKK0RhdGUuaW1wbGVtZW50KHsKKworCXNldDogZnVuY3Rpb24ocHJvcCwgdmFsdWUpeworCQlwcm9wID0gcHJvcC50b0xvd2VyQ2FzZSgpOworCQl2YXIgbWV0aG9kID0gRGF0ZU1ldGhvZHNbcHJvcF0gJiYgJ3NldCcgKyBEYXRlTWV0aG9kc1twcm9wXTsKKwkJaWYgKG1ldGhvZCAmJiB0aGlzW21ldGhvZF0pIHRoaXNbbWV0aG9kXSh2YWx1ZSk7CisJCXJldHVybiB0aGlzOworCX0ub3ZlcmxvYWRTZXR0ZXIoKSwKKworCWdldDogZnVuY3Rpb24ocHJvcCl7CisJCXByb3AgPSBwcm9wLnRvTG93ZXJDYXNlKCk7CisJCXZhciBtZXRob2QgPSBEYXRlTWV0aG9kc1twcm9wXSAmJiAnZ2V0JyArIERhdGVNZXRob2RzW3Byb3BdOworCQlpZiAobWV0aG9kICYmIHRoaXNbbWV0aG9kXSkgcmV0dXJuIHRoaXNbbWV0aG9kXSgpOworCQlyZXR1cm4gbnVsbDsKKwl9Lm92ZXJsb2FkR2V0dGVyKCksCisKKwljbG9uZTogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIG5ldyBEYXRlKHRoaXMuZ2V0KCd0aW1lJykpOworCX0sCisKKwlpbmNyZW1lbnQ6IGZ1bmN0aW9uKGludGVydmFsLCB0aW1lcyl7CisJCWludGVydmFsID0gaW50ZXJ2YWwgfHwgJ2RheSc7CisJCXRpbWVzID0gdGltZXMgIT0gbnVsbCA/IHRpbWVzIDogMTsKKworCQlzd2l0Y2ggKGludGVydmFsKXsKKwkJCWNhc2UgJ3llYXInOgorCQkJCXJldHVybiB0aGlzLmluY3JlbWVudCgnbW9udGgnLCB0aW1lcyAqIDEyKTsKKwkJCWNhc2UgJ21vbnRoJzoKKwkJCQl2YXIgZCA9IHRoaXMuZ2V0KCdkYXRlJyk7CisJCQkJdGhpcy5zZXQoJ2RhdGUnLCAxKS5zZXQoJ21vJywgdGhpcy5nZXQoJ21vJykgKyB0aW1lcyk7CisJCQkJcmV0dXJuIHRoaXMuc2V0KCdkYXRlJywgZC5taW4odGhpcy5nZXQoJ2xhc3RkYXlvZm1vbnRoJykpKTsKKwkJCWNhc2UgJ3dlZWsnOgorCQkJCXJldHVybiB0aGlzLmluY3JlbWVudCgnZGF5JywgdGltZXMgKiA3KTsKKwkJCWNhc2UgJ2RheSc6CisJCQkJcmV0dXJuIHRoaXMuc2V0KCdkYXRlJywgdGhpcy5nZXQoJ2RhdGUnKSArIHRpbWVzKTsKKwkJfQorCisJCWlmICghRGF0ZS51bml0c1tpbnRlcnZhbF0pIHRocm93IG5ldyBFcnJvcihpbnRlcnZhbCArICcgaXMgbm90IGEgc3VwcG9ydGVkIGludGVydmFsJyk7CisKKwkJcmV0dXJuIHRoaXMuc2V0KCd0aW1lJywgdGhpcy5nZXQoJ3RpbWUnKSArIHRpbWVzICogRGF0ZS51bml0c1tpbnRlcnZhbF0oKSk7CisJfSwKKworCWRlY3JlbWVudDogZnVuY3Rpb24oaW50ZXJ2YWwsIHRpbWVzKXsKKwkJcmV0dXJuIHRoaXMuaW5jcmVtZW50KGludGVydmFsLCAtMSAqICh0aW1lcyAhPSBudWxsID8gdGltZXMgOiAxKSk7CisJfSwKKworCWlzTGVhcFllYXI6IGZ1bmN0aW9uKCl7CisJCXJldHVybiBEYXRlLmlzTGVhcFllYXIodGhpcy5nZXQoJ3llYXInKSk7CisJfSwKKworCWNsZWFyVGltZTogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuc2V0KHtocjogMCwgbWluOiAwLCBzZWM6IDAsIG1zOiAwfSk7CisJfSwKKworCWRpZmY6IGZ1bmN0aW9uKGRhdGUsIHJlc29sdXRpb24peworCQlpZiAodHlwZU9mKGRhdGUpID09ICdzdHJpbmcnKSBkYXRlID0gRGF0ZS5wYXJzZShkYXRlKTsKKworCQlyZXR1cm4gKChkYXRlIC0gdGhpcykgLyBEYXRlLnVuaXRzW3Jlc29sdXRpb24gfHwgJ2RheSddKDMsIDMpKS5yb3VuZCgpOyAvLyBub24tbGVhcCB5ZWFyLCAzMC1kYXkgbW9udGgKKwl9LAorCisJZ2V0TGFzdERheU9mTW9udGg6IGZ1bmN0aW9uKCl7CisJCXJldHVybiBEYXRlLmRheXNJbk1vbnRoKHRoaXMuZ2V0KCdtbycpLCB0aGlzLmdldCgneWVhcicpKTsKKwl9LAorCisJZ2V0RGF5T2ZZZWFyOiBmdW5jdGlvbigpeworCQlyZXR1cm4gKERhdGUuVVRDKHRoaXMuZ2V0KCd5ZWFyJyksIHRoaXMuZ2V0KCdtbycpLCB0aGlzLmdldCgnZGF0ZScpICsgMSkKKwkJCS0gRGF0ZS5VVEModGhpcy5nZXQoJ3llYXInKSwgMCwgMSkpIC8gRGF0ZS51bml0cy5kYXkoKTsKKwl9LAorCisJc2V0RGF5OiBmdW5jdGlvbihkYXksIGZpcnN0RGF5T2ZXZWVrKXsKKwkJaWYgKGZpcnN0RGF5T2ZXZWVrID09IG51bGwpeworCQkJZmlyc3REYXlPZldlZWsgPSBEYXRlLmdldE1zZygnZmlyc3REYXlPZldlZWsnKTsKKwkJCWlmIChmaXJzdERheU9mV2VlayA9PT0gJycpIGZpcnN0RGF5T2ZXZWVrID0gMTsKKwkJfQorCisJCWRheSA9ICg3ICsgRGF0ZS5wYXJzZURheShkYXksIHRydWUpIC0gZmlyc3REYXlPZldlZWspICUgNzsKKwkJdmFyIGN1cnJlbnREYXkgPSAoNyArIHRoaXMuZ2V0KCdkYXknKSAtIGZpcnN0RGF5T2ZXZWVrKSAlIDc7CisKKwkJcmV0dXJuIHRoaXMuaW5jcmVtZW50KCdkYXknLCBkYXkgLSBjdXJyZW50RGF5KTsKKwl9LAorCisJZ2V0V2VlazogZnVuY3Rpb24oZmlyc3REYXlPZldlZWspeworCQlpZiAoZmlyc3REYXlPZldlZWsgPT0gbnVsbCl7CisJCQlmaXJzdERheU9mV2VlayA9IERhdGUuZ2V0TXNnKCdmaXJzdERheU9mV2VlaycpOworCQkJaWYgKGZpcnN0RGF5T2ZXZWVrID09PSAnJykgZmlyc3REYXlPZldlZWsgPSAxOworCQl9CisKKwkJdmFyIGRhdGUgPSB0aGlzLAorCQkJZGF5T2ZXZWVrID0gKDcgKyBkYXRlLmdldCgnZGF5JykgLSBmaXJzdERheU9mV2VlaykgJSA3LAorCQkJZGl2aWRlbmQgPSAwLAorCQkJZmlyc3REYXlPZlllYXI7CisKKwkJaWYgKGZpcnN0RGF5T2ZXZWVrID09IDEpeworCQkJLy8gSVNPLTg2MDEsIHdlZWsgYmVsb25ncyB0byB5ZWFyIHRoYXQgaGFzIHRoZSBtb3N0IGRheXMgb2YgdGhlIHdlZWsgKGkuZS4gaGFzIHRoZSB0aHVyc2RheSBvZiB0aGUgd2VlaykKKwkJCXZhciBtb250aCA9IGRhdGUuZ2V0KCdtb250aCcpLAorCQkJCXN0YXJ0T2ZXZWVrID0gZGF0ZS5nZXQoJ2RhdGUnKSAtIGRheU9mV2VlazsKKworCQkJaWYgKG1vbnRoID09IDExICYmIHN0YXJ0T2ZXZWVrID4gMjgpIHJldHVybiAxOyAvLyBXZWVrIDEgb2YgbmV4dCB5ZWFyCisKKwkJCWlmIChtb250aCA9PSAwICYmIHN0YXJ0T2ZXZWVrIDwgLTIpeworCQkJCS8vIFVzZSBhIGRhdGUgZnJvbSBsYXN0IHllYXIgdG8gZGV0ZXJtaW5lIHRoZSB3ZWVrCisJCQkJZGF0ZSA9IG5ldyBEYXRlKGRhdGUpLmRlY3JlbWVudCgnZGF5JywgZGF5T2ZXZWVrKTsKKwkJCQlkYXlPZldlZWsgPSAwOworCQkJfQorCisJCQlmaXJzdERheU9mWWVhciA9IG5ldyBEYXRlKGRhdGUuZ2V0KCd5ZWFyJyksIDAsIDEpLmdldCgnZGF5JykgfHwgNzsKKwkJCWlmIChmaXJzdERheU9mWWVhciA+IDQpIGRpdmlkZW5kID0gLTc7IC8vIEZpcnN0IHdlZWsgb2YgdGhlIHllYXIgaXMgbm90IHdlZWsgMQorCQl9IGVsc2UgeworCQkJLy8gSW4gb3RoZXIgY3VsdHVyZXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIgaXMgYWx3YXlzIHdlZWsgMSBhbmQgdGhlIGxhc3Qgd2VlayBhbHdheXMgNTMgb3IgNTQuCisJCQkvLyBEYXlzIGluIHRoZSBzYW1lIHdlZWsgY2FuIGhhdmUgYSBkaWZmZXJlbnQgd2Vla251bWJlciBpZiB0aGUgd2VlayBzcHJlYWRzIGFjcm9zcyB0d28geWVhcnMuCisJCQlmaXJzdERheU9mWWVhciA9IG5ldyBEYXRlKGRhdGUuZ2V0KCd5ZWFyJyksIDAsIDEpLmdldCgnZGF5Jyk7CisJCX0KKworCQlkaXZpZGVuZCArPSBkYXRlLmdldCgnZGF5b2Z5ZWFyJyk7CisJCWRpdmlkZW5kICs9IDYgLSBkYXlPZldlZWs7IC8vIEFkZCBkYXlzIHNvIHdlIGNhbGN1bGF0ZSB0aGUgY3VycmVudCBkYXRlJ3Mgd2VlayBhcyBhIGZ1bGwgd2VlaworCQlkaXZpZGVuZCArPSAoNyArIGZpcnN0RGF5T2ZZZWFyIC0gZmlyc3REYXlPZldlZWspICUgNzsgLy8gTWFrZSB1cCBmb3IgZmlyc3Qgd2VlayBvZiB0aGUgeWVhciBub3QgYmVpbmcgYSBmdWxsIHdlZWsKKworCQlyZXR1cm4gKGRpdmlkZW5kIC8gNyk7CisJfSwKKworCWdldE9yZGluYWw6IGZ1bmN0aW9uKGRheSl7CisJCXJldHVybiBEYXRlLmdldE1zZygnb3JkaW5hbCcsIGRheSB8fCB0aGlzLmdldCgnZGF0ZScpKTsKKwl9LAorCisJZ2V0VGltZXpvbmU6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLnRvU3RyaW5nKCkKKwkJCS5yZXBsYWNlKC9eLio/IChbQS1aXXszfSkuWzAtOV17NH0uKiQvLCAnJDEnKQorCQkJLnJlcGxhY2UoL14uKj9cKChbQS1aXSlbYS16XSsgKFtBLVpdKVthLXpdKyAoW0EtWl0pW2Etel0rXCkkLywgJyQxJDIkMycpOworCX0sCisKKwlnZXRHTVRPZmZzZXQ6IGZ1bmN0aW9uKCl7CisJCXZhciBvZmYgPSB0aGlzLmdldCgndGltZXpvbmVPZmZzZXQnKTsKKwkJcmV0dXJuICgob2ZmID4gMCkgPyAnLScgOiAnKycpICsgcGFkKChvZmYuYWJzKCkgLyA2MCkuZmxvb3IoKSwgMikgKyBwYWQob2ZmICUgNjAsIDIpOworCX0sCisKKwlzZXRBTVBNOiBmdW5jdGlvbihhbXBtKXsKKwkJYW1wbSA9IGFtcG0udG9VcHBlckNhc2UoKTsKKwkJdmFyIGhyID0gdGhpcy5nZXQoJ2hyJyk7CisJCWlmIChociA+IDExICYmIGFtcG0gPT0gJ0FNJykgcmV0dXJuIHRoaXMuZGVjcmVtZW50KCdob3VyJywgMTIpOworCQllbHNlIGlmIChociA8IDEyICYmIGFtcG0gPT0gJ1BNJykgcmV0dXJuIHRoaXMuaW5jcmVtZW50KCdob3VyJywgMTIpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZ2V0QU1QTTogZnVuY3Rpb24oKXsKKwkJcmV0dXJuICh0aGlzLmdldCgnaHInKSA8IDEyKSA/ICdBTScgOiAnUE0nOworCX0sCisKKwlwYXJzZTogZnVuY3Rpb24oc3RyKXsKKwkJdGhpcy5zZXQoJ3RpbWUnLCBEYXRlLnBhcnNlKHN0cikpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJaXNWYWxpZDogZnVuY3Rpb24oZGF0ZSl7CisJCWlmICghZGF0ZSkgZGF0ZSA9IHRoaXM7CisJCXJldHVybiB0eXBlT2YoZGF0ZSkgPT0gJ2RhdGUnICYmICFpc05hTihkYXRlLnZhbHVlT2YoKSk7CisJfSwKKworCWZvcm1hdDogZnVuY3Rpb24oZm9ybWF0KXsKKwkJaWYgKCF0aGlzLmlzVmFsaWQoKSkgcmV0dXJuICdpbnZhbGlkIGRhdGUnOworCisJCWlmICghZm9ybWF0KSBmb3JtYXQgPSAnJXggJVgnOworCQlpZiAodHlwZW9mIGZvcm1hdCA9PSAnc3RyaW5nJykgZm9ybWF0ID0gZm9ybWF0c1tmb3JtYXQudG9Mb3dlckNhc2UoKV0gfHwgZm9ybWF0OworCQlpZiAodHlwZW9mIGZvcm1hdCA9PSAnZnVuY3Rpb24nKSByZXR1cm4gZm9ybWF0KHRoaXMpOworCisJCXZhciBkID0gdGhpczsKKwkJcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC8lKFthLXolXSkvZ2ksCisJCQlmdW5jdGlvbigkMCwgJDEpeworCQkJCXN3aXRjaCAoJDEpeworCQkJCQljYXNlICdhJzogcmV0dXJuIERhdGUuZ2V0TXNnKCdkYXlzX2FiYnInKVtkLmdldCgnZGF5JyldOworCQkJCQljYXNlICdBJzogcmV0dXJuIERhdGUuZ2V0TXNnKCdkYXlzJylbZC5nZXQoJ2RheScpXTsKKwkJCQkJY2FzZSAnYic6IHJldHVybiBEYXRlLmdldE1zZygnbW9udGhzX2FiYnInKVtkLmdldCgnbW9udGgnKV07CisJCQkJCWNhc2UgJ0InOiByZXR1cm4gRGF0ZS5nZXRNc2coJ21vbnRocycpW2QuZ2V0KCdtb250aCcpXTsKKwkJCQkJY2FzZSAnYyc6IHJldHVybiBkLmZvcm1hdCgnJWEgJWIgJWQgJUg6JU06JVMgJVknKTsKKwkJCQkJY2FzZSAnZCc6IHJldHVybiBwYWQoZC5nZXQoJ2RhdGUnKSwgMik7CisJCQkJCWNhc2UgJ2UnOiByZXR1cm4gcGFkKGQuZ2V0KCdkYXRlJyksIDIsICcgJyk7CisJCQkJCWNhc2UgJ0gnOiByZXR1cm4gcGFkKGQuZ2V0KCdocicpLCAyKTsKKwkJCQkJY2FzZSAnSSc6IHJldHVybiBwYWQoKGQuZ2V0KCdocicpICUgMTIpIHx8IDEyLCAyKTsKKwkJCQkJY2FzZSAnaic6IHJldHVybiBwYWQoZC5nZXQoJ2RheW9meWVhcicpLCAzKTsKKwkJCQkJY2FzZSAnayc6IHJldHVybiBwYWQoZC5nZXQoJ2hyJyksIDIsICcgJyk7CisJCQkJCWNhc2UgJ2wnOiByZXR1cm4gcGFkKChkLmdldCgnaHInKSAlIDEyKSB8fCAxMiwgMiwgJyAnKTsKKwkJCQkJY2FzZSAnTCc6IHJldHVybiBwYWQoZC5nZXQoJ21zJyksIDMpOworCQkJCQljYXNlICdtJzogcmV0dXJuIHBhZCgoZC5nZXQoJ21vJykgKyAxKSwgMik7CisJCQkJCWNhc2UgJ00nOiByZXR1cm4gcGFkKGQuZ2V0KCdtaW4nKSwgMik7CisJCQkJCWNhc2UgJ28nOiByZXR1cm4gZC5nZXQoJ29yZGluYWwnKTsKKwkJCQkJY2FzZSAncCc6IHJldHVybiBEYXRlLmdldE1zZyhkLmdldCgnYW1wbScpKTsKKwkJCQkJY2FzZSAncyc6IHJldHVybiBNYXRoLnJvdW5kKGQgLyAxMDAwKTsKKwkJCQkJY2FzZSAnUyc6IHJldHVybiBwYWQoZC5nZXQoJ3NlY29uZHMnKSwgMik7CisJCQkJCWNhc2UgJ1QnOiByZXR1cm4gZC5mb3JtYXQoJyVIOiVNOiVTJyk7CisJCQkJCWNhc2UgJ1UnOiByZXR1cm4gcGFkKGQuZ2V0KCd3ZWVrJyksIDIpOworCQkJCQljYXNlICd3JzogcmV0dXJuIGQuZ2V0KCdkYXknKTsKKwkJCQkJY2FzZSAneCc6IHJldHVybiBkLmZvcm1hdChEYXRlLmdldE1zZygnc2hvcnREYXRlJykpOworCQkJCQljYXNlICdYJzogcmV0dXJuIGQuZm9ybWF0KERhdGUuZ2V0TXNnKCdzaG9ydFRpbWUnKSk7CisJCQkJCWNhc2UgJ3knOiByZXR1cm4gZC5nZXQoJ3llYXInKS50b1N0cmluZygpLnN1YnN0cigyKTsKKwkJCQkJY2FzZSAnWSc6IHJldHVybiBkLmdldCgneWVhcicpOworCQkJCQljYXNlICd6JzogcmV0dXJuIGQuZ2V0KCdHTVRPZmZzZXQnKTsKKwkJCQkJY2FzZSAnWic6IHJldHVybiBkLmdldCgnVGltZXpvbmUnKTsKKwkJCQl9CisJCQkJcmV0dXJuICQxOworCQkJfQorCQkpOworCX0sCisKKwl0b0lTT1N0cmluZzogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuZm9ybWF0KCdpc284NjAxJyk7CisJfQorCit9KS5hbGlhcyh7CisJdG9KU09OOiAndG9JU09TdHJpbmcnLAorCWNvbXBhcmU6ICdkaWZmJywKKwlzdHJmdGltZTogJ2Zvcm1hdCcKK30pOworCisvLyBUaGUgZGF5IGFuZCBtb250aCBhYmJyZXZpYXRpb25zIGFyZSBzdGFuZGFyZGl6ZWQsIHNvIHdlIGNhbm5vdCB1c2Ugc2ltcGx5ICVhIGFuZCAlYiBiZWNhdXNlIHRoZXkgd2lsbCBnZXQgbG9jYWxpemVkCit2YXIgcmZjRGF5QWJiciA9IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sCisJcmZjTW9udGhBYmJyID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddOworCit2YXIgZm9ybWF0cyA9IHsKKwlkYjogJyVZLSVtLSVkICVIOiVNOiVTJywKKwljb21wYWN0OiAnJVklbSVkVCVIJU0lUycsCisJJ3Nob3J0JzogJyVkICViICVIOiVNJywKKwknbG9uZyc6ICclQiAlZCwgJVkgJUg6JU0nLAorCXJmYzgyMjogZnVuY3Rpb24oZGF0ZSl7CisJCXJldHVybiByZmNEYXlBYmJyW2RhdGUuZ2V0KCdkYXknKV0gKyBkYXRlLmZvcm1hdCgnLCAlZCAnKSArIHJmY01vbnRoQWJicltkYXRlLmdldCgnbW9udGgnKV0gKyBkYXRlLmZvcm1hdCgnICVZICVIOiVNOiVTICVaJyk7CisJfSwKKwlyZmMyODIyOiBmdW5jdGlvbihkYXRlKXsKKwkJcmV0dXJuIHJmY0RheUFiYnJbZGF0ZS5nZXQoJ2RheScpXSArIGRhdGUuZm9ybWF0KCcsICVkICcpICsgcmZjTW9udGhBYmJyW2RhdGUuZ2V0KCdtb250aCcpXSArIGRhdGUuZm9ybWF0KCcgJVkgJUg6JU06JVMgJXonKTsKKwl9LAorCWlzbzg2MDE6IGZ1bmN0aW9uKGRhdGUpeworCQlyZXR1cm4gKAorCQkJZGF0ZS5nZXRVVENGdWxsWWVhcigpICsgJy0nICsKKwkJCXBhZChkYXRlLmdldFVUQ01vbnRoKCkgKyAxLCAyKSArICctJyArCisJCQlwYWQoZGF0ZS5nZXRVVENEYXRlKCksIDIpICsgJ1QnICsKKwkJCXBhZChkYXRlLmdldFVUQ0hvdXJzKCksIDIpICsgJzonICsKKwkJCXBhZChkYXRlLmdldFVUQ01pbnV0ZXMoKSwgMikgKyAnOicgKworCQkJcGFkKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCAyKSArICcuJyArCisJCQlwYWQoZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKSwgMykgKyAnWicKKwkJKTsKKwl9Cit9OworCit2YXIgcGFyc2VQYXR0ZXJucyA9IFtdLAorCW5hdGl2ZVBhcnNlID0gRGF0ZS5wYXJzZTsKKwordmFyIHBhcnNlV29yZCA9IGZ1bmN0aW9uKHR5cGUsIHdvcmQsIG51bSl7CisJdmFyIHJldCA9IC0xLAorCQl0cmFuc2xhdGVkID0gRGF0ZS5nZXRNc2codHlwZSArICdzJyk7CisJc3dpdGNoICh0eXBlT2Yod29yZCkpeworCQljYXNlICdvYmplY3QnOgorCQkJcmV0ID0gdHJhbnNsYXRlZFt3b3JkLmdldCh0eXBlKV07CisJCQlicmVhazsKKwkJY2FzZSAnbnVtYmVyJzoKKwkJCXJldCA9IHRyYW5zbGF0ZWRbd29yZF07CisJCQlpZiAoIXJldCkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkICcgKyB0eXBlICsgJyBpbmRleDogJyArIHdvcmQpOworCQkJYnJlYWs7CisJCWNhc2UgJ3N0cmluZyc6CisJCQl2YXIgbWF0Y2ggPSB0cmFuc2xhdGVkLmZpbHRlcihmdW5jdGlvbihuYW1lKXsKKwkJCQlyZXR1cm4gdGhpcy50ZXN0KG5hbWUpOworCQkJfSwgbmV3IFJlZ0V4cCgnXicgKyB3b3JkLCAnaScpKTsKKwkJCWlmICghbWF0Y2gubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgJyArIHR5cGUgKyAnIHN0cmluZycpOworCQkJaWYgKG1hdGNoLmxlbmd0aCA+IDEpIHRocm93IG5ldyBFcnJvcignQW1iaWd1b3VzICcgKyB0eXBlKTsKKwkJCXJldCA9IG1hdGNoWzBdOworCX0KKworCXJldHVybiAobnVtKSA/IHRyYW5zbGF0ZWQuaW5kZXhPZihyZXQpIDogcmV0OworfTsKKwordmFyIHN0YXJ0Q2VudHVyeSA9IDE5MDAsCisJc3RhcnRZZWFyID0gNzA7CisKK0RhdGUuZXh0ZW5kKHsKKworCWdldE1zZzogZnVuY3Rpb24oa2V5LCBhcmdzKXsKKwkJcmV0dXJuIExvY2FsZS5nZXQoJ0RhdGUuJyArIGtleSwgYXJncyk7CisJfSwKKworCXVuaXRzOiB7CisJCW1zOiBGdW5jdGlvbi5jb252ZXJ0KDEpLAorCQlzZWNvbmQ6IEZ1bmN0aW9uLmNvbnZlcnQoMTAwMCksCisJCW1pbnV0ZTogRnVuY3Rpb24uY29udmVydCg2MDAwMCksCisJCWhvdXI6IEZ1bmN0aW9uLmNvbnZlcnQoMzYwMDAwMCksCisJCWRheTogRnVuY3Rpb24uY29udmVydCg4NjQwMDAwMCksCisJCXdlZWs6IEZ1bmN0aW9uLmNvbnZlcnQoNjA4NDAwMDAwKSwKKwkJbW9udGg6IGZ1bmN0aW9uKG1vbnRoLCB5ZWFyKXsKKwkJCXZhciBkID0gbmV3IERhdGU7CisJCQlyZXR1cm4gRGF0ZS5kYXlzSW5Nb250aChtb250aCAhPSBudWxsID8gbW9udGggOiBkLmdldCgnbW8nKSwgeWVhciAhPSBudWxsID8geWVhciA6IGQuZ2V0KCd5ZWFyJykpICogODY0MDAwMDA7CisJCX0sCisJCXllYXI6IGZ1bmN0aW9uKHllYXIpeworCQkJeWVhciA9IHllYXIgfHwgbmV3IERhdGUoKS5nZXQoJ3llYXInKTsKKwkJCXJldHVybiBEYXRlLmlzTGVhcFllYXIoeWVhcikgPyAzMTYyMjQwMDAwMCA6IDMxNTM2MDAwMDAwOworCQl9CisJfSwKKworCWRheXNJbk1vbnRoOiBmdW5jdGlvbihtb250aCwgeWVhcil7CisJCXJldHVybiBbMzEsIERhdGUuaXNMZWFwWWVhcih5ZWFyKSA/IDI5IDogMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVttb250aF07CisJfSwKKworCWlzTGVhcFllYXI6IGZ1bmN0aW9uKHllYXIpeworCQlyZXR1cm4gKCh5ZWFyICUgNCA9PT0gMCkgJiYgKHllYXIgJSAxMDAgIT09IDApKSB8fCAoeWVhciAlIDQwMCA9PT0gMCk7CisJfSwKKworCXBhcnNlOiBmdW5jdGlvbihmcm9tKXsKKwkJdmFyIHQgPSB0eXBlT2YoZnJvbSk7CisJCWlmICh0ID09ICdudW1iZXInKSByZXR1cm4gbmV3IERhdGUoZnJvbSk7CisJCWlmICh0ICE9ICdzdHJpbmcnKSByZXR1cm4gZnJvbTsKKwkJZnJvbSA9IGZyb20uY2xlYW4oKTsKKwkJaWYgKCFmcm9tLmxlbmd0aCkgcmV0dXJuIG51bGw7CisKKwkJdmFyIHBhcnNlZDsKKwkJcGFyc2VQYXR0ZXJucy5zb21lKGZ1bmN0aW9uKHBhdHRlcm4peworCQkJdmFyIGJpdHMgPSBwYXR0ZXJuLnJlLmV4ZWMoZnJvbSk7CisJCQlyZXR1cm4gKGJpdHMpID8gKHBhcnNlZCA9IHBhdHRlcm4uaGFuZGxlcihiaXRzKSkgOiBmYWxzZTsKKwkJfSk7CisKKwkJaWYgKCEocGFyc2VkICYmIHBhcnNlZC5pc1ZhbGlkKCkpKXsKKwkJCXBhcnNlZCA9IG5ldyBEYXRlKG5hdGl2ZVBhcnNlKGZyb20pKTsKKwkJCWlmICghKHBhcnNlZCAmJiBwYXJzZWQuaXNWYWxpZCgpKSkgcGFyc2VkID0gbmV3IERhdGUoZnJvbS50b0ludCgpKTsKKwkJfQorCQlyZXR1cm4gcGFyc2VkOworCX0sCisKKwlwYXJzZURheTogZnVuY3Rpb24oZGF5LCBudW0peworCQlyZXR1cm4gcGFyc2VXb3JkKCdkYXknLCBkYXksIG51bSk7CisJfSwKKworCXBhcnNlTW9udGg6IGZ1bmN0aW9uKG1vbnRoLCBudW0peworCQlyZXR1cm4gcGFyc2VXb3JkKCdtb250aCcsIG1vbnRoLCBudW0pOworCX0sCisKKwlwYXJzZVVUQzogZnVuY3Rpb24odmFsdWUpeworCQl2YXIgbG9jYWxEYXRlID0gbmV3IERhdGUodmFsdWUpOworCQl2YXIgdXRjU2Vjb25kcyA9IERhdGUuVVRDKAorCQkJbG9jYWxEYXRlLmdldCgneWVhcicpLAorCQkJbG9jYWxEYXRlLmdldCgnbW8nKSwKKwkJCWxvY2FsRGF0ZS5nZXQoJ2RhdGUnKSwKKwkJCWxvY2FsRGF0ZS5nZXQoJ2hyJyksCisJCQlsb2NhbERhdGUuZ2V0KCdtaW4nKSwKKwkJCWxvY2FsRGF0ZS5nZXQoJ3NlYycpLAorCQkJbG9jYWxEYXRlLmdldCgnbXMnKQorCQkpOworCQlyZXR1cm4gbmV3IERhdGUodXRjU2Vjb25kcyk7CisJfSwKKworCW9yZGVySW5kZXg6IGZ1bmN0aW9uKHVuaXQpeworCQlyZXR1cm4gRGF0ZS5nZXRNc2coJ2RhdGVPcmRlcicpLmluZGV4T2YodW5pdCkgKyAxOworCX0sCisKKwlkZWZpbmVGb3JtYXQ6IGZ1bmN0aW9uKG5hbWUsIGZvcm1hdCl7CisJCWZvcm1hdHNbbmFtZV0gPSBmb3JtYXQ7CisJCXJldHVybiB0aGlzOworCX0sCisKKwkKKworCWRlZmluZVBhcnNlcjogZnVuY3Rpb24ocGF0dGVybil7CisJCXBhcnNlUGF0dGVybnMucHVzaCgocGF0dGVybi5yZSAmJiBwYXR0ZXJuLmhhbmRsZXIpID8gcGF0dGVybiA6IGJ1aWxkKHBhdHRlcm4pKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWRlZmluZVBhcnNlcnM6IGZ1bmN0aW9uKCl7CisJCUFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5lYWNoKERhdGUuZGVmaW5lUGFyc2VyKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWRlZmluZTJEaWdpdFllYXJTdGFydDogZnVuY3Rpb24oeWVhcil7CisJCXN0YXJ0WWVhciA9IHllYXIgJSAxMDA7CisJCXN0YXJ0Q2VudHVyeSA9IHllYXIgLSBzdGFydFllYXI7CisJCXJldHVybiB0aGlzOworCX0KKworfSkuZXh0ZW5kKHsKKwlkZWZpbmVGb3JtYXRzOiBEYXRlLmRlZmluZUZvcm1hdC5vdmVybG9hZFNldHRlcigpCit9KTsKKwordmFyIHJlZ2V4T2YgPSBmdW5jdGlvbih0eXBlKXsKKwlyZXR1cm4gbmV3IFJlZ0V4cCgnKD86JyArIERhdGUuZ2V0TXNnKHR5cGUpLm1hcChmdW5jdGlvbihuYW1lKXsKKwkJcmV0dXJuIG5hbWUuc3Vic3RyKDAsIDMpOworCX0pLmpvaW4oJ3wnKSArICcpW2Etel0qJyk7Cit9OworCit2YXIgcmVwbGFjZXJzID0gZnVuY3Rpb24oa2V5KXsKKwlzd2l0Y2ggKGtleSl7CisJCWNhc2UgJ1QnOgorCQkJcmV0dXJuICclSDolTTolUyc7CisJCWNhc2UgJ3gnOiAvLyBpc284NjAxIGNvdmVycyB5eXl5LW1tLWRkLCBzbyBqdXN0IGNoZWNrIGlmIG1vbnRoIGlzIGZpcnN0CisJCQlyZXR1cm4gKChEYXRlLm9yZGVySW5kZXgoJ21vbnRoJykgPT0gMSkgPyAnJW1bLS4vXSVkJyA6ICclZFstLi9dJW0nKSArICcoWy0uL10leSk/JzsKKwkJY2FzZSAnWCc6CisJCQlyZXR1cm4gJyVIKFsuOl0lTSk/KFsuOl0lUyhbLjpdJXMpPyk/ID8lcD8gPyV6Pyc7CisJfQorCXJldHVybiBudWxsOworfTsKKwordmFyIGtleXMgPSB7CisJZDogL1swLTJdP1swLTldfDNbMDFdLywKKwlIOiAvWzAxXT9bMC05XXwyWzAtM10vLAorCUk6IC8wP1sxLTldfDFbMC0yXS8sCisJTTogL1swLTVdP1xkLywKKwlzOiAvXGQrLywKKwlvOiAvW2Etel0qLywKKwlwOiAvW2FwXVwuP21cLj8vLAorCXk6IC9cZHsyfXxcZHs0fS8sCisJWTogL1xkezR9LywKKwl6OiAvWnxbKy1dXGR7Mn0oPzo6P1xkezJ9KT8vCit9OworCitrZXlzLm0gPSBrZXlzLkk7CitrZXlzLlMgPSBrZXlzLk07CisKK3ZhciBjdXJyZW50TGFuZ3VhZ2U7CisKK3ZhciByZWNvbXBpbGUgPSBmdW5jdGlvbihsYW5ndWFnZSl7CisJY3VycmVudExhbmd1YWdlID0gbGFuZ3VhZ2U7CisKKwlrZXlzLmEgPSBrZXlzLkEgPSByZWdleE9mKCdkYXlzJyk7CisJa2V5cy5iID0ga2V5cy5CID0gcmVnZXhPZignbW9udGhzJyk7CisKKwlwYXJzZVBhdHRlcm5zLmVhY2goZnVuY3Rpb24ocGF0dGVybiwgaSl7CisJCWlmIChwYXR0ZXJuLmZvcm1hdCkgcGFyc2VQYXR0ZXJuc1tpXSA9IGJ1aWxkKHBhdHRlcm4uZm9ybWF0KTsKKwl9KTsKK307CisKK3ZhciBidWlsZCA9IGZ1bmN0aW9uKGZvcm1hdCl7CisJaWYgKCFjdXJyZW50TGFuZ3VhZ2UpIHJldHVybiB7Zm9ybWF0OiBmb3JtYXR9OworCisJdmFyIHBhcnNlZCA9IFtdOworCXZhciByZSA9IChmb3JtYXQuc291cmNlIHx8IGZvcm1hdCkgLy8gYWxsb3cgZm9ybWF0IHRvIGJlIHJlZ2V4CisJLnJlcGxhY2UoLyUoW2Etel0pL2dpLAorCQlmdW5jdGlvbigkMCwgJDEpeworCQkJcmV0dXJuIHJlcGxhY2VycygkMSkgfHwgJDA7CisJCX0KKwkpLnJlcGxhY2UoL1woKD8hXD8pL2csICcoPzonKSAvLyBtYWtlIGFsbCBncm91cHMgbm9uLWNhcHR1cmluZworCS5yZXBsYWNlKC8gKD8hXD98XCopL2csICcsPyAnKSAvLyBiZSBmb3JnaXZpbmcgd2l0aCBzcGFjZXMgYW5kIGNvbW1hcworCS5yZXBsYWNlKC8lKFthLXolXSkvZ2ksCisJCWZ1bmN0aW9uKCQwLCAkMSl7CisJCQl2YXIgcCA9IGtleXNbJDFdOworCQkJaWYgKCFwKSByZXR1cm4gJDE7CisJCQlwYXJzZWQucHVzaCgkMSk7CisJCQlyZXR1cm4gJygnICsgcC5zb3VyY2UgKyAnKSc7CisJCX0KKwkpLnJlcGxhY2UoL1xbYS16XF0vZ2ksICdbYS16XFx1MDBjMC1cXHVmZmZmO1wmXScpOyAvLyBoYW5kbGUgdW5pY29kZSB3b3JkcworCisJcmV0dXJuIHsKKwkJZm9ybWF0OiBmb3JtYXQsCisJCXJlOiBuZXcgUmVnRXhwKCdeJyArIHJlICsgJyQnLCAnaScpLAorCQloYW5kbGVyOiBmdW5jdGlvbihiaXRzKXsKKwkJCWJpdHMgPSBiaXRzLnNsaWNlKDEpLmFzc29jaWF0ZShwYXJzZWQpOworCQkJdmFyIGRhdGUgPSBuZXcgRGF0ZSgpLmNsZWFyVGltZSgpLAorCQkJCXllYXIgPSBiaXRzLnkgfHwgYml0cy5ZOworCisJCQlpZiAoeWVhciAhPSBudWxsKSBoYW5kbGUuY2FsbChkYXRlLCAneScsIHllYXIpOyAvLyBuZWVkIHRvIHN0YXJ0IGluIHRoZSByaWdodCB5ZWFyCisJCQlpZiAoJ2QnIGluIGJpdHMpIGhhbmRsZS5jYWxsKGRhdGUsICdkJywgMSk7CisJCQlpZiAoJ20nIGluIGJpdHMgfHwgYml0cy5iIHx8IGJpdHMuQikgaGFuZGxlLmNhbGwoZGF0ZSwgJ20nLCAxKTsKKworCQkJZm9yICh2YXIga2V5IGluIGJpdHMpIGhhbmRsZS5jYWxsKGRhdGUsIGtleSwgYml0c1trZXldKTsKKwkJCXJldHVybiBkYXRlOworCQl9CisJfTsKK307CisKK3ZhciBoYW5kbGUgPSBmdW5jdGlvbihrZXksIHZhbHVlKXsKKwlpZiAoIXZhbHVlKSByZXR1cm4gdGhpczsKKworCXN3aXRjaCAoa2V5KXsKKwkJY2FzZSAnYSc6IGNhc2UgJ0EnOiByZXR1cm4gdGhpcy5zZXQoJ2RheScsIERhdGUucGFyc2VEYXkodmFsdWUsIHRydWUpKTsKKwkJY2FzZSAnYic6IGNhc2UgJ0InOiByZXR1cm4gdGhpcy5zZXQoJ21vJywgRGF0ZS5wYXJzZU1vbnRoKHZhbHVlLCB0cnVlKSk7CisJCWNhc2UgJ2QnOiByZXR1cm4gdGhpcy5zZXQoJ2RhdGUnLCB2YWx1ZSk7CisJCWNhc2UgJ0gnOiBjYXNlICdJJzogcmV0dXJuIHRoaXMuc2V0KCdocicsIHZhbHVlKTsKKwkJY2FzZSAnbSc6IHJldHVybiB0aGlzLnNldCgnbW8nLCB2YWx1ZSAtIDEpOworCQljYXNlICdNJzogcmV0dXJuIHRoaXMuc2V0KCdtaW4nLCB2YWx1ZSk7CisJCWNhc2UgJ3AnOiByZXR1cm4gdGhpcy5zZXQoJ2FtcG0nLCB2YWx1ZS5yZXBsYWNlKC9cLi9nLCAnJykpOworCQljYXNlICdTJzogcmV0dXJuIHRoaXMuc2V0KCdzZWMnLCB2YWx1ZSk7CisJCWNhc2UgJ3MnOiByZXR1cm4gdGhpcy5zZXQoJ21zJywgKCcwLicgKyB2YWx1ZSkgKiAxMDAwKTsKKwkJY2FzZSAndyc6IHJldHVybiB0aGlzLnNldCgnZGF5JywgdmFsdWUpOworCQljYXNlICdZJzogcmV0dXJuIHRoaXMuc2V0KCd5ZWFyJywgdmFsdWUpOworCQljYXNlICd5JzoKKwkJCXZhbHVlID0gK3ZhbHVlOworCQkJaWYgKHZhbHVlIDwgMTAwKSB2YWx1ZSArPSBzdGFydENlbnR1cnkgKyAodmFsdWUgPCBzdGFydFllYXIgPyAxMDAgOiAwKTsKKwkJCXJldHVybiB0aGlzLnNldCgneWVhcicsIHZhbHVlKTsKKwkJY2FzZSAneic6CisJCQlpZiAodmFsdWUgPT0gJ1onKSB2YWx1ZSA9ICcrMDAnOworCQkJdmFyIG9mZnNldCA9IHZhbHVlLm1hdGNoKC8oWystXSkoXGR7Mn0pOj8oXGR7Mn0pPy8pOworCQkJb2Zmc2V0ID0gKG9mZnNldFsxXSArICcxJykgKiAob2Zmc2V0WzJdICogNjAgKyAoK29mZnNldFszXSB8fCAwKSkgKyB0aGlzLmdldFRpbWV6b25lT2Zmc2V0KCk7CisJCQlyZXR1cm4gdGhpcy5zZXQoJ3RpbWUnLCB0aGlzIC0gb2Zmc2V0ICogNjAwMDApOworCX0KKworCXJldHVybiB0aGlzOworfTsKKworRGF0ZS5kZWZpbmVQYXJzZXJzKAorCSclWShbLS4vXSVtKFstLi9dJWQoKFR8ICklWCk/KT8pPycsIC8vICIxOTk5LTEyLTMxIiwgIjE5OTktMTItMzEgMTE6NTlwbSIsICIxOTk5LTEyLTMxIDIzOjU5OjU5IiwgSVNPODYwMQorCSclWSVtJWQoVCVIKCVNJVM/KT8pPycsIC8vICIxOTk5MTIzMSIsICIxOTk5MTIzMVQxMTU5IiwgY29tcGFjdAorCScleCggJVgpPycsIC8vICIxMi8zMSIsICIxMi4zMS45OSIsICIxMi0zMS0xOTk5IiwgIjEyLzMxLzIwMDggMTE6NTkgUE0iCisJJyVkJW8oICViKCAlWSk/KT8oICVYKT8nLCAvLyAiMzFzdCIsICIzMXN0IERlY2VtYmVyIiwgIjMxIERlYyAxOTk5IiwgIjMxIERlYyAxOTk5IDExOjU5cG0iCisJJyViKCAlZCVvKT8oICVZKT8oICVYKT8nLCAvLyBTYW1lIGFzIGFib3ZlIHdpdGggbW9udGggYW5kIGRheSBzd2l0Y2hlZAorCSclWSAlYiggJWQlbyggJVgpPyk/JywgLy8gU2FtZSBhcyBhYm92ZSB3aXRoIHllYXIgY29taW5nIGZpcnN0CisJJyVvICViICVkICVYICV6ICVZJywgLy8gIlRodSBPY3QgMjIgMDg6MTE6MjMgKzAwMDAgMjAwOSIKKwknJVQnLCAvLyAlSDolTTolUworCSclSDolTSggPyVwKT8nIC8vICIxMTowNXBtIiwgIjExOjA1IGFtIiBhbmQgIjExOjA1IgorKTsKKworTG9jYWxlLmFkZEV2ZW50KCdjaGFuZ2UnLCBmdW5jdGlvbihsYW5ndWFnZSl7CisJaWYgKExvY2FsZS5nZXQoJ0RhdGUnKSkgcmVjb21waWxlKGxhbmd1YWdlKTsKK30pLmZpcmVFdmVudCgnY2hhbmdlJywgTG9jYWxlLmdldEN1cnJlbnQoKSk7CisKK30pKCk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmVuLVVTLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgRW5nbGlzaC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmVuLVVTLkZvcm0uVmFsaWRhdG9yXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2VuLVVTJywgJ0Zvcm1WYWxpZGF0b3InLCB7CisKKwlyZXF1aXJlZDogJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQuJywKKwlsZW5ndGg6ICdQbGVhc2UgZW50ZXIge2xlbmd0aH0gY2hhcmFjdGVycyAoeW91IGVudGVyZWQge2VsTGVuZ3RofSBjaGFyYWN0ZXJzKScsCisJbWluTGVuZ3RoOiAnUGxlYXNlIGVudGVyIGF0IGxlYXN0IHttaW5MZW5ndGh9IGNoYXJhY3RlcnMgKHlvdSBlbnRlcmVkIHtsZW5ndGh9IGNoYXJhY3RlcnMpLicsCisJbWF4TGVuZ3RoOiAnUGxlYXNlIGVudGVyIG5vIG1vcmUgdGhhbiB7bWF4TGVuZ3RofSBjaGFyYWN0ZXJzICh5b3UgZW50ZXJlZCB7bGVuZ3RofSBjaGFyYWN0ZXJzKS4nLAorCWludGVnZXI6ICdQbGVhc2UgZW50ZXIgYW4gaW50ZWdlciBpbiB0aGlzIGZpZWxkLiBOdW1iZXJzIHdpdGggZGVjaW1hbHMgKGUuZy4gMS4yNSkgYXJlIG5vdCBwZXJtaXR0ZWQuJywKKwludW1lcmljOiAnUGxlYXNlIGVudGVyIG9ubHkgbnVtZXJpYyB2YWx1ZXMgaW4gdGhpcyBmaWVsZCAoaS5lLiAiMSIgb3IgIjEuMSIgb3IgIi0xIiBvciAiLTEuMSIpLicsCisJZGlnaXRzOiAnUGxlYXNlIHVzZSBudW1iZXJzIGFuZCBwdW5jdHVhdGlvbiBvbmx5IGluIHRoaXMgZmllbGQgKGZvciBleGFtcGxlLCBhIHBob25lIG51bWJlciB3aXRoIGRhc2hlcyBvciBkb3RzIGlzIHBlcm1pdHRlZCkuJywKKwlhbHBoYTogJ1BsZWFzZSB1c2Ugb25seSBsZXR0ZXJzIChhLXopIHdpdGhpbiB0aGlzIGZpZWxkLiBObyBzcGFjZXMgb3Igb3RoZXIgY2hhcmFjdGVycyBhcmUgYWxsb3dlZC4nLAorCWFscGhhbnVtOiAnUGxlYXNlIHVzZSBvbmx5IGxldHRlcnMgKGEteikgb3IgbnVtYmVycyAoMC05KSBpbiB0aGlzIGZpZWxkLiBObyBzcGFjZXMgb3Igb3RoZXIgY2hhcmFjdGVycyBhcmUgYWxsb3dlZC4nLAorCWRhdGVTdWNoQXM6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlIHN1Y2ggYXMge2RhdGV9JywKKwlkYXRlSW5Gb3JtYXRNRFk6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlIHN1Y2ggYXMgTU0vREQvWVlZWSAoaS5lLiAiMTIvMzEvMTk5OSIpJywKKwllbWFpbDogJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuIEZvciBleGFtcGxlICJmcmVkQGRvbWFpbi5jb20iLicsCisJdXJsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMIHN1Y2ggYXMgaHR0cDovL3d3dy5leGFtcGxlLmNvbS4nLAorCWN1cnJlbmN5RG9sbGFyOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgJCBhbW91bnQuIEZvciBleGFtcGxlICQxMDAuMDAgLicsCisJb25lUmVxdWlyZWQ6ICdQbGVhc2UgZW50ZXIgc29tZXRoaW5nIGZvciBhdCBsZWFzdCBvbmUgb2YgdGhlc2UgaW5wdXRzLicsCisJZXJyb3JQcmVmaXg6ICdFcnJvcjogJywKKwl3YXJuaW5nUHJlZml4OiAnV2FybmluZzogJywKKworCS8vIEZvcm0uVmFsaWRhdG9yLkV4dHJhcworCW5vU3BhY2U6ICdUaGVyZSBjYW4gYmUgbm8gc3BhY2VzIGluIHRoaXMgaW5wdXQuJywKKwlyZXFDaGtCeU5vZGU6ICdObyBpdGVtcyBhcmUgc2VsZWN0ZWQuJywKKwlyZXF1aXJlZENoazogJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQuJywKKwlyZXFDaGtCeU5hbWU6ICdQbGVhc2Ugc2VsZWN0IGEge2xhYmVsfS4nLAorCW1hdGNoOiAnVGhpcyBmaWVsZCBuZWVkcyB0byBtYXRjaCB0aGUge21hdGNoTmFtZX0gZmllbGQnLAorCXN0YXJ0RGF0ZTogJ3RoZSBzdGFydCBkYXRlJywKKwllbmREYXRlOiAndGhlIGVuZCBkYXRlJywKKwljdXJyZW50RGF0ZTogJ3RoZSBjdXJyZW50IGRhdGUnLAorCWFmdGVyRGF0ZTogJ1RoZSBkYXRlIHNob3VsZCBiZSB0aGUgc2FtZSBvciBhZnRlciB7bGFiZWx9LicsCisJYmVmb3JlRGF0ZTogJ1RoZSBkYXRlIHNob3VsZCBiZSB0aGUgc2FtZSBvciBiZWZvcmUge2xhYmVsfS4nLAorCXN0YXJ0TW9udGg6ICdQbGVhc2Ugc2VsZWN0IGEgc3RhcnQgbW9udGgnLAorCXNhbWVNb250aDogJ1RoZXNlIHR3byBkYXRlcyBtdXN0IGJlIGluIHRoZSBzYW1lIG1vbnRoIC0geW91IG11c3QgY2hhbmdlIG9uZSBvciB0aGUgb3RoZXIuJywKKwljcmVkaXRjYXJkOiAnVGhlIGNyZWRpdCBjYXJkIG51bWJlciBlbnRlcmVkIGlzIGludmFsaWQuIFBsZWFzZSBjaGVjayB0aGUgbnVtYmVyIGFuZCB0cnkgYWdhaW4uIHtsZW5ndGh9IGRpZ2l0cyBlbnRlcmVkLicKKworfSk7CisKKy8qCistLS0KKworc2NyaXB0OiBGb3JtLlZhbGlkYXRvci5qcworCituYW1lOiBGb3JtLlZhbGlkYXRvcgorCitkZXNjcmlwdGlvbjogQSBjc3MtY2xhc3MgYmFzZWQgZm9ybSB2YWxpZGF0aW9uIHN5c3RlbS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9PcHRpb25zCisgIC0gQ29yZS9FdmVudHMKKyAgLSBDb3JlL0VsZW1lbnQuRGVsZWdhdGlvbgorICAtIENvcmUvU2xpY2suRmluZGVyCisgIC0gQ29yZS9FbGVtZW50LkV2ZW50CisgIC0gQ29yZS9FbGVtZW50LlN0eWxlCisgIC0gQ29yZS9KU09OCisgIC0gTG9jYWxlCisgIC0gQ2xhc3MuQmluZHMKKyAgLSBEYXRlCisgIC0gRWxlbWVudC5Gb3JtcworICAtIExvY2FsZS5lbi1VUy5Gb3JtLlZhbGlkYXRvcgorICAtIEVsZW1lbnQuU2hvcnRjdXRzCisKK3Byb3ZpZGVzOiBbRm9ybS5WYWxpZGF0b3IsIElucHV0VmFsaWRhdG9yLCBGb3JtVmFsaWRhdG9yLkJhc2VWYWxpZGF0b3JzXQorCisuLi4KKyovCitpZiAoIXdpbmRvdy5Gb3JtKSB3aW5kb3cuRm9ybSA9IHt9OworCit2YXIgSW5wdXRWYWxpZGF0b3IgPSB0aGlzLklucHV0VmFsaWRhdG9yID0gbmV3IENsYXNzKHsKKworCUltcGxlbWVudHM6IFtPcHRpb25zXSwKKworCW9wdGlvbnM6IHsKKwkJZXJyb3JNc2c6ICdWYWxpZGF0aW9uIGZhaWxlZC4nLAorCQl0ZXN0OiBGdW5jdGlvbi5jb252ZXJ0KHRydWUpCisJfSwKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKGNsYXNzTmFtZSwgb3B0aW9ucyl7CisJCXRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTsKKwkJdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7CisJfSwKKworCXRlc3Q6IGZ1bmN0aW9uKGZpZWxkLCBwcm9wcyl7CisJCWZpZWxkID0gZG9jdW1lbnQuaWQoZmllbGQpOworCQlyZXR1cm4gKGZpZWxkKSA/IHRoaXMub3B0aW9ucy50ZXN0KGZpZWxkLCBwcm9wcyB8fCB0aGlzLmdldFByb3BzKGZpZWxkKSkgOiBmYWxzZTsKKwl9LAorCisJZ2V0RXJyb3I6IGZ1bmN0aW9uKGZpZWxkLCBwcm9wcyl7CisJCWZpZWxkID0gZG9jdW1lbnQuaWQoZmllbGQpOworCQl2YXIgZXJyID0gdGhpcy5vcHRpb25zLmVycm9yTXNnOworCQlpZiAodHlwZU9mKGVycikgPT0gJ2Z1bmN0aW9uJykgZXJyID0gZXJyKGZpZWxkLCBwcm9wcyB8fCB0aGlzLmdldFByb3BzKGZpZWxkKSk7CisJCXJldHVybiBlcnI7CisJfSwKKworCWdldFByb3BzOiBmdW5jdGlvbihmaWVsZCl7CisJCWZpZWxkID0gZG9jdW1lbnQuaWQoZmllbGQpOworCQlyZXR1cm4gKGZpZWxkKSA/IGZpZWxkLmdldCgndmFsaWRhdG9yUHJvcHMnKSA6IHt9OworCX0KKworfSk7CisKK0VsZW1lbnQuUHJvcGVydGllcy52YWxpZGF0b3JzID0geworCisJZ2V0OiBmdW5jdGlvbigpeworCQlyZXR1cm4gKHRoaXMuZ2V0KCdkYXRhLXZhbGlkYXRvcnMnKSB8fCB0aGlzLmNsYXNzTmFtZSkuY2xlYW4oKS5yZXBsYWNlKC8nKFxcLnxbXiddKSonfCIoXFwufFteIl0pKiIvZywgZnVuY3Rpb24obWF0Y2gpeworCQkJcmV0dXJuIG1hdGNoLnJlcGxhY2UoJyAnLCAnXFx4MjAnKTsKKwkJfSkuc3BsaXQoJyAnKTsKKwl9CisKK307CisKK0VsZW1lbnQuUHJvcGVydGllcy52YWxpZGF0b3JQcm9wcyA9IHsKKworCXNldDogZnVuY3Rpb24ocHJvcHMpeworCQlyZXR1cm4gdGhpcy5lbGltaW5hdGUoJyRtb286dmFsaWRhdG9yUHJvcHMnKS5zdG9yZSgnJG1vbzp2YWxpZGF0b3JQcm9wcycsIHByb3BzKTsKKwl9LAorCisJZ2V0OiBmdW5jdGlvbihwcm9wcyl7CisJCWlmIChwcm9wcykgdGhpcy5zZXQocHJvcHMpOworCQlpZiAodGhpcy5yZXRyaWV2ZSgnJG1vbzp2YWxpZGF0b3JQcm9wcycpKSByZXR1cm4gdGhpcy5yZXRyaWV2ZSgnJG1vbzp2YWxpZGF0b3JQcm9wcycpOworCQlpZiAodGhpcy5nZXRQcm9wZXJ0eSgnZGF0YS12YWxpZGF0b3ItcHJvcGVydGllcycpIHx8IHRoaXMuZ2V0UHJvcGVydHkoJ3ZhbGlkYXRvclByb3BzJykpeworCQkJdHJ5IHsKKwkJCQl0aGlzLnN0b3JlKCckbW9vOnZhbGlkYXRvclByb3BzJywgSlNPTi5kZWNvZGUodGhpcy5nZXRQcm9wZXJ0eSgndmFsaWRhdG9yUHJvcHMnKSB8fCB0aGlzLmdldFByb3BlcnR5KCdkYXRhLXZhbGlkYXRvci1wcm9wZXJ0aWVzJyksIGZhbHNlKSk7CisJCQl9IGNhdGNoIChlKXsKKwkJCQlyZXR1cm4ge307CisJCQl9CisJCX0gZWxzZSB7CisJCQl2YXIgdmFscyA9IHRoaXMuZ2V0KCd2YWxpZGF0b3JzJykuZmlsdGVyKGZ1bmN0aW9uKGNscyl7CisJCQkJcmV0dXJuIGNscy50ZXN0KCc6Jyk7CisJCQl9KTsKKwkJCWlmICghdmFscy5sZW5ndGgpeworCQkJCXRoaXMuc3RvcmUoJyRtb286dmFsaWRhdG9yUHJvcHMnLCB7fSk7CisJCQl9IGVsc2UgeworCQkJCXByb3BzID0ge307CisJCQkJdmFscy5lYWNoKGZ1bmN0aW9uKGNscyl7CisJCQkJCXZhciBzcGxpdCA9IGNscy5zcGxpdCgnOicpOworCQkJCQlpZiAoc3BsaXRbMV0peworCQkJCQkJdHJ5IHsKKwkJCQkJCQlwcm9wc1tzcGxpdFswXV0gPSBKU09OLmRlY29kZShzcGxpdFsxXSwgZmFsc2UpOworCQkJCQkJfSBjYXRjaCAoZSl7fQorCQkJCQl9CisJCQkJfSk7CisJCQkJdGhpcy5zdG9yZSgnJG1vbzp2YWxpZGF0b3JQcm9wcycsIHByb3BzKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gdGhpcy5yZXRyaWV2ZSgnJG1vbzp2YWxpZGF0b3JQcm9wcycpOworCX0KKworfTsKKworRm9ybS5WYWxpZGF0b3IgPSBuZXcgQ2xhc3MoeworCisJSW1wbGVtZW50czogW09wdGlvbnMsIEV2ZW50c10sCisKKwlvcHRpb25zOiB7LyoKKwkJb25Gb3JtVmFsaWRhdGU6IGZ1bmN0aW9uKGlzVmFsaWQsIGZvcm0sIGV2ZW50KXt9LAorCQlvbkVsZW1lbnRWYWxpZGF0ZTogZnVuY3Rpb24oaXNWYWxpZCwgZmllbGQsIGNsYXNzTmFtZSwgd2Fybil7fSwKKwkJb25FbGVtZW50UGFzczogZnVuY3Rpb24oZmllbGQpe30sCisJCW9uRWxlbWVudEZhaWw6IGZ1bmN0aW9uKGZpZWxkLCB2YWxpZGF0b3JzRmFpbGVkKXt9LCAqLworCQlmaWVsZFNlbGVjdG9yczogJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJywKKwkJaWdub3JlSGlkZGVuOiB0cnVlLAorCQlpZ25vcmVEaXNhYmxlZDogdHJ1ZSwKKwkJdXNlVGl0bGVzOiBmYWxzZSwKKwkJZXZhbHVhdGVPblN1Ym1pdDogdHJ1ZSwKKwkJZXZhbHVhdGVGaWVsZHNPbkJsdXI6IHRydWUsCisJCWV2YWx1YXRlRmllbGRzT25DaGFuZ2U6IHRydWUsCisJCXNlcmlhbDogdHJ1ZSwKKwkJc3RvcE9uRmFpbHVyZTogdHJ1ZSwKKwkJd2FybmluZ1ByZWZpeDogZnVuY3Rpb24oKXsKKwkJCXJldHVybiBGb3JtLlZhbGlkYXRvci5nZXRNc2coJ3dhcm5pbmdQcmVmaXgnKSB8fCAnV2FybmluZzogJzsKKwkJfSwKKwkJZXJyb3JQcmVmaXg6IGZ1bmN0aW9uKCl7CisJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0TXNnKCdlcnJvclByZWZpeCcpIHx8ICdFcnJvcjogJzsKKwkJfQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihmb3JtLCBvcHRpb25zKXsKKwkJdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpOworCQl0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5pZChmb3JtKTsKKwkJdGhpcy53YXJuaW5nUHJlZml4ID0gRnVuY3Rpb24uY29udmVydCh0aGlzLm9wdGlvbnMud2FybmluZ1ByZWZpeCkoKTsKKwkJdGhpcy5lcnJvclByZWZpeCA9IEZ1bmN0aW9uLmNvbnZlcnQodGhpcy5vcHRpb25zLmVycm9yUHJlZml4KSgpOworCQl0aGlzLl9ib3VuZCA9IHsKKwkJCW9uU3VibWl0OiB0aGlzLm9uU3VibWl0LmJpbmQodGhpcyksCisJCQlibHVyT3JDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50LCBmaWVsZCl7CisJCQkJdGhpcy52YWxpZGF0aW9uTW9uaXRvcihmaWVsZCwgdHJ1ZSk7CisJCQl9LmJpbmQodGhpcykKKwkJfTsKKwkJdGhpcy5lbmFibGUoKTsKKwl9LAorCisJdG9FbGVtZW50OiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5lbGVtZW50OworCX0sCisKKwlnZXRGaWVsZHM6IGZ1bmN0aW9uKCl7CisJCXJldHVybiAodGhpcy5maWVsZHMgPSB0aGlzLmVsZW1lbnQuZ2V0RWxlbWVudHModGhpcy5vcHRpb25zLmZpZWxkU2VsZWN0b3JzKSk7CisJfSwKKworCWVuYWJsZTogZnVuY3Rpb24oKXsKKwkJdGhpcy5lbGVtZW50LnN0b3JlKCd2YWxpZGF0b3InLCB0aGlzKTsKKwkJaWYgKHRoaXMub3B0aW9ucy5ldmFsdWF0ZU9uU3VibWl0KSB0aGlzLmVsZW1lbnQuYWRkRXZlbnQoJ3N1Ym1pdCcsIHRoaXMuX2JvdW5kLm9uU3VibWl0KTsKKwkJaWYgKHRoaXMub3B0aW9ucy5ldmFsdWF0ZUZpZWxkc09uQmx1cil7CisJCQl0aGlzLmVsZW1lbnQuYWRkRXZlbnQoJ2JsdXI6cmVsYXkoaW5wdXQsc2VsZWN0LHRleHRhcmVhKScsIHRoaXMuX2JvdW5kLmJsdXJPckNoYW5nZSk7CisJCX0KKwkJaWYgKHRoaXMub3B0aW9ucy5ldmFsdWF0ZUZpZWxkc09uQ2hhbmdlKXsKKwkJCXRoaXMuZWxlbWVudC5hZGRFdmVudCgnY2hhbmdlOnJlbGF5KGlucHV0LHNlbGVjdCx0ZXh0YXJlYSknLCB0aGlzLl9ib3VuZC5ibHVyT3JDaGFuZ2UpOworCQl9CisJfSwKKworCWRpc2FibGU6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZWxlbWVudC5lbGltaW5hdGUoJ3ZhbGlkYXRvcicpOworCQl0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRzKHsKKwkJCXN1Ym1pdDogdGhpcy5fYm91bmQub25TdWJtaXQsCisJCQknYmx1cjpyZWxheShpbnB1dCxzZWxlY3QsdGV4dGFyZWEpJzogdGhpcy5fYm91bmQuYmx1ck9yQ2hhbmdlLAorCQkJJ2NoYW5nZTpyZWxheShpbnB1dCxzZWxlY3QsdGV4dGFyZWEpJzogdGhpcy5fYm91bmQuYmx1ck9yQ2hhbmdlCisJCX0pOworCX0sCisKKwl2YWxpZGF0aW9uTW9uaXRvcjogZnVuY3Rpb24oKXsKKwkJY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpOworCQl0aGlzLnRpbWVyID0gdGhpcy52YWxpZGF0ZUZpZWxkLmRlbGF5KDUwLCB0aGlzLCBhcmd1bWVudHMpOworCX0sCisKKwlvblN1Ym1pdDogZnVuY3Rpb24oZXZlbnQpeworCQlpZiAodGhpcy52YWxpZGF0ZShldmVudCkpIHRoaXMucmVzZXQoKTsKKwl9LAorCisJcmVzZXQ6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZ2V0RmllbGRzKCkuZWFjaCh0aGlzLnJlc2V0RmllbGQsIHRoaXMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJdmFsaWRhdGU6IGZ1bmN0aW9uKGV2ZW50KXsKKwkJdmFyIHJlc3VsdCA9IHRoaXMuZ2V0RmllbGRzKCkubWFwKGZ1bmN0aW9uKGZpZWxkKXsKKwkJCXJldHVybiB0aGlzLnZhbGlkYXRlRmllbGQoZmllbGQsIHRydWUpOworCQl9LCB0aGlzKS5ldmVyeShmdW5jdGlvbih2KXsKKwkJCXJldHVybiB2OworCQl9KTsKKwkJdGhpcy5maXJlRXZlbnQoJ2Zvcm1WYWxpZGF0ZScsIFtyZXN1bHQsIHRoaXMuZWxlbWVudCwgZXZlbnRdKTsKKwkJaWYgKHRoaXMub3B0aW9ucy5zdG9wT25GYWlsdXJlICYmICFyZXN1bHQgJiYgZXZlbnQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisJCXJldHVybiByZXN1bHQ7CisJfSwKKworCXZhbGlkYXRlRmllbGQ6IGZ1bmN0aW9uKGZpZWxkLCBmb3JjZSl7CisJCWlmICh0aGlzLnBhdXNlZCkgcmV0dXJuIHRydWU7CisJCWZpZWxkID0gZG9jdW1lbnQuaWQoZmllbGQpOworCQl2YXIgcGFzc2VkID0gIWZpZWxkLmhhc0NsYXNzKCd2YWxpZGF0aW9uLWZhaWxlZCcpOworCQl2YXIgZmFpbGVkLCB3YXJuZWQ7CisJCWlmICh0aGlzLm9wdGlvbnMuc2VyaWFsICYmICFmb3JjZSl7CisJCQlmYWlsZWQgPSB0aGlzLmVsZW1lbnQuZ2V0RWxlbWVudCgnLnZhbGlkYXRpb24tZmFpbGVkJyk7CisJCQl3YXJuZWQgPSB0aGlzLmVsZW1lbnQuZ2V0RWxlbWVudCgnLndhcm5pbmcnKTsKKwkJfQorCQlpZiAoZmllbGQgJiYgKCFmYWlsZWQgfHwgZm9yY2UgfHwgZmllbGQuaGFzQ2xhc3MoJ3ZhbGlkYXRpb24tZmFpbGVkJykgfHwgKGZhaWxlZCAmJiAhdGhpcy5vcHRpb25zLnNlcmlhbCkpKXsKKwkJCXZhciB2YWxpZGF0aW9uVHlwZXMgPSBmaWVsZC5nZXQoJ3ZhbGlkYXRvcnMnKTsKKwkJCXZhciB2YWxpZGF0b3JzID0gdmFsaWRhdGlvblR5cGVzLnNvbWUoZnVuY3Rpb24oY24peworCQkJCXJldHVybiB0aGlzLmdldFZhbGlkYXRvcihjbik7CisJCQl9LCB0aGlzKTsKKwkJCXZhciB2YWxpZGF0b3JzRmFpbGVkID0gW107CisJCQl2YWxpZGF0aW9uVHlwZXMuZWFjaChmdW5jdGlvbihjbGFzc05hbWUpeworCQkJCWlmIChjbGFzc05hbWUgJiYgIXRoaXMudGVzdChjbGFzc05hbWUsIGZpZWxkKSkgdmFsaWRhdG9yc0ZhaWxlZC5pbmNsdWRlKGNsYXNzTmFtZSk7CisJCQl9LCB0aGlzKTsKKwkJCXBhc3NlZCA9IHZhbGlkYXRvcnNGYWlsZWQubGVuZ3RoID09PSAwOworCQkJaWYgKHZhbGlkYXRvcnMgJiYgIXRoaXMuaGFzVmFsaWRhdG9yKGZpZWxkLCAnd2Fybk9ubHknKSl7CisJCQkJaWYgKHBhc3NlZCl7CisJCQkJCWZpZWxkLmFkZENsYXNzKCd2YWxpZGF0aW9uLXBhc3NlZCcpLnJlbW92ZUNsYXNzKCd2YWxpZGF0aW9uLWZhaWxlZCcpOworCQkJCQl0aGlzLmZpcmVFdmVudCgnZWxlbWVudFBhc3MnLCBbZmllbGRdKTsKKwkJCQl9IGVsc2UgeworCQkJCQlmaWVsZC5hZGRDbGFzcygndmFsaWRhdGlvbi1mYWlsZWQnKS5yZW1vdmVDbGFzcygndmFsaWRhdGlvbi1wYXNzZWQnKTsKKwkJCQkJdGhpcy5maXJlRXZlbnQoJ2VsZW1lbnRGYWlsJywgW2ZpZWxkLCB2YWxpZGF0b3JzRmFpbGVkXSk7CisJCQkJfQorCQkJfQorCQkJaWYgKCF3YXJuZWQpeworCQkJCXZhciB3YXJuaW5ncyA9IHZhbGlkYXRpb25UeXBlcy5zb21lKGZ1bmN0aW9uKGNuKXsKKwkJCQkJaWYgKGNuLnRlc3QoJ153YXJuJykpCisJCQkJCQlyZXR1cm4gdGhpcy5nZXRWYWxpZGF0b3IoY24ucmVwbGFjZSgvXndhcm4tLywnJykpOworCQkJCQllbHNlIHJldHVybiBudWxsOworCQkJCX0sIHRoaXMpOworCQkJCWZpZWxkLnJlbW92ZUNsYXNzKCd3YXJuaW5nJyk7CisJCQkJdmFyIHdhcm5SZXN1bHQgPSB2YWxpZGF0aW9uVHlwZXMubWFwKGZ1bmN0aW9uKGNuKXsKKwkJCQkJaWYgKGNuLnRlc3QoJ153YXJuJykpCisJCQkJCQlyZXR1cm4gdGhpcy50ZXN0KGNuLnJlcGxhY2UoL153YXJuLS8sJycpLCBmaWVsZCwgdHJ1ZSk7CisJCQkJCWVsc2UgcmV0dXJuIG51bGw7CisJCQkJfSwgdGhpcyk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHBhc3NlZDsKKwl9LAorCisJdGVzdDogZnVuY3Rpb24oY2xhc3NOYW1lLCBmaWVsZCwgd2Fybil7CisJCWZpZWxkID0gZG9jdW1lbnQuaWQoZmllbGQpOworCQlpZiAoKHRoaXMub3B0aW9ucy5pZ25vcmVIaWRkZW4gJiYgIWZpZWxkLmlzVmlzaWJsZSgpKSB8fCAodGhpcy5vcHRpb25zLmlnbm9yZURpc2FibGVkICYmIGZpZWxkLmdldCgnZGlzYWJsZWQnKSkpIHJldHVybiB0cnVlOworCQl2YXIgdmFsaWRhdG9yID0gdGhpcy5nZXRWYWxpZGF0b3IoY2xhc3NOYW1lKTsKKwkJaWYgKHdhcm4gIT0gbnVsbCkgd2FybiA9IGZhbHNlOworCQlpZiAodGhpcy5oYXNWYWxpZGF0b3IoZmllbGQsICd3YXJuT25seScpKSB3YXJuID0gdHJ1ZTsKKwkJdmFyIGlzVmFsaWQgPSBmaWVsZC5oYXNDbGFzcygnaWdub3JlVmFsaWRhdGlvbicpIHx8ICh2YWxpZGF0b3IgPyB2YWxpZGF0b3IudGVzdChmaWVsZCkgOiB0cnVlKTsKKwkJaWYgKHZhbGlkYXRvcikgdGhpcy5maXJlRXZlbnQoJ2VsZW1lbnRWYWxpZGF0ZScsIFtpc1ZhbGlkLCBmaWVsZCwgY2xhc3NOYW1lLCB3YXJuXSk7CisJCWlmICh3YXJuKSByZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGlzVmFsaWQ7CisJfSwKKworCWhhc1ZhbGlkYXRvcjogZnVuY3Rpb24oZmllbGQsIHZhbHVlKXsKKwkJcmV0dXJuIGZpZWxkLmdldCgndmFsaWRhdG9ycycpLmNvbnRhaW5zKHZhbHVlKTsKKwl9LAorCisJcmVzZXRGaWVsZDogZnVuY3Rpb24oZmllbGQpeworCQlmaWVsZCA9IGRvY3VtZW50LmlkKGZpZWxkKTsKKwkJaWYgKGZpZWxkKXsKKwkJCWZpZWxkLmdldCgndmFsaWRhdG9ycycpLmVhY2goZnVuY3Rpb24oY2xhc3NOYW1lKXsKKwkJCQlpZiAoY2xhc3NOYW1lLnRlc3QoJ153YXJuLScpKSBjbGFzc05hbWUgPSBjbGFzc05hbWUucmVwbGFjZSgvXndhcm4tLywgJycpOworCQkJCWZpZWxkLnJlbW92ZUNsYXNzKCd2YWxpZGF0aW9uLWZhaWxlZCcpOworCQkJCWZpZWxkLnJlbW92ZUNsYXNzKCd3YXJuaW5nJyk7CisJCQkJZmllbGQucmVtb3ZlQ2xhc3MoJ3ZhbGlkYXRpb24tcGFzc2VkJyk7CisJCQl9LCB0aGlzKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJc3RvcDogZnVuY3Rpb24oKXsKKwkJdGhpcy5wYXVzZWQgPSB0cnVlOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJc3RhcnQ6IGZ1bmN0aW9uKCl7CisJCXRoaXMucGF1c2VkID0gZmFsc2U7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlpZ25vcmVGaWVsZDogZnVuY3Rpb24oZmllbGQsIHdhcm4peworCQlmaWVsZCA9IGRvY3VtZW50LmlkKGZpZWxkKTsKKwkJaWYgKGZpZWxkKXsKKwkJCXRoaXMuZW5mb3JjZUZpZWxkKGZpZWxkKTsKKwkJCWlmICh3YXJuKSBmaWVsZC5hZGRDbGFzcygnd2Fybk9ubHknKTsKKwkJCWVsc2UgZmllbGQuYWRkQ2xhc3MoJ2lnbm9yZVZhbGlkYXRpb24nKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZW5mb3JjZUZpZWxkOiBmdW5jdGlvbihmaWVsZCl7CisJCWZpZWxkID0gZG9jdW1lbnQuaWQoZmllbGQpOworCQlpZiAoZmllbGQpIGZpZWxkLnJlbW92ZUNsYXNzKCd3YXJuT25seScpLnJlbW92ZUNsYXNzKCdpZ25vcmVWYWxpZGF0aW9uJyk7CisJCXJldHVybiB0aGlzOworCX0KKworfSk7CisKK0Zvcm0uVmFsaWRhdG9yLmdldE1zZyA9IGZ1bmN0aW9uKGtleSl7CisJcmV0dXJuIExvY2FsZS5nZXQoJ0Zvcm1WYWxpZGF0b3IuJyArIGtleSk7Cit9OworCitGb3JtLlZhbGlkYXRvci5hZGRlcnMgPSB7CisKKwl2YWxpZGF0b3JzOnt9LAorCisJYWRkIDogZnVuY3Rpb24oY2xhc3NOYW1lLCBvcHRpb25zKXsKKwkJdGhpcy52YWxpZGF0b3JzW2NsYXNzTmFtZV0gPSBuZXcgSW5wdXRWYWxpZGF0b3IoY2xhc3NOYW1lLCBvcHRpb25zKTsKKwkJLy9pZiB0aGlzIGlzIGEgY2xhc3MgKHRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgaW5zdGFuY2VzIG9mIEZvcm0uVmFsaWRhdG9yIGFuZCB0aGUgRm9ybS5WYWxpZGF0b3IgbmFtZXNwYWNlKQorCQkvL2V4dGVuZCB0aGVzZSB2YWxpZGF0b3JzIGludG8gaXQKKwkJLy90aGlzIGFsbG93cyB2YWxpZGF0b3JzIHRvIGJlIGdsb2JhbCBhbmQvb3IgcGVyIGluc3RhbmNlCisJCWlmICghdGhpcy5pbml0aWFsaXplKXsKKwkJCXRoaXMuaW1wbGVtZW50KHsKKwkJCQl2YWxpZGF0b3JzOiB0aGlzLnZhbGlkYXRvcnMKKwkJCX0pOworCQl9CisJfSwKKworCWFkZEFsbFRoZXNlIDogZnVuY3Rpb24odmFsaWRhdG9ycyl7CisJCUFycmF5LmNvbnZlcnQodmFsaWRhdG9ycykuZWFjaChmdW5jdGlvbih2YWxpZGF0b3IpeworCQkJdGhpcy5hZGQodmFsaWRhdG9yWzBdLCB2YWxpZGF0b3JbMV0pOworCQl9LCB0aGlzKTsKKwl9LAorCisJZ2V0VmFsaWRhdG9yOiBmdW5jdGlvbihjbGFzc05hbWUpeworCQlyZXR1cm4gdGhpcy52YWxpZGF0b3JzW2NsYXNzTmFtZS5zcGxpdCgnOicpWzBdXTsKKwl9CisKK307CisKK09iamVjdC5hcHBlbmQoRm9ybS5WYWxpZGF0b3IsIEZvcm0uVmFsaWRhdG9yLmFkZGVycyk7CisKK0Zvcm0uVmFsaWRhdG9yLmltcGxlbWVudChGb3JtLlZhbGlkYXRvci5hZGRlcnMpOworCitGb3JtLlZhbGlkYXRvci5hZGQoJ0lzRW1wdHknLCB7CisKKwllcnJvck1zZzogZmFsc2UsCisJdGVzdDogZnVuY3Rpb24oZWxlbWVudCl7CisJCWlmIChlbGVtZW50LnR5cGUgPT0gJ3NlbGVjdC1vbmUnIHx8IGVsZW1lbnQudHlwZSA9PSAnc2VsZWN0JykKKwkJCXJldHVybiAhKGVsZW1lbnQuc2VsZWN0ZWRJbmRleCA+PSAwICYmIGVsZW1lbnQub3B0aW9uc1tlbGVtZW50LnNlbGVjdGVkSW5kZXhdLnZhbHVlICE9ICcnKTsKKwkJZWxzZQorCQkJcmV0dXJuICgoZWxlbWVudC5nZXQoJ3ZhbHVlJykgPT0gbnVsbCkgfHwgKGVsZW1lbnQuZ2V0KCd2YWx1ZScpLmxlbmd0aCA9PSAwKSk7CisJfQorCit9KTsKKworRm9ybS5WYWxpZGF0b3IuYWRkQWxsVGhlc2UoWworCisJWydyZXF1aXJlZCcsIHsKKwkJZXJyb3JNc2c6IGZ1bmN0aW9uKCl7CisJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0TXNnKCdyZXF1aXJlZCcpOworCQl9LAorCQl0ZXN0OiBmdW5jdGlvbihlbGVtZW50KXsKKwkJCXJldHVybiAhRm9ybS5WYWxpZGF0b3IuZ2V0VmFsaWRhdG9yKCdJc0VtcHR5JykudGVzdChlbGVtZW50KTsKKwkJfQorCX1dLAorCisJWydsZW5ndGgnLCB7CisJCWVycm9yTXNnOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQlpZiAodHlwZU9mKHByb3BzLmxlbmd0aCkgIT0gJ251bGwnKQorCQkJCXJldHVybiBGb3JtLlZhbGlkYXRvci5nZXRNc2coJ2xlbmd0aCcpLnN1YnN0aXR1dGUoe2xlbmd0aDogcHJvcHMubGVuZ3RoLCBlbExlbmd0aDogZWxlbWVudC5nZXQoJ3ZhbHVlJykubGVuZ3RofSk7CisJCQllbHNlIHJldHVybiAnJzsKKwkJfSwKKwkJdGVzdDogZnVuY3Rpb24oZWxlbWVudCwgcHJvcHMpeworCQkJaWYgKHR5cGVPZihwcm9wcy5sZW5ndGgpICE9ICdudWxsJykgcmV0dXJuIChlbGVtZW50LmdldCgndmFsdWUnKS5sZW5ndGggPT0gcHJvcHMubGVuZ3RoIHx8IGVsZW1lbnQuZ2V0KCd2YWx1ZScpLmxlbmd0aCA9PSAwKTsKKwkJCWVsc2UgcmV0dXJuIHRydWU7CisJCX0KKwl9XSwKKworCVsnbWluTGVuZ3RoJywgeworCQllcnJvck1zZzogZnVuY3Rpb24oZWxlbWVudCwgcHJvcHMpeworCQkJaWYgKHR5cGVPZihwcm9wcy5taW5MZW5ndGgpICE9ICdudWxsJykKKwkJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0TXNnKCdtaW5MZW5ndGgnKS5zdWJzdGl0dXRlKHttaW5MZW5ndGg6IHByb3BzLm1pbkxlbmd0aCwgbGVuZ3RoOiBlbGVtZW50LmdldCgndmFsdWUnKS5sZW5ndGh9KTsKKwkJCWVsc2UgcmV0dXJuICcnOworCQl9LAorCQl0ZXN0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQlpZiAodHlwZU9mKHByb3BzLm1pbkxlbmd0aCkgIT0gJ251bGwnKSByZXR1cm4gKGVsZW1lbnQuZ2V0KCd2YWx1ZScpLmxlbmd0aCA+PSAocHJvcHMubWluTGVuZ3RoIHx8IDApKTsKKwkJCWVsc2UgcmV0dXJuIHRydWU7CisJCX0KKwl9XSwKKworCVsnbWF4TGVuZ3RoJywgeworCQllcnJvck1zZzogZnVuY3Rpb24oZWxlbWVudCwgcHJvcHMpeworCQkJLy9wcm9wcyBpcyB7bWF4TGVuZ3RoOjEwfQorCQkJaWYgKHR5cGVPZihwcm9wcy5tYXhMZW5ndGgpICE9ICdudWxsJykKKwkJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0TXNnKCdtYXhMZW5ndGgnKS5zdWJzdGl0dXRlKHttYXhMZW5ndGg6IHByb3BzLm1heExlbmd0aCwgbGVuZ3RoOiBlbGVtZW50LmdldCgndmFsdWUnKS5sZW5ndGh9KTsKKwkJCWVsc2UgcmV0dXJuICcnOworCQl9LAorCQl0ZXN0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQlyZXR1cm4gZWxlbWVudC5nZXQoJ3ZhbHVlJykubGVuZ3RoIDw9IChwcm9wcy5tYXhMZW5ndGggfHwgMTAwMDApOworCQl9CisJfV0sCisKKwlbJ3ZhbGlkYXRlLWludGVnZXInLCB7CisJCWVycm9yTXNnOiBGb3JtLlZhbGlkYXRvci5nZXRNc2cucGFzcygnaW50ZWdlcicpLAorCQl0ZXN0OiBmdW5jdGlvbihlbGVtZW50KXsKKwkJCXJldHVybiBGb3JtLlZhbGlkYXRvci5nZXRWYWxpZGF0b3IoJ0lzRW1wdHknKS50ZXN0KGVsZW1lbnQpIHx8ICgvXigtP1sxLTldXGQqfDApJC8pLnRlc3QoZWxlbWVudC5nZXQoJ3ZhbHVlJykpOworCQl9CisJfV0sCisKKwlbJ3ZhbGlkYXRlLW51bWVyaWMnLCB7CisJCWVycm9yTXNnOiBGb3JtLlZhbGlkYXRvci5nZXRNc2cucGFzcygnbnVtZXJpYycpLAorCQl0ZXN0OiBmdW5jdGlvbihlbGVtZW50KXsKKwkJCXJldHVybiBGb3JtLlZhbGlkYXRvci5nZXRWYWxpZGF0b3IoJ0lzRW1wdHknKS50ZXN0KGVsZW1lbnQpIHx8CisJCQkJKC9eLT8oPzowJDAoPz1cZCpcLil8WzEtOV18MClcZCooXC5cZCspPyQvKS50ZXN0KGVsZW1lbnQuZ2V0KCd2YWx1ZScpKTsKKwkJfQorCX1dLAorCisJWyd2YWxpZGF0ZS1kaWdpdHMnLCB7CisJCWVycm9yTXNnOiBGb3JtLlZhbGlkYXRvci5nZXRNc2cucGFzcygnZGlnaXRzJyksCisJCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQpeworCQkJcmV0dXJuIEZvcm0uVmFsaWRhdG9yLmdldFZhbGlkYXRvcignSXNFbXB0eScpLnRlc3QoZWxlbWVudCkgfHwgKC9eW1xkKCkgLjpcLVwrI10rJC8udGVzdChlbGVtZW50LmdldCgndmFsdWUnKSkpOworCQl9CisJfV0sCisKKwlbJ3ZhbGlkYXRlLWFscGhhJywgeworCQllcnJvck1zZzogRm9ybS5WYWxpZGF0b3IuZ2V0TXNnLnBhc3MoJ2FscGhhJyksCisJCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQpeworCQkJcmV0dXJuIEZvcm0uVmFsaWRhdG9yLmdldFZhbGlkYXRvcignSXNFbXB0eScpLnRlc3QoZWxlbWVudCkgfHwgKC9eW2EtekEtWl0rJC8pLnRlc3QoZWxlbWVudC5nZXQoJ3ZhbHVlJykpOworCQl9CisJfV0sCisKKwlbJ3ZhbGlkYXRlLWFscGhhbnVtJywgeworCQllcnJvck1zZzogRm9ybS5WYWxpZGF0b3IuZ2V0TXNnLnBhc3MoJ2FscGhhbnVtJyksCisJCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQpeworCQkJcmV0dXJuIEZvcm0uVmFsaWRhdG9yLmdldFZhbGlkYXRvcignSXNFbXB0eScpLnRlc3QoZWxlbWVudCkgfHwgISgvXFcvKS50ZXN0KGVsZW1lbnQuZ2V0KCd2YWx1ZScpKTsKKwkJfQorCX1dLAorCisJWyd2YWxpZGF0ZS1kYXRlJywgeworCQllcnJvck1zZzogZnVuY3Rpb24oZWxlbWVudCwgcHJvcHMpeworCQkJaWYgKERhdGUucGFyc2UpeworCQkJCXZhciBmb3JtYXQgPSBwcm9wcy5kYXRlRm9ybWF0IHx8ICcleCc7CisJCQkJcmV0dXJuIEZvcm0uVmFsaWRhdG9yLmdldE1zZygnZGF0ZVN1Y2hBcycpLnN1YnN0aXR1dGUoe2RhdGU6IG5ldyBEYXRlKCkuZm9ybWF0KGZvcm1hdCl9KTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dXJuIEZvcm0uVmFsaWRhdG9yLmdldE1zZygnZGF0ZUluRm9ybWF0TURZJyk7CisJCQl9CisJCX0sCisJCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BzKXsKKwkJCWlmIChGb3JtLlZhbGlkYXRvci5nZXRWYWxpZGF0b3IoJ0lzRW1wdHknKS50ZXN0KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTsKKwkJCXZhciBkYXRlTG9jYWxlID0gTG9jYWxlLmdldCgnRGF0ZScpLAorCQkJCWRhdGVOb3VucyA9IG5ldyBSZWdFeHAoW2RhdGVMb2NhbGUuZGF5cywgZGF0ZUxvY2FsZS5kYXlzX2FiYnIsIGRhdGVMb2NhbGUubW9udGhzLCBkYXRlTG9jYWxlLm1vbnRoc19hYmJyLCBkYXRlTG9jYWxlLkFNLCBkYXRlTG9jYWxlLlBNXS5mbGF0dGVuKCkuam9pbignfCcpLCAnaScpLAorCQkJCXZhbHVlID0gZWxlbWVudC5nZXQoJ3ZhbHVlJyksCisJCQkJd29yZHNJblZhbHVlID0gdmFsdWUubWF0Y2goL1thLXpdKy9naSk7CisKKwkJCWlmICh3b3Jkc0luVmFsdWUgJiYgIXdvcmRzSW5WYWx1ZS5ldmVyeShkYXRlTm91bnMuZXhlYywgZGF0ZU5vdW5zKSkgcmV0dXJuIGZhbHNlOworCisJCQl2YXIgZGF0ZSA9IERhdGUucGFyc2UodmFsdWUpOworCQkJaWYgKCFkYXRlKSByZXR1cm4gZmFsc2U7CisKKwkJCXZhciBmb3JtYXQgPSBwcm9wcy5kYXRlRm9ybWF0IHx8ICcleCcsCisJCQkJZm9ybWF0dGVkID0gZGF0ZS5mb3JtYXQoZm9ybWF0KTsKKwkJCWlmIChmb3JtYXR0ZWQgIT0gJ2ludmFsaWQgZGF0ZScpIGVsZW1lbnQuc2V0KCd2YWx1ZScsIGZvcm1hdHRlZCk7CisJCQlyZXR1cm4gZGF0ZS5pc1ZhbGlkKCk7CisJCX0KKwl9XSwKKworCVsndmFsaWRhdGUtZW1haWwnLCB7CisJCWVycm9yTXNnOiBGb3JtLlZhbGlkYXRvci5nZXRNc2cucGFzcygnZW1haWwnKSwKKwkJdGVzdDogZnVuY3Rpb24oZWxlbWVudCl7CisJCQkvKgorCQkJdmFyIGNoYXJzID0gIlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSIsCisJCQkJbG9jYWwgPSAnKD86JyArIGNoYXJzICsgJ1xcLj8pezAsNjN9JyArIGNoYXJzLAorCisJCQkJbGFiZWwgPSAnW2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/JywKKwkJCQlob3N0bmFtZSA9ICcoPzonICsgbGFiZWwgKyAnXFwuKSonICsgbGFiZWw7CisKKwkJCQlvY3RldCA9ICcoPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pJywKKwkJCQlpcHY0ID0gJ1xcWyg/OicgKyBvY3RldCArICdcXC4pezN9JyArIG9jdGV0ICsgJ1xcXScsCisKKwkJCQlkb21haW4gPSAnKD86JyArIGhvc3RuYW1lICsgJ3wnICsgaXB2NCArICcpJzsKKworCQkJdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXicgKyBsb2NhbCArICdAJyArIGRvbWFpbiArICckJywgJ2knKTsKKwkJCSovCisJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0VmFsaWRhdG9yKCdJc0VtcHR5JykudGVzdChlbGVtZW50KSB8fCAoL14oPzpbYS16MC05ISMkJSYnKitcLz0/Xl9ge3x9fi1dXC4/KXswLDYzfVthLXowLTkhIyQlJicqK1wvPT9eX2B7fH1+LV1AKD86KD86W2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/XC4pKlthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pP3xcWyg/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXF0pJC9pKS50ZXN0KGVsZW1lbnQuZ2V0KCd2YWx1ZScpKTsKKwkJfQorCX1dLAorCisJWyd2YWxpZGF0ZS11cmwnLCB7CisJCWVycm9yTXNnOiBGb3JtLlZhbGlkYXRvci5nZXRNc2cucGFzcygndXJsJyksCisJCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQpeworCQkJcmV0dXJuIEZvcm0uVmFsaWRhdG9yLmdldFZhbGlkYXRvcignSXNFbXB0eScpLnRlc3QoZWxlbWVudCkgfHwgKC9eKGh0dHBzP3xmdHB8cm10cHxtbXMpOlwvXC8oKFtBLVowLTldW0EtWjAtOV8tXSopKFwuW0EtWjAtOV1bQS1aMC05Xy1dKikrKSg6KFxkKykpP1wvPy9pKS50ZXN0KGVsZW1lbnQuZ2V0KCd2YWx1ZScpKTsKKwkJfQorCX1dLAorCisJWyd2YWxpZGF0ZS1jdXJyZW5jeS1kb2xsYXInLCB7CisJCWVycm9yTXNnOiBGb3JtLlZhbGlkYXRvci5nZXRNc2cucGFzcygnY3VycmVuY3lEb2xsYXInKSwKKwkJdGVzdDogZnVuY3Rpb24oZWxlbWVudCl7CisJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0VmFsaWRhdG9yKCdJc0VtcHR5JykudGVzdChlbGVtZW50KSB8fCAoL15cJD9cLT8oWzEtOV17MX1bMC05XXswLDJ9KFwsWzAtOV17M30pKihcLlswLTldezAsMn0pP3xbMS05XXsxfVxkKihcLlswLTldezAsMn0pP3wwKFwuWzAtOV17MCwyfSk/fChcLlswLTldezEsMn0pPykkLykudGVzdChlbGVtZW50LmdldCgndmFsdWUnKSk7CisJCX0KKwl9XSwKKworCVsndmFsaWRhdGUtb25lLXJlcXVpcmVkJywgeworCQllcnJvck1zZzogRm9ybS5WYWxpZGF0b3IuZ2V0TXNnLnBhc3MoJ29uZVJlcXVpcmVkJyksCisJCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BzKXsKKwkJCXZhciBwID0gZG9jdW1lbnQuaWQocHJvcHNbJ3ZhbGlkYXRlLW9uZS1yZXF1aXJlZCddKSB8fCBlbGVtZW50LmdldFBhcmVudChwcm9wc1sndmFsaWRhdGUtb25lLXJlcXVpcmVkJ10pOworCQkJcmV0dXJuIHAuZ2V0RWxlbWVudHMoJ2lucHV0Jykuc29tZShmdW5jdGlvbihlbCl7CisJCQkJaWYgKFsnY2hlY2tib3gnLCAncmFkaW8nXS5jb250YWlucyhlbC5nZXQoJ3R5cGUnKSkpIHJldHVybiBlbC5nZXQoJ2NoZWNrZWQnKTsKKwkJCQlyZXR1cm4gZWwuZ2V0KCd2YWx1ZScpOworCQkJfSk7CisJCX0KKwl9XQorCitdKTsKKworRWxlbWVudC5Qcm9wZXJ0aWVzLnZhbGlkYXRvciA9IHsKKworCXNldDogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXRoaXMuZ2V0KCd2YWxpZGF0b3InKS5zZXRPcHRpb25zKG9wdGlvbnMpOworCX0sCisKKwlnZXQ6IGZ1bmN0aW9uKCl7CisJCXZhciB2YWxpZGF0b3IgPSB0aGlzLnJldHJpZXZlKCd2YWxpZGF0b3InKTsKKwkJaWYgKCF2YWxpZGF0b3IpeworCQkJdmFsaWRhdG9yID0gbmV3IEZvcm0uVmFsaWRhdG9yKHRoaXMpOworCQkJdGhpcy5zdG9yZSgndmFsaWRhdG9yJywgdmFsaWRhdG9yKTsKKwkJfQorCQlyZXR1cm4gdmFsaWRhdG9yOworCX0KKworfTsKKworRWxlbWVudC5pbXBsZW1lbnQoeworCisJdmFsaWRhdGU6IGZ1bmN0aW9uKG9wdGlvbnMpeworCQlpZiAob3B0aW9ucykgdGhpcy5zZXQoJ3ZhbGlkYXRvcicsIG9wdGlvbnMpOworCQlyZXR1cm4gdGhpcy5nZXQoJ3ZhbGlkYXRvcicpLnZhbGlkYXRlKCk7CisJfQorCit9KTsKKworCisKKworCisKKy8qCistLS0KKworc2NyaXB0OiBGb3JtLlZhbGlkYXRvci5FeHRyYXMuanMKKworbmFtZTogRm9ybS5WYWxpZGF0b3IuRXh0cmFzCisKK2Rlc2NyaXB0aW9uOiBBZGRpdGlvbmFsIHZhbGlkYXRvcnMgZm9yIHRoZSBGb3JtLlZhbGlkYXRvciBjbGFzcy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gRm9ybS5WYWxpZGF0b3IKKworcHJvdmlkZXM6IFtGb3JtLlZhbGlkYXRvci5FeHRyYXNdCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKCl7CisKK2Z1bmN0aW9uIGdldEl0ZW1zKHByb3BzLCBwcmVmZXJlbmNlLCBjaGlsZHJlbiwgY3NzU2VsZWN0b3IpeworCWlmIChwcmVmZXJlbmNlICYmIHByb3BzW3ByZWZlcmVuY2VdKSByZXR1cm4gcHJvcHNbcHJlZmVyZW5jZV07CisJdmFyIGVsID0gZG9jdW1lbnQuaWQocHJvcHNbY2hpbGRyZW5dKTsKKwlpZiAoIWVsKSByZXR1cm4gW107CisJcmV0dXJuIGVsLmdldEVsZW1lbnRzKGNzc1NlbGVjdG9yKTsKK30KKworRm9ybS5WYWxpZGF0b3IuYWRkQWxsVGhlc2UoWworCisJWyd2YWxpZGF0ZS1lbmZvcmNlLW9uY2hlY2snLCB7CisJCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BzKXsKKwkJCXZhciBmdiA9IGVsZW1lbnQuZ2V0UGFyZW50KCdmb3JtJykucmV0cmlldmUoJ3ZhbGlkYXRvcicpOworCQkJaWYgKCFmdikgcmV0dXJuIHRydWU7CisJCQlnZXRJdGVtcyhwcm9wcywgJ3RvRW5mb3JjZScsICdlbmZvcmNlQ2hpbGRyZW5PZicsICdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpLmVhY2goZnVuY3Rpb24oaXRlbSl7CisJCQkJaWYgKGVsZW1lbnQuY2hlY2tlZCl7CisJCQkJCWZ2LmVuZm9yY2VGaWVsZChpdGVtKTsKKwkJCQl9IGVsc2UgeworCQkJCQlmdi5pZ25vcmVGaWVsZChpdGVtKTsKKwkJCQkJZnYucmVzZXRGaWVsZChpdGVtKTsKKwkJCQl9CisJCQl9KTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfV0sCisKKwlbJ3ZhbGlkYXRlLWlnbm9yZS1vbmNoZWNrJywgeworCQl0ZXN0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQl2YXIgZnYgPSBlbGVtZW50LmdldFBhcmVudCgnZm9ybScpLnJldHJpZXZlKCd2YWxpZGF0b3InKTsKKwkJCWlmICghZnYpIHJldHVybiB0cnVlOworCQkJZ2V0SXRlbXMocHJvcHMsICd0b0lnbm9yZScsICdpZ25vcmVDaGlsZHJlbk9mJywgJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJykuZWFjaChmdW5jdGlvbihpdGVtKXsKKwkJCQlpZiAoZWxlbWVudC5jaGVja2VkKXsKKwkJCQkJZnYuaWdub3JlRmllbGQoaXRlbSk7CisJCQkJCWZ2LnJlc2V0RmllbGQoaXRlbSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJZnYuZW5mb3JjZUZpZWxkKGl0ZW0pOworCQkJCX0KKwkJCX0pOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9XSwKKworCVsndmFsaWRhdGUtZW5mb3JjZS1vbnNlbGVjdC12YWx1ZScsIHsKKwkJdGVzdDogZnVuY3Rpb24oZWxlbWVudCwgcHJvcHMpeworCQkJaWYgKCFwcm9wcy52YWx1ZSkgcmV0dXJuIHRydWU7CisJCQl2YXIgZnYgPSBlbGVtZW50LmdldFBhcmVudCgnZm9ybScpLnJldHJpZXZlKCd2YWxpZGF0b3InKTsKKwkJCWlmICghZnYpIHJldHVybiB0cnVlOworCQkJZ2V0SXRlbXMocHJvcHMsICd0b0VuZm9yY2UnLCAnZW5mb3JjZUNoaWxkcmVuT2YnLCAnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEnKS5lYWNoKGZ1bmN0aW9uKGl0ZW0peworCQkJCWlmIChwcm9wcy52YWx1ZSA9PSBlbGVtZW50LnZhbHVlKXsKKwkJCQkJZnYuZW5mb3JjZUZpZWxkKGl0ZW0pOworCQkJCX0gZWxzZSB7CisJCQkJCWZ2Lmlnbm9yZUZpZWxkKGl0ZW0pOworCQkJCQlmdi5yZXNldEZpZWxkKGl0ZW0pOworCQkJCX0KKwkJCX0pOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9XSwKKworCVsndmFsaWRhdGUtbm9zcGFjZScsIHsKKwkJZXJyb3JNc2c6IGZ1bmN0aW9uKCl7CisJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0TXNnKCdub1NwYWNlJyk7CisJCX0sCisJCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BzKXsKKwkJCXJldHVybiAhZWxlbWVudC5nZXQoJ3ZhbHVlJykudGVzdCgvXHMvKTsKKwkJfQorCX1dLAorCisJWyd2YWxpZGF0ZS10b2dnbGUtb25jaGVjaycsIHsKKwkJdGVzdDogZnVuY3Rpb24oZWxlbWVudCwgcHJvcHMpeworCQkJdmFyIGZ2ID0gZWxlbWVudC5nZXRQYXJlbnQoJ2Zvcm0nKS5yZXRyaWV2ZSgndmFsaWRhdG9yJyk7CisJCQlpZiAoIWZ2KSByZXR1cm4gdHJ1ZTsKKwkJCXZhciBlbGVBcnIgPSBnZXRJdGVtcyhwcm9wcywgJ3RvVG9nZ2xlJywgJ3RvVG9nZ2xlQ2hpbGRyZW5PZicsICdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpOworCQkJaWYgKCFlbGVtZW50LmNoZWNrZWQpeworCQkJCWVsZUFyci5lYWNoKGZ1bmN0aW9uKGl0ZW0peworCQkJCQlmdi5pZ25vcmVGaWVsZChpdGVtKTsKKwkJCQkJZnYucmVzZXRGaWVsZChpdGVtKTsKKwkJCQl9KTsKKwkJCX0gZWxzZSB7CisJCQkJZWxlQXJyLmVhY2goZnVuY3Rpb24oaXRlbSl7CisJCQkJCWZ2LmVuZm9yY2VGaWVsZChpdGVtKTsKKwkJCQl9KTsKKwkJCX0KKwkJCXJldHVybiB0cnVlOworCQl9CisJfV0sCisKKwlbJ3ZhbGlkYXRlLXJlcWNoay1ieW5vZGUnLCB7CisJCWVycm9yTXNnOiBmdW5jdGlvbigpeworCQkJcmV0dXJuIEZvcm0uVmFsaWRhdG9yLmdldE1zZygncmVxQ2hrQnlOb2RlJyk7CisJCX0sCisJCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BzKXsKKwkJCXJldHVybiBnZXRJdGVtcyhwcm9wcywgZmFsc2UsICdub2RlSWQnLCBwcm9wcy5zZWxlY3RvciB8fCAnaW5wdXRbdHlwZT1jaGVja2JveF0sIGlucHV0W3R5cGU9cmFkaW9dJykuc29tZShmdW5jdGlvbihpdGVtKXsKKwkJCQlyZXR1cm4gaXRlbS5jaGVja2VkOworCQkJfSk7CisJCX0KKwl9XSwKKworCVsndmFsaWRhdGUtcmVxdWlyZWQtY2hlY2snLCB7CisJCWVycm9yTXNnOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQlyZXR1cm4gcHJvcHMudXNlVGl0bGUgPyBlbGVtZW50LmdldCgndGl0bGUnKSA6IEZvcm0uVmFsaWRhdG9yLmdldE1zZygncmVxdWlyZWRDaGsnKTsKKwkJfSwKKwkJdGVzdDogZnVuY3Rpb24oZWxlbWVudCwgcHJvcHMpeworCQkJcmV0dXJuICEhZWxlbWVudC5jaGVja2VkOworCQl9CisJfV0sCisKKwlbJ3ZhbGlkYXRlLXJlcWNoay1ieW5hbWUnLCB7CisJCWVycm9yTXNnOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0TXNnKCdyZXFDaGtCeU5hbWUnKS5zdWJzdGl0dXRlKHtsYWJlbDogcHJvcHMubGFiZWwgfHwgZWxlbWVudC5nZXQoJ3R5cGUnKX0pOworCQl9LAorCQl0ZXN0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQl2YXIgZ3JwTmFtZSA9IHByb3BzLmdyb3VwTmFtZSB8fCBlbGVtZW50LmdldCgnbmFtZScpOworCQkJdmFyIGdycE5hbWVFbHMgPSAkJCgnW25hbWU9JyArIGdycE5hbWUgKyddJyk7CisJCQl2YXIgb25lQ2hlY2tlZEl0ZW0gPSBncnBOYW1lRWxzLnNvbWUoZnVuY3Rpb24oaXRlbSwgaW5kZXgpeworCQkJCXJldHVybiBpdGVtLmNoZWNrZWQ7CisJCQl9KTsKKwkJCXZhciBmdiA9IGVsZW1lbnQuZ2V0UGFyZW50KCdmb3JtJykucmV0cmlldmUoJ3ZhbGlkYXRvcicpOworCQkJaWYgKG9uZUNoZWNrZWRJdGVtICYmIGZ2KXsKKwkJCQlncnBOYW1lRWxzLmVhY2goZnVuY3Rpb24oaXRlbSwgaW5kZXgpeyBmdi5yZXNldEZpZWxkKGl0ZW0pOyB9KTsKKwkJCX0KKwkJCXJldHVybiBvbmVDaGVja2VkSXRlbTsKKwkJfQorCX1dLAorCisJWyd2YWxpZGF0ZS1tYXRjaCcsIHsKKwkJZXJyb3JNc2c6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BzKXsKKwkJCXJldHVybiBGb3JtLlZhbGlkYXRvci5nZXRNc2coJ21hdGNoJykuc3Vic3RpdHV0ZSh7bWF0Y2hOYW1lOiBkZWNvZGVVUklDb21wb25lbnQoKHByb3BzLm1hdGNoTmFtZSsnJykucmVwbGFjZSgvXCsvZywgJyUyMCcpKSB8fCBkb2N1bWVudC5pZChwcm9wcy5tYXRjaElucHV0KS5nZXQoJ25hbWUnKX0pOworCQl9LAorCQl0ZXN0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQl2YXIgZWxlVmFsID0gZWxlbWVudC5nZXQoJ3ZhbHVlJyk7CisJCQl2YXIgbWF0Y2hWYWwgPSBkb2N1bWVudC5pZChwcm9wcy5tYXRjaElucHV0KSAmJiBkb2N1bWVudC5pZChwcm9wcy5tYXRjaElucHV0KS5nZXQoJ3ZhbHVlJyk7CisJCQlyZXR1cm4gZWxlVmFsICYmIG1hdGNoVmFsID8gZWxlVmFsID09IG1hdGNoVmFsIDogdHJ1ZTsKKwkJfQorCX1dLAorCisJWyd2YWxpZGF0ZS1hZnRlci1kYXRlJywgeworCQllcnJvck1zZzogZnVuY3Rpb24oZWxlbWVudCwgcHJvcHMpeworCQkJcmV0dXJuIEZvcm0uVmFsaWRhdG9yLmdldE1zZygnYWZ0ZXJEYXRlJykuc3Vic3RpdHV0ZSh7CisJCQkJbGFiZWw6IHByb3BzLmFmdGVyTGFiZWwgfHwgKHByb3BzLmFmdGVyRWxlbWVudCA/IEZvcm0uVmFsaWRhdG9yLmdldE1zZygnc3RhcnREYXRlJykgOiBGb3JtLlZhbGlkYXRvci5nZXRNc2coJ2N1cnJlbnREYXRlJykpCisJCQl9KTsKKwkJfSwKKwkJdGVzdDogZnVuY3Rpb24oZWxlbWVudCwgcHJvcHMpeworCQkJdmFyIHN0YXJ0ID0gZG9jdW1lbnQuaWQocHJvcHMuYWZ0ZXJFbGVtZW50KSA/IERhdGUucGFyc2UoZG9jdW1lbnQuaWQocHJvcHMuYWZ0ZXJFbGVtZW50KS5nZXQoJ3ZhbHVlJykpIDogbmV3IERhdGUoKTsKKwkJCXZhciBlbmQgPSBEYXRlLnBhcnNlKGVsZW1lbnQuZ2V0KCd2YWx1ZScpKTsKKwkJCXJldHVybiBlbmQgJiYgc3RhcnQgPyBlbmQgPj0gc3RhcnQgOiB0cnVlOworCQl9CisJfV0sCisKKwlbJ3ZhbGlkYXRlLWJlZm9yZS1kYXRlJywgeworCQllcnJvck1zZzogZnVuY3Rpb24oZWxlbWVudCwgcHJvcHMpeworCQkJcmV0dXJuIEZvcm0uVmFsaWRhdG9yLmdldE1zZygnYmVmb3JlRGF0ZScpLnN1YnN0aXR1dGUoeworCQkJCWxhYmVsOiBwcm9wcy5iZWZvcmVMYWJlbCB8fCAocHJvcHMuYmVmb3JlRWxlbWVudCA/IEZvcm0uVmFsaWRhdG9yLmdldE1zZygnZW5kRGF0ZScpIDogRm9ybS5WYWxpZGF0b3IuZ2V0TXNnKCdjdXJyZW50RGF0ZScpKQorCQkJfSk7CisJCX0sCisJCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BzKXsKKwkJCXZhciBzdGFydCA9IERhdGUucGFyc2UoZWxlbWVudC5nZXQoJ3ZhbHVlJykpOworCQkJdmFyIGVuZCA9IGRvY3VtZW50LmlkKHByb3BzLmJlZm9yZUVsZW1lbnQpID8gRGF0ZS5wYXJzZShkb2N1bWVudC5pZChwcm9wcy5iZWZvcmVFbGVtZW50KS5nZXQoJ3ZhbHVlJykpIDogbmV3IERhdGUoKTsKKwkJCXJldHVybiBlbmQgJiYgc3RhcnQgPyBlbmQgPj0gc3RhcnQgOiB0cnVlOworCQl9CisJfV0sCisKKwlbJ3ZhbGlkYXRlLWN1c3RvbS1yZXF1aXJlZCcsIHsKKwkJZXJyb3JNc2c6IGZ1bmN0aW9uKCl7CisJCQlyZXR1cm4gRm9ybS5WYWxpZGF0b3IuZ2V0TXNnKCdyZXF1aXJlZCcpOworCQl9LAorCQl0ZXN0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wcyl7CisJCQlyZXR1cm4gZWxlbWVudC5nZXQoJ3ZhbHVlJykgIT0gcHJvcHMuZW1wdHlWYWx1ZTsKKwkJfQorCX1dLAorCisJWyd2YWxpZGF0ZS1zYW1lLW1vbnRoJywgeworCQllcnJvck1zZzogZnVuY3Rpb24oZWxlbWVudCwgcHJvcHMpeworCQkJdmFyIHN0YXJ0TW8gPSBkb2N1bWVudC5pZChwcm9wcy5zYW1lTW9udGhBcykgJiYgZG9jdW1lbnQuaWQocHJvcHMuc2FtZU1vbnRoQXMpLmdldCgndmFsdWUnKTsKKwkJCXZhciBlbGVWYWwgPSBlbGVtZW50LmdldCgndmFsdWUnKTsKKwkJCWlmIChlbGVWYWwgIT0gJycpIHJldHVybiBGb3JtLlZhbGlkYXRvci5nZXRNc2coc3RhcnRNbyA/ICdzYW1lTW9udGgnIDogJ3N0YXJ0TW9udGgnKTsKKwkJfSwKKwkJdGVzdDogZnVuY3Rpb24oZWxlbWVudCwgcHJvcHMpeworCQkJdmFyIGQxID0gRGF0ZS5wYXJzZShlbGVtZW50LmdldCgndmFsdWUnKSk7CisJCQl2YXIgZDIgPSBEYXRlLnBhcnNlKGRvY3VtZW50LmlkKHByb3BzLnNhbWVNb250aEFzKSAmJiBkb2N1bWVudC5pZChwcm9wcy5zYW1lTW9udGhBcykuZ2V0KCd2YWx1ZScpKTsKKwkJCXJldHVybiBkMSAmJiBkMiA/IGQxLmZvcm1hdCgnJUInKSA9PSBkMi5mb3JtYXQoJyVCJykgOiB0cnVlOworCQl9CisJfV0sCisKKworCVsndmFsaWRhdGUtY2MtbnVtJywgeworCQllcnJvck1zZzogZnVuY3Rpb24oZWxlbWVudCl7CisJCQl2YXIgY2NOdW0gPSBlbGVtZW50LmdldCgndmFsdWUnKS5yZXBsYWNlKC9bXjAtOV0vZywgJycpOworCQkJcmV0dXJuIEZvcm0uVmFsaWRhdG9yLmdldE1zZygnY3JlZGl0Y2FyZCcpLnN1YnN0aXR1dGUoe2xlbmd0aDogY2NOdW0ubGVuZ3RofSk7CisJCX0sCisJCXRlc3Q6IGZ1bmN0aW9uKGVsZW1lbnQpeworCQkJLy8gcmVxdWlyZWQgaXMgYSBkaWZmZXJlbnQgdGVzdAorCQkJaWYgKEZvcm0uVmFsaWRhdG9yLmdldFZhbGlkYXRvcignSXNFbXB0eScpLnRlc3QoZWxlbWVudCkpIHJldHVybiB0cnVlOworCisJCQkvLyBDbGVhbiBudW1iZXIgdmFsdWUKKwkJCXZhciBjY051bSA9IGVsZW1lbnQuZ2V0KCd2YWx1ZScpOworCQkJY2NOdW0gPSBjY051bS5yZXBsYWNlKC9bXjAtOV0vZywgJycpOworCisJCQl2YXIgdmFsaWRUeXBlID0gZmFsc2U7CisKKwkJCWlmIChjY051bS50ZXN0KC9eNFswLTldezEyfShbMC05XXszfSk/JC8pKSB2YWxpZFR5cGUgPSAnVmlzYSc7CisJCQllbHNlIGlmIChjY051bS50ZXN0KC9eNVsxLTVdKFswLTldezE0fSkkLykpIHZhbGlkVHlwZSA9ICdNYXN0ZXIgQ2FyZCc7CisJCQllbHNlIGlmIChjY051bS50ZXN0KC9eM1s0N11bMC05XXsxM30kLykpIHZhbGlkVHlwZSA9ICdBbWVyaWNhbiBFeHByZXNzJzsKKwkJCWVsc2UgaWYgKGNjTnVtLnRlc3QoL142KD86MDExfDVbMC05XXsyfSlbMC05XXsxMn0kLykpIHZhbGlkVHlwZSA9ICdEaXNjb3Zlcic7CisJCQllbHNlIGlmIChjY051bS50ZXN0KC9eMyg/OjBbMC01XXxbNjhdWzAtOV0pWzAtOV17MTF9JC8pKSB2YWxpZFR5cGUgPSAnRGluZXJzIENsdWInOworCisJCQlpZiAodmFsaWRUeXBlKXsKKwkJCQl2YXIgc3VtID0gMDsKKwkJCQl2YXIgY3VyID0gMDsKKworCQkJCWZvciAodmFyIGk9Y2NOdW0ubGVuZ3RoLTE7IGk+PTA7IC0taSl7CisJCQkJCWN1ciA9IGNjTnVtLmNoYXJBdChpKS50b0ludCgpOworCQkJCQlpZiAoY3VyID09IDApIGNvbnRpbnVlOworCisJCQkJCWlmICgoY2NOdW0ubGVuZ3RoLWkpICUgMiA9PSAwKSBjdXIgKz0gY3VyOworCQkJCQlpZiAoY3VyID4gOSl7CisJCQkJCQljdXIgPSBjdXIudG9TdHJpbmcoKS5jaGFyQXQoMCkudG9JbnQoKSArIGN1ci50b1N0cmluZygpLmNoYXJBdCgxKS50b0ludCgpOworCQkJCQl9CisKKwkJCQkJc3VtICs9IGN1cjsKKwkJCQl9CisJCQkJaWYgKChzdW0gJSAxMCkgPT0gMCkgcmV0dXJuIHRydWU7CisJCQl9CisKKwkJCXZhciBjaHVua3MgPSAnJzsKKwkJCXdoaWxlIChjY051bSAhPSAnJyl7CisJCQkJY2h1bmtzICs9ICcgJyArIGNjTnVtLnN1YnN0cigwLDQpOworCQkJCWNjTnVtID0gY2NOdW0uc3Vic3RyKDQpOworCQkJfQorCisJCQllbGVtZW50LmdldFBhcmVudCgnZm9ybScpLnJldHJpZXZlKCd2YWxpZGF0b3InKS5pZ25vcmVGaWVsZChlbGVtZW50KTsKKwkJCWVsZW1lbnQuc2V0KCd2YWx1ZScsIGNodW5rcy5jbGVhbigpKTsKKwkJCWVsZW1lbnQuZ2V0UGFyZW50KCdmb3JtJykucmV0cmlldmUoJ3ZhbGlkYXRvcicpLmVuZm9yY2VGaWVsZChlbGVtZW50KTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX1dCisKK10pOworCit9KSgpOworCisvKgorLS0tCisKK3NjcmlwdDogRm9ybS5WYWxpZGF0b3IuSW5saW5lLmpzCisKK25hbWU6IEZvcm0uVmFsaWRhdG9yLklubGluZQorCitkZXNjcmlwdGlvbjogRXh0ZW5kcyBGb3JtLlZhbGlkYXRvciB0byBhZGQgaW5saW5lIG1lc3NhZ2VzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSBGb3JtLlZhbGlkYXRvcgorCitwcm92aWRlczogW0Zvcm0uVmFsaWRhdG9yLklubGluZV0KKworLi4uCisqLworCitGb3JtLlZhbGlkYXRvci5JbmxpbmUgPSBuZXcgQ2xhc3MoeworCisJRXh0ZW5kczogRm9ybS5WYWxpZGF0b3IsCisKKwlvcHRpb25zOiB7CisJCXNob3dFcnJvcjogZnVuY3Rpb24oZXJyb3JFbGVtZW50KXsKKwkJCWlmIChlcnJvckVsZW1lbnQucmV2ZWFsKSBlcnJvckVsZW1lbnQucmV2ZWFsKCk7CisJCQllbHNlIGVycm9yRWxlbWVudC5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpOworCQl9LAorCQloaWRlRXJyb3I6IGZ1bmN0aW9uKGVycm9yRWxlbWVudCl7CisJCQlpZiAoZXJyb3JFbGVtZW50LmRpc3NvbHZlKSBlcnJvckVsZW1lbnQuZGlzc29sdmUoKTsKKwkJCWVsc2UgZXJyb3JFbGVtZW50LnNldFN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTsKKwkJfSwKKwkJc2Nyb2xsVG9FcnJvcnNPblN1Ym1pdDogdHJ1ZSwKKwkJc2Nyb2xsVG9FcnJvcnNPbkJsdXI6IGZhbHNlLAorCQlzY3JvbGxUb0Vycm9yc09uQ2hhbmdlOiBmYWxzZSwKKwkJc2Nyb2xsRnhPcHRpb25zOiB7CisJCQl0cmFuc2l0aW9uOiAncXVhZDpvdXQnLAorCQkJb2Zmc2V0OiB7CisJCQkJeTogLTIwCisJCQl9CisJCX0KKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24oZm9ybSwgb3B0aW9ucyl7CisJCXRoaXMucGFyZW50KGZvcm0sIG9wdGlvbnMpOworCQl0aGlzLmFkZEV2ZW50KCdvbkVsZW1lbnRWYWxpZGF0ZScsIGZ1bmN0aW9uKGlzVmFsaWQsIGZpZWxkLCBjbGFzc05hbWUsIHdhcm4peworCQkJdmFyIHZhbGlkYXRvciA9IHRoaXMuZ2V0VmFsaWRhdG9yKGNsYXNzTmFtZSk7CisJCQlpZiAoIWlzVmFsaWQgJiYgdmFsaWRhdG9yLmdldEVycm9yKGZpZWxkKSl7CisJCQkJaWYgKHdhcm4pIGZpZWxkLmFkZENsYXNzKCd3YXJuaW5nJyk7CisJCQkJdmFyIGFkdmljZSA9IHRoaXMubWFrZUFkdmljZShjbGFzc05hbWUsIGZpZWxkLCB2YWxpZGF0b3IuZ2V0RXJyb3IoZmllbGQpLCB3YXJuKTsKKwkJCQl0aGlzLmluc2VydEFkdmljZShhZHZpY2UsIGZpZWxkKTsKKwkJCQl0aGlzLnNob3dBZHZpY2UoY2xhc3NOYW1lLCBmaWVsZCk7CisJCQl9IGVsc2UgeworCQkJCXRoaXMuaGlkZUFkdmljZShjbGFzc05hbWUsIGZpZWxkKTsKKwkJCX0KKwkJfSk7CisJfSwKKworCW1ha2VBZHZpY2U6IGZ1bmN0aW9uKGNsYXNzTmFtZSwgZmllbGQsIGVycm9yLCB3YXJuKXsKKwkJdmFyIGVycm9yTXNnID0gKHdhcm4pID8gdGhpcy53YXJuaW5nUHJlZml4IDogdGhpcy5lcnJvclByZWZpeDsKKwkJZXJyb3JNc2cgKz0gKHRoaXMub3B0aW9ucy51c2VUaXRsZXMpID8gZmllbGQudGl0bGUgfHwgZXJyb3I6ZXJyb3I7CisJCXZhciBjc3NDbGFzcyA9ICh3YXJuKSA/ICd3YXJuaW5nLWFkdmljZScgOiAndmFsaWRhdGlvbi1hZHZpY2UnOworCQl2YXIgYWR2aWNlID0gdGhpcy5nZXRBZHZpY2UoY2xhc3NOYW1lLCBmaWVsZCk7CisJCWlmIChhZHZpY2UpeworCQkJYWR2aWNlID0gYWR2aWNlLnNldCgnaHRtbCcsIGVycm9yTXNnKTsKKwkJfSBlbHNlIHsKKwkJCWFkdmljZSA9IG5ldyBFbGVtZW50KCdkaXYnLCB7CisJCQkJaHRtbDogZXJyb3JNc2csCisJCQkJc3R5bGVzOiB7IGRpc3BsYXk6ICdub25lJyB9LAorCQkJCWlkOiAnYWR2aWNlLScgKyBjbGFzc05hbWUuc3BsaXQoJzonKVswXSArICctJyArIHRoaXMuZ2V0RmllbGRJZChmaWVsZCkKKwkJCX0pLmFkZENsYXNzKGNzc0NsYXNzKTsKKwkJfQorCQlmaWVsZC5zdG9yZSgnJG1vbzphZHZpY2UtJyArIGNsYXNzTmFtZSwgYWR2aWNlKTsKKwkJcmV0dXJuIGFkdmljZTsKKwl9LAorCisJZ2V0RmllbGRJZCA6IGZ1bmN0aW9uKGZpZWxkKXsKKwkJcmV0dXJuIGZpZWxkLmlkID8gZmllbGQuaWQgOiBmaWVsZC5pZCA9ICdpbnB1dF8nICsgZmllbGQubmFtZTsKKwl9LAorCisJc2hvd0FkdmljZTogZnVuY3Rpb24oY2xhc3NOYW1lLCBmaWVsZCl7CisJCXZhciBhZHZpY2UgPSB0aGlzLmdldEFkdmljZShjbGFzc05hbWUsIGZpZWxkKTsKKwkJaWYgKAorCQkJYWR2aWNlICYmCisJCQkhZmllbGQucmV0cmlldmUoJyRtb286JyArIHRoaXMuZ2V0UHJvcE5hbWUoY2xhc3NOYW1lKSkgJiYKKwkJCSgKKwkJCQlhZHZpY2UuZ2V0U3R5bGUoJ2Rpc3BsYXknKSA9PSAnbm9uZScgfHwKKwkJCQlhZHZpY2UuZ2V0U3R5bGUoJ3Zpc2liaWxpdHknKSA9PSAnaGlkZGVuJyB8fAorCQkJCWFkdmljZS5nZXRTdHlsZSgnb3BhY2l0eScpID09IDAKKwkJCSkKKwkJKXsKKwkJCWZpZWxkLnN0b3JlKCckbW9vOicgKyB0aGlzLmdldFByb3BOYW1lKGNsYXNzTmFtZSksIHRydWUpOworCQkJdGhpcy5vcHRpb25zLnNob3dFcnJvcihhZHZpY2UpOworCQkJdGhpcy5maXJlRXZlbnQoJ3Nob3dBZHZpY2UnLCBbZmllbGQsIGFkdmljZSwgY2xhc3NOYW1lXSk7CisJCX0KKwl9LAorCisJaGlkZUFkdmljZTogZnVuY3Rpb24oY2xhc3NOYW1lLCBmaWVsZCl7CisJCXZhciBhZHZpY2UgPSB0aGlzLmdldEFkdmljZShjbGFzc05hbWUsIGZpZWxkKTsKKwkJaWYgKGFkdmljZSAmJiBmaWVsZC5yZXRyaWV2ZSgnJG1vbzonICsgdGhpcy5nZXRQcm9wTmFtZShjbGFzc05hbWUpKSl7CisJCQlmaWVsZC5zdG9yZSgnJG1vbzonICsgdGhpcy5nZXRQcm9wTmFtZShjbGFzc05hbWUpLCBmYWxzZSk7CisJCQl0aGlzLm9wdGlvbnMuaGlkZUVycm9yKGFkdmljZSk7CisJCQl0aGlzLmZpcmVFdmVudCgnaGlkZUFkdmljZScsIFtmaWVsZCwgYWR2aWNlLCBjbGFzc05hbWVdKTsKKwkJfQorCX0sCisKKwlnZXRQcm9wTmFtZTogZnVuY3Rpb24oY2xhc3NOYW1lKXsKKwkJcmV0dXJuICdhZHZpY2UnICsgY2xhc3NOYW1lOworCX0sCisKKwlyZXNldEZpZWxkOiBmdW5jdGlvbihmaWVsZCl7CisJCWZpZWxkID0gZG9jdW1lbnQuaWQoZmllbGQpOworCQlpZiAoIWZpZWxkKSByZXR1cm4gdGhpczsKKwkJdGhpcy5wYXJlbnQoZmllbGQpOworCQlmaWVsZC5nZXQoJ3ZhbGlkYXRvcnMnKS5lYWNoKGZ1bmN0aW9uKGNsYXNzTmFtZSl7CisJCQl0aGlzLmhpZGVBZHZpY2UoY2xhc3NOYW1lLCBmaWVsZCk7CisJCX0sIHRoaXMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZ2V0QWxsQWR2aWNlTWVzc2FnZXM6IGZ1bmN0aW9uKGZpZWxkLCBmb3JjZSl7CisJCXZhciBhZHZpY2UgPSBbXTsKKwkJaWYgKGZpZWxkLmhhc0NsYXNzKCdpZ25vcmVWYWxpZGF0aW9uJykgJiYgIWZvcmNlKSByZXR1cm4gYWR2aWNlOworCQl2YXIgdmFsaWRhdG9ycyA9IGZpZWxkLmdldCgndmFsaWRhdG9ycycpLnNvbWUoZnVuY3Rpb24oY24peworCQkJdmFyIHdhcm5lciA9IGNuLnRlc3QoJ153YXJuLScpIHx8IGZpZWxkLmhhc0NsYXNzKCd3YXJuT25seScpOworCQkJaWYgKHdhcm5lcikgY24gPSBjbi5yZXBsYWNlKC9ed2Fybi0vLCAnJyk7CisJCQl2YXIgdmFsaWRhdG9yID0gdGhpcy5nZXRWYWxpZGF0b3IoY24pOworCQkJaWYgKCF2YWxpZGF0b3IpIHJldHVybjsKKwkJCWFkdmljZS5wdXNoKHsKKwkJCQltZXNzYWdlOiB2YWxpZGF0b3IuZ2V0RXJyb3IoZmllbGQpLAorCQkJCXdhcm5Pbmx5OiB3YXJuZXIsCisJCQkJcGFzc2VkOiB2YWxpZGF0b3IudGVzdCgpLAorCQkJCXZhbGlkYXRvcjogdmFsaWRhdG9yCisJCQl9KTsKKwkJfSwgdGhpcyk7CisJCXJldHVybiBhZHZpY2U7CisJfSwKKworCWdldEFkdmljZTogZnVuY3Rpb24oY2xhc3NOYW1lLCBmaWVsZCl7CisJCXJldHVybiBmaWVsZC5yZXRyaWV2ZSgnJG1vbzphZHZpY2UtJyArIGNsYXNzTmFtZSk7CisJfSwKKworCWluc2VydEFkdmljZTogZnVuY3Rpb24oYWR2aWNlLCBmaWVsZCl7CisJCS8vQ2hlY2sgZm9yIGVycm9yIHBvc2l0aW9uIHByb3AKKwkJdmFyIHByb3BzID0gZmllbGQuZ2V0KCd2YWxpZGF0b3JQcm9wcycpOworCQkvL0J1aWxkIGFkdmljZQorCQlpZiAoIXByb3BzLm1zZ1BvcyB8fCAhZG9jdW1lbnQuaWQocHJvcHMubXNnUG9zKSl7CisJCQlpZiAoZmllbGQudHlwZSAmJiBmaWVsZC50eXBlLnRvTG93ZXJDYXNlKCkgPT0gJ3JhZGlvJykgZmllbGQuZ2V0UGFyZW50KCkuYWRvcHQoYWR2aWNlKTsKKwkJCWVsc2UgYWR2aWNlLmluamVjdChkb2N1bWVudC5pZChmaWVsZCksICdhZnRlcicpOworCQl9IGVsc2UgeworCQkJZG9jdW1lbnQuaWQocHJvcHMubXNnUG9zKS5ncmFiKGFkdmljZSk7CisJCX0KKwl9LAorCisJdmFsaWRhdGVGaWVsZDogZnVuY3Rpb24oZmllbGQsIGZvcmNlLCBzY3JvbGwpeworCQl2YXIgcmVzdWx0ID0gdGhpcy5wYXJlbnQoZmllbGQsIGZvcmNlKTsKKwkJaWYgKCgodGhpcy5vcHRpb25zLnNjcm9sbFRvRXJyb3JzT25TdWJtaXQgJiYgc2Nyb2xsID09IG51bGwpIHx8IHNjcm9sbCkgJiYgIXJlc3VsdCl7CisJCQl2YXIgZmFpbGVkID0gZG9jdW1lbnQuaWQodGhpcykuZ2V0RWxlbWVudCgnLnZhbGlkYXRpb24tZmFpbGVkJyk7CisJCQl2YXIgcGFyID0gZG9jdW1lbnQuaWQodGhpcykuZ2V0UGFyZW50KCk7CisJCQl3aGlsZSAocGFyICE9IGRvY3VtZW50LmJvZHkgJiYgcGFyLmdldFNjcm9sbFNpemUoKS55ID09IHBhci5nZXRTaXplKCkueSl7CisJCQkJcGFyID0gcGFyLmdldFBhcmVudCgpOworCQkJfQorCQkJdmFyIGZ4ID0gcGFyLnJldHJpZXZlKCckbW9vOmZ2U2Nyb2xsZXInKTsKKwkJCWlmICghZnggJiYgd2luZG93LkZ4ICYmIEZ4LlNjcm9sbCl7CisJCQkJZnggPSBuZXcgRnguU2Nyb2xsKHBhciwgdGhpcy5vcHRpb25zLnNjcm9sbEZ4T3B0aW9ucyk7CisJCQkJcGFyLnN0b3JlKCckbW9vOmZ2U2Nyb2xsZXInLCBmeCk7CisJCQl9CisJCQlpZiAoZmFpbGVkKXsKKwkJCQlpZiAoZngpIGZ4LnRvRWxlbWVudChmYWlsZWQpOworCQkJCWVsc2UgcGFyLnNjcm9sbFRvKHBhci5nZXRTY3JvbGwoKS54LCBmYWlsZWQuZ2V0UG9zaXRpb24ocGFyKS55IC0gMjApOworCQkJfQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfSwKKworCXdhdGNoRmllbGRzOiBmdW5jdGlvbihmaWVsZHMpeworCQlmaWVsZHMuZWFjaChmdW5jdGlvbihlbCl7CisJCQlpZiAodGhpcy5vcHRpb25zLmV2YWx1YXRlRmllbGRzT25CbHVyKXsKKwkJCQllbC5hZGRFdmVudCgnYmx1cicsIHRoaXMudmFsaWRhdGlvbk1vbml0b3IucGFzcyhbZWwsIGZhbHNlLCB0aGlzLm9wdGlvbnMuc2Nyb2xsVG9FcnJvcnNPbkJsdXJdLCB0aGlzKSk7CisJCQl9CisJCQlpZiAodGhpcy5vcHRpb25zLmV2YWx1YXRlRmllbGRzT25DaGFuZ2UpeworCQkJCWVsLmFkZEV2ZW50KCdjaGFuZ2UnLCB0aGlzLnZhbGlkYXRpb25Nb25pdG9yLnBhc3MoW2VsLCB0cnVlLCB0aGlzLm9wdGlvbnMuc2Nyb2xsVG9FcnJvcnNPbkNoYW5nZV0sIHRoaXMpKTsKKwkJCX0KKwkJfSwgdGhpcyk7CisJfQorCit9KTsKKworLyoKKy0tLQorCitzY3JpcHQ6IE92ZXJUZXh0LmpzCisKK25hbWU6IE92ZXJUZXh0CisKK2Rlc2NyaXB0aW9uOiBTaG93cyB0ZXh0IG92ZXIgYW4gaW5wdXQgdGhhdCBkaXNhcHBlYXJzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIGludG8gaXQuIFRoZSB0ZXh0IHJlbWFpbnMgaGlkZGVuIGlmIHRoZSB1c2VyIGFkZHMgYSB2YWx1ZS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9PcHRpb25zCisgIC0gQ29yZS9FdmVudHMKKyAgLSBDb3JlL0VsZW1lbnQuRXZlbnQKKyAgLSBDbGFzcy5CaW5kcworICAtIENsYXNzLk9jY2x1ZGUKKyAgLSBFbGVtZW50LlBvc2l0aW9uCisgIC0gRWxlbWVudC5TaG9ydGN1dHMKKworcHJvdmlkZXM6IFtPdmVyVGV4dF0KKworLi4uCisqLworKGZ1bmN0aW9uKCl7CisKK3ZhciBPdmVyVGV4dCA9IHRoaXMuT3ZlclRleHQgPSBuZXcgQ2xhc3MoeworCisJSW1wbGVtZW50czogW09wdGlvbnMsIEV2ZW50cywgQ2xhc3MuT2NjbHVkZV0sCisKKwlCaW5kczogWydyZXBvc2l0aW9uJywgJ2Fzc2VydCcsICdmb2N1cycsICdoaWRlJ10sCisKKwlvcHRpb25zOiB7LyoKKwkJdGV4dE92ZXJyaWRlOiBudWxsLAorCQlvbkZvY3VzOiBmdW5jdGlvbigpe30sCisJCW9uVGV4dEhpZGU6IGZ1bmN0aW9uKHRleHRFbCwgaW5wdXRFbCl7fSwKKwkJb25UZXh0U2hvdzogZnVuY3Rpb24odGV4dEVsLCBpbnB1dEVsKXt9LCAqLworCQllbGVtZW50OiAnbGFiZWwnLAorCQlsYWJlbENsYXNzOiAnb3ZlclR4dExhYmVsJywKKwkJcG9zaXRpb25PcHRpb25zOiB7CisJCQlwb3NpdGlvbjogJ3VwcGVyTGVmdCcsCisJCQllZGdlOiAndXBwZXJMZWZ0JywKKwkJCW9mZnNldDogeworCQkJCXg6IDQsCisJCQkJeTogMgorCQkJfQorCQl9LAorCQlwb2xsOiBmYWxzZSwKKwkJcG9sbEludGVydmFsOiAyNTAsCisJCXdyYXA6IGZhbHNlCisJfSwKKworCXByb3BlcnR5OiAnT3ZlclRleHQnLAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucyl7CisJCWVsZW1lbnQgPSB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5pZChlbGVtZW50KTsKKworCQlpZiAodGhpcy5vY2NsdWRlKCkpIHJldHVybiB0aGlzLm9jY2x1ZGVkOworCQl0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7CisKKwkJdGhpcy5hdHRhY2goZWxlbWVudCk7CisJCU92ZXJUZXh0Lmluc3RhbmNlcy5wdXNoKHRoaXMpOworCisJCWlmICh0aGlzLm9wdGlvbnMucG9sbCkgdGhpcy5wb2xsKCk7CisJfSwKKworCXRvRWxlbWVudDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuZWxlbWVudDsKKwl9LAorCisJYXR0YWNoOiBmdW5jdGlvbigpeworCQl2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVudCwKKwkJCW9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsCisJCQl2YWx1ZSA9IG9wdGlvbnMudGV4dE92ZXJyaWRlIHx8IGVsZW1lbnQuZ2V0KCdhbHQnKSB8fCBlbGVtZW50LmdldCgndGl0bGUnKTsKKworCQlpZiAoIXZhbHVlKSByZXR1cm4gdGhpczsKKworCQl2YXIgdGV4dCA9IHRoaXMudGV4dCA9IG5ldyBFbGVtZW50KG9wdGlvbnMuZWxlbWVudCwgeworCQkJJ2NsYXNzJzogb3B0aW9ucy5sYWJlbENsYXNzLAorCQkJc3R5bGVzOiB7CisJCQkJbGluZUhlaWdodDogJ25vcm1hbCcsCisJCQkJcG9zaXRpb246ICdhYnNvbHV0ZScsCisJCQkJY3Vyc29yOiAndGV4dCcKKwkJCX0sCisJCQlodG1sOiB2YWx1ZSwKKwkJCWV2ZW50czogeworCQkJCWNsaWNrOiB0aGlzLmhpZGUucGFzcyhvcHRpb25zLmVsZW1lbnQgPT0gJ2xhYmVsJywgdGhpcykKKwkJCX0KKwkJfSkuaW5qZWN0KGVsZW1lbnQsICdhZnRlcicpOworCisJCWlmIChvcHRpb25zLmVsZW1lbnQgPT0gJ2xhYmVsJyl7CisJCQlpZiAoIWVsZW1lbnQuZ2V0KCdpZCcpKSBlbGVtZW50LnNldCgnaWQnLCAnaW5wdXRfJyArIFN0cmluZy51bmlxdWVJRCgpKTsKKwkJCXRleHQuc2V0KCdmb3InLCBlbGVtZW50LmdldCgnaWQnKSk7CisJCX0KKworCQlpZiAob3B0aW9ucy53cmFwKXsKKwkJCXRoaXMudGV4dEhvbGRlciA9IG5ldyBFbGVtZW50KCdkaXYub3ZlclR4dFdyYXBwZXInLCB7CisJCQkJc3R5bGVzOiB7CisJCQkJCWxpbmVIZWlnaHQ6ICdub3JtYWwnLAorCQkJCQlwb3NpdGlvbjogJ3JlbGF0aXZlJworCQkJCX0KKwkJCX0pLmdyYWIodGV4dCkuaW5qZWN0KGVsZW1lbnQsICdiZWZvcmUnKTsKKwkJfQorCisJCXJldHVybiB0aGlzLmVuYWJsZSgpOworCX0sCisKKwlkZXN0cm95OiBmdW5jdGlvbigpeworCQl0aGlzLmVsZW1lbnQuZWxpbWluYXRlKHRoaXMucHJvcGVydHkpOyAvLyBDbGFzcy5PY2NsdWRlIHN0b3JhZ2UKKwkJdGhpcy5kaXNhYmxlKCk7CisJCWlmICh0aGlzLnRleHQpIHRoaXMudGV4dC5kZXN0cm95KCk7CisJCWlmICh0aGlzLnRleHRIb2xkZXIpIHRoaXMudGV4dEhvbGRlci5kZXN0cm95KCk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlkaXNhYmxlOiBmdW5jdGlvbigpeworCQl0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRzKHsKKwkJCWZvY3VzOiB0aGlzLmZvY3VzLAorCQkJYmx1cjogdGhpcy5hc3NlcnQsCisJCQljaGFuZ2U6IHRoaXMuYXNzZXJ0CisJCX0pOworCQl3aW5kb3cucmVtb3ZlRXZlbnQoJ3Jlc2l6ZScsIHRoaXMucmVwb3NpdGlvbik7CisJCXRoaXMuaGlkZSh0cnVlLCB0cnVlKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWVuYWJsZTogZnVuY3Rpb24oKXsKKwkJdGhpcy5lbGVtZW50LmFkZEV2ZW50cyh7CisJCQlmb2N1czogdGhpcy5mb2N1cywKKwkJCWJsdXI6IHRoaXMuYXNzZXJ0LAorCQkJY2hhbmdlOiB0aGlzLmFzc2VydAorCQl9KTsKKwkJd2luZG93LmFkZEV2ZW50KCdyZXNpemUnLCB0aGlzLnJlcG9zaXRpb24pOworCQl0aGlzLnJlcG9zaXRpb24oKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXdyYXA6IGZ1bmN0aW9uKCl7CisJCWlmICh0aGlzLm9wdGlvbnMuZWxlbWVudCA9PSAnbGFiZWwnKXsKKwkJCWlmICghdGhpcy5lbGVtZW50LmdldCgnaWQnKSkgdGhpcy5lbGVtZW50LnNldCgnaWQnLCAnaW5wdXRfJyArIFN0cmluZy51bmlxdWVJRCgpKTsKKwkJCXRoaXMudGV4dC5zZXQoJ2ZvcicsIHRoaXMuZWxlbWVudC5nZXQoJ2lkJykpOworCQl9CisJfSwKKworCXN0YXJ0UG9sbGluZzogZnVuY3Rpb24oKXsKKwkJdGhpcy5wb2xsaW5nUGF1c2VkID0gZmFsc2U7CisJCXJldHVybiB0aGlzLnBvbGwoKTsKKwl9LAorCisJcG9sbDogZnVuY3Rpb24oc3RvcCl7CisJCS8vc3RhcnQgaW1tZWRpYXRlbHkKKwkJLy9wYXVzZSBvbiBmb2N1cworCQkvL3Jlc3VtZW9uIGJsdXIKKwkJaWYgKHRoaXMucG9sbGVyICYmICFzdG9wKSByZXR1cm4gdGhpczsKKwkJaWYgKHN0b3ApeworCQkJY2xlYXJJbnRlcnZhbCh0aGlzLnBvbGxlcik7CisJCX0gZWxzZSB7CisJCQl0aGlzLnBvbGxlciA9IChmdW5jdGlvbigpeworCQkJCWlmICghdGhpcy5wb2xsaW5nUGF1c2VkKSB0aGlzLmFzc2VydCh0cnVlKTsKKwkJCX0pLnBlcmlvZGljYWwodGhpcy5vcHRpb25zLnBvbGxJbnRlcnZhbCwgdGhpcyk7CisJCX0KKworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJc3RvcFBvbGxpbmc6IGZ1bmN0aW9uKCl7CisJCXRoaXMucG9sbGluZ1BhdXNlZCA9IHRydWU7CisJCXJldHVybiB0aGlzLnBvbGwodHJ1ZSk7CisJfSwKKworCWZvY3VzOiBmdW5jdGlvbigpeworCQlpZiAodGhpcy50ZXh0ICYmICghdGhpcy50ZXh0LmlzRGlzcGxheWVkKCkgfHwgdGhpcy5lbGVtZW50LmdldCgnZGlzYWJsZWQnKSkpIHJldHVybiB0aGlzOworCQlyZXR1cm4gdGhpcy5oaWRlKCk7CisJfSwKKworCWhpZGU6IGZ1bmN0aW9uKHN1cHByZXNzRm9jdXMsIGZvcmNlKXsKKwkJaWYgKHRoaXMudGV4dCAmJiAodGhpcy50ZXh0LmlzRGlzcGxheWVkKCkgJiYgKCF0aGlzLmVsZW1lbnQuZ2V0KCdkaXNhYmxlZCcpIHx8IGZvcmNlKSkpeworCQkJdGhpcy50ZXh0LmhpZGUoKTsKKwkJCXRoaXMuZmlyZUV2ZW50KCd0ZXh0SGlkZScsIFt0aGlzLnRleHQsIHRoaXMuZWxlbWVudF0pOworCQkJdGhpcy5wb2xsaW5nUGF1c2VkID0gdHJ1ZTsKKwkJCWlmICghc3VwcHJlc3NGb2N1cyl7CisJCQkJdHJ5IHsKKwkJCQkJdGhpcy5lbGVtZW50LmZpcmVFdmVudCgnZm9jdXMnKTsKKwkJCQkJdGhpcy5lbGVtZW50LmZvY3VzKCk7CisJCQkJfSBjYXRjaCAoZSl7fSAvL0lFIGJhcmZzIGlmIHlvdSBjYWxsIGZvY3VzIG9uIGhpZGRlbiBlbGVtZW50cworCQkJfQorCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwlzaG93OiBmdW5jdGlvbigpeworCQlpZiAoZG9jdW1lbnQuaWQodGhpcy50ZXh0KSAmJiAhdGhpcy50ZXh0LmlzRGlzcGxheWVkKCkpeworCQkJdGhpcy50ZXh0LnNob3coKTsKKwkJCXRoaXMucmVwb3NpdGlvbigpOworCQkJdGhpcy5maXJlRXZlbnQoJ3RleHRTaG93JywgW3RoaXMudGV4dCwgdGhpcy5lbGVtZW50XSk7CisJCQl0aGlzLnBvbGxpbmdQYXVzZWQgPSBmYWxzZTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJdGVzdDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuICF0aGlzLmVsZW1lbnQuZ2V0KCd2YWx1ZScpOworCX0sCisKKwlhc3NlcnQ6IGZ1bmN0aW9uKHN1cHByZXNzRm9jdXMpeworCQlyZXR1cm4gdGhpc1t0aGlzLnRlc3QoKSA/ICdzaG93JyA6ICdoaWRlJ10oc3VwcHJlc3NGb2N1cyk7CisJfSwKKworCXJlcG9zaXRpb246IGZ1bmN0aW9uKCl7CisJCXRoaXMuYXNzZXJ0KHRydWUpOworCQlpZiAoIXRoaXMuZWxlbWVudC5pc1Zpc2libGUoKSkgcmV0dXJuIHRoaXMuc3RvcFBvbGxpbmcoKS5oaWRlKCk7CisJCWlmICh0aGlzLnRleHQgJiYgdGhpcy50ZXN0KCkpeworCQkJdGhpcy50ZXh0LnBvc2l0aW9uKE9iamVjdC5tZXJnZSh0aGlzLm9wdGlvbnMucG9zaXRpb25PcHRpb25zLCB7CisJCQkJcmVsYXRpdmVUbzogdGhpcy5lbGVtZW50CisJCQl9KSk7CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKworfSkoKTsKKworT3ZlclRleHQuaW5zdGFuY2VzID0gW107CisKK09iamVjdC5hcHBlbmQoT3ZlclRleHQsIHsKKworCWVhY2g6IGZ1bmN0aW9uKGZuKXsKKwkJcmV0dXJuIE92ZXJUZXh0Lmluc3RhbmNlcy5lYWNoKGZ1bmN0aW9uKG90LCBpKXsKKwkJCWlmIChvdC5lbGVtZW50ICYmIG90LnRleHQpIGZuLmNhbGwoT3ZlclRleHQsIG90LCBpKTsKKwkJfSk7CisJfSwKKworCXVwZGF0ZTogZnVuY3Rpb24oKXsKKworCQlyZXR1cm4gT3ZlclRleHQuZWFjaChmdW5jdGlvbihvdCl7CisJCQlyZXR1cm4gb3QucmVwb3NpdGlvbigpOworCQl9KTsKKworCX0sCisKKwloaWRlQWxsOiBmdW5jdGlvbigpeworCisJCXJldHVybiBPdmVyVGV4dC5lYWNoKGZ1bmN0aW9uKG90KXsKKwkJCXJldHVybiBvdC5oaWRlKHRydWUsIHRydWUpOworCQl9KTsKKworCX0sCisKKwlzaG93QWxsOiBmdW5jdGlvbigpeworCQlyZXR1cm4gT3ZlclRleHQuZWFjaChmdW5jdGlvbihvdCl7CisJCQlyZXR1cm4gb3Quc2hvdygpOworCQl9KTsKKwl9CisKK30pOworCisKKy8qCistLS0KKworc2NyaXB0OiBGeC5FbGVtZW50cy5qcworCituYW1lOiBGeC5FbGVtZW50cworCitkZXNjcmlwdGlvbjogRWZmZWN0IHRvIGNoYW5nZSBhbnkgbnVtYmVyIG9mIENTUyBwcm9wZXJ0aWVzIG9mIGFueSBudW1iZXIgb2YgRWxlbWVudHMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gVmFsZXJpbyBQcm9pZXR0aQorCityZXF1aXJlczoKKyAgLSBDb3JlL0Z4LkNTUworICAtIE1vb1Rvb2xzLk1vcmUKKworcHJvdmlkZXM6IFtGeC5FbGVtZW50c10KKworLi4uCisqLworCitGeC5FbGVtZW50cyA9IG5ldyBDbGFzcyh7CisKKwlFeHRlbmRzOiBGeC5DU1MsCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50cywgb3B0aW9ucyl7CisJCXRoaXMuZWxlbWVudHMgPSB0aGlzLnN1YmplY3QgPSAkJChlbGVtZW50cyk7CisJCXRoaXMucGFyZW50KG9wdGlvbnMpOworCX0sCisKKwljb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpeworCQl2YXIgbm93ID0ge307CisKKwkJZm9yICh2YXIgaSBpbiBmcm9tKXsKKwkJCXZhciBpRnJvbSA9IGZyb21baV0sIGlUbyA9IHRvW2ldLCBpTm93ID0gbm93W2ldID0ge307CisJCQlmb3IgKHZhciBwIGluIGlGcm9tKSBpTm93W3BdID0gdGhpcy5wYXJlbnQoaUZyb21bcF0sIGlUb1twXSwgZGVsdGEpOworCQl9CisKKwkJcmV0dXJuIG5vdzsKKwl9LAorCisJc2V0OiBmdW5jdGlvbihub3cpeworCQlmb3IgKHZhciBpIGluIG5vdyl7CisJCQlpZiAoIXRoaXMuZWxlbWVudHNbaV0pIGNvbnRpbnVlOworCisJCQl2YXIgaU5vdyA9IG5vd1tpXTsKKwkJCWZvciAodmFyIHAgaW4gaU5vdykgdGhpcy5yZW5kZXIodGhpcy5lbGVtZW50c1tpXSwgcCwgaU5vd1twXSwgdGhpcy5vcHRpb25zLnVuaXQpOworCQl9CisKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXN0YXJ0OiBmdW5jdGlvbihvYmopeworCQlpZiAoIXRoaXMuY2hlY2sob2JqKSkgcmV0dXJuIHRoaXM7CisJCXZhciBmcm9tID0ge30sIHRvID0ge307CisKKwkJZm9yICh2YXIgaSBpbiBvYmopeworCQkJaWYgKCF0aGlzLmVsZW1lbnRzW2ldKSBjb250aW51ZTsKKworCQkJdmFyIGlQcm9wcyA9IG9ialtpXSwgaUZyb20gPSBmcm9tW2ldID0ge30sIGlUbyA9IHRvW2ldID0ge307CisKKwkJCWZvciAodmFyIHAgaW4gaVByb3BzKXsKKwkJCQl2YXIgcGFyc2VkID0gdGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudHNbaV0sIHAsIGlQcm9wc1twXSk7CisJCQkJaUZyb21bcF0gPSBwYXJzZWQuZnJvbTsKKwkJCQlpVG9bcF0gPSBwYXJzZWQudG87CisJCQl9CisJCX0KKworCQlyZXR1cm4gdGhpcy5wYXJlbnQoZnJvbSwgdG8pOworCX0KKworfSk7CisKKy8qCistLS0KKworc2NyaXB0OiBGeC5BY2NvcmRpb24uanMKKworbmFtZTogRnguQWNjb3JkaW9uCisKK2Rlc2NyaXB0aW9uOiBBbiBGeC5FbGVtZW50cyBleHRlbnNpb24gd2hpY2ggYWxsb3dzIHlvdSB0byBlYXNpbHkgY3JlYXRlIGFjY29yZGlvbiB0eXBlIGNvbnRyb2xzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFZhbGVyaW8gUHJvaWV0dGkKKworcmVxdWlyZXM6CisgIC0gQ29yZS9FbGVtZW50LkV2ZW50CisgIC0gRnguRWxlbWVudHMKKworcHJvdmlkZXM6IFtGeC5BY2NvcmRpb25dCisKKy4uLgorKi8KKworRnguQWNjb3JkaW9uID0gbmV3IENsYXNzKHsKKworCUV4dGVuZHM6IEZ4LkVsZW1lbnRzLAorCisJb3B0aW9uczogey8qCisJCW9uQWN0aXZlOiBmdW5jdGlvbih0b2dnbGVyLCBzZWN0aW9uKXt9LAorCQlvbkJhY2tncm91bmQ6IGZ1bmN0aW9uKHRvZ2dsZXIsIHNlY3Rpb24pe30sKi8KKwkJZml4ZWRIZWlnaHQ6IGZhbHNlLAorCQlmaXhlZFdpZHRoOiBmYWxzZSwKKwkJZGlzcGxheTogMCwKKwkJc2hvdzogZmFsc2UsCisJCWhlaWdodDogdHJ1ZSwKKwkJd2lkdGg6IGZhbHNlLAorCQlvcGFjaXR5OiB0cnVlLAorCQlhbHdheXNIaWRlOiBmYWxzZSwKKwkJdHJpZ2dlcjogJ2NsaWNrJywKKwkJaW5pdGlhbERpc3BsYXlGeDogdHJ1ZSwKKwkJcmVzZXRIZWlnaHQ6IHRydWUsCisJCWtlZXBPcGVuOiBmYWxzZQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbigpeworCQl2YXIgZGVmaW5lZCA9IGZ1bmN0aW9uKG9iail7CisJCQlyZXR1cm4gb2JqICE9IG51bGw7CisJCX07CisKKwkJdmFyIHBhcmFtcyA9IEFycmF5LmxpbmsoYXJndW1lbnRzLCB7CisJCQknY29udGFpbmVyJzogVHlwZS5pc0VsZW1lbnQsIC8vZGVwcmVjYXRlZAorCQkJJ29wdGlvbnMnOiBUeXBlLmlzT2JqZWN0LAorCQkJJ3RvZ2dsZXJzJzogZGVmaW5lZCwKKwkJCSdlbGVtZW50cyc6IGRlZmluZWQKKwkJfSk7CisJCXRoaXMucGFyZW50KHBhcmFtcy5lbGVtZW50cywgcGFyYW1zLm9wdGlvbnMpOworCisJCXZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zLAorCQkJdG9nZ2xlcnMgPSB0aGlzLnRvZ2dsZXJzID0gJCQocGFyYW1zLnRvZ2dsZXJzKTsKKworCQl0aGlzLnByZXZpb3VzID0gLTE7CisJCXRoaXMuaW50ZXJuYWxDaGFpbiA9IG5ldyBDaGFpbigpOworCisJCWlmIChvcHRpb25zLmFsd2F5c0hpZGUpIHRoaXMub3B0aW9ucy5saW5rID0gJ2NoYWluJzsKKworCQlpZiAob3B0aW9ucy5zaG93IHx8IHRoaXMub3B0aW9ucy5zaG93ID09PSAwKXsKKwkJCW9wdGlvbnMuZGlzcGxheSA9IGZhbHNlOworCQkJdGhpcy5wcmV2aW91cyA9IG9wdGlvbnMuc2hvdzsKKwkJfQorCisJCWlmIChvcHRpb25zLnN0YXJ0KXsKKwkJCW9wdGlvbnMuZGlzcGxheSA9IGZhbHNlOworCQkJb3B0aW9ucy5zaG93ID0gZmFsc2U7CisJCX0KKworCQl2YXIgZWZmZWN0cyA9IHRoaXMuZWZmZWN0cyA9IHt9OworCisJCWlmIChvcHRpb25zLm9wYWNpdHkpIGVmZmVjdHMub3BhY2l0eSA9ICdmdWxsT3BhY2l0eSc7CisJCWlmIChvcHRpb25zLndpZHRoKSBlZmZlY3RzLndpZHRoID0gb3B0aW9ucy5maXhlZFdpZHRoID8gJ2Z1bGxXaWR0aCcgOiAnb2Zmc2V0V2lkdGgnOworCQlpZiAob3B0aW9ucy5oZWlnaHQpIGVmZmVjdHMuaGVpZ2h0ID0gb3B0aW9ucy5maXhlZEhlaWdodCA/ICdmdWxsSGVpZ2h0JyA6ICdzY3JvbGxIZWlnaHQnOworCisJCWZvciAodmFyIGkgPSAwLCBsID0gdG9nZ2xlcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB0aGlzLmFkZFNlY3Rpb24odG9nZ2xlcnNbaV0sIHRoaXMuZWxlbWVudHNbaV0pOworCisJCXRoaXMuZWxlbWVudHMuZWFjaChmdW5jdGlvbihlbCwgaSl7CisJCQlpZiAob3B0aW9ucy5zaG93ID09PSBpKXsKKwkJCQl0aGlzLmZpcmVFdmVudCgnYWN0aXZlJywgW3RvZ2dsZXJzW2ldLCBlbF0pOworCQkJfSBlbHNlIHsKKwkJCQlmb3IgKHZhciBmeCBpbiBlZmZlY3RzKSBlbC5zZXRTdHlsZShmeCwgMCk7CisJCQl9CisJCX0sIHRoaXMpOworCisJCWlmIChvcHRpb25zLmRpc3BsYXkgfHwgb3B0aW9ucy5kaXNwbGF5ID09PSAwIHx8IG9wdGlvbnMuaW5pdGlhbERpc3BsYXlGeCA9PT0gZmFsc2UpeworCQkJdGhpcy5kaXNwbGF5KG9wdGlvbnMuZGlzcGxheSwgb3B0aW9ucy5pbml0aWFsRGlzcGxheUZ4KTsKKwkJfQorCisJCWlmIChvcHRpb25zLmZpeGVkSGVpZ2h0ICE9PSBmYWxzZSkgb3B0aW9ucy5yZXNldEhlaWdodCA9IGZhbHNlOworCQl0aGlzLmFkZEV2ZW50KCdjb21wbGV0ZScsIHRoaXMuaW50ZXJuYWxDaGFpbi5jYWxsQ2hhaW4uYmluZCh0aGlzLmludGVybmFsQ2hhaW4pKTsKKwl9LAorCisJYWRkU2VjdGlvbjogZnVuY3Rpb24odG9nZ2xlciwgZWxlbWVudCl7CisJCXRvZ2dsZXIgPSBkb2N1bWVudC5pZCh0b2dnbGVyKTsKKwkJZWxlbWVudCA9IGRvY3VtZW50LmlkKGVsZW1lbnQpOworCQl0aGlzLnRvZ2dsZXJzLmluY2x1ZGUodG9nZ2xlcik7CisJCXRoaXMuZWxlbWVudHMuaW5jbHVkZShlbGVtZW50KTsKKworCQl2YXIgdG9nZ2xlcnMgPSB0aGlzLnRvZ2dsZXJzLAorCQkJb3B0aW9ucyA9IHRoaXMub3B0aW9ucywKKwkJCXRlc3QgPSB0b2dnbGVycy5jb250YWlucyh0b2dnbGVyKSwKKwkJCWlkeCA9IHRvZ2dsZXJzLmluZGV4T2YodG9nZ2xlciksCisJCQlkaXNwbGF5ZXIgPSB0aGlzLmRpc3BsYXkucGFzcyhpZHgsIHRoaXMpOworCisJCXRvZ2dsZXIuc3RvcmUoJ2FjY29yZGlvbjpkaXNwbGF5JywgZGlzcGxheWVyKQorCQkJLmFkZEV2ZW50KG9wdGlvbnMudHJpZ2dlciwgZGlzcGxheWVyKTsKKworCQlpZiAob3B0aW9ucy5oZWlnaHQpIGVsZW1lbnQuc2V0U3R5bGVzKHsncGFkZGluZy10b3AnOiAwLCAnYm9yZGVyLXRvcCc6ICdub25lJywgJ3BhZGRpbmctYm90dG9tJzogMCwgJ2JvcmRlci1ib3R0b20nOiAnbm9uZSd9KTsKKwkJaWYgKG9wdGlvbnMud2lkdGgpIGVsZW1lbnQuc2V0U3R5bGVzKHsncGFkZGluZy1sZWZ0JzogMCwgJ2JvcmRlci1sZWZ0JzogJ25vbmUnLCAncGFkZGluZy1yaWdodCc6IDAsICdib3JkZXItcmlnaHQnOiAnbm9uZSd9KTsKKworCQllbGVtZW50LmZ1bGxPcGFjaXR5ID0gMTsKKwkJaWYgKG9wdGlvbnMuZml4ZWRXaWR0aCkgZWxlbWVudC5mdWxsV2lkdGggPSBvcHRpb25zLmZpeGVkV2lkdGg7CisJCWlmIChvcHRpb25zLmZpeGVkSGVpZ2h0KSBlbGVtZW50LmZ1bGxIZWlnaHQgPSBvcHRpb25zLmZpeGVkSGVpZ2h0OworCQllbGVtZW50LnNldFN0eWxlKCdvdmVyZmxvdycsICdoaWRkZW4nKTsKKworCQlpZiAoIXRlc3QpIGZvciAodmFyIGZ4IGluIHRoaXMuZWZmZWN0cyl7CisJCQllbGVtZW50LnNldFN0eWxlKGZ4LCAwKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVtb3ZlU2VjdGlvbjogZnVuY3Rpb24odG9nZ2xlciwgZGlzcGxheUluZGV4KXsKKwkJdmFyIHRvZ2dsZXJzID0gdGhpcy50b2dnbGVycywKKwkJCWlkeCA9IHRvZ2dsZXJzLmluZGV4T2YodG9nZ2xlciksCisJCQllbGVtZW50ID0gdGhpcy5lbGVtZW50c1tpZHhdOworCisJCXZhciByZW1vdmVyID0gZnVuY3Rpb24oKXsKKwkJCXRvZ2dsZXJzLmVyYXNlKHRvZ2dsZXIpOworCQkJdGhpcy5lbGVtZW50cy5lcmFzZShlbGVtZW50KTsKKwkJCXRoaXMuZGV0YWNoKHRvZ2dsZXIpOworCQl9LmJpbmQodGhpcyk7CisKKwkJaWYgKHRoaXMubm93ID09IGlkeCB8fCBkaXNwbGF5SW5kZXggIT0gbnVsbCl7CisJCQl0aGlzLmRpc3BsYXkoZGlzcGxheUluZGV4ICE9IG51bGwgPyBkaXNwbGF5SW5kZXggOiAoaWR4IC0gMSA+PSAwID8gaWR4IC0gMSA6IDApKS5jaGFpbihyZW1vdmVyKTsKKwkJfSBlbHNlIHsKKwkJCXJlbW92ZXIoKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZGV0YWNoOiBmdW5jdGlvbih0b2dnbGVyKXsKKwkJdmFyIHJlbW92ZSA9IGZ1bmN0aW9uKHRvZ2dsZXIpeworCQkJdG9nZ2xlci5yZW1vdmVFdmVudCh0aGlzLm9wdGlvbnMudHJpZ2dlciwgdG9nZ2xlci5yZXRyaWV2ZSgnYWNjb3JkaW9uOmRpc3BsYXknKSk7CisJCX0uYmluZCh0aGlzKTsKKworCQlpZiAoIXRvZ2dsZXIpIHRoaXMudG9nZ2xlcnMuZWFjaChyZW1vdmUpOworCQllbHNlIHJlbW92ZSh0b2dnbGVyKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWRpc3BsYXk6IGZ1bmN0aW9uKGluZGV4LCB1c2VGeCl7CisJCWlmICghdGhpcy5jaGVjayhpbmRleCwgdXNlRngpKSByZXR1cm4gdGhpczsKKworCQl2YXIgb2JqID0ge30sCisJCQllbGVtZW50cyA9IHRoaXMuZWxlbWVudHMsCisJCQlvcHRpb25zID0gdGhpcy5vcHRpb25zLAorCQkJZWZmZWN0cyA9IHRoaXMuZWZmZWN0cywKKwkJCWtlZXBPcGVuID0gb3B0aW9ucy5rZWVwT3BlbiwKKwkJCWFsd2F5c0hpZGUgPSBvcHRpb25zLmFsd2F5c0hpZGU7CisKKwkJaWYgKHVzZUZ4ID09IG51bGwpIHVzZUZ4ID0gdHJ1ZTsKKwkJaWYgKHR5cGVPZihpbmRleCkgPT0gJ2VsZW1lbnQnKSBpbmRleCA9IGVsZW1lbnRzLmluZGV4T2YoaW5kZXgpOworCQlpZiAoaW5kZXggPT0gdGhpcy5jdXJyZW50ICYmICFhbHdheXNIaWRlICYmICFrZWVwT3BlbikgcmV0dXJuIHRoaXM7CisKKwkJaWYgKG9wdGlvbnMucmVzZXRIZWlnaHQpeworCQkJdmFyIHByZXYgPSBlbGVtZW50c1t0aGlzLmN1cnJlbnRdOworCQkJaWYgKHByZXYgJiYgIXRoaXMuc2VsZkhpZGRlbil7CisJCQkJZm9yICh2YXIgZnggaW4gZWZmZWN0cykgcHJldi5zZXRTdHlsZShmeCwgcHJldltlZmZlY3RzW2Z4XV0pOworCQkJfQorCQl9CisKKwkJaWYgKHRoaXMudGltZXIgJiYgb3B0aW9ucy5saW5rID09ICdjaGFpbicpIHJldHVybiB0aGlzOworCisJCWlmICh0aGlzLmN1cnJlbnQgIT0gbnVsbCkgdGhpcy5wcmV2aW91cyA9IHRoaXMuY3VycmVudDsKKwkJdGhpcy5jdXJyZW50ID0gaW5kZXg7CisJCXRoaXMuc2VsZkhpZGRlbiA9IGZhbHNlOworCisJCWVsZW1lbnRzLmVhY2goZnVuY3Rpb24oZWwsIGkpeworCQkJb2JqW2ldID0ge307CisJCQl2YXIgaGlkZSwgaXNPcGVuOworCQkJaWYgKCFrZWVwT3BlbiB8fCBpID09IGluZGV4KXsKKwkJCQlpZiAoaSA9PSBpbmRleCkgaXNPcGVuID0gKGVsLm9mZnNldEhlaWdodCA+IDAgJiYgb3B0aW9ucy5oZWlnaHQpIHx8IChlbC5vZmZzZXRXaWR0aCA+IDAgJiYgb3B0aW9ucy53aWR0aCk7CisKKwkJCQlpZiAoaSAhPSBpbmRleCl7CisJCQkJCWhpZGUgPSB0cnVlOworCQkJCX0gZWxzZSBpZiAoKGFsd2F5c0hpZGUgfHwga2VlcE9wZW4pICYmIGlzT3Blbil7CisJCQkJCWhpZGUgPSB0cnVlOworCQkJCQl0aGlzLnNlbGZIaWRkZW4gPSB0cnVlOworCQkJCX0KKwkJCQl0aGlzLmZpcmVFdmVudChoaWRlID8gJ2JhY2tncm91bmQnIDogJ2FjdGl2ZScsIFt0aGlzLnRvZ2dsZXJzW2ldLCBlbF0pOworCQkJCWZvciAodmFyIGZ4IGluIGVmZmVjdHMpIG9ialtpXVtmeF0gPSBoaWRlID8gMCA6IGVsW2VmZmVjdHNbZnhdXTsKKwkJCQlpZiAoIXVzZUZ4ICYmICFoaWRlICYmIG9wdGlvbnMucmVzZXRIZWlnaHQpIG9ialtpXS5oZWlnaHQgPSAnYXV0byc7CisJCQl9CisJCX0sIHRoaXMpOworCisJCXRoaXMuaW50ZXJuYWxDaGFpbi5jbGVhckNoYWluKCk7CisJCXRoaXMuaW50ZXJuYWxDaGFpbi5jaGFpbihmdW5jdGlvbigpeworCQkJaWYgKG9wdGlvbnMucmVzZXRIZWlnaHQgJiYgIXRoaXMuc2VsZkhpZGRlbil7CisJCQkJdmFyIGVsID0gZWxlbWVudHNbaW5kZXhdOworCQkJCWlmIChlbCkgZWwuc2V0U3R5bGUoJ2hlaWdodCcsICdhdXRvJyk7CisJCQl9CisJCX0uYmluZCh0aGlzKSk7CisKKwkJcmV0dXJuIHVzZUZ4ID8gdGhpcy5zdGFydChvYmopIDogdGhpcy5zZXQob2JqKS5pbnRlcm5hbENoYWluLmNhbGxDaGFpbigpOworCX0KKworfSk7CisKKworCisvKgorLS0tCisKK3NjcmlwdDogRnguTW92ZS5qcworCituYW1lOiBGeC5Nb3ZlCisKK2Rlc2NyaXB0aW9uOiBEZWZpbmVzIEZ4Lk1vdmUsIGEgY2xhc3MgdGhhdCB3b3JrcyB3aXRoIEVsZW1lbnQuUG9zaXRpb24uanMgdG8gdHJhbnNpdGlvbiBhbiBlbGVtZW50IGZyb20gb25lIGxvY2F0aW9uIHRvIGFub3RoZXIuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisKK3JlcXVpcmVzOgorICAtIENvcmUvRnguTW9ycGgKKyAgLSBFbGVtZW50LlBvc2l0aW9uCisKK3Byb3ZpZGVzOiBbRnguTW92ZV0KKworLi4uCisqLworCitGeC5Nb3ZlID0gbmV3IENsYXNzKHsKKworCUV4dGVuZHM6IEZ4Lk1vcnBoLAorCisJb3B0aW9uczogeworCQlyZWxhdGl2ZVRvOiBkb2N1bWVudC5ib2R5LAorCQlwb3NpdGlvbjogJ2NlbnRlcicsCisJCWVkZ2U6IGZhbHNlLAorCQlvZmZzZXQ6IHt4OiAwLCB5OiAwfQorCX0sCisKKwlzdGFydDogZnVuY3Rpb24oZGVzdGluYXRpb24peworCQl2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVudCwKKwkJCXRvcExlZnQgPSBlbGVtZW50LmdldFN0eWxlcygndG9wJywgJ2xlZnQnKTsKKwkJaWYgKHRvcExlZnQudG9wID09ICdhdXRvJyB8fCB0b3BMZWZ0LmxlZnQgPT0gJ2F1dG8nKXsKKwkJCWVsZW1lbnQuc2V0UG9zaXRpb24oZWxlbWVudC5nZXRQb3NpdGlvbihlbGVtZW50LmdldE9mZnNldFBhcmVudCgpKSk7CisJCX0KKwkJcmV0dXJuIHRoaXMucGFyZW50KGVsZW1lbnQucG9zaXRpb24oT2JqZWN0Lm1lcmdlKHt9LCB0aGlzLm9wdGlvbnMsIGRlc3RpbmF0aW9uLCB7cmV0dXJuUG9zOiB0cnVlfSkpKTsKKwl9CisKK30pOworCitFbGVtZW50LlByb3BlcnRpZXMubW92ZSA9IHsKKworCXNldDogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXRoaXMuZ2V0KCdtb3ZlJykuY2FuY2VsKCkuc2V0T3B0aW9ucyhvcHRpb25zKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWdldDogZnVuY3Rpb24oKXsKKwkJdmFyIG1vdmUgPSB0aGlzLnJldHJpZXZlKCdtb3ZlJyk7CisJCWlmICghbW92ZSl7CisJCQltb3ZlID0gbmV3IEZ4Lk1vdmUodGhpcywge2xpbms6ICdjYW5jZWwnfSk7CisJCQl0aGlzLnN0b3JlKCdtb3ZlJywgbW92ZSk7CisJCX0KKwkJcmV0dXJuIG1vdmU7CisJfQorCit9OworCitFbGVtZW50LmltcGxlbWVudCh7CisKKwltb3ZlOiBmdW5jdGlvbihvcHRpb25zKXsKKwkJdGhpcy5nZXQoJ21vdmUnKS5zdGFydChvcHRpb25zKTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKworLyoKKy0tLQorCitzY3JpcHQ6IEZ4LlNjcm9sbC5qcworCituYW1lOiBGeC5TY3JvbGwKKworZGVzY3JpcHRpb246IEVmZmVjdCB0byBzbW9vdGhseSBzY3JvbGwgYW55IGVsZW1lbnQsIGluY2x1ZGluZyB0aGUgd2luZG93LgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFZhbGVyaW8gUHJvaWV0dGkKKworcmVxdWlyZXM6CisgIC0gQ29yZS9GeAorICAtIENvcmUvRWxlbWVudC5FdmVudAorICAtIENvcmUvRWxlbWVudC5EaW1lbnNpb25zCisgIC0gTW9vVG9vbHMuTW9yZQorCitwcm92aWRlczogW0Z4LlNjcm9sbF0KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKworRnguU2Nyb2xsID0gbmV3IENsYXNzKHsKKworCUV4dGVuZHM6IEZ4LAorCisJb3B0aW9uczogeworCQlvZmZzZXQ6IHt4OiAwLCB5OiAwfSwKKwkJd2hlZWxTdG9wczogdHJ1ZQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXsKKwkJdGhpcy5lbGVtZW50ID0gdGhpcy5zdWJqZWN0ID0gZG9jdW1lbnQuaWQoZWxlbWVudCk7CisJCXRoaXMucGFyZW50KG9wdGlvbnMpOworCisJCWlmICh0eXBlT2YodGhpcy5lbGVtZW50KSAhPSAnZWxlbWVudCcpIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmlkKHRoaXMuZWxlbWVudC5nZXREb2N1bWVudCgpLmJvZHkpOworCisJCWlmICh0aGlzLm9wdGlvbnMud2hlZWxTdG9wcyl7CisJCQl2YXIgc3RvcHBlciA9IHRoaXMuZWxlbWVudCwKKwkJCQljYW5jZWwgPSB0aGlzLmNhbmNlbC5wYXNzKGZhbHNlLCB0aGlzKTsKKwkJCXRoaXMuYWRkRXZlbnQoJ3N0YXJ0JywgZnVuY3Rpb24oKXsKKwkJCQlzdG9wcGVyLmFkZEV2ZW50KCdtb3VzZXdoZWVsJywgY2FuY2VsKTsKKwkJCX0sIHRydWUpOworCQkJdGhpcy5hZGRFdmVudCgnY29tcGxldGUnLCBmdW5jdGlvbigpeworCQkJCXN0b3BwZXIucmVtb3ZlRXZlbnQoJ21vdXNld2hlZWwnLCBjYW5jZWwpOworCQkJfSwgdHJ1ZSk7CisJCX0KKwl9LAorCisJc2V0OiBmdW5jdGlvbigpeworCQl2YXIgbm93ID0gQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpOworCQl0aGlzLmVsZW1lbnQuc2Nyb2xsVG8obm93WzBdLCBub3dbMV0pOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJY29tcHV0ZTogZnVuY3Rpb24oZnJvbSwgdG8sIGRlbHRhKXsKKwkJcmV0dXJuIFswLCAxXS5tYXAoZnVuY3Rpb24oaSl7CisJCQlyZXR1cm4gRnguY29tcHV0ZShmcm9tW2ldLCB0b1tpXSwgZGVsdGEpOworCQl9KTsKKwl9LAorCisJc3RhcnQ6IGZ1bmN0aW9uKHgsIHkpeworCQlpZiAoIXRoaXMuY2hlY2soeCwgeSkpIHJldHVybiB0aGlzOworCQl2YXIgc2Nyb2xsID0gdGhpcy5lbGVtZW50LmdldFNjcm9sbCgpOworCQlyZXR1cm4gdGhpcy5wYXJlbnQoW3Njcm9sbC54LCBzY3JvbGwueV0sIFt4LCB5XSk7CisJfSwKKworCWNhbGN1bGF0ZVNjcm9sbDogZnVuY3Rpb24oeCwgeSl7CisJCXZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50LAorCQkJc2Nyb2xsU2l6ZSA9IGVsZW1lbnQuZ2V0U2Nyb2xsU2l6ZSgpLAorCQkJc2Nyb2xsID0gZWxlbWVudC5nZXRTY3JvbGwoKSwKKwkJCXNpemUgPSBlbGVtZW50LmdldFNpemUoKSwKKwkJCW9mZnNldCA9IHRoaXMub3B0aW9ucy5vZmZzZXQsCisJCQl2YWx1ZXMgPSB7eDogeCwgeTogeX07CisKKwkJZm9yICh2YXIgeiBpbiB2YWx1ZXMpeworCQkJaWYgKCF2YWx1ZXNbel0gJiYgdmFsdWVzW3pdICE9PSAwKSB2YWx1ZXNbel0gPSBzY3JvbGxbel07CisJCQlpZiAodHlwZU9mKHZhbHVlc1t6XSkgIT0gJ251bWJlcicpIHZhbHVlc1t6XSA9IHNjcm9sbFNpemVbel0gLSBzaXplW3pdOworCQkJdmFsdWVzW3pdICs9IG9mZnNldFt6XTsKKwkJfQorCisJCXJldHVybiBbdmFsdWVzLngsIHZhbHVlcy55XTsKKwl9LAorCisJdG9Ub3A6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLnN0YXJ0LmFwcGx5KHRoaXMsIHRoaXMuY2FsY3VsYXRlU2Nyb2xsKGZhbHNlLCAwKSk7CisJfSwKKworCXRvTGVmdDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuc3RhcnQuYXBwbHkodGhpcywgdGhpcy5jYWxjdWxhdGVTY3JvbGwoMCwgZmFsc2UpKTsKKwl9LAorCisJdG9SaWdodDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuc3RhcnQuYXBwbHkodGhpcywgdGhpcy5jYWxjdWxhdGVTY3JvbGwoJ3JpZ2h0JywgZmFsc2UpKTsKKwl9LAorCisJdG9Cb3R0b206IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLnN0YXJ0LmFwcGx5KHRoaXMsIHRoaXMuY2FsY3VsYXRlU2Nyb2xsKGZhbHNlLCAnYm90dG9tJykpOworCX0sCisKKwl0b0VsZW1lbnQ6IGZ1bmN0aW9uKGVsLCBheGVzKXsKKwkJYXhlcyA9IGF4ZXMgPyBBcnJheS5jb252ZXJ0KGF4ZXMpIDogWyd4JywgJ3knXTsKKwkJdmFyIHNjcm9sbCA9IGlzQm9keSh0aGlzLmVsZW1lbnQpID8ge3g6IDAsIHk6IDB9IDogdGhpcy5lbGVtZW50LmdldFNjcm9sbCgpOworCQl2YXIgcG9zaXRpb24gPSBPYmplY3QubWFwKGRvY3VtZW50LmlkKGVsKS5nZXRQb3NpdGlvbih0aGlzLmVsZW1lbnQpLCBmdW5jdGlvbih2YWx1ZSwgYXhpcyl7CisJCQlyZXR1cm4gYXhlcy5jb250YWlucyhheGlzKSA/IHZhbHVlICsgc2Nyb2xsW2F4aXNdIDogZmFsc2U7CisJCX0pOworCQlyZXR1cm4gdGhpcy5zdGFydC5hcHBseSh0aGlzLCB0aGlzLmNhbGN1bGF0ZVNjcm9sbChwb3NpdGlvbi54LCBwb3NpdGlvbi55KSk7CisJfSwKKworCXRvRWxlbWVudEVkZ2U6IGZ1bmN0aW9uKGVsLCBheGVzLCBvZmZzZXQpeworCQlheGVzID0gYXhlcyA/IEFycmF5LmNvbnZlcnQoYXhlcykgOiBbJ3gnLCAneSddOworCQllbCA9IGRvY3VtZW50LmlkKGVsKTsKKwkJdmFyIHRvID0ge30sCisJCQlwb3NpdGlvbiA9IGVsLmdldFBvc2l0aW9uKHRoaXMuZWxlbWVudCksCisJCQlzaXplID0gZWwuZ2V0U2l6ZSgpLAorCQkJc2Nyb2xsID0gdGhpcy5lbGVtZW50LmdldFNjcm9sbCgpLAorCQkJY29udGFpbmVyU2l6ZSA9IHRoaXMuZWxlbWVudC5nZXRTaXplKCksCisJCQllZGdlID0geworCQkJCXg6IHBvc2l0aW9uLnggKyBzaXplLngsCisJCQkJeTogcG9zaXRpb24ueSArIHNpemUueQorCQkJfTsKKworCQlbJ3gnLCAneSddLmVhY2goZnVuY3Rpb24oYXhpcyl7CisJCQlpZiAoYXhlcy5jb250YWlucyhheGlzKSl7CisJCQkJaWYgKGVkZ2VbYXhpc10gPiBzY3JvbGxbYXhpc10gKyBjb250YWluZXJTaXplW2F4aXNdKSB0b1theGlzXSA9IGVkZ2VbYXhpc10gLSBjb250YWluZXJTaXplW2F4aXNdOworCQkJCWlmIChwb3NpdGlvbltheGlzXSA8IHNjcm9sbFtheGlzXSkgdG9bYXhpc10gPSBwb3NpdGlvbltheGlzXTsKKwkJCX0KKwkJCWlmICh0b1theGlzXSA9PSBudWxsKSB0b1theGlzXSA9IHNjcm9sbFtheGlzXTsKKwkJCWlmIChvZmZzZXQgJiYgb2Zmc2V0W2F4aXNdKSB0b1theGlzXSA9IHRvW2F4aXNdICsgb2Zmc2V0W2F4aXNdOworCQl9LCB0aGlzKTsKKworCQlpZiAodG8ueCAhPSBzY3JvbGwueCB8fCB0by55ICE9IHNjcm9sbC55KSB0aGlzLnN0YXJ0KHRvLngsIHRvLnkpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJdG9FbGVtZW50Q2VudGVyOiBmdW5jdGlvbihlbCwgYXhlcywgb2Zmc2V0KXsKKwkJYXhlcyA9IGF4ZXMgPyBBcnJheS5jb252ZXJ0KGF4ZXMpIDogWyd4JywgJ3knXTsKKwkJZWwgPSBkb2N1bWVudC5pZChlbCk7CisJCXZhciB0byA9IHt9LAorCQkJcG9zaXRpb24gPSBlbC5nZXRQb3NpdGlvbih0aGlzLmVsZW1lbnQpLAorCQkJc2l6ZSA9IGVsLmdldFNpemUoKSwKKwkJCXNjcm9sbCA9IHRoaXMuZWxlbWVudC5nZXRTY3JvbGwoKSwKKwkJCWNvbnRhaW5lclNpemUgPSB0aGlzLmVsZW1lbnQuZ2V0U2l6ZSgpOworCisJCVsneCcsICd5J10uZWFjaChmdW5jdGlvbihheGlzKXsKKwkJCWlmIChheGVzLmNvbnRhaW5zKGF4aXMpKXsKKwkJCQl0b1theGlzXSA9IHBvc2l0aW9uW2F4aXNdIC0gKGNvbnRhaW5lclNpemVbYXhpc10gLSBzaXplW2F4aXNdKSAvIDI7CisJCQl9CisJCQlpZiAodG9bYXhpc10gPT0gbnVsbCkgdG9bYXhpc10gPSBzY3JvbGxbYXhpc107CisJCQlpZiAob2Zmc2V0ICYmIG9mZnNldFtheGlzXSkgdG9bYXhpc10gPSB0b1theGlzXSArIG9mZnNldFtheGlzXTsKKwkJfSwgdGhpcyk7CisKKwkJaWYgKHRvLnggIT0gc2Nyb2xsLnggfHwgdG8ueSAhPSBzY3JvbGwueSkgdGhpcy5zdGFydCh0by54LCB0by55KTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCit9KTsKKworCisKK2Z1bmN0aW9uIGlzQm9keShlbGVtZW50KXsKKwlyZXR1cm4gKC9eKD86Ym9keXxodG1sKSQvaSkudGVzdChlbGVtZW50LnRhZ05hbWUpOworfQorCit9KSgpOworCisvKgorLS0tCisKK3NjcmlwdDogRnguU2xpZGUuanMKKworbmFtZTogRnguU2xpZGUKKworZGVzY3JpcHRpb246IEVmZmVjdCB0byBzbGlkZSBhbiBlbGVtZW50IGluIGFuZCBvdXQgb2Ygdmlldy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBWYWxlcmlvIFByb2lldHRpCisKK3JlcXVpcmVzOgorICAtIENvcmUvRngKKyAgLSBDb3JlL0VsZW1lbnQuU3R5bGUKKyAgLSBNb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbRnguU2xpZGVdCisKKy4uLgorKi8KKworRnguU2xpZGUgPSBuZXcgQ2xhc3MoeworCisJRXh0ZW5kczogRngsCisKKwlvcHRpb25zOiB7CisJCW1vZGU6ICd2ZXJ0aWNhbCcsCisJCXdyYXBwZXI6IGZhbHNlLAorCQloaWRlT3ZlcmZsb3c6IHRydWUsCisJCXJlc2V0SGVpZ2h0OiBmYWxzZQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKXsKKwkJZWxlbWVudCA9IHRoaXMuZWxlbWVudCA9IHRoaXMuc3ViamVjdCA9IGRvY3VtZW50LmlkKGVsZW1lbnQpOworCQl0aGlzLnBhcmVudChvcHRpb25zKTsKKwkJb3B0aW9ucyA9IHRoaXMub3B0aW9uczsKKworCQl2YXIgd3JhcHBlciA9IGVsZW1lbnQucmV0cmlldmUoJ3dyYXBwZXInKSwKKwkJCXN0eWxlcyA9IGVsZW1lbnQuZ2V0U3R5bGVzKCdtYXJnaW4nLCAncG9zaXRpb24nLCAnb3ZlcmZsb3cnKTsKKworCQlpZiAob3B0aW9ucy5oaWRlT3ZlcmZsb3cpIHN0eWxlcyA9IE9iamVjdC5hcHBlbmQoc3R5bGVzLCB7b3ZlcmZsb3c6ICdoaWRkZW4nfSk7CisJCWlmIChvcHRpb25zLndyYXBwZXIpIHdyYXBwZXIgPSBkb2N1bWVudC5pZChvcHRpb25zLndyYXBwZXIpLnNldFN0eWxlcyhzdHlsZXMpOworCisJCWlmICghd3JhcHBlcikgd3JhcHBlciA9IG5ldyBFbGVtZW50KCdkaXYnLCB7CisJCQlzdHlsZXM6IHN0eWxlcworCQl9KS53cmFwcyhlbGVtZW50KTsKKworCQllbGVtZW50LnN0b3JlKCd3cmFwcGVyJywgd3JhcHBlcikuc2V0U3R5bGUoJ21hcmdpbicsIDApOworCQlpZiAoZWxlbWVudC5nZXRTdHlsZSgnb3ZlcmZsb3cnKSA9PSAndmlzaWJsZScpIGVsZW1lbnQuc2V0U3R5bGUoJ292ZXJmbG93JywgJ2hpZGRlbicpOworCisJCXRoaXMubm93ID0gW107CisJCXRoaXMub3BlbiA9IHRydWU7CisJCXRoaXMud3JhcHBlciA9IHdyYXBwZXI7CisKKwkJdGhpcy5hZGRFdmVudCgnY29tcGxldGUnLCBmdW5jdGlvbigpeworCQkJdGhpcy5vcGVuID0gKHdyYXBwZXJbJ29mZnNldCcgKyB0aGlzLmxheW91dC5jYXBpdGFsaXplKCldICE9IDApOworCQkJaWYgKHRoaXMub3BlbiAmJiB0aGlzLm9wdGlvbnMucmVzZXRIZWlnaHQpIHdyYXBwZXIuc2V0U3R5bGUoJ2hlaWdodCcsICcnKTsKKwkJfSwgdHJ1ZSk7CisJfSwKKworCXZlcnRpY2FsOiBmdW5jdGlvbigpeworCQl0aGlzLm1hcmdpbiA9ICdtYXJnaW4tdG9wJzsKKwkJdGhpcy5sYXlvdXQgPSAnaGVpZ2h0JzsKKwkJdGhpcy5vZmZzZXQgPSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0OworCX0sCisKKwlob3Jpem9udGFsOiBmdW5jdGlvbigpeworCQl0aGlzLm1hcmdpbiA9ICdtYXJnaW4tbGVmdCc7CisJCXRoaXMubGF5b3V0ID0gJ3dpZHRoJzsKKwkJdGhpcy5vZmZzZXQgPSB0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGg7CisJfSwKKworCXNldDogZnVuY3Rpb24obm93KXsKKwkJdGhpcy5lbGVtZW50LnNldFN0eWxlKHRoaXMubWFyZ2luLCBub3dbMF0pOworCQl0aGlzLndyYXBwZXIuc2V0U3R5bGUodGhpcy5sYXlvdXQsIG5vd1sxXSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwljb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZGVsdGEpeworCQlyZXR1cm4gWzAsIDFdLm1hcChmdW5jdGlvbihpKXsKKwkJCXJldHVybiBGeC5jb21wdXRlKGZyb21baV0sIHRvW2ldLCBkZWx0YSk7CisJCX0pOworCX0sCisKKwlzdGFydDogZnVuY3Rpb24oaG93LCBtb2RlKXsKKwkJaWYgKCF0aGlzLmNoZWNrKGhvdywgbW9kZSkpIHJldHVybiB0aGlzOworCQl0aGlzW21vZGUgfHwgdGhpcy5vcHRpb25zLm1vZGVdKCk7CisKKwkJdmFyIG1hcmdpbiA9IHRoaXMuZWxlbWVudC5nZXRTdHlsZSh0aGlzLm1hcmdpbikudG9JbnQoKSwKKwkJCWxheW91dCA9IHRoaXMud3JhcHBlci5nZXRTdHlsZSh0aGlzLmxheW91dCkudG9JbnQoKSwKKwkJCWNhc2VJbiA9IFtbbWFyZ2luLCBsYXlvdXRdLCBbMCwgdGhpcy5vZmZzZXRdXSwKKwkJCWNhc2VPdXQgPSBbW21hcmdpbiwgbGF5b3V0XSwgWy10aGlzLm9mZnNldCwgMF1dLAorCQkJc3RhcnQ7CisKKwkJc3dpdGNoIChob3cpeworCQkJY2FzZSAnaW4nOiBzdGFydCA9IGNhc2VJbjsgYnJlYWs7CisJCQljYXNlICdvdXQnOiBzdGFydCA9IGNhc2VPdXQ7IGJyZWFrOworCQkJY2FzZSAndG9nZ2xlJzogc3RhcnQgPSAobGF5b3V0ID09IDApID8gY2FzZUluIDogY2FzZU91dDsKKwkJfQorCQlyZXR1cm4gdGhpcy5wYXJlbnQoc3RhcnRbMF0sIHN0YXJ0WzFdKTsKKwl9LAorCisJc2xpZGVJbjogZnVuY3Rpb24obW9kZSl7CisJCXJldHVybiB0aGlzLnN0YXJ0KCdpbicsIG1vZGUpOworCX0sCisKKwlzbGlkZU91dDogZnVuY3Rpb24obW9kZSl7CisJCXJldHVybiB0aGlzLnN0YXJ0KCdvdXQnLCBtb2RlKTsKKwl9LAorCisJaGlkZTogZnVuY3Rpb24obW9kZSl7CisJCXRoaXNbbW9kZSB8fCB0aGlzLm9wdGlvbnMubW9kZV0oKTsKKwkJdGhpcy5vcGVuID0gZmFsc2U7CisJCXJldHVybiB0aGlzLnNldChbLXRoaXMub2Zmc2V0LCAwXSk7CisJfSwKKworCXNob3c6IGZ1bmN0aW9uKG1vZGUpeworCQl0aGlzW21vZGUgfHwgdGhpcy5vcHRpb25zLm1vZGVdKCk7CisJCXRoaXMub3BlbiA9IHRydWU7CisJCXJldHVybiB0aGlzLnNldChbMCwgdGhpcy5vZmZzZXRdKTsKKwl9LAorCisJdG9nZ2xlOiBmdW5jdGlvbihtb2RlKXsKKwkJcmV0dXJuIHRoaXMuc3RhcnQoJ3RvZ2dsZScsIG1vZGUpOworCX0KKworfSk7CisKK0VsZW1lbnQuUHJvcGVydGllcy5zbGlkZSA9IHsKKworCXNldDogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXRoaXMuZ2V0KCdzbGlkZScpLmNhbmNlbCgpLnNldE9wdGlvbnMob3B0aW9ucyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXQ6IGZ1bmN0aW9uKCl7CisJCXZhciBzbGlkZSA9IHRoaXMucmV0cmlldmUoJ3NsaWRlJyk7CisJCWlmICghc2xpZGUpeworCQkJc2xpZGUgPSBuZXcgRnguU2xpZGUodGhpcywge2xpbms6ICdjYW5jZWwnfSk7CisJCQl0aGlzLnN0b3JlKCdzbGlkZScsIHNsaWRlKTsKKwkJfQorCQlyZXR1cm4gc2xpZGU7CisJfQorCit9OworCitFbGVtZW50LmltcGxlbWVudCh7CisKKwlzbGlkZTogZnVuY3Rpb24oaG93LCBtb2RlKXsKKwkJaG93ID0gaG93IHx8ICd0b2dnbGUnOworCQl2YXIgc2xpZGUgPSB0aGlzLmdldCgnc2xpZGUnKSwgdG9nZ2xlOworCQlzd2l0Y2ggKGhvdyl7CisJCQljYXNlICdoaWRlJzogc2xpZGUuaGlkZShtb2RlKTsgYnJlYWs7CisJCQljYXNlICdzaG93Jzogc2xpZGUuc2hvdyhtb2RlKTsgYnJlYWs7CisJCQljYXNlICd0b2dnbGUnOgorCQkJCXZhciBmbGFnID0gdGhpcy5yZXRyaWV2ZSgnc2xpZGU6ZmxhZycsIHNsaWRlLm9wZW4pOworCQkJCXNsaWRlW2ZsYWcgPyAnc2xpZGVPdXQnIDogJ3NsaWRlSW4nXShtb2RlKTsKKwkJCQl0aGlzLnN0b3JlKCdzbGlkZTpmbGFnJywgIWZsYWcpOworCQkJCXRvZ2dsZSA9IHRydWU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OiBzbGlkZS5zdGFydChob3csIG1vZGUpOworCQl9CisJCWlmICghdG9nZ2xlKSB0aGlzLmVsaW1pbmF0ZSgnc2xpZGU6ZmxhZycpOworCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCisvKgorLS0tCisKK3NjcmlwdDogRnguU21vb3RoU2Nyb2xsLmpzCisKK25hbWU6IEZ4LlNtb290aFNjcm9sbAorCitkZXNjcmlwdGlvbjogQ2xhc3MgZm9yIGNyZWF0aW5nIGEgc21vb3RoIHNjcm9sbGluZyBlZmZlY3QgdG8gYWxsIGludGVybmFsIGxpbmtzIG9uIHRoZSBwYWdlLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFZhbGVyaW8gUHJvaWV0dGkKKworcmVxdWlyZXM6CisgIC0gQ29yZS9TbGljay5GaW5kZXIKKyAgLSBGeC5TY3JvbGwKKworcHJvdmlkZXM6IFtGeC5TbW9vdGhTY3JvbGxdCisKKy4uLgorKi8KKworRnguU21vb3RoU2Nyb2xsID0gbmV3IENsYXNzKHsKKworCUV4dGVuZHM6IEZ4LlNjcm9sbCwKKworCW9wdGlvbnM6IHsKKwkJYXhlczogWyd4JywgJ3knXQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zLCBjb250ZXh0KXsKKwkJY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7CisJCXRoaXMuZG9jID0gY29udGV4dC5nZXREb2N1bWVudCgpOworCQl0aGlzLnBhcmVudCh0aGlzLmRvYywgb3B0aW9ucyk7CisKKwkJdmFyIHdpbiA9IGNvbnRleHQuZ2V0V2luZG93KCksCisJCQlsb2NhdGlvbiA9IHdpbi5sb2NhdGlvbi5ocmVmLm1hdGNoKC9eW14jXSovKVswXSArICcjJywKKwkJCWxpbmtzID0gJCQodGhpcy5vcHRpb25zLmxpbmtzIHx8IHRoaXMuZG9jLmxpbmtzKTsKKworCQlsaW5rcy5lYWNoKGZ1bmN0aW9uKGxpbmspeworCQkJaWYgKGxpbmsuaHJlZi5pbmRleE9mKGxvY2F0aW9uKSAhPSAwKSByZXR1cm47CisJCQl2YXIgYW5jaG9yID0gbGluay5ocmVmLnN1YnN0cihsb2NhdGlvbi5sZW5ndGgpOworCQkJaWYgKGFuY2hvcikgdGhpcy51c2VMaW5rKGxpbmssIGFuY2hvcik7CisJCX0sIHRoaXMpOworCisJCXRoaXMuYWRkRXZlbnQoJ2NvbXBsZXRlJywgZnVuY3Rpb24oKXsKKwkJCXdpbi5sb2NhdGlvbi5oYXNoID0gdGhpcy5hbmNob3I7CisJCQl0aGlzLmVsZW1lbnQuc2Nyb2xsVG8odGhpcy50b1swXSwgdGhpcy50b1sxXSk7CisJCX0sIHRydWUpOworCX0sCisKKwl1c2VMaW5rOiBmdW5jdGlvbihsaW5rLCBhbmNob3IpeworCisJCWxpbmsuYWRkRXZlbnQoJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpeworCQkJdmFyIGVsID0gZG9jdW1lbnQuaWQoYW5jaG9yKSB8fCB0aGlzLmRvYy5nZXRFbGVtZW50KCdhW25hbWU9JyArIGFuY2hvciArICddJyk7CisJCQlpZiAoIWVsKSByZXR1cm47CisKKwkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisJCQl0aGlzLnRvRWxlbWVudChlbCwgdGhpcy5vcHRpb25zLmF4ZXMpLmNoYWluKGZ1bmN0aW9uKCl7CisJCQkJdGhpcy5maXJlRXZlbnQoJ3Njcm9sbGVkVG8nLCBbbGluaywgZWxdKTsKKwkJCX0uYmluZCh0aGlzKSk7CisKKwkJCXRoaXMuYW5jaG9yID0gYW5jaG9yOworCisJCX0uYmluZCh0aGlzKSk7CisKKwkJcmV0dXJuIHRoaXM7CisJfQorfSk7CisKKy8qCistLS0KKworc2NyaXB0OiBGeC5Tb3J0LmpzCisKK25hbWU6IEZ4LlNvcnQKKworZGVzY3JpcHRpb246IERlZmluZXMgRnguU29ydCwgYSBjbGFzcyB0aGF0IHJlb3JkZXJzIGxpc3RzIHdpdGggYSB0cmFuc2l0aW9uLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSBDb3JlL0VsZW1lbnQuRGltZW5zaW9ucworICAtIEZ4LkVsZW1lbnRzCisgIC0gRWxlbWVudC5NZWFzdXJlCisKK3Byb3ZpZGVzOiBbRnguU29ydF0KKworLi4uCisqLworCitGeC5Tb3J0ID0gbmV3IENsYXNzKHsKKworCUV4dGVuZHM6IEZ4LkVsZW1lbnRzLAorCisJb3B0aW9uczogeworCQltb2RlOiAndmVydGljYWwnCisJfSwKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnRzLCBvcHRpb25zKXsKKwkJdGhpcy5wYXJlbnQoZWxlbWVudHMsIG9wdGlvbnMpOworCQl0aGlzLmVsZW1lbnRzLmVhY2goZnVuY3Rpb24oZWwpeworCQkJaWYgKGVsLmdldFN0eWxlKCdwb3NpdGlvbicpID09ICdzdGF0aWMnKSBlbC5zZXRTdHlsZSgncG9zaXRpb24nLCAncmVsYXRpdmUnKTsKKwkJfSk7CisJCXRoaXMuc2V0RGVmYXVsdE9yZGVyKCk7CisJfSwKKworCXNldERlZmF1bHRPcmRlcjogZnVuY3Rpb24oKXsKKwkJdGhpcy5jdXJyZW50T3JkZXIgPSB0aGlzLmVsZW1lbnRzLm1hcChmdW5jdGlvbihlbCwgaW5kZXgpeworCQkJcmV0dXJuIGluZGV4OworCQl9KTsKKwl9LAorCisJc29ydDogZnVuY3Rpb24oKXsKKwkJaWYgKCF0aGlzLmNoZWNrKGFyZ3VtZW50cykpIHJldHVybiB0aGlzOworCQl2YXIgbmV3T3JkZXIgPSBBcnJheS5mbGF0dGVuKGFyZ3VtZW50cyk7CisKKwkJdmFyIHRvcCA9IDAsCisJCQlsZWZ0ID0gMCwKKwkJCW5leHQgPSB7fSwKKwkJCXplcm8gPSB7fSwKKwkJCXZlcnQgPSB0aGlzLm9wdGlvbnMubW9kZSA9PSAndmVydGljYWwnOworCisJCXZhciBjdXJyZW50ID0gdGhpcy5lbGVtZW50cy5tYXAoZnVuY3Rpb24oZWwsIGluZGV4KXsKKwkJCXZhciBzaXplID0gZWwuZ2V0Q29tcHV0ZWRTaXplKHtzdHlsZXM6IFsnYm9yZGVyJywgJ3BhZGRpbmcnLCAnbWFyZ2luJ119KTsKKwkJCXZhciB2YWw7CisJCQlpZiAodmVydCl7CisJCQkJdmFsID0geworCQkJCQl0b3A6IHRvcCwKKwkJCQkJbWFyZ2luOiBzaXplWydtYXJnaW4tdG9wJ10sCisJCQkJCWhlaWdodDogc2l6ZS50b3RhbEhlaWdodAorCQkJCX07CisJCQkJdG9wICs9IHZhbC5oZWlnaHQgLSBzaXplWydtYXJnaW4tdG9wJ107CisJCQl9IGVsc2UgeworCQkJCXZhbCA9IHsKKwkJCQkJbGVmdDogbGVmdCwKKwkJCQkJbWFyZ2luOiBzaXplWydtYXJnaW4tbGVmdCddLAorCQkJCQl3aWR0aDogc2l6ZS50b3RhbFdpZHRoCisJCQkJfTsKKwkJCQlsZWZ0ICs9IHZhbC53aWR0aDsKKwkJCX0KKwkJCXZhciBwbGFuZSA9IHZlcnQgPyAndG9wJyA6ICdsZWZ0JzsKKwkJCXplcm9baW5kZXhdID0ge307CisJCQl2YXIgc3RhcnQgPSBlbC5nZXRTdHlsZShwbGFuZSkudG9JbnQoKTsKKwkJCXplcm9baW5kZXhdW3BsYW5lXSA9IHN0YXJ0IHx8IDA7CisJCQlyZXR1cm4gdmFsOworCQl9LCB0aGlzKTsKKworCQl0aGlzLnNldCh6ZXJvKTsKKwkJbmV3T3JkZXIgPSBuZXdPcmRlci5tYXAoZnVuY3Rpb24oaSl7IHJldHVybiBpLnRvSW50KCk7IH0pOworCQlpZiAobmV3T3JkZXIubGVuZ3RoICE9IHRoaXMuZWxlbWVudHMubGVuZ3RoKXsKKwkJCXRoaXMuY3VycmVudE9yZGVyLmVhY2goZnVuY3Rpb24oaW5kZXgpeworCQkJCWlmICghbmV3T3JkZXIuY29udGFpbnMoaW5kZXgpKSBuZXdPcmRlci5wdXNoKGluZGV4KTsKKwkJCX0pOworCQkJaWYgKG5ld09yZGVyLmxlbmd0aCA+IHRoaXMuZWxlbWVudHMubGVuZ3RoKQorCQkJCW5ld09yZGVyLnNwbGljZSh0aGlzLmVsZW1lbnRzLmxlbmd0aC0xLCBuZXdPcmRlci5sZW5ndGggLSB0aGlzLmVsZW1lbnRzLmxlbmd0aCk7CisJCX0KKwkJdmFyIG1hcmdpbiA9IDA7CisJCXRvcCA9IGxlZnQgPSAwOworCQluZXdPcmRlci5lYWNoKGZ1bmN0aW9uKGl0ZW0peworCQkJdmFyIG5ld1BvcyA9IHt9OworCQkJaWYgKHZlcnQpeworCQkJCW5ld1Bvcy50b3AgPSB0b3AgLSBjdXJyZW50W2l0ZW1dLnRvcCAtIG1hcmdpbjsKKwkJCQl0b3AgKz0gY3VycmVudFtpdGVtXS5oZWlnaHQ7CisJCQl9IGVsc2UgeworCQkJCW5ld1Bvcy5sZWZ0ID0gbGVmdCAtIGN1cnJlbnRbaXRlbV0ubGVmdDsKKwkJCQlsZWZ0ICs9IGN1cnJlbnRbaXRlbV0ud2lkdGg7CisJCQl9CisJCQltYXJnaW4gPSBtYXJnaW4gKyBjdXJyZW50W2l0ZW1dLm1hcmdpbjsKKwkJCW5leHRbaXRlbV09bmV3UG9zOworCQl9LCB0aGlzKTsKKwkJdmFyIG1hcHBlZCA9IHt9OworCQlBcnJheS5jbG9uZShuZXdPcmRlcikuc29ydCgpLmVhY2goZnVuY3Rpb24oaW5kZXgpeworCQkJbWFwcGVkW2luZGV4XSA9IG5leHRbaW5kZXhdOworCQl9KTsKKwkJdGhpcy5zdGFydChtYXBwZWQpOworCQl0aGlzLmN1cnJlbnRPcmRlciA9IG5ld09yZGVyOworCisJCXJldHVybiB0aGlzOworCX0sCisKKwlyZWFycmFuZ2VET006IGZ1bmN0aW9uKG5ld09yZGVyKXsKKwkJbmV3T3JkZXIgPSBuZXdPcmRlciB8fCB0aGlzLmN1cnJlbnRPcmRlcjsKKwkJdmFyIHBhcmVudCA9IHRoaXMuZWxlbWVudHNbMF0uZ2V0UGFyZW50KCk7CisJCXZhciByZWFycmFuZ2VkID0gW107CisJCXRoaXMuZWxlbWVudHMuc2V0U3R5bGUoJ29wYWNpdHknLCAwKTsKKwkJLy9tb3ZlIGVhY2ggZWxlbWVudCBhbmQgc3RvcmUgdGhlIG5ldyBkZWZhdWx0IG9yZGVyCisJCW5ld09yZGVyLmVhY2goZnVuY3Rpb24oaW5kZXgpeworCQkJcmVhcnJhbmdlZC5wdXNoKHRoaXMuZWxlbWVudHNbaW5kZXhdLmluamVjdChwYXJlbnQpLnNldFN0eWxlcyh7CisJCQkJdG9wOiAwLAorCQkJCWxlZnQ6IDAKKwkJCX0pKTsKKwkJfSwgdGhpcyk7CisJCXRoaXMuZWxlbWVudHMuc2V0U3R5bGUoJ29wYWNpdHknLCAxKTsKKwkJdGhpcy5lbGVtZW50cyA9ICQkKHJlYXJyYW5nZWQpOworCQl0aGlzLnNldERlZmF1bHRPcmRlcigpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZ2V0RGVmYXVsdE9yZGVyOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5lbGVtZW50cy5tYXAoZnVuY3Rpb24oZWwsIGluZGV4KXsKKwkJCXJldHVybiBpbmRleDsKKwkJfSk7CisJfSwKKworCWdldEN1cnJlbnRPcmRlcjogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuY3VycmVudE9yZGVyOworCX0sCisKKwlmb3J3YXJkOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5zb3J0KHRoaXMuZ2V0RGVmYXVsdE9yZGVyKCkpOworCX0sCisKKwliYWNrd2FyZDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMuc29ydCh0aGlzLmdldERlZmF1bHRPcmRlcigpLnJldmVyc2UoKSk7CisJfSwKKworCXJldmVyc2U6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLnNvcnQodGhpcy5jdXJyZW50T3JkZXIucmV2ZXJzZSgpKTsKKwl9LAorCisJc29ydEJ5RWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnRzKXsKKwkJcmV0dXJuIHRoaXMuc29ydChlbGVtZW50cy5tYXAoZnVuY3Rpb24oZWwpeworCQkJcmV0dXJuIHRoaXMuZWxlbWVudHMuaW5kZXhPZihlbCk7CisJCX0sIHRoaXMpKTsKKwl9LAorCisJc3dhcDogZnVuY3Rpb24ob25lLCB0d28peworCQlpZiAodHlwZU9mKG9uZSkgPT0gJ2VsZW1lbnQnKSBvbmUgPSB0aGlzLmVsZW1lbnRzLmluZGV4T2Yob25lKTsKKwkJaWYgKHR5cGVPZih0d28pID09ICdlbGVtZW50JykgdHdvID0gdGhpcy5lbGVtZW50cy5pbmRleE9mKHR3byk7CisKKwkJdmFyIG5ld09yZGVyID0gQXJyYXkuY2xvbmUodGhpcy5jdXJyZW50T3JkZXIpOworCQluZXdPcmRlclt0aGlzLmN1cnJlbnRPcmRlci5pbmRleE9mKG9uZSldID0gdHdvOworCQluZXdPcmRlclt0aGlzLmN1cnJlbnRPcmRlci5pbmRleE9mKHR3byldID0gb25lOworCisJCXJldHVybiB0aGlzLnNvcnQobmV3T3JkZXIpOworCX0KKworfSk7CisKKy8qCistLS0KKworc2NyaXB0OiBLZXlib2FyZC5qcworCituYW1lOiBLZXlib2FyZAorCitkZXNjcmlwdGlvbjogS2V5Ym9hcmRFdmVudHMgdXNlZCB0byBpbnRlcmNlcHQgZXZlbnRzIG9uIGEgY2xhc3MgZm9yIGtleWJvYXJkIGFuZCBmb3JtYXQgbW9kaWZpZXJzIGluIGEgc3BlY2lmaWMgb3JkZXIgc28gYXMgdG8gbWFrZSBhbHQrc2hpZnQrYyB0aGUgc2FtZSBhcyBzaGlmdCthbHQrYy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBQZXJyaW4gV2VzdHJpY2gKKyAgLSBBYXJvbiBOZXd0b24KKyAgLSBTY290dCBLeWxlCisKK3JlcXVpcmVzOgorICAtIENvcmUvRXZlbnRzCisgIC0gQ29yZS9PcHRpb25zCisgIC0gQ29yZS9FbGVtZW50LkV2ZW50CisgIC0gRWxlbWVudC5FdmVudC5Qc2V1ZG9zLktleXMKKworcHJvdmlkZXM6IFtLZXlib2FyZF0KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIEtleWJvYXJkID0gdGhpcy5LZXlib2FyZCA9IG5ldyBDbGFzcyh7CisKKwlFeHRlbmRzOiBFdmVudHMsCisKKwlJbXBsZW1lbnRzOiBbT3B0aW9uc10sCisKKwlvcHRpb25zOiB7LyoKKwkJb25BY3RpdmF0ZTogZnVuY3Rpb24oKXt9LAorCQlvbkRlYWN0aXZhdGU6IGZ1bmN0aW9uKCl7fSwqLworCQlkZWZhdWx0RXZlbnRUeXBlOiAna2V5ZG93bicsCisJCWFjdGl2ZTogZmFsc2UsCisJCW1hbmFnZXI6IG51bGwsCisJCWV2ZW50czoge30sCisJCW5vblBhcnNlZEV2ZW50czogWydhY3RpdmF0ZScsICdkZWFjdGl2YXRlJywgJ29uYWN0aXZhdGUnLCAnb25kZWFjdGl2YXRlJywgJ2NoYW5nZWQnLCAnb25jaGFuZ2VkJ10KKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7CisJCWlmIChvcHRpb25zICYmIG9wdGlvbnMubWFuYWdlcil7CisJCQl0aGlzLl9tYW5hZ2VyID0gb3B0aW9ucy5tYW5hZ2VyOworCQkJZGVsZXRlIG9wdGlvbnMubWFuYWdlcjsKKwkJfQorCQl0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7CisJCXRoaXMuX3NldHVwKCk7CisJfSwKKworCWFkZEV2ZW50OiBmdW5jdGlvbih0eXBlLCBmbiwgaW50ZXJuYWwpeworCQlyZXR1cm4gdGhpcy5wYXJlbnQoS2V5Ym9hcmQucGFyc2UodHlwZSwgdGhpcy5vcHRpb25zLmRlZmF1bHRFdmVudFR5cGUsIHRoaXMub3B0aW9ucy5ub25QYXJzZWRFdmVudHMpLCBmbiwgaW50ZXJuYWwpOworCX0sCisKKwlyZW1vdmVFdmVudDogZnVuY3Rpb24odHlwZSwgZm4peworCQlyZXR1cm4gdGhpcy5wYXJlbnQoS2V5Ym9hcmQucGFyc2UodHlwZSwgdGhpcy5vcHRpb25zLmRlZmF1bHRFdmVudFR5cGUsIHRoaXMub3B0aW9ucy5ub25QYXJzZWRFdmVudHMpLCBmbik7CisJfSwKKworCXRvZ2dsZUFjdGl2ZTogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXNbdGhpcy5pc0FjdGl2ZSgpID8gJ2RlYWN0aXZhdGUnIDogJ2FjdGl2YXRlJ10oKTsKKwl9LAorCisJYWN0aXZhdGU6IGZ1bmN0aW9uKGluc3RhbmNlKXsKKwkJaWYgKGluc3RhbmNlKXsKKwkJCWlmIChpbnN0YW5jZS5pc0FjdGl2ZSgpKSByZXR1cm4gdGhpczsKKwkJCS8vaWYgd2UncmUgc3RlYWxpbmcgZm9jdXMsIHN0b3JlIHRoZSBsYXN0IGtleWJvYXJkIHRvIGhhdmUgaXQgc28gdGhlIHJlbGlucXVpc2ggY29tbWFuZCB3b3JrcworCQkJaWYgKHRoaXMuX2FjdGl2ZUtCICYmIGluc3RhbmNlICE9IHRoaXMuX2FjdGl2ZUtCKXsKKwkJCQl0aGlzLnByZXZpb3VzID0gdGhpcy5fYWN0aXZlS0I7CisJCQkJdGhpcy5wcmV2aW91cy5maXJlRXZlbnQoJ2RlYWN0aXZhdGUnKTsKKwkJCX0KKwkJCS8vaWYgd2UncmUgZW5hYmxpbmcgYSBjaGlsZCwgYXNzaWduIGl0IHNvIHRoYXQgZXZlbnRzIGFyZSBub3cgcGFzc2VkIHRvIGl0CisJCQl0aGlzLl9hY3RpdmVLQiA9IGluc3RhbmNlLmZpcmVFdmVudCgnYWN0aXZhdGUnKTsKKwkJCUtleWJvYXJkLm1hbmFnZXIuZmlyZUV2ZW50KCdjaGFuZ2VkJyk7CisJCX0gZWxzZSBpZiAodGhpcy5fbWFuYWdlcil7CisJCQkvL2Vsc2Ugd2UncmUgZW5hYmxpbmcgb3Vyc2VsdmVzLCB3ZSBtdXN0IGFzayBvdXIgcGFyZW50IHRvIGRvIGl0IGZvciB1cworCQkJdGhpcy5fbWFuYWdlci5hY3RpdmF0ZSh0aGlzKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJaXNBY3RpdmU6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLl9tYW5hZ2VyID8gKHRoaXMuX21hbmFnZXIuX2FjdGl2ZUtCID09IHRoaXMpIDogKEtleWJvYXJkLm1hbmFnZXIgPT0gdGhpcyk7CisJfSwKKworCWRlYWN0aXZhdGU6IGZ1bmN0aW9uKGluc3RhbmNlKXsKKwkJaWYgKGluc3RhbmNlKXsKKwkJCWlmIChpbnN0YW5jZSA9PT0gdGhpcy5fYWN0aXZlS0IpeworCQkJCXRoaXMuX2FjdGl2ZUtCID0gbnVsbDsKKwkJCQlpbnN0YW5jZS5maXJlRXZlbnQoJ2RlYWN0aXZhdGUnKTsKKwkJCQlLZXlib2FyZC5tYW5hZ2VyLmZpcmVFdmVudCgnY2hhbmdlZCcpOworCQkJfQorCQl9IGVsc2UgaWYgKHRoaXMuX21hbmFnZXIpeworCQkJdGhpcy5fbWFuYWdlci5kZWFjdGl2YXRlKHRoaXMpOworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwlyZWxpbnF1aXNoOiBmdW5jdGlvbigpeworCQlpZiAodGhpcy5pc0FjdGl2ZSgpICYmIHRoaXMuX21hbmFnZXIgJiYgdGhpcy5fbWFuYWdlci5wcmV2aW91cykgdGhpcy5fbWFuYWdlci5hY3RpdmF0ZSh0aGlzLl9tYW5hZ2VyLnByZXZpb3VzKTsKKwkJZWxzZSB0aGlzLmRlYWN0aXZhdGUoKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCS8vbWFuYWdlbWVudCBsb2dpYworCW1hbmFnZTogZnVuY3Rpb24oaW5zdGFuY2UpeworCQlpZiAoaW5zdGFuY2UuX21hbmFnZXIpIGluc3RhbmNlLl9tYW5hZ2VyLmRyb3AoaW5zdGFuY2UpOworCQl0aGlzLl9pbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7CisJCWluc3RhbmNlLl9tYW5hZ2VyID0gdGhpczsKKwkJaWYgKCF0aGlzLl9hY3RpdmVLQikgdGhpcy5hY3RpdmF0ZShpbnN0YW5jZSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlkcm9wOiBmdW5jdGlvbihpbnN0YW5jZSl7CisJCWluc3RhbmNlLnJlbGlucXVpc2goKTsKKwkJdGhpcy5faW5zdGFuY2VzLmVyYXNlKGluc3RhbmNlKTsKKwkJaWYgKHRoaXMuX2FjdGl2ZUtCID09IGluc3RhbmNlKXsKKwkJCWlmICh0aGlzLnByZXZpb3VzICYmIHRoaXMuX2luc3RhbmNlcy5jb250YWlucyh0aGlzLnByZXZpb3VzKSkgdGhpcy5hY3RpdmF0ZSh0aGlzLnByZXZpb3VzKTsKKwkJCWVsc2UgdGhpcy5fYWN0aXZlS0IgPSB0aGlzLl9pbnN0YW5jZXNbMF07CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXRyYWNlOiBmdW5jdGlvbigpeworCQlLZXlib2FyZC50cmFjZSh0aGlzKTsKKwl9LAorCisJZWFjaDogZnVuY3Rpb24oZm4peworCQlLZXlib2FyZC5lYWNoKHRoaXMsIGZuKTsKKwl9LAorCisJLyoKKwkJUFJJVkFURSBNRVRIT0RTCisJKi8KKworCV9pbnN0YW5jZXM6IFtdLAorCisJX2Rpc2FibGU6IGZ1bmN0aW9uKGluc3RhbmNlKXsKKwkJaWYgKHRoaXMuX2FjdGl2ZUtCID09IGluc3RhbmNlKSB0aGlzLl9hY3RpdmVLQiA9IG51bGw7CisJfSwKKworCV9zZXR1cDogZnVuY3Rpb24oKXsKKwkJdGhpcy5hZGRFdmVudHModGhpcy5vcHRpb25zLmV2ZW50cyk7CisJCS8vaWYgdGhpcyBpcyB0aGUgcm9vdCBtYW5hZ2VyLCBub3RoaW5nIG1hbmFnZXMgaXQKKwkJaWYgKEtleWJvYXJkLm1hbmFnZXIgJiYgIXRoaXMuX21hbmFnZXIpIEtleWJvYXJkLm1hbmFnZXIubWFuYWdlKHRoaXMpOworCQlpZiAodGhpcy5vcHRpb25zLmFjdGl2ZSkgdGhpcy5hY3RpdmF0ZSgpOworCQllbHNlIHRoaXMucmVsaW5xdWlzaCgpOworCX0sCisKKwlfaGFuZGxlOiBmdW5jdGlvbihldmVudCwgdHlwZSl7CisJCS8vS2V5Ym9hcmQuc3RvcChldmVudCkgcHJldmVudHMga2V5IHByb3BhZ2F0aW9uCisJCWlmIChldmVudC5wcmV2ZW50S2V5Ym9hcmRQcm9wYWdhdGlvbikgcmV0dXJuOworCisJCXZhciBidWJibGVzID0gISF0aGlzLl9tYW5hZ2VyOworCQlpZiAoYnViYmxlcyAmJiB0aGlzLl9hY3RpdmVLQil7CisJCQl0aGlzLl9hY3RpdmVLQi5faGFuZGxlKGV2ZW50LCB0eXBlKTsKKwkJCWlmIChldmVudC5wcmV2ZW50S2V5Ym9hcmRQcm9wYWdhdGlvbikgcmV0dXJuOworCQl9CisJCXRoaXMuZmlyZUV2ZW50KHR5cGUsIGV2ZW50KTsKKworCQlpZiAoIWJ1YmJsZXMgJiYgdGhpcy5fYWN0aXZlS0IpIHRoaXMuX2FjdGl2ZUtCLl9oYW5kbGUoZXZlbnQsIHR5cGUpOworCX0KKworfSk7CisKK3ZhciBwYXJzZWQgPSB7fTsKK3ZhciBtb2RpZmllcnMgPSBbJ3NoaWZ0JywgJ2NvbnRyb2wnLCAnYWx0JywgJ21ldGEnXTsKK3ZhciByZWdleCA9IC9eKD86c2hpZnR8Y29udHJvbHxjdHJsfGFsdHxtZXRhKSQvOworCitLZXlib2FyZC5wYXJzZSA9IGZ1bmN0aW9uKHR5cGUsIGV2ZW50VHlwZSwgaWdub3JlKXsKKwlpZiAoaWdub3JlICYmIGlnbm9yZS5jb250YWlucyh0eXBlLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gdHlwZTsKKworCXR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXihrZXl1cHxrZXlkb3duKTovLCBmdW5jdGlvbigkMCwgJDEpeworCQlldmVudFR5cGUgPSAkMTsKKwkJcmV0dXJuICcnOworCX0pOworCisJaWYgKCFwYXJzZWRbdHlwZV0peworCQlpZiAodHlwZSAhPSAnKycpeworCQkJdmFyIGtleSwgbW9kcyA9IHt9OworCQkJdHlwZS5zcGxpdCgnKycpLmVhY2goZnVuY3Rpb24ocGFydCl7CisJCQkJaWYgKHJlZ2V4LnRlc3QocGFydCkpIG1vZHNbcGFydF0gPSB0cnVlOworCQkJCWVsc2Uga2V5ID0gcGFydDsKKwkJCX0pOworCisJCQltb2RzLmNvbnRyb2wgPSBtb2RzLmNvbnRyb2wgfHwgbW9kcy5jdHJsOyAvLyBhbGxvdyBib3RoIGNvbnRyb2wgYW5kIGN0cmwKKworCQkJdmFyIGtleXMgPSBbXTsKKwkJCW1vZGlmaWVycy5lYWNoKGZ1bmN0aW9uKG1vZCl7CisJCQkJaWYgKG1vZHNbbW9kXSkga2V5cy5wdXNoKG1vZCk7CisJCQl9KTsKKworCQkJaWYgKGtleSkga2V5cy5wdXNoKGtleSk7CisJCQlwYXJzZWRbdHlwZV0gPSBrZXlzLmpvaW4oJysnKTsKKwkJfSBlbHNlIHsKKwkJCXBhcnNlZFt0eXBlXSA9IHR5cGU7CisJCX0KKwl9CisKKwlyZXR1cm4gZXZlbnRUeXBlICsgJzprZXlzKCcgKyBwYXJzZWRbdHlwZV0gKyAnKSc7Cit9OworCitLZXlib2FyZC5lYWNoID0gZnVuY3Rpb24oa2V5Ym9hcmQsIGZuKXsKKwl2YXIgY3VycmVudCA9IGtleWJvYXJkIHx8IEtleWJvYXJkLm1hbmFnZXI7CisJd2hpbGUgKGN1cnJlbnQpeworCQlmbihjdXJyZW50KTsKKwkJY3VycmVudCA9IGN1cnJlbnQuX2FjdGl2ZUtCOworCX0KK307CisKK0tleWJvYXJkLnN0b3AgPSBmdW5jdGlvbihldmVudCl7CisJZXZlbnQucHJldmVudEtleWJvYXJkUHJvcGFnYXRpb24gPSB0cnVlOworfTsKKworS2V5Ym9hcmQubWFuYWdlciA9IG5ldyBLZXlib2FyZCh7CisJYWN0aXZlOiB0cnVlCit9KTsKKworS2V5Ym9hcmQudHJhY2UgPSBmdW5jdGlvbihrZXlib2FyZCl7CisJa2V5Ym9hcmQgPSBrZXlib2FyZCB8fCBLZXlib2FyZC5tYW5hZ2VyOworCXZhciBoYXNDb25zb2xlID0gd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5sb2c7CisJaWYgKGhhc0NvbnNvbGUpIGNvbnNvbGUubG9nKCd0aGUgZm9sbG93aW5nIGl0ZW1zIGhhdmUgZm9jdXM6ICcpOworCUtleWJvYXJkLmVhY2goa2V5Ym9hcmQsIGZ1bmN0aW9uKGN1cnJlbnQpeworCQlpZiAoaGFzQ29uc29sZSkgY29uc29sZS5sb2coZG9jdW1lbnQuaWQoY3VycmVudC53aWRnZXQpIHx8IGN1cnJlbnQud2lnZXQgfHwgY3VycmVudCk7CisJfSk7Cit9OworCit2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50KXsKKwl2YXIga2V5cyA9IFtdOworCW1vZGlmaWVycy5lYWNoKGZ1bmN0aW9uKG1vZCl7CisJCWlmIChldmVudFttb2RdKSBrZXlzLnB1c2gobW9kKTsKKwl9KTsKKworCWlmICghcmVnZXgudGVzdChldmVudC5rZXkpKSBrZXlzLnB1c2goZXZlbnQua2V5KTsKKwlLZXlib2FyZC5tYW5hZ2VyLl9oYW5kbGUoZXZlbnQsIGV2ZW50LnR5cGUgKyAnOmtleXMoJyArIGtleXMuam9pbignKycpICsgJyknKTsKK307CisKK2RvY3VtZW50LmFkZEV2ZW50cyh7CisJJ2tleXVwJzogaGFuZGxlciwKKwkna2V5ZG93bic6IGhhbmRsZXIKK30pOworCit9KSgpOworCisvKgorLS0tCisKK3NjcmlwdDogS2V5Ym9hcmQuRXh0cmFzLmpzCisKK25hbWU6IEtleWJvYXJkLkV4dHJhcworCitkZXNjcmlwdGlvbjogRW5oYW5jZXMgS2V5Ym9hcmQgYnkgYWRkaW5nIHRoZSBhYmlsaXR5IHRvIG5hbWUgYW5kIGRlc2NyaWJlIGtleWJvYXJkIHNob3J0Y3V0cywgYW5kIHRoZSBhYmlsaXR5IHRvIGdyYWIgc2hvcnRjdXRzIGJ5IG5hbWUgYW5kIGJpbmQgdGhlIHNob3J0Y3V0IHRvIGRpZmZlcmVudCBrZXlzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFBlcnJpbiBXZXN0cmljaAorCityZXF1aXJlczoKKyAgLSBLZXlib2FyZAorICAtIE1vb1Rvb2xzLk1vcmUKKworcHJvdmlkZXM6IFtLZXlib2FyZC5FeHRyYXNdCisKKy4uLgorKi8KK0tleWJvYXJkLnByb3RvdHlwZS5vcHRpb25zLm5vblBhcnNlZEV2ZW50cy5jb21iaW5lKFsncmVib3VuZCcsICdvbnJlYm91bmQnXSk7CisKK0tleWJvYXJkLmltcGxlbWVudCh7CisKKwkvKgorCQlzaG9ydGN1dCBzaG91bGQgYmUgaW4gdGhlIGZvcm1hdCBvZjoKKwkJeworCQkJJ2tleXMnOiAnc2hpZnQrcycsIC8vIHRoZSBkZWZhdWx0IHRvIGFkZCBhcyBhbiBldmVudC4KKwkJCSdkZXNjcmlwdGlvbic6ICdibGFoIGJsYWggYmxhaCcsIC8vIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9uYWxpdHkuCisJCQknaGFuZGxlcic6IGZ1bmN0aW9uKCl7fSAvLyB0aGUgZXZlbnQgaGFuZGxlciB0byBydW4gd2hlbiBrZXlzIGFyZSBwcmVzc2VkLgorCQl9CisJKi8KKwlhZGRTaG9ydGN1dDogZnVuY3Rpb24obmFtZSwgc2hvcnRjdXQpeworCQl0aGlzLl9zaG9ydGN1dHMgPSB0aGlzLl9zaG9ydGN1dHMgfHwgW107CisJCXRoaXMuX3Nob3J0Y3V0SW5kZXggPSB0aGlzLl9zaG9ydGN1dEluZGV4IHx8IHt9OworCisJCXNob3J0Y3V0LmdldEtleWJvYXJkID0gRnVuY3Rpb24uY29udmVydCh0aGlzKTsKKwkJc2hvcnRjdXQubmFtZSA9IG5hbWU7CisJCXRoaXMuX3Nob3J0Y3V0SW5kZXhbbmFtZV0gPSBzaG9ydGN1dDsKKwkJdGhpcy5fc2hvcnRjdXRzLnB1c2goc2hvcnRjdXQpOworCQlpZiAoc2hvcnRjdXQua2V5cykgdGhpcy5hZGRFdmVudChzaG9ydGN1dC5rZXlzLCBzaG9ydGN1dC5oYW5kbGVyKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWFkZFNob3J0Y3V0czogZnVuY3Rpb24ob2JqKXsKKwkJZm9yICh2YXIgbmFtZSBpbiBvYmopIHRoaXMuYWRkU2hvcnRjdXQobmFtZSwgb2JqW25hbWVdKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXJlbW92ZVNob3J0Y3V0OiBmdW5jdGlvbihuYW1lKXsKKwkJdmFyIHNob3J0Y3V0ID0gdGhpcy5nZXRTaG9ydGN1dChuYW1lKTsKKwkJaWYgKHNob3J0Y3V0ICYmIHNob3J0Y3V0LmtleXMpeworCQkJdGhpcy5yZW1vdmVFdmVudChzaG9ydGN1dC5rZXlzLCBzaG9ydGN1dC5oYW5kbGVyKTsKKwkJCWRlbGV0ZSB0aGlzLl9zaG9ydGN1dEluZGV4W25hbWVdOworCQkJdGhpcy5fc2hvcnRjdXRzLmVyYXNlKHNob3J0Y3V0KTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVtb3ZlU2hvcnRjdXRzOiBmdW5jdGlvbihuYW1lcyl7CisJCW5hbWVzLmVhY2godGhpcy5yZW1vdmVTaG9ydGN1dCwgdGhpcyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXRTaG9ydGN1dHM6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLl9zaG9ydGN1dHMgfHwgW107CisJfSwKKworCWdldFNob3J0Y3V0OiBmdW5jdGlvbihuYW1lKXsKKwkJcmV0dXJuICh0aGlzLl9zaG9ydGN1dEluZGV4IHx8IHt9KVtuYW1lXTsKKwl9CisKK30pOworCitLZXlib2FyZC5yZWJpbmQgPSBmdW5jdGlvbihuZXdLZXlzLCBzaG9ydGN1dHMpeworCUFycmF5LmNvbnZlcnQoc2hvcnRjdXRzKS5lYWNoKGZ1bmN0aW9uKHNob3J0Y3V0KXsKKwkJc2hvcnRjdXQuZ2V0S2V5Ym9hcmQoKS5yZW1vdmVFdmVudChzaG9ydGN1dC5rZXlzLCBzaG9ydGN1dC5oYW5kbGVyKTsKKwkJc2hvcnRjdXQuZ2V0S2V5Ym9hcmQoKS5hZGRFdmVudChuZXdLZXlzLCBzaG9ydGN1dC5oYW5kbGVyKTsKKwkJc2hvcnRjdXQua2V5cyA9IG5ld0tleXM7CisJCXNob3J0Y3V0LmdldEtleWJvYXJkKCkuZmlyZUV2ZW50KCdyZWJvdW5kJyk7CisJfSk7Cit9OworCisKK0tleWJvYXJkLmdldEFjdGl2ZVNob3J0Y3V0cyA9IGZ1bmN0aW9uKGtleWJvYXJkKXsKKwl2YXIgYWN0aXZlS0JTID0gW10sIGFjdGl2ZVNDUyA9IFtdOworCUtleWJvYXJkLmVhY2goa2V5Ym9hcmQsIFtdLnB1c2guYmluZChhY3RpdmVLQlMpKTsKKwlhY3RpdmVLQlMuZWFjaChmdW5jdGlvbihrYil7IGFjdGl2ZVNDUy5leHRlbmQoa2IuZ2V0U2hvcnRjdXRzKCkpOyB9KTsKKwlyZXR1cm4gYWN0aXZlU0NTOworfTsKKworS2V5Ym9hcmQuZ2V0U2hvcnRjdXQgPSBmdW5jdGlvbihuYW1lLCBrZXlib2FyZCwgb3B0cyl7CisJb3B0cyA9IG9wdHMgfHwge307CisJdmFyIHNob3J0Y3V0cyA9IG9wdHMubWFueSA/IFtdIDogbnVsbCwKKwkJc2V0ID0gb3B0cy5tYW55ID8gZnVuY3Rpb24oa2IpeworCQkJdmFyIHNob3J0Y3V0ID0ga2IuZ2V0U2hvcnRjdXQobmFtZSk7CisJCQlpZiAoc2hvcnRjdXQpIHNob3J0Y3V0cy5wdXNoKHNob3J0Y3V0KTsKKwkJfSA6IGZ1bmN0aW9uKGtiKXsKKwkJCWlmICghc2hvcnRjdXRzKSBzaG9ydGN1dHMgPSBrYi5nZXRTaG9ydGN1dChuYW1lKTsKKwkJfTsKKwlLZXlib2FyZC5lYWNoKGtleWJvYXJkLCBzZXQpOworCXJldHVybiBzaG9ydGN1dHM7Cit9OworCitLZXlib2FyZC5nZXRTaG9ydGN1dHMgPSBmdW5jdGlvbihuYW1lLCBrZXlib2FyZCl7CisJcmV0dXJuIEtleWJvYXJkLmdldFNob3J0Y3V0KG5hbWUsIGtleWJvYXJkLCB7IG1hbnk6IHRydWUgfSk7Cit9OworCisvKgorLS0tCisKK3NjcmlwdDogSHRtbFRhYmxlLmpzCisKK25hbWU6IEh0bWxUYWJsZQorCitkZXNjcmlwdGlvbjogQnVpbGRzIHRhYmxlIGVsZW1lbnRzIHdpdGggbWV0aG9kcyB0byBhZGQgcm93cy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gQ29yZS9PcHRpb25zCisgIC0gQ29yZS9FdmVudHMKKyAgLSBDbGFzcy5PY2NsdWRlCisKK3Byb3ZpZGVzOiBbSHRtbFRhYmxlXQorCisuLi4KKyovCisoZnVuY3Rpb24oKXsKKwordmFyIEh0bWxUYWJsZSA9IHRoaXMuSHRtbFRhYmxlID0gbmV3IENsYXNzKHsKKworCUltcGxlbWVudHM6IFtPcHRpb25zLCBFdmVudHMsIENsYXNzLk9jY2x1ZGVdLAorCisJb3B0aW9uczogeworCQlwcm9wZXJ0aWVzOiB7CisJCQljZWxscGFkZGluZzogMCwKKwkJCWNlbGxzcGFjaW5nOiAwLAorCQkJYm9yZGVyOiAwCisJCX0sCisJCXJvd3M6IFtdLAorCQloZWFkZXJzOiBbXSwKKwkJZm9vdGVyczogW10KKwl9LAorCisJcHJvcGVydHk6ICdIdG1sVGFibGUnLAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24oKXsKKwkJdmFyIHBhcmFtcyA9IEFycmF5LmxpbmsoYXJndW1lbnRzLCB7b3B0aW9uczogVHlwZS5pc09iamVjdCwgdGFibGU6IFR5cGUuaXNFbGVtZW50LCBpZDogVHlwZS5pc1N0cmluZ30pOworCQl0aGlzLnNldE9wdGlvbnMocGFyYW1zLm9wdGlvbnMpOworCQlpZiAoIXBhcmFtcy50YWJsZSAmJiBwYXJhbXMuaWQpIHBhcmFtcy50YWJsZSA9IGRvY3VtZW50LmlkKHBhcmFtcy5pZCk7CisJCXRoaXMuZWxlbWVudCA9IHBhcmFtcy50YWJsZSB8fCBuZXcgRWxlbWVudCgndGFibGUnLCB0aGlzLm9wdGlvbnMucHJvcGVydGllcyk7CisJCWlmICh0aGlzLm9jY2x1ZGUoKSkgcmV0dXJuIHRoaXMub2NjbHVkZWQ7CisJCXRoaXMuYnVpbGQoKTsKKwl9LAorCisJYnVpbGQ6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZWxlbWVudC5zdG9yZSgnSHRtbFRhYmxlJywgdGhpcyk7CisKKwkJdGhpcy5ib2R5ID0gZG9jdW1lbnQuaWQodGhpcy5lbGVtZW50LnRCb2RpZXNbMF0pIHx8IG5ldyBFbGVtZW50KCd0Ym9keScpLmluamVjdCh0aGlzLmVsZW1lbnQpOworCQkkJCh0aGlzLmJvZHkucm93cyk7CisKKwkJaWYgKHRoaXMub3B0aW9ucy5oZWFkZXJzLmxlbmd0aCkgdGhpcy5zZXRIZWFkZXJzKHRoaXMub3B0aW9ucy5oZWFkZXJzKTsKKwkJZWxzZSB0aGlzLnRoZWFkID0gZG9jdW1lbnQuaWQodGhpcy5lbGVtZW50LnRIZWFkKTsKKworCQlpZiAodGhpcy50aGVhZCkgdGhpcy5oZWFkID0gdGhpcy5nZXRIZWFkKCk7CisJCWlmICh0aGlzLm9wdGlvbnMuZm9vdGVycy5sZW5ndGgpIHRoaXMuc2V0Rm9vdGVycyh0aGlzLm9wdGlvbnMuZm9vdGVycyk7CisKKwkJdGhpcy50Zm9vdCA9IGRvY3VtZW50LmlkKHRoaXMuZWxlbWVudC50Rm9vdCk7CisJCWlmICh0aGlzLnRmb290KSB0aGlzLmZvb3QgPSBkb2N1bWVudC5pZCh0aGlzLnRmb290LnJvd3NbMF0pOworCisJCXRoaXMub3B0aW9ucy5yb3dzLmVhY2goZnVuY3Rpb24ocm93KXsKKwkJCXRoaXMucHVzaChyb3cpOworCQl9LCB0aGlzKTsKKwl9LAorCisJdG9FbGVtZW50OiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5lbGVtZW50OworCX0sCisKKwllbXB0eTogZnVuY3Rpb24oKXsKKwkJdGhpcy5ib2R5LmVtcHR5KCk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlzZXQ6IGZ1bmN0aW9uKHdoYXQsIGl0ZW1zKXsKKwkJdmFyIHRhcmdldCA9ICh3aGF0ID09ICdoZWFkZXJzJykgPyAndEhlYWQnIDogJ3RGb290JywKKwkJCWxvd2VyID0gdGFyZ2V0LnRvTG93ZXJDYXNlKCk7CisKKwkJdGhpc1tsb3dlcl0gPSAoZG9jdW1lbnQuaWQodGhpcy5lbGVtZW50W3RhcmdldF0pIHx8IG5ldyBFbGVtZW50KGxvd2VyKS5pbmplY3QodGhpcy5lbGVtZW50LCAndG9wJykpLmVtcHR5KCk7CisJCXZhciBkYXRhID0gdGhpcy5wdXNoKGl0ZW1zLCB7fSwgdGhpc1tsb3dlcl0sIHdoYXQgPT0gJ2hlYWRlcnMnID8gJ3RoJyA6ICd0ZCcpOworCisJCWlmICh3aGF0ID09ICdoZWFkZXJzJykgdGhpcy5oZWFkID0gdGhpcy5nZXRIZWFkKCk7CisJCWVsc2UgdGhpcy5mb290ID0gdGhpcy5nZXRIZWFkKCk7CisKKwkJcmV0dXJuIGRhdGE7CisJfSwKKworCWdldEhlYWQ6IGZ1bmN0aW9uKCl7CisJCXZhciByb3dzID0gdGhpcy50aGVhZC5yb3dzOworCQlyZXR1cm4gcm93cy5sZW5ndGggPiAxID8gJCQocm93cykgOiByb3dzLmxlbmd0aCA/IGRvY3VtZW50LmlkKHJvd3NbMF0pIDogZmFsc2U7CisJfSwKKworCXNldEhlYWRlcnM6IGZ1bmN0aW9uKGhlYWRlcnMpeworCQl0aGlzLnNldCgnaGVhZGVycycsIGhlYWRlcnMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJc2V0Rm9vdGVyczogZnVuY3Rpb24oZm9vdGVycyl7CisJCXRoaXMuc2V0KCdmb290ZXJzJywgZm9vdGVycyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwl1cGRhdGU6IGZ1bmN0aW9uKHRyLCByb3csIHRhZyl7CisJCXZhciB0ZHMgPSB0ci5nZXRDaGlsZHJlbih0YWcgfHwgJ3RkJyksIGxhc3QgPSB0ZHMubGVuZ3RoIC0gMTsKKworCQlyb3cuZWFjaChmdW5jdGlvbihkYXRhLCBpbmRleCl7CisJCQl2YXIgdGQgPSB0ZHNbaW5kZXhdIHx8IG5ldyBFbGVtZW50KHRhZyB8fCAndGQnKS5pbmplY3QodHIpLAorCQkJCWNvbnRlbnQgPSAoKGRhdGEgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsICdjb250ZW50JykpID8gZGF0YS5jb250ZW50IDogJycpIHx8IGRhdGEsCisJCQkJdHlwZSA9IHR5cGVPZihjb250ZW50KTsKKworCQkJaWYgKGRhdGEgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsICdwcm9wZXJ0aWVzJykpIHRkLnNldChkYXRhLnByb3BlcnRpZXMpOworCQkJaWYgKC8oZWxlbWVudChzPyl8YXJyYXl8Y29sbGVjdGlvbikvLnRlc3QodHlwZSkpIHRkLmVtcHR5KCkuYWRvcHQoY29udGVudCk7CisJCQllbHNlIHRkLnNldCgnaHRtbCcsIGNvbnRlbnQpOworCisJCQlpZiAoaW5kZXggPiBsYXN0KSB0ZHMucHVzaCh0ZCk7CisJCQllbHNlIHRkc1tpbmRleF0gPSB0ZDsKKwkJfSk7CisKKwkJcmV0dXJuIHsKKwkJCXRyOiB0ciwKKwkJCXRkczogdGRzCisJCX07CisJfSwKKworCXB1c2g6IGZ1bmN0aW9uKHJvdywgcm93UHJvcGVydGllcywgdGFyZ2V0LCB0YWcsIHdoZXJlKXsKKwkJaWYgKHR5cGVPZihyb3cpID09ICdlbGVtZW50JyAmJiByb3cuZ2V0KCd0YWcnKSA9PSAndHInKXsKKwkJCXJvdy5pbmplY3QodGFyZ2V0IHx8IHRoaXMuYm9keSwgd2hlcmUpOworCQkJcmV0dXJuIHsKKwkJCQl0cjogcm93LAorCQkJCXRkczogcm93LmdldENoaWxkcmVuKCd0ZCcpCisJCQl9OworCQl9CisJCXJldHVybiB0aGlzLnVwZGF0ZShuZXcgRWxlbWVudCgndHInLCByb3dQcm9wZXJ0aWVzKS5pbmplY3QodGFyZ2V0IHx8IHRoaXMuYm9keSwgd2hlcmUpLCByb3csIHRhZyk7CisJfSwKKworCXB1c2hNYW55OiBmdW5jdGlvbihyb3dzLCByb3dQcm9wZXJ0aWVzLCB0YXJnZXQsIHRhZywgd2hlcmUpeworCQlyZXR1cm4gcm93cy5tYXAoZnVuY3Rpb24ocm93KXsKKwkJCXJldHVybiB0aGlzLnB1c2gocm93LCByb3dQcm9wZXJ0aWVzLCB0YXJnZXQsIHRhZywgd2hlcmUpOworCQl9LCB0aGlzKTsKKwl9CisKK30pOworCit9KSgpOworCisKK1snYWRvcHQnLCAnaW5qZWN0JywgJ3dyYXBzJywgJ2dyYWInLCAncmVwbGFjZXMnLCAnZGlzcG9zZSddLmVhY2goZnVuY3Rpb24obWV0aG9kKXsKKwlIdG1sVGFibGUuaW1wbGVtZW50KG1ldGhvZCwgZnVuY3Rpb24oKXsKKwkJdGhpcy5lbGVtZW50W21ldGhvZF0uYXBwbHkodGhpcy5lbGVtZW50LCBhcmd1bWVudHMpOworCQlyZXR1cm4gdGhpczsKKwl9KTsKK30pOworCisKKworLyoKKy0tLQorCitzY3JpcHQ6IEh0bWxUYWJsZS5TZWxlY3QuanMKKworbmFtZTogSHRtbFRhYmxlLlNlbGVjdAorCitkZXNjcmlwdGlvbjogQnVpbGRzIGEgc3RyaXB5LCBzb3J0YWJsZSB0YWJsZSB3aXRoIG1ldGhvZHMgdG8gYWRkIHJvd3MuIFJvd3MgY2FuIGJlIHNlbGVjdGVkIHdpdGggdGhlIG1vdXNlIG9yIGtleWJvYXJkIG5hdmlnYXRpb24uCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gSGFyYWxkIEtpcnNjaG5lcgorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSBLZXlib2FyZAorICAtIEtleWJvYXJkLkV4dHJhcworICAtIEh0bWxUYWJsZQorICAtIENsYXNzLnJlZmFjdG9yCisgIC0gRWxlbWVudC5EZWxlZ2F0aW9uLlBzZXVkbworICAtIEVsZW1lbnQuU2hvcnRjdXRzCisKK3Byb3ZpZGVzOiBbSHRtbFRhYmxlLlNlbGVjdF0KKworLi4uCisqLworCitIdG1sVGFibGUgPSBDbGFzcy5yZWZhY3RvcihIdG1sVGFibGUsIHsKKworCW9wdGlvbnM6IHsKKwkJLypvblJvd0ZvY3VzOiBmdW5jdGlvbigpe30sCisJCW9uUm93VW5mb2N1czogZnVuY3Rpb24oKXt9LCovCisJCXVzZUtleWJvYXJkOiB0cnVlLAorCQljbGFzc1Jvd1NlbGVjdGVkOiAndGFibGUtdHItc2VsZWN0ZWQnLAorCQljbGFzc1Jvd0hvdmVyZWQ6ICd0YWJsZS10ci1ob3ZlcmVkJywKKwkJY2xhc3NTZWxlY3RhYmxlOiAndGFibGUtc2VsZWN0YWJsZScsCisJCXNoaWZ0Rm9yTXVsdGlTZWxlY3Q6IHRydWUsCisJCWFsbG93TXVsdGlTZWxlY3Q6IHRydWUsCisJCXNlbGVjdGFibGU6IGZhbHNlLAorCQlzZWxlY3RIaWRkZW5Sb3dzOiBmYWxzZQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbigpeworCQl0aGlzLnByZXZpb3VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisJCWlmICh0aGlzLm9jY2x1ZGVkKSByZXR1cm4gdGhpcy5vY2NsdWRlZDsKKworCQl0aGlzLnNlbGVjdGVkUm93cyA9IG5ldyBFbGVtZW50cygpOworCisJCWlmICghdGhpcy5ib3VuZCkgdGhpcy5ib3VuZCA9IHt9OworCQl0aGlzLmJvdW5kLm1vdXNlbGVhdmUgPSB0aGlzLm1vdXNlbGVhdmUuYmluZCh0aGlzKTsKKwkJdGhpcy5ib3VuZC5jbGlja1JvdyA9IHRoaXMuY2xpY2tSb3cuYmluZCh0aGlzKTsKKwkJdGhpcy5ib3VuZC5hY3RpdmF0ZUtleWJvYXJkID0gZnVuY3Rpb24oKXsKKwkJCWlmICh0aGlzLmtleWJvYXJkICYmIHRoaXMuc2VsZWN0RW5hYmxlZCkgdGhpcy5rZXlib2FyZC5hY3RpdmF0ZSgpOworCQl9LmJpbmQodGhpcyk7CisKKwkJaWYgKHRoaXMub3B0aW9ucy5zZWxlY3RhYmxlKSB0aGlzLmVuYWJsZVNlbGVjdCgpOworCX0sCisKKwllbXB0eTogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMuYm9keS5yb3dzLmxlbmd0aCkgdGhpcy5zZWxlY3ROb25lKCk7CisJCXJldHVybiB0aGlzLnByZXZpb3VzKCk7CisJfSwKKworCWVuYWJsZVNlbGVjdDogZnVuY3Rpb24oKXsKKwkJdGhpcy5zZWxlY3RFbmFibGVkID0gdHJ1ZTsKKwkJdGhpcy5hdHRhY2hTZWxlY3RzKCk7CisJCXRoaXMuZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuY2xhc3NTZWxlY3RhYmxlKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWRpc2FibGVTZWxlY3Q6IGZ1bmN0aW9uKCl7CisJCXRoaXMuc2VsZWN0RW5hYmxlZCA9IGZhbHNlOworCQl0aGlzLmF0dGFjaFNlbGVjdHMoZmFsc2UpOworCQl0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmNsYXNzU2VsZWN0YWJsZSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlwdXNoOiBmdW5jdGlvbigpeworCQl2YXIgcmV0ID0gdGhpcy5wcmV2aW91cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCQl0aGlzLnVwZGF0ZVNlbGVjdHMoKTsKKwkJcmV0dXJuIHJldDsKKwl9LAorCisJdG9nZ2xlUm93OiBmdW5jdGlvbihyb3cpeworCQlyZXR1cm4gdGhpc1sodGhpcy5pc1NlbGVjdGVkKHJvdykgPyAnZGUnIDogJycpICsgJ3NlbGVjdFJvdyddKHJvdyk7CisJfSwKKworCXNlbGVjdFJvdzogZnVuY3Rpb24ocm93LCBfbm9jaGVjayl7CisJCS8vcHJpdmF0ZSB2YXJpYWJsZSBfbm9jaGVjazogYm9vbGVhbiB3aGV0aGVyIG9yIG5vdCB0byBjb25maXJtIHRoZSByb3cgaXMgaW4gdGhlIHRhYmxlIGJvZHkKKwkJLy9hZGRlZCBoZXJlIGZvciBvcHRpbWl6YXRpb24gd2hlbiBzZWxlY3RpbmcgcmFuZ2VzCisJCWlmICh0aGlzLmlzU2VsZWN0ZWQocm93KSB8fCAoIV9ub2NoZWNrICYmICF0aGlzLmJvZHkuZ2V0Q2hpbGRyZW4oKS5jb250YWlucyhyb3cpKSkgcmV0dXJuOworCQlpZiAoIXRoaXMub3B0aW9ucy5hbGxvd011bHRpU2VsZWN0KSB0aGlzLnNlbGVjdE5vbmUoKTsKKworCQlpZiAoIXRoaXMuaXNTZWxlY3RlZChyb3cpKXsKKwkJCXRoaXMuc2VsZWN0ZWRSb3dzLnB1c2gocm93KTsKKwkJCXJvdy5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuY2xhc3NSb3dTZWxlY3RlZCk7CisJCQl0aGlzLmZpcmVFdmVudCgncm93Rm9jdXMnLCBbcm93LCB0aGlzLnNlbGVjdGVkUm93c10pOworCQkJdGhpcy5maXJlRXZlbnQoJ3N0YXRlQ2hhbmdlZCcpOworCQl9CisKKwkJdGhpcy5mb2N1c2VkID0gcm93OworCQlkb2N1bWVudC5jbGVhclNlbGVjdGlvbigpOworCisJCXJldHVybiB0aGlzOworCX0sCisKKwlpc1NlbGVjdGVkOiBmdW5jdGlvbihyb3cpeworCQlyZXR1cm4gdGhpcy5zZWxlY3RlZFJvd3MuY29udGFpbnMocm93KTsKKwl9LAorCisJZ2V0U2VsZWN0ZWQ6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLnNlbGVjdGVkUm93czsKKwl9LAorCisJc2VyaWFsaXplOiBmdW5jdGlvbigpeworCQl2YXIgcHJldmlvdXNTZXJpYWxpemF0aW9uID0gdGhpcy5wcmV2aW91cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHt9OworCQlpZiAodGhpcy5vcHRpb25zLnNlbGVjdGFibGUpeworCQkJcHJldmlvdXNTZXJpYWxpemF0aW9uLnNlbGVjdGVkUm93cyA9IHRoaXMuc2VsZWN0ZWRSb3dzLm1hcChmdW5jdGlvbihyb3cpeworCQkJCXJldHVybiBBcnJheS5pbmRleE9mKHRoaXMuYm9keS5yb3dzLCByb3cpOworCQkJfS5iaW5kKHRoaXMpKTsKKwkJfQorCQlyZXR1cm4gcHJldmlvdXNTZXJpYWxpemF0aW9uOworCX0sCisKKwlyZXN0b3JlOiBmdW5jdGlvbih0YWJsZVN0YXRlKXsKKwkJaWYgKHRoaXMub3B0aW9ucy5zZWxlY3RhYmxlICYmIHRhYmxlU3RhdGUuc2VsZWN0ZWRSb3dzKXsKKwkJCXRhYmxlU3RhdGUuc2VsZWN0ZWRSb3dzLmVhY2goZnVuY3Rpb24oaW5kZXgpeworCQkJCXRoaXMuc2VsZWN0Um93KHRoaXMuYm9keS5yb3dzW2luZGV4XSk7CisJCQl9LmJpbmQodGhpcykpOworCQl9CisJCXRoaXMucHJldmlvdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKwl9LAorCisJZGVzZWxlY3RSb3c6IGZ1bmN0aW9uKHJvdywgX25vY2hlY2speworCQlpZiAoIXRoaXMuaXNTZWxlY3RlZChyb3cpIHx8ICghX25vY2hlY2sgJiYgIXRoaXMuYm9keS5nZXRDaGlsZHJlbigpLmNvbnRhaW5zKHJvdykpKSByZXR1cm47CisKKwkJdGhpcy5zZWxlY3RlZFJvd3MgPSBuZXcgRWxlbWVudHMoQXJyYXkuY29udmVydCh0aGlzLnNlbGVjdGVkUm93cykuZXJhc2Uocm93KSk7CisJCXJvdy5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuY2xhc3NSb3dTZWxlY3RlZCk7CisJCXRoaXMuZmlyZUV2ZW50KCdyb3dVbmZvY3VzJywgW3JvdywgdGhpcy5zZWxlY3RlZFJvd3NdKTsKKwkJdGhpcy5maXJlRXZlbnQoJ3N0YXRlQ2hhbmdlZCcpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJc2VsZWN0QWxsOiBmdW5jdGlvbihzZWxlY3ROb25lKXsKKwkJaWYgKCFzZWxlY3ROb25lICYmICF0aGlzLm9wdGlvbnMuYWxsb3dNdWx0aVNlbGVjdCkgcmV0dXJuOworCQl0aGlzLnNlbGVjdFJhbmdlKDAsIHRoaXMuYm9keS5yb3dzLmxlbmd0aCwgc2VsZWN0Tm9uZSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlzZWxlY3ROb25lOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5zZWxlY3RBbGwodHJ1ZSk7CisJfSwKKworCXNlbGVjdFJhbmdlOiBmdW5jdGlvbihzdGFydFJvdywgZW5kUm93LCBfZGVzZWxlY3QpeworCQlpZiAoIXRoaXMub3B0aW9ucy5hbGxvd011bHRpU2VsZWN0ICYmICFfZGVzZWxlY3QpIHJldHVybjsKKwkJdmFyIG1ldGhvZCA9IF9kZXNlbGVjdCA/ICdkZXNlbGVjdFJvdycgOiAnc2VsZWN0Um93JywKKwkJCXJvd3MgPSBBcnJheS5jbG9uZSh0aGlzLmJvZHkucm93cyk7CisKKwkJaWYgKHR5cGVPZihzdGFydFJvdykgPT0gJ2VsZW1lbnQnKSBzdGFydFJvdyA9IHJvd3MuaW5kZXhPZihzdGFydFJvdyk7CisJCWlmICh0eXBlT2YoZW5kUm93KSA9PSAnZWxlbWVudCcpIGVuZFJvdyA9IHJvd3MuaW5kZXhPZihlbmRSb3cpOworCQllbmRSb3cgPSBlbmRSb3cgPCByb3dzLmxlbmd0aCAtIDEgPyBlbmRSb3cgOiByb3dzLmxlbmd0aCAtIDE7CisKKwkJaWYgKGVuZFJvdyA8IHN0YXJ0Um93KXsKKwkJCXZhciB0bXAgPSBzdGFydFJvdzsKKwkJCXN0YXJ0Um93ID0gZW5kUm93OworCQkJZW5kUm93ID0gdG1wOworCQl9CisKKwkJZm9yICh2YXIgaSA9IHN0YXJ0Um93OyBpIDw9IGVuZFJvdzsgaSsrKXsKKwkJCWlmICh0aGlzLm9wdGlvbnMuc2VsZWN0SGlkZGVuUm93cyB8fCByb3dzW2ldLmlzRGlzcGxheWVkKCkpIHRoaXNbbWV0aG9kXShyb3dzW2ldLCB0cnVlKTsKKwkJfQorCisJCXJldHVybiB0aGlzOworCX0sCisKKwlkZXNlbGVjdFJhbmdlOiBmdW5jdGlvbihzdGFydFJvdywgZW5kUm93KXsKKwkJdGhpcy5zZWxlY3RSYW5nZShzdGFydFJvdywgZW5kUm93LCB0cnVlKTsKKwl9LAorCisvKgorCVByaXZhdGUgbWV0aG9kczoKKyovCisKKwllbnRlclJvdzogZnVuY3Rpb24ocm93KXsKKwkJaWYgKHRoaXMuaG92ZXJlZCkgdGhpcy5ob3ZlcmVkID0gdGhpcy5sZWF2ZVJvdyh0aGlzLmhvdmVyZWQpOworCQl0aGlzLmhvdmVyZWQgPSByb3cuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmNsYXNzUm93SG92ZXJlZCk7CisJfSwKKworCWxlYXZlUm93OiBmdW5jdGlvbihyb3cpeworCQlyb3cucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmNsYXNzUm93SG92ZXJlZCk7CisJfSwKKworCXVwZGF0ZVNlbGVjdHM6IGZ1bmN0aW9uKCl7CisJCUFycmF5LmVhY2godGhpcy5ib2R5LnJvd3MsIGZ1bmN0aW9uKHJvdyl7CisJCQl2YXIgYmluZGVycyA9IHJvdy5yZXRyaWV2ZSgnYmluZGVycycpOworCQkJaWYgKCFiaW5kZXJzICYmICF0aGlzLnNlbGVjdEVuYWJsZWQpIHJldHVybjsKKwkJCWlmICghYmluZGVycyl7CisJCQkJYmluZGVycyA9IHsKKwkJCQkJbW91c2VlbnRlcjogdGhpcy5lbnRlclJvdy5wYXNzKFtyb3ddLCB0aGlzKSwKKwkJCQkJbW91c2VsZWF2ZTogdGhpcy5sZWF2ZVJvdy5wYXNzKFtyb3ddLCB0aGlzKQorCQkJCX07CisJCQkJcm93LnN0b3JlKCdiaW5kZXJzJywgYmluZGVycyk7CisJCQl9CisJCQlpZiAodGhpcy5zZWxlY3RFbmFibGVkKSByb3cuYWRkRXZlbnRzKGJpbmRlcnMpOworCQkJZWxzZSByb3cucmVtb3ZlRXZlbnRzKGJpbmRlcnMpOworCQl9LCB0aGlzKTsKKwl9LAorCisJc2hpZnRGb2N1czogZnVuY3Rpb24ob2Zmc2V0LCBldmVudCl7CisJCWlmICghdGhpcy5mb2N1c2VkKSByZXR1cm4gdGhpcy5zZWxlY3RSb3codGhpcy5ib2R5LnJvd3NbMF0sIGV2ZW50KTsKKwkJdmFyIHRvID0gdGhpcy5nZXRSb3dCeU9mZnNldChvZmZzZXQsIHRoaXMub3B0aW9ucy5zZWxlY3RIaWRkZW5Sb3dzKTsKKwkJaWYgKHRvID09PSBudWxsIHx8IHRoaXMuZm9jdXNlZCA9PSB0aGlzLmJvZHkucm93c1t0b10pIHJldHVybiB0aGlzOworCQl0aGlzLnRvZ2dsZVJvdyh0aGlzLmJvZHkucm93c1t0b10sIGV2ZW50KTsKKwl9LAorCisJY2xpY2tSb3c6IGZ1bmN0aW9uKGV2ZW50LCByb3cpeworCQl2YXIgc2VsZWN0aW5nID0gKGV2ZW50LnNoaWZ0IHx8IGV2ZW50Lm1ldGEgfHwgZXZlbnQuY29udHJvbCkgJiYgdGhpcy5vcHRpb25zLnNoaWZ0Rm9yTXVsdGlTZWxlY3Q7CisJCWlmICghc2VsZWN0aW5nICYmICEoZXZlbnQucmlnaHRDbGljayAmJiB0aGlzLmlzU2VsZWN0ZWQocm93KSAmJiB0aGlzLm9wdGlvbnMuYWxsb3dNdWx0aVNlbGVjdCkpIHRoaXMuc2VsZWN0Tm9uZSgpOworCisJCWlmIChldmVudC5yaWdodENsaWNrKSB0aGlzLnNlbGVjdFJvdyhyb3cpOworCQllbHNlIHRoaXMudG9nZ2xlUm93KHJvdyk7CisKKwkJaWYgKGV2ZW50LnNoaWZ0KXsKKwkJCXRoaXMuc2VsZWN0UmFuZ2UodGhpcy5yYW5nZVN0YXJ0IHx8IHRoaXMuYm9keS5yb3dzWzBdLCByb3csIHRoaXMucmFuZ2VTdGFydCA/ICF0aGlzLmlzU2VsZWN0ZWQocm93KSA6IHRydWUpOworCQkJdGhpcy5mb2N1c2VkID0gcm93OworCQl9CisJCXRoaXMucmFuZ2VTdGFydCA9IHJvdzsKKwl9LAorCisJZ2V0Um93QnlPZmZzZXQ6IGZ1bmN0aW9uKG9mZnNldCwgaW5jbHVkZUhpZGRlblJvd3MpeworCQlpZiAoIXRoaXMuZm9jdXNlZCkgcmV0dXJuIDA7CisJCXZhciBpbmRleCA9IEFycmF5LmluZGV4T2YodGhpcy5ib2R5LnJvd3MsIHRoaXMuZm9jdXNlZCk7CisJCWlmICgoaW5kZXggPT0gMCAmJiBvZmZzZXQgPCAwKSB8fCAoaW5kZXggPT0gdGhpcy5ib2R5LnJvd3MubGVuZ3RoIC0xICYmIG9mZnNldCA+IDApKSByZXR1cm4gbnVsbDsKKwkJaWYgKGluY2x1ZGVIaWRkZW5Sb3dzKXsKKwkJCWluZGV4ICs9IG9mZnNldDsKKwkJfSBlbHNlIHsKKwkJCXZhciBsaW1pdCA9IDAsCisJCQkJY291bnQgPSAwOworCQkJaWYgKG9mZnNldCA+IDApeworCQkJCXdoaWxlIChjb3VudCA8IG9mZnNldCAmJiBpbmRleCA8IHRoaXMuYm9keS5yb3dzLmxlbmd0aCAtMSl7CisJCQkJCWlmICh0aGlzLmJvZHkucm93c1srK2luZGV4XS5pc0Rpc3BsYXllZCgpKSBjb3VudCsrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJd2hpbGUgKGNvdW50ID4gb2Zmc2V0ICYmIGluZGV4ID4gMCl7CisJCQkJCWlmICh0aGlzLmJvZHkucm93c1stLWluZGV4XS5pc0Rpc3BsYXllZCgpKSBjb3VudC0tOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gaW5kZXg7CisJfSwKKworCWF0dGFjaFNlbGVjdHM6IGZ1bmN0aW9uKGF0dGFjaCl7CisJCWF0dGFjaCA9IGF0dGFjaCAhPSBudWxsID8gYXR0YWNoIDogdHJ1ZTsKKworCQl2YXIgbWV0aG9kID0gYXR0YWNoID8gJ2FkZEV2ZW50cycgOiAncmVtb3ZlRXZlbnRzJzsKKwkJdGhpcy5lbGVtZW50W21ldGhvZF0oeworCQkJbW91c2VsZWF2ZTogdGhpcy5ib3VuZC5tb3VzZWxlYXZlLAorCQkJY2xpY2s6IHRoaXMuYm91bmQuYWN0aXZhdGVLZXlib2FyZAorCQl9KTsKKworCQl0aGlzLmJvZHlbbWV0aG9kXSh7CisJCQknY2xpY2s6cmVsYXkodHIpJzogdGhpcy5ib3VuZC5jbGlja1JvdywKKwkJCSdjb250ZXh0bWVudTpyZWxheSh0ciknOiB0aGlzLmJvdW5kLmNsaWNrUm93CisJCX0pOworCisJCWlmICh0aGlzLm9wdGlvbnMudXNlS2V5Ym9hcmQgfHwgdGhpcy5rZXlib2FyZCl7CisJCQlpZiAoIXRoaXMua2V5Ym9hcmQpIHRoaXMua2V5Ym9hcmQgPSBuZXcgS2V5Ym9hcmQoKTsKKwkJCWlmICghdGhpcy5zZWxlY3RLZXlzRGVmaW5lZCl7CisJCQkJdGhpcy5zZWxlY3RLZXlzRGVmaW5lZCA9IHRydWU7CisJCQkJdmFyIHRpbWVyLCBoZWxkOworCisJCQkJdmFyIG1vdmUgPSBmdW5jdGlvbihvZmZzZXQpeworCQkJCQl2YXIgbW92ZXIgPSBmdW5jdGlvbihlKXsKKwkJCQkJCWNsZWFyVGltZW91dCh0aW1lcik7CisJCQkJCQllLnByZXZlbnREZWZhdWx0KCk7CisJCQkJCQl2YXIgdG8gPSB0aGlzLmJvZHkucm93c1t0aGlzLmdldFJvd0J5T2Zmc2V0KG9mZnNldCwgdGhpcy5vcHRpb25zLnNlbGVjdEhpZGRlblJvd3MpXTsKKwkJCQkJCWlmIChlLnNoaWZ0ICYmIHRvICYmIHRoaXMuaXNTZWxlY3RlZCh0bykpeworCQkJCQkJCXRoaXMuZGVzZWxlY3RSb3codGhpcy5mb2N1c2VkKTsKKwkJCQkJCQl0aGlzLmZvY3VzZWQgPSB0bzsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJaWYgKHRvICYmICghdGhpcy5vcHRpb25zLmFsbG93TXVsdGlTZWxlY3QgfHwgIWUuc2hpZnQpKXsKKwkJCQkJCQkJdGhpcy5zZWxlY3ROb25lKCk7CisJCQkJCQkJfQorCQkJCQkJCXRoaXMuc2hpZnRGb2N1cyhvZmZzZXQsIGUpOworCQkJCQkJfQorCisJCQkJCQlpZiAoaGVsZCl7CisJCQkJCQkJdGltZXIgPSBtb3Zlci5kZWxheSgxMDAsIHRoaXMsIGUpOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQl0aW1lciA9IChmdW5jdGlvbigpeworCQkJCQkJCQloZWxkID0gdHJ1ZTsKKwkJCQkJCQkJbW92ZXIoZSk7CisJCQkJCQkJfSkuZGVsYXkoNDAwKTsKKwkJCQkJCX0KKwkJCQkJfS5iaW5kKHRoaXMpOworCQkJCQlyZXR1cm4gbW92ZXI7CisJCQkJfS5iaW5kKHRoaXMpOworCisJCQkJdmFyIGNsZWFyID0gZnVuY3Rpb24oKXsKKwkJCQkJY2xlYXJUaW1lb3V0KHRpbWVyKTsKKwkJCQkJaGVsZCA9IGZhbHNlOworCQkJCX07CisKKwkJCQl0aGlzLmtleWJvYXJkLmFkZEV2ZW50cyh7CisJCQkJCSdrZXlkb3duOnNoaWZ0K3VwJzogbW92ZSgtMSksCisJCQkJCSdrZXlkb3duOnNoaWZ0K2Rvd24nOiBtb3ZlKDEpLAorCQkJCQkna2V5dXA6c2hpZnQrdXAnOiBjbGVhciwKKwkJCQkJJ2tleXVwOnNoaWZ0K2Rvd24nOiBjbGVhciwKKwkJCQkJJ2tleXVwOnVwJzogY2xlYXIsCisJCQkJCSdrZXl1cDpkb3duJzogY2xlYXIKKwkJCQl9KTsKKworCQkJCXZhciBzaGlmdEhpbnQgPSAnJzsKKwkJCQlpZiAodGhpcy5vcHRpb25zLmFsbG93TXVsdGlTZWxlY3QgJiYgdGhpcy5vcHRpb25zLnNoaWZ0Rm9yTXVsdGlTZWxlY3QgJiYgdGhpcy5vcHRpb25zLnVzZUtleWJvYXJkKXsKKwkJCQkJc2hpZnRIaW50ID0gJyAoU2hpZnQgbXVsdGktc2VsZWN0cykuJzsKKwkJCQl9CisKKwkJCQl0aGlzLmtleWJvYXJkLmFkZFNob3J0Y3V0cyh7CisJCQkJCSdTZWxlY3QgUHJldmlvdXMgUm93JzogeworCQkJCQkJa2V5czogJ3VwJywKKwkJCQkJCXNob3J0Y3V0OiAndXAgYXJyb3cnLAorCQkJCQkJaGFuZGxlcjogbW92ZSgtMSksCisJCQkJCQlkZXNjcmlwdGlvbjogJ1NlbGVjdCB0aGUgcHJldmlvdXMgcm93IGluIHRoZSB0YWJsZS4nICsgc2hpZnRIaW50CisJCQkJCX0sCisJCQkJCSdTZWxlY3QgTmV4dCBSb3cnOiB7CisJCQkJCQlrZXlzOiAnZG93bicsCisJCQkJCQlzaG9ydGN1dDogJ2Rvd24gYXJyb3cnLAorCQkJCQkJaGFuZGxlcjogbW92ZSgxKSwKKwkJCQkJCWRlc2NyaXB0aW9uOiAnU2VsZWN0IHRoZSBuZXh0IHJvdyBpbiB0aGUgdGFibGUuJyArIHNoaWZ0SGludAorCQkJCQl9CisJCQkJfSk7CisKKwkJCX0KKwkJCXRoaXMua2V5Ym9hcmRbYXR0YWNoID8gJ2FjdGl2YXRlJyA6ICdkZWFjdGl2YXRlJ10oKTsKKwkJfQorCQl0aGlzLnVwZGF0ZVNlbGVjdHMoKTsKKwl9LAorCisJbW91c2VsZWF2ZTogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMuaG92ZXJlZCkgdGhpcy5sZWF2ZVJvdyh0aGlzLmhvdmVyZWQpOworCX0KKworfSk7CisKKy8qCistLS0KKworc2NyaXB0OiBIdG1sVGFibGUuU29ydC5qcworCituYW1lOiBIdG1sVGFibGUuU29ydAorCitkZXNjcmlwdGlvbjogQnVpbGRzIGEgc3RyaXB5LCBzb3J0YWJsZSB0YWJsZSB3aXRoIG1ldGhvZHMgdG8gYWRkIHJvd3MuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gSGFyYWxkIEtpcnNjaG5lcgorICAtIEFhcm9uIE5ld3RvbgorICAtIEphY29iIFRob3JudG9uCisKK3JlcXVpcmVzOgorICAtIENvcmUvSGFzaAorICAtIEh0bWxUYWJsZQorICAtIENsYXNzLnJlZmFjdG9yCisgIC0gRWxlbWVudC5EZWxlZ2F0aW9uLlBzZXVkbworICAtIFN0cmluZy5FeHRyYXMKKyAgLSBEYXRlCisKK3Byb3ZpZGVzOiBbSHRtbFRhYmxlLlNvcnRdCisKKy4uLgorKi8KKyhmdW5jdGlvbigpeworCit2YXIgcmVhZE9ubHlOZXNzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTsKK3RyeSB7CisJcmVhZE9ubHlOZXNzLmlubmVySFRNTCA9ICc8dHI+PHRkPjwvdGQ+PC90cj4nOworCXJlYWRPbmx5TmVzcyA9IHJlYWRPbmx5TmVzcy5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMDsKK30gY2F0Y2ggKGUpeworCXJlYWRPbmx5TmVzcyA9IHRydWU7Cit9CisKK0h0bWxUYWJsZSA9IENsYXNzLnJlZmFjdG9yKEh0bWxUYWJsZSwgeworCisJb3B0aW9uczogey8qCisJCW9uU29ydDogZnVuY3Rpb24oKXt9LCAqLworCQlzb3J0SW5kZXg6IDAsCisJCXNvcnRSZXZlcnNlOiBmYWxzZSwKKwkJcGFyc2VyczogW10sCisJCWRlZmF1bHRQYXJzZXI6ICdzdHJpbmcnLAorCQljbGFzc1NvcnRhYmxlOiAndGFibGUtc29ydGFibGUnLAorCQljbGFzc0hlYWRTb3J0OiAndGFibGUtdGgtc29ydCcsCisJCWNsYXNzSGVhZFNvcnRSZXY6ICd0YWJsZS10aC1zb3J0LXJldicsCisJCWNsYXNzTm9Tb3J0OiAndGFibGUtdGgtbm9zb3J0JywKKwkJY2xhc3NHcm91cEhlYWQ6ICd0YWJsZS10ci1ncm91cC1oZWFkJywKKwkJY2xhc3NHcm91cDogJ3RhYmxlLXRyLWdyb3VwJywKKwkJY2xhc3NDZWxsU29ydDogJ3RhYmxlLXRkLXNvcnQnLAorCQljbGFzc1NvcnRTcGFuOiAndGFibGUtdGgtc29ydC1zcGFuJywKKwkJc29ydGFibGU6IGZhbHNlLAorCQl0aFNlbGVjdG9yOiAndGgnCisJfSwKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKCl7CisJCXRoaXMucHJldmlvdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKwkJaWYgKHRoaXMub2NjbHVkZWQpIHJldHVybiB0aGlzLm9jY2x1ZGVkOworCQl0aGlzLnNvcnRlZCA9IHtpbmRleDogbnVsbCwgZGlyOiAxfTsKKwkJaWYgKCF0aGlzLmJvdW5kKSB0aGlzLmJvdW5kID0ge307CisJCXRoaXMuYm91bmQuaGVhZENsaWNrID0gdGhpcy5oZWFkQ2xpY2suYmluZCh0aGlzKTsKKwkJdGhpcy5zb3J0U3BhbnMgPSBuZXcgRWxlbWVudHMoKTsKKwkJaWYgKHRoaXMub3B0aW9ucy5zb3J0YWJsZSl7CisJCQl0aGlzLmVuYWJsZVNvcnQoKTsKKwkJCWlmICh0aGlzLm9wdGlvbnMuc29ydEluZGV4ICE9IG51bGwpIHRoaXMuc29ydCh0aGlzLm9wdGlvbnMuc29ydEluZGV4LCB0aGlzLm9wdGlvbnMuc29ydFJldmVyc2UpOworCQl9CisJfSwKKworCWF0dGFjaFNvcnRzOiBmdW5jdGlvbihhdHRhY2gpeworCQl0aGlzLmRldGFjaFNvcnRzKCk7CisJCWlmIChhdHRhY2ggIT09IGZhbHNlKSB0aGlzLmVsZW1lbnQuYWRkRXZlbnQoJ2NsaWNrOnJlbGF5KCcgKyB0aGlzLm9wdGlvbnMudGhTZWxlY3RvciArICcpJywgdGhpcy5ib3VuZC5oZWFkQ2xpY2spOworCX0sCisKKwlkZXRhY2hTb3J0czogZnVuY3Rpb24oKXsKKwkJdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50cygnY2xpY2s6cmVsYXkoJyArIHRoaXMub3B0aW9ucy50aFNlbGVjdG9yICsgJyknKTsKKwl9LAorCisJc2V0SGVhZGVyczogZnVuY3Rpb24oKXsKKwkJdGhpcy5wcmV2aW91cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCQlpZiAodGhpcy5zb3J0YWJsZSkgdGhpcy5zZXRQYXJzZXJzKCk7CisJfSwKKworCXNldFBhcnNlcnM6IGZ1bmN0aW9uKCl7CisJCXRoaXMucGFyc2VycyA9IHRoaXMuZGV0ZWN0UGFyc2VycygpOworCX0sCisKKwlkZXRlY3RQYXJzZXJzOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy5oZWFkICYmIHRoaXMuaGVhZC5nZXRFbGVtZW50cyh0aGlzLm9wdGlvbnMudGhTZWxlY3RvcikuZmxhdHRlbigpLm1hcCh0aGlzLmRldGVjdFBhcnNlciwgdGhpcyk7CisJfSwKKworCWRldGVjdFBhcnNlcjogZnVuY3Rpb24oY2VsbCwgaW5kZXgpeworCQlpZiAoY2VsbC5oYXNDbGFzcyh0aGlzLm9wdGlvbnMuY2xhc3NOb1NvcnQpIHx8IGNlbGwucmV0cmlldmUoJ2h0bWx0YWJsZS1wYXJzZXInKSkgcmV0dXJuIGNlbGwucmV0cmlldmUoJ2h0bWx0YWJsZS1wYXJzZXInKTsKKwkJdmFyIHRoRGl2ID0gbmV3IEVsZW1lbnQoJ2RpdicpOworCQl0aERpdi5hZG9wdChjZWxsLmNoaWxkTm9kZXMpLmluamVjdChjZWxsKTsKKwkJdmFyIHNvcnRTcGFuID0gbmV3IEVsZW1lbnQoJ3NwYW4nLCB7J2NsYXNzJzogdGhpcy5vcHRpb25zLmNsYXNzU29ydFNwYW59KS5pbmplY3QodGhEaXYsICd0b3AnKTsKKwkJdGhpcy5zb3J0U3BhbnMucHVzaChzb3J0U3Bhbik7CisJCXZhciBwYXJzZXIgPSB0aGlzLm9wdGlvbnMucGFyc2Vyc1tpbmRleF0sCisJCQlyb3dzID0gdGhpcy5ib2R5LnJvd3MsCisJCQljYW5jZWw7CisJCXN3aXRjaCAodHlwZU9mKHBhcnNlcikpeworCQkJY2FzZSAnZnVuY3Rpb24nOiBwYXJzZXIgPSB7Y29udmVydDogcGFyc2VyfTsgY2FuY2VsID0gdHJ1ZTsgYnJlYWs7CisJCQljYXNlICdzdHJpbmcnOiBwYXJzZXIgPSBwYXJzZXI7IGNhbmNlbCA9IHRydWU7IGJyZWFrOworCQl9CisJCWlmICghY2FuY2VsKXsKKwkJCUh0bWxUYWJsZS5QYXJzZXJQcmlvcml0eS5zb21lKGZ1bmN0aW9uKHBhcnNlck5hbWUpeworCQkJCXZhciBjdXJyZW50ID0gSHRtbFRhYmxlLlBhcnNlcnNbcGFyc2VyTmFtZV0sCisJCQkJCW1hdGNoID0gY3VycmVudC5tYXRjaDsKKwkJCQlpZiAoIW1hdGNoKSByZXR1cm4gZmFsc2U7CisJCQkJZm9yICh2YXIgaSA9IDAsIGogPSByb3dzLmxlbmd0aDsgaSA8IGo7IGkrKyl7CisJCQkJCXZhciBjZWxsID0gZG9jdW1lbnQuaWQocm93c1tpXS5jZWxsc1tpbmRleF0pLAorCQkJCQkJdGV4dCA9IGNlbGwgPyBjZWxsLmdldCgnaHRtbCcpLmNsZWFuKCkgOiAnJzsKKwkJCQkJaWYgKHRleHQgJiYgbWF0Y2gudGVzdCh0ZXh0KSl7CisJCQkJCQlwYXJzZXIgPSBjdXJyZW50OworCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCX0KKwkJCQl9CisJCQl9KTsKKwkJfQorCQlpZiAoIXBhcnNlcikgcGFyc2VyID0gdGhpcy5vcHRpb25zLmRlZmF1bHRQYXJzZXI7CisJCWNlbGwuc3RvcmUoJ2h0bWx0YWJsZS1wYXJzZXInLCBwYXJzZXIpOworCQlyZXR1cm4gcGFyc2VyOworCX0sCisKKwloZWFkQ2xpY2s6IGZ1bmN0aW9uKGV2ZW50LCBlbCl7CisJCWlmICghdGhpcy5oZWFkIHx8IGVsLmhhc0NsYXNzKHRoaXMub3B0aW9ucy5jbGFzc05vU29ydCkpIHJldHVybjsKKwkJcmV0dXJuIHRoaXMuc29ydChBcnJheS5pbmRleE9mKHRoaXMuaGVhZC5nZXRFbGVtZW50cyh0aGlzLm9wdGlvbnMudGhTZWxlY3RvcikuZmxhdHRlbigpLCBlbCkgJSB0aGlzLmJvZHkucm93c1swXS5jZWxscy5sZW5ndGgpOworCX0sCisKKwlzZXJpYWxpemU6IGZ1bmN0aW9uKCl7CisJCXZhciBwcmV2aW91c1NlcmlhbGl6YXRpb24gPSB0aGlzLnByZXZpb3VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwge307CisJCWlmICh0aGlzLm9wdGlvbnMuc29ydGFibGUpeworCQkJcHJldmlvdXNTZXJpYWxpemF0aW9uLnNvcnRJbmRleCA9IHRoaXMuc29ydGVkLmluZGV4OworCQkJcHJldmlvdXNTZXJpYWxpemF0aW9uLnNvcnRSZXZlcnNlID0gdGhpcy5zb3J0ZWQucmV2ZXJzZTsKKwkJfQorCQlyZXR1cm4gcHJldmlvdXNTZXJpYWxpemF0aW9uOworCX0sCisKKwlyZXN0b3JlOiBmdW5jdGlvbih0YWJsZVN0YXRlKXsKKwkJaWYgKHRoaXMub3B0aW9ucy5zb3J0YWJsZSAmJiB0YWJsZVN0YXRlLnNvcnRJbmRleCl7CisJCQl0aGlzLnNvcnQodGFibGVTdGF0ZS5zb3J0SW5kZXgsIHRhYmxlU3RhdGUuc29ydFJldmVyc2UpOworCQl9CisJCXRoaXMucHJldmlvdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKwl9LAorCisJc2V0U29ydGVkU3RhdGU6IGZ1bmN0aW9uKGluZGV4LCByZXZlcnNlKXsKKwkJaWYgKHJldmVyc2UgIT0gbnVsbCkgdGhpcy5zb3J0ZWQucmV2ZXJzZSA9IHJldmVyc2U7CisJCWVsc2UgaWYgKHRoaXMuc29ydGVkLmluZGV4ID09IGluZGV4KSB0aGlzLnNvcnRlZC5yZXZlcnNlID0gIXRoaXMuc29ydGVkLnJldmVyc2U7CisJCWVsc2UgdGhpcy5zb3J0ZWQucmV2ZXJzZSA9IHRoaXMuc29ydGVkLmluZGV4ID09IG51bGw7CisKKwkJaWYgKGluZGV4ICE9IG51bGwpIHRoaXMuc29ydGVkLmluZGV4ID0gaW5kZXg7CisJfSwKKworCXNldEhlYWRTb3J0OiBmdW5jdGlvbihzb3J0ZWQpeworCQl2YXIgaGVhZCA9ICQkKCF0aGlzLmhlYWQubGVuZ3RoID8gdGhpcy5oZWFkLmNlbGxzW3RoaXMuc29ydGVkLmluZGV4XSA6IHRoaXMuaGVhZC5tYXAoZnVuY3Rpb24ocm93KXsKKwkJCXJldHVybiByb3cuZ2V0RWxlbWVudHModGhpcy5vcHRpb25zLnRoU2VsZWN0b3IpW3RoaXMuc29ydGVkLmluZGV4XTsKKwkJfSwgdGhpcykuY2xlYW4oKSk7CisJCWlmICghaGVhZC5sZW5ndGgpIHJldHVybjsKKwkJaWYgKHNvcnRlZCl7CisJCQloZWFkLmFkZENsYXNzKHRoaXMub3B0aW9ucy5jbGFzc0hlYWRTb3J0KTsKKwkJCWlmICh0aGlzLnNvcnRlZC5yZXZlcnNlKSBoZWFkLmFkZENsYXNzKHRoaXMub3B0aW9ucy5jbGFzc0hlYWRTb3J0UmV2KTsKKwkJCWVsc2UgaGVhZC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuY2xhc3NIZWFkU29ydFJldik7CisJCX0gZWxzZSB7CisJCQloZWFkLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5jbGFzc0hlYWRTb3J0KS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuY2xhc3NIZWFkU29ydFJldik7CisJCX0KKwl9LAorCisJc2V0Um93U29ydDogZnVuY3Rpb24oZGF0YSwgcHJlKXsKKwkJdmFyIGNvdW50ID0gZGF0YS5sZW5ndGgsCisJCQlib2R5ID0gdGhpcy5ib2R5LAorCQkJZ3JvdXAsCisJCQlyb3dJbmRleDsKKworCQl3aGlsZSAoY291bnQpeworCQkJdmFyIGl0ZW0gPSBkYXRhWy0tY291bnRdLAorCQkJCXBvc2l0aW9uID0gaXRlbS5wb3NpdGlvbiwKKwkJCQlyb3cgPSBib2R5LnJvd3NbcG9zaXRpb25dOworCisJCQlpZiAocm93LmRpc2FibGVkKSBjb250aW51ZTsKKwkJCWlmICghcHJlKXsKKwkJCQlncm91cCA9IHRoaXMuc2V0R3JvdXBTb3J0KGdyb3VwLCByb3csIGl0ZW0pOworCQkJCXRoaXMuc2V0Um93U3R5bGUocm93LCBjb3VudCk7CisJCQl9CisJCQlib2R5LmFwcGVuZENoaWxkKHJvdyk7CisKKwkJCWZvciAocm93SW5kZXggPSAwOyByb3dJbmRleCA8IGNvdW50OyByb3dJbmRleCsrKXsKKwkJCQlpZiAoZGF0YVtyb3dJbmRleF0ucG9zaXRpb24gPiBwb3NpdGlvbikgZGF0YVtyb3dJbmRleF0ucG9zaXRpb24tLTsKKwkJCX0KKwkJfQorCX0sCisKKwlzZXRSb3dTdHlsZTogZnVuY3Rpb24ocm93LCBpKXsKKwkJdGhpcy5wcmV2aW91cyhyb3csIGkpOworCQlyb3cuY2VsbHNbdGhpcy5zb3J0ZWQuaW5kZXhdLmFkZENsYXNzKHRoaXMub3B0aW9ucy5jbGFzc0NlbGxTb3J0KTsKKwl9LAorCisJc2V0R3JvdXBTb3J0OiBmdW5jdGlvbihncm91cCwgcm93LCBpdGVtKXsKKwkJaWYgKGdyb3VwID09IGl0ZW0udmFsdWUpIHJvdy5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuY2xhc3NHcm91cEhlYWQpLmFkZENsYXNzKHRoaXMub3B0aW9ucy5jbGFzc0dyb3VwKTsKKwkJZWxzZSByb3cucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmNsYXNzR3JvdXApLmFkZENsYXNzKHRoaXMub3B0aW9ucy5jbGFzc0dyb3VwSGVhZCk7CisJCXJldHVybiBpdGVtLnZhbHVlOworCX0sCisKKwlnZXRQYXJzZXI6IGZ1bmN0aW9uKCl7CisJCXZhciBwYXJzZXIgPSB0aGlzLnBhcnNlcnNbdGhpcy5zb3J0ZWQuaW5kZXhdOworCQlyZXR1cm4gdHlwZU9mKHBhcnNlcikgPT0gJ3N0cmluZycgPyBIdG1sVGFibGUuUGFyc2Vyc1twYXJzZXJdIDogcGFyc2VyOworCX0sCisKKwlzb3J0OiBmdW5jdGlvbihpbmRleCwgcmV2ZXJzZSwgcHJlLCBzb3J0RnVuY3Rpb24peworCQlpZiAoIXRoaXMuaGVhZCkgcmV0dXJuOworCisJCWlmICghcHJlKXsKKwkJCXRoaXMuY2xlYXJTb3J0KCk7CisJCQl0aGlzLnNldFNvcnRlZFN0YXRlKGluZGV4LCByZXZlcnNlKTsKKwkJCXRoaXMuc2V0SGVhZFNvcnQodHJ1ZSk7CisJCX0KKworCQl2YXIgcGFyc2VyID0gdGhpcy5nZXRQYXJzZXIoKTsKKwkJaWYgKCFwYXJzZXIpIHJldHVybjsKKworCQl2YXIgcmVsOworCQlpZiAoIXJlYWRPbmx5TmVzcyl7CisJCQlyZWwgPSB0aGlzLmJvZHkuZ2V0UGFyZW50KCk7CisJCQl0aGlzLmJvZHkuZGlzcG9zZSgpOworCQl9CisKKwkJdmFyIGRhdGEgPSB0aGlzLnBhcnNlRGF0YShwYXJzZXIpLnNvcnQoc29ydEZ1bmN0aW9uID8gc29ydEZ1bmN0aW9uIDogZnVuY3Rpb24oYSwgYil7CisJCQlpZiAoYS52YWx1ZSA9PT0gYi52YWx1ZSkgcmV0dXJuIDA7CisJCQlyZXR1cm4gYS52YWx1ZSA+IGIudmFsdWUgPyAxIDogLTE7CisJCX0pOworCisJCXZhciByZXZlcnNlZCA9IHRoaXMuc29ydGVkLnJldmVyc2UgPT0gKHBhcnNlciA9PSBIdG1sVGFibGUuUGFyc2Vyc1snaW5wdXQtY2hlY2tlZCddKTsKKwkJaWYgKHJldmVyc2VkKSBkYXRhLnJldmVyc2UodHJ1ZSk7CisJCXRoaXMuc2V0Um93U29ydChkYXRhLCBwcmUpOworCisJCWlmIChyZWwpIHJlbC5ncmFiKHRoaXMuYm9keSk7CisJCXRoaXMuZmlyZUV2ZW50KCdzdGF0ZUNoYW5nZWQnKTsKKwkJcmV0dXJuIHRoaXMuZmlyZUV2ZW50KCdzb3J0JywgW3RoaXMuYm9keSwgdGhpcy5zb3J0ZWQuaW5kZXgsIHJldmVyc2VkID8gJ2FzYycgOiAnZGVzYyddKTsKKwl9LAorCisJcGFyc2VEYXRhOiBmdW5jdGlvbihwYXJzZXIpeworCQlyZXR1cm4gQXJyYXkubWFwKHRoaXMuYm9keS5yb3dzLCBmdW5jdGlvbihyb3csIGkpeworCQkJdmFyIHZhbHVlID0gcGFyc2VyLmNvbnZlcnQuY2FsbChkb2N1bWVudC5pZChyb3cuY2VsbHNbdGhpcy5zb3J0ZWQuaW5kZXhdKSk7CisJCQlyZXR1cm4geworCQkJCXBvc2l0aW9uOiBpLAorCQkJCXZhbHVlOiB2YWx1ZQorCQkJfTsKKwkJfSwgdGhpcyk7CisJfSwKKworCWNsZWFyU29ydDogZnVuY3Rpb24oKXsKKwkJdGhpcy5zZXRIZWFkU29ydChmYWxzZSk7CisJCXRoaXMuYm9keS5nZXRFbGVtZW50cygndGQnKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuY2xhc3NDZWxsU29ydCk7CisJfSwKKworCXJlU29ydDogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMuc29ydGFibGUpIHRoaXMuc29ydC5jYWxsKHRoaXMsIHRoaXMuc29ydGVkLmluZGV4LCB0aGlzLnNvcnRlZC5yZXZlcnNlKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWVuYWJsZVNvcnQ6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuY2xhc3NTb3J0YWJsZSk7CisJCXRoaXMuYXR0YWNoU29ydHModHJ1ZSk7CisJCXRoaXMuc2V0UGFyc2VycygpOworCQl0aGlzLnNvcnRhYmxlID0gdHJ1ZTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWRpc2FibGVTb3J0OiBmdW5jdGlvbigpeworCQl0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmNsYXNzU29ydGFibGUpOworCQl0aGlzLmF0dGFjaFNvcnRzKGZhbHNlKTsKKwkJdGhpcy5zb3J0U3BhbnMuZWFjaChmdW5jdGlvbihzcGFuKXsKKwkJCXNwYW4uZGVzdHJveSgpOworCQl9KTsKKwkJdGhpcy5zb3J0U3BhbnMuZW1wdHkoKTsKKwkJdGhpcy5zb3J0YWJsZSA9IGZhbHNlOworCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCitIdG1sVGFibGUuUGFyc2VyUHJpb3JpdHkgPSBbJ2RhdGUnLCAnaW5wdXQtY2hlY2tlZCcsICdpbnB1dC12YWx1ZScsICdmbG9hdCcsICdudW1iZXInXTsKKworSHRtbFRhYmxlLlBhcnNlcnMgPSB7CisKKwknZGF0ZSc6IHsKKwkJbWF0Y2g6IC9eXGR7Mn1bLVwvIF1cZHsyfVstXC8gXVxkezIsNH0kLywKKwkJY29udmVydDogZnVuY3Rpb24oKXsKKwkJCXZhciBkID0gRGF0ZS5wYXJzZSh0aGlzLmdldCgndGV4dCcpLnN0cmlwVGFncygpKTsKKwkJCXJldHVybiAodHlwZU9mKGQpID09ICdkYXRlJykgPyBkLmZvcm1hdCgnZGInKSA6ICcnOworCQl9LAorCQl0eXBlOiAnZGF0ZScKKwl9LAorCSdpbnB1dC1jaGVja2VkJzogeworCQltYXRjaDogLyB0eXBlPSIocmFkaW98Y2hlY2tib3gpIi8sCisJCWNvbnZlcnQ6IGZ1bmN0aW9uKCl7CisJCQlyZXR1cm4gdGhpcy5nZXRFbGVtZW50KCdpbnB1dCcpLmNoZWNrZWQ7CisJCX0KKwl9LAorCSdpbnB1dC12YWx1ZSc6IHsKKwkJbWF0Y2g6IC88aW5wdXQvLAorCQljb252ZXJ0OiBmdW5jdGlvbigpeworCQkJcmV0dXJuIHRoaXMuZ2V0RWxlbWVudCgnaW5wdXQnKS52YWx1ZTsKKwkJfQorCX0sCisJJ251bWJlcic6IHsKKwkJbWF0Y2g6IC9eXGQrW15cZC4sXSokLywKKwkJY29udmVydDogZnVuY3Rpb24oKXsKKwkJCXJldHVybiB0aGlzLmdldCgndGV4dCcpLnN0cmlwVGFncygpLnRvSW50KCk7CisJCX0sCisJCW51bWJlcjogdHJ1ZQorCX0sCisJJ251bWJlckxheCc6IHsKKwkJbWF0Y2g6IC9eW15cZF0rXGQrJC8sCisJCWNvbnZlcnQ6IGZ1bmN0aW9uKCl7CisJCQlyZXR1cm4gdGhpcy5nZXQoJ3RleHQnKS5yZXBsYWNlKC9bXi0/XjAtOV0vLCAnJykuc3RyaXBUYWdzKCkudG9JbnQoKTsKKwkJfSwKKwkJbnVtYmVyOiB0cnVlCisJfSwKKwknZmxvYXQnOiB7CisJCW1hdGNoOiAvXltcZF0rXC5bXGRdKy8sCisJCWNvbnZlcnQ6IGZ1bmN0aW9uKCl7CisJCQlyZXR1cm4gdGhpcy5nZXQoJ3RleHQnKS5yZXBsYWNlKC9bXi0/XlxkLmVdLywgJycpLnN0cmlwVGFncygpLnRvRmxvYXQoKTsKKwkJfSwKKwkJbnVtYmVyOiB0cnVlCisJfSwKKwknZmxvYXRMYXgnOiB7CisJCW1hdGNoOiAvXlteXGRdK1tcZF0rXC5bXGRdKyQvLAorCQljb252ZXJ0OiBmdW5jdGlvbigpeworCQkJcmV0dXJuIHRoaXMuZ2V0KCd0ZXh0JykucmVwbGFjZSgvW14tP15cZC5dLywgJycpLnN0cmlwVGFncygpLnRvRmxvYXQoKTsKKwkJfSwKKwkJbnVtYmVyOiB0cnVlCisJfSwKKwknc3RyaW5nJzogeworCQltYXRjaDogbnVsbCwKKwkJY29udmVydDogZnVuY3Rpb24oKXsKKwkJCXJldHVybiB0aGlzLmdldCgndGV4dCcpLnN0cmlwVGFncygpLnRvTG93ZXJDYXNlKCk7CisJCX0KKwl9LAorCSd0aXRsZSc6IHsKKwkJbWF0Y2g6IG51bGwsCisJCWNvbnZlcnQ6IGZ1bmN0aW9uKCl7CisJCQlyZXR1cm4gdGhpcy50aXRsZTsKKwkJfQorCX0KKworfTsKKworCisKK0h0bWxUYWJsZS5kZWZpbmVQYXJzZXJzID0gZnVuY3Rpb24ocGFyc2Vycyl7CisJSHRtbFRhYmxlLlBhcnNlcnMgPSBPYmplY3QuYXBwZW5kKEh0bWxUYWJsZS5QYXJzZXJzLCBwYXJzZXJzKTsKKwlmb3IgKHZhciBwYXJzZXIgaW4gcGFyc2Vycyl7CisJCUh0bWxUYWJsZS5QYXJzZXJQcmlvcml0eS51bnNoaWZ0KHBhcnNlcik7CisJfQorfTsKKworfSkoKTsKKworCisvKgorLS0tCisKK3NjcmlwdDogSHRtbFRhYmxlLlplYnJhLmpzCisKK25hbWU6IEh0bWxUYWJsZS5aZWJyYQorCitkZXNjcmlwdGlvbjogQnVpbGRzIGEgc3RyaXB5IHRhYmxlIHdpdGggbWV0aG9kcyB0byBhZGQgcm93cy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBIYXJhbGQgS2lyc2NobmVyCisgIC0gQWFyb24gTmV3dG9uCisKK3JlcXVpcmVzOgorICAtIEh0bWxUYWJsZQorICAtIEVsZW1lbnQuU2hvcnRjdXRzCisgIC0gQ2xhc3MucmVmYWN0b3IKKworcHJvdmlkZXM6IFtIdG1sVGFibGUuWmVicmFdCisKKy4uLgorKi8KKworSHRtbFRhYmxlID0gQ2xhc3MucmVmYWN0b3IoSHRtbFRhYmxlLCB7CisKKwlvcHRpb25zOiB7CisJCWNsYXNzWmVicmE6ICd0YWJsZS10ci1vZGQnLAorCQl6ZWJyYTogdHJ1ZSwKKwkJemVicmFPbmx5VmlzaWJsZVJvd3M6IHRydWUKKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24oKXsKKwkJdGhpcy5wcmV2aW91cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCQlpZiAodGhpcy5vY2NsdWRlZCkgcmV0dXJuIHRoaXMub2NjbHVkZWQ7CisJCWlmICh0aGlzLm9wdGlvbnMuemVicmEpIHRoaXMudXBkYXRlWmVicmFzKCk7CisJfSwKKworCXVwZGF0ZVplYnJhczogZnVuY3Rpb24oKXsKKwkJdmFyIGluZGV4ID0gMDsKKwkJQXJyYXkuZWFjaCh0aGlzLmJvZHkucm93cywgZnVuY3Rpb24ocm93KXsKKwkJCWlmICghdGhpcy5vcHRpb25zLnplYnJhT25seVZpc2libGVSb3dzIHx8IHJvdy5pc0Rpc3BsYXllZCgpKXsKKwkJCQl0aGlzLnplYnJhKHJvdywgaW5kZXgrKyk7CisJCQl9CisJCX0sIHRoaXMpOworCX0sCisKKwlzZXRSb3dTdHlsZTogZnVuY3Rpb24ocm93LCBpKXsKKwkJaWYgKHRoaXMucHJldmlvdXMpIHRoaXMucHJldmlvdXMocm93LCBpKTsKKwkJdGhpcy56ZWJyYShyb3csIGkpOworCX0sCisKKwl6ZWJyYTogZnVuY3Rpb24ocm93LCBpKXsKKwkJcmV0dXJuIHJvd1soKGkgJSAyKSA/ICdyZW1vdmUnIDogJ2FkZCcpKydDbGFzcyddKHRoaXMub3B0aW9ucy5jbGFzc1plYnJhKTsKKwl9LAorCisJcHVzaDogZnVuY3Rpb24oKXsKKwkJdmFyIHB1c2hlZCA9IHRoaXMucHJldmlvdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKwkJaWYgKHRoaXMub3B0aW9ucy56ZWJyYSkgdGhpcy51cGRhdGVaZWJyYXMoKTsKKwkJcmV0dXJuIHB1c2hlZDsKKwl9CisKK30pOworCisvKgorLS0tCisKK3NjcmlwdDogU2Nyb2xsZXIuanMKKworbmFtZTogU2Nyb2xsZXIKKworZGVzY3JpcHRpb246IENsYXNzIHdoaWNoIHNjcm9sbHMgdGhlIGNvbnRlbnRzIG9mIGFueSBFbGVtZW50IChpbmNsdWRpbmcgdGhlIHdpbmRvdykgd2hlbiB0aGUgbW91c2UgcmVhY2hlcyB0aGUgRWxlbWVudCdzIGJvdW5kYXJpZXMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gVmFsZXJpbyBQcm9pZXR0aQorCityZXF1aXJlczoKKyAgLSBDb3JlL0V2ZW50cworICAtIENvcmUvT3B0aW9ucworICAtIENvcmUvRWxlbWVudC5FdmVudAorICAtIENvcmUvRWxlbWVudC5EaW1lbnNpb25zCisgIC0gTW9vVG9vbHMuTW9yZQorCitwcm92aWRlczogW1Njcm9sbGVyXQorCisuLi4KKyovCisoZnVuY3Rpb24oKXsKKwordmFyIFNjcm9sbGVyID0gdGhpcy5TY3JvbGxlciA9IG5ldyBDbGFzcyh7CisKKwlJbXBsZW1lbnRzOiBbRXZlbnRzLCBPcHRpb25zXSwKKworCW9wdGlvbnM6IHsKKwkJYXJlYTogMjAsCisJCXZlbG9jaXR5OiAxLAorCQlvbkNoYW5nZTogZnVuY3Rpb24oeCwgeSl7CisJCQl0aGlzLmVsZW1lbnQuc2Nyb2xsVG8oeCwgeSk7CisJCX0sCisJCWZwczogNTAKKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucyl7CisJCXRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTsKKwkJdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuaWQoZWxlbWVudCk7CisJCXRoaXMuZG9jQm9keSA9IGRvY3VtZW50LmlkKHRoaXMuZWxlbWVudC5nZXREb2N1bWVudCgpLmJvZHkpOworCQl0aGlzLmxpc3RlbmVyID0gKHR5cGVPZih0aGlzLmVsZW1lbnQpICE9ICdlbGVtZW50JykgPyB0aGlzLmRvY0JvZHkgOiB0aGlzLmVsZW1lbnQ7CisJCXRoaXMudGltZXIgPSBudWxsOworCQl0aGlzLmJvdW5kID0geworCQkJYXR0YWNoOiB0aGlzLmF0dGFjaC5iaW5kKHRoaXMpLAorCQkJZGV0YWNoOiB0aGlzLmRldGFjaC5iaW5kKHRoaXMpLAorCQkJZ2V0Q29vcmRzOiB0aGlzLmdldENvb3Jkcy5iaW5kKHRoaXMpCisJCX07CisJfSwKKworCXN0YXJ0OiBmdW5jdGlvbigpeworCQl0aGlzLmxpc3RlbmVyLmFkZEV2ZW50cyh7CisJCQltb3VzZW92ZXI6IHRoaXMuYm91bmQuYXR0YWNoLAorCQkJbW91c2VsZWF2ZTogdGhpcy5ib3VuZC5kZXRhY2gKKwkJfSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlzdG9wOiBmdW5jdGlvbigpeworCQl0aGlzLmxpc3RlbmVyLnJlbW92ZUV2ZW50cyh7CisJCQltb3VzZW92ZXI6IHRoaXMuYm91bmQuYXR0YWNoLAorCQkJbW91c2VsZWF2ZTogdGhpcy5ib3VuZC5kZXRhY2gKKwkJfSk7CisJCXRoaXMuZGV0YWNoKCk7CisJCXRoaXMudGltZXIgPSBjbGVhckludGVydmFsKHRoaXMudGltZXIpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJYXR0YWNoOiBmdW5jdGlvbigpeworCQl0aGlzLmxpc3RlbmVyLmFkZEV2ZW50KCdtb3VzZW1vdmUnLCB0aGlzLmJvdW5kLmdldENvb3Jkcyk7CisJfSwKKworCWRldGFjaDogZnVuY3Rpb24oKXsKKwkJdGhpcy5saXN0ZW5lci5yZW1vdmVFdmVudCgnbW91c2Vtb3ZlJywgdGhpcy5ib3VuZC5nZXRDb29yZHMpOworCQl0aGlzLnRpbWVyID0gY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKTsKKwl9LAorCisJZ2V0Q29vcmRzOiBmdW5jdGlvbihldmVudCl7CisJCXRoaXMucGFnZSA9ICh0aGlzLmxpc3RlbmVyLmdldCgndGFnJykgPT0gJ2JvZHknKSA/IGV2ZW50LmNsaWVudCA6IGV2ZW50LnBhZ2U7CisJCWlmICghdGhpcy50aW1lcikgdGhpcy50aW1lciA9IHRoaXMuc2Nyb2xsLnBlcmlvZGljYWwoTWF0aC5yb3VuZCgxMDAwIC8gdGhpcy5vcHRpb25zLmZwcyksIHRoaXMpOworCX0sCisKKwlzY3JvbGw6IGZ1bmN0aW9uKCl7CisJCXZhciBzaXplID0gdGhpcy5lbGVtZW50LmdldFNpemUoKSwKKwkJCXNjcm9sbCA9IHRoaXMuZWxlbWVudC5nZXRTY3JvbGwoKSwKKwkJCXBvcyA9ICgodGhpcy5lbGVtZW50ICE9IHRoaXMuZG9jQm9keSkgJiYgKHRoaXMuZWxlbWVudCAhPSB3aW5kb3cpKSA/IHRoaXMuZWxlbWVudC5nZXRPZmZzZXRzKCkgOiB7eDogMCwgeTogMH0sCisJCQlzY3JvbGxTaXplID0gdGhpcy5lbGVtZW50LmdldFNjcm9sbFNpemUoKSwKKwkJCWNoYW5nZSA9IHt4OiAwLCB5OiAwfSwKKwkJCXRvcCA9IHRoaXMub3B0aW9ucy5hcmVhLnRvcCB8fCB0aGlzLm9wdGlvbnMuYXJlYSwKKwkJCWJvdHRvbSA9IHRoaXMub3B0aW9ucy5hcmVhLmJvdHRvbSB8fCB0aGlzLm9wdGlvbnMuYXJlYTsKKwkJZm9yICh2YXIgeiBpbiB0aGlzLnBhZ2UpeworCQkJaWYgKHRoaXMucGFnZVt6XSA8ICh0b3AgKyBwb3Nbel0pICYmIHNjcm9sbFt6XSAhPSAwKXsKKwkJCQljaGFuZ2Vbel0gPSAodGhpcy5wYWdlW3pdIC0gdG9wIC0gcG9zW3pdKSAqIHRoaXMub3B0aW9ucy52ZWxvY2l0eTsKKwkJCX0gZWxzZSBpZiAodGhpcy5wYWdlW3pdICsgYm90dG9tID4gKHNpemVbel0gKyBwb3Nbel0pICYmIHNjcm9sbFt6XSArIHNpemVbel0gIT0gc2Nyb2xsU2l6ZVt6XSl7CisJCQkJY2hhbmdlW3pdID0gKHRoaXMucGFnZVt6XSAtIHNpemVbel0gKyBib3R0b20gLSBwb3Nbel0pICogdGhpcy5vcHRpb25zLnZlbG9jaXR5OworCQkJfQorCQkJY2hhbmdlW3pdID0gY2hhbmdlW3pdLnJvdW5kKCk7CisJCX0KKwkJaWYgKGNoYW5nZS55IHx8IGNoYW5nZS54KSB0aGlzLmZpcmVFdmVudCgnY2hhbmdlJywgW3Njcm9sbC54ICsgY2hhbmdlLngsIHNjcm9sbC55ICsgY2hhbmdlLnldKTsKKwl9CisKK30pOworCit9KSgpOworCisKKy8qCistLS0KKworc2NyaXB0OiBUaXBzLmpzCisKK25hbWU6IFRpcHMKKworZGVzY3JpcHRpb246IENsYXNzIGZvciBjcmVhdGluZyBuaWNlIHRpcHMgdGhhdCBmb2xsb3cgdGhlIG1vdXNlIGN1cnNvciB3aGVuIGhvdmVyaW5nIGFuIGVsZW1lbnQuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gVmFsZXJpbyBQcm9pZXR0aQorICAtIENocmlzdG9waCBQb2plcgorICAtIEx1aXMgTWVyaW5vCisKK3JlcXVpcmVzOgorICAtIENvcmUvT3B0aW9ucworICAtIENvcmUvRXZlbnRzCisgIC0gQ29yZS9FbGVtZW50LkV2ZW50CisgIC0gQ29yZS9FbGVtZW50LlN0eWxlCisgIC0gQ29yZS9FbGVtZW50LkRpbWVuc2lvbnMKKyAgLSBNb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbVGlwc10KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIHJlYWQgPSBmdW5jdGlvbihvcHRpb24sIGVsZW1lbnQpeworCXJldHVybiAob3B0aW9uKSA/ICh0eXBlT2Yob3B0aW9uKSA9PSAnZnVuY3Rpb24nID8gb3B0aW9uKGVsZW1lbnQpIDogZWxlbWVudC5nZXQob3B0aW9uKSkgOiAnJzsKK307CisKK3ZhciBUaXBzID0gdGhpcy5UaXBzID0gbmV3IENsYXNzKHsKKworCUltcGxlbWVudHM6IFtFdmVudHMsIE9wdGlvbnNdLAorCisJb3B0aW9uczogey8qCisJCWlkOiBudWxsLAorCQlvbkF0dGFjaDogZnVuY3Rpb24oZWxlbWVudCl7fSwKKwkJb25EZXRhY2g6IGZ1bmN0aW9uKGVsZW1lbnQpe30sCisJCW9uQm91bmQ6IGZ1bmN0aW9uKGNvb3Jkcyl7fSwqLworCQlvblNob3c6IGZ1bmN0aW9uKCl7CisJCQl0aGlzLnRpcC5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpOworCQl9LAorCQlvbkhpZGU6IGZ1bmN0aW9uKCl7CisJCQl0aGlzLnRpcC5zZXRTdHlsZSgnZGlzcGxheScsICdub25lJyk7CisJCX0sCisJCXRpdGxlOiAndGl0bGUnLAorCQl0ZXh0OiBmdW5jdGlvbihlbGVtZW50KXsKKwkJCXJldHVybiBlbGVtZW50LmdldCgncmVsJykgfHwgZWxlbWVudC5nZXQoJ2hyZWYnKTsKKwkJfSwKKwkJc2hvd0RlbGF5OiAxMDAsCisJCWhpZGVEZWxheTogMTAwLAorCQljbGFzc05hbWU6ICd0aXAtd3JhcCcsCisJCW9mZnNldDoge3g6IDE2LCB5OiAxNn0sCisJCXdpbmRvd1BhZGRpbmc6IHt4OjAsIHk6MH0sCisJCWZpeGVkOiBmYWxzZSwKKwkJd2FpQXJpYTogdHJ1ZSwKKwkJaGlkZUVtcHR5OiBmYWxzZQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbigpeworCQl2YXIgcGFyYW1zID0gQXJyYXkubGluayhhcmd1bWVudHMsIHsKKwkJCW9wdGlvbnM6IFR5cGUuaXNPYmplY3QsCisJCQllbGVtZW50czogZnVuY3Rpb24ob2JqKXsKKwkJCQlyZXR1cm4gb2JqICE9IG51bGw7CisJCQl9CisJCX0pOworCQl0aGlzLnNldE9wdGlvbnMocGFyYW1zLm9wdGlvbnMpOworCQlpZiAocGFyYW1zLmVsZW1lbnRzKSB0aGlzLmF0dGFjaChwYXJhbXMuZWxlbWVudHMpOworCQl0aGlzLmNvbnRhaW5lciA9IG5ldyBFbGVtZW50KCdkaXYnLCB7J2NsYXNzJzogJ3RpcCd9KTsKKworCQlpZiAodGhpcy5vcHRpb25zLmlkKXsKKwkJCXRoaXMuY29udGFpbmVyLnNldCgnaWQnLCB0aGlzLm9wdGlvbnMuaWQpOworCQkJaWYgKHRoaXMub3B0aW9ucy53YWlBcmlhKSB0aGlzLmF0dGFjaFdhaUFyaWEoKTsKKwkJfQorCX0sCisKKwl0b0VsZW1lbnQ6IGZ1bmN0aW9uKCl7CisJCWlmICh0aGlzLnRpcCkgcmV0dXJuIHRoaXMudGlwOworCisJCXRoaXMudGlwID0gbmV3IEVsZW1lbnQoJ2RpdicsIHsKKwkJCSdjbGFzcyc6IHRoaXMub3B0aW9ucy5jbGFzc05hbWUsCisJCQlzdHlsZXM6IHsKKwkJCQlwb3NpdGlvbjogJ2Fic29sdXRlJywKKwkJCQl0b3A6IDAsCisJCQkJbGVmdDogMCwKKwkJCQlkaXNwbGF5OiAnbm9uZScKKwkJCX0KKwkJfSkuYWRvcHQoCisJCQluZXcgRWxlbWVudCgnZGl2JywgeydjbGFzcyc6ICd0aXAtdG9wJ30pLAorCQkJdGhpcy5jb250YWluZXIsCisJCQluZXcgRWxlbWVudCgnZGl2JywgeydjbGFzcyc6ICd0aXAtYm90dG9tJ30pCisJCSk7CisKKwkJcmV0dXJuIHRoaXMudGlwOworCX0sCisKKwlhdHRhY2hXYWlBcmlhOiBmdW5jdGlvbigpeworCQl2YXIgaWQgPSB0aGlzLm9wdGlvbnMuaWQ7CisJCXRoaXMuY29udGFpbmVyLnNldCgncm9sZScsICd0b29sdGlwJyk7CisKKwkJaWYgKCF0aGlzLndhaUFyaWEpeworCQkJdGhpcy53YWlBcmlhID0geworCQkJCXNob3c6IGZ1bmN0aW9uKGVsZW1lbnQpeworCQkJCQlpZiAoaWQpIGVsZW1lbnQuc2V0KCdhcmlhLWRlc2NyaWJlZGJ5JywgaWQpOworCQkJCQl0aGlzLmNvbnRhaW5lci5zZXQoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7CisJCQkJfSwKKwkJCQloaWRlOiBmdW5jdGlvbihlbGVtZW50KXsKKwkJCQkJaWYgKGlkKSBlbGVtZW50LmVyYXNlKCdhcmlhLWRlc2NyaWJlZGJ5Jyk7CisJCQkJCXRoaXMuY29udGFpbmVyLnNldCgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpOworCQkJCX0KKwkJCX07CisJCX0KKwkJdGhpcy5hZGRFdmVudHModGhpcy53YWlBcmlhKTsKKwl9LAorCisJZGV0YWNoV2FpQXJpYTogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMud2FpQXJpYSl7CisJCQl0aGlzLmNvbnRhaW5lci5lcmFzZSgncm9sZScpOworCQkJdGhpcy5jb250YWluZXIuZXJhc2UoJ2FyaWEtaGlkZGVuJyk7CisJCQl0aGlzLnJlbW92ZUV2ZW50cyh0aGlzLndhaUFyaWEpOworCQl9CisJfSwKKworCWF0dGFjaDogZnVuY3Rpb24oZWxlbWVudHMpeworCQkkJChlbGVtZW50cykuZWFjaChmdW5jdGlvbihlbGVtZW50KXsKKwkJCXZhciB0aXRsZSA9IHJlYWQodGhpcy5vcHRpb25zLnRpdGxlLCBlbGVtZW50KSwKKwkJCQl0ZXh0ID0gcmVhZCh0aGlzLm9wdGlvbnMudGV4dCwgZWxlbWVudCk7CisKKwkJCWVsZW1lbnQuc2V0KCd0aXRsZScsICcnKS5zdG9yZSgndGlwOm5hdGl2ZScsIHRpdGxlKS5yZXRyaWV2ZSgndGlwOnRpdGxlJywgdGl0bGUpOworCQkJZWxlbWVudC5yZXRyaWV2ZSgndGlwOnRleHQnLCB0ZXh0KTsKKwkJCXRoaXMuZmlyZUV2ZW50KCdhdHRhY2gnLCBbZWxlbWVudF0pOworCisJCQl2YXIgZXZlbnRzID0gWydlbnRlcicsICdsZWF2ZSddOworCQkJaWYgKCF0aGlzLm9wdGlvbnMuZml4ZWQpIGV2ZW50cy5wdXNoKCdtb3ZlJyk7CisKKwkJCWV2ZW50cy5lYWNoKGZ1bmN0aW9uKHZhbHVlKXsKKwkJCQl2YXIgZXZlbnQgPSBlbGVtZW50LnJldHJpZXZlKCd0aXA6JyArIHZhbHVlKTsKKwkJCQlpZiAoIWV2ZW50KSBldmVudCA9IGZ1bmN0aW9uKGV2ZW50KXsKKwkJCQkJdGhpc1snZWxlbWVudCcgKyB2YWx1ZS5jYXBpdGFsaXplKCldLmFwcGx5KHRoaXMsIFtldmVudCwgZWxlbWVudF0pOworCQkJCX0uYmluZCh0aGlzKTsKKworCQkJCWVsZW1lbnQuc3RvcmUoJ3RpcDonICsgdmFsdWUsIGV2ZW50KS5hZGRFdmVudCgnbW91c2UnICsgdmFsdWUsIGV2ZW50KTsKKwkJCX0sIHRoaXMpOworCQl9LCB0aGlzKTsKKworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZGV0YWNoOiBmdW5jdGlvbihlbGVtZW50cyl7CisJCSQkKGVsZW1lbnRzKS5lYWNoKGZ1bmN0aW9uKGVsZW1lbnQpeworCQkJWydlbnRlcicsICdsZWF2ZScsICdtb3ZlJ10uZWFjaChmdW5jdGlvbih2YWx1ZSl7CisJCQkJZWxlbWVudC5yZW1vdmVFdmVudCgnbW91c2UnICsgdmFsdWUsIGVsZW1lbnQucmV0cmlldmUoJ3RpcDonICsgdmFsdWUpKS5lbGltaW5hdGUoJ3RpcDonICsgdmFsdWUpOworCQkJfSk7CisKKwkJCXRoaXMuZmlyZUV2ZW50KCdkZXRhY2gnLCBbZWxlbWVudF0pOworCisJCQlpZiAodGhpcy5vcHRpb25zLnRpdGxlID09ICd0aXRsZScpeyAvLyBUaGlzIGlzIG5lY2Vzc2FyeSB0byBjaGVjayBpZiB3ZSBjYW4gcmV2ZXJ0IHRoZSB0aXRsZQorCQkJCXZhciBvcmlnaW5hbCA9IGVsZW1lbnQucmV0cmlldmUoJ3RpcDpuYXRpdmUnKTsKKwkJCQlpZiAob3JpZ2luYWwpIGVsZW1lbnQuc2V0KCd0aXRsZScsIG9yaWdpbmFsKTsKKwkJCX0KKwkJfSwgdGhpcyk7CisKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWVsZW1lbnRFbnRlcjogZnVuY3Rpb24oZXZlbnQsIGVsZW1lbnQpeworCQljbGVhclRpbWVvdXQodGhpcy50aW1lcik7CisJCXRoaXMudGltZXIgPSAoZnVuY3Rpb24oKXsKKwkJCXRoaXMuY29udGFpbmVyLmVtcHR5KCk7CisJCQl2YXIgc2hvd1RpcCA9ICF0aGlzLm9wdGlvbnMuaGlkZUVtcHR5OworCQkJWyd0aXRsZScsICd0ZXh0J10uZWFjaChmdW5jdGlvbih2YWx1ZSl7CisJCQkJdmFyIGNvbnRlbnQgPSBlbGVtZW50LnJldHJpZXZlKCd0aXA6JyArIHZhbHVlKTsKKwkJCQl2YXIgZGl2ID0gdGhpc1snXycgKyB2YWx1ZSArICdFbGVtZW50J10gPSBuZXcgRWxlbWVudCgnZGl2JywgeworCQkJCQknY2xhc3MnOiAndGlwLScgKyB2YWx1ZQorCQkJCX0pLmluamVjdCh0aGlzLmNvbnRhaW5lcik7CisJCQkJaWYgKGNvbnRlbnQpeworCQkJCQl0aGlzLmZpbGwoZGl2LCBjb250ZW50KTsKKwkJCQkJc2hvd1RpcCA9IHRydWU7CisJCQkJfQorCQkJfSwgdGhpcyk7CisJCQlpZiAoc2hvd1RpcCl7CisJCQkJdGhpcy5zaG93KGVsZW1lbnQpOworCQkJfSBlbHNlIHsKKwkJCQl0aGlzLmhpZGUoZWxlbWVudCk7CisJCQl9CisJCQl0aGlzLnBvc2l0aW9uKCh0aGlzLm9wdGlvbnMuZml4ZWQpID8ge3BhZ2U6IGVsZW1lbnQuZ2V0UG9zaXRpb24oKX0gOiBldmVudCk7CisJCX0pLmRlbGF5KHRoaXMub3B0aW9ucy5zaG93RGVsYXksIHRoaXMpOworCX0sCisKKwllbGVtZW50TGVhdmU6IGZ1bmN0aW9uKGV2ZW50LCBlbGVtZW50KXsKKwkJY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpOworCQl0aGlzLnRpbWVyID0gdGhpcy5oaWRlLmRlbGF5KHRoaXMub3B0aW9ucy5oaWRlRGVsYXksIHRoaXMsIGVsZW1lbnQpOworCQl0aGlzLmZpcmVGb3JQYXJlbnQoZXZlbnQsIGVsZW1lbnQpOworCX0sCisKKwlzZXRUaXRsZTogZnVuY3Rpb24odGl0bGUpeworCQlpZiAodGhpcy5fdGl0bGVFbGVtZW50KXsKKwkJCXRoaXMuX3RpdGxlRWxlbWVudC5lbXB0eSgpOworCQkJdGhpcy5maWxsKHRoaXMuX3RpdGxlRWxlbWVudCwgdGl0bGUpOworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwlzZXRUZXh0OiBmdW5jdGlvbih0ZXh0KXsKKwkJaWYgKHRoaXMuX3RleHRFbGVtZW50KXsKKwkJCXRoaXMuX3RleHRFbGVtZW50LmVtcHR5KCk7CisJCQl0aGlzLmZpbGwodGhpcy5fdGV4dEVsZW1lbnQsIHRleHQpOworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwlmaXJlRm9yUGFyZW50OiBmdW5jdGlvbihldmVudCwgZWxlbWVudCl7CisJCWVsZW1lbnQgPSBlbGVtZW50LmdldFBhcmVudCgpOworCQlpZiAoIWVsZW1lbnQgfHwgZWxlbWVudCA9PSBkb2N1bWVudC5ib2R5KSByZXR1cm47CisJCWlmIChlbGVtZW50LnJldHJpZXZlKCd0aXA6ZW50ZXInKSkgZWxlbWVudC5maXJlRXZlbnQoJ21vdXNlZW50ZXInLCBldmVudCk7CisJCWVsc2UgdGhpcy5maXJlRm9yUGFyZW50KGV2ZW50LCBlbGVtZW50KTsKKwl9LAorCisJZWxlbWVudE1vdmU6IGZ1bmN0aW9uKGV2ZW50LCBlbGVtZW50KXsKKwkJdGhpcy5wb3NpdGlvbihldmVudCk7CisJfSwKKworCXBvc2l0aW9uOiBmdW5jdGlvbihldmVudCl7CisJCWlmICghdGhpcy50aXApIGRvY3VtZW50LmlkKHRoaXMpOworCisJCXZhciBzaXplID0gd2luZG93LmdldFNpemUoKSwgc2Nyb2xsID0gd2luZG93LmdldFNjcm9sbCgpLAorCQkJdGlwID0ge3g6IHRoaXMudGlwLm9mZnNldFdpZHRoLCB5OiB0aGlzLnRpcC5vZmZzZXRIZWlnaHR9LAorCQkJcHJvcHMgPSB7eDogJ2xlZnQnLCB5OiAndG9wJ30sCisJCQlib3VuZHMgPSB7eTogZmFsc2UsIHgyOiBmYWxzZSwgeTI6IGZhbHNlLCB4OiBmYWxzZX0sCisJCQlvYmogPSB7fTsKKworCQlmb3IgKHZhciB6IGluIHByb3BzKXsKKwkJCW9ialtwcm9wc1t6XV0gPSBldmVudC5wYWdlW3pdICsgdGhpcy5vcHRpb25zLm9mZnNldFt6XTsKKwkJCWlmIChvYmpbcHJvcHNbel1dIDwgMCkgYm91bmRzW3pdID0gdHJ1ZTsKKwkJCWlmICgob2JqW3Byb3BzW3pdXSArIHRpcFt6XSAtIHNjcm9sbFt6XSkgPiBzaXplW3pdIC0gdGhpcy5vcHRpb25zLndpbmRvd1BhZGRpbmdbel0peworCQkJCW9ialtwcm9wc1t6XV0gPSBldmVudC5wYWdlW3pdIC0gdGhpcy5vcHRpb25zLm9mZnNldFt6XSAtIHRpcFt6XTsKKwkJCQlib3VuZHNbeisnMiddID0gdHJ1ZTsKKwkJCX0KKwkJfQorCisJCXRoaXMuZmlyZUV2ZW50KCdib3VuZCcsIGJvdW5kcyk7CisJCXRoaXMudGlwLnNldFN0eWxlcyhvYmopOworCX0sCisKKwlmaWxsOiBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50cyl7CisJCWlmICh0eXBlb2YgY29udGVudHMgPT0gJ3N0cmluZycpIGVsZW1lbnQuc2V0KCdodG1sJywgY29udGVudHMpOworCQllbHNlIGVsZW1lbnQuYWRvcHQoY29udGVudHMpOworCX0sCisKKwlzaG93OiBmdW5jdGlvbihlbGVtZW50KXsKKwkJaWYgKCF0aGlzLnRpcCkgZG9jdW1lbnQuaWQodGhpcyk7CisJCWlmICghdGhpcy50aXAuZ2V0UGFyZW50KCkpIHRoaXMudGlwLmluamVjdChkb2N1bWVudC5ib2R5KTsKKwkJdGhpcy5maXJlRXZlbnQoJ3Nob3cnLCBbdGhpcy50aXAsIGVsZW1lbnRdKTsKKwl9LAorCisJaGlkZTogZnVuY3Rpb24oZWxlbWVudCl7CisJCWlmICghdGhpcy50aXApIGRvY3VtZW50LmlkKHRoaXMpOworCQl0aGlzLmZpcmVFdmVudCgnaGlkZScsIFt0aGlzLnRpcCwgZWxlbWVudF0pOworCX0KKworfSk7CisKK30pKCk7CisKKy8qCistLS0KK25hbWU6IExvY2FsZS5DSC5OdW1iZXIKK2Rlc2NyaXB0aW9uOiBOdW1iZXIgbWVzc2FnZXMgZm9yIFN3aXR6ZXJsYW5kLgorbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKK2F1dGhvcnM6CisgIC0gS2ltIEQuIEpla2VyCityZXF1aXJlczoKKyAgLSBMb2NhbGUKK3Byb3ZpZGVzOiBbTG9jYWxlLkNILk51bWJlcl0KKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnQ0gnLCAnTnVtYmVyJywgeworCisJZGVjaW1hbDogJywnLAorCWdyb3VwOiAnXCcnLAorCisJY3VycmVuY3k6IHsKKwkJZGVjaW1hbDogJy4nLAorCQlzdWZmaXg6ICcgQ0hGJworCX0KKworfSk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLkVVLk51bWJlcgorCitkZXNjcmlwdGlvbjogTnVtYmVyIG1lc3NhZ2VzIGZvciBFdXJvcGUuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQXJpYW4gU3RvbHdpamsKKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLkVVLk51bWJlcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdFVScsICdOdW1iZXInLCB7CisKKwlkZWNpbWFsOiAnLCcsCisJZ3JvdXA6ICcuJywKKworCWN1cnJlbmN5OiB7CisJCXByZWZpeDogJ+KCrCAnCisJfQorCit9KTsKKworLyoKKy0tLQorCitzY3JpcHQ6IExvY2FsZS5TZXQuRnJvbS5qcworCituYW1lOiBMb2NhbGUuU2V0LkZyb20KKworZGVzY3JpcHRpb246IFByb3ZpZGVzIGFuIGFsdGVybmF0aXZlIHdheSB0byBjcmVhdGUgTG9jYWxlLlNldCBvYmplY3RzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFRpbSBXaWVuaworCityZXF1aXJlczoKKyAgLSBDb3JlL0pTT04KKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IExvY2FsZS5TZXQuRnJvbQorCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCit2YXIgcGFyc2VycyA9IHsKKwknanNvbic6IEpTT04uZGVjb2RlCit9OworCitMb2NhbGUuU2V0LmRlZmluZVBhcnNlciA9IGZ1bmN0aW9uKG5hbWUsIGZuKXsKKwlwYXJzZXJzW25hbWVdID0gZm47Cit9OworCitMb2NhbGUuU2V0LmZyb20gPSBmdW5jdGlvbihzZXQsIHR5cGUpeworCWlmIChpbnN0YW5jZU9mKHNldCwgTG9jYWxlLlNldCkpIHJldHVybiBzZXQ7CisKKwlpZiAoIXR5cGUgJiYgdHlwZU9mKHNldCkgPT0gJ3N0cmluZycpIHR5cGUgPSAnanNvbic7CisJaWYgKHBhcnNlcnNbdHlwZV0pIHNldCA9IHBhcnNlcnNbdHlwZV0oc2V0KTsKKworCXZhciBsb2NhbGUgPSBuZXcgTG9jYWxlLlNldDsKKworCWxvY2FsZS5zZXRzID0gc2V0LnNldHMgfHwge307CisKKwlpZiAoc2V0LmluaGVyaXRzKXsKKwkJbG9jYWxlLmluaGVyaXRzLmxvY2FsZXMgPSBBcnJheS5jb252ZXJ0KHNldC5pbmhlcml0cy5sb2NhbGVzKTsKKwkJbG9jYWxlLmluaGVyaXRzLnNldHMgPSBzZXQuaW5oZXJpdHMuc2V0cyB8fCB7fTsKKwl9CisKKwlyZXR1cm4gbG9jYWxlOworfTsKKworfSkoKTsKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuWkEuTnVtYmVyCisKK2Rlc2NyaXB0aW9uOiBOdW1iZXIgbWVzc2FnZXMgZm9yIFpBLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFdlcm5lciBNb2xsZW50emUKKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLlpBLk51bWJlcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdaQScsICdOdW1iZXInLCB7CisKKwlkZWNpbWFsOiAnLicsCisJZ3JvdXA6ICcsJywKKworCWN1cnJlbmN5OiB7CisJCXByZWZpeDogJ1IgJworCX0KKworfSk7CisKKworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5hZi1aQS5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBaQSBBZnJpa2FhbnMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gV2VybmVyIE1vbGxlbnR6ZQorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuYWYtWkEuRGF0ZV0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdhZi1aQScsICdEYXRlJywgeworCisJbW9udGhzOiBbJ0phbnVhcmllJywgJ0ZlYnJ1YXJpZScsICdNYWFydCcsICdBcHJpbCcsICdNZWknLCAnSnVuaWUnLCAnSnVsaWUnLCAnQXVndXN0dXMnLCAnU2VwdGVtYmVyJywgJ09rdG9iZXInLCAnTm92ZW1iZXInLCAnRGVzZW1iZXInXSwKKwltb250aHNfYWJicjogWydKYW4nLCAnRmViJywgJ01ydCcsICdBcHInLCAnTWVpJywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPa3QnLCAnTm92JywgJ0RlcyddLAorCWRheXM6IFsnU29uZGFnJywgJ01hYW5kYWcnLCAnRGluc2RhZycsICdXb2Vuc2RhZycsICdEb25kZXJkYWcnLCAnVnJ5ZGFnJywgJ1NhdGVyZGFnJ10sCisJZGF5c19hYmJyOiBbJ1NvbicsICdNYWEnLCAnRGluJywgJ1dvZScsICdEb24nLCAnVnJ5JywgJ1NhdCddLAorCisJLy8gQ3VsdHVyZSdzIGRhdGUgb3JkZXI6IE1NL0REL1lZWVkKKwlkYXRlT3JkZXI6IFsnZGF0ZScsICdtb250aCcsICd5ZWFyJ10sCisJc2hvcnREYXRlOiAnJWQtJW0tJVknLAorCXNob3J0VGltZTogJyVIOiVNJywKKwlBTTogJ1ZNJywKKwlQTTogJ05NJywKKwlmaXJzdERheU9mV2VlazogMSwKKworCS8vIERhdGUuRXh0cmFzCisJb3JkaW5hbDogZnVuY3Rpb24oZGF5T2ZNb250aCl7CisJCXJldHVybiAoKGRheU9mTW9udGggPiAxICYmIGRheU9mTW9udGggPCAyMCAmJiBkYXlPZk1vbnRoICE9IDgpIHx8IChkYXlPZk1vbnRoID4gMTAwICYmIGRheU9mTW9udGgudG9TdHJpbmcoKS5zdWJzdHIoLTIsIDEpID09ICcxJykpID8gJ2RlJyA6ICdzdGUnOworCX0sCisKKwlsZXNzVGhhbk1pbnV0ZUFnbzogJ21pbmRlciBhcyBcJ24gbWludXV0IGdlbGVkZScsCisJbWludXRlQWdvOiAnb25nZXZlZXIgXCduIG1pbnV1dCBnZWxlZGUnLAorCW1pbnV0ZXNBZ286ICd7ZGVsdGF9IG1pbnV0ZSBnZWxlZGUnLAorCWhvdXJBZ286ICdvbXRyZXQgXCduIHV1ciBnZWxlZGUnLAorCWhvdXJzQWdvOiAnb25nZXZlZXIge2RlbHRhfSB1cmUgZ2VsZWRlJywKKwlkYXlBZ286ICcxIGRhZyBnZWxlZGUnLAorCWRheXNBZ286ICd7ZGVsdGF9IGRhZSBnZWxlZGUnLAorCXdlZWtBZ286ICcxIHdlZWsgZ2VsZWRlJywKKwl3ZWVrc0FnbzogJ3tkZWx0YX0gd2VrZSBnZWxlZGUnLAorCW1vbnRoQWdvOiAnMSBtYWFuZCBnZWxlZGUnLAorCW1vbnRoc0FnbzogJ3tkZWx0YX0gbWFhbmRlIGdlbGVkZScsCisJeWVhckFnbzogJzEgamFhciBnZWxlZGUnLAorCXllYXJzQWdvOiAne2RlbHRhfSBqYXJlIGdlbGVkZScsCisKKwlsZXNzVGhhbk1pbnV0ZVVudGlsOiAnb29yIG1pbmRlciBhcyBcJ24gbWludXV0JywKKwltaW51dGVVbnRpbDogJ29vciBvbmdldmVlciBcJ24gbWludXV0JywKKwltaW51dGVzVW50aWw6ICdvb3Ige2RlbHRhfSBtaW51dGUnLAorCWhvdXJVbnRpbDogJ29vciBvbmdldmVlciBcJ24gdXVyJywKKwlob3Vyc1VudGlsOiAnb29yIHtkZWx0YX0gdXVyJywKKwlkYXlVbnRpbDogJ29vciBvbmdldmVlciBcJ24gZGFnJywKKwlkYXlzVW50aWw6ICdvb3Ige2RlbHRhfSBkYWUnLAorCXdlZWtVbnRpbDogJ29vciBcJ24gd2VlaycsCisJd2Vla3NVbnRpbDogJ29vciB7ZGVsdGF9IHdla2UnLAorCW1vbnRoVW50aWw6ICdvb3IgXCduIG1hYW5kJywKKwltb250aHNVbnRpbDogJ29vciB7ZGVsdGF9IG1hYW5kZScsCisJeWVhclVudGlsOiAnb29yIFwnbiBqYWFyJywKKwl5ZWFyc1VudGlsOiAnb29yIHtkZWx0YX0gamFhcicKKworfSk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmFmLVpBLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgQWZyaWthYW5zLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFdlcm5lciBNb2xsZW50emUKKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmFmLVpBLkZvcm0uVmFsaWRhdG9yXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2FmLVpBJywgJ0Zvcm1WYWxpZGF0b3InLCB7CisKKwlyZXF1aXJlZDogJ0hpZXJkaWUgdmVsZCB3b3JkIHZlcmVpcy4nLAorCWxlbmd0aDogJ1ZvZXIgYXNzZWJsaWVmIHtsZW5ndGh9IGthcmFrdGVycyBpbiAodSBoZXQge2VsTGVuZ3RofSBrYXJha3RlcnMgaW5nZXZvZXIpJywKKwltaW5MZW5ndGg6ICdWb2VyIGFzc2VibGllZiB0ZW4gbWluc3RlIHttaW5MZW5ndGh9IGthcmFrdGVycyBpbiAodSBoZXQge2xlbmd0aH0ga2FyYWt0ZXJzIGluZ2V2b2VyKS4nLAorCW1heExlbmd0aDogJ01vZXQgYXNzZWJsaWVmIG5pZSBtZWVyIGFzIHttYXhMZW5ndGh9IGthcmFrdGVycyBpbnZvZXIgbmllICh1IGhldCB7bGVuZ3RofSBrYXJha3RlcnMgaW5nZXZvZXIpLicsCisJaW50ZWdlcjogJ1ZvZXIgYXNzZWJsaWVmIFwnbiBoZWVsZ2V0YWwgaW4gaGllcmRpZSB2ZWxkIGluLiBHZXRhbGxlIG1ldCBkZXNpbWFsZSAoYnYuIDEuMjUpIHdvcmQgbmllIHRvZWdlbGFhdCBuaWUuJywKKwludW1lcmljOiAnVm9lciBhc3NlYmxpZWYgc2xlZ3MgbnVtZXJpZXNlIHdhYXJkZXMgaW4gaGllcmRpZSB2ZWxkIGluIChidi4gIjEiIG9mICIxLjEiIG9mICItMSIgb2YgIi0xLjEiKS4nLAorCWRpZ2l0czogJ0dlYnJ1aWsgYXNzZWJsaWVmIHNsZWdzIG5vbW1lcnMgZW4gcHVua3R1YXNpZSBpbiBoaWVyZGllIHZlbGQuIChieSB2b29yYmVlbGQsIFwnbiB0ZWxlZm9vbiBub21tZXIgd2F0IGtvcHBlbHRla2VucyBlbiBwdW50ZSBiZXZhdCBpcyB0b2VsYWF0YmFhcikuJywKKwlhbHBoYTogJ0dlYnJ1aWsgYXNzZWJsaWVmIHNsZWdzIGxldHRlcnMgKGEteikgYmlubmUtaW4gaGllcmRpZSB2ZWxkLiBHZWVuIHNwYXNpZXMgb2YgYW5kZXIga2FyYWt0ZXJzIHdvcmQgdG9lZ2VsYWF0IG5pZS4nLAorCWFscGhhbnVtOiAnR2VicnVpayBhc3NlYmxpZWYgc2xlZ3MgbGV0dGVycyAoYS16KSBlbiBub21tZXJzICgwLTkpIGJpbm5lLWluIGhpZXJkaWUgdmVsZC4gR2VlbiBzcGFzaWVzIG9mIGFuZGVyIGthcmFrdGVycyB3b3JkIHRvZWdlbGFhdCBuaWUuJywKKwlkYXRlU3VjaEFzOiAnVm9lciBhc3NlYmxpZWYgXCduIGdlbGRpZ2UgZGF0dW0gc29vcyB7ZGF0ZX0gaW4nLAorCWRhdGVJbkZvcm1hdE1EWTogJ1ZvZXIgYXNzZWJsaWVmIFwnbiBnZWxkaWdlIGRhdHVtIHNvb3MgTU0vREQvWVlZWSBpbiAoYnYuICIxMi8zMS8xOTk5IiknLAorCWVtYWlsOiAnVm9lciBhc3NlYmxpZWYgXCduIGdlbGRpZ2UgZS1wb3MgYWRyZXMgaW4uIEJ5dm9vcmJlZWxkICJmcmVkQGRvbWFpbi5jb20iLicsCisJdXJsOiAnVm9lciBhc3NlYmxpZWYgXCduIGdlbGRpZ2UgYnJvbmFkcmVzIChVUkwpIHNvb3MgaHR0cDovL3d3dy5leGFtcGxlLmNvbSBpbi4nLAorCWN1cnJlbmN5RG9sbGFyOiAnVm9lciBhc3NlYmxpZWYgXCduIGdlbGRpZ2UgJCBiZWRyYWcgaW4uIEJ5dm9vcmJlZWxkICQxMDAuMDAgLicsCisJb25lUmVxdWlyZWQ6ICdWb2VyIGFzc2VibGllZiBpZXRzIGluIHZpciB0ZW4gbWluc3RlIGVlbiB2YW4gaGllcmRpZSB2ZWxkZS4nLAorCWVycm9yUHJlZml4OiAnRm91dDogJywKKwl3YXJuaW5nUHJlZml4OiAnV2FhcnNrdXdpbmc6ICcsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAnRGFhciBtYWcgZ2VlbiBzcGFzaWVzIGluIGhpZXJkaWUgdG9ldm9lciB3ZWVzIG5pZS4nLAorCXJlcUNoa0J5Tm9kZTogJ0dlZW4gaXRlbXMgaXMgZ2VraWVzIG5pZS4nLAorCXJlcXVpcmVkQ2hrOiAnSGllcmRpZSB2ZWxkIHdvcmQgdmVyZWlzLicsCisJcmVxQ2hrQnlOYW1lOiAnS2llcyBhc3NlYmxpZWYgXCduIHtsYWJlbH0uJywKKwltYXRjaDogJ0hpZXJkaWUgdmVsZCBtb2V0IGJ5IGRpZSB7bWF0Y2hOYW1lfSB2ZWxkIHBhcycsCisJc3RhcnREYXRlOiAnZGllIGJlZ2luIGRhdHVtJywKKwllbmREYXRlOiAnZGllIGVpbmQgZGF0dW0nLAorCWN1cnJlbnREYXRlOiAnZGllIGh1aWRpZ2UgZGF0dW0nLAorCWFmdGVyRGF0ZTogJ0RpZSBkYXR1bSBtb2V0IGRpZXNlbGZkZSBvZiBuYSB7bGFiZWx9IHdlZXMuJywKKwliZWZvcmVEYXRlOiAnRGllIGRhdHVtIG1vZXQgZGllc2VsZmRlIG9mIHZvb3Ige2xhYmVsfSB3ZWVzLicsCisJc3RhcnRNb250aDogJ0tpZXMgYXNzZWJsaWVmIFwnbiBiZWdpbiBtYWFuZCcsCisJc2FtZU1vbnRoOiAnSGllcmRpZSB0d2VlIGRhdHVtcyBtb2V0IGluIGRpZXNlbGZkZSBtYWFuZCB3ZWVzIC0gdSBtb2V0IGVlbiBvZiBiZWlkZSB2ZXJhbmRlci4nLAorCWNyZWRpdGNhcmQ6ICdEaWUgaW5nZXZvZXJkZSBrcmVkaWV0a2FhcnQgbm9tbWVyIGlzIG9uZ2VsZGlnLiBCZXZlc3RpZyBhc3NlYmxpZWYgZGllIG5vbW1lciBlbiBwcm9iZWVyIHdlZXIuIHtsZW5ndGh9IHN5ZmVycyBpcyBpbmdldm9lci4nCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5hZi1aQS5OdW1iZXIKKworZGVzY3JpcHRpb246IE51bWJlciBtZXNzYWdlcyBmb3IgWkEgQWZyaWthYW5zLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFdlcm5lciBNb2xsZW50emUKKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisgIC0gTG9jYWxlLlpBLk51bWJlcgorCitwcm92aWRlczogW0xvY2FsZS5hZi1aQS5OdW1iZXJdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnYWYtWkEnKS5pbmhlcml0KCdaQScsICdOdW1iZXInKTsKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuYXIuRGF0ZQorCitkZXNjcmlwdGlvbjogRGF0ZSBtZXNzYWdlcyBmb3IgQXJhYmljLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIENoYWZpayBCYXJiYXIKKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmFyLkRhdGVdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnYXInLCAnRGF0ZScsIHsKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBERC9NTS9ZWVlZCisJZGF0ZU9yZGVyOiBbJ2RhdGUnLCAnbW9udGgnLCAneWVhciddLAorCXNob3J0RGF0ZTogJyVkLyVtLyVZJywKKwlzaG9ydFRpbWU6ICclSDolTScKKworfSk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmFyLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgQXJhYmljLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIENoYWZpayBCYXJiYXIKKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmFyLkZvcm0uVmFsaWRhdG9yXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2FyJywgJ0Zvcm1WYWxpZGF0b3InLCB7CisKKwlyZXF1aXJlZDogJ9mH2LDYpyDYp9mE2K3ZgtmEINmF2LfZhNmI2KguJywKKwltaW5MZW5ndGg6ICfYsdis2KfYodmLINil2K/Yrtin2YQge21pbkxlbmd0aH0g2KPYrdix2YEg2LnZhNmJINin2YTYo9mC2YQgKNiq2YUg2KXYr9iu2KfZhCB7bGVuZ3RofSDYo9it2LHZgSkuJywKKwltYXhMZW5ndGg6ICfYp9mE2LHYrNin2KEg2LnYr9mFINil2K/Yrtin2YQg2KPZg9ir2LEg2YXZhiB7bWF4TGVuZ3RofSDYo9it2LHZgSAo2KrZhSDYpdiv2K7Yp9mEIHtsZW5ndGh9INij2K3YsdmBKS4nLAorCWludGVnZXI6ICfYp9mE2LHYrNin2KEg2KXYr9iu2KfZhCDYudiv2K8g2LXYrdmK2K0g2YHZiiDZh9iw2Kcg2KfZhNit2YLZhC4g2KPZiiDYsdmC2YUg2LDZiCDZg9iz2LEg2LnYtNix2Yog2KPZiCDZhdim2YjZiiAo2YXYq9in2YQgMS4yNSApINi62YrYsSDZhdiz2YXZiNitLicsCisJbnVtZXJpYzogJ9in2YTYsdis2KfYoSDYpdiv2K7Yp9mEINmC2YrZhSDYsdmC2YXZitipINmB2Yog2YfYsNinINin2YTYrdmC2YQgKNmF2KvYp9mEICIxIiDYo9mIICIxLjEiINij2YggIi0xIiDYo9mIICItMS4xIikuJywKKwlkaWdpdHM6ICfYp9mE2LHYrNin2KEg2KPYs9iq2K7Yr9in2YUg2YLZitmFINix2YLZhdmK2Kkg2YjYudmE2KfZhdin2Kog2KrYsdmC2YrZhdmK2Kkg2YHZgti3INmB2Yog2YfYsNinINin2YTYrdmC2YQgKNmF2KvYp9mELCDYsdmC2YUg2YfYp9iq2YEg2YXYuSDZhtmC2LfYqSDYo9mIINi02K3Yt9ipKScsCisJYWxwaGE6ICfYp9mE2LHYrNin2KEg2KPYs9iq2K7Yr9in2YUg2KPYrdix2YEg2YHZgti3ICjYpy3Ziikg2YHZiiDZh9iw2Kcg2KfZhNit2YLZhC4g2KPZiiDZgdix2KfYutin2Kog2KPZiCDYudmE2KfZhdin2Kog2LrZitixINmF2LPZhdmI2K3YqS4nLAorCWFscGhhbnVtOiAn2KfZhNix2KzYp9ihINij2LPYqtiu2K/Yp9mFINij2K3YsdmBINmB2YLYtyAo2Kct2YopINij2Ygg2KPYsdmC2KfZhSAoMC05KSDZgdmC2Lcg2YHZiiDZh9iw2Kcg2KfZhNit2YLZhC4g2KPZiiDZgdix2KfYutin2Kog2KPZiCDYudmE2KfZhdin2Kog2LrZitixINmF2LPZhdmI2K3YqS4nLAorCWRhdGVTdWNoQXM6ICfYp9mE2LHYrNin2KEg2KXYr9iu2KfZhCDYqtin2LHZitiuINi12K3ZititINmD2KfZhNiq2KfZhNmKIHtkYXRlfScsCisJZGF0ZUluRm9ybWF0TURZOiAn2KfZhNix2KzYp9ihINil2K/Yrtin2YQg2KrYp9ix2YrYriDYtdit2YrYrSAo2YXYq9in2YQsIDMxLTEyLTE5OTkpJywKKwllbWFpbDogJ9in2YTYsdis2KfYoSDYpdiv2K7Yp9mEINio2LHZitivINil2YTZg9iq2LHZiNmG2Yog2LXYrdmK2K0uJywKKwl1cmw6ICfYp9mE2LHYrNin2KEg2KXYr9iu2KfZhCDYudmG2YjYp9mGINil2YTZg9iq2LHZiNmG2Yog2LXYrdmK2K0g2YXYq9mEIGh0dHA6Ly93d3cuZXhhbXBsZS5jb20nLAorCWN1cnJlbmN5RG9sbGFyOiAn2KfZhNix2KzYp9ihINil2K/Yrtin2YQg2YLZitmF2KkgJCDYtdit2YrYrdipLiDZhdir2KfZhCwgMTAwLjAwJCcsCisJb25lUmVxdWlyZWQ6ICfYp9mE2LHYrNin2KEg2KXYr9iu2KfZhCDZgtmK2YXYqSDZgdmKINij2K3YryDZh9iw2Ycg2KfZhNit2YLZiNmEINi52YTZiSDYp9mE2KPZgtmELicsCisJZXJyb3JQcmVmaXg6ICfYrti32KM6ICcsCisJd2FybmluZ1ByZWZpeDogJ9iq2K3YsNmK2LE6ICcKKworfSk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmNhLUNBLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIENhdGFsYW4uCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gw4NsZm9ucyBTYW5jaGV6CisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5jYS1DQS5EYXRlXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2NhLUNBJywgJ0RhdGUnLCB7CisKKwltb250aHM6IFsnR2VuZXInLCAnRmVicmVyJywgJ01hcsOnJywgJ0FicmlsJywgJ01haWcnLCAnSnVueScsICdKdWxpJywgJ0Fnb3N0JywgJ1NldGVtYnJlJywgJ09jdHVicmUnLCAnTm92ZW1icmUnLCAnRGVzZW1icmUnXSwKKwltb250aHNfYWJicjogWydnZW4uJywgJ2ZlYnIuJywgJ21hcsOnJywgJ2Fici4nLCAnbWFpZycsICdqdW55JywgJ2p1bC4nLCAnYWcuJywgJ3NldC4nLCAnb2N0LicsICdub3YuJywgJ2Rlcy4nXSwKKwlkYXlzOiBbJ0RpdW1lbmdlJywgJ0RpbGx1bnMnLCAnRGltYXJ0cycsICdEaW1lY3JlcycsICdEaWpvdXMnLCAnRGl2ZW5kcmVzJywgJ0Rpc3NhYnRlJ10sCisJZGF5c19hYmJyOiBbJ2RnJywgJ2RsJywgJ2R0JywgJ2RjJywgJ2RqJywgJ2R2JywgJ2RzJ10sCisKKwkvLyBDdWx0dXJlJ3MgZGF0ZSBvcmRlcjogREQvTU0vWVlZWQorCWRhdGVPcmRlcjogWydkYXRlJywgJ21vbnRoJywgJ3llYXInXSwKKwlzaG9ydERhdGU6ICclZC8lbS8lWScsCisJc2hvcnRUaW1lOiAnJUg6JU0nLAorCUFNOiAnQU0nLAorCVBNOiAnUE0nLAorCWZpcnN0RGF5T2ZXZWVrOiAwLAorCisJLy8gRGF0ZS5FeHRyYXMKKwlvcmRpbmFsOiAnJywKKworCWxlc3NUaGFuTWludXRlQWdvOiAnZmEgbWVueXMgZGB1biBtaW51dCcsCisJbWludXRlQWdvOiAnZmEgdW4gbWludXQnLAorCW1pbnV0ZXNBZ286ICdmYSB7ZGVsdGF9IG1pbnV0cycsCisJaG91ckFnbzogJ2ZhIHVuIGhvcmEnLAorCWhvdXJzQWdvOiAnZmEgdW5lcyB7ZGVsdGF9IGhvcmVzJywKKwlkYXlBZ286ICdmYSB1biBkaWEnLAorCWRheXNBZ286ICdmYSB7ZGVsdGF9IGRpZXMnLAorCisJbGVzc1RoYW5NaW51dGVVbnRpbDogJ21lbnlzIGRgdW4gbWludXQgZGVzIGRgYXJhJywKKwltaW51dGVVbnRpbDogJ3VuIG1pbnV0IGRlcyBkYGFyYScsCisJbWludXRlc1VudGlsOiAne2RlbHRhfSBtaW51dHMgZGVzIGRgYXJhJywKKwlob3VyVW50aWw6ICd1biBob3JhIGRlcyBkYGFyYScsCisJaG91cnNVbnRpbDogJ3VuZXMge2RlbHRhfSBob3JlcyBkZXMgZGBhcmEnLAorCWRheVVudGlsOiAnMSBkaWEgZGVzIGRgYXJhJywKKwlkYXlzVW50aWw6ICd7ZGVsdGF9IGRpZXMgZGVzIGRgYXJhJworCit9KTsKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuY2EtQ0EuRm9ybS5WYWxpZGF0b3IKKworZGVzY3JpcHRpb246IEZvcm0gVmFsaWRhdG9yIG1lc3NhZ2VzIGZvciBDYXRhbGFuLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIE1pcXVlbCBIdWRpbgorICAtIMODbGZvbnMgU2FuY2hlegorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuY2EtQ0EuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnY2EtQ0EnLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAnQXF1ZXN0IGNhbXAgZXMgb2JsaWdhdG9yaS4nLAorCW1pbkxlbmd0aDogJ1BlciBmYXZvciBpbnRyb2R1ZWl4IGFsIG1lbnlzIHttaW5MZW5ndGh9IGNhcmFjdGVycyAoaGFzIGludHJvZHVpdCB7bGVuZ3RofSBjYXJhY3RlcnMpLicsCisJbWF4TGVuZ3RoOiAnUGVyIGZhdm9yIGludHJvZHVlaXggbm8gbWVzIGRlIHttYXhMZW5ndGh9IGNhcmFjdGVycyAoaGFzIGludHJvZHVpdCB7bGVuZ3RofSBjYXJhY3RlcnMpLicsCisJaW50ZWdlcjogJ1BlciBmYXZvciBpbnRyb2R1ZWl4IHVuIG5vbWJyZSBlbnRlciBlbiBhcXVlc3QgY2FtcC4gTm9tYnJlcyBhbWIgZGVjaW1hbHMgKHAuZS4gMSwyNSkgbm8gZXN0YW4gcGVybWVzb3MuJywKKwludW1lcmljOiAnUGVyIGZhdm9yIGludHJvZHVlaXggc29scyB2YWxvcnMgbnVtZXJpY3MgZW4gYXF1ZXN0IGNhbXAgKHAuZS4gIjEiIG8gIjEsMSIgbyAiLTEiIG8gIi0xLDEiKS4nLAorCWRpZ2l0czogJ1BlciBmYXZvciB1c2Egc29scyBudW1lcm9zIGkgcHVudHVhY2lvIGVuIGFxdWVzdCBjYW1wIChwZXIgZXhlbXBsZSwgdW4gbm9tYnJlIGRlIHRlbGVmb24gYW1iIGd1aW9ucyBpIHB1bnRzIG5vIGVzdGEgcGVybWVzKS4nLAorCWFscGhhOiAnUGVyIGZhdm9yIHV0aWxpdHphIGxsZXRyZXMgbm9tZXMgKGEteikgZW4gYXF1ZXN0IGNhbXAuIE5vIHPCtGFkbWl0ZWl4ZW4gZXNwYWlzIG5pIGFsdHJlcyBjYXJhY3RlcnMuJywKKwlhbHBoYW51bTogJ1BlciBmYXZvciwgdXRpbGl0emEgbm9tZXMgbGxldHJlcyAoYS16KSBvIG51bWVyb3MgKDAtOSkgZW4gYXF1ZXN0IGNhbXAuIE5vIHPCtGFkbWl0ZWl4ZW4gZXNwYWlzIG5pIGFsdHJlcyBjYXJhY3RlcnMuJywKKwlkYXRlU3VjaEFzOiAnUGVyIGZhdm9yIGludHJvZHVlaXggdW5hIGRhdGEgdmFsaWRhIGNvbSB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ1BlciBmYXZvciBpbnRyb2R1ZWl4IHVuYSBkYXRhIHZhbGlkYSBjb20gREQvTU0vWVlZWSAocC5lLiAiMzEvMTIvMTk5OSIpJywKKwllbWFpbDogJ1BlciBmYXZvciwgaW50cm9kdWVpeCB1bmEgYWRyZcOnYSBkZSBjb3JyZXUgZWxlY3Ryb25pYyB2YWxpZGEuIFBlciBleGVtcGxlLCAiZnJlZEBkb21haW4uY29tIi4nLAorCXVybDogJ1BlciBmYXZvciBpbnRyb2R1ZWl4IHVuYSBVUkwgdmFsaWRhIGNvbSBodHRwOi8vd3d3LmV4YW1wbGUuY29tLicsCisJY3VycmVuY3lEb2xsYXI6ICdQZXIgZmF2b3IgaW50cm9kdWVpeCB1bmEgcXVhbnRpdGF0IHZhbGlkYSBkZSDigqwuIFBlciBleGVtcGxlIOKCrDEwMCwwMCAuJywKKwlvbmVSZXF1aXJlZDogJ1BlciBmYXZvciBpbnRyb2R1ZWl4IGFsZ3VuYSBjb3NhIHBlciBhbCBtZW55cyB1bmEgZMK0YXF1ZXN0ZXMgZW50cmFkZXMuJywKKwllcnJvclByZWZpeDogJ0Vycm9yOiAnLAorCXdhcm5pbmdQcmVmaXg6ICdBdmlzOiAnLAorCisJLy8gRm9ybS5WYWxpZGF0b3IuRXh0cmFzCisJbm9TcGFjZTogJ05vIHBvZGVuIGhhdmVyIGVzcGFpcyBlbiBhcXVlc3RhIGVudHJhZGEuJywKKwlyZXFDaGtCeU5vZGU6ICdObyBoaSBoYW4gZWxlbWVudHMgc2VsZWNjaW9uYXRzLicsCisJcmVxdWlyZWRDaGs6ICdBcXVlc3QgY2FtcCBlcyBvYmxpZ2F0b3JpLicsCisJcmVxQ2hrQnlOYW1lOiAnUGVyIGZhdm9yIHNlbGVjY2lvbmEgdW5hIHtsYWJlbH0uJywKKwltYXRjaDogJ0FxdWVzdCBjYW1wIG5lY2Vzc2l0YSBjb2luY2lkaXIgYW1iIGVsIGNhbXAge21hdGNoTmFtZX0nLAorCXN0YXJ0RGF0ZTogJ2xhIGRhdGEgZGUgaW5pY2knLAorCWVuZERhdGU6ICdsYSBkYXRhIGRlIGZpJywKKwljdXJyZW50RGF0ZTogJ2xhIGRhdGEgYWN0dWFsJywKKwlhZnRlckRhdGU6ICdMYSBkYXRhIGRldSBzZXIgaWd1YWwgbyBwb3N0ZXJpb3IgYSB7bGFiZWx9LicsCisJYmVmb3JlRGF0ZTogJ0xhIGRhdGEgZGV1IHNlciBpZ3VhbCBvIGFudGVyaW9yIGEge2xhYmVsfS4nLAorCXN0YXJ0TW9udGg6ICdQZXIgZmF2b3Igc2VsZWNjaW9uYSB1biBtZXMgZMK0b3JpZ2UnLAorCXNhbWVNb250aDogJ0FxdWVzdGVzIGRvcyBkYXRlcyBkZXVlbiBlc3RhciBkaW5zIGRlbCBtYXRlaXggbWVzIC0gZGV1cyBjYW52aWFyIHVuYSBvIGFsdHJhLicKKworfSk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmNzLUNaLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIEN6ZWNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEphbiDEjGVybsO9IGNoZW1pWAorICAtIENocmlzdG9waGVyIFp1a293c2tpCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5jcy1DWi5EYXRlXQorCisuLi4KKyovCisoZnVuY3Rpb24oKXsKKworLy8gQ3plY2ggbGFuZ3VhZ2UgcGx1cmFsaXphdGlvbiBydWxlcywgc2VlIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcy9jbGRyLXRtcC90cnVuay9kaWZmL3N1cHBsZW1lbnRhbC9sYW5ndWFnZV9wbHVyYWxfcnVsZXMuaHRtbAorLy8gb25lIC0+IG4gaXMgMTsgICAgICAgICAgICAxCisvLyBmZXcgLT4gbiBpbiAyLi40OyAgICAgICAgIDItNAorLy8gb3RoZXIgLT4gZXZlcnl0aGluZyBlbHNlICAwLCA1LTk5OSwgMS4zMSwgMi4zMSwgNS4zMS4uLgordmFyIHBsdXJhbGl6ZSA9IGZ1bmN0aW9uKG4sIG9uZSwgZmV3LCBvdGhlcil7CisJaWYgKG4gPT0gMSkgcmV0dXJuIG9uZTsKKwllbHNlIGlmIChuID09IDIgfHwgbiA9PSAzIHx8IG4gPT0gNCkgcmV0dXJuIGZldzsKKwllbHNlIHJldHVybiBvdGhlcjsKK307CisKK0xvY2FsZS5kZWZpbmUoJ2NzLUNaJywgJ0RhdGUnLCB7CisKKwltb250aHM6IFsnTGVkZW4nLCAnw5pub3InLCAnQsWZZXplbicsICdEdWJlbicsICdLdsSbdGVuJywgJ8SMZXJ2ZW4nLCAnxIxlcnZlbmVjJywgJ1NycGVuJywgJ1rDocWZw60nLCAnxZjDrWplbicsICdMaXN0b3BhZCcsICdQcm9zaW5lYyddLAorCW1vbnRoc19hYmJyOiBbJ2xlZG5hJywgJ8O6bm9yYScsICdixZllem5hJywgJ2R1Ym5hJywgJ2t2xJt0bmEnLCAnxI1lcnZuYScsICfEjWVydmVuY2UnLCAnc3JwbmEnLCAnesOhxZnDrScsICfFmcOtam5hJywgJ2xpc3RvcGFkdScsICdwcm9zaW5jZSddLAorCWRheXM6IFsnTmVkxJtsZScsICdQb25kxJtsw60nLCAnw5p0ZXLDvScsICdTdMWZZWRhJywgJ8SMdHZydGVrJywgJ1DDoXRlaycsICdTb2JvdGEnXSwKKwlkYXlzX2FiYnI6IFsnbmUnLCAncG8nLCAnw7p0JywgJ3N0JywgJ8SNdCcsICdww6EnLCAnc28nXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBERC5NTS5ZWVlZCisJZGF0ZU9yZGVyOiBbJ2RhdGUnLCAnbW9udGgnLCAneWVhciddLAorCXNob3J0RGF0ZTogJyVkLiVtLiVZJywKKwlzaG9ydFRpbWU6ICclSDolTScsCisJQU06ICdkb3AuJywKKwlQTTogJ29kcC4nLAorCWZpcnN0RGF5T2ZXZWVrOiAxLAorCisJLy8gRGF0ZS5FeHRyYXMKKwlvcmRpbmFsOiAnLicsCisKKwlsZXNzVGhhbk1pbnV0ZUFnbzogJ3DFmWVkIGNodsOtbMOtJywKKwltaW51dGVBZ286ICdwxZlpYmxpxb5uxJsgcMWZZWQgbWludXRvdScsCisJbWludXRlc0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3DFmWVkIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ21pbnV0b3UnLCAnbWludXRhbWknLCAnbWludXRhbWknKTsgfSwKKwlob3VyQWdvOiAncMWZaWJsacW+bsSbIHDFmWVkIGhvZGlub3UnLAorCWhvdXJzQWdvOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAncMWZZWQge2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAnaG9kaW5vdScsICdob2RpbmFtaScsICdob2RpbmFtaScpOyB9LAorCWRheUFnbzogJ3DFmWVkIGRuZW0nLAorCWRheXNBZ286IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICdwxZllZCB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICdkbmVtJywgJ2RueScsICdkbnknKTsgfSwKKwl3ZWVrQWdvOiAncMWZZWQgdMO9ZG5lbScsCisJd2Vla3NBZ286IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICdwxZllZCB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICd0w71kbmVtJywgJ3TDvWRueScsICd0w71kbnknKTsgfSwKKwltb250aEFnbzogJ3DFmWVkIG3Em3PDrWNlbScsCisJbW9udGhzQWdvOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAncMWZZWQge2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAnbcSbc8OtY2VtJywgJ23Em3PDrWNpJywgJ23Em3PDrWNpJyk7IH0sCisJeWVhckFnbzogJ3DFmWVkIHJva2VtJywKKwl5ZWFyc0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3DFmWVkIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ3Jva2VtJywgJ2xldHknLCAnbGV0eScpOyB9LAorCisJbGVzc1RoYW5NaW51dGVVbnRpbDogJ3phIGNodsOtbGknLAorCW1pbnV0ZVVudGlsOiAncMWZaWJsacW+bsSbIHphIG1pbnV0dScsCisJbWludXRlc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAnemEge2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAnbWludXR1JywgJ21pbnV0eScsICdtaW51dCcpOyB9LAorCWhvdXJVbnRpbDogJ3DFmWlibGnFvm7EmyB6YSBob2RpbnUnLAorCWhvdXJzVW50aWw6IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICd6YSB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICdob2RpbnUnLCAnaG9kaW55JywgJ2hvZGluJyk7IH0sCisJZGF5VW50aWw6ICd6YSBkZW4nLAorCWRheXNVbnRpbDogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3phIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ2RlbicsICdkbnknLCAnZG7FrycpOyB9LAorCXdlZWtVbnRpbDogJ3phIHTDvWRlbicsCisJd2Vla3NVbnRpbDogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3phIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ3TDvWRlbicsICd0w71kbnknLCAndMO9ZG7FrycpOyB9LAorCW1vbnRoVW50aWw6ICd6YSBtxJtzw61jJywKKwltb250aHNVbnRpbDogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3phIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ23Em3PDrWMnLCAnbcSbc8OtY2UnLCAnbcSbc8OtY8WvJyk7IH0sCisJeWVhclVudGlsOiAnemEgcm9rJywKKwl5ZWFyc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAnemEge2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAncm9rJywgJ3Jva3knLCAnbGV0Jyk7IH0KK30pOworCit9KSgpOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5jcy1DWi5Gb3JtLlZhbGlkYXRvcgorCitkZXNjcmlwdGlvbjogRm9ybSBWYWxpZGF0b3IgbWVzc2FnZXMgZm9yIEN6ZWNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEphbiDEjGVybsO9IGNoZW1pWAorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuY3MtQ1ouRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnY3MtQ1onLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAnVGF0byBwb2xvxb5rYSBqZSBwb3Zpbm7DoS4nLAorCW1pbkxlbmd0aDogJ1phZGVqdGUgcHJvc8OtbSBhbGVzcG/FiCB7bWluTGVuZ3RofSB6bmFrxa8gKG5hcHPDoW5vIHtsZW5ndGh9IHpuYWvFrykuJywKKwltYXhMZW5ndGg6ICdaYWRlanRlIHByb3PDrW0gbcOpbsSbIG5lxb4ge21heExlbmd0aH0gem5ha8WvIChuw6Fwc8Ohbm8ge2xlbmd0aH0gem5ha8WvKS4nLAorCWludGVnZXI6ICdaYWRlanRlIHByb3PDrW0gY2Vsw6kgxI3DrXNsby4gRGVzZXRpbm7DoSDEjcOtc2xhIChuYXDFmS4gMS4yNSkgbmVqc291IHBvdm9sZW5hLicsCisJbnVtZXJpYzogJ1phZGVqdGUgamVuIMSNw61zZWxuw6kgaG9kbm90eSAodGouICIxIiBuZWJvICIxLjEiIG5lYm8gIi0xIiBuZWJvICItMS4xIikuJywKKwlkaWdpdHM6ICdaYWRlanRlIHByb3PDrW0gcG91emUgxI3DrXNsYSBhIGludGVycHVua8SNbsOtIHpuYW3DqW5rYShuYXDFmcOta2xhZCB0ZWxlZm9ubsOtIMSNw61zbG8gcyBwb21sxI1rYW1pIG5lYm8gdGXEjWthbWkgamUgcG92b2xlbm8pLicsCisJYWxwaGE6ICdaYWRlanRlIHByb3PDrW0gcG91emUgcMOtc21lbmEgKGEteikuIE1lemVyeSBuZWJvIGppbsOpIHpuYWt5IG5lanNvdSBwb3ZvbGVueS4nLAorCWFscGhhbnVtOiAnWmFkZWp0ZSBwcm9zw61tIHBvdXplIHDDrXNtZW5hIChhLXopIG5lYm8gxI3DrXNsaWNlICgwLTkpLiBNZXplcnkgbmVibyBqaW7DqSB6bmFreSBuZWpzb3UgcG92b2xlbnkuJywKKwlkYXRlU3VjaEFzOiAnWmFkZWp0ZSBwcm9zw61tIHBsYXRuw6kgZGF0dW0gamFrbyB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ1phZGVqdGUgcHJvc8OtbSBwbGF0bsOpIGRhdHVtIGpha28gTU0gLyBERCAvIFJSUlIgKHRqLiAiMTIvMzEvMTk5OSIpJywKKwllbWFpbDogJ1phZGVqdGUgcHJvc8OtbSBwbGF0bm91IGUtbWFpbG92b3UgYWRyZXN1LiBOYXDFmcOta2xhZCAiZnJlZEBkb21haW4uY29tIi4nLAorCXVybDogJ1phZGVqdGUgcHJvc8OtbSBwbGF0bm91IFVSTCBhZHJlc3UgamFrbyBodHRwOi8vd3d3LmV4YW1wbGUuY29tLicsCisJY3VycmVuY3lEb2xsYXI6ICdaYWRlanRlIHByb3PDrW0gcGxhdG5vdSDEjcOhc3RrdS4gTmFwxZnDrWtsYWQgJDEwMC4wMC4nLAorCW9uZVJlcXVpcmVkOiAnWmFkZWp0ZSBwcm9zw61tIGFsZXNwb8WIIGplZG51IGhvZG5vdHUgcHJvIHR5dG8gcG9sb8W+a3kuJywKKwllcnJvclByZWZpeDogJ0NoeWJhOiAnLAorCXdhcm5pbmdQcmVmaXg6ICdVcG96b3JuxJtuw606ICcsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAnViB0w6l0byBwb2xvxb5jZSBuZWpzb3UgcG92b2xlbnkgbWV6ZXJ5JywKKwlyZXFDaGtCeU5vZGU6ICdOZWpzb3UgdnlicsOhbnkgxb7DoWRuw6kgcG9sb8W+a3kuJywKKwlyZXF1aXJlZENoazogJ1RhdG8gcG9sb8W+a2EgamUgdnnFvmFkb3bDoW5hLicsCisJcmVxQ2hrQnlOYW1lOiAnUHJvc8OtbSB2eWJlcnRlIHtsYWJlbH0uJywKKwltYXRjaDogJ1RhdG8gcG9sb8W+a2Egc2UgbXVzw60gc2hvZG92YXQgcyBwb2xvxb5rb3Uge21hdGNoTmFtZX0nLAorCXN0YXJ0RGF0ZTogJ2RhdHVtIHphaMOhamVuw60nLAorCWVuZERhdGU6ICdkYXR1bSB1a29uxI1lbsOtJywKKwljdXJyZW50RGF0ZTogJ2FrdHXDoWxuw60gZGF0dW0nLAorCWFmdGVyRGF0ZTogJ0RhdHVtIGJ5IG3Em2xvIGLDvXQgc3Rlam7DqSBuZWJvIHbEm3TFocOtIG5lxb4ge2xhYmVsfS4nLAorCWJlZm9yZURhdGU6ICdEYXR1bSBieSBtxJtsbyBiw710IHN0ZWpuw6kgbmVibyBtZW7FocOtIG5lxb4ge2xhYmVsfS4nLAorCXN0YXJ0TW9udGg6ICdWeWJlcnRlIHBvxI3DoXRlxI1uw60gbcSbc8OtYy4nLAorCXNhbWVNb250aDogJ1R5dG8gZHZhIGRhdHVteSBtdXPDrSBiw710IHZlIHN0ZWpuw6ltIG3Em3PDrWNpIC0gem3Em8WIdGUgamVkZW4geiBuaWNoLicsCisJY3JlZGl0Y2FyZDogJ1phZGFuw6kgxI3DrXNsbyBrcmVkaXRuw60ga2FydHkgamUgbmVwbGF0bsOpLiBQcm9zw61tIG9wcmF2dGUgaG8uIEJ5bG8gemFkw6FubyB7bGVuZ3RofSDEjcOtc2VsLicKKworfSk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmRhLURLLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIERhbmlzaC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBNYXJ0aW4gT3ZlcmdhYXJkCisgIC0gSGVucmlrIEhhbnNlbgorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZGEtREsuRGF0ZV0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdkYS1ESycsICdEYXRlJywgeworCisJbW9udGhzOiBbJ0phbnVhcicsICdGZWJydWFyJywgJ01hcnRzJywgJ0FwcmlsJywgJ01haicsICdKdW5pJywgJ0p1bGknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPa3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10sCisJbW9udGhzX2FiYnI6IFsnamFuLicsICdmZWIuJywgJ21hci4nLCAnYXByLicsICdtYWouJywgJ2p1bi4nLCAnanVsLicsICdhdWcuJywgJ3NlcC4nLCAnb2t0LicsICdub3YuJywgJ2RlYy4nXSwKKwlkYXlzOiBbJ1PDuG5kYWcnLCAnTWFuZGFnJywgJ1RpcnNkYWcnLCAnT25zZGFnJywgJ1RvcnNkYWcnLCAnRnJlZGFnJywgJ0zDuHJkYWcnXSwKKwlkYXlzX2FiYnI6IFsnc8O4bicsICdtYW4nLCAndGlyJywgJ29ucycsICd0b3InLCAnZnJlJywgJ2zDuHInXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBERC1NTS1ZWVlZCisJZGF0ZU9yZGVyOiBbJ2RhdGUnLCAnbW9udGgnLCAneWVhciddLAorCXNob3J0RGF0ZTogJyVkLSVtLSVZJywKKwlzaG9ydFRpbWU6ICclSDolTScsCisJQU06ICdBTScsCisJUE06ICdQTScsCisJZmlyc3REYXlPZldlZWs6IDEsCisKKwkvLyBEYXRlLkV4dHJhcworCW9yZGluYWw6ICcuJywKKworCWxlc3NUaGFuTWludXRlQWdvOiAnbWluZHJlIGVuZCBldCBtaW51dCBzaWRlbicsCisJbWludXRlQWdvOiAnb21rcmluZyBldCBtaW51dCBzaWRlbicsCisJbWludXRlc0FnbzogJ3tkZWx0YX0gbWludXR0ZXIgc2lkZW4nLAorCWhvdXJBZ286ICdvbWtyaW5nIGVuIHRpbWUgc2lkZW4nLAorCWhvdXJzQWdvOiAnb21rcmluZyB7ZGVsdGF9IHRpbWVyIHNpZGVuJywKKwlkYXlBZ286ICcxIGRhZyBzaWRlbicsCisJZGF5c0FnbzogJ3tkZWx0YX0gZGFnZSBzaWRlbicsCisJd2Vla0FnbzogJzEgdWdlIHNpZGVuJywKKwl3ZWVrc0FnbzogJ3tkZWx0YX0gdWdlciBzaWRlbicsCisJbW9udGhBZ286ICcxIG3DpW5lZCBzaWRlbicsCisJbW9udGhzQWdvOiAne2RlbHRhfSBtw6VuZWRlciBzaWRlbicsCisJeWVhckFnbzogJzEgw6VyIHNpZGVuJywKKwl5ZWFyc0FnbzogJ3tkZWx0YX0gw6VyIHNpZGVuJywKKworCWxlc3NUaGFuTWludXRlVW50aWw6ICdtaW5kcmUgZW5kIGV0IG1pbnV0IGZyYSBudScsCisJbWludXRlVW50aWw6ICdvbWtyaW5nIGV0IG1pbnV0IGZyYSBudScsCisJbWludXRlc1VudGlsOiAne2RlbHRhfSBtaW51dHRlciBmcmEgbnUnLAorCWhvdXJVbnRpbDogJ29ta3JpbmcgZW4gdGltZSBmcmEgbnUnLAorCWhvdXJzVW50aWw6ICdvbWtyaW5nIHtkZWx0YX0gdGltZXIgZnJhIG51JywKKwlkYXlVbnRpbDogJzEgZGFnIGZyYSBudScsCisJZGF5c1VudGlsOiAne2RlbHRhfSBkYWdlIGZyYSBudScsCisJd2Vla1VudGlsOiAnMSB1Z2UgZnJhIG51JywKKwl3ZWVrc1VudGlsOiAne2RlbHRhfSB1Z2VyIGZyYSBudScsCisJbW9udGhVbnRpbDogJzEgbcOlbmVkIGZyYSBudScsCisJbW9udGhzVW50aWw6ICd7ZGVsdGF9IG3DpW5lZGVyIGZyYSBudScsCisJeWVhclVudGlsOiAnMSDDpXIgZnJhIG51JywKKwl5ZWFyc1VudGlsOiAne2RlbHRhfSDDpXIgZnJhIG51JworCit9KTsKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuZGEtREsuRm9ybS5WYWxpZGF0b3IKKworZGVzY3JpcHRpb246IEZvcm0gVmFsaWRhdG9yIG1lc3NhZ2VzIGZvciBEYW5pc2guCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gTWFydGluIE92ZXJnYWFyZAorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZGEtREsuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZGEtREsnLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAnRmVsdGV0IHNrYWwgdWRmeWxkZXMuJywKKwltaW5MZW5ndGg6ICdTa3JpdiBtaW5kc3Qge21pbkxlbmd0aH0gdGVnbiAoZHUgc2tyZXYge2xlbmd0aH0gdGVnbikuJywKKwltYXhMZW5ndGg6ICdTa3JpdiBtYWtzaW1hbHQge21heExlbmd0aH0gdGVnbiAoZHUgc2tyZXYge2xlbmd0aH0gdGVnbikuJywKKwlpbnRlZ2VyOiAnU2tyaXYgZXQgdGFsIGkgZGV0dGUgZmVsdC4gRGVjaW1hbCB0YWwgKGYuZWtzLiAxLjI1KSBlciBpa2tlIHRpbGxhZHQuJywKKwludW1lcmljOiAnU2tyaXYga3VuIHRhbCBpIGRldHRlIGZlbHQgKGkuZS4gIjEiIGVsbGVyICIxLjEiIGVsbGVyICItMSIgZWxsZXIgIi0xLjEiKS4nLAorCWRpZ2l0czogJ1Nrcml2IGt1biB0YWwgb2cgdGVnbnPDpnRuaW5nIGkgZGV0dGUgZmVsdCAoZWtzZW1wZWwsIGV0IHRlbGVmb24gbnVtbWVyIG1lZCBiaW5kZXN0cmVnIGVsbGVyIHB1bmt0dW0gZXIgdGlsbGFkdCkuJywKKwlhbHBoYTogJ1Nrcml2IGt1biBib2dzdGF2ZXIgKGEteikgaSBkZXR0ZSBmZWx0LiBNZWxsZW1ydW0gb2cgYW5kcmUgdGVnbiBlciBpa2tlIHRpbGxhZHQuJywKKwlhbHBoYW51bTogJ1Nrcml2IGt1biBib2dzdGF2ZXIgKGEteikgZWxsZXIgdGFsICgwLTkpIGkgZGV0dGUgZmVsdC4gTWVsbGVtcnVtIG9nIGFuZHJlIHRlZ24gZXIgaWtrZSB0aWxsYWR0LicsCisJZGF0ZVN1Y2hBczogJ1Nrcml2IGVuIGd5bGRpZyBkYXRvIHNvbSB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ1Nrcml2IGRhdG8gaSBmb3JtYXRldCBERC1NTS1ZWVlZIChmLmVrcy4gIjMxLTEyLTE5OTkiKScsCisJZW1haWw6ICdTa3JpdiBlbiBneWxkaWcgZS1tYWlsIGFkcmVzc2UuIEYuZWtzICJmcmVkQGRvbWFpbi5jb20iLicsCisJdXJsOiAnU2tyaXYgZW4gZ3lsZGlnIFVSTCBhZHJlc3NlLiBGLmVrcyAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIuJywKKwljdXJyZW5jeURvbGxhcjogJ1Nrcml2IGV0IGdsZGlndCBiZWzDuGIuIEYuZWtzIEtyLjEwMC4wMCAuJywKKwlvbmVSZXF1aXJlZDogJ0V0IGVsbGVyIGZsZXJlIGFmIGZlbHRlcm5lIGkgZGVubmUgZm9ybXVsYXIgc2thbCB1ZGZ5bGRlcy4nLAorCWVycm9yUHJlZml4OiAnRmVqbDogJywKKwl3YXJuaW5nUHJlZml4OiAnQWR2YXJzZWw6ICcsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAnRGVyIG3DpSBpa2tlIGJlbnl0dGVzIG1lbGxlbXJ1bSBpIGRldHRlIGZlbHQuJywKKwlyZXFDaGtCeU5vZGU6ICdGb3JldGFnIGV0IHZhbGcuJywKKwlyZXF1aXJlZENoazogJ0RldHRlIGZlbHQgc2thbCB1ZGZ5bGRlcy4nLAorCXJlcUNoa0J5TmFtZTogJ1bDpmxnIGVuIHtsYWJlbH0uJywKKwltYXRjaDogJ0RldHRlIGZlbHQgc2thbCBtYXRjaGUge21hdGNoTmFtZX0gZmVsdGV0JywKKwlzdGFydERhdGU6ICdzdGFydCBkYXRvJywKKwllbmREYXRlOiAnc2x1dCBkYXRvJywKKwljdXJyZW50RGF0ZTogJ2RhZ3MgZGF0bycsCisJYWZ0ZXJEYXRlOiAnRGF0b2VuIHNrYWwgdsOmcmUgc3TDuHJyZSBlbmQgZWxsZXIgbGlnIG1lZCB7bGFiZWx9LicsCisJYmVmb3JlRGF0ZTogJ0RhdG9lbiBza2FsIHbDpnJlIG1pbmRyZSBlbmQgZWxsZXIgbGlnIG1lZCB7bGFiZWx9LicsCisJc3RhcnRNb250aDogJ1bDpmxnIGVuIHN0YXJ0IG3DpW5lZCcsCisJc2FtZU1vbnRoOiAnRGUgdmFsZ3RlIGRhdG9lciBza2FsIHbDpnJlIGkgc2FtbWUgbcOlbmVkIC0gc2tpZnQgZW4gYWYgZGVtLicKKworfSk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmRlLURFLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIEdlcm1hbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBDaHJpc3RvcGggUG9qZXIKKyAgLSBGcmFuayBSb3NzaQorICAtIFVscmljaCBQZXRyaQorICAtIEZhYmlhbiBCZWluZXIKKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmRlLURFLkRhdGVdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZGUtREUnLCAnRGF0ZScsIHsKKworCW1vbnRoczogWydKYW51YXInLCAnRmVicnVhcicsICdNw6RyeicsICdBcHJpbCcsICdNYWknLCAnSnVuaScsICdKdWxpJywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2t0b2JlcicsICdOb3ZlbWJlcicsICdEZXplbWJlciddLAorCW1vbnRoc19hYmJyOiBbJ0phbicsICdGZWInLCAnTcOkcicsICdBcHInLCAnTWFpJywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPa3QnLCAnTm92JywgJ0RleiddLAorCWRheXM6IFsnU29ubnRhZycsICdNb250YWcnLCAnRGllbnN0YWcnLCAnTWl0dHdvY2gnLCAnRG9ubmVyc3RhZycsICdGcmVpdGFnJywgJ1NhbXN0YWcnXSwKKwlkYXlzX2FiYnI6IFsnU28nLCAnTW8nLCAnRGknLCAnTWknLCAnRG8nLCAnRnInLCAnU2EnXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBERC5NTS5ZWVlZCisJZGF0ZU9yZGVyOiBbJ2RhdGUnLCAnbW9udGgnLCAneWVhciddLAorCXNob3J0RGF0ZTogJyVkLiVtLiVZJywKKwlzaG9ydFRpbWU6ICclSDolTScsCisJQU06ICd2b3JtaXR0YWdzJywKKwlQTTogJ25hY2htaXR0YWdzJywKKwlmaXJzdERheU9mV2VlazogMSwKKworCS8vIERhdGUuRXh0cmFzCisJb3JkaW5hbDogJy4nLAorCisJbGVzc1RoYW5NaW51dGVBZ286ICd2b3Igd2VuaWdlciBhbHMgZWluZXIgTWludXRlJywKKwltaW51dGVBZ286ICd2b3IgZWluZXIgTWludXRlJywKKwltaW51dGVzQWdvOiAndm9yIHtkZWx0YX0gTWludXRlbicsCisJaG91ckFnbzogJ3ZvciBlaW5lciBTdHVuZGUnLAorCWhvdXJzQWdvOiAndm9yIHtkZWx0YX0gU3R1bmRlbicsCisJZGF5QWdvOiAndm9yIGVpbmVtIFRhZycsCisJZGF5c0FnbzogJ3ZvciB7ZGVsdGF9IFRhZ2VuJywKKwl3ZWVrQWdvOiAndm9yIGVpbmVyIFdvY2hlJywKKwl3ZWVrc0FnbzogJ3ZvciB7ZGVsdGF9IFdvY2hlbicsCisJbW9udGhBZ286ICd2b3IgZWluZW0gTW9uYXQnLAorCW1vbnRoc0FnbzogJ3ZvciB7ZGVsdGF9IE1vbmF0ZW4nLAorCXllYXJBZ286ICd2b3IgZWluZW0gSmFocicsCisJeWVhcnNBZ286ICd2b3Ige2RlbHRhfSBKYWhyZW4nLAorCisJbGVzc1RoYW5NaW51dGVVbnRpbDogJ2luIHdlbmlnZXIgYWxzIGVpbmVyIE1pbnV0ZScsCisJbWludXRlVW50aWw6ICdpbiBlaW5lciBNaW51dGUnLAorCW1pbnV0ZXNVbnRpbDogJ2luIHtkZWx0YX0gTWludXRlbicsCisJaG91clVudGlsOiAnaW4gY2EuIGVpbmVyIFN0dW5kZScsCisJaG91cnNVbnRpbDogJ2luIGNhLiB7ZGVsdGF9IFN0dW5kZW4nLAorCWRheVVudGlsOiAnaW4gZWluZW0gVGFnJywKKwlkYXlzVW50aWw6ICdpbiB7ZGVsdGF9IFRhZ2VuJywKKwl3ZWVrVW50aWw6ICdpbiBlaW5lciBXb2NoZScsCisJd2Vla3NVbnRpbDogJ2luIHtkZWx0YX0gV29jaGVuJywKKwltb250aFVudGlsOiAnaW4gZWluZW0gTW9uYXQnLAorCW1vbnRoc1VudGlsOiAnaW4ge2RlbHRhfSBNb25hdGVuJywKKwl5ZWFyVW50aWw6ICdpbiBlaW5lbSBKYWhyJywKKwl5ZWFyc1VudGlsOiAnaW4ge2RlbHRhfSBKYWhyZW4nCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5kZS1DSC5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBHZXJtYW4gKFN3aXR6ZXJsYW5kKS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBNaWNoYWVsIHZhbiBkZXIgV2VnCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorICAtIExvY2FsZS5kZS1ERS5EYXRlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmRlLUNILkRhdGVdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZGUtQ0gnKS5pbmhlcml0KCdkZS1ERScsICdEYXRlJyk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmRlLUNILkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgR2VybWFuIChTd2l0emVybGFuZCkuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gTWljaGFlbCB2YW4gZGVyIFdlZworCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZGUtQ0guRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZGUtQ0gnLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAnRGllc2VzIEZlbGQgaXN0IG9ibGlnYXRvcmlzY2guJywKKwltaW5MZW5ndGg6ICdHZWJlbiBTaWUgYml0dGUgbWluZGVzdGVucyB7bWluTGVuZ3RofSBaZWljaGVuIGVpbiAoU2llIGhhYmVuIHtsZW5ndGh9IFplaWNoZW4gZWluZ2VnZWJlbikuJywKKwltYXhMZW5ndGg6ICdCaXR0ZSBnZWJlbiBTaWUgbmljaHQgbWVociBhbHMge21heExlbmd0aH0gWmVpY2hlbiBlaW4gKFNpZSBoYWJlbiB7bGVuZ3RofSBaZWljaGVuIGVpbmdlZ2ViZW4pLicsCisJaW50ZWdlcjogJ0dlYmVuIFNpZSBiaXR0ZSBlaW5lIGdhbnplIFphaGwgZWluLiBEZXppbWFsemFobGVuICh6LkIuIDEuMjUpIHNpbmQgbmljaHQgZXJsYXVidC4nLAorCW51bWVyaWM6ICdHZWJlbiBTaWUgYml0dGUgbnVyIFphaGxlbndlcnRlIGluIGRpZXNlcyBFaW5nYWJlZmVsZCBlaW4gKHouQi4gJnF1b3Q7MSZxdW90OywgJnF1b3Q7MS4xJnF1b3Q7LCAmcXVvdDstMSZxdW90OyBvZGVyICZxdW90Oy0xLjEmcXVvdDspLicsCisJZGlnaXRzOiAnQmVudXR6ZW4gU2llIGJpdHRlIG51ciBaYWhsZW4gdW5kIFNhdHp6ZWljaGVuIGluIGRpZXNlbSBFaW5nYWJlZmVsZCAoZXJsYXVidCBpc3Qgei5CLiBlaW5lIFRlbGVmb25udW1tZXIgbWl0IEJpbmRlc3RyaWNoZW4gdW5kIFB1bmt0ZW4pLicsCisJYWxwaGE6ICdCZW51dHplbiBTaWUgYml0dGUgbnVyIEJ1Y2hzdGFiZW4gKGEteikgaW4gZGllc2VtIEZlbGQuIExlZXJ6ZWljaGVuIHVuZCBhbmRlcmUgWmVpY2hlbiBzaW5kIG5pY2h0IGVybGF1YnQuJywKKwlhbHBoYW51bTogJ0JlbnV0emVuIFNpZSBiaXR0ZSBudXIgQnVjaHN0YWJlbiAoYS16KSB1bmQgWmFobGVuICgwLTkpIGluIGRpZXNlbSBFaW5nYWJlZmVsZC4gTGVlcnplaWNoZW4gdW5kIGFuZGVyZSBaZWljaGVuIHNpbmQgbmljaHQgZXJsYXVidC4nLAorCWRhdGVTdWNoQXM6ICdHZWJlbiBTaWUgYml0dGUgZWluIGcmdXVtbDtsdGlnZXMgRGF0dW0gZWluLiBXaWUgenVtIEJlaXNwaWVsIHtkYXRlfScsCisJZGF0ZUluRm9ybWF0TURZOiAnR2ViZW4gU2llIGJpdHRlIGVpbiBnJnV1bWw7bHRpZ2VzIERhdHVtIGVpbi4gV2llIHp1bSBCZWlzcGllbCBUVC5NTS5KSkpKICh6LkIuICZxdW90OzMxLjEyLjE5OTkmcXVvdDspJywKKwllbWFpbDogJ0dlYmVuIFNpZSBiaXR0ZSBlaW5lIGcmdXVtbDtsdGlnZSBFLU1haWwgQWRyZXNzZSBlaW4uIFdpZSB6dW0gQmVpc3BpZWwgJnF1b3Q7bWFyaWFAYmVybmFzY29uaS5jaCZxdW90Oy4nLAorCXVybDogJ0dlYmVuIFNpZSBiaXR0ZSBlaW5lIGcmdXVtbDtsdGlnZSBVUkwgZWluLiBXaWUgenVtIEJlaXNwaWVsIGh0dHA6Ly93d3cuZXhhbXBsZS5jb20uJywKKwljdXJyZW5jeURvbGxhcjogJ0dlYmVuIFNpZSBiaXR0ZSBlaW5lbiBnJnV1bWw7bHRpZ2VuIEJldHJhZyBpbiBTY2h3ZWl6ZXIgRnJhbmtlbiBlaW4uIFdpZSB6dW0gQmVpc3BpZWwgMTAwLjAwIENIRiAuJywKKwlvbmVSZXF1aXJlZDogJ01hY2hlbiBTaWUgZiZ1dW1sO3IgbWluZGVzdGVucyBlaW5lcyBkZXIgRWluZ2FiZWZlbGRlciBlaW5lbiBFaW50cmFnLicsCisJZXJyb3JQcmVmaXg6ICdGZWhsZXI6ICcsCisJd2FybmluZ1ByZWZpeDogJ1dhcm51bmc6ICcsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAnSW4gZGllc2VtIEVpbmdhYmVmZWxkIGRhcmYga2VpbiBMZWVyemVpY2hlbiBzZWluLicsCisJcmVxQ2hrQnlOb2RlOiAnRXMgd3VyZGVuIGtlaW5lIEVsZW1lbnRlIGdldyZhdW1sO2hsdC4nLAorCXJlcXVpcmVkQ2hrOiAnRGllc2VzIEZlbGQgaXN0IG9ibGlnYXRvcmlzY2guJywKKwlyZXFDaGtCeU5hbWU6ICdCaXR0ZSB3JmF1bWw7aGxlbiBTaWUgZWluIHtsYWJlbH0uJywKKwltYXRjaDogJ0RpZXNlcyBFaW5nYWJlZmVsZCBtdXNzIG1pdCBkZW0gRmVsZCB7bWF0Y2hOYW1lfSAmdXVtbDtiZXJlaW5zdGltbWVuLicsCisJc3RhcnREYXRlOiAnRGFzIEFuZmFuZ3NkYXR1bScsCisJZW5kRGF0ZTogJ0RhcyBFbmRkYXR1bScsCisJY3VycmVudERhdGU6ICdEYXMgYWt0dWVsbGUgRGF0dW0nLAorCWFmdGVyRGF0ZTogJ0RhcyBEYXR1bSBzb2xsdGUgenVyIGdsZWljaGVuIFplaXQgb2RlciBzcCZhdW1sO3RlciBzZWluIHtsYWJlbH0uJywKKwliZWZvcmVEYXRlOiAnRGFzIERhdHVtIHNvbGx0ZSB6dXIgZ2xlaWNoZW4gWmVpdCBvZGVyIGZyJnV1bWw7aGVyIHNlaW4ge2xhYmVsfS4nLAorCXN0YXJ0TW9udGg6ICdXJmF1bWw7aGxlbiBTaWUgYml0dGUgZWluZW4gQW5mYW5nc21vbmF0JywKKwlzYW1lTW9udGg6ICdEaWVzZSB6d2VpIERhdHVtc2FuZ2FiZW4gbSZ1dW1sO3NzZW4gaW0gc2VsYmVuIE1vbmF0IHNlaW4gLSBTaWUgbSZ1dW1sO3NzZW4gZWluZSB2b24gYmVpZGVuIHZlciZhdW1sO25kZXJuLicsCisJY3JlZGl0Y2FyZDogJ0RpZSBlaW5nZWdlYmVuZSBLcmVkaXRrYXJ0ZW5udW1tZXIgaXN0IHVuZyZ1dW1sO2x0aWcuIEJpdHRlICZ1dW1sO2JlcnByJnV1bWw7ZmVuIFNpZSBkaWVzZSB1bmQgdmVyc3VjaGVuIFNpZSBlcyBlcm5ldXQuIHtsZW5ndGh9IFphaGxlbiBlaW5nZWdlYmVuLicKKworfSk7CisKKy8qCistLS0KK25hbWU6IExvY2FsZS5kZS1DSC5OdW1iZXIKK2Rlc2NyaXB0aW9uOiBOdW1iZXIgbWVzc2FnZXMgZm9yIFN3aXR6ZXJsYW5kLgorbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKK2F1dGhvcnM6CisgIC0gS2ltIEQuIEpla2VyCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKyAgLSBMb2NhbGUuQ0guTnVtYmVyCitwcm92aWRlczogW0xvY2FsZS5kZS1DSC5OdW1iZXJdCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2RlLUNIJykuaW5oZXJpdCgnQ0gnLCAnTnVtYmVyJyk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmRlLURFLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgR2VybWFuLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEZyYW5rIFJvc3NpCisgIC0gVWxyaWNoIFBldHJpCisgIC0gRmFiaWFuIEJlaW5lcgorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZGUtREUuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZGUtREUnLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAnRGllc2VzIEVpbmdhYmVmZWxkIG11c3MgYXVzZ2Vmw7xsbHQgd2VyZGVuLicsCisJbWluTGVuZ3RoOiAnR2ViZW4gU2llIGJpdHRlIG1pbmRlc3RlbnMge21pbkxlbmd0aH0gWmVpY2hlbiBlaW4gKFNpZSBoYWJlbiBudXIge2xlbmd0aH0gWmVpY2hlbiBlaW5nZWdlYmVuKS4nLAorCW1heExlbmd0aDogJ0dlYmVuIFNpZSBiaXR0ZSBuaWNodCBtZWhyIGFscyB7bWF4TGVuZ3RofSBaZWljaGVuIGVpbiAoU2llIGhhYmVuIHtsZW5ndGh9IFplaWNoZW4gZWluZ2VnZWJlbikuJywKKwlpbnRlZ2VyOiAnR2ViZW4gU2llIGluIGRpZXNlbSBFaW5nYWJlZmVsZCBiaXR0ZSBlaW5lIGdhbnplIFphaGwgZWluLiBEZXppbWFsemFobGVuICh6LkIuICIxLjI1Iikgc2luZCBuaWNodCBlcmxhdWJ0LicsCisJbnVtZXJpYzogJ0dlYmVuIFNpZSBpbiBkaWVzZW0gRWluZ2FiZWZlbGQgYml0dGUgbnVyIFphaGxlbndlcnRlICh6LkIuICIxIiwgIjEuMSIsICItMSIgb2RlciAiLTEuMSIpIGVpbi4nLAorCWRpZ2l0czogJ0dlYmVuIFNpZSBpbiBkaWVzZW0gRWluZ2FiZWZlbGQgYml0dGUgbnVyIFphaGxlbiB1bmQgU2F0enplaWNoZW4gZWluICh6LkIuIGVpbmUgVGVsZWZvbm51bW1lciBtaXQgQmluZGVzdHJpY2hlbiB1bmQgUHVua3RlbiBpc3QgZXJsYXVidCkuJywKKwlhbHBoYTogJ0dlYmVuIFNpZSBpbiBkaWVzZW0gRWluZ2FiZWZlbGQgYml0dGUgbnVyIEJ1Y2hzdGFiZW4gKGEteikgZWluLiBMZWVyemVpY2hlbiB1bmQgYW5kZXJlIFplaWNoZW4gc2luZCBuaWNodCBlcmxhdWJ0LicsCisJYWxwaGFudW06ICdHZWJlbiBTaWUgaW4gZGllc2VtIEVpbmdhYmVmZWxkIGJpdHRlIG51ciBCdWNoc3RhYmVuIChhLXopIHVuZCBaYWhsZW4gKDAtOSkgZWluLiBMZWVyemVpY2hlbiBvZGVyIGFuZGVyZSBaZWljaGVuIHNpbmQgbmljaHQgZXJsYXVidC4nLAorCWRhdGVTdWNoQXM6ICdHZWJlbiBTaWUgYml0dGUgZWluIGfDvGx0aWdlcyBEYXR1bSBlaW4gKHouQi4gIntkYXRlfSIpLicsCisJZGF0ZUluRm9ybWF0TURZOiAnR2ViZW4gU2llIGJpdHRlIGVpbiBnw7xsdGlnZXMgRGF0dW0gaW0gRm9ybWF0IFRULk1NLkpKSkogZWluICh6LkIuICIzMS4xMi4xOTk5IikuJywKKwllbWFpbDogJ0dlYmVuIFNpZSBiaXR0ZSBlaW5lIGfDvGx0aWdlIEUtTWFpbC1BZHJlc3NlIGVpbiAoei5CLiAibWF4QG11c3Rlcm1hbm4uZGUiKS4nLAorCXVybDogJ0dlYmVuIFNpZSBiaXR0ZSBlaW5lIGfDvGx0aWdlIFVSTCBlaW4gKHouQi4gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKS4nLAorCWN1cnJlbmN5RG9sbGFyOiAnR2ViZW4gU2llIGJpdHRlIGVpbmVuIGfDvGx0aWdlbiBCZXRyYWcgaW4gRVVSTyBlaW4gKHouQi4gMTAwLjAw4oKsKS4nLAorCW9uZVJlcXVpcmVkOiAnQml0dGUgZsO8bGxlbiBTaWUgbWluZGVzdGVucyBlaW4gRWluZ2FiZWZlbGQgYXVzLicsCisJZXJyb3JQcmVmaXg6ICdGZWhsZXI6ICcsCisJd2FybmluZ1ByZWZpeDogJ1dhcm51bmc6ICcsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAnRXMgZGFyZiBrZWluIExlZXJ6ZWljaGVuIGluIGRpZXNlbSBFaW5nYWJlZmVsZCBzZWluLicsCisJcmVxQ2hrQnlOb2RlOiAnRXMgd3VyZGVuIGtlaW5lIEVsZW1lbnRlIGdld8OkaGx0LicsCisJcmVxdWlyZWRDaGs6ICdEaWVzZXMgRmVsZCBtdXNzIGF1c2dlZsO8bGx0IHdlcmRlbi4nLAorCXJlcUNoa0J5TmFtZTogJ0JpdHRlIHfDpGhsZW4gU2llIGVpbiB7bGFiZWx9LicsCisJbWF0Y2g6ICdEaWVzZXMgRWluZ2FiZWZlbGQgbXVzcyBtaXQgZGVtIHttYXRjaE5hbWV9IEVpbmdhYmVmZWxkIMO8YmVyZWluc3RpbW1lbi4nLAorCXN0YXJ0RGF0ZTogJ0RhcyBBbmZhbmdzZGF0dW0nLAorCWVuZERhdGU6ICdEYXMgRW5kZGF0dW0nLAorCWN1cnJlbnREYXRlOiAnRGFzIGFrdHVlbGxlIERhdHVtJywKKwlhZnRlckRhdGU6ICdEYXMgRGF0dW0gc29sbHRlIHp1ciBnbGVpY2hlbiBaZWl0IG9kZXIgc3DDpHRlciBzZWluIGFscyB7bGFiZWx9LicsCisJYmVmb3JlRGF0ZTogJ0RhcyBEYXR1bSBzb2xsdGUgenVyIGdsZWljaGVuIFplaXQgb2RlciBmcsO8aGVyIHNlaW4gYWxzIHtsYWJlbH0uJywKKwlzdGFydE1vbnRoOiAnV8OkaGxlbiBTaWUgYml0dGUgZWluZW4gQW5mYW5nc21vbmF0JywKKwlzYW1lTW9udGg6ICdEaWVzZSB6d2VpIERhdHVtc2FuZ2FiZW4gbcO8c3NlbiBpbSBzZWxiZW4gTW9uYXQgc2VpbiAtIFNpZSBtw7xzc2VuIGVpbmVzIHZvbiBiZWlkZW4gdmVyw6RuZGVybi4nLAorCWNyZWRpdGNhcmQ6ICdEaWUgZWluZ2VnZWJlbmUgS3JlZGl0a2FydGVubnVtbWVyIGlzdCB1bmfDvGx0aWcuIEJpdHRlIMO8YmVycHLDvGZlbiBTaWUgZGllc2UgdW5kIHZlcnN1Y2hlbiBTaWUgZXMgZXJuZXV0LiB7bGVuZ3RofSBaYWhsZW4gZWluZ2VnZWJlbi4nCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5kZS1ERS5OdW1iZXIKKworZGVzY3JpcHRpb246IE51bWJlciBtZXNzYWdlcyBmb3IgR2VybWFuLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIENocmlzdG9waCBQb2plcgorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKyAgLSBMb2NhbGUuRVUuTnVtYmVyCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmRlLURFLk51bWJlcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdkZS1ERScpLmluaGVyaXQoJ0VVJywgJ051bWJlcicpOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5lbC1HUi5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBHcmVlayBsYW5ndWFnZS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBQZXJpa2xpcyBBcmdpcmlhZGlzCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5lbC1HUi5EYXRlXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2VsLUdSJywgJ0RhdGUnLCB7CisKKwltb250aHM6IFsnzpnOsc69zr/Phc6sz4HOuc6/z4InLCAnzqbOtc6yz4HOv8+FzqzPgc65zr/PgicsICfOnM6sz4HPhM65zr/PgicsICfOkc+Az4HOr867zrnOv8+CJywgJ86czqzOuc6/z4InLCAnzpnOv8+Nzr3Ouc6/z4InLCAnzpnOv8+NzrvOuc6/z4InLCAnzpHPjc6zzr/Phc+Dz4TOv8+CJywgJ86jzrXPgM+Ezq3OvM6yz4HOuc6/z4InLCAnzp/Ous+Ez47Oss+BzrnOv8+CJywgJ86dzr/Orc68zrLPgc65zr/PgicsICfOlM61zrrOrc68zrLPgc65zr/PgiddLAorCW1vbnRoc19hYmJyOiBbJ86ZzrHOvScsICfOps61zrInLCAnzpzOsc+BJywgJ86Rz4DPgScsICfOnM6szrknLCAnzpnOv8+Fzr0nLCAnzpnOv8+FzrsnLCAnzpHPhc6zJywgJ86jzrXPgCcsICfOn866z4QnLCAnzp3Ov861JywgJ86UzrXOuiddLAorCWRheXM6IFsnzprPhc+BzrnOsc66zq4nLCAnzpTOtc+Fz4TOrc+BzrEnLCAnzqTPgc6vz4TOtycsICfOpM61z4TOrM+Bz4TOtycsICfOoM6tzrzPgM+EzrcnLCAnzqDOsc+BzrHPg866zrXPhc6uJywgJ86jzqzOss6yzrHPhM6/J10sCisJZGF5c19hYmJyOiBbJ86az4XPgScsICfOlM61z4UnLCAnzqTPgc65JywgJ86kzrXPhCcsICfOoM61zrwnLCAnzqDOsc+BJywgJ86jzrHOsiddLAorCisJLy8gQ3VsdHVyZSdzIGRhdGUgb3JkZXI6IEREL01NL1lZWVkKKwlkYXRlT3JkZXI6IFsnZGF0ZScsICdtb250aCcsICd5ZWFyJ10sCisJc2hvcnREYXRlOiAnJWQvJW0vJVknLAorCXNob3J0VGltZTogJyVJOiVNJXAnLAorCUFNOiAnz4DOvCcsCisJUE06ICfOvM68JywKKwlmaXJzdERheU9mV2VlazogMSwKKworCS8vIERhdGUuRXh0cmFzCisJb3JkaW5hbDogZnVuY3Rpb24oZGF5T2ZNb250aCl7CisJCS8vIDFzdCwgMm5kLCAzcmQsIGV0Yy4KKwkJcmV0dXJuIChkYXlPZk1vbnRoID4gMyAmJiBkYXlPZk1vbnRoIDwgMjEpID8gJ86/z4InIDogWyfOv8+CJ11bTWF0aC5taW4oZGF5T2ZNb250aCAlIDEwLCA0KV07CisJfSwKKworCWxlc3NUaGFuTWludXRlQWdvOiAnzrvOuc6zz4zPhM61z4HOvyDOsc+Az4wgzq3Ovc6xIM67zrXPgM+Ez4wgz4DPgc65zr0nLAorCW1pbnV0ZUFnbzogJ8+AzrXPgc6vz4DOv8+FIM6tzr3OsSDOu861z4DPhM+MIM+Az4HOuc69JywKKwltaW51dGVzQWdvOiAne2RlbHRhfSDOu861z4DPhM6sIM+Az4HOuc69JywKKwlob3VyQWdvOiAnz4DOtc+Bzq/PgM6/z4UgzrzOuc6xIM+Oz4HOsSDPgM+BzrnOvScsCisJaG91cnNBZ286ICfPgM61z4HOr8+Azr/PhSB7ZGVsdGF9IM+Oz4HOtc+CIM+Az4HOuc69JywKKwlkYXlBZ286ICcxIM63zrzOrc+BzrEgz4DPgc65zr0nLAorCWRheXNBZ286ICd7ZGVsdGF9IM63zrzOrc+BzrXPgiDPgM+BzrnOvScsCisJd2Vla0FnbzogJzEgzrXOss60zr/OvM6szrTOsSDPgM+BzrnOvScsCisJd2Vla3NBZ286ICd7ZGVsdGF9IM61zrLOtM6/zrzOrM60zrXPgiDPgM+BzrnOvScsCisJbW9udGhBZ286ICcxIM68zq7Ovc6xIM+Az4HOuc69JywKKwltb250aHNBZ286ICd7ZGVsdGF9IM68zq7Ovc61z4Igz4DPgc65zr0nLAorCXllYXJBZ286ICcxIM+Hz4HPjM69zr8gz4DPgc65zr0nLAorCXllYXJzQWdvOiAne2RlbHRhfSDPh8+Bz4zOvc65zrEgz4DPgc65zr0nLAorCisJbGVzc1RoYW5NaW51dGVVbnRpbDogJ867zrnOs8+Mz4TOtc+Bzr8gzrHPgM+MIM67zrXPgM+Ez4wgzrHPgM+MIM+Ez47Pgc6xJywKKwltaW51dGVVbnRpbDogJ8+AzrXPgc6vz4DOv8+FIM6tzr3OsSDOu861z4DPhM+MIM6xz4DPjCDPhM+Oz4HOsScsCisJbWludXRlc1VudGlsOiAne2RlbHRhfSDOu861z4DPhM6sIM6xz4DPjCDPhM+Oz4HOsScsCisJaG91clVudGlsOiAnz4DOtc+Bzq/PgM6/z4UgzrzOuc6xIM+Oz4HOsSDOsc+Az4wgz4TPjs+BzrEnLAorCWhvdXJzVW50aWw6ICfPgM61z4HOr8+Azr/PhSB7ZGVsdGF9IM+Oz4HOtc+CIM6xz4DPjCDPhM+Oz4HOsScsCisJZGF5VW50aWw6ICcxIM63zrzOrc+BzrEgzrHPgM+MIM+Ez47Pgc6xJywKKwlkYXlzVW50aWw6ICd7ZGVsdGF9IM63zrzOrc+BzrXPgiDOsc+Az4wgz4TPjs+BzrEnLAorCXdlZWtVbnRpbDogJzEgzrXOss60zr/OvM6szrTOsSDOsc+Az4wgz4TPjs+BzrEnLAorCXdlZWtzVW50aWw6ICd7ZGVsdGF9IM61zrLOtM6/zrzOrM60zrXPgiDOsc+Az4wgz4TPjs+BzrEnLAorCW1vbnRoVW50aWw6ICcxIM68zq7Ovc6xz4IgzrHPgM+MIM+Ez47Pgc6xJywKKwltb250aHNVbnRpbDogJ3tkZWx0YX0gzrzOrs69zrXPgiDOsc+Az4wgz4TPjs+BzrEnLAorCXllYXJVbnRpbDogJzEgz4fPgc+Mzr3Ov8+CIM6xz4DPjCDPhM+Oz4HOsScsCisJeWVhcnNVbnRpbDogJ3tkZWx0YX0gz4fPgc+Mzr3Ouc6xIM6xz4DPjCDPhM+Oz4HOsScKKworfSk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmVsLUdSLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgR3JlZWsgbGFuZ3VhZ2UuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gRGltaXRyaXMgVHNpcm9uaXMKKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmVsLUdSLkZvcm0uVmFsaWRhdG9yXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2VsLUdSJywgJ0Zvcm1WYWxpZGF0b3InLCB7CisKKwlyZXF1aXJlZDogJ86Rz4XPhM+MIM+Ezr8gz4DOtc60zq/OvyDOtc6vzr3Osc65IM6xz4DOsc+BzrHOr8+EzrfPhM6/LicsCisJbGVuZ3RoOiAnzqDOsc+BzrHOus6xzrvOv8+NzrzOtSwgzrXOuc+DzqzOs861z4TOtSB7bGVuZ3RofSDPh86xz4HOsc66z4TOrs+BzrXPgiAozq3Ph861z4TOtSDOrs60zrcgzrXOuc+DzqzOs861zrkge2VsTGVuZ3RofSDPh86xz4HOsc66z4TOrs+BzrXPgikuJywKKwltaW5MZW5ndGg6ICfOoM6xz4HOsc66zrHOu86/z43OvM61LCDOtc65z4POrM6zzrXPhM61IM+Ezr/Phc67zqzPh865z4PPhM6/zr0ge21pbkxlbmd0aH0gz4fOsc+BzrHOus+Ezq7Pgc61z4IgKM6tz4fOtc+EzrUgzq7OtM63IM61zrnPg86szrPOtSB7bGVuZ3RofSDPh86xz4HOsc66z4TOrs+BzrXPgikuJywKKwltYXhsZW5ndGg6ICfOoM6xz4HOsc66zrHOu86/z43OvM61LCDOtc65z4POrM6zzrXPhM61IM61z47PgiB7bWF4bGVuZ3RofSDPh86xz4HOsc66z4TOrs+BzrXPgiAozq3Ph861z4TOtSDOrs60zrcgzrXOuc+DzqzOs861IHtsZW5ndGh9IM+HzrHPgc6xzrrPhM6uz4HOtc+CKS4nLAorCWludGVnZXI6ICfOoM6xz4HOsc66zrHOu86/z43OvM61LCDOtc65z4POrM6zzrXPhM61IM6tzr3Osc69IM6xzrrOrc+BzrHOuc6/IM6xz4HOuc64zrzPjCDPg861IM6xz4XPhM+MIM+Ezr8gz4DOtc60zq/Ovy4gzp/OuSDOsc+BzrnOuM68zr/OryDOvM61IM60zrXOus6xzrTOuc66zqwgz4jOt8+Gzq/OsSAoz4Auz4cuIDEuMjUpIM60zrXOvSDOtc+AzrnPhM+Bzq3PgM6/zr3PhM6xzrkuJywKKwludW1lcmljOiAnzqDOsc+BzrHOus6xzrvOv8+NzrzOtSwgzrXOuc+DzqzOs861z4TOtSDOvM+Mzr3OvyDOsc+BzrnOuM68zrfPhM65zrrOrc+CIM+EzrnOvM6tz4Igz4POtSDOsc+Fz4TPjCDPhM6/IM+AzrXOtM6vzr8gKM+ALs+HLiIgMSAiIM6uICIgMS4xICIgzq4gIiAtMSAiIM6uICIgLTEuMSAiICkuJywKKwlkaWdpdHM6ICfOoM6xz4HOsc66zrHOu86/z43OvM61LCDPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61IM68z4zOvc6/IM6xz4HOuc64zrzOv8+Nz4IgzrrOsc65IM+DzrfOvM61zq/OsSDPg8+Ezq/Ovs63z4Igz4POtSDOsc+Fz4TPjM69IM+Ezr/OvSDPhM6/zrzOrc6xICjPgC7Phy4gzrXPgM65z4TPgc6tz4DOtc+EzrHOuSDOsc+BzrnOuM68z4zPgiDPhM63zrvOtc+Gz47Ovc6/z4UgzrzOtSDPgM6xz43Ou861z4Igzq4gz4TOtc67zrXOr861z4IpLicsCisJYWxwaGE6ICfOoM6xz4HOsc66zrHOu86/z43OvM61LCDPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61IM68z4zOvc6/IM6zz4HOrM68zrzOsc+EzrEgKGEteikgz4POtSDOsc+Fz4TPjCDPhM6/IM+AzrXOtM6vzr8uIM6UzrXOvSDOtc+AzrnPhM+Bzq3PgM6/zr3PhM6xzrkgzrrOtc69zqwgzq4gzqzOu867zr/OuSDPh86xz4HOsc66z4TOrs+BzrXPgi4nLAorCWFscGhhbnVtOiAnzqDOsc+BzrHOus6xzrvOv8+NzrzOtSwgz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSDOvM+Mzr3OvyDOs8+BzqzOvM68zrHPhM6xIChhLXopIM6uIM6xz4HOuc64zrzOv8+Nz4IgKDAtOSkgz4POtSDOsc+Fz4TPjM69IM+Ezr/OvSDPhM6/zrzOrc6xLiDOlM61zr0gzrXPgM65z4TPgc6tz4DOv869z4TOsc65IM66zrXOvc6sIM6uIM6szrvOu86/zrkgz4fOsc+BzrHOus+Ezq7Pgc61z4IuJywKKwlkYXRlU3VjaEFzOiAnzqDOsc+BzrHOus6xzrvOv8+NzrzOtSwgzrXOuc+DzqzOs861z4TOtSDOvM65zrEgzq3Os866z4XPgc63IM63zrzOtc+Bzr/OvM63zr3Or86xLCDPjM+Az4nPgiB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ86gzrHPgc6xzrrOsc67z44gzrXOuc+DzqzOs861z4TOtSDOvM65zrEgzq3Os866z4XPgc63IM63zrzOtc+Bzr/OvM63zr3Or86xLCDPjM+Az4nPgiDOnM6cL86XzpcvzpXOlc6VzpUgKM+ALs+HLiAiMTIvMzEvMTk5OSIpLicsCisJZW1haWw6ICfOoM6xz4HOsc66zrHOu86/z43OvM61LCDOtc65z4POrM6zzrXPhM61IM68zrnOsSDOrc6zzrrPhc+BzrcgzrTOuc61z43OuM+Fzr3Pg863IM63zrvOtc66z4TPgc6/zr3Ouc66zr/PjSDPhM6xz4fPhc60z4HOv868zrXOr86/z4UgKM+ALs+HLiAiZnJlZEBkb21haW4uY29tIikuJywKKwl1cmw6ICfOoM6xz4HOsc66zrHOu86/z43OvM61LCDOtc65z4POrM6zzrXPhM61IM68zrnOsSDOrc6zzrrPhc+BzrcgVVJMIM60zrnOtc+NzrjPhc69z4POtywgz4zPgM+Jz4IgaHR0cDovL3d3dy5leGFtcGxlLmNvbScsCisJY3VycmVuY3lEb2xsYXI6ICfOoM6xz4HOsc66zrHOu86/z43OvM61LCDOtc65z4POrM6zzrXPhM61IM6tzr3OsSDOrc6zzrrPhc+Bzr8gz4DOv8+Dz4wgz4POtSDOtM6/zrvOu86sz4HOuc6xICjPgC7Phy4gJDEwMC4wMCkuJywKKwlvbmVSZXF1aXJlZDogJ86gzrHPgc6xzrrOsc67zr/Pjc68zrUsIM61zrnPg86szrPOtc+EzrUgzrrOrM+EzrkgzrPOuc6xIM+Ezr/Phc67zqzPh865z4PPhM6/zr0gzq3Ovc6xIM6xz4DPjCDOsc+Fz4TOrCDPhM6xIM+AzrXOtM6vzrEuJywKKwllcnJvclByZWZpeDogJ86jz4bOrM67zrzOsTogJywKKwl3YXJuaW5nUHJlZml4OiAnzqDPgc6/z4POv8+Hzq46ICcsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAnzpTOtc69IM61z4DOuc+Ez4HOrc+Azr/Ovc+EzrHOuSDPhM6xIM66zrXOvc6sIM+DzrUgzrHPhc+Ez4wgz4TOvyDPgM61zrTOr86/LicsCisJcmVxQ2hrQnlOb2RlOiAnzpTOtc69IM6tz4fOtc65IM61z4DOuc67zrXOs861zq8gzrrOrM+Azr/Ouc6/IM6xzr3PhM65zrrOtc6vzrzOtc69zr8nLAorCXJlcXVpcmVkQ2hrOiAnzpHPhc+Ez4wgz4TOvyDPgM61zrTOr86/IM61zq/Ovc6xzrkgzrHPgM6xz4HOsc6vz4TOt8+Ezr8uJywKKwlyZXFDaGtCeU5hbWU6ICfOoM6xz4HOsc66zrHOu86/z43OvM61LCDOtc+AzrnOu86tzr7PhM61IM68zrnOsSDOtc+EzrnOus6tz4TOsSB7bGFiZWx9LicsCisJbWF0Y2g6ICfOkc+Fz4TPjCDPhM6/IM+AzrXOtM6vzr8gz4DPgc6tz4DOtc65IM69zrEgz4TOsc65z4HOuc6szrbOtc65IM68zrUgz4TOvyDPgM61zrTOr86/IHttYXRjaE5hbWV9LicsCisJc3RhcnREYXRlOiAnzrcgzrfOvM61z4HOv868zrfOvc6vzrEgzq3Ovc6xz4HOvs63z4InLAorCWVuZERhdGU6ICfOtyDOt868zrXPgc6/zrzOt869zq/OsSDOu86uzr7Ot8+CJywKKwljdXJyZW50RGF0ZTogJ863IM+Ez4HOrc+Hzr/Phc+DzrEgzrfOvM61z4HOv868zrfOvc6vzrEnLAorCWFmdGVyRGF0ZTogJ86XIM63zrzOtc+Bzr/OvM63zr3Or86xIM+Az4HOrc+AzrXOuSDOvc6xIM61zq/Ovc6xzrkgzrcgzq/OtM65zrEgzq4gzrzOtc+EzqwgzrHPgM+MIM+EzrfOvSB7bGFiZWx9LicsCisJYmVmb3JlRGF0ZTogJ86XIM63zrzOtc+Bzr/OvM63zr3Or86xIM+Az4HOrc+AzrXOuSDOvc6xIM61zq/Ovc6xzrkgzrcgzq/OtM65zrEgzq4gz4DPgc65zr0gzrHPgM+MIM+EzrfOvSB7bGFiZWx9LicsCisJc3RhcnRNb250aDogJ86gzrHPgc6xzrrOsc67z44gzrXPgM65zrvOrc6+z4TOtSDOrc69zrEgzrzOrs69zrEgzrHPgc+Hzq7Pgi4nLAorCXNhbWVNb250aDogJ86Rz4XPhM6tz4Igzr/OuSDOtM+Nzr8gzrfOvM61z4HOv868zrfOvc6vzrXPgiDPgM+Bzq3PgM61zrkgzr3OsSDOrc+Hzr/Phc69IM+Ezr/OvSDOr860zrnOvyDOvM6uzr3OsSAtIM64zrEgz4DPgc6tz4DOtc65IM69zrEgzrHOu867zqzOvs61z4TOtSDOriDPhM6/IM6tzr3OsSDOriDPhM6/IM6szrvOu86/JywKKwljcmVkaXRjYXJkOiAnzp8gzrHPgc65zrjOvM+Mz4Igz4TOt8+CIM+AzrnPg8+Ez4nPhM65zrrOrs+CIM66zqzPgc+EzrHPgiDOtM61zr0gzrXOr869zrHOuSDOrc6zzrrPhc+Bzr/Pgi4gzqDOsc+BzrHOus6xzrvOv8+NzrzOtSDOtc67zq3Os86+z4TOtSDPhM6/zr0gzrHPgc65zrjOvM+MIM66zrHOuSDOtM6/zrrOuc68zqzPg8+EzrUgzr7Osc69zqwuIHtsZW5ndGh9IM68zq7Ous6/z4Igz4jOt8+Gzq/Pic69LicKKworfSk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmVuLUdCLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIEJyaXRpc2ggRW5nbGlzaC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisgIC0gTG9jYWxlLmVuLVVTLkRhdGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZW4tR0IuRGF0ZV0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdlbi1HQicsICdEYXRlJywgeworCisJLy8gQ3VsdHVyZSdzIGRhdGUgb3JkZXI6IEREL01NL1lZWVkKKwlkYXRlT3JkZXI6IFsnZGF0ZScsICdtb250aCcsICd5ZWFyJ10sCisJc2hvcnREYXRlOiAnJWQvJW0vJVknLAorCXNob3J0VGltZTogJyVIOiVNJworCit9KS5pbmhlcml0KCdlbi1VUycsICdEYXRlJyk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmVuLVVTLk51bWJlcgorCitkZXNjcmlwdGlvbjogTnVtYmVyIG1lc3NhZ2VzIGZvciBVUyBFbmdsaXNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFyaWFuIFN0b2x3aWprCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5lbi1VUy5OdW1iZXJdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZW4tVVMnLCAnTnVtYmVyJywgeworCisJZGVjaW1hbDogJy4nLAorCWdyb3VwOiAnLCcsCisKKy8qIAlDb21tZW50ZWQgcHJvcGVydGllcyBhcmUgdGhlIGRlZmF1bHRzIGZvciBOdW1iZXIuZm9ybWF0CisJZGVjaW1hbHM6IDAsCisJcHJlY2lzaW9uOiAwLAorCXNjaWVudGlmaWM6IG51bGwsCisKKwlwcmVmaXg6IG51bGwsCisJc3VmZmljOiBudWxsLAorCisJLy8gTmVnYXRpdmUvQ3VycmVuY3kvcGVyY2VudGFnZSB3aWxsIG1peGluIE51bWJlcgorCW5lZ2F0aXZlOiB7CisJCXByZWZpeDogJy0nCisJfSwqLworCisJY3VycmVuY3k6IHsKKy8vCQlkZWNpbWFsczogMiwKKwkJcHJlZml4OiAnJCAnCisJfS8qLAorCisJcGVyY2VudGFnZTogeworCQlkZWNpbWFsczogMiwKKwkJc3VmZml4OiAnJScKKwl9Ki8KKworfSk7CisKKworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5lcy1FUy5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBTcGFuaXNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIMODbGZvbnMgU2FuY2hlegorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZXMtRVMuRGF0ZV0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdlcy1FUycsICdEYXRlJywgeworCisJbW9udGhzOiBbJ0VuZXJvJywgJ0ZlYnJlcm8nLCAnTWFyem8nLCAnQWJyaWwnLCAnTWF5bycsICdKdW5pbycsICdKdWxpbycsICdBZ29zdG8nLCAnU2VwdGllbWJyZScsICdPY3R1YnJlJywgJ05vdmllbWJyZScsICdEaWNpZW1icmUnXSwKKwltb250aHNfYWJicjogWydlbmUnLCAnZmViJywgJ21hcicsICdhYnInLCAnbWF5JywgJ2p1bicsICdqdWwnLCAnYWdvJywgJ3NlcCcsICdvY3QnLCAnbm92JywgJ2RpYyddLAorCWRheXM6IFsnRG9taW5nbycsICdMdW5lcycsICdNYXJ0ZXMnLCAnTWnDqXJjb2xlcycsICdKdWV2ZXMnLCAnVmllcm5lcycsICdTw6FiYWRvJ10sCisJZGF5c19hYmJyOiBbJ2RvbScsICdsdW4nLCAnbWFyJywgJ21pw6knLCAnanV2JywgJ3ZpZScsICdzw6FiJ10sCisKKwkvLyBDdWx0dXJlJ3MgZGF0ZSBvcmRlcjogREQvTU0vWVlZWQorCWRhdGVPcmRlcjogWydkYXRlJywgJ21vbnRoJywgJ3llYXInXSwKKwlzaG9ydERhdGU6ICclZC8lbS8lWScsCisJc2hvcnRUaW1lOiAnJUg6JU0nLAorCUFNOiAnQU0nLAorCVBNOiAnUE0nLAorCWZpcnN0RGF5T2ZXZWVrOiAxLAorCisJLy8gRGF0ZS5FeHRyYXMKKwlvcmRpbmFsOiAnJywKKworCWxlc3NUaGFuTWludXRlQWdvOiAnaGFjZSBtZW5vcyBkZSB1biBtaW51dG8nLAorCW1pbnV0ZUFnbzogJ2hhY2UgdW4gbWludXRvJywKKwltaW51dGVzQWdvOiAnaGFjZSB7ZGVsdGF9IG1pbnV0b3MnLAorCWhvdXJBZ286ICdoYWNlIHVuYSBob3JhJywKKwlob3Vyc0FnbzogJ2hhY2UgdW5hcyB7ZGVsdGF9IGhvcmFzJywKKwlkYXlBZ286ICdoYWNlIHVuIGTDrWEnLAorCWRheXNBZ286ICdoYWNlIHtkZWx0YX0gZMOtYXMnLAorCXdlZWtBZ286ICdoYWNlIHVuYSBzZW1hbmEnLAorCXdlZWtzQWdvOiAnaGFjZSB1bmFzIHtkZWx0YX0gc2VtYW5hcycsCisJbW9udGhBZ286ICdoYWNlIHVuIG1lcycsCisJbW9udGhzQWdvOiAnaGFjZSB7ZGVsdGF9IG1lc2VzJywKKwl5ZWFyQWdvOiAnaGFjZSB1biBhw7FvJywKKwl5ZWFyc0FnbzogJ2hhY2Uge2RlbHRhfSBhw7FvcycsCisKKwlsZXNzVGhhbk1pbnV0ZVVudGlsOiAnbWVub3MgZGUgdW4gbWludXRvIGRlc2RlIGFob3JhJywKKwltaW51dGVVbnRpbDogJ3VuIG1pbnV0byBkZXNkZSBhaG9yYScsCisJbWludXRlc1VudGlsOiAne2RlbHRhfSBtaW51dG9zIGRlc2RlIGFob3JhJywKKwlob3VyVW50aWw6ICd1bmEgaG9yYSBkZXNkZSBhaG9yYScsCisJaG91cnNVbnRpbDogJ3VuYXMge2RlbHRhfSBob3JhcyBkZXNkZSBhaG9yYScsCisJZGF5VW50aWw6ICd1biBkw61hIGRlc2RlIGFob3JhJywKKwlkYXlzVW50aWw6ICd7ZGVsdGF9IGTDrWFzIGRlc2RlIGFob3JhJywKKwl3ZWVrVW50aWw6ICd1bmEgc2VtYW5hIGRlc2RlIGFob3JhJywKKwl3ZWVrc1VudGlsOiAndW5hcyB7ZGVsdGF9IHNlbWFuYXMgZGVzZGUgYWhvcmEnLAorCW1vbnRoVW50aWw6ICd1biBtZXMgZGVzZGUgYWhvcmEnLAorCW1vbnRoc1VudGlsOiAne2RlbHRhfSBtZXNlcyBkZXNkZSBhaG9yYScsCisJeWVhclVudGlsOiAndW4gYcOxbyBkZXNkZSBhaG9yYScsCisJeWVhcnNVbnRpbDogJ3tkZWx0YX0gYcOxb3MgZGVzZGUgYWhvcmEnCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5lcy1BUi5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBTcGFuaXNoIChBcmdlbnRpbmEpLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIMODbGZvbnMgU2FuY2hlegorICAtIERpZWdvIE1hc3NhbnRpCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorICAtIExvY2FsZS5lcy1FUy5EYXRlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmVzLUFSLkRhdGVdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZXMtQVInKS5pbmhlcml0KCdlcy1FUycsICdEYXRlJyk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmVzLUFSLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgU3BhbmlzaCAoQXJnZW50aW5hKS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBEaWVnbyBNYXNzYW50aQorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZXMtQVIuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZXMtQVInLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAnRXN0ZSBjYW1wbyBlcyBvYmxpZ2F0b3Jpby4nLAorCW1pbkxlbmd0aDogJ1BvciBmYXZvciBpbmdyZXNlIGFsIG1lbm9zIHttaW5MZW5ndGh9IGNhcmFjdGVyZXMgKGhhIGluZ3Jlc2FkbyB7bGVuZ3RofSBjYXJhY3RlcmVzKS4nLAorCW1heExlbmd0aDogJ1BvciBmYXZvciBubyBpbmdyZXNlIG3DoXMgZGUge21heExlbmd0aH0gY2FyYWN0ZXJlcyAoaGEgaW5ncmVzYWRvIHtsZW5ndGh9IGNhcmFjdGVyZXMpLicsCisJaW50ZWdlcjogJ1BvciBmYXZvciBpbmdyZXNlIHVuIG7Dum1lcm8gZW50ZXJvIGVuIGVzdGUgY2FtcG8uIE7Dum1lcm9zIGNvbiBkZWNpbWFsZXMgKHAuZS4gMSwyNSkgbm8gc2UgcGVybWl0ZW4uJywKKwludW1lcmljOiAnUG9yIGZhdm9yIGluZ3Jlc2Ugc29sbyB2YWxvcmVzIG51bcOpcmljb3MgZW4gZXN0ZSBjYW1wbyAocC5lLiAiMSIgbyAiMSwxIiBvICItMSIgbyAiLTEsMSIpLicsCisJZGlnaXRzOiAnUG9yIGZhdm9yIHVzZSBzw7NsbyBuw7ptZXJvcyB5IHB1bnR1YWNpw7NuIGVuIGVzdGUgY2FtcG8gKHBvciBlamVtcGxvLCB1biBuw7ptZXJvIGRlIHRlbMOpZm9ubyBjb24gZ3Vpb25lcyB5L28gcHVudG9zIG5vIGVzdMOhIHBlcm1pdGlkbykuJywKKwlhbHBoYTogJ1BvciBmYXZvciB1c2Ugc8OzbG8gbGV0cmFzIChhLXopIGVuIGVzdGUgY2FtcG8uIE5vIHNlIHBlcm1pdGVuIGVzcGFjaW9zIG5pIG90cm9zIGNhcmFjdGVyZXMuJywKKwlhbHBoYW51bTogJ1BvciBmYXZvciwgdXNhIHPDs2xvIGxldHJhcyAoYS16KSBvIG7Dum1lcm9zICgwLTkpIGVuIGVzdGUgY2FtcG8uIE5vIHNlIHBlcm1pdGVuIGVzcGFjaW9zIHUgb3Ryb3MgY2FyYWN0ZXJlcy4nLAorCWRhdGVTdWNoQXM6ICdQb3IgZmF2b3IgaW5ncmVzZSB1bmEgZmVjaGEgdsOhbGlkYSBjb21vIHtkYXRlfScsCisJZGF0ZUluRm9ybWF0TURZOiAnUG9yIGZhdm9yIGluZ3Jlc2UgdW5hIGZlY2hhIHbDoWxpZGEsIHV0dWxpemFuZG8gZWwgZm9ybWF0byBERC9NTS9ZWVlZIChwLmUuICIzMS8xMi8xOTk5IiknLAorCWVtYWlsOiAnUG9yIGZhdm9yLCBpbmdyZXNlIHVuYSBkaXJlY2Npw7NuIGRlIGUtbWFpbCB2w6FsaWRhLiBQb3IgZWplbXBsbywgImZyZWRAZG9taW5pby5jb20iLicsCisJdXJsOiAnUG9yIGZhdm9yIGluZ3Jlc2UgdW5hIFVSTCB2w6FsaWRhIGNvbW8gaHR0cDovL3d3dy5leGFtcGxlLmNvbS4nLAorCWN1cnJlbmN5RG9sbGFyOiAnUG9yIGZhdm9yIGluZ3Jlc2UgdW5hIGNhbnRpZGFkIHbDoWxpZGEgZGUgcGVzb3MuIFBvciBlamVtcGxvICQxMDAsMDAgLicsCisJb25lUmVxdWlyZWQ6ICdQb3IgZmF2b3IgaW5ncmVzZSBhbGdvIHBhcmEgcG9yIGxvIG1lbm9zIHVuYSBkZSBlc3RhcyBlbnRyYWRhcy4nLAorCWVycm9yUHJlZml4OiAnRXJyb3I6ICcsCisJd2FybmluZ1ByZWZpeDogJ0FkdmVydGVuY2lhOiAnLAorCisJLy8gRm9ybS5WYWxpZGF0b3IuRXh0cmFzCisJbm9TcGFjZTogJ05vIHNlIHBlcm1pdGVuIGVzcGFjaW9zIGVuIGVzdGUgY2FtcG8uJywKKwlyZXFDaGtCeU5vZGU6ICdObyBoYXkgZWxlbWVudG9zIHNlbGVjY2lvbmFkb3MuJywKKwlyZXF1aXJlZENoazogJ0VzdGUgY2FtcG8gZXMgb2JsaWdhdG9yaW8uJywKKwlyZXFDaGtCeU5hbWU6ICdQb3IgZmF2b3Igc2VsZWNjaW9uYSB1bmEge2xhYmVsfS4nLAorCW1hdGNoOiAnRXN0ZSBjYW1wbyBuZWNlc2l0YSBjb2luY2lkaXIgY29uIGVsIGNhbXBvIHttYXRjaE5hbWV9JywKKwlzdGFydERhdGU6ICdsYSBmZWNoYSBkZSBpbmljaW8nLAorCWVuZERhdGU6ICdsYSBmZWNoYSBkZSBmaW4nLAorCWN1cnJlbnREYXRlOiAnbGEgZmVjaGEgYWN0dWFsJywKKwlhZnRlckRhdGU6ICdMYSBmZWNoYSBkZWJlIHNlciBpZ3VhbCBvIHBvc3RlcmlvciBhIHtsYWJlbH0uJywKKwliZWZvcmVEYXRlOiAnTGEgZmVjaGEgZGViZSBzZXIgaWd1YWwgbyBhbnRlcmlvciBhIHtsYWJlbH0uJywKKwlzdGFydE1vbnRoOiAnUG9yIGZhdm9yIHNlbGVjY2lvbmEgdW4gbWVzIGRlIG9yaWdlbicsCisJc2FtZU1vbnRoOiAnRXN0YXMgZG9zIGZlY2hhcyBkZWJlbiBlc3RhciBlbiBlbCBtaXNtbyBtZXMgLSBkZWJlcyBjYW1iaWFyIHVuYSB1IG90cmEuJworCit9KTsKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuZXMtQVIuTnVtYmVyCisKK2Rlc2NyaXB0aW9uOiBOdW1iZXIgbWVzc2FnZXMgZm9yIGVzIEFyZ2VudGluYS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBPc2NhciBLdWNodWsKKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmVzLUFSLk51bWJlcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdlcy1BUicsICdOdW1iZXInLCB7CisKKwlkZWNpbWFsOiAnLCcsCisJZ3JvdXA6ICcuJywKKworLyogCUNvbW1lbnRlZCBwcm9wZXJ0aWVzIGFyZSB0aGUgZGVmYXVsdHMgZm9yIE51bWJlci5mb3JtYXQKKwlkZWNpbWFsczogMCwKKwlwcmVjaXNpb246IDAsCisJc2NpZW50aWZpYzogbnVsbCwKKworCXByZWZpeDogbnVsbCwKKwlzdWZmaWM6IG51bGwsCisKKwkvLyBOZWdhdGl2ZS9DdXJyZW5jeS9wZXJjZW50YWdlIHdpbGwgbWl4aW4gTnVtYmVyCisJbmVnYXRpdmU6IHsKKwkJcHJlZml4OiAnLScKKwl9LCovCisKKwljdXJyZW5jeTogeworCQlkZWNpbWFsczogMiwKKwkJcHJlZml4OiAnJCAnCisJfS8qLAorCisJcGVyY2VudGFnZTogeworCQlkZWNpbWFsczogMiwKKwkJc3VmZml4OiAnJScKKwl9Ki8KKworfSk7CisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuZXMtRVMuRm9ybS5WYWxpZGF0b3IKKworZGVzY3JpcHRpb246IEZvcm0gVmFsaWRhdG9yIG1lc3NhZ2VzIGZvciBTcGFuaXNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIMODbGZvbnMgU2FuY2hlegorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZXMtRVMuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZXMtRVMnLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAnRXN0ZSBjYW1wbyBlcyBvYmxpZ2F0b3Jpby4nLAorCW1pbkxlbmd0aDogJ1BvciBmYXZvciBpbnRyb2R1Y2UgYWwgbWVub3Mge21pbkxlbmd0aH0gY2FyYWN0ZXJlcyAoaGFzIGludHJvZHVjaWRvIHtsZW5ndGh9IGNhcmFjdGVyZXMpLicsCisJbWF4TGVuZ3RoOiAnUG9yIGZhdm9yIGludHJvZHVjZSBubyBtJmFhY3V0ZTtzIGRlIHttYXhMZW5ndGh9IGNhcmFjdGVyZXMgKGhhcyBpbnRyb2R1Y2lkbyB7bGVuZ3RofSBjYXJhY3RlcmVzKS4nLAorCWludGVnZXI6ICdQb3IgZmF2b3IgaW50cm9kdWNlIHVuIG4mdWFjdXRlO21lcm8gZW50ZXJvIGVuIGVzdGUgY2FtcG8uIE4mdWFjdXRlO21lcm9zIGNvbiBkZWNpbWFsZXMgKHAuZS4gMSwyNSkgbm8gc2UgcGVybWl0ZW4uJywKKwludW1lcmljOiAnUG9yIGZhdm9yIGludHJvZHVjZSBzb2xvIHZhbG9yZXMgbnVtJmVhY3V0ZTtyaWNvcyBlbiBlc3RlIGNhbXBvIChwLmUuICIxIiBvICIxLDEiIG8gIi0xIiBvICItMSwxIikuJywKKwlkaWdpdHM6ICdQb3IgZmF2b3IgdXNhIHNvbG8gbiZ1YWN1dGU7bWVyb3MgeSBwdW50dWFjaSZvYWN1dGU7biBlbiBlc3RlIGNhbXBvIChwb3IgZWplbXBsbywgdW4gbiZ1YWN1dGU7bWVybyBkZSB0ZWwmZWFjdXRlO2Zvbm8gY29uIGd1aW9uZXMgeSBwdW50b3Mgbm8gZXN0YSBwZXJtaXRpZG8pLicsCisJYWxwaGE6ICdQb3IgZmF2b3IgdXNhIGxldHJhcyBzb2xvIChhLXopIGVuIGVzdGUgY2FtcG8uIE5vIHNlIGFkbWl0ZW4gZXNwYWNpb3Mgbmkgb3Ryb3MgY2FyYWN0ZXJlcy4nLAorCWFscGhhbnVtOiAnUG9yIGZhdm9yLCB1c2Egc29sbyBsZXRyYXMgKGEteikgbyBuJnVhY3V0ZTttZXJvcyAoMC05KSBlbiBlc3RlIGNhbXBvLiBObyBzZSBhZG1pdGVuIGVzcGFjaW9zIG5pIG90cm9zIGNhcmFjdGVyZXMuJywKKwlkYXRlU3VjaEFzOiAnUG9yIGZhdm9yIGludHJvZHVjZSB1bmEgZmVjaGEgdiZhYWN1dGU7bGlkYSBjb21vIHtkYXRlfScsCisJZGF0ZUluRm9ybWF0TURZOiAnUG9yIGZhdm9yIGludHJvZHVjZSB1bmEgZmVjaGEgdiZhYWN1dGU7bGlkYSBjb21vIEREL01NL1lZWVkgKHAuZS4gIjMxLzEyLzE5OTkiKScsCisJZW1haWw6ICdQb3IgZmF2b3IsIGludHJvZHVjZSB1bmEgZGlyZWNjaSZvYWN1dGU7biBkZSBlbWFpbCB2JmFhY3V0ZTtsaWRhLiBQb3IgZWplbXBsbywgImZyZWRAZG9tYWluLmNvbSIuJywKKwl1cmw6ICdQb3IgZmF2b3IgaW50cm9kdWNlIHVuYSBVUkwgdiZhYWN1dGU7bGlkYSBjb21vIGh0dHA6Ly93d3cuZXhhbXBsZS5jb20uJywKKwljdXJyZW5jeURvbGxhcjogJ1BvciBmYXZvciBpbnRyb2R1Y2UgdW5hIGNhbnRpZGFkIHYmYWFjdXRlO2xpZGEgZGUg4oKsLiBQb3IgZWplbXBsbyDigqwxMDAsMDAgLicsCisJb25lUmVxdWlyZWQ6ICdQb3IgZmF2b3IgaW50cm9kdWNlIGFsZ28gcGFyYSBwb3IgbG8gbWVub3MgdW5hIGRlIGVzdGFzIGVudHJhZGFzLicsCisJZXJyb3JQcmVmaXg6ICdFcnJvcjogJywKKwl3YXJuaW5nUHJlZml4OiAnQXZpc286ICcsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAnTm8gcHVlZGVuIGhhYmVyIGVzcGFjaW9zIGVuIGVzdGEgZW50cmFkYS4nLAorCXJlcUNoa0J5Tm9kZTogJ05vIGhheSBlbGVtZW50b3Mgc2VsZWNjaW9uYWRvcy4nLAorCXJlcXVpcmVkQ2hrOiAnRXN0ZSBjYW1wbyBlcyBvYmxpZ2F0b3Jpby4nLAorCXJlcUNoa0J5TmFtZTogJ1BvciBmYXZvciBzZWxlY2Npb25hIHVuYSB7bGFiZWx9LicsCisJbWF0Y2g6ICdFc3RlIGNhbXBvIG5lY2VzaXRhIGNvaW5jaWRpciBjb24gZWwgY2FtcG8ge21hdGNoTmFtZX0nLAorCXN0YXJ0RGF0ZTogJ2xhIGZlY2hhIGRlIGluaWNpbycsCisJZW5kRGF0ZTogJ2xhIGZlY2hhIGRlIGZpbicsCisJY3VycmVudERhdGU6ICdsYSBmZWNoYSBhY3R1YWwnLAorCWFmdGVyRGF0ZTogJ0xhIGZlY2hhIGRlYmUgc2VyIGlndWFsIG8gcG9zdGVyaW9yIGEge2xhYmVsfS4nLAorCWJlZm9yZURhdGU6ICdMYSBmZWNoYSBkZWJlIHNlciBpZ3VhbCBvIGFudGVyaW9yIGEge2xhYmVsfS4nLAorCXN0YXJ0TW9udGg6ICdQb3IgZmF2b3Igc2VsZWNjaW9uYSB1biBtZXMgZGUgb3JpZ2VuJywKKwlzYW1lTW9udGg6ICdFc3RhcyBkb3MgZmVjaGFzIGRlYmVuIGVzdGFyIGVuIGVsIG1pc21vIG1lcyAtIGRlYmVzIGNhbWJpYXIgdW5hIHUgb3RyYS4nCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5lcy1WRS5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBTcGFuaXNoIChWZW5lenVlbGEpLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIERhbmllbCBCYXJyZXRvCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorICAtIExvY2FsZS5lcy1FUy5EYXRlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmVzLVZFLkRhdGVdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZXMtVkUnKS5pbmhlcml0KCdlcy1FUycsICdEYXRlJyk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmVzLVZFLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgU3BhbmlzaCAoVmVuZXp1ZWxhKS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBEYW5pZWwgQmFycmV0bworCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKyAgLSBMb2NhbGUuZXMtRVMuRm9ybS5WYWxpZGF0b3IKKworcHJvdmlkZXM6IFtMb2NhbGUuZXMtVkUuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZXMtVkUnLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCWRpZ2l0czogJ1BvciBmYXZvciB1c2Egc29sbyBuJnVhY3V0ZTttZXJvcyB5IHB1bnR1YWNpJm9hY3V0ZTtuIGVuIGVzdGUgY2FtcG8uIFBvciBlamVtcGxvLCB1biBuJnVhY3V0ZTttZXJvIGRlIHRlbCZlYWN1dGU7Zm9ubyBjb24gZ3Vpb25lcyB5IHB1bnRvcyBubyBlc3RhIHBlcm1pdGlkby4nLAorCWFscGhhOiAnUG9yIGZhdm9yIHVzYSBzb2xvIGxldHJhcyAoYS16KSBlbiBlc3RlIGNhbXBvLiBObyBzZSBhZG1pdGVuIGVzcGFjaW9zIG5pIG90cm9zIGNhcmFjdGVyZXMuJywKKwljdXJyZW5jeURvbGxhcjogJ1BvciBmYXZvciBpbnRyb2R1Y2UgdW5hIGNhbnRpZGFkIHYmYWFjdXRlO2xpZGEgZGUgQnMuIFBvciBlamVtcGxvIEJzLiAxMDAsMDAgLicsCisJb25lUmVxdWlyZWQ6ICdQb3IgZmF2b3IgaW50cm9kdWNlIHVuIHZhbG9yIHBhcmEgcG9yIGxvIG1lbm9zIHVuYSBkZSBlc3RhcyBlbnRyYWRhcy4nLAorCisJLy8gRm9ybS5WYWxpZGF0b3IuRXh0cmFzCisJc3RhcnREYXRlOiAnTGEgZmVjaGEgZGUgaW5pY2lvJywKKwllbmREYXRlOiAnTGEgZmVjaGEgZGUgZmluJywKKwljdXJyZW50RGF0ZTogJ0xhIGZlY2hhIGFjdHVhbCcKKworfSkuaW5oZXJpdCgnZXMtRVMnLCAnRm9ybVZhbGlkYXRvcicpOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5lcy1WRS5OdW1iZXIKKworZGVzY3JpcHRpb246IE51bWJlciBtZXNzYWdlcyBmb3IgU3BhbmlzaCAoVmVuZXp1ZWxhKS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBEYW5pZWwgQmFycmV0bworCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZXMtVkUuTnVtYmVyXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2VzLVZFJywgJ051bWJlcicsIHsKKworCWRlY2ltYWw6ICcsJywKKwlncm91cDogJy4nLAorLyoKKwlkZWNpbWFsczogMCwKKwlwcmVjaXNpb246IDAsCisqLworCS8vIE5lZ2F0aXZlL0N1cnJlbmN5L3BlcmNlbnRhZ2Ugd2lsbCBtaXhpbiBOdW1iZXIKKwluZWdhdGl2ZTogeworCQlwcmVmaXg6ICctJworCX0sCisKKwljdXJyZW5jeTogeworCQlkZWNpbWFsczogMiwKKwkJcHJlZml4OiAnQnMuICcKKwl9LAorCisJcGVyY2VudGFnZTogeworCQlkZWNpbWFsczogMiwKKwkJc3VmZml4OiAnJScKKwl9CisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5ldC1FRS5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBFc3Rvbmlhbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBLZXZpbiBWYWxkZWsKKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmV0LUVFLkRhdGVdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZXQtRUUnLCAnRGF0ZScsIHsKKworCW1vbnRoczogWydqYWFudWFyJywgJ3ZlZWJydWFyJywgJ23DpHJ0cycsICdhcHJpbGwnLCAnbWFpJywgJ2p1dW5pJywgJ2p1dWxpJywgJ2F1Z3VzdCcsICdzZXB0ZW1iZXInLCAnb2t0b29iZXInLCAnbm92ZW1iZXInLCAnZGV0c2VtYmVyJ10sCisJbW9udGhzX2FiYnI6IFsnamFhbicsICd2ZWVicicsICdtw6RydHMnLCAnYXByJywgJ21haScsICdqdXVuaScsICdqdXVsaScsICdhdWcnLCAnc2VwdCcsICdva3QnLCAnbm92JywgJ2RldHMnXSwKKwlkYXlzOiBbJ3DDvGhhcMOkZXYnLCAnZXNtYXNww6RldicsICd0ZWlzaXDDpGV2JywgJ2tvbG1hcMOkZXYnLCAnbmVsamFww6RldicsICdyZWVkZScsICdsYXVww6RldiddLAorCWRheXNfYWJicjogWydww7xoYXAnLCAnZXNtYXNwJywgJ3RlaXNpcCcsICdrb2xtYXAnLCAnbmVsamFwJywgJ3JlZWRlJywgJ2xhdXAnXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBNTS5ERC5ZWVlZCisJZGF0ZU9yZGVyOiBbJ21vbnRoJywgJ2RhdGUnLCAneWVhciddLAorCXNob3J0RGF0ZTogJyVtLiVkLiVZJywKKwlzaG9ydFRpbWU6ICclSDolTScsCisJQU06ICdBTScsCisJUE06ICdQTScsCisJZmlyc3REYXlPZldlZWs6IDEsCisKKwkvLyBEYXRlLkV4dHJhcworCW9yZGluYWw6ICcnLAorCisJbGVzc1RoYW5NaW51dGVBZ286ICd2w6RoZW0ga3VpIG1pbnV0IGFlZ2EgdGFnYXNpJywKKwltaW51dGVBZ286ICd1bWJlcyBtaW51dCBhZWdhIHRhZ2FzaScsCisJbWludXRlc0FnbzogJ3tkZWx0YX0gbWludXRpdCB0YWdhc2knLAorCWhvdXJBZ286ICd1bWJlcyB0dW5kIGFlZ2EgdGFnYXNpJywKKwlob3Vyc0FnbzogJ3VtYmVzIHtkZWx0YX0gdHVuZGkgdGFnYXNpJywKKwlkYXlBZ286ICcxIHDDpGV2IHRhZ2FzaScsCisJZGF5c0FnbzogJ3tkZWx0YX0gcMOkZXZhIHRhZ2FzaScsCisJd2Vla0FnbzogJzEgbsOkZGFsIHRhZ2FzaScsCisJd2Vla3NBZ286ICd7ZGVsdGF9IG7DpGRhbGF0IHRhZ2FzaScsCisJbW9udGhBZ286ICcxIGt1dSB0YWdhc2knLAorCW1vbnRoc0FnbzogJ3tkZWx0YX0ga3V1ZCB0YWdhc2knLAorCXllYXJBZ286ICcxIGFhc3RhIHRhZ2FzaScsCisJeWVhcnNBZ286ICd7ZGVsdGF9IGFhc3RhdCB0YWdhc2knLAorCisJbGVzc1RoYW5NaW51dGVVbnRpbDogJ3bDpGhlbSBrdWkgbWludXRpIGFqYSBww6RyYXN0JywKKwltaW51dGVVbnRpbDogJ3VtYmVzIG1pbnV0aSBhamEgcMOkcmFzdCcsCisJbWludXRlc1VudGlsOiAne2RlbHRhfSBtaW51dGkgcMOkcmFzdCcsCisJaG91clVudGlsOiAndW1iZXMgdHVubmkgYWphIHDDpHJhc3QnLAorCWhvdXJzVW50aWw6ICd1bWJlcyB7ZGVsdGF9IHR1bm5pIHDDpHJhc3QnLAorCWRheVVudGlsOiAnMSBww6RldmEgcMOkcmFzdCcsCisJZGF5c1VudGlsOiAne2RlbHRhfSBww6RldmEgcMOkcmFzdCcsCisJd2Vla1VudGlsOiAnMSBuw6RkYWxhIHDDpHJhc3QnLAorCXdlZWtzVW50aWw6ICd7ZGVsdGF9IG7DpGRhbGEgcMOkcmFzdCcsCisJbW9udGhVbnRpbDogJzEga3V1IHDDpHJhc3QnLAorCW1vbnRoc1VudGlsOiAne2RlbHRhfSBrdXUgcMOkcmFzdCcsCisJeWVhclVudGlsOiAnMSBhYXN0YSBww6RyYXN0JywKKwl5ZWFyc1VudGlsOiAne2RlbHRhfSBhYXN0YSBww6RyYXN0JworCit9KTsKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuZXQtRUUuRm9ybS5WYWxpZGF0b3IKKworZGVzY3JpcHRpb246IEZvcm0gVmFsaWRhdG9yIG1lc3NhZ2VzIGZvciBFc3Rvbmlhbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBLZXZpbiBWYWxkZWsKKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmV0LUVFLkZvcm0uVmFsaWRhdG9yXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2V0LUVFJywgJ0Zvcm1WYWxpZGF0b3InLCB7CisKKwlyZXF1aXJlZDogJ1bDpGxpIHBlYWIgb2xlbWEgdMOkaWRldHVkLicsCisJbWluTGVuZ3RoOiAnUGFsdW4gc2lzZXN0YWdlIHbDpGhlbWFsdCB7bWluTGVuZ3RofSB0w6RodGUgKHRlIHNpc2VzdGFzaXRlIHtsZW5ndGh9IHTDpGh0ZSkuJywKKwltYXhMZW5ndGg6ICdQYWx1biDDpHJnZSBzaXNlc3RhZ2Ugcm9oa2VtIGt1aSB7bWF4TGVuZ3RofSB0w6RodGUgKHRlIHNpc2VzdGFzaXRlIHtsZW5ndGh9IHTDpGh0ZSkuJywKKwlpbnRlZ2VyOiAnUGFsdW4gc2lzZXN0YWdlIHbDpGxqYWxlIHTDpGlzYXJ2LiBLw7xtbmVuZGFydnVkIChuw6RpdGVrcyAxLjI1KSBlaSBvbGUgbHViYXR1ZC4nLAorCW51bWVyaWM6ICdQYWx1biBzaXNlc3RhZ2UgYWludWx0IG51bWJyZWlkIHbDpGxqYWxlIChuw6RpdGVrcyAiMSIsICIxLjEiLCAiLTEiIHbDtWkgIi0xLjEiKS4nLAorCWRpZ2l0czogJ1BhbHVuIGthc3V0YWdlIGFpbnVsdCBudW1icmVpZCBqYSBraXJqYXZhaGVtw6Rya2UgKHRlbGVmb25pbnVtYnJpIHNpc2VzdGFtaXNlbCBvbiBsdWJhdHVkIGthc3V0YWRhIGtyaWlwc2UgamEgcHVua3RlKS4nLAorCWFscGhhOiAnUGFsdW4ga2FzdXRhZ2UgYWludWx0IHTDpGh0aSAoYS16KS4gVMO8aGlrdWQgamEgdGVpc2VkIHPDvG1ib2xpZCBvbiBrZWVsYXR1ZC4nLAorCWFscGhhbnVtOiAnUGFsdW4ga2FzdXRhZ2UgYWludWx0IHTDpGh0aSAoYS16KSB2w7VpIG51bWJyZWlkICgwLTkpLiBUw7xoaWt1ZCBqYSB0ZWlzZWQgc8O8bWJvbGlkIG9uIGtlZWxhdHVkLicsCisJZGF0ZVN1Y2hBczogJ1BhbHVuIHNpc2VzdGFnZSBrZWh0aXYga3V1cMOkZXYga3VqdWwge2RhdGV9JywKKwlkYXRlSW5Gb3JtYXRNRFk6ICdQYWx1biBzaXNlc3RhZ2Uga2VodGl2IGt1dXDDpGV2IGt1anVsIE1NLkRELllZWVkgKG7DpGl0ZWtzOiAiMTIuMzEuMTk5OSIpLicsCisJZW1haWw6ICdQYWx1biBzaXNlc3RhZ2Uga2VodGl2IGUtbWFpbGkgYWFkcmVzcyAobsOkaXRla3M6ICJmcmVkQGRvbWFpbi5jb20iKS4nLAorCXVybDogJ1BhbHVuIHNpc2VzdGFnZSBrZWh0aXYgVVJMIChuw6RpdGVrczogaHR0cDovL3d3dy5leGFtcGxlLmNvbSkuJywKKwljdXJyZW5jeURvbGxhcjogJ1BhbHVuIHNpc2VzdGFnZSBrZWh0aXYgJCBzdW1tYSAobsOkaXRla3M6ICQxMDAuMDApLicsCisJb25lUmVxdWlyZWQ6ICdQYWx1biBzaXNlc3RhZ2UgbWlkYWdpIHbDpGhlbWFsdCDDvGhlbGUgYW50dWQgdsOkbGphZGVzdC4nLAorCWVycm9yUHJlZml4OiAnVmlnYTogJywKKwl3YXJuaW5nUHJlZml4OiAnSG9pYXR1czogJywKKworCS8vIEZvcm0uVmFsaWRhdG9yLkV4dHJhcworCW5vU3BhY2U6ICdWw6RsaSBlaSB0b2hpIHNpc2FsZGFkYSB0w7xoaWt1aWQuJywKKwlyZXFDaGtCeU5vZGU6ICfDnGtza2kgdsOkbGphZGVzdCBwb2xlIHZhbGl0dWQuJywKKwlyZXF1aXJlZENoazogJ1bDpGxqYSB0w6RpdG1pbmUgb24gdmFqYWxpay4nLAorCXJlcUNoa0J5TmFtZTogJ1BhbHVuIHZhbGlnZSDDvGtzIHtsYWJlbH0uJywKKwltYXRjaDogJ1bDpGxpIHBlYWIgc29iaW1hIHttYXRjaE5hbWV9IHbDpGxqYWdhJywKKwlzdGFydERhdGU6ICdhbGdrdXVww6RldicsCisJZW5kRGF0ZTogJ2zDtXBwa3V1cMOkZXYnLAorCWN1cnJlbnREYXRlOiAncHJhZWd1bmUga3V1cMOkZXYnLAorCWFmdGVyRGF0ZTogJ0t1dXDDpGV2IHBlYWIgb2xlbWEgdsO1cmRuZSB2w7VpIHDDpHJhc3Qge2xhYmVsfS4nLAorCWJlZm9yZURhdGU6ICdLdXVww6RldiBwZWFiIG9sZW1hIHbDtXJkbmUgdsO1aSBlbm5lIHtsYWJlbH0uJywKKwlzdGFydE1vbnRoOiAnUGFsdW4gdmFsaWdlIGFsZ2t1dXDDpGV2LicsCisJc2FtZU1vbnRoOiAnQW50dWQga2FrcyBrdXVww6RldmEgcGVhdmFkIG9sZW1hIHNhbWFzIGt1dXMgLSBwZWF0ZSBtdXV0bWEgw7xodGUga3V1cMOkZXZhLicKKworfSk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmZhLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIFBlcnNpYW4uCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQW1pciBIb3NzZWluIEhvZGphdHkgUG91cgorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZmEuRGF0ZV0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdmYScsICdEYXRlJywgeworCisJbW9udGhzOiBbJ9qY2KfZhtmI24zZhycsICfZgdmI2LHbjNmHJywgJ9mF2KfYsdizJywgJ9ii2b7YsduM2YQnLCAn2YXZhycsICfamNmI2KbZhicsICfamNmI2KbbjNmHJywgJ9ii2q/ZiNiz2KonLCAn2LPZvtiq2KfZhdio2LEnLCAn2Kfaqdiq2KjYsScsICfZhtmI2KfZhdio2LEnLCAn2K/Ys9in2YXYqNixJ10sCisJbW9udGhzX2FiYnI6IFsnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnMTAnLCAnMTEnLCAnMTInXSwKKwlkYXlzOiBbJ9uM2qnYtNmG2KjZhycsICfYr9mI2LTZhtio2YcnLCAn2LPZhyDYtNmG2KjZhycsICfahtmH2KfYsdi02YbYqNmHJywgJ9m+2YbYrNi02YbYqNmHJywgJ9is2YXYudmHJywgJ9i02YbYqNmHJ10sCisJZGF5c19hYmJyOiBbJ9mKJywgJ9ivJywgJ9izJywgJ9qGJywgJ9m+JywgJ9isJywgJ9i0J10sCisKKwkvLyBDdWx0dXJlJ3MgZGF0ZSBvcmRlcjogTU0vREQvWVlZWQorCWRhdGVPcmRlcjogWydtb250aCcsICdkYXRlJywgJ3llYXInXSwKKwlzaG9ydERhdGU6ICclbS8lZC8lWScsCisJc2hvcnRUaW1lOiAnJUk6JU0lcCcsCisJQU06ICfZgi7YuCcsCisJUE06ICfYqC7YuCcsCisKKwkvLyBEYXRlLkV4dHJhcworCW9yZGluYWw6ICfYp9mFJywKKworCWxlc3NUaGFuTWludXRlQWdvOiAn2qnZhdiq2LEg2KfYsiDbjNqpINiv2YLbjNmC2Ycg2b7bjNi0JywKKwltaW51dGVBZ286ICfYrdiv2YjYryDbjNqpINiv2YLbjNmC2Ycg2b7bjNi0JywKKwltaW51dGVzQWdvOiAne2RlbHRhfSDYr9mC24zZgtmHINm+24zYtCcsCisJaG91ckFnbzogJ9it2K/ZiNivINuM2qkg2LPYp9i52Kog2b7bjNi0JywKKwlob3Vyc0FnbzogJ9it2K/ZiNivIHtkZWx0YX0g2LPYp9i52Kog2b7bjNi0JywKKwlkYXlBZ286ICcxINix2YjYsiDZvtuM2LQnLAorCWRheXNBZ286ICd7ZGVsdGF9INix2YjYsiDZvtuM2LQnLAorCXdlZWtBZ286ICcxINmH2YHYqtmHINm+24zYtCcsCisJd2Vla3NBZ286ICd7ZGVsdGF9INmH2YHYqtmHINm+24zYtCcsCisJbW9udGhBZ286ICcxINmF2KfZhyDZvtuM2LQnLAorCW1vbnRoc0FnbzogJ3tkZWx0YX0g2YXYp9mHINm+24zYtCcsCisJeWVhckFnbzogJzEg2LPYp9mEINm+24zYtCcsCisJeWVhcnNBZ286ICd7ZGVsdGF9INiz2KfZhCDZvtuM2LQnLAorCisJbGVzc1RoYW5NaW51dGVVbnRpbDogJ9qp2YXYqtixINin2LIg24zaqSDYr9mC24zZgtmHINin2LIg2K3Yp9mE2KcnLAorCW1pbnV0ZVVudGlsOiAn2K3Yr9mI2K8g24zaqSDYr9mC24zZgtmHINin2LIg2K3Yp9mE2KcnLAorCW1pbnV0ZXNVbnRpbDogJ3tkZWx0YX0g2K/ZgtuM2YLZhyDYp9iyINit2KfZhNinJywKKwlob3VyVW50aWw6ICfYrdiv2YjYryDbjNqpINiz2KfYudiqINin2LIg2K3Yp9mE2KcnLAorCWhvdXJzVW50aWw6ICfYrdiv2YjYryB7ZGVsdGF9INiz2KfYudiqINin2LIg2K3Yp9mE2KcnLAorCWRheVVudGlsOiAnMSDYsdmI2LIg2KfYsiDYrdin2YTYpycsCisJZGF5c1VudGlsOiAne2RlbHRhfSDYsdmI2LIg2KfYsiDYrdin2YTYpycsCisJd2Vla1VudGlsOiAnMSDZh9mB2KrZhyDYp9iyINit2KfZhNinJywKKwl3ZWVrc1VudGlsOiAne2RlbHRhfSDZh9mB2KrZhyDYp9iyINit2KfZhNinJywKKwltb250aFVudGlsOiAnMSDZhdin2Ycg2KfYsiDYrdin2YTYpycsCisJbW9udGhzVW50aWw6ICd7ZGVsdGF9INmF2KfZhyDYp9iyINit2KfZhNinJywKKwl5ZWFyVW50aWw6ICcxINiz2KfZhCDYp9iyINit2KfZhNinJywKKwl5ZWFyc1VudGlsOiAne2RlbHRhfSDYs9in2YQg2KfYsiDYrdin2YTYpycKKworfSk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmZhLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgUGVyc2lhbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBbWlyIEhvc3NlaW4gSG9kamF0eSBQb3VyCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5mYS5Gb3JtLlZhbGlkYXRvcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdmYScsICdGb3JtVmFsaWRhdG9yJywgeworCisJcmVxdWlyZWQ6ICfYp9uM2YYg2YHbjNmE2K8g2KfZhNiy2KfZhduMINin2LPYqi4nLAorCW1pbkxlbmd0aDogJ9i02YXYpyDYqNin24zYryDYrdiv2KfZgtmEIHttaW5MZW5ndGh9INit2LHZgSDZiNin2LHYryDaqdmG24zYryAoe2xlbmd0aH0g2K3YsdmBINmI2KfYsdivINqp2LHYr9mHINin24zYrykuJywKKwltYXhMZW5ndGg6ICfZhNi32YHYpyDYrdiv2Kfaqdir2LEge21heExlbmd0aH0g2K3YsdmBINmI2KfYsdivINqp2YbbjNivICjYtNmF2Kcge2xlbmd0aH0g2K3YsdmBINmI2KfYsdivINqp2LHYr9mHINin24zYrykuJywKKwlpbnRlZ2VyOiAn2YTYt9mB2Kcg2KfYsiDYudiv2K8g2LXYrduM2K0g2KfYs9iq2YHYp9iv2Ycg2qnZhtuM2K8uINin2LnYr9in2K8g2KfYudi02KfYsduMICjZhdin2YbZhtivIDEuMjUpINmF2KzYp9iyINmG24zYs9iq2YbYry4nLAorCW51bWVyaWM6ICfZhNi32YHYpyDZgdmC2Lcg2K/Yp9iv2Ycg2LnYr9iv24wg2YjYp9ix2K8g2qnZhtuM2K8gKNmF2KfZhtmG2K8gIjEiINuM2KcgIjEuMSIg24zYpyAiMS0iINuM2KcgIjEuMS0iKS4nLAorCWRpZ2l0czogJ9mE2LfZgdinINmB2YLYtyDYp9iyINin2LnYr9in2K8g2Ygg2LnZhNin2YXYqtmH2Kcg2K/YsSDYp9uM2YYg2YHbjNmE2K8g2KfYs9iq2YHYp9iv2Ycg2qnZhtuM2K8gKNio2LHYp9uMINmF2KvYp9mEINi02YXYp9ix2Ycg2KrZhNmB2YYg2KjYpyDYrti3INiq24zYsdmHINmIINmG2YLYt9mHINmC2KfYqNmEINmC2KjZiNmEINin2LPYqikuJywKKwlhbHBoYTogJ9mE2LfZgdinINmB2YLYtyDYp9iyINit2LHZiNmBINin2YTZgdio2KfYoSDYqNix2KfbjCDYp9uM2YYg2KjYrti0INin2LPYqtmB2KfYr9mHINqp2YbbjNivLiDaqdin2LHYp9qp2KrYsdmH2KfbjCDYr9uM2q/YsSDZiCDZgdin2LXZhNmHINmF2KzYp9iyINmG24zYs9iq2YbYry4nLAorCWFscGhhbnVtOiAn2YTYt9mB2Kcg2YHZgti3INin2LIg2K3YsdmI2YEg2KfZhNmB2KjYp9ihINmIINin2LnYr9in2K8g2K/YsSDYp9uM2YYg2KjYrti0INin2LPYqtmB2KfYr9mHINqp2YbbjNivLiDaqdin2LHYp9qp2KrYsdmH2KfbjCDYr9uM2q/YsSDZiCDZgdin2LXZhNmHINmF2KzYp9iyINmG24zYs9iq2YbYry4nLAorCWRhdGVTdWNoQXM6ICfZhNi32YHYpyDbjNqpINiq2KfYsduM2K4g2YXYudiq2KjYsSDZhdin2YbZhtivIHtkYXRlfSDZiNin2LHYryDaqdmG24zYry4nLAorCWRhdGVJbkZvcm1hdE1EWTogJ9mE2LfZgdinINuM2qkg2KrYp9ix24zYriDZhdi52KrYqNixINio2Ycg2LTaqdmEIE1NL0REL1lZWVkg2YjYp9ix2K8g2qnZhtuM2K8gKNmF2KfZhtmG2K8gIjEyLzMxLzE5OTkiKS4nLAorCWVtYWlsOiAn2YTYt9mB2Kcg24zaqSDYotiv2LHYsyDYp9uM2YXbjNmEINmF2LnYqtio2LEg2YjYp9ix2K8g2qnZhtuM2K8uINio2LHYp9uMINmF2KvYp9mEICJmcmVkQGRvbWFpbi5jb20iLicsCisJdXJsOiAn2YTYt9mB2Kcg24zaqSBVUkwg2YXYudiq2KjYsSDZhdin2YbZhtivIGh0dHA6Ly93d3cuZXhhbXBsZS5jb20g2YjYp9ix2K8g2qnZhtuM2K8uJywKKwljdXJyZW5jeURvbGxhcjogJ9mE2LfZgdinINuM2qkg2YXYrdiv2YjYr9mHINmF2LnYqtio2LEg2KjYsdin24wg2KfbjNmGINio2K7YtCDZiNin2LHYryDaqdmG24zYryDZhdin2YbZhtivIDEwMC4wMCQgLicsCisJb25lUmVxdWlyZWQ6ICfZhNi32YHYpyDYrdiv2KfZgtmEINuM2qnbjCDYp9iyINmB24zZhNiv2YfYpyDYsdinINm+2LEg2qnZhtuM2K8uJywKKwllcnJvclByZWZpeDogJ9iu2LfYpzogJywKKwl3YXJuaW5nUHJlZml4OiAn2YfYtNiv2KfYsTogJywKKworCS8vIEZvcm0uVmFsaWRhdG9yLkV4dHJhcworCW5vU3BhY2U6ICfYp9iz2KrZgdin2K/ZhyDYp9iyINmB2KfYtdmE2Ycg2K/YsSDYp9uM2YYg2KjYrti0INmF2KzYp9iyINmG24zYs9iqLicsCisJcmVxQ2hrQnlOb2RlOiAn2YXZiNix2K/bjCDYp9mG2KrYrtin2Kgg2YbYtNiv2Ycg2KfYs9iqLicsCisJcmVxdWlyZWRDaGs6ICfYp9uM2YYg2YHbjNmE2K8g2KfZhNiy2KfZhduMINin2LPYqi4nLAorCXJlcUNoa0J5TmFtZTogJ9mE2LfZgdinINuM2qkge2xhYmVsfSDYsdinINin2YbYqtiu2KfYqCDaqdmG24zYry4nLAorCW1hdGNoOiAn2KfbjNmGINmB24zZhNivINio2KfbjNivINio2Kcg2YHbjNmE2K8ge21hdGNoTmFtZX0g2YXYt9in2KjZgtiqINiv2KfYtNiq2Ycg2KjYp9i02K8uJywKKwlzdGFydERhdGU6ICfYqtin2LHbjNiuINi02LHZiNi5JywKKwllbmREYXRlOiAn2KrYp9ix24zYriDZvtin24zYp9mGJywKKwljdXJyZW50RGF0ZTogJ9iq2KfYsduM2K4g2qnZhtmI2YbbjCcsCisJYWZ0ZXJEYXRlOiAn2KrYp9ix24zYriDZhduM2KjYp9uM2LPYqiDYqNix2KfYqNixINuM2Kcg2KjYudivINin2LIge2xhYmVsfSDYqNin2LTYrycsCisJYmVmb3JlRGF0ZTogJ9iq2KfYsduM2K4g2YXbjNio2KfbjNiz2Kog2KjYsdin2KjYsSDbjNinINmC2KjZhCDYp9iyIHtsYWJlbH0g2KjYp9i02K8nLAorCXN0YXJ0TW9udGg6ICfZhNi32YHYpyDZhdin2Ycg2LTYsdmI2Lkg2LHYpyDYp9mG2KrYrtin2Kgg2qnZhtuM2K8nLAorCXNhbWVNb250aDogJ9in24zZhiDYr9mIINiq2KfYsduM2K4g2KjYp9uM2K8g2K/YsSDbjNqpINmF2KfZhyDYqNin2LTZhtivIC0g2LTZhdinINio2KfbjNivINuM2qnbjCDbjNinINmH2LEg2K/ZiCDYsdinINiq2LrbjNuM2LEg2K/Zh9uM2K8uJywKKwljcmVkaXRjYXJkOiAn2LTZhdin2LHZhyDaqdin2LHYqiDYp9i52KrYqNin2LHbjCDaqdmHINmI2KfYsdivINqp2LHYr9mHINin24zYryDZhdi52KrYqNixINmG24zYs9iqLiDZhNi32YHYpyDYtNmF2KfYsdmHINix2Kcg2KjYsdix2LPbjCDaqdmG24zYryDZiCDZhdis2K/Yr9inINiq2YTYp9i0INqp2YbbjNivLiB7bGVuZ3RofSDYsdmC2YUg2YjYp9ix2K8g2LTYr9mHINin2LPYqi4nCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5maS1GSS5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBGaW5uaXNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIGtzZWwKKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmZpLUZJLkRhdGVdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZmktRkknLCAnRGF0ZScsIHsKKworCS8vIE5PVEU6IG1vbnRocyBhbmQgZGF5cyBhcmUgbm90IGNhcGl0YWxpemVkIGluIGZpbm5pc2gKKwltb250aHM6IFsndGFtbWlrdXUnLCAnaGVsbWlrdXUnLCAnbWFhbGlza3V1JywgJ2h1aHRpa3V1JywgJ3RvdWtva3V1JywgJ2tlc8Oka3V1JywgJ2hlaW7DpGt1dScsICdlbG9rdXUnLCAnc3l5c2t1dScsICdsb2tha3V1JywgJ21hcnJhc2t1dScsICdqb3VsdWt1dSddLAorCisJLy8gdGhlc2UgYWJicmV2aWF0aW9ucyBhcmUgcmVhbGx5IG5vdCBtdWNoIHVzZWQgaW4gZmlubmlzaCBiZWNhdXNlIHRoZXkgb2J2aW91c2x5IHdvbid0IGFiYnJldmlhdGUgdmVyeSBtdWNoLiA7KQorCS8vIE5PVEU6IHNvbWV0aW1lcyBvbmUgY2FuIHNlZSBmb3JtcyBzdWNoIGFzICJ0YW1taSIsICJoZWxtaSIsIGV0Yy4gYnV0IHRoYXQgaXMgbm90IHByb3BlciBmaW5uaXNoLgorCW1vbnRoc19hYmJyOiBbJ3RhbW1pay4nLCAnaGVsbWlrLicsICdtYWFsaXNrLicsICdodWh0aWsuJywgJ3RvdWtvay4nLCAna2Vzw6RrLicsICdoZWluw6RrLicsICdlbG9rLicsICdzeXlzay4nLCAnbG9rYWsuJywgJ21hcnJhc2suJywgJ2pvdWx1ay4nXSwKKworCWRheXM6IFsnc3VubnVudGFpJywgJ21hYW5hbnRhaScsICd0aWlzdGFpJywgJ2tlc2tpdmlpa2tvJywgJ3RvcnN0YWknLCAncGVyamFudGFpJywgJ2xhdWFudGFpJ10sCisJZGF5c19hYmJyOiBbJ3N1JywgJ21hJywgJ3RpJywgJ2tlJywgJ3RvJywgJ3BlJywgJ2xhJ10sCisKKwkvLyBDdWx0dXJlJ3MgZGF0ZSBvcmRlcjogREQvTU0vWVlZWQorCWRhdGVPcmRlcjogWydkYXRlJywgJ21vbnRoJywgJ3llYXInXSwKKwlzaG9ydERhdGU6ICclZC4lbS4lWScsCisJc2hvcnRUaW1lOiAnJUg6JU0nLAorCUFNOiAnQU0nLAorCVBNOiAnUE0nLAorCWZpcnN0RGF5T2ZXZWVrOiAxLAorCisJLy8gRGF0ZS5FeHRyYXMKKwlvcmRpbmFsOiAnLicsCisKKwlsZXNzVGhhbk1pbnV0ZUFnbzogJ3ZhamFhIG1pbnV1dHRpIHNpdHRlbicsCisJbWludXRlQWdvOiAnbm9pbiBtaW51dXR0aSBzaXR0ZW4nLAorCW1pbnV0ZXNBZ286ICd7ZGVsdGF9IG1pbnV1dHRpYSBzaXR0ZW4nLAorCWhvdXJBZ286ICdub2luIHR1bnRpIHNpdHRlbicsCisJaG91cnNBZ286ICdub2luIHtkZWx0YX0gdHVudGlhIHNpdHRlbicsCisJZGF5QWdvOiAncMOkaXbDpCBzaXR0ZW4nLAorCWRheXNBZ286ICd7ZGVsdGF9IHDDpGl2w6TDpCBzaXR0ZW4nLAorCXdlZWtBZ286ICd2aWlra28gc2l0dGVuJywKKwl3ZWVrc0FnbzogJ3tkZWx0YX0gdmlpa2tvYSBzaXR0ZW4nLAorCW1vbnRoQWdvOiAna3V1a2F1c2kgc2l0dGVuJywKKwltb250aHNBZ286ICd7ZGVsdGF9IGt1dWthdXR0YSBzaXR0ZW4nLAorCXllYXJBZ286ICd2dW9zaSBzaXR0ZW4nLAorCXllYXJzQWdvOiAne2RlbHRhfSB2dW90dGEgc2l0dGVuJywKKworCWxlc3NUaGFuTWludXRlVW50aWw6ICd2YWphYW4gbWludXV0aW4ga3VsdXR0dWEnLAorCW1pbnV0ZVVudGlsOiAnbm9pbiBtaW51dXRpbiBrdWx1dHR1YScsCisJbWludXRlc1VudGlsOiAne2RlbHRhfSBtaW51dXRpbiBrdWx1dHR1YScsCisJaG91clVudGlsOiAnbm9pbiB0dW5uaW4ga3VsdXR0dWEnLAorCWhvdXJzVW50aWw6ICdub2luIHtkZWx0YX0gdHVubmluIGt1bHV0dHVhJywKKwlkYXlVbnRpbDogJ3DDpGl2w6RuIGt1bHV0dHVhJywKKwlkYXlzVW50aWw6ICd7ZGVsdGF9IHDDpGl2w6RuIGt1bHV0dHVhJywKKwl3ZWVrVW50aWw6ICd2aWlrb24ga3VsdXR0dWEnLAorCXdlZWtzVW50aWw6ICd7ZGVsdGF9IHZpaWtvbiBrdWx1dHR1YScsCisJbW9udGhVbnRpbDogJ2t1dWthdWRlbiBrdWx1dHR1YScsCisJbW9udGhzVW50aWw6ICd7ZGVsdGF9IGt1dWthdWRlbiBrdWx1dHR1YScsCisJeWVhclVudGlsOiAndnVvZGVuIGt1bHV0dHVhJywKKwl5ZWFyc1VudGlsOiAne2RlbHRhfSB2dW9kZW4ga3VsdXR0dWEnCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5maS1GSS5Gb3JtLlZhbGlkYXRvcgorCitkZXNjcmlwdGlvbjogRm9ybSBWYWxpZGF0b3IgbWVzc2FnZXMgZm9yIEZpbm5pc2guCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0ga3NlbAorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuZmktRkkuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZmktRkknLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAnVMOkbcOkIGtlbnR0w6Qgb24gcGFrb2xsaW5lbi4nLAorCW1pbkxlbmd0aDogJ09sZSBoeXbDpCBqYSBhbm5hIHbDpGhpbnTDpMOkbiB7bWluTGVuZ3RofSBtZXJra2nDpCAoYW5ub2l0IHtsZW5ndGh9IG1lcmtracOkKS4nLAorCW1heExlbmd0aDogJ8OEbMOkIGFubmEgZW5lbXDDpMOkIGt1aW4ge21heExlbmd0aH0gbWVya2tpw6QgKGFubm9pdCB7bGVuZ3RofSBtZXJra2nDpCkuJywKKwlpbnRlZ2VyOiAnT2xlIGh5dsOkIGphIGFubmEga29rb25haXNsdWt1LiBMdXZ1dCwgam9pc3NhIG9uIGRlc2ltYWFsZWphIChlc2ltLiAxLjI1KSBlaXbDpHQgb2xlIHNhbGxpdHR1amEuJywKKwludW1lcmljOiAnQW5uYSB0w6Row6RuIGtlbnR0w6TDpG4gbHVrdWFydm8gKGt1dGVuICIxIiB0YWkgIjEuMSIgdGFpICItMSIgdGFpICItMS4xIikuJywKKwlkaWdpdHM6ICdLw6R5dMOkIHBlbGvDpHN0w6TDpG4gbnVtZXJvaXRhIGphIHbDpGxpbWVya2tlasOkIHTDpHNzw6Qga2VudMOkc3PDpCAoc3nDtnR0ZWV0LCBrdXRlbiBlc2ltLiBwdWhlbGlubnVtZXJvLCBqb3NzYSBvbiB2w6RsaXZpaXZvamEsIHBpbGtrdWphIHRhaSBwaXN0ZWl0w6QsIGtlbHBhYSkuJywKKwlhbHBoYTogJ0FubmEgdMOkaMOkbiBrZW50dMOkw6RuIHZhaW4ga2lyamFpbWlhIChhLXopLiBWw6RsaWx5w7Zubml0IHRhaSBtdXV0IG1lcmtpdCBlaXbDpHQgb2xlIHNhbGxpdHR1amEuJywKKwlhbHBoYW51bTogJ0FubmEgdMOkaMOkbiBrZW50dMOkw6RuIHZhaW4ga2lyamFpbWlhIChhLXopIHRhaSBudW1lcm9pdGEgKDAtOSkuIFbDpGxpbHnDtm5uaXQgdGFpIG11dXQgbWVya2l0IGVpdsOkdCBvbGUgc2FsbGl0dHVqYS4nLAorCWRhdGVTdWNoQXM6ICdPbGUgaHl2w6QgamEgYW5uYSBrZWx2b2xsaW5lbiBww6Rpdm3DpMOkcsOkLCBrdXRlbiBlc2ltZXJraWtzaSB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ09sZSBoeXbDpCBqYSBhbm5hIGtlbHZvbGxpbmVuIHDDpGl2w6Rtw6TDpHLDpCBtdW9kb3NzYSBwcC9ray92dnZ2IChrdXRlbiAiMTIvMzEvMTk5OSIpJywKKwllbWFpbDogJ09sZSBoeXbDpCBqYSBhbm5hIGtlbHZvbGxpbmVuIHPDpGhrw7Zwb3N0aW9zb2l0ZSAoa3V0ZW4gZXNpbWVya2lrc2kgIm1hdHRpQG1laWthbGFpbmVuLmNvbSIpLicsCisJdXJsOiAnT2xlIGh5dsOkIGphIGFubmEga2Vsdm9sbGluZW4gVVJMLCBrdXRlbiBlc2ltZXJraWtzaSBodHRwOi8vd3d3LmV4YW1wbGUuY29tLicsCisJY3VycmVuY3lEb2xsYXI6ICdPbGUgaHl2w6QgamEgYW5uYSBrZWx2b2xsaW5lbiBldXJvc3VtbWEgKGt1dGVuIGVzaW1lcmtpa3NpIDEwMCwwMCBFVVIpIC4nLAorCW9uZVJlcXVpcmVkOiAnT2xlIGh5dsOkIGphIHN5w7Z0w6Qgam90YWtpbiBhaW5ha2luIGpvaG9ua2luIG7DpGlzdMOkIGtlbnRpc3TDpC4nLAorCWVycm9yUHJlZml4OiAnVmlyaGU6ICcsCisJd2FybmluZ1ByZWZpeDogJ1Zhcm9pdHVzOiAnLAorCisJLy8gRm9ybS5WYWxpZGF0b3IuRXh0cmFzCisJbm9TcGFjZTogJ1TDpHNzw6Qgc3nDtnR0ZWVzc8OkIGVpIHZvaSBvbGxhIHbDpGxpbHnDtm50ZWrDpCcsCisJcmVxQ2hrQnlOb2RlOiAnRWkgdmFsaW50b2phLicsCisJcmVxdWlyZWRDaGs6ICdUw6Rtw6Qga2VudHTDpCBvbiBwYWtvbGxpbmVuLicsCisJcmVxQ2hrQnlOYW1lOiAnT2xlIGh5dsOkIGphIHZhbGl0c2Uge2xhYmVsfS4nLAorCW1hdGNoOiAnVMOkbcOkbiBrZW50w6RuIHR1bGVlIHZhc3RhdGEga2VudHTDpMOkIHttYXRjaE5hbWV9JywKKwlzdGFydERhdGU6ICdhbGt1cMOkaXbDpG3DpMOkcsOkJywKKwllbmREYXRlOiAnbG9wcHVww6RpdsOkbcOkw6Ryw6QnLAorCWN1cnJlbnREYXRlOiAnbnlreWluZW4gcMOkaXbDpG3DpMOkcsOkJywKKwlhZnRlckRhdGU6ICdQw6RpdsOkbcOkw6Ryw6RuIHR1bGlzaSBvbGxhIHNhbWEgdGFpIG15w7Zow6Rpc2VtcGkgYWphbmtvaHRhIGt1aW4ge2xhYmVsfS4nLAorCWJlZm9yZURhdGU6ICdQw6RpdsOkbcOkw6Ryw6RuIHR1bGlzaSBvbGxhIHNhbWEgdGFpIGFpa2Fpc2VtcGkgYWphbmtvaHRhIGt1aW4ge2xhYmVsfS4nLAorCXN0YXJ0TW9udGg6ICdPbGUgaHl2w6QgamEgdmFsaXRzZSBhbG9pdHVza3V1a2F1c2knLAorCXNhbWVNb250aDogJ07DpGlkZW4ga2FoZGVuIHDDpGl2w6Rtw6TDpHLDpG4gdHVsZWUgb2xsYSBzYW1hbiBrdXVuIHNpc8OkbGzDpCAtLSBzaW51biBwaXTDpMOkIG11dXR0YWEgam9tcGFhIGt1bXBhYS4nLAorCWNyZWRpdGNhcmQ6ICdBbm5ldHR1IGx1b3R0b2tvcnRpbiBudW1lcm8gZWkga2VscGFhLiBPbGUgaHl2w6QgamEgdGFya2lzdGEgbnVtZXJvIHNla8OkIHlyaXTDpCB1dWRlbGxlZW4uIHtsZW5ndGh9IG51bWVyb2Egc3nDtnRldHR5LicKKworfSk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmZpLUZJLk51bWJlcgorCitkZXNjcmlwdGlvbjogRmlubmlzaCBudW1iZXIgbWVzc2FnZXMKKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBrc2VsCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorICAtIExvY2FsZS5FVS5OdW1iZXIKKworcHJvdmlkZXM6IFtMb2NhbGUuZmktRkkuTnVtYmVyXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2ZpLUZJJywgJ051bWJlcicsIHsKKworCWdyb3VwOiAnICcgLy8gZ3JvdXBlZCBieSBzcGFjZQorCit9KS5pbmhlcml0KCdFVScsICdOdW1iZXInKTsKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuZnItRlIuRGF0ZQorCitkZXNjcmlwdGlvbjogRGF0ZSBtZXNzYWdlcyBmb3IgRnJlbmNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIE5pY29sYXMgU29yb3NhYworICAtIEFudG9pbmUgQWJ0CisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5mci1GUi5EYXRlXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2ZyLUZSJywgJ0RhdGUnLCB7CisKKwltb250aHM6IFsnSmFudmllcicsICdGw6l2cmllcicsICdNYXJzJywgJ0F2cmlsJywgJ01haScsICdKdWluJywgJ0p1aWxsZXQnLCAnQW/Du3QnLCAnU2VwdGVtYnJlJywgJ09jdG9icmUnLCAnTm92ZW1icmUnLCAnRMOpY2VtYnJlJ10sCisJbW9udGhzX2FiYnI6IFsnamFudi4nLCAnZsOpdnIuJywgJ21hcnMnLCAnYXZyLicsICdtYWknLCAnanVpbicsICdqdWlsLicsICdhb8O7dCcsICdzZXB0LicsICdvY3QuJywgJ25vdi4nLCAnZMOpYy4nXSwKKwlkYXlzOiBbJ0RpbWFuY2hlJywgJ0x1bmRpJywgJ01hcmRpJywgJ01lcmNyZWRpJywgJ0pldWRpJywgJ1ZlbmRyZWRpJywgJ1NhbWVkaSddLAorCWRheXNfYWJicjogWydkaW0uJywgJ2x1bi4nLCAnbWFyLicsICdtZXIuJywgJ2pldS4nLCAndmVuLicsICdzYW0uJ10sCisKKwkvLyBDdWx0dXJlJ3MgZGF0ZSBvcmRlcjogREQvTU0vWVlZWQorCWRhdGVPcmRlcjogWydkYXRlJywgJ21vbnRoJywgJ3llYXInXSwKKwlzaG9ydERhdGU6ICclZC8lbS8lWScsCisJc2hvcnRUaW1lOiAnJUg6JU0nLAorCUFNOiAnQU0nLAorCVBNOiAnUE0nLAorCWZpcnN0RGF5T2ZXZWVrOiAxLAorCisJLy8gRGF0ZS5FeHRyYXMKKwlvcmRpbmFsOiBmdW5jdGlvbihkYXlPZk1vbnRoKXsKKwkJcmV0dXJuIChkYXlPZk1vbnRoID4gMSkgPyAnJyA6ICdlcic7CisJfSwKKworCWxlc3NUaGFuTWludXRlQWdvOiAiaWwgeSBhIG1vaW5zIGQndW5lIG1pbnV0ZSIsCisJbWludXRlQWdvOiAnaWwgeSBhIHVuZSBtaW51dGUnLAorCW1pbnV0ZXNBZ286ICdpbCB5IGEge2RlbHRhfSBtaW51dGVzJywKKwlob3VyQWdvOiAnaWwgeSBhIHVuZSBoZXVyZScsCisJaG91cnNBZ286ICdpbCB5IGEge2RlbHRhfSBoZXVyZXMnLAorCWRheUFnbzogJ2lsIHkgYSB1biBqb3VyJywKKwlkYXlzQWdvOiAnaWwgeSBhIHtkZWx0YX0gam91cnMnLAorCXdlZWtBZ286ICdpbCB5IGEgdW5lIHNlbWFpbmUnLAorCXdlZWtzQWdvOiAnaWwgeSBhIHtkZWx0YX0gc2VtYWluZXMnLAorCW1vbnRoQWdvOiAnaWwgeSBhIDEgbW9pcycsCisJbW9udGhzQWdvOiAnaWwgeSBhIHtkZWx0YX0gbW9pcycsCisJeWVhcnRoQWdvOiAnaWwgeSBhIDEgYW4nLAorCXllYXJzQWdvOiAnaWwgeSBhIHtkZWx0YX0gYW5zJywKKworCWxlc3NUaGFuTWludXRlVW50aWw6ICJkYW5zIG1vaW5zIGQndW5lIG1pbnV0ZSIsCisJbWludXRlVW50aWw6ICdkYW5zIHVuZSBtaW51dGUnLAorCW1pbnV0ZXNVbnRpbDogJ2RhbnMge2RlbHRhfSBtaW51dGVzJywKKwlob3VyVW50aWw6ICdkYW5zIHVuZSBoZXVyZScsCisJaG91cnNVbnRpbDogJ2RhbnMge2RlbHRhfSBoZXVyZXMnLAorCWRheVVudGlsOiAnZGFucyB1biBqb3VyJywKKwlkYXlzVW50aWw6ICdkYW5zIHtkZWx0YX0gam91cnMnLAorCXdlZWtVbnRpbDogJ2RhbnMgMSBzZW1haW5lJywKKwl3ZWVrc1VudGlsOiAnZGFucyB7ZGVsdGF9IHNlbWFpbmVzJywKKwltb250aFVudGlsOiAnZGFucyAxIG1vaXMnLAorCW1vbnRoc1VudGlsOiAnZGFucyB7ZGVsdGF9IG1vaXMnLAorCXllYXJVbnRpbDogJ2RhbnMgMSBhbicsCisJeWVhcnNVbnRpbDogJ2RhbnMge2RlbHRhfSBhbnMnCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5mci1GUi5Gb3JtLlZhbGlkYXRvcgorCitkZXNjcmlwdGlvbjogRm9ybSBWYWxpZGF0b3IgbWVzc2FnZXMgZm9yIEZyZW5jaC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBNaXF1ZWwgSHVkaW4KKyAgLSBOaWNvbGFzIFNvcm9zYWMKKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmZyLUZSLkZvcm0uVmFsaWRhdG9yXQorCisuLi4KKyovCisKKy8qZXNsaW50IG1vb3Rvb2xzLXdoaXRlc3BhY2U6MCovCisKK0xvY2FsZS5kZWZpbmUoJ2ZyLUZSJywgJ0Zvcm1WYWxpZGF0b3InLCB7CisKKwlyZXF1aXJlZDogJ0NlIGNoYW1wIGVzdCBvYmxpZ2F0b2lyZS4nLAorCWxlbmd0aDogJ1ZldWlsbGV6IHNhaXNpciB7bGVuZ3RofSBjYXJhY3QmZWdyYXZlO3JlKHMpICh2b3VzIGF2ZXogc2Fpc2kge2VsTGVuZ3RofSBjYXJhY3QmZWdyYXZlO3JlKHMpJywKKwltaW5MZW5ndGg6ICdWZXVpbGxleiBzYWlzaXIgdW4gbWluaW11bSBkZSB7bWluTGVuZ3RofSBjYXJhY3QmZWdyYXZlO3JlKHMpICh2b3VzIGF2ZXogc2Fpc2kge2xlbmd0aH0gY2FyYWN0JmVncmF2ZTtyZShzKSkuJywKKwltYXhMZW5ndGg6ICdWZXVpbGxleiBzYWlzaXIgdW4gbWF4aW11bSBkZSB7bWF4TGVuZ3RofSBjYXJhY3QmZWdyYXZlO3JlKHMpICh2b3VzIGF2ZXogc2Fpc2kge2xlbmd0aH0gY2FyYWN0JmVncmF2ZTtyZShzKSkuJywKKwlpbnRlZ2VyOiAnVmV1aWxsZXogc2Fpc2lyIHVuIG5vbWJyZSBlbnRpZXIgZGFucyBjZSBjaGFtcC4gTGVzIG5vbWJyZXMgZCZlYWN1dGU7Y2ltYXV4IChleCA6ICIxLDI1IikgbmUgc29udCBwYXMgYXV0b3JpcyZlYWN1dGU7cy4nLAorCW51bWVyaWM6ICdWZXVpbGxleiBzYWlzaXIgdW5pcXVlbWVudCBkZXMgY2hpZmZyZXMgZGFucyBjZSBjaGFtcCAoZXggOiAiMSIgb3UgIjEsMSIgb3UgIi0xIiBvdSAiLTEsMSIpLicsCisJZGlnaXRzOiAiVmV1aWxsZXogc2Fpc2lyIHVuaXF1ZW1lbnQgZGVzIGNoaWZmcmVzIGV0IGRlcyBzaWduZXMgZGUgcG9uY3R1YXRpb24gZGFucyBjZSBjaGFtcCAoZXggOiB1biBudW0mZWFjdXRlO3JvIGRlIHQmZWFjdXRlO2wmZWFjdXRlO3Bob25lIGF2ZWMgZGVzIHRyYWl0cyBkJ3VuaW9uIGVzdCBhdXRvcmlzJmVhY3V0ZTspLiIsCisJYWxwaGE6ICdWZXVpbGxleiBzYWlzaXIgdW5pcXVlbWVudCBkZXMgbGV0dHJlcyAoYS16KSBkYW5zIGNlIGNoYW1wLiBMZXMgZXNwYWNlcyBvdSBhdXRyZXMgY2FyYWN0JmVncmF2ZTtyZXMgbmUgc29udCBwYXMgYXV0b3JpcyZlYWN1dGU7cy4nLAorCWFscGhhbnVtOiAnVmV1aWxsZXogc2Fpc2lyIHVuaXF1ZW1lbnQgZGVzIGxldHRyZXMgKGEteikgb3UgZGVzIGNoaWZmcmVzICgwLTkpIGRhbnMgY2UgY2hhbXAuIExlcyBlc3BhY2VzIG91IGF1dHJlcyBjYXJhY3QmZWdyYXZlO3JlcyBuZSBzb250IHBhcyBhdXRvcmlzJmVhY3V0ZTtzLicsCisJZGF0ZVN1Y2hBczogJ1ZldWlsbGV6IHNhaXNpciB1bmUgZGF0ZSBjb3JyZWN0ZSBjb21tZSB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ1ZldWlsbGV6IHNhaXNpciB1bmUgZGF0ZSBjb3JyZWN0ZSwgYXUgZm9ybWF0IEpKL01NL0FBQUEgKGV4IDogIjMxLzExLzE5OTkiKS4nLAorCWVtYWlsOiAnVmV1aWxsZXogc2Fpc2lyIHVuZSBhZHJlc3NlIGRlIGNvdXJyaWVyICZlYWN1dGU7bGVjdHJvbmlxdWUuIFBhciBleGVtcGxlICJmcmVkQGRvbWFpbmUuY29tIi4nLAorCXVybDogJ1ZldWlsbGV6IHNhaXNpciB1bmUgVVJMLCBjb21tZSBodHRwOi8vd3d3LmV4ZW1wbGUuY29tLicsCisJY3VycmVuY3lEb2xsYXI6ICdWZXVpbGxleiBzYWlzaXIgdW5lIHF1YW50aXQmZWFjdXRlOyBjb3JyZWN0ZS4gUGFyIGV4ZW1wbGUgMTAwLDAwJmV1cm87LicsCisJb25lUmVxdWlyZWQ6ICdWZXVpbGxleiBzJmVhY3V0ZTtsZWN0aW9ubmVyIGF1IG1vaW5zIHVuZSBkZSBjZXMgb3B0aW9ucy4nLAorCWVycm9yUHJlZml4OiAnRXJyZXVyIDogJywKKwl3YXJuaW5nUHJlZml4OiAnQXR0ZW50aW9uIDogJywKKworCS8vIEZvcm0uVmFsaWRhdG9yLkV4dHJhcworCW5vU3BhY2U6ICJDZSBjaGFtcCBuJ2FjY2VwdGUgcGFzIGxlcyBlc3BhY2VzLiIsCisJcmVxQ2hrQnlOb2RlOiAiQXVjdW4gJmVhY3V0ZTtsJmVhY3V0ZTttZW50IG4nZXN0IHMmZWFjdXRlO2xlY3Rpb25uJmVhY3V0ZTsuIiwKKwlyZXF1aXJlZENoazogJ0NlIGNoYW1wIGVzdCBvYmxpZ2F0b2lyZS4nLAorCXJlcUNoa0J5TmFtZTogJ1ZldWlsbGV6IHMmZWFjdXRlO2xlY3Rpb25uZXIgdW4oZSkge2xhYmVsfS4nLAorCW1hdGNoOiAnQ2UgY2hhbXAgZG9pdCBjb3JyZXNwb25kcmUgYXZlYyBsZSBjaGFtcCB7bWF0Y2hOYW1lfS4nLAorCXN0YXJ0RGF0ZTogJ2RhdGUgZGUgZCZlYWN1dGU7YnV0JywKKwllbmREYXRlOiAnZGF0ZSBkZSBmaW4nLAorCWN1cnJlbnREYXRlOiAnZGF0ZSBhY3R1ZWxsZScsCisJYWZ0ZXJEYXRlOiAnTGEgZGF0ZSBkb2l0ICZlY2lyYzt0cmUgaWRlbnRpcXVlIG91IHBvc3QmZWFjdXRlO3JpZXVyZSAmYWdyYXZlOyB7bGFiZWx9LicsCisJYmVmb3JlRGF0ZTogJ0xhIGRhdGUgZG9pdCAmZWNpcmM7dHJlIGlkZW50aXF1ZSBvdSBhbnQmZWFjdXRlO3JpZXVyZSAmYWdyYXZlOyB7bGFiZWx9LicsCisJc3RhcnRNb250aDogJ1ZldWlsbGV6IHMmZWFjdXRlO2xlY3Rpb25uZXIgdW4gbW9pcyBkZSBkJmVhY3V0ZTtidXQuJywKKwlzYW1lTW9udGg6ICdDZXMgZGV1eCBkYXRlcyBkb2l2ZW50ICZlY2lyYzt0cmUgZGFucyBsZSBtJmVjaXJjO21lIG1vaXMgLSB2b3VzIGRldmV6IGVuIG1vZGlmaWVyIHVuZS4nLAorCWNyZWRpdGNhcmQ6ICdMZSBudW0mZWFjdXRlO3JvIGRlIGNhcnRlIGRlIGNyJmVhY3V0ZTtkaXQgZXN0IGludmFsaWRlLiBNZXJjaSBkZSB2JmVhY3V0ZTtyaWZpZXIgbGUgbnVtJmVhY3V0ZTtybyBldCBkZSByJmVhY3V0ZTtlc3NheWVyLiBWb3VzIGF2ZXogZW50ciZlYWN1dGU7IHtsZW5ndGh9IGNoaWZmcmUocykuJworCit9KTsKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuZnItRlIuTnVtYmVyCisKK2Rlc2NyaXB0aW9uOiBOdW1iZXIgbWVzc2FnZXMgZm9yIEZyZW5jaC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBcmlhbiBTdG9sd2lqaworICAtIHN2MWwKKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisgIC0gTG9jYWxlLkVVLk51bWJlcgorCitwcm92aWRlczogW0xvY2FsZS5mci1GUi5OdW1iZXJdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnZnItRlInLCAnTnVtYmVyJywgeworCisJZ3JvdXA6ICcgJyAvLyBJbiBmci1GUiBsb2NhbGl6YXRpb24sIGdyb3VwIGNoYXJhY3RlciBpcyBhIGJsYW5rIHNwYWNlCisKK30pLmluaGVyaXQoJ0VVJywgJ051bWJlcicpOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5oZS1JTC5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBIZWJyZXcuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gRWxhZCBPc3NhZG9uCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5oZS1JTC5EYXRlXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2hlLUlMJywgJ0RhdGUnLCB7CisKKwltb250aHM6IFsn15nXoNeV15DXqCcsICfXpNeR16jXldeQ16gnLCAn157XqNelJywgJ9eQ16TXqNeZ15wnLCAn157XkNeZJywgJ9eZ15XXoNeZJywgJ9eZ15XXnNeZJywgJ9eQ15XXkteV16HXmCcsICfXodek15jXnteR16gnLCAn15DXlden15jXldeR16gnLCAn16DXldeR157XkdeoJywgJ9eT16bXnteR16gnXSwKKwltb250aHNfYWJicjogWyfXmdeg15XXkNeoJywgJ9ek15HXqNeV15DXqCcsICfXnteo16UnLCAn15DXpNeo15nXnCcsICfXnteQ15knLCAn15nXldeg15knLCAn15nXldec15knLCAn15DXldeS15XXodeYJywgJ9eh16TXmNee15HXqCcsICfXkNeV16fXmNeV15HXqCcsICfXoNeV15HXnteR16gnLCAn15PXptee15HXqCddLAorCWRheXM6IFsn16jXkNep15XXnycsICfXqdeg15knLCAn16nXnNeZ16nXmScsICfXqNeR15nXoteZJywgJ9eX157Xmdep15knLCAn16nXmdep15knLCAn16nXkdeqJ10sCisJZGF5c19hYmJyOiBbJ9eo15DXqdeV158nLCAn16nXoNeZJywgJ9ep15zXmdep15knLCAn16jXkdeZ16LXmScsICfXl9ee15nXqdeZJywgJ9ep15nXqdeZJywgJ9ep15HXqiddLAorCisJLy8gQ3VsdHVyZSdzIGRhdGUgb3JkZXI6IE1NL0REL1lZWVkKKwlkYXRlT3JkZXI6IFsnZGF0ZScsICdtb250aCcsICd5ZWFyJ10sCisJc2hvcnREYXRlOiAnJWQvJW0vJVknLAorCXNob3J0VGltZTogJyVIOiVNJywKKwlBTTogJ0FNJywKKwlQTTogJ1BNJywKKwlmaXJzdERheU9mV2VlazogMCwKKworCS8vIERhdGUuRXh0cmFzCisJb3JkaW5hbDogJycsCisKKwlsZXNzVGhhbk1pbnV0ZUFnbzogJ9ec16TXoNeZINek15fXldeqINee15PXp9eUJywKKwltaW51dGVBZ286ICfXnNek16DXmSDXm9eT16fXlCcsCisJbWludXRlc0FnbzogJ9ec16TXoNeZIHtkZWx0YX0g15PXp9eV16onLAorCWhvdXJBZ286ICfXnNek16DXmSDXm9ep16LXlCcsCisJaG91cnNBZ286ICfXnNek16DXmSB7ZGVsdGF9INep16LXldeqJywKKwlkYXlBZ286ICfXnNek16DXmSDXmdeV150nLAorCWRheXNBZ286ICfXnNek16DXmSB7ZGVsdGF9INeZ157XmdedJywKKwl3ZWVrQWdvOiAn15zXpNeg15kg16nXkdeV16InLAorCXdlZWtzQWdvOiAn15zXpNeg15kge2RlbHRhfSDXqdeR15XXoteV16onLAorCW1vbnRoQWdvOiAn15zXpNeg15kg15fXldeT16knLAorCW1vbnRoc0FnbzogJ9ec16TXoNeZIHtkZWx0YX0g15fXldeT16nXmdedJywKKwl5ZWFyQWdvOiAn15zXpNeg15kg16nXoNeUJywKKwl5ZWFyc0FnbzogJ9ec16TXoNeZIHtkZWx0YX0g16nXoNeZ150nLAorCisJbGVzc1RoYW5NaW51dGVVbnRpbDogJ9eR16LXldeTINek15fXldeqINee15PXp9eUJywKKwltaW51dGVVbnRpbDogJ9eR16LXldeTINeb15PXp9eUJywKKwltaW51dGVzVW50aWw6ICfXkdei15XXkyB7ZGVsdGF9INeT16fXldeqJywKKwlob3VyVW50aWw6ICfXkdei15XXkyDXm9ep16LXlCcsCisJaG91cnNVbnRpbDogJ9eR16LXldeTIHtkZWx0YX0g16nXoteV16onLAorCWRheVVudGlsOiAn15HXoteV15Mg15nXldedJywKKwlkYXlzVW50aWw6ICfXkdei15XXkyB7ZGVsdGF9INeZ157XmdedJywKKwl3ZWVrVW50aWw6ICfXkdei15XXkyDXqdeR15XXoicsCisJd2Vla3NVbnRpbDogJ9eR16LXldeTIHtkZWx0YX0g16nXkdeV16LXldeqJywKKwltb250aFVudGlsOiAn15HXoteV15Mg15fXldeT16knLAorCW1vbnRoc1VudGlsOiAn15HXoteV15Mge2RlbHRhfSDXl9eV15PXqdeZ150nLAorCXllYXJVbnRpbDogJ9eR16LXldeTINep16DXlCcsCisJeWVhcnNVbnRpbDogJ9eR16LXldeTIHtkZWx0YX0g16nXoNeZ150nCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5oZS1JTC5Gb3JtLlZhbGlkYXRvcgorCitkZXNjcmlwdGlvbjogRm9ybSBWYWxpZGF0b3IgbWVzc2FnZXMgZm9yIEhlYnJldy4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBFbGFkIE9zc2Fkb24KKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmhlLUlMLkZvcm0uVmFsaWRhdG9yXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2hlLUlMJywgJ0Zvcm1WYWxpZGF0b3InLCB7CisKKwlyZXF1aXJlZDogJ9eg15Ag15zXntec15Ag16nXk9eUINeW15QuJywKKwltaW5MZW5ndGg6ICfXoNeQINec15TXlteZ158g15zXpNeX15XXqiB7bWluTGVuZ3RofSDXqteV15XXmdedICjXlNeW16DXqiB7bGVuZ3RofSDXqteV15XXmdedKS4nLAorCW1heExlbmd0aDogJ9eg15Ag15zXlNeW15nXnyDXoteTIHttYXhMZW5ndGh9INeq15XXldeZ150gKNeU15bXoNeqIHtsZW5ndGh9INeq15XXldeZ150pLicsCisJaW50ZWdlcjogJ9eg15Ag15zXlNeW15nXnyDXnteh16TXqCDXqdec150g15zXqdeT15Qg15bXlC4g157Xodek16jXmdedINei16nXqNeV16DXmdeZ150gKNeb157XlSAxLjI1KSDXkNeZ16DXnSDXl9eV16fXmdeZ150uJywKKwludW1lcmljOiAn16DXkCDXnNeU15bXmdefINei16jXmiDXnteh16TXqNeZINeR15zXkdeTINeR16nXk9eUINeW15QgKNeb157XlSAiMSIsICIxLjEiLCAiLTEiINeQ15UgIi0xLjEiKS4nLAorCWRpZ2l0czogJ9eg15Ag15zXlNeW15nXnyDXqNenINeh16TXqNeV16og15XXodeZ157XoNeZINeU16TXqNeT15Qg15HXqdeT15Qg15bXlCAo15zXntep15wsINee16HXpNeoINeY15zXpNeV158g16LXnSDXnten16TXmdedINeQ15Ug16DXp9eV15PXldeqINeU15XXkCDXl9eV16fXmSkuJywKKwlhbHBoYTogJ9eg15Ag15zXlNeW15nXnyDXqNenINeQ15XXqteZ15XXqiDXkdeQ16DXktec15nXqiAoYS16KSDXkdep15PXlCDXlteULiDXqNeV15XXl9eZ150g15DXlSDXqteV15XXmdedINeQ15fXqNeZ150g15DXmdeg150g15fXlden15nXmdedLicsCisJYWxwaGFudW06ICfXoNeQINec15TXlteZ158g16jXpyDXkNeV16rXqNeZ15XXqiDXkdeQ16DXktec15nXqiAoYS16KSDXkNeVINeh16TXqNeV16ogKDAtOSkg15HXqdeT15Qg15bXlC4g15DXldeV15fXqNeZ150g15DXlSDXqteV15XXmdedINeQ15fXqNeZ150g15DXmdeg150g15fXlden15nXmdedLicsCisJZGF0ZVN1Y2hBczogJ9eg15Ag15zXlNeW15nXnyDXqteQ16jXmdeaINeX15XXp9eZLCDXm9ee15Uge2RhdGV9JywKKwlkYXRlSW5Gb3JtYXRNRFk6ICfXoNeQINec15TXlteZ158g16rXkNeo15nXmiDXl9eV16fXmSDXkdek15XXqNee15ggTU0vREQvWVlZWSAo15vXnteVICIxMi8zMS8xOTk5IiknLAorCWVtYWlsOiAn16DXkCDXnNeU15bXmdefINeb16rXldeR16og15DXmdee15nXmdecINeX15XXp9eZ16ouINec15PXldeS157XlDogImZyZWRAZG9tYWluLmNvbSIuJywKKwl1cmw6ICfXoNeQINec15TXlteZ158g15vXqteV15HXqiDXkNeq16gg15fXlden15nXqiwg15vXnteVIGh0dHA6Ly93d3cuZXhhbXBsZS5jb20uJywKKwljdXJyZW5jeURvbGxhcjogJ9eg15Ag15zXlNeW15nXnyDXodeb15XXnSDXk9eV15zXqNeZINeX15XXp9eZLiDXnNeT15XXktee15QgJDEwMC4wMC4nLAorCW9uZVJlcXVpcmVkOiAn16DXkCDXnNeR15fXldeoINec16TXl9eV16og15HXqdeT15Qg15DXl9eTLicsCisJZXJyb3JQcmVmaXg6ICfXqdeS15nXkNeUOiAnLAorCXdhcm5pbmdQcmVmaXg6ICfXkNeW15TXqNeUOiAnLAorCisJLy8gRm9ybS5WYWxpZGF0b3IuRXh0cmFzCisJbm9TcGFjZTogJ9eQ15nXnyDXnNeU15bXmdefINeo15XXldeX15nXnSDXkdep15PXlCDXlteULicsCisJcmVxQ2hrQnlOb2RlOiAn16DXkCDXnNeR15fXldeoINeQ15fXqiDXnteU15DXpNep16jXldeZ15XXqi4nLAorCXJlcXVpcmVkQ2hrOiAn16nXk9eUINeW15Qg16DXk9eo16kuJywKKwlyZXFDaGtCeU5hbWU6ICfXoNeQINec15HXl9eV16gge2xhYmVsfS4nLAorCW1hdGNoOiAn16nXk9eUINeW15Qg16bXqNeZ15og15zXlNeq15DXmdedINec16nXk9eUIHttYXRjaE5hbWV9JywKKwlzdGFydERhdGU6ICfXqteQ16jXmdeaINeU15TXqteX15zXlCcsCisJZW5kRGF0ZTogJ9eq15DXqNeZ15og15TXodeZ15XXnScsCisJY3VycmVudERhdGU6ICfXlNeq15DXqNeZ15og15TXoNeV15vXl9eZJywKKwlhZnRlckRhdGU6ICfXlNeq15DXqNeZ15og16bXqNeZ15og15zXlNeZ15XXqiDXlteU15Qg15DXlSDXkNeX16jXmSB7bGFiZWx9LicsCisJYmVmb3JlRGF0ZTogJ9eU16rXkNeo15nXmiDXpteo15nXmiDXnNeU15nXldeqINeW15TXlCDXkNeVINec16TXoNeZIHtsYWJlbH0uJywKKwlzdGFydE1vbnRoOiAn16DXkCDXnNeR15fXldeoINeX15XXk9epINeU16rXl9ec15QnLAorCXNhbWVNb250aDogJ9ep16DXmSDXqteQ16jXmdeb15nXnSDXkNec15Qg16bXqNeZ15vXmdedINec15TXmdeV16og15HXkNeV16rXlSDXl9eV15PXqSAtINeg15Ag15zXqdeg15XXqiDXkNeX15Mg15TXqteQ16jXmdeb15nXnS4nLAorCWNyZWRpdGNhcmQ6ICfXnteh16TXqCDXm9eo15jXmdehINeU15DXqdeo15DXmSDXqdeU15XXltefINeQ15nXoNeVINeX15XXp9eZLiDXoNeQINec15HXk9eV16cg16nXoNeZ16ouINeU15XXlteg15Uge2xlbmd0aH0g16HXpNeo15XXqi4nCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5oZS1JTC5OdW1iZXIKKworZGVzY3JpcHRpb246IE51bWJlciBtZXNzYWdlcyBmb3IgSGVicmV3LgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEVsYWQgT3NzYWRvbgorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuaGUtSUwuTnVtYmVyXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2hlLUlMJywgJ051bWJlcicsIHsKKworCWRlY2ltYWw6ICcuJywKKwlncm91cDogJywnLAorCisJY3VycmVuY3k6IHsKKwkJc3VmZml4OiAnIOKCqicKKwl9CisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5odS1IVS5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBIdW5nYXJpYW4uCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gWnNvbHQgU3plZ2hlxZEKKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmh1LUhVLkRhdGVdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnaHUtSFUnLCAnRGF0ZScsIHsKKworCW1vbnRoczogWydKYW51w6FyJywgJ0ZlYnJ1w6FyJywgJ03DoXJjaXVzJywgJ8OBcHJpbGlzJywgJ03DoWp1cycsICdKw7puaXVzJywgJ0rDumxpdXMnLCAnQXVndXN6dHVzJywgJ1N6ZXB0ZW1iZXInLCAnT2t0w7NiZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXSwKKwltb250aHNfYWJicjogWydqYW4uJywgJ2ZlYnIuJywgJ23DoXJjLicsICfDoXByLicsICdtw6FqLicsICdqw7puLicsICdqw7psLicsICdhdWcuJywgJ3N6ZXB0LicsICdva3QuJywgJ25vdi4nLCAnZGVjLiddLAorCWRheXM6IFsnVmFzw6FybmFwJywgJ0jDqXRmxZEnLCAnS2VkZCcsICdTemVyZGEnLCAnQ3PDvHTDtnJ0w7ZrJywgJ1DDqW50ZWsnLCAnU3pvbWJhdCddLAorCWRheXNfYWJicjogWydWJywgJ0gnLCAnSycsICdTemUnLCAnQ3MnLCAnUCcsICdTem8nXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBZWVlZLk1NLkRELgorCWRhdGVPcmRlcjogWyd5ZWFyJywgJ21vbnRoJywgJ2RhdGUnXSwKKwlzaG9ydERhdGU6ICclWS4lbS4lZC4nLAorCXNob3J0VGltZTogJyVJOiVNJywKKwlBTTogJ2RlLicsCisJUE06ICdkdS4nLAorCWZpcnN0RGF5T2ZXZWVrOiAxLAorCisJLy8gRGF0ZS5FeHRyYXMKKwlvcmRpbmFsOiAnLicsCisKKwlsZXNzVGhhbk1pbnV0ZUFnbzogJ2FsaWcgZWd5IHBlcmNlJywKKwltaW51dGVBZ286ICdlZ3kgcGVyY2UnLAorCW1pbnV0ZXNBZ286ICd7ZGVsdGF9IHBlcmNlJywKKwlob3VyQWdvOiAnZWd5IMOzcsOhamEnLAorCWhvdXJzQWdvOiAne2RlbHRhfSDDs3LDoWphJywKKwlkYXlBZ286ICcxIG5hcGphJywKKwlkYXlzQWdvOiAne2RlbHRhfSBuYXBqYScsCisJd2Vla0FnbzogJzEgaGV0ZScsCisJd2Vla3NBZ286ICd7ZGVsdGF9IGhldGUnLAorCW1vbnRoQWdvOiAnMSBow7NuYXBqYScsCisJbW9udGhzQWdvOiAne2RlbHRhfSBow7NuYXBqYScsCisJeWVhckFnbzogJzEgw6l2ZScsCisJeWVhcnNBZ286ICd7ZGVsdGF9IMOpdmUnLAorCisJbGVzc1RoYW5NaW51dGVVbnRpbDogJ2FsaWcgZWd5IHBlcmMgbcO6bHZhJywKKwltaW51dGVVbnRpbDogJ2VneSBwZXJjIG3Dumx2YScsCisJbWludXRlc1VudGlsOiAne2RlbHRhfSBwZXJjIG3Dumx2YScsCisJaG91clVudGlsOiAnZWd5IMOzcmEgbcO6bHZhJywKKwlob3Vyc1VudGlsOiAne2RlbHRhfSDDs3JhIG3Dumx2YScsCisJZGF5VW50aWw6ICcxIG5hcCBtw7psdmEnLAorCWRheXNVbnRpbDogJ3tkZWx0YX0gbmFwIG3Dumx2YScsCisJd2Vla1VudGlsOiAnMSBow6l0IG3Dumx2YScsCisJd2Vla3NVbnRpbDogJ3tkZWx0YX0gaMOpdCBtw7psdmEnLAorCW1vbnRoVW50aWw6ICcxIGjDs25hcCBtw7psdmEnLAorCW1vbnRoc1VudGlsOiAne2RlbHRhfSBow7NuYXAgbcO6bHZhJywKKwl5ZWFyVW50aWw6ICcxIMOpdiBtw7psdmEnLAorCXllYXJzVW50aWw6ICd7ZGVsdGF9IMOpdiBtw7psdmEnCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5odS1IVS5Gb3JtLlZhbGlkYXRvcgorCitkZXNjcmlwdGlvbjogRm9ybSBWYWxpZGF0b3IgbWVzc2FnZXMgZm9yIEh1bmdhcmlhbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBac29sdCBTemVnaGXFkQorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuaHUtSFUuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworLyplc2xpbnQgbW9vdG9vbHMtd2hpdGVzcGFjZTowKi8KKworTG9jYWxlLmRlZmluZSgnaHUtSFUnLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAnQSBtZXrFkSBraXTDtmx0w6lzZSBrw7Z0ZWxlesWRLicsCisJbWluTGVuZ3RoOiAnTGVnYWzDoWJiIHttaW5MZW5ndGh9IGthcmFrdGVyIG1lZ2Fkw6FzYSBzesO8a3PDqWdlcyAobWVnYWR2YSB7bGVuZ3RofSBrYXJha3RlcikuJywKKwltYXhMZW5ndGg6ICdMZWdmZWxqZWJiIHttYXhMZW5ndGh9IGthcmFrdGVyIG1lZ2Fkw6FzYSBsZWhldHPDqWdlcyAobWVnYWR2YSB7bGVuZ3RofSBrYXJha3RlcikuJywKKwlpbnRlZ2VyOiAnRWfDqXN6IHN6w6FtIG1lZ2Fkw6FzYSBzesO8a3PDqWdlcy4gQSB0aXplZGVzamVneWVrIChwbC4gMS4yNSkgbmVtIGVuZ2Vkw6lseWV6ZXR0ZWsuJywKKwludW1lcmljOiAnU3rDoW0gbWVnYWTDoXNhIHN6w7xrc8OpZ2VzIChwbC4gIjEiIHZhZ3kgIjEuMSIgdmFneSAiLTEiIHZhZ3kgIi0xLjEiKS4nLAorCWRpZ2l0czogJ0NzYWsgc3rDoW1vayDDqXMgw61yw6FzamVsZWsgbWVnYWTDoXNhIGxlaGV0c8OpZ2VzIChwbC4gdGVsZWZvbnN6w6FtIGvDtnTFkWplbGVrIMOpcy92YWd5IHBlcmplbGVra2VsKS4nLAorCWFscGhhOiAnQ3NhayBiZXTFsWsgKGEteikgbWVnYWTDoXNhIGxlaGV0c8OpZ2VzLiBTesOza8O2eiDDqXMgZWd5w6liIGthcmFrdGVyZWsgbmVtIGVuZ2Vkw6lseWV6ZXR0ZWsuJywKKwlhbHBoYW51bTogJ0NzYWsgYmV0xbFrIChhLXopIHZhZ3kgc3rDoW1vayAoMC05KSBtZWdhZMOhc2EgbGVoZXRzw6lnZXMuIFN6w7Nrw7Z6IMOpcyBlZ3nDqWIga2FyYWt0ZXJlayBuZW0gZW5nZWTDqWx5ZXpldHRlay4nLAorCWRhdGVTdWNoQXM6ICdWYWzDs3MgZMOhdHVtIG1lZ2Fkw6FzYSBzesO8a3PDqWdlcyAocGwuIHtkYXRlfSkuJywKKwlkYXRlSW5Gb3JtYXRNRFk6ICdWYWzDs3MgZMOhdHVtIG1lZ2Fkw6FzYSBzesO8a3PDqWdlcyDDicOJw4nDiS5ISC5OTi4gZm9ybcOhYmFuLiAocGwuICIxOTk5LjEyLjMxLiIpJywKKwllbWFpbDogJ1ZhbMOzcyBlLW1haWwgY8OtbSBtZWdhZMOhc2Egc3rDvGtzw6lnZXMgKHBsLiAiZnJlZEBkb21haW4uaHUiKS4nLAorCXVybDogJ1ZhbMOzcyBVUkwgbWVnYWTDoXNhIHN6w7xrc8OpZ2VzIChwbC4gaHR0cDovL3d3dy5leGFtcGxlLmNvbSkuJywKKwljdXJyZW5jeURvbGxhcjogJ1ZhbMOzcyBww6luesO2c3N6ZWcgbWVnYWTDoXNhIHN6w7xrc8OpZ2VzIChwbC4gMTAwLjAwIEZ0LikuJywKKwlvbmVSZXF1aXJlZDogJ0F6IGFsw6FiYmkgbWV6xZFrIGxlZ2Fsw6FiYiBlZ3lpa8OpbmVrIGtpdMO2bHTDqXNlIGvDtnRlbGV6xZEuJywKKwllcnJvclByZWZpeDogJ0hpYmE6ICcsCisJd2FybmluZ1ByZWZpeDogJ0ZpZ3llbGVtOiAnLAorCisJLy8gRm9ybS5WYWxpZGF0b3IuRXh0cmFzCisJbm9TcGFjZTogJ0EgbWV6xZEgbmVtIHRhcnRhbG1hemhhdCBzesOza8O2esO2a2V0LicsCisJcmVxQ2hrQnlOb2RlOiAnTmluY3MgZWd5ZXRsZW4ga2lqZWzDtmx0IGVsZW0gc2VtLicsCisJcmVxdWlyZWRDaGs6ICdBIG1lesWRIGtpdMO2bHTDqXNlIGvDtnRlbGV6xZEuJywKKwlyZXFDaGtCeU5hbWU6ICdFZ3kge2xhYmVsfSBraXbDoWxhc3p0w6FzYSBzesO8a3PDqWdlcy4nLAorCW1hdGNoOiAnQSBtZXrFkW5layBlZ3llem5pZSBrZWxsIGEoeikge21hdGNoTmFtZX0gbWV6xZF2ZWwuJywKKwlzdGFydERhdGU6ICdhIGtlemRldCBkw6F0dW1hJywKKwllbmREYXRlOiAnYSB2w6lnIGTDoXR1bWEnLAorCWN1cnJlbnREYXRlOiAnamVsZW5sZWdpIGTDoXR1bScsCisJYWZ0ZXJEYXRlOiAnQSBkw6F0dW0gbmVtIGxlaGV0IGtpc2ViYiwgbWludCB7bGFiZWx9LicsCisJYmVmb3JlRGF0ZTogJ0EgZMOhdHVtIG5lbSBsZWhldCBuYWd5b2JiLCBtaW50IHtsYWJlbH0uJywKKwlzdGFydE1vbnRoOiAnS2V6ZGV0aSBow7NuYXAgbWVnYWTDoXNhIHN6w7xrc8OpZ2VzLicsCisJc2FtZU1vbnRoOiAnQSBrw6l0IGTDoXR1bW5hayB1Z3lhbmF6b24gaMOzbmFwYmFuIGtlbGwgbGVubmllLicsCisJY3JlZGl0Y2FyZDogJ0EgbWVnYWRvdHQgYmFua2vDoXJ0eWFzesOhbSBuZW0gdmFsw7NkaSAobWVnYWR2YSB7bGVuZ3RofSBzesOhbWplZ3kpLicKKworfSk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLml0LUlULkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIEl0YWxpYW4uCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCithdXRob3JzOgorICAtIEFuZHJlYSBOb3Zlcm8KKyAgLSBWYWxlcmlvIFByb2lldHRpCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5pdC1JVC5EYXRlXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2l0LUlUJywgJ0RhdGUnLCB7CisKKwltb250aHM6IFsnR2VubmFpbycsICdGZWJicmFpbycsICdNYXJ6bycsICdBcHJpbGUnLCAnTWFnZ2lvJywgJ0dpdWdubycsICdMdWdsaW8nLCAnQWdvc3RvJywgJ1NldHRlbWJyZScsICdPdHRvYnJlJywgJ05vdmVtYnJlJywgJ0RpY2VtYnJlJ10sCisJbW9udGhzX2FiYnI6IFsnZ2VuJywgJ2ZlYicsICdtYXInLCAnYXByJywgJ21hZycsICdnaXUnLCAnbHVnJywgJ2FnbycsICdzZXQnLCAnb3R0JywgJ25vdicsICdkaWMnXSwKKwlkYXlzOiBbJ0RvbWVuaWNhJywgJ0x1bmVkw6wnLCAnTWFydGVkw6wnLCAnTWVyY29sZWTDrCcsICdHaW92ZWTDrCcsICdWZW5lcmTDrCcsICdTYWJhdG8nXSwKKwlkYXlzX2FiYnI6IFsnZG9tJywgJ2x1bicsICdtYXInLCAnbWVyJywgJ2dpbycsICd2ZW4nLCAnc2FiJ10sCisKKwkvLyBDdWx0dXJlJ3MgZGF0ZSBvcmRlcjogREQvTU0vWVlZWQorCWRhdGVPcmRlcjogWydkYXRlJywgJ21vbnRoJywgJ3llYXInXSwKKwlzaG9ydERhdGU6ICclZC8lbS8lWScsCisJc2hvcnRUaW1lOiAnJUguJU0nLAorCUFNOiAnQU0nLAorCVBNOiAnUE0nLAorCWZpcnN0RGF5T2ZXZWVrOiAxLAorCisJLy8gRGF0ZS5FeHRyYXMKKwlvcmRpbmFsOiAnwronLAorCisJbGVzc1RoYW5NaW51dGVBZ286ICdtZW5vIGRpIHVuIG1pbnV0byBmYScsCisJbWludXRlQWdvOiAnY2lyY2EgdW4gbWludXRvIGZhJywKKwltaW51dGVzQWdvOiAnY2lyY2Ege2RlbHRhfSBtaW51dGkgZmEnLAorCWhvdXJBZ286ICJjaXJjYSB1bidvcmEgZmEiLAorCWhvdXJzQWdvOiAnY2lyY2Ege2RlbHRhfSBvcmUgZmEnLAorCWRheUFnbzogJ2NpcmNhIDEgZ2lvcm5vIGZhJywKKwlkYXlzQWdvOiAnY2lyY2Ege2RlbHRhfSBnaW9ybmkgZmEnLAorCXdlZWtBZ286ICd1bmEgc2V0dGltYW5hIGZhJywKKwl3ZWVrc0FnbzogJ3tkZWx0YX0gc2V0dGltYW5lIGZhJywKKwltb250aEFnbzogJ3VuIG1lc2UgZmEnLAorCW1vbnRoc0FnbzogJ3tkZWx0YX0gbWVzaSBmYScsCisJeWVhckFnbzogJ3VuIGFubm8gZmEnLAorCXllYXJzQWdvOiAne2RlbHRhfSBhbm5pIGZhJywKKworCWxlc3NUaGFuTWludXRlVW50aWw6ICd0cmEgbWVubyBkaSB1biBtaW51dG8nLAorCW1pbnV0ZVVudGlsOiAndHJhIGNpcmNhIHVuIG1pbnV0bycsCisJbWludXRlc1VudGlsOiAndHJhIGNpcmNhIHtkZWx0YX0gbWludXRpJywKKwlob3VyVW50aWw6ICJ0cmEgY2lyY2EgdW4nb3JhIiwKKwlob3Vyc1VudGlsOiAndHJhIGNpcmNhIHtkZWx0YX0gb3JlJywKKwlkYXlVbnRpbDogJ3RyYSBjaXJjYSB1biBnaW9ybm8nLAorCWRheXNVbnRpbDogJ3RyYSBjaXJjYSB7ZGVsdGF9IGdpb3JuaScsCisJd2Vla1VudGlsOiAndHJhIHVuYSBzZXR0aW1hbmEnLAorCXdlZWtzVW50aWw6ICd0cmEge2RlbHRhfSBzZXR0aW1hbmUnLAorCW1vbnRoVW50aWw6ICd0cmEgdW4gbWVzZScsCisJbW9udGhzVW50aWw6ICd0cmEge2RlbHRhfSBtZXNpJywKKwl5ZWFyVW50aWw6ICd0cmEgdW4gYW5ubycsCisJeWVhcnNVbnRpbDogJ3RyYSB7ZGVsdGF9IGFubmknCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5pdC1JVC5Gb3JtLlZhbGlkYXRvcgorCitkZXNjcmlwdGlvbjogRm9ybSBWYWxpZGF0b3IgbWVzc2FnZXMgZm9yIEl0YWxpYW4uCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gTGVvbmFyZG8gTGF1cmV0aQorICAtIEFuZHJlYSBOb3Zlcm8KKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLml0LUlULkZvcm0uVmFsaWRhdG9yXQorCisuLi4KKyovCisKKy8qZXNsaW50IG1vb3Rvb2xzLXdoaXRlc3BhY2U6MCovCisKK0xvY2FsZS5kZWZpbmUoJ2l0LUlUJywgJ0Zvcm1WYWxpZGF0b3InLCB7CisKKwlyZXF1aXJlZDogJ0lsIGNhbXBvICZlZ3JhdmU7IG9iYmxpZ2F0b3Jpby4nLAorCW1pbkxlbmd0aDogJ0luc2VyaXJlIGFsbWVubyB7bWluTGVuZ3RofSBjYXJhdHRlcmkgKG5lIHNvbm8gc3RhdGkgaW5zZXJpdGkge2xlbmd0aH0pLicsCisJbWF4TGVuZ3RoOiAnSW5zZXJpcmUgYWwgbWFzc2ltbyB7bWF4TGVuZ3RofSBjYXJhdHRlcmkgKG5lIHNvbm8gc3RhdGkgaW5zZXJpdGkge2xlbmd0aH0pLicsCisJaW50ZWdlcjogJ0luc2VyaXJlIHVuIG51bWVybyBpbnRlcm8uIE5vbiBzb25vIGNvbnNlbnRpdGkgZGVjaW1hbGkgKGVzLjogMS4yNSkuJywKKwludW1lcmljOiAnSW5zZXJpcmUgc29sbyB2YWxvcmkgbnVtZXJpY2kgKGVzLjogIjEiIG9wcHVyZSAiMS4xIiBvcHB1cmUgIi0xIiBvcHB1cmUgIi0xLjEiKS4nLAorCWRpZ2l0czogJ0luc2VyaXJlIHNvbG8gbnVtZXJpIGUgY2FyYXR0ZXJpIGRpIHB1bnRlZ2dpYXR1cmEuIFBlciBlc2VtcGlvICZlZ3JhdmU7IGNvbnNlbnRpdG8gdW4gbnVtZXJvIHRlbGVmb25pY28gY29uIHRyYXR0aW5pIG8gcHVudGkuJywKKwlhbHBoYTogJ0luc2VyaXJlIHNvbG8gbGV0dGVyZSAoYS16KS4gTm9uIHNvbm8gY29uc2VudGl0aSBzcGF6aSBvIGFsdHJpIGNhcmF0dGVyaS4nLAorCWFscGhhbnVtOiAnSW5zZXJpcmUgc29sbyBsZXR0ZXJlIChhLXopIG8gbnVtZXJpICgwLTkpLiBOb24gc29ubyBjb25zZW50aXRpIHNwYXppIG8gYWx0cmkgY2FyYXR0ZXJpLicsCisJZGF0ZVN1Y2hBczogJ0luc2VyaXJlIHVuYSBkYXRhIHZhbGlkYSBkZWwgdGlwbyB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ0luc2VyaXJlIHVuYSBkYXRhIHZhbGlkYSBuZWwgZm9ybWF0byBNTS9HRy9BQUFBIChlcy46ICIxMi8zMS8xOTk5IiknLAorCWVtYWlsOiAnSW5zZXJpcmUgdW4gaW5kaXJpenpvIGVtYWlsIHZhbGlkby4gUGVyIGVzZW1waW8gIm5vbWVAZG9taW5pby5jb20iLicsCisJdXJsOiAnSW5zZXJpcmUgdW4gaW5kaXJpenpvIHZhbGlkby4gUGVyIGVzZW1waW8gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iLicsCisJY3VycmVuY3lEb2xsYXI6ICdJbnNlcmlyZSB1biBpbXBvcnRvIHZhbGlkby4gUGVyIGVzZW1waW8gIiQxMDAuMDAiLicsCisJb25lUmVxdWlyZWQ6ICdDb21wbGV0YXJlIGFsbWVubyB1bm8gZGVpIGNhbXBpIHJpY2hpZXN0aS4nLAorCWVycm9yUHJlZml4OiAnRXJyb3JlOiAnLAorCXdhcm5pbmdQcmVmaXg6ICdBdHRlbnppb25lOiAnLAorCisJLy8gRm9ybS5WYWxpZGF0b3IuRXh0cmFzCisJbm9TcGFjZTogJ05vbiBzb25vIGNvbnNlbnRpdGkgc3BhemkuJywKKwlyZXFDaGtCeU5vZGU6ICdOZXNzdW5hIHZvY2Ugc2VsZXppb25hdGEuJywKKwlyZXF1aXJlZENoazogJ0lsIGNhbXBvICZlZ3JhdmU7IG9iYmxpZ2F0b3Jpby4nLAorCXJlcUNoa0J5TmFtZTogJ1NlbGV6aW9uYXJlIHVuKGEpIHtsYWJlbH0uJywKKwltYXRjaDogJ0lsIHZhbG9yZSBkZXZlIGNvcnJpc3BvbmRlcmUgYWwgY2FtcG8ge21hdGNoTmFtZX0nLAorCXN0YXJ0RGF0ZTogImRhdGEgZCdpbml6aW8iLAorCWVuZERhdGU6ICdkYXRhIGRpIGZpbmUnLAorCWN1cnJlbnREYXRlOiAnZGF0YSBhdHR1YWxlJywKKwlhZnRlckRhdGU6ICdMYSBkYXRhIGRldmUgY29ycmlzcG9uZGVyZSBvIGVzc2VyZSBzdWNjZXNzaXZhIGFsIHtsYWJlbH0uJywKKwliZWZvcmVEYXRlOiAnTGEgZGF0YSBkZXZlIGNvcnJpc3BvbmRlcmUgbyBlc3NlcmUgcHJlY2VkZW50ZSBhbCB7bGFiZWx9LicsCisJc3RhcnRNb250aDogIlNlbGV6aW9uYXJlIHVuIG1lc2UgZCdpbml6aW8iLAorCXNhbWVNb250aDogJ0xlIGR1ZSBkYXRlIGRldm9ubyBlc3NlcmUgZGVsbG8gc3Rlc3NvIG1lc2UgLSBvY2NvcnJlIG1vZGlmaWNhcm5lIHVuYS4nCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5qYS1KUC5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBKYXBhbmVzZS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBOb3JpdGFrYSBIb3JpbworCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuamEtSlAuRGF0ZV0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdqYS1KUCcsICdEYXRlJywgeworCisJbW9udGhzOiBbJzHmnIgnLCAnMuaciCcsICcz5pyIJywgJzTmnIgnLCAnNeaciCcsICc25pyIJywgJzfmnIgnLCAnOOaciCcsICc55pyIJywgJzEw5pyIJywgJzEx5pyIJywgJzEy5pyIJ10sCisJbW9udGhzX2FiYnI6IFsnMeaciCcsICcy5pyIJywgJzPmnIgnLCAnNOaciCcsICc15pyIJywgJzbmnIgnLCAnN+aciCcsICc45pyIJywgJznmnIgnLCAnMTDmnIgnLCAnMTHmnIgnLCAnMTLmnIgnXSwKKwlkYXlzOiBbJ+aXpeabnOaXpScsICfmnIjmm5zml6UnLCAn54Gr5puc5pelJywgJ+awtOabnOaXpScsICfmnKjmm5zml6UnLCAn6YeR5puc5pelJywgJ+Wcn+abnOaXpSddLAorCWRheXNfYWJicjogWyfml6UnLCAn5pyIJywgJ+eBqycsICfmsLQnLCAn5pyoJywgJ+mHkScsICflnJ8nXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBZWVlZL01NL0RECisJZGF0ZU9yZGVyOiBbJ3llYXInLCAnbW9udGgnLCAnZGF0ZSddLAorCXNob3J0RGF0ZTogJyVZLyVtLyVkJywKKwlzaG9ydFRpbWU6ICclSDolTScsCisJQU06ICfljYjliY0nLAorCVBNOiAn5Y2I5b6MJywKKwlmaXJzdERheU9mV2VlazogMCwKKworCS8vIERhdGUuRXh0cmFzCisJb3JkaW5hbDogJycsCisKKwlsZXNzVGhhbk1pbnV0ZUFnbzogJzHliIbku6XlhoXliY0nLAorCW1pbnV0ZUFnbzogJ+e0hDHliIbliY0nLAorCW1pbnV0ZXNBZ286ICfntIR7ZGVsdGF95YiG5YmNJywKKwlob3VyQWdvOiAn57SEMeaZgumWk+WJjScsCisJaG91cnNBZ286ICfntIR7ZGVsdGF95pmC6ZaT5YmNJywKKwlkYXlBZ286ICcx5pel5YmNJywKKwlkYXlzQWdvOiAne2RlbHRhfeaXpeWJjScsCisJd2Vla0FnbzogJzHpgLHplpPliY0nLAorCXdlZWtzQWdvOiAne2RlbHRhfemAsemWk+WJjScsCisJbW9udGhBZ286ICcx44O25pyI5YmNJywKKwltb250aHNBZ286ICd7ZGVsdGF944O25pyI5YmNJywKKwl5ZWFyQWdvOiAnMeW5tOWJjScsCisJeWVhcnNBZ286ICd7ZGVsdGF95bm05YmNJywKKworCWxlc3NUaGFuTWludXRlVW50aWw6ICfku4rjgYvjgonntIQx5YiG5Lul5YaFJywKKwltaW51dGVVbnRpbDogJ+S7iuOBi+OCiee0hDHliIYnLAorCW1pbnV0ZXNVbnRpbDogJ+S7iuOBi+OCiee0hHtkZWx0YX3liIYnLAorCWhvdXJVbnRpbDogJ+S7iuOBi+OCiee0hDHmmYLplpMnLAorCWhvdXJzVW50aWw6ICfku4rjgYvjgonntIR7ZGVsdGF95pmC6ZaTJywKKwlkYXlVbnRpbDogJ+S7iuOBi+OCiTHml6XplpMnLAorCWRheXNVbnRpbDogJ+S7iuOBi+OCiXtkZWx0YX3ml6XplpMnLAorCXdlZWtVbnRpbDogJ+S7iuOBi+OCiTHpgLHplpMnLAorCXdlZWtzVW50aWw6ICfku4rjgYvjgol7ZGVsdGF96YCx6ZaTJywKKwltb250aFVudGlsOiAn5LuK44GL44KJMeODtuaciCcsCisJbW9udGhzVW50aWw6ICfku4rjgYvjgol7ZGVsdGF944O25pyIJywKKwl5ZWFyVW50aWw6ICfku4rjgYvjgokx5bm0JywKKwl5ZWFyc1VudGlsOiAn5LuK44GL44KJe2RlbHRhfeW5tCcKKworfSk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLmphLUpQLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgSmFwYW5lc2UuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gTm9yaXRha2EgSG9yaW8KKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmphLUpQLkZvcm0uVmFsaWRhdG9yXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ2phLUpQJywgJ0Zvcm1WYWxpZGF0b3InLCB7CisKKwlyZXF1aXJlZDogJ+WFpeWKm+OBr+W/hemgiOOBp+OBmeOAgicsCisJbWluTGVuZ3RoOiAn5YWl5Yqb5paH5a2X5pWw44Gve21pbkxlbmd0aH3ku6XkuIrjgavjgZfjgabjgY/jgaDjgZXjgYTjgIIoe2xlbmd0aH3mloflrZcpJywKKwltYXhMZW5ndGg6ICflhaXlipvmloflrZfmlbDjga97bWF4TGVuZ3RofeS7peS4i+OBq+OBl+OBpuOBj+OBoOOBleOBhOOAgih7bGVuZ3RofeaWh+WtlyknLAorCWludGVnZXI6ICfmlbTmlbDjgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIInLAorCW51bWVyaWM6ICflhaXlipvjgafjgY3jgovjga7jga/mlbDlgKTjgaDjgZHjgafjgZnjgIIo5L6LOiAiMSIsICIxLjEiLCAiLTEiLCAiLTEuMSIuLi4uKScsCisJZGlnaXRzOiAn5YWl5Yqb44Gn44GN44KL44Gu44Gv5pWw5YCk44Go5Y+l6Kqt6KiY5Y+344Gn44GZ44CCICjkvos6IC3jgoQr44KS5ZCr44KA6Zu76Kmx55Wq5Y+344Gq44GpKS4nLAorCWFscGhhOiAn5YWl5Yqb44Gn44GN44KL44Gu44Gv5Y2K6KeS6Iux5a2X44Gg44GR44Gn44GZ44CC44Gd44KM5Lul5aSW44Gu5paH5a2X44Gv5YWl5Yqb44Gn44GN44G+44Gb44KT44CCJywKKwlhbHBoYW51bTogJ+WFpeWKm+OBp+OBjeOCi+OBruOBr+WNiuinkuiLseaVsOWtl+OBoOOBkeOBp+OBmeOAguOBneOCjOS7peWkluOBruaWh+Wtl+OBr+WFpeWKm+OBp+OBjeOBvuOBm+OCk+OAgicsCisJZGF0ZVN1Y2hBczogJ+acieWKueOBquaXpeS7mOOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAgntkYXRlfScsCisJZGF0ZUluRm9ybWF0TURZOiAn5pel5LuY44Gu5pu45byP44Gr6Kqk44KK44GM44GC44KK44G+44GZ44CCWVlZWS9NTS9ERCAoaS5lLiAiMTk5OS8xMi8zMSIpJywKKwllbWFpbDogJ+ODoeODvOODq+OCouODieODrOOCueOBq+iqpOOCiuOBjOOBguOCiuOBvuOBmeOAgicsCisJdXJsOiAnVVJM44Ki44OJ44Os44K544Gr6Kqk44KK44GM44GC44KK44G+44GZ44CCJywKKwljdXJyZW5jeURvbGxhcjogJ+mHkemhjeOBq+iqpOOCiuOBjOOBguOCiuOBvuOBmeOAgicsCisJb25lUmVxdWlyZWQ6ICfjgbLjgajjgaTku6XkuIrlhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIInLAorCWVycm9yUHJlZml4OiAn44Ko44Op44O8OiAnLAorCXdhcm5pbmdQcmVmaXg6ICforablkYo6ICcsCisKKwkvLyBGb3JtVmFsaWRhdG9yLkV4dHJhcworCW5vU3BhY2U6ICfjgrnjg5rjg7zjgrnjga/lhaXlipvjgafjgY3jgb7jgZvjgpPjgIInLAorCXJlcUNoa0J5Tm9kZTogJ+mBuOaKnuOBleOCjOOBpuOBhOOBvuOBm+OCk+OAgicsCisJcmVxdWlyZWRDaGs6ICfjgZPjga7poIXnm67jga/lv4XpoIjjgafjgZnjgIInLAorCXJlcUNoa0J5TmFtZTogJ3tsYWJlbH3jgpLpgbjmip7jgZfjgabjgY/jgaDjgZXjgYTjgIInLAorCW1hdGNoOiAne21hdGNoTmFtZX3jgYzlhaXlipvjgZXjgozjgabjgYTjgovloLTlkIjlv4XpoIjjgafjgZnjgIInLAorCXN0YXJ0RGF0ZTogJ+mWi+Wni+aXpScsCisJZW5kRGF0ZTogJ+e1guS6huaXpScsCisJY3VycmVudERhdGU6ICfku4rml6UnLAorCWFmdGVyRGF0ZTogJ3tsYWJlbH3ku6XpmY3jga7ml6Xku5jjgavjgZfjgabjgY/jgaDjgZXjgYTjgIInLAorCWJlZm9yZURhdGU6ICd7bGFiZWx95Lul5YmN44Gu5pel5LuY44Gr44GX44Gm44GP44Gg44GV44GE44CCJywKKwlzdGFydE1vbnRoOiAn6ZaL5aeL5pyI44KS6YG45oqe44GX44Gm44GP44Gg44GV44GE44CCJywKKwlzYW1lTW9udGg6ICfml6Xku5jjgYzlkIzkuIDjgafjgZnjgILjganjgaHjgonjgYvjgpLlpInmm7TjgZfjgabjgY/jgaDjgZXjgYTjgIInCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5qYS1KUC5OdW1iZXIKKworZGVzY3JpcHRpb246IE51bWJlciBtZXNzYWdlcyBmb3IgSmFwYW5lc2UuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gTm9yaXRha2EgSG9yaW8KKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLmphLUpQLk51bWJlcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdqYS1KUCcsICdOdW1iZXInLCB7CisKKwlkZWNpbWFsOiAnLicsCisJZ3JvdXA6ICcsJywKKworCWN1cnJlbmN5OiB7CisJCWRlY2ltYWxzOiAwLAorCQlwcmVmaXg6ICdcXCcKKwl9CisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5ubC1OTC5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBEdXRjaC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBMZW5uYXJ0IFBpbG9uCisgIC0gVGltIFdpZW5rCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5ubC1OTC5EYXRlXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ25sLU5MJywgJ0RhdGUnLCB7CisKKwltb250aHM6IFsnamFudWFyaScsICdmZWJydWFyaScsICdtYWFydCcsICdhcHJpbCcsICdtZWknLCAnanVuaScsICdqdWxpJywgJ2F1Z3VzdHVzJywgJ3NlcHRlbWJlcicsICdva3RvYmVyJywgJ25vdmVtYmVyJywgJ2RlY2VtYmVyJ10sCisJbW9udGhzX2FiYnI6IFsnamFuJywgJ2ZlYicsICdtcnQnLCAnYXByJywgJ21laScsICdqdW4nLCAnanVsJywgJ2F1ZycsICdzZXAnLCAnb2t0JywgJ25vdicsICdkZWMnXSwKKwlkYXlzOiBbJ3pvbmRhZycsICdtYWFuZGFnJywgJ2RpbnNkYWcnLCAnd29lbnNkYWcnLCAnZG9uZGVyZGFnJywgJ3ZyaWpkYWcnLCAnemF0ZXJkYWcnXSwKKwlkYXlzX2FiYnI6IFsnem8nLCAnbWEnLCAnZGknLCAnd28nLCAnZG8nLCAndnInLCAnemEnXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBERC1NTS1ZWVlZCisJZGF0ZU9yZGVyOiBbJ2RhdGUnLCAnbW9udGgnLCAneWVhciddLAorCXNob3J0RGF0ZTogJyVkLSVtLSVZJywKKwlzaG9ydFRpbWU6ICclSDolTScsCisJQU06ICdBTScsCisJUE06ICdQTScsCisJZmlyc3REYXlPZldlZWs6IDEsCisKKwkvLyBEYXRlLkV4dHJhcworCW9yZGluYWw6ICdlJywKKworCWxlc3NUaGFuTWludXRlQWdvOiAnbWluZGVyIGRhbiBlZW4gbWludXV0IGdlbGVkZW4nLAorCW1pbnV0ZUFnbzogJ29uZ2V2ZWVyIGVlbiBtaW51dXQgZ2VsZWRlbicsCisJbWludXRlc0FnbzogJ3tkZWx0YX0gbWludXRlbiBnZWxlZGVuJywKKwlob3VyQWdvOiAnb25nZXZlZXIgZWVuIHV1ciBnZWxlZGVuJywKKwlob3Vyc0FnbzogJ29uZ2V2ZWVyIHtkZWx0YX0gdXVyIGdlbGVkZW4nLAorCWRheUFnbzogJ2VlbiBkYWcgZ2VsZWRlbicsCisJZGF5c0FnbzogJ3tkZWx0YX0gZGFnZW4gZ2VsZWRlbicsCisJd2Vla0FnbzogJ2VlbiB3ZWVrIGdlbGVkZW4nLAorCXdlZWtzQWdvOiAne2RlbHRhfSB3ZWtlbiBnZWxlZGVuJywKKwltb250aEFnbzogJ2VlbiBtYWFuZCBnZWxlZGVuJywKKwltb250aHNBZ286ICd7ZGVsdGF9IG1hYW5kZW4gZ2VsZWRlbicsCisJeWVhckFnbzogJ2VlbiBqYWFyIGdlbGVkZW4nLAorCXllYXJzQWdvOiAne2RlbHRhfSBqYWFyIGdlbGVkZW4nLAorCisJbGVzc1RoYW5NaW51dGVVbnRpbDogJ292ZXIgbWluZGVyIGRhbiBlZW4gbWludXV0JywKKwltaW51dGVVbnRpbDogJ292ZXIgb25nZXZlZXIgZWVuIG1pbnV1dCcsCisJbWludXRlc1VudGlsOiAnb3ZlciB7ZGVsdGF9IG1pbnV0ZW4nLAorCWhvdXJVbnRpbDogJ292ZXIgb25nZXZlZXIgZWVuIHV1cicsCisJaG91cnNVbnRpbDogJ292ZXIge2RlbHRhfSB1dXInLAorCWRheVVudGlsOiAnb3ZlciBvbmdldmVlciBlZW4gZGFnJywKKwlkYXlzVW50aWw6ICdvdmVyIHtkZWx0YX0gZGFnZW4nLAorCXdlZWtVbnRpbDogJ292ZXIgZWVuIHdlZWsnLAorCXdlZWtzVW50aWw6ICdvdmVyIHtkZWx0YX0gd2VrZW4nLAorCW1vbnRoVW50aWw6ICdvdmVyIGVlbiBtYWFuZCcsCisJbW9udGhzVW50aWw6ICdvdmVyIHtkZWx0YX0gbWFhbmRlbicsCisJeWVhclVudGlsOiAnb3ZlciBlZW4gamFhcicsCisJeWVhcnNVbnRpbDogJ292ZXIge2RlbHRhfSBqYWFyJworCit9KTsKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUubmwtTkwuRm9ybS5WYWxpZGF0b3IKKworZGVzY3JpcHRpb246IEZvcm0gVmFsaWRhdG9yIG1lc3NhZ2VzIGZvciBEdXRjaC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBMZW5uYXJ0IFBpbG9uCisgIC0gQXJpYW4gU3RvbHdpamsKKyAgLSBUaW0gV2llbmsKKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLm5sLU5MLkZvcm0uVmFsaWRhdG9yXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ25sLU5MJywgJ0Zvcm1WYWxpZGF0b3InLCB7CisKKwlyZXF1aXJlZDogJ0RpdCB2ZWxkIGlzIHZlcnBsaWNodC4nLAorCWxlbmd0aDogJ1Z1bCBwcmVjaWVzIHtsZW5ndGh9IGthcmFrdGVycyBpbiAoamUgaGVidCB7ZWxMZW5ndGh9IGthcmFrdGVycyBpbmdldm9lcmQpLicsCisJbWluTGVuZ3RoOiAnVnVsIG1pbmltYWFsIHttaW5MZW5ndGh9IGthcmFrdGVycyBpbiAoamUgaGVidCB7bGVuZ3RofSBrYXJha3RlcnMgaW5nZXZvZXJkKS4nLAorCW1heExlbmd0aDogJ1Z1bCBuaWV0IG1lZXIgZGFuIHttYXhMZW5ndGh9IGthcmFrdGVycyBpbiAoamUgaGVidCB7bGVuZ3RofSBrYXJha3RlcnMgaW5nZXZvZXJkKS4nLAorCWludGVnZXI6ICdWdWwgZWVuIGdldGFsIGluLiBHZXRhbGxlbiBtZXQgZGVjaW1hbGVuIChiaWp2b29yYmVlbGQgMS4yNSkgemlqbiBuaWV0IHRvZWdlc3RhYW4uJywKKwludW1lcmljOiAnVnVsIGFsbGVlbiBudW1lcmlla2Ugd2FhcmRlbiBpbiAoYmlqdm9vcmJlZWxkICIxIiBvZiAiMS4xIiBvZiAiLTEiIG9mICItMS4xIikuJywKKwlkaWdpdHM6ICdWdWwgYWxsZWVuIG51bW1lcnMgZW4gbGVlc3Rla2VucyBpbiAoYmlqdm9vcmJlZWxkIGVlbiB0ZWxlZm9vbm51bW1lciBtZXQgc3RyZWVwamVzIGlzIHRvZWdlc3RhYW4pLicsCisJYWxwaGE6ICdWdWwgYWxsZWVuIGxldHRlcnMgaW4gKGEteikuIFNwYXRpZXMgZW4gYW5kZXJlIGthcmFrdGVycyB6aWpuIG5pZXQgdG9lZ2VzdGFhbi4nLAorCWFscGhhbnVtOiAnVnVsIGFsbGVlbiBsZXR0ZXJzIChhLXopIG9mIG51bW1lcnMgKDAtOSkgaW4uIFNwYXRpZXMgZW4gYW5kZXJlIGthcmFrdGVycyB6aWpuIG5pZXQgdG9lZ2VzdGFhbi4nLAorCWRhdGVTdWNoQXM6ICdWdWwgZWVuIGdlbGRpZ2UgZGF0dW0gaW4sIHpvYWxzIHtkYXRlfScsCisJZGF0ZUluRm9ybWF0TURZOiAnVnVsIGVlbiBnZWxkaWdlIGRhdHVtLCBpbiBoZXQgZm9ybWFhdCBNTS9ERC9ZWVlZIChiaWp2b29yYmVlbGQgIjEyLzMxLzE5OTkiKScsCisJZW1haWw6ICdWdWwgZWVuIGdlbGRpZyBlLW1haWxhZHJlcyBpbi4gQmlqdm9vcmJlZWxkICJmcmVkQGRvbWVpbi5ubCIuJywKKwl1cmw6ICdWdWwgZWVuIGdlbGRpZ2UgVVJMIGluLCB6b2FscyBodHRwOi8vd3d3LmV4YW1wbGUuY29tLicsCisJY3VycmVuY3lEb2xsYXI6ICdWdWwgZWVuIGdlbGRpZyAkIGJlZHJhZyBpbi4gQmlqdm9vcmJlZWxkICQxMDAuMDAgLicsCisJb25lUmVxdWlyZWQ6ICdWdWwgaWV0cyBpbiBiaWogaW4gaWVkZXIgZ2V2YWwgZWVuIHZhbiBkZXplIHZlbGRlbi4nLAorCXdhcm5pbmdQcmVmaXg6ICdXYWFyc2NodXdpbmc6ICcsCisJZXJyb3JQcmVmaXg6ICdGb3V0OiAnLAorCisJLy8gRm9ybS5WYWxpZGF0b3IuRXh0cmFzCisJbm9TcGFjZTogJ1NwYXRpZXMgemlqbiBuaWV0IHRvZWdlc3RhYW4gaW4gZGl0IHZlbGQuJywKKwlyZXFDaGtCeU5vZGU6ICdFciB6aWpuIGdlZW4gaXRlbXMgZ2VzZWxlY3RlZXJkLicsCisJcmVxdWlyZWRDaGs6ICdEaXQgdmVsZCBpcyB2ZXJwbGljaHQuJywKKwlyZXFDaGtCeU5hbWU6ICdTZWxlY3RlZXIgZWVuIHtsYWJlbH0uJywKKwltYXRjaDogJ0RpdCB2ZWxkIG1vZXQgb3ZlcmVlbiBrb21lbiBtZXQgaGV0IHttYXRjaE5hbWV9IHZlbGQnLAorCXN0YXJ0RGF0ZTogJ2RlIGJlZ2luIGRhdHVtJywKKwllbmREYXRlOiAnZGUgZWluZCBkYXR1bScsCisJY3VycmVudERhdGU6ICdkZSBodWlkaWdlIGRhdHVtJywKKwlhZnRlckRhdGU6ICdEZSBkYXR1bSBtb2V0IGhldHplbGZkZSBvZiBuYSB7bGFiZWx9IHppam4uJywKKwliZWZvcmVEYXRlOiAnRGUgZGF0dW0gbW9ldCBoZXR6ZWxmZGUgb2Ygdm9vciB7bGFiZWx9IHppam4uJywKKwlzdGFydE1vbnRoOiAnU2VsZWN0ZWVyIGVlbiBiZWdpbiBtYWFuZCcsCisJc2FtZU1vbnRoOiAnRGV6ZSB0d2VlIGRhdGEgbW9ldGVuIGluIGRlemVsZmRlIG1hYW5kIHppam4gLSB1IG1vZXQgZWVuIHZhbiBiZWlkZSBhYW5wYXNzZW4uJywKKwljcmVkaXRjYXJkOiAnSGV0IGluZ2V2dWxkZSBjcmVkaXRjYXJkbnVtbWVyIGlzIG5pZXQgZ2VsZGlnLiBDb250cm9sZWVyIGhldCBudW1tZXIgZW4gcHJvYmVlciBvcG5pZXV3LiB7bGVuZ3RofSBnZXRhbGxlbiBpbmdldnVsZC4nCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5ubC1OTC5OdW1iZXIKKworZGVzY3JpcHRpb246IE51bWJlciBtZXNzYWdlcyBmb3IgRHV0Y2guCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQXJpYW4gU3RvbHdpamsKKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisgIC0gTG9jYWxlLkVVLk51bWJlcgorCitwcm92aWRlczogW0xvY2FsZS5ubC1OTC5OdW1iZXJdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnbmwtTkwnKS5pbmhlcml0KCdFVScsICdOdW1iZXInKTsKKworCisKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUubm8tTk8uRGF0ZQorCitkZXNjcmlwdGlvbjogRGF0ZSBtZXNzYWdlcyBmb3IgTm9yd2VnaWFuLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEVzcGVuICdSZXh4YXJzJyBIb3ZsYW5kc2RhbAorICAtIE9sZSBUw7hzc2UgS29sdmlrCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUubm8tTk8uRGF0ZV0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCduby1OTycsICdEYXRlJywgeworCW1vbnRoczogWydKYW51YXInLCAnRmVicnVhcicsICdNYXJzJywgJ0FwcmlsJywgJ01haScsICdKdW5pJywgJ0p1bGknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPa3RvYmVyJywgJ05vdmVtYmVyJywgJ0Rlc2VtYmVyJ10sCisJbW9udGhzX2FiYnI6IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01haScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2t0JywgJ05vdicsICdEZXMnXSwKKwlkYXlzOiBbJ1PDuG5kYWcnLCAnTWFuZGFnJywgJ1RpcnNkYWcnLCAnT25zZGFnJywgJ1RvcnNkYWcnLCAnRnJlZGFnJywgJ0zDuHJkYWcnXSwKKwlkYXlzX2FiYnI6IFsnU8O4bicsICdNYW4nLCAnVGlyJywgJ09ucycsICdUb3InLCAnRnJlJywgJ0zDuHInXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBERC5NTS5ZWVlZCisJZGF0ZU9yZGVyOiBbJ2RhdGUnLCAnbW9udGgnLCAneWVhciddLAorCXNob3J0RGF0ZTogJyVkLiVtLiVZJywKKwlzaG9ydFRpbWU6ICclSDolTScsCisJQU06ICdBTScsCisJUE06ICdQTScsCisJZmlyc3REYXlPZldlZWs6IDEsCisKKwlsZXNzVGhhbk1pbnV0ZUFnbzogJ21pbmRyZSBlbm4gZXQgbWludXR0IHNpZGVuJywKKwltaW51dGVBZ286ICdvbXRyZW50IGV0IG1pbnV0dCBzaWRlbicsCisJbWludXRlc0FnbzogJ3tkZWx0YX0gbWludXR0ZXIgc2lkZW4nLAorCWhvdXJBZ286ICdvbXRyZW50IGVuIHRpbWUgc2lkZW4nLAorCWhvdXJzQWdvOiAnb210cmVudCB7ZGVsdGF9IHRpbWVyIHNpZGVuJywKKwlkYXlBZ286ICd7ZGVsdGF9IGRhZyBzaWRlbicsCisJZGF5c0FnbzogJ3tkZWx0YX0gZGFnZXIgc2lkZW4nLAorCXdlZWtBZ286ICdlbiB1a2Ugc2lkZW4nLAorCXdlZWtzQWdvOiAne2RlbHRhfSB1a2VyIHNpZGVuJywKKwltb250aEFnbzogJ2VuIG3DpW5lZCBzaWRlbicsCisJbW9udGhzQWdvOiAne2RlbHRhfSBtw6VuZWRlciBzaWRlbicsCisJeWVhckFnbzogJ2V0dCDDpXIgc2lkZW4nLAorCXllYXJzQWdvOiAne2RlbHRhfSDDpXIgc2lkZW4nLAorCisJbGVzc1RoYW5NaW51dGVVbnRpbDogJ21pbmRyZSBlbm4gZXQgbWludXR0IHRpbCcsCisJbWludXRlVW50aWw6ICdvbXRyZW50IGV0IG1pbnV0dCB0aWwnLAorCW1pbnV0ZXNVbnRpbDogJ3tkZWx0YX0gbWludXR0ZXIgdGlsJywKKwlob3VyVW50aWw6ICdvbXRyZW50IGVuIHRpbWUgdGlsJywKKwlob3Vyc1VudGlsOiAnb210cmVudCB7ZGVsdGF9IHRpbWVyIHRpbCcsCisJZGF5VW50aWw6ICdlbiBkYWcgdGlsJywKKwlkYXlzVW50aWw6ICd7ZGVsdGF9IGRhZ2VyIHRpbCcsCisJd2Vla1VudGlsOiAnZW4gdWtlIHRpbCcsCisJd2Vla3NVbnRpbDogJ3tkZWx0YX0gdWtlciB0aWwnLAorCW1vbnRoVW50aWw6ICdlbiBtw6VuZWQgdGlsJywKKwltb250aHNVbnRpbDogJ3tkZWx0YX0gbcOlbmVkZXIgdGlsJywKKwl5ZWFyVW50aWw6ICdldCDDpXIgdGlsJywKKwl5ZWFyc1VudGlsOiAne2RlbHRhfSDDpXIgdGlsJworfSk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLm5vLU5PLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgTm9yd2VnaWFuLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFhcm9uIE5ld3RvbgorICAtIEVzcGVuICdSZXh4YXJzJyBIb3ZsYW5kc2RhbAorICAtIE9sZSBUw7hzc2UgS29sdmlrCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5uby1OTy5Gb3JtLlZhbGlkYXRvcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCduby1OTycsICdGb3JtVmFsaWRhdG9yJywgeworCisJcmVxdWlyZWQ6ICdEZXR0ZSBmZWx0ZXQgZXIgcMOla3JldmQuJywKKwlsZW5ndGg6ICdTa3JpdiBpbm4ge2xlbmd0aH0gdGVnbiAoZHUgc2tyZXYge2VsTGVuZ3RofSB0ZWduKScsCisJbWluTGVuZ3RoOiAnU2tyaXYgaW5uIG1pbnN0IHttaW5MZW5ndGh9IHRlZ24gKGR1IHNrcmV2IHtsZW5ndGh9IHRlZ24pLicsCisJbWF4TGVuZ3RoOiAnSWtrZSBza3JpdiBtZXIgZW5uIHttYXhMZW5ndGh9IHRlZ24gKGR1IHNrcmV2IHtsZW5ndGh9IHRlZ24pLicsCisJaW50ZWdlcjogJ1Nrcml2IGlubiBldCB0YWxsIGkgZGV0dGUgZmVsdGV0LiBUYWxsIG1lZCBkZXNpbWFsZXIgKGYuZWtzLiAxLDI1KSBlciBpa2tlIHRpbGxhdC4nLAorCW51bWVyaWM6ICdTa3JpdiBrdW4gaW5uIG51bWVyaXNrZSB2ZXJkaWVyIGkgZGV0dGUgZmVsdGV0IChmLmVrcy4gIjEiLCAiMS4xIiwgIi0xIiBlbGxlciAiLTEuMSIpLicsCisJZGlnaXRzOiAnU2tyaXYga3VuIG51bW1lciBvZyBza2lsbGV0ZWduIGkgZGV0dGUgZmVsdGV0LicsCisJYWxwaGE6ICdTa3JpdiBrdW4gYm9rc3RhdmVyIChhLcOlKSBpIGRldHRlIGZlbHRldC4gSW5nZW4gbWVsbG9tcm9tIGVsbGVyIGFuZHJlIHRlZ24gZXIgdGlsbGF0LicsCisJYWxwaGFudW06ICdTa3JpdiBrdW4gYm9rc3RhdmVyIChhLcOlKSBlbGxlciBudW1tZXIgKDAtOSkgaSBkZXR0ZSBmZWx0ZXQuIEluZ2VuIG1lbGxvbXJvbSBlbGxlciBhbmRyZSB0ZWduIGVyIHRpbGxhdC4nLAorCWRhdGVTdWNoQXM6ICdTa3JpdiBpbm4gZW4gZ3lsZGlnIGRhdG8sIHNvbSBmLmVrcy4ge2RhdGV9JywKKwlkYXRlSW5Gb3JtYXRNRFk6ICdTa3JpdiBpbm4gZW4gZ3lsZGlnIGRhdG8sIGYuZWtzLiBERC9NTS9ZWVlZICgiMzEvMTIvMTk5OSIpJywKKwllbWFpbDogJ1Nrcml2IGlubiBlbiBneWxkaWcgZXBvc3QtYWRyZXNzZS4gRi5la3MuICJvbGEubm9yZG1hbm5AZXhhbXBsZS5jb20iLicsCisJdXJsOiAnU2tyaXYgaW5uIGVuIGd5bGRpZyBVUkwsIGYuZWtzLiBodHRwOi8vd3d3LmV4YW1wbGUuY29tLicsCisJY3VycmVuY3lEb2xsYXI6ICdTa3JpdiBpbm4gZXQgZ3lsZGlnIGJlbMO4cC4gRi5la3MuIDEwMCwwMC4nLAorCW9uZVJlcXVpcmVkOiAnTWluc3QgZXR0IGF2IGRpc3NlIGZlbHRlbmUgbcOlIGZ5bGxlcyB1dC4nLAorCWVycm9yUHJlZml4OiAnRmVpbDogJywKKwl3YXJuaW5nUHJlZml4OiAnQWR2YXJzZWw6ICcsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAnTWVsbG9tcm9tIGVyIGlra2UgdGlsbGF0dCBpIGRldHRlIGZlbHRldC4nLAorCXJlcUNoa0J5Tm9kZTogJ0luZ2VuIG9iamVrdGVyIGVyIHZhbGd0LicsCisJcmVxdWlyZWRDaGs6ICdEZXR0ZSBmZWx0ZXQgZXIgcMOla3JldmQuJywKKwlyZXFDaGtCeU5hbWU6ICdWZWxnIGVuIHtsYWJlbH0uJywKKwltYXRjaDogJ0RldHRlIGZlbHRldCBtw6UgdsOmcmUgbGlrIHttYXRjaE5hbWV9JywKKwlzdGFydERhdGU6ICdzdGFydGRhdG8nLAorCWVuZERhdGU6ICdzbHV0dGRhdG8nLAorCWN1cnJlbnREYXRlOiAnZGFnZW5zIGRhdG8nLAorCWFmdGVyRGF0ZTogJ0RhdG9lbiBtw6UgdsOmcmUgZGVuIHNhbW1lIHNvbSBlbGxlciBldHRlciB7bGFiZWx9LicsCisJYmVmb3JlRGF0ZTogJ0RhdG9lbiBtw6UgdsOmcmUgZGVuIHNhbW1lIHNvbSBlbGxlciBmw7hyIHtsYWJlbH0uJywKKwlzdGFydE1vbnRoOiAnVmVsZyBlbiBzdGFydG3DpW5lZCcsCisJc2FtZU1vbnRoOiAnRGF0b2VuZSBtw6UgdsOmcmUgaSBkZW4gc2FtbWUgbcOlbmVkZW4gLSB2ZWxnIGRlbiBlbmUgZWxsZXIgZGVuIGFuZHJlLicsCisJY3JlZGl0Y2FyZDogJ0tvcnRudW1tZXJldCBkdSBza3JldiBpbm4gZXIgaWtrZSBneWxkaWcuIFByw7h2IGlnamVuLiBEdSBza3JldiB7bGVuZ3RofSBzaWZmZXIuJworCit9KTsKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUubm8tTk8uTnVtYmVyCisKK2Rlc2NyaXB0aW9uOiBOdW1iZXIgbWVzc2FnZXMgZm9yIE5vcndlZ2lhbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBcmlhbiBTdG9sd2lqaworICAtIE1hcnRpbiBMdW5kZ3JlbgorICAtIE9sZSBU77+9c3NlIEtvbHZpaworCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKyAgLSBMb2NhbGUuRVUuTnVtYmVyCisKK3Byb3ZpZGVzOiBbTG9jYWxlLm5vLU5PLk51bWJlcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCduby1OTycsICdOdW1iZXInLCB7CisKKwljdXJyZW5jeTogeworCQlwcmVmaXg6ICdOT0sgJworCX0KKworfSkuaW5oZXJpdCgnRVUnLCAnTnVtYmVyJyk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLnBsLVBMLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIFBvbGlzaC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBPc2thciBLcmF3Y3p5aworCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUucGwtUEwuRGF0ZV0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdwbC1QTCcsICdEYXRlJywgeworCisJbW9udGhzOiBbJ1N0eWN6ZcWEJywgJ0x1dHknLCAnTWFyemVjJywgJ0t3aWVjaWXFhCcsICdNYWonLCAnQ3plcndpZWMnLCAnTGlwaWVjJywgJ1NpZXJwaWXFhCcsICdXcnplc2llxYQnLCAnUGHFumR6aWVybmlrJywgJ0xpc3RvcGFkJywgJ0dydWR6aWXFhCddLAorCW1vbnRoc19hYmJyOiBbJ3N0eScsICdsdXQnLCAnbWFyJywgJ2t3aScsICdtYWonLCAnY3plJywgJ2xpcCcsICdzaWUnLCAnd3J6JywgJ3BhxbonLCAnbGlzJywgJ2dydSddLAorCWRheXM6IFsnTmllZHppZWxhJywgJ1BvbmllZHppYcWCZWsnLCAnV3RvcmVrJywgJ8Wacm9kYScsICdDendhcnRlaycsICdQacSFdGVrJywgJ1NvYm90YSddLAorCWRheXNfYWJicjogWyduaWVkei4nLCAncG9uLicsICd3dC4nLCAnxZtyLicsICdjencuJywgJ3B0LicsICdzb2IuJ10sCisKKwkvLyBDdWx0dXJlJ3MgZGF0ZSBvcmRlcjogWVlZWS1NTS1ERAorCWRhdGVPcmRlcjogWyd5ZWFyJywgJ21vbnRoJywgJ2RhdGUnXSwKKwlzaG9ydERhdGU6ICclWS0lbS0lZCcsCisJc2hvcnRUaW1lOiAnJUg6JU0nLAorCUFNOiAnbmFkIHJhbmVtJywKKwlQTTogJ3BvIHBvxYJ1ZG5pdScsCisJZmlyc3REYXlPZldlZWs6IDEsCisKKwkvLyBEYXRlLkV4dHJhcworCW9yZGluYWw6IGZ1bmN0aW9uKGRheU9mTW9udGgpeworCQlyZXR1cm4gKGRheU9mTW9udGggPiAzICYmIGRheU9mTW9udGggPCAyMSkgPyAndHknIDogWyd0eScsICdzenknLCAnZ2knLCAnY2knLCAndHknXVtNYXRoLm1pbihkYXlPZk1vbnRoICUgMTAsIDQpXTsKKwl9LAorCisJbGVzc1RoYW5NaW51dGVBZ286ICdtbmllaiBuacW8IG1pbnV0ZSB0ZW11JywKKwltaW51dGVBZ286ICdva2/Fgm8gbWludXTEmSB0ZW11JywKKwltaW51dGVzQWdvOiAne2RlbHRhfSBtaW51dCB0ZW11JywKKwlob3VyQWdvOiAnb2tvxYJvIGdvZHppbsSZIHRlbXUnLAorCWhvdXJzQWdvOiAnb2tvxYJvIHtkZWx0YX0gZ29kemluIHRlbXUnLAorCWRheUFnbzogJ1djem9yYWonLAorCWRheXNBZ286ICd7ZGVsdGF9IGRuaSB0ZW11JywKKworCWxlc3NUaGFuTWludXRlVW50aWw6ICd6YSBuaWVjYcWCxIUgbWludXTEmScsCisJbWludXRlVW50aWw6ICd6YSBva2/Fgm8gbWludXTEmScsCisJbWludXRlc1VudGlsOiAnemEge2RlbHRhfSBtaW51dCcsCisJaG91clVudGlsOiAnemEgb2tvxYJvIGdvZHppbsSZJywKKwlob3Vyc1VudGlsOiAnemEgb2tvxYJvIHtkZWx0YX0gZ29kemluJywKKwlkYXlVbnRpbDogJ3phIDEgZHppZcWEJywKKwlkYXlzVW50aWw6ICd6YSB7ZGVsdGF9IGRuaScKKworfSk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLnBsLVBMLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgUG9saXNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIE9za2FyIEtyYXdjenlrCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5wbC1QTC5Gb3JtLlZhbGlkYXRvcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdwbC1QTCcsICdGb3JtVmFsaWRhdG9yJywgeworCisJcmVxdWlyZWQ6ICdUbyBwb2xlIGplc3Qgd3ltYWdhbmUuJywKKwltaW5MZW5ndGg6ICdXeW1hZ2FuZSBqZXN0IHByenluYWptbmllaiB7bWluTGVuZ3RofSB6bmFrw7N3ICh3cGlzYW55Y2ggem9zdGHFgm8gdHlsa28ge2xlbmd0aH0pLicsCisJbWF4TGVuZ3RoOiAnRG96d29sb25lIGplc3QgbmllIHdpxJljZWogbmnFvCB7bWF4TGVuZ3RofSB6bmFrw7N3ICh3cGlzYW55Y2ggem9zdGHFgm8ge2xlbmd0aH0pJywKKwlpbnRlZ2VyOiAnVG8gcG9sZSB3eW1hZ2EgbGljemIgY2HFgnljaC4gTGljemJ5IGR6aWVzacSZdG5lIChucC4gMS4yNSkgc8SFIG5pZWRvendvbG9uZS4nLAorCW51bWVyaWM6ICdQcm9zaW15IHXFvHl3YcSHIHR5bGtvIG51bWVyeWN6bnljaCB3YXJ0b8WbY2kgdyB0eW0gcG9sdSAobnAuICIxIiwgIjEuMSIsICItMSIgbHViICItMS4xIikuJywKKwlkaWdpdHM6ICdQcm9zaW15IHXFvHl3YcSHIGxpY3piIG9yYXogemFua293IHB1bmt0dWFjeWpueWNoIHcgdHlwIHBvbHUgKGRsYSBwcnp5a8WCYWR1LCBwcnp5IG51bWVyemUgdGVsZWZvbnUgbXnFm2xuaWtpIGkga3JvcGtpIHPEhSBkb3p3b2xvbmUpLicsCisJYWxwaGE6ICdQcm9zaW15IHXFvHl3YcSHIHR5bGtvIGxpdGVyIChhLXopIHcgdHltIHBvbHUuIFNwYWNqZSBvcmF6IGlubmUgem5ha2kgc8SFIG5pZWRvendvbG9uZS4nLAorCWFscGhhbnVtOiAnUHJvc2lteSB1xbx5d2HEhyB0eWxrbyBsaXRlciAoYS16KSBsdWIgbGljemIgKDAtOSkgdyB0eW0gcG9sdS4gU3BhY2plIG9yYXogaW5uZSB6bmFraSBzxIUgbmllZG96d29sb25lLicsCisJZGF0ZVN1Y2hBczogJ1Byb3NpbXkgcG9kYcSHIHByYXdpZMWCb3fEhSBkYXTEmSB3IGZvcm1hY2llOiB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ1Byb3NpbXkgcG9kYcSHIHBvcHJhd27EhSBkYXRlIHcgZm9ybWFjaWUgREQuTU0uUlJSUiAoaS5lLiAiMTIuMDEuMjAwOSIpJywKKwllbWFpbDogJ1Byb3NpbXkgcG9kYcSHIHByYXdpZMWCb3d5IGFkcmVzIGUtbWFpbCwgbnAuICJqYW5AZG9tZW5hLnBsIi4nLAorCXVybDogJ1Byb3NpbXkgcG9kYcSHIHByYXdpZMWCb3d5IGFkcmVzIFVSTCwgbnAuIGh0dHA6Ly93d3cuZXhhbXBsZS5jb20uJywKKwljdXJyZW5jeURvbGxhcjogJ1Byb3NpbXkgcG9kYcSHIHByYXdpZMWCb3fEhSBzdW3EmSB3IFBMTi4gRGxhIHByenlrxYJhZHU6IDEwMC4wMCBQTE4uJywKKwlvbmVSZXF1aXJlZDogJ1Byb3NpbXkgd3lwZcWCbmnEhyBjaG9jaWHFvCBqZWRubyB6IHDDs2wuJywKKwllcnJvclByZWZpeDogJ0LFgsSFZDogJywKKwl3YXJuaW5nUHJlZml4OiAnVXdhZ2E6ICcsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAnVyB0eW0gcG9sdSBuaWUgbW9nxIUgem5hamRvd2HEhyBzacSZIHNwYWNqZS4nLAorCXJlcUNoa0J5Tm9kZTogJ0JyYWsgemF6bmFjem9ueWNoIGVsZW1lbnTDs3cuJywKKwlyZXF1aXJlZENoazogJ1RvIHBvbGUgamVzdCB3eW1hZ2FuZS4nLAorCXJlcUNoa0J5TmFtZTogJ1Byb3NpbXkgd3licmHEhyB6IHtsYWJlbH0uJywKKwltYXRjaDogJ1RvIHBvbGUgbXVzaSBiecSHIHRha2llIHNhbW8gamFrIHttYXRjaE5hbWV9JywKKwlzdGFydERhdGU6ICdkYXRhIHBvY3rEhXRrb3dhJywKKwllbmREYXRlOiAnZGF0YSBrb8WEY293YScsCisJY3VycmVudERhdGU6ICdha3R1YWxuYSBkYXRhJywKKwlhZnRlckRhdGU6ICdQb2RhbmEgZGF0YSBwb2lubmEgYnnEhyB0YWthIHNhbWEgbHViIHBvIHtsYWJlbH0uJywKKwliZWZvcmVEYXRlOiAnUG9kYW5hIGRhdGEgcG9pbm5hIGJ5xIcgdGFrYSBzYW1hIGx1YiBwcnplZCB7bGFiZWx9LicsCisJc3RhcnRNb250aDogJ1Byb3NpbXkgd3licmHEhyBwb2N6xIV0a293eSBtaWVzacSFYy4nLAorCXNhbWVNb250aDogJ1RlIGR3aWUgZGF0eSBtdXN6xIUgYnnEhyB3IHpha3Jlc2llIHRlZ28gc2FtZWdvIG1pZXNpxIVjYSAtIHd5bWFnYW5hIGplc3Qgem1pYW5hIGt0w7NyZWdvxZsgeiBww7NsLicKKworfSk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLnB0LVBULkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIFBvcnR1Z3Vlc2UuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gRmFiaW8gTWlyYW5kYSBDb3N0YQorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUucHQtUFQuRGF0ZV0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdwdC1QVCcsICdEYXRlJywgeworCisJbW9udGhzOiBbJ0phbmVpcm8nLCAnRmV2ZXJlaXJvJywgJ01hcsOnbycsICdBYnJpbCcsICdNYWlvJywgJ0p1bmhvJywgJ0p1bGhvJywgJ0Fnb3N0bycsICdTZXRlbWJybycsICdPdXR1YnJvJywgJ05vdmVtYnJvJywgJ0RlemVtYnJvJ10sCisJbW9udGhzX2FiYnI6IFsnSmFuJywgJ0ZldicsICdNYXInLCAnQWJyJywgJ01haScsICdKdW4nLCAnSnVsJywgJ0FnbycsICdTZXQnLCAnT3V0JywgJ05vdicsICdEZXonXSwKKwlkYXlzOiBbJ0RvbWluZ28nLCAnU2VndW5kYS1mZWlyYScsICdUZXLDp2EtZmVpcmEnLCAnUXVhcnRhLWZlaXJhJywgJ1F1aW50YS1mZWlyYScsICdTZXh0YS1mZWlyYScsICdTw6FiYWRvJ10sCisJZGF5c19hYmJyOiBbJ0RvbScsICdTZWcnLCAnVGVyJywgJ1F1YScsICdRdWknLCAnU2V4JywgJ1PDoWInXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBERC1NTS1ZWVlZCisJZGF0ZU9yZGVyOiBbJ2RhdGUnLCAnbW9udGgnLCAneWVhciddLAorCXNob3J0RGF0ZTogJyVkLSVtLSVZJywKKwlzaG9ydFRpbWU6ICclSDolTScsCisJQU06ICdBTScsCisJUE06ICdQTScsCisJZmlyc3REYXlPZldlZWs6IDEsCisKKwkvLyBEYXRlLkV4dHJhcworCW9yZGluYWw6ICfCuicsCisKKwlsZXNzVGhhbk1pbnV0ZUFnbzogJ2jDoSBtZW5vcyBkZSB1bSBtaW51dG8nLAorCW1pbnV0ZUFnbzogJ2jDoSBjZXJjYSBkZSB1bSBtaW51dG8nLAorCW1pbnV0ZXNBZ286ICdow6Ege2RlbHRhfSBtaW51dG9zJywKKwlob3VyQWdvOiAnaMOhIGNlcmNhIGRlIHVtYSBob3JhJywKKwlob3Vyc0FnbzogJ2jDoSBjZXJjYSBkZSB7ZGVsdGF9IGhvcmFzJywKKwlkYXlBZ286ICdow6EgdW0gZGlhJywKKwlkYXlzQWdvOiAnaMOhIHtkZWx0YX0gZGlhcycsCisJd2Vla0FnbzogJ2jDoSB1bWEgc2VtYW5hJywKKwl3ZWVrc0FnbzogJ2jDoSB7ZGVsdGF9IHNlbWFuYXMnLAorCW1vbnRoQWdvOiAnaMOhIHVtIG3DqnMnLAorCW1vbnRoc0FnbzogJ2jDoSB7ZGVsdGF9IG1lc2VzJywKKwl5ZWFyQWdvOiAnaMOhIHVtIGFubycsCisJeWVhcnNBZ286ICdow6Ege2RlbHRhfSBhbm9zJywKKworCWxlc3NUaGFuTWludXRlVW50aWw6ICdlbSBtZW5vcyBkZSB1bSBtaW51dG8nLAorCW1pbnV0ZVVudGlsOiAnZW0gdW0gbWludXRvJywKKwltaW51dGVzVW50aWw6ICdlbSB7ZGVsdGF9IG1pbnV0b3MnLAorCWhvdXJVbnRpbDogJ2VtIHVtYSBob3JhJywKKwlob3Vyc1VudGlsOiAnZW0ge2RlbHRhfSBob3JhcycsCisJZGF5VW50aWw6ICdlbSB1bSBkaWEnLAorCWRheXNVbnRpbDogJ2VtIHtkZWx0YX0gZGlhcycsCisJd2Vla1VudGlsOiAnZW0gdW1hIHNlbWFuYScsCisJd2Vla3NVbnRpbDogJ2VtIHtkZWx0YX0gc2VtYW5hcycsCisJbW9udGhVbnRpbDogJ2VtIHVtIG3DqnMnLAorCW1vbnRoc1VudGlsOiAnZW0ge2RlbHRhfSBtZXNlcycsCisJeWVhclVudGlsOiAnZW0gdW0gYW5vJywKKwl5ZWFyc1VudGlsOiAnZW0ge2RlbHRhfSBhbm9zJworCit9KTsKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUucHQtQlIuRGF0ZQorCitkZXNjcmlwdGlvbjogRGF0ZSBtZXNzYWdlcyBmb3IgUG9ydHVndWVzZSAoQnJhemlsKS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBGYWJpbyBNaXJhbmRhIENvc3RhCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorICAtIExvY2FsZS5wdC1QVC5EYXRlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLnB0LUJSLkRhdGVdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgncHQtQlInLCAnRGF0ZScsIHsKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBERC9NTS9ZWVlZCisJc2hvcnREYXRlOiAnJWQvJW0vJVknCisKK30pLmluaGVyaXQoJ3B0LVBUJywgJ0RhdGUnKTsKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUucHQtQlIuRm9ybS5WYWxpZGF0b3IKKworZGVzY3JpcHRpb246IEZvcm0gVmFsaWRhdG9yIG1lc3NhZ2VzIGZvciBQb3J0dWd1ZXNlIChCcmF6aWwpLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEbDoWJpbyBNaXJhbmRhIENvc3RhCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5wdC1CUi5Gb3JtLlZhbGlkYXRvcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdwdC1CUicsICdGb3JtVmFsaWRhdG9yJywgeworCisJcmVxdWlyZWQ6ICdFc3RlIGNhbXBvIMOpIG9icmlnYXTDs3Jpby4nLAorCW1pbkxlbmd0aDogJ0RpZ2l0ZSBwZWxvIG1lbm9zIHttaW5MZW5ndGh9IGNhcmFjdGVyZXMgKHRhbWFuaG8gYXR1YWw6IHtsZW5ndGh9KS4nLAorCW1heExlbmd0aDogJ07Do28gZGlnaXRlIG1haXMgZGUge21heExlbmd0aH0gY2FyYWN0ZXJlcyAodGFtYW5obyBhdHVhbDoge2xlbmd0aH0pLicsCisJaW50ZWdlcjogJ1BvciBmYXZvciBkaWdpdGUgYXBlbmFzIHVtIG7Dum1lcm8gaW50ZWlybyBuZXN0ZSBjYW1wby4gTsOjbyBzw6NvIHBlcm1pdGlkb3MgbsO6bWVyb3MgZGVjaW1haXMgKHBvciBleGVtcGxvLCAxLDI1KS4nLAorCW51bWVyaWM6ICdQb3IgZmF2b3IgZGlnaXRlIGFwZW5hcyB2YWxvcmVzIG51bcOpcmljb3MgbmVzdGUgY2FtcG8gKHBvciBleGVtcGxvLCAiMSIgb3UgIjEuMSIgb3UgIi0xIiBvdSAiLTEsMSIpLicsCisJZGlnaXRzOiAnUG9yIGZhdm9yIHVzZSBhcGVuYXMgbsO6bWVyb3MgZSBwb250dWHDp8OjbyBuZXN0ZSBjYW1wbyAocG9yIGV4ZW1wbG8sIHVtIG7Dum1lcm8gZGUgdGVsZWZvbmUgY29tIHRyYcOnb3Mgb3UgcG9udG9zIMOpIHBlcm1pdGlkbykuJywKKwlhbHBoYTogJ1BvciBmYXZvciB1c2Ugc29tZW50ZSBsZXRyYXMgKGEteikuIEVzcGHDp28gZSBvdXRyb3MgY2FyYWN0ZXJlcyBuw6NvIHPDo28gcGVybWl0aWRvcy4nLAorCWFscGhhbnVtOiAnVXNlIHNvbWVudGUgbGV0cmFzIChhLXopIG91IG7Dum1lcm9zICgwLTkpIG5lc3RlIGNhbXBvLiBFc3Bhw6dvIGUgb3V0cm9zIGNhcmFjdGVyZXMgbsOjbyBzw6NvIHBlcm1pdGlkb3MuJywKKwlkYXRlU3VjaEFzOiAnRGlnaXRlIHVtYSBkYXRhIHbDoWxpZGEsIGNvbW8ge2RhdGV9JywKKwlkYXRlSW5Gb3JtYXRNRFk6ICdEaWdpdGUgdW1hIGRhdGEgdsOhbGlkYSwgY29tbyBERC9NTS9ZWVlZIChwb3IgZXhlbXBsbywgIjMxLzEyLzE5OTkiKScsCisJZW1haWw6ICdEaWdpdGUgdW0gZW5kZXJlw6dvIGRlIGVtYWlsIHbDoWxpZG8uIFBvciBleGVtcGxvICJub21lQGRvbWluaW8uY29tIi4nLAorCXVybDogJ0RpZ2l0ZSB1bWEgVVJMIHbDoWxpZGEuIEV4ZW1wbG86IGh0dHA6Ly93d3cuZXhhbXBsZS5jb20uJywKKwljdXJyZW5jeURvbGxhcjogJ0RpZ2l0ZSB1bSB2YWxvciBlbSBkaW5oZWlybyB2w6FsaWRvLiBFeGVtcGxvOiBSJDEwMCwwMCAuJywKKwlvbmVSZXF1aXJlZDogJ0RpZ2l0ZSBhbGdvIHBhcmEgcGVsbyBtZW5vcyB1bSBkZXNzZXMgY2FtcG9zLicsCisJZXJyb3JQcmVmaXg6ICdFcnJvOiAnLAorCXdhcm5pbmdQcmVmaXg6ICdBdmlzbzogJywKKworCS8vIEZvcm0uVmFsaWRhdG9yLkV4dHJhcworCW5vU3BhY2U6ICdOw6NvIMOpIHBvc3PDrXZlbCBkaWdpdGFyIGVzcGHDp29zIG5lc3RlIGNhbXBvLicsCisJcmVxQ2hrQnlOb2RlOiAnTsOjbyBmb2kgc2VsZWNpb25hZG8gbmVuaHVtIGl0ZW0uJywKKwlyZXF1aXJlZENoazogJ0VzdGUgY2FtcG8gw6kgb2JyaWdhdMOzcmlvLicsCisJcmVxQ2hrQnlOYW1lOiAnUG9yIGZhdm9yIGRpZ2l0ZSB1bSB7bGFiZWx9LicsCisJbWF0Y2g6ICdFc3RlIGNhbXBvIGRldmUgc2VyIGlndWFsIGFvIGNhbXBvIHttYXRjaE5hbWV9LicsCisJc3RhcnREYXRlOiAnYSBkYXRhIGluaWNpYWwnLAorCWVuZERhdGU6ICdhIGRhdGEgZmluYWwnLAorCWN1cnJlbnREYXRlOiAnYSBkYXRhIGF0dWFsJywKKwlhZnRlckRhdGU6ICdBIGRhdGEgZGV2ZSBzZXIgaWd1YWwgb3UgcG9zdGVyaW9yIGEge2xhYmVsfS4nLAorCWJlZm9yZURhdGU6ICdBIGRhdGEgZGV2ZSBzZXIgaWd1YWwgb3UgYW50ZXJpb3IgYSB7bGFiZWx9LicsCisJc3RhcnRNb250aDogJ1BvciBmYXZvciBzZWxlY2lvbmUgdW1hIGRhdGEgaW5pY2lhbC4nLAorCXNhbWVNb250aDogJ0VzdGFzIGR1YXMgZGF0YXMgZGV2ZW0gdGVyIG8gbWVzbW8gbcOqcyAtIHZvY8OqIGRldmUgbW9kaWZpY2FyIHVtYSBkYXMgZHVhcy4nLAorCWNyZWRpdGNhcmQ6ICdPIG7Dum1lcm8gZG8gY2FydMOjbyBkZSBjcsOpZGl0byBpbmZvcm1hZG8gw6kgaW52w6FsaWRvLiBQb3IgZmF2b3IgdmVyaWZpcXVlIG8gdmFsb3IgZSB0ZW50ZSBub3ZhbWVudGUuIHtsZW5ndGh9IG7Dum1lcm9zIGluZm9ybWFkb3MuJworCit9KTsKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUucHQtQlIuTnVtYmVyCisKK2Rlc2NyaXB0aW9uOiBOdW1iZXIgbWVzc2FnZXMgZm9yIFBUIEJyYXppbGlhbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBcmlhbiBTdG9sd2lqaworICAtIERhbmlsbG8gQ8Opc2FyCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5wdC1CUi5OdW1iZXJdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgncHQtQlInLCAnTnVtYmVyJywgeworCisJZGVjaW1hbDogJywnLAorCWdyb3VwOiAnLicsCisKKwljdXJyZW5jeTogeworCQlwcmVmaXg6ICdSJCAnCisJfQorCit9KTsKKworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLnB0LVBULkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgUG9ydHVndWVzZS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBNaXF1ZWwgSHVkaW4KKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLnB0LVBULkZvcm0uVmFsaWRhdG9yXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ3B0LVBUJywgJ0Zvcm1WYWxpZGF0b3InLCB7CisKKwlyZXF1aXJlZDogJ0VzdGUgY2FtcG8gw6kgbmVjZXNzw6FyaW8uJywKKwltaW5MZW5ndGg6ICdEaWdpdGUgcGVsbyBtZW5vc3ttaW5MZW5ndGh9IGNhcmFjdGVyZXMgKGNvbXByaW1lbnRvIHtsZW5ndGh9IGNhcmFjdGVyZXMpLicsCisJbWF4TGVuZ3RoOiAnTsOjbyBpbnNpcmEgbWFpcyBkZSB7bWF4TGVuZ3RofSBjYXJhY3RlcmVzIChjb21wcmltZW50byB7bGVuZ3RofSBjYXJhY3RlcmVzKS4nLAorCWludGVnZXI6ICdEaWdpdGUgdW0gbsO6bWVybyBpbnRlaXJvIG5lc3RlIGRvbcOtbmlvLiBDb20gbsO6bWVyb3MgZGVjaW1haXMgKHBvciBleGVtcGxvLCAxLDI1KSwgbsOjbyBzw6NvIHBlcm1pdGlkYXMuJywKKwludW1lcmljOiAnRGlnaXRlIGFwZW5hcyB2YWxvcmVzIG51bcOpcmljb3MgbmVzdGUgZG9tw61uaW8gKHAuZXguLCAiMSIgb3UgIjEuMSIgb3UgIi0xIiBvdSAiLTEsMSIpLicsCisJZGlnaXRzOiAnUG9yIGZhdm9yLCB1c2UgbsO6bWVyb3MgZSBwb250dWHDp8OjbyBhcGVuYXMgbmVzdGUgY2FtcG8gKHAuZXguLCB1bSBuw7ptZXJvIGRlIHRlbGVmb25lIGNvbSB0cmHDp29zIG91IHBvbnRvcyDDqSBwZXJtaXRpZGEpLicsCisJYWxwaGE6ICdQb3IgZmF2b3IgdXNlIHNvbWVudGUgbGV0cmFzIChhLXopLCBjb20gbmVzdGEgw6FyZWEuIE7Do28gdXRpbGl6ZSBlc3Bhw6dvcyBuZW0gb3V0cm9zIGNhcmFjdGVyZXMgc8OjbyBwZXJtaXRpZG9zLicsCisJYWxwaGFudW06ICdVc2Ugc29tZW50ZSBsZXRyYXMgKGEteikgb3UgbsO6bWVyb3MgKDAtOSkgbmVzdGUgY2FtcG8uIE7Do28gdXRpbGl6ZSBlc3Bhw6dvcyBuZW0gb3V0cm9zIGNhcmFjdGVyZXMgc8OjbyBwZXJtaXRpZG9zLicsCisJZGF0ZVN1Y2hBczogJ0RpZ2l0ZSB1bWEgZGF0YSB2w6FsaWRhLCBjb21vIHtkYXRlfScsCisJZGF0ZUluRm9ybWF0TURZOiAnRGlnaXRlIHVtYSBkYXRhIHbDoWxpZGEsIGNvbW8gREQvTU0vWVlZWSAocC5leC4gIjMxLzEyLzE5OTkiKScsCisJZW1haWw6ICdEaWdpdGUgdW0gZW5kZXJlw6dvIGRlIGVtYWlsIHbDoWxpZG8uIFBvciBleGVtcGxvICJmcmVkQGRvbWFpbi5jb20iLicsCisJdXJsOiAnRGlnaXRlIHVtYSBVUkwgdsOhbGlkYSwgY29tbyBodHRwOi8vd3d3LmV4YW1wbGUuY29tLicsCisJY3VycmVuY3lEb2xsYXI6ICdEaWdpdGUgdW0gdmFsb3IgdsOhbGlkbyAkLiBQb3IgZXhlbXBsbyAkIDEwMCwwMC4gJywKKwlvbmVSZXF1aXJlZDogJ0RpZ2l0ZSBhbGdvIHBhcmEgcGVsbyBtZW5vcyB1bSBkZXNzZXMgaW5zdW1vcy4nLAorCWVycm9yUHJlZml4OiAnRXJybzogJywKKwl3YXJuaW5nUHJlZml4OiAnQXZpc286ICcKKworfSk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLnJ1LVJVLXVuaWNvZGUuRGF0ZQorCitkZXNjcmlwdGlvbjogRGF0ZSBtZXNzYWdlcyBmb3IgUnVzc2lhbiAodXRmLTgpLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEV2c3RpZ25lZXYgUGF2ZWwKKyAgLSBLdXJ5YW5vdmljaCBFZ29yCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5ydS1SVS5EYXRlXQorCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCisvLyBSdXNzaWFuIGxhbmd1YWdlIHBsdXJhbGl6YXRpb24gcnVsZXMsIHRha2VuIGZyb20gQ0xEUiBwcm9qZWN0LCBodHRwOi8vdW5pY29kZS5vcmcvY2xkci8KKy8vIG9uZSAtPiBuIG1vZCAxMCBpcyAxIGFuZCBuIG1vZCAxMDAgaXMgbm90IDExOworLy8gZmV3IC0+IG4gbW9kIDEwIGluIDIuLjQgYW5kIG4gbW9kIDEwMCBub3QgaW4gMTIuLjE0OworLy8gbWFueSAtPiBuIG1vZCAxMCBpcyAwIG9yIG4gbW9kIDEwIGluIDUuLjkgb3IgbiBtb2QgMTAwIGluIDExLi4xNDsKKy8vIG90aGVyIC0+IGV2ZXJ5dGhpbmcgZWxzZSAoZXhhbXBsZSAzLjE0KQordmFyIHBsdXJhbGl6ZSA9IGZ1bmN0aW9uKG4sIG9uZSwgZmV3LCBtYW55LCBvdGhlcil7CisJdmFyIG1vZHVsbzEwID0gbiAlIDEwLAorCQltb2R1bG8xMDAgPSBuICUgMTAwOworCisJaWYgKG1vZHVsbzEwID09IDEgJiYgbW9kdWxvMTAwICE9IDExKXsKKwkJcmV0dXJuIG9uZTsKKwl9IGVsc2UgaWYgKChtb2R1bG8xMCA9PSAyIHx8IG1vZHVsbzEwID09IDMgfHwgbW9kdWxvMTAgPT0gNCkgJiYgIShtb2R1bG8xMDAgPT0gMTIgfHwgbW9kdWxvMTAwID09IDEzIHx8IG1vZHVsbzEwMCA9PSAxNCkpeworCQlyZXR1cm4gZmV3OworCX0gZWxzZSBpZiAobW9kdWxvMTAgPT0gMCB8fCAobW9kdWxvMTAgPT0gNSB8fCBtb2R1bG8xMCA9PSA2IHx8IG1vZHVsbzEwID09IDcgfHwgbW9kdWxvMTAgPT0gOCB8fCBtb2R1bG8xMCA9PSA5KSB8fCAobW9kdWxvMTAwID09IDExIHx8IG1vZHVsbzEwMCA9PSAxMiB8fCBtb2R1bG8xMDAgPT0gMTMgfHwgbW9kdWxvMTAwID09IDE0KSl7CisJCXJldHVybiBtYW55OworCX0gZWxzZSB7CisJCXJldHVybiBvdGhlcjsKKwl9Cit9OworCitMb2NhbGUuZGVmaW5lKCdydS1SVScsICdEYXRlJywgeworCisJbW9udGhzOiBbJ9Cv0L3QstCw0YDRjCcsICfQpNC10LLRgNCw0LvRjCcsICfQnNCw0YDRgicsICfQkNC/0YDQtdC70YwnLCAn0JzQsNC5JywgJ9CY0Y7QvdGMJywgJ9CY0Y7Qu9GMJywgJ9CQ0LLQs9GD0YHRgicsICfQodC10L3RgtGP0LHRgNGMJywgJ9Ce0LrRgtGP0LHRgNGMJywgJ9Cd0L7Rj9Cx0YDRjCcsICfQlNC10LrQsNCx0YDRjCddLAorCW1vbnRoc19hYmJyOiBbJ9GP0L3QsicsICfRhNC10LLRgCcsICfQvNCw0YDRgicsICfQsNC/0YAnLCAn0LzQsNC5Jywn0LjRjtC90YwnLCfQuNGO0LvRjCcsJ9Cw0LLQsycsJ9GB0LXQvdGCJywn0L7QutGCJywn0L3QvtGP0LEnLCfQtNC10LonXSwKKwlkYXlzOiBbJ9CS0L7RgdC60YDQtdGB0LXQvdGM0LUnLCAn0J/QvtC90LXQtNC10LvRjNC90LjQuicsICfQktGC0L7RgNC90LjQuicsICfQodGA0LXQtNCwJywgJ9Cn0LXRgtCy0LXRgNCzJywgJ9Cf0Y/RgtC90LjRhtCwJywgJ9Ch0YPQsdCx0L7RgtCwJ10sCisJZGF5c19hYmJyOiBbJ9CS0YEnLCAn0J/QvScsICfQktGCJywgJ9Ch0YAnLCAn0KfRgicsICfQn9GCJywgJ9Ch0LEnXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBERC5NTS5ZWVlZCisJZGF0ZU9yZGVyOiBbJ2RhdGUnLCAnbW9udGgnLCAneWVhciddLAorCXNob3J0RGF0ZTogJyVkLiVtLiVZJywKKwlzaG9ydFRpbWU6ICclSDolTScsCisJQU06ICdBTScsCisJUE06ICdQTScsCisJZmlyc3REYXlPZldlZWs6IDEsCisKKwkvLyBEYXRlLkV4dHJhcworCW9yZGluYWw6ICcnLAorCisJbGVzc1RoYW5NaW51dGVBZ286ICfQvNC10L3RjNGI0LUg0LzQuNC90YPRgtGLINC90LDQt9Cw0LQnLAorCW1pbnV0ZUFnbzogJ9C80LjQvdGD0YLRgyDQvdCw0LfQsNC0JywKKwltaW51dGVzQWdvOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAne2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAn0LzQuNC90YPRgtGDJywgJ9C80LjQvdGD0YLRiycsICfQvNC40L3Rg9GCJykgKyAnINC90LDQt9Cw0LQnOyB9LAorCWhvdXJBZ286ICfRh9Cw0YEg0L3QsNC30LDQtCcsCisJaG91cnNBZ286IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICd7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICfRh9Cw0YEnLCAn0YfQsNGB0LAnLCAn0YfQsNGB0L7QsicpICsgJyDQvdCw0LfQsNC0JzsgfSwKKwlkYXlBZ286ICfQstGH0LXRgNCwJywKKwlkYXlzQWdvOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAne2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAn0LTQtdC90YwnLCAn0LTQvdGPJywgJ9C00L3QtdC5JykgKyAnINC90LDQt9Cw0LQnOyB9LAorCXdlZWtBZ286ICfQvdC10LTQtdC70Y4g0L3QsNC30LDQtCcsCisJd2Vla3NBZ286IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICd7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICfQvdC10LTQtdC70Y8nLCAn0L3QtdC00LXQu9C4JywgJ9C90LXQtNC10LvRjCcpICsgJyDQvdCw0LfQsNC0JzsgfSwKKwltb250aEFnbzogJ9C80LXRgdGP0YYg0L3QsNC30LDQtCcsCisJbW9udGhzQWdvOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAne2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAn0LzQtdGB0Y/RhicsICfQvNC10YHRj9GG0LAnLCAn0LzQtdGB0Y/RhtC10LInKSArICcg0L3QsNC30LDQtCc7IH0sCisJeWVhckFnbzogJ9Cz0L7QtCDQvdCw0LfQsNC0JywKKwl5ZWFyc0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3tkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ9Cz0L7QtCcsICfQs9C+0LTQsCcsICfQu9C10YInKSArICcg0L3QsNC30LDQtCc7IH0sCisKKwlsZXNzVGhhbk1pbnV0ZVVudGlsOiAn0LzQtdC90YzRiNC1INGH0LXQvCDRh9C10YDQtdC3INC80LjQvdGD0YLRgycsCisJbWludXRlVW50aWw6ICfRh9C10YDQtdC3INC80LjQvdGD0YLRgycsCisJbWludXRlc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAn0YfQtdGA0LXQtyB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICfQvNC40L3Rg9GC0YMnLCAn0LzQuNC90YPRgtGLJywgJ9C80LjQvdGD0YInKSArICcnOyB9LAorCWhvdXJVbnRpbDogJ9GH0LXRgNC10Lcg0YfQsNGBJywKKwlob3Vyc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAn0YfQtdGA0LXQtyB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICfRh9Cw0YEnLCAn0YfQsNGB0LAnLCAn0YfQsNGB0L7QsicpICsgJyc7IH0sCisJZGF5VW50aWw6ICfQt9Cw0LLRgtGA0LAnLAorCWRheXNVbnRpbDogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ9GH0LXRgNC10Lcge2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAn0LTQtdC90YwnLCAn0LTQvdGPJywgJ9C00L3QtdC5JykgKyAnJzsgfSwKKwl3ZWVrVW50aWw6ICfRh9C10YDQtdC3INC90LXQtNC10LvRjicsCisJd2Vla3NVbnRpbDogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ9GH0LXRgNC10Lcge2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAn0L3QtdC00LXQu9GOJywgJ9C90LXQtNC10LvQuCcsICfQvdC10LTQtdC70YwnKSArICcnOyB9LAorCW1vbnRoVW50aWw6ICfRh9C10YDQtdC3INC80LXRgdGP0YYnLAorCW1vbnRoc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAn0YfQtdGA0LXQtyB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICfQvNC10YHRj9GGJywgJ9C80LXRgdGP0YbQsCcsICfQvNC10YHRj9GG0LXQsicpICsgJyc7IH0sCisJeWVhclVudGlsOiAn0YfQtdGA0LXQtycsCisJeWVhcnNVbnRpbDogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ9GH0LXRgNC10Lcge2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAn0LPQvtC0JywgJ9Cz0L7QtNCwJywgJ9C70LXRgicpICsgJyc7IH0KKworfSk7CisKKworCit9KSgpOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5ydS1SVS11bmljb2RlLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgUnVzc2lhbiAodXRmLTgpLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIENoZXJub2Rhcm92IEVnb3IKKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisKK3Byb3ZpZGVzOiBbTG9jYWxlLnJ1LVJVLkZvcm0uVmFsaWRhdG9yXQorCisuLi4KKyovCisKK0xvY2FsZS5kZWZpbmUoJ3J1LVJVJywgJ0Zvcm1WYWxpZGF0b3InLCB7CisKKwlyZXF1aXJlZDogJ9Ct0YLQviDQv9C+0LvQtSDQvtCx0Y/Qt9Cw0YLQtdC70YzQvdC+INC6INC30LDQv9C+0LvQvdC10L3QuNGOLicsCisJbWluTGVuZ3RoOiAn0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INGF0L7RgtGPINCx0Ysge21pbkxlbmd0aH0g0YHQuNC80LLQvtC70L7QsiAo0JLRiyDQstCy0LXQu9C4IHtsZW5ndGh9KS4nLAorCW1heExlbmd0aDogJ9Cf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQvdC1INCx0L7Qu9GM0YjQtSB7bWF4TGVuZ3RofSDRgdC40LzQstC+0LvQvtCyICjQktGLINCy0LLQtdC70Lgge2xlbmd0aH0pLicsCisJaW50ZWdlcjogJ9Cf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQsiDRjdGC0L4g0L/QvtC70LUg0YfQuNGB0LvQvi4g0JTRgNC+0LHQvdGL0LUg0YfQuNGB0LvQsCAo0L3QsNC/0YDQuNC80LXRgCAxLjI1KSDRgtGD0YIg0L3QtSDRgNCw0LfRgNC10YjQtdC90YsuJywKKwludW1lcmljOiAn0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INCyINGN0YLQviDQv9C+0LvQtSDRh9C40YHQu9C+ICjQvdCw0L/RgNC40LzQtdGAICIxIiDQuNC70LggIjEuMSIsINC40LvQuCAiLTEiLCDQuNC70LggIi0xLjEiKS4nLAorCWRpZ2l0czogJ9CSINGN0YLQvtC8INC/0L7Qu9C1INCS0Ysg0LzQvtC20LXRgtC1INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0YbQuNGE0YDRiyDQuCDQt9C90LDQutC4INC/0YPQvdC60YLRg9Cw0YbQuNC4ICjQvdCw0L/RgNC40LzQtdGALCDRgtC10LvQtdGE0L7QvdC90YvQuSDQvdC+0LzQtdGAINGB0L4g0LfQvdCw0LrQsNC80Lgg0LTQtdGE0LjRgdCwINC40LvQuCDRgSDRgtC+0YfQutCw0LzQuCkuJywKKwlhbHBoYTogJ9CSINGN0YLQvtC8INC/0L7Qu9C1INC80L7QttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGC0L7Qu9GM0LrQviDQu9Cw0YLQuNC90YHQutC40LUg0LHRg9C60LLRiyAoYS16KS4g0J/RgNC+0LHQtdC70Ysg0Lgg0LTRgNGD0LPQuNC1INGB0LjQvNCy0L7Qu9GLINC30LDQv9GA0LXRidC10L3Riy4nLAorCWFscGhhbnVtOiAn0JIg0Y3RgtC+0Lwg0L/QvtC70LUg0LzQvtC20L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQvtC70YzQutC+INC70LDRgtC40L3RgdC60LjQtSDQsdGD0LrQstGLIChhLXopINC4INGG0LjRhNGA0YsgKDAtOSkuINCf0YDQvtCx0LXQu9GLINC4INC00YDRg9Cz0LjQtSDRgdC40LzQstC+0LvRiyDQt9Cw0L/RgNC10YnQtdC90YsuJywKKwlkYXRlU3VjaEFzOiAn0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INC60L7RgNGA0LXQutGC0L3Rg9GOINC00LDRgtGDIHtkYXRlfScsCisJZGF0ZUluRm9ybWF0TURZOiAn0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INC00LDRgtGDINCyINGE0L7RgNC80LDRgtC1INCc0Jwv0JTQlC/Qk9CT0JPQkyAo0L3QsNC/0YDQuNC80LXRgCAiMTIvMzEvMTk5OSIpJywKKwllbWFpbDogJ9Cf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQutC+0YDRgNC10LrRgtC90YvQuSDQtdC80LXQudC7LdCw0LTRgNC10YEuINCU0LvRjyDQv9GA0LjQvNC10YDQsCAiZnJlZEBkb21haW4uY29tIi4nLAorCXVybDogJ9Cf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQv9GA0LDQstC40LvRjNC90YPRjiDRgdGB0YvQu9C60YMg0LLQuNC00LAgaHR0cDovL3d3dy5leGFtcGxlLmNvbS4nLAorCWN1cnJlbmN5RG9sbGFyOiAn0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INGB0YPQvNC80YMg0LIg0LTQvtC70LvQsNGA0LDRhS4g0J3QsNC/0YDQuNC80LXRgDogJDEwMC4wMCAuJywKKwlvbmVSZXF1aXJlZDogJ9Cf0L7QttCw0LvRg9C50YHRgtCwLCDQstGL0LHQtdGA0LjRgtC1INGF0L7RgtGMINGH0YLQvi3QvdC40LHRg9C00Ywg0LIg0L7QtNC90L7QvCDQuNC3INGN0YLQuNGFINC/0L7Qu9C10LkuJywKKwllcnJvclByZWZpeDogJ9Ce0YjQuNCx0LrQsDogJywKKwl3YXJuaW5nUHJlZml4OiAn0JLQvdC40LzQsNC90LjQtTogJworCit9KTsKKworCisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLnNrLVNLLkRhdGUKKworZGVzY3JpcHRpb246IERhdGUgbWVzc2FnZXMgZm9yIFNsb3Zhay4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBJdmFuIE1hc8OhcgorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuc2stU0suRGF0ZV0KKworLi4uCisqLworKGZ1bmN0aW9uKCl7CisKKy8vIFNsb3ZhayBsYW5ndWFnZSBwbHVyYWxpemF0aW9uIHJ1bGVzLCBzZWUgaHR0cDovL3VuaWNvZGUub3JnL3JlcG9zL2NsZHItdG1wL3RydW5rL2RpZmYvc3VwcGxlbWVudGFsL2xhbmd1YWdlX3BsdXJhbF9ydWxlcy5odG1sCisvLyBvbmUgLT4gbiBpcyAxOyAgICAgICAgICAgIDEKKy8vIGZldyAtPiBuIGluIDIuLjQ7ICAgICAgICAgMi00CisvLyBvdGhlciAtPiBldmVyeXRoaW5nIGVsc2UgIDAsIDUtOTk5LCAxLjMxLCAyLjMxLCA1LjMxLi4uCit2YXIgcGx1cmFsaXplID0gZnVuY3Rpb24obiwgb25lLCBmZXcsIG90aGVyKXsKKwlpZiAobiA9PSAxKSByZXR1cm4gb25lOworCWVsc2UgaWYgKG4gPT0gMiB8fCBuID09IDMgfHwgbiA9PSA0KSByZXR1cm4gZmV3OworCWVsc2UgcmV0dXJuIG90aGVyOworfTsKKworTG9jYWxlLmRlZmluZSgnc2stU0snLCAnRGF0ZScsIHsKKworCW1vbnRoczogWydKYW51w6FyJywgJ0ZlYnJ1w6FyJywgJ01hcmVjJywgJ0FwcsOtbCcsICdNw6FqJywgJ0rDum4nLCAnSsO6bCcsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09rdMOzYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10sCisJbW9udGhzX2FiYnI6IFsnamFudcOhcmEnLCAnZmVicnXDoXJhJywgJ21hcmNhJywgJ2FwcsOtbGEnLCAnbcOhamEnLCAnasO6bmEnLCAnasO6bGEnLCAnYXVndXN0YScsICdzZXB0ZW1icmEnLCAnb2t0w7NicmEnLCAnbm92ZW1icmEnLCAnZGVjZW1icmEnXSwKKwlkYXlzOiBbJ05lZGVsZScsICdQb25kZWzDrScsICfDmnRlcsO9JywgJ1N0cmVkYScsICfEjHR2cnRlaycsICdQw6F0ZWsnLCAnU29ib3RhJ10sCisJZGF5c19hYmJyOiBbJ25lJywgJ3BvJywgJ3V0JywgJ3N0JywgJ8WhdCcsICdwaScsICdzbyddLAorCisJLy8gQ3VsdHVyZSdzIGRhdGUgb3JkZXI6IERELk1NLllZWVkKKwlkYXRlT3JkZXI6IFsnZGF0ZScsICdtb250aCcsICd5ZWFyJ10sCisJc2hvcnREYXRlOiAnJWQuJW0uJVknLAorCXNob3J0VGltZTogJyVIOiVNJywKKwlBTTogJ2RvcC4nLAorCVBNOiAncG9wLicsCisJZmlyc3REYXlPZldlZWs6IDEsCisKKwkvLyBEYXRlLkV4dHJhcworCW9yZGluYWw6ICcuJywKKworCWxlc3NUaGFuTWludXRlQWdvOiAncHJlZCBjaHbDrcS+b3UnLAorCW1pbnV0ZUFnbzogJ3ByaWJsacW+bmUgcHJlZCBtaW7DunRvdScsCisJbWludXRlc0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3ByZWQge2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAnbWluw7p0b3UnLCAnbWluw7p0YW1pJywgJ21pbsO6dGFtaScpOyB9LAorCWhvdXJBZ286ICdwcmlibGnFvm5lIHByZWQgaG9kaW5vdScsCisJaG91cnNBZ286IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICdwcmVkIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ2hvZGlub3UnLCAnaG9kaW5hbWknLCAnaG9kaW5hbWknKTsgfSwKKwlkYXlBZ286ICdwcmVkIGTFiG9tJywKKwlkYXlzQWdvOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAncHJlZCB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICdkxYhvbScsICdkxYhhbWknLCAnZMWIYW1pJyk7IH0sCisJd2Vla0FnbzogJ3ByZWQgdMO9xb5kxYhvbScsCisJd2Vla3NBZ286IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICdwcmVkIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ3TDvcW+ZMWIb20nLCAndMO9xb5kxYhhbWknLCAndMO9xb5kxYhhbWknKTsgfSwKKwltb250aEFnbzogJ3ByZWQgbWVzaWFjb20nLAorCW1vbnRoc0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3ByZWQge2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAnbWVzaWFjb20nLCAnbWVzaWFjbWknLCAnbWVzaWFjbWknKTsgfSwKKwl5ZWFyQWdvOiAncHJlZCByb2tvbScsCisJeWVhcnNBZ286IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICdwcmVkIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ3Jva29tJywgJ3Jva21pJywgJ3Jva21pJyk7IH0sCisKKwlsZXNzVGhhbk1pbnV0ZVVudGlsOiAnbyBjaHbDrcS+dScsCisJbWludXRlVW50aWw6ICdwcmlibGnFvm5lIG8gbWluw7p0dScsCisJbWludXRlc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAnbyB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICdtaW7DunR1JywgJ21pbsO6dHknLCAnbWluw7p0eScpOyB9LAorCWhvdXJVbnRpbDogJ3ByaWJsacW+bmUgbyBob2RpbnUnLAorCWhvdXJzVW50aWw6IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICdvIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ2hvZGludScsICdob2RpbnknLCAnaG9kw61uJyk7IH0sCisJZGF5VW50aWw6ICdvIGRlxYgnLAorCWRheXNVbnRpbDogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ28ge2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAnZGXFiCcsICdkbmknLCAnZG7DrScpOyB9LAorCXdlZWtVbnRpbDogJ28gdMO9xb5kZcWIJywKKwl3ZWVrc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAnbyB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICd0w73FvmRlxYgnLCAndMO9xb5kbmUnLCAndMO9xb5kxYhvdicpOyB9LAorCW1vbnRoVW50aWw6ICdvIG1lc2lhYycsCisJbW9udGhzVW50aWw6IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICdvIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ21lc2lhYycsICdtZXNpYWNlJywgJ21lc2lhY292Jyk7IH0sCisJeWVhclVudGlsOiAnbyByb2snLAorCXllYXJzVW50aWw6IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICdvIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ3JvaycsICdyb2t5JywgJ3Jva292Jyk7IH0KK30pOworCit9KSgpOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5zay1TSy5Gb3JtLlZhbGlkYXRvcgorCitkZXNjcmlwdGlvbjogRm9ybSBWYWxpZGF0b3IgbWVzc2FnZXMgZm9yIEN6ZWNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEl2YW4gTWFzw6FyCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS5zay1TSy5Gb3JtLlZhbGlkYXRvcl0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdzay1TSycsICdGb3JtVmFsaWRhdG9yJywgeworCisJcmVxdWlyZWQ6ICdUw6F0byBwb2xvxb5rYSBqZSBwb3Zpbm7DoS4nLAorCW1pbkxlbmd0aDogJ1phZGFqdGUgcHJvc8OtbSBhc3BvxYgge21pbkxlbmd0aH0gem5ha292IChtb21lbnTDoWxuZSB7bGVuZ3RofSB6bmFrb3YpLicsCisJbWF4TGVuZ3RoOiAnWmFkYWp0ZSBwcm9zw61tIG1lbmVqIGFrbyB7bWF4TGVuZ3RofSB6bmFrb3YgKG1vbWVudMOhbG5lIHtsZW5ndGh9IHpuYWtvdikuJywKKwlpbnRlZ2VyOiAnWmFkYWp0ZSBwcm9zw61tIGNlbMOpIMSNw61zbG8uIERlc2V0aW5uw6kgxI3DrXNsYSAobmFwci4gMS4yNSkgbmllIHPDuiBwb3ZvbGVuw6kuJywKKwludW1lcmljOiAnWmFkYWp0ZSBsZW4gxI3DrXNlbG7DqSBob2Rub3R5ICh0LmouIOKAnjHigJwgYWxlYm8g4oCeMS4x4oCcIGFsZWJvIOKAni0x4oCcIGFsZWJvIOKAni0xLjHigJwpLicsCisJZGlnaXRzOiAnWmFkYWp0ZSBwcm9zw61tIGxlbiDEjcOtc2xhIGEgaW50ZXJwdW5rxI1uw6kgem5hbWllbmthIChuYXByw61rbGFkIHRlbGVmw7NubmUgxI3DrXNsbyBzIHBvbWzEjWthbWkgYWxibyBib2RrYW1pIGplIHBvdm9sZW7DqSkuJywKKwlhbHBoYTogJ1phZGFqdGUgcHJvc8OtbSBsZW4gcMOtc21lbsOhIChhLXopLiBNZWR6ZXJ5IGFsZWJvIGluw6kgem5ha3kgbmllIHPDuiBwb3ZvbGVuw6kuJywKKwlhbHBoYW51bTogJ1phZGFqdGUgcHJvc8OtbSBsZW4gcMOtc21lbsOhIChhLXopIGFsZWJvIMSNw61zbGljZSAoMC05KS4gTWVkemVyeSBhbGVibyBpbsOpIHpuYWt5IG5pZSBzw7ogcG92b2xlbsOpLicsCisJZGF0ZVN1Y2hBczogJ1phZGFqdGUgcHJvc8OtbSBwbGF0bsO9IGTDoXR1bSB2IHR2YXJlIHtkYXRlfScsCisJZGF0ZUluRm9ybWF0TURZOiAnWmFkYWp0ZSBwcm9zw61tIHBsYXRuw70gZGF0dW0gdiB0dmFyZSBNTSAvIEREIC8gUlJSUiAodC5qLiDigJ4xMi8zMS8xOTk54oCcKScsCisJZW1haWw6ICdaYWRhanRlIHByb3PDrW0gcGxhdG7DuiBlbWFpbG92w7ogYWRyZXN1LiBOYXByw61rbGFkIOKAnmZyZWRAZG9tYWluLmNvbeKAnC4nLAorCXVybDogJ1phZGFqdGUgcHJvc8OtbSBwbGF0bm/DuiBhZHJlc3UgVVJMIHYgdHZhcmUgaHR0cDovL3d3dy5leGFtcGxlLmNvbS4nLAorCWN1cnJlbmN5RG9sbGFyOiAnWmFkYWp0ZSBwcm9zw61tIHBsYXRuw7ogxI1pYXN0a3UuIE5hcHLDrWtsYWQgJDEwMC4wMC4nLAorCW9uZVJlcXVpcmVkOiAnWmFkYWp0ZSBwcm9zw61tIGFzcG/FiCBqZWRudSBob2Rub3R1IHogdMO9Y2h0byBwb2xvxb5pZWsuJywKKwllcnJvclByZWZpeDogJ0NoeWJhOiAnLAorCXdhcm5pbmdQcmVmaXg6ICdVcG96b3JuZW5pZTogJywKKworCS8vIEZvcm0uVmFsaWRhdG9yLkV4dHJhcworCW5vU3BhY2U6ICdWIHRlanRvIHBvbG/FvmxlIG5pZSBzw7ogcG92b2xlbsOpIG1lZHplcnknLAorCXJlcUNoa0J5Tm9kZTogJ05pZSBzw7ogdnlicmFuw6kgxb5pYWRuZSBwb2xvxb5reS4nLAorCXJlcXVpcmVkQ2hrOiAnVMOhdG8gcG9sb8W+a2EgamUgcG92aW5uw6EuJywKKwlyZXFDaGtCeU5hbWU6ICdQcm9zw61tIHZ5YmVydGUge2xhYmVsfS4nLAorCW1hdGNoOiAnVMOhdG8gcG9sb8W+a2Egc2EgbXVzw60gemhvZG92YcWlIHMgcG9sb8W+a291IHttYXRjaE5hbWV9JywKKwlzdGFydERhdGU6ICdkw6F0dW0gemHEjWlhdGt1JywKKwllbmREYXRlOiAnZMOhdHVtIHVrb27EjWVuaWEnLAorCWN1cnJlbmREYXRlOiAnYWt0dcOhbG55IGTDoXR1bScsCisJYWZ0ZXJEYXRlOiAnRMOhdHVtIGJ5IG1hbCBiw73FpSByb3ZuYWvDvSBhbGVibyB2w6TEjcWhw60gYWtvIHtsYWJlbH0uJywKKwliZWZvcmVEYXRlOiAnRMOhdHVtIGJ5IG1hbCBiecWlIHJvdm5ha8O9IGFsZWJvIG1lbsWhw60gYWtvIHtsYWJlbH0uJywKKwlzdGFydE1vbnRoOiAnVnliZXJ0ZSBwb8SNaWF0b8SNbsO9IG1lc2lhYy4nLAorCXNhbWVNb250aDogJ1RpZXRvIGR2YSBkw6F0dW15IG11c2lhIGLDvcWlIHYgcm92bmFrb20gbWVzaWFjaSAtIHptZcWIdGUgamVkZW4geiBuaWNoLicsCisJY3JlZGl0Y2FyZDogJ1phZGFuw6kgxI3DrXNsbyBrcmVkaXRuZWoga2FydHkgamUgbmVwbGF0bsOpLiBQcm9zw61tLCBvcHJhdnRlIGhvLiBCb2xvIHphZGFuw71jaCB7bGVuZ3RofSDEjcOtc2xpYy4nCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5zaS1TSS5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBTbG92ZW5pYW4uCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gUmFkb3ZhbiBMb3plagorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuc2ktU0kuRGF0ZV0KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIHBsdXJhbGl6ZSA9IGZ1bmN0aW9uKG4sIG9uZSwgdHdvLCB0aHJlZSwgb3RoZXIpeworCXJldHVybiAobiA+PSAxICYmIG4gPD0gMykgPyBhcmd1bWVudHNbbl0gOiBvdGhlcjsKK307CisKK0xvY2FsZS5kZWZpbmUoJ3NsLVNJJywgJ0RhdGUnLCB7CisKKwltb250aHM6IFsnamFudWFyJywgJ2ZlYnJ1YXInLCAnbWFyZWMnLCAnYXByaWwnLCAnbWFqJywgJ2p1bmlqJywgJ2p1bGlqJywgJ2F2Z3VzdCcsICdzZXB0ZW1iZXInLCAnb2t0b2JlcicsICdub3ZlbWJlcicsICdkZWNlbWJlciddLAorCW1vbnRoc19hYmJyOiBbJ2phbicsICdmZWInLCAnbWFyJywgJ2FwcicsICdtYWonLCAnanVuJywgJ2p1bCcsICdhdmcnLCAnc2VwJywgJ29rdCcsICdub3YnLCAnZGVjJ10sCisJZGF5czogWyduZWRlbGphJywgJ3BvbmVkZWxqZWsnLCAndG9yZWsnLCAnc3JlZGEnLCAnxI1ldHJ0ZWsnLCAncGV0ZWsnLCAnc29ib3RhJ10sCisJZGF5c19hYmJyOiBbJ25lZCcsICdwb24nLCAndG9yJywgJ3NyZScsICfEjWV0JywgJ3BldCcsICdzb2InXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBERC5NTS5ZWVlZCisJZGF0ZU9yZGVyOiBbJ2RhdGUnLCAnbW9udGgnLCAneWVhciddLAorCXNob3J0RGF0ZTogJyVkLiVtLiVZJywKKwlzaG9ydFRpbWU6ICclSC4lTScsCisJQU06ICdBTScsCisJUE06ICdQTScsCisJZmlyc3REYXlPZldlZWs6IDEsCisKKwkvLyBEYXRlLkV4dHJhcworCW9yZGluYWw6ICcuJywKKworCWxlc3NUaGFuTWludXRlQWdvOiAnbWFuaiBrb3QgbWludXRvIG5hemFqJywKKwltaW51dGVBZ286ICdtaW51dG8gbmF6YWonLAorCW1pbnV0ZXNBZ286IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICd7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICdtaW51dG8nLCAnbWludXRpJywgJ21pbnV0ZScsICdtaW51dCcpICsgJyBuYXphaic7IH0sCisJaG91ckFnbzogJ3VybyBuYXphaicsCisJaG91cnNBZ286IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICd7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICd1cm8nLCAndXJpJywgJ3VyZScsICd1cicpICsgJyBuYXphaic7IH0sCisJZGF5QWdvOiAnZGFuIG5hemFqJywKKwlkYXlzQWdvOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAne2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAnZGFuJywgJ2RuZXZhJywgJ2RuaScsICdkbmknKSArICcgbmF6YWonOyB9LAorCXdlZWtBZ286ICd0ZWRlbiBuYXphaicsCisJd2Vla3NBZ286IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICd7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICd0ZWRlbicsICd0ZWRuYScsICd0ZWRuZScsICd0ZWRub3YnKSArICcgbmF6YWonOyB9LAorCW1vbnRoQWdvOiAnbWVzZWMgbmF6YWonLAorCW1vbnRoc0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3tkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ21lc2VjJywgJ21lc2VjYScsICdtZXNlY2UnLCAnbWVzZWNvdicpICsgJyBuYXphaic7IH0sCisJeWVhcnRoQWdvOiAnbGV0byBuYXphaicsCisJeWVhcnNBZ286IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICd7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICdsZXRvJywgJ2xldGknLCAnbGV0YScsICdsZXQnKSArICcgbmF6YWonOyB9LAorCisJbGVzc1RoYW5NaW51dGVVbnRpbDogJ8WhZSBtYW5qIGtvdCBtaW51dG8nLAorCW1pbnV0ZVVudGlsOiAnxaFlIG1pbnV0YScsCisJbWludXRlc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAnxaFlIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ21pbnV0YScsICdtaW51dGknLCAnbWludXRlJywgJ21pbnV0Jyk7IH0sCisJaG91clVudGlsOiAnxaFlIHVyYScsCisJaG91cnNVbnRpbDogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ8WhZSB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICd1cmEnLCAndXJpJywgJ3VyZScsICd1cicpOyB9LAorCWRheVVudGlsOiAnxaFlIGRhbicsCisJZGF5c1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAnxaFlIHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ2RhbicsICdkbmV2YScsICdkbmV2aScsICdkbmknKTsgfSwKKwl3ZWVrVW50aWw6ICfFoWUgdGVkbicsCisJd2Vla3NVbnRpbDogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ8WhZSB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICd0ZWRlbicsICd0ZWRuYScsICd0ZWRuaScsICd0ZWRub3YnKTsgfSwKKwltb250aFVudGlsOiAnxaFlIG1lc2VjJywKKwltb250aHNVbnRpbDogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ8WhZSB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICdtZXNlYycsICdtZXNlY2EnLCAnbWVzZWNpJywgJ21lc2Vjb3YnKTsgfSwKKwl5ZWFyVW50aWw6ICfFoWUgbGV0bycsCisJeWVhcnNVbnRpbDogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ8WhZSB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICdsZXRvJywgJ2xldGknLCAnbGV0YScsICdsZXQnKTsgfQorCit9KTsKKworfSkoKTsKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuc2ktU0kuRm9ybS5WYWxpZGF0b3IKKworZGVzY3JpcHRpb246IEZvcm0gVmFsaWRhdG9yIG1lc3NhZ2VzIGZvciBTbG92ZW5pYW4uCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gUmFkb3ZhbiBMb3plagorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuc2ktU0kuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnc2wtU0knLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAnVG8gcG9samUgamUgb2J2ZXpubycsCisJbWluTGVuZ3RoOiAnUHJvc2ltLCB2bmVzaXRlIHZzYWoge21pbkxlbmd0aH0gem5ha292ICh2bmVzbGkgc3RlIHtsZW5ndGh9IHpuYWtvdikuJywKKwltYXhMZW5ndGg6ICdQcm9zaW0sIG5lIHZuZXNpdGUgdmXEjSBrb3Qge21heExlbmd0aH0gem5ha292ICh2bmVzbGkgc3RlIHtsZW5ndGh9IHpuYWtvdikuJywKKwlpbnRlZ2VyOiAnUHJvc2ltLCB2bmVzaXRlIGNlbG8gxaF0ZXZpbG8uIERlY2ltYWxuYSDFoXRldmlsYSAoa290IDEsMjUpIG5pc28gZG92b2xqZW5hLicsCisJbnVtZXJpYzogJ1Byb3NpbSwgdm5lc2l0ZSBzYW1vIG51bWVyacSNbmUgdnJlZG5vc3RpIChrb3QgIjEiIGFsaSAiMS4xIiBhbGkgIi0xIiBhbGkgIi0xLjEiKS4nLAorCWRpZ2l0czogJ1Byb3NpbSwgdXBvcmFiaXRlIMWhdGV2aWxrZSBpbiBsb8SNaWxhIGxlIG5hIHRlbSBwb2xqdSAobmEgcHJpbWVyLCBkb3ZvbGplbmEgamUgdGVsZWZvbnNrYSDFoXRldmlsa2EgeiBwb21pxaFsYWppIGFsaSBwaWthbWkpLicsCisJYWxwaGE6ICdQcm9zaW0sIHVwb3JhYml0ZSBsZSDEjXJrZSB2IHRlbSBwbGp1LiBQcmVzbGVka2kgaW4gZHJ1Z2kgem5ha2kgbmlzbyBkb3ZvbGplbmkuJywKKwlhbHBoYW51bTogJ1Byb3NpbSwgdXBvcmFiaXRlIHNhbW8gxI1ya2UgYWxpIMWhdGV2aWxrZSB2IHRlbSBwb2xqdS4gUHJlc2xlZGtpIGluIGRydWdpIHpuYWtpIG5pc28gZG92b2xqZW5pLicsCisJZGF0ZVN1Y2hBczogJ1Byb3NpbSwgdm5lc2l0ZSBwcmF2aWxlbiBkYXR1bSBrb3Qge2RhdGV9JywKKwlkYXRlSW5Gb3JtYXRNRFk6ICdQcm9zaW0sIHZuZXNpdGUgcHJhdmlsZW4gZGF0dW0ga290IE1NLkRELllZWVkgKHByaW1lciAiMTIuMzEuMTk5OSIpJywKKwllbWFpbDogJ1Byb3NpbSwgdm5lc2l0ZSBwcmF2aWxlbiBlbWFpbCBuYXNsb3YuIE5hIHByaW1lciAiZnJlZEBkb21haW4uY29tIi4nLAorCXVybDogJ1Byb3NpbSwgdm5lc2l0ZSBwcmF2aWxlbiBVUkwga290IGh0dHA6Ly93d3cuZXhhbXBsZS5jb20uJywKKwljdXJyZW5jeURvbGxhcjogJ1Byb3NpbSwgdm5lc2l0IGVwcmF2aWxubyB2cmVkbm9zdCDigqwuIFByaW1lciAxMDAsMDDigqwgLicsCisJb25lUmVxdWlyZWQ6ICdQcm9zaW1vLCB2bmVzaXRlIG5la2FqIHphIHZzYWogZW5vIGl6bWVkIHRlaCBwb2xqLicsCisJZXJyb3JQcmVmaXg6ICdOYXBha2E6ICcsCisJd2FybmluZ1ByZWZpeDogJ09wb3pvcmlsbzogJywKKworCS8vIEZvcm0uVmFsaWRhdG9yLkV4dHJhcworCW5vU3BhY2U6ICdUbyB2bm9zbm8gcG9samUgbmUgZG9wdcWhxI1hIHByZXNsZWRrb3YuJywKKwlyZXFDaGtCeU5vZGU6ICdOacSNIG5pc3RlIGl6YnJhbGkuJywKKwlyZXF1aXJlZENoazogJ1RvIHBvbGplIGplIG9idmV6bm8nLAorCXJlcUNoa0J5TmFtZTogJ1Byb3NpbSwgaXpiZXJpdGUge2xhYmVsfS4nLAorCW1hdGNoOiAnVG8gcG9samUgc2UgbW9yYSB1amVtYXRpIHogcG9samVtIHttYXRjaE5hbWV9JywKKwlzdGFydERhdGU6ICdkYXR1bSB6YcSNZXRrYScsCisJZW5kRGF0ZTogJ2RhdHVtIGtvbmNhJywKKwljdXJyZW50RGF0ZTogJ3RyZW51dGVuIGRhdHVtJywKKwlhZnRlckRhdGU6ICdEYXR1bSBiaSBtb3JhbCBiaXRpIGlzdGkgYWxpIHBvIHtsYWJlbH0uJywKKwliZWZvcmVEYXRlOiAnRGF0dW0gYmkgbW9yYWwgYml0aSBpc3RpIGFsaSBwcmVkIHtsYWJlbH0uJywKKwlzdGFydE1vbnRoOiAnUHJvc2ltLCB2bmVzaXRlIHphxI1ldG5pIGRhdHVtJywKKwlzYW1lTW9udGg6ICdUYSBkdmEgZGF0dW1hIG1vcmF0YSBiaXRpIHYgaXN0ZW0gbWVzZWN1IC0gcHJlbWVuaXRpIG1vcmF0ZSBlbm8gYWxpIGRydWdvLicsCisJY3JlZGl0Y2FyZDogJ8WgdGV2aWxrYSBrcmVkaXRuZSBrYXJ0aWNlIG5pIHByYXZpbG5hLiBQcmV2ZXJpdGUgxaF0ZXZpbGtvIGFsaSBwb3NrdXNpdGUgxaFlIGVua3JhdC4gVm5lxaFlbmloIHtsZW5ndGh9IHpuYWtvdi4nCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS5zdi1TRS5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBTd2VkaXNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIE1hcnRpbiBMdW5kZ3JlbgorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuc3YtU0UuRGF0ZV0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCdzdi1TRScsICdEYXRlJywgeworCisJbW9udGhzOiBbJ2phbnVhcmknLCAnZmVicnVhcmknLCAnbWFycycsICdhcHJpbCcsICdtYWonLCAnanVuaScsICdqdWxpJywgJ2F1Z3VzdGknLCAnc2VwdGVtYmVyJywgJ29rdG9iZXInLCAnbm92ZW1iZXInLCAnZGVjZW1iZXInXSwKKwltb250aHNfYWJicjogWydqYW4nLCAnZmViJywgJ21hcicsICdhcHInLCAnbWFqJywgJ2p1bicsICdqdWwnLCAnYXVnJywgJ3NlcCcsICdva3QnLCAnbm92JywgJ2RlYyddLAorCWRheXM6IFsnc8O2bmRhZycsICdtw6VuZGFnJywgJ3Rpc2RhZycsICdvbnNkYWcnLCAndG9yc2RhZycsICdmcmVkYWcnLCAnbMO2cmRhZyddLAorCWRheXNfYWJicjogWydzw7ZuJywgJ23DpW4nLCAndGlzJywgJ29ucycsICd0b3InLCAnZnJlJywgJ2zDtnInXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBZWVlZLU1NLURECisJZGF0ZU9yZGVyOiBbJ3llYXInLCAnbW9udGgnLCAnZGF0ZSddLAorCXNob3J0RGF0ZTogJyVZLSVtLSVkJywKKwlzaG9ydFRpbWU6ICclSDolTScsCisJQU06ICcnLAorCVBNOiAnJywKKwlmaXJzdERheU9mV2VlazogMSwKKworCS8vIERhdGUuRXh0cmFzCisJb3JkaW5hbDogJycsCisKKwlsZXNzVGhhbk1pbnV0ZUFnbzogJ21pbmRyZSDDpG4gZW4gbWludXQgc2VkYW4nLAorCW1pbnV0ZUFnbzogJ3VuZ2Vmw6RyIGVuIG1pbnV0IHNlZGFuJywKKwltaW51dGVzQWdvOiAne2RlbHRhfSBtaW51dGVyIHNlZGFuJywKKwlob3VyQWdvOiAndW5nZWbDpHIgZW4gdGltbWUgc2VkYW4nLAorCWhvdXJzQWdvOiAndW5nZWbDpHIge2RlbHRhfSB0aW1tYXIgc2VkYW4nLAorCWRheUFnbzogJzEgZGFnIHNlZGFuJywKKwlkYXlzQWdvOiAne2RlbHRhfSBkYWdhciBzZWRhbicsCisKKwlsZXNzVGhhbk1pbnV0ZVVudGlsOiAnbWluZHJlIMOkbiBlbiBtaW51dCBzZWRhbicsCisJbWludXRlVW50aWw6ICd1bmdlZsOkciBlbiBtaW51dCBzZWRhbicsCisJbWludXRlc1VudGlsOiAne2RlbHRhfSBtaW51dGVyIHNlZGFuJywKKwlob3VyVW50aWw6ICd1bmdlZsOkciBlbiB0aW1tZSBzZWRhbicsCisJaG91cnNVbnRpbDogJ3VuZ2Vmw6RyIHtkZWx0YX0gdGltbWFyIHNlZGFuJywKKwlkYXlVbnRpbDogJzEgZGFnIHNlZGFuJywKKwlkYXlzVW50aWw6ICd7ZGVsdGF9IGRhZ2FyIHNlZGFuJworCit9KTsKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuc3YtU0UuRm9ybS5WYWxpZGF0b3IKKworZGVzY3JpcHRpb246IEZvcm0gVmFsaWRhdG9yIG1lc3NhZ2VzIGZvciBTd2VkaXNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIE1hcnRpbiBMdW5kZ3JlbgorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuc3YtU0UuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnc3YtU0UnLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAnRsOkbHRldCDDpHIgb2JsaWdhdG9yaXNrdC4nLAorCW1pbkxlbmd0aDogJ0FuZ2UgbWluc3Qge21pbkxlbmd0aH0gdGVja2VuIChkdSBhbmdhdiB7bGVuZ3RofSB0ZWNrZW4pLicsCisJbWF4TGVuZ3RoOiAnQW5nZSBow7Znc3Qge21heExlbmd0aH0gdGVja2VuIChkdSBhbmdhdiB7bGVuZ3RofSB0ZWNrZW4pLiAnLAorCWludGVnZXI6ICdBbmdlIGV0dCBoZWx0YWwgaSBmw6RsdGV0LiBUYWwgbWVkIGRlY2ltYWxlciAodC5leC4gMSwyNSkgw6RyIGludGUgdGlsbMOldG5hLicsCisJbnVtZXJpYzogJ0FuZ2UgZW5kYXN0IG51bWVyaXNrYSB2w6RyZGVuIGkgZGV0dGEgZsOkbHQgKHQuZXguICIxIiBlbGxlciAiMS4xIiBlbGxlciAiLTEiIGVsbGVyICItMSwxIikuJywKKwlkaWdpdHM6ICdBbnbDpG5kIGVuZGFzdCBzaWZmcm9yIG9jaCBza2lsamV0ZWNrZW4gaSBkZXR0YSBmw6RsdCAodGlsbCBleGVtcGVsIGV0dCB0ZWxlZm9ubnVtbWVyIG1lZCBiaW5kZXN0cmVjayB0aWxsw6V0ZXQpLicsCisJYWxwaGE6ICdBbnbDpG5kIGVuZGFzdCBib2tzdMOkdmVyIChhLcO2KSBpIGRldHRhIGbDpGx0LiBJbmdhIG1lbGxhbnNsYWcgZWxsZXIgYW5kcmEgdGVja2VuIMOkciB0aWxsw6V0bmEuJywKKwlhbHBoYW51bTogJ0FudsOkbmQgZW5kYXN0IGJva3N0w6R2ZXIgKGEtw7YpIG9jaCBzaWZmcm9yICgwLTkpIGkgZGV0dGEgZsOkbHQuIEluZ2EgbWVsbGFuc2xhZyBlbGxlciBhbmRyYSB0ZWNrZW4gw6RyIHRpbGzDpXRuYS4nLAorCWRhdGVTdWNoQXM6ICdBbmdlIGV0dCBnaWx0aWd0IGRhdHVtIHNvbSB0LmV4LiB7ZGF0ZX0nLAorCWRhdGVJbkZvcm1hdE1EWTogJ0FuZ2UgZXR0IGdpbHRpZ3QgZGF0dW0gc29tIHQuZXguIFlZWVktTU0tREQgKGkuZS4gIjE5OTktMTItMzEiKScsCisJZW1haWw6ICdBbmdlIGVuIGdpbHRpZyBlLXBvc3RhZHJlc3MuIFRpbGwgZXhlbXBlbCAiZXJpa0Bkb21haW4uY29tIi4nLAorCXVybDogJ0FuZ2UgZW4gZ2lsdGlnIHdlYmJhZHJlc3Mgc29tIGh0dHA6Ly93d3cuZXhhbXBsZS5jb20uJywKKwljdXJyZW5jeURvbGxhcjogJ0FuZ2UgZW4gZ2lsdGlnIGJlbG9wcC4gRXhlbXBlbHZpcyAxMDAsMDAuJywKKwlvbmVSZXF1aXJlZDogJ1bDpG5saWdlbiBhbmdlIG1pbnN0IGV0dCBhdiBkZXNzYSBhbHRlcm5hdGl2LicsCisJZXJyb3JQcmVmaXg6ICdGZWw6ICcsCisJd2FybmluZ1ByZWZpeDogJ1Zhcm5pbmc6ICcsCisKKwkvLyBGb3JtLlZhbGlkYXRvci5FeHRyYXMKKwlub1NwYWNlOiAnRGV0IGbDpXIgaW50ZSBmaW5uYXMgbsOlZ3JhIG1lbGxhbnNsYWcgaSBkZXR0YSBmw6RsdC4nLAorCXJlcUNoa0J5Tm9kZTogJ0luZ2Egb2JqZWt0IMOkciB2YWxkYS4nLAorCXJlcXVpcmVkQ2hrOiAnRGV0dGEgw6RyIGV0dCBvYmxpZ2F0b3Jpc2t0IGbDpGx0LicsCisJcmVxQ2hrQnlOYW1lOiAnVsOkbGogZW4ge2xhYmVsfS4nLAorCW1hdGNoOiAnRGV0dGEgZsOkbHQgbcOlc3RlIG1hdGNoYSB7bWF0Y2hOYW1lfScsCisJc3RhcnREYXRlOiAnc3RhcnRkYXR1bWV0JywKKwllbmREYXRlOiAnc2x1dGRhdHVtJywKKwljdXJyZW50RGF0ZTogJ2RhZ2VucyBkYXR1bScsCisJYWZ0ZXJEYXRlOiAnRGF0dW1ldCBiw7ZyIHZhcmEgc2FtbWEgZWxsZXIgc2VuYXJlIMOkbiB7bGFiZWx9LicsCisJYmVmb3JlRGF0ZTogJ0RhdHVtZXQgYsO2ciB2YXJhIHNhbW1hIGVsbGVyIHRpZGlnYXJlIMOkbiB7bGFiZWx9LicsCisJc3RhcnRNb250aDogJ1bDpGxqIGVuIHN0YXJ0IG3DpW5hZCcsCisJc2FtZU1vbnRoOiAnRGVzc2EgdHbDpSBkYXR1bSBtw6VzdGUgdmFyYSBpIHNhbW1hIG3DpW5hZCAtIGR1IG3DpXN0ZSDDpG5kcmEgZGV0IGVuYSBlbGxlciBkZXQgYW5kcmEuJworCit9KTsKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuc3YtU0UuTnVtYmVyCisKK2Rlc2NyaXB0aW9uOiBOdW1iZXIgbWVzc2FnZXMgZm9yIFN3ZWRpc2guCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQXJpYW4gU3RvbHdpamsKKyAgLSBNYXJ0aW4gTHVuZGdyZW4KKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisgIC0gTG9jYWxlLkVVLk51bWJlcgorCitwcm92aWRlczogW0xvY2FsZS5zdi1TRS5OdW1iZXJdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgnc3YtU0UnLCAnTnVtYmVyJywgeworCisJY3VycmVuY3k6IHsKKwkJcHJlZml4OiAnU0VLICcKKwl9CisKK30pLmluaGVyaXQoJ0VVJywgJ051bWJlcicpOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS50ci1UUi5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBUdXJraXNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEZhcnVrIENhbiBCaWxpcgorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUudHItVFIuRGF0ZV0KKworLi4uCisqLworCitMb2NhbGUuZGVmaW5lKCd0ci1UUicsICdEYXRlJywgeworCisJbW9udGhzOiBbJ09jYWsnLCAnxZ51YmF0JywgJ01hcnQnLCAnTmlzYW4nLCAnTWF5xLFzJywgJ0hhemlyYW4nLCAnVGVtbXV6JywgJ0HEn3VzdG9zJywgJ0V5bMO8bCcsICdFa2ltJywgJ0thc8SxbScsICdBcmFsxLFrJ10sCisJbW9udGhzX2FiYnI6IFsnT2NhJywgJ8WedWInLCAnTWFyJywgJ05pcycsICdNYXknLCAnSGF6JywgJ1RlbScsICdBxJ91JywgJ0V5bCcsICdFa2knLCAnS2FzJywgJ0FyYSddLAorCWRheXM6IFsnUGF6YXInLCAnUGF6YXJ0ZXNpJywgJ1NhbMSxJywgJ8OHYXLFn2FtYmEnLCAnUGVyxZ9lbWJlJywgJ0N1bWEnLCAnQ3VtYXJ0ZXNpJ10sCisJZGF5c19hYmJyOiBbJ1BhJywgJ1B6dCcsICdTYScsICfDh2EnLCAnUGUnLCAnQ3UnLCAnQ210J10sCisKKwkvLyBDdWx0dXJlJ3MgZGF0ZSBvcmRlcjogTU0vREQvWVlZWQorCWRhdGVPcmRlcjogWydkYXRlJywgJ21vbnRoJywgJ3llYXInXSwKKwlzaG9ydERhdGU6ICclZC8lbS8lWScsCisJc2hvcnRUaW1lOiAnJUguJU0nLAorCUFNOiAnQU0nLAorCVBNOiAnUE0nLAorCWZpcnN0RGF5T2ZXZWVrOiAxLAorCisJLy8gRGF0ZS5FeHRyYXMKKwlvcmRpbmFsOiAnJywKKworCWxlc3NUaGFuTWludXRlQWdvOiAnYmlyIGRha2lrYWRhbiDDtm5jZScsCisJbWludXRlQWdvOiAneWFrbGHFn8SxayBiaXIgZGFraWthIMO2bmNlJywKKwltaW51dGVzQWdvOiAne2RlbHRhfSBkYWtpa2Egw7ZuY2UnLAorCWhvdXJBZ286ICdiaXIgc2FhdCBrYWRhciDDtm5jZScsCisJaG91cnNBZ286ICd7ZGVsdGF9IHNhYXQga2FkYXIgw7ZuY2UnLAorCWRheUFnbzogJ2JpciBnw7xuIMO2bmNlJywKKwlkYXlzQWdvOiAne2RlbHRhfSBnw7xuIMO2bmNlJywKKwl3ZWVrQWdvOiAnYmlyIGhhZnRhIMO2bmNlJywKKwl3ZWVrc0FnbzogJ3tkZWx0YX0gaGFmdGEgw7ZuY2UnLAorCW1vbnRoQWdvOiAnYmlyIGF5IMO2bmNlJywKKwltb250aHNBZ286ICd7ZGVsdGF9IGF5IMO2bmNlJywKKwl5ZWFyQWdvOiAnYmlyIHnEsWwgw7ZuY2UnLAorCXllYXJzQWdvOiAne2RlbHRhfSB5xLFsIMO2bmNlJywKKworCWxlc3NUaGFuTWludXRlVW50aWw6ICdiaXIgZGFraWthZGFuIGF6IHNvbnJhJywKKwltaW51dGVVbnRpbDogJ2JpciBkYWtpa2Ega2FkYXIgc29ucmEnLAorCW1pbnV0ZXNVbnRpbDogJ3tkZWx0YX0gZGFraWthIHNvbnJhJywKKwlob3VyVW50aWw6ICdiaXIgc2FhdCBrYWRhciBzb25yYScsCisJaG91cnNVbnRpbDogJ3tkZWx0YX0gc2FhdCBrYWRhciBzb25yYScsCisJZGF5VW50aWw6ICdiaXIgZ8O8biBzb25yYScsCisJZGF5c1VudGlsOiAne2RlbHRhfSBnw7xuIHNvbnJhJywKKwl3ZWVrVW50aWw6ICdiaXIgaGFmdGEgc29ucmEnLAorCXdlZWtzVW50aWw6ICd7ZGVsdGF9IGhhZnRhIHNvbnJhJywKKwltb250aFVudGlsOiAnYmlyIGF5IHNvbnJhJywKKwltb250aHNVbnRpbDogJ3tkZWx0YX0gYXkgc29ucmEnLAorCXllYXJVbnRpbDogJ2JpciB5xLFsIHNvbnJhJywKKwl5ZWFyc1VudGlsOiAne2RlbHRhfSB5xLFsIHNvbnJhJworCit9KTsKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUudHItVFIuRm9ybS5WYWxpZGF0b3IKKworZGVzY3JpcHRpb246IEZvcm0gVmFsaWRhdG9yIG1lc3NhZ2VzIGZvciBUdXJraXNoLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEZhcnVrIENhbiBCaWxpcgorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUudHItVFIuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgndHItVFInLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAnQnUgYWxhbiB6b3J1bmx1LicsCisJbWluTGVuZ3RoOiAnTMO8dGZlbiBlbiBheiB7bWluTGVuZ3RofSBrYXJha3RlciBnaXJpbiAoc2l6IHtsZW5ndGh9IGthcmFrdGVyIGdpcmRpbml6KS4nLAorCW1heExlbmd0aDogJ0zDvHRmZW4gZW4gZmF6bGEge21heExlbmd0aH0ga2FyYWt0ZXIgZ2lyaW4gKHNpeiB7bGVuZ3RofSBrYXJha3RlciBnaXJkaW5peikuJywKKwlpbnRlZ2VyOiAnTMO8dGZlbiBidSBhbGFuYSBzYWRlY2UgdGFtc2F5xLEgZ2lyaW4uIE9uZGFsxLFrbMSxIHNhecSxbGFyICjDtnI6IDEuMjUpIGt1bGxhbsSxbGFtYXouJywKKwludW1lcmljOiAnTMO8dGZlbiBidSBhbGFuYSBzYWRlY2Ugc2F5xLFzYWwgZGXEn2VyIGdpcmluICjDtnI6ICIxIiwgIjEuMSIsICItMSIgeWEgZGEgIi0xLjEiKS4nLAorCWRpZ2l0czogJ0zDvHRmZW4gYnUgYWxhbmEgc2FkZWNlIHNhecSxc2FsIGRlxJ9lciB2ZSBub2t0YWxhbWEgacWfYXJldGkgZ2lyaW4gKMO2cm5lxJ9pbiwgbm9rdGEgdmUgdGlyZSBpw6dlcmVuIGJpciB0ZWxlZm9uIG51bWFyYXPEsSBrdWxsYW7EsWxhYmlsaXIpLicsCisJYWxwaGE6ICdMw7x0ZmVuIGJ1IGFsYW5kYSB5YWxuxLF6Y2EgaGFyZiBrdWxsYW7EsW4uIEJvxZ9sdWsgdmUgZGnEn2VyIGthcmFrdGVybGVyIGt1bGxhbsSxbGFtYXouJywKKwlhbHBoYW51bTogJ0zDvHRmZW4gYnUgYWxhbmRhIHNhZGVjZSBoYXJmIHZlIHJha2FtIGt1bGxhbsSxbi4gQm/Fn2x1ayB2ZSBkacSfZXIga2FyYWt0ZXJsZXIga3VsbGFuxLFsYW1hei4nLAorCWRhdGVTdWNoQXM6ICdMw7x0ZmVuIGdlw6dlcmxpIGJpciB0YXJpaCBnaXJpbiAow5ZyOiB7ZGF0ZX0pJywKKwlkYXRlSW5Gb3JtYXRNRFk6ICdMw7x0ZmVuIGdlw6dlcmxpIGJpciB0YXJpaCBnaXJpbiAoR0cvQUEvWVlZWSwgw7ZyOiAiMzEvMTIvMTk5OSIpJywKKwllbWFpbDogJ0zDvHRmZW4gZ2XDp2VybGkgYmlyIGVtYWlsIGFkcmVzaSBnaXJpbi4gw5ZyOiAia2VtYWxAZXRpa2FuLmNvbSIuJywKKwl1cmw6ICdMw7x0ZmVuIGdlw6dlcmxpIGJpciBVUkwgZ2lyaW4uIMOWcjogaHR0cDovL3d3dy5leGFtcGxlLmNvbS4nLAorCWN1cnJlbmN5RG9sbGFyOiAnTMO8dGZlbiBnZcOnZXJsaSBiaXIgVEwgbWlrdGFyxLEgZ2lyaW4uIMOWcjogMTAwLDAwIFRMIC4nLAorCW9uZVJlcXVpcmVkOiAnTMO8dGZlbiBlbiBheiBiaXIgdGFuZXNpbmkgZG9sZHVydW4uJywKKwllcnJvclByZWZpeDogJ0hhdGE6ICcsCisJd2FybmluZ1ByZWZpeDogJ1V5YXLEsTogJywKKworCS8vIEZvcm0uVmFsaWRhdG9yLkV4dHJhcworCW5vU3BhY2U6ICdCdSBhbGFuZGEgYm/Fn2x1ayBrdWxsYW7EsWxhbWF6LicsCisJcmVxQ2hrQnlOb2RlOiAnSGnDp2JpciDDtsSfZSBzZcOnaWxtZW1pxZ8uJywKKwlyZXF1aXJlZENoazogJ0J1IGFsYW4gem9ydW5sdS4nLAorCXJlcUNoa0J5TmFtZTogJ0zDvHRmZW4gYmlyIHtsYWJlbH0gZ2lyaW4uJywKKwltYXRjaDogJ0J1IGFsYW4sIHttYXRjaE5hbWV9IGFsYW7EsXlsYSB1eXXFn21hbMSxJywKKwlzdGFydERhdGU6ICdiYcWfbGFuZ8Sxw6cgdGFyaWhpJywKKwllbmREYXRlOiAnYml0acWfIHRhcmloaScsCisJY3VycmVudERhdGU6ICdidWfDvG7DvG4gdGFyaWhpJywKKwlhZnRlckRhdGU6ICdUYXJpaCwge2xhYmVsfSB0YXJpaGl5bGUgYXluxLEgZ8O8biB5YSBkYSBvbmRhbiBzb25yYSBvbG1hbMSxZMSxci4nLAorCWJlZm9yZURhdGU6ICdUYXJpaCwge2xhYmVsfSB0YXJpaGl5bGUgYXluxLEgZ8O8biB5YSBkYSBvbmRhbiDDtm5jZSBvbG1hbMSxZMSxci4nLAorCXN0YXJ0TW9udGg6ICdMw7x0ZmVuIGJpciBiYcWfbGFuZ8Sxw6cgYXnEsSBzZcOnaW4nLAorCXNhbWVNb250aDogJ0J1IGlraSB0YXJpaCBheW7EsSBheWRhIG9sbWFsxLEgLSBiaXIgdGFuZXNpbmkgZGXEn2nFn3Rpcm1lbml6IGdlcmVraXlvci4nLAorCWNyZWRpdGNhcmQ6ICdHaXJkacSfaW5peiBrcmVkaSBrYXJ0xLEgbnVtYXJhc8SxIGdlw6dlcnNpei4gTMO8dGZlbiBrb250cm9sIGVkaXAgdGVrcmFyIGRlbmV5aW4uIHtsZW5ndGh9IGhhbmUgZ2lyaWxkaS4nCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS50ci1UUi5OdW1iZXIKKworZGVzY3JpcHRpb246IE51bWJlciBtZXNzYWdlcyBmb3IgVHVya2lzaC4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBGYXJ1ayBDYW4gQmlsaXIKKworcmVxdWlyZXM6CisgIC0gTG9jYWxlCisgIC0gTG9jYWxlLkVVLk51bWJlcgorCitwcm92aWRlczogW0xvY2FsZS50ci1UUi5OdW1iZXJdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgndHItVFInLCAnTnVtYmVyJywgeworCisJY3VycmVuY3k6IHsKKwkJZGVjaW1hbHM6IDAsCisJCXN1ZmZpeDogJyBUTCcKKwl9CisKK30pLmluaGVyaXQoJ0VVJywgJ051bWJlcicpOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS51ay1VQS5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBVa3JhaW5pYW4gKHV0Zi04KS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBTbGlrCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorCitwcm92aWRlczogW0xvY2FsZS51ay1VQS5EYXRlXQorCisuLi4KKyovCisKKyhmdW5jdGlvbigpeworCit2YXIgcGx1cmFsaXplID0gZnVuY3Rpb24obiwgb25lLCBmZXcsIG1hbnksIG90aGVyKXsKKwl2YXIgZCA9IChuIC8gMTApLnRvSW50KCksCisJCXogPSBuICUgMTAsCisJCXMgPSAobiAvIDEwMCkudG9JbnQoKTsKKworCWlmIChkID09IDEgJiYgbiA+IDEwKSByZXR1cm4gbWFueTsKKwlpZiAoeiA9PSAxKSByZXR1cm4gb25lOworCWlmICh6ID4gMCAmJiB6IDwgNSkgcmV0dXJuIGZldzsKKwlyZXR1cm4gbWFueTsKK307CisKK0xvY2FsZS5kZWZpbmUoJ3VrLVVBJywgJ0RhdGUnLCB7CisKKwltb250aHM6IFsn0KHRltGH0LXQvdGMJywgJ9Cb0Y7RgtC40LknLCAn0JHQtdGA0LXQt9C10L3RjCcsICfQmtCy0ZbRgtC10L3RjCcsICfQotGA0LDQstC10L3RjCcsICfQp9C10YDQstC10L3RjCcsICfQm9C40L/QtdC90YwnLCAn0KHQtdGA0L/QtdC90YwnLCAn0JLQtdGA0LXRgdC10L3RjCcsICfQltC+0LLRgtC10L3RjCcsICfQm9C40YHRgtC+0L/QsNC0JywgJ9CT0YDRg9C00LXQvdGMJ10sCisJbW9udGhzX2FiYnI6IFsn0KHRltGHJywgJ9Cb0Y7RgicsICfQkdC10YAnLCAn0JrQstGW0YInLCAn0KLRgNCw0LInLCAn0KfQtdGA0LInLCAn0JvQuNC/JywgJ9Ch0LXRgNC/JywgJ9CS0LXRgCcsICfQltC+0LLRgicsICfQm9C40YHRgicsICfQk9GA0YPQtCcgXSwKKwlkYXlzOiBbJ9Cd0LXQtNGW0LvRjycsICfQn9C+0L3QtdC00ZbQu9C+0LonLCAn0JLRltCy0YLQvtGA0L7QuicsICfQodC10YDQtdC00LAnLCAn0KfQtdGC0LLQtdGAJywgItCfJ9GP0YLQvdC40YbRjyIsICfQodGD0LHQvtGC0LAnXSwKKwlkYXlzX2FiYnI6IFsn0J3QtCcsICfQn9C9JywgJ9CS0YInLCAn0KHRgCcsICfQp9GCJywgJ9Cf0YInLCAn0KHQsSddLAorCisJLy8gQ3VsdHVyZSdzIGRhdGUgb3JkZXI6IEREL01NL1lZWVkKKwlkYXRlT3JkZXI6IFsnZGF0ZScsICdtb250aCcsICd5ZWFyJ10sCisJc2hvcnREYXRlOiAnJWQvJW0vJVknLAorCXNob3J0VGltZTogJyVIOiVNJywKKwlBTTogJ9C00L4g0L/QvtC70YPQtNC90Y8nLAorCVBNOiAn0L/QviDQv9C+0LvRg9C00L3RjicsCisJZmlyc3REYXlPZldlZWs6IDEsCisKKwkvLyBEYXRlLkV4dHJhcworCW9yZGluYWw6ICcnLAorCisJbGVzc1RoYW5NaW51dGVBZ286ICfQvNC10L3RjNGI0LUg0YXQstC40LvQuNC90Lgg0YLQvtC80YMnLAorCW1pbnV0ZUFnbzogJ9GF0LLQuNC70LjQvdGDINGC0L7QvNGDJywKKwltaW51dGVzQWdvOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAne2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAn0YXQstC40LvQuNC90YMnLCAn0YXQstC40LvQuNC90LgnLCAn0YXQstC40LvQuNC9JykgKyAnINGC0L7QvNGDJzsgfSwKKwlob3VyQWdvOiAn0LPQvtC00LjQvdGDINGC0L7QvNGDJywKKwlob3Vyc0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3tkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ9Cz0L7QtNC40L3RgycsICfQs9C+0LTQuNC90LgnLCAn0LPQvtC00LjQvScpICsgJyDRgtC+0LzRgyc7IH0sCisJZGF5QWdvOiAn0LLRh9C+0YDQsCcsCisJZGF5c0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3tkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ9C00LXQvdGMJywgJ9C00L3RjycsICfQtNC90ZbQsicpICsgJyDRgtC+0LzRgyc7IH0sCisJd2Vla0FnbzogJ9GC0LjQttC00LXQvdGMINGC0L7QvNGDJywKKwl3ZWVrc0FnbzogZnVuY3Rpb24oZGVsdGEpeyByZXR1cm4gJ3tkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ9GC0LjQttC00LXQvdGMJywgJ9GC0LjQttC90ZYnLCAn0YLQuNC20L3RltCyJykgKyAnINGC0L7QvNGDJzsgfSwKKwltb250aEFnbzogJ9C80ZbRgdGP0YbRjCDRgtC+0LzRgycsCisJbW9udGhzQWdvOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAne2RlbHRhfSAnICsgcGx1cmFsaXplKGRlbHRhLCAn0LzRltGB0Y/RhtGMJywgJ9C80ZbRgdGP0YbRlicsICfQvNGW0YHRj9GG0ZbQsicpICsgJyDRgtC+0LzRgyc7IH0sCisJeWVhckFnbzogJ9GA0ZbQuiDRgtC+0LzRgycsCisJeWVhcnNBZ286IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICd7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICfRgNGW0LonLCAn0YDQvtC60LgnLCAn0YDQvtC60ZbQsicpICsgJyDRgtC+0LzRgyc7IH0sCisKKwlsZXNzVGhhbk1pbnV0ZVVudGlsOiAn0LfQsCDQvNC40YLRjCcsCisJbWludXRlVW50aWw6ICfRh9C10YDQtdC3INGF0LLQuNC70LjQvdGDJywKKwltaW51dGVzVW50aWw6IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICfRh9C10YDQtdC3IHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ9GF0LLQuNC70LjQvdGDJywgJ9GF0LLQuNC70LjQvdC4JywgJ9GF0LLQuNC70LjQvScpOyB9LAorCWhvdXJVbnRpbDogJ9GH0LXRgNC10Lcg0LPQvtC00LjQvdGDJywKKwlob3Vyc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAn0YfQtdGA0LXQtyB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICfQs9C+0LTQuNC90YMnLCAn0LPQvtC00LjQvdC4JywgJ9Cz0L7QtNC40L0nKTsgfSwKKwlkYXlVbnRpbDogJ9C30LDQstGC0YDQsCcsCisJZGF5c1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAn0YfQtdGA0LXQtyB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICfQtNC10L3RjCcsICfQtNC90Y8nLCAn0LTQvdGW0LInKTsgfSwKKwl3ZWVrVW50aWw6ICfRh9C10YDQtdC3INGC0LjQttC00LXQvdGMJywKKwl3ZWVrc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAn0YfQtdGA0LXQtyB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICfRgtC40LbQtNC10L3RjCcsICfRgtC40LbQvdGWJywgJ9GC0LjQttC90ZbQsicpOyB9LAorCW1vbnRoVW50aWw6ICfRh9C10YDQtdC3INC80ZbRgdGP0YbRjCcsCisJbW9udGhlc1VudGlsOiBmdW5jdGlvbihkZWx0YSl7IHJldHVybiAn0YfQtdGA0LXQtyB7ZGVsdGF9ICcgKyBwbHVyYWxpemUoZGVsdGEsICfQvNGW0YHRj9GG0YwnLCAn0LzRltGB0Y/RhtGWJywgJ9C80ZbRgdGP0YbRltCyJyk7IH0sCisJeWVhclVudGlsOiAn0YfQtdGA0LXQtyDRgNGW0LonLAorCXllYXJzVW50aWw6IGZ1bmN0aW9uKGRlbHRhKXsgcmV0dXJuICfRh9C10YDQtdC3IHtkZWx0YX0gJyArIHBsdXJhbGl6ZShkZWx0YSwgJ9GA0ZbQuicsICfRgNC+0LrQuCcsICfRgNC+0LrRltCyJyk7IH0KKworfSk7CisKK30pKCk7CisKKy8qCistLS0KKworbmFtZTogTG9jYWxlLnVrLVVBLkZvcm0uVmFsaWRhdG9yCisKK2Rlc2NyaXB0aW9uOiBGb3JtIFZhbGlkYXRvciBtZXNzYWdlcyBmb3IgVWtyYWluaWFuICh1dGYtOCkuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gU2xpaworCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUudWstVUEuRm9ybS5WYWxpZGF0b3JdCisKKy4uLgorKi8KKworTG9jYWxlLmRlZmluZSgndWstVUEnLCAnRm9ybVZhbGlkYXRvcicsIHsKKworCXJlcXVpcmVkOiAn0KbQtSDQv9C+0LvQtSDQv9C+0LLQuNC90L3QtSDQsdGD0YLQuCDQt9Cw0L/QvtCy0L3QtdC90LjQvC4nLAorCW1pbkxlbmd0aDogJ9CS0LLQtdC00ZbRgtGMINGF0L7Rh9CwINCxIHttaW5MZW5ndGh9INGB0LjQvNCy0L7Qu9GW0LIgKNCS0Lgg0LLQstC10LvQuCB7bGVuZ3RofSkuJywKKwltYXhMZW5ndGg6ICfQmtGW0LvRjNC60ZbRgdGC0Ywg0YHQuNC80LLQvtC70ZbQsiDQvdC1INC80L7QttC1INCx0YPRgtC4INCx0ZbQu9GM0YjQtSB7bWF4TGVuZ3RofSAo0JLQuCDQstCy0LXQu9C4IHtsZW5ndGh9KS4nLAorCWludGVnZXI6ICfQktCy0LXQtNGW0YLRjCDQsiDRhtC1INC/0L7Qu9C1INGH0LjRgdC70L4uINCU0YDQvtCx0L7QstGWINGH0LjRgdC70LAgKNC90LDQv9GA0LjQutC70LDQtCAxLjI1KSDQvdC1INC00L7Qt9Cy0L7Qu9C10L3Rli4nLAorCW51bWVyaWM6ICfQktCy0LXQtNGW0YLRjCDQsiDRhtC1INC/0L7Qu9C1INGH0LjRgdC70L4gKNC90LDQv9GA0LjQutC70LDQtCAiMSIg0LDQsdC+ICIxLjEiLCDQsNCx0L4gIi0xIiwg0LDQsdC+ICItMS4xIikuJywKKwlkaWdpdHM6ICfQkiDRhtGM0L7QvNGDINC/0L7Qu9GWINCy0Lgg0LzQvtC20LXRgtC1INCy0LjQutC+0YDQuNGB0YLQvtCy0YPQstCw0YLQuCDQu9C40YjQtSDRhtC40YTRgNC4INGWINC30L3QsNC60Lgg0L/Rg9C90LrRgtGW0LDRhtGW0ZcgKNC90LDQv9GA0LjQutC70LDQtCwg0YLQtdC70LXRhNC+0L3QvdC40Lkg0L3QvtC80LXRgCDQtyDQt9C90LDQutCw0LzQuCDQtNC10YTRltC30YMg0LDQsdC+INC3INC60YDQsNC/0LrQsNC80LgpLicsCisJYWxwaGE6ICfQkiDRhtGM0L7QvNGDINC/0L7Qu9GWINC80L7QttC90LAg0LLQuNC60L7RgNC40YHRgtC+0LLRg9Cy0LDRgtC4INC70LjRiNC1INC70LDRgtC40L3RgdGM0LrRliDQu9GW0YLQtdGA0LggKGEteikuINCf0YDQvtCx0ZbQu9C4INGWINGW0L3RiNGWINGB0LjQvNCy0L7Qu9C4INC30LDQsdC+0YDQvtC90LXQvdGWLicsCisJYWxwaGFudW06ICfQkiDRhtGM0L7QvNGDINC/0L7Qu9GWINC80L7QttC90LAg0LLQuNC60L7RgNC40YHRgtC+0LLRg9Cy0LDRgtC4INC70LjRiNC1INC70LDRgtC40L3RgdGM0LrRliDQu9GW0YLQtdGA0LggKGEteikg0ZYg0YbQuNGE0YDQuCAoMC05KS4g0J/RgNC+0LHRltC70Lgg0ZYg0ZbQvdGI0ZYg0YHQuNC80LLQvtC70Lgg0LfQsNCx0L7RgNC+0L3QtdC90ZYuJywKKwlkYXRlU3VjaEFzOiAn0JLQstC10LTRltGC0Ywg0LrQvtGA0LXQutGC0L3RgyDQtNCw0YLRgyB7ZGF0ZX0uJywKKwlkYXRlSW5Gb3JtYXRNRFk6ICfQktCy0LXQtNGW0YLRjCDQtNCw0YLRgyDQsiDRhNC+0YDQvNCw0YLRliDQnNCcL9CU0JQv0KDQoNCg0KAgKNC90LDQv9GA0LjQutC70LDQtCAiMTIvMzEvMjAwOSIpLicsCisJZW1haWw6ICfQktCy0LXQtNGW0YLRjCDQutC+0YDQtdC60YLQvdGDINCw0LTRgNC10YHRgyDQtdC70LXQutGC0YDQvtC90L3QvtGXINC/0L7RiNGC0LggKNC90LDQv9GA0LjQutC70LDQtCAibmFtZUBkb21haW4uY29tIikuJywKKwl1cmw6ICfQktCy0LXQtNGW0YLRjCDQutC+0YDQtdC60YLQvdC1INGW0L3RgtC10YDQvdC10YIt0L/QvtGB0LjQu9Cw0L3QvdGPICjQvdCw0L/RgNC40LrQu9Cw0LQgaHR0cDovL3d3dy5leGFtcGxlLmNvbSkuJywKKwljdXJyZW5jeURvbGxhcjogJ9CS0LLQtdC00ZbRgtGMINGB0YPQvNGDINCyINC00L7Qu9Cw0YDQsNGFICjQvdCw0L/RgNC40LrQu9Cw0LQgIiQxMDAuMDAiKS4nLAorCW9uZVJlcXVpcmVkOiAn0JfQsNC/0L7QstC90ZbRgtGMINC+0LTQvdC1INC3INC/0L7Qu9GW0LIuJywKKwllcnJvclByZWZpeDogJ9Cf0L7QvNC40LvQutCwOiAnLAorCXdhcm5pbmdQcmVmaXg6ICfQo9Cy0LDQs9CwOiAnLAorCisJbm9TcGFjZTogJ9Cf0YDQvtCx0ZbQu9C4INC30LDQsdC+0YDQvtC90LXQvdGWLicsCisJcmVxQ2hrQnlOb2RlOiAn0J3QtSDQstGW0LTQvNGW0YfQtdC90L4g0LbQvtC00L3QvtCz0L4g0LLQsNGA0ZbQsNC90YLRgy4nLAorCXJlcXVpcmVkQ2hrOiAn0KbQtSDQv9C+0LvQtSDQv9C+0LLQuNC90L3QtSDQsdGD0YLQuCDQstGW0LzRltGH0LXQvdC40LwuJywKKwlyZXFDaGtCeU5hbWU6ICfQkdGD0LTRjCDQu9Cw0YHQutCwLCDQstGW0LTQvNGW0YLRjNGC0LUge2xhYmVsfS4nLAorCW1hdGNoOiAn0KbQtSDQv9C+0LvQtSDQv9C+0LLQuNC90L3QviDQstGW0LTQv9C+0LLRltC00LDRgtC4IHttYXRjaE5hbWV9JywKKwlzdGFydERhdGU6ICfQv9C+0YfQsNGC0LrQvtCy0LAg0LTQsNGC0LAnLAorCWVuZERhdGU6ICfQutGW0L3RhtC10LLQsCDQtNCw0YLQsCcsCisJY3VycmVudERhdGU6ICfRgdGM0L7Qs9C+0LTQvdGW0YjQvdGPINC00LDRgtCwJywKKwlhZnRlckRhdGU6ICfQptGPINC00LDRgtCwINC/0L7QstC40L3QvdCwINCx0YPRgtC4INGC0LDQutC+0Y4g0LYsINCw0LHQviDQv9GW0LfQvdGW0YjQvtGOINC30LAge2xhYmVsfS4nLAorCWJlZm9yZURhdGU6ICfQptGPINC00LDRgtCwINC/0L7QstC40L3QvdCwINCx0YPRgtC4INGC0LDQutC+0Y4g0LYsINCw0LHQviDRgNCw0L3RltGI0L7RjiDQt9CwIHtsYWJlbH0uJywKKwlzdGFydE1vbnRoOiAn0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LLQuNCx0LXRgNGW0YLRjCDQv9C+0YfQsNGC0LrQvtCy0LjQuSDQvNGW0YHRj9GG0YwnLAorCXNhbWVNb250aDogJ9Cm0ZYg0LTQsNGC0Lgg0L/QvtCy0LjQvdC90ZYg0LLRltC00L3QvtGB0LjRgtC40YHRjCDQvtC00L3QvtCz0L4g0ZYg0YLQvtCz0L4g0LYg0LzRltGB0Y/RhtGPLiDQkdGD0LTRjCDQu9Cw0YHQutCwLCDQt9C80ZbQvdGW0YLRjCDQvtC00L3RgyDQtyDQvdC40YUuJywKKwljcmVkaXRjYXJkOiAn0J3QvtC80LXRgCDQutGA0LXQtNC40YLQvdC+0Zcg0LrQsNGA0YLQuCDQstCy0LXQtNC10L3QuNC5INC90LXQv9GA0LDQstC40LvRjNC90L4uINCR0YPQtNGMINC70LDRgdC60LAsINC/0LXRgNC10LLRltGA0YLQtSDQudC+0LPQvi4g0JLQstC10LTQtdC90L4ge2xlbmd0aH0g0YHQuNC80LLQvtC70ZbQsi4nCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS56aC1DSC5EYXRlCisKK2Rlc2NyaXB0aW9uOiBEYXRlIG1lc3NhZ2VzIGZvciBDaGluZXNlIChzaW1wbGlmaWVkIGFuZCB0cmFkaXRpb25hbCkuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gWU1pbmQgQ2hhbgorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKworcHJvdmlkZXM6IFtMb2NhbGUuemgtQ0guRGF0ZV0KKworLi4uCisqLworCisvLyBTaW1wbGlmaWVkIENoaW5lc2UKK0xvY2FsZS5kZWZpbmUoJ3poLUNIUycsICdEYXRlJywgeworCisJbW9udGhzOiBbJ+S4gOaciCcsICfkuozmnIgnLCAn5LiJ5pyIJywgJ+Wbm+aciCcsICfkupTmnIgnLCAn5YWt5pyIJywgJ+S4g+aciCcsICflhavmnIgnLCAn5Lmd5pyIJywgJ+WNgeaciCcsICfljYHkuIDmnIgnLCAn5Y2B5LqM5pyIJ10sCisJbW9udGhzX2FiYnI6IFsn5LiAJywgJ+S6jCcsICfkuIknLCAn5ZubJywgJ+S6lCcsICflha0nLCAn5LiDJywgJ+WFqycsICfkuZ0nLCAn5Y2BJywgJ+WNgeS4gCcsICfljYHkuownXSwKKwlkYXlzOiBbJ+aYn+acn+aXpScsICfmmJ/mnJ/kuIAnLCAn5pif5pyf5LqMJywgJ+aYn+acn+S4iScsICfmmJ/mnJ/lm5snLCAn5pif5pyf5LqUJywgJ+aYn+acn+WFrSddLAorCWRheXNfYWJicjogWyfml6UnLCAn5LiAJywgJ+S6jCcsICfkuIknLCAn5ZubJywgJ+S6lCcsICflha0nXSwKKworCS8vIEN1bHR1cmUncyBkYXRlIG9yZGVyOiBZWVlZLU1NLURECisJZGF0ZU9yZGVyOiBbJ3llYXInLCAnbW9udGgnLCAnZGF0ZSddLAorCXNob3J0RGF0ZTogJyVZLSVtLSVkJywKKwlzaG9ydFRpbWU6ICclSTolTSVwJywKKwlBTTogJ0FNJywKKwlQTTogJ1BNJywKKwlmaXJzdERheU9mV2VlazogMSwKKworCS8vIERhdGUuRXh0cmFzCisJb3JkaW5hbDogJycsCisKKwlsZXNzVGhhbk1pbnV0ZUFnbzogJ+S4jeWIsDHliIbpkp/liY0nLAorCW1pbnV0ZUFnbzogJ+Wkp+e6pjHliIbpkp/liY0nLAorCW1pbnV0ZXNBZ286ICd7ZGVsdGF95YiG6ZKf5LmL5YmNJywKKwlob3VyQWdvOiAn5aSn57qmMeWwj+aXtuWJjScsCisJaG91cnNBZ286ICflpKfnuqZ7ZGVsdGF95bCP5pe25YmNJywKKwlkYXlBZ286ICcx5aSp5YmNJywKKwlkYXlzQWdvOiAne2RlbHRhfeWkqeWJjScsCisJd2Vla0FnbzogJzHmmJ/mnJ/liY0nLAorCXdlZWtzQWdvOiAne2RlbHRhfeaYn+acn+WJjScsCisJbW9udGhBZ286ICcx5Liq5pyI5YmNJywKKwltb250aHNBZ286ICd7ZGVsdGF95Liq5pyI5YmNJywKKwl5ZWFyQWdvOiAnMeW5tOWJjScsCisJeWVhcnNBZ286ICd7ZGVsdGF95bm05YmNJywKKworCWxlc3NUaGFuTWludXRlVW50aWw6ICfku47njrDlnKjlvIDlp4vkuI3liLAx5YiG6ZKfJywKKwltaW51dGVVbnRpbDogJ+S7jueOsOWcqOW8gOWni+e0hDHliIbpkp8nLAorCW1pbnV0ZXNVbnRpbDogJ+S7jueOsOWcqOW8gOWni+e6pntkZWx0YX3liIbpkp8nLAorCWhvdXJVbnRpbDogJ+S7jueOsOWcqOW8gOWnizHlsI/ml7YnLAorCWhvdXJzVW50aWw6ICfku47njrDlnKjlvIDlp4vnuqZ7ZGVsdGF95bCP5pe2JywKKwlkYXlVbnRpbDogJ+S7jueOsOWcqOW8gOWnizHlpKknLAorCWRheXNVbnRpbDogJ+S7jueOsOWcqOW8gOWni3tkZWx0YX3lpKknLAorCXdlZWtVbnRpbDogJ+S7jueOsOWcqOW8gOWnizHmmJ/mnJ8nLAorCXdlZWtzVW50aWw6ICfku47njrDlnKjlvIDlp4t7ZGVsdGF95pif5pyfJywKKwltb250aFVudGlsOiAn5LuO546w5Zyo5byA5aeL5LiA5Liq5pyIJywKKwltb250aHNVbnRpbDogJ+S7jueOsOWcqOW8gOWni3tkZWx0YX3kuKrmnIgnLAorCXllYXJVbnRpbDogJ+S7jueOsOWcqOW8gOWnizHlubQnLAorCXllYXJzVW50aWw6ICfku47njrDlnKjlvIDlp4t7ZGVsdGF95bm0JworCit9KTsKKworLy8gVHJhZGl0aW9uYWwgQ2hpbmVzZQorTG9jYWxlLmRlZmluZSgnemgtQ0hUJywgJ0RhdGUnLCB7CisKKwltb250aHM6IFsn5LiA5pyIJywgJ+S6jOaciCcsICfkuInmnIgnLCAn5Zub5pyIJywgJ+S6lOaciCcsICflha3mnIgnLCAn5LiD5pyIJywgJ+WFq+aciCcsICfkuZ3mnIgnLCAn5Y2B5pyIJywgJ+WNgeS4gOaciCcsICfljYHkuozmnIgnXSwKKwltb250aHNfYWJicjogWyfkuIAnLCAn5LqMJywgJ+S4iScsICflm5snLCAn5LqUJywgJ+WFrScsICfkuIMnLCAn5YWrJywgJ+S5nScsICfljYEnLCAn5Y2B5LiAJywgJ+WNgeS6jCddLAorCWRheXM6IFsn5pif5pyf5pelJywgJ+aYn+acn+S4gCcsICfmmJ/mnJ/kuownLCAn5pif5pyf5LiJJywgJ+aYn+acn+WbmycsICfmmJ/mnJ/kupQnLCAn5pif5pyf5YWtJ10sCisJZGF5c19hYmJyOiBbJ+aXpScsICfkuIAnLCAn5LqMJywgJ+S4iScsICflm5snLCAn5LqUJywgJ+WFrSddLAorCisJLy8gQ3VsdHVyZSdzIGRhdGUgb3JkZXI6IFlZWVktTU0tREQKKwlkYXRlT3JkZXI6IFsneWVhcicsICdtb250aCcsICdkYXRlJ10sCisJc2hvcnREYXRlOiAnJVktJW0tJWQnLAorCXNob3J0VGltZTogJyVJOiVNJXAnLAorCUFNOiAnQU0nLAorCVBNOiAnUE0nLAorCWZpcnN0RGF5T2ZXZWVrOiAxLAorCisJLy8gRGF0ZS5FeHRyYXMKKwlvcmRpbmFsOiAnJywKKworCWxlc3NUaGFuTWludXRlQWdvOiAn5LiN5YiwMeWIhumQmOWJjScsCisJbWludXRlQWdvOiAn5aSn57SEMeWIhumQmOWJjScsCisJbWludXRlc0FnbzogJ3tkZWx0YX3liIbpkJjkuYvliY0nLAorCWhvdXJBZ286ICflpKfntIQx5bCP5pmC5YmNJywKKwlob3Vyc0FnbzogJ+Wkp+e0hHtkZWx0YX3lsI/mmYLliY0nLAorCWRheUFnbzogJzHlpKnliY0nLAorCWRheXNBZ286ICd7ZGVsdGF95aSp5YmNJywKKwl3ZWVrQWdvOiAnMeaYn+acn+WJjScsCisJd2Vla3NBZ286ICd7ZGVsdGF95pif5pyf5YmNJywKKwltb250aEFnbzogJzHkuKrmnIjliY0nLAorCW1vbnRoc0FnbzogJ3tkZWx0YX3kuKrmnIjliY0nLAorCXllYXJBZ286ICcx5bm05YmNJywKKwl5ZWFyc0FnbzogJ3tkZWx0YX3lubTliY0nLAorCisJbGVzc1RoYW5NaW51dGVVbnRpbDogJ+W+nuePvuWcqOmWi+Wni+S4jeWIsDHliIbpkJgnLAorCW1pbnV0ZVVudGlsOiAn5b6e54++5Zyo6ZaL5aeL57SEMeWIhumQmCcsCisJbWludXRlc1VudGlsOiAn5b6e54++5Zyo6ZaL5aeL57SEe2RlbHRhfeWIhumQmCcsCisJaG91clVudGlsOiAn5b6e54++5Zyo6ZaL5aeLMeWwj+aZgicsCisJaG91cnNVbnRpbDogJ+W+nuePvuWcqOmWi+Wni+e0hHtkZWx0YX3lsI/mmYInLAorCWRheVVudGlsOiAn5b6e54++5Zyo6ZaL5aeLMeWkqScsCisJZGF5c1VudGlsOiAn5b6e54++5Zyo6ZaL5aeLe2RlbHRhfeWkqScsCisJd2Vla1VudGlsOiAn5b6e54++5Zyo6ZaL5aeLMeaYn+acnycsCisJd2Vla3NVbnRpbDogJ+W+nuePvuWcqOmWi+Wni3tkZWx0YX3mmJ/mnJ8nLAorCW1vbnRoVW50aWw6ICflvp7nj77lnKjplovlp4vkuIDlgIvmnIgnLAorCW1vbnRoc1VudGlsOiAn5b6e54++5Zyo6ZaL5aeLe2RlbHRhfeWAi+aciCcsCisJeWVhclVudGlsOiAn5b6e54++5Zyo6ZaL5aeLMeW5tCcsCisJeWVhcnNVbnRpbDogJ+W+nuePvuWcqOmWi+Wni3tkZWx0YX3lubQnCisKK30pOworCisvKgorLS0tCisKK25hbWU6IExvY2FsZS56aC1DSC5Gb3JtLlZhbGlkYXRvcgorCitkZXNjcmlwdGlvbjogRm9ybSBWYWxpZGF0b3IgbWVzc2FnZXMgZm9yIENoaW5lc2UgKHNpbXBsaWZpZWQgYW5kIHRyYWRpdGlvbmFsKS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBZTWluZCBDaGFuCisKK3JlcXVpcmVzOgorICAtIExvY2FsZQorICAtIEZvcm0uVmFsaWRhdG9yCisKK3Byb3ZpZGVzOiBbRm9ybS56aC1DSC5Gb3JtLlZhbGlkYXRvciwgRm9ybS5WYWxpZGF0b3IuQ3VycmVuY3lZdWFuVmFsaWRhdG9yXQorCisuLi4KKyovCisKKy8vIFNpbXBsaWZpZWQgQ2hpbmVzZQorTG9jYWxlLmRlZmluZSgnemgtQ0hTJywgJ0Zvcm1WYWxpZGF0b3InLCB7CisKKwlyZXF1aXJlZDogJ+atpOmhueW/heWhq+OAgicsCisJbWluTGVuZ3RoOiAn6K+36Iez5bCR6L6T5YWlIHttaW5MZW5ndGh9IOS4quWtl+espiAo5bey6L6T5YWlIHtsZW5ndGh9IOS4qinjgIInLAorCW1heExlbmd0aDogJ+acgOWkmuWPquiDvei+k+WFpSB7bWF4TGVuZ3RofSDkuKrlrZfnrKYgKOW3sui+k+WFpSB7bGVuZ3RofSDkuKop44CCJywKKwlpbnRlZ2VyOiAn6K+36L6T5YWl5LiA5Liq5pW05pWw77yM5LiN6IO95YyF5ZCr5bCP5pWw54K544CC5L6L5aaC77yaIjEiLCAiMjAwIuOAgicsCisJbnVtZXJpYzogJ+ivt+i+k+WFpeS4gOS4quaVsOWtl++8jOS+i+Wmgu+8miIxIiwgIjEuMSIsICItMSIsICItMS4xIuOAgicsCisJZGlnaXRzOiAn6K+36L6T5YWl55Sx5pWw5a2X5ZKM5qCH54K556ym5Y+357uE5oiQ55qE5YaF5a6544CC5L6L5aaC55S16K+d5Y+356CB44CCJywKKwlhbHBoYTogJ+ivt+i+k+WFpSBBLVog55qEIDI2IOS4quWtl+avje+8jOS4jeiDveWMheWQq+epuuagvOaIluS7u+S9leWFtuS7luWtl+espuOAgicsCisJYWxwaGFudW06ICfor7fovpPlhaUgQS1aIOeahCAyNiDkuKrlrZfmr43miJYgMC05IOeahCAxMCDkuKrmlbDlrZfvvIzkuI3og73ljIXlkKvnqbrmoLzmiJbku7vkvZXlhbbku5blrZfnrKbjgIInLAorCWRhdGVTdWNoQXM6ICfor7fovpPlhaXlkIjms5XnmoTml6XmnJ/moLzlvI/vvIzlpoLvvJp7ZGF0ZX3jgIInLAorCWRhdGVJbkZvcm1hdE1EWTogJ+ivt+i+k+WFpeWQiOazleeahOaXpeacn+agvOW8j++8jOS+i+Wmgu+8mllZWVktTU0tREQgKCIyMDEwLTEyLTMxIinjgIInLAorCWVtYWlsOiAn6K+36L6T5YWl5ZCI5rOV55qE55S15a2Q5L+h566x5Zyw5Z2A77yM5L6L5aaC77yaImZyZWRAZG9tYWluLmNvbSLjgIInLAorCXVybDogJ+ivt+i+k+WFpeWQiOazleeahCBVcmwg5Zyw5Z2A77yM5L6L5aaC77yaaHR0cDovL3d3dy5leGFtcGxlLmNvbeOAgicsCisJY3VycmVuY3lEb2xsYXI6ICfor7fovpPlhaXlkIjms5XnmoTotKfluIHnrKblj7fvvIzkvovlpoLvvJrvv6UxMDAuMCcsCisJb25lUmVxdWlyZWQ6ICfor7foh7PlsJHpgInmi6nkuIDpobnjgIInLAorCWVycm9yUHJlZml4OiAn6ZSZ6K+v77yaJywKKwl3YXJuaW5nUHJlZml4OiAn6K2m5ZGK77yaJywKKworCS8vIEZvcm0uVmFsaWRhdG9yLkV4dHJhcworCW5vU3BhY2U6ICfkuI3og73ljIXlkKvnqbrmoLzjgIInLAorCXJlcUNoa0J5Tm9kZTogJ+acqumAieaLqeS7u+S9leWGheWuueOAgicsCisJcmVxdWlyZWRDaGs6ICfmraTpobnlv4XloavjgIInLAorCXJlcUNoa0J5TmFtZTogJ+ivt+mAieaLqSB7bGFiZWx9LicsCisJbWF0Y2g6ICflv4XpobvkuI57bWF0Y2hOYW1lfeebuOWMuemFjScsCisJc3RhcnREYXRlOiAn6LW35aeL5pel5pyfJywKKwllbmREYXRlOiAn57uT5p2f5pel5pyfJywKKwljdXJyZW50RGF0ZTogJ+W9k+WJjeaXpeacnycsCisJYWZ0ZXJEYXRlOiAn5pel5pyf5b+F6aG7562J5LqO5oiW5pma5LqOIHtsYWJlbH0uJywKKwliZWZvcmVEYXRlOiAn5pel5pyf5b+F6aG75pep5LqO5oiW562J5LqOIHtsYWJlbH0uJywKKwlzdGFydE1vbnRoOiAn6K+36YCJ5oup6LW35aeL5pyI5Lu9JywKKwlzYW1lTW9udGg6ICfmgqjlv4Xpobvkv67mlLnkuKTkuKrml6XmnJ/kuK3nmoTkuIDkuKrvvIzku6Xnoa7kv53lroPku6zlnKjlkIzkuIDmnIjku73jgIInLAorCWNyZWRpdGNhcmQ6ICfmgqjovpPlhaXnmoTkv6HnlKjljaHlj7fnoIHkuI3mraPnoa7jgILlvZPliY3lt7LovpPlhaV7bGVuZ3RofeS4quWtl+espuOAgicKKworfSk7CisKKy8vIFRyYWRpdGlvbmFsIENoaW5lc2UKK0xvY2FsZS5kZWZpbmUoJ3poLUNIVCcsICdGb3JtVmFsaWRhdG9yJywgeworCisJcmVxdWlyZWQ6ICfmraTpoIXlv4XloavjgIIgJywKKwltaW5MZW5ndGg6ICfoq4voh7PlsJHovLjlhaV7bWluTGVuZ3RofSDlgIvlrZfnrKYo5bey6Ly45YWle2xlbmd0aH0g5YCLKeOAgiAnLAorCW1heExlbmd0aDogJ+acgOWkmuWPquiDvei8uOWFpXttYXhMZW5ndGh9IOWAi+Wtl+espijlt7LovLjlhaV7bGVuZ3RofSDlgIsp44CCICcsCisJaW50ZWdlcjogJ+iri+i8uOWFpeS4gOWAi+aVtOaVuO+8jOS4jeiDveWMheWQq+Wwj+aVuOm7nuOAguS+i+Wmgu+8miIxIiwgIjIwMCLjgIIgJywKKwludW1lcmljOiAn6KuL6Ly45YWl5LiA5YCL5pW45a2X77yM5L6L5aaC77yaIjEiLCAiMS4xIiwgIi0xIiwgIi0xLjEi44CCICcsCisJZGlnaXRzOiAn6KuL6Ly45YWl55Sx5pW45a2X5ZKM5qiZ6bue56ym6Jmf57WE5oiQ55qE5YWn5a6544CC5L6L5aaC6Zu76Kmx6Jmf56K844CCICcsCisJYWxwaGE6ICfoq4vovLjlhaVBWiDnmoQyNiDlgIvlrZfmr43vvIzkuI3og73ljIXlkKvnqbrmoLzmiJbku7vkvZXlhbbku5blrZfnrKbjgIIgJywKKwlhbHBoYW51bTogJ+iri+i8uOWFpUFaIOeahDI2IOWAi+Wtl+avjeaIljAtOSDnmoQxMCDlgIvmlbjlrZfvvIzkuI3og73ljIXlkKvnqbrmoLzmiJbku7vkvZXlhbbku5blrZfnrKbjgIIgJywKKwlkYXRlU3VjaEFzOiAn6KuL6Ly45YWl5ZCI5rOV55qE5pel5pyf5qC85byP77yM5aaC77yae2RhdGV944CCICcsCisJZGF0ZUluRm9ybWF0TURZOiAn6KuL6Ly45YWl5ZCI5rOV55qE5pel5pyf5qC85byP77yM5L6L5aaC77yaWVlZWS1NTS1ERCAoIjIwMTAtMTItMzEiKeOAgiAnLAorCWVtYWlsOiAn6KuL6Ly45YWl5ZCI5rOV55qE6Zu75a2Q5L+h566x5Zyw5Z2A77yM5L6L5aaC77yaImZyZWRAZG9tYWluLmNvbSLjgIIgJywKKwl1cmw6ICfoq4vovLjlhaXlkIjms5XnmoRVcmwg5Zyw5Z2A77yM5L6L5aaC77yaaHR0cDovL3d3dy5leGFtcGxlLmNvbeOAgiAnLAorCWN1cnJlbmN5RG9sbGFyOiAn6KuL6Ly45YWl5ZCI5rOV55qE6LKo5bmj56ym6Jmf77yM5L6L5aaC77ya77+lMTAwLjAnLAorCW9uZVJlcXVpcmVkOiAn6KuL6Iez5bCR6YG45pOH5LiA6aCF44CCICcsCisJZXJyb3JQcmVmaXg6ICfpjK/oqqTvvJonLAorCXdhcm5pbmdQcmVmaXg6ICforablkYrvvJonLAorCisJLy8gRm9ybS5WYWxpZGF0b3IuRXh0cmFzCisJbm9TcGFjZTogJ+S4jeiDveWMheWQq+epuuagvOOAgiAnLAorCXJlcUNoa0J5Tm9kZTogJ+acqumBuOaTh+S7u+S9leWFp+WuueOAgiAnLAorCXJlcXVpcmVkQ2hrOiAn5q2k6aCF5b+F5aGr44CCICcsCisJcmVxQ2hrQnlOYW1lOiAn6KuL6YG45pOHIHtsYWJlbH0uJywKKwltYXRjaDogJ+W/hemgiOiIh3ttYXRjaE5hbWV955u45Yy56YWNJywKKwlzdGFydERhdGU6ICfotbflp4vml6XmnJ8nLAorCWVuZERhdGU6ICfntZDmnZ/ml6XmnJ8nLAorCWN1cnJlbnREYXRlOiAn55W25YmN5pel5pyfJywKKwlhZnRlckRhdGU6ICfml6XmnJ/lv4XpoIjnrYnmlrzmiJbmmZrmlrx7bGFiZWx9LicsCisJYmVmb3JlRGF0ZTogJ+aXpeacn+W/hemgiOaXqeaWvOaIluetieaWvHtsYWJlbH0uJywKKwlzdGFydE1vbnRoOiAn6KuL6YG45pOH6LW35aeL5pyI5Lu9JywKKwlzYW1lTW9udGg6ICfmgqjlv4XpoIjkv67mlLnlhanlgIvml6XmnJ/kuK3nmoTkuIDlgIvvvIzku6Xnorrkv53lroPlgJHlnKjlkIzkuIDmnIjku73jgIIgJywKKwljcmVkaXRjYXJkOiAn5oKo6Ly45YWl55qE5L+h55So5Y2h6Jmf56K85LiN5q2j56K644CC55W25YmN5bey6Ly45YWle2xlbmd0aH3lgIvlrZfnrKbjgIIgJworCit9KTsKKworRm9ybS5WYWxpZGF0b3IuYWRkKCd2YWxpZGF0ZS1jdXJyZW5jeS15dWFuJywgeworCisJZXJyb3JNc2c6IGZ1bmN0aW9uKCl7CisJCXJldHVybiBGb3JtLlZhbGlkYXRvci5nZXRNc2coJ2N1cnJlbmN5WXVhbicpOworCX0sCisKKwl0ZXN0OiBmdW5jdGlvbihlbGVtZW50KXsKKwkJLy8gW++/pV0xWyMjXVssIyMjXStbLiMjXQorCQkvLyBb77+lXTEjIyMrWy4jI10KKwkJLy8gW++/pV0wLiMjCisJCS8vIFvvv6VdLiMjCisJCXJldHVybiBGb3JtLlZhbGlkYXRvci5nZXRWYWxpZGF0b3IoJ0lzRW1wdHknKS50ZXN0KGVsZW1lbnQpIHx8ICgvXu+/pT9cLT8oWzEtOV17MX1bMC05XXswLDJ9KFwsWzAtOV17M30pKihcLlswLTldezAsMn0pP3xbMS05XXsxfVxkKihcLlswLTldezAsMn0pP3wwKFwuWzAtOV17MCwyfSk/fChcLlswLTldezEsMn0pPykkLykudGVzdChlbGVtZW50LmdldCgndmFsdWUnKSk7CisJfQorCit9KTsKKworLyoKKy0tLQorCituYW1lOiBMb2NhbGUuemgtQ0guTnVtYmVyCisKK2Rlc2NyaXB0aW9uOiBOdW1iZXIgbWVzc2FnZXMgZm9yIGZvciBDaGluZXNlIChzaW1wbGlmaWVkIGFuZCB0cmFkaXRpb25hbCkuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gWU1pbmQgQ2hhbgorCityZXF1aXJlczoKKyAgLSBMb2NhbGUKKyAgLSBMb2NhbGUuZW4tVVMuTnVtYmVyCisKK3Byb3ZpZGVzOiBbTG9jYWxlLnpoLUNILk51bWJlcl0KKworLi4uCisqLworCisvLyBTaW1wbGlmaWVkIENoaW5lc2UKK0xvY2FsZS5kZWZpbmUoJ3poLUNIUycsICdOdW1iZXInLCB7CisKKwljdXJyZW5jeTogeworCQlwcmVmaXg6ICfvv6UgJworCX0KKworfSkuaW5oZXJpdCgnZW4tVVMnLCAnTnVtYmVyJyk7CisKKy8vIFRyYWRpdGlvbmFsIENoaW5lc2UKK0xvY2FsZS5kZWZpbmUoJ3poLUNIVCcpLmluaGVyaXQoJ3poLUNIUycsICdOdW1iZXInKTsKKworLyoKKy0tLQorCitzY3JpcHQ6IFJlcXVlc3QuSlNPTlAuanMKKworbmFtZTogUmVxdWVzdC5KU09OUAorCitkZXNjcmlwdGlvbjogRGVmaW5lcyBSZXF1ZXN0LkpTT05QLCBhIGNsYXNzIGZvciBjcm9zcyBkb21haW4gamF2YXNjcmlwdCB2aWEgc2NyaXB0IGluamVjdGlvbi4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKyAgLSBHdWlsbGVybW8gUmF1Y2gKKyAgLSBBcmlhbiBTdG9sd2lqaworCityZXF1aXJlczoKKyAgLSBDb3JlL0VsZW1lbnQKKyAgLSBDb3JlL1JlcXVlc3QKKyAgLSBNb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbUmVxdWVzdC5KU09OUF0KKworLi4uCisqLworCitSZXF1ZXN0LkpTT05QID0gbmV3IENsYXNzKHsKKworCUltcGxlbWVudHM6IFtDaGFpbiwgRXZlbnRzLCBPcHRpb25zXSwKKworCW9wdGlvbnM6IHsvKgorCQlvblJlcXVlc3Q6IGZ1bmN0aW9uKHNyYywgc2NyaXB0RWxlbWVudCl7fSwKKwkJb25Db21wbGV0ZTogZnVuY3Rpb24oZGF0YSl7fSwKKwkJb25TdWNjZXNzOiBmdW5jdGlvbihkYXRhKXt9LAorCQlvbkNhbmNlbDogZnVuY3Rpb24oKXt9LAorCQlvblRpbWVvdXQ6IGZ1bmN0aW9uKCl7fSwKKwkJb25FcnJvcjogZnVuY3Rpb24oKXt9LCAqLworCQlvblJlcXVlc3Q6IGZ1bmN0aW9uKHNyYyl7CisJCQlpZiAodGhpcy5vcHRpb25zLmxvZyAmJiB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLmxvZyl7CisJCQkJY29uc29sZS5sb2coJ0pTT05QIHJldHJpZXZpbmcgc2NyaXB0IHdpdGggdXJsOicgKyBzcmMpOworCQkJfQorCQl9LAorCQlvbkVycm9yOiBmdW5jdGlvbihzcmMpeworCQkJaWYgKHRoaXMub3B0aW9ucy5sb2cgJiYgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS53YXJuKXsKKwkJCQljb25zb2xlLndhcm4oJ0pTT05QICcrIHNyYyArJyB3aWxsIGZhaWwgaW4gSW50ZXJuZXQgRXhwbG9yZXIsIHdoaWNoIGVuZm9yY2VzIGEgMjA4MyBieXRlcyBsZW5ndGggbGltaXQgb24gVVJJcycpOworCQkJfQorCQl9LAorCQl1cmw6ICcnLAorCQljYWxsYmFja0tleTogJ2NhbGxiYWNrJywKKwkJaW5qZWN0U2NyaXB0OiBkb2N1bWVudC5oZWFkLAorCQlkYXRhOiAnJywKKwkJbGluazogJ2lnbm9yZScsCisJCXRpbWVvdXQ6IDAsCisJCWxvZzogZmFsc2UKKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTsKKwl9LAorCisJc2VuZDogZnVuY3Rpb24ob3B0aW9ucyl7CisJCWlmICghUmVxdWVzdC5wcm90b3R5cGUuY2hlY2suY2FsbCh0aGlzLCBvcHRpb25zKSkgcmV0dXJuIHRoaXM7CisJCXRoaXMucnVubmluZyA9IHRydWU7CisKKwkJdmFyIHR5cGUgPSB0eXBlT2Yob3B0aW9ucyk7CisJCWlmICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ2VsZW1lbnQnKSBvcHRpb25zID0ge2RhdGE6IG9wdGlvbnN9OworCQlvcHRpb25zID0gT2JqZWN0Lm1lcmdlKHRoaXMub3B0aW9ucywgb3B0aW9ucyB8fCB7fSk7CisKKwkJdmFyIGRhdGEgPSBvcHRpb25zLmRhdGE7CisJCXN3aXRjaCAodHlwZU9mKGRhdGEpKXsKKwkJCWNhc2UgJ2VsZW1lbnQnOiBkYXRhID0gZG9jdW1lbnQuaWQoZGF0YSkudG9RdWVyeVN0cmluZygpOyBicmVhazsKKwkJCWNhc2UgJ29iamVjdCc6IGNhc2UgJ2hhc2gnOiBkYXRhID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcoZGF0YSk7CisJCX0KKworCQl2YXIgaW5kZXggPSB0aGlzLmluZGV4ID0gUmVxdWVzdC5KU09OUC5jb3VudGVyKyssCisJCQlrZXkgPSAncmVxdWVzdF8nICsgaW5kZXg7CisKKwkJdmFyIHNyYyA9IG9wdGlvbnMudXJsICsKKwkJCShvcHRpb25zLnVybC50ZXN0KCdcXD8nKSA/ICcmJyA6Jz8nKSArCisJCQkob3B0aW9ucy5jYWxsYmFja0tleSkgKworCQkJJz1SZXF1ZXN0LkpTT05QLnJlcXVlc3RfbWFwLnJlcXVlc3RfJysgaW5kZXggKworCQkJKGRhdGEgPyAnJicgKyBkYXRhIDogJycpOworCisJCWlmIChzcmMubGVuZ3RoID4gMjA4MykgdGhpcy5maXJlRXZlbnQoJ2Vycm9yJywgc3JjKTsKKworCQlSZXF1ZXN0LkpTT05QLnJlcXVlc3RfbWFwW2tleV0gPSBmdW5jdGlvbigpeworCQkJZGVsZXRlIFJlcXVlc3QuSlNPTlAucmVxdWVzdF9tYXBba2V5XTsKKwkJCXRoaXMuc3VjY2Vzcyhhcmd1bWVudHMsIGluZGV4KTsKKwkJfS5iaW5kKHRoaXMpOworCisJCXZhciBzY3JpcHQgPSB0aGlzLmdldFNjcmlwdChzcmMpLmluamVjdChvcHRpb25zLmluamVjdFNjcmlwdCk7CisJCXRoaXMuZmlyZUV2ZW50KCdyZXF1ZXN0JywgW3NyYywgc2NyaXB0XSk7CisKKwkJaWYgKG9wdGlvbnMudGltZW91dCkgdGhpcy50aW1lb3V0LmRlbGF5KG9wdGlvbnMudGltZW91dCwgdGhpcyk7CisKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWdldFNjcmlwdDogZnVuY3Rpb24oc3JjKXsKKwkJaWYgKCF0aGlzLnNjcmlwdCkgdGhpcy5zY3JpcHQgPSBuZXcgRWxlbWVudCgnc2NyaXB0JywgeworCQkJdHlwZTogJ3RleHQvamF2YXNjcmlwdCcsCisJCQlhc3luYzogdHJ1ZSwKKwkJCXNyYzogc3JjCisJCX0pOworCQlyZXR1cm4gdGhpcy5zY3JpcHQ7CisJfSwKKworCXN1Y2Nlc3M6IGZ1bmN0aW9uKGFyZ3MpeworCQlpZiAoIXRoaXMucnVubmluZykgcmV0dXJuOworCQl0aGlzLmNsZWFyKCkKKwkJCS5maXJlRXZlbnQoJ2NvbXBsZXRlJywgYXJncykuZmlyZUV2ZW50KCdzdWNjZXNzJywgYXJncykKKwkJCS5jYWxsQ2hhaW4oKTsKKwl9LAorCisJY2FuY2VsOiBmdW5jdGlvbigpeworCQlpZiAodGhpcy5ydW5uaW5nKSB0aGlzLmNsZWFyKCkuZmlyZUV2ZW50KCdjYW5jZWwnKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWlzUnVubmluZzogZnVuY3Rpb24oKXsKKwkJcmV0dXJuICEhdGhpcy5ydW5uaW5nOworCX0sCisKKwljbGVhcjogZnVuY3Rpb24oKXsKKwkJdGhpcy5ydW5uaW5nID0gZmFsc2U7CisJCWlmICh0aGlzLnNjcmlwdCl7CisJCQl0aGlzLnNjcmlwdC5kZXN0cm95KCk7CisJCQl0aGlzLnNjcmlwdCA9IG51bGw7CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXRpbWVvdXQ6IGZ1bmN0aW9uKCl7CisJCWlmICh0aGlzLnJ1bm5pbmcpeworCQkJdGhpcy5ydW5uaW5nID0gZmFsc2U7CisJCQl0aGlzLmZpcmVFdmVudCgndGltZW91dCcsIFt0aGlzLnNjcmlwdC5nZXQoJ3NyYycpLCB0aGlzLnNjcmlwdF0pLmZpcmVFdmVudCgnZmFpbHVyZScpLmNhbmNlbCgpOworCQl9CisJCXJldHVybiB0aGlzOworCX0KKworfSk7CisKK1JlcXVlc3QuSlNPTlAuY291bnRlciA9IDA7CitSZXF1ZXN0LkpTT05QLnJlcXVlc3RfbWFwID0ge307CisKKy8qCistLS0KKworc2NyaXB0OiBSZXF1ZXN0LlBlcmlvZGljYWwuanMKKworbmFtZTogUmVxdWVzdC5QZXJpb2RpY2FsCisKK2Rlc2NyaXB0aW9uOiBSZXF1ZXN0cyB0aGUgc2FtZSBVUkwgdG8gcHVsbCBkYXRhIGZyb20gYSBzZXJ2ZXIgYnV0IGluY3JlYXNlcyB0aGUgaW50ZXJ2YWxzIGlmIG5vIGRhdGEgaXMgcmV0dXJuZWQgdG8gcmVkdWNlIHRoZSBsb2FkCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQ2hyaXN0b3BoIFBvamVyCisKK3JlcXVpcmVzOgorICAtIENvcmUvUmVxdWVzdAorICAtIE1vb1Rvb2xzLk1vcmUKKworcHJvdmlkZXM6IFtSZXF1ZXN0LlBlcmlvZGljYWxdCisKKy4uLgorKi8KKworUmVxdWVzdC5pbXBsZW1lbnQoeworCisJb3B0aW9uczogeworCQlpbml0aWFsRGVsYXk6IDUwMDAsCisJCWRlbGF5OiA1MDAwLAorCQlsaW1pdDogNjAwMDAKKwl9LAorCisJc3RhcnRUaW1lcjogZnVuY3Rpb24oZGF0YSl7CisJCXZhciBmbiA9IGZ1bmN0aW9uKCl7CisJCQlpZiAoIXRoaXMucnVubmluZykgdGhpcy5zZW5kKHtkYXRhOiBkYXRhfSk7CisJCX07CisJCXRoaXMubGFzdERlbGF5ID0gdGhpcy5vcHRpb25zLmluaXRpYWxEZWxheTsKKwkJdGhpcy50aW1lciA9IGZuLmRlbGF5KHRoaXMubGFzdERlbGF5LCB0aGlzKTsKKwkJdGhpcy5jb21wbGV0ZUNoZWNrID0gZnVuY3Rpb24ocmVzcG9uc2UpeworCQkJY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpOworCQkJdGhpcy5sYXN0RGVsYXkgPSAocmVzcG9uc2UpID8gdGhpcy5vcHRpb25zLmRlbGF5IDogKHRoaXMubGFzdERlbGF5ICsgdGhpcy5vcHRpb25zLmRlbGF5KS5taW4odGhpcy5vcHRpb25zLmxpbWl0KTsKKwkJCXRoaXMudGltZXIgPSBmbi5kZWxheSh0aGlzLmxhc3REZWxheSwgdGhpcyk7CisJCX07CisJCXJldHVybiB0aGlzLmFkZEV2ZW50KCdjb21wbGV0ZScsIHRoaXMuY29tcGxldGVDaGVjayk7CisJfSwKKworCXN0b3BUaW1lcjogZnVuY3Rpb24oKXsKKwkJY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpOworCQlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudCgnY29tcGxldGUnLCB0aGlzLmNvbXBsZXRlQ2hlY2spOworCX0KKworfSk7CisKKy8qCistLS0KKworc2NyaXB0OiBSZXF1ZXN0LlF1ZXVlLmpzCisKK25hbWU6IFJlcXVlc3QuUXVldWUKKworZGVzY3JpcHRpb246IENvbnRyb2xzIHNldmVyYWwgaW5zdGFuY2VzIG9mIFJlcXVlc3QgYW5kIGl0cyB2YXJpYW50cyB0byBydW4gb25seSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gQWFyb24gTmV3dG9uCisKK3JlcXVpcmVzOgorICAtIENvcmUvRWxlbWVudAorICAtIENvcmUvUmVxdWVzdAorICAtIENsYXNzLkJpbmRzCisKK3Byb3ZpZGVzOiBbUmVxdWVzdC5RdWV1ZV0KKworLi4uCisqLworCitSZXF1ZXN0LlF1ZXVlID0gbmV3IENsYXNzKHsKKworCUltcGxlbWVudHM6IFtPcHRpb25zLCBFdmVudHNdLAorCisJQmluZHM6IFsnYXR0YWNoJywgJ3JlcXVlc3QnLCAnY29tcGxldGUnLCAnY2FuY2VsJywgJ3N1Y2Nlc3MnLCAnZmFpbHVyZScsICdleGNlcHRpb24nXSwKKworCW9wdGlvbnM6IHsvKgorCQlvblJlcXVlc3Q6IGZ1bmN0aW9uKGFyZ3NQYXNzZWRUb09uUmVxdWVzdCl7fSwKKwkJb25TdWNjZXNzOiBmdW5jdGlvbihhcmdzUGFzc2VkVG9PblN1Y2Nlc3Mpe30sCisJCW9uQ29tcGxldGU6IGZ1bmN0aW9uKGFyZ3NQYXNzZWRUb09uQ29tcGxldGUpe30sCisJCW9uQ2FuY2VsOiBmdW5jdGlvbihhcmdzUGFzc2VkVG9PbkNhbmNlbCl7fSwKKwkJb25FeGNlcHRpb246IGZ1bmN0aW9uKGFyZ3NQYXNzZWRUb09uRXhjZXB0aW9uKXt9LAorCQlvbkZhaWx1cmU6IGZ1bmN0aW9uKGFyZ3NQYXNzZWRUb09uRmFpbHVyZSl7fSwKKwkJb25FbmQ6IGZ1bmN0aW9uKCl7fSwKKwkJKi8KKwkJc3RvcE9uRmFpbHVyZTogdHJ1ZSwKKwkJYXV0b0FkdmFuY2U6IHRydWUsCisJCWNvbmN1cnJlbnQ6IDEsCisJCXJlcXVlc3RzOiB7fQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKXsKKwkJdmFyIHJlcXVlc3RzOworCQlpZiAob3B0aW9ucyl7CisJCQlyZXF1ZXN0cyA9IG9wdGlvbnMucmVxdWVzdHM7CisJCQlkZWxldGUgb3B0aW9ucy5yZXF1ZXN0czsKKwkJfQorCQl0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7CisJCXRoaXMucmVxdWVzdHMgPSB7fTsKKwkJdGhpcy5xdWV1ZSA9IFtdOworCQl0aGlzLnJlcUJpbmRlcnMgPSB7fTsKKworCQlpZiAocmVxdWVzdHMpIHRoaXMuYWRkUmVxdWVzdHMocmVxdWVzdHMpOworCX0sCisKKwlhZGRSZXF1ZXN0OiBmdW5jdGlvbihuYW1lLCByZXF1ZXN0KXsKKwkJdGhpcy5yZXF1ZXN0c1tuYW1lXSA9IHJlcXVlc3Q7CisJCXRoaXMuYXR0YWNoKG5hbWUsIHJlcXVlc3QpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJYWRkUmVxdWVzdHM6IGZ1bmN0aW9uKG9iail7CisJCU9iamVjdC5lYWNoKG9iaiwgZnVuY3Rpb24ocmVxLCBuYW1lKXsKKwkJCXRoaXMuYWRkUmVxdWVzdChuYW1lLCByZXEpOworCQl9LCB0aGlzKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWdldE5hbWU6IGZ1bmN0aW9uKHJlcSl7CisJCXJldHVybiBPYmplY3Qua2V5T2YodGhpcy5yZXF1ZXN0cywgcmVxKTsKKwl9LAorCisJYXR0YWNoOiBmdW5jdGlvbihuYW1lLCByZXEpeworCQlpZiAocmVxLl9ncm91cFNlbmQpIHJldHVybiB0aGlzOworCQlbJ3JlcXVlc3QnLCAnY29tcGxldGUnLCAnY2FuY2VsJywgJ3N1Y2Nlc3MnLCAnZmFpbHVyZScsICdleGNlcHRpb24nXS5lYWNoKGZ1bmN0aW9uKGV2dCl7CisJCQlpZiAoIXRoaXMucmVxQmluZGVyc1tuYW1lXSkgdGhpcy5yZXFCaW5kZXJzW25hbWVdID0ge307CisJCQl0aGlzLnJlcUJpbmRlcnNbbmFtZV1bZXZ0XSA9IGZ1bmN0aW9uKCl7CisJCQkJdGhpc1snb24nICsgZXZ0LmNhcGl0YWxpemUoKV0uYXBwbHkodGhpcywgW25hbWUsIHJlcV0uYXBwZW5kKGFyZ3VtZW50cykpOworCQkJfS5iaW5kKHRoaXMpOworCQkJcmVxLmFkZEV2ZW50KGV2dCwgdGhpcy5yZXFCaW5kZXJzW25hbWVdW2V2dF0pOworCQl9LCB0aGlzKTsKKwkJcmVxLl9ncm91cFNlbmQgPSByZXEuc2VuZDsKKwkJcmVxLnNlbmQgPSBmdW5jdGlvbihvcHRpb25zKXsKKwkJCXRoaXMuc2VuZChuYW1lLCBvcHRpb25zKTsKKwkJCXJldHVybiByZXE7CisJCX0uYmluZCh0aGlzKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXJlbW92ZVJlcXVlc3Q6IGZ1bmN0aW9uKHJlcSl7CisJCXZhciBuYW1lID0gdHlwZU9mKHJlcSkgPT0gJ29iamVjdCcgPyB0aGlzLmdldE5hbWUocmVxKSA6IHJlcTsKKwkJaWYgKCFuYW1lICYmIHR5cGVPZihuYW1lKSAhPSAnc3RyaW5nJykgcmV0dXJuIHRoaXM7CisJCXJlcSA9IHRoaXMucmVxdWVzdHNbbmFtZV07CisJCWlmICghcmVxKSByZXR1cm4gdGhpczsKKwkJWydyZXF1ZXN0JywgJ2NvbXBsZXRlJywgJ2NhbmNlbCcsICdzdWNjZXNzJywgJ2ZhaWx1cmUnLCAnZXhjZXB0aW9uJ10uZWFjaChmdW5jdGlvbihldnQpeworCQkJcmVxLnJlbW92ZUV2ZW50KGV2dCwgdGhpcy5yZXFCaW5kZXJzW25hbWVdW2V2dF0pOworCQl9LCB0aGlzKTsKKwkJcmVxLnNlbmQgPSByZXEuX2dyb3VwU2VuZDsKKwkJZGVsZXRlIHJlcS5fZ3JvdXBTZW5kOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZ2V0UnVubmluZzogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIE9iamVjdC5maWx0ZXIodGhpcy5yZXF1ZXN0cywgZnVuY3Rpb24ocil7CisJCQlyZXR1cm4gci5ydW5uaW5nOworCQl9KTsKKwl9LAorCisJaXNSdW5uaW5nOiBmdW5jdGlvbigpeworCQlyZXR1cm4gISEoT2JqZWN0LmtleXModGhpcy5nZXRSdW5uaW5nKCkpLmxlbmd0aCk7CisJfSwKKworCXNlbmQ6IGZ1bmN0aW9uKG5hbWUsIG9wdGlvbnMpeworCQl2YXIgcSA9IGZ1bmN0aW9uKCl7CisJCQl0aGlzLnJlcXVlc3RzW25hbWVdLl9ncm91cFNlbmQob3B0aW9ucyk7CisJCQl0aGlzLnF1ZXVlLmVyYXNlKHEpOworCQl9LmJpbmQodGhpcyk7CisKKwkJcS5uYW1lID0gbmFtZTsKKwkJaWYgKE9iamVjdC5rZXlzKHRoaXMuZ2V0UnVubmluZygpKS5sZW5ndGggPj0gdGhpcy5vcHRpb25zLmNvbmN1cnJlbnQgfHwgKHRoaXMuZXJyb3IgJiYgdGhpcy5vcHRpb25zLnN0b3BPbkZhaWx1cmUpKSB0aGlzLnF1ZXVlLnB1c2gocSk7CisJCWVsc2UgcSgpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJaGFzTmV4dDogZnVuY3Rpb24obmFtZSl7CisJCXJldHVybiAoIW5hbWUpID8gISF0aGlzLnF1ZXVlLmxlbmd0aCA6ICEhdGhpcy5xdWV1ZS5maWx0ZXIoZnVuY3Rpb24ocSl7IHJldHVybiBxLm5hbWUgPT0gbmFtZTsgfSkubGVuZ3RoOworCX0sCisKKwlyZXN1bWU6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZXJyb3IgPSBmYWxzZTsKKwkJKHRoaXMub3B0aW9ucy5jb25jdXJyZW50IC0gT2JqZWN0LmtleXModGhpcy5nZXRSdW5uaW5nKCkpLmxlbmd0aCkudGltZXModGhpcy5ydW5OZXh0LCB0aGlzKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXJ1bk5leHQ6IGZ1bmN0aW9uKG5hbWUpeworCQlpZiAoIXRoaXMucXVldWUubGVuZ3RoKSByZXR1cm4gdGhpczsKKwkJaWYgKCFuYW1lKXsKKwkJCXRoaXMucXVldWVbMF0oKTsKKwkJfSBlbHNlIHsKKwkJCXZhciBmb3VuZDsKKwkJCXRoaXMucXVldWUuZWFjaChmdW5jdGlvbihxKXsKKwkJCQlpZiAoIWZvdW5kICYmIHEubmFtZSA9PSBuYW1lKXsKKwkJCQkJZm91bmQgPSB0cnVlOworCQkJCQlxKCk7CisJCQkJfQorCQkJfSk7CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXJ1bkFsbDogZnVuY3Rpb24oKXsKKwkJdGhpcy5xdWV1ZS5lYWNoKGZ1bmN0aW9uKHEpeworCQkJcSgpOworCQl9KTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWNsZWFyOiBmdW5jdGlvbihuYW1lKXsKKwkJaWYgKCFuYW1lKXsKKwkJCXRoaXMucXVldWUuZW1wdHkoKTsKKwkJfSBlbHNlIHsKKwkJCXRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLm1hcChmdW5jdGlvbihxKXsKKwkJCQlpZiAocS5uYW1lICE9IG5hbWUpIHJldHVybiBxOworCQkJCWVsc2UgcmV0dXJuIGZhbHNlOworCQkJfSkuZmlsdGVyKGZ1bmN0aW9uKHEpeworCQkJCXJldHVybiBxOworCQkJfSk7CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWNhbmNlbDogZnVuY3Rpb24obmFtZSl7CisJCXRoaXMucmVxdWVzdHNbbmFtZV0uY2FuY2VsKCk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlvblJlcXVlc3Q6IGZ1bmN0aW9uKCl7CisJCXRoaXMuZmlyZUV2ZW50KCdyZXF1ZXN0JywgYXJndW1lbnRzKTsKKwl9LAorCisJb25Db21wbGV0ZTogZnVuY3Rpb24oKXsKKwkJdGhpcy5maXJlRXZlbnQoJ2NvbXBsZXRlJywgYXJndW1lbnRzKTsKKwkJaWYgKCF0aGlzLnF1ZXVlLmxlbmd0aCkgdGhpcy5maXJlRXZlbnQoJ2VuZCcpOworCX0sCisKKwlvbkNhbmNlbDogZnVuY3Rpb24oKXsKKwkJaWYgKHRoaXMub3B0aW9ucy5hdXRvQWR2YW5jZSAmJiAhdGhpcy5lcnJvcikgdGhpcy5ydW5OZXh0KCk7CisJCXRoaXMuZmlyZUV2ZW50KCdjYW5jZWwnLCBhcmd1bWVudHMpOworCX0sCisKKwlvblN1Y2Nlc3M6IGZ1bmN0aW9uKCl7CisJCWlmICh0aGlzLm9wdGlvbnMuYXV0b0FkdmFuY2UgJiYgIXRoaXMuZXJyb3IpIHRoaXMucnVuTmV4dCgpOworCQl0aGlzLmZpcmVFdmVudCgnc3VjY2VzcycsIGFyZ3VtZW50cyk7CisJfSwKKworCW9uRmFpbHVyZTogZnVuY3Rpb24oKXsKKwkJdGhpcy5lcnJvciA9IHRydWU7CisJCWlmICghdGhpcy5vcHRpb25zLnN0b3BPbkZhaWx1cmUgJiYgdGhpcy5vcHRpb25zLmF1dG9BZHZhbmNlKSB0aGlzLnJ1bk5leHQoKTsKKwkJdGhpcy5maXJlRXZlbnQoJ2ZhaWx1cmUnLCBhcmd1bWVudHMpOworCX0sCisKKwlvbkV4Y2VwdGlvbjogZnVuY3Rpb24oKXsKKwkJdGhpcy5lcnJvciA9IHRydWU7CisJCWlmICghdGhpcy5vcHRpb25zLnN0b3BPbkZhaWx1cmUgJiYgdGhpcy5vcHRpb25zLmF1dG9BZHZhbmNlKSB0aGlzLnJ1bk5leHQoKTsKKwkJdGhpcy5maXJlRXZlbnQoJ2V4Y2VwdGlvbicsIGFyZ3VtZW50cyk7CisJfQorCit9KTsKKworLyoKKy0tLQorCitzY3JpcHQ6IEFycmF5LkV4dHJhcy5qcworCituYW1lOiBBcnJheS5FeHRyYXMKKworZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIEFycmF5IG5hdGl2ZSBvYmplY3QgdG8gaW5jbHVkZSB1c2VmdWwgbWV0aG9kcyB0byB3b3JrIHdpdGggYXJyYXlzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIENocmlzdG9waCBQb2plcgorICAtIFNlYmFzdGlhbiBNYXJrYsOlZ2UKKworcmVxdWlyZXM6CisgIC0gQ29yZS9BcnJheQorICAtIE1vb1Rvb2xzLk1vcmUKKworcHJvdmlkZXM6IFtBcnJheS5FeHRyYXNdCisKKy4uLgorKi8KKworKGZ1bmN0aW9uKG5pbCl7CisKK0FycmF5LmltcGxlbWVudCh7CisKKwltaW46IGZ1bmN0aW9uKCl7CisJCXJldHVybiBNYXRoLm1pbi5hcHBseShudWxsLCB0aGlzKTsKKwl9LAorCisJbWF4OiBmdW5jdGlvbigpeworCQlyZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCwgdGhpcyk7CisJfSwKKworCWF2ZXJhZ2U6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzLmxlbmd0aCA/IHRoaXMuc3VtKCkgLyB0aGlzLmxlbmd0aCA6IDA7CisJfSwKKworCXN1bTogZnVuY3Rpb24oKXsKKwkJdmFyIHJlc3VsdCA9IDAsIGwgPSB0aGlzLmxlbmd0aDsKKwkJaWYgKGwpeworCQkJd2hpbGUgKGwtLSl7CisJCQkJaWYgKHRoaXNbbF0gIT0gbnVsbCkgcmVzdWx0ICs9IHBhcnNlRmxvYXQodGhpc1tsXSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9LAorCisJdW5pcXVlOiBmdW5jdGlvbigpeworCQlyZXR1cm4gW10uY29tYmluZSh0aGlzKTsKKwl9LAorCisJc2h1ZmZsZTogZnVuY3Rpb24oKXsKKwkJZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoOyBpICYmIC0taTspeworCQkJdmFyIHRlbXAgPSB0aGlzW2ldLCByID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKCBpICsgMSApKTsKKwkJCXRoaXNbaV0gPSB0aGlzW3JdOworCQkJdGhpc1tyXSA9IHRlbXA7CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXJlZHVjZTogZnVuY3Rpb24oZm4sIHZhbHVlKXsKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyl7CisJCQlpZiAoaSBpbiB0aGlzKSB2YWx1ZSA9IHZhbHVlID09PSBuaWwgPyB0aGlzW2ldIDogZm4uY2FsbChudWxsLCB2YWx1ZSwgdGhpc1tpXSwgaSwgdGhpcyk7CisJCX0KKwkJcmV0dXJuIHZhbHVlOworCX0sCisKKwlyZWR1Y2VSaWdodDogZnVuY3Rpb24oZm4sIHZhbHVlKXsKKwkJdmFyIGkgPSB0aGlzLmxlbmd0aDsKKwkJd2hpbGUgKGktLSl7CisJCQlpZiAoaSBpbiB0aGlzKSB2YWx1ZSA9IHZhbHVlID09PSBuaWwgPyB0aGlzW2ldIDogZm4uY2FsbChudWxsLCB2YWx1ZSwgdGhpc1tpXSwgaSwgdGhpcyk7CisJCX0KKwkJcmV0dXJuIHZhbHVlOworCX0sCisKKwlwbHVjazogZnVuY3Rpb24ocHJvcCl7CisJCXJldHVybiB0aGlzLm1hcChmdW5jdGlvbihpdGVtKXsKKwkJCXJldHVybiBpdGVtW3Byb3BdOworCQl9KTsKKwl9CisKK30pOworCit9KSgpOworCisvKgorLS0tCisKK3NjcmlwdDogRGF0ZS5FeHRyYXMuanMKKworbmFtZTogRGF0ZS5FeHRyYXMKKworZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIERhdGUgbmF0aXZlIG9iamVjdCB0byBpbmNsdWRlIGV4dHJhIG1ldGhvZHMgKG9uIHRvcCBvZiB0aG9zZSBpbiBEYXRlLmpzKS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBBYXJvbiBOZXd0b24KKyAgLSBTY290dCBLeWxlCisKK3JlcXVpcmVzOgorICAtIERhdGUKKworcHJvdmlkZXM6IFtEYXRlLkV4dHJhc10KKworLi4uCisqLworCitEYXRlLmltcGxlbWVudCh7CisKKwl0aW1lRGlmZkluV29yZHM6IGZ1bmN0aW9uKHRvKXsKKwkJcmV0dXJuIERhdGUuZGlzdGFuY2VPZlRpbWVJbldvcmRzKHRoaXMsIHRvIHx8IG5ldyBEYXRlKTsKKwl9LAorCisJdGltZURpZmY6IGZ1bmN0aW9uKHRvLCBzZXBhcmF0b3IpeworCQlpZiAodG8gPT0gbnVsbCkgdG8gPSBuZXcgRGF0ZTsKKwkJdmFyIGRlbHRhID0gKCh0byAtIHRoaXMpIC8gMTAwMCkuZmxvb3IoKS5hYnMoKTsKKworCQl2YXIgdmFscyA9IFtdLAorCQkJZHVyYXRpb25zID0gWzYwLCA2MCwgMjQsIDM2NSwgMF0sCisJCQluYW1lcyA9IFsncycsICdtJywgJ2gnLCAnZCcsICd5J10sCisJCQl2YWx1ZSwgZHVyYXRpb247CisKKwkJZm9yICh2YXIgaXRlbSA9IDA7IGl0ZW0gPCBkdXJhdGlvbnMubGVuZ3RoOyBpdGVtKyspeworCQkJaWYgKGl0ZW0gJiYgIWRlbHRhKSBicmVhazsKKwkJCXZhbHVlID0gZGVsdGE7CisJCQlpZiAoKGR1cmF0aW9uID0gZHVyYXRpb25zW2l0ZW1dKSl7CisJCQkJdmFsdWUgPSAoZGVsdGEgJSBkdXJhdGlvbik7CisJCQkJZGVsdGEgPSAoZGVsdGEgLyBkdXJhdGlvbikuZmxvb3IoKTsKKwkJCX0KKwkJCXZhbHMudW5zaGlmdCh2YWx1ZSArIChuYW1lc1tpdGVtXSB8fCAnJykpOworCQl9CisKKwkJcmV0dXJuIHZhbHMuam9pbihzZXBhcmF0b3IgfHwgJzonKTsKKwl9CisKK30pLmV4dGVuZCh7CisKKwlkaXN0YW5jZU9mVGltZUluV29yZHM6IGZ1bmN0aW9uKGZyb20sIHRvKXsKKwkJcmV0dXJuIERhdGUuZ2V0VGltZVBocmFzZSgoKHRvIC0gZnJvbSkgLyAxMDAwKS50b0ludCgpKTsKKwl9LAorCisJZ2V0VGltZVBocmFzZTogZnVuY3Rpb24oZGVsdGEpeworCQl2YXIgc3VmZml4ID0gKGRlbHRhIDwgMCkgPyAnVW50aWwnIDogJ0Fnbyc7CisJCWlmIChkZWx0YSA8IDApIGRlbHRhICo9IC0xOworCisJCXZhciB1bml0cyA9IHsKKwkJCW1pbnV0ZTogNjAsCisJCQlob3VyOiA2MCwKKwkJCWRheTogMjQsCisJCQl3ZWVrOiA3LAorCQkJbW9udGg6IDUyIC8gMTIsCisJCQl5ZWFyOiAxMiwKKwkJCWVvbjogSW5maW5pdHkKKwkJfTsKKworCQl2YXIgbXNnID0gJ2xlc3NUaGFuTWludXRlJzsKKworCQlmb3IgKHZhciB1bml0IGluIHVuaXRzKXsKKwkJCXZhciBpbnRlcnZhbCA9IHVuaXRzW3VuaXRdOworCQkJaWYgKGRlbHRhIDwgMS41ICogaW50ZXJ2YWwpeworCQkJCWlmIChkZWx0YSA+IDAuNzUgKiBpbnRlcnZhbCkgbXNnID0gdW5pdDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWRlbHRhIC89IGludGVydmFsOworCQkJbXNnID0gdW5pdCArICdzJzsKKwkJfQorCisJCWRlbHRhID0gZGVsdGEucm91bmQoKTsKKwkJcmV0dXJuIERhdGUuZ2V0TXNnKG1zZyArIHN1ZmZpeCwgZGVsdGEpLnN1YnN0aXR1dGUoe2RlbHRhOiBkZWx0YX0pOworCX0KKworfSkuZGVmaW5lUGFyc2VycygKKworCXsKKwkJLy8gInRvZGF5IiwgInRvbW9ycm93IiwgInllc3RlcmRheSIKKwkJcmU6IC9eKD86dG9kfHRvbXx5ZXMpL2ksCisJCWhhbmRsZXI6IGZ1bmN0aW9uKGJpdHMpeworCQkJdmFyIGQgPSBuZXcgRGF0ZSgpLmNsZWFyVGltZSgpOworCQkJc3dpdGNoIChiaXRzWzBdKXsKKwkJCQljYXNlICd0b20nOiByZXR1cm4gZC5pbmNyZW1lbnQoKTsKKwkJCQljYXNlICd5ZXMnOiByZXR1cm4gZC5kZWNyZW1lbnQoKTsKKwkJCQlkZWZhdWx0OiByZXR1cm4gZDsKKwkJCX0KKwkJfQorCX0sCisKKwl7CisJCS8vICJuZXh0IFdlZG5lc2RheSIsICJsYXN0IFRodXJzZGF5IgorCQlyZTogL14obmV4dHxsYXN0KSAoW2Etel0rKSQvaSwKKwkJaGFuZGxlcjogZnVuY3Rpb24oYml0cyl7CisJCQl2YXIgZCA9IG5ldyBEYXRlKCkuY2xlYXJUaW1lKCk7CisJCQl2YXIgZGF5ID0gZC5nZXREYXkoKTsKKwkJCXZhciBuZXdEYXkgPSBEYXRlLnBhcnNlRGF5KGJpdHNbMl0sIHRydWUpOworCQkJdmFyIGFkZERheXMgPSBuZXdEYXkgLSBkYXk7CisJCQlpZiAobmV3RGF5IDw9IGRheSkgYWRkRGF5cyArPSA3OworCQkJaWYgKGJpdHNbMV0gPT0gJ2xhc3QnKSBhZGREYXlzIC09IDc7CisJCQlyZXR1cm4gZC5zZXQoJ2RhdGUnLCBkLmdldERhdGUoKSArIGFkZERheXMpOworCQl9CisJfQorCispLmFsaWFzKCd0aW1lQWdvSW5Xb3JkcycsICd0aW1lRGlmZkluV29yZHMnKTsKKworLyoKKy0tLQorCituYW1lOiBIYXNoCisKK2Rlc2NyaXB0aW9uOiBDb250YWlucyBIYXNoIFByb3RvdHlwZXMuIFByb3ZpZGVzIGEgbWVhbnMgZm9yIG92ZXJjb21pbmcgdGhlIEphdmFTY3JpcHQgcHJhY3RpY2FsIGltcG9zc2liaWxpdHkgb2YgZXh0ZW5kaW5nIG5hdGl2ZSBPYmplY3RzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworcmVxdWlyZXM6CisgIC0gQ29yZS9PYmplY3QKKyAgLSBNb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbSGFzaF0KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKworaWYgKHRoaXMuSGFzaCkgcmV0dXJuOworCit2YXIgSGFzaCA9IHRoaXMuSGFzaCA9IG5ldyBUeXBlKCdIYXNoJywgZnVuY3Rpb24ob2JqZWN0KXsKKwlpZiAodHlwZU9mKG9iamVjdCkgPT0gJ2hhc2gnKSBvYmplY3QgPSBPYmplY3QuY2xvbmUob2JqZWN0LmdldENsZWFuKCkpOworCWZvciAodmFyIGtleSBpbiBvYmplY3QpIHRoaXNba2V5XSA9IG9iamVjdFtrZXldOworCXJldHVybiB0aGlzOworfSk7CisKK3RoaXMuJEggPSBmdW5jdGlvbihvYmplY3QpeworCXJldHVybiBuZXcgSGFzaChvYmplY3QpOworfTsKKworSGFzaC5pbXBsZW1lbnQoeworCisJZm9yRWFjaDogZnVuY3Rpb24oZm4sIGJpbmQpeworCQlPYmplY3QuZm9yRWFjaCh0aGlzLCBmbiwgYmluZCk7CisJfSwKKworCWdldENsZWFuOiBmdW5jdGlvbigpeworCQl2YXIgY2xlYW4gPSB7fTsKKwkJZm9yICh2YXIga2V5IGluIHRoaXMpeworCQkJaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSkgY2xlYW5ba2V5XSA9IHRoaXNba2V5XTsKKwkJfQorCQlyZXR1cm4gY2xlYW47CisJfSwKKworCWdldExlbmd0aDogZnVuY3Rpb24oKXsKKwkJdmFyIGxlbmd0aCA9IDA7CisJCWZvciAodmFyIGtleSBpbiB0aGlzKXsKKwkJCWlmICh0aGlzLmhhc093blByb3BlcnR5KGtleSkpIGxlbmd0aCsrOworCQl9CisJCXJldHVybiBsZW5ndGg7CisJfQorCit9KTsKKworSGFzaC5hbGlhcygnZWFjaCcsICdmb3JFYWNoJyk7CisKK0hhc2guaW1wbGVtZW50KHsKKworCWhhczogT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSwKKworCWtleU9mOiBmdW5jdGlvbih2YWx1ZSl7CisJCXJldHVybiBPYmplY3Qua2V5T2YodGhpcywgdmFsdWUpOworCX0sCisKKwloYXNWYWx1ZTogZnVuY3Rpb24odmFsdWUpeworCQlyZXR1cm4gT2JqZWN0LmNvbnRhaW5zKHRoaXMsIHZhbHVlKTsKKwl9LAorCisJZXh0ZW5kOiBmdW5jdGlvbihwcm9wZXJ0aWVzKXsKKwkJSGFzaC5lYWNoKHByb3BlcnRpZXMgfHwge30sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpeworCQkJSGFzaC5zZXQodGhpcywga2V5LCB2YWx1ZSk7CisJCX0sIHRoaXMpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJY29tYmluZTogZnVuY3Rpb24ocHJvcGVydGllcyl7CisJCUhhc2guZWFjaChwcm9wZXJ0aWVzIHx8IHt9LCBmdW5jdGlvbih2YWx1ZSwga2V5KXsKKwkJCUhhc2guaW5jbHVkZSh0aGlzLCBrZXksIHZhbHVlKTsKKwkJfSwgdGhpcyk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwllcmFzZTogZnVuY3Rpb24oa2V5KXsKKwkJaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSkgZGVsZXRlIHRoaXNba2V5XTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWdldDogZnVuY3Rpb24oa2V5KXsKKwkJcmV0dXJuICh0aGlzLmhhc093blByb3BlcnR5KGtleSkpID8gdGhpc1trZXldIDogbnVsbDsKKwl9LAorCisJc2V0OiBmdW5jdGlvbihrZXksIHZhbHVlKXsKKwkJaWYgKCF0aGlzW2tleV0gfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB0aGlzW2tleV0gPSB2YWx1ZTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWVtcHR5OiBmdW5jdGlvbigpeworCQlIYXNoLmVhY2godGhpcywgZnVuY3Rpb24odmFsdWUsIGtleSl7CisJCQlkZWxldGUgdGhpc1trZXldOworCQl9LCB0aGlzKTsKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWluY2x1ZGU6IGZ1bmN0aW9uKGtleSwgdmFsdWUpeworCQlpZiAodGhpc1trZXldID09IHVuZGVmaW5lZCkgdGhpc1trZXldID0gdmFsdWU7CisJCXJldHVybiB0aGlzOworCX0sCisKKwltYXA6IGZ1bmN0aW9uKGZuLCBiaW5kKXsKKwkJcmV0dXJuIG5ldyBIYXNoKE9iamVjdC5tYXAodGhpcywgZm4sIGJpbmQpKTsKKwl9LAorCisJZmlsdGVyOiBmdW5jdGlvbihmbiwgYmluZCl7CisJCXJldHVybiBuZXcgSGFzaChPYmplY3QuZmlsdGVyKHRoaXMsIGZuLCBiaW5kKSk7CisJfSwKKworCWV2ZXJ5OiBmdW5jdGlvbihmbiwgYmluZCl7CisJCXJldHVybiBPYmplY3QuZXZlcnkodGhpcywgZm4sIGJpbmQpOworCX0sCisKKwlzb21lOiBmdW5jdGlvbihmbiwgYmluZCl7CisJCXJldHVybiBPYmplY3Quc29tZSh0aGlzLCBmbiwgYmluZCk7CisJfSwKKworCWdldEtleXM6IGZ1bmN0aW9uKCl7CisJCXJldHVybiBPYmplY3Qua2V5cyh0aGlzKTsKKwl9LAorCisJZ2V0VmFsdWVzOiBmdW5jdGlvbigpeworCQlyZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzKTsKKwl9LAorCisJdG9RdWVyeVN0cmluZzogZnVuY3Rpb24oYmFzZSl7CisJCXJldHVybiBPYmplY3QudG9RdWVyeVN0cmluZyh0aGlzLCBiYXNlKTsKKwl9CisKK30pOworCitIYXNoLmFsaWFzKHtpbmRleE9mOiAna2V5T2YnLCBjb250YWluczogJ2hhc1ZhbHVlJ30pOworCisKK30pKCk7CisKKworLyoKKy0tLQorCitzY3JpcHQ6IEhhc2guRXh0cmFzLmpzCisKK25hbWU6IEhhc2guRXh0cmFzCisKK2Rlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBIYXNoIFR5cGUgdG8gaW5jbHVkZSBnZXRGcm9tUGF0aCB3aGljaCBhbGxvd3MgYSBwYXRoIG5vdGF0aW9uIHRvIGNoaWxkIGVsZW1lbnRzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSBIYXNoCisgIC0gT2JqZWN0LkV4dHJhcworCitwcm92aWRlczogW0hhc2guRXh0cmFzXQorCisuLi4KKyovCisKK0hhc2guaW1wbGVtZW50KHsKKworCWdldEZyb21QYXRoOiBmdW5jdGlvbihub3RhdGlvbil7CisJCXJldHVybiBPYmplY3QuZ2V0RnJvbVBhdGgodGhpcywgbm90YXRpb24pOworCX0sCisKKwljbGVhblZhbHVlczogZnVuY3Rpb24obWV0aG9kKXsKKwkJcmV0dXJuIG5ldyBIYXNoKE9iamVjdC5jbGVhblZhbHVlcyh0aGlzLCBtZXRob2QpKTsKKwl9LAorCisJcnVuOiBmdW5jdGlvbigpeworCQlPYmplY3QucnVuKGFyZ3VtZW50cyk7CisJfQorCit9KTsKKworLyoKKy0tLQorbmFtZTogTnVtYmVyLkZvcm1hdAorZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIE51bWJlciBUeXBlIG9iamVjdCB0byBpbmNsdWRlIGEgbnVtYmVyIGZvcm1hdHRpbmcgbWV0aG9kLgorbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKK2F1dGhvcnM6IFtBcmlhbiBTdG9sd2lqa10KK3JlcXVpcmVzOiBbQ29yZS9OdW1iZXIsIExvY2FsZS5lbi1VUy5OdW1iZXJdCisjIE51bWJlci5FeHRyYXMgaXMgZm9yIGNvbXBhdGliaWxpdHkKK3Byb3ZpZGVzOiBbTnVtYmVyLkZvcm1hdCwgTnVtYmVyLkV4dHJhc10KKy4uLgorKi8KKworCitOdW1iZXIuaW1wbGVtZW50KHsKKworCWZvcm1hdDogZnVuY3Rpb24ob3B0aW9ucyl7CisJCS8vIFRoYW5rcyBkb2pvIGFuZCBZVUkgZm9yIHNvbWUgaW5zcGlyYXRpb24KKwkJdmFyIHZhbHVlID0gdGhpczsKKwkJb3B0aW9ucyA9IG9wdGlvbnMgPyBPYmplY3QuY2xvbmUob3B0aW9ucykgOiB7fTsKKwkJdmFyIGdldE9wdGlvbiA9IGZ1bmN0aW9uKGtleSl7CisJCQlpZiAob3B0aW9uc1trZXldICE9IG51bGwpIHJldHVybiBvcHRpb25zW2tleV07CisJCQlyZXR1cm4gTG9jYWxlLmdldCgnTnVtYmVyLicgKyBrZXkpOworCQl9OworCisJCXZhciBuZWdhdGl2ZSA9IHZhbHVlIDwgMCwKKwkJCWRlY2ltYWwgPSBnZXRPcHRpb24oJ2RlY2ltYWwnKSwKKwkJCXByZWNpc2lvbiA9IGdldE9wdGlvbigncHJlY2lzaW9uJyksCisJCQlncm91cCA9IGdldE9wdGlvbignZ3JvdXAnKSwKKwkJCWRlY2ltYWxzID0gZ2V0T3B0aW9uKCdkZWNpbWFscycpOworCisJCWlmIChuZWdhdGl2ZSl7CisJCQl2YXIgbmVnYXRpdmVMb2NhbGUgPSBnZXRPcHRpb24oJ25lZ2F0aXZlJykgfHwge307CisJCQlpZiAobmVnYXRpdmVMb2NhbGUucHJlZml4ID09IG51bGwgJiYgbmVnYXRpdmVMb2NhbGUuc3VmZml4ID09IG51bGwpIG5lZ2F0aXZlTG9jYWxlLnByZWZpeCA9ICctJzsKKwkJCVsncHJlZml4JywgJ3N1ZmZpeCddLmVhY2goZnVuY3Rpb24oa2V5KXsKKwkJCQlpZiAobmVnYXRpdmVMb2NhbGVba2V5XSkgb3B0aW9uc1trZXldID0gZ2V0T3B0aW9uKGtleSkgKyBuZWdhdGl2ZUxvY2FsZVtrZXldOworCQkJfSk7CisKKwkJCXZhbHVlID0gLXZhbHVlOworCQl9CisKKwkJdmFyIHByZWZpeCA9IGdldE9wdGlvbigncHJlZml4JyksCisJCQlzdWZmaXggPSBnZXRPcHRpb24oJ3N1ZmZpeCcpOworCisJCWlmIChkZWNpbWFscyAhPT0gJycgJiYgZGVjaW1hbHMgPj0gMCAmJiBkZWNpbWFscyA8PSAyMCkgdmFsdWUgPSB2YWx1ZS50b0ZpeGVkKGRlY2ltYWxzKTsKKwkJaWYgKHByZWNpc2lvbiA+PSAxICYmIHByZWNpc2lvbiA8PSAyMSkgdmFsdWUgPSAoK3ZhbHVlKS50b1ByZWNpc2lvbihwcmVjaXNpb24pOworCisJCXZhbHVlICs9ICcnOworCQl2YXIgaW5kZXg7CisJCWlmIChnZXRPcHRpb24oJ3NjaWVudGlmaWMnKSA9PT0gZmFsc2UgJiYgdmFsdWUuaW5kZXhPZignZScpID4gLTEpeworCQkJdmFyIG1hdGNoID0gdmFsdWUuc3BsaXQoJ2UnKSwKKwkJCQl6ZXJvcyA9ICttYXRjaFsxXTsKKwkJCXZhbHVlID0gbWF0Y2hbMF0ucmVwbGFjZSgnLicsICcnKTsKKworCQkJaWYgKHplcm9zIDwgMCl7CisJCQkJemVyb3MgPSAtemVyb3MgLSAxOworCQkJCWluZGV4ID0gbWF0Y2hbMF0uaW5kZXhPZignLicpOworCQkJCWlmIChpbmRleCA+IC0xKSB6ZXJvcyAtPSBpbmRleCAtIDE7CisJCQkJd2hpbGUgKHplcm9zLS0pIHZhbHVlID0gJzAnICsgdmFsdWU7CisJCQkJdmFsdWUgPSAnMC4nICsgdmFsdWU7CisJCQl9IGVsc2UgeworCQkJCWluZGV4ID0gbWF0Y2hbMF0ubGFzdEluZGV4T2YoJy4nKTsKKwkJCQlpZiAoaW5kZXggPiAtMSkgemVyb3MgLT0gbWF0Y2hbMF0ubGVuZ3RoIC0gaW5kZXggLSAxOworCQkJCXdoaWxlICh6ZXJvcy0tKSB2YWx1ZSArPSAnMCc7CisJCQl9CisJCX0KKworCQlpZiAoZGVjaW1hbCAhPSAnLicpIHZhbHVlID0gdmFsdWUucmVwbGFjZSgnLicsIGRlY2ltYWwpOworCisJCWlmIChncm91cCl7CisJCQlpbmRleCA9IHZhbHVlLmxhc3RJbmRleE9mKGRlY2ltYWwpOworCQkJaW5kZXggPSAoaW5kZXggPiAtMSkgPyBpbmRleCA6IHZhbHVlLmxlbmd0aDsKKwkJCXZhciBuZXdPdXRwdXQgPSB2YWx1ZS5zdWJzdHJpbmcoaW5kZXgpLAorCQkJCWkgPSBpbmRleDsKKworCQkJd2hpbGUgKGktLSl7CisJCQkJaWYgKChpbmRleCAtIGkgLSAxKSAlIDMgPT0gMCAmJiBpICE9IChpbmRleCAtIDEpKSBuZXdPdXRwdXQgPSBncm91cCArIG5ld091dHB1dDsKKwkJCQluZXdPdXRwdXQgPSB2YWx1ZS5jaGFyQXQoaSkgKyBuZXdPdXRwdXQ7CisJCQl9CisKKwkJCXZhbHVlID0gbmV3T3V0cHV0OworCQl9CisKKwkJaWYgKHByZWZpeCkgdmFsdWUgPSBwcmVmaXggKyB2YWx1ZTsKKwkJaWYgKHN1ZmZpeCkgdmFsdWUgKz0gc3VmZml4OworCisJCXJldHVybiB2YWx1ZTsKKwl9LAorCisJZm9ybWF0Q3VycmVuY3k6IGZ1bmN0aW9uKGRlY2ltYWxzKXsKKwkJdmFyIGxvY2FsZSA9IExvY2FsZS5nZXQoJ051bWJlci5jdXJyZW5jeScpIHx8IHt9OworCQlpZiAobG9jYWxlLnNjaWVudGlmaWMgPT0gbnVsbCkgbG9jYWxlLnNjaWVudGlmaWMgPSBmYWxzZTsKKwkJbG9jYWxlLmRlY2ltYWxzID0gZGVjaW1hbHMgIT0gbnVsbCA/IGRlY2ltYWxzCisJCQk6IChsb2NhbGUuZGVjaW1hbHMgPT0gbnVsbCA/IDIgOiBsb2NhbGUuZGVjaW1hbHMpOworCisJCXJldHVybiB0aGlzLmZvcm1hdChsb2NhbGUpOworCX0sCisKKwlmb3JtYXRQZXJjZW50YWdlOiBmdW5jdGlvbihkZWNpbWFscyl7CisJCXZhciBsb2NhbGUgPSBMb2NhbGUuZ2V0KCdOdW1iZXIucGVyY2VudGFnZScpIHx8IHt9OworCQlpZiAobG9jYWxlLnN1ZmZpeCA9PSBudWxsKSBsb2NhbGUuc3VmZml4ID0gJyUnOworCQlsb2NhbGUuZGVjaW1hbHMgPSBkZWNpbWFscyAhPSBudWxsID8gZGVjaW1hbHMKKwkJCTogKGxvY2FsZS5kZWNpbWFscyA9PSBudWxsID8gMiA6IGxvY2FsZS5kZWNpbWFscyk7CisKKwkJcmV0dXJuIHRoaXMuZm9ybWF0KGxvY2FsZSk7CisJfQorCit9KTsKKworLyoKKy0tLQorCitzY3JpcHQ6IFVSSS5qcworCituYW1lOiBVUkkKKworZGVzY3JpcHRpb246IFByb3ZpZGVzIG1ldGhvZHMgdXNlZnVsIGluIG1hbmFnaW5nIHRoZSB3aW5kb3cgbG9jYXRpb24gYW5kIHVyaXMuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gU2ViYXN0aWFuIE1hcmtiw6VnZQorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSBDb3JlL09iamVjdAorICAtIENvcmUvQ2xhc3MKKyAgLSBDb3JlL0NsYXNzLkV4dHJhcworICAtIENvcmUvRWxlbWVudAorICAtIFN0cmluZy5RdWVyeVN0cmluZworCitwcm92aWRlczogW1VSSV0KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIHRvU3RyaW5nID0gZnVuY3Rpb24oKXsKKwlyZXR1cm4gdGhpcy5nZXQoJ3ZhbHVlJyk7Cit9OworCit2YXIgVVJJID0gdGhpcy5VUkkgPSBuZXcgQ2xhc3MoeworCisJSW1wbGVtZW50czogT3B0aW9ucywKKworCW9wdGlvbnM6IHsKKwkJLypiYXNlOiBmYWxzZSovCisJfSwKKworCXJlZ2V4OiAvXig/OihcdyspOik/KD86XC9cLyg/Oig/OihbXjpAXC9dKik6PyhbXjpAXC9dKikpP0ApPyhcW1tBLUZhLWYwLTk6XStcXXxbXjpcLz8jXSopKD86OihcZCopKT8pPyhcLlwuPyR8KD86W14/I1wvXSpcLykqKShbXj8jXSopKD86XD8oW14jXSopKT8oPzojKC4qKSk/LywKKwlwYXJ0czogWydzY2hlbWUnLCAndXNlcicsICdwYXNzd29yZCcsICdob3N0JywgJ3BvcnQnLCAnZGlyZWN0b3J5JywgJ2ZpbGUnLCAncXVlcnknLCAnZnJhZ21lbnQnXSwKKwlzY2hlbWVzOiB7aHR0cDogODAsIGh0dHBzOiA0NDMsIGZ0cDogMjEsIHJ0c3A6IDU1NCwgbW1zOiAxNzU1LCBmaWxlOiAwfSwKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKHVyaSwgb3B0aW9ucyl7CisJCXRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTsKKwkJdmFyIGJhc2UgPSB0aGlzLm9wdGlvbnMuYmFzZSB8fCBVUkkuYmFzZTsKKwkJaWYgKCF1cmkpIHVyaSA9IGJhc2U7CisKKwkJaWYgKHVyaSAmJiB1cmkucGFyc2VkKSB0aGlzLnBhcnNlZCA9IE9iamVjdC5jbG9uZSh1cmkucGFyc2VkKTsKKwkJZWxzZSB0aGlzLnNldCgndmFsdWUnLCB1cmkuaHJlZiB8fCB1cmkudG9TdHJpbmcoKSwgYmFzZSA/IG5ldyBVUkkoYmFzZSkgOiBmYWxzZSk7CisJfSwKKworCXBhcnNlOiBmdW5jdGlvbih2YWx1ZSwgYmFzZSl7CisJCXZhciBiaXRzID0gdmFsdWUubWF0Y2godGhpcy5yZWdleCk7CisJCWlmICghYml0cykgcmV0dXJuIGZhbHNlOworCQliaXRzLnNoaWZ0KCk7CisJCXJldHVybiB0aGlzLm1lcmdlKGJpdHMuYXNzb2NpYXRlKHRoaXMucGFydHMpLCBiYXNlKTsKKwl9LAorCisJbWVyZ2U6IGZ1bmN0aW9uKGJpdHMsIGJhc2UpeworCQlpZiAoKCFiaXRzIHx8ICFiaXRzLnNjaGVtZSkgJiYgKCFiYXNlIHx8ICFiYXNlLnNjaGVtZSkpIHJldHVybiBmYWxzZTsKKwkJaWYgKGJhc2UpeworCQkJdGhpcy5wYXJ0cy5ldmVyeShmdW5jdGlvbihwYXJ0KXsKKwkJCQlpZiAoYml0c1twYXJ0XSkgcmV0dXJuIGZhbHNlOworCQkJCWJpdHNbcGFydF0gPSBiYXNlW3BhcnRdIHx8ICcnOworCQkJCXJldHVybiB0cnVlOworCQkJfSk7CisJCX0KKwkJYml0cy5wb3J0ID0gYml0cy5wb3J0IHx8IHRoaXMuc2NoZW1lc1tiaXRzLnNjaGVtZS50b0xvd2VyQ2FzZSgpXTsKKwkJYml0cy5kaXJlY3RvcnkgPSBiaXRzLmRpcmVjdG9yeSA/IHRoaXMucGFyc2VEaXJlY3RvcnkoYml0cy5kaXJlY3RvcnksIGJhc2UgPyBiYXNlLmRpcmVjdG9yeSA6ICcnKSA6ICcvJzsKKwkJcmV0dXJuIGJpdHM7CisJfSwKKworCXBhcnNlRGlyZWN0b3J5OiBmdW5jdGlvbihkaXJlY3RvcnksIGJhc2VEaXJlY3RvcnkpeworCQlkaXJlY3RvcnkgPSAoZGlyZWN0b3J5LnN1YnN0cigwLCAxKSA9PSAnLycgPyAnJyA6IChiYXNlRGlyZWN0b3J5IHx8ICcvJykpICsgZGlyZWN0b3J5OworCQlpZiAoIWRpcmVjdG9yeS50ZXN0KFVSSS5yZWdzLmRpcmVjdG9yeURvdCkpIHJldHVybiBkaXJlY3Rvcnk7CisJCXZhciByZXN1bHQgPSBbXTsKKwkJZGlyZWN0b3J5LnJlcGxhY2UoVVJJLnJlZ3MuZW5kU2xhc2gsICcnKS5zcGxpdCgnLycpLmVhY2goZnVuY3Rpb24oZGlyKXsKKwkJCWlmIChkaXIgPT0gJy4uJyAmJiByZXN1bHQubGVuZ3RoID4gMCkgcmVzdWx0LnBvcCgpOworCQkJZWxzZSBpZiAoZGlyICE9ICcuJykgcmVzdWx0LnB1c2goZGlyKTsKKwkJfSk7CisJCXJldHVybiByZXN1bHQuam9pbignLycpICsgJy8nOworCX0sCisKKwljb21iaW5lOiBmdW5jdGlvbihiaXRzKXsKKwkJcmV0dXJuIGJpdHMudmFsdWUgfHwgYml0cy5zY2hlbWUgKyAnOi8vJyArCisJCQkoYml0cy51c2VyID8gYml0cy51c2VyICsgKGJpdHMucGFzc3dvcmQgPyAnOicgKyBiaXRzLnBhc3N3b3JkIDogJycpICsgJ0AnIDogJycpICsKKwkJCShiaXRzLmhvc3QgfHwgJycpICsgKGJpdHMucG9ydCAmJiBiaXRzLnBvcnQgIT0gdGhpcy5zY2hlbWVzW2JpdHMuc2NoZW1lXSA/ICc6JyArIGJpdHMucG9ydCA6ICcnKSArCisJCQkoYml0cy5kaXJlY3RvcnkgfHwgJy8nKSArIChiaXRzLmZpbGUgfHwgJycpICsKKwkJCShiaXRzLnF1ZXJ5ID8gJz8nICsgYml0cy5xdWVyeSA6ICcnKSArCisJCQkoYml0cy5mcmFnbWVudCA/ICcjJyArIGJpdHMuZnJhZ21lbnQgOiAnJyk7CisJfSwKKworCXNldDogZnVuY3Rpb24ocGFydCwgdmFsdWUsIGJhc2UpeworCQlpZiAocGFydCA9PSAndmFsdWUnKXsKKwkJCXZhciBzY2hlbWUgPSB2YWx1ZS5tYXRjaChVUkkucmVncy5zY2hlbWUpOworCQkJaWYgKHNjaGVtZSkgc2NoZW1lID0gc2NoZW1lWzFdOworCQkJaWYgKHNjaGVtZSAmJiB0aGlzLnNjaGVtZXNbc2NoZW1lLnRvTG93ZXJDYXNlKCldID09IG51bGwpIHRoaXMucGFyc2VkID0geyBzY2hlbWU6IHNjaGVtZSwgdmFsdWU6IHZhbHVlIH07CisJCQllbHNlIHRoaXMucGFyc2VkID0gdGhpcy5wYXJzZSh2YWx1ZSwgKGJhc2UgfHwgdGhpcykucGFyc2VkKSB8fCAoc2NoZW1lID8geyBzY2hlbWU6IHNjaGVtZSwgdmFsdWU6IHZhbHVlIH0gOiB7IHZhbHVlOiB2YWx1ZSB9KTsKKwkJfSBlbHNlIGlmIChwYXJ0ID09ICdkYXRhJyl7CisJCQl0aGlzLnNldERhdGEodmFsdWUpOworCQl9IGVsc2UgeworCQkJdGhpcy5wYXJzZWRbcGFydF0gPSB2YWx1ZTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJZ2V0OiBmdW5jdGlvbihwYXJ0LCBiYXNlKXsKKwkJc3dpdGNoIChwYXJ0KXsKKwkJCWNhc2UgJ3ZhbHVlJzogcmV0dXJuIHRoaXMuY29tYmluZSh0aGlzLnBhcnNlZCwgYmFzZSA/IGJhc2UucGFyc2VkIDogZmFsc2UpOworCQkJY2FzZSAnZGF0YScgOiByZXR1cm4gdGhpcy5nZXREYXRhKCk7CisJCX0KKwkJcmV0dXJuIHRoaXMucGFyc2VkW3BhcnRdIHx8ICcnOworCX0sCisKKwlnbzogZnVuY3Rpb24oKXsKKwkJZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IHRoaXMudG9TdHJpbmcoKTsKKwl9LAorCisJdG9VUkk6IGZ1bmN0aW9uKCl7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlnZXREYXRhOiBmdW5jdGlvbihrZXksIHBhcnQpeworCQl2YXIgcXMgPSB0aGlzLmdldChwYXJ0IHx8ICdxdWVyeScpOworCQlpZiAoIShxcyB8fCBxcyA9PT0gMCkpIHJldHVybiBrZXkgPyBudWxsIDoge307CisJCXZhciBvYmogPSBxcy5wYXJzZVF1ZXJ5U3RyaW5nKCk7CisJCXJldHVybiBrZXkgPyBvYmpba2V5XSA6IG9iajsKKwl9LAorCisJc2V0RGF0YTogZnVuY3Rpb24odmFsdWVzLCBtZXJnZSwgcGFydCl7CisJCWlmICh0eXBlb2YgdmFsdWVzID09ICdzdHJpbmcnKXsKKwkJCXZhciBkYXRhID0gdGhpcy5nZXREYXRhKCk7CisJCQlkYXRhW2FyZ3VtZW50c1swXV0gPSBhcmd1bWVudHNbMV07CisJCQl2YWx1ZXMgPSBkYXRhOworCQl9IGVsc2UgaWYgKG1lcmdlKXsKKwkJCXZhbHVlcyA9IE9iamVjdC5tZXJnZSh0aGlzLmdldERhdGEobnVsbCwgcGFydCksIHZhbHVlcyk7CisJCX0KKwkJcmV0dXJuIHRoaXMuc2V0KHBhcnQgfHwgJ3F1ZXJ5JywgT2JqZWN0LnRvUXVlcnlTdHJpbmcodmFsdWVzKSk7CisJfSwKKworCWNsZWFyRGF0YTogZnVuY3Rpb24ocGFydCl7CisJCXJldHVybiB0aGlzLnNldChwYXJ0IHx8ICdxdWVyeScsICcnKTsKKwl9LAorCisJdG9TdHJpbmc6IHRvU3RyaW5nLAorCXZhbHVlT2Y6IHRvU3RyaW5nCisKK30pOworCitVUkkucmVncyA9IHsKKwllbmRTbGFzaDogL1wvJC8sCisJc2NoZW1lOiAvXihcdyspOi8sCisJZGlyZWN0b3J5RG90OiAvXC5cL3xcLiQvCit9OworCitVUkkuYmFzZSA9IG5ldyBVUkkoQXJyYXkuY29udmVydChkb2N1bWVudC5nZXRFbGVtZW50cygnYmFzZVtocmVmXScsIHRydWUpKS5nZXRMYXN0KCksIHtiYXNlOiBkb2N1bWVudC5sb2NhdGlvbn0pOworCitTdHJpbmcuaW1wbGVtZW50KHsKKworCXRvVVJJOiBmdW5jdGlvbihvcHRpb25zKXsKKwkJcmV0dXJuIG5ldyBVUkkodGhpcywgb3B0aW9ucyk7CisJfQorCit9KTsKKworfSkoKTsKKworLyoKKy0tLQorCitzY3JpcHQ6IFVSSS5SZWxhdGl2ZS5qcworCituYW1lOiBVUkkuUmVsYXRpdmUKKworZGVzY3JpcHRpb246IEV4dGVuZHMgdGhlIFVSSSBjbGFzcyB0byBhZGQgbWV0aG9kcyBmb3IgY29tcHV0aW5nIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSB1cmxzLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorCithdXRob3JzOgorICAtIFNlYmFzdGlhbiBNYXJrYsOlZ2UKKworCityZXF1aXJlczoKKyAgLSBDbGFzcy5yZWZhY3RvcgorICAtIFVSSQorCitwcm92aWRlczogW1VSSS5SZWxhdGl2ZV0KKworLi4uCisqLworCitVUkkgPSBDbGFzcy5yZWZhY3RvcihVUkksIHsKKworCWNvbWJpbmU6IGZ1bmN0aW9uKGJpdHMsIGJhc2UpeworCQlpZiAoIWJhc2UgfHwgYml0cy5zY2hlbWUgIT0gYmFzZS5zY2hlbWUgfHwgYml0cy5ob3N0ICE9IGJhc2UuaG9zdCB8fCBiaXRzLnBvcnQgIT0gYmFzZS5wb3J0KQorCQkJcmV0dXJuIHRoaXMucHJldmlvdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKwkJdmFyIGVuZCA9IGJpdHMuZmlsZSArIChiaXRzLnF1ZXJ5ID8gJz8nICsgYml0cy5xdWVyeSA6ICcnKSArIChiaXRzLmZyYWdtZW50ID8gJyMnICsgYml0cy5mcmFnbWVudCA6ICcnKTsKKworCQlpZiAoIWJhc2UuZGlyZWN0b3J5KSByZXR1cm4gKGJpdHMuZGlyZWN0b3J5IHx8IChiaXRzLmZpbGUgPyAnJyA6ICcuLycpKSArIGVuZDsKKworCQl2YXIgYmFzZURpciA9IGJhc2UuZGlyZWN0b3J5LnNwbGl0KCcvJyksCisJCQlyZWxEaXIgPSBiaXRzLmRpcmVjdG9yeS5zcGxpdCgnLycpLAorCQkJcGF0aCA9ICcnLAorCQkJb2Zmc2V0OworCisJCXZhciBpID0gMDsKKwkJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBiYXNlRGlyLmxlbmd0aCAmJiBvZmZzZXQgPCByZWxEaXIubGVuZ3RoICYmIGJhc2VEaXJbb2Zmc2V0XSA9PSByZWxEaXJbb2Zmc2V0XTsgb2Zmc2V0KyspOworCQlmb3IgKGkgPSAwOyBpIDwgYmFzZURpci5sZW5ndGggLSBvZmZzZXQgLSAxOyBpKyspIHBhdGggKz0gJy4uLyc7CisJCWZvciAoaSA9IG9mZnNldDsgaSA8IHJlbERpci5sZW5ndGggLSAxOyBpKyspIHBhdGggKz0gcmVsRGlyW2ldICsgJy8nOworCisJCXJldHVybiAocGF0aCB8fCAoYml0cy5maWxlID8gJycgOiAnLi8nKSkgKyBlbmQ7CisJfSwKKworCXRvQWJzb2x1dGU6IGZ1bmN0aW9uKGJhc2UpeworCQliYXNlID0gbmV3IFVSSShiYXNlKTsKKwkJaWYgKGJhc2UpIGJhc2Uuc2V0KCdkaXJlY3RvcnknLCAnJykuc2V0KCdmaWxlJywgJycpOworCQlyZXR1cm4gdGhpcy50b1JlbGF0aXZlKGJhc2UpOworCX0sCisKKwl0b1JlbGF0aXZlOiBmdW5jdGlvbihiYXNlKXsKKwkJcmV0dXJuIHRoaXMuZ2V0KCd2YWx1ZScsIG5ldyBVUkkoYmFzZSkpOworCX0KKworfSk7CisKKy8qCistLS0KKworc2NyaXB0OiBBc3NldHMuanMKKworbmFtZTogQXNzZXRzCisKK2Rlc2NyaXB0aW9uOiBQcm92aWRlcyBtZXRob2RzIHRvIGR5bmFtaWNhbGx5IGxvYWQgSmF2YVNjcmlwdCwgQ1NTLCBhbmQgSW1hZ2UgZmlsZXMgaW50byB0aGUgZG9jdW1lbnQuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gVmFsZXJpbyBQcm9pZXR0aQorCityZXF1aXJlczoKKyAgLSBDb3JlL0VsZW1lbnQuRXZlbnQKKyAgLSBNb29Ub29scy5Nb3JlCisKK3Byb3ZpZGVzOiBbQXNzZXRzLCBBc3NldC5qYXZhc2NyaXB0LCBBc3NldC5jc3MsIEFzc2V0LmltYWdlLCBBc3NldC5pbWFnZXNdCisKKy4uLgorKi8KKzsoZnVuY3Rpb24oKXsKKwordmFyIEFzc2V0ID0gdGhpcy5Bc3NldCA9IHsKKworCWphdmFzY3JpcHQ6IGZ1bmN0aW9uKHNvdXJjZSwgcHJvcGVydGllcyl7CisJCWlmICghcHJvcGVydGllcykgcHJvcGVydGllcyA9IHt9OworCisJCXZhciBzY3JpcHQgPSBuZXcgRWxlbWVudCgnc2NyaXB0Jywge3NyYzogc291cmNlLCB0eXBlOiAndGV4dC9qYXZhc2NyaXB0J30pLAorCQkJZG9jID0gcHJvcGVydGllcy5kb2N1bWVudCB8fCBkb2N1bWVudCwKKwkJCWxvYWQgPSBwcm9wZXJ0aWVzLm9ubG9hZCB8fCBwcm9wZXJ0aWVzLm9uTG9hZDsKKworCQlkZWxldGUgcHJvcGVydGllcy5vbmxvYWQ7CisJCWRlbGV0ZSBwcm9wZXJ0aWVzLm9uTG9hZDsKKwkJZGVsZXRlIHByb3BlcnRpZXMuZG9jdW1lbnQ7CisKKwkJaWYgKGxvYWQpeworCQkJaWYgKCFzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcil7CisJCQkJc2NyaXB0LmFkZEV2ZW50KCdyZWFkeXN0YXRlY2hhbmdlJywgZnVuY3Rpb24oKXsKKwkJCQkJaWYgKFsnbG9hZGVkJywgJ2NvbXBsZXRlJ10uY29udGFpbnModGhpcy5yZWFkeVN0YXRlKSkgbG9hZC5jYWxsKHRoaXMpOworCQkJCX0pOworCQkJfSBlbHNlIHsKKwkJCQlzY3JpcHQuYWRkRXZlbnQoJ2xvYWQnLCBsb2FkKTsKKwkJCX0KKwkJfQorCisJCXJldHVybiBzY3JpcHQuc2V0KHByb3BlcnRpZXMpLmluamVjdChkb2MuaGVhZCk7CisJfSwKKworCWNzczogZnVuY3Rpb24oc291cmNlLCBwcm9wZXJ0aWVzKXsKKwkJaWYgKCFwcm9wZXJ0aWVzKSBwcm9wZXJ0aWVzID0ge307CisKKwkJdmFyIGxvYWQgPSBwcm9wZXJ0aWVzLm9ubG9hZCB8fCBwcm9wZXJ0aWVzLm9uTG9hZCwKKwkJCWRvYyA9IHByb3BlcnRpZXMuZG9jdW1lbnQgfHwgZG9jdW1lbnQsCisJCQl0aW1lb3V0ID0gcHJvcGVydGllcy50aW1lb3V0IHx8IDMwMDA7CisKKwkJWydvbmxvYWQnLCAnb25Mb2FkJywgJ2RvY3VtZW50J10uZWFjaChmdW5jdGlvbihwcm9wKXsKKwkJCWRlbGV0ZSBwcm9wZXJ0aWVzW3Byb3BdOworCQl9KTsKKworCQl2YXIgbGluayA9IG5ldyBFbGVtZW50KCdsaW5rJywgeworCQkJdHlwZTogJ3RleHQvY3NzJywKKwkJCXJlbDogJ3N0eWxlc2hlZXQnLAorCQkJbWVkaWE6ICdzY3JlZW4nLAorCQkJaHJlZjogc291cmNlCisJCX0pLnNldFByb3BlcnRpZXMocHJvcGVydGllcykuaW5qZWN0KGRvYy5oZWFkKTsKKworCQlpZiAobG9hZCl7CisJCQkvLyBiYXNlZCBvbiBhcnRpY2xlIGF0IGh0dHA6Ly93d3cueWVhcm9mbW9vLmNvbS8yMDExLzAzL2Nyb3NzLWJyb3dzZXItc3R5bGVzaGVldC1wcmVsb2FkaW5nLmh0bWwKKwkJCXZhciBsb2FkZWQgPSBmYWxzZSwgcmV0cmllcyA9IDA7CisJCQl2YXIgY2hlY2sgPSBmdW5jdGlvbigpeworCQkJCXZhciBzdHlsZXNoZWV0cyA9IGRvY3VtZW50LnN0eWxlU2hlZXRzOworCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzaGVldHMubGVuZ3RoOyBpKyspeworCQkJCQl2YXIgZmlsZSA9IHN0eWxlc2hlZXRzW2ldOworCQkJCQl2YXIgb3duZXIgPSBmaWxlLm93bmVyTm9kZSA/IGZpbGUub3duZXJOb2RlIDogZmlsZS5vd25pbmdFbGVtZW50OworCQkJCQlpZiAob3duZXIgJiYgb3duZXIgPT0gbGluayl7CisJCQkJCQlsb2FkZWQgPSB0cnVlOworCQkJCQkJcmV0dXJuIGxvYWQuY2FsbChsaW5rKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlyZXRyaWVzKys7CisJCQkJaWYgKCFsb2FkZWQgJiYgcmV0cmllcyA8IHRpbWVvdXQgLyA1MCkgcmV0dXJuIHNldFRpbWVvdXQoY2hlY2ssIDUwKTsKKwkJCX07CisJCQlzZXRUaW1lb3V0KGNoZWNrLCAwKTsKKwkJfQorCQlyZXR1cm4gbGluazsKKwl9LAorCisJaW1hZ2U6IGZ1bmN0aW9uKHNvdXJjZSwgcHJvcGVydGllcyl7CisJCWlmICghcHJvcGVydGllcykgcHJvcGVydGllcyA9IHt9OworCisJCXZhciBpbWFnZSA9IG5ldyBJbWFnZSgpLAorCQkJZWxlbWVudCA9IGRvY3VtZW50LmlkKGltYWdlKSB8fCBuZXcgRWxlbWVudCgnaW1nJyk7CisKKwkJWydsb2FkJywgJ2Fib3J0JywgJ2Vycm9yJ10uZWFjaChmdW5jdGlvbihuYW1lKXsKKwkJCXZhciB0eXBlID0gJ29uJyArIG5hbWUsCisJCQkJY2FwID0gJ29uJyArIG5hbWUuY2FwaXRhbGl6ZSgpLAorCQkJCWV2ZW50ID0gcHJvcGVydGllc1t0eXBlXSB8fCBwcm9wZXJ0aWVzW2NhcF0gfHwgZnVuY3Rpb24oKXt9OworCisJCQlkZWxldGUgcHJvcGVydGllc1tjYXBdOworCQkJZGVsZXRlIHByb3BlcnRpZXNbdHlwZV07CisKKwkJCWltYWdlW3R5cGVdID0gZnVuY3Rpb24oKXsKKwkJCQlpZiAoIWltYWdlKSByZXR1cm47CisJCQkJaWYgKCFlbGVtZW50LnBhcmVudE5vZGUpeworCQkJCQllbGVtZW50LndpZHRoID0gaW1hZ2Uud2lkdGg7CisJCQkJCWVsZW1lbnQuaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0OworCQkJCX0KKwkJCQlpbWFnZSA9IGltYWdlLm9ubG9hZCA9IGltYWdlLm9uYWJvcnQgPSBpbWFnZS5vbmVycm9yID0gbnVsbDsKKwkJCQlldmVudC5kZWxheSgxLCBlbGVtZW50LCBlbGVtZW50KTsKKwkJCQllbGVtZW50LmZpcmVFdmVudChuYW1lLCBlbGVtZW50LCAxKTsKKwkJCX07CisJCX0pOworCisJCWltYWdlLnNyYyA9IGVsZW1lbnQuc3JjID0gc291cmNlOworCQlpZiAoaW1hZ2UgJiYgaW1hZ2UuY29tcGxldGUpIGltYWdlLm9ubG9hZC5kZWxheSgxKTsKKwkJcmV0dXJuIGVsZW1lbnQuc2V0KHByb3BlcnRpZXMpOworCX0sCisKKwlpbWFnZXM6IGZ1bmN0aW9uKHNvdXJjZXMsIG9wdGlvbnMpeworCQlzb3VyY2VzID0gQXJyYXkuY29udmVydChzb3VyY2VzKTsKKworCQl2YXIgZm4gPSBmdW5jdGlvbigpe30sCisJCQljb3VudGVyID0gMDsKKworCQlvcHRpb25zID0gT2JqZWN0Lm1lcmdlKHsKKwkJCW9uQ29tcGxldGU6IGZuLAorCQkJb25Qcm9ncmVzczogZm4sCisJCQlvbkVycm9yOiBmbiwKKwkJCXByb3BlcnRpZXM6IHt9CisJCX0sIG9wdGlvbnMpOworCisJCXJldHVybiBuZXcgRWxlbWVudHMoc291cmNlcy5tYXAoZnVuY3Rpb24oc291cmNlLCBpbmRleCl7CisJCQlyZXR1cm4gQXNzZXQuaW1hZ2Uoc291cmNlLCBPYmplY3QuYXBwZW5kKG9wdGlvbnMucHJvcGVydGllcywgeworCQkJCW9ubG9hZDogZnVuY3Rpb24oKXsKKwkJCQkJY291bnRlcisrOworCQkJCQlvcHRpb25zLm9uUHJvZ3Jlc3MuY2FsbCh0aGlzLCBjb3VudGVyLCBpbmRleCwgc291cmNlKTsKKwkJCQkJaWYgKGNvdW50ZXIgPT0gc291cmNlcy5sZW5ndGgpIG9wdGlvbnMub25Db21wbGV0ZSgpOworCQkJCX0sCisJCQkJb25lcnJvcjogZnVuY3Rpb24oKXsKKwkJCQkJY291bnRlcisrOworCQkJCQlvcHRpb25zLm9uRXJyb3IuY2FsbCh0aGlzLCBjb3VudGVyLCBpbmRleCwgc291cmNlKTsKKwkJCQkJaWYgKGNvdW50ZXIgPT0gc291cmNlcy5sZW5ndGgpIG9wdGlvbnMub25Db21wbGV0ZSgpOworCQkJCX0KKwkJCX0pKTsKKwkJfSkpOworCX0KKworfTsKKworfSkoKTsKKworLyoKKy0tLQorCitzY3JpcHQ6IENvbG9yLmpzCisKK25hbWU6IENvbG9yCisKK2Rlc2NyaXB0aW9uOiBDbGFzcyBmb3IgY3JlYXRpbmcgYW5kIG1hbmlwdWxhdGluZyBjb2xvcnMgaW4gSmF2YVNjcmlwdC4gU3VwcG9ydHMgSFNCIC0+IFJHQiBDb252ZXJzaW9ucyBhbmQgdmljZSB2ZXJzYS4KKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworYXV0aG9yczoKKyAgLSBWYWxlcmlvIFByb2lldHRpCisKK3JlcXVpcmVzOgorICAtIENvcmUvQXJyYXkKKyAgLSBDb3JlL1N0cmluZworICAtIENvcmUvTnVtYmVyCisgIC0gQ29yZS9IYXNoCisgIC0gQ29yZS9GdW5jdGlvbgorICAtIE1vb1Rvb2xzLk1vcmUKKworcHJvdmlkZXM6IFtDb2xvcl0KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIENvbG9yID0gdGhpcy5Db2xvciA9IG5ldyBUeXBlKCdDb2xvcicsIGZ1bmN0aW9uKGNvbG9yLCB0eXBlKXsKKwlpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAzKXsKKwkJdHlwZSA9ICdyZ2InOyBjb2xvciA9IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMCwgMyk7CisJfSBlbHNlIGlmICh0eXBlb2YgY29sb3IgPT0gJ3N0cmluZycpeworCQlpZiAoY29sb3IubWF0Y2goL3JnYi8pKSBjb2xvciA9IGNvbG9yLnJnYlRvSGV4KCkuaGV4VG9SZ2IodHJ1ZSk7CisJCWVsc2UgaWYgKGNvbG9yLm1hdGNoKC9oc2IvKSkgY29sb3IgPSBjb2xvci5oc2JUb1JnYigpOworCQllbHNlIGNvbG9yID0gY29sb3IuaGV4VG9SZ2IodHJ1ZSk7CisJfQorCXR5cGUgPSB0eXBlIHx8ICdyZ2InOworCXN3aXRjaCAodHlwZSl7CisJCWNhc2UgJ2hzYic6CisJCQl2YXIgb2xkID0gY29sb3I7CisJCQljb2xvciA9IGNvbG9yLmhzYlRvUmdiKCk7CisJCQljb2xvci5oc2IgPSBvbGQ7CisJCQlicmVhazsKKwkJY2FzZSAnaGV4JzogY29sb3IgPSBjb2xvci5oZXhUb1JnYih0cnVlKTsgYnJlYWs7CisJfQorCWNvbG9yLnJnYiA9IGNvbG9yLnNsaWNlKDAsIDMpOworCWNvbG9yLmhzYiA9IGNvbG9yLmhzYiB8fCBjb2xvci5yZ2JUb0hzYigpOworCWNvbG9yLmhleCA9IGNvbG9yLnJnYlRvSGV4KCk7CisJcmV0dXJuIE9iamVjdC5hcHBlbmQoY29sb3IsIHRoaXMpOworfSk7CisKK0NvbG9yLmltcGxlbWVudCh7CisKKwltaXg6IGZ1bmN0aW9uKCl7CisJCXZhciBjb2xvcnMgPSBBcnJheS5zbGljZShhcmd1bWVudHMpOworCQl2YXIgYWxwaGEgPSAodHlwZU9mKGNvbG9ycy5nZXRMYXN0KCkpID09ICdudW1iZXInKSA/IGNvbG9ycy5wb3AoKSA6IDUwOworCQl2YXIgcmdiID0gdGhpcy5zbGljZSgpOworCQljb2xvcnMuZWFjaChmdW5jdGlvbihjb2xvcil7CisJCQljb2xvciA9IG5ldyBDb2xvcihjb2xvcik7CisJCQlmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykgcmdiW2ldID0gTWF0aC5yb3VuZCgocmdiW2ldIC8gMTAwICogKDEwMCAtIGFscGhhKSkgKyAoY29sb3JbaV0gLyAxMDAgKiBhbHBoYSkpOworCQl9KTsKKwkJcmV0dXJuIG5ldyBDb2xvcihyZ2IsICdyZ2InKTsKKwl9LAorCisJaW52ZXJ0OiBmdW5jdGlvbigpeworCQlyZXR1cm4gbmV3IENvbG9yKHRoaXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKKwkJCXJldHVybiAyNTUgLSB2YWx1ZTsKKwkJfSkpOworCX0sCisKKwlzZXRIdWU6IGZ1bmN0aW9uKHZhbHVlKXsKKwkJcmV0dXJuIG5ldyBDb2xvcihbdmFsdWUsIHRoaXMuaHNiWzFdLCB0aGlzLmhzYlsyXV0sICdoc2InKTsKKwl9LAorCisJc2V0U2F0dXJhdGlvbjogZnVuY3Rpb24ocGVyY2VudCl7CisJCXJldHVybiBuZXcgQ29sb3IoW3RoaXMuaHNiWzBdLCBwZXJjZW50LCB0aGlzLmhzYlsyXV0sICdoc2InKTsKKwl9LAorCisJc2V0QnJpZ2h0bmVzczogZnVuY3Rpb24ocGVyY2VudCl7CisJCXJldHVybiBuZXcgQ29sb3IoW3RoaXMuaHNiWzBdLCB0aGlzLmhzYlsxXSwgcGVyY2VudF0sICdoc2InKTsKKwl9CisKK30pOworCit0aGlzLiRSR0IgPSBmdW5jdGlvbihyLCBnLCBiKXsKKwlyZXR1cm4gbmV3IENvbG9yKFtyLCBnLCBiXSwgJ3JnYicpOworfTsKKwordGhpcy4kSFNCID0gZnVuY3Rpb24oaCwgcywgYil7CisJcmV0dXJuIG5ldyBDb2xvcihbaCwgcywgYl0sICdoc2InKTsKK307CisKK3RoaXMuJEhFWCA9IGZ1bmN0aW9uKGhleCl7CisJcmV0dXJuIG5ldyBDb2xvcihoZXgsICdoZXgnKTsKK307CisKK0FycmF5LmltcGxlbWVudCh7CisKKwlyZ2JUb0hzYjogZnVuY3Rpb24oKXsKKwkJdmFyIHJlZCA9IHRoaXNbMF0sCisJCQlncmVlbiA9IHRoaXNbMV0sCisJCQlibHVlID0gdGhpc1syXSwKKwkJCWh1ZSA9IDAsCisJCQltYXggPSBNYXRoLm1heChyZWQsIGdyZWVuLCBibHVlKSwKKwkJCW1pbiA9IE1hdGgubWluKHJlZCwgZ3JlZW4sIGJsdWUpLAorCQkJZGVsdGEgPSBtYXggLSBtaW4sCisJCQlicmlnaHRuZXNzID0gbWF4IC8gMjU1LAorCQkJc2F0dXJhdGlvbiA9IChtYXggIT0gMCkgPyBkZWx0YSAvIG1heCA6IDA7CisKKwkJaWYgKHNhdHVyYXRpb24gIT0gMCl7CisJCQl2YXIgcnIgPSAobWF4IC0gcmVkKSAvIGRlbHRhOworCQkJdmFyIGdyID0gKG1heCAtIGdyZWVuKSAvIGRlbHRhOworCQkJdmFyIGJyID0gKG1heCAtIGJsdWUpIC8gZGVsdGE7CisJCQlpZiAocmVkID09IG1heCkgaHVlID0gYnIgLSBncjsKKwkJCWVsc2UgaWYgKGdyZWVuID09IG1heCkgaHVlID0gMiArIHJyIC0gYnI7CisJCQllbHNlIGh1ZSA9IDQgKyBnciAtIHJyOworCQkJaHVlIC89IDY7CisJCQlpZiAoaHVlIDwgMCkgaHVlKys7CisJCX0KKwkJcmV0dXJuIFtNYXRoLnJvdW5kKGh1ZSAqIDM2MCksIE1hdGgucm91bmQoc2F0dXJhdGlvbiAqIDEwMCksIE1hdGgucm91bmQoYnJpZ2h0bmVzcyAqIDEwMCldOworCX0sCisKKwloc2JUb1JnYjogZnVuY3Rpb24oKXsKKwkJdmFyIGJyID0gTWF0aC5yb3VuZCh0aGlzWzJdIC8gMTAwICogMjU1KTsKKwkJaWYgKHRoaXNbMV0gPT0gMCl7CisJCQlyZXR1cm4gW2JyLCBiciwgYnJdOworCQl9IGVsc2UgeworCQkJdmFyIGh1ZSA9IHRoaXNbMF0gJSAzNjA7CisJCQl2YXIgZiA9IGh1ZSAlIDYwOworCQkJdmFyIHAgPSBNYXRoLnJvdW5kKCh0aGlzWzJdICogKDEwMCAtIHRoaXNbMV0pKSAvIDEwMDAwICogMjU1KTsKKwkJCXZhciBxID0gTWF0aC5yb3VuZCgodGhpc1syXSAqICg2MDAwIC0gdGhpc1sxXSAqIGYpKSAvIDYwMDAwMCAqIDI1NSk7CisJCQl2YXIgdCA9IE1hdGgucm91bmQoKHRoaXNbMl0gKiAoNjAwMCAtIHRoaXNbMV0gKiAoNjAgLSBmKSkpIC8gNjAwMDAwICogMjU1KTsKKwkJCXN3aXRjaCAoTWF0aC5mbG9vcihodWUgLyA2MCkpeworCQkJCWNhc2UgMDogcmV0dXJuIFticiwgdCwgcF07CisJCQkJY2FzZSAxOiByZXR1cm4gW3EsIGJyLCBwXTsKKwkJCQljYXNlIDI6IHJldHVybiBbcCwgYnIsIHRdOworCQkJCWNhc2UgMzogcmV0dXJuIFtwLCBxLCBicl07CisJCQkJY2FzZSA0OiByZXR1cm4gW3QsIHAsIGJyXTsKKwkJCQljYXNlIDU6IHJldHVybiBbYnIsIHAsIHFdOworCQkJfQorCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKK30pOworCitTdHJpbmcuaW1wbGVtZW50KHsKKworCXJnYlRvSHNiOiBmdW5jdGlvbigpeworCQl2YXIgcmdiID0gdGhpcy5tYXRjaCgvXGR7MSwzfS9nKTsKKwkJcmV0dXJuIChyZ2IpID8gcmdiLnJnYlRvSHNiKCkgOiBudWxsOworCX0sCisKKwloc2JUb1JnYjogZnVuY3Rpb24oKXsKKwkJdmFyIGhzYiA9IHRoaXMubWF0Y2goL1xkezEsM30vZyk7CisJCXJldHVybiAoaHNiKSA/IGhzYi5oc2JUb1JnYigpIDogbnVsbDsKKwl9CisKK30pOworCit9KSgpOworCisKKy8qCistLS0KKworc2NyaXB0OiBHcm91cC5qcworCituYW1lOiBHcm91cAorCitkZXNjcmlwdGlvbjogQ2xhc3MgZm9yIG1vbml0b3JpbmcgY29sbGVjdGlvbnMgb2YgZXZlbnRzCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gVmFsZXJpbyBQcm9pZXR0aQorCityZXF1aXJlczoKKyAgLSBDb3JlL0V2ZW50cworICAtIE1vb1Rvb2xzLk1vcmUKKworcHJvdmlkZXM6IFtHcm91cF0KKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIEdyb3VwID0gdGhpcy5Hcm91cCA9IG5ldyBDbGFzcyh7CisKKwlpbml0aWFsaXplOiBmdW5jdGlvbigpeworCQl0aGlzLmluc3RhbmNlcyA9IEFycmF5LmZsYXR0ZW4oYXJndW1lbnRzKTsKKwl9LAorCisJYWRkRXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGZuKXsKKwkJdmFyIGluc3RhbmNlcyA9IHRoaXMuaW5zdGFuY2VzLAorCQkJbGVuID0gaW5zdGFuY2VzLmxlbmd0aCwKKwkJCXRvZ28gPSBsZW4sCisJCQlhcmdzID0gbmV3IEFycmF5KGxlbiksCisJCQlzZWxmID0gdGhpczsKKworCQlpbnN0YW5jZXMuZWFjaChmdW5jdGlvbihpbnN0YW5jZSwgaSl7CisJCQlpbnN0YW5jZS5hZGRFdmVudCh0eXBlLCBmdW5jdGlvbigpeworCQkJCWlmICghYXJnc1tpXSkgdG9nby0tOworCQkJCWFyZ3NbaV0gPSBhcmd1bWVudHM7CisJCQkJaWYgKCF0b2dvKXsKKwkJCQkJZm4uY2FsbChzZWxmLCBpbnN0YW5jZXMsIGluc3RhbmNlLCBhcmdzKTsKKwkJCQkJdG9nbyA9IGxlbjsKKwkJCQkJYXJncyA9IG5ldyBBcnJheShsZW4pOworCQkJCX0KKwkJCX0pOworCQl9KTsKKwl9CisKK30pOworCit9KSgpOworCisvKgorLS0tCisKK3NjcmlwdDogSGFzaC5Db29raWUuanMKKworbmFtZTogSGFzaC5Db29raWUKKworZGVzY3JpcHRpb246IENsYXNzIGZvciBjcmVhdGluZywgcmVhZGluZywgYW5kIGRlbGV0aW5nIENvb2tpZXMgaW4gSlNPTiBmb3JtYXQuCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlCisKK2F1dGhvcnM6CisgIC0gVmFsZXJpbyBQcm9pZXR0aQorICAtIEFhcm9uIE5ld3RvbgorCityZXF1aXJlczoKKyAgLSBDb3JlL0Nvb2tpZQorICAtIENvcmUvSlNPTgorICAtIE1vb1Rvb2xzLk1vcmUKKyAgLSBIYXNoCisKK3Byb3ZpZGVzOiBbSGFzaC5Db29raWVdCisKKy4uLgorKi8KKworSGFzaC5Db29raWUgPSBuZXcgQ2xhc3MoeworCisJRXh0ZW5kczogQ29va2llLAorCisJb3B0aW9uczogeworCQlhdXRvU2F2ZTogdHJ1ZQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihuYW1lLCBvcHRpb25zKXsKKwkJdGhpcy5wYXJlbnQobmFtZSwgb3B0aW9ucyk7CisJCXRoaXMubG9hZCgpOworCX0sCisKKwlzYXZlOiBmdW5jdGlvbigpeworCQl2YXIgdmFsdWUgPSBKU09OLmVuY29kZSh0aGlzLmhhc2gpOworCQlpZiAoIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCA+IDQwOTYpIHJldHVybiBmYWxzZTsgLy9jb29raWUgd291bGQgYmUgdHJ1bmNhdGVkIQorCQlpZiAodmFsdWUgPT0gJ3t9JykgdGhpcy5kaXNwb3NlKCk7CisJCWVsc2UgdGhpcy53cml0ZSh2YWx1ZSk7CisJCXJldHVybiB0cnVlOworCX0sCisKKwlsb2FkOiBmdW5jdGlvbigpeworCQl0aGlzLmhhc2ggPSBuZXcgSGFzaChKU09OLmRlY29kZSh0aGlzLnJlYWQoKSwgdHJ1ZSkpOworCQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCitIYXNoLmVhY2goSGFzaC5wcm90b3R5cGUsIGZ1bmN0aW9uKG1ldGhvZCwgbmFtZSl7CisJaWYgKHR5cGVvZiBtZXRob2QgPT0gJ2Z1bmN0aW9uJykgSGFzaC5Db29raWUuaW1wbGVtZW50KG5hbWUsIGZ1bmN0aW9uKCl7CisJCXZhciB2YWx1ZSA9IG1ldGhvZC5hcHBseSh0aGlzLmhhc2gsIGFyZ3VtZW50cyk7CisJCWlmICh0aGlzLm9wdGlvbnMuYXV0b1NhdmUpIHRoaXMuc2F2ZSgpOworCQlyZXR1cm4gdmFsdWU7CisJfSk7Cit9KTsKKworLyoKKy0tLQorCituYW1lOiBTd2lmZgorCitkZXNjcmlwdGlvbjogV3JhcHBlciBmb3IgZW1iZWRkaW5nIFNXRiBtb3ZpZXMuIFN1cHBvcnRzIEV4dGVybmFsIEludGVyZmFjZSBDb21tdW5pY2F0aW9uLgorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworY3JlZGl0czoKKyAgLSBGbGFzaCBkZXRlY3Rpb24gJiBJbnRlcm5ldCBFeHBsb3JlciArIEZsYXNoIFBsYXllciA5IGZpeCBpbnNwaXJlZCBieSBTV0ZPYmplY3QuCisKK3JlcXVpcmVzOiBbQ29yZS9PcHRpb25zLCBDb3JlL09iamVjdCwgQ29yZS9FbGVtZW50XQorCitwcm92aWRlczogU3dpZmYKKworLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIFN3aWZmID0gdGhpcy5Td2lmZiA9IG5ldyBDbGFzcyh7CisKKwlJbXBsZW1lbnRzOiBPcHRpb25zLAorCisJb3B0aW9uczogeworCQlpZDogbnVsbCwKKwkJaGVpZ2h0OiAxLAorCQl3aWR0aDogMSwKKwkJY29udGFpbmVyOiBudWxsLAorCQlwcm9wZXJ0aWVzOiB7fSwKKwkJcGFyYW1zOiB7CisJCQlxdWFsaXR5OiAnaGlnaCcsCisJCQlhbGxvd1NjcmlwdEFjY2VzczogJ2Fsd2F5cycsCisJCQl3TW9kZTogJ3dpbmRvdycsCisJCQlzd0xpdmVDb25uZWN0OiB0cnVlCisJCX0sCisJCWNhbGxCYWNrczoge30sCisJCXZhcnM6IHt9CisJfSwKKworCXRvRWxlbWVudDogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMub2JqZWN0OworCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihwYXRoLCBvcHRpb25zKXsKKwkJdGhpcy5pbnN0YW5jZSA9ICdTd2lmZl8nICsgU3RyaW5nLnVuaXF1ZUlEKCk7CisKKwkJdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpOworCQlvcHRpb25zID0gdGhpcy5vcHRpb25zOworCQl2YXIgaWQgPSB0aGlzLmlkID0gb3B0aW9ucy5pZCB8fCB0aGlzLmluc3RhbmNlOworCQl2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuaWQob3B0aW9ucy5jb250YWluZXIpOworCisJCVN3aWZmLkNhbGxCYWNrc1t0aGlzLmluc3RhbmNlXSA9IHt9OworCisJCXZhciBwYXJhbXMgPSBvcHRpb25zLnBhcmFtcywgdmFycyA9IG9wdGlvbnMudmFycywgY2FsbEJhY2tzID0gb3B0aW9ucy5jYWxsQmFja3M7CisJCXZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmFwcGVuZCh7aGVpZ2h0OiBvcHRpb25zLmhlaWdodCwgd2lkdGg6IG9wdGlvbnMud2lkdGh9LCBvcHRpb25zLnByb3BlcnRpZXMpOworCisJCXZhciBzZWxmID0gdGhpczsKKworCQlmb3IgKHZhciBjYWxsQmFjayBpbiBjYWxsQmFja3MpeworCQkJU3dpZmYuQ2FsbEJhY2tzW3RoaXMuaW5zdGFuY2VdW2NhbGxCYWNrXSA9IChmdW5jdGlvbihvcHRpb24peworCQkJCXJldHVybiBmdW5jdGlvbigpeworCQkJCQlyZXR1cm4gb3B0aW9uLmFwcGx5KHNlbGYub2JqZWN0LCBhcmd1bWVudHMpOworCQkJCX07CisJCQl9KShjYWxsQmFja3NbY2FsbEJhY2tdKTsKKwkJCXZhcnNbY2FsbEJhY2tdID0gJ1N3aWZmLkNhbGxCYWNrcy4nICsgdGhpcy5pbnN0YW5jZSArICcuJyArIGNhbGxCYWNrOworCQl9CisKKwkJcGFyYW1zLmZsYXNoVmFycyA9IE9iamVjdC50b1F1ZXJ5U3RyaW5nKHZhcnMpOworCQlpZiAoJ0FjdGl2ZVhPYmplY3QnIGluIHdpbmRvdyl7CisJCQlwcm9wZXJ0aWVzLmNsYXNzaWQgPSAnY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwJzsKKwkJCXBhcmFtcy5tb3ZpZSA9IHBhdGg7CisJCX0gZWxzZSB7CisJCQlwcm9wZXJ0aWVzLnR5cGUgPSAnYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2gnOworCQl9CisJCXByb3BlcnRpZXMuZGF0YSA9IHBhdGg7CisKKwkJdmFyIGJ1aWxkID0gJzxvYmplY3QgaWQ9IicgKyBpZCArICciJzsKKwkJZm9yICh2YXIgcHJvcGVydHkgaW4gcHJvcGVydGllcykgYnVpbGQgKz0gJyAnICsgcHJvcGVydHkgKyAnPSInICsgcHJvcGVydGllc1twcm9wZXJ0eV0gKyAnIic7CisJCWJ1aWxkICs9ICc+JzsKKwkJZm9yICh2YXIgcGFyYW0gaW4gcGFyYW1zKXsKKwkJCWlmIChwYXJhbXNbcGFyYW1dKSBidWlsZCArPSAnPHBhcmFtIG5hbWU9IicgKyBwYXJhbSArICciIHZhbHVlPSInICsgcGFyYW1zW3BhcmFtXSArICciIC8+JzsKKwkJfQorCQlidWlsZCArPSAnPC9vYmplY3Q+JzsKKwkJdGhpcy5vYmplY3QgPSAoKGNvbnRhaW5lcikgPyBjb250YWluZXIuZW1wdHkoKSA6IG5ldyBFbGVtZW50KCdkaXYnKSkuc2V0KCdodG1sJywgYnVpbGQpLmZpcnN0Q2hpbGQ7CisJfSwKKworCXJlcGxhY2VzOiBmdW5jdGlvbihlbGVtZW50KXsKKwkJZWxlbWVudCA9IGRvY3VtZW50LmlkKGVsZW1lbnQsIHRydWUpOworCQllbGVtZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMudG9FbGVtZW50KCksIGVsZW1lbnQpOworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJaW5qZWN0OiBmdW5jdGlvbihlbGVtZW50KXsKKwkJZG9jdW1lbnQuaWQoZWxlbWVudCwgdHJ1ZSkuYXBwZW5kQ2hpbGQodGhpcy50b0VsZW1lbnQoKSk7CisJCXJldHVybiB0aGlzOworCX0sCisKKwlyZW1vdGU6IGZ1bmN0aW9uKCl7CisJCXJldHVybiBTd2lmZi5yZW1vdGUuYXBwbHkoU3dpZmYsIFt0aGlzLnRvRWxlbWVudCgpXS5hcHBlbmQoYXJndW1lbnRzKSk7CisJfQorCit9KTsKKworU3dpZmYuQ2FsbEJhY2tzID0ge307CisKK1N3aWZmLnJlbW90ZSA9IGZ1bmN0aW9uKG9iaiwgZm4peworCXZhciBycyA9IG9iai5DYWxsRnVuY3Rpb24oJzxpbnZva2UgbmFtZT0iJyArIGZuICsgJyIgcmV0dXJudHlwZT0iamF2YXNjcmlwdCI+JyArIF9fZmxhc2hfX2FyZ3VtZW50c1RvWE1MKGFyZ3VtZW50cywgMikgKyAnPC9pbnZva2U+Jyk7CisJcmV0dXJuIGV2YWwocnMpOworfTsKKworfSkoKTsKKworLyoKKy0tLQorbmFtZTogVGFibGUKK2Rlc2NyaXB0aW9uOiBMVUEtU3R5bGUgdGFibGUgaW1wbGVtZW50YXRpb24uCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZQorYXV0aG9yczoKKyAgLSBWYWxlcmlvIFByb2lldHRpCityZXF1aXJlczogW0NvcmUvQXJyYXldCitwcm92aWRlczogW1RhYmxlXQorLi4uCisqLworCisoZnVuY3Rpb24oKXsKKwordmFyIFRhYmxlID0gdGhpcy5UYWJsZSA9IGZ1bmN0aW9uKCl7CisKKwl0aGlzLmxlbmd0aCA9IDA7CisJdmFyIGtleXMgPSBbXSwKKwkJdmFsdWVzID0gW107CisKKwl0aGlzLnNldCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpeworCQl2YXIgaW5kZXggPSBrZXlzLmluZGV4T2Yoa2V5KTsKKwkJaWYgKGluZGV4ID09IC0xKXsKKwkJCXZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDsKKwkJCWtleXNbbGVuZ3RoXSA9IGtleTsKKwkJCXZhbHVlc1tsZW5ndGhdID0gdmFsdWU7CisJCQl0aGlzLmxlbmd0aCsrOworCQl9IGVsc2UgeworCQkJdmFsdWVzW2luZGV4XSA9IHZhbHVlOworCQl9CisJCXJldHVybiB0aGlzOworCX07CisKKwl0aGlzLmdldCA9IGZ1bmN0aW9uKGtleSl7CisJCXZhciBpbmRleCA9IGtleXMuaW5kZXhPZihrZXkpOworCQlyZXR1cm4gKGluZGV4ID09IC0xKSA/IG51bGwgOiB2YWx1ZXNbaW5kZXhdOworCX07CisKKwl0aGlzLmVyYXNlID0gZnVuY3Rpb24oa2V5KXsKKwkJdmFyIGluZGV4ID0ga2V5cy5pbmRleE9mKGtleSk7CisJCWlmIChpbmRleCAhPSAtMSl7CisJCQl0aGlzLmxlbmd0aC0tOworCQkJa2V5cy5zcGxpY2UoaW5kZXgsIDEpOworCQkJcmV0dXJuIHZhbHVlcy5zcGxpY2UoaW5kZXgsIDEpWzBdOworCQl9CisJCXJldHVybiBudWxsOworCX07CisKKwl0aGlzLmVhY2ggPSB0aGlzLmZvckVhY2ggPSBmdW5jdGlvbihmbiwgYmluZCl7CisJCWZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspIGZuLmNhbGwoYmluZCwga2V5c1tpXSwgdmFsdWVzW2ldLCB0aGlzKTsKKwl9OworCit9OworCitpZiAodGhpcy5UeXBlKSBuZXcgVHlwZSgnVGFibGUnLCBUYWJsZSk7CisKK30pKCk7CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9saWJyYXJpZXMvanF1ZXJ5LTEuMTIuNC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xpYnJhcmllcy9qcXVlcnktMS4xMi40LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYzYwZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9saWJyYXJpZXMvanF1ZXJ5LTEuMTIuNC5qcwpAQCAtMCwwICsxLDExMDA4IEBACisvKiEKKyAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjEuMTIuNAorICogaHR0cDovL2pxdWVyeS5jb20vCisgKgorICogSW5jbHVkZXMgU2l6emxlLmpzCisgKiBodHRwOi8vc2l6emxlanMuY29tLworICoKKyAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKKyAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKKyAqCisgKiBEYXRlOiAyMDE2LTA1LTIwVDE3OjE3WgorICovCisKKyhmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkgeworCisJaWYgKCB0eXBlb2YgbW9kdWxlID09PSAib2JqZWN0IiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICJvYmplY3QiICkgeworCQkvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgCisJCS8vIGlzIHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuCisJCS8vIEZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3QgaGF2ZSBhIGB3aW5kb3dgIHdpdGggYSBgZG9jdW1lbnRgCisJCS8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLgorCQkvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLgorCQkvLyBlLmcuIHZhciBqUXVlcnkgPSByZXF1aXJlKCJqcXVlcnkiKSh3aW5kb3cpOworCQkvLyBTZWUgdGlja2V0ICMxNDU0OSBmb3IgbW9yZSBpbmZvLgorCQltb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/CisJCQlmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6CisJCQlmdW5jdGlvbiggdyApIHsKKwkJCQlpZiAoICF3LmRvY3VtZW50ICkgeworCQkJCQl0aHJvdyBuZXcgRXJyb3IoICJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50IiApOworCQkJCX0KKwkJCQlyZXR1cm4gZmFjdG9yeSggdyApOworCQkJfTsKKwl9IGVsc2UgeworCQlmYWN0b3J5KCBnbG9iYWwgKTsKKwl9CisKKy8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0Cit9KHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24oIHdpbmRvdywgbm9HbG9iYWwgKSB7CisKKy8vIFN1cHBvcnQ6IEZpcmVmb3ggMTgrCisvLyBDYW4ndCBiZSBpbiBzdHJpY3QgbW9kZSwgc2V2ZXJhbCBsaWJzIGluY2x1ZGluZyBBU1AuTkVUIHRyYWNlCisvLyB0aGUgc3RhY2sgdmlhIGFyZ3VtZW50cy5jYWxsZXIuY2FsbGVlIGFuZCBGaXJlZm94IGRpZXMgaWYKKy8vIHlvdSB0cnkgdG8gdHJhY2UgdGhyb3VnaCAidXNlIHN0cmljdCIgY2FsbCBjaGFpbnMuICgjMTMzMzUpCisvLyJ1c2Ugc3RyaWN0IjsKK3ZhciBkZWxldGVkSWRzID0gW107CisKK3ZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDsKKwordmFyIHNsaWNlID0gZGVsZXRlZElkcy5zbGljZTsKKwordmFyIGNvbmNhdCA9IGRlbGV0ZWRJZHMuY29uY2F0OworCit2YXIgcHVzaCA9IGRlbGV0ZWRJZHMucHVzaDsKKwordmFyIGluZGV4T2YgPSBkZWxldGVkSWRzLmluZGV4T2Y7CisKK3ZhciBjbGFzczJ0eXBlID0ge307CisKK3ZhciB0b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmc7CisKK3ZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5OworCit2YXIgc3VwcG9ydCA9IHt9OworCisKKwordmFyCisJdmVyc2lvbiA9ICIxLjEyLjQiLAorCisJLy8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVlcnkKKwlqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7CisKKwkJLy8gVGhlIGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnCisJCS8vIE5lZWQgaW5pdCBpZiBqUXVlcnkgaXMgY2FsbGVkIChqdXN0IGFsbG93IGVycm9yIHRvIGJlIHRocm93biBpZiBub3QgaW5jbHVkZWQpCisJCXJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7CisJfSwKKworCS8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4xLCBJRTw5CisJLy8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQCisJcnRyaW0gPSAvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csCisKKwkvLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmcKKwlybXNQcmVmaXggPSAvXi1tcy0vLAorCXJkYXNoQWxwaGEgPSAvLShbXGRhLXpdKS9naSwKKworCS8vIFVzZWQgYnkgalF1ZXJ5LmNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKCkKKwlmY2FtZWxDYXNlID0gZnVuY3Rpb24oIGFsbCwgbGV0dGVyICkgeworCQlyZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7CisJfTsKKworalF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHsKKworCS8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWQKKwlqcXVlcnk6IHZlcnNpb24sCisKKwljb25zdHJ1Y3RvcjogalF1ZXJ5LAorCisJLy8gU3RhcnQgd2l0aCBhbiBlbXB0eSBzZWxlY3RvcgorCXNlbGVjdG9yOiAiIiwKKworCS8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMAorCWxlbmd0aDogMCwKKworCXRvQXJyYXk6IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApOworCX0sCisKKwkvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SCisJLy8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXkKKwlnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7CisJCXJldHVybiBudW0gIT0gbnVsbCA/CisKKwkJCS8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXQKKwkJCSggbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0gXSApIDoKKworCQkJLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheQorCQkJc2xpY2UuY2FsbCggdGhpcyApOworCX0sCisKKwkvLyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrCisJLy8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpCisJcHVzaFN0YWNrOiBmdW5jdGlvbiggZWxlbXMgKSB7CisKKwkJLy8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXQKKwkJdmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3RvcigpLCBlbGVtcyApOworCisJCS8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpCisJCXJldC5wcmV2T2JqZWN0ID0gdGhpczsKKwkJcmV0LmNvbnRleHQgPSB0aGlzLmNvbnRleHQ7CisKKwkJLy8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXQKKwkJcmV0dXJuIHJldDsKKwl9LAorCisJLy8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC4KKwllYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7CisJCXJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2sgKTsKKwl9LAorCisJbWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7CisJCXJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CisJCQlyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApOworCQl9ICkgKTsKKwl9LAorCisJc2xpY2U6IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApOworCX0sCisKKwlmaXJzdDogZnVuY3Rpb24oKSB7CisJCXJldHVybiB0aGlzLmVxKCAwICk7CisJfSwKKworCWxhc3Q6IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4gdGhpcy5lcSggLTEgKTsKKwl9LAorCisJZXE6IGZ1bmN0aW9uKCBpICkgeworCQl2YXIgbGVuID0gdGhpcy5sZW5ndGgsCisJCQlqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApOworCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlzWyBqIF0gXSA6IFtdICk7CisJfSwKKworCWVuZDogZnVuY3Rpb24oKSB7CisJCXJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpOworCX0sCisKKwkvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCisJLy8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuCisJcHVzaDogcHVzaCwKKwlzb3J0OiBkZWxldGVkSWRzLnNvcnQsCisJc3BsaWNlOiBkZWxldGVkSWRzLnNwbGljZQorfTsKKworalF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHsKKwl2YXIgc3JjLCBjb3B5SXNBcnJheSwgY29weSwgbmFtZSwgb3B0aW9ucywgY2xvbmUsCisJCXRhcmdldCA9IGFyZ3VtZW50c1sgMCBdIHx8IHt9LAorCQlpID0gMSwKKwkJbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwKKwkJZGVlcCA9IGZhbHNlOworCisJLy8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvbgorCWlmICggdHlwZW9mIHRhcmdldCA9PT0gImJvb2xlYW4iICkgeworCQlkZWVwID0gdGFyZ2V0OworCisJCS8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXQKKwkJdGFyZ2V0ID0gYXJndW1lbnRzWyBpIF0gfHwge307CisJCWkrKzsKKwl9CisKKwkvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSkKKwlpZiAoIHR5cGVvZiB0YXJnZXQgIT09ICJvYmplY3QiICYmICFqUXVlcnkuaXNGdW5jdGlvbiggdGFyZ2V0ICkgKSB7CisJCXRhcmdldCA9IHt9OworCX0KKworCS8vIGV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZAorCWlmICggaSA9PT0gbGVuZ3RoICkgeworCQl0YXJnZXQgPSB0aGlzOworCQlpLS07CisJfQorCisJZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisKKwkJLy8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlcworCQlpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHsKKworCQkJLy8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdAorCQkJZm9yICggbmFtZSBpbiBvcHRpb25zICkgeworCQkJCXNyYyA9IHRhcmdldFsgbmFtZSBdOworCQkJCWNvcHkgPSBvcHRpb25zWyBuYW1lIF07CisKKwkJCQkvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wCisJCQkJaWYgKCB0YXJnZXQgPT09IGNvcHkgKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCS8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5cworCQkJCWlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8fAorCQkJCQkoIGNvcHlJc0FycmF5ID0galF1ZXJ5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7CisKKwkJCQkJaWYgKCBjb3B5SXNBcnJheSApIHsKKwkJCQkJCWNvcHlJc0FycmF5ID0gZmFsc2U7CisJCQkJCQljbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNBcnJheSggc3JjICkgPyBzcmMgOiBbXTsKKworCQkJCQl9IGVsc2UgeworCQkJCQkJY2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHNyYyApID8gc3JjIDoge307CisJCQkJCX0KKworCQkJCQkvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW0KKwkJCQkJdGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApOworCisJCQkJLy8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlcworCQkJCX0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHsKKwkJCQkJdGFyZ2V0WyBuYW1lIF0gPSBjb3B5OworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0CisJcmV0dXJuIHRhcmdldDsKK307CisKK2pRdWVyeS5leHRlbmQoIHsKKworCS8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZQorCWV4cGFuZG86ICJqUXVlcnkiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cRC9nLCAiIiApLAorCisJLy8gQXNzdW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRoZSByZWFkeSBtb2R1bGUKKwlpc1JlYWR5OiB0cnVlLAorCisJZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7CisJCXRocm93IG5ldyBFcnJvciggbXNnICk7CisJfSwKKworCW5vb3A6IGZ1bmN0aW9uKCkge30sCisKKwkvLyBTZWUgdGVzdC91bml0L2NvcmUuanMgZm9yIGRldGFpbHMgY29uY2VybmluZyBpc0Z1bmN0aW9uLgorCS8vIFNpbmNlIHZlcnNpb24gMS4zLCBET00gbWV0aG9kcyBhbmQgZnVuY3Rpb25zIGxpa2UgYWxlcnQKKwkvLyBhcmVuJ3Qgc3VwcG9ydGVkLiBUaGV5IHJldHVybiBmYWxzZSBvbiBJRSAoIzI5NjgpLgorCWlzRnVuY3Rpb246IGZ1bmN0aW9uKCBvYmogKSB7CisJCXJldHVybiBqUXVlcnkudHlwZSggb2JqICkgPT09ICJmdW5jdGlvbiI7CisJfSwKKworCWlzQXJyYXk6IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24oIG9iaiApIHsKKwkJcmV0dXJuIGpRdWVyeS50eXBlKCBvYmogKSA9PT0gImFycmF5IjsKKwl9LAorCisJaXNXaW5kb3c6IGZ1bmN0aW9uKCBvYmogKSB7CisJCS8qIGpzaGludCBlcWVxZXE6IGZhbHNlICovCisJCXJldHVybiBvYmogIT0gbnVsbCAmJiBvYmogPT0gb2JqLndpbmRvdzsKKwl9LAorCisJaXNOdW1lcmljOiBmdW5jdGlvbiggb2JqICkgeworCisJCS8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChudWxsfHRydWV8ZmFsc2V8IiIpCisJCS8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKCIweC4uLiIpCisJCS8vIHN1YnRyYWN0aW9uIGZvcmNlcyBpbmZpbml0aWVzIHRvIE5hTgorCQkvLyBhZGRpbmcgMSBjb3JyZWN0cyBsb3NzIG9mIHByZWNpc2lvbiBmcm9tIHBhcnNlRmxvYXQgKCMxNTEwMCkKKwkJdmFyIHJlYWxTdHJpbmdPYmogPSBvYmogJiYgb2JqLnRvU3RyaW5nKCk7CisJCXJldHVybiAhalF1ZXJ5LmlzQXJyYXkoIG9iaiApICYmICggcmVhbFN0cmluZ09iaiAtIHBhcnNlRmxvYXQoIHJlYWxTdHJpbmdPYmogKSArIDEgKSA+PSAwOworCX0sCisKKwlpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiggb2JqICkgeworCQl2YXIgbmFtZTsKKwkJZm9yICggbmFtZSBpbiBvYmogKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJcmV0dXJuIHRydWU7CisJfSwKKworCWlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7CisJCXZhciBrZXk7CisKKwkJLy8gTXVzdCBiZSBhbiBPYmplY3QuCisJCS8vIEJlY2F1c2Ugb2YgSUUsIHdlIGFsc28gaGF2ZSB0byBjaGVjayB0aGUgcHJlc2VuY2Ugb2YgdGhlIGNvbnN0cnVjdG9yIHByb3BlcnR5LgorCQkvLyBNYWtlIHN1cmUgdGhhdCBET00gbm9kZXMgYW5kIHdpbmRvdyBvYmplY3RzIGRvbid0IHBhc3MgdGhyb3VnaCwgYXMgd2VsbAorCQlpZiAoICFvYmogfHwgalF1ZXJ5LnR5cGUoIG9iaiApICE9PSAib2JqZWN0IiB8fCBvYmoubm9kZVR5cGUgfHwgalF1ZXJ5LmlzV2luZG93KCBvYmogKSApIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCXRyeSB7CisKKwkJCS8vIE5vdCBvd24gY29uc3RydWN0b3IgcHJvcGVydHkgbXVzdCBiZSBPYmplY3QKKwkJCWlmICggb2JqLmNvbnN0cnVjdG9yICYmCisJCQkJIWhhc093bi5jYWxsKCBvYmosICJjb25zdHJ1Y3RvciIgKSAmJgorCQkJCSFoYXNPd24uY2FsbCggb2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgImlzUHJvdG90eXBlT2YiICkgKSB7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9IGNhdGNoICggZSApIHsKKworCQkJLy8gSUU4LDkgV2lsbCB0aHJvdyBleGNlcHRpb25zIG9uIGNlcnRhaW4gaG9zdCBvYmplY3RzICM5ODk3CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvLyBTdXBwb3J0OiBJRTw5CisJCS8vIEhhbmRsZSBpdGVyYXRpb24gb3ZlciBpbmhlcml0ZWQgcHJvcGVydGllcyBiZWZvcmUgb3duIHByb3BlcnRpZXMuCisJCWlmICggIXN1cHBvcnQub3duRmlyc3QgKSB7CisJCQlmb3IgKCBrZXkgaW4gb2JqICkgeworCQkJCXJldHVybiBoYXNPd24uY2FsbCggb2JqLCBrZXkgKTsKKwkJCX0KKwkJfQorCisJCS8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIGZpcnN0bHksIHNvIHRvIHNwZWVkIHVwLAorCQkvLyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4gYWxsIHByb3BlcnRpZXMgYXJlIG93bi4KKwkJZm9yICgga2V5IGluIG9iaiApIHt9CisKKwkJcmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkIHx8IGhhc093bi5jYWxsKCBvYmosIGtleSApOworCX0sCisKKwl0eXBlOiBmdW5jdGlvbiggb2JqICkgeworCQlpZiAoIG9iaiA9PSBudWxsICkgeworCQkJcmV0dXJuIG9iaiArICIiOworCQl9CisJCXJldHVybiB0eXBlb2Ygb2JqID09PSAib2JqZWN0IiB8fCB0eXBlb2Ygb2JqID09PSAiZnVuY3Rpb24iID8KKwkJCWNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwoIG9iaiApIF0gfHwgIm9iamVjdCIgOgorCQkJdHlwZW9mIG9iajsKKwl9LAorCisJLy8gV29ya2Fyb3VuZHMgYmFzZWQgb24gZmluZGluZ3MgYnkgSmltIERyaXNjb2xsCisJLy8gaHR0cDovL3dlYmxvZ3MuamF2YS5uZXQvYmxvZy9kcmlzY29sbC9hcmNoaXZlLzIwMDkvMDkvMDgvZXZhbC1qYXZhc2NyaXB0LWdsb2JhbC1jb250ZXh0CisJZ2xvYmFsRXZhbDogZnVuY3Rpb24oIGRhdGEgKSB7CisJCWlmICggZGF0YSAmJiBqUXVlcnkudHJpbSggZGF0YSApICkgeworCisJCQkvLyBXZSB1c2UgZXhlY1NjcmlwdCBvbiBJbnRlcm5ldCBFeHBsb3JlcgorCQkJLy8gV2UgdXNlIGFuIGFub255bW91cyBmdW5jdGlvbiBzbyB0aGF0IGNvbnRleHQgaXMgd2luZG93CisJCQkvLyByYXRoZXIgdGhhbiBqUXVlcnkgaW4gRmlyZWZveAorCQkJKCB3aW5kb3cuZXhlY1NjcmlwdCB8fCBmdW5jdGlvbiggZGF0YSApIHsKKwkJCQl3aW5kb3dbICJldmFsIiBdLmNhbGwoIHdpbmRvdywgZGF0YSApOyAvLyBqc2NzOmlnbm9yZSByZXF1aXJlRG90Tm90YXRpb24KKwkJCX0gKSggZGF0YSApOworCQl9CisJfSwKKworCS8vIENvbnZlcnQgZGFzaGVkIHRvIGNhbWVsQ2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXMKKwkvLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpCisJY2FtZWxDYXNlOiBmdW5jdGlvbiggc3RyaW5nICkgeworCQlyZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgIm1zLSIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7CisJfSwKKworCW5vZGVOYW1lOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKKwkJcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7CisJfSwKKworCWVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkgeworCQl2YXIgbGVuZ3RoLCBpID0gMDsKKworCQlpZiAoIGlzQXJyYXlMaWtlKCBvYmogKSApIHsKKwkJCWxlbmd0aCA9IG9iai5sZW5ndGg7CisJCQlmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKKwkJCQlpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJZm9yICggaSBpbiBvYmogKSB7CisJCQkJaWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXJldHVybiBvYmo7CisJfSwKKworCS8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4xLCBJRTw5CisJdHJpbTogZnVuY3Rpb24oIHRleHQgKSB7CisJCXJldHVybiB0ZXh0ID09IG51bGwgPworCQkJIiIgOgorCQkJKCB0ZXh0ICsgIiIgKS5yZXBsYWNlKCBydHJpbSwgIiIgKTsKKwl9LAorCisJLy8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQorCW1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHsKKwkJdmFyIHJldCA9IHJlc3VsdHMgfHwgW107CisKKwkJaWYgKCBhcnIgIT0gbnVsbCApIHsKKwkJCWlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSApIHsKKwkJCQlqUXVlcnkubWVyZ2UoIHJldCwKKwkJCQkJdHlwZW9mIGFyciA9PT0gInN0cmluZyIgPworCQkJCQlbIGFyciBdIDogYXJyCisJCQkJKTsKKwkJCX0gZWxzZSB7CisJCQkJcHVzaC5jYWxsKCByZXQsIGFyciApOworCQkJfQorCQl9CisKKwkJcmV0dXJuIHJldDsKKwl9LAorCisJaW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHsKKwkJdmFyIGxlbjsKKworCQlpZiAoIGFyciApIHsKKwkJCWlmICggaW5kZXhPZiApIHsKKwkJCQlyZXR1cm4gaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTsKKwkJCX0KKworCQkJbGVuID0gYXJyLmxlbmd0aDsKKwkJCWkgPSBpID8gaSA8IDAgPyBNYXRoLm1heCggMCwgbGVuICsgaSApIDogaSA6IDA7CisKKwkJCWZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworCisJCQkJLy8gU2tpcCBhY2Nlc3NpbmcgaW4gc3BhcnNlIGFycmF5cworCQkJCWlmICggaSBpbiBhcnIgJiYgYXJyWyBpIF0gPT09IGVsZW0gKSB7CisJCQkJCXJldHVybiBpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXJldHVybiAtMTsKKwl9LAorCisJbWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkgeworCQl2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsCisJCQlqID0gMCwKKwkJCWkgPSBmaXJzdC5sZW5ndGg7CisKKwkJd2hpbGUgKCBqIDwgbGVuICkgeworCQkJZmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqKysgXTsKKwkJfQorCisJCS8vIFN1cHBvcnQ6IElFPDkKKwkJLy8gV29ya2Fyb3VuZCBjYXN0aW5nIG9mIC5sZW5ndGggdG8gTmFOIG9uIG90aGVyd2lzZSBhcnJheWxpa2Ugb2JqZWN0cyAoZS5nLiwgTm9kZUxpc3RzKQorCQlpZiAoIGxlbiAhPT0gbGVuICkgeworCQkJd2hpbGUgKCBzZWNvbmRbIGogXSAhPT0gdW5kZWZpbmVkICkgeworCQkJCWZpcnN0WyBpKysgXSA9IHNlY29uZFsgaisrIF07CisJCQl9CisJCX0KKworCQlmaXJzdC5sZW5ndGggPSBpOworCisJCXJldHVybiBmaXJzdDsKKwl9LAorCisJZ3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ZXJ0ICkgeworCQl2YXIgY2FsbGJhY2tJbnZlcnNlLAorCQkJbWF0Y2hlcyA9IFtdLAorCQkJaSA9IDAsCisJCQlsZW5ndGggPSBlbGVtcy5sZW5ndGgsCisJCQljYWxsYmFja0V4cGVjdCA9ICFpbnZlcnQ7CisKKwkJLy8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtcworCQkvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvbgorCQlmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKKwkJCWNhbGxiYWNrSW52ZXJzZSA9ICFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApOworCQkJaWYgKCBjYWxsYmFja0ludmVyc2UgIT09IGNhbGxiYWNrRXhwZWN0ICkgeworCQkJCW1hdGNoZXMucHVzaCggZWxlbXNbIGkgXSApOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG1hdGNoZXM7CisJfSwKKworCS8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQorCW1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkgeworCQl2YXIgbGVuZ3RoLCB2YWx1ZSwKKwkJCWkgPSAwLAorCQkJcmV0ID0gW107CisKKwkJLy8gR28gdGhyb3VnaCB0aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2ggb2YgdGhlIGl0ZW1zIHRvIHRoZWlyIG5ldyB2YWx1ZXMKKwkJaWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHsKKwkJCWxlbmd0aCA9IGVsZW1zLmxlbmd0aDsKKwkJCWZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgeworCQkJCXZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApOworCisJCQkJaWYgKCB2YWx1ZSAhPSBudWxsICkgeworCQkJCQlyZXQucHVzaCggdmFsdWUgKTsKKwkJCQl9CisJCQl9CisKKwkJLy8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCwKKwkJfSBlbHNlIHsKKwkJCWZvciAoIGkgaW4gZWxlbXMgKSB7CisJCQkJdmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7CisKKwkJCQlpZiAoIHZhbHVlICE9IG51bGwgKSB7CisJCQkJCXJldC5wdXNoKCB2YWx1ZSApOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXMKKwkJcmV0dXJuIGNvbmNhdC5hcHBseSggW10sIHJldCApOworCX0sCisKKwkvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHMKKwlndWlkOiAxLAorCisJLy8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55CisJLy8gYXJndW1lbnRzLgorCXByb3h5OiBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7CisJCXZhciBhcmdzLCBwcm94eSwgdG1wOworCisJCWlmICggdHlwZW9mIGNvbnRleHQgPT09ICJzdHJpbmciICkgeworCQkJdG1wID0gZm5bIGNvbnRleHQgXTsKKwkJCWNvbnRleHQgPSBmbjsKKwkJCWZuID0gdG1wOworCQl9CisKKwkJLy8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWMKKwkJLy8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC4KKwkJaWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oIGZuICkgKSB7CisJCQlyZXR1cm4gdW5kZWZpbmVkOworCQl9CisKKwkJLy8gU2ltdWxhdGVkIGJpbmQKKwkJYXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApOworCQlwcm94eSA9IGZ1bmN0aW9uKCkgeworCQkJcmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0IHx8IHRoaXMsIGFyZ3MuY29uY2F0KCBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7CisJCX07CisKKwkJLy8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkCisJCXByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrOworCisJCXJldHVybiBwcm94eTsKKwl9LAorCisJbm93OiBmdW5jdGlvbigpIHsKKwkJcmV0dXJuICsoIG5ldyBEYXRlKCkgKTsKKwl9LAorCisJLy8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyCisJLy8gcHJvcGVydGllcyB0byBpdCBzbyBpdCBuZWVkcyB0byBleGlzdC4KKwlzdXBwb3J0OiBzdXBwb3J0Cit9ICk7CisKKy8vIEpTSGludCB3b3VsZCBlcnJvciBvbiB0aGlzIGNvZGUgZHVlIHRvIHRoZSBTeW1ib2wgbm90IGJlaW5nIGRlZmluZWQgaW4gRVM1LgorLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmpzaGludHJjIHdvdWxkIGNyZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsCisvLyB1bmd1YXJkZWQgaW4gYW5vdGhlciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8ganVzdCBkaXNhYmxlIEpTSGludCBmb3IgdGhlc2UKKy8vIHRocmVlIGxpbmVzLgorLyoganNoaW50IGlnbm9yZTogc3RhcnQgKi8KK2lmICggdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiApIHsKKwlqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBdID0gZGVsZXRlZElkc1sgU3ltYm9sLml0ZXJhdG9yIF07Cit9CisvKiBqc2hpbnQgaWdub3JlOiBlbmQgKi8KKworLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwCitqUXVlcnkuZWFjaCggIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sIi5zcGxpdCggIiAiICksCitmdW5jdGlvbiggaSwgbmFtZSApIHsKKwljbGFzczJ0eXBlWyAiW29iamVjdCAiICsgbmFtZSArICJdIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpOworfSApOworCitmdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkgeworCisJLy8gU3VwcG9ydDogaU9TIDguMiAobm90IHJlcHJvZHVjaWJsZSBpbiBzaW11bGF0b3IpCisJLy8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KQorCS8vIGhhc093biBpc24ndCB1c2VkIGhlcmUgZHVlIHRvIGZhbHNlIG5lZ2F0aXZlcworCS8vIHJlZ2FyZGluZyBOb2RlbGlzdCBsZW5ndGggaW4gSUUKKwl2YXIgbGVuZ3RoID0gISFvYmogJiYgImxlbmd0aCIgaW4gb2JqICYmIG9iai5sZW5ndGgsCisJCXR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7CisKKwlpZiAoIHR5cGUgPT09ICJmdW5jdGlvbiIgfHwgalF1ZXJ5LmlzV2luZG93KCBvYmogKSApIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0eXBlID09PSAiYXJyYXkiIHx8IGxlbmd0aCA9PT0gMCB8fAorCQl0eXBlb2YgbGVuZ3RoID09PSAibnVtYmVyIiAmJiBsZW5ndGggPiAwICYmICggbGVuZ3RoIC0gMSApIGluIG9iajsKK30KK3ZhciBTaXp6bGUgPQorLyohCisgKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSB2Mi4yLjEKKyAqIGh0dHA6Ly9zaXp6bGVqcy5jb20vCisgKgorICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQorICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQorICoKKyAqIERhdGU6IDIwMTUtMTAtMTcKKyAqLworKGZ1bmN0aW9uKCB3aW5kb3cgKSB7CisKK3ZhciBpLAorCXN1cHBvcnQsCisJRXhwciwKKwlnZXRUZXh0LAorCWlzWE1MLAorCXRva2VuaXplLAorCWNvbXBpbGUsCisJc2VsZWN0LAorCW91dGVybW9zdENvbnRleHQsCisJc29ydElucHV0LAorCWhhc0R1cGxpY2F0ZSwKKworCS8vIExvY2FsIGRvY3VtZW50IHZhcnMKKwlzZXREb2N1bWVudCwKKwlkb2N1bWVudCwKKwlkb2NFbGVtLAorCWRvY3VtZW50SXNIVE1MLAorCXJidWdneVFTQSwKKwlyYnVnZ3lNYXRjaGVzLAorCW1hdGNoZXMsCisJY29udGFpbnMsCisKKwkvLyBJbnN0YW5jZS1zcGVjaWZpYyBkYXRhCisJZXhwYW5kbyA9ICJzaXp6bGUiICsgMSAqIG5ldyBEYXRlKCksCisJcHJlZmVycmVkRG9jID0gd2luZG93LmRvY3VtZW50LAorCWRpcnJ1bnMgPSAwLAorCWRvbmUgPSAwLAorCWNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLAorCXRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLAorCWNvbXBpbGVyQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLAorCXNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkgeworCQlpZiAoIGEgPT09IGIgKSB7CisJCQloYXNEdXBsaWNhdGUgPSB0cnVlOworCQl9CisJCXJldHVybiAwOworCX0sCisKKwkvLyBHZW5lcmFsLXB1cnBvc2UgY29uc3RhbnRzCisJTUFYX05FR0FUSVZFID0gMSA8PCAzMSwKKworCS8vIEluc3RhbmNlIG1ldGhvZHMKKwloYXNPd24gPSAoe30pLmhhc093blByb3BlcnR5LAorCWFyciA9IFtdLAorCXBvcCA9IGFyci5wb3AsCisJcHVzaF9uYXRpdmUgPSBhcnIucHVzaCwKKwlwdXNoID0gYXJyLnB1c2gsCisJc2xpY2UgPSBhcnIuc2xpY2UsCisJLy8gVXNlIGEgc3RyaXBwZWQtZG93biBpbmRleE9mIGFzIGl0J3MgZmFzdGVyIHRoYW4gbmF0aXZlCisJLy8gaHR0cDovL2pzcGVyZi5jb20vdGhvci1pbmRleG9mLXZzLWZvci81CisJaW5kZXhPZiA9IGZ1bmN0aW9uKCBsaXN0LCBlbGVtICkgeworCQl2YXIgaSA9IDAsCisJCQlsZW4gPSBsaXN0Lmxlbmd0aDsKKwkJZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CisJCQlpZiAoIGxpc3RbaV0gPT09IGVsZW0gKSB7CisJCQkJcmV0dXJuIGk7CisJCQl9CisJCX0KKwkJcmV0dXJuIC0xOworCX0sCisKKwlib29sZWFucyA9ICJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsCisKKwkvLyBSZWd1bGFyIGV4cHJlc3Npb25zCisKKwkvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jd2hpdGVzcGFjZQorCXdoaXRlc3BhY2UgPSAiW1xceDIwXFx0XFxyXFxuXFxmXSIsCisKKwkvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjdmFsdWUtZGVmLWlkZW50aWZpZXIKKwlpZGVudGlmaWVyID0gIig/OlxcXFwufFtcXHctXXxbXlxceDAwLVxceGEwXSkrIiwKKworCS8vIEF0dHJpYnV0ZSBzZWxlY3RvcnM6IGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9ycworCWF0dHJpYnV0ZXMgPSAiXFxbIiArIHdoaXRlc3BhY2UgKyAiKigiICsgaWRlbnRpZmllciArICIpKD86IiArIHdoaXRlc3BhY2UgKworCQkvLyBPcGVyYXRvciAoY2FwdHVyZSAyKQorCQkiKihbKl4kfCF+XT89KSIgKyB3aGl0ZXNwYWNlICsKKwkJLy8gIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV0gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1cmUgNF0iCisJCSIqKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCJ8KCIgKyBpZGVudGlmaWVyICsgIikpfCkiICsgd2hpdGVzcGFjZSArCisJCSIqXFxdIiwKKworCXBzZXVkb3MgPSAiOigiICsgaWRlbnRpZmllciArICIpKD86XFwoKCIgKworCQkvLyBUbyByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWxlY3RvcnMgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgcHJlRmlsdGVyLCBwcmVmZXIgYXJndW1lbnRzOgorCQkvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSkKKwkJIignKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcIil8IiArCisJCS8vIDIuIHNpbXBsZSAoY2FwdHVyZSA2KQorCQkiKCg/OlxcXFwufFteXFxcXCgpW1xcXV18IiArIGF0dHJpYnV0ZXMgKyAiKSopfCIgKworCQkvLyAzLiBhbnl0aGluZyBlbHNlIChjYXB0dXJlIDIpCisJCSIuKiIgKworCQkiKVxcKXwpIiwKKworCS8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXIKKwlyd2hpdGVzcGFjZSA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyAiKyIsICJnIiApLAorCXJ0cmltID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiICsgd2hpdGVzcGFjZSArICIrJCIsICJnIiApLAorCisJcmNvbW1hID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIqLCIgKyB3aGl0ZXNwYWNlICsgIioiICksCisJcmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIqKFs+K35dfCIgKyB3aGl0ZXNwYWNlICsgIikiICsgd2hpdGVzcGFjZSArICIqIiApLAorCisJcmF0dHJpYnV0ZVF1b3RlcyA9IG5ldyBSZWdFeHAoICI9IiArIHdoaXRlc3BhY2UgKyAiKihbXlxcXSdcIl0qPykiICsgd2hpdGVzcGFjZSArICIqXFxdIiwgImciICksCisKKwlycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLAorCXJpZGVudGlmaWVyID0gbmV3IFJlZ0V4cCggIl4iICsgaWRlbnRpZmllciArICIkIiApLAorCisJbWF0Y2hFeHByID0geworCQkiSUQiOiBuZXcgUmVnRXhwKCAiXiMoIiArIGlkZW50aWZpZXIgKyAiKSIgKSwKKwkJIkNMQVNTIjogbmV3IFJlZ0V4cCggIl5cXC4oIiArIGlkZW50aWZpZXIgKyAiKSIgKSwKKwkJIlRBRyI6IG5ldyBSZWdFeHAoICJeKCIgKyBpZGVudGlmaWVyICsgInxbKl0pIiApLAorCQkiQVRUUiI6IG5ldyBSZWdFeHAoICJeIiArIGF0dHJpYnV0ZXMgKSwKKwkJIlBTRVVETyI6IG5ldyBSZWdFeHAoICJeIiArIHBzZXVkb3MgKSwKKwkJIkNISUxEIjogbmV3IFJlZ0V4cCggIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIgKyB3aGl0ZXNwYWNlICsKKwkJCSIqKGV2ZW58b2RkfCgoWystXXwpKFxcZCopbnwpIiArIHdoaXRlc3BhY2UgKyAiKig/OihbKy1dfCkiICsgd2hpdGVzcGFjZSArCisJCQkiKihcXGQrKXwpKSIgKyB3aGl0ZXNwYWNlICsgIipcXCl8KSIsICJpIiApLAorCQkiYm9vbCI6IG5ldyBSZWdFeHAoICJeKD86IiArIGJvb2xlYW5zICsgIikkIiwgImkiICksCisJCS8vIEZvciB1c2UgaW4gbGlicmFyaWVzIGltcGxlbWVudGluZyAuaXMoKQorCQkvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgCisJCSJuZWVkc0NvbnRleHQiOiBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIgKworCQkJd2hpdGVzcGFjZSArICIqKCg/Oi1cXGQpP1xcZCopIiArIHdoaXRlc3BhY2UgKyAiKlxcKXwpKD89W14tXXwkKSIsICJpIiApCisJfSwKKworCXJpbnB1dHMgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLAorCXJoZWFkZXIgPSAvXmhcZCQvaSwKKworCXJuYXRpdmUgPSAvXltee10rXHtccypcW25hdGl2ZSBcdy8sCisKKwkvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnMKKwlycXVpY2tFeHByID0gL14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLywKKworCXJzaWJsaW5nID0gL1srfl0vLAorCXJlc2NhcGUgPSAvJ3xcXC9nLAorCisJLy8gQ1NTIGVzY2FwZXMgaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVycworCXJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAoICJcXFxcKFtcXGRhLWZdezEsNn0iICsgd2hpdGVzcGFjZSArICI/fCgiICsgd2hpdGVzcGFjZSArICIpfC4pIiwgImlnIiApLAorCWZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBfLCBlc2NhcGVkLCBlc2NhcGVkV2hpdGVzcGFjZSApIHsKKwkJdmFyIGhpZ2ggPSAiMHgiICsgZXNjYXBlZCAtIDB4MTAwMDA7CisJCS8vIE5hTiBtZWFucyBub24tY29kZXBvaW50CisJCS8vIFN1cHBvcnQ6IEZpcmVmb3g8MjQKKwkJLy8gV29ya2Fyb3VuZCBlcnJvbmVvdXMgbnVtZXJpYyBpbnRlcnByZXRhdGlvbiBvZiArIjB4IgorCQlyZXR1cm4gaGlnaCAhPT0gaGlnaCB8fCBlc2NhcGVkV2hpdGVzcGFjZSA/CisJCQllc2NhcGVkIDoKKwkJCWhpZ2ggPCAwID8KKwkJCQkvLyBCTVAgY29kZXBvaW50CisJCQkJU3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6CisJCQkJLy8gU3VwcGxlbWVudGFsIFBsYW5lIGNvZGVwb2ludCAoc3Vycm9nYXRlIHBhaXIpCisJCQkJU3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7CisJfSwKKworCS8vIFVzZWQgZm9yIGlmcmFtZXMKKwkvLyBTZWUgc2V0RG9jdW1lbnQoKQorCS8vIFJlbW92aW5nIHRoZSBmdW5jdGlvbiB3cmFwcGVyIGNhdXNlcyBhICJQZXJtaXNzaW9uIERlbmllZCIKKwkvLyBlcnJvciBpbiBJRQorCXVubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHsKKwkJc2V0RG9jdW1lbnQoKTsKKwl9OworCisvLyBPcHRpbWl6ZSBmb3IgcHVzaC5hcHBseSggXywgTm9kZUxpc3QgKQordHJ5IHsKKwlwdXNoLmFwcGx5KAorCQkoYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSksCisJCXByZWZlcnJlZERvYy5jaGlsZE5vZGVzCisJKTsKKwkvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMAorCS8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHkKKwlhcnJbIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzLmxlbmd0aCBdLm5vZGVUeXBlOworfSBjYXRjaCAoIGUgKSB7CisJcHVzaCA9IHsgYXBwbHk6IGFyci5sZW5ndGggPworCisJCS8vIExldmVyYWdlIHNsaWNlIGlmIHBvc3NpYmxlCisJCWZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHsKKwkJCXB1c2hfbmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoZWxzKSApOworCQl9IDoKKworCQkvLyBTdXBwb3J0OiBJRTw5CisJCS8vIE90aGVyd2lzZSBhcHBlbmQgZGlyZWN0bHkKKwkJZnVuY3Rpb24oIHRhcmdldCwgZWxzICkgeworCQkJdmFyIGogPSB0YXJnZXQubGVuZ3RoLAorCQkJCWkgPSAwOworCQkJLy8gQ2FuJ3QgdHJ1c3QgTm9kZUxpc3QubGVuZ3RoCisJCQl3aGlsZSAoICh0YXJnZXRbaisrXSA9IGVsc1tpKytdKSApIHt9CisJCQl0YXJnZXQubGVuZ3RoID0gaiAtIDE7CisJCX0KKwl9OworfQorCitmdW5jdGlvbiBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkgeworCXZhciBtLCBpLCBlbGVtLCBuaWQsIG5pZHNlbGVjdCwgbWF0Y2gsIGdyb3VwcywgbmV3U2VsZWN0b3IsCisJCW5ld0NvbnRleHQgPSBjb250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1bWVudCwKKworCQkvLyBub2RlVHlwZSBkZWZhdWx0cyB0byA5LCBzaW5jZSBjb250ZXh0IGRlZmF1bHRzIHRvIGRvY3VtZW50CisJCW5vZGVUeXBlID0gY29udGV4dCA/IGNvbnRleHQubm9kZVR5cGUgOiA5OworCisJcmVzdWx0cyA9IHJlc3VsdHMgfHwgW107CisKKwkvLyBSZXR1cm4gZWFybHkgZnJvbSBjYWxscyB3aXRoIGludmFsaWQgc2VsZWN0b3Igb3IgY29udGV4dAorCWlmICggdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5nIiB8fCAhc2VsZWN0b3IgfHwKKwkJbm9kZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgJiYgbm9kZVR5cGUgIT09IDExICkgeworCisJCXJldHVybiByZXN1bHRzOworCX0KKworCS8vIFRyeSB0byBzaG9ydGN1dCBmaW5kIG9wZXJhdGlvbnMgKGFzIG9wcG9zZWQgdG8gZmlsdGVycykgaW4gSFRNTCBkb2N1bWVudHMKKwlpZiAoICFzZWVkICkgeworCisJCWlmICggKCBjb250ZXh0ID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBwcmVmZXJyZWREb2MgKSAhPT0gZG9jdW1lbnQgKSB7CisJCQlzZXREb2N1bWVudCggY29udGV4dCApOworCQl9CisJCWNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OworCisJCWlmICggZG9jdW1lbnRJc0hUTUwgKSB7CisKKwkJCS8vIElmIHRoZSBzZWxlY3RvciBpcyBzdWZmaWNpZW50bHkgc2ltcGxlLCB0cnkgdXNpbmcgYSAiZ2V0KkJ5KiIgRE9NIG1ldGhvZAorCQkJLy8gKGV4Y2VwdGluZyBEb2N1bWVudEZyYWdtZW50IGNvbnRleHQsIHdoZXJlIHRoZSBtZXRob2RzIGRvbid0IGV4aXN0KQorCQkJaWYgKCBub2RlVHlwZSAhPT0gMTEgJiYgKG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApKSApIHsKKworCQkJCS8vIElEIHNlbGVjdG9yCisJCQkJaWYgKCAobSA9IG1hdGNoWzFdKSApIHsKKworCQkJCQkvLyBEb2N1bWVudCBjb250ZXh0CisJCQkJCWlmICggbm9kZVR5cGUgPT09IDkgKSB7CisJCQkJCQlpZiAoIChlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSApIHsKKworCQkJCQkJCS8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0CisJCQkJCQkJLy8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnMKKwkJCQkJCQkvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElECisJCQkJCQkJaWYgKCBlbGVtLmlkID09PSBtICkgeworCQkJCQkJCQlyZXN1bHRzLnB1c2goIGVsZW0gKTsKKwkJCQkJCQkJcmV0dXJuIHJlc3VsdHM7CisJCQkJCQkJfQorCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlyZXR1cm4gcmVzdWx0czsKKwkJCQkJCX0KKworCQkJCQkvLyBFbGVtZW50IGNvbnRleHQKKwkJCQkJfSBlbHNlIHsKKworCQkJCQkJLy8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXQKKwkJCQkJCS8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zCisJCQkJCQkvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElECisJCQkJCQlpZiAoIG5ld0NvbnRleHQgJiYgKGVsZW0gPSBuZXdDb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkpICYmCisJCQkJCQkJY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJgorCQkJCQkJCWVsZW0uaWQgPT09IG0gKSB7CisKKwkJCQkJCQlyZXN1bHRzLnB1c2goIGVsZW0gKTsKKwkJCQkJCQlyZXR1cm4gcmVzdWx0czsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJLy8gVHlwZSBzZWxlY3RvcgorCQkJCX0gZWxzZSBpZiAoIG1hdGNoWzJdICkgeworCQkJCQlwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApICk7CisJCQkJCXJldHVybiByZXN1bHRzOworCisJCQkJLy8gQ2xhc3Mgc2VsZWN0b3IKKwkJCQl9IGVsc2UgaWYgKCAobSA9IG1hdGNoWzNdKSAmJiBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYKKwkJCQkJY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkgeworCisJCQkJCXB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7CisJCQkJCXJldHVybiByZXN1bHRzOworCQkJCX0KKwkJCX0KKworCQkJLy8gVGFrZSBhZHZhbnRhZ2Ugb2YgcXVlcnlTZWxlY3RvckFsbAorCQkJaWYgKCBzdXBwb3J0LnFzYSAmJgorCQkJCSFjb21waWxlckNhY2hlWyBzZWxlY3RvciArICIgIiBdICYmCisJCQkJKCFyYnVnZ3lRU0EgfHwgIXJidWdneVFTQS50ZXN0KCBzZWxlY3RvciApKSApIHsKKworCQkJCWlmICggbm9kZVR5cGUgIT09IDEgKSB7CisJCQkJCW5ld0NvbnRleHQgPSBjb250ZXh0OworCQkJCQluZXdTZWxlY3RvciA9IHNlbGVjdG9yOworCisJCQkJLy8gcVNBIGxvb2tzIG91dHNpZGUgRWxlbWVudCBjb250ZXh0LCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50CisJCQkJLy8gVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgd29ya2Fyb3VuZCB0ZWNobmlxdWUKKwkJCQkvLyBTdXBwb3J0OiBJRSA8PTgKKwkJCQkvLyBFeGNsdWRlIG9iamVjdCBlbGVtZW50cworCQkJCX0gZWxzZSBpZiAoIGNvbnRleHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gIm9iamVjdCIgKSB7CisKKwkJCQkJLy8gQ2FwdHVyZSB0aGUgY29udGV4dCBJRCwgc2V0dGluZyBpdCBmaXJzdCBpZiBuZWNlc3NhcnkKKwkJCQkJaWYgKCAobmlkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoICJpZCIgKSkgKSB7CisJCQkJCQluaWQgPSBuaWQucmVwbGFjZSggcmVzY2FwZSwgIlxcJCYiICk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQljb250ZXh0LnNldEF0dHJpYnV0ZSggImlkIiwgKG5pZCA9IGV4cGFuZG8pICk7CisJCQkJCX0KKworCQkJCQkvLyBQcmVmaXggZXZlcnkgc2VsZWN0b3IgaW4gdGhlIGxpc3QKKwkJCQkJZ3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7CisJCQkJCWkgPSBncm91cHMubGVuZ3RoOworCQkJCQluaWRzZWxlY3QgPSByaWRlbnRpZmllci50ZXN0KCBuaWQgKSA/ICIjIiArIG5pZCA6ICJbaWQ9JyIgKyBuaWQgKyAiJ10iOworCQkJCQl3aGlsZSAoIGktLSApIHsKKwkJCQkJCWdyb3Vwc1tpXSA9IG5pZHNlbGVjdCArICIgIiArIHRvU2VsZWN0b3IoIGdyb3Vwc1tpXSApOworCQkJCQl9CisJCQkJCW5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oICIsIiApOworCisJCQkJCS8vIEV4cGFuZCBjb250ZXh0IGZvciBzaWJsaW5nIHNlbGVjdG9ycworCQkJCQluZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwKKwkJCQkJCWNvbnRleHQ7CisJCQkJfQorCisJCQkJaWYgKCBuZXdTZWxlY3RvciApIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCXB1c2guYXBwbHkoIHJlc3VsdHMsCisJCQkJCQkJbmV3Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCBuZXdTZWxlY3RvciApCisJCQkJCQkpOworCQkJCQkJcmV0dXJuIHJlc3VsdHM7CisJCQkJCX0gY2F0Y2ggKCBxc2FFcnJvciApIHsKKwkJCQkJfSBmaW5hbGx5IHsKKwkJCQkJCWlmICggbmlkID09PSBleHBhbmRvICkgeworCQkJCQkJCWNvbnRleHQucmVtb3ZlQXR0cmlidXRlKCAiaWQiICk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvLyBBbGwgb3RoZXJzCisJcmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sICIkMSIgKSwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApOworfQorCisvKioKKyAqIENyZWF0ZSBrZXktdmFsdWUgY2FjaGVzIG9mIGxpbWl0ZWQgc2l6ZQorICogQHJldHVybnMge2Z1bmN0aW9uKHN0cmluZywgb2JqZWN0KX0gUmV0dXJucyB0aGUgT2JqZWN0IGRhdGEgYWZ0ZXIgc3RvcmluZyBpdCBvbiBpdHNlbGYgd2l0aAorICoJcHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aCkKKyAqCWRlbGV0aW5nIHRoZSBvbGRlc3QgZW50cnkKKyAqLworZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7CisJdmFyIGtleXMgPSBbXTsKKworCWZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkgeworCQkvLyBVc2UgKGtleSArICIgIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1NykKKwkJaWYgKCBrZXlzLnB1c2goIGtleSArICIgIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHsKKwkJCS8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllcworCQkJZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTsKKwkJfQorCQlyZXR1cm4gKGNhY2hlWyBrZXkgKyAiICIgXSA9IHZhbHVlKTsKKwl9CisJcmV0dXJuIGNhY2hlOworfQorCisvKioKKyAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbWFyaworICovCitmdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkgeworCWZuWyBleHBhbmRvIF0gPSB0cnVlOworCXJldHVybiBmbjsKK30KKworLyoqCisgKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudAorICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGRpdiBhbmQgZXhwZWN0cyBhIGJvb2xlYW4gcmVzdWx0CisgKi8KK2Z1bmN0aW9uIGFzc2VydCggZm4gKSB7CisJdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworCisJdHJ5IHsKKwkJcmV0dXJuICEhZm4oIGRpdiApOworCX0gY2F0Y2ggKGUpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0gZmluYWxseSB7CisJCS8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkgZGVmYXVsdAorCQlpZiAoIGRpdi5wYXJlbnROb2RlICkgeworCQkJZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGRpdiApOworCQl9CisJCS8vIHJlbGVhc2UgbWVtb3J5IGluIElFCisJCWRpdiA9IG51bGw7CisJfQorfQorCisvKioKKyAqIEFkZHMgdGhlIHNhbWUgaGFuZGxlciBmb3IgYWxsIG9mIHRoZSBzcGVjaWZpZWQgYXR0cnMKKyAqIEBwYXJhbSB7U3RyaW5nfSBhdHRycyBQaXBlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXMKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgYXBwbGllZAorICovCitmdW5jdGlvbiBhZGRIYW5kbGUoIGF0dHJzLCBoYW5kbGVyICkgeworCXZhciBhcnIgPSBhdHRycy5zcGxpdCgifCIpLAorCQlpID0gYXJyLmxlbmd0aDsKKworCXdoaWxlICggaS0tICkgeworCQlFeHByLmF0dHJIYW5kbGVbIGFycltpXSBdID0gaGFuZGxlcjsKKwl9Cit9CisKKy8qKgorICogQ2hlY2tzIGRvY3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5ncworICogQHBhcmFtIHtFbGVtZW50fSBhCisgKiBAcGFyYW0ge0VsZW1lbnR9IGIKKyAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxvd3MgYgorICovCitmdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7CisJdmFyIGN1ciA9IGIgJiYgYSwKKwkJZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiYKKwkJCSggfmIuc291cmNlSW5kZXggfHwgTUFYX05FR0FUSVZFICkgLQorCQkJKCB+YS5zb3VyY2VJbmRleCB8fCBNQVhfTkVHQVRJVkUgKTsKKworCS8vIFVzZSBJRSBzb3VyY2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2RlcworCWlmICggZGlmZiApIHsKKwkJcmV0dXJuIGRpZmY7CisJfQorCisJLy8gQ2hlY2sgaWYgYiBmb2xsb3dzIGEKKwlpZiAoIGN1ciApIHsKKwkJd2hpbGUgKCAoY3VyID0gY3VyLm5leHRTaWJsaW5nKSApIHsKKwkJCWlmICggY3VyID09PSBiICkgeworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBhID8gMSA6IC0xOworfQorCisvKioKKyAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXMKKyAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlCisgKi8KK2Z1bmN0aW9uIGNyZWF0ZUlucHV0UHNldWRvKCB0eXBlICkgeworCXJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKwkJdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisJCXJldHVybiBuYW1lID09PSAiaW5wdXQiICYmIGVsZW0udHlwZSA9PT0gdHlwZTsKKwl9OworfQorCisvKioKKyAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9ucworICogQHBhcmFtIHtTdHJpbmd9IHR5cGUKKyAqLworZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKCB0eXBlICkgeworCXJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKwkJdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisJCXJldHVybiAobmFtZSA9PT0gImlucHV0IiB8fCBuYW1lID09PSAiYnV0dG9uIikgJiYgZWxlbS50eXBlID09PSB0eXBlOworCX07Cit9CisKKy8qKgorICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFscworICogQHBhcmFtIHtGdW5jdGlvbn0gZm4KKyAqLworZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4gKSB7CisJcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQgKSB7CisJCWFyZ3VtZW50ID0gK2FyZ3VtZW50OworCQlyZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkgeworCQkJdmFyIGosCisJCQkJbWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQgKSwKKwkJCQlpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDsKKworCQkJLy8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzCisJCQl3aGlsZSAoIGktLSApIHsKKwkJCQlpZiAoIHNlZWRbIChqID0gbWF0Y2hJbmRleGVzW2ldKSBdICkgeworCQkJCQlzZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7CisJCQkJfQorCQkJfQorCQl9KTsKKwl9KTsKK30KKworLyoqCisgKiBDaGVja3MgYSBub2RlIGZvciB2YWxpZGl0eSBhcyBhIFNpenpsZSBjb250ZXh0CisgKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0PX0gY29udGV4dAorICogQHJldHVybnMge0VsZW1lbnR8T2JqZWN0fEJvb2xlYW59IFRoZSBpbnB1dCBub2RlIGlmIGFjY2VwdGFibGUsIG90aGVyd2lzZSBhIGZhbHN5IHZhbHVlCisgKi8KK2Z1bmN0aW9uIHRlc3RDb250ZXh0KCBjb250ZXh0ICkgeworCXJldHVybiBjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZpbmVkIiAmJiBjb250ZXh0OworfQorCisvLyBFeHBvc2Ugc3VwcG9ydCB2YXJzIGZvciBjb252ZW5pZW5jZQorc3VwcG9ydCA9IFNpenpsZS5zdXBwb3J0ID0ge307CisKKy8qKgorICogRGV0ZWN0cyBYTUwgbm9kZXMKKyAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IGVsZW0gQW4gZWxlbWVudCBvciBhIGRvY3VtZW50CisgKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZmYgZWxlbSBpcyBhIG5vbi1IVE1MIFhNTCBub2RlCisgKi8KK2lzWE1MID0gU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7CisJLy8gZG9jdW1lbnRFbGVtZW50IGlzIHZlcmlmaWVkIGZvciBjYXNlcyB3aGVyZSBpdCBkb2Vzbid0IHlldCBleGlzdAorCS8vIChzdWNoIGFzIGxvYWRpbmcgaWZyYW1lcyBpbiBJRSAtICM0ODMzKQorCXZhciBkb2N1bWVudEVsZW1lbnQgPSBlbGVtICYmIChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9jdW1lbnRFbGVtZW50OworCXJldHVybiBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgIT09ICJIVE1MIiA6IGZhbHNlOworfTsKKworLyoqCisgKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnQKKyAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtkb2NdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQgb2JqZWN0IHRvIHVzZSB0byBzZXQgdGhlIGRvY3VtZW50CisgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGRvY3VtZW50CisgKi8KK3NldERvY3VtZW50ID0gU2l6emxlLnNldERvY3VtZW50ID0gZnVuY3Rpb24oIG5vZGUgKSB7CisJdmFyIGhhc0NvbXBhcmUsIHBhcmVudCwKKwkJZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlIDogcHJlZmVycmVkRG9jOworCisJLy8gUmV0dXJuIGVhcmx5IGlmIGRvYyBpcyBpbnZhbGlkIG9yIGFscmVhZHkgc2VsZWN0ZWQKKwlpZiAoIGRvYyA9PT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkgeworCQlyZXR1cm4gZG9jdW1lbnQ7CisJfQorCisJLy8gVXBkYXRlIGdsb2JhbCB2YXJpYWJsZXMKKwlkb2N1bWVudCA9IGRvYzsKKwlkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OworCWRvY3VtZW50SXNIVE1MID0gIWlzWE1MKCBkb2N1bWVudCApOworCisJLy8gU3VwcG9ydDogSUUgOS0xMSwgRWRnZQorCS8vIEFjY2Vzc2luZyBpZnJhbWUgZG9jdW1lbnRzIGFmdGVyIHVubG9hZCB0aHJvd3MgInBlcm1pc3Npb24gZGVuaWVkIiBlcnJvcnMgKGpRdWVyeSAjMTM5MzYpCisJaWYgKCAocGFyZW50ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcpICYmIHBhcmVudC50b3AgIT09IHBhcmVudCApIHsKKwkJLy8gU3VwcG9ydDogSUUgMTEKKwkJaWYgKCBwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lciApIHsKKwkJCXBhcmVudC5hZGRFdmVudExpc3RlbmVyKCAidW5sb2FkIiwgdW5sb2FkSGFuZGxlciwgZmFsc2UgKTsKKworCQkvLyBTdXBwb3J0OiBJRSA5IC0gMTAgb25seQorCQl9IGVsc2UgaWYgKCBwYXJlbnQuYXR0YWNoRXZlbnQgKSB7CisJCQlwYXJlbnQuYXR0YWNoRXZlbnQoICJvbnVubG9hZCIsIHVubG9hZEhhbmRsZXIgKTsKKwkJfQorCX0KKworCS8qIEF0dHJpYnV0ZXMKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKwkvLyBTdXBwb3J0OiBJRTw4CisJLy8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1cm5zIGF0dHJpYnV0ZXMgYW5kIG5vdCBwcm9wZXJ0aWVzCisJLy8gKGV4Y2VwdGluZyBJRTggYm9vbGVhbnMpCisJc3VwcG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisJCWRpdi5jbGFzc05hbWUgPSAiaSI7CisJCXJldHVybiAhZGl2LmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIik7CisJfSk7CisKKwkvKiBnZXRFbGVtZW50KHMpQnkqCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSByZXR1cm5zIG9ubHkgZWxlbWVudHMKKwlzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisJCWRpdi5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIikgKTsKKwkJcmV0dXJuICFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg7CisJfSk7CisKKwkvLyBTdXBwb3J0OiBJRTw5CisJc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICk7CisKKwkvLyBTdXBwb3J0OiBJRTwxMAorCS8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZQorCS8vIFRoZSBicm9rZW4gZ2V0RWxlbWVudEJ5SWQgbWV0aG9kcyBkb24ndCBwaWNrIHVwIHByb2dyYW1hdGljYWxseS1zZXQgbmFtZXMsCisJLy8gc28gdXNlIGEgcm91bmRhYm91dCBnZXRFbGVtZW50c0J5TmFtZSB0ZXN0CisJc3VwcG9ydC5nZXRCeUlkID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisJCWRvY0VsZW0uYXBwZW5kQ2hpbGQoIGRpdiApLmlkID0gZXhwYW5kbzsKKwkJcmV0dXJuICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGg7CisJfSk7CisKKwkvLyBJRCBmaW5kIGFuZCBmaWx0ZXIKKwlpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHsKKwkJRXhwci5maW5kWyJJRCJdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkgeworCQkJaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gInVuZGVmaW5lZCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7CisJCQkJdmFyIG0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApOworCQkJCXJldHVybiBtID8gWyBtIF0gOiBbXTsKKwkJCX0KKwkJfTsKKwkJRXhwci5maWx0ZXJbIklEIl0gPSBmdW5jdGlvbiggaWQgKSB7CisJCQl2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKKwkJCXJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCQlyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoImlkIikgPT09IGF0dHJJZDsKKwkJCX07CisJCX07CisJfSBlbHNlIHsKKwkJLy8gU3VwcG9ydDogSUU2LzcKKwkJLy8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9ydGN1dAorCQlkZWxldGUgRXhwci5maW5kWyJJRCJdOworCisJCUV4cHIuZmlsdGVyWyJJRCJdID0gIGZ1bmN0aW9uKCBpZCApIHsKKwkJCXZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApOworCQkJcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworCQkJCXZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gInVuZGVmaW5lZCIgJiYKKwkJCQkJZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpOworCQkJCXJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDsKKwkJCX07CisJCX07CisJfQorCisJLy8gVGFnCisJRXhwci5maW5kWyJUQUciXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPworCQlmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkgeworCQkJaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7CisJCQkJcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApOworCisJCQkvLyBEb2N1bWVudEZyYWdtZW50IG5vZGVzIGRvbid0IGhhdmUgZ0VCVE4KKwkJCX0gZWxzZSBpZiAoIHN1cHBvcnQucXNhICkgeworCQkJCXJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApOworCQkJfQorCQl9IDoKKworCQlmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkgeworCQkJdmFyIGVsZW0sCisJCQkJdG1wID0gW10sCisJCQkJaSA9IDAsCisJCQkJLy8gQnkgaGFwcHkgY29pbmNpZGVuY2UsIGEgKGJyb2tlbikgZ0VCVE4gYXBwZWFycyBvbiBEb2N1bWVudEZyYWdtZW50IG5vZGVzIHRvbworCQkJCXJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTsKKworCQkJLy8gRmlsdGVyIG91dCBwb3NzaWJsZSBjb21tZW50cworCQkJaWYgKCB0YWcgPT09ICIqIiApIHsKKwkJCQl3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytdKSApIHsKKwkJCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworCQkJCQkJdG1wLnB1c2goIGVsZW0gKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCXJldHVybiB0bXA7CisJCQl9CisJCQlyZXR1cm4gcmVzdWx0czsKKwkJfTsKKworCS8vIENsYXNzCisJRXhwci5maW5kWyJDTEFTUyJdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQgKSB7CisJCWlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gInVuZGVmaW5lZCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7CisJCQlyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTsKKwkJfQorCX07CisKKwkvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJLy8gUVNBIGFuZCBtYXRjaGVzU2VsZWN0b3Igc3VwcG9ydAorCisJLy8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSkKKwlyYnVnZ3lNYXRjaGVzID0gW107CisKKwkvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIxKQorCS8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvcgorCS8vIHdoZW5ldmVyIGBkb2N1bWVudC5hY3RpdmVFbGVtZW50YCBpcyBhY2Nlc3NlZCBvbiBhbiBpZnJhbWUKKwkvLyBTbywgd2UgYWxsb3cgOmZvY3VzIHRvIHBhc3MgdGhyb3VnaCBRU0EgYWxsIHRoZSB0aW1lIHRvIGF2b2lkIHRoZSBJRSBlcnJvcgorCS8vIFNlZSBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM3OAorCXJidWdneVFTQSA9IFtdOworCisJaWYgKCAoc3VwcG9ydC5xc2EgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSkgKSB7CisJCS8vIEJ1aWxkIFFTQSByZWdleAorCQkvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pCisJCWFzc2VydChmdW5jdGlvbiggZGl2ICkgeworCQkJLy8gU2VsZWN0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZQorCQkJLy8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5CisJCQkvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSwKKwkJCS8vIHNpbmNlIGl0cyBwcmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoCisJCQkvLyBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OQorCQkJZG9jRWxlbS5hcHBlbmRDaGlsZCggZGl2ICkuaW5uZXJIVE1MID0gIjxhIGlkPSciICsgZXhwYW5kbyArICInPjwvYT4iICsKKwkJCQkiPHNlbGVjdCBpZD0nIiArIGV4cGFuZG8gKyAiLVxyXFwnIG1zYWxsb3djYXB0dXJlPScnPiIgKworCQkJCSI8b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiI7CisKKwkJCS8vIFN1cHBvcnQ6IElFOCwgT3BlcmEgMTEtMTIuMTYKKwkJCS8vIE5vdGhpbmcgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gZW1wdHkgc3RyaW5ncyBmb2xsb3cgXj0gb3IgJD0gb3IgKj0KKwkJCS8vIFRoZSB0ZXN0IGF0dHJpYnV0ZSBtdXN0IGJlIHVua25vd24gaW4gT3BlcmEgYnV0ICJzYWZlIiBmb3IgV2luUlQKKwkJCS8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9oaDQ2NTM4OC5hc3B4I2F0dHJpYnV0ZV9zZWN0aW9uCisJCQlpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVePScnXSIpLmxlbmd0aCApIHsKKwkJCQlyYnVnZ3lRU0EucHVzaCggIlsqXiRdPSIgKyB3aGl0ZXNwYWNlICsgIiooPzonJ3xcIlwiKSIgKTsKKwkJCX0KKworCQkJLy8gU3VwcG9ydDogSUU4CisJCQkvLyBCb29sZWFuIGF0dHJpYnV0ZXMgYW5kICJ2YWx1ZSIgYXJlIG5vdCB0cmVhdGVkIGNvcnJlY3RseQorCQkJaWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGggKSB7CisJCQkJcmJ1Z2d5UVNBLnB1c2goICJcXFsiICsgd2hpdGVzcGFjZSArICIqKD86dmFsdWV8IiArIGJvb2xlYW5zICsgIikiICk7CisJCQl9CisKKwkJCS8vIFN1cHBvcnQ6IENocm9tZTwyOSwgQW5kcm9pZDw0LjQsIFNhZmFyaTw3LjArLCBpT1M8Ny4wKywgUGhhbnRvbUpTPDEuOS44KworCQkJaWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoICJbaWR+PSIgKyBleHBhbmRvICsgIi1dIiApLmxlbmd0aCApIHsKKwkJCQlyYnVnZ3lRU0EucHVzaCgifj0iKTsKKwkJCX0KKworCQkJLy8gV2Via2l0L09wZXJhIC0gOmNoZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHMKKwkJCS8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkCisJCQkvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0cworCQkJaWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RoICkgeworCQkJCXJidWdneVFTQS5wdXNoKCI6Y2hlY2tlZCIpOworCQkJfQorCisJCQkvLyBTdXBwb3J0OiBTYWZhcmkgOCssIGlPUyA4KworCQkJLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjg1MQorCQkJLy8gSW4tcGFnZSBgc2VsZWN0b3IjaWQgc2liaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzCisJCQlpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCggImEjIiArIGV4cGFuZG8gKyAiKyoiICkubGVuZ3RoICkgeworCQkJCXJidWdneVFTQS5wdXNoKCIuIy4rWyt+XSIpOworCQkJfQorCQl9KTsKKworCQlhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKKwkJCS8vIFN1cHBvcnQ6IFdpbmRvd3MgOCBOYXRpdmUgQXBwcworCQkJLy8gVGhlIHR5cGUgYW5kIG5hbWUgYXR0cmlidXRlcyBhcmUgcmVzdHJpY3RlZCBkdXJpbmcgLmlubmVySFRNTCBhc3NpZ25tZW50CisJCQl2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOworCQkJaW5wdXQuc2V0QXR0cmlidXRlKCAidHlwZSIsICJoaWRkZW4iICk7CisJCQlkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCAibmFtZSIsICJEIiApOworCisJCQkvLyBTdXBwb3J0OiBJRTgKKwkJCS8vIEVuZm9yY2UgY2FzZS1zZW5zaXRpdml0eSBvZiBuYW1lIGF0dHJpYnV0ZQorCQkJaWYgKCBkaXYucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGggKSB7CisJCQkJcmJ1Z2d5UVNBLnB1c2goICJuYW1lIiArIHdoaXRlc3BhY2UgKyAiKlsqXiR8IX5dPz0iICk7CisJCQl9CisKKwkJCS8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpCisJCQkvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0cworCQkJaWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RoICkgeworCQkJCXJidWdneVFTQS5wdXNoKCAiOmVuYWJsZWQiLCAiOmRpc2FibGVkIiApOworCQkJfQorCisJCQkvLyBPcGVyYSAxMC0xMSBkb2VzIG5vdCB0aHJvdyBvbiBwb3N0LWNvbW1hIGludmFsaWQgcHNldWRvcworCQkJZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKTsKKwkJCXJidWdneVFTQS5wdXNoKCIsLio6Iik7CisJCX0pOworCX0KKworCWlmICggKHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0KCAobWF0Y2hlcyA9IGRvY0VsZW0ubWF0Y2hlcyB8fAorCQlkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fAorCQlkb2NFbGVtLm1vek1hdGNoZXNTZWxlY3RvciB8fAorCQlkb2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHwKKwkJZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvcikgKSkgKSB7CisKKwkJYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisJCQkvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3IKKwkJCS8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpCisJCQlzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBkaXYsICJkaXYiICk7CisKKwkJCS8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb24KKwkJCS8vIEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWQKKwkJCW1hdGNoZXMuY2FsbCggZGl2LCAiW3MhPScnXTp4IiApOworCQkJcmJ1Z2d5TWF0Y2hlcy5wdXNoKCAiIT0iLCBwc2V1ZG9zICk7CisJCX0pOworCX0KKworCXJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oInwiKSApOworCXJidWdneU1hdGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oInwiKSApOworCisJLyogQ29udGFpbnMKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJaGFzQ29tcGFyZSA9IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApOworCisJLy8gRWxlbWVudCBjb250YWlucyBhbm90aGVyCisJLy8gUHVycG9zZWZ1bGx5IHNlbGYtZXhjbHVzaXZlCisJLy8gQXMgaW4sIGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGYKKwljb250YWlucyA9IGhhc0NvbXBhcmUgfHwgcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbnRhaW5zICkgPworCQlmdW5jdGlvbiggYSwgYiApIHsKKwkJCXZhciBhZG93biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsCisJCQkJYnVwID0gYiAmJiBiLnBhcmVudE5vZGU7CisJCQlyZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAxICYmICgKKwkJCQlhZG93bi5jb250YWlucyA/CisJCQkJCWFkb3duLmNvbnRhaW5zKCBidXAgKSA6CisJCQkJCWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNgorCQkJKSk7CisJCX0gOgorCQlmdW5jdGlvbiggYSwgYiApIHsKKwkJCWlmICggYiApIHsKKwkJCQl3aGlsZSAoIChiID0gYi5wYXJlbnROb2RlKSApIHsKKwkJCQkJaWYgKCBiID09PSBhICkgeworCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7CisJCX07CisKKwkvKiBTb3J0aW5nCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJLy8gRG9jdW1lbnQgb3JkZXIgc29ydGluZworCXNvcnRPcmRlciA9IGhhc0NvbXBhcmUgPworCWZ1bmN0aW9uKCBhLCBiICkgeworCisJCS8vIEZsYWcgZm9yIGR1cGxpY2F0ZSByZW1vdmFsCisJCWlmICggYSA9PT0gYiApIHsKKwkJCWhhc0R1cGxpY2F0ZSA9IHRydWU7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8vIFNvcnQgb24gbWV0aG9kIGV4aXN0ZW5jZSBpZiBvbmx5IG9uZSBpbnB1dCBoYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb24KKwkJdmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uOworCQlpZiAoIGNvbXBhcmUgKSB7CisJCQlyZXR1cm4gY29tcGFyZTsKKwkJfQorCisJCS8vIENhbGN1bGF0ZSBwb3NpdGlvbiBpZiBib3RoIGlucHV0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZG9jdW1lbnQKKwkJY29tcGFyZSA9ICggYS5vd25lckRvY3VtZW50IHx8IGEgKSA9PT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID8KKwkJCWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGIgKSA6CisKKwkJCS8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRpc2Nvbm5lY3RlZAorCQkJMTsKKworCQkvLyBEaXNjb25uZWN0ZWQgbm9kZXMKKwkJaWYgKCBjb21wYXJlICYgMSB8fAorCQkJKCFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUpICkgeworCisJCQkvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnQKKwkJCWlmICggYSA9PT0gZG9jdW1lbnQgfHwgYS5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMocHJlZmVycmVkRG9jLCBhKSApIHsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQlpZiAoIGIgPT09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYikgKSB7CisJCQkJcmV0dXJuIDE7CisJCQl9CisKKwkJCS8vIE1haW50YWluIG9yaWdpbmFsIG9yZGVyCisJCQlyZXR1cm4gc29ydElucHV0ID8KKwkJCQkoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6CisJCQkJMDsKKwkJfQorCisJCXJldHVybiBjb21wYXJlICYgNCA/IC0xIDogMTsKKwl9IDoKKwlmdW5jdGlvbiggYSwgYiApIHsKKwkJLy8gRXhpdCBlYXJseSBpZiB0aGUgbm9kZXMgYXJlIGlkZW50aWNhbAorCQlpZiAoIGEgPT09IGIgKSB7CisJCQloYXNEdXBsaWNhdGUgPSB0cnVlOworCQkJcmV0dXJuIDA7CisJCX0KKworCQl2YXIgY3VyLAorCQkJaSA9IDAsCisJCQlhdXAgPSBhLnBhcmVudE5vZGUsCisJCQlidXAgPSBiLnBhcmVudE5vZGUsCisJCQlhcCA9IFsgYSBdLAorCQkJYnAgPSBbIGIgXTsKKworCQkvLyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBlaXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5lY3RlZAorCQlpZiAoICFhdXAgfHwgIWJ1cCApIHsKKwkJCXJldHVybiBhID09PSBkb2N1bWVudCA/IC0xIDoKKwkJCQliID09PSBkb2N1bWVudCA/IDEgOgorCQkJCWF1cCA/IC0xIDoKKwkJCQlidXAgPyAxIDoKKwkJCQlzb3J0SW5wdXQgPworCQkJCSggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDoKKwkJCQkwOworCisJCS8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MsIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrCisJCX0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkgeworCQkJcmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApOworCQl9CisKKwkJLy8gT3RoZXJ3aXNlIHdlIG5lZWQgZnVsbCBsaXN0cyBvZiB0aGVpciBhbmNlc3RvcnMgZm9yIGNvbXBhcmlzb24KKwkJY3VyID0gYTsKKwkJd2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkgeworCQkJYXAudW5zaGlmdCggY3VyICk7CisJCX0KKwkJY3VyID0gYjsKKwkJd2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkgeworCQkJYnAudW5zaGlmdCggY3VyICk7CisJCX0KKworCQkvLyBXYWxrIGRvd24gdGhlIHRyZWUgbG9va2luZyBmb3IgYSBkaXNjcmVwYW5jeQorCQl3aGlsZSAoIGFwW2ldID09PSBicFtpXSApIHsKKwkJCWkrKzsKKwkJfQorCisJCXJldHVybiBpID8KKwkJCS8vIERvIGEgc2libGluZyBjaGVjayBpZiB0aGUgbm9kZXMgaGF2ZSBhIGNvbW1vbiBhbmNlc3RvcgorCQkJc2libGluZ0NoZWNrKCBhcFtpXSwgYnBbaV0gKSA6CisKKwkJCS8vIE90aGVyd2lzZSBub2RlcyBpbiBvdXIgZG9jdW1lbnQgc29ydCBmaXJzdAorCQkJYXBbaV0gPT09IHByZWZlcnJlZERvYyA/IC0xIDoKKwkJCWJwW2ldID09PSBwcmVmZXJyZWREb2MgPyAxIDoKKwkJCTA7CisJfTsKKworCXJldHVybiBkb2N1bWVudDsKK307CisKK1NpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1lbnRzICkgeworCXJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1lbnRzICk7Cit9OworCitTaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7CisJLy8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkCisJaWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkgeworCQlzZXREb2N1bWVudCggZWxlbSApOworCX0KKworCS8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJpYnV0ZSBzZWxlY3RvcnMgYXJlIHF1b3RlZAorCWV4cHIgPSBleHByLnJlcGxhY2UoIHJhdHRyaWJ1dGVRdW90ZXMsICI9JyQxJ10iICk7CisKKwlpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmCisJCSFjb21waWxlckNhY2hlWyBleHByICsgIiAiIF0gJiYKKwkJKCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJgorCQkoICFyYnVnZ3lRU0EgICAgIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7CisKKwkJdHJ5IHsKKwkJCXZhciByZXQgPSBtYXRjaGVzLmNhbGwoIGVsZW0sIGV4cHIgKTsKKworCQkJLy8gSUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBub2RlcworCQkJaWYgKCByZXQgfHwgc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCB8fAorCQkJCQkvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudAorCQkJCQkvLyBmcmFnbWVudCBpbiBJRSA5CisJCQkJCWVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfSBjYXRjaCAoZSkge30KKwl9CisKKwlyZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwOworfTsKKworU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7CisJLy8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkCisJaWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT09IGRvY3VtZW50ICkgeworCQlzZXREb2N1bWVudCggY29udGV4dCApOworCX0KKwlyZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTsKK307CisKK1NpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CisJLy8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkCisJaWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkgeworCQlzZXREb2N1bWVudCggZWxlbSApOworCX0KKworCXZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sCisJCS8vIERvbid0IGdldCBmb29sZWQgYnkgT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChqUXVlcnkgIzEzODA3KQorCQl2YWwgPSBmbiAmJiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNlKCkgKSA/CisJCQlmbiggZWxlbSwgbmFtZSwgIWRvY3VtZW50SXNIVE1MICkgOgorCQkJdW5kZWZpbmVkOworCisJcmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkID8KKwkJdmFsIDoKKwkJc3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/CisJCQllbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApIDoKKwkJCSh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpICYmIHZhbC5zcGVjaWZpZWQgPworCQkJCXZhbC52YWx1ZSA6CisJCQkJbnVsbDsKK307CisKK1NpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7CisJdGhyb3cgbmV3IEVycm9yKCAiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIiArIG1zZyApOworfTsKKworLyoqCisgKiBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBsaWNhdGVzCisgKiBAcGFyYW0ge0FycmF5TGlrZX0gcmVzdWx0cworICovCitTaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkgeworCXZhciBlbGVtLAorCQlkdXBsaWNhdGVzID0gW10sCisJCWogPSAwLAorCQlpID0gMDsKKworCS8vIFVubGVzcyB3ZSAqa25vdyogd2UgY2FuIGRldGVjdCBkdXBsaWNhdGVzLCBhc3N1bWUgdGhlaXIgcHJlc2VuY2UKKwloYXNEdXBsaWNhdGUgPSAhc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzOworCXNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApOworCXJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7CisKKwlpZiAoIGhhc0R1cGxpY2F0ZSApIHsKKwkJd2hpbGUgKCAoZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7CisJCQlpZiAoIGVsZW0gPT09IHJlc3VsdHNbIGkgXSApIHsKKwkJCQlqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7CisJCQl9CisJCX0KKwkJd2hpbGUgKCBqLS0gKSB7CisJCQlyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7CisJCX0KKwl9CisKKwkvLyBDbGVhciBpbnB1dCBhZnRlciBzb3J0aW5nIHRvIHJlbGVhc2Ugb2JqZWN0cworCS8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9wdWxsLzIyNQorCXNvcnRJbnB1dCA9IG51bGw7CisKKwlyZXR1cm4gcmVzdWx0czsKK307CisKKy8qKgorICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXMKKyAqIEBwYXJhbSB7QXJyYXl8RWxlbWVudH0gZWxlbQorICovCitnZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlvbiggZWxlbSApIHsKKwl2YXIgbm9kZSwKKwkJcmV0ID0gIiIsCisJCWkgPSAwLAorCQlub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7CisKKwlpZiAoICFub2RlVHlwZSApIHsKKwkJLy8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXkKKwkJd2hpbGUgKCAobm9kZSA9IGVsZW1baSsrXSkgKSB7CisJCQkvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2RlcworCQkJcmV0ICs9IGdldFRleHQoIG5vZGUgKTsKKwkJfQorCX0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHsKKwkJLy8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50cworCQkvLyBpbm5lclRleHQgdXNhZ2UgcmVtb3ZlZCBmb3IgY29uc2lzdGVuY3kgb2YgbmV3IGxpbmVzIChqUXVlcnkgIzExMTUzKQorCQlpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSAic3RyaW5nIiApIHsKKwkJCXJldHVybiBlbGVtLnRleHRDb250ZW50OworCQl9IGVsc2UgeworCQkJLy8gVHJhdmVyc2UgaXRzIGNoaWxkcmVuCisJCQlmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHsKKwkJCQlyZXQgKz0gZ2V0VGV4dCggZWxlbSApOworCQkJfQorCQl9CisJfSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7CisJCXJldHVybiBlbGVtLm5vZGVWYWx1ZTsKKwl9CisJLy8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzCisKKwlyZXR1cm4gcmV0OworfTsKKworRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7CisKKwkvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXIKKwljYWNoZUxlbmd0aDogNTAsCisKKwljcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbiwKKworCW1hdGNoOiBtYXRjaEV4cHIsCisKKwlhdHRySGFuZGxlOiB7fSwKKworCWZpbmQ6IHt9LAorCisJcmVsYXRpdmU6IHsKKwkJIj4iOiB7IGRpcjogInBhcmVudE5vZGUiLCBmaXJzdDogdHJ1ZSB9LAorCQkiICI6IHsgZGlyOiAicGFyZW50Tm9kZSIgfSwKKwkJIisiOiB7IGRpcjogInByZXZpb3VzU2libGluZyIsIGZpcnN0OiB0cnVlIH0sCisJCSJ+IjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciIH0KKwl9LAorCisJcHJlRmlsdGVyOiB7CisJCSJBVFRSIjogZnVuY3Rpb24oIG1hdGNoICkgeworCQkJbWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApOworCisJCQkvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZAorCQkJbWF0Y2hbM10gPSAoIG1hdGNoWzNdIHx8IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8ICIiICkucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKKworCQkJaWYgKCBtYXRjaFsyXSA9PT0gIn49IiApIHsKKwkJCQltYXRjaFszXSA9ICIgIiArIG1hdGNoWzNdICsgIiAiOworCQkJfQorCisJCQlyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTsKKwkJfSwKKworCQkiQ0hJTEQiOiBmdW5jdGlvbiggbWF0Y2ggKSB7CisJCQkvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByWyJDSElMRCJdCisJCQkJMSB0eXBlIChvbmx5fG50aHwuLi4pCisJCQkJMiB3aGF0IChjaGlsZHxvZi10eXBlKQorCQkJCTMgYXJndW1lbnQgKGV2ZW58b2RkfFxkKnxcZCpuKFsrLV1cZCspP3wuLi4pCisJCQkJNCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cZCpufCkKKwkJCQk1IHNpZ24gb2YgeG4tY29tcG9uZW50CisJCQkJNiB4IG9mIHhuLWNvbXBvbmVudAorCQkJCTcgc2lnbiBvZiB5LWNvbXBvbmVudAorCQkJCTggeSBvZiB5LWNvbXBvbmVudAorCQkJKi8KKwkJCW1hdGNoWzFdID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTsKKworCQkJaWYgKCBtYXRjaFsxXS5zbGljZSggMCwgMyApID09PSAibnRoIiApIHsKKwkJCQkvLyBudGgtKiByZXF1aXJlcyBhcmd1bWVudAorCQkJCWlmICggIW1hdGNoWzNdICkgeworCQkJCQlTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7CisJCQkJfQorCisJCQkJLy8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxECisJCQkJLy8gcmVtZW1iZXIgdGhhdCBmYWxzZS90cnVlIGNhc3QgcmVzcGVjdGl2ZWx5IHRvIDAvMQorCQkJCW1hdGNoWzRdID0gKyggbWF0Y2hbNF0gPyBtYXRjaFs1XSArIChtYXRjaFs2XSB8fCAxKSA6IDIgKiAoIG1hdGNoWzNdID09PSAiZXZlbiIgfHwgbWF0Y2hbM10gPT09ICJvZGQiICkgKTsKKwkJCQltYXRjaFs1XSA9ICsoICggbWF0Y2hbN10gKyBtYXRjaFs4XSApIHx8IG1hdGNoWzNdID09PSAib2RkIiApOworCisJCQkvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHMKKwkJCX0gZWxzZSBpZiAoIG1hdGNoWzNdICkgeworCQkJCVNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTsKKwkJCX0KKworCQkJcmV0dXJuIG1hdGNoOworCQl9LAorCisJCSJQU0VVRE8iOiBmdW5jdGlvbiggbWF0Y2ggKSB7CisJCQl2YXIgZXhjZXNzLAorCQkJCXVucXVvdGVkID0gIW1hdGNoWzZdICYmIG1hdGNoWzJdOworCisJCQlpZiAoIG1hdGNoRXhwclsiQ0hJTEQiXS50ZXN0KCBtYXRjaFswXSApICkgeworCQkJCXJldHVybiBudWxsOworCQkJfQorCisJCQkvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pcworCQkJaWYgKCBtYXRjaFszXSApIHsKKwkJCQltYXRjaFsyXSA9IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8ICIiOworCisJCQkvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50cworCQkJfSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmCisJCQkJLy8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSkKKwkJCQkoZXhjZXNzID0gdG9rZW5pemUoIHVucXVvdGVkLCB0cnVlICkpICYmCisJCQkJLy8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzCisJCQkJKGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoICIpIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGgpICkgeworCisJCQkJLy8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXgKKwkJCQltYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKCAwLCBleGNlc3MgKTsKKwkJCQltYXRjaFsyXSA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTsKKwkJCX0KKworCQkJLy8gUmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQpCisJCQlyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMgKTsKKwkJfQorCX0sCisKKwlmaWx0ZXI6IHsKKworCQkiVEFHIjogZnVuY3Rpb24oIG5vZGVOYW1lU2VsZWN0b3IgKSB7CisJCQl2YXIgbm9kZU5hbWUgPSBub2RlTmFtZVNlbGVjdG9yLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTsKKwkJCXJldHVybiBub2RlTmFtZVNlbGVjdG9yID09PSAiKiIgPworCQkJCWZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSA6CisJCQkJZnVuY3Rpb24oIGVsZW0gKSB7CisJCQkJCXJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbm9kZU5hbWU7CisJCQkJfTsKKwkJfSwKKworCQkiQ0xBU1MiOiBmdW5jdGlvbiggY2xhc3NOYW1lICkgeworCQkJdmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBjbGFzc05hbWUgKyAiICIgXTsKKworCQkJcmV0dXJuIHBhdHRlcm4gfHwKKwkJCQkocGF0dGVybiA9IG5ldyBSZWdFeHAoICIoXnwiICsgd2hpdGVzcGFjZSArICIpIiArIGNsYXNzTmFtZSArICIoIiArIHdoaXRlc3BhY2UgKyAifCQpIiApKSAmJgorCQkJCWNsYXNzQ2FjaGUoIGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7CisJCQkJCXJldHVybiBwYXR0ZXJuLnRlc3QoIHR5cGVvZiBlbGVtLmNsYXNzTmFtZSA9PT0gInN0cmluZyIgJiYgZWxlbS5jbGFzc05hbWUgfHwgdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSAidW5kZWZpbmVkIiAmJiBlbGVtLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSB8fCAiIiApOworCQkJCX0pOworCQl9LAorCisJCSJBVFRSIjogZnVuY3Rpb24oIG5hbWUsIG9wZXJhdG9yLCBjaGVjayApIHsKKwkJCXJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCQl2YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIoIGVsZW0sIG5hbWUgKTsKKworCQkJCWlmICggcmVzdWx0ID09IG51bGwgKSB7CisJCQkJCXJldHVybiBvcGVyYXRvciA9PT0gIiE9IjsKKwkJCQl9CisJCQkJaWYgKCAhb3BlcmF0b3IgKSB7CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKworCQkJCXJlc3VsdCArPSAiIjsKKworCQkJCXJldHVybiBvcGVyYXRvciA9PT0gIj0iID8gcmVzdWx0ID09PSBjaGVjayA6CisJCQkJCW9wZXJhdG9yID09PSAiIT0iID8gcmVzdWx0ICE9PSBjaGVjayA6CisJCQkJCW9wZXJhdG9yID09PSAiXj0iID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOgorCQkJCQlvcGVyYXRvciA9PT0gIio9IiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOgorCQkJCQlvcGVyYXRvciA9PT0gIiQ9IiA/IGNoZWNrICYmIHJlc3VsdC5zbGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjayA6CisJCQkJCW9wZXJhdG9yID09PSAifj0iID8gKCAiICIgKyByZXN1bHQucmVwbGFjZSggcndoaXRlc3BhY2UsICIgIiApICsgIiAiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDoKKwkJCQkJb3BlcmF0b3IgPT09ICJ8PSIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArICItIiA6CisJCQkJCWZhbHNlOworCQkJfTsKKwkJfSwKKworCQkiQ0hJTEQiOiBmdW5jdGlvbiggdHlwZSwgd2hhdCwgYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkgeworCQkJdmFyIHNpbXBsZSA9IHR5cGUuc2xpY2UoIDAsIDMgKSAhPT0gIm50aCIsCisJCQkJZm9yd2FyZCA9IHR5cGUuc2xpY2UoIC00ICkgIT09ICJsYXN0IiwKKwkJCQlvZlR5cGUgPSB3aGF0ID09PSAib2YtdHlwZSI7CisKKwkJCXJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID8KKworCQkJCS8vIFNob3J0Y3V0IGZvciA6bnRoLSoobikKKwkJCQlmdW5jdGlvbiggZWxlbSApIHsKKwkJCQkJcmV0dXJuICEhZWxlbS5wYXJlbnROb2RlOworCQkJCX0gOgorCisJCQkJZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKwkJCQkJdmFyIGNhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSwgbm9kZSwgbm9kZUluZGV4LCBzdGFydCwKKwkJCQkJCWRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/ICJuZXh0U2libGluZyIgOiAicHJldmlvdXNTaWJsaW5nIiwKKwkJCQkJCXBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSwKKwkJCQkJCW5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLAorCQkJCQkJdXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsCisJCQkJCQlkaWZmID0gZmFsc2U7CisKKwkJCQkJaWYgKCBwYXJlbnQgKSB7CisKKwkJCQkJCS8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSkKKwkJCQkJCWlmICggc2ltcGxlICkgeworCQkJCQkJCXdoaWxlICggZGlyICkgeworCQkJCQkJCQlub2RlID0gZWxlbTsKKwkJCQkJCQkJd2hpbGUgKCAobm9kZSA9IG5vZGVbIGRpciBdKSApIHsKKwkJCQkJCQkJCWlmICggb2ZUeXBlID8KKwkJCQkJCQkJCQlub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOgorCQkJCQkJCQkJCW5vZGUubm9kZVR5cGUgPT09IDEgKSB7CisKKwkJCQkJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQkJLy8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pCisJCQkJCQkJCXN0YXJ0ID0gZGlyID0gdHlwZSA9PT0gIm9ubHkiICYmICFzdGFydCAmJiAibmV4dFNpYmxpbmciOworCQkJCQkJCX0KKwkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCX0KKworCQkJCQkJc3RhcnQgPSBbIGZvcndhcmQgPyBwYXJlbnQuZmlyc3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGQgXTsKKworCQkJCQkJLy8gbm9uLXhtbCA6bnRoLWNoaWxkKC4uLikgc3RvcmVzIGNhY2hlIGRhdGEgb24gYHBhcmVudGAKKwkJCQkJCWlmICggZm9yd2FyZCAmJiB1c2VDYWNoZSApIHsKKworCQkJCQkJCS8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleAorCisJCQkJCQkJLy8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheQorCQkJCQkJCW5vZGUgPSBwYXJlbnQ7CisJCQkJCQkJb3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pOworCisJCQkJCQkJLy8gU3VwcG9ydDogSUUgPDkgb25seQorCQkJCQkJCS8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KQorCQkJCQkJCXVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8CisJCQkJCQkJCShvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7CisKKwkJCQkJCQljYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107CisJCQkJCQkJbm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdOworCQkJCQkJCWRpZmYgPSBub2RlSW5kZXggJiYgY2FjaGVbIDIgXTsKKwkJCQkJCQlub2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTsKKworCQkJCQkJCXdoaWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8CisKKwkJCQkJCQkJLy8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnQKKwkJCQkJCQkJKGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7CisKKwkJCQkJCQkJLy8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWsKKwkJCQkJCQkJaWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkgeworCQkJCQkJCQkJdW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07CisJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGUKKwkJCQkJCQlpZiAoIHVzZUNhY2hlICkgeworCQkJCQkJCQkvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5CisJCQkJCQkJCW5vZGUgPSBlbGVtOworCQkJCQkJCQlvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7CisKKwkJCQkJCQkJLy8gU3VwcG9ydDogSUUgPDkgb25seQorCQkJCQkJCQkvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSkKKwkJCQkJCQkJdW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHwKKwkJCQkJCQkJCShvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7CisKKwkJCQkJCQkJY2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdOworCQkJCQkJCQlub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07CisJCQkJCQkJCWRpZmYgPSBub2RlSW5kZXg7CisJCQkJCQkJfQorCisJCQkJCQkJLy8geG1sIDpudGgtY2hpbGQoLi4uKQorCQkJCQkJCS8vIG9yIDpudGgtbGFzdC1jaGlsZCguLi4pIG9yIDpudGgoLWxhc3QpPy1vZi10eXBlKC4uLikKKwkJCQkJCQlpZiAoIGRpZmYgPT09IGZhbHNlICkgeworCQkJCQkJCQkvLyBVc2UgdGhlIHNhbWUgbG9vcCBhcyBhYm92ZSB0byBzZWVrIGBlbGVtYCBmcm9tIHRoZSBzdGFydAorCQkJCQkJCQl3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fAorCQkJCQkJCQkJKGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7CisKKwkJCQkJCQkJCWlmICggKCBvZlR5cGUgPworCQkJCQkJCQkJCW5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6CisJCQkJCQkJCQkJbm9kZS5ub2RlVHlwZSA9PT0gMSApICYmCisJCQkJCQkJCQkJKytkaWZmICkgeworCisJCQkJCQkJCQkJLy8gQ2FjaGUgdGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxlbWVudAorCQkJCQkJCQkJCWlmICggdXNlQ2FjaGUgKSB7CisJCQkJCQkJCQkJCW91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTsKKworCQkJCQkJCQkJCQkvLyBTdXBwb3J0OiBJRSA8OSBvbmx5CisJCQkJCQkJCQkJCS8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KQorCQkJCQkJCQkJCQl1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fAorCQkJCQkJCQkJCQkJKG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTsKKworCQkJCQkJCQkJCQl1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJaWYgKCBub2RlID09PSBlbGVtICkgeworCQkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCS8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplCisJCQkJCQlkaWZmIC09IGxhc3Q7CisJCQkJCQlyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTsKKwkJCQkJfQorCQkJCX07CisJCX0sCisKKwkJIlBTRVVETyI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkgeworCQkJLy8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlCisJCQkvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzCisJCQkvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVycworCQkJLy8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvcworCQkJdmFyIGFyZ3MsCisJCQkJZm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fAorCQkJCQlTaXp6bGUuZXJyb3IoICJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIgKyBwc2V1ZG8gKTsKKworCQkJLy8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1ZG8gdG8gaW5kaWNhdGUgdGhhdAorCQkJLy8gYXJndW1lbnRzIGFyZSBuZWVkZWQgdG8gY3JlYXRlIHRoZSBmaWx0ZXIgZnVuY3Rpb24KKwkJCS8vIGp1c3QgYXMgU2l6emxlIGRvZXMKKwkJCWlmICggZm5bIGV4cGFuZG8gXSApIHsKKwkJCQlyZXR1cm4gZm4oIGFyZ3VtZW50ICk7CisJCQl9CisKKwkJCS8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlcworCQkJaWYgKCBmbi5sZW5ndGggPiAxICkgeworCQkJCWFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCAiIiwgYXJndW1lbnQgXTsKKwkJCQlyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID8KKwkJCQkJbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkgeworCQkJCQkJdmFyIGlkeCwKKwkJCQkJCQltYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksCisJCQkJCQkJaSA9IG1hdGNoZWQubGVuZ3RoOworCQkJCQkJd2hpbGUgKCBpLS0gKSB7CisJCQkJCQkJaWR4ID0gaW5kZXhPZiggc2VlZCwgbWF0Y2hlZFtpXSApOworCQkJCQkJCXNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkW2ldICk7CisJCQkJCQl9CisJCQkJCX0pIDoKKwkJCQkJZnVuY3Rpb24oIGVsZW0gKSB7CisJCQkJCQlyZXR1cm4gZm4oIGVsZW0sIDAsIGFyZ3MgKTsKKwkJCQkJfTsKKwkJCX0KKworCQkJcmV0dXJuIGZuOworCQl9CisJfSwKKworCXBzZXVkb3M6IHsKKwkJLy8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zCisJCSJub3QiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkgeworCQkJLy8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGUKKwkJCS8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nCisJCQkvLyBzcGFjZXMgYXMgY29tYmluYXRvcnMKKwkJCXZhciBpbnB1dCA9IFtdLAorCQkJCXJlc3VsdHMgPSBbXSwKKwkJCQltYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sICIkMSIgKSApOworCisJCQlyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID8KKwkJCQltYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIGNvbnRleHQsIHhtbCApIHsKKwkJCQkJdmFyIGVsZW0sCisJCQkJCQl1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksCisJCQkJCQlpID0gc2VlZC5sZW5ndGg7CisKKwkJCQkJLy8gTWF0Y2ggZWxlbWVudHMgdW5tYXRjaGVkIGJ5IGBtYXRjaGVyYAorCQkJCQl3aGlsZSAoIGktLSApIHsKKwkJCQkJCWlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkgeworCQkJCQkJCXNlZWRbaV0gPSAhKG1hdGNoZXNbaV0gPSBlbGVtKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0pIDoKKwkJCQlmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgeworCQkJCQlpbnB1dFswXSA9IGVsZW07CisJCQkJCW1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTsKKwkJCQkJLy8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudCAoaXNzdWUgIzI5OSkKKwkJCQkJaW5wdXRbMF0gPSBudWxsOworCQkJCQlyZXR1cm4gIXJlc3VsdHMucG9wKCk7CisJCQkJfTsKKwkJfSksCisKKwkJImhhcyI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisJCQlyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisJCQkJcmV0dXJuIFNpenpsZSggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwOworCQkJfTsKKwkJfSksCisKKwkJImNvbnRhaW5zIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCB0ZXh0ICkgeworCQkJdGV4dCA9IHRleHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKKwkJCXJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCQlyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJUZXh0IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xOworCQkJfTsKKwkJfSksCisKKwkJLy8gIldoZXRoZXIgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDpsYW5nKCkgc2VsZWN0b3IKKwkJLy8gaXMgYmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUKKwkJLy8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQywKKwkJLy8gb3IgYmVnaW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSAiLSIuCisJCS8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LgorCQkvLyBUaGUgaWRlbnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8gYmUgYSB2YWxpZCBsYW5ndWFnZSBuYW1lLiIKKwkJLy8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkbworCQkibGFuZyI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7CisJCQkvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyCisJCQlpZiAoICFyaWRlbnRpZmllci50ZXN0KGxhbmcgfHwgIiIpICkgeworCQkJCVNpenpsZS5lcnJvciggInVuc3VwcG9ydGVkIGxhbmc6ICIgKyBsYW5nICk7CisJCQl9CisJCQlsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7CisJCQlyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisJCQkJdmFyIGVsZW1MYW5nOworCQkJCWRvIHsKKwkJCQkJaWYgKCAoZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/CisJCQkJCQllbGVtLmxhbmcgOgorCQkJCQkJZWxlbS5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIikgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoImxhbmciKSkgKSB7CisKKwkJCQkJCWVsZW1MYW5nID0gZWxlbUxhbmcudG9Mb3dlckNhc2UoKTsKKwkJCQkJCXJldHVybiBlbGVtTGFuZyA9PT0gbGFuZyB8fCBlbGVtTGFuZy5pbmRleE9mKCBsYW5nICsgIi0iICkgPT09IDA7CisJCQkJCX0KKwkJCQl9IHdoaWxlICggKGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9OworCQl9KSwKKworCQkvLyBNaXNjZWxsYW5lb3VzCisJCSJ0YXJnZXQiOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCXZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoOworCQkJcmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkOworCQl9LAorCisJCSJyb290IjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTsKKwkJfSwKKworCQkiZm9jdXMiOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCXJldHVybiBlbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmICghZG9jdW1lbnQuaGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSkgJiYgISEoZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCk7CisJCX0sCisKKwkJLy8gQm9vbGVhbiBwcm9wZXJ0aWVzCisJCSJlbmFibGVkIjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2U7CisJCX0sCisKKwkJImRpc2FibGVkIjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZTsKKwkJfSwKKworCQkiY2hlY2tlZCI6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJLy8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzCisJCQkvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZAorCQkJdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOworCQkJcmV0dXJuIChub2RlTmFtZSA9PT0gImlucHV0IiAmJiAhIWVsZW0uY2hlY2tlZCkgfHwgKG5vZGVOYW1lID09PSAib3B0aW9uIiAmJiAhIWVsZW0uc2VsZWN0ZWQpOworCQl9LAorCisJCSJzZWxlY3RlZCI6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJLy8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdAorCQkJLy8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseQorCQkJaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7CisJCQkJZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7CisJCQl9CisKKwkJCXJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlOworCQl9LAorCisJCS8vIENvbnRlbnRzCisJCSJlbXB0eSI6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJLy8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG8KKwkJCS8vIDplbXB0eSBpcyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0OyBlbnRpdHkgcmVmOiA1KSwKKwkJCS8vICAgYnV0IG5vdCBieSBvdGhlcnMgKGNvbW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246IDc7IGV0Yy4pCisJCQkvLyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3QgYXBwZWFyIGFzIGNoaWxkcmVuCisJCQlmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHsKKwkJCQlpZiAoIGVsZW0ubm9kZVR5cGUgPCA2ICkgeworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIHRydWU7CisJCX0sCisKKwkJInBhcmVudCI6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJcmV0dXJuICFFeHByLnBzZXVkb3NbImVtcHR5Il0oIGVsZW0gKTsKKwkJfSwKKworCQkvLyBFbGVtZW50L2lucHV0IHR5cGVzCisJCSJoZWFkZXIiOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCXJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTsKKwkJfSwKKworCQkiaW5wdXQiOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCXJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTsKKwkJfSwKKworCQkiYnV0dG9uIjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQl2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKKwkJCXJldHVybiBuYW1lID09PSAiaW5wdXQiICYmIGVsZW0udHlwZSA9PT0gImJ1dHRvbiIgfHwgbmFtZSA9PT0gImJ1dHRvbiI7CisJCX0sCisKKwkJInRleHQiOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCXZhciBhdHRyOworCQkJcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiAmJgorCQkJCWVsZW0udHlwZSA9PT0gInRleHQiICYmCisKKwkJCQkvLyBTdXBwb3J0OiBJRTw4CisJCQkJLy8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sICJzZWFyY2giKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09ICJ0ZXh0IgorCQkJCSggKGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSgidHlwZSIpKSA9PSBudWxsIHx8IGF0dHIudG9Mb3dlckNhc2UoKSA9PT0gInRleHQiICk7CisJCX0sCisKKwkJLy8gUG9zaXRpb24taW4tY29sbGVjdGlvbgorCQkiZmlyc3QiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCkgeworCQkJcmV0dXJuIFsgMCBdOworCQl9KSwKKworCQkibGFzdCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgeworCQkJcmV0dXJuIFsgbGVuZ3RoIC0gMSBdOworCQl9KSwKKworCQkiZXEiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7CisJCQlyZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07CisJCX0pLAorCisJCSJldmVuIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7CisJCQl2YXIgaSA9IDA7CisJCQlmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHsKKwkJCQltYXRjaEluZGV4ZXMucHVzaCggaSApOworCQkJfQorCQkJcmV0dXJuIG1hdGNoSW5kZXhlczsKKwkJfSksCisKKwkJIm9kZCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgeworCQkJdmFyIGkgPSAxOworCQkJZm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7CisJCQkJbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKKwkJCX0KKwkJCXJldHVybiBtYXRjaEluZGV4ZXM7CisJCX0pLAorCisJCSJsdCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHsKKwkJCXZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDsKKwkJCWZvciAoIDsgLS1pID49IDA7ICkgeworCQkJCW1hdGNoSW5kZXhlcy5wdXNoKCBpICk7CisJCQl9CisJCQlyZXR1cm4gbWF0Y2hJbmRleGVzOworCQl9KSwKKworCQkiZ3QiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7CisJCQl2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7CisJCQlmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7CisJCQkJbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKKwkJCX0KKwkJCXJldHVybiBtYXRjaEluZGV4ZXM7CisJCX0pCisJfQorfTsKKworRXhwci5wc2V1ZG9zWyJudGgiXSA9IEV4cHIucHNldWRvc1siZXEiXTsKKworLy8gQWRkIGJ1dHRvbi9pbnB1dCB0eXBlIHBzZXVkb3MKK2ZvciAoIGkgaW4geyByYWRpbzogdHJ1ZSwgY2hlY2tib3g6IHRydWUsIGZpbGU6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCBpbWFnZTogdHJ1ZSB9ICkgeworCUV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTsKK30KK2ZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVlIH0gKSB7CisJRXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTsKK30KKworLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzCitmdW5jdGlvbiBzZXRGaWx0ZXJzKCkge30KK3NldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zOworRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTsKKwordG9rZW5pemUgPSBTaXp6bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHsKKwl2YXIgbWF0Y2hlZCwgbWF0Y2gsIHRva2VucywgdHlwZSwKKwkJc29GYXIsIGdyb3VwcywgcHJlRmlsdGVycywKKwkJY2FjaGVkID0gdG9rZW5DYWNoZVsgc2VsZWN0b3IgKyAiICIgXTsKKworCWlmICggY2FjaGVkICkgeworCQlyZXR1cm4gcGFyc2VPbmx5ID8gMCA6IGNhY2hlZC5zbGljZSggMCApOworCX0KKworCXNvRmFyID0gc2VsZWN0b3I7CisJZ3JvdXBzID0gW107CisJcHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyOworCisJd2hpbGUgKCBzb0ZhciApIHsKKworCQkvLyBDb21tYSBhbmQgZmlyc3QgcnVuCisJCWlmICggIW1hdGNoZWQgfHwgKG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkpICkgeworCQkJaWYgKCBtYXRjaCApIHsKKwkJCQkvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZAorCQkJCXNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyOworCQkJfQorCQkJZ3JvdXBzLnB1c2goICh0b2tlbnMgPSBbXSkgKTsKKwkJfQorCisJCW1hdGNoZWQgPSBmYWxzZTsKKworCQkvLyBDb21iaW5hdG9ycworCQlpZiAoIChtYXRjaCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApKSApIHsKKwkJCW1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpOworCQkJdG9rZW5zLnB1c2goeworCQkJCXZhbHVlOiBtYXRjaGVkLAorCQkJCS8vIENhc3QgZGVzY2VuZGFudCBjb21iaW5hdG9ycyB0byBzcGFjZQorCQkJCXR5cGU6IG1hdGNoWzBdLnJlcGxhY2UoIHJ0cmltLCAiICIgKQorCQkJfSk7CisJCQlzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApOworCQl9CisKKwkJLy8gRmlsdGVycworCQlmb3IgKCB0eXBlIGluIEV4cHIuZmlsdGVyICkgeworCQkJaWYgKCAobWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApKSAmJiAoIXByZUZpbHRlcnNbIHR5cGUgXSB8fAorCQkJCShtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSkpICkgeworCQkJCW1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpOworCQkJCXRva2Vucy5wdXNoKHsKKwkJCQkJdmFsdWU6IG1hdGNoZWQsCisJCQkJCXR5cGU6IHR5cGUsCisJCQkJCW1hdGNoZXM6IG1hdGNoCisJCQkJfSk7CisJCQkJc29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTsKKwkJCX0KKwkJfQorCisJCWlmICggIW1hdGNoZWQgKSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlkIGV4Y2VzcworCS8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZworCS8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3Igb3IgcmV0dXJuIHRva2VucworCXJldHVybiBwYXJzZU9ubHkgPworCQlzb0Zhci5sZW5ndGggOgorCQlzb0ZhciA/CisJCQlTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOgorCQkJLy8gQ2FjaGUgdGhlIHRva2VucworCQkJdG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7Cit9OworCitmdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7CisJdmFyIGkgPSAwLAorCQlsZW4gPSB0b2tlbnMubGVuZ3RoLAorCQlzZWxlY3RvciA9ICIiOworCWZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworCQlzZWxlY3RvciArPSB0b2tlbnNbaV0udmFsdWU7CisJfQorCXJldHVybiBzZWxlY3RvcjsKK30KKworZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHsKKwl2YXIgZGlyID0gY29tYmluYXRvci5kaXIsCisJCWNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGRpciA9PT0gInBhcmVudE5vZGUiLAorCQlkb25lTmFtZSA9IGRvbmUrKzsKKworCXJldHVybiBjb21iaW5hdG9yLmZpcnN0ID8KKwkJLy8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50CisJCWZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CisJCQl3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkgeworCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkgeworCQkJCQlyZXR1cm4gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICk7CisJCQkJfQorCQkJfQorCQl9IDoKKworCQkvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHMKKwkJZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKwkJCXZhciBvbGRDYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsCisJCQkJbmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVOYW1lIF07CisKKwkJCS8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGNvbWJpbmF0b3IgY2FjaGluZworCQkJaWYgKCB4bWwgKSB7CisJCQkJd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHsKKwkJCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7CisJCQkJCQlpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgeworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQl3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkgeworCQkJCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHsKKwkJCQkJCW91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKGVsZW1bIGV4cGFuZG8gXSA9IHt9KTsKKworCQkJCQkJLy8gU3VwcG9ydDogSUUgPDkgb25seQorCQkJCQkJLy8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpCisJCQkJCQl1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSB8fCAob3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdID0ge30pOworCisJCQkJCQlpZiAoIChvbGRDYWNoZSA9IHVuaXF1ZUNhY2hlWyBkaXIgXSkgJiYKKwkJCQkJCQlvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkgeworCisJCQkJCQkJLy8gQXNzaWduIHRvIG5ld0NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHMKKwkJCQkJCQlyZXR1cm4gKG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBdKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJLy8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50cworCQkJCQkJCXVuaXF1ZUNhY2hlWyBkaXIgXSA9IG5ld0NhY2hlOworCisJCQkJCQkJLy8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nCisJCQkJCQkJaWYgKCAobmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApKSApIHsKKwkJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworfQorCitmdW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7CisJcmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgPworCQlmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgeworCQkJdmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7CisJCQl3aGlsZSAoIGktLSApIHsKKwkJCQlpZiAoICFtYXRjaGVyc1tpXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfSA6CisJCW1hdGNoZXJzWzBdOworfQorCitmdW5jdGlvbiBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciwgY29udGV4dHMsIHJlc3VsdHMgKSB7CisJdmFyIGkgPSAwLAorCQlsZW4gPSBjb250ZXh0cy5sZW5ndGg7CisJZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CisJCVNpenpsZSggc2VsZWN0b3IsIGNvbnRleHRzW2ldLCByZXN1bHRzICk7CisJfQorCXJldHVybiByZXN1bHRzOworfQorCitmdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkgeworCXZhciBlbGVtLAorCQluZXdVbm1hdGNoZWQgPSBbXSwKKwkJaSA9IDAsCisJCWxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsCisJCW1hcHBlZCA9IG1hcCAhPSBudWxsOworCisJZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CisJCWlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkgeworCQkJaWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7CisJCQkJbmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTsKKwkJCQlpZiAoIG1hcHBlZCApIHsKKwkJCQkJbWFwLnB1c2goIGkgKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gbmV3VW5tYXRjaGVkOworfQorCitmdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7CisJaWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7CisJCXBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7CisJfQorCWlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkgeworCQlwb3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICk7CisJfQorCXJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHsKKwkJdmFyIHRlbXAsIGksIGVsZW0sCisJCQlwcmVNYXAgPSBbXSwKKwkJCXBvc3RNYXAgPSBbXSwKKwkJCXByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsCisKKwkJCS8vIEdldCBpbml0aWFsIGVsZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0CisJCQllbGVtcyA9IHNlZWQgfHwgbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IgfHwgIioiLCBjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LCBbXSApLAorCisJCQkvLyBQcmVmaWx0ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5jaHJvbml6YXRpb24KKwkJCW1hdGNoZXJJbiA9IHByZUZpbHRlciAmJiAoIHNlZWQgfHwgIXNlbGVjdG9yICkgPworCQkJCWNvbmRlbnNlKCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDoKKwkJCQllbGVtcywKKworCQkJbWF0Y2hlck91dCA9IG1hdGNoZXIgPworCQkJCS8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsCisJCQkJcG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgPworCisJCQkJCS8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeQorCQkJCQlbXSA6CisKKwkJCQkJLy8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5CisJCQkJCXJlc3VsdHMgOgorCQkJCW1hdGNoZXJJbjsKKworCQkvLyBGaW5kIHByaW1hcnkgbWF0Y2hlcworCQlpZiAoIG1hdGNoZXIgKSB7CisJCQltYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApOworCQl9CisKKwkJLy8gQXBwbHkgcG9zdEZpbHRlcgorCQlpZiAoIHBvc3RGaWx0ZXIgKSB7CisJCQl0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTsKKwkJCXBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTsKKworCQkJLy8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJbgorCQkJaSA9IHRlbXAubGVuZ3RoOworCQkJd2hpbGUgKCBpLS0gKSB7CisJCQkJaWYgKCAoZWxlbSA9IHRlbXBbaV0pICkgeworCQkJCQltYXRjaGVyT3V0WyBwb3N0TWFwW2ldIF0gPSAhKG1hdGNoZXJJblsgcG9zdE1hcFtpXSBdID0gZWxlbSk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKCBzZWVkICkgeworCQkJaWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHsKKwkJCQlpZiAoIHBvc3RGaW5kZXIgKSB7CisJCQkJCS8vIEdldCB0aGUgZmluYWwgbWF0Y2hlck91dCBieSBjb25kZW5zaW5nIHRoaXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBjb250ZXh0cworCQkJCQl0ZW1wID0gW107CisJCQkJCWkgPSBtYXRjaGVyT3V0Lmxlbmd0aDsKKwkJCQkJd2hpbGUgKCBpLS0gKSB7CisJCQkJCQlpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgKSB7CisJCQkJCQkJLy8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2gKKwkJCQkJCQl0ZW1wLnB1c2goIChtYXRjaGVySW5baV0gPSBlbGVtKSApOworCQkJCQkJfQorCQkJCQl9CisJCQkJCXBvc3RGaW5kZXIoIG51bGwsIChtYXRjaGVyT3V0ID0gW10pLCB0ZW1wLCB4bWwgKTsKKwkJCQl9CisKKwkJCQkvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZAorCQkJCWkgPSBtYXRjaGVyT3V0Lmxlbmd0aDsKKwkJCQl3aGlsZSAoIGktLSApIHsKKwkJCQkJaWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICYmCisJCQkJCQkodGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbaV0pID4gLTEgKSB7CisKKwkJCQkJCXNlZWRbdGVtcF0gPSAhKHJlc3VsdHNbdGVtcF0gPSBlbGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0RmluZGVyIGlmIGRlZmluZWQKKwkJfSBlbHNlIHsKKwkJCW1hdGNoZXJPdXQgPSBjb25kZW5zZSgKKwkJCQltYXRjaGVyT3V0ID09PSByZXN1bHRzID8KKwkJCQkJbWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDoKKwkJCQkJbWF0Y2hlck91dAorCQkJKTsKKwkJCWlmICggcG9zdEZpbmRlciApIHsKKwkJCQlwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTsKKwkJCX0gZWxzZSB7CisJCQkJcHVzaC5hcHBseSggcmVzdWx0cywgbWF0Y2hlck91dCApOworCQkJfQorCQl9CisJfSk7Cit9CisKK2Z1bmN0aW9uIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7CisJdmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hlciwgaiwKKwkJbGVuID0gdG9rZW5zLmxlbmd0aCwKKwkJbGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSwKKwkJaW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyIgIl0sCisJCWkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCwKKworCQkvLyBUaGUgZm91bmRhdGlvbmFsIG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFjaGFibGUgZnJvbSB0b3AtbGV2ZWwgY29udGV4dChzKQorCQltYXRjaENvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHsKKwkJCXJldHVybiBlbGVtID09PSBjaGVja0NvbnRleHQ7CisJCX0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSwKKwkJbWF0Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1cm4gaW5kZXhPZiggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTsKKwkJfSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLAorCQltYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKwkJCXZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKAorCQkJCShjaGVja0NvbnRleHQgPSBjb250ZXh0KS5ub2RlVHlwZSA/CisJCQkJCW1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOgorCQkJCQltYXRjaEFueUNvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApICk7CisJCQkvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudCAoaXNzdWUgIzI5OSkKKwkJCWNoZWNrQ29udGV4dCA9IG51bGw7CisJCQlyZXR1cm4gcmV0OworCQl9IF07CisKKwlmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKwkJaWYgKCAobWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1tpXS50eXBlIF0pICkgeworCQkJbWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksIG1hdGNoZXIpIF07CisJCX0gZWxzZSB7CisJCQltYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1tpXS5tYXRjaGVzICk7CisKKwkJCS8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyCisJCQlpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHsKKwkJCQkvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9wZXJhdG9yIChpZiBhbnkpIGZvciBwcm9wZXIgaGFuZGxpbmcKKwkJCQlqID0gKytpOworCQkJCWZvciAoIDsgaiA8IGxlbjsgaisrICkgeworCQkJCQlpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1tqXS50eXBlIF0gKSB7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlyZXR1cm4gc2V0TWF0Y2hlcigKKwkJCQkJaSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksCisJCQkJCWkgPiAxICYmIHRvU2VsZWN0b3IoCisJCQkJCQkvLyBJZiB0aGUgcHJlY2VkaW5nIHRva2VuIHdhcyBhIGRlc2NlbmRhbnQgY29tYmluYXRvciwgaW5zZXJ0IGFuIGltcGxpY2l0IGFueS1lbGVtZW50IGAqYAorCQkJCQkJdG9rZW5zLnNsaWNlKCAwLCBpIC0gMSApLmNvbmNhdCh7IHZhbHVlOiB0b2tlbnNbIGkgLSAyIF0udHlwZSA9PT0gIiAiID8gIioiIDogIiIgfSkKKwkJCQkJKS5yZXBsYWNlKCBydHJpbSwgIiQxIiApLAorCQkJCQltYXRjaGVyLAorCQkJCQlpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSwKKwkJCQkJaiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKHRva2VucyA9IHRva2Vucy5zbGljZSggaiApKSApLAorCQkJCQlqIDwgbGVuICYmIHRvU2VsZWN0b3IoIHRva2VucyApCisJCQkJKTsKKwkJCX0KKwkJCW1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTsKKwkJfQorCX0KKworCXJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTsKK30KKworZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgeworCXZhciBieVNldCA9IHNldE1hdGNoZXJzLmxlbmd0aCA+IDAsCisJCWJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLAorCQlzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBvdXRlcm1vc3QgKSB7CisJCQl2YXIgZWxlbSwgaiwgbWF0Y2hlciwKKwkJCQltYXRjaGVkQ291bnQgPSAwLAorCQkJCWkgPSAiMCIsCisJCQkJdW5tYXRjaGVkID0gc2VlZCAmJiBbXSwKKwkJCQlzZXRNYXRjaGVkID0gW10sCisJCQkJY29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsCisJCQkJLy8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBvdXRlcm1vc3QgY29udGV4dAorCQkJCWVsZW1zID0gc2VlZCB8fCBieUVsZW1lbnQgJiYgRXhwci5maW5kWyJUQUciXSggIioiLCBvdXRlcm1vc3QgKSwKKwkJCQkvLyBVc2UgaW50ZWdlciBkaXJydW5zIGlmZiB0aGlzIGlzIHRoZSBvdXRlcm1vc3QgbWF0Y2hlcgorCQkJCWRpcnJ1bnNVbmlxdWUgPSAoZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEpLAorCQkJCWxlbiA9IGVsZW1zLmxlbmd0aDsKKworCQkJaWYgKCBvdXRlcm1vc3QgKSB7CisJCQkJb3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHQgPT09IGRvY3VtZW50IHx8IGNvbnRleHQgfHwgb3V0ZXJtb3N0OworCQkJfQorCisJCQkvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVzdWx0cworCQkJLy8gU3VwcG9ydDogSUU8OSwgU2FmYXJpCisJCQkvLyBUb2xlcmF0ZSBOb2RlTGlzdCBwcm9wZXJ0aWVzIChJRTogImxlbmd0aCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkCisJCQlmb3IgKCA7IGkgIT09IGxlbiAmJiAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7CisJCQkJaWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHsKKwkJCQkJaiA9IDA7CisJCQkJCWlmICggIWNvbnRleHQgJiYgZWxlbS5vd25lckRvY3VtZW50ICE9PSBkb2N1bWVudCApIHsKKwkJCQkJCXNldERvY3VtZW50KCBlbGVtICk7CisJCQkJCQl4bWwgPSAhZG9jdW1lbnRJc0hUTUw7CisJCQkJCX0KKwkJCQkJd2hpbGUgKCAobWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1tqKytdKSApIHsKKwkJCQkJCWlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sKSApIHsKKwkJCQkJCQlyZXN1bHRzLnB1c2goIGVsZW0gKTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlpZiAoIG91dGVybW9zdCApIHsKKwkJCQkJCWRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlOworCQkJCQl9CisJCQkJfQorCisJCQkJLy8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQgZmlsdGVycworCQkJCWlmICggYnlTZXQgKSB7CisJCQkJCS8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnMKKwkJCQkJaWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkgeworCQkJCQkJbWF0Y2hlZENvdW50LS07CisJCQkJCX0KKworCQkJCQkvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90CisJCQkJCWlmICggc2VlZCApIHsKKwkJCQkJCXVubWF0Y2hlZC5wdXNoKCBlbGVtICk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCS8vIGBpYCBpcyBub3cgdGhlIGNvdW50IG9mIGVsZW1lbnRzIHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRpbmcgaXQgdG8gYG1hdGNoZWRDb3VudGAKKwkJCS8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuCisJCQltYXRjaGVkQ291bnQgKz0gaTsKKworCQkJLy8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzCisJCQkvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgCisJCQkvLyBlcXVhbHMgYGlgKSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNpdCBfYW55XyBlbGVtZW50cyBpbiB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGhhdmUKKwkJCS8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuCisJCQkvLyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyAiMCIgYGlgIGFsbG93cyBgaWAgdG8gcmVtYWluIGEgc3RyaW5nIG9ubHkgaW4gdGhhdAorCQkJLy8gY2FzZSwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSAiMDAiIGBtYXRjaGVkQ291bnRgIHRoYXQgZGlmZmVycyBmcm9tIGBpYCBidXQgaXMgYWxzbworCQkJLy8gbnVtZXJpY2FsbHkgemVyby4KKwkJCWlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkgeworCQkJCWogPSAwOworCQkJCXdoaWxlICggKG1hdGNoZXIgPSBzZXRNYXRjaGVyc1tqKytdKSApIHsKKwkJCQkJbWF0Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTsKKwkJCQl9CisKKwkJCQlpZiAoIHNlZWQgKSB7CisJCQkJCS8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmcKKwkJCQkJaWYgKCBtYXRjaGVkQ291bnQgPiAwICkgeworCQkJCQkJd2hpbGUgKCBpLS0gKSB7CisJCQkJCQkJaWYgKCAhKHVubWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHsKKwkJCQkJCQkJc2V0TWF0Y2hlZFtpXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJLy8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFsIG1hdGNoZXMKKwkJCQkJc2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7CisJCQkJfQorCisJCQkJLy8gQWRkIG1hdGNoZXMgdG8gcmVzdWx0cworCQkJCXB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTsKKworCQkJCS8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1Y2NlZWRpbmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZworCQkJCWlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4gMCAmJgorCQkJCQkoIG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJzLmxlbmd0aCApID4gMSApIHsKKworCQkJCQlTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApOworCQkJCX0KKwkJCX0KKworCQkJLy8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1hdGNoZXJzCisJCQlpZiAoIG91dGVybW9zdCApIHsKKwkJCQlkaXJydW5zID0gZGlycnVuc1VuaXF1ZTsKKwkJCQlvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDsKKwkJCX0KKworCQkJcmV0dXJuIHVubWF0Y2hlZDsKKwkJfTsKKworCXJldHVybiBieVNldCA/CisJCW1hcmtGdW5jdGlvbiggc3VwZXJNYXRjaGVyICkgOgorCQlzdXBlck1hdGNoZXI7Cit9CisKK2NvbXBpbGUgPSBTaXp6bGUuY29tcGlsZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgbWF0Y2ggLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7CisJdmFyIGksCisJCXNldE1hdGNoZXJzID0gW10sCisJCWVsZW1lbnRNYXRjaGVycyA9IFtdLAorCQljYWNoZWQgPSBjb21waWxlckNhY2hlWyBzZWxlY3RvciArICIgIiBdOworCisJaWYgKCAhY2FjaGVkICkgeworCQkvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnQKKwkJaWYgKCAhbWF0Y2ggKSB7CisJCQltYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApOworCQl9CisJCWkgPSBtYXRjaC5sZW5ndGg7CisJCXdoaWxlICggaS0tICkgeworCQkJY2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoW2ldICk7CisJCQlpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkgeworCQkJCXNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApOworCQkJfSBlbHNlIHsKKwkJCQllbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7CisJCQl9CisJCX0KKworCQkvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24KKwkJY2FjaGVkID0gY29tcGlsZXJDYWNoZSggc2VsZWN0b3IsIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApICk7CisKKwkJLy8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uCisJCWNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yOworCX0KKwlyZXR1cm4gY2FjaGVkOworfTsKKworLyoqCisgKiBBIGxvdy1sZXZlbCBzZWxlY3Rpb24gZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIFNpenpsZSdzIGNvbXBpbGVkCisgKiAgc2VsZWN0b3IgZnVuY3Rpb25zCisgKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gc2VsZWN0b3IgQSBzZWxlY3RvciBvciBhIHByZS1jb21waWxlZAorICogIHNlbGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdpdGggU2l6emxlLmNvbXBpbGUKKyAqIEBwYXJhbSB7RWxlbWVudH0gY29udGV4dAorICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdHNdCisgKiBAcGFyYW0ge0FycmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxlbWVudHMgdG8gbWF0Y2ggYWdhaW5zdAorICovCitzZWxlY3QgPSBTaXp6bGUuc2VsZWN0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkgeworCXZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLAorCQljb21waWxlZCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gImZ1bmN0aW9uIiAmJiBzZWxlY3RvciwKKwkJbWF0Y2ggPSAhc2VlZCAmJiB0b2tlbml6ZSggKHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IpICk7CisKKwlyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTsKKworCS8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkCisJLy8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KQorCWlmICggbWF0Y2gubGVuZ3RoID09PSAxICkgeworCisJCS8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElECisJCXRva2VucyA9IG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAgKTsKKwkJaWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAodG9rZW4gPSB0b2tlbnNbMF0pLnR5cGUgPT09ICJJRCIgJiYKKwkJCQlzdXBwb3J0LmdldEJ5SWQgJiYgY29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJgorCQkJCUV4cHIucmVsYXRpdmVbIHRva2Vuc1sxXS50eXBlIF0gKSB7CisKKwkJCWNvbnRleHQgPSAoIEV4cHIuZmluZFsiSUQiXSggdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKHJ1bmVzY2FwZSwgZnVuZXNjYXBlKSwgY29udGV4dCApIHx8IFtdIClbMF07CisJCQlpZiAoICFjb250ZXh0ICkgeworCQkJCXJldHVybiByZXN1bHRzOworCisJCQkvLyBQcmVjb21waWxlZCBtYXRjaGVycyB3aWxsIHN0aWxsIHZlcmlmeSBhbmNlc3RyeSwgc28gc3RlcCB1cCBhIGxldmVsCisJCQl9IGVsc2UgaWYgKCBjb21waWxlZCApIHsKKwkJCQljb250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlOworCQkJfQorCisJCQlzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTsKKwkJfQorCisJCS8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmcKKwkJaSA9IG1hdGNoRXhwclsibmVlZHNDb250ZXh0Il0udGVzdCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3RoOworCQl3aGlsZSAoIGktLSApIHsKKwkJCXRva2VuID0gdG9rZW5zW2ldOworCisJCQkvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yCisJCQlpZiAoIEV4cHIucmVsYXRpdmVbICh0eXBlID0gdG9rZW4udHlwZSkgXSApIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICggKGZpbmQgPSBFeHByLmZpbmRbIHR5cGUgXSkgKSB7CisJCQkJLy8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzCisJCQkJaWYgKCAoc2VlZCA9IGZpbmQoCisJCQkJCXRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSwKKwkJCQkJcnNpYmxpbmcudGVzdCggdG9rZW5zWzBdLnR5cGUgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dAorCQkJCSkpICkgeworCisJCQkJCS8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseQorCQkJCQl0b2tlbnMuc3BsaWNlKCBpLCAxICk7CisJCQkJCXNlbGVjdG9yID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7CisJCQkJCWlmICggIXNlbGVjdG9yICkgeworCQkJCQkJcHVzaC5hcHBseSggcmVzdWx0cywgc2VlZCApOworCQkJCQkJcmV0dXJuIHJlc3VsdHM7CisJCQkJCX0KKworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvLyBDb21waWxlIGFuZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQKKwkvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlCisJKCBjb21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKAorCQlzZWVkLAorCQljb250ZXh0LAorCQkhZG9jdW1lbnRJc0hUTUwsCisJCXJlc3VsdHMsCisJCSFjb250ZXh0IHx8IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHQKKwkpOworCXJldHVybiByZXN1bHRzOworfTsKKworLy8gT25lLXRpbWUgYXNzaWdubWVudHMKKworLy8gU29ydCBzdGFiaWxpdHkKK3N1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoIiIpLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oIiIpID09PSBleHBhbmRvOworCisvLyBTdXBwb3J0OiBDaHJvbWUgMTQtMzUrCisvLyBBbHdheXMgYXNzdW1lIGR1cGxpY2F0ZXMgaWYgdGhleSBhcmVuJ3QgcGFzc2VkIHRvIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uCitzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXMgPSAhIWhhc0R1cGxpY2F0ZTsKKworLy8gSW5pdGlhbGl6ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IGRvY3VtZW50CitzZXREb2N1bWVudCgpOworCisvLyBTdXBwb3J0OiBXZWJraXQ8NTM3LjMyIC0gU2FmYXJpIDYuMC4zL0Nocm9tZSAyNSAoZml4ZWQgaW4gQ2hyb21lIDI3KQorLy8gRGV0YWNoZWQgbm9kZXMgY29uZm91bmRpbmdseSBmb2xsb3cgKmVhY2ggb3RoZXIqCitzdXBwb3J0LnNvcnREZXRhY2hlZCA9IGFzc2VydChmdW5jdGlvbiggZGl2MSApIHsKKwkvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZykKKwlyZXR1cm4gZGl2MS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikgKSAmIDE7Cit9KTsKKworLy8gU3VwcG9ydDogSUU8OAorLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgImludGVycG9sYXRpb24iCisvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4CitpZiAoICFhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKKwlkaXYuaW5uZXJIVE1MID0gIjxhIGhyZWY9JyMnPjwvYT4iOworCXJldHVybiBkaXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSA9PT0gIiMiIDsKK30pICkgeworCWFkZEhhbmRsZSggInR5cGV8aHJlZnxoZWlnaHR8d2lkdGgiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7CisJCWlmICggIWlzWE1MICkgeworCQkJcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJ0eXBlIiA/IDEgOiAyICk7CisJCX0KKwl9KTsKK30KKworLy8gU3VwcG9ydDogSUU8OQorLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoInZhbHVlIikKK2lmICggIXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisJZGl2LmlubmVySFRNTCA9ICI8aW5wdXQvPiI7CisJZGl2LmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCAidmFsdWUiLCAiIiApOworCXJldHVybiBkaXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoICJ2YWx1ZSIgKSA9PT0gIiI7Cit9KSApIHsKKwlhZGRIYW5kbGUoICJ2YWx1ZSIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHsKKwkJaWYgKCAhaXNYTUwgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaW5wdXQiICkgeworCQkJcmV0dXJuIGVsZW0uZGVmYXVsdFZhbHVlOworCQl9CisJfSk7Cit9CisKKy8vIFN1cHBvcnQ6IElFPDkKKy8vIFVzZSBnZXRBdHRyaWJ1dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdoZW4gZ2V0QXR0cmlidXRlIGxpZXMKK2lmICggIWFzc2VydChmdW5jdGlvbiggZGl2ICkgeworCXJldHVybiBkaXYuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpID09IG51bGw7Cit9KSApIHsKKwlhZGRIYW5kbGUoIGJvb2xlYW5zLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7CisJCXZhciB2YWw7CisJCWlmICggIWlzWE1MICkgeworCQkJcmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6CisJCQkJCSh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSkgJiYgdmFsLnNwZWNpZmllZCA/CisJCQkJCXZhbC52YWx1ZSA6CisJCQkJbnVsbDsKKwkJfQorCX0pOworfQorCityZXR1cm4gU2l6emxlOworCit9KSggd2luZG93ICk7CisKKworCitqUXVlcnkuZmluZCA9IFNpenpsZTsKK2pRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9yczsKK2pRdWVyeS5leHByWyAiOiIgXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7CitqUXVlcnkudW5pcXVlU29ydCA9IGpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDsKK2pRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7CitqUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7CitqUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7CisKKworCit2YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7CisJdmFyIG1hdGNoZWQgPSBbXSwKKwkJdHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkOworCisJd2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICYmIGVsZW0ubm9kZVR5cGUgIT09IDkgKSB7CisJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKwkJCWlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQltYXRjaGVkLnB1c2goIGVsZW0gKTsKKwkJfQorCX0KKwlyZXR1cm4gbWF0Y2hlZDsKK307CisKKwordmFyIHNpYmxpbmdzID0gZnVuY3Rpb24oIG4sIGVsZW0gKSB7CisJdmFyIG1hdGNoZWQgPSBbXTsKKworCWZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7CisJCWlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkgeworCQkJbWF0Y2hlZC5wdXNoKCBuICk7CisJCX0KKwl9CisKKwlyZXR1cm4gbWF0Y2hlZDsKK307CisKKwordmFyIHJuZWVkc0NvbnRleHQgPSBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7CisKK3ZhciByc2luZ2xlVGFnID0gKCAvXjwoW1x3LV0rKVxzKlwvPz4oPzo8XC9cMT58KSQvICk7CisKKworCit2YXIgcmlzU2ltcGxlID0gL14uW146I1xbXC4sXSokLzsKKworLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3QKK2Z1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwgbm90ICkgeworCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHF1YWxpZmllciApICkgeworCQlyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKKwkJCS8qIGpzaGludCAtVzAxOCAqLworCQkJcmV0dXJuICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKSAhPT0gbm90OworCQl9ICk7CisKKwl9CisKKwlpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHsKKwkJcmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSAhPT0gbm90OworCQl9ICk7CisKKwl9CisKKwlpZiAoIHR5cGVvZiBxdWFsaWZpZXIgPT09ICJzdHJpbmciICkgeworCQlpZiAoIHJpc1NpbXBsZS50ZXN0KCBxdWFsaWZpZXIgKSApIHsKKwkJCXJldHVybiBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTsKKwkJfQorCisJCXF1YWxpZmllciA9IGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMgKTsKKwl9CisKKwlyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKwkJcmV0dXJuICggalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHF1YWxpZmllciApID4gLTEgKSAhPT0gbm90OworCX0gKTsKK30KKworalF1ZXJ5LmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkgeworCXZhciBlbGVtID0gZWxlbXNbIDAgXTsKKworCWlmICggbm90ICkgeworCQlleHByID0gIjpub3QoIiArIGV4cHIgKyAiKSI7CisJfQorCisJcmV0dXJuIGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxID8KKwkJalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBleHByICkgPyBbIGVsZW0gXSA6IFtdIDoKKwkJalF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHsKKwkJCXJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxOworCQl9ICkgKTsKK307CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKwlmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisJCXZhciBpLAorCQkJcmV0ID0gW10sCisJCQlzZWxmID0gdGhpcywKKwkJCWxlbiA9IHNlbGYubGVuZ3RoOworCisJCWlmICggdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5nIiApIHsKKwkJCXJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlciggZnVuY3Rpb24oKSB7CisJCQkJZm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHsKKwkJCQkJaWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkgeworCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCX0KKwkJCQl9CisJCQl9ICkgKTsKKwkJfQorCisJCWZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7CisJCQlqUXVlcnkuZmluZCggc2VsZWN0b3IsIHNlbGZbIGkgXSwgcmV0ICk7CisJCX0KKworCQkvLyBOZWVkZWQgYmVjYXVzZSAkKCBzZWxlY3RvciwgY29udGV4dCApIGJlY29tZXMgJCggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICkKKwkJcmV0ID0gdGhpcy5wdXNoU3RhY2soIGxlbiA+IDEgPyBqUXVlcnkudW5pcXVlKCByZXQgKSA6IHJldCApOworCQlyZXQuc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yID8gdGhpcy5zZWxlY3RvciArICIgIiArIHNlbGVjdG9yIDogc2VsZWN0b3I7CisJCXJldHVybiByZXQ7CisJfSwKKwlmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKwkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSApICk7CisJfSwKKwlub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKwkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCB0cnVlICkgKTsKKwl9LAorCWlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisJCXJldHVybiAhIXdpbm5vdygKKwkJCXRoaXMsCisKKwkJCS8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXQKKwkJCS8vIHNvICQoInA6Zmlyc3QiKS5pcygicDpsYXN0Iikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvICJwIi4KKwkJCXR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgJiYgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID8KKwkJCQlqUXVlcnkoIHNlbGVjdG9yICkgOgorCQkJCXNlbGVjdG9yIHx8IFtdLAorCQkJZmFsc2UKKwkJKS5sZW5ndGg7CisJfQorfSApOworCisKKy8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2JqZWN0CisKKworLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpCit2YXIgcm9vdGpRdWVyeSwKKworCS8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzCisJLy8gUHJpb3JpdGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5NTIxKQorCS8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICgjMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KQorCXJxdWlja0V4cHIgPSAvXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLAorCisJaW5pdCA9IGpRdWVyeS5mbi5pbml0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290ICkgeworCQl2YXIgbWF0Y2gsIGVsZW07CisKKwkJLy8gSEFORExFOiAkKCIiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKQorCQlpZiAoICFzZWxlY3RvciApIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisKKwkJLy8gaW5pdCBhY2NlcHRzIGFuIGFsdGVybmF0ZSByb290alF1ZXJ5CisJCS8vIHNvIG1pZ3JhdGUgY2FuIHN1cHBvcnQgalF1ZXJ5LnN1YiAoZ2gtMjEwMSkKKwkJcm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTsKKworCQkvLyBIYW5kbGUgSFRNTCBzdHJpbmdzCisJCWlmICggdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKKwkJCWlmICggc2VsZWN0b3IuY2hhckF0KCAwICkgPT09ICI8IiAmJgorCQkJCXNlbGVjdG9yLmNoYXJBdCggc2VsZWN0b3IubGVuZ3RoIC0gMSApID09PSAiPiIgJiYKKwkJCQlzZWxlY3Rvci5sZW5ndGggPj0gMyApIHsKKworCQkJCS8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrCisJCQkJbWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07CisKKwkJCX0gZWxzZSB7CisJCQkJbWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7CisJCQl9CisKKwkJCS8vIE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWQKKwkJCWlmICggbWF0Y2ggJiYgKCBtYXRjaFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7CisKKwkJCQkvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSkKKwkJCQlpZiAoIG1hdGNoWyAxIF0gKSB7CisJCQkJCWNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFsgMCBdIDogY29udGV4dDsKKworCQkJCQkvLyBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0CisJCQkJCS8vIEludGVudGlvbmFsbHkgbGV0IHRoZSBlcnJvciBiZSB0aHJvd24gaWYgcGFyc2VIVE1MIGlzIG5vdCBwcmVzZW50CisJCQkJCWpRdWVyeS5tZXJnZSggdGhpcywgalF1ZXJ5LnBhcnNlSFRNTCgKKwkJCQkJCW1hdGNoWyAxIF0sCisJCQkJCQljb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50LAorCQkJCQkJdHJ1ZQorCQkJCQkpICk7CisKKwkJCQkJLy8gSEFORExFOiAkKGh0bWwsIHByb3BzKQorCQkJCQlpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0Y2hbIDEgXSApICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7CisJCQkJCQlmb3IgKCBtYXRjaCBpbiBjb250ZXh0ICkgeworCisJCQkJCQkJLy8gUHJvcGVydGllcyBvZiBjb250ZXh0IGFyZSBjYWxsZWQgYXMgbWV0aG9kcyBpZiBwb3NzaWJsZQorCQkJCQkJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHsKKwkJCQkJCQkJdGhpc1sgbWF0Y2ggXSggY29udGV4dFsgbWF0Y2ggXSApOworCisJCQkJCQkJLy8gLi4uYW5kIG90aGVyd2lzZSBzZXQgYXMgYXR0cmlidXRlcworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCXRoaXMuYXR0ciggbWF0Y2gsIGNvbnRleHRbIG1hdGNoIF0gKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlyZXR1cm4gdGhpczsKKworCQkJCS8vIEhBTkRMRTogJCgjaWQpCisJCQkJfSBlbHNlIHsKKwkJCQkJZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsgMiBdICk7CisKKwkJCQkJLy8gQ2hlY2sgcGFyZW50Tm9kZSB0byBjYXRjaCB3aGVuIEJsYWNrYmVycnkgNC42IHJldHVybnMKKwkJCQkJLy8gbm9kZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVudCAjNjk2MworCQkJCQlpZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2RlICkgeworCisJCQkJCQkvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgSUUgYW5kIE9wZXJhIHJldHVybiBpdGVtcworCQkJCQkJLy8gYnkgbmFtZSBpbnN0ZWFkIG9mIElECisJCQkJCQlpZiAoIGVsZW0uaWQgIT09IG1hdGNoWyAyIF0gKSB7CisJCQkJCQkJcmV0dXJuIHJvb3RqUXVlcnkuZmluZCggc2VsZWN0b3IgKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gT3RoZXJ3aXNlLCB3ZSBpbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdAorCQkJCQkJdGhpcy5sZW5ndGggPSAxOworCQkJCQkJdGhpc1sgMCBdID0gZWxlbTsKKwkJCQkJfQorCisJCQkJCXRoaXMuY29udGV4dCA9IGRvY3VtZW50OworCQkJCQl0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7CisJCQkJCXJldHVybiB0aGlzOworCQkJCX0KKworCQkJLy8gSEFORExFOiAkKGV4cHIsICQoLi4uKSkKKwkJCX0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkgeworCQkJCXJldHVybiAoIGNvbnRleHQgfHwgcm9vdCApLmZpbmQoIHNlbGVjdG9yICk7CisKKwkJCS8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KQorCQkJLy8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpCisJCQl9IGVsc2UgeworCQkJCXJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTsKKwkJCX0KKworCQkvLyBIQU5ETEU6ICQoRE9NRWxlbWVudCkKKwkJfSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7CisJCQl0aGlzLmNvbnRleHQgPSB0aGlzWyAwIF0gPSBzZWxlY3RvcjsKKwkJCXRoaXMubGVuZ3RoID0gMTsKKwkJCXJldHVybiB0aGlzOworCisJCS8vIEhBTkRMRTogJChmdW5jdGlvbikKKwkJLy8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5CisJCX0gZWxzZSBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBzZWxlY3RvciApICkgeworCQkJcmV0dXJuIHR5cGVvZiByb290LnJlYWR5ICE9PSAidW5kZWZpbmVkIiA/CisJCQkJcm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6CisKKwkJCQkvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50CisJCQkJc2VsZWN0b3IoIGpRdWVyeSApOworCQl9CisKKwkJaWYgKCBzZWxlY3Rvci5zZWxlY3RvciAhPT0gdW5kZWZpbmVkICkgeworCQkJdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yLnNlbGVjdG9yOworCQkJdGhpcy5jb250ZXh0ID0gc2VsZWN0b3IuY29udGV4dDsKKwkJfQorCisJCXJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApOworCX07CisKKy8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb24KK2luaXQucHJvdG90eXBlID0galF1ZXJ5LmZuOworCisvLyBJbml0aWFsaXplIGNlbnRyYWwgcmVmZXJlbmNlCityb290alF1ZXJ5ID0galF1ZXJ5KCBkb2N1bWVudCApOworCisKK3ZhciBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLywKKworCS8vIG1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0CisJZ3VhcmFudGVlZFVuaXF1ZSA9IHsKKwkJY2hpbGRyZW46IHRydWUsCisJCWNvbnRlbnRzOiB0cnVlLAorCQluZXh0OiB0cnVlLAorCQlwcmV2OiB0cnVlCisJfTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCWhhczogZnVuY3Rpb24oIHRhcmdldCApIHsKKwkJdmFyIGksCisJCQl0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSwKKwkJCWxlbiA9IHRhcmdldHMubGVuZ3RoOworCisJCXJldHVybiB0aGlzLmZpbHRlciggZnVuY3Rpb24oKSB7CisJCQlmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkgeworCQkJCWlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzWyBpIF0gKSApIHsKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJfQorCQkJfQorCQl9ICk7CisJfSwKKworCWNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7CisJCXZhciBjdXIsCisJCQlpID0gMCwKKwkJCWwgPSB0aGlzLmxlbmd0aCwKKwkJCW1hdGNoZWQgPSBbXSwKKwkJCXBvcyA9IHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3JzICkgfHwgdHlwZW9mIHNlbGVjdG9ycyAhPT0gInN0cmluZyIgPworCQkJCWpRdWVyeSggc2VsZWN0b3JzLCBjb250ZXh0IHx8IHRoaXMuY29udGV4dCApIDoKKwkJCQkwOworCisJCWZvciAoIDsgaSA8IGw7IGkrKyApIHsKKwkJCWZvciAoIGN1ciA9IHRoaXNbIGkgXTsgY3VyICYmIGN1ciAhPT0gY29udGV4dDsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7CisKKwkJCQkvLyBBbHdheXMgc2tpcCBkb2N1bWVudCBmcmFnbWVudHMKKwkJCQlpZiAoIGN1ci5ub2RlVHlwZSA8IDExICYmICggcG9zID8KKwkJCQkJcG9zLmluZGV4KCBjdXIgKSA+IC0xIDoKKworCQkJCQkvLyBEb24ndCBwYXNzIG5vbi1lbGVtZW50cyB0byBTaXp6bGUKKwkJCQkJY3VyLm5vZGVUeXBlID09PSAxICYmCisJCQkJCQlqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGN1ciwgc2VsZWN0b3JzICkgKSApIHsKKworCQkJCQltYXRjaGVkLnB1c2goIGN1ciApOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICkgOiBtYXRjaGVkICk7CisJfSwKKworCS8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4KKwkvLyB0aGUgbWF0Y2hlZCBzZXQgb2YgZWxlbWVudHMKKwlpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7CisKKwkJLy8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnQKKwkJaWYgKCAhZWxlbSApIHsKKwkJCXJldHVybiAoIHRoaXNbIDAgXSAmJiB0aGlzWyAwIF0ucGFyZW50Tm9kZSApID8gdGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGggOiAtMTsKKwkJfQorCisJCS8vIGluZGV4IGluIHNlbGVjdG9yCisJCWlmICggdHlwZW9mIGVsZW0gPT09ICJzdHJpbmciICkgeworCQkJcmV0dXJuIGpRdWVyeS5pbkFycmF5KCB0aGlzWyAwIF0sIGpRdWVyeSggZWxlbSApICk7CisJCX0KKworCQkvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnQKKwkJcmV0dXJuIGpRdWVyeS5pbkFycmF5KAorCisJCQkvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWQKKwkJCWVsZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxlbSwgdGhpcyApOworCX0sCisKKwlhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsKKwkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKAorCQkJalF1ZXJ5LnVuaXF1ZVNvcnQoCisJCQkJalF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKQorCQkJKQorCQkpOworCX0sCisKKwlhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisJCXJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/CisJCQl0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApCisJCSk7CisJfQorfSApOworCitmdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHsKKwlkbyB7CisJCWN1ciA9IGN1clsgZGlyIF07CisJfSB3aGlsZSAoIGN1ciAmJiBjdXIubm9kZVR5cGUgIT09IDEgKTsKKworCXJldHVybiBjdXI7Cit9CisKK2pRdWVyeS5lYWNoKCB7CisJcGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHsKKwkJdmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKKwkJcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDsKKwl9LAorCXBhcmVudHM6IGZ1bmN0aW9uKCBlbGVtICkgeworCQlyZXR1cm4gZGlyKCBlbGVtLCAicGFyZW50Tm9kZSIgKTsKKwl9LAorCXBhcmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkgeworCQlyZXR1cm4gZGlyKCBlbGVtLCAicGFyZW50Tm9kZSIsIHVudGlsICk7CisJfSwKKwluZXh0OiBmdW5jdGlvbiggZWxlbSApIHsKKwkJcmV0dXJuIHNpYmxpbmcoIGVsZW0sICJuZXh0U2libGluZyIgKTsKKwl9LAorCXByZXY6IGZ1bmN0aW9uKCBlbGVtICkgeworCQlyZXR1cm4gc2libGluZyggZWxlbSwgInByZXZpb3VzU2libGluZyIgKTsKKwl9LAorCW5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkgeworCQlyZXR1cm4gZGlyKCBlbGVtLCAibmV4dFNpYmxpbmciICk7CisJfSwKKwlwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJcmV0dXJuIGRpciggZWxlbSwgInByZXZpb3VzU2libGluZyIgKTsKKwl9LAorCW5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkgeworCQlyZXR1cm4gZGlyKCBlbGVtLCAibmV4dFNpYmxpbmciLCB1bnRpbCApOworCX0sCisJcHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7CisJCXJldHVybiBkaXIoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciLCB1bnRpbCApOworCX0sCisJc2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkgeworCQlyZXR1cm4gc2libGluZ3MoICggZWxlbS5wYXJlbnROb2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApOworCX0sCisJY2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkgeworCQlyZXR1cm4gc2libGluZ3MoIGVsZW0uZmlyc3RDaGlsZCApOworCX0sCisJY29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkgeworCQlyZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaWZyYW1lIiApID8KKwkJCWVsZW0uY29udGVudERvY3VtZW50IHx8IGVsZW0uY29udGVudFdpbmRvdy5kb2N1bWVudCA6CisJCQlqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTsKKwl9Cit9LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7CisJalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkgeworCQl2YXIgcmV0ID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7CisKKwkJaWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSAiVW50aWwiICkgeworCQkJc2VsZWN0b3IgPSB1bnRpbDsKKwkJfQorCisJCWlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKKwkJCXJldCA9IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCByZXQgKTsKKwkJfQorCisJCWlmICggdGhpcy5sZW5ndGggPiAxICkgeworCisJCQkvLyBSZW1vdmUgZHVwbGljYXRlcworCQkJaWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkgeworCQkJCXJldCA9IGpRdWVyeS51bmlxdWVTb3J0KCByZXQgKTsKKwkJCX0KKworCQkJLy8gUmV2ZXJzZSBvcmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXMKKwkJCWlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHsKKwkJCQlyZXQgPSByZXQucmV2ZXJzZSgpOworCQkJfQorCQl9CisKKwkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQgKTsKKwl9OworfSApOwordmFyIHJub3R3aGl0ZSA9ICggL1xTKy9nICk7CisKKworCisvLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lcworZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHsKKwl2YXIgb2JqZWN0ID0ge307CisJalF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyApIHsKKwkJb2JqZWN0WyBmbGFnIF0gPSB0cnVlOworCX0gKTsKKwlyZXR1cm4gb2JqZWN0OworfQorCisvKgorICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisgKgorICoJb3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhvdworICoJCQl0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzIG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0CisgKgorICogQnkgZGVmYXVsdCBhIGNhbGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBjYW4gYmUKKyAqICJmaXJlZCIgbXVsdGlwbGUgdGltZXMuCisgKgorICogUG9zc2libGUgb3B0aW9uczoKKyAqCisgKglvbmNlOgkJCXdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZCkKKyAqCisgKgltZW1vcnk6CQkJd2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZAorICoJCQkJCWFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0ICJtZW1vcml6ZWQiCisgKgkJCQkJdmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpCisgKgorICoJdW5pcXVlOgkJCXdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KQorICoKKyAqCXN0b3BPbkZhbHNlOglpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2UKKyAqCisgKi8KK2pRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHsKKworCS8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWQKKwkvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpCisJb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSAic3RyaW5nIiA/CisJCWNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6CisJCWpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7CisKKwl2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZworCQlmaXJpbmcsCisKKwkJLy8gTGFzdCBmaXJlIHZhbHVlIGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHMKKwkJbWVtb3J5LAorCisJCS8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkCisJCWZpcmVkLAorCisJCS8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmcKKwkJbG9ja2VkLAorCisJCS8vIEFjdHVhbCBjYWxsYmFjayBsaXN0CisJCWxpc3QgPSBbXSwKKworCQkvLyBRdWV1ZSBvZiBleGVjdXRpb24gZGF0YSBmb3IgcmVwZWF0YWJsZSBsaXN0cworCQlxdWV1ZSA9IFtdLAorCisJCS8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKQorCQlmaXJpbmdJbmRleCA9IC0xLAorCisJCS8vIEZpcmUgY2FsbGJhY2tzCisJCWZpcmUgPSBmdW5jdGlvbigpIHsKKworCQkJLy8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nCisJCQlsb2NrZWQgPSBvcHRpb25zLm9uY2U7CisKKwkJCS8vIEV4ZWN1dGUgY2FsbGJhY2tzIGZvciBhbGwgcGVuZGluZyBleGVjdXRpb25zLAorCQkJLy8gcmVzcGVjdGluZyBmaXJpbmdJbmRleCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUgY2hhbmdlcworCQkJZmlyZWQgPSBmaXJpbmcgPSB0cnVlOworCQkJZm9yICggOyBxdWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4ID0gLTEgKSB7CisJCQkJbWVtb3J5ID0gcXVldWUuc2hpZnQoKTsKKwkJCQl3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHsKKworCQkJCQkvLyBSdW4gY2FsbGJhY2sgYW5kIGNoZWNrIGZvciBlYXJseSB0ZXJtaW5hdGlvbgorCQkJCQlpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAmJgorCQkJCQkJb3B0aW9ucy5zdG9wT25GYWxzZSApIHsKKworCQkJCQkJLy8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZQorCQkJCQkJZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aDsKKwkJCQkJCW1lbW9yeSA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQkvLyBGb3JnZXQgdGhlIGRhdGEgaWYgd2UncmUgZG9uZSB3aXRoIGl0CisJCQlpZiAoICFvcHRpb25zLm1lbW9yeSApIHsKKwkJCQltZW1vcnkgPSBmYWxzZTsKKwkJCX0KKworCQkJZmlyaW5nID0gZmFsc2U7CisKKwkJCS8vIENsZWFuIHVwIGlmIHdlJ3JlIGRvbmUgZmlyaW5nIGZvciBnb29kCisJCQlpZiAoIGxvY2tlZCApIHsKKworCQkJCS8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHMKKwkJCQlpZiAoIG1lbW9yeSApIHsKKwkJCQkJbGlzdCA9IFtdOworCisJCQkJLy8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVudAorCQkJCX0gZWxzZSB7CisJCQkJCWxpc3QgPSAiIjsKKwkJCQl9CisJCQl9CisJCX0sCisKKwkJLy8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3QKKwkJc2VsZiA9IHsKKworCQkJLy8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdAorCQkJYWRkOiBmdW5jdGlvbigpIHsKKwkJCQlpZiAoIGxpc3QgKSB7CisKKwkJCQkJLy8gSWYgd2UgaGF2ZSBtZW1vcnkgZnJvbSBhIHBhc3QgcnVuLCB3ZSBzaG91bGQgZmlyZSBhZnRlciBhZGRpbmcKKwkJCQkJaWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHsKKwkJCQkJCWZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxOworCQkJCQkJcXVldWUucHVzaCggbWVtb3J5ICk7CisJCQkJCX0KKworCQkJCQkoIGZ1bmN0aW9uIGFkZCggYXJncyApIHsKKwkJCQkJCWpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkgeworCQkJCQkJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGFyZyApICkgeworCQkJCQkJCQlpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkgeworCQkJCQkJCQkJbGlzdC5wdXNoKCBhcmcgKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIGpRdWVyeS50eXBlKCBhcmcgKSAhPT0gInN0cmluZyIgKSB7CisKKwkJCQkJCQkJLy8gSW5zcGVjdCByZWN1cnNpdmVseQorCQkJCQkJCQlhZGQoIGFyZyApOworCQkJCQkJCX0KKwkJCQkJCX0gKTsKKwkJCQkJfSApKCBhcmd1bWVudHMgKTsKKworCQkJCQlpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkgeworCQkJCQkJZmlyZSgpOworCQkJCQl9CisJCQkJfQorCQkJCXJldHVybiB0aGlzOworCQkJfSwKKworCQkJLy8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdAorCQkJcmVtb3ZlOiBmdW5jdGlvbigpIHsKKwkJCQlqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkgeworCQkJCQl2YXIgaW5kZXg7CisJCQkJCXdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkgeworCQkJCQkJbGlzdC5zcGxpY2UoIGluZGV4LCAxICk7CisKKwkJCQkJCS8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlcworCQkJCQkJaWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHsKKwkJCQkJCQlmaXJpbmdJbmRleC0tOworCQkJCQkJfQorCQkJCQl9CisJCQkJfSApOworCQkJCXJldHVybiB0aGlzOworCQkJfSwKKworCQkJLy8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC4KKwkJCS8vIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLgorCQkJaGFzOiBmdW5jdGlvbiggZm4gKSB7CisJCQkJcmV0dXJuIGZuID8KKwkJCQkJalF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6CisJCQkJCWxpc3QubGVuZ3RoID4gMDsKKwkJCX0sCisKKwkJCS8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3QKKwkJCWVtcHR5OiBmdW5jdGlvbigpIHsKKwkJCQlpZiAoIGxpc3QgKSB7CisJCQkJCWxpc3QgPSBbXTsKKwkJCQl9CisJCQkJcmV0dXJuIHRoaXM7CisJCQl9LAorCisJCQkvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkCisJCQkvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnMKKwkJCS8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlcworCQkJZGlzYWJsZTogZnVuY3Rpb24oKSB7CisJCQkJbG9ja2VkID0gcXVldWUgPSBbXTsKKwkJCQlsaXN0ID0gbWVtb3J5ID0gIiI7CisJCQkJcmV0dXJuIHRoaXM7CisJCQl9LAorCQkJZGlzYWJsZWQ6IGZ1bmN0aW9uKCkgeworCQkJCXJldHVybiAhbGlzdDsKKwkJCX0sCisKKwkJCS8vIERpc2FibGUgLmZpcmUKKwkJCS8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpCisJCQkvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zCisJCQlsb2NrOiBmdW5jdGlvbigpIHsKKwkJCQlsb2NrZWQgPSB0cnVlOworCQkJCWlmICggIW1lbW9yeSApIHsKKwkJCQkJc2VsZi5kaXNhYmxlKCk7CisJCQkJfQorCQkJCXJldHVybiB0aGlzOworCQkJfSwKKwkJCWxvY2tlZDogZnVuY3Rpb24oKSB7CisJCQkJcmV0dXJuICEhbG9ja2VkOworCQkJfSwKKworCQkJLy8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50cworCQkJZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkgeworCQkJCWlmICggIWxvY2tlZCApIHsKKwkJCQkJYXJncyA9IGFyZ3MgfHwgW107CisJCQkJCWFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07CisJCQkJCXF1ZXVlLnB1c2goIGFyZ3MgKTsKKwkJCQkJaWYgKCAhZmlyaW5nICkgeworCQkJCQkJZmlyZSgpOworCQkJCQl9CisJCQkJfQorCQkJCXJldHVybiB0aGlzOworCQkJfSwKKworCQkJLy8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMKKwkJCWZpcmU6IGZ1bmN0aW9uKCkgeworCQkJCXNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApOworCQkJCXJldHVybiB0aGlzOworCQkJfSwKKworCQkJLy8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlCisJCQlmaXJlZDogZnVuY3Rpb24oKSB7CisJCQkJcmV0dXJuICEhZmlyZWQ7CisJCQl9CisJCX07CisKKwlyZXR1cm4gc2VsZjsKK307CisKKworalF1ZXJ5LmV4dGVuZCggeworCisJRGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkgeworCQl2YXIgdHVwbGVzID0gWworCisJCQkJLy8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGxpc3RlbmVyIGxpc3QsIGZpbmFsIHN0YXRlCisJCQkJWyAicmVzb2x2ZSIsICJkb25lIiwgalF1ZXJ5LkNhbGxiYWNrcyggIm9uY2UgbWVtb3J5IiApLCAicmVzb2x2ZWQiIF0sCisJCQkJWyAicmVqZWN0IiwgImZhaWwiLCBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICksICJyZWplY3RlZCIgXSwKKwkJCQlbICJub3RpZnkiLCAicHJvZ3Jlc3MiLCBqUXVlcnkuQ2FsbGJhY2tzKCAibWVtb3J5IiApIF0KKwkJCV0sCisJCQlzdGF0ZSA9ICJwZW5kaW5nIiwKKwkJCXByb21pc2UgPSB7CisJCQkJc3RhdGU6IGZ1bmN0aW9uKCkgeworCQkJCQlyZXR1cm4gc3RhdGU7CisJCQkJfSwKKwkJCQlhbHdheXM6IGZ1bmN0aW9uKCkgeworCQkJCQlkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMgKTsKKwkJCQkJcmV0dXJuIHRoaXM7CisJCQkJfSwKKwkJCQl0aGVuOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWwsIGZuUHJvZ3Jlc3MgKi8gKSB7CisJCQkJCXZhciBmbnMgPSBhcmd1bWVudHM7CisJCQkJCXJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHsKKwkJCQkJCWpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHsKKwkJCQkJCQl2YXIgZm4gPSBqUXVlcnkuaXNGdW5jdGlvbiggZm5zWyBpIF0gKSAmJiBmbnNbIGkgXTsKKworCQkJCQkJCS8vIGRlZmVycmVkWyBkb25lIHwgZmFpbCB8IHByb2dyZXNzIF0gZm9yIGZvcndhcmRpbmcgYWN0aW9ucyB0byBuZXdEZWZlcgorCQkJCQkJCWRlZmVycmVkWyB0dXBsZVsgMSBdIF0oIGZ1bmN0aW9uKCkgeworCQkJCQkJCQl2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7CisJCQkJCQkJCWlmICggcmV0dXJuZWQgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHsKKwkJCQkJCQkJCXJldHVybmVkLnByb21pc2UoKQorCQkJCQkJCQkJCS5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5ICkKKwkJCQkJCQkJCQkuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApCisJCQkJCQkJCQkJLmZhaWwoIG5ld0RlZmVyLnJlamVjdCApOworCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJbmV3RGVmZXJbIHR1cGxlWyAwIF0gKyAiV2l0aCIgXSgKKwkJCQkJCQkJCQl0aGlzID09PSBwcm9taXNlID8gbmV3RGVmZXIucHJvbWlzZSgpIDogdGhpcywKKwkJCQkJCQkJCQlmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50cworCQkJCQkJCQkJKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0gKTsKKwkJCQkJCX0gKTsKKwkJCQkJCWZucyA9IG51bGw7CisJCQkJCX0gKS5wcm9taXNlKCk7CisJCQkJfSwKKworCQkJCS8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWQKKwkJCQkvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBhZGRlZCB0byB0aGUgb2JqZWN0CisJCQkJcHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHsKKwkJCQkJcmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlOworCQkJCX0KKwkJCX0sCisJCQlkZWZlcnJlZCA9IHt9OworCisJCS8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXQKKwkJcHJvbWlzZS5waXBlID0gcHJvbWlzZS50aGVuOworCisJCS8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHMKKwkJalF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkgeworCQkJdmFyIGxpc3QgPSB0dXBsZVsgMiBdLAorCQkJCXN0YXRlU3RyaW5nID0gdHVwbGVbIDMgXTsKKworCQkJLy8gcHJvbWlzZVsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBdID0gbGlzdC5hZGQKKwkJCXByb21pc2VbIHR1cGxlWyAxIF0gXSA9IGxpc3QuYWRkOworCisJCQkvLyBIYW5kbGUgc3RhdGUKKwkJCWlmICggc3RhdGVTdHJpbmcgKSB7CisJCQkJbGlzdC5hZGQoIGZ1bmN0aW9uKCkgeworCisJCQkJCS8vIHN0YXRlID0gWyByZXNvbHZlZCB8IHJlamVjdGVkIF0KKwkJCQkJc3RhdGUgPSBzdGF0ZVN0cmluZzsKKworCQkJCS8vIFsgcmVqZWN0X2xpc3QgfCByZXNvbHZlX2xpc3QgXS5kaXNhYmxlOyBwcm9ncmVzc19saXN0LmxvY2sKKwkJCQl9LCB0dXBsZXNbIGkgXiAxIF1bIDIgXS5kaXNhYmxlLCB0dXBsZXNbIDIgXVsgMiBdLmxvY2sgKTsKKwkJCX0KKworCQkJLy8gZGVmZXJyZWRbIHJlc29sdmUgfCByZWplY3QgfCBub3RpZnkgXQorCQkJZGVmZXJyZWRbIHR1cGxlWyAwIF0gXSA9IGZ1bmN0aW9uKCkgeworCQkJCWRlZmVycmVkWyB0dXBsZVsgMCBdICsgIldpdGgiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gcHJvbWlzZSA6IHRoaXMsIGFyZ3VtZW50cyApOworCQkJCXJldHVybiB0aGlzOworCQkJfTsKKwkJCWRlZmVycmVkWyB0dXBsZVsgMCBdICsgIldpdGgiIF0gPSBsaXN0LmZpcmVXaXRoOworCQl9ICk7CisKKwkJLy8gTWFrZSB0aGUgZGVmZXJyZWQgYSBwcm9taXNlCisJCXByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTsKKworCQkvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55CisJCWlmICggZnVuYyApIHsKKwkJCWZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7CisJCX0KKworCQkvLyBBbGwgZG9uZSEKKwkJcmV0dXJuIGRlZmVycmVkOworCX0sCisKKwkvLyBEZWZlcnJlZCBoZWxwZXIKKwl3aGVuOiBmdW5jdGlvbiggc3Vib3JkaW5hdGUgLyogLCAuLi4sIHN1Ym9yZGluYXRlTiAqLyApIHsKKwkJdmFyIGkgPSAwLAorCQkJcmVzb2x2ZVZhbHVlcyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLAorCQkJbGVuZ3RoID0gcmVzb2x2ZVZhbHVlcy5sZW5ndGgsCisKKwkJCS8vIHRoZSBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXMKKwkJCXJlbWFpbmluZyA9IGxlbmd0aCAhPT0gMSB8fAorCQkJCSggc3Vib3JkaW5hdGUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHN1Ym9yZGluYXRlLnByb21pc2UgKSApID8gbGVuZ3RoIDogMCwKKworCQkJLy8gdGhlIG1hc3RlciBEZWZlcnJlZC4KKwkJCS8vIElmIHJlc29sdmVWYWx1ZXMgY29uc2lzdCBvZiBvbmx5IGEgc2luZ2xlIERlZmVycmVkLCBqdXN0IHVzZSB0aGF0LgorCQkJZGVmZXJyZWQgPSByZW1haW5pbmcgPT09IDEgPyBzdWJvcmRpbmF0ZSA6IGpRdWVyeS5EZWZlcnJlZCgpLAorCisJCQkvLyBVcGRhdGUgZnVuY3Rpb24gZm9yIGJvdGggcmVzb2x2ZSBhbmQgcHJvZ3Jlc3MgdmFsdWVzCisJCQl1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGksIGNvbnRleHRzLCB2YWx1ZXMgKSB7CisJCQkJcmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHsKKwkJCQkJY29udGV4dHNbIGkgXSA9IHRoaXM7CisJCQkJCXZhbHVlc1sgaSBdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlOworCQkJCQlpZiAoIHZhbHVlcyA9PT0gcHJvZ3Jlc3NWYWx1ZXMgKSB7CisJCQkJCQlkZWZlcnJlZC5ub3RpZnlXaXRoKCBjb250ZXh0cywgdmFsdWVzICk7CisKKwkJCQkJfSBlbHNlIGlmICggISggLS1yZW1haW5pbmcgKSApIHsKKwkJCQkJCWRlZmVycmVkLnJlc29sdmVXaXRoKCBjb250ZXh0cywgdmFsdWVzICk7CisJCQkJCX0KKwkJCQl9OworCQkJfSwKKworCQkJcHJvZ3Jlc3NWYWx1ZXMsIHByb2dyZXNzQ29udGV4dHMsIHJlc29sdmVDb250ZXh0czsKKworCQkvLyBhZGQgbGlzdGVuZXJzIHRvIERlZmVycmVkIHN1Ym9yZGluYXRlczsgdHJlYXQgb3RoZXJzIGFzIHJlc29sdmVkCisJCWlmICggbGVuZ3RoID4gMSApIHsKKwkJCXByb2dyZXNzVmFsdWVzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKKwkJCXByb2dyZXNzQ29udGV4dHMgPSBuZXcgQXJyYXkoIGxlbmd0aCApOworCQkJcmVzb2x2ZUNvbnRleHRzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKKwkJCWZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgeworCQkJCWlmICggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlzZSApICkgeworCQkJCQlyZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlzZSgpCisJCQkJCQkucHJvZ3Jlc3MoIHVwZGF0ZUZ1bmMoIGksIHByb2dyZXNzQ29udGV4dHMsIHByb2dyZXNzVmFsdWVzICkgKQorCQkJCQkJLmRvbmUoIHVwZGF0ZUZ1bmMoIGksIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApICkKKwkJCQkJCS5mYWlsKCBkZWZlcnJlZC5yZWplY3QgKTsKKwkJCQl9IGVsc2UgeworCQkJCQktLXJlbWFpbmluZzsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvLyBpZiB3ZSdyZSBub3Qgd2FpdGluZyBvbiBhbnl0aGluZywgcmVzb2x2ZSB0aGUgbWFzdGVyCisJCWlmICggIXJlbWFpbmluZyApIHsKKwkJCWRlZmVycmVkLnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTsKKwkJfQorCisJCXJldHVybiBkZWZlcnJlZC5wcm9taXNlKCk7CisJfQorfSApOworCisKKy8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeQordmFyIHJlYWR5TGlzdDsKKworalF1ZXJ5LmZuLnJlYWR5ID0gZnVuY3Rpb24oIGZuICkgeworCisJLy8gQWRkIHRoZSBjYWxsYmFjaworCWpRdWVyeS5yZWFkeS5wcm9taXNlKCkuZG9uZSggZm4gKTsKKworCXJldHVybiB0aGlzOworfTsKKworalF1ZXJ5LmV4dGVuZCggeworCisJLy8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy4KKwlpc1JlYWR5OiBmYWxzZSwKKworCS8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmUKKwkvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMuIFNlZSAjNjc4MQorCXJlYWR5V2FpdDogMSwKKworCS8vIEhvbGQgKG9yIHJlbGVhc2UpIHRoZSByZWFkeSBldmVudAorCWhvbGRSZWFkeTogZnVuY3Rpb24oIGhvbGQgKSB7CisJCWlmICggaG9sZCApIHsKKwkJCWpRdWVyeS5yZWFkeVdhaXQrKzsKKwkJfSBlbHNlIHsKKwkJCWpRdWVyeS5yZWFkeSggdHJ1ZSApOworCQl9CisJfSwKKworCS8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHkKKwlyZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7CisKKwkJLy8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeQorCQlpZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHsKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeQorCQlqUXVlcnkuaXNSZWFkeSA9IHRydWU7CisKKwkJLy8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmUKKwkJaWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlCisJCXJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTsKKworCQkvLyBUcmlnZ2VyIGFueSBib3VuZCByZWFkeSBldmVudHMKKwkJaWYgKCBqUXVlcnkuZm4udHJpZ2dlckhhbmRsZXIgKSB7CisJCQlqUXVlcnkoIGRvY3VtZW50ICkudHJpZ2dlckhhbmRsZXIoICJyZWFkeSIgKTsKKwkJCWpRdWVyeSggZG9jdW1lbnQgKS5vZmYoICJyZWFkeSIgKTsKKwkJfQorCX0KK30gKTsKKworLyoqCisgKiBDbGVhbi11cCBtZXRob2QgZm9yIGRvbSByZWFkeSBldmVudHMKKyAqLworZnVuY3Rpb24gZGV0YWNoKCkgeworCWlmICggZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciApIHsKKwkJZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggIkRPTUNvbnRlbnRMb2FkZWQiLCBjb21wbGV0ZWQgKTsKKwkJd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoICJsb2FkIiwgY29tcGxldGVkICk7CisKKwl9IGVsc2UgeworCQlkb2N1bWVudC5kZXRhY2hFdmVudCggIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIGNvbXBsZXRlZCApOworCQl3aW5kb3cuZGV0YWNoRXZlbnQoICJvbmxvYWQiLCBjb21wbGV0ZWQgKTsKKwl9Cit9CisKKy8qKgorICogVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2QKKyAqLworZnVuY3Rpb24gY29tcGxldGVkKCkgeworCisJLy8gcmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIiBpcyBnb29kIGVub3VnaCBmb3IgdXMgdG8gY2FsbCB0aGUgZG9tIHJlYWR5IGluIG9sZElFCisJaWYgKCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyIHx8CisJCXdpbmRvdy5ldmVudC50eXBlID09PSAibG9hZCIgfHwKKwkJZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIiApIHsKKworCQlkZXRhY2goKTsKKwkJalF1ZXJ5LnJlYWR5KCk7CisJfQorfQorCitqUXVlcnkucmVhZHkucHJvbWlzZSA9IGZ1bmN0aW9uKCBvYmogKSB7CisJaWYgKCAhcmVhZHlMaXN0ICkgeworCisJCXJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpOworCisJCS8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkCisJCS8vIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLgorCQkvLyBTdXBwb3J0OiBJRTYtMTAKKwkJLy8gT2xkZXIgSUUgc29tZXRpbWVzIHNpZ25hbHMgImludGVyYWN0aXZlIiB0b28gc29vbgorCQlpZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgfHwKKwkJCSggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gImxvYWRpbmciICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgKSApIHsKKworCQkJLy8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5CisJCQl3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7CisKKwkJLy8gU3RhbmRhcmRzLWJhc2VkIGJyb3dzZXJzIHN1cHBvcnQgRE9NQ29udGVudExvYWRlZAorCQl9IGVsc2UgaWYgKCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICkgeworCisJCQkvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrCisJCQlkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIGNvbXBsZXRlZCApOworCisJCQkvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29yaworCQkJd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICJsb2FkIiwgY29tcGxldGVkICk7CisKKwkJLy8gSWYgSUUgZXZlbnQgbW9kZWwgaXMgdXNlZAorCQl9IGVsc2UgeworCisJCQkvLyBFbnN1cmUgZmlyaW5nIGJlZm9yZSBvbmxvYWQsIG1heWJlIGxhdGUgYnV0IHNhZmUgYWxzbyBmb3IgaWZyYW1lcworCQkJZG9jdW1lbnQuYXR0YWNoRXZlbnQoICJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBjb21wbGV0ZWQgKTsKKworCQkJLy8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmsKKwkJCXdpbmRvdy5hdHRhY2hFdmVudCggIm9ubG9hZCIsIGNvbXBsZXRlZCApOworCisJCQkvLyBJZiBJRSBhbmQgbm90IGEgZnJhbWUKKwkJCS8vIGNvbnRpbnVhbGx5IGNoZWNrIHRvIHNlZSBpZiB0aGUgZG9jdW1lbnQgaXMgcmVhZHkKKwkJCXZhciB0b3AgPSBmYWxzZTsKKworCQkJdHJ5IHsKKwkJCQl0b3AgPSB3aW5kb3cuZnJhbWVFbGVtZW50ID09IG51bGwgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OworCQkJfSBjYXRjaCAoIGUgKSB7fQorCisJCQlpZiAoIHRvcCAmJiB0b3AuZG9TY3JvbGwgKSB7CisJCQkJKCBmdW5jdGlvbiBkb1Njcm9sbENoZWNrKCkgeworCQkJCQlpZiAoICFqUXVlcnkuaXNSZWFkeSApIHsKKworCQkJCQkJdHJ5IHsKKworCQkJCQkJCS8vIFVzZSB0aGUgdHJpY2sgYnkgRGllZ28gUGVyaW5pCisJCQkJCQkJLy8gaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0lFQ29udGVudExvYWRlZC8KKwkJCQkJCQl0b3AuZG9TY3JvbGwoICJsZWZ0IiApOworCQkJCQkJfSBjYXRjaCAoIGUgKSB7CisJCQkJCQkJcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KCBkb1Njcm9sbENoZWNrLCA1MCApOworCQkJCQkJfQorCisJCQkJCQkvLyBkZXRhY2ggYWxsIGRvbSByZWFkeSBldmVudHMKKwkJCQkJCWRldGFjaCgpOworCisJCQkJCQkvLyBhbmQgZXhlY3V0ZSBhbnkgd2FpdGluZyBmdW5jdGlvbnMKKwkJCQkJCWpRdWVyeS5yZWFkeSgpOworCQkJCQl9CisJCQkJfSApKCk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJlYWR5TGlzdC5wcm9taXNlKCBvYmogKTsKK307CisKKy8vIEtpY2sgb2ZmIHRoZSBET00gcmVhZHkgY2hlY2sgZXZlbiBpZiB0aGUgdXNlciBkb2VzIG5vdAoralF1ZXJ5LnJlYWR5LnByb21pc2UoKTsKKworCisKKworLy8gU3VwcG9ydDogSUU8OQorLy8gSXRlcmF0aW9uIG92ZXIgb2JqZWN0J3MgaW5oZXJpdGVkIHByb3BlcnRpZXMgYmVmb3JlIGl0cyBvd24KK3ZhciBpOworZm9yICggaSBpbiBqUXVlcnkoIHN1cHBvcnQgKSApIHsKKwlicmVhazsKK30KK3N1cHBvcnQub3duRmlyc3QgPSBpID09PSAiMCI7CisKKy8vIE5vdGU6IG1vc3Qgc3VwcG9ydCB0ZXN0cyBhcmUgZGVmaW5lZCBpbiB0aGVpciByZXNwZWN0aXZlIG1vZHVsZXMuCisvLyBmYWxzZSB1bnRpbCB0aGUgdGVzdCBpcyBydW4KK3N1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dCA9IGZhbHNlOworCisvLyBFeGVjdXRlIEFTQVAgaW4gY2FzZSB3ZSBuZWVkIHRvIHNldCBib2R5LnN0eWxlLnpvb20KK2pRdWVyeSggZnVuY3Rpb24oKSB7CisKKwkvLyBNaW5pZmllZDogdmFyIGEsYixjLGQKKwl2YXIgdmFsLCBkaXYsIGJvZHksIGNvbnRhaW5lcjsKKworCWJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSggImJvZHkiIClbIDAgXTsKKwlpZiAoICFib2R5IHx8ICFib2R5LnN0eWxlICkgeworCisJCS8vIFJldHVybiBmb3IgZnJhbWVzZXQgZG9jcyB0aGF0IGRvbid0IGhhdmUgYSBib2R5CisJCXJldHVybjsKKwl9CisKKwkvLyBTZXR1cAorCWRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICk7CisJY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKTsKKwljb250YWluZXIuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweCI7CisJYm9keS5hcHBlbmRDaGlsZCggY29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApOworCisJaWYgKCB0eXBlb2YgZGl2LnN0eWxlLnpvb20gIT09ICJ1bmRlZmluZWQiICkgeworCisJCS8vIFN1cHBvcnQ6IElFPDgKKwkJLy8gQ2hlY2sgaWYgbmF0aXZlbHkgYmxvY2stbGV2ZWwgZWxlbWVudHMgYWN0IGxpa2UgaW5saW5lLWJsb2NrCisJCS8vIGVsZW1lbnRzIHdoZW4gc2V0dGluZyB0aGVpciBkaXNwbGF5IHRvICdpbmxpbmUnIGFuZCBnaXZpbmcKKwkJLy8gdGhlbSBsYXlvdXQKKwkJZGl2LnN0eWxlLmNzc1RleHQgPSAiZGlzcGxheTppbmxpbmU7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzoxcHg7d2lkdGg6MXB4O3pvb206MSI7CisKKwkJc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0ID0gdmFsID0gZGl2Lm9mZnNldFdpZHRoID09PSAzOworCQlpZiAoIHZhbCApIHsKKworCQkJLy8gUHJldmVudCBJRSA2IGZyb20gYWZmZWN0aW5nIGxheW91dCBmb3IgcG9zaXRpb25lZCBlbGVtZW50cyAjMTEwNDgKKwkJCS8vIFByZXZlbnQgSUUgZnJvbSBzaHJpbmtpbmcgdGhlIGJvZHkgaW4gSUUgNyBtb2RlICMxMjg2OQorCQkJLy8gU3VwcG9ydDogSUU8OAorCQkJYm9keS5zdHlsZS56b29tID0gMTsKKwkJfQorCX0KKworCWJvZHkucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApOworfSApOworCisKKyggZnVuY3Rpb24oKSB7CisJdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICk7CisKKwkvLyBTdXBwb3J0OiBJRTw5CisJc3VwcG9ydC5kZWxldGVFeHBhbmRvID0gdHJ1ZTsKKwl0cnkgeworCQlkZWxldGUgZGl2LnRlc3Q7CisJfSBjYXRjaCAoIGUgKSB7CisJCXN1cHBvcnQuZGVsZXRlRXhwYW5kbyA9IGZhbHNlOworCX0KKworCS8vIE51bGwgZWxlbWVudHMgdG8gYXZvaWQgbGVha3MgaW4gSUUuCisJZGl2ID0gbnVsbDsKK30gKSgpOwordmFyIGFjY2VwdERhdGEgPSBmdW5jdGlvbiggZWxlbSApIHsKKwl2YXIgbm9EYXRhID0galF1ZXJ5Lm5vRGF0YVsgKCBlbGVtLm5vZGVOYW1lICsgIiAiICkudG9Mb3dlckNhc2UoKSBdLAorCQlub2RlVHlwZSA9ICtlbGVtLm5vZGVUeXBlIHx8IDE7CisKKwkvLyBEbyBub3Qgc2V0IGRhdGEgb24gbm9uLWVsZW1lbnQgRE9NIG5vZGVzIGJlY2F1c2UgaXQgd2lsbCBub3QgYmUgY2xlYXJlZCAoIzgzMzUpLgorCXJldHVybiBub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSA/CisJCWZhbHNlIDoKKworCQkvLyBOb2RlcyBhY2NlcHQgZGF0YSB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZDsgcmVqZWN0aW9uIGNhbiBiZSBjb25kaXRpb25hbAorCQkhbm9EYXRhIHx8IG5vRGF0YSAhPT0gdHJ1ZSAmJiBlbGVtLmdldEF0dHJpYnV0ZSggImNsYXNzaWQiICkgPT09IG5vRGF0YTsKK307CisKKworCisKK3ZhciByYnJhY2UgPSAvXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLAorCXJtdWx0aURhc2ggPSAvKFtBLVpdKS9nOworCitmdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkgeworCisJLy8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueQorCS8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZQorCWlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisKKwkJdmFyIG5hbWUgPSAiZGF0YS0iICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsICItJDEiICkudG9Mb3dlckNhc2UoKTsKKworCQlkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTsKKworCQlpZiAoIHR5cGVvZiBkYXRhID09PSAic3RyaW5nIiApIHsKKwkJCXRyeSB7CisJCQkJZGF0YSA9IGRhdGEgPT09ICJ0cnVlIiA/IHRydWUgOgorCQkJCQlkYXRhID09PSAiZmFsc2UiID8gZmFsc2UgOgorCQkJCQlkYXRhID09PSAibnVsbCIgPyBudWxsIDoKKworCQkJCQkvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZworCQkJCQkrZGF0YSArICIiID09PSBkYXRhID8gK2RhdGEgOgorCQkJCQlyYnJhY2UudGVzdCggZGF0YSApID8galF1ZXJ5LnBhcnNlSlNPTiggZGF0YSApIDoKKwkJCQkJZGF0YTsKKwkJCX0gY2F0Y2ggKCBlICkge30KKworCQkJLy8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyCisJCQlqUXVlcnkuZGF0YSggZWxlbSwga2V5LCBkYXRhICk7CisKKwkJfSBlbHNlIHsKKwkJCWRhdGEgPSB1bmRlZmluZWQ7CisJCX0KKwl9CisKKwlyZXR1cm4gZGF0YTsKK30KKworLy8gY2hlY2tzIGEgY2FjaGUgb2JqZWN0IGZvciBlbXB0aW5lc3MKK2Z1bmN0aW9uIGlzRW1wdHlEYXRhT2JqZWN0KCBvYmogKSB7CisJdmFyIG5hbWU7CisJZm9yICggbmFtZSBpbiBvYmogKSB7CisKKwkJLy8gaWYgdGhlIHB1YmxpYyBkYXRhIG9iamVjdCBpcyBlbXB0eSwgdGhlIHByaXZhdGUgaXMgc3RpbGwgZW1wdHkKKwkJaWYgKCBuYW1lID09PSAiZGF0YSIgJiYgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9ialsgbmFtZSBdICkgKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIG5hbWUgIT09ICJ0b0pTT04iICkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIGludGVybmFsRGF0YSggZWxlbSwgbmFtZSwgZGF0YSwgcHZ0IC8qIEludGVybmFsIFVzZSBPbmx5ICovICkgeworCWlmICggIWFjY2VwdERhdGEoIGVsZW0gKSApIHsKKwkJcmV0dXJuOworCX0KKworCXZhciByZXQsIHRoaXNDYWNoZSwKKwkJaW50ZXJuYWxLZXkgPSBqUXVlcnkuZXhwYW5kbywKKworCQkvLyBXZSBoYXZlIHRvIGhhbmRsZSBET00gbm9kZXMgYW5kIEpTIG9iamVjdHMgZGlmZmVyZW50bHkgYmVjYXVzZSBJRTYtNworCQkvLyBjYW4ndCBHQyBvYmplY3QgcmVmZXJlbmNlcyBwcm9wZXJseSBhY3Jvc3MgdGhlIERPTS1KUyBib3VuZGFyeQorCQlpc05vZGUgPSBlbGVtLm5vZGVUeXBlLAorCisJCS8vIE9ubHkgRE9NIG5vZGVzIG5lZWQgdGhlIGdsb2JhbCBqUXVlcnkgY2FjaGU7IEpTIG9iamVjdCBkYXRhIGlzCisJCS8vIGF0dGFjaGVkIGRpcmVjdGx5IHRvIHRoZSBvYmplY3Qgc28gR0MgY2FuIG9jY3VyIGF1dG9tYXRpY2FsbHkKKwkJY2FjaGUgPSBpc05vZGUgPyBqUXVlcnkuY2FjaGUgOiBlbGVtLAorCisJCS8vIE9ubHkgZGVmaW5pbmcgYW4gSUQgZm9yIEpTIG9iamVjdHMgaWYgaXRzIGNhY2hlIGFscmVhZHkgZXhpc3RzIGFsbG93cworCQkvLyB0aGUgY29kZSB0byBzaG9ydGN1dCBvbiB0aGUgc2FtZSBwYXRoIGFzIGEgRE9NIG5vZGUgd2l0aCBubyBjYWNoZQorCQlpZCA9IGlzTm9kZSA/IGVsZW1bIGludGVybmFsS2V5IF0gOiBlbGVtWyBpbnRlcm5hbEtleSBdICYmIGludGVybmFsS2V5OworCisJLy8gQXZvaWQgZG9pbmcgYW55IG1vcmUgd29yayB0aGFuIHdlIG5lZWQgdG8gd2hlbiB0cnlpbmcgdG8gZ2V0IGRhdGEgb24gYW4KKwkvLyBvYmplY3QgdGhhdCBoYXMgbm8gZGF0YSBhdCBhbGwKKwlpZiAoICggIWlkIHx8ICFjYWNoZVsgaWQgXSB8fCAoICFwdnQgJiYgIWNhY2hlWyBpZCBdLmRhdGEgKSApICYmCisJCWRhdGEgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbmFtZSA9PT0gInN0cmluZyIgKSB7CisJCXJldHVybjsKKwl9CisKKwlpZiAoICFpZCApIHsKKworCQkvLyBPbmx5IERPTSBub2RlcyBuZWVkIGEgbmV3IHVuaXF1ZSBJRCBmb3IgZWFjaCBlbGVtZW50IHNpbmNlIHRoZWlyIGRhdGEKKwkJLy8gZW5kcyB1cCBpbiB0aGUgZ2xvYmFsIGNhY2hlCisJCWlmICggaXNOb2RlICkgeworCQkJaWQgPSBlbGVtWyBpbnRlcm5hbEtleSBdID0gZGVsZXRlZElkcy5wb3AoKSB8fCBqUXVlcnkuZ3VpZCsrOworCQl9IGVsc2UgeworCQkJaWQgPSBpbnRlcm5hbEtleTsKKwkJfQorCX0KKworCWlmICggIWNhY2hlWyBpZCBdICkgeworCisJCS8vIEF2b2lkIGV4cG9zaW5nIGpRdWVyeSBtZXRhZGF0YSBvbiBwbGFpbiBKUyBvYmplY3RzIHdoZW4gdGhlIG9iamVjdAorCQkvLyBpcyBzZXJpYWxpemVkIHVzaW5nIEpTT04uc3RyaW5naWZ5CisJCWNhY2hlWyBpZCBdID0gaXNOb2RlID8ge30gOiB7IHRvSlNPTjogalF1ZXJ5Lm5vb3AgfTsKKwl9CisKKwkvLyBBbiBvYmplY3QgY2FuIGJlIHBhc3NlZCB0byBqUXVlcnkuZGF0YSBpbnN0ZWFkIG9mIGEga2V5L3ZhbHVlIHBhaXI7IHRoaXMgZ2V0cworCS8vIHNoYWxsb3cgY29waWVkIG92ZXIgb250byB0aGUgZXhpc3RpbmcgY2FjaGUKKwlpZiAoIHR5cGVvZiBuYW1lID09PSAib2JqZWN0IiB8fCB0eXBlb2YgbmFtZSA9PT0gImZ1bmN0aW9uIiApIHsKKwkJaWYgKCBwdnQgKSB7CisJCQljYWNoZVsgaWQgXSA9IGpRdWVyeS5leHRlbmQoIGNhY2hlWyBpZCBdLCBuYW1lICk7CisJCX0gZWxzZSB7CisJCQljYWNoZVsgaWQgXS5kYXRhID0galF1ZXJ5LmV4dGVuZCggY2FjaGVbIGlkIF0uZGF0YSwgbmFtZSApOworCQl9CisJfQorCisJdGhpc0NhY2hlID0gY2FjaGVbIGlkIF07CisKKwkvLyBqUXVlcnkgZGF0YSgpIGlzIHN0b3JlZCBpbiBhIHNlcGFyYXRlIG9iamVjdCBpbnNpZGUgdGhlIG9iamVjdCdzIGludGVybmFsIGRhdGEKKwkvLyBjYWNoZSBpbiBvcmRlciB0byBhdm9pZCBrZXkgY29sbGlzaW9ucyBiZXR3ZWVuIGludGVybmFsIGRhdGEgYW5kIHVzZXItZGVmaW5lZAorCS8vIGRhdGEuCisJaWYgKCAhcHZ0ICkgeworCQlpZiAoICF0aGlzQ2FjaGUuZGF0YSApIHsKKwkJCXRoaXNDYWNoZS5kYXRhID0ge307CisJCX0KKworCQl0aGlzQ2FjaGUgPSB0aGlzQ2FjaGUuZGF0YTsKKwl9CisKKwlpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHsKKwkJdGhpc0NhY2hlWyBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICkgXSA9IGRhdGE7CisJfQorCisJLy8gQ2hlY2sgZm9yIGJvdGggY29udmVydGVkLXRvLWNhbWVsIGFuZCBub24tY29udmVydGVkIGRhdGEgcHJvcGVydHkgbmFtZXMKKwkvLyBJZiBhIGRhdGEgcHJvcGVydHkgd2FzIHNwZWNpZmllZAorCWlmICggdHlwZW9mIG5hbWUgPT09ICJzdHJpbmciICkgeworCisJCS8vIEZpcnN0IFRyeSB0byBmaW5kIGFzLWlzIHByb3BlcnR5IGRhdGEKKwkJcmV0ID0gdGhpc0NhY2hlWyBuYW1lIF07CisKKwkJLy8gVGVzdCBmb3IgbnVsbHx1bmRlZmluZWQgcHJvcGVydHkgZGF0YQorCQlpZiAoIHJldCA9PSBudWxsICkgeworCisJCQkvLyBUcnkgdG8gZmluZCB0aGUgY2FtZWxDYXNlZCBwcm9wZXJ0eQorCQkJcmV0ID0gdGhpc0NhY2hlWyBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICkgXTsKKwkJfQorCX0gZWxzZSB7CisJCXJldCA9IHRoaXNDYWNoZTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitmdW5jdGlvbiBpbnRlcm5hbFJlbW92ZURhdGEoIGVsZW0sIG5hbWUsIHB2dCApIHsKKwlpZiAoICFhY2NlcHREYXRhKCBlbGVtICkgKSB7CisJCXJldHVybjsKKwl9CisKKwl2YXIgdGhpc0NhY2hlLCBpLAorCQlpc05vZGUgPSBlbGVtLm5vZGVUeXBlLAorCisJCS8vIFNlZSBqUXVlcnkuZGF0YSBmb3IgbW9yZSBpbmZvcm1hdGlvbgorCQljYWNoZSA9IGlzTm9kZSA/IGpRdWVyeS5jYWNoZSA6IGVsZW0sCisJCWlkID0gaXNOb2RlID8gZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXSA6IGpRdWVyeS5leHBhbmRvOworCisJLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBubyBjYWNoZSBlbnRyeSBmb3IgdGhpcyBvYmplY3QsIHRoZXJlIGlzIG5vCisJLy8gcHVycG9zZSBpbiBjb250aW51aW5nCisJaWYgKCAhY2FjaGVbIGlkIF0gKSB7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIG5hbWUgKSB7CisKKwkJdGhpc0NhY2hlID0gcHZ0ID8gY2FjaGVbIGlkIF0gOiBjYWNoZVsgaWQgXS5kYXRhOworCisJCWlmICggdGhpc0NhY2hlICkgeworCisJCQkvLyBTdXBwb3J0IGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgbmFtZXMgZm9yIGRhdGEga2V5cworCQkJaWYgKCAhalF1ZXJ5LmlzQXJyYXkoIG5hbWUgKSApIHsKKworCQkJCS8vIHRyeSB0aGUgc3RyaW5nIGFzIGEga2V5IGJlZm9yZSBhbnkgbWFuaXB1bGF0aW9uCisJCQkJaWYgKCBuYW1lIGluIHRoaXNDYWNoZSApIHsKKwkJCQkJbmFtZSA9IFsgbmFtZSBdOworCQkJCX0gZWxzZSB7CisKKwkJCQkJLy8gc3BsaXQgdGhlIGNhbWVsIGNhc2VkIHZlcnNpb24gYnkgc3BhY2VzIHVubGVzcyBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzCisJCQkJCW5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICk7CisJCQkJCWlmICggbmFtZSBpbiB0aGlzQ2FjaGUgKSB7CisJCQkJCQluYW1lID0gWyBuYW1lIF07CisJCQkJCX0gZWxzZSB7CisJCQkJCQluYW1lID0gbmFtZS5zcGxpdCggIiAiICk7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgeworCisJCQkJLy8gSWYgIm5hbWUiIGlzIGFuIGFycmF5IG9mIGtleXMuLi4KKwkJCQkvLyBXaGVuIGRhdGEgaXMgaW5pdGlhbGx5IGNyZWF0ZWQsIHZpYSAoImtleSIsICJ2YWwiKSBzaWduYXR1cmUsCisJCQkJLy8ga2V5cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBjYW1lbENhc2UuCisJCQkJLy8gU2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwgX2hvd18gYSBrZXkgd2FzIGFkZGVkLCByZW1vdmUKKwkJCQkvLyBib3RoIHBsYWluIGtleSBhbmQgY2FtZWxDYXNlIGtleS4gIzEyNzg2CisJCQkJLy8gVGhpcyB3aWxsIG9ubHkgcGVuYWxpemUgdGhlIGFycmF5IGFyZ3VtZW50IHBhdGguCisJCQkJbmFtZSA9IG5hbWUuY29uY2F0KCBqUXVlcnkubWFwKCBuYW1lLCBqUXVlcnkuY2FtZWxDYXNlICkgKTsKKwkJCX0KKworCQkJaSA9IG5hbWUubGVuZ3RoOworCQkJd2hpbGUgKCBpLS0gKSB7CisJCQkJZGVsZXRlIHRoaXNDYWNoZVsgbmFtZVsgaSBdIF07CisJCQl9CisKKwkJCS8vIElmIHRoZXJlIGlzIG5vIGRhdGEgbGVmdCBpbiB0aGUgY2FjaGUsIHdlIHdhbnQgdG8gY29udGludWUKKwkJCS8vIGFuZCBsZXQgdGhlIGNhY2hlIG9iamVjdCBpdHNlbGYgZ2V0IGRlc3Ryb3llZAorCQkJaWYgKCBwdnQgPyAhaXNFbXB0eURhdGFPYmplY3QoIHRoaXNDYWNoZSApIDogIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCB0aGlzQ2FjaGUgKSApIHsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwl9CisKKwkvLyBTZWUgalF1ZXJ5LmRhdGEgZm9yIG1vcmUgaW5mb3JtYXRpb24KKwlpZiAoICFwdnQgKSB7CisJCWRlbGV0ZSBjYWNoZVsgaWQgXS5kYXRhOworCisJCS8vIERvbid0IGRlc3Ryb3kgdGhlIHBhcmVudCBjYWNoZSB1bmxlc3MgdGhlIGludGVybmFsIGRhdGEgb2JqZWN0CisJCS8vIGhhZCBiZWVuIHRoZSBvbmx5IHRoaW5nIGxlZnQgaW4gaXQKKwkJaWYgKCAhaXNFbXB0eURhdGFPYmplY3QoIGNhY2hlWyBpZCBdICkgKSB7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvLyBEZXN0cm95IHRoZSBjYWNoZQorCWlmICggaXNOb2RlICkgeworCQlqUXVlcnkuY2xlYW5EYXRhKCBbIGVsZW0gXSwgdHJ1ZSApOworCisJLy8gVXNlIGRlbGV0ZSB3aGVuIHN1cHBvcnRlZCBmb3IgZXhwYW5kb3Mgb3IgYGNhY2hlYCBpcyBub3QgYSB3aW5kb3cgcGVyIGlzV2luZG93ICgjMTAwODApCisJLyoganNoaW50IGVxZXFlcTogZmFsc2UgKi8KKwl9IGVsc2UgaWYgKCBzdXBwb3J0LmRlbGV0ZUV4cGFuZG8gfHwgY2FjaGUgIT0gY2FjaGUud2luZG93ICkgeworCQkvKiBqc2hpbnQgZXFlcWVxOiB0cnVlICovCisJCWRlbGV0ZSBjYWNoZVsgaWQgXTsKKworCS8vIFdoZW4gYWxsIGVsc2UgZmFpbHMsIHVuZGVmaW5lZAorCX0gZWxzZSB7CisJCWNhY2hlWyBpZCBdID0gdW5kZWZpbmVkOworCX0KK30KKworalF1ZXJ5LmV4dGVuZCggeworCWNhY2hlOiB7fSwKKworCS8vIFRoZSBmb2xsb3dpbmcgZWxlbWVudHMgKHNwYWNlLXN1ZmZpeGVkIHRvIGF2b2lkIE9iamVjdC5wcm90b3R5cGUgY29sbGlzaW9ucykKKwkvLyB0aHJvdyB1bmNhdGNoYWJsZSBleGNlcHRpb25zIGlmIHlvdSBhdHRlbXB0IHRvIHNldCBleHBhbmRvIHByb3BlcnRpZXMKKwlub0RhdGE6IHsKKwkJImFwcGxldCAiOiB0cnVlLAorCQkiZW1iZWQgIjogdHJ1ZSwKKworCQkvLyAuLi5idXQgRmxhc2ggb2JqZWN0cyAod2hpY2ggaGF2ZSB0aGlzIGNsYXNzaWQpICpjYW4qIGhhbmRsZSBleHBhbmRvcworCQkib2JqZWN0ICI6ICJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiCisJfSwKKworCWhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkgeworCQllbGVtID0gZWxlbS5ub2RlVHlwZSA/IGpRdWVyeS5jYWNoZVsgZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXSBdIDogZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXTsKKwkJcmV0dXJuICEhZWxlbSAmJiAhaXNFbXB0eURhdGFPYmplY3QoIGVsZW0gKTsKKwl9LAorCisJZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7CisJCXJldHVybiBpbnRlcm5hbERhdGEoIGVsZW0sIG5hbWUsIGRhdGEgKTsKKwl9LAorCisJcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CisJCXJldHVybiBpbnRlcm5hbFJlbW92ZURhdGEoIGVsZW0sIG5hbWUgKTsKKwl9LAorCisJLy8gRm9yIGludGVybmFsIHVzZSBvbmx5LgorCV9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHsKKwkJcmV0dXJuIGludGVybmFsRGF0YSggZWxlbSwgbmFtZSwgZGF0YSwgdHJ1ZSApOworCX0sCisKKwlfcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CisJCXJldHVybiBpbnRlcm5hbFJlbW92ZURhdGEoIGVsZW0sIG5hbWUsIHRydWUgKTsKKwl9Cit9ICk7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKwlkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHsKKwkJdmFyIGksIG5hbWUsIGRhdGEsCisJCQllbGVtID0gdGhpc1sgMCBdLAorCQkJYXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlczsKKworCQkvLyBTcGVjaWFsIGV4cGVjdGlvbnMgb2YgLmRhdGEgYmFzaWNhbGx5IHRod2FydCBqUXVlcnkuYWNjZXNzLAorCQkvLyBzbyBpbXBsZW1lbnQgdGhlIHJlbGV2YW50IGJlaGF2aW9yIG91cnNlbHZlcworCisJCS8vIEdldHMgYWxsIHZhbHVlcworCQlpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkgeworCQkJaWYgKCB0aGlzLmxlbmd0aCApIHsKKwkJCQlkYXRhID0galF1ZXJ5LmRhdGEoIGVsZW0gKTsKKworCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhalF1ZXJ5Ll9kYXRhKCBlbGVtLCAicGFyc2VkQXR0cnMiICkgKSB7CisJCQkJCWkgPSBhdHRycy5sZW5ndGg7CisJCQkJCXdoaWxlICggaS0tICkgeworCisJCQkJCQkvLyBTdXBwb3J0OiBJRTExKworCQkJCQkJLy8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICgjMTQ4OTQpCisJCQkJCQlpZiAoIGF0dHJzWyBpIF0gKSB7CisJCQkJCQkJbmFtZSA9IGF0dHJzWyBpIF0ubmFtZTsKKwkJCQkJCQlpZiAoIG5hbWUuaW5kZXhPZiggImRhdGEtIiApID09PSAwICkgeworCQkJCQkJCQluYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZS5zbGljZSggNSApICk7CisJCQkJCQkJCWRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJalF1ZXJ5Ll9kYXRhKCBlbGVtLCAicGFyc2VkQXR0cnMiLCB0cnVlICk7CisJCQkJfQorCQkJfQorCisJCQlyZXR1cm4gZGF0YTsKKwkJfQorCisJCS8vIFNldHMgbXVsdGlwbGUgdmFsdWVzCisJCWlmICggdHlwZW9mIGtleSA9PT0gIm9iamVjdCIgKSB7CisJCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKwkJCQlqUXVlcnkuZGF0YSggdGhpcywga2V5ICk7CisJCQl9ICk7CisJCX0KKworCQlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDEgPworCisJCQkvLyBTZXRzIG9uZSB2YWx1ZQorCQkJdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKwkJCQlqUXVlcnkuZGF0YSggdGhpcywga2V5LCB2YWx1ZSApOworCQkJfSApIDoKKworCQkJLy8gR2V0cyBvbmUgdmFsdWUKKwkJCS8vIFRyeSB0byBmZXRjaCBhbnkgaW50ZXJuYWxseSBzdG9yZWQgZGF0YSBmaXJzdAorCQkJZWxlbSA/IGRhdGFBdHRyKCBlbGVtLCBrZXksIGpRdWVyeS5kYXRhKCBlbGVtLCBrZXkgKSApIDogdW5kZWZpbmVkOworCX0sCisKKwlyZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkgeworCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKwkJCWpRdWVyeS5yZW1vdmVEYXRhKCB0aGlzLCBrZXkgKTsKKwkJfSApOworCX0KK30gKTsKKworCitqUXVlcnkuZXh0ZW5kKCB7CisJcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkgeworCQl2YXIgcXVldWU7CisKKwkJaWYgKCBlbGVtICkgeworCQkJdHlwZSA9ICggdHlwZSB8fCAiZngiICkgKyAicXVldWUiOworCQkJcXVldWUgPSBqUXVlcnkuX2RhdGEoIGVsZW0sIHR5cGUgKTsKKworCQkJLy8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cAorCQkJaWYgKCBkYXRhICkgeworCQkJCWlmICggIXF1ZXVlIHx8IGpRdWVyeS5pc0FycmF5KCBkYXRhICkgKSB7CisJCQkJCXF1ZXVlID0galF1ZXJ5Ll9kYXRhKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgKTsKKwkJCQl9IGVsc2UgeworCQkJCQlxdWV1ZS5wdXNoKCBkYXRhICk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIHF1ZXVlIHx8IFtdOworCQl9CisJfSwKKworCWRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkgeworCQl0eXBlID0gdHlwZSB8fCAiZngiOworCisJCXZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLAorCQkJc3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsCisJCQlmbiA9IHF1ZXVlLnNoaWZ0KCksCisJCQlob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLAorCQkJbmV4dCA9IGZ1bmN0aW9uKCkgeworCQkJCWpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7CisJCQl9OworCisJCS8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWwKKwkJaWYgKCBmbiA9PT0gImlucHJvZ3Jlc3MiICkgeworCQkJZm4gPSBxdWV1ZS5zaGlmdCgpOworCQkJc3RhcnRMZW5ndGgtLTsKKwkJfQorCisJCWlmICggZm4gKSB7CisKKwkJCS8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmcKKwkJCS8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWQKKwkJCWlmICggdHlwZSA9PT0gImZ4IiApIHsKKwkJCQlxdWV1ZS51bnNoaWZ0KCAiaW5wcm9ncmVzcyIgKTsKKwkJCX0KKworCQkJLy8gY2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvbgorCQkJZGVsZXRlIGhvb2tzLnN0b3A7CisJCQlmbi5jYWxsKCBlbGVtLCBuZXh0LCBob29rcyApOworCQl9CisKKwkJaWYgKCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7CisJCQlob29rcy5lbXB0eS5maXJlKCk7CisJCX0KKwl9LAorCisJLy8gbm90IGludGVuZGVkIGZvciBwdWJsaWMgY29uc3VtcHRpb24gLSBnZW5lcmF0ZXMgYSBxdWV1ZUhvb2tzIG9iamVjdCwKKwkvLyBvciByZXR1cm5zIHRoZSBjdXJyZW50IG9uZQorCV9xdWV1ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHsKKwkJdmFyIGtleSA9IHR5cGUgKyAicXVldWVIb29rcyI7CisJCXJldHVybiBqUXVlcnkuX2RhdGEoIGVsZW0sIGtleSApIHx8IGpRdWVyeS5fZGF0YSggZWxlbSwga2V5LCB7CisJCQllbXB0eTogalF1ZXJ5LkNhbGxiYWNrcyggIm9uY2UgbWVtb3J5IiApLmFkZCggZnVuY3Rpb24oKSB7CisJCQkJalF1ZXJ5Ll9yZW1vdmVEYXRhKCBlbGVtLCB0eXBlICsgInF1ZXVlIiApOworCQkJCWpRdWVyeS5fcmVtb3ZlRGF0YSggZWxlbSwga2V5ICk7CisJCQl9ICkKKwkJfSApOworCX0KK30gKTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCXF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKKwkJdmFyIHNldHRlciA9IDI7CisKKwkJaWYgKCB0eXBlb2YgdHlwZSAhPT0gInN0cmluZyIgKSB7CisJCQlkYXRhID0gdHlwZTsKKwkJCXR5cGUgPSAiZngiOworCQkJc2V0dGVyLS07CisJCX0KKworCQlpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7CisJCQlyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTsKKwkJfQorCisJCXJldHVybiBkYXRhID09PSB1bmRlZmluZWQgPworCQkJdGhpcyA6CisJCQl0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworCQkJCXZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApOworCisJCQkJLy8gZW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWUKKwkJCQlqUXVlcnkuX3F1ZXVlSG9va3MoIHRoaXMsIHR5cGUgKTsKKworCQkJCWlmICggdHlwZSA9PT0gImZ4IiAmJiBxdWV1ZVsgMCBdICE9PSAiaW5wcm9ncmVzcyIgKSB7CisJCQkJCWpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7CisJCQkJfQorCQkJfSApOworCX0sCisJZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7CisJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworCQkJalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKKwkJfSApOworCX0sCisJY2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7CisJCXJldHVybiB0aGlzLnF1ZXVlKCB0eXBlIHx8ICJmeCIsIFtdICk7CisJfSwKKworCS8vIEdldCBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGUKKwkvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdCkKKwlwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwgb2JqICkgeworCQl2YXIgdG1wLAorCQkJY291bnQgPSAxLAorCQkJZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSwKKwkJCWVsZW1lbnRzID0gdGhpcywKKwkJCWkgPSB0aGlzLmxlbmd0aCwKKwkJCXJlc29sdmUgPSBmdW5jdGlvbigpIHsKKwkJCQlpZiAoICEoIC0tY291bnQgKSApIHsKKwkJCQkJZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTsKKwkJCQl9CisJCQl9OworCisJCWlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgeworCQkJb2JqID0gdHlwZTsKKwkJCXR5cGUgPSB1bmRlZmluZWQ7CisJCX0KKwkJdHlwZSA9IHR5cGUgfHwgImZ4IjsKKworCQl3aGlsZSAoIGktLSApIHsKKwkJCXRtcCA9IGpRdWVyeS5fZGF0YSggZWxlbWVudHNbIGkgXSwgdHlwZSArICJxdWV1ZUhvb2tzIiApOworCQkJaWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkgeworCQkJCWNvdW50Kys7CisJCQkJdG1wLmVtcHR5LmFkZCggcmVzb2x2ZSApOworCQkJfQorCQl9CisJCXJlc29sdmUoKTsKKwkJcmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApOworCX0KK30gKTsKKworCisoIGZ1bmN0aW9uKCkgeworCXZhciBzaHJpbmtXcmFwQmxvY2tzVmFsOworCisJc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzID0gZnVuY3Rpb24oKSB7CisJCWlmICggc2hyaW5rV3JhcEJsb2Nrc1ZhbCAhPSBudWxsICkgeworCQkJcmV0dXJuIHNocmlua1dyYXBCbG9ja3NWYWw7CisJCX0KKworCQkvLyBXaWxsIGJlIGNoYW5nZWQgbGF0ZXIgaWYgbmVlZGVkLgorCQlzaHJpbmtXcmFwQmxvY2tzVmFsID0gZmFsc2U7CisKKwkJLy8gTWluaWZpZWQ6IHZhciBiLGMsZAorCQl2YXIgZGl2LCBib2R5LCBjb250YWluZXI7CisKKwkJYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiYm9keSIgKVsgMCBdOworCQlpZiAoICFib2R5IHx8ICFib2R5LnN0eWxlICkgeworCisJCQkvLyBUZXN0IGZpcmVkIHRvbyBlYXJseSBvciBpbiBhbiB1bnN1cHBvcnRlZCBlbnZpcm9ubWVudCwgZXhpdC4KKwkJCXJldHVybjsKKwkJfQorCisJCS8vIFNldHVwCisJCWRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICk7CisJCWNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICk7CisJCWNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gInBvc2l0aW9uOmFic29sdXRlO2JvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4IjsKKwkJYm9keS5hcHBlbmRDaGlsZCggY29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApOworCisJCS8vIFN1cHBvcnQ6IElFNgorCQkvLyBDaGVjayBpZiBlbGVtZW50cyB3aXRoIGxheW91dCBzaHJpbmstd3JhcCB0aGVpciBjaGlsZHJlbgorCQlpZiAoIHR5cGVvZiBkaXYuc3R5bGUuem9vbSAhPT0gInVuZGVmaW5lZCIgKSB7CisKKwkJCS8vIFJlc2V0IENTUzogYm94LXNpemluZzsgZGlzcGxheTsgbWFyZ2luOyBib3JkZXIKKwkJCWRpdi5zdHlsZS5jc3NUZXh0ID0KKworCQkJCS8vIFN1cHBvcnQ6IEZpcmVmb3g8MjksIEFuZHJvaWQgMi4zCisJCQkJLy8gVmVuZG9yLXByZWZpeCBib3gtc2l6aW5nCisJCQkJIi13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7IiArCisJCQkJImJveC1zaXppbmc6Y29udGVudC1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXI6MDsiICsKKwkJCQkicGFkZGluZzoxcHg7d2lkdGg6MXB4O3pvb206MSI7CisJCQlkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICkgKS5zdHlsZS53aWR0aCA9ICI1cHgiOworCQkJc2hyaW5rV3JhcEJsb2Nrc1ZhbCA9IGRpdi5vZmZzZXRXaWR0aCAhPT0gMzsKKwkJfQorCisJCWJvZHkucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApOworCisJCXJldHVybiBzaHJpbmtXcmFwQmxvY2tzVmFsOworCX07CisKK30gKSgpOwordmFyIHBudW0gPSAoIC9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8gKS5zb3VyY2U7CisKK3ZhciByY3NzTnVtID0gbmV3IFJlZ0V4cCggIl4oPzooWystXSk9fCkoIiArIHBudW0gKyAiKShbYS16JV0qKSQiLCAiaSIgKTsKKworCit2YXIgY3NzRXhwYW5kID0gWyAiVG9wIiwgIlJpZ2h0IiwgIkJvdHRvbSIsICJMZWZ0IiBdOworCit2YXIgaXNIaWRkZW4gPSBmdW5jdGlvbiggZWxlbSwgZWwgKSB7CisKKwkJLy8gaXNIaWRkZW4gbWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjsKKwkJLy8gaW4gdGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50CisJCWVsZW0gPSBlbCB8fCBlbGVtOworCQlyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkgPT09ICJub25lIiB8fAorCQkJIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7CisJfTsKKworCisKK2Z1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7CisJdmFyIGFkanVzdGVkLAorCQlzY2FsZSA9IDEsCisJCW1heEl0ZXJhdGlvbnMgPSAyMCwKKwkJY3VycmVudFZhbHVlID0gdHdlZW4gPworCQkJZnVuY3Rpb24oKSB7IHJldHVybiB0d2Vlbi5jdXIoKTsgfSA6CisJCQlmdW5jdGlvbigpIHsgcmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AsICIiICk7IH0sCisJCWluaXRpYWwgPSBjdXJyZW50VmFsdWUoKSwKKwkJdW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gIiIgOiAicHgiICksCisKKwkJLy8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXMKKwkJaW5pdGlhbEluVW5pdCA9ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09ICJweCIgJiYgK2luaXRpYWwgKSAmJgorCQkJcmNzc051bS5leGVjKCBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTsKKworCWlmICggaW5pdGlhbEluVW5pdCAmJiBpbml0aWFsSW5Vbml0WyAzIF0gIT09IHVuaXQgKSB7CisKKwkJLy8gVHJ1c3QgdW5pdHMgcmVwb3J0ZWQgYnkgalF1ZXJ5LmNzcworCQl1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07CisKKwkJLy8gTWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgdHdlZW4gcHJvcGVydGllcyBsYXRlciBvbgorCQl2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXTsKKworCQkvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludAorCQlpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTsKKworCQlkbyB7CisKKwkJCS8vIElmIHByZXZpb3VzIGl0ZXJhdGlvbiB6ZXJvZWQgb3V0LCBkb3VibGUgdW50aWwgd2UgZ2V0ICpzb21ldGhpbmcqLgorCQkJLy8gVXNlIHN0cmluZyBmb3IgZG91Ymxpbmcgc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHNlZSBzY2FsZSBhcyB1bmNoYW5nZWQgYmVsb3cKKwkJCXNjYWxlID0gc2NhbGUgfHwgIi41IjsKKworCQkJLy8gQWRqdXN0IGFuZCBhcHBseQorCQkJaW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTsKKwkJCWpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTsKKworCQkvLyBVcGRhdGUgc2NhbGUsIHRvbGVyYXRpbmcgemVybyBvciBOYU4gZnJvbSB0d2Vlbi5jdXIoKQorCQkvLyBCcmVhayB0aGUgbG9vcCBpZiBzY2FsZSBpcyB1bmNoYW5nZWQgb3IgcGVyZmVjdCwgb3IgaWYgd2UndmUganVzdCBoYWQgZW5vdWdoLgorCQl9IHdoaWxlICgKKwkJCXNjYWxlICE9PSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsICkgJiYgc2NhbGUgIT09IDEgJiYgLS1tYXhJdGVyYXRpb25zCisJCSk7CisJfQorCisJaWYgKCB2YWx1ZVBhcnRzICkgeworCQlpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDsKKworCQkvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWQKKwkJYWRqdXN0ZWQgPSB2YWx1ZVBhcnRzWyAxIF0gPworCQkJaW5pdGlhbEluVW5pdCArICggdmFsdWVQYXJ0c1sgMSBdICsgMSApICogdmFsdWVQYXJ0c1sgMiBdIDoKKwkJCSt2YWx1ZVBhcnRzWyAyIF07CisJCWlmICggdHdlZW4gKSB7CisJCQl0d2Vlbi51bml0ID0gdW5pdDsKKwkJCXR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDsKKwkJCXR3ZWVuLmVuZCA9IGFkanVzdGVkOworCQl9CisJfQorCXJldHVybiBhZGp1c3RlZDsKK30KKworCisvLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb24KKy8vIFRoZSB2YWx1ZS9zIGNhbiBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvbgordmFyIGFjY2VzcyA9IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHJhdyApIHsKKwl2YXIgaSA9IDAsCisJCWxlbmd0aCA9IGVsZW1zLmxlbmd0aCwKKwkJYnVsayA9IGtleSA9PSBudWxsOworCisJLy8gU2V0cyBtYW55IHZhbHVlcworCWlmICggalF1ZXJ5LnR5cGUoIGtleSApID09PSAib2JqZWN0IiApIHsKKwkJY2hhaW5hYmxlID0gdHJ1ZTsKKwkJZm9yICggaSBpbiBrZXkgKSB7CisJCQlhY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTsKKwkJfQorCisJLy8gU2V0cyBvbmUgdmFsdWUKKwl9IGVsc2UgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgeworCQljaGFpbmFibGUgPSB0cnVlOworCisJCWlmICggIWpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgeworCQkJcmF3ID0gdHJ1ZTsKKwkJfQorCisJCWlmICggYnVsayApIHsKKworCQkJLy8gQnVsayBvcGVyYXRpb25zIHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0CisJCQlpZiAoIHJhdyApIHsKKwkJCQlmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTsKKwkJCQlmbiA9IG51bGw7CisKKwkJCS8vIC4uLmV4Y2VwdCB3aGVuIGV4ZWN1dGluZyBmdW5jdGlvbiB2YWx1ZXMKKwkJCX0gZWxzZSB7CisJCQkJYnVsayA9IGZuOworCQkJCWZuID0gZnVuY3Rpb24oIGVsZW0sIGtleSwgdmFsdWUgKSB7CisJCQkJCXJldHVybiBidWxrLmNhbGwoIGpRdWVyeSggZWxlbSApLCB2YWx1ZSApOworCQkJCX07CisJCQl9CisJCX0KKworCQlpZiAoIGZuICkgeworCQkJZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisJCQkJZm4oCisJCQkJCWVsZW1zWyBpIF0sCisJCQkJCWtleSwKKwkJCQkJcmF3ID8gdmFsdWUgOiB2YWx1ZS5jYWxsKCBlbGVtc1sgaSBdLCBpLCBmbiggZWxlbXNbIGkgXSwga2V5ICkgKQorCQkJCSk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gY2hhaW5hYmxlID8KKwkJZWxlbXMgOgorCisJCS8vIEdldHMKKwkJYnVsayA/CisJCQlmbi5jYWxsKCBlbGVtcyApIDoKKwkJCWxlbmd0aCA/IGZuKCBlbGVtc1sgMCBdLCBrZXkgKSA6IGVtcHR5R2V0OworfTsKK3ZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTsKKwordmFyIHJ0YWdOYW1lID0gKCAvPChbXHc6LV0rKS8gKTsKKwordmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTsKKwordmFyIHJsZWFkaW5nV2hpdGVzcGFjZSA9ICggL15ccysvICk7CisKK3ZhciBub2RlTmFtZXMgPSAiYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8ZGF0YXxkYXRhbGlzdHwiICsKKwkJImRldGFpbHN8ZGlhbG9nfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxoZWFkZXJ8aGdyb3VwfG1haW58IiArCisJCSJtYXJrfG1ldGVyfG5hdnxvdXRwdXR8cGljdHVyZXxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGVtcGxhdGV8dGltZXx2aWRlbyI7CisKKworCitmdW5jdGlvbiBjcmVhdGVTYWZlRnJhZ21lbnQoIGRvY3VtZW50ICkgeworCXZhciBsaXN0ID0gbm9kZU5hbWVzLnNwbGl0KCAifCIgKSwKKwkJc2FmZUZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisKKwlpZiAoIHNhZmVGcmFnLmNyZWF0ZUVsZW1lbnQgKSB7CisJCXdoaWxlICggbGlzdC5sZW5ndGggKSB7CisJCQlzYWZlRnJhZy5jcmVhdGVFbGVtZW50KAorCQkJCWxpc3QucG9wKCkKKwkJCSk7CisJCX0KKwl9CisJcmV0dXJuIHNhZmVGcmFnOworfQorCisKKyggZnVuY3Rpb24oKSB7CisJdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICksCisJCWZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLAorCQlpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJpbnB1dCIgKTsKKworCS8vIFNldHVwCisJZGl2LmlubmVySFRNTCA9ICIgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iOworCisJLy8gSUUgc3RyaXBzIGxlYWRpbmcgd2hpdGVzcGFjZSB3aGVuIC5pbm5lckhUTUwgaXMgdXNlZAorCXN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UgPSBkaXYuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gMzsKKworCS8vIE1ha2Ugc3VyZSB0aGF0IHRib2R5IGVsZW1lbnRzIGFyZW4ndCBhdXRvbWF0aWNhbGx5IGluc2VydGVkCisJLy8gSUUgd2lsbCBpbnNlcnQgdGhlbSBpbnRvIGVtcHR5IHRhYmxlcworCXN1cHBvcnQudGJvZHkgPSAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAidGJvZHkiICkubGVuZ3RoOworCisJLy8gTWFrZSBzdXJlIHRoYXQgbGluayBlbGVtZW50cyBnZXQgc2VyaWFsaXplZCBjb3JyZWN0bHkgYnkgaW5uZXJIVE1MCisJLy8gVGhpcyByZXF1aXJlcyBhIHdyYXBwZXIgZWxlbWVudCBpbiBJRQorCXN1cHBvcnQuaHRtbFNlcmlhbGl6ZSA9ICEhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAibGluayIgKS5sZW5ndGg7CisKKwkvLyBNYWtlcyBzdXJlIGNsb25pbmcgYW4gaHRtbDUgZWxlbWVudCBkb2VzIG5vdCBjYXVzZSBwcm9ibGVtcworCS8vIFdoZXJlIG91dGVySFRNTCBpcyB1bmRlZmluZWQsIHRoaXMgc3RpbGwgd29ya3MKKwlzdXBwb3J0Lmh0bWw1Q2xvbmUgPQorCQlkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAibmF2IiApLmNsb25lTm9kZSggdHJ1ZSApLm91dGVySFRNTCAhPT0gIjw6bmF2PjwvOm5hdj4iOworCisJLy8gQ2hlY2sgaWYgYSBkaXNjb25uZWN0ZWQgY2hlY2tib3ggd2lsbCByZXRhaW4gaXRzIGNoZWNrZWQKKwkvLyB2YWx1ZSBvZiB0cnVlIGFmdGVyIGFwcGVuZGVkIHRvIHRoZSBET00gKElFNi83KQorCWlucHV0LnR5cGUgPSAiY2hlY2tib3giOworCWlucHV0LmNoZWNrZWQgPSB0cnVlOworCWZyYWdtZW50LmFwcGVuZENoaWxkKCBpbnB1dCApOworCXN1cHBvcnQuYXBwZW5kQ2hlY2tlZCA9IGlucHV0LmNoZWNrZWQ7CisKKwkvLyBNYWtlIHN1cmUgdGV4dGFyZWEgKGFuZCBjaGVja2JveCkgZGVmYXVsdFZhbHVlIGlzIHByb3Blcmx5IGNsb25lZAorCS8vIFN1cHBvcnQ6IElFNi1JRTExKworCWRpdi5pbm5lckhUTUwgPSAiPHRleHRhcmVhPng8L3RleHRhcmVhPiI7CisJc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7CisKKwkvLyAjMTEyMTcgLSBXZWJLaXQgbG9zZXMgY2hlY2sgd2hlbiB0aGUgbmFtZSBpcyBhZnRlciB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUKKwlmcmFnbWVudC5hcHBlbmRDaGlsZCggZGl2ICk7CisKKwkvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpCisJLy8gYG5hbWVgIGFuZCBgdHlwZWAgbXVzdCB1c2UgLnNldEF0dHJpYnV0ZSBmb3IgV1dBICgjMTQ5MDEpCisJaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiaW5wdXQiICk7CisJaW5wdXQuc2V0QXR0cmlidXRlKCAidHlwZSIsICJyYWRpbyIgKTsKKwlpbnB1dC5zZXRBdHRyaWJ1dGUoICJjaGVja2VkIiwgImNoZWNrZWQiICk7CisJaW5wdXQuc2V0QXR0cmlidXRlKCAibmFtZSIsICJ0IiApOworCisJZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApOworCisJLy8gU3VwcG9ydDogU2FmYXJpIDUuMSwgaU9TIDUuMSwgQW5kcm9pZCA0LngsIEFuZHJvaWQgMi4zCisJLy8gb2xkIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50cworCXN1cHBvcnQuY2hlY2tDbG9uZSA9IGRpdi5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDsKKworCS8vIFN1cHBvcnQ6IElFPDkKKwkvLyBDbG9uZWQgZWxlbWVudHMga2VlcCBhdHRhY2hFdmVudCBoYW5kbGVycywgd2UgdXNlIGFkZEV2ZW50TGlzdGVuZXIgb24gSUU5KworCXN1cHBvcnQubm9DbG9uZUV2ZW50ID0gISFkaXYuYWRkRXZlbnRMaXN0ZW5lcjsKKworCS8vIFN1cHBvcnQ6IElFPDkKKwkvLyBTaW5jZSBhdHRyaWJ1dGVzIGFuZCBwcm9wZXJ0aWVzIGFyZSB0aGUgc2FtZSBpbiBJRSwKKwkvLyBjbGVhbkRhdGEgbXVzdCBzZXQgcHJvcGVydGllcyB0byB1bmRlZmluZWQgcmF0aGVyIHRoYW4gdXNlIHJlbW92ZUF0dHJpYnV0ZQorCWRpdlsgalF1ZXJ5LmV4cGFuZG8gXSA9IDE7CisJc3VwcG9ydC5hdHRyaWJ1dGVzID0gIWRpdi5nZXRBdHRyaWJ1dGUoIGpRdWVyeS5leHBhbmRvICk7Cit9ICkoKTsKKworCisvLyBXZSBoYXZlIHRvIGNsb3NlIHRoZXNlIHRhZ3MgdG8gc3VwcG9ydCBYSFRNTCAoIzEzMjAwKQordmFyIHdyYXBNYXAgPSB7CisJb3B0aW9uOiBbIDEsICI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwgIjwvc2VsZWN0PiIgXSwKKwlsZWdlbmQ6IFsgMSwgIjxmaWVsZHNldD4iLCAiPC9maWVsZHNldD4iIF0sCisJYXJlYTogWyAxLCAiPG1hcD4iLCAiPC9tYXA+IiBdLAorCisJLy8gU3VwcG9ydDogSUU4CisJcGFyYW06IFsgMSwgIjxvYmplY3Q+IiwgIjwvb2JqZWN0PiIgXSwKKwl0aGVhZDogWyAxLCAiPHRhYmxlPiIsICI8L3RhYmxlPiIgXSwKKwl0cjogWyAyLCAiPHRhYmxlPjx0Ym9keT4iLCAiPC90Ym9keT48L3RhYmxlPiIgXSwKKwljb2w6IFsgMiwgIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwgIjwvY29sZ3JvdXA+PC90YWJsZT4iIF0sCisJdGQ6IFsgMywgIjx0YWJsZT48dGJvZHk+PHRyPiIsICI8L3RyPjwvdGJvZHk+PC90YWJsZT4iIF0sCisKKwkvLyBJRTYtOCBjYW4ndCBzZXJpYWxpemUgbGluaywgc2NyaXB0LCBzdHlsZSwgb3IgYW55IGh0bWw1IChOb1Njb3BlKSB0YWdzLAorCS8vIHVubGVzcyB3cmFwcGVkIGluIGEgZGl2IHdpdGggbm9uLWJyZWFraW5nIGNoYXJhY3RlcnMgaW4gZnJvbnQgb2YgaXQuCisJX2RlZmF1bHQ6IHN1cHBvcnQuaHRtbFNlcmlhbGl6ZSA/IFsgMCwgIiIsICIiIF0gOiBbIDEsICJYPGRpdj4iLCAiPC9kaXY+IiBdCit9OworCisvLyBTdXBwb3J0OiBJRTgtSUU5Cit3cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb247CisKK3dyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7Cit3cmFwTWFwLnRoID0gd3JhcE1hcC50ZDsKKworCitmdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHsKKwl2YXIgZWxlbXMsIGVsZW0sCisJCWkgPSAwLAorCQlmb3VuZCA9IHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZpbmVkIiA/CisJCQljb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgIioiICkgOgorCQkJdHlwZW9mIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCAhPT0gInVuZGVmaW5lZCIgPworCQkJCWNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8ICIqIiApIDoKKwkJCQl1bmRlZmluZWQ7CisKKwlpZiAoICFmb3VuZCApIHsKKwkJZm9yICggZm91bmQgPSBbXSwgZWxlbXMgPSBjb250ZXh0LmNoaWxkTm9kZXMgfHwgY29udGV4dDsKKwkJCSggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPSBudWxsOworCQkJaSsrCisJCSkgeworCQkJaWYgKCAhdGFnIHx8IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgdGFnICkgKSB7CisJCQkJZm91bmQucHVzaCggZWxlbSApOworCQkJfSBlbHNlIHsKKwkJCQlqUXVlcnkubWVyZ2UoIGZvdW5kLCBnZXRBbGwoIGVsZW0sIHRhZyApICk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIGpRdWVyeS5ub2RlTmFtZSggY29udGV4dCwgdGFnICkgPworCQlqUXVlcnkubWVyZ2UoIFsgY29udGV4dCBdLCBmb3VuZCApIDoKKwkJZm91bmQ7Cit9CisKKworLy8gTWFyayBzY3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkCitmdW5jdGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7CisJdmFyIGVsZW0sCisJCWkgPSAwOworCWZvciAoIDsgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9IG51bGw7IGkrKyApIHsKKwkJalF1ZXJ5Ll9kYXRhKAorCQkJZWxlbSwKKwkJCSJnbG9iYWxFdmFsIiwKKwkJCSFyZWZFbGVtZW50cyB8fCBqUXVlcnkuX2RhdGEoIHJlZkVsZW1lbnRzWyBpIF0sICJnbG9iYWxFdmFsIiApCisJCSk7CisJfQorfQorCisKK3ZhciByaHRtbCA9IC88fCYjP1x3KzsvLAorCXJ0Ym9keSA9IC88dGJvZHkvaTsKKworZnVuY3Rpb24gZml4RGVmYXVsdENoZWNrZWQoIGVsZW0gKSB7CisJaWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbGVtLnR5cGUgKSApIHsKKwkJZWxlbS5kZWZhdWx0Q2hlY2tlZCA9IGVsZW0uY2hlY2tlZDsKKwl9Cit9CisKK2Z1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7CisJdmFyIGosIGVsZW0sIGNvbnRhaW5zLAorCQl0bXAsIHRhZywgdGJvZHksIHdyYXAsCisJCWwgPSBlbGVtcy5sZW5ndGgsCisKKwkJLy8gRW5zdXJlIGEgc2FmZSBmcmFnbWVudAorCQlzYWZlID0gY3JlYXRlU2FmZUZyYWdtZW50KCBjb250ZXh0ICksCisKKwkJbm9kZXMgPSBbXSwKKwkJaSA9IDA7CisKKwlmb3IgKCA7IGkgPCBsOyBpKysgKSB7CisJCWVsZW0gPSBlbGVtc1sgaSBdOworCisJCWlmICggZWxlbSB8fCBlbGVtID09PSAwICkgeworCisJCQkvLyBBZGQgbm9kZXMgZGlyZWN0bHkKKwkJCWlmICggalF1ZXJ5LnR5cGUoIGVsZW0gKSA9PT0gIm9iamVjdCIgKSB7CisJCQkJalF1ZXJ5Lm1lcmdlKCBub2RlcywgZWxlbS5ub2RlVHlwZSA/IFsgZWxlbSBdIDogZWxlbSApOworCisJCQkvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGUKKwkJCX0gZWxzZSBpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7CisJCQkJbm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7CisKKwkJCS8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2RlcworCQkJfSBlbHNlIHsKKwkJCQl0bXAgPSB0bXAgfHwgc2FmZS5hcHBlbmRDaGlsZCggY29udGV4dC5jcmVhdGVFbGVtZW50KCAiZGl2IiApICk7CisKKwkJCQkvLyBEZXNlcmlhbGl6ZSBhIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uCisJCQkJdGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyAiIiwgIiIgXSApWyAxIF0udG9Mb3dlckNhc2UoKTsKKwkJCQl3cmFwID0gd3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1hcC5fZGVmYXVsdDsKKworCQkJCXRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdOworCisJCQkJLy8gRGVzY2VuZCB0aHJvdWdoIHdyYXBwZXJzIHRvIHRoZSByaWdodCBjb250ZW50CisJCQkJaiA9IHdyYXBbIDAgXTsKKwkJCQl3aGlsZSAoIGotLSApIHsKKwkJCQkJdG1wID0gdG1wLmxhc3RDaGlsZDsKKwkJCQl9CisKKwkJCQkvLyBNYW51YWxseSBhZGQgbGVhZGluZyB3aGl0ZXNwYWNlIHJlbW92ZWQgYnkgSUUKKwkJCQlpZiAoICFzdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlICYmIHJsZWFkaW5nV2hpdGVzcGFjZS50ZXN0KCBlbGVtICkgKSB7CisJCQkJCW5vZGVzLnB1c2goIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIHJsZWFkaW5nV2hpdGVzcGFjZS5leGVjKCBlbGVtIClbIDAgXSApICk7CisJCQkJfQorCisJCQkJLy8gUmVtb3ZlIElFJ3MgYXV0b2luc2VydGVkIDx0Ym9keT4gZnJvbSB0YWJsZSBmcmFnbWVudHMKKwkJCQlpZiAoICFzdXBwb3J0LnRib2R5ICkgeworCisJCQkJCS8vIFN0cmluZyB3YXMgYSA8dGFibGU+LCAqbWF5KiBoYXZlIHNwdXJpb3VzIDx0Ym9keT4KKwkJCQkJZWxlbSA9IHRhZyA9PT0gInRhYmxlIiAmJiAhcnRib2R5LnRlc3QoIGVsZW0gKSA/CisJCQkJCQl0bXAuZmlyc3RDaGlsZCA6CisKKwkJCQkJCS8vIFN0cmluZyB3YXMgYSBiYXJlIDx0aGVhZD4gb3IgPHRmb290PgorCQkJCQkJd3JhcFsgMSBdID09PSAiPHRhYmxlPiIgJiYgIXJ0Ym9keS50ZXN0KCBlbGVtICkgPworCQkJCQkJCXRtcCA6CisJCQkJCQkJMDsKKworCQkJCQlqID0gZWxlbSAmJiBlbGVtLmNoaWxkTm9kZXMubGVuZ3RoOworCQkJCQl3aGlsZSAoIGotLSApIHsKKwkJCQkJCWlmICggalF1ZXJ5Lm5vZGVOYW1lKCAoIHRib2R5ID0gZWxlbS5jaGlsZE5vZGVzWyBqIF0gKSwgInRib2R5IiApICYmCisJCQkJCQkJIXRib2R5LmNoaWxkTm9kZXMubGVuZ3RoICkgeworCisJCQkJCQkJZWxlbS5yZW1vdmVDaGlsZCggdGJvZHkgKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKworCQkJCWpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7CisKKwkJCQkvLyBGaXggIzEyMzkyIGZvciBXZWJLaXQgYW5kIElFID4gOQorCQkJCXRtcC50ZXh0Q29udGVudCA9ICIiOworCisJCQkJLy8gRml4ICMxMjM5MiBmb3Igb2xkSUUKKwkJCQl3aGlsZSAoIHRtcC5maXJzdENoaWxkICkgeworCQkJCQl0bXAucmVtb3ZlQ2hpbGQoIHRtcC5maXJzdENoaWxkICk7CisJCQkJfQorCisJCQkJLy8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXIgZm9yIHByb3BlciBjbGVhbnVwCisJCQkJdG1wID0gc2FmZS5sYXN0Q2hpbGQ7CisJCQl9CisJCX0KKwl9CisKKwkvLyBGaXggIzExMzU2OiBDbGVhciBlbGVtZW50cyBmcm9tIGZyYWdtZW50CisJaWYgKCB0bXAgKSB7CisJCXNhZmUucmVtb3ZlQ2hpbGQoIHRtcCApOworCX0KKworCS8vIFJlc2V0IGRlZmF1bHRDaGVja2VkIGZvciBhbnkgcmFkaW9zIGFuZCBjaGVja2JveGVzCisJLy8gYWJvdXQgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIERPTSBpbiBJRSA2LzcgKCM4MDYwKQorCWlmICggIXN1cHBvcnQuYXBwZW5kQ2hlY2tlZCApIHsKKwkJalF1ZXJ5LmdyZXAoIGdldEFsbCggbm9kZXMsICJpbnB1dCIgKSwgZml4RGVmYXVsdENoZWNrZWQgKTsKKwl9CisKKwlpID0gMDsKKwl3aGlsZSAoICggZWxlbSA9IG5vZGVzWyBpKysgXSApICkgeworCisJCS8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpCisJCWlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkgeworCQkJaWYgKCBpZ25vcmVkICkgeworCQkJCWlnbm9yZWQucHVzaCggZWxlbSApOworCQkJfQorCisJCQljb250aW51ZTsKKwkJfQorCisJCWNvbnRhaW5zID0galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTsKKworCQkvLyBBcHBlbmQgdG8gZnJhZ21lbnQKKwkJdG1wID0gZ2V0QWxsKCBzYWZlLmFwcGVuZENoaWxkKCBlbGVtICksICJzY3JpcHQiICk7CisKKwkJLy8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeQorCQlpZiAoIGNvbnRhaW5zICkgeworCQkJc2V0R2xvYmFsRXZhbCggdG1wICk7CisJCX0KKworCQkvLyBDYXB0dXJlIGV4ZWN1dGFibGVzCisJCWlmICggc2NyaXB0cyApIHsKKwkJCWogPSAwOworCQkJd2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7CisJCQkJaWYgKCByc2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgfHwgIiIgKSApIHsKKwkJCQkJc2NyaXB0cy5wdXNoKCBlbGVtICk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJdG1wID0gbnVsbDsKKworCXJldHVybiBzYWZlOworfQorCisKKyggZnVuY3Rpb24oKSB7CisJdmFyIGksIGV2ZW50TmFtZSwKKwkJZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKTsKKworCS8vIFN1cHBvcnQ6IElFPDkgKGxhY2sgc3VibWl0L2NoYW5nZSBidWJibGUpLCBGaXJlZm94IChsYWNrIGZvY3VzKGluIHwgb3V0KSBldmVudHMpCisJZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgY2hhbmdlOiB0cnVlLCBmb2N1c2luOiB0cnVlIH0gKSB7CisJCWV2ZW50TmFtZSA9ICJvbiIgKyBpOworCisJCWlmICggISggc3VwcG9ydFsgaSBdID0gZXZlbnROYW1lIGluIHdpbmRvdyApICkgeworCisJCQkvLyBCZXdhcmUgb2YgQ1NQIHJlc3RyaWN0aW9ucyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vU2VjdXJpdHkvQ1NQKQorCQkJZGl2LnNldEF0dHJpYnV0ZSggZXZlbnROYW1lLCAidCIgKTsKKwkJCXN1cHBvcnRbIGkgXSA9IGRpdi5hdHRyaWJ1dGVzWyBldmVudE5hbWUgXS5leHBhbmRvID09PSBmYWxzZTsKKwkJfQorCX0KKworCS8vIE51bGwgZWxlbWVudHMgdG8gYXZvaWQgbGVha3MgaW4gSUUuCisJZGl2ID0gbnVsbDsKK30gKSgpOworCisKK3ZhciByZm9ybUVsZW1zID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWEpJC9pLAorCXJrZXlFdmVudCA9IC9ea2V5LywKKwlybW91c2VFdmVudCA9IC9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLywKKwlyZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLywKKwlydHlwZW5hbWVzcGFjZSA9IC9eKFteLl0qKSg/OlwuKC4rKXwpLzsKKworZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHsKKwlyZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7CisJcmV0dXJuIGZhbHNlOworfQorCisvLyBTdXBwb3J0OiBJRTkKKy8vIFNlZSAjMTMzOTMgZm9yIG1vcmUgaW5mbworZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKSB7CisJdHJ5IHsKKwkJcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7CisJfSBjYXRjaCAoIGVyciApIHsgfQorfQorCitmdW5jdGlvbiBvbiggZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgb25lICkgeworCXZhciBvcmlnRm4sIHR5cGU7CisKKwkvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnMKKwlpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9iamVjdCIgKSB7CisKKwkJLy8gKCB0eXBlcy1PYmplY3QsIHNlbGVjdG9yLCBkYXRhICkKKwkJaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgeworCisJCQkvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApCisJCQlkYXRhID0gZGF0YSB8fCBzZWxlY3RvcjsKKwkJCXNlbGVjdG9yID0gdW5kZWZpbmVkOworCQl9CisJCWZvciAoIHR5cGUgaW4gdHlwZXMgKSB7CisJCQlvbiggZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApOworCQl9CisJCXJldHVybiBlbGVtOworCX0KKworCWlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7CisKKwkJLy8gKCB0eXBlcywgZm4gKQorCQlmbiA9IHNlbGVjdG9yOworCQlkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7CisJfSBlbHNlIGlmICggZm4gPT0gbnVsbCApIHsKKwkJaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICkgeworCisJCQkvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKQorCQkJZm4gPSBkYXRhOworCQkJZGF0YSA9IHVuZGVmaW5lZDsKKwkJfSBlbHNlIHsKKworCQkJLy8gKCB0eXBlcywgZGF0YSwgZm4gKQorCQkJZm4gPSBkYXRhOworCQkJZGF0YSA9IHNlbGVjdG9yOworCQkJc2VsZWN0b3IgPSB1bmRlZmluZWQ7CisJCX0KKwl9CisJaWYgKCBmbiA9PT0gZmFsc2UgKSB7CisJCWZuID0gcmV0dXJuRmFsc2U7CisJfSBlbHNlIGlmICggIWZuICkgeworCQlyZXR1cm4gZWxlbTsKKwl9CisKKwlpZiAoIG9uZSA9PT0gMSApIHsKKwkJb3JpZ0ZuID0gZm47CisJCWZuID0gZnVuY3Rpb24oIGV2ZW50ICkgeworCisJCQkvLyBDYW4gdXNlIGFuIGVtcHR5IHNldCwgc2luY2UgZXZlbnQgY29udGFpbnMgdGhlIGluZm8KKwkJCWpRdWVyeSgpLm9mZiggZXZlbnQgKTsKKwkJCXJldHVybiBvcmlnRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworCQl9OworCisJCS8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuCisJCWZuLmd1aWQgPSBvcmlnRm4uZ3VpZCB8fCAoIG9yaWdGbi5ndWlkID0galF1ZXJ5Lmd1aWQrKyApOworCX0KKwlyZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlvbigpIHsKKwkJalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApOworCX0gKTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4KKyAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuCisgKi8KK2pRdWVyeS5ldmVudCA9IHsKKworCWdsb2JhbDoge30sCisKKwlhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7CisJCXZhciB0bXAsIGV2ZW50cywgdCwgaGFuZGxlT2JqSW4sCisJCQlzcGVjaWFsLCBldmVudEhhbmRsZSwgaGFuZGxlT2JqLAorCQkJaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLAorCQkJZWxlbURhdGEgPSBqUXVlcnkuX2RhdGEoIGVsZW0gKTsKKworCQkvLyBEb24ndCBhdHRhY2ggZXZlbnRzIHRvIG5vRGF0YSBvciB0ZXh0L2NvbW1lbnQgbm9kZXMgKGJ1dCBhbGxvdyBwbGFpbiBvYmplY3RzKQorCQlpZiAoICFlbGVtRGF0YSApIHsKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlcgorCQlpZiAoIGhhbmRsZXIuaGFuZGxlciApIHsKKwkJCWhhbmRsZU9iakluID0gaGFuZGxlcjsKKwkJCWhhbmRsZXIgPSBoYW5kbGVPYmpJbi5oYW5kbGVyOworCQkJc2VsZWN0b3IgPSBoYW5kbGVPYmpJbi5zZWxlY3RvcjsKKwkJfQorCisJCS8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBoYW5kbGVyIGhhcyBhIHVuaXF1ZSBJRCwgdXNlZCB0byBmaW5kL3JlbW92ZSBpdCBsYXRlcgorCQlpZiAoICFoYW5kbGVyLmd1aWQgKSB7CisJCQloYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrOworCQl9CisKKwkJLy8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZSBhbmQgbWFpbiBoYW5kbGVyLCBpZiB0aGlzIGlzIHRoZSBmaXJzdAorCQlpZiAoICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkgeworCQkJZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0ge307CisJCX0KKwkJaWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSApICkgeworCQkJZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHsKKworCQkJCS8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kCisJCQkJLy8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZAorCQkJCXJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSAidW5kZWZpbmVkIiAmJgorCQkJCQkoICFlIHx8IGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSApID8KKwkJCQkJalF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBldmVudEhhbmRsZS5lbGVtLCBhcmd1bWVudHMgKSA6CisJCQkJCXVuZGVmaW5lZDsKKwkJCX07CisKKwkJCS8vIEFkZCBlbGVtIGFzIGEgcHJvcGVydHkgb2YgdGhlIGhhbmRsZSBmbiB0byBwcmV2ZW50IGEgbWVtb3J5IGxlYWsKKwkJCS8vIHdpdGggSUUgbm9uLW5hdGl2ZSBldmVudHMKKwkJCWV2ZW50SGFuZGxlLmVsZW0gPSBlbGVtOworCQl9CisKKwkJLy8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZQorCQl0eXBlcyA9ICggdHlwZXMgfHwgIiIgKS5tYXRjaCggcm5vdHdoaXRlICkgfHwgWyAiIiBdOworCQl0ID0gdHlwZXMubGVuZ3RoOworCQl3aGlsZSAoIHQtLSApIHsKKwkJCXRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTsKKwkJCXR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdOworCQkJbmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgIiIgKS5zcGxpdCggIi4iICkuc29ydCgpOworCisJCQkvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRhY2hpbmcgbmFtZXNwYWNlLW9ubHkgaGFuZGxlcnMKKwkJCWlmICggIXR5cGUgKSB7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZQorCQkJc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307CisKKwkJCS8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZQorCQkJdHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlOworCisJCQkvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlCisJCQlzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKKworCQkJLy8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnMKKwkJCWhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoIHsKKwkJCQl0eXBlOiB0eXBlLAorCQkJCW9yaWdUeXBlOiBvcmlnVHlwZSwKKwkJCQlkYXRhOiBkYXRhLAorCQkJCWhhbmRsZXI6IGhhbmRsZXIsCisJCQkJZ3VpZDogaGFuZGxlci5ndWlkLAorCQkJCXNlbGVjdG9yOiBzZWxlY3RvciwKKwkJCQluZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApLAorCQkJCW5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCAiLiIgKQorCQkJfSwgaGFuZGxlT2JqSW4gKTsKKworCQkJLy8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3QKKwkJCWlmICggISggaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSApICkgeworCQkJCWhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTsKKwkJCQloYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDsKKworCQkJCS8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIvYXR0YWNoRXZlbnQgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZQorCQkJCWlmICggIXNwZWNpYWwuc2V0dXAgfHwKKwkJCQkJc3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHsKKworCQkJCQkvLyBCaW5kIHRoZSBnbG9iYWwgZXZlbnQgaGFuZGxlciB0byB0aGUgZWxlbWVudAorCQkJCQlpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHsKKwkJCQkJCWVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUsIGZhbHNlICk7CisKKwkJCQkJfSBlbHNlIGlmICggZWxlbS5hdHRhY2hFdmVudCApIHsKKwkJCQkJCWVsZW0uYXR0YWNoRXZlbnQoICJvbiIgKyB0eXBlLCBldmVudEhhbmRsZSApOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoIHNwZWNpYWwuYWRkICkgeworCQkJCXNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApOworCisJCQkJaWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHsKKwkJCQkJaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDsKKwkJCQl9CisJCQl9CisKKwkJCS8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250CisJCQlpZiAoIHNlbGVjdG9yICkgeworCQkJCWhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTsKKwkJCX0gZWxzZSB7CisJCQkJaGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7CisJCQl9CisKKwkJCS8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb24KKwkJCWpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7CisJCX0KKworCQkvLyBOdWxsaWZ5IGVsZW0gdG8gcHJldmVudCBtZW1vcnkgbGVha3MgaW4gSUUKKwkJZWxlbSA9IG51bGw7CisJfSwKKworCS8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudAorCXJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7CisJCXZhciBqLCBoYW5kbGVPYmosIHRtcCwKKwkJCW9yaWdDb3VudCwgdCwgZXZlbnRzLAorCQkJc3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsCisJCQluYW1lc3BhY2VzLCBvcmlnVHlwZSwKKwkJCWVsZW1EYXRhID0galF1ZXJ5Lmhhc0RhdGEoIGVsZW0gKSAmJiBqUXVlcnkuX2RhdGEoIGVsZW0gKTsKKworCQlpZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHsKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIE9uY2UgZm9yIGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWQKKwkJdHlwZXMgPSAoIHR5cGVzIHx8ICIiICkubWF0Y2goIHJub3R3aGl0ZSApIHx8IFsgIiIgXTsKKwkJdCA9IHR5cGVzLmxlbmd0aDsKKwkJd2hpbGUgKCB0LS0gKSB7CisJCQl0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107CisJCQl0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTsKKwkJCW5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8ICIiICkuc3BsaXQoICIuIiApLnNvcnQoKTsKKworCQkJLy8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50CisJCQlpZiAoICF0eXBlICkgeworCQkJCWZvciAoIHR5cGUgaW4gZXZlbnRzICkgeworCQkJCQlqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OworCQkJdHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlOworCQkJaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTsKKwkJCXRtcCA9IHRtcFsgMiBdICYmCisJCQkJbmV3IFJlZ0V4cCggIihefFxcLikiICsgbmFtZXNwYWNlcy5qb2luKCAiXFwuKD86LipcXC58KSIgKSArICIoXFwufCQpIiApOworCisJCQkvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzCisJCQlvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVuZ3RoOworCQkJd2hpbGUgKCBqLS0gKSB7CisJCQkJaGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTsKKworCQkJCWlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiYKKwkJCQkJKCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiYKKwkJCQkJKCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJgorCQkJCQkoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8CisJCQkJCQlzZWxlY3RvciA9PT0gIioqIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHsKKwkJCQkJaGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7CisKKwkJCQkJaWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7CisJCQkJCQloYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07CisJCQkJCX0KKwkJCQkJaWYgKCBzcGVjaWFsLnJlbW92ZSApIHsKKwkJCQkJCXNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQkvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0CisJCQkvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycykKKwkJCWlmICggb3JpZ0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7CisJCQkJaWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fAorCQkJCQlzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHsKKworCQkJCQlqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApOworCQkJCX0KKworCQkJCWRlbGV0ZSBldmVudHNbIHR5cGUgXTsKKwkJCX0KKwkJfQorCisJCS8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkCisJCWlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkgeworCQkJZGVsZXRlIGVsZW1EYXRhLmhhbmRsZTsKKworCQkJLy8gcmVtb3ZlRGF0YSBhbHNvIGNoZWNrcyBmb3IgZW1wdGluZXNzIGFuZCBjbGVhcnMgdGhlIGV4cGFuZG8gaWYgZW1wdHkKKwkJCS8vIHNvIHVzZSBpdCBpbnN0ZWFkIG9mIGRlbGV0ZQorCQkJalF1ZXJ5Ll9yZW1vdmVEYXRhKCBlbGVtLCAiZXZlbnRzIiApOworCQl9CisJfSwKKworCXRyaWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkgeworCQl2YXIgaGFuZGxlLCBvbnR5cGUsIGN1ciwKKwkJCWJ1YmJsZVR5cGUsIHNwZWNpYWwsIHRtcCwgaSwKKwkJCWV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLAorCQkJdHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgInR5cGUiICkgPyBldmVudC50eXBlIDogZXZlbnQsCisJCQluYW1lc3BhY2VzID0gaGFzT3duLmNhbGwoIGV2ZW50LCAibmFtZXNwYWNlIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCAiLiIgKSA6IFtdOworCisJCWN1ciA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50OworCisJCS8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzCisJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkgeworCQkJcmV0dXJuOworCQl9CisKKwkJLy8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93CisJCWlmICggcmZvY3VzTW9ycGgudGVzdCggdHlwZSArIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgKSApIHsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmICggdHlwZS5pbmRleE9mKCAiLiIgKSA+IC0xICkgeworCisJCQkvLyBOYW1lc3BhY2VkIHRyaWdnZXI7IGNyZWF0ZSBhIHJlZ2V4cCB0byBtYXRjaCBldmVudCB0eXBlIGluIGhhbmRsZSgpCisJCQluYW1lc3BhY2VzID0gdHlwZS5zcGxpdCggIi4iICk7CisJCQl0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpOworCQkJbmFtZXNwYWNlcy5zb3J0KCk7CisJCX0KKwkJb250eXBlID0gdHlwZS5pbmRleE9mKCAiOiIgKSA8IDAgJiYgIm9uIiArIHR5cGU7CisKKwkJLy8gQ2FsbGVyIGNhbiBwYXNzIGluIGEgalF1ZXJ5LkV2ZW50IG9iamVjdCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5cGUgc3RyaW5nCisJCWV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gPworCQkJZXZlbnQgOgorCQkJbmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSAib2JqZWN0IiAmJiBldmVudCApOworCisJCS8vIFRyaWdnZXIgYml0bWFzazogJiAxIGZvciBuYXRpdmUgaGFuZGxlcnM7ICYgMiBmb3IgalF1ZXJ5IChhbHdheXMgdHJ1ZSkKKwkJZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7CisJCWV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggIi4iICk7CisJCWV2ZW50LnJuYW1lc3BhY2UgPSBldmVudC5uYW1lc3BhY2UgPworCQkJbmV3IFJlZ0V4cCggIihefFxcLikiICsgbmFtZXNwYWNlcy5qb2luKCAiXFwuKD86LipcXC58KSIgKSArICIoXFwufCQpIiApIDoKKwkJCW51bGw7CisKKwkJLy8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkCisJCWV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDsKKwkJaWYgKCAhZXZlbnQudGFyZ2V0ICkgeworCQkJZXZlbnQudGFyZ2V0ID0gZWxlbTsKKwkJfQorCisJCS8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3QKKwkJZGF0YSA9IGRhdGEgPT0gbnVsbCA/CisJCQlbIGV2ZW50IF0gOgorCQkJalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7CisKKwkJLy8gQWxsb3cgc3BlY2lhbCBldmVudHMgdG8gZHJhdyBvdXRzaWRlIHRoZSBsaW5lcworCQlzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKKwkJaWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSkKKwkJLy8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNCkKKwkJaWYgKCAhb25seUhhbmRsZXJzICYmICFzcGVjaWFsLm5vQnViYmxlICYmICFqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHsKKworCQkJYnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7CisJCQlpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkgeworCQkJCWN1ciA9IGN1ci5wYXJlbnROb2RlOworCQkJfQorCQkJZm9yICggOyBjdXI7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkgeworCQkJCWV2ZW50UGF0aC5wdXNoKCBjdXIgKTsKKwkJCQl0bXAgPSBjdXI7CisJCQl9CisKKwkJCS8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKQorCQkJaWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7CisJCQkJZXZlbnRQYXRoLnB1c2goIHRtcC5kZWZhdWx0VmlldyB8fCB0bXAucGFyZW50V2luZG93IHx8IHdpbmRvdyApOworCQkJfQorCQl9CisKKwkJLy8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aAorCQlpID0gMDsKKwkJd2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHsKKworCQkJZXZlbnQudHlwZSA9IGkgPiAxID8KKwkJCQlidWJibGVUeXBlIDoKKwkJCQlzcGVjaWFsLmJpbmRUeXBlIHx8IHR5cGU7CisKKwkJCS8vIGpRdWVyeSBoYW5kbGVyCisJCQloYW5kbGUgPSAoIGpRdWVyeS5fZGF0YSggY3VyLCAiZXZlbnRzIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSAmJgorCQkJCWpRdWVyeS5fZGF0YSggY3VyLCAiaGFuZGxlIiApOworCisJCQlpZiAoIGhhbmRsZSApIHsKKwkJCQloYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApOworCQkJfQorCisJCQkvLyBOYXRpdmUgaGFuZGxlcgorCQkJaGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07CisJCQlpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3VyICkgKSB7CisJCQkJZXZlbnQucmVzdWx0ID0gaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTsKKwkJCQlpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7CisJCQkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisJCQkJfQorCQkJfQorCQl9CisJCWV2ZW50LnR5cGUgPSB0eXBlOworCisJCS8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3cKKwkJaWYgKCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHsKKworCQkJaWYgKAorCQkJCSggIXNwZWNpYWwuX2RlZmF1bHQgfHwKKwkJCQkgc3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlCisJCQkJKSAmJiBhY2NlcHREYXRhKCBlbGVtICkKKwkJCSkgeworCisJCQkJLy8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIG5hbWUgYXMgdGhlIGV2ZW50LgorCQkJCS8vIENhbid0IHVzZSBhbiAuaXNGdW5jdGlvbigpIGNoZWNrIGhlcmUgYmVjYXVzZSBJRTYvNyBmYWlscyB0aGF0IHRlc3QuCisJCQkJLy8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKQorCQkJCWlmICggb250eXBlICYmIGVsZW1bIHR5cGUgXSAmJiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7CisKKwkJCQkJLy8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZAorCQkJCQl0bXAgPSBlbGVtWyBvbnR5cGUgXTsKKworCQkJCQlpZiAoIHRtcCApIHsKKwkJCQkJCWVsZW1bIG9udHlwZSBdID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlCisJCQkJCWpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlOworCQkJCQl0cnkgeworCQkJCQkJZWxlbVsgdHlwZSBdKCk7CisJCQkJCX0gY2F0Y2ggKCBlICkgeworCisJCQkJCQkvLyBJRTw5IGRpZXMgb24gZm9jdXMvYmx1ciB0byBoaWRkZW4gZWxlbWVudCAoIzE0ODYsIzEyNTE4KQorCQkJCQkJLy8gb25seSByZXByb2R1Y2libGUgb24gd2luWFAgSUU4IG5hdGl2ZSwgbm90IElFOSBpbiBJRTggbW9kZQorCQkJCQl9CisJCQkJCWpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7CisKKwkJCQkJaWYgKCB0bXAgKSB7CisJCQkJCQllbGVtWyBvbnR5cGUgXSA9IHRtcDsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCXJldHVybiBldmVudC5yZXN1bHQ7CisJfSwKKworCWRpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7CisKKwkJLy8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0CisJCWV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKTsKKworCQl2YXIgaSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosCisJCQloYW5kbGVyUXVldWUgPSBbXSwKKwkJCWFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSwKKwkJCWhhbmRsZXJzID0gKCBqUXVlcnkuX2RhdGEoIHRoaXMsICJldmVudHMiICkgfHwge30gKVsgZXZlbnQudHlwZSBdIHx8IFtdLAorCQkJc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge307CisKKwkJLy8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnQKKwkJYXJnc1sgMCBdID0gZXZlbnQ7CisJCWV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhpczsKKworCQkvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkCisJCWlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkgeworCQkJcmV0dXJuOworCQl9CisKKwkJLy8gRGV0ZXJtaW5lIGhhbmRsZXJzCisJCWhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTsKKworCQkvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRvIHN0b3AgcHJvcGFnYXRpb24gYmVuZWF0aCB1cworCQlpID0gMDsKKwkJd2hpbGUgKCAoIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7CisJCQlldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtOworCisJCQlqID0gMDsKKwkJCXdoaWxlICggKCBoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSApICYmCisJCQkJIWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7CisKKwkJCQkvLyBUcmlnZ2VyZWQgZXZlbnQgbXVzdCBlaXRoZXIgMSkgaGF2ZSBubyBuYW1lc3BhY2UsIG9yIDIpIGhhdmUgbmFtZXNwYWNlKHMpCisJCQkJLy8gYSBzdWJzZXQgb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhlIGJvdW5kIGV2ZW50IChib3RoIGNhbiBoYXZlIG5vIG5hbWVzcGFjZSkuCisJCQkJaWYgKCAhZXZlbnQucm5hbWVzcGFjZSB8fCBldmVudC5ybmFtZXNwYWNlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHsKKworCQkJCQlldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7CisJCQkJCWV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTsKKworCQkJCQlyZXQgPSAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9ICkuaGFuZGxlIHx8CisJCQkJCQloYW5kbGVPYmouaGFuZGxlciApLmFwcGx5KCBtYXRjaGVkLmVsZW0sIGFyZ3MgKTsKKworCQkJCQlpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkgeworCQkJCQkJaWYgKCAoIGV2ZW50LnJlc3VsdCA9IHJldCApID09PSBmYWxzZSApIHsKKwkJCQkJCQlldmVudC5wcmV2ZW50RGVmYXVsdCgpOworCQkJCQkJCWV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJLy8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZQorCQlpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkgeworCQkJc3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTsKKwkJfQorCisJCXJldHVybiBldmVudC5yZXN1bHQ7CisJfSwKKworCWhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkgeworCQl2YXIgaSwgbWF0Y2hlcywgc2VsLCBoYW5kbGVPYmosCisJCQloYW5kbGVyUXVldWUgPSBbXSwKKwkJCWRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LAorCQkJY3VyID0gZXZlbnQudGFyZ2V0OworCisJCS8vIFN1cHBvcnQgKGF0IGxlYXN0KTogQ2hyb21lLCBJRTkKKwkJLy8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVycworCQkvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAoIzEzMTgwKQorCQkvLworCQkvLyBTdXBwb3J0OiBGaXJlZm94PD00MisKKwkJLy8gQXZvaWQgbm9uLWxlZnQtY2xpY2sgaW4gRkYgYnV0IGRvbid0IGJsb2NrIElFIHJhZGlvIGV2ZW50cyAoIzM4NjEsIGdoLTIzNDMpCisJCWlmICggZGVsZWdhdGVDb3VudCAmJiBjdXIubm9kZVR5cGUgJiYKKwkJCSggZXZlbnQudHlwZSAhPT0gImNsaWNrIiB8fCBpc05hTiggZXZlbnQuYnV0dG9uICkgfHwgZXZlbnQuYnV0dG9uIDwgMSApICkgeworCisJCQkvKiBqc2hpbnQgZXFlcWVxOiBmYWxzZSAqLworCQkJZm9yICggOyBjdXIgIT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHsKKwkJCQkvKiBqc2hpbnQgZXFlcWVxOiB0cnVlICovCisKKwkJCQkvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKCMxMzIwOCkKKwkJCQkvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NCkKKwkJCQlpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAoIGN1ci5kaXNhYmxlZCAhPT0gdHJ1ZSB8fCBldmVudC50eXBlICE9PSAiY2xpY2siICkgKSB7CisJCQkJCW1hdGNoZXMgPSBbXTsKKwkJCQkJZm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7CisJCQkJCQloYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdOworCisJCQkJCQkvLyBEb24ndCBjb25mbGljdCB3aXRoIE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoIzEzMjAzKQorCQkJCQkJc2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgIiAiOworCisJCQkJCQlpZiAoIG1hdGNoZXNbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7CisJCQkJCQkJbWF0Y2hlc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID8KKwkJCQkJCQkJalF1ZXJ5KCBzZWwsIHRoaXMgKS5pbmRleCggY3VyICkgPiAtMSA6CisJCQkJCQkJCWpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7CisJCQkJCQl9CisJCQkJCQlpZiAoIG1hdGNoZXNbIHNlbCBdICkgeworCQkJCQkJCW1hdGNoZXMucHVzaCggaGFuZGxlT2JqICk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJaWYgKCBtYXRjaGVzLmxlbmd0aCApIHsKKwkJCQkJCWhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZXMgfSApOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJLy8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVycworCQlpZiAoIGRlbGVnYXRlQ291bnQgPCBoYW5kbGVycy5sZW5ndGggKSB7CisJCQloYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiB0aGlzLCBoYW5kbGVyczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9ICk7CisJCX0KKworCQlyZXR1cm4gaGFuZGxlclF1ZXVlOworCX0sCisKKwlmaXg6IGZ1bmN0aW9uKCBldmVudCApIHsKKwkJaWYgKCBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSApIHsKKwkJCXJldHVybiBldmVudDsKKwkJfQorCisJCS8vIENyZWF0ZSBhIHdyaXRhYmxlIGNvcHkgb2YgdGhlIGV2ZW50IG9iamVjdCBhbmQgbm9ybWFsaXplIHNvbWUgcHJvcGVydGllcworCQl2YXIgaSwgcHJvcCwgY29weSwKKwkJCXR5cGUgPSBldmVudC50eXBlLAorCQkJb3JpZ2luYWxFdmVudCA9IGV2ZW50LAorCQkJZml4SG9vayA9IHRoaXMuZml4SG9va3NbIHR5cGUgXTsKKworCQlpZiAoICFmaXhIb29rICkgeworCQkJdGhpcy5maXhIb29rc1sgdHlwZSBdID0gZml4SG9vayA9CisJCQkJcm1vdXNlRXZlbnQudGVzdCggdHlwZSApID8gdGhpcy5tb3VzZUhvb2tzIDoKKwkJCQlya2V5RXZlbnQudGVzdCggdHlwZSApID8gdGhpcy5rZXlIb29rcyA6CisJCQkJe307CisJCX0KKwkJY29weSA9IGZpeEhvb2sucHJvcHMgPyB0aGlzLnByb3BzLmNvbmNhdCggZml4SG9vay5wcm9wcyApIDogdGhpcy5wcm9wczsKKworCQlldmVudCA9IG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTsKKworCQlpID0gY29weS5sZW5ndGg7CisJCXdoaWxlICggaS0tICkgeworCQkJcHJvcCA9IGNvcHlbIGkgXTsKKwkJCWV2ZW50WyBwcm9wIF0gPSBvcmlnaW5hbEV2ZW50WyBwcm9wIF07CisJCX0KKworCQkvLyBTdXBwb3J0OiBJRTw5CisJCS8vIEZpeCB0YXJnZXQgcHJvcGVydHkgKCMxOTI1KQorCQlpZiAoICFldmVudC50YXJnZXQgKSB7CisJCQlldmVudC50YXJnZXQgPSBvcmlnaW5hbEV2ZW50LnNyY0VsZW1lbnQgfHwgZG9jdW1lbnQ7CisJCX0KKworCQkvLyBTdXBwb3J0OiBTYWZhcmkgNi04KworCQkvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgIzEzMTQzKQorCQlpZiAoIGV2ZW50LnRhcmdldC5ub2RlVHlwZSA9PT0gMyApIHsKKwkJCWV2ZW50LnRhcmdldCA9IGV2ZW50LnRhcmdldC5wYXJlbnROb2RlOworCQl9CisKKwkJLy8gU3VwcG9ydDogSUU8OQorCQkvLyBGb3IgbW91c2Uva2V5IGV2ZW50cywgbWV0YUtleT09ZmFsc2UgaWYgaXQncyB1bmRlZmluZWQgKCMzMzY4LCAjMTEzMjgpCisJCWV2ZW50Lm1ldGFLZXkgPSAhIWV2ZW50Lm1ldGFLZXk7CisKKwkJcmV0dXJuIGZpeEhvb2suZmlsdGVyID8gZml4SG9vay5maWx0ZXIoIGV2ZW50LCBvcmlnaW5hbEV2ZW50ICkgOiBldmVudDsKKwl9LAorCisJLy8gSW5jbHVkZXMgc29tZSBldmVudCBwcm9wcyBzaGFyZWQgYnkgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQKKwlwcm9wczogKCAiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZGV0YWlsIGV2ZW50UGhhc2UgIiArCisJCSJtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIiApLnNwbGl0KCAiICIgKSwKKworCWZpeEhvb2tzOiB7fSwKKworCWtleUhvb2tzOiB7CisJCXByb3BzOiAiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoICIgIiApLAorCQlmaWx0ZXI6IGZ1bmN0aW9uKCBldmVudCwgb3JpZ2luYWwgKSB7CisKKwkJCS8vIEFkZCB3aGljaCBmb3Iga2V5IGV2ZW50cworCQkJaWYgKCBldmVudC53aGljaCA9PSBudWxsICkgeworCQkJCWV2ZW50LndoaWNoID0gb3JpZ2luYWwuY2hhckNvZGUgIT0gbnVsbCA/IG9yaWdpbmFsLmNoYXJDb2RlIDogb3JpZ2luYWwua2V5Q29kZTsKKwkJCX0KKworCQkJcmV0dXJuIGV2ZW50OworCQl9CisJfSwKKworCW1vdXNlSG9va3M6IHsKKwkJcHJvcHM6ICggImJ1dHRvbiBidXR0b25zIGNsaWVudFggY2xpZW50WSBmcm9tRWxlbWVudCBvZmZzZXRYIG9mZnNldFkgIiArCisJCQkicGFnZVggcGFnZVkgc2NyZWVuWCBzY3JlZW5ZIHRvRWxlbWVudCIgKS5zcGxpdCggIiAiICksCisJCWZpbHRlcjogZnVuY3Rpb24oIGV2ZW50LCBvcmlnaW5hbCApIHsKKwkJCXZhciBib2R5LCBldmVudERvYywgZG9jLAorCQkJCWJ1dHRvbiA9IG9yaWdpbmFsLmJ1dHRvbiwKKwkJCQlmcm9tRWxlbWVudCA9IG9yaWdpbmFsLmZyb21FbGVtZW50OworCisJCQkvLyBDYWxjdWxhdGUgcGFnZVgvWSBpZiBtaXNzaW5nIGFuZCBjbGllbnRYL1kgYXZhaWxhYmxlCisJCQlpZiAoIGV2ZW50LnBhZ2VYID09IG51bGwgJiYgb3JpZ2luYWwuY2xpZW50WCAhPSBudWxsICkgeworCQkJCWV2ZW50RG9jID0gZXZlbnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7CisJCQkJZG9jID0gZXZlbnREb2MuZG9jdW1lbnRFbGVtZW50OworCQkJCWJvZHkgPSBldmVudERvYy5ib2R5OworCisJCQkJZXZlbnQucGFnZVggPSBvcmlnaW5hbC5jbGllbnRYICsKKwkJCQkJKCBkb2MgJiYgZG9jLnNjcm9sbExlZnQgfHwgYm9keSAmJiBib2R5LnNjcm9sbExlZnQgfHwgMCApIC0KKwkJCQkJKCBkb2MgJiYgZG9jLmNsaWVudExlZnQgfHwgYm9keSAmJiBib2R5LmNsaWVudExlZnQgfHwgMCApOworCQkJCWV2ZW50LnBhZ2VZID0gb3JpZ2luYWwuY2xpZW50WSArCisJCQkJCSggZG9jICYmIGRvYy5zY3JvbGxUb3AgIHx8IGJvZHkgJiYgYm9keS5zY3JvbGxUb3AgIHx8IDAgKSAtCisJCQkJCSggZG9jICYmIGRvYy5jbGllbnRUb3AgIHx8IGJvZHkgJiYgYm9keS5jbGllbnRUb3AgIHx8IDAgKTsKKwkJCX0KKworCQkJLy8gQWRkIHJlbGF0ZWRUYXJnZXQsIGlmIG5lY2Vzc2FyeQorCQkJaWYgKCAhZXZlbnQucmVsYXRlZFRhcmdldCAmJiBmcm9tRWxlbWVudCApIHsKKwkJCQlldmVudC5yZWxhdGVkVGFyZ2V0ID0gZnJvbUVsZW1lbnQgPT09IGV2ZW50LnRhcmdldCA/CisJCQkJCW9yaWdpbmFsLnRvRWxlbWVudCA6CisJCQkJCWZyb21FbGVtZW50OworCQkJfQorCisJCQkvLyBBZGQgd2hpY2ggZm9yIGNsaWNrOiAxID09PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMgPT09IHJpZ2h0CisJCQkvLyBOb3RlOiBidXR0b24gaXMgbm90IG5vcm1hbGl6ZWQsIHNvIGRvbid0IHVzZSBpdAorCQkJaWYgKCAhZXZlbnQud2hpY2ggJiYgYnV0dG9uICE9PSB1bmRlZmluZWQgKSB7CisJCQkJZXZlbnQud2hpY2ggPSAoIGJ1dHRvbiAmIDEgPyAxIDogKCBidXR0b24gJiAyID8gMyA6ICggYnV0dG9uICYgNCA/IDIgOiAwICkgKSApOworCQkJfQorCisJCQlyZXR1cm4gZXZlbnQ7CisJCX0KKwl9LAorCisJc3BlY2lhbDogeworCQlsb2FkOiB7CisKKwkJCS8vIFByZXZlbnQgdHJpZ2dlcmVkIGltYWdlLmxvYWQgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gd2luZG93LmxvYWQKKwkJCW5vQnViYmxlOiB0cnVlCisJCX0sCisJCWZvY3VzOiB7CisKKwkJCS8vIEZpcmUgbmF0aXZlIGV2ZW50IGlmIHBvc3NpYmxlIHNvIGJsdXIvZm9jdXMgc2VxdWVuY2UgaXMgY29ycmVjdAorCQkJdHJpZ2dlcjogZnVuY3Rpb24oKSB7CisJCQkJaWYgKCB0aGlzICE9PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmIHRoaXMuZm9jdXMgKSB7CisJCQkJCXRyeSB7CisJCQkJCQl0aGlzLmZvY3VzKCk7CisJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCX0gY2F0Y2ggKCBlICkgeworCisJCQkJCQkvLyBTdXBwb3J0OiBJRTw5CisJCQkJCQkvLyBJZiB3ZSBlcnJvciBvbiBmb2N1cyB0byBoaWRkZW4gZWxlbWVudCAoIzE0ODYsICMxMjUxOCksCisJCQkJCQkvLyBsZXQgLnRyaWdnZXIoKSBydW4gdGhlIGhhbmRsZXJzCisJCQkJCX0KKwkJCQl9CisJCQl9LAorCQkJZGVsZWdhdGVUeXBlOiAiZm9jdXNpbiIKKwkJfSwKKwkJYmx1cjogeworCQkJdHJpZ2dlcjogZnVuY3Rpb24oKSB7CisJCQkJaWYgKCB0aGlzID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmIHRoaXMuYmx1ciApIHsKKwkJCQkJdGhpcy5ibHVyKCk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQl9LAorCQkJZGVsZWdhdGVUeXBlOiAiZm9jdXNvdXQiCisJCX0sCisJCWNsaWNrOiB7CisKKwkJCS8vIEZvciBjaGVja2JveCwgZmlyZSBuYXRpdmUgZXZlbnQgc28gY2hlY2tlZCBzdGF0ZSB3aWxsIGJlIHJpZ2h0CisJCQl0cmlnZ2VyOiBmdW5jdGlvbigpIHsKKwkJCQlpZiAoIGpRdWVyeS5ub2RlTmFtZSggdGhpcywgImlucHV0IiApICYmIHRoaXMudHlwZSA9PT0gImNoZWNrYm94IiAmJiB0aGlzLmNsaWNrICkgeworCQkJCQl0aGlzLmNsaWNrKCk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQl9LAorCisJCQkvLyBGb3IgY3Jvc3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgZG9uJ3QgZmlyZSBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3MKKwkJCV9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7CisJCQkJcmV0dXJuIGpRdWVyeS5ub2RlTmFtZSggZXZlbnQudGFyZ2V0LCAiYSIgKTsKKwkJCX0KKwkJfSwKKworCQliZWZvcmV1bmxvYWQ6IHsKKwkJCXBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkgeworCisJCQkJLy8gU3VwcG9ydDogRmlyZWZveCAyMCsKKwkJCQkvLyBGaXJlZm94IGRvZXNuJ3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQuCisJCQkJaWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkgeworCQkJCQlldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0OworCQkJCX0KKwkJCX0KKwkJfQorCX0sCisKKwkvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmUKKwlzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50ICkgeworCQl2YXIgZSA9IGpRdWVyeS5leHRlbmQoCisJCQluZXcgalF1ZXJ5LkV2ZW50KCksCisJCQlldmVudCwKKwkJCXsKKwkJCQl0eXBlOiB0eXBlLAorCQkJCWlzU2ltdWxhdGVkOiB0cnVlCisKKwkJCQkvLyBQcmV2aW91c2x5LCBgb3JpZ2luYWxFdmVudDoge31gIHdhcyBzZXQgaGVyZSwgc28gc3RvcFByb3BhZ2F0aW9uIGNhbGwKKwkJCQkvLyB3b3VsZCBub3QgYmUgdHJpZ2dlcmVkIG9uIGRvbm9yIGV2ZW50LCBzaW5jZSBpbiBvdXIgb3duCisJCQkJLy8galF1ZXJ5LmV2ZW50LnN0b3BQcm9wYWdhdGlvbiBmdW5jdGlvbiB3ZSBoYWQgYSBjaGVjayBmb3IgZXhpc3RlbmNlIG9mCisJCQkJLy8gb3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRpb24gbWV0aG9kLCBzbywgY29uc2VxdWVudGx5IGl0IHdvdWxkIGJlIGEgbm9vcC4KKwkJCQkvLworCQkJCS8vIEd1YXJkIGZvciBzaW11bGF0ZWQgZXZlbnRzIHdhcyBtb3ZlZCB0byBqUXVlcnkuZXZlbnQuc3RvcFByb3BhZ2F0aW9uIGZ1bmN0aW9uCisJCQkJLy8gc2luY2UgYG9yaWdpbmFsRXZlbnRgIHNob3VsZCBwb2ludCB0byB0aGUgb3JpZ2luYWwgZXZlbnQgZm9yIHRoZQorCQkJCS8vIGNvbnN0YW5jeSB3aXRoIG90aGVyIGV2ZW50cyBhbmQgZm9yIG1vcmUgZm9jdXNlZCBsb2dpYworCQkJfQorCQkpOworCisJCWpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7CisKKwkJaWYgKCBlLmlzRGVmYXVsdFByZXZlbnRlZCgpICkgeworCQkJZXZlbnQucHJldmVudERlZmF1bHQoKTsKKwkJfQorCX0KK307CisKK2pRdWVyeS5yZW1vdmVFdmVudCA9IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIgPworCWZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7CisKKwkJLy8gVGhpcyAiaWYiIGlzIG5lZWRlZCBmb3IgcGxhaW4gb2JqZWN0cworCQlpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHsKKwkJCWVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7CisJCX0KKwl9IDoKKwlmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkgeworCQl2YXIgbmFtZSA9ICJvbiIgKyB0eXBlOworCisJCWlmICggZWxlbS5kZXRhY2hFdmVudCApIHsKKworCQkJLy8gIzg1NDUsICM3MDU0LCBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcyBmb3IgY3VzdG9tIGV2ZW50cyBpbiBJRTYtOAorCQkJLy8gZGV0YWNoRXZlbnQgbmVlZGVkIHByb3BlcnR5IG9uIGVsZW1lbnQsIGJ5IG5hbWUgb2YgdGhhdCBldmVudCwKKwkJCS8vIHRvIHByb3Blcmx5IGV4cG9zZSBpdCB0byBHQworCQkJaWYgKCB0eXBlb2YgZWxlbVsgbmFtZSBdID09PSAidW5kZWZpbmVkIiApIHsKKwkJCQllbGVtWyBuYW1lIF0gPSBudWxsOworCQkJfQorCisJCQllbGVtLmRldGFjaEV2ZW50KCBuYW1lLCBoYW5kbGUgKTsKKwkJfQorCX07CisKK2pRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkgeworCisJLy8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkCisJaWYgKCAhKCB0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50ICkgKSB7CisJCXJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7CisJfQorCisJLy8gRXZlbnQgb2JqZWN0CisJaWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7CisJCXRoaXMub3JpZ2luYWxFdmVudCA9IHNyYzsKKwkJdGhpcy50eXBlID0gc3JjLnR5cGU7CisKKwkJLy8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWQKKwkJLy8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuCisJCXRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHwKKwkJCQlzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmCisKKwkJCQkvLyBTdXBwb3J0OiBJRSA8IDksIEFuZHJvaWQgPCA0LjAKKwkJCQlzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlID8KKwkJCXJldHVyblRydWUgOgorCQkJcmV0dXJuRmFsc2U7CisKKwkvLyBFdmVudCB0eXBlCisJfSBlbHNlIHsKKwkJdGhpcy50eXBlID0gc3JjOworCX0KKworCS8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0CisJaWYgKCBwcm9wcyApIHsKKwkJalF1ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTsKKwl9CisKKwkvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZQorCXRoaXMudGltZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgalF1ZXJ5Lm5vdygpOworCisJLy8gTWFyayBpdCBhcyBmaXhlZAorCXRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlOworfTsKKworLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKK2pRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7CisJY29uc3RydWN0b3I6IGpRdWVyeS5FdmVudCwKKwlpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLAorCWlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKKwlpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsCisKKwlwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7CisJCXZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OworCisJCXRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTsKKwkJaWYgKCAhZSApIHsKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIElmIHByZXZlbnREZWZhdWx0IGV4aXN0cywgcnVuIGl0IG9uIHRoZSBvcmlnaW5hbCBldmVudAorCQlpZiAoIGUucHJldmVudERlZmF1bHQgKSB7CisJCQllLnByZXZlbnREZWZhdWx0KCk7CisKKwkJLy8gU3VwcG9ydDogSUUKKwkJLy8gT3RoZXJ3aXNlIHNldCB0aGUgcmV0dXJuVmFsdWUgcHJvcGVydHkgb2YgdGhlIG9yaWdpbmFsIGV2ZW50IHRvIGZhbHNlCisJCX0gZWxzZSB7CisJCQllLnJldHVyblZhbHVlID0gZmFsc2U7CisJCX0KKwl9LAorCXN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7CisJCXZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OworCisJCXRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOworCisJCWlmICggIWUgfHwgdGhpcy5pc1NpbXVsYXRlZCApIHsKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIElmIHN0b3BQcm9wYWdhdGlvbiBleGlzdHMsIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwgZXZlbnQKKwkJaWYgKCBlLnN0b3BQcm9wYWdhdGlvbiApIHsKKwkJCWUuc3RvcFByb3BhZ2F0aW9uKCk7CisJCX0KKworCQkvLyBTdXBwb3J0OiBJRQorCQkvLyBTZXQgdGhlIGNhbmNlbEJ1YmJsZSBwcm9wZXJ0eSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgdG8gdHJ1ZQorCQllLmNhbmNlbEJ1YmJsZSA9IHRydWU7CisJfSwKKwlzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkgeworCQl2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsKKworCQl0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTsKKworCQlpZiAoIGUgJiYgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gKSB7CisJCQllLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOworCQl9CisKKwkJdGhpcy5zdG9wUHJvcGFnYXRpb24oKTsKKwl9Cit9OworCisvLyBDcmVhdGUgbW91c2VlbnRlci9sZWF2ZSBldmVudHMgdXNpbmcgbW91c2VvdmVyL291dCBhbmQgZXZlbnQtdGltZSBjaGVja3MKKy8vIHNvIHRoYXQgZXZlbnQgZGVsZWdhdGlvbiB3b3JrcyBpbiBqUXVlcnkuCisvLyBEbyB0aGUgc2FtZSBmb3IgcG9pbnRlcmVudGVyL3BvaW50ZXJsZWF2ZSBhbmQgcG9pbnRlcm92ZXIvcG9pbnRlcm91dAorLy8KKy8vIFN1cHBvcnQ6IFNhZmFyaSA3IG9ubHkKKy8vIFNhZmFyaSBzZW5kcyBtb3VzZWVudGVyIHRvbyBvZnRlbjsgc2VlOgorLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ3MDI1OAorLy8gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYnVnIChpdCBleGlzdGVkIGluIG9sZGVyIENocm9tZSB2ZXJzaW9ucyBhcyB3ZWxsKS4KK2pRdWVyeS5lYWNoKCB7CisJbW91c2VlbnRlcjogIm1vdXNlb3ZlciIsCisJbW91c2VsZWF2ZTogIm1vdXNlb3V0IiwKKwlwb2ludGVyZW50ZXI6ICJwb2ludGVyb3ZlciIsCisJcG9pbnRlcmxlYXZlOiAicG9pbnRlcm91dCIKK30sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7CisJalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHsKKwkJZGVsZWdhdGVUeXBlOiBmaXgsCisJCWJpbmRUeXBlOiBmaXgsCisKKwkJaGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7CisJCQl2YXIgcmV0LAorCQkJCXRhcmdldCA9IHRoaXMsCisJCQkJcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsCisJCQkJaGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqOworCisJCQkvLyBGb3IgbW91c2VlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0LgorCQkJLy8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhlIG1vdXNlIGxlZnQvZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3cKKwkJCWlmICggIXJlbGF0ZWQgfHwgKCByZWxhdGVkICE9PSB0YXJnZXQgJiYgIWpRdWVyeS5jb250YWlucyggdGFyZ2V0LCByZWxhdGVkICkgKSApIHsKKwkJCQlldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlOworCQkJCXJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKwkJCQlldmVudC50eXBlID0gZml4OworCQkJfQorCQkJcmV0dXJuIHJldDsKKwkJfQorCX07Cit9ICk7CisKKy8vIElFIHN1Ym1pdCBkZWxlZ2F0aW9uCitpZiAoICFzdXBwb3J0LnN1Ym1pdCApIHsKKworCWpRdWVyeS5ldmVudC5zcGVjaWFsLnN1Ym1pdCA9IHsKKwkJc2V0dXA6IGZ1bmN0aW9uKCkgeworCisJCQkvLyBPbmx5IG5lZWQgdGhpcyBmb3IgZGVsZWdhdGVkIGZvcm0gc3VibWl0IGV2ZW50cworCQkJaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJmb3JtIiApICkgeworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKworCQkJLy8gTGF6eS1hZGQgYSBzdWJtaXQgaGFuZGxlciB3aGVuIGEgZGVzY2VuZGFudCBmb3JtIG1heSBwb3RlbnRpYWxseSBiZSBzdWJtaXR0ZWQKKwkJCWpRdWVyeS5ldmVudC5hZGQoIHRoaXMsICJjbGljay5fc3VibWl0IGtleXByZXNzLl9zdWJtaXQiLCBmdW5jdGlvbiggZSApIHsKKworCQkJCS8vIE5vZGUgbmFtZSBjaGVjayBhdm9pZHMgYSBWTUwtcmVsYXRlZCBjcmFzaCBpbiBJRSAoIzk4MDcpCisJCQkJdmFyIGVsZW0gPSBlLnRhcmdldCwKKwkJCQkJZm9ybSA9IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApIHx8IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1dHRvbiIgKSA/CisKKwkJCQkJCS8vIFN1cHBvcnQ6IElFIDw9OAorCQkJCQkJLy8gV2UgdXNlIGpRdWVyeS5wcm9wIGluc3RlYWQgb2YgZWxlbS5mb3JtCisJCQkJCQkvLyB0byBhbGxvdyBmaXhpbmcgdGhlIElFOCBkZWxlZ2F0ZWQgc3VibWl0IGlzc3VlIChnaC0yMzMyKQorCQkJCQkJLy8gYnkgM3JkIHBhcnR5IHBvbHlmaWxscy93b3JrYXJvdW5kcy4KKwkJCQkJCWpRdWVyeS5wcm9wKCBlbGVtLCAiZm9ybSIgKSA6CisJCQkJCQl1bmRlZmluZWQ7CisKKwkJCQlpZiAoIGZvcm0gJiYgIWpRdWVyeS5fZGF0YSggZm9ybSwgInN1Ym1pdCIgKSApIHsKKwkJCQkJalF1ZXJ5LmV2ZW50LmFkZCggZm9ybSwgInN1Ym1pdC5fc3VibWl0IiwgZnVuY3Rpb24oIGV2ZW50ICkgeworCQkJCQkJZXZlbnQuX3N1Ym1pdEJ1YmJsZSA9IHRydWU7CisJCQkJCX0gKTsKKwkJCQkJalF1ZXJ5Ll9kYXRhKCBmb3JtLCAic3VibWl0IiwgdHJ1ZSApOworCQkJCX0KKwkJCX0gKTsKKworCQkJLy8gcmV0dXJuIHVuZGVmaW5lZCBzaW5jZSB3ZSBkb24ndCBuZWVkIGFuIGV2ZW50IGxpc3RlbmVyCisJCX0sCisKKwkJcG9zdERpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7CisKKwkJCS8vIElmIGZvcm0gd2FzIHN1Ym1pdHRlZCBieSB0aGUgdXNlciwgYnViYmxlIHRoZSBldmVudCB1cCB0aGUgdHJlZQorCQkJaWYgKCBldmVudC5fc3VibWl0QnViYmxlICkgeworCQkJCWRlbGV0ZSBldmVudC5fc3VibWl0QnViYmxlOworCQkJCWlmICggdGhpcy5wYXJlbnROb2RlICYmICFldmVudC5pc1RyaWdnZXIgKSB7CisJCQkJCWpRdWVyeS5ldmVudC5zaW11bGF0ZSggInN1Ym1pdCIsIHRoaXMucGFyZW50Tm9kZSwgZXZlbnQgKTsKKwkJCQl9CisJCQl9CisJCX0sCisKKwkJdGVhcmRvd246IGZ1bmN0aW9uKCkgeworCisJCQkvLyBPbmx5IG5lZWQgdGhpcyBmb3IgZGVsZWdhdGVkIGZvcm0gc3VibWl0IGV2ZW50cworCQkJaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJmb3JtIiApICkgeworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKworCQkJLy8gUmVtb3ZlIGRlbGVnYXRlZCBoYW5kbGVyczsgY2xlYW5EYXRhIGV2ZW50dWFsbHkgcmVhcHMgc3VibWl0IGhhbmRsZXJzIGF0dGFjaGVkIGFib3ZlCisJCQlqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCAiLl9zdWJtaXQiICk7CisJCX0KKwl9OworfQorCisvLyBJRSBjaGFuZ2UgZGVsZWdhdGlvbiBhbmQgY2hlY2tib3gvcmFkaW8gZml4CitpZiAoICFzdXBwb3J0LmNoYW5nZSApIHsKKworCWpRdWVyeS5ldmVudC5zcGVjaWFsLmNoYW5nZSA9IHsKKworCQlzZXR1cDogZnVuY3Rpb24oKSB7CisKKwkJCWlmICggcmZvcm1FbGVtcy50ZXN0KCB0aGlzLm5vZGVOYW1lICkgKSB7CisKKwkJCQkvLyBJRSBkb2Vzbid0IGZpcmUgY2hhbmdlIG9uIGEgY2hlY2svcmFkaW8gdW50aWwgYmx1cjsgdHJpZ2dlciBpdCBvbiBjbGljaworCQkJCS8vIGFmdGVyIGEgcHJvcGVydHljaGFuZ2UuIEVhdCB0aGUgYmx1ci1jaGFuZ2UgaW4gc3BlY2lhbC5jaGFuZ2UuaGFuZGxlLgorCQkJCS8vIFRoaXMgc3RpbGwgZmlyZXMgb25jaGFuZ2UgYSBzZWNvbmQgdGltZSBmb3IgY2hlY2svcmFkaW8gYWZ0ZXIgYmx1ci4KKwkJCQlpZiAoIHRoaXMudHlwZSA9PT0gImNoZWNrYm94IiB8fCB0aGlzLnR5cGUgPT09ICJyYWRpbyIgKSB7CisJCQkJCWpRdWVyeS5ldmVudC5hZGQoIHRoaXMsICJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIiwgZnVuY3Rpb24oIGV2ZW50ICkgeworCQkJCQkJaWYgKCBldmVudC5vcmlnaW5hbEV2ZW50LnByb3BlcnR5TmFtZSA9PT0gImNoZWNrZWQiICkgeworCQkJCQkJCXRoaXMuX2p1c3RDaGFuZ2VkID0gdHJ1ZTsKKwkJCQkJCX0KKwkJCQkJfSApOworCQkJCQlqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCAiY2xpY2suX2NoYW5nZSIsIGZ1bmN0aW9uKCBldmVudCApIHsKKwkJCQkJCWlmICggdGhpcy5fanVzdENoYW5nZWQgJiYgIWV2ZW50LmlzVHJpZ2dlciApIHsKKwkJCQkJCQl0aGlzLl9qdXN0Q2hhbmdlZCA9IGZhbHNlOworCQkJCQkJfQorCisJCQkJCQkvLyBBbGxvdyB0cmlnZ2VyZWQsIHNpbXVsYXRlZCBjaGFuZ2UgZXZlbnRzICgjMTE1MDApCisJCQkJCQlqUXVlcnkuZXZlbnQuc2ltdWxhdGUoICJjaGFuZ2UiLCB0aGlzLCBldmVudCApOworCQkJCQl9ICk7CisJCQkJfQorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKworCQkJLy8gRGVsZWdhdGVkIGV2ZW50OyBsYXp5LWFkZCBhIGNoYW5nZSBoYW5kbGVyIG9uIGRlc2NlbmRhbnQgaW5wdXRzCisJCQlqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCAiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsIGZ1bmN0aW9uKCBlICkgeworCQkJCXZhciBlbGVtID0gZS50YXJnZXQ7CisKKwkJCQlpZiAoIHJmb3JtRWxlbXMudGVzdCggZWxlbS5ub2RlTmFtZSApICYmICFqUXVlcnkuX2RhdGEoIGVsZW0sICJjaGFuZ2UiICkgKSB7CisJCQkJCWpRdWVyeS5ldmVudC5hZGQoIGVsZW0sICJjaGFuZ2UuX2NoYW5nZSIsIGZ1bmN0aW9uKCBldmVudCApIHsKKwkJCQkJCWlmICggdGhpcy5wYXJlbnROb2RlICYmICFldmVudC5pc1NpbXVsYXRlZCAmJiAhZXZlbnQuaXNUcmlnZ2VyICkgeworCQkJCQkJCWpRdWVyeS5ldmVudC5zaW11bGF0ZSggImNoYW5nZSIsIHRoaXMucGFyZW50Tm9kZSwgZXZlbnQgKTsKKwkJCQkJCX0KKwkJCQkJfSApOworCQkJCQlqUXVlcnkuX2RhdGEoIGVsZW0sICJjaGFuZ2UiLCB0cnVlICk7CisJCQkJfQorCQkJfSApOworCQl9LAorCisJCWhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkgeworCQkJdmFyIGVsZW0gPSBldmVudC50YXJnZXQ7CisKKwkJCS8vIFN3YWxsb3cgbmF0aXZlIGNoYW5nZSBldmVudHMgZnJvbSBjaGVja2JveC9yYWRpbywgd2UgYWxyZWFkeSB0cmlnZ2VyZWQgdGhlbSBhYm92ZQorCQkJaWYgKCB0aGlzICE9PSBlbGVtIHx8IGV2ZW50LmlzU2ltdWxhdGVkIHx8IGV2ZW50LmlzVHJpZ2dlciB8fAorCQkJCSggZWxlbS50eXBlICE9PSAicmFkaW8iICYmIGVsZW0udHlwZSAhPT0gImNoZWNrYm94IiApICkgeworCisJCQkJcmV0dXJuIGV2ZW50LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKwkJCX0KKwkJfSwKKworCQl0ZWFyZG93bjogZnVuY3Rpb24oKSB7CisJCQlqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCAiLl9jaGFuZ2UiICk7CisKKwkJCXJldHVybiAhcmZvcm1FbGVtcy50ZXN0KCB0aGlzLm5vZGVOYW1lICk7CisJCX0KKwl9OworfQorCisvLyBTdXBwb3J0OiBGaXJlZm94CisvLyBGaXJlZm94IGRvZXNuJ3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkgZXZlbnRzCisvLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4NworLy8KKy8vIFN1cHBvcnQ6IENocm9tZSwgU2FmYXJpCisvLyBmb2N1cyhpbiB8IG91dCkgZXZlbnRzIGZpcmUgYWZ0ZXIgZm9jdXMgJiBibHVyIGV2ZW50cywKKy8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlcgorLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ5ODU3CitpZiAoICFzdXBwb3J0LmZvY3VzaW4gKSB7CisJalF1ZXJ5LmVhY2goIHsgZm9jdXM6ICJmb2N1c2luIiwgYmx1cjogImZvY3Vzb3V0IiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkgeworCisJCS8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0CisJCXZhciBoYW5kbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkgeworCQkJalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSApOworCQl9OworCisJCWpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHsKKwkJCXNldHVwOiBmdW5jdGlvbigpIHsKKwkJCQl2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsCisJCQkJCWF0dGFjaGVzID0galF1ZXJ5Ll9kYXRhKCBkb2MsIGZpeCApOworCisJCQkJaWYgKCAhYXR0YWNoZXMgKSB7CisJCQkJCWRvYy5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7CisJCQkJfQorCQkJCWpRdWVyeS5fZGF0YSggZG9jLCBmaXgsICggYXR0YWNoZXMgfHwgMCApICsgMSApOworCQkJfSwKKwkJCXRlYXJkb3duOiBmdW5jdGlvbigpIHsKKwkJCQl2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsCisJCQkJCWF0dGFjaGVzID0galF1ZXJ5Ll9kYXRhKCBkb2MsIGZpeCApIC0gMTsKKworCQkJCWlmICggIWF0dGFjaGVzICkgeworCQkJCQlkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApOworCQkJCQlqUXVlcnkuX3JlbW92ZURhdGEoIGRvYywgZml4ICk7CisJCQkJfSBlbHNlIHsKKwkJCQkJalF1ZXJ5Ll9kYXRhKCBkb2MsIGZpeCwgYXR0YWNoZXMgKTsKKwkJCQl9CisJCQl9CisJCX07CisJfSApOworfQorCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisKKwlvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7CisJCXJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApOworCX0sCisJb25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHsKKwkJcmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAxICk7CisJfSwKKwlvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkgeworCQl2YXIgaGFuZGxlT2JqLCB0eXBlOworCQlpZiAoIHR5cGVzICYmIHR5cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaiApIHsKKworCQkJLy8gKCBldmVudCApICBkaXNwYXRjaGVkIGpRdWVyeS5FdmVudAorCQkJaGFuZGxlT2JqID0gdHlwZXMuaGFuZGxlT2JqOworCQkJalF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZigKKwkJCQloYW5kbGVPYmoubmFtZXNwYWNlID8KKwkJCQkJaGFuZGxlT2JqLm9yaWdUeXBlICsgIi4iICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6CisJCQkJCWhhbmRsZU9iai5vcmlnVHlwZSwKKwkJCQloYW5kbGVPYmouc2VsZWN0b3IsCisJCQkJaGFuZGxlT2JqLmhhbmRsZXIKKwkJCSk7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQlpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9iamVjdCIgKSB7CisKKwkJCS8vICggdHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApCisJCQlmb3IgKCB0eXBlIGluIHR5cGVzICkgeworCQkJCXRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApOworCQkJfQorCQkJcmV0dXJuIHRoaXM7CisJCX0KKwkJaWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSAiZnVuY3Rpb24iICkgeworCisJCQkvLyAoIHR5cGVzIFssIGZuXSApCisJCQlmbiA9IHNlbGVjdG9yOworCQkJc2VsZWN0b3IgPSB1bmRlZmluZWQ7CisJCX0KKwkJaWYgKCBmbiA9PT0gZmFsc2UgKSB7CisJCQlmbiA9IHJldHVybkZhbHNlOworCQl9CisJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworCQkJalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApOworCQl9ICk7CisJfSwKKworCXRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgeworCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKwkJCWpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7CisJCX0gKTsKKwl9LAorCXRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKKwkJdmFyIGVsZW0gPSB0aGlzWyAwIF07CisJCWlmICggZWxlbSApIHsKKwkJCXJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwgdHJ1ZSApOworCQl9CisJfQorfSApOworCisKK3ZhciByaW5saW5lalF1ZXJ5ID0gLyBqUXVlcnlcZCs9Iig/Om51bGx8XGQrKSIvZywKKwlybm9zaGltY2FjaGUgPSBuZXcgUmVnRXhwKCAiPCg/OiIgKyBub2RlTmFtZXMgKyAiKVtcXHMvPl0iLCAiaSIgKSwKKwlyeGh0bWxUYWcgPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6LV0rKVtePl0qKVwvPi9naSwKKworCS8vIFN1cHBvcnQ6IElFIDEwLTExLCBFZGdlIDEwMjQwKworCS8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuCisJLy8gU2VlIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvMTczNjUxMi8KKwlybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSwKKworCS8vIGNoZWNrZWQ9ImNoZWNrZWQiIG9yIGNoZWNrZWQKKwlyY2hlY2tlZCA9IC9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLAorCXJzY3JpcHRUeXBlTWFza2VkID0gL150cnVlXC8oLiopLywKKwlyY2xlYW5TY3JpcHQgPSAvXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5ccyokL2csCisJc2FmZUZyYWdtZW50ID0gY3JlYXRlU2FmZUZyYWdtZW50KCBkb2N1bWVudCApLAorCWZyYWdtZW50RGl2ID0gc2FmZUZyYWdtZW50LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApICk7CisKKy8vIFN1cHBvcnQ6IElFPDgKKy8vIE1hbmlwdWxhdGluZyB0YWJsZXMgcmVxdWlyZXMgYSB0Ym9keQorZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkgeworCXJldHVybiBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJ0YWJsZSIgKSAmJgorCQlqUXVlcnkubm9kZU5hbWUoIGNvbnRlbnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGlsZCwgInRyIiApID8KKworCQllbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAidGJvZHkiIClbIDAgXSB8fAorCQkJZWxlbS5hcHBlbmRDaGlsZCggZWxlbS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJ0Ym9keSIgKSApIDoKKwkJZWxlbTsKK30KKworLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvbgorZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHsKKwllbGVtLnR5cGUgPSAoIGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sICJ0eXBlIiApICE9PSBudWxsICkgKyAiLyIgKyBlbGVtLnR5cGU7CisJcmV0dXJuIGVsZW07Cit9CitmdW5jdGlvbiByZXN0b3JlU2NyaXB0KCBlbGVtICkgeworCXZhciBtYXRjaCA9IHJzY3JpcHRUeXBlTWFza2VkLmV4ZWMoIGVsZW0udHlwZSApOworCWlmICggbWF0Y2ggKSB7CisJCWVsZW0udHlwZSA9IG1hdGNoWyAxIF07CisJfSBlbHNlIHsKKwkJZWxlbS5yZW1vdmVBdHRyaWJ1dGUoICJ0eXBlIiApOworCX0KKwlyZXR1cm4gZWxlbTsKK30KKworZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHsKKwlpZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEgfHwgIWpRdWVyeS5oYXNEYXRhKCBzcmMgKSApIHsKKwkJcmV0dXJuOworCX0KKworCXZhciB0eXBlLCBpLCBsLAorCQlvbGREYXRhID0galF1ZXJ5Ll9kYXRhKCBzcmMgKSwKKwkJY3VyRGF0YSA9IGpRdWVyeS5fZGF0YSggZGVzdCwgb2xkRGF0YSApLAorCQlldmVudHMgPSBvbGREYXRhLmV2ZW50czsKKworCWlmICggZXZlbnRzICkgeworCQlkZWxldGUgY3VyRGF0YS5oYW5kbGU7CisJCWN1ckRhdGEuZXZlbnRzID0ge307CisKKwkJZm9yICggdHlwZSBpbiBldmVudHMgKSB7CisJCQlmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKwkJCQlqUXVlcnkuZXZlbnQuYWRkKCBkZXN0LCB0eXBlLCBldmVudHNbIHR5cGUgXVsgaSBdICk7CisJCQl9CisJCX0KKwl9CisKKwkvLyBtYWtlIHRoZSBjbG9uZWQgcHVibGljIGRhdGEgb2JqZWN0IGEgY29weSBmcm9tIHRoZSBvcmlnaW5hbAorCWlmICggY3VyRGF0YS5kYXRhICkgeworCQljdXJEYXRhLmRhdGEgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyRGF0YS5kYXRhICk7CisJfQorfQorCitmdW5jdGlvbiBmaXhDbG9uZU5vZGVJc3N1ZXMoIHNyYywgZGVzdCApIHsKKwl2YXIgbm9kZU5hbWUsIGUsIGRhdGE7CisKKwkvLyBXZSBkbyBub3QgbmVlZCB0byBkbyBhbnl0aGluZyBmb3Igbm9uLUVsZW1lbnRzCisJaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkgeworCQlyZXR1cm47CisJfQorCisJbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisKKwkvLyBJRTYtOCBjb3BpZXMgZXZlbnRzIGJvdW5kIHZpYSBhdHRhY2hFdmVudCB3aGVuIHVzaW5nIGNsb25lTm9kZS4KKwlpZiAoICFzdXBwb3J0Lm5vQ2xvbmVFdmVudCAmJiBkZXN0WyBqUXVlcnkuZXhwYW5kbyBdICkgeworCQlkYXRhID0galF1ZXJ5Ll9kYXRhKCBkZXN0ICk7CisKKwkJZm9yICggZSBpbiBkYXRhLmV2ZW50cyApIHsKKwkJCWpRdWVyeS5yZW1vdmVFdmVudCggZGVzdCwgZSwgZGF0YS5oYW5kbGUgKTsKKwkJfQorCisJCS8vIEV2ZW50IGRhdGEgZ2V0cyByZWZlcmVuY2VkIGluc3RlYWQgb2YgY29waWVkIGlmIHRoZSBleHBhbmRvIGdldHMgY29waWVkIHRvbworCQlkZXN0LnJlbW92ZUF0dHJpYnV0ZSggalF1ZXJ5LmV4cGFuZG8gKTsKKwl9CisKKwkvLyBJRSBibGFua3MgY29udGVudHMgd2hlbiBjbG9uaW5nIHNjcmlwdHMsIGFuZCB0cmllcyB0byBldmFsdWF0ZSBuZXdseS1zZXQgdGV4dAorCWlmICggbm9kZU5hbWUgPT09ICJzY3JpcHQiICYmIGRlc3QudGV4dCAhPT0gc3JjLnRleHQgKSB7CisJCWRpc2FibGVTY3JpcHQoIGRlc3QgKS50ZXh0ID0gc3JjLnRleHQ7CisJCXJlc3RvcmVTY3JpcHQoIGRlc3QgKTsKKworCS8vIElFNi0xMCBpbXByb3Blcmx5IGNsb25lcyBjaGlsZHJlbiBvZiBvYmplY3QgZWxlbWVudHMgdXNpbmcgY2xhc3NpZC4KKwkvLyBJRTEwIHRocm93cyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciBpZiBwYXJlbnQgaXMgbnVsbCwgIzEyMTMyLgorCX0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAib2JqZWN0IiApIHsKKwkJaWYgKCBkZXN0LnBhcmVudE5vZGUgKSB7CisJCQlkZXN0Lm91dGVySFRNTCA9IHNyYy5vdXRlckhUTUw7CisJCX0KKworCQkvLyBUaGlzIHBhdGggYXBwZWFycyB1bmF2b2lkYWJsZSBmb3IgSUU5LiBXaGVuIGNsb25pbmcgYW4gb2JqZWN0CisJCS8vIGVsZW1lbnQgaW4gSUU5LCB0aGUgb3V0ZXJIVE1MIHN0cmF0ZWd5IGFib3ZlIGlzIG5vdCBzdWZmaWNpZW50LgorCQkvLyBJZiB0aGUgc3JjIGhhcyBpbm5lckhUTUwgYW5kIHRoZSBkZXN0aW5hdGlvbiBkb2VzIG5vdCwKKwkJLy8gY29weSB0aGUgc3JjLmlubmVySFRNTCBpbnRvIHRoZSBkZXN0LmlubmVySFRNTC4gIzEwMzI0CisJCWlmICggc3VwcG9ydC5odG1sNUNsb25lICYmICggc3JjLmlubmVySFRNTCAmJiAhalF1ZXJ5LnRyaW0oIGRlc3QuaW5uZXJIVE1MICkgKSApIHsKKwkJCWRlc3QuaW5uZXJIVE1MID0gc3JjLmlubmVySFRNTDsKKwkJfQorCisJfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJpbnB1dCIgJiYgcmNoZWNrYWJsZVR5cGUudGVzdCggc3JjLnR5cGUgKSApIHsKKworCQkvLyBJRTYtOCBmYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94CisJCS8vIG9yIHJhZGlvIGJ1dHRvbi4gV29yc2UsIElFNi03IGZhaWwgdG8gZ2l2ZSB0aGUgY2xvbmVkIGVsZW1lbnQKKwkJLy8gYSBjaGVja2VkIGFwcGVhcmFuY2UgaWYgdGhlIGRlZmF1bHRDaGVja2VkIHZhbHVlIGlzbid0IGFsc28gc2V0CisKKwkJZGVzdC5kZWZhdWx0Q2hlY2tlZCA9IGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkOworCisJCS8vIElFNi03IGdldCBjb25mdXNlZCBhbmQgZW5kIHVwIHNldHRpbmcgdGhlIHZhbHVlIG9mIGEgY2xvbmVkCisJCS8vIGNoZWNrYm94L3JhZGlvIGJ1dHRvbiB0byBhbiBlbXB0eSBzdHJpbmcgaW5zdGVhZCBvZiAib24iCisJCWlmICggZGVzdC52YWx1ZSAhPT0gc3JjLnZhbHVlICkgeworCQkJZGVzdC52YWx1ZSA9IHNyYy52YWx1ZTsKKwkJfQorCisJLy8gSUU2LTggZmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQKKwkvLyBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9ucworCX0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAib3B0aW9uIiApIHsKKwkJZGVzdC5kZWZhdWx0U2VsZWN0ZWQgPSBkZXN0LnNlbGVjdGVkID0gc3JjLmRlZmF1bHRTZWxlY3RlZDsKKworCS8vIElFNi04IGZhaWxzIHRvIHNldCB0aGUgZGVmYXVsdFZhbHVlIHRvIHRoZSBjb3JyZWN0IHZhbHVlIHdoZW4KKwkvLyBjbG9uaW5nIG90aGVyIHR5cGVzIG9mIGlucHV0IGZpZWxkcworCX0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAiaW5wdXQiIHx8IG5vZGVOYW1lID09PSAidGV4dGFyZWEiICkgeworCQlkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7CisJfQorfQorCitmdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7CisKKwkvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzCisJYXJncyA9IGNvbmNhdC5hcHBseSggW10sIGFyZ3MgKTsKKworCXZhciBmaXJzdCwgbm9kZSwgaGFzU2NyaXB0cywKKwkJc2NyaXB0cywgZG9jLCBmcmFnbWVudCwKKwkJaSA9IDAsCisJCWwgPSBjb2xsZWN0aW9uLmxlbmd0aCwKKwkJaU5vQ2xvbmUgPSBsIC0gMSwKKwkJdmFsdWUgPSBhcmdzWyAwIF0sCisJCWlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKTsKKworCS8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdAorCWlmICggaXNGdW5jdGlvbiB8fAorCQkJKCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmCisJCQkJIXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7CisJCXJldHVybiBjb2xsZWN0aW9uLmVhY2goIGZ1bmN0aW9uKCBpbmRleCApIHsKKwkJCXZhciBzZWxmID0gY29sbGVjdGlvbi5lcSggaW5kZXggKTsKKwkJCWlmICggaXNGdW5jdGlvbiApIHsKKwkJCQlhcmdzWyAwIF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwgc2VsZi5odG1sKCkgKTsKKwkJCX0KKwkJCWRvbU1hbmlwKCBzZWxmLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApOworCQl9ICk7CisJfQorCisJaWYgKCBsICkgeworCQlmcmFnbWVudCA9IGJ1aWxkRnJhZ21lbnQoIGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5vd25lckRvY3VtZW50LCBmYWxzZSwgY29sbGVjdGlvbiwgaWdub3JlZCApOworCQlmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7CisKKwkJaWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHsKKwkJCWZyYWdtZW50ID0gZmlyc3Q7CisJCX0KKworCQkvLyBSZXF1aXJlIGVpdGhlciBuZXcgY29udGVudCBvciBhbiBpbnRlcmVzdCBpbiBpZ25vcmVkIGVsZW1lbnRzIHRvIGludm9rZSB0aGUgY2FsbGJhY2sKKwkJaWYgKCBmaXJzdCB8fCBpZ25vcmVkICkgeworCQkJc2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsICJzY3JpcHQiICksIGRpc2FibGVTY3JpcHQgKTsKKwkJCWhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0aDsKKworCQkJLy8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbQorCQkJLy8gaW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwCisJCQkvLyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4gc2l0dWF0aW9ucyAoIzgwNzApLgorCQkJZm9yICggOyBpIDwgbDsgaSsrICkgeworCQkJCW5vZGUgPSBmcmFnbWVudDsKKworCQkJCWlmICggaSAhPT0gaU5vQ2xvbmUgKSB7CisJCQkJCW5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTsKKworCQkJCQkvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uCisJCQkJCWlmICggaGFzU2NyaXB0cyApIHsKKworCQkJCQkJLy8gU3VwcG9ydDogQW5kcm9pZDw0LjEsIFBoYW50b21KUzwyCisJCQkJCQkvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0CisJCQkJCQlqUXVlcnkubWVyZ2UoIHNjcmlwdHMsIGdldEFsbCggbm9kZSwgInNjcmlwdCIgKSApOworCQkJCQl9CisJCQkJfQorCisJCQkJY2FsbGJhY2suY2FsbCggY29sbGVjdGlvblsgaSBdLCBub2RlLCBpICk7CisJCQl9CisKKwkJCWlmICggaGFzU2NyaXB0cyApIHsKKwkJCQlkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50OworCisJCQkJLy8gUmVlbmFibGUgc2NyaXB0cworCQkJCWpRdWVyeS5tYXAoIHNjcmlwdHMsIHJlc3RvcmVTY3JpcHQgKTsKKworCQkJCS8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb24KKwkJCQlmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHsKKwkJCQkJbm9kZSA9IHNjcmlwdHNbIGkgXTsKKwkJCQkJaWYgKCByc2NyaXB0VHlwZS50ZXN0KCBub2RlLnR5cGUgfHwgIiIgKSAmJgorCQkJCQkJIWpRdWVyeS5fZGF0YSggbm9kZSwgImdsb2JhbEV2YWwiICkgJiYKKwkJCQkJCWpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7CisKKwkJCQkJCWlmICggbm9kZS5zcmMgKSB7CisKKwkJCQkJCQkvLyBPcHRpb25hbCBBSkFYIGRlcGVuZGVuY3ksIGJ1dCB3b24ndCBydW4gc2NyaXB0cyBpZiBub3QgcHJlc2VudAorCQkJCQkJCWlmICggalF1ZXJ5Ll9ldmFsVXJsICkgeworCQkJCQkJCQlqUXVlcnkuX2V2YWxVcmwoIG5vZGUuc3JjICk7CisJCQkJCQkJfQorCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlqUXVlcnkuZ2xvYmFsRXZhbCgKKwkJCQkJCQkJKCBub2RlLnRleHQgfHwgbm9kZS50ZXh0Q29udGVudCB8fCBub2RlLmlubmVySFRNTCB8fCAiIiApCisJCQkJCQkJCQkucmVwbGFjZSggcmNsZWFuU2NyaXB0LCAiIiApCisJCQkJCQkJKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJLy8gRml4ICMxMTgwOTogQXZvaWQgbGVha2luZyBtZW1vcnkKKwkJCWZyYWdtZW50ID0gZmlyc3QgPSBudWxsOworCQl9CisJfQorCisJcmV0dXJuIGNvbGxlY3Rpb247Cit9CisKK2Z1bmN0aW9uIHJlbW92ZSggZWxlbSwgc2VsZWN0b3IsIGtlZXBEYXRhICkgeworCXZhciBub2RlLAorCQllbGVtcyA9IHNlbGVjdG9yID8galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIGVsZW0gKSA6IGVsZW0sCisJCWkgPSAwOworCisJZm9yICggOyAoIG5vZGUgPSBlbGVtc1sgaSBdICkgIT0gbnVsbDsgaSsrICkgeworCisJCWlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7CisJCQlqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUgKSApOworCQl9CisKKwkJaWYgKCBub2RlLnBhcmVudE5vZGUgKSB7CisJCQlpZiAoIGtlZXBEYXRhICYmIGpRdWVyeS5jb250YWlucyggbm9kZS5vd25lckRvY3VtZW50LCBub2RlICkgKSB7CisJCQkJc2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCAic2NyaXB0IiApICk7CisJCQl9CisJCQlub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTsKKwkJfQorCX0KKworCXJldHVybiBlbGVtOworfQorCitqUXVlcnkuZXh0ZW5kKCB7CisJaHRtbFByZWZpbHRlcjogZnVuY3Rpb24oIGh0bWwgKSB7CisJCXJldHVybiBodG1sLnJlcGxhY2UoIHJ4aHRtbFRhZywgIjwkMT48LyQyPiIgKTsKKwl9LAorCisJY2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKKwkJdmFyIGRlc3RFbGVtZW50cywgbm9kZSwgY2xvbmUsIGksIHNyY0VsZW1lbnRzLAorCQkJaW5QYWdlID0galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTsKKworCQlpZiAoIHN1cHBvcnQuaHRtbDVDbG9uZSB8fCBqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSB8fAorCQkJIXJub3NoaW1jYWNoZS50ZXN0KCAiPCIgKyBlbGVtLm5vZGVOYW1lICsgIj4iICkgKSB7CisKKwkJCWNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRydWUgKTsKKworCQkvLyBJRTw9OCBkb2VzIG5vdCBwcm9wZXJseSBjbG9uZSBkZXRhY2hlZCwgdW5rbm93biBlbGVtZW50IG5vZGVzCisJCX0gZWxzZSB7CisJCQlmcmFnbWVudERpdi5pbm5lckhUTUwgPSBlbGVtLm91dGVySFRNTDsKKwkJCWZyYWdtZW50RGl2LnJlbW92ZUNoaWxkKCBjbG9uZSA9IGZyYWdtZW50RGl2LmZpcnN0Q2hpbGQgKTsKKwkJfQorCisJCWlmICggKCAhc3VwcG9ydC5ub0Nsb25lRXZlbnQgfHwgIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgKSAmJgorCQkJCSggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHsKKworCQkJLy8gV2UgZXNjaGV3IFNpenpsZSBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOiBodHRwOi8vanNwZXJmLmNvbS9nZXRhbGwtdnMtc2l6emxlLzIKKwkJCWRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTsKKwkJCXNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7CisKKwkJCS8vIEZpeCBhbGwgSUUgY2xvbmluZyBpc3N1ZXMKKwkJCWZvciAoIGkgPSAwOyAoIG5vZGUgPSBzcmNFbGVtZW50c1sgaSBdICkgIT0gbnVsbDsgKytpICkgeworCisJCQkJLy8gRW5zdXJlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIG5vZGUgaXMgbm90IG51bGw7IEZpeGVzICM5NTg3CisJCQkJaWYgKCBkZXN0RWxlbWVudHNbIGkgXSApIHsKKwkJCQkJZml4Q2xvbmVOb2RlSXNzdWVzKCBub2RlLCBkZXN0RWxlbWVudHNbIGkgXSApOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmUKKwkJaWYgKCBkYXRhQW5kRXZlbnRzICkgeworCQkJaWYgKCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKKwkJCQlzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApOworCQkJCWRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7CisKKwkJCQlmb3IgKCBpID0gMDsgKCBub2RlID0gc3JjRWxlbWVudHNbIGkgXSApICE9IG51bGw7IGkrKyApIHsKKwkJCQkJY2xvbmVDb3B5RXZlbnQoIG5vZGUsIGRlc3RFbGVtZW50c1sgaSBdICk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQljbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTsKKwkJCX0KKwkJfQorCisJCS8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3RvcnkKKwkJZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwgInNjcmlwdCIgKTsKKwkJaWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHsKKwkJCXNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sICJzY3JpcHQiICkgKTsKKwkJfQorCisJCWRlc3RFbGVtZW50cyA9IHNyY0VsZW1lbnRzID0gbm9kZSA9IG51bGw7CisKKwkJLy8gUmV0dXJuIHRoZSBjbG9uZWQgc2V0CisJCXJldHVybiBjbG9uZTsKKwl9LAorCisJY2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMsIC8qIGludGVybmFsICovIGZvcmNlQWNjZXB0RGF0YSApIHsKKwkJdmFyIGVsZW0sIHR5cGUsIGlkLCBkYXRhLAorCQkJaSA9IDAsCisJCQlpbnRlcm5hbEtleSA9IGpRdWVyeS5leHBhbmRvLAorCQkJY2FjaGUgPSBqUXVlcnkuY2FjaGUsCisJCQlhdHRyaWJ1dGVzID0gc3VwcG9ydC5hdHRyaWJ1dGVzLAorCQkJc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsOworCisJCWZvciAoIDsgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9IG51bGw7IGkrKyApIHsKKwkJCWlmICggZm9yY2VBY2NlcHREYXRhIHx8IGFjY2VwdERhdGEoIGVsZW0gKSApIHsKKworCQkJCWlkID0gZWxlbVsgaW50ZXJuYWxLZXkgXTsKKwkJCQlkYXRhID0gaWQgJiYgY2FjaGVbIGlkIF07CisKKwkJCQlpZiAoIGRhdGEgKSB7CisJCQkJCWlmICggZGF0YS5ldmVudHMgKSB7CisJCQkJCQlmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkgeworCQkJCQkJCWlmICggc3BlY2lhbFsgdHlwZSBdICkgeworCQkJCQkJCQlqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7CisKKwkJCQkJCQkvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkCisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCS8vIFJlbW92ZSBjYWNoZSBvbmx5IGlmIGl0IHdhcyBub3QgYWxyZWFkeSByZW1vdmVkIGJ5IGpRdWVyeS5ldmVudC5yZW1vdmUKKwkJCQkJaWYgKCBjYWNoZVsgaWQgXSApIHsKKworCQkJCQkJZGVsZXRlIGNhY2hlWyBpZCBdOworCisJCQkJCQkvLyBTdXBwb3J0OiBJRTw5CisJCQkJCQkvLyBJRSBkb2VzIG5vdCBhbGxvdyB1cyB0byBkZWxldGUgZXhwYW5kbyBwcm9wZXJ0aWVzIGZyb20gbm9kZXMKKwkJCQkJCS8vIElFIGNyZWF0ZXMgZXhwYW5kbyBhdHRyaWJ1dGVzIGFsb25nIHdpdGggdGhlIHByb3BlcnR5CisJCQkJCQkvLyBJRSBkb2VzIG5vdCBoYXZlIGEgcmVtb3ZlQXR0cmlidXRlIGZ1bmN0aW9uIG9uIERvY3VtZW50IG5vZGVzCisJCQkJCQlpZiAoICFhdHRyaWJ1dGVzICYmIHR5cGVvZiBlbGVtLnJlbW92ZUF0dHJpYnV0ZSAhPT0gInVuZGVmaW5lZCIgKSB7CisJCQkJCQkJZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIGludGVybmFsS2V5ICk7CisKKwkJCQkJCS8vIFdlYmtpdCAmIEJsaW5rIHBlcmZvcm1hbmNlIHN1ZmZlcnMgd2hlbiBkZWxldGluZyBwcm9wZXJ0aWVzCisJCQkJCQkvLyBmcm9tIERPTSBub2Rlcywgc28gc2V0IHRvIHVuZGVmaW5lZCBpbnN0ZWFkCisJCQkJCQkvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCWVsZW1bIGludGVybmFsS2V5IF0gPSB1bmRlZmluZWQ7CisJCQkJCQl9CisKKwkJCQkJCWRlbGV0ZWRJZHMucHVzaCggaWQgKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KK30gKTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCisJLy8gS2VlcCBkb21NYW5pcCBleHBvc2VkIHVudGlsIDMuMCAoZ2gtMjIyNSkKKwlkb21NYW5pcDogZG9tTWFuaXAsCisKKwlkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKwkJcmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IsIHRydWUgKTsKKwl9LAorCisJcmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisJCXJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yICk7CisJfSwKKworCXRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKwkJcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgeworCQkJcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPworCQkJCWpRdWVyeS50ZXh0KCB0aGlzICkgOgorCQkJCXRoaXMuZW1wdHkoKS5hcHBlbmQoCisJCQkJCSggdGhpc1sgMCBdICYmIHRoaXNbIDAgXS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkuY3JlYXRlVGV4dE5vZGUoIHZhbHVlICkKKwkJCQkpOworCQl9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApOworCX0sCisKKwlhcHBlbmQ6IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHsKKwkJCQl2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7CisJCQkJdGFyZ2V0LmFwcGVuZENoaWxkKCBlbGVtICk7CisJCQl9CisJCX0gKTsKKwl9LAorCisJcHJlcGVuZDogZnVuY3Rpb24oKSB7CisJCXJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKwkJCWlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkgeworCQkJCXZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTsKKwkJCQl0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZCApOworCQkJfQorCQl9ICk7CisJfSwKKworCWJlZm9yZTogZnVuY3Rpb24oKSB7CisJCXJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKwkJCWlmICggdGhpcy5wYXJlbnROb2RlICkgeworCQkJCXRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTsKKwkJCX0KKwkJfSApOworCX0sCisKKwlhZnRlcjogZnVuY3Rpb24oKSB7CisJCXJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKwkJCWlmICggdGhpcy5wYXJlbnROb2RlICkgeworCQkJCXRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTsKKwkJCX0KKwkJfSApOworCX0sCisKKwllbXB0eTogZnVuY3Rpb24oKSB7CisJCXZhciBlbGVtLAorCQkJaSA9IDA7CisKKwkJZm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7CisKKwkJCS8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcworCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworCQkJCWpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApOworCQkJfQorCisJCQkvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2RlcworCQkJd2hpbGUgKCBlbGVtLmZpcnN0Q2hpbGQgKSB7CisJCQkJZWxlbS5yZW1vdmVDaGlsZCggZWxlbS5maXJzdENoaWxkICk7CisJCQl9CisKKwkJCS8vIElmIHRoaXMgaXMgYSBzZWxlY3QsIGVuc3VyZSB0aGF0IGl0IGRpc3BsYXlzIGVtcHR5ICgjMTIzMzYpCisJCQkvLyBTdXBwb3J0OiBJRTw5CisJCQlpZiAoIGVsZW0ub3B0aW9ucyAmJiBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJzZWxlY3QiICkgKSB7CisJCQkJZWxlbS5vcHRpb25zLmxlbmd0aCA9IDA7CisJCQl9CisJCX0KKworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJY2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKKwkJZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50czsKKwkJZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzOworCisJCXJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7CisJCQlyZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApOworCQl9ICk7CisJfSwKKworCWh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKwkJcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgeworCQkJdmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sCisJCQkJaSA9IDAsCisJCQkJbCA9IHRoaXMubGVuZ3RoOworCisJCQlpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgKSB7CisJCQkJcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDEgPworCQkJCQllbGVtLmlubmVySFRNTC5yZXBsYWNlKCByaW5saW5lalF1ZXJ5LCAiIiApIDoKKwkJCQkJdW5kZWZpbmVkOworCQkJfQorCisJCQkvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MCisJCQlpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmCisJCQkJKCBzdXBwb3J0Lmh0bWxTZXJpYWxpemUgfHwgIXJub3NoaW1jYWNoZS50ZXN0KCB2YWx1ZSApICApICYmCisJCQkJKCBzdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlIHx8ICFybGVhZGluZ1doaXRlc3BhY2UudGVzdCggdmFsdWUgKSApICYmCisJCQkJIXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBbICIiLCAiIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpIF0gKSB7CisKKwkJCQl2YWx1ZSA9IGpRdWVyeS5odG1sUHJlZmlsdGVyKCB2YWx1ZSApOworCisJCQkJdHJ5IHsKKwkJCQkJZm9yICggOyBpIDwgbDsgaSsrICkgeworCisJCQkJCQkvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3MKKwkJCQkJCWVsZW0gPSB0aGlzWyBpIF0gfHwge307CisJCQkJCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisJCQkJCQkJalF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7CisJCQkJCQkJZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWVsZW0gPSAwOworCisJCQkJLy8gSWYgdXNpbmcgaW5uZXJIVE1MIHRocm93cyBhbiBleGNlcHRpb24sIHVzZSB0aGUgZmFsbGJhY2sgbWV0aG9kCisJCQkJfSBjYXRjaCAoIGUgKSB7fQorCQkJfQorCisJCQlpZiAoIGVsZW0gKSB7CisJCQkJdGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTsKKwkJCX0KKwkJfSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTsKKwl9LAorCisJcmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkgeworCQl2YXIgaWdub3JlZCA9IFtdOworCisJCS8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNoIG5vbi1pZ25vcmVkIGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudAorCQlyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7CisJCQl2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlOworCisJCQlpZiAoIGpRdWVyeS5pbkFycmF5KCB0aGlzLCBpZ25vcmVkICkgPCAwICkgeworCQkJCWpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggdGhpcyApICk7CisJCQkJaWYgKCBwYXJlbnQgKSB7CisJCQkJCXBhcmVudC5yZXBsYWNlQ2hpbGQoIGVsZW0sIHRoaXMgKTsKKwkJCQl9CisJCQl9CisKKwkJLy8gRm9yY2UgY2FsbGJhY2sgaW52b2NhdGlvbgorCQl9LCBpZ25vcmVkICk7CisJfQorfSApOworCitqUXVlcnkuZWFjaCggeworCWFwcGVuZFRvOiAiYXBwZW5kIiwKKwlwcmVwZW5kVG86ICJwcmVwZW5kIiwKKwlpbnNlcnRCZWZvcmU6ICJiZWZvcmUiLAorCWluc2VydEFmdGVyOiAiYWZ0ZXIiLAorCXJlcGxhY2VBbGw6ICJyZXBsYWNlV2l0aCIKK30sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHsKKwlqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKwkJdmFyIGVsZW1zLAorCQkJaSA9IDAsCisJCQlyZXQgPSBbXSwKKwkJCWluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSwKKwkJCWxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMTsKKworCQlmb3IgKCA7IGkgPD0gbGFzdDsgaSsrICkgeworCQkJZWxlbXMgPSBpID09PSBsYXN0ID8gdGhpcyA6IHRoaXMuY2xvbmUoIHRydWUgKTsKKwkJCWpRdWVyeSggaW5zZXJ0WyBpIF0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTsKKworCQkJLy8gTW9kZXJuIGJyb3dzZXJzIGNhbiBhcHBseSBqUXVlcnkgY29sbGVjdGlvbnMgYXMgYXJyYXlzLCBidXQgb2xkSUUgbmVlZHMgYSAuZ2V0KCkKKwkJCXB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTsKKwkJfQorCisJCXJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7CisJfTsKK30gKTsKKworCit2YXIgaWZyYW1lLAorCWVsZW1kaXNwbGF5ID0geworCisJCS8vIFN1cHBvcnQ6IEZpcmVmb3gKKwkJLy8gV2UgaGF2ZSB0byBwcmUtZGVmaW5lIHRoZXNlIHZhbHVlcyBmb3IgRkYgKCMxMDIyNykKKwkJSFRNTDogImJsb2NrIiwKKwkJQk9EWTogImJsb2NrIgorCX07CisKKy8qKgorICogUmV0cmlldmUgdGhlIGFjdHVhbCBkaXNwbGF5IG9mIGEgZWxlbWVudAorICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgbm9kZU5hbWUgb2YgdGhlIGVsZW1lbnQKKyAqIEBwYXJhbSB7T2JqZWN0fSBkb2MgRG9jdW1lbnQgb2JqZWN0CisgKi8KKworLy8gQ2FsbGVkIG9ubHkgZnJvbSB3aXRoaW4gZGVmYXVsdERpc3BsYXkKK2Z1bmN0aW9uIGFjdHVhbERpc3BsYXkoIG5hbWUsIGRvYyApIHsKKwl2YXIgZWxlbSA9IGpRdWVyeSggZG9jLmNyZWF0ZUVsZW1lbnQoIG5hbWUgKSApLmFwcGVuZFRvKCBkb2MuYm9keSApLAorCisJCWRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtWyAwIF0sICJkaXNwbGF5IiApOworCisJLy8gV2UgZG9uJ3QgaGF2ZSBhbnkgZGF0YSBzdG9yZWQgb24gdGhlIGVsZW1lbnQsCisJLy8gc28gdXNlICJkZXRhY2giIG1ldGhvZCBhcyBmYXN0IHdheSB0byBnZXQgcmlkIG9mIHRoZSBlbGVtZW50CisJZWxlbS5kZXRhY2goKTsKKworCXJldHVybiBkaXNwbGF5OworfQorCisvKioKKyAqIFRyeSB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgZGlzcGxheSB2YWx1ZSBvZiBhbiBlbGVtZW50CisgKiBAcGFyYW0ge1N0cmluZ30gbm9kZU5hbWUKKyAqLworZnVuY3Rpb24gZGVmYXVsdERpc3BsYXkoIG5vZGVOYW1lICkgeworCXZhciBkb2MgPSBkb2N1bWVudCwKKwkJZGlzcGxheSA9IGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdOworCisJaWYgKCAhZGlzcGxheSApIHsKKwkJZGlzcGxheSA9IGFjdHVhbERpc3BsYXkoIG5vZGVOYW1lLCBkb2MgKTsKKworCQkvLyBJZiB0aGUgc2ltcGxlIHdheSBmYWlscywgcmVhZCBmcm9tIGluc2lkZSBhbiBpZnJhbWUKKwkJaWYgKCBkaXNwbGF5ID09PSAibm9uZSIgfHwgIWRpc3BsYXkgKSB7CisKKwkJCS8vIFVzZSB0aGUgYWxyZWFkeS1jcmVhdGVkIGlmcmFtZSBpZiBwb3NzaWJsZQorCQkJaWZyYW1lID0gKCBpZnJhbWUgfHwgalF1ZXJ5KCAiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIgKSApCisJCQkJLmFwcGVuZFRvKCBkb2MuZG9jdW1lbnRFbGVtZW50ICk7CisKKwkJCS8vIEFsd2F5cyB3cml0ZSBhIG5ldyBIVE1MIHNrZWxldG9uIHNvIFdlYmtpdCBhbmQgRmlyZWZveCBkb24ndCBjaG9rZSBvbiByZXVzZQorCQkJZG9jID0gKCBpZnJhbWVbIDAgXS5jb250ZW50V2luZG93IHx8IGlmcmFtZVsgMCBdLmNvbnRlbnREb2N1bWVudCApLmRvY3VtZW50OworCisJCQkvLyBTdXBwb3J0OiBJRQorCQkJZG9jLndyaXRlKCk7CisJCQlkb2MuY2xvc2UoKTsKKworCQkJZGlzcGxheSA9IGFjdHVhbERpc3BsYXkoIG5vZGVOYW1lLCBkb2MgKTsKKwkJCWlmcmFtZS5kZXRhY2goKTsKKwkJfQorCisJCS8vIFN0b3JlIHRoZSBjb3JyZWN0IGRlZmF1bHQgZGlzcGxheQorCQllbGVtZGlzcGxheVsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7CisJfQorCisJcmV0dXJuIGRpc3BsYXk7Cit9Cit2YXIgcm1hcmdpbiA9ICggL15tYXJnaW4vICk7CisKK3ZhciBybnVtbm9ucHggPSBuZXcgUmVnRXhwKCAiXigiICsgcG51bSArICIpKD8hcHgpW2EteiVdKyQiLCAiaSIgKTsKKwordmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2ssIGFyZ3MgKSB7CisJdmFyIHJldCwgbmFtZSwKKwkJb2xkID0ge307CisKKwkvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXMKKwlmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7CisJCW9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdOworCQllbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07CisJfQorCisJcmV0ID0gY2FsbGJhY2suYXBwbHkoIGVsZW0sIGFyZ3MgfHwgW10gKTsKKworCS8vIFJldmVydCB0aGUgb2xkIHZhbHVlcworCWZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsKKwkJZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07CisJfQorCisJcmV0dXJuIHJldDsKK307CisKKwordmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKKworCisKKyggZnVuY3Rpb24oKSB7CisJdmFyIHBpeGVsUG9zaXRpb25WYWwsIHBpeGVsTWFyZ2luUmlnaHRWYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLAorCQlyZWxpYWJsZUhpZGRlbk9mZnNldHNWYWwsIHJlbGlhYmxlTWFyZ2luUmlnaHRWYWwsIHJlbGlhYmxlTWFyZ2luTGVmdFZhbCwKKwkJY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKSwKKwkJZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKTsKKworCS8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChub24tYnJvd3NlcikgZW52aXJvbm1lbnRzCisJaWYgKCAhZGl2LnN0eWxlICkgeworCQlyZXR1cm47CisJfQorCisJZGl2LnN0eWxlLmNzc1RleHQgPSAiZmxvYXQ6bGVmdDtvcGFjaXR5Oi41IjsKKworCS8vIFN1cHBvcnQ6IElFPDkKKwkvLyBNYWtlIHN1cmUgdGhhdCBlbGVtZW50IG9wYWNpdHkgZXhpc3RzIChhcyBvcHBvc2VkIHRvIGZpbHRlcikKKwlzdXBwb3J0Lm9wYWNpdHkgPSBkaXYuc3R5bGUub3BhY2l0eSA9PT0gIjAuNSI7CisKKwkvLyBWZXJpZnkgc3R5bGUgZmxvYXQgZXhpc3RlbmNlCisJLy8gKElFIHVzZXMgc3R5bGVGbG9hdCBpbnN0ZWFkIG9mIGNzc0Zsb2F0KQorCXN1cHBvcnQuY3NzRmxvYXQgPSAhIWRpdi5zdHlsZS5jc3NGbG9hdDsKKworCWRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9ICJjb250ZW50LWJveCI7CisJZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gIiI7CisJc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09ICJjb250ZW50LWJveCI7CisKKwljb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApOworCWNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gImJvcmRlcjowO3dpZHRoOjhweDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHg7IiArCisJCSJwYWRkaW5nOjA7bWFyZ2luLXRvcDoxcHg7cG9zaXRpb246YWJzb2x1dGUiOworCWRpdi5pbm5lckhUTUwgPSAiIjsKKwljb250YWluZXIuYXBwZW5kQ2hpbGQoIGRpdiApOworCisJLy8gU3VwcG9ydDogRmlyZWZveDwyOSwgQW5kcm9pZCAyLjMKKwkvLyBWZW5kb3ItcHJlZml4IGJveC1zaXppbmcKKwlzdXBwb3J0LmJveFNpemluZyA9IGRpdi5zdHlsZS5ib3hTaXppbmcgPT09ICIiIHx8IGRpdi5zdHlsZS5Nb3pCb3hTaXppbmcgPT09ICIiIHx8CisJCWRpdi5zdHlsZS5XZWJraXRCb3hTaXppbmcgPT09ICIiOworCisJalF1ZXJ5LmV4dGVuZCggc3VwcG9ydCwgeworCQlyZWxpYWJsZUhpZGRlbk9mZnNldHM6IGZ1bmN0aW9uKCkgeworCQkJaWYgKCBwaXhlbFBvc2l0aW9uVmFsID09IG51bGwgKSB7CisJCQkJY29tcHV0ZVN0eWxlVGVzdHMoKTsKKwkJCX0KKwkJCXJldHVybiByZWxpYWJsZUhpZGRlbk9mZnNldHNWYWw7CisJCX0sCisKKwkJYm94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkgeworCisJCQkvLyBXZSdyZSBjaGVja2luZyBmb3IgcGl4ZWxQb3NpdGlvblZhbCBoZXJlIGluc3RlYWQgb2YgYm94U2l6aW5nUmVsaWFibGVWYWwKKwkJCS8vIHNpbmNlIHRoYXQgY29tcHJlc3NlcyBiZXR0ZXIgYW5kIHRoZXkncmUgY29tcHV0ZWQgdG9nZXRoZXIgYW55d2F5LgorCQkJaWYgKCBwaXhlbFBvc2l0aW9uVmFsID09IG51bGwgKSB7CisJCQkJY29tcHV0ZVN0eWxlVGVzdHMoKTsKKwkJCX0KKwkJCXJldHVybiBib3hTaXppbmdSZWxpYWJsZVZhbDsKKwkJfSwKKworCQlwaXhlbE1hcmdpblJpZ2h0OiBmdW5jdGlvbigpIHsKKworCQkJLy8gU3VwcG9ydDogQW5kcm9pZCA0LjAtNC4zCisJCQlpZiAoIHBpeGVsUG9zaXRpb25WYWwgPT0gbnVsbCApIHsKKwkJCQljb21wdXRlU3R5bGVUZXN0cygpOworCQkJfQorCQkJcmV0dXJuIHBpeGVsTWFyZ2luUmlnaHRWYWw7CisJCX0sCisKKwkJcGl4ZWxQb3NpdGlvbjogZnVuY3Rpb24oKSB7CisJCQlpZiAoIHBpeGVsUG9zaXRpb25WYWwgPT0gbnVsbCApIHsKKwkJCQljb21wdXRlU3R5bGVUZXN0cygpOworCQkJfQorCQkJcmV0dXJuIHBpeGVsUG9zaXRpb25WYWw7CisJCX0sCisKKwkJcmVsaWFibGVNYXJnaW5SaWdodDogZnVuY3Rpb24oKSB7CisKKwkJCS8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zCisJCQlpZiAoIHBpeGVsUG9zaXRpb25WYWwgPT0gbnVsbCApIHsKKwkJCQljb21wdXRlU3R5bGVUZXN0cygpOworCQkJfQorCQkJcmV0dXJuIHJlbGlhYmxlTWFyZ2luUmlnaHRWYWw7CisJCX0sCisKKwkJcmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHsKKworCQkJLy8gU3VwcG9ydDogSUUgPD04IG9ubHksIEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIEZpcmVmb3ggPD0zIC0gMzcKKwkJCWlmICggcGl4ZWxQb3NpdGlvblZhbCA9PSBudWxsICkgeworCQkJCWNvbXB1dGVTdHlsZVRlc3RzKCk7CisJCQl9CisJCQlyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsOworCQl9CisJfSApOworCisJZnVuY3Rpb24gY29tcHV0ZVN0eWxlVGVzdHMoKSB7CisJCXZhciBjb250ZW50cywgZGl2U3R5bGUsCisJCQlkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CisKKwkJLy8gU2V0dXAKKwkJZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBjb250YWluZXIgKTsKKworCQlkaXYuc3R5bGUuY3NzVGV4dCA9CisKKwkJCS8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zCisJCQkvLyBWZW5kb3ItcHJlZml4IGJveC1zaXppbmcKKwkJCSItd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7IiArCisJCQkicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jazsiICsKKwkJCSJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4OyIgKworCQkJInRvcDoxJTt3aWR0aDo1MCUiOworCisJCS8vIFN1cHBvcnQ6IElFPDkKKwkJLy8gQXNzdW1lIHJlYXNvbmFibGUgdmFsdWVzIGluIHRoZSBhYnNlbmNlIG9mIGdldENvbXB1dGVkU3R5bGUKKwkJcGl4ZWxQb3NpdGlvblZhbCA9IGJveFNpemluZ1JlbGlhYmxlVmFsID0gcmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gZmFsc2U7CisJCXBpeGVsTWFyZ2luUmlnaHRWYWwgPSByZWxpYWJsZU1hcmdpblJpZ2h0VmFsID0gdHJ1ZTsKKworCQkvLyBDaGVjayBmb3IgZ2V0Q29tcHV0ZWRTdHlsZSBzbyB0aGF0IHRoaXMgY29kZSBpcyBub3QgcnVuIGluIElFPDkuCisJCWlmICggd2luZG93LmdldENvbXB1dGVkU3R5bGUgKSB7CisJCQlkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTsKKwkJCXBpeGVsUG9zaXRpb25WYWwgPSAoIGRpdlN0eWxlIHx8IHt9ICkudG9wICE9PSAiMSUiOworCQkJcmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gKCBkaXZTdHlsZSB8fCB7fSApLm1hcmdpbkxlZnQgPT09ICIycHgiOworCQkJYm94U2l6aW5nUmVsaWFibGVWYWwgPSAoIGRpdlN0eWxlIHx8IHsgd2lkdGg6ICI0cHgiIH0gKS53aWR0aCA9PT0gIjRweCI7CisKKwkJCS8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHkKKwkJCS8vIFNvbWUgc3R5bGVzIGNvbWUgYmFjayB3aXRoIHBlcmNlbnRhZ2UgdmFsdWVzLCBldmVuIHRob3VnaCB0aGV5IHNob3VsZG4ndAorCQkJZGl2LnN0eWxlLm1hcmdpblJpZ2h0ID0gIjUwJSI7CisJCQlwaXhlbE1hcmdpblJpZ2h0VmFsID0gKCBkaXZTdHlsZSB8fCB7IG1hcmdpblJpZ2h0OiAiNHB4IiB9ICkubWFyZ2luUmlnaHQgPT09ICI0cHgiOworCisJCQkvLyBTdXBwb3J0OiBBbmRyb2lkIDIuMyBvbmx5CisJCQkvLyBEaXYgd2l0aCBleHBsaWNpdCB3aWR0aCBhbmQgbm8gbWFyZ2luLXJpZ2h0IGluY29ycmVjdGx5CisJCQkvLyBnZXRzIGNvbXB1dGVkIG1hcmdpbi1yaWdodCBiYXNlZCBvbiB3aWR0aCBvZiBjb250YWluZXIgKCMzMzMzKQorCQkJLy8gV2ViS2l0IEJ1ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyB3cm9uZyB2YWx1ZSBmb3IgbWFyZ2luLXJpZ2h0CisJCQljb250ZW50cyA9IGRpdi5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKSApOworCisJCQkvLyBSZXNldCBDU1M6IGJveC1zaXppbmc7IGRpc3BsYXk7IG1hcmdpbjsgYm9yZGVyOyBwYWRkaW5nCisJCQljb250ZW50cy5zdHlsZS5jc3NUZXh0ID0gZGl2LnN0eWxlLmNzc1RleHQgPQorCisJCQkJLy8gU3VwcG9ydDogQW5kcm9pZCAyLjMKKwkJCQkvLyBWZW5kb3ItcHJlZml4IGJveC1zaXppbmcKKwkJCQkiLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDsiICsKKwkJCQkiYm94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MCI7CisJCQljb250ZW50cy5zdHlsZS5tYXJnaW5SaWdodCA9IGNvbnRlbnRzLnN0eWxlLndpZHRoID0gIjAiOworCQkJZGl2LnN0eWxlLndpZHRoID0gIjFweCI7CisKKwkJCXJlbGlhYmxlTWFyZ2luUmlnaHRWYWwgPQorCQkJCSFwYXJzZUZsb2F0KCAoIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBjb250ZW50cyApIHx8IHt9ICkubWFyZ2luUmlnaHQgKTsKKworCQkJZGl2LnJlbW92ZUNoaWxkKCBjb250ZW50cyApOworCQl9CisKKwkJLy8gU3VwcG9ydDogSUU2LTgKKwkJLy8gRmlyc3QgY2hlY2sgdGhhdCBnZXRDbGllbnRSZWN0cyB3b3JrcyBhcyBleHBlY3RlZAorCQkvLyBDaGVjayBpZiB0YWJsZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hlaWdodCB3aGVuIHRoZXkgYXJlIHNldAorCQkvLyB0byBkaXNwbGF5Om5vbmUgYW5kIHRoZXJlIGFyZSBzdGlsbCBvdGhlciB2aXNpYmxlIHRhYmxlIGNlbGxzIGluIGEKKwkJLy8gdGFibGUgcm93OyBpZiBzbywgb2Zmc2V0V2lkdGgvSGVpZ2h0IGFyZSBub3QgcmVsaWFibGUgZm9yIHVzZSB3aGVuCisJCS8vIGRldGVybWluaW5nIGlmIGFuIGVsZW1lbnQgaGFzIGJlZW4gaGlkZGVuIGRpcmVjdGx5IHVzaW5nCisJCS8vIGRpc3BsYXk6bm9uZSAoaXQgaXMgc3RpbGwgc2FmZSB0byB1c2Ugb2Zmc2V0cyBpZiBhIHBhcmVudCBlbGVtZW50IGlzCisJCS8vIGhpZGRlbjsgZG9uIHNhZmV0eSBnb2dnbGVzIGFuZCBzZWUgYnVnICM0NTEyIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KKwkJZGl2LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisJCXJlbGlhYmxlSGlkZGVuT2Zmc2V0c1ZhbCA9IGRpdi5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCA9PT0gMDsKKwkJaWYgKCByZWxpYWJsZUhpZGRlbk9mZnNldHNWYWwgKSB7CisJCQlkaXYuc3R5bGUuZGlzcGxheSA9ICIiOworCQkJZGl2LmlubmVySFRNTCA9ICI8dGFibGU+PHRyPjx0ZD48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IjsKKwkJCWRpdi5jaGlsZE5vZGVzWyAwIF0uc3R5bGUuYm9yZGVyQ29sbGFwc2UgPSAic2VwYXJhdGUiOworCQkJY29udGVudHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJ0ZCIgKTsKKwkJCWNvbnRlbnRzWyAwIF0uc3R5bGUuY3NzVGV4dCA9ICJtYXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjA7ZGlzcGxheTpub25lIjsKKwkJCXJlbGlhYmxlSGlkZGVuT2Zmc2V0c1ZhbCA9IGNvbnRlbnRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwOworCQkJaWYgKCByZWxpYWJsZUhpZGRlbk9mZnNldHNWYWwgKSB7CisJCQkJY29udGVudHNbIDAgXS5zdHlsZS5kaXNwbGF5ID0gIiI7CisJCQkJY29udGVudHNbIDEgXS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworCQkJCXJlbGlhYmxlSGlkZGVuT2Zmc2V0c1ZhbCA9IGNvbnRlbnRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwOworCQkJfQorCQl9CisKKwkJLy8gVGVhcmRvd24KKwkJZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTsKKwl9CisKK30gKSgpOworCisKK3ZhciBnZXRTdHlsZXMsIGN1ckNTUywKKwlycG9zaXRpb24gPSAvXih0b3B8cmlnaHR8Ym90dG9tfGxlZnQpJC87CisKK2lmICggd2luZG93LmdldENvbXB1dGVkU3R5bGUgKSB7CisJZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7CisKKwkJLy8gU3VwcG9ydDogSUU8PTExKywgRmlyZWZveDw9MzArICgjMTUwOTgsICMxNDE1MCkKKwkJLy8gSUUgdGhyb3dzIG9uIGVsZW1lbnRzIGNyZWF0ZWQgaW4gcG9wdXBzCisJCS8vIEZGIG1lYW53aGlsZSB0aHJvd3Mgb24gZnJhbWUgZWxlbWVudHMgdGhyb3VnaCAiZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSIKKwkJdmFyIHZpZXcgPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7CisKKwkJaWYgKCAhdmlldyB8fCAhdmlldy5vcGVuZXIgKSB7CisJCQl2aWV3ID0gd2luZG93OworCQl9CisKKwkJcmV0dXJuIHZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSApOworCX07CisKKwljdXJDU1MgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgY29tcHV0ZWQgKSB7CisJCXZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQsCisJCQlzdHlsZSA9IGVsZW0uc3R5bGU7CisKKwkJY29tcHV0ZWQgPSBjb21wdXRlZCB8fCBnZXRTdHlsZXMoIGVsZW0gKTsKKworCQkvLyBnZXRQcm9wZXJ0eVZhbHVlIGlzIG9ubHkgbmVlZGVkIGZvciAuY3NzKCdmaWx0ZXInKSBpbiBJRTksIHNlZSAjMTI1MzcKKwkJcmV0ID0gY29tcHV0ZWQgPyBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXSA6IHVuZGVmaW5lZDsKKworCQkvLyBTdXBwb3J0OiBPcGVyYSAxMi4xeCBvbmx5CisJCS8vIEZhbGwgYmFjayB0byBzdHlsZSBldmVuIHdpdGhvdXQgY29tcHV0ZWQKKwkJLy8gY29tcHV0ZWQgaXMgdW5kZWZpbmVkIGZvciBlbGVtcyBvbiBkb2N1bWVudCBmcmFnbWVudHMKKwkJaWYgKCAoIHJldCA9PT0gIiIgfHwgcmV0ID09PSB1bmRlZmluZWQgKSAmJiAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSApIHsKKwkJCXJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApOworCQl9CisKKwkJaWYgKCBjb21wdXRlZCApIHsKKworCQkJLy8gQSB0cmlidXRlIHRvIHRoZSAiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkcyIKKwkJCS8vIENocm9tZSA8IDE3IGFuZCBTYWZhcmkgNS4wIHVzZXMgImNvbXB1dGVkIHZhbHVlIgorCQkJLy8gaW5zdGVhZCBvZiAidXNlZCB2YWx1ZSIgZm9yIG1hcmdpbi1yaWdodAorCQkJLy8gU2FmYXJpIDUuMS43IChhdCBsZWFzdCkgcmV0dXJucyBwZXJjZW50YWdlIGZvciBhIGxhcmdlciBzZXQgb2YgdmFsdWVzLAorCQkJLy8gYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscworCQkJLy8gdGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOgorCQkJLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI3Jlc29sdmVkLXZhbHVlcworCQkJaWYgKCAhc3VwcG9ydC5waXhlbE1hcmdpblJpZ2h0KCkgJiYgcm51bW5vbnB4LnRlc3QoIHJldCApICYmIHJtYXJnaW4udGVzdCggbmFtZSApICkgeworCisJCQkJLy8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlcworCQkJCXdpZHRoID0gc3R5bGUud2lkdGg7CisJCQkJbWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDsKKwkJCQltYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoOworCisJCQkJLy8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dAorCQkJCXN0eWxlLm1pbldpZHRoID0gc3R5bGUubWF4V2lkdGggPSBzdHlsZS53aWR0aCA9IHJldDsKKwkJCQlyZXQgPSBjb21wdXRlZC53aWR0aDsKKworCQkJCS8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXMKKwkJCQlzdHlsZS53aWR0aCA9IHdpZHRoOworCQkJCXN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7CisJCQkJc3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDsKKwkJCX0KKwkJfQorCisJCS8vIFN1cHBvcnQ6IElFCisJCS8vIElFIHJldHVybnMgekluZGV4IHZhbHVlIGFzIGFuIGludGVnZXIuCisJCXJldHVybiByZXQgPT09IHVuZGVmaW5lZCA/CisJCQlyZXQgOgorCQkJcmV0ICsgIiI7CisJfTsKK30gZWxzZSBpZiAoIGRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUgKSB7CisJZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7CisJCXJldHVybiBlbGVtLmN1cnJlbnRTdHlsZTsKKwl9OworCisJY3VyQ1NTID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkgeworCQl2YXIgbGVmdCwgcnMsIHJzTGVmdCwgcmV0LAorCQkJc3R5bGUgPSBlbGVtLnN0eWxlOworCisJCWNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7CisJCXJldCA9IGNvbXB1dGVkID8gY29tcHV0ZWRbIG5hbWUgXSA6IHVuZGVmaW5lZDsKKworCQkvLyBBdm9pZCBzZXR0aW5nIHJldCB0byBlbXB0eSBzdHJpbmcgaGVyZQorCQkvLyBzbyB3ZSBkb24ndCBkZWZhdWx0IHRvIGF1dG8KKwkJaWYgKCByZXQgPT0gbnVsbCAmJiBzdHlsZSAmJiBzdHlsZVsgbmFtZSBdICkgeworCQkJcmV0ID0gc3R5bGVbIG5hbWUgXTsKKwkJfQorCisJCS8vIEZyb20gdGhlIGF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHMKKwkJLy8gaHR0cDovL2VyaWsuZWFlLm5ldC9hcmNoaXZlcy8yMDA3LzA3LzI3LzE4LjU0LjE1LyNjb21tZW50LTEwMjI5MQorCisJCS8vIElmIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggYSByZWd1bGFyIHBpeGVsIG51bWJlcgorCQkvLyBidXQgYSBudW1iZXIgdGhhdCBoYXMgYSB3ZWlyZCBlbmRpbmcsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0byBwaXhlbHMKKwkJLy8gYnV0IG5vdCBwb3NpdGlvbiBjc3MgYXR0cmlidXRlcywgYXMgdGhvc2UgYXJlCisJCS8vIHByb3BvcnRpb25hbCB0byB0aGUgcGFyZW50IGVsZW1lbnQgaW5zdGVhZAorCQkvLyBhbmQgd2UgY2FuJ3QgbWVhc3VyZSB0aGUgcGFyZW50IGluc3RlYWQgYmVjYXVzZSBpdAorCQkvLyBtaWdodCB0cmlnZ2VyIGEgInN0YWNraW5nIGRvbGxzIiBwcm9ibGVtCisJCWlmICggcm51bW5vbnB4LnRlc3QoIHJldCApICYmICFycG9zaXRpb24udGVzdCggbmFtZSApICkgeworCisJCQkvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzCisJCQlsZWZ0ID0gc3R5bGUubGVmdDsKKwkJCXJzID0gZWxlbS5ydW50aW1lU3R5bGU7CisJCQlyc0xlZnQgPSBycyAmJiBycy5sZWZ0OworCisJCQkvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0CisJCQlpZiAoIHJzTGVmdCApIHsKKwkJCQlycy5sZWZ0ID0gZWxlbS5jdXJyZW50U3R5bGUubGVmdDsKKwkJCX0KKwkJCXN0eWxlLmxlZnQgPSBuYW1lID09PSAiZm9udFNpemUiID8gIjFlbSIgOiByZXQ7CisJCQlyZXQgPSBzdHlsZS5waXhlbExlZnQgKyAicHgiOworCisJCQkvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzCisJCQlzdHlsZS5sZWZ0ID0gbGVmdDsKKwkJCWlmICggcnNMZWZ0ICkgeworCQkJCXJzLmxlZnQgPSByc0xlZnQ7CisJCQl9CisJCX0KKworCQkvLyBTdXBwb3J0OiBJRQorCQkvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLgorCQlyZXR1cm4gcmV0ID09PSB1bmRlZmluZWQgPworCQkJcmV0IDoKKwkJCXJldCArICIiIHx8ICJhdXRvIjsKKwl9OworfQorCisKKworCitmdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7CisKKwkvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLgorCXJldHVybiB7CisJCWdldDogZnVuY3Rpb24oKSB7CisJCQlpZiAoIGNvbmRpdGlvbkZuKCkgKSB7CisKKwkJCQkvLyBIb29rIG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWUKKwkJCQkvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuCisJCQkJZGVsZXRlIHRoaXMuZ2V0OworCQkJCXJldHVybjsKKwkJCX0KKworCQkJLy8gSG9vayBuZWVkZWQ7IHJlZGVmaW5lIGl0IHNvIHRoYXQgdGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4uCisJCQlyZXR1cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKwkJfQorCX07Cit9CisKKwordmFyCisKKwkJcmFscGhhID0gL2FscGhhXChbXildKlwpL2ksCisJcm9wYWNpdHkgPSAvb3BhY2l0eVxzKj1ccyooW14pXSopL2ksCisKKwkvLyBzd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlIGV4Y2VwdAorCS8vICJ0YWJsZSIsICJ0YWJsZS1jZWxsIiwgb3IgInRhYmxlLWNhcHRpb24iCisJLy8gc2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOgorCS8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXkKKwlyZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sCisJcm51bXNwbGl0ID0gbmV3IFJlZ0V4cCggIl4oIiArIHBudW0gKyAiKSguKikkIiwgImkiICksCisKKwljc3NTaG93ID0geyBwb3NpdGlvbjogImFic29sdXRlIiwgdmlzaWJpbGl0eTogImhpZGRlbiIsIGRpc3BsYXk6ICJibG9jayIgfSwKKwljc3NOb3JtYWxUcmFuc2Zvcm0gPSB7CisJCWxldHRlclNwYWNpbmc6ICIwIiwKKwkJZm9udFdlaWdodDogIjQwMCIKKwl9LAorCisJY3NzUHJlZml4ZXMgPSBbICJXZWJraXQiLCAiTyIsICJNb3oiLCAibXMiIF0sCisJZW1wdHlTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICkuc3R5bGU7CisKKworLy8gcmV0dXJuIGEgY3NzIHByb3BlcnR5IG1hcHBlZCB0byBhIHBvdGVudGlhbGx5IHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eQorZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB7CisKKwkvLyBzaG9ydGN1dCBmb3IgbmFtZXMgdGhhdCBhcmUgbm90IHZlbmRvciBwcmVmaXhlZAorCWlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkgeworCQlyZXR1cm4gbmFtZTsKKwl9CisKKwkvLyBjaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzCisJdmFyIGNhcE5hbWUgPSBuYW1lLmNoYXJBdCggMCApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksCisJCWkgPSBjc3NQcmVmaXhlcy5sZW5ndGg7CisKKwl3aGlsZSAoIGktLSApIHsKKwkJbmFtZSA9IGNzc1ByZWZpeGVzWyBpIF0gKyBjYXBOYW1lOworCQlpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHsKKwkJCXJldHVybiBuYW1lOworCQl9CisJfQorfQorCitmdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7CisJdmFyIGRpc3BsYXksIGVsZW0sIGhpZGRlbiwKKwkJdmFsdWVzID0gW10sCisJCWluZGV4ID0gMCwKKwkJbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoOworCisJZm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKKwkJZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdOworCQlpZiAoICFlbGVtLnN0eWxlICkgeworCQkJY29udGludWU7CisJCX0KKworCQl2YWx1ZXNbIGluZGV4IF0gPSBqUXVlcnkuX2RhdGEoIGVsZW0sICJvbGRkaXNwbGF5IiApOworCQlkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5OworCQlpZiAoIHNob3cgKSB7CisKKwkJCS8vIFJlc2V0IHRoZSBpbmxpbmUgZGlzcGxheSBvZiB0aGlzIGVsZW1lbnQgdG8gbGVhcm4gaWYgaXQgaXMKKwkJCS8vIGJlaW5nIGhpZGRlbiBieSBjYXNjYWRlZCBydWxlcyBvciBub3QKKwkJCWlmICggIXZhbHVlc1sgaW5kZXggXSAmJiBkaXNwbGF5ID09PSAibm9uZSIgKSB7CisJCQkJZWxlbS5zdHlsZS5kaXNwbGF5ID0gIiI7CisJCQl9CisKKwkJCS8vIFNldCBlbGVtZW50cyB3aGljaCBoYXZlIGJlZW4gb3ZlcnJpZGRlbiB3aXRoIGRpc3BsYXk6IG5vbmUKKwkJCS8vIGluIGEgc3R5bGVzaGVldCB0byB3aGF0ZXZlciB0aGUgZGVmYXVsdCBicm93c2VyIHN0eWxlIGlzCisJCQkvLyBmb3Igc3VjaCBhbiBlbGVtZW50CisJCQlpZiAoIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIiIgJiYgaXNIaWRkZW4oIGVsZW0gKSApIHsKKwkJCQl2YWx1ZXNbIGluZGV4IF0gPQorCQkJCQlqUXVlcnkuX2RhdGEoIGVsZW0sICJvbGRkaXNwbGF5IiwgZGVmYXVsdERpc3BsYXkoIGVsZW0ubm9kZU5hbWUgKSApOworCQkJfQorCQl9IGVsc2UgeworCQkJaGlkZGVuID0gaXNIaWRkZW4oIGVsZW0gKTsKKworCQkJaWYgKCBkaXNwbGF5ICYmIGRpc3BsYXkgIT09ICJub25lIiB8fCAhaGlkZGVuICkgeworCQkJCWpRdWVyeS5fZGF0YSgKKwkJCQkJZWxlbSwKKwkJCQkJIm9sZGRpc3BsYXkiLAorCQkJCQloaWRkZW4gPyBkaXNwbGF5IDogalF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkKKwkJCQkpOworCQkJfQorCQl9CisJfQorCisJLy8gU2V0IHRoZSBkaXNwbGF5IG9mIG1vc3Qgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AKKwkvLyB0byBhdm9pZCB0aGUgY29uc3RhbnQgcmVmbG93CisJZm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKKwkJZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdOworCQlpZiAoICFlbGVtLnN0eWxlICkgeworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCAhc2hvdyB8fCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09ICJub25lIiB8fCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09ICIiICkgeworCQkJZWxlbS5zdHlsZS5kaXNwbGF5ID0gc2hvdyA/IHZhbHVlc1sgaW5kZXggXSB8fCAiIiA6ICJub25lIjsKKwkJfQorCX0KKworCXJldHVybiBlbGVtZW50czsKK30KKworZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHsKKwl2YXIgbWF0Y2hlcyA9IHJudW1zcGxpdC5leGVjKCB2YWx1ZSApOworCXJldHVybiBtYXRjaGVzID8KKworCQkvLyBHdWFyZCBhZ2FpbnN0IHVuZGVmaW5lZCAic3VidHJhY3QiLCBlLmcuLCB3aGVuIHVzZWQgYXMgaW4gY3NzSG9va3MKKwkJTWF0aC5tYXgoIDAsIG1hdGNoZXNbIDEgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDIgXSB8fCAicHgiICkgOgorCQl2YWx1ZTsKK30KKworZnVuY3Rpb24gYXVnbWVudFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhLCBpc0JvcmRlckJveCwgc3R5bGVzICkgeworCXZhciBpID0gZXh0cmEgPT09ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJjb250ZW50IiApID8KKworCQkvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJpZ2h0IG1lYXN1cmVtZW50LCBhdm9pZCBhdWdtZW50YXRpb24KKwkJNCA6CisKKwkJLy8gT3RoZXJ3aXNlIGluaXRpYWxpemUgZm9yIGhvcml6b250YWwgb3IgdmVydGljYWwgcHJvcGVydGllcworCQluYW1lID09PSAid2lkdGgiID8gMSA6IDAsCisKKwkJdmFsID0gMDsKKworCWZvciAoIDsgaSA8IDQ7IGkgKz0gMiApIHsKKworCQkvLyBib3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW4sIHNvIGFkZCBpdCBpZiB3ZSB3YW50IGl0CisJCWlmICggZXh0cmEgPT09ICJtYXJnaW4iICkgeworCQkJdmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sIGV4dHJhICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApOworCQl9CisKKwkJaWYgKCBpc0JvcmRlckJveCApIHsKKworCQkJLy8gYm9yZGVyLWJveCBpbmNsdWRlcyBwYWRkaW5nLCBzbyByZW1vdmUgaXQgaWYgd2Ugd2FudCBjb250ZW50CisJCQlpZiAoIGV4dHJhID09PSAiY29udGVudCIgKSB7CisJCQkJdmFsIC09IGpRdWVyeS5jc3MoIGVsZW0sICJwYWRkaW5nIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTsKKwkJCX0KKworCQkJLy8gYXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgYm9yZGVyIG5vciBtYXJnaW4sIHNvIHJlbW92ZSBib3JkZXIKKwkJCWlmICggZXh0cmEgIT09ICJtYXJnaW4iICkgeworCQkJCXZhbCAtPSBqUXVlcnkuY3NzKCBlbGVtLCAiYm9yZGVyIiArIGNzc0V4cGFuZFsgaSBdICsgIldpZHRoIiwgdHJ1ZSwgc3R5bGVzICk7CisJCQl9CisJCX0gZWxzZSB7CisKKwkJCS8vIGF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGNvbnRlbnQsIHNvIGFkZCBwYWRkaW5nCisJCQl2YWwgKz0galF1ZXJ5LmNzcyggZWxlbSwgInBhZGRpbmciICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApOworCisJCQkvLyBhdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50IG5vciBwYWRkaW5nLCBzbyBhZGQgYm9yZGVyCisJCQlpZiAoIGV4dHJhICE9PSAicGFkZGluZyIgKSB7CisJCQkJdmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sICJib3JkZXIiICsgY3NzRXhwYW5kWyBpIF0gKyAiV2lkdGgiLCB0cnVlLCBzdHlsZXMgKTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiB2YWw7Cit9CisKK2Z1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICkgeworCisJLy8gU3RhcnQgd2l0aCBvZmZzZXQgcHJvcGVydHksIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGJvcmRlci1ib3ggdmFsdWUKKwl2YXIgdmFsdWVJc0JvcmRlckJveCA9IHRydWUsCisJCXZhbCA9IG5hbWUgPT09ICJ3aWR0aCIgPyBlbGVtLm9mZnNldFdpZHRoIDogZWxlbS5vZmZzZXRIZWlnaHQsCisJCXN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLAorCQlpc0JvcmRlckJveCA9IHN1cHBvcnQuYm94U2l6aW5nICYmCisJCQlqUXVlcnkuY3NzKCBlbGVtLCAiYm94U2l6aW5nIiwgZmFsc2UsIHN0eWxlcyApID09PSAiYm9yZGVyLWJveCI7CisKKwkvLyBzb21lIG5vbi1odG1sIGVsZW1lbnRzIHJldHVybiB1bmRlZmluZWQgZm9yIG9mZnNldFdpZHRoLCBzbyBjaGVjayBmb3IgbnVsbC91bmRlZmluZWQKKwkvLyBzdmcgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02NDkyODUKKwkvLyBNYXRoTUwgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD00OTE2NjgKKwlpZiAoIHZhbCA8PSAwIHx8IHZhbCA9PSBudWxsICkgeworCisJCS8vIEZhbGwgYmFjayB0byBjb21wdXRlZCB0aGVuIHVuY29tcHV0ZWQgY3NzIGlmIG5lY2Vzc2FyeQorCQl2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApOworCQlpZiAoIHZhbCA8IDAgfHwgdmFsID09IG51bGwgKSB7CisJCQl2YWwgPSBlbGVtLnN0eWxlWyBuYW1lIF07CisJCX0KKworCQkvLyBDb21wdXRlZCB1bml0IGlzIG5vdCBwaXhlbHMuIFN0b3AgaGVyZSBhbmQgcmV0dXJuLgorCQlpZiAoIHJudW1ub25weC50ZXN0KCB2YWwgKSApIHsKKwkJCXJldHVybiB2YWw7CisJCX0KKworCQkvLyB3ZSBuZWVkIHRoZSBjaGVjayBmb3Igc3R5bGUgaW4gY2FzZSBhIGJyb3dzZXIgd2hpY2ggcmV0dXJucyB1bnJlbGlhYmxlIHZhbHVlcworCQkvLyBmb3IgZ2V0Q29tcHV0ZWRTdHlsZSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIHRoZSByZWxpYWJsZSBlbGVtLnN0eWxlCisJCXZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCAmJgorCQkJKCBzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgdmFsID09PSBlbGVtLnN0eWxlWyBuYW1lIF0gKTsKKworCQkvLyBOb3JtYWxpemUgIiIsIGF1dG8sIGFuZCBwcmVwYXJlIGZvciBleHRyYQorCQl2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwOworCX0KKworCS8vIHVzZSB0aGUgYWN0aXZlIGJveC1zaXppbmcgbW9kZWwgdG8gYWRkL3N1YnRyYWN0IGlycmVsZXZhbnQgc3R5bGVzCisJcmV0dXJuICggdmFsICsKKwkJYXVnbWVudFdpZHRoT3JIZWlnaHQoCisJCQllbGVtLAorCQkJbmFtZSwKKwkJCWV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJjb250ZW50IiApLAorCQkJdmFsdWVJc0JvcmRlckJveCwKKwkJCXN0eWxlcworCQkpCisJKSArICJweCI7Cit9CisKK2pRdWVyeS5leHRlbmQoIHsKKworCS8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdAorCS8vIGJlaGF2aW9yIG9mIGdldHRpbmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eQorCWNzc0hvb2tzOiB7CisJCW9wYWNpdHk6IHsKKwkJCWdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgeworCQkJCWlmICggY29tcHV0ZWQgKSB7CisKKwkJCQkJLy8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHkKKwkJCQkJdmFyIHJldCA9IGN1ckNTUyggZWxlbSwgIm9wYWNpdHkiICk7CisJCQkJCXJldHVybiByZXQgPT09ICIiID8gIjEiIDogcmV0OworCQkJCX0KKwkJCX0KKwkJfQorCX0sCisKKwkvLyBEb24ndCBhdXRvbWF0aWNhbGx5IGFkZCAicHgiIHRvIHRoZXNlIHBvc3NpYmx5LXVuaXRsZXNzIHByb3BlcnRpZXMKKwljc3NOdW1iZXI6IHsKKwkJImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IjogdHJ1ZSwKKwkJImNvbHVtbkNvdW50IjogdHJ1ZSwKKwkJImZpbGxPcGFjaXR5IjogdHJ1ZSwKKwkJImZsZXhHcm93IjogdHJ1ZSwKKwkJImZsZXhTaHJpbmsiOiB0cnVlLAorCQkiZm9udFdlaWdodCI6IHRydWUsCisJCSJsaW5lSGVpZ2h0IjogdHJ1ZSwKKwkJIm9wYWNpdHkiOiB0cnVlLAorCQkib3JkZXIiOiB0cnVlLAorCQkib3JwaGFucyI6IHRydWUsCisJCSJ3aWRvd3MiOiB0cnVlLAorCQkiekluZGV4IjogdHJ1ZSwKKwkJInpvb20iOiB0cnVlCisJfSwKKworCS8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmUKKwkvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIHZhbHVlCisJY3NzUHJvcHM6IHsKKworCQkvLyBub3JtYWxpemUgZmxvYXQgY3NzIHByb3BlcnR5CisJCSJmbG9hdCI6IHN1cHBvcnQuY3NzRmxvYXQgPyAiY3NzRmxvYXQiIDogInN0eWxlRmxvYXQiCisJfSwKKworCS8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlCisJc3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7CisKKwkJLy8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzCisJCWlmICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8ICFlbGVtLnN0eWxlICkgeworCQkJcmV0dXJuOworCQl9CisKKwkJLy8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lCisJCXZhciByZXQsIHR5cGUsIGhvb2tzLAorCQkJb3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICksCisJCQlzdHlsZSA9IGVsZW0uc3R5bGU7CisKKwkJbmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSB8fAorCQkJKCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggb3JpZ05hbWUgKSB8fCBvcmlnTmFtZSApOworCisJCS8vIGdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24KKwkJLy8gZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgdmVyc2lvbgorCQlob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTsKKworCQkvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWUKKwkJaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgeworCQkJdHlwZSA9IHR5cGVvZiB2YWx1ZTsKKworCQkJLy8gQ29udmVydCAiKz0iIG9yICItPSIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpCisJCQlpZiAoIHR5cGUgPT09ICJzdHJpbmciICYmICggcmV0ID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYgcmV0WyAxIF0gKSB7CisJCQkJdmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApOworCisJCQkJLy8gRml4ZXMgYnVnICM5MjM3CisJCQkJdHlwZSA9ICJudW1iZXIiOworCQkJfQorCisJCQkvLyBNYWtlIHN1cmUgdGhhdCBudWxsIGFuZCBOYU4gdmFsdWVzIGFyZW4ndCBzZXQuIFNlZTogIzcxMTYKKwkJCWlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQkvLyBJZiBhIG51bWJlciB3YXMgcGFzc2VkIGluLCBhZGQgdGhlIHVuaXQgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcykKKwkJCWlmICggdHlwZSA9PT0gIm51bWJlciIgKSB7CisJCQkJdmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/ICIiIDogInB4IiApOworCQkJfQorCisJCQkvLyBGaXhlcyAjODkwOCwgaXQgY2FuIGJlIGRvbmUgbW9yZSBjb3JyZWN0bHkgYnkgc3BlY2lmaW5nIHNldHRlcnMgaW4gY3NzSG9va3MsCisJCQkvLyBidXQgaXQgd291bGQgbWVhbiB0byBkZWZpbmUgZWlnaHQKKwkJCS8vIChmb3IgZXZlcnkgcHJvYmxlbWF0aWMgcHJvcGVydHkpIGlkZW50aWNhbCBmdW5jdGlvbnMKKwkJCWlmICggIXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlICYmIHZhbHVlID09PSAiIiAmJiBuYW1lLmluZGV4T2YoICJiYWNrZ3JvdW5kIiApID09PSAwICkgeworCQkJCXN0eWxlWyBuYW1lIF0gPSAiaW5oZXJpdCI7CisJCQl9CisKKwkJCS8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZQorCQkJaWYgKCAhaG9va3MgfHwgISggInNldCIgaW4gaG9va3MgKSB8fAorCQkJCSggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHsKKworCQkJCS8vIFN1cHBvcnQ6IElFCisJCQkJLy8gU3dhbGxvdyBlcnJvcnMgZnJvbSAnaW52YWxpZCcgQ1NTIHZhbHVlcyAoIzU1MDkpCisJCQkJdHJ5IHsKKwkJCQkJc3R5bGVbIG5hbWUgXSA9IHZhbHVlOworCQkJCX0gY2F0Y2ggKCBlICkge30KKwkJCX0KKworCQl9IGVsc2UgeworCisJCQkvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmUKKwkJCWlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYKKwkJCQkoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkgeworCisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKworCQkJLy8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3QKKwkJCXJldHVybiBzdHlsZVsgbmFtZSBdOworCQl9CisJfSwKKworCWNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMgKSB7CisJCXZhciBudW0sIHZhbCwgaG9va3MsCisJCQlvcmlnTmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKTsKKworCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUKKwkJbmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSB8fAorCQkJKCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggb3JpZ05hbWUgKSB8fCBvcmlnTmFtZSApOworCisJCS8vIGdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24KKwkJLy8gZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgdmVyc2lvbgorCQlob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTsKKworCQkvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZQorCQlpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICkgeworCQkJdmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApOworCQl9CisKKwkJLy8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXQKKwkJaWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHsKKwkJCXZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7CisJCX0KKworCQkvL2NvbnZlcnQgIm5vcm1hbCIgdG8gY29tcHV0ZWQgdmFsdWUKKwkJaWYgKCB2YWwgPT09ICJub3JtYWwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkgeworCQkJdmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07CisJCX0KKworCQkvLyBSZXR1cm4sIGNvbnZlcnRpbmcgdG8gbnVtYmVyIGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1lcmljCisJCWlmICggZXh0cmEgPT09ICIiIHx8IGV4dHJhICkgeworCQkJbnVtID0gcGFyc2VGbG9hdCggdmFsICk7CisJCQlyZXR1cm4gZXh0cmEgPT09IHRydWUgfHwgaXNGaW5pdGUoIG51bSApID8gbnVtIHx8IDAgOiB2YWw7CisJCX0KKwkJcmV0dXJuIHZhbDsKKwl9Cit9ICk7CisKK2pRdWVyeS5lYWNoKCBbICJoZWlnaHQiLCAid2lkdGgiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworCWpRdWVyeS5jc3NIb29rc1sgbmFtZSBdID0geworCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7CisJCQlpZiAoIGNvbXB1dGVkICkgeworCisJCQkJLy8gY2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1lbnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtCisJCQkJLy8gaG93ZXZlciwgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIHRoaXMKKwkJCQlyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApICkgJiYKKwkJCQkJZWxlbS5vZmZzZXRXaWR0aCA9PT0gMCA/CisJCQkJCQlzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHsKKwkJCQkJCQlyZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKTsKKwkJCQkJCX0gKSA6CisJCQkJCQlnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApOworCQkJfQorCQl9LAorCisJCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHsKKwkJCXZhciBzdHlsZXMgPSBleHRyYSAmJiBnZXRTdHlsZXMoIGVsZW0gKTsKKwkJCXJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIGV4dHJhID8KKwkJCQlhdWdtZW50V2lkdGhPckhlaWdodCgKKwkJCQkJZWxlbSwKKwkJCQkJbmFtZSwKKwkJCQkJZXh0cmEsCisJCQkJCXN1cHBvcnQuYm94U2l6aW5nICYmCisJCQkJCQlqUXVlcnkuY3NzKCBlbGVtLCAiYm94U2l6aW5nIiwgZmFsc2UsIHN0eWxlcyApID09PSAiYm9yZGVyLWJveCIsCisJCQkJCXN0eWxlcworCQkJCSkgOiAwCisJCQkpOworCQl9CisJfTsKK30gKTsKKworaWYgKCAhc3VwcG9ydC5vcGFjaXR5ICkgeworCWpRdWVyeS5jc3NIb29rcy5vcGFjaXR5ID0geworCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKKworCQkJLy8gSUUgdXNlcyBmaWx0ZXJzIGZvciBvcGFjaXR5CisJCQlyZXR1cm4gcm9wYWNpdHkudGVzdCggKCBjb21wdXRlZCAmJiBlbGVtLmN1cnJlbnRTdHlsZSA/CisJCQkJZWxlbS5jdXJyZW50U3R5bGUuZmlsdGVyIDoKKwkJCQllbGVtLnN0eWxlLmZpbHRlciApIHx8ICIiICkgPworCQkJCQkoIDAuMDEgKiBwYXJzZUZsb2F0KCBSZWdFeHAuJDEgKSApICsgIiIgOgorCQkJCQljb21wdXRlZCA/ICIxIiA6ICIiOworCQl9LAorCisJCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgeworCQkJdmFyIHN0eWxlID0gZWxlbS5zdHlsZSwKKwkJCQljdXJyZW50U3R5bGUgPSBlbGVtLmN1cnJlbnRTdHlsZSwKKwkJCQlvcGFjaXR5ID0galF1ZXJ5LmlzTnVtZXJpYyggdmFsdWUgKSA/ICJhbHBoYShvcGFjaXR5PSIgKyB2YWx1ZSAqIDEwMCArICIpIiA6ICIiLAorCQkJCWZpbHRlciA9IGN1cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUuZmlsdGVyIHx8IHN0eWxlLmZpbHRlciB8fCAiIjsKKworCQkJLy8gSUUgaGFzIHRyb3VibGUgd2l0aCBvcGFjaXR5IGlmIGl0IGRvZXMgbm90IGhhdmUgbGF5b3V0CisJCQkvLyBGb3JjZSBpdCBieSBzZXR0aW5nIHRoZSB6b29tIGxldmVsCisJCQlzdHlsZS56b29tID0gMTsKKworCQkJLy8gaWYgc2V0dGluZyBvcGFjaXR5IHRvIDEsIGFuZCBubyBvdGhlciBmaWx0ZXJzIGV4aXN0IC0KKwkJCS8vIGF0dGVtcHQgdG8gcmVtb3ZlIGZpbHRlciBhdHRyaWJ1dGUgIzY2NTIKKwkJCS8vIGlmIHZhbHVlID09PSAiIiwgdGhlbiByZW1vdmUgaW5saW5lIG9wYWNpdHkgIzEyNjg1CisJCQlpZiAoICggdmFsdWUgPj0gMSB8fCB2YWx1ZSA9PT0gIiIgKSAmJgorCQkJCQlqUXVlcnkudHJpbSggZmlsdGVyLnJlcGxhY2UoIHJhbHBoYSwgIiIgKSApID09PSAiIiAmJgorCQkJCQlzdHlsZS5yZW1vdmVBdHRyaWJ1dGUgKSB7CisKKwkJCQkvLyBTZXR0aW5nIHN0eWxlLmZpbHRlciB0byBudWxsLCAiIiAmICIgIiBzdGlsbCBsZWF2ZSAiZmlsdGVyOiIgaW4gdGhlIGNzc1RleHQKKwkJCQkvLyBpZiAiZmlsdGVyOiIgaXMgcHJlc2VudCBhdCBhbGwsIGNsZWFyVHlwZSBpcyBkaXNhYmxlZCwgd2Ugd2FudCB0byBhdm9pZCB0aGlzCisJCQkJLy8gc3R5bGUucmVtb3ZlQXR0cmlidXRlIGlzIElFIE9ubHksIGJ1dCBzbyBhcHBhcmVudGx5IGlzIHRoaXMgY29kZSBwYXRoLi4uCisJCQkJc3R5bGUucmVtb3ZlQXR0cmlidXRlKCAiZmlsdGVyIiApOworCisJCQkJLy8gaWYgdGhlcmUgaXMgbm8gZmlsdGVyIHN0eWxlIGFwcGxpZWQgaW4gYSBjc3MgcnVsZQorCQkJCS8vIG9yIHVuc2V0IGlubGluZSBvcGFjaXR5LCB3ZSBhcmUgZG9uZQorCQkJCWlmICggdmFsdWUgPT09ICIiIHx8IGN1cnJlbnRTdHlsZSAmJiAhY3VycmVudFN0eWxlLmZpbHRlciApIHsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCX0KKworCQkJLy8gb3RoZXJ3aXNlLCBzZXQgbmV3IGZpbHRlciB2YWx1ZXMKKwkJCXN0eWxlLmZpbHRlciA9IHJhbHBoYS50ZXN0KCBmaWx0ZXIgKSA/CisJCQkJZmlsdGVyLnJlcGxhY2UoIHJhbHBoYSwgb3BhY2l0eSApIDoKKwkJCQlmaWx0ZXIgKyAiICIgKyBvcGFjaXR5OworCQl9CisJfTsKK30KKworalF1ZXJ5LmNzc0hvb2tzLm1hcmdpblJpZ2h0ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHQsCisJZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgeworCQlpZiAoIGNvbXB1dGVkICkgeworCQkJcmV0dXJuIHN3YXAoIGVsZW0sIHsgImRpc3BsYXkiOiAiaW5saW5lLWJsb2NrIiB9LAorCQkJCWN1ckNTUywgWyBlbGVtLCAibWFyZ2luUmlnaHQiIF0gKTsKKwkJfQorCX0KKyk7CisKK2pRdWVyeS5jc3NIb29rcy5tYXJnaW5MZWZ0ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luTGVmdCwKKwlmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CisJCWlmICggY29tcHV0ZWQgKSB7CisJCQlyZXR1cm4gKAorCQkJCXBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgIm1hcmdpbkxlZnQiICkgKSB8fAorCisJCQkJLy8gU3VwcG9ydDogSUU8PTExKworCQkJCS8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yCisJCQkJLy8gU3VwcG9ydDogSUU4IG9ubHkKKwkJCQkvLyBnZXRDbGllbnRSZWN0cygpIGVycm9ycyBvbiBkaXNjb25uZWN0ZWQgZWxlbXMKKwkJCQkoIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgPworCQkJCQllbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLQorCQkJCQkJc3dhcCggZWxlbSwgeyBtYXJnaW5MZWZ0OiAwIH0sIGZ1bmN0aW9uKCkgeworCQkJCQkJCXJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7CisJCQkJCQl9ICkgOgorCQkJCQkwCisJCQkJKQorCQkJKSArICJweCI7CisJCX0KKwl9CispOworCisvLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9wZXJ0aWVzCitqUXVlcnkuZWFjaCggeworCW1hcmdpbjogIiIsCisJcGFkZGluZzogIiIsCisJYm9yZGVyOiAiV2lkdGgiCit9LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7CisJalF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHsKKwkJZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7CisJCQl2YXIgaSA9IDAsCisJCQkJZXhwYW5kZWQgPSB7fSwKKworCQkJCS8vIGFzc3VtZXMgYSBzaW5nbGUgbnVtYmVyIGlmIG5vdCBhIHN0cmluZworCQkJCXBhcnRzID0gdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiA/IHZhbHVlLnNwbGl0KCAiICIgKSA6IFsgdmFsdWUgXTsKKworCQkJZm9yICggOyBpIDwgNDsgaSsrICkgeworCQkJCWV4cGFuZGVkWyBwcmVmaXggKyBjc3NFeHBhbmRbIGkgXSArIHN1ZmZpeCBdID0KKwkJCQkJcGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdOworCQkJfQorCisJCQlyZXR1cm4gZXhwYW5kZWQ7CisJCX0KKwl9OworCisJaWYgKCAhcm1hcmdpbi50ZXN0KCBwcmVmaXggKSApIHsKKwkJalF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjsKKwl9Cit9ICk7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKwljc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKwkJcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgeworCQkJdmFyIHN0eWxlcywgbGVuLAorCQkJCW1hcCA9IHt9LAorCQkJCWkgPSAwOworCisJCQlpZiAoIGpRdWVyeS5pc0FycmF5KCBuYW1lICkgKSB7CisJCQkJc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICk7CisJCQkJbGVuID0gbmFtZS5sZW5ndGg7CisKKwkJCQlmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKwkJCQkJbWFwWyBuYW1lWyBpIF0gXSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWVbIGkgXSwgZmFsc2UsIHN0eWxlcyApOworCQkJCX0KKworCQkJCXJldHVybiBtYXA7CisJCQl9CisKKwkJCXJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8KKwkJCQlqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOgorCQkJCWpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTsKKwkJfSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7CisJfSwKKwlzaG93OiBmdW5jdGlvbigpIHsKKwkJcmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7CisJfSwKKwloaWRlOiBmdW5jdGlvbigpIHsKKwkJcmV0dXJuIHNob3dIaWRlKCB0aGlzICk7CisJfSwKKwl0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHsKKwkJaWYgKCB0eXBlb2Ygc3RhdGUgPT09ICJib29sZWFuIiApIHsKKwkJCXJldHVybiBzdGF0ZSA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7CisJCX0KKworCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKwkJCWlmICggaXNIaWRkZW4oIHRoaXMgKSApIHsKKwkJCQlqUXVlcnkoIHRoaXMgKS5zaG93KCk7CisJCQl9IGVsc2UgeworCQkJCWpRdWVyeSggdGhpcyApLmhpZGUoKTsKKwkJCX0KKwkJfSApOworCX0KK30gKTsKKworCitmdW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKSB7CisJcmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTsKK30KK2pRdWVyeS5Ud2VlbiA9IFR3ZWVuOworCitUd2Vlbi5wcm90b3R5cGUgPSB7CisJY29uc3RydWN0b3I6IFR3ZWVuLAorCWluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZywgdW5pdCApIHsKKwkJdGhpcy5lbGVtID0gZWxlbTsKKwkJdGhpcy5wcm9wID0gcHJvcDsKKwkJdGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgalF1ZXJ5LmVhc2luZy5fZGVmYXVsdDsKKwkJdGhpcy5vcHRpb25zID0gb3B0aW9uczsKKwkJdGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTsKKwkJdGhpcy5lbmQgPSBlbmQ7CisJCXRoaXMudW5pdCA9IHVuaXQgfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyAiIiA6ICJweCIgKTsKKwl9LAorCWN1cjogZnVuY3Rpb24oKSB7CisJCXZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07CisKKwkJcmV0dXJuIGhvb2tzICYmIGhvb2tzLmdldCA/CisJCQlob29rcy5nZXQoIHRoaXMgKSA6CisJCQlUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0aGlzICk7CisJfSwKKwlydW46IGZ1bmN0aW9uKCBwZXJjZW50ICkgeworCQl2YXIgZWFzZWQsCisJCQlob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07CisKKwkJaWYgKCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKSB7CisJCQl0aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXSgKKwkJCQlwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb24KKwkJCSk7CisJCX0gZWxzZSB7CisJCQl0aGlzLnBvcyA9IGVhc2VkID0gcGVyY2VudDsKKwkJfQorCQl0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7CisKKwkJaWYgKCB0aGlzLm9wdGlvbnMuc3RlcCApIHsKKwkJCXRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTsKKwkJfQorCisJCWlmICggaG9va3MgJiYgaG9va3Muc2V0ICkgeworCQkJaG9va3Muc2V0KCB0aGlzICk7CisJCX0gZWxzZSB7CisJCQlUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7CisJCX0KKwkJcmV0dXJuIHRoaXM7CisJfQorfTsKKworVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0gVHdlZW4ucHJvdG90eXBlOworCitUd2Vlbi5wcm9wSG9va3MgPSB7CisJX2RlZmF1bHQ6IHsKKwkJZ2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7CisJCQl2YXIgcmVzdWx0OworCisJCQkvLyBVc2UgYSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBkaXJlY3RseSB3aGVuIGl0IGlzIG5vdCBhIERPTSBlbGVtZW50LAorCQkJLy8gb3Igd2hlbiB0aGVyZSBpcyBubyBtYXRjaGluZyBzdHlsZSBwcm9wZXJ0eSB0aGF0IGV4aXN0cy4KKwkJCWlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAhPT0gMSB8fAorCQkJCXR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAhPSBudWxsICYmIHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9PSBudWxsICkgeworCQkJCXJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07CisJCQl9CisKKwkJCS8vIHBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseQorCQkJLy8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscworCQkJLy8gc28sIHNpbXBsZSB2YWx1ZXMgc3VjaCBhcyAiMTBweCIgYXJlIHBhcnNlZCB0byBGbG9hdC4KKwkJCS8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMgInJvdGF0ZSgxcmFkKSIgYXJlIHJldHVybmVkIGFzIGlzLgorCQkJcmVzdWx0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgIiIgKTsKKworCQkJLy8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCAiYXV0byIgYXJlIGNvbnZlcnRlZCB0byAwLgorCQkJcmV0dXJuICFyZXN1bHQgfHwgcmVzdWx0ID09PSAiYXV0byIgPyAwIDogcmVzdWx0OworCQl9LAorCQlzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHsKKworCQkJLy8gdXNlIHN0ZXAgaG9vayBmb3IgYmFjayBjb21wYXQgLSB1c2UgY3NzSG9vayBpZiBpdHMgdGhlcmUgLSB1c2UgLnN0eWxlIGlmIGl0cworCQkJLy8gYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUKKwkJCWlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHsKKwkJCQlqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApOworCQkJfSBlbHNlIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSA9PT0gMSAmJgorCQkJCSggdHdlZW4uZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1Byb3BzWyB0d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8CisJCQkJCWpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdICkgKSB7CisJCQkJalF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7CisJCQl9IGVsc2UgeworCQkJCXR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdzsKKwkJCX0KKwkJfQorCX0KK307CisKKy8vIFN1cHBvcnQ6IElFIDw9OQorLy8gUGFuaWMgYmFzZWQgYXBwcm9hY2ggdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzCisKK1R3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHsKKwlzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHsKKwkJaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHsKKwkJCXR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdzsKKwkJfQorCX0KK307CisKK2pRdWVyeS5lYXNpbmcgPSB7CisJbGluZWFyOiBmdW5jdGlvbiggcCApIHsKKwkJcmV0dXJuIHA7CisJfSwKKwlzd2luZzogZnVuY3Rpb24oIHAgKSB7CisJCXJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7CisJfSwKKwlfZGVmYXVsdDogInN3aW5nIgorfTsKKworalF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmluaXQ7CisKKy8vIEJhY2sgQ29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50CitqUXVlcnkuZnguc3RlcCA9IHt9OworCisKKworCit2YXIKKwlmeE5vdywgdGltZXJJZCwKKwlyZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLywKKwlycnVuID0gL3F1ZXVlSG9va3MkLzsKKworLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseQorZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7CisJd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgeworCQlmeE5vdyA9IHVuZGVmaW5lZDsKKwl9ICk7CisJcmV0dXJuICggZnhOb3cgPSBqUXVlcnkubm93KCkgKTsKK30KKworLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb24KK2Z1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7CisJdmFyIHdoaWNoLAorCQlhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH0sCisJCWkgPSAwOworCisJLy8gaWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLAorCS8vIGlmIHdlIGRvbid0IGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVmdCBhbmQgUmlnaHQKKwlpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDsKKwlmb3IgKCA7IGkgPCA0IDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkgeworCQl3aGljaCA9IGNzc0V4cGFuZFsgaSBdOworCQlhdHRyc1sgIm1hcmdpbiIgKyB3aGljaCBdID0gYXR0cnNbICJwYWRkaW5nIiArIHdoaWNoIF0gPSB0eXBlOworCX0KKworCWlmICggaW5jbHVkZVdpZHRoICkgeworCQlhdHRycy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlOworCX0KKworCXJldHVybiBhdHRyczsKK30KKworZnVuY3Rpb24gY3JlYXRlVHdlZW4oIHZhbHVlLCBwcm9wLCBhbmltYXRpb24gKSB7CisJdmFyIHR3ZWVuLAorCQljb2xsZWN0aW9uID0gKCBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggQW5pbWF0aW9uLnR3ZWVuZXJzWyAiKiIgXSApLAorCQlpbmRleCA9IDAsCisJCWxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoOworCWZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7CisJCWlmICggKCB0d2VlbiA9IGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9wLCB2YWx1ZSApICkgKSB7CisKKwkJCS8vIHdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5CisJCQlyZXR1cm4gdHdlZW47CisJCX0KKwl9Cit9CisKK2Z1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkgeworCS8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi8KKwl2YXIgcHJvcCwgdmFsdWUsIHRvZ2dsZSwgdHdlZW4sIGhvb2tzLCBvbGRmaXJlLCBkaXNwbGF5LCBjaGVja0Rpc3BsYXksCisJCWFuaW0gPSB0aGlzLAorCQlvcmlnID0ge30sCisJCXN0eWxlID0gZWxlbS5zdHlsZSwKKwkJaGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbiggZWxlbSApLAorCQlkYXRhU2hvdyA9IGpRdWVyeS5fZGF0YSggZWxlbSwgImZ4c2hvdyIgKTsKKworCS8vIGhhbmRsZSBxdWV1ZTogZmFsc2UgcHJvbWlzZXMKKwlpZiAoICFvcHRzLnF1ZXVlICkgeworCQlob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgImZ4IiApOworCQlpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7CisJCQlob29rcy51bnF1ZXVlZCA9IDA7CisJCQlvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTsKKwkJCWhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHsKKwkJCQlpZiAoICFob29rcy51bnF1ZXVlZCApIHsKKwkJCQkJb2xkZmlyZSgpOworCQkJCX0KKwkJCX07CisJCX0KKwkJaG9va3MudW5xdWV1ZWQrKzsKKworCQlhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7CisKKwkJCS8vIGRvaW5nIHRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBjb21wbGV0ZSBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkCisJCQkvLyBiZWZvcmUgdGhpcyBjb21wbGV0ZXMKKwkJCWFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHsKKwkJCQlob29rcy51bnF1ZXVlZC0tOworCQkJCWlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgImZ4IiApLmxlbmd0aCApIHsKKwkJCQkJaG9va3MuZW1wdHkuZmlyZSgpOworCQkJCX0KKwkJCX0gKTsKKwkJfSApOworCX0KKworCS8vIGhlaWdodC93aWR0aCBvdmVyZmxvdyBwYXNzCisJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICggImhlaWdodCIgaW4gcHJvcHMgfHwgIndpZHRoIiBpbiBwcm9wcyApICkgeworCisJCS8vIE1ha2Ugc3VyZSB0aGF0IG5vdGhpbmcgc25lYWtzIG91dAorCQkvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90CisJCS8vIGNoYW5nZSB0aGUgb3ZlcmZsb3cgYXR0cmlidXRlIHdoZW4gb3ZlcmZsb3dYIGFuZAorCQkvLyBvdmVyZmxvd1kgYXJlIHNldCB0byB0aGUgc2FtZSB2YWx1ZQorCQlvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTsKKworCQkvLyBTZXQgZGlzcGxheSBwcm9wZXJ0eSB0byBpbmxpbmUtYmxvY2sgZm9yIGhlaWdodC93aWR0aAorCQkvLyBhbmltYXRpb25zIG9uIGlubGluZSBlbGVtZW50cyB0aGF0IGFyZSBoYXZpbmcgd2lkdGgvaGVpZ2h0IGFuaW1hdGVkCisJCWRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKTsKKworCQkvLyBUZXN0IGRlZmF1bHQgZGlzcGxheSBpZiBkaXNwbGF5IGlzIGN1cnJlbnRseSAibm9uZSIKKwkJY2hlY2tEaXNwbGF5ID0gZGlzcGxheSA9PT0gIm5vbmUiID8KKwkJCWpRdWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiICkgfHwgZGVmYXVsdERpc3BsYXkoIGVsZW0ubm9kZU5hbWUgKSA6IGRpc3BsYXk7CisKKwkJaWYgKCBjaGVja0Rpc3BsYXkgPT09ICJpbmxpbmUiICYmIGpRdWVyeS5jc3MoIGVsZW0sICJmbG9hdCIgKSA9PT0gIm5vbmUiICkgeworCisJCQkvLyBpbmxpbmUtbGV2ZWwgZWxlbWVudHMgYWNjZXB0IGlubGluZS1ibG9jazsKKwkJCS8vIGJsb2NrLWxldmVsIGVsZW1lbnRzIG5lZWQgdG8gYmUgaW5saW5lIHdpdGggbGF5b3V0CisJCQlpZiAoICFzdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXQgfHwgZGVmYXVsdERpc3BsYXkoIGVsZW0ubm9kZU5hbWUgKSA9PT0gImlubGluZSIgKSB7CisJCQkJc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUtYmxvY2siOworCQkJfSBlbHNlIHsKKwkJCQlzdHlsZS56b29tID0gMTsKKwkJCX0KKwkJfQorCX0KKworCWlmICggb3B0cy5vdmVyZmxvdyApIHsKKwkJc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKKwkJaWYgKCAhc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzKCkgKSB7CisJCQlhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7CisJCQkJc3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07CisJCQkJc3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdOworCQkJCXN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTsKKwkJCX0gKTsKKwkJfQorCX0KKworCS8vIHNob3cvaGlkZSBwYXNzCisJZm9yICggcHJvcCBpbiBwcm9wcyApIHsKKwkJdmFsdWUgPSBwcm9wc1sgcHJvcCBdOworCQlpZiAoIHJmeHR5cGVzLmV4ZWMoIHZhbHVlICkgKSB7CisJCQlkZWxldGUgcHJvcHNbIHByb3AgXTsKKwkJCXRvZ2dsZSA9IHRvZ2dsZSB8fCB2YWx1ZSA9PT0gInRvZ2dsZSI7CisJCQlpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/ICJoaWRlIiA6ICJzaG93IiApICkgeworCisJCQkJLy8gSWYgdGhlcmUgaXMgZGF0YVNob3cgbGVmdCBvdmVyIGZyb20gYSBzdG9wcGVkIGhpZGUgb3Igc2hvdworCQkJCS8vIGFuZCB3ZSBhcmUgZ29pbmcgdG8gcHJvY2VlZCB3aXRoIHNob3csIHdlIHNob3VsZCBwcmV0ZW5kIHRvIGJlIGhpZGRlbgorCQkJCWlmICggdmFsdWUgPT09ICJzaG93IiAmJiBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdICE9PSB1bmRlZmluZWQgKSB7CisJCQkJCWhpZGRlbiA9IHRydWU7CisJCQkJfSBlbHNlIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJb3JpZ1sgcHJvcCBdID0gZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTsKKworCQkvLyBBbnkgbm9uLWZ4IHZhbHVlIHN0b3BzIHVzIGZyb20gcmVzdG9yaW5nIHRoZSBvcmlnaW5hbCBkaXNwbGF5IHZhbHVlCisJCX0gZWxzZSB7CisJCQlkaXNwbGF5ID0gdW5kZWZpbmVkOworCQl9CisJfQorCisJaWYgKCAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9yaWcgKSApIHsKKwkJaWYgKCBkYXRhU2hvdyApIHsKKwkJCWlmICggImhpZGRlbiIgaW4gZGF0YVNob3cgKSB7CisJCQkJaGlkZGVuID0gZGF0YVNob3cuaGlkZGVuOworCQkJfQorCQl9IGVsc2UgeworCQkJZGF0YVNob3cgPSBqUXVlcnkuX2RhdGEoIGVsZW0sICJmeHNob3ciLCB7fSApOworCQl9CisKKwkJLy8gc3RvcmUgc3RhdGUgaWYgaXRzIHRvZ2dsZSAtIGVuYWJsZXMgLnN0b3AoKS50b2dnbGUoKSB0byAicmV2ZXJzZSIKKwkJaWYgKCB0b2dnbGUgKSB7CisJCQlkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuOworCQl9CisJCWlmICggaGlkZGVuICkgeworCQkJalF1ZXJ5KCBlbGVtICkuc2hvdygpOworCQl9IGVsc2UgeworCQkJYW5pbS5kb25lKCBmdW5jdGlvbigpIHsKKwkJCQlqUXVlcnkoIGVsZW0gKS5oaWRlKCk7CisJCQl9ICk7CisJCX0KKwkJYW5pbS5kb25lKCBmdW5jdGlvbigpIHsKKwkJCXZhciBwcm9wOworCQkJalF1ZXJ5Ll9yZW1vdmVEYXRhKCBlbGVtLCAiZnhzaG93IiApOworCQkJZm9yICggcHJvcCBpbiBvcmlnICkgeworCQkJCWpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7CisJCQl9CisJCX0gKTsKKwkJZm9yICggcHJvcCBpbiBvcmlnICkgeworCQkJdHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTsKKworCQkJaWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7CisJCQkJZGF0YVNob3dbIHByb3AgXSA9IHR3ZWVuLnN0YXJ0OworCQkJCWlmICggaGlkZGVuICkgeworCQkJCQl0d2Vlbi5lbmQgPSB0d2Vlbi5zdGFydDsKKwkJCQkJdHdlZW4uc3RhcnQgPSBwcm9wID09PSAid2lkdGgiIHx8IHByb3AgPT09ICJoZWlnaHQiID8gMSA6IDA7CisJCQkJfQorCQkJfQorCQl9CisKKwkvLyBJZiB0aGlzIGlzIGEgbm9vcCBsaWtlIC5oaWRlKCkuaGlkZSgpLCByZXN0b3JlIGFuIG92ZXJ3cml0dGVuIGRpc3BsYXkgdmFsdWUKKwl9IGVsc2UgaWYgKCAoIGRpc3BsYXkgPT09ICJub25lIiA/IGRlZmF1bHREaXNwbGF5KCBlbGVtLm5vZGVOYW1lICkgOiBkaXNwbGF5ICkgPT09ICJpbmxpbmUiICkgeworCQlzdHlsZS5kaXNwbGF5ID0gZGlzcGxheTsKKwl9Cit9CisKK2Z1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkgeworCXZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7CisKKwkvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcgYW5kIGV4cGFuZCBjc3NIb29rIHBhc3MKKwlmb3IgKCBpbmRleCBpbiBwcm9wcyApIHsKKwkJbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIGluZGV4ICk7CisJCWVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTsKKwkJdmFsdWUgPSBwcm9wc1sgaW5kZXggXTsKKwkJaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsdWUgKSApIHsKKwkJCWVhc2luZyA9IHZhbHVlWyAxIF07CisJCQl2YWx1ZSA9IHByb3BzWyBpbmRleCBdID0gdmFsdWVbIDAgXTsKKwkJfQorCisJCWlmICggaW5kZXggIT09IG5hbWUgKSB7CisJCQlwcm9wc1sgbmFtZSBdID0gdmFsdWU7CisJCQlkZWxldGUgcHJvcHNbIGluZGV4IF07CisJCX0KKworCQlob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdOworCQlpZiAoIGhvb2tzICYmICJleHBhbmQiIGluIGhvb2tzICkgeworCQkJdmFsdWUgPSBob29rcy5leHBhbmQoIHZhbHVlICk7CisJCQlkZWxldGUgcHJvcHNbIG5hbWUgXTsKKworCQkJLy8gbm90IHF1aXRlICQuZXh0ZW5kLCB0aGlzIHdvbnQgb3ZlcndyaXRlIGtleXMgYWxyZWFkeSBwcmVzZW50LgorCQkJLy8gYWxzbyAtIHJldXNpbmcgJ2luZGV4JyBmcm9tIGFib3ZlIGJlY2F1c2Ugd2UgaGF2ZSB0aGUgY29ycmVjdCAibmFtZSIKKwkJCWZvciAoIGluZGV4IGluIHZhbHVlICkgeworCQkJCWlmICggISggaW5kZXggaW4gcHJvcHMgKSApIHsKKwkJCQkJcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTsKKwkJCQkJc3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZzsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7CisJCX0KKwl9Cit9CisKK2Z1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHsKKwl2YXIgcmVzdWx0LAorCQlzdG9wcGVkLAorCQlpbmRleCA9IDAsCisJCWxlbmd0aCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzLmxlbmd0aCwKKwkJZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkgeworCisJCQkvLyBkb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3IKKwkJCWRlbGV0ZSB0aWNrLmVsZW07CisJCX0gKSwKKwkJdGljayA9IGZ1bmN0aW9uKCkgeworCQkJaWYgKCBzdG9wcGVkICkgeworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJCXZhciBjdXJyZW50VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksCisJCQkJcmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLAorCisJCQkJLy8gU3VwcG9ydDogQW5kcm9pZCAyLjMKKwkJCQkvLyBBcmNoYWljIGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgYDEgLSAoIDAuNSB8fCAwIClgICgjMTI0OTcpCisJCQkJdGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLAorCQkJCXBlcmNlbnQgPSAxIC0gdGVtcCwKKwkJCQlpbmRleCA9IDAsCisJCQkJbGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7CisKKwkJCWZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkgeworCQkJCWFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7CisJCQl9CisKKwkJCWRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSApOworCisJCQlpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHsKKwkJCQlyZXR1cm4gcmVtYWluaW5nOworCQkJfSBlbHNlIHsKKwkJCQlkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfSwKKwkJYW5pbWF0aW9uID0gZGVmZXJyZWQucHJvbWlzZSggeworCQkJZWxlbTogZWxlbSwKKwkJCXByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcGVydGllcyApLAorCQkJb3B0czogalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgeworCQkJCXNwZWNpYWxFYXNpbmc6IHt9LAorCQkJCWVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdAorCQkJfSwgb3B0aW9ucyApLAorCQkJb3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLAorCQkJb3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLAorCQkJc3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAorCQkJZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sCisJCQl0d2VlbnM6IFtdLAorCQkJY3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7CisJCQkJdmFyIHR3ZWVuID0galF1ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5kLAorCQkJCQkJYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApOworCQkJCWFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTsKKwkJCQlyZXR1cm4gdHdlZW47CisJCQl9LAorCQkJc3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7CisJCQkJdmFyIGluZGV4ID0gMCwKKworCQkJCQkvLyBpZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnMKKwkJCQkJLy8gb3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBwYXJ0CisJCQkJCWxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7CisJCQkJaWYgKCBzdG9wcGVkICkgeworCQkJCQlyZXR1cm4gdGhpczsKKwkJCQl9CisJCQkJc3RvcHBlZCA9IHRydWU7CisJCQkJZm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7CisJCQkJCWFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7CisJCQkJfQorCisJCQkJLy8gcmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZQorCQkJCS8vIG90aGVyd2lzZSwgcmVqZWN0CisJCQkJaWYgKCBnb3RvRW5kICkgeworCQkJCQlkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7CisJCQkJCWRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7CisJCQkJfSBlbHNlIHsKKwkJCQkJZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApOworCQkJCX0KKwkJCQlyZXR1cm4gdGhpczsKKwkJCX0KKwkJfSApLAorCQlwcm9wcyA9IGFuaW1hdGlvbi5wcm9wczsKKworCXByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7CisKKwlmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKKwkJcmVzdWx0ID0gQW5pbWF0aW9uLnByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMgKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkgeworCQkJCWpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9CisJCQkJCWpRdWVyeS5wcm94eSggcmVzdWx0LnN0b3AsIHJlc3VsdCApOworCQkJfQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCX0KKworCWpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7CisKKwlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkgeworCQlhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTsKKwl9CisKKwlqUXVlcnkuZngudGltZXIoCisJCWpRdWVyeS5leHRlbmQoIHRpY2ssIHsKKwkJCWVsZW06IGVsZW0sCisJCQlhbmltOiBhbmltYXRpb24sCisJCQlxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWUKKwkJfSApCisJKTsKKworCS8vIGF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zCisJcmV0dXJuIGFuaW1hdGlvbi5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3MgKQorCQkuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKQorCQkuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApCisJCS5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5cyApOworfQorCitqUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7CisKKwl0d2VlbmVyczogeworCQkiKiI6IFsgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkgeworCQkJdmFyIHR3ZWVuID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKTsKKwkJCWFkanVzdENTUyggdHdlZW4uZWxlbSwgcHJvcCwgcmNzc051bS5leGVjKCB2YWx1ZSApLCB0d2VlbiApOworCQkJcmV0dXJuIHR3ZWVuOworCQl9IF0KKwl9LAorCisJdHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHsKKwkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcHJvcHMgKSApIHsKKwkJCWNhbGxiYWNrID0gcHJvcHM7CisJCQlwcm9wcyA9IFsgIioiIF07CisJCX0gZWxzZSB7CisJCQlwcm9wcyA9IHByb3BzLm1hdGNoKCBybm90d2hpdGUgKTsKKwkJfQorCisJCXZhciBwcm9wLAorCQkJaW5kZXggPSAwLAorCQkJbGVuZ3RoID0gcHJvcHMubGVuZ3RoOworCisJCWZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkgeworCQkJcHJvcCA9IHByb3BzWyBpbmRleCBdOworCQkJQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gPSBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXTsKKwkJCUFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7CisJCX0KKwl9LAorCisJcHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sCisKKwlwcmVmaWx0ZXI6IGZ1bmN0aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHsKKwkJaWYgKCBwcmVwZW5kICkgeworCQkJQW5pbWF0aW9uLnByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTsKKwkJfSBlbHNlIHsKKwkJCUFuaW1hdGlvbi5wcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7CisJCX0KKwl9Cit9ICk7CisKK2pRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHsKKwl2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSAib2JqZWN0IiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDogeworCQljb21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fAorCQkJalF1ZXJ5LmlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsCisJCWR1cmF0aW9uOiBzcGVlZCwKKwkJZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFqUXVlcnkuaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nCisJfTsKKworCW9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5vZmYgPyAwIDogdHlwZW9mIG9wdC5kdXJhdGlvbiA9PT0gIm51bWJlciIgPyBvcHQuZHVyYXRpb24gOgorCQlvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyA/CisJCQlqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXSA6IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7CisKKwkvLyBub3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiAiZngiCisJaWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7CisJCW9wdC5xdWV1ZSA9ICJmeCI7CisJfQorCisJLy8gUXVldWVpbmcKKwlvcHQub2xkID0gb3B0LmNvbXBsZXRlOworCisJb3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CisJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHsKKwkJCW9wdC5vbGQuY2FsbCggdGhpcyApOworCQl9CisKKwkJaWYgKCBvcHQucXVldWUgKSB7CisJCQlqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7CisJCX0KKwl9OworCisJcmV0dXJuIG9wdDsKK307CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKwlmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8sIGVhc2luZywgY2FsbGJhY2sgKSB7CisKKwkJLy8gc2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwCisJCXJldHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW4gKS5jc3MoICJvcGFjaXR5IiwgMCApLnNob3coKQorCisJCQkvLyBhbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQKKwkJCS5lbmQoKS5hbmltYXRlKCB7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7CisJfSwKKwlhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CisJCXZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksCisJCQlvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksCisJCQlkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkgeworCisJCQkJLy8gT3BlcmF0ZSBvbiBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0IGJlIGxvc3QKKwkJCQl2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7CisKKwkJCQkvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHkKKwkJCQlpZiAoIGVtcHR5IHx8IGpRdWVyeS5fZGF0YSggdGhpcywgImZpbmlzaCIgKSApIHsKKwkJCQkJYW5pbS5zdG9wKCB0cnVlICk7CisJCQkJfQorCQkJfTsKKwkJCWRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uOworCisJCXJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID8KKwkJCXRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6CisJCQl0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7CisJfSwKKwlzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xlYXJRdWV1ZSwgZ290b0VuZCApIHsKKwkJdmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHsKKwkJCXZhciBzdG9wID0gaG9va3Muc3RvcDsKKwkJCWRlbGV0ZSBob29rcy5zdG9wOworCQkJc3RvcCggZ290b0VuZCApOworCQl9OworCisJCWlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgeworCQkJZ290b0VuZCA9IGNsZWFyUXVldWU7CisJCQljbGVhclF1ZXVlID0gdHlwZTsKKwkJCXR5cGUgPSB1bmRlZmluZWQ7CisJCX0KKwkJaWYgKCBjbGVhclF1ZXVlICYmIHR5cGUgIT09IGZhbHNlICkgeworCQkJdGhpcy5xdWV1ZSggdHlwZSB8fCAiZngiLCBbXSApOworCQl9CisKKwkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisJCQl2YXIgZGVxdWV1ZSA9IHRydWUsCisJCQkJaW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArICJxdWV1ZUhvb2tzIiwKKwkJCQl0aW1lcnMgPSBqUXVlcnkudGltZXJzLAorCQkJCWRhdGEgPSBqUXVlcnkuX2RhdGEoIHRoaXMgKTsKKworCQkJaWYgKCBpbmRleCApIHsKKwkJCQlpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICkgeworCQkJCQlzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWZvciAoIGluZGV4IGluIGRhdGEgKSB7CisJCQkJCWlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRleCApICkgeworCQkJCQkJc3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7CisJCQkJaWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJgorCQkJCQkoIHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSApIHsKKworCQkJCQl0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7CisJCQkJCWRlcXVldWUgPSBmYWxzZTsKKwkJCQkJdGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTsKKwkJCQl9CisJCQl9CisKKwkJCS8vIHN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQKKwkJCS8vIHRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2ggd2lsbCBkZXF1ZXVlCisJCQkvLyBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZAorCQkJaWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkgeworCQkJCWpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7CisJCQl9CisJCX0gKTsKKwl9LAorCWZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7CisJCWlmICggdHlwZSAhPT0gZmFsc2UgKSB7CisJCQl0eXBlID0gdHlwZSB8fCAiZngiOworCQl9CisJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworCQkJdmFyIGluZGV4LAorCQkJCWRhdGEgPSBqUXVlcnkuX2RhdGEoIHRoaXMgKSwKKwkJCQlxdWV1ZSA9IGRhdGFbIHR5cGUgKyAicXVldWUiIF0sCisJCQkJaG9va3MgPSBkYXRhWyB0eXBlICsgInF1ZXVlSG9va3MiIF0sCisJCQkJdGltZXJzID0galF1ZXJ5LnRpbWVycywKKwkJCQlsZW5ndGggPSBxdWV1ZSA/IHF1ZXVlLmxlbmd0aCA6IDA7CisKKwkJCS8vIGVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGEKKwkJCWRhdGEuZmluaXNoID0gdHJ1ZTsKKworCQkJLy8gZW1wdHkgdGhlIHF1ZXVlIGZpcnN0CisJCQlqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7CisKKwkJCWlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHsKKwkJCQlob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTsKKwkJCX0KKworCQkJLy8gbG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW0KKwkJCWZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7CisJCQkJaWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7CisJCQkJCXRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTsKKwkJCQkJdGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTsKKwkJCQl9CisJCQl9CisKKwkJCS8vIGxvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtCisJCQlmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgeworCQkJCWlmICggcXVldWVbIGluZGV4IF0gJiYgcXVldWVbIGluZGV4IF0uZmluaXNoICkgeworCQkJCQlxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApOworCQkJCX0KKwkJCX0KKworCQkJLy8gdHVybiBvZmYgZmluaXNoaW5nIGZsYWcKKwkJCWRlbGV0ZSBkYXRhLmZpbmlzaDsKKwkJfSApOworCX0KK30gKTsKKworalF1ZXJ5LmVhY2goIFsgInRvZ2dsZSIsICJzaG93IiwgImhpZGUiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworCXZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdOworCWpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgeworCQlyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09ICJib29sZWFuIiA/CisJCQljc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOgorCQkJdGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOworCX07Cit9ICk7CisKKy8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnMKK2pRdWVyeS5lYWNoKCB7CisJc2xpZGVEb3duOiBnZW5GeCggInNob3ciICksCisJc2xpZGVVcDogZ2VuRngoICJoaWRlIiApLAorCXNsaWRlVG9nZ2xlOiBnZW5GeCggInRvZ2dsZSIgKSwKKwlmYWRlSW46IHsgb3BhY2l0eTogInNob3ciIH0sCisJZmFkZU91dDogeyBvcGFjaXR5OiAiaGlkZSIgfSwKKwlmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6ICJ0b2dnbGUiIH0KK30sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHsKKwlqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKKwkJcmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7CisJfTsKK30gKTsKKworalF1ZXJ5LnRpbWVycyA9IFtdOworalF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHsKKwl2YXIgdGltZXIsCisJCXRpbWVycyA9IGpRdWVyeS50aW1lcnMsCisJCWkgPSAwOworCisJZnhOb3cgPSBqUXVlcnkubm93KCk7CisKKwlmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7CisJCXRpbWVyID0gdGltZXJzWyBpIF07CisKKwkJLy8gQ2hlY2tzIHRoZSB0aW1lciBoYXMgbm90IGFscmVhZHkgYmVlbiByZW1vdmVkCisJCWlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkgeworCQkJdGltZXJzLnNwbGljZSggaS0tLCAxICk7CisJCX0KKwl9CisKKwlpZiAoICF0aW1lcnMubGVuZ3RoICkgeworCQlqUXVlcnkuZnguc3RvcCgpOworCX0KKwlmeE5vdyA9IHVuZGVmaW5lZDsKK307CisKK2pRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHsKKwlqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7CisJaWYgKCB0aW1lcigpICkgeworCQlqUXVlcnkuZnguc3RhcnQoKTsKKwl9IGVsc2UgeworCQlqUXVlcnkudGltZXJzLnBvcCgpOworCX0KK307CisKK2pRdWVyeS5meC5pbnRlcnZhbCA9IDEzOworCitqUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHsKKwlpZiAoICF0aW1lcklkICkgeworCQl0aW1lcklkID0gd2luZG93LnNldEludGVydmFsKCBqUXVlcnkuZngudGljaywgalF1ZXJ5LmZ4LmludGVydmFsICk7CisJfQorfTsKKworalF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHsKKwl3aW5kb3cuY2xlYXJJbnRlcnZhbCggdGltZXJJZCApOworCXRpbWVySWQgPSBudWxsOworfTsKKworalF1ZXJ5LmZ4LnNwZWVkcyA9IHsKKwlzbG93OiA2MDAsCisJZmFzdDogMjAwLAorCisJLy8gRGVmYXVsdCBzcGVlZAorCV9kZWZhdWx0OiA0MDAKK307CisKKworLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLgorLy8gaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMDAzMjQwMTQ3NDcvaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5LworalF1ZXJ5LmZuLmRlbGF5ID0gZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7CisJdGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTsKKwl0eXBlID0gdHlwZSB8fCAiZngiOworCisJcmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHsKKwkJdmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCggbmV4dCwgdGltZSApOworCQlob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7CisJCQl3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7CisJCX07CisJfSApOworfTsKKworCisoIGZ1bmN0aW9uKCkgeworCXZhciBhLAorCQlpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJpbnB1dCIgKSwKKwkJZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKSwKKwkJc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInNlbGVjdCIgKSwKKwkJb3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAib3B0aW9uIiApICk7CisKKwkvLyBTZXR1cAorCWRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICk7CisJZGl2LnNldEF0dHJpYnV0ZSggImNsYXNzTmFtZSIsICJ0IiApOworCWRpdi5pbm5lckhUTUwgPSAiICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IjsKKwlhID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiYSIgKVsgMCBdOworCisJLy8gU3VwcG9ydDogV2luZG93cyBXZWIgQXBwcyAoV1dBKQorCS8vIGB0eXBlYCBtdXN0IHVzZSAuc2V0QXR0cmlidXRlIGZvciBXV0EgKCMxNDkwMSkKKwlpbnB1dC5zZXRBdHRyaWJ1dGUoICJ0eXBlIiwgImNoZWNrYm94IiApOworCWRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTsKKworCWEgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJhIiApWyAwIF07CisKKwkvLyBGaXJzdCBiYXRjaCBvZiB0ZXN0cy4KKwlhLnN0eWxlLmNzc1RleHQgPSAidG9wOjFweCI7CisKKwkvLyBUZXN0IHNldEF0dHJpYnV0ZSBvbiBjYW1lbENhc2UgY2xhc3MuCisJLy8gSWYgaXQgd29ya3MsIHdlIG5lZWQgYXR0ckZpeGVzIHdoZW4gZG9pbmcgZ2V0L3NldEF0dHJpYnV0ZSAoaWU2LzcpCisJc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGUgPSBkaXYuY2xhc3NOYW1lICE9PSAidCI7CisKKwkvLyBHZXQgdGhlIHN0eWxlIGluZm9ybWF0aW9uIGZyb20gZ2V0QXR0cmlidXRlCisJLy8gKElFIHVzZXMgLmNzc1RleHQgaW5zdGVhZCkKKwlzdXBwb3J0LnN0eWxlID0gL3RvcC8udGVzdCggYS5nZXRBdHRyaWJ1dGUoICJzdHlsZSIgKSApOworCisJLy8gTWFrZSBzdXJlIHRoYXQgVVJMcyBhcmVuJ3QgbWFuaXB1bGF0ZWQKKwkvLyAoSUUgbm9ybWFsaXplcyBpdCBieSBkZWZhdWx0KQorCXN1cHBvcnQuaHJlZk5vcm1hbGl6ZWQgPSBhLmdldEF0dHJpYnV0ZSggImhyZWYiICkgPT09ICIvYSI7CisKKwkvLyBDaGVjayB0aGUgZGVmYXVsdCBjaGVja2JveC9yYWRpbyB2YWx1ZSAoIiIgb24gV2ViS2l0OyAib24iIGVsc2V3aGVyZSkKKwlzdXBwb3J0LmNoZWNrT24gPSAhIWlucHV0LnZhbHVlOworCisJLy8gTWFrZSBzdXJlIHRoYXQgYSBzZWxlY3RlZC1ieS1kZWZhdWx0IG9wdGlvbiBoYXMgYSB3b3JraW5nIHNlbGVjdGVkIHByb3BlcnR5LgorCS8vIChXZWJLaXQgZGVmYXVsdHMgdG8gZmFsc2UgaW5zdGVhZCBvZiB0cnVlLCBJRSB0b28sIGlmIGl0J3MgaW4gYW4gb3B0Z3JvdXApCisJc3VwcG9ydC5vcHRTZWxlY3RlZCA9IG9wdC5zZWxlY3RlZDsKKworCS8vIFRlc3RzIGZvciBlbmN0eXBlIHN1cHBvcnQgb24gYSBmb3JtICgjNjc0MykKKwlzdXBwb3J0LmVuY3R5cGUgPSAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJmb3JtIiApLmVuY3R5cGU7CisKKwkvLyBNYWtlIHN1cmUgdGhhdCB0aGUgb3B0aW9ucyBpbnNpZGUgZGlzYWJsZWQgc2VsZWN0cyBhcmVuJ3QgbWFya2VkIGFzIGRpc2FibGVkCisJLy8gKFdlYktpdCBtYXJrcyB0aGVtIGFzIGRpc2FibGVkKQorCXNlbGVjdC5kaXNhYmxlZCA9IHRydWU7CisJc3VwcG9ydC5vcHREaXNhYmxlZCA9ICFvcHQuZGlzYWJsZWQ7CisKKwkvLyBTdXBwb3J0OiBJRTggb25seQorCS8vIENoZWNrIGlmIHdlIGNhbiB0cnVzdCBnZXRBdHRyaWJ1dGUoInZhbHVlIikKKwlpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJpbnB1dCIgKTsKKwlpbnB1dC5zZXRBdHRyaWJ1dGUoICJ2YWx1ZSIsICIiICk7CisJc3VwcG9ydC5pbnB1dCA9IGlucHV0LmdldEF0dHJpYnV0ZSggInZhbHVlIiApID09PSAiIjsKKworCS8vIENoZWNrIGlmIGFuIGlucHV0IG1haW50YWlucyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpbworCWlucHV0LnZhbHVlID0gInQiOworCWlucHV0LnNldEF0dHJpYnV0ZSggInR5cGUiLCAicmFkaW8iICk7CisJc3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09ICJ0IjsKK30gKSgpOworCisKK3ZhciBycmV0dXJuID0gL1xyL2csCisJcnNwYWNlcyA9IC9bXHgyMFx0XHJcblxmXSsvZzsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCXZhbDogZnVuY3Rpb24oIHZhbHVlICkgeworCQl2YXIgaG9va3MsIHJldCwgaXNGdW5jdGlvbiwKKwkJCWVsZW0gPSB0aGlzWyAwIF07CisKKwkJaWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHsKKwkJCWlmICggZWxlbSApIHsKKwkJCQlob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHwKKwkJCQkJalF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTsKKworCQkJCWlmICgKKwkJCQkJaG9va3MgJiYKKwkJCQkJImdldCIgaW4gaG9va3MgJiYKKwkJCQkJKCByZXQgPSBob29rcy5nZXQoIGVsZW0sICJ2YWx1ZSIgKSApICE9PSB1bmRlZmluZWQKKwkJCQkpIHsKKwkJCQkJcmV0dXJuIHJldDsKKwkJCQl9CisKKwkJCQlyZXQgPSBlbGVtLnZhbHVlOworCisJCQkJcmV0dXJuIHR5cGVvZiByZXQgPT09ICJzdHJpbmciID8KKworCQkJCQkvLyBoYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzCisJCQkJCXJldC5yZXBsYWNlKCBycmV0dXJuLCAiIiApIDoKKworCQkJCQkvLyBoYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXIKKwkJCQkJcmV0ID09IG51bGwgPyAiIiA6IHJldDsKKwkJCX0KKworCQkJcmV0dXJuOworCQl9CisKKwkJaXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApOworCisJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgeworCQkJdmFyIHZhbDsKKworCQkJaWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkgeworCQkJCXJldHVybjsKKwkJCX0KKworCQkJaWYgKCBpc0Z1bmN0aW9uICkgeworCQkJCXZhbCA9IHZhbHVlLmNhbGwoIHRoaXMsIGksIGpRdWVyeSggdGhpcyApLnZhbCgpICk7CisJCQl9IGVsc2UgeworCQkJCXZhbCA9IHZhbHVlOworCQkJfQorCisJCQkvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyAiIjsgY29udmVydCBudW1iZXJzIHRvIHN0cmluZworCQkJaWYgKCB2YWwgPT0gbnVsbCApIHsKKwkJCQl2YWwgPSAiIjsKKwkJCX0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09ICJudW1iZXIiICkgeworCQkJCXZhbCArPSAiIjsKKwkJCX0gZWxzZSBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWwgKSApIHsKKwkJCQl2YWwgPSBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKKwkJCQkJcmV0dXJuIHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlICsgIiI7CisJCQkJfSApOworCQkJfQorCisJCQlob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTsKKworCQkJLy8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmcKKwkJCWlmICggIWhvb2tzIHx8ICEoICJzZXQiIGluIGhvb2tzICkgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsICJ2YWx1ZSIgKSA9PT0gdW5kZWZpbmVkICkgeworCQkJCXRoaXMudmFsdWUgPSB2YWw7CisJCQl9CisJCX0gKTsKKwl9Cit9ICk7CisKK2pRdWVyeS5leHRlbmQoIHsKKwl2YWxIb29rczogeworCQlvcHRpb246IHsKKwkJCWdldDogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQkJdmFyIHZhbCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sICJ2YWx1ZSIgKTsKKwkJCQlyZXR1cm4gdmFsICE9IG51bGwgPworCQkJCQl2YWwgOgorCisJCQkJCS8vIFN1cHBvcnQ6IElFMTAtMTErCisJCQkJCS8vIG9wdGlvbi50ZXh0IHRocm93cyBleGNlcHRpb25zICgjMTQ2ODYsICMxNDg1OCkKKwkJCQkJLy8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UKKwkJCQkJLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2UKKwkJCQkJalF1ZXJ5LnRyaW0oIGpRdWVyeS50ZXh0KCBlbGVtICkgKS5yZXBsYWNlKCByc3BhY2VzLCAiICIgKTsKKwkJCX0KKwkJfSwKKwkJc2VsZWN0OiB7CisJCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJCXZhciB2YWx1ZSwgb3B0aW9uLAorCQkJCQlvcHRpb25zID0gZWxlbS5vcHRpb25zLAorCQkJCQlpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCwKKwkJCQkJb25lID0gZWxlbS50eXBlID09PSAic2VsZWN0LW9uZSIgfHwgaW5kZXggPCAwLAorCQkJCQl2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sCisJCQkJCW1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3RoLAorCQkJCQlpID0gaW5kZXggPCAwID8KKwkJCQkJCW1heCA6CisJCQkJCQlvbmUgPyBpbmRleCA6IDA7CisKKwkJCQkvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zCisJCQkJZm9yICggOyBpIDwgbWF4OyBpKysgKSB7CisJCQkJCW9wdGlvbiA9IG9wdGlvbnNbIGkgXTsKKworCQkJCQkvLyBvbGRJRSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSkKKwkJCQkJaWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmCisKKwkJCQkJCQkvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwCisJCQkJCQkJKCBzdXBwb3J0Lm9wdERpc2FibGVkID8KKwkJCQkJCQkJIW9wdGlvbi5kaXNhYmxlZCA6CisJCQkJCQkJCW9wdGlvbi5nZXRBdHRyaWJ1dGUoICJkaXNhYmxlZCIgKSA9PT0gbnVsbCApICYmCisJCQkJCQkJKCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHwKKwkJCQkJCQkJIWpRdWVyeS5ub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUsICJvcHRncm91cCIgKSApICkgeworCisJCQkJCQkvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uCisJCQkJCQl2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7CisKKwkJCQkJCS8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzCisJCQkJCQlpZiAoIG9uZSApIHsKKwkJCQkJCQlyZXR1cm4gdmFsdWU7CisJCQkJCQl9CisKKwkJCQkJCS8vIE11bHRpLVNlbGVjdHMgcmV0dXJuIGFuIGFycmF5CisJCQkJCQl2YWx1ZXMucHVzaCggdmFsdWUgKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCXJldHVybiB2YWx1ZXM7CisJCQl9LAorCisJCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKwkJCQl2YXIgb3B0aW9uU2V0LCBvcHRpb24sCisJCQkJCW9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsCisJCQkJCXZhbHVlcyA9IGpRdWVyeS5tYWtlQXJyYXkoIHZhbHVlICksCisJCQkJCWkgPSBvcHRpb25zLmxlbmd0aDsKKworCQkJCXdoaWxlICggaS0tICkgeworCQkJCQlvcHRpb24gPSBvcHRpb25zWyBpIF07CisKKwkJCQkJaWYgKCBqUXVlcnkuaW5BcnJheSggalF1ZXJ5LnZhbEhvb2tzLm9wdGlvbi5nZXQoIG9wdGlvbiApLCB2YWx1ZXMgKSA+IC0xICkgeworCisJCQkJCQkvLyBTdXBwb3J0OiBJRTYKKwkJCQkJCS8vIFdoZW4gbmV3IG9wdGlvbiBlbGVtZW50IGlzIGFkZGVkIHRvIHNlbGVjdCBib3ggd2UgbmVlZCB0bworCQkJCQkJLy8gZm9yY2UgcmVmbG93IG9mIG5ld2x5IGFkZGVkIG5vZGUgaW4gb3JkZXIgdG8gd29ya2Fyb3VuZCBkZWxheQorCQkJCQkJLy8gb2YgaW5pdGlhbGl6YXRpb24gcHJvcGVydGllcworCQkJCQkJdHJ5IHsKKwkJCQkJCQlvcHRpb24uc2VsZWN0ZWQgPSBvcHRpb25TZXQgPSB0cnVlOworCisJCQkJCQl9IGNhdGNoICggXyApIHsKKworCQkJCQkJCS8vIFdpbGwgYmUgZXhlY3V0ZWQgb25seSBpbiBJRTYKKwkJCQkJCQlvcHRpb24uc2Nyb2xsSGVpZ2h0OworCQkJCQkJfQorCisJCQkJCX0gZWxzZSB7CisJCQkJCQlvcHRpb24uc2VsZWN0ZWQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8vIEZvcmNlIGJyb3dzZXJzIHRvIGJlaGF2ZSBjb25zaXN0ZW50bHkgd2hlbiBub24tbWF0Y2hpbmcgdmFsdWUgaXMgc2V0CisJCQkJaWYgKCAhb3B0aW9uU2V0ICkgeworCQkJCQllbGVtLnNlbGVjdGVkSW5kZXggPSAtMTsKKwkJCQl9CisKKwkJCQlyZXR1cm4gb3B0aW9uczsKKwkJCX0KKwkJfQorCX0KK30gKTsKKworLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXIKK2pRdWVyeS5lYWNoKCBbICJyYWRpbyIsICJjaGVja2JveCIgXSwgZnVuY3Rpb24oKSB7CisJalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7CisJCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgeworCQkJaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsdWUgKSApIHsKKwkJCQlyZXR1cm4gKCBlbGVtLmNoZWNrZWQgPSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KCBlbGVtICkudmFsKCksIHZhbHVlICkgPiAtMSApOworCQkJfQorCQl9CisJfTsKKwlpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7CisJCWpRdWVyeS52YWxIb29rc1sgdGhpcyBdLmdldCA9IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCAidmFsdWUiICkgPT09IG51bGwgPyAib24iIDogZWxlbS52YWx1ZTsKKwkJfTsKKwl9Cit9ICk7CisKKworCisKK3ZhciBub2RlSG9vaywgYm9vbEhvb2ssCisJYXR0ckhhbmRsZSA9IGpRdWVyeS5leHByLmF0dHJIYW5kbGUsCisJcnVzZURlZmF1bHQgPSAvXig/OmNoZWNrZWR8c2VsZWN0ZWQpJC9pLAorCWdldFNldEF0dHJpYnV0ZSA9IHN1cHBvcnQuZ2V0U2V0QXR0cmlidXRlLAorCWdldFNldElucHV0ID0gc3VwcG9ydC5pbnB1dDsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCWF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKwkJcmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApOworCX0sCisKKwlyZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHsKKwkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisJCQlqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApOworCQl9ICk7CisJfQorfSApOworCitqUXVlcnkuZXh0ZW5kKCB7CisJYXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgeworCQl2YXIgcmV0LCBob29rcywKKwkJCW5UeXBlID0gZWxlbS5ub2RlVHlwZTsKKworCQkvLyBEb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzCisJCWlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZAorCQlpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gInVuZGVmaW5lZCIgKSB7CisJCQlyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7CisJCX0KKworCQkvLyBBbGwgYXR0cmlidXRlcyBhcmUgbG93ZXJjYXNlCisJCS8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWQKKwkJaWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7CisJCQluYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOworCQkJaG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gfHwKKwkJCQkoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiBub2RlSG9vayApOworCQl9CisKKwkJaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgeworCQkJaWYgKCB2YWx1ZSA9PT0gbnVsbCApIHsKKwkJCQlqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJaWYgKCBob29rcyAmJiAic2V0IiBpbiBob29rcyAmJgorCQkJCSggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQllbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyAiIiApOworCQkJcmV0dXJuIHZhbHVlOworCQl9CisKKwkJaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApOworCisJCS8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkCisJCXJldHVybiByZXQgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDsKKwl9LAorCisJYXR0ckhvb2tzOiB7CisJCXR5cGU6IHsKKwkJCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgeworCQkJCWlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gInJhZGlvIiAmJgorCQkJCQlqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSApIHsKKworCQkJCQkvLyBTZXR0aW5nIHRoZSB0eXBlIG9uIGEgcmFkaW8gYnV0dG9uIGFmdGVyIHRoZSB2YWx1ZSByZXNldHMgdGhlIHZhbHVlIGluIElFOC05CisJCQkJCS8vIFJlc2V0IHZhbHVlIHRvIGRlZmF1bHQgaW4gY2FzZSB0eXBlIGlzIHNldCBhZnRlciB2YWx1ZSBkdXJpbmcgY3JlYXRpb24KKwkJCQkJdmFyIHZhbCA9IGVsZW0udmFsdWU7CisJCQkJCWVsZW0uc2V0QXR0cmlidXRlKCAidHlwZSIsIHZhbHVlICk7CisJCQkJCWlmICggdmFsICkgeworCQkJCQkJZWxlbS52YWx1ZSA9IHZhbDsKKwkJCQkJfQorCQkJCQlyZXR1cm4gdmFsdWU7CisJCQkJfQorCQkJfQorCQl9CisJfSwKKworCXJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKwkJdmFyIG5hbWUsIHByb3BOYW1lLAorCQkJaSA9IDAsCisJCQlhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdHdoaXRlICk7CisKKwkJaWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKwkJCXdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkgeworCQkJCXByb3BOYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOworCisJCQkJLy8gQm9vbGVhbiBhdHRyaWJ1dGVzIGdldCBzcGVjaWFsIHRyZWF0bWVudCAoIzEwODcwKQorCQkJCWlmICggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC50ZXN0KCBuYW1lICkgKSB7CisKKwkJCQkJLy8gU2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgdG8gZmFsc2UKKwkJCQkJaWYgKCBnZXRTZXRJbnB1dCAmJiBnZXRTZXRBdHRyaWJ1dGUgfHwgIXJ1c2VEZWZhdWx0LnRlc3QoIG5hbWUgKSApIHsKKwkJCQkJCWVsZW1bIHByb3BOYW1lIF0gPSBmYWxzZTsKKworCQkJCQkvLyBTdXBwb3J0OiBJRTw5CisJCQkJCS8vIEFsc28gY2xlYXIgZGVmYXVsdENoZWNrZWQvZGVmYXVsdFNlbGVjdGVkIChpZiBhcHByb3ByaWF0ZSkKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWVsZW1bIGpRdWVyeS5jYW1lbENhc2UoICJkZWZhdWx0LSIgKyBuYW1lICkgXSA9CisJCQkJCQkJZWxlbVsgcHJvcE5hbWUgXSA9IGZhbHNlOworCQkJCQl9CisKKwkJCQkvLyBTZWUgIzk2OTkgZm9yIGV4cGxhbmF0aW9uIG9mIHRoaXMgYXBwcm9hY2ggKHNldHRpbmcgZmlyc3QsIHRoZW4gcmVtb3ZhbCkKKwkJCQl9IGVsc2UgeworCQkJCQlqUXVlcnkuYXR0ciggZWxlbSwgbmFtZSwgIiIgKTsKKwkJCQl9CisKKwkJCQllbGVtLnJlbW92ZUF0dHJpYnV0ZSggZ2V0U2V0QXR0cmlidXRlID8gbmFtZSA6IHByb3BOYW1lICk7CisJCQl9CisJCX0KKwl9Cit9ICk7CisKKy8vIEhvb2tzIGZvciBib29sZWFuIGF0dHJpYnV0ZXMKK2Jvb2xIb29rID0geworCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgeworCQlpZiAoIHZhbHVlID09PSBmYWxzZSApIHsKKworCQkJLy8gUmVtb3ZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZQorCQkJalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsKKwkJfSBlbHNlIGlmICggZ2V0U2V0SW5wdXQgJiYgZ2V0U2V0QXR0cmlidXRlIHx8ICFydXNlRGVmYXVsdC50ZXN0KCBuYW1lICkgKSB7CisKKwkJCS8vIElFPDggbmVlZHMgdGhlICpwcm9wZXJ0eSogbmFtZQorCQkJZWxlbS5zZXRBdHRyaWJ1dGUoICFnZXRTZXRBdHRyaWJ1dGUgJiYgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lLCBuYW1lICk7CisKKwkJfSBlbHNlIHsKKworCQkJLy8gU3VwcG9ydDogSUU8OQorCQkJLy8gVXNlIGRlZmF1bHRDaGVja2VkIGFuZCBkZWZhdWx0U2VsZWN0ZWQgZm9yIG9sZElFCisJCQllbGVtWyBqUXVlcnkuY2FtZWxDYXNlKCAiZGVmYXVsdC0iICsgbmFtZSApIF0gPSBlbGVtWyBuYW1lIF0gPSB0cnVlOworCQl9CisJCXJldHVybiBuYW1lOworCX0KK307CisKK2pRdWVyeS5lYWNoKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCggL1x3Ky9nICksIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworCXZhciBnZXR0ZXIgPSBhdHRySGFuZGxlWyBuYW1lIF0gfHwgalF1ZXJ5LmZpbmQuYXR0cjsKKworCWlmICggZ2V0U2V0SW5wdXQgJiYgZ2V0U2V0QXR0cmlidXRlIHx8ICFydXNlRGVmYXVsdC50ZXN0KCBuYW1lICkgKSB7CisJCWF0dHJIYW5kbGVbIG5hbWUgXSA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHsKKwkJCXZhciByZXQsIGhhbmRsZTsKKwkJCWlmICggIWlzWE1MICkgeworCisJCQkJLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlcgorCQkJCWhhbmRsZSA9IGF0dHJIYW5kbGVbIG5hbWUgXTsKKwkJCQlhdHRySGFuZGxlWyBuYW1lIF0gPSByZXQ7CisJCQkJcmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgPworCQkJCQluYW1lLnRvTG93ZXJDYXNlKCkgOgorCQkJCQludWxsOworCQkJCWF0dHJIYW5kbGVbIG5hbWUgXSA9IGhhbmRsZTsKKwkJCX0KKwkJCXJldHVybiByZXQ7CisJCX07CisJfSBlbHNlIHsKKwkJYXR0ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkgeworCQkJaWYgKCAhaXNYTUwgKSB7CisJCQkJcmV0dXJuIGVsZW1bIGpRdWVyeS5jYW1lbENhc2UoICJkZWZhdWx0LSIgKyBuYW1lICkgXSA/CisJCQkJCW5hbWUudG9Mb3dlckNhc2UoKSA6CisJCQkJCW51bGw7CisJCQl9CisJCX07CisJfQorfSApOworCisvLyBmaXggb2xkSUUgYXR0cm9wZXJ0aWVzCitpZiAoICFnZXRTZXRJbnB1dCB8fCAhZ2V0U2V0QXR0cmlidXRlICkgeworCWpRdWVyeS5hdHRySG9va3MudmFsdWUgPSB7CisJCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgeworCQkJaWYgKCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSApIHsKKworCQkJCS8vIERvZXMgbm90IHJldHVybiBzbyB0aGF0IHNldEF0dHJpYnV0ZSBpcyBhbHNvIHVzZWQKKwkJCQllbGVtLmRlZmF1bHRWYWx1ZSA9IHZhbHVlOworCQkJfSBlbHNlIHsKKworCQkJCS8vIFVzZSBub2RlSG9vayBpZiBkZWZpbmVkICgjMTk1NCk7IG90aGVyd2lzZSBzZXRBdHRyaWJ1dGUgaXMgZmluZQorCQkJCXJldHVybiBub2RlSG9vayAmJiBub2RlSG9vay5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICk7CisJCQl9CisJCX0KKwl9OworfQorCisvLyBJRTYvNyBkbyBub3Qgc3VwcG9ydCBnZXR0aW5nL3NldHRpbmcgc29tZSBhdHRyaWJ1dGVzIHdpdGggZ2V0L3NldEF0dHJpYnV0ZQoraWYgKCAhZ2V0U2V0QXR0cmlidXRlICkgeworCisJLy8gVXNlIHRoaXMgZm9yIGFueSBhdHRyaWJ1dGUgaW4gSUU2LzcKKwkvLyBUaGlzIGZpeGVzIGFsbW9zdCBldmVyeSBJRTYvNyBpc3N1ZQorCW5vZGVIb29rID0geworCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKKworCQkJLy8gU2V0IHRoZSBleGlzdGluZyBvciBjcmVhdGUgYSBuZXcgYXR0cmlidXRlIG5vZGUKKwkJCXZhciByZXQgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKTsKKwkJCWlmICggIXJldCApIHsKKwkJCQllbGVtLnNldEF0dHJpYnV0ZU5vZGUoCisJCQkJCSggcmV0ID0gZWxlbS5vd25lckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSggbmFtZSApICkKKwkJCQkpOworCQkJfQorCisJCQlyZXQudmFsdWUgPSB2YWx1ZSArPSAiIjsKKworCQkJLy8gQnJlYWsgYXNzb2NpYXRpb24gd2l0aCBjbG9uZWQgZWxlbWVudHMgYnkgYWxzbyB1c2luZyBzZXRBdHRyaWJ1dGUgKCM5NjQ2KQorCQkJaWYgKCBuYW1lID09PSAidmFsdWUiIHx8IHZhbHVlID09PSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApICkgeworCQkJCXJldHVybiB2YWx1ZTsKKwkJCX0KKwkJfQorCX07CisKKwkvLyBTb21lIGF0dHJpYnV0ZXMgYXJlIGNvbnN0cnVjdGVkIHdpdGggZW1wdHktc3RyaW5nIHZhbHVlcyB3aGVuIG5vdCBkZWZpbmVkCisJYXR0ckhhbmRsZS5pZCA9IGF0dHJIYW5kbGUubmFtZSA9IGF0dHJIYW5kbGUuY29vcmRzID0KKwkJZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkgeworCQkJdmFyIHJldDsKKwkJCWlmICggIWlzWE1MICkgeworCQkJCXJldHVybiAoIHJldCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApICkgJiYgcmV0LnZhbHVlICE9PSAiIiA/CisJCQkJCXJldC52YWx1ZSA6CisJCQkJCW51bGw7CisJCQl9CisJCX07CisKKwkvLyBGaXhpbmcgdmFsdWUgcmV0cmlldmFsIG9uIGEgYnV0dG9uIHJlcXVpcmVzIHRoaXMgbW9kdWxlCisJalF1ZXJ5LnZhbEhvb2tzLmJ1dHRvbiA9IHsKKwkJZ2V0OiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKKwkJCXZhciByZXQgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKTsKKwkJCWlmICggcmV0ICYmIHJldC5zcGVjaWZpZWQgKSB7CisJCQkJcmV0dXJuIHJldC52YWx1ZTsKKwkJCX0KKwkJfSwKKwkJc2V0OiBub2RlSG9vay5zZXQKKwl9OworCisJLy8gU2V0IGNvbnRlbnRlZGl0YWJsZSB0byBmYWxzZSBvbiByZW1vdmFscygjMTA0MjkpCisJLy8gU2V0dGluZyB0byBlbXB0eSBzdHJpbmcgdGhyb3dzIGFuIGVycm9yIGFzIGFuIGludmFsaWQgdmFsdWUKKwlqUXVlcnkuYXR0ckhvb2tzLmNvbnRlbnRlZGl0YWJsZSA9IHsKKwkJc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7CisJCQlub2RlSG9vay5zZXQoIGVsZW0sIHZhbHVlID09PSAiIiA/IGZhbHNlIDogdmFsdWUsIG5hbWUgKTsKKwkJfQorCX07CisKKwkvLyBTZXQgd2lkdGggYW5kIGhlaWdodCB0byBhdXRvIGluc3RlYWQgb2YgMCBvbiBlbXB0eSBzdHJpbmcoIEJ1ZyAjODE1MCApCisJLy8gVGhpcyBpcyBmb3IgcmVtb3ZhbHMKKwlqUXVlcnkuZWFjaCggWyAid2lkdGgiLCAiaGVpZ2h0IiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKKwkJalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdID0geworCQkJc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CisJCQkJaWYgKCB2YWx1ZSA9PT0gIiIgKSB7CisJCQkJCWVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCAiYXV0byIgKTsKKwkJCQkJcmV0dXJuIHZhbHVlOworCQkJCX0KKwkJCX0KKwkJfTsKKwl9ICk7Cit9CisKK2lmICggIXN1cHBvcnQuc3R5bGUgKSB7CisJalF1ZXJ5LmF0dHJIb29rcy5zdHlsZSA9IHsKKwkJZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKKworCQkJLy8gUmV0dXJuIHVuZGVmaW5lZCBpbiB0aGUgY2FzZSBvZiBlbXB0eSBzdHJpbmcKKwkJCS8vIE5vdGU6IElFIHVwcGVyY2FzZXMgY3NzIHByb3BlcnR5IG5hbWVzLCBidXQgaWYgd2Ugd2VyZSB0byAudG9Mb3dlckNhc2UoKQorCQkJLy8gLmNzc1RleHQsIHRoYXQgd291bGQgZGVzdHJveSBjYXNlIHNlbnNpdGl2aXR5IGluIFVSTCdzLCBsaWtlIGluICJiYWNrZ3JvdW5kIgorCQkJcmV0dXJuIGVsZW0uc3R5bGUuY3NzVGV4dCB8fCB1bmRlZmluZWQ7CisJCX0sCisJCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgeworCQkJcmV0dXJuICggZWxlbS5zdHlsZS5jc3NUZXh0ID0gdmFsdWUgKyAiIiApOworCQl9CisJfTsKK30KKworCisKKwordmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0KSQvaSwKKwlyY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisJcHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgeworCQlyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7CisJfSwKKworCXJlbW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkgeworCQluYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOworCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKworCQkJLy8gdHJ5L2NhdGNoIGhhbmRsZXMgY2FzZXMgd2hlcmUgSUUgYmFsa3MgKHN1Y2ggYXMgcmVtb3ZpbmcgYSBwcm9wZXJ0eSBvbiB3aW5kb3cpCisJCQl0cnkgeworCQkJCXRoaXNbIG5hbWUgXSA9IHVuZGVmaW5lZDsKKwkJCQlkZWxldGUgdGhpc1sgbmFtZSBdOworCQkJfSBjYXRjaCAoIGUgKSB7fQorCQl9ICk7CisJfQorfSApOworCitqUXVlcnkuZXh0ZW5kKCB7CisJcHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgeworCQl2YXIgcmV0LCBob29rcywKKwkJCW5UeXBlID0gZWxlbS5ub2RlVHlwZTsKKworCQkvLyBEb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzCisJCWlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHsKKworCQkJLy8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rcworCQkJbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKKwkJCWhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdOworCQl9CisKKwkJaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgeworCQkJaWYgKCBob29rcyAmJiAic2V0IiBpbiBob29rcyAmJgorCQkJCSggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQlyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApOworCQl9CisKKwkJaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmV0dXJuIGVsZW1bIG5hbWUgXTsKKwl9LAorCisJcHJvcEhvb2tzOiB7CisJCXRhYkluZGV4OiB7CisJCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworCisJCQkJLy8gZWxlbS50YWJJbmRleCBkb2Vzbid0IGFsd2F5cyByZXR1cm4gdGhlCisJCQkJLy8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0CisJCQkJLy8gaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvYmxvZy8yMDA4LzAxLzA5L2dldHRpbmctc2V0dGluZy1hbmQtcmVtb3ZpbmctdGFiaW5kZXgtdmFsdWVzLXdpdGgtamF2YXNjcmlwdC8KKwkJCQkvLyBVc2UgcHJvcGVyIGF0dHJpYnV0ZSByZXRyaWV2YWwoIzEyMDcyKQorCQkJCXZhciB0YWJpbmRleCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sICJ0YWJpbmRleCIgKTsKKworCQkJCXJldHVybiB0YWJpbmRleCA/CisJCQkJCXBhcnNlSW50KCB0YWJpbmRleCwgMTAgKSA6CisJCQkJCXJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8CisJCQkJCQlyY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJiBlbGVtLmhyZWYgPworCQkJCQkJCTAgOgorCQkJCQkJCS0xOworCQkJfQorCQl9CisJfSwKKworCXByb3BGaXg6IHsKKwkJImZvciI6ICJodG1sRm9yIiwKKwkJImNsYXNzIjogImNsYXNzTmFtZSIKKwl9Cit9ICk7CisKKy8vIFNvbWUgYXR0cmlidXRlcyByZXF1aXJlIGEgc3BlY2lhbCBjYWxsIG9uIElFCisvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4CitpZiAoICFzdXBwb3J0LmhyZWZOb3JtYWxpemVkICkgeworCisJLy8gaHJlZi9zcmMgcHJvcGVydHkgc2hvdWxkIGdldCB0aGUgZnVsbCBub3JtYWxpemVkIFVSTCAoIzEwMjk5LyMxMjkxNSkKKwlqUXVlcnkuZWFjaCggWyAiaHJlZiIsICJzcmMiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworCQlqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF0gPSB7CisJCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJCXJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgNCApOworCQkJfQorCQl9OworCX0gKTsKK30KKworLy8gU3VwcG9ydDogU2FmYXJpLCBJRTkrCisvLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHkKKy8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWQKKy8vIG9uIHRoZSBvcHRpb24KKy8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkCisvLyB3aGVuIGluIGFuIG9wdGdyb3VwCitpZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkgeworCWpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7CisJCWdldDogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQl2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOworCisJCQlpZiAoIHBhcmVudCApIHsKKwkJCQlwYXJlbnQuc2VsZWN0ZWRJbmRleDsKKworCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IGl0IGFsc28gd29ya3Mgd2l0aCBvcHRncm91cHMsIHNlZSAjNTcwMQorCQkJCWlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7CisJCQkJCXBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIG51bGw7CisJCX0sCisJCXNldDogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQl2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOworCQkJaWYgKCBwYXJlbnQgKSB7CisJCQkJcGFyZW50LnNlbGVjdGVkSW5kZXg7CisKKwkJCQlpZiAoIHBhcmVudC5wYXJlbnROb2RlICkgeworCQkJCQlwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4OworCQkJCX0KKwkJCX0KKwkJfQorCX07Cit9CisKK2pRdWVyeS5lYWNoKCBbCisJInRhYkluZGV4IiwKKwkicmVhZE9ubHkiLAorCSJtYXhMZW5ndGgiLAorCSJjZWxsU3BhY2luZyIsCisJImNlbGxQYWRkaW5nIiwKKwkicm93U3BhbiIsCisJImNvbFNwYW4iLAorCSJ1c2VNYXAiLAorCSJmcmFtZUJvcmRlciIsCisJImNvbnRlbnRFZGl0YWJsZSIKK10sIGZ1bmN0aW9uKCkgeworCWpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7Cit9ICk7CisKKy8vIElFNi83IGNhbGwgZW5jdHlwZSBlbmNvZGluZworaWYgKCAhc3VwcG9ydC5lbmN0eXBlICkgeworCWpRdWVyeS5wcm9wRml4LmVuY3R5cGUgPSAiZW5jb2RpbmciOworfQorCisKKworCit2YXIgcmNsYXNzID0gL1tcdFxyXG5cZl0vZzsKKworZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7CisJcmV0dXJuIGpRdWVyeS5hdHRyKCBlbGVtLCAiY2xhc3MiICkgfHwgIiI7Cit9CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKwlhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkgeworCQl2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsCisJCQlpID0gMDsKKworCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgeworCQkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7CisJCQkJalF1ZXJ5KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApOworCQkJfSApOworCQl9CisKKwkJaWYgKCB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmIHZhbHVlICkgeworCQkJY2xhc3NlcyA9IHZhbHVlLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXTsKKworCQkJd2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkgeworCQkJCWN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTsKKwkJCQljdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmCisJCQkJCSggIiAiICsgY3VyVmFsdWUgKyAiICIgKS5yZXBsYWNlKCByY2xhc3MsICIgIiApOworCisJCQkJaWYgKCBjdXIgKSB7CisJCQkJCWogPSAwOworCQkJCQl3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkgeworCQkJCQkJaWYgKCBjdXIuaW5kZXhPZiggIiAiICsgY2xhenogKyAiICIgKSA8IDAgKSB7CisJCQkJCQkJY3VyICs9IGNsYXp6ICsgIiAiOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJLy8gb25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy4KKwkJCQkJZmluYWxWYWx1ZSA9IGpRdWVyeS50cmltKCBjdXIgKTsKKwkJCQkJaWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHsKKwkJCQkJCWpRdWVyeS5hdHRyKCBlbGVtLCAiY2xhc3MiLCBmaW5hbFZhbHVlICk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKwkJdmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLAorCQkJaSA9IDA7CisKKwkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKKwkJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkgeworCQkJCWpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTsKKwkJCX0gKTsKKwkJfQorCisJCWlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7CisJCQlyZXR1cm4gdGhpcy5hdHRyKCAiY2xhc3MiLCAiIiApOworCQl9CisKKwkJaWYgKCB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmIHZhbHVlICkgeworCQkJY2xhc3NlcyA9IHZhbHVlLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXTsKKworCQkJd2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkgeworCQkJCWN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTsKKworCQkJCS8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChzZWUgYWRkQ2xhc3MpCisJCQkJY3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJgorCQkJCQkoICIgIiArIGN1clZhbHVlICsgIiAiICkucmVwbGFjZSggcmNsYXNzLCAiICIgKTsKKworCQkJCWlmICggY3VyICkgeworCQkJCQlqID0gMDsKKwkJCQkJd2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHsKKworCQkJCQkJLy8gUmVtb3ZlICphbGwqIGluc3RhbmNlcworCQkJCQkJd2hpbGUgKCBjdXIuaW5kZXhPZiggIiAiICsgY2xhenogKyAiICIgKSA+IC0xICkgeworCQkJCQkJCWN1ciA9IGN1ci5yZXBsYWNlKCAiICIgKyBjbGF6eiArICIgIiwgIiAiICk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQkvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLgorCQkJCQlmaW5hbFZhbHVlID0galF1ZXJ5LnRyaW0oIGN1ciApOworCQkJCQlpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkgeworCQkJCQkJalF1ZXJ5LmF0dHIoIGVsZW0sICJjbGFzcyIsIGZpbmFsVmFsdWUgKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCXJldHVybiB0aGlzOworCX0sCisKKwl0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHsKKwkJdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7CisKKwkJaWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09ICJib29sZWFuIiAmJiB0eXBlID09PSAic3RyaW5nIiApIHsKKwkJCXJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApOworCQl9CisKKwkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKKwkJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgeworCQkJCWpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKAorCQkJCQl2YWx1ZS5jYWxsKCB0aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0ZVZhbCApLAorCQkJCQlzdGF0ZVZhbAorCQkJCSk7CisJCQl9ICk7CisJCX0KKworCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKwkJCXZhciBjbGFzc05hbWUsIGksIHNlbGYsIGNsYXNzTmFtZXM7CisKKwkJCWlmICggdHlwZSA9PT0gInN0cmluZyIgKSB7CisKKwkJCQkvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lcworCQkJCWkgPSAwOworCQkJCXNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKKwkJCQljbGFzc05hbWVzID0gdmFsdWUubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdOworCisJCQkJd2hpbGUgKCAoIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBdICkgKSB7CisKKwkJCQkJLy8gQ2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0CisJCQkJCWlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7CisJCQkJCQlzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApOworCQkJCQl9CisJCQkJfQorCisJCQkvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZQorCQkJfSBlbHNlIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSAiYm9vbGVhbiIgKSB7CisJCQkJY2xhc3NOYW1lID0gZ2V0Q2xhc3MoIHRoaXMgKTsKKwkJCQlpZiAoIGNsYXNzTmFtZSApIHsKKworCQkJCQkvLyBzdG9yZSBjbGFzc05hbWUgaWYgc2V0CisJCQkJCWpRdWVyeS5fZGF0YSggdGhpcywgIl9fY2xhc3NOYW1lX18iLCBjbGFzc05hbWUgKTsKKwkJCQl9CisKKwkJCQkvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCAiZmFsc2UiLAorCQkJCS8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuCisJCQkJLy8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFueXRoaW5nKSwKKwkJCQkvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuCisJCQkJalF1ZXJ5LmF0dHIoIHRoaXMsICJjbGFzcyIsCisJCQkJCWNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgPworCQkJCQkiIiA6CisJCQkJCWpRdWVyeS5fZGF0YSggdGhpcywgIl9fY2xhc3NOYW1lX18iICkgfHwgIiIKKwkJCQkpOworCQkJfQorCQl9ICk7CisJfSwKKworCWhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisJCXZhciBjbGFzc05hbWUsIGVsZW0sCisJCQlpID0gMDsKKworCQljbGFzc05hbWUgPSAiICIgKyBzZWxlY3RvciArICIgIjsKKwkJd2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkgeworCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmCisJCQkJKCAiICIgKyBnZXRDbGFzcyggZWxlbSApICsgIiAiICkucmVwbGFjZSggcmNsYXNzLCAiICIgKQorCQkJCQkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMQorCQkJKSB7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0KKworCQlyZXR1cm4gZmFsc2U7CisJfQorfSApOworCisKKworCisvLyBSZXR1cm4galF1ZXJ5IGZvciBhdHRyaWJ1dGVzLW9ubHkgaW5jbHVzaW9uCisKKworalF1ZXJ5LmVhY2goICggImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrICIgKworCSJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSAiICsKKwkiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIgKS5zcGxpdCggIiAiICksCisJZnVuY3Rpb24oIGksIG5hbWUgKSB7CisKKwkvLyBIYW5kbGUgZXZlbnQgYmluZGluZworCWpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkgeworCQlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgPworCQkJdGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6CisJCQl0aGlzLnRyaWdnZXIoIG5hbWUgKTsKKwl9OworfSApOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisJaG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkgeworCQlyZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTsKKwl9Cit9ICk7CisKKwordmFyIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uOworCit2YXIgbm9uY2UgPSBqUXVlcnkubm93KCk7CisKK3ZhciBycXVlcnkgPSAoIC9cPy8gKTsKKworCisKK3ZhciBydmFsaWR0b2tlbnMgPSAvKCwpfChcW3x7KXwofXxdKXwiKD86W14iXFxcclxuXXxcXFsiXFxcL2JmbnJ0XXxcXHVbXGRhLWZBLUZdezR9KSoiXHMqOj98dHJ1ZXxmYWxzZXxudWxsfC0/KD8hMFxkKVxkKyg/OlwuXGQrfCkoPzpbZUVdWystXT9cZCt8KS9nOworCitqUXVlcnkucGFyc2VKU09OID0gZnVuY3Rpb24oIGRhdGEgKSB7CisKKwkvLyBBdHRlbXB0IHRvIHBhcnNlIHVzaW5nIHRoZSBuYXRpdmUgSlNPTiBwYXJzZXIgZmlyc3QKKwlpZiAoIHdpbmRvdy5KU09OICYmIHdpbmRvdy5KU09OLnBhcnNlICkgeworCisJCS8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zCisJCS8vIFdvcmthcm91bmQgZmFpbHVyZSB0byBzdHJpbmctY2FzdCBudWxsIGlucHV0CisJCXJldHVybiB3aW5kb3cuSlNPTi5wYXJzZSggZGF0YSArICIiICk7CisJfQorCisJdmFyIHJlcXVpcmVOb25Db21tYSwKKwkJZGVwdGggPSBudWxsLAorCQlzdHIgPSBqUXVlcnkudHJpbSggZGF0YSArICIiICk7CisKKwkvLyBHdWFyZCBhZ2FpbnN0IGludmFsaWQgKGFuZCBwb3NzaWJseSBkYW5nZXJvdXMpIGlucHV0IGJ5IGVuc3VyaW5nIHRoYXQgbm90aGluZyByZW1haW5zCisJLy8gYWZ0ZXIgcmVtb3ZpbmcgdmFsaWQgdG9rZW5zCisJcmV0dXJuIHN0ciAmJiAhalF1ZXJ5LnRyaW0oIHN0ci5yZXBsYWNlKCBydmFsaWR0b2tlbnMsIGZ1bmN0aW9uKCB0b2tlbiwgY29tbWEsIG9wZW4sIGNsb3NlICkgeworCisJCS8vIEZvcmNlIHRlcm1pbmF0aW9uIGlmIHdlIHNlZSBhIG1pc3BsYWNlZCBjb21tYQorCQlpZiAoIHJlcXVpcmVOb25Db21tYSAmJiBjb21tYSApIHsKKwkJCWRlcHRoID0gMDsKKwkJfQorCisJCS8vIFBlcmZvcm0gbm8gbW9yZSByZXBsYWNlbWVudHMgYWZ0ZXIgcmV0dXJuaW5nIHRvIG91dGVybW9zdCBkZXB0aAorCQlpZiAoIGRlcHRoID09PSAwICkgeworCQkJcmV0dXJuIHRva2VuOworCQl9CisKKwkJLy8gQ29tbWFzIG11c3Qgbm90IGZvbGxvdyAiWyIsICJ7Iiwgb3IgIiwiCisJCXJlcXVpcmVOb25Db21tYSA9IG9wZW4gfHwgY29tbWE7CisKKwkJLy8gRGV0ZXJtaW5lIG5ldyBkZXB0aAorCQkvLyBhcnJheS9vYmplY3Qgb3BlbiAoIlsiIG9yICJ7Iik6IGRlcHRoICs9IHRydWUgLSBmYWxzZSAoaW5jcmVtZW50KQorCQkvLyBhcnJheS9vYmplY3QgY2xvc2UgKCJdIiBvciAifSIpOiBkZXB0aCArPSBmYWxzZSAtIHRydWUgKGRlY3JlbWVudCkKKwkJLy8gb3RoZXIgY2FzZXMgKCIsIiBvciBwcmltaXRpdmUpOiBkZXB0aCArPSB0cnVlIC0gdHJ1ZSAobnVtZXJpYyBjYXN0KQorCQlkZXB0aCArPSAhY2xvc2UgLSAhb3BlbjsKKworCQkvLyBSZW1vdmUgdGhpcyB0b2tlbgorCQlyZXR1cm4gIiI7CisJfSApICkgPworCQkoIEZ1bmN0aW9uKCAicmV0dXJuICIgKyBzdHIgKSApKCkgOgorCQlqUXVlcnkuZXJyb3IoICJJbnZhbGlkIEpTT046ICIgKyBkYXRhICk7Cit9OworCisKKy8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmcKK2pRdWVyeS5wYXJzZVhNTCA9IGZ1bmN0aW9uKCBkYXRhICkgeworCXZhciB4bWwsIHRtcDsKKwlpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAic3RyaW5nIiApIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCXRyeSB7CisJCWlmICggd2luZG93LkRPTVBhcnNlciApIHsgLy8gU3RhbmRhcmQKKwkJCXRtcCA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7CisJCQl4bWwgPSB0bXAucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCAidGV4dC94bWwiICk7CisJCX0gZWxzZSB7IC8vIElFCisJCQl4bWwgPSBuZXcgd2luZG93LkFjdGl2ZVhPYmplY3QoICJNaWNyb3NvZnQuWE1MRE9NIiApOworCQkJeG1sLmFzeW5jID0gImZhbHNlIjsKKwkJCXhtbC5sb2FkWE1MKCBkYXRhICk7CisJCX0KKwl9IGNhdGNoICggZSApIHsKKwkJeG1sID0gdW5kZWZpbmVkOworCX0KKwlpZiAoICF4bWwgfHwgIXhtbC5kb2N1bWVudEVsZW1lbnQgfHwgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAicGFyc2VyZXJyb3IiICkubGVuZ3RoICkgeworCQlqUXVlcnkuZXJyb3IoICJJbnZhbGlkIFhNTDogIiArIGRhdGEgKTsKKwl9CisJcmV0dXJuIHhtbDsKK307CisKKwordmFyCisJcmhhc2ggPSAvIy4qJC8sCisJcnRzID0gLyhbPyZdKV89W14mXSovLAorCisJLy8gSUUgbGVhdmVzIGFuIFxyIGNoYXJhY3RlciBhdCBFT0wKKwlyaGVhZGVycyA9IC9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcsCisKKwkvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb24KKwlybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLAorCXJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLAorCXJwcm90b2NvbCA9IC9eXC9cLy8sCisJcnVybCA9IC9eKFtcdy4rLV0rOikoPzpcL1wvKD86W15cLz8jXSpAfCkoW15cLz8jOl0qKSg/OjooXGQrKXwpfCkvLAorCisJLyogUHJlZmlsdGVycworCSAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpCisJICogMikgVGhlc2UgYXJlIGNhbGxlZDoKKwkgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0CisJICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKQorCSAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGUKKwkgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZAorCSAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gIioiIGlmIG5lZWRlZAorCSAqLworCXByZWZpbHRlcnMgPSB7fSwKKworCS8qIFRyYW5zcG9ydHMgYmluZGluZ3MKKwkgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlCisJICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQKKwkgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byAiKiIgaWYgbmVlZGVkCisJICovCisJdHJhbnNwb3J0cyA9IHt9LAorCisJLy8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uCisJYWxsVHlwZXMgPSAiKi8iLmNvbmNhdCggIioiICksCisKKwkvLyBEb2N1bWVudCBsb2NhdGlvbgorCWFqYXhMb2NhdGlvbiA9IGxvY2F0aW9uLmhyZWYsCisKKwkvLyBTZWdtZW50IGxvY2F0aW9uIGludG8gcGFydHMKKwlhamF4TG9jUGFydHMgPSBydXJsLmV4ZWMoIGFqYXhMb2NhdGlvbi50b0xvd2VyQ2FzZSgpICkgfHwgW107CisKKy8vIEJhc2UgImNvbnN0cnVjdG9yIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0CitmdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHsKKworCS8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gIioiCisJcmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7CisKKwkJaWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSAic3RyaW5nIiApIHsKKwkJCWZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247CisJCQlkYXRhVHlwZUV4cHJlc3Npb24gPSAiKiI7CisJCX0KKworCQl2YXIgZGF0YVR5cGUsCisJCQlpID0gMCwKKwkJCWRhdGFUeXBlcyA9IGRhdGFUeXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXTsKKworCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBmdW5jICkgKSB7CisKKwkJCS8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb24KKwkJCXdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHsKKworCQkJCS8vIFByZXBlbmQgaWYgcmVxdWVzdGVkCisJCQkJaWYgKCBkYXRhVHlwZS5jaGFyQXQoIDAgKSA9PT0gIisiICkgeworCQkJCQlkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgIioiOworCQkJCQkoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnVuc2hpZnQoIGZ1bmMgKTsKKworCQkJCS8vIE90aGVyd2lzZSBhcHBlbmQKKwkJCQl9IGVsc2UgeworCQkJCQkoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnB1c2goIGZ1bmMgKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9OworfQorCisvLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHMKK2Z1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7CisKKwl2YXIgaW5zcGVjdGVkID0ge30sCisJCXNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0cnVjdHVyZSA9PT0gdHJhbnNwb3J0cyApOworCisJZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7CisJCXZhciBzZWxlY3RlZDsKKwkJaW5zcGVjdGVkWyBkYXRhVHlwZSBdID0gdHJ1ZTsKKwkJalF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHsKKwkJCXZhciBkYXRhVHlwZU9yVHJhbnNwb3J0ID0gcHJlZmlsdGVyT3JGYWN0b3J5KCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7CisJCQlpZiAoIHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNwb3J0ID09PSAic3RyaW5nIiAmJgorCQkJCSFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHsKKworCQkJCW9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTsKKwkJCQlpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9ydCApIHsKKwkJCQlyZXR1cm4gISggc2VsZWN0ZWQgPSBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7CisJCQl9CisJCX0gKTsKKwkJcmV0dXJuIHNlbGVjdGVkOworCX0KKworCXJldHVybiBpbnNwZWN0KCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdICkgfHwgIWluc3BlY3RlZFsgIioiIF0gJiYgaW5zcGVjdCggIioiICk7Cit9CisKKy8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9ucworLy8gdGhhdCB0YWtlcyAiZmxhdCIgb3B0aW9ucyAobm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpCisvLyBGaXhlcyAjOTg4NworZnVuY3Rpb24gYWpheEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7CisJdmFyIGRlZXAsIGtleSwKKwkJZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9OworCisJZm9yICgga2V5IGluIHNyYyApIHsKKwkJaWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7CisJCQkoIGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSApICkgKVsga2V5IF0gPSBzcmNbIGtleSBdOworCQl9CisJfQorCWlmICggZGVlcCApIHsKKwkJalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7CisJfQorCisJcmV0dXJuIHRhcmdldDsKK30KKworLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OgorICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSkKKyAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZQorICovCitmdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkgeworCXZhciBmaXJzdERhdGFUeXBlLCBjdCwgZmluYWxEYXRhVHlwZSwgdHlwZSwKKwkJY29udGVudHMgPSBzLmNvbnRlbnRzLAorCQlkYXRhVHlwZXMgPSBzLmRhdGFUeXBlczsKKworCS8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzCisJd2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gIioiICkgeworCQlkYXRhVHlwZXMuc2hpZnQoKTsKKwkJaWYgKCBjdCA9PT0gdW5kZWZpbmVkICkgeworCQkJY3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiQ29udGVudC1UeXBlIiApOworCQl9CisJfQorCisJLy8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlCisJaWYgKCBjdCApIHsKKwkJZm9yICggdHlwZSBpbiBjb250ZW50cyApIHsKKwkJCWlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7CisJCQkJZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCS8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZQorCWlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkgeworCQlmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07CisJfSBlbHNlIHsKKworCQkvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzCisJCWZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkgeworCQkJaWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgIiAiICsgZGF0YVR5cGVzWyAwIF0gXSApIHsKKwkJCQlmaW5hbERhdGFUeXBlID0gdHlwZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICggIWZpcnN0RGF0YVR5cGUgKSB7CisJCQkJZmlyc3REYXRhVHlwZSA9IHR5cGU7CisJCQl9CisJCX0KKworCQkvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmUKKwkJZmluYWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTsKKwl9CisKKwkvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlCisJLy8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlzdCBpZiBuZWVkZWQKKwkvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlCisJaWYgKCBmaW5hbERhdGFUeXBlICkgeworCQlpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkgeworCQkJZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTsKKwkJfQorCQlyZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07CisJfQorfQorCisvKiBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlCisgKiBBbHNvIHNldHMgdGhlIHJlc3BvbnNlWFhYIGZpZWxkcyBvbiB0aGUganFYSFIgaW5zdGFuY2UKKyAqLworZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICkgeworCXZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LAorCQljb252ZXJ0ZXJzID0ge30sCisKKwkJLy8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvbgorCQlkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpOworCisJLy8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzCisJaWYgKCBkYXRhVHlwZXNbIDEgXSApIHsKKwkJZm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7CisJCQljb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdOworCQl9CisJfQorCisJY3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpOworCisJLy8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGUKKwl3aGlsZSAoIGN1cnJlbnQgKSB7CisKKwkJaWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7CisJCQlqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTsKKwkJfQorCisJCS8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkCisJCWlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHsKKwkJCXJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApOworCQl9CisKKwkJcHJldiA9IGN1cnJlbnQ7CisJCWN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTsKKworCQlpZiAoIGN1cnJlbnQgKSB7CisKKwkJCS8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG8KKwkJCWlmICggY3VycmVudCA9PT0gIioiICkgeworCisJCQkJY3VycmVudCA9IHByZXY7CisKKwkJCS8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJldiBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnQKKwkJCX0gZWxzZSBpZiAoIHByZXYgIT09ICIqIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkgeworCisJCQkJLy8gU2VlayBhIGRpcmVjdCBjb252ZXJ0ZXIKKwkJCQljb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyAiKiAiICsgY3VycmVudCBdOworCisJCQkJLy8gSWYgbm9uZSBmb3VuZCwgc2VlayBhIHBhaXIKKwkJCQlpZiAoICFjb252ICkgeworCQkJCQlmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkgeworCisJCQkJCQkvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnQKKwkJCQkJCXRtcCA9IGNvbnYyLnNwbGl0KCAiICIgKTsKKwkJCQkJCWlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7CisKKwkJCQkJCQkvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXQKKwkJCQkJCQljb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIHRtcFsgMCBdIF0gfHwKKwkJCQkJCQkJY29udmVydGVyc1sgIiogIiArIHRtcFsgMCBdIF07CisJCQkJCQkJaWYgKCBjb252ICkgeworCisJCQkJCQkJCS8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnMKKwkJCQkJCQkJaWYgKCBjb252ID09PSB0cnVlICkgeworCQkJCQkJCQkJY29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07CisKKwkJCQkJCQkJLy8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZQorCQkJCQkJCQl9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkgeworCQkJCQkJCQkJY3VycmVudCA9IHRtcFsgMCBdOworCQkJCQkJCQkJZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7CisJCQkJCQkJCX0KKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCisJCQkJLy8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpCisJCQkJaWYgKCBjb252ICE9PSB0cnVlICkgeworCisJCQkJCS8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW0KKwkJCQkJaWYgKCBjb252ICYmIHNbICJ0aHJvd3MiIF0gKSB7IC8vIGpzY3M6aWdub3JlIHJlcXVpcmVEb3ROb3RhdGlvbgorCQkJCQkJcmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApOworCQkJCQl9IGVsc2UgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQlyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7CisJCQkJCQl9IGNhdGNoICggZSApIHsKKwkJCQkJCQlyZXR1cm4geworCQkJCQkJCQlzdGF0ZTogInBhcnNlcmVycm9yIiwKKwkJCQkJCQkJZXJyb3I6IGNvbnYgPyBlIDogIk5vIGNvbnZlcnNpb24gZnJvbSAiICsgcHJldiArICIgdG8gIiArIGN1cnJlbnQKKwkJCQkJCQl9OworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHsgc3RhdGU6ICJzdWNjZXNzIiwgZGF0YTogcmVzcG9uc2UgfTsKK30KKworalF1ZXJ5LmV4dGVuZCggeworCisJLy8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzCisJYWN0aXZlOiAwLAorCisJLy8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdAorCWxhc3RNb2RpZmllZDoge30sCisJZXRhZzoge30sCisKKwlhamF4U2V0dGluZ3M6IHsKKwkJdXJsOiBhamF4TG9jYXRpb24sCisJCXR5cGU6ICJHRVQiLAorCQlpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0KCBhamF4TG9jUGFydHNbIDEgXSApLAorCQlnbG9iYWw6IHRydWUsCisJCXByb2Nlc3NEYXRhOiB0cnVlLAorCQlhc3luYzogdHJ1ZSwKKwkJY29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLAorCQkvKgorCQl0aW1lb3V0OiAwLAorCQlkYXRhOiBudWxsLAorCQlkYXRhVHlwZTogbnVsbCwKKwkJdXNlcm5hbWU6IG51bGwsCisJCXBhc3N3b3JkOiBudWxsLAorCQljYWNoZTogbnVsbCwKKwkJdGhyb3dzOiBmYWxzZSwKKwkJdHJhZGl0aW9uYWw6IGZhbHNlLAorCQloZWFkZXJzOiB7fSwKKwkJKi8KKworCQlhY2NlcHRzOiB7CisJCQkiKiI6IGFsbFR5cGVzLAorCQkJdGV4dDogInRleHQvcGxhaW4iLAorCQkJaHRtbDogInRleHQvaHRtbCIsCisJCQl4bWw6ICJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIiwKKwkJCWpzb246ICJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiCisJCX0sCisKKwkJY29udGVudHM6IHsKKwkJCXhtbDogL1xieG1sXGIvLAorCQkJaHRtbDogL1xiaHRtbC8sCisJCQlqc29uOiAvXGJqc29uXGIvCisJCX0sCisKKwkJcmVzcG9uc2VGaWVsZHM6IHsKKwkJCXhtbDogInJlc3BvbnNlWE1MIiwKKwkJCXRleHQ6ICJyZXNwb25zZVRleHQiLAorCQkJanNvbjogInJlc3BvbnNlSlNPTiIKKwkJfSwKKworCQkvLyBEYXRhIGNvbnZlcnRlcnMKKwkJLy8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsICIqIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2UKKwkJY29udmVydGVyczogeworCisJCQkvLyBDb252ZXJ0IGFueXRoaW5nIHRvIHRleHQKKwkJCSIqIHRleHQiOiBTdHJpbmcsCisKKwkJCS8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKQorCQkJInRleHQgaHRtbCI6IHRydWUsCisKKwkJCS8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb24KKwkJCSJ0ZXh0IGpzb24iOiBqUXVlcnkucGFyc2VKU09OLAorCisJCQkvLyBQYXJzZSB0ZXh0IGFzIHhtbAorCQkJInRleHQgeG1sIjogalF1ZXJ5LnBhcnNlWE1MCisJCX0sCisKKwkJLy8gRm9yIG9wdGlvbnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDoKKwkJLy8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZgorCQkvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZQorCQkvLyBkZWVwIGV4dGVuZGVkIChzZWUgYWpheEV4dGVuZCkKKwkJZmxhdE9wdGlvbnM6IHsKKwkJCXVybDogdHJ1ZSwKKwkJCWNvbnRleHQ6IHRydWUKKwkJfQorCX0sCisKKwkvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldAorCS8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy4KKwkvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLgorCWFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7CisJCXJldHVybiBzZXR0aW5ncyA/CisKKwkJCS8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0CisJCQlhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6CisKKwkJCS8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3MKKwkJCWFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApOworCX0sCisKKwlhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSwKKwlhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSwKKworCS8vIE1haW4gbWV0aG9kCisJYWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHsKKworCQkvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZQorCQlpZiAoIHR5cGVvZiB1cmwgPT09ICJvYmplY3QiICkgeworCQkJb3B0aW9ucyA9IHVybDsKKwkJCXVybCA9IHVuZGVmaW5lZDsKKwkJfQorCisJCS8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0CisJCW9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworCisJCXZhcgorCisJCQkvLyBDcm9zcy1kb21haW4gZGV0ZWN0aW9uIHZhcnMKKwkJCXBhcnRzLAorCisJCQkvLyBMb29wIHZhcmlhYmxlCisJCQlpLAorCisJCQkvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtCisJCQljYWNoZVVSTCwKKworCQkJLy8gUmVzcG9uc2UgaGVhZGVycyBhcyBzdHJpbmcKKwkJCXJlc3BvbnNlSGVhZGVyc1N0cmluZywKKworCQkJLy8gdGltZW91dCBoYW5kbGUKKwkJCXRpbWVvdXRUaW1lciwKKworCQkJLy8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkCisJCQlmaXJlR2xvYmFscywKKworCQkJdHJhbnNwb3J0LAorCisJCQkvLyBSZXNwb25zZSBoZWFkZXJzCisJCQlyZXNwb25zZUhlYWRlcnMsCisKKwkJCS8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3QKKwkJCXMgPSBqUXVlcnkuYWpheFNldHVwKCB7fSwgb3B0aW9ucyApLAorCisJCQkvLyBDYWxsYmFja3MgY29udGV4dAorCQkJY2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsCisKKwkJCS8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMgaXMgY2FsbGJhY2tDb250ZXh0IGlmIGl0IGlzIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IGNvbGxlY3Rpb24KKwkJCWdsb2JhbEV2ZW50Q29udGV4dCA9IHMuY29udGV4dCAmJgorCQkJCSggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/CisJCQkJCWpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOgorCQkJCQlqUXVlcnkuZXZlbnQsCisKKwkJCS8vIERlZmVycmVkcworCQkJZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSwKKwkJCWNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICksCisKKwkJCS8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCisJCQlzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LAorCisJCQkvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKQorCQkJcmVxdWVzdEhlYWRlcnMgPSB7fSwKKwkJCXJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSwKKworCQkJLy8gVGhlIGpxWEhSIHN0YXRlCisJCQlzdGF0ZSA9IDAsCisKKwkJCS8vIERlZmF1bHQgYWJvcnQgbWVzc2FnZQorCQkJc3RyQWJvcnQgPSAiY2FuY2VsZWQiLAorCisJCQkvLyBGYWtlIHhocgorCQkJanFYSFIgPSB7CisJCQkJcmVhZHlTdGF0ZTogMCwKKworCQkJCS8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWQKKwkJCQlnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHsKKwkJCQkJdmFyIG1hdGNoOworCQkJCQlpZiAoIHN0YXRlID09PSAyICkgeworCQkJCQkJaWYgKCAhcmVzcG9uc2VIZWFkZXJzICkgeworCQkJCQkJCXJlc3BvbnNlSGVhZGVycyA9IHt9OworCQkJCQkJCXdoaWxlICggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7CisJCQkJCQkJCXJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpIF0gPSBtYXRjaFsgMiBdOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJCW1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSBdOworCQkJCQl9CisJCQkJCXJldHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoOworCQkJCX0sCisKKwkJCQkvLyBSYXcgc3RyaW5nCisJCQkJZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHsKKwkJCQkJcmV0dXJuIHN0YXRlID09PSAyID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDsKKwkJCQl9LAorCisJCQkJLy8gQ2FjaGVzIHRoZSBoZWFkZXIKKwkJCQlzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CisJCQkJCXZhciBsbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKKwkJCQkJaWYgKCAhc3RhdGUgKSB7CisJCQkJCQluYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbG5hbWUgXSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gfHwgbmFtZTsKKwkJCQkJCXJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTsKKwkJCQkJfQorCQkJCQlyZXR1cm4gdGhpczsKKwkJCQl9LAorCisJCQkJLy8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXIKKwkJCQlvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHsKKwkJCQkJaWYgKCAhc3RhdGUgKSB7CisJCQkJCQlzLm1pbWVUeXBlID0gdHlwZTsKKwkJCQkJfQorCQkJCQlyZXR1cm4gdGhpczsKKwkJCQl9LAorCisJCQkJLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKKwkJCQlzdGF0dXNDb2RlOiBmdW5jdGlvbiggbWFwICkgeworCQkJCQl2YXIgY29kZTsKKwkJCQkJaWYgKCBtYXAgKSB7CisJCQkJCQlpZiAoIHN0YXRlIDwgMiApIHsKKwkJCQkJCQlmb3IgKCBjb2RlIGluIG1hcCApIHsKKworCQkJCQkJCQkvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxiYWNrIGluIGEgd2F5IHRoYXQgcHJlc2VydmVzIG9sZCBvbmVzCisJCQkJCQkJCXN0YXR1c0NvZGVbIGNvZGUgXSA9IFsgc3RhdHVzQ29kZVsgY29kZSBdLCBtYXBbIGNvZGUgXSBdOworCQkJCQkJCX0KKwkJCQkJCX0gZWxzZSB7CisKKwkJCQkJCQkvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3MKKwkJCQkJCQlqcVhIUi5hbHdheXMoIG1hcFsganFYSFIuc3RhdHVzIF0gKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlyZXR1cm4gdGhpczsKKwkJCQl9LAorCisJCQkJLy8gQ2FuY2VsIHRoZSByZXF1ZXN0CisJCQkJYWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkgeworCQkJCQl2YXIgZmluYWxUZXh0ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDsKKwkJCQkJaWYgKCB0cmFuc3BvcnQgKSB7CisJCQkJCQl0cmFuc3BvcnQuYWJvcnQoIGZpbmFsVGV4dCApOworCQkJCQl9CisJCQkJCWRvbmUoIDAsIGZpbmFsVGV4dCApOworCQkJCQlyZXR1cm4gdGhpczsKKwkJCQl9CisJCQl9OworCisJCS8vIEF0dGFjaCBkZWZlcnJlZHMKKwkJZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKS5jb21wbGV0ZSA9IGNvbXBsZXRlRGVmZXJyZWQuYWRkOworCQlqcVhIUi5zdWNjZXNzID0ganFYSFIuZG9uZTsKKwkJanFYSFIuZXJyb3IgPSBqcVhIUi5mYWlsOworCisJCS8vIFJlbW92ZSBoYXNoIGNoYXJhY3RlciAoIzc1MzE6IGFuZCBzdHJpbmcgcHJvbW90aW9uKQorCQkvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkICgjNTg2NjogSUU3IGlzc3VlIHdpdGggcHJvdG9jb2wtbGVzcyB1cmxzKQorCQkvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKCMxMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKQorCQkvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGUKKwkJcy51cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGFqYXhMb2NhdGlvbiApICsgIiIgKQorCQkJLnJlcGxhY2UoIHJoYXNoLCAiIiApCisJCQkucmVwbGFjZSggcnByb3RvY29sLCBhamF4TG9jUGFydHNbIDEgXSArICIvLyIgKTsKKworCQkvLyBBbGlhcyBtZXRob2Qgb3B0aW9uIHRvIHR5cGUgYXMgcGVyIHRpY2tldCAjMTIwMDQKKwkJcy50eXBlID0gb3B0aW9ucy5tZXRob2QgfHwgb3B0aW9ucy50eXBlIHx8IHMubWV0aG9kIHx8IHMudHlwZTsKKworCQkvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0CisJCXMuZGF0YVR5cGVzID0galF1ZXJ5LnRyaW0oIHMuZGF0YVR5cGUgfHwgIioiICkudG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdHdoaXRlICkgfHwgWyAiIiBdOworCisJCS8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB3ZSBoYXZlIGEgcHJvdG9jb2w6aG9zdDpwb3J0IG1pc21hdGNoCisJCWlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkgeworCQkJcGFydHMgPSBydXJsLmV4ZWMoIHMudXJsLnRvTG93ZXJDYXNlKCkgKTsKKwkJCXMuY3Jvc3NEb21haW4gPSAhISggcGFydHMgJiYKKwkJCQkoIHBhcnRzWyAxIF0gIT09IGFqYXhMb2NQYXJ0c1sgMSBdIHx8IHBhcnRzWyAyIF0gIT09IGFqYXhMb2NQYXJ0c1sgMiBdIHx8CisJCQkJCSggcGFydHNbIDMgXSB8fCAoIHBhcnRzWyAxIF0gPT09ICJodHRwOiIgPyAiODAiIDogIjQ0MyIgKSApICE9PQorCQkJCQkJKCBhamF4TG9jUGFydHNbIDMgXSB8fCAoIGFqYXhMb2NQYXJ0c1sgMSBdID09PSAiaHR0cDoiID8gIjgwIiA6ICI0NDMiICkgKSApCisJCQkpOworCQl9CisKKwkJLy8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nCisJCWlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gInN0cmluZyIgKSB7CisJCQlzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApOworCQl9CisKKwkJLy8gQXBwbHkgcHJlZmlsdGVycworCQlpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTsKKworCQkvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZQorCQlpZiAoIHN0YXRlID09PSAyICkgeworCQkJcmV0dXJuIGpxWEhSOworCQl9CisKKwkJLy8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG8KKwkJLy8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ugc2NlbmFyaW8gKCMxNTExOCkKKwkJZmlyZUdsb2JhbHMgPSBqUXVlcnkuZXZlbnQgJiYgcy5nbG9iYWw7CisKKwkJLy8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0cworCQlpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHsKKwkJCWpRdWVyeS5ldmVudC50cmlnZ2VyKCAiYWpheFN0YXJ0IiApOworCQl9CisKKwkJLy8gVXBwZXJjYXNlIHRoZSB0eXBlCisJCXMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpOworCisJCS8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50CisJCXMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApOworCisJCS8vIFNhdmUgdGhlIFVSTCBpbiBjYXNlIHdlJ3JlIHRveWluZyB3aXRoIHRoZSBJZi1Nb2RpZmllZC1TaW5jZQorCQkvLyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIgbGF0ZXIgb24KKwkJY2FjaGVVUkwgPSBzLnVybDsKKworCQkvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudAorCQlpZiAoICFzLmhhc0NvbnRlbnQgKSB7CisKKwkJCS8vIElmIGRhdGEgaXMgYXZhaWxhYmxlLCBhcHBlbmQgZGF0YSB0byB1cmwKKwkJCWlmICggcy5kYXRhICkgeworCQkJCWNhY2hlVVJMID0gKCBzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gIiYiIDogIj8iICkgKyBzLmRhdGEgKTsKKworCQkJCS8vICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnkKKwkJCQlkZWxldGUgcy5kYXRhOworCQkJfQorCisJCQkvLyBBZGQgYW50aS1jYWNoZSBpbiB1cmwgaWYgbmVlZGVkCisJCQlpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkgeworCQkJCXMudXJsID0gcnRzLnRlc3QoIGNhY2hlVVJMICkgPworCisJCQkJCS8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSAnXycgcGFyYW1ldGVyLCBzZXQgaXRzIHZhbHVlCisJCQkJCWNhY2hlVVJMLnJlcGxhY2UoIHJ0cywgIiQxXz0iICsgbm9uY2UrKyApIDoKKworCQkJCQkvLyBPdGhlcndpc2UgYWRkIG9uZSB0byB0aGUgZW5kCisJCQkJCWNhY2hlVVJMICsgKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/ICImIiA6ICI/IiApICsgIl89IiArIG5vbmNlKys7CisJCQl9CisJCX0KKworCQkvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgorCQlpZiAoIHMuaWZNb2RpZmllZCApIHsKKwkJCWlmICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApIHsKKwkJCQlqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTW9kaWZpZWQtU2luY2UiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICk7CisJCQl9CisJCQlpZiAoIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICkgeworCQkJCWpxWEhSLnNldFJlcXVlc3RIZWFkZXIoICJJZi1Ob25lLU1hdGNoIiwgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTsKKwkJCX0KKwkJfQorCisJCS8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudAorCQlpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHsKKwkJCWpxWEhSLnNldFJlcXVlc3RIZWFkZXIoICJDb250ZW50LVR5cGUiLCBzLmNvbnRlbnRUeXBlICk7CisJCX0KKworCQkvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlCisJCWpxWEhSLnNldFJlcXVlc3RIZWFkZXIoCisJCQkiQWNjZXB0IiwKKwkJCXMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gPworCQkJCXMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdICsKKwkJCQkJKCBzLmRhdGFUeXBlc1sgMCBdICE9PSAiKiIgPyAiLCAiICsgYWxsVHlwZXMgKyAiOyBxPTAuMDEiIDogIiIgKSA6CisJCQkJcy5hY2NlcHRzWyAiKiIgXQorCQkpOworCisJCS8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvbgorCQlmb3IgKCBpIGluIHMuaGVhZGVycyApIHsKKwkJCWpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGksIHMuaGVhZGVyc1sgaSBdICk7CisJCX0KKworCQkvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0CisJCWlmICggcy5iZWZvcmVTZW5kICYmCisJCQkoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IHN0YXRlID09PSAyICkgKSB7CisKKwkJCS8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVybgorCQkJcmV0dXJuIGpxWEhSLmFib3J0KCk7CisJCX0KKworCQkvLyBhYm9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb24KKwkJc3RyQWJvcnQgPSAiYWJvcnQiOworCisJCS8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkcworCQlmb3IgKCBpIGluIHsgc3VjY2VzczogMSwgZXJyb3I6IDEsIGNvbXBsZXRlOiAxIH0gKSB7CisJCQlqcVhIUlsgaSBdKCBzWyBpIF0gKTsKKwkJfQorCisJCS8vIEdldCB0cmFuc3BvcnQKKwkJdHJhbnNwb3J0ID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhSICk7CisKKwkJLy8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0CisJCWlmICggIXRyYW5zcG9ydCApIHsKKwkJCWRvbmUoIC0xLCAiTm8gVHJhbnNwb3J0IiApOworCQl9IGVsc2UgeworCQkJanFYSFIucmVhZHlTdGF0ZSA9IDE7CisKKwkJCS8vIFNlbmQgZ2xvYmFsIGV2ZW50CisJCQlpZiAoIGZpcmVHbG9iYWxzICkgeworCQkJCWdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheFNlbmQiLCBbIGpxWEhSLCBzIF0gKTsKKwkJCX0KKworCQkJLy8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYWpheFNlbmQsIHN0b3AgdGhlcmUKKwkJCWlmICggc3RhdGUgPT09IDIgKSB7CisJCQkJcmV0dXJuIGpxWEhSOworCQkJfQorCisJCQkvLyBUaW1lb3V0CisJCQlpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHsKKwkJCQl0aW1lb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7CisJCQkJCWpxWEhSLmFib3J0KCAidGltZW91dCIgKTsKKwkJCQl9LCBzLnRpbWVvdXQgKTsKKwkJCX0KKworCQkJdHJ5IHsKKwkJCQlzdGF0ZSA9IDE7CisJCQkJdHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7CisJCQl9IGNhdGNoICggZSApIHsKKworCQkJCS8vIFByb3BhZ2F0ZSBleGNlcHRpb24gYXMgZXJyb3IgaWYgbm90IGRvbmUKKwkJCQlpZiAoIHN0YXRlIDwgMiApIHsKKwkJCQkJZG9uZSggLTEsIGUgKTsKKworCQkJCS8vIFNpbXBseSByZXRocm93IG90aGVyd2lzZQorCQkJCX0gZWxzZSB7CisJCQkJCXRocm93IGU7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLy8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lCisJCWZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVzcG9uc2VzLCBoZWFkZXJzICkgeworCQkJdmFyIGlzU3VjY2Vzcywgc3VjY2VzcywgZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCwKKwkJCQlzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDsKKworCQkJLy8gQ2FsbGVkIG9uY2UKKwkJCWlmICggc3RhdGUgPT09IDIgKSB7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQkvLyBTdGF0ZSBpcyAiZG9uZSIgbm93CisJCQlzdGF0ZSA9IDI7CisKKwkJCS8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3RzCisJCQlpZiAoIHRpbWVvdXRUaW1lciApIHsKKwkJCQl3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTsKKwkJCX0KKworCQkJLy8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCS8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpCisJCQl0cmFuc3BvcnQgPSB1bmRlZmluZWQ7CisKKwkJCS8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnMKKwkJCXJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgIiI7CisKKwkJCS8vIFNldCByZWFkeVN0YXRlCisJCQlqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwOworCisJCQkvLyBEZXRlcm1pbmUgaWYgc3VjY2Vzc2Z1bAorCQkJaXNTdWNjZXNzID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQ7CisKKwkJCS8vIEdldCByZXNwb25zZSBkYXRhCisJCQlpZiAoIHJlc3BvbnNlcyApIHsKKwkJCQlyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTsKKwkJCX0KKworCQkJLy8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KQorCQkJcmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTsKKworCQkJLy8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmcKKwkJCWlmICggaXNTdWNjZXNzICkgeworCisJCQkJLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS4KKwkJCQlpZiAoIHMuaWZNb2RpZmllZCApIHsKKwkJCQkJbW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggIkxhc3QtTW9kaWZpZWQiICk7CisJCQkJCWlmICggbW9kaWZpZWQgKSB7CisJCQkJCQlqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7CisJCQkJCX0KKwkJCQkJbW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggImV0YWciICk7CisJCQkJCWlmICggbW9kaWZpZWQgKSB7CisJCQkJCQlqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSA9IG1vZGlmaWVkOworCQkJCQl9CisJCQkJfQorCisJCQkJLy8gaWYgbm8gY29udGVudAorCQkJCWlmICggc3RhdHVzID09PSAyMDQgfHwgcy50eXBlID09PSAiSEVBRCIgKSB7CisJCQkJCXN0YXR1c1RleHQgPSAibm9jb250ZW50IjsKKworCQkJCS8vIGlmIG5vdCBtb2RpZmllZAorCQkJCX0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMzA0ICkgeworCQkJCQlzdGF0dXNUZXh0ID0gIm5vdG1vZGlmaWVkIjsKKworCQkJCS8vIElmIHdlIGhhdmUgZGF0YSwgbGV0J3MgY29udmVydCBpdAorCQkJCX0gZWxzZSB7CisJCQkJCXN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTsKKwkJCQkJc3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7CisJCQkJCWVycm9yID0gcmVzcG9uc2UuZXJyb3I7CisJCQkJCWlzU3VjY2VzcyA9ICFlcnJvcjsKKwkJCQl9CisJCQl9IGVsc2UgeworCisJCQkJLy8gV2UgZXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQKKwkJCQkvLyB0aGVuIG5vcm1hbGl6ZSBzdGF0dXNUZXh0IGFuZCBzdGF0dXMgZm9yIG5vbi1hYm9ydHMKKwkJCQllcnJvciA9IHN0YXR1c1RleHQ7CisJCQkJaWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7CisJCQkJCXN0YXR1c1RleHQgPSAiZXJyb3IiOworCQkJCQlpZiAoIHN0YXR1cyA8IDAgKSB7CisJCQkJCQlzdGF0dXMgPSAwOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQkvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdAorCQkJanFYSFIuc3RhdHVzID0gc3RhdHVzOworCQkJanFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyAiIjsKKworCQkJLy8gU3VjY2Vzcy9FcnJvcgorCQkJaWYgKCBpc1N1Y2Nlc3MgKSB7CisJCQkJZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7CisJCQl9IGVsc2UgeworCQkJCWRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApOworCQkJfQorCisJCQkvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcworCQkJanFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApOworCQkJc3RhdHVzQ29kZSA9IHVuZGVmaW5lZDsKKworCQkJaWYgKCBmaXJlR2xvYmFscyApIHsKKwkJCQlnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gImFqYXhTdWNjZXNzIiA6ICJhamF4RXJyb3IiLAorCQkJCQlbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApOworCQkJfQorCisJCQkvLyBDb21wbGV0ZQorCQkJY29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTsKKworCQkJaWYgKCBmaXJlR2xvYmFscyApIHsKKwkJCQlnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggImFqYXhDb21wbGV0ZSIsIFsganFYSFIsIHMgXSApOworCisJCQkJLy8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyCisJCQkJaWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHsKKwkJCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RvcCIgKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm4ganFYSFI7CisJfSwKKworCWdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkgeworCQlyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgImpzb24iICk7CisJfSwKKworCWdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7CisJCXJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssICJzY3JpcHQiICk7CisJfQorfSApOworCitqUXVlcnkuZWFjaCggWyAiZ2V0IiwgInBvc3QiIF0sIGZ1bmN0aW9uKCBpLCBtZXRob2QgKSB7CisJalF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkgeworCisJCS8vIHNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkCisJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGRhdGEgKSApIHsKKwkJCXR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrOworCQkJY2FsbGJhY2sgPSBkYXRhOworCQkJZGF0YSA9IHVuZGVmaW5lZDsKKwkJfQorCisJCS8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKQorCQlyZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHsKKwkJCXVybDogdXJsLAorCQkJdHlwZTogbWV0aG9kLAorCQkJZGF0YVR5cGU6IHR5cGUsCisJCQlkYXRhOiBkYXRhLAorCQkJc3VjY2VzczogY2FsbGJhY2sKKwkJfSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7CisJfTsKK30gKTsKKworCitqUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsICkgeworCXJldHVybiBqUXVlcnkuYWpheCggeworCQl1cmw6IHVybCwKKworCQkvLyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKCMxMTI2NCkKKwkJdHlwZTogIkdFVCIsCisJCWRhdGFUeXBlOiAic2NyaXB0IiwKKwkJY2FjaGU6IHRydWUsCisJCWFzeW5jOiBmYWxzZSwKKwkJZ2xvYmFsOiBmYWxzZSwKKwkJInRocm93cyI6IHRydWUKKwl9ICk7Cit9OworCisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKwl3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHsKKwkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkgeworCQkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7CisJCQkJalF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTsKKwkJCX0gKTsKKwkJfQorCisJCWlmICggdGhpc1sgMCBdICkgeworCisJCQkvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFyb3VuZAorCQkJdmFyIHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApOworCisJCQlpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgeworCQkJCXdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWyAwIF0gKTsKKwkJCX0KKworCQkJd3JhcC5tYXAoIGZ1bmN0aW9uKCkgeworCQkJCXZhciBlbGVtID0gdGhpczsKKworCQkJCXdoaWxlICggZWxlbS5maXJzdENoaWxkICYmIGVsZW0uZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gMSApIHsKKwkJCQkJZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsKKwkJCQl9CisKKwkJCQlyZXR1cm4gZWxlbTsKKwkJCX0gKS5hcHBlbmQoIHRoaXMgKTsKKwkJfQorCisJCXJldHVybiB0aGlzOworCX0sCisKKwl3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkgeworCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7CisJCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHsKKwkJCQlqUXVlcnkoIHRoaXMgKS53cmFwSW5uZXIoIGh0bWwuY2FsbCggdGhpcywgaSApICk7CisJCQl9ICk7CisJCX0KKworCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKwkJCXZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksCisJCQkJY29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7CisKKwkJCWlmICggY29udGVudHMubGVuZ3RoICkgeworCQkJCWNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTsKKworCQkJfSBlbHNlIHsKKwkJCQlzZWxmLmFwcGVuZCggaHRtbCApOworCQkJfQorCQl9ICk7CisJfSwKKworCXdyYXA6IGZ1bmN0aW9uKCBodG1sICkgeworCQl2YXIgaXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICk7CisKKwkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7CisJCQlqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBpc0Z1bmN0aW9uID8gaHRtbC5jYWxsKCB0aGlzLCBpICkgOiBodG1sICk7CisJCX0gKTsKKwl9LAorCisJdW53cmFwOiBmdW5jdGlvbigpIHsKKwkJcmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaCggZnVuY3Rpb24oKSB7CisJCQlpZiAoICFqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJib2R5IiApICkgeworCQkJCWpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTsKKwkJCX0KKwkJfSApLmVuZCgpOworCX0KK30gKTsKKworCitmdW5jdGlvbiBnZXREaXNwbGF5KCBlbGVtICkgeworCXJldHVybiBlbGVtLnN0eWxlICYmIGVsZW0uc3R5bGUuZGlzcGxheSB8fCBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKTsKK30KKworZnVuY3Rpb24gZmlsdGVySGlkZGVuKCBlbGVtICkgeworCisJLy8gRGlzY29ubmVjdGVkIGVsZW1lbnRzIGFyZSBjb25zaWRlcmVkIGhpZGRlbgorCWlmICggIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50LCBlbGVtICkgKSB7CisJCXJldHVybiB0cnVlOworCX0KKwl3aGlsZSAoIGVsZW0gJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKwkJaWYgKCBnZXREaXNwbGF5KCBlbGVtICkgPT09ICJub25lIiB8fCBlbGVtLnR5cGUgPT09ICJoaWRkZW4iICkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJZWxlbSA9IGVsZW0ucGFyZW50Tm9kZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitqUXVlcnkuZXhwci5maWx0ZXJzLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkgeworCisJLy8gU3VwcG9ydDogT3BlcmEgPD0gMTIuMTIKKwkvLyBPcGVyYSByZXBvcnRzIG9mZnNldFdpZHRocyBhbmQgb2Zmc2V0SGVpZ2h0cyBsZXNzIHRoYW4gemVybyBvbiBzb21lIGVsZW1lbnRzCisJcmV0dXJuIHN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzKCkgPworCQkoIGVsZW0ub2Zmc2V0V2lkdGggPD0gMCAmJiBlbGVtLm9mZnNldEhlaWdodCA8PSAwICYmCisJCQkhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIDoKKwkJCWZpbHRlckhpZGRlbiggZWxlbSApOworfTsKKworalF1ZXJ5LmV4cHIuZmlsdGVycy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7CisJcmV0dXJuICFqUXVlcnkuZXhwci5maWx0ZXJzLmhpZGRlbiggZWxlbSApOworfTsKKworCisKKwordmFyIHIyMCA9IC8lMjAvZywKKwlyYnJhY2tldCA9IC9cW1xdJC8sCisJckNSTEYgPSAvXHI/XG4vZywKKwlyc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksCisJcnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pOworCitmdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7CisJdmFyIG5hbWU7CisKKwlpZiAoIGpRdWVyeS5pc0FycmF5KCBvYmogKSApIHsKKworCQkvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS4KKwkJalF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7CisJCQlpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkgeworCisJCQkJLy8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLgorCQkJCWFkZCggcHJlZml4LCB2ICk7CisKKwkJCX0gZWxzZSB7CisKKwkJCQkvLyBJdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMgbnVtZXJpYyBpbmRleC4KKwkJCQlidWlsZFBhcmFtcygKKwkJCQkJcHJlZml4ICsgIlsiICsgKCB0eXBlb2YgdiA9PT0gIm9iamVjdCIgJiYgdiAhPSBudWxsID8gaSA6ICIiICkgKyAiXSIsCisJCQkJCXYsCisJCQkJCXRyYWRpdGlvbmFsLAorCQkJCQlhZGQKKwkJCQkpOworCQkJfQorCQl9ICk7CisKKwl9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgalF1ZXJ5LnR5cGUoIG9iaiApID09PSAib2JqZWN0IiApIHsKKworCQkvLyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uCisJCWZvciAoIG5hbWUgaW4gb2JqICkgeworCQkJYnVpbGRQYXJhbXMoIHByZWZpeCArICJbIiArIG5hbWUgKyAiXSIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7CisJCX0KKworCX0gZWxzZSB7CisKKwkJLy8gU2VyaWFsaXplIHNjYWxhciBpdGVtLgorCQlhZGQoIHByZWZpeCwgb2JqICk7CisJfQorfQorCisvLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZgorLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nCitqUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7CisJdmFyIHByZWZpeCwKKwkJcyA9IFtdLAorCQlhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHsKKworCQkJLy8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlCisJCQl2YWx1ZSA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApID8gdmFsdWUoKSA6ICggdmFsdWUgPT0gbnVsbCA/ICIiIDogdmFsdWUgKTsKKwkJCXNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KCB2YWx1ZSApOworCQl9OworCisJLy8gU2V0IHRyYWRpdGlvbmFsIHRvIHRydWUgZm9yIGpRdWVyeSA8PSAxLjMuMiBiZWhhdmlvci4KKwlpZiAoIHRyYWRpdGlvbmFsID09PSB1bmRlZmluZWQgKSB7CisJCXRyYWRpdGlvbmFsID0galF1ZXJ5LmFqYXhTZXR0aW5ncyAmJiBqUXVlcnkuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsOworCX0KKworCS8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuCisJaWYgKCBqUXVlcnkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHsKKworCQkvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHMKKwkJalF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkgeworCQkJYWRkKCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTsKKwkJfSApOworCisJfSBlbHNlIHsKKworCQkvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSAib2xkIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXIKKwkJLy8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBwYXJhbXMgcmVjdXJzaXZlbHkuCisJCWZvciAoIHByZWZpeCBpbiBhICkgeworCQkJYnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKKwkJfQorCX0KKworCS8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6YXRpb24KKwlyZXR1cm4gcy5qb2luKCAiJiIgKS5yZXBsYWNlKCByMjAsICIrIiApOworfTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCXNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7CisJCXJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApOworCX0sCisJc2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkgeworCisJCQkvLyBDYW4gYWRkIHByb3BIb29rIGZvciAiZWxlbWVudHMiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50cworCQkJdmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsICJlbGVtZW50cyIgKTsKKwkJCXJldHVybiBlbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIGVsZW1lbnRzICkgOiB0aGlzOworCQl9ICkKKwkJLmZpbHRlciggZnVuY3Rpb24oKSB7CisJCQl2YXIgdHlwZSA9IHRoaXMudHlwZTsKKworCQkJLy8gVXNlIC5pcygiOmRpc2FibGVkIikgc28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3MKKwkJCXJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlzKCAiOmRpc2FibGVkIiApICYmCisJCQkJcnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJgorCQkJCSggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTsKKwkJfSApCisJCS5tYXAoIGZ1bmN0aW9uKCBpLCBlbGVtICkgeworCQkJdmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpOworCisJCQlyZXR1cm4gdmFsID09IG51bGwgPworCQkJCW51bGwgOgorCQkJCWpRdWVyeS5pc0FycmF5KCB2YWwgKSA/CisJCQkJCWpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHsKKwkJCQkJCXJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkgfTsKKwkJCQkJfSApIDoKKwkJCQkJeyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsICJcclxuIiApIH07CisJCX0gKS5nZXQoKTsKKwl9Cit9ICk7CisKKworLy8gQ3JlYXRlIHRoZSByZXF1ZXN0IG9iamVjdAorLy8gKFRoaXMgaXMgc3RpbGwgYXR0YWNoZWQgdG8gYWpheFNldHRpbmdzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KQoralF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSB3aW5kb3cuQWN0aXZlWE9iamVjdCAhPT0gdW5kZWZpbmVkID8KKworCS8vIFN1cHBvcnQ6IElFNi1JRTgKKwlmdW5jdGlvbigpIHsKKworCQkvLyBYSFIgY2Fubm90IGFjY2VzcyBsb2NhbCBmaWxlcywgYWx3YXlzIHVzZSBBY3RpdmVYIGZvciB0aGF0IGNhc2UKKwkJaWYgKCB0aGlzLmlzTG9jYWwgKSB7CisJCQlyZXR1cm4gY3JlYXRlQWN0aXZlWEhSKCk7CisJCX0KKworCQkvLyBTdXBwb3J0OiBJRSA5LTExCisJCS8vIElFIHNlZW1zIHRvIGVycm9yIG9uIGNyb3NzLWRvbWFpbiBQQVRDSCByZXF1ZXN0cyB3aGVuIEFjdGl2ZVggWEhSCisJCS8vIGlzIHVzZWQuIEluIElFIDkrIGFsd2F5cyB1c2UgdGhlIG5hdGl2ZSBYSFIuCisJCS8vIE5vdGU6IHRoaXMgY29uZGl0aW9uIHdvbid0IGNhdGNoIEVkZ2UgYXMgaXQgZG9lc24ndCBkZWZpbmUKKwkJLy8gZG9jdW1lbnQuZG9jdW1lbnRNb2RlIGJ1dCBpdCBhbHNvIGRvZXNuJ3Qgc3VwcG9ydCBBY3RpdmVYIHNvIGl0IHdvbid0CisJCS8vIHJlYWNoIHRoaXMgY29kZS4KKwkJaWYgKCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPiA4ICkgeworCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkWEhSKCk7CisJCX0KKworCQkvLyBTdXBwb3J0OiBJRTw5CisJCS8vIG9sZElFIFhIUiBkb2VzIG5vdCBzdXBwb3J0IG5vbi1SRkMyNjE2IG1ldGhvZHMgKCMxMzI0MCkKKwkJLy8gU2VlIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9tczUzNjY0OCh2PXZzLjg1KS5hc3B4CisJCS8vIGFuZCBodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzkuaHRtbCNzZWM5CisJCS8vIEFsdGhvdWdoIHRoaXMgY2hlY2sgZm9yIHNpeCBtZXRob2RzIGluc3RlYWQgb2YgZWlnaHQKKwkJLy8gc2luY2UgSUUgYWxzbyBkb2VzIG5vdCBzdXBwb3J0ICJ0cmFjZSIgYW5kICJjb25uZWN0IgorCQlyZXR1cm4gL14oZ2V0fHBvc3R8aGVhZHxwdXR8ZGVsZXRlfG9wdGlvbnMpJC9pLnRlc3QoIHRoaXMudHlwZSApICYmCisJCQljcmVhdGVTdGFuZGFyZFhIUigpIHx8IGNyZWF0ZUFjdGl2ZVhIUigpOworCX0gOgorCisJLy8gRm9yIGFsbCBvdGhlciBicm93c2VycywgdXNlIHRoZSBzdGFuZGFyZCBYTUxIdHRwUmVxdWVzdCBvYmplY3QKKwljcmVhdGVTdGFuZGFyZFhIUjsKKwordmFyIHhocklkID0gMCwKKwl4aHJDYWxsYmFja3MgPSB7fSwKKwl4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpOworCisvLyBTdXBwb3J0OiBJRTwxMAorLy8gT3BlbiByZXF1ZXN0cyBtdXN0IGJlIG1hbnVhbGx5IGFib3J0ZWQgb24gdW5sb2FkICgjNTI4MCkKKy8vIFNlZSBodHRwczovL3N1cHBvcnQubWljcm9zb2Z0LmNvbS9rYi8yODU2NzQ2IGZvciBtb3JlIGluZm8KK2lmICggd2luZG93LmF0dGFjaEV2ZW50ICkgeworCXdpbmRvdy5hdHRhY2hFdmVudCggIm9udW5sb2FkIiwgZnVuY3Rpb24oKSB7CisJCWZvciAoIHZhciBrZXkgaW4geGhyQ2FsbGJhY2tzICkgeworCQkJeGhyQ2FsbGJhY2tzWyBrZXkgXSggdW5kZWZpbmVkLCB0cnVlICk7CisJCX0KKwl9ICk7Cit9CisKKy8vIERldGVybWluZSBzdXBwb3J0IHByb3BlcnRpZXMKK3N1cHBvcnQuY29ycyA9ICEheGhyU3VwcG9ydGVkICYmICggIndpdGhDcmVkZW50aWFscyIgaW4geGhyU3VwcG9ydGVkICk7Cit4aHJTdXBwb3J0ZWQgPSBzdXBwb3J0LmFqYXggPSAhIXhoclN1cHBvcnRlZDsKKworLy8gQ3JlYXRlIHRyYW5zcG9ydCBpZiB0aGUgYnJvd3NlciBjYW4gcHJvdmlkZSBhbiB4aHIKK2lmICggeGhyU3VwcG9ydGVkICkgeworCisJalF1ZXJ5LmFqYXhUcmFuc3BvcnQoIGZ1bmN0aW9uKCBvcHRpb25zICkgeworCisJCS8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3QKKwkJaWYgKCAhb3B0aW9ucy5jcm9zc0RvbWFpbiB8fCBzdXBwb3J0LmNvcnMgKSB7CisKKwkJCXZhciBjYWxsYmFjazsKKworCQkJcmV0dXJuIHsKKwkJCQlzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7CisJCQkJCXZhciBpLAorCQkJCQkJeGhyID0gb3B0aW9ucy54aHIoKSwKKwkJCQkJCWlkID0gKyt4aHJJZDsKKworCQkJCQkvLyBPcGVuIHRoZSBzb2NrZXQKKwkJCQkJeGhyLm9wZW4oCisJCQkJCQlvcHRpb25zLnR5cGUsCisJCQkJCQlvcHRpb25zLnVybCwKKwkJCQkJCW9wdGlvbnMuYXN5bmMsCisJCQkJCQlvcHRpb25zLnVzZXJuYW1lLAorCQkJCQkJb3B0aW9ucy5wYXNzd29yZAorCQkJCQkpOworCisJCQkJCS8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWQKKwkJCQkJaWYgKCBvcHRpb25zLnhockZpZWxkcyApIHsKKwkJCQkJCWZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7CisJCQkJCQkJeGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJLy8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZAorCQkJCQlpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7CisJCQkJCQl4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApOworCQkJCQl9CisKKwkJCQkJLy8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXIKKwkJCQkJLy8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZQorCQkJCQkvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLgorCQkJCQkvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cCkKKwkJCQkJLy8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuCisJCQkJCWlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbICJYLVJlcXVlc3RlZC1XaXRoIiBdICkgeworCQkJCQkJaGVhZGVyc1sgIlgtUmVxdWVzdGVkLVdpdGgiIF0gPSAiWE1MSHR0cFJlcXVlc3QiOworCQkJCQl9CisKKwkJCQkJLy8gU2V0IGhlYWRlcnMKKwkJCQkJZm9yICggaSBpbiBoZWFkZXJzICkgeworCisJCQkJCQkvLyBTdXBwb3J0OiBJRTw5CisJCQkJCQkvLyBJRSdzIEFjdGl2ZVhPYmplY3QgdGhyb3dzIGEgJ1R5cGUgTWlzbWF0Y2gnIGV4Y2VwdGlvbiB3aGVuIHNldHRpbmcKKwkJCQkJCS8vIHJlcXVlc3QgaGVhZGVyIHRvIGEgbnVsbC12YWx1ZS4KKwkJCQkJCS8vCisJCQkJCQkvLyBUbyBrZWVwIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBYSFIgaW1wbGVtZW50YXRpb25zLCBjYXN0IHRoZSB2YWx1ZQorCQkJCQkJLy8gdG8gc3RyaW5nIGFuZCBpZ25vcmUgYHVuZGVmaW5lZGAuCisJCQkJCQlpZiAoIGhlYWRlcnNbIGkgXSAhPT0gdW5kZWZpbmVkICkgeworCQkJCQkJCXhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKyAiIiApOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJLy8gRG8gc2VuZCB0aGUgcmVxdWVzdAorCQkJCQkvLyBUaGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24gd2hpY2ggaXMgYWN0dWFsbHkKKwkJCQkJLy8gaGFuZGxlZCBpbiBqUXVlcnkuYWpheCAoc28gbm8gdHJ5L2NhdGNoIGhlcmUpCisJCQkJCXhoci5zZW5kKCAoIG9wdGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgKSB8fCBudWxsICk7CisKKwkJCQkJLy8gTGlzdGVuZXIKKwkJCQkJY2FsbGJhY2sgPSBmdW5jdGlvbiggXywgaXNBYm9ydCApIHsKKwkJCQkJCXZhciBzdGF0dXMsIHN0YXR1c1RleHQsIHJlc3BvbnNlczsKKworCQkJCQkJLy8gV2FzIG5ldmVyIGNhbGxlZCBhbmQgaXMgYWJvcnRlZCBvciBjb21wbGV0ZQorCQkJCQkJaWYgKCBjYWxsYmFjayAmJiAoIGlzQWJvcnQgfHwgeGhyLnJlYWR5U3RhdGUgPT09IDQgKSApIHsKKworCQkJCQkJCS8vIENsZWFuIHVwCisJCQkJCQkJZGVsZXRlIHhockNhbGxiYWNrc1sgaWQgXTsKKwkJCQkJCQljYWxsYmFjayA9IHVuZGVmaW5lZDsKKwkJCQkJCQl4aHIub25yZWFkeXN0YXRlY2hhbmdlID0galF1ZXJ5Lm5vb3A7CisKKwkJCQkJCQkvLyBBYm9ydCBtYW51YWxseSBpZiBuZWVkZWQKKwkJCQkJCQlpZiAoIGlzQWJvcnQgKSB7CisJCQkJCQkJCWlmICggeGhyLnJlYWR5U3RhdGUgIT09IDQgKSB7CisJCQkJCQkJCQl4aHIuYWJvcnQoKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCXJlc3BvbnNlcyA9IHt9OworCQkJCQkJCQlzdGF0dXMgPSB4aHIuc3RhdHVzOworCisJCQkJCQkJCS8vIFN1cHBvcnQ6IElFPDEwCisJCQkJCQkJCS8vIEFjY2Vzc2luZyBiaW5hcnktZGF0YSByZXNwb25zZVRleHQgdGhyb3dzIGFuIGV4Y2VwdGlvbgorCQkJCQkJCQkvLyAoIzExNDI2KQorCQkJCQkJCQlpZiAoIHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ID09PSAic3RyaW5nIiApIHsKKwkJCQkJCQkJCXJlc3BvbnNlcy50ZXh0ID0geGhyLnJlc3BvbnNlVGV4dDsKKwkJCQkJCQkJfQorCisJCQkJCQkJCS8vIEZpcmVmb3ggdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVuIGFjY2Vzc2luZworCQkJCQkJCQkvLyBzdGF0dXNUZXh0IGZvciBmYXVsdHkgY3Jvc3MtZG9tYWluIHJlcXVlc3RzCisJCQkJCQkJCXRyeSB7CisJCQkJCQkJCQlzdGF0dXNUZXh0ID0geGhyLnN0YXR1c1RleHQ7CisJCQkJCQkJCX0gY2F0Y2ggKCBlICkgeworCisJCQkJCQkJCQkvLyBXZSBub3JtYWxpemUgd2l0aCBXZWJraXQgZ2l2aW5nIGFuIGVtcHR5IHN0YXR1c1RleHQKKwkJCQkJCQkJCXN0YXR1c1RleHQgPSAiIjsKKwkJCQkJCQkJfQorCisJCQkJCQkJCS8vIEZpbHRlciBzdGF0dXMgZm9yIG5vbiBzdGFuZGFyZCBiZWhhdmlvcnMKKworCQkJCQkJCQkvLyBJZiB0aGUgcmVxdWVzdCBpcyBsb2NhbCBhbmQgd2UgaGF2ZSBkYXRhOiBhc3N1bWUgYSBzdWNjZXNzCisJCQkJCQkJCS8vIChzdWNjZXNzIHdpdGggbm8gZGF0YSB3b24ndCBnZXQgbm90aWZpZWQsIHRoYXQncyB0aGUgYmVzdCB3ZQorCQkJCQkJCQkvLyBjYW4gZG8gZ2l2ZW4gY3VycmVudCBpbXBsZW1lbnRhdGlvbnMpCisJCQkJCQkJCWlmICggIXN0YXR1cyAmJiBvcHRpb25zLmlzTG9jYWwgJiYgIW9wdGlvbnMuY3Jvc3NEb21haW4gKSB7CisJCQkJCQkJCQlzdGF0dXMgPSByZXNwb25zZXMudGV4dCA/IDIwMCA6IDQwNDsKKworCQkJCQkJCQkvLyBJRSAtICMxNDUwOiBzb21ldGltZXMgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNAorCQkJCQkJCQl9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDEyMjMgKSB7CisJCQkJCQkJCQlzdGF0dXMgPSAyMDQ7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCS8vIENhbGwgY29tcGxldGUgaWYgbmVlZGVkCisJCQkJCQlpZiAoIHJlc3BvbnNlcyApIHsKKwkJCQkJCQljb21wbGV0ZSggc3RhdHVzLCBzdGF0dXNUZXh0LCByZXNwb25zZXMsIHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSApOworCQkJCQkJfQorCQkJCQl9OworCisJCQkJCS8vIERvIHNlbmQgdGhlIHJlcXVlc3QKKwkJCQkJLy8gYHhoci5zZW5kYCBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uLCBidXQgaXQgd2lsbCBiZQorCQkJCQkvLyBoYW5kbGVkIGluIGpRdWVyeS5hamF4IChzbyBubyB0cnkvY2F0Y2ggaGVyZSkKKwkJCQkJaWYgKCAhb3B0aW9ucy5hc3luYyApIHsKKworCQkJCQkJLy8gSWYgd2UncmUgaW4gc3luYyBtb2RlIHdlIGZpcmUgdGhlIGNhbGxiYWNrCisJCQkJCQljYWxsYmFjaygpOworCQkJCQl9IGVsc2UgaWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHsKKworCQkJCQkJLy8gKElFNiAmIElFNykgaWYgaXQncyBpbiBjYWNoZSBhbmQgaGFzIGJlZW4KKwkJCQkJCS8vIHJldHJpZXZlZCBkaXJlY3RseSB3ZSBuZWVkIHRvIGZpcmUgdGhlIGNhbGxiYWNrCisJCQkJCQl3aW5kb3cuc2V0VGltZW91dCggY2FsbGJhY2sgKTsKKwkJCQkJfSBlbHNlIHsKKworCQkJCQkJLy8gUmVnaXN0ZXIgdGhlIGNhbGxiYWNrLCBidXQgZGVsYXkgaXQgaW4gY2FzZSBgeGhyLnNlbmRgIHRocm93cworCQkJCQkJLy8gQWRkIHRvIHRoZSBsaXN0IG9mIGFjdGl2ZSB4aHIgY2FsbGJhY2tzCisJCQkJCQl4aHIub25yZWFkeXN0YXRlY2hhbmdlID0geGhyQ2FsbGJhY2tzWyBpZCBdID0gY2FsbGJhY2s7CisJCQkJCX0KKwkJCQl9LAorCisJCQkJYWJvcnQ6IGZ1bmN0aW9uKCkgeworCQkJCQlpZiAoIGNhbGxiYWNrICkgeworCQkJCQkJY2FsbGJhY2soIHVuZGVmaW5lZCwgdHJ1ZSApOworCQkJCQl9CisJCQkJfQorCQkJfTsKKwkJfQorCX0gKTsKK30KKworLy8gRnVuY3Rpb25zIHRvIGNyZWF0ZSB4aHJzCitmdW5jdGlvbiBjcmVhdGVTdGFuZGFyZFhIUigpIHsKKwl0cnkgeworCQlyZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpOworCX0gY2F0Y2ggKCBlICkge30KK30KKworZnVuY3Rpb24gY3JlYXRlQWN0aXZlWEhSKCkgeworCXRyeSB7CisJCXJldHVybiBuZXcgd2luZG93LkFjdGl2ZVhPYmplY3QoICJNaWNyb3NvZnQuWE1MSFRUUCIgKTsKKwl9IGNhdGNoICggZSApIHt9Cit9CisKKworCisKKy8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlCitqUXVlcnkuYWpheFNldHVwKCB7CisJYWNjZXB0czogeworCQlzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsICIgKworCQkJImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIKKwl9LAorCWNvbnRlbnRzOiB7CisJCXNjcmlwdDogL1xiKD86amF2YXxlY21hKXNjcmlwdFxiLworCX0sCisJY29udmVydGVyczogeworCQkidGV4dCBzY3JpcHQiOiBmdW5jdGlvbiggdGV4dCApIHsKKwkJCWpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7CisJCQlyZXR1cm4gdGV4dDsKKwkJfQorCX0KK30gKTsKKworLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBnbG9iYWwKK2pRdWVyeS5hamF4UHJlZmlsdGVyKCAic2NyaXB0IiwgZnVuY3Rpb24oIHMgKSB7CisJaWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7CisJCXMuY2FjaGUgPSBmYWxzZTsKKwl9CisJaWYgKCBzLmNyb3NzRG9tYWluICkgeworCQlzLnR5cGUgPSAiR0VUIjsKKwkJcy5nbG9iYWwgPSBmYWxzZTsKKwl9Cit9ICk7CisKKy8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydAoralF1ZXJ5LmFqYXhUcmFuc3BvcnQoICJzY3JpcHQiLCBmdW5jdGlvbiggcyApIHsKKworCS8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHMKKwlpZiAoIHMuY3Jvc3NEb21haW4gKSB7CisKKwkJdmFyIHNjcmlwdCwKKwkJCWhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGpRdWVyeSggImhlYWQiIClbIDAgXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CisKKwkJcmV0dXJuIHsKKworCQkJc2VuZDogZnVuY3Rpb24oIF8sIGNhbGxiYWNrICkgeworCisJCQkJc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInNjcmlwdCIgKTsKKworCQkJCXNjcmlwdC5hc3luYyA9IHRydWU7CisKKwkJCQlpZiAoIHMuc2NyaXB0Q2hhcnNldCApIHsKKwkJCQkJc2NyaXB0LmNoYXJzZXQgPSBzLnNjcmlwdENoYXJzZXQ7CisJCQkJfQorCisJCQkJc2NyaXB0LnNyYyA9IHMudXJsOworCisJCQkJLy8gQXR0YWNoIGhhbmRsZXJzIGZvciBhbGwgYnJvd3NlcnMKKwkJCQlzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCBfLCBpc0Fib3J0ICkgeworCisJCQkJCWlmICggaXNBYm9ydCB8fCAhc2NyaXB0LnJlYWR5U3RhdGUgfHwgL2xvYWRlZHxjb21wbGV0ZS8udGVzdCggc2NyaXB0LnJlYWR5U3RhdGUgKSApIHsKKworCQkJCQkJLy8gSGFuZGxlIG1lbW9yeSBsZWFrIGluIElFCisJCQkJCQlzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7CisKKwkJCQkJCS8vIFJlbW92ZSB0aGUgc2NyaXB0CisJCQkJCQlpZiAoIHNjcmlwdC5wYXJlbnROb2RlICkgeworCQkJCQkJCXNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gRGVyZWZlcmVuY2UgdGhlIHNjcmlwdAorCQkJCQkJc2NyaXB0ID0gbnVsbDsKKworCQkJCQkJLy8gQ2FsbGJhY2sgaWYgbm90IGFib3J0CisJCQkJCQlpZiAoICFpc0Fib3J0ICkgeworCQkJCQkJCWNhbGxiYWNrKCAyMDAsICJzdWNjZXNzIiApOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKworCQkJCS8vIENpcmN1bXZlbnQgSUU2IGJ1Z3Mgd2l0aCBiYXNlIGVsZW1lbnRzICgjMjcwOSBhbmQgIzQzNzgpIGJ5IHByZXBlbmRpbmcKKwkJCQkvLyBVc2UgbmF0aXZlIERPTSBtYW5pcHVsYXRpb24gdG8gYXZvaWQgb3VyIGRvbU1hbmlwIEFKQVggdHJpY2tlcnkKKwkJCQloZWFkLmluc2VydEJlZm9yZSggc2NyaXB0LCBoZWFkLmZpcnN0Q2hpbGQgKTsKKwkJCX0sCisKKwkJCWFib3J0OiBmdW5jdGlvbigpIHsKKwkJCQlpZiAoIHNjcmlwdCApIHsKKwkJCQkJc2NyaXB0Lm9ubG9hZCggdW5kZWZpbmVkLCB0cnVlICk7CisJCQkJfQorCQkJfQorCQl9OworCX0KK30gKTsKKworCisKKwordmFyIG9sZENhbGxiYWNrcyA9IFtdLAorCXJqc29ucCA9IC8oPSlcPyg/PSZ8JCl8XD9cPy87CisKKy8vIERlZmF1bHQganNvbnAgc2V0dGluZ3MKK2pRdWVyeS5hamF4U2V0dXAoIHsKKwlqc29ucDogImNhbGxiYWNrIiwKKwlqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHsKKwkJdmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyAiXyIgKyAoIG5vbmNlKysgKSApOworCQl0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTsKKwkJcmV0dXJuIGNhbGxiYWNrOworCX0KK30gKTsKKworLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzCitqUXVlcnkuYWpheFByZWZpbHRlciggImpzb24ganNvbnAiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7CisKKwl2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsCisJCWpzb25Qcm9wID0gcy5qc29ucCAhPT0gZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/CisJCQkidXJsIiA6CisJCQl0eXBlb2Ygcy5kYXRhID09PSAic3RyaW5nIiAmJgorCQkJCSggcy5jb250ZW50VHlwZSB8fCAiIiApCisJCQkJCS5pbmRleE9mKCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiApID09PSAwICYmCisJCQkJcmpzb25wLnRlc3QoIHMuZGF0YSApICYmICJkYXRhIgorCQkpOworCisJLy8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzICJqc29ucCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXQKKwlpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09ICJqc29ucCIgKSB7CisKKwkJLy8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdAorCQljYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBqUXVlcnkuaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgPworCQkJcy5qc29ucENhbGxiYWNrKCkgOgorCQkJcy5qc29ucENhbGxiYWNrOworCisJCS8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGEKKwkJaWYgKCBqc29uUHJvcCApIHsKKwkJCXNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgIiQxIiArIGNhbGxiYWNrTmFtZSApOworCQl9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxzZSApIHsKKwkJCXMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyAiJiIgOiAiPyIgKSArIHMuanNvbnAgKyAiPSIgKyBjYWxsYmFja05hbWU7CisJCX0KKworCQkvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uCisJCXMuY29udmVydGVyc1sgInNjcmlwdCBqc29uIiBdID0gZnVuY3Rpb24oKSB7CisJCQlpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHsKKwkJCQlqUXVlcnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArICIgd2FzIG5vdCBjYWxsZWQiICk7CisJCQl9CisJCQlyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTsKKwkJfTsKKworCQkvLyBmb3JjZSBqc29uIGRhdGFUeXBlCisJCXMuZGF0YVR5cGVzWyAwIF0gPSAianNvbiI7CisKKwkJLy8gSW5zdGFsbCBjYWxsYmFjaworCQlvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07CisJCXdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHsKKwkJCXJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzOworCQl9OworCisJCS8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKQorCQlqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkgeworCisJCQkvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXQKKwkJCWlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHsKKwkJCQlqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApOworCisJCQkvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZQorCQkJfSBlbHNlIHsKKwkJCQl3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47CisJCQl9CisKKwkJCS8vIFNhdmUgYmFjayBhcyBmcmVlCisJCQlpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkgeworCisJCQkJLy8gbWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kCisJCQkJcy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrOworCisJCQkJLy8gc2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZQorCQkJCW9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTsKKwkJCX0KKworCQkJLy8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlCisJCQlpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiApICkgeworCQkJCW92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7CisJCQl9CisKKwkJCXJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7CisJCX0gKTsKKworCQkvLyBEZWxlZ2F0ZSB0byBzY3JpcHQKKwkJcmV0dXJuICJzY3JpcHQiOworCX0KK30gKTsKKworCisKKworLy8gZGF0YTogc3RyaW5nIG9mIGh0bWwKKy8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCwKKy8vIGRlZmF1bHRzIHRvIGRvY3VtZW50CisvLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nCitqUXVlcnkucGFyc2VIVE1MID0gZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkgeworCWlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICJzdHJpbmciICkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisJaWYgKCB0eXBlb2YgY29udGV4dCA9PT0gImJvb2xlYW4iICkgeworCQlrZWVwU2NyaXB0cyA9IGNvbnRleHQ7CisJCWNvbnRleHQgPSBmYWxzZTsKKwl9CisJY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7CisKKwl2YXIgcGFyc2VkID0gcnNpbmdsZVRhZy5leGVjKCBkYXRhICksCisJCXNjcmlwdHMgPSAha2VlcFNjcmlwdHMgJiYgW107CisKKwkvLyBTaW5nbGUgdGFnCisJaWYgKCBwYXJzZWQgKSB7CisJCXJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdOworCX0KKworCXBhcnNlZCA9IGJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBdLCBjb250ZXh0LCBzY3JpcHRzICk7CisKKwlpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggKSB7CisJCWpRdWVyeSggc2NyaXB0cyApLnJlbW92ZSgpOworCX0KKworCXJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBwYXJzZWQuY2hpbGROb2RlcyApOworfTsKKworCisvLyBLZWVwIGEgY29weSBvZiB0aGUgb2xkIGxvYWQgbWV0aG9kCit2YXIgX2xvYWQgPSBqUXVlcnkuZm4ubG9hZDsKKworLyoqCisgKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlCisgKi8KK2pRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHsKKwlpZiAoIHR5cGVvZiB1cmwgIT09ICJzdHJpbmciICYmIF9sb2FkICkgeworCQlyZXR1cm4gX2xvYWQuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworCX0KKworCXZhciBzZWxlY3RvciwgdHlwZSwgcmVzcG9uc2UsCisJCXNlbGYgPSB0aGlzLAorCQlvZmYgPSB1cmwuaW5kZXhPZiggIiAiICk7CisKKwlpZiAoIG9mZiA+IC0xICkgeworCQlzZWxlY3RvciA9IGpRdWVyeS50cmltKCB1cmwuc2xpY2UoIG9mZiwgdXJsLmxlbmd0aCApICk7CisJCXVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7CisJfQorCisJLy8gSWYgaXQncyBhIGZ1bmN0aW9uCisJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcGFyYW1zICkgKSB7CisKKwkJLy8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2sKKwkJY2FsbGJhY2sgPSBwYXJhbXM7CisJCXBhcmFtcyA9IHVuZGVmaW5lZDsKKworCS8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmcKKwl9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gIm9iamVjdCIgKSB7CisJCXR5cGUgPSAiUE9TVCI7CisJfQorCisJLy8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3QKKwlpZiAoIHNlbGYubGVuZ3RoID4gMCApIHsKKwkJalF1ZXJ5LmFqYXgoIHsKKwkJCXVybDogdXJsLAorCisJCQkvLyBJZiAidHlwZSIgdmFyaWFibGUgaXMgdW5kZWZpbmVkLCB0aGVuICJHRVQiIG1ldGhvZCB3aWxsIGJlIHVzZWQuCisJCQkvLyBNYWtlIHZhbHVlIG9mIHRoaXMgZmllbGQgZXhwbGljaXQgc2luY2UKKwkJCS8vIHVzZXIgY2FuIG92ZXJyaWRlIGl0IHRocm91Z2ggYWpheFNldHVwIG1ldGhvZAorCQkJdHlwZTogdHlwZSB8fCAiR0VUIiwKKwkJCWRhdGFUeXBlOiAiaHRtbCIsCisJCQlkYXRhOiBwYXJhbXMKKwkJfSApLmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7CisKKwkJCS8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFjaworCQkJcmVzcG9uc2UgPSBhcmd1bWVudHM7CisKKwkJCXNlbGYuaHRtbCggc2VsZWN0b3IgPworCisJCQkJLy8gSWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVkLCBsb2NhdGUgdGhlIHJpZ2h0IGVsZW1lbnRzIGluIGEgZHVtbXkgZGl2CisJCQkJLy8gRXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzCisJCQkJalF1ZXJ5KCAiPGRpdj4iICkuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOgorCisJCQkJLy8gT3RoZXJ3aXNlIHVzZSB0aGUgZnVsbCByZXN1bHQKKwkJCQlyZXNwb25zZVRleHQgKTsKKworCQkvLyBJZiB0aGUgcmVxdWVzdCBzdWNjZWVkcywgdGhpcyBmdW5jdGlvbiBnZXRzICJkYXRhIiwgInN0YXR1cyIsICJqcVhIUiIKKwkJLy8gYnV0IHRoZXkgYXJlIGlnbm9yZWQgYmVjYXVzZSByZXNwb25zZSB3YXMgc2V0IGFib3ZlLgorCQkvLyBJZiBpdCBmYWlscywgdGhpcyBmdW5jdGlvbiBnZXRzICJqcVhIUiIsICJzdGF0dXMiLCAiZXJyb3IiCisJCX0gKS5hbHdheXMoIGNhbGxiYWNrICYmIGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkgeworCQkJc2VsZi5lYWNoKCBmdW5jdGlvbigpIHsKKwkJCQljYWxsYmFjay5hcHBseSggdGhpcywgcmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApOworCQkJfSApOworCQl9ICk7CisJfQorCisJcmV0dXJuIHRoaXM7Cit9OworCisKKworCisvLyBBdHRhY2ggYSBidW5jaCBvZiBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGNvbW1vbiBBSkFYIGV2ZW50cworalF1ZXJ5LmVhY2goIFsKKwkiYWpheFN0YXJ0IiwKKwkiYWpheFN0b3AiLAorCSJhamF4Q29tcGxldGUiLAorCSJhamF4RXJyb3IiLAorCSJhamF4U3VjY2VzcyIsCisJImFqYXhTZW5kIgorXSwgZnVuY3Rpb24oIGksIHR5cGUgKSB7CisJalF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggZm4gKSB7CisJCXJldHVybiB0aGlzLm9uKCB0eXBlLCBmbiApOworCX07Cit9ICk7CisKKworCisKK2pRdWVyeS5leHByLmZpbHRlcnMuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHsKKwlyZXR1cm4galF1ZXJ5LmdyZXAoIGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHsKKwkJcmV0dXJuIGVsZW0gPT09IGZuLmVsZW07CisJfSApLmxlbmd0aDsKK307CisKKworCisKKworLyoqCisgKiBHZXRzIGEgd2luZG93IGZyb20gYW4gZWxlbWVudAorICovCitmdW5jdGlvbiBnZXRXaW5kb3coIGVsZW0gKSB7CisJcmV0dXJuIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApID8KKwkJZWxlbSA6CisJCWVsZW0ubm9kZVR5cGUgPT09IDkgPworCQkJZWxlbS5kZWZhdWx0VmlldyB8fCBlbGVtLnBhcmVudFdpbmRvdyA6CisJCQlmYWxzZTsKK30KKworalF1ZXJ5Lm9mZnNldCA9IHsKKwlzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkgeworCQl2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLAorCQkJcG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICksCisJCQljdXJFbGVtID0galF1ZXJ5KCBlbGVtICksCisJCQlwcm9wcyA9IHt9OworCisJCS8vIHNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW0KKwkJaWYgKCBwb3NpdGlvbiA9PT0gInN0YXRpYyIgKSB7CisJCQllbGVtLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKKwkJfQorCisJCWN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCk7CisJCWN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sICJ0b3AiICk7CisJCWN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCAibGVmdCIgKTsKKwkJY2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSAiYWJzb2x1dGUiIHx8IHBvc2l0aW9uID09PSAiZml4ZWQiICkgJiYKKwkJCWpRdWVyeS5pbkFycmF5KCAiYXV0byIsIFsgY3VyQ1NTVG9wLCBjdXJDU1NMZWZ0IF0gKSA+IC0xOworCisJCS8vIG5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVyIHRvcCBvciBsZWZ0CisJCS8vIGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZAorCQlpZiAoIGNhbGN1bGF0ZVBvc2l0aW9uICkgeworCQkJY3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7CisJCQljdXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7CisJCQljdXJMZWZ0ID0gY3VyUG9zaXRpb24ubGVmdDsKKwkJfSBlbHNlIHsKKwkJCWN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7CisJCQljdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7CisJCX0KKworCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7CisKKwkJCS8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KQorCQkJb3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7CisJCX0KKworCQlpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7CisJCQlwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wOworCQl9CisJCWlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7CisJCQlwcm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDsKKwkJfQorCisJCWlmICggInVzaW5nIiBpbiBvcHRpb25zICkgeworCQkJb3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApOworCQl9IGVsc2UgeworCQkJY3VyRWxlbS5jc3MoIHByb3BzICk7CisJCX0KKwl9Cit9OworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisJb2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHsKKwkJaWYgKCBhcmd1bWVudHMubGVuZ3RoICkgeworCQkJcmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/CisJCQkJdGhpcyA6CisJCQkJdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHsKKwkJCQkJalF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTsKKwkJCQl9ICk7CisJCX0KKworCQl2YXIgZG9jRWxlbSwgd2luLAorCQkJYm94ID0geyB0b3A6IDAsIGxlZnQ6IDAgfSwKKwkJCWVsZW0gPSB0aGlzWyAwIF0sCisJCQlkb2MgPSBlbGVtICYmIGVsZW0ub3duZXJEb2N1bWVudDsKKworCQlpZiAoICFkb2MgKSB7CisJCQlyZXR1cm47CisJCX0KKworCQlkb2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudDsKKworCQkvLyBNYWtlIHN1cmUgaXQncyBub3QgYSBkaXNjb25uZWN0ZWQgRE9NIG5vZGUKKwkJaWYgKCAhalF1ZXJ5LmNvbnRhaW5zKCBkb2NFbGVtLCBlbGVtICkgKSB7CisJCQlyZXR1cm4gYm94OworCQl9CisKKwkJLy8gSWYgd2UgZG9uJ3QgaGF2ZSBnQkNSLCBqdXN0IHVzZSAwLDAgcmF0aGVyIHRoYW4gZXJyb3IKKwkJLy8gQmxhY2tCZXJyeSA1LCBpT1MgMyAob3JpZ2luYWwgaVBob25lKQorCQlpZiAoIHR5cGVvZiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPT0gInVuZGVmaW5lZCIgKSB7CisJCQlib3ggPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworCQl9CisJCXdpbiA9IGdldFdpbmRvdyggZG9jICk7CisJCXJldHVybiB7CisJCQl0b3A6IGJveC50b3AgICsgKCB3aW4ucGFnZVlPZmZzZXQgfHwgZG9jRWxlbS5zY3JvbGxUb3AgKSAgLSAoIGRvY0VsZW0uY2xpZW50VG9wICB8fCAwICksCisJCQlsZWZ0OiBib3gubGVmdCArICggd2luLnBhZ2VYT2Zmc2V0IHx8IGRvY0VsZW0uc2Nyb2xsTGVmdCApIC0gKCBkb2NFbGVtLmNsaWVudExlZnQgfHwgMCApCisJCX07CisJfSwKKworCXBvc2l0aW9uOiBmdW5jdGlvbigpIHsKKwkJaWYgKCAhdGhpc1sgMCBdICkgeworCQkJcmV0dXJuOworCQl9CisKKwkJdmFyIG9mZnNldFBhcmVudCwgb2Zmc2V0LAorCQkJcGFyZW50T2Zmc2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAgfSwKKwkJCWVsZW0gPSB0aGlzWyAwIF07CisKKwkJLy8gRml4ZWQgZWxlbWVudHMgYXJlIG9mZnNldCBmcm9tIHdpbmRvdyAocGFyZW50T2Zmc2V0ID0ge3RvcDowLCBsZWZ0OiAwfSwKKwkJLy8gYmVjYXVzZSBpdCBpcyBpdHMgb25seSBvZmZzZXQgcGFyZW50CisJCWlmICggalF1ZXJ5LmNzcyggZWxlbSwgInBvc2l0aW9uIiApID09PSAiZml4ZWQiICkgeworCisJCQkvLyB3ZSBhc3N1bWUgdGhhdCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgaXMgYXZhaWxhYmxlIHdoZW4gY29tcHV0ZWQgcG9zaXRpb24gaXMgZml4ZWQKKwkJCW9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisJCX0gZWxzZSB7CisKKwkJCS8vIEdldCAqcmVhbCogb2Zmc2V0UGFyZW50CisJCQlvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCgpOworCisJCQkvLyBHZXQgY29ycmVjdCBvZmZzZXRzCisJCQlvZmZzZXQgPSB0aGlzLm9mZnNldCgpOworCQkJaWYgKCAhalF1ZXJ5Lm5vZGVOYW1lKCBvZmZzZXRQYXJlbnRbIDAgXSwgImh0bWwiICkgKSB7CisJCQkJcGFyZW50T2Zmc2V0ID0gb2Zmc2V0UGFyZW50Lm9mZnNldCgpOworCQkJfQorCisJCQkvLyBBZGQgb2Zmc2V0UGFyZW50IGJvcmRlcnMKKwkJCXBhcmVudE9mZnNldC50b3AgICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudFsgMCBdLCAiYm9yZGVyVG9wV2lkdGgiLCB0cnVlICk7CisJCQlwYXJlbnRPZmZzZXQubGVmdCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnRbIDAgXSwgImJvcmRlckxlZnRXaWR0aCIsIHRydWUgKTsKKwkJfQorCisJCS8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnMKKwkJLy8gbm90ZTogd2hlbiBhbiBlbGVtZW50IGhhcyBtYXJnaW46IGF1dG8gdGhlIG9mZnNldExlZnQgYW5kIG1hcmdpbkxlZnQKKwkJLy8gYXJlIHRoZSBzYW1lIGluIFNhZmFyaSBjYXVzaW5nIG9mZnNldC5sZWZ0IHRvIGluY29ycmVjdGx5IGJlIDAKKwkJcmV0dXJuIHsKKwkJCXRvcDogIG9mZnNldC50b3AgIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5jc3MoIGVsZW0sICJtYXJnaW5Ub3AiLCB0cnVlICksCisJCQlsZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0IC0galF1ZXJ5LmNzcyggZWxlbSwgIm1hcmdpbkxlZnQiLCB0cnVlICkKKwkJfTsKKwl9LAorCisJb2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHsKKwkJcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHsKKwkJCXZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudDsKKworCQkJd2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYgKCAhalF1ZXJ5Lm5vZGVOYW1lKCBvZmZzZXRQYXJlbnQsICJodG1sIiApICYmCisJCQkJalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCAicG9zaXRpb24iICkgPT09ICJzdGF0aWMiICkgKSB7CisJCQkJb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDsKKwkJCX0KKwkJCXJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50OworCQl9ICk7CisJfQorfSApOworCisvLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHMKK2pRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6ICJwYWdlWE9mZnNldCIsIHNjcm9sbFRvcDogInBhZ2VZT2Zmc2V0IiB9LCBmdW5jdGlvbiggbWV0aG9kLCBwcm9wICkgeworCXZhciB0b3AgPSAvWS8udGVzdCggcHJvcCApOworCisJalF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7CisJCXJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBtZXRob2QsIHZhbCApIHsKKwkJCXZhciB3aW4gPSBnZXRXaW5kb3coIGVsZW0gKTsKKworCQkJaWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHsKKwkJCQlyZXR1cm4gd2luID8gKCBwcm9wIGluIHdpbiApID8gd2luWyBwcm9wIF0gOgorCQkJCQl3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBtZXRob2QgXSA6CisJCQkJCWVsZW1bIG1ldGhvZCBdOworCQkJfQorCisJCQlpZiAoIHdpbiApIHsKKwkJCQl3aW4uc2Nyb2xsVG8oCisJCQkJCSF0b3AgPyB2YWwgOiBqUXVlcnkoIHdpbiApLnNjcm9sbExlZnQoKSwKKwkJCQkJdG9wID8gdmFsIDogalF1ZXJ5KCB3aW4gKS5zY3JvbGxUb3AoKQorCQkJCSk7CisKKwkJCX0gZWxzZSB7CisJCQkJZWxlbVsgbWV0aG9kIF0gPSB2YWw7CisJCQl9CisJCX0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoLCBudWxsICk7CisJfTsKK30gKTsKKworLy8gU3VwcG9ydDogU2FmYXJpPDctOCssIENocm9tZTwzNy00NCsKKy8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uCisvLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODQKKy8vIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyBwZXJjZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQKKy8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5kIG9uIHRoZSBvZmZzZXQgbW9kdWxlLCB3ZSBqdXN0IGNoZWNrIGZvciBpdCBoZXJlCitqUXVlcnkuZWFjaCggWyAidG9wIiwgImxlZnQiIF0sIGZ1bmN0aW9uKCBpLCBwcm9wICkgeworCWpRdWVyeS5jc3NIb29rc1sgcHJvcCBdID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnBpeGVsUG9zaXRpb24sCisJCWZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKKwkJCWlmICggY29tcHV0ZWQgKSB7CisJCQkJY29tcHV0ZWQgPSBjdXJDU1MoIGVsZW0sIHByb3AgKTsKKworCQkJCS8vIGlmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldAorCQkJCXJldHVybiBybnVtbm9ucHgudGVzdCggY29tcHV0ZWQgKSA/CisJCQkJCWpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArICJweCIgOgorCQkJCQljb21wdXRlZDsKKwkJCX0KKwkJfQorCSk7Cit9ICk7CisKKworLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBpbm5lcldpZHRoLCBoZWlnaHQsIHdpZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2RzCitqUXVlcnkuZWFjaCggeyBIZWlnaHQ6ICJoZWlnaHQiLCBXaWR0aDogIndpZHRoIiB9LCBmdW5jdGlvbiggbmFtZSwgdHlwZSApIHsKKwlqUXVlcnkuZWFjaCggeyBwYWRkaW5nOiAiaW5uZXIiICsgbmFtZSwgY29udGVudDogdHlwZSwgIiI6ICJvdXRlciIgKyBuYW1lIH0sCisJZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7CisKKwkJLy8gbWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoCisJCWpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkgeworCQkJdmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gImJvb2xlYW4iICksCisJCQkJZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyAibWFyZ2luIiA6ICJib3JkZXIiICk7CisKKwkJCXJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHsKKwkJCQl2YXIgZG9jOworCisJCQkJaWYgKCBqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHsKKworCQkJCQkvLyBBcyBvZiA1LzgvMjAxMiB0aGlzIHdpbGwgeWllbGQgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIE1vYmlsZSBTYWZhcmksIGJ1dCB0aGVyZQorCQkJCQkvLyBpc24ndCBhIHdob2xlIGxvdCB3ZSBjYW4gZG8uIFNlZSBwdWxsIHJlcXVlc3QgYXQgdGhpcyBVUkwgZm9yIGRpc2N1c3Npb246CisJCQkJCS8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNzY0CisJCQkJCXJldHVybiBlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgImNsaWVudCIgKyBuYW1lIF07CisJCQkJfQorCisJCQkJLy8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodAorCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHsKKwkJCQkJZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7CisKKwkJCQkJLy8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLAorCQkJCQkvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3QKKwkJCQkJLy8gdW5mb3J0dW5hdGVseSwgdGhpcyBjYXVzZXMgYnVnICMzODM4IGluIElFNi84IG9ubHksCisJCQkJCS8vIGJ1dCB0aGVyZSBpcyBjdXJyZW50bHkgbm8gZ29vZCwgc21hbGwgd2F5IHRvIGZpeCBpdC4KKwkJCQkJcmV0dXJuIE1hdGgubWF4KAorCQkJCQkJZWxlbS5ib2R5WyAic2Nyb2xsIiArIG5hbWUgXSwgZG9jWyAic2Nyb2xsIiArIG5hbWUgXSwKKwkJCQkJCWVsZW0uYm9keVsgIm9mZnNldCIgKyBuYW1lIF0sIGRvY1sgIm9mZnNldCIgKyBuYW1lIF0sCisJCQkJCQlkb2NbICJjbGllbnQiICsgbmFtZSBdCisJCQkJCSk7CisJCQkJfQorCisJCQkJcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPworCisJCQkJCS8vIEdldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXQKKwkJCQkJalF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6CisKKwkJCQkJLy8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudAorCQkJCQlqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApOworCQkJfSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUsIG51bGwgKTsKKwkJfTsKKwl9ICk7Cit9ICk7CisKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCisJYmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHsKKwkJcmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApOworCX0sCisJdW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkgeworCQlyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApOworCX0sCisKKwlkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7CisJCXJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7CisJfSwKKwl1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHsKKworCQkvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApCisJCXJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8KKwkJCXRoaXMub2ZmKCBzZWxlY3RvciwgIioqIiApIDoKKwkJCXRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgIioqIiwgZm4gKTsKKwl9Cit9ICk7CisKKy8vIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgY29udGFpbmVkIGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0CitqUXVlcnkuZm4uc2l6ZSA9IGZ1bmN0aW9uKCkgeworCXJldHVybiB0aGlzLmxlbmd0aDsKK307CisKK2pRdWVyeS5mbi5hbmRTZWxmID0galF1ZXJ5LmZuLmFkZEJhY2s7CisKKworCisKKy8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlcgorLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdAorLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0CisvLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlCisvLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2UKKy8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50cworLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLgorCisvLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZAorLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhbgorLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKKy8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub24KKworaWYgKCB0eXBlb2YgZGVmaW5lID09PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQgKSB7CisJZGVmaW5lKCAianF1ZXJ5IiwgW10sIGZ1bmN0aW9uKCkgeworCQlyZXR1cm4galF1ZXJ5OworCX0gKTsKK30KKworCisKK3ZhcgorCisJLy8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlCisJX2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksCisKKwkvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZQorCV8kID0gd2luZG93LiQ7CisKK2pRdWVyeS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oIGRlZXAgKSB7CisJaWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkgeworCQl3aW5kb3cuJCA9IF8kOworCX0KKworCWlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7CisJCXdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5OworCX0KKworCXJldHVybiBqUXVlcnk7Cit9OworCisvLyBFeHBvc2UgalF1ZXJ5IGFuZCAkIGlkZW50aWZpZXJzLCBldmVuIGluCisvLyBBTUQgKCM3MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KQorLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAoIzEzNTY2KQoraWYgKCAhbm9HbG9iYWwgKSB7CisJd2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5OworfQorCityZXR1cm4galF1ZXJ5OworfSkpOwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbGlicmFyaWVzL2pxdWVyeS0yLjIuNC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xpYnJhcmllcy9qcXVlcnktMi4yLjQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMzYzQ1NgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xpYnJhcmllcy9qcXVlcnktMi4yLjQuanMKQEAgLTAsMCArMSw5ODE0IEBACisvKiEKKyAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjIuMi40CisgKiBodHRwOi8vanF1ZXJ5LmNvbS8KKyAqCisgKiBJbmNsdWRlcyBTaXp6bGUuanMKKyAqIGh0dHA6Ly9zaXp6bGVqcy5jb20vCisgKgorICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQorICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQorICoKKyAqIERhdGU6IDIwMTYtMDUtMjBUMTc6MjNaCisgKi8KKworKGZ1bmN0aW9uKCBnbG9iYWwsIGZhY3RvcnkgKSB7CisKKwlpZiAoIHR5cGVvZiBtb2R1bGUgPT09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gIm9iamVjdCIgKSB7CisJCS8vIEZvciBDb21tb25KUyBhbmQgQ29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgd2hlcmUgYSBwcm9wZXIgYHdpbmRvd2AKKwkJLy8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS4KKwkJLy8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGAKKwkJLy8gKHN1Y2ggYXMgTm9kZS5qcyksIGV4cG9zZSBhIGZhY3RvcnkgYXMgbW9kdWxlLmV4cG9ydHMuCisJCS8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuCisJCS8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoImpxdWVyeSIpKHdpbmRvdyk7CisJCS8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uCisJCW1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID8KKwkJCWZhY3RvcnkoIGdsb2JhbCwgdHJ1ZSApIDoKKwkJCWZ1bmN0aW9uKCB3ICkgeworCQkJCWlmICggIXcuZG9jdW1lbnQgKSB7CisJCQkJCXRocm93IG5ldyBFcnJvciggImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQiICk7CisJCQkJfQorCQkJCXJldHVybiBmYWN0b3J5KCB3ICk7CisJCQl9OworCX0gZWxzZSB7CisJCWZhY3RvcnkoIGdsb2JhbCApOworCX0KKworLy8gUGFzcyB0aGlzIGlmIHdpbmRvdyBpcyBub3QgZGVmaW5lZCB5ZXQKK30odHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHsKKworLy8gU3VwcG9ydDogRmlyZWZveCAxOCsKKy8vIENhbid0IGJlIGluIHN0cmljdCBtb2RlLCBzZXZlcmFsIGxpYnMgaW5jbHVkaW5nIEFTUC5ORVQgdHJhY2UKKy8vIHRoZSBzdGFjayB2aWEgYXJndW1lbnRzLmNhbGxlci5jYWxsZWUgYW5kIEZpcmVmb3ggZGllcyBpZgorLy8geW91IHRyeSB0byB0cmFjZSB0aHJvdWdoICJ1c2Ugc3RyaWN0IiBjYWxsIGNoYWlucy4gKCMxMzMzNSkKKy8vInVzZSBzdHJpY3QiOwordmFyIGFyciA9IFtdOworCit2YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7CisKK3ZhciBzbGljZSA9IGFyci5zbGljZTsKKwordmFyIGNvbmNhdCA9IGFyci5jb25jYXQ7CisKK3ZhciBwdXNoID0gYXJyLnB1c2g7CisKK3ZhciBpbmRleE9mID0gYXJyLmluZGV4T2Y7CisKK3ZhciBjbGFzczJ0eXBlID0ge307CisKK3ZhciB0b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmc7CisKK3ZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5OworCit2YXIgc3VwcG9ydCA9IHt9OworCisKKwordmFyCisJdmVyc2lvbiA9ICIyLjIuNCIsCisKKwkvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeQorCWpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsKKworCQkvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCcKKwkJLy8gTmVlZCBpbml0IGlmIGpRdWVyeSBpcyBjYWxsZWQgKGp1c3QgYWxsb3cgZXJyb3IgdG8gYmUgdGhyb3duIGlmIG5vdCBpbmNsdWRlZCkKKwkJcmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTsKKwl9LAorCisJLy8gU3VwcG9ydDogQW5kcm9pZDw0LjEKKwkvLyBNYWtlIHN1cmUgd2UgdHJpbSBCT00gYW5kIE5CU1AKKwlydHJpbSA9IC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywKKworCS8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZworCXJtc1ByZWZpeCA9IC9eLW1zLS8sCisJcmRhc2hBbHBoYSA9IC8tKFtcZGEtel0pL2dpLAorCisJLy8gVXNlZCBieSBqUXVlcnkuY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKQorCWZjYW1lbENhc2UgPSBmdW5jdGlvbiggYWxsLCBsZXR0ZXIgKSB7CisJCXJldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTsKKwl9OworCitqUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0geworCisJLy8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZAorCWpxdWVyeTogdmVyc2lvbiwKKworCWNvbnN0cnVjdG9yOiBqUXVlcnksCisKKwkvLyBTdGFydCB3aXRoIGFuIGVtcHR5IHNlbGVjdG9yCisJc2VsZWN0b3I6ICIiLAorCisJLy8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwCisJbGVuZ3RoOiAwLAorCisJdG9BcnJheTogZnVuY3Rpb24oKSB7CisJCXJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7CisJfSwKKworCS8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1IKKwkvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheQorCWdldDogZnVuY3Rpb24oIG51bSApIHsKKwkJcmV0dXJuIG51bSAhPSBudWxsID8KKworCQkJLy8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldAorCQkJKCBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdICkgOgorCisJCQkvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5CisJCQlzbGljZS5jYWxsKCB0aGlzICk7CisJfSwKKworCS8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2sKKwkvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldCkKKwlwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHsKKworCQkvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldAorCQl2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7CisKKwkJLy8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSkKKwkJcmV0LnByZXZPYmplY3QgPSB0aGlzOworCQlyZXQuY29udGV4dCA9IHRoaXMuY29udGV4dDsKKworCQkvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldAorCQlyZXR1cm4gcmV0OworCX0sCisKKwkvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LgorCWVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHsKKwkJcmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApOworCX0sCisKKwltYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHsKKwkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKKwkJCXJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7CisJCX0gKSApOworCX0sCisKKwlzbGljZTogZnVuY3Rpb24oKSB7CisJCXJldHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApICk7CisJfSwKKworCWZpcnN0OiBmdW5jdGlvbigpIHsKKwkJcmV0dXJuIHRoaXMuZXEoIDAgKTsKKwl9LAorCisJbGFzdDogZnVuY3Rpb24oKSB7CisJCXJldHVybiB0aGlzLmVxKCAtMSApOworCX0sCisKKwllcTogZnVuY3Rpb24oIGkgKSB7CisJCXZhciBsZW4gPSB0aGlzLmxlbmd0aCwKKwkJCWogPSAraSArICggaSA8IDAgPyBsZW4gOiAwICk7CisJCXJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTsKKwl9LAorCisJZW5kOiBmdW5jdGlvbigpIHsKKwkJcmV0dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKCk7CisJfSwKKworCS8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KKwkvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBsaWtlIGEgalF1ZXJ5IG1ldGhvZC4KKwlwdXNoOiBwdXNoLAorCXNvcnQ6IGFyci5zb3J0LAorCXNwbGljZTogYXJyLnNwbGljZQorfTsKKworalF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHsKKwl2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsCisJCXRhcmdldCA9IGFyZ3VtZW50c1sgMCBdIHx8IHt9LAorCQlpID0gMSwKKwkJbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwKKwkJZGVlcCA9IGZhbHNlOworCisJLy8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvbgorCWlmICggdHlwZW9mIHRhcmdldCA9PT0gImJvb2xlYW4iICkgeworCQlkZWVwID0gdGFyZ2V0OworCisJCS8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXQKKwkJdGFyZ2V0ID0gYXJndW1lbnRzWyBpIF0gfHwge307CisJCWkrKzsKKwl9CisKKwkvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSkKKwlpZiAoIHR5cGVvZiB0YXJnZXQgIT09ICJvYmplY3QiICYmICFqUXVlcnkuaXNGdW5jdGlvbiggdGFyZ2V0ICkgKSB7CisJCXRhcmdldCA9IHt9OworCX0KKworCS8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZAorCWlmICggaSA9PT0gbGVuZ3RoICkgeworCQl0YXJnZXQgPSB0aGlzOworCQlpLS07CisJfQorCisJZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisKKwkJLy8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlcworCQlpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHsKKworCQkJLy8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdAorCQkJZm9yICggbmFtZSBpbiBvcHRpb25zICkgeworCQkJCXNyYyA9IHRhcmdldFsgbmFtZSBdOworCQkJCWNvcHkgPSBvcHRpb25zWyBuYW1lIF07CisKKwkJCQkvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wCisJCQkJaWYgKCB0YXJnZXQgPT09IGNvcHkgKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCS8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5cworCQkJCWlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8fAorCQkJCQkoIGNvcHlJc0FycmF5ID0galF1ZXJ5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7CisKKwkJCQkJaWYgKCBjb3B5SXNBcnJheSApIHsKKwkJCQkJCWNvcHlJc0FycmF5ID0gZmFsc2U7CisJCQkJCQljbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNBcnJheSggc3JjICkgPyBzcmMgOiBbXTsKKworCQkJCQl9IGVsc2UgeworCQkJCQkJY2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHNyYyApID8gc3JjIDoge307CisJCQkJCX0KKworCQkJCQkvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW0KKwkJCQkJdGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApOworCisJCQkJLy8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlcworCQkJCX0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHsKKwkJCQkJdGFyZ2V0WyBuYW1lIF0gPSBjb3B5OworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0CisJcmV0dXJuIHRhcmdldDsKK307CisKK2pRdWVyeS5leHRlbmQoIHsKKworCS8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZQorCWV4cGFuZG86ICJqUXVlcnkiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cRC9nLCAiIiApLAorCisJLy8gQXNzdW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRoZSByZWFkeSBtb2R1bGUKKwlpc1JlYWR5OiB0cnVlLAorCisJZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7CisJCXRocm93IG5ldyBFcnJvciggbXNnICk7CisJfSwKKworCW5vb3A6IGZ1bmN0aW9uKCkge30sCisKKwlpc0Z1bmN0aW9uOiBmdW5jdGlvbiggb2JqICkgeworCQlyZXR1cm4galF1ZXJ5LnR5cGUoIG9iaiApID09PSAiZnVuY3Rpb24iOworCX0sCisKKwlpc0FycmF5OiBBcnJheS5pc0FycmF5LAorCisJaXNXaW5kb3c6IGZ1bmN0aW9uKCBvYmogKSB7CisJCXJldHVybiBvYmogIT0gbnVsbCAmJiBvYmogPT09IG9iai53aW5kb3c7CisJfSwKKworCWlzTnVtZXJpYzogZnVuY3Rpb24oIG9iaiApIHsKKworCQkvLyBwYXJzZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0IGZhbHNlIHBvc2l0aXZlcyAobnVsbHx0cnVlfGZhbHNlfCIiKQorCQkvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJlciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVyYWxzICgiMHguLi4iKQorCQkvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU4KKwkJLy8gYWRkaW5nIDEgY29ycmVjdHMgbG9zcyBvZiBwcmVjaXNpb24gZnJvbSBwYXJzZUZsb2F0ICgjMTUxMDApCisJCXZhciByZWFsU3RyaW5nT2JqID0gb2JqICYmIG9iai50b1N0cmluZygpOworCQlyZXR1cm4gIWpRdWVyeS5pc0FycmF5KCBvYmogKSAmJiAoIHJlYWxTdHJpbmdPYmogLSBwYXJzZUZsb2F0KCByZWFsU3RyaW5nT2JqICkgKyAxICkgPj0gMDsKKwl9LAorCisJaXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHsKKwkJdmFyIGtleTsKKworCQkvLyBOb3QgcGxhaW4gb2JqZWN0czoKKwkJLy8gLSBBbnkgb2JqZWN0IG9yIHZhbHVlIHdob3NlIGludGVybmFsIFtbQ2xhc3NdXSBwcm9wZXJ0eSBpcyBub3QgIltvYmplY3QgT2JqZWN0XSIKKwkJLy8gLSBET00gbm9kZXMKKwkJLy8gLSB3aW5kb3cKKwkJaWYgKCBqUXVlcnkudHlwZSggb2JqICkgIT09ICJvYmplY3QiIHx8IG9iai5ub2RlVHlwZSB8fCBqUXVlcnkuaXNXaW5kb3coIG9iaiApICkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLy8gTm90IG93biBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBtdXN0IGJlIE9iamVjdAorCQlpZiAoIG9iai5jb25zdHJ1Y3RvciAmJgorCQkJCSFoYXNPd24uY2FsbCggb2JqLCAiY29uc3RydWN0b3IiICkgJiYKKwkJCQkhaGFzT3duLmNhbGwoIG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgfHwge30sICJpc1Byb3RvdHlwZU9mIiApICkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLy8gT3duIHByb3BlcnRpZXMgYXJlIGVudW1lcmF0ZWQgZmlyc3RseSwgc28gdG8gc3BlZWQgdXAsCisJCS8vIGlmIGxhc3Qgb25lIGlzIG93biwgdGhlbiBhbGwgcHJvcGVydGllcyBhcmUgb3duCisJCWZvciAoIGtleSBpbiBvYmogKSB7fQorCisJCXJldHVybiBrZXkgPT09IHVuZGVmaW5lZCB8fCBoYXNPd24uY2FsbCggb2JqLCBrZXkgKTsKKwl9LAorCisJaXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHsKKwkJdmFyIG5hbWU7CisJCWZvciAoIG5hbWUgaW4gb2JqICkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCXJldHVybiB0cnVlOworCX0sCisKKwl0eXBlOiBmdW5jdGlvbiggb2JqICkgeworCQlpZiAoIG9iaiA9PSBudWxsICkgeworCQkJcmV0dXJuIG9iaiArICIiOworCQl9CisKKwkJLy8gU3VwcG9ydDogQW5kcm9pZDw0LjAsIGlPUzw2IChmdW5jdGlvbmlzaCBSZWdFeHApCisJCXJldHVybiB0eXBlb2Ygb2JqID09PSAib2JqZWN0IiB8fCB0eXBlb2Ygb2JqID09PSAiZnVuY3Rpb24iID8KKwkJCWNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwoIG9iaiApIF0gfHwgIm9iamVjdCIgOgorCQkJdHlwZW9mIG9iajsKKwl9LAorCisJLy8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgZ2xvYmFsIGNvbnRleHQKKwlnbG9iYWxFdmFsOiBmdW5jdGlvbiggY29kZSApIHsKKwkJdmFyIHNjcmlwdCwKKwkJCWluZGlyZWN0ID0gZXZhbDsKKworCQljb2RlID0galF1ZXJ5LnRyaW0oIGNvZGUgKTsKKworCQlpZiAoIGNvZGUgKSB7CisKKwkJCS8vIElmIHRoZSBjb2RlIGluY2x1ZGVzIGEgdmFsaWQsIHByb2xvZ3VlIHBvc2l0aW9uCisJCQkvLyBzdHJpY3QgbW9kZSBwcmFnbWEsIGV4ZWN1dGUgY29kZSBieSBpbmplY3RpbmcgYQorCQkJLy8gc2NyaXB0IHRhZyBpbnRvIHRoZSBkb2N1bWVudC4KKwkJCWlmICggY29kZS5pbmRleE9mKCAidXNlIHN0cmljdCIgKSA9PT0gMSApIHsKKwkJCQlzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAic2NyaXB0IiApOworCQkJCXNjcmlwdC50ZXh0ID0gY29kZTsKKwkJCQlkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTsKKwkJCX0gZWxzZSB7CisKKwkJCQkvLyBPdGhlcndpc2UsIGF2b2lkIHRoZSBET00gbm9kZSBjcmVhdGlvbiwgaW5zZXJ0aW9uCisJCQkJLy8gYW5kIHJlbW92YWwgYnkgdXNpbmcgYW4gaW5kaXJlY3QgZ2xvYmFsIGV2YWwKKworCQkJCWluZGlyZWN0KCBjb2RlICk7CisJCQl9CisJCX0KKwl9LAorCisJLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlcworCS8vIFN1cHBvcnQ6IElFOS0xMSsKKwkvLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpCisJY2FtZWxDYXNlOiBmdW5jdGlvbiggc3RyaW5nICkgeworCQlyZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgIm1zLSIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7CisJfSwKKworCW5vZGVOYW1lOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKKwkJcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7CisJfSwKKworCWVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkgeworCQl2YXIgbGVuZ3RoLCBpID0gMDsKKworCQlpZiAoIGlzQXJyYXlMaWtlKCBvYmogKSApIHsKKwkJCWxlbmd0aCA9IG9iai5sZW5ndGg7CisJCQlmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKKwkJCQlpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJZm9yICggaSBpbiBvYmogKSB7CisJCQkJaWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXJldHVybiBvYmo7CisJfSwKKworCS8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4xCisJdHJpbTogZnVuY3Rpb24oIHRleHQgKSB7CisJCXJldHVybiB0ZXh0ID09IG51bGwgPworCQkJIiIgOgorCQkJKCB0ZXh0ICsgIiIgKS5yZXBsYWNlKCBydHJpbSwgIiIgKTsKKwl9LAorCisJLy8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQorCW1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHsKKwkJdmFyIHJldCA9IHJlc3VsdHMgfHwgW107CisKKwkJaWYgKCBhcnIgIT0gbnVsbCApIHsKKwkJCWlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSApIHsKKwkJCQlqUXVlcnkubWVyZ2UoIHJldCwKKwkJCQkJdHlwZW9mIGFyciA9PT0gInN0cmluZyIgPworCQkJCQlbIGFyciBdIDogYXJyCisJCQkJKTsKKwkJCX0gZWxzZSB7CisJCQkJcHVzaC5jYWxsKCByZXQsIGFyciApOworCQkJfQorCQl9CisKKwkJcmV0dXJuIHJldDsKKwl9LAorCisJaW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHsKKwkJcmV0dXJuIGFyciA9PSBudWxsID8gLTEgOiBpbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApOworCX0sCisKKwltZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7CisJCXZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCwKKwkJCWogPSAwLAorCQkJaSA9IGZpcnN0Lmxlbmd0aDsKKworCQlmb3IgKCA7IGogPCBsZW47IGorKyApIHsKKwkJCWZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdOworCQl9CisKKwkJZmlyc3QubGVuZ3RoID0gaTsKKworCQlyZXR1cm4gZmlyc3Q7CisJfSwKKworCWdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludmVydCApIHsKKwkJdmFyIGNhbGxiYWNrSW52ZXJzZSwKKwkJCW1hdGNoZXMgPSBbXSwKKwkJCWkgPSAwLAorCQkJbGVuZ3RoID0gZWxlbXMubGVuZ3RoLAorCQkJY2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0OworCisJCS8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXMKKwkJLy8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb24KKwkJZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisJCQljYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTsKKwkJCWlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHsKKwkJCQltYXRjaGVzLnB1c2goIGVsZW1zWyBpIF0gKTsKKwkJCX0KKwkJfQorCisJCXJldHVybiBtYXRjaGVzOworCX0sCisKKwkvLyBhcmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKKwltYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHsKKwkJdmFyIGxlbmd0aCwgdmFsdWUsCisJCQlpID0gMCwKKwkJCXJldCA9IFtdOworCisJCS8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzCisJCWlmICggaXNBcnJheUxpa2UoIGVsZW1zICkgKSB7CisJCQlsZW5ndGggPSBlbGVtcy5sZW5ndGg7CisJCQlmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKKwkJCQl2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTsKKworCQkJCWlmICggdmFsdWUgIT0gbnVsbCApIHsKKwkJCQkJcmV0LnB1c2goIHZhbHVlICk7CisJCQkJfQorCQkJfQorCisJCS8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsCisJCX0gZWxzZSB7CisJCQlmb3IgKCBpIGluIGVsZW1zICkgeworCQkJCXZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApOworCisJCQkJaWYgKCB2YWx1ZSAhPSBudWxsICkgeworCQkJCQlyZXQucHVzaCggdmFsdWUgKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzCisJCXJldHVybiBjb25jYXQuYXBwbHkoIFtdLCByZXQgKTsKKwl9LAorCisJLy8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzCisJZ3VpZDogMSwKKworCS8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueQorCS8vIGFyZ3VtZW50cy4KKwlwcm94eTogZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkgeworCQl2YXIgdG1wLCBhcmdzLCBwcm94eTsKKworCQlpZiAoIHR5cGVvZiBjb250ZXh0ID09PSAic3RyaW5nIiApIHsKKwkJCXRtcCA9IGZuWyBjb250ZXh0IF07CisJCQljb250ZXh0ID0gZm47CisJCQlmbiA9IHRtcDsKKwkJfQorCisJCS8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjCisJCS8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuCisJCWlmICggIWpRdWVyeS5pc0Z1bmN0aW9uKCBmbiApICkgeworCQkJcmV0dXJuIHVuZGVmaW5lZDsKKwkJfQorCisJCS8vIFNpbXVsYXRlZCBiaW5kCisJCWFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTsKKwkJcHJveHkgPSBmdW5jdGlvbigpIHsKKwkJCXJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApOworCQl9OworCisJCS8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZAorCQlwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKzsKKworCQlyZXR1cm4gcHJveHk7CisJfSwKKworCW5vdzogRGF0ZS5ub3csCisKKwkvLyBqUXVlcnkuc3VwcG9ydCBpcyBub3QgdXNlZCBpbiBDb3JlIGJ1dCBvdGhlciBwcm9qZWN0cyBhdHRhY2ggdGhlaXIKKwkvLyBwcm9wZXJ0aWVzIHRvIGl0IHNvIGl0IG5lZWRzIHRvIGV4aXN0LgorCXN1cHBvcnQ6IHN1cHBvcnQKK30gKTsKKworLy8gSlNIaW50IHdvdWxkIGVycm9yIG9uIHRoaXMgY29kZSBkdWUgdG8gdGhlIFN5bWJvbCBub3QgYmVpbmcgZGVmaW5lZCBpbiBFUzUuCisvLyBEZWZpbmluZyB0aGlzIGdsb2JhbCBpbiAuanNoaW50cmMgd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWwKKy8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBqdXN0IGRpc2FibGUgSlNIaW50IGZvciB0aGVzZQorLy8gdGhyZWUgbGluZXMuCisvKiBqc2hpbnQgaWdub3JlOiBzdGFydCAqLworaWYgKCB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICkgeworCWpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdOworfQorLyoganNoaW50IGlnbm9yZTogZW5kICovCisKKy8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcAoralF1ZXJ5LmVhY2goICJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbCIuc3BsaXQoICIgIiApLAorZnVuY3Rpb24oIGksIG5hbWUgKSB7CisJY2xhc3MydHlwZVsgIltvYmplY3QgIiArIG5hbWUgKyAiXSIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKK30gKTsKKworZnVuY3Rpb24gaXNBcnJheUxpa2UoIG9iaiApIHsKKworCS8vIFN1cHBvcnQ6IGlPUyA4LjIgKG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKQorCS8vIGBpbmAgY2hlY2sgdXNlZCB0byBwcmV2ZW50IEpJVCBlcnJvciAoZ2gtMjE0NSkKKwkvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXMKKwkvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGluIElFCisJdmFyIGxlbmd0aCA9ICEhb2JqICYmICJsZW5ndGgiIGluIG9iaiAmJiBvYmoubGVuZ3RoLAorCQl0eXBlID0galF1ZXJ5LnR5cGUoIG9iaiApOworCisJaWYgKCB0eXBlID09PSAiZnVuY3Rpb24iIHx8IGpRdWVyeS5pc1dpbmRvdyggb2JqICkgKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHlwZSA9PT0gImFycmF5IiB8fCBsZW5ndGggPT09IDAgfHwKKwkJdHlwZW9mIGxlbmd0aCA9PT0gIm51bWJlciIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7Cit9Cit2YXIgU2l6emxlID0KKy8qIQorICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdjIuMi4xCisgKiBodHRwOi8vc2l6emxlanMuY29tLworICoKKyAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKKyAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKKyAqCisgKiBEYXRlOiAyMDE1LTEwLTE3CisgKi8KKyhmdW5jdGlvbiggd2luZG93ICkgeworCit2YXIgaSwKKwlzdXBwb3J0LAorCUV4cHIsCisJZ2V0VGV4dCwKKwlpc1hNTCwKKwl0b2tlbml6ZSwKKwljb21waWxlLAorCXNlbGVjdCwKKwlvdXRlcm1vc3RDb250ZXh0LAorCXNvcnRJbnB1dCwKKwloYXNEdXBsaWNhdGUsCisKKwkvLyBMb2NhbCBkb2N1bWVudCB2YXJzCisJc2V0RG9jdW1lbnQsCisJZG9jdW1lbnQsCisJZG9jRWxlbSwKKwlkb2N1bWVudElzSFRNTCwKKwlyYnVnZ3lRU0EsCisJcmJ1Z2d5TWF0Y2hlcywKKwltYXRjaGVzLAorCWNvbnRhaW5zLAorCisJLy8gSW5zdGFuY2Utc3BlY2lmaWMgZGF0YQorCWV4cGFuZG8gPSAic2l6emxlIiArIDEgKiBuZXcgRGF0ZSgpLAorCXByZWZlcnJlZERvYyA9IHdpbmRvdy5kb2N1bWVudCwKKwlkaXJydW5zID0gMCwKKwlkb25lID0gMCwKKwljbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKSwKKwl0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSwKKwljb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSwKKwlzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHsKKwkJaWYgKCBhID09PSBiICkgeworCQkJaGFzRHVwbGljYXRlID0gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9LAorCisJLy8gR2VuZXJhbC1wdXJwb3NlIGNvbnN0YW50cworCU1BWF9ORUdBVElWRSA9IDEgPDwgMzEsCisKKwkvLyBJbnN0YW5jZSBtZXRob2RzCisJaGFzT3duID0gKHt9KS5oYXNPd25Qcm9wZXJ0eSwKKwlhcnIgPSBbXSwKKwlwb3AgPSBhcnIucG9wLAorCXB1c2hfbmF0aXZlID0gYXJyLnB1c2gsCisJcHVzaCA9IGFyci5wdXNoLAorCXNsaWNlID0gYXJyLnNsaWNlLAorCS8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBhcyBpdCdzIGZhc3RlciB0aGFuIG5hdGl2ZQorCS8vIGh0dHA6Ly9qc3BlcmYuY29tL3Rob3ItaW5kZXhvZi12cy1mb3IvNQorCWluZGV4T2YgPSBmdW5jdGlvbiggbGlzdCwgZWxlbSApIHsKKwkJdmFyIGkgPSAwLAorCQkJbGVuID0gbGlzdC5sZW5ndGg7CisJCWZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworCQkJaWYgKCBsaXN0W2ldID09PSBlbGVtICkgeworCQkJCXJldHVybiBpOworCQkJfQorCQl9CisJCXJldHVybiAtMTsKKwl9LAorCisJYm9vbGVhbnMgPSAiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLAorCisJLy8gUmVndWxhciBleHByZXNzaW9ucworCisJLy8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2UKKwl3aGl0ZXNwYWNlID0gIltcXHgyMFxcdFxcclxcblxcZl0iLAorCisJLy8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI3ZhbHVlLWRlZi1pZGVudGlmaWVyCisJaWRlbnRpZmllciA9ICIoPzpcXFxcLnxbXFx3LV18W15cXHgwMC1cXHhhMF0pKyIsCisKKwkvLyBBdHRyaWJ1dGUgc2VsZWN0b3JzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnMKKwlhdHRyaWJ1dGVzID0gIlxcWyIgKyB3aGl0ZXNwYWNlICsgIiooIiArIGlkZW50aWZpZXIgKyAiKSg/OiIgKyB3aGl0ZXNwYWNlICsKKwkJLy8gT3BlcmF0b3IgKGNhcHR1cmUgMikKKwkJIiooWypeJHwhfl0/PSkiICsgd2hpdGVzcGFjZSArCisJCS8vICJBdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtjYXB0dXJlIDVdIG9yIHN0cmluZ3MgW2NhcHR1cmUgMyBvciBjYXB0dXJlIDRdIgorCQkiKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgiICsgaWRlbnRpZmllciArICIpKXwpIiArIHdoaXRlc3BhY2UgKworCQkiKlxcXSIsCisKKwlwc2V1ZG9zID0gIjooIiArIGlkZW50aWZpZXIgKyAiKSg/OlxcKCgiICsKKwkJLy8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czoKKwkJLy8gMS4gcXVvdGVkIChjYXB0dXJlIDM7IGNhcHR1cmUgNCBvciBjYXB0dXJlIDUpCisJCSIoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCIgKworCQkvLyAyLiBzaW1wbGUgKGNhcHR1cmUgNikKKwkJIigoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIgKyBhdHRyaWJ1dGVzICsgIikqKXwiICsKKwkJLy8gMy4gYW55dGhpbmcgZWxzZSAoY2FwdHVyZSAyKQorCQkiLioiICsKKwkJIilcXCl8KSIsCisKKwkvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyCisJcndoaXRlc3BhY2UgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgIisiLCAiZyIgKSwKKwlydHJpbSA9IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIiArIHdoaXRlc3BhY2UgKyAiKyQiLCAiZyIgKSwKKworCXJjb21tYSA9IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiKiwiICsgd2hpdGVzcGFjZSArICIqIiApLAorCXJjb21iaW5hdG9ycyA9IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiKihbPit+XXwiICsgd2hpdGVzcGFjZSArICIpIiArIHdoaXRlc3BhY2UgKyAiKiIgKSwKKworCXJhdHRyaWJ1dGVRdW90ZXMgPSBuZXcgUmVnRXhwKCAiPSIgKyB3aGl0ZXNwYWNlICsgIiooW15cXF0nXCJdKj8pIiArIHdoaXRlc3BhY2UgKyAiKlxcXSIsICJnIiApLAorCisJcnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSwKKwlyaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoICJeIiArIGlkZW50aWZpZXIgKyAiJCIgKSwKKworCW1hdGNoRXhwciA9IHsKKwkJIklEIjogbmV3IFJlZ0V4cCggIl4jKCIgKyBpZGVudGlmaWVyICsgIikiICksCisJCSJDTEFTUyI6IG5ldyBSZWdFeHAoICJeXFwuKCIgKyBpZGVudGlmaWVyICsgIikiICksCisJCSJUQUciOiBuZXcgUmVnRXhwKCAiXigiICsgaWRlbnRpZmllciArICJ8WypdKSIgKSwKKwkJIkFUVFIiOiBuZXcgUmVnRXhwKCAiXiIgKyBhdHRyaWJ1dGVzICksCisJCSJQU0VVRE8iOiBuZXcgUmVnRXhwKCAiXiIgKyBwc2V1ZG9zICksCisJCSJDSElMRCI6IG5ldyBSZWdFeHAoICJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiICsgd2hpdGVzcGFjZSArCisJCQkiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIgKyB3aGl0ZXNwYWNlICsgIiooPzooWystXXwpIiArIHdoaXRlc3BhY2UgKworCQkJIiooXFxkKyl8KSkiICsgd2hpdGVzcGFjZSArICIqXFwpfCkiLCAiaSIgKSwKKwkJImJvb2wiOiBuZXcgUmVnRXhwKCAiXig/OiIgKyBib29sZWFucyArICIpJCIsICJpIiApLAorCQkvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKCkKKwkJLy8gV2UgdXNlIHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2VsZWN0YAorCQkibmVlZHNDb250ZXh0IjogbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiICsKKwkJCXdoaXRlc3BhY2UgKyAiKigoPzotXFxkKT9cXGQqKSIgKyB3aGl0ZXNwYWNlICsgIipcXCl8KSg/PVteLV18JCkiLCAiaSIgKQorCX0sCisKKwlyaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSwKKwlyaGVhZGVyID0gL15oXGQkL2ksCisKKwlybmF0aXZlID0gL15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLAorCisJLy8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzCisJcnF1aWNrRXhwciA9IC9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sCisKKwlyc2libGluZyA9IC9bK35dLywKKwlyZXNjYXBlID0gLyd8XFwvZywKKworCS8vIENTUyBlc2NhcGVzIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNlc2NhcGVkLWNoYXJhY3RlcnMKKwlydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCAiXFxcXChbXFxkYS1mXXsxLDZ9IiArIHdoaXRlc3BhY2UgKyAiP3woIiArIHdoaXRlc3BhY2UgKyAiKXwuKSIsICJpZyIgKSwKKwlmdW5lc2NhcGUgPSBmdW5jdGlvbiggXywgZXNjYXBlZCwgZXNjYXBlZFdoaXRlc3BhY2UgKSB7CisJCXZhciBoaWdoID0gIjB4IiArIGVzY2FwZWQgLSAweDEwMDAwOworCQkvLyBOYU4gbWVhbnMgbm9uLWNvZGVwb2ludAorCQkvLyBTdXBwb3J0OiBGaXJlZm94PDI0CisJCS8vIFdvcmthcm91bmQgZXJyb25lb3VzIG51bWVyaWMgaW50ZXJwcmV0YXRpb24gb2YgKyIweCIKKwkJcmV0dXJuIGhpZ2ggIT09IGhpZ2ggfHwgZXNjYXBlZFdoaXRlc3BhY2UgPworCQkJZXNjYXBlZCA6CisJCQloaWdoIDwgMCA/CisJCQkJLy8gQk1QIGNvZGVwb2ludAorCQkJCVN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOgorCQkJCS8vIFN1cHBsZW1lbnRhbCBQbGFuZSBjb2RlcG9pbnQgKHN1cnJvZ2F0ZSBwYWlyKQorCQkJCVN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApOworCX0sCisKKwkvLyBVc2VkIGZvciBpZnJhbWVzCisJLy8gU2VlIHNldERvY3VtZW50KCkKKwkvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSAiUGVybWlzc2lvbiBEZW5pZWQiCisJLy8gZXJyb3IgaW4gSUUKKwl1bmxvYWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7CisJCXNldERvY3VtZW50KCk7CisJfTsKKworLy8gT3B0aW1pemUgZm9yIHB1c2guYXBwbHkoIF8sIE5vZGVMaXN0ICkKK3RyeSB7CisJcHVzaC5hcHBseSgKKwkJKGFyciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkpLAorCQlwcmVmZXJyZWREb2MuY2hpbGROb2RlcworCSk7CisJLy8gU3VwcG9ydDogQW5kcm9pZDw0LjAKKwkvLyBEZXRlY3Qgc2lsZW50bHkgZmFpbGluZyBwdXNoLmFwcGx5CisJYXJyWyBwcmVmZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGggXS5ub2RlVHlwZTsKK30gY2F0Y2ggKCBlICkgeworCXB1c2ggPSB7IGFwcGx5OiBhcnIubGVuZ3RoID8KKworCQkvLyBMZXZlcmFnZSBzbGljZSBpZiBwb3NzaWJsZQorCQlmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7CisJCQlwdXNoX25hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKGVscykgKTsKKwkJfSA6CisKKwkJLy8gU3VwcG9ydDogSUU8OQorCQkvLyBPdGhlcndpc2UgYXBwZW5kIGRpcmVjdGx5CisJCWZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHsKKwkJCXZhciBqID0gdGFyZ2V0Lmxlbmd0aCwKKwkJCQlpID0gMDsKKwkJCS8vIENhbid0IHRydXN0IE5vZGVMaXN0Lmxlbmd0aAorCQkJd2hpbGUgKCAodGFyZ2V0W2orK10gPSBlbHNbaSsrXSkgKSB7fQorCQkJdGFyZ2V0Lmxlbmd0aCA9IGogLSAxOworCQl9CisJfTsKK30KKworZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHsKKwl2YXIgbSwgaSwgZWxlbSwgbmlkLCBuaWRzZWxlY3QsIG1hdGNoLCBncm91cHMsIG5ld1NlbGVjdG9yLAorCQluZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQsCisKKwkJLy8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVudAorCQlub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOTsKKworCXJlc3VsdHMgPSByZXN1bHRzIHx8IFtdOworCisJLy8gUmV0dXJuIGVhcmx5IGZyb20gY2FsbHMgd2l0aCBpbnZhbGlkIHNlbGVjdG9yIG9yIGNvbnRleHQKKwlpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgfHwgIXNlbGVjdG9yIHx8CisJCW5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHsKKworCQlyZXR1cm4gcmVzdWx0czsKKwl9CisKKwkvLyBUcnkgdG8gc2hvcnRjdXQgZmluZCBvcGVyYXRpb25zIChhcyBvcHBvc2VkIHRvIGZpbHRlcnMpIGluIEhUTUwgZG9jdW1lbnRzCisJaWYgKCAhc2VlZCApIHsKKworCQlpZiAoICggY29udGV4dCA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogcHJlZmVycmVkRG9jICkgIT09IGRvY3VtZW50ICkgeworCQkJc2V0RG9jdW1lbnQoIGNvbnRleHQgKTsKKwkJfQorCQljb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKKworCQlpZiAoIGRvY3VtZW50SXNIVE1MICkgeworCisJCQkvLyBJZiB0aGUgc2VsZWN0b3IgaXMgc3VmZmljaWVudGx5IHNpbXBsZSwgdHJ5IHVzaW5nIGEgImdldCpCeSoiIERPTSBtZXRob2QKKwkJCS8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdCkKKwkJCWlmICggbm9kZVR5cGUgIT09IDExICYmIChtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSkgKSB7CisKKwkJCQkvLyBJRCBzZWxlY3RvcgorCQkJCWlmICggKG0gPSBtYXRjaFsxXSkgKSB7CisKKwkJCQkJLy8gRG9jdW1lbnQgY29udGV4dAorCQkJCQlpZiAoIG5vZGVUeXBlID09PSA5ICkgeworCQkJCQkJaWYgKCAoZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgKSB7CisKKwkJCQkJCQkvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdAorCQkJCQkJCS8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zCisJCQkJCQkJLy8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAorCQkJCQkJCWlmICggZWxlbS5pZCA9PT0gbSApIHsKKwkJCQkJCQkJcmVzdWx0cy5wdXNoKCBlbGVtICk7CisJCQkJCQkJCXJldHVybiByZXN1bHRzOworCQkJCQkJCX0KKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJcmV0dXJuIHJlc3VsdHM7CisJCQkJCQl9CisKKwkJCQkJLy8gRWxlbWVudCBjb250ZXh0CisJCQkJCX0gZWxzZSB7CisKKwkJCQkJCS8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0CisJCQkJCQkvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9ucworCQkJCQkJLy8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAorCQkJCQkJaWYgKCBuZXdDb250ZXh0ICYmIChlbGVtID0gbmV3Q29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSAmJgorCQkJCQkJCWNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiYKKwkJCQkJCQllbGVtLmlkID09PSBtICkgeworCisJCQkJCQkJcmVzdWx0cy5wdXNoKCBlbGVtICk7CisJCQkJCQkJcmV0dXJuIHJlc3VsdHM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCS8vIFR5cGUgc2VsZWN0b3IKKwkJCQl9IGVsc2UgaWYgKCBtYXRjaFsyXSApIHsKKwkJCQkJcHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApOworCQkJCQlyZXR1cm4gcmVzdWx0czsKKworCQkJCS8vIENsYXNzIHNlbGVjdG9yCisJCQkJfSBlbHNlIGlmICggKG0gPSBtYXRjaFszXSkgJiYgc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmCisJCQkJCWNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHsKKworCQkJCQlwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSApOworCQkJCQlyZXR1cm4gcmVzdWx0czsKKwkJCQl9CisJCQl9CisKKwkJCS8vIFRha2UgYWR2YW50YWdlIG9mIHF1ZXJ5U2VsZWN0b3JBbGwKKwkJCWlmICggc3VwcG9ydC5xc2EgJiYKKwkJCQkhY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyAiICIgXSAmJgorCQkJCSghcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSkgKSB7CisKKwkJCQlpZiAoIG5vZGVUeXBlICE9PSAxICkgeworCQkJCQluZXdDb250ZXh0ID0gY29udGV4dDsKKwkJCQkJbmV3U2VsZWN0b3IgPSBzZWxlY3RvcjsKKworCQkJCS8vIHFTQSBsb29rcyBvdXRzaWRlIEVsZW1lbnQgY29udGV4dCwgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudAorCQkJCS8vIFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGlzIHdvcmthcm91bmQgdGVjaG5pcXVlCisJCQkJLy8gU3VwcG9ydDogSUUgPD04CisJCQkJLy8gRXhjbHVkZSBvYmplY3QgZWxlbWVudHMKKwkJCQl9IGVsc2UgaWYgKCBjb250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICJvYmplY3QiICkgeworCisJCQkJCS8vIENhcHR1cmUgdGhlIGNvbnRleHQgSUQsIHNldHRpbmcgaXQgZmlyc3QgaWYgbmVjZXNzYXJ5CisJCQkJCWlmICggKG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCAiaWQiICkpICkgeworCQkJCQkJbmlkID0gbmlkLnJlcGxhY2UoIHJlc2NhcGUsICJcXCQmIiApOworCQkJCQl9IGVsc2UgeworCQkJCQkJY29udGV4dC5zZXRBdHRyaWJ1dGUoICJpZCIsIChuaWQgPSBleHBhbmRvKSApOworCQkJCQl9CisKKwkJCQkJLy8gUHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0CisJCQkJCWdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApOworCQkJCQlpID0gZ3JvdXBzLmxlbmd0aDsKKwkJCQkJbmlkc2VsZWN0ID0gcmlkZW50aWZpZXIudGVzdCggbmlkICkgPyAiIyIgKyBuaWQgOiAiW2lkPSciICsgbmlkICsgIiddIjsKKwkJCQkJd2hpbGUgKCBpLS0gKSB7CisJCQkJCQlncm91cHNbaV0gPSBuaWRzZWxlY3QgKyAiICIgKyB0b1NlbGVjdG9yKCBncm91cHNbaV0gKTsKKwkJCQkJfQorCQkJCQluZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCAiLCIgKTsKKworCQkJCQkvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBzZWxlY3RvcnMKKwkJCQkJbmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8CisJCQkJCQljb250ZXh0OworCQkJCX0KKworCQkJCWlmICggbmV3U2VsZWN0b3IgKSB7CisJCQkJCXRyeSB7CisJCQkJCQlwdXNoLmFwcGx5KCByZXN1bHRzLAorCQkJCQkJCW5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKQorCQkJCQkJKTsKKwkJCQkJCXJldHVybiByZXN1bHRzOworCQkJCQl9IGNhdGNoICggcXNhRXJyb3IgKSB7CisJCQkJCX0gZmluYWxseSB7CisJCQkJCQlpZiAoIG5pZCA9PT0gZXhwYW5kbyApIHsKKwkJCQkJCQljb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggImlkIiApOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLy8gQWxsIG90aGVycworCXJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCAiJDEiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTsKK30KKworLyoqCisgKiBDcmVhdGUga2V5LXZhbHVlIGNhY2hlcyBvZiBsaW1pdGVkIHNpemUKKyAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmcsIG9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGgKKyAqCXByb3BlcnR5IG5hbWUgdGhlIChzcGFjZS1zdWZmaXhlZCkgc3RyaW5nIGFuZCAoaWYgdGhlIGNhY2hlIGlzIGxhcmdlciB0aGFuIEV4cHIuY2FjaGVMZW5ndGgpCisgKglkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5CisgKi8KK2Z1bmN0aW9uIGNyZWF0ZUNhY2hlKCkgeworCXZhciBrZXlzID0gW107CisKKwlmdW5jdGlvbiBjYWNoZSgga2V5LCB2YWx1ZSApIHsKKwkJLy8gVXNlIChrZXkgKyAiICIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMxNTcpCisJCWlmICgga2V5cy5wdXNoKCBrZXkgKyAiICIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7CisJCQkvLyBPbmx5IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXMKKwkJCWRlbGV0ZSBjYWNoZVsga2V5cy5zaGlmdCgpIF07CisJCX0KKwkJcmV0dXJuIChjYWNoZVsga2V5ICsgIiAiIF0gPSB2YWx1ZSk7CisJfQorCXJldHVybiBjYWNoZTsKK30KKworLyoqCisgKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenpsZQorICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmsKKyAqLworZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHsKKwlmblsgZXhwYW5kbyBdID0gdHJ1ZTsKKwlyZXR1cm4gZm47Cit9CisKKy8qKgorICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVsZW1lbnQKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBkaXYgYW5kIGV4cGVjdHMgYSBib29sZWFuIHJlc3VsdAorICovCitmdW5jdGlvbiBhc3NlcnQoIGZuICkgeworCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKworCXRyeSB7CisJCXJldHVybiAhIWZuKCBkaXYgKTsKKwl9IGNhdGNoIChlKSB7CisJCXJldHVybiBmYWxzZTsKKwl9IGZpbmFsbHkgeworCQkvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHQKKwkJaWYgKCBkaXYucGFyZW50Tm9kZSApIHsKKwkJCWRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBkaXYgKTsKKwkJfQorCQkvLyByZWxlYXNlIG1lbW9yeSBpbiBJRQorCQlkaXYgPSBudWxsOworCX0KK30KKworLyoqCisgKiBBZGRzIHRoZSBzYW1lIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGF0dHJzCisgKiBAcGFyYW0ge1N0cmluZ30gYXR0cnMgUGlwZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGFwcGxpZWQKKyAqLworZnVuY3Rpb24gYWRkSGFuZGxlKCBhdHRycywgaGFuZGxlciApIHsKKwl2YXIgYXJyID0gYXR0cnMuc3BsaXQoInwiKSwKKwkJaSA9IGFyci5sZW5ndGg7CisKKwl3aGlsZSAoIGktLSApIHsKKwkJRXhwci5hdHRySGFuZGxlWyBhcnJbaV0gXSA9IGhhbmRsZXI7CisJfQorfQorCisvKioKKyAqIENoZWNrcyBkb2N1bWVudCBvcmRlciBvZiB0d28gc2libGluZ3MKKyAqIEBwYXJhbSB7RWxlbWVudH0gYQorICogQHBhcmFtIHtFbGVtZW50fSBiCisgKiBAcmV0dXJucyB7TnVtYmVyfSBSZXR1cm5zIGxlc3MgdGhhbiAwIGlmIGEgcHJlY2VkZXMgYiwgZ3JlYXRlciB0aGFuIDAgaWYgYSBmb2xsb3dzIGIKKyAqLworZnVuY3Rpb24gc2libGluZ0NoZWNrKCBhLCBiICkgeworCXZhciBjdXIgPSBiICYmIGEsCisJCWRpZmYgPSBjdXIgJiYgYS5ub2RlVHlwZSA9PT0gMSAmJiBiLm5vZGVUeXBlID09PSAxICYmCisJCQkoIH5iLnNvdXJjZUluZGV4IHx8IE1BWF9ORUdBVElWRSApIC0KKwkJCSggfmEuc291cmNlSW5kZXggfHwgTUFYX05FR0FUSVZFICk7CisKKwkvLyBVc2UgSUUgc291cmNlSW5kZXggaWYgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXMKKwlpZiAoIGRpZmYgKSB7CisJCXJldHVybiBkaWZmOworCX0KKworCS8vIENoZWNrIGlmIGIgZm9sbG93cyBhCisJaWYgKCBjdXIgKSB7CisJCXdoaWxlICggKGN1ciA9IGN1ci5uZXh0U2libGluZykgKSB7CisJCQlpZiAoIGN1ciA9PT0gYiApIHsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gYSA/IDEgOiAtMTsKK30KKworLyoqCisgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzCisgKiBAcGFyYW0ge1N0cmluZ30gdHlwZQorICovCitmdW5jdGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHsKKwlyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisJCXZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOworCQlyZXR1cm4gbmFtZSA9PT0gImlucHV0IiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7CisJfTsKK30KKworLyoqCisgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnMKKyAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlCisgKi8KK2Z1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHsKKwlyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisJCXZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOworCQlyZXR1cm4gKG5hbWUgPT09ICJpbnB1dCIgfHwgbmFtZSA9PT0gImJ1dHRvbiIpICYmIGVsZW0udHlwZSA9PT0gdHlwZTsKKwl9OworfQorCisvKioKKyAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHMKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGZuCisgKi8KK2Z1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkgeworCXJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIGFyZ3VtZW50ICkgeworCQlhcmd1bWVudCA9ICthcmd1bWVudDsKKwkJcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHsKKwkJCXZhciBqLAorCQkJCW1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksCisJCQkJaSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7CisKKwkJCS8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlcworCQkJd2hpbGUgKCBpLS0gKSB7CisJCQkJaWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkgXSApIHsKKwkJCQkJc2VlZFtqXSA9ICEobWF0Y2hlc1tqXSA9IHNlZWRbal0pOworCQkJCX0KKwkJCX0KKwkJfSk7CisJfSk7Cit9CisKKy8qKgorICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dAorICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHQKKyAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZQorICovCitmdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHsKKwlyZXR1cm4gY29udGV4dCAmJiB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgJiYgY29udGV4dDsKK30KKworLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2UKK3N1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9OworCisvKioKKyAqIERldGVjdHMgWE1MIG5vZGVzCisgKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudAorICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZQorICovCitpc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkgeworCS8vIGRvY3VtZW50RWxlbWVudCBpcyB2ZXJpZmllZCBmb3IgY2FzZXMgd2hlcmUgaXQgZG9lc24ndCB5ZXQgZXhpc3QKKwkvLyAoc3VjaCBhcyBsb2FkaW5nIGlmcmFtZXMgaW4gSUUgLSAjNDgzMykKKwl2YXIgZG9jdW1lbnRFbGVtZW50ID0gZWxlbSAmJiAoZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0pLmRvY3VtZW50RWxlbWVudDsKKwlyZXR1cm4gZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9PSAiSFRNTCIgOiBmYWxzZTsKK307CisKKy8qKgorICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50CisgKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudAorICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudAorICovCitzZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2RlICkgeworCXZhciBoYXNDb21wYXJlLCBwYXJlbnQsCisJCWRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYzsKKworCS8vIFJldHVybiBlYXJseSBpZiBkb2MgaXMgaW52YWxpZCBvciBhbHJlYWR5IHNlbGVjdGVkCisJaWYgKCBkb2MgPT09IGRvY3VtZW50IHx8IGRvYy5ub2RlVHlwZSAhPT0gOSB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCApIHsKKwkJcmV0dXJuIGRvY3VtZW50OworCX0KKworCS8vIFVwZGF0ZSBnbG9iYWwgdmFyaWFibGVzCisJZG9jdW1lbnQgPSBkb2M7CisJZG9jRWxlbSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKKwlkb2N1bWVudElzSFRNTCA9ICFpc1hNTCggZG9jdW1lbnQgKTsKKworCS8vIFN1cHBvcnQ6IElFIDktMTEsIEVkZ2UKKwkvLyBBY2Nlc3NpbmcgaWZyYW1lIGRvY3VtZW50cyBhZnRlciB1bmxvYWQgdGhyb3dzICJwZXJtaXNzaW9uIGRlbmllZCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KQorCWlmICggKHBhcmVudCA9IGRvY3VtZW50LmRlZmF1bHRWaWV3KSAmJiBwYXJlbnQudG9wICE9PSBwYXJlbnQgKSB7CisJCS8vIFN1cHBvcnQ6IElFIDExCisJCWlmICggcGFyZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7CisJCQlwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lciggInVubG9hZCIsIHVubG9hZEhhbmRsZXIsIGZhbHNlICk7CisKKwkJLy8gU3VwcG9ydDogSUUgOSAtIDEwIG9ubHkKKwkJfSBlbHNlIGlmICggcGFyZW50LmF0dGFjaEV2ZW50ICkgeworCQkJcGFyZW50LmF0dGFjaEV2ZW50KCAib251bmxvYWQiLCB1bmxvYWRIYW5kbGVyICk7CisJCX0KKwl9CisKKwkvKiBBdHRyaWJ1dGVzCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJLy8gU3VwcG9ydDogSUU8OAorCS8vIFZlcmlmeSB0aGF0IGdldEF0dHJpYnV0ZSByZWFsbHkgcmV0dXJucyBhdHRyaWJ1dGVzIGFuZCBub3QgcHJvcGVydGllcworCS8vIChleGNlcHRpbmcgSUU4IGJvb2xlYW5zKQorCXN1cHBvcnQuYXR0cmlidXRlcyA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkgeworCQlkaXYuY2xhc3NOYW1lID0gImkiOworCQlyZXR1cm4gIWRpdi5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpOworCX0pOworCisJLyogZ2V0RWxlbWVudChzKUJ5KgorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikgcmV0dXJucyBvbmx5IGVsZW1lbnRzCisJc3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkgeworCQlkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpICk7CisJCXJldHVybiAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoOworCX0pOworCisJLy8gU3VwcG9ydDogSUU8OQorCXN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApOworCisJLy8gU3VwcG9ydDogSUU8MTAKKwkvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWUKKwkvLyBUaGUgYnJva2VuIGdldEVsZW1lbnRCeUlkIG1ldGhvZHMgZG9uJ3QgcGljayB1cCBwcm9ncmFtYXRpY2FsbHktc2V0IG5hbWVzLAorCS8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdAorCXN1cHBvcnQuZ2V0QnlJZCA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkgeworCQlkb2NFbGVtLmFwcGVuZENoaWxkKCBkaXYgKS5pZCA9IGV4cGFuZG87CisJCXJldHVybiAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3RoOworCX0pOworCisJLy8gSUQgZmluZCBhbmQgZmlsdGVyCisJaWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7CisJCUV4cHIuZmluZFsiSUQiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHsKKwkJCWlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09ICJ1bmRlZmluZWQiICYmIGRvY3VtZW50SXNIVE1MICkgeworCQkJCXZhciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTsKKwkJCQlyZXR1cm4gbSA/IFsgbSBdIDogW107CisJCQl9CisJCX07CisJCUV4cHIuZmlsdGVyWyJJRCJdID0gZnVuY3Rpb24oIGlkICkgeworCQkJdmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7CisJCQlyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisJCQkJcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpID09PSBhdHRySWQ7CisJCQl9OworCQl9OworCX0gZWxzZSB7CisJCS8vIFN1cHBvcnQ6IElFNi83CisJCS8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXQKKwkJZGVsZXRlIEV4cHIuZmluZFsiSUQiXTsKKworCQlFeHByLmZpbHRlclsiSUQiXSA9ICBmdW5jdGlvbiggaWQgKSB7CisJCQl2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKKwkJCXJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCQl2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09ICJ1bmRlZmluZWQiICYmCisJCQkJCWVsZW0uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTsKKwkJCQlyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBhdHRySWQ7CisJCQl9OworCQl9OworCX0KKworCS8vIFRhZworCUV4cHIuZmluZFsiVEFHIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID8KKwkJZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHsKKwkJCWlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmluZWQiICkgeworCQkJCXJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTsKKworCQkJLy8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdFQlROCisJCQl9IGVsc2UgaWYgKCBzdXBwb3J0LnFzYSApIHsKKwkJCQlyZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTsKKwkJCX0KKwkJfSA6CisKKwkJZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHsKKwkJCXZhciBlbGVtLAorCQkJCXRtcCA9IFtdLAorCQkJCWkgPSAwLAorCQkJCS8vIEJ5IGhhcHB5IGNvaW5jaWRlbmNlLCBhIChicm9rZW4pIGdFQlROIGFwcGVhcnMgb24gRG9jdW1lbnRGcmFnbWVudCBub2RlcyB0b28KKwkJCQlyZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7CisKKwkJCS8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHMKKwkJCWlmICggdGFnID09PSAiKiIgKSB7CisJCQkJd2hpbGUgKCAoZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7CisJCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKwkJCQkJCXRtcC5wdXNoKCBlbGVtICk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlyZXR1cm4gdG1wOworCQkJfQorCQkJcmV0dXJuIHJlc3VsdHM7CisJCX07CisKKwkvLyBDbGFzcworCUV4cHIuZmluZFsiQ0xBU1MiXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkgeworCQlpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09ICJ1bmRlZmluZWQiICYmIGRvY3VtZW50SXNIVE1MICkgeworCQkJcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggY2xhc3NOYW1lICk7CisJCX0KKwl9OworCisJLyogUVNBL21hdGNoZXNTZWxlY3RvcgorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8vIFFTQSBhbmQgbWF0Y2hlc1NlbGVjdG9yIHN1cHBvcnQKKworCS8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpCisJcmJ1Z2d5TWF0Y2hlcyA9IFtdOworCisJLy8gcVNhKDpmb2N1cykgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSkKKwkvLyBXZSBhbGxvdyB0aGlzIGJlY2F1c2Ugb2YgYSBidWcgaW4gSUU4LzkgdGhhdCB0aHJvd3MgYW4gZXJyb3IKKwkvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lCisJLy8gU28sIHdlIGFsbG93IDpmb2N1cyB0byBwYXNzIHRocm91Z2ggUVNBIGFsbCB0aGUgdGltZSB0byBhdm9pZCB0aGUgSUUgZXJyb3IKKwkvLyBTZWUgaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzgKKwlyYnVnZ3lRU0EgPSBbXTsKKworCWlmICggKHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkpICkgeworCQkvLyBCdWlsZCBRU0EgcmVnZXgKKwkJLy8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaQorCQlhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKKwkJCS8vIFNlbGVjdCBpcyBzZXQgdG8gZW1wdHkgc3RyaW5nIG9uIHB1cnBvc2UKKwkJCS8vIFRoaXMgaXMgdG8gdGVzdCBJRSdzIHRyZWF0bWVudCBvZiBub3QgZXhwbGljaXRseQorCQkJLy8gc2V0dGluZyBhIGJvb2xlYW4gY29udGVudCBhdHRyaWJ1dGUsCisJCQkvLyBzaW5jZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3VnaAorCQkJLy8gaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzNTkKKwkJCWRvY0VsZW0uYXBwZW5kQ2hpbGQoIGRpdiApLmlubmVySFRNTCA9ICI8YSBpZD0nIiArIGV4cGFuZG8gKyAiJz48L2E+IiArCisJCQkJIjxzZWxlY3QgaWQ9JyIgKyBleHBhbmRvICsgIi1cclxcJyBtc2FsbG93Y2FwdHVyZT0nJz4iICsKKwkJCQkiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iOworCisJCQkvLyBTdXBwb3J0OiBJRTgsIE9wZXJhIDExLTEyLjE2CisJCQkvLyBOb3RoaW5nIHNob3VsZCBiZSBzZWxlY3RlZCB3aGVuIGVtcHR5IHN0cmluZ3MgZm9sbG93IF49IG9yICQ9IG9yICo9CisJCQkvLyBUaGUgdGVzdCBhdHRyaWJ1dGUgbXVzdCBiZSB1bmtub3duIGluIE9wZXJhIGJ1dCAic2FmZSIgZm9yIFdpblJUCisJCQkvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvaGg0NjUzODguYXNweCNhdHRyaWJ1dGVfc2VjdGlvbgorCQkJaWYgKCBkaXYucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGggKSB7CisJCQkJcmJ1Z2d5UVNBLnB1c2goICJbKl4kXT0iICsgd2hpdGVzcGFjZSArICIqKD86Jyd8XCJcIikiICk7CisJCQl9CisKKwkJCS8vIFN1cHBvcnQ6IElFOAorCQkJLy8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCAidmFsdWUiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHkKKwkJCWlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RoICkgeworCQkJCXJidWdneVFTQS5wdXNoKCAiXFxbIiArIHdoaXRlc3BhY2UgKyAiKig/OnZhbHVlfCIgKyBib29sZWFucyArICIpIiApOworCQkJfQorCisJCQkvLyBTdXBwb3J0OiBDaHJvbWU8MjksIEFuZHJvaWQ8NC40LCBTYWZhcmk8Ny4wKywgaU9TPDcuMCssIFBoYW50b21KUzwxLjkuOCsKKwkJCWlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCAiW2lkfj0iICsgZXhwYW5kbyArICItXSIgKS5sZW5ndGggKSB7CisJCQkJcmJ1Z2d5UVNBLnB1c2goIn49Iik7CisJCQl9CisKKwkJCS8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9uIGVsZW1lbnRzCisJCQkvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZAorCQkJLy8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHMKKwkJCWlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aCApIHsKKwkJCQlyYnVnZ3lRU0EucHVzaCgiOmNoZWNrZWQiKTsKKwkJCX0KKworCQkJLy8gU3VwcG9ydDogU2FmYXJpIDgrLCBpT1MgOCsKKwkJCS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTEKKwkJCS8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmluZy1jb21iaW5hdG9yIHNlbGVjdG9yYCBmYWlscworCQkJaWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoICJhIyIgKyBleHBhbmRvICsgIisqIiApLmxlbmd0aCApIHsKKwkJCQlyYnVnZ3lRU0EucHVzaCgiLiMuK1srfl0iKTsKKwkJCX0KKwkJfSk7CisKKwkJYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisJCQkvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHMKKwkJCS8vIFRoZSB0eXBlIGFuZCBuYW1lIGF0dHJpYnV0ZXMgYXJlIHJlc3RyaWN0ZWQgZHVyaW5nIC5pbm5lckhUTUwgYXNzaWdubWVudAorCQkJdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKKwkJCWlucHV0LnNldEF0dHJpYnV0ZSggInR5cGUiLCAiaGlkZGVuIiApOworCQkJZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApLnNldEF0dHJpYnV0ZSggIm5hbWUiLCAiRCIgKTsKKworCQkJLy8gU3VwcG9ydDogSUU4CisJCQkvLyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGUKKwkJCWlmICggZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lPWRdIikubGVuZ3RoICkgeworCQkJCXJidWdneVFTQS5wdXNoKCAibmFtZSIgKyB3aGl0ZXNwYWNlICsgIipbKl4kfCF+XT89IiApOworCQkJfQorCisJCQkvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVkKQorCQkJLy8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHMKKwkJCWlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCApIHsKKwkJCQlyYnVnZ3lRU0EucHVzaCggIjplbmFibGVkIiwgIjpkaXNhYmxlZCIgKTsKKwkJCX0KKworCQkJLy8gT3BlcmEgMTAtMTEgZG9lcyBub3QgdGhyb3cgb24gcG9zdC1jb21tYSBpbnZhbGlkIHBzZXVkb3MKKwkJCWRpdi5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4Iik7CisJCQlyYnVnZ3lRU0EucHVzaCgiLC4qOiIpOworCQl9KTsKKwl9CisKKwlpZiAoIChzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciA9IHJuYXRpdmUudGVzdCggKG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXMgfHwKKwkJZG9jRWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwKKwkJZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHwKKwkJZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8CisJCWRvY0VsZW0ubXNNYXRjaGVzU2VsZWN0b3IpICkpICkgeworCisJCWFzc2VydChmdW5jdGlvbiggZGl2ICkgeworCQkJLy8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yCisJCQkvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KQorCQkJc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNoZXMuY2FsbCggZGl2LCAiZGl2IiApOworCisJCQkvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uCisJCQkvLyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkCisJCQltYXRjaGVzLmNhbGwoIGRpdiwgIltzIT0nJ106eCIgKTsKKwkJCXJidWdneU1hdGNoZXMucHVzaCggIiE9IiwgcHNldWRvcyApOworCQl9KTsKKwl9CisKKwlyYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKCJ8IikgKTsKKwlyYnVnZ3lNYXRjaGVzID0gcmJ1Z2d5TWF0Y2hlcy5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKCJ8IikgKTsKKworCS8qIENvbnRhaW5zCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCWhhc0NvbXBhcmUgPSBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTsKKworCS8vIEVsZW1lbnQgY29udGFpbnMgYW5vdGhlcgorCS8vIFB1cnBvc2VmdWxseSBzZWxmLWV4Y2x1c2l2ZQorCS8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmCisJY29udGFpbnMgPSBoYXNDb21wYXJlIHx8IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb250YWlucyApID8KKwkJZnVuY3Rpb24oIGEsIGIgKSB7CisJCQl2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLAorCQkJCWJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlOworCQkJcmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoCisJCQkJYWRvd24uY29udGFpbnMgPworCQkJCQlhZG93bi5jb250YWlucyggYnVwICkgOgorCQkJCQlhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTYKKwkJCSkpOworCQl9IDoKKwkJZnVuY3Rpb24oIGEsIGIgKSB7CisJCQlpZiAoIGIgKSB7CisJCQkJd2hpbGUgKCAoYiA9IGIucGFyZW50Tm9kZSkgKSB7CisJCQkJCWlmICggYiA9PT0gYSApIHsKKwkJCQkJCXJldHVybiB0cnVlOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGZhbHNlOworCQl9OworCisJLyogU29ydGluZworCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmcKKwlzb3J0T3JkZXIgPSBoYXNDb21wYXJlID8KKwlmdW5jdGlvbiggYSwgYiApIHsKKworCQkvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbAorCQlpZiAoIGEgPT09IGIgKSB7CisJCQloYXNEdXBsaWNhdGUgPSB0cnVlOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uCisJCXZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjsKKwkJaWYgKCBjb21wYXJlICkgeworCQkJcmV0dXJuIGNvbXBhcmU7CisJCX0KKworCQkvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50CisJCWNvbXBhcmUgPSAoIGEub3duZXJEb2N1bWVudCB8fCBhICkgPT09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/CisJCQlhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOgorCisJCQkvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWQKKwkJCTE7CisKKwkJLy8gRGlzY29ubmVjdGVkIG5vZGVzCisJCWlmICggY29tcGFyZSAmIDEgfHwKKwkJCSghc3VwcG9ydC5zb3J0RGV0YWNoZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYSApID09PSBjb21wYXJlKSApIHsKKworCQkJLy8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50CisJCQlpZiAoIGEgPT09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYSkgKSB7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJaWYgKCBiID09PSBkb2N1bWVudCB8fCBiLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGIpICkgeworCQkJCXJldHVybiAxOworCQkJfQorCisJCQkvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlcgorCQkJcmV0dXJuIHNvcnRJbnB1dCA/CisJCQkJKCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOgorCQkJCTA7CisJCX0KKworCQlyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7CisJfSA6CisJZnVuY3Rpb24oIGEsIGIgKSB7CisJCS8vIEV4aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWwKKwkJaWYgKCBhID09PSBiICkgeworCQkJaGFzRHVwbGljYXRlID0gdHJ1ZTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJdmFyIGN1ciwKKwkJCWkgPSAwLAorCQkJYXVwID0gYS5wYXJlbnROb2RlLAorCQkJYnVwID0gYi5wYXJlbnROb2RlLAorCQkJYXAgPSBbIGEgXSwKKwkJCWJwID0gWyBiIF07CisKKwkJLy8gUGFyZW50bGVzcyBub2RlcyBhcmUgZWl0aGVyIGRvY3VtZW50cyBvciBkaXNjb25uZWN0ZWQKKwkJaWYgKCAhYXVwIHx8ICFidXAgKSB7CisJCQlyZXR1cm4gYSA9PT0gZG9jdW1lbnQgPyAtMSA6CisJCQkJYiA9PT0gZG9jdW1lbnQgPyAxIDoKKwkJCQlhdXAgPyAtMSA6CisJCQkJYnVwID8gMSA6CisJCQkJc29ydElucHV0ID8KKwkJCQkoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6CisJCQkJMDsKKworCQkvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzLCB3ZSBjYW4gZG8gYSBxdWljayBjaGVjaworCQl9IGVsc2UgaWYgKCBhdXAgPT09IGJ1cCApIHsKKwkJCXJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTsKKwkJfQorCisJCS8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlzdHMgb2YgdGhlaXIgYW5jZXN0b3JzIGZvciBjb21wYXJpc29uCisJCWN1ciA9IGE7CisJCXdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHsKKwkJCWFwLnVuc2hpZnQoIGN1ciApOworCQl9CisJCWN1ciA9IGI7CisJCXdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHsKKwkJCWJwLnVuc2hpZnQoIGN1ciApOworCQl9CisKKwkJLy8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3kKKwkJd2hpbGUgKCBhcFtpXSA9PT0gYnBbaV0gKSB7CisJCQlpKys7CisJCX0KKworCQlyZXR1cm4gaSA/CisJCQkvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3IKKwkJCXNpYmxpbmdDaGVjayggYXBbaV0sIGJwW2ldICkgOgorCisJCQkvLyBPdGhlcndpc2Ugbm9kZXMgaW4gb3VyIGRvY3VtZW50IHNvcnQgZmlyc3QKKwkJCWFwW2ldID09PSBwcmVmZXJyZWREb2MgPyAtMSA6CisJCQlicFtpXSA9PT0gcHJlZmVycmVkRG9jID8gMSA6CisJCQkwOworCX07CisKKwlyZXR1cm4gZG9jdW1lbnQ7Cit9OworCitTaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHsKKwlyZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApOworfTsKKworU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkgeworCS8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZAorCWlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHsKKwkJc2V0RG9jdW1lbnQoIGVsZW0gKTsKKwl9CisKKwkvLyBNYWtlIHN1cmUgdGhhdCBhdHRyaWJ1dGUgc2VsZWN0b3JzIGFyZSBxdW90ZWQKKwlleHByID0gZXhwci5yZXBsYWNlKCByYXR0cmlidXRlUXVvdGVzLCAiPSckMSddIiApOworCisJaWYgKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciAmJiBkb2N1bWVudElzSFRNTCAmJgorCQkhY29tcGlsZXJDYWNoZVsgZXhwciArICIgIiBdICYmCisJCSggIXJidWdneU1hdGNoZXMgfHwgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICkgJiYKKwkJKCAhcmJ1Z2d5UVNBICAgICB8fCAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApICkgeworCisJCXRyeSB7CisJCQl2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7CisKKwkJCS8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXMKKwkJCWlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHwKKwkJCQkJLy8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnQKKwkJCQkJLy8gZnJhZ21lbnQgaW4gSUUgOQorCQkJCQllbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkgeworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0gY2F0Y2ggKGUpIHt9CisJfQorCisJcmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDsKK307CisKK1NpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkgeworCS8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZAorCWlmICggKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCApICE9PSBkb2N1bWVudCApIHsKKwkJc2V0RG9jdW1lbnQoIGNvbnRleHQgKTsKKwl9CisJcmV0dXJuIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7Cit9OworCitTaXp6bGUuYXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgeworCS8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZAorCWlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHsKKwkJc2V0RG9jdW1lbnQoIGVsZW0gKTsKKwl9CisKKwl2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLAorCQkvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoalF1ZXJ5ICMxMzgwNykKKwkJdmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgPworCQkJZm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDoKKwkJCXVuZGVmaW5lZDsKKworCXJldHVybiB2YWwgIT09IHVuZGVmaW5lZCA/CisJCXZhbCA6CisJCXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhZG9jdW1lbnRJc0hUTUwgPworCQkJZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSA6CisJCQkodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpKSAmJiB2YWwuc3BlY2lmaWVkID8KKwkJCQl2YWwudmFsdWUgOgorCQkJCW51bGw7Cit9OworCitTaXp6bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkgeworCXRocm93IG5ldyBFcnJvciggIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIgKyBtc2cgKTsKK307CisKKy8qKgorICogRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlcworICogQHBhcmFtIHtBcnJheUxpa2V9IHJlc3VsdHMKKyAqLworU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHsKKwl2YXIgZWxlbSwKKwkJZHVwbGljYXRlcyA9IFtdLAorCQlqID0gMCwKKwkJaSA9IDA7CisKKwkvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlCisJaGFzRHVwbGljYXRlID0gIXN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlczsKKwlzb3J0SW5wdXQgPSAhc3VwcG9ydC5zb3J0U3RhYmxlICYmIHJlc3VsdHMuc2xpY2UoIDAgKTsKKwlyZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApOworCisJaWYgKCBoYXNEdXBsaWNhdGUgKSB7CisJCXdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkgeworCQkJaWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7CisJCQkJaiA9IGR1cGxpY2F0ZXMucHVzaCggaSApOworCQkJfQorCQl9CisJCXdoaWxlICggai0tICkgeworCQkJcmVzdWx0cy5zcGxpY2UoIGR1cGxpY2F0ZXNbIGogXSwgMSApOworCQl9CisJfQorCisJLy8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHMKKwkvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvcHVsbC8yMjUKKwlzb3J0SW5wdXQgPSBudWxsOworCisJcmV0dXJuIHJlc3VsdHM7Cit9OworCisvKioKKyAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzCisgKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW0KKyAqLworZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7CisJdmFyIG5vZGUsCisJCXJldCA9ICIiLAorCQlpID0gMCwKKwkJbm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlOworCisJaWYgKCAhbm9kZVR5cGUgKSB7CisJCS8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5CisJCXdoaWxlICggKG5vZGUgPSBlbGVtW2krK10pICkgeworCQkJLy8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXMKKwkJCXJldCArPSBnZXRUZXh0KCBub2RlICk7CisJCX0KKwl9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gOSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7CisJCS8vIFVzZSB0ZXh0Q29udGVudCBmb3IgZWxlbWVudHMKKwkJLy8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1MykKKwkJaWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gInN0cmluZyIgKSB7CisJCQlyZXR1cm4gZWxlbS50ZXh0Q29udGVudDsKKwkJfSBlbHNlIHsKKwkJCS8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlbgorCQkJZm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7CisJCQkJcmV0ICs9IGdldFRleHQoIGVsZW0gKTsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkgeworCQlyZXR1cm4gZWxlbS5ub2RlVmFsdWU7CisJfQorCS8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQgb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2RlcworCisJcmV0dXJuIHJldDsKK307CisKK0V4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0geworCisJLy8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyCisJY2FjaGVMZW5ndGg6IDUwLAorCisJY3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sCisKKwltYXRjaDogbWF0Y2hFeHByLAorCisJYXR0ckhhbmRsZToge30sCisKKwlmaW5kOiB7fSwKKworCXJlbGF0aXZlOiB7CisJCSI+IjogeyBkaXI6ICJwYXJlbnROb2RlIiwgZmlyc3Q6IHRydWUgfSwKKwkJIiAiOiB7IGRpcjogInBhcmVudE5vZGUiIH0sCisJCSIrIjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciLCBmaXJzdDogdHJ1ZSB9LAorCQkifiI6IHsgZGlyOiAicHJldmlvdXNTaWJsaW5nIiB9CisJfSwKKworCXByZUZpbHRlcjogeworCQkiQVRUUiI6IGZ1bmN0aW9uKCBtYXRjaCApIHsKKwkJCW1hdGNoWzFdID0gbWF0Y2hbMV0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKKworCQkJLy8gTW92ZSB0aGUgZ2l2ZW4gdmFsdWUgdG8gbWF0Y2hbM10gd2hldGhlciBxdW90ZWQgb3IgdW5xdW90ZWQKKwkJCW1hdGNoWzNdID0gKCBtYXRjaFszXSB8fCBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCAiIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7CisKKwkJCWlmICggbWF0Y2hbMl0gPT09ICJ+PSIgKSB7CisJCQkJbWF0Y2hbM10gPSAiICIgKyBtYXRjaFszXSArICIgIjsKKwkJCX0KKworCQkJcmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7CisJCX0sCisKKwkJIkNISUxEIjogZnVuY3Rpb24oIG1hdGNoICkgeworCQkJLyogbWF0Y2hlcyBmcm9tIG1hdGNoRXhwclsiQ0hJTEQiXQorCQkJCTEgdHlwZSAob25seXxudGh8Li4uKQorCQkJCTIgd2hhdCAoY2hpbGR8b2YtdHlwZSkKKwkJCQkzIGFyZ3VtZW50IChldmVufG9kZHxcZCp8XGQqbihbKy1dXGQrKT98Li4uKQorCQkJCTQgeG4tY29tcG9uZW50IG9mIHhuK3kgYXJndW1lbnQgKFsrLV0/XGQqbnwpCisJCQkJNSBzaWduIG9mIHhuLWNvbXBvbmVudAorCQkJCTYgeCBvZiB4bi1jb21wb25lbnQKKwkJCQk3IHNpZ24gb2YgeS1jb21wb25lbnQKKwkJCQk4IHkgb2YgeS1jb21wb25lbnQKKwkJCSovCisJCQltYXRjaFsxXSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7CisKKwkJCWlmICggbWF0Y2hbMV0uc2xpY2UoIDAsIDMgKSA9PT0gIm50aCIgKSB7CisJCQkJLy8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnQKKwkJCQlpZiAoICFtYXRjaFszXSApIHsKKwkJCQkJU2l6emxlLmVycm9yKCBtYXRjaFswXSApOworCQkJCX0KKworCQkJCS8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRAorCQkJCS8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzEKKwkJCQltYXRjaFs0XSA9ICsoIG1hdGNoWzRdID8gbWF0Y2hbNV0gKyAobWF0Y2hbNl0gfHwgMSkgOiAyICogKCBtYXRjaFszXSA9PT0gImV2ZW4iIHx8IG1hdGNoWzNdID09PSAib2RkIiApICk7CisJCQkJbWF0Y2hbNV0gPSArKCAoIG1hdGNoWzddICsgbWF0Y2hbOF0gKSB8fCBtYXRjaFszXSA9PT0gIm9kZCIgKTsKKworCQkJLy8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzCisJCQl9IGVsc2UgaWYgKCBtYXRjaFszXSApIHsKKwkJCQlTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7CisJCQl9CisKKwkJCXJldHVybiBtYXRjaDsKKwkJfSwKKworCQkiUFNFVURPIjogZnVuY3Rpb24oIG1hdGNoICkgeworCQkJdmFyIGV4Y2VzcywKKwkJCQl1bnF1b3RlZCA9ICFtYXRjaFs2XSAmJiBtYXRjaFsyXTsKKworCQkJaWYgKCBtYXRjaEV4cHJbIkNISUxEIl0udGVzdCggbWF0Y2hbMF0gKSApIHsKKwkJCQlyZXR1cm4gbnVsbDsKKwkJCX0KKworCQkJLy8gQWNjZXB0IHF1b3RlZCBhcmd1bWVudHMgYXMtaXMKKwkJCWlmICggbWF0Y2hbM10gKSB7CisJCQkJbWF0Y2hbMl0gPSBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCAiIjsKKworCQkJLy8gU3RyaXAgZXhjZXNzIGNoYXJhY3RlcnMgZnJvbSB1bnF1b3RlZCBhcmd1bWVudHMKKwkJCX0gZWxzZSBpZiAoIHVucXVvdGVkICYmIHJwc2V1ZG8udGVzdCggdW5xdW90ZWQgKSAmJgorCQkJCS8vIEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpCisJCQkJKGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApKSAmJgorCQkJCS8vIGFkdmFuY2UgdG8gdGhlIG5leHQgY2xvc2luZyBwYXJlbnRoZXNpcworCQkJCShleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCAiKSIsIHVucXVvdGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoKSApIHsKKworCQkJCS8vIGV4Y2VzcyBpcyBhIG5lZ2F0aXZlIGluZGV4CisJCQkJbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7CisJCQkJbWF0Y2hbMl0gPSB1bnF1b3RlZC5zbGljZSggMCwgZXhjZXNzICk7CisJCQl9CisKKwkJCS8vIFJldHVybiBvbmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KQorCQkJcmV0dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7CisJCX0KKwl9LAorCisJZmlsdGVyOiB7CisKKwkJIlRBRyI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkgeworCQkJdmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7CisJCQlyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gIioiID8KKwkJCQlmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0gOgorCQkJCWZ1bmN0aW9uKCBlbGVtICkgeworCQkJCQlyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lOworCQkJCX07CisJCX0sCisKKwkJIkNMQVNTIjogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHsKKwkJCXZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgIiAiIF07CisKKwkJCXJldHVybiBwYXR0ZXJuIHx8CisJCQkJKHBhdHRlcm4gPSBuZXcgUmVnRXhwKCAiKF58IiArIHdoaXRlc3BhY2UgKyAiKSIgKyBjbGFzc05hbWUgKyAiKCIgKyB3aGl0ZXNwYWNlICsgInwkKSIgKSkgJiYKKwkJCQljbGFzc0NhY2hlKCBjbGFzc05hbWUsIGZ1bmN0aW9uKCBlbGVtICkgeworCQkJCQlyZXR1cm4gcGF0dGVybi50ZXN0KCB0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09ICJzdHJpbmciICYmIGVsZW0uY2xhc3NOYW1lIHx8IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gInVuZGVmaW5lZCIgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzIikgfHwgIiIgKTsKKwkJCQl9KTsKKwkJfSwKKworCQkiQVRUUiI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7CisJCQlyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisJCQkJdmFyIHJlc3VsdCA9IFNpenpsZS5hdHRyKCBlbGVtLCBuYW1lICk7CisKKwkJCQlpZiAoIHJlc3VsdCA9PSBudWxsICkgeworCQkJCQlyZXR1cm4gb3BlcmF0b3IgPT09ICIhPSI7CisJCQkJfQorCQkJCWlmICggIW9wZXJhdG9yICkgeworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisKKwkJCQlyZXN1bHQgKz0gIiI7CisKKwkJCQlyZXR1cm4gb3BlcmF0b3IgPT09ICI9IiA/IHJlc3VsdCA9PT0gY2hlY2sgOgorCQkJCQlvcGVyYXRvciA9PT0gIiE9IiA/IHJlc3VsdCAhPT0gY2hlY2sgOgorCQkJCQlvcGVyYXRvciA9PT0gIl49IiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwIDoKKwkJCQkJb3BlcmF0b3IgPT09ICIqPSIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDoKKwkJCQkJb3BlcmF0b3IgPT09ICIkPSIgPyBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOgorCQkJCQlvcGVyYXRvciA9PT0gIn49IiA/ICggIiAiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCAiICIgKSArICIgIiApLmluZGV4T2YoIGNoZWNrICkgPiAtMSA6CisJCQkJCW9wZXJhdG9yID09PSAifD0iID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyAiLSIgOgorCQkJCQlmYWxzZTsKKwkJCX07CisJCX0sCisKKwkJIkNISUxEIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIGFyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHsKKwkJCXZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09ICJudGgiLAorCQkJCWZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSAibGFzdCIsCisJCQkJb2ZUeXBlID0gd2hhdCA9PT0gIm9mLXR5cGUiOworCisJCQlyZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/CisKKwkJCQkvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pCisJCQkJZnVuY3Rpb24oIGVsZW0gKSB7CisJCQkJCXJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTsKKwkJCQl9IDoKKworCQkJCWZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CisJCQkJCXZhciBjYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsIG5vZGUsIG5vZGVJbmRleCwgc3RhcnQsCisJCQkJCQlkaXIgPSBzaW1wbGUgIT09IGZvcndhcmQgPyAibmV4dFNpYmxpbmciIDogInByZXZpb3VzU2libGluZyIsCisJCQkJCQlwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsCisJCQkJCQluYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwKKwkJCQkJCXVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlLAorCQkJCQkJZGlmZiA9IGZhbHNlOworCisJCQkJCWlmICggcGFyZW50ICkgeworCisJCQkJCQkvLyA6KGZpcnN0fGxhc3R8b25seSktKGNoaWxkfG9mLXR5cGUpCisJCQkJCQlpZiAoIHNpbXBsZSApIHsKKwkJCQkJCQl3aGlsZSAoIGRpciApIHsKKwkJCQkJCQkJbm9kZSA9IGVsZW07CisJCQkJCQkJCXdoaWxlICggKG5vZGUgPSBub2RlWyBkaXIgXSkgKSB7CisJCQkJCQkJCQlpZiAoIG9mVHlwZSA/CisJCQkJCQkJCQkJbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDoKKwkJCQkJCQkJCQlub2RlLm5vZGVUeXBlID09PSAxICkgeworCisJCQkJCQkJCQkJcmV0dXJuIGZhbHNlOworCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJCS8vIFJldmVyc2UgZGlyZWN0aW9uIGZvciA6b25seS0qIChpZiB3ZSBoYXZlbid0IHlldCBkb25lIHNvKQorCQkJCQkJCQlzdGFydCA9IGRpciA9IHR5cGUgPT09ICJvbmx5IiAmJiAhc3RhcnQgJiYgIm5leHRTaWJsaW5nIjsKKwkJCQkJCQl9CisJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQl9CisKKwkJCQkJCXN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07CisKKwkJCQkJCS8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgCisJCQkJCQlpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7CisKKwkJCQkJCQkvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJldmlvdXNseS1jYWNoZWQgaW5kZXgKKworCQkJCQkJCS8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXkKKwkJCQkJCQlub2RlID0gcGFyZW50OworCQkJCQkJCW91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTsKKworCQkJCQkJCS8vIFN1cHBvcnQ6IElFIDw5IG9ubHkKKwkJCQkJCQkvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSkKKwkJCQkJCQl1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fAorCQkJCQkJCQkob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pOworCisJCQkJCQkJY2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdOworCQkJCQkJCW5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTsKKwkJCQkJCQlkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07CisJCQkJCQkJbm9kZSA9IG5vZGVJbmRleCAmJiBwYXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07CisKKwkJCQkJCQl3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fAorCisJCQkJCQkJCS8vIEZhbGxiYWNrIHRvIHNlZWtpbmcgYGVsZW1gIGZyb20gdGhlIHN0YXJ0CisJCQkJCQkJCShkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkgeworCisJCQkJCQkJCS8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrCisJCQkJCQkJCWlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSAmJiArK2RpZmYgJiYgbm9kZSA9PT0gZWxlbSApIHsKKwkJCQkJCQkJCXVuaXF1ZUNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIG5vZGVJbmRleCwgZGlmZiBdOworCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJLy8gVXNlIHByZXZpb3VzbHktY2FjaGVkIGVsZW1lbnQgaW5kZXggaWYgYXZhaWxhYmxlCisJCQkJCQkJaWYgKCB1c2VDYWNoZSApIHsKKwkJCQkJCQkJLy8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheQorCQkJCQkJCQlub2RlID0gZWxlbTsKKwkJCQkJCQkJb3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pOworCisJCQkJCQkJCS8vIFN1cHBvcnQ6IElFIDw5IG9ubHkKKwkJCQkJCQkJLy8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpCisJCQkJCQkJCXVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8CisJCQkJCQkJCQkob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pOworCisJCQkJCQkJCWNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTsKKwkJCQkJCQkJbm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdOworCQkJCQkJCQlkaWZmID0gbm9kZUluZGV4OworCQkJCQkJCX0KKworCQkJCQkJCS8vIHhtbCA6bnRoLWNoaWxkKC4uLikKKwkJCQkJCQkvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pCisJCQkJCQkJaWYgKCBkaWZmID09PSBmYWxzZSApIHsKKwkJCQkJCQkJLy8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnQKKwkJCQkJCQkJd2hpbGUgKCAobm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHwKKwkJCQkJCQkJCShkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkgeworCisJCQkJCQkJCQlpZiAoICggb2ZUeXBlID8KKwkJCQkJCQkJCQlub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOgorCQkJCQkJCQkJCW5vZGUubm9kZVR5cGUgPT09IDEgKSAmJgorCQkJCQkJCQkJCSsrZGlmZiApIHsKKworCQkJCQkJCQkJCS8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnQKKwkJCQkJCQkJCQlpZiAoIHVzZUNhY2hlICkgeworCQkJCQkJCQkJCQlvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7CisKKwkJCQkJCQkJCQkJLy8gU3VwcG9ydDogSUUgPDkgb25seQorCQkJCQkJCQkJCQkvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSkKKwkJCQkJCQkJCQkJdW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHwKKwkJCQkJCQkJCQkJCShvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7CisKKwkJCQkJCQkJCQkJdW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCWlmICggbm9kZSA9PT0gZWxlbSApIHsKKwkJCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQkvLyBJbmNvcnBvcmF0ZSB0aGUgb2Zmc2V0LCB0aGVuIGNoZWNrIGFnYWluc3QgY3ljbGUgc2l6ZQorCQkJCQkJZGlmZiAtPSBsYXN0OworCQkJCQkJcmV0dXJuIGRpZmYgPT09IGZpcnN0IHx8ICggZGlmZiAlIGZpcnN0ID09PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7CisJCQkJCX0KKwkJCQl9OworCQl9LAorCisJCSJQU0VVRE8iOiBmdW5jdGlvbiggcHNldWRvLCBhcmd1bWVudCApIHsKKwkJCS8vIHBzZXVkby1jbGFzcyBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZQorCQkJLy8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNwc2V1ZG8tY2xhc3NlcworCQkJLy8gUHJpb3JpdGl6ZSBieSBjYXNlIHNlbnNpdGl2aXR5IGluIGNhc2UgY3VzdG9tIHBzZXVkb3MgYXJlIGFkZGVkIHdpdGggdXBwZXJjYXNlIGxldHRlcnMKKwkJCS8vIFJlbWVtYmVyIHRoYXQgc2V0RmlsdGVycyBpbmhlcml0cyBmcm9tIHBzZXVkb3MKKwkJCXZhciBhcmdzLAorCQkJCWZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHwKKwkJCQkJU2l6emxlLmVycm9yKCAidW5zdXBwb3J0ZWQgcHNldWRvOiAiICsgcHNldWRvICk7CisKKwkJCS8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXQKKwkJCS8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uCisJCQkvLyBqdXN0IGFzIFNpenpsZSBkb2VzCisJCQlpZiAoIGZuWyBleHBhbmRvIF0gKSB7CisJCQkJcmV0dXJuIGZuKCBhcmd1bWVudCApOworCQkJfQorCisJCQkvLyBCdXQgbWFpbnRhaW4gc3VwcG9ydCBmb3Igb2xkIHNpZ25hdHVyZXMKKwkJCWlmICggZm4ubGVuZ3RoID4gMSApIHsKKwkJCQlhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgIiIsIGFyZ3VtZW50IF07CisJCQkJcmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/CisJCQkJCW1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHsKKwkJCQkJCXZhciBpZHgsCisJCQkJCQkJbWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLAorCQkJCQkJCWkgPSBtYXRjaGVkLmxlbmd0aDsKKwkJCQkJCXdoaWxlICggaS0tICkgeworCQkJCQkJCWlkeCA9IGluZGV4T2YoIHNlZWQsIG1hdGNoZWRbaV0gKTsKKwkJCQkJCQlzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0Y2hlZFtpXSApOworCQkJCQkJfQorCQkJCQl9KSA6CisJCQkJCWZ1bmN0aW9uKCBlbGVtICkgeworCQkJCQkJcmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7CisJCQkJCX07CisJCQl9CisKKwkJCXJldHVybiBmbjsKKwkJfQorCX0sCisKKwlwc2V1ZG9zOiB7CisJCS8vIFBvdGVudGlhbGx5IGNvbXBsZXggcHNldWRvcworCQkibm90IjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKwkJCS8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlCisJCQkvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZworCQkJLy8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzCisJCQl2YXIgaW5wdXQgPSBbXSwKKwkJCQlyZXN1bHRzID0gW10sCisJCQkJbWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCAiJDEiICkgKTsKKworCQkJcmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/CisJCQkJbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBjb250ZXh0LCB4bWwgKSB7CisJCQkJCXZhciBlbGVtLAorCQkJCQkJdW5tYXRjaGVkID0gbWF0Y2hlciggc2VlZCwgbnVsbCwgeG1sLCBbXSApLAorCQkJCQkJaSA9IHNlZWQubGVuZ3RoOworCisJCQkJCS8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmAKKwkJCQkJd2hpbGUgKCBpLS0gKSB7CisJCQkJCQlpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHsKKwkJCQkJCQlzZWVkW2ldID0gIShtYXRjaGVzW2ldID0gZWxlbSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9KSA6CisJCQkJZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKwkJCQkJaW5wdXRbMF0gPSBlbGVtOworCQkJCQltYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7CisJCQkJCS8vIERvbid0IGtlZXAgdGhlIGVsZW1lbnQgKGlzc3VlICMyOTkpCisJCQkJCWlucHV0WzBdID0gbnVsbDsKKwkJCQkJcmV0dXJuICFyZXN1bHRzLnBvcCgpOworCQkJCX07CisJCX0pLAorCisJCSJoYXMiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkgeworCQkJcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworCQkJCXJldHVybiBTaXp6bGUoIHNlbGVjdG9yLCBlbGVtICkubGVuZ3RoID4gMDsKKwkJCX07CisJCX0pLAorCisJCSJjb250YWlucyI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggdGV4dCApIHsKKwkJCXRleHQgPSB0ZXh0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7CisJCQlyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisJCQkJcmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVyVGV4dCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTsKKwkJCX07CisJCX0pLAorCisJCS8vICJXaGV0aGVyIGFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yCisJCS8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlCisJCS8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMsCisJCS8vIG9yIGJlZ2lubmluZyB3aXRoIHRoZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgIi0iLgorCQkvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS4KKwkJLy8gVGhlIGlkZW50aWZpZXIgQyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgdmFsaWQgbGFuZ3VhZ2UgbmFtZS4iCisJCS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jbGFuZy1wc2V1ZG8KKwkJImxhbmciOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkgeworCQkJLy8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllcgorCQkJaWYgKCAhcmlkZW50aWZpZXIudGVzdChsYW5nIHx8ICIiKSApIHsKKwkJCQlTaXp6bGUuZXJyb3IoICJ1bnN1cHBvcnRlZCBsYW5nOiAiICsgbGFuZyApOworCQkJfQorCQkJbGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpOworCQkJcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworCQkJCXZhciBlbGVtTGFuZzsKKwkJCQlkbyB7CisJCQkJCWlmICggKGVsZW1MYW5nID0gZG9jdW1lbnRJc0hUTUwgPworCQkJCQkJZWxlbS5sYW5nIDoKKwkJCQkJCWVsZW0uZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCJsYW5nIikpICkgeworCisJCQkJCQllbGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNlKCk7CisJCQkJCQlyZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArICItIiApID09PSAwOworCQkJCQl9CisJCQkJfSB3aGlsZSAoIChlbGVtID0gZWxlbS5wYXJlbnROb2RlKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfTsKKwkJfSksCisKKwkJLy8gTWlzY2VsbGFuZW91cworCQkidGFyZ2V0IjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQl2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDsKKwkJCXJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDsKKwkJfSwKKworCQkicm9vdCI6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJcmV0dXJuIGVsZW0gPT09IGRvY0VsZW07CisJCX0sCisKKwkJImZvY3VzIjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiAoIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3VzKCkpICYmICEhKGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXgpOworCQl9LAorCisJCS8vIEJvb2xlYW4gcHJvcGVydGllcworCQkiZW5hYmxlZCI6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlOworCQl9LAorCisJCSJkaXNhYmxlZCI6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWU7CisJCX0sCisKKwkJImNoZWNrZWQiOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCS8vIEluIENTUzMsIDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVtZW50cworCQkJLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWQKKwkJCXZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKKwkJCXJldHVybiAobm9kZU5hbWUgPT09ICJpbnB1dCIgJiYgISFlbGVtLmNoZWNrZWQpIHx8IChub2RlTmFtZSA9PT0gIm9wdGlvbiIgJiYgISFlbGVtLnNlbGVjdGVkKTsKKwkJfSwKKworCQkic2VsZWN0ZWQiOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCS8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHQKKwkJCS8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHkKKwkJCWlmICggZWxlbS5wYXJlbnROb2RlICkgeworCQkJCWVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4OworCQkJfQorCisJCQlyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTsKKwkJfSwKKworCQkvLyBDb250ZW50cworCQkiZW1wdHkiOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvCisJCQkvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSksCisJCQkvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKQorCQkJLy8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlbgorCQkJZm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7CisJCQkJaWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiB0cnVlOworCQl9LAorCisJCSJwYXJlbnQiOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCXJldHVybiAhRXhwci5wc2V1ZG9zWyJlbXB0eSJdKCBlbGVtICk7CisJCX0sCisKKwkJLy8gRWxlbWVudC9pbnB1dCB0eXBlcworCQkiaGVhZGVyIjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1cm4gcmhlYWRlci50ZXN0KCBlbGVtLm5vZGVOYW1lICk7CisJCX0sCisKKwkJImlucHV0IjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7CisJCX0sCisKKwkJImJ1dHRvbiI6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisJCQlyZXR1cm4gbmFtZSA9PT0gImlucHV0IiAmJiBlbGVtLnR5cGUgPT09ICJidXR0b24iIHx8IG5hbWUgPT09ICJidXR0b24iOworCQl9LAorCisJCSJ0ZXh0IjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQl2YXIgYXR0cjsKKwkJCXJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYKKwkJCQllbGVtLnR5cGUgPT09ICJ0ZXh0IiAmJgorCisJCQkJLy8gU3VwcG9ydDogSUU8OAorCQkJCS8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCAic2VhcmNoIikgYXBwZWFyIHdpdGggZWxlbS50eXBlID09PSAidGV4dCIKKwkJCQkoIChhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkgPT0gbnVsbCB8fCBhdHRyLnRvTG93ZXJDYXNlKCkgPT09ICJ0ZXh0IiApOworCQl9LAorCisJCS8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb24KKwkJImZpcnN0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbigpIHsKKwkJCXJldHVybiBbIDAgXTsKKwkJfSksCisKKwkJImxhc3QiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHsKKwkJCXJldHVybiBbIGxlbmd0aCAtIDEgXTsKKwkJfSksCisKKwkJImVxIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgeworCQkJcmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdOworCQl9KSwKKworCQkiZXZlbiI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgeworCQkJdmFyIGkgPSAwOworCQkJZm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7CisJCQkJbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKKwkJCX0KKwkJCXJldHVybiBtYXRjaEluZGV4ZXM7CisJCX0pLAorCisJCSJvZGQiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHsKKwkJCXZhciBpID0gMTsKKwkJCWZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkgeworCQkJCW1hdGNoSW5kZXhlcy5wdXNoKCBpICk7CisJCQl9CisJCQlyZXR1cm4gbWF0Y2hJbmRleGVzOworCQl9KSwKKworCQkibHQiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7CisJCQl2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7CisJCQlmb3IgKCA7IC0taSA+PSAwOyApIHsKKwkJCQltYXRjaEluZGV4ZXMucHVzaCggaSApOworCQkJfQorCQkJcmV0dXJuIG1hdGNoSW5kZXhlczsKKwkJfSksCisKKwkJImd0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgeworCQkJdmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50OworCQkJZm9yICggOyArK2kgPCBsZW5ndGg7ICkgeworCQkJCW1hdGNoSW5kZXhlcy5wdXNoKCBpICk7CisJCQl9CisJCQlyZXR1cm4gbWF0Y2hJbmRleGVzOworCQl9KQorCX0KK307CisKK0V4cHIucHNldWRvc1sibnRoIl0gPSBFeHByLnBzZXVkb3NbImVxIl07CisKKy8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zCitmb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHsKKwlFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUlucHV0UHNldWRvKCBpICk7Cit9Citmb3IgKCBpIGluIHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkgeworCUV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7Cit9CisKKy8vIEVhc3kgQVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVycworZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9CitzZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNldWRvczsKK0V4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7CisKK3Rva2VuaXplID0gU2l6emxlLnRva2VuaXplID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7CisJdmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsCisJCXNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsCisJCWNhY2hlZCA9IHRva2VuQ2FjaGVbIHNlbGVjdG9yICsgIiAiIF07CisKKwlpZiAoIGNhY2hlZCApIHsKKwkJcmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTsKKwl9CisKKwlzb0ZhciA9IHNlbGVjdG9yOworCWdyb3VwcyA9IFtdOworCXByZUZpbHRlcnMgPSBFeHByLnByZUZpbHRlcjsKKworCXdoaWxlICggc29GYXIgKSB7CisKKwkJLy8gQ29tbWEgYW5kIGZpcnN0IHJ1bgorCQlpZiAoICFtYXRjaGVkIHx8IChtYXRjaCA9IHJjb21tYS5leGVjKCBzb0ZhciApKSApIHsKKwkJCWlmICggbWF0Y2ggKSB7CisJCQkJLy8gRG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWQKKwkJCQlzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFswXS5sZW5ndGggKSB8fCBzb0ZhcjsKKwkJCX0KKwkJCWdyb3Vwcy5wdXNoKCAodG9rZW5zID0gW10pICk7CisJCX0KKworCQltYXRjaGVkID0gZmFsc2U7CisKKwkJLy8gQ29tYmluYXRvcnMKKwkJaWYgKCAobWF0Y2ggPSByY29tYmluYXRvcnMuZXhlYyggc29GYXIgKSkgKSB7CisJCQltYXRjaGVkID0gbWF0Y2guc2hpZnQoKTsKKwkJCXRva2Vucy5wdXNoKHsKKwkJCQl2YWx1ZTogbWF0Y2hlZCwKKwkJCQkvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2UKKwkJCQl0eXBlOiBtYXRjaFswXS5yZXBsYWNlKCBydHJpbSwgIiAiICkKKwkJCX0pOworCQkJc29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTsKKwkJfQorCisJCS8vIEZpbHRlcnMKKwkJZm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHsKKwkJCWlmICggKG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHwKKwkJCQkobWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkpKSApIHsKKwkJCQltYXRjaGVkID0gbWF0Y2guc2hpZnQoKTsKKwkJCQl0b2tlbnMucHVzaCh7CisJCQkJCXZhbHVlOiBtYXRjaGVkLAorCQkJCQl0eXBlOiB0eXBlLAorCQkJCQltYXRjaGVzOiBtYXRjaAorCQkJCX0pOworCQkJCXNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7CisJCQl9CisJCX0KKworCQlpZiAoICFtYXRjaGVkICkgeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3MKKwkvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmcKKwkvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnMKKwlyZXR1cm4gcGFyc2VPbmx5ID8KKwkJc29GYXIubGVuZ3RoIDoKKwkJc29GYXIgPworCQkJU2l6emxlLmVycm9yKCBzZWxlY3RvciApIDoKKwkJCS8vIENhY2hlIHRoZSB0b2tlbnMKKwkJCXRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApOworfTsKKworZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkgeworCXZhciBpID0gMCwKKwkJbGVuID0gdG9rZW5zLmxlbmd0aCwKKwkJc2VsZWN0b3IgPSAiIjsKKwlmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKwkJc2VsZWN0b3IgKz0gdG9rZW5zW2ldLnZhbHVlOworCX0KKwlyZXR1cm4gc2VsZWN0b3I7Cit9CisKK2Z1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7CisJdmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLAorCQljaGVja05vbkVsZW1lbnRzID0gYmFzZSAmJiBkaXIgPT09ICJwYXJlbnROb2RlIiwKKwkJZG9uZU5hbWUgPSBkb25lKys7CisKKwlyZXR1cm4gY29tYmluYXRvci5maXJzdCA/CisJCS8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudAorCQlmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgeworCQkJd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHsKKwkJCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHsKKwkJCQkJcmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApOworCQkJCX0KKwkJCX0KKwkJfSA6CisKKwkJLy8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzCisJCWZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CisJCQl2YXIgb2xkQ2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLAorCQkJCW5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBdOworCisJCQkvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBjb21iaW5hdG9yIGNhY2hpbmcKKwkJCWlmICggeG1sICkgeworCQkJCXdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7CisJCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkgeworCQkJCQkJaWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKKwkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHsKKwkJCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7CisJCQkJCQlvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8IChlbGVtWyBleHBhbmRvIF0gPSB7fSk7CisKKwkJCQkJCS8vIFN1cHBvcnQ6IElFIDw5IG9ubHkKKwkJCQkJCS8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KQorCQkJCQkJdW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gfHwgKG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSA9IHt9KTsKKworCQkJCQkJaWYgKCAob2xkQ2FjaGUgPSB1bmlxdWVDYWNoZVsgZGlyIF0pICYmCisJCQkJCQkJb2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHsKKworCQkJCQkJCS8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzCisJCQkJCQkJcmV0dXJuIChuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIgXSk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCS8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHMKKwkJCQkJCQl1bmlxdWVDYWNoZVsgZGlyIF0gPSBuZXdDYWNoZTsKKworCQkJCQkJCS8vIEEgbWF0Y2ggbWVhbnMgd2UncmUgZG9uZTsgYSBmYWlsIG1lYW5zIHdlIGhhdmUgdG8ga2VlcCBjaGVja2luZworCQkJCQkJCWlmICggKG5ld0NhY2hlWyAyIF0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSkgKSB7CisJCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKK30KKworZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkgeworCXJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID8KKwkJZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKwkJCXZhciBpID0gbWF0Y2hlcnMubGVuZ3RoOworCQkJd2hpbGUgKCBpLS0gKSB7CisJCQkJaWYgKCAhbWF0Y2hlcnNbaV0oIGVsZW0sIGNvbnRleHQsIHhtbCApICkgeworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIHRydWU7CisJCX0gOgorCQltYXRjaGVyc1swXTsKK30KKworZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkgeworCXZhciBpID0gMCwKKwkJbGVuID0gY29udGV4dHMubGVuZ3RoOworCWZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworCQlTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyApOworCX0KKwlyZXR1cm4gcmVzdWx0czsKK30KKworZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHsKKwl2YXIgZWxlbSwKKwkJbmV3VW5tYXRjaGVkID0gW10sCisJCWkgPSAwLAorCQlsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLAorCQltYXBwZWQgPSBtYXAgIT0gbnVsbDsKKworCWZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworCQlpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHsKKwkJCWlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgeworCQkJCW5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7CisJCQkJaWYgKCBtYXBwZWQgKSB7CisJCQkJCW1hcC5wdXNoKCBpICk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIG5ld1VubWF0Y2hlZDsKK30KKworZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkgeworCWlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkgeworCQlwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApOworCX0KKwlpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHsKKwkJcG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApOworCX0KKwlyZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7CisJCXZhciB0ZW1wLCBpLCBlbGVtLAorCQkJcHJlTWFwID0gW10sCisJCQlwb3N0TWFwID0gW10sCisJCQlwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLAorCisJCQkvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dAorCQkJZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yIHx8ICIqIiwgY29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSwKKworCQkJLy8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uCisJCQltYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID8KKwkJCQljb25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6CisJCQkJZWxlbXMsCisKKwkJCW1hdGNoZXJPdXQgPSBtYXRjaGVyID8KKwkJCQkvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLAorCQkJCXBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID8KKworCQkJCQkvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3NhcnkKKwkJCQkJW10gOgorCisJCQkJCS8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseQorCQkJCQlyZXN1bHRzIDoKKwkJCQltYXRjaGVySW47CisKKwkJLy8gRmluZCBwcmltYXJ5IG1hdGNoZXMKKwkJaWYgKCBtYXRjaGVyICkgeworCQkJbWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4bWwgKTsKKwkJfQorCisJCS8vIEFwcGx5IHBvc3RGaWx0ZXIKKwkJaWYgKCBwb3N0RmlsdGVyICkgeworCQkJdGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7CisJCQlwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4dCwgeG1sICk7CisKKwkJCS8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW4KKwkJCWkgPSB0ZW1wLmxlbmd0aDsKKwkJCXdoaWxlICggaS0tICkgeworCQkJCWlmICggKGVsZW0gPSB0ZW1wW2ldKSApIHsKKwkJCQkJbWF0Y2hlck91dFsgcG9zdE1hcFtpXSBdID0gIShtYXRjaGVySW5bIHBvc3RNYXBbaV0gXSA9IGVsZW0pOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmICggc2VlZCApIHsKKwkJCWlmICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7CisJCQkJaWYgKCBwb3N0RmluZGVyICkgeworCQkJCQkvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHMKKwkJCQkJdGVtcCA9IFtdOworCQkJCQlpID0gbWF0Y2hlck91dC5sZW5ndGg7CisJCQkJCXdoaWxlICggaS0tICkgeworCQkJCQkJaWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICkgeworCQkJCQkJCS8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoCisJCQkJCQkJdGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlwb3N0RmluZGVyKCBudWxsLCAobWF0Y2hlck91dCA9IFtdKSwgdGVtcCwgeG1sICk7CisJCQkJfQorCisJCQkJLy8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWQKKwkJCQlpID0gbWF0Y2hlck91dC5sZW5ndGg7CisJCQkJd2hpbGUgKCBpLS0gKSB7CisJCQkJCWlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSAmJgorCQkJCQkJKHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZiggc2VlZCwgZWxlbSApIDogcHJlTWFwW2ldKSA+IC0xICkgeworCisJCQkJCQlzZWVkW3RlbXBdID0gIShyZXN1bHRzW3RlbXBdID0gZWxlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJLy8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkCisJCX0gZWxzZSB7CisJCQltYXRjaGVyT3V0ID0gY29uZGVuc2UoCisJCQkJbWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/CisJCQkJCW1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6CisJCQkJCW1hdGNoZXJPdXQKKwkJCSk7CisJCQlpZiAoIHBvc3RGaW5kZXIgKSB7CisJCQkJcG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7CisJCQl9IGVsc2UgeworCQkJCXB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTsKKwkJCX0KKwkJfQorCX0pOworfQorCitmdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkgeworCXZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosCisJCWxlbiA9IHRva2Vucy5sZW5ndGgsCisJCWxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1swXS50eXBlIF0sCisJCWltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5nUmVsYXRpdmUgfHwgRXhwci5yZWxhdGl2ZVsiICJdLAorCQlpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsCisKKwkJLy8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVtZW50cyBhcmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocykKKwkJbWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0OworCQl9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksCisJCW1hdGNoQW55Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkgeworCQkJcmV0dXJuIGluZGV4T2YoIGNoZWNrQ29udGV4dCwgZWxlbSApID4gLTE7CisJCX0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSwKKwkJbWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CisJCQl2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT09IG91dGVybW9zdENvbnRleHQgKSApIHx8ICgKKwkJCQkoY2hlY2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgPworCQkJCQltYXRjaENvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApIDoKKwkJCQkJbWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApOworCQkJLy8gQXZvaWQgaGFuZ2luZyBvbnRvIGVsZW1lbnQgKGlzc3VlICMyOTkpCisJCQljaGVja0NvbnRleHQgPSBudWxsOworCQkJcmV0dXJuIHJldDsKKwkJfSBdOworCisJZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CisJCWlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHsKKwkJCW1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyKSBdOworCQl9IGVsc2UgeworCQkJbWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbaV0udHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbaV0ubWF0Y2hlcyApOworCisJCQkvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlcgorCQkJaWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7CisJCQkJLy8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nCisJCQkJaiA9ICsraTsKKwkJCQlmb3IgKCA7IGogPCBsZW47IGorKyApIHsKKwkJCQkJaWYgKCBFeHByLnJlbGF0aXZlWyB0b2tlbnNbal0udHlwZSBdICkgeworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJcmV0dXJuIHNldE1hdGNoZXIoCisJCQkJCWkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLAorCQkJCQlpID4gMSAmJiB0b1NlbGVjdG9yKAorCQkJCQkJLy8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmAKKwkJCQkJCXRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5jb25jYXQoeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09ICIgIiA/ICIqIiA6ICIiIH0pCisJCQkJCSkucmVwbGFjZSggcnRyaW0sICIkMSIgKSwKKwkJCQkJbWF0Y2hlciwKKwkJCQkJaSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksCisJCQkJCWogPCBsZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICh0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSkgKSwKKwkJCQkJaiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKQorCQkJCSk7CisJCQl9CisJCQltYXRjaGVycy5wdXNoKCBtYXRjaGVyICk7CisJCX0KKwl9CisKKwlyZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7Cit9CisKK2Z1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHsKKwl2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLAorCQlieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCwKKwkJc3VwZXJNYXRjaGVyID0gZnVuY3Rpb24oIHNlZWQsIGNvbnRleHQsIHhtbCwgcmVzdWx0cywgb3V0ZXJtb3N0ICkgeworCQkJdmFyIGVsZW0sIGosIG1hdGNoZXIsCisJCQkJbWF0Y2hlZENvdW50ID0gMCwKKwkJCQlpID0gIjAiLAorCQkJCXVubWF0Y2hlZCA9IHNlZWQgJiYgW10sCisJCQkJc2V0TWF0Y2hlZCA9IFtdLAorCQkJCWNvbnRleHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0LAorCQkJCS8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHQKKwkJCQllbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZFsiVEFHIl0oICIqIiwgb3V0ZXJtb3N0ICksCisJCQkJLy8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXIKKwkJCQlkaXJydW5zVW5pcXVlID0gKGRpcnJ1bnMgKz0gY29udGV4dEJhY2t1cCA9PSBudWxsID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgMC4xKSwKKwkJCQlsZW4gPSBlbGVtcy5sZW5ndGg7CisKKwkJCWlmICggb3V0ZXJtb3N0ICkgeworCQkJCW91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDsKKwkJCX0KKworCQkJLy8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHMKKwkJCS8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaQorCQkJLy8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6ICJsZW5ndGgiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZyBlbGVtZW50cyBieSBpZAorCQkJZm9yICggOyBpICE9PSBsZW4gJiYgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgeworCQkJCWlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7CisJCQkJCWogPSAwOworCQkJCQlpZiAoICFjb250ZXh0ICYmIGVsZW0ub3duZXJEb2N1bWVudCAhPT0gZG9jdW1lbnQgKSB7CisJCQkJCQlzZXREb2N1bWVudCggZWxlbSApOworCQkJCQkJeG1sID0gIWRvY3VtZW50SXNIVE1MOworCQkJCQl9CisJCQkJCXdoaWxlICggKG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbaisrXSkgKSB7CisJCQkJCQlpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQgfHwgZG9jdW1lbnQsIHhtbCkgKSB7CisJCQkJCQkJcmVzdWx0cy5wdXNoKCBlbGVtICk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJaWYgKCBvdXRlcm1vc3QgKSB7CisJCQkJCQlkaXJydW5zID0gZGlycnVuc1VuaXF1ZTsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnMKKwkJCQlpZiAoIGJ5U2V0ICkgeworCQkJCQkvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzCisJCQkJCWlmICggKGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtKSApIHsKKwkJCQkJCW1hdGNoZWRDb3VudC0tOworCQkJCQl9CisKKwkJCQkJLy8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdAorCQkJCQlpZiAoIHNlZWQgKSB7CisJCQkJCQl1bm1hdGNoZWQucHVzaCggZWxlbSApOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQkvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFib3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgCisJCQkvLyBtYWtlcyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLgorCQkJbWF0Y2hlZENvdW50ICs9IGk7CisKKwkJCS8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50cworCQkJLy8gTk9URTogVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVyZSBhcmUgbm8gdW5tYXRjaGVkIGVsZW1lbnRzIChpLmUuLCBgbWF0Y2hlZENvdW50YAorCQkJLy8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlCisJCQkvLyBubyBlbGVtZW50IG1hdGNoZXJzIGFuZCBubyBzZWVkLgorCQkJLy8gSW5jcmVtZW50aW5nIGFuIGluaXRpYWxseS1zdHJpbmcgIjAiIGBpYCBhbGxvd3MgYGlgIHRvIHJlbWFpbiBhIHN0cmluZyBvbmx5IGluIHRoYXQKKwkJCS8vIGNhc2UsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgIjAwIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc28KKwkJCS8vIG51bWVyaWNhbGx5IHplcm8uCisJCQlpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHsKKwkJCQlqID0gMDsKKwkJCQl3aGlsZSAoIChtYXRjaGVyID0gc2V0TWF0Y2hlcnNbaisrXSkgKSB7CisJCQkJCW1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7CisJCQkJfQorCisJCQkJaWYgKCBzZWVkICkgeworCQkJCQkvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nCisJCQkJCWlmICggbWF0Y2hlZENvdW50ID4gMCApIHsKKwkJCQkJCXdoaWxlICggaS0tICkgeworCQkJCQkJCWlmICggISh1bm1hdGNoZWRbaV0gfHwgc2V0TWF0Y2hlZFtpXSkgKSB7CisJCQkJCQkJCXNldE1hdGNoZWRbaV0gPSBwb3AuY2FsbCggcmVzdWx0cyApOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCS8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzCisJCQkJCXNldE1hdGNoZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApOworCQkJCX0KKworCQkJCS8vIEFkZCBtYXRjaGVzIHRvIHJlc3VsdHMKKwkJCQlwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7CisKKwkJCQkvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmcKKwkJCQlpZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiYKKwkJCQkJKCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7CisKKwkJCQkJU2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTsKKwkJCQl9CisJCQl9CisKKwkJCS8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVycworCQkJaWYgKCBvdXRlcm1vc3QgKSB7CisJCQkJZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7CisJCQkJb3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7CisJCQl9CisKKwkJCXJldHVybiB1bm1hdGNoZWQ7CisJCX07CisKKwlyZXR1cm4gYnlTZXQgPworCQltYXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDoKKwkJc3VwZXJNYXRjaGVyOworfQorCitjb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkgeworCXZhciBpLAorCQlzZXRNYXRjaGVycyA9IFtdLAorCQllbGVtZW50TWF0Y2hlcnMgPSBbXSwKKwkJY2FjaGVkID0gY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyAiICIgXTsKKworCWlmICggIWNhY2hlZCApIHsKKwkJLy8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50CisJCWlmICggIW1hdGNoICkgeworCQkJbWF0Y2ggPSB0b2tlbml6ZSggc2VsZWN0b3IgKTsKKwkJfQorCQlpID0gbWF0Y2gubGVuZ3RoOworCQl3aGlsZSAoIGktLSApIHsKKwkJCWNhY2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKCBtYXRjaFtpXSApOworCQkJaWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHsKKwkJCQlzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTsKKwkJCX0gZWxzZSB7CisJCQkJZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApOworCQkJfQorCQl9CisKKwkJLy8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uCisJCWNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoIHNlbGVjdG9yLCBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSApOworCisJCS8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvbgorCQljYWNoZWQuc2VsZWN0b3IgPSBzZWxlY3RvcjsKKwl9CisJcmV0dXJuIGNhY2hlZDsKK307CisKKy8qKgorICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBTaXp6bGUncyBjb21waWxlZAorICogIHNlbGVjdG9yIGZ1bmN0aW9ucworICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWQKKyAqICBzZWxlY3RvciBmdW5jdGlvbiBidWlsdCB3aXRoIFNpenpsZS5jb21waWxlCisgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHQKKyAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXQorICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3QKKyAqLworc2VsZWN0ID0gU2l6emxlLnNlbGVjdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHsKKwl2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCwKKwkJY29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09ICJmdW5jdGlvbiIgJiYgc2VsZWN0b3IsCisJCW1hdGNoID0gIXNlZWQgJiYgdG9rZW5pemUoIChzZWxlY3RvciA9IGNvbXBpbGVkLnNlbGVjdG9yIHx8IHNlbGVjdG9yKSApOworCisJcmVzdWx0cyA9IHJlc3VsdHMgfHwgW107CisKKwkvLyBUcnkgdG8gbWluaW1pemUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzZWxlY3RvciBpbiB0aGUgbGlzdCBhbmQgbm8gc2VlZAorCS8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMgdXMgY29udGV4dCkKKwlpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHsKKworCQkvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJRAorCQl0b2tlbnMgPSBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKCAwICk7CisJCWlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRva2VuID0gdG9rZW5zWzBdKS50eXBlID09PSAiSUQiICYmCisJCQkJc3VwcG9ydC5nZXRCeUlkICYmIGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwgJiYKKwkJCQlFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkgeworCisJCQljb250ZXh0ID0gKCBFeHByLmZpbmRbIklEIl0oIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZShydW5lc2NhcGUsIGZ1bmVzY2FwZSksIGNvbnRleHQgKSB8fCBbXSApWzBdOworCQkJaWYgKCAhY29udGV4dCApIHsKKwkJCQlyZXR1cm4gcmVzdWx0czsKKworCQkJLy8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbAorCQkJfSBlbHNlIGlmICggY29tcGlsZWQgKSB7CisJCQkJY29udGV4dCA9IGNvbnRleHQucGFyZW50Tm9kZTsKKwkJCX0KKworCQkJc2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSggdG9rZW5zLnNoaWZ0KCkudmFsdWUubGVuZ3RoICk7CisJCX0KKworCQkvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nCisJCWkgPSBtYXRjaEV4cHJbIm5lZWRzQ29udGV4dCJdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDsKKwkJd2hpbGUgKCBpLS0gKSB7CisJCQl0b2tlbiA9IHRva2Vuc1tpXTsKKworCQkJLy8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvcgorCQkJaWYgKCBFeHByLnJlbGF0aXZlWyAodHlwZSA9IHRva2VuLnR5cGUpIF0gKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoIChmaW5kID0gRXhwci5maW5kWyB0eXBlIF0pICkgeworCQkJCS8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5hdG9ycworCQkJCWlmICggKHNlZWQgPSBmaW5kKAorCQkJCQl0b2tlbi5tYXRjaGVzWzBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksCisJCQkJCXJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHQKKwkJCQkpKSApIHsKKworCQkJCQkvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHkKKwkJCQkJdG9rZW5zLnNwbGljZSggaSwgMSApOworCQkJCQlzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApOworCQkJCQlpZiAoICFzZWxlY3RvciApIHsKKwkJCQkJCXB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTsKKwkJCQkJCXJldHVybiByZXN1bHRzOworCQkJCQl9CisKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLy8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkCisJLy8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZQorCSggY29tcGlsZWQgfHwgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkgKSgKKwkJc2VlZCwKKwkJY29udGV4dCwKKwkJIWRvY3VtZW50SXNIVE1MLAorCQlyZXN1bHRzLAorCQkhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0CisJKTsKKwlyZXR1cm4gcmVzdWx0czsKK307CisKKy8vIE9uZS10aW1lIGFzc2lnbm1lbnRzCisKKy8vIFNvcnQgc3RhYmlsaXR5CitzdXBwb3J0LnNvcnRTdGFibGUgPSBleHBhbmRvLnNwbGl0KCIiKS5zb3J0KCBzb3J0T3JkZXIgKS5qb2luKCIiKSA9PT0gZXhwYW5kbzsKKworLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1KworLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbgorc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7CisKKy8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudAorc2V0RG9jdW1lbnQoKTsKKworLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNykKKy8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKgorc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdjEgKSB7CisJLy8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpCisJcmV0dXJuIGRpdjEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpICkgJiAxOworfSk7CisKKy8vIFN1cHBvcnQ6IElFPDgKKy8vIFByZXZlbnQgYXR0cmlidXRlL3Byb3BlcnR5ICJpbnRlcnBvbGF0aW9uIgorLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweAoraWYgKCAhYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisJZGl2LmlubmVySFRNTCA9ICI8YSBocmVmPScjJz48L2E+IjsKKwlyZXR1cm4gZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikgPT09ICIjIiA7Cit9KSApIHsKKwlhZGRIYW5kbGUoICJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkgeworCQlpZiAoICFpc1hNTCApIHsKKwkJCXJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSAidHlwZSIgPyAxIDogMiApOworCQl9CisJfSk7Cit9CisKKy8vIFN1cHBvcnQ6IElFPDkKKy8vIFVzZSBkZWZhdWx0VmFsdWUgaW4gcGxhY2Ugb2YgZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpCitpZiAoICFzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWFzc2VydChmdW5jdGlvbiggZGl2ICkgeworCWRpdi5pbm5lckhUTUwgPSAiPGlucHV0Lz4iOworCWRpdi5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSggInZhbHVlIiwgIiIgKTsKKwlyZXR1cm4gZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCAidmFsdWUiICkgPT09ICIiOworfSkgKSB7CisJYWRkSGFuZGxlKCAidmFsdWUiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7CisJCWlmICggIWlzWE1MICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiApIHsKKwkJCXJldHVybiBlbGVtLmRlZmF1bHRWYWx1ZTsKKwkJfQorCX0pOworfQorCisvLyBTdXBwb3J0OiBJRTw5CisvLyBVc2UgZ2V0QXR0cmlidXRlTm9kZSB0byBmZXRjaCBib29sZWFucyB3aGVuIGdldEF0dHJpYnV0ZSBsaWVzCitpZiAoICFhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKKwlyZXR1cm4gZGl2LmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSA9PSBudWxsOworfSkgKSB7CisJYWRkSGFuZGxlKCBib29sZWFucywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkgeworCQl2YXIgdmFsOworCQlpZiAoICFpc1hNTCApIHsKKwkJCXJldHVybiBlbGVtWyBuYW1lIF0gPT09IHRydWUgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOgorCQkJCQkodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkpICYmIHZhbC5zcGVjaWZpZWQgPworCQkJCQl2YWwudmFsdWUgOgorCQkJCW51bGw7CisJCX0KKwl9KTsKK30KKworcmV0dXJuIFNpenpsZTsKKworfSkoIHdpbmRvdyApOworCisKKworalF1ZXJ5LmZpbmQgPSBTaXp6bGU7CitqUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7CitqUXVlcnkuZXhwclsgIjoiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zOworalF1ZXJ5LnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7CitqUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0OworalF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MOworalF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zOworCisKKwordmFyIGRpciA9IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkgeworCXZhciBtYXRjaGVkID0gW10sCisJCXRydW5jYXRlID0gdW50aWwgIT09IHVuZGVmaW5lZDsKKworCXdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkgeworCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisJCQlpZiAoIHRydW5jYXRlICYmIGpRdWVyeSggZWxlbSApLmlzKCB1bnRpbCApICkgeworCQkJCWJyZWFrOworCQkJfQorCQkJbWF0Y2hlZC5wdXNoKCBlbGVtICk7CisJCX0KKwl9CisJcmV0dXJuIG1hdGNoZWQ7Cit9OworCisKK3ZhciBzaWJsaW5ncyA9IGZ1bmN0aW9uKCBuLCBlbGVtICkgeworCXZhciBtYXRjaGVkID0gW107CisKKwlmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkgeworCQlpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHsKKwkJCW1hdGNoZWQucHVzaCggbiApOworCQl9CisJfQorCisJcmV0dXJuIG1hdGNoZWQ7Cit9OworCisKK3ZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0OworCit2YXIgcnNpbmdsZVRhZyA9ICggL148KFtcdy1dKylccypcLz8+KD86PFwvXDE+fCkkLyApOworCisKKwordmFyIHJpc1NpbXBsZSA9IC9eLlteOiNcW1wuLF0qJC87CisKKy8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90CitmdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHsKKwlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHsKKwkJcmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CisJCQkvKiBqc2hpbnQgLVcwMTggKi8KKwkJCXJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5vdDsKKwkJfSApOworCisJfQorCisJaWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7CisJCXJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworCQkJcmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgIT09IG5vdDsKKwkJfSApOworCisJfQorCisJaWYgKCB0eXBlb2YgcXVhbGlmaWVyID09PSAic3RyaW5nIiApIHsKKwkJaWYgKCByaXNTaW1wbGUudGVzdCggcXVhbGlmaWVyICkgKSB7CisJCQlyZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7CisJCX0KKworCQlxdWFsaWZpZXIgPSBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzICk7CisJfQorCisJcmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7CisJCXJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSApICE9PSBub3Q7CisJfSApOworfQorCitqUXVlcnkuZmlsdGVyID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7CisJdmFyIGVsZW0gPSBlbGVtc1sgMCBdOworCisJaWYgKCBub3QgKSB7CisJCWV4cHIgPSAiOm5vdCgiICsgZXhwciArICIpIjsKKwl9CisKKwlyZXR1cm4gZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgPworCQlqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW10gOgorCQlqUXVlcnkuZmluZC5tYXRjaGVzKCBleHByLCBqUXVlcnkuZ3JlcCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVtICkgeworCQkJcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7CisJCX0gKSApOworfTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCWZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKwkJdmFyIGksCisJCQlsZW4gPSB0aGlzLmxlbmd0aCwKKwkJCXJldCA9IFtdLAorCQkJc2VsZiA9IHRoaXM7CisKKwkJaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgeworCQkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHsKKwkJCQlmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkgeworCQkJCQlpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7CisJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJfQorCQkJCX0KKwkJCX0gKSApOworCQl9CisKKwkJZm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHsKKwkJCWpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTsKKwkJfQorCisJCS8vIE5lZWRlZCBiZWNhdXNlICQoIHNlbGVjdG9yLCBjb250ZXh0ICkgYmVjb21lcyAkKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKQorCQlyZXQgPSB0aGlzLnB1c2hTdGFjayggbGVuID4gMSA/IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0ICk7CisJCXJldC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgPyB0aGlzLnNlbGVjdG9yICsgIiAiICsgc2VsZWN0b3IgOiBzZWxlY3RvcjsKKwkJcmV0dXJuIHJldDsKKwl9LAorCWZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIGZhbHNlICkgKTsKKwl9LAorCW5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIHRydWUgKSApOworCX0sCisJaXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKwkJcmV0dXJuICEhd2lubm93KAorCQkJdGhpcywKKworCQkJLy8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldAorCQkJLy8gc28gJCgicDpmaXJzdCIpLmlzKCJwOmxhc3QiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gInAiLgorCQkJdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiAmJiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgPworCQkJCWpRdWVyeSggc2VsZWN0b3IgKSA6CisJCQkJc2VsZWN0b3IgfHwgW10sCisJCQlmYWxzZQorCQkpLmxlbmd0aDsKKwl9Cit9ICk7CisKKworLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3QKKworCisvLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudCkKK3ZhciByb290alF1ZXJ5LAorCisJLy8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3MKKwkvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpCisJLy8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKCMxMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpCisJcnF1aWNrRXhwciA9IC9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKikpJC8sCisKKwlpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7CisJCXZhciBtYXRjaCwgZWxlbTsKKworCQkvLyBIQU5ETEU6ICQoIiIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpCisJCWlmICggIXNlbGVjdG9yICkgeworCQkJcmV0dXJuIHRoaXM7CisJCX0KKworCQkvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnkKKwkJLy8gc28gbWlncmF0ZSBjYW4gc3VwcG9ydCBqUXVlcnkuc3ViIChnaC0yMTAxKQorCQlyb290ID0gcm9vdCB8fCByb290alF1ZXJ5OworCisJCS8vIEhhbmRsZSBIVE1MIHN0cmluZ3MKKwkJaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICkgeworCQkJaWYgKCBzZWxlY3RvclsgMCBdID09PSAiPCIgJiYKKwkJCQlzZWxlY3Rvclsgc2VsZWN0b3IubGVuZ3RoIC0gMSBdID09PSAiPiIgJiYKKwkJCQlzZWxlY3Rvci5sZW5ndGggPj0gMyApIHsKKworCQkJCS8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrCisJCQkJbWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07CisKKwkJCX0gZWxzZSB7CisJCQkJbWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7CisJCQl9CisKKwkJCS8vIE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWQKKwkJCWlmICggbWF0Y2ggJiYgKCBtYXRjaFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7CisKKwkJCQkvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSkKKwkJCQlpZiAoIG1hdGNoWyAxIF0gKSB7CisJCQkJCWNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFsgMCBdIDogY29udGV4dDsKKworCQkJCQkvLyBPcHRpb24gdG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXQKKwkJCQkJLy8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwgaXMgbm90IHByZXNlbnQKKwkJCQkJalF1ZXJ5Lm1lcmdlKCB0aGlzLCBqUXVlcnkucGFyc2VIVE1MKAorCQkJCQkJbWF0Y2hbIDEgXSwKKwkJCQkJCWNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQsCisJCQkJCQl0cnVlCisJCQkJCSkgKTsKKworCQkJCQkvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpCisJCQkJCWlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsgMSBdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHsKKwkJCQkJCWZvciAoIG1hdGNoIGluIGNvbnRleHQgKSB7CisKKwkJCQkJCQkvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlCisJCQkJCQkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkgeworCQkJCQkJCQl0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7CisKKwkJCQkJCQkvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzCisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJdGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCXJldHVybiB0aGlzOworCisJCQkJLy8gSEFORExFOiAkKCNpZCkKKwkJCQl9IGVsc2UgeworCQkJCQllbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTsKKworCQkJCQkvLyBTdXBwb3J0OiBCbGFja2JlcnJ5IDQuNgorCQkJCQkvLyBnRUJJRCByZXR1cm5zIG5vZGVzIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgKCM2OTYzKQorCQkJCQlpZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2RlICkgeworCisJCQkJCQkvLyBJbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdAorCQkJCQkJdGhpcy5sZW5ndGggPSAxOworCQkJCQkJdGhpc1sgMCBdID0gZWxlbTsKKwkJCQkJfQorCisJCQkJCXRoaXMuY29udGV4dCA9IGRvY3VtZW50OworCQkJCQl0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7CisJCQkJCXJldHVybiB0aGlzOworCQkJCX0KKworCQkJLy8gSEFORExFOiAkKGV4cHIsICQoLi4uKSkKKwkJCX0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkgeworCQkJCXJldHVybiAoIGNvbnRleHQgfHwgcm9vdCApLmZpbmQoIHNlbGVjdG9yICk7CisKKwkJCS8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KQorCQkJLy8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpCisJCQl9IGVsc2UgeworCQkJCXJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTsKKwkJCX0KKworCQkvLyBIQU5ETEU6ICQoRE9NRWxlbWVudCkKKwkJfSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7CisJCQl0aGlzLmNvbnRleHQgPSB0aGlzWyAwIF0gPSBzZWxlY3RvcjsKKwkJCXRoaXMubGVuZ3RoID0gMTsKKwkJCXJldHVybiB0aGlzOworCisJCS8vIEhBTkRMRTogJChmdW5jdGlvbikKKwkJLy8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5CisJCX0gZWxzZSBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBzZWxlY3RvciApICkgeworCQkJcmV0dXJuIHJvb3QucmVhZHkgIT09IHVuZGVmaW5lZCA/CisJCQkJcm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6CisKKwkJCQkvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50CisJCQkJc2VsZWN0b3IoIGpRdWVyeSApOworCQl9CisKKwkJaWYgKCBzZWxlY3Rvci5zZWxlY3RvciAhPT0gdW5kZWZpbmVkICkgeworCQkJdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yLnNlbGVjdG9yOworCQkJdGhpcy5jb250ZXh0ID0gc2VsZWN0b3IuY29udGV4dDsKKwkJfQorCisJCXJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApOworCX07CisKKy8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb24KK2luaXQucHJvdG90eXBlID0galF1ZXJ5LmZuOworCisvLyBJbml0aWFsaXplIGNlbnRyYWwgcmVmZXJlbmNlCityb290alF1ZXJ5ID0galF1ZXJ5KCBkb2N1bWVudCApOworCisKK3ZhciBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLywKKworCS8vIE1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0CisJZ3VhcmFudGVlZFVuaXF1ZSA9IHsKKwkJY2hpbGRyZW46IHRydWUsCisJCWNvbnRlbnRzOiB0cnVlLAorCQluZXh0OiB0cnVlLAorCQlwcmV2OiB0cnVlCisJfTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCWhhczogZnVuY3Rpb24oIHRhcmdldCApIHsKKwkJdmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCwgdGhpcyApLAorCQkJbCA9IHRhcmdldHMubGVuZ3RoOworCisJCXJldHVybiB0aGlzLmZpbHRlciggZnVuY3Rpb24oKSB7CisJCQl2YXIgaSA9IDA7CisJCQlmb3IgKCA7IGkgPCBsOyBpKysgKSB7CisJCQkJaWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbIGkgXSApICkgeworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCX0gKTsKKwl9LAorCisJY2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHsKKwkJdmFyIGN1ciwKKwkJCWkgPSAwLAorCQkJbCA9IHRoaXMubGVuZ3RoLAorCQkJbWF0Y2hlZCA9IFtdLAorCQkJcG9zID0gcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSB8fCB0eXBlb2Ygc2VsZWN0b3JzICE9PSAic3RyaW5nIiA/CisJCQkJalF1ZXJ5KCBzZWxlY3RvcnMsIGNvbnRleHQgfHwgdGhpcy5jb250ZXh0ICkgOgorCQkJCTA7CisKKwkJZm9yICggOyBpIDwgbDsgaSsrICkgeworCQkJZm9yICggY3VyID0gdGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHsKKworCQkJCS8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZyYWdtZW50cworCQkJCWlmICggY3VyLm5vZGVUeXBlIDwgMTEgJiYgKCBwb3MgPworCQkJCQlwb3MuaW5kZXgoIGN1ciApID4gLTEgOgorCisJCQkJCS8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIFNpenpsZQorCQkJCQljdXIubm9kZVR5cGUgPT09IDEgJiYKKwkJCQkJCWpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkgeworCisJCQkJCW1hdGNoZWQucHVzaCggY3VyICk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKSA6IG1hdGNoZWQgKTsKKwl9LAorCisJLy8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiB0aGUgc2V0CisJaW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkgeworCisJCS8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXggaW4gcGFyZW50CisJCWlmICggIWVsZW0gKSB7CisJCQlyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7CisJCX0KKworCQkvLyBJbmRleCBpbiBzZWxlY3RvcgorCQlpZiAoIHR5cGVvZiBlbGVtID09PSAic3RyaW5nIiApIHsKKwkJCXJldHVybiBpbmRleE9mLmNhbGwoIGpRdWVyeSggZWxlbSApLCB0aGlzWyAwIF0gKTsKKwkJfQorCisJCS8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudAorCQlyZXR1cm4gaW5kZXhPZi5jYWxsKCB0aGlzLAorCisJCQkvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWQKKwkJCWVsZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxlbQorCQkpOworCX0sCisKKwlhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsKKwkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKAorCQkJalF1ZXJ5LnVuaXF1ZVNvcnQoCisJCQkJalF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKQorCQkJKQorCQkpOworCX0sCisKKwlhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisJCXJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/CisJCQl0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApCisJCSk7CisJfQorfSApOworCitmdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHsKKwl3aGlsZSAoICggY3VyID0gY3VyWyBkaXIgXSApICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApIHt9CisJcmV0dXJuIGN1cjsKK30KKworalF1ZXJ5LmVhY2goIHsKKwlwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkgeworCQl2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOworCQlyZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsOworCX0sCisJcGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7CisJCXJldHVybiBkaXIoIGVsZW0sICJwYXJlbnROb2RlIiApOworCX0sCisJcGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7CisJCXJldHVybiBkaXIoIGVsZW0sICJwYXJlbnROb2RlIiwgdW50aWwgKTsKKwl9LAorCW5leHQ6IGZ1bmN0aW9uKCBlbGVtICkgeworCQlyZXR1cm4gc2libGluZyggZWxlbSwgIm5leHRTaWJsaW5nIiApOworCX0sCisJcHJldjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCXJldHVybiBzaWJsaW5nKCBlbGVtLCAicHJldmlvdXNTaWJsaW5nIiApOworCX0sCisJbmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7CisJCXJldHVybiBkaXIoIGVsZW0sICJuZXh0U2libGluZyIgKTsKKwl9LAorCXByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkgeworCQlyZXR1cm4gZGlyKCBlbGVtLCAicHJldmlvdXNTaWJsaW5nIiApOworCX0sCisJbmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7CisJCXJldHVybiBkaXIoIGVsZW0sICJuZXh0U2libGluZyIsIHVudGlsICk7CisJfSwKKwlwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKKwkJcmV0dXJuIGRpciggZWxlbSwgInByZXZpb3VzU2libGluZyIsIHVudGlsICk7CisJfSwKKwlzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7CisJCXJldHVybiBzaWJsaW5ncyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7CisJfSwKKwljaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCXJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7CisJfSwKKwljb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7CisJCXJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudCB8fCBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTsKKwl9Cit9LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7CisJalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkgeworCQl2YXIgbWF0Y2hlZCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1bnRpbCApOworCisJCWlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gIlVudGlsIiApIHsKKwkJCXNlbGVjdG9yID0gdW50aWw7CisJCX0KKworCQlpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CisJCQltYXRjaGVkID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIG1hdGNoZWQgKTsKKwkJfQorCisJCWlmICggdGhpcy5sZW5ndGggPiAxICkgeworCisJCQkvLyBSZW1vdmUgZHVwbGljYXRlcworCQkJaWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkgeworCQkJCWpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICk7CisJCQl9CisKKwkJCS8vIFJldmVyc2Ugb3JkZXIgZm9yIHBhcmVudHMqIGFuZCBwcmV2LWRlcml2YXRpdmVzCisJCQlpZiAoIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7CisJCQkJbWF0Y2hlZC5yZXZlcnNlKCk7CisJCQl9CisJCX0KKworCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTsKKwl9OworfSApOwordmFyIHJub3R3aGl0ZSA9ICggL1xTKy9nICk7CisKKworCisvLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lcworZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHsKKwl2YXIgb2JqZWN0ID0ge307CisJalF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyApIHsKKwkJb2JqZWN0WyBmbGFnIF0gPSB0cnVlOworCX0gKTsKKwlyZXR1cm4gb2JqZWN0OworfQorCisvKgorICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisgKgorICoJb3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhvdworICoJCQl0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzIG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0CisgKgorICogQnkgZGVmYXVsdCBhIGNhbGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBjYW4gYmUKKyAqICJmaXJlZCIgbXVsdGlwbGUgdGltZXMuCisgKgorICogUG9zc2libGUgb3B0aW9uczoKKyAqCisgKglvbmNlOgkJCXdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZCkKKyAqCisgKgltZW1vcnk6CQkJd2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZAorICoJCQkJCWFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0ICJtZW1vcml6ZWQiCisgKgkJCQkJdmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpCisgKgorICoJdW5pcXVlOgkJCXdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KQorICoKKyAqCXN0b3BPbkZhbHNlOglpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2UKKyAqCisgKi8KK2pRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHsKKworCS8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWQKKwkvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpCisJb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSAic3RyaW5nIiA/CisJCWNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6CisJCWpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7CisKKwl2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZworCQlmaXJpbmcsCisKKwkJLy8gTGFzdCBmaXJlIHZhbHVlIGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHMKKwkJbWVtb3J5LAorCisJCS8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkCisJCWZpcmVkLAorCisJCS8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmcKKwkJbG9ja2VkLAorCisJCS8vIEFjdHVhbCBjYWxsYmFjayBsaXN0CisJCWxpc3QgPSBbXSwKKworCQkvLyBRdWV1ZSBvZiBleGVjdXRpb24gZGF0YSBmb3IgcmVwZWF0YWJsZSBsaXN0cworCQlxdWV1ZSA9IFtdLAorCisJCS8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKQorCQlmaXJpbmdJbmRleCA9IC0xLAorCisJCS8vIEZpcmUgY2FsbGJhY2tzCisJCWZpcmUgPSBmdW5jdGlvbigpIHsKKworCQkJLy8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nCisJCQlsb2NrZWQgPSBvcHRpb25zLm9uY2U7CisKKwkJCS8vIEV4ZWN1dGUgY2FsbGJhY2tzIGZvciBhbGwgcGVuZGluZyBleGVjdXRpb25zLAorCQkJLy8gcmVzcGVjdGluZyBmaXJpbmdJbmRleCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUgY2hhbmdlcworCQkJZmlyZWQgPSBmaXJpbmcgPSB0cnVlOworCQkJZm9yICggOyBxdWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4ID0gLTEgKSB7CisJCQkJbWVtb3J5ID0gcXVldWUuc2hpZnQoKTsKKwkJCQl3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHsKKworCQkJCQkvLyBSdW4gY2FsbGJhY2sgYW5kIGNoZWNrIGZvciBlYXJseSB0ZXJtaW5hdGlvbgorCQkJCQlpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAmJgorCQkJCQkJb3B0aW9ucy5zdG9wT25GYWxzZSApIHsKKworCQkJCQkJLy8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZQorCQkJCQkJZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aDsKKwkJCQkJCW1lbW9yeSA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQkvLyBGb3JnZXQgdGhlIGRhdGEgaWYgd2UncmUgZG9uZSB3aXRoIGl0CisJCQlpZiAoICFvcHRpb25zLm1lbW9yeSApIHsKKwkJCQltZW1vcnkgPSBmYWxzZTsKKwkJCX0KKworCQkJZmlyaW5nID0gZmFsc2U7CisKKwkJCS8vIENsZWFuIHVwIGlmIHdlJ3JlIGRvbmUgZmlyaW5nIGZvciBnb29kCisJCQlpZiAoIGxvY2tlZCApIHsKKworCQkJCS8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHMKKwkJCQlpZiAoIG1lbW9yeSApIHsKKwkJCQkJbGlzdCA9IFtdOworCisJCQkJLy8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVudAorCQkJCX0gZWxzZSB7CisJCQkJCWxpc3QgPSAiIjsKKwkJCQl9CisJCQl9CisJCX0sCisKKwkJLy8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3QKKwkJc2VsZiA9IHsKKworCQkJLy8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdAorCQkJYWRkOiBmdW5jdGlvbigpIHsKKwkJCQlpZiAoIGxpc3QgKSB7CisKKwkJCQkJLy8gSWYgd2UgaGF2ZSBtZW1vcnkgZnJvbSBhIHBhc3QgcnVuLCB3ZSBzaG91bGQgZmlyZSBhZnRlciBhZGRpbmcKKwkJCQkJaWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHsKKwkJCQkJCWZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxOworCQkJCQkJcXVldWUucHVzaCggbWVtb3J5ICk7CisJCQkJCX0KKworCQkJCQkoIGZ1bmN0aW9uIGFkZCggYXJncyApIHsKKwkJCQkJCWpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkgeworCQkJCQkJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGFyZyApICkgeworCQkJCQkJCQlpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkgeworCQkJCQkJCQkJbGlzdC5wdXNoKCBhcmcgKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIGpRdWVyeS50eXBlKCBhcmcgKSAhPT0gInN0cmluZyIgKSB7CisKKwkJCQkJCQkJLy8gSW5zcGVjdCByZWN1cnNpdmVseQorCQkJCQkJCQlhZGQoIGFyZyApOworCQkJCQkJCX0KKwkJCQkJCX0gKTsKKwkJCQkJfSApKCBhcmd1bWVudHMgKTsKKworCQkJCQlpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkgeworCQkJCQkJZmlyZSgpOworCQkJCQl9CisJCQkJfQorCQkJCXJldHVybiB0aGlzOworCQkJfSwKKworCQkJLy8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdAorCQkJcmVtb3ZlOiBmdW5jdGlvbigpIHsKKwkJCQlqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkgeworCQkJCQl2YXIgaW5kZXg7CisJCQkJCXdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkgeworCQkJCQkJbGlzdC5zcGxpY2UoIGluZGV4LCAxICk7CisKKwkJCQkJCS8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlcworCQkJCQkJaWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHsKKwkJCQkJCQlmaXJpbmdJbmRleC0tOworCQkJCQkJfQorCQkJCQl9CisJCQkJfSApOworCQkJCXJldHVybiB0aGlzOworCQkJfSwKKworCQkJLy8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC4KKwkJCS8vIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLgorCQkJaGFzOiBmdW5jdGlvbiggZm4gKSB7CisJCQkJcmV0dXJuIGZuID8KKwkJCQkJalF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6CisJCQkJCWxpc3QubGVuZ3RoID4gMDsKKwkJCX0sCisKKwkJCS8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3QKKwkJCWVtcHR5OiBmdW5jdGlvbigpIHsKKwkJCQlpZiAoIGxpc3QgKSB7CisJCQkJCWxpc3QgPSBbXTsKKwkJCQl9CisJCQkJcmV0dXJuIHRoaXM7CisJCQl9LAorCisJCQkvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkCisJCQkvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnMKKwkJCS8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlcworCQkJZGlzYWJsZTogZnVuY3Rpb24oKSB7CisJCQkJbG9ja2VkID0gcXVldWUgPSBbXTsKKwkJCQlsaXN0ID0gbWVtb3J5ID0gIiI7CisJCQkJcmV0dXJuIHRoaXM7CisJCQl9LAorCQkJZGlzYWJsZWQ6IGZ1bmN0aW9uKCkgeworCQkJCXJldHVybiAhbGlzdDsKKwkJCX0sCisKKwkJCS8vIERpc2FibGUgLmZpcmUKKwkJCS8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpCisJCQkvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zCisJCQlsb2NrOiBmdW5jdGlvbigpIHsKKwkJCQlsb2NrZWQgPSBxdWV1ZSA9IFtdOworCQkJCWlmICggIW1lbW9yeSApIHsKKwkJCQkJbGlzdCA9IG1lbW9yeSA9ICIiOworCQkJCX0KKwkJCQlyZXR1cm4gdGhpczsKKwkJCX0sCisJCQlsb2NrZWQ6IGZ1bmN0aW9uKCkgeworCQkJCXJldHVybiAhIWxvY2tlZDsKKwkJCX0sCisKKwkJCS8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHMKKwkJCWZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHsKKwkJCQlpZiAoICFsb2NrZWQgKSB7CisJCQkJCWFyZ3MgPSBhcmdzIHx8IFtdOworCQkJCQlhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNsaWNlID8gYXJncy5zbGljZSgpIDogYXJncyBdOworCQkJCQlxdWV1ZS5wdXNoKCBhcmdzICk7CisJCQkJCWlmICggIWZpcmluZyApIHsKKwkJCQkJCWZpcmUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlyZXR1cm4gdGhpczsKKwkJCX0sCisKKwkJCS8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzCisJCQlmaXJlOiBmdW5jdGlvbigpIHsKKwkJCQlzZWxmLmZpcmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTsKKwkJCQlyZXR1cm4gdGhpczsKKwkJCX0sCisKKwkJCS8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZQorCQkJZmlyZWQ6IGZ1bmN0aW9uKCkgeworCQkJCXJldHVybiAhIWZpcmVkOworCQkJfQorCQl9OworCisJcmV0dXJuIHNlbGY7Cit9OworCisKK2pRdWVyeS5leHRlbmQoIHsKKworCURlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHsKKwkJdmFyIHR1cGxlcyA9IFsKKworCQkJCS8vIGFjdGlvbiwgYWRkIGxpc3RlbmVyLCBsaXN0ZW5lciBsaXN0LCBmaW5hbCBzdGF0ZQorCQkJCVsgInJlc29sdmUiLCAiZG9uZSIsIGpRdWVyeS5DYWxsYmFja3MoICJvbmNlIG1lbW9yeSIgKSwgInJlc29sdmVkIiBdLAorCQkJCVsgInJlamVjdCIsICJmYWlsIiwgalF1ZXJ5LkNhbGxiYWNrcyggIm9uY2UgbWVtb3J5IiApLCAicmVqZWN0ZWQiIF0sCisJCQkJWyAibm90aWZ5IiwgInByb2dyZXNzIiwgalF1ZXJ5LkNhbGxiYWNrcyggIm1lbW9yeSIgKSBdCisJCQldLAorCQkJc3RhdGUgPSAicGVuZGluZyIsCisJCQlwcm9taXNlID0geworCQkJCXN0YXRlOiBmdW5jdGlvbigpIHsKKwkJCQkJcmV0dXJuIHN0YXRlOworCQkJCX0sCisJCQkJYWx3YXlzOiBmdW5jdGlvbigpIHsKKwkJCQkJZGVmZXJyZWQuZG9uZSggYXJndW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7CisJCQkJCXJldHVybiB0aGlzOworCQkJCX0sCisJCQkJdGhlbjogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkgeworCQkJCQl2YXIgZm5zID0gYXJndW1lbnRzOworCQkJCQlyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7CisJCQkJCQlqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7CisJCQkJCQkJdmFyIGZuID0galF1ZXJ5LmlzRnVuY3Rpb24oIGZuc1sgaSBdICkgJiYgZm5zWyBpIF07CisKKwkJCQkJCQkvLyBkZWZlcnJlZFsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBdIGZvciBmb3J3YXJkaW5nIGFjdGlvbnMgdG8gbmV3RGVmZXIKKwkJCQkJCQlkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHsKKwkJCQkJCQkJdmFyIHJldHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworCQkJCQkJCQlpZiAoIHJldHVybmVkICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7CisJCQkJCQkJCQlyZXR1cm5lZC5wcm9taXNlKCkKKwkJCQkJCQkJCQkucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApCisJCQkJCQkJCQkJLmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKQorCQkJCQkJCQkJCS5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTsKKwkJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJCW5ld0RlZmVyWyB0dXBsZVsgMCBdICsgIldpdGgiIF0oCisJCQkJCQkJCQkJdGhpcyA9PT0gcHJvbWlzZSA/IG5ld0RlZmVyLnByb21pc2UoKSA6IHRoaXMsCisJCQkJCQkJCQkJZm4gPyBbIHJldHVybmVkIF0gOiBhcmd1bWVudHMKKwkJCQkJCQkJCSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9ICk7CisJCQkJCQl9ICk7CisJCQkJCQlmbnMgPSBudWxsOworCQkJCQl9ICkucHJvbWlzZSgpOworCQkJCX0sCisKKwkJCQkvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkCisJCQkJLy8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdAorCQkJCXByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7CisJCQkJCXJldHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJvbWlzZTsKKwkJCQl9CisJCQl9LAorCQkJZGVmZXJyZWQgPSB7fTsKKworCQkvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0CisJCXByb21pc2UucGlwZSA9IHByb21pc2UudGhlbjsKKworCQkvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzCisJCWpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHsKKwkJCXZhciBsaXN0ID0gdHVwbGVbIDIgXSwKKwkJCQlzdGF0ZVN0cmluZyA9IHR1cGxlWyAzIF07CisKKwkJCS8vIHByb21pc2VbIGRvbmUgfCBmYWlsIHwgcHJvZ3Jlc3MgXSA9IGxpc3QuYWRkCisJCQlwcm9taXNlWyB0dXBsZVsgMSBdIF0gPSBsaXN0LmFkZDsKKworCQkJLy8gSGFuZGxlIHN0YXRlCisJCQlpZiAoIHN0YXRlU3RyaW5nICkgeworCQkJCWxpc3QuYWRkKCBmdW5jdGlvbigpIHsKKworCQkJCQkvLyBzdGF0ZSA9IFsgcmVzb2x2ZWQgfCByZWplY3RlZCBdCisJCQkJCXN0YXRlID0gc3RhdGVTdHJpbmc7CisKKwkJCQkvLyBbIHJlamVjdF9saXN0IHwgcmVzb2x2ZV9saXN0IF0uZGlzYWJsZTsgcHJvZ3Jlc3NfbGlzdC5sb2NrCisJCQkJfSwgdHVwbGVzWyBpIF4gMSBdWyAyIF0uZGlzYWJsZSwgdHVwbGVzWyAyIF1bIDIgXS5sb2NrICk7CisJCQl9CisKKwkJCS8vIGRlZmVycmVkWyByZXNvbHZlIHwgcmVqZWN0IHwgbm90aWZ5IF0KKwkJCWRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHsKKwkJCQlkZWZlcnJlZFsgdHVwbGVbIDAgXSArICJXaXRoIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHByb21pc2UgOiB0aGlzLCBhcmd1bWVudHMgKTsKKwkJCQlyZXR1cm4gdGhpczsKKwkJCX07CisJCQlkZWZlcnJlZFsgdHVwbGVbIDAgXSArICJXaXRoIiBdID0gbGlzdC5maXJlV2l0aDsKKwkJfSApOworCisJCS8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZQorCQlwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7CisKKwkJLy8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueQorCQlpZiAoIGZ1bmMgKSB7CisJCQlmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApOworCQl9CisKKwkJLy8gQWxsIGRvbmUhCisJCXJldHVybiBkZWZlcnJlZDsKKwl9LAorCisJLy8gRGVmZXJyZWQgaGVscGVyCisJd2hlbjogZnVuY3Rpb24oIHN1Ym9yZGluYXRlIC8qICwgLi4uLCBzdWJvcmRpbmF0ZU4gKi8gKSB7CisJCXZhciBpID0gMCwKKwkJCXJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSwKKwkJCWxlbmd0aCA9IHJlc29sdmVWYWx1ZXMubGVuZ3RoLAorCisJCQkvLyB0aGUgY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzCisJCQlyZW1haW5pbmcgPSBsZW5ndGggIT09IDEgfHwKKwkJCQkoIHN1Ym9yZGluYXRlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBzdWJvcmRpbmF0ZS5wcm9taXNlICkgKSA/IGxlbmd0aCA6IDAsCisKKwkJCS8vIHRoZSBtYXN0ZXIgRGVmZXJyZWQuCisJCQkvLyBJZiByZXNvbHZlVmFsdWVzIGNvbnNpc3Qgb2Ygb25seSBhIHNpbmdsZSBEZWZlcnJlZCwganVzdCB1c2UgdGhhdC4KKwkJCWRlZmVycmVkID0gcmVtYWluaW5nID09PSAxID8gc3Vib3JkaW5hdGUgOiBqUXVlcnkuRGVmZXJyZWQoKSwKKworCQkJLy8gVXBkYXRlIGZ1bmN0aW9uIGZvciBib3RoIHJlc29sdmUgYW5kIHByb2dyZXNzIHZhbHVlcworCQkJdXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBpLCBjb250ZXh0cywgdmFsdWVzICkgeworCQkJCXJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7CisJCQkJCWNvbnRleHRzWyBpIF0gPSB0aGlzOworCQkJCQl2YWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTsKKwkJCQkJaWYgKCB2YWx1ZXMgPT09IHByb2dyZXNzVmFsdWVzICkgeworCQkJCQkJZGVmZXJyZWQubm90aWZ5V2l0aCggY29udGV4dHMsIHZhbHVlcyApOworCQkJCQl9IGVsc2UgaWYgKCAhKCAtLXJlbWFpbmluZyApICkgeworCQkJCQkJZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTsKKwkJCQkJfQorCQkJCX07CisJCQl9LAorCisJCQlwcm9ncmVzc1ZhbHVlcywgcHJvZ3Jlc3NDb250ZXh0cywgcmVzb2x2ZUNvbnRleHRzOworCisJCS8vIEFkZCBsaXN0ZW5lcnMgdG8gRGVmZXJyZWQgc3Vib3JkaW5hdGVzOyB0cmVhdCBvdGhlcnMgYXMgcmVzb2x2ZWQKKwkJaWYgKCBsZW5ndGggPiAxICkgeworCQkJcHJvZ3Jlc3NWYWx1ZXMgPSBuZXcgQXJyYXkoIGxlbmd0aCApOworCQkJcHJvZ3Jlc3NDb250ZXh0cyA9IG5ldyBBcnJheSggbGVuZ3RoICk7CisJCQlyZXNvbHZlQ29udGV4dHMgPSBuZXcgQXJyYXkoIGxlbmd0aCApOworCQkJZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisJCQkJaWYgKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJlc29sdmVWYWx1ZXNbIGkgXS5wcm9taXNlICkgKSB7CisJCQkJCXJlc29sdmVWYWx1ZXNbIGkgXS5wcm9taXNlKCkKKwkJCQkJCS5wcm9ncmVzcyggdXBkYXRlRnVuYyggaSwgcHJvZ3Jlc3NDb250ZXh0cywgcHJvZ3Jlc3NWYWx1ZXMgKSApCisJCQkJCQkuZG9uZSggdXBkYXRlRnVuYyggaSwgcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICkgKQorCQkJCQkJLmZhaWwoIGRlZmVycmVkLnJlamVjdCApOworCQkJCX0gZWxzZSB7CisJCQkJCS0tcmVtYWluaW5nOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8vIElmIHdlJ3JlIG5vdCB3YWl0aW5nIG9uIGFueXRoaW5nLCByZXNvbHZlIHRoZSBtYXN0ZXIKKwkJaWYgKCAhcmVtYWluaW5nICkgeworCQkJZGVmZXJyZWQucmVzb2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApOworCQl9CisKKwkJcmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTsKKwl9Cit9ICk7CisKKworLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5Cit2YXIgcmVhZHlMaXN0OworCitqUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlvbiggZm4gKSB7CisKKwkvLyBBZGQgdGhlIGNhbGxiYWNrCisJalF1ZXJ5LnJlYWR5LnByb21pc2UoKS5kb25lKCBmbiApOworCisJcmV0dXJuIHRoaXM7Cit9OworCitqUXVlcnkuZXh0ZW5kKCB7CisKKwkvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLgorCWlzUmVhZHk6IGZhbHNlLAorCisJLy8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZQorCS8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxCisJcmVhZHlXYWl0OiAxLAorCisJLy8gSG9sZCAob3IgcmVsZWFzZSkgdGhlIHJlYWR5IGV2ZW50CisJaG9sZFJlYWR5OiBmdW5jdGlvbiggaG9sZCApIHsKKwkJaWYgKCBob2xkICkgeworCQkJalF1ZXJ5LnJlYWR5V2FpdCsrOworCQl9IGVsc2UgeworCQkJalF1ZXJ5LnJlYWR5KCB0cnVlICk7CisJCX0KKwl9LAorCisJLy8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeQorCXJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHsKKworCQkvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5CisJCWlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkgeworCQkJcmV0dXJuOworCQl9CisKKwkJLy8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5CisJCWpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTsKKworCQkvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZQorCQlpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHsKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGUKKwkJcmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApOworCisJCS8vIFRyaWdnZXIgYW55IGJvdW5kIHJlYWR5IGV2ZW50cworCQlpZiAoIGpRdWVyeS5mbi50cmlnZ2VySGFuZGxlciApIHsKKwkJCWpRdWVyeSggZG9jdW1lbnQgKS50cmlnZ2VySGFuZGxlciggInJlYWR5IiApOworCQkJalF1ZXJ5KCBkb2N1bWVudCApLm9mZiggInJlYWR5IiApOworCQl9CisJfQorfSApOworCisvKioKKyAqIFRoZSByZWFkeSBldmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kCisgKi8KK2Z1bmN0aW9uIGNvbXBsZXRlZCgpIHsKKwlkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIGNvbXBsZXRlZCApOworCXdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCAibG9hZCIsIGNvbXBsZXRlZCApOworCWpRdWVyeS5yZWFkeSgpOworfQorCitqUXVlcnkucmVhZHkucHJvbWlzZSA9IGZ1bmN0aW9uKCBvYmogKSB7CisJaWYgKCAhcmVhZHlMaXN0ICkgeworCisJCXJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpOworCisJCS8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkCisJCS8vIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLgorCQkvLyBTdXBwb3J0OiBJRTktMTAgb25seQorCQkvLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyAiaW50ZXJhY3RpdmUiIHRvbyBzb29uCisJCWlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIiB8fAorCQkJKCBkb2N1bWVudC5yZWFkeVN0YXRlICE9PSAibG9hZGluZyIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCApICkgeworCisJCQkvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHkKKwkJCXdpbmRvdy5zZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTsKKworCQl9IGVsc2UgeworCisJCQkvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrCisJCQlkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIGNvbXBsZXRlZCApOworCisJCQkvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29yaworCQkJd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICJsb2FkIiwgY29tcGxldGVkICk7CisJCX0KKwl9CisJcmV0dXJuIHJlYWR5TGlzdC5wcm9taXNlKCBvYmogKTsKK307CisKKy8vIEtpY2sgb2ZmIHRoZSBET00gcmVhZHkgY2hlY2sgZXZlbiBpZiB0aGUgdXNlciBkb2VzIG5vdAoralF1ZXJ5LnJlYWR5LnByb21pc2UoKTsKKworCisKKworLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBjb2xsZWN0aW9uCisvLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb24KK3ZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7CisJdmFyIGkgPSAwLAorCQlsZW4gPSBlbGVtcy5sZW5ndGgsCisJCWJ1bGsgPSBrZXkgPT0gbnVsbDsKKworCS8vIFNldHMgbWFueSB2YWx1ZXMKKwlpZiAoIGpRdWVyeS50eXBlKCBrZXkgKSA9PT0gIm9iamVjdCIgKSB7CisJCWNoYWluYWJsZSA9IHRydWU7CisJCWZvciAoIGkgaW4ga2V5ICkgeworCQkJYWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVsgaSBdLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7CisJCX0KKworCS8vIFNldHMgb25lIHZhbHVlCisJfSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKKwkJY2hhaW5hYmxlID0gdHJ1ZTsKKworCQlpZiAoICFqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKKwkJCXJhdyA9IHRydWU7CisJCX0KKworCQlpZiAoIGJ1bGsgKSB7CisKKwkJCS8vIEJ1bGsgb3BlcmF0aW9ucyBydW4gYWdhaW5zdCB0aGUgZW50aXJlIHNldAorCQkJaWYgKCByYXcgKSB7CisJCQkJZm4uY2FsbCggZWxlbXMsIHZhbHVlICk7CisJCQkJZm4gPSBudWxsOworCisJCQkvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzCisJCQl9IGVsc2UgeworCQkJCWJ1bGsgPSBmbjsKKwkJCQlmbiA9IGZ1bmN0aW9uKCBlbGVtLCBrZXksIHZhbHVlICkgeworCQkJCQlyZXR1cm4gYnVsay5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTsKKwkJCQl9OworCQkJfQorCQl9CisKKwkJaWYgKCBmbiApIHsKKwkJCWZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworCQkJCWZuKAorCQkJCQllbGVtc1sgaSBdLCBrZXksIHJhdyA/CisJCQkJCXZhbHVlIDoKKwkJCQkJdmFsdWUuY2FsbCggZWxlbXNbIGkgXSwgaSwgZm4oIGVsZW1zWyBpIF0sIGtleSApICkKKwkJCQkpOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIGNoYWluYWJsZSA/CisJCWVsZW1zIDoKKworCQkvLyBHZXRzCisJCWJ1bGsgPworCQkJZm4uY2FsbCggZWxlbXMgKSA6CisJCQlsZW4gPyBmbiggZWxlbXNbIDAgXSwga2V5ICkgOiBlbXB0eUdldDsKK307Cit2YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHsKKworCS8vIEFjY2VwdHMgb25seToKKwkvLyAgLSBOb2RlCisJLy8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERQorCS8vICAgIC0gTm9kZS5ET0NVTUVOVF9OT0RFCisJLy8gIC0gT2JqZWN0CisJLy8gICAgLSBBbnkKKwkvKiBqc2hpbnQgLVcwMTggKi8KKwlyZXR1cm4gb3duZXIubm9kZVR5cGUgPT09IDEgfHwgb3duZXIubm9kZVR5cGUgPT09IDkgfHwgISggK293bmVyLm5vZGVUeXBlICk7Cit9OworCisKKworCitmdW5jdGlvbiBEYXRhKCkgeworCXRoaXMuZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRvICsgRGF0YS51aWQrKzsKK30KKworRGF0YS51aWQgPSAxOworCitEYXRhLnByb3RvdHlwZSA9IHsKKworCXJlZ2lzdGVyOiBmdW5jdGlvbiggb3duZXIsIGluaXRpYWwgKSB7CisJCXZhciB2YWx1ZSA9IGluaXRpYWwgfHwge307CisKKwkJLy8gSWYgaXQgaXMgYSBub2RlIHVubGlrZWx5IHRvIGJlIHN0cmluZ2lmeS1lZCBvciBsb29wZWQgb3ZlcgorCQkvLyB1c2UgcGxhaW4gYXNzaWdubWVudAorCQlpZiAoIG93bmVyLm5vZGVUeXBlICkgeworCQkJb3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7CisKKwkJLy8gT3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlLCBub24td3JpdGFibGUgcHJvcGVydHkKKwkJLy8gY29uZmlndXJhYmlsaXR5IG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmUKKwkJLy8gZGVsZXRlZCB3aXRoIHRoZSBkZWxldGUgb3BlcmF0b3IKKwkJfSBlbHNlIHsKKwkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywgeworCQkJCXZhbHVlOiB2YWx1ZSwKKwkJCQl3cml0YWJsZTogdHJ1ZSwKKwkJCQljb25maWd1cmFibGU6IHRydWUKKwkJCX0gKTsKKwkJfQorCQlyZXR1cm4gb3duZXJbIHRoaXMuZXhwYW5kbyBdOworCX0sCisJY2FjaGU6IGZ1bmN0aW9uKCBvd25lciApIHsKKworCQkvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1vZGVybiBicm93c2VycywKKwkJLy8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS4KKwkJLy8gQWx3YXlzIHJldHVybiBhbiBlbXB0eSBvYmplY3QuCisJCWlmICggIWFjY2VwdERhdGEoIG93bmVyICkgKSB7CisJCQlyZXR1cm4ge307CisJCX0KKworCQkvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGUKKwkJdmFyIHZhbHVlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdOworCisJCS8vIElmIG5vdCwgY3JlYXRlIG9uZQorCQlpZiAoICF2YWx1ZSApIHsKKwkJCXZhbHVlID0ge307CisKKwkJCS8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLAorCQkJLy8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS4KKwkJCS8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LgorCQkJaWYgKCBhY2NlcHREYXRhKCBvd25lciApICkgeworCisJCQkJLy8gSWYgaXQgaXMgYSBub2RlIHVubGlrZWx5IHRvIGJlIHN0cmluZ2lmeS1lZCBvciBsb29wZWQgb3ZlcgorCQkJCS8vIHVzZSBwbGFpbiBhc3NpZ25tZW50CisJCQkJaWYgKCBvd25lci5ub2RlVHlwZSApIHsKKwkJCQkJb3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7CisKKwkJCQkvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHkKKwkJCQkvLyBjb25maWd1cmFibGUgbXVzdCBiZSB0cnVlIHRvIGFsbG93IHRoZSBwcm9wZXJ0eSB0byBiZQorCQkJCS8vIGRlbGV0ZWQgd2hlbiBkYXRhIGlzIHJlbW92ZWQKKwkJCQl9IGVsc2UgeworCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoIG93bmVyLCB0aGlzLmV4cGFuZG8sIHsKKwkJCQkJCXZhbHVlOiB2YWx1ZSwKKwkJCQkJCWNvbmZpZ3VyYWJsZTogdHJ1ZQorCQkJCQl9ICk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJcmV0dXJuIHZhbHVlOworCX0sCisJc2V0OiBmdW5jdGlvbiggb3duZXIsIGRhdGEsIHZhbHVlICkgeworCQl2YXIgcHJvcCwKKwkJCWNhY2hlID0gdGhpcy5jYWNoZSggb3duZXIgKTsKKworCQkvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzCisJCWlmICggdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciICkgeworCQkJY2FjaGVbIGRhdGEgXSA9IHZhbHVlOworCisJCS8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzCisJCX0gZWxzZSB7CisKKwkJCS8vIENvcHkgdGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0aGUgY2FjaGUgb2JqZWN0CisJCQlmb3IgKCBwcm9wIGluIGRhdGEgKSB7CisJCQkJY2FjaGVbIHByb3AgXSA9IGRhdGFbIHByb3AgXTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gY2FjaGU7CisJfSwKKwlnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkgeworCQlyZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgPworCQkJdGhpcy5jYWNoZSggb3duZXIgKSA6CisJCQlvd25lclsgdGhpcy5leHBhbmRvIF0gJiYgb3duZXJbIHRoaXMuZXhwYW5kbyBdWyBrZXkgXTsKKwl9LAorCWFjY2VzczogZnVuY3Rpb24oIG93bmVyLCBrZXksIHZhbHVlICkgeworCQl2YXIgc3RvcmVkOworCisJCS8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjoKKwkJLy8KKwkJLy8gICAxLiBObyBrZXkgd2FzIHNwZWNpZmllZAorCQkvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWQKKwkJLy8KKwkJLy8gVGFrZSB0aGUgInJlYWQiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZQorCQkvLyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJlc3BlY3RpdmVseSBlaXRoZXI6CisJCS8vCisJCS8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3QKKwkJLy8gICAyLiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtleQorCQkvLworCQlpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8CisJCQkJKCAoIGtleSAmJiB0eXBlb2Yga2V5ID09PSAic3RyaW5nIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHsKKworCQkJc3RvcmVkID0gdGhpcy5nZXQoIG93bmVyLCBrZXkgKTsKKworCQkJcmV0dXJuIHN0b3JlZCAhPT0gdW5kZWZpbmVkID8KKwkJCQlzdG9yZWQgOiB0aGlzLmdldCggb3duZXIsIGpRdWVyeS5jYW1lbENhc2UoIGtleSApICk7CisJCX0KKworCQkvLyBXaGVuIHRoZSBrZXkgaXMgbm90IGEgc3RyaW5nLCBvciBib3RoIGEga2V5IGFuZCB2YWx1ZQorCQkvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjoKKwkJLy8KKwkJLy8gICAxLiBBbiBvYmplY3Qgb2YgcHJvcGVydGllcworCQkvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZQorCQkvLworCQl0aGlzLnNldCggb3duZXIsIGtleSwgdmFsdWUgKTsKKworCQkvLyBTaW5jZSB0aGUgInNldCIgcGF0aCBjYW4gaGF2ZSB0d28gcG9zc2libGUgZW50cnkgcG9pbnRzCisJCS8vIHJldHVybiB0aGUgZXhwZWN0ZWQgZGF0YSBiYXNlZCBvbiB3aGljaCBwYXRoIHdhcyB0YWtlblsqXQorCQlyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5OworCX0sCisJcmVtb3ZlOiBmdW5jdGlvbiggb3duZXIsIGtleSApIHsKKwkJdmFyIGksIG5hbWUsIGNhbWVsLAorCQkJY2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07CisKKwkJaWYgKCBjYWNoZSA9PT0gdW5kZWZpbmVkICkgeworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHsKKwkJCXRoaXMucmVnaXN0ZXIoIG93bmVyICk7CisKKwkJfSBlbHNlIHsKKworCQkJLy8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXMKKwkJCWlmICggalF1ZXJ5LmlzQXJyYXkoIGtleSApICkgeworCisJCQkJLy8gSWYgIm5hbWUiIGlzIGFuIGFycmF5IG9mIGtleXMuLi4KKwkJCQkvLyBXaGVuIGRhdGEgaXMgaW5pdGlhbGx5IGNyZWF0ZWQsIHZpYSAoImtleSIsICJ2YWwiKSBzaWduYXR1cmUsCisJCQkJLy8ga2V5cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBjYW1lbENhc2UuCisJCQkJLy8gU2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwgX2hvd18gYSBrZXkgd2FzIGFkZGVkLCByZW1vdmUKKwkJCQkvLyBib3RoIHBsYWluIGtleSBhbmQgY2FtZWxDYXNlIGtleS4gIzEyNzg2CisJCQkJLy8gVGhpcyB3aWxsIG9ubHkgcGVuYWxpemUgdGhlIGFycmF5IGFyZ3VtZW50IHBhdGguCisJCQkJbmFtZSA9IGtleS5jb25jYXQoIGtleS5tYXAoIGpRdWVyeS5jYW1lbENhc2UgKSApOworCQkJfSBlbHNlIHsKKwkJCQljYW1lbCA9IGpRdWVyeS5jYW1lbENhc2UoIGtleSApOworCisJCQkJLy8gVHJ5IHRoZSBzdHJpbmcgYXMgYSBrZXkgYmVmb3JlIGFueSBtYW5pcHVsYXRpb24KKwkJCQlpZiAoIGtleSBpbiBjYWNoZSApIHsKKwkJCQkJbmFtZSA9IFsga2V5LCBjYW1lbCBdOworCQkJCX0gZWxzZSB7CisKKwkJCQkJLy8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cywgdXNlIGl0LgorCQkJCQkvLyBPdGhlcndpc2UsIGNyZWF0ZSBhbiBhcnJheSBieSBtYXRjaGluZyBub24td2hpdGVzcGFjZQorCQkJCQluYW1lID0gY2FtZWw7CisJCQkJCW5hbWUgPSBuYW1lIGluIGNhY2hlID8KKwkJCQkJCVsgbmFtZSBdIDogKCBuYW1lLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXSApOworCQkJCX0KKwkJCX0KKworCQkJaSA9IG5hbWUubGVuZ3RoOworCisJCQl3aGlsZSAoIGktLSApIHsKKwkJCQlkZWxldGUgY2FjaGVbIG5hbWVbIGkgXSBdOworCQkJfQorCQl9CisKKwkJLy8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIHRoZXJlJ3Mgbm8gbW9yZSBkYXRhCisJCWlmICgga2V5ID09PSB1bmRlZmluZWQgfHwgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICkgKSB7CisKKwkJCS8vIFN1cHBvcnQ6IENocm9tZSA8PSAzNS00NSsKKwkJCS8vIFdlYmtpdCAmIEJsaW5rIHBlcmZvcm1hbmNlIHN1ZmZlcnMgd2hlbiBkZWxldGluZyBwcm9wZXJ0aWVzCisJCQkvLyBmcm9tIERPTSBub2Rlcywgc28gc2V0IHRvIHVuZGVmaW5lZCBpbnN0ZWFkCisJCQkvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3CisJCQlpZiAoIG93bmVyLm5vZGVUeXBlICkgeworCQkJCW93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDsKKwkJCX0gZWxzZSB7CisJCQkJZGVsZXRlIG93bmVyWyB0aGlzLmV4cGFuZG8gXTsKKwkJCX0KKwkJfQorCX0sCisJaGFzRGF0YTogZnVuY3Rpb24oIG93bmVyICkgeworCQl2YXIgY2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07CisJCXJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTsKKwl9Cit9OwordmFyIGRhdGFQcml2ID0gbmV3IERhdGEoKTsKKwordmFyIGRhdGFVc2VyID0gbmV3IERhdGEoKTsKKworCisKKy8vCUltcGxlbWVudGF0aW9uIFN1bW1hcnkKKy8vCisvLwkxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoCisvLwkyLiBJbXByb3ZlIHRoZSBtb2R1bGUncyBtYWludGFpbmFiaWxpdHkgYnkgcmVkdWNpbmcgdGhlIHN0b3JhZ2UKKy8vCQlwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uCisvLwkzLiBVc2UgdGhlIHNhbWUgc2luZ2xlIG1lY2hhbmlzbSB0byBzdXBwb3J0ICJwcml2YXRlIiBhbmQgInVzZXIiIGRhdGEuCisvLwk0LiBfTmV2ZXJfIGV4cG9zZSAicHJpdmF0ZSIgZGF0YSB0byB1c2VyIGNvZGUgKFRPRE86IERyb3AgX2RhdGEsIF9yZW1vdmVEYXRhKQorLy8JNS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpCisvLwk2LiBQcm92aWRlIGEgY2xlYXIgcGF0aCBmb3IgaW1wbGVtZW50YXRpb24gdXBncmFkZSB0byBXZWFrTWFwIGluIDIwMTQKKwordmFyIHJicmFjZSA9IC9eKD86XHtbXHdcV10qXH18XFtbXHdcV10qXF0pJC8sCisJcm11bHRpRGFzaCA9IC9bQS1aXS9nOworCitmdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkgeworCXZhciBuYW1lOworCisJLy8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueQorCS8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZQorCWlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisJCW5hbWUgPSAiZGF0YS0iICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsICItJCYiICkudG9Mb3dlckNhc2UoKTsKKwkJZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7CisKKwkJaWYgKCB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgKSB7CisJCQl0cnkgeworCQkJCWRhdGEgPSBkYXRhID09PSAidHJ1ZSIgPyB0cnVlIDoKKwkJCQkJZGF0YSA9PT0gImZhbHNlIiA/IGZhbHNlIDoKKwkJCQkJZGF0YSA9PT0gIm51bGwiID8gbnVsbCA6CisKKwkJCQkJLy8gT25seSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmcKKwkJCQkJK2RhdGEgKyAiIiA9PT0gZGF0YSA/ICtkYXRhIDoKKwkJCQkJcmJyYWNlLnRlc3QoIGRhdGEgKSA/IGpRdWVyeS5wYXJzZUpTT04oIGRhdGEgKSA6CisJCQkJCWRhdGE7CisJCQl9IGNhdGNoICggZSApIHt9CisKKwkJCS8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlcgorCQkJZGF0YVVzZXIuc2V0KCBlbGVtLCBrZXksIGRhdGEgKTsKKwkJfSBlbHNlIHsKKwkJCWRhdGEgPSB1bmRlZmluZWQ7CisJCX0KKwl9CisJcmV0dXJuIGRhdGE7Cit9CisKK2pRdWVyeS5leHRlbmQoIHsKKwloYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJcmV0dXJuIGRhdGFVc2VyLmhhc0RhdGEoIGVsZW0gKSB8fCBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICk7CisJfSwKKworCWRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkgeworCQlyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7CisJfSwKKworCXJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgeworCQlkYXRhVXNlci5yZW1vdmUoIGVsZW0sIG5hbWUgKTsKKwl9LAorCisJLy8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWQKKwkvLyB3aXRoIGRpcmVjdCBjYWxscyB0byBkYXRhUHJpdiBtZXRob2RzLCB0aGVzZSBjYW4gYmUgZGVwcmVjYXRlZC4KKwlfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7CisJCXJldHVybiBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTsKKwl9LAorCisJX3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgeworCQlkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIG5hbWUgKTsKKwl9Cit9ICk7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKwlkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHsKKwkJdmFyIGksIG5hbWUsIGRhdGEsCisJCQllbGVtID0gdGhpc1sgMCBdLAorCQkJYXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlczsKKworCQkvLyBHZXRzIGFsbCB2YWx1ZXMKKwkJaWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHsKKwkJCWlmICggdGhpcy5sZW5ndGggKSB7CisJCQkJZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSApOworCisJCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sICJoYXNEYXRhQXR0cnMiICkgKSB7CisJCQkJCWkgPSBhdHRycy5sZW5ndGg7CisJCQkJCXdoaWxlICggaS0tICkgeworCisJCQkJCQkvLyBTdXBwb3J0OiBJRTExKworCQkJCQkJLy8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICgjMTQ4OTQpCisJCQkJCQlpZiAoIGF0dHJzWyBpIF0gKSB7CisJCQkJCQkJbmFtZSA9IGF0dHJzWyBpIF0ubmFtZTsKKwkJCQkJCQlpZiAoIG5hbWUuaW5kZXhPZiggImRhdGEtIiApID09PSAwICkgeworCQkJCQkJCQluYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZS5zbGljZSggNSApICk7CisJCQkJCQkJCWRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZGF0YVByaXYuc2V0KCBlbGVtLCAiaGFzRGF0YUF0dHJzIiwgdHJ1ZSApOworCQkJCX0KKwkJCX0KKworCQkJcmV0dXJuIGRhdGE7CisJCX0KKworCQkvLyBTZXRzIG11bHRpcGxlIHZhbHVlcworCQlpZiAoIHR5cGVvZiBrZXkgPT09ICJvYmplY3QiICkgeworCQkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisJCQkJZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXkgKTsKKwkJCX0gKTsKKwkJfQorCisJCXJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKKwkJCXZhciBkYXRhLCBjYW1lbEtleTsKKworCQkJLy8gVGhlIGNhbGxpbmcgalF1ZXJ5IG9iamVjdCAoZWxlbWVudCBtYXRjaGVzKSBpcyBub3QgZW1wdHkKKwkJCS8vIChhbmQgdGhlcmVmb3JlIGhhcyBhbiBlbGVtZW50IGFwcGVhcnMgYXQgdGhpc1sgMCBdKSBhbmQgdGhlCisJCQkvLyBgdmFsdWVgIHBhcmFtZXRlciB3YXMgbm90IHVuZGVmaW5lZC4gQW4gZW1wdHkgalF1ZXJ5IG9iamVjdAorCQkJLy8gd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgZm9yIGVsZW0gPSB0aGlzWyAwIF0gd2hpY2ggd2lsbAorCQkJLy8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFuIGF0dGVtcHQgdG8gcmVhZCBhIGRhdGEgY2FjaGUgaXMgbWFkZS4KKwkJCWlmICggZWxlbSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgeworCisJCQkJLy8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZQorCQkJCS8vIHdpdGggdGhlIGtleSBhcy1pcworCQkJCWRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0sIGtleSApIHx8CisKKwkJCQkJLy8gVHJ5IHRvIGZpbmQgZGFzaGVkIGtleSBpZiBpdCBleGlzdHMgKGdoLTI3NzkpCisJCQkJCS8vIFRoaXMgaXMgZm9yIDIuMi54IG9ubHkKKwkJCQkJZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgIi0kJiIgKS50b0xvd2VyQ2FzZSgpICk7CisKKwkJCQlpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHsKKwkJCQkJcmV0dXJuIGRhdGE7CisJCQkJfQorCisJCQkJY2FtZWxLZXkgPSBqUXVlcnkuY2FtZWxDYXNlKCBrZXkgKTsKKworCQkJCS8vIEF0dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGUKKwkJCQkvLyB3aXRoIHRoZSBrZXkgY2FtZWxpemVkCisJCQkJZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwgY2FtZWxLZXkgKTsKKwkJCQlpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHsKKwkJCQkJcmV0dXJuIGRhdGE7CisJCQkJfQorCisJCQkJLy8gQXR0ZW1wdCB0byAiZGlzY292ZXIiIHRoZSBkYXRhIGluCisJCQkJLy8gSFRNTDUgY3VzdG9tIGRhdGEtKiBhdHRycworCQkJCWRhdGEgPSBkYXRhQXR0ciggZWxlbSwgY2FtZWxLZXksIHVuZGVmaW5lZCApOworCQkJCWlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkgeworCQkJCQlyZXR1cm4gZGF0YTsKKwkJCQl9CisKKwkJCQkvLyBXZSB0cmllZCByZWFsbHkgaGFyZCwgYnV0IHRoZSBkYXRhIGRvZXNuJ3QgZXhpc3QuCisJCQkJcmV0dXJuOworCQkJfQorCisJCQkvLyBTZXQgdGhlIGRhdGEuLi4KKwkJCWNhbWVsS2V5ID0galF1ZXJ5LmNhbWVsQ2FzZSgga2V5ICk7CisJCQl0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworCisJCQkJLy8gRmlyc3QsIGF0dGVtcHQgdG8gc3RvcmUgYSBjb3B5IG9yIHJlZmVyZW5jZSBvZiBhbnkKKwkJCQkvLyBkYXRhIHRoYXQgbWlnaHQndmUgYmVlbiBzdG9yZSB3aXRoIGEgY2FtZWxDYXNlZCBrZXkuCisJCQkJdmFyIGRhdGEgPSBkYXRhVXNlci5nZXQoIHRoaXMsIGNhbWVsS2V5ICk7CisKKwkJCQkvLyBGb3IgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZSBpbnRlcm9wLCB3ZSBoYXZlIHRvCisJCQkJLy8gc3RvcmUgcHJvcGVydHkgbmFtZXMgd2l0aCBkYXNoZXMgaW4gYSBjYW1lbENhc2UgZm9ybS4KKwkJCQkvLyBUaGlzIG1pZ2h0IG5vdCBhcHBseSB0byBhbGwgcHJvcGVydGllcy4uLioKKwkJCQlkYXRhVXNlci5zZXQoIHRoaXMsIGNhbWVsS2V5LCB2YWx1ZSApOworCisJCQkJLy8gKi4uLiBJbiB0aGUgY2FzZSBvZiBwcm9wZXJ0aWVzIHRoYXQgbWlnaHQgX2FjdHVhbGx5XworCQkJCS8vIGhhdmUgZGFzaGVzLCB3ZSBuZWVkIHRvIGFsc28gc3RvcmUgYSBjb3B5IG9mIHRoYXQKKwkJCQkvLyB1bmNoYW5nZWQgcHJvcGVydHkuCisJCQkJaWYgKCBrZXkuaW5kZXhPZiggIi0iICkgPiAtMSAmJiBkYXRhICE9PSB1bmRlZmluZWQgKSB7CisJCQkJCWRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApOworCQkJCX0KKwkJCX0gKTsKKwkJfSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCB0cnVlICk7CisJfSwKKworCXJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7CisJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworCQkJZGF0YVVzZXIucmVtb3ZlKCB0aGlzLCBrZXkgKTsKKwkJfSApOworCX0KK30gKTsKKworCitqUXVlcnkuZXh0ZW5kKCB7CisJcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkgeworCQl2YXIgcXVldWU7CisKKwkJaWYgKCBlbGVtICkgeworCQkJdHlwZSA9ICggdHlwZSB8fCAiZngiICkgKyAicXVldWUiOworCQkJcXVldWUgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIHR5cGUgKTsKKworCQkJLy8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cAorCQkJaWYgKCBkYXRhICkgeworCQkJCWlmICggIXF1ZXVlIHx8IGpRdWVyeS5pc0FycmF5KCBkYXRhICkgKSB7CisJCQkJCXF1ZXVlID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgKTsKKwkJCQl9IGVsc2UgeworCQkJCQlxdWV1ZS5wdXNoKCBkYXRhICk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIHF1ZXVlIHx8IFtdOworCQl9CisJfSwKKworCWRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkgeworCQl0eXBlID0gdHlwZSB8fCAiZngiOworCisJCXZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLAorCQkJc3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsCisJCQlmbiA9IHF1ZXVlLnNoaWZ0KCksCisJCQlob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLAorCQkJbmV4dCA9IGZ1bmN0aW9uKCkgeworCQkJCWpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7CisJCQl9OworCisJCS8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWwKKwkJaWYgKCBmbiA9PT0gImlucHJvZ3Jlc3MiICkgeworCQkJZm4gPSBxdWV1ZS5zaGlmdCgpOworCQkJc3RhcnRMZW5ndGgtLTsKKwkJfQorCisJCWlmICggZm4gKSB7CisKKwkJCS8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmcKKwkJCS8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWQKKwkJCWlmICggdHlwZSA9PT0gImZ4IiApIHsKKwkJCQlxdWV1ZS51bnNoaWZ0KCAiaW5wcm9ncmVzcyIgKTsKKwkJCX0KKworCQkJLy8gQ2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvbgorCQkJZGVsZXRlIGhvb2tzLnN0b3A7CisJCQlmbi5jYWxsKCBlbGVtLCBuZXh0LCBob29rcyApOworCQl9CisKKwkJaWYgKCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7CisJCQlob29rcy5lbXB0eS5maXJlKCk7CisJCX0KKwl9LAorCisJLy8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmUKKwlfcXVldWVIb29rczogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7CisJCXZhciBrZXkgPSB0eXBlICsgInF1ZXVlSG9va3MiOworCQlyZXR1cm4gZGF0YVByaXYuZ2V0KCBlbGVtLCBrZXkgKSB8fCBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIGtleSwgeworCQkJZW1wdHk6IGpRdWVyeS5DYWxsYmFja3MoICJvbmNlIG1lbW9yeSIgKS5hZGQoIGZ1bmN0aW9uKCkgeworCQkJCWRhdGFQcml2LnJlbW92ZSggZWxlbSwgWyB0eXBlICsgInF1ZXVlIiwga2V5IF0gKTsKKwkJCX0gKQorCQl9ICk7CisJfQorfSApOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisJcXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgeworCQl2YXIgc2V0dGVyID0gMjsKKworCQlpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKKwkJCWRhdGEgPSB0eXBlOworCQkJdHlwZSA9ICJmeCI7CisJCQlzZXR0ZXItLTsKKwkJfQorCisJCWlmICggYXJndW1lbnRzLmxlbmd0aCA8IHNldHRlciApIHsKKwkJCXJldHVybiBqUXVlcnkucXVldWUoIHRoaXNbIDAgXSwgdHlwZSApOworCQl9CisKKwkJcmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/CisJCQl0aGlzIDoKKwkJCXRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisJCQkJdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7CisKKwkJCQkvLyBFbnN1cmUgYSBob29rcyBmb3IgdGhpcyBxdWV1ZQorCQkJCWpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSApOworCisJCQkJaWYgKCB0eXBlID09PSAiZngiICYmIHF1ZXVlWyAwIF0gIT09ICJpbnByb2dyZXNzIiApIHsKKwkJCQkJalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKKwkJCQl9CisJCQl9ICk7CisJfSwKKwlkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKKwkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisJCQlqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOworCQl9ICk7CisJfSwKKwljbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKKwkJcmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsKKwl9LAorCisJLy8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZQorCS8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUgdHlwZSBieSBkZWZhdWx0KQorCXByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7CisJCXZhciB0bXAsCisJCQljb3VudCA9IDEsCisJCQlkZWZlciA9IGpRdWVyeS5EZWZlcnJlZCgpLAorCQkJZWxlbWVudHMgPSB0aGlzLAorCQkJaSA9IHRoaXMubGVuZ3RoLAorCQkJcmVzb2x2ZSA9IGZ1bmN0aW9uKCkgeworCQkJCWlmICggISggLS1jb3VudCApICkgeworCQkJCQlkZWZlci5yZXNvbHZlV2l0aCggZWxlbWVudHMsIFsgZWxlbWVudHMgXSApOworCQkJCX0KKwkJCX07CisKKwkJaWYgKCB0eXBlb2YgdHlwZSAhPT0gInN0cmluZyIgKSB7CisJCQlvYmogPSB0eXBlOworCQkJdHlwZSA9IHVuZGVmaW5lZDsKKwkJfQorCQl0eXBlID0gdHlwZSB8fCAiZngiOworCisJCXdoaWxlICggaS0tICkgeworCQkJdG1wID0gZGF0YVByaXYuZ2V0KCBlbGVtZW50c1sgaSBdLCB0eXBlICsgInF1ZXVlSG9va3MiICk7CisJCQlpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7CisJCQkJY291bnQrKzsKKwkJCQl0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7CisJCQl9CisJCX0KKwkJcmVzb2x2ZSgpOworCQlyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7CisJfQorfSApOwordmFyIHBudW0gPSAoIC9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8gKS5zb3VyY2U7CisKK3ZhciByY3NzTnVtID0gbmV3IFJlZ0V4cCggIl4oPzooWystXSk9fCkoIiArIHBudW0gKyAiKShbYS16JV0qKSQiLCAiaSIgKTsKKworCit2YXIgY3NzRXhwYW5kID0gWyAiVG9wIiwgIlJpZ2h0IiwgIkJvdHRvbSIsICJMZWZ0IiBdOworCit2YXIgaXNIaWRkZW4gPSBmdW5jdGlvbiggZWxlbSwgZWwgKSB7CisKKwkJLy8gaXNIaWRkZW4gbWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjsKKwkJLy8gaW4gdGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50CisJCWVsZW0gPSBlbCB8fCBlbGVtOworCQlyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkgPT09ICJub25lIiB8fAorCQkJIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7CisJfTsKKworCisKK2Z1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7CisJdmFyIGFkanVzdGVkLAorCQlzY2FsZSA9IDEsCisJCW1heEl0ZXJhdGlvbnMgPSAyMCwKKwkJY3VycmVudFZhbHVlID0gdHdlZW4gPworCQkJZnVuY3Rpb24oKSB7IHJldHVybiB0d2Vlbi5jdXIoKTsgfSA6CisJCQlmdW5jdGlvbigpIHsgcmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AsICIiICk7IH0sCisJCWluaXRpYWwgPSBjdXJyZW50VmFsdWUoKSwKKwkJdW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gIiIgOiAicHgiICksCisKKwkJLy8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXMKKwkJaW5pdGlhbEluVW5pdCA9ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09ICJweCIgJiYgK2luaXRpYWwgKSAmJgorCQkJcmNzc051bS5leGVjKCBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTsKKworCWlmICggaW5pdGlhbEluVW5pdCAmJiBpbml0aWFsSW5Vbml0WyAzIF0gIT09IHVuaXQgKSB7CisKKwkJLy8gVHJ1c3QgdW5pdHMgcmVwb3J0ZWQgYnkgalF1ZXJ5LmNzcworCQl1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07CisKKwkJLy8gTWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgdHdlZW4gcHJvcGVydGllcyBsYXRlciBvbgorCQl2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXTsKKworCQkvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludAorCQlpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTsKKworCQlkbyB7CisKKwkJCS8vIElmIHByZXZpb3VzIGl0ZXJhdGlvbiB6ZXJvZWQgb3V0LCBkb3VibGUgdW50aWwgd2UgZ2V0ICpzb21ldGhpbmcqLgorCQkJLy8gVXNlIHN0cmluZyBmb3IgZG91Ymxpbmcgc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHNlZSBzY2FsZSBhcyB1bmNoYW5nZWQgYmVsb3cKKwkJCXNjYWxlID0gc2NhbGUgfHwgIi41IjsKKworCQkJLy8gQWRqdXN0IGFuZCBhcHBseQorCQkJaW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTsKKwkJCWpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTsKKworCQkvLyBVcGRhdGUgc2NhbGUsIHRvbGVyYXRpbmcgemVybyBvciBOYU4gZnJvbSB0d2Vlbi5jdXIoKQorCQkvLyBCcmVhayB0aGUgbG9vcCBpZiBzY2FsZSBpcyB1bmNoYW5nZWQgb3IgcGVyZmVjdCwgb3IgaWYgd2UndmUganVzdCBoYWQgZW5vdWdoLgorCQl9IHdoaWxlICgKKwkJCXNjYWxlICE9PSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsICkgJiYgc2NhbGUgIT09IDEgJiYgLS1tYXhJdGVyYXRpb25zCisJCSk7CisJfQorCisJaWYgKCB2YWx1ZVBhcnRzICkgeworCQlpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDsKKworCQkvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWQKKwkJYWRqdXN0ZWQgPSB2YWx1ZVBhcnRzWyAxIF0gPworCQkJaW5pdGlhbEluVW5pdCArICggdmFsdWVQYXJ0c1sgMSBdICsgMSApICogdmFsdWVQYXJ0c1sgMiBdIDoKKwkJCSt2YWx1ZVBhcnRzWyAyIF07CisJCWlmICggdHdlZW4gKSB7CisJCQl0d2Vlbi51bml0ID0gdW5pdDsKKwkJCXR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDsKKwkJCXR3ZWVuLmVuZCA9IGFkanVzdGVkOworCQl9CisJfQorCXJldHVybiBhZGp1c3RlZDsKK30KK3ZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTsKKwordmFyIHJ0YWdOYW1lID0gKCAvPChbXHc6LV0rKS8gKTsKKwordmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTsKKworCisKKy8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApCit2YXIgd3JhcE1hcCA9IHsKKworCS8vIFN1cHBvcnQ6IElFOQorCW9wdGlvbjogWyAxLCAiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsICI8L3NlbGVjdD4iIF0sCisKKwkvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZQorCS8vIHNhbWUgd2F5IHRoYXQgdGFnIHNvdXAgcGFyc2VycyBkby4gU28gd2UgY2Fubm90IHNob3J0ZW4KKwkvLyB0aGlzIGJ5IG9taXR0aW5nIDx0Ym9keT4gb3Igb3RoZXIgcmVxdWlyZWQgZWxlbWVudHMuCisJdGhlYWQ6IFsgMSwgIjx0YWJsZT4iLCAiPC90YWJsZT4iIF0sCisJY29sOiBbIDIsICI8dGFibGU+PGNvbGdyb3VwPiIsICI8L2NvbGdyb3VwPjwvdGFibGU+IiBdLAorCXRyOiBbIDIsICI8dGFibGU+PHRib2R5PiIsICI8L3Rib2R5PjwvdGFibGU+IiBdLAorCXRkOiBbIDMsICI8dGFibGU+PHRib2R5Pjx0cj4iLCAiPC90cj48L3Rib2R5PjwvdGFibGU+IiBdLAorCisJX2RlZmF1bHQ6IFsgMCwgIiIsICIiIF0KK307CisKKy8vIFN1cHBvcnQ6IElFOQord3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uOworCit3cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkOword3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7CisKKworZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7CisKKwkvLyBTdXBwb3J0OiBJRTktMTErCisJLy8gVXNlIHR5cGVvZiB0byBhdm9pZCB6ZXJvLWFyZ3VtZW50IG1ldGhvZCBpbnZvY2F0aW9uIG9uIGhvc3Qgb2JqZWN0cyAoIzE1MTUxKQorCXZhciByZXQgPSB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgPworCQkJY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIHx8ICIqIiApIDoKKwkJCXR5cGVvZiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwgIT09ICJ1bmRlZmluZWQiID8KKwkJCQljb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyB8fCAiKiIgKSA6CisJCQlbXTsKKworCXJldHVybiB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSA/CisJCWpRdWVyeS5tZXJnZSggWyBjb250ZXh0IF0sIHJldCApIDoKKwkJcmV0OworfQorCisKKy8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZAorZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkgeworCXZhciBpID0gMCwKKwkJbCA9IGVsZW1zLmxlbmd0aDsKKworCWZvciAoIDsgaSA8IGw7IGkrKyApIHsKKwkJZGF0YVByaXYuc2V0KAorCQkJZWxlbXNbIGkgXSwKKwkJCSJnbG9iYWxFdmFsIiwKKwkJCSFyZWZFbGVtZW50cyB8fCBkYXRhUHJpdi5nZXQoIHJlZkVsZW1lbnRzWyBpIF0sICJnbG9iYWxFdmFsIiApCisJCSk7CisJfQorfQorCisKK3ZhciByaHRtbCA9IC88fCYjP1x3KzsvOworCitmdW5jdGlvbiBidWlsZEZyYWdtZW50KCBlbGVtcywgY29udGV4dCwgc2NyaXB0cywgc2VsZWN0aW9uLCBpZ25vcmVkICkgeworCXZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgY29udGFpbnMsIGosCisJCWZyYWdtZW50ID0gY29udGV4dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksCisJCW5vZGVzID0gW10sCisJCWkgPSAwLAorCQlsID0gZWxlbXMubGVuZ3RoOworCisJZm9yICggOyBpIDwgbDsgaSsrICkgeworCQllbGVtID0gZWxlbXNbIGkgXTsKKworCQlpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHsKKworCQkJLy8gQWRkIG5vZGVzIGRpcmVjdGx5CisJCQlpZiAoIGpRdWVyeS50eXBlKCBlbGVtICkgPT09ICJvYmplY3QiICkgeworCisJCQkJLy8gU3VwcG9ydDogQW5kcm9pZDw0LjEsIFBoYW50b21KUzwyCisJCQkJLy8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdAorCQkJCWpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTsKKworCQkJLy8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlCisJCQl9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkgeworCQkJCW5vZGVzLnB1c2goIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKSApOworCisJCQkvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXMKKwkJCX0gZWxzZSB7CisJCQkJdG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoICJkaXYiICkgKTsKKworCQkJCS8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb24KKwkJCQl0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbICIiLCAiIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpOworCQkJCXdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0OworCQkJCXRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdOworCisJCQkJLy8gRGVzY2VuZCB0aHJvdWdoIHdyYXBwZXJzIHRvIHRoZSByaWdodCBjb250ZW50CisJCQkJaiA9IHdyYXBbIDAgXTsKKwkJCQl3aGlsZSAoIGotLSApIHsKKwkJCQkJdG1wID0gdG1wLmxhc3RDaGlsZDsKKwkJCQl9CisKKwkJCQkvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMSwgUGhhbnRvbUpTPDIKKwkJCQkvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0CisJCQkJalF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTsKKworCQkJCS8vIFJlbWVtYmVyIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyCisJCQkJdG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDsKKworCQkJCS8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKCMxMjM5MikKKwkJCQl0bXAudGV4dENvbnRlbnQgPSAiIjsKKwkJCX0KKwkJfQorCX0KKworCS8vIFJlbW92ZSB3cmFwcGVyIGZyb20gZnJhZ21lbnQKKwlmcmFnbWVudC50ZXh0Q29udGVudCA9ICIiOworCisJaSA9IDA7CisJd2hpbGUgKCAoIGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHsKKworCQkvLyBTa2lwIGVsZW1lbnRzIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KQorCQlpZiAoIHNlbGVjdGlvbiAmJiBqUXVlcnkuaW5BcnJheSggZWxlbSwgc2VsZWN0aW9uICkgPiAtMSApIHsKKwkJCWlmICggaWdub3JlZCApIHsKKwkJCQlpZ25vcmVkLnB1c2goIGVsZW0gKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29udGFpbnMgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApOworCisJCS8vIEFwcGVuZCB0byBmcmFnbWVudAorCQl0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksICJzY3JpcHQiICk7CisKKwkJLy8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeQorCQlpZiAoIGNvbnRhaW5zICkgeworCQkJc2V0R2xvYmFsRXZhbCggdG1wICk7CisJCX0KKworCQkvLyBDYXB0dXJlIGV4ZWN1dGFibGVzCisJCWlmICggc2NyaXB0cyApIHsKKwkJCWogPSAwOworCQkJd2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7CisJCQkJaWYgKCByc2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgfHwgIiIgKSApIHsKKwkJCQkJc2NyaXB0cy5wdXNoKCBlbGVtICk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIGZyYWdtZW50OworfQorCisKKyggZnVuY3Rpb24oKSB7CisJdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLAorCQlkaXYgPSBmcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKSApLAorCQlpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJpbnB1dCIgKTsKKworCS8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wLTQuMywgU2FmYXJpPD01LjEKKwkvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KQorCS8vIFN1cHBvcnQ6IFdpbmRvd3MgV2ViIEFwcHMgKFdXQSkKKwkvLyBgbmFtZWAgYW5kIGB0eXBlYCBtdXN0IHVzZSAuc2V0QXR0cmlidXRlIGZvciBXV0EgKCMxNDkwMSkKKwlpbnB1dC5zZXRBdHRyaWJ1dGUoICJ0eXBlIiwgInJhZGlvIiApOworCWlucHV0LnNldEF0dHJpYnV0ZSggImNoZWNrZWQiLCAiY2hlY2tlZCIgKTsKKwlpbnB1dC5zZXRBdHRyaWJ1dGUoICJuYW1lIiwgInQiICk7CisKKwlkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7CisKKwkvLyBTdXBwb3J0OiBTYWZhcmk8PTUuMSwgQW5kcm9pZDw0LjIKKwkvLyBPbGRlciBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHMKKwlzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7CisKKwkvLyBTdXBwb3J0OiBJRTw9MTErCisJLy8gTWFrZSBzdXJlIHRleHRhcmVhIChhbmQgY2hlY2tib3gpIGRlZmF1bHRWYWx1ZSBpcyBwcm9wZXJseSBjbG9uZWQKKwlkaXYuaW5uZXJIVE1MID0gIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT4iOworCXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSAhIWRpdi5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlOworfSApKCk7CisKKwordmFyCisJcmtleUV2ZW50ID0gL15rZXkvLAorCXJtb3VzZUV2ZW50ID0gL14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLAorCXJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XC4oLispfCkvOworCitmdW5jdGlvbiByZXR1cm5UcnVlKCkgeworCXJldHVybiB0cnVlOworfQorCitmdW5jdGlvbiByZXR1cm5GYWxzZSgpIHsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8vIFN1cHBvcnQ6IElFOQorLy8gU2VlICMxMzM5MyBmb3IgbW9yZSBpbmZvCitmdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHsKKwl0cnkgeworCQlyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsKKwl9IGNhdGNoICggZXJyICkgeyB9Cit9CisKK2Z1bmN0aW9uIG9uKCBlbGVtLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCBvbmUgKSB7CisJdmFyIG9yaWdGbiwgdHlwZTsKKworCS8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVycworCWlmICggdHlwZW9mIHR5cGVzID09PSAib2JqZWN0IiApIHsKKworCQkvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKQorCQlpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgKSB7CisKKwkJCS8vICggdHlwZXMtT2JqZWN0LCBkYXRhICkKKwkJCWRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yOworCQkJc2VsZWN0b3IgPSB1bmRlZmluZWQ7CisJCX0KKwkJZm9yICggdHlwZSBpbiB0eXBlcyApIHsKKwkJCW9uKCBlbGVtLCB0eXBlLCBzZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7CisJCX0KKwkJcmV0dXJuIGVsZW07CisJfQorCisJaWYgKCBkYXRhID09IG51bGwgJiYgZm4gPT0gbnVsbCApIHsKKworCQkvLyAoIHR5cGVzLCBmbiApCisJCWZuID0gc2VsZWN0b3I7CisJCWRhdGEgPSBzZWxlY3RvciA9IHVuZGVmaW5lZDsKKwl9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkgeworCQlpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CisKKwkJCS8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApCisJCQlmbiA9IGRhdGE7CisJCQlkYXRhID0gdW5kZWZpbmVkOworCQl9IGVsc2UgeworCisJCQkvLyAoIHR5cGVzLCBkYXRhLCBmbiApCisJCQlmbiA9IGRhdGE7CisJCQlkYXRhID0gc2VsZWN0b3I7CisJCQlzZWxlY3RvciA9IHVuZGVmaW5lZDsKKwkJfQorCX0KKwlpZiAoIGZuID09PSBmYWxzZSApIHsKKwkJZm4gPSByZXR1cm5GYWxzZTsKKwl9IGVsc2UgaWYgKCAhZm4gKSB7CisJCXJldHVybiBlbGVtOworCX0KKworCWlmICggb25lID09PSAxICkgeworCQlvcmlnRm4gPSBmbjsKKwkJZm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7CisKKwkJCS8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mbworCQkJalF1ZXJ5KCkub2ZmKCBldmVudCApOworCQkJcmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7CisJCX07CisKKwkJLy8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm4KKwkJZm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7CisJfQorCXJldHVybiBlbGVtLmVhY2goIGZ1bmN0aW9uKCkgeworCQlqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7CisJfSApOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgZXZlbnRzIC0tIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLgorICogUHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZvciBtYW55IG9mIHRoZSBpZGVhcy4KKyAqLworalF1ZXJ5LmV2ZW50ID0geworCisJZ2xvYmFsOiB7fSwKKworCWFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHsKKworCQl2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsCisJCQlldmVudHMsIHQsIGhhbmRsZU9iaiwKKwkJCXNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSwKKwkJCWVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7CisKKwkJLy8gRG9uJ3QgYXR0YWNoIGV2ZW50cyB0byBub0RhdGEgb3IgdGV4dC9jb21tZW50IG5vZGVzIChidXQgYWxsb3cgcGxhaW4gb2JqZWN0cykKKwkJaWYgKCAhZWxlbURhdGEgKSB7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBkYXRhIGluIGxpZXUgb2YgdGhlIGhhbmRsZXIKKwkJaWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7CisJCQloYW5kbGVPYmpJbiA9IGhhbmRsZXI7CisJCQloYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjsKKwkJCXNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7CisJCX0KKworCQkvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXIKKwkJaWYgKCAhaGFuZGxlci5ndWlkICkgeworCQkJaGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKzsKKwkJfQorCisJCS8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3QKKwkJaWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHsKKwkJCWV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IHt9OworCQl9CisJCWlmICggISggZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgKSApIHsKKwkJCWV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7CisKKwkJCQkvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZAorCQkJCS8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWQKKwkJCQlyZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gInVuZGVmaW5lZCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID8KKwkJCQkJalF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDsKKwkJCX07CisJCX0KKworCQkvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlCisJCXR5cGVzID0gKCB0eXBlcyB8fCAiIiApLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbICIiIF07CisJCXQgPSB0eXBlcy5sZW5ndGg7CisJCXdoaWxlICggdC0tICkgeworCQkJdG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdOworCQkJdHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07CisJCQluYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCAiIiApLnNwbGl0KCAiLiIgKS5zb3J0KCk7CisKKwkJCS8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVycworCQkJaWYgKCAhdHlwZSApIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLy8gSWYgZXZlbnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdlZCB0eXBlCisJCQlzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKKworCQkJLy8gSWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5lIHNwZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlCisJCQl0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7CisKKwkJCS8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGUKKwkJCXNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OworCisJCQkvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVycworCQkJaGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCggeworCQkJCXR5cGU6IHR5cGUsCisJCQkJb3JpZ1R5cGU6IG9yaWdUeXBlLAorCQkJCWRhdGE6IGRhdGEsCisJCQkJaGFuZGxlcjogaGFuZGxlciwKKwkJCQlndWlkOiBoYW5kbGVyLmd1aWQsCisJCQkJc2VsZWN0b3I6IHNlbGVjdG9yLAorCQkJCW5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksCisJCQkJbmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oICIuIiApCisJCQl9LCBoYW5kbGVPYmpJbiApOworCisJCQkvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdAorCQkJaWYgKCAhKCBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7CisJCQkJaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdOworCQkJCWhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwOworCisJCQkJLy8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlCisJCQkJaWYgKCAhc3BlY2lhbC5zZXR1cCB8fAorCQkJCQlzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkgeworCisJCQkJCWlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkgeworCQkJCQkJZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSApOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoIHNwZWNpYWwuYWRkICkgeworCQkJCXNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApOworCisJCQkJaWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHsKKwkJCQkJaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDsKKwkJCQl9CisJCQl9CisKKwkJCS8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250CisJCQlpZiAoIHNlbGVjdG9yICkgeworCQkJCWhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTsKKwkJCX0gZWxzZSB7CisJCQkJaGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7CisJCQl9CisKKwkJCS8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb24KKwkJCWpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7CisJCX0KKworCX0sCisKKwkvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnQKKwlyZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkgeworCisJCXZhciBqLCBvcmlnQ291bnQsIHRtcCwKKwkJCWV2ZW50cywgdCwgaGFuZGxlT2JqLAorCQkJc3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLAorCQkJZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICkgJiYgZGF0YVByaXYuZ2V0KCBlbGVtICk7CisKKwkJaWYgKCAhZWxlbURhdGEgfHwgISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkCisJCXR5cGVzID0gKCB0eXBlcyB8fCAiIiApLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbICIiIF07CisJCXQgPSB0eXBlcy5sZW5ndGg7CisJCXdoaWxlICggdC0tICkgeworCQkJdG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdOworCQkJdHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07CisJCQluYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCAiIiApLnNwbGl0KCAiLiIgKS5zb3J0KCk7CisKKwkJCS8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudAorCQkJaWYgKCAhdHlwZSApIHsKKwkJCQlmb3IgKCB0eXBlIGluIGV2ZW50cyApIHsKKwkJCQkJalF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKKwkJCXR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTsKKwkJCWhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107CisJCQl0bXAgPSB0bXBbIDIgXSAmJgorCQkJCW5ldyBSZWdFeHAoICIoXnxcXC4pIiArIG5hbWVzcGFjZXMuam9pbiggIlxcLig/Oi4qXFwufCkiICkgKyAiKFxcLnwkKSIgKTsKKworCQkJLy8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50cworCQkJb3JpZ0NvdW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDsKKwkJCXdoaWxlICggai0tICkgeworCQkJCWhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07CisKKwkJCQlpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmCisJCQkJCSggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3VpZCApICYmCisJCQkJCSggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiYKKwkJCQkJKCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fAorCQkJCQkJc2VsZWN0b3IgPT09ICIqKiIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7CisJCQkJCWhhbmRsZXJzLnNwbGljZSggaiwgMSApOworCisJCQkJCWlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkgeworCQkJCQkJaGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tOworCQkJCQl9CisJCQkJCWlmICggc3BlY2lhbC5yZW1vdmUgKSB7CisJCQkJCQlzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJLy8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdAorCQkJLy8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpCisJCQlpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkgeworCQkJCWlmICggIXNwZWNpYWwudGVhcmRvd24gfHwKKwkJCQkJc3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7CisKKwkJCQkJalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTsKKwkJCQl9CisKKwkJCQlkZWxldGUgZXZlbnRzWyB0eXBlIF07CisJCQl9CisJCX0KKworCQkvLyBSZW1vdmUgZGF0YSBhbmQgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZAorCQlpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHsKKwkJCWRhdGFQcml2LnJlbW92ZSggZWxlbSwgImhhbmRsZSBldmVudHMiICk7CisJCX0KKwl9LAorCisJZGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHsKKworCQkvLyBNYWtlIGEgd3JpdGFibGUgalF1ZXJ5LkV2ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVudCBvYmplY3QKKwkJZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApOworCisJCXZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwKKwkJCWhhbmRsZXJRdWV1ZSA9IFtdLAorCQkJYXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLAorCQkJaGFuZGxlcnMgPSAoIGRhdGFQcml2LmdldCggdGhpcywgImV2ZW50cyIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gfHwgW10sCisJCQlzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUgXSB8fCB7fTsKKworCQkvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudAorCQlhcmdzWyAwIF0gPSBldmVudDsKKwkJZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzOworCisJCS8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwgYW5kIGxldCBpdCBiYWlsIGlmIGRlc2lyZWQKKwkJaWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBEZXRlcm1pbmUgaGFuZGxlcnMKKwkJaGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApOworCisJCS8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzCisJCWkgPSAwOworCQl3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHsKKwkJCWV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07CisKKwkJCWogPSAwOworCQkJd2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBdICkgJiYKKwkJCQkhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSApIHsKKworCQkJCS8vIFRyaWdnZXJlZCBldmVudCBtdXN0IGVpdGhlciAxKSBoYXZlIG5vIG5hbWVzcGFjZSwgb3IgMikgaGF2ZSBuYW1lc3BhY2UocykKKwkJCQkvLyBhIHN1YnNldCBvciBlcXVhbCB0byB0aG9zZSBpbiB0aGUgYm91bmQgZXZlbnQgKGJvdGggY2FuIGhhdmUgbm8gbmFtZXNwYWNlKS4KKwkJCQlpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgeworCisJCQkJCWV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajsKKwkJCQkJZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhOworCisJCQkJCXJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHwKKwkJCQkJCWhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApOworCisJCQkJCWlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7CisJCQkJCQlpZiAoICggZXZlbnQucmVzdWx0ID0gcmV0ICkgPT09IGZhbHNlICkgeworCQkJCQkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisJCQkJCQkJZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQkvLyBDYWxsIHRoZSBwb3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlCisJCWlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7CisJCQlzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApOworCQl9CisKKwkJcmV0dXJuIGV2ZW50LnJlc3VsdDsKKwl9LAorCisJaGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7CisJCXZhciBpLCBtYXRjaGVzLCBzZWwsIGhhbmRsZU9iaiwKKwkJCWhhbmRsZXJRdWV1ZSA9IFtdLAorCQkJZGVsZWdhdGVDb3VudCA9IGhhbmRsZXJzLmRlbGVnYXRlQ291bnQsCisJCQljdXIgPSBldmVudC50YXJnZXQ7CisKKwkJLy8gU3VwcG9ydCAoYXQgbGVhc3QpOiBDaHJvbWUsIElFOQorCQkvLyBGaW5kIGRlbGVnYXRlIGhhbmRsZXJzCisJCS8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICgjMTMxODApCisJCS8vCisJCS8vIFN1cHBvcnQ6IEZpcmVmb3g8PTQyKworCQkvLyBBdm9pZCBub24tbGVmdC1jbGljayBpbiBGRiBidXQgZG9uJ3QgYmxvY2sgSUUgcmFkaW8gZXZlbnRzICgjMzg2MSwgZ2gtMjM0MykKKwkJaWYgKCBkZWxlZ2F0ZUNvdW50ICYmIGN1ci5ub2RlVHlwZSAmJgorCQkJKCBldmVudC50eXBlICE9PSAiY2xpY2siIHx8IGlzTmFOKCBldmVudC5idXR0b24gKSB8fCBldmVudC5idXR0b24gPCAxICkgKSB7CisKKwkJCWZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkgeworCisJCQkJLy8gRG9uJ3QgY2hlY2sgbm9uLWVsZW1lbnRzICgjMTMyMDgpCisJCQkJLy8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKCM2OTExLCAjODE2NSwgIzExMzgyLCAjMTE3NjQpCisJCQkJaWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgKCBjdXIuZGlzYWJsZWQgIT09IHRydWUgfHwgZXZlbnQudHlwZSAhPT0gImNsaWNrIiApICkgeworCQkJCQltYXRjaGVzID0gW107CisJCQkJCWZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkgeworCQkJCQkJaGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTsKKworCQkJCQkJLy8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKCMxMzIwMykKKwkJCQkJCXNlbCA9IGhhbmRsZU9iai5zZWxlY3RvciArICIgIjsKKworCQkJCQkJaWYgKCBtYXRjaGVzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkgeworCQkJCQkJCW1hdGNoZXNbIHNlbCBdID0gaGFuZGxlT2JqLm5lZWRzQ29udGV4dCA/CisJCQkJCQkJCWpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID4gLTEgOgorCQkJCQkJCQlqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoOworCQkJCQkJfQorCQkJCQkJaWYgKCBtYXRjaGVzWyBzZWwgXSApIHsKKwkJCQkJCQltYXRjaGVzLnB1c2goIGhhbmRsZU9iaiApOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWlmICggbWF0Y2hlcy5sZW5ndGggKSB7CisJCQkJCQloYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVzIH0gKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCS8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnMKKwkJaWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkgeworCQkJaGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogdGhpcywgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApOworCQl9CisKKwkJcmV0dXJuIGhhbmRsZXJRdWV1ZTsKKwl9LAorCisJLy8gSW5jbHVkZXMgc29tZSBldmVudCBwcm9wcyBzaGFyZWQgYnkgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQKKwlwcm9wczogKCAiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZGV0YWlsIGV2ZW50UGhhc2UgIiArCisJCSJtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIiApLnNwbGl0KCAiICIgKSwKKworCWZpeEhvb2tzOiB7fSwKKworCWtleUhvb2tzOiB7CisJCXByb3BzOiAiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoICIgIiApLAorCQlmaWx0ZXI6IGZ1bmN0aW9uKCBldmVudCwgb3JpZ2luYWwgKSB7CisKKwkJCS8vIEFkZCB3aGljaCBmb3Iga2V5IGV2ZW50cworCQkJaWYgKCBldmVudC53aGljaCA9PSBudWxsICkgeworCQkJCWV2ZW50LndoaWNoID0gb3JpZ2luYWwuY2hhckNvZGUgIT0gbnVsbCA/IG9yaWdpbmFsLmNoYXJDb2RlIDogb3JpZ2luYWwua2V5Q29kZTsKKwkJCX0KKworCQkJcmV0dXJuIGV2ZW50OworCQl9CisJfSwKKworCW1vdXNlSG9va3M6IHsKKwkJcHJvcHM6ICggImJ1dHRvbiBidXR0b25zIGNsaWVudFggY2xpZW50WSBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgIiArCisJCQkic2NyZWVuWCBzY3JlZW5ZIHRvRWxlbWVudCIgKS5zcGxpdCggIiAiICksCisJCWZpbHRlcjogZnVuY3Rpb24oIGV2ZW50LCBvcmlnaW5hbCApIHsKKwkJCXZhciBldmVudERvYywgZG9jLCBib2R5LAorCQkJCWJ1dHRvbiA9IG9yaWdpbmFsLmJ1dHRvbjsKKworCQkJLy8gQ2FsY3VsYXRlIHBhZ2VYL1kgaWYgbWlzc2luZyBhbmQgY2xpZW50WC9ZIGF2YWlsYWJsZQorCQkJaWYgKCBldmVudC5wYWdlWCA9PSBudWxsICYmIG9yaWdpbmFsLmNsaWVudFggIT0gbnVsbCApIHsKKwkJCQlldmVudERvYyA9IGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50OworCQkJCWRvYyA9IGV2ZW50RG9jLmRvY3VtZW50RWxlbWVudDsKKwkJCQlib2R5ID0gZXZlbnREb2MuYm9keTsKKworCQkJCWV2ZW50LnBhZ2VYID0gb3JpZ2luYWwuY2xpZW50WCArCisJCQkJCSggZG9jICYmIGRvYy5zY3JvbGxMZWZ0IHx8IGJvZHkgJiYgYm9keS5zY3JvbGxMZWZ0IHx8IDAgKSAtCisJCQkJCSggZG9jICYmIGRvYy5jbGllbnRMZWZ0IHx8IGJvZHkgJiYgYm9keS5jbGllbnRMZWZ0IHx8IDAgKTsKKwkJCQlldmVudC5wYWdlWSA9IG9yaWdpbmFsLmNsaWVudFkgKworCQkJCQkoIGRvYyAmJiBkb2Muc2Nyb2xsVG9wICB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsVG9wICB8fCAwICkgLQorCQkJCQkoIGRvYyAmJiBkb2MuY2xpZW50VG9wICB8fCBib2R5ICYmIGJvZHkuY2xpZW50VG9wICB8fCAwICk7CisJCQl9CisKKwkJCS8vIEFkZCB3aGljaCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHQKKwkJCS8vIE5vdGU6IGJ1dHRvbiBpcyBub3Qgbm9ybWFsaXplZCwgc28gZG9uJ3QgdXNlIGl0CisJCQlpZiAoICFldmVudC53aGljaCAmJiBidXR0b24gIT09IHVuZGVmaW5lZCApIHsKKwkJCQlldmVudC53aGljaCA9ICggYnV0dG9uICYgMSA/IDEgOiAoIGJ1dHRvbiAmIDIgPyAzIDogKCBidXR0b24gJiA0ID8gMiA6IDAgKSApICk7CisJCQl9CisKKwkJCXJldHVybiBldmVudDsKKwkJfQorCX0sCisKKwlmaXg6IGZ1bmN0aW9uKCBldmVudCApIHsKKwkJaWYgKCBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSApIHsKKwkJCXJldHVybiBldmVudDsKKwkJfQorCisJCS8vIENyZWF0ZSBhIHdyaXRhYmxlIGNvcHkgb2YgdGhlIGV2ZW50IG9iamVjdCBhbmQgbm9ybWFsaXplIHNvbWUgcHJvcGVydGllcworCQl2YXIgaSwgcHJvcCwgY29weSwKKwkJCXR5cGUgPSBldmVudC50eXBlLAorCQkJb3JpZ2luYWxFdmVudCA9IGV2ZW50LAorCQkJZml4SG9vayA9IHRoaXMuZml4SG9va3NbIHR5cGUgXTsKKworCQlpZiAoICFmaXhIb29rICkgeworCQkJdGhpcy5maXhIb29rc1sgdHlwZSBdID0gZml4SG9vayA9CisJCQkJcm1vdXNlRXZlbnQudGVzdCggdHlwZSApID8gdGhpcy5tb3VzZUhvb2tzIDoKKwkJCQlya2V5RXZlbnQudGVzdCggdHlwZSApID8gdGhpcy5rZXlIb29rcyA6CisJCQkJe307CisJCX0KKwkJY29weSA9IGZpeEhvb2sucHJvcHMgPyB0aGlzLnByb3BzLmNvbmNhdCggZml4SG9vay5wcm9wcyApIDogdGhpcy5wcm9wczsKKworCQlldmVudCA9IG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTsKKworCQlpID0gY29weS5sZW5ndGg7CisJCXdoaWxlICggaS0tICkgeworCQkJcHJvcCA9IGNvcHlbIGkgXTsKKwkJCWV2ZW50WyBwcm9wIF0gPSBvcmlnaW5hbEV2ZW50WyBwcm9wIF07CisJCX0KKworCQkvLyBTdXBwb3J0OiBDb3Jkb3ZhIDIuNSAoV2ViS2l0KSAoIzEzMjU1KQorCQkvLyBBbGwgZXZlbnRzIHNob3VsZCBoYXZlIGEgdGFyZ2V0OyBDb3Jkb3ZhIGRldmljZXJlYWR5IGRvZXNuJ3QKKwkJaWYgKCAhZXZlbnQudGFyZ2V0ICkgeworCQkJZXZlbnQudGFyZ2V0ID0gZG9jdW1lbnQ7CisJCX0KKworCQkvLyBTdXBwb3J0OiBTYWZhcmkgNi4wKywgQ2hyb21lPDI4CisJCS8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICgjNTA0LCAjMTMxNDMpCisJCWlmICggZXZlbnQudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkgeworCQkJZXZlbnQudGFyZ2V0ID0gZXZlbnQudGFyZ2V0LnBhcmVudE5vZGU7CisJCX0KKworCQlyZXR1cm4gZml4SG9vay5maWx0ZXIgPyBmaXhIb29rLmZpbHRlciggZXZlbnQsIG9yaWdpbmFsRXZlbnQgKSA6IGV2ZW50OworCX0sCisKKwlzcGVjaWFsOiB7CisJCWxvYWQ6IHsKKworCQkJLy8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZAorCQkJbm9CdWJibGU6IHRydWUKKwkJfSwKKwkJZm9jdXM6IHsKKworCQkJLy8gRmlyZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0CisJCQl0cmlnZ2VyOiBmdW5jdGlvbigpIHsKKwkJCQlpZiAoIHRoaXMgIT09IHNhZmVBY3RpdmVFbGVtZW50KCkgJiYgdGhpcy5mb2N1cyApIHsKKwkJCQkJdGhpcy5mb2N1cygpOworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfSwKKwkJCWRlbGVnYXRlVHlwZTogImZvY3VzaW4iCisJCX0sCisJCWJsdXI6IHsKKwkJCXRyaWdnZXI6IGZ1bmN0aW9uKCkgeworCQkJCWlmICggdGhpcyA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSAmJiB0aGlzLmJsdXIgKSB7CisJCQkJCXRoaXMuYmx1cigpOworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfSwKKwkJCWRlbGVnYXRlVHlwZTogImZvY3Vzb3V0IgorCQl9LAorCQljbGljazogeworCisJCQkvLyBGb3IgY2hlY2tib3gsIGZpcmUgbmF0aXZlIGV2ZW50IHNvIGNoZWNrZWQgc3RhdGUgd2lsbCBiZSByaWdodAorCQkJdHJpZ2dlcjogZnVuY3Rpb24oKSB7CisJCQkJaWYgKCB0aGlzLnR5cGUgPT09ICJjaGVja2JveCIgJiYgdGhpcy5jbGljayAmJiBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJpbnB1dCIgKSApIHsKKwkJCQkJdGhpcy5jbGljaygpOworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfSwKKworCQkJLy8gRm9yIGNyb3NzLWJyb3dzZXIgY29uc2lzdGVuY3ksIGRvbid0IGZpcmUgbmF0aXZlIC5jbGljaygpIG9uIGxpbmtzCisJCQlfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkgeworCQkJCXJldHVybiBqUXVlcnkubm9kZU5hbWUoIGV2ZW50LnRhcmdldCwgImEiICk7CisJCQl9CisJCX0sCisKKwkJYmVmb3JldW5sb2FkOiB7CisJCQlwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHsKKworCQkJCS8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArCisJCQkJLy8gRmlyZWZveCBkb2Vzbid0IGFsZXJ0IGlmIHRoZSByZXR1cm5WYWx1ZSBmaWVsZCBpcyBub3Qgc2V0LgorCQkJCWlmICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudCApIHsKKwkJCQkJZXZlbnQub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGV2ZW50LnJlc3VsdDsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9OworCitqUXVlcnkucmVtb3ZlRXZlbnQgPSBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkgeworCisJLy8gVGhpcyAiaWYiIGlzIG5lZWRlZCBmb3IgcGxhaW4gb2JqZWN0cworCWlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkgeworCQllbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGhhbmRsZSApOworCX0KK307CisKK2pRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkgeworCisJLy8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkCisJaWYgKCAhKCB0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50ICkgKSB7CisJCXJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7CisJfQorCisJLy8gRXZlbnQgb2JqZWN0CisJaWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7CisJCXRoaXMub3JpZ2luYWxFdmVudCA9IHNyYzsKKwkJdGhpcy50eXBlID0gc3JjLnR5cGU7CisKKwkJLy8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWQKKwkJLy8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuCisJCXRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHwKKwkJCQlzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmCisKKwkJCQkvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMAorCQkJCXNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgPworCQkJcmV0dXJuVHJ1ZSA6CisJCQlyZXR1cm5GYWxzZTsKKworCS8vIEV2ZW50IHR5cGUKKwl9IGVsc2UgeworCQl0aGlzLnR5cGUgPSBzcmM7CisJfQorCisJLy8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3QKKwlpZiAoIHByb3BzICkgeworCQlqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApOworCX0KKworCS8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lCisJdGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBqUXVlcnkubm93KCk7CisKKwkvLyBNYXJrIGl0IGFzIGZpeGVkCisJdGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7Cit9OworCisvLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmcKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAoralF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHsKKwljb25zdHJ1Y3RvcjogalF1ZXJ5LkV2ZW50LAorCWlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsCisJaXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLAorCWlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKKwlpc1NpbXVsYXRlZDogZmFsc2UsCisKKwlwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7CisJCXZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OworCisJCXRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTsKKworCQlpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7CisJCQllLnByZXZlbnREZWZhdWx0KCk7CisJCX0KKwl9LAorCXN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7CisJCXZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OworCisJCXRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOworCisJCWlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHsKKwkJCWUuc3RvcFByb3BhZ2F0aW9uKCk7CisJCX0KKwl9LAorCXN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7CisJCXZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OworCisJCXRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOworCisJCWlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHsKKwkJCWUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CisJCX0KKworCQl0aGlzLnN0b3BQcm9wYWdhdGlvbigpOworCX0KK307CisKKy8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrcworLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0aW9uIHdvcmtzIGluIGpRdWVyeS4KKy8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0CisvLworLy8gU3VwcG9ydDogU2FmYXJpIDcgb25seQorLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6CisvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDcwMjU4CisvLyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBidWcgKGl0IGV4aXN0ZWQgaW4gb2xkZXIgQ2hyb21lIHZlcnNpb25zIGFzIHdlbGwpLgoralF1ZXJ5LmVhY2goIHsKKwltb3VzZWVudGVyOiAibW91c2VvdmVyIiwKKwltb3VzZWxlYXZlOiAibW91c2VvdXQiLAorCXBvaW50ZXJlbnRlcjogInBvaW50ZXJvdmVyIiwKKwlwb2ludGVybGVhdmU6ICJwb2ludGVyb3V0IgorfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHsKKwlqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0geworCQlkZWxlZ2F0ZVR5cGU6IGZpeCwKKwkJYmluZFR5cGU6IGZpeCwKKworCQloYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHsKKwkJCXZhciByZXQsCisJCQkJdGFyZ2V0ID0gdGhpcywKKwkJCQlyZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCwKKwkJCQloYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7CisKKwkJCS8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuCisJCQkvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvdworCQkJaWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkgeworCQkJCWV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7CisJCQkJcmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworCQkJCWV2ZW50LnR5cGUgPSBmaXg7CisJCQl9CisJCQlyZXR1cm4gcmV0OworCQl9CisJfTsKK30gKTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCW9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHsKKwkJcmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7CisJfSwKKwlvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkgeworCQlyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTsKKwl9LAorCW9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4gKSB7CisJCXZhciBoYW5kbGVPYmosIHR5cGU7CisJCWlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkgeworCisJCQkvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50CisJCQloYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7CisJCQlqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKAorCQkJCWhhbmRsZU9iai5uYW1lc3BhY2UgPworCQkJCQloYW5kbGVPYmoub3JpZ1R5cGUgKyAiLiIgKyBoYW5kbGVPYmoubmFtZXNwYWNlIDoKKwkJCQkJaGFuZGxlT2JqLm9yaWdUeXBlLAorCQkJCWhhbmRsZU9iai5zZWxlY3RvciwKKwkJCQloYW5kbGVPYmouaGFuZGxlcgorCQkJKTsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWlmICggdHlwZW9mIHR5cGVzID09PSAib2JqZWN0IiApIHsKKworCQkJLy8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdICkKKwkJCWZvciAoIHR5cGUgaW4gdHlwZXMgKSB7CisJCQkJdGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7CisJCQl9CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQlpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJmdW5jdGlvbiIgKSB7CisKKwkJCS8vICggdHlwZXMgWywgZm5dICkKKwkJCWZuID0gc2VsZWN0b3I7CisJCQlzZWxlY3RvciA9IHVuZGVmaW5lZDsKKwkJfQorCQlpZiAoIGZuID09PSBmYWxzZSApIHsKKwkJCWZuID0gcmV0dXJuRmFsc2U7CisJCX0KKwkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisJCQlqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7CisJCX0gKTsKKwl9Cit9ICk7CisKKwordmFyCisJcnhodG1sVGFnID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Oi1dKylbXj5dKilcLz4vZ2ksCisKKwkvLyBTdXBwb3J0OiBJRSAxMC0xMSwgRWRnZSAxMDI0MCsKKwkvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLgorCS8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvCisJcm5vSW5uZXJodG1sID0gLzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksCisKKwkvLyBjaGVja2VkPSJjaGVja2VkIiBvciBjaGVja2VkCisJcmNoZWNrZWQgPSAvY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSwKKwlyc2NyaXB0VHlwZU1hc2tlZCA9IC9edHJ1ZVwvKC4qKS8sCisJcmNsZWFuU2NyaXB0ID0gL15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nOworCisvLyBNYW5pcHVsYXRpbmcgdGFibGVzIHJlcXVpcmVzIGEgdGJvZHkKK2Z1bmN0aW9uIG1hbmlwdWxhdGlvblRhcmdldCggZWxlbSwgY29udGVudCApIHsKKwlyZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAidGFibGUiICkgJiYKKwkJalF1ZXJ5Lm5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsICJ0ciIgKSA/CisKKwkJZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSggInRib2R5IiApWyAwIF0gfHwKKwkJCWVsZW0uYXBwZW5kQ2hpbGQoIGVsZW0ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCAidGJvZHkiICkgKSA6CisJCWVsZW07Cit9CisKKy8vIFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0IGVsZW1lbnRzIGZvciBzYWZlIERPTSBtYW5pcHVsYXRpb24KK2Z1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7CisJZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggInR5cGUiICkgIT09IG51bGwgKSArICIvIiArIGVsZW0udHlwZTsKKwlyZXR1cm4gZWxlbTsKK30KK2Z1bmN0aW9uIHJlc3RvcmVTY3JpcHQoIGVsZW0gKSB7CisJdmFyIG1hdGNoID0gcnNjcmlwdFR5cGVNYXNrZWQuZXhlYyggZWxlbS50eXBlICk7CisKKwlpZiAoIG1hdGNoICkgeworCQllbGVtLnR5cGUgPSBtYXRjaFsgMSBdOworCX0gZWxzZSB7CisJCWVsZW0ucmVtb3ZlQXR0cmlidXRlKCAidHlwZSIgKTsKKwl9CisKKwlyZXR1cm4gZWxlbTsKK30KKworZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHsKKwl2YXIgaSwgbCwgdHlwZSwgcGRhdGFPbGQsIHBkYXRhQ3VyLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50czsKKworCWlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHsKKwkJcmV0dXJuOworCX0KKworCS8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuCisJaWYgKCBkYXRhUHJpdi5oYXNEYXRhKCBzcmMgKSApIHsKKwkJcGRhdGFPbGQgPSBkYXRhUHJpdi5hY2Nlc3MoIHNyYyApOworCQlwZGF0YUN1ciA9IGRhdGFQcml2LnNldCggZGVzdCwgcGRhdGFPbGQgKTsKKwkJZXZlbnRzID0gcGRhdGFPbGQuZXZlbnRzOworCisJCWlmICggZXZlbnRzICkgeworCQkJZGVsZXRlIHBkYXRhQ3VyLmhhbmRsZTsKKwkJCXBkYXRhQ3VyLmV2ZW50cyA9IHt9OworCisJCQlmb3IgKCB0eXBlIGluIGV2ZW50cyApIHsKKwkJCQlmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKwkJCQkJalF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8vIDIuIENvcHkgdXNlciBkYXRhCisJaWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHsKKwkJdWRhdGFPbGQgPSBkYXRhVXNlci5hY2Nlc3MoIHNyYyApOworCQl1ZGF0YUN1ciA9IGpRdWVyeS5leHRlbmQoIHt9LCB1ZGF0YU9sZCApOworCisJCWRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTsKKwl9Cit9CisKKy8vIEZpeCBJRSBidWdzLCBzZWUgc3VwcG9ydCB0ZXN0cworZnVuY3Rpb24gZml4SW5wdXQoIHNyYywgZGVzdCApIHsKKwl2YXIgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisKKwkvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi4KKwlpZiAoIG5vZGVOYW1lID09PSAiaW5wdXQiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7CisJCWRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkOworCisJLy8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnMKKwl9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gImlucHV0IiB8fCBub2RlTmFtZSA9PT0gInRleHRhcmVhIiApIHsKKwkJZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlOworCX0KK30KKworZnVuY3Rpb24gZG9tTWFuaXAoIGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICkgeworCisJLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cworCWFyZ3MgPSBjb25jYXQuYXBwbHkoIFtdLCBhcmdzICk7CisKKwl2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2RlLCBkb2MsCisJCWkgPSAwLAorCQlsID0gY29sbGVjdGlvbi5sZW5ndGgsCisJCWlOb0Nsb25lID0gbCAtIDEsCisJCXZhbHVlID0gYXJnc1sgMCBdLAorCQlpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7CisKKwkvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXQKKwlpZiAoIGlzRnVuY3Rpb24gfHwKKwkJCSggbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJgorCQkJCSFzdXBwb3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkgeworCQlyZXR1cm4gY29sbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggaW5kZXggKSB7CisJCQl2YXIgc2VsZiA9IGNvbGxlY3Rpb24uZXEoIGluZGV4ICk7CisJCQlpZiAoIGlzRnVuY3Rpb24gKSB7CisJCQkJYXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYuaHRtbCgpICk7CisJCQl9CisJCQlkb21NYW5pcCggc2VsZiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKTsKKwkJfSApOworCX0KKworCWlmICggbCApIHsKKwkJZnJhZ21lbnQgPSBidWlsZEZyYWdtZW50KCBhcmdzLCBjb2xsZWN0aW9uWyAwIF0ub3duZXJEb2N1bWVudCwgZmFsc2UsIGNvbGxlY3Rpb24sIGlnbm9yZWQgKTsKKwkJZmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkOworCisJCWlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7CisJCQlmcmFnbWVudCA9IGZpcnN0OworCQl9CisKKwkJLy8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrCisJCWlmICggZmlyc3QgfHwgaWdub3JlZCApIHsKKwkJCXNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCAic2NyaXB0IiApLCBkaXNhYmxlU2NyaXB0ICk7CisJCQloYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7CisKKwkJCS8vIFVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0IGl0ZW0KKwkJCS8vIGluc3RlYWQgb2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cAorCQkJLy8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKCM4MDcwKS4KKwkJCWZvciAoIDsgaSA8IGw7IGkrKyApIHsKKwkJCQlub2RlID0gZnJhZ21lbnQ7CisKKwkJCQlpZiAoIGkgIT09IGlOb0Nsb25lICkgeworCQkJCQlub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7CisKKwkJCQkJLy8gS2VlcCByZWZlcmVuY2VzIHRvIGNsb25lZCBzY3JpcHRzIGZvciBsYXRlciByZXN0b3JhdGlvbgorCQkJCQlpZiAoIGhhc1NjcmlwdHMgKSB7CisKKwkJCQkJCS8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4xLCBQaGFudG9tSlM8MgorCQkJCQkJLy8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdAorCQkJCQkJalF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsICJzY3JpcHQiICkgKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCWNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApOworCQkJfQorCisJCQlpZiAoIGhhc1NjcmlwdHMgKSB7CisJCQkJZG9jID0gc2NyaXB0c1sgc2NyaXB0cy5sZW5ndGggLSAxIF0ub3duZXJEb2N1bWVudDsKKworCQkJCS8vIFJlZW5hYmxlIHNjcmlwdHMKKwkJCQlqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7CisKKwkJCQkvLyBFdmFsdWF0ZSBleGVjdXRhYmxlIHNjcmlwdHMgb24gZmlyc3QgZG9jdW1lbnQgaW5zZXJ0aW9uCisJCQkJZm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7CisJCQkJCW5vZGUgPSBzY3JpcHRzWyBpIF07CisJCQkJCWlmICggcnNjcmlwdFR5cGUudGVzdCggbm9kZS50eXBlIHx8ICIiICkgJiYKKwkJCQkJCSFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsICJnbG9iYWxFdmFsIiApICYmCisJCQkJCQlqUXVlcnkuY29udGFpbnMoIGRvYywgbm9kZSApICkgeworCisJCQkJCQlpZiAoIG5vZGUuc3JjICkgeworCisJCQkJCQkJLy8gT3B0aW9uYWwgQUpBWCBkZXBlbmRlbmN5LCBidXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYgbm90IHByZXNlbnQKKwkJCQkJCQlpZiAoIGpRdWVyeS5fZXZhbFVybCApIHsKKwkJCQkJCQkJalF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYyApOworCQkJCQkJCX0KKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJalF1ZXJ5Lmdsb2JhbEV2YWwoIG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSggcmNsZWFuU2NyaXB0LCAiIiApICk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gY29sbGVjdGlvbjsKK30KKworZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7CisJdmFyIG5vZGUsCisJCW5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSwKKwkJaSA9IDA7CisKKwlmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7CisJCWlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7CisJCQlqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUgKSApOworCQl9CisKKwkJaWYgKCBub2RlLnBhcmVudE5vZGUgKSB7CisJCQlpZiAoIGtlZXBEYXRhICYmIGpRdWVyeS5jb250YWlucyggbm9kZS5vd25lckRvY3VtZW50LCBub2RlICkgKSB7CisJCQkJc2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCAic2NyaXB0IiApICk7CisJCQl9CisJCQlub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTsKKwkJfQorCX0KKworCXJldHVybiBlbGVtOworfQorCitqUXVlcnkuZXh0ZW5kKCB7CisJaHRtbFByZWZpbHRlcjogZnVuY3Rpb24oIGh0bWwgKSB7CisJCXJldHVybiBodG1sLnJlcGxhY2UoIHJ4aHRtbFRhZywgIjwkMT48LyQyPiIgKTsKKwl9LAorCisJY2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKKwkJdmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsCisJCQljbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksCisJCQlpblBhZ2UgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApOworCisJCS8vIEZpeCBJRSBjbG9uaW5nIGlzc3VlcworCQlpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmCisJCQkJIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkgeworCisJCQkvLyBXZSBlc2NoZXcgU2l6emxlIGhlcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM6IGh0dHA6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUvMgorCQkJZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApOworCQkJc3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTsKKworCQkJZm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisJCQkJZml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7CisJCQl9CisJCX0KKworCQkvLyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lCisJCWlmICggZGF0YUFuZEV2ZW50cyApIHsKKwkJCWlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7CisJCQkJc3JjRWxlbWVudHMgPSBzcmNFbGVtZW50cyB8fCBnZXRBbGwoIGVsZW0gKTsKKwkJCQlkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApOworCisJCQkJZm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisJCQkJCWNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJY2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7CisJCQl9CisJCX0KKworCQkvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5CisJCWRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUsICJzY3JpcHQiICk7CisJCWlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7CisJCQlzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2UgJiYgZ2V0QWxsKCBlbGVtLCAic2NyaXB0IiApICk7CisJCX0KKworCQkvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXQKKwkJcmV0dXJuIGNsb25lOworCX0sCisKKwljbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHsKKwkJdmFyIGRhdGEsIGVsZW0sIHR5cGUsCisJCQlzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsCisJCQlpID0gMDsKKworCQlmb3IgKCA7ICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPT0gdW5kZWZpbmVkOyBpKysgKSB7CisJCQlpZiAoIGFjY2VwdERhdGEoIGVsZW0gKSApIHsKKwkJCQlpZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSApICkgeworCQkJCQlpZiAoIGRhdGEuZXZlbnRzICkgeworCQkJCQkJZm9yICggdHlwZSBpbiBkYXRhLmV2ZW50cyApIHsKKwkJCQkJCQlpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHsKKwkJCQkJCQkJalF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSApOworCisJCQkJCQkJLy8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZAorCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCWpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQkvLyBTdXBwb3J0OiBDaHJvbWUgPD0gMzUtNDUrCisJCQkJCS8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZQorCQkJCQllbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7CisJCQkJfQorCQkJCWlmICggZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdICkgeworCisJCQkJCS8vIFN1cHBvcnQ6IENocm9tZSA8PSAzNS00NSsKKwkJCQkJLy8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlCisJCQkJCWVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9ICk7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKworCS8vIEtlZXAgZG9tTWFuaXAgZXhwb3NlZCB1bnRpbCAzLjAgKGdoLTIyMjUpCisJZG9tTWFuaXA6IGRvbU1hbmlwLAorCisJZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisJCXJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7CisJfSwKKworCXJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworCQlyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciApOworCX0sCisKKwl0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7CisJCXJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKKwkJCXJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8KKwkJCQlqUXVlcnkudGV4dCggdGhpcyApIDoKKwkJCQl0aGlzLmVtcHR5KCkuZWFjaCggZnVuY3Rpb24oKSB7CisJCQkJCWlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkgeworCQkJCQkJdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlOworCQkJCQl9CisJCQkJfSApOworCQl9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApOworCX0sCisKKwlhcHBlbmQ6IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHsKKwkJCQl2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7CisJCQkJdGFyZ2V0LmFwcGVuZENoaWxkKCBlbGVtICk7CisJCQl9CisJCX0gKTsKKwl9LAorCisJcHJlcGVuZDogZnVuY3Rpb24oKSB7CisJCXJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKwkJCWlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkgeworCQkJCXZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTsKKwkJCQl0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZCApOworCQkJfQorCQl9ICk7CisJfSwKKworCWJlZm9yZTogZnVuY3Rpb24oKSB7CisJCXJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKwkJCWlmICggdGhpcy5wYXJlbnROb2RlICkgeworCQkJCXRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTsKKwkJCX0KKwkJfSApOworCX0sCisKKwlhZnRlcjogZnVuY3Rpb24oKSB7CisJCXJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKwkJCWlmICggdGhpcy5wYXJlbnROb2RlICkgeworCQkJCXRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTsKKwkJCX0KKwkJfSApOworCX0sCisKKwllbXB0eTogZnVuY3Rpb24oKSB7CisJCXZhciBlbGVtLAorCQkJaSA9IDA7CisKKwkJZm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7CisJCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisKKwkJCQkvLyBQcmV2ZW50IG1lbW9yeSBsZWFrcworCQkJCWpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApOworCisJCQkJLy8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXMKKwkJCQllbGVtLnRleHRDb250ZW50ID0gIiI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJY2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKKwkJZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50czsKKwkJZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzOworCisJCXJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7CisJCQlyZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApOworCQl9ICk7CisJfSwKKworCWh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKwkJcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgeworCQkJdmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sCisJCQkJaSA9IDAsCisJCQkJbCA9IHRoaXMubGVuZ3RoOworCisJCQlpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKwkJCQlyZXR1cm4gZWxlbS5pbm5lckhUTUw7CisJCQl9CisKKwkJCS8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUwKKwkJCWlmICggdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiAhcm5vSW5uZXJodG1sLnRlc3QoIHZhbHVlICkgJiYKKwkJCQkhd3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgIiIsICIiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHsKKworCQkJCXZhbHVlID0galF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIHZhbHVlICk7CisKKwkJCQl0cnkgeworCQkJCQlmb3IgKCA7IGkgPCBsOyBpKysgKSB7CisJCQkJCQllbGVtID0gdGhpc1sgaSBdIHx8IHt9OworCisJCQkJCQkvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3MKKwkJCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKwkJCQkJCQlqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTsKKwkJCQkJCQllbGVtLmlubmVySFRNTCA9IHZhbHVlOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJZWxlbSA9IDA7CisKKwkJCQkvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2QKKwkJCQl9IGNhdGNoICggZSApIHt9CisJCQl9CisKKwkJCWlmICggZWxlbSApIHsKKwkJCQl0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApOworCQkJfQorCQl9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApOworCX0sCisKKwlyZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7CisJCXZhciBpZ25vcmVkID0gW107CisKKwkJLy8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50CisJCXJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKwkJCXZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7CisKKwkJCWlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7CisJCQkJalF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTsKKwkJCQlpZiAoIHBhcmVudCApIHsKKwkJCQkJcGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApOworCQkJCX0KKwkJCX0KKworCQkvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uCisJCX0sIGlnbm9yZWQgKTsKKwl9Cit9ICk7CisKK2pRdWVyeS5lYWNoKCB7CisJYXBwZW5kVG86ICJhcHBlbmQiLAorCXByZXBlbmRUbzogInByZXBlbmQiLAorCWluc2VydEJlZm9yZTogImJlZm9yZSIsCisJaW5zZXJ0QWZ0ZXI6ICJhZnRlciIsCisJcmVwbGFjZUFsbDogInJlcGxhY2VXaXRoIgorfSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkgeworCWpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkgeworCQl2YXIgZWxlbXMsCisJCQlyZXQgPSBbXSwKKwkJCWluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSwKKwkJCWxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSwKKwkJCWkgPSAwOworCisJCWZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7CisJCQllbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApOworCQkJalF1ZXJ5KCBpbnNlcnRbIGkgXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApOworCisJCQkvLyBTdXBwb3J0OiBRdFdlYktpdAorCQkJLy8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cworCQkJcHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApOworCQl9CisKKwkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQgKTsKKwl9OworfSApOworCisKK3ZhciBpZnJhbWUsCisJZWxlbWRpc3BsYXkgPSB7CisKKwkJLy8gU3VwcG9ydDogRmlyZWZveAorCQkvLyBXZSBoYXZlIHRvIHByZS1kZWZpbmUgdGhlc2UgdmFsdWVzIGZvciBGRiAoIzEwMjI3KQorCQlIVE1MOiAiYmxvY2siLAorCQlCT0RZOiAiYmxvY2siCisJfTsKKworLyoqCisgKiBSZXRyaWV2ZSB0aGUgYWN0dWFsIGRpc3BsYXkgb2YgYSBlbGVtZW50CisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBub2RlTmFtZSBvZiB0aGUgZWxlbWVudAorICogQHBhcmFtIHtPYmplY3R9IGRvYyBEb2N1bWVudCBvYmplY3QKKyAqLworCisvLyBDYWxsZWQgb25seSBmcm9tIHdpdGhpbiBkZWZhdWx0RGlzcGxheQorZnVuY3Rpb24gYWN0dWFsRGlzcGxheSggbmFtZSwgZG9jICkgeworCXZhciBlbGVtID0galF1ZXJ5KCBkb2MuY3JlYXRlRWxlbWVudCggbmFtZSApICkuYXBwZW5kVG8oIGRvYy5ib2R5ICksCisKKwkJZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW1bIDAgXSwgImRpc3BsYXkiICk7CisKKwkvLyBXZSBkb24ndCBoYXZlIGFueSBkYXRhIHN0b3JlZCBvbiB0aGUgZWxlbWVudCwKKwkvLyBzbyB1c2UgImRldGFjaCIgbWV0aG9kIGFzIGZhc3Qgd2F5IHRvIGdldCByaWQgb2YgdGhlIGVsZW1lbnQKKwllbGVtLmRldGFjaCgpOworCisJcmV0dXJuIGRpc3BsYXk7Cit9CisKKy8qKgorICogVHJ5IHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBkaXNwbGF5IHZhbHVlIG9mIGFuIGVsZW1lbnQKKyAqIEBwYXJhbSB7U3RyaW5nfSBub2RlTmFtZQorICovCitmdW5jdGlvbiBkZWZhdWx0RGlzcGxheSggbm9kZU5hbWUgKSB7CisJdmFyIGRvYyA9IGRvY3VtZW50LAorCQlkaXNwbGF5ID0gZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF07CisKKwlpZiAoICFkaXNwbGF5ICkgeworCQlkaXNwbGF5ID0gYWN0dWFsRGlzcGxheSggbm9kZU5hbWUsIGRvYyApOworCisJCS8vIElmIHRoZSBzaW1wbGUgd2F5IGZhaWxzLCByZWFkIGZyb20gaW5zaWRlIGFuIGlmcmFtZQorCQlpZiAoIGRpc3BsYXkgPT09ICJub25lIiB8fCAhZGlzcGxheSApIHsKKworCQkJLy8gVXNlIHRoZSBhbHJlYWR5LWNyZWF0ZWQgaWZyYW1lIGlmIHBvc3NpYmxlCisJCQlpZnJhbWUgPSAoIGlmcmFtZSB8fCBqUXVlcnkoICI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJy8+IiApICkKKwkJCQkuYXBwZW5kVG8oIGRvYy5kb2N1bWVudEVsZW1lbnQgKTsKKworCQkJLy8gQWx3YXlzIHdyaXRlIGEgbmV3IEhUTUwgc2tlbGV0b24gc28gV2Via2l0IGFuZCBGaXJlZm94IGRvbid0IGNob2tlIG9uIHJldXNlCisJCQlkb2MgPSBpZnJhbWVbIDAgXS5jb250ZW50RG9jdW1lbnQ7CisKKwkJCS8vIFN1cHBvcnQ6IElFCisJCQlkb2Mud3JpdGUoKTsKKwkJCWRvYy5jbG9zZSgpOworCisJCQlkaXNwbGF5ID0gYWN0dWFsRGlzcGxheSggbm9kZU5hbWUsIGRvYyApOworCQkJaWZyYW1lLmRldGFjaCgpOworCQl9CisKKwkJLy8gU3RvcmUgdGhlIGNvcnJlY3QgZGVmYXVsdCBkaXNwbGF5CisJCWVsZW1kaXNwbGF5WyBub2RlTmFtZSBdID0gZGlzcGxheTsKKwl9CisKKwlyZXR1cm4gZGlzcGxheTsKK30KK3ZhciBybWFyZ2luID0gKCAvXm1hcmdpbi8gKTsKKwordmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoICJeKCIgKyBwbnVtICsgIikoPyFweClbYS16JV0rJCIsICJpIiApOworCit2YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7CisKKwkJLy8gU3VwcG9ydDogSUU8PTExKywgRmlyZWZveDw9MzArICgjMTUwOTgsICMxNDE1MCkKKwkJLy8gSUUgdGhyb3dzIG9uIGVsZW1lbnRzIGNyZWF0ZWQgaW4gcG9wdXBzCisJCS8vIEZGIG1lYW53aGlsZSB0aHJvd3Mgb24gZnJhbWUgZWxlbWVudHMgdGhyb3VnaCAiZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSIKKwkJdmFyIHZpZXcgPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7CisKKwkJaWYgKCAhdmlldyB8fCAhdmlldy5vcGVuZXIgKSB7CisJCQl2aWV3ID0gd2luZG93OworCQl9CisKKwkJcmV0dXJuIHZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSApOworCX07CisKK3ZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrLCBhcmdzICkgeworCXZhciByZXQsIG5hbWUsCisJCW9sZCA9IHt9OworCisJLy8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzCisJZm9yICggbmFtZSBpbiBvcHRpb25zICkgeworCQlvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTsKKwkJZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdOworCX0KKworCXJldCA9IGNhbGxiYWNrLmFwcGx5KCBlbGVtLCBhcmdzIHx8IFtdICk7CisKKwkvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXMKKwlmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7CisJCWVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdOworCX0KKworCXJldHVybiByZXQ7Cit9OworCisKK3ZhciBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CisKKworCisoIGZ1bmN0aW9uKCkgeworCXZhciBwaXhlbFBvc2l0aW9uVmFsLCBib3hTaXppbmdSZWxpYWJsZVZhbCwgcGl4ZWxNYXJnaW5SaWdodFZhbCwgcmVsaWFibGVNYXJnaW5MZWZ0VmFsLAorCQljb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApLAorCQlkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApOworCisJLy8gRmluaXNoIGVhcmx5IGluIGxpbWl0ZWQgKG5vbi1icm93c2VyKSBlbnZpcm9ubWVudHMKKwlpZiAoICFkaXYuc3R5bGUgKSB7CisJCXJldHVybjsKKwl9CisKKwkvLyBTdXBwb3J0OiBJRTktMTErCisJLy8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3VyY2UgZWxlbWVudCBjbG9uZWQgKCM4OTA4KQorCWRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9ICJjb250ZW50LWJveCI7CisJZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gIiI7CisJc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09ICJjb250ZW50LWJveCI7CisKKwljb250YWluZXIuc3R5bGUuY3NzVGV4dCA9ICJib3JkZXI6MDt3aWR0aDo4cHg7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4OyIgKworCQkicGFkZGluZzowO21hcmdpbi10b3A6MXB4O3Bvc2l0aW9uOmFic29sdXRlIjsKKwljb250YWluZXIuYXBwZW5kQ2hpbGQoIGRpdiApOworCisJLy8gRXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBvbmUgbGF5b3V0CisJLy8gc28gdGhleSdyZSBleGVjdXRlZCBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgdGhlIHNlY29uZCBjb21wdXRhdGlvbi4KKwlmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHsKKwkJZGl2LnN0eWxlLmNzc1RleHQgPQorCisJCQkvLyBTdXBwb3J0OiBGaXJlZm94PDI5LCBBbmRyb2lkIDIuMworCQkJLy8gVmVuZG9yLXByZWZpeCBib3gtc2l6aW5nCisJCQkiLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94OyIgKworCQkJInBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7IiArCisJCQkibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDsiICsKKwkJCSJ0b3A6MSU7d2lkdGg6NTAlIjsKKwkJZGl2LmlubmVySFRNTCA9ICIiOworCQlkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApOworCisJCXZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTsKKwkJcGl4ZWxQb3NpdGlvblZhbCA9IGRpdlN0eWxlLnRvcCAhPT0gIjElIjsKKwkJcmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gZGl2U3R5bGUubWFyZ2luTGVmdCA9PT0gIjJweCI7CisJCWJveFNpemluZ1JlbGlhYmxlVmFsID0gZGl2U3R5bGUud2lkdGggPT09ICI0cHgiOworCisJCS8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHkKKwkJLy8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0CisJCWRpdi5zdHlsZS5tYXJnaW5SaWdodCA9ICI1MCUiOworCQlwaXhlbE1hcmdpblJpZ2h0VmFsID0gZGl2U3R5bGUubWFyZ2luUmlnaHQgPT09ICI0cHgiOworCisJCWRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7CisJfQorCisJalF1ZXJ5LmV4dGVuZCggc3VwcG9ydCwgeworCQlwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHsKKworCQkJLy8gVGhpcyB0ZXN0IGlzIGV4ZWN1dGVkIG9ubHkgb25jZSBidXQgd2Ugc3RpbGwgZG8gbWVtb2l6aW5nCisJCQkvLyBzaW5jZSB3ZSBjYW4gdXNlIHRoZSBib3hTaXppbmdSZWxpYWJsZSBwcmUtY29tcHV0aW5nLgorCQkJLy8gTm8gbmVlZCB0byBjaGVjayBpZiB0aGUgdGVzdCB3YXMgYWxyZWFkeSBwZXJmb3JtZWQsIHRob3VnaC4KKwkJCWNvbXB1dGVTdHlsZVRlc3RzKCk7CisJCQlyZXR1cm4gcGl4ZWxQb3NpdGlvblZhbDsKKwkJfSwKKwkJYm94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkgeworCQkJaWYgKCBib3hTaXppbmdSZWxpYWJsZVZhbCA9PSBudWxsICkgeworCQkJCWNvbXB1dGVTdHlsZVRlc3RzKCk7CisJCQl9CisJCQlyZXR1cm4gYm94U2l6aW5nUmVsaWFibGVWYWw7CisJCX0sCisJCXBpeGVsTWFyZ2luUmlnaHQ6IGZ1bmN0aW9uKCkgeworCisJCQkvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMC00LjMKKwkJCS8vIFdlJ3JlIGNoZWNraW5nIGZvciBib3hTaXppbmdSZWxpYWJsZVZhbCBoZXJlIGluc3RlYWQgb2YgcGl4ZWxNYXJnaW5SaWdodFZhbAorCQkJLy8gc2luY2UgdGhhdCBjb21wcmVzc2VzIGJldHRlciBhbmQgdGhleSdyZSBjb21wdXRlZCB0b2dldGhlciBhbnl3YXkuCisJCQlpZiAoIGJveFNpemluZ1JlbGlhYmxlVmFsID09IG51bGwgKSB7CisJCQkJY29tcHV0ZVN0eWxlVGVzdHMoKTsKKwkJCX0KKwkJCXJldHVybiBwaXhlbE1hcmdpblJpZ2h0VmFsOworCQl9LAorCQlyZWxpYWJsZU1hcmdpbkxlZnQ6IGZ1bmN0aW9uKCkgeworCisJCQkvLyBTdXBwb3J0OiBJRSA8PTggb25seSwgQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgRmlyZWZveCA8PTMgLSAzNworCQkJaWYgKCBib3hTaXppbmdSZWxpYWJsZVZhbCA9PSBudWxsICkgeworCQkJCWNvbXB1dGVTdHlsZVRlc3RzKCk7CisJCQl9CisJCQlyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsOworCQl9LAorCQlyZWxpYWJsZU1hcmdpblJpZ2h0OiBmdW5jdGlvbigpIHsKKworCQkJLy8gU3VwcG9ydDogQW5kcm9pZCAyLjMKKwkJCS8vIENoZWNrIGlmIGRpdiB3aXRoIGV4cGxpY2l0IHdpZHRoIGFuZCBubyBtYXJnaW4tcmlnaHQgaW5jb3JyZWN0bHkKKwkJCS8vIGdldHMgY29tcHV0ZWQgbWFyZ2luLXJpZ2h0IGJhc2VkIG9uIHdpZHRoIG9mIGNvbnRhaW5lci4gKCMzMzMzKQorCQkJLy8gV2ViS2l0IEJ1ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyB3cm9uZyB2YWx1ZSBmb3IgbWFyZ2luLXJpZ2h0CisJCQkvLyBUaGlzIHN1cHBvcnQgZnVuY3Rpb24gaXMgb25seSBleGVjdXRlZCBvbmNlIHNvIG5vIG1lbW9pemluZyBpcyBuZWVkZWQuCisJCQl2YXIgcmV0LAorCQkJCW1hcmdpbkRpdiA9IGRpdi5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKSApOworCisJCQkvLyBSZXNldCBDU1M6IGJveC1zaXppbmc7IGRpc3BsYXk7IG1hcmdpbjsgYm9yZGVyOyBwYWRkaW5nCisJCQltYXJnaW5EaXYuc3R5bGUuY3NzVGV4dCA9IGRpdi5zdHlsZS5jc3NUZXh0ID0KKworCQkJCS8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zCisJCQkJLy8gVmVuZG9yLXByZWZpeCBib3gtc2l6aW5nCisJCQkJIi13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94OyIgKworCQkJCSJkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MCI7CisJCQltYXJnaW5EaXYuc3R5bGUubWFyZ2luUmlnaHQgPSBtYXJnaW5EaXYuc3R5bGUud2lkdGggPSAiMCI7CisJCQlkaXYuc3R5bGUud2lkdGggPSAiMXB4IjsKKwkJCWRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICk7CisKKwkJCXJldCA9ICFwYXJzZUZsb2F0KCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggbWFyZ2luRGl2ICkubWFyZ2luUmlnaHQgKTsKKworCQkJZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTsKKwkJCWRpdi5yZW1vdmVDaGlsZCggbWFyZ2luRGl2ICk7CisKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9ICk7Cit9ICkoKTsKKworCitmdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkgeworCXZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQsCisJCXN0eWxlID0gZWxlbS5zdHlsZTsKKworCWNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7CisJcmV0ID0gY29tcHV0ZWQgPyBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXSA6IHVuZGVmaW5lZDsKKworCS8vIFN1cHBvcnQ6IE9wZXJhIDEyLjF4IG9ubHkKKwkvLyBGYWxsIGJhY2sgdG8gc3R5bGUgZXZlbiB3aXRob3V0IGNvbXB1dGVkCisJLy8gY29tcHV0ZWQgaXMgdW5kZWZpbmVkIGZvciBlbGVtcyBvbiBkb2N1bWVudCBmcmFnbWVudHMKKwlpZiAoICggcmV0ID09PSAiIiB8fCByZXQgPT09IHVuZGVmaW5lZCApICYmICFqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApICkgeworCQlyZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTsKKwl9CisKKwkvLyBTdXBwb3J0OiBJRTkKKwkvLyBnZXRQcm9wZXJ0eVZhbHVlIGlzIG9ubHkgbmVlZGVkIGZvciAuY3NzKCdmaWx0ZXInKSAoIzEyNTM3KQorCWlmICggY29tcHV0ZWQgKSB7CisKKwkJLy8gQSB0cmlidXRlIHRvIHRoZSAiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkcyIKKwkJLy8gQW5kcm9pZCBCcm93c2VyIHJldHVybnMgcGVyY2VudGFnZSBmb3Igc29tZSB2YWx1ZXMsCisJCS8vIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuCisJCS8vIFRoaXMgaXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzoKKwkJLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI3Jlc29sdmVkLXZhbHVlcworCQlpZiAoICFzdXBwb3J0LnBpeGVsTWFyZ2luUmlnaHQoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcm1hcmdpbi50ZXN0KCBuYW1lICkgKSB7CisKKwkJCS8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXMKKwkJCXdpZHRoID0gc3R5bGUud2lkdGg7CisJCQltaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoOworCQkJbWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDsKKworCQkJLy8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dAorCQkJc3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0OworCQkJcmV0ID0gY29tcHV0ZWQud2lkdGg7CisKKwkJCS8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXMKKwkJCXN0eWxlLndpZHRoID0gd2lkdGg7CisJCQlzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoOworCQkJc3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDsKKwkJfQorCX0KKworCXJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/CisKKwkJLy8gU3VwcG9ydDogSUU5LTExKworCQkvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLgorCQlyZXQgKyAiIiA6CisJCXJldDsKK30KKworCitmdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7CisKKwkvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLgorCXJldHVybiB7CisJCWdldDogZnVuY3Rpb24oKSB7CisJCQlpZiAoIGNvbmRpdGlvbkZuKCkgKSB7CisKKwkJCQkvLyBIb29rIG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWUKKwkJCQkvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuCisJCQkJZGVsZXRlIHRoaXMuZ2V0OworCQkJCXJldHVybjsKKwkJCX0KKworCQkJLy8gSG9vayBuZWVkZWQ7IHJlZGVmaW5lIGl0IHNvIHRoYXQgdGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4uCisJCQlyZXR1cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKwkJfQorCX07Cit9CisKKwordmFyCisKKwkvLyBTd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlCisJLy8gZXhjZXB0ICJ0YWJsZSIsICJ0YWJsZS1jZWxsIiwgb3IgInRhYmxlLWNhcHRpb24iCisJLy8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5CisJcmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLAorCisJY3NzU2hvdyA9IHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIHZpc2liaWxpdHk6ICJoaWRkZW4iLCBkaXNwbGF5OiAiYmxvY2siIH0sCisJY3NzTm9ybWFsVHJhbnNmb3JtID0geworCQlsZXR0ZXJTcGFjaW5nOiAiMCIsCisJCWZvbnRXZWlnaHQ6ICI0MDAiCisJfSwKKworCWNzc1ByZWZpeGVzID0gWyAiV2Via2l0IiwgIk8iLCAiTW96IiwgIm1zIiBdLAorCWVtcHR5U3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApLnN0eWxlOworCisvLyBSZXR1cm4gYSBjc3MgcHJvcGVydHkgbWFwcGVkIHRvIGEgcG90ZW50aWFsbHkgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5CitmdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHsKKworCS8vIFNob3J0Y3V0IGZvciBuYW1lcyB0aGF0IGFyZSBub3QgdmVuZG9yIHByZWZpeGVkCisJaWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7CisJCXJldHVybiBuYW1lOworCX0KKworCS8vIENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXMKKwl2YXIgY2FwTmFtZSA9IG5hbWVbIDAgXS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSggMSApLAorCQlpID0gY3NzUHJlZml4ZXMubGVuZ3RoOworCisJd2hpbGUgKCBpLS0gKSB7CisJCW5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTsKKwkJaWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7CisJCQlyZXR1cm4gbmFtZTsKKwkJfQorCX0KK30KKworZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHsKKworCS8vIEFueSByZWxhdGl2ZSAoKy8tKSB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW4KKwkvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnQKKwl2YXIgbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKTsKKwlyZXR1cm4gbWF0Y2hlcyA/CisKKwkJLy8gR3VhcmQgYWdhaW5zdCB1bmRlZmluZWQgInN1YnRyYWN0IiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzCisJCU1hdGgubWF4KCAwLCBtYXRjaGVzWyAyIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAzIF0gfHwgInB4IiApIDoKKwkJdmFsdWU7Cit9CisKK2Z1bmN0aW9uIGF1Z21lbnRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSwgaXNCb3JkZXJCb3gsIHN0eWxlcyApIHsKKwl2YXIgaSA9IGV4dHJhID09PSAoIGlzQm9yZGVyQm94ID8gImJvcmRlciIgOiAiY29udGVudCIgKSA/CisKKwkJLy8gSWYgd2UgYWxyZWFkeSBoYXZlIHRoZSByaWdodCBtZWFzdXJlbWVudCwgYXZvaWQgYXVnbWVudGF0aW9uCisJCTQgOgorCisJCS8vIE90aGVyd2lzZSBpbml0aWFsaXplIGZvciBob3Jpem9udGFsIG9yIHZlcnRpY2FsIHByb3BlcnRpZXMKKwkJbmFtZSA9PT0gIndpZHRoIiA/IDEgOiAwLAorCisJCXZhbCA9IDA7CisKKwlmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7CisKKwkJLy8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luLCBzbyBhZGQgaXQgaWYgd2Ugd2FudCBpdAorCQlpZiAoIGV4dHJhID09PSAibWFyZ2luIiApIHsKKwkJCXZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCBleHRyYSArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTsKKwkJfQorCisJCWlmICggaXNCb3JkZXJCb3ggKSB7CisKKwkJCS8vIGJvcmRlci1ib3ggaW5jbHVkZXMgcGFkZGluZywgc28gcmVtb3ZlIGl0IGlmIHdlIHdhbnQgY29udGVudAorCQkJaWYgKCBleHRyYSA9PT0gImNvbnRlbnQiICkgeworCQkJCXZhbCAtPSBqUXVlcnkuY3NzKCBlbGVtLCAicGFkZGluZyIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7CisJCQl9CisKKwkJCS8vIEF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGJvcmRlciBub3IgbWFyZ2luLCBzbyByZW1vdmUgYm9yZGVyCisJCQlpZiAoIGV4dHJhICE9PSAibWFyZ2luIiApIHsKKwkJCQl2YWwgLT0galF1ZXJ5LmNzcyggZWxlbSwgImJvcmRlciIgKyBjc3NFeHBhbmRbIGkgXSArICJXaWR0aCIsIHRydWUsIHN0eWxlcyApOworCQkJfQorCQl9IGVsc2UgeworCisJCQkvLyBBdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50LCBzbyBhZGQgcGFkZGluZworCQkJdmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sICJwYWRkaW5nIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTsKKworCQkJLy8gQXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgY29udGVudCBub3IgcGFkZGluZywgc28gYWRkIGJvcmRlcgorCQkJaWYgKCBleHRyYSAhPT0gInBhZGRpbmciICkgeworCQkJCXZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCAiYm9yZGVyIiArIGNzc0V4cGFuZFsgaSBdICsgIldpZHRoIiwgdHJ1ZSwgc3R5bGVzICk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gdmFsOworfQorCitmdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApIHsKKworCS8vIFN0YXJ0IHdpdGggb2Zmc2V0IHByb3BlcnR5LCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIHRoZSBib3JkZXItYm94IHZhbHVlCisJdmFyIHZhbHVlSXNCb3JkZXJCb3ggPSB0cnVlLAorCQl2YWwgPSBuYW1lID09PSAid2lkdGgiID8gZWxlbS5vZmZzZXRXaWR0aCA6IGVsZW0ub2Zmc2V0SGVpZ2h0LAorCQlzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSwKKwkJaXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCAiYm94U2l6aW5nIiwgZmFsc2UsIHN0eWxlcyApID09PSAiYm9yZGVyLWJveCI7CisKKwkvLyBTb21lIG5vbi1odG1sIGVsZW1lbnRzIHJldHVybiB1bmRlZmluZWQgZm9yIG9mZnNldFdpZHRoLCBzbyBjaGVjayBmb3IgbnVsbC91bmRlZmluZWQKKwkvLyBzdmcgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02NDkyODUKKwkvLyBNYXRoTUwgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD00OTE2NjgKKwlpZiAoIHZhbCA8PSAwIHx8IHZhbCA9PSBudWxsICkgeworCisJCS8vIEZhbGwgYmFjayB0byBjb21wdXRlZCB0aGVuIHVuY29tcHV0ZWQgY3NzIGlmIG5lY2Vzc2FyeQorCQl2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApOworCQlpZiAoIHZhbCA8IDAgfHwgdmFsID09IG51bGwgKSB7CisJCQl2YWwgPSBlbGVtLnN0eWxlWyBuYW1lIF07CisJCX0KKworCQkvLyBDb21wdXRlZCB1bml0IGlzIG5vdCBwaXhlbHMuIFN0b3AgaGVyZSBhbmQgcmV0dXJuLgorCQlpZiAoIHJudW1ub25weC50ZXN0KCB2YWwgKSApIHsKKwkJCXJldHVybiB2YWw7CisJCX0KKworCQkvLyBDaGVjayBmb3Igc3R5bGUgaW4gY2FzZSBhIGJyb3dzZXIgd2hpY2ggcmV0dXJucyB1bnJlbGlhYmxlIHZhbHVlcworCQkvLyBmb3IgZ2V0Q29tcHV0ZWRTdHlsZSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIHRoZSByZWxpYWJsZSBlbGVtLnN0eWxlCisJCXZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCAmJgorCQkJKCBzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgdmFsID09PSBlbGVtLnN0eWxlWyBuYW1lIF0gKTsKKworCQkvLyBOb3JtYWxpemUgIiIsIGF1dG8sIGFuZCBwcmVwYXJlIGZvciBleHRyYQorCQl2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwOworCX0KKworCS8vIFVzZSB0aGUgYWN0aXZlIGJveC1zaXppbmcgbW9kZWwgdG8gYWRkL3N1YnRyYWN0IGlycmVsZXZhbnQgc3R5bGVzCisJcmV0dXJuICggdmFsICsKKwkJYXVnbWVudFdpZHRoT3JIZWlnaHQoCisJCQllbGVtLAorCQkJbmFtZSwKKwkJCWV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJjb250ZW50IiApLAorCQkJdmFsdWVJc0JvcmRlckJveCwKKwkJCXN0eWxlcworCQkpCisJKSArICJweCI7Cit9CisKK2Z1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHsKKwl2YXIgZGlzcGxheSwgZWxlbSwgaGlkZGVuLAorCQl2YWx1ZXMgPSBbXSwKKwkJaW5kZXggPSAwLAorCQlsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7CisKKwlmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgeworCQllbGVtID0gZWxlbWVudHNbIGluZGV4IF07CisJCWlmICggIWVsZW0uc3R5bGUgKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCXZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgIm9sZGRpc3BsYXkiICk7CisJCWRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7CisJCWlmICggc2hvdyApIHsKKworCQkJLy8gUmVzZXQgdGhlIGlubGluZSBkaXNwbGF5IG9mIHRoaXMgZWxlbWVudCB0byBsZWFybiBpZiBpdCBpcworCQkJLy8gYmVpbmcgaGlkZGVuIGJ5IGNhc2NhZGVkIHJ1bGVzIG9yIG5vdAorCQkJaWYgKCAhdmFsdWVzWyBpbmRleCBdICYmIGRpc3BsYXkgPT09ICJub25lIiApIHsKKwkJCQllbGVtLnN0eWxlLmRpc3BsYXkgPSAiIjsKKwkJCX0KKworCQkJLy8gU2V0IGVsZW1lbnRzIHdoaWNoIGhhdmUgYmVlbiBvdmVycmlkZGVuIHdpdGggZGlzcGxheTogbm9uZQorCQkJLy8gaW4gYSBzdHlsZXNoZWV0IHRvIHdoYXRldmVyIHRoZSBkZWZhdWx0IGJyb3dzZXIgc3R5bGUgaXMKKwkJCS8vIGZvciBzdWNoIGFuIGVsZW1lbnQKKwkJCWlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAiIiAmJiBpc0hpZGRlbiggZWxlbSApICkgeworCQkJCXZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmFjY2VzcygKKwkJCQkJZWxlbSwKKwkJCQkJIm9sZGRpc3BsYXkiLAorCQkJCQlkZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSApCisJCQkJKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWhpZGRlbiA9IGlzSGlkZGVuKCBlbGVtICk7CisKKwkJCWlmICggZGlzcGxheSAhPT0gIm5vbmUiIHx8ICFoaWRkZW4gKSB7CisJCQkJZGF0YVByaXYuc2V0KAorCQkJCQllbGVtLAorCQkJCQkib2xkZGlzcGxheSIsCisJCQkJCWhpZGRlbiA/IGRpc3BsYXkgOiBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKQorCQkJCSk7CisJCQl9CisJCX0KKwl9CisKKwkvLyBTZXQgdGhlIGRpc3BsYXkgb2YgbW9zdCBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcAorCS8vIHRvIGF2b2lkIHRoZSBjb25zdGFudCByZWZsb3cKKwlmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgeworCQllbGVtID0gZWxlbWVudHNbIGluZGV4IF07CisJCWlmICggIWVsZW0uc3R5bGUgKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoICFzaG93IHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIm5vbmUiIHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIiIgKSB7CisJCQllbGVtLnN0eWxlLmRpc3BsYXkgPSBzaG93ID8gdmFsdWVzWyBpbmRleCBdIHx8ICIiIDogIm5vbmUiOworCQl9CisJfQorCisJcmV0dXJuIGVsZW1lbnRzOworfQorCitqUXVlcnkuZXh0ZW5kKCB7CisKKwkvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQKKwkvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHkKKwljc3NIb29rczogeworCQlvcGFjaXR5OiB7CisJCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKKwkJCQlpZiAoIGNvbXB1dGVkICkgeworCisJCQkJCS8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5CisJCQkJCXZhciByZXQgPSBjdXJDU1MoIGVsZW0sICJvcGFjaXR5IiApOworCQkJCQlyZXR1cm4gcmV0ID09PSAiIiA/ICIxIiA6IHJldDsKKwkJCQl9CisJCQl9CisJCX0KKwl9LAorCisJLy8gRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgInB4IiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzCisJY3NzTnVtYmVyOiB7CisJCSJhbmltYXRpb25JdGVyYXRpb25Db3VudCI6IHRydWUsCisJCSJjb2x1bW5Db3VudCI6IHRydWUsCisJCSJmaWxsT3BhY2l0eSI6IHRydWUsCisJCSJmbGV4R3JvdyI6IHRydWUsCisJCSJmbGV4U2hyaW5rIjogdHJ1ZSwKKwkJImZvbnRXZWlnaHQiOiB0cnVlLAorCQkibGluZUhlaWdodCI6IHRydWUsCisJCSJvcGFjaXR5IjogdHJ1ZSwKKwkJIm9yZGVyIjogdHJ1ZSwKKwkJIm9ycGhhbnMiOiB0cnVlLAorCQkid2lkb3dzIjogdHJ1ZSwKKwkJInpJbmRleCI6IHRydWUsCisJCSJ6b29tIjogdHJ1ZQorCX0sCisKKwkvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlCisJLy8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZQorCWNzc1Byb3BzOiB7CisJCSJmbG9hdCI6ICJjc3NGbG9hdCIKKwl9LAorCisJLy8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGUKKwlzdHlsZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBleHRyYSApIHsKKworCQkvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMKKwkJaWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUKKwkJdmFyIHJldCwgdHlwZSwgaG9va3MsCisJCQlvcmlnTmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKSwKKwkJCXN0eWxlID0gZWxlbS5zdHlsZTsKKworCQluYW1lID0galF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdIHx8CisJCQkoIGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBvcmlnTmFtZSApIHx8IG9yaWdOYW1lICk7CisKKwkJLy8gR2V0cyBob29rIGZvciB0aGUgcHJlZml4ZWQgdmVyc2lvbiwgdGhlbiB1bnByZWZpeGVkIHZlcnNpb24KKwkJaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07CisKKwkJLy8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlCisJCWlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKKwkJCXR5cGUgPSB0eXBlb2YgdmFsdWU7CisKKwkJCS8vIENvbnZlcnQgIis9IiBvciAiLT0iIHRvIHJlbGF0aXZlIG51bWJlcnMgKCM3MzQ1KQorCQkJaWYgKCB0eXBlID09PSAic3RyaW5nIiAmJiAoIHJldCA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmIHJldFsgMSBdICkgeworCQkJCXZhbHVlID0gYWRqdXN0Q1NTKCBlbGVtLCBuYW1lLCByZXQgKTsKKworCQkJCS8vIEZpeGVzIGJ1ZyAjOTIzNworCQkJCXR5cGUgPSAibnVtYmVyIjsKKwkJCX0KKworCQkJLy8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICgjNzExNikKKwkJCWlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQkvLyBJZiBhIG51bWJlciB3YXMgcGFzc2VkIGluLCBhZGQgdGhlIHVuaXQgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcykKKwkJCWlmICggdHlwZSA9PT0gIm51bWJlciIgKSB7CisJCQkJdmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/ICIiIDogInB4IiApOworCQkJfQorCisJCQkvLyBTdXBwb3J0OiBJRTktMTErCisJCQkvLyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzCisJCQlpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gIiIgJiYgbmFtZS5pbmRleE9mKCAiYmFja2dyb3VuZCIgKSA9PT0gMCApIHsKKwkJCQlzdHlsZVsgbmFtZSBdID0gImluaGVyaXQiOworCQkJfQorCisJCQkvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUKKwkJCWlmICggIWhvb2tzIHx8ICEoICJzZXQiIGluIGhvb2tzICkgfHwKKwkJCQkoIHZhbHVlID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7CisKKwkJCQlzdHlsZVsgbmFtZSBdID0gdmFsdWU7CisJCQl9CisKKwkJfSBlbHNlIHsKKworCQkJLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlCisJCQlpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmCisJCQkJKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHsKKworCQkJCXJldHVybiByZXQ7CisJCQl9CisKKwkJCS8vIE90aGVyd2lzZSBqdXN0IGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0CisJCQlyZXR1cm4gc3R5bGVbIG5hbWUgXTsKKwkJfQorCX0sCisKKwljc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkgeworCQl2YXIgdmFsLCBudW0sIGhvb2tzLAorCQkJb3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICk7CisKKwkJLy8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lCisJCW5hbWUgPSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwKKwkJCSggalF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG9yaWdOYW1lICkgfHwgb3JpZ05hbWUgKTsKKworCQkvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lCisJCWhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdOworCisJCS8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlCisJCWlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgKSB7CisJCQl2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7CisJCX0KKworCQkvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdAorCQlpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkgeworCQkJdmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTsKKwkJfQorCisJCS8vIENvbnZlcnQgIm5vcm1hbCIgdG8gY29tcHV0ZWQgdmFsdWUKKwkJaWYgKCB2YWwgPT09ICJub3JtYWwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkgeworCQkJdmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07CisJCX0KKworCQkvLyBNYWtlIG51bWVyaWMgaWYgZm9yY2VkIG9yIGEgcXVhbGlmaWVyIHdhcyBwcm92aWRlZCBhbmQgdmFsIGxvb2tzIG51bWVyaWMKKwkJaWYgKCBleHRyYSA9PT0gIiIgfHwgZXh0cmEgKSB7CisJCQludW0gPSBwYXJzZUZsb2F0KCB2YWwgKTsKKwkJCXJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDsKKwkJfQorCQlyZXR1cm4gdmFsOworCX0KK30gKTsKKworalF1ZXJ5LmVhY2goIFsgImhlaWdodCIsICJ3aWR0aCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CisJalF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gPSB7CisJCWdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHsKKwkJCWlmICggY29tcHV0ZWQgKSB7CisKKwkJCQkvLyBDZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93IHRoZW0KKwkJCQkvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdAorCQkJCXJldHVybiByZGlzcGxheXN3YXAudGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkgKSAmJgorCQkJCQllbGVtLm9mZnNldFdpZHRoID09PSAwID8KKwkJCQkJCXN3YXAoIGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkgeworCQkJCQkJCXJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApOworCQkJCQkJfSApIDoKKwkJCQkJCWdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICk7CisJCQl9CisJCX0sCisKKwkJc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIGV4dHJhICkgeworCQkJdmFyIG1hdGNoZXMsCisJCQkJc3R5bGVzID0gZXh0cmEgJiYgZ2V0U3R5bGVzKCBlbGVtICksCisJCQkJc3VidHJhY3QgPSBleHRyYSAmJiBhdWdtZW50V2lkdGhPckhlaWdodCgKKwkJCQkJZWxlbSwKKwkJCQkJbmFtZSwKKwkJCQkJZXh0cmEsCisJCQkJCWpRdWVyeS5jc3MoIGVsZW0sICJib3hTaXppbmciLCBmYWxzZSwgc3R5bGVzICkgPT09ICJib3JkZXItYm94IiwKKwkJCQkJc3R5bGVzCisJCQkJKTsKKworCQkJLy8gQ29udmVydCB0byBwaXhlbHMgaWYgdmFsdWUgYWRqdXN0bWVudCBpcyBuZWVkZWQKKwkJCWlmICggc3VidHJhY3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYKKwkJCQkoIG1hdGNoZXNbIDMgXSB8fCAicHgiICkgIT09ICJweCIgKSB7CisKKwkJCQllbGVtLnN0eWxlWyBuYW1lIF0gPSB2YWx1ZTsKKwkJCQl2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTsKKwkJCX0KKworCQkJcmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKTsKKwkJfQorCX07Cit9ICk7CisKK2pRdWVyeS5jc3NIb29rcy5tYXJnaW5MZWZ0ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luTGVmdCwKKwlmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CisJCWlmICggY29tcHV0ZWQgKSB7CisJCQlyZXR1cm4gKCBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sICJtYXJnaW5MZWZ0IiApICkgfHwKKwkJCQllbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLQorCQkJCQlzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7CisJCQkJCQlyZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0OworCQkJCQl9ICkKKwkJCQkpICsgInB4IjsKKwkJfQorCX0KKyk7CisKKy8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zCitqUXVlcnkuY3NzSG9va3MubWFyZ2luUmlnaHQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodCwKKwlmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CisJCWlmICggY29tcHV0ZWQgKSB7CisJCQlyZXR1cm4gc3dhcCggZWxlbSwgeyAiZGlzcGxheSI6ICJpbmxpbmUtYmxvY2siIH0sCisJCQkJY3VyQ1NTLCBbIGVsZW0sICJtYXJnaW5SaWdodCIgXSApOworCQl9CisJfQorKTsKKworLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQgYnkgYW5pbWF0ZSB0byBleHBhbmQgcHJvcGVydGllcworalF1ZXJ5LmVhY2goIHsKKwltYXJnaW46ICIiLAorCXBhZGRpbmc6ICIiLAorCWJvcmRlcjogIldpZHRoIgorfSwgZnVuY3Rpb24oIHByZWZpeCwgc3VmZml4ICkgeworCWpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7CisJCWV4cGFuZDogZnVuY3Rpb24oIHZhbHVlICkgeworCQkJdmFyIGkgPSAwLAorCQkJCWV4cGFuZGVkID0ge30sCisKKwkJCQkvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmcKKwkJCQlwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgPyB2YWx1ZS5zcGxpdCggIiAiICkgOiBbIHZhbHVlIF07CisKKwkJCWZvciAoIDsgaSA8IDQ7IGkrKyApIHsKKwkJCQlleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9CisJCQkJCXBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTsKKwkJCX0KKworCQkJcmV0dXJuIGV4cGFuZGVkOworCQl9CisJfTsKKworCWlmICggIXJtYXJnaW4udGVzdCggcHJlZml4ICkgKSB7CisJCWpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7CisJfQorfSApOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisJY3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CisJCXJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKKwkJCXZhciBzdHlsZXMsIGxlbiwKKwkJCQltYXAgPSB7fSwKKwkJCQlpID0gMDsKKworCQkJaWYgKCBqUXVlcnkuaXNBcnJheSggbmFtZSApICkgeworCQkJCXN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApOworCQkJCWxlbiA9IG5hbWUubGVuZ3RoOworCisJCQkJZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CisJCQkJCW1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTsKKwkJCQl9CisKKwkJCQlyZXR1cm4gbWFwOworCQkJfQorCisJCQlyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/CisJCQkJalF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSApIDoKKwkJCQlqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7CisJCX0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApOworCX0sCisJc2hvdzogZnVuY3Rpb24oKSB7CisJCXJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApOworCX0sCisJaGlkZTogZnVuY3Rpb24oKSB7CisJCXJldHVybiBzaG93SGlkZSggdGhpcyApOworCX0sCisJdG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7CisJCWlmICggdHlwZW9mIHN0YXRlID09PSAiYm9vbGVhbiIgKSB7CisJCQlyZXR1cm4gc3RhdGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpOworCQl9CisKKwkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisJCQlpZiAoIGlzSGlkZGVuKCB0aGlzICkgKSB7CisJCQkJalF1ZXJ5KCB0aGlzICkuc2hvdygpOworCQkJfSBlbHNlIHsKKwkJCQlqUXVlcnkoIHRoaXMgKS5oaWRlKCk7CisJCQl9CisJCX0gKTsKKwl9Cit9ICk7CisKKworZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICkgeworCXJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7Cit9CitqUXVlcnkuVHdlZW4gPSBUd2VlbjsKKworVHdlZW4ucHJvdG90eXBlID0geworCWNvbnN0cnVjdG9yOiBUd2VlbiwKKwlpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVuaXQgKSB7CisJCXRoaXMuZWxlbSA9IGVsZW07CisJCXRoaXMucHJvcCA9IHByb3A7CisJCXRoaXMuZWFzaW5nID0gZWFzaW5nIHx8IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHQ7CisJCXRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CisJCXRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMuY3VyKCk7CisJCXRoaXMuZW5kID0gZW5kOworCQl0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gIiIgOiAicHgiICk7CisJfSwKKwljdXI6IGZ1bmN0aW9uKCkgeworCQl2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdOworCisJCXJldHVybiBob29rcyAmJiBob29rcy5nZXQgPworCQkJaG9va3MuZ2V0KCB0aGlzICkgOgorCQkJVHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApOworCX0sCisJcnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHsKKwkJdmFyIGVhc2VkLAorCQkJaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdOworCisJCWlmICggdGhpcy5vcHRpb25zLmR1cmF0aW9uICkgeworCQkJdGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdbIHRoaXMuZWFzaW5nIF0oCisJCQkJcGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uCisJCQkpOworCQl9IGVsc2UgeworCQkJdGhpcy5wb3MgPSBlYXNlZCA9IHBlcmNlbnQ7CisJCX0KKwkJdGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0OworCisJCWlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7CisJCQl0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7CisJCX0KKworCQlpZiAoIGhvb2tzICYmIGhvb2tzLnNldCApIHsKKwkJCWhvb2tzLnNldCggdGhpcyApOworCQl9IGVsc2UgeworCQkJVHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApOworCQl9CisJCXJldHVybiB0aGlzOworCX0KK307CisKK1R3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTsKKworVHdlZW4ucHJvcEhvb2tzID0geworCV9kZWZhdWx0OiB7CisJCWdldDogZnVuY3Rpb24oIHR3ZWVuICkgeworCQkJdmFyIHJlc3VsdDsKKworCQkJLy8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCwKKwkJCS8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuCisJCQlpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHwKKwkJCQl0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJiB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCApIHsKKwkJCQlyZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdOworCQkJfQorCisJCQkvLyBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBhcyBhIDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHkKKwkJCS8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFyc2UgZmFpbHMuCisJCQkvLyBTaW1wbGUgdmFsdWVzIHN1Y2ggYXMgIjEwcHgiIGFyZSBwYXJzZWQgdG8gRmxvYXQ7CisJCQkvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFzICJyb3RhdGUoMXJhZCkiIGFyZSByZXR1cm5lZCBhcy1pcy4KKwkJCXJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsICIiICk7CisKKwkJCS8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgImF1dG8iIGFyZSBjb252ZXJ0ZWQgdG8gMC4KKwkJCXJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gImF1dG8iID8gMCA6IHJlc3VsdDsKKwkJfSwKKwkJc2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7CisKKwkJCS8vIFVzZSBzdGVwIGhvb2sgZm9yIGJhY2sgY29tcGF0LgorCQkJLy8gVXNlIGNzc0hvb2sgaWYgaXRzIHRoZXJlLgorCQkJLy8gVXNlIC5zdHlsZSBpZiBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZS4KKwkJCWlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHsKKwkJCQlqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApOworCQkJfSBlbHNlIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSA9PT0gMSAmJgorCQkJCSggdHdlZW4uZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1Byb3BzWyB0d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8CisJCQkJCWpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdICkgKSB7CisJCQkJalF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7CisJCQl9IGVsc2UgeworCQkJCXR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdzsKKwkJCX0KKwkJfQorCX0KK307CisKKy8vIFN1cHBvcnQ6IElFOQorLy8gUGFuaWMgYmFzZWQgYXBwcm9hY2ggdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzCitUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gVHdlZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7CisJc2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7CisJCWlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7CisJCQl0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7CisJCX0KKwl9Cit9OworCitqUXVlcnkuZWFzaW5nID0geworCWxpbmVhcjogZnVuY3Rpb24oIHAgKSB7CisJCXJldHVybiBwOworCX0sCisJc3dpbmc6IGZ1bmN0aW9uKCBwICkgeworCQlyZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyOworCX0sCisJX2RlZmF1bHQ6ICJzd2luZyIKK307CisKK2pRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0OworCisvLyBCYWNrIENvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludAoralF1ZXJ5LmZ4LnN0ZXAgPSB7fTsKKworCisKKwordmFyCisJZnhOb3csIHRpbWVySWQsCisJcmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sCisJcnJ1biA9IC9xdWV1ZUhvb2tzJC87CisKKy8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHkKK2Z1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkgeworCXdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKKwkJZnhOb3cgPSB1bmRlZmluZWQ7CisJfSApOworCXJldHVybiAoIGZ4Tm93ID0galF1ZXJ5Lm5vdygpICk7Cit9CisKKy8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uCitmdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkgeworCXZhciB3aGljaCwKKwkJaSA9IDAsCisJCWF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfTsKKworCS8vIElmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcywKKwkvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodAorCWluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aCA/IDEgOiAwOworCWZvciAoIDsgaSA8IDQgOyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7CisJCXdoaWNoID0gY3NzRXhwYW5kWyBpIF07CisJCWF0dHJzWyAibWFyZ2luIiArIHdoaWNoIF0gPSBhdHRyc1sgInBhZGRpbmciICsgd2hpY2ggXSA9IHR5cGU7CisJfQorCisJaWYgKCBpbmNsdWRlV2lkdGggKSB7CisJCWF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7CisJfQorCisJcmV0dXJuIGF0dHJzOworfQorCitmdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHsKKwl2YXIgdHdlZW4sCisJCWNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbICIqIiBdICksCisJCWluZGV4ID0gMCwKKwkJbGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7CisJZm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKKwkJaWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHsKKworCQkJLy8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHkKKwkJCXJldHVybiB0d2VlbjsKKwkJfQorCX0KK30KKworZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7CisJLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqLworCXZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCB0d2VlbiwgaG9va3MsIG9sZGZpcmUsIGRpc3BsYXksIGNoZWNrRGlzcGxheSwKKwkJYW5pbSA9IHRoaXMsCisJCW9yaWcgPSB7fSwKKwkJc3R5bGUgPSBlbGVtLnN0eWxlLAorCQloaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuKCBlbGVtICksCisJCWRhdGFTaG93ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCAiZnhzaG93IiApOworCisJLy8gSGFuZGxlIHF1ZXVlOiBmYWxzZSBwcm9taXNlcworCWlmICggIW9wdHMucXVldWUgKSB7CisJCWhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCAiZngiICk7CisJCWlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHsKKwkJCWhvb2tzLnVucXVldWVkID0gMDsKKwkJCW9sZGZpcmUgPSBob29rcy5lbXB0eS5maXJlOworCQkJaG9va3MuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkgeworCQkJCWlmICggIWhvb2tzLnVucXVldWVkICkgeworCQkJCQlvbGRmaXJlKCk7CisJCQkJfQorCQkJfTsKKwkJfQorCQlob29rcy51bnF1ZXVlZCsrOworCisJCWFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHsKKworCQkJLy8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXMKKwkJCWFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHsKKwkJCQlob29rcy51bnF1ZXVlZC0tOworCQkJCWlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgImZ4IiApLmxlbmd0aCApIHsKKwkJCQkJaG9va3MuZW1wdHkuZmlyZSgpOworCQkJCX0KKwkJCX0gKTsKKwkJfSApOworCX0KKworCS8vIEhlaWdodC93aWR0aCBvdmVyZmxvdyBwYXNzCisJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICggImhlaWdodCIgaW4gcHJvcHMgfHwgIndpZHRoIiBpbiBwcm9wcyApICkgeworCisJCS8vIE1ha2Ugc3VyZSB0aGF0IG5vdGhpbmcgc25lYWtzIG91dAorCQkvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFOS0xMCBkbyBub3QKKwkJLy8gY2hhbmdlIHRoZSBvdmVyZmxvdyBhdHRyaWJ1dGUgd2hlbiBvdmVyZmxvd1ggYW5kCisJCS8vIG92ZXJmbG93WSBhcmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlCisJCW9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdOworCisJCS8vIFNldCBkaXNwbGF5IHByb3BlcnR5IHRvIGlubGluZS1ibG9jayBmb3IgaGVpZ2h0L3dpZHRoCisJCS8vIGFuaW1hdGlvbnMgb24gaW5saW5lIGVsZW1lbnRzIHRoYXQgYXJlIGhhdmluZyB3aWR0aC9oZWlnaHQgYW5pbWF0ZWQKKwkJZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApOworCisJCS8vIFRlc3QgZGVmYXVsdCBkaXNwbGF5IGlmIGRpc3BsYXkgaXMgY3VycmVudGx5ICJub25lIgorCQljaGVja0Rpc3BsYXkgPSBkaXNwbGF5ID09PSAibm9uZSIgPworCQkJZGF0YVByaXYuZ2V0KCBlbGVtLCAib2xkZGlzcGxheSIgKSB8fCBkZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSApIDogZGlzcGxheTsKKworCQlpZiAoIGNoZWNrRGlzcGxheSA9PT0gImlubGluZSIgJiYgalF1ZXJ5LmNzcyggZWxlbSwgImZsb2F0IiApID09PSAibm9uZSIgKSB7CisJCQlzdHlsZS5kaXNwbGF5ID0gImlubGluZS1ibG9jayI7CisJCX0KKwl9CisKKwlpZiAoIG9wdHMub3ZlcmZsb3cgKSB7CisJCXN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CisJCWFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHsKKwkJCXN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdOworCQkJc3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdOworCQkJc3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdOworCQl9ICk7CisJfQorCisJLy8gc2hvdy9oaWRlIHBhc3MKKwlmb3IgKCBwcm9wIGluIHByb3BzICkgeworCQl2YWx1ZSA9IHByb3BzWyBwcm9wIF07CisJCWlmICggcmZ4dHlwZXMuZXhlYyggdmFsdWUgKSApIHsKKwkJCWRlbGV0ZSBwcm9wc1sgcHJvcCBdOworCQkJdG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSAidG9nZ2xlIjsKKwkJCWlmICggdmFsdWUgPT09ICggaGlkZGVuID8gImhpZGUiIDogInNob3ciICkgKSB7CisKKwkJCQkvLyBJZiB0aGVyZSBpcyBkYXRhU2hvdyBsZWZ0IG92ZXIgZnJvbSBhIHN0b3BwZWQgaGlkZSBvciBzaG93CisJCQkJLy8gYW5kIHdlIGFyZSBnb2luZyB0byBwcm9jZWVkIHdpdGggc2hvdywgd2Ugc2hvdWxkIHByZXRlbmQgdG8gYmUgaGlkZGVuCisJCQkJaWYgKCB2YWx1ZSA9PT0gInNob3ciICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHsKKwkJCQkJaGlkZGVuID0gdHJ1ZTsKKwkJCQl9IGVsc2UgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApOworCisJCS8vIEFueSBub24tZnggdmFsdWUgc3RvcHMgdXMgZnJvbSByZXN0b3JpbmcgdGhlIG9yaWdpbmFsIGRpc3BsYXkgdmFsdWUKKwkJfSBlbHNlIHsKKwkJCWRpc3BsYXkgPSB1bmRlZmluZWQ7CisJCX0KKwl9CisKKwlpZiAoICFqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkgeworCQlpZiAoIGRhdGFTaG93ICkgeworCQkJaWYgKCAiaGlkZGVuIiBpbiBkYXRhU2hvdyApIHsKKwkJCQloaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47CisJCQl9CisJCX0gZWxzZSB7CisJCQlkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgImZ4c2hvdyIsIHt9ICk7CisJCX0KKworCQkvLyBTdG9yZSBzdGF0ZSBpZiBpdHMgdG9nZ2xlIC0gZW5hYmxlcyAuc3RvcCgpLnRvZ2dsZSgpIHRvICJyZXZlcnNlIgorCQlpZiAoIHRvZ2dsZSApIHsKKwkJCWRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47CisJCX0KKwkJaWYgKCBoaWRkZW4gKSB7CisJCQlqUXVlcnkoIGVsZW0gKS5zaG93KCk7CisJCX0gZWxzZSB7CisJCQlhbmltLmRvbmUoIGZ1bmN0aW9uKCkgeworCQkJCWpRdWVyeSggZWxlbSApLmhpZGUoKTsKKwkJCX0gKTsKKwkJfQorCQlhbmltLmRvbmUoIGZ1bmN0aW9uKCkgeworCQkJdmFyIHByb3A7CisKKwkJCWRhdGFQcml2LnJlbW92ZSggZWxlbSwgImZ4c2hvdyIgKTsKKwkJCWZvciAoIHByb3AgaW4gb3JpZyApIHsKKwkJCQlqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApOworCQkJfQorCQl9ICk7CisJCWZvciAoIHByb3AgaW4gb3JpZyApIHsKKwkJCXR3ZWVuID0gY3JlYXRlVHdlZW4oIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAwLCBwcm9wLCBhbmltICk7CisKKwkJCWlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkgeworCQkJCWRhdGFTaG93WyBwcm9wIF0gPSB0d2Vlbi5zdGFydDsKKwkJCQlpZiAoIGhpZGRlbiApIHsKKwkJCQkJdHdlZW4uZW5kID0gdHdlZW4uc3RhcnQ7CisJCQkJCXR3ZWVuLnN0YXJ0ID0gcHJvcCA9PT0gIndpZHRoIiB8fCBwcm9wID09PSAiaGVpZ2h0IiA/IDEgOiAwOworCQkJCX0KKwkJCX0KKwkJfQorCisJLy8gSWYgdGhpcyBpcyBhIG5vb3AgbGlrZSAuaGlkZSgpLmhpZGUoKSwgcmVzdG9yZSBhbiBvdmVyd3JpdHRlbiBkaXNwbGF5IHZhbHVlCisJfSBlbHNlIGlmICggKCBkaXNwbGF5ID09PSAibm9uZSIgPyBkZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSApIDogZGlzcGxheSApID09PSAiaW5saW5lIiApIHsKKwkJc3R5bGUuZGlzcGxheSA9IGRpc3BsYXk7CisJfQorfQorCitmdW5jdGlvbiBwcm9wRmlsdGVyKCBwcm9wcywgc3BlY2lhbEVhc2luZyApIHsKKwl2YXIgaW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzOworCisJLy8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzCisJZm9yICggaW5kZXggaW4gcHJvcHMgKSB7CisJCW5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBpbmRleCApOworCQllYXNpbmcgPSBzcGVjaWFsRWFzaW5nWyBuYW1lIF07CisJCXZhbHVlID0gcHJvcHNbIGluZGV4IF07CisJCWlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7CisJCQllYXNpbmcgPSB2YWx1ZVsgMSBdOworCQkJdmFsdWUgPSBwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyAwIF07CisJCX0KKworCQlpZiAoIGluZGV4ICE9PSBuYW1lICkgeworCQkJcHJvcHNbIG5hbWUgXSA9IHZhbHVlOworCQkJZGVsZXRlIHByb3BzWyBpbmRleCBdOworCQl9CisKKwkJaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTsKKwkJaWYgKCBob29rcyAmJiAiZXhwYW5kIiBpbiBob29rcyApIHsKKwkJCXZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSApOworCQkJZGVsZXRlIHByb3BzWyBuYW1lIF07CisKKwkJCS8vIE5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b24ndCBvdmVyd3JpdGUgZXhpc3Rpbmcga2V5cy4KKwkJCS8vIFJldXNpbmcgJ2luZGV4JyBiZWNhdXNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgIm5hbWUiCisJCQlmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHsKKwkJCQlpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7CisJCQkJCXByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07CisJCQkJCXNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJc3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFzaW5nOworCQl9CisJfQorfQorCitmdW5jdGlvbiBBbmltYXRpb24oIGVsZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7CisJdmFyIHJlc3VsdCwKKwkJc3RvcHBlZCwKKwkJaW5kZXggPSAwLAorCQlsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsCisJCWRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHsKKworCQkJLy8gRG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNlbGVjdG9yCisJCQlkZWxldGUgdGljay5lbGVtOworCQl9ICksCisJCXRpY2sgPSBmdW5jdGlvbigpIHsKKwkJCWlmICggc3RvcHBlZCApIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQl2YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAorCQkJCXJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSwKKworCQkJCS8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zCisJCQkJLy8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAoIzEyNDk3KQorCQkJCXRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24gfHwgMCwKKwkJCQlwZXJjZW50ID0gMSAtIHRlbXAsCisJCQkJaW5kZXggPSAwLAorCQkJCWxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoOworCisJCQlmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKKwkJCQlhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCApOworCQkJfQorCisJCQlkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0gKTsKKworCQkJaWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7CisJCQkJcmV0dXJuIHJlbWFpbmluZzsKKwkJCX0gZWxzZSB7CisJCQkJZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0sCisJCWFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHsKKwkJCWVsZW06IGVsZW0sCisJCQlwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSwKKwkJCW9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHsKKwkJCQlzcGVjaWFsRWFzaW5nOiB7fSwKKwkJCQllYXNpbmc6IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHQKKwkJCX0sIG9wdGlvbnMgKSwKKwkJCW9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcywKKwkJCW9yaWdpbmFsT3B0aW9uczogb3B0aW9ucywKKwkJCXN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSwKKwkJCWR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLAorCQkJdHdlZW5zOiBbXSwKKwkJCWNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkgeworCQkJCXZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCwKKwkJCQkJCWFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcgKTsKKwkJCQlhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7CisJCQkJcmV0dXJuIHR3ZWVuOworCQkJfSwKKwkJCXN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkgeworCQkJCXZhciBpbmRleCA9IDAsCisKKwkJCQkJLy8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zCisJCQkJCS8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydAorCQkJCQlsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwOworCQkJCWlmICggc3RvcHBlZCApIHsKKwkJCQkJcmV0dXJuIHRoaXM7CisJCQkJfQorCQkJCXN0b3BwZWQgPSB0cnVlOworCQkJCWZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkgeworCQkJCQlhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApOworCQkJCX0KKworCQkJCS8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0CisJCQkJaWYgKCBnb3RvRW5kICkgeworCQkJCQlkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7CisJCQkJCWRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7CisJCQkJfSBlbHNlIHsKKwkJCQkJZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApOworCQkJCX0KKwkJCQlyZXR1cm4gdGhpczsKKwkJCX0KKwkJfSApLAorCQlwcm9wcyA9IGFuaW1hdGlvbi5wcm9wczsKKworCXByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7CisKKwlmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKKwkJcmVzdWx0ID0gQW5pbWF0aW9uLnByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMgKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkgeworCQkJCWpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9CisJCQkJCWpRdWVyeS5wcm94eSggcmVzdWx0LnN0b3AsIHJlc3VsdCApOworCQkJfQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCX0KKworCWpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7CisKKwlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkgeworCQlhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTsKKwl9CisKKwlqUXVlcnkuZngudGltZXIoCisJCWpRdWVyeS5leHRlbmQoIHRpY2ssIHsKKwkJCWVsZW06IGVsZW0sCisJCQlhbmltOiBhbmltYXRpb24sCisJCQlxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWUKKwkJfSApCisJKTsKKworCS8vIGF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zCisJcmV0dXJuIGFuaW1hdGlvbi5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3MgKQorCQkuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKQorCQkuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApCisJCS5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5cyApOworfQorCitqUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7CisJdHdlZW5lcnM6IHsKKwkJIioiOiBbIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHsKKwkJCXZhciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICk7CisJCQlhZGp1c3RDU1MoIHR3ZWVuLmVsZW0sIHByb3AsIHJjc3NOdW0uZXhlYyggdmFsdWUgKSwgdHdlZW4gKTsKKwkJCXJldHVybiB0d2VlbjsKKwkJfSBdCisJfSwKKworCXR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7CisJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHByb3BzICkgKSB7CisJCQljYWxsYmFjayA9IHByb3BzOworCQkJcHJvcHMgPSBbICIqIiBdOworCQl9IGVsc2UgeworCQkJcHJvcHMgPSBwcm9wcy5tYXRjaCggcm5vdHdoaXRlICk7CisJCX0KKworCQl2YXIgcHJvcCwKKwkJCWluZGV4ID0gMCwKKwkJCWxlbmd0aCA9IHByb3BzLmxlbmd0aDsKKworCQlmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKKwkJCXByb3AgPSBwcm9wc1sgaW5kZXggXTsKKwkJCUFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdID0gQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW107CisJCQlBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApOworCQl9CisJfSwKKworCXByZWZpbHRlcnM6IFsgZGVmYXVsdFByZWZpbHRlciBdLAorCisJcHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7CisJCWlmICggcHJlcGVuZCApIHsKKwkJCUFuaW1hdGlvbi5wcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7CisJCX0gZWxzZSB7CisJCQlBbmltYXRpb24ucHJlZmlsdGVycy5wdXNoKCBjYWxsYmFjayApOworCQl9CisJfQorfSApOworCitqUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7CisJdmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gIm9iamVjdCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHsKKwkJY29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHwKKwkJCWpRdWVyeS5pc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLAorCQlkdXJhdGlvbjogc3BlZWQsCisJCWVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24oIGVhc2luZyApICYmIGVhc2luZworCX07CisKKwlvcHQuZHVyYXRpb24gPSBqUXVlcnkuZngub2ZmID8gMCA6IHR5cGVvZiBvcHQuZHVyYXRpb24gPT09ICJudW1iZXIiID8KKwkJb3B0LmR1cmF0aW9uIDogb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgPworCQkJalF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF0gOiBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0OworCisJLy8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gImZ4IgorCWlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkgeworCQlvcHQucXVldWUgPSAiZngiOworCX0KKworCS8vIFF1ZXVlaW5nCisJb3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTsKKworCW9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgeworCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7CisJCQlvcHQub2xkLmNhbGwoIHRoaXMgKTsKKwkJfQorCisJCWlmICggb3B0LnF1ZXVlICkgeworCQkJalF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApOworCQl9CisJfTsKKworCXJldHVybiBvcHQ7Cit9OworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisJZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkgeworCisJCS8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMAorCQlyZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuICkuY3NzKCAib3BhY2l0eSIsIDAgKS5zaG93KCkKKworCQkJLy8gQW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkCisJCQkuZW5kKCkuYW5pbWF0ZSggeyBvcGFjaXR5OiB0byB9LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOworCX0sCisJYW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgeworCQl2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLAorCQkJb3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLAorCQkJZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHsKKworCQkJCS8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0CisJCQkJdmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApOworCisJCQkJLy8gRW1wdHkgYW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5CisJCQkJaWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsICJmaW5pc2giICkgKSB7CisJCQkJCWFuaW0uc3RvcCggdHJ1ZSApOworCQkJCX0KKwkJCX07CisJCQlkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjsKKworCQlyZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/CisJCQl0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOgorCQkJdGhpcy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApOworCX0sCisJc3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7CisJCXZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7CisJCQl2YXIgc3RvcCA9IGhvb2tzLnN0b3A7CisJCQlkZWxldGUgaG9va3Muc3RvcDsKKwkJCXN0b3AoIGdvdG9FbmQgKTsKKwkJfTsKKworCQlpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKKwkJCWdvdG9FbmQgPSBjbGVhclF1ZXVlOworCQkJY2xlYXJRdWV1ZSA9IHR5cGU7CisJCQl0eXBlID0gdW5kZWZpbmVkOworCQl9CisJCWlmICggY2xlYXJRdWV1ZSAmJiB0eXBlICE9PSBmYWxzZSApIHsKKwkJCXRoaXMucXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsKKwkJfQorCisJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworCQkJdmFyIGRlcXVldWUgPSB0cnVlLAorCQkJCWluZGV4ID0gdHlwZSAhPSBudWxsICYmIHR5cGUgKyAicXVldWVIb29rcyIsCisJCQkJdGltZXJzID0galF1ZXJ5LnRpbWVycywKKwkJCQlkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICk7CisKKwkJCWlmICggaW5kZXggKSB7CisJCQkJaWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHsKKwkJCQkJc3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlmb3IgKCBpbmRleCBpbiBkYXRhICkgeworCQkJCQlpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHsKKwkJCQkJCXN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkgeworCQkJCWlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYKKwkJCQkJKCB0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7CisKKwkJCQkJdGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApOworCQkJCQlkZXF1ZXVlID0gZmFsc2U7CisJCQkJCXRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7CisJCQkJfQorCQkJfQorCisJCQkvLyBTdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkLgorCQkJLy8gVGltZXJzIGN1cnJlbnRseSB3aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaAorCQkJLy8gd2lsbCBkZXF1ZXVlIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kLgorCQkJaWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkgeworCQkJCWpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7CisJCQl9CisJCX0gKTsKKwl9LAorCWZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7CisJCWlmICggdHlwZSAhPT0gZmFsc2UgKSB7CisJCQl0eXBlID0gdHlwZSB8fCAiZngiOworCQl9CisJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworCQkJdmFyIGluZGV4LAorCQkJCWRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSwKKwkJCQlxdWV1ZSA9IGRhdGFbIHR5cGUgKyAicXVldWUiIF0sCisJCQkJaG9va3MgPSBkYXRhWyB0eXBlICsgInF1ZXVlSG9va3MiIF0sCisJCQkJdGltZXJzID0galF1ZXJ5LnRpbWVycywKKwkJCQlsZW5ndGggPSBxdWV1ZSA/IHF1ZXVlLmxlbmd0aCA6IDA7CisKKwkJCS8vIEVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGEKKwkJCWRhdGEuZmluaXNoID0gdHJ1ZTsKKworCQkJLy8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0CisJCQlqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7CisKKwkJCWlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHsKKwkJCQlob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTsKKwkJCX0KKworCQkJLy8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW0KKwkJCWZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7CisJCQkJaWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7CisJCQkJCXRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTsKKwkJCQkJdGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTsKKwkJCQl9CisJCQl9CisKKwkJCS8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtCisJCQlmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgeworCQkJCWlmICggcXVldWVbIGluZGV4IF0gJiYgcXVldWVbIGluZGV4IF0uZmluaXNoICkgeworCQkJCQlxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApOworCQkJCX0KKwkJCX0KKworCQkJLy8gVHVybiBvZmYgZmluaXNoaW5nIGZsYWcKKwkJCWRlbGV0ZSBkYXRhLmZpbmlzaDsKKwkJfSApOworCX0KK30gKTsKKworalF1ZXJ5LmVhY2goIFsgInRvZ2dsZSIsICJzaG93IiwgImhpZGUiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworCXZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdOworCWpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgeworCQlyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09ICJib29sZWFuIiA/CisJCQljc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOgorCQkJdGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOworCX07Cit9ICk7CisKKy8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnMKK2pRdWVyeS5lYWNoKCB7CisJc2xpZGVEb3duOiBnZW5GeCggInNob3ciICksCisJc2xpZGVVcDogZ2VuRngoICJoaWRlIiApLAorCXNsaWRlVG9nZ2xlOiBnZW5GeCggInRvZ2dsZSIgKSwKKwlmYWRlSW46IHsgb3BhY2l0eTogInNob3ciIH0sCisJZmFkZU91dDogeyBvcGFjaXR5OiAiaGlkZSIgfSwKKwlmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6ICJ0b2dnbGUiIH0KK30sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHsKKwlqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKKwkJcmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7CisJfTsKK30gKTsKKworalF1ZXJ5LnRpbWVycyA9IFtdOworalF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHsKKwl2YXIgdGltZXIsCisJCWkgPSAwLAorCQl0aW1lcnMgPSBqUXVlcnkudGltZXJzOworCisJZnhOb3cgPSBqUXVlcnkubm93KCk7CisKKwlmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7CisJCXRpbWVyID0gdGltZXJzWyBpIF07CisKKwkJLy8gQ2hlY2tzIHRoZSB0aW1lciBoYXMgbm90IGFscmVhZHkgYmVlbiByZW1vdmVkCisJCWlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkgeworCQkJdGltZXJzLnNwbGljZSggaS0tLCAxICk7CisJCX0KKwl9CisKKwlpZiAoICF0aW1lcnMubGVuZ3RoICkgeworCQlqUXVlcnkuZnguc3RvcCgpOworCX0KKwlmeE5vdyA9IHVuZGVmaW5lZDsKK307CisKK2pRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHsKKwlqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7CisJaWYgKCB0aW1lcigpICkgeworCQlqUXVlcnkuZnguc3RhcnQoKTsKKwl9IGVsc2UgeworCQlqUXVlcnkudGltZXJzLnBvcCgpOworCX0KK307CisKK2pRdWVyeS5meC5pbnRlcnZhbCA9IDEzOworalF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7CisJaWYgKCAhdGltZXJJZCApIHsKKwkJdGltZXJJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbCggalF1ZXJ5LmZ4LnRpY2ssIGpRdWVyeS5meC5pbnRlcnZhbCApOworCX0KK307CisKK2pRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7CisJd2luZG93LmNsZWFySW50ZXJ2YWwoIHRpbWVySWQgKTsKKworCXRpbWVySWQgPSBudWxsOworfTsKKworalF1ZXJ5LmZ4LnNwZWVkcyA9IHsKKwlzbG93OiA2MDAsCisJZmFzdDogMjAwLAorCisJLy8gRGVmYXVsdCBzcGVlZAorCV9kZWZhdWx0OiA0MDAKK307CisKKworLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLgorLy8gaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMDAzMjQwMTQ3NDcvaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5LworalF1ZXJ5LmZuLmRlbGF5ID0gZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7CisJdGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTsKKwl0eXBlID0gdHlwZSB8fCAiZngiOworCisJcmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHsKKwkJdmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCggbmV4dCwgdGltZSApOworCQlob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7CisJCQl3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7CisJCX07CisJfSApOworfTsKKworCisoIGZ1bmN0aW9uKCkgeworCXZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJpbnB1dCIgKSwKKwkJc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInNlbGVjdCIgKSwKKwkJb3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAib3B0aW9uIiApICk7CisKKwlpbnB1dC50eXBlID0gImNoZWNrYm94IjsKKworCS8vIFN1cHBvcnQ6IGlPUzw9NS4xLCBBbmRyb2lkPD00LjIrCisJLy8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgIm9uIgorCXN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSAiIjsKKworCS8vIFN1cHBvcnQ6IElFPD0xMSsKKwkvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdAorCXN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0ZWQ7CisKKwkvLyBTdXBwb3J0OiBBbmRyb2lkPD0yLjMKKwkvLyBPcHRpb25zIGluc2lkZSBkaXNhYmxlZCBzZWxlY3RzIGFyZSBpbmNvcnJlY3RseSBtYXJrZWQgYXMgZGlzYWJsZWQKKwlzZWxlY3QuZGlzYWJsZWQgPSB0cnVlOworCXN1cHBvcnQub3B0RGlzYWJsZWQgPSAhb3B0LmRpc2FibGVkOworCisJLy8gU3VwcG9ydDogSUU8PTExKworCS8vIEFuIGlucHV0IGxvc2VzIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvCisJaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiaW5wdXQiICk7CisJaW5wdXQudmFsdWUgPSAidCI7CisJaW5wdXQudHlwZSA9ICJyYWRpbyI7CisJc3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09ICJ0IjsKK30gKSgpOworCisKK3ZhciBib29sSG9vaywKKwlhdHRySGFuZGxlID0galF1ZXJ5LmV4cHIuYXR0ckhhbmRsZTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCWF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKwkJcmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApOworCX0sCisKKwlyZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHsKKwkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisJCQlqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApOworCQl9ICk7CisJfQorfSApOworCitqUXVlcnkuZXh0ZW5kKCB7CisJYXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgeworCQl2YXIgcmV0LCBob29rcywKKwkJCW5UeXBlID0gZWxlbS5ub2RlVHlwZTsKKworCQkvLyBEb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzCisJCWlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZAorCQlpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gInVuZGVmaW5lZCIgKSB7CisJCQlyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7CisJCX0KKworCQkvLyBBbGwgYXR0cmlidXRlcyBhcmUgbG93ZXJjYXNlCisJCS8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWQKKwkJaWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7CisJCQluYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOworCQkJaG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gfHwKKwkJCQkoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiB1bmRlZmluZWQgKTsKKwkJfQorCisJCWlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKKwkJCWlmICggdmFsdWUgPT09IG51bGwgKSB7CisJCQkJalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWlmICggaG9va3MgJiYgInNldCIgaW4gaG9va3MgJiYKKwkJCQkoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKworCQkJZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgIiIgKTsKKwkJCXJldHVybiB2YWx1ZTsKKwkJfQorCisJCWlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkgeworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXJldCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIG5hbWUgKTsKKworCQkvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZAorCQlyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7CisJfSwKKworCWF0dHJIb29rczogeworCQl0eXBlOiB7CisJCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKwkJCQlpZiAoICFzdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09ICJyYWRpbyIgJiYKKwkJCQkJalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgKSB7CisJCQkJCXZhciB2YWwgPSBlbGVtLnZhbHVlOworCQkJCQllbGVtLnNldEF0dHJpYnV0ZSggInR5cGUiLCB2YWx1ZSApOworCQkJCQlpZiAoIHZhbCApIHsKKwkJCQkJCWVsZW0udmFsdWUgPSB2YWw7CisJCQkJCX0KKwkJCQkJcmV0dXJuIHZhbHVlOworCQkJCX0KKwkJCX0KKwkJfQorCX0sCisKKwlyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CisJCXZhciBuYW1lLCBwcm9wTmFtZSwKKwkJCWkgPSAwLAorCQkJYXR0ck5hbWVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2goIHJub3R3aGl0ZSApOworCisJCWlmICggYXR0ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisJCQl3aGlsZSAoICggbmFtZSA9IGF0dHJOYW1lc1sgaSsrIF0gKSApIHsKKwkJCQlwcm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKKworCQkJCS8vIEJvb2xlYW4gYXR0cmlidXRlcyBnZXQgc3BlY2lhbCB0cmVhdG1lbnQgKCMxMDg3MCkKKwkJCQlpZiAoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApICkgeworCisJCQkJCS8vIFNldCBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHRvIGZhbHNlCisJCQkJCWVsZW1bIHByb3BOYW1lIF0gPSBmYWxzZTsKKwkJCQl9CisKKwkJCQllbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApOworCQkJfQorCQl9CisJfQorfSApOworCisvLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzCitib29sSG9vayA9IHsKKwlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKKwkJaWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7CisKKwkJCS8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2UKKwkJCWpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7CisJCX0gZWxzZSB7CisJCQllbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZSApOworCQl9CisJCXJldHVybiBuYW1lOworCX0KK307CitqUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cdysvZyApLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKKwl2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7CisKKwlhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7CisJCXZhciByZXQsIGhhbmRsZTsKKwkJaWYgKCAhaXNYTUwgKSB7CisKKwkJCS8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3AgYnkgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRoZSBnZXR0ZXIKKwkJCWhhbmRsZSA9IGF0dHJIYW5kbGVbIG5hbWUgXTsKKwkJCWF0dHJIYW5kbGVbIG5hbWUgXSA9IHJldDsKKwkJCXJldCA9IGdldHRlciggZWxlbSwgbmFtZSwgaXNYTUwgKSAhPSBudWxsID8KKwkJCQluYW1lLnRvTG93ZXJDYXNlKCkgOgorCQkJCW51bGw7CisJCQlhdHRySGFuZGxlWyBuYW1lIF0gPSBoYW5kbGU7CisJCX0KKwkJcmV0dXJuIHJldDsKKwl9OworfSApOworCisKKworCit2YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksCisJcmNsaWNrYWJsZSA9IC9eKD86YXxhcmVhKSQvaTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCXByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKwkJcmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApOworCX0sCisKKwlyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHsKKwkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisJCQlkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07CisJCX0gKTsKKwl9Cit9ICk7CisKK2pRdWVyeS5leHRlbmQoIHsKKwlwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7CisJCXZhciByZXQsIGhvb2tzLAorCQkJblR5cGUgPSBlbGVtLm5vZGVUeXBlOworCisJCS8vIERvbid0IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXMKKwkJaWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkgeworCisJCQkvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzCisJCQluYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOworCQkJaG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07CisJCX0KKworCQlpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CisJCQlpZiAoIGhvb2tzICYmICJzZXQiIGluIGhvb2tzICYmCisJCQkJKCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkgeworCQkJCXJldHVybiByZXQ7CisJCQl9CisKKwkJCXJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7CisJCX0KKworCQlpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXR1cm4gZWxlbVsgbmFtZSBdOworCX0sCisKKwlwcm9wSG9va3M6IHsKKwkJdGFiSW5kZXg6IHsKKwkJCWdldDogZnVuY3Rpb24oIGVsZW0gKSB7CisKKwkJCQkvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGUKKwkJCQkvLyBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXQKKwkJCQkvLyBodHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0LworCQkJCS8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCgjMTIwNzIpCisJCQkJdmFyIHRhYmluZGV4ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgInRhYmluZGV4IiApOworCisJCQkJcmV0dXJuIHRhYmluZGV4ID8KKwkJCQkJcGFyc2VJbnQoIHRhYmluZGV4LCAxMCApIDoKKwkJCQkJcmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHwKKwkJCQkJCXJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmIGVsZW0uaHJlZiA/CisJCQkJCQkJMCA6CisJCQkJCQkJLTE7CisJCQl9CisJCX0KKwl9LAorCisJcHJvcEZpeDogeworCQkiZm9yIjogImh0bWxGb3IiLAorCQkiY2xhc3MiOiAiY2xhc3NOYW1lIgorCX0KK30gKTsKKworLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5CisvLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHkKKy8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWQKKy8vIG9uIHRoZSBvcHRpb24KKy8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkCisvLyB3aGVuIGluIGFuIG9wdGdyb3VwCitpZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkgeworCWpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7CisJCWdldDogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQl2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOworCQkJaWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7CisJCQkJcGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKKwkJCX0KKwkJCXJldHVybiBudWxsOworCQl9LAorCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJdmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKKwkJCWlmICggcGFyZW50ICkgeworCQkJCXBhcmVudC5zZWxlY3RlZEluZGV4OworCisJCQkJaWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHsKKwkJCQkJcGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKKwkJCQl9CisJCQl9CisJCX0KKwl9OworfQorCitqUXVlcnkuZWFjaCggWworCSJ0YWJJbmRleCIsCisJInJlYWRPbmx5IiwKKwkibWF4TGVuZ3RoIiwKKwkiY2VsbFNwYWNpbmciLAorCSJjZWxsUGFkZGluZyIsCisJInJvd1NwYW4iLAorCSJjb2xTcGFuIiwKKwkidXNlTWFwIiwKKwkiZnJhbWVCb3JkZXIiLAorCSJjb250ZW50RWRpdGFibGUiCitdLCBmdW5jdGlvbigpIHsKKwlqUXVlcnkucHJvcEZpeFsgdGhpcy50b0xvd2VyQ2FzZSgpIF0gPSB0aGlzOworfSApOworCisKKworCit2YXIgcmNsYXNzID0gL1tcdFxyXG5cZl0vZzsKKworZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7CisJcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCAiY2xhc3MiICkgfHwgIiI7Cit9CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKwlhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkgeworCQl2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsCisJCQlpID0gMDsKKworCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgeworCQkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7CisJCQkJalF1ZXJ5KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApOworCQkJfSApOworCQl9CisKKwkJaWYgKCB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmIHZhbHVlICkgeworCQkJY2xhc3NlcyA9IHZhbHVlLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXTsKKworCQkJd2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkgeworCQkJCWN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTsKKwkJCQljdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmCisJCQkJCSggIiAiICsgY3VyVmFsdWUgKyAiICIgKS5yZXBsYWNlKCByY2xhc3MsICIgIiApOworCisJCQkJaWYgKCBjdXIgKSB7CisJCQkJCWogPSAwOworCQkJCQl3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkgeworCQkJCQkJaWYgKCBjdXIuaW5kZXhPZiggIiAiICsgY2xhenogKyAiICIgKSA8IDAgKSB7CisJCQkJCQkJY3VyICs9IGNsYXp6ICsgIiAiOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJLy8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy4KKwkJCQkJZmluYWxWYWx1ZSA9IGpRdWVyeS50cmltKCBjdXIgKTsKKwkJCQkJaWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHsKKwkJCQkJCWVsZW0uc2V0QXR0cmlidXRlKCAiY2xhc3MiLCBmaW5hbFZhbHVlICk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKwkJdmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLAorCQkJaSA9IDA7CisKKwkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKKwkJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkgeworCQkJCWpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTsKKwkJCX0gKTsKKwkJfQorCisJCWlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7CisJCQlyZXR1cm4gdGhpcy5hdHRyKCAiY2xhc3MiLCAiIiApOworCQl9CisKKwkJaWYgKCB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmIHZhbHVlICkgeworCQkJY2xhc3NlcyA9IHZhbHVlLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXTsKKworCQkJd2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkgeworCQkJCWN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTsKKworCQkJCS8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChzZWUgYWRkQ2xhc3MpCisJCQkJY3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJgorCQkJCQkoICIgIiArIGN1clZhbHVlICsgIiAiICkucmVwbGFjZSggcmNsYXNzLCAiICIgKTsKKworCQkJCWlmICggY3VyICkgeworCQkJCQlqID0gMDsKKwkJCQkJd2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHsKKworCQkJCQkJLy8gUmVtb3ZlICphbGwqIGluc3RhbmNlcworCQkJCQkJd2hpbGUgKCBjdXIuaW5kZXhPZiggIiAiICsgY2xhenogKyAiICIgKSA+IC0xICkgeworCQkJCQkJCWN1ciA9IGN1ci5yZXBsYWNlKCAiICIgKyBjbGF6eiArICIgIiwgIiAiICk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQkvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLgorCQkJCQlmaW5hbFZhbHVlID0galF1ZXJ5LnRyaW0oIGN1ciApOworCQkJCQlpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkgeworCQkJCQkJZWxlbS5zZXRBdHRyaWJ1dGUoICJjbGFzcyIsIGZpbmFsVmFsdWUgKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCXJldHVybiB0aGlzOworCX0sCisKKwl0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHsKKwkJdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7CisKKwkJaWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09ICJib29sZWFuIiAmJiB0eXBlID09PSAic3RyaW5nIiApIHsKKwkJCXJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApOworCQl9CisKKwkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKKwkJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgeworCQkJCWpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKAorCQkJCQl2YWx1ZS5jYWxsKCB0aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0ZVZhbCApLAorCQkJCQlzdGF0ZVZhbAorCQkJCSk7CisJCQl9ICk7CisJCX0KKworCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKwkJCXZhciBjbGFzc05hbWUsIGksIHNlbGYsIGNsYXNzTmFtZXM7CisKKwkJCWlmICggdHlwZSA9PT0gInN0cmluZyIgKSB7CisKKwkJCQkvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lcworCQkJCWkgPSAwOworCQkJCXNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKKwkJCQljbGFzc05hbWVzID0gdmFsdWUubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdOworCisJCQkJd2hpbGUgKCAoIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBdICkgKSB7CisKKwkJCQkJLy8gQ2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0CisJCQkJCWlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7CisJCQkJCQlzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApOworCQkJCQl9CisJCQkJfQorCisJCQkvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZQorCQkJfSBlbHNlIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSAiYm9vbGVhbiIgKSB7CisJCQkJY2xhc3NOYW1lID0gZ2V0Q2xhc3MoIHRoaXMgKTsKKwkJCQlpZiAoIGNsYXNzTmFtZSApIHsKKworCQkJCQkvLyBTdG9yZSBjbGFzc05hbWUgaWYgc2V0CisJCQkJCWRhdGFQcml2LnNldCggdGhpcywgIl9fY2xhc3NOYW1lX18iLCBjbGFzc05hbWUgKTsKKwkJCQl9CisKKwkJCQkvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCBgZmFsc2VgLAorCQkJCS8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuCisJCQkJLy8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFueXRoaW5nKSwKKwkJCQkvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuCisJCQkJaWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHsKKwkJCQkJdGhpcy5zZXRBdHRyaWJ1dGUoICJjbGFzcyIsCisJCQkJCQljbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID8KKwkJCQkJCSIiIDoKKwkJCQkJCWRhdGFQcml2LmdldCggdGhpcywgIl9fY2xhc3NOYW1lX18iICkgfHwgIiIKKwkJCQkJKTsKKwkJCQl9CisJCQl9CisJCX0gKTsKKwl9LAorCisJaGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKwkJdmFyIGNsYXNzTmFtZSwgZWxlbSwKKwkJCWkgPSAwOworCisJCWNsYXNzTmFtZSA9ICIgIiArIHNlbGVjdG9yICsgIiAiOworCQl3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7CisJCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYKKwkJCQkoICIgIiArIGdldENsYXNzKCBlbGVtICkgKyAiICIgKS5yZXBsYWNlKCByY2xhc3MsICIgIiApCisJCQkJCS5pbmRleE9mKCBjbGFzc05hbWUgKSA+IC0xCisJCQkpIHsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCisJCXJldHVybiBmYWxzZTsKKwl9Cit9ICk7CisKKworCisKK3ZhciBycmV0dXJuID0gL1xyL2csCisJcnNwYWNlcyA9IC9bXHgyMFx0XHJcblxmXSsvZzsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCXZhbDogZnVuY3Rpb24oIHZhbHVlICkgeworCQl2YXIgaG9va3MsIHJldCwgaXNGdW5jdGlvbiwKKwkJCWVsZW0gPSB0aGlzWyAwIF07CisKKwkJaWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHsKKwkJCWlmICggZWxlbSApIHsKKwkJCQlob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHwKKwkJCQkJalF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTsKKworCQkJCWlmICggaG9va3MgJiYKKwkJCQkJImdldCIgaW4gaG9va3MgJiYKKwkJCQkJKCByZXQgPSBob29rcy5nZXQoIGVsZW0sICJ2YWx1ZSIgKSApICE9PSB1bmRlZmluZWQKKwkJCQkpIHsKKwkJCQkJcmV0dXJuIHJldDsKKwkJCQl9CisKKwkJCQlyZXQgPSBlbGVtLnZhbHVlOworCisJCQkJcmV0dXJuIHR5cGVvZiByZXQgPT09ICJzdHJpbmciID8KKworCQkJCQkvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzCisJCQkJCXJldC5yZXBsYWNlKCBycmV0dXJuLCAiIiApIDoKKworCQkJCQkvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXIKKwkJCQkJcmV0ID09IG51bGwgPyAiIiA6IHJldDsKKwkJCX0KKworCQkJcmV0dXJuOworCQl9CisKKwkJaXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApOworCisJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgeworCQkJdmFyIHZhbDsKKworCQkJaWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkgeworCQkJCXJldHVybjsKKwkJCX0KKworCQkJaWYgKCBpc0Z1bmN0aW9uICkgeworCQkJCXZhbCA9IHZhbHVlLmNhbGwoIHRoaXMsIGksIGpRdWVyeSggdGhpcyApLnZhbCgpICk7CisJCQl9IGVsc2UgeworCQkJCXZhbCA9IHZhbHVlOworCQkJfQorCisJCQkvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyAiIjsgY29udmVydCBudW1iZXJzIHRvIHN0cmluZworCQkJaWYgKCB2YWwgPT0gbnVsbCApIHsKKwkJCQl2YWwgPSAiIjsKKworCQkJfSBlbHNlIGlmICggdHlwZW9mIHZhbCA9PT0gIm51bWJlciIgKSB7CisJCQkJdmFsICs9ICIiOworCisJCQl9IGVsc2UgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsICkgKSB7CisJCQkJdmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7CisJCQkJCXJldHVybiB2YWx1ZSA9PSBudWxsID8gIiIgOiB2YWx1ZSArICIiOworCQkJCX0gKTsKKwkJCX0KKworCQkJaG9va3MgPSBqUXVlcnkudmFsSG9va3NbIHRoaXMudHlwZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07CisKKwkJCS8vIElmIHNldCByZXR1cm5zIHVuZGVmaW5lZCwgZmFsbCBiYWNrIHRvIG5vcm1hbCBzZXR0aW5nCisJCQlpZiAoICFob29rcyB8fCAhKCAic2V0IiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCAidmFsdWUiICkgPT09IHVuZGVmaW5lZCApIHsKKwkJCQl0aGlzLnZhbHVlID0gdmFsOworCQkJfQorCQl9ICk7CisJfQorfSApOworCitqUXVlcnkuZXh0ZW5kKCB7CisJdmFsSG9va3M6IHsKKwkJb3B0aW9uOiB7CisJCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworCisJCQkJdmFyIHZhbCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sICJ2YWx1ZSIgKTsKKwkJCQlyZXR1cm4gdmFsICE9IG51bGwgPworCQkJCQl2YWwgOgorCisJCQkJCS8vIFN1cHBvcnQ6IElFMTAtMTErCisJCQkJCS8vIG9wdGlvbi50ZXh0IHRocm93cyBleGNlcHRpb25zICgjMTQ2ODYsICMxNDg1OCkKKwkJCQkJLy8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UKKwkJCQkJLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2UKKwkJCQkJalF1ZXJ5LnRyaW0oIGpRdWVyeS50ZXh0KCBlbGVtICkgKS5yZXBsYWNlKCByc3BhY2VzLCAiICIgKTsKKwkJCX0KKwkJfSwKKwkJc2VsZWN0OiB7CisJCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJCXZhciB2YWx1ZSwgb3B0aW9uLAorCQkJCQlvcHRpb25zID0gZWxlbS5vcHRpb25zLAorCQkJCQlpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCwKKwkJCQkJb25lID0gZWxlbS50eXBlID09PSAic2VsZWN0LW9uZSIgfHwgaW5kZXggPCAwLAorCQkJCQl2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sCisJCQkJCW1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3RoLAorCQkJCQlpID0gaW5kZXggPCAwID8KKwkJCQkJCW1heCA6CisJCQkJCQlvbmUgPyBpbmRleCA6IDA7CisKKwkJCQkvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zCisJCQkJZm9yICggOyBpIDwgbWF4OyBpKysgKSB7CisJCQkJCW9wdGlvbiA9IG9wdGlvbnNbIGkgXTsKKworCQkJCQkvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSkKKwkJCQkJaWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmCisKKwkJCQkJCQkvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwCisJCQkJCQkJKCBzdXBwb3J0Lm9wdERpc2FibGVkID8KKwkJCQkJCQkJIW9wdGlvbi5kaXNhYmxlZCA6IG9wdGlvbi5nZXRBdHRyaWJ1dGUoICJkaXNhYmxlZCIgKSA9PT0gbnVsbCApICYmCisJCQkJCQkJKCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHwKKwkJCQkJCQkJIWpRdWVyeS5ub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUsICJvcHRncm91cCIgKSApICkgeworCisJCQkJCQkvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uCisJCQkJCQl2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7CisKKwkJCQkJCS8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzCisJCQkJCQlpZiAoIG9uZSApIHsKKwkJCQkJCQlyZXR1cm4gdmFsdWU7CisJCQkJCQl9CisKKwkJCQkJCS8vIE11bHRpLVNlbGVjdHMgcmV0dXJuIGFuIGFycmF5CisJCQkJCQl2YWx1ZXMucHVzaCggdmFsdWUgKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCXJldHVybiB2YWx1ZXM7CisJCQl9LAorCisJCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKwkJCQl2YXIgb3B0aW9uU2V0LCBvcHRpb24sCisJCQkJCW9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsCisJCQkJCXZhbHVlcyA9IGpRdWVyeS5tYWtlQXJyYXkoIHZhbHVlICksCisJCQkJCWkgPSBvcHRpb25zLmxlbmd0aDsKKworCQkJCXdoaWxlICggaS0tICkgeworCQkJCQlvcHRpb24gPSBvcHRpb25zWyBpIF07CisJCQkJCWlmICggb3B0aW9uLnNlbGVjdGVkID0KKwkJCQkJCWpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTEKKwkJCQkJKSB7CisJCQkJCQlvcHRpb25TZXQgPSB0cnVlOworCQkJCQl9CisJCQkJfQorCisJCQkJLy8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXQKKwkJCQlpZiAoICFvcHRpb25TZXQgKSB7CisJCQkJCWVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xOworCQkJCX0KKwkJCQlyZXR1cm4gdmFsdWVzOworCQkJfQorCQl9CisJfQorfSApOworCisvLyBSYWRpb3MgYW5kIGNoZWNrYm94ZXMgZ2V0dGVyL3NldHRlcgoralF1ZXJ5LmVhY2goIFsgInJhZGlvIiwgImNoZWNrYm94IiBdLCBmdW5jdGlvbigpIHsKKwlqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHsKKwkJc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CisJCQlpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWx1ZSApICkgeworCQkJCXJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7CisJCQl9CisJCX0KKwl9OworCWlmICggIXN1cHBvcnQuY2hlY2tPbiApIHsKKwkJalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoICJ2YWx1ZSIgKSA9PT0gbnVsbCA/ICJvbiIgOiBlbGVtLnZhbHVlOworCQl9OworCX0KK30gKTsKKworCisKKworLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvbgorCisKK3ZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLzsKKworalF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7CisKKwl0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHsKKworCQl2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLAorCQkJZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sCisJCQl0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCAidHlwZSIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCwKKwkJCW5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsICJuYW1lc3BhY2UiICkgPyBldmVudC5uYW1lc3BhY2Uuc3BsaXQoICIuIiApIDogW107CisKKwkJY3VyID0gdG1wID0gZWxlbSA9IGVsZW0gfHwgZG9jdW1lbnQ7CisKKwkJLy8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMKKwkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3cKKwkJaWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkgeworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKCB0eXBlLmluZGV4T2YoICIuIiApID4gLTEgKSB7CisKKwkJCS8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKCkKKwkJCW5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCAiLiIgKTsKKwkJCXR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7CisJCQluYW1lc3BhY2VzLnNvcnQoKTsKKwkJfQorCQlvbnR5cGUgPSB0eXBlLmluZGV4T2YoICI6IiApIDwgMCAmJiAib24iICsgdHlwZTsKKworCQkvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmcKKwkJZXZlbnQgPSBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/CisJCQlldmVudCA6CisJCQluZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCB0eXBlb2YgZXZlbnQgPT09ICJvYmplY3QiICYmIGV2ZW50ICk7CisKKwkJLy8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKQorCQlldmVudC5pc1RyaWdnZXIgPSBvbmx5SGFuZGxlcnMgPyAyIDogMzsKKwkJZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCAiLiIgKTsKKwkJZXZlbnQucm5hbWVzcGFjZSA9IGV2ZW50Lm5hbWVzcGFjZSA/CisJCQluZXcgUmVnRXhwKCAiKF58XFwuKSIgKyBuYW1lc3BhY2VzLmpvaW4oICJcXC4oPzouKlxcLnwpIiApICsgIihcXC58JCkiICkgOgorCQkJbnVsbDsKKworCQkvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWQKKwkJZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkOworCQlpZiAoICFldmVudC50YXJnZXQgKSB7CisJCQlldmVudC50YXJnZXQgPSBlbGVtOworCQl9CisKKwkJLy8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdAorCQlkYXRhID0gZGF0YSA9PSBudWxsID8KKwkJCVsgZXZlbnQgXSA6CisJCQlqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTsKKworCQkvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzCisJCXNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OworCQlpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHsKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIERldGVybWluZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFkdmFuY2UsIHBlciBXM0MgZXZlbnRzIHNwZWMgKCM5OTUxKQorCQkvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KQorCQlpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkgeworCisJCQlidWJibGVUeXBlID0gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgfHwgdHlwZTsKKwkJCWlmICggIXJmb2N1c01vcnBoLnRlc3QoIGJ1YmJsZVR5cGUgKyB0eXBlICkgKSB7CisJCQkJY3VyID0gY3VyLnBhcmVudE5vZGU7CisJCQl9CisJCQlmb3IgKCA7IGN1cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7CisJCQkJZXZlbnRQYXRoLnB1c2goIGN1ciApOworCQkJCXRtcCA9IGN1cjsKKwkJCX0KKworCQkJLy8gT25seSBhZGQgd2luZG93IGlmIHdlIGdvdCB0byBkb2N1bWVudCAoZS5nLiwgbm90IHBsYWluIG9iaiBvciBkZXRhY2hlZCBET00pCisJCQlpZiAoIHRtcCA9PT0gKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQgKSApIHsKKwkJCQlldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7CisJCQl9CisJCX0KKworCQkvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoCisJCWkgPSAwOworCQl3aGlsZSAoICggY3VyID0gZXZlbnRQYXRoWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkgeworCisJCQlldmVudC50eXBlID0gaSA+IDEgPworCQkJCWJ1YmJsZVR5cGUgOgorCQkJCXNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTsKKworCQkJLy8galF1ZXJ5IGhhbmRsZXIKKwkJCWhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsICJldmVudHMiICkgfHwge30gKVsgZXZlbnQudHlwZSBdICYmCisJCQkJZGF0YVByaXYuZ2V0KCBjdXIsICJoYW5kbGUiICk7CisJCQlpZiAoIGhhbmRsZSApIHsKKwkJCQloYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApOworCQkJfQorCisJCQkvLyBOYXRpdmUgaGFuZGxlcgorCQkJaGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07CisJCQlpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3VyICkgKSB7CisJCQkJZXZlbnQucmVzdWx0ID0gaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTsKKwkJCQlpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7CisJCQkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisJCQkJfQorCQkJfQorCQl9CisJCWV2ZW50LnR5cGUgPSB0eXBlOworCisJCS8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3cKKwkJaWYgKCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHsKKworCQkJaWYgKCAoICFzcGVjaWFsLl9kZWZhdWx0IHx8CisJCQkJc3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiYKKwkJCQlhY2NlcHREYXRhKCBlbGVtICkgKSB7CisKKwkJCQkvLyBDYWxsIGEgbmF0aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgbmFtZSBhcyB0aGUgZXZlbnQuCisJCQkJLy8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKQorCQkJCWlmICggb250eXBlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7CisKKwkJCQkJLy8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZAorCQkJCQl0bXAgPSBlbGVtWyBvbnR5cGUgXTsKKworCQkJCQlpZiAoIHRtcCApIHsKKwkJCQkJCWVsZW1bIG9udHlwZSBdID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlCisJCQkJCWpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlOworCQkJCQllbGVtWyB0eXBlIF0oKTsKKwkJCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDsKKworCQkJCQlpZiAoIHRtcCApIHsKKwkJCQkJCWVsZW1bIG9udHlwZSBdID0gdG1wOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJcmV0dXJuIGV2ZW50LnJlc3VsdDsKKwl9LAorCisJLy8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lCisJLy8gVXNlZCBvbmx5IGZvciBgZm9jdXMoaW4gfCBvdXQpYCBldmVudHMKKwlzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50ICkgeworCQl2YXIgZSA9IGpRdWVyeS5leHRlbmQoCisJCQluZXcgalF1ZXJ5LkV2ZW50KCksCisJCQlldmVudCwKKwkJCXsKKwkJCQl0eXBlOiB0eXBlLAorCQkJCWlzU2ltdWxhdGVkOiB0cnVlCisJCQl9CisJCSk7CisKKwkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVsZW0gKTsKKwl9CisKK30gKTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCisJdHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7CisJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTsKKwkJfSApOworCX0sCisJdHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgeworCQl2YXIgZWxlbSA9IHRoaXNbIDAgXTsKKwkJaWYgKCBlbGVtICkgeworCQkJcmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7CisJCX0KKwl9Cit9ICk7CisKKworalF1ZXJ5LmVhY2goICggImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrICIgKworCSJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSAiICsKKwkiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIgKS5zcGxpdCggIiAiICksCisJZnVuY3Rpb24oIGksIG5hbWUgKSB7CisKKwkvLyBIYW5kbGUgZXZlbnQgYmluZGluZworCWpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkgeworCQlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgPworCQkJdGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6CisJCQl0aGlzLnRyaWdnZXIoIG5hbWUgKTsKKwl9OworfSApOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisJaG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkgeworCQlyZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTsKKwl9Cit9ICk7CisKKworCisKK3N1cHBvcnQuZm9jdXNpbiA9ICJvbmZvY3VzaW4iIGluIHdpbmRvdzsKKworCisvLyBTdXBwb3J0OiBGaXJlZm94CisvLyBGaXJlZm94IGRvZXNuJ3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkgZXZlbnRzCisvLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4NworLy8KKy8vIFN1cHBvcnQ6IENocm9tZSwgU2FmYXJpCisvLyBmb2N1cyhpbiB8IG91dCkgZXZlbnRzIGZpcmUgYWZ0ZXIgZm9jdXMgJiBibHVyIGV2ZW50cywKKy8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlcgorLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ5ODU3CitpZiAoICFzdXBwb3J0LmZvY3VzaW4gKSB7CisJalF1ZXJ5LmVhY2goIHsgZm9jdXM6ICJmb2N1c2luIiwgYmx1cjogImZvY3Vzb3V0IiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkgeworCisJCS8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0CisJCXZhciBoYW5kbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkgeworCQkJalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSApOworCQl9OworCisJCWpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHsKKwkJCXNldHVwOiBmdW5jdGlvbigpIHsKKwkJCQl2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsCisJCQkJCWF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApOworCisJCQkJaWYgKCAhYXR0YWNoZXMgKSB7CisJCQkJCWRvYy5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7CisJCQkJfQorCQkJCWRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsICggYXR0YWNoZXMgfHwgMCApICsgMSApOworCQkJfSwKKwkJCXRlYXJkb3duOiBmdW5jdGlvbigpIHsKKwkJCQl2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsCisJCQkJCWF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApIC0gMTsKKworCQkJCWlmICggIWF0dGFjaGVzICkgeworCQkJCQlkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApOworCQkJCQlkYXRhUHJpdi5yZW1vdmUoIGRvYywgZml4ICk7CisKKwkJCQl9IGVsc2UgeworCQkJCQlkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCBhdHRhY2hlcyApOworCQkJCX0KKwkJCX0KKwkJfTsKKwl9ICk7Cit9Cit2YXIgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247CisKK3ZhciBub25jZSA9IGpRdWVyeS5ub3coKTsKKwordmFyIHJxdWVyeSA9ICggL1w/LyApOworCisKKworLy8gU3VwcG9ydDogQW5kcm9pZCAyLjMKKy8vIFdvcmthcm91bmQgZmFpbHVyZSB0byBzdHJpbmctY2FzdCBudWxsIGlucHV0CitqUXVlcnkucGFyc2VKU09OID0gZnVuY3Rpb24oIGRhdGEgKSB7CisJcmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKyAiIiApOworfTsKKworCisvLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nCitqUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHsKKwl2YXIgeG1sOworCWlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICJzdHJpbmciICkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvLyBTdXBwb3J0OiBJRTkKKwl0cnkgeworCQl4bWwgPSAoIG5ldyB3aW5kb3cuRE9NUGFyc2VyKCkgKS5wYXJzZUZyb21TdHJpbmcoIGRhdGEsICJ0ZXh0L3htbCIgKTsKKwl9IGNhdGNoICggZSApIHsKKwkJeG1sID0gdW5kZWZpbmVkOworCX0KKworCWlmICggIXhtbCB8fCB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJwYXJzZXJlcnJvciIgKS5sZW5ndGggKSB7CisJCWpRdWVyeS5lcnJvciggIkludmFsaWQgWE1MOiAiICsgZGF0YSApOworCX0KKwlyZXR1cm4geG1sOworfTsKKworCit2YXIKKwlyaGFzaCA9IC8jLiokLywKKwlydHMgPSAvKFs/Jl0pXz1bXiZdKi8sCisJcmhlYWRlcnMgPSAvXiguKj8pOlsgXHRdKihbXlxyXG5dKikkL21nLAorCisJLy8gIzc2NTMsICM4MTI1LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uCisJcmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLywKKwlybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLywKKwlycHJvdG9jb2wgPSAvXlwvXC8vLAorCisJLyogUHJlZmlsdGVycworCSAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpCisJICogMikgVGhlc2UgYXJlIGNhbGxlZDoKKwkgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0CisJICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKQorCSAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGUKKwkgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZAorCSAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gIioiIGlmIG5lZWRlZAorCSAqLworCXByZWZpbHRlcnMgPSB7fSwKKworCS8qIFRyYW5zcG9ydHMgYmluZGluZ3MKKwkgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlCisJICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQKKwkgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byAiKiIgaWYgbmVlZGVkCisJICovCisJdHJhbnNwb3J0cyA9IHt9LAorCisJLy8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uCisJYWxsVHlwZXMgPSAiKi8iLmNvbmNhdCggIioiICksCisKKwkvLyBBbmNob3IgdGFnIGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW4KKwlvcmlnaW5BbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiYSIgKTsKKwlvcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7CisKKy8vIEJhc2UgImNvbnN0cnVjdG9yIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0CitmdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHsKKworCS8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gIioiCisJcmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7CisKKwkJaWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSAic3RyaW5nIiApIHsKKwkJCWZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247CisJCQlkYXRhVHlwZUV4cHJlc3Npb24gPSAiKiI7CisJCX0KKworCQl2YXIgZGF0YVR5cGUsCisJCQlpID0gMCwKKwkJCWRhdGFUeXBlcyA9IGRhdGFUeXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXTsKKworCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBmdW5jICkgKSB7CisKKwkJCS8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb24KKwkJCXdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHsKKworCQkJCS8vIFByZXBlbmQgaWYgcmVxdWVzdGVkCisJCQkJaWYgKCBkYXRhVHlwZVsgMCBdID09PSAiKyIgKSB7CisJCQkJCWRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCAiKiI7CisJCQkJCSggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkudW5zaGlmdCggZnVuYyApOworCisJCQkJLy8gT3RoZXJ3aXNlIGFwcGVuZAorCQkJCX0gZWxzZSB7CisJCQkJCSggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyApOworCQkJCX0KKwkJCX0KKwkJfQorCX07Cit9CisKKy8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0cworZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHsKKworCXZhciBpbnNwZWN0ZWQgPSB7fSwKKwkJc2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7CisKKwlmdW5jdGlvbiBpbnNwZWN0KCBkYXRhVHlwZSApIHsKKwkJdmFyIHNlbGVjdGVkOworCQlpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlOworCQlqUXVlcnkuZWFjaCggc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdLCBmdW5jdGlvbiggXywgcHJlZmlsdGVyT3JGYWN0b3J5ICkgeworCQkJdmFyIGRhdGFUeXBlT3JUcmFuc3BvcnQgPSBwcmVmaWx0ZXJPckZhY3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTsKKwkJCWlmICggdHlwZW9mIGRhdGFUeXBlT3JUcmFuc3BvcnQgPT09ICJzdHJpbmciICYmCisJCQkJIXNlZWtpbmdUcmFuc3BvcnQgJiYgIWluc3BlY3RlZFsgZGF0YVR5cGVPclRyYW5zcG9ydCBdICkgeworCisJCQkJb3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApOworCQkJCWluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCBzZWVraW5nVHJhbnNwb3J0ICkgeworCQkJCXJldHVybiAhKCBzZWxlY3RlZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTsKKwkJCX0KKwkJfSApOworCQlyZXR1cm4gc2VsZWN0ZWQ7CisJfQorCisJcmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5zcGVjdGVkWyAiKiIgXSAmJiBpbnNwZWN0KCAiKiIgKTsKK30KKworLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zCisvLyB0aGF0IHRha2VzICJmbGF0IiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZCkKKy8vIEZpeGVzICM5ODg3CitmdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHsKKwl2YXIga2V5LCBkZWVwLAorCQlmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307CisKKwlmb3IgKCBrZXkgaW4gc3JjICkgeworCQlpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHsKKwkJCSggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07CisJCX0KKwl9CisJaWYgKCBkZWVwICkgeworCQlqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTsKKwl9CisKKwlyZXR1cm4gdGFyZ2V0OworfQorCisvKiBIYW5kbGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6CisgKiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKQorICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlCisgKi8KK2Z1bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7CisKKwl2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsCisJCWNvbnRlbnRzID0gcy5jb250ZW50cywKKwkJZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7CisKKwkvLyBSZW1vdmUgYXV0byBkYXRhVHlwZSBhbmQgZ2V0IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJvY2VzcworCXdoaWxlICggZGF0YVR5cGVzWyAwIF0gPT09ICIqIiApIHsKKwkJZGF0YVR5cGVzLnNoaWZ0KCk7CisJCWlmICggY3QgPT09IHVuZGVmaW5lZCApIHsKKwkJCWN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggIkNvbnRlbnQtVHlwZSIgKTsKKwkJfQorCX0KKworCS8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZQorCWlmICggY3QgKSB7CisJCWZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7CisJCQlpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkgeworCQkJCWRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGUKKwlpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHsKKwkJZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdOworCX0gZWxzZSB7CisKKwkJLy8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlcworCQlmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHsKKwkJCWlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArICIgIiArIGRhdGFUeXBlc1sgMCBdIF0gKSB7CisJCQkJZmluYWxEYXRhVHlwZSA9IHR5cGU7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoICFmaXJzdERhdGFUeXBlICkgeworCQkJCWZpcnN0RGF0YVR5cGUgPSB0eXBlOworCQkJfQorCQl9CisKKwkJLy8gT3IganVzdCB1c2UgZmlyc3Qgb25lCisJCWZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7CisJfQorCisJLy8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZQorCS8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkCisJLy8gYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZQorCWlmICggZmluYWxEYXRhVHlwZSApIHsKKwkJaWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHsKKwkJCWRhdGFUeXBlcy51bnNoaWZ0KCBmaW5hbERhdGFUeXBlICk7CisJCX0KKwkJcmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdOworCX0KK30KKworLyogQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZQorICogQWxzbyBzZXRzIHRoZSByZXNwb25zZVhYWCBmaWVsZHMgb24gdGhlIGpxWEhSIGluc3RhbmNlCisgKi8KK2Z1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHsKKwl2YXIgY29udjIsIGN1cnJlbnQsIGNvbnYsIHRtcCwgcHJldiwKKwkJY29udmVydGVycyA9IHt9LAorCisJCS8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb24KKwkJZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMuc2xpY2UoKTsKKworCS8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5cworCWlmICggZGF0YVR5cGVzWyAxIF0gKSB7CisJCWZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkgeworCQkJY29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTsKKwkJfQorCX0KKworCWN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTsKKworCS8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlCisJd2hpbGUgKCBjdXJyZW50ICkgeworCisJCWlmICggcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdICkgeworCQkJanFYSFJbIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSBdID0gcmVzcG9uc2U7CisJCX0KKworCQkvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZAorCQlpZiAoICFwcmV2ICYmIGlzU3VjY2VzcyAmJiBzLmRhdGFGaWx0ZXIgKSB7CisJCQlyZXNwb25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTsKKwkJfQorCisJCXByZXYgPSBjdXJyZW50OworCQljdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7CisKKwkJaWYgKCBjdXJyZW50ICkgeworCisJCS8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG8KKwkJCWlmICggY3VycmVudCA9PT0gIioiICkgeworCisJCQkJY3VycmVudCA9IHByZXY7CisKKwkJCS8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJldiBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnQKKwkJCX0gZWxzZSBpZiAoIHByZXYgIT09ICIqIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkgeworCisJCQkJLy8gU2VlayBhIGRpcmVjdCBjb252ZXJ0ZXIKKwkJCQljb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyAiKiAiICsgY3VycmVudCBdOworCisJCQkJLy8gSWYgbm9uZSBmb3VuZCwgc2VlayBhIHBhaXIKKwkJCQlpZiAoICFjb252ICkgeworCQkJCQlmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkgeworCisJCQkJCQkvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnQKKwkJCQkJCXRtcCA9IGNvbnYyLnNwbGl0KCAiICIgKTsKKwkJCQkJCWlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7CisKKwkJCQkJCQkvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXQKKwkJCQkJCQljb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIHRtcFsgMCBdIF0gfHwKKwkJCQkJCQkJY29udmVydGVyc1sgIiogIiArIHRtcFsgMCBdIF07CisJCQkJCQkJaWYgKCBjb252ICkgeworCisJCQkJCQkJCS8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnMKKwkJCQkJCQkJaWYgKCBjb252ID09PSB0cnVlICkgeworCQkJCQkJCQkJY29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07CisKKwkJCQkJCQkJLy8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZQorCQkJCQkJCQl9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkgeworCQkJCQkJCQkJY3VycmVudCA9IHRtcFsgMCBdOworCQkJCQkJCQkJZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7CisJCQkJCQkJCX0KKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCisJCQkJLy8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpCisJCQkJaWYgKCBjb252ICE9PSB0cnVlICkgeworCisJCQkJCS8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW0KKwkJCQkJaWYgKCBjb252ICYmIHMudGhyb3dzICkgeworCQkJCQkJcmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApOworCQkJCQl9IGVsc2UgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQlyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7CisJCQkJCQl9IGNhdGNoICggZSApIHsKKwkJCQkJCQlyZXR1cm4geworCQkJCQkJCQlzdGF0ZTogInBhcnNlcmVycm9yIiwKKwkJCQkJCQkJZXJyb3I6IGNvbnYgPyBlIDogIk5vIGNvbnZlcnNpb24gZnJvbSAiICsgcHJldiArICIgdG8gIiArIGN1cnJlbnQKKwkJCQkJCQl9OworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHsgc3RhdGU6ICJzdWNjZXNzIiwgZGF0YTogcmVzcG9uc2UgfTsKK30KKworalF1ZXJ5LmV4dGVuZCggeworCisJLy8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzCisJYWN0aXZlOiAwLAorCisJLy8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdAorCWxhc3RNb2RpZmllZDoge30sCisJZXRhZzoge30sCisKKwlhamF4U2V0dGluZ3M6IHsKKwkJdXJsOiBsb2NhdGlvbi5ocmVmLAorCQl0eXBlOiAiR0VUIiwKKwkJaXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSwKKwkJZ2xvYmFsOiB0cnVlLAorCQlwcm9jZXNzRGF0YTogdHJ1ZSwKKwkJYXN5bmM6IHRydWUsCisJCWNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IiwKKwkJLyoKKwkJdGltZW91dDogMCwKKwkJZGF0YTogbnVsbCwKKwkJZGF0YVR5cGU6IG51bGwsCisJCXVzZXJuYW1lOiBudWxsLAorCQlwYXNzd29yZDogbnVsbCwKKwkJY2FjaGU6IG51bGwsCisJCXRocm93czogZmFsc2UsCisJCXRyYWRpdGlvbmFsOiBmYWxzZSwKKwkJaGVhZGVyczoge30sCisJCSovCisKKwkJYWNjZXB0czogeworCQkJIioiOiBhbGxUeXBlcywKKwkJCXRleHQ6ICJ0ZXh0L3BsYWluIiwKKwkJCWh0bWw6ICJ0ZXh0L2h0bWwiLAorCQkJeG1sOiAiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsCisJCQlqc29uOiAiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IgorCQl9LAorCisJCWNvbnRlbnRzOiB7CisJCQl4bWw6IC9cYnhtbFxiLywKKwkJCWh0bWw6IC9cYmh0bWwvLAorCQkJanNvbjogL1xianNvblxiLworCQl9LAorCisJCXJlc3BvbnNlRmllbGRzOiB7CisJCQl4bWw6ICJyZXNwb25zZVhNTCIsCisJCQl0ZXh0OiAicmVzcG9uc2VUZXh0IiwKKwkJCWpzb246ICJyZXNwb25zZUpTT04iCisJCX0sCisKKwkJLy8gRGF0YSBjb252ZXJ0ZXJzCisJCS8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCAiKiIpIGFuZCBkZXN0aW5hdGlvbiB0eXBlcyB3aXRoIGEgc2luZ2xlIHNwYWNlCisJCWNvbnZlcnRlcnM6IHsKKworCQkJLy8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0CisJCQkiKiB0ZXh0IjogU3RyaW5nLAorCisJCQkvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbikKKwkJCSJ0ZXh0IGh0bWwiOiB0cnVlLAorCisJCQkvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uCisJCQkidGV4dCBqc29uIjogalF1ZXJ5LnBhcnNlSlNPTiwKKworCQkJLy8gUGFyc2UgdGV4dCBhcyB4bWwKKwkJCSJ0ZXh0IHhtbCI6IGpRdWVyeS5wYXJzZVhNTAorCQl9LAorCisJCS8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6CisJCS8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWYKKwkJLy8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmUKKwkJLy8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpCisJCWZsYXRPcHRpb25zOiB7CisJCQl1cmw6IHRydWUsCisJCQljb250ZXh0OiB0cnVlCisJCX0KKwl9LAorCisJLy8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXQKKwkvLyB3aXRoIGJvdGggYWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBmaWVsZHMuCisJLy8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy4KKwlhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkgeworCQlyZXR1cm4gc2V0dGluZ3MgPworCisJCQkvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdAorCQkJYWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICksIHNldHRpbmdzICkgOgorCisJCQkvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzCisJCQlhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNldHRpbmdzLCB0YXJnZXQgKTsKKwl9LAorCisJYWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksCisJYWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksCisKKwkvLyBNYWluIG1ldGhvZAorCWFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7CisKKwkJLy8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmUKKwkJaWYgKCB0eXBlb2YgdXJsID09PSAib2JqZWN0IiApIHsKKwkJCW9wdGlvbnMgPSB1cmw7CisJCQl1cmwgPSB1bmRlZmluZWQ7CisJCX0KKworCQkvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdAorCQlvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKworCQl2YXIgdHJhbnNwb3J0LAorCisJCQkvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtCisJCQljYWNoZVVSTCwKKworCQkJLy8gUmVzcG9uc2UgaGVhZGVycworCQkJcmVzcG9uc2VIZWFkZXJzU3RyaW5nLAorCQkJcmVzcG9uc2VIZWFkZXJzLAorCisJCQkvLyB0aW1lb3V0IGhhbmRsZQorCQkJdGltZW91dFRpbWVyLAorCisJCQkvLyBVcmwgY2xlYW51cCB2YXIKKwkJCXVybEFuY2hvciwKKworCQkJLy8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkCisJCQlmaXJlR2xvYmFscywKKworCQkJLy8gTG9vcCB2YXJpYWJsZQorCQkJaSwKKworCQkJLy8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdAorCQkJcyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksCisKKwkJCS8vIENhbGxiYWNrcyBjb250ZXh0CisJCQljYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcywKKworCQkJLy8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvbgorCQkJZ2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmCisJCQkJKCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID8KKwkJCQkJalF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6CisJCQkJCWpRdWVyeS5ldmVudCwKKworCQkJLy8gRGVmZXJyZWRzCisJCQlkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLAorCQkJY29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoICJvbmNlIG1lbW9yeSIgKSwKKworCQkJLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKKwkJCXN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sCisKKwkJCS8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpCisJCQlyZXF1ZXN0SGVhZGVycyA9IHt9LAorCQkJcmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LAorCisJCQkvLyBUaGUganFYSFIgc3RhdGUKKwkJCXN0YXRlID0gMCwKKworCQkJLy8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlCisJCQlzdHJBYm9ydCA9ICJjYW5jZWxlZCIsCisKKwkJCS8vIEZha2UgeGhyCisJCQlqcVhIUiA9IHsKKwkJCQlyZWFkeVN0YXRlOiAwLAorCisJCQkJLy8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZAorCQkJCWdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkgeworCQkJCQl2YXIgbWF0Y2g7CisJCQkJCWlmICggc3RhdGUgPT09IDIgKSB7CisJCQkJCQlpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7CisJCQkJCQkJcmVzcG9uc2VIZWFkZXJzID0ge307CisJCQkJCQkJd2hpbGUgKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHsKKwkJCQkJCQkJcmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgXSA9IG1hdGNoWyAyIF07CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJbWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpIF07CisJCQkJCX0KKwkJCQkJcmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2g7CisJCQkJfSwKKworCQkJCS8vIFJhdyBzdHJpbmcKKwkJCQlnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkgeworCQkJCQlyZXR1cm4gc3RhdGUgPT09IDIgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsOworCQkJCX0sCisKKwkJCQkvLyBDYWNoZXMgdGhlIGhlYWRlcgorCQkJCXNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKwkJCQkJdmFyIGxuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOworCQkJCQlpZiAoICFzdGF0ZSApIHsKKwkJCQkJCW5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBsbmFtZSBdID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbG5hbWUgXSB8fCBuYW1lOworCQkJCQkJcmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlOworCQkJCQl9CisJCQkJCXJldHVybiB0aGlzOworCQkJCX0sCisKKwkJCQkvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlcgorCQkJCW92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkgeworCQkJCQlpZiAoICFzdGF0ZSApIHsKKwkJCQkJCXMubWltZVR5cGUgPSB0eXBlOworCQkJCQl9CisJCQkJCXJldHVybiB0aGlzOworCQkJCX0sCisKKwkJCQkvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcworCQkJCXN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAgKSB7CisJCQkJCXZhciBjb2RlOworCQkJCQlpZiAoIG1hcCApIHsKKwkJCQkJCWlmICggc3RhdGUgPCAyICkgeworCQkJCQkJCWZvciAoIGNvZGUgaW4gbWFwICkgeworCisJCQkJCQkJCS8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJhY2sgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXMKKwkJCQkJCQkJc3RhdHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2RlIF0sIG1hcFsgY29kZSBdIF07CisJCQkJCQkJfQorCQkJCQkJfSBlbHNlIHsKKworCQkJCQkJCS8vIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrcworCQkJCQkJCWpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApOworCQkJCQkJfQorCQkJCQl9CisJCQkJCXJldHVybiB0aGlzOworCQkJCX0sCisKKwkJCQkvLyBDYW5jZWwgdGhlIHJlcXVlc3QKKwkJCQlhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7CisJCQkJCXZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0OworCQkJCQlpZiAoIHRyYW5zcG9ydCApIHsKKwkJCQkJCXRyYW5zcG9ydC5hYm9ydCggZmluYWxUZXh0ICk7CisJCQkJCX0KKwkJCQkJZG9uZSggMCwgZmluYWxUZXh0ICk7CisJCQkJCXJldHVybiB0aGlzOworCQkJCX0KKwkJCX07CisKKwkJLy8gQXR0YWNoIGRlZmVycmVkcworCQlkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApLmNvbXBsZXRlID0gY29tcGxldGVEZWZlcnJlZC5hZGQ7CisJCWpxWEhSLnN1Y2Nlc3MgPSBqcVhIUi5kb25lOworCQlqcVhIUi5lcnJvciA9IGpxWEhSLmZhaWw7CisKKwkJLy8gUmVtb3ZlIGhhc2ggY2hhcmFjdGVyICgjNzUzMTogYW5kIHN0cmluZyBwcm9tb3Rpb24pCisJCS8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKHByZWZpbHRlcnMgbWlnaHQgZXhwZWN0IGl0KQorCQkvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKCMxMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKQorCQkvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGUKKwkJcy51cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGxvY2F0aW9uLmhyZWYgKSArICIiICkucmVwbGFjZSggcmhhc2gsICIiICkKKwkJCS5yZXBsYWNlKCBycHJvdG9jb2wsIGxvY2F0aW9uLnByb3RvY29sICsgIi8vIiApOworCisJCS8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0ICMxMjAwNAorCQlzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlOworCisJCS8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3QKKwkJcy5kYXRhVHlwZXMgPSBqUXVlcnkudHJpbSggcy5kYXRhVHlwZSB8fCAiKiIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbICIiIF07CisKKwkJLy8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHRoZSBvcmlnaW4gZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCBvcmlnaW4uCisJCWlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkgeworCQkJdXJsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImEiICk7CisKKwkJCS8vIFN1cHBvcnQ6IElFOC0xMSsKKwkJCS8vIElFIHRocm93cyBleGNlcHRpb24gaWYgdXJsIGlzIG1hbGZvcm1lZCwgZS5nLiBodHRwOi8vZXhhbXBsZS5jb206ODB4LworCQkJdHJ5IHsKKwkJCQl1cmxBbmNob3IuaHJlZiA9IHMudXJsOworCisJCQkJLy8gU3VwcG9ydDogSUU4LTExKworCQkJCS8vIEFuY2hvcidzIGhvc3QgcHJvcGVydHkgaXNuJ3QgY29ycmVjdGx5IHNldCB3aGVuIHMudXJsIGlzIHJlbGF0aXZlCisJCQkJdXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjsKKwkJCQlzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5jaG9yLnByb3RvY29sICsgIi8vIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PQorCQkJCQl1cmxBbmNob3IucHJvdG9jb2wgKyAiLy8iICsgdXJsQW5jaG9yLmhvc3Q7CisJCQl9IGNhdGNoICggZSApIHsKKworCQkJCS8vIElmIHRoZXJlIGlzIGFuIGVycm9yIHBhcnNpbmcgdGhlIFVSTCwgYXNzdW1lIGl0IGlzIGNyb3NzRG9tYWluLAorCQkJCS8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWQKKwkJCQlzLmNyb3NzRG9tYWluID0gdHJ1ZTsKKwkJCX0KKwkJfQorCisJCS8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZworCQlpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09ICJzdHJpbmciICkgeworCQkJcy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTsKKwkJfQorCisJCS8vIEFwcGx5IHByZWZpbHRlcnMKKwkJaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7CisKKwkJLy8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmUKKwkJaWYgKCBzdGF0ZSA9PT0gMiApIHsKKwkJCXJldHVybiBqcVhIUjsKKwkJfQorCisJCS8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvCisJCS8vIERvbid0IGZpcmUgZXZlbnRzIGlmIGpRdWVyeS5ldmVudCBpcyB1bmRlZmluZWQgaW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlvICgjMTUxMTgpCisJCWZpcmVHbG9iYWxzID0galF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFsOworCisJCS8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHMKKwkJaWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7CisJCQlqUXVlcnkuZXZlbnQudHJpZ2dlciggImFqYXhTdGFydCIgKTsKKwkJfQorCisJCS8vIFVwcGVyY2FzZSB0aGUgdHlwZQorCQlzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTsKKworCQkvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudAorCQlzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTsKKworCQkvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2UKKwkJLy8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uCisJCWNhY2hlVVJMID0gcy51cmw7CisKKwkJLy8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnQKKwkJaWYgKCAhcy5oYXNDb250ZW50ICkgeworCisJCQkvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSwgYXBwZW5kIGRhdGEgdG8gdXJsCisJCQlpZiAoIHMuZGF0YSApIHsKKwkJCQljYWNoZVVSTCA9ICggcy51cmwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/ICImIiA6ICI/IiApICsgcy5kYXRhICk7CisKKwkJCQkvLyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5CisJCQkJZGVsZXRlIHMuZGF0YTsKKwkJCX0KKworCQkJLy8gQWRkIGFudGktY2FjaGUgaW4gdXJsIGlmIG5lZWRlZAorCQkJaWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHsKKwkJCQlzLnVybCA9IHJ0cy50ZXN0KCBjYWNoZVVSTCApID8KKworCQkJCQkvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgJ18nIHBhcmFtZXRlciwgc2V0IGl0cyB2YWx1ZQorCQkJCQljYWNoZVVSTC5yZXBsYWNlKCBydHMsICIkMV89IiArIG5vbmNlKysgKSA6CisKKwkJCQkJLy8gT3RoZXJ3aXNlIGFkZCBvbmUgdG8gdGhlIGVuZAorCQkJCQljYWNoZVVSTCArICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyAiJiIgOiAiPyIgKSArICJfPSIgKyBub25jZSsrOworCQkJfQorCQl9CisKKwkJLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS4KKwkJaWYgKCBzLmlmTW9kaWZpZWQgKSB7CisJCQlpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKSB7CisJCQkJanFYSFIuc2V0UmVxdWVzdEhlYWRlciggIklmLU1vZGlmaWVkLVNpbmNlIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApOworCQkJfQorCQkJaWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHsKKwkJCQlqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTm9uZS1NYXRjaCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7CisJCQl9CisJCX0KKworCQkvLyBTZXQgdGhlIGNvcnJlY3QgaGVhZGVyLCBpZiBkYXRhIGlzIGJlaW5nIHNlbnQKKwkJaWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7CisJCQlqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiQ29udGVudC1UeXBlIiwgcy5jb250ZW50VHlwZSApOworCQl9CisKKwkJLy8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZQorCQlqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKAorCQkJIkFjY2VwdCIsCisJCQlzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdID8KKwkJCQlzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArCisJCQkJCSggcy5kYXRhVHlwZXNbIDAgXSAhPT0gIioiID8gIiwgIiArIGFsbFR5cGVzICsgIjsgcT0wLjAxIiA6ICIiICkgOgorCQkJCXMuYWNjZXB0c1sgIioiIF0KKwkJKTsKKworCQkvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb24KKwkJZm9yICggaSBpbiBzLmhlYWRlcnMgKSB7CisJCQlqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApOworCQl9CisKKwkJLy8gQWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydAorCQlpZiAoIHMuYmVmb3JlU2VuZCAmJgorCQkJKCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBzdGF0ZSA9PT0gMiApICkgeworCisJCQkvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJlYWR5IGFuZCByZXR1cm4KKwkJCXJldHVybiBqcVhIUi5hYm9ydCgpOworCQl9CisKKwkJLy8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uCisJCXN0ckFib3J0ID0gImFib3J0IjsKKworCQkvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHMKKwkJZm9yICggaSBpbiB7IHN1Y2Nlc3M6IDEsIGVycm9yOiAxLCBjb21wbGV0ZTogMSB9ICkgeworCQkJanFYSFJbIGkgXSggc1sgaSBdICk7CisJCX0KKworCQkvLyBHZXQgdHJhbnNwb3J0CisJCXRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApOworCisJCS8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydAorCQlpZiAoICF0cmFuc3BvcnQgKSB7CisJCQlkb25lKCAtMSwgIk5vIFRyYW5zcG9ydCIgKTsKKwkJfSBlbHNlIHsKKwkJCWpxWEhSLnJlYWR5U3RhdGUgPSAxOworCisJCQkvLyBTZW5kIGdsb2JhbCBldmVudAorCQkJaWYgKCBmaXJlR2xvYmFscyApIHsKKwkJCQlnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggImFqYXhTZW5kIiwgWyBqcVhIUiwgcyBdICk7CisJCQl9CisKKwkJCS8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlCisJCQlpZiAoIHN0YXRlID09PSAyICkgeworCQkJCXJldHVybiBqcVhIUjsKKwkJCX0KKworCQkJLy8gVGltZW91dAorCQkJaWYgKCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7CisJCQkJdGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgeworCQkJCQlqcVhIUi5hYm9ydCggInRpbWVvdXQiICk7CisJCQkJfSwgcy50aW1lb3V0ICk7CisJCQl9CisKKwkJCXRyeSB7CisJCQkJc3RhdGUgPSAxOworCQkJCXRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApOworCQkJfSBjYXRjaCAoIGUgKSB7CisKKwkJCQkvLyBQcm9wYWdhdGUgZXhjZXB0aW9uIGFzIGVycm9yIGlmIG5vdCBkb25lCisJCQkJaWYgKCBzdGF0ZSA8IDIgKSB7CisJCQkJCWRvbmUoIC0xLCBlICk7CisKKwkJCQkvLyBTaW1wbHkgcmV0aHJvdyBvdGhlcndpc2UKKwkJCQl9IGVsc2UgeworCQkJCQl0aHJvdyBlOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZQorCQlmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHsKKwkJCXZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsCisJCQkJc3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1RleHQ7CisKKwkJCS8vIENhbGxlZCBvbmNlCisJCQlpZiAoIHN0YXRlID09PSAyICkgeworCQkJCXJldHVybjsKKwkJCX0KKworCQkJLy8gU3RhdGUgaXMgImRvbmUiIG5vdworCQkJc3RhdGUgPSAyOworCisJCQkvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0cworCQkJaWYgKCB0aW1lb3V0VGltZXIgKSB7CisJCQkJd2luZG93LmNsZWFyVGltZW91dCggdGltZW91dFRpbWVyICk7CisJCQl9CisKKwkJCS8vIERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uCisJCQkvLyAobm8gbWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKQorCQkJdHJhbnNwb3J0ID0gdW5kZWZpbmVkOworCisJCQkvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzCisJCQlyZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8ICIiOworCisJCQkvLyBTZXQgcmVhZHlTdGF0ZQorCQkJanFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDsKKworCQkJLy8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWwKKwkJCWlzU3VjY2VzcyA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0OworCisJCQkvLyBHZXQgcmVzcG9uc2UgZGF0YQorCQkJaWYgKCByZXNwb25zZXMgKSB7CisJCQkJcmVzcG9uc2UgPSBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICk7CisJCQl9CisKKwkJCS8vIENvbnZlcnQgbm8gbWF0dGVyIHdoYXQgKHRoYXQgd2F5IHJlc3BvbnNlWFhYIGZpZWxkcyBhcmUgYWx3YXlzIHNldCkKKwkJCXJlc3BvbnNlID0gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICk7CisKKwkJCS8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNoYWluaW5nCisJCQlpZiAoIGlzU3VjY2VzcyApIHsKKworCQkJCS8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuCisJCQkJaWYgKCBzLmlmTW9kaWZpZWQgKSB7CisJCQkJCW1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoICJMYXN0LU1vZGlmaWVkIiApOworCQkJCQlpZiAoIG1vZGlmaWVkICkgeworCQkJCQkJalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSA9IG1vZGlmaWVkOworCQkJCQl9CisJCQkJCW1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoICJldGFnIiApOworCQkJCQlpZiAoIG1vZGlmaWVkICkgeworCQkJCQkJalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8vIGlmIG5vIGNvbnRlbnQKKwkJCQlpZiAoIHN0YXR1cyA9PT0gMjA0IHx8IHMudHlwZSA9PT0gIkhFQUQiICkgeworCQkJCQlzdGF0dXNUZXh0ID0gIm5vY29udGVudCI7CisKKwkJCQkvLyBpZiBub3QgbW9kaWZpZWQKKwkJCQl9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHsKKwkJCQkJc3RhdHVzVGV4dCA9ICJub3Rtb2RpZmllZCI7CisKKwkJCQkvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXQKKwkJCQl9IGVsc2UgeworCQkJCQlzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7CisJCQkJCXN1Y2Nlc3MgPSByZXNwb25zZS5kYXRhOworCQkJCQllcnJvciA9IHJlc3BvbnNlLmVycm9yOworCQkJCQlpc1N1Y2Nlc3MgPSAhZXJyb3I7CisJCQkJfQorCQkJfSBlbHNlIHsKKworCQkJCS8vIEV4dHJhY3QgZXJyb3IgZnJvbSBzdGF0dXNUZXh0IGFuZCBub3JtYWxpemUgZm9yIG5vbi1hYm9ydHMKKwkJCQllcnJvciA9IHN0YXR1c1RleHQ7CisJCQkJaWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7CisJCQkJCXN0YXR1c1RleHQgPSAiZXJyb3IiOworCQkJCQlpZiAoIHN0YXR1cyA8IDAgKSB7CisJCQkJCQlzdGF0dXMgPSAwOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQkvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdAorCQkJanFYSFIuc3RhdHVzID0gc3RhdHVzOworCQkJanFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyAiIjsKKworCQkJLy8gU3VjY2Vzcy9FcnJvcgorCQkJaWYgKCBpc1N1Y2Nlc3MgKSB7CisJCQkJZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7CisJCQl9IGVsc2UgeworCQkJCWRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApOworCQkJfQorCisJCQkvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcworCQkJanFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApOworCQkJc3RhdHVzQ29kZSA9IHVuZGVmaW5lZDsKKworCQkJaWYgKCBmaXJlR2xvYmFscyApIHsKKwkJCQlnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gImFqYXhTdWNjZXNzIiA6ICJhamF4RXJyb3IiLAorCQkJCQlbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApOworCQkJfQorCisJCQkvLyBDb21wbGV0ZQorCQkJY29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTsKKworCQkJaWYgKCBmaXJlR2xvYmFscyApIHsKKwkJCQlnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggImFqYXhDb21wbGV0ZSIsIFsganFYSFIsIHMgXSApOworCisJCQkJLy8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyCisJCQkJaWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHsKKwkJCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RvcCIgKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm4ganFYSFI7CisJfSwKKworCWdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkgeworCQlyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgImpzb24iICk7CisJfSwKKworCWdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7CisJCXJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssICJzY3JpcHQiICk7CisJfQorfSApOworCitqUXVlcnkuZWFjaCggWyAiZ2V0IiwgInBvc3QiIF0sIGZ1bmN0aW9uKCBpLCBtZXRob2QgKSB7CisJalF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkgeworCisJCS8vIFNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkCisJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGRhdGEgKSApIHsKKwkJCXR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrOworCQkJY2FsbGJhY2sgPSBkYXRhOworCQkJZGF0YSA9IHVuZGVmaW5lZDsKKwkJfQorCisJCS8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKQorCQlyZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHsKKwkJCXVybDogdXJsLAorCQkJdHlwZTogbWV0aG9kLAorCQkJZGF0YVR5cGU6IHR5cGUsCisJCQlkYXRhOiBkYXRhLAorCQkJc3VjY2VzczogY2FsbGJhY2sKKwkJfSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7CisJfTsKK30gKTsKKworCitqUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsICkgeworCXJldHVybiBqUXVlcnkuYWpheCggeworCQl1cmw6IHVybCwKKworCQkvLyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKCMxMTI2NCkKKwkJdHlwZTogIkdFVCIsCisJCWRhdGFUeXBlOiAic2NyaXB0IiwKKwkJYXN5bmM6IGZhbHNlLAorCQlnbG9iYWw6IGZhbHNlLAorCQkidGhyb3dzIjogdHJ1ZQorCX0gKTsKK307CisKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCXdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkgeworCQl2YXIgd3JhcDsKKworCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7CisJCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHsKKwkJCQlqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApOworCQkJfSApOworCQl9CisKKwkJaWYgKCB0aGlzWyAwIF0gKSB7CisKKwkJCS8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kCisJCQl3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCApLmVxKCAwICkuY2xvbmUoIHRydWUgKTsKKworCQkJaWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHsKKwkJCQl3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7CisJCQl9CisKKwkJCXdyYXAubWFwKCBmdW5jdGlvbigpIHsKKwkJCQl2YXIgZWxlbSA9IHRoaXM7CisKKwkJCQl3aGlsZSAoIGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQgKSB7CisJCQkJCWVsZW0gPSBlbGVtLmZpcnN0RWxlbWVudENoaWxkOworCQkJCX0KKworCQkJCXJldHVybiBlbGVtOworCQkJfSApLmFwcGVuZCggdGhpcyApOworCQl9CisKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7CisJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHsKKwkJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgeworCQkJCWpRdWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTsKKwkJCX0gKTsKKwkJfQorCisJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworCQkJdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSwKKwkJCQljb250ZW50cyA9IHNlbGYuY29udGVudHMoKTsKKworCQkJaWYgKCBjb250ZW50cy5sZW5ndGggKSB7CisJCQkJY29udGVudHMud3JhcEFsbCggaHRtbCApOworCisJCQl9IGVsc2UgeworCQkJCXNlbGYuYXBwZW5kKCBodG1sICk7CisJCQl9CisJCX0gKTsKKwl9LAorCisJd3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7CisJCXZhciBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKTsKKworCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHsKKwkJCWpRdWVyeSggdGhpcyApLndyYXBBbGwoIGlzRnVuY3Rpb24gPyBodG1sLmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwgKTsKKwkJfSApOworCX0sCisKKwl1bndyYXA6IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKCBmdW5jdGlvbigpIHsKKwkJCWlmICggIWpRdWVyeS5ub2RlTmFtZSggdGhpcywgImJvZHkiICkgKSB7CisJCQkJalF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApOworCQkJfQorCQl9ICkuZW5kKCk7CisJfQorfSApOworCisKK2pRdWVyeS5leHByLmZpbHRlcnMuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7CisJcmV0dXJuICFqUXVlcnkuZXhwci5maWx0ZXJzLnZpc2libGUoIGVsZW0gKTsKK307CitqUXVlcnkuZXhwci5maWx0ZXJzLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHsKKworCS8vIFN1cHBvcnQ6IE9wZXJhIDw9IDEyLjEyCisJLy8gT3BlcmEgcmVwb3J0cyBvZmZzZXRXaWR0aHMgYW5kIG9mZnNldEhlaWdodHMgbGVzcyB0aGFuIHplcm8gb24gc29tZSBlbGVtZW50cworCS8vIFVzZSBPUiBpbnN0ZWFkIG9mIEFORCBhcyB0aGUgZWxlbWVudCBpcyBub3QgdmlzaWJsZSBpZiBlaXRoZXIgaXMgdHJ1ZQorCS8vIFNlZSB0aWNrZXRzICMxMDQwNiBhbmQgIzEzMTMyCisJcmV0dXJuIGVsZW0ub2Zmc2V0V2lkdGggPiAwIHx8IGVsZW0ub2Zmc2V0SGVpZ2h0ID4gMCB8fCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoID4gMDsKK307CisKKworCisKK3ZhciByMjAgPSAvJTIwL2csCisJcmJyYWNrZXQgPSAvXFtcXSQvLAorCXJDUkxGID0gL1xyP1xuL2csCisJcnN1Ym1pdHRlclR5cGVzID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLAorCXJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTsKKworZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkgeworCXZhciBuYW1lOworCisJaWYgKCBqUXVlcnkuaXNBcnJheSggb2JqICkgKSB7CisKKwkJLy8gU2VyaWFsaXplIGFycmF5IGl0ZW0uCisJCWpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkgeworCQkJaWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHsKKworCQkJCS8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci4KKwkJCQlhZGQoIHByZWZpeCwgdiApOworCisJCQl9IGVsc2UgeworCisJCQkJLy8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguCisJCQkJYnVpbGRQYXJhbXMoCisJCQkJCXByZWZpeCArICJbIiArICggdHlwZW9mIHYgPT09ICJvYmplY3QiICYmIHYgIT0gbnVsbCA/IGkgOiAiIiApICsgIl0iLAorCQkJCQl2LAorCQkJCQl0cmFkaXRpb25hbCwKKwkJCQkJYWRkCisJCQkJKTsKKwkJCX0KKwkJfSApOworCisJfSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIGpRdWVyeS50eXBlKCBvYmogKSA9PT0gIm9iamVjdCIgKSB7CisKKwkJLy8gU2VyaWFsaXplIG9iamVjdCBpdGVtLgorCQlmb3IgKCBuYW1lIGluIG9iaiApIHsKKwkJCWJ1aWxkUGFyYW1zKCBwcmVmaXggKyAiWyIgKyBuYW1lICsgIl0iLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApOworCQl9CisKKwl9IGVsc2UgeworCisJCS8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS4KKwkJYWRkKCBwcmVmaXgsIG9iaiApOworCX0KK30KKworLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2YKKy8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZworalF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkgeworCXZhciBwcmVmaXgsCisJCXMgPSBbXSwKKwkJYWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7CisKKwkJCS8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgcmV0dXJuIGl0cyB2YWx1ZQorCQkJdmFsdWUgPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSA/IHZhbHVlKCkgOiAoIHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlICk7CisJCQlzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50KCBrZXkgKSArICI9IiArIGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgKTsKKwkJfTsKKworCS8vIFNldCB0cmFkaXRpb25hbCB0byB0cnVlIGZvciBqUXVlcnkgPD0gMS4zLjIgYmVoYXZpb3IuCisJaWYgKCB0cmFkaXRpb25hbCA9PT0gdW5kZWZpbmVkICkgeworCQl0cmFkaXRpb25hbCA9IGpRdWVyeS5hamF4U2V0dGluZ3MgJiYgalF1ZXJ5LmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbDsKKwl9CisKKwkvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLgorCWlmICggalF1ZXJ5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7CisKKwkJLy8gU2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzCisJCWpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHsKKwkJCWFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7CisJCX0gKTsKKworCX0gZWxzZSB7CisKKwkJLy8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgIm9sZCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyCisJCS8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LgorCQlmb3IgKCBwcmVmaXggaW4gYSApIHsKKwkJCWJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7CisJCX0KKwl9CisKKwkvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uCisJcmV0dXJuIHMuam9pbiggIiYiICkucmVwbGFjZSggcjIwLCAiKyIgKTsKK307CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKwlzZXJpYWxpemU6IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTsKKwl9LAorCXNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHsKKwkJcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHsKKworCQkJLy8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgImVsZW1lbnRzIiB0byBmaWx0ZXIgb3IgYWRkIGZvcm0gZWxlbWVudHMKKwkJCXZhciBlbGVtZW50cyA9IGpRdWVyeS5wcm9wKCB0aGlzLCAiZWxlbWVudHMiICk7CisJCQlyZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpczsKKwkJfSApCisJCS5maWx0ZXIoIGZ1bmN0aW9uKCkgeworCQkJdmFyIHR5cGUgPSB0aGlzLnR5cGU7CisKKwkJCS8vIFVzZSAuaXMoICI6ZGlzYWJsZWQiICkgc28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3MKKwkJCXJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlzKCAiOmRpc2FibGVkIiApICYmCisJCQkJcnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJgorCQkJCSggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTsKKwkJfSApCisJCS5tYXAoIGZ1bmN0aW9uKCBpLCBlbGVtICkgeworCQkJdmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpOworCisJCQlyZXR1cm4gdmFsID09IG51bGwgPworCQkJCW51bGwgOgorCQkJCWpRdWVyeS5pc0FycmF5KCB2YWwgKSA/CisJCQkJCWpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHsKKwkJCQkJCXJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkgfTsKKwkJCQkJfSApIDoKKwkJCQkJeyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsICJcclxuIiApIH07CisJCX0gKS5nZXQoKTsKKwl9Cit9ICk7CisKKworalF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHsKKwl0cnkgeworCQlyZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpOworCX0gY2F0Y2ggKCBlICkge30KK307CisKK3ZhciB4aHJTdWNjZXNzU3RhdHVzID0geworCisJCS8vIEZpbGUgcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwCisJCTA6IDIwMCwKKworCQkvLyBTdXBwb3J0OiBJRTkKKwkJLy8gIzE0NTA6IHNvbWV0aW1lcyBJRSByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0CisJCTEyMjM6IDIwNAorCX0sCisJeGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTsKKworc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCAid2l0aENyZWRlbnRpYWxzIiBpbiB4aHJTdXBwb3J0ZWQgKTsKK3N1cHBvcnQuYWpheCA9IHhoclN1cHBvcnRlZCA9ICEheGhyU3VwcG9ydGVkOworCitqUXVlcnkuYWpheFRyYW5zcG9ydCggZnVuY3Rpb24oIG9wdGlvbnMgKSB7CisJdmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrOworCisJLy8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdAorCWlmICggc3VwcG9ydC5jb3JzIHx8IHhoclN1cHBvcnRlZCAmJiAhb3B0aW9ucy5jcm9zc0RvbWFpbiApIHsKKwkJcmV0dXJuIHsKKwkJCXNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHsKKwkJCQl2YXIgaSwKKwkJCQkJeGhyID0gb3B0aW9ucy54aHIoKTsKKworCQkJCXhoci5vcGVuKAorCQkJCQlvcHRpb25zLnR5cGUsCisJCQkJCW9wdGlvbnMudXJsLAorCQkJCQlvcHRpb25zLmFzeW5jLAorCQkJCQlvcHRpb25zLnVzZXJuYW1lLAorCQkJCQlvcHRpb25zLnBhc3N3b3JkCisJCQkJKTsKKworCQkJCS8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWQKKwkJCQlpZiAoIG9wdGlvbnMueGhyRmllbGRzICkgeworCQkJCQlmb3IgKCBpIGluIG9wdGlvbnMueGhyRmllbGRzICkgeworCQkJCQkJeGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdOworCQkJCQl9CisJCQkJfQorCisJCQkJLy8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZAorCQkJCWlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHsKKwkJCQkJeGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTsKKwkJCQl9CisKKwkJCQkvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlcgorCQkJCS8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmUKKwkJCQkvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLgorCQkJCS8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKQorCQkJCS8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLgorCQkJCWlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbICJYLVJlcXVlc3RlZC1XaXRoIiBdICkgeworCQkJCQloZWFkZXJzWyAiWC1SZXF1ZXN0ZWQtV2l0aCIgXSA9ICJYTUxIdHRwUmVxdWVzdCI7CisJCQkJfQorCisJCQkJLy8gU2V0IGhlYWRlcnMKKwkJCQlmb3IgKCBpIGluIGhlYWRlcnMgKSB7CisJCQkJCXhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTsKKwkJCQl9CisKKwkJCQkvLyBDYWxsYmFjaworCQkJCWNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7CisJCQkJCXJldHVybiBmdW5jdGlvbigpIHsKKwkJCQkJCWlmICggY2FsbGJhY2sgKSB7CisJCQkJCQkJY2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrID0geGhyLm9ubG9hZCA9CisJCQkJCQkJCXhoci5vbmVycm9yID0geGhyLm9uYWJvcnQgPSB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDsKKworCQkJCQkJCWlmICggdHlwZSA9PT0gImFib3J0IiApIHsKKwkJCQkJCQkJeGhyLmFib3J0KCk7CisJCQkJCQkJfSBlbHNlIGlmICggdHlwZSA9PT0gImVycm9yIiApIHsKKworCQkJCQkJCQkvLyBTdXBwb3J0OiBJRTkKKwkJCQkJCQkJLy8gT24gYSBtYW51YWwgbmF0aXZlIGFib3J0LCBJRTkgdGhyb3dzCisJCQkJCQkJCS8vIGVycm9ycyBvbiBhbnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJlYWR5U3RhdGUKKwkJCQkJCQkJaWYgKCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gIm51bWJlciIgKSB7CisJCQkJCQkJCQljb21wbGV0ZSggMCwgImVycm9yIiApOworCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJY29tcGxldGUoCisKKwkJCQkJCQkJCQkvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgIzg2MDUsICMxNDIwNworCQkJCQkJCQkJCXhoci5zdGF0dXMsCisJCQkJCQkJCQkJeGhyLnN0YXR1c1RleHQKKwkJCQkJCQkJCSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQljb21wbGV0ZSgKKwkJCQkJCQkJCXhoclN1Y2Nlc3NTdGF0dXNbIHhoci5zdGF0dXMgXSB8fCB4aHIuc3RhdHVzLAorCQkJCQkJCQkJeGhyLnN0YXR1c1RleHQsCisKKwkJCQkJCQkJCS8vIFN1cHBvcnQ6IElFOSBvbmx5CisJCQkJCQkJCQkvLyBJRTkgaGFzIG5vIFhIUjIgYnV0IHRocm93cyBvbiBiaW5hcnkgKHRyYWMtMTE0MjYpCisJCQkJCQkJCQkvLyBGb3IgWEhSMiBub24tdGV4dCwgbGV0IHRoZSBjYWxsZXIgaGFuZGxlIGl0IChnaC0yNDk4KQorCQkJCQkJCQkJKCB4aHIucmVzcG9uc2VUeXBlIHx8ICJ0ZXh0IiApICE9PSAidGV4dCIgIHx8CisJCQkJCQkJCQl0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0gInN0cmluZyIgPworCQkJCQkJCQkJCXsgYmluYXJ5OiB4aHIucmVzcG9uc2UgfSA6CisJCQkJCQkJCQkJeyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0sCisJCQkJCQkJCQl4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkKKwkJCQkJCQkJKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX07CisJCQkJfTsKKworCQkJCS8vIExpc3RlbiB0byBldmVudHMKKwkJCQl4aHIub25sb2FkID0gY2FsbGJhY2soKTsKKwkJCQllcnJvckNhbGxiYWNrID0geGhyLm9uZXJyb3IgPSBjYWxsYmFjayggImVycm9yIiApOworCisJCQkJLy8gU3VwcG9ydDogSUU5CisJCQkJLy8gVXNlIG9ucmVhZHlzdGF0ZWNoYW5nZSB0byByZXBsYWNlIG9uYWJvcnQKKwkJCQkvLyB0byBoYW5kbGUgdW5jYXVnaHQgYWJvcnRzCisJCQkJaWYgKCB4aHIub25hYm9ydCAhPT0gdW5kZWZpbmVkICkgeworCQkJCQl4aHIub25hYm9ydCA9IGVycm9yQ2FsbGJhY2s7CisJCQkJfSBlbHNlIHsKKwkJCQkJeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgeworCisJCQkJCQkvLyBDaGVjayByZWFkeVN0YXRlIGJlZm9yZSB0aW1lb3V0IGFzIGl0IGNoYW5nZXMKKwkJCQkJCWlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7CisKKwkJCQkJCQkvLyBBbGxvdyBvbmVycm9yIHRvIGJlIGNhbGxlZCBmaXJzdCwKKwkJCQkJCQkvLyBidXQgdGhhdCB3aWxsIG5vdCBoYW5kbGUgYSBuYXRpdmUgYWJvcnQKKwkJCQkJCQkvLyBBbHNvLCBzYXZlIGVycm9yQ2FsbGJhY2sgdG8gYSB2YXJpYWJsZQorCQkJCQkJCS8vIGFzIHhoci5vbmVycm9yIGNhbm5vdCBiZSBhY2Nlc3NlZAorCQkJCQkJCXdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKKwkJCQkJCQkJaWYgKCBjYWxsYmFjayApIHsKKwkJCQkJCQkJCWVycm9yQ2FsbGJhY2soKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0gKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl9CisKKwkJCQkvLyBDcmVhdGUgdGhlIGFib3J0IGNhbGxiYWNrCisJCQkJY2FsbGJhY2sgPSBjYWxsYmFjayggImFib3J0IiApOworCisJCQkJdHJ5IHsKKworCQkJCQkvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pCisJCQkJCXhoci5zZW5kKCBvcHRpb25zLmhhc0NvbnRlbnQgJiYgb3B0aW9ucy5kYXRhIHx8IG51bGwgKTsKKwkJCQl9IGNhdGNoICggZSApIHsKKworCQkJCQkvLyAjMTQ2ODM6IE9ubHkgcmV0aHJvdyBpZiB0aGlzIGhhc24ndCBiZWVuIG5vdGlmaWVkIGFzIGFuIGVycm9yIHlldAorCQkJCQlpZiAoIGNhbGxiYWNrICkgeworCQkJCQkJdGhyb3cgZTsKKwkJCQkJfQorCQkJCX0KKwkJCX0sCisKKwkJCWFib3J0OiBmdW5jdGlvbigpIHsKKwkJCQlpZiAoIGNhbGxiYWNrICkgeworCQkJCQljYWxsYmFjaygpOworCQkJCX0KKwkJCX0KKwkJfTsKKwl9Cit9ICk7CisKKworCisKKy8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlCitqUXVlcnkuYWpheFNldHVwKCB7CisJYWNjZXB0czogeworCQlzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsICIgKworCQkJImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIKKwl9LAorCWNvbnRlbnRzOiB7CisJCXNjcmlwdDogL1xiKD86amF2YXxlY21hKXNjcmlwdFxiLworCX0sCisJY29udmVydGVyczogeworCQkidGV4dCBzY3JpcHQiOiBmdW5jdGlvbiggdGV4dCApIHsKKwkJCWpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7CisJCQlyZXR1cm4gdGV4dDsKKwkJfQorCX0KK30gKTsKKworLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpbgoralF1ZXJ5LmFqYXhQcmVmaWx0ZXIoICJzY3JpcHQiLCBmdW5jdGlvbiggcyApIHsKKwlpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHsKKwkJcy5jYWNoZSA9IGZhbHNlOworCX0KKwlpZiAoIHMuY3Jvc3NEb21haW4gKSB7CisJCXMudHlwZSA9ICJHRVQiOworCX0KK30gKTsKKworLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0CitqUXVlcnkuYWpheFRyYW5zcG9ydCggInNjcmlwdCIsIGZ1bmN0aW9uKCBzICkgeworCisJLy8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiByZXF1ZXN0cworCWlmICggcy5jcm9zc0RvbWFpbiApIHsKKwkJdmFyIHNjcmlwdCwgY2FsbGJhY2s7CisJCXJldHVybiB7CisJCQlzZW5kOiBmdW5jdGlvbiggXywgY29tcGxldGUgKSB7CisJCQkJc2NyaXB0ID0galF1ZXJ5KCAiPHNjcmlwdD4iICkucHJvcCggeworCQkJCQljaGFyc2V0OiBzLnNjcmlwdENoYXJzZXQsCisJCQkJCXNyYzogcy51cmwKKwkJCQl9ICkub24oCisJCQkJCSJsb2FkIGVycm9yIiwKKwkJCQkJY2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkgeworCQkJCQkJc2NyaXB0LnJlbW92ZSgpOworCQkJCQkJY2FsbGJhY2sgPSBudWxsOworCQkJCQkJaWYgKCBldnQgKSB7CisJCQkJCQkJY29tcGxldGUoIGV2dC50eXBlID09PSAiZXJyb3IiID8gNDA0IDogMjAwLCBldnQudHlwZSApOworCQkJCQkJfQorCQkJCQl9CisJCQkJKTsKKworCQkJCS8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeQorCQkJCWRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdFsgMCBdICk7CisJCQl9LAorCQkJYWJvcnQ6IGZ1bmN0aW9uKCkgeworCQkJCWlmICggY2FsbGJhY2sgKSB7CisJCQkJCWNhbGxiYWNrKCk7CisJCQkJfQorCQkJfQorCQl9OworCX0KK30gKTsKKworCisKKwordmFyIG9sZENhbGxiYWNrcyA9IFtdLAorCXJqc29ucCA9IC8oPSlcPyg/PSZ8JCl8XD9cPy87CisKKy8vIERlZmF1bHQganNvbnAgc2V0dGluZ3MKK2pRdWVyeS5hamF4U2V0dXAoIHsKKwlqc29ucDogImNhbGxiYWNrIiwKKwlqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHsKKwkJdmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyAiXyIgKyAoIG5vbmNlKysgKSApOworCQl0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTsKKwkJcmV0dXJuIGNhbGxiYWNrOworCX0KK30gKTsKKworLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzCitqUXVlcnkuYWpheFByZWZpbHRlciggImpzb24ganNvbnAiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7CisKKwl2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsCisJCWpzb25Qcm9wID0gcy5qc29ucCAhPT0gZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/CisJCQkidXJsIiA6CisJCQl0eXBlb2Ygcy5kYXRhID09PSAic3RyaW5nIiAmJgorCQkJCSggcy5jb250ZW50VHlwZSB8fCAiIiApCisJCQkJCS5pbmRleE9mKCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiApID09PSAwICYmCisJCQkJcmpzb25wLnRlc3QoIHMuZGF0YSApICYmICJkYXRhIgorCQkpOworCisJLy8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzICJqc29ucCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXQKKwlpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09ICJqc29ucCIgKSB7CisKKwkJLy8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdAorCQljYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBqUXVlcnkuaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgPworCQkJcy5qc29ucENhbGxiYWNrKCkgOgorCQkJcy5qc29ucENhbGxiYWNrOworCisJCS8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGEKKwkJaWYgKCBqc29uUHJvcCApIHsKKwkJCXNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgIiQxIiArIGNhbGxiYWNrTmFtZSApOworCQl9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxzZSApIHsKKwkJCXMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyAiJiIgOiAiPyIgKSArIHMuanNvbnAgKyAiPSIgKyBjYWxsYmFja05hbWU7CisJCX0KKworCQkvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uCisJCXMuY29udmVydGVyc1sgInNjcmlwdCBqc29uIiBdID0gZnVuY3Rpb24oKSB7CisJCQlpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHsKKwkJCQlqUXVlcnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArICIgd2FzIG5vdCBjYWxsZWQiICk7CisJCQl9CisJCQlyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTsKKwkJfTsKKworCQkvLyBGb3JjZSBqc29uIGRhdGFUeXBlCisJCXMuZGF0YVR5cGVzWyAwIF0gPSAianNvbiI7CisKKwkJLy8gSW5zdGFsbCBjYWxsYmFjaworCQlvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07CisJCXdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHsKKwkJCXJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzOworCQl9OworCisJCS8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKQorCQlqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkgeworCisJCQkvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXQKKwkJCWlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHsKKwkJCQlqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApOworCisJCQkvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZQorCQkJfSBlbHNlIHsKKwkJCQl3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47CisJCQl9CisKKwkJCS8vIFNhdmUgYmFjayBhcyBmcmVlCisJCQlpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkgeworCisJCQkJLy8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kCisJCQkJcy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrOworCisJCQkJLy8gU2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZQorCQkJCW9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTsKKwkJCX0KKworCQkJLy8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlCisJCQlpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiApICkgeworCQkJCW92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7CisJCQl9CisKKwkJCXJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7CisJCX0gKTsKKworCQkvLyBEZWxlZ2F0ZSB0byBzY3JpcHQKKwkJcmV0dXJuICJzY3JpcHQiOworCX0KK30gKTsKKworCisKKworLy8gQXJndW1lbnQgImRhdGEiIHNob3VsZCBiZSBzdHJpbmcgb2YgaHRtbAorLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LAorLy8gZGVmYXVsdHMgdG8gZG9jdW1lbnQKKy8vIGtlZXBTY3JpcHRzIChvcHRpb25hbCk6IElmIHRydWUsIHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmcKK2pRdWVyeS5wYXJzZUhUTUwgPSBmdW5jdGlvbiggZGF0YSwgY29udGV4dCwga2VlcFNjcmlwdHMgKSB7CisJaWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIgKSB7CisJCXJldHVybiBudWxsOworCX0KKwlpZiAoIHR5cGVvZiBjb250ZXh0ID09PSAiYm9vbGVhbiIgKSB7CisJCWtlZXBTY3JpcHRzID0gY29udGV4dDsKKwkJY29udGV4dCA9IGZhbHNlOworCX0KKwljb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKKworCXZhciBwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKSwKKwkJc2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTsKKworCS8vIFNpbmdsZSB0YWcKKwlpZiAoIHBhcnNlZCApIHsKKwkJcmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbIDEgXSApIF07CisJfQorCisJcGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTsKKworCWlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxlbmd0aCApIHsKKwkJalF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7CisJfQorCisJcmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIHBhcnNlZC5jaGlsZE5vZGVzICk7Cit9OworCisKKy8vIEtlZXAgYSBjb3B5IG9mIHRoZSBvbGQgbG9hZCBtZXRob2QKK3ZhciBfbG9hZCA9IGpRdWVyeS5mbi5sb2FkOworCisvKioKKyAqIExvYWQgYSB1cmwgaW50byBhIHBhZ2UKKyAqLworalF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkgeworCWlmICggdHlwZW9mIHVybCAhPT0gInN0cmluZyIgJiYgX2xvYWQgKSB7CisJCXJldHVybiBfbG9hZC5hcHBseSggdGhpcywgYXJndW1lbnRzICk7CisJfQorCisJdmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSwKKwkJc2VsZiA9IHRoaXMsCisJCW9mZiA9IHVybC5pbmRleE9mKCAiICIgKTsKKworCWlmICggb2ZmID4gLTEgKSB7CisJCXNlbGVjdG9yID0galF1ZXJ5LnRyaW0oIHVybC5zbGljZSggb2ZmICkgKTsKKwkJdXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTsKKwl9CisKKwkvLyBJZiBpdCdzIGEgZnVuY3Rpb24KKwlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHsKKworCQkvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFjaworCQljYWxsYmFjayA9IHBhcmFtczsKKwkJcGFyYW1zID0gdW5kZWZpbmVkOworCisJLy8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZworCX0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSAib2JqZWN0IiApIHsKKwkJdHlwZSA9ICJQT1NUIjsKKwl9CisKKwkvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdAorCWlmICggc2VsZi5sZW5ndGggPiAwICkgeworCQlqUXVlcnkuYWpheCggeworCQkJdXJsOiB1cmwsCisKKwkJCS8vIElmICJ0eXBlIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gIkdFVCIgbWV0aG9kIHdpbGwgYmUgdXNlZC4KKwkJCS8vIE1ha2UgdmFsdWUgb2YgdGhpcyBmaWVsZCBleHBsaWNpdCBzaW5jZQorCQkJLy8gdXNlciBjYW4gb3ZlcnJpZGUgaXQgdGhyb3VnaCBhamF4U2V0dXAgbWV0aG9kCisJCQl0eXBlOiB0eXBlIHx8ICJHRVQiLAorCQkJZGF0YVR5cGU6ICJodG1sIiwKKwkJCWRhdGE6IHBhcmFtcworCQl9ICkuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCApIHsKKworCQkJLy8gU2F2ZSByZXNwb25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNhbGxiYWNrCisJCQlyZXNwb25zZSA9IGFyZ3VtZW50czsKKworCQkJc2VsZi5odG1sKCBzZWxlY3RvciA/CisKKwkJCQkvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXYKKwkJCQkvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnMKKwkJCQlqUXVlcnkoICI8ZGl2PiIgKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6CisKKwkJCQkvLyBPdGhlcndpc2UgdXNlIHRoZSBmdWxsIHJlc3VsdAorCQkJCXJlc3BvbnNlVGV4dCApOworCisJCS8vIElmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLCB0aGlzIGZ1bmN0aW9uIGdldHMgImRhdGEiLCAic3RhdHVzIiwgImpxWEhSIgorCQkvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQgYWJvdmUuCisJCS8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgImpxWEhSIiwgInN0YXR1cyIsICJlcnJvciIKKwkJfSApLmFsd2F5cyggY2FsbGJhY2sgJiYgZnVuY3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7CisJCQlzZWxmLmVhY2goIGZ1bmN0aW9uKCkgeworCQkJCWNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7CisJCQl9ICk7CisJCX0gKTsKKwl9CisKKwlyZXR1cm4gdGhpczsKK307CisKKworCisKKy8vIEF0dGFjaCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzCitqUXVlcnkuZWFjaCggWworCSJhamF4U3RhcnQiLAorCSJhamF4U3RvcCIsCisJImFqYXhDb21wbGV0ZSIsCisJImFqYXhFcnJvciIsCisJImFqYXhTdWNjZXNzIiwKKwkiYWpheFNlbmQiCitdLCBmdW5jdGlvbiggaSwgdHlwZSApIHsKKwlqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBmbiApIHsKKwkJcmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7CisJfTsKK30gKTsKKworCisKKworalF1ZXJ5LmV4cHIuZmlsdGVycy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkgeworCXJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkgeworCQlyZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTsKKwl9ICkubGVuZ3RoOworfTsKKworCisKKworLyoqCisgKiBHZXRzIGEgd2luZG93IGZyb20gYW4gZWxlbWVudAorICovCitmdW5jdGlvbiBnZXRXaW5kb3coIGVsZW0gKSB7CisJcmV0dXJuIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApID8gZWxlbSA6IGVsZW0ubm9kZVR5cGUgPT09IDkgJiYgZWxlbS5kZWZhdWx0VmlldzsKK30KKworalF1ZXJ5Lm9mZnNldCA9IHsKKwlzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkgeworCQl2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLAorCQkJcG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICksCisJCQljdXJFbGVtID0galF1ZXJ5KCBlbGVtICksCisJCQlwcm9wcyA9IHt9OworCisJCS8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW0KKwkJaWYgKCBwb3NpdGlvbiA9PT0gInN0YXRpYyIgKSB7CisJCQllbGVtLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKKwkJfQorCisJCWN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCk7CisJCWN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sICJ0b3AiICk7CisJCWN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCAibGVmdCIgKTsKKwkJY2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSAiYWJzb2x1dGUiIHx8IHBvc2l0aW9uID09PSAiZml4ZWQiICkgJiYKKwkJCSggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoICJhdXRvIiApID4gLTE7CisKKwkJLy8gTmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXIKKwkJLy8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkCisJCWlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7CisJCQljdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTsKKwkJCWN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDsKKwkJCWN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0OworCisJCX0gZWxzZSB7CisJCQljdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwOworCQkJY3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwOworCQl9CisKKwkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0aW9ucyApICkgeworCisJCQkvLyBVc2UgalF1ZXJ5LmV4dGVuZCBoZXJlIHRvIGFsbG93IG1vZGlmaWNhdGlvbiBvZiBjb29yZGluYXRlcyBhcmd1bWVudCAoZ2gtMTg0OCkKKwkJCW9wdGlvbnMgPSBvcHRpb25zLmNhbGwoIGVsZW0sIGksIGpRdWVyeS5leHRlbmQoIHt9LCBjdXJPZmZzZXQgKSApOworCQl9CisKKwkJaWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkgeworCQkJcHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDsKKwkJfQorCQlpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkgeworCQkJcHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7CisJCX0KKworCQlpZiAoICJ1c2luZyIgaW4gb3B0aW9ucyApIHsKKwkJCW9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTsKKworCQl9IGVsc2UgeworCQkJY3VyRWxlbS5jc3MoIHByb3BzICk7CisJCX0KKwl9Cit9OworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisJb2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHsKKwkJaWYgKCBhcmd1bWVudHMubGVuZ3RoICkgeworCQkJcmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/CisJCQkJdGhpcyA6CisJCQkJdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHsKKwkJCQkJalF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTsKKwkJCQl9ICk7CisJCX0KKworCQl2YXIgZG9jRWxlbSwgd2luLAorCQkJZWxlbSA9IHRoaXNbIDAgXSwKKwkJCWJveCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH0sCisJCQlkb2MgPSBlbGVtICYmIGVsZW0ub3duZXJEb2N1bWVudDsKKworCQlpZiAoICFkb2MgKSB7CisJCQlyZXR1cm47CisJCX0KKworCQlkb2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudDsKKworCQkvLyBNYWtlIHN1cmUgaXQncyBub3QgYSBkaXNjb25uZWN0ZWQgRE9NIG5vZGUKKwkJaWYgKCAhalF1ZXJ5LmNvbnRhaW5zKCBkb2NFbGVtLCBlbGVtICkgKSB7CisJCQlyZXR1cm4gYm94OworCQl9CisKKwkJYm94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKwkJd2luID0gZ2V0V2luZG93KCBkb2MgKTsKKwkJcmV0dXJuIHsKKwkJCXRvcDogYm94LnRvcCArIHdpbi5wYWdlWU9mZnNldCAtIGRvY0VsZW0uY2xpZW50VG9wLAorCQkJbGVmdDogYm94LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXQgLSBkb2NFbGVtLmNsaWVudExlZnQKKwkJfTsKKwl9LAorCisJcG9zaXRpb246IGZ1bmN0aW9uKCkgeworCQlpZiAoICF0aGlzWyAwIF0gKSB7CisJCQlyZXR1cm47CisJCX0KKworCQl2YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsCisJCQllbGVtID0gdGhpc1sgMCBdLAorCQkJcGFyZW50T2Zmc2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAgfTsKKworCQkvLyBGaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gd2luZG93IChwYXJlbnRPZmZzZXQgPSB7dG9wOjAsIGxlZnQ6IDB9LAorCQkvLyBiZWNhdXNlIGl0IGlzIGl0cyBvbmx5IG9mZnNldCBwYXJlbnQKKwkJaWYgKCBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICkgPT09ICJmaXhlZCIgKSB7CisKKwkJCS8vIEFzc3VtZSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgaXMgdGhlcmUgd2hlbiBjb21wdXRlZCBwb3NpdGlvbiBpcyBmaXhlZAorCQkJb2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKworCQl9IGVsc2UgeworCisJCQkvLyBHZXQgKnJlYWwqIG9mZnNldFBhcmVudAorCQkJb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQoKTsKKworCQkJLy8gR2V0IGNvcnJlY3Qgb2Zmc2V0cworCQkJb2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTsKKwkJCWlmICggIWpRdWVyeS5ub2RlTmFtZSggb2Zmc2V0UGFyZW50WyAwIF0sICJodG1sIiApICkgeworCQkJCXBhcmVudE9mZnNldCA9IG9mZnNldFBhcmVudC5vZmZzZXQoKTsKKwkJCX0KKworCQkJLy8gQWRkIG9mZnNldFBhcmVudCBib3JkZXJzCisJCQlwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudFsgMCBdLCAiYm9yZGVyVG9wV2lkdGgiLCB0cnVlICk7CisJCQlwYXJlbnRPZmZzZXQubGVmdCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnRbIDAgXSwgImJvcmRlckxlZnRXaWR0aCIsIHRydWUgKTsKKwkJfQorCisJCS8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnMKKwkJcmV0dXJuIHsKKwkJCXRvcDogb2Zmc2V0LnRvcCAtIHBhcmVudE9mZnNldC50b3AgLSBqUXVlcnkuY3NzKCBlbGVtLCAibWFyZ2luVG9wIiwgdHJ1ZSApLAorCQkJbGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sICJtYXJnaW5MZWZ0IiwgdHJ1ZSApCisJCX07CisJfSwKKworCS8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOgorCS8vIDEpIEZvciB0aGUgZWxlbWVudCBpbnNpZGUgdGhlIGlmcmFtZSB3aXRob3V0IG9mZnNldFBhcmVudCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4KKwkvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3cKKwkvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50CisJLy8gMykgRm9yIGJvZHkgb3IgaHRtbCBlbGVtZW50LCBpLmUuIGluIGNhc2Ugb2YgdGhlIGh0bWwgbm9kZSAtIGl0IHdpbGwgcmV0dXJuIGl0c2VsZgorCS8vCisJLy8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzCisJLy8gYW5kIG1pZ2h0IGJlIGNvbnNpZGVyZWQgYXMgbW9yZSBwcmVmZXJhYmxlIHJlc3VsdHMuCisJLy8KKwkvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZQorCW9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7CisJCXJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7CisJCQl2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7CisKKwkJCXdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgInBvc2l0aW9uIiApID09PSAic3RhdGljIiApIHsKKwkJCQlvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50OworCQkJfQorCisJCQlyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDsKKwkJfSApOworCX0KK30gKTsKKworLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzCitqUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiAicGFnZVhPZmZzZXQiLCBzY3JvbGxUb3A6ICJwYWdlWU9mZnNldCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHsKKwl2YXIgdG9wID0gInBhZ2VZT2Zmc2V0IiA9PT0gcHJvcDsKKworCWpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdmFsICkgeworCQlyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7CisJCQl2YXIgd2luID0gZ2V0V2luZG93KCBlbGVtICk7CisKKwkJCWlmICggdmFsID09PSB1bmRlZmluZWQgKSB7CisJCQkJcmV0dXJuIHdpbiA/IHdpblsgcHJvcCBdIDogZWxlbVsgbWV0aG9kIF07CisJCQl9CisKKwkJCWlmICggd2luICkgeworCQkJCXdpbi5zY3JvbGxUbygKKwkJCQkJIXRvcCA/IHZhbCA6IHdpbi5wYWdlWE9mZnNldCwKKwkJCQkJdG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0CisJCQkJKTsKKworCQkJfSBlbHNlIHsKKwkJCQllbGVtWyBtZXRob2QgXSA9IHZhbDsKKwkJCX0KKwkJfSwgbWV0aG9kLCB2YWwsIGFyZ3VtZW50cy5sZW5ndGggKTsKKwl9OworfSApOworCisvLyBTdXBwb3J0OiBTYWZhcmk8Ny04KywgQ2hyb21lPDM3LTQ0KworLy8gQWRkIHRoZSB0b3AvbGVmdCBjc3NIb29rcyB1c2luZyBqUXVlcnkuZm4ucG9zaXRpb24KKy8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NAorLy8gQmxpbmsgYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjI5MjgwCisvLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0OworLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmUKK2pRdWVyeS5lYWNoKCBbICJ0b3AiLCAibGVmdCIgXSwgZnVuY3Rpb24oIGksIHByb3AgKSB7CisJalF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbiwKKwkJZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgeworCQkJaWYgKCBjb21wdXRlZCApIHsKKwkJCQljb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApOworCisJCQkJLy8gSWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0CisJCQkJcmV0dXJuIHJudW1ub25weC50ZXN0KCBjb21wdXRlZCApID8KKwkJCQkJalF1ZXJ5KCBlbGVtICkucG9zaXRpb24oKVsgcHJvcCBdICsgInB4IiA6CisJCQkJCWNvbXB1dGVkOworCQkJfQorCQl9CisJKTsKK30gKTsKKworCisvLyBDcmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHMKK2pRdWVyeS5lYWNoKCB7IEhlaWdodDogImhlaWdodCIsIFdpZHRoOiAid2lkdGgiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkgeworCWpRdWVyeS5lYWNoKCB7IHBhZGRpbmc6ICJpbm5lciIgKyBuYW1lLCBjb250ZW50OiB0eXBlLCAiIjogIm91dGVyIiArIG5hbWUgfSwKKwkJZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7CisKKwkJLy8gTWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoCisJCWpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkgeworCQkJdmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gImJvb2xlYW4iICksCisJCQkJZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyAibWFyZ2luIiA6ICJib3JkZXIiICk7CisKKwkJCXJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHsKKwkJCQl2YXIgZG9jOworCisJCQkJaWYgKCBqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHsKKworCQkJCQkvLyBBcyBvZiA1LzgvMjAxMiB0aGlzIHdpbGwgeWllbGQgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIE1vYmlsZSBTYWZhcmksIGJ1dCB0aGVyZQorCQkJCQkvLyBpc24ndCBhIHdob2xlIGxvdCB3ZSBjYW4gZG8uIFNlZSBwdWxsIHJlcXVlc3QgYXQgdGhpcyBVUkwgZm9yIGRpc2N1c3Npb246CisJCQkJCS8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNzY0CisJCQkJCXJldHVybiBlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgImNsaWVudCIgKyBuYW1lIF07CisJCQkJfQorCisJCQkJLy8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodAorCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHsKKwkJCQkJZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7CisKKwkJCQkJLy8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLAorCQkJCQkvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3QKKwkJCQkJcmV0dXJuIE1hdGgubWF4KAorCQkJCQkJZWxlbS5ib2R5WyAic2Nyb2xsIiArIG5hbWUgXSwgZG9jWyAic2Nyb2xsIiArIG5hbWUgXSwKKwkJCQkJCWVsZW0uYm9keVsgIm9mZnNldCIgKyBuYW1lIF0sIGRvY1sgIm9mZnNldCIgKyBuYW1lIF0sCisJCQkJCQlkb2NbICJjbGllbnQiICsgbmFtZSBdCisJCQkJCSk7CisJCQkJfQorCisJCQkJcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPworCisJCQkJCS8vIEdldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXQKKwkJCQkJalF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6CisKKwkJCQkJLy8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudAorCQkJCQlqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApOworCQkJfSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUsIG51bGwgKTsKKwkJfTsKKwl9ICk7Cit9ICk7CisKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCisJYmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHsKKwkJcmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApOworCX0sCisJdW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkgeworCQlyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApOworCX0sCisKKwlkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7CisJCXJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7CisJfSwKKwl1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHsKKworCQkvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApCisJCXJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8KKwkJCXRoaXMub2ZmKCBzZWxlY3RvciwgIioqIiApIDoKKwkJCXRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgIioqIiwgZm4gKTsKKwl9LAorCXNpemU6IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4gdGhpcy5sZW5ndGg7CisJfQorfSApOworCitqUXVlcnkuZm4uYW5kU2VsZiA9IGpRdWVyeS5mbi5hZGRCYWNrOworCisKKworCisvLyBSZWdpc3RlciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXIKKy8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXQKKy8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdAorLy8gd2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZQorLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlCisvLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHMKKy8vIHRvIGNhbGwgbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay4KKworLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGQKKy8vIGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMgbW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW4KKy8vIEFNRCBsb2FkZXIgaXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlCisvLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uCisKK2lmICggdHlwZW9mIGRlZmluZSA9PT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kICkgeworCWRlZmluZSggImpxdWVyeSIsIFtdLCBmdW5jdGlvbigpIHsKKwkJcmV0dXJuIGpRdWVyeTsKKwl9ICk7Cit9CisKKworCit2YXIKKworCS8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZQorCV9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LAorCisJLy8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGUKKwlfJCA9IHdpbmRvdy4kOworCitqUXVlcnkubm9Db25mbGljdCA9IGZ1bmN0aW9uKCBkZWVwICkgeworCWlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHsKKwkJd2luZG93LiQgPSBfJDsKKwl9CisKKwlpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkgeworCQl3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTsKKwl9CisKKwlyZXR1cm4galF1ZXJ5OworfTsKKworLy8gRXhwb3NlIGpRdWVyeSBhbmQgJCBpZGVudGlmaWVycywgZXZlbiBpbiBBTUQKKy8vICgjNzEwMiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzU1NykKKy8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKCMxMzU2NikKK2lmICggIW5vR2xvYmFsICkgeworCXdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTsKK30KKworcmV0dXJuIGpRdWVyeTsKK30pKTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL2xpYnJhcmllcy9qcXVlcnktMy4zLjEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9saWJyYXJpZXMvanF1ZXJ5LTMuMy4xLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNTIwNmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9saWJyYXJpZXMvanF1ZXJ5LTMuMy4xLmpzCkBAIC0wLDAgKzEsMTAzNjQgQEAKKy8qIQorICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2My4zLjEKKyAqIGh0dHBzOi8vanF1ZXJ5LmNvbS8KKyAqCisgKiBJbmNsdWRlcyBTaXp6bGUuanMKKyAqIGh0dHBzOi8vc2l6emxlanMuY29tLworICoKKyAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQorICogaHR0cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKKyAqCisgKiBEYXRlOiAyMDE4LTAxLTIwVDE3OjI0WgorICovCisoIGZ1bmN0aW9uKCBnbG9iYWwsIGZhY3RvcnkgKSB7CisKKwkidXNlIHN0cmljdCI7CisKKwlpZiAoIHR5cGVvZiBtb2R1bGUgPT09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gIm9iamVjdCIgKSB7CisKKwkJLy8gRm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciBgd2luZG93YAorCQkvLyBpcyBwcmVzZW50LCBleGVjdXRlIHRoZSBmYWN0b3J5IGFuZCBnZXQgalF1ZXJ5LgorCQkvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YAorCQkvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBtb2R1bGUuZXhwb3J0cy4KKwkJLy8gVGhpcyBhY2NlbnR1YXRlcyB0aGUgbmVlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgcmVhbCBgd2luZG93YC4KKwkJLy8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZSgianF1ZXJ5Iikod2luZG93KTsKKwkJLy8gU2VlIHRpY2tldCAjMTQ1NDkgZm9yIG1vcmUgaW5mby4KKwkJbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgPworCQkJZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOgorCQkJZnVuY3Rpb24oIHcgKSB7CisJCQkJaWYgKCAhdy5kb2N1bWVudCApIHsKKwkJCQkJdGhyb3cgbmV3IEVycm9yKCAialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIgKTsKKwkJCQl9CisJCQkJcmV0dXJuIGZhY3RvcnkoIHcgKTsKKwkJCX07CisJfSBlbHNlIHsKKwkJZmFjdG9yeSggZ2xvYmFsICk7CisJfQorCisvLyBQYXNzIHRoaXMgaWYgd2luZG93IGlzIG5vdCBkZWZpbmVkIHlldAorfSApKCB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uKCB3aW5kb3csIG5vR2xvYmFsICkgeworCisvLyBFZGdlIDw9IDEyIC0gMTMrLCBGaXJlZm94IDw9MTggLSA0NSssIElFIDEwIC0gMTEsIFNhZmFyaSA1LjEgLSA5KywgaU9TIDYgLSA5LjEKKy8vIHRocm93IGV4Y2VwdGlvbnMgd2hlbiBub24tc3RyaWN0IGNvZGUgKGUuZy4sIEFTUC5ORVQgNC41KSBhY2Nlc3NlcyBzdHJpY3QgbW9kZQorLy8gYXJndW1lbnRzLmNhbGxlZS5jYWxsZXIgKHRyYWMtMTMzMzUpLiBCdXQgYXMgb2YgalF1ZXJ5IDMuMCAoMjAxNiksIHN0cmljdCBtb2RlIHNob3VsZCBiZSBjb21tb24KKy8vIGVub3VnaCB0aGF0IGFsbCBzdWNoIGF0dGVtcHRzIGFyZSBndWFyZGVkIGluIGEgdHJ5IGJsb2NrLgorInVzZSBzdHJpY3QiOworCit2YXIgYXJyID0gW107CisKK3ZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDsKKwordmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mOworCit2YXIgc2xpY2UgPSBhcnIuc2xpY2U7CisKK3ZhciBjb25jYXQgPSBhcnIuY29uY2F0OworCit2YXIgcHVzaCA9IGFyci5wdXNoOworCit2YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mOworCit2YXIgY2xhc3MydHlwZSA9IHt9OworCit2YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nOworCit2YXIgaGFzT3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTsKKwordmFyIGZuVG9TdHJpbmcgPSBoYXNPd24udG9TdHJpbmc7CisKK3ZhciBPYmplY3RGdW5jdGlvblN0cmluZyA9IGZuVG9TdHJpbmcuY2FsbCggT2JqZWN0ICk7CisKK3ZhciBzdXBwb3J0ID0ge307CisKK3ZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbiggb2JqICkgeworCisgICAgICAvLyBTdXBwb3J0OiBDaHJvbWUgPD01NywgRmlyZWZveCA8PTUyCisgICAgICAvLyBJbiBzb21lIGJyb3dzZXJzLCB0eXBlb2YgcmV0dXJucyAiZnVuY3Rpb24iIGZvciBIVE1MIDxvYmplY3Q+IGVsZW1lbnRzCisgICAgICAvLyAoaS5lLiwgYHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAib2JqZWN0IiApID09PSAiZnVuY3Rpb24iYCkuCisgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNsYXNzaWZ5ICphbnkqIERPTSBub2RlIGFzIGEgZnVuY3Rpb24uCisgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gImZ1bmN0aW9uIiAmJiB0eXBlb2Ygb2JqLm5vZGVUeXBlICE9PSAibnVtYmVyIjsKKyAgfTsKKworCit2YXIgaXNXaW5kb3cgPSBmdW5jdGlvbiBpc1dpbmRvdyggb2JqICkgeworCQlyZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93OworCX07CisKKworCisKKwl2YXIgcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyA9IHsKKwkJdHlwZTogdHJ1ZSwKKwkJc3JjOiB0cnVlLAorCQlub01vZHVsZTogdHJ1ZQorCX07CisKKwlmdW5jdGlvbiBET01FdmFsKCBjb2RlLCBkb2MsIG5vZGUgKSB7CisJCWRvYyA9IGRvYyB8fCBkb2N1bWVudDsKKworCQl2YXIgaSwKKwkJCXNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KCAic2NyaXB0IiApOworCisJCXNjcmlwdC50ZXh0ID0gY29kZTsKKwkJaWYgKCBub2RlICkgeworCQkJZm9yICggaSBpbiBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzICkgeworCQkJCWlmICggbm9kZVsgaSBdICkgeworCQkJCQlzY3JpcHRbIGkgXSA9IG5vZGVbIGkgXTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZG9jLmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdCApLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHNjcmlwdCApOworCX0KKworCitmdW5jdGlvbiB0b1R5cGUoIG9iaiApIHsKKwlpZiAoIG9iaiA9PSBudWxsICkgeworCQlyZXR1cm4gb2JqICsgIiI7CisJfQorCisJLy8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5IChmdW5jdGlvbmlzaCBSZWdFeHApCisJcmV0dXJuIHR5cGVvZiBvYmogPT09ICJvYmplY3QiIHx8IHR5cGVvZiBvYmogPT09ICJmdW5jdGlvbiIgPworCQljbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKCBvYmogKSBdIHx8ICJvYmplY3QiIDoKKwkJdHlwZW9mIG9iajsKK30KKy8qIGdsb2JhbCBTeW1ib2wgKi8KKy8vIERlZmluaW5nIHRoaXMgZ2xvYmFsIGluIC5lc2xpbnRyYy5qc29uIHdvdWxkIGNyZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsCisvLyB1bmd1YXJkZWQgaW4gYW5vdGhlciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8gZGVmaW5lIGdsb2JhbCBvbmx5IGZvciB0aGlzIG1vZHVsZQorCisKKwordmFyCisJdmVyc2lvbiA9ICIzLjMuMSIsCisKKwkvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeQorCWpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsKKworCQkvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCcKKwkJLy8gTmVlZCBpbml0IGlmIGpRdWVyeSBpcyBjYWxsZWQgKGp1c3QgYWxsb3cgZXJyb3IgdG8gYmUgdGhyb3duIGlmIG5vdCBpbmNsdWRlZCkKKwkJcmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTsKKwl9LAorCisJLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5CisJLy8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQCisJcnRyaW0gPSAvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2c7CisKK2pRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7CisKKwkvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkCisJanF1ZXJ5OiB2ZXJzaW9uLAorCisJY29uc3RydWN0b3I6IGpRdWVyeSwKKworCS8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMAorCWxlbmd0aDogMCwKKworCXRvQXJyYXk6IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApOworCX0sCisKKwkvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SCisJLy8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXkKKwlnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7CisKKwkJLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheQorCQlpZiAoIG51bSA9PSBudWxsICkgeworCQkJcmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTsKKwkJfQorCisJCS8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXQKKwkJcmV0dXJuIG51bSA8IDAgPyB0aGlzWyBudW0gKyB0aGlzLmxlbmd0aCBdIDogdGhpc1sgbnVtIF07CisJfSwKKworCS8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2sKKwkvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldCkKKwlwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHsKKworCQkvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldAorCQl2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7CisKKwkJLy8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSkKKwkJcmV0LnByZXZPYmplY3QgPSB0aGlzOworCisJCS8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0CisJCXJldHVybiByZXQ7CisJfSwKKworCS8vIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuCisJZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrICkgeworCQlyZXR1cm4galF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrICk7CisJfSwKKworCW1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkgeworCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgeworCQkJcmV0dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTsKKwkJfSApICk7CisJfSwKKworCXNsaWNlOiBmdW5jdGlvbigpIHsKKwkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICkgKTsKKwl9LAorCisJZmlyc3Q6IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4gdGhpcy5lcSggMCApOworCX0sCisKKwlsYXN0OiBmdW5jdGlvbigpIHsKKwkJcmV0dXJuIHRoaXMuZXEoIC0xICk7CisJfSwKKworCWVxOiBmdW5jdGlvbiggaSApIHsKKwkJdmFyIGxlbiA9IHRoaXMubGVuZ3RoLAorCQkJaiA9ICtpICsgKCBpIDwgMCA/IGxlbiA6IDAgKTsKKwkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqID49IDAgJiYgaiA8IGxlbiA/IFsgdGhpc1sgaiBdIF0gOiBbXSApOworCX0sCisKKwllbmQ6IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IoKTsKKwl9LAorCisJLy8gRm9yIGludGVybmFsIHVzZSBvbmx5LgorCS8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLgorCXB1c2g6IHB1c2gsCisJc29ydDogYXJyLnNvcnQsCisJc3BsaWNlOiBhcnIuc3BsaWNlCit9OworCitqUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkgeworCXZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSwKKwkJdGFyZ2V0ID0gYXJndW1lbnRzWyAwIF0gfHwge30sCisJCWkgPSAxLAorCQlsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLAorCQlkZWVwID0gZmFsc2U7CisKKwkvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uCisJaWYgKCB0eXBlb2YgdGFyZ2V0ID09PSAiYm9vbGVhbiIgKSB7CisJCWRlZXAgPSB0YXJnZXQ7CisKKwkJLy8gU2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldAorCQl0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTsKKwkJaSsrOworCX0KKworCS8vIEhhbmRsZSBjYXNlIHdoZW4gdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5KQorCWlmICggdHlwZW9mIHRhcmdldCAhPT0gIm9iamVjdCIgJiYgIWlzRnVuY3Rpb24oIHRhcmdldCApICkgeworCQl0YXJnZXQgPSB7fTsKKwl9CisKKwkvLyBFeHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWQKKwlpZiAoIGkgPT09IGxlbmd0aCApIHsKKwkJdGFyZ2V0ID0gdGhpczsKKwkJaS0tOworCX0KKworCWZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgeworCisJCS8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXMKKwkJaWYgKCAoIG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSApICE9IG51bGwgKSB7CisKKwkJCS8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3QKKwkJCWZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsKKwkJCQlzcmMgPSB0YXJnZXRbIG5hbWUgXTsKKwkJCQljb3B5ID0gb3B0aW9uc1sgbmFtZSBdOworCisJCQkJLy8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcAorCQkJCWlmICggdGFyZ2V0ID09PSBjb3B5ICkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQkvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXMKKwkJCQlpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb3B5ICkgfHwKKwkJCQkJKCBjb3B5SXNBcnJheSA9IEFycmF5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7CisKKwkJCQkJaWYgKCBjb3B5SXNBcnJheSApIHsKKwkJCQkJCWNvcHlJc0FycmF5ID0gZmFsc2U7CisJCQkJCQljbG9uZSA9IHNyYyAmJiBBcnJheS5pc0FycmF5KCBzcmMgKSA/IHNyYyA6IFtdOworCisJCQkJCX0gZWxzZSB7CisJCQkJCQljbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggc3JjICkgPyBzcmMgOiB7fTsKKwkJCQkJfQorCisJCQkJCS8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbQorCQkJCQl0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5ICk7CisKKwkJCQkvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzCisJCQkJfSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkgeworCQkJCQl0YXJnZXRbIG5hbWUgXSA9IGNvcHk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLy8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3QKKwlyZXR1cm4gdGFyZ2V0OworfTsKKworalF1ZXJ5LmV4dGVuZCggeworCisJLy8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlCisJZXhwYW5kbzogImpRdWVyeSIgKyAoIHZlcnNpb24gKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xEL2csICIiICksCisKKwkvLyBBc3N1bWUgalF1ZXJ5IGlzIHJlYWR5IHdpdGhvdXQgdGhlIHJlYWR5IG1vZHVsZQorCWlzUmVhZHk6IHRydWUsCisKKwllcnJvcjogZnVuY3Rpb24oIG1zZyApIHsKKwkJdGhyb3cgbmV3IEVycm9yKCBtc2cgKTsKKwl9LAorCisJbm9vcDogZnVuY3Rpb24oKSB7fSwKKworCWlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7CisJCXZhciBwcm90bywgQ3RvcjsKKworCQkvLyBEZXRlY3Qgb2J2aW91cyBuZWdhdGl2ZXMKKwkJLy8gVXNlIHRvU3RyaW5nIGluc3RlYWQgb2YgalF1ZXJ5LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzCisJCWlmICggIW9iaiB8fCB0b1N0cmluZy5jYWxsKCBvYmogKSAhPT0gIltvYmplY3QgT2JqZWN0XSIgKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQlwcm90byA9IGdldFByb3RvKCBvYmogKTsKKworCQkvLyBPYmplY3RzIHdpdGggbm8gcHJvdG90eXBlIChlLmcuLCBgT2JqZWN0LmNyZWF0ZSggbnVsbCApYCkgYXJlIHBsYWluCisJCWlmICggIXByb3RvICkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQkvLyBPYmplY3RzIHdpdGggcHJvdG90eXBlIGFyZSBwbGFpbiBpZmYgdGhleSB3ZXJlIGNvbnN0cnVjdGVkIGJ5IGEgZ2xvYmFsIE9iamVjdCBmdW5jdGlvbgorCQlDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCAiY29uc3RydWN0b3IiICkgJiYgcHJvdG8uY29uc3RydWN0b3I7CisJCXJldHVybiB0eXBlb2YgQ3RvciA9PT0gImZ1bmN0aW9uIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7CisJfSwKKworCWlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7CisKKwkJLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi8KKwkJLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2lzc3Vlcy82MTI1CisJCXZhciBuYW1lOworCisJCWZvciAoIG5hbWUgaW4gb2JqICkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCXJldHVybiB0cnVlOworCX0sCisKKwkvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBnbG9iYWwgY29udGV4dAorCWdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlICkgeworCQlET01FdmFsKCBjb2RlICk7CisJfSwKKworCWVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkgeworCQl2YXIgbGVuZ3RoLCBpID0gMDsKKworCQlpZiAoIGlzQXJyYXlMaWtlKCBvYmogKSApIHsKKwkJCWxlbmd0aCA9IG9iai5sZW5ndGg7CisJCQlmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKKwkJCQlpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJZm9yICggaSBpbiBvYmogKSB7CisJCQkJaWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXJldHVybiBvYmo7CisJfSwKKworCS8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seQorCXRyaW06IGZ1bmN0aW9uKCB0ZXh0ICkgeworCQlyZXR1cm4gdGV4dCA9PSBudWxsID8KKwkJCSIiIDoKKwkJCSggdGV4dCArICIiICkucmVwbGFjZSggcnRyaW0sICIiICk7CisJfSwKKworCS8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKKwltYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7CisJCXZhciByZXQgPSByZXN1bHRzIHx8IFtdOworCisJCWlmICggYXJyICE9IG51bGwgKSB7CisJCQlpZiAoIGlzQXJyYXlMaWtlKCBPYmplY3QoIGFyciApICkgKSB7CisJCQkJalF1ZXJ5Lm1lcmdlKCByZXQsCisJCQkJCXR5cGVvZiBhcnIgPT09ICJzdHJpbmciID8KKwkJCQkJWyBhcnIgXSA6IGFycgorCQkJCSk7CisJCQl9IGVsc2UgeworCQkJCXB1c2guY2FsbCggcmV0LCBhcnIgKTsKKwkJCX0KKwkJfQorCisJCXJldHVybiByZXQ7CisJfSwKKworCWluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7CisJCXJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTsKKwl9LAorCisJLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5CisJLy8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdAorCW1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHsKKwkJdmFyIGxlbiA9ICtzZWNvbmQubGVuZ3RoLAorCQkJaiA9IDAsCisJCQlpID0gZmlyc3QubGVuZ3RoOworCisJCWZvciAoIDsgaiA8IGxlbjsgaisrICkgeworCQkJZmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07CisJCX0KKworCQlmaXJzdC5sZW5ndGggPSBpOworCisJCXJldHVybiBmaXJzdDsKKwl9LAorCisJZ3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ZXJ0ICkgeworCQl2YXIgY2FsbGJhY2tJbnZlcnNlLAorCQkJbWF0Y2hlcyA9IFtdLAorCQkJaSA9IDAsCisJCQlsZW5ndGggPSBlbGVtcy5sZW5ndGgsCisJCQljYWxsYmFja0V4cGVjdCA9ICFpbnZlcnQ7CisKKwkJLy8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtcworCQkvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvbgorCQlmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKKwkJCWNhbGxiYWNrSW52ZXJzZSA9ICFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApOworCQkJaWYgKCBjYWxsYmFja0ludmVyc2UgIT09IGNhbGxiYWNrRXhwZWN0ICkgeworCQkJCW1hdGNoZXMucHVzaCggZWxlbXNbIGkgXSApOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG1hdGNoZXM7CisJfSwKKworCS8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQorCW1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkgeworCQl2YXIgbGVuZ3RoLCB2YWx1ZSwKKwkJCWkgPSAwLAorCQkJcmV0ID0gW107CisKKwkJLy8gR28gdGhyb3VnaCB0aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2ggb2YgdGhlIGl0ZW1zIHRvIHRoZWlyIG5ldyB2YWx1ZXMKKwkJaWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHsKKwkJCWxlbmd0aCA9IGVsZW1zLmxlbmd0aDsKKwkJCWZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgeworCQkJCXZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApOworCisJCQkJaWYgKCB2YWx1ZSAhPSBudWxsICkgeworCQkJCQlyZXQucHVzaCggdmFsdWUgKTsKKwkJCQl9CisJCQl9CisKKwkJLy8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCwKKwkJfSBlbHNlIHsKKwkJCWZvciAoIGkgaW4gZWxlbXMgKSB7CisJCQkJdmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7CisKKwkJCQlpZiAoIHZhbHVlICE9IG51bGwgKSB7CisJCQkJCXJldC5wdXNoKCB2YWx1ZSApOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXMKKwkJcmV0dXJuIGNvbmNhdC5hcHBseSggW10sIHJldCApOworCX0sCisKKwkvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHMKKwlndWlkOiAxLAorCisJLy8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyCisJLy8gcHJvcGVydGllcyB0byBpdCBzbyBpdCBuZWVkcyB0byBleGlzdC4KKwlzdXBwb3J0OiBzdXBwb3J0Cit9ICk7CisKK2lmICggdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiApIHsKKwlqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBdID0gYXJyWyBTeW1ib2wuaXRlcmF0b3IgXTsKK30KKworLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwCitqUXVlcnkuZWFjaCggIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sIi5zcGxpdCggIiAiICksCitmdW5jdGlvbiggaSwgbmFtZSApIHsKKwljbGFzczJ0eXBlWyAiW29iamVjdCAiICsgbmFtZSArICJdIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpOworfSApOworCitmdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkgeworCisJLy8gU3VwcG9ydDogcmVhbCBpT1MgOC4yIG9ubHkgKG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKQorCS8vIGBpbmAgY2hlY2sgdXNlZCB0byBwcmV2ZW50IEpJVCBlcnJvciAoZ2gtMjE0NSkKKwkvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXMKKwkvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGluIElFCisJdmFyIGxlbmd0aCA9ICEhb2JqICYmICJsZW5ndGgiIGluIG9iaiAmJiBvYmoubGVuZ3RoLAorCQl0eXBlID0gdG9UeXBlKCBvYmogKTsKKworCWlmICggaXNGdW5jdGlvbiggb2JqICkgfHwgaXNXaW5kb3coIG9iaiApICkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHR5cGUgPT09ICJhcnJheSIgfHwgbGVuZ3RoID09PSAwIHx8CisJCXR5cGVvZiBsZW5ndGggPT09ICJudW1iZXIiICYmIGxlbmd0aCA+IDAgJiYgKCBsZW5ndGggLSAxICkgaW4gb2JqOworfQordmFyIFNpenpsZSA9CisvKiEKKyAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lIHYyLjMuMworICogaHR0cHM6Ly9zaXp6bGVqcy5jb20vCisgKgorICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQorICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQorICoKKyAqIERhdGU6IDIwMTYtMDgtMDgKKyAqLworKGZ1bmN0aW9uKCB3aW5kb3cgKSB7CisKK3ZhciBpLAorCXN1cHBvcnQsCisJRXhwciwKKwlnZXRUZXh0LAorCWlzWE1MLAorCXRva2VuaXplLAorCWNvbXBpbGUsCisJc2VsZWN0LAorCW91dGVybW9zdENvbnRleHQsCisJc29ydElucHV0LAorCWhhc0R1cGxpY2F0ZSwKKworCS8vIExvY2FsIGRvY3VtZW50IHZhcnMKKwlzZXREb2N1bWVudCwKKwlkb2N1bWVudCwKKwlkb2NFbGVtLAorCWRvY3VtZW50SXNIVE1MLAorCXJidWdneVFTQSwKKwlyYnVnZ3lNYXRjaGVzLAorCW1hdGNoZXMsCisJY29udGFpbnMsCisKKwkvLyBJbnN0YW5jZS1zcGVjaWZpYyBkYXRhCisJZXhwYW5kbyA9ICJzaXp6bGUiICsgMSAqIG5ldyBEYXRlKCksCisJcHJlZmVycmVkRG9jID0gd2luZG93LmRvY3VtZW50LAorCWRpcnJ1bnMgPSAwLAorCWRvbmUgPSAwLAorCWNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLAorCXRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLAorCWNvbXBpbGVyQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLAorCXNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkgeworCQlpZiAoIGEgPT09IGIgKSB7CisJCQloYXNEdXBsaWNhdGUgPSB0cnVlOworCQl9CisJCXJldHVybiAwOworCX0sCisKKwkvLyBJbnN0YW5jZSBtZXRob2RzCisJaGFzT3duID0gKHt9KS5oYXNPd25Qcm9wZXJ0eSwKKwlhcnIgPSBbXSwKKwlwb3AgPSBhcnIucG9wLAorCXB1c2hfbmF0aXZlID0gYXJyLnB1c2gsCisJcHVzaCA9IGFyci5wdXNoLAorCXNsaWNlID0gYXJyLnNsaWNlLAorCS8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBhcyBpdCdzIGZhc3RlciB0aGFuIG5hdGl2ZQorCS8vIGh0dHBzOi8vanNwZXJmLmNvbS90aG9yLWluZGV4b2YtdnMtZm9yLzUKKwlpbmRleE9mID0gZnVuY3Rpb24oIGxpc3QsIGVsZW0gKSB7CisJCXZhciBpID0gMCwKKwkJCWxlbiA9IGxpc3QubGVuZ3RoOworCQlmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKwkJCWlmICggbGlzdFtpXSA9PT0gZWxlbSApIHsKKwkJCQlyZXR1cm4gaTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gLTE7CisJfSwKKworCWJvb2xlYW5zID0gImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIiwKKworCS8vIFJlZ3VsYXIgZXhwcmVzc2lvbnMKKworCS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlCisJd2hpdGVzcGFjZSA9ICJbXFx4MjBcXHRcXHJcXG5cXGZdIiwKKworCS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCN2YWx1ZS1kZWYtaWRlbnRpZmllcgorCWlkZW50aWZpZXIgPSAiKD86XFxcXC58W1xcdy1dfFteXDAtXFx4YTBdKSsiLAorCisJLy8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzCisJYXR0cmlidXRlcyA9ICJcXFsiICsgd2hpdGVzcGFjZSArICIqKCIgKyBpZGVudGlmaWVyICsgIikoPzoiICsgd2hpdGVzcGFjZSArCisJCS8vIE9wZXJhdG9yIChjYXB0dXJlIDIpCisJCSIqKFsqXiR8IX5dPz0pIiArIHdoaXRlc3BhY2UgKworCQkvLyAiQXR0cmlidXRlIHZhbHVlcyBtdXN0IGJlIENTUyBpZGVudGlmaWVycyBbY2FwdHVyZSA1XSBvciBzdHJpbmdzIFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XSIKKwkJIiooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIiArIGlkZW50aWZpZXIgKyAiKSl8KSIgKyB3aGl0ZXNwYWNlICsKKwkJIipcXF0iLAorCisJcHNldWRvcyA9ICI6KCIgKyBpZGVudGlmaWVyICsgIikoPzpcXCgoIiArCisJCS8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZlciBhcmd1bWVudHM6CisJCS8vIDEuIHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0dXJlIDQgb3IgY2FwdHVyZSA1KQorCQkiKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwiICsKKwkJLy8gMi4gc2ltcGxlIChjYXB0dXJlIDYpCisJCSIoKD86XFxcXC58W15cXFxcKClbXFxdXXwiICsgYXR0cmlidXRlcyArICIpKil8IiArCisJCS8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMikKKwkJIi4qIiArCisJCSIpXFwpfCkiLAorCisJLy8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGxhdHRlcgorCXJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArICIrIiwgImciICksCisJcnRyaW0gPSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIgKyB3aGl0ZXNwYWNlICsgIiskIiwgImciICksCisKKwlyY29tbWEgPSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIiosIiArIHdoaXRlc3BhY2UgKyAiKiIgKSwKKwlyY29tYmluYXRvcnMgPSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIiooWz4rfl18IiArIHdoaXRlc3BhY2UgKyAiKSIgKyB3aGl0ZXNwYWNlICsgIioiICksCisKKwlyYXR0cmlidXRlUXVvdGVzID0gbmV3IFJlZ0V4cCggIj0iICsgd2hpdGVzcGFjZSArICIqKFteXFxdJ1wiXSo/KSIgKyB3aGl0ZXNwYWNlICsgIipcXF0iLCAiZyIgKSwKKworCXJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1ZG9zICksCisJcmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCAiXiIgKyBpZGVudGlmaWVyICsgIiQiICksCisKKwltYXRjaEV4cHIgPSB7CisJCSJJRCI6IG5ldyBSZWdFeHAoICJeIygiICsgaWRlbnRpZmllciArICIpIiApLAorCQkiQ0xBU1MiOiBuZXcgUmVnRXhwKCAiXlxcLigiICsgaWRlbnRpZmllciArICIpIiApLAorCQkiVEFHIjogbmV3IFJlZ0V4cCggIl4oIiArIGlkZW50aWZpZXIgKyAifFsqXSkiICksCisJCSJBVFRSIjogbmV3IFJlZ0V4cCggIl4iICsgYXR0cmlidXRlcyApLAorCQkiUFNFVURPIjogbmV3IFJlZ0V4cCggIl4iICsgcHNldWRvcyApLAorCQkiQ0hJTEQiOiBuZXcgUmVnRXhwKCAiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFwoIiArIHdoaXRlc3BhY2UgKworCQkJIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiICsgd2hpdGVzcGFjZSArICIqKD86KFsrLV18KSIgKyB3aGl0ZXNwYWNlICsKKwkJCSIqKFxcZCspfCkpIiArIHdoaXRlc3BhY2UgKyAiKlxcKXwpIiwgImkiICksCisJCSJib29sIjogbmV3IFJlZ0V4cCggIl4oPzoiICsgYm9vbGVhbnMgKyAiKSQiLCAiaSIgKSwKKwkJLy8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpCisJCS8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGAKKwkJIm5lZWRzQ29udGV4dCI6IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIiArCisJCQl3aGl0ZXNwYWNlICsgIiooKD86LVxcZCk/XFxkKikiICsgd2hpdGVzcGFjZSArICIqXFwpfCkoPz1bXi1dfCQpIiwgImkiICkKKwl9LAorCisJcmlucHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksCisJcmhlYWRlciA9IC9eaFxkJC9pLAorCisJcm5hdGl2ZSA9IC9eW157XStce1xzKlxbbmF0aXZlIFx3LywKKworCS8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9ycworCXJxdWlja0V4cHIgPSAvXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLAorCisJcnNpYmxpbmcgPSAvWyt+XS8sCisKKwkvLyBDU1MgZXNjYXBlcworCS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNlc2NhcGVkLWNoYXJhY3RlcnMKKwlydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCAiXFxcXChbXFxkYS1mXXsxLDZ9IiArIHdoaXRlc3BhY2UgKyAiP3woIiArIHdoaXRlc3BhY2UgKyAiKXwuKSIsICJpZyIgKSwKKwlmdW5lc2NhcGUgPSBmdW5jdGlvbiggXywgZXNjYXBlZCwgZXNjYXBlZFdoaXRlc3BhY2UgKSB7CisJCXZhciBoaWdoID0gIjB4IiArIGVzY2FwZWQgLSAweDEwMDAwOworCQkvLyBOYU4gbWVhbnMgbm9uLWNvZGVwb2ludAorCQkvLyBTdXBwb3J0OiBGaXJlZm94PDI0CisJCS8vIFdvcmthcm91bmQgZXJyb25lb3VzIG51bWVyaWMgaW50ZXJwcmV0YXRpb24gb2YgKyIweCIKKwkJcmV0dXJuIGhpZ2ggIT09IGhpZ2ggfHwgZXNjYXBlZFdoaXRlc3BhY2UgPworCQkJZXNjYXBlZCA6CisJCQloaWdoIDwgMCA/CisJCQkJLy8gQk1QIGNvZGVwb2ludAorCQkJCVN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOgorCQkJCS8vIFN1cHBsZW1lbnRhbCBQbGFuZSBjb2RlcG9pbnQgKHN1cnJvZ2F0ZSBwYWlyKQorCQkJCVN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApOworCX0sCisKKwkvLyBDU1Mgc3RyaW5nL2lkZW50aWZpZXIgc2VyaWFsaXphdGlvbgorCS8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jY29tbW9uLXNlcmlhbGl6aW5nLWlkaW9tcworCXJjc3Nlc2NhcGUgPSAvKFtcMC1ceDFmXHg3Zl18Xi0/XGQpfF4tJHxbXlwwLVx4MWZceDdmLVx1RkZGRlx3LV0vZywKKwlmY3NzZXNjYXBlID0gZnVuY3Rpb24oIGNoLCBhc0NvZGVQb2ludCApIHsKKwkJaWYgKCBhc0NvZGVQb2ludCApIHsKKworCQkJLy8gVSswMDAwIE5VTEwgYmVjb21lcyBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSCisJCQlpZiAoIGNoID09PSAiXDAiICkgeworCQkJCXJldHVybiAiXHVGRkZEIjsKKwkJCX0KKworCQkJLy8gQ29udHJvbCBjaGFyYWN0ZXJzIGFuZCAoZGVwZW5kZW50IHVwb24gcG9zaXRpb24pIG51bWJlcnMgZ2V0IGVzY2FwZWQgYXMgY29kZSBwb2ludHMKKwkJCXJldHVybiBjaC5zbGljZSggMCwgLTEgKSArICJcXCIgKyBjaC5jaGFyQ29kZUF0KCBjaC5sZW5ndGggLSAxICkudG9TdHJpbmcoIDE2ICkgKyAiICI7CisJCX0KKworCQkvLyBPdGhlciBwb3RlbnRpYWxseS1zcGVjaWFsIEFTQ0lJIGNoYXJhY3RlcnMgZ2V0IGJhY2tzbGFzaC1lc2NhcGVkCisJCXJldHVybiAiXFwiICsgY2g7CisJfSwKKworCS8vIFVzZWQgZm9yIGlmcmFtZXMKKwkvLyBTZWUgc2V0RG9jdW1lbnQoKQorCS8vIFJlbW92aW5nIHRoZSBmdW5jdGlvbiB3cmFwcGVyIGNhdXNlcyBhICJQZXJtaXNzaW9uIERlbmllZCIKKwkvLyBlcnJvciBpbiBJRQorCXVubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHsKKwkJc2V0RG9jdW1lbnQoKTsKKwl9LAorCisJZGlzYWJsZWRBbmNlc3RvciA9IGFkZENvbWJpbmF0b3IoCisJCWZ1bmN0aW9uKCBlbGVtICkgeworCQkJcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWUgJiYgKCJmb3JtIiBpbiBlbGVtIHx8ICJsYWJlbCIgaW4gZWxlbSk7CisJCX0sCisJCXsgZGlyOiAicGFyZW50Tm9kZSIsIG5leHQ6ICJsZWdlbmQiIH0KKwkpOworCisvLyBPcHRpbWl6ZSBmb3IgcHVzaC5hcHBseSggXywgTm9kZUxpc3QgKQordHJ5IHsKKwlwdXNoLmFwcGx5KAorCQkoYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSksCisJCXByZWZlcnJlZERvYy5jaGlsZE5vZGVzCisJKTsKKwkvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMAorCS8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHkKKwlhcnJbIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzLmxlbmd0aCBdLm5vZGVUeXBlOworfSBjYXRjaCAoIGUgKSB7CisJcHVzaCA9IHsgYXBwbHk6IGFyci5sZW5ndGggPworCisJCS8vIExldmVyYWdlIHNsaWNlIGlmIHBvc3NpYmxlCisJCWZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHsKKwkJCXB1c2hfbmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoZWxzKSApOworCQl9IDoKKworCQkvLyBTdXBwb3J0OiBJRTw5CisJCS8vIE90aGVyd2lzZSBhcHBlbmQgZGlyZWN0bHkKKwkJZnVuY3Rpb24oIHRhcmdldCwgZWxzICkgeworCQkJdmFyIGogPSB0YXJnZXQubGVuZ3RoLAorCQkJCWkgPSAwOworCQkJLy8gQ2FuJ3QgdHJ1c3QgTm9kZUxpc3QubGVuZ3RoCisJCQl3aGlsZSAoICh0YXJnZXRbaisrXSA9IGVsc1tpKytdKSApIHt9CisJCQl0YXJnZXQubGVuZ3RoID0gaiAtIDE7CisJCX0KKwl9OworfQorCitmdW5jdGlvbiBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkgeworCXZhciBtLCBpLCBlbGVtLCBuaWQsIG1hdGNoLCBncm91cHMsIG5ld1NlbGVjdG9yLAorCQluZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQsCisKKwkJLy8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVudAorCQlub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOTsKKworCXJlc3VsdHMgPSByZXN1bHRzIHx8IFtdOworCisJLy8gUmV0dXJuIGVhcmx5IGZyb20gY2FsbHMgd2l0aCBpbnZhbGlkIHNlbGVjdG9yIG9yIGNvbnRleHQKKwlpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgfHwgIXNlbGVjdG9yIHx8CisJCW5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHsKKworCQlyZXR1cm4gcmVzdWx0czsKKwl9CisKKwkvLyBUcnkgdG8gc2hvcnRjdXQgZmluZCBvcGVyYXRpb25zIChhcyBvcHBvc2VkIHRvIGZpbHRlcnMpIGluIEhUTUwgZG9jdW1lbnRzCisJaWYgKCAhc2VlZCApIHsKKworCQlpZiAoICggY29udGV4dCA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogcHJlZmVycmVkRG9jICkgIT09IGRvY3VtZW50ICkgeworCQkJc2V0RG9jdW1lbnQoIGNvbnRleHQgKTsKKwkJfQorCQljb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKKworCQlpZiAoIGRvY3VtZW50SXNIVE1MICkgeworCisJCQkvLyBJZiB0aGUgc2VsZWN0b3IgaXMgc3VmZmljaWVudGx5IHNpbXBsZSwgdHJ5IHVzaW5nIGEgImdldCpCeSoiIERPTSBtZXRob2QKKwkJCS8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdCkKKwkJCWlmICggbm9kZVR5cGUgIT09IDExICYmIChtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSkgKSB7CisKKwkJCQkvLyBJRCBzZWxlY3RvcgorCQkJCWlmICggKG0gPSBtYXRjaFsxXSkgKSB7CisKKwkJCQkJLy8gRG9jdW1lbnQgY29udGV4dAorCQkJCQlpZiAoIG5vZGVUeXBlID09PSA5ICkgeworCQkJCQkJaWYgKCAoZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgKSB7CisKKwkJCQkJCQkvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdAorCQkJCQkJCS8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zCisJCQkJCQkJLy8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAorCQkJCQkJCWlmICggZWxlbS5pZCA9PT0gbSApIHsKKwkJCQkJCQkJcmVzdWx0cy5wdXNoKCBlbGVtICk7CisJCQkJCQkJCXJldHVybiByZXN1bHRzOworCQkJCQkJCX0KKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJcmV0dXJuIHJlc3VsdHM7CisJCQkJCQl9CisKKwkJCQkJLy8gRWxlbWVudCBjb250ZXh0CisJCQkJCX0gZWxzZSB7CisKKwkJCQkJCS8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0CisJCQkJCQkvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9ucworCQkJCQkJLy8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAorCQkJCQkJaWYgKCBuZXdDb250ZXh0ICYmIChlbGVtID0gbmV3Q29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSAmJgorCQkJCQkJCWNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiYKKwkJCQkJCQllbGVtLmlkID09PSBtICkgeworCisJCQkJCQkJcmVzdWx0cy5wdXNoKCBlbGVtICk7CisJCQkJCQkJcmV0dXJuIHJlc3VsdHM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCS8vIFR5cGUgc2VsZWN0b3IKKwkJCQl9IGVsc2UgaWYgKCBtYXRjaFsyXSApIHsKKwkJCQkJcHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApOworCQkJCQlyZXR1cm4gcmVzdWx0czsKKworCQkJCS8vIENsYXNzIHNlbGVjdG9yCisJCQkJfSBlbHNlIGlmICggKG0gPSBtYXRjaFszXSkgJiYgc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmCisJCQkJCWNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHsKKworCQkJCQlwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSApOworCQkJCQlyZXR1cm4gcmVzdWx0czsKKwkJCQl9CisJCQl9CisKKwkJCS8vIFRha2UgYWR2YW50YWdlIG9mIHF1ZXJ5U2VsZWN0b3JBbGwKKwkJCWlmICggc3VwcG9ydC5xc2EgJiYKKwkJCQkhY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyAiICIgXSAmJgorCQkJCSghcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSkgKSB7CisKKwkJCQlpZiAoIG5vZGVUeXBlICE9PSAxICkgeworCQkJCQluZXdDb250ZXh0ID0gY29udGV4dDsKKwkJCQkJbmV3U2VsZWN0b3IgPSBzZWxlY3RvcjsKKworCQkJCS8vIHFTQSBsb29rcyBvdXRzaWRlIEVsZW1lbnQgY29udGV4dCwgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudAorCQkJCS8vIFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGlzIHdvcmthcm91bmQgdGVjaG5pcXVlCisJCQkJLy8gU3VwcG9ydDogSUUgPD04CisJCQkJLy8gRXhjbHVkZSBvYmplY3QgZWxlbWVudHMKKwkJCQl9IGVsc2UgaWYgKCBjb250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICJvYmplY3QiICkgeworCisJCQkJCS8vIENhcHR1cmUgdGhlIGNvbnRleHQgSUQsIHNldHRpbmcgaXQgZmlyc3QgaWYgbmVjZXNzYXJ5CisJCQkJCWlmICggKG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCAiaWQiICkpICkgeworCQkJCQkJbmlkID0gbmlkLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWNvbnRleHQuc2V0QXR0cmlidXRlKCAiaWQiLCAobmlkID0gZXhwYW5kbykgKTsKKwkJCQkJfQorCisJCQkJCS8vIFByZWZpeCBldmVyeSBzZWxlY3RvciBpbiB0aGUgbGlzdAorCQkJCQlncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTsKKwkJCQkJaSA9IGdyb3Vwcy5sZW5ndGg7CisJCQkJCXdoaWxlICggaS0tICkgeworCQkJCQkJZ3JvdXBzW2ldID0gIiMiICsgbmlkICsgIiAiICsgdG9TZWxlY3RvciggZ3JvdXBzW2ldICk7CisJCQkJCX0KKwkJCQkJbmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggIiwiICk7CisKKwkJCQkJLy8gRXhwYW5kIGNvbnRleHQgZm9yIHNpYmxpbmcgc2VsZWN0b3JzCisJCQkJCW5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fAorCQkJCQkJY29udGV4dDsKKwkJCQl9CisKKwkJCQlpZiAoIG5ld1NlbGVjdG9yICkgeworCQkJCQl0cnkgeworCQkJCQkJcHVzaC5hcHBseSggcmVzdWx0cywKKwkJCQkJCQluZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yICkKKwkJCQkJCSk7CisJCQkJCQlyZXR1cm4gcmVzdWx0czsKKwkJCQkJfSBjYXRjaCAoIHFzYUVycm9yICkgeworCQkJCQl9IGZpbmFsbHkgeworCQkJCQkJaWYgKCBuaWQgPT09IGV4cGFuZG8gKSB7CisJCQkJCQkJY29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoICJpZCIgKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8vIEFsbCBvdGhlcnMKKwlyZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgIiQxIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7Cit9CisKKy8qKgorICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplCisgKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoCisgKglwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmluZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKQorICoJZGVsZXRpbmcgdGhlIG9sZGVzdCBlbnRyeQorICovCitmdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHsKKwl2YXIga2V5cyA9IFtdOworCisJZnVuY3Rpb24gY2FjaGUoIGtleSwgdmFsdWUgKSB7CisJCS8vIFVzZSAoa2V5ICsgIiAiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgcHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSBJc3N1ZSAjMTU3KQorCQlpZiAoIGtleXMucHVzaCgga2V5ICsgIiAiICkgPiBFeHByLmNhY2hlTGVuZ3RoICkgeworCQkJLy8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzCisJCQlkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdOworCQl9CisJCXJldHVybiAoY2FjaGVbIGtleSArICIgIiBdID0gdmFsdWUpOworCX0KKwlyZXR1cm4gY2FjaGU7Cit9CisKKy8qKgorICogTWFyayBhIGZ1bmN0aW9uIGZvciBzcGVjaWFsIHVzZSBieSBTaXp6bGUKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBtYXJrCisgKi8KK2Z1bmN0aW9uIG1hcmtGdW5jdGlvbiggZm4gKSB7CisJZm5bIGV4cGFuZG8gXSA9IHRydWU7CisJcmV0dXJuIGZuOworfQorCisvKioKKyAqIFN1cHBvcnQgdGVzdGluZyB1c2luZyBhbiBlbGVtZW50CisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBQYXNzZWQgdGhlIGNyZWF0ZWQgZWxlbWVudCBhbmQgcmV0dXJucyBhIGJvb2xlYW4gcmVzdWx0CisgKi8KK2Z1bmN0aW9uIGFzc2VydCggZm4gKSB7CisJdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKTsKKworCXRyeSB7CisJCXJldHVybiAhIWZuKCBlbCApOworCX0gY2F0Y2ggKGUpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0gZmluYWxseSB7CisJCS8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkgZGVmYXVsdAorCQlpZiAoIGVsLnBhcmVudE5vZGUgKSB7CisJCQllbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApOworCQl9CisJCS8vIHJlbGVhc2UgbWVtb3J5IGluIElFCisJCWVsID0gbnVsbDsKKwl9Cit9CisKKy8qKgorICogQWRkcyB0aGUgc2FtZSBoYW5kbGVyIGZvciBhbGwgb2YgdGhlIHNwZWNpZmllZCBhdHRycworICogQHBhcmFtIHtTdHJpbmd9IGF0dHJzIFBpcGUtc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlcworICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBhcHBsaWVkCisgKi8KK2Z1bmN0aW9uIGFkZEhhbmRsZSggYXR0cnMsIGhhbmRsZXIgKSB7CisJdmFyIGFyciA9IGF0dHJzLnNwbGl0KCJ8IiksCisJCWkgPSBhcnIubGVuZ3RoOworCisJd2hpbGUgKCBpLS0gKSB7CisJCUV4cHIuYXR0ckhhbmRsZVsgYXJyW2ldIF0gPSBoYW5kbGVyOworCX0KK30KKworLyoqCisgKiBDaGVja3MgZG9jdW1lbnQgb3JkZXIgb2YgdHdvIHNpYmxpbmdzCisgKiBAcGFyYW0ge0VsZW1lbnR9IGEKKyAqIEBwYXJhbSB7RWxlbWVudH0gYgorICogQHJldHVybnMge051bWJlcn0gUmV0dXJucyBsZXNzIHRoYW4gMCBpZiBhIHByZWNlZGVzIGIsIGdyZWF0ZXIgdGhhbiAwIGlmIGEgZm9sbG93cyBiCisgKi8KK2Z1bmN0aW9uIHNpYmxpbmdDaGVjayggYSwgYiApIHsKKwl2YXIgY3VyID0gYiAmJiBhLAorCQlkaWZmID0gY3VyICYmIGEubm9kZVR5cGUgPT09IDEgJiYgYi5ub2RlVHlwZSA9PT0gMSAmJgorCQkJYS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7CisKKwkvLyBVc2UgSUUgc291cmNlSW5kZXggaWYgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXMKKwlpZiAoIGRpZmYgKSB7CisJCXJldHVybiBkaWZmOworCX0KKworCS8vIENoZWNrIGlmIGIgZm9sbG93cyBhCisJaWYgKCBjdXIgKSB7CisJCXdoaWxlICggKGN1ciA9IGN1ci5uZXh0U2libGluZykgKSB7CisJCQlpZiAoIGN1ciA9PT0gYiApIHsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gYSA/IDEgOiAtMTsKK30KKworLyoqCisgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzCisgKiBAcGFyYW0ge1N0cmluZ30gdHlwZQorICovCitmdW5jdGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHsKKwlyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisJCXZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOworCQlyZXR1cm4gbmFtZSA9PT0gImlucHV0IiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7CisJfTsKK30KKworLyoqCisgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnMKKyAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlCisgKi8KK2Z1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHsKKwlyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisJCXZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOworCQlyZXR1cm4gKG5hbWUgPT09ICJpbnB1dCIgfHwgbmFtZSA9PT0gImJ1dHRvbiIpICYmIGVsZW0udHlwZSA9PT0gdHlwZTsKKwl9OworfQorCisvKioKKyAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgOmVuYWJsZWQvOmRpc2FibGVkCisgKiBAcGFyYW0ge0Jvb2xlYW59IGRpc2FibGVkIHRydWUgZm9yIDpkaXNhYmxlZDsgZmFsc2UgZm9yIDplbmFibGVkCisgKi8KK2Z1bmN0aW9uIGNyZWF0ZURpc2FibGVkUHNldWRvKCBkaXNhYmxlZCApIHsKKworCS8vIEtub3duIDpkaXNhYmxlZCBmYWxzZSBwb3NpdGl2ZXM6IGZpZWxkc2V0W2Rpc2FibGVkXSA+IGxlZ2VuZDpudGgtb2YtdHlwZShuKzIpIDpjYW4tZGlzYWJsZQorCXJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKworCQkvLyBPbmx5IGNlcnRhaW4gZWxlbWVudHMgY2FuIG1hdGNoIDplbmFibGVkIG9yIDpkaXNhYmxlZAorCQkvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1lbmFibGVkCisJCS8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWRpc2FibGVkCisJCWlmICggImZvcm0iIGluIGVsZW0gKSB7CisKKwkJCS8vIENoZWNrIGZvciBpbmhlcml0ZWQgZGlzYWJsZWRuZXNzIG9uIHJlbGV2YW50IG5vbi1kaXNhYmxlZCBlbGVtZW50czoKKwkJCS8vICogbGlzdGVkIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cyBpbiBhIGRpc2FibGVkIGZpZWxkc2V0CisJCQkvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGlzdGVkCisJCQkvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1mZS1kaXNhYmxlZAorCQkJLy8gKiBvcHRpb24gZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBvcHRncm91cAorCQkJLy8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtb3B0aW9uLWRpc2FibGVkCisJCQkvLyBBbGwgc3VjaCBlbGVtZW50cyBoYXZlIGEgImZvcm0iIHByb3BlcnR5LgorCQkJaWYgKCBlbGVtLnBhcmVudE5vZGUgJiYgZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2UgKSB7CisKKwkJCQkvLyBPcHRpb24gZWxlbWVudHMgZGVmZXIgdG8gYSBwYXJlbnQgb3B0Z3JvdXAgaWYgcHJlc2VudAorCQkJCWlmICggImxhYmVsIiBpbiBlbGVtICkgeworCQkJCQlpZiAoICJsYWJlbCIgaW4gZWxlbS5wYXJlbnROb2RlICkgeworCQkJCQkJcmV0dXJuIGVsZW0ucGFyZW50Tm9kZS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7CisJCQkJCX0KKwkJCQl9CisKKwkJCQkvLyBTdXBwb3J0OiBJRSA2IC0gMTEKKwkJCQkvLyBVc2UgdGhlIGlzRGlzYWJsZWQgc2hvcnRjdXQgcHJvcGVydHkgdG8gY2hlY2sgZm9yIGRpc2FibGVkIGZpZWxkc2V0IGFuY2VzdG9ycworCQkJCXJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8CisKKwkJCQkJLy8gV2hlcmUgdGhlcmUgaXMgbm8gaXNEaXNhYmxlZCwgY2hlY2sgbWFudWFsbHkKKwkJCQkJLyoganNoaW50IC1XMDE4ICovCisJCQkJCWVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVkICYmCisJCQkJCQlkaXNhYmxlZEFuY2VzdG9yKCBlbGVtICkgPT09IGRpc2FibGVkOworCQkJfQorCisJCQlyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7CisKKwkJLy8gVHJ5IHRvIHdpbm5vdyBvdXQgZWxlbWVudHMgdGhhdCBjYW4ndCBiZSBkaXNhYmxlZCBiZWZvcmUgdHJ1c3RpbmcgdGhlIGRpc2FibGVkIHByb3BlcnR5LgorCQkvLyBTb21lIHZpY3RpbXMgZ2V0IGNhdWdodCBpbiBvdXIgbmV0IChsYWJlbCwgbGVnZW5kLCBtZW51LCB0cmFjayksIGJ1dCBpdCBzaG91bGRuJ3QKKwkJLy8gZXZlbiBleGlzdCBvbiB0aGVtLCBsZXQgYWxvbmUgaGF2ZSBhIGJvb2xlYW4gdmFsdWUuCisJCX0gZWxzZSBpZiAoICJsYWJlbCIgaW4gZWxlbSApIHsKKwkJCXJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDsKKwkJfQorCisJCS8vIFJlbWFpbmluZyBlbGVtZW50cyBhcmUgbmVpdGhlciA6ZW5hYmxlZCBub3IgOmRpc2FibGVkCisJCXJldHVybiBmYWxzZTsKKwl9OworfQorCisvKioKKyAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHMKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGZuCisgKi8KK2Z1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkgeworCXJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIGFyZ3VtZW50ICkgeworCQlhcmd1bWVudCA9ICthcmd1bWVudDsKKwkJcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHsKKwkJCXZhciBqLAorCQkJCW1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksCisJCQkJaSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7CisKKwkJCS8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlcworCQkJd2hpbGUgKCBpLS0gKSB7CisJCQkJaWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkgXSApIHsKKwkJCQkJc2VlZFtqXSA9ICEobWF0Y2hlc1tqXSA9IHNlZWRbal0pOworCQkJCX0KKwkJCX0KKwkJfSk7CisJfSk7Cit9CisKKy8qKgorICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dAorICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHQKKyAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZQorICovCitmdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHsKKwlyZXR1cm4gY29udGV4dCAmJiB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgJiYgY29udGV4dDsKK30KKworLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2UKK3N1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9OworCisvKioKKyAqIERldGVjdHMgWE1MIG5vZGVzCisgKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudAorICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZQorICovCitpc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkgeworCS8vIGRvY3VtZW50RWxlbWVudCBpcyB2ZXJpZmllZCBmb3IgY2FzZXMgd2hlcmUgaXQgZG9lc24ndCB5ZXQgZXhpc3QKKwkvLyAoc3VjaCBhcyBsb2FkaW5nIGlmcmFtZXMgaW4gSUUgLSAjNDgzMykKKwl2YXIgZG9jdW1lbnRFbGVtZW50ID0gZWxlbSAmJiAoZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0pLmRvY3VtZW50RWxlbWVudDsKKwlyZXR1cm4gZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9PSAiSFRNTCIgOiBmYWxzZTsKK307CisKKy8qKgorICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50CisgKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudAorICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudAorICovCitzZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2RlICkgeworCXZhciBoYXNDb21wYXJlLCBzdWJXaW5kb3csCisJCWRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYzsKKworCS8vIFJldHVybiBlYXJseSBpZiBkb2MgaXMgaW52YWxpZCBvciBhbHJlYWR5IHNlbGVjdGVkCisJaWYgKCBkb2MgPT09IGRvY3VtZW50IHx8IGRvYy5ub2RlVHlwZSAhPT0gOSB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCApIHsKKwkJcmV0dXJuIGRvY3VtZW50OworCX0KKworCS8vIFVwZGF0ZSBnbG9iYWwgdmFyaWFibGVzCisJZG9jdW1lbnQgPSBkb2M7CisJZG9jRWxlbSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKKwlkb2N1bWVudElzSFRNTCA9ICFpc1hNTCggZG9jdW1lbnQgKTsKKworCS8vIFN1cHBvcnQ6IElFIDktMTEsIEVkZ2UKKwkvLyBBY2Nlc3NpbmcgaWZyYW1lIGRvY3VtZW50cyBhZnRlciB1bmxvYWQgdGhyb3dzICJwZXJtaXNzaW9uIGRlbmllZCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KQorCWlmICggcHJlZmVycmVkRG9jICE9PSBkb2N1bWVudCAmJgorCQkoc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcpICYmIHN1YldpbmRvdy50b3AgIT09IHN1YldpbmRvdyApIHsKKworCQkvLyBTdXBwb3J0OiBJRSAxMSwgRWRnZQorCQlpZiAoIHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyICkgeworCQkJc3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICJ1bmxvYWQiLCB1bmxvYWRIYW5kbGVyLCBmYWxzZSApOworCisJCS8vIFN1cHBvcnQ6IElFIDkgLSAxMCBvbmx5CisJCX0gZWxzZSBpZiAoIHN1YldpbmRvdy5hdHRhY2hFdmVudCApIHsKKwkJCXN1YldpbmRvdy5hdHRhY2hFdmVudCggIm9udW5sb2FkIiwgdW5sb2FkSGFuZGxlciApOworCQl9CisJfQorCisJLyogQXR0cmlidXRlcworCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8vIFN1cHBvcnQ6IElFPDgKKwkvLyBWZXJpZnkgdGhhdCBnZXRBdHRyaWJ1dGUgcmVhbGx5IHJldHVybnMgYXR0cmlidXRlcyBhbmQgbm90IHByb3BlcnRpZXMKKwkvLyAoZXhjZXB0aW5nIElFOCBib29sZWFucykKKwlzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkgeworCQllbC5jbGFzc05hbWUgPSAiaSI7CisJCXJldHVybiAhZWwuZ2V0QXR0cmlidXRlKCJjbGFzc05hbWUiKTsKKwl9KTsKKworCS8qIGdldEVsZW1lbnQocylCeSoKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKwkvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpIHJldHVybnMgb25seSBlbGVtZW50cworCXN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkgeworCQllbC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIikgKTsKKwkJcmV0dXJuICFlbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aDsKKwl9KTsKKworCS8vIFN1cHBvcnQ6IElFPDkKKwlzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKTsKKworCS8vIFN1cHBvcnQ6IElFPDEwCisJLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0dXJucyBlbGVtZW50cyBieSBuYW1lCisJLy8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsCisJLy8gc28gdXNlIGEgcm91bmRhYm91dCBnZXRFbGVtZW50c0J5TmFtZSB0ZXN0CisJc3VwcG9ydC5nZXRCeUlkID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHsKKwkJZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pZCA9IGV4cGFuZG87CisJCXJldHVybiAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3RoOworCX0pOworCisJLy8gSUQgZmlsdGVyIGFuZCBmaW5kCisJaWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7CisJCUV4cHIuZmlsdGVyWyJJRCJdID0gZnVuY3Rpb24oIGlkICkgeworCQkJdmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7CisJCQlyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisJCQkJcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpID09PSBhdHRySWQ7CisJCQl9OworCQl9OworCQlFeHByLmZpbmRbIklEIl0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7CisJCQlpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSAidW5kZWZpbmVkIiAmJiBkb2N1bWVudElzSFRNTCApIHsKKwkJCQl2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7CisJCQkJcmV0dXJuIGVsZW0gPyBbIGVsZW0gXSA6IFtdOworCQkJfQorCQl9OworCX0gZWxzZSB7CisJCUV4cHIuZmlsdGVyWyJJRCJdID0gIGZ1bmN0aW9uKCBpZCApIHsKKwkJCXZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApOworCQkJcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworCQkJCXZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gInVuZGVmaW5lZCIgJiYKKwkJCQkJZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpOworCQkJCXJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDsKKwkJCX07CisJCX07CisKKwkJLy8gU3VwcG9ydDogSUUgNiAtIDcgb25seQorCQkvLyBnZXRFbGVtZW50QnlJZCBpcyBub3QgcmVsaWFibGUgYXMgYSBmaW5kIHNob3J0Y3V0CisJCUV4cHIuZmluZFsiSUQiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHsKKwkJCWlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09ICJ1bmRlZmluZWQiICYmIGRvY3VtZW50SXNIVE1MICkgeworCQkJCXZhciBub2RlLCBpLCBlbGVtcywKKwkJCQkJZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7CisKKwkJCQlpZiAoIGVsZW0gKSB7CisKKwkJCQkJLy8gVmVyaWZ5IHRoZSBpZCBhdHRyaWJ1dGUKKwkJCQkJbm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTsKKwkJCQkJaWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkgeworCQkJCQkJcmV0dXJuIFsgZWxlbSBdOworCQkJCQl9CisKKwkJCQkJLy8gRmFsbCBiYWNrIG9uIGdldEVsZW1lbnRzQnlOYW1lCisJCQkJCWVsZW1zID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggaWQgKTsKKwkJCQkJaSA9IDA7CisJCQkJCXdoaWxlICggKGVsZW0gPSBlbGVtc1tpKytdKSApIHsKKwkJCQkJCW5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7CisJCQkJCQlpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7CisJCQkJCQkJcmV0dXJuIFsgZWxlbSBdOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCisJCQkJcmV0dXJuIFtdOworCQkJfQorCQl9OworCX0KKworCS8vIFRhZworCUV4cHIuZmluZFsiVEFHIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID8KKwkJZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHsKKwkJCWlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmluZWQiICkgeworCQkJCXJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTsKKworCQkJLy8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdFQlROCisJCQl9IGVsc2UgaWYgKCBzdXBwb3J0LnFzYSApIHsKKwkJCQlyZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTsKKwkJCX0KKwkJfSA6CisKKwkJZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHsKKwkJCXZhciBlbGVtLAorCQkJCXRtcCA9IFtdLAorCQkJCWkgPSAwLAorCQkJCS8vIEJ5IGhhcHB5IGNvaW5jaWRlbmNlLCBhIChicm9rZW4pIGdFQlROIGFwcGVhcnMgb24gRG9jdW1lbnRGcmFnbWVudCBub2RlcyB0b28KKwkJCQlyZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7CisKKwkJCS8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHMKKwkJCWlmICggdGFnID09PSAiKiIgKSB7CisJCQkJd2hpbGUgKCAoZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7CisJCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKwkJCQkJCXRtcC5wdXNoKCBlbGVtICk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlyZXR1cm4gdG1wOworCQkJfQorCQkJcmV0dXJuIHJlc3VsdHM7CisJCX07CisKKwkvLyBDbGFzcworCUV4cHIuZmluZFsiQ0xBU1MiXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkgeworCQlpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09ICJ1bmRlZmluZWQiICYmIGRvY3VtZW50SXNIVE1MICkgeworCQkJcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggY2xhc3NOYW1lICk7CisJCX0KKwl9OworCisJLyogUVNBL21hdGNoZXNTZWxlY3RvcgorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8vIFFTQSBhbmQgbWF0Y2hlc1NlbGVjdG9yIHN1cHBvcnQKKworCS8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpCisJcmJ1Z2d5TWF0Y2hlcyA9IFtdOworCisJLy8gcVNhKDpmb2N1cykgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSkKKwkvLyBXZSBhbGxvdyB0aGlzIGJlY2F1c2Ugb2YgYSBidWcgaW4gSUU4LzkgdGhhdCB0aHJvd3MgYW4gZXJyb3IKKwkvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lCisJLy8gU28sIHdlIGFsbG93IDpmb2N1cyB0byBwYXNzIHRocm91Z2ggUVNBIGFsbCB0aGUgdGltZSB0byBhdm9pZCB0aGUgSUUgZXJyb3IKKwkvLyBTZWUgaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzc4CisJcmJ1Z2d5UVNBID0gW107CisKKwlpZiAoIChzdXBwb3J0LnFzYSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCApKSApIHsKKwkJLy8gQnVpbGQgUVNBIHJlZ2V4CisJCS8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmkKKwkJYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHsKKwkJCS8vIFNlbGVjdCBpcyBzZXQgdG8gZW1wdHkgc3RyaW5nIG9uIHB1cnBvc2UKKwkJCS8vIFRoaXMgaXMgdG8gdGVzdCBJRSdzIHRyZWF0bWVudCBvZiBub3QgZXhwbGljaXRseQorCQkJLy8gc2V0dGluZyBhIGJvb2xlYW4gY29udGVudCBhdHRyaWJ1dGUsCisJCQkvLyBzaW5jZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3VnaAorCQkJLy8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMzU5CisJCQlkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlubmVySFRNTCA9ICI8YSBpZD0nIiArIGV4cGFuZG8gKyAiJz48L2E+IiArCisJCQkJIjxzZWxlY3QgaWQ9JyIgKyBleHBhbmRvICsgIi1cclxcJyBtc2FsbG93Y2FwdHVyZT0nJz4iICsKKwkJCQkiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iOworCisJCQkvLyBTdXBwb3J0OiBJRTgsIE9wZXJhIDExLTEyLjE2CisJCQkvLyBOb3RoaW5nIHNob3VsZCBiZSBzZWxlY3RlZCB3aGVuIGVtcHR5IHN0cmluZ3MgZm9sbG93IF49IG9yICQ9IG9yICo9CisJCQkvLyBUaGUgdGVzdCBhdHRyaWJ1dGUgbXVzdCBiZSB1bmtub3duIGluIE9wZXJhIGJ1dCAic2FmZSIgZm9yIFdpblJUCisJCQkvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoNDY1Mzg4LmFzcHgjYXR0cmlidXRlX3NlY3Rpb24KKwkJCWlmICggZWwucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGggKSB7CisJCQkJcmJ1Z2d5UVNBLnB1c2goICJbKl4kXT0iICsgd2hpdGVzcGFjZSArICIqKD86Jyd8XCJcIikiICk7CisJCQl9CisKKwkJCS8vIFN1cHBvcnQ6IElFOAorCQkJLy8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCAidmFsdWUiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHkKKwkJCWlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGggKSB7CisJCQkJcmJ1Z2d5UVNBLnB1c2goICJcXFsiICsgd2hpdGVzcGFjZSArICIqKD86dmFsdWV8IiArIGJvb2xlYW5zICsgIikiICk7CisJCQl9CisKKwkJCS8vIFN1cHBvcnQ6IENocm9tZTwyOSwgQW5kcm9pZDw0LjQsIFNhZmFyaTw3LjArLCBpT1M8Ny4wKywgUGhhbnRvbUpTPDEuOS44KworCQkJaWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggIltpZH49IiArIGV4cGFuZG8gKyAiLV0iICkubGVuZ3RoICkgeworCQkJCXJidWdneVFTQS5wdXNoKCJ+PSIpOworCQkJfQorCisJCQkvLyBXZWJraXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50cworCQkJLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWQKKwkJCS8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzCisJCQlpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aCApIHsKKwkJCQlyYnVnZ3lRU0EucHVzaCgiOmNoZWNrZWQiKTsKKwkJCX0KKworCQkJLy8gU3VwcG9ydDogU2FmYXJpIDgrLCBpT1MgOCsKKwkJCS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTEKKwkJCS8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmxpbmctY29tYmluYXRvciBzZWxlY3RvcmAgZmFpbHMKKwkJCWlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoICJhIyIgKyBleHBhbmRvICsgIisqIiApLmxlbmd0aCApIHsKKwkJCQlyYnVnZ3lRU0EucHVzaCgiLiMuK1srfl0iKTsKKwkJCX0KKwkJfSk7CisKKwkJYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHsKKwkJCWVsLmlubmVySFRNTCA9ICI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPiIgKworCQkJCSI8c2VsZWN0IGRpc2FibGVkPSdkaXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+IjsKKworCQkJLy8gU3VwcG9ydDogV2luZG93cyA4IE5hdGl2ZSBBcHBzCisJCQkvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnQKKwkJCXZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CisJCQlpbnB1dC5zZXRBdHRyaWJ1dGUoICJ0eXBlIiwgImhpZGRlbiIgKTsKKwkJCWVsLmFwcGVuZENoaWxkKCBpbnB1dCApLnNldEF0dHJpYnV0ZSggIm5hbWUiLCAiRCIgKTsKKworCQkJLy8gU3VwcG9ydDogSUU4CisJCQkvLyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGUKKwkJCWlmICggZWwucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGggKSB7CisJCQkJcmJ1Z2d5UVNBLnB1c2goICJuYW1lIiArIHdoaXRlc3BhY2UgKyAiKlsqXiR8IX5dPz0iICk7CisJCQl9CisKKwkJCS8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpCisJCQkvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0cworCQkJaWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCAhPT0gMiApIHsKKwkJCQlyYnVnZ3lRU0EucHVzaCggIjplbmFibGVkIiwgIjpkaXNhYmxlZCIgKTsKKwkJCX0KKworCQkJLy8gU3VwcG9ydDogSUU5LTExKworCQkJLy8gSUUncyA6ZGlzYWJsZWQgc2VsZWN0b3IgZG9lcyBub3QgcGljayB1cCB0aGUgY2hpbGRyZW4gb2YgZGlzYWJsZWQgZmllbGRzZXRzCisJCQlkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmRpc2FibGVkID0gdHJ1ZTsKKwkJCWlmICggZWwucXVlcnlTZWxlY3RvckFsbCgiOmRpc2FibGVkIikubGVuZ3RoICE9PSAyICkgeworCQkJCXJidWdneVFTQS5wdXNoKCAiOmVuYWJsZWQiLCAiOmRpc2FibGVkIiApOworCQkJfQorCisJCQkvLyBPcGVyYSAxMC0xMSBkb2VzIG5vdCB0aHJvdyBvbiBwb3N0LWNvbW1hIGludmFsaWQgcHNldWRvcworCQkJZWwucXVlcnlTZWxlY3RvckFsbCgiKiw6eCIpOworCQkJcmJ1Z2d5UVNBLnB1c2goIiwuKjoiKTsKKwkJfSk7CisJfQorCisJaWYgKCAoc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgPSBybmF0aXZlLnRlc3QoIChtYXRjaGVzID0gZG9jRWxlbS5tYXRjaGVzIHx8CisJCWRvY0VsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8CisJCWRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8CisJCWRvY0VsZW0ub01hdGNoZXNTZWxlY3RvciB8fAorCQlkb2NFbGVtLm1zTWF0Y2hlc1NlbGVjdG9yKSApKSApIHsKKworCQlhc3NlcnQoZnVuY3Rpb24oIGVsICkgeworCQkJLy8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yCisJCQkvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KQorCQkJc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNoZXMuY2FsbCggZWwsICIqIiApOworCisJCQkvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uCisJCQkvLyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkCisJCQltYXRjaGVzLmNhbGwoIGVsLCAiW3MhPScnXTp4IiApOworCQkJcmJ1Z2d5TWF0Y2hlcy5wdXNoKCAiIT0iLCBwc2V1ZG9zICk7CisJCX0pOworCX0KKworCXJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oInwiKSApOworCXJidWdneU1hdGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oInwiKSApOworCisJLyogQ29udGFpbnMKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJaGFzQ29tcGFyZSA9IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApOworCisJLy8gRWxlbWVudCBjb250YWlucyBhbm90aGVyCisJLy8gUHVycG9zZWZ1bGx5IHNlbGYtZXhjbHVzaXZlCisJLy8gQXMgaW4sIGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGYKKwljb250YWlucyA9IGhhc0NvbXBhcmUgfHwgcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbnRhaW5zICkgPworCQlmdW5jdGlvbiggYSwgYiApIHsKKwkJCXZhciBhZG93biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsCisJCQkJYnVwID0gYiAmJiBiLnBhcmVudE5vZGU7CisJCQlyZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAxICYmICgKKwkJCQlhZG93bi5jb250YWlucyA/CisJCQkJCWFkb3duLmNvbnRhaW5zKCBidXAgKSA6CisJCQkJCWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNgorCQkJKSk7CisJCX0gOgorCQlmdW5jdGlvbiggYSwgYiApIHsKKwkJCWlmICggYiApIHsKKwkJCQl3aGlsZSAoIChiID0gYi5wYXJlbnROb2RlKSApIHsKKwkJCQkJaWYgKCBiID09PSBhICkgeworCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7CisJCX07CisKKwkvKiBTb3J0aW5nCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJLy8gRG9jdW1lbnQgb3JkZXIgc29ydGluZworCXNvcnRPcmRlciA9IGhhc0NvbXBhcmUgPworCWZ1bmN0aW9uKCBhLCBiICkgeworCisJCS8vIEZsYWcgZm9yIGR1cGxpY2F0ZSByZW1vdmFsCisJCWlmICggYSA9PT0gYiApIHsKKwkJCWhhc0R1cGxpY2F0ZSA9IHRydWU7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8vIFNvcnQgb24gbWV0aG9kIGV4aXN0ZW5jZSBpZiBvbmx5IG9uZSBpbnB1dCBoYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb24KKwkJdmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uOworCQlpZiAoIGNvbXBhcmUgKSB7CisJCQlyZXR1cm4gY29tcGFyZTsKKwkJfQorCisJCS8vIENhbGN1bGF0ZSBwb3NpdGlvbiBpZiBib3RoIGlucHV0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZG9jdW1lbnQKKwkJY29tcGFyZSA9ICggYS5vd25lckRvY3VtZW50IHx8IGEgKSA9PT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID8KKwkJCWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGIgKSA6CisKKwkJCS8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRpc2Nvbm5lY3RlZAorCQkJMTsKKworCQkvLyBEaXNjb25uZWN0ZWQgbm9kZXMKKwkJaWYgKCBjb21wYXJlICYgMSB8fAorCQkJKCFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUpICkgeworCisJCQkvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnQKKwkJCWlmICggYSA9PT0gZG9jdW1lbnQgfHwgYS5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMocHJlZmVycmVkRG9jLCBhKSApIHsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQlpZiAoIGIgPT09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYikgKSB7CisJCQkJcmV0dXJuIDE7CisJCQl9CisKKwkJCS8vIE1haW50YWluIG9yaWdpbmFsIG9yZGVyCisJCQlyZXR1cm4gc29ydElucHV0ID8KKwkJCQkoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6CisJCQkJMDsKKwkJfQorCisJCXJldHVybiBjb21wYXJlICYgNCA/IC0xIDogMTsKKwl9IDoKKwlmdW5jdGlvbiggYSwgYiApIHsKKwkJLy8gRXhpdCBlYXJseSBpZiB0aGUgbm9kZXMgYXJlIGlkZW50aWNhbAorCQlpZiAoIGEgPT09IGIgKSB7CisJCQloYXNEdXBsaWNhdGUgPSB0cnVlOworCQkJcmV0dXJuIDA7CisJCX0KKworCQl2YXIgY3VyLAorCQkJaSA9IDAsCisJCQlhdXAgPSBhLnBhcmVudE5vZGUsCisJCQlidXAgPSBiLnBhcmVudE5vZGUsCisJCQlhcCA9IFsgYSBdLAorCQkJYnAgPSBbIGIgXTsKKworCQkvLyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBlaXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5lY3RlZAorCQlpZiAoICFhdXAgfHwgIWJ1cCApIHsKKwkJCXJldHVybiBhID09PSBkb2N1bWVudCA/IC0xIDoKKwkJCQliID09PSBkb2N1bWVudCA/IDEgOgorCQkJCWF1cCA/IC0xIDoKKwkJCQlidXAgPyAxIDoKKwkJCQlzb3J0SW5wdXQgPworCQkJCSggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDoKKwkJCQkwOworCisJCS8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MsIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrCisJCX0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkgeworCQkJcmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApOworCQl9CisKKwkJLy8gT3RoZXJ3aXNlIHdlIG5lZWQgZnVsbCBsaXN0cyBvZiB0aGVpciBhbmNlc3RvcnMgZm9yIGNvbXBhcmlzb24KKwkJY3VyID0gYTsKKwkJd2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkgeworCQkJYXAudW5zaGlmdCggY3VyICk7CisJCX0KKwkJY3VyID0gYjsKKwkJd2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkgeworCQkJYnAudW5zaGlmdCggY3VyICk7CisJCX0KKworCQkvLyBXYWxrIGRvd24gdGhlIHRyZWUgbG9va2luZyBmb3IgYSBkaXNjcmVwYW5jeQorCQl3aGlsZSAoIGFwW2ldID09PSBicFtpXSApIHsKKwkJCWkrKzsKKwkJfQorCisJCXJldHVybiBpID8KKwkJCS8vIERvIGEgc2libGluZyBjaGVjayBpZiB0aGUgbm9kZXMgaGF2ZSBhIGNvbW1vbiBhbmNlc3RvcgorCQkJc2libGluZ0NoZWNrKCBhcFtpXSwgYnBbaV0gKSA6CisKKwkJCS8vIE90aGVyd2lzZSBub2RlcyBpbiBvdXIgZG9jdW1lbnQgc29ydCBmaXJzdAorCQkJYXBbaV0gPT09IHByZWZlcnJlZERvYyA/IC0xIDoKKwkJCWJwW2ldID09PSBwcmVmZXJyZWREb2MgPyAxIDoKKwkJCTA7CisJfTsKKworCXJldHVybiBkb2N1bWVudDsKK307CisKK1NpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1lbnRzICkgeworCXJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1lbnRzICk7Cit9OworCitTaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7CisJLy8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkCisJaWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkgeworCQlzZXREb2N1bWVudCggZWxlbSApOworCX0KKworCS8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJpYnV0ZSBzZWxlY3RvcnMgYXJlIHF1b3RlZAorCWV4cHIgPSBleHByLnJlcGxhY2UoIHJhdHRyaWJ1dGVRdW90ZXMsICI9JyQxJ10iICk7CisKKwlpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmCisJCSFjb21waWxlckNhY2hlWyBleHByICsgIiAiIF0gJiYKKwkJKCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJgorCQkoICFyYnVnZ3lRU0EgICAgIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7CisKKwkJdHJ5IHsKKwkJCXZhciByZXQgPSBtYXRjaGVzLmNhbGwoIGVsZW0sIGV4cHIgKTsKKworCQkJLy8gSUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBub2RlcworCQkJaWYgKCByZXQgfHwgc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCB8fAorCQkJCQkvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudAorCQkJCQkvLyBmcmFnbWVudCBpbiBJRSA5CisJCQkJCWVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfSBjYXRjaCAoZSkge30KKwl9CisKKwlyZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwOworfTsKKworU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7CisJLy8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkCisJaWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT09IGRvY3VtZW50ICkgeworCQlzZXREb2N1bWVudCggY29udGV4dCApOworCX0KKwlyZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTsKK307CisKK1NpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CisJLy8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkCisJaWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkgeworCQlzZXREb2N1bWVudCggZWxlbSApOworCX0KKworCXZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sCisJCS8vIERvbid0IGdldCBmb29sZWQgYnkgT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChqUXVlcnkgIzEzODA3KQorCQl2YWwgPSBmbiAmJiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNlKCkgKSA/CisJCQlmbiggZWxlbSwgbmFtZSwgIWRvY3VtZW50SXNIVE1MICkgOgorCQkJdW5kZWZpbmVkOworCisJcmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkID8KKwkJdmFsIDoKKwkJc3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/CisJCQllbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApIDoKKwkJCSh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpICYmIHZhbC5zcGVjaWZpZWQgPworCQkJCXZhbC52YWx1ZSA6CisJCQkJbnVsbDsKK307CisKK1NpenpsZS5lc2NhcGUgPSBmdW5jdGlvbiggc2VsICkgeworCXJldHVybiAoc2VsICsgIiIpLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTsKK307CisKK1NpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7CisJdGhyb3cgbmV3IEVycm9yKCAiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIiArIG1zZyApOworfTsKKworLyoqCisgKiBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBsaWNhdGVzCisgKiBAcGFyYW0ge0FycmF5TGlrZX0gcmVzdWx0cworICovCitTaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkgeworCXZhciBlbGVtLAorCQlkdXBsaWNhdGVzID0gW10sCisJCWogPSAwLAorCQlpID0gMDsKKworCS8vIFVubGVzcyB3ZSAqa25vdyogd2UgY2FuIGRldGVjdCBkdXBsaWNhdGVzLCBhc3N1bWUgdGhlaXIgcHJlc2VuY2UKKwloYXNEdXBsaWNhdGUgPSAhc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzOworCXNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApOworCXJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7CisKKwlpZiAoIGhhc0R1cGxpY2F0ZSApIHsKKwkJd2hpbGUgKCAoZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7CisJCQlpZiAoIGVsZW0gPT09IHJlc3VsdHNbIGkgXSApIHsKKwkJCQlqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7CisJCQl9CisJCX0KKwkJd2hpbGUgKCBqLS0gKSB7CisJCQlyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7CisJCX0KKwl9CisKKwkvLyBDbGVhciBpbnB1dCBhZnRlciBzb3J0aW5nIHRvIHJlbGVhc2Ugb2JqZWN0cworCS8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9wdWxsLzIyNQorCXNvcnRJbnB1dCA9IG51bGw7CisKKwlyZXR1cm4gcmVzdWx0czsKK307CisKKy8qKgorICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXMKKyAqIEBwYXJhbSB7QXJyYXl8RWxlbWVudH0gZWxlbQorICovCitnZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlvbiggZWxlbSApIHsKKwl2YXIgbm9kZSwKKwkJcmV0ID0gIiIsCisJCWkgPSAwLAorCQlub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7CisKKwlpZiAoICFub2RlVHlwZSApIHsKKwkJLy8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXkKKwkJd2hpbGUgKCAobm9kZSA9IGVsZW1baSsrXSkgKSB7CisJCQkvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2RlcworCQkJcmV0ICs9IGdldFRleHQoIG5vZGUgKTsKKwkJfQorCX0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHsKKwkJLy8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50cworCQkvLyBpbm5lclRleHQgdXNhZ2UgcmVtb3ZlZCBmb3IgY29uc2lzdGVuY3kgb2YgbmV3IGxpbmVzIChqUXVlcnkgIzExMTUzKQorCQlpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSAic3RyaW5nIiApIHsKKwkJCXJldHVybiBlbGVtLnRleHRDb250ZW50OworCQl9IGVsc2UgeworCQkJLy8gVHJhdmVyc2UgaXRzIGNoaWxkcmVuCisJCQlmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHsKKwkJCQlyZXQgKz0gZ2V0VGV4dCggZWxlbSApOworCQkJfQorCQl9CisJfSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7CisJCXJldHVybiBlbGVtLm5vZGVWYWx1ZTsKKwl9CisJLy8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzCisKKwlyZXR1cm4gcmV0OworfTsKKworRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7CisKKwkvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXIKKwljYWNoZUxlbmd0aDogNTAsCisKKwljcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbiwKKworCW1hdGNoOiBtYXRjaEV4cHIsCisKKwlhdHRySGFuZGxlOiB7fSwKKworCWZpbmQ6IHt9LAorCisJcmVsYXRpdmU6IHsKKwkJIj4iOiB7IGRpcjogInBhcmVudE5vZGUiLCBmaXJzdDogdHJ1ZSB9LAorCQkiICI6IHsgZGlyOiAicGFyZW50Tm9kZSIgfSwKKwkJIisiOiB7IGRpcjogInByZXZpb3VzU2libGluZyIsIGZpcnN0OiB0cnVlIH0sCisJCSJ+IjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciIH0KKwl9LAorCisJcHJlRmlsdGVyOiB7CisJCSJBVFRSIjogZnVuY3Rpb24oIG1hdGNoICkgeworCQkJbWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApOworCisJCQkvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZAorCQkJbWF0Y2hbM10gPSAoIG1hdGNoWzNdIHx8IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8ICIiICkucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKKworCQkJaWYgKCBtYXRjaFsyXSA9PT0gIn49IiApIHsKKwkJCQltYXRjaFszXSA9ICIgIiArIG1hdGNoWzNdICsgIiAiOworCQkJfQorCisJCQlyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTsKKwkJfSwKKworCQkiQ0hJTEQiOiBmdW5jdGlvbiggbWF0Y2ggKSB7CisJCQkvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByWyJDSElMRCJdCisJCQkJMSB0eXBlIChvbmx5fG50aHwuLi4pCisJCQkJMiB3aGF0IChjaGlsZHxvZi10eXBlKQorCQkJCTMgYXJndW1lbnQgKGV2ZW58b2RkfFxkKnxcZCpuKFsrLV1cZCspP3wuLi4pCisJCQkJNCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cZCpufCkKKwkJCQk1IHNpZ24gb2YgeG4tY29tcG9uZW50CisJCQkJNiB4IG9mIHhuLWNvbXBvbmVudAorCQkJCTcgc2lnbiBvZiB5LWNvbXBvbmVudAorCQkJCTggeSBvZiB5LWNvbXBvbmVudAorCQkJKi8KKwkJCW1hdGNoWzFdID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTsKKworCQkJaWYgKCBtYXRjaFsxXS5zbGljZSggMCwgMyApID09PSAibnRoIiApIHsKKwkJCQkvLyBudGgtKiByZXF1aXJlcyBhcmd1bWVudAorCQkJCWlmICggIW1hdGNoWzNdICkgeworCQkJCQlTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7CisJCQkJfQorCisJCQkJLy8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxECisJCQkJLy8gcmVtZW1iZXIgdGhhdCBmYWxzZS90cnVlIGNhc3QgcmVzcGVjdGl2ZWx5IHRvIDAvMQorCQkJCW1hdGNoWzRdID0gKyggbWF0Y2hbNF0gPyBtYXRjaFs1XSArIChtYXRjaFs2XSB8fCAxKSA6IDIgKiAoIG1hdGNoWzNdID09PSAiZXZlbiIgfHwgbWF0Y2hbM10gPT09ICJvZGQiICkgKTsKKwkJCQltYXRjaFs1XSA9ICsoICggbWF0Y2hbN10gKyBtYXRjaFs4XSApIHx8IG1hdGNoWzNdID09PSAib2RkIiApOworCisJCQkvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHMKKwkJCX0gZWxzZSBpZiAoIG1hdGNoWzNdICkgeworCQkJCVNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTsKKwkJCX0KKworCQkJcmV0dXJuIG1hdGNoOworCQl9LAorCisJCSJQU0VVRE8iOiBmdW5jdGlvbiggbWF0Y2ggKSB7CisJCQl2YXIgZXhjZXNzLAorCQkJCXVucXVvdGVkID0gIW1hdGNoWzZdICYmIG1hdGNoWzJdOworCisJCQlpZiAoIG1hdGNoRXhwclsiQ0hJTEQiXS50ZXN0KCBtYXRjaFswXSApICkgeworCQkJCXJldHVybiBudWxsOworCQkJfQorCisJCQkvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pcworCQkJaWYgKCBtYXRjaFszXSApIHsKKwkJCQltYXRjaFsyXSA9IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8ICIiOworCisJCQkvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50cworCQkJfSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmCisJCQkJLy8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSkKKwkJCQkoZXhjZXNzID0gdG9rZW5pemUoIHVucXVvdGVkLCB0cnVlICkpICYmCisJCQkJLy8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzCisJCQkJKGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoICIpIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGgpICkgeworCisJCQkJLy8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXgKKwkJCQltYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKCAwLCBleGNlc3MgKTsKKwkJCQltYXRjaFsyXSA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTsKKwkJCX0KKworCQkJLy8gUmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQpCisJCQlyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMgKTsKKwkJfQorCX0sCisKKwlmaWx0ZXI6IHsKKworCQkiVEFHIjogZnVuY3Rpb24oIG5vZGVOYW1lU2VsZWN0b3IgKSB7CisJCQl2YXIgbm9kZU5hbWUgPSBub2RlTmFtZVNlbGVjdG9yLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTsKKwkJCXJldHVybiBub2RlTmFtZVNlbGVjdG9yID09PSAiKiIgPworCQkJCWZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSA6CisJCQkJZnVuY3Rpb24oIGVsZW0gKSB7CisJCQkJCXJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbm9kZU5hbWU7CisJCQkJfTsKKwkJfSwKKworCQkiQ0xBU1MiOiBmdW5jdGlvbiggY2xhc3NOYW1lICkgeworCQkJdmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBjbGFzc05hbWUgKyAiICIgXTsKKworCQkJcmV0dXJuIHBhdHRlcm4gfHwKKwkJCQkocGF0dGVybiA9IG5ldyBSZWdFeHAoICIoXnwiICsgd2hpdGVzcGFjZSArICIpIiArIGNsYXNzTmFtZSArICIoIiArIHdoaXRlc3BhY2UgKyAifCQpIiApKSAmJgorCQkJCWNsYXNzQ2FjaGUoIGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7CisJCQkJCXJldHVybiBwYXR0ZXJuLnRlc3QoIHR5cGVvZiBlbGVtLmNsYXNzTmFtZSA9PT0gInN0cmluZyIgJiYgZWxlbS5jbGFzc05hbWUgfHwgdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSAidW5kZWZpbmVkIiAmJiBlbGVtLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSB8fCAiIiApOworCQkJCX0pOworCQl9LAorCisJCSJBVFRSIjogZnVuY3Rpb24oIG5hbWUsIG9wZXJhdG9yLCBjaGVjayApIHsKKwkJCXJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCQl2YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIoIGVsZW0sIG5hbWUgKTsKKworCQkJCWlmICggcmVzdWx0ID09IG51bGwgKSB7CisJCQkJCXJldHVybiBvcGVyYXRvciA9PT0gIiE9IjsKKwkJCQl9CisJCQkJaWYgKCAhb3BlcmF0b3IgKSB7CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKworCQkJCXJlc3VsdCArPSAiIjsKKworCQkJCXJldHVybiBvcGVyYXRvciA9PT0gIj0iID8gcmVzdWx0ID09PSBjaGVjayA6CisJCQkJCW9wZXJhdG9yID09PSAiIT0iID8gcmVzdWx0ICE9PSBjaGVjayA6CisJCQkJCW9wZXJhdG9yID09PSAiXj0iID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOgorCQkJCQlvcGVyYXRvciA9PT0gIio9IiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOgorCQkJCQlvcGVyYXRvciA9PT0gIiQ9IiA/IGNoZWNrICYmIHJlc3VsdC5zbGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjayA6CisJCQkJCW9wZXJhdG9yID09PSAifj0iID8gKCAiICIgKyByZXN1bHQucmVwbGFjZSggcndoaXRlc3BhY2UsICIgIiApICsgIiAiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDoKKwkJCQkJb3BlcmF0b3IgPT09ICJ8PSIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArICItIiA6CisJCQkJCWZhbHNlOworCQkJfTsKKwkJfSwKKworCQkiQ0hJTEQiOiBmdW5jdGlvbiggdHlwZSwgd2hhdCwgYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkgeworCQkJdmFyIHNpbXBsZSA9IHR5cGUuc2xpY2UoIDAsIDMgKSAhPT0gIm50aCIsCisJCQkJZm9yd2FyZCA9IHR5cGUuc2xpY2UoIC00ICkgIT09ICJsYXN0IiwKKwkJCQlvZlR5cGUgPSB3aGF0ID09PSAib2YtdHlwZSI7CisKKwkJCXJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID8KKworCQkJCS8vIFNob3J0Y3V0IGZvciA6bnRoLSoobikKKwkJCQlmdW5jdGlvbiggZWxlbSApIHsKKwkJCQkJcmV0dXJuICEhZWxlbS5wYXJlbnROb2RlOworCQkJCX0gOgorCisJCQkJZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKwkJCQkJdmFyIGNhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSwgbm9kZSwgbm9kZUluZGV4LCBzdGFydCwKKwkJCQkJCWRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/ICJuZXh0U2libGluZyIgOiAicHJldmlvdXNTaWJsaW5nIiwKKwkJCQkJCXBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSwKKwkJCQkJCW5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLAorCQkJCQkJdXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsCisJCQkJCQlkaWZmID0gZmFsc2U7CisKKwkJCQkJaWYgKCBwYXJlbnQgKSB7CisKKwkJCQkJCS8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSkKKwkJCQkJCWlmICggc2ltcGxlICkgeworCQkJCQkJCXdoaWxlICggZGlyICkgeworCQkJCQkJCQlub2RlID0gZWxlbTsKKwkJCQkJCQkJd2hpbGUgKCAobm9kZSA9IG5vZGVbIGRpciBdKSApIHsKKwkJCQkJCQkJCWlmICggb2ZUeXBlID8KKwkJCQkJCQkJCQlub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOgorCQkJCQkJCQkJCW5vZGUubm9kZVR5cGUgPT09IDEgKSB7CisKKwkJCQkJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQkJLy8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pCisJCQkJCQkJCXN0YXJ0ID0gZGlyID0gdHlwZSA9PT0gIm9ubHkiICYmICFzdGFydCAmJiAibmV4dFNpYmxpbmciOworCQkJCQkJCX0KKwkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCX0KKworCQkJCQkJc3RhcnQgPSBbIGZvcndhcmQgPyBwYXJlbnQuZmlyc3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGQgXTsKKworCQkJCQkJLy8gbm9uLXhtbCA6bnRoLWNoaWxkKC4uLikgc3RvcmVzIGNhY2hlIGRhdGEgb24gYHBhcmVudGAKKwkJCQkJCWlmICggZm9yd2FyZCAmJiB1c2VDYWNoZSApIHsKKworCQkJCQkJCS8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleAorCisJCQkJCQkJLy8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheQorCQkJCQkJCW5vZGUgPSBwYXJlbnQ7CisJCQkJCQkJb3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pOworCisJCQkJCQkJLy8gU3VwcG9ydDogSUUgPDkgb25seQorCQkJCQkJCS8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KQorCQkJCQkJCXVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8CisJCQkJCQkJCShvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7CisKKwkJCQkJCQljYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107CisJCQkJCQkJbm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdOworCQkJCQkJCWRpZmYgPSBub2RlSW5kZXggJiYgY2FjaGVbIDIgXTsKKwkJCQkJCQlub2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTsKKworCQkJCQkJCXdoaWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8CisKKwkJCQkJCQkJLy8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnQKKwkJCQkJCQkJKGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7CisKKwkJCQkJCQkJLy8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWsKKwkJCQkJCQkJaWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkgeworCQkJCQkJCQkJdW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07CisJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGUKKwkJCQkJCQlpZiAoIHVzZUNhY2hlICkgeworCQkJCQkJCQkvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5CisJCQkJCQkJCW5vZGUgPSBlbGVtOworCQkJCQkJCQlvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7CisKKwkJCQkJCQkJLy8gU3VwcG9ydDogSUUgPDkgb25seQorCQkJCQkJCQkvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSkKKwkJCQkJCQkJdW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHwKKwkJCQkJCQkJCShvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7CisKKwkJCQkJCQkJY2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdOworCQkJCQkJCQlub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07CisJCQkJCQkJCWRpZmYgPSBub2RlSW5kZXg7CisJCQkJCQkJfQorCisJCQkJCQkJLy8geG1sIDpudGgtY2hpbGQoLi4uKQorCQkJCQkJCS8vIG9yIDpudGgtbGFzdC1jaGlsZCguLi4pIG9yIDpudGgoLWxhc3QpPy1vZi10eXBlKC4uLikKKwkJCQkJCQlpZiAoIGRpZmYgPT09IGZhbHNlICkgeworCQkJCQkJCQkvLyBVc2UgdGhlIHNhbWUgbG9vcCBhcyBhYm92ZSB0byBzZWVrIGBlbGVtYCBmcm9tIHRoZSBzdGFydAorCQkJCQkJCQl3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fAorCQkJCQkJCQkJKGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7CisKKwkJCQkJCQkJCWlmICggKCBvZlR5cGUgPworCQkJCQkJCQkJCW5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6CisJCQkJCQkJCQkJbm9kZS5ub2RlVHlwZSA9PT0gMSApICYmCisJCQkJCQkJCQkJKytkaWZmICkgeworCisJCQkJCQkJCQkJLy8gQ2FjaGUgdGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxlbWVudAorCQkJCQkJCQkJCWlmICggdXNlQ2FjaGUgKSB7CisJCQkJCQkJCQkJCW91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTsKKworCQkJCQkJCQkJCQkvLyBTdXBwb3J0OiBJRSA8OSBvbmx5CisJCQkJCQkJCQkJCS8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KQorCQkJCQkJCQkJCQl1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fAorCQkJCQkJCQkJCQkJKG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTsKKworCQkJCQkJCQkJCQl1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJaWYgKCBub2RlID09PSBlbGVtICkgeworCQkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCS8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplCisJCQkJCQlkaWZmIC09IGxhc3Q7CisJCQkJCQlyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTsKKwkJCQkJfQorCQkJCX07CisJCX0sCisKKwkJIlBTRVVETyI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkgeworCQkJLy8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlCisJCQkvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzCisJCQkvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVycworCQkJLy8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvcworCQkJdmFyIGFyZ3MsCisJCQkJZm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fAorCQkJCQlTaXp6bGUuZXJyb3IoICJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIgKyBwc2V1ZG8gKTsKKworCQkJLy8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1ZG8gdG8gaW5kaWNhdGUgdGhhdAorCQkJLy8gYXJndW1lbnRzIGFyZSBuZWVkZWQgdG8gY3JlYXRlIHRoZSBmaWx0ZXIgZnVuY3Rpb24KKwkJCS8vIGp1c3QgYXMgU2l6emxlIGRvZXMKKwkJCWlmICggZm5bIGV4cGFuZG8gXSApIHsKKwkJCQlyZXR1cm4gZm4oIGFyZ3VtZW50ICk7CisJCQl9CisKKwkJCS8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlcworCQkJaWYgKCBmbi5sZW5ndGggPiAxICkgeworCQkJCWFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCAiIiwgYXJndW1lbnQgXTsKKwkJCQlyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID8KKwkJCQkJbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkgeworCQkJCQkJdmFyIGlkeCwKKwkJCQkJCQltYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksCisJCQkJCQkJaSA9IG1hdGNoZWQubGVuZ3RoOworCQkJCQkJd2hpbGUgKCBpLS0gKSB7CisJCQkJCQkJaWR4ID0gaW5kZXhPZiggc2VlZCwgbWF0Y2hlZFtpXSApOworCQkJCQkJCXNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkW2ldICk7CisJCQkJCQl9CisJCQkJCX0pIDoKKwkJCQkJZnVuY3Rpb24oIGVsZW0gKSB7CisJCQkJCQlyZXR1cm4gZm4oIGVsZW0sIDAsIGFyZ3MgKTsKKwkJCQkJfTsKKwkJCX0KKworCQkJcmV0dXJuIGZuOworCQl9CisJfSwKKworCXBzZXVkb3M6IHsKKwkJLy8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zCisJCSJub3QiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkgeworCQkJLy8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGUKKwkJCS8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nCisJCQkvLyBzcGFjZXMgYXMgY29tYmluYXRvcnMKKwkJCXZhciBpbnB1dCA9IFtdLAorCQkJCXJlc3VsdHMgPSBbXSwKKwkJCQltYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sICIkMSIgKSApOworCisJCQlyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID8KKwkJCQltYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIGNvbnRleHQsIHhtbCApIHsKKwkJCQkJdmFyIGVsZW0sCisJCQkJCQl1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksCisJCQkJCQlpID0gc2VlZC5sZW5ndGg7CisKKwkJCQkJLy8gTWF0Y2ggZWxlbWVudHMgdW5tYXRjaGVkIGJ5IGBtYXRjaGVyYAorCQkJCQl3aGlsZSAoIGktLSApIHsKKwkJCQkJCWlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkgeworCQkJCQkJCXNlZWRbaV0gPSAhKG1hdGNoZXNbaV0gPSBlbGVtKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0pIDoKKwkJCQlmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgeworCQkJCQlpbnB1dFswXSA9IGVsZW07CisJCQkJCW1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTsKKwkJCQkJLy8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudCAoaXNzdWUgIzI5OSkKKwkJCQkJaW5wdXRbMF0gPSBudWxsOworCQkJCQlyZXR1cm4gIXJlc3VsdHMucG9wKCk7CisJCQkJfTsKKwkJfSksCisKKwkJImhhcyI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisJCQlyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisJCQkJcmV0dXJuIFNpenpsZSggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwOworCQkJfTsKKwkJfSksCisKKwkJImNvbnRhaW5zIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCB0ZXh0ICkgeworCQkJdGV4dCA9IHRleHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKKwkJCXJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCQlyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJUZXh0IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xOworCQkJfTsKKwkJfSksCisKKwkJLy8gIldoZXRoZXIgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDpsYW5nKCkgc2VsZWN0b3IKKwkJLy8gaXMgYmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUKKwkJLy8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQywKKwkJLy8gb3IgYmVnaW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSAiLSIuCisJCS8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LgorCQkvLyBUaGUgaWRlbnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8gYmUgYSB2YWxpZCBsYW5ndWFnZSBuYW1lLiIKKwkJLy8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkbworCQkibGFuZyI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7CisJCQkvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyCisJCQlpZiAoICFyaWRlbnRpZmllci50ZXN0KGxhbmcgfHwgIiIpICkgeworCQkJCVNpenpsZS5lcnJvciggInVuc3VwcG9ydGVkIGxhbmc6ICIgKyBsYW5nICk7CisJCQl9CisJCQlsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7CisJCQlyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisJCQkJdmFyIGVsZW1MYW5nOworCQkJCWRvIHsKKwkJCQkJaWYgKCAoZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/CisJCQkJCQllbGVtLmxhbmcgOgorCQkJCQkJZWxlbS5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIikgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoImxhbmciKSkgKSB7CisKKwkJCQkJCWVsZW1MYW5nID0gZWxlbUxhbmcudG9Mb3dlckNhc2UoKTsKKwkJCQkJCXJldHVybiBlbGVtTGFuZyA9PT0gbGFuZyB8fCBlbGVtTGFuZy5pbmRleE9mKCBsYW5nICsgIi0iICkgPT09IDA7CisJCQkJCX0KKwkJCQl9IHdoaWxlICggKGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9OworCQl9KSwKKworCQkvLyBNaXNjZWxsYW5lb3VzCisJCSJ0YXJnZXQiOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCXZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoOworCQkJcmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkOworCQl9LAorCisJCSJyb290IjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTsKKwkJfSwKKworCQkiZm9jdXMiOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCXJldHVybiBlbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmICghZG9jdW1lbnQuaGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSkgJiYgISEoZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCk7CisJCX0sCisKKwkJLy8gQm9vbGVhbiBwcm9wZXJ0aWVzCisJCSJlbmFibGVkIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGZhbHNlICksCisJCSJkaXNhYmxlZCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksCisKKwkJImNoZWNrZWQiOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCS8vIEluIENTUzMsIDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVtZW50cworCQkJLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWQKKwkJCXZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKKwkJCXJldHVybiAobm9kZU5hbWUgPT09ICJpbnB1dCIgJiYgISFlbGVtLmNoZWNrZWQpIHx8IChub2RlTmFtZSA9PT0gIm9wdGlvbiIgJiYgISFlbGVtLnNlbGVjdGVkKTsKKwkJfSwKKworCQkic2VsZWN0ZWQiOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCS8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHQKKwkJCS8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHkKKwkJCWlmICggZWxlbS5wYXJlbnROb2RlICkgeworCQkJCWVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4OworCQkJfQorCisJCQlyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTsKKwkJfSwKKworCQkvLyBDb250ZW50cworCQkiZW1wdHkiOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvCisJCQkvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSksCisJCQkvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKQorCQkJLy8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlbgorCQkJZm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7CisJCQkJaWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiB0cnVlOworCQl9LAorCisJCSJwYXJlbnQiOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCXJldHVybiAhRXhwci5wc2V1ZG9zWyJlbXB0eSJdKCBlbGVtICk7CisJCX0sCisKKwkJLy8gRWxlbWVudC9pbnB1dCB0eXBlcworCQkiaGVhZGVyIjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1cm4gcmhlYWRlci50ZXN0KCBlbGVtLm5vZGVOYW1lICk7CisJCX0sCisKKwkJImlucHV0IjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7CisJCX0sCisKKwkJImJ1dHRvbiI6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisJCQlyZXR1cm4gbmFtZSA9PT0gImlucHV0IiAmJiBlbGVtLnR5cGUgPT09ICJidXR0b24iIHx8IG5hbWUgPT09ICJidXR0b24iOworCQl9LAorCisJCSJ0ZXh0IjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQl2YXIgYXR0cjsKKwkJCXJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYKKwkJCQllbGVtLnR5cGUgPT09ICJ0ZXh0IiAmJgorCisJCQkJLy8gU3VwcG9ydDogSUU8OAorCQkJCS8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCAic2VhcmNoIikgYXBwZWFyIHdpdGggZWxlbS50eXBlID09PSAidGV4dCIKKwkJCQkoIChhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkgPT0gbnVsbCB8fCBhdHRyLnRvTG93ZXJDYXNlKCkgPT09ICJ0ZXh0IiApOworCQl9LAorCisJCS8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb24KKwkJImZpcnN0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbigpIHsKKwkJCXJldHVybiBbIDAgXTsKKwkJfSksCisKKwkJImxhc3QiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHsKKwkJCXJldHVybiBbIGxlbmd0aCAtIDEgXTsKKwkJfSksCisKKwkJImVxIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgeworCQkJcmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdOworCQl9KSwKKworCQkiZXZlbiI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgeworCQkJdmFyIGkgPSAwOworCQkJZm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7CisJCQkJbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKKwkJCX0KKwkJCXJldHVybiBtYXRjaEluZGV4ZXM7CisJCX0pLAorCisJCSJvZGQiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHsKKwkJCXZhciBpID0gMTsKKwkJCWZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkgeworCQkJCW1hdGNoSW5kZXhlcy5wdXNoKCBpICk7CisJCQl9CisJCQlyZXR1cm4gbWF0Y2hJbmRleGVzOworCQl9KSwKKworCQkibHQiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7CisJCQl2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7CisJCQlmb3IgKCA7IC0taSA+PSAwOyApIHsKKwkJCQltYXRjaEluZGV4ZXMucHVzaCggaSApOworCQkJfQorCQkJcmV0dXJuIG1hdGNoSW5kZXhlczsKKwkJfSksCisKKwkJImd0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgeworCQkJdmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50OworCQkJZm9yICggOyArK2kgPCBsZW5ndGg7ICkgeworCQkJCW1hdGNoSW5kZXhlcy5wdXNoKCBpICk7CisJCQl9CisJCQlyZXR1cm4gbWF0Y2hJbmRleGVzOworCQl9KQorCX0KK307CisKK0V4cHIucHNldWRvc1sibnRoIl0gPSBFeHByLnBzZXVkb3NbImVxIl07CisKKy8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zCitmb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHsKKwlFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUlucHV0UHNldWRvKCBpICk7Cit9Citmb3IgKCBpIGluIHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkgeworCUV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7Cit9CisKKy8vIEVhc3kgQVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVycworZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9CitzZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNldWRvczsKK0V4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7CisKK3Rva2VuaXplID0gU2l6emxlLnRva2VuaXplID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7CisJdmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsCisJCXNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsCisJCWNhY2hlZCA9IHRva2VuQ2FjaGVbIHNlbGVjdG9yICsgIiAiIF07CisKKwlpZiAoIGNhY2hlZCApIHsKKwkJcmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTsKKwl9CisKKwlzb0ZhciA9IHNlbGVjdG9yOworCWdyb3VwcyA9IFtdOworCXByZUZpbHRlcnMgPSBFeHByLnByZUZpbHRlcjsKKworCXdoaWxlICggc29GYXIgKSB7CisKKwkJLy8gQ29tbWEgYW5kIGZpcnN0IHJ1bgorCQlpZiAoICFtYXRjaGVkIHx8IChtYXRjaCA9IHJjb21tYS5leGVjKCBzb0ZhciApKSApIHsKKwkJCWlmICggbWF0Y2ggKSB7CisJCQkJLy8gRG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWQKKwkJCQlzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFswXS5sZW5ndGggKSB8fCBzb0ZhcjsKKwkJCX0KKwkJCWdyb3Vwcy5wdXNoKCAodG9rZW5zID0gW10pICk7CisJCX0KKworCQltYXRjaGVkID0gZmFsc2U7CisKKwkJLy8gQ29tYmluYXRvcnMKKwkJaWYgKCAobWF0Y2ggPSByY29tYmluYXRvcnMuZXhlYyggc29GYXIgKSkgKSB7CisJCQltYXRjaGVkID0gbWF0Y2guc2hpZnQoKTsKKwkJCXRva2Vucy5wdXNoKHsKKwkJCQl2YWx1ZTogbWF0Y2hlZCwKKwkJCQkvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2UKKwkJCQl0eXBlOiBtYXRjaFswXS5yZXBsYWNlKCBydHJpbSwgIiAiICkKKwkJCX0pOworCQkJc29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTsKKwkJfQorCisJCS8vIEZpbHRlcnMKKwkJZm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHsKKwkJCWlmICggKG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHwKKwkJCQkobWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkpKSApIHsKKwkJCQltYXRjaGVkID0gbWF0Y2guc2hpZnQoKTsKKwkJCQl0b2tlbnMucHVzaCh7CisJCQkJCXZhbHVlOiBtYXRjaGVkLAorCQkJCQl0eXBlOiB0eXBlLAorCQkJCQltYXRjaGVzOiBtYXRjaAorCQkJCX0pOworCQkJCXNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7CisJCQl9CisJCX0KKworCQlpZiAoICFtYXRjaGVkICkgeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3MKKwkvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmcKKwkvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnMKKwlyZXR1cm4gcGFyc2VPbmx5ID8KKwkJc29GYXIubGVuZ3RoIDoKKwkJc29GYXIgPworCQkJU2l6emxlLmVycm9yKCBzZWxlY3RvciApIDoKKwkJCS8vIENhY2hlIHRoZSB0b2tlbnMKKwkJCXRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApOworfTsKKworZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkgeworCXZhciBpID0gMCwKKwkJbGVuID0gdG9rZW5zLmxlbmd0aCwKKwkJc2VsZWN0b3IgPSAiIjsKKwlmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKwkJc2VsZWN0b3IgKz0gdG9rZW5zW2ldLnZhbHVlOworCX0KKwlyZXR1cm4gc2VsZWN0b3I7Cit9CisKK2Z1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7CisJdmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLAorCQlza2lwID0gY29tYmluYXRvci5uZXh0LAorCQlrZXkgPSBza2lwIHx8IGRpciwKKwkJY2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYga2V5ID09PSAicGFyZW50Tm9kZSIsCisJCWRvbmVOYW1lID0gZG9uZSsrOworCisJcmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgPworCQkvLyBDaGVjayBhZ2FpbnN0IGNsb3Nlc3QgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnQKKwkJZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKwkJCXdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7CisJCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7CisJCQkJCXJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7CisJCX0gOgorCisJCS8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50cworCQlmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgeworCQkJdmFyIG9sZENhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSwKKwkJCQluZXdDYWNoZSA9IFsgZGlycnVucywgZG9uZU5hbWUgXTsKKworCQkJLy8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gY29tYmluYXRvciBjYWNoaW5nCisJCQlpZiAoIHhtbCApIHsKKwkJCQl3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkgeworCQkJCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHsKKwkJCQkJCWlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7CisJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7CisJCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkgeworCQkJCQkJb3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoZWxlbVsgZXhwYW5kbyBdID0ge30pOworCisJCQkJCQkvLyBTdXBwb3J0OiBJRSA8OSBvbmx5CisJCQkJCQkvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSkKKwkJCQkJCXVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdIHx8IChvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSk7CisKKwkJCQkJCWlmICggc2tpcCAmJiBza2lwID09PSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgKSB7CisJCQkJCQkJZWxlbSA9IGVsZW1bIGRpciBdIHx8IGVsZW07CisJCQkJCQl9IGVsc2UgaWYgKCAob2xkQ2FjaGUgPSB1bmlxdWVDYWNoZVsga2V5IF0pICYmCisJCQkJCQkJb2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHsKKworCQkJCQkJCS8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzCisJCQkJCQkJcmV0dXJuIChuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIgXSk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCS8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHMKKwkJCQkJCQl1bmlxdWVDYWNoZVsga2V5IF0gPSBuZXdDYWNoZTsKKworCQkJCQkJCS8vIEEgbWF0Y2ggbWVhbnMgd2UncmUgZG9uZTsgYSBmYWlsIG1lYW5zIHdlIGhhdmUgdG8ga2VlcCBjaGVja2luZworCQkJCQkJCWlmICggKG5ld0NhY2hlWyAyIF0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSkgKSB7CisJCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXJldHVybiBmYWxzZTsKKwkJfTsKK30KKworZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkgeworCXJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID8KKwkJZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKwkJCXZhciBpID0gbWF0Y2hlcnMubGVuZ3RoOworCQkJd2hpbGUgKCBpLS0gKSB7CisJCQkJaWYgKCAhbWF0Y2hlcnNbaV0oIGVsZW0sIGNvbnRleHQsIHhtbCApICkgeworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIHRydWU7CisJCX0gOgorCQltYXRjaGVyc1swXTsKK30KKworZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkgeworCXZhciBpID0gMCwKKwkJbGVuID0gY29udGV4dHMubGVuZ3RoOworCWZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworCQlTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyApOworCX0KKwlyZXR1cm4gcmVzdWx0czsKK30KKworZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHsKKwl2YXIgZWxlbSwKKwkJbmV3VW5tYXRjaGVkID0gW10sCisJCWkgPSAwLAorCQlsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLAorCQltYXBwZWQgPSBtYXAgIT0gbnVsbDsKKworCWZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworCQlpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHsKKwkJCWlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgeworCQkJCW5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7CisJCQkJaWYgKCBtYXBwZWQgKSB7CisJCQkJCW1hcC5wdXNoKCBpICk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIG5ld1VubWF0Y2hlZDsKK30KKworZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkgeworCWlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkgeworCQlwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApOworCX0KKwlpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHsKKwkJcG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApOworCX0KKwlyZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7CisJCXZhciB0ZW1wLCBpLCBlbGVtLAorCQkJcHJlTWFwID0gW10sCisJCQlwb3N0TWFwID0gW10sCisJCQlwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLAorCisJCQkvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dAorCQkJZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yIHx8ICIqIiwgY29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSwKKworCQkJLy8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uCisJCQltYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID8KKwkJCQljb25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6CisJCQkJZWxlbXMsCisKKwkJCW1hdGNoZXJPdXQgPSBtYXRjaGVyID8KKwkJCQkvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLAorCQkJCXBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID8KKworCQkJCQkvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3NhcnkKKwkJCQkJW10gOgorCisJCQkJCS8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseQorCQkJCQlyZXN1bHRzIDoKKwkJCQltYXRjaGVySW47CisKKwkJLy8gRmluZCBwcmltYXJ5IG1hdGNoZXMKKwkJaWYgKCBtYXRjaGVyICkgeworCQkJbWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4bWwgKTsKKwkJfQorCisJCS8vIEFwcGx5IHBvc3RGaWx0ZXIKKwkJaWYgKCBwb3N0RmlsdGVyICkgeworCQkJdGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7CisJCQlwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4dCwgeG1sICk7CisKKwkJCS8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW4KKwkJCWkgPSB0ZW1wLmxlbmd0aDsKKwkJCXdoaWxlICggaS0tICkgeworCQkJCWlmICggKGVsZW0gPSB0ZW1wW2ldKSApIHsKKwkJCQkJbWF0Y2hlck91dFsgcG9zdE1hcFtpXSBdID0gIShtYXRjaGVySW5bIHBvc3RNYXBbaV0gXSA9IGVsZW0pOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmICggc2VlZCApIHsKKwkJCWlmICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7CisJCQkJaWYgKCBwb3N0RmluZGVyICkgeworCQkJCQkvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHMKKwkJCQkJdGVtcCA9IFtdOworCQkJCQlpID0gbWF0Y2hlck91dC5sZW5ndGg7CisJCQkJCXdoaWxlICggaS0tICkgeworCQkJCQkJaWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICkgeworCQkJCQkJCS8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoCisJCQkJCQkJdGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlwb3N0RmluZGVyKCBudWxsLCAobWF0Y2hlck91dCA9IFtdKSwgdGVtcCwgeG1sICk7CisJCQkJfQorCisJCQkJLy8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWQKKwkJCQlpID0gbWF0Y2hlck91dC5sZW5ndGg7CisJCQkJd2hpbGUgKCBpLS0gKSB7CisJCQkJCWlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSAmJgorCQkJCQkJKHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZiggc2VlZCwgZWxlbSApIDogcHJlTWFwW2ldKSA+IC0xICkgeworCisJCQkJCQlzZWVkW3RlbXBdID0gIShyZXN1bHRzW3RlbXBdID0gZWxlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJLy8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkCisJCX0gZWxzZSB7CisJCQltYXRjaGVyT3V0ID0gY29uZGVuc2UoCisJCQkJbWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/CisJCQkJCW1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6CisJCQkJCW1hdGNoZXJPdXQKKwkJCSk7CisJCQlpZiAoIHBvc3RGaW5kZXIgKSB7CisJCQkJcG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7CisJCQl9IGVsc2UgeworCQkJCXB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTsKKwkJCX0KKwkJfQorCX0pOworfQorCitmdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkgeworCXZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosCisJCWxlbiA9IHRva2Vucy5sZW5ndGgsCisJCWxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1swXS50eXBlIF0sCisJCWltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5nUmVsYXRpdmUgfHwgRXhwci5yZWxhdGl2ZVsiICJdLAorCQlpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsCisKKwkJLy8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVtZW50cyBhcmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocykKKwkJbWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0OworCQl9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksCisJCW1hdGNoQW55Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkgeworCQkJcmV0dXJuIGluZGV4T2YoIGNoZWNrQ29udGV4dCwgZWxlbSApID4gLTE7CisJCX0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSwKKwkJbWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CisJCQl2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT09IG91dGVybW9zdENvbnRleHQgKSApIHx8ICgKKwkJCQkoY2hlY2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgPworCQkJCQltYXRjaENvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApIDoKKwkJCQkJbWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApOworCQkJLy8gQXZvaWQgaGFuZ2luZyBvbnRvIGVsZW1lbnQgKGlzc3VlICMyOTkpCisJCQljaGVja0NvbnRleHQgPSBudWxsOworCQkJcmV0dXJuIHJldDsKKwkJfSBdOworCisJZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CisJCWlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHsKKwkJCW1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyKSBdOworCQl9IGVsc2UgeworCQkJbWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbaV0udHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbaV0ubWF0Y2hlcyApOworCisJCQkvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlcgorCQkJaWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7CisJCQkJLy8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nCisJCQkJaiA9ICsraTsKKwkJCQlmb3IgKCA7IGogPCBsZW47IGorKyApIHsKKwkJCQkJaWYgKCBFeHByLnJlbGF0aXZlWyB0b2tlbnNbal0udHlwZSBdICkgeworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJcmV0dXJuIHNldE1hdGNoZXIoCisJCQkJCWkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLAorCQkJCQlpID4gMSAmJiB0b1NlbGVjdG9yKAorCQkJCQkJLy8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmAKKwkJCQkJCXRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5jb25jYXQoeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09ICIgIiA/ICIqIiA6ICIiIH0pCisJCQkJCSkucmVwbGFjZSggcnRyaW0sICIkMSIgKSwKKwkJCQkJbWF0Y2hlciwKKwkJCQkJaSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksCisJCQkJCWogPCBsZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICh0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSkgKSwKKwkJCQkJaiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKQorCQkJCSk7CisJCQl9CisJCQltYXRjaGVycy5wdXNoKCBtYXRjaGVyICk7CisJCX0KKwl9CisKKwlyZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7Cit9CisKK2Z1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHsKKwl2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLAorCQlieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCwKKwkJc3VwZXJNYXRjaGVyID0gZnVuY3Rpb24oIHNlZWQsIGNvbnRleHQsIHhtbCwgcmVzdWx0cywgb3V0ZXJtb3N0ICkgeworCQkJdmFyIGVsZW0sIGosIG1hdGNoZXIsCisJCQkJbWF0Y2hlZENvdW50ID0gMCwKKwkJCQlpID0gIjAiLAorCQkJCXVubWF0Y2hlZCA9IHNlZWQgJiYgW10sCisJCQkJc2V0TWF0Y2hlZCA9IFtdLAorCQkJCWNvbnRleHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0LAorCQkJCS8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHQKKwkJCQllbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZFsiVEFHIl0oICIqIiwgb3V0ZXJtb3N0ICksCisJCQkJLy8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXIKKwkJCQlkaXJydW5zVW5pcXVlID0gKGRpcnJ1bnMgKz0gY29udGV4dEJhY2t1cCA9PSBudWxsID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgMC4xKSwKKwkJCQlsZW4gPSBlbGVtcy5sZW5ndGg7CisKKwkJCWlmICggb3V0ZXJtb3N0ICkgeworCQkJCW91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDsKKwkJCX0KKworCQkJLy8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHMKKwkJCS8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaQorCQkJLy8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6ICJsZW5ndGgiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZyBlbGVtZW50cyBieSBpZAorCQkJZm9yICggOyBpICE9PSBsZW4gJiYgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgeworCQkJCWlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7CisJCQkJCWogPSAwOworCQkJCQlpZiAoICFjb250ZXh0ICYmIGVsZW0ub3duZXJEb2N1bWVudCAhPT0gZG9jdW1lbnQgKSB7CisJCQkJCQlzZXREb2N1bWVudCggZWxlbSApOworCQkJCQkJeG1sID0gIWRvY3VtZW50SXNIVE1MOworCQkJCQl9CisJCQkJCXdoaWxlICggKG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbaisrXSkgKSB7CisJCQkJCQlpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQgfHwgZG9jdW1lbnQsIHhtbCkgKSB7CisJCQkJCQkJcmVzdWx0cy5wdXNoKCBlbGVtICk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJaWYgKCBvdXRlcm1vc3QgKSB7CisJCQkJCQlkaXJydW5zID0gZGlycnVuc1VuaXF1ZTsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnMKKwkJCQlpZiAoIGJ5U2V0ICkgeworCQkJCQkvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzCisJCQkJCWlmICggKGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtKSApIHsKKwkJCQkJCW1hdGNoZWRDb3VudC0tOworCQkJCQl9CisKKwkJCQkJLy8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdAorCQkJCQlpZiAoIHNlZWQgKSB7CisJCQkJCQl1bm1hdGNoZWQucHVzaCggZWxlbSApOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQkvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFib3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgCisJCQkvLyBtYWtlcyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLgorCQkJbWF0Y2hlZENvdW50ICs9IGk7CisKKwkJCS8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50cworCQkJLy8gTk9URTogVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVyZSBhcmUgbm8gdW5tYXRjaGVkIGVsZW1lbnRzIChpLmUuLCBgbWF0Y2hlZENvdW50YAorCQkJLy8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlCisJCQkvLyBubyBlbGVtZW50IG1hdGNoZXJzIGFuZCBubyBzZWVkLgorCQkJLy8gSW5jcmVtZW50aW5nIGFuIGluaXRpYWxseS1zdHJpbmcgIjAiIGBpYCBhbGxvd3MgYGlgIHRvIHJlbWFpbiBhIHN0cmluZyBvbmx5IGluIHRoYXQKKwkJCS8vIGNhc2UsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgIjAwIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc28KKwkJCS8vIG51bWVyaWNhbGx5IHplcm8uCisJCQlpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHsKKwkJCQlqID0gMDsKKwkJCQl3aGlsZSAoIChtYXRjaGVyID0gc2V0TWF0Y2hlcnNbaisrXSkgKSB7CisJCQkJCW1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7CisJCQkJfQorCisJCQkJaWYgKCBzZWVkICkgeworCQkJCQkvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nCisJCQkJCWlmICggbWF0Y2hlZENvdW50ID4gMCApIHsKKwkJCQkJCXdoaWxlICggaS0tICkgeworCQkJCQkJCWlmICggISh1bm1hdGNoZWRbaV0gfHwgc2V0TWF0Y2hlZFtpXSkgKSB7CisJCQkJCQkJCXNldE1hdGNoZWRbaV0gPSBwb3AuY2FsbCggcmVzdWx0cyApOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCS8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzCisJCQkJCXNldE1hdGNoZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApOworCQkJCX0KKworCQkJCS8vIEFkZCBtYXRjaGVzIHRvIHJlc3VsdHMKKwkJCQlwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7CisKKwkJCQkvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmcKKwkJCQlpZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiYKKwkJCQkJKCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7CisKKwkJCQkJU2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTsKKwkJCQl9CisJCQl9CisKKwkJCS8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVycworCQkJaWYgKCBvdXRlcm1vc3QgKSB7CisJCQkJZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7CisJCQkJb3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7CisJCQl9CisKKwkJCXJldHVybiB1bm1hdGNoZWQ7CisJCX07CisKKwlyZXR1cm4gYnlTZXQgPworCQltYXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDoKKwkJc3VwZXJNYXRjaGVyOworfQorCitjb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkgeworCXZhciBpLAorCQlzZXRNYXRjaGVycyA9IFtdLAorCQllbGVtZW50TWF0Y2hlcnMgPSBbXSwKKwkJY2FjaGVkID0gY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyAiICIgXTsKKworCWlmICggIWNhY2hlZCApIHsKKwkJLy8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50CisJCWlmICggIW1hdGNoICkgeworCQkJbWF0Y2ggPSB0b2tlbml6ZSggc2VsZWN0b3IgKTsKKwkJfQorCQlpID0gbWF0Y2gubGVuZ3RoOworCQl3aGlsZSAoIGktLSApIHsKKwkJCWNhY2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKCBtYXRjaFtpXSApOworCQkJaWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHsKKwkJCQlzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTsKKwkJCX0gZWxzZSB7CisJCQkJZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApOworCQkJfQorCQl9CisKKwkJLy8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uCisJCWNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoIHNlbGVjdG9yLCBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSApOworCisJCS8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvbgorCQljYWNoZWQuc2VsZWN0b3IgPSBzZWxlY3RvcjsKKwl9CisJcmV0dXJuIGNhY2hlZDsKK307CisKKy8qKgorICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBTaXp6bGUncyBjb21waWxlZAorICogIHNlbGVjdG9yIGZ1bmN0aW9ucworICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWQKKyAqICBzZWxlY3RvciBmdW5jdGlvbiBidWlsdCB3aXRoIFNpenpsZS5jb21waWxlCisgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHQKKyAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXQorICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3QKKyAqLworc2VsZWN0ID0gU2l6emxlLnNlbGVjdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHsKKwl2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCwKKwkJY29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09ICJmdW5jdGlvbiIgJiYgc2VsZWN0b3IsCisJCW1hdGNoID0gIXNlZWQgJiYgdG9rZW5pemUoIChzZWxlY3RvciA9IGNvbXBpbGVkLnNlbGVjdG9yIHx8IHNlbGVjdG9yKSApOworCisJcmVzdWx0cyA9IHJlc3VsdHMgfHwgW107CisKKwkvLyBUcnkgdG8gbWluaW1pemUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzZWxlY3RvciBpbiB0aGUgbGlzdCBhbmQgbm8gc2VlZAorCS8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMgdXMgY29udGV4dCkKKwlpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHsKKworCQkvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJRAorCQl0b2tlbnMgPSBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKCAwICk7CisJCWlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRva2VuID0gdG9rZW5zWzBdKS50eXBlID09PSAiSUQiICYmCisJCQkJY29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJiBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkgeworCisJCQljb250ZXh0ID0gKCBFeHByLmZpbmRbIklEIl0oIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZShydW5lc2NhcGUsIGZ1bmVzY2FwZSksIGNvbnRleHQgKSB8fCBbXSApWzBdOworCQkJaWYgKCAhY29udGV4dCApIHsKKwkJCQlyZXR1cm4gcmVzdWx0czsKKworCQkJLy8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbAorCQkJfSBlbHNlIGlmICggY29tcGlsZWQgKSB7CisJCQkJY29udGV4dCA9IGNvbnRleHQucGFyZW50Tm9kZTsKKwkJCX0KKworCQkJc2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSggdG9rZW5zLnNoaWZ0KCkudmFsdWUubGVuZ3RoICk7CisJCX0KKworCQkvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nCisJCWkgPSBtYXRjaEV4cHJbIm5lZWRzQ29udGV4dCJdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDsKKwkJd2hpbGUgKCBpLS0gKSB7CisJCQl0b2tlbiA9IHRva2Vuc1tpXTsKKworCQkJLy8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvcgorCQkJaWYgKCBFeHByLnJlbGF0aXZlWyAodHlwZSA9IHRva2VuLnR5cGUpIF0gKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoIChmaW5kID0gRXhwci5maW5kWyB0eXBlIF0pICkgeworCQkJCS8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5hdG9ycworCQkJCWlmICggKHNlZWQgPSBmaW5kKAorCQkJCQl0b2tlbi5tYXRjaGVzWzBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksCisJCQkJCXJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHQKKwkJCQkpKSApIHsKKworCQkJCQkvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHkKKwkJCQkJdG9rZW5zLnNwbGljZSggaSwgMSApOworCQkJCQlzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApOworCQkJCQlpZiAoICFzZWxlY3RvciApIHsKKwkJCQkJCXB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTsKKwkJCQkJCXJldHVybiByZXN1bHRzOworCQkJCQl9CisKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLy8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkCisJLy8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZQorCSggY29tcGlsZWQgfHwgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkgKSgKKwkJc2VlZCwKKwkJY29udGV4dCwKKwkJIWRvY3VtZW50SXNIVE1MLAorCQlyZXN1bHRzLAorCQkhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0CisJKTsKKwlyZXR1cm4gcmVzdWx0czsKK307CisKKy8vIE9uZS10aW1lIGFzc2lnbm1lbnRzCisKKy8vIFNvcnQgc3RhYmlsaXR5CitzdXBwb3J0LnNvcnRTdGFibGUgPSBleHBhbmRvLnNwbGl0KCIiKS5zb3J0KCBzb3J0T3JkZXIgKS5qb2luKCIiKSA9PT0gZXhwYW5kbzsKKworLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1KworLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbgorc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7CisKKy8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudAorc2V0RG9jdW1lbnQoKTsKKworLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNykKKy8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKgorc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkgeworCS8vIFNob3VsZCByZXR1cm4gMSwgYnV0IHJldHVybnMgNCAoZm9sbG93aW5nKQorCXJldHVybiBlbC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKSApICYgMTsKK30pOworCisvLyBTdXBwb3J0OiBJRTw4CisvLyBQcmV2ZW50IGF0dHJpYnV0ZS9wcm9wZXJ0eSAiaW50ZXJwb2xhdGlvbiIKKy8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4CitpZiAoICFhc3NlcnQoZnVuY3Rpb24oIGVsICkgeworCWVsLmlubmVySFRNTCA9ICI8YSBocmVmPScjJz48L2E+IjsKKwlyZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSA9PT0gIiMiIDsKK30pICkgeworCWFkZEhhbmRsZSggInR5cGV8aHJlZnxoZWlnaHR8d2lkdGgiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7CisJCWlmICggIWlzWE1MICkgeworCQkJcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJ0eXBlIiA/IDEgOiAyICk7CisJCX0KKwl9KTsKK30KKworLy8gU3VwcG9ydDogSUU8OQorLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoInZhbHVlIikKK2lmICggIXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHsKKwllbC5pbm5lckhUTUwgPSAiPGlucHV0Lz4iOworCWVsLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCAidmFsdWUiLCAiIiApOworCXJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggInZhbHVlIiApID09PSAiIjsKK30pICkgeworCWFkZEhhbmRsZSggInZhbHVlIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkgeworCQlpZiAoICFpc1hNTCAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgKSB7CisJCQlyZXR1cm4gZWxlbS5kZWZhdWx0VmFsdWU7CisJCX0KKwl9KTsKK30KKworLy8gU3VwcG9ydDogSUU8OQorLy8gVXNlIGdldEF0dHJpYnV0ZU5vZGUgdG8gZmV0Y2ggYm9vbGVhbnMgd2hlbiBnZXRBdHRyaWJ1dGUgbGllcworaWYgKCAhYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHsKKwlyZXR1cm4gZWwuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpID09IG51bGw7Cit9KSApIHsKKwlhZGRIYW5kbGUoIGJvb2xlYW5zLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7CisJCXZhciB2YWw7CisJCWlmICggIWlzWE1MICkgeworCQkJcmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6CisJCQkJCSh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSkgJiYgdmFsLnNwZWNpZmllZCA/CisJCQkJCXZhbC52YWx1ZSA6CisJCQkJbnVsbDsKKwkJfQorCX0pOworfQorCityZXR1cm4gU2l6emxlOworCit9KSggd2luZG93ICk7CisKKworCitqUXVlcnkuZmluZCA9IFNpenpsZTsKK2pRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9yczsKKworLy8gRGVwcmVjYXRlZAoralF1ZXJ5LmV4cHJbICI6IiBdID0galF1ZXJ5LmV4cHIucHNldWRvczsKK2pRdWVyeS51bmlxdWVTb3J0ID0galF1ZXJ5LnVuaXF1ZSA9IFNpenpsZS51bmlxdWVTb3J0OworalF1ZXJ5LnRleHQgPSBTaXp6bGUuZ2V0VGV4dDsKK2pRdWVyeS5pc1hNTERvYyA9IFNpenpsZS5pc1hNTDsKK2pRdWVyeS5jb250YWlucyA9IFNpenpsZS5jb250YWluczsKK2pRdWVyeS5lc2NhcGVTZWxlY3RvciA9IFNpenpsZS5lc2NhcGU7CisKKworCisKK3ZhciBkaXIgPSBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHsKKwl2YXIgbWF0Y2hlZCA9IFtdLAorCQl0cnVuY2F0ZSA9IHVudGlsICE9PSB1bmRlZmluZWQ7CisKKwl3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHsKKwkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworCQkJaWYgKCB0cnVuY2F0ZSAmJiBqUXVlcnkoIGVsZW0gKS5pcyggdW50aWwgKSApIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW1hdGNoZWQucHVzaCggZWxlbSApOworCQl9CisJfQorCXJldHVybiBtYXRjaGVkOworfTsKKworCit2YXIgc2libGluZ3MgPSBmdW5jdGlvbiggbiwgZWxlbSApIHsKKwl2YXIgbWF0Y2hlZCA9IFtdOworCisJZm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHsKKwkJaWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7CisJCQltYXRjaGVkLnB1c2goIG4gKTsKKwkJfQorCX0KKworCXJldHVybiBtYXRjaGVkOworfTsKKworCit2YXIgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dDsKKworCisKK2Z1bmN0aW9uIG5vZGVOYW1lKCBlbGVtLCBuYW1lICkgeworCisgIHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpOworCit9OwordmFyIHJzaW5nbGVUYWcgPSAoIC9ePChbYS16XVteXC9cMD46XHgyMFx0XHJcblxmXSopW1x4MjBcdFxyXG5cZl0qXC8/Pig/OjxcL1wxPnwpJC9pICk7CisKKworCisvLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdAorZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBub3QgKSB7CisJaWYgKCBpc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHsKKwkJcmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CisJCQlyZXR1cm4gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApICE9PSBub3Q7CisJCX0gKTsKKwl9CisKKwkvLyBTaW5nbGUgZWxlbWVudAorCWlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkgeworCQlyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKwkJCXJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7CisJCX0gKTsKKwl9CisKKwkvLyBBcnJheWxpa2Ugb2YgZWxlbWVudHMgKGpRdWVyeSwgYXJndW1lbnRzLCBBcnJheSkKKwlpZiAoIHR5cGVvZiBxdWFsaWZpZXIgIT09ICJzdHJpbmciICkgeworCQlyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKwkJCXJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSApICE9PSBub3Q7CisJCX0gKTsKKwl9CisKKwkvLyBGaWx0ZXJlZCBkaXJlY3RseSBmb3IgYm90aCBzaW1wbGUgYW5kIGNvbXBsZXggc2VsZWN0b3JzCisJcmV0dXJuIGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMsIG5vdCApOworfQorCitqUXVlcnkuZmlsdGVyID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7CisJdmFyIGVsZW0gPSBlbGVtc1sgMCBdOworCisJaWYgKCBub3QgKSB7CisJCWV4cHIgPSAiOm5vdCgiICsgZXhwciArICIpIjsKKwl9CisKKwlpZiAoIGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgeworCQlyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBleHByICkgPyBbIGVsZW0gXSA6IFtdOworCX0KKworCXJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzKCBleHByLCBqUXVlcnkuZ3JlcCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVtICkgeworCQlyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTsKKwl9ICkgKTsKK307CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKwlmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisJCXZhciBpLCByZXQsCisJCQlsZW4gPSB0aGlzLmxlbmd0aCwKKwkJCXNlbGYgPSB0aGlzOworCisJCWlmICggdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5nIiApIHsKKwkJCXJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlciggZnVuY3Rpb24oKSB7CisJCQkJZm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHsKKwkJCQkJaWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkgeworCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCX0KKwkJCQl9CisJCQl9ICkgKTsKKwkJfQorCisJCXJldCA9IHRoaXMucHVzaFN0YWNrKCBbXSApOworCisJCWZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7CisJCQlqUXVlcnkuZmluZCggc2VsZWN0b3IsIHNlbGZbIGkgXSwgcmV0ICk7CisJCX0KKworCQlyZXR1cm4gbGVuID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCByZXQgKSA6IHJldDsKKwl9LAorCWZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIGZhbHNlICkgKTsKKwl9LAorCW5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIHRydWUgKSApOworCX0sCisJaXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKwkJcmV0dXJuICEhd2lubm93KAorCQkJdGhpcywKKworCQkJLy8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldAorCQkJLy8gc28gJCgicDpmaXJzdCIpLmlzKCJwOmxhc3QiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gInAiLgorCQkJdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiAmJiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgPworCQkJCWpRdWVyeSggc2VsZWN0b3IgKSA6CisJCQkJc2VsZWN0b3IgfHwgW10sCisJCQlmYWxzZQorCQkpLmxlbmd0aDsKKwl9Cit9ICk7CisKKworLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3QKKworCisvLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudCkKK3ZhciByb290alF1ZXJ5LAorCisJLy8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3MKKwkvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpCisJLy8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKCMxMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpCisJLy8gU2hvcnRjdXQgc2ltcGxlICNpZCBjYXNlIGZvciBzcGVlZAorCXJxdWlja0V4cHIgPSAvXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSspKSQvLAorCisJaW5pdCA9IGpRdWVyeS5mbi5pbml0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290ICkgeworCQl2YXIgbWF0Y2gsIGVsZW07CisKKwkJLy8gSEFORExFOiAkKCIiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKQorCQlpZiAoICFzZWxlY3RvciApIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisKKwkJLy8gTWV0aG9kIGluaXQoKSBhY2NlcHRzIGFuIGFsdGVybmF0ZSByb290alF1ZXJ5CisJCS8vIHNvIG1pZ3JhdGUgY2FuIHN1cHBvcnQgalF1ZXJ5LnN1YiAoZ2gtMjEwMSkKKwkJcm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTsKKworCQkvLyBIYW5kbGUgSFRNTCBzdHJpbmdzCisJCWlmICggdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKKwkJCWlmICggc2VsZWN0b3JbIDAgXSA9PT0gIjwiICYmCisJCQkJc2VsZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gIj4iICYmCisJCQkJc2VsZWN0b3IubGVuZ3RoID49IDMgKSB7CisKKwkJCQkvLyBBc3N1bWUgdGhhdCBzdHJpbmdzIHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSByZWdleCBjaGVjaworCQkJCW1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdOworCisJCQl9IGVsc2UgeworCQkJCW1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApOworCQkJfQorCisJCQkvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkCisJCQlpZiAoIG1hdGNoICYmICggbWF0Y2hbIDEgXSB8fCAhY29udGV4dCApICkgeworCisJCQkJLy8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpCisJCQkJaWYgKCBtYXRjaFsgMSBdICkgeworCQkJCQljb250ZXh0ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbIDAgXSA6IGNvbnRleHQ7CisKKwkJCQkJLy8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0CisJCQkJCS8vIEludGVudGlvbmFsbHkgbGV0IHRoZSBlcnJvciBiZSB0aHJvd24gaWYgcGFyc2VIVE1MIGlzIG5vdCBwcmVzZW50CisJCQkJCWpRdWVyeS5tZXJnZSggdGhpcywgalF1ZXJ5LnBhcnNlSFRNTCgKKwkJCQkJCW1hdGNoWyAxIF0sCisJCQkJCQljb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50LAorCQkJCQkJdHJ1ZQorCQkJCQkpICk7CisKKwkJCQkJLy8gSEFORExFOiAkKGh0bWwsIHByb3BzKQorCQkJCQlpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0Y2hbIDEgXSApICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7CisJCQkJCQlmb3IgKCBtYXRjaCBpbiBjb250ZXh0ICkgeworCisJCQkJCQkJLy8gUHJvcGVydGllcyBvZiBjb250ZXh0IGFyZSBjYWxsZWQgYXMgbWV0aG9kcyBpZiBwb3NzaWJsZQorCQkJCQkJCWlmICggaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkgeworCQkJCQkJCQl0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7CisKKwkJCQkJCQkvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzCisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJdGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCXJldHVybiB0aGlzOworCisJCQkJLy8gSEFORExFOiAkKCNpZCkKKwkJCQl9IGVsc2UgeworCQkJCQllbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTsKKworCQkJCQlpZiAoIGVsZW0gKSB7CisKKwkJCQkJCS8vIEluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0CisJCQkJCQl0aGlzWyAwIF0gPSBlbGVtOworCQkJCQkJdGhpcy5sZW5ndGggPSAxOworCQkJCQl9CisJCQkJCXJldHVybiB0aGlzOworCQkJCX0KKworCQkJLy8gSEFORExFOiAkKGV4cHIsICQoLi4uKSkKKwkJCX0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkgeworCQkJCXJldHVybiAoIGNvbnRleHQgfHwgcm9vdCApLmZpbmQoIHNlbGVjdG9yICk7CisKKwkJCS8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KQorCQkJLy8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpCisJCQl9IGVsc2UgeworCQkJCXJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTsKKwkJCX0KKworCQkvLyBIQU5ETEU6ICQoRE9NRWxlbWVudCkKKwkJfSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7CisJCQl0aGlzWyAwIF0gPSBzZWxlY3RvcjsKKwkJCXRoaXMubGVuZ3RoID0gMTsKKwkJCXJldHVybiB0aGlzOworCisJCS8vIEhBTkRMRTogJChmdW5jdGlvbikKKwkJLy8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5CisJCX0gZWxzZSBpZiAoIGlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7CisJCQlyZXR1cm4gcm9vdC5yZWFkeSAhPT0gdW5kZWZpbmVkID8KKwkJCQlyb290LnJlYWR5KCBzZWxlY3RvciApIDoKKworCQkJCS8vIEV4ZWN1dGUgaW1tZWRpYXRlbHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnQKKwkJCQlzZWxlY3RvciggalF1ZXJ5ICk7CisJCX0KKworCQlyZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTsKKwl9OworCisvLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uCitpbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjsKKworLy8gSW5pdGlhbGl6ZSBjZW50cmFsIHJlZmVyZW5jZQorcm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1lbnQgKTsKKworCit2YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sCisKKwkvLyBNZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldAorCWd1YXJhbnRlZWRVbmlxdWUgPSB7CisJCWNoaWxkcmVuOiB0cnVlLAorCQljb250ZW50czogdHJ1ZSwKKwkJbmV4dDogdHJ1ZSwKKwkJcHJldjogdHJ1ZQorCX07CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKwloYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7CisJCXZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSwKKwkJCWwgPSB0YXJnZXRzLmxlbmd0aDsKKworCQlyZXR1cm4gdGhpcy5maWx0ZXIoIGZ1bmN0aW9uKCkgeworCQkJdmFyIGkgPSAwOworCQkJZm9yICggOyBpIDwgbDsgaSsrICkgeworCQkJCWlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzWyBpIF0gKSApIHsKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJfQorCQkJfQorCQl9ICk7CisJfSwKKworCWNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7CisJCXZhciBjdXIsCisJCQlpID0gMCwKKwkJCWwgPSB0aGlzLmxlbmd0aCwKKwkJCW1hdGNoZWQgPSBbXSwKKwkJCXRhcmdldHMgPSB0eXBlb2Ygc2VsZWN0b3JzICE9PSAic3RyaW5nIiAmJiBqUXVlcnkoIHNlbGVjdG9ycyApOworCisJCS8vIFBvc2l0aW9uYWwgc2VsZWN0b3JzIG5ldmVyIG1hdGNoLCBzaW5jZSB0aGVyZSdzIG5vIF9zZWxlY3Rpb25fIGNvbnRleHQKKwkJaWYgKCAhcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSApIHsKKwkJCWZvciAoIDsgaSA8IGw7IGkrKyApIHsKKwkJCQlmb3IgKCBjdXIgPSB0aGlzWyBpIF07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkgeworCisJCQkJCS8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZyYWdtZW50cworCQkJCQlpZiAoIGN1ci5ub2RlVHlwZSA8IDExICYmICggdGFyZ2V0cyA/CisJCQkJCQl0YXJnZXRzLmluZGV4KCBjdXIgKSA+IC0xIDoKKworCQkJCQkJLy8gRG9uJ3QgcGFzcyBub24tZWxlbWVudHMgdG8gU2l6emxlCisJCQkJCQljdXIubm9kZVR5cGUgPT09IDEgJiYKKwkJCQkJCQlqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGN1ciwgc2VsZWN0b3JzICkgKSApIHsKKworCQkJCQkJbWF0Y2hlZC5wdXNoKCBjdXIgKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApOworCX0sCisKKwkvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluIHRoZSBzZXQKKwlpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7CisKKwkJLy8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnQKKwkJaWYgKCAhZWxlbSApIHsKKwkJCXJldHVybiAoIHRoaXNbIDAgXSAmJiB0aGlzWyAwIF0ucGFyZW50Tm9kZSApID8gdGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGggOiAtMTsKKwkJfQorCisJCS8vIEluZGV4IGluIHNlbGVjdG9yCisJCWlmICggdHlwZW9mIGVsZW0gPT09ICJzdHJpbmciICkgeworCQkJcmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApOworCQl9CisKKwkJLy8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50CisJCXJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsCisKKwkJCS8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZAorCQkJZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtCisJCSk7CisJfSwKKworCWFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkgeworCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soCisJCQlqUXVlcnkudW5pcXVlU29ydCgKKwkJCQlqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0KCksIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSApCisJCQkpCisJCSk7CisJfSwKKworCWFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKwkJcmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID8KKwkJCXRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoIHNlbGVjdG9yICkKKwkJKTsKKwl9Cit9ICk7CisKK2Z1bmN0aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkgeworCXdoaWxlICggKCBjdXIgPSBjdXJbIGRpciBdICkgJiYgY3VyLm5vZGVUeXBlICE9PSAxICkge30KKwlyZXR1cm4gY3VyOworfQorCitqUXVlcnkuZWFjaCggeworCXBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7CisJCXZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7CisJCXJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7CisJfSwKKwlwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJcmV0dXJuIGRpciggZWxlbSwgInBhcmVudE5vZGUiICk7CisJfSwKKwlwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKKwkJcmV0dXJuIGRpciggZWxlbSwgInBhcmVudE5vZGUiLCB1bnRpbCApOworCX0sCisJbmV4dDogZnVuY3Rpb24oIGVsZW0gKSB7CisJCXJldHVybiBzaWJsaW5nKCBlbGVtLCAibmV4dFNpYmxpbmciICk7CisJfSwKKwlwcmV2OiBmdW5jdGlvbiggZWxlbSApIHsKKwkJcmV0dXJuIHNpYmxpbmcoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7CisJfSwKKwluZXh0QWxsOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJcmV0dXJuIGRpciggZWxlbSwgIm5leHRTaWJsaW5nIiApOworCX0sCisJcHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7CisJCXJldHVybiBkaXIoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7CisJfSwKKwluZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKKwkJcmV0dXJuIGRpciggZWxlbSwgIm5leHRTaWJsaW5nIiwgdW50aWwgKTsKKwl9LAorCXByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkgeworCQlyZXR1cm4gZGlyKCBlbGVtLCAicHJldmlvdXNTaWJsaW5nIiwgdW50aWwgKTsKKwl9LAorCXNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJcmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTsKKwl9LAorCWNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJcmV0dXJuIHNpYmxpbmdzKCBlbGVtLmZpcnN0Q2hpbGQgKTsKKwl9LAorCWNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgaWYgKCBub2RlTmFtZSggZWxlbSwgImlmcmFtZSIgKSApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5LCBpT1MgNyBvbmx5LCBBbmRyb2lkIEJyb3dzZXIgPD00LjMgb25seQorICAgICAgICAvLyBUcmVhdCB0aGUgdGVtcGxhdGUgZWxlbWVudCBhcyBhIHJlZ3VsYXIgb25lIGluIGJyb3dzZXJzIHRoYXQKKyAgICAgICAgLy8gZG9uJ3Qgc3VwcG9ydCBpdC4KKyAgICAgICAgaWYgKCBub2RlTmFtZSggZWxlbSwgInRlbXBsYXRlIiApICkgeworICAgICAgICAgICAgZWxlbSA9IGVsZW0uY29udGVudCB8fCBlbGVtOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApOworCX0KK30sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHsKKwlqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7CisJCXZhciBtYXRjaGVkID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7CisKKwkJaWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSAiVW50aWwiICkgeworCQkJc2VsZWN0b3IgPSB1bnRpbDsKKwkJfQorCisJCWlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKKwkJCW1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApOworCQl9CisKKwkJaWYgKCB0aGlzLmxlbmd0aCA+IDEgKSB7CisKKwkJCS8vIFJlbW92ZSBkdXBsaWNhdGVzCisJCQlpZiAoICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gKSB7CisJCQkJalF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKTsKKwkJCX0KKworCQkJLy8gUmV2ZXJzZSBvcmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXMKKwkJCWlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHsKKwkJCQltYXRjaGVkLnJldmVyc2UoKTsKKwkJCX0KKwkJfQorCisJCXJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZCApOworCX07Cit9ICk7Cit2YXIgcm5vdGh0bWx3aGl0ZSA9ICggL1teXHgyMFx0XHJcblxmXSsvZyApOworCisKKworLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVkIG9uZXMKK2Z1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7CisJdmFyIG9iamVjdCA9IHt9OworCWpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkgeworCQlvYmplY3RbIGZsYWcgXSA9IHRydWU7CisJfSApOworCXJldHVybiBvYmplY3Q7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKyAqCisgKglvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2UgaG93CisgKgkJCXRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3QKKyAqCisgKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZQorICogImZpcmVkIiBtdWx0aXBsZSB0aW1lcy4KKyAqCisgKiBQb3NzaWJsZSBvcHRpb25zOgorICoKKyAqCW9uY2U6CQkJd2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKQorICoKKyAqCW1lbW9yeToJCQl3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkCisgKgkJCQkJYWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgIm1lbW9yaXplZCIKKyAqCQkJCQl2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZCkKKyAqCisgKgl1bmlxdWU6CQkJd2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpCisgKgorICoJc3RvcE9uRmFsc2U6CWludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZQorICoKKyAqLworalF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkgeworCisJLy8gQ29udmVydCBvcHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3QtZm9ybWF0dGVkIGlmIG5lZWRlZAorCS8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdCkKKwlvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09ICJzdHJpbmciID8KKwkJY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIDoKKwkJalF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTsKKworCXZhciAvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nCisJCWZpcmluZywKKworCQkvLyBMYXN0IGZpcmUgdmFsdWUgZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0cworCQltZW1vcnksCisKKwkJLy8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWQKKwkJZmlyZWQsCisKKwkJLy8gRmxhZyB0byBwcmV2ZW50IGZpcmluZworCQlsb2NrZWQsCisKKwkJLy8gQWN0dWFsIGNhbGxiYWNrIGxpc3QKKwkJbGlzdCA9IFtdLAorCisJCS8vIFF1ZXVlIG9mIGV4ZWN1dGlvbiBkYXRhIGZvciByZXBlYXRhYmxlIGxpc3RzCisJCXF1ZXVlID0gW10sCisKKwkJLy8gSW5kZXggb2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFjayAobW9kaWZpZWQgYnkgYWRkL3JlbW92ZSBhcyBuZWVkZWQpCisJCWZpcmluZ0luZGV4ID0gLTEsCisKKwkJLy8gRmlyZSBjYWxsYmFja3MKKwkJZmlyZSA9IGZ1bmN0aW9uKCkgeworCisJCQkvLyBFbmZvcmNlIHNpbmdsZS1maXJpbmcKKwkJCWxvY2tlZCA9IGxvY2tlZCB8fCBvcHRpb25zLm9uY2U7CisKKwkJCS8vIEV4ZWN1dGUgY2FsbGJhY2tzIGZvciBhbGwgcGVuZGluZyBleGVjdXRpb25zLAorCQkJLy8gcmVzcGVjdGluZyBmaXJpbmdJbmRleCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUgY2hhbmdlcworCQkJZmlyZWQgPSBmaXJpbmcgPSB0cnVlOworCQkJZm9yICggOyBxdWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4ID0gLTEgKSB7CisJCQkJbWVtb3J5ID0gcXVldWUuc2hpZnQoKTsKKwkJCQl3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHsKKworCQkJCQkvLyBSdW4gY2FsbGJhY2sgYW5kIGNoZWNrIGZvciBlYXJseSB0ZXJtaW5hdGlvbgorCQkJCQlpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAmJgorCQkJCQkJb3B0aW9ucy5zdG9wT25GYWxzZSApIHsKKworCQkJCQkJLy8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZQorCQkJCQkJZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aDsKKwkJCQkJCW1lbW9yeSA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQkvLyBGb3JnZXQgdGhlIGRhdGEgaWYgd2UncmUgZG9uZSB3aXRoIGl0CisJCQlpZiAoICFvcHRpb25zLm1lbW9yeSApIHsKKwkJCQltZW1vcnkgPSBmYWxzZTsKKwkJCX0KKworCQkJZmlyaW5nID0gZmFsc2U7CisKKwkJCS8vIENsZWFuIHVwIGlmIHdlJ3JlIGRvbmUgZmlyaW5nIGZvciBnb29kCisJCQlpZiAoIGxvY2tlZCApIHsKKworCQkJCS8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHMKKwkJCQlpZiAoIG1lbW9yeSApIHsKKwkJCQkJbGlzdCA9IFtdOworCisJCQkJLy8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVudAorCQkJCX0gZWxzZSB7CisJCQkJCWxpc3QgPSAiIjsKKwkJCQl9CisJCQl9CisJCX0sCisKKwkJLy8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3QKKwkJc2VsZiA9IHsKKworCQkJLy8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdAorCQkJYWRkOiBmdW5jdGlvbigpIHsKKwkJCQlpZiAoIGxpc3QgKSB7CisKKwkJCQkJLy8gSWYgd2UgaGF2ZSBtZW1vcnkgZnJvbSBhIHBhc3QgcnVuLCB3ZSBzaG91bGQgZmlyZSBhZnRlciBhZGRpbmcKKwkJCQkJaWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHsKKwkJCQkJCWZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxOworCQkJCQkJcXVldWUucHVzaCggbWVtb3J5ICk7CisJCQkJCX0KKworCQkJCQkoIGZ1bmN0aW9uIGFkZCggYXJncyApIHsKKwkJCQkJCWpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkgeworCQkJCQkJCWlmICggaXNGdW5jdGlvbiggYXJnICkgKSB7CisJCQkJCQkJCWlmICggIW9wdGlvbnMudW5pcXVlIHx8ICFzZWxmLmhhcyggYXJnICkgKSB7CisJCQkJCQkJCQlsaXN0LnB1c2goIGFyZyApOworCQkJCQkJCQl9CisJCQkJCQkJfSBlbHNlIGlmICggYXJnICYmIGFyZy5sZW5ndGggJiYgdG9UeXBlKCBhcmcgKSAhPT0gInN0cmluZyIgKSB7CisKKwkJCQkJCQkJLy8gSW5zcGVjdCByZWN1cnNpdmVseQorCQkJCQkJCQlhZGQoIGFyZyApOworCQkJCQkJCX0KKwkJCQkJCX0gKTsKKwkJCQkJfSApKCBhcmd1bWVudHMgKTsKKworCQkJCQlpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkgeworCQkJCQkJZmlyZSgpOworCQkJCQl9CisJCQkJfQorCQkJCXJldHVybiB0aGlzOworCQkJfSwKKworCQkJLy8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdAorCQkJcmVtb3ZlOiBmdW5jdGlvbigpIHsKKwkJCQlqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkgeworCQkJCQl2YXIgaW5kZXg7CisJCQkJCXdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkgeworCQkJCQkJbGlzdC5zcGxpY2UoIGluZGV4LCAxICk7CisKKwkJCQkJCS8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlcworCQkJCQkJaWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHsKKwkJCQkJCQlmaXJpbmdJbmRleC0tOworCQkJCQkJfQorCQkJCQl9CisJCQkJfSApOworCQkJCXJldHVybiB0aGlzOworCQkJfSwKKworCQkJLy8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC4KKwkJCS8vIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLgorCQkJaGFzOiBmdW5jdGlvbiggZm4gKSB7CisJCQkJcmV0dXJuIGZuID8KKwkJCQkJalF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6CisJCQkJCWxpc3QubGVuZ3RoID4gMDsKKwkJCX0sCisKKwkJCS8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3QKKwkJCWVtcHR5OiBmdW5jdGlvbigpIHsKKwkJCQlpZiAoIGxpc3QgKSB7CisJCQkJCWxpc3QgPSBbXTsKKwkJCQl9CisJCQkJcmV0dXJuIHRoaXM7CisJCQl9LAorCisJCQkvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkCisJCQkvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnMKKwkJCS8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlcworCQkJZGlzYWJsZTogZnVuY3Rpb24oKSB7CisJCQkJbG9ja2VkID0gcXVldWUgPSBbXTsKKwkJCQlsaXN0ID0gbWVtb3J5ID0gIiI7CisJCQkJcmV0dXJuIHRoaXM7CisJCQl9LAorCQkJZGlzYWJsZWQ6IGZ1bmN0aW9uKCkgeworCQkJCXJldHVybiAhbGlzdDsKKwkJCX0sCisKKwkJCS8vIERpc2FibGUgLmZpcmUKKwkJCS8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpCisJCQkvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zCisJCQlsb2NrOiBmdW5jdGlvbigpIHsKKwkJCQlsb2NrZWQgPSBxdWV1ZSA9IFtdOworCQkJCWlmICggIW1lbW9yeSAmJiAhZmlyaW5nICkgeworCQkJCQlsaXN0ID0gbWVtb3J5ID0gIiI7CisJCQkJfQorCQkJCXJldHVybiB0aGlzOworCQkJfSwKKwkJCWxvY2tlZDogZnVuY3Rpb24oKSB7CisJCQkJcmV0dXJuICEhbG9ja2VkOworCQkJfSwKKworCQkJLy8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50cworCQkJZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkgeworCQkJCWlmICggIWxvY2tlZCApIHsKKwkJCQkJYXJncyA9IGFyZ3MgfHwgW107CisJCQkJCWFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07CisJCQkJCXF1ZXVlLnB1c2goIGFyZ3MgKTsKKwkJCQkJaWYgKCAhZmlyaW5nICkgeworCQkJCQkJZmlyZSgpOworCQkJCQl9CisJCQkJfQorCQkJCXJldHVybiB0aGlzOworCQkJfSwKKworCQkJLy8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMKKwkJCWZpcmU6IGZ1bmN0aW9uKCkgeworCQkJCXNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApOworCQkJCXJldHVybiB0aGlzOworCQkJfSwKKworCQkJLy8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlCisJCQlmaXJlZDogZnVuY3Rpb24oKSB7CisJCQkJcmV0dXJuICEhZmlyZWQ7CisJCQl9CisJCX07CisKKwlyZXR1cm4gc2VsZjsKK307CisKKworZnVuY3Rpb24gSWRlbnRpdHkoIHYgKSB7CisJcmV0dXJuIHY7Cit9CitmdW5jdGlvbiBUaHJvd2VyKCBleCApIHsKKwl0aHJvdyBleDsKK30KKworZnVuY3Rpb24gYWRvcHRWYWx1ZSggdmFsdWUsIHJlc29sdmUsIHJlamVjdCwgbm9WYWx1ZSApIHsKKwl2YXIgbWV0aG9kOworCisJdHJ5IHsKKworCQkvLyBDaGVjayBmb3IgcHJvbWlzZSBhc3BlY3QgZmlyc3QgdG8gcHJpdmlsZWdlIHN5bmNocm9ub3VzIGJlaGF2aW9yCisJCWlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS5wcm9taXNlICkgKSApIHsKKwkJCW1ldGhvZC5jYWxsKCB2YWx1ZSApLmRvbmUoIHJlc29sdmUgKS5mYWlsKCByZWplY3QgKTsKKworCQkvLyBPdGhlciB0aGVuYWJsZXMKKwkJfSBlbHNlIGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS50aGVuICkgKSApIHsKKwkJCW1ldGhvZC5jYWxsKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0ICk7CisKKwkJLy8gT3RoZXIgbm9uLXRoZW5hYmxlcworCQl9IGVsc2UgeworCisJCQkvLyBDb250cm9sIGByZXNvbHZlYCBhcmd1bWVudHMgYnkgbGV0dGluZyBBcnJheSNzbGljZSBjYXN0IGJvb2xlYW4gYG5vVmFsdWVgIHRvIGludGVnZXI6CisJCQkvLyAqIGZhbHNlOiBbIHZhbHVlIF0uc2xpY2UoIDAgKSA9PiByZXNvbHZlKCB2YWx1ZSApCisJCQkvLyAqIHRydWU6IFsgdmFsdWUgXS5zbGljZSggMSApID0+IHJlc29sdmUoKQorCQkJcmVzb2x2ZS5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0uc2xpY2UoIG5vVmFsdWUgKSApOworCQl9CisKKwkvLyBGb3IgUHJvbWlzZXMvQSssIGNvbnZlcnQgZXhjZXB0aW9ucyBpbnRvIHJlamVjdGlvbnMKKwkvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0IHVud3JhcCB0aGVuYWJsZXMsIHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5nIGluCisJLy8gRGVmZXJyZWQjdGhlbiB0byBjb25kaXRpb25hbGx5IHN1cHByZXNzIHJlamVjdGlvbi4KKwl9IGNhdGNoICggdmFsdWUgKSB7CisKKwkJLy8gU3VwcG9ydDogQW5kcm9pZCA0LjAgb25seQorCQkvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMgaW52b2tlZCB3aXRob3V0IC5jYWxsLy5hcHBseSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0CisJCXJlamVjdC5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0gKTsKKwl9Cit9CisKK2pRdWVyeS5leHRlbmQoIHsKKworCURlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHsKKwkJdmFyIHR1cGxlcyA9IFsKKworCQkJCS8vIGFjdGlvbiwgYWRkIGxpc3RlbmVyLCBjYWxsYmFja3MsCisJCQkJLy8gLi4uIC50aGVuIGhhbmRsZXJzLCBhcmd1bWVudCBpbmRleCwgW2ZpbmFsIHN0YXRlXQorCQkJCVsgIm5vdGlmeSIsICJwcm9ncmVzcyIsIGpRdWVyeS5DYWxsYmFja3MoICJtZW1vcnkiICksCisJCQkJCWpRdWVyeS5DYWxsYmFja3MoICJtZW1vcnkiICksIDIgXSwKKwkJCQlbICJyZXNvbHZlIiwgImRvbmUiLCBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICksCisJCQkJCWpRdWVyeS5DYWxsYmFja3MoICJvbmNlIG1lbW9yeSIgKSwgMCwgInJlc29sdmVkIiBdLAorCQkJCVsgInJlamVjdCIsICJmYWlsIiwgalF1ZXJ5LkNhbGxiYWNrcyggIm9uY2UgbWVtb3J5IiApLAorCQkJCQlqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICksIDEsICJyZWplY3RlZCIgXQorCQkJXSwKKwkJCXN0YXRlID0gInBlbmRpbmciLAorCQkJcHJvbWlzZSA9IHsKKwkJCQlzdGF0ZTogZnVuY3Rpb24oKSB7CisJCQkJCXJldHVybiBzdGF0ZTsKKwkJCQl9LAorCQkJCWFsd2F5czogZnVuY3Rpb24oKSB7CisJCQkJCWRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApOworCQkJCQlyZXR1cm4gdGhpczsKKwkJCQl9LAorCQkJCSJjYXRjaCI6IGZ1bmN0aW9uKCBmbiApIHsKKwkJCQkJcmV0dXJuIHByb21pc2UudGhlbiggbnVsbCwgZm4gKTsKKwkJCQl9LAorCisJCQkJLy8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdAorCQkJCXBpcGU6IGZ1bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHsKKwkJCQkJdmFyIGZucyA9IGFyZ3VtZW50czsKKworCQkJCQlyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7CisJCQkJCQlqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7CisKKwkJCQkJCQkvLyBNYXAgdHVwbGVzIChwcm9ncmVzcywgZG9uZSwgZmFpbCkgdG8gYXJndW1lbnRzIChkb25lLCBmYWlsLCBwcm9ncmVzcykKKwkJCQkJCQl2YXIgZm4gPSBpc0Z1bmN0aW9uKCBmbnNbIHR1cGxlWyA0IF0gXSApICYmIGZuc1sgdHVwbGVbIDQgXSBdOworCisJCQkJCQkJLy8gZGVmZXJyZWQucHJvZ3Jlc3MoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIubm90aWZ5IH0pCisJCQkJCQkJLy8gZGVmZXJyZWQuZG9uZShmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZXNvbHZlIH0pCisJCQkJCQkJLy8gZGVmZXJyZWQuZmFpbChmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZWplY3QgfSkKKwkJCQkJCQlkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHsKKwkJCQkJCQkJdmFyIHJldHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworCQkJCQkJCQlpZiAoIHJldHVybmVkICYmIGlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHsKKwkJCQkJCQkJCXJldHVybmVkLnByb21pc2UoKQorCQkJCQkJCQkJCS5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5ICkKKwkJCQkJCQkJCQkuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApCisJCQkJCQkJCQkJLmZhaWwoIG5ld0RlZmVyLnJlamVjdCApOworCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJbmV3RGVmZXJbIHR1cGxlWyAwIF0gKyAiV2l0aCIgXSgKKwkJCQkJCQkJCQl0aGlzLAorCQkJCQkJCQkJCWZuID8gWyByZXR1cm5lZCBdIDogYXJndW1lbnRzCisJCQkJCQkJCQkpOworCQkJCQkJCQl9CisJCQkJCQkJfSApOworCQkJCQkJfSApOworCQkJCQkJZm5zID0gbnVsbDsKKwkJCQkJfSApLnByb21pc2UoKTsKKwkJCQl9LAorCQkJCXRoZW46IGZ1bmN0aW9uKCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgb25Qcm9ncmVzcyApIHsKKwkJCQkJdmFyIG1heERlcHRoID0gMDsKKwkJCQkJZnVuY3Rpb24gcmVzb2x2ZSggZGVwdGgsIGRlZmVycmVkLCBoYW5kbGVyLCBzcGVjaWFsICkgeworCQkJCQkJcmV0dXJuIGZ1bmN0aW9uKCkgeworCQkJCQkJCXZhciB0aGF0ID0gdGhpcywKKwkJCQkJCQkJYXJncyA9IGFyZ3VtZW50cywKKwkJCQkJCQkJbWlnaHRUaHJvdyA9IGZ1bmN0aW9uKCkgeworCQkJCQkJCQkJdmFyIHJldHVybmVkLCB0aGVuOworCisJCQkJCQkJCQkvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMworCQkJCQkJCQkJLy8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTkKKwkJCQkJCQkJCS8vIElnbm9yZSBkb3VibGUtcmVzb2x1dGlvbiBhdHRlbXB0cworCQkJCQkJCQkJaWYgKCBkZXB0aCA8IG1heERlcHRoICkgeworCQkJCQkJCQkJCXJldHVybjsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJcmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7CisKKwkJCQkJCQkJCS8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjEKKwkJCQkJCQkJCS8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4CisJCQkJCQkJCQlpZiAoIHJldHVybmVkID09PSBkZWZlcnJlZC5wcm9taXNlKCkgKSB7CisJCQkJCQkJCQkJdGhyb3cgbmV3IFR5cGVFcnJvciggIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvbiIgKTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJLy8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41CisJCQkJCQkJCQkvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NAorCQkJCQkJCQkJLy8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzUKKwkJCQkJCQkJCS8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2UKKwkJCQkJCQkJCXRoZW4gPSByZXR1cm5lZCAmJgorCisJCQkJCQkJCQkJLy8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuNAorCQkJCQkJCQkJCS8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTY0CisJCQkJCQkJCQkJLy8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZW5hYmlsaXR5CisJCQkJCQkJCQkJKCB0eXBlb2YgcmV0dXJuZWQgPT09ICJvYmplY3QiIHx8CisJCQkJCQkJCQkJCXR5cGVvZiByZXR1cm5lZCA9PT0gImZ1bmN0aW9uIiApICYmCisJCQkJCQkJCQkJcmV0dXJuZWQudGhlbjsKKworCQkJCQkJCQkJLy8gSGFuZGxlIGEgcmV0dXJuZWQgdGhlbmFibGUKKwkJCQkJCQkJCWlmICggaXNGdW5jdGlvbiggdGhlbiApICkgeworCisJCQkJCQkJCQkJLy8gU3BlY2lhbCBwcm9jZXNzb3JzIChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvbgorCQkJCQkJCQkJCWlmICggc3BlY2lhbCApIHsKKwkJCQkJCQkJCQkJdGhlbi5jYWxsKAorCQkJCQkJCQkJCQkJcmV0dXJuZWQsCisJCQkJCQkJCQkJCQlyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksCisJCQkJCQkJCQkJCQlyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKQorCQkJCQkJCQkJCQkpOworCisJCQkJCQkJCQkJLy8gTm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzCisJCQkJCQkJCQkJfSBlbHNlIHsKKworCQkJCQkJCQkJCQkvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24gdmFsdWVzCisJCQkJCQkJCQkJCW1heERlcHRoKys7CisKKwkJCQkJCQkJCQkJdGhlbi5jYWxsKAorCQkJCQkJCQkJCQkJcmV0dXJuZWQsCisJCQkJCQkJCQkJCQlyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksCisJCQkJCQkJCQkJCQlyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKSwKKwkJCQkJCQkJCQkJCXJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksCisJCQkJCQkJCQkJCQkJZGVmZXJyZWQubm90aWZ5V2l0aCApCisJCQkJCQkJCQkJCSk7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkvLyBIYW5kbGUgYWxsIG90aGVyIHJldHVybmVkIHZhbHVlcworCQkJCQkJCQkJfSBlbHNlIHsKKworCQkJCQkJCQkJCS8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHQKKwkJCQkJCQkJCQkvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcikKKwkJCQkJCQkJCQlpZiAoIGhhbmRsZXIgIT09IElkZW50aXR5ICkgeworCQkJCQkJCQkJCQl0aGF0ID0gdW5kZWZpbmVkOworCQkJCQkJCQkJCQlhcmdzID0gWyByZXR1cm5lZCBdOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCS8vIFByb2Nlc3MgdGhlIHZhbHVlKHMpCisJCQkJCQkJCQkJLy8gRGVmYXVsdCBwcm9jZXNzIGlzIHJlc29sdmUKKwkJCQkJCQkJCQkoIHNwZWNpYWwgfHwgZGVmZXJyZWQucmVzb2x2ZVdpdGggKSggdGhhdCwgYXJncyApOworCQkJCQkJCQkJfQorCQkJCQkJCQl9LAorCisJCQkJCQkJCS8vIE9ubHkgbm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGNhdGNoIGFuZCByZWplY3QgZXhjZXB0aW9ucworCQkJCQkJCQlwcm9jZXNzID0gc3BlY2lhbCA/CisJCQkJCQkJCQltaWdodFRocm93IDoKKwkJCQkJCQkJCWZ1bmN0aW9uKCkgeworCQkJCQkJCQkJCXRyeSB7CisJCQkJCQkJCQkJCW1pZ2h0VGhyb3coKTsKKwkJCQkJCQkJCQl9IGNhdGNoICggZSApIHsKKworCQkJCQkJCQkJCQlpZiAoIGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rICkgeworCQkJCQkJCQkJCQkJalF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2soIGUsCisJCQkJCQkJCQkJCQkJcHJvY2Vzcy5zdGFja1RyYWNlICk7CisJCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCQkvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuNC4xCisJCQkJCQkJCQkJCS8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTYxCisJCQkJCQkJCQkJCS8vIElnbm9yZSBwb3N0LXJlc29sdXRpb24gZXhjZXB0aW9ucworCQkJCQkJCQkJCQlpZiAoIGRlcHRoICsgMSA+PSBtYXhEZXB0aCApIHsKKworCQkJCQkJCQkJCQkJLy8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dAorCQkJCQkJCQkJCQkJLy8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpCisJCQkJCQkJCQkJCQlpZiAoIGhhbmRsZXIgIT09IFRocm93ZXIgKSB7CisJCQkJCQkJCQkJCQkJdGhhdCA9IHVuZGVmaW5lZDsKKwkJCQkJCQkJCQkJCQlhcmdzID0gWyBlIF07CisJCQkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQkJCWRlZmVycmVkLnJlamVjdFdpdGgoIHRoYXQsIGFyZ3MgKTsKKwkJCQkJCQkJCQkJfQorCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX07CisKKwkJCQkJCQkvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMQorCQkJCQkJCS8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU3CisJCQkJCQkJLy8gUmUtcmVzb2x2ZSBwcm9taXNlcyBpbW1lZGlhdGVseSB0byBkb2RnZSBmYWxzZSByZWplY3Rpb24gZnJvbQorCQkJCQkJCS8vIHN1YnNlcXVlbnQgZXJyb3JzCisJCQkJCQkJaWYgKCBkZXB0aCApIHsKKwkJCQkJCQkJcHJvY2VzcygpOworCQkJCQkJCX0gZWxzZSB7CisKKwkJCQkJCQkJLy8gQ2FsbCBhbiBvcHRpb25hbCBob29rIHRvIHJlY29yZCB0aGUgc3RhY2ssIGluIGNhc2Ugb2YgZXhjZXB0aW9uCisJCQkJCQkJCS8vIHNpbmNlIGl0J3Mgb3RoZXJ3aXNlIGxvc3Qgd2hlbiBleGVjdXRpb24gZ29lcyBhc3luYworCQkJCQkJCQlpZiAoIGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2sgKSB7CisJCQkJCQkJCQlwcm9jZXNzLnN0YWNrVHJhY2UgPSBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCk7CisJCQkJCQkJCX0KKwkJCQkJCQkJd2luZG93LnNldFRpbWVvdXQoIHByb2Nlc3MgKTsKKwkJCQkJCQl9CisJCQkJCQl9OworCQkJCQl9CisKKwkJCQkJcmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkgeworCisJCQkJCQkvLyBwcm9ncmVzc19oYW5kbGVycy5hZGQoIC4uLiApCisJCQkJCQl0dXBsZXNbIDAgXVsgMyBdLmFkZCgKKwkJCQkJCQlyZXNvbHZlKAorCQkJCQkJCQkwLAorCQkJCQkJCQluZXdEZWZlciwKKwkJCQkJCQkJaXNGdW5jdGlvbiggb25Qcm9ncmVzcyApID8KKwkJCQkJCQkJCW9uUHJvZ3Jlc3MgOgorCQkJCQkJCQkJSWRlbnRpdHksCisJCQkJCQkJCW5ld0RlZmVyLm5vdGlmeVdpdGgKKwkJCQkJCQkpCisJCQkJCQkpOworCisJCQkJCQkvLyBmdWxmaWxsZWRfaGFuZGxlcnMuYWRkKCAuLi4gKQorCQkJCQkJdHVwbGVzWyAxIF1bIDMgXS5hZGQoCisJCQkJCQkJcmVzb2x2ZSgKKwkJCQkJCQkJMCwKKwkJCQkJCQkJbmV3RGVmZXIsCisJCQkJCQkJCWlzRnVuY3Rpb24oIG9uRnVsZmlsbGVkICkgPworCQkJCQkJCQkJb25GdWxmaWxsZWQgOgorCQkJCQkJCQkJSWRlbnRpdHkKKwkJCQkJCQkpCisJCQkJCQkpOworCisJCQkJCQkvLyByZWplY3RlZF9oYW5kbGVycy5hZGQoIC4uLiApCisJCQkJCQl0dXBsZXNbIDIgXVsgMyBdLmFkZCgKKwkJCQkJCQlyZXNvbHZlKAorCQkJCQkJCQkwLAorCQkJCQkJCQluZXdEZWZlciwKKwkJCQkJCQkJaXNGdW5jdGlvbiggb25SZWplY3RlZCApID8KKwkJCQkJCQkJCW9uUmVqZWN0ZWQgOgorCQkJCQkJCQkJVGhyb3dlcgorCQkJCQkJCSkKKwkJCQkJCSk7CisJCQkJCX0gKS5wcm9taXNlKCk7CisJCQkJfSwKKworCQkJCS8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWQKKwkJCQkvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBhZGRlZCB0byB0aGUgb2JqZWN0CisJCQkJcHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHsKKwkJCQkJcmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlOworCQkJCX0KKwkJCX0sCisJCQlkZWZlcnJlZCA9IHt9OworCisJCS8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHMKKwkJalF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkgeworCQkJdmFyIGxpc3QgPSB0dXBsZVsgMiBdLAorCQkJCXN0YXRlU3RyaW5nID0gdHVwbGVbIDUgXTsKKworCQkJLy8gcHJvbWlzZS5wcm9ncmVzcyA9IGxpc3QuYWRkCisJCQkvLyBwcm9taXNlLmRvbmUgPSBsaXN0LmFkZAorCQkJLy8gcHJvbWlzZS5mYWlsID0gbGlzdC5hZGQKKwkJCXByb21pc2VbIHR1cGxlWyAxIF0gXSA9IGxpc3QuYWRkOworCisJCQkvLyBIYW5kbGUgc3RhdGUKKwkJCWlmICggc3RhdGVTdHJpbmcgKSB7CisJCQkJbGlzdC5hZGQoCisJCQkJCWZ1bmN0aW9uKCkgeworCisJCQkJCQkvLyBzdGF0ZSA9ICJyZXNvbHZlZCIgKGkuZS4sIGZ1bGZpbGxlZCkKKwkJCQkJCS8vIHN0YXRlID0gInJlamVjdGVkIgorCQkJCQkJc3RhdGUgPSBzdGF0ZVN0cmluZzsKKwkJCQkJfSwKKworCQkJCQkvLyByZWplY3RlZF9jYWxsYmFja3MuZGlzYWJsZQorCQkJCQkvLyBmdWxmaWxsZWRfY2FsbGJhY2tzLmRpc2FibGUKKwkJCQkJdHVwbGVzWyAzIC0gaSBdWyAyIF0uZGlzYWJsZSwKKworCQkJCQkvLyByZWplY3RlZF9oYW5kbGVycy5kaXNhYmxlCisJCQkJCS8vIGZ1bGZpbGxlZF9oYW5kbGVycy5kaXNhYmxlCisJCQkJCXR1cGxlc1sgMyAtIGkgXVsgMyBdLmRpc2FibGUsCisKKwkJCQkJLy8gcHJvZ3Jlc3NfY2FsbGJhY2tzLmxvY2sKKwkJCQkJdHVwbGVzWyAwIF1bIDIgXS5sb2NrLAorCisJCQkJCS8vIHByb2dyZXNzX2hhbmRsZXJzLmxvY2sKKwkJCQkJdHVwbGVzWyAwIF1bIDMgXS5sb2NrCisJCQkJKTsKKwkJCX0KKworCQkJLy8gcHJvZ3Jlc3NfaGFuZGxlcnMuZmlyZQorCQkJLy8gZnVsZmlsbGVkX2hhbmRsZXJzLmZpcmUKKwkJCS8vIHJlamVjdGVkX2hhbmRsZXJzLmZpcmUKKwkJCWxpc3QuYWRkKCB0dXBsZVsgMyBdLmZpcmUgKTsKKworCQkJLy8gZGVmZXJyZWQubm90aWZ5ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLm5vdGlmeVdpdGgoLi4uKSB9CisJCQkvLyBkZWZlcnJlZC5yZXNvbHZlID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlc29sdmVXaXRoKC4uLikgfQorCQkJLy8gZGVmZXJyZWQucmVqZWN0ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlamVjdFdpdGgoLi4uKSB9CisJCQlkZWZlcnJlZFsgdHVwbGVbIDAgXSBdID0gZnVuY3Rpb24oKSB7CisJCQkJZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyAiV2l0aCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyB1bmRlZmluZWQgOiB0aGlzLCBhcmd1bWVudHMgKTsKKwkJCQlyZXR1cm4gdGhpczsKKwkJCX07CisKKwkJCS8vIGRlZmVycmVkLm5vdGlmeVdpdGggPSBsaXN0LmZpcmVXaXRoCisJCQkvLyBkZWZlcnJlZC5yZXNvbHZlV2l0aCA9IGxpc3QuZmlyZVdpdGgKKwkJCS8vIGRlZmVycmVkLnJlamVjdFdpdGggPSBsaXN0LmZpcmVXaXRoCisJCQlkZWZlcnJlZFsgdHVwbGVbIDAgXSArICJXaXRoIiBdID0gbGlzdC5maXJlV2l0aDsKKwkJfSApOworCisJCS8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZQorCQlwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7CisKKwkJLy8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueQorCQlpZiAoIGZ1bmMgKSB7CisJCQlmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApOworCQl9CisKKwkJLy8gQWxsIGRvbmUhCisJCXJldHVybiBkZWZlcnJlZDsKKwl9LAorCisJLy8gRGVmZXJyZWQgaGVscGVyCisJd2hlbjogZnVuY3Rpb24oIHNpbmdsZVZhbHVlICkgeworCQl2YXIKKworCQkJLy8gY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzCisJCQlyZW1haW5pbmcgPSBhcmd1bWVudHMubGVuZ3RoLAorCisJCQkvLyBjb3VudCBvZiB1bnByb2Nlc3NlZCBhcmd1bWVudHMKKwkJCWkgPSByZW1haW5pbmcsCisKKwkJCS8vIHN1Ym9yZGluYXRlIGZ1bGZpbGxtZW50IGRhdGEKKwkJCXJlc29sdmVDb250ZXh0cyA9IEFycmF5KCBpICksCisJCQlyZXNvbHZlVmFsdWVzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksCisKKwkJCS8vIHRoZSBtYXN0ZXIgRGVmZXJyZWQKKwkJCW1hc3RlciA9IGpRdWVyeS5EZWZlcnJlZCgpLAorCisJCQkvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5CisJCQl1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7CisJCQkJcmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHsKKwkJCQkJcmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzOworCQkJCQlyZXNvbHZlVmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7CisJCQkJCWlmICggISggLS1yZW1haW5pbmcgKSApIHsKKwkJCQkJCW1hc3Rlci5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7CisJCQkJCX0KKwkJCQl9OworCQkJfTsKKworCQkvLyBTaW5nbGUtIGFuZCBlbXB0eSBhcmd1bWVudHMgYXJlIGFkb3B0ZWQgbGlrZSBQcm9taXNlLnJlc29sdmUKKwkJaWYgKCByZW1haW5pbmcgPD0gMSApIHsKKwkJCWFkb3B0VmFsdWUoIHNpbmdsZVZhbHVlLCBtYXN0ZXIuZG9uZSggdXBkYXRlRnVuYyggaSApICkucmVzb2x2ZSwgbWFzdGVyLnJlamVjdCwKKwkJCQkhcmVtYWluaW5nICk7CisKKwkJCS8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFibGVzIChjZi4gZ2gtMzAwMCkKKwkJCWlmICggbWFzdGVyLnN0YXRlKCkgPT09ICJwZW5kaW5nIiB8fAorCQkJCWlzRnVuY3Rpb24oIHJlc29sdmVWYWx1ZXNbIGkgXSAmJiByZXNvbHZlVmFsdWVzWyBpIF0udGhlbiApICkgeworCisJCQkJcmV0dXJuIG1hc3Rlci50aGVuKCk7CisJCQl9CisJCX0KKworCQkvLyBNdWx0aXBsZSBhcmd1bWVudHMgYXJlIGFnZ3JlZ2F0ZWQgbGlrZSBQcm9taXNlLmFsbCBhcnJheSBlbGVtZW50cworCQl3aGlsZSAoIGktLSApIHsKKwkJCWFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBtYXN0ZXIucmVqZWN0ICk7CisJCX0KKworCQlyZXR1cm4gbWFzdGVyLnByb21pc2UoKTsKKwl9Cit9ICk7CisKKworLy8gVGhlc2UgdXN1YWxseSBpbmRpY2F0ZSBhIHByb2dyYW1tZXIgbWlzdGFrZSBkdXJpbmcgZGV2ZWxvcG1lbnQsCisvLyB3YXJuIGFib3V0IHRoZW0gQVNBUCByYXRoZXIgdGhhbiBzd2FsbG93aW5nIHRoZW0gYnkgZGVmYXVsdC4KK3ZhciByZXJyb3JOYW1lcyA9IC9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvOworCitqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayA9IGZ1bmN0aW9uKCBlcnJvciwgc3RhY2sgKSB7CisKKwkvLyBTdXBwb3J0OiBJRSA4IC0gOSBvbmx5CisJLy8gQ29uc29sZSBleGlzdHMgd2hlbiBkZXYgdG9vbHMgYXJlIG9wZW4sIHdoaWNoIGNhbiBoYXBwZW4gYXQgYW55IHRpbWUKKwlpZiAoIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLndhcm4gJiYgZXJyb3IgJiYgcmVycm9yTmFtZXMudGVzdCggZXJyb3IubmFtZSApICkgeworCQl3aW5kb3cuY29uc29sZS53YXJuKCAialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogIiArIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBzdGFjayApOworCX0KK307CisKKworCisKK2pRdWVyeS5yZWFkeUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKCBlcnJvciApIHsKKwl3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7CisJCXRocm93IGVycm9yOworCX0gKTsKK307CisKKworCisKKy8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeQordmFyIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpOworCitqUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlvbiggZm4gKSB7CisKKwlyZWFkeUxpc3QKKwkJLnRoZW4oIGZuICkKKworCQkvLyBXcmFwIGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiBpbiBhIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIGxvb2t1cAorCQkvLyBoYXBwZW5zIGF0IHRoZSB0aW1lIG9mIGVycm9yIGhhbmRsaW5nIGluc3RlYWQgb2YgY2FsbGJhY2sKKwkJLy8gcmVnaXN0cmF0aW9uLgorCQkuY2F0Y2goIGZ1bmN0aW9uKCBlcnJvciApIHsKKwkJCWpRdWVyeS5yZWFkeUV4Y2VwdGlvbiggZXJyb3IgKTsKKwkJfSApOworCisJcmV0dXJuIHRoaXM7Cit9OworCitqUXVlcnkuZXh0ZW5kKCB7CisKKwkvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLgorCWlzUmVhZHk6IGZhbHNlLAorCisJLy8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZQorCS8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxCisJcmVhZHlXYWl0OiAxLAorCisJLy8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeQorCXJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHsKKworCQkvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5CisJCWlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkgeworCQkJcmV0dXJuOworCQl9CisKKwkJLy8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5CisJCWpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTsKKworCQkvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZQorCQlpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHsKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGUKKwkJcmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApOworCX0KK30gKTsKKworalF1ZXJ5LnJlYWR5LnRoZW4gPSByZWFkeUxpc3QudGhlbjsKKworLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2QKK2Z1bmN0aW9uIGNvbXBsZXRlZCgpIHsKKwlkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIGNvbXBsZXRlZCApOworCXdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCAibG9hZCIsIGNvbXBsZXRlZCApOworCWpRdWVyeS5yZWFkeSgpOworfQorCisvLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZAorLy8gYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuCisvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMCBvbmx5CisvLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyAiaW50ZXJhY3RpdmUiIHRvbyBzb29uCitpZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgfHwKKwkoIGRvY3VtZW50LnJlYWR5U3RhdGUgIT09ICJsb2FkaW5nIiAmJiAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsICkgKSB7CisKKwkvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHkKKwl3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7CisKK30gZWxzZSB7CisKKwkvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrCisJZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggIkRPTUNvbnRlbnRMb2FkZWQiLCBjb21wbGV0ZWQgKTsKKworCS8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrCisJd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICJsb2FkIiwgY29tcGxldGVkICk7Cit9CisKKworCisKKy8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvbgorLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uCit2YXIgYWNjZXNzID0gZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBlbXB0eUdldCwgcmF3ICkgeworCXZhciBpID0gMCwKKwkJbGVuID0gZWxlbXMubGVuZ3RoLAorCQlidWxrID0ga2V5ID09IG51bGw7CisKKwkvLyBTZXRzIG1hbnkgdmFsdWVzCisJaWYgKCB0b1R5cGUoIGtleSApID09PSAib2JqZWN0IiApIHsKKwkJY2hhaW5hYmxlID0gdHJ1ZTsKKwkJZm9yICggaSBpbiBrZXkgKSB7CisJCQlhY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTsKKwkJfQorCisJLy8gU2V0cyBvbmUgdmFsdWUKKwl9IGVsc2UgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgeworCQljaGFpbmFibGUgPSB0cnVlOworCisJCWlmICggIWlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CisJCQlyYXcgPSB0cnVlOworCQl9CisKKwkJaWYgKCBidWxrICkgeworCisJCQkvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXQKKwkJCWlmICggcmF3ICkgeworCQkJCWZuLmNhbGwoIGVsZW1zLCB2YWx1ZSApOworCQkJCWZuID0gbnVsbDsKKworCQkJLy8gLi4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlcworCQkJfSBlbHNlIHsKKwkJCQlidWxrID0gZm47CisJCQkJZm4gPSBmdW5jdGlvbiggZWxlbSwga2V5LCB2YWx1ZSApIHsKKwkJCQkJcmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7CisJCQkJfTsKKwkJCX0KKwkJfQorCisJCWlmICggZm4gKSB7CisJCQlmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKwkJCQlmbigKKwkJCQkJZWxlbXNbIGkgXSwga2V5LCByYXcgPworCQkJCQl2YWx1ZSA6CisJCQkJCXZhbHVlLmNhbGwoIGVsZW1zWyBpIF0sIGksIGZuKCBlbGVtc1sgaSBdLCBrZXkgKSApCisJCQkJKTsKKwkJCX0KKwkJfQorCX0KKworCWlmICggY2hhaW5hYmxlICkgeworCQlyZXR1cm4gZWxlbXM7CisJfQorCisJLy8gR2V0cworCWlmICggYnVsayApIHsKKwkJcmV0dXJuIGZuLmNhbGwoIGVsZW1zICk7CisJfQorCisJcmV0dXJuIGxlbiA/IGZuKCBlbGVtc1sgMCBdLCBrZXkgKSA6IGVtcHR5R2V0OworfTsKKworCisvLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmcKK3ZhciBybXNQcmVmaXggPSAvXi1tcy0vLAorCXJkYXNoQWxwaGEgPSAvLShbYS16XSkvZzsKKworLy8gVXNlZCBieSBjYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpCitmdW5jdGlvbiBmY2FtZWxDYXNlKCBhbGwsIGxldHRlciApIHsKKwlyZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7Cit9CisKKy8vIENvbnZlcnQgZGFzaGVkIHRvIGNhbWVsQ2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXMKKy8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTUKKy8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgjOTU3MikKK2Z1bmN0aW9uIGNhbWVsQ2FzZSggc3RyaW5nICkgeworCXJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCAibXMtIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTsKK30KK3ZhciBhY2NlcHREYXRhID0gZnVuY3Rpb24oIG93bmVyICkgeworCisJLy8gQWNjZXB0cyBvbmx5OgorCS8vICAtIE5vZGUKKwkvLyAgICAtIE5vZGUuRUxFTUVOVF9OT0RFCisJLy8gICAgLSBOb2RlLkRPQ1VNRU5UX05PREUKKwkvLyAgLSBPYmplY3QKKwkvLyAgICAtIEFueQorCXJldHVybiBvd25lci5ub2RlVHlwZSA9PT0gMSB8fCBvd25lci5ub2RlVHlwZSA9PT0gOSB8fCAhKCArb3duZXIubm9kZVR5cGUgKTsKK307CisKKworCisKK2Z1bmN0aW9uIERhdGEoKSB7CisJdGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrOworfQorCitEYXRhLnVpZCA9IDE7CisKK0RhdGEucHJvdG90eXBlID0geworCisJY2FjaGU6IGZ1bmN0aW9uKCBvd25lciApIHsKKworCQkvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGUKKwkJdmFyIHZhbHVlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdOworCisJCS8vIElmIG5vdCwgY3JlYXRlIG9uZQorCQlpZiAoICF2YWx1ZSApIHsKKwkJCXZhbHVlID0ge307CisKKwkJCS8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLAorCQkJLy8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS4KKwkJCS8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LgorCQkJaWYgKCBhY2NlcHREYXRhKCBvd25lciApICkgeworCisJCQkJLy8gSWYgaXQgaXMgYSBub2RlIHVubGlrZWx5IHRvIGJlIHN0cmluZ2lmeS1lZCBvciBsb29wZWQgb3ZlcgorCQkJCS8vIHVzZSBwbGFpbiBhc3NpZ25tZW50CisJCQkJaWYgKCBvd25lci5ub2RlVHlwZSApIHsKKwkJCQkJb3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7CisKKwkJCQkvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHkKKwkJCQkvLyBjb25maWd1cmFibGUgbXVzdCBiZSB0cnVlIHRvIGFsbG93IHRoZSBwcm9wZXJ0eSB0byBiZQorCQkJCS8vIGRlbGV0ZWQgd2hlbiBkYXRhIGlzIHJlbW92ZWQKKwkJCQl9IGVsc2UgeworCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoIG93bmVyLCB0aGlzLmV4cGFuZG8sIHsKKwkJCQkJCXZhbHVlOiB2YWx1ZSwKKwkJCQkJCWNvbmZpZ3VyYWJsZTogdHJ1ZQorCQkJCQl9ICk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJcmV0dXJuIHZhbHVlOworCX0sCisJc2V0OiBmdW5jdGlvbiggb3duZXIsIGRhdGEsIHZhbHVlICkgeworCQl2YXIgcHJvcCwKKwkJCWNhY2hlID0gdGhpcy5jYWNoZSggb3duZXIgKTsKKworCQkvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzCisJCS8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1NykKKwkJaWYgKCB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgKSB7CisJCQljYWNoZVsgY2FtZWxDYXNlKCBkYXRhICkgXSA9IHZhbHVlOworCisJCS8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzCisJCX0gZWxzZSB7CisKKwkJCS8vIENvcHkgdGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0aGUgY2FjaGUgb2JqZWN0CisJCQlmb3IgKCBwcm9wIGluIGRhdGEgKSB7CisJCQkJY2FjaGVbIGNhbWVsQ2FzZSggcHJvcCApIF0gPSBkYXRhWyBwcm9wIF07CisJCQl9CisJCX0KKwkJcmV0dXJuIGNhY2hlOworCX0sCisJZ2V0OiBmdW5jdGlvbiggb3duZXIsIGtleSApIHsKKwkJcmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkID8KKwkJCXRoaXMuY2FjaGUoIG93bmVyICkgOgorCisJCQkvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpCisJCQlvd25lclsgdGhpcy5leHBhbmRvIF0gJiYgb3duZXJbIHRoaXMuZXhwYW5kbyBdWyBjYW1lbENhc2UoIGtleSApIF07CisJfSwKKwlhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHsKKworCQkvLyBJbiBjYXNlcyB3aGVyZSBlaXRoZXI6CisJCS8vCisJCS8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWQKKwkJLy8gICAyLiBBIHN0cmluZyBrZXkgd2FzIHNwZWNpZmllZCwgYnV0IG5vIHZhbHVlIHByb3ZpZGVkCisJCS8vCisJCS8vIFRha2UgdGhlICJyZWFkIiBwYXRoIGFuZCBhbGxvdyB0aGUgZ2V0IG1ldGhvZCB0byBkZXRlcm1pbmUKKwkJLy8gd2hpY2ggdmFsdWUgdG8gcmV0dXJuLCByZXNwZWN0aXZlbHkgZWl0aGVyOgorCQkvLworCQkvLyAgIDEuIFRoZSBlbnRpcmUgY2FjaGUgb2JqZWN0CisJCS8vICAgMi4gVGhlIGRhdGEgc3RvcmVkIGF0IHRoZSBrZXkKKwkJLy8KKwkJaWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fAorCQkJCSggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gInN0cmluZyIgKSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgKSB7CisKKwkJCXJldHVybiB0aGlzLmdldCggb3duZXIsIGtleSApOworCQl9CisKKwkJLy8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWUKKwkJLy8gYXJlIHNwZWNpZmllZCwgc2V0IG9yIGV4dGVuZCAoZXhpc3Rpbmcgb2JqZWN0cykgd2l0aCBlaXRoZXI6CisJCS8vCisJCS8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXMKKwkJLy8gICAyLiBBIGtleSBhbmQgdmFsdWUKKwkJLy8KKwkJdGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7CisKKwkJLy8gU2luY2UgdGhlICJzZXQiIHBhdGggY2FuIGhhdmUgdHdvIHBvc3NpYmxlIGVudHJ5IHBvaW50cworCQkvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl0KKwkJcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGtleTsKKwl9LAorCXJlbW92ZTogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7CisJCXZhciBpLAorCQkJY2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07CisKKwkJaWYgKCBjYWNoZSA9PT0gdW5kZWZpbmVkICkgeworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHsKKworCQkJLy8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXMKKwkJCWlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7CisKKwkJCQkvLyBJZiBrZXkgaXMgYW4gYXJyYXkgb2Yga2V5cy4uLgorCQkJCS8vIFdlIGFsd2F5cyBzZXQgY2FtZWxDYXNlIGtleXMsIHNvIHJlbW92ZSB0aGF0LgorCQkJCWtleSA9IGtleS5tYXAoIGNhbWVsQ2FzZSApOworCQkJfSBlbHNlIHsKKwkJCQlrZXkgPSBjYW1lbENhc2UoIGtleSApOworCisJCQkJLy8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cywgdXNlIGl0LgorCQkJCS8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlCisJCQkJa2V5ID0ga2V5IGluIGNhY2hlID8KKwkJCQkJWyBrZXkgXSA6CisJCQkJCSgga2V5Lm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10gKTsKKwkJCX0KKworCQkJaSA9IGtleS5sZW5ndGg7CisKKwkJCXdoaWxlICggaS0tICkgeworCQkJCWRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTsKKwkJCX0KKwkJfQorCisJCS8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiB0aGVyZSdzIG5vIG1vcmUgZGF0YQorCQlpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkgeworCisJCQkvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1CisJCQkvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllcworCQkJLy8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZAorCQkJLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZCkKKwkJCWlmICggb3duZXIubm9kZVR5cGUgKSB7CisJCQkJb3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdW5kZWZpbmVkOworCQkJfSBlbHNlIHsKKwkJCQlkZWxldGUgb3duZXJbIHRoaXMuZXhwYW5kbyBdOworCQkJfQorCQl9CisJfSwKKwloYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7CisJCXZhciBjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTsKKwkJcmV0dXJuIGNhY2hlICE9PSB1bmRlZmluZWQgJiYgIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApOworCX0KK307Cit2YXIgZGF0YVByaXYgPSBuZXcgRGF0YSgpOworCit2YXIgZGF0YVVzZXIgPSBuZXcgRGF0YSgpOworCisKKworLy8JSW1wbGVtZW50YXRpb24gU3VtbWFyeQorLy8KKy8vCTEuIEVuZm9yY2UgQVBJIHN1cmZhY2UgYW5kIHNlbWFudGljIGNvbXBhdGliaWxpdHkgd2l0aCAxLjkueCBicmFuY2gKKy8vCTIuIEltcHJvdmUgdGhlIG1vZHVsZSdzIG1haW50YWluYWJpbGl0eSBieSByZWR1Y2luZyB0aGUgc3RvcmFnZQorLy8JCXBhdGhzIHRvIGEgc2luZ2xlIG1lY2hhbmlzbS4KKy8vCTMuIFVzZSB0aGUgc2FtZSBzaW5nbGUgbWVjaGFuaXNtIHRvIHN1cHBvcnQgInByaXZhdGUiIGFuZCAidXNlciIgZGF0YS4KKy8vCTQuIF9OZXZlcl8gZXhwb3NlICJwcml2YXRlIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpCisvLwk1LiBBdm9pZCBleHBvc2luZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9uIHVzZXIgb2JqZWN0cyAoZWcuIGV4cGFuZG8gcHJvcGVydGllcykKKy8vCTYuIFByb3ZpZGUgYSBjbGVhciBwYXRoIGZvciBpbXBsZW1lbnRhdGlvbiB1cGdyYWRlIHRvIFdlYWtNYXAgaW4gMjAxNAorCit2YXIgcmJyYWNlID0gL14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLywKKwlybXVsdGlEYXNoID0gL1tBLVpdL2c7CisKK2Z1bmN0aW9uIGdldERhdGEoIGRhdGEgKSB7CisJaWYgKCBkYXRhID09PSAidHJ1ZSIgKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCWlmICggZGF0YSA9PT0gImZhbHNlIiApIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmICggZGF0YSA9PT0gIm51bGwiICkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZworCWlmICggZGF0YSA9PT0gK2RhdGEgKyAiIiApIHsKKwkJcmV0dXJuICtkYXRhOworCX0KKworCWlmICggcmJyYWNlLnRlc3QoIGRhdGEgKSApIHsKKwkJcmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTsKKwl9CisKKwlyZXR1cm4gZGF0YTsKK30KKworZnVuY3Rpb24gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSApIHsKKwl2YXIgbmFtZTsKKworCS8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnkKKwkvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGUKKwlpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgeworCQluYW1lID0gImRhdGEtIiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCAiLSQmIiApLnRvTG93ZXJDYXNlKCk7CisJCWRhdGEgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApOworCisJCWlmICggdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciICkgeworCQkJdHJ5IHsKKwkJCQlkYXRhID0gZ2V0RGF0YSggZGF0YSApOworCQkJfSBjYXRjaCAoIGUgKSB7fQorCisJCQkvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5nZWQgbGF0ZXIKKwkJCWRhdGFVc2VyLnNldCggZWxlbSwga2V5LCBkYXRhICk7CisJCX0gZWxzZSB7CisJCQlkYXRhID0gdW5kZWZpbmVkOworCQl9CisJfQorCXJldHVybiBkYXRhOworfQorCitqUXVlcnkuZXh0ZW5kKCB7CisJaGFzRGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7CisJCXJldHVybiBkYXRhVXNlci5oYXNEYXRhKCBlbGVtICkgfHwgZGF0YVByaXYuaGFzRGF0YSggZWxlbSApOworCX0sCisKKwlkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHsKKwkJcmV0dXJuIGRhdGFVc2VyLmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApOworCX0sCisKKwlyZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKKwkJZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7CisJfSwKKworCS8vIFRPRE86IE5vdyB0aGF0IGFsbCBjYWxscyB0byBfZGF0YSBhbmQgX3JlbW92ZURhdGEgaGF2ZSBiZWVuIHJlcGxhY2VkCisJLy8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuCisJX2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkgeworCQlyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7CisJfSwKKworCV9yZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKKwkJZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBuYW1lICk7CisJfQorfSApOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisJZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7CisJCXZhciBpLCBuYW1lLCBkYXRhLAorCQkJZWxlbSA9IHRoaXNbIDAgXSwKKwkJCWF0dHJzID0gZWxlbSAmJiBlbGVtLmF0dHJpYnV0ZXM7CisKKwkJLy8gR2V0cyBhbGwgdmFsdWVzCisJCWlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7CisJCQlpZiAoIHRoaXMubGVuZ3RoICkgeworCQkJCWRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0gKTsKKworCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhZGF0YVByaXYuZ2V0KCBlbGVtLCAiaGFzRGF0YUF0dHJzIiApICkgeworCQkJCQlpID0gYXR0cnMubGVuZ3RoOworCQkJCQl3aGlsZSAoIGktLSApIHsKKworCQkJCQkJLy8gU3VwcG9ydDogSUUgMTEgb25seQorCQkJCQkJLy8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICgjMTQ4OTQpCisJCQkJCQlpZiAoIGF0dHJzWyBpIF0gKSB7CisJCQkJCQkJbmFtZSA9IGF0dHJzWyBpIF0ubmFtZTsKKwkJCQkJCQlpZiAoIG5hbWUuaW5kZXhPZiggImRhdGEtIiApID09PSAwICkgeworCQkJCQkJCQluYW1lID0gY2FtZWxDYXNlKCBuYW1lLnNsaWNlKCA1ICkgKTsKKwkJCQkJCQkJZGF0YUF0dHIoIGVsZW0sIG5hbWUsIGRhdGFbIG5hbWUgXSApOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlkYXRhUHJpdi5zZXQoIGVsZW0sICJoYXNEYXRhQXR0cnMiLCB0cnVlICk7CisJCQkJfQorCQkJfQorCisJCQlyZXR1cm4gZGF0YTsKKwkJfQorCisJCS8vIFNldHMgbXVsdGlwbGUgdmFsdWVzCisJCWlmICggdHlwZW9mIGtleSA9PT0gIm9iamVjdCIgKSB7CisJCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKwkJCQlkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApOworCQkJfSApOworCQl9CisKKwkJcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgeworCQkJdmFyIGRhdGE7CisKKwkJCS8vIFRoZSBjYWxsaW5nIGpRdWVyeSBvYmplY3QgKGVsZW1lbnQgbWF0Y2hlcykgaXMgbm90IGVtcHR5CisJCQkvLyAoYW5kIHRoZXJlZm9yZSBoYXMgYW4gZWxlbWVudCBhcHBlYXJzIGF0IHRoaXNbIDAgXSkgYW5kIHRoZQorCQkJLy8gYHZhbHVlYCBwYXJhbWV0ZXIgd2FzIG5vdCB1bmRlZmluZWQuIEFuIGVtcHR5IGpRdWVyeSBvYmplY3QKKwkJCS8vIHdpbGwgcmVzdWx0IGluIGB1bmRlZmluZWRgIGZvciBlbGVtID0gdGhpc1sgMCBdIHdoaWNoIHdpbGwKKwkJCS8vIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhbiBhdHRlbXB0IHRvIHJlYWQgYSBkYXRhIGNhY2hlIGlzIG1hZGUuCisJCQlpZiAoIGVsZW0gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKKworCQkJCS8vIEF0dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGUKKwkJCQkvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YQorCQkJCWRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0sIGtleSApOworCQkJCWlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkgeworCQkJCQlyZXR1cm4gZGF0YTsKKwkJCQl9CisKKwkJCQkvLyBBdHRlbXB0IHRvICJkaXNjb3ZlciIgdGhlIGRhdGEgaW4KKwkJCQkvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzCisJCQkJZGF0YSA9IGRhdGFBdHRyKCBlbGVtLCBrZXkgKTsKKwkJCQlpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHsKKwkJCQkJcmV0dXJuIGRhdGE7CisJCQkJfQorCisJCQkJLy8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LgorCQkJCXJldHVybjsKKwkJCX0KKworCQkJLy8gU2V0IHRoZSBkYXRhLi4uCisJCQl0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworCisJCQkJLy8gV2UgYWx3YXlzIHN0b3JlIHRoZSBjYW1lbENhc2VkIGtleQorCQkJCWRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApOworCQkJfSApOworCQl9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIHRydWUgKTsKKwl9LAorCisJcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHsKKwkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisJCQlkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApOworCQl9ICk7CisJfQorfSApOworCisKK2pRdWVyeS5leHRlbmQoIHsKKwlxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7CisJCXZhciBxdWV1ZTsKKworCQlpZiAoIGVsZW0gKSB7CisJCQl0eXBlID0gKCB0eXBlIHx8ICJmeCIgKSArICJxdWV1ZSI7CisJCQlxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApOworCisJCQkvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwCisJCQlpZiAoIGRhdGEgKSB7CisJCQkJaWYgKCAhcXVldWUgfHwgQXJyYXkuaXNBcnJheSggZGF0YSApICkgeworCQkJCQlxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcXVldWUucHVzaCggZGF0YSApOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBxdWV1ZSB8fCBbXTsKKwkJfQorCX0sCisKKwlkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHsKKwkJdHlwZSA9IHR5cGUgfHwgImZ4IjsKKworCQl2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSwKKwkJCXN0YXJ0TGVuZ3RoID0gcXVldWUubGVuZ3RoLAorCQkJZm4gPSBxdWV1ZS5zaGlmdCgpLAorCQkJaG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSwKKwkJCW5leHQgPSBmdW5jdGlvbigpIHsKKwkJCQlqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApOworCQkJfTsKKworCQkvLyBJZiB0aGUgZnggcXVldWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsCisJCWlmICggZm4gPT09ICJpbnByb2dyZXNzIiApIHsKKwkJCWZuID0gcXVldWUuc2hpZnQoKTsKKwkJCXN0YXJ0TGVuZ3RoLS07CisJCX0KKworCQlpZiAoIGZuICkgeworCisJCQkvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBwcmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nCisJCQkvLyBhdXRvbWF0aWNhbGx5IGRlcXVldWVkCisJCQlpZiAoIHR5cGUgPT09ICJmeCIgKSB7CisJCQkJcXVldWUudW5zaGlmdCggImlucHJvZ3Jlc3MiICk7CisJCQl9CisKKwkJCS8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb24KKwkJCWRlbGV0ZSBob29rcy5zdG9wOworCQkJZm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTsKKwkJfQorCisJCWlmICggIXN0YXJ0TGVuZ3RoICYmIGhvb2tzICkgeworCQkJaG9va3MuZW1wdHkuZmlyZSgpOworCQl9CisJfSwKKworCS8vIE5vdCBwdWJsaWMgLSBnZW5lcmF0ZSBhIHF1ZXVlSG9va3Mgb2JqZWN0LCBvciByZXR1cm4gdGhlIGN1cnJlbnQgb25lCisJX3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkgeworCQl2YXIga2V5ID0gdHlwZSArICJxdWV1ZUhvb2tzIjsKKwkJcmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHsKKwkJCWVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICkuYWRkKCBmdW5jdGlvbigpIHsKKwkJCQlkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArICJxdWV1ZSIsIGtleSBdICk7CisJCQl9ICkKKwkJfSApOworCX0KK30gKTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCXF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKKwkJdmFyIHNldHRlciA9IDI7CisKKwkJaWYgKCB0eXBlb2YgdHlwZSAhPT0gInN0cmluZyIgKSB7CisJCQlkYXRhID0gdHlwZTsKKwkJCXR5cGUgPSAiZngiOworCQkJc2V0dGVyLS07CisJCX0KKworCQlpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7CisJCQlyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTsKKwkJfQorCisJCXJldHVybiBkYXRhID09PSB1bmRlZmluZWQgPworCQkJdGhpcyA6CisJCQl0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworCQkJCXZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApOworCisJCQkJLy8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWUKKwkJCQlqUXVlcnkuX3F1ZXVlSG9va3MoIHRoaXMsIHR5cGUgKTsKKworCQkJCWlmICggdHlwZSA9PT0gImZ4IiAmJiBxdWV1ZVsgMCBdICE9PSAiaW5wcm9ncmVzcyIgKSB7CisJCQkJCWpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7CisJCQkJfQorCQkJfSApOworCX0sCisJZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7CisJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworCQkJalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKKwkJfSApOworCX0sCisJY2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7CisJCXJldHVybiB0aGlzLnF1ZXVlKCB0eXBlIHx8ICJmeCIsIFtdICk7CisJfSwKKworCS8vIEdldCBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGUKKwkvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdCkKKwlwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwgb2JqICkgeworCQl2YXIgdG1wLAorCQkJY291bnQgPSAxLAorCQkJZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSwKKwkJCWVsZW1lbnRzID0gdGhpcywKKwkJCWkgPSB0aGlzLmxlbmd0aCwKKwkJCXJlc29sdmUgPSBmdW5jdGlvbigpIHsKKwkJCQlpZiAoICEoIC0tY291bnQgKSApIHsKKwkJCQkJZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTsKKwkJCQl9CisJCQl9OworCisJCWlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgeworCQkJb2JqID0gdHlwZTsKKwkJCXR5cGUgPSB1bmRlZmluZWQ7CisJCX0KKwkJdHlwZSA9IHR5cGUgfHwgImZ4IjsKKworCQl3aGlsZSAoIGktLSApIHsKKwkJCXRtcCA9IGRhdGFQcml2LmdldCggZWxlbWVudHNbIGkgXSwgdHlwZSArICJxdWV1ZUhvb2tzIiApOworCQkJaWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkgeworCQkJCWNvdW50Kys7CisJCQkJdG1wLmVtcHR5LmFkZCggcmVzb2x2ZSApOworCQkJfQorCQl9CisJCXJlc29sdmUoKTsKKwkJcmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApOworCX0KK30gKTsKK3ZhciBwbnVtID0gKCAvWystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvICkuc291cmNlOworCit2YXIgcmNzc051bSA9IG5ldyBSZWdFeHAoICJeKD86KFsrLV0pPXwpKCIgKyBwbnVtICsgIikoW2EteiVdKikkIiwgImkiICk7CisKKwordmFyIGNzc0V4cGFuZCA9IFsgIlRvcCIsICJSaWdodCIsICJCb3R0b20iLCAiTGVmdCIgXTsKKwordmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHsKKworCQkvLyBpc0hpZGRlbldpdGhpblRyZWUgbWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjsKKwkJLy8gaW4gdGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50CisJCWVsZW0gPSBlbCB8fCBlbGVtOworCisJCS8vIElubGluZSBzdHlsZSB0cnVtcHMgYWxsCisJCXJldHVybiBlbGVtLnN0eWxlLmRpc3BsYXkgPT09ICJub25lIiB8fAorCQkJZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAiIiAmJgorCisJCQkvLyBPdGhlcndpc2UsIGNoZWNrIGNvbXB1dGVkIHN0eWxlCisJCQkvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDMgLSA0NQorCQkJLy8gRGlzY29ubmVjdGVkIGVsZW1lbnRzIGNhbiBoYXZlIGNvbXB1dGVkIGRpc3BsYXk6IG5vbmUsIHNvIGZpcnN0IGNvbmZpcm0gdGhhdCBlbGVtIGlzCisJCQkvLyBpbiB0aGUgZG9jdW1lbnQuCisJCQlqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApICYmCisKKwkJCWpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApID09PSAibm9uZSI7CisJfTsKKwordmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2ssIGFyZ3MgKSB7CisJdmFyIHJldCwgbmFtZSwKKwkJb2xkID0ge307CisKKwkvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXMKKwlmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7CisJCW9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdOworCQllbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07CisJfQorCisJcmV0ID0gY2FsbGJhY2suYXBwbHkoIGVsZW0sIGFyZ3MgfHwgW10gKTsKKworCS8vIFJldmVydCB0aGUgb2xkIHZhbHVlcworCWZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsKKwkJZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07CisJfQorCisJcmV0dXJuIHJldDsKK307CisKKworCisKK2Z1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7CisJdmFyIGFkanVzdGVkLCBzY2FsZSwKKwkJbWF4SXRlcmF0aW9ucyA9IDIwLAorCQljdXJyZW50VmFsdWUgPSB0d2VlbiA/CisJCQlmdW5jdGlvbigpIHsKKwkJCQlyZXR1cm4gdHdlZW4uY3VyKCk7CisJCQl9IDoKKwkJCWZ1bmN0aW9uKCkgeworCQkJCXJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wLCAiIiApOworCQkJfSwKKwkJaW5pdGlhbCA9IGN1cnJlbnRWYWx1ZSgpLAorCQl1bml0ID0gdmFsdWVQYXJ0cyAmJiB2YWx1ZVBhcnRzWyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyAiIiA6ICJweCIgKSwKKworCQkvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlvbiBpcyByZXF1aXJlZCBmb3IgcG90ZW50aWFsIHVuaXQgbWlzbWF0Y2hlcworCQlpbml0aWFsSW5Vbml0ID0gKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gInB4IiAmJiAraW5pdGlhbCApICYmCisJCQlyY3NzTnVtLmV4ZWMoIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AgKSApOworCisJaWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHsKKworCQkvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTQKKwkJLy8gSGFsdmUgdGhlIGl0ZXJhdGlvbiB0YXJnZXQgdmFsdWUgdG8gcHJldmVudCBpbnRlcmZlcmVuY2UgZnJvbSBDU1MgdXBwZXIgYm91bmRzIChnaC0yMTQ0KQorCQlpbml0aWFsID0gaW5pdGlhbCAvIDI7CisKKwkJLy8gVHJ1c3QgdW5pdHMgcmVwb3J0ZWQgYnkgalF1ZXJ5LmNzcworCQl1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07CisKKwkJLy8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnQKKwkJaW5pdGlhbEluVW5pdCA9ICtpbml0aWFsIHx8IDE7CisKKwkJd2hpbGUgKCBtYXhJdGVyYXRpb25zLS0gKSB7CisKKwkJCS8vIEV2YWx1YXRlIGFuZCB1cGRhdGUgb3VyIGJlc3QgZ3Vlc3MgKGRvdWJsaW5nIGd1ZXNzZXMgdGhhdCB6ZXJvIG91dCkuCisJCQkvLyBGaW5pc2ggaWYgdGhlIHNjYWxlIGVxdWFscyBvciBjcm9zc2VzIDEgKG1ha2luZyB0aGUgb2xkKm5ldyBwcm9kdWN0IG5vbi1wb3NpdGl2ZSkuCisJCQlqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7CisJCQlpZiAoICggMSAtIHNjYWxlICkgKiAoIDEgLSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsIHx8IDAuNSApICkgPD0gMCApIHsKKwkJCQltYXhJdGVyYXRpb25zID0gMDsKKwkJCX0KKwkJCWluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0IC8gc2NhbGU7CisKKwkJfQorCisJCWluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0ICogMjsKKwkJalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApOworCisJCS8vIE1ha2Ugc3VyZSB3ZSB1cGRhdGUgdGhlIHR3ZWVuIHByb3BlcnRpZXMgbGF0ZXIgb24KKwkJdmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107CisJfQorCisJaWYgKCB2YWx1ZVBhcnRzICkgeworCQlpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDsKKworCQkvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWQKKwkJYWRqdXN0ZWQgPSB2YWx1ZVBhcnRzWyAxIF0gPworCQkJaW5pdGlhbEluVW5pdCArICggdmFsdWVQYXJ0c1sgMSBdICsgMSApICogdmFsdWVQYXJ0c1sgMiBdIDoKKwkJCSt2YWx1ZVBhcnRzWyAyIF07CisJCWlmICggdHdlZW4gKSB7CisJCQl0d2Vlbi51bml0ID0gdW5pdDsKKwkJCXR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDsKKwkJCXR3ZWVuLmVuZCA9IGFkanVzdGVkOworCQl9CisJfQorCXJldHVybiBhZGp1c3RlZDsKK30KKworCit2YXIgZGVmYXVsdERpc3BsYXlNYXAgPSB7fTsKKworZnVuY3Rpb24gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKSB7CisJdmFyIHRlbXAsCisJCWRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCwKKwkJbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLAorCQlkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF07CisKKwlpZiAoIGRpc3BsYXkgKSB7CisJCXJldHVybiBkaXNwbGF5OworCX0KKworCXRlbXAgPSBkb2MuYm9keS5hcHBlbmRDaGlsZCggZG9jLmNyZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICkgKTsKKwlkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgImRpc3BsYXkiICk7CisKKwl0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRlbXAgKTsKKworCWlmICggZGlzcGxheSA9PT0gIm5vbmUiICkgeworCQlkaXNwbGF5ID0gImJsb2NrIjsKKwl9CisJZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF0gPSBkaXNwbGF5OworCisJcmV0dXJuIGRpc3BsYXk7Cit9CisKK2Z1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHsKKwl2YXIgZGlzcGxheSwgZWxlbSwKKwkJdmFsdWVzID0gW10sCisJCWluZGV4ID0gMCwKKwkJbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoOworCisJLy8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlCisJZm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKKwkJZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdOworCQlpZiAoICFlbGVtLnN0eWxlICkgeworCQkJY29udGludWU7CisJCX0KKworCQlkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5OworCQlpZiAoIHNob3cgKSB7CisKKwkJCS8vIFNpbmNlIHdlIGZvcmNlIHZpc2liaWxpdHkgdXBvbiBjYXNjYWRlLWhpZGRlbiBlbGVtZW50cywgYW4gaW1tZWRpYXRlIChhbmQgc2xvdykKKwkJCS8vIGNoZWNrIGlzIHJlcXVpcmVkIGluIHRoaXMgZmlyc3QgbG9vcCB1bmxlc3Mgd2UgaGF2ZSBhIG5vbmVtcHR5IGRpc3BsYXkgdmFsdWUgKGVpdGhlcgorCQkJLy8gaW5saW5lIG9yIGFib3V0LXRvLWJlLXJlc3RvcmVkKQorCQkJaWYgKCBkaXNwbGF5ID09PSAibm9uZSIgKSB7CisJCQkJdmFsdWVzWyBpbmRleCBdID0gZGF0YVByaXYuZ2V0KCBlbGVtLCAiZGlzcGxheSIgKSB8fCBudWxsOworCQkJCWlmICggIXZhbHVlc1sgaW5kZXggXSApIHsKKwkJCQkJZWxlbS5zdHlsZS5kaXNwbGF5ID0gIiI7CisJCQkJfQorCQkJfQorCQkJaWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09ICIiICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApICkgeworCQkJCXZhbHVlc1sgaW5kZXggXSA9IGdldERlZmF1bHREaXNwbGF5KCBlbGVtICk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoIGRpc3BsYXkgIT09ICJub25lIiApIHsKKwkJCQl2YWx1ZXNbIGluZGV4IF0gPSAibm9uZSI7CisKKwkJCQkvLyBSZW1lbWJlciB3aGF0IHdlJ3JlIG92ZXJ3cml0aW5nCisJCQkJZGF0YVByaXYuc2V0KCBlbGVtLCAiZGlzcGxheSIsIGRpc3BsYXkgKTsKKwkJCX0KKwkJfQorCX0KKworCS8vIFNldCB0aGUgZGlzcGxheSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcCB0byBhdm9pZCBjb25zdGFudCByZWZsb3cKKwlmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgeworCQlpZiAoIHZhbHVlc1sgaW5kZXggXSAhPSBudWxsICkgeworCQkJZWxlbWVudHNbIGluZGV4IF0uc3R5bGUuZGlzcGxheSA9IHZhbHVlc1sgaW5kZXggXTsKKwkJfQorCX0KKworCXJldHVybiBlbGVtZW50czsKK30KKworalF1ZXJ5LmZuLmV4dGVuZCggeworCXNob3c6IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4gc2hvd0hpZGUoIHRoaXMsIHRydWUgKTsKKwl9LAorCWhpZGU6IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTsKKwl9LAorCXRvZ2dsZTogZnVuY3Rpb24oIHN0YXRlICkgeworCQlpZiAoIHR5cGVvZiBzdGF0ZSA9PT0gImJvb2xlYW4iICkgeworCQkJcmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTsKKwkJfQorCisJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworCQkJaWYgKCBpc0hpZGRlbldpdGhpblRyZWUoIHRoaXMgKSApIHsKKwkJCQlqUXVlcnkoIHRoaXMgKS5zaG93KCk7CisJCQl9IGVsc2UgeworCQkJCWpRdWVyeSggdGhpcyApLmhpZGUoKTsKKwkJCX0KKwkJfSApOworCX0KK30gKTsKK3ZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTsKKwordmFyIHJ0YWdOYW1lID0gKCAvPChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKykvaSApOworCit2YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxebW9kdWxlJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSApOworCisKKworLy8gV2UgaGF2ZSB0byBjbG9zZSB0aGVzZSB0YWdzIHRvIHN1cHBvcnQgWEhUTUwgKCMxMzIwMCkKK3ZhciB3cmFwTWFwID0geworCisJLy8gU3VwcG9ydDogSUUgPD05IG9ubHkKKwlvcHRpb246IFsgMSwgIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCAiPC9zZWxlY3Q+IiBdLAorCisJLy8gWEhUTUwgcGFyc2VycyBkbyBub3QgbWFnaWNhbGx5IGluc2VydCBlbGVtZW50cyBpbiB0aGUKKwkvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuCisJLy8gdGhpcyBieSBvbWl0dGluZyA8dGJvZHk+IG9yIG90aGVyIHJlcXVpcmVkIGVsZW1lbnRzLgorCXRoZWFkOiBbIDEsICI8dGFibGU+IiwgIjwvdGFibGU+IiBdLAorCWNvbDogWyAyLCAiPHRhYmxlPjxjb2xncm91cD4iLCAiPC9jb2xncm91cD48L3RhYmxlPiIgXSwKKwl0cjogWyAyLCAiPHRhYmxlPjx0Ym9keT4iLCAiPC90Ym9keT48L3RhYmxlPiIgXSwKKwl0ZDogWyAzLCAiPHRhYmxlPjx0Ym9keT48dHI+IiwgIjwvdHI+PC90Ym9keT48L3RhYmxlPiIgXSwKKworCV9kZWZhdWx0OiBbIDAsICIiLCAiIiBdCit9OworCisvLyBTdXBwb3J0OiBJRSA8PTkgb25seQord3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uOworCit3cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkOword3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7CisKKworZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7CisKKwkvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5CisJLy8gVXNlIHR5cGVvZiB0byBhdm9pZCB6ZXJvLWFyZ3VtZW50IG1ldGhvZCBpbnZvY2F0aW9uIG9uIGhvc3Qgb2JqZWN0cyAoIzE1MTUxKQorCXZhciByZXQ7CisKKwlpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZpbmVkIiApIHsKKwkJcmV0ID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIHx8ICIqIiApOworCisJfSBlbHNlIGlmICggdHlwZW9mIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCAhPT0gInVuZGVmaW5lZCIgKSB7CisJCXJldCA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8ICIqIiApOworCisJfSBlbHNlIHsKKwkJcmV0ID0gW107CisJfQorCisJaWYgKCB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgbm9kZU5hbWUoIGNvbnRleHQsIHRhZyApICkgeworCQlyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworCisvLyBNYXJrIHNjcmlwdHMgYXMgaGF2aW5nIGFscmVhZHkgYmVlbiBldmFsdWF0ZWQKK2Z1bmN0aW9uIHNldEdsb2JhbEV2YWwoIGVsZW1zLCByZWZFbGVtZW50cyApIHsKKwl2YXIgaSA9IDAsCisJCWwgPSBlbGVtcy5sZW5ndGg7CisKKwlmb3IgKCA7IGkgPCBsOyBpKysgKSB7CisJCWRhdGFQcml2LnNldCgKKwkJCWVsZW1zWyBpIF0sCisJCQkiZ2xvYmFsRXZhbCIsCisJCQkhcmVmRWxlbWVudHMgfHwgZGF0YVByaXYuZ2V0KCByZWZFbGVtZW50c1sgaSBdLCAiZ2xvYmFsRXZhbCIgKQorCQkpOworCX0KK30KKworCit2YXIgcmh0bWwgPSAvPHwmIz9cdys7LzsKKworZnVuY3Rpb24gYnVpbGRGcmFnbWVudCggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNlbGVjdGlvbiwgaWdub3JlZCApIHsKKwl2YXIgZWxlbSwgdG1wLCB0YWcsIHdyYXAsIGNvbnRhaW5zLCBqLAorCQlmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLAorCQlub2RlcyA9IFtdLAorCQlpID0gMCwKKwkJbCA9IGVsZW1zLmxlbmd0aDsKKworCWZvciAoIDsgaSA8IGw7IGkrKyApIHsKKwkJZWxlbSA9IGVsZW1zWyBpIF07CisKKwkJaWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7CisKKwkJCS8vIEFkZCBub2RlcyBkaXJlY3RseQorCQkJaWYgKCB0b1R5cGUoIGVsZW0gKSA9PT0gIm9iamVjdCIgKSB7CisKKwkJCQkvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHkKKwkJCQkvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0CisJCQkJalF1ZXJ5Lm1lcmdlKCBub2RlcywgZWxlbS5ub2RlVHlwZSA/IFsgZWxlbSBdIDogZWxlbSApOworCisJCQkvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGUKKwkJCX0gZWxzZSBpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7CisJCQkJbm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7CisKKwkJCS8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2RlcworCQkJfSBlbHNlIHsKKwkJCQl0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudCggImRpdiIgKSApOworCisJCQkJLy8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbgorCQkJCXRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsgIiIsICIiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7CisJCQkJd3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7CisJCQkJdG1wLmlubmVySFRNTCA9IHdyYXBbIDEgXSArIGpRdWVyeS5odG1sUHJlZmlsdGVyKCBlbGVtICkgKyB3cmFwWyAyIF07CisKKwkJCQkvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnQKKwkJCQlqID0gd3JhcFsgMCBdOworCQkJCXdoaWxlICggai0tICkgeworCQkJCQl0bXAgPSB0bXAubGFzdENoaWxkOworCQkJCX0KKworCQkJCS8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seQorCQkJCS8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXQKKwkJCQlqUXVlcnkubWVyZ2UoIG5vZGVzLCB0bXAuY2hpbGROb2RlcyApOworCisJCQkJLy8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXIKKwkJCQl0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkOworCisJCQkJLy8gRW5zdXJlIHRoZSBjcmVhdGVkIG5vZGVzIGFyZSBvcnBoYW5lZCAoIzEyMzkyKQorCQkJCXRtcC50ZXh0Q29udGVudCA9ICIiOworCQkJfQorCQl9CisJfQorCisJLy8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudAorCWZyYWdtZW50LnRleHRDb250ZW50ID0gIiI7CisKKwlpID0gMDsKKwl3aGlsZSAoICggZWxlbSA9IG5vZGVzWyBpKysgXSApICkgeworCisJCS8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpCisJCWlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkgeworCQkJaWYgKCBpZ25vcmVkICkgeworCQkJCWlnbm9yZWQucHVzaCggZWxlbSApOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQljb250YWlucyA9IGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7CisKKwkJLy8gQXBwZW5kIHRvIGZyYWdtZW50CisJCXRtcCA9IGdldEFsbCggZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKSwgInNjcmlwdCIgKTsKKworCQkvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5CisJCWlmICggY29udGFpbnMgKSB7CisJCQlzZXRHbG9iYWxFdmFsKCB0bXAgKTsKKwkJfQorCisJCS8vIENhcHR1cmUgZXhlY3V0YWJsZXMKKwkJaWYgKCBzY3JpcHRzICkgeworCQkJaiA9IDA7CisJCQl3aGlsZSAoICggZWxlbSA9IHRtcFsgaisrIF0gKSApIHsKKwkJCQlpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCAiIiApICkgeworCQkJCQlzY3JpcHRzLnB1c2goIGVsZW0gKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gZnJhZ21lbnQ7Cit9CisKKworKCBmdW5jdGlvbigpIHsKKwl2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksCisJCWRpdiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApICksCisJCWlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImlucHV0IiApOworCisJLy8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seQorCS8vIENoZWNrIHN0YXRlIGxvc3QgaWYgdGhlIG5hbWUgaXMgc2V0ICgjMTEyMTcpCisJLy8gU3VwcG9ydDogV2luZG93cyBXZWIgQXBwcyAoV1dBKQorCS8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKQorCWlucHV0LnNldEF0dHJpYnV0ZSggInR5cGUiLCAicmFkaW8iICk7CisJaW5wdXQuc2V0QXR0cmlidXRlKCAiY2hlY2tlZCIsICJjaGVja2VkIiApOworCWlucHV0LnNldEF0dHJpYnV0ZSggIm5hbWUiLCAidCIgKTsKKworCWRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTsKKworCS8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgb25seQorCS8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50cworCXN1cHBvcnQuY2hlY2tDbG9uZSA9IGRpdi5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDsKKworCS8vIFN1cHBvcnQ6IElFIDw9MTEgb25seQorCS8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkCisJZGl2LmlubmVySFRNTCA9ICI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IjsKKwlzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gISFkaXYuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTsKK30gKSgpOwordmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKKworCisKK3ZhcgorCXJrZXlFdmVudCA9IC9ea2V5LywKKwlybW91c2VFdmVudCA9IC9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLywKKwlydHlwZW5hbWVzcGFjZSA9IC9eKFteLl0qKSg/OlwuKC4rKXwpLzsKKworZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHsKKwlyZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7CisJcmV0dXJuIGZhbHNlOworfQorCisvLyBTdXBwb3J0OiBJRSA8PTkgb25seQorLy8gU2VlICMxMzM5MyBmb3IgbW9yZSBpbmZvCitmdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHsKKwl0cnkgeworCQlyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsKKwl9IGNhdGNoICggZXJyICkgeyB9Cit9CisKK2Z1bmN0aW9uIG9uKCBlbGVtLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCBvbmUgKSB7CisJdmFyIG9yaWdGbiwgdHlwZTsKKworCS8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVycworCWlmICggdHlwZW9mIHR5cGVzID09PSAib2JqZWN0IiApIHsKKworCQkvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKQorCQlpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgKSB7CisKKwkJCS8vICggdHlwZXMtT2JqZWN0LCBkYXRhICkKKwkJCWRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yOworCQkJc2VsZWN0b3IgPSB1bmRlZmluZWQ7CisJCX0KKwkJZm9yICggdHlwZSBpbiB0eXBlcyApIHsKKwkJCW9uKCBlbGVtLCB0eXBlLCBzZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7CisJCX0KKwkJcmV0dXJuIGVsZW07CisJfQorCisJaWYgKCBkYXRhID09IG51bGwgJiYgZm4gPT0gbnVsbCApIHsKKworCQkvLyAoIHR5cGVzLCBmbiApCisJCWZuID0gc2VsZWN0b3I7CisJCWRhdGEgPSBzZWxlY3RvciA9IHVuZGVmaW5lZDsKKwl9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkgeworCQlpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CisKKwkJCS8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApCisJCQlmbiA9IGRhdGE7CisJCQlkYXRhID0gdW5kZWZpbmVkOworCQl9IGVsc2UgeworCisJCQkvLyAoIHR5cGVzLCBkYXRhLCBmbiApCisJCQlmbiA9IGRhdGE7CisJCQlkYXRhID0gc2VsZWN0b3I7CisJCQlzZWxlY3RvciA9IHVuZGVmaW5lZDsKKwkJfQorCX0KKwlpZiAoIGZuID09PSBmYWxzZSApIHsKKwkJZm4gPSByZXR1cm5GYWxzZTsKKwl9IGVsc2UgaWYgKCAhZm4gKSB7CisJCXJldHVybiBlbGVtOworCX0KKworCWlmICggb25lID09PSAxICkgeworCQlvcmlnRm4gPSBmbjsKKwkJZm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7CisKKwkJCS8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mbworCQkJalF1ZXJ5KCkub2ZmKCBldmVudCApOworCQkJcmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7CisJCX07CisKKwkJLy8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm4KKwkJZm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7CisJfQorCXJldHVybiBlbGVtLmVhY2goIGZ1bmN0aW9uKCkgeworCQlqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7CisJfSApOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgZXZlbnRzIC0tIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLgorICogUHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZvciBtYW55IG9mIHRoZSBpZGVhcy4KKyAqLworalF1ZXJ5LmV2ZW50ID0geworCisJZ2xvYmFsOiB7fSwKKworCWFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHsKKworCQl2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsCisJCQlldmVudHMsIHQsIGhhbmRsZU9iaiwKKwkJCXNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSwKKwkJCWVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7CisKKwkJLy8gRG9uJ3QgYXR0YWNoIGV2ZW50cyB0byBub0RhdGEgb3IgdGV4dC9jb21tZW50IG5vZGVzIChidXQgYWxsb3cgcGxhaW4gb2JqZWN0cykKKwkJaWYgKCAhZWxlbURhdGEgKSB7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBkYXRhIGluIGxpZXUgb2YgdGhlIGhhbmRsZXIKKwkJaWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7CisJCQloYW5kbGVPYmpJbiA9IGhhbmRsZXI7CisJCQloYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjsKKwkJCXNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7CisJCX0KKworCQkvLyBFbnN1cmUgdGhhdCBpbnZhbGlkIHNlbGVjdG9ycyB0aHJvdyBleGNlcHRpb25zIGF0IGF0dGFjaCB0aW1lCisJCS8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KQorCQlpZiAoIHNlbGVjdG9yICkgeworCQkJalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVudEVsZW1lbnQsIHNlbGVjdG9yICk7CisJCX0KKworCQkvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXIKKwkJaWYgKCAhaGFuZGxlci5ndWlkICkgeworCQkJaGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKzsKKwkJfQorCisJCS8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3QKKwkJaWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHsKKwkJCWV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IHt9OworCQl9CisJCWlmICggISggZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgKSApIHsKKwkJCWV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7CisKKwkJCQkvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZAorCQkJCS8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWQKKwkJCQlyZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gInVuZGVmaW5lZCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID8KKwkJCQkJalF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDsKKwkJCX07CisJCX0KKworCQkvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlCisJCXR5cGVzID0gKCB0eXBlcyB8fCAiIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyAiIiBdOworCQl0ID0gdHlwZXMubGVuZ3RoOworCQl3aGlsZSAoIHQtLSApIHsKKwkJCXRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTsKKwkJCXR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdOworCQkJbmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgIiIgKS5zcGxpdCggIi4iICkuc29ydCgpOworCisJCQkvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRhY2hpbmcgbmFtZXNwYWNlLW9ubHkgaGFuZGxlcnMKKwkJCWlmICggIXR5cGUgKSB7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZQorCQkJc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307CisKKwkJCS8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZQorCQkJdHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlOworCisJCQkvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlCisJCQlzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKKworCQkJLy8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnMKKwkJCWhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoIHsKKwkJCQl0eXBlOiB0eXBlLAorCQkJCW9yaWdUeXBlOiBvcmlnVHlwZSwKKwkJCQlkYXRhOiBkYXRhLAorCQkJCWhhbmRsZXI6IGhhbmRsZXIsCisJCQkJZ3VpZDogaGFuZGxlci5ndWlkLAorCQkJCXNlbGVjdG9yOiBzZWxlY3RvciwKKwkJCQluZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApLAorCQkJCW5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCAiLiIgKQorCQkJfSwgaGFuZGxlT2JqSW4gKTsKKworCQkJLy8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3QKKwkJCWlmICggISggaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSApICkgeworCQkJCWhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTsKKwkJCQloYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDsKKworCQkJCS8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZQorCQkJCWlmICggIXNwZWNpYWwuc2V0dXAgfHwKKwkJCQkJc3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHsKKworCQkJCQlpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHsKKwkJCQkJCWVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUgKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKCBzcGVjaWFsLmFkZCApIHsKKwkJCQlzcGVjaWFsLmFkZC5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTsKKworCQkJCWlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7CisJCQkJCWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7CisJCQkJfQorCQkJfQorCisJCQkvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udAorCQkJaWYgKCBzZWxlY3RvciApIHsKKwkJCQloYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwgaGFuZGxlT2JqICk7CisJCQl9IGVsc2UgeworCQkJCWhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApOworCQkJfQorCisJCQkvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBoYXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uCisJCQlqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0cnVlOworCQl9CisKKwl9LAorCisJLy8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50CisJcmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHsKKworCQl2YXIgaiwgb3JpZ0NvdW50LCB0bXAsCisJCQlldmVudHMsIHQsIGhhbmRsZU9iaiwKKwkJCXNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSwKKwkJCWVsZW1EYXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQcml2LmdldCggZWxlbSApOworCisJCWlmICggIWVsZW1EYXRhIHx8ICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkgeworCQkJcmV0dXJuOworCQl9CisKKwkJLy8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZAorCQl0eXBlcyA9ICggdHlwZXMgfHwgIiIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgIiIgXTsKKwkJdCA9IHR5cGVzLmxlbmd0aDsKKwkJd2hpbGUgKCB0LS0gKSB7CisJCQl0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107CisJCQl0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTsKKwkJCW5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8ICIiICkuc3BsaXQoICIuIiApLnNvcnQoKTsKKworCQkJLy8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50CisJCQlpZiAoICF0eXBlICkgeworCQkJCWZvciAoIHR5cGUgaW4gZXZlbnRzICkgeworCQkJCQlqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OworCQkJdHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlOworCQkJaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTsKKwkJCXRtcCA9IHRtcFsgMiBdICYmCisJCQkJbmV3IFJlZ0V4cCggIihefFxcLikiICsgbmFtZXNwYWNlcy5qb2luKCAiXFwuKD86LipcXC58KSIgKSArICIoXFwufCQpIiApOworCisJCQkvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzCisJCQlvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVuZ3RoOworCQkJd2hpbGUgKCBqLS0gKSB7CisJCQkJaGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTsKKworCQkJCWlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiYKKwkJCQkJKCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiYKKwkJCQkJKCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJgorCQkJCQkoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8CisJCQkJCQlzZWxlY3RvciA9PT0gIioqIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHsKKwkJCQkJaGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7CisKKwkJCQkJaWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7CisJCQkJCQloYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07CisJCQkJCX0KKwkJCQkJaWYgKCBzcGVjaWFsLnJlbW92ZSApIHsKKwkJCQkJCXNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQkvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0CisJCQkvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycykKKwkJCWlmICggb3JpZ0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7CisJCQkJaWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fAorCQkJCQlzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHsKKworCQkJCQlqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApOworCQkJCX0KKworCQkJCWRlbGV0ZSBldmVudHNbIHR5cGUgXTsKKwkJCX0KKwkJfQorCisJCS8vIFJlbW92ZSBkYXRhIGFuZCB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkCisJCWlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkgeworCQkJZGF0YVByaXYucmVtb3ZlKCBlbGVtLCAiaGFuZGxlIGV2ZW50cyIgKTsKKwkJfQorCX0sCisKKwlkaXNwYXRjaDogZnVuY3Rpb24oIG5hdGl2ZUV2ZW50ICkgeworCisJCS8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9iamVjdAorCQl2YXIgZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBuYXRpdmVFdmVudCApOworCisJCXZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwgaGFuZGxlclF1ZXVlLAorCQkJYXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCApLAorCQkJaGFuZGxlcnMgPSAoIGRhdGFQcml2LmdldCggdGhpcywgImV2ZW50cyIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gfHwgW10sCisJCQlzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUgXSB8fCB7fTsKKworCQkvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudAorCQlhcmdzWyAwIF0gPSBldmVudDsKKworCQlmb3IgKCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApIHsKKwkJCWFyZ3NbIGkgXSA9IGFyZ3VtZW50c1sgaSBdOworCQl9CisKKwkJZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzOworCisJCS8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwgYW5kIGxldCBpdCBiYWlsIGlmIGRlc2lyZWQKKwkJaWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBEZXRlcm1pbmUgaGFuZGxlcnMKKwkJaGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApOworCisJCS8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzCisJCWkgPSAwOworCQl3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHsKKwkJCWV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07CisKKwkJCWogPSAwOworCQkJd2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBdICkgJiYKKwkJCQkhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSApIHsKKworCQkJCS8vIFRyaWdnZXJlZCBldmVudCBtdXN0IGVpdGhlciAxKSBoYXZlIG5vIG5hbWVzcGFjZSwgb3IgMikgaGF2ZSBuYW1lc3BhY2UocykKKwkJCQkvLyBhIHN1YnNldCBvciBlcXVhbCB0byB0aG9zZSBpbiB0aGUgYm91bmQgZXZlbnQgKGJvdGggY2FuIGhhdmUgbm8gbmFtZXNwYWNlKS4KKwkJCQlpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgeworCisJCQkJCWV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajsKKwkJCQkJZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhOworCisJCQkJCXJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHwKKwkJCQkJCWhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApOworCisJCQkJCWlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7CisJCQkJCQlpZiAoICggZXZlbnQucmVzdWx0ID0gcmV0ICkgPT09IGZhbHNlICkgeworCQkJCQkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisJCQkJCQkJZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQkvLyBDYWxsIHRoZSBwb3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlCisJCWlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7CisJCQlzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApOworCQl9CisKKwkJcmV0dXJuIGV2ZW50LnJlc3VsdDsKKwl9LAorCisJaGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7CisJCXZhciBpLCBoYW5kbGVPYmosIHNlbCwgbWF0Y2hlZEhhbmRsZXJzLCBtYXRjaGVkU2VsZWN0b3JzLAorCQkJaGFuZGxlclF1ZXVlID0gW10sCisJCQlkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCwKKwkJCWN1ciA9IGV2ZW50LnRhcmdldDsKKworCQkvLyBGaW5kIGRlbGVnYXRlIGhhbmRsZXJzCisJCWlmICggZGVsZWdhdGVDb3VudCAmJgorCisJCQkvLyBTdXBwb3J0OiBJRSA8PTkKKwkJCS8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICh0cmFjLTEzMTgwKQorCQkJY3VyLm5vZGVUeXBlICYmCisKKwkJCS8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MgorCQkJLy8gU3VwcHJlc3Mgc3BlYy12aW9sYXRpbmcgY2xpY2tzIGluZGljYXRpbmcgYSBub24tcHJpbWFyeSBwb2ludGVyIGJ1dHRvbiAodHJhYy0zODYxKQorCQkJLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnQtdHlwZS1jbGljaworCQkJLy8gU3VwcG9ydDogSUUgMTEgb25seQorCQkJLy8gLi4uYnV0IG5vdCBhcnJvdyBrZXkgImNsaWNrcyIgb2YgcmFkaW8gaW5wdXRzLCB3aGljaCBjYW4gaGF2ZSBgYnV0dG9uYCAtMSAoZ2gtMjM0MykKKwkJCSEoIGV2ZW50LnR5cGUgPT09ICJjbGljayIgJiYgZXZlbnQuYnV0dG9uID49IDEgKSApIHsKKworCQkJZm9yICggOyBjdXIgIT09IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRoaXMgKSB7CisKKwkJCQkvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKCMxMzIwOCkKKwkJCQkvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NCkKKwkJCQlpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAhKCBldmVudC50eXBlID09PSAiY2xpY2siICYmIGN1ci5kaXNhYmxlZCA9PT0gdHJ1ZSApICkgeworCQkJCQltYXRjaGVkSGFuZGxlcnMgPSBbXTsKKwkJCQkJbWF0Y2hlZFNlbGVjdG9ycyA9IHt9OworCQkJCQlmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHsKKwkJCQkJCWhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07CisKKwkJCQkJCS8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICgjMTMyMDMpCisJCQkJCQlzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyAiICI7CisKKwkJCQkJCWlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPT09IHVuZGVmaW5lZCApIHsKKwkJCQkJCQltYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgPworCQkJCQkJCQlqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDoKKwkJCQkJCQkJalF1ZXJ5LmZpbmQoIHNlbCwgdGhpcywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDsKKwkJCQkJCX0KKwkJCQkJCWlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gKSB7CisJCQkJCQkJbWF0Y2hlZEhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWlmICggbWF0Y2hlZEhhbmRsZXJzLmxlbmd0aCApIHsKKwkJCQkJCWhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZWRIYW5kbGVycyB9ICk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQkvLyBBZGQgdGhlIHJlbWFpbmluZyAoZGlyZWN0bHktYm91bmQpIGhhbmRsZXJzCisJCWN1ciA9IHRoaXM7CisJCWlmICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHsKKwkJCWhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApOworCQl9CisKKwkJcmV0dXJuIGhhbmRsZXJRdWV1ZTsKKwl9LAorCisJYWRkUHJvcDogZnVuY3Rpb24oIG5hbWUsIGhvb2sgKSB7CisJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSggalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSwgbmFtZSwgeworCQkJZW51bWVyYWJsZTogdHJ1ZSwKKwkJCWNvbmZpZ3VyYWJsZTogdHJ1ZSwKKworCQkJZ2V0OiBpc0Z1bmN0aW9uKCBob29rICkgPworCQkJCWZ1bmN0aW9uKCkgeworCQkJCQlpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHsKKwkJCQkJCQlyZXR1cm4gaG9vayggdGhpcy5vcmlnaW5hbEV2ZW50ICk7CisJCQkJCX0KKwkJCQl9IDoKKwkJCQlmdW5jdGlvbigpIHsKKwkJCQkJaWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7CisJCQkJCQkJcmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFsgbmFtZSBdOworCQkJCQl9CisJCQkJfSwKKworCQkJc2V0OiBmdW5jdGlvbiggdmFsdWUgKSB7CisJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCBuYW1lLCB7CisJCQkJCWVudW1lcmFibGU6IHRydWUsCisJCQkJCWNvbmZpZ3VyYWJsZTogdHJ1ZSwKKwkJCQkJd3JpdGFibGU6IHRydWUsCisJCQkJCXZhbHVlOiB2YWx1ZQorCQkJCX0gKTsKKwkJCX0KKwkJfSApOworCX0sCisKKwlmaXg6IGZ1bmN0aW9uKCBvcmlnaW5hbEV2ZW50ICkgeworCQlyZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/CisJCQlvcmlnaW5hbEV2ZW50IDoKKwkJCW5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTsKKwl9LAorCisJc3BlY2lhbDogeworCQlsb2FkOiB7CisKKwkJCS8vIFByZXZlbnQgdHJpZ2dlcmVkIGltYWdlLmxvYWQgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gd2luZG93LmxvYWQKKwkJCW5vQnViYmxlOiB0cnVlCisJCX0sCisJCWZvY3VzOiB7CisKKwkJCS8vIEZpcmUgbmF0aXZlIGV2ZW50IGlmIHBvc3NpYmxlIHNvIGJsdXIvZm9jdXMgc2VxdWVuY2UgaXMgY29ycmVjdAorCQkJdHJpZ2dlcjogZnVuY3Rpb24oKSB7CisJCQkJaWYgKCB0aGlzICE9PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmIHRoaXMuZm9jdXMgKSB7CisJCQkJCXRoaXMuZm9jdXMoKTsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCX0sCisJCQlkZWxlZ2F0ZVR5cGU6ICJmb2N1c2luIgorCQl9LAorCQlibHVyOiB7CisJCQl0cmlnZ2VyOiBmdW5jdGlvbigpIHsKKwkJCQlpZiAoIHRoaXMgPT09IHNhZmVBY3RpdmVFbGVtZW50KCkgJiYgdGhpcy5ibHVyICkgeworCQkJCQl0aGlzLmJsdXIoKTsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCX0sCisJCQlkZWxlZ2F0ZVR5cGU6ICJmb2N1c291dCIKKwkJfSwKKwkJY2xpY2s6IHsKKworCQkJLy8gRm9yIGNoZWNrYm94LCBmaXJlIG5hdGl2ZSBldmVudCBzbyBjaGVja2VkIHN0YXRlIHdpbGwgYmUgcmlnaHQKKwkJCXRyaWdnZXI6IGZ1bmN0aW9uKCkgeworCQkJCWlmICggdGhpcy50eXBlID09PSAiY2hlY2tib3giICYmIHRoaXMuY2xpY2sgJiYgbm9kZU5hbWUoIHRoaXMsICJpbnB1dCIgKSApIHsKKwkJCQkJdGhpcy5jbGljaygpOworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfSwKKworCQkJLy8gRm9yIGNyb3NzLWJyb3dzZXIgY29uc2lzdGVuY3ksIGRvbid0IGZpcmUgbmF0aXZlIC5jbGljaygpIG9uIGxpbmtzCisJCQlfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkgeworCQkJCXJldHVybiBub2RlTmFtZSggZXZlbnQudGFyZ2V0LCAiYSIgKTsKKwkJCX0KKwkJfSwKKworCQliZWZvcmV1bmxvYWQ6IHsKKwkJCXBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkgeworCisJCQkJLy8gU3VwcG9ydDogRmlyZWZveCAyMCsKKwkJCQkvLyBGaXJlZm94IGRvZXNuJ3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQuCisJCQkJaWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkgeworCQkJCQlldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0OworCQkJCX0KKwkJCX0KKwkJfQorCX0KK307CisKK2pRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7CisKKwkvLyBUaGlzICJpZiIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmplY3RzCisJaWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7CisJCWVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7CisJfQorfTsKKworalF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7CisKKwkvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmQKKwlpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHsKKwkJcmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTsKKwl9CisKKwkvLyBFdmVudCBvYmplY3QKKwlpZiAoIHNyYyAmJiBzcmMudHlwZSApIHsKKwkJdGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjOworCQl0aGlzLnR5cGUgPSBzcmMudHlwZTsKKworCQkvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZAorCQkvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS4KKwkJdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fAorCQkJCXNyYy5kZWZhdWx0UHJldmVudGVkID09PSB1bmRlZmluZWQgJiYKKworCQkJCS8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seQorCQkJCXNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgPworCQkJcmV0dXJuVHJ1ZSA6CisJCQlyZXR1cm5GYWxzZTsKKworCQkvLyBDcmVhdGUgdGFyZ2V0IHByb3BlcnRpZXMKKwkJLy8gU3VwcG9ydDogU2FmYXJpIDw9NiAtIDcgb25seQorCQkvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgIzEzMTQzKQorCQl0aGlzLnRhcmdldCA9ICggc3JjLnRhcmdldCAmJiBzcmMudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkgPworCQkJc3JjLnRhcmdldC5wYXJlbnROb2RlIDoKKwkJCXNyYy50YXJnZXQ7CisKKwkJdGhpcy5jdXJyZW50VGFyZ2V0ID0gc3JjLmN1cnJlbnRUYXJnZXQ7CisJCXRoaXMucmVsYXRlZFRhcmdldCA9IHNyYy5yZWxhdGVkVGFyZ2V0OworCisJLy8gRXZlbnQgdHlwZQorCX0gZWxzZSB7CisJCXRoaXMudHlwZSA9IHNyYzsKKwl9CisKKwkvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdAorCWlmICggcHJvcHMgKSB7CisJCWpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7CisJfQorCisJLy8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmUKKwl0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IERhdGUubm93KCk7CisKKwkvLyBNYXJrIGl0IGFzIGZpeGVkCisJdGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7Cit9OworCisvLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmcKKy8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKK2pRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7CisJY29uc3RydWN0b3I6IGpRdWVyeS5FdmVudCwKKwlpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLAorCWlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKKwlpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsCisJaXNTaW11bGF0ZWQ6IGZhbHNlLAorCisJcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkgeworCQl2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsKKworCQl0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7CisKKwkJaWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkgeworCQkJZS5wcmV2ZW50RGVmYXVsdCgpOworCQl9CisJfSwKKwlzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkgeworCQl2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsKKworCQl0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTsKKworCQlpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7CisJCQllLnN0b3BQcm9wYWdhdGlvbigpOworCQl9CisJfSwKKwlzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkgeworCQl2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsKKworCQl0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTsKKworCQlpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7CisJCQllLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOworCQl9CisKKwkJdGhpcy5zdG9wUHJvcGFnYXRpb24oKTsKKwl9Cit9OworCisvLyBJbmNsdWRlcyBhbGwgY29tbW9uIGV2ZW50IHByb3BzIGluY2x1ZGluZyBLZXlFdmVudCBhbmQgTW91c2VFdmVudCBzcGVjaWZpYyBwcm9wcworalF1ZXJ5LmVhY2goIHsKKwlhbHRLZXk6IHRydWUsCisJYnViYmxlczogdHJ1ZSwKKwljYW5jZWxhYmxlOiB0cnVlLAorCWNoYW5nZWRUb3VjaGVzOiB0cnVlLAorCWN0cmxLZXk6IHRydWUsCisJZGV0YWlsOiB0cnVlLAorCWV2ZW50UGhhc2U6IHRydWUsCisJbWV0YUtleTogdHJ1ZSwKKwlwYWdlWDogdHJ1ZSwKKwlwYWdlWTogdHJ1ZSwKKwlzaGlmdEtleTogdHJ1ZSwKKwl2aWV3OiB0cnVlLAorCSJjaGFyIjogdHJ1ZSwKKwljaGFyQ29kZTogdHJ1ZSwKKwlrZXk6IHRydWUsCisJa2V5Q29kZTogdHJ1ZSwKKwlidXR0b246IHRydWUsCisJYnV0dG9uczogdHJ1ZSwKKwljbGllbnRYOiB0cnVlLAorCWNsaWVudFk6IHRydWUsCisJb2Zmc2V0WDogdHJ1ZSwKKwlvZmZzZXRZOiB0cnVlLAorCXBvaW50ZXJJZDogdHJ1ZSwKKwlwb2ludGVyVHlwZTogdHJ1ZSwKKwlzY3JlZW5YOiB0cnVlLAorCXNjcmVlblk6IHRydWUsCisJdGFyZ2V0VG91Y2hlczogdHJ1ZSwKKwl0b0VsZW1lbnQ6IHRydWUsCisJdG91Y2hlczogdHJ1ZSwKKworCXdoaWNoOiBmdW5jdGlvbiggZXZlbnQgKSB7CisJCXZhciBidXR0b24gPSBldmVudC5idXR0b247CisKKwkJLy8gQWRkIHdoaWNoIGZvciBrZXkgZXZlbnRzCisJCWlmICggZXZlbnQud2hpY2ggPT0gbnVsbCAmJiBya2V5RXZlbnQudGVzdCggZXZlbnQudHlwZSApICkgeworCQkJcmV0dXJuIGV2ZW50LmNoYXJDb2RlICE9IG51bGwgPyBldmVudC5jaGFyQ29kZSA6IGV2ZW50LmtleUNvZGU7CisJCX0KKworCQkvLyBBZGQgd2hpY2ggZm9yIGNsaWNrOiAxID09PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMgPT09IHJpZ2h0CisJCWlmICggIWV2ZW50LndoaWNoICYmIGJ1dHRvbiAhPT0gdW5kZWZpbmVkICYmIHJtb3VzZUV2ZW50LnRlc3QoIGV2ZW50LnR5cGUgKSApIHsKKwkJCWlmICggYnV0dG9uICYgMSApIHsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKworCQkJaWYgKCBidXR0b24gJiAyICkgeworCQkJCXJldHVybiAzOworCQkJfQorCisJCQlpZiAoIGJ1dHRvbiAmIDQgKSB7CisJCQkJcmV0dXJuIDI7CisJCQl9CisKKwkJCXJldHVybiAwOworCQl9CisKKwkJcmV0dXJuIGV2ZW50LndoaWNoOworCX0KK30sIGpRdWVyeS5ldmVudC5hZGRQcm9wICk7CisKKy8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrcworLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0aW9uIHdvcmtzIGluIGpRdWVyeS4KKy8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0CisvLworLy8gU3VwcG9ydDogU2FmYXJpIDcgb25seQorLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6CisvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAyNTgKKy8vIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAoaXQgZXhpc3RlZCBpbiBvbGRlciBDaHJvbWUgdmVyc2lvbnMgYXMgd2VsbCkuCitqUXVlcnkuZWFjaCggeworCW1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLAorCW1vdXNlbGVhdmU6ICJtb3VzZW91dCIsCisJcG9pbnRlcmVudGVyOiAicG9pbnRlcm92ZXIiLAorCXBvaW50ZXJsZWF2ZTogInBvaW50ZXJvdXQiCit9LCBmdW5jdGlvbiggb3JpZywgZml4ICkgeworCWpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7CisJCWRlbGVnYXRlVHlwZTogZml4LAorCQliaW5kVHlwZTogZml4LAorCisJCWhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkgeworCQkJdmFyIHJldCwKKwkJCQl0YXJnZXQgPSB0aGlzLAorCQkJCXJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LAorCQkJCWhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajsKKworCQkJLy8gRm9yIG1vdXNlZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC4KKwkJCS8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93CisJCQlpZiAoICFyZWxhdGVkIHx8ICggcmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApICkgKSB7CisJCQkJZXZlbnQudHlwZSA9IGhhbmRsZU9iai5vcmlnVHlwZTsKKwkJCQlyZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7CisJCQkJZXZlbnQudHlwZSA9IGZpeDsKKwkJCX0KKwkJCXJldHVybiByZXQ7CisJCX0KKwl9OworfSApOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisKKwlvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7CisJCXJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApOworCX0sCisJb25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHsKKwkJcmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAxICk7CisJfSwKKwlvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkgeworCQl2YXIgaGFuZGxlT2JqLCB0eXBlOworCQlpZiAoIHR5cGVzICYmIHR5cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaiApIHsKKworCQkJLy8gKCBldmVudCApICBkaXNwYXRjaGVkIGpRdWVyeS5FdmVudAorCQkJaGFuZGxlT2JqID0gdHlwZXMuaGFuZGxlT2JqOworCQkJalF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZigKKwkJCQloYW5kbGVPYmoubmFtZXNwYWNlID8KKwkJCQkJaGFuZGxlT2JqLm9yaWdUeXBlICsgIi4iICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6CisJCQkJCWhhbmRsZU9iai5vcmlnVHlwZSwKKwkJCQloYW5kbGVPYmouc2VsZWN0b3IsCisJCQkJaGFuZGxlT2JqLmhhbmRsZXIKKwkJCSk7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQlpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9iamVjdCIgKSB7CisKKwkJCS8vICggdHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApCisJCQlmb3IgKCB0eXBlIGluIHR5cGVzICkgeworCQkJCXRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApOworCQkJfQorCQkJcmV0dXJuIHRoaXM7CisJCX0KKwkJaWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSAiZnVuY3Rpb24iICkgeworCisJCQkvLyAoIHR5cGVzIFssIGZuXSApCisJCQlmbiA9IHNlbGVjdG9yOworCQkJc2VsZWN0b3IgPSB1bmRlZmluZWQ7CisJCX0KKwkJaWYgKCBmbiA9PT0gZmFsc2UgKSB7CisJCQlmbiA9IHJldHVybkZhbHNlOworCQl9CisJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworCQkJalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApOworCQl9ICk7CisJfQorfSApOworCisKK3ZhcgorCisJLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqLworCisJLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2lzc3Vlcy8zMjI5CisJcnhodG1sVGFnID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW2Etel1bXlwvXDA+XHgyMFx0XHJcblxmXSopW14+XSopXC8+L2dpLAorCisJLyogZXNsaW50LWVuYWJsZSAqLworCisJLy8gU3VwcG9ydDogSUUgPD0xMCAtIDExLCBFZGdlIDEyIC0gMTMgb25seQorCS8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuCisJLy8gU2VlIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvMTczNjUxMi8KKwlybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSwKKworCS8vIGNoZWNrZWQ9ImNoZWNrZWQiIG9yIGNoZWNrZWQKKwlyY2hlY2tlZCA9IC9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLAorCXJjbGVhblNjcmlwdCA9IC9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZzsKKworLy8gUHJlZmVyIGEgdGJvZHkgb3ZlciBpdHMgcGFyZW50IHRhYmxlIGZvciBjb250YWluaW5nIG5ldyByb3dzCitmdW5jdGlvbiBtYW5pcHVsYXRpb25UYXJnZXQoIGVsZW0sIGNvbnRlbnQgKSB7CisJaWYgKCBub2RlTmFtZSggZWxlbSwgInRhYmxlIiApICYmCisJCW5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsICJ0ciIgKSApIHsKKworCQlyZXR1cm4galF1ZXJ5KCBlbGVtICkuY2hpbGRyZW4oICJ0Ym9keSIgKVsgMCBdIHx8IGVsZW07CisJfQorCisJcmV0dXJuIGVsZW07Cit9CisKKy8vIFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0IGVsZW1lbnRzIGZvciBzYWZlIERPTSBtYW5pcHVsYXRpb24KK2Z1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7CisJZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggInR5cGUiICkgIT09IG51bGwgKSArICIvIiArIGVsZW0udHlwZTsKKwlyZXR1cm4gZWxlbTsKK30KK2Z1bmN0aW9uIHJlc3RvcmVTY3JpcHQoIGVsZW0gKSB7CisJaWYgKCAoIGVsZW0udHlwZSB8fCAiIiApLnNsaWNlKCAwLCA1ICkgPT09ICJ0cnVlLyIgKSB7CisJCWVsZW0udHlwZSA9IGVsZW0udHlwZS5zbGljZSggNSApOworCX0gZWxzZSB7CisJCWVsZW0ucmVtb3ZlQXR0cmlidXRlKCAidHlwZSIgKTsKKwl9CisKKwlyZXR1cm4gZWxlbTsKK30KKworZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHsKKwl2YXIgaSwgbCwgdHlwZSwgcGRhdGFPbGQsIHBkYXRhQ3VyLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50czsKKworCWlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHsKKwkJcmV0dXJuOworCX0KKworCS8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuCisJaWYgKCBkYXRhUHJpdi5oYXNEYXRhKCBzcmMgKSApIHsKKwkJcGRhdGFPbGQgPSBkYXRhUHJpdi5hY2Nlc3MoIHNyYyApOworCQlwZGF0YUN1ciA9IGRhdGFQcml2LnNldCggZGVzdCwgcGRhdGFPbGQgKTsKKwkJZXZlbnRzID0gcGRhdGFPbGQuZXZlbnRzOworCisJCWlmICggZXZlbnRzICkgeworCQkJZGVsZXRlIHBkYXRhQ3VyLmhhbmRsZTsKKwkJCXBkYXRhQ3VyLmV2ZW50cyA9IHt9OworCisJCQlmb3IgKCB0eXBlIGluIGV2ZW50cyApIHsKKwkJCQlmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKwkJCQkJalF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8vIDIuIENvcHkgdXNlciBkYXRhCisJaWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHsKKwkJdWRhdGFPbGQgPSBkYXRhVXNlci5hY2Nlc3MoIHNyYyApOworCQl1ZGF0YUN1ciA9IGpRdWVyeS5leHRlbmQoIHt9LCB1ZGF0YU9sZCApOworCisJCWRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTsKKwl9Cit9CisKKy8vIEZpeCBJRSBidWdzLCBzZWUgc3VwcG9ydCB0ZXN0cworZnVuY3Rpb24gZml4SW5wdXQoIHNyYywgZGVzdCApIHsKKwl2YXIgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisKKwkvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi4KKwlpZiAoIG5vZGVOYW1lID09PSAiaW5wdXQiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7CisJCWRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkOworCisJLy8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnMKKwl9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gImlucHV0IiB8fCBub2RlTmFtZSA9PT0gInRleHRhcmVhIiApIHsKKwkJZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlOworCX0KK30KKworZnVuY3Rpb24gZG9tTWFuaXAoIGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICkgeworCisJLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cworCWFyZ3MgPSBjb25jYXQuYXBwbHkoIFtdLCBhcmdzICk7CisKKwl2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2RlLCBkb2MsCisJCWkgPSAwLAorCQlsID0gY29sbGVjdGlvbi5sZW5ndGgsCisJCWlOb0Nsb25lID0gbCAtIDEsCisJCXZhbHVlID0gYXJnc1sgMCBdLAorCQl2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApOworCisJLy8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0CisJaWYgKCB2YWx1ZUlzRnVuY3Rpb24gfHwKKwkJCSggbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJgorCQkJCSFzdXBwb3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkgeworCQlyZXR1cm4gY29sbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggaW5kZXggKSB7CisJCQl2YXIgc2VsZiA9IGNvbGxlY3Rpb24uZXEoIGluZGV4ICk7CisJCQlpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHsKKwkJCQlhcmdzWyAwIF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwgc2VsZi5odG1sKCkgKTsKKwkJCX0KKwkJCWRvbU1hbmlwKCBzZWxmLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApOworCQl9ICk7CisJfQorCisJaWYgKCBsICkgeworCQlmcmFnbWVudCA9IGJ1aWxkRnJhZ21lbnQoIGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5vd25lckRvY3VtZW50LCBmYWxzZSwgY29sbGVjdGlvbiwgaWdub3JlZCApOworCQlmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7CisKKwkJaWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHsKKwkJCWZyYWdtZW50ID0gZmlyc3Q7CisJCX0KKworCQkvLyBSZXF1aXJlIGVpdGhlciBuZXcgY29udGVudCBvciBhbiBpbnRlcmVzdCBpbiBpZ25vcmVkIGVsZW1lbnRzIHRvIGludm9rZSB0aGUgY2FsbGJhY2sKKwkJaWYgKCBmaXJzdCB8fCBpZ25vcmVkICkgeworCQkJc2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsICJzY3JpcHQiICksIGRpc2FibGVTY3JpcHQgKTsKKwkJCWhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0aDsKKworCQkJLy8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbQorCQkJLy8gaW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwCisJCQkvLyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4gc2l0dWF0aW9ucyAoIzgwNzApLgorCQkJZm9yICggOyBpIDwgbDsgaSsrICkgeworCQkJCW5vZGUgPSBmcmFnbWVudDsKKworCQkJCWlmICggaSAhPT0gaU5vQ2xvbmUgKSB7CisJCQkJCW5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTsKKworCQkJCQkvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uCisJCQkJCWlmICggaGFzU2NyaXB0cyApIHsKKworCQkJCQkJLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5CisJCQkJCQkvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0CisJCQkJCQlqUXVlcnkubWVyZ2UoIHNjcmlwdHMsIGdldEFsbCggbm9kZSwgInNjcmlwdCIgKSApOworCQkJCQl9CisJCQkJfQorCisJCQkJY2FsbGJhY2suY2FsbCggY29sbGVjdGlvblsgaSBdLCBub2RlLCBpICk7CisJCQl9CisKKwkJCWlmICggaGFzU2NyaXB0cyApIHsKKwkJCQlkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50OworCisJCQkJLy8gUmVlbmFibGUgc2NyaXB0cworCQkJCWpRdWVyeS5tYXAoIHNjcmlwdHMsIHJlc3RvcmVTY3JpcHQgKTsKKworCQkJCS8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb24KKwkJCQlmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHsKKwkJCQkJbm9kZSA9IHNjcmlwdHNbIGkgXTsKKwkJCQkJaWYgKCByc2NyaXB0VHlwZS50ZXN0KCBub2RlLnR5cGUgfHwgIiIgKSAmJgorCQkJCQkJIWRhdGFQcml2LmFjY2Vzcyggbm9kZSwgImdsb2JhbEV2YWwiICkgJiYKKwkJCQkJCWpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7CisKKwkJCQkJCWlmICggbm9kZS5zcmMgJiYgKCBub2RlLnR5cGUgfHwgIiIgKS50b0xvd2VyQ2FzZSgpICAhPT0gIm1vZHVsZSIgKSB7CisKKwkJCQkJCQkvLyBPcHRpb25hbCBBSkFYIGRlcGVuZGVuY3ksIGJ1dCB3b24ndCBydW4gc2NyaXB0cyBpZiBub3QgcHJlc2VudAorCQkJCQkJCWlmICggalF1ZXJ5Ll9ldmFsVXJsICkgeworCQkJCQkJCQlqUXVlcnkuX2V2YWxVcmwoIG5vZGUuc3JjICk7CisJCQkJCQkJfQorCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlET01FdmFsKCBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgIiIgKSwgZG9jLCBub2RlICk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gY29sbGVjdGlvbjsKK30KKworZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7CisJdmFyIG5vZGUsCisJCW5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSwKKwkJaSA9IDA7CisKKwlmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7CisJCWlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7CisJCQlqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUgKSApOworCQl9CisKKwkJaWYgKCBub2RlLnBhcmVudE5vZGUgKSB7CisJCQlpZiAoIGtlZXBEYXRhICYmIGpRdWVyeS5jb250YWlucyggbm9kZS5vd25lckRvY3VtZW50LCBub2RlICkgKSB7CisJCQkJc2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCAic2NyaXB0IiApICk7CisJCQl9CisJCQlub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTsKKwkJfQorCX0KKworCXJldHVybiBlbGVtOworfQorCitqUXVlcnkuZXh0ZW5kKCB7CisJaHRtbFByZWZpbHRlcjogZnVuY3Rpb24oIGh0bWwgKSB7CisJCXJldHVybiBodG1sLnJlcGxhY2UoIHJ4aHRtbFRhZywgIjwkMT48LyQyPiIgKTsKKwl9LAorCisJY2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKKwkJdmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsCisJCQljbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksCisJCQlpblBhZ2UgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApOworCisJCS8vIEZpeCBJRSBjbG9uaW5nIGlzc3VlcworCQlpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmCisJCQkJIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkgeworCisJCQkvLyBXZSBlc2NoZXcgU2l6emxlIGhlcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM6IGh0dHBzOi8vanNwZXJmLmNvbS9nZXRhbGwtdnMtc2l6emxlLzIKKwkJCWRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTsKKwkJCXNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7CisKKwkJCWZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworCQkJCWZpeElucHV0KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApOworCQkJfQorCQl9CisKKwkJLy8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZQorCQlpZiAoIGRhdGFBbmRFdmVudHMgKSB7CisJCQlpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkgeworCQkJCXNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7CisJCQkJZGVzdEVsZW1lbnRzID0gZGVzdEVsZW1lbnRzIHx8IGdldEFsbCggY2xvbmUgKTsKKworCQkJCWZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworCQkJCQljbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApOworCQkJfQorCQl9CisKKwkJLy8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeQorCQlkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCAic2NyaXB0IiApOworCQlpZiAoIGRlc3RFbGVtZW50cy5sZW5ndGggPiAwICkgeworCQkJc2V0R2xvYmFsRXZhbCggZGVzdEVsZW1lbnRzLCAhaW5QYWdlICYmIGdldEFsbCggZWxlbSwgInNjcmlwdCIgKSApOworCQl9CisKKwkJLy8gUmV0dXJuIHRoZSBjbG9uZWQgc2V0CisJCXJldHVybiBjbG9uZTsKKwl9LAorCisJY2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7CisJCXZhciBkYXRhLCBlbGVtLCB0eXBlLAorCQkJc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsLAorCQkJaSA9IDA7CisKKwkJZm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsrICkgeworCQkJaWYgKCBhY2NlcHREYXRhKCBlbGVtICkgKSB7CisJCQkJaWYgKCAoIGRhdGEgPSBlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gKSApIHsKKwkJCQkJaWYgKCBkYXRhLmV2ZW50cyApIHsKKwkJCQkJCWZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7CisJCQkJCQkJaWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7CisJCQkJCQkJCWpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTsKKworCQkJCQkJCS8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVtb3ZlJ3Mgb3ZlcmhlYWQKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGRhdGEuaGFuZGxlICk7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJLy8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NSsKKwkJCQkJLy8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlCisJCQkJCWVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSA9IHVuZGVmaW5lZDsKKwkJCQl9CisJCQkJaWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7CisKKwkJCQkJLy8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NSsKKwkJCQkJLy8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlCisJCQkJCWVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9ICk7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKwlkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKwkJcmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IsIHRydWUgKTsKKwl9LAorCisJcmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisJCXJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yICk7CisJfSwKKworCXRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKwkJcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgeworCQkJcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPworCQkJCWpRdWVyeS50ZXh0KCB0aGlzICkgOgorCQkJCXRoaXMuZW1wdHkoKS5lYWNoKCBmdW5jdGlvbigpIHsKKwkJCQkJaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7CisJCQkJCQl0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7CisJCQkJCX0KKwkJCQl9ICk7CisJCX0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7CisJfSwKKworCWFwcGVuZDogZnVuY3Rpb24oKSB7CisJCXJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKwkJCWlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkgeworCQkJCXZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTsKKwkJCQl0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTsKKwkJCX0KKwkJfSApOworCX0sCisKKwlwcmVwZW5kOiBmdW5jdGlvbigpIHsKKwkJcmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworCQkJaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7CisJCQkJdmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApOworCQkJCXRhcmdldC5pbnNlcnRCZWZvcmUoIGVsZW0sIHRhcmdldC5maXJzdENoaWxkICk7CisJCQl9CisJCX0gKTsKKwl9LAorCisJYmVmb3JlOiBmdW5jdGlvbigpIHsKKwkJcmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworCQkJaWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7CisJCQkJdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApOworCQkJfQorCQl9ICk7CisJfSwKKworCWFmdGVyOiBmdW5jdGlvbigpIHsKKwkJcmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworCQkJaWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7CisJCQkJdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApOworCQkJfQorCQl9ICk7CisJfSwKKworCWVtcHR5OiBmdW5jdGlvbigpIHsKKwkJdmFyIGVsZW0sCisJCQlpID0gMDsKKworCQlmb3IgKCA7ICggZWxlbSA9IHRoaXNbIGkgXSApICE9IG51bGw7IGkrKyApIHsKKwkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKworCQkJCS8vIFByZXZlbnQgbWVtb3J5IGxlYWtzCisJCQkJalF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7CisKKwkJCQkvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2RlcworCQkJCWVsZW0udGV4dENvbnRlbnQgPSAiIjsKKwkJCX0KKwkJfQorCisJCXJldHVybiB0aGlzOworCX0sCisKKwljbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkgeworCQlkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzOworCQlkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7CisKKwkJcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHsKKwkJCXJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7CisJCX0gKTsKKwl9LAorCisJaHRtbDogZnVuY3Rpb24oIHZhbHVlICkgeworCQlyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7CisJCQl2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSwKKwkJCQlpID0gMCwKKwkJCQlsID0gdGhpcy5sZW5ndGg7CisKKwkJCWlmICggdmFsdWUgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgeworCQkJCXJldHVybiBlbGVtLmlubmVySFRNTDsKKwkJCX0KKworCQkJLy8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTAorCQkJaWYgKCB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJgorCQkJCSF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyAiIiwgIiIgXSApWyAxIF0udG9Mb3dlckNhc2UoKSBdICkgeworCisJCQkJdmFsdWUgPSBqUXVlcnkuaHRtbFByZWZpbHRlciggdmFsdWUgKTsKKworCQkJCXRyeSB7CisJCQkJCWZvciAoIDsgaSA8IGw7IGkrKyApIHsKKwkJCQkJCWVsZW0gPSB0aGlzWyBpIF0gfHwge307CisKKwkJCQkJCS8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcworCQkJCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworCQkJCQkJCWpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApOworCQkJCQkJCWVsZW0uaW5uZXJIVE1MID0gdmFsdWU7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQllbGVtID0gMDsKKworCQkJCS8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZAorCQkJCX0gY2F0Y2ggKCBlICkge30KKwkJCX0KKworCQkJaWYgKCBlbGVtICkgeworCQkJCXRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7CisJCQl9CisJCX0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7CisJfSwKKworCXJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHsKKwkJdmFyIGlnbm9yZWQgPSBbXTsKKworCQkvLyBNYWtlIHRoZSBjaGFuZ2VzLCByZXBsYWNpbmcgZWFjaCBub24taWdub3JlZCBjb250ZXh0IGVsZW1lbnQgd2l0aCB0aGUgbmV3IGNvbnRlbnQKKwkJcmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworCQkJdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTsKKworCQkJaWYgKCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3JlZCApIDwgMCApIHsKKwkJCQlqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIHRoaXMgKSApOworCQkJCWlmICggcGFyZW50ICkgeworCQkJCQlwYXJlbnQucmVwbGFjZUNoaWxkKCBlbGVtLCB0aGlzICk7CisJCQkJfQorCQkJfQorCisJCS8vIEZvcmNlIGNhbGxiYWNrIGludm9jYXRpb24KKwkJfSwgaWdub3JlZCApOworCX0KK30gKTsKKworalF1ZXJ5LmVhY2goIHsKKwlhcHBlbmRUbzogImFwcGVuZCIsCisJcHJlcGVuZFRvOiAicHJlcGVuZCIsCisJaW5zZXJ0QmVmb3JlOiAiYmVmb3JlIiwKKwlpbnNlcnRBZnRlcjogImFmdGVyIiwKKwlyZXBsYWNlQWxsOiAicmVwbGFjZVdpdGgiCit9LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7CisJalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisJCXZhciBlbGVtcywKKwkJCXJldCA9IFtdLAorCQkJaW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciApLAorCQkJbGFzdCA9IGluc2VydC5sZW5ndGggLSAxLAorCQkJaSA9IDA7CisKKwkJZm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHsKKwkJCWVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7CisJCQlqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7CisKKwkJCS8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seQorCQkJLy8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdAorCQkJcHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApOworCQl9CisKKwkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQgKTsKKwl9OworfSApOwordmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoICJeKCIgKyBwbnVtICsgIikoPyFweClbYS16JV0rJCIsICJpIiApOworCit2YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7CisKKwkJLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5LCBGaXJlZm94IDw9MzAgKCMxNTA5OCwgIzE0MTUwKQorCQkvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHMKKwkJLy8gRkYgbWVhbndoaWxlIHRocm93cyBvbiBmcmFtZSBlbGVtZW50cyB0aHJvdWdoICJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlIgorCQl2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldzsKKworCQlpZiAoICF2aWV3IHx8ICF2aWV3Lm9wZW5lciApIHsKKwkJCXZpZXcgPSB3aW5kb3c7CisJCX0KKworCQlyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7CisJfTsKKwordmFyIHJib3hTdHlsZSA9IG5ldyBSZWdFeHAoIGNzc0V4cGFuZC5qb2luKCAifCIgKSwgImkiICk7CisKKworCisoIGZ1bmN0aW9uKCkgeworCisJLy8gRXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBvbmUgbGF5b3V0CisJLy8gc28gdGhleSdyZSBleGVjdXRlZCBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgdGhlIHNlY29uZCBjb21wdXRhdGlvbi4KKwlmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHsKKworCQkvLyBUaGlzIGlzIGEgc2luZ2xldG9uLCB3ZSBuZWVkIHRvIGV4ZWN1dGUgaXQgb25seSBvbmNlCisJCWlmICggIWRpdiApIHsKKwkJCXJldHVybjsKKwkJfQorCisJCWNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDsiICsKKwkJCSJtYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjAiOworCQlkaXYuc3R5bGUuY3NzVGV4dCA9CisJCQkicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsOyIgKworCQkJIm1hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7IiArCisJCQkid2lkdGg6NjAlO3RvcDoxJSI7CisJCWRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApOworCisJCXZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTsKKwkJcGl4ZWxQb3NpdGlvblZhbCA9IGRpdlN0eWxlLnRvcCAhPT0gIjElIjsKKworCQkvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDQ0CisJCXJlbGlhYmxlTWFyZ2luTGVmdFZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUubWFyZ2luTGVmdCApID09PSAxMjsKKworCQkvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBTYWZhcmkgPD05LjEgLSAxMC4xLCBpT1MgPD03LjAgLSA5LjMKKwkJLy8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0CisJCWRpdi5zdHlsZS5yaWdodCA9ICI2MCUiOworCQlwaXhlbEJveFN0eWxlc1ZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUucmlnaHQgKSA9PT0gMzY7CisKKwkJLy8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHkKKwkJLy8gRGV0ZWN0IG1pc3JlcG9ydGluZyBvZiBjb250ZW50IGRpbWVuc2lvbnMgZm9yIGJveC1zaXppbmc6Ym9yZGVyLWJveCBlbGVtZW50cworCQlib3hTaXppbmdSZWxpYWJsZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUud2lkdGggKSA9PT0gMzY7CisKKwkJLy8gU3VwcG9ydDogSUUgOSBvbmx5CisJCS8vIERldGVjdCBvdmVyZmxvdzpzY3JvbGwgc2NyZXdpbmVzcyAoZ2gtMzY5OSkKKwkJZGl2LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKKwkJc2Nyb2xsYm94U2l6ZVZhbCA9IGRpdi5vZmZzZXRXaWR0aCA9PT0gMzYgfHwgImFic29sdXRlIjsKKworCQlkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApOworCisJCS8vIE51bGxpZnkgdGhlIGRpdiBzbyBpdCB3b3VsZG4ndCBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeSBhbmQKKwkJLy8gaXQgd2lsbCBhbHNvIGJlIGEgc2lnbiB0aGF0IGNoZWNrcyBhbHJlYWR5IHBlcmZvcm1lZAorCQlkaXYgPSBudWxsOworCX0KKworCWZ1bmN0aW9uIHJvdW5kUGl4ZWxNZWFzdXJlcyggbWVhc3VyZSApIHsKKwkJcmV0dXJuIE1hdGgucm91bmQoIHBhcnNlRmxvYXQoIG1lYXN1cmUgKSApOworCX0KKworCXZhciBwaXhlbFBvc2l0aW9uVmFsLCBib3hTaXppbmdSZWxpYWJsZVZhbCwgc2Nyb2xsYm94U2l6ZVZhbCwgcGl4ZWxCb3hTdHlsZXNWYWwsCisJCXJlbGlhYmxlTWFyZ2luTGVmdFZhbCwKKwkJY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKSwKKwkJZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKTsKKworCS8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChub24tYnJvd3NlcikgZW52aXJvbm1lbnRzCisJaWYgKCAhZGl2LnN0eWxlICkgeworCQlyZXR1cm47CisJfQorCisJLy8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seQorCS8vIFN0eWxlIG9mIGNsb25lZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVkICgjODkwOCkKKwlkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPSAiY29udGVudC1ib3giOworCWRpdi5jbG9uZU5vZGUoIHRydWUgKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9ICIiOworCXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlID0gZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID09PSAiY29udGVudC1ib3giOworCisJalF1ZXJ5LmV4dGVuZCggc3VwcG9ydCwgeworCQlib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7CisJCQljb21wdXRlU3R5bGVUZXN0cygpOworCQkJcmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsOworCQl9LAorCQlwaXhlbEJveFN0eWxlczogZnVuY3Rpb24oKSB7CisJCQljb21wdXRlU3R5bGVUZXN0cygpOworCQkJcmV0dXJuIHBpeGVsQm94U3R5bGVzVmFsOworCQl9LAorCQlwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHsKKwkJCWNvbXB1dGVTdHlsZVRlc3RzKCk7CisJCQlyZXR1cm4gcGl4ZWxQb3NpdGlvblZhbDsKKwkJfSwKKwkJcmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHsKKwkJCWNvbXB1dGVTdHlsZVRlc3RzKCk7CisJCQlyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsOworCQl9LAorCQlzY3JvbGxib3hTaXplOiBmdW5jdGlvbigpIHsKKwkJCWNvbXB1dGVTdHlsZVRlc3RzKCk7CisJCQlyZXR1cm4gc2Nyb2xsYm94U2l6ZVZhbDsKKwkJfQorCX0gKTsKK30gKSgpOworCisKK2Z1bmN0aW9uIGN1ckNTUyggZWxlbSwgbmFtZSwgY29tcHV0ZWQgKSB7CisJdmFyIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgsIHJldCwKKworCQkvLyBTdXBwb3J0OiBGaXJlZm94IDUxKworCQkvLyBSZXRyaWV2aW5nIHN0eWxlIGJlZm9yZSBjb21wdXRlZCBzb21laG93CisJCS8vIGZpeGVzIGFuIGlzc3VlIHdpdGggZ2V0dGluZyB3cm9uZyB2YWx1ZXMKKwkJLy8gb24gZGV0YWNoZWQgZWxlbWVudHMKKwkJc3R5bGUgPSBlbGVtLnN0eWxlOworCisJY29tcHV0ZWQgPSBjb21wdXRlZCB8fCBnZXRTdHlsZXMoIGVsZW0gKTsKKworCS8vIGdldFByb3BlcnR5VmFsdWUgaXMgbmVlZGVkIGZvcjoKKwkvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksICMxMjUzNykKKwkvLyAgIC5jc3MoJy0tY3VzdG9tUHJvcGVydHkpICgjMzE0NCkKKwlpZiAoIGNvbXB1dGVkICkgeworCQlyZXQgPSBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXTsKKworCQlpZiAoIHJldCA9PT0gIiIgJiYgIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgKSB7CisJCQlyZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTsKKwkJfQorCisJCS8vIEEgdHJpYnV0ZSB0byB0aGUgImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHMiCisJCS8vIEFuZHJvaWQgQnJvd3NlciByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIHNvbWUgdmFsdWVzLAorCQkvLyBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzLgorCQkvLyBUaGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6CisJCS8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzCisJCWlmICggIXN1cHBvcnQucGl4ZWxCb3hTdHlsZXMoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcmJveFN0eWxlLnRlc3QoIG5hbWUgKSApIHsKKworCQkJLy8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlcworCQkJd2lkdGggPSBzdHlsZS53aWR0aDsKKwkJCW1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7CisJCQltYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoOworCisJCQkvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0CisJCQlzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7CisJCQlyZXQgPSBjb21wdXRlZC53aWR0aDsKKworCQkJLy8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlcworCQkJc3R5bGUud2lkdGggPSB3aWR0aDsKKwkJCXN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7CisJCQlzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoOworCQl9CisJfQorCisJcmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID8KKworCQkvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5CisJCS8vIElFIHJldHVybnMgekluZGV4IHZhbHVlIGFzIGFuIGludGVnZXIuCisJCXJldCArICIiIDoKKwkJcmV0OworfQorCisKK2Z1bmN0aW9uIGFkZEdldEhvb2tJZiggY29uZGl0aW9uRm4sIGhvb2tGbiApIHsKKworCS8vIERlZmluZSB0aGUgaG9vaywgd2UnbGwgY2hlY2sgb24gdGhlIGZpcnN0IHJ1biBpZiBpdCdzIHJlYWxseSBuZWVkZWQuCisJcmV0dXJuIHsKKwkJZ2V0OiBmdW5jdGlvbigpIHsKKwkJCWlmICggY29uZGl0aW9uRm4oKSApIHsKKworCQkJCS8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZQorCQkJCS8vIHRvIG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC4KKwkJCQlkZWxldGUgdGhpcy5nZXQ7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQkvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi4KKwkJCXJldHVybiAoIHRoaXMuZ2V0ID0gaG9va0ZuICkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworCQl9CisJfTsKK30KKworCit2YXIKKworCS8vIFN3YXBwYWJsZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGggdGFibGUKKwkvLyBleGNlcHQgInRhYmxlIiwgInRhYmxlLWNlbGwiLCBvciAidGFibGUtY2FwdGlvbiIKKwkvLyBTZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXkKKwlyZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sCisJcmN1c3RvbVByb3AgPSAvXi0tLywKKwljc3NTaG93ID0geyBwb3NpdGlvbjogImFic29sdXRlIiwgdmlzaWJpbGl0eTogImhpZGRlbiIsIGRpc3BsYXk6ICJibG9jayIgfSwKKwljc3NOb3JtYWxUcmFuc2Zvcm0gPSB7CisJCWxldHRlclNwYWNpbmc6ICIwIiwKKwkJZm9udFdlaWdodDogIjQwMCIKKwl9LAorCisJY3NzUHJlZml4ZXMgPSBbICJXZWJraXQiLCAiTW96IiwgIm1zIiBdLAorCWVtcHR5U3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApLnN0eWxlOworCisvLyBSZXR1cm4gYSBjc3MgcHJvcGVydHkgbWFwcGVkIHRvIGEgcG90ZW50aWFsbHkgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5CitmdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHsKKworCS8vIFNob3J0Y3V0IGZvciBuYW1lcyB0aGF0IGFyZSBub3QgdmVuZG9yIHByZWZpeGVkCisJaWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7CisJCXJldHVybiBuYW1lOworCX0KKworCS8vIENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXMKKwl2YXIgY2FwTmFtZSA9IG5hbWVbIDAgXS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSggMSApLAorCQlpID0gY3NzUHJlZml4ZXMubGVuZ3RoOworCisJd2hpbGUgKCBpLS0gKSB7CisJCW5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTsKKwkJaWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7CisJCQlyZXR1cm4gbmFtZTsKKwkJfQorCX0KK30KKworLy8gUmV0dXJuIGEgcHJvcGVydHkgbWFwcGVkIGFsb25nIHdoYXQgalF1ZXJ5LmNzc1Byb3BzIHN1Z2dlc3RzIG9yIHRvCisvLyBhIHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eS4KK2Z1bmN0aW9uIGZpbmFsUHJvcE5hbWUoIG5hbWUgKSB7CisJdmFyIHJldCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdOworCWlmICggIXJldCApIHsKKwkJcmV0ID0galF1ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2Z1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7CisKKwkvLyBBbnkgcmVsYXRpdmUgKCsvLSkgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuCisJLy8gbm9ybWFsaXplZCBhdCB0aGlzIHBvaW50CisJdmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7CisJcmV0dXJuIG1hdGNoZXMgPworCisJCS8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkICJzdWJ0cmFjdCIsIGUuZy4sIHdoZW4gdXNlZCBhcyBpbiBjc3NIb29rcworCQlNYXRoLm1heCggMCwgbWF0Y2hlc1sgMiBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sgMyBdIHx8ICJweCIgKSA6CisJCXZhbHVlOworfQorCitmdW5jdGlvbiBib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgYm94LCBpc0JvcmRlckJveCwgc3R5bGVzLCBjb21wdXRlZFZhbCApIHsKKwl2YXIgaSA9IGRpbWVuc2lvbiA9PT0gIndpZHRoIiA/IDEgOiAwLAorCQlleHRyYSA9IDAsCisJCWRlbHRhID0gMDsKKworCS8vIEFkanVzdG1lbnQgbWF5IG5vdCBiZSBuZWNlc3NhcnkKKwlpZiAoIGJveCA9PT0gKCBpc0JvcmRlckJveCA/ICJib3JkZXIiIDogImNvbnRlbnQiICkgKSB7CisJCXJldHVybiAwOworCX0KKworCWZvciAoIDsgaSA8IDQ7IGkgKz0gMiApIHsKKworCQkvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW4KKwkJaWYgKCBib3ggPT09ICJtYXJnaW4iICkgeworCQkJZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgYm94ICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApOworCQl9CisKKwkJLy8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGNvbnRlbnQtYm94LCB3ZSdyZSBzZWVraW5nICJwYWRkaW5nIiBvciAiYm9yZGVyIiBvciAibWFyZ2luIgorCQlpZiAoICFpc0JvcmRlckJveCApIHsKKworCQkJLy8gQWRkIHBhZGRpbmcKKwkJCWRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sICJwYWRkaW5nIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTsKKworCQkJLy8gRm9yICJib3JkZXIiIG9yICJtYXJnaW4iLCBhZGQgYm9yZGVyCisJCQlpZiAoIGJveCAhPT0gInBhZGRpbmciICkgeworCQkJCWRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sICJib3JkZXIiICsgY3NzRXhwYW5kWyBpIF0gKyAiV2lkdGgiLCB0cnVlLCBzdHlsZXMgKTsKKworCQkJLy8gQnV0IHN0aWxsIGtlZXAgdHJhY2sgb2YgaXQgb3RoZXJ3aXNlCisJCQl9IGVsc2UgeworCQkJCWV4dHJhICs9IGpRdWVyeS5jc3MoIGVsZW0sICJib3JkZXIiICsgY3NzRXhwYW5kWyBpIF0gKyAiV2lkdGgiLCB0cnVlLCBzdHlsZXMgKTsKKwkJCX0KKworCQkvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgYm9yZGVyLWJveCAoY29udGVudCArIHBhZGRpbmcgKyBib3JkZXIpLCB3ZSdyZSBzZWVraW5nICJjb250ZW50IiBvcgorCQkvLyAicGFkZGluZyIgb3IgIm1hcmdpbiIKKwkJfSBlbHNlIHsKKworCQkJLy8gRm9yICJjb250ZW50Iiwgc3VidHJhY3QgcGFkZGluZworCQkJaWYgKCBib3ggPT09ICJjb250ZW50IiApIHsKKwkJCQlkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCAicGFkZGluZyIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7CisJCQl9CisKKwkJCS8vIEZvciAiY29udGVudCIgb3IgInBhZGRpbmciLCBzdWJ0cmFjdCBib3JkZXIKKwkJCWlmICggYm94ICE9PSAibWFyZ2luIiApIHsKKwkJCQlkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCAiYm9yZGVyIiArIGNzc0V4cGFuZFsgaSBdICsgIldpZHRoIiwgdHJ1ZSwgc3R5bGVzICk7CisJCQl9CisJCX0KKwl9CisKKwkvLyBBY2NvdW50IGZvciBwb3NpdGl2ZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyIHdoZW4gcmVxdWVzdGVkIGJ5IHByb3ZpZGluZyBjb21wdXRlZFZhbAorCWlmICggIWlzQm9yZGVyQm94ICYmIGNvbXB1dGVkVmFsID49IDAgKSB7CisKKwkJLy8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIGEgcm91bmRlZCBzdW0gb2YgY29udGVudCwgcGFkZGluZywgc2Nyb2xsIGd1dHRlciwgYW5kIGJvcmRlcgorCQkvLyBBc3N1bWluZyBpbnRlZ2VyIHNjcm9sbCBndXR0ZXIsIHN1YnRyYWN0IHRoZSByZXN0IGFuZCByb3VuZCBkb3duCisJCWRlbHRhICs9IE1hdGgubWF4KCAwLCBNYXRoLmNlaWwoCisJCQllbGVtWyAib2Zmc2V0IiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC0KKwkJCWNvbXB1dGVkVmFsIC0KKwkJCWRlbHRhIC0KKwkJCWV4dHJhIC0KKwkJCTAuNQorCQkpICk7CisJfQorCisJcmV0dXJuIGRlbHRhOworfQorCitmdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICkgeworCisJLy8gU3RhcnQgd2l0aCBjb21wdXRlZCBzdHlsZQorCXZhciBzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSwKKwkJdmFsID0gY3VyQ1NTKCBlbGVtLCBkaW1lbnNpb24sIHN0eWxlcyApLAorCQlpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sICJib3hTaXppbmciLCBmYWxzZSwgc3R5bGVzICkgPT09ICJib3JkZXItYm94IiwKKwkJdmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94OworCisJLy8gU3VwcG9ydDogRmlyZWZveCA8PTU0CisJLy8gUmV0dXJuIGEgY29uZm91bmRpbmcgbm9uLXBpeGVsIHZhbHVlIG9yIGZlaWduIGlnbm9yYW5jZSwgYXMgYXBwcm9wcmlhdGUuCisJaWYgKCBybnVtbm9ucHgudGVzdCggdmFsICkgKSB7CisJCWlmICggIWV4dHJhICkgeworCQkJcmV0dXJuIHZhbDsKKwkJfQorCQl2YWwgPSAiYXV0byI7CisJfQorCisJLy8gQ2hlY2sgZm9yIHN0eWxlIGluIGNhc2UgYSBicm93c2VyIHdoaWNoIHJldHVybnMgdW5yZWxpYWJsZSB2YWx1ZXMKKwkvLyBmb3IgZ2V0Q29tcHV0ZWRTdHlsZSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIHRoZSByZWxpYWJsZSBlbGVtLnN0eWxlCisJdmFsdWVJc0JvcmRlckJveCA9IHZhbHVlSXNCb3JkZXJCb3ggJiYKKwkJKCBzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgdmFsID09PSBlbGVtLnN0eWxlWyBkaW1lbnNpb24gXSApOworCisJLy8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzICJhdXRvIgorCS8vIFRoaXMgaGFwcGVucyBmb3IgaW5saW5lIGVsZW1lbnRzIHdpdGggbm8gZXhwbGljaXQgc2V0dGluZyAoZ2gtMzU3MSkKKwkvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIC0gNC4zIG9ubHkKKwkvLyBBbHNvIHVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIG1pc3JlcG9ydGVkIGlubGluZSBkaW1lbnNpb25zIChnaC0zNjAyKQorCWlmICggdmFsID09PSAiYXV0byIgfHwKKwkJIXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiwgZmFsc2UsIHN0eWxlcyApID09PSAiaW5saW5lIiApIHsKKworCQl2YWwgPSBlbGVtWyAib2Zmc2V0IiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdOworCisJCS8vIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBwcm92aWRlIGJvcmRlci1ib3ggdmFsdWVzCisJCXZhbHVlSXNCb3JkZXJCb3ggPSB0cnVlOworCX0KKworCS8vIE5vcm1hbGl6ZSAiIiBhbmQgYXV0bworCXZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7CisKKwkvLyBBZGp1c3QgZm9yIHRoZSBlbGVtZW50J3MgYm94IG1vZGVsCisJcmV0dXJuICggdmFsICsKKwkJYm94TW9kZWxBZGp1c3RtZW50KAorCQkJZWxlbSwKKwkJCWRpbWVuc2lvbiwKKwkJCWV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJjb250ZW50IiApLAorCQkJdmFsdWVJc0JvcmRlckJveCwKKwkJCXN0eWxlcywKKworCQkJLy8gUHJvdmlkZSB0aGUgY3VycmVudCBjb21wdXRlZCBzaXplIHRvIHJlcXVlc3Qgc2Nyb2xsIGd1dHRlciBjYWxjdWxhdGlvbiAoZ2gtMzU4OSkKKwkJCXZhbAorCQkpCisJKSArICJweCI7Cit9CisKK2pRdWVyeS5leHRlbmQoIHsKKworCS8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdAorCS8vIGJlaGF2aW9yIG9mIGdldHRpbmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eQorCWNzc0hvb2tzOiB7CisJCW9wYWNpdHk6IHsKKwkJCWdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgeworCQkJCWlmICggY29tcHV0ZWQgKSB7CisKKwkJCQkJLy8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHkKKwkJCQkJdmFyIHJldCA9IGN1ckNTUyggZWxlbSwgIm9wYWNpdHkiICk7CisJCQkJCXJldHVybiByZXQgPT09ICIiID8gIjEiIDogcmV0OworCQkJCX0KKwkJCX0KKwkJfQorCX0sCisKKwkvLyBEb24ndCBhdXRvbWF0aWNhbGx5IGFkZCAicHgiIHRvIHRoZXNlIHBvc3NpYmx5LXVuaXRsZXNzIHByb3BlcnRpZXMKKwljc3NOdW1iZXI6IHsKKwkJImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IjogdHJ1ZSwKKwkJImNvbHVtbkNvdW50IjogdHJ1ZSwKKwkJImZpbGxPcGFjaXR5IjogdHJ1ZSwKKwkJImZsZXhHcm93IjogdHJ1ZSwKKwkJImZsZXhTaHJpbmsiOiB0cnVlLAorCQkiZm9udFdlaWdodCI6IHRydWUsCisJCSJsaW5lSGVpZ2h0IjogdHJ1ZSwKKwkJIm9wYWNpdHkiOiB0cnVlLAorCQkib3JkZXIiOiB0cnVlLAorCQkib3JwaGFucyI6IHRydWUsCisJCSJ3aWRvd3MiOiB0cnVlLAorCQkiekluZGV4IjogdHJ1ZSwKKwkJInpvb20iOiB0cnVlCisJfSwKKworCS8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmUKKwkvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIHZhbHVlCisJY3NzUHJvcHM6IHt9LAorCisJLy8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGUKKwlzdHlsZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBleHRyYSApIHsKKworCQkvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMKKwkJaWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUKKwkJdmFyIHJldCwgdHlwZSwgaG9va3MsCisJCQlvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLAorCQkJaXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLAorCQkJc3R5bGUgPSBlbGVtLnN0eWxlOworCisJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3QKKwkJLy8gd2FudCB0byBxdWVyeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5CisJCS8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC4KKwkJaWYgKCAhaXNDdXN0b21Qcm9wICkgeworCQkJbmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7CisJCX0KKworCQkvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvbgorCQlob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTsKKworCQkvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWUKKwkJaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgeworCQkJdHlwZSA9IHR5cGVvZiB2YWx1ZTsKKworCQkJLy8gQ29udmVydCAiKz0iIG9yICItPSIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpCisJCQlpZiAoIHR5cGUgPT09ICJzdHJpbmciICYmICggcmV0ID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYgcmV0WyAxIF0gKSB7CisJCQkJdmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApOworCisJCQkJLy8gRml4ZXMgYnVnICM5MjM3CisJCQkJdHlwZSA9ICJudW1iZXIiOworCQkJfQorCisJCQkvLyBNYWtlIHN1cmUgdGhhdCBudWxsIGFuZCBOYU4gdmFsdWVzIGFyZW4ndCBzZXQgKCM3MTE2KQorCQkJaWYgKCB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlICE9PSB2YWx1ZSApIHsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCS8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKQorCQkJaWYgKCB0eXBlID09PSAibnVtYmVyIiApIHsKKwkJCQl2YWx1ZSArPSByZXQgJiYgcmV0WyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdID8gIiIgOiAicHgiICk7CisJCQl9CisKKwkJCS8vIGJhY2tncm91bmQtKiBwcm9wcyBhZmZlY3Qgb3JpZ2luYWwgY2xvbmUncyB2YWx1ZXMKKwkJCWlmICggIXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlICYmIHZhbHVlID09PSAiIiAmJiBuYW1lLmluZGV4T2YoICJiYWNrZ3JvdW5kIiApID09PSAwICkgeworCQkJCXN0eWxlWyBuYW1lIF0gPSAiaW5oZXJpdCI7CisJCQl9CisKKwkJCS8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZQorCQkJaWYgKCAhaG9va3MgfHwgISggInNldCIgaW4gaG9va3MgKSB8fAorCQkJCSggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHsKKworCQkJCWlmICggaXNDdXN0b21Qcm9wICkgeworCQkJCQlzdHlsZS5zZXRQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKTsKKwkJCQl9IGVsc2UgeworCQkJCQlzdHlsZVsgbmFtZSBdID0gdmFsdWU7CisJCQkJfQorCQkJfQorCisJCX0gZWxzZSB7CisKKwkJCS8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZQorCQkJaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJgorCQkJCSggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7CisKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQkvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdAorCQkJcmV0dXJuIHN0eWxlWyBuYW1lIF07CisJCX0KKwl9LAorCisJY3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZXh0cmEsIHN0eWxlcyApIHsKKwkJdmFyIHZhbCwgbnVtLCBob29rcywKKwkJCW9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksCisJCQlpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICk7CisKKwkJLy8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndAorCQkvLyB3YW50IHRvIG1vZGlmeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5CisJCS8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC4KKwkJaWYgKCAhaXNDdXN0b21Qcm9wICkgeworCQkJbmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7CisJCX0KKworCQkvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lCisJCWhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdOworCisJCS8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlCisJCWlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgKSB7CisJCQl2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7CisJCX0KKworCQkvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdAorCQlpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkgeworCQkJdmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTsKKwkJfQorCisJCS8vIENvbnZlcnQgIm5vcm1hbCIgdG8gY29tcHV0ZWQgdmFsdWUKKwkJaWYgKCB2YWwgPT09ICJub3JtYWwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkgeworCQkJdmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07CisJCX0KKworCQkvLyBNYWtlIG51bWVyaWMgaWYgZm9yY2VkIG9yIGEgcXVhbGlmaWVyIHdhcyBwcm92aWRlZCBhbmQgdmFsIGxvb2tzIG51bWVyaWMKKwkJaWYgKCBleHRyYSA9PT0gIiIgfHwgZXh0cmEgKSB7CisJCQludW0gPSBwYXJzZUZsb2F0KCB2YWwgKTsKKwkJCXJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDsKKwkJfQorCisJCXJldHVybiB2YWw7CisJfQorfSApOworCitqUXVlcnkuZWFjaCggWyAiaGVpZ2h0IiwgIndpZHRoIiBdLCBmdW5jdGlvbiggaSwgZGltZW5zaW9uICkgeworCWpRdWVyeS5jc3NIb29rc1sgZGltZW5zaW9uIF0gPSB7CisJCWdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHsKKwkJCWlmICggY29tcHV0ZWQgKSB7CisKKwkJCQkvLyBDZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93IHRoZW0KKwkJCQkvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdAorCQkJCXJldHVybiByZGlzcGxheXN3YXAudGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkgKSAmJgorCisJCQkJCS8vIFN1cHBvcnQ6IFNhZmFyaSA4KworCQkJCQkvLyBUYWJsZSBjb2x1bW5zIGluIFNhZmFyaSBoYXZlIG5vbi16ZXJvIG9mZnNldFdpZHRoICYgemVybworCQkJCQkvLyBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB1bmxlc3MgZGlzcGxheSBpcyBjaGFuZ2VkLgorCQkJCQkvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHkKKwkJCQkJLy8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYSBkaXNjb25uZWN0ZWQgbm9kZQorCQkJCQkvLyBpbiBJRSB0aHJvd3MgYW4gZXJyb3IuCisJCQkJCSggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggfHwgIWVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKSA/CisJCQkJCQlzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHsKKwkJCQkJCQlyZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApOworCQkJCQkJfSApIDoKKwkJCQkJCWdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKTsKKwkJCX0KKwkJfSwKKworCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7CisJCQl2YXIgbWF0Y2hlcywKKwkJCQlzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSwKKwkJCQlpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sICJib3hTaXppbmciLCBmYWxzZSwgc3R5bGVzICkgPT09ICJib3JkZXItYm94IiwKKwkJCQlzdWJ0cmFjdCA9IGV4dHJhICYmIGJveE1vZGVsQWRqdXN0bWVudCgKKwkJCQkJZWxlbSwKKwkJCQkJZGltZW5zaW9uLAorCQkJCQlleHRyYSwKKwkJCQkJaXNCb3JkZXJCb3gsCisJCQkJCXN0eWxlcworCQkJCSk7CisKKwkJCS8vIEFjY291bnQgZm9yIHVucmVsaWFibGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIGJ5IGNvbXBhcmluZyBvZmZzZXQqIHRvIGNvbXB1dGVkIGFuZAorCQkJLy8gZmFraW5nIGEgY29udGVudC1ib3ggdG8gZ2V0IGJvcmRlciBhbmQgcGFkZGluZyAoZ2gtMzY5OSkKKwkJCWlmICggaXNCb3JkZXJCb3ggJiYgc3VwcG9ydC5zY3JvbGxib3hTaXplKCkgPT09IHN0eWxlcy5wb3NpdGlvbiApIHsKKwkJCQlzdWJ0cmFjdCAtPSBNYXRoLmNlaWwoCisJCQkJCWVsZW1bICJvZmZzZXQiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLQorCQkJCQlwYXJzZUZsb2F0KCBzdHlsZXNbIGRpbWVuc2lvbiBdICkgLQorCQkJCQlib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgImJvcmRlciIsIGZhbHNlLCBzdHlsZXMgKSAtCisJCQkJCTAuNQorCQkJCSk7CisJCQl9CisKKwkJCS8vIENvbnZlcnQgdG8gcGl4ZWxzIGlmIHZhbHVlIGFkanVzdG1lbnQgaXMgbmVlZGVkCisJCQlpZiAoIHN1YnRyYWN0ICYmICggbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmCisJCQkJKCBtYXRjaGVzWyAzIF0gfHwgInB4IiApICE9PSAicHgiICkgeworCisJCQkJZWxlbS5zdHlsZVsgZGltZW5zaW9uIF0gPSB2YWx1ZTsKKwkJCQl2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIGRpbWVuc2lvbiApOworCQkJfQorCisJCQlyZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApOworCQl9CisJfTsKK30gKTsKKworalF1ZXJ5LmNzc0hvb2tzLm1hcmdpbkxlZnQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5MZWZ0LAorCWZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKKwkJaWYgKCBjb21wdXRlZCApIHsKKwkJCXJldHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgIm1hcmdpbkxlZnQiICkgKSB8fAorCQkJCWVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtCisJCQkJCXN3YXAoIGVsZW0sIHsgbWFyZ2luTGVmdDogMCB9LCBmdW5jdGlvbigpIHsKKwkJCQkJCXJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7CisJCQkJCX0gKQorCQkJCSkgKyAicHgiOworCQl9CisJfQorKTsKKworLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQgYnkgYW5pbWF0ZSB0byBleHBhbmQgcHJvcGVydGllcworalF1ZXJ5LmVhY2goIHsKKwltYXJnaW46ICIiLAorCXBhZGRpbmc6ICIiLAorCWJvcmRlcjogIldpZHRoIgorfSwgZnVuY3Rpb24oIHByZWZpeCwgc3VmZml4ICkgeworCWpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7CisJCWV4cGFuZDogZnVuY3Rpb24oIHZhbHVlICkgeworCQkJdmFyIGkgPSAwLAorCQkJCWV4cGFuZGVkID0ge30sCisKKwkJCQkvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmcKKwkJCQlwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgPyB2YWx1ZS5zcGxpdCggIiAiICkgOiBbIHZhbHVlIF07CisKKwkJCWZvciAoIDsgaSA8IDQ7IGkrKyApIHsKKwkJCQlleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9CisJCQkJCXBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTsKKwkJCX0KKworCQkJcmV0dXJuIGV4cGFuZGVkOworCQl9CisJfTsKKworCWlmICggcHJlZml4ICE9PSAibWFyZ2luIiApIHsKKwkJalF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjsKKwl9Cit9ICk7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKwljc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKwkJcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgeworCQkJdmFyIHN0eWxlcywgbGVuLAorCQkJCW1hcCA9IHt9LAorCQkJCWkgPSAwOworCisJCQlpZiAoIEFycmF5LmlzQXJyYXkoIG5hbWUgKSApIHsKKwkJCQlzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKTsKKwkJCQlsZW4gPSBuYW1lLmxlbmd0aDsKKworCQkJCWZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworCQkJCQltYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7CisJCQkJfQorCisJCQkJcmV0dXJuIG1hcDsKKwkJCX0KKworCQkJcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPworCQkJCWpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6CisJCQkJalF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApOworCQl9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTsKKwl9Cit9ICk7CisKKworZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICkgeworCXJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7Cit9CitqUXVlcnkuVHdlZW4gPSBUd2VlbjsKKworVHdlZW4ucHJvdG90eXBlID0geworCWNvbnN0cnVjdG9yOiBUd2VlbiwKKwlpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVuaXQgKSB7CisJCXRoaXMuZWxlbSA9IGVsZW07CisJCXRoaXMucHJvcCA9IHByb3A7CisJCXRoaXMuZWFzaW5nID0gZWFzaW5nIHx8IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHQ7CisJCXRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CisJCXRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMuY3VyKCk7CisJCXRoaXMuZW5kID0gZW5kOworCQl0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gIiIgOiAicHgiICk7CisJfSwKKwljdXI6IGZ1bmN0aW9uKCkgeworCQl2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdOworCisJCXJldHVybiBob29rcyAmJiBob29rcy5nZXQgPworCQkJaG9va3MuZ2V0KCB0aGlzICkgOgorCQkJVHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApOworCX0sCisJcnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHsKKwkJdmFyIGVhc2VkLAorCQkJaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdOworCisJCWlmICggdGhpcy5vcHRpb25zLmR1cmF0aW9uICkgeworCQkJdGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdbIHRoaXMuZWFzaW5nIF0oCisJCQkJcGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uCisJCQkpOworCQl9IGVsc2UgeworCQkJdGhpcy5wb3MgPSBlYXNlZCA9IHBlcmNlbnQ7CisJCX0KKwkJdGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0OworCisJCWlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7CisJCQl0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7CisJCX0KKworCQlpZiAoIGhvb2tzICYmIGhvb2tzLnNldCApIHsKKwkJCWhvb2tzLnNldCggdGhpcyApOworCQl9IGVsc2UgeworCQkJVHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApOworCQl9CisJCXJldHVybiB0aGlzOworCX0KK307CisKK1R3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTsKKworVHdlZW4ucHJvcEhvb2tzID0geworCV9kZWZhdWx0OiB7CisJCWdldDogZnVuY3Rpb24oIHR3ZWVuICkgeworCQkJdmFyIHJlc3VsdDsKKworCQkJLy8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCwKKwkJCS8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuCisJCQlpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHwKKwkJCQl0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJiB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCApIHsKKwkJCQlyZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdOworCQkJfQorCisJCQkvLyBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBhcyBhIDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHkKKwkJCS8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFyc2UgZmFpbHMuCisJCQkvLyBTaW1wbGUgdmFsdWVzIHN1Y2ggYXMgIjEwcHgiIGFyZSBwYXJzZWQgdG8gRmxvYXQ7CisJCQkvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFzICJyb3RhdGUoMXJhZCkiIGFyZSByZXR1cm5lZCBhcy1pcy4KKwkJCXJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsICIiICk7CisKKwkJCS8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgImF1dG8iIGFyZSBjb252ZXJ0ZWQgdG8gMC4KKwkJCXJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gImF1dG8iID8gMCA6IHJlc3VsdDsKKwkJfSwKKwkJc2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7CisKKwkJCS8vIFVzZSBzdGVwIGhvb2sgZm9yIGJhY2sgY29tcGF0LgorCQkJLy8gVXNlIGNzc0hvb2sgaWYgaXRzIHRoZXJlLgorCQkJLy8gVXNlIC5zdHlsZSBpZiBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZS4KKwkJCWlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHsKKwkJCQlqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApOworCQkJfSBlbHNlIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSA9PT0gMSAmJgorCQkJCSggdHdlZW4uZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1Byb3BzWyB0d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8CisJCQkJCWpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdICkgKSB7CisJCQkJalF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7CisJCQl9IGVsc2UgeworCQkJCXR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdzsKKwkJCX0KKwkJfQorCX0KK307CisKKy8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5CisvLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXMKK1R3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHsKKwlzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHsKKwkJaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHsKKwkJCXR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdzsKKwkJfQorCX0KK307CisKK2pRdWVyeS5lYXNpbmcgPSB7CisJbGluZWFyOiBmdW5jdGlvbiggcCApIHsKKwkJcmV0dXJuIHA7CisJfSwKKwlzd2luZzogZnVuY3Rpb24oIHAgKSB7CisJCXJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7CisJfSwKKwlfZGVmYXVsdDogInN3aW5nIgorfTsKKworalF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmluaXQ7CisKKy8vIEJhY2sgY29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50CitqUXVlcnkuZnguc3RlcCA9IHt9OworCisKKworCit2YXIKKwlmeE5vdywgaW5Qcm9ncmVzcywKKwlyZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLywKKwlycnVuID0gL3F1ZXVlSG9va3MkLzsKKworZnVuY3Rpb24gc2NoZWR1bGUoKSB7CisJaWYgKCBpblByb2dyZXNzICkgeworCQlpZiAoIGRvY3VtZW50LmhpZGRlbiA9PT0gZmFsc2UgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSApIHsKKwkJCXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHNjaGVkdWxlICk7CisJCX0gZWxzZSB7CisJCQl3aW5kb3cuc2V0VGltZW91dCggc2NoZWR1bGUsIGpRdWVyeS5meC5pbnRlcnZhbCApOworCQl9CisKKwkJalF1ZXJ5LmZ4LnRpY2soKTsKKwl9Cit9CisKKy8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHkKK2Z1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkgeworCXdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKKwkJZnhOb3cgPSB1bmRlZmluZWQ7CisJfSApOworCXJldHVybiAoIGZ4Tm93ID0gRGF0ZS5ub3coKSApOworfQorCisvLyBHZW5lcmF0ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIGFuaW1hdGlvbgorZnVuY3Rpb24gZ2VuRngoIHR5cGUsIGluY2x1ZGVXaWR0aCApIHsKKwl2YXIgd2hpY2gsCisJCWkgPSAwLAorCQlhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07CisKKwkvLyBJZiB3ZSBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlzIDEgdG8gZG8gYWxsIGNzc0V4cGFuZCB2YWx1ZXMsCisJLy8gb3RoZXJ3aXNlIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVmdCBhbmQgUmlnaHQKKwlpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDsKKwlmb3IgKCA7IGkgPCA0OyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7CisJCXdoaWNoID0gY3NzRXhwYW5kWyBpIF07CisJCWF0dHJzWyAibWFyZ2luIiArIHdoaWNoIF0gPSBhdHRyc1sgInBhZGRpbmciICsgd2hpY2ggXSA9IHR5cGU7CisJfQorCisJaWYgKCBpbmNsdWRlV2lkdGggKSB7CisJCWF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7CisJfQorCisJcmV0dXJuIGF0dHJzOworfQorCitmdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHsKKwl2YXIgdHdlZW4sCisJCWNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbICIqIiBdICksCisJCWluZGV4ID0gMCwKKwkJbGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7CisJZm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKKwkJaWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHsKKworCQkJLy8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHkKKwkJCXJldHVybiB0d2VlbjsKKwkJfQorCX0KK30KKworZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7CisJdmFyIHByb3AsIHZhbHVlLCB0b2dnbGUsIGhvb2tzLCBvbGRmaXJlLCBwcm9wVHdlZW4sIHJlc3RvcmVEaXNwbGF5LCBkaXNwbGF5LAorCQlpc0JveCA9ICJ3aWR0aCIgaW4gcHJvcHMgfHwgImhlaWdodCIgaW4gcHJvcHMsCisJCWFuaW0gPSB0aGlzLAorCQlvcmlnID0ge30sCisJCXN0eWxlID0gZWxlbS5zdHlsZSwKKwkJaGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSwKKwkJZGF0YVNob3cgPSBkYXRhUHJpdi5nZXQoIGVsZW0sICJmeHNob3ciICk7CisKKwkvLyBRdWV1ZS1za2lwcGluZyBhbmltYXRpb25zIGhpamFjayB0aGUgZnggaG9va3MKKwlpZiAoICFvcHRzLnF1ZXVlICkgeworCQlob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgImZ4IiApOworCQlpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7CisJCQlob29rcy51bnF1ZXVlZCA9IDA7CisJCQlvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTsKKwkJCWhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHsKKwkJCQlpZiAoICFob29rcy51bnF1ZXVlZCApIHsKKwkJCQkJb2xkZmlyZSgpOworCQkJCX0KKwkJCX07CisJCX0KKwkJaG9va3MudW5xdWV1ZWQrKzsKKworCQlhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7CisKKwkJCS8vIEVuc3VyZSB0aGUgY29tcGxldGUgaGFuZGxlciBpcyBjYWxsZWQgYmVmb3JlIHRoaXMgY29tcGxldGVzCisJCQlhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7CisJCQkJaG9va3MudW5xdWV1ZWQtLTsKKwkJCQlpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sICJmeCIgKS5sZW5ndGggKSB7CisJCQkJCWhvb2tzLmVtcHR5LmZpcmUoKTsKKwkJCQl9CisJCQl9ICk7CisJCX0gKTsKKwl9CisKKwkvLyBEZXRlY3Qgc2hvdy9oaWRlIGFuaW1hdGlvbnMKKwlmb3IgKCBwcm9wIGluIHByb3BzICkgeworCQl2YWx1ZSA9IHByb3BzWyBwcm9wIF07CisJCWlmICggcmZ4dHlwZXMudGVzdCggdmFsdWUgKSApIHsKKwkJCWRlbGV0ZSBwcm9wc1sgcHJvcCBdOworCQkJdG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSAidG9nZ2xlIjsKKwkJCWlmICggdmFsdWUgPT09ICggaGlkZGVuID8gImhpZGUiIDogInNob3ciICkgKSB7CisKKwkJCQkvLyBQcmV0ZW5kIHRvIGJlIGhpZGRlbiBpZiB0aGlzIGlzIGEgInNob3ciIGFuZAorCQkJCS8vIHRoZXJlIGlzIHN0aWxsIGRhdGEgZnJvbSBhIHN0b3BwZWQgc2hvdy9oaWRlCisJCQkJaWYgKCB2YWx1ZSA9PT0gInNob3ciICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHsKKwkJCQkJaGlkZGVuID0gdHJ1ZTsKKworCQkJCS8vIElnbm9yZSBhbGwgb3RoZXIgbm8tb3Agc2hvdy9oaWRlIGRhdGEKKwkJCQl9IGVsc2UgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApOworCQl9CisJfQorCisJLy8gQmFpbCBvdXQgaWYgdGhpcyBpcyBhIG5vLW9wIGxpa2UgLmhpZGUoKS5oaWRlKCkKKwlwcm9wVHdlZW4gPSAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3BzICk7CisJaWYgKCAhcHJvcFR3ZWVuICYmIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBvcmlnICkgKSB7CisJCXJldHVybjsKKwl9CisKKwkvLyBSZXN0cmljdCAib3ZlcmZsb3ciIGFuZCAiZGlzcGxheSIgc3R5bGVzIGR1cmluZyBib3ggYW5pbWF0aW9ucworCWlmICggaXNCb3ggJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKworCQkvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1CisJCS8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBub3QgaW5mZXIgdGhlIHNob3J0aGFuZAorCQkvLyBmcm9tIGlkZW50aWNhbGx5LXZhbHVlZCBvdmVyZmxvd1ggYW5kIG92ZXJmbG93WSBhbmQgRWRnZSBqdXN0IG1pcnJvcnMKKwkJLy8gdGhlIG92ZXJmbG93WCB2YWx1ZSB0aGVyZS4KKwkJb3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZsb3dZIF07CisKKwkJLy8gSWRlbnRpZnkgYSBkaXNwbGF5IHR5cGUsIHByZWZlcnJpbmcgb2xkIHNob3cvaGlkZSBkYXRhIG92ZXIgdGhlIENTUyBjYXNjYWRlCisJCXJlc3RvcmVEaXNwbGF5ID0gZGF0YVNob3cgJiYgZGF0YVNob3cuZGlzcGxheTsKKwkJaWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkgeworCQkJcmVzdG9yZURpc3BsYXkgPSBkYXRhUHJpdi5nZXQoIGVsZW0sICJkaXNwbGF5IiApOworCQl9CisJCWRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKTsKKwkJaWYgKCBkaXNwbGF5ID09PSAibm9uZSIgKSB7CisJCQlpZiAoIHJlc3RvcmVEaXNwbGF5ICkgeworCQkJCWRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTsKKwkJCX0gZWxzZSB7CisKKwkJCQkvLyBHZXQgbm9uZW1wdHkgdmFsdWUocykgYnkgdGVtcG9yYXJpbHkgZm9yY2luZyB2aXNpYmlsaXR5CisJCQkJc2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7CisJCQkJcmVzdG9yZURpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgfHwgcmVzdG9yZURpc3BsYXk7CisJCQkJZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApOworCQkJCXNob3dIaWRlKCBbIGVsZW0gXSApOworCQkJfQorCQl9CisKKwkJLy8gQW5pbWF0ZSBpbmxpbmUgZWxlbWVudHMgYXMgaW5saW5lLWJsb2NrCisJCWlmICggZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIgJiYgcmVzdG9yZURpc3BsYXkgIT0gbnVsbCApIHsKKwkJCWlmICggalF1ZXJ5LmNzcyggZWxlbSwgImZsb2F0IiApID09PSAibm9uZSIgKSB7CisKKwkJCQkvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBkaXNwbGF5IHZhbHVlIGF0IHRoZSBlbmQgb2YgcHVyZSBzaG93L2hpZGUgYW5pbWF0aW9ucworCQkJCWlmICggIXByb3BUd2VlbiApIHsKKwkJCQkJYW5pbS5kb25lKCBmdW5jdGlvbigpIHsKKwkJCQkJCXN0eWxlLmRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTsKKwkJCQkJfSApOworCQkJCQlpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7CisJCQkJCQlkaXNwbGF5ID0gc3R5bGUuZGlzcGxheTsKKwkJCQkJCXJlc3RvcmVEaXNwbGF5ID0gZGlzcGxheSA9PT0gIm5vbmUiID8gIiIgOiBkaXNwbGF5OworCQkJCQl9CisJCQkJfQorCQkJCXN0eWxlLmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIjsKKwkJCX0KKwkJfQorCX0KKworCWlmICggb3B0cy5vdmVyZmxvdyApIHsKKwkJc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKKwkJYW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkgeworCQkJc3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07CisJCQlzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07CisJCQlzdHlsZS5vdmVyZmxvd1kgPSBvcHRzLm92ZXJmbG93WyAyIF07CisJCX0gKTsKKwl9CisKKwkvLyBJbXBsZW1lbnQgc2hvdy9oaWRlIGFuaW1hdGlvbnMKKwlwcm9wVHdlZW4gPSBmYWxzZTsKKwlmb3IgKCBwcm9wIGluIG9yaWcgKSB7CisKKwkJLy8gR2VuZXJhbCBzaG93L2hpZGUgc2V0dXAgZm9yIHRoaXMgZWxlbWVudCBhbmltYXRpb24KKwkJaWYgKCAhcHJvcFR3ZWVuICkgeworCQkJaWYgKCBkYXRhU2hvdyApIHsKKwkJCQlpZiAoICJoaWRkZW4iIGluIGRhdGFTaG93ICkgeworCQkJCQloaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgImZ4c2hvdyIsIHsgZGlzcGxheTogcmVzdG9yZURpc3BsYXkgfSApOworCQkJfQorCisJCQkvLyBTdG9yZSBoaWRkZW4vdmlzaWJsZSBmb3IgdG9nZ2xlIHNvIGAuc3RvcCgpLnRvZ2dsZSgpYCAicmV2ZXJzZXMiCisJCQlpZiAoIHRvZ2dsZSApIHsKKwkJCQlkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuOworCQkJfQorCisJCQkvLyBTaG93IGVsZW1lbnRzIGJlZm9yZSBhbmltYXRpbmcgdGhlbQorCQkJaWYgKCBoaWRkZW4gKSB7CisJCQkJc2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7CisJCQl9CisKKwkJCS8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqLworCisJCQlhbmltLmRvbmUoIGZ1bmN0aW9uKCkgeworCisJCQkvKiBlc2xpbnQtZW5hYmxlIG5vLWxvb3AtZnVuYyAqLworCisJCQkJLy8gVGhlIGZpbmFsIHN0ZXAgb2YgYSAiaGlkZSIgYW5pbWF0aW9uIGlzIGFjdHVhbGx5IGhpZGluZyB0aGUgZWxlbWVudAorCQkJCWlmICggIWhpZGRlbiApIHsKKwkJCQkJc2hvd0hpZGUoIFsgZWxlbSBdICk7CisJCQkJfQorCQkJCWRhdGFQcml2LnJlbW92ZSggZWxlbSwgImZ4c2hvdyIgKTsKKwkJCQlmb3IgKCBwcm9wIGluIG9yaWcgKSB7CisJCQkJCWpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7CisJCQkJfQorCQkJfSApOworCQl9CisKKwkJLy8gUGVyLXByb3BlcnR5IHNldHVwCisJCXByb3BUd2VlbiA9IGNyZWF0ZVR3ZWVuKCBoaWRkZW4gPyBkYXRhU2hvd1sgcHJvcCBdIDogMCwgcHJvcCwgYW5pbSApOworCQlpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHsKKwkJCWRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7CisJCQlpZiAoIGhpZGRlbiApIHsKKwkJCQlwcm9wVHdlZW4uZW5kID0gcHJvcFR3ZWVuLnN0YXJ0OworCQkJCXByb3BUd2Vlbi5zdGFydCA9IDA7CisJCQl9CisJCX0KKwl9Cit9CisKK2Z1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkgeworCXZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7CisKKwkvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcgYW5kIGV4cGFuZCBjc3NIb29rIHBhc3MKKwlmb3IgKCBpbmRleCBpbiBwcm9wcyApIHsKKwkJbmFtZSA9IGNhbWVsQ2FzZSggaW5kZXggKTsKKwkJZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdOworCQl2YWx1ZSA9IHByb3BzWyBpbmRleCBdOworCQlpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7CisJCQllYXNpbmcgPSB2YWx1ZVsgMSBdOworCQkJdmFsdWUgPSBwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyAwIF07CisJCX0KKworCQlpZiAoIGluZGV4ICE9PSBuYW1lICkgeworCQkJcHJvcHNbIG5hbWUgXSA9IHZhbHVlOworCQkJZGVsZXRlIHByb3BzWyBpbmRleCBdOworCQl9CisKKwkJaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTsKKwkJaWYgKCBob29rcyAmJiAiZXhwYW5kIiBpbiBob29rcyApIHsKKwkJCXZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSApOworCQkJZGVsZXRlIHByb3BzWyBuYW1lIF07CisKKwkJCS8vIE5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b24ndCBvdmVyd3JpdGUgZXhpc3Rpbmcga2V5cy4KKwkJCS8vIFJldXNpbmcgJ2luZGV4JyBiZWNhdXNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgIm5hbWUiCisJCQlmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHsKKwkJCQlpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7CisJCQkJCXByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07CisJCQkJCXNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJc3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFzaW5nOworCQl9CisJfQorfQorCitmdW5jdGlvbiBBbmltYXRpb24oIGVsZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7CisJdmFyIHJlc3VsdCwKKwkJc3RvcHBlZCwKKwkJaW5kZXggPSAwLAorCQlsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsCisJCWRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHsKKworCQkJLy8gRG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNlbGVjdG9yCisJCQlkZWxldGUgdGljay5lbGVtOworCQl9ICksCisJCXRpY2sgPSBmdW5jdGlvbigpIHsKKwkJCWlmICggc3RvcHBlZCApIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQl2YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAorCQkJCXJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSwKKworCQkJCS8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHkKKwkJCQkvLyBBcmNoYWljIGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgYDEgLSAoIDAuNSB8fCAwIClgICgjMTI0OTcpCisJCQkJdGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLAorCQkJCXBlcmNlbnQgPSAxIC0gdGVtcCwKKwkJCQlpbmRleCA9IDAsCisJCQkJbGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7CisKKwkJCWZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7CisJCQkJYW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNlbnQgKTsKKwkJCX0KKworCQkJZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdICk7CisKKwkJCS8vIElmIHRoZXJlJ3MgbW9yZSB0byBkbywgeWllbGQKKwkJCWlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3RoICkgeworCQkJCXJldHVybiByZW1haW5pbmc7CisJCQl9CisKKwkJCS8vIElmIHRoaXMgd2FzIGFuIGVtcHR5IGFuaW1hdGlvbiwgc3ludGhlc2l6ZSBhIGZpbmFsIHByb2dyZXNzIG5vdGlmaWNhdGlvbgorCQkJaWYgKCAhbGVuZ3RoICkgeworCQkJCWRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTsKKwkJCX0KKworCQkJLy8gUmVzb2x2ZSB0aGUgYW5pbWF0aW9uIGFuZCByZXBvcnQgaXRzIGNvbmNsdXNpb24KKwkJCWRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0sCisJCWFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHsKKwkJCWVsZW06IGVsZW0sCisJCQlwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSwKKwkJCW9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHsKKwkJCQlzcGVjaWFsRWFzaW5nOiB7fSwKKwkJCQllYXNpbmc6IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHQKKwkJCX0sIG9wdGlvbnMgKSwKKwkJCW9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcywKKwkJCW9yaWdpbmFsT3B0aW9uczogb3B0aW9ucywKKwkJCXN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSwKKwkJCWR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLAorCQkJdHdlZW5zOiBbXSwKKwkJCWNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkgeworCQkJCXZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCwKKwkJCQkJCWFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcgKTsKKwkJCQlhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7CisJCQkJcmV0dXJuIHR3ZWVuOworCQkJfSwKKwkJCXN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkgeworCQkJCXZhciBpbmRleCA9IDAsCisKKwkJCQkJLy8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zCisJCQkJCS8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydAorCQkJCQlsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwOworCQkJCWlmICggc3RvcHBlZCApIHsKKwkJCQkJcmV0dXJuIHRoaXM7CisJCQkJfQorCQkJCXN0b3BwZWQgPSB0cnVlOworCQkJCWZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7CisJCQkJCWFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7CisJCQkJfQorCisJCQkJLy8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3QKKwkJCQlpZiAoIGdvdG9FbmQgKSB7CisJCQkJCWRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTsKKwkJCQkJZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTsKKwkJCQl9IGVsc2UgeworCQkJCQlkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7CisJCQkJfQorCQkJCXJldHVybiB0aGlzOworCQkJfQorCQl9ICksCisJCXByb3BzID0gYW5pbWF0aW9uLnByb3BzOworCisJcHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTsKKworCWZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7CisJCXJlc3VsdCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7CisJCWlmICggcmVzdWx0ICkgeworCQkJaWYgKCBpc0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkgeworCQkJCWpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9CisJCQkJCXJlc3VsdC5zdG9wLmJpbmQoIHJlc3VsdCApOworCQkJfQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCX0KKworCWpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7CisKKwlpZiAoIGlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7CisJCWFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApOworCX0KKworCS8vIEF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zCisJYW5pbWF0aW9uCisJCS5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3MgKQorCQkuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKQorCQkuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApCisJCS5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5cyApOworCisJalF1ZXJ5LmZ4LnRpbWVyKAorCQlqUXVlcnkuZXh0ZW5kKCB0aWNrLCB7CisJCQllbGVtOiBlbGVtLAorCQkJYW5pbTogYW5pbWF0aW9uLAorCQkJcXVldWU6IGFuaW1hdGlvbi5vcHRzLnF1ZXVlCisJCX0gKQorCSk7CisKKwlyZXR1cm4gYW5pbWF0aW9uOworfQorCitqUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7CisKKwl0d2VlbmVyczogeworCQkiKiI6IFsgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkgeworCQkJdmFyIHR3ZWVuID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKTsKKwkJCWFkanVzdENTUyggdHdlZW4uZWxlbSwgcHJvcCwgcmNzc051bS5leGVjKCB2YWx1ZSApLCB0d2VlbiApOworCQkJcmV0dXJuIHR3ZWVuOworCQl9IF0KKwl9LAorCisJdHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHsKKwkJaWYgKCBpc0Z1bmN0aW9uKCBwcm9wcyApICkgeworCQkJY2FsbGJhY2sgPSBwcm9wczsKKwkJCXByb3BzID0gWyAiKiIgXTsKKwkJfSBlbHNlIHsKKwkJCXByb3BzID0gcHJvcHMubWF0Y2goIHJub3RodG1sd2hpdGUgKTsKKwkJfQorCisJCXZhciBwcm9wLAorCQkJaW5kZXggPSAwLAorCQkJbGVuZ3RoID0gcHJvcHMubGVuZ3RoOworCisJCWZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7CisJCQlwcm9wID0gcHJvcHNbIGluZGV4IF07CisJCQlBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdOworCQkJQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTsKKwkJfQorCX0sCisKKwlwcmVmaWx0ZXJzOiBbIGRlZmF1bHRQcmVmaWx0ZXIgXSwKKworCXByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkgeworCQlpZiAoIHByZXBlbmQgKSB7CisJCQlBbmltYXRpb24ucHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApOworCQl9IGVsc2UgeworCQkJQW5pbWF0aW9uLnByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTsKKwkJfQorCX0KK30gKTsKKworalF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkgeworCXZhciBvcHQgPSBzcGVlZCAmJiB0eXBlb2Ygc3BlZWQgPT09ICJvYmplY3QiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7CisJCWNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8CisJCQlpc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLAorCQlkdXJhdGlvbjogc3BlZWQsCisJCWVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nCisJfTsKKworCS8vIEdvIHRvIHRoZSBlbmQgc3RhdGUgaWYgZnggYXJlIG9mZgorCWlmICggalF1ZXJ5LmZ4Lm9mZiApIHsKKwkJb3B0LmR1cmF0aW9uID0gMDsKKworCX0gZWxzZSB7CisJCWlmICggdHlwZW9mIG9wdC5kdXJhdGlvbiAhPT0gIm51bWJlciIgKSB7CisJCQlpZiAoIG9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZnguc3BlZWRzICkgeworCQkJCW9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHNbIG9wdC5kdXJhdGlvbiBdOworCisJCQl9IGVsc2UgeworCQkJCW9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7CisJCQl9CisJCX0KKwl9CisKKwkvLyBOb3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiAiZngiCisJaWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7CisJCW9wdC5xdWV1ZSA9ICJmeCI7CisJfQorCisJLy8gUXVldWVpbmcKKwlvcHQub2xkID0gb3B0LmNvbXBsZXRlOworCisJb3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CisJCWlmICggaXNGdW5jdGlvbiggb3B0Lm9sZCApICkgeworCQkJb3B0Lm9sZC5jYWxsKCB0aGlzICk7CisJCX0KKworCQlpZiAoIG9wdC5xdWV1ZSApIHsKKwkJCWpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTsKKwkJfQorCX07CisKKwlyZXR1cm4gb3B0OworfTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCWZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHsKKworCQkvLyBTaG93IGFueSBoaWRkZW4gZWxlbWVudHMgYWZ0ZXIgc2V0dGluZyBvcGFjaXR5IHRvIDAKKwkJcmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbldpdGhpblRyZWUgKS5jc3MoICJvcGFjaXR5IiwgMCApLnNob3coKQorCisJCQkvLyBBbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQKKwkJCS5lbmQoKS5hbmltYXRlKCB7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7CisJfSwKKwlhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CisJCXZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksCisJCQlvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksCisJCQlkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkgeworCisJCQkJLy8gT3BlcmF0ZSBvbiBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0IGJlIGxvc3QKKwkJCQl2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7CisKKwkJCQkvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHkKKwkJCQlpZiAoIGVtcHR5IHx8IGRhdGFQcml2LmdldCggdGhpcywgImZpbmlzaCIgKSApIHsKKwkJCQkJYW5pbS5zdG9wKCB0cnVlICk7CisJCQkJfQorCQkJfTsKKwkJCWRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uOworCisJCXJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID8KKwkJCXRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6CisJCQl0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7CisJfSwKKwlzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xlYXJRdWV1ZSwgZ290b0VuZCApIHsKKwkJdmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHsKKwkJCXZhciBzdG9wID0gaG9va3Muc3RvcDsKKwkJCWRlbGV0ZSBob29rcy5zdG9wOworCQkJc3RvcCggZ290b0VuZCApOworCQl9OworCisJCWlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgeworCQkJZ290b0VuZCA9IGNsZWFyUXVldWU7CisJCQljbGVhclF1ZXVlID0gdHlwZTsKKwkJCXR5cGUgPSB1bmRlZmluZWQ7CisJCX0KKwkJaWYgKCBjbGVhclF1ZXVlICYmIHR5cGUgIT09IGZhbHNlICkgeworCQkJdGhpcy5xdWV1ZSggdHlwZSB8fCAiZngiLCBbXSApOworCQl9CisKKwkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisJCQl2YXIgZGVxdWV1ZSA9IHRydWUsCisJCQkJaW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArICJxdWV1ZUhvb2tzIiwKKwkJCQl0aW1lcnMgPSBqUXVlcnkudGltZXJzLAorCQkJCWRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTsKKworCQkJaWYgKCBpbmRleCApIHsKKwkJCQlpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICkgeworCQkJCQlzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWZvciAoIGluZGV4IGluIGRhdGEgKSB7CisJCQkJCWlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRleCApICkgeworCQkJCQkJc3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7CisJCQkJaWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJgorCQkJCQkoIHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSApIHsKKworCQkJCQl0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7CisJCQkJCWRlcXVldWUgPSBmYWxzZTsKKwkJCQkJdGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTsKKwkJCQl9CisJCQl9CisKKwkJCS8vIFN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQuCisJCQkvLyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoCisJCQkvLyB3aWxsIGRlcXVldWUgYnV0IG9ubHkgaWYgdGhleSB3ZXJlIGdvdG9FbmQuCisJCQlpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7CisJCQkJalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKKwkJCX0KKwkJfSApOworCX0sCisJZmluaXNoOiBmdW5jdGlvbiggdHlwZSApIHsKKwkJaWYgKCB0eXBlICE9PSBmYWxzZSApIHsKKwkJCXR5cGUgPSB0eXBlIHx8ICJmeCI7CisJCX0KKwkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisJCQl2YXIgaW5kZXgsCisJCQkJZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApLAorCQkJCXF1ZXVlID0gZGF0YVsgdHlwZSArICJxdWV1ZSIgXSwKKwkJCQlob29rcyA9IGRhdGFbIHR5cGUgKyAicXVldWVIb29rcyIgXSwKKwkJCQl0aW1lcnMgPSBqUXVlcnkudGltZXJzLAorCQkJCWxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDsKKworCQkJLy8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YQorCQkJZGF0YS5maW5pc2ggPSB0cnVlOworCisJCQkvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3QKKwkJCWpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTsKKworCQkJaWYgKCBob29rcyAmJiBob29rcy5zdG9wICkgeworCQkJCWhvb2tzLnN0b3AuY2FsbCggdGhpcywgdHJ1ZSApOworCQkJfQorCisJCQkvLyBMb29rIGZvciBhbnkgYWN0aXZlIGFuaW1hdGlvbnMsIGFuZCBmaW5pc2ggdGhlbQorCQkJZm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHsKKwkJCQlpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmIHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApIHsKKwkJCQkJdGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggdHJ1ZSApOworCQkJCQl0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApOworCQkJCX0KKwkJCX0KKworCQkJLy8gTG9vayBmb3IgYW55IGFuaW1hdGlvbnMgaW4gdGhlIG9sZCBxdWV1ZSBhbmQgZmluaXNoIHRoZW0KKwkJCWZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7CisJCQkJaWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsgaW5kZXggXS5maW5pc2ggKSB7CisJCQkJCXF1ZXVlWyBpbmRleCBdLmZpbmlzaC5jYWxsKCB0aGlzICk7CisJCQkJfQorCQkJfQorCisJCQkvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZworCQkJZGVsZXRlIGRhdGEuZmluaXNoOworCQl9ICk7CisJfQorfSApOworCitqUXVlcnkuZWFjaCggWyAidG9nZ2xlIiwgInNob3ciLCAiaGlkZSIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CisJdmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07CisJalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CisJCXJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gImJvb2xlYW4iID8KKwkJCWNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6CisJCQl0aGlzLmFuaW1hdGUoIGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7CisJfTsKK30gKTsKKworLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9ucworalF1ZXJ5LmVhY2goIHsKKwlzbGlkZURvd246IGdlbkZ4KCAic2hvdyIgKSwKKwlzbGlkZVVwOiBnZW5GeCggImhpZGUiICksCisJc2xpZGVUb2dnbGU6IGdlbkZ4KCAidG9nZ2xlIiApLAorCWZhZGVJbjogeyBvcGFjaXR5OiAic2hvdyIgfSwKKwlmYWRlT3V0OiB7IG9wYWNpdHk6ICJoaWRlIiB9LAorCWZhZGVUb2dnbGU6IHsgb3BhY2l0eTogInRvZ2dsZSIgfQorfSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkgeworCWpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgeworCQlyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKKwl9OworfSApOworCitqUXVlcnkudGltZXJzID0gW107CitqUXVlcnkuZngudGljayA9IGZ1bmN0aW9uKCkgeworCXZhciB0aW1lciwKKwkJaSA9IDAsCisJCXRpbWVycyA9IGpRdWVyeS50aW1lcnM7CisKKwlmeE5vdyA9IERhdGUubm93KCk7CisKKwlmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7CisJCXRpbWVyID0gdGltZXJzWyBpIF07CisKKwkJLy8gUnVuIHRoZSB0aW1lciBhbmQgc2FmZWx5IHJlbW92ZSBpdCB3aGVuIGRvbmUgKGFsbG93aW5nIGZvciBleHRlcm5hbCByZW1vdmFsKQorCQlpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHsKKwkJCXRpbWVycy5zcGxpY2UoIGktLSwgMSApOworCQl9CisJfQorCisJaWYgKCAhdGltZXJzLmxlbmd0aCApIHsKKwkJalF1ZXJ5LmZ4LnN0b3AoKTsKKwl9CisJZnhOb3cgPSB1bmRlZmluZWQ7Cit9OworCitqUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7CisJalF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApOworCWpRdWVyeS5meC5zdGFydCgpOworfTsKKworalF1ZXJ5LmZ4LmludGVydmFsID0gMTM7CitqUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHsKKwlpZiAoIGluUHJvZ3Jlc3MgKSB7CisJCXJldHVybjsKKwl9CisKKwlpblByb2dyZXNzID0gdHJ1ZTsKKwlzY2hlZHVsZSgpOworfTsKKworalF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHsKKwlpblByb2dyZXNzID0gbnVsbDsKK307CisKK2pRdWVyeS5meC5zcGVlZHMgPSB7CisJc2xvdzogNjAwLAorCWZhc3Q6IDIwMCwKKworCS8vIERlZmF1bHQgc3BlZWQKKwlfZGVmYXVsdDogNDAwCit9OworCisKKy8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi4KKy8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDEwMDMyNDAxNDc0Ny9odHRwOi8vYmxpbmRzaWduYWxzLmNvbS9pbmRleC5waHAvMjAwOS8wNy9qcXVlcnktZGVsYXkvCitqUXVlcnkuZm4uZGVsYXkgPSBmdW5jdGlvbiggdGltZSwgdHlwZSApIHsKKwl0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lOworCXR5cGUgPSB0eXBlIHx8ICJmeCI7CisKKwlyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkgeworCQl2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7CisJCWhvb2tzLnN0b3AgPSBmdW5jdGlvbigpIHsKKwkJCXdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXQgKTsKKwkJfTsKKwl9ICk7Cit9OworCisKKyggZnVuY3Rpb24oKSB7CisJdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImlucHV0IiApLAorCQlzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAic2VsZWN0IiApLAorCQlvcHQgPSBzZWxlY3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJvcHRpb24iICkgKTsKKworCWlucHV0LnR5cGUgPSAiY2hlY2tib3giOworCisJLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMyBvbmx5CisJLy8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgIm9uIgorCXN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSAiIjsKKworCS8vIFN1cHBvcnQ6IElFIDw9MTEgb25seQorCS8vIE11c3QgYWNjZXNzIHNlbGVjdGVkSW5kZXggdG8gbWFrZSBkZWZhdWx0IG9wdGlvbnMgc2VsZWN0CisJc3VwcG9ydC5vcHRTZWxlY3RlZCA9IG9wdC5zZWxlY3RlZDsKKworCS8vIFN1cHBvcnQ6IElFIDw9MTEgb25seQorCS8vIEFuIGlucHV0IGxvc2VzIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvCisJaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiaW5wdXQiICk7CisJaW5wdXQudmFsdWUgPSAidCI7CisJaW5wdXQudHlwZSA9ICJyYWRpbyI7CisJc3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09ICJ0IjsKK30gKSgpOworCisKK3ZhciBib29sSG9vaywKKwlhdHRySGFuZGxlID0galF1ZXJ5LmV4cHIuYXR0ckhhbmRsZTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCWF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKwkJcmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApOworCX0sCisKKwlyZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHsKKwkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisJCQlqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApOworCQl9ICk7CisJfQorfSApOworCitqUXVlcnkuZXh0ZW5kKCB7CisJYXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgeworCQl2YXIgcmV0LCBob29rcywKKwkJCW5UeXBlID0gZWxlbS5ub2RlVHlwZTsKKworCQkvLyBEb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzCisJCWlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZAorCQlpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gInVuZGVmaW5lZCIgKSB7CisJCQlyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7CisJCX0KKworCQkvLyBBdHRyaWJ1dGUgaG9va3MgYXJlIGRldGVybWluZWQgYnkgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uCisJCS8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWQKKwkJaWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7CisJCQlob29rcyA9IGpRdWVyeS5hdHRySG9va3NbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8CisJCQkJKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7CisJCX0KKworCQlpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CisJCQlpZiAoIHZhbHVlID09PSBudWxsICkgeworCQkJCWpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlpZiAoIGhvb2tzICYmICJzZXQiIGluIGhvb2tzICYmCisJCQkJKCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkgeworCQkJCXJldHVybiByZXQ7CisJCQl9CisKKwkJCWVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCB2YWx1ZSArICIiICk7CisJCQlyZXR1cm4gdmFsdWU7CisJCX0KKworCQlpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7CisKKwkJLy8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWQKKwkJcmV0dXJuIHJldCA9PSBudWxsID8gdW5kZWZpbmVkIDogcmV0OworCX0sCisKKwlhdHRySG9va3M6IHsKKwkJdHlwZTogeworCQkJc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CisJCQkJaWYgKCAhc3VwcG9ydC5yYWRpb1ZhbHVlICYmIHZhbHVlID09PSAicmFkaW8iICYmCisJCQkJCW5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgKSB7CisJCQkJCXZhciB2YWwgPSBlbGVtLnZhbHVlOworCQkJCQllbGVtLnNldEF0dHJpYnV0ZSggInR5cGUiLCB2YWx1ZSApOworCQkJCQlpZiAoIHZhbCApIHsKKwkJCQkJCWVsZW0udmFsdWUgPSB2YWw7CisJCQkJCX0KKwkJCQkJcmV0dXJuIHZhbHVlOworCQkJCX0KKwkJCX0KKwkJfQorCX0sCisKKwlyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CisJCXZhciBuYW1lLAorCQkJaSA9IDAsCisKKwkJCS8vIEF0dHJpYnV0ZSBuYW1lcyBjYW4gY29udGFpbiBub24tSFRNTCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMKKwkJCS8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2F0dHJpYnV0ZXMtMgorCQkJYXR0ck5hbWVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKTsKKworCQlpZiAoIGF0dHJOYW1lcyAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgeworCQkJd2hpbGUgKCAoIG5hbWUgPSBhdHRyTmFtZXNbIGkrKyBdICkgKSB7CisJCQkJZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIG5hbWUgKTsKKwkJCX0KKwkJfQorCX0KK30gKTsKKworLy8gSG9va3MgZm9yIGJvb2xlYW4gYXR0cmlidXRlcworYm9vbEhvb2sgPSB7CisJc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7CisJCWlmICggdmFsdWUgPT09IGZhbHNlICkgeworCisJCQkvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlCisJCQlqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApOworCQl9IGVsc2UgeworCQkJZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUgKTsKKwkJfQorCQlyZXR1cm4gbmFtZTsKKwl9Cit9OworCitqUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cdysvZyApLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKKwl2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7CisKKwlhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7CisJCXZhciByZXQsIGhhbmRsZSwKKwkJCWxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7CisKKwkJaWYgKCAhaXNYTUwgKSB7CisKKwkJCS8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3AgYnkgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRoZSBnZXR0ZXIKKwkJCWhhbmRsZSA9IGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXTsKKwkJCWF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IHJldDsKKwkJCXJldCA9IGdldHRlciggZWxlbSwgbmFtZSwgaXNYTUwgKSAhPSBudWxsID8KKwkJCQlsb3dlcmNhc2VOYW1lIDoKKwkJCQludWxsOworCQkJYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gaGFuZGxlOworCQl9CisJCXJldHVybiByZXQ7CisJfTsKK30gKTsKKworCisKKwordmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLAorCXJjbGlja2FibGUgPSAvXig/OmF8YXJlYSkkL2k7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKwlwcm9wOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CisJCXJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTsKKwl9LAorCisJcmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7CisJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworCQkJZGVsZXRlIHRoaXNbIGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZSBdOworCQl9ICk7CisJfQorfSApOworCitqUXVlcnkuZXh0ZW5kKCB7CisJcHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgeworCQl2YXIgcmV0LCBob29rcywKKwkJCW5UeXBlID0gZWxlbS5ub2RlVHlwZTsKKworCQkvLyBEb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzCisJCWlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHsKKworCQkJLy8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rcworCQkJbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKKwkJCWhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdOworCQl9CisKKwkJaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgeworCQkJaWYgKCBob29rcyAmJiAic2V0IiBpbiBob29rcyAmJgorCQkJCSggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQlyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApOworCQl9CisKKwkJaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmV0dXJuIGVsZW1bIG5hbWUgXTsKKwl9LAorCisJcHJvcEhvb2tzOiB7CisJCXRhYkluZGV4OiB7CisJCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworCisJCQkJLy8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seQorCQkJCS8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZQorCQkJCS8vIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNldAorCQkJCS8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE0MTExNjIzMzM0Ny9odHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0LworCQkJCS8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCgjMTIwNzIpCisJCQkJdmFyIHRhYmluZGV4ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgInRhYmluZGV4IiApOworCisJCQkJaWYgKCB0YWJpbmRleCApIHsKKwkJCQkJcmV0dXJuIHBhcnNlSW50KCB0YWJpbmRleCwgMTAgKTsKKwkJCQl9CisKKwkJCQlpZiAoCisJCQkJCXJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8CisJCQkJCXJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmCisJCQkJCWVsZW0uaHJlZgorCQkJCSkgeworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKwl9LAorCisJcHJvcEZpeDogeworCQkiZm9yIjogImh0bWxGb3IiLAorCQkiY2xhc3MiOiAiY2xhc3NOYW1lIgorCX0KK30gKTsKKworLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5CisvLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHkKKy8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWQKKy8vIG9uIHRoZSBvcHRpb24KKy8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkCisvLyB3aGVuIGluIGFuIG9wdGdyb3VwCisvLyBlc2xpbnQgcnVsZSAibm8tdW51c2VkLWV4cHJlc3Npb25zIiBpcyBkaXNhYmxlZCBmb3IgdGhpcyBjb2RlCisvLyBzaW5jZSBpdCBjb25zaWRlcnMgc3VjaCBhY2Nlc3Npb25zIG5vb3AKK2lmICggIXN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7CisJalF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IHsKKwkJZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKKworCQkJLyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogIm9mZiIgKi8KKworCQkJdmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKKwkJCWlmICggcGFyZW50ICYmIHBhcmVudC5wYXJlbnROb2RlICkgeworCQkJCXBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7CisJCQl9CisJCQlyZXR1cm4gbnVsbDsKKwkJfSwKKwkJc2V0OiBmdW5jdGlvbiggZWxlbSApIHsKKworCQkJLyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogIm9mZiIgKi8KKworCQkJdmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKKwkJCWlmICggcGFyZW50ICkgeworCQkJCXBhcmVudC5zZWxlY3RlZEluZGV4OworCisJCQkJaWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHsKKwkJCQkJcGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKKwkJCQl9CisJCQl9CisJCX0KKwl9OworfQorCitqUXVlcnkuZWFjaCggWworCSJ0YWJJbmRleCIsCisJInJlYWRPbmx5IiwKKwkibWF4TGVuZ3RoIiwKKwkiY2VsbFNwYWNpbmciLAorCSJjZWxsUGFkZGluZyIsCisJInJvd1NwYW4iLAorCSJjb2xTcGFuIiwKKwkidXNlTWFwIiwKKwkiZnJhbWVCb3JkZXIiLAorCSJjb250ZW50RWRpdGFibGUiCitdLCBmdW5jdGlvbigpIHsKKwlqUXVlcnkucHJvcEZpeFsgdGhpcy50b0xvd2VyQ2FzZSgpIF0gPSB0aGlzOworfSApOworCisKKworCisJLy8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UgYWNjb3JkaW5nIHRvIEhUTUwgc3BlYworCS8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2UtYXNjaWktd2hpdGVzcGFjZQorCWZ1bmN0aW9uIHN0cmlwQW5kQ29sbGFwc2UoIHZhbHVlICkgeworCQl2YXIgdG9rZW5zID0gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTsKKwkJcmV0dXJuIHRva2Vucy5qb2luKCAiICIgKTsKKwl9CisKKworZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7CisJcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCAiY2xhc3MiICkgfHwgIiI7Cit9CisKK2Z1bmN0aW9uIGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApIHsKKwlpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7CisJCXJldHVybiB2YWx1ZTsKKwl9CisJaWYgKCB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICkgeworCQlyZXR1cm4gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTsKKwl9CisJcmV0dXJuIFtdOworfQorCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisJYWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKwkJdmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLAorCQkJaSA9IDA7CisKKwkJaWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkgeworCQkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7CisJCQkJalF1ZXJ5KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApOworCQkJfSApOworCQl9CisKKwkJY2xhc3NlcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApOworCisJCWlmICggY2xhc3Nlcy5sZW5ndGggKSB7CisJCQl3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7CisJCQkJY3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApOworCQkJCWN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCAiICIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgIiAiICk7CisKKwkJCQlpZiAoIGN1ciApIHsKKwkJCQkJaiA9IDA7CisJCQkJCXdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7CisJCQkJCQlpZiAoIGN1ci5pbmRleE9mKCAiICIgKyBjbGF6eiArICIgIiApIDwgMCApIHsKKwkJCQkJCQljdXIgKz0gY2xhenogKyAiICI7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQkvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLgorCQkJCQlmaW5hbFZhbHVlID0gc3RyaXBBbmRDb2xsYXBzZSggY3VyICk7CisJCQkJCWlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7CisJCQkJCQllbGVtLnNldEF0dHJpYnV0ZSggImNsYXNzIiwgZmluYWxWYWx1ZSApOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7CisJCXZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSwKKwkJCWkgPSAwOworCisJCWlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKKwkJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkgeworCQkJCWpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTsKKwkJCX0gKTsKKwkJfQorCisJCWlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7CisJCQlyZXR1cm4gdGhpcy5hdHRyKCAiY2xhc3MiLCAiIiApOworCQl9CisKKwkJY2xhc3NlcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApOworCisJCWlmICggY2xhc3Nlcy5sZW5ndGggKSB7CisJCQl3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7CisJCQkJY3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApOworCisJCQkJLy8gVGhpcyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNlZSBhZGRDbGFzcykKKwkJCQljdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggIiAiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArICIgIiApOworCisJCQkJaWYgKCBjdXIgKSB7CisJCQkJCWogPSAwOworCQkJCQl3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkgeworCisJCQkJCQkvLyBSZW1vdmUgKmFsbCogaW5zdGFuY2VzCisJCQkJCQl3aGlsZSAoIGN1ci5pbmRleE9mKCAiICIgKyBjbGF6eiArICIgIiApID4gLTEgKSB7CisJCQkJCQkJY3VyID0gY3VyLnJlcGxhY2UoICIgIiArIGNsYXp6ICsgIiAiLCAiICIgKTsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCS8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuCisJCQkJCWZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTsKKwkJCQkJaWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHsKKwkJCQkJCWVsZW0uc2V0QXR0cmlidXRlKCAiY2xhc3MiLCBmaW5hbFZhbHVlICk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJdG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7CisJCXZhciB0eXBlID0gdHlwZW9mIHZhbHVlLAorCQkJaXNWYWxpZFZhbHVlID0gdHlwZSA9PT0gInN0cmluZyIgfHwgQXJyYXkuaXNBcnJheSggdmFsdWUgKTsKKworCQlpZiAoIHR5cGVvZiBzdGF0ZVZhbCA9PT0gImJvb2xlYW4iICYmIGlzVmFsaWRWYWx1ZSApIHsKKwkJCXJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApOworCQl9CisKKwkJaWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkgeworCQkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7CisJCQkJalF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoCisJCQkJCXZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlzICksIHN0YXRlVmFsICksCisJCQkJCXN0YXRlVmFsCisJCQkJKTsKKwkJCX0gKTsKKwkJfQorCisJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworCQkJdmFyIGNsYXNzTmFtZSwgaSwgc2VsZiwgY2xhc3NOYW1lczsKKworCQkJaWYgKCBpc1ZhbGlkVmFsdWUgKSB7CisKKwkJCQkvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lcworCQkJCWkgPSAwOworCQkJCXNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKKwkJCQljbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7CisKKwkJCQl3aGlsZSAoICggY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0gKSApIHsKKworCQkJCQkvLyBDaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3QKKwkJCQkJaWYgKCBzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKSApIHsKKwkJCQkJCXNlbGYucmVtb3ZlQ2xhc3MoIGNsYXNzTmFtZSApOworCQkJCQl9IGVsc2UgeworCQkJCQkJc2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7CisJCQkJCX0KKwkJCQl9CisKKwkJCS8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lCisJCQl9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09ICJib29sZWFuIiApIHsKKwkJCQljbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApOworCQkJCWlmICggY2xhc3NOYW1lICkgeworCisJCQkJCS8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXQKKwkJCQkJZGF0YVByaXYuc2V0KCB0aGlzLCAiX19jbGFzc05hbWVfXyIsIGNsYXNzTmFtZSApOworCQkJCX0KKworCQkJCS8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsCisJCQkJLy8gdGhlbiByZW1vdmUgdGhlIHdob2xlIGNsYXNzbmFtZSAoaWYgdGhlcmUgd2FzIG9uZSwgdGhlIGFib3ZlIHNhdmVkIGl0KS4KKwkJCQkvLyBPdGhlcndpc2UgYnJpbmcgYmFjayB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBzYXZlZCAoaWYgYW55dGhpbmcpLAorCQkJCS8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC4KKwkJCQlpZiAoIHRoaXMuc2V0QXR0cmlidXRlICkgeworCQkJCQl0aGlzLnNldEF0dHJpYnV0ZSggImNsYXNzIiwKKwkJCQkJCWNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgPworCQkJCQkJIiIgOgorCQkJCQkJZGF0YVByaXYuZ2V0KCB0aGlzLCAiX19jbGFzc05hbWVfXyIgKSB8fCAiIgorCQkJCQkpOworCQkJCX0KKwkJCX0KKwkJfSApOworCX0sCisKKwloYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworCQl2YXIgY2xhc3NOYW1lLCBlbGVtLAorCQkJaSA9IDA7CisKKwkJY2xhc3NOYW1lID0gIiAiICsgc2VsZWN0b3IgKyAiICI7CisJCXdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHsKKwkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJgorCQkJCSggIiAiICsgc3RyaXBBbmRDb2xsYXBzZSggZ2V0Q2xhc3MoIGVsZW0gKSApICsgIiAiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHsKKwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0KKworCQlyZXR1cm4gZmFsc2U7CisJfQorfSApOworCisKKworCit2YXIgcnJldHVybiA9IC9cci9nOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisJdmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7CisJCXZhciBob29rcywgcmV0LCB2YWx1ZUlzRnVuY3Rpb24sCisJCQllbGVtID0gdGhpc1sgMCBdOworCisJCWlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7CisJCQlpZiAoIGVsZW0gKSB7CisJCQkJaG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8CisJCQkJCWpRdWVyeS52YWxIb29rc1sgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07CisKKwkJCQlpZiAoIGhvb2tzICYmCisJCQkJCSJnZXQiIGluIGhvb2tzICYmCisJCQkJCSggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCAidmFsdWUiICkgKSAhPT0gdW5kZWZpbmVkCisJCQkJKSB7CisJCQkJCXJldHVybiByZXQ7CisJCQkJfQorCisJCQkJcmV0ID0gZWxlbS52YWx1ZTsKKworCQkJCS8vIEhhbmRsZSBtb3N0IGNvbW1vbiBzdHJpbmcgY2FzZXMKKwkJCQlpZiAoIHR5cGVvZiByZXQgPT09ICJzdHJpbmciICkgeworCQkJCQlyZXR1cm4gcmV0LnJlcGxhY2UoIHJyZXR1cm4sICIiICk7CisJCQkJfQorCisJCQkJLy8gSGFuZGxlIGNhc2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyCisJCQkJcmV0dXJuIHJldCA9PSBudWxsID8gIiIgOiByZXQ7CisJCQl9CisKKwkJCXJldHVybjsKKwkJfQorCisJCXZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7CisKKwkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7CisJCQl2YXIgdmFsOworCisJCQlpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHsKKwkJCQl2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApOworCQkJfSBlbHNlIHsKKwkJCQl2YWwgPSB2YWx1ZTsKKwkJCX0KKworCQkJLy8gVHJlYXQgbnVsbC91bmRlZmluZWQgYXMgIiI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmcKKwkJCWlmICggdmFsID09IG51bGwgKSB7CisJCQkJdmFsID0gIiI7CisKKwkJCX0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09ICJudW1iZXIiICkgeworCQkJCXZhbCArPSAiIjsKKworCQkJfSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7CisJCQkJdmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7CisJCQkJCXJldHVybiB2YWx1ZSA9PSBudWxsID8gIiIgOiB2YWx1ZSArICIiOworCQkJCX0gKTsKKwkJCX0KKworCQkJaG9va3MgPSBqUXVlcnkudmFsSG9va3NbIHRoaXMudHlwZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07CisKKwkJCS8vIElmIHNldCByZXR1cm5zIHVuZGVmaW5lZCwgZmFsbCBiYWNrIHRvIG5vcm1hbCBzZXR0aW5nCisJCQlpZiAoICFob29rcyB8fCAhKCAic2V0IiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCAidmFsdWUiICkgPT09IHVuZGVmaW5lZCApIHsKKwkJCQl0aGlzLnZhbHVlID0gdmFsOworCQkJfQorCQl9ICk7CisJfQorfSApOworCitqUXVlcnkuZXh0ZW5kKCB7CisJdmFsSG9va3M6IHsKKwkJb3B0aW9uOiB7CisJCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworCisJCQkJdmFyIHZhbCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sICJ2YWx1ZSIgKTsKKwkJCQlyZXR1cm4gdmFsICE9IG51bGwgPworCQkJCQl2YWwgOgorCisJCQkJCS8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSBvbmx5CisJCQkJCS8vIG9wdGlvbi50ZXh0IHRocm93cyBleGNlcHRpb25zICgjMTQ2ODYsICMxNDg1OCkKKwkJCQkJLy8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UKKwkJCQkJLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2UKKwkJCQkJc3RyaXBBbmRDb2xsYXBzZSggalF1ZXJ5LnRleHQoIGVsZW0gKSApOworCQkJfQorCQl9LAorCQlzZWxlY3Q6IHsKKwkJCWdldDogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQkJdmFyIHZhbHVlLCBvcHRpb24sIGksCisJCQkJCW9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsCisJCQkJCWluZGV4ID0gZWxlbS5zZWxlY3RlZEluZGV4LAorCQkJCQlvbmUgPSBlbGVtLnR5cGUgPT09ICJzZWxlY3Qtb25lIiwKKwkJCQkJdmFsdWVzID0gb25lID8gbnVsbCA6IFtdLAorCQkJCQltYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDsKKworCQkJCWlmICggaW5kZXggPCAwICkgeworCQkJCQlpID0gbWF4OworCisJCQkJfSBlbHNlIHsKKwkJCQkJaSA9IG9uZSA/IGluZGV4IDogMDsKKwkJCQl9CisKKwkJCQkvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zCisJCQkJZm9yICggOyBpIDwgbWF4OyBpKysgKSB7CisJCQkJCW9wdGlvbiA9IG9wdGlvbnNbIGkgXTsKKworCQkJCQkvLyBTdXBwb3J0OiBJRSA8PTkgb25seQorCQkJCQkvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSkKKwkJCQkJaWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmCisKKwkJCQkJCQkvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwCisJCQkJCQkJIW9wdGlvbi5kaXNhYmxlZCAmJgorCQkJCQkJCSggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8CisJCQkJCQkJCSFub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUsICJvcHRncm91cCIgKSApICkgeworCisJCQkJCQkvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uCisJCQkJCQl2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7CisKKwkJCQkJCS8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzCisJCQkJCQlpZiAoIG9uZSApIHsKKwkJCQkJCQlyZXR1cm4gdmFsdWU7CisJCQkJCQl9CisKKwkJCQkJCS8vIE11bHRpLVNlbGVjdHMgcmV0dXJuIGFuIGFycmF5CisJCQkJCQl2YWx1ZXMucHVzaCggdmFsdWUgKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCXJldHVybiB2YWx1ZXM7CisJCQl9LAorCisJCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKwkJCQl2YXIgb3B0aW9uU2V0LCBvcHRpb24sCisJCQkJCW9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsCisJCQkJCXZhbHVlcyA9IGpRdWVyeS5tYWtlQXJyYXkoIHZhbHVlICksCisJCQkJCWkgPSBvcHRpb25zLmxlbmd0aDsKKworCQkJCXdoaWxlICggaS0tICkgeworCQkJCQlvcHRpb24gPSBvcHRpb25zWyBpIF07CisKKwkJCQkJLyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi8KKworCQkJCQlpZiAoIG9wdGlvbi5zZWxlY3RlZCA9CisJCQkJCQlqUXVlcnkuaW5BcnJheSggalF1ZXJ5LnZhbEhvb2tzLm9wdGlvbi5nZXQoIG9wdGlvbiApLCB2YWx1ZXMgKSA+IC0xCisJCQkJCSkgeworCQkJCQkJb3B0aW9uU2V0ID0gdHJ1ZTsKKwkJCQkJfQorCisJCQkJCS8qIGVzbGludC1lbmFibGUgbm8tY29uZC1hc3NpZ24gKi8KKwkJCQl9CisKKwkJCQkvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldAorCQkJCWlmICggIW9wdGlvblNldCApIHsKKwkJCQkJZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7CisJCQkJfQorCQkJCXJldHVybiB2YWx1ZXM7CisJCQl9CisJCX0KKwl9Cit9ICk7CisKKy8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyCitqUXVlcnkuZWFjaCggWyAicmFkaW8iLCAiY2hlY2tib3giIF0sIGZ1bmN0aW9uKCkgeworCWpRdWVyeS52YWxIb29rc1sgdGhpcyBdID0geworCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKwkJCWlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHsKKwkJCQlyZXR1cm4gKCBlbGVtLmNoZWNrZWQgPSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KCBlbGVtICkudmFsKCksIHZhbHVlICkgPiAtMSApOworCQkJfQorCQl9CisJfTsKKwlpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7CisJCWpRdWVyeS52YWxIb29rc1sgdGhpcyBdLmdldCA9IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCAidmFsdWUiICkgPT09IG51bGwgPyAib24iIDogZWxlbS52YWx1ZTsKKwkJfTsKKwl9Cit9ICk7CisKKworCisKKy8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb24KKworCitzdXBwb3J0LmZvY3VzaW4gPSAib25mb2N1c2luIiBpbiB3aW5kb3c7CisKKwordmFyIHJmb2N1c01vcnBoID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLAorCXN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oIGUgKSB7CisJCWUuc3RvcFByb3BhZ2F0aW9uKCk7CisJfTsKKworalF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7CisKKwl0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHsKKworCQl2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLCBsYXN0RWxlbWVudCwKKwkJCWV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLAorCQkJdHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgInR5cGUiICkgPyBldmVudC50eXBlIDogZXZlbnQsCisJCQluYW1lc3BhY2VzID0gaGFzT3duLmNhbGwoIGV2ZW50LCAibmFtZXNwYWNlIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCAiLiIgKSA6IFtdOworCisJCWN1ciA9IGxhc3RFbGVtZW50ID0gdG1wID0gZWxlbSA9IGVsZW0gfHwgZG9jdW1lbnQ7CisKKwkJLy8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMKKwkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3cKKwkJaWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkgeworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKCB0eXBlLmluZGV4T2YoICIuIiApID4gLTEgKSB7CisKKwkJCS8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKCkKKwkJCW5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCAiLiIgKTsKKwkJCXR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7CisJCQluYW1lc3BhY2VzLnNvcnQoKTsKKwkJfQorCQlvbnR5cGUgPSB0eXBlLmluZGV4T2YoICI6IiApIDwgMCAmJiAib24iICsgdHlwZTsKKworCQkvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmcKKwkJZXZlbnQgPSBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/CisJCQlldmVudCA6CisJCQluZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCB0eXBlb2YgZXZlbnQgPT09ICJvYmplY3QiICYmIGV2ZW50ICk7CisKKwkJLy8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKQorCQlldmVudC5pc1RyaWdnZXIgPSBvbmx5SGFuZGxlcnMgPyAyIDogMzsKKwkJZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCAiLiIgKTsKKwkJZXZlbnQucm5hbWVzcGFjZSA9IGV2ZW50Lm5hbWVzcGFjZSA/CisJCQluZXcgUmVnRXhwKCAiKF58XFwuKSIgKyBuYW1lc3BhY2VzLmpvaW4oICJcXC4oPzouKlxcLnwpIiApICsgIihcXC58JCkiICkgOgorCQkJbnVsbDsKKworCQkvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWQKKwkJZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkOworCQlpZiAoICFldmVudC50YXJnZXQgKSB7CisJCQlldmVudC50YXJnZXQgPSBlbGVtOworCQl9CisKKwkJLy8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdAorCQlkYXRhID0gZGF0YSA9PSBudWxsID8KKwkJCVsgZXZlbnQgXSA6CisJCQlqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTsKKworCQkvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzCisJCXNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OworCQlpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHsKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIERldGVybWluZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFkdmFuY2UsIHBlciBXM0MgZXZlbnRzIHNwZWMgKCM5OTUxKQorCQkvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KQorCQlpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7CisKKwkJCWJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlOworCQkJaWYgKCAhcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSApIHsKKwkJCQljdXIgPSBjdXIucGFyZW50Tm9kZTsKKwkJCX0KKwkJCWZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHsKKwkJCQlldmVudFBhdGgucHVzaCggY3VyICk7CisJCQkJdG1wID0gY3VyOworCQkJfQorCisJCQkvLyBPbmx5IGFkZCB3aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcuLCBub3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERPTSkKKwkJCWlmICggdG1wID09PSAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCApICkgeworCQkJCWV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTsKKwkJCX0KKwkJfQorCisJCS8vIEZpcmUgaGFuZGxlcnMgb24gdGhlIGV2ZW50IHBhdGgKKwkJaSA9IDA7CisJCXdoaWxlICggKCBjdXIgPSBldmVudFBhdGhbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7CisJCQlsYXN0RWxlbWVudCA9IGN1cjsKKwkJCWV2ZW50LnR5cGUgPSBpID4gMSA/CisJCQkJYnViYmxlVHlwZSA6CisJCQkJc3BlY2lhbC5iaW5kVHlwZSB8fCB0eXBlOworCisJCQkvLyBqUXVlcnkgaGFuZGxlcgorCQkJaGFuZGxlID0gKCBkYXRhUHJpdi5nZXQoIGN1ciwgImV2ZW50cyIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gJiYKKwkJCQlkYXRhUHJpdi5nZXQoIGN1ciwgImhhbmRsZSIgKTsKKwkJCWlmICggaGFuZGxlICkgeworCQkJCWhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7CisJCQl9CisKKwkJCS8vIE5hdGl2ZSBoYW5kbGVyCisJCQloYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTsKKwkJCWlmICggaGFuZGxlICYmIGhhbmRsZS5hcHBseSAmJiBhY2NlcHREYXRhKCBjdXIgKSApIHsKKwkJCQlldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApOworCQkJCWlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHsKKwkJCQkJZXZlbnQucHJldmVudERlZmF1bHQoKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZXZlbnQudHlwZSA9IHR5cGU7CisKKwkJLy8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vdworCQlpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkgeworCisJCQlpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHwKKwkJCQlzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UgKSAmJgorCQkJCWFjY2VwdERhdGEoIGVsZW0gKSApIHsKKworCQkJCS8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZXZlbnQuCisJCQkJLy8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKQorCQkJCWlmICggb250eXBlICYmIGlzRnVuY3Rpb24oIGVsZW1bIHR5cGUgXSApICYmICFpc1dpbmRvdyggZWxlbSApICkgeworCisJCQkJCS8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2QKKwkJCQkJdG1wID0gZWxlbVsgb250eXBlIF07CisKKwkJCQkJaWYgKCB0bXAgKSB7CisJCQkJCQllbGVtWyBvbnR5cGUgXSA9IG51bGw7CisJCQkJCX0KKworCQkJCQkvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZQorCQkJCQlqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdHlwZTsKKworCQkJCQlpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7CisJCQkJCQlsYXN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApOworCQkJCQl9CisKKwkJCQkJZWxlbVsgdHlwZSBdKCk7CisKKwkJCQkJaWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkgeworCQkJCQkJbGFzdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTsKKwkJCQkJfQorCisJCQkJCWpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7CisKKwkJCQkJaWYgKCB0bXAgKSB7CisJCQkJCQllbGVtWyBvbnR5cGUgXSA9IHRtcDsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCXJldHVybiBldmVudC5yZXN1bHQ7CisJfSwKKworCS8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZQorCS8vIFVzZWQgb25seSBmb3IgYGZvY3VzKGluIHwgb3V0KWAgZXZlbnRzCisJc2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCApIHsKKwkJdmFyIGUgPSBqUXVlcnkuZXh0ZW5kKAorCQkJbmV3IGpRdWVyeS5FdmVudCgpLAorCQkJZXZlbnQsCisJCQl7CisJCQkJdHlwZTogdHlwZSwKKwkJCQlpc1NpbXVsYXRlZDogdHJ1ZQorCQkJfQorCQkpOworCisJCWpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7CisJfQorCit9ICk7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKworCXRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgeworCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKwkJCWpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7CisJCX0gKTsKKwl9LAorCXRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKKwkJdmFyIGVsZW0gPSB0aGlzWyAwIF07CisJCWlmICggZWxlbSApIHsKKwkJCXJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwgdHJ1ZSApOworCQl9CisJfQorfSApOworCisKKy8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00NAorLy8gRmlyZWZveCBkb2Vzbid0IGhhdmUgZm9jdXMoaW4gfCBvdXQpIGV2ZW50cworLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc3ODcKKy8vCisvLyBTdXBwb3J0OiBDaHJvbWUgPD00OCAtIDQ5LCBTYWZhcmkgPD05LjAgLSA5LjEKKy8vIGZvY3VzKGluIHwgb3V0KSBldmVudHMgZmlyZSBhZnRlciBmb2N1cyAmIGJsdXIgZXZlbnRzLAorLy8gd2hpY2ggaXMgc3BlYyB2aW9sYXRpb24gLSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1mb2N1c2V2ZW50LWV2ZW50LW9yZGVyCisvLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0OTg1NworaWYgKCAhc3VwcG9ydC5mb2N1c2luICkgeworCWpRdWVyeS5lYWNoKCB7IGZvY3VzOiAiZm9jdXNpbiIsIGJsdXI6ICJmb2N1c291dCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHsKKworCQkvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dAorCQl2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKCBldmVudCApIHsKKwkJCWpRdWVyeS5ldmVudC5zaW11bGF0ZSggZml4LCBldmVudC50YXJnZXQsIGpRdWVyeS5ldmVudC5maXgoIGV2ZW50ICkgKTsKKwkJfTsKKworCQlqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7CisJCQlzZXR1cDogZnVuY3Rpb24oKSB7CisJCQkJdmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLAorCQkJCQlhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKTsKKworCQkJCWlmICggIWF0dGFjaGVzICkgeworCQkJCQlkb2MuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApOworCQkJCX0KKwkJCQlkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTsKKwkJCX0sCisJCQl0ZWFyZG93bjogZnVuY3Rpb24oKSB7CisJCQkJdmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLAorCQkJCQlhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKSAtIDE7CisKKwkJCQlpZiAoICFhdHRhY2hlcyApIHsKKwkJCQkJZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTsKKwkJCQkJZGF0YVByaXYucmVtb3ZlKCBkb2MsIGZpeCApOworCisJCQkJfSBlbHNlIHsKKwkJCQkJZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgYXR0YWNoZXMgKTsKKwkJCQl9CisJCQl9CisJCX07CisJfSApOworfQordmFyIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uOworCit2YXIgbm9uY2UgPSBEYXRlLm5vdygpOworCit2YXIgcnF1ZXJ5ID0gKCAvXD8vICk7CisKKworCisvLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nCitqUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHsKKwl2YXIgeG1sOworCWlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICJzdHJpbmciICkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seQorCS8vIElFIHRocm93cyBvbiBwYXJzZUZyb21TdHJpbmcgd2l0aCBpbnZhbGlkIGlucHV0LgorCXRyeSB7CisJCXhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgInRleHQveG1sIiApOworCX0gY2F0Y2ggKCBlICkgeworCQl4bWwgPSB1bmRlZmluZWQ7CisJfQorCisJaWYgKCAheG1sIHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggInBhcnNlcmVycm9yIiApLmxlbmd0aCApIHsKKwkJalF1ZXJ5LmVycm9yKCAiSW52YWxpZCBYTUw6ICIgKyBkYXRhICk7CisJfQorCXJldHVybiB4bWw7Cit9OworCisKK3ZhcgorCXJicmFja2V0ID0gL1xbXF0kLywKKwlyQ1JMRiA9IC9ccj9cbi9nLAorCXJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSwKKwlyc3VibWl0dGFibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7CisKK2Z1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHsKKwl2YXIgbmFtZTsKKworCWlmICggQXJyYXkuaXNBcnJheSggb2JqICkgKSB7CisKKwkJLy8gU2VyaWFsaXplIGFycmF5IGl0ZW0uCisJCWpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkgeworCQkJaWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHsKKworCQkJCS8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci4KKwkJCQlhZGQoIHByZWZpeCwgdiApOworCisJCQl9IGVsc2UgeworCisJCQkJLy8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguCisJCQkJYnVpbGRQYXJhbXMoCisJCQkJCXByZWZpeCArICJbIiArICggdHlwZW9mIHYgPT09ICJvYmplY3QiICYmIHYgIT0gbnVsbCA/IGkgOiAiIiApICsgIl0iLAorCQkJCQl2LAorCQkJCQl0cmFkaXRpb25hbCwKKwkJCQkJYWRkCisJCQkJKTsKKwkJCX0KKwkJfSApOworCisJfSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIHRvVHlwZSggb2JqICkgPT09ICJvYmplY3QiICkgeworCisJCS8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS4KKwkJZm9yICggbmFtZSBpbiBvYmogKSB7CisJCQlidWlsZFBhcmFtcyggcHJlZml4ICsgIlsiICsgbmFtZSArICJdIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKKwkJfQorCisJfSBlbHNlIHsKKworCQkvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uCisJCWFkZCggcHJlZml4LCBvYmogKTsKKwl9Cit9CisKKy8vIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mCisvLyBrZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmcKK2pRdWVyeS5wYXJhbSA9IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHsKKwl2YXIgcHJlZml4LAorCQlzID0gW10sCisJCWFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlT3JGdW5jdGlvbiApIHsKKworCQkJLy8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCB1c2UgaXRzIHJldHVybiB2YWx1ZQorCQkJdmFyIHZhbHVlID0gaXNGdW5jdGlvbiggdmFsdWVPckZ1bmN0aW9uICkgPworCQkJCXZhbHVlT3JGdW5jdGlvbigpIDoKKwkJCQl2YWx1ZU9yRnVuY3Rpb247CisKKwkJCXNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgIj0iICsKKwkJCQllbmNvZGVVUklDb21wb25lbnQoIHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlICk7CisJCX07CisKKwkvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLgorCWlmICggQXJyYXkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHsKKworCQkvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHMKKwkJalF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkgeworCQkJYWRkKCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTsKKwkJfSApOworCisJfSBlbHNlIHsKKworCQkvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSAib2xkIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXIKKwkJLy8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBwYXJhbXMgcmVjdXJzaXZlbHkuCisJCWZvciAoIHByZWZpeCBpbiBhICkgeworCQkJYnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKKwkJfQorCX0KKworCS8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6YXRpb24KKwlyZXR1cm4gcy5qb2luKCAiJiIgKTsKK307CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKwlzZXJpYWxpemU6IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTsKKwl9LAorCXNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHsKKwkJcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHsKKworCQkJLy8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgImVsZW1lbnRzIiB0byBmaWx0ZXIgb3IgYWRkIGZvcm0gZWxlbWVudHMKKwkJCXZhciBlbGVtZW50cyA9IGpRdWVyeS5wcm9wKCB0aGlzLCAiZWxlbWVudHMiICk7CisJCQlyZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpczsKKwkJfSApCisJCS5maWx0ZXIoIGZ1bmN0aW9uKCkgeworCQkJdmFyIHR5cGUgPSB0aGlzLnR5cGU7CisKKwkJCS8vIFVzZSAuaXMoICI6ZGlzYWJsZWQiICkgc28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3MKKwkJCXJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlzKCAiOmRpc2FibGVkIiApICYmCisJCQkJcnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJgorCQkJCSggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTsKKwkJfSApCisJCS5tYXAoIGZ1bmN0aW9uKCBpLCBlbGVtICkgeworCQkJdmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpOworCisJCQlpZiAoIHZhbCA9PSBudWxsICkgeworCQkJCXJldHVybiBudWxsOworCQkJfQorCisJCQlpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkgeworCQkJCXJldHVybiBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwgKSB7CisJCQkJCXJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkgfTsKKwkJCQl9ICk7CisJCQl9CisKKwkJCXJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkgfTsKKwkJfSApLmdldCgpOworCX0KK30gKTsKKworCit2YXIKKwlyMjAgPSAvJTIwL2csCisJcmhhc2ggPSAvIy4qJC8sCisJcmFudGlDYWNoZSA9IC8oWz8mXSlfPVteJl0qLywKKwlyaGVhZGVycyA9IC9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKSQvbWcsCisKKwkvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb24KKwlybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLAorCXJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLAorCXJwcm90b2NvbCA9IC9eXC9cLy8sCisKKwkvKiBQcmVmaWx0ZXJzCisJICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSkKKwkgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOgorCSAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnQKKwkgKiAgICAtIEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUpCisJICogMykga2V5IGlzIHRoZSBkYXRhVHlwZQorCSAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkCisJICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byAiKiIgaWYgbmVlZGVkCisJICovCisJcHJlZmlsdGVycyA9IHt9LAorCisJLyogVHJhbnNwb3J0cyBiaW5kaW5ncworCSAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGUKKwkgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZAorCSAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvICIqIiBpZiBuZWVkZWQKKwkgKi8KKwl0cmFuc3BvcnRzID0ge30sCisKKwkvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb24KKwlhbGxUeXBlcyA9ICIqLyIuY29uY2F0KCAiKiIgKSwKKworCS8vIEFuY2hvciB0YWcgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IG9yaWdpbgorCW9yaWdpbkFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJhIiApOworCW9yaWdpbkFuY2hvci5ocmVmID0gbG9jYXRpb24uaHJlZjsKKworLy8gQmFzZSAiY29uc3RydWN0b3IiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnQKK2Z1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkgeworCisJLy8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byAiKiIKKwlyZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVuYyApIHsKKworCQlpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09ICJzdHJpbmciICkgeworCQkJZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjsKKwkJCWRhdGFUeXBlRXhwcmVzc2lvbiA9ICIqIjsKKwkJfQorCisJCXZhciBkYXRhVHlwZSwKKwkJCWkgPSAwLAorCQkJZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTsKKworCQlpZiAoIGlzRnVuY3Rpb24oIGZ1bmMgKSApIHsKKworCQkJLy8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvbgorCQkJd2hpbGUgKCAoIGRhdGFUeXBlID0gZGF0YVR5cGVzWyBpKysgXSApICkgeworCisJCQkJLy8gUHJlcGVuZCBpZiByZXF1ZXN0ZWQKKwkJCQlpZiAoIGRhdGFUeXBlWyAwIF0gPT09ICIrIiApIHsKKwkJCQkJZGF0YVR5cGUgPSBkYXRhVHlwZS5zbGljZSggMSApIHx8ICIqIjsKKwkJCQkJKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0KCBmdW5jICk7CisKKwkJCQkvLyBPdGhlcndpc2UgYXBwZW5kCisJCQkJfSBlbHNlIHsKKwkJCQkJKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7CisJCQkJfQorCQkJfQorCQl9CisJfTsKK30KKworLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzCitmdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICkgeworCisJdmFyIGluc3BlY3RlZCA9IHt9LAorCQlzZWVraW5nVHJhbnNwb3J0ID0gKCBzdHJ1Y3R1cmUgPT09IHRyYW5zcG9ydHMgKTsKKworCWZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBlICkgeworCQl2YXIgc2VsZWN0ZWQ7CisJCWluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7CisJCWpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7CisJCQl2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApOworCQkJaWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gInN0cmluZyIgJiYKKwkJCQkhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7CisKKwkJCQlvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7CisJCQkJaW5zcGVjdCggZGF0YVR5cGVPclRyYW5zcG9ydCApOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7CisJCQkJcmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApOworCQkJfQorCQl9ICk7CisJCXJldHVybiBzZWxlY3RlZDsKKwl9CisKKwlyZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbICIqIiBdICYmIGluc3BlY3QoICIqIiApOworfQorCisvLyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBhamF4IG9wdGlvbnMKKy8vIHRoYXQgdGFrZXMgImZsYXQiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKQorLy8gRml4ZXMgIzk4ODcKK2Z1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkgeworCXZhciBrZXksIGRlZXAsCisJCWZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTsKKworCWZvciAoIGtleSBpbiBzcmMgKSB7CisJCWlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkgeworCQkJKCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTsKKwkJfQorCX0KKwlpZiAoIGRlZXAgKSB7CisJCWpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApOworCX0KKworCXJldHVybiB0YXJnZXQ7Cit9CisKKy8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDoKKyAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpCisgKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKKyAqLworZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHsKKworCXZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSwKKwkJY29udGVudHMgPSBzLmNvbnRlbnRzLAorCQlkYXRhVHlwZXMgPSBzLmRhdGFUeXBlczsKKworCS8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzCisJd2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gIioiICkgeworCQlkYXRhVHlwZXMuc2hpZnQoKTsKKwkJaWYgKCBjdCA9PT0gdW5kZWZpbmVkICkgeworCQkJY3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiQ29udGVudC1UeXBlIiApOworCQl9CisJfQorCisJLy8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlCisJaWYgKCBjdCApIHsKKwkJZm9yICggdHlwZSBpbiBjb250ZW50cyApIHsKKwkJCWlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7CisJCQkJZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCS8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZQorCWlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkgeworCQlmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07CisJfSBlbHNlIHsKKworCQkvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzCisJCWZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkgeworCQkJaWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgIiAiICsgZGF0YVR5cGVzWyAwIF0gXSApIHsKKwkJCQlmaW5hbERhdGFUeXBlID0gdHlwZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICggIWZpcnN0RGF0YVR5cGUgKSB7CisJCQkJZmlyc3REYXRhVHlwZSA9IHR5cGU7CisJCQl9CisJCX0KKworCQkvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmUKKwkJZmluYWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTsKKwl9CisKKwkvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlCisJLy8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlzdCBpZiBuZWVkZWQKKwkvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlCisJaWYgKCBmaW5hbERhdGFUeXBlICkgeworCQlpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkgeworCQkJZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTsKKwkJfQorCQlyZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07CisJfQorfQorCisvKiBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlCisgKiBBbHNvIHNldHMgdGhlIHJlc3BvbnNlWFhYIGZpZWxkcyBvbiB0aGUganFYSFIgaW5zdGFuY2UKKyAqLworZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICkgeworCXZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LAorCQljb252ZXJ0ZXJzID0ge30sCisKKwkJLy8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvbgorCQlkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpOworCisJLy8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzCisJaWYgKCBkYXRhVHlwZXNbIDEgXSApIHsKKwkJZm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7CisJCQljb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdOworCQl9CisJfQorCisJY3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpOworCisJLy8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGUKKwl3aGlsZSAoIGN1cnJlbnQgKSB7CisKKwkJaWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7CisJCQlqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTsKKwkJfQorCisJCS8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkCisJCWlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHsKKwkJCXJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApOworCQl9CisKKwkJcHJldiA9IGN1cnJlbnQ7CisJCWN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTsKKworCQlpZiAoIGN1cnJlbnQgKSB7CisKKwkJCS8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG8KKwkJCWlmICggY3VycmVudCA9PT0gIioiICkgeworCisJCQkJY3VycmVudCA9IHByZXY7CisKKwkJCS8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJldiBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnQKKwkJCX0gZWxzZSBpZiAoIHByZXYgIT09ICIqIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkgeworCisJCQkJLy8gU2VlayBhIGRpcmVjdCBjb252ZXJ0ZXIKKwkJCQljb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyAiKiAiICsgY3VycmVudCBdOworCisJCQkJLy8gSWYgbm9uZSBmb3VuZCwgc2VlayBhIHBhaXIKKwkJCQlpZiAoICFjb252ICkgeworCQkJCQlmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkgeworCisJCQkJCQkvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnQKKwkJCQkJCXRtcCA9IGNvbnYyLnNwbGl0KCAiICIgKTsKKwkJCQkJCWlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7CisKKwkJCQkJCQkvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXQKKwkJCQkJCQljb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIHRtcFsgMCBdIF0gfHwKKwkJCQkJCQkJY29udmVydGVyc1sgIiogIiArIHRtcFsgMCBdIF07CisJCQkJCQkJaWYgKCBjb252ICkgeworCisJCQkJCQkJCS8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnMKKwkJCQkJCQkJaWYgKCBjb252ID09PSB0cnVlICkgeworCQkJCQkJCQkJY29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07CisKKwkJCQkJCQkJLy8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZQorCQkJCQkJCQl9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkgeworCQkJCQkJCQkJY3VycmVudCA9IHRtcFsgMCBdOworCQkJCQkJCQkJZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7CisJCQkJCQkJCX0KKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCisJCQkJLy8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpCisJCQkJaWYgKCBjb252ICE9PSB0cnVlICkgeworCisJCQkJCS8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW0KKwkJCQkJaWYgKCBjb252ICYmIHMudGhyb3dzICkgeworCQkJCQkJcmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApOworCQkJCQl9IGVsc2UgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQlyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7CisJCQkJCQl9IGNhdGNoICggZSApIHsKKwkJCQkJCQlyZXR1cm4geworCQkJCQkJCQlzdGF0ZTogInBhcnNlcmVycm9yIiwKKwkJCQkJCQkJZXJyb3I6IGNvbnYgPyBlIDogIk5vIGNvbnZlcnNpb24gZnJvbSAiICsgcHJldiArICIgdG8gIiArIGN1cnJlbnQKKwkJCQkJCQl9OworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHsgc3RhdGU6ICJzdWNjZXNzIiwgZGF0YTogcmVzcG9uc2UgfTsKK30KKworalF1ZXJ5LmV4dGVuZCggeworCisJLy8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzCisJYWN0aXZlOiAwLAorCisJLy8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdAorCWxhc3RNb2RpZmllZDoge30sCisJZXRhZzoge30sCisKKwlhamF4U2V0dGluZ3M6IHsKKwkJdXJsOiBsb2NhdGlvbi5ocmVmLAorCQl0eXBlOiAiR0VUIiwKKwkJaXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSwKKwkJZ2xvYmFsOiB0cnVlLAorCQlwcm9jZXNzRGF0YTogdHJ1ZSwKKwkJYXN5bmM6IHRydWUsCisJCWNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IiwKKworCQkvKgorCQl0aW1lb3V0OiAwLAorCQlkYXRhOiBudWxsLAorCQlkYXRhVHlwZTogbnVsbCwKKwkJdXNlcm5hbWU6IG51bGwsCisJCXBhc3N3b3JkOiBudWxsLAorCQljYWNoZTogbnVsbCwKKwkJdGhyb3dzOiBmYWxzZSwKKwkJdHJhZGl0aW9uYWw6IGZhbHNlLAorCQloZWFkZXJzOiB7fSwKKwkJKi8KKworCQlhY2NlcHRzOiB7CisJCQkiKiI6IGFsbFR5cGVzLAorCQkJdGV4dDogInRleHQvcGxhaW4iLAorCQkJaHRtbDogInRleHQvaHRtbCIsCisJCQl4bWw6ICJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIiwKKwkJCWpzb246ICJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiCisJCX0sCisKKwkJY29udGVudHM6IHsKKwkJCXhtbDogL1xieG1sXGIvLAorCQkJaHRtbDogL1xiaHRtbC8sCisJCQlqc29uOiAvXGJqc29uXGIvCisJCX0sCisKKwkJcmVzcG9uc2VGaWVsZHM6IHsKKwkJCXhtbDogInJlc3BvbnNlWE1MIiwKKwkJCXRleHQ6ICJyZXNwb25zZVRleHQiLAorCQkJanNvbjogInJlc3BvbnNlSlNPTiIKKwkJfSwKKworCQkvLyBEYXRhIGNvbnZlcnRlcnMKKwkJLy8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsICIqIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2UKKwkJY29udmVydGVyczogeworCisJCQkvLyBDb252ZXJ0IGFueXRoaW5nIHRvIHRleHQKKwkJCSIqIHRleHQiOiBTdHJpbmcsCisKKwkJCS8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKQorCQkJInRleHQgaHRtbCI6IHRydWUsCisKKwkJCS8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb24KKwkJCSJ0ZXh0IGpzb24iOiBKU09OLnBhcnNlLAorCisJCQkvLyBQYXJzZSB0ZXh0IGFzIHhtbAorCQkJInRleHQgeG1sIjogalF1ZXJ5LnBhcnNlWE1MCisJCX0sCisKKwkJLy8gRm9yIG9wdGlvbnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDoKKwkJLy8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZgorCQkvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZQorCQkvLyBkZWVwIGV4dGVuZGVkIChzZWUgYWpheEV4dGVuZCkKKwkJZmxhdE9wdGlvbnM6IHsKKwkJCXVybDogdHJ1ZSwKKwkJCWNvbnRleHQ6IHRydWUKKwkJfQorCX0sCisKKwkvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldAorCS8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy4KKwkvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLgorCWFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7CisJCXJldHVybiBzZXR0aW5ncyA/CisKKwkJCS8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0CisJCQlhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6CisKKwkJCS8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3MKKwkJCWFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApOworCX0sCisKKwlhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSwKKwlhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSwKKworCS8vIE1haW4gbWV0aG9kCisJYWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHsKKworCQkvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZQorCQlpZiAoIHR5cGVvZiB1cmwgPT09ICJvYmplY3QiICkgeworCQkJb3B0aW9ucyA9IHVybDsKKwkJCXVybCA9IHVuZGVmaW5lZDsKKwkJfQorCisJCS8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0CisJCW9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworCisJCXZhciB0cmFuc3BvcnQsCisKKwkJCS8vIFVSTCB3aXRob3V0IGFudGktY2FjaGUgcGFyYW0KKwkJCWNhY2hlVVJMLAorCisJCQkvLyBSZXNwb25zZSBoZWFkZXJzCisJCQlyZXNwb25zZUhlYWRlcnNTdHJpbmcsCisJCQlyZXNwb25zZUhlYWRlcnMsCisKKwkJCS8vIHRpbWVvdXQgaGFuZGxlCisJCQl0aW1lb3V0VGltZXIsCisKKwkJCS8vIFVybCBjbGVhbnVwIHZhcgorCQkJdXJsQW5jaG9yLAorCisJCQkvLyBSZXF1ZXN0IHN0YXRlIChiZWNvbWVzIGZhbHNlIHVwb24gc2VuZCBhbmQgdHJ1ZSB1cG9uIGNvbXBsZXRpb24pCisJCQljb21wbGV0ZWQsCisKKwkJCS8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZAorCQkJZmlyZUdsb2JhbHMsCisKKwkJCS8vIExvb3AgdmFyaWFibGUKKwkJCWksCisKKwkJCS8vIHVuY2FjaGVkIHBhcnQgb2YgdGhlIHVybAorCQkJdW5jYWNoZWQsCisKKwkJCS8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3QKKwkJCXMgPSBqUXVlcnkuYWpheFNldHVwKCB7fSwgb3B0aW9ucyApLAorCisJCQkvLyBDYWxsYmFja3MgY29udGV4dAorCQkJY2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsCisKKwkJCS8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMgaXMgY2FsbGJhY2tDb250ZXh0IGlmIGl0IGlzIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IGNvbGxlY3Rpb24KKwkJCWdsb2JhbEV2ZW50Q29udGV4dCA9IHMuY29udGV4dCAmJgorCQkJCSggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/CisJCQkJCWpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOgorCQkJCQlqUXVlcnkuZXZlbnQsCisKKwkJCS8vIERlZmVycmVkcworCQkJZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSwKKwkJCWNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICksCisKKwkJCS8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCisJCQlzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LAorCisJCQkvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKQorCQkJcmVxdWVzdEhlYWRlcnMgPSB7fSwKKwkJCXJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSwKKworCQkJLy8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlCisJCQlzdHJBYm9ydCA9ICJjYW5jZWxlZCIsCisKKwkJCS8vIEZha2UgeGhyCisJCQlqcVhIUiA9IHsKKwkJCQlyZWFkeVN0YXRlOiAwLAorCisJCQkJLy8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZAorCQkJCWdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkgeworCQkJCQl2YXIgbWF0Y2g7CisJCQkJCWlmICggY29tcGxldGVkICkgeworCQkJCQkJaWYgKCAhcmVzcG9uc2VIZWFkZXJzICkgeworCQkJCQkJCXJlc3BvbnNlSGVhZGVycyA9IHt9OworCQkJCQkJCXdoaWxlICggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7CisJCQkJCQkJCXJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpIF0gPSBtYXRjaFsgMiBdOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJCW1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSBdOworCQkJCQl9CisJCQkJCXJldHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoOworCQkJCX0sCisKKwkJCQkvLyBSYXcgc3RyaW5nCisJCQkJZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHsKKwkJCQkJcmV0dXJuIGNvbXBsZXRlZCA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7CisJCQkJfSwKKworCQkJCS8vIENhY2hlcyB0aGUgaGVhZGVyCisJCQkJc2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgeworCQkJCQlpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkgeworCQkJCQkJbmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdID0KKwkJCQkJCQlyZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBuYW1lOworCQkJCQkJcmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlOworCQkJCQl9CisJCQkJCXJldHVybiB0aGlzOworCQkJCX0sCisKKwkJCQkvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlcgorCQkJCW92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkgeworCQkJCQlpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkgeworCQkJCQkJcy5taW1lVHlwZSA9IHR5cGU7CisJCQkJCX0KKwkJCQkJcmV0dXJuIHRoaXM7CisJCQkJfSwKKworCQkJCS8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCisJCQkJc3RhdHVzQ29kZTogZnVuY3Rpb24oIG1hcCApIHsKKwkJCQkJdmFyIGNvZGU7CisJCQkJCWlmICggbWFwICkgeworCQkJCQkJaWYgKCBjb21wbGV0ZWQgKSB7CisKKwkJCQkJCQkvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3MKKwkJCQkJCQlqcVhIUi5hbHdheXMoIG1hcFsganFYSFIuc3RhdHVzIF0gKTsKKwkJCQkJCX0gZWxzZSB7CisKKwkJCQkJCQkvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxiYWNrcyBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lcworCQkJCQkJCWZvciAoIGNvZGUgaW4gbWFwICkgeworCQkJCQkJCQlzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0gXTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJcmV0dXJuIHRoaXM7CisJCQkJfSwKKworCQkJCS8vIENhbmNlbCB0aGUgcmVxdWVzdAorCQkJCWFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHsKKwkJCQkJdmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7CisJCQkJCWlmICggdHJhbnNwb3J0ICkgeworCQkJCQkJdHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTsKKwkJCQkJfQorCQkJCQlkb25lKCAwLCBmaW5hbFRleHQgKTsKKwkJCQkJcmV0dXJuIHRoaXM7CisJCQkJfQorCQkJfTsKKworCQkvLyBBdHRhY2ggZGVmZXJyZWRzCisJCWRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7CisKKwkJLy8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpCisJCS8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAoIzEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpCisJCS8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZQorCQlzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgbG9jYXRpb24uaHJlZiApICsgIiIgKQorCQkJLnJlcGxhY2UoIHJwcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wgKyAiLy8iICk7CisKKwkJLy8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgIzEyMDA0CisJCXMudHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7CisKKwkJLy8gRXh0cmFjdCBkYXRhVHlwZXMgbGlzdAorCQlzLmRhdGFUeXBlcyA9ICggcy5kYXRhVHlwZSB8fCAiKiIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyAiIiBdOworCisJCS8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB0aGUgb3JpZ2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgb3JpZ2luLgorCQlpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHsKKwkJCXVybEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJhIiApOworCisJCQkvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSwgRWRnZSAxMiAtIDE1CisJCQkvLyBJRSB0aHJvd3MgZXhjZXB0aW9uIG9uIGFjY2Vzc2luZyB0aGUgaHJlZiBwcm9wZXJ0eSBpZiB1cmwgaXMgbWFsZm9ybWVkLAorCQkJLy8gZS5nLiBodHRwOi8vZXhhbXBsZS5jb206ODB4LworCQkJdHJ5IHsKKwkJCQl1cmxBbmNob3IuaHJlZiA9IHMudXJsOworCisJCQkJLy8gU3VwcG9ydDogSUUgPD04IC0gMTEgb25seQorCQkJCS8vIEFuY2hvcidzIGhvc3QgcHJvcGVydHkgaXNuJ3QgY29ycmVjdGx5IHNldCB3aGVuIHMudXJsIGlzIHJlbGF0aXZlCisJCQkJdXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjsKKwkJCQlzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5jaG9yLnByb3RvY29sICsgIi8vIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PQorCQkJCQl1cmxBbmNob3IucHJvdG9jb2wgKyAiLy8iICsgdXJsQW5jaG9yLmhvc3Q7CisJCQl9IGNhdGNoICggZSApIHsKKworCQkJCS8vIElmIHRoZXJlIGlzIGFuIGVycm9yIHBhcnNpbmcgdGhlIFVSTCwgYXNzdW1lIGl0IGlzIGNyb3NzRG9tYWluLAorCQkJCS8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWQKKwkJCQlzLmNyb3NzRG9tYWluID0gdHJ1ZTsKKwkJCX0KKwkJfQorCisJCS8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZworCQlpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09ICJzdHJpbmciICkgeworCQkJcy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTsKKwkJfQorCisJCS8vIEFwcGx5IHByZWZpbHRlcnMKKwkJaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7CisKKwkJLy8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmUKKwkJaWYgKCBjb21wbGV0ZWQgKSB7CisJCQlyZXR1cm4ganFYSFI7CisJCX0KKworCQkvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0bworCQkvLyBEb24ndCBmaXJlIGV2ZW50cyBpZiBqUXVlcnkuZXZlbnQgaXMgdW5kZWZpbmVkIGluIGFuIEFNRC11c2FnZSBzY2VuYXJpbyAoIzE1MTE4KQorCQlmaXJlR2xvYmFscyA9IGpRdWVyeS5ldmVudCAmJiBzLmdsb2JhbDsKKworCQkvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzCisJCWlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkgeworCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RhcnQiICk7CisJCX0KKworCQkvLyBVcHBlcmNhc2UgdGhlIHR5cGUKKwkJcy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7CisKKwkJLy8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnQKKwkJcy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7CisKKwkJLy8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlCisJCS8vIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciBsYXRlciBvbgorCQkvLyBSZW1vdmUgaGFzaCB0byBzaW1wbGlmeSB1cmwgbWFuaXB1bGF0aW9uCisJCWNhY2hlVVJMID0gcy51cmwucmVwbGFjZSggcmhhc2gsICIiICk7CisKKwkJLy8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnQKKwkJaWYgKCAhcy5oYXNDb250ZW50ICkgeworCisJCQkvLyBSZW1lbWJlciB0aGUgaGFzaCBzbyB3ZSBjYW4gcHV0IGl0IGJhY2sKKwkJCXVuY2FjaGVkID0gcy51cmwuc2xpY2UoIGNhY2hlVVJMLmxlbmd0aCApOworCisJCQkvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCwgYXBwZW5kIGRhdGEgdG8gdXJsCisJCQlpZiAoIHMuZGF0YSAmJiAoIHMucHJvY2Vzc0RhdGEgfHwgdHlwZW9mIHMuZGF0YSA9PT0gInN0cmluZyIgKSApIHsKKwkJCQljYWNoZVVSTCArPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gIiYiIDogIj8iICkgKyBzLmRhdGE7CisKKwkJCQkvLyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5CisJCQkJZGVsZXRlIHMuZGF0YTsKKwkJCX0KKworCQkJLy8gQWRkIG9yIHVwZGF0ZSBhbnRpLWNhY2hlIHBhcmFtIGlmIG5lZWRlZAorCQkJaWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHsKKwkJCQljYWNoZVVSTCA9IGNhY2hlVVJMLnJlcGxhY2UoIHJhbnRpQ2FjaGUsICIkMSIgKTsKKwkJCQl1bmNhY2hlZCA9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyAiJiIgOiAiPyIgKSArICJfPSIgKyAoIG5vbmNlKysgKSArIHVuY2FjaGVkOworCQkJfQorCisJCQkvLyBQdXQgaGFzaCBhbmQgYW50aS1jYWNoZSBvbiB0aGUgVVJMIHRoYXQgd2lsbCBiZSByZXF1ZXN0ZWQgKGdoLTE3MzIpCisJCQlzLnVybCA9IGNhY2hlVVJMICsgdW5jYWNoZWQ7CisKKwkJLy8gQ2hhbmdlICclMjAnIHRvICcrJyBpZiB0aGlzIGlzIGVuY29kZWQgZm9ybSBib2R5IGNvbnRlbnQgKGdoLTI2NTgpCisJCX0gZWxzZSBpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmCisJCQkoIHMuY29udGVudFR5cGUgfHwgIiIgKS5pbmRleE9mKCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiApID09PSAwICkgeworCQkJcy5kYXRhID0gcy5kYXRhLnJlcGxhY2UoIHIyMCwgIisiICk7CisJCX0KKworCQkvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgorCQlpZiAoIHMuaWZNb2RpZmllZCApIHsKKwkJCWlmICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApIHsKKwkJCQlqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTW9kaWZpZWQtU2luY2UiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICk7CisJCQl9CisJCQlpZiAoIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICkgeworCQkJCWpxWEhSLnNldFJlcXVlc3RIZWFkZXIoICJJZi1Ob25lLU1hdGNoIiwgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTsKKwkJCX0KKwkJfQorCisJCS8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudAorCQlpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHsKKwkJCWpxWEhSLnNldFJlcXVlc3RIZWFkZXIoICJDb250ZW50LVR5cGUiLCBzLmNvbnRlbnRUeXBlICk7CisJCX0KKworCQkvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlCisJCWpxWEhSLnNldFJlcXVlc3RIZWFkZXIoCisJCQkiQWNjZXB0IiwKKwkJCXMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gPworCQkJCXMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdICsKKwkJCQkJKCBzLmRhdGFUeXBlc1sgMCBdICE9PSAiKiIgPyAiLCAiICsgYWxsVHlwZXMgKyAiOyBxPTAuMDEiIDogIiIgKSA6CisJCQkJcy5hY2NlcHRzWyAiKiIgXQorCQkpOworCisJCS8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvbgorCQlmb3IgKCBpIGluIHMuaGVhZGVycyApIHsKKwkJCWpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGksIHMuaGVhZGVyc1sgaSBdICk7CisJCX0KKworCQkvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0CisJCWlmICggcy5iZWZvcmVTZW5kICYmCisJCQkoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IGNvbXBsZXRlZCApICkgeworCisJCQkvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJlYWR5IGFuZCByZXR1cm4KKwkJCXJldHVybiBqcVhIUi5hYm9ydCgpOworCQl9CisKKwkJLy8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uCisJCXN0ckFib3J0ID0gImFib3J0IjsKKworCQkvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHMKKwkJY29tcGxldGVEZWZlcnJlZC5hZGQoIHMuY29tcGxldGUgKTsKKwkJanFYSFIuZG9uZSggcy5zdWNjZXNzICk7CisJCWpxWEhSLmZhaWwoIHMuZXJyb3IgKTsKKworCQkvLyBHZXQgdHJhbnNwb3J0CisJCXRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApOworCisJCS8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydAorCQlpZiAoICF0cmFuc3BvcnQgKSB7CisJCQlkb25lKCAtMSwgIk5vIFRyYW5zcG9ydCIgKTsKKwkJfSBlbHNlIHsKKwkJCWpxWEhSLnJlYWR5U3RhdGUgPSAxOworCisJCQkvLyBTZW5kIGdsb2JhbCBldmVudAorCQkJaWYgKCBmaXJlR2xvYmFscyApIHsKKwkJCQlnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggImFqYXhTZW5kIiwgWyBqcVhIUiwgcyBdICk7CisJCQl9CisKKwkJCS8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlCisJCQlpZiAoIGNvbXBsZXRlZCApIHsKKwkJCQlyZXR1cm4ganFYSFI7CisJCQl9CisKKwkJCS8vIFRpbWVvdXQKKwkJCWlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkgeworCQkJCXRpbWVvdXRUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKKwkJCQkJanFYSFIuYWJvcnQoICJ0aW1lb3V0IiApOworCQkJCX0sIHMudGltZW91dCApOworCQkJfQorCisJCQl0cnkgeworCQkJCWNvbXBsZXRlZCA9IGZhbHNlOworCQkJCXRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApOworCQkJfSBjYXRjaCAoIGUgKSB7CisKKwkJCQkvLyBSZXRocm93IHBvc3QtY29tcGxldGlvbiBleGNlcHRpb25zCisJCQkJaWYgKCBjb21wbGV0ZWQgKSB7CisJCQkJCXRocm93IGU7CisJCQkJfQorCisJCQkJLy8gUHJvcGFnYXRlIG90aGVycyBhcyByZXN1bHRzCisJCQkJZG9uZSggLTEsIGUgKTsKKwkJCX0KKwkJfQorCisJCS8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZQorCQlmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHsKKwkJCXZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsCisJCQkJc3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1RleHQ7CisKKwkJCS8vIElnbm9yZSByZXBlYXQgaW52b2NhdGlvbnMKKwkJCWlmICggY29tcGxldGVkICkgeworCQkJCXJldHVybjsKKwkJCX0KKworCQkJY29tcGxldGVkID0gdHJ1ZTsKKworCQkJLy8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHMKKwkJCWlmICggdGltZW91dFRpbWVyICkgeworCQkJCXdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApOworCQkJfQorCisJCQkvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvbgorCQkJLy8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZCkKKwkJCXRyYW5zcG9ydCA9IHVuZGVmaW5lZDsKKworCQkJLy8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVycworCQkJcmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCAiIjsKKworCQkJLy8gU2V0IHJlYWR5U3RhdGUKKwkJCWpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7CisKKwkJCS8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsCisJCQlpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDsKKworCQkJLy8gR2V0IHJlc3BvbnNlIGRhdGEKKwkJCWlmICggcmVzcG9uc2VzICkgeworCQkJCXJlc3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApOworCQkJfQorCisJCQkvLyBDb252ZXJ0IG5vIG1hdHRlciB3aGF0ICh0aGF0IHdheSByZXNwb25zZVhYWCBmaWVsZHMgYXJlIGFsd2F5cyBzZXQpCisJCQlyZXNwb25zZSA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApOworCisJCQkvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZworCQkJaWYgKCBpc1N1Y2Nlc3MgKSB7CisKKwkJCQkvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgorCQkJCWlmICggcy5pZk1vZGlmaWVkICkgeworCQkJCQltb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiTGFzdC1Nb2RpZmllZCIgKTsKKwkJCQkJaWYgKCBtb2RpZmllZCApIHsKKwkJCQkJCWpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDsKKwkJCQkJfQorCQkJCQltb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiZXRhZyIgKTsKKwkJCQkJaWYgKCBtb2RpZmllZCApIHsKKwkJCQkJCWpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7CisJCQkJCX0KKwkJCQl9CisKKwkJCQkvLyBpZiBubyBjb250ZW50CisJCQkJaWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09ICJIRUFEIiApIHsKKwkJCQkJc3RhdHVzVGV4dCA9ICJub2NvbnRlbnQiOworCisJCQkJLy8gaWYgbm90IG1vZGlmaWVkCisJCQkJfSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7CisJCQkJCXN0YXR1c1RleHQgPSAibm90bW9kaWZpZWQiOworCisJCQkJLy8gSWYgd2UgaGF2ZSBkYXRhLCBsZXQncyBjb252ZXJ0IGl0CisJCQkJfSBlbHNlIHsKKwkJCQkJc3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXRlOworCQkJCQlzdWNjZXNzID0gcmVzcG9uc2UuZGF0YTsKKwkJCQkJZXJyb3IgPSByZXNwb25zZS5lcnJvcjsKKwkJCQkJaXNTdWNjZXNzID0gIWVycm9yOworCQkJCX0KKwkJCX0gZWxzZSB7CisKKwkJCQkvLyBFeHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dCBhbmQgbm9ybWFsaXplIGZvciBub24tYWJvcnRzCisJCQkJZXJyb3IgPSBzdGF0dXNUZXh0OworCQkJCWlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkgeworCQkJCQlzdGF0dXNUZXh0ID0gImVycm9yIjsKKwkJCQkJaWYgKCBzdGF0dXMgPCAwICkgeworCQkJCQkJc3RhdHVzID0gMDsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJLy8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3QKKwkJCWpxWEhSLnN0YXR1cyA9IHN0YXR1czsKKwkJCWpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgIiI7CisKKwkJCS8vIFN1Y2Nlc3MvRXJyb3IKKwkJCWlmICggaXNTdWNjZXNzICkgeworCQkJCWRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApOworCQkJfSBlbHNlIHsKKwkJCQlkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTsKKwkJCX0KKworCQkJLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKKwkJCWpxWEhSLnN0YXR1c0NvZGUoIHN0YXR1c0NvZGUgKTsKKwkJCXN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7CisKKwkJCWlmICggZmlyZUdsb2JhbHMgKSB7CisJCQkJZ2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIGlzU3VjY2VzcyA/ICJhamF4U3VjY2VzcyIgOiAiYWpheEVycm9yIiwKKwkJCQkJWyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTsKKwkJCX0KKworCQkJLy8gQ29tcGxldGUKKwkJCWNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7CisKKwkJCWlmICggZmlyZUdsb2JhbHMgKSB7CisJCQkJZ2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoICJhamF4Q29tcGxldGUiLCBbIGpxWEhSLCBzIF0gKTsKKworCQkJCS8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlcgorCQkJCWlmICggISggLS1qUXVlcnkuYWN0aXZlICkgKSB7CisJCQkJCWpRdWVyeS5ldmVudC50cmlnZ2VyKCAiYWpheFN0b3AiICk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJcmV0dXJuIGpxWEhSOworCX0sCisKKwlnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHsKKwkJcmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssICJqc29uIiApOworCX0sCisKKwlnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkgeworCQlyZXR1cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNrLCAic2NyaXB0IiApOworCX0KK30gKTsKKworalF1ZXJ5LmVhY2goIFsgImdldCIsICJwb3N0IiBdLCBmdW5jdGlvbiggaSwgbWV0aG9kICkgeworCWpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHsKKworCQkvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZAorCQlpZiAoIGlzRnVuY3Rpb24oIGRhdGEgKSApIHsKKwkJCXR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrOworCQkJY2FsbGJhY2sgPSBkYXRhOworCQkJZGF0YSA9IHVuZGVmaW5lZDsKKwkJfQorCisJCS8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKQorCQlyZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHsKKwkJCXVybDogdXJsLAorCQkJdHlwZTogbWV0aG9kLAorCQkJZGF0YVR5cGU6IHR5cGUsCisJCQlkYXRhOiBkYXRhLAorCQkJc3VjY2VzczogY2FsbGJhY2sKKwkJfSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7CisJfTsKK30gKTsKKworCitqUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsICkgeworCXJldHVybiBqUXVlcnkuYWpheCggeworCQl1cmw6IHVybCwKKworCQkvLyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKCMxMTI2NCkKKwkJdHlwZTogIkdFVCIsCisJCWRhdGFUeXBlOiAic2NyaXB0IiwKKwkJY2FjaGU6IHRydWUsCisJCWFzeW5jOiBmYWxzZSwKKwkJZ2xvYmFsOiBmYWxzZSwKKwkJInRocm93cyI6IHRydWUKKwl9ICk7Cit9OworCisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKwl3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHsKKwkJdmFyIHdyYXA7CisKKwkJaWYgKCB0aGlzWyAwIF0gKSB7CisJCQlpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHsKKwkJCQlodG1sID0gaHRtbC5jYWxsKCB0aGlzWyAwIF0gKTsKKwkJCX0KKworCQkJLy8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmQKKwkJCXdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApOworCisJCQlpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgeworCQkJCXdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWyAwIF0gKTsKKwkJCX0KKworCQkJd3JhcC5tYXAoIGZ1bmN0aW9uKCkgeworCQkJCXZhciBlbGVtID0gdGhpczsKKworCQkJCXdoaWxlICggZWxlbS5maXJzdEVsZW1lbnRDaGlsZCApIHsKKwkJCQkJZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7CisJCQkJfQorCisJCQkJcmV0dXJuIGVsZW07CisJCQl9ICkuYXBwZW5kKCB0aGlzICk7CisJCX0KKworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJd3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHsKKwkJaWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7CisJCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHsKKwkJCQlqUXVlcnkoIHRoaXMgKS53cmFwSW5uZXIoIGh0bWwuY2FsbCggdGhpcywgaSApICk7CisJCQl9ICk7CisJCX0KKworCQlyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKwkJCXZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksCisJCQkJY29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7CisKKwkJCWlmICggY29udGVudHMubGVuZ3RoICkgeworCQkJCWNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTsKKworCQkJfSBlbHNlIHsKKwkJCQlzZWxmLmFwcGVuZCggaHRtbCApOworCQkJfQorCQl9ICk7CisJfSwKKworCXdyYXA6IGZ1bmN0aW9uKCBodG1sICkgeworCQl2YXIgaHRtbElzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCBodG1sICk7CisKKwkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7CisJCQlqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBodG1sSXNGdW5jdGlvbiA/IGh0bWwuY2FsbCggdGhpcywgaSApIDogaHRtbCApOworCQl9ICk7CisJfSwKKworCXVud3JhcDogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworCQl0aGlzLnBhcmVudCggc2VsZWN0b3IgKS5ub3QoICJib2R5IiApLmVhY2goIGZ1bmN0aW9uKCkgeworCQkJalF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApOworCQl9ICk7CisJCXJldHVybiB0aGlzOworCX0KK30gKTsKKworCitqUXVlcnkuZXhwci5wc2V1ZG9zLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkgeworCXJldHVybiAhalF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlKCBlbGVtICk7Cit9OworalF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7CisJcmV0dXJuICEhKCBlbGVtLm9mZnNldFdpZHRoIHx8IGVsZW0ub2Zmc2V0SGVpZ2h0IHx8IGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKTsKK307CisKKworCisKK2pRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gZnVuY3Rpb24oKSB7CisJdHJ5IHsKKwkJcmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTsKKwl9IGNhdGNoICggZSApIHt9Cit9OworCit2YXIgeGhyU3VjY2Vzc1N0YXR1cyA9IHsKKworCQkvLyBGaWxlIHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIGNvZGUgMCwgYXNzdW1lIDIwMAorCQkwOiAyMDAsCisKKwkJLy8gU3VwcG9ydDogSUUgPD05IG9ubHkKKwkJLy8gIzE0NTA6IHNvbWV0aW1lcyBJRSByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0CisJCTEyMjM6IDIwNAorCX0sCisJeGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTsKKworc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCAid2l0aENyZWRlbnRpYWxzIiBpbiB4aHJTdXBwb3J0ZWQgKTsKK3N1cHBvcnQuYWpheCA9IHhoclN1cHBvcnRlZCA9ICEheGhyU3VwcG9ydGVkOworCitqUXVlcnkuYWpheFRyYW5zcG9ydCggZnVuY3Rpb24oIG9wdGlvbnMgKSB7CisJdmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrOworCisJLy8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdAorCWlmICggc3VwcG9ydC5jb3JzIHx8IHhoclN1cHBvcnRlZCAmJiAhb3B0aW9ucy5jcm9zc0RvbWFpbiApIHsKKwkJcmV0dXJuIHsKKwkJCXNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHsKKwkJCQl2YXIgaSwKKwkJCQkJeGhyID0gb3B0aW9ucy54aHIoKTsKKworCQkJCXhoci5vcGVuKAorCQkJCQlvcHRpb25zLnR5cGUsCisJCQkJCW9wdGlvbnMudXJsLAorCQkJCQlvcHRpb25zLmFzeW5jLAorCQkJCQlvcHRpb25zLnVzZXJuYW1lLAorCQkJCQlvcHRpb25zLnBhc3N3b3JkCisJCQkJKTsKKworCQkJCS8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWQKKwkJCQlpZiAoIG9wdGlvbnMueGhyRmllbGRzICkgeworCQkJCQlmb3IgKCBpIGluIG9wdGlvbnMueGhyRmllbGRzICkgeworCQkJCQkJeGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdOworCQkJCQl9CisJCQkJfQorCisJCQkJLy8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZAorCQkJCWlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHsKKwkJCQkJeGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTsKKwkJCQl9CisKKwkJCQkvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlcgorCQkJCS8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmUKKwkJCQkvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLgorCQkJCS8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKQorCQkJCS8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLgorCQkJCWlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbICJYLVJlcXVlc3RlZC1XaXRoIiBdICkgeworCQkJCQloZWFkZXJzWyAiWC1SZXF1ZXN0ZWQtV2l0aCIgXSA9ICJYTUxIdHRwUmVxdWVzdCI7CisJCQkJfQorCisJCQkJLy8gU2V0IGhlYWRlcnMKKwkJCQlmb3IgKCBpIGluIGhlYWRlcnMgKSB7CisJCQkJCXhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTsKKwkJCQl9CisKKwkJCQkvLyBDYWxsYmFjaworCQkJCWNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7CisJCQkJCXJldHVybiBmdW5jdGlvbigpIHsKKwkJCQkJCWlmICggY2FsbGJhY2sgKSB7CisJCQkJCQkJY2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrID0geGhyLm9ubG9hZCA9CisJCQkJCQkJCXhoci5vbmVycm9yID0geGhyLm9uYWJvcnQgPSB4aHIub250aW1lb3V0ID0KKwkJCQkJCQkJCXhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsOworCisJCQkJCQkJaWYgKCB0eXBlID09PSAiYWJvcnQiICkgeworCQkJCQkJCQl4aHIuYWJvcnQoKTsKKwkJCQkJCQl9IGVsc2UgaWYgKCB0eXBlID09PSAiZXJyb3IiICkgeworCisJCQkJCQkJCS8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5CisJCQkJCQkJCS8vIE9uIGEgbWFudWFsIG5hdGl2ZSBhYm9ydCwgSUU5IHRocm93cworCQkJCQkJCQkvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2VzcyB0aGF0IGlzIG5vdCByZWFkeVN0YXRlCisJCQkJCQkJCWlmICggdHlwZW9mIHhoci5zdGF0dXMgIT09ICJudW1iZXIiICkgeworCQkJCQkJCQkJY29tcGxldGUoIDAsICJlcnJvciIgKTsKKwkJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJCWNvbXBsZXRlKAorCisJCQkJCQkJCQkJLy8gRmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlICM4NjA1LCAjMTQyMDcKKwkJCQkJCQkJCQl4aHIuc3RhdHVzLAorCQkJCQkJCQkJCXhoci5zdGF0dXNUZXh0CisJCQkJCQkJCQkpOworCQkJCQkJCQl9CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJY29tcGxldGUoCisJCQkJCQkJCQl4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cywKKwkJCQkJCQkJCXhoci5zdGF0dXNUZXh0LAorCisJCQkJCQkJCQkvLyBTdXBwb3J0OiBJRSA8PTkgb25seQorCQkJCQkJCQkJLy8gSUU5IGhhcyBubyBYSFIyIGJ1dCB0aHJvd3Mgb24gYmluYXJ5ICh0cmFjLTExNDI2KQorCQkJCQkJCQkJLy8gRm9yIFhIUjIgbm9uLXRleHQsIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBpdCAoZ2gtMjQ5OCkKKwkJCQkJCQkJCSggeGhyLnJlc3BvbnNlVHlwZSB8fCAidGV4dCIgKSAhPT0gInRleHQiICB8fAorCQkJCQkJCQkJdHlwZW9mIHhoci5yZXNwb25zZVRleHQgIT09ICJzdHJpbmciID8KKwkJCQkJCQkJCQl7IGJpbmFyeTogeGhyLnJlc3BvbnNlIH0gOgorCQkJCQkJCQkJCXsgdGV4dDogeGhyLnJlc3BvbnNlVGV4dCB9LAorCQkJCQkJCQkJeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpCisJCQkJCQkJCSk7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9OworCQkJCX07CisKKwkJCQkvLyBMaXN0ZW4gdG8gZXZlbnRzCisJCQkJeGhyLm9ubG9hZCA9IGNhbGxiYWNrKCk7CisJCQkJZXJyb3JDYWxsYmFjayA9IHhoci5vbmVycm9yID0geGhyLm9udGltZW91dCA9IGNhbGxiYWNrKCAiZXJyb3IiICk7CisKKwkJCQkvLyBTdXBwb3J0OiBJRSA5IG9ubHkKKwkJCQkvLyBVc2Ugb25yZWFkeXN0YXRlY2hhbmdlIHRvIHJlcGxhY2Ugb25hYm9ydAorCQkJCS8vIHRvIGhhbmRsZSB1bmNhdWdodCBhYm9ydHMKKwkJCQlpZiAoIHhoci5vbmFib3J0ICE9PSB1bmRlZmluZWQgKSB7CisJCQkJCXhoci5vbmFib3J0ID0gZXJyb3JDYWxsYmFjazsKKwkJCQl9IGVsc2UgeworCQkJCQl4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CisKKwkJCQkJCS8vIENoZWNrIHJlYWR5U3RhdGUgYmVmb3JlIHRpbWVvdXQgYXMgaXQgY2hhbmdlcworCQkJCQkJaWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHsKKworCQkJCQkJCS8vIEFsbG93IG9uZXJyb3IgdG8gYmUgY2FsbGVkIGZpcnN0LAorCQkJCQkJCS8vIGJ1dCB0aGF0IHdpbGwgbm90IGhhbmRsZSBhIG5hdGl2ZSBhYm9ydAorCQkJCQkJCS8vIEFsc28sIHNhdmUgZXJyb3JDYWxsYmFjayB0byBhIHZhcmlhYmxlCisJCQkJCQkJLy8gYXMgeGhyLm9uZXJyb3IgY2Fubm90IGJlIGFjY2Vzc2VkCisJCQkJCQkJd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgeworCQkJCQkJCQlpZiAoIGNhbGxiYWNrICkgeworCQkJCQkJCQkJZXJyb3JDYWxsYmFjaygpOworCQkJCQkJCQl9CisJCQkJCQkJfSApOworCQkJCQkJfQorCQkJCQl9OworCQkJCX0KKworCQkJCS8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2sKKwkJCQljYWxsYmFjayA9IGNhbGxiYWNrKCAiYWJvcnQiICk7CisKKwkJCQl0cnkgeworCisJCQkJCS8vIERvIHNlbmQgdGhlIHJlcXVlc3QgKHRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbikKKwkJCQkJeGhyLnNlbmQoIG9wdGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApOworCQkJCX0gY2F0Y2ggKCBlICkgeworCisJCQkJCS8vICMxNDY4MzogT25seSByZXRocm93IGlmIHRoaXMgaGFzbid0IGJlZW4gbm90aWZpZWQgYXMgYW4gZXJyb3IgeWV0CisJCQkJCWlmICggY2FsbGJhY2sgKSB7CisJCQkJCQl0aHJvdyBlOworCQkJCQl9CisJCQkJfQorCQkJfSwKKworCQkJYWJvcnQ6IGZ1bmN0aW9uKCkgeworCQkJCWlmICggY2FsbGJhY2sgKSB7CisJCQkJCWNhbGxiYWNrKCk7CisJCQkJfQorCQkJfQorCQl9OworCX0KK30gKTsKKworCisKKworLy8gUHJldmVudCBhdXRvLWV4ZWN1dGlvbiBvZiBzY3JpcHRzIHdoZW4gbm8gZXhwbGljaXQgZGF0YVR5cGUgd2FzIHByb3ZpZGVkIChTZWUgZ2gtMjQzMikKK2pRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHsKKwlpZiAoIHMuY3Jvc3NEb21haW4gKSB7CisJCXMuY29udGVudHMuc2NyaXB0ID0gZmFsc2U7CisJfQorfSApOworCisvLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZQoralF1ZXJ5LmFqYXhTZXR1cCggeworCWFjY2VwdHM6IHsKKwkJc2NyaXB0OiAidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCAiICsKKwkJCSJhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQiCisJfSwKKwljb250ZW50czogeworCQlzY3JpcHQ6IC9cYig/OmphdmF8ZWNtYSlzY3JpcHRcYi8KKwl9LAorCWNvbnZlcnRlcnM6IHsKKwkJInRleHQgc2NyaXB0IjogZnVuY3Rpb24oIHRleHQgKSB7CisJCQlqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApOworCQkJcmV0dXJuIHRleHQ7CisJCX0KKwl9Cit9ICk7CisKKy8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgY3Jvc3NEb21haW4KK2pRdWVyeS5hamF4UHJlZmlsdGVyKCAic2NyaXB0IiwgZnVuY3Rpb24oIHMgKSB7CisJaWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7CisJCXMuY2FjaGUgPSBmYWxzZTsKKwl9CisJaWYgKCBzLmNyb3NzRG9tYWluICkgeworCQlzLnR5cGUgPSAiR0VUIjsKKwl9Cit9ICk7CisKKy8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydAoralF1ZXJ5LmFqYXhUcmFuc3BvcnQoICJzY3JpcHQiLCBmdW5jdGlvbiggcyApIHsKKworCS8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHMKKwlpZiAoIHMuY3Jvc3NEb21haW4gKSB7CisJCXZhciBzY3JpcHQsIGNhbGxiYWNrOworCQlyZXR1cm4geworCQkJc2VuZDogZnVuY3Rpb24oIF8sIGNvbXBsZXRlICkgeworCQkJCXNjcmlwdCA9IGpRdWVyeSggIjxzY3JpcHQ+IiApLnByb3AoIHsKKwkJCQkJY2hhcnNldDogcy5zY3JpcHRDaGFyc2V0LAorCQkJCQlzcmM6IHMudXJsCisJCQkJfSApLm9uKAorCQkJCQkibG9hZCBlcnJvciIsCisJCQkJCWNhbGxiYWNrID0gZnVuY3Rpb24oIGV2dCApIHsKKwkJCQkJCXNjcmlwdC5yZW1vdmUoKTsKKwkJCQkJCWNhbGxiYWNrID0gbnVsbDsKKwkJCQkJCWlmICggZXZ0ICkgeworCQkJCQkJCWNvbXBsZXRlKCBldnQudHlwZSA9PT0gImVycm9yIiA/IDQwNCA6IDIwMCwgZXZ0LnR5cGUgKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCSk7CisKKwkJCQkvLyBVc2UgbmF0aXZlIERPTSBtYW5pcHVsYXRpb24gdG8gYXZvaWQgb3VyIGRvbU1hbmlwIEFKQVggdHJpY2tlcnkKKwkJCQlkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApOworCQkJfSwKKwkJCWFib3J0OiBmdW5jdGlvbigpIHsKKwkJCQlpZiAoIGNhbGxiYWNrICkgeworCQkJCQljYWxsYmFjaygpOworCQkJCX0KKwkJCX0KKwkJfTsKKwl9Cit9ICk7CisKKworCisKK3ZhciBvbGRDYWxsYmFja3MgPSBbXSwKKwlyanNvbnAgPSAvKD0pXD8oPz0mfCQpfFw/XD8vOworCisvLyBEZWZhdWx0IGpzb25wIHNldHRpbmdzCitqUXVlcnkuYWpheFNldHVwKCB7CisJanNvbnA6ICJjYWxsYmFjayIsCisJanNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7CisJCXZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBhbmRvICsgIl8iICsgKCBub25jZSsrICkgKTsKKwkJdGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7CisJCXJldHVybiBjYWxsYmFjazsKKwl9Cit9ICk7CisKKy8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0cworalF1ZXJ5LmFqYXhQcmVmaWx0ZXIoICJqc29uIGpzb25wIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkgeworCisJdmFyIGNhbGxiYWNrTmFtZSwgb3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLAorCQlqc29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkgPworCQkJInVybCIgOgorCQkJdHlwZW9mIHMuZGF0YSA9PT0gInN0cmluZyIgJiYKKwkJCQkoIHMuY29udGVudFR5cGUgfHwgIiIgKQorCQkJCQkuaW5kZXhPZiggImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIgKSA9PT0gMCAmJgorCQkJCXJqc29ucC50ZXN0KCBzLmRhdGEgKSAmJiAiZGF0YSIKKwkJKTsKKworCS8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyAianNvbnAiIG9yIHdlIGhhdmUgYSBwYXJhbWV0ZXIgdG8gc2V0CisJaWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBdID09PSAianNvbnAiICkgeworCisJCS8vIEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXQKKwkJY2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0gaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgPworCQkJcy5qc29ucENhbGxiYWNrKCkgOgorCQkJcy5qc29ucENhbGxiYWNrOworCisJCS8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGEKKwkJaWYgKCBqc29uUHJvcCApIHsKKwkJCXNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgIiQxIiArIGNhbGxiYWNrTmFtZSApOworCQl9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxzZSApIHsKKwkJCXMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyAiJiIgOiAiPyIgKSArIHMuanNvbnAgKyAiPSIgKyBjYWxsYmFja05hbWU7CisJCX0KKworCQkvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uCisJCXMuY29udmVydGVyc1sgInNjcmlwdCBqc29uIiBdID0gZnVuY3Rpb24oKSB7CisJCQlpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHsKKwkJCQlqUXVlcnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArICIgd2FzIG5vdCBjYWxsZWQiICk7CisJCQl9CisJCQlyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTsKKwkJfTsKKworCQkvLyBGb3JjZSBqc29uIGRhdGFUeXBlCisJCXMuZGF0YVR5cGVzWyAwIF0gPSAianNvbiI7CisKKwkJLy8gSW5zdGFsbCBjYWxsYmFjaworCQlvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07CisJCXdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHsKKwkJCXJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzOworCQl9OworCisJCS8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKQorCQlqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkgeworCisJCQkvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXQKKwkJCWlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHsKKwkJCQlqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApOworCisJCQkvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZQorCQkJfSBlbHNlIHsKKwkJCQl3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47CisJCQl9CisKKwkJCS8vIFNhdmUgYmFjayBhcyBmcmVlCisJCQlpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkgeworCisJCQkJLy8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kCisJCQkJcy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrOworCisJCQkJLy8gU2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZQorCQkJCW9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTsKKwkJCX0KKworCQkJLy8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlCisJCQlpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7CisJCQkJb3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTsKKwkJCX0KKworCQkJcmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5lZDsKKwkJfSApOworCisJCS8vIERlbGVnYXRlIHRvIHNjcmlwdAorCQlyZXR1cm4gInNjcmlwdCI7CisJfQorfSApOworCisKKworCisvLyBTdXBwb3J0OiBTYWZhcmkgOCBvbmx5CisvLyBJbiBTYWZhcmkgOCBkb2N1bWVudHMgY3JlYXRlZCB2aWEgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50CisvLyBjb2xsYXBzZSBzaWJsaW5nIGZvcm1zOiB0aGUgc2Vjb25kIG9uZSBiZWNvbWVzIGEgY2hpbGQgb2YgdGhlIGZpcnN0IG9uZS4KKy8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhpcyBzZWN1cml0eSBtZWFzdXJlIGhhcyB0byBiZSBkaXNhYmxlZCBpbiBTYWZhcmkgOC4KKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMzcKK3N1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ID0gKCBmdW5jdGlvbigpIHsKKwl2YXIgYm9keSA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggIiIgKS5ib2R5OworCWJvZHkuaW5uZXJIVE1MID0gIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+IjsKKwlyZXR1cm4gYm9keS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMjsKK30gKSgpOworCisKKy8vIEFyZ3VtZW50ICJkYXRhIiBzaG91bGQgYmUgc3RyaW5nIG9mIGh0bWwKKy8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCwKKy8vIGRlZmF1bHRzIHRvIGRvY3VtZW50CisvLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nCitqUXVlcnkucGFyc2VIVE1MID0gZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkgeworCWlmICggdHlwZW9mIGRhdGEgIT09ICJzdHJpbmciICkgeworCQlyZXR1cm4gW107CisJfQorCWlmICggdHlwZW9mIGNvbnRleHQgPT09ICJib29sZWFuIiApIHsKKwkJa2VlcFNjcmlwdHMgPSBjb250ZXh0OworCQljb250ZXh0ID0gZmFsc2U7CisJfQorCisJdmFyIGJhc2UsIHBhcnNlZCwgc2NyaXB0czsKKworCWlmICggIWNvbnRleHQgKSB7CisKKwkJLy8gU3RvcCBzY3JpcHRzIG9yIGlubGluZSBldmVudCBoYW5kbGVycyBmcm9tIGJlaW5nIGV4ZWN1dGVkIGltbWVkaWF0ZWx5CisJCS8vIGJ5IHVzaW5nIGRvY3VtZW50LmltcGxlbWVudGF0aW9uCisJCWlmICggc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgKSB7CisJCQljb250ZXh0ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCAiIiApOworCisJCQkvLyBTZXQgdGhlIGJhc2UgaHJlZiBmb3IgdGhlIGNyZWF0ZWQgZG9jdW1lbnQKKwkJCS8vIHNvIGFueSBwYXJzZWQgZWxlbWVudHMgd2l0aCBVUkxzCisJCQkvLyBhcmUgYmFzZWQgb24gdGhlIGRvY3VtZW50J3MgVVJMIChnaC0yOTY1KQorCQkJYmFzZSA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCggImJhc2UiICk7CisJCQliYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmOworCQkJY29udGV4dC5oZWFkLmFwcGVuZENoaWxkKCBiYXNlICk7CisJCX0gZWxzZSB7CisJCQljb250ZXh0ID0gZG9jdW1lbnQ7CisJCX0KKwl9CisKKwlwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKTsKKwlzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYmIFtdOworCisJLy8gU2luZ2xlIHRhZworCWlmICggcGFyc2VkICkgeworCQlyZXR1cm4gWyBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIHBhcnNlZFsgMSBdICkgXTsKKwl9CisKKwlwYXJzZWQgPSBidWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyApOworCisJaWYgKCBzY3JpcHRzICYmIHNjcmlwdHMubGVuZ3RoICkgeworCQlqUXVlcnkoIHNjcmlwdHMgKS5yZW1vdmUoKTsKKwl9CisKKwlyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTsKK307CisKKworLyoqCisgKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlCisgKi8KK2pRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHsKKwl2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLAorCQlzZWxmID0gdGhpcywKKwkJb2ZmID0gdXJsLmluZGV4T2YoICIgIiApOworCisJaWYgKCBvZmYgPiAtMSApIHsKKwkJc2VsZWN0b3IgPSBzdHJpcEFuZENvbGxhcHNlKCB1cmwuc2xpY2UoIG9mZiApICk7CisJCXVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7CisJfQorCisJLy8gSWYgaXQncyBhIGZ1bmN0aW9uCisJaWYgKCBpc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHsKKworCQkvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFjaworCQljYWxsYmFjayA9IHBhcmFtczsKKwkJcGFyYW1zID0gdW5kZWZpbmVkOworCisJLy8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZworCX0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSAib2JqZWN0IiApIHsKKwkJdHlwZSA9ICJQT1NUIjsKKwl9CisKKwkvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdAorCWlmICggc2VsZi5sZW5ndGggPiAwICkgeworCQlqUXVlcnkuYWpheCggeworCQkJdXJsOiB1cmwsCisKKwkJCS8vIElmICJ0eXBlIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gIkdFVCIgbWV0aG9kIHdpbGwgYmUgdXNlZC4KKwkJCS8vIE1ha2UgdmFsdWUgb2YgdGhpcyBmaWVsZCBleHBsaWNpdCBzaW5jZQorCQkJLy8gdXNlciBjYW4gb3ZlcnJpZGUgaXQgdGhyb3VnaCBhamF4U2V0dXAgbWV0aG9kCisJCQl0eXBlOiB0eXBlIHx8ICJHRVQiLAorCQkJZGF0YVR5cGU6ICJodG1sIiwKKwkJCWRhdGE6IHBhcmFtcworCQl9ICkuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCApIHsKKworCQkJLy8gU2F2ZSByZXNwb25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNhbGxiYWNrCisJCQlyZXNwb25zZSA9IGFyZ3VtZW50czsKKworCQkJc2VsZi5odG1sKCBzZWxlY3RvciA/CisKKwkJCQkvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXYKKwkJCQkvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnMKKwkJCQlqUXVlcnkoICI8ZGl2PiIgKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6CisKKwkJCQkvLyBPdGhlcndpc2UgdXNlIHRoZSBmdWxsIHJlc3VsdAorCQkJCXJlc3BvbnNlVGV4dCApOworCisJCS8vIElmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLCB0aGlzIGZ1bmN0aW9uIGdldHMgImRhdGEiLCAic3RhdHVzIiwgImpxWEhSIgorCQkvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQgYWJvdmUuCisJCS8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgImpxWEhSIiwgInN0YXR1cyIsICJlcnJvciIKKwkJfSApLmFsd2F5cyggY2FsbGJhY2sgJiYgZnVuY3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7CisJCQlzZWxmLmVhY2goIGZ1bmN0aW9uKCkgeworCQkJCWNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7CisJCQl9ICk7CisJCX0gKTsKKwl9CisKKwlyZXR1cm4gdGhpczsKK307CisKKworCisKKy8vIEF0dGFjaCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzCitqUXVlcnkuZWFjaCggWworCSJhamF4U3RhcnQiLAorCSJhamF4U3RvcCIsCisJImFqYXhDb21wbGV0ZSIsCisJImFqYXhFcnJvciIsCisJImFqYXhTdWNjZXNzIiwKKwkiYWpheFNlbmQiCitdLCBmdW5jdGlvbiggaSwgdHlwZSApIHsKKwlqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBmbiApIHsKKwkJcmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7CisJfTsKK30gKTsKKworCisKKworalF1ZXJ5LmV4cHIucHNldWRvcy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkgeworCXJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkgeworCQlyZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTsKKwl9ICkubGVuZ3RoOworfTsKKworCisKKworalF1ZXJ5Lm9mZnNldCA9IHsKKwlzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkgeworCQl2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLAorCQkJcG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICksCisJCQljdXJFbGVtID0galF1ZXJ5KCBlbGVtICksCisJCQlwcm9wcyA9IHt9OworCisJCS8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW0KKwkJaWYgKCBwb3NpdGlvbiA9PT0gInN0YXRpYyIgKSB7CisJCQllbGVtLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKKwkJfQorCisJCWN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCk7CisJCWN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sICJ0b3AiICk7CisJCWN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCAibGVmdCIgKTsKKwkJY2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSAiYWJzb2x1dGUiIHx8IHBvc2l0aW9uID09PSAiZml4ZWQiICkgJiYKKwkJCSggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoICJhdXRvIiApID4gLTE7CisKKwkJLy8gTmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXIKKwkJLy8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkCisJCWlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7CisJCQljdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTsKKwkJCWN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDsKKwkJCWN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0OworCisJCX0gZWxzZSB7CisJCQljdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwOworCQkJY3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwOworCQl9CisKKwkJaWYgKCBpc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7CisKKwkJCS8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KQorCQkJb3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7CisJCX0KKworCQlpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7CisJCQlwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wOworCQl9CisJCWlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7CisJCQlwcm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDsKKwkJfQorCisJCWlmICggInVzaW5nIiBpbiBvcHRpb25zICkgeworCQkJb3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApOworCisJCX0gZWxzZSB7CisJCQljdXJFbGVtLmNzcyggcHJvcHMgKTsKKwkJfQorCX0KK307CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKworCS8vIG9mZnNldCgpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIGJvcmRlciBib3ggdG8gdGhlIGRvY3VtZW50IG9yaWdpbgorCW9mZnNldDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7CisKKwkJLy8gUHJlc2VydmUgY2hhaW5pbmcgZm9yIHNldHRlcgorCQlpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7CisJCQlyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8KKwkJCQl0aGlzIDoKKwkJCQl0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgeworCQkJCQlqUXVlcnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApOworCQkJCX0gKTsKKwkJfQorCisJCXZhciByZWN0LCB3aW4sCisJCQllbGVtID0gdGhpc1sgMCBdOworCisJCWlmICggIWVsZW0gKSB7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cyAoZ2gtMjMxMCkKKwkJLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5CisJCS8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGEKKwkJLy8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yCisJCWlmICggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7CisJCQlyZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfTsKKwkJfQorCisJCS8vIEdldCBkb2N1bWVudC1yZWxhdGl2ZSBwb3NpdGlvbiBieSBhZGRpbmcgdmlld3BvcnQgc2Nyb2xsIHRvIHZpZXdwb3J0LXJlbGF0aXZlIGdCQ1IKKwkJcmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisJCXdpbiA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldzsKKwkJcmV0dXJuIHsKKwkJCXRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQsCisJCQlsZWZ0OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXQKKwkJfTsKKwl9LAorCisJLy8gcG9zaXRpb24oKSByZWxhdGVzIGFuIGVsZW1lbnQncyBtYXJnaW4gYm94IHRvIGl0cyBvZmZzZXQgcGFyZW50J3MgcGFkZGluZyBib3gKKwkvLyBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBiZWhhdmlvciBvZiBDU1MgYWJzb2x1dGUgcG9zaXRpb25pbmcKKwlwb3NpdGlvbjogZnVuY3Rpb24oKSB7CisJCWlmICggIXRoaXNbIDAgXSApIHsKKwkJCXJldHVybjsKKwkJfQorCisJCXZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwgZG9jLAorCQkJZWxlbSA9IHRoaXNbIDAgXSwKKwkJCXBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07CisKKwkJLy8gcG9zaXRpb246Zml4ZWQgZWxlbWVudHMgYXJlIG9mZnNldCBmcm9tIHRoZSB2aWV3cG9ydCwgd2hpY2ggaXRzZWxmIGFsd2F5cyBoYXMgemVybyBvZmZzZXQKKwkJaWYgKCBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICkgPT09ICJmaXhlZCIgKSB7CisKKwkJCS8vIEFzc3VtZSBwb3NpdGlvbjpmaXhlZCBpbXBsaWVzIGF2YWlsYWJpbGl0eSBvZiBnZXRCb3VuZGluZ0NsaWVudFJlY3QKKwkJCW9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisKKwkJfSBlbHNlIHsKKwkJCW9mZnNldCA9IHRoaXMub2Zmc2V0KCk7CisKKwkJCS8vIEFjY291bnQgZm9yIHRoZSAqcmVhbCogb2Zmc2V0IHBhcmVudCwgd2hpY2ggY2FuIGJlIHRoZSBkb2N1bWVudCBvciBpdHMgcm9vdCBlbGVtZW50CisJCQkvLyB3aGVuIGEgc3RhdGljYWxseSBwb3NpdGlvbmVkIGVsZW1lbnQgaXMgaWRlbnRpZmllZAorCQkJZG9jID0gZWxlbS5vd25lckRvY3VtZW50OworCQkJb2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQgfHwgZG9jLmRvY3VtZW50RWxlbWVudDsKKwkJCXdoaWxlICggb2Zmc2V0UGFyZW50ICYmCisJCQkJKCBvZmZzZXRQYXJlbnQgPT09IGRvYy5ib2R5IHx8IG9mZnNldFBhcmVudCA9PT0gZG9jLmRvY3VtZW50RWxlbWVudCApICYmCisJCQkJalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCAicG9zaXRpb24iICkgPT09ICJzdGF0aWMiICkgeworCisJCQkJb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50LnBhcmVudE5vZGU7CisJCQl9CisJCQlpZiAoIG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQgIT09IGVsZW0gJiYgb2Zmc2V0UGFyZW50Lm5vZGVUeXBlID09PSAxICkgeworCisJCQkJLy8gSW5jb3Jwb3JhdGUgYm9yZGVycyBpbnRvIGl0cyBvZmZzZXQsIHNpbmNlIHRoZXkgYXJlIG91dHNpZGUgaXRzIGNvbnRlbnQgb3JpZ2luCisJCQkJcGFyZW50T2Zmc2V0ID0galF1ZXJ5KCBvZmZzZXRQYXJlbnQgKS5vZmZzZXQoKTsKKwkJCQlwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgImJvcmRlclRvcFdpZHRoIiwgdHJ1ZSApOworCQkJCXBhcmVudE9mZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgImJvcmRlckxlZnRXaWR0aCIsIHRydWUgKTsKKwkJCX0KKwkJfQorCisJCS8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnMKKwkJcmV0dXJuIHsKKwkJCXRvcDogb2Zmc2V0LnRvcCAtIHBhcmVudE9mZnNldC50b3AgLSBqUXVlcnkuY3NzKCBlbGVtLCAibWFyZ2luVG9wIiwgdHJ1ZSApLAorCQkJbGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sICJtYXJnaW5MZWZ0IiwgdHJ1ZSApCisJCX07CisJfSwKKworCS8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOgorCS8vIDEpIEZvciB0aGUgZWxlbWVudCBpbnNpZGUgdGhlIGlmcmFtZSB3aXRob3V0IG9mZnNldFBhcmVudCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4KKwkvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3cKKwkvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50CisJLy8gMykgRm9yIGJvZHkgb3IgaHRtbCBlbGVtZW50LCBpLmUuIGluIGNhc2Ugb2YgdGhlIGh0bWwgbm9kZSAtIGl0IHdpbGwgcmV0dXJuIGl0c2VsZgorCS8vCisJLy8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzCisJLy8gYW5kIG1pZ2h0IGJlIGNvbnNpZGVyZWQgYXMgbW9yZSBwcmVmZXJhYmxlIHJlc3VsdHMuCisJLy8KKwkvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZQorCW9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7CisJCXJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7CisJCQl2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7CisKKwkJCXdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgInBvc2l0aW9uIiApID09PSAic3RhdGljIiApIHsKKwkJCQlvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50OworCQkJfQorCisJCQlyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDsKKwkJfSApOworCX0KK30gKTsKKworLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzCitqUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiAicGFnZVhPZmZzZXQiLCBzY3JvbGxUb3A6ICJwYWdlWU9mZnNldCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHsKKwl2YXIgdG9wID0gInBhZ2VZT2Zmc2V0IiA9PT0gcHJvcDsKKworCWpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdmFsICkgeworCQlyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7CisKKwkJCS8vIENvYWxlc2NlIGRvY3VtZW50cyBhbmQgd2luZG93cworCQkJdmFyIHdpbjsKKwkJCWlmICggaXNXaW5kb3coIGVsZW0gKSApIHsKKwkJCQl3aW4gPSBlbGVtOworCQkJfSBlbHNlIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHsKKwkJCQl3aW4gPSBlbGVtLmRlZmF1bHRWaWV3OworCQkJfQorCisJCQlpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkgeworCQkJCXJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdOworCQkJfQorCisJCQlpZiAoIHdpbiApIHsKKwkJCQl3aW4uc2Nyb2xsVG8oCisJCQkJCSF0b3AgPyB2YWwgOiB3aW4ucGFnZVhPZmZzZXQsCisJCQkJCXRvcCA/IHZhbCA6IHdpbi5wYWdlWU9mZnNldAorCQkJCSk7CisKKwkJCX0gZWxzZSB7CisJCQkJZWxlbVsgbWV0aG9kIF0gPSB2YWw7CisJCQl9CisJCX0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7CisJfTsKK30gKTsKKworLy8gU3VwcG9ydDogU2FmYXJpIDw9NyAtIDkuMSwgQ2hyb21lIDw9MzcgLSA0OQorLy8gQWRkIHRoZSB0b3AvbGVmdCBjc3NIb29rcyB1c2luZyBqUXVlcnkuZm4ucG9zaXRpb24KKy8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NAorLy8gQmxpbmsgYnVnOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD01ODkzNDcKKy8vIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyBwZXJjZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQ7CisvLyByYXRoZXIgdGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1vZHVsZSwganVzdCBjaGVjayBmb3IgaXQgaGVyZQoralF1ZXJ5LmVhY2goIFsgInRvcCIsICJsZWZ0IiBdLCBmdW5jdGlvbiggaSwgcHJvcCApIHsKKwlqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5waXhlbFBvc2l0aW9uLAorCQlmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CisJCQlpZiAoIGNvbXB1dGVkICkgeworCQkJCWNvbXB1dGVkID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7CisKKwkJCQkvLyBJZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXQKKwkJCQlyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgPworCQkJCQlqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyAicHgiIDoKKwkJCQkJY29tcHV0ZWQ7CisJCQl9CisJCX0KKwkpOworfSApOworCisKKy8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kcworalF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiAiaGVpZ2h0IiwgV2lkdGg6ICJ3aWR0aCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7CisJalF1ZXJ5LmVhY2goIHsgcGFkZGluZzogImlubmVyIiArIG5hbWUsIGNvbnRlbnQ6IHR5cGUsICIiOiAib3V0ZXIiICsgbmFtZSB9LAorCQlmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHsKKworCQkvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGgKKwkJalF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7CisJCQl2YXIgY2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSAiYm9vbGVhbiIgKSwKKwkJCQlleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/ICJtYXJnaW4iIDogImJvcmRlciIgKTsKKworCQkJcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkgeworCQkJCXZhciBkb2M7CisKKwkJCQlpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7CisKKwkJCQkJLy8gJCggd2luZG93ICkub3V0ZXJXaWR0aC9IZWlnaHQgcmV0dXJuIHcvaCBpbmNsdWRpbmcgc2Nyb2xsYmFycyAoZ2gtMTcyOSkKKwkJCQkJcmV0dXJuIGZ1bmNOYW1lLmluZGV4T2YoICJvdXRlciIgKSA9PT0gMCA/CisJCQkJCQllbGVtWyAiaW5uZXIiICsgbmFtZSBdIDoKKwkJCQkJCWVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyAiY2xpZW50IiArIG5hbWUgXTsKKwkJCQl9CisKKwkJCQkvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0CisJCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkgeworCQkJCQlkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDsKKworCQkJCQkvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sCisJCQkJCS8vIHdoaWNoZXZlciBpcyBncmVhdGVzdAorCQkJCQlyZXR1cm4gTWF0aC5tYXgoCisJCQkJCQllbGVtLmJvZHlbICJzY3JvbGwiICsgbmFtZSBdLCBkb2NbICJzY3JvbGwiICsgbmFtZSBdLAorCQkJCQkJZWxlbS5ib2R5WyAib2Zmc2V0IiArIG5hbWUgXSwgZG9jWyAib2Zmc2V0IiArIG5hbWUgXSwKKwkJCQkJCWRvY1sgImNsaWVudCIgKyBuYW1lIF0KKwkJCQkJKTsKKwkJCQl9CisKKwkJCQlyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/CisKKwkJCQkJLy8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdAorCQkJCQlqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBleHRyYSApIDoKKworCQkJCQkvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50CisJCQkJCWpRdWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7CisJCQl9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSApOworCQl9OworCX0gKTsKK30gKTsKKworCitqUXVlcnkuZWFjaCggKCAiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgIiArCisJIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlICIgKworCSJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51IiApLnNwbGl0KCAiICIgKSwKKwlmdW5jdGlvbiggaSwgbmFtZSApIHsKKworCS8vIEhhbmRsZSBldmVudCBiaW5kaW5nCisJalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7CisJCXJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/CisJCQl0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDoKKwkJCXRoaXMudHJpZ2dlciggbmFtZSApOworCX07Cit9ICk7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKwlob3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7CisJCXJldHVybiB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0IHx8IGZuT3ZlciApOworCX0KK30gKTsKKworCisKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCisJYmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHsKKwkJcmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApOworCX0sCisJdW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkgeworCQlyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApOworCX0sCisKKwlkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7CisJCXJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7CisJfSwKKwl1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHsKKworCQkvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApCisJCXJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8KKwkJCXRoaXMub2ZmKCBzZWxlY3RvciwgIioqIiApIDoKKwkJCXRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgIioqIiwgZm4gKTsKKwl9Cit9ICk7CisKKy8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueQorLy8gYXJndW1lbnRzLgorLy8galF1ZXJ5LnByb3h5IGlzIGRlcHJlY2F0ZWQgdG8gcHJvbW90ZSBzdGFuZGFyZHMgKHNwZWNpZmljYWxseSBGdW5jdGlvbiNiaW5kKQorLy8gSG93ZXZlciwgaXQgaXMgbm90IHNsYXRlZCBmb3IgcmVtb3ZhbCBhbnkgdGltZSBzb29uCitqUXVlcnkucHJveHkgPSBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7CisJdmFyIHRtcCwgYXJncywgcHJveHk7CisKKwlpZiAoIHR5cGVvZiBjb250ZXh0ID09PSAic3RyaW5nIiApIHsKKwkJdG1wID0gZm5bIGNvbnRleHQgXTsKKwkJY29udGV4dCA9IGZuOworCQlmbiA9IHRtcDsKKwl9CisKKwkvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlYworCS8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuCisJaWYgKCAhaXNGdW5jdGlvbiggZm4gKSApIHsKKwkJcmV0dXJuIHVuZGVmaW5lZDsKKwl9CisKKwkvLyBTaW11bGF0ZWQgYmluZAorCWFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTsKKwlwcm94eSA9IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTsKKwl9OworCisJLy8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkCisJcHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7CisKKwlyZXR1cm4gcHJveHk7Cit9OworCitqUXVlcnkuaG9sZFJlYWR5ID0gZnVuY3Rpb24oIGhvbGQgKSB7CisJaWYgKCBob2xkICkgeworCQlqUXVlcnkucmVhZHlXYWl0Kys7CisJfSBlbHNlIHsKKwkJalF1ZXJ5LnJlYWR5KCB0cnVlICk7CisJfQorfTsKK2pRdWVyeS5pc0FycmF5ID0gQXJyYXkuaXNBcnJheTsKK2pRdWVyeS5wYXJzZUpTT04gPSBKU09OLnBhcnNlOworalF1ZXJ5Lm5vZGVOYW1lID0gbm9kZU5hbWU7CitqUXVlcnkuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247CitqUXVlcnkuaXNXaW5kb3cgPSBpc1dpbmRvdzsKK2pRdWVyeS5jYW1lbENhc2UgPSBjYW1lbENhc2U7CitqUXVlcnkudHlwZSA9IHRvVHlwZTsKKworalF1ZXJ5Lm5vdyA9IERhdGUubm93OworCitqUXVlcnkuaXNOdW1lcmljID0gZnVuY3Rpb24oIG9iaiApIHsKKworCS8vIEFzIG9mIGpRdWVyeSAzLjAsIGlzTnVtZXJpYyBpcyBsaW1pdGVkIHRvCisJLy8gc3RyaW5ncyBhbmQgbnVtYmVycyAocHJpbWl0aXZlcyBvciBvYmplY3RzKQorCS8vIHRoYXQgY2FuIGJlIGNvZXJjZWQgdG8gZmluaXRlIG51bWJlcnMgKGdoLTI2NjIpCisJdmFyIHR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7CisJcmV0dXJuICggdHlwZSA9PT0gIm51bWJlciIgfHwgdHlwZSA9PT0gInN0cmluZyIgKSAmJgorCisJCS8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzICgiIikKKwkJLy8gLi4uYnV0IG1pc2ludGVycHJldHMgbGVhZGluZy1udW1iZXIgc3RyaW5ncywgcGFydGljdWxhcmx5IGhleCBsaXRlcmFscyAoIjB4Li4uIikKKwkJLy8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFOCisJCSFpc05hTiggb2JqIC0gcGFyc2VGbG9hdCggb2JqICkgKTsKK307CisKKworCisKKy8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlcgorLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdAorLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0CisvLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlCisvLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2UKKy8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50cworLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLgorCisvLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZAorLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhbgorLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKKy8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub24KKworaWYgKCB0eXBlb2YgZGVmaW5lID09PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQgKSB7CisJZGVmaW5lKCAianF1ZXJ5IiwgW10sIGZ1bmN0aW9uKCkgeworCQlyZXR1cm4galF1ZXJ5OworCX0gKTsKK30KKworCisKKwordmFyCisKKwkvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGUKKwlfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSwKKworCS8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlCisJXyQgPSB3aW5kb3cuJDsKKworalF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHsKKwlpZiAoIHdpbmRvdy4kID09PSBqUXVlcnkgKSB7CisJCXdpbmRvdy4kID0gXyQ7CisJfQorCisJaWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09IGpRdWVyeSApIHsKKwkJd2luZG93LmpRdWVyeSA9IF9qUXVlcnk7CisJfQorCisJcmV0dXJuIGpRdWVyeTsKK307CisKKy8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1ECisvLyAoIzcxMDIjY29tbWVudDoxMCwgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC81NTcpCisvLyBhbmQgQ29tbW9uSlMgZm9yIGJyb3dzZXIgZW11bGF0b3JzICgjMTM1NjYpCitpZiAoICFub0dsb2JhbCApIHsKKwl3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7Cit9CisKKworCisKK3JldHVybiBqUXVlcnk7Cit9ICk7CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGljZW5zZS50eHQgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9saWNlbnNlLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xpY2Vuc2UudHh0CnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9saWNlbnNlLnR4dApkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQWJvdXRCb3gvQWJvdXRCb3guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L0Fib3V0Qm94LmpzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9BYm91dEJveC9BYm91dEJveC5qcwpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9BYm91dEJveC5qcwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQWJvdXRCb3gvYWJvdXQuY3NzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9hYm91dC5jc3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Fib3V0Qm94L2Fib3V0LmNzcwpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9hYm91dC5jc3MKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Fib3V0Qm94L2RpYWxvZy5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9kaWFsb2cuaHRtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQWJvdXRCb3gvZGlhbG9nLmh0bWwKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvZGlhbG9nLmh0bWwKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9iNS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9iNS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzgzNWI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL2I1LmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiYjUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAi6Zec5pa8IFhpbmhhIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvY2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvY2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRhMTIyNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9jaC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIumXnOaWvCBYaW5oYSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL2N6LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL2N6LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNjlkODcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvY3ouanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjeiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJPIHTDqXRvIGFwbGlrYWNpIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvZGEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvZGEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdjZmUzMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9kYS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIk9tIFhpbmhhIiwKKyAgICAiQ2xvc2UiOiAiTHVrIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhjOTIyYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9kZS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIsOcYmVyIGRpZXNlbiBFZGl0b3IiLAorICAgICJDbG9zZSI6ICJTY2hsaWXDn2VuIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvZWUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvZWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkxOWUwMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9lZS5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIlRlYXZlIHRvaW1ldGkga29odGEiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9lbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9lbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGRiODE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL2VsLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAizqDOu863z4HOv8+Gzr/Pgc6vzrXPgiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL2VzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZGJiOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvZXMuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlcyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJTb2JyZSBlc3RlIEVkaXRvciIsCisgICAgIkNsb3NlIjogIkNlcnJhciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL2V1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL2V1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZDdmYjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvZXUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJldSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJFZGl0b3JlYXJpIGJ1cnV6Li4uIiwKKyAgICAiQ2xvc2UiOiAiSXR4aSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL2ZhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwODMyMGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvZmEuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICLYr9ix2KjYp9ix2Ycg2KfbjNmGINmI24zYsdin24zYtCDar9ixIiwKKyAgICAiQ2xvc2UiOiAi2KjYs9iq2YYiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9maS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9maS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNkZDc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL2ZpLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmkiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiVGlldG9qYSBlZGl0b3Jpc3RhIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvZnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FkMzdkYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9mci5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIkEgcHJvcG9zIiwKKyAgICAiQ2xvc2UiOiAiRmVybWVyIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvaGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvaGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk5NTkxMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9oZS5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImhlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIteQ15XXk9eV16og16LXldeo15og15bXlCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL2h1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL2h1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZGJlYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvaHUuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJodSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJOw6l2amVneSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL2l0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMTk2ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvaXQuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJpdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJJbmZvcm1hemlvbmkgc3UgWGluaGEiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9qYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9qYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDU5MmE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL2phLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiamEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAi44OQ44O844K444On44Oz5oOF5aCxIiwKKyAgICAiQ2xvc2UiOiAi6ZaJ44GY44KLIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZjVhNWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDI2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIiIsCisgICAgIkNsb3NlIjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvbHQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvbHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNkODdkMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9sdC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIkFwaWUgcmVkYWt0b3JpxbMiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9sdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9sdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzM5ZjA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL2x2LmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHYiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiUGFyIMOwbyByZWRpw6zDp3TDomp1IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvbmIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExNmU0NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIk9tIGRlbm5lIGVkaXRvciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxN2FmZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvbmwuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJubCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJPdmVyIGRlemUgZWRpdG9yIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvcGwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvcGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVhYmY3NgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9wbC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInBsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIkluZm9ybWFjamUgbyB0eW0gZWR5dG9yemUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9wdF9ici5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9wdF9ici5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTRlNTI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiU29icmUgZXN0ZSBlZGl0b3IiLAorICAgICJDbG9zZSI6ICJGZWNoYXIiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9yby5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9yby5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGZiYWY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL3JvLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicm8iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiRGVzcHJlIGVkaXRvciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL3J1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMzE1ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvcnUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICLQniDRgNC10LTQsNC60YLQvtGA0LUiLAorICAgICJDbG9zZSI6ICLQl9Cw0LrRgNGL0YLRjCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL3NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL3NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMjM4M2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvc2guanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJPIG92b20gZWRpdG9ydSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL3NpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL3NpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YzJjYTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvc2kuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICJWaXppdGthIHphIHVyZWpldmFsbmlrIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvc3IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvc3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRkZmE1ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9zci5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogItCeINC+0LLQvtC8INC10LTQuNGC0L7RgNGDIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvc3YuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjViOGExZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy9zdi5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInN2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIk9tIGRlbm5hIGVkaXRvciIsCisgICAgIkNsb3NlIjogIlN0w6RuZyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL3RoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL3RoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkN2YzZTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvdGguanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0aCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYm91dCB0aGlzIGVkaXRvciI6ICLguYDguIHguLXguYjguKLguKfguIHguLHguJrguYLguJvguKPguYHguIHguKPguKHguJnguLXguYkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy90ci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy90ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmVkYTg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiQnUgZMO8emVubGV5aWNpIGhha2vEsW5kYSIsCisgICAgIkNsb3NlIjogIkthcGF0IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvdm4uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Fib3V0Qm94L2xhbmcvdm4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhY2M1MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy92bi5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInZuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFib3V0IHRoaXMgZWRpdG9yIjogIlThu7EgR2nhu5tpIFRoaeG7h3UiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy96aF9jbi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQWJvdXRCb3gvbGFuZy96aF9jbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2E4NmUzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9BYm91dEJveC9sYW5nL3poX2NuLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiemhfY24iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAi5YWz5pa8IFhpbmhhIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9Db2xvclBpY2tlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjM3M2UxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9Db2xvclBpY2tlci5qcwpAQCAtMCwwICsxLDkzOCBAQAorCisgIC8qKgorICAgKiBHb2dvIEludGVybmV0IFNlcnZpY2VzIENvbG9yIFBpY2tlciBKYXZhc2NyaXB0IFdpZGdldAorICAgKiBjb2xvclBpY2tlciBmb3Igc2hvcnQuCisgICAqCisgICAqIEBhdXRob3IgSmFtZXMgU2xlZW1hbiA8amFtZXNAZ29nby5jby5uej4KKyAgICogQGRhdGUgSnVuZSwgMjAwNQorICAgKgorICAgKiBUaGUgY29sb3JQaWNrZXIgY2xhc3MgcHJvdmlkZXMgYWNjZXNzIHRvIGEgY29sb3IgbWFwIGZvciBzZWxlY3RpbmcKKyAgICogY29sb3JzIHdoaWNoIHdpbGwgYmUgcGFzc2VkIGJhY2sgdG8gYSBjYWxsYmFjayAodXN1YWxseSBzdWNoIGEgY2FsbGJhY2sgd291bGQKKyAgICogd3JpdGUgdGhlIFJHQiBoZXggdmFsdWUgcmV0dXJuZWQgaW50byBhIGZpZWxkLCBidXQgdGhhdCdzIHVwIHRvIHlvdSkuCisgICAqCisgICAqIFRoZSBjb2xvciBtYXAgcHJlc2VudGVkIGlzIGEgc3RhbmRhcmQgcmVjdGFuZ3VsYXIgcGFsbGF0ZSB3aXRoIDAtPjM2MCBkZWdyZWVzIG9mCisgICAqIGh1ZSBvbiB0aGUgWSBheGlzIGFuZCAwLT4xMDAlIHNhdHVyYXRpb24gb24gdGhlIFggYXhpcywgdGhlIHZhbHVlIChicmlnaHRuZXNzKSBpcworICAgKiBzZWxlY3RhYmxlIGFzIGEgdmVydGljYWwgY29sdW1uIG9mIGdyZXkgdmFsdWVzLiAgQWxzbyBwcmVzZW50IGlzIGEgb25lIHJvdyBvZgorICAgKiB3aGl0ZS0+Z3JleS0+YmxhY2sgZm9yIGVhc3kgc2VsZWN0aW9uIG9mIHRoZXNlIGNvbG9ycy4KKyAgICoKKyAgICogQSBjaGVja2JveCBpcyBwcmVzZW50ZWQsIHdoaWNoIHdoZW4gY2hlY2tlZCB3aWxsIGZvcmNlIHRoZSBwYWxhdHRlIGludG8gIndlYiBzYWZlIgorICAgKiBtb2RlLCBvbmx5IGNvbG91cnMgaW4gdGhlICJ3ZWIgc2FmZSBwYWxhdHRlIiBvZiAyMTYgY29sb3JzIHdpbGwgYmUgc2hvd24sIHRoZSBwYWxhdHRlCisgICAqIGlzIGFkanVzdGVkIHNvIHRoYXQgdGhlIG5vcm1hbCBibGVuZCBvZiBjb2xvdXJzIGFyZSAicm91bmRlZCIgdG8gdGhlIG5lYXJlc3Qgd2ViIHNhZmUKKyAgICogb25lLiAgSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgIndlYiBzYWZlIiBjb2xvdXJzIHJlYWxseSBhcmUgYSB0aGluZyBvZiB0aGUgcGFzdCwKKyAgICogbm90IG9ubHkgY2FuIHByZXR0eSBtdWNoIGV2ZXJ5IGJvZHkgZGlzcGxheSBzZXZlcmFsIG1pbGxpb24gY29sb3VycywgYnV0IGl0J3MgYWN0dWFsbHkKKyAgICogYmVlbiBmb3VuZCB0aGF0IG9mIHRob3NlIDIxNiB3ZWIgc2FmZSBjb2xvdXJzIG9ubHkgMjAgdG8gMzAgYXJlIGFjdHVhbGx5IGdvaW5nIHRvIGJlCisgICAqIGRpc3BsYXllZCBlcXVhbGx5IG9uIHRoZSBtYWpvcml0eSBvZiBtb25pdG9ycywgYW5kIHRob3NlIGFyZSBtb3N0bHkgeWVsbG93cyEKKyAgICoKKyAgICogPVVzYWdlIEV4YW1wbGU9CisgICAqIHt7eworICAgKiAgPCEtLSBIZXJlIGlzIHRoZSBmaWVsZCAtLT4gICAgICAgICA8IS0tIEFuZCB3ZSB3aWxsIHVzZSB0aGlzIGJ1dHRvbiB0byBvcGVuIHRoZSBwaWNrZXIiCisgICAqICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9Im15RmllbGQiIC8+IDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSIuLi4iIGlkPSJteUJ1dHRvbiIgLz4KKyAgICogIDxzY3JpcHQ+CisgICAqICAgIC8vIG5vdyB3aGVuIHRoZSB3aW5kb3cgbG9hZHMgbGluayBldmVyeXRoaW5nIHVwCisgICAqICAgIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpCisgICAqICAgIHsKKyAgICoKKyAgICogICAgICB2YXIgbXlGaWVsZCAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlGaWVsZCcpOyAgLy8gR2V0IG91ciBmaWVsZAorICAgKiAgICAgIHZhciBteUJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteUJ1dHRvbicpOyAvLyBBbmQgdGhlIGJ1dHRvbgorICAgKiAgICAgIHZhciBteVBpY2tlciA9IG5ldyBjb2xvclBpY2tlciAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIGEgcGlja2VyCisgICAqICAgICAgICAoCisgICAqICAgICAgICAgIHsKKyAgICogICAgICAgICAgICAgIC8vIENlbGxzaXplIGlzIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIGVhY2ggY29sb3VyIGNlbGwKKyAgICogICAgICAgICAgICBjZWxsc2l6ZTogJzVweCcsCisgICAqICAgICAgICAgICAgICAvLyBDYWxsYmFjayBpcyB0aGUgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHdlIGFyZSBkb25lLAorICAgKiAgICAgICAgICAgICAgLy8gdGhpcyBvbmUgcHV0cyB0aGUgY29sb3IgdmFsdWUgaW50byB0aGUgZmllbGQKKyAgICogICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24oY29sb3Ipe215RmllbGQudmFsdWU9Y29sb3J9LAorICAgKiAgICAgICAgICAgICAgLy8gR3JhbnVsYXJpdHkgZGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29sb3JzIHBlciByb3cvY29sdW1uCisgICAqICAgICAgICAgICAgICAvLyBtb3JlIGNvbG9ycyAoaGlnaCBudW1iZXIpIGdpdmVzIGEgc21vb3RoIGdyYWRpZW50IG9mIGNvbG9ycworICAgKiAgICAgICAgICAgICAgLy8gYnV0IGl0IHdpbGwgdGFrZSAobXVjaCkgbG9uZ2VyIHRvIGRpc3BsYXksIHdoaWxlIGEgc21hbGwgbnVtYmVyCisgICAqICAgICAgICAgICAgICAvLyBkaXNwbGF5cyBxdWlja2x5LCBidXQgZG9lc24ndCBzaG93IGFzIG1hbnkgZGlmZmVyZW50IGNvbG9ycy4KKyAgICogICAgICAgICAgICAgIC8vIEV4cGVyaWVtZW50IHdpdGggaXQsIDE4IHNlZW1zIGxpa2UgYSBnb29kIG51bWJlci4KKyAgICogICAgICAgICAgICBncmFudWxhcml0eTogMTgsCisgICAqICAgICAgICAgICAgICAvLyBXZWJzYWZlIHNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBXZWIgU2FmZSBjaGVja2JveAorICAgKiAgICAgICAgICAgIHdlYnNhZmU6IGZhbHNlLAorICAgKiAgICAgICAgICAgICAgLy8gU2F2ZWNvbG9ycyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiByZWNlbnRseS1zZWxlY3RlZCBjb2xvcnMgdG8gcmVtZW1iZXIKKyAgICogICAgICAgICAgICBzYXZlY29sb3JzOiAyMAorICAgKiAgICAgICAgICAgfQorICAgKiAgICAgICAgKTsKKyAgICoKKyAgICogICAgICAvLyBBbmQgbm93IGhvb2t1cCB0aGUgYnV0dG9uIHRvIG9wZW4gdGhlIHBpY2tlciwKKyAgICogICAgICAvLyAgdGhlIGZ1bmN0aW9uIHRvIGRvIHRoYXQgaXMgbXlQaWNrZXIub3BlbigpCisgICAqICAgICAgLy8gIGl0IGFjY2VwdHMgdHdvIHBhcmFtZXRlcnMsIHRoZSAiYW5jaG9yYWdlIiBhbmQgdGhlIGVsZW1lbnQgdG8gYW5jaG9yIHRvLAorICAgKiAgICAgIC8vICBhbmQgYW4gb3B0aW9uYWwgdGhpcmQgcGFyYW1ldGVyLCBhbiBpbml0aWFsIGNvbG9yIGNvZGUgdG8gc2hvdyBpbiAKKyAgICogICAgICAvLyAgdGhlIHRleHQgYm94IGFuZCBzYW1wbGUuCisgICAqICAgICAgLy8KKyAgICogICAgICAvLyAgYW5jaG9yYWdlIGlzIG1hZGUgdXAgb2YgdHdvIG9mIHRoZSBrZXl3b3JkcyBib3R0b20sdG9wLGxlZnQgYW5kIHJpZ2h0CisgICAqICAgICAgLy8gICAgbGVmdDogICB0aGUgbGVmdCBlZGdlIG9mIHRoZSBwaWNrZXIgd2lsbCBhbGlnbiB0byB0aGUgbGVmdCBlZGdlIG9mIHRoZSBlbGVtZW50CisgICAqICAgICAgLy8gb3IgcmlnaHQ6ICB0aGUgcmlnaHQgZWRnZW9mIHRoZSBwaWNrZXIgYWxpZ25zIHRvIHRoZSByaWdodCBlZGdlIG9mIHRoZSBlbGVtZW50CisgICAqICAgICAgLy8gICAgdG9wOiAgICB0aGUgcGlja2VyIHdpbGwgYXBwZWFyIGFib3ZlIHRoZSBlbGVtZW50CisgICAqICAgICAgLy8gb3IgYm90dG9tOiB0aGUgcGlja2VyIHdpbGwgYXBwZWFyIGJlbG93IHRoZSBlbGVtZW50CisgICAqCisgICAqICAgICAgbXlCdXR0b24ub25jbGljayA9CisgICAqICAgICAgICBmdW5jdGlvbigpCisgICAqICAgICAgICB7ICAgICAgICAgICAgICAvLyBhbmNob3JhZ2UgICAsIGVsZW1lbnQgdG8gYW5jaG9yIHRvCisgICAqICAgICAgICAgIG15UGlja2VyLm9wZW4oJ2JvdHRvbSxyaWdodCcsIG15QnV0dG9uLCBpbml0Y29sb3IpCisgICAqICAgICAgICB9OworICAgKiAgICB9CisgICAqICA8L3NjcmlwdD4KKyAgICogfX19CisgICAqLworICBDb2xvclBpY2tlci5fcGx1Z2luSW5mbyA9CisgIHsKKyAgICBuYW1lICAgICA6ICJjb2xvclBpY2tlciIsCisgICAgdmVyc2lvbiAgOiAiJExhc3RDaGFuZ2VkUmV2aXNpb246IDE0MDIgJCIucmVwbGFjZSgvXlteOl0qOlxzKiguKilccypcJCQvLCAnJDEnKSwKKyAgICBkZXZlbG9wZXI6ICJKYW1lcyBTbGVlbWFuIiwKKyAgICBkZXZlbG9wZXJfdXJsOiAiaHR0cDovL3d3dy5nb2dvLmNvLm56LyIsCisgICAgY19vd25lciAgICAgIDogIkdvZ28gSW50ZXJuZXQgU2VydmljZXMiLAorICAgIGxpY2Vuc2UgICAgICA6ICJodG1sQXJlYSIsCisgICAgc3BvbnNvciAgICAgIDogIkdvZ28gSW50ZXJuZXQgU2VydmljZXMiLAorICAgIHNwb25zb3JfdXJsICA6ICJodHRwOi8vd3d3LmdvZ28uY28ubnovIgorICB9OworICBmdW5jdGlvbiBDb2xvclBpY2tlcigpIAorICB7CisgIC8vIGR1bW15IGZ1bmN0aW9uIGZvciBYaW5oYSBwbHVnaW4gYXBpLCBub3RlIHRoZSBkaWZmZXJlbnQgbmFtZXMKKyAgfQorICB0cnkgeworICAgIGlmICh3aW5kb3cub3BlbmVyICYmIHdpbmRvdy5vcGVuZXIuWGluaGEpCisgICAgeyAvLyB0aGlzIHByZXZlbnRzIHRoYXQgdGhlIFhpbmhhLmNvbG9yUGlja2VyIG9iamVjdCBvZiB0aGUgb3BlbmluZyB3aW5kb3cgaXMgcmVwbGFjZWQgYnkgdGhlIG9uZSBsb2FkZWQgaW4gdGhlIHBvcHVwCisgICAgICB2YXIgb3BlbmVyQ29sb3JQaWNrZXIgPSB3aW5kb3cub3BlbmVyLlhpbmhhLmNvbG9yUGlja2VyOworICAgICAgWGluaGEuX2FkZEV2ZW50KHdpbmRvdywndW5sb2FkJywgZnVuY3Rpb24oKSB7WGluaGEuY29sb3JQaWNrZXIgPSBvcGVuZXJDb2xvclBpY2tlcjt9KTsKKyAgICB9CisgIH0gY2F0Y2goZSkge30KKyAgLy90aGUgYWN0dWFsIGZ1bmN0aW9uIGlzIGJlbG93CisgIFhpbmhhLmNvbG9yUGlja2VyID0gZnVuY3Rpb24gKHBhcmFtcykKKyAgeworICAgIC8vIGlmIHRoZSBzYXZlZENvbG9ycyBpcyBlbXB0eSwgdHJ5IHRvIHJlYWQgdGhlIHNhdmVkQ29sb3JzIGZyb20gY29va2llCisgICAgaWYgKCBYaW5oYS5jb2xvclBpY2tlci5zYXZlZENvbG9ycy5sZW5ndGggPT09IDAgKQorICAgIHsKKyAgICAgIFhpbmhhLmNvbG9yUGlja2VyLmxvYWRDb2xvcnMoKTsKKyAgICB9CisKKyAgICB0aGlzLmlzX2llXzYgPSAoWGluaGEuaXNfaWUgJiYgWGluaGEuaWVfdmVyc2lvbiA8IDcpOworICAgIHZhciBwaWNrZXIgPSB0aGlzOworICAgIHZhciBlbmFibGVwaWNrID0gZmFsc2U7CisgICAgdmFyIGVuYWJsZXZhbHVlID0gZmFsc2U7CisgICAgdmFyIHBpY2tyb3cgPSAwOworICAgIHZhciBwaWNrY29sID0gMDsKKyAgICB0aGlzLmNhbGxiYWNrID0gcGFyYW1zLmNhbGxiYWNrP3BhcmFtcy5jYWxsYmFjazpmdW5jdGlvbihjb2xvcil7YWxlcnQoJ1lvdSBwaWNrZWQgJyArIGNvbG9yICk7fTsKKyAgICB0aGlzLndlYnNhZmUgID0gcGFyYW1zLndlYnNhZmU/cGFyYW1zLndlYnNhZmU6ZmFsc2U7CisgICAgdGhpcy5zYXZlY29sb3JzID0gcGFyYW1zLnNhdmVjb2xvcnM/IHBhcmFtcy5zYXZlY29sb3JzOiAyMDsKKworICAgIHRoaXMuY2VsbHNpemUgPSBwYXJzZUludChwYXJhbXMuY2VsbHNpemU/cGFyYW1zLmNlbGxzaXplOicxMHB4JywgMTApOworICAgIHRoaXMuc2lkZSAgICAgPSBwYXJhbXMuZ3JhbnVsYXJpdHk/cGFyYW1zLmdyYW51bGFyaXR5OjE4OworICAgIHZhciB2YWx1ZWNvbCA9IHRoaXMuc2lkZSArIDE7CisgICAgdmFyIHZhbHVlcm93ID0gdGhpcy5zaWRlIC0gMTsKKworICAgIHRoaXMudmFsdWUgPSAxOworICAgIHRoaXMuc2F2ZWRfY2VsbHMgPSBudWxsOworICAgIHRoaXMudGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpOworICAgIHRoaXMudGFibGUuY2xhc3NOYW1lID0gImRpYWxvZyI7CisgICAgdGhpcy50YWJsZS5jZWxsU3BhY2luZyA9IHRoaXMudGFibGUuY2VsbFBhZGRpbmcgPSAwOworICAgIHRoaXMudGFibGUub25tb3VzZXVwID0gZnVuY3Rpb24oKQorICAgIHsKKyAgICAgIGVuYWJsZXBpY2sgPSBmYWxzZTsKKyAgICAgIGVuYWJsZXZhbHVlID0gZmFsc2U7CisgICAgfTsKKyAgICB0aGlzLnRib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGJvZHknKTsKKyAgICB0aGlzLnRhYmxlLmFwcGVuZENoaWxkKHRoaXMudGJvZHkpOworICAgIHRoaXMudGFibGUuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCBXaW5kb3dGcmFtZSc7CisgICAgdGhpcy50YWJsZS5zdHlsZS56SW5kZXggPSAnMTA1MCc7CisgICAgLy8gQWRkIGEgdGl0bGUgYmFyIGFuZCBjbG9zZSBidXR0b24KKyAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOworICAgIAorICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CisgICAgdGQuY29sU3BhbiA9IHRoaXMuc2lkZTsKKyAgICB0ZC5jbGFzc05hbWU9ICJ0aXRsZSI7CisgICAgdGQuc3R5bGUuZm9udEZhbWlseSA9ICdzbWFsbC1jYXB0aW9uLGNhcHRpb24sc2Fucy1zZXJpZic7CisgICAgdGQuc3R5bGUuZm9udFNpemUgPSAneC1zbWFsbCc7CisgICAgdGQudW5zZWxlY3RhYmxlID0gIm9uIjsKKyAgICB0ZC5zdHlsZS5Nb3pVc2VyU2VsZWN0ID0gIm5vbmUiOworICAgIHRkLnN0eWxlLmN1cnNvciA9ICJkZWZhdWx0IjsKKyAgICB0ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShYaW5oYS5fbGMoJ0NsaWNrIGEgY29sb3IuLi4nLCAnQ29sb3JQaWNrZXInKSkpOworICAgIHRkLnN0eWxlLmJvcmRlckJvdHRvbSA9ICcxcHggc29saWQgV2luZG93RnJhbWUnOworICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKKyAgICB0ZCA9IG51bGw7CisKKyAgICB2YXIgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOworICAgIHRkLmNsYXNzTmFtZT0gInRpdGxlIjsKKyAgICB0ZC5jb2xTcGFuID0gMjsKKyAgICB0ZC5zdHlsZS5mb250RmFtaWx5ID0gJ1RhaG9tYSxWZXJkYW5hLHNhbnMtc2VyaWYnOworICAgIHRkLnN0eWxlLmJvcmRlckJvdHRvbSA9ICcxcHggc29saWQgV2luZG93RnJhbWUnOworICAgIHRkLnN0eWxlLnBhZGRpbmdSaWdodCA9ICcwJzsKKyAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CisgICAgCisKKyAgICB2YXIgYnV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgYnV0LnRpdGxlID0gWGluaGEuX2xjKCJDbG9zZSIsICdDb2xvclBpY2tlcicpOworICAgIGJ1dC5jbGFzc05hbWU9ICdidXR0b25Db2xvcic7CisgICAgYnV0LnN0eWxlLmhlaWdodCA9ICcxMXB4JzsKKyAgICBidXQuc3R5bGUud2lkdGggPSAnMTFweCc7CisgICAgYnV0LnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJzsKKyAgICBidXQub25jbGljayA9IGZ1bmN0aW9uKCkgeyBwaWNrZXIuY2xvc2UoKTsgfTsKKyAgICBidXQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1x1MDBENycpKTsKKyAgICBidXQuYWxpZ24gPSAnY2VudGVyJzsKKyAgICBidXQuc3R5bGUudmVydGljYWxBbGlnbiA9ICd0b3AnOworICAgIGJ1dC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7CisgICAgYnV0LnN0eWxlLmNzc0Zsb2F0ID0gJ3JpZ2h0JzsKKyAgICBidXQuc3R5bGUuc3R5bGVGbG9hdCA9ICdyaWdodCc7CisgICAgYnV0LnN0eWxlLnBhZGRpbmcgPSAnMCc7CisgICAgYnV0LnN0eWxlLm1hcmdpbiA9ICcycHgnOworICAgIGJ1dC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndHJhbnNwYXJlbnQnOworICAgIGJ1dC5zdHlsZS5mb250U2l6ZT0gJzExcHgnOworICAgIGlmICggIVhpbmhhLmlzX2llKSBidXQuc3R5bGUubGluZUhlaWdodD0gJzlweCc7IC8vIGxpbmUtaGVpZ2h0OjlweCBpcyBiZXR0ZXIgZm9yIGNlbnRlcmluZyB0aGUgeCwgYnV0IElFIGN1dHMgaXQgb2ZmIGF0IHRoZSBib3R0b20gOigKKyAgICBidXQuc3R5bGUubGV0dGVyU3BhY2luZz0gJzAnOworICAgIAorICAgICAgICAKKyAgICB0ZC5hcHBlbmRDaGlsZChidXQpOworCisgICAgdGhpcy50Ym9keS5hcHBlbmRDaGlsZCh0cik7CisgICAgYnV0ID0gdHIgPSB0ZCA9IG51bGw7CisKKyAgICB0aGlzLmNvbnN0cmFpbl9jYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgdGhpcy5jb25zdHJhaW5fY2IudHlwZSA9ICdjaGVja2JveCc7CisKKyAgICB0aGlzLmNob3NlbkNvbG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKKyAgICB0aGlzLmNob3NlbkNvbG9yLnR5cGUgPSAndGV4dCc7CisgICAgdGhpcy5jaG9zZW5Db2xvci5tYXhMZW5ndGggPSA3OworICAgIHRoaXMuY2hvc2VuQ29sb3Iuc3R5bGUud2lkdGggPSAnNTBweCc7CisgICAgdGhpcy5jaG9zZW5Db2xvci5zdHlsZS5mb250U2l6ZSA9ICcxMXB4JzsKKyAgICAKKyAgICB0aGlzLmNob3NlbkNvbG9yLm9uY2hhbmdlID0gZnVuY3Rpb24oKQorICAgICAgeworICAgICAgICBpZigvI1swLTlhLWZdezYsNn0vaS50ZXN0KHRoaXMudmFsdWUpKQorICAgICAgICB7CisgICAgICAgICAgcGlja2VyLmJhY2tTYW1wbGUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy52YWx1ZTsKKyAgICAgICAgICBwaWNrZXIuZm9yZVNhbXBsZS5zdHlsZS5jb2xvciA9IHRoaXMudmFsdWU7CisgICAgICAgIH0KKyAgICAgIH07CisKKyAgICB0aGlzLmJhY2tTYW1wbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICB0aGlzLmJhY2tTYW1wbGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1x1MDBBMCcpKTsKKyAgICB0aGlzLmJhY2tTYW1wbGUuc3R5bGUuZm9udFdlaWdodCA9ICdib2xkJzsKKyAgICB0aGlzLmJhY2tTYW1wbGUuc3R5bGUuZm9udEZhbWlseSA9ICdzbWFsbC1jYXB0aW9uLGNhcHRpb24sc2Fucy1zZXJpZic7CisgICAgdGhpcy5iYWNrU2FtcGxlLmZvbnRTaXplID0gJ3gtc21hbGwnOworCisgICAgdGhpcy5mb3JlU2FtcGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgdGhpcy5mb3JlU2FtcGxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFhpbmhhLl9sYygnU2FtcGxlJywgJ0NvbG9yUGlja2VyJykpKTsKKyAgICB0aGlzLmZvcmVTYW1wbGUuc3R5bGUuZm9udFdlaWdodCA9ICdib2xkJzsKKyAgICB0aGlzLmZvcmVTYW1wbGUuc3R5bGUuZm9udEZhbWlseSA9ICdzbWFsbC1jYXB0aW9uLGNhcHRpb24sc2Fucy1zZXJpZic7CisgICAgdGhpcy5mb3JlU2FtcGxlLmZvbnRTaXplID0gJ3gtc21hbGwnOworCisgICAgLyoqIENvbnZlcnQgYSBkZWNpbWFsIG51bWJlciB0byBhIHR3byBieXRlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgorICAgICAgKiBaZXJvLXBhZHMgaWYgbmVjZXNzYXJ5LgorICAgICAgKgorICAgICAgKiBAcGFyYW0gaW50ZWdlciBkZWMgSW50ZWdlciBmcm9tIDAgLT4gMjU1CisgICAgICAqIEByZXR1cm5zIHN0cmluZyAyIGNoYXJhY3RlciBoZXhhZGVjaW1hbCAoemVybyBwYWRkZWQpCisgICAgICAqLworICAgIGZ1bmN0aW9uIHRvSGV4KGRlYykKKyAgICB7CisgICAgICB2YXIgaCA9IGRlYy50b1N0cmluZygxNik7CisgICAgICBpZihoLmxlbmd0aCA8IDIpIHsgaCA9ICcwJyArIGg7IH0KKyAgICAgIHJldHVybiBoOworICAgIH0KKworICAgIC8qKiBDb252ZXJ0IGEgY29sb3Igb2JqZWN0IHtyZWQ6eCwgZ3JlZW46eCwgYmx1ZTp4fSB0byBhbiBSR0IgaGV4IHRyaXBsZXQKKyAgICAgKiBAcGFyYW0gb2JqZWN0IHR1cGxlIHtyZWQ6MC0+MjU1LCBncmVlbjowLT4yNTUsIGJsdWU6MC0+MjU1fQorICAgICAqIEByZXR1cm5zIHN0cmluZyBoZXggdHJpcGxldCAoI3JyZ2diYikKKyAgICAgKi8KKworICAgIGZ1bmN0aW9uIHR1cGxlVG9Db2xvcih0dXBsZSkKKyAgICB7CisgICAgICByZXR1cm4gJyMnICsgdG9IZXgodHVwbGUucmVkKSArIHRvSGV4KHR1cGxlLmdyZWVuKSArIHRvSGV4KHR1cGxlLmJsdWUpOworICAgIH0KKworICAgIC8qKiBEZXRlcm1pbmUgdGhlIG5lYXJlc3QgcG93ZXIgb2YgYSBudW1iZXIgdG8gYW5vdGhlciBudW1iZXIKKyAgICAgKiAoZWcgbmVhcmVzdCBwb3dlciBvZiA0IHRvIDUgPT4gNCwgb2YgNCB0byA3ID0+IDgpCisgICAgICoKKyAgICAgKiBAdXNlZGJ5IHJnYlRvV2Vic2FmZQorICAgICAqIEBwYXJhbSBudW1iZXIgbnVtIG51bWJlciB0byByb3VuZCB0byBuZWFyZXN0IHBvd2VyIG9mIDxwb3dlcj4KKyAgICAgKiBAcGFyYW0gbnVtYmVyIHBvd2VyIG51bWJlciB0byBmaW5kIHRoZSBuZWFyZXN0IHBvd2VyIG9mCisgICAgICogQHJldHVybnMgbnVtYmVyIE5lYXJlc3QgcG93ZXIgb2YgPHBvd2VyPiB0byBudW0uCisgICAgICovCisKKyAgICBmdW5jdGlvbiBuZWFyZXN0UG93ZXJPZihudW0scG93ZXIpCisgICAgeworICAgICAgcmV0dXJuIE1hdGgucm91bmQoTWF0aC5yb3VuZChudW0gLyBwb3dlcikgKiBwb3dlcik7CisgICAgfQorCisgICAgLyoqIENvbmNhdGVuYXRlIHRoZSBoZXggcmVwcmVzZW50YXRpb24gb2YgZGVjIHRvIGl0c2VsZiBhbmQgcmV0dXJuIGFzIGFuIGludGVnZXIuCisgICAgICogIGVnIGRlYyA9IDEwIC0+IEEgLT4gQUEgLT4gMTcwCisgICAgICoKKyAgICAgKiBAdXNlZGJ5IHJnYlRvV2Vic2FmZQorICAgICAqIEBwYXJhbSBkZWMgaW50ZWdlcgorICAgICAqIEByZXR1cm5zIGludGVnZXIKKyAgICAgKi8KKworICAgIGZ1bmN0aW9uIGRvdWJsZUhleERlYyhkZWMpCisgICAgeworICAgICAgcmV0dXJuIHBhcnNlSW50KGRlYy50b1N0cmluZygxNikgKyBkZWMudG9TdHJpbmcoMTYpLCAxNik7CisgICAgfQorCisgICAgLyoqIENvbnZlcnQgYSBnaXZlbiBSR0IgY29sb3IgdG8gdGhlIG5lYXJlc3QgIldlYi1TYWZlIiBjb2xvci4gIEEgd2Vic2FmZSBjb2xvciBvbmx5IGhhcyB0aGUgdmFsdWVzCisgICAgICogIDAwLCAzMywgNjYsIDk5LCBDQyBhbmQgRkYgZm9yIGVhY2ggb2YgdGhlIHJlZCwgZ3JlZW4gYW5kIGJsdWUgY29tcG9uZW50cyAodGh1cyA2IHNoYWRlcyBvZiBlYWNoCisgICAgICogIGluIGNvbWJpbmF0aW9uIHRvIHByb2R1Y2UgNiAqIDYgKiA2ID0gMjE2IGNvbG9ycykuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29sb3Igb2JqZWN0IHtyZWQ6MC0+MjU1LCBncmVlbjowLT4yNTUsIGJsdWU6MC0+MjU1fQorICAgICAqIEByZXR1cm5zICBvYmplY3Qge3JlZDo1MXwxMDJ8MTUzfDIwNHwyNTUsIGdyZWVuOjUxfDEwMnwxNTN8MjA0fDI1NSwgYmx1ZTo1MXwxMDJ8MTUzfDIwNHwyNTV9CisgICAgICovCisgICAgZnVuY3Rpb24gcmdiVG9XZWJzYWZlKGNvbG9yKQorICAgIHsKKyAgICAgIC8vIEZvciBlYWNoIHRha2UgdGhlIGhpZ2ggYnl0ZSwgZGl2aWRlIGJ5IHRocmVlLCByb3VuZCBhbmQgbXVsdGlwbHkgYnkgdGhyZWUgYmVmb3JlIHJvdW5kaW5nIGFnYWluCisgICAgICBjb2xvci5yZWQgICA9IGRvdWJsZUhleERlYyhuZWFyZXN0UG93ZXJPZihwYXJzZUludCh0b0hleChjb2xvci5yZWQpLmNoYXJBdCgwKSwgMTYpLCAzKSk7CisgICAgICBjb2xvci5ibHVlICA9IGRvdWJsZUhleERlYyhuZWFyZXN0UG93ZXJPZihwYXJzZUludCh0b0hleChjb2xvci5ibHVlKS5jaGFyQXQoMCksIDE2KSwgMykpOworICAgICAgY29sb3IuZ3JlZW4gPSBkb3VibGVIZXhEZWMobmVhcmVzdFBvd2VyT2YocGFyc2VJbnQodG9IZXgoY29sb3IuZ3JlZW4pLmNoYXJBdCgwKSwgMTYpLCAzKSk7CisgICAgICByZXR1cm4gY29sb3I7CisgICAgfQorCisgICAgLyoqIENvbnZlcnQgYSBjb21iaW5hdGlvbiBvZiBodWUsIHNhdHVyYXRpb24gYW5kIHZhbHVlIGludG8gYW4gUkdCIGNvbG9yLgorICAgICAqICBIdWUgaXMgZGVmaW5lZCBpbiBkZWdyZWVzLCBzYXR1cmF0aW9uIGFuZCB2YWx1ZSBhcyBhIGZsb2F0cyBiZXR3ZWVuIDAgYW5kIDEgKDAlIC0+IDEwMCUpCisgICAgICoKKyAgICAgKiBAcGFyYW0gaCBmbG9hdCBhbmdsZSBvZiBodWUgYXJvdW5kIGNvbG9yIHdoZWVsIDAtPjM2MAorICAgICAqIEBwYXJhbSBzIGZsb2F0IHNhdHVyYXRpb24gb2YgY29sb3IgKG5vIGNvbG9yIChncmV5KSkgMC0+MSAodmlicmFudCkKKyAgICAgKiBAcGFyYW0gdiBmbG9hdCB2YWx1ZSAoYnJpZ2h0bmVzcykgb2YgY29sb3IgKGJsYWNrKSAwLT4xIChicmlnaHQpCisgICAgICogQHJldHVybnMgb2JqZWN0IHtyZWQ6MC0+MjU1LCBncmVlbjowLT4yNTUsIGJsdWU6MC0+MjU1fQorICAgICAqIEBzZWVhbHNvIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSFNWX2NvbG9yX3NwYWNlCisgICAgICovCisgICAgZnVuY3Rpb24gaHN2VG9SR0IoaCxzLHYpCisgICAgeworICAgICAgdmFyIGNvbG9yczsKKyAgICAgIGlmKHMgPT09IDApCisgICAgICB7CisgICAgICAgIC8vIEdSRVkKKyAgICAgICAgY29sb3JzID0ge3JlZDp2LGdyZWVuOnYsYmx1ZTp2fTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaCAvPSA2MDsKKyAgICAgICAgdmFyIGkgPSBNYXRoLmZsb29yKGgpOworICAgICAgICB2YXIgZiA9IGggLSBpOworICAgICAgICB2YXIgcCA9IHYgKiAoMSAtIHMpOworICAgICAgICB2YXIgcSA9IHYgKiAoMSAtIHMgKiBmKTsKKyAgICAgICAgdmFyIHQgPSB2ICogKDEgLSBzICogKDEgLSBmKSApOworICAgICAgICBzd2l0Y2goaSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgMDogY29sb3JzID0gIHtyZWQ6diwgZ3JlZW46dCwgYmx1ZTpwfTsgYnJlYWs7CisgICAgICAgICAgY2FzZSAxOiBjb2xvcnMgPSAge3JlZDpxLCBncmVlbjp2LCBibHVlOnB9OyBicmVhazsKKyAgICAgICAgICBjYXNlIDI6IGNvbG9ycyA9ICB7cmVkOnAsIGdyZWVuOnYsIGJsdWU6dH07IGJyZWFrOworICAgICAgICAgIGNhc2UgMzogY29sb3JzID0gIHtyZWQ6cCwgZ3JlZW46cSwgYmx1ZTp2fTsgYnJlYWs7CisgICAgICAgICAgY2FzZSA0OiBjb2xvcnMgPSAge3JlZDp0LCBncmVlbjpwLCBibHVlOnZ9OyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OmNvbG9ycyA9ICB7cmVkOnYsIGdyZWVuOnAsIGJsdWU6cX07IGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgICBjb2xvcnMucmVkID0gTWF0aC5jZWlsKGNvbG9ycy5yZWQgKiAyNTUpOworICAgICAgY29sb3JzLmdyZWVuID0gTWF0aC5jZWlsKGNvbG9ycy5ncmVlbiAqIDI1NSk7CisgICAgICBjb2xvcnMuYmx1ZSA9IE1hdGguY2VpbChjb2xvcnMuYmx1ZSAqIDI1NSk7CisgICAgICByZXR1cm4gY29sb3JzOworICAgIH0KKyAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgZnVuY3Rpb24gY2xvc2VPbkJvZHlDbGljayAoZXYpCisgICAgeworICAgICAgZXYgPSBldiA/IGV2IDogd2luZG93LmV2ZW50OworICAgICAgZWwgPSBldi50YXJnZXQgPyBldi50YXJnZXQgOiBldi5zcmNFbGVtZW50OworICAgICAgZG8KKyAgICAgIHsKKyAgICAgICAgaWYgKGVsID09IHNlbGYudGFibGUpIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHdoaWxlIChlbCA9IGVsLnBhcmVudE5vZGUpOworICAgICAgc2VsZi5jbG9zZSgpOworICAgIH0KKyAgICAvKiogT3BlbiB0aGUgY29sb3IgcGlja2VyCisgICAgICoKKyAgICAgKiBAcGFyYW0gc3RyaW5nIGFuY2hvcmFnZSBwYWlyIG9mIHNpZGVzIG9mIGVsZW1lbnQgdG8gYW5jaG9yIHRoZSBwaWNrZXIgdG8KKyAgICAgKiAgICJ0b3AsbGVmdCIgInRvcCxyaWdodCIgImJvdHRvbSxsZWZ0IiBvciAiYm90dG9tLHJpZ2h0IgorICAgICAqIEBwYXJhbSBIVE1MX0VMRU1FTlQgZWxlbWVudCB0aGUgZWxlbWVudCB0byBhbmNob3IgdGhlIHBpY2tlciB0byBzaWRlcyBvZgorICAgICAqCisgICAgICogQG5vdGUgVGhlIGVsZW1lbnQgaXMganVzdCByZWZlcmVuY2VkIGhlcmUgZm9yIHBvc2l0aW9uaW5nIChhbmNob3JpbmcpLCBpdAorICAgICAqIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgZ2V0IHRoZSBjb2xvciBjb3BpZWQgaW50byBpdC4gIFNlZSB0aGUgdXNhZ2UgaW5zdHJ1Y3Rpb25zCisgICAgICogZm9yIHRoZSBjbGFzcy4KKyAgICAgKi8KKworICAgIHRoaXMub3BlbiA9IGZ1bmN0aW9uKGFuY2hvcmFnZSxlbGVtZW50LGluaXRjb2xvcikKKyAgICB7CisgICAgICB0aGlzLnRhYmxlLnN0eWxlLmRpc3BsYXkgPSAnJzsKKworICAgICAgdGhpcy5waWNrX2NvbG9yKCk7CisgICAgICBpZihpbml0Y29sb3IgJiYgLyNbMC05YS1mXXs2LDZ9L2kudGVzdChpbml0Y29sb3IpKQorICAgICAgeworICAgICAgICB0aGlzLmNob3NlbkNvbG9yLnZhbHVlID0gaW5pdGNvbG9yOworICAgICAgICB0aGlzLmJhY2tTYW1wbGUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gaW5pdGNvbG9yOworICAgICAgICB0aGlzLmZvcmVTYW1wbGUuc3R5bGUuY29sb3IgPSBpbml0Y29sb3I7CisgICAgICB9CisKKyAgICAgIFhpbmhhLl9hZGRFdmVudChkb2N1bWVudC5ib2R5LCdtb3VzZWRvd24nLGNsb3NlT25Cb2R5Q2xpY2spOworICAgICAgCisgICAgICAvLyBGaW5kIHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50CisgICAgICB0aGlzLnRhYmxlLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKKyAgICAgIHZhciBlID0gZWxlbWVudDsKKyAgICAgIHZhciB0b3AgID0gMDsKKyAgICAgIHZhciBsZWZ0ID0gMDsKKyAgICAgIAorICAgICAgLy8gQ2hlY2sgZm9yIG92ZXJmbG93OnNjcm9sbCBlbGVtZW50cyB3aGljaCBkbyBub3QgaGF2ZSBwb3NpdGlvbjpyZWxhdGl2ZQorICAgICAgd2hpbGUoZS5wYXJlbnROb2RlKQorICAgICAgeworICAgICAgICBlID0gZS5wYXJlbnROb2RlOworICAgICAgICBpZih0eXBlb2YgZS50YWdOYW1lICE9ICd1bmRlZmluZWQnICYmICFlLnRhZ05hbWUudG9Mb3dlckNhc2UoKS5tYXRjaCgvYm9keXxodG1sLykpCisgICAgICAgIHsKKyAgICAgICAgICBpZiggKCBlLnNjcm9sbFRvcCB8fCBlLnNjcm9sbExlZnQgKSAmJiAhZS5zdHlsZS5wb3NpdGlvbi5tYXRjaCgvZml4ZWR8YWJzb2x1dGV8cmVsYXRpdmUvKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBYaW5oYS5kZWJ1Z01zZygnV2FybmluZywgdGhlIFhpbmhhIGVkaXRvciBpcyBpbmNsdWRlZCBpbiBhICcrZS50YWdOYW1lKycgd2hpY2ggaGFzIHNjcm9sbCAob3ZlcmZsb3cpIGJ1dCBpcyBub3QgcG9zaXRpb25lZCByZWxhdGl2ZSwgYWJzb2x1dGUsIG9yIGZpeGVkLiAgVGhlIENvbG9yUGlja2VyIHBsdWdpbiBtYXkgbm90IGRpc3BsYXkgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uJywgJ3dhcm4nKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGUgPSBlbGVtZW50OworICAgICAgCisgICAgICBkbworICAgICAgeworICAgICAgICBpZiAoZS5zdHlsZS5wb3NpdGlvbiA9PSAnZml4ZWQnKSAKKyAgICAgICAgeworICAgICAgICAgIHRoaXMudGFibGUuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZihlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnYm9keScpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEkgZG9uJ3QgdGhpbmsgd2UgbmVlZCBhZGp1c3QgZm9yIHNjcm9sbCBhdCBhbGwgb24gYm9keQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gc3RhbmRhcmRzIHRoZXNlIHdvdWxkIGJlIDAgZm9yIHRoZSBib2R5ICh2cyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wL0xlZnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBxdWlya3MgdGhleSBhcmUgbm90LCBhbmQgaXQgZG9lc24ndCB3b3JrIGluIHF1aXJrcyB3aXRoIHRoZW0uCisgICAgICAgICAgdG9wICs9IGUub2Zmc2V0VG9wOyAgLy8gLSBlLnNjcm9sbFRvcDsKKyAgICAgICAgICBsZWZ0ICs9IGUub2Zmc2V0TGVmdDsvLyAtIGUuc2Nyb2xsTGVmdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvLyBDYXV0aW9uLCB1bmxlc3MgYW4gZWxlbWVudCBpcyBwb3NpdGlvbmVkIChwb3NpdGlvbjogZml4ZWQvcmVsYXRpdmUvYWJzb2x1dGUpIAorICAgICAgICAgIC8vIHRoZW4gaXQgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBiZWNhdXNlIGl0IGlzIG5vdCBhbiBvZmZzZXRQYXJlbnQKKyAgICAgICAgICAvLyBzbyBpZiB5b3UgaGFldiBhbiBvdmVyZmxvdzpzY3JvbGw7IGRpdiBjb250YWluaW5nIHlvdXIgWGluaGEsIHRoZW4geW91CisgICAgICAgICAgLy8gbXVzdCBzZXQgcG9zaXRpb246cmVsYXRpdmU7ICAob3Igb3RoZXIgcG9zaXRpb24pIG9uIGl0IGluIG9yZGVyIHRvIGdldCBpdCAKKyAgICAgICAgICAvLyB0byBiZSBjb25zaWRlcmVkLgorICAgICAgICAgIHRvcCArPSBlLm9mZnNldFRvcCAtIGUuc2Nyb2xsVG9wOworICAgICAgICAgIGxlZnQgKz0gZS5vZmZzZXRMZWZ0IC0gZS5zY3JvbGxMZWZ0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBlID0gZS5vZmZzZXRQYXJlbnQ7CisgICAgICB9CisgICAgICB3aGlsZShlKTsKKworICAgICAgdmFyIHgsIHk7CisgICAgICBpZigvdG9wLy50ZXN0KGFuY2hvcmFnZSkgfHwgKHRvcCArIHRoaXMudGFibGUub2Zmc2V0SGVpZ2h0ID4gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQpKQorICAgICAgeworICAgICAgICBpZih0b3AgLSB0aGlzLnRhYmxlLm9mZnNldEhlaWdodCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICB0aGlzLnRhYmxlLnN0eWxlLnRvcCA9ICh0b3AgLSB0aGlzLnRhYmxlLm9mZnNldEhlaWdodCkgKyAncHgnOworICAgICAgICB9IAorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICB0aGlzLnRhYmxlLnN0eWxlLnRvcCA9IDA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgdGhpcy50YWJsZS5zdHlsZS50b3AgPSAodG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQpICsgJ3B4JzsKKyAgICAgIH0KKworICAgICAgaWYoL2xlZnQvLnRlc3QoYW5jaG9yYWdlKSB8fCAobGVmdCArIHRoaXMudGFibGUub2Zmc2V0V2lkdGggPiBkb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoKSkKKyAgICAgIHsKKyAgICAgICAgaWYobGVmdCAtICh0aGlzLnRhYmxlLm9mZnNldFdpZHRoIC0gZWxlbWVudC5vZmZzZXRXaWR0aCkgPiAwICkKKyAgICAgICAgeworICAgICAgICAgIHRoaXMudGFibGUuc3R5bGUubGVmdCA9IChsZWZ0IC0gKHRoaXMudGFibGUub2Zmc2V0V2lkdGggLSBlbGVtZW50Lm9mZnNldFdpZHRoKSkgKyAncHgnOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHRoaXMudGFibGUuc3R5bGUubGVmdCA9IDA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgdGhpcy50YWJsZS5zdHlsZS5sZWZ0ID0gbGVmdCArICdweCc7CisgICAgICB9CisgICAgIC8vIElFNiBPTkxZIC0gcHJldmVudCB3aW5kb3dlZCBlbGVtZW50cyAoPFNFTEVDVD4pIHRvIHJlbmRlciBhYm92ZSB0aGUgY29sb3JwaWNrZXIKKyAgICAgIGlmICh0aGlzLmlzX2llXzYpCisgICAgICB7CisgICAgICAgIHRoaXMuaWZyYW1lLnN0eWxlLnRvcCA9IHRoaXMudGFibGUuc3R5bGUudG9wOworICAgICAgICB0aGlzLmlmcmFtZS5zdHlsZS5sZWZ0ID0gdGhpcy50YWJsZS5zdHlsZS5sZWZ0OworICAgICAgfQorICAgIH07CisKKyAgICBmdW5jdGlvbiBwaWNrQ2VsbChjZWxsKQorICAgIHsKKyAgICAgICAgcGlja2VyLmNob3NlbkNvbG9yLnZhbHVlID0gY2VsbC5jb2xvckNvZGU7CisgICAgICAgIHBpY2tlci5iYWNrU2FtcGxlLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNlbGwuY29sb3JDb2RlOworICAgICAgICBwaWNrZXIuZm9yZVNhbXBsZS5zdHlsZS5jb2xvciA9IGNlbGwuY29sb3JDb2RlOworICAgICAgICBpZigoY2VsbC5odWUgPj0gMTk1ICAmJiBjZWxsLnNhdHVyYXRpb24gPiAwLjUpIHx8IAorICAgICAgICAgICAoY2VsbC5odWUgPT09IDAgJiYgY2VsbC5zYXR1cmF0aW9uID09PSAwICYmIGNlbGwudmFsdWUgPCAwLjUpIHx8IAorICAgICAgICAgICAoY2VsbC5odWUgIT09IDAgJiYgcGlja2VyLnZhbHVlIDwgMC43NSkpCisgICAgICAgIHsKKyAgICAgICAgICBjZWxsLnN0eWxlLmJvcmRlckNvbG9yID0gJyNmZmYnOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGNlbGwuc3R5bGUuYm9yZGVyQ29sb3IgPSAnIzAwMCc7CisgICAgICAgIH0KKyAgICAgICAgcGlja3JvdyA9IGNlbGwudGhpc3JvdzsKKyAgICAgICAgcGlja2NvbCA9IGNlbGwudGhpc2NvbDsKKyAgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHBpY2tWYWx1ZShjZWxsKQorICAgIHsKKyAgIC8vICAgICBjZWxsLnN0eWxlLmJvcmRlcldpZHRoID0gJzFweCc7CisgICAvLyAgICAgY2VsbC5zdHlsZS5ib3JkZXJTdHlsZSA9ICdzb2xpZCc7CisgICAgICAgIGlmKHBpY2tlci52YWx1ZSA8IDAuNSkKKyAgICAgICAgeworICAgICAgICAgICBjZWxsLnN0eWxlLmJvcmRlckNvbG9yID0gJyNmZmYnOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGNlbGwuc3R5bGUuYm9yZGVyQ29sb3IgPSAnIzAwMCc7CisgICAgICAgIH0KKyAgICAgICAgdmFsdWVyb3cgPSBjZWxsLnRoaXNyb3c7CisgICAgICAgIHZhbHVlY29sID0gY2VsbC50aGlzY29sOworICAgICAgICBwaWNrZXIuY2hvc2VuQ29sb3IudmFsdWUgPSBwaWNrZXIuc2F2ZWRfY2VsbHNbcGlja3Jvd11bcGlja2NvbF0uY29sb3JDb2RlOworICAgICAgICBwaWNrZXIuYmFja1NhbXBsZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBwaWNrZXIuc2F2ZWRfY2VsbHNbcGlja3Jvd11bcGlja2NvbF0uY29sb3JDb2RlOworICAgICAgICBwaWNrZXIuZm9yZVNhbXBsZS5zdHlsZS5jb2xvciA9IHBpY2tlci5zYXZlZF9jZWxsc1twaWNrcm93XVtwaWNrY29sXS5jb2xvckNvZGU7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHVucGlja0NlbGwocm93LGNvbCkKKyAgICB7CisgICAgICBwaWNrZXIuc2F2ZWRfY2VsbHNbcm93XVtjb2xdLnN0eWxlLmJvcmRlckNvbG9yID0gcGlja2VyLnNhdmVkX2NlbGxzW3Jvd11bY29sXS5jb2xvckNvZGU7CisgICAgfQorICAgIAorICAgIC8qKiBEcmF3IHRoZSBjb2xvciBwaWNrZXIuICovCisgICAgdGhpcy5waWNrX2NvbG9yID0gZnVuY3Rpb24oKQorICAgIHsKKyAgICAgIHZhciByb3dzLCBjb2xzOworICAgICAgdmFyIHBpY2tlciA9IHRoaXM7CisgICAgICB2YXIgaHVlc3RlcCA9IDM1OS8odGhpcy5zaWRlKTsKKyAgICAgIHZhciBzYXR1cnN0ZXAgPSAxLyh0aGlzLnNpZGUgLSAxKTsKKyAgICAgIHZhciB2YWx1c3RlcCAgPSAxLyh0aGlzLnNpZGUgLSAxKTsKKyAgICAgIHZhciBjb25zdHJhaW4gPSB0aGlzLmNvbnN0cmFpbl9jYi5jaGVja2VkOworICAgICAgCisKKyAgICAgIGlmKHRoaXMuc2F2ZWRfY2VsbHMgPT09IG51bGwpCisgICAgICB7CisgICAgICAgIHRoaXMuc2F2ZWRfY2VsbHMgPSBbXTsKKworICAgICAgICBmb3IodmFyIHJvdyA9IDA7IHJvdyA8IHRoaXMuc2lkZTsgcm93KyspCisgICAgICAgIHsKKyAgICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOworICAgICAgICAgIHRoaXMuc2F2ZWRfY2VsbHNbcm93XSA9IFtdOworICAgICAgICAgIGZvcih2YXIgY29sID0gMDsgY29sIDwgdGhpcy5zaWRlOyBjb2wrKykKKyAgICAgICAgICB7CisgICAgICAgICAgICB2YXIgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOworICAgICAgICAgICAgaWYoY29uc3RyYWluKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB0ZC5jb2xvckNvZGUgPSB0dXBsZVRvQ29sb3IocmdiVG9XZWJzYWZlKGhzdlRvUkdCKGh1ZXN0ZXAqcm93LCBzYXR1cnN0ZXAqY29sLCB0aGlzLnZhbHVlKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB0ZC5jb2xvckNvZGUgPSB0dXBsZVRvQ29sb3IoaHN2VG9SR0IoaHVlc3RlcCpyb3csIHNhdHVyc3RlcCpjb2wsIHRoaXMudmFsdWUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuc2F2ZWRfY2VsbHNbcm93XVtjb2xdID0gdGQ7CisgICAgICAgICAgICB0ZC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNlbGxzaXplICsgJ3B4JzsKKyAgICAgICAgICAgIHRkLnN0eWxlLndpZHRoID0gdGhpcy5jZWxsc2l6ZSAtMiArJ3B4JzsKKyAgICAgICAgICAgIHRkLnN0eWxlLmJvcmRlcldpZHRoID0gJzFweCc7CisgICAgICAgICAgICB0ZC5zdHlsZS5ib3JkZXJTdHlsZSA9ICdzb2xpZCc7CisgICAgICAgICAgICB0ZC5zdHlsZS5ib3JkZXJDb2xvciA9IHRkLmNvbG9yQ29kZTsKKyAgICAgICAgICAgIHRkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRkLmNvbG9yQ29kZTsKKyAgICAgICAgICAgIGlmKHJvdyA9PSBwaWNrcm93ICYmIGNvbCA9PSBwaWNrY29sKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB0ZC5zdHlsZS5ib3JkZXJDb2xvciA9ICcjMDAwJzsKKyAgICAgICAgICAgICAgdGhpcy5jaG9zZW5Db2xvci52YWx1ZSA9IHRkLmNvbG9yQ29kZTsKKyAgICAgICAgICAgICAgdGhpcy5iYWNrU2FtcGxlLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRkLmNvbG9yQ29kZTsKKyAgICAgICAgICAgICAgdGhpcy5mb3JlU2FtcGxlLnN0eWxlLmNvbG9yID0gdGQuY29sb3JDb2RlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGQuaHVlID0gaHVlc3RlcCAqIHJvdzsKKyAgICAgICAgICAgIHRkLnNhdHVyYXRpb24gPSBzYXR1cnN0ZXAqY29sOworICAgICAgICAgICAgdGQudGhpc3JvdyA9IHJvdzsKKyAgICAgICAgICAgIHRkLnRoaXNjb2wgPSBjb2w7CisgICAgICAgICAgICB0ZC5vbm1vdXNlZG93biA9IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZW5hYmxlcGljayA9IHRydWU7CisvLyAgICAgICAgICAgIHVucGlja0NlbGwocGlja3JvdyxwaWNrY29sKTsKKyAgICAgICAgICAgICAgcGlja2VyLnNhdmVkX2NlbGxzW3BpY2tyb3ddW3BpY2tjb2xdLnN0eWxlLmJvcmRlckNvbG9yID0gcGlja2VyLnNhdmVkX2NlbGxzW3BpY2tyb3ddW3BpY2tjb2xdLmNvbG9yQ29kZTsKKyAgICAgICAgICAgICAgcGlja0NlbGwodGhpcyk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdGQub25tb3VzZW92ZXIgPSBmdW5jdGlvbigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmKGVuYWJsZXBpY2spCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwaWNrQ2VsbCh0aGlzKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHRkLm9ubW91c2VvdXQgPSBmdW5jdGlvbigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmKGVuYWJsZXBpY2spCisgICAgICAgICAgICAgIHsKKyAgICAvLyAgICAgICAgICB0aGlzLnN0eWxlLmJvcmRlckNvbG9yID0gcGlja2VyLnNhdmVkX2NlbGxzW3RoaXMudGhpc3Jvd11bdGhpcy50aGlzY29sXS5jb2xvckNvZGU7CisgICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5ib3JkZXJDb2xvciA9IHRoaXMuY29sb3JDb2RlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdGQub25kYmxjbGljayA9IGZ1bmN0aW9uKCkgeyBYaW5oYS5jb2xvclBpY2tlci5yZW1lbWJlcih0aGlzLmNvbG9yQ29kZSwgcGlja2VyLnNhdmVjb2xvcnMpOyBwaWNrZXIuY2FsbGJhY2sodGhpcy5jb2xvckNvZGUpOyBwaWNrZXIuY2xvc2UoKTsgfTsKKyAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgJykpOworICAgICAgICAgICAgdGQuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInOworICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOworICAgICAgICAgICAgdGQgPSBudWxsOworICAgICAgICAgIH0KKworICAgICAgICAgIC8vIEFkZCBhIGJsYW5rIGFuZCB0aGVuIGEgdmFsdWUgY29sdW1uCisgICAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKKyAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpKTsKKyAgICAgICAgICB0ZC5zdHlsZS53aWR0aCA9IHRoaXMuY2VsbHNpemUgKyAncHgnOworICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKKyAgICAgICAgICB0ZCA9IG51bGw7CisKKyAgICAgICAgICB2YXIgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOworICAgICAgICAgIHRoaXMuc2F2ZWRfY2VsbHNbcm93XVtjb2wrMV0gPSB0ZDsKKyAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpKTsKKyAgICAgICAgICB0ZC5zdHlsZS53aWR0aCAgPSB0aGlzLmNlbGxzaXplIC0yICsgJ3B4JzsKKyAgICAgICAgICB0ZC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNlbGxzaXplICsgJ3B4JzsKKyAgICAgICAgICB0ZC5jb25zdHJhaW5lZENvbG9yQ29kZSAgPSB0dXBsZVRvQ29sb3IocmdiVG9XZWJzYWZlKGhzdlRvUkdCKDAsMCx2YWx1c3RlcCpyb3cpKSk7CisgICAgICAgICAgdGQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGQuY29sb3JDb2RlID0gdHVwbGVUb0NvbG9yKGhzdlRvUkdCKDAsMCx2YWx1c3RlcCpyb3cpKTsKKyAgICAgICAgICB0ZC5zdHlsZS5ib3JkZXJXaWR0aCA9ICcxcHgnOworICAgICAgICAgIHRkLnN0eWxlLmJvcmRlclN0eWxlID0gJ3NvbGlkJzsKKy8vICAgICAgICAgIHRkLnN0eWxlLmJvcmRlckNvbG9yID0gdGQuc3R5bGUuYmFja2dyb3VuZENvbG9yOworICAgICAgICAgIHRkLnN0eWxlLmJvcmRlckNvbG9yID0gdGQuY29sb3JDb2RlOworICAgICAgICAgIGlmKHJvdyA9PSB2YWx1ZXJvdykKKyAgICAgICAgICB7CisgICAgICAgICAgICB0ZC5zdHlsZS5ib3JkZXJDb2xvciA9ICdibGFjayc7CisgICAgICAgICAgfQorICAgICAgICAgIHRkLmh1ZSA9IGh1ZXN0ZXAgKiByb3c7CisgICAgICAgICAgdGQuc2F0dXJhdGlvbiA9IHNhdHVyc3RlcCpjb2w7CisgICAgICAgICAgdGQuaHN2X3ZhbHVlID0gdmFsdXN0ZXAqcm93OworICAgICAgICAgIHRkLnRoaXNyb3cgPSByb3c7CisgICAgICAgICAgdGQudGhpc2NvbCA9IGNvbCArIDE7CisgICAgICAgICAgdGQub25tb3VzZWRvd24gPSBmdW5jdGlvbigpCisgICAgICAgICAgeworICAgICAgICAgICAgZW5hYmxldmFsdWUgPSB0cnVlOworLy8gICAgICAgICAgdW5waWNrQ2VsbCh2YWx1ZXJvdyx2YWx1ZWNvbCk7CisgICAgICAgICAgICBwaWNrZXIuc2F2ZWRfY2VsbHNbdmFsdWVyb3ddW3ZhbHVlY29sXS5zdHlsZS5ib3JkZXJDb2xvciA9IHBpY2tlci5zYXZlZF9jZWxsc1t2YWx1ZXJvd11bdmFsdWVjb2xdLmNvbG9yQ29kZTsKKyAgICAgICAgICAgIHBpY2tlci52YWx1ZSA9IHRoaXMuaHN2X3ZhbHVlOyAKKyAgICAgICAgICAgIHBpY2tlci5waWNrX2NvbG9yKCk7CisgICAgICAgICAgICBwaWNrVmFsdWUodGhpcyk7CisgICAgICAgICAgfTsKKyAgICAgICAgICB0ZC5vbm1vdXNlb3ZlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYoZW5hYmxldmFsdWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHBpY2tlci52YWx1ZSA9IHRoaXMuaHN2X3ZhbHVlOyAKKyAgICAgICAgICAgICAgcGlja2VyLnBpY2tfY29sb3IoKTsKKyAgICAgICAgICAgICAgcGlja1ZhbHVlKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgIH07CisgICAgICAgICAgdGQub25tb3VzZW91dCA9IGZ1bmN0aW9uKCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZihlbmFibGV2YWx1ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAvLyAgICAgICB0aGlzLnN0eWxlLmJvcmRlcldpZHRoID0gMDsKKyAgICAgICAvLyAgICAgICB0aGlzLnN0eWxlLmJvcmRlclN0eWxlID0gJ25vbmUnOworICAgICAgICAgICAgICB0aGlzLnN0eWxlLmJvcmRlckNvbG9yID0gdGhpcy5jb2xvckNvZGU7Ly8nJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9OworICAgICAgICAgIHRkLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJzsKKyAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CisgICAgICAgICAgdGQgPSBudWxsOworCisgICAgICAgICAgdGhpcy50Ym9keS5hcHBlbmRDaGlsZCh0cik7CisgICAgICAgICAgdHIgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWRkIG9uZSByb3cgb2YgZ3JleXMKKyAgICAgICAgdmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKKyAgICAgICAgdGhpcy5zYXZlZF9jZWxsc1tyb3ddID0gW107CisgICAgICAgIGZvcih2YXIgY29sID0gMDsgY29sIDwgdGhpcy5zaWRlOyBjb2wrKykKKyAgICAgICAgeworICAgICAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CisgICAgICAgICAgaWYoY29uc3RyYWluKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHRkLmNvbG9yQ29kZSA9IHR1cGxlVG9Db2xvcihyZ2JUb1dlYnNhZmUoaHN2VG9SR0IoMCwgMCwgdmFsdXN0ZXAqKHRoaXMuc2lkZS1jb2wtMSkpKSk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICB0ZC5jb2xvckNvZGUgPSB0dXBsZVRvQ29sb3IoaHN2VG9SR0IoMCwgMCwgdmFsdXN0ZXAqKHRoaXMuc2lkZS1jb2wtMSkpKTsKKyAgICAgICAgICB9CisgICAgICAgICAgdGhpcy5zYXZlZF9jZWxsc1tyb3ddW2NvbF0gPSB0ZDsKKyAgICAgICAgICB0ZC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNlbGxzaXplICsgJ3B4JzsKKyAgICAgICAgICB0ZC5zdHlsZS53aWR0aCA9IHRoaXMuY2VsbHNpemUgLTIgKydweCc7CisgICAgICAgICAgdGQuc3R5bGUuYm9yZGVyV2lkdGggPSAnMXB4JzsKKyAgICAgICAgICB0ZC5zdHlsZS5ib3JkZXJTdHlsZSA9ICdzb2xpZCc7CisgICAgICAgICAgdGQuc3R5bGUuYm9yZGVyQ29sb3IgPSB0ZC5jb2xvckNvZGU7CisgICAgICAgICAgdGQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGQuY29sb3JDb2RlOworICAgICAgICAgIHRkLmh1ZSA9IDA7CisgICAgICAgICAgdGQuc2F0dXJhdGlvbiA9IDA7CisgICAgICAgICAgdGQudmFsdWUgPSB2YWx1c3RlcCoodGhpcy5zaWRlLWNvbC0xKTsKKyAgICAgICAgICB0ZC50aGlzcm93ID0gcm93OworICAgICAgICAgIHRkLnRoaXNjb2wgPSBjb2w7CisgICAgICAgICAgdGQub25tb3VzZWRvd24gPSBmdW5jdGlvbigpCisgICAgICAgICAgeworICAgICAgICAgICAgZW5hYmxlcGljayA9IHRydWU7CisgIC8vICAgICAgICAgIHVucGlja0NlbGwocGlja3JvdyxwaWNrY29sKTsKKyAgICAgICAgICAgIHBpY2tlci5zYXZlZF9jZWxsc1twaWNrcm93XVtwaWNrY29sXS5zdHlsZS5ib3JkZXJDb2xvciA9IHBpY2tlci5zYXZlZF9jZWxsc1twaWNrcm93XVtwaWNrY29sXS5jb2xvckNvZGU7CisgICAgICAgICAgICBwaWNrQ2VsbCh0aGlzKTsKKyAgICAgICAgICB9OworICAgICAgICAgIHRkLm9ubW91c2VvdmVyID0gZnVuY3Rpb24oKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmKGVuYWJsZXBpY2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHBpY2tDZWxsKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgIH07CisgICAgICAgICAgdGQub25tb3VzZW91dCA9IGZ1bmN0aW9uKCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZihlbmFibGVwaWNrKQorICAgICAgICAgICAgeworICAgLy8gICAgICAgICAgIHRoaXMuc3R5bGUuYm9yZGVyQ29sb3IgPSBwaWNrZXIuc2F2ZWRfY2VsbHNbdGhpcy50aGlzcm93XVt0aGlzLnRoaXNjb2xdLmNvbG9yQ29kZTsKKyAgICAgICAgICAgICAgdGhpcy5zdHlsZS5ib3JkZXJDb2xvciA9IHRoaXMuY29sb3JDb2RlOworICAgICAgICAgICAgfQorICAgICAgICAgIH07CisgICAgICAgICAgdGQub25kYmxjbGljayA9IGZ1bmN0aW9uKCkgeyBYaW5oYS5jb2xvclBpY2tlci5yZW1lbWJlcih0aGlzLmNvbG9yQ29kZSwgcGlja2VyLnNhdmVjb2xvcnMpOyBwaWNrZXIuY2FsbGJhY2sodGhpcy5jb2xvckNvZGUpOyBwaWNrZXIuY2xvc2UoKTsgfTsKKyAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpKTsKKyAgICAgICAgICB0ZC5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7CisgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOworICAgICAgICAgIHRkID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnRib2R5LmFwcGVuZENoaWxkKHRyKTsKKyAgICAgICAgdHIgPSBudWxsOworCisgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CisgICAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CisgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKKyAgICAgICAgdGQuY29sU3BhbiA9IHRoaXMuc2lkZSArIDI7CisgICAgICAgIHRkLnN0eWxlLnBhZGRpbmcgPSAnM3B4JzsKKworICAgICAgICBpZiAoIHRoaXMud2Vic2FmZSApCisgICAgICAgIHsKKyAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICB2YXIgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpOworICAgICAgICBsYWJlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShYaW5oYS5fbGMoJ1dlYiBTYWZlOiAnLCAnQ29sb3JQaWNrZXInKSkpOworCisgICAgICAgIHRoaXMuY29uc3RyYWluX2NiLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsgcGlja2VyLnBpY2tfY29sb3IoKTsgfTsKKyAgICAgICAgbGFiZWwuYXBwZW5kQ2hpbGQodGhpcy5jb25zdHJhaW5fY2IpOworICAgICAgICBsYWJlbC5zdHlsZS5mb250RmFtaWx5ID0gJ3NtYWxsLWNhcHRpb24sY2FwdGlvbixzYW5zLXNlcmlmJzsKKyAgICAgICAgbGFiZWwuc3R5bGUuZm9udFNpemUgPSAneC1zbWFsbCc7CisgICAgICAgIGRpdi5hcHBlbmRDaGlsZChsYWJlbCk7CisgICAgICAgIHRkLmFwcGVuZENoaWxkKGRpdik7CisgICAgICAgIGRpdiA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7CisgICAgICAgIGxhYmVsLnN0eWxlLmZvbnRGYW1pbHkgPSAnc21hbGwtY2FwdGlvbixjYXB0aW9uLHNhbnMtc2VyaWYnOworICAgICAgICBsYWJlbC5zdHlsZS5mb250U2l6ZSA9ICd4LXNtYWxsJzsKKyAgICAgICAgbGFiZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoWGluaGEuX2xjKCdDb2xvcjogJywgJ0NvbG9yUGlja2VyJykpKTsKKyAgICAgICAgbGFiZWwuYXBwZW5kQ2hpbGQodGhpcy5jaG9zZW5Db2xvcik7CisgICAgICAgIGRpdi5hcHBlbmRDaGlsZChsYWJlbCk7CisgICAgICAgIHZhciBidXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CisgICAgICAgIGJ1dC5jbGFzc05hbWUgPSAiYnV0dG9uQ29sb3IgIjsKKyAgICAgICAgYnV0LnN0eWxlLmZvbnRTaXplID0gJzEzcHgnOworICAgICAgICBidXQuc3R5bGUud2lkdGggPSAnMjRweCc7CisgICAgICAgIGJ1dC5zdHlsZS5tYXJnaW5MZWZ0ID0gJzJweCc7CisgICAgICAgIGJ1dC5zdHlsZS5wYWRkaW5nID0gJzBweCA0cHgnOworICAgICAgICBidXQuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInOworICAgICAgICBidXQub25jbGljayA9IGZ1bmN0aW9uKCkgeyBYaW5oYS5jb2xvclBpY2tlci5yZW1lbWJlcihwaWNrZXIuY2hvc2VuQ29sb3IudmFsdWUsIHBpY2tlci5zYXZlY29sb3JzKTsgcGlja2VyLmNhbGxiYWNrKHBpY2tlci5jaG9zZW5Db2xvci52YWx1ZSk7IHBpY2tlci5jbG9zZSgpOyB9OworICAgICAgICBidXQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoWGluaGEuX2xjKCdPSycsICdDb2xvclBpY2tlcicpKSk7CisgICAgICAgIGJ1dC5hbGlnbiA9ICdjZW50ZXInOworICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoYnV0KTsKKyAgICAgICAgdGQuYXBwZW5kQ2hpbGQoZGl2KTsKKworICAgICAgICB2YXIgc2FtcGxlVGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpOworICAgICAgICBzYW1wbGVUYWJsZS5zdHlsZS53aWR0aCA9ICcxMDAlJzsKKyAgICAgICAgdmFyIHNhbXBsZUJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0Ym9keScpOworICAgICAgICBzYW1wbGVUYWJsZS5hcHBlbmRDaGlsZChzYW1wbGVCb2R5KTsKKyAgICAgICAgdmFyIHNhbXBsZVJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CisgICAgICAgIHNhbXBsZUJvZHkuYXBwZW5kQ2hpbGQoc2FtcGxlUm93KTsKKyAgICAgICAgdmFyIGxlZnRTYW1wbGVDZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKKyAgICAgICAgc2FtcGxlUm93LmFwcGVuZENoaWxkKGxlZnRTYW1wbGVDZWxsKTsKKyAgICAgICAgbGVmdFNhbXBsZUNlbGwuYXBwZW5kQ2hpbGQodGhpcy5iYWNrU2FtcGxlKTsKKyAgICAgICAgbGVmdFNhbXBsZUNlbGwuc3R5bGUud2lkdGggPSAnNTAlJzsKKyAgICAgICAgdmFyIHJpZ2h0U2FtcGxlQ2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CisgICAgICAgIHNhbXBsZVJvdy5hcHBlbmRDaGlsZChyaWdodFNhbXBsZUNlbGwpOworICAgICAgICByaWdodFNhbXBsZUNlbGwuYXBwZW5kQ2hpbGQodGhpcy5mb3JlU2FtcGxlKTsKKyAgICAgICAgcmlnaHRTYW1wbGVDZWxsLnN0eWxlLndpZHRoID0gJzUwJSc7CisKKyAgICAgICAgdGQuYXBwZW5kQ2hpbGQoc2FtcGxlVGFibGUpOworICAgICAgICB2YXIgc2F2ZWRDb2xvcnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgc2F2ZWRDb2xvcnMuc3R5bGUuY2xlYXIgPSAnYm90aCc7CisKKyAgICAgICAgZnVuY3Rpb24gY3JlYXRlU2F2ZWRDb2xvcnMoY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICB2YXIgaXNfaWUgPSBYaW5oYS5pc19pZTsKKworICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgICBkaXYuc3R5bGUud2lkdGggPSBwaWNrZXIuY2VsbHNpemUgKyAncHgnOy8vMTNweCc7CisgICAgICAgICAgZGl2LnN0eWxlLmhlaWdodCA9IHBpY2tlci5jZWxsc2l6ZSArICdweCc7Ly8xM3B4JzsKKyAgICAgICAgICBkaXYuc3R5bGUubWFyZ2luID0gJzFweCc7CisgICAgICAgICAgZGl2LnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgYmxhY2snOworICAgICAgICAgIGRpdi5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7CisgICAgICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yOworICAgICAgICAgIGRpdi5zdHlsZVsgaXNfaWUgPyAnc3R5bGVGbG9hdCcgOiAnY3NzRmxvYXQnXSA9ICdsZWZ0JzsKKyAgICAgLy8gICAgIGRpdi5vbmNsaWNrID0gZnVuY3Rpb24oKSB7IHBpY2tlci5jYWxsYmFjayhjb2xvcik7IHBpY2tlci5jbG9zZSgpOyB9OworICAgICAgICAgIGRpdi5vbmRibGNsaWNrID0gZnVuY3Rpb24oKSB7IHBpY2tlci5jYWxsYmFjayhjb2xvcik7IHBpY2tlci5jbG9zZSgpOyB9OworICAgLy8gICAgICAgZGl2Lm9ubW91c2VvdmVyID0gZnVuY3Rpb24oKQorICAgICAgICAgIGRpdi5vbmNsaWNrID0gZnVuY3Rpb24oKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHBpY2tlci5jaG9zZW5Db2xvci52YWx1ZSA9IGNvbG9yOworICAgICAgICAgICAgcGlja2VyLmJhY2tTYW1wbGUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3I7CisgICAgICAgICAgICBwaWNrZXIuZm9yZVNhbXBsZS5zdHlsZS5jb2xvciA9IGNvbG9yOworICAgICAgICAgIH07CisgICAgICAgICAgc2F2ZWRDb2xvcnMuYXBwZW5kQ2hpbGQoZGl2KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKCB2YXIgc2F2ZWRDb2xzID0gMDsgc2F2ZWRDb2xzIDwgWGluaGEuY29sb3JQaWNrZXIuc2F2ZWRDb2xvcnMubGVuZ3RoOyBzYXZlZENvbHMrKyApCisgICAgICAgIHsKKyAgICAgICAgICBjcmVhdGVTYXZlZENvbG9ycyhYaW5oYS5jb2xvclBpY2tlci5zYXZlZENvbG9yc1tzYXZlZENvbHNdKTsKKyAgICAgICAgfQorICAgICAgICB0ZC5hcHBlbmRDaGlsZChzYXZlZENvbG9ycyk7CisKKyAgICAgICAgdGhpcy50Ym9keS5hcHBlbmRDaGlsZCh0cik7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy50YWJsZSk7CisgICAgICAgIAorICAgICAgICAvL3B1dCBhbiBpZnJhbWUgYmVoaW5kIHRoZSB0YWJsZSB0byBtYXNrIHNlbGVjdCBsaXN0cyBpbiBpZQorICAgICAgICAvLyBJRTYgT05MWSAtIHByZXZlbnQgd2luZG93ZWQgZWxlbWVudHMgKDxTRUxFQ1Q+KSB0byByZW5kZXIgYWJvdmUgdGhlIGNvbG9ycGlja2VyCisgICAgICAgIGlmICh0aGlzLmlzX2llXzYpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoICF0aGlzLmlmcmFtZSApCisgICAgICAgICAgeworICAgICAgICAgICAgdGhpcy5pZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKyAgICAgICAgICAgIHRoaXMuaWZyYW1lLmZyYW1lQm9yZGVyID0gMDsKKyAgICAgICAgICAgIHRoaXMuaWZyYW1lLnNyYyA9ICJqYXZhc2NyaXB0OjsiOworICAgICAgICAgICAgdGhpcy5pZnJhbWUuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOworICAgICAgICAgICAgdGhpcy5pZnJhbWUuc3R5bGUud2lkdGggPSB0aGlzLnRhYmxlLm9mZnNldFdpZHRoOworICAgICAgICAgICAgdGhpcy5pZnJhbWUuc3R5bGUuaGVpZ2h0ID0gdGhpcy50YWJsZS5vZmZzZXRIZWlnaHQ7CisgICAgICAgICAgICB0aGlzLmlmcmFtZS5zdHlsZS56SW5kZXggPSAnMTA0OSc7CisgICAgICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZSh0aGlzLmlmcmFtZSwgdGhpcy50YWJsZSk7CisgICAgICAgICAgfQorICAgICAgICAgIHRoaXMuaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBmb3IodmFyIHJvdyA9IDA7IHJvdyA8IHRoaXMuc2lkZTsgcm93KyspCisgICAgICAgIHsKKyAgICAgICAgICBmb3IodmFyIGNvbCA9IDA7IGNvbCA8IHRoaXMuc2lkZTsgY29sKyspCisgICAgICAgICAgeworICAgICAgICAgICAgaWYoY29uc3RyYWluKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB0aGlzLnNhdmVkX2NlbGxzW3Jvd11bY29sXS5jb2xvckNvZGUgPSB0dXBsZVRvQ29sb3IocmdiVG9XZWJzYWZlKGhzdlRvUkdCKGh1ZXN0ZXAqcm93LCBzYXR1cnN0ZXAqY29sLCB0aGlzLnZhbHVlKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB0aGlzLnNhdmVkX2NlbGxzW3Jvd11bY29sXS5jb2xvckNvZGUgPSB0dXBsZVRvQ29sb3IoaHN2VG9SR0IoaHVlc3RlcCpyb3csIHNhdHVyc3RlcCpjb2wsIHRoaXMudmFsdWUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuc2F2ZWRfY2VsbHNbcm93XVtjb2xdLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2F2ZWRfY2VsbHNbcm93XVtjb2xdLmNvbG9yQ29kZTsKKyAgICAgICAgICAgIHRoaXMuc2F2ZWRfY2VsbHNbcm93XVtjb2xdLnN0eWxlLmJvcmRlckNvbG9yID0gdGhpcy5zYXZlZF9jZWxsc1tyb3ddW2NvbF0uY29sb3JDb2RlOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgcGlja2NlbGwgPSB0aGlzLnNhdmVkX2NlbGxzW3BpY2tyb3ddW3BpY2tjb2xdOworICAgICAgICB0aGlzLmNob3NlbkNvbG9yLnZhbHVlID0gcGlja2NlbGwuY29sb3JDb2RlOworICAgICAgICB0aGlzLmJhY2tTYW1wbGUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gcGlja2NlbGwuY29sb3JDb2RlOworICAgICAgICB0aGlzLmZvcmVTYW1wbGUuc3R5bGUuY29sb3IgPSBwaWNrY2VsbC5jb2xvckNvZGU7CisgICAgICAgIGlmKChwaWNrY2VsbC5odWUgPj0gMTk1ICAmJiBwaWNrY2VsbC5zYXR1cmF0aW9uID4gMC41KSB8fCAKKyAgICAgICAgICAgKHBpY2tjZWxsLmh1ZSA9PT0gMCAmJiBwaWNrY2VsbC5zYXR1cmF0aW9uID09PSAwICYmIHBpY2tjZWxsLnZhbHVlIDwgMC41KSB8fCAKKyAgICAgICAgICAgKHBpY2tjZWxsLmh1ZSAhPT0gMCAmJiBwaWNrZXIudmFsdWUgPCAwLjc1KSkKKyAgICAgICAgeworICAgICAgICAgICBwaWNrY2VsbC5zdHlsZS5ib3JkZXJDb2xvciA9ICcjZmZmJzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBwaWNrY2VsbC5zdHlsZS5ib3JkZXJDb2xvciA9ICcjMDAwJzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisKKyAgICAvKiogQ2xvc2UgdGhlIGNvbG9yIHBpY2tlciAqLworICAgIHRoaXMuY2xvc2UgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgWGluaGEuX3JlbW92ZUV2ZW50KGRvY3VtZW50LmJvZHksJ21vdXNlZG93bicsY2xvc2VPbkJvZHlDbGljayk7CisgICAgICB0aGlzLnRhYmxlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAvLyBJRTYgT05MWSAtIHByZXZlbnQgd2luZG93ZWQgZWxlbWVudHMgKDxTRUxFQ1Q+KSB0byByZW5kZXIgYWJvdmUgdGhlIGNvbG9ycGlja2VyCisgICAgICBpZiAodGhpcy5pc19pZV82KQorICAgICAgeworICAgICAgICBpZiAoIHRoaXMuaWZyYW1lICkgeyB0aGlzLmlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9CisgICAgICB9CisgICAgfTsKK30gLy8gZW5kIFhpbmhhLmNvbG9yUGlja2VyCisKKy8vIGFycmF5IG9mIHRoZSBzYXZlZCBjb2xvcnMKK1hpbmhhLmNvbG9yUGlja2VyLnNhdmVkQ29sb3JzID0gW107CisKKy8vIGFkZCB0aGUgY29sb3IgdG8gdGhlIHNhdmVkQ29sb3JzCitYaW5oYS5jb2xvclBpY2tlci5yZW1lbWJlciA9IGZ1bmN0aW9uKGNvbG9yLCBzYXZlY29sb3JzKQoreworICAvLyBjaGVjayBpZiB0aGlzIGNvbG9yIGlzIGtub3duCisgIGZvciAoIHZhciBpID0gWGluaGEuY29sb3JQaWNrZXIuc2F2ZWRDb2xvcnMubGVuZ3RoOyBpLS07ICkKKyAgeworICAgIGlmICggWGluaGEuY29sb3JQaWNrZXIuc2F2ZWRDb2xvcnNbaV0gPT0gY29sb3IgKQorICAgIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKyAgLy8gaW5zZXJ0IHRoZSBuZXcgY29sb3IKKyAgWGluaGEuY29sb3JQaWNrZXIuc2F2ZWRDb2xvcnMuc3BsaWNlKDAsIDAsIGNvbG9yKTsKKyAgLy8gbGltaXQgZWxlbWVudHMKKyAgWGluaGEuY29sb3JQaWNrZXIuc2F2ZWRDb2xvcnMgPSBYaW5oYS5jb2xvclBpY2tlci5zYXZlZENvbG9ycy5zbGljZSgwLCBzYXZlY29sb3JzKTsKKyAgLy9bbW9raGV0XSBwcm9iYWJseSBzb21lIG1vcmUgcGFyYW1ldGVycyB0byBzZW5kIHRvIHRoZSBjb29raWUgZGVmaW5pdGlvbgorICAvLyBsaWtlIGRvbWFpbiwgc2VjdXJlIGFuZCBzdWNoLCBlc3BlY2lhbGx5IHdpdGggaHR0cHMgY29ubmVjdGlvbiBpIHByZXN1bWUKKyAgLy8gc2F2ZSB0aGUgY29va2llCisgIHZhciBleHBkYXRlID0gbmV3IERhdGUoKTsKKyAgZXhwZGF0ZS5zZXRNb250aChleHBkYXRlLmdldE1vbnRoKCkgKyAxKTsKKworICBkb2N1bWVudC5jb29raWUgPSAnWGluaGFDb2xvclBpY2tlcj0nICsgZXNjYXBlIChYaW5oYS5jb2xvclBpY2tlci5zYXZlZENvbG9ycy5qb2luKCctJykpICsgJztleHBpcmVzPScgKyBleHBkYXRlLnRvR01UU3RyaW5nKCk7CisgIHJldHVybiB0cnVlOworfTsKKworLy8gdHJ5IHRvIHJlYWQgdGhlIGNvbG9ycyBmcm9tIHRoZSBjb29raWUKK1hpbmhhLmNvbG9yUGlja2VyLmxvYWRDb2xvcnMgPSBmdW5jdGlvbigpCit7CisgIHZhciBpbmRleCA9IGRvY3VtZW50LmNvb2tpZS5pbmRleE9mKCdYaW5oYUNvbG9yUGlja2VyJyk7CisgIGlmICggaW5kZXggIT0gLTEgKQorICB7CisgICAgdmFyIGJlZ2luID0gKGRvY3VtZW50LmNvb2tpZS5pbmRleE9mKCc9JywgaW5kZXgpICsgMSk7CisgICAgdmFyIGVuZCA9IGRvY3VtZW50LmNvb2tpZS5pbmRleE9mKCc7JywgaW5kZXgpOworICAgIGlmICggZW5kID09IC0xICkgeyBlbmQgPSBkb2N1bWVudC5jb29raWUubGVuZ3RoOyB9CisgICAgWGluaGEuY29sb3JQaWNrZXIuc2F2ZWRDb2xvcnMgPSB1bmVzY2FwZShkb2N1bWVudC5jb29raWUuc3Vic3RyaW5nKGJlZ2luLCBlbmQpKS5zcGxpdCgnLScpOworICB9Cit9OworCisKKworLyoqIENyZWF0ZSBhIG5lYXQgbGl0dGxlIGJveCBuZXh0IHRvIGFuIGlucHV0IGZpZWxkCisgKiAgICAqIHNob3dzIGFjdHVhbCBjb2xvcgorICogICAgKiBvcGVucyBjb2xvclBpY2tlciBvbiBjbGljaworICogICAgKiBoYXMgYSBidXR0b24gdG8gY2xlYXIgdGhlIGNvbG9yIHdpdGggYSBjbGljaworICoKKyAqICBAcGFyYW0gaW5wdXQgKERPTSBlbGVtZW50KSAKKyAqICBAcGFyYW0gb3B0aW9uYWwgcGlja2VyQ29uZmlnIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBYaW5oYS5jb2xvclBpY2tlcigpCisgKi8KK1hpbmhhLmNvbG9yUGlja2VyLklucHV0QmluZGluZyA9IGZ1bmN0aW9uKGlucHV0LHBpY2tlckNvbmZpZykKK3sKKyAgdmFyIGRvYyA9IGlucHV0Lm93bmVyRG9jdW1lbnQ7CisgIHZhciBtYWluID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKKyAgbWFpbi5jbGFzc05hbWUgPSAiYnV0dG9uQ29sb3IiOworICAKKyAgdmFyIGNob29zZXIgPSB0aGlzLmNob29zZXIgPSBkb2MuY3JlYXRlRWxlbWVudCgnc3BhbicpOworICBjaG9vc2VyLmNsYXNzTmFtZSA9ICJjaG9vc2VyIjsKKyAgaWYgKGlucHV0LnZhbHVlKSBjaG9vc2VyLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGlucHV0LnZhbHVlOworICBjaG9vc2VyLm9ubW91c2VvdmVyID0gZnVuY3Rpb24oKSB7Y2hvb3Nlci5jbGFzc05hbWUgPSAiY2hvb3NlciBidXR0b25Db2xvci1oaWxpdGUiO307CisgIGNob29zZXIub25tb3VzZW91dCA9IGZ1bmN0aW9uKCkge2Nob29zZXIuY2xhc3NOYW1lID0gImNob29zZXIiO307CisgIGNob29zZXIuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCdcdTAwYTAnKSk7CisgIG1haW4uYXBwZW5kQ2hpbGQoY2hvb3Nlcik7CisgIHZhciBjbGVhckNvbG9yID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKKyAgY2xlYXJDb2xvci5jbGFzc05hbWUgPSAibm9jb2xvciI7CisgIGNsZWFyQ29sb3Iub25tb3VzZW92ZXIgPSBmdW5jdGlvbigpIHtjbGVhckNvbG9yLmNsYXNzTmFtZSA9ICJub2NvbG9yIGJ1dHRvbkNvbG9yLWhpbGl0ZSI7IGNsZWFyQ29sb3Iuc3R5bGUuY29sb3I9JyNmMDAnfTsKKyAgY2xlYXJDb2xvci5vbm1vdXNlb3V0ID0gZnVuY3Rpb24oKSB7Y2xlYXJDb2xvci5jbGFzc05hbWUgPSAibm9jb2xvciI7IGNsZWFyQ29sb3Iuc3R5bGUuY29sb3I9JyMwMDAnfTsKKyAgY2xlYXJDb2xvci5vbmNsaWNrID0gZnVuY3Rpb24oKSB7aW5wdXQudmFsdWUgPScnO2Nob29zZXIuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyd9OworICBjbGVhckNvbG9yLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgnXHUwMGQ3JykpOworICBtYWluLmFwcGVuZENoaWxkKGNsZWFyQ29sb3IpOworICAKKyAgaW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobWFpbixpbnB1dC5uZXh0U2libGluZyk7CisgIAorICBYaW5oYS5fYWRkRXZlbnQoaW5wdXQsJ2NoYW5nZScsZnVuY3Rpb24oKSB7Y2hvb3Nlci5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLnZhbHVlO30pCisKKyAgcGlja2VyQ29uZmlnID0gKHBpY2tlckNvbmZpZykgPyBYaW5oYS5jbG9uZU9iamVjdChwaWNrZXJDb25maWcpIDogeyBjZWxsc2l6ZTonNXB4JyB9OworICBwaWNrZXJDb25maWcuY2FsbGJhY2sgPSAocGlja2VyQ29uZmlnLmNhbGxiYWNrKSA/IHBpY2tlckNvbmZpZy5jYWxsYmFjayA6IGZ1bmN0aW9uKGNvbG9yKSB7Y2hvb3Nlci5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjtpbnB1dC52YWx1ZT1jb2xvcjtpZih0eXBlb2YgaW5wdXQub25jb2xvcnBpY2tlZCA9PSAnZnVuY3Rpb24nKSBpbnB1dC5vbmNvbG9ycGlja2VkKCk7fTsKKworICBjaG9vc2VyLm9uY2xpY2sgPSBmdW5jdGlvbigpIAorICB7IAorICAgIHZhciBjb2xQaWNrZXIgPSBuZXcgWGluaGEuY29sb3JQaWNrZXIocGlja2VyQ29uZmlnKTsKKyAgICBjb2xQaWNrZXIub3BlbigiIixjaG9vc2VyLCBpbnB1dC52YWx1ZSApOyAKKyAgfQorICBYaW5oYS5mcmVlTGF0ZXIodGhpcywiY2hvb3NlciIpOworfQorWGluaGEuY29sb3JQaWNrZXIuSW5wdXRCaW5kaW5nLnByb3RvdHlwZS5zZXRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcikKK3sKKyAgdGhpcy5jaG9vc2VyLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yOworfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZTZiMjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvY2guanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJPSyI6ICLlpb0iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9jei5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9jei5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjc2MjUwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2N6LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY3oiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ29sb3I6ICI6ICJCYXJ2YSIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvZGEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvZGEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4YjY2MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9kYS5qcwpAQCAtMCwwICsxLDE4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNsaWNrIGEgY29sb3IuLi4iOiAiVsOmbGcgZmFydmUiLAorICAgICJDbG9zZSI6ICJMdWsiLAorICAgICJDb2xvcjogIjogIkZhcnZlOiAiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlNhbXBsZSI6ICJFa3NlbXBlbCIsCisgICAgIldlYiBTYWZlOiAiOiAiV2ViIFNhZmU6ICIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2RlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNTI4NWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvZGUuanMKQEAgLTAsMCArMSwxOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDbGljayBhIGNvbG9yLi4uIjogIkZhcmJlIHfDpGhsZW4iLAorICAgICJDbG9zZSI6ICJTY2hsaWXDn2VuIiwKKyAgICAiQ29sb3I6ICI6ICJGYXJiZTogIiwKKyAgICAiT0siOiAiT0siLAorICAgICJTYW1wbGUiOiAiQmVpc3BpZWwiLAorICAgICJXZWIgU2FmZTogIjogIldlYiBTYWZlOiAiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9lZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9lZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzZiZWUwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2VlLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9lbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9lbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTE5NGZmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2VsLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ29sb3I6ICI6ICLOp8+Bz47OvM6xIiwKKyAgICAiT0siOiAizpXOvc+EzqzOvs61zrkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTVmNGJkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2VzLmpzCkBAIC0wLDAgKzEsMTggQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXMiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2xpY2sgYSBjb2xvci4uLiI6ICJTZWxlY2Npb25lIHVuIGNvbG9yLi4uIiwKKyAgICAiQ2xvc2UiOiAiQ2VycmFyIiwKKyAgICAiQ29sb3I6ICI6ICJDb2xvcjogIiwKKyAgICAiT0siOiAiQWNlcHRhciIsCisgICAgIlNhbXBsZSI6ICJNdWVzdHJhIiwKKyAgICAiV2ViIFNhZmU6ICI6ICJDb2xvciB3ZWI6ICIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2V1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2V1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZTdkZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvZXUuanMKQEAgLTAsMCArMSwxOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJldSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDbGljayBhIGNvbG9yLi4uIjogIktvbG9yZSBiYXQgYXVrZXJhdHUuLi4iLAorICAgICJDbG9zZSI6ICJJdHhpIiwKKyAgICAiQ29sb3I6ICI6ICJLb2xvcmVhOiAiLAorICAgICJPSyI6ICJBZG9zIiwKKyAgICAiU2FtcGxlIjogIkxhZ2luYSIsCisgICAgIldlYiBTYWZlOiAiOiAiV2ViIFNhZmU6ICIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2ZhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMzQ1NWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvZmEuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDbG9zZSI6ICLYqNiz2KrZhiIsCisgICAgIk9LIjogItio2YTZhyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2ZpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2ZpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5OTUwNmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvZmkuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDb2xvcjogIjogIlbDpHJpIiwKKyAgICAiT0siOiAiSHl2w6Rrc3kiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9mci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9mci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGVmYTQwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2xvc2UiOiAiRmVybWVyIiwKKyAgICAiQ29sb3I6ICI6ICJDb3VsZXVyIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9oZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9oZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjNjMDZkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2hlLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ29sb3I6ICI6ICLXpteR16IiLAorICAgICJPSyI6ICLXkNeZ16nXldeoIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvaHUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVmOTE1OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9odS5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImh1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIk9LIjogIlJlbmRiZW4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9pdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9pdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Zjg5OTg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2l0LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaXQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ29sb3I6ICI6ICJDb2xvcmUiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYjA2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvamEuanMKQEAgLTAsMCArMSwxOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDbGljayBhIGNvbG9yLi4uIjogIuiJsuOCkuOCr+ODquODg+OCry4uLiIsCisgICAgIkNsb3NlIjogIumWieOBmOOCiyIsCisgICAgIkNvbG9yOiAiOiAi6ImyOiAiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlNhbXBsZSI6ICLjgrXjg7Pjg5fjg6siLAorICAgICJXZWIgU2FmZTogIjogIldlYuOCu+ODvOODlTogIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMjgzMDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDMwIEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgIkNsaWNrIGEgY29sb3IuLi4iOiAiIiwKKyAgICAiQ2xvc2UiOiAiIiwKKyAgICAiQ29sb3I6ICI6ICIiLAorICAgICJPSyI6ICIiLAorICAgICJTYW1wbGUiOiAiIiwKKyAgICAiV2ViIFNhZmU6ICI6ICIiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2x0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YzAwNmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvbHQuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2x2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL2x2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZTZjOGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvbHYuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJPSyI6ICJMYWJpIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvbmIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1NDVkYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNvbG9yOiAiOiAiRmFyZ2UiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMzE3N2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvbmwuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJubCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDb2xvcjogIjogIktsZXVyIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9wbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDE1ZmRmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL3BsLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicGwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ29sb3I6ICI6ICJLb2xvciIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvcHRfYnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwMzExYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9wdF9ici5qcwpAQCAtMCwwICsxLDE4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNsaWNrIGEgY29sb3IuLi4iOiAiU2VsZWNpb25lIHVtYSBjw7RyLi4uIiwKKyAgICAiQ2xvc2UiOiAiRmVjaGFyIiwKKyAgICAiQ29sb3I6ICI6ICJDw7RyOiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiU2FtcGxlIjogIkV4ZW1wbG8iLAorICAgICJXZWIgU2FmZTogIjogIldlYiBTZWd1cmE6IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvcm8uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvcm8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4Njk5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9yby5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJvIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNvbG9yOiAiOiAiQ3Vsb2FyZSIsCisgICAgIk9LIjogIkFjY2VwdMSDIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvcnUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQyNmZkMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9ydS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJ1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNsb3NlIjogItCX0LDQutGA0YvRgtGMIiwKKyAgICAiQ29sb3I6ICI6ICLQptCy0LXRgiIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvc2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvc2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNiYWQ2YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9zaC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvc2kuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvc2kuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNiN2E4YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9zaS5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIk9LIjogIlYgcmVkdSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL3NyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL3NyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NzFmMTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvc3IuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL3N2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL3N2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMGMzMzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvc3YuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDbG9zZSI6ICJTdMOkbmciLAorICAgICJDb2xvcjogIjogIkbDpHJnIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy90aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGUyYThmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9Db2xvclBpY2tlci9sYW5nL3RoLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidGgiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiT0siOiAi4LiV4LiB4Lil4LiHIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvdHIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvdHIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdlODQ1OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy90ci5qcwpAQCAtMCwwICsxLDE4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNsaWNrIGEgY29sb3IuLi4iOiAiQmlyIHJlbmsgc2XDp2luIiwKKyAgICAiQ2xvc2UiOiAiS2FwYXQiLAorICAgICJDb2xvcjogIjogIlJlbms6ICIsCisgICAgIk9LIjogIlRhbWFtIiwKKyAgICAiU2FtcGxlIjogIsOWcm5layIsCisgICAgIldlYiBTYWZlOiAiOiAiV2ViIGfDvHZlbmxpIG1vZDogIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvdm4uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvdm4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThkOTI3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy92bi5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInZuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIk9LIjogIsSQ4buTbmcgw70iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvZGlhbG9nLmh0bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvZGlhbG9nLmh0bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvZGlhbG9nLmh0bWwKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9kaWFsb2cuaHRtbApkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvY2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9jaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2YzMzdiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvY2guanMKQEAgLTAsMCArMSwyMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi5Y+W5raIIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIuaPkuWFpS/mlLnlr6vpgKPntZAiLAorICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIuaWsOeql+aItyhfYmxhbmspIiwKKyAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICLnhKEodXNlIGltcGxpY2l0KSIsCisgICAgIk9LIjogIuWlvSIsCisgICAgIk90aGVyIjogIuWFtuS7liIsCisgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICLmnKzljKEgKF9zZWxmKSIsCisgICAgIlRhcmdldDoiOiAi55uu5qiZ5YyhOiIsCisgICAgIlRpdGxlICh0b29sdGlwKToiOiAi5Li76aGMICh0b29sdGlwKToiLAorICAgICJUb3AgZnJhbWUgKF90b3ApIjogIuS4iuWMoSAoX3RvcCkiLAorICAgICJVUkw6IjogIue2suWdgDoiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL2N6LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvY3ouanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZiOTkyOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL2N6LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY3oiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlpydcWhaXQiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvZGEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9kYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjliMGMyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvZGEuanMKQEAgLTAsMCArMSwyMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSW5kc8OmdC9yZWRpZ2VyIGh5cGVybGluayIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTnl0IHZpbmR1ZSAoX2JsYW5rKSIsCisgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiaW5nZW4gKGltcGxpY2l0KSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiT3RoZXIiOiAiQW5kZXQiLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiU2FtbWUgcmFtbWUgKF9zZWxmKSIsCisgICAgIlRhcmdldDoiOiAiUGxhY2VyaW5nOiIsCisgICAgIlRpdGxlICh0b29sdGlwKToiOiAiVGl0ZWwgKFRvb2x0aXApOiIsCisgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiVG9wcmFtbWUgKF90b3ApIiwKKyAgICAiVVJMOiI6ICJVUkw6IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL2RlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0Nzc1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9kZS5qcwpAQCAtMCwwICsxLDI0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICJXb2xsZW4gU2llIGRpZXNlbiBMaW5rIHdpcmtsaWNoIGVudGZlcm5lbj8iLAorICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIlZlcmtuw7xwZnVuZyBoaW56dWbDvGdlbi/DpG5kZXJuIiwKKyAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOZXVlcyBGZW5zdGVyIChfYmxhbmspIiwKKyAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJrLkEuIChpbXBsaXppdCkiLAorICAgICJPSyI6ICJPSyIsCisgICAgIk90aGVyIjogIkFuZGVyZXMiLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiU2VsYmVyIFJhaG1lbiAoX3NlbGYpIiwKKyAgICAiVGFyZ2V0OiI6ICJaaWVsOiIsCisgICAgIlRpdGxlICh0b29sdGlwKToiOiAiVGl0ZWwgKFRvb2x0aXApOiIsCisgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiT2JlcnN0ZXIgUmFobWVuIChfdG9wKSIsCisgICAgIlVSTDoiOiAiVVJMOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvZWUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9lZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTkxNmU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvZWUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTG9vYnUiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvZWwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9lbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWM2NTFlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvZWwuanMKQEAgLTAsMCArMSwyMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAizpXOuc+DzrHOs8+JzrPOri/OpM+Bzr/PgM6/z4DOv86vzrfPg863IM+Dz43Ovc60zrXPg868zr/PhSIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAizp3Orc6/IM+AzrHPgc6szrjPhc+Bzr8gKF9ibGFuaykiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIs6azrHOvc6tzr3OsSAoz4fPgc6uz4POtyDOsc+Az4zOu8+Fz4TOv8+FKSIsCisgICAgIk9LIjogIs6Vzr3PhM6szr7Otc65IiwKKyAgICAiT3RoZXIiOiAizpHOu867zr8iLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAizorOtM65zr8gZnJhbWUgKF9zZWxmKSIsCisgICAgIlRhcmdldDoiOiAiVGFyZ2V0OiIsCisgICAgIlRpdGxlICh0b29sdGlwKToiOiAizqTOr8+EzrvOv8+CICh0b29sdGlwKToiLAorICAgICJUb3AgZnJhbWUgKF90b3ApIjogIs6gzqzOvc+JIGZyYW1lIChfdG9wKSIsCisgICAgIlVSTDoiOiAiVVJMOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzRmMTgyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvZXMuanMKQEAgLTAsMCArMSwyMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlcyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSW5zZXJ0YXIvTW9kaWZpY2FyIHVuIGVubGFjZSIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTnVldmEgdmVudGFuYSAoX2JsYW5rKSIsCisgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiVmFjw61vICggdXNhciBpbXBsw61jaXRvICkiLAorICAgICJPSyI6ICJBY2VwdGFyIiwKKyAgICAiT3RoZXIiOiAiT3RybyIsCisgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJNaXNtbyBtYXJjbyAoX3NlbGYpIiwKKyAgICAiVGFyZ2V0OiI6ICJEZXN0aW5vOiIsCisgICAgIlRpdGxlICh0b29sdGlwKToiOiAiVMOtdHVsbyAoVG9vbHRpcCk6IiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJNYXJjbyBzdXBlcmlvciAoX3RvcCkiLAorICAgICJVUkw6IjogIlVSTDoiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL2V1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvZXUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY0ODcwZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL2V1LmpzCkBAIC0wLDAgKzEsMjMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlV0emkiLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiTG90dXJhIHR4ZXJ0YXR1L2FsZGF0dSIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTGVoaW8gYmVycmlhbiAoX2JsYW5rKSIsCisgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiQmF0IGVyZSBleiAoaW1wbGl6aXR1a2kgZXJhYmlsaSkiLAorICAgICJPSyI6ICJBZG9zIiwKKyAgICAiT3RoZXIiOiAiQmVzdGUgYmF0IiwKKyAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIkZyYW1lIGJlcmVhbiAoX3NlbGYpIiwKKyAgICAiVGFyZ2V0OiI6ICJIZWxidXJ1YToiLAorICAgICJUaXRsZSAodG9vbHRpcCk6IjogIkl6ZW5idXJ1YSAoYXJnaWJpZGVhKToiLAorICAgICJUb3AgZnJhbWUgKF90b3ApIjogIkdvaWtvIGZyYW1lLWFuIChfdG9wKSIsCisgICAgIlVSTDoiOiAiVVJMLWE6IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9mYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL2ZhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZjgxMjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9mYS5qcwpAQCAtMCwwICsxLDI0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAi2KfZgdiy2YjYr9mGIC8g2YjbjNix2KfbjNi0INmE24zZhtqpIiwKKyAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICLZvtmG2KzYsdmHINis2K/bjNivIChfYmxhbmspIiwKKyAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICLZh9uM2obaqdiv2KfZhSAo2KfYs9iq2YHYp9iv2Ycg2KfYsiDYqNiv2YjZhiDYtNix2LcpIiwKKyAgICAiT0siOiAi2KjZhNmHIiwKKyAgICAiT3RoZXIiOiAi2LPYp9uM2LEiLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAi2YHYsduM2YUg24zaqdiz2KfZhiAoX3NlbGYpIiwKKyAgICAiVGFyZ2V0OiI6ICLZh9iv2YEiLAorICAgICJUaXRsZSAodG9vbHRpcCk6IjogIti52YbZiNin2YYgKNix2KfZh9mG2YXYp9uMINuM2qkg2K7Yt9uMKSIsCisgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAi2YHYsduM2YUg2KjYp9mE2KfbjNuMIChfdG9wKSIsCisgICAgIlVSTDoiOiAiVVJMOiIsCisgICAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayI6ICLYqNin24zYryDZgtio2YQg2KfYsiDYs9in2K7YqiDZhNuM2YbaqSDYjCDZhdiq2YbbjCDYsdinINin2YbYqtiu2KfYqCDZhtmF2KfbjNuM2K8iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL2ZpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvZmkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI1NTJiOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL2ZpLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmkiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlBlcnV1dGEiLAorICAgICJPSyI6ICJIeXbDpGtzeSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9mci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTgzMjZjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvZnIuanMKQEAgLTAsMCArMSwyNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiQ29uZmlybWV6LXZvdXMgbGEgc3VwcHJlc3Npb24gZGUgY2UgbGllbiA/IiwKKyAgICAiQ2FuY2VsIjogIkFubnVsZXIiLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSW5zw6lyZXIgLyBNb2RpZmllciB1biBsaWVuIiwKKyAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOb3V2ZWxsZSBmZW7DqnRyZSAoX2JsYW5rKSIsCisgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiQXVjdW5lIChpbXBsaWNpdGUpIiwKKyAgICAiT0siOiAiT0siLAorICAgICJPdGhlciI6ICJBdXRyZSIsCisgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJNw6ptZSBmcmFtZSAoX3NlbGYpIiwKKyAgICAiVGFyZ2V0OiI6ICJDaWJsZSIsCisgICAgIlRpdGxlICh0b29sdGlwKToiOiAiVGV4dGUgYWx0ZXJuYXRpZiIsCisgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiRnJhbWUgcHJpbmNpcGFsZSAoX3RvcCkiLAorICAgICJVUkw6IjogIlVSTDoiLAorICAgICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGluZyBhIGxpbmsiOiAiVm91cyBkZXZleiBzw6lsZWN0aW9ubmVyIGR1IHRleHRlIGF2YW50IGRlIGNyw6llciB1biBsaWVuIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9oZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMDRiOWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9oZS5qcwpAQCAtMCwwICsxLDIzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImhlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIteU15XXodejL9ep16DXlCDXp9eZ16nXldeoIiwKKyAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICLXl9ec15XXnyDXl9eT16kgKF9ibGFuaykiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogItec15zXkCAo15TXqdeq157XqSDXkS1mcmFtZSDXlNen15nXmdedKSIsCisgICAgIk9LIjogIteQ15nXqdeV16giLAorICAgICJPdGhlciI6ICLXkNeX16giLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAi15DXldeq15UgZnJhbWUgKF9zZWxmKSIsCisgICAgIlRhcmdldDoiOiAi15nXoteTOiIsCisgICAgIlRpdGxlICh0b29sdGlwKToiOiAi15vXldeq16jXqiAodG9vbHRpcCk6IiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJGcmFtZSDXotec15nXldefIChfdG9wKSIsCisgICAgIlVSTDoiOiAiVVJMOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9odS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmYxZWEwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvaHUuanMKQEAgLTAsMCArMSwyMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJodSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIsCisgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJIaXZhdGtvesOhcyBCZXN6w7pyw6FzYS9Nw7Nkb3PDrXTDoXNhIiwKKyAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICLDmmogYWJsYWsgKF9ibGFuaykiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIk5pbmNzICh1c2UgaW1wbGljaXQpIiwKKyAgICAiT0siOiAiUmVuZGJlbiIsCisgICAgIk90aGVyIjogIk3DoXMiLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiVWd5YW5hYmJhIGEga2VyZXRiZSAoX3NlbGYpIiwKKyAgICAiVGFyZ2V0OiI6ICJDw6lsOiIsCisgICAgIlRpdGxlICh0b29sdGlwKToiOiAiQ8OtbSAodG9vbHRpcCk6IiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJGZWxzxZEga2VyZXQgKF90b3ApIiwKKyAgICAiVVJMOiI6ICJVUkw6IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9pdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL2l0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NTUxYTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9pdC5qcwpAQCAtMCwwICsxLDIzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIml0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSW5zZXJpc2NpL21vZGlmaWNhIGxpbmsiLAorICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIk51b3ZhIGZpbmVzdHJhIChfYmxhbmspIiwKKyAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJOaWVudGUgKHVzYSBpbXBsaWNpdG8pIiwKKyAgICAiT0siOiAiT0siLAorICAgICJPdGhlciI6ICJBbHRybyIsCisgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJTdGVzc2EgZnJhbWUgKF9zZWxmKSIsCisgICAgIlRhcmdldDoiOiAiVGFyZ2V0OiIsCisgICAgIlRpdGxlICh0b29sdGlwKToiOiAiVGl0bGUgKHN1Z2dlcmltZW50byk6IiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJQYWdpbmEgaW50ZXJhIChfdG9wKSIsCisgICAgIlVSTDoiOiAiVVJMOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9qYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjllYzNiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvamEuanMKQEAgLTAsMCArMSwyNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAi5pys5b2T44Gr44GT44Gu44Oq44Oz44Kv44KS5YmK6Zmk44GX44G+44GZ44GLPyIsCisgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAi44Oq44Oz44Kv44Gu5oy/5YWlL+S/ruatoyIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAi5paw44GX44GE44Km44Kj44Oz44OJ44KmIChfYmxhbmspIiwKKyAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICLjgarjgZcgKOODh+ODleOCqeODq+ODiOOBq+S7u+OBm+OCiykiLAorICAgICJPSyI6ICJPSyIsCisgICAgIk90aGVyIjogIuOBneOBruS7liIsCisgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICLoh6rlt7Hjg5Xjg6zjg7zjg6DlhoUgKF9zZWxmKSIsCisgICAgIlRhcmdldDoiOiAi44K/44O844Ky44OD44OIOiIsCisgICAgIlRpdGxlICh0b29sdGlwKToiOiAi44K/44Kk44OI44OrOiIsCisgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAi5pyA5LiK5L2N44OV44Os44O844OgIChfdG9wKSIsCisgICAgIlVSTDoiOiAiVVJMOiIsCisgICAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayI6ICLjg6rjg7Pjgq/jgpLkvZzmiJDjgZnjgovjgavjga/jg4bjgq3jgrnjg4jjgpLpgbjmip7jgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL2xjX2Jhc2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NDM3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9sY19iYXNlLmpzCkBAIC0wLDAgKzEsMzcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLworLy8gTEFORzogImVuIiwgRU5DT0RJTkc6IFVURi04CisvLyBBdXRob3I6IFRyYW5zbGF0b3ItTmFtZSwgPGVtYWlsQGV4YW1wbGUuY29tPgorLy8KKy8vIExhc3QgcmV2aXNpb246IDIwMTgtMDQtMTIKKy8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KKy8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyAoUGxlYXNlLCByZW1vdmUgaW5mb3JtYXRpb24gYmVsb3cpCisvLyBGT1IgVFJBTlNMQVRPUlM6CisvLworLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCisvLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCisvLworLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7CisvLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50CisvLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCisKK3sKKyAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIiIsCisgICAgIkNhbmNlbCI6ICIiLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiIiwKKyAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICIiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIiIsCisgICAgIk9LIjogIiIsCisgICAgIk90aGVyIjogIiIsCisgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICIiLAorICAgICJUYXJnZXQ6IjogIiIsCisgICAgIlRpdGxlICh0b29sdGlwKToiOiAiIiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICIiLAorICAgICJVUkw6IjogIiIsCisgICAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayI6ICIiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvbHQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9sdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2Y0MzQwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvbHQuanMKQEAgLTAsMCArMSwyMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIklkxJd0aS9Nb2RpZmlrdW90aSIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTmF1amFzIGxhbmdhcyAoX2JsYW5rKSIsCisgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiTm9uZSAodXNlIGltcGxpY2l0KSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiT3RoZXIiOiAiS2l0YXMiLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiU2FtZSBmcmFtZSAoX3NlbGYpIiwKKyAgICAiVGFyZ2V0OiI6ICJUYXJnZXQ6IiwKKyAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICJQYXZhZGluaW1hcyAodG9vbHRpcCk6IiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJUb3AgZnJhbWUgKF90b3ApIiwKKyAgICAiVVJMOiI6ICJVUkw6IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9sdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL2x2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4M2Q1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9sdi5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdGNlbHQiLAorICAgICJPSyI6ICJMYWJpIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9uYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL25iLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMzdiZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDI0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICJFciBkdSBzaWtrZXIgcMOlIGF0IGR1IHZpbCBmamVybmUgbGVua2VuPyIsCisgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiUmVkaWdlciBsZW5rZSIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiRWdldCB2aW5kdSAoX2JsYW5rKSIsCisgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiSW5nZW4gKGJydWsgc3RhbmRhcmRpbm5zdGlsbGluZykiLAorICAgICJPSyI6ICJPSyIsCisgICAgIk90aGVyIjogIkFubmVuIiwKKyAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlNhbW1lIHJhbW1lIChfc2VsZikiLAorICAgICJUYXJnZXQ6IjogIk3DpWw6IiwKKyAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUaXR0ZWwgKHRvb2x0aXApOiIsCisgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiVG9wcHJhbW1lIChfdG9wKSIsCisgICAgIlVSTDoiOiAiQWRyZXNzZToiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvbmwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4NGM2MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL25sLmpzCkBAIC0wLDAgKzEsMjQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIldpbHQgdSBkZXplIGxpbmsgd2Vya2VsaWprIHZlcndpamRlcmVuPyIsCisgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSHlwZXJsaW5rIGludm9lZ2VuL2FhbnBhc3NlbiIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTmlldXcgdmVuc3RlciAoX2JsYW5rKSIsCisgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiR2VlbiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiT3RoZXIiOiAiQW5kZXIiLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiWmVsZmRlIGZyYW1lIChfc2VsZikiLAorICAgICJUYXJnZXQ6IjogIkRvZWw6IiwKKyAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUaXRlbCAodG9vbHRpcCk6IiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJCb3ZlbnN0ZSBmcmFtZSAoX3RvcCkiLAorICAgICJVUkw6IjogIlVSTDoiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL3BsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvcGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM5MjBjMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL3BsLmpzCkBAIC0wLDAgKzEsMjQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicGwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIk5hIHBld25vIGNoY2VzeiB1c3VuxIXEhyBvZG5vxZtuaWs/IiwKKyAgICAiQ2FuY2VsIjogIkFudWx1aiIsCisgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJXc3Rhdy9lZHl0dWogb2Rub8WbbmlrIiwKKyAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOb3dlIG9rbm8gKF9ibGFuaykiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIkJyYWsiLAorICAgICJPSyI6ICJPSyIsCisgICAgIk90aGVyIjogIklubmUiLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiVGEgc2FtYSByYW1rYSAoX3NlbGYpIiwKKyAgICAiVGFyZ2V0OiI6ICJPa25vIGRvY2Vsb3dlOiIsCisgICAgIlRpdGxlICh0b29sdGlwKToiOiAiVHl0dcWCICh0b29sdGlwKToiLAorICAgICJUb3AgZnJhbWUgKF90b3ApIjogIkfFgsOzd25hIHJhbWthIChfdG9wKSIsCisgICAgIlVSTDoiOiAiVVJMOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9wdF9ici5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJhNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvcHRfYnIuanMKQEAgLTAsMCArMSwyNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwdF9iciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiVm9jw6ogdGVtIGNlcnRlemEgcXVlIGRlc2VqYSByZW1vdmVyIGVzdGUgbGluaz8iLAorICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSW5zZXJpci9Nb2RpZmljYXIgTGluayIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTm92YSBqYW5lbGEgKF9ibGFuaykiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIk5lbmh1bSAodXNvIGltcGzDrWNpdG8pIiwKKyAgICAiT0siOiAiT0siLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiTWVzbWEgZnJhbWUgKF9zZWxmKSIsCisgICAgIlRhcmdldDoiOiAiRGVzdGlubzoiLAorICAgICJUaXRsZSAodG9vbHRpcCk6IjogIlTDrXR1bG8gKHRvb2x0aXApIiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJGcmFtZSBkbyB0b3BvIChfdG9wKSIsCisgICAgIlVSTDoiOiAiVVJMOiIsCisgICAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayI6ICJWb2PDqiBwcmVjaXNhIHNlbGVjaW9uYXIgdW0gdGV4dG8gYW50ZXMgZGUgY3JpYXIgdW0gbGluayIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvcm8uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9yby5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDNiZTRhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvcm8uanMKQEAgLTAsMCArMSwyMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJybyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIkluc2VyZWF6xIMvbW9kaWZjxIMgbGluayIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiRmVyZWFzdHLEgyBub3XEgyAoX2JsYW5rKSIsCisgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiTmltaWMgKGZvbG9zZcWfdGUgY2UtaSBpbXBsaWNpdCkiLAorICAgICJPSyI6ICJBY2NlcHTEgyIsCisgICAgIk90aGVyIjogIkFsdCB0YXJnZXQiLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiQWNlZWHFn2kgZmVyZWFzdHLEgyAoX3NlbGYpIiwKKyAgICAiVGFyZ2V0OiI6ICLFomludGE6IiwKKyAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUaXRsdWwgKHRvb2x0aXApOiIsCisgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiRmVyZWFzdHJhIHByaW5jaXBhbMSDIChfdG9wKSIsCisgICAgIlVSTDoiOiAiVVJMOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvcnUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9ydS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmZjMzFiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvcnUuanMKQEAgLTAsMCArMSwyNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogItCS0YHRgtCw0LLQutCwL9C40LfQvNC10L3QtdC90LjQtSDRgdGB0YvQu9C60LgiLAorICAgICJOZXcgd2luZG93IChfYmxhbmspIjogItCd0L7QstC+0LUg0L7QutC90L4gKF9ibGFuaykiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogItCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOIiwKKyAgICAiT0siOiAiT0siLAorICAgICJPdGhlciI6ICLQlNGA0YPQs9C+0LUiLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAi0KLQviDQttC1INC+0LrQvdC+IChfc2VsZikiLAorICAgICJUYXJnZXQ6IjogItCe0YLQutGA0YvQstCw0YLRjCDQsiDQvtC60L3QtToiLAorICAgICJUaXRsZSAodG9vbHRpcCk6IjogItCS0YHQv9C70YvQstCw0Y7RidCw0Y8g0L/QvtC00YHQutCw0LfQutCwIiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICLQoNC+0LTQuNGC0LXQu9GM0YHQutC+0LUg0L7QutC90L4gKF90b3ApIiwKKyAgICAiVVJMOiI6ICJVUkw6IiwKKyAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogItCS0Ysg0LTQvtC70LbQvdGLINCy0YvQtNC10LvQuNGC0Ywg0YLQtdC60YHRgiwg0LrQvtGC0L7RgNGL0Lkg0LHRg9C00LXRgiDQv9GA0LXQvtCx0YDQsNC30L7QstCw0L0g0LIg0YHRgdGL0LvQutGDIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9zaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL3NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMDUwNzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9zaC5qcwpAQCAtMCwwICsxLDIzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJEb2Rhai9wcm9tZW5pIExpbmsiLAorICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIk5vdm9tIHByb3pvcnUgKF9ibGFuaykiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogImtvcmlzdGkgcG9kcmF6dW1ldmFubyIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiT3RoZXIiOiAiRHJ1Z28iLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiSXN0aSBmcmVqbSAoX3NlbGYpIiwKKyAgICAiVGFyZ2V0OiI6ICJPdHZvcmkgdToiLAorICAgICJUaXRsZSAodG9vbHRpcCk6IjogIk5heml2ICh0b29sdGlwKToiLAorICAgICJUb3AgZnJhbWUgKF90b3ApIjogIkdsYXZuaSBmcmVqbSAoX3RvcCkiLAorICAgICJVUkw6IjogIlVSTDoiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL3NpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvc2kuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY3NDg5MgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL3NpLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2kiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIsCisgICAgIk9LIjogIlYgcmVkdSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvc3IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9zci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjcyOGVkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvc3IuanMKQEAgLTAsMCArMSwyMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAi0LTQvtC00LDRmC/Qv9GA0L7QvNC10L3QuCDQu9C40L3QuiIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAi0J3QvtCy0L7QvCDQv9GA0L7Qt9C+0YDRgyAoX2JsYW5rKSIsCisgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi0LrQvtGA0LjRgdGC0Lgg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90L4iLAorICAgICJPSyI6ICJPSyIsCisgICAgIk90aGVyIjogItCU0YDRg9Cz0L4iLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAi0JjRgdGC0Lgg0YTRgNC10ZjQvCAoX3NlbGYpIiwKKyAgICAiVGFyZ2V0OiI6ICLQntGC0LLQvtGA0Lgg0YM6IiwKKyAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICLQndCw0LfQuNCyICh0b29sdGlwKToiLAorICAgICJUb3AgZnJhbWUgKF90b3ApIjogItCT0LvQsNCy0L3QuCDRhNGA0LXRmNC8IChfdG9wKSIsCisgICAgIlVSTDoiOiAi0KPQoNCbOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvc3YuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9zdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjUwMTNlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvc3YuanMKQEAgLTAsMCArMSwyNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIlJlZGlnZXJhIGzDpG5rIiwKKyAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOeXR0IGbDtm5zdGVyIChfYmxhbmspIiwKKyAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJJbmdlbiAoYW52w6RuZCBzdGFuZGFyZGluc3TDpGxsaW5nKSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiT3RoZXIiOiAiQW5uYW4iLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiU2FtbWEgcmFtIChfc2VsZikiLAorICAgICJUYXJnZXQ6IjogIk3DpWw6IiwKKyAgICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUaXRlbCAodG9vbHRpcCk6IiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJUb3BwcmFtIChfdG9wKSIsCisgICAgIlVSTDoiOiAiU8O2a3bDpGc6IiwKKyAgICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIkR1IG3DpXN0YSBtYXJrZXJhIGV0dCBvYmpla3QgYXR0IGFwcGxpY2VyYSBsw6Rua2VuIHDDpSEiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL3RoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvdGguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRhOWM4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL3RoLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidGgiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIsCisgICAgIk9LIjogIuC4leC4geC4peC4hyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvdHIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy90ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjFmNGJhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvdHIuanMKQEAgLTAsMCArMSwyMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0ciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAixLBwdGFsIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIkJhxJ9sYW50xLEgZWtsZS9kZcSfacWfdGlyIiwKKyAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJZZW5pIHBlbmNlcmUgKF9ibGFuaykiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIkhpw6diaXJpICjDlnJ0w7xrKSIsCisgICAgIk9LIjogIlRhbWFtIiwKKyAgICAiT3RoZXIiOiAiQmHFn2thIiwKKyAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIkF5bsSxIMOnZXLDp2V2ZSAoX3NlbGYpIiwKKyAgICAiVGFyZ2V0OiI6ICJIZWRlZjoiLAorICAgICJUaXRsZSAodG9vbHRpcCk6IjogIkJhxZ9sxLFrIChBcmHDpyBpcHVjdSk6IiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJFbiDDvHN0IMOnZXLDp2V2ZSAoX3RvcCkiLAorICAgICJVUkw6IjogIlVSTDoiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL3ZuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvdm4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmODJiMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9sYW5nL3ZuLmpzCkBAIC0wLDAgKzEsMjMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidm4iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkjhu6d5IiwKKyAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIlRow6ptL0No4buJbmggc+G7rWEgxJHGsOG7nW5nIGThuqtuIiwKKyAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJD4butYSBz4buVIG3hu5tpIChfYmxhbmspIiwKKyAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJLaMO0bmcgKHPhu60gZOG7pW5nIGltcGxpY2l0KSIsCisgICAgIk9LIjogIsSQ4buTbmcgw70iLAorICAgICJPdGhlciI6ICJLaMOhYyIsCisgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJUcsOqbiBjw7luZyBraHVuZyAoX3NlbGYpIiwKKyAgICAiVGFyZ2V0OiI6ICJOxqFpIGhp4buHbiB0aOG7izoiLAorICAgICJUaXRsZSAodG9vbHRpcCk6IjogIlRpw6p1IMSR4buBIChj4bunYSBoxrDhu5tuZyBk4bqrbik6IiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJLaHVuZyB0csOqbiBjw7luZyAoX3RvcCkiLAorICAgICJVUkw6IjogIlVSTDoiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9saW5rLmh0bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGluay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3OGVkZTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGluay5odG1sCkBAIC0wLDAgKzEsMTM2IEBACis8aHRtbD4KKworPGhlYWQ+CisgIDx0aXRsZT5JbnNlcnQvTW9kaWZ5IExpbms8L3RpdGxlPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9wb3B1cHMvcG9wdXAuanMiPjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi8uLi9wb3B1cHMvcG9wdXAuY3NzIiAvPgorCisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICB3aW5kb3cucmVzaXplVG8oNDAwLCAyMDApOworCitYaW5oYSA9IHdpbmRvdy5vcGVuZXIuWGluaGE7CisKK2Z1bmN0aW9uIGkxOG4oc3RyKSB7CisgIHJldHVybiAoWGluaGEuX2xjKHN0ciwgJ0NyZWF0ZUxpbmsnKSk7Cit9CisKK2Z1bmN0aW9uIG9uVGFyZ2V0Q2hhbmdlZCgpIHsKKyAgdmFyIGYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9vdGhlcl90YXJnZXQiKTsKKyAgaWYgKHRoaXMudmFsdWUgPT0gIl9vdGhlciIpIHsKKyAgICBmLnN0eWxlLnZpc2liaWxpdHkgPSAidmlzaWJsZSI7CisgICAgZi5zZWxlY3QoKTsKKyAgICBmLmZvY3VzKCk7CisgIH0gZWxzZSBmLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKK30KKworZnVuY3Rpb24gSW5pdCgpIHsKKyAgX19kbGdfdHJhbnNsYXRlKCdDcmVhdGVMaW5rJyk7CisgIF9fZGxnX2luaXQoKTsKKworICAvLyBNYWtlIHN1cmUgdGhlIHRyYW5zbGF0ZWQgc3RyaW5nIGFwcGVhcnMgaW4gdGhlIGRyb3AgZG93bi4gKGZvciBnZWNrbykKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfdGFyZ2V0Iikuc2VsZWN0ZWRJbmRleCA9IDE7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3RhcmdldCIpLnNlbGVjdGVkSW5kZXggPSAwOworCisgIHZhciBwYXJhbSA9IHdpbmRvdy5kaWFsb2dBcmd1bWVudHM7CisgIHZhciB0YXJnZXRfc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfdGFyZ2V0Iik7CisgIHZhciB1c2VfdGFyZ2V0ID0gdHJ1ZTsKKyAgaWYgKHBhcmFtKSB7CisgICAgaWYgKCB0eXBlb2YgcGFyYW1bImZfdXNldGFyZ2V0Il0gIT0gInVuZGVmaW5lZCIgKSB7CisgICAgICB1c2VfdGFyZ2V0ID0gcGFyYW1bImZfdXNldGFyZ2V0Il07CisgICAgfQorICAgIGlmICggdHlwZW9mIHBhcmFtWyJmX2hyZWYiXSAhPSAidW5kZWZpbmVkIiApIHsKKyAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2hyZWYiKS52YWx1ZSA9IHBhcmFtWyJmX2hyZWYiXTsKKyAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3RpdGxlIikudmFsdWUgPSBwYXJhbVsiZl90aXRsZSJdOworICAgICAgY29tYm9TZWxlY3RWYWx1ZSh0YXJnZXRfc2VsZWN0LCBwYXJhbVsiZl90YXJnZXQiXSk7CisgICAgICBpZiAodGFyZ2V0X3NlbGVjdC52YWx1ZSAhPSBwYXJhbS5mX3RhcmdldCkgeworICAgICAgICB2YXIgb3B0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7CisgICAgICAgIG9wdC52YWx1ZSA9IHBhcmFtLmZfdGFyZ2V0OworICAgICAgICBvcHQuaW5uZXJIVE1MID0gb3B0LnZhbHVlOworICAgICAgICB0YXJnZXRfc2VsZWN0LmFwcGVuZENoaWxkKG9wdCk7CisgICAgICAgIG9wdC5zZWxlY3RlZCA9IHRydWU7CisgICAgICB9CisgICAgfQorICB9CisgIGlmICghIHVzZV90YXJnZXQpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl90YXJnZXRfbGFiZWwiKS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfdGFyZ2V0Iikuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX290aGVyX3RhcmdldCIpLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKKyAgfQorICB2YXIgb3B0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7CisgIG9wdC52YWx1ZSA9ICJfb3RoZXIiOworICBvcHQuaW5uZXJIVE1MID0gaTE4bigiT3RoZXIiKTsKKyAgdGFyZ2V0X3NlbGVjdC5hcHBlbmRDaGlsZChvcHQpOworICB0YXJnZXRfc2VsZWN0Lm9uY2hhbmdlID0gb25UYXJnZXRDaGFuZ2VkOworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9ocmVmIikuZm9jdXMoKTsKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfaHJlZiIpLnNlbGVjdCgpOworfQorCitmdW5jdGlvbiBvbk9LKCkgeworICB2YXIgcmVxdWlyZWQgPSB7CisgICAgLy8gZl9ocmVmIHNob3VsZG4ndCBiZSByZXF1aXJlZCBvciBvdGhlcndpc2UgcmVtb3ZpbmcgdGhlIGxpbmsgYnkgZW50ZXJpbmcgYW4gZW1wdHkKKyAgICAvLyB1cmwgaXNuJ3QgcG9zc2libGUgYW55bW9yZS4KKyAgICAvLyAiZl9ocmVmIjogaTE4bigiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIikKKyAgfTsKKyAgZm9yICh2YXIgaSBpbiByZXF1aXJlZCkgeworICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGkpOworICAgIGlmICghZWwudmFsdWUpIHsKKyAgICAgIGFsZXJ0KHJlcXVpcmVkW2ldKTsKKyAgICAgIGVsLmZvY3VzKCk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisgIC8vIHBhc3MgZGF0YSBiYWNrIHRvIHRoZSBjYWxsaW5nIHdpbmRvdworICB2YXIgZmllbGRzID0gWyJmX2hyZWYiLCAiZl90aXRsZSIsICJmX3RhcmdldCIgXTsKKyAgdmFyIHBhcmFtID0gbmV3IE9iamVjdCgpOworICBmb3IgKHZhciBpIGluIGZpZWxkcykgeworICAgIHZhciBpZCA9IGZpZWxkc1tpXTsKKyAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgcGFyYW1baWRdID0gZWwudmFsdWU7CisgIH0KKyAgaWYgKHBhcmFtLmZfdGFyZ2V0ID09ICJfb3RoZXIiKQorICAgIHBhcmFtLmZfdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfb3RoZXJfdGFyZ2V0IikudmFsdWU7CisgIF9fZGxnX2Nsb3NlKHBhcmFtKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBvbkNhbmNlbCgpIHsKKyAgX19kbGdfY2xvc2UobnVsbCk7CisgIHJldHVybiBmYWxzZTsKK30KKworPC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgY2xhc3M9ImRpYWxvZyIgb25sb2FkPSJJbml0KCkiPgorPGRpdiBjbGFzcz0idGl0bGUiPkluc2VydC9Nb2RpZnkgTGluazwvZGl2PgorPGZvcm0+Cis8dGFibGUgYm9yZGVyPSIwIiBzdHlsZT0id2lkdGg6IDEwMCU7Ij4KKyAgPHRyPgorICAgIDx0ZCBjbGFzcz0ibGFiZWwiPlVSTDo8L3RkPgorICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImZfaHJlZiIgc3R5bGU9IndpZHRoOiAxMDAlIiAvPjwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQgY2xhc3M9ImxhYmVsIj5UaXRsZSAodG9vbHRpcCk6PC90ZD4KKyAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIGlkPSJmX3RpdGxlIiBzdHlsZT0id2lkdGg6IDEwMCUiIC8+PC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxzcGFuIGlkPSJmX3RhcmdldF9sYWJlbCI+VGFyZ2V0Ojwvc3Bhbj48L3RkPgorICAgIDx0ZD48c2VsZWN0IGlkPSJmX3RhcmdldCI+CisgICAgICA8b3B0aW9uIHZhbHVlPSIiPk5vbmUgKHVzZSBpbXBsaWNpdCk8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Il9ibGFuayI+TmV3IHdpbmRvdyAoX2JsYW5rKTwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iX3NlbGYiPlNhbWUgZnJhbWUgKF9zZWxmKTwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iX3RvcCI+VG9wIGZyYW1lIChfdG9wKTwvb3B0aW9uPgorICAgIDwvc2VsZWN0PgorICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmX290aGVyX3RhcmdldCIgaWQ9ImZfb3RoZXJfdGFyZ2V0IiBzaXplPSIxMCIgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbiIgLz4KKyAgICA8L3RkPgorICA8L3RyPgorPC90YWJsZT4KKworPGRpdiBpZD0iYnV0dG9ucyI+CisgIDxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJvayIgb25jbGljaz0icmV0dXJuIG9uT0soKTsiPk9LPC9idXR0b24+CisgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBuYW1lPSJjYW5jZWwiIG9uY2xpY2s9InJldHVybiBvbkNhbmNlbCgpOyI+Q2FuY2VsPC9idXR0b24+Cis8L2Rpdj4KKzwvZm9ybT4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGluay5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvQ3JlYXRlTGluay9saW5rLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMGIyZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGluay5qcwpAQCAtMCwwICsxLDEwOCBAQAorICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOm5vVGFicz10cnVlOnRhYlNpemU9MjppbmRlbnRTaXplPTI6LS0KKyAgICAtLSAgWGluaGEgKGlzIG5vdCBodG1sQXJlYSkgLSBodHRwOi8veGluaGEub3JnCisgICAgLS0KKyAgICAtLSAgVXNlIG9mIFhpbmhhIGlzIGdyYW50ZWQgYnkgdGhlIHRlcm1zIG9mIHRoZSBodG1sQXJlYSBMaWNlbnNlIChiYXNlZCBvbgorICAgIC0tICBCU0QgbGljZW5zZSkgIHBsZWFzZSByZWFkIGxpY2Vuc2UudHh0IGluIHRoaXMgcGFja2FnZSBmb3IgZGV0YWlscy4KKyAgICAtLQorICAgIC0tICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBYaW5oYSBEZXZlbG9wZXIgVGVhbSBhbmQgY29udHJpYnV0b3JzCisgICAgLS0KKyAgICAtLSAgWGluaGEgd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gd29yayBieSBNaWhhaSBCYXpvbiB3aGljaCBpczoKKyAgICAtLSAgICAgIENvcHlyaWdodCAoYykgMjAwMy0yMDA0IGR5bmFyY2guY29tLgorICAgIC0tICAgICAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgaW50ZXJhY3RpdmV0b29scy5jb20sIGluYy4KKyAgICAtLSAgICAgIFRoaXMgY29weXJpZ2h0IG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UuCisgICAgLS0KKyAgICAtLSAgVGhpcyBpcyB0aGUgc3RhbmRhcmQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFhpbmhhLnByb3RvdHlwZS5fY3JlYXRlTGluayBtZXRob2QsCisgICAgLS0gIHdoaWNoIHByb3ZpZGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGluc2VydCBhIGh5cGVybGluayBpbiB0aGUgZWRpdG9yLgorICAgIC0tCisgICAgLS0gIFRoZSBmaWxlIGlzIGxvYWRlZCBhcyBhIHNwZWNpYWwgcGx1Z2luIGJ5IHRoZSBYaW5oYSBDb3JlIHdoZW4gbm8gYWx0ZXJuYXRpdmUgbWV0aG9kIChwbHVnaW4pIGlzIGxvYWRlZC4KKyAgICAtLQorICAgIC0tCisgICAgLS0gICRIZWFkVVJMOiBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL0NyZWF0ZUxpbmsvbGluay5qcyAkCisgICAgLS0gICRMYXN0Q2hhbmdlZERhdGU6IDIwMTgtMDItMTkgMjA6MzU6NDkgKzEzMDAgKE1vbiwgMTkgRmViIDIwMTgpICQKKyAgICAtLSAgJExhc3RDaGFuZ2VkUmV2aXNpb246IDE0MDIgJAorICAgIC0tICAkTGFzdENoYW5nZWRCeTogZ29nbyAkCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitmdW5jdGlvbiBDcmVhdGVMaW5rKGVkaXRvcikgeworCXRoaXMuZWRpdG9yID0gZWRpdG9yOworCXZhciBjZmcgPSBlZGl0b3IuY29uZmlnOworCXZhciBzZWxmID0gdGhpczsKKworCWlmKHR5cGVvZiBlZGl0b3IuX2NyZWF0ZUxpbmsgPT0gJ3VuZGVmaW5lZCcpIHsKKwkgICAgZWRpdG9yLl9jcmVhdGVMaW5rID0gZnVuY3Rpb24odGFyZ2V0KSB7CisJCWlmKCF0YXJnZXQpIHRhcmdldCA9IHNlbGYuX2dldFNlbGVjdGVkQW5jaG9yKCk7CisJCXNlbGYuc2hvdyh0YXJnZXQpOworCSAgICB9CisJfQorfQorCitDcmVhdGVMaW5rLl9wbHVnaW5JbmZvID0geworICBuYW1lICAgICAgICAgIDogIkNyZWF0ZUxpbmsiLAorICBvcmlnaW4gICAgICAgIDogIlhpbmhhIENvcmUiLAorICB2ZXJzaW9uICAgICAgIDogIiRMYXN0Q2hhbmdlZFJldmlzaW9uOiAxNDAyICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywgJyQxJyksCisgIGRldmVsb3BlciAgICAgOiAiVGhlIFhpbmhhIENvcmUgRGV2ZWxvcGVyIFRlYW0iLAorICBkZXZlbG9wZXJfdXJsIDogIiRIZWFkVVJMOiBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL0NyZWF0ZUxpbmsvbGluay5qcyAkIi5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sICckMScpLAorICBzcG9uc29yICAgICAgIDogIiIsCisgIHNwb25zb3JfdXJsICAgOiAiIiwKKyAgbGljZW5zZSAgICAgICA6ICJodG1sQXJlYSIKK307CisKK0NyZWF0ZUxpbmsucHJvdG90eXBlLl9sYyA9IGZ1bmN0aW9uKHN0cmluZykgeworCXJldHVybiBYaW5oYS5fbGMoc3RyaW5nLCAnQ3JlYXRlTGluaycpOworfTsKKworCitDcmVhdGVMaW5rLnByb3RvdHlwZS5vbkdlbmVyYXRlT25jZSA9IGZ1bmN0aW9uKCkKK3sKKyAgQ3JlYXRlTGluay5sb2FkQXNzZXRzKCk7Cit9OworCitDcmVhdGVMaW5rLmxvYWRBc3NldHMgPSBmdW5jdGlvbigpCit7CisJdmFyIHNlbGYgPSBDcmVhdGVMaW5rOworCWlmIChzZWxmLmxvYWRpbmcpIHJldHVybjsKKwlzZWxmLmxvYWRpbmcgPSB0cnVlOworCVhpbmhhLl9nZXRiYWNrKF9lZGl0b3JfdXJsICsgJ21vZHVsZXMvQ3JlYXRlTGluay9kaWFsb2cuaHRtbCcsIGZ1bmN0aW9uKGdldGJhY2spIHsgc2VsZi5odG1sID0gZ2V0YmFjazsgc2VsZi5kaWFsb2dSZWFkeSA9IHRydWU7IH0pOworCVhpbmhhLl9nZXRiYWNrKF9lZGl0b3JfdXJsICsgJ21vZHVsZXMvQ3JlYXRlTGluay9wbHVnaW5NZXRob2RzLmpzJywgZnVuY3Rpb24oZ2V0YmFjaykgeyBldmFsKGdldGJhY2spOyBzZWxmLm1ldGhvZHNSZWFkeSA9IHRydWU7IH0pOworfQorCitDcmVhdGVMaW5rLnByb3RvdHlwZS5vblVwZGF0ZVRvb2xiYXIgPSBmdW5jdGlvbigpCit7IAorCWlmICghKENyZWF0ZUxpbmsuZGlhbG9nUmVhZHkgJiYgQ3JlYXRlTGluay5tZXRob2RzUmVhZHkpKQorCXsKKwkJdGhpcy5lZGl0b3IuX3Rvb2xiYXJPYmplY3RzLmNyZWF0ZWxpbmsuc3RhdGUoImVuYWJsZWQiLCBmYWxzZSk7CisJfQorCWVsc2UgdGhpcy5vblVwZGF0ZVRvb2xiYXIgPSBudWxsOworfTsKKworQ3JlYXRlTGluay5wcm90b3R5cGUucHJlcGFyZURpYWxvZyA9IGZ1bmN0aW9uKCkKK3sKKwl2YXIgc2VsZiA9IHRoaXM7CisJdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworCisJdmFyIGRpYWxvZyA9IHRoaXMuZGlhbG9nID0gbmV3IFhpbmhhLkRpYWxvZyhlZGl0b3IsIENyZWF0ZUxpbmsuaHRtbCwgJ1hpbmhhJyx7d2lkdGg6NDAwfSkKKwkvLyBDb25uZWN0IHRoZSBPSyBhbmQgQ2FuY2VsIGJ1dHRvbnMKKwlkaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ29rJykub25jbGljayA9IGZ1bmN0aW9uKCkge3NlbGYuYXBwbHkoKTt9CisKKwlkaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ2NhbmNlbCcpLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsgc2VsZi5kaWFsb2cuaGlkZSgpfTsKKworCWlmICghZWRpdG9yLmNvbmZpZy5tYWtlTGlua1Nob3dzVGFyZ2V0KQorCXsKKwkJZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJmX3RhcmdldF9sYWJlbCIpLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKKwkJZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJmX3RhcmdldCIpLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKKwkJZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJmX290aGVyX3RhcmdldCIpLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKKwl9CisKKwlkaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ2ZfdGFyZ2V0Jykub25jaGFuZ2U9IGZ1bmN0aW9uKCkgCisJeworCQl2YXIgZiA9IGRpYWxvZy5nZXRFbGVtZW50QnlJZCgiZl9vdGhlcl90YXJnZXQiKTsKKwkJaWYgKHRoaXMudmFsdWUgPT0gIl9vdGhlciIpIHsKKwkJCWYuc3R5bGUudmlzaWJpbGl0eSA9ICJ2aXNpYmxlIjsKKwkJCWYuc2VsZWN0KCk7CisJCQlmLmZvY3VzKCk7CisJCX0gZWxzZSBmLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKKwl9OworCisJCisJdGhpcy5kaWFsb2dSZWFkeSA9IHRydWU7Cit9OwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL3BsdWdpbk1ldGhvZHMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvcGx1Z2luTWV0aG9kcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzJmODUzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9DcmVhdGVMaW5rL3BsdWdpbk1ldGhvZHMuanMKQEAgLTAsMCArMSwxNjUgQEAKKworQ3JlYXRlTGluay5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uKGEpCit7CisgIGlmICghdGhpcy5kaWFsb2cpCisgIHsKKyAgICB0aGlzLnByZXBhcmVEaWFsb2coKTsKKyAgfSAKKwl2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisJdGhpcy5hID0gYTsKKwlpZighYSAmJiB0aGlzLmVkaXRvci5zZWxlY3Rpb25FbXB0eSh0aGlzLmVkaXRvci5nZXRTZWxlY3Rpb24oKSkpCisJeworCQlhbGVydCh0aGlzLl9sYygiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIikpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJdmFyIGlucHV0cyA9CisJeworCQlmX2hyZWYgICA6ICcnLAorCQlmX3RpdGxlICA6ICcnLAorCQlmX3RhcmdldCA6ICcnLAorCQlmX290aGVyX3RhcmdldCA6ICcnCisJfTsKKworCWlmKGEgJiYgYS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2EnKQorCXsKKwkJaW5wdXRzLmZfaHJlZiAgID0gdGhpcy5lZGl0b3IuZml4UmVsYXRpdmVMaW5rcyhhLmdldEF0dHJpYnV0ZSgnaHJlZicpKTsKKwkJaW5wdXRzLmZfdGl0bGUgID0gYS50aXRsZTsKKwkJaWYgKGEudGFyZ2V0KQorCQl7CisJCQlpZiAoIS9fc2VsZnxfdG9wfF9ibGFuay8udGVzdChhLnRhcmdldCkpCisJCQl7CisJCQkJaW5wdXRzLmZfdGFyZ2V0ID0gJ19vdGhlcic7CisJCQkJaW5wdXRzLmZfb3RoZXJfdGFyZ2V0ID0gYS50YXJnZXQ7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaW5wdXRzLmZfdGFyZ2V0ID0gYS50YXJnZXQ7CisJCQkJaW5wdXRzLmZfb3RoZXJfdGFyZ2V0ID0gJyc7CisJCQl9CisJCX0KKwl9CisKKwkvLyBub3cgY2FsbGluZyB0aGUgc2hvdyBtZXRob2Qgb2YgdGhlIFhpbmhhLkRpYWxvZyBvYmplY3QgdG8gc2V0IHRoZSB2YWx1ZXMgYW5kIHNob3cgdGhlIGFjdHVhbCBkaWFsb2cKKwl0aGlzLmRpYWxvZy5zaG93KGlucHV0cyk7Cit9OworCisvLyBhbmQgZmluYWxseSAuLi4gdGFrZSBzb21lIGFjdGlvbgorQ3JlYXRlTGluay5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbigpCit7CisKKwl2YXIgdmFsdWVzID0gdGhpcy5kaWFsb2cuaGlkZSgpOworCXZhciBhID0gdGhpcy5hOworCXZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKworCXZhciBhdHIgPQorCXsKKwkJaHJlZjogJycsCisJCXRhcmdldDonJywKKwkJdGl0bGU6JycKKwl9OworCisJaWYodmFsdWVzLmZfaHJlZikKKwl7CisJCWF0ci5ocmVmID0gdmFsdWVzLmZfaHJlZjsKKwkJYXRyLnRpdGxlID0gdmFsdWVzLmZfdGl0bGU7CisJCWlmICh2YWx1ZXMuZl90YXJnZXQudmFsdWUpCisJCXsKKwkJCWlmICh2YWx1ZXMuZl90YXJnZXQudmFsdWUgPT0gJ290aGVyJykgYXRyLnRhcmdldCA9IHZhbHVlcy5mX290aGVyX3RhcmdldDsKKwkJCWVsc2UgYXRyLnRhcmdldCA9IHZhbHVlcy5mX3RhcmdldC52YWx1ZTsKKwkJfQorCX0KKwlpZiAodmFsdWVzLmZfdGFyZ2V0LnZhbHVlKQorCXsKKwkJaWYgKHZhbHVlcy5mX3RhcmdldC52YWx1ZSAhPSAnX290aGVyJykKKwkJeworCQkJYXRyLnRhcmdldCA9IHZhbHVlcy5mX3RhcmdldC52YWx1ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWF0ci50YXJnZXQgPSB2YWx1ZXMuZl9vdGhlcl90YXJnZXQ7CisJCX0KKwl9CisJCisJaWYoYSAmJiBhLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnYScpCisJeworCQlpZighYXRyLmhyZWYpCisJCXsKKwkJCWlmKGNvbmZpcm0odGhpcy5fbGMoJ0FyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPycpKSkKKwkJCXsKKwkJCQl2YXIgcCA9IGEucGFyZW50Tm9kZTsKKwkJCQl3aGlsZShhLmhhc0NoaWxkTm9kZXMoKSkKKwkJCQl7CisJCQkJCXAuaW5zZXJ0QmVmb3JlKGEucmVtb3ZlQ2hpbGQoYS5jaGlsZE5vZGVzWzBdKSwgYSk7CisJCQkJfQorCQkJCXAucmVtb3ZlQ2hpbGQoYSk7CisJCQkJZWRpdG9yLnVwZGF0ZVRvb2xiYXIoKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQkvLyBVcGRhdGUgdGhlIGxpbmsKKwkJCWZvcih2YXIgaSBpbiBhdHIpCisJCQl7CisJCQkJYS5zZXRBdHRyaWJ1dGUoaSwgYXRyW2ldKTsKKwkJCX0KKworCQkJLy8gSWYgd2UgY2hhbmdlIGEgbWFpbHRvIGxpbmsgaW4gSUUgZm9yIHNvbWUgaGl0aGVydG8gdW5rbm93bgorCQkJLy8gcmVhc29uIGl0IHNldHMgdGhlIGlubmVySFRNTCBvZiB0aGUgbGluayB0byBiZSB0aGUKKwkJCS8vIGhyZWYgb2YgdGhlIGxpbmsuICBTdHVwaWQgSUUuCisJCQlpZihYaW5oYS5pc19pZSkKKwkJCXsKKwkJCQlpZigvbWFpbHRvOihbXj88Pl0qKShcP1tePF0qKT8kL2kudGVzdChhLmlubmVySFRNTCkpCisJCQkJeworCQkJCQlhLmlubmVySFRNTCA9IFJlZ0V4cC4kMTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJZWxzZQorCXsKKwkJaWYoIWF0ci5ocmVmKSByZXR1cm4gdHJ1ZTsKKworCQkvLyBJbnNlcnQgYSBsaW5rLCB3ZSBsZXQgdGhlIGJyb3dzZXIgZG8gdGhpcywgd2UgZmlndXJlIGl0IGtub3dzIGJlc3QKKwkJdmFyIHRtcCA9IFhpbmhhLnVuaXEoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20vTGluaycpOworCQllZGl0b3IuX2RvYy5leGVjQ29tbWFuZCgnY3JlYXRlbGluaycsIGZhbHNlLCB0bXApOworCisJCS8vIEZpeCB0aGVtIHVwCisJCXZhciBhbmNob3JzID0gZWRpdG9yLl9kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2EnKTsKKwkJZm9yKHZhciBpID0gMDsgaSA8IGFuY2hvcnMubGVuZ3RoOyBpKyspCisJCXsKKwkJCXZhciBhbmNob3IgPSBhbmNob3JzW2ldOworCQkJaWYoYW5jaG9yLmhyZWYgPT0gdG1wKQorCQkJeworCQkJCS8vIEZvdW5kIG9uZS4KKwkJCQlpZiAoIWEpIGEgPSBhbmNob3I7CisJCQkJZm9yKHZhciBqIGluIGF0cikKKwkJCQl7CisJCQkJCWFuY2hvci5zZXRBdHRyaWJ1dGUoaiwgYXRyW2pdKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJZWRpdG9yLnNlbGVjdE5vZGVDb250ZW50cyhhKTsKKwllZGl0b3IudXBkYXRlVG9vbGJhcigpOworfTsKK0NyZWF0ZUxpbmsucHJvdG90eXBlLl9nZXRTZWxlY3RlZEFuY2hvciA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIHNlbCAgPSB0aGlzLmVkaXRvci5nZXRTZWxlY3Rpb24oKTsKKyAgdmFyIHJuZyAgPSB0aGlzLmVkaXRvci5jcmVhdGVSYW5nZShzZWwpOworICB2YXIgYSAgICA9IHRoaXMuZWRpdG9yLmFjdGl2ZUVsZW1lbnQoc2VsKTsKKyAgaWYoYSAhPSBudWxsICYmIGEudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdhJykKKyAgeworICAgIHJldHVybiBhOworICB9CisgIGVsc2UKKyAgeworICAgIGEgPSB0aGlzLmVkaXRvci5fZ2V0Rmlyc3RBbmNlc3RvcihzZWwsICdhJyk7CisgICAgaWYoYSAhPSBudWxsKQorICAgIHsKKyAgICAgIHJldHVybiBhOworICAgIH0KKyAgfQorICByZXR1cm4gbnVsbDsKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9EaWFsb2dzL0RldGFjaGVkRGlhbG9nLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9EaWFsb2dzL0RldGFjaGVkRGlhbG9nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MjA5YTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0RpYWxvZ3MvRGV0YWNoZWREaWFsb2cuanMKQEAgLTAsMCArMSw3NCBAQAorCisgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS06bm9UYWJzPXRydWU6dGFiU2l6ZT0yOmluZGVudFNpemU9MjotLQorICAgIC0tICBYaW5oYSAoaXMgbm90IGh0bWxBcmVhKSAtIGh0dHA6Ly94aW5oYS5nb2dvLmNvLm56LworICAgIC0tCisgICAgLS0gIFVzZSBvZiBYaW5oYSBpcyBncmFudGVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGUgaHRtbEFyZWEgTGljZW5zZSAoYmFzZWQgb24KKyAgICAtLSAgQlNEIGxpY2Vuc2UpICBwbGVhc2UgcmVhZCBsaWNlbnNlLnR4dCBpbiB0aGlzIHBhY2thZ2UgZm9yIGRldGFpbHMuCisgICAgLS0KKyAgICAtLSAgWGluaGEgd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gd29yayBieSBNaWhhaSBCYXpvbiB3aGljaCBpczoKKyAgICAtLSAgICAgIENvcHlyaWdodCAoYykgMjAwMy0yMDA0IGR5bmFyY2guY29tLgorICAgIC0tICAgICAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgaW50ZXJhY3RpdmV0b29scy5jb20sIGluYy4KKyAgICAtLSAgICAgIFRoaXMgY29weXJpZ2h0IG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UuCisgICAgLS0KKyAgICAtLSAgJEhlYWRVUkw6IGh0dHA6Ly9zdm4ueGluaGEud2ViZmFjdGlvbmFsLmNvbS90cnVuay9tb2R1bGVzL0RpYWxvZ3MvaW5saW5lLWRpYWxvZy5qcyAkCisgICAgLS0gICRMYXN0Q2hhbmdlZERhdGU6IDIwMDctMDEtMjQgMDM6MjY6MDQgKzEzMDAgKFdlZCwgMjQgSmFuIDIwMDcpICQKKyAgICAtLSAgJExhc3RDaGFuZ2VkUmV2aXNpb246IDY5NCAkCisgICAgLS0gICRMYXN0Q2hhbmdlZEJ5OiBnb2dvICQKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisvKiogVGhlIERpdkRpYWxvZyBpcyB1c2VkIGFzIGEgc2VtaS1pbmRlcGVuZGFudCBtZWFucyBvZiB1c2luZyBhIFBsdWdpbiBvdXRzaWRlIG9mIAorICogIFhpbmhhLCBpdCBkb2VzIG5vdCBkZXBlbmQgb24gaGF2aW5nIGEgWGluaGEgZWRpdG9yIGF2YWlsYWJsZSAtIG5vdCB0aGF0IG9mIG9mIGNvdXJzZQorICogIFBsdWdpbnMgdGhlbXNlbHZlcyBtYXkgKGFuZCB2ZXJ5IGxpa2VseSBkbykgcmVxdWlyZSBhbiBlZGl0b3IuCisgKgorICogIEBwYXJhbSBEaXYgaW50byB3aGljaCB0aGUgZGlhbG9nIHdpbGwgZHJhdyBpdHNlbGYuCisgKgorICogIEBwYXJhbSBIVE1MIGZvciB0aGUgZGlhbG9nLCB3aXRoIHRoZSBzcGVjaWFsIHN1YnRpdHV0aW9ucy4uLgorICogICAgaWQ9Iltzb21laWRoZXJlXSIgd2lsbCBhc3NpZ24gYSB1bmlxdWUgaWQgdG8gdGhlIGVsZW1lbnQgaW4gcXVlc3Rpb24KKyAqICAgICAgICBhbmQgdGhpcyBjYW4gYmUgcmV0cmlldmVkIHdpdGggeW91ckRpYWxvZy5nZXRFbGVtZW50QnlJZCgnc29tZWlkaGVyZScpICAgCisgKiAgICBfKFNvbWUgVGV4dCBIZXJlKSB3aWxsIGxvY2FsaXplIHRoZSB0ZXh0LCB0aGlzIGlzIHVzZWQgZm9yIHdpdGhpbiBhdHRyaWJ1dGVzCisgKiAgICA8bDEwbj5Tb21lIFRleHQgSGVyZTwvbDEwbj4gd2lsbCBsb2NhbGl6ZSB0aGUgdGV4dCwgdGhpcyBpcyB1c2VkIG91dHNpZGUgYXR0cmlidXRlcworICoKKyAqICBAcGFyYW0gQSBmdW5jdGlvbiB3aGljaCBjYW4gdGFrZSBhIG5hdGl2ZSAoZW5nbGlzaCkgc3RyaW5nIGFuZCByZXR1cm4gYSBsb2NhbGl6ZWQgdmVyc2lvbiwKKyAqICAgT1I7ICAgQSAiY29udGV4dCIgdG8gYmUgdXNlZCB3aXRoIHRoZSBzdGFuZGFyZCBYaW5oYS5fbGMoKSBtZXRob2QsCisgKiAgIE9SOyAgIE51bGwgLSBubyBsb2NhbGl6YXRpb24gd2lsbCBoYXBwZW4sIG9ubHkgbmF0aXZlIHN0cmluZ3Mgd2lsbCBiZSB1c2VkLgorICoKKyAqLworCitYaW5oYS5EZXRhY2hlZERpYWxvZyA9IGZ1bmN0aW9uKCBodG1sLCBsb2NhbGl6ZXIsIHNpemUsIG9wdGlvbnMpCit7CisgIHZhciBmYWtlZWRpdG9yID0KKyAgeworICAgICdjb25maWcnOiBuZXcgWGluaGEuQ29uZmlnKCksCisgICAgJ3Njcm9sbFBvcyc6IFhpbmhhLnByb3RvdHlwZS5zY3JvbGxQb3MsCisgICAgJ19zb21lRWRpdG9ySGFzQmVlbkFjdGl2YXRlZCc6IGZhbHNlLAorICAgICdzYXZlU2VsZWN0aW9uJzogZnVuY3Rpb24oKSB7IH0sCisgICAgJ2RlYWN0aXZhdGVFZGl0b3InIDogZnVuY3Rpb24oKSB7IH0sCisgICAgJ190ZXh0QXJlYSc6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyksCisgICAgJ19pZnJhbWUnICA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAorICAgICdfZG9jJyAgICAgOiBkb2N1bWVudCwKKyAgICAnaGlkZVBhbmVscyc6IGZ1bmN0aW9uKCkgeyB9LCAgICAKKyAgICAnc2hvd1BhbmVscyc6IGZ1bmN0aW9uKCkgeyB9LAorICAgICdfaXNGdWxsU2NyZWVuJzogZmFsc2UsIC8vIG1heWJlIG5vdCA/CisgICAgJ2FjdGl2YXRlRWRpdG9yJzogZnVuY3Rpb24oKSB7IH0sCisgICAgJ3Jlc3RvcmVTZWxlY3Rpb24nOiBmdW5jdGlvbigpIHsgfSwKKyAgICAndXBkYXRlVG9vbGJhcic6IGZ1bmN0aW9uKCkgeyB9LAorICAgICdmb2N1c0VkaXRvcic6IGZ1bmN0aW9uKCkgeyB9ICAgIAorICB9OworICAKKyAgWGluaGEuRGlhbG9nLmluaXRpYWxaID0gMTAwOworICB0aGlzLmF0dGFjaGVkID0gZmFsc2U7CisgIAorICBYaW5oYS5EZXRhY2hlZERpYWxvZy5wYXJlbnRDb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIGZha2VlZGl0b3IsIGh0bWwsIGxvY2FsaXplciwgc2l6ZSwgb3B0aW9ucyk7Cit9CisKK1hpbmhhLmV4dGVuZChYaW5oYS5EZXRhY2hlZERpYWxvZywgWGluaGEuRGlhbG9nKTsKKworCitYaW5oYS5EZXRhY2hlZERpYWxvZy5wcm90b3R5cGUuYXR0YWNoVG9QYW5lbCAKKyAgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9CisgIAorWGluaGEuRGV0YWNoZWREaWFsb2cucHJvdG90eXBlLmRldGFjaEZyb21Ub1BhbmVsIAorICA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0KKworCisKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvRGlhbG9ncy9YaW5oYURpYWxvZy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvRGlhbG9ncy9YaW5oYURpYWxvZy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODFiYTZlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9EaWFsb2dzL1hpbmhhRGlhbG9nLmpzCkBAIC0wLDAgKzEsMTU5MSBAQAorICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOm5vVGFicz10cnVlOnRhYlNpemU9MjppbmRlbnRTaXplPTI6LS0KKyAgICAtLSAgWGluaGEgKGlzIG5vdCBodG1sQXJlYSkgLSBodHRwOi8veGluaGEub3JnCisgICAgLS0KKyAgICAtLSAgVXNlIG9mIFhpbmhhIGlzIGdyYW50ZWQgYnkgdGhlIHRlcm1zIG9mIHRoZSBodG1sQXJlYSBMaWNlbnNlIChiYXNlZCBvbgorICAgIC0tICBCU0QgbGljZW5zZSkgIHBsZWFzZSByZWFkIGxpY2Vuc2UudHh0IGluIHRoaXMgcGFja2FnZSBmb3IgZGV0YWlscy4KKyAgICAtLQorICAgIC0tICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBYaW5oYSBEZXZlbG9wZXIgVGVhbSBhbmQgY29udHJpYnV0b3JzCisgICAgLS0KKyAgICAtLSAgWGluaGEgd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gd29yayBieSBNaWhhaSBCYXpvbiB3aGljaCBpczoKKyAgICAtLSAgICAgIENvcHlyaWdodCAoYykgMjAwMy0yMDA0IGR5bmFyY2guY29tLgorICAgIC0tICAgICAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgaW50ZXJhY3RpdmV0b29scy5jb20sIGluYy4KKyAgICAtLSAgICAgIFRoaXMgY29weXJpZ2h0IG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UuCisgICAgLS0KKyAgICAtLSAgVGhpcyBpcyB0aGUgbmV3IGFsbC1pbi1vbmUgaW1wbGVtZW50YXRpb24gb2YgZGlhbG9ncyBmb3IgWGluaGEKKyAgICAtLQorICAgIC0tCisgICAgLS0gICRIZWFkVVJMOiBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL0RpYWxvZ3MvWGluaGFEaWFsb2cuanMgJAorICAgIC0tICAkTGFzdENoYW5nZWREYXRlOiAyMDE4LTAyLTA3IDE0OjE0OjI4ICsxMzAwIChXZWQsIDA3IEZlYiAyMDE4KSAkCisgICAgLS0gICRMYXN0Q2hhbmdlZFJldmlzaW9uOiAxMzc5ICQKKyAgICAtLSAgJExhc3RDaGFuZ2VkQnk6IGdvZ28gJAorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qanNsaW50IHJlZ2V4cDogZmFsc2UsIHJoaW5vOiBmYWxzZSwgYnJvd3NlcjogdHJ1ZSwgYml0d2lzZTogZmFsc2UsIGZvcmluOiBmYWxzZSwgYWRzYWZlOiBmYWxzZSwgZXZpbDogdHJ1ZSwgbm9tZW46IGZhbHNlLCAKK2dsb3ZhcjogZmFsc2UsIGRlYnVnOiBmYWxzZSwgZXFlcWVxOiBmYWxzZSwgcGFzc2ZhaWw6IGZhbHNlLCBzaWRlYmFyOiBmYWxzZSwgbGF4YnJlYWs6IGZhbHNlLCBvbjogZmFsc2UsIGNhcDogdHJ1ZSwgCit3aGl0ZTogZmFsc2UsIHdpZGdldDogZmFsc2UsIHVuZGVmOiB0cnVlLCBwbHVzcGx1czogZmFsc2UqLworLypnbG9iYWwgIFhpbmhhICovCisKKy8qKiBYaW5oYSBEaWFsb2cKKyAqICAKKyAqIEBjb25zdHJ1Y3RvcgorICogQHZlcnNpb24gJExhc3RDaGFuZ2VkUmV2aXNpb246IDEzNzkgJCAkTGFzdENoYW5nZWREYXRlOiAyMDE4LTAyLTA3IDE0OjE0OjI4ICsxMzAwIChXZWQsIDA3IEZlYiAyMDE4KSAkCisgKiBAcGFyYW0ge1hpbmhhfSBlZGl0b3IgWGluaGEgb2JqZWN0ICAgIAorICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgc3RyaW5nIFRoZSBIVE1MIGZvciB0aGUgZGlhbG9nJ3MgVUkKKyAqIEBwYXJhbSB7U3RyaW5nfSBsb2NhbGl6ZXIgc3RyaW5nIHRoZSAiY29udGV4dCIgcGFyYW1ldGVyIGZvciBYaW5oYS5fbGMoKSwgdHlwaWNhbGx5IHRoZSBuYW1lIG9mIHRoZSBwbHVnaW4KKyAqIEBwYXJhbSB7T2JqZWN0fSBzaXplIG9iamVjdCB3aXRoIHR3byBwb3NzaWJsZSBwcm9wZXJ0aWVzIG9mIHRoZSBzaXplOiB3aWR0aCAmIGhlaWdodCBhcyBpbnQsIHdoZXJlIGhlaWdodCBpcyBvcHRpb25hbAorICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgZGljdGlvbmFyeSB3aXRoIG9wdGlvbmFsIGJvb2xlYW4gYXR0cmlidXRlcyAnbW9kYWwnLCAnY2xvc2FibGUnLCAncmVzaXphYmxlJywgYW5kICdjZW50ZXJlZCcsIGFzIHdlbGwgYXMgaW50ZWdlciBhdHRyaWJ1dGUgJ2xheWVyJworCisgKi8KK1hpbmhhLkRpYWxvZyA9IGZ1bmN0aW9uKGVkaXRvciwgaHRtbCwgbG9jYWxpemVyLCBzaXplLCBvcHRpb25zKQoreworICB2YXIgZGlhbG9nID0gdGhpczsKKyAgCisgIC8qKiBVc2VkIGZvciBkaWFsb2cuZ2V0RWxlbWVudEJ5SWQoKQorICAgKiBAdHlwZSBPYmplY3QKKyAgICogQHByaXZhdGUKKyAgICovCisgIHRoaXMuaWQgICAgPSB7IH07CisgIC8qKiBVc2VkIGZvciBkaWFsb2cuZ2V0RWxlbWVudEJ5SWQoKQorICAgKiBAdHlwZSBPYmplY3QKKyAgICogQHByaXZhdGUKKyAgICovCisgIHRoaXMucl9pZCAgPSB7IH07IC8vIHJldmVyc2UgbG9va3VwIGlkCisgIC8qKiBUaGUgY2FsbGluZyBYaW5oYSBpbnN0YW5jZQorICAgKiBAdHlwZSBYaW5oYQorICAgKiBAcHJpdmF0ZQorICAgKi8KKyAgdGhpcy5lZGl0b3IgICA9IGVkaXRvcjsKKyAgLyoqIAorICAgKiBAcHJpdmF0ZQorICAgKiBAdHlwZSBEb2N1bWVudAorICAgKi8KKyAgdGhpcy5kb2N1bWVudCA9IGRvY3VtZW50OworICAvKiogT2JqZWN0IHdpdGggd2lkdGgsIGhlaWdodCBhcyBudW1iZXJzCisgICAqIEB0eXBlIE9iamVjdAorICAgKi8KKyAgCisgIHRoaXMuc2l6ZSA9IHNpemU7CisgIC8qKiAKKyAgICogQHR5cGUgQm9vbGVhbgorICAgKiBAcHJpdmF0ZQorICAgKi8KKyAgdGhpcy5tb2RhbCA9IChvcHRpb25zICYmIG9wdGlvbnMubW9kYWwgPT09IGZhbHNlKSA/IGZhbHNlIDogdHJ1ZTsKKyAgLyoqIAorICAgKiBAdHlwZSBCb29sZWFuCisgICAqIEBwcml2YXRlCisgICAqLworICB0aGlzLmNsb3NhYmxlID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5jbG9zYWJsZSA9PT0gZmFsc2UpID8gZmFsc2UgOiB0cnVlOworICAvKiogCisgICAqIEB0eXBlIEJvb2xlYW4KKyAgICogQHByaXZhdGUKKyAgICovCisgIHRoaXMucmVzaXphYmxlID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXNpemFibGUgPT09IGZhbHNlKSA/IGZhbHNlIDogdHJ1ZTsKKyAgLyoqIAorICAgKiBAdHlwZSBOdW1iZXIKKyAgICogQHByaXZhdGUKKyAgICovCisgIHRoaXMubGF5ZXIgPSAob3B0aW9ucyAmJiBvcHRpb25zLmxheWVyKSA/IG9wdGlvbnMubGF5ZXIgOiAwOworICAvKiogCisgICAqIEB0eXBlIEJvb2xlYW4KKyAgICogQHByaXZhdGUKKyAgICovCisgIHRoaXMuY2VudGVyZWQgPSAob3B0aW9ucyAmJiBvcHRpb25zLmNlbnRlcmVkID09PSB0cnVlKSA/IHRydWUgOiBmYWxzZTsKKyAgLyoqIAorICAgKiBAdHlwZSBCb29sZWFuCisgICAqIEBwcml2YXRlCisgICAqLworICB0aGlzLmNsb3NlT25Fc2NhcGUgPSAob3B0aW9ucyAmJiBvcHRpb25zLmNsb3NlT25Fc2NhcGUgPT09IHRydWUpID8gdHJ1ZSA6IGZhbHNlOworICAKKyAgLyoqIFRoZSBkaXYgdGhhdCBpcyB0aGUgYWN0dWFsIGRpYWxvZworICAgKiAgQHR5cGUgRG9tTm9kZQorICAgKi8KKyAgdGhpcy5yb290RWxlbSA9IG51bGw7CisgIAorICAvKiogVGhlIGNhcHRpb24gYXQgdGhlIHRvcCBvZiB0aGUgZGlhbG9nIHRoYXQgaXMgdXNlZCB0byBkcmFnZ2VkIHRoZSBkaWFsb2cuIEl0IGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmcm9tIHRoZSBmaXJzdCBoMSBpbiB0aGUgZGlhbG9nJ3MgSFRNTAorICAgKiAgQHR5cGUgRG9tTm9kZQorICAgKi8KKyAgdGhpcy5jYXB0aW9uQmFyID0gbnVsbDsKKyAgLyoqIFRoaXMgZGl2IGNvbnRhaW5zIHRoZSBjb250ZW50CisgICAqICBAdHlwZSBEb21Ob2RlCisgICAqLworICB0aGlzLm1haW4gPSBudWxsOworICAKKyAgLyoqIEVhY2ggZGlhbG9nIGhhcyBhIGJhY2tncm91bmQKKyAgICogIEB0eXBlIERvbU5vZGUKKyAgICogIEBwcml2YXRlCisgICAqLworICB0aGlzLmJhY2tncm91bmQgPSBudWxsOworICAvKiogCisgICAqIEB0eXBlIEJvb2xlYW4KKyAgICogQHByaXZhdGUKKyAgICovCisgIHRoaXMuY2VudGVyZWQgPSBudWxsOworICAvKiogCisgICAqIEB0eXBlIEJvb2xlYW4KKyAgICogQHByaXZhdGUKKyAgICovCisgIHRoaXMuZ3JleW91dCA9IG51bGw7CisgIAorICAvKiogCisgICAqIEB0eXBlIERvbU5vZGUKKyAgICogQHByaXZhdGUKKyAgICovCisgIHRoaXMuYnV0dG9ucyA9IG51bGw7CisgIC8qKiAKKyAgICogQHR5cGUgRG9tTm9kZQorICAgKiBAcHJpdmF0ZQorICAgKi8KKyAgdGhpcy5jbG9zZXIgPSBudWxsOworICAvKiogCisgICAqIEB0eXBlIERvbU5vZGUKKyAgICogQHByaXZhdGUKKyAgICovCisgIHRoaXMuaWNvbiA9IG51bGw7CisgIC8qKiAKKyAgICogQHR5cGUgRG9tTm9kZQorICAgKiBAcHJpdmF0ZQorICAgKi8KKyAgdGhpcy5yZXNpemVyID0gbnVsbDsKKyAgLyoqIAorICAgKiBAdHlwZSBOdW1iZXIKKyAgICogQHByaXZhdGUKKyAgICovCisgIHRoaXMuaW5pdGlhbFogPSBudWxsOworICAKKyAgLyogQ2hlY2sgZ2xvYmFsIGNvbmZpZyB0byBzZWUgaWYgd2Ugc2hvdWxkIG92ZXJyaWRlIGFueSBvZiB0aGUgYWJvdmUgb3B0aW9ucworICAgIElmIGEgZ2xvYmFsIG9wdGlvbiBpcyBzZXQsIGl0IHdpbGwgYXBwbHkgdG8gYWxsIGRpYWxvZ3MsIHJlZ2FyZGxlc3Mgb2YgdGhlaXIKKyAgICBpbmRpdmlkdWFsIHNldHRpbmdzIChpLmUuLCBpdCB3aWxsIG92ZXJyaWRlIHRoZW0pLiBJZiB0aGUgZ2xvYmFsIG9wdGlvbiBpcworICAgIHVuZGVmaW5lZCwgdGhlIG9wdGlvbnMgcGFzc2VkIGluIGFib3ZlIHdpbGwgYmUgdXNlZC4KKyAgKi8KKyAgdmFyIGdsb2JhbE9wdGlvbnMgPSBlZGl0b3IuY29uZmlnLmRpYWxvZ09wdGlvbnM7CisgIGlmIChnbG9iYWxPcHRpb25zKSAKKyAgeworICAgIGlmICh0eXBlb2YgZ2xvYmFsT3B0aW9ucy5jZW50ZXJlZCAhPSAndW5kZWZpbmVkJykgCisgICAgeworICAgICAgdGhpcy5jZW50ZXJlZCA9IGdsb2JhbE9wdGlvbnMuY2VudGVyZWQ7CisgICAgfQorICAgIGlmICh0eXBlb2YgZ2xvYmFsT3B0aW9ucy5yZXNpemFibGUgIT0gJ3VuZGVmaW5lZCcpIAorICAgIHsKKyAgICAgIHRoaXMucmVzaXphYmxlID0gZ2xvYmFsT3B0aW9ucy5yZXNpemFibGU7CisgICAgfQorICAgIGlmICh0eXBlb2YgZ2xvYmFsT3B0aW9ucy5jbG9zYWJsZSAhPSAndW5kZWZpbmVkJykgCisgICAgeworICAgICAgdGhpcy5jbG9zYWJsZSA9IGdsb2JhbE9wdGlvbnMuY2xvc2FibGU7CisgICAgfQorICAgIGlmICh0eXBlb2YgZ2xvYmFsT3B0aW9ucy5ncmV5b3V0ICE9ICd1bmRlZmluZWQnKSAKKyAgICB7CisgICAgICB0aGlzLmdyZXlvdXQgPSBnbG9iYWxPcHRpb25zLmdyZXlvdXQ7CisgICAgfQorICAgIGlmICh0eXBlb2YgZ2xvYmFsT3B0aW9ucy5jbG9zZU9uRXNjYXBlICE9ICd1bmRlZmluZWQnKSAKKyAgICB7CisgICAgICB0aGlzLmNsb3NlT25Fc2NhcGUgPSBnbG9iYWxPcHRpb25zLmNsb3NlT25Fc2NhcGU7CisgICAgfQorICB9CisgIHZhciBiYWNrRzsKKyAgaWYgKFhpbmhhLmlzX2llKQorICB7IC8vIElFNiBuZWVkcyB0aGUgaWZyYW1lIHRvIGhpZGUgc2VsZWN0IGJveGVzCisgICAgYmFja0cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICBiYWNrRy5zcmMgPSAiYWJvdXQ6YmxhbmsiOworICAgIGJhY2tHLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIAorICAgIHsKKyAgICAgIHZhciBkb2MgPSB3aW5kb3cuZXZlbnQuc3JjRWxlbWVudC5jb250ZW50V2luZG93LmRvY3VtZW50OworICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSAnY29tcGxldGUnICYmIGRvYyAmJiBkb2MuYm9keSkKKyAgICAgIHsKKyAgICAgICAgdmFyIGRpdiA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgLy9pbnNlcnQgc3R5bGVzIHRvIG1ha2UgYmFja2dyb3VuZCBjb2xvciBza2luYWJsZQorICAgICAgICB2YXIgc3R5bGVzLCBzdHlsZXNoZWV0cyA9IGRvY3VtZW50LnN0eWxlU2hlZXRzOworICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgaT0wO2k8c3R5bGVzaGVldHMubGVuZ3RoO2krKykKKyAgICAgICAgeworICAgICAgICAgIGlmIChzdHlsZXNoZWV0c1tpXS5pZC5pbmRleE9mKCdYaW5oYScpICE9IC0xICYmIHN0eWxlc2hlZXRzW2ldLmNzc1RleHQpCisgICAgICAgICAgeworICAgICAgICAgICAgc3R5bGVzICs9IHN0eWxlc2hlZXRzW2ldLmNzc1RleHQ7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRpdi5pbm5lckhUTUwgPSAnPGJyPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+XG4nK3N0eWxlcysnXG48L3N0eWxlPic7IC8vIHN0cmFuZ2Ugd2F5LCBidXQgZGlkbid0IHdvcmsgb3RoZXJ3aXNlCisgICAgICAgIGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLmFwcGVuZENoaWxkKGRpdik7CisgICAgICAgIGRvYy5ib2R5LmNsYXNzTmFtZSA9ICd4aW5oYV9kaWFsb2dfYmFja2dyb3VuZCc7CisgICAgICAgIGlmIChkaWFsb2cubW9kYWwpIAorICAgICAgICB7CisgICAgICAgICAgZG9jLmJvZHkuY2xhc3NOYW1lICs9ICdfbW9kYWwnOworICAgICAgICB9CisgICAgICAgIGlmIChkaWFsb2cuZ3JleW91dCkgCisgICAgICAgIHsKKyAgICAgICAgICBkb2MuYm9keS5jbGFzc05hbWUgKz0gJ19ncmV5b3V0JzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisgIH0KKyAgZWxzZQorICB7IC8vIE1vemlsbGEgKDxGRjMpIGNhbid0IGhhdmUgdGhlIGlmcmFtZSwgYmVjYXVzZSBpdCBoaWRlcyB0aGUgY2FyZXQgaW4gdGV4dCBmaWVsZHMKKyAgICAvLyBzZWUgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2OTMzCisgICAgYmFja0cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgfQorICBiYWNrRy5jbGFzc05hbWUgPSAieGluaGFfZGlhbG9nX2JhY2tncm91bmQiOworICBpZiAodGhpcy5tb2RhbCkgCisgIHsKKyAgICBiYWNrRy5jbGFzc05hbWUgKz0gJ19tb2RhbCc7CisgIH0KKyAgaWYgKHRoaXMuZ3JleW91dCkgCisgIHsKKyAgICBiYWNrRy5jbGFzc05hbWUgKz0gJ19ncmV5b3V0JzsKKyAgfQorICB2YXIgeiA9IDEwMDA7CisgIGlmICghWGluaGEuRGlhbG9nLmluaXRpYWxaKQorICB7CisgICAgdmFyIHAgPSBlZGl0b3IuX2h0bWxBcmVhOworICAgIHdoaWxlIChwKQorICAgIHsKKyAgICAgIGlmIChwLnN0eWxlICYmIHBhcnNlSW50KHAuc3R5bGUuekluZGV4LCAxMCkgPiB6KSAKKyAgICAgIHsKKyAgICAgICAgeiA9IHBhcnNlSW50KHAuc3R5bGUuekluZGV4LCAxMCk7CisgICAgICB9CisgICAgICBwID0gcC5wYXJlbnROb2RlOworICAgIH0KKyAgICBYaW5oYS5EaWFsb2cuaW5pdGlhbFogPSB6OworICB9CisgIHogPSBYaW5oYS5EaWFsb2cuaW5pdGlhbFo7CisgIHZhciBzID0gYmFja0cuc3R5bGU7CisgIHMucG9zaXRpb24gPSAiYWJzb2x1dGUiOworICBzLnRvcCA9IDA7CisgIHMubGVmdCA9IDA7CisgIHMuYm9yZGVyID0gJ25vbmUnOworICBzLm92ZXJmbG93ID0gImhpZGRlbiI7CisgIHMuZGlzcGxheSA9ICJub25lIjsKKyAgcy56SW5kZXggPSAodGhpcy5tb2RhbCA/IHogKyAyNSA6IHogKzEgKSArIHRoaXMubGF5ZXI7CisKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChiYWNrRyk7CisKKyAgdGhpcy5iYWNrZ3JvdW5kID0gYmFja0c7CisKKyAgYmFja0cgPSBudWxsOworICBYaW5oYS5mcmVlTGF0ZXIodGhpcywgImJhY2tncm91bmQiKTsKKworICB2YXIgcm9vdEVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgLy9JJ3ZlIGdvdCB0aGUgZmVlbGluZyBkcmFnZ2luZyBpcyBtdWNoIHNsb3dlciBpbiBJRTcgdy8gcG9zOmZpeGVkLCBiZXNpZGVzIHRoZSBzdHJhbmdlIGZhY3QgdGhhdCBpdCBvbmx5IHdvcmtzIGluIFN0cmljdCBtb2RlIAorICAvL3Jvb3RFbGVtLnN0eWxlLnBvc2l0aW9uID0gKFhpbmhhLmllX3ZlcnNpb24gPCA3IHx8KFhpbmhhLmlzX2llICYmIGRvY3VtZW50LmNvbXBhdE1vZGUgPT0gIkJhY2tDb21wYXQiKSB8fCAhdGhpcy5tb2RhbCkgPyAiYWJzb2x1dGUiIDogImZpeGVkIjsKKyAgcm9vdEVsZW0uc3R5bGUucG9zaXRpb24gPSAoWGluaGEuaXNfaWUgfHwgIXRoaXMubW9kYWwpID8gImFic29sdXRlIiA6ICJmaXhlZCI7CisgIHJvb3RFbGVtLnN0eWxlLnpJbmRleCA9ICh0aGlzLm1vZGFsID8geiArIDI3IDogeiArIDMgKSArIHRoaXMubGF5ZXI7CisgIHJvb3RFbGVtLnN0eWxlLmRpc3BsYXkgID0gJ25vbmUnOworICAKKyAgaWYgKCF0aGlzLm1vZGFsKQorICB7CisgICAgWGluaGEuX2FkZEV2ZW50KHJvb3RFbGVtLCdtb3VzZWRvd24nLCBmdW5jdGlvbiAoKSB7IFhpbmhhLkRpYWxvZy5hY3RpdmF0ZU1vZGVsZXNzKGRpYWxvZyk7fSk7CisgIH0KKyAgCisgIC8vIEZJWE1FOiBUaGlzIGlzIG5pY2UsIGJ1dCBJIGRvbid0IG1hbmFnZSB0byBnZXQgaXQgc3dpdGNoZWQgb2ZmIG9uIHRleHQgaW5wdXRzIDooCisgIC8vIHJvb3RFbGVtLnN0eWxlLk1velVzZXJTZWxlY3QgPSAibm9uZSI7CisgIAorICByb290RWxlbS5jbGFzc05hbWUgPSAnZGlhbG9nJyArICh0aGlzLm1vZGFsID8gJycgOiAnIG1vZGVsZXNzJyk7CisgIGlmIChYaW5oYS5pc19jaHJvbWUpIHJvb3RFbGVtLmNsYXNzTmFtZSArPSAnIGNocm9tZSc7IC8vIEhhY2sgYmVjYXVzZSBib3JkZXItcmFkaXVzICYgYm94LXNoYWRvdyBkb24ndCBnbyB3ZWxsIHRvZ2V0aGVyIGluIGNocm9tZQorICAKKyAvLyB0aGlzLmJhY2tncm91bmRbMV0uYXBwZW5kQ2hpbGQocm9vdEVsZW0pOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJvb3RFbGVtKTsKKworICByb290RWxlbS5zdHlsZS5wYWRkaW5nQm90dG9tID0gIjEwcHgiOworICByb290RWxlbS5zdHlsZS53aWR0aCA9ICggc2l6ZSAmJiBzaXplLndpZHRoICkgID8gc2l6ZS53aWR0aCArICdweCcgOiAnJzsKKworICBpZiAoc2l6ZSAmJiBzaXplLmhlaWdodCkKKyAgeworICAgIGlmIChYaW5oYS5pZV92ZXJzaW9uIDwgNykKKyAgICB7CisgICAgICByb290RWxlbS5zdHlsZS5oZWlnaHQgPSBzaXplLmhlaWdodCArICdweCc7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICByb290RWxlbS5zdHlsZS5taW5IZWlnaHQgPSAgc2l6ZS5oZWlnaHQgKyAncHgnOworICAgIH0KKyAgfQorCisgIGh0bWwgPSB0aGlzLnRyYW5zbGF0ZUh0bWwoaHRtbCxsb2NhbGl6ZXIpOworCisgIHZhciBtYWluID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgIHJvb3RFbGVtLmFwcGVuZENoaWxkKG1haW4pOworICBtYWluLmlubmVySFRNTCA9IGh0bWw7CisKKyAgLy8gSWYgdGhlIGxvY2FsaXplciBpcyBhIHN0cmluZyBjb250YWluaW5nIGEgcGx1Z2luIG5hbWUsIGl0IGNhbiBiZSB1c2VkIHRvCisgIC8vIGxvb2t1cCB0aGUgcGx1Z2luLgorICB0aGlzLmZpeHVwRE9NKG1haW4sIGxvY2FsaXplcik7CisgIAorICAvL21ha2UgdGhlIGZpcnN0IGgxIHRvIGRyYWcmZHJvcCB0aGUgcm9vdEVsZW0KKyAgdmFyIGNhcHRpb25CYXIgPSBtYWluLnJlbW92ZUNoaWxkKCBtYWluLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoMSIpWzBdKTsKKyAgcm9vdEVsZW0uaW5zZXJ0QmVmb3JlKGNhcHRpb25CYXIsbWFpbik7CisgIFhpbmhhLl9hZGRFdmVudChjYXB0aW9uQmFyLCAnbW91c2Vkb3duJyxmdW5jdGlvbihldikgeyBkaWFsb2cuZHJhZ1N0YXJ0KGV2KTsgfSk7CisgIAorICBjYXB0aW9uQmFyLnN0eWxlLk1velVzZXJTZWxlY3QgPSAibm9uZSI7CisgIGNhcHRpb25CYXIuc3R5bGUuV2Via2l0VXNlclNlbGVjdCA9ICJub25lIjsgLy9zZWVtcyB0byBoYXZlIG5vIGVmZmVjdAorICBjYXB0aW9uQmFyLnVuc2VsZWN0YWJsZSA9ICJvbiI7CisgIGNhcHRpb25CYXIub25zZWxlY3RzdGFydCA9IGZ1bmN0aW9uKCkge3JldHVybiBmYWxzZTt9OworCisgIHRoaXMuYnV0dG9ucyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICBzID0gdGhpcy5idXR0b25zLnN0eWxlOworICBzLnBvc2l0aW9uID0gImFic29sdXRlIjsKKyAgcy50b3AgPSAiMCI7CisgIHMucmlnaHQgPSAiMnB4IjsKKworICByb290RWxlbS5hcHBlbmRDaGlsZCh0aGlzLmJ1dHRvbnMpOworCisgIGlmICh0aGlzLmNsb3NhYmxlICYmIHRoaXMuY2xvc2VPbkVzY2FwZSkKKyAgeworICAgIFhpbmhhLl9hZGRFdmVudChkb2N1bWVudCwgJ2tleXByZXNzJywgZnVuY3Rpb24oZXYpIHsKKyAgICAgIGlmIChldi5rZXlDb2RlID09IDI3KSAvLyBFU0Mga2V5CisgICAgICB7CisgICAgICAgIGlmIChYaW5oYS5EaWFsb2cuYWN0aXZlTW9kZWxlc3MgPT0gZGlhbG9nIHx8IGRpYWxvZy5tb2RhbCkKKyAgICAgICAgeworICAgICAgICAgIGRpYWxvZy5oaWRlKCk7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHRoaXMuY2xvc2VyID0gbnVsbDsKKyAgaWYgKCB0aGlzLmNsb3NhYmxlICkKKyAgeworICAgIHRoaXMuY2xvc2VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgdGhpcy5jbG9zZXIuY2xhc3NOYW1lPSAnY2xvc2VCdXR0b24nOyAKKyAgICAgIAorICAgIHRoaXMuY2xvc2VyLm9ubW91c2Vkb3duID0gZnVuY3Rpb24oZXYpIHsgdGhpcy5jbGFzc05hbWUgPSAiY2xvc2VCdXR0b24gYnV0dG9uQ2xpY2siOyBYaW5oYS5fc3RvcEV2ZW50KFhpbmhhLmdldEV2ZW50KGV2KSk7IHJldHVybiBmYWxzZTt9OworICAgIHRoaXMuY2xvc2VyLm9ubW91c2VvdXQgPSBmdW5jdGlvbihldikgeyB0aGlzLmNsYXNzTmFtZSA9ICJjbG9zZUJ1dHRvbiI7IFhpbmhhLl9zdG9wRXZlbnQoWGluaGEuZ2V0RXZlbnQoZXYpKTsgcmV0dXJuIGZhbHNlO307CisgICAgdGhpcy5jbG9zZXIub25tb3VzZXVwID0gZnVuY3Rpb24oKSB7IHRoaXMuY2xhc3NOYW1lID0gImNsb3NlQnV0dG9uIjsgZGlhbG9nLmhpZGUoKTsgcmV0dXJuIGZhbHNlO307CisgIAorICAgIHRoaXMuYnV0dG9ucy5hcHBlbmRDaGlsZCh0aGlzLmNsb3Nlcik7CisgIAorICAgIHZhciBidXRYID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOworICAgIGJ1dFguY2xhc3NOYW1lID0gJ2lubmVyWCc7CisgICAgYnV0WC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7CisgICAgYnV0WC5zdHlsZS50b3AgPSAnLTNweCc7CisgIAorICAgIGJ1dFguYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1x1MDBENycpKTsgLy8gY3Jvc3MKKyAgICAvL2JlbG93IGRpZmZlcmVudCBzeW1ib2xzIGZvciBmdXR1cmUgdXNlCisgICAgLy9idXRYLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdcdTI1QUMnKSk7IC8vYmFyCisgICAgLy9idXRYLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdcdTI1QkEnKSk7IC8vdHJpYW5nbGUgcmlnaHQKKyAgICAvL2J1dFguYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1x1MjVCMicpKTsgLy90cmlhbmdsZSB1cAorICAgIC8vYnV0WC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXHUyNUJDJykpOyAvL3RyaWFuZ2xlIGRvd24KKyAgICB0aGlzLmNsb3Nlci5hcHBlbmRDaGlsZChidXRYKTsKKyAgICBidXRYID0gbnVsbDsKKyAgfQorICAKKyAgdGhpcy5pY29uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7CisgIHZhciBpY29uID0gdGhpcy5pY29uOworICBpY29uLmNsYXNzTmFtZSA9ICdpY29uJzsKKyAgaWNvbi5zcmMgPSBlZGl0b3IuY29uZmlnLmljb25MaXN0LmRpYWxvZ0NhcHRpb247CisgIGljb24uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnOworICBpY29uLnN0eWxlLnRvcCA9ICczcHgnOworICBpY29uLnN0eWxlLmxlZnQgPSAnMnB4JzsKKyAgaWNvbi5vbmRyYWcgPSBmdW5jdGlvbiAoKSB7cmV0dXJuIGZhbHNlO307CisKKyAgLy9jYXB0aW9uQmFyLnN0eWxlLnBhZGRpbmdMZWZ0ID0gJzIycHgnOworICByb290RWxlbS5hcHBlbmRDaGlsZCh0aGlzLmljb24pOworICAKKyAgdmFyIGFsbCA9IHJvb3RFbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CisKKyAgZm9yICh2YXIgaT0wOyBpPGFsbC5sZW5ndGg7aSsrKQorICB7CisgICAgdmFyIGVsID0gYWxsW2ldOyAKKyAgICBpZiAoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICd0ZXh0YXJlYScgfHwgZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdpbnB1dCcpCisgICAgeworICAgICAgLy8gRklYTUU6IHRoaXMgZG9lc24ndCB3b3JrCisgICAgICAvL2VsLnN0eWxlLk1velVzZXJTZWxlY3QgPSAidGV4dCI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBlbC51bnNlbGVjdGFibGUgPSAib24iOworICAgIH0KKyAgfQorCisgIHRoaXMucmVzaXplciA9IG51bGw7CisgIGlmICh0aGlzLnJlc2l6YWJsZSkKKyAgeworICAgIHRoaXMucmVzaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIHRoaXMucmVzaXplci5jbGFzc05hbWUgPSAicmVzaXplSGFuZGxlIjsKKyAgICBzID0gdGhpcy5yZXNpemVyLnN0eWxlOworICAgIHMucG9zaXRpb24gPSAiYWJzb2x1dGUiOworICAgIHMuYm90dG9tID0gIjBweCI7CisgICAgcy5yaWdodD0gIjBweCI7CisgICAgcy5Nb3pVc2VyU2VsZWN0ID0gJ25vbmUnOworCisgICAgWGluaGEuX2FkZEV2ZW50KHRoaXMucmVzaXplciwgJ21vdXNlZG93bicsIGZ1bmN0aW9uKGV2KSB7IGRpYWxvZy5yZXNpemVTdGFydChldik7IH0pOworICAgIHJvb3RFbGVtLmFwcGVuZENoaWxkKHRoaXMucmVzaXplcik7CisgIH0KKworICB0aGlzLnJvb3RFbGVtID0gcm9vdEVsZW07CisgIHRoaXMuY2FwdGlvbkJhciA9IGNhcHRpb25CYXI7CisgIHRoaXMubWFpbiA9IG1haW47CisgIAorICBjYXB0aW9uQmFyID0gbnVsbDsKKyAgcm9vdEVsZW0gPSBudWxsOworICBtYWluID0gbnVsbDsKKyAgCisgIFhpbmhhLmZyZWVMYXRlcih0aGlzLCJyb290RWxlbSIpOworICBYaW5oYS5mcmVlTGF0ZXIodGhpcywiY2FwdGlvbkJhciIpOworICBYaW5oYS5mcmVlTGF0ZXIodGhpcywibWFpbiIpOworICBYaW5oYS5mcmVlTGF0ZXIodGhpcywgImJ1dHRvbnMiKTsKKyAgWGluaGEuZnJlZUxhdGVyKHRoaXMsICJjbG9zZXIiKTsKKyAgWGluaGEuZnJlZUxhdGVyKHRoaXMsICJpY29uIik7CisgIFhpbmhhLmZyZWVMYXRlcih0aGlzLCAicmVzaXplciIpOworICBYaW5oYS5mcmVlTGF0ZXIodGhpcywgImRvY3VtZW50Iik7CisgIAorICAvLyBmb3IgY2FjaGluZyBzaXplICYgcG9zaXRpb24gYWZ0ZXIgZHJhZ2dpbmcgJiByZXNpemluZworICB0aGlzLnNpemUgPSB7fTsKKworfTsKKy8qKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBkaWFsb2cgaXMgcmVzaXplZC4gCisgKiAgQnkgZGVmYXVsdCBpdCBkb2VzIG5vdGhpbmcsIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIGl0IGluIHlvdXIgWGluaGEuRGlhbG9nIG9iamVjdCBlLmcuIHRvIHJlc2l6ZSBlbGVtZW50cyB3aXRoaW4geW91IERpYWxvZy4KKyAqICBFeGFtcGxlOjxiciAvPgorICogIDxjb2RlPgorICogIHZhciBkaWFsb2cgPSB0aGlzLmRpYWxvZzsgLy9UaGUgcGx1Z2luJ3MgZGlhbG9nIGluc3RhbmNlOworICogIGRpYWxvZy5vbnJlc2l6ZSA9IGZ1bmN0aW9uKCkgCisgKiAgeworICogICAgdmFyIGVsID0gZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdmb28nKTsKKyAqICAgIGVsLnN0eWxlLndpZHRoID0gZGlhbG9nLndpZHRoOworICogIH0KKyAqICA8L2NvZGU+CisgKi8KK1hpbmhhLkRpYWxvZy5wcm90b3R5cGUub25yZXNpemUgPSBmdW5jdGlvbigpCit7CisgIHJldHVybiB0cnVlOworfTsKKy8qKiBUaGlzIGZ1bmN0aW9uIHNob3dzIHRoZSBkaWFsb2cgYW5kIHBvcHVsYXRlcyBmb3JtIGVsZW1lbnRzIHdpdGggdmFsdWVzLgorICogRXhhbXBsZTo8YnIgLz4KKyAqIEdpdmVuIHlvdXIgZGlhbG9nIGNvbnRhaW5zIGFuIGlucHV0IGVsZW1lbnQgbGlrZSA8Y29kZT4mbHQ7aW5wdXQgbmFtZT0iW215SW5wdXRdIiB0eXBlPSJ0ZXh0IiAvJmd0OzwvY29kZT4KKyAqIDxjb2RlPgorICogIHZhciBkaWFsb2cgPSB0aGlzLmRpYWxvZzsgLy9UaGUgcGx1Z2luJ3MgZGlhbG9nIGluc3RhbmNlOworICogIHZhciB2YWx1ZXMgPSB7bXlJbnB1dCA6ICdNeSBpbnB1dCB2YWx1ZSd9CisgKiAgZGlhbG9nLnNob3codmFsdWVzKTsKKyAqICA8L2NvZGU+CisgKiAgQHNlZSAjc2V0VmFsdWVzCisgKiAgQHBhcmFtIHtPYmplY3R9IHZhbHVlcyBPYmplY3QgaW5kZXhlZCBieSBuYW1lcyBvZiBpbnB1dCBlbGVtZW50cworICovCitYaW5oYS5EaWFsb2cucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbih2YWx1ZXMpCit7CisgIHZhciByb290RWxlbSA9IHRoaXMucm9vdEVsZW07CisgIHZhciByb290RWxlbVN0eWxlID0gcm9vdEVsZW0uc3R5bGU7CisgIHZhciBtb2RhbCA9IHRoaXMubW9kYWw7CisgIHZhciBzY3JvbGxQb3MgPSB0aGlzLmVkaXRvci5zY3JvbGxQb3MoKTsKKyAgdGhpcy5zY3JvbGxQb3MgPSBzY3JvbGxQb3M7CisgIHZhciBkaWFsb2cgPSB0aGlzOworICAvL2RpYWxvZy5tYWluLnN0eWxlLmhlaWdodCA9ICcnOworICBpZiAoIHRoaXMuYXR0YWNoZWQgKSAKKyAgeworICAgIHRoaXMuZWRpdG9yLnNob3dQYW5lbChyb290RWxlbSk7CisgIH0KKyAgICAKKyAgLy8gV2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgc2VsZWN0aW9uCisgIC8vIGlmIHRoaXMgaXMgY2FsbGVkIGJlZm9yZSBzb21lIGVkaXRvciBoYXMgYmVlbiBhY3RpdmF0ZWQsIGl0IGFjdGl2YXRlcyB0aGUgZWRpdG9yCisgIGlmIChYaW5oYS5fc29tZUVkaXRvckhhc0JlZW5BY3RpdmF0ZWQpCisgIHsKKyAgICB0aGlzLl9sYXN0UmFuZ2UgPSB0aGlzLmVkaXRvci5zYXZlU2VsZWN0aW9uKCk7CisgICAgIAorICAgIGlmIChYaW5oYS5pc19pZSAmJiAhbW9kYWwpCisgICAgeworICAgICAgZGlhbG9nLnNhdmVTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsgZGlhbG9nLl9sYXN0UmFuZ2UgPSBkaWFsb2cuZWRpdG9yLnNhdmVTZWxlY3Rpb24oKTt9OworICAgICAgWGluaGEuX2FkZEV2ZW50KHRoaXMuZWRpdG9yLl9kb2MsJ21vdXNldXAnLCBkaWFsb2cuc2F2ZVNlbGVjdGlvbik7CisgICAgfQorICB9CisgCisgIGlmICggbW9kYWwgKQorICB7CisgICAgdGhpcy5lZGl0b3IuZGVhY3RpdmF0ZUVkaXRvcigpOworICAgIHRoaXMuZWRpdG9yLnN1c3BlbmRVcGRhdGVUb29sYmFyID0gdHJ1ZTsKKyAgICB0aGlzLmVkaXRvci5jdXJyZW50TW9kYWwgPSBkaWFsb2c7CisgIH0KKworICAvLyB1bmZvcnR1bmF0ZWx5IHdlIGhhdmUgdG8gaGlkZSB0aGUgZWRpdG9yIChpZnJhbWUvY2FyZXQgYnVnKQorICBpZiAoWGluaGEuaXNfZmYyICYmIG1vZGFsKQorICB7CisgICAgdGhpcy5fcmVzdG9yZVRvID0gW3RoaXMuZWRpdG9yLl90ZXh0QXJlYS5zdHlsZS5kaXNwbGF5LCB0aGlzLmVkaXRvci5faWZyYW1lLnN0eWxlLnZpc2liaWxpdHksIHRoaXMuZWRpdG9yLmhpZGVQYW5lbHMoKV07CisgICAgdGhpcy5lZGl0b3IuX3RleHRBcmVhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgdGhpcy5lZGl0b3IuX2lmcmFtZS5zdHlsZS52aXNpYmlsaXR5ICAgPSAnaGlkZGVuJzsKKyAgfQorICAKKyAgaWYgKCAhdGhpcy5hdHRhY2hlZCApCisgIHsKKyAgICBpZiAobW9kYWwpIAorICAgIHsKKyAgICAgIHRoaXMuc2hvd0JhY2tncm91bmQoKTsKKyAgICAgIHRoaXMucG9zQmFja2dyb3VuZCh7CisgICAgICAgIHRvcDogMCwKKyAgICAgICAgbGVmdDogMAorICAgICAgfSk7CisgICAgICB0aGlzLnJlc2l6ZUJhY2tncm91bmQoWGluaGEuRGlhbG9nLmNhbGNGdWxsQmdTaXplKCkpOworICAgIH0KKyAgICBlbHNlIAorICAgIHsKKyAgICAgIHRoaXMuYmFja2dyb3VuZC5zdHlsZS5kaXNwbGF5ID0gJyc7CisgICAgfQorCisgICAgLy90aGlzLm9uUmVzaXplV2luID0gZnVuY3Rpb24gKCkge2RpYWxvZy5zaXplQmFja2dyb3VuZCgpfTsKKyAgICAvL1hpbmhhLl9hZGRFdmVudCh3aW5kb3csICdyZXNpemUnLCB0aGlzLm9uUmVzaXplV2luICk7CisKKyAgICAvL3Jvb3RFbGVtU3R5bGUuZGlzcGxheSAgID0gJyc7CisgICAgWGluaGEuRGlhbG9nLmZhZGVJbih0aGlzLnJvb3RFbGVtLCAxMDAsZnVuY3Rpb24oKSB7CisgICAgICAvL3RoaXMgaXMgcHJpbWFyaWx5IHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluIElFIHdoZXJlIGFic29sdXRlbHkgcG9zaXRpb25lZCBlbGVtZW50cyBoYXZlIGEgZnJhbWUgdGhhdCByZW5kZXJzIGFib3ZlIGFsbCAjMTI2OAorICAgICAgLy9idXQgY291bGQgYWxzbyBiZSBzZWVuIGFzIGEgZmVhdHVyZSA7KQorICAgICAgaWYgKG1vZGFsKQorICAgICAgeworICAgICAgICB2YXIgaW5wdXQgPSBkaWFsb2cucm9vdEVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0Jyk7CisgICAgICAgIGZvciAodmFyIGk9MDtpPGlucHV0Lmxlbmd0aDtpKyspCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoaW5wdXRbaV0udHlwZSA9PSAndGV4dCcpCisgICAgICAgICAgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgaW5wdXRbaV0uZm9jdXMoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoZSkge30KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKyAgICAvL2hpZGUgb2JqZWN0ICYgZW1iZWQgdGFncyBpbiBkb2N1bWVudCBzbyB0aGV5IHdvbid0IHNob3cgdGhyb3VnaAorICAgIGlmICh0aGlzLmVkaXRvci5jb25maWcuaGlkZU9iamVjdHNCZWhpbmREaWFsb2dzKQorICAgIHsKKyAgICAgIHRoaXMub2JqVGFncyA9IHRoaXMuZWRpdG9yLl9kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpOworICAgICAgdGhpcy5lbWJlZFRhZ3MgPSB0aGlzLmVkaXRvci5fZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdlbWJlZCcpOworICAgICAgZm9yICh2YXIgaj0wOyBqPHRoaXMub2JqVGFncy5sZW5ndGg7IGorKykKKyAgICAgIHsKKyAgICAgICAgdGhpcy5vYmpUYWdzW2pdLl9fb2JqZWN0X2hpZGRlbiA9IHRoaXMub2JqVGFnc1tqXS5zdHlsZS52aXNpYmlsaXR5OworICAgICAgICB0aGlzLm9ialRhZ3Nbal0uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOworICAgICAgfQorICAgICAgZm9yIChqPTA7IGo8dGhpcy5lbWJlZFRhZ3MubGVuZ3RoOyBqKyspCisgICAgICB7CisgICAgICAgIHRoaXMuZW1iZWRUYWdzW2pdLl9fZW1iZWRfaGlkZGVuID0gdGhpcy5lbWJlZFRhZ3Nbal0uc3R5bGUudmlzaWJpbGl0eTsKKyAgICAgICAgdGhpcy5lbWJlZFRhZ3Nbal0uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOworICAgICAgfQorICAgIH0KKworICAgIHZhciBkaWFsb2dIZWlnaHQgPSByb290RWxlbS5vZmZzZXRIZWlnaHQ7CisgICAgdmFyIGRpYWxvZ1dpZHRoID0gcm9vdEVsZW0ub2Zmc2V0V2lkdGg7CisgICAgdmFyIHZpZXdwb3J0ID0gWGluaGEudmlld3BvcnRTaXplKCk7CisgICAgdmFyIHZpZXdwb3J0SGVpZ2h0ID0gdmlld3BvcnQueTsKKyAgICB2YXIgdmlld3BvcnRXaWR0aCA9IHZpZXdwb3J0Lng7CisgICAgCisgICAgaWYgKGRpYWxvZ0hlaWdodCA+ICB2aWV3cG9ydEhlaWdodCkKKyAgICB7CisgICAgICByb290RWxlbVN0eWxlLmhlaWdodCA9ICB2aWV3cG9ydEhlaWdodCArICJweCI7CisgICAgICBpZiAocm9vdEVsZW0uc2Nyb2xsSGVpZ2h0ID4gZGlhbG9nSGVpZ2h0KQorICAgICAgeworICAgICAgICBkaWFsb2cubWFpbi5zdHlsZS5vdmVyZmxvd1kgPSAiYXV0byI7CisgICAgICB9CisgICAgfQorCisgICAgaWYodGhpcy5zaXplLnRvcCAmJiB0aGlzLnNpemUubGVmdCkKKyAgICB7CisgICAgICByb290RWxlbVN0eWxlLnRvcCA9ICBwYXJzZUludCh0aGlzLnNpemUudG9wLDEwKSArICdweCc7CisgICAgICByb290RWxlbVN0eWxlLmxlZnQgPSBwYXJzZUludCh0aGlzLnNpemUubGVmdCwxMCkgKyAncHgnOworICAgIH0KKyAgICBlbHNlIGlmICh0aGlzLmVkaXRvci5idG5DbGlja0V2ZW50ICYmICF0aGlzLmNlbnRlcmVkKQorICAgIHsKKyAgICAgIHZhciBidG5DbGlja0V2ZW50ID0gdGhpcy5lZGl0b3IuYnRuQ2xpY2tFdmVudDsKKyAgICAgIGlmIChyb290RWxlbVN0eWxlLnBvc2l0aW9uID09ICdhYnNvbHV0ZScpCisgICAgICB7CisgICAgICAgIHJvb3RFbGVtU3R5bGUudG9wID0gIGJ0bkNsaWNrRXZlbnQuY2xpZW50WSArIHRoaXMuc2Nyb2xsUG9zLnkgKydweCc7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHJvb3RFbGVtU3R5bGUudG9wID0gIGJ0bkNsaWNrRXZlbnQuY2xpZW50WSArJ3B4JzsKKyAgICAgIH0KKworICAgICAgaWYgKGRpYWxvZ0hlaWdodCArIHJvb3RFbGVtLm9mZnNldFRvcCA+ICB2aWV3cG9ydEhlaWdodCkKKyAgICAgIHsKKyAgICAgICAgcm9vdEVsZW1TdHlsZS50b3AgPSAocm9vdEVsZW1TdHlsZS5wb3NpdGlvbiA9PSAnYWJzb2x1dGUnID8gdGhpcy5zY3JvbGxQb3MueSA6IDAgKSArICJweCIgOworICAgICAgfQorCisgICAgICBpZiAocm9vdEVsZW1TdHlsZS5wb3NpdGlvbiA9PSAnYWJzb2x1dGUnKQorICAgICAgeworICAgICAgICByb290RWxlbVN0eWxlLmxlZnQgPSBidG5DbGlja0V2ZW50LmNsaWVudFggKyAgdGhpcy5zY3JvbGxQb3MueCArJ3B4JzsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgcm9vdEVsZW1TdHlsZS5sZWZ0ID0gIGJ0bkNsaWNrRXZlbnQuY2xpZW50WCArJ3B4JzsKKyAgICAgIH0KKworICAgICAgaWYgKGRpYWxvZ1dpZHRoICsgcm9vdEVsZW0ub2Zmc2V0TGVmdCA+ICB2aWV3cG9ydFdpZHRoKQorICAgICAgeworICAgICAgICByb290RWxlbVN0eWxlLmxlZnQgPSAgYnRuQ2xpY2tFdmVudC5jbGllbnRYIC0gZGlhbG9nV2lkdGggICArICdweCc7CisgICAgICAgIGlmIChyb290RWxlbS5vZmZzZXRMZWZ0IDwgMCkKKyAgICAgICAgeworICAgICAgICAgIHJvb3RFbGVtU3R5bGUubGVmdCA9IDA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHRoaXMuZWRpdG9yLmJ0bkNsaWNrRXZlbnQgPSBudWxsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgdmFyIHRvcCA9ICAoIHZpZXdwb3J0SGVpZ2h0IC0gZGlhbG9nSGVpZ2h0KSAvIDI7CisgICAgICB2YXIgbGVmdCA9ICggdmlld3BvcnRXaWR0aCAtIGRpYWxvZ1dpZHRoKSAvIDI7CisgICAgICByb290RWxlbVN0eWxlLnRvcCA9ICAoKHRvcCA+IDApID8gdG9wIDogMCkgKydweCc7CisgICAgICByb290RWxlbVN0eWxlLmxlZnQgPSAoKGxlZnQgPiAwKSA/IGxlZnQgOiAwKSsncHgnOworICAgIH0KKyAgfQorICB0aGlzLndpZHRoID0gZGlhbG9nV2lkdGg7CisgIHRoaXMuaGVpZ2h0ID0gZGlhbG9nSGVpZ2h0OworCisgIGlmICghbW9kYWwpCisgIHsKKyAgICB0aGlzLnJlc2l6ZUJhY2tncm91bmQoe3dpZHRoOiBkaWFsb2dXaWR0aCArICdweCcsIGhlaWdodDogZGlhbG9nSGVpZ2h0ICsgJ3B4JyB9KTsKKyAgICB0aGlzLnBvc0JhY2tncm91bmQoe3RvcDogIHJvb3RFbGVtU3R5bGUudG9wLCBsZWZ0OiByb290RWxlbVN0eWxlLmxlZnR9KTsKKyAgfQorIAorICBpZih0eXBlb2YgdmFsdWVzICE9ICd1bmRlZmluZWQnKQorICB7CisgICAgdGhpcy5zZXRWYWx1ZXModmFsdWVzKTsKKyAgfQorICB0aGlzLmRpYWxvZ1Nob3duID0gdHJ1ZTsKK307CisvKiogSGlkZXMgdGhlIGRpYWxvZyBhbmQgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgdmFsdXNlIG9mIGZvcm0gZWxlbWVudHMKKyAqIEBzZWUgI2dldFZhbHVlcworICogQHR5cGUgT2JqZWN0CisgKi8KK1hpbmhhLkRpYWxvZy5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uKCkKK3sKKyAgaWYgKCB0aGlzLmF0dGFjaGVkICkKKyAgeworICAgIHRoaXMuZWRpdG9yLmhpZGVQYW5lbCh0aGlzLnJvb3RFbGVtKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICAvL3RoaXMucm9vdEVsZW0uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICBYaW5oYS5EaWFsb2cuZmFkZU91dCh0aGlzLnJvb3RFbGVtKTsKKyAgICB0aGlzLmhpZGVCYWNrZ3JvdW5kKCk7CisgICAgdmFyIGRpYWxvZyA9IHRoaXM7CisKKyAgICBpZiAoWGluaGEuaXNfZmYyICYmIHRoaXMubW9kYWwpCisgICAgeworICAgICAgdGhpcy5lZGl0b3IuX3RleHRBcmVhLnN0eWxlLmRpc3BsYXkgPSB0aGlzLl9yZXN0b3JlVG9bMF07CisgICAgICB0aGlzLmVkaXRvci5faWZyYW1lLnN0eWxlLnZpc2liaWxpdHkgICA9IHRoaXMuX3Jlc3RvcmVUb1sxXTsKKyAgICAgIHRoaXMuZWRpdG9yLnNob3dQYW5lbHModGhpcy5fcmVzdG9yZVRvWzJdKTsKKyAgICB9CisKKyAgICAvL3Jlc3RvcmUgdmlzaWJpbGl0eSBvZiBvYmplY3QgJiBlbWJlZCB0YWdzIGluIGRvY3VtZW50CisgICAgaWYgKHRoaXMuZWRpdG9yLmNvbmZpZy5oaWRlT2JqZWN0c0JlaGluZERpYWxvZ3MpCisgICAgeworICAgICAgZm9yICh2YXIgaj0wOyBqPHRoaXMub2JqVGFncy5sZW5ndGg7IGorKykKKyAgICAgIHsKKyAgICAgICAgdGhpcy5vYmpUYWdzW2pdLnN0eWxlLnZpc2liaWxpdHkgPSB0aGlzLm9ialRhZ3Nbal0uX19vYmplY3RfaGlkZGVuOworICAgICAgfQorICAgICAgZm9yIChqPTA7IGo8dGhpcy5lbWJlZFRhZ3MubGVuZ3RoOyBqKyspCisgICAgICB7CisgICAgICAgIHRoaXMuZW1iZWRUYWdzW2pdLnN0eWxlLnZpc2liaWxpdHkgPSB0aGlzLmVtYmVkVGFnc1tqXS5fX2VtYmVkX2hpZGRlbjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXRoaXMuZWRpdG9yLl9pc0Z1bGxTY3JlZW4gJiYgdGhpcy5tb2RhbCkKKyAgICB7CisgICAgICB3aW5kb3cuc2Nyb2xsKHRoaXMuc2Nyb2xsUG9zLngsIHRoaXMuc2Nyb2xsUG9zLnkpOworICAgIH0KKworICAgIGlmIChYaW5oYS5pc19pZSAmJiAhdGhpcy5tb2RhbCkKKyAgICB7CisgICAgICBYaW5oYS5fcmVtb3ZlRXZlbnQodGhpcy5lZGl0b3IuX2RvYywnbW91c2V1cCcsIGRpYWxvZy5zYXZlU2VsZWN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAodGhpcy5tb2RhbCkKKyAgICB7CisgICAgICB0aGlzLmVkaXRvci5zdXNwZW5kVXBkYXRlVG9vbGJhciA9IGZhbHNlOworICAgICAgdGhpcy5lZGl0b3IuY3VycmVudE1vZGFsID0gbnVsbDsKKyAgICAgIHRoaXMuZWRpdG9yLmFjdGl2YXRlRWRpdG9yKCk7CisgICAgfQorICB9CisKKyAgaWYgKHRoaXMubW9kYWwpCisgIHsKKyAgICB0aGlzLmVkaXRvci5yZXN0b3JlU2VsZWN0aW9uKHRoaXMuX2xhc3RSYW5nZSk7CisgIH0KKyAgCisgIHRoaXMuZGlhbG9nU2hvd24gPSBmYWxzZTsKKyAgdGhpcy5lZGl0b3IudXBkYXRlVG9vbGJhcigpOworICB0aGlzLmVkaXRvci5mb2N1c0VkaXRvcigpOworICByZXR1cm4gdGhpcy5nZXRWYWx1ZXMoKTsKK307CisvKiogU2hvd3MvaGlkZXMgdGhlIGRpYWxvZworICogCisgKi8KK1hpbmhhLkRpYWxvZy5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24oKQoreworICBpZih0aGlzLnJvb3RFbGVtLnN0eWxlLmRpc3BsYXkgPT0gJ25vbmUnKQorICB7CisgICAgdGhpcy5zaG93KCk7CisgIH0KKyAgZWxzZQorICB7CisgICAgdGhpcy5oaWRlKCk7CisgIH0KK307CisvKiogUmVkdWNlcyB0aGUgZGlhbG9nIHRvIHRoZSBzaXplIG9mIHRoZSBjYXB0aW9uIGJhcgorICogCisgKi8KK1hpbmhhLkRpYWxvZy5wcm90b3R5cGUuY29sbGFwc2UgPSBmdW5jdGlvbigpCit7CisgIGlmKHRoaXMuY29sbGFwc2VkKQorICB7CisgICAgdGhpcy5jb2xsYXBzZWQgPSBmYWxzZTsKKyAgICB0aGlzLnNob3coKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICB0aGlzLm1haW4uc3R5bGUuaGVpZ2h0ID0gMDsKKyAgICB0aGlzLmNvbGxhcHNlZCA9IHRydWU7CisgIH0KK307CisvKiogRXF1aXZhbGVudCB0byBkb2N1bWVudC5nZXRFbGVtZW50QnlJZC4gWW91IGNhbid0IHVzZSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCBiZWNhdXNlIGlkJ3MgYXJlIGR5bmFtaWMgdG8gYXZvaWQgaWQgY2xhc2hlcyBiZXR3ZWVuIHBsdWdpbnMKKyAqIEB0eXBlIERvbU5vZGUKKyAqIEBwYXJhbSB7U3RyaW5nfSBpZAorICovCitYaW5oYS5EaWFsb2cucHJvdG90eXBlLmdldEVsZW1lbnRCeUlkID0gZnVuY3Rpb24oaWQpCit7CisgIGlmKCF0aGlzLnJvb3RFbGVtLnBhcmVudE5vZGUpCisgIHsgICAgIAorICAgIHRoaXMuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnJvb3RFbGVtKTsKKyAgfQorICAKKyAgcmV0dXJuIHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5pZFtpZF0gPyB0aGlzLmlkW2lkXSA6IGlkKTsKK307CisvKiogRXF1aXZhbGVudCB0byBkb2N1bWVudC5nZXRFbGVtZW50QnlOYW1lLiBZb3UgY2FuJ3QgdXNlIGRvY3VtZW50LmdldEVsZW1lbnRCeU5hbWUgYmVjYXVzZSBuYW1lcyBhcmUgZHluYW1pYyB0byBhdm9pZCBuYW1lIGNsYXNoZXMgYmV0d2VlbiBwbHVnaW5zCisgKiBAdHlwZSBBcnJheQorICogQHBhcmFtIHtTdHJpbmd9IG5hbWUKKyAqLworWGluaGEuRGlhbG9nLnByb3RvdHlwZS5nZXRFbGVtZW50c0J5TmFtZSA9IGZ1bmN0aW9uKG5hbWUpCit7CisgIGlmKCF0aGlzLnJvb3RFbGVtLnBhcmVudE5vZGUpCisgIHsgICAgIAorICAgIHRoaXMuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnJvb3RFbGVtKTsKKyAgfQorICAgIAorICB2YXIgZWxzID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSh0aGlzLmlkW25hbWVdID8gdGhpcy5pZFtuYW1lXSA6IG5hbWUpOyAKKyAgcmV0dXJuIFhpbmhhLmNvbGxlY3Rpb25Ub0FycmF5KGVscyk7Cit9OworLyoqIFJldHVybiBhbGwgZWxlbWVudHMgaW4gdGhlIGRpYWxvZyB0aGF0IGhhdmUgdGhlIGdpdmVuIGNsYXNzCisgKiBAdHlwZSBBcnJheSAKKyAqIEBwYXJhbSB7U3RyaW5nfSBjbGFzc05hbWUKKyAqLworWGluaGEuRGlhbG9nLnByb3RvdHlwZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gZnVuY3Rpb24oY2xhc3NOYW1lKQoreworICByZXR1cm4gWGluaGEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0aGlzLnJvb3RFbGVtLGNsYXNzTmFtZSk7Cit9OworCisvKiogUmV0dXJuIGFsbCBlbGVtZW50cyBpbiB0aGUgZGlhbG9nIHRoYXQgaGF2ZSB0aGUgZ2l2ZW4gY2xhc3MKKyAqIEB0eXBlIEFycmF5IAorICogQHBhcmFtIHtTdHJpbmd9IGNsYXNzTmFtZQorICovCitYaW5oYS5EaWFsb2cucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lID0gZnVuY3Rpb24oY2xhc3NOYW1lKQoreworICByZXR1cm4gWGluaGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGhpcy5yb290RWxlbSxjbGFzc05hbWUpOworfTsKKworLyoqIENyZWF0ZXMgYW4gZWxlbWVudGluIHRoZSBkaWFsb2csIHdpdGggdGhlIGdpdmVuIGlkIGlmIHByb3ZpZGVkCisgKiAgIChub3RlIHRoYXQgdGhlIGlkIGlzIHRyYW5zZm9tZWQgaW50byBhIHVuaXF1ZSBpZCkKKyAqLworCitYaW5oYS5EaWFsb2cucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbih0YWdOYW1lLCBpZCkKK3sKKyAgdmFyIG5ld0VsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7CisgIGlmKHR5cGVvZiBpZCA9PSAnc3RyaW5nJykKKyAgeworICAgIG5ld0VsZW1lbnQuaWQgPSB0aGlzLmNyZWF0ZUlkKGlkKTsKKyAgfQorICByZXR1cm4gbmV3RWxlbWVudDsKK307CisKKy8qKiBJbml0aWF0ZXMgZHJhZ2dpbmcKKyAqIEBwcml2YXRlCisgKiBAcGFyYW0ge09iamVjdH0gZXYgTW91c2Vkb3duIGV2ZW50CisgKi8KK1hpbmhhLkRpYWxvZy5wcm90b3R5cGUuZHJhZ1N0YXJ0ID0gZnVuY3Rpb24gKGV2KSAKK3sKKyAgaWYgKCB0aGlzLmF0dGFjaGVkIHx8IHRoaXMuZHJhZ2dpbmcpIAorICB7CisgICAgcmV0dXJuOworICB9CisgIGlmICghdGhpcy5tb2RhbCkKKyAgeworICAgIHRoaXMucG9zQmFja2dyb3VuZCh7dG9wOjAsIGxlZnQ6MH0pOyAKKyAgICB0aGlzLnJlc2l6ZUJhY2tncm91bmQoWGluaGEuRGlhbG9nLmNhbGNGdWxsQmdTaXplKCkpOworICAgIHRoaXMuZWRpdG9yLnN1c3BlbmRVcGRhdGVUb29sYmFyID0gdHJ1ZTsKKyAgfQorICBldiA9IFhpbmhhLmdldEV2ZW50KGV2KTsKKyAgCisgIHZhciBkaWFsb2cgPSB0aGlzOworCisgIGRpYWxvZy5kcmFnZ2luZyA9IHRydWU7CisKKyAgZGlhbG9nLnNjcm9sbFBvcyA9IGRpYWxvZy5lZGl0b3Iuc2Nyb2xsUG9zKCk7CisgICAKKyAgdmFyIHN0ID0gZGlhbG9nLnJvb3RFbGVtLnN0eWxlOworCisgIGRpYWxvZy54T2ZmcyA9ICBldi5vZmZzZXRYIHx8IGV2LmxheWVyWDsgLy9maXJzdCB2YWx1ZSBmb3IgSUUvT3BlcmEvU2FmYXJpLCBzZWNvbmQgdmFsdWUgZm9yIEdlY2tvIChvciBzaG91bGQgSSBzYXkgIm5ldHNjYXBlIjspKQorICBkaWFsb2cueU9mZnMgPSAgZXYub2Zmc2V0WSB8fCBldi5sYXllclk7CisKKyAgZGlhbG9nLm1vdXNlTW92ZSA9IGZ1bmN0aW9uKGV2KSB7IGRpYWxvZy5kcmFnSXQoZXYpOyB9OworICBYaW5oYS5fYWRkRXZlbnQoZG9jdW1lbnQsIm1vdXNlbW92ZSIsIGRpYWxvZy5tb3VzZU1vdmUgKTsKKyAgaWYgKFhpbmhhLmlzX2llKSAKKyAgeworICAgIFhpbmhhLl9hZGRFdmVudCh0aGlzLmJhY2tncm91bmQuY29udGVudFdpbmRvdy5kb2N1bWVudCwgIm1vdXNlbW92ZSIsIGRpYWxvZy5tb3VzZU1vdmUpOworICB9CisgIAorICBkaWFsb2cubW91c2VVcCA9IGZ1bmN0aW9uIChldikgeyBkaWFsb2cuZHJhZ0VuZChldik7IH07CisgIFhpbmhhLl9hZGRFdmVudChkb2N1bWVudCwibW91c2V1cCIsICBkaWFsb2cubW91c2VVcCk7CisgIGlmIChYaW5oYS5pc19pZSkgCisgIHsKKyAgICBYaW5oYS5fYWRkRXZlbnQodGhpcy5iYWNrZ3JvdW5kLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsICJtb3VzZXVwIiwgZGlhbG9nLm1vdXNlVXApOworICB9Cit9OworLyoqIFNldHMgdGhlIHBvc2l0aW9uIHdoaWxlIGRyYWdnaW5nCisgKiBAcHJpdmF0ZQorICogQHBhcmFtIHtPYmplY3R9IGV2IE1vdXNlbW92ZSBldmVudAorICovCitYaW5oYS5EaWFsb2cucHJvdG90eXBlLmRyYWdJdCA9IGZ1bmN0aW9uKGV2KQoreworICB2YXIgZGlhbG9nID0gdGhpczsKKworICBpZiAoIWRpYWxvZy5kcmFnZ2luZykgCisgIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgdmFyIHBvc1ksIHBvc1gsIG5ld1BvczsKKyAgaWYgKGRpYWxvZy5yb290RWxlbS5zdHlsZS5wb3NpdGlvbiA9PSAnYWJzb2x1dGUnKQorICB7CisgICAgcG9zWSA9IChldi5jbGllbnRZICsgdGhpcy5zY3JvbGxQb3MueSkgLSBkaWFsb2cueU9mZnMgKyAicHgiOworICAgIHBvc1ggPSAoZXYuY2xpZW50WCArIHRoaXMuc2Nyb2xsUG9zLngpIC0gZGlhbG9nLnhPZmZzICsgInB4IjsKKworICAgIG5ld1BvcyA9IHt0b3A6IHBvc1ksbGVmdDogcG9zWH07CisgIH0KKyAgZWxzZSBpZiAoZGlhbG9nLnJvb3RFbGVtLnN0eWxlLnBvc2l0aW9uID09ICdmaXhlZCcpCisgIHsKKyAgICBwb3NZID0gZXYuY2xpZW50WSAgLSBkaWFsb2cueU9mZnMgKyAicHgiOworICAgIHBvc1ggPSBldi5jbGllbnRYIC0gZGlhbG9nLnhPZmZzICsgInB4IjsKKworICAgIG5ld1BvcyA9IHt0b3A6IHBvc1ksbGVmdDogcG9zWH07CisgIH0KKyAgCisgIGRpYWxvZy5wb3NEaWFsb2cobmV3UG9zKTsKK307CisvKiogRW5kcyBkcmFnZ2luZworICogQHByaXZhdGUKKyAqIEBwYXJhbSB7T2JqZWN0fSBldiBNb3VzZXVwIGV2ZW50CisgKi8KK1hpbmhhLkRpYWxvZy5wcm90b3R5cGUuZHJhZ0VuZCA9IGZ1bmN0aW9uKGV2KQoreworICB2YXIgZGlhbG9nID0gdGhpczsKKyAgCisgIGlmICghdGhpcy5tb2RhbCkKKyAgeworICAgICB0aGlzLmVkaXRvci5zdXNwZW5kVXBkYXRlVG9vbGJhciA9IGZhbHNlOyAKKyAgfQorCisgIGlmICghZGlhbG9nLmRyYWdnaW5nKSAKKyAgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBkaWFsb2cuZHJhZ2dpbmcgPSBmYWxzZTsKKworICBYaW5oYS5fcmVtb3ZlRXZlbnQoZG9jdW1lbnQsICJtb3VzZW1vdmUiLCBkaWFsb2cubW91c2VNb3ZlICk7CisgIGlmIChYaW5oYS5pc19pZSkgCisgIHsKKyAgICBYaW5oYS5fcmVtb3ZlRXZlbnQodGhpcy5iYWNrZ3JvdW5kLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsICJtb3VzZW1vdmUiLCBkaWFsb2cubW91c2VNb3ZlKTsKKyAgfQorICBYaW5oYS5fcmVtb3ZlRXZlbnQoZG9jdW1lbnQsICJtb3VzZXVwIiwgZGlhbG9nLm1vdXNlVXApOworICBpZiAoWGluaGEuaXNfaWUpIAorICB7CisgICAgWGluaGEuX3JlbW92ZUV2ZW50KHRoaXMuYmFja2dyb3VuZC5jb250ZW50V2luZG93LmRvY3VtZW50LCAibW91c2V1cCIsIGRpYWxvZy5tb3VzZVVwKTsKKyAgfQorCisgIHZhciByb290RWxlbVN0eWxlID0gZGlhbG9nLnJvb3RFbGVtLnN0eWxlOworICAKKyAgZGlhbG9nLnNpemUudG9wICA9IHJvb3RFbGVtU3R5bGUudG9wOworICBkaWFsb2cuc2l6ZS5sZWZ0ID0gcm9vdEVsZW1TdHlsZS5sZWZ0OworICAKKyAgaWYgKCF0aGlzLm1vZGFsKQorICB7CisgICAgdGhpcy5zaXplQmdUb0RpYWxvZygpOworICB9CisKK307CisvKiogSW5pdGlhdGVzIHJlc2l6aW5nCisgKiBAcHJpdmF0ZQorICogQHBhcmFtIHtPYmplY3R9IGV2IE1vdXNlZG93biBldmVudAorICovCitYaW5oYS5EaWFsb2cucHJvdG90eXBlLnJlc2l6ZVN0YXJ0ID0gZnVuY3Rpb24gKGV2KSB7CisgIHZhciBkaWFsb2cgPSB0aGlzOworICBpZiAoZGlhbG9nLnJlc2l6aW5nKQorICB7CisgICAgcmV0dXJuOworICB9CisgIGRpYWxvZy5yZXNpemluZyA9IHRydWU7CisgIGlmICghdGhpcy5tb2RhbCkKKyAgeworICAgIHRoaXMuZWRpdG9yLnN1c3BlbmRVcGRhdGVUb29sYmFyID0gdHJ1ZTsKKyAgICB0aGlzLnBvc0JhY2tncm91bmQoe3RvcDowLCBsZWZ0OjB9KTsgCisgICAgdGhpcy5yZXNpemVCYWNrZ3JvdW5kKFhpbmhhLkRpYWxvZy5jYWxjRnVsbEJnU2l6ZSgpKTsKKyAgfQorICBkaWFsb2cuc2Nyb2xsUG9zID0gZGlhbG9nLmVkaXRvci5zY3JvbGxQb3MoKTsKKyAgCisgIHZhciBzdCA9IGRpYWxvZy5yb290RWxlbS5zdHlsZTsKKyAgc3QubWluSGVpZ2h0ID0gJyc7CisgIHN0Lm92ZXJmbG93ICA9ICAnaGlkZGVuJzsKKyAgZGlhbG9nLnhPZmZzID0gcGFyc2VJbnQoc3QubGVmdCwxMCk7CisgIGRpYWxvZy55T2ZmcyA9IHBhcnNlSW50KHN0LnRvcCwxMCk7CisKKyAgZGlhbG9nLm1vdXNlTW92ZSA9IGZ1bmN0aW9uKGV2KSB7IGRpYWxvZy5yZXNpemVJdChldik7IH07CisgIFhpbmhhLl9hZGRFdmVudChkb2N1bWVudCwibW91c2Vtb3ZlIiwgZGlhbG9nLm1vdXNlTW92ZSApOworICBpZiAoWGluaGEuaXNfaWUpIAorICB7CisgICAgWGluaGEuX2FkZEV2ZW50KHRoaXMuYmFja2dyb3VuZC5jb250ZW50V2luZG93LmRvY3VtZW50LCAibW91c2Vtb3ZlIiwgZGlhbG9nLm1vdXNlTW92ZSk7CisgIH0KKyAgZGlhbG9nLm1vdXNlVXAgPSBmdW5jdGlvbiAoZXYpIHsgZGlhbG9nLnJlc2l6ZUVuZChldik7IH07CisgIFhpbmhhLl9hZGRFdmVudChkb2N1bWVudCwibW91c2V1cCIsICBkaWFsb2cubW91c2VVcCk7IAorICBpZiAoWGluaGEuaXNfaWUpIAorICB7CisgICAgWGluaGEuX2FkZEV2ZW50KHRoaXMuYmFja2dyb3VuZC5jb250ZW50V2luZG93LmRvY3VtZW50LCAibW91c2V1cCIsIGRpYWxvZy5tb3VzZVVwKTsKKyAgfQorfTsKKy8qKiBTZXRzIHRoZSBzaXplIHdoaWxlIHJlc2l6aW9uZworICogQHByaXZhdGUKKyAqIEBwYXJhbSB7T2JqZWN0fSBldiBNb3VzZW1vdmUgZXZlbnQKKyAqLworWGluaGEuRGlhbG9nLnByb3RvdHlwZS5yZXNpemVJdCA9IGZ1bmN0aW9uKGV2KQoreworICB2YXIgZGlhbG9nID0gdGhpczsKKworICBpZiAoIWRpYWxvZy5yZXNpemluZykgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICB2YXIgcG9zWSwgcG9zWDsKKyAgaWYgKGRpYWxvZy5yb290RWxlbS5zdHlsZS5wb3NpdGlvbiA9PSAnYWJzb2x1dGUnKQorICB7CisgICAgcG9zWSA9IGV2LmNsaWVudFkgKyBkaWFsb2cuc2Nyb2xsUG9zLnk7CisgICAgcG9zWCA9IGV2LmNsaWVudFggKyBkaWFsb2cuc2Nyb2xsUG9zLng7CisgIH0KKyAgZWxzZQorICB7CisgICAgcG9zWSA9IGV2LmNsaWVudFk7CisgICAgcG9zWCA9IGV2LmNsaWVudFg7CisgIH0KKworICBwb3NYIC09ICBkaWFsb2cueE9mZnM7CisgIHBvc1kgLT0gIGRpYWxvZy55T2ZmczsKKworICB2YXIgbmV3U2l6ZSA9IHt9OworICBuZXdTaXplLndpZHRoICA9ICgoIHBvc1ggPiAxMCkgPyBwb3NYIDogMTApICsgOCArICJweCI7CisgIG5ld1NpemUuaGVpZ2h0ID0gKCggcG9zWSA+IDEwKSA/IHBvc1kgOiAxMCkgKyAicHgiOworCisgIGRpYWxvZy5zaXplRGlhbG9nKG5ld1NpemUpOworICAKKyAgCisgIGRpYWxvZy53aWR0aCA9IGRpYWxvZy5yb290RWxlbS5vZmZzZXRXaWR0aDsKKyAgZGlhbG9nLmhlaWdodCA9IGRpYWxvZy5yb290RWxlbS5vZmZzZXRIZWlnaHQ7CisKKyAgZGlhbG9nLm9ucmVzaXplKCk7Cit9OworLyoqIEVuZHMgcmVzaXppbmcKKyAqIEBwcml2YXRlCisgKiBAcGFyYW0ge09iamVjdH0gZXYgTW91c2V1cCBldmVudAorICovCitYaW5oYS5EaWFsb2cucHJvdG90eXBlLnJlc2l6ZUVuZCA9IGZ1bmN0aW9uKGV2KQoreworICB2YXIgZGlhbG9nID0gdGhpczsKKyAgZGlhbG9nLnJlc2l6aW5nID0gZmFsc2U7CisKKyAgaWYgKCF0aGlzLm1vZGFsKQorICB7CisgICAgdGhpcy5lZGl0b3Iuc3VzcGVuZFVwZGF0ZVRvb2xiYXIgPSBmYWxzZTsKKyAgfQorCisgIFhpbmhhLl9yZW1vdmVFdmVudChkb2N1bWVudCwgIm1vdXNlbW92ZSIsIGRpYWxvZy5tb3VzZU1vdmUgKTsKKyAgaWYgKFhpbmhhLmlzX2llKSAKKyAgeworICAgIFhpbmhhLl9yZW1vdmVFdmVudCh0aGlzLmJhY2tncm91bmQuY29udGVudFdpbmRvdy5kb2N1bWVudCwgIm1vdXNldXAiLCBkaWFsb2cubW91c2VVcCk7CisgIH0KKyAgWGluaGEuX3JlbW92ZUV2ZW50KGRvY3VtZW50LCAibW91c2V1cCIsICBkaWFsb2cubW91c2VVcCk7CisgIGlmIChYaW5oYS5pc19pZSkgCisgIHsKKyAgICBYaW5oYS5fcmVtb3ZlRXZlbnQodGhpcy5iYWNrZ3JvdW5kLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsICJtb3VzZXVwIiwgZGlhbG9nLm1vdXNlVXApOworICB9CisgIAorICBkaWFsb2cuc2l6ZS53aWR0aCAgPSBkaWFsb2cucm9vdEVsZW0ub2Zmc2V0V2lkdGg7CisgIGRpYWxvZy5zaXplLmhlaWdodCA9IGRpYWxvZy5yb290RWxlbS5vZmZzZXRIZWlnaHQ7CisKKyAgaWYgKCF0aGlzLm1vZGFsKSAKKyAgeworICAgIHRoaXMuc2l6ZUJnVG9EaWFsb2coKTsKKyAgfSAgCit9OworLyoqIEF0dGFjaGVzIGEgbW9kZWxlc3MgZGlhbG9nIHRvIGEgcGFuZWwgb24gdGhlIGdpdmVuIHNpZGUKKyAqICBUcmlnZ2VycyBhIG5vdGlmeU9mIHBhbmVsX2NoYW5nZSBldmVudAorICogIEBwYXJhbSB7U3RyaW5nfSBzaWRlIG9uZSBvZiAnbGVmdCcsICdyaWdodCcsICd0b3AnLCAnYm90dG9tJworICovCitYaW5oYS5EaWFsb2cucHJvdG90eXBlLmF0dGFjaFRvUGFuZWwgPSBmdW5jdGlvbihzaWRlKQoreworICB2YXIgZGlhbG9nID0gdGhpczsKKyAgdmFyIHJvb3RFbGVtID0gdGhpcy5yb290RWxlbTsKKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworICAKKyAgdGhpcy5hdHRhY2hlZCA9IHRydWU7CisgIHRoaXMucm9vdEVsZW0uc2lkZSA9IHNpZGU7CisgIHRoaXMuY2FwdGlvbkJhci5vbmRibGNsaWNrID0gZnVuY3Rpb24oZXYpIHsgZGlhbG9nLmRldGFjaEZyb21QYW5lbChYaW5oYS5nZXRFdmVudChldikpOyB9OworICAKKyAgcm9vdEVsZW0uc3R5bGUucG9zaXRpb24gPSAic3RhdGljIjsKKyAgcm9vdEVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyb290RWxlbSk7CisgIAorICB0aGlzLmJhY2tncm91bmQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgCisgIHRoaXMuY2FwdGlvbkJhci5zdHlsZS5wYWRkaW5nTGVmdCA9ICIzcHgiOworICB0aGlzLnJlc2l6ZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgaWYgKHRoaXMuY2xvc2FibGUpIAorICB7CisgICAgdGhpcy5jbG9zZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgfQorICB0aGlzLmljb24uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgCisgIGlmICggc2lkZSA9PSAnbGVmdCcgfHwgc2lkZSA9PSAncmlnaHQnICkKKyAgeworICAgIHJvb3RFbGVtLnN0eWxlLndpZHRoICA9IGVkaXRvci5jb25maWcucGFuZWxfZGltZW5zaW9uc1tzaWRlXTsKKyAgfQorICBlbHNlCisgIHsKKyAgICByb290RWxlbS5zdHlsZS53aWR0aCA9ICcnOworICB9CisgIFhpbmhhLmFkZENsYXNzZXMocm9vdEVsZW0sICdwYW5lbCcpOworICBlZGl0b3IuX3BhbmVsc1tzaWRlXS5wYW5lbHMucHVzaChyb290RWxlbSk7CisgIGVkaXRvci5fcGFuZWxzW3NpZGVdLmRpdi5hcHBlbmRDaGlsZChyb290RWxlbSk7CisKKyAgZWRpdG9yLm5vdGlmeU9mKCdwYW5lbF9jaGFuZ2UnLCB7J2FjdGlvbic6J2FkZCcsJ3BhbmVsJzpyb290RWxlbX0pOworfTsKKy8qKiBSZW1vdmVzIGEgcGFuZWwgZGlhbG9nIGZyb20gaXRzIHBhbmVsIGFuZCBtYWtlcyBpdCBmbG9hdAorICogCisgKi8KK1hpbmhhLkRpYWxvZy5wcm90b3R5cGUuZGV0YWNoRnJvbVBhbmVsID0gZnVuY3Rpb24oKQoreworICB2YXIgZGlhbG9nID0gdGhpczsKKyAgdmFyIHJvb3RFbGVtID0gZGlhbG9nLnJvb3RFbGVtOworICB2YXIgcm9vdEVsZW1TdHlsZSA9IHJvb3RFbGVtLnN0eWxlOworICB2YXIgZWRpdG9yID0gZGlhbG9nLmVkaXRvcjsKKyAgCisgIGRpYWxvZy5hdHRhY2hlZCA9IGZhbHNlOworICAKKyAgdmFyIHBvcyA9IFhpbmhhLmdldEVsZW1lbnRUb3BMZWZ0KHJvb3RFbGVtKTsKKyAgcm9vdEVsZW1TdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CisgIHJvb3RFbGVtU3R5bGUudG9wID0gcG9zLnRvcCArICJweCI7CisgIHJvb3RFbGVtU3R5bGUubGVmdCA9IHBvcy5sZWZ0ICsgInB4IjsKKyAgCisgIC8vZGlhbG9nLmNhcHRpb25CYXIuc3R5bGUucGFkZGluZ0xlZnQgPSAiMjJweCI7CisgIGRpYWxvZy5yZXNpemVyLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgaWYgKGRpYWxvZy5jbG9zYWJsZSkgCisgIHsKKyAgICBkaWFsb2cuY2xvc2VyLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgfQorICBkaWFsb2cuaWNvbi5zdHlsZS5kaXNwbGF5ID0gJyc7CisgIAorICBpZiAoZGlhbG9nLnNpemUud2lkdGgpIAorICB7CisgICAgcm9vdEVsZW0uc3R5bGUud2lkdGggPSBkaWFsb2cuc2l6ZS53aWR0aCArICdweCc7CisgIH0KKworICBYaW5oYS5yZW1vdmVDbGFzc2VzKHJvb3RFbGVtLCAncGFuZWwnKTsKKyAgZWRpdG9yLnJlbW92ZVBhbmVsKHJvb3RFbGVtKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyb290RWxlbSk7CisgIAorICBkaWFsb2cuY2FwdGlvbkJhci5vbmRibGNsaWNrID0gZnVuY3Rpb24oKSB7IGRpYWxvZy5hdHRhY2hUb1BhbmVsKHJvb3RFbGVtLnNpZGUpOyB9OworICAKKyAgdGhpcy5iYWNrZ3JvdW5kLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgdGhpcy5zaXplQmdUb0RpYWxvZygpOworfTsKKy8qKiAKKyAqIEBwcml2YXRlCisgKiBAdHlwZSBPYmplY3QgT2JqZWN0IHdpdGggd2lkdGgsIGhlaWdodCBzdHJpbmdzIGluY2wuICJweCIgZm9yIENTUworICovCitYaW5oYS5EaWFsb2cuY2FsY0Z1bGxCZ1NpemUgPSBmdW5jdGlvbigpCit7CisgIHZhciBwYWdlID0gWGluaGEucGFnZVNpemUoKTsKKyAgdmFyIHZpZXdwb3J0ID0gWGluaGEudmlld3BvcnRTaXplKCk7CisgIHJldHVybiB7d2lkdGg6KHBhZ2UueCA+IHZpZXdwb3J0LnggID8gcGFnZS54IDogdmlld3BvcnQueCApICArICJweCIsaGVpZ2h0OihwYWdlLnggPiB2aWV3cG9ydC55ID8gcGFnZS55IDogdmlld3BvcnQueSApICsgInB4In07Cit9OworLyoqIFNpemVzIHRoZSBiYWNrZ3JvdW5kIHRvIHRoZSBzaXplIG9mIHRoZSBkaWFsb2cKKyAqICBAcHJpdmF0ZQorICovCitYaW5oYS5EaWFsb2cucHJvdG90eXBlLnNpemVCZ1RvRGlhbG9nID0gZnVuY3Rpb24oKQoreworICB2YXIgcm9vdEVsZW1TdHlsZSA9IHRoaXMucm9vdEVsZW0uc3R5bGU7CisgIHZhciBiZ1N0eWxlID0gdGhpcy5iYWNrZ3JvdW5kLnN0eWxlOworICBiZ1N0eWxlLnRvcCA9IHJvb3RFbGVtU3R5bGUudG9wOworICBiZ1N0eWxlLmxlZnQgPSByb290RWxlbVN0eWxlLmxlZnQ7CisgIGJnU3R5bGUud2lkdGggPSByb290RWxlbVN0eWxlLndpZHRoOworICBiZ1N0eWxlLmhlaWdodCA9IHJvb3RFbGVtU3R5bGUuaGVpZ2h0OworfTsKKy8qKiBIaWRlcyB0aGUgYmFja2dyb3VuZAorICogIEBwcml2YXRlCisgKi8KK1hpbmhhLkRpYWxvZy5wcm90b3R5cGUuaGlkZUJhY2tncm91bmQgPSBmdW5jdGlvbigpCit7CisgIC8vdGhpcy5iYWNrZ3JvdW5kLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgIFhpbmhhLkRpYWxvZy5mYWRlT3V0KHRoaXMuYmFja2dyb3VuZCk7Cit9OworLyoqIFNob3dzIHRoZSBiYWNrZ3JvdW5kCisgKiAgQHByaXZhdGUKKyAqLworWGluaGEuRGlhbG9nLnByb3RvdHlwZS5zaG93QmFja2dyb3VuZCA9IGZ1bmN0aW9uKCkKK3sKKyAgLy90aGlzLmJhY2tncm91bmQuc3R5bGUuZGlzcGxheSA9ICcnOworICBYaW5oYS5EaWFsb2cuZmFkZUluKHRoaXMuYmFja2dyb3VuZCw3MCk7Cit9OworLyoqIFBvc2l0aW9ucyB0aGUgYmFja2dyb3VuZAorICogIEBwcml2YXRlCisgKiAgQHBhcmFtIHtPYmplY3R9IHBvcyBPYmplY3Qgd2l0aCB0b3AsIGxlZnQgc3RyaW5ncyBpbmNsLiAicHgiIGZvciBDU1MKKyAqLworWGluaGEuRGlhbG9nLnByb3RvdHlwZS5wb3NCYWNrZ3JvdW5kID0gZnVuY3Rpb24ocG9zKQoreworICBpZiAodGhpcy5iYWNrZ3JvdW5kLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnKQorICB7CisgICAgdGhpcy5iYWNrZ3JvdW5kLnN0eWxlLnRvcCAgPSBwb3MudG9wOworICAgIHRoaXMuYmFja2dyb3VuZC5zdHlsZS5sZWZ0ID0gcG9zLmxlZnQ7CisgIH0KK307CisvKiogUmVzaXplcyB0aGUgYmFja2dyb3VuZAorICogIEBwcml2YXRlCisgKiAgQHBhcmFtIHtPYmplY3R9IHNpemUgT2JqZWN0IHdpdGggd2lkdGgsIGhlaWdodCBzdHJpbmdzIGluY2wuICJweCIgZm9yIENTUworICovCitYaW5oYS5EaWFsb2cucHJvdG90eXBlLnJlc2l6ZUJhY2tncm91bmQgPSBmdW5jdGlvbihzaXplKQoreworICBpZiAodGhpcy5iYWNrZ3JvdW5kLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnKQorICB7CisgICAgdGhpcy5iYWNrZ3JvdW5kLnN0eWxlLndpZHRoICA9IHNpemUud2lkdGg7CisgICAgdGhpcy5iYWNrZ3JvdW5kLnN0eWxlLmhlaWdodCA9IHNpemUuaGVpZ2h0OworICB9Cit9OworLyoqIFBvc2l0aW9ucyB0aGUgZGlhbG9nCisgKiAgQHBhcmFtIHtPYmplY3R9IHBvcyBPYmplY3Qgd2l0aCB0b3AsIGxlZnQgc3RyaW5ncyBpbmNsLiAicHgiIGZvciBDU1MKKyAqLworWGluaGEuRGlhbG9nLnByb3RvdHlwZS5wb3NEaWFsb2cgPSBmdW5jdGlvbihwb3MpCit7CisgIHZhciBzdCA9IHRoaXMucm9vdEVsZW0uc3R5bGU7CisgIHN0LmxlZnQgPSBwb3MubGVmdDsKKyAgc3QudG9wICA9IHBvcy50b3A7Cit9OworLyoqIFJlc2l6ZXMgdGhlIGRpYWxvZworICogCisgKiBAcGFyYW0ge09iamVjdH0gc2l6ZSBPYmplY3Qgd2l0aCB3aWR0aCwgaGVpZ2h0IHN0cmluZ3MgaW5jbC4gInB4IiBmb3IgQ1NTCisgKi8KK1hpbmhhLkRpYWxvZy5wcm90b3R5cGUuc2l6ZURpYWxvZyA9IGZ1bmN0aW9uKHNpemUpCit7CisgIHZhciBzdCA9IHRoaXMucm9vdEVsZW0uc3R5bGU7CisgIHN0LmhlaWdodCA9IHNpemUuaGVpZ2h0OworICBzdC53aWR0aCAgPSBzaXplLndpZHRoOworICB2YXIgd2lkdGggPSBwYXJzZUludChzaXplLndpZHRoLCAxMCk7CisgIHZhciBoZWlnaHQgPSBwYXJzZUludChzaXplLmhlaWdodCwxMCkgLSB0aGlzLmNhcHRpb25CYXIub2Zmc2V0SGVpZ2h0OworICB0aGlzLm1haW4uc3R5bGUuaGVpZ2h0ID0gKGhlaWdodCA+IDIwKSA/IGhlaWdodCA6IDIwICsgInB4IjsKKyAgdGhpcy5tYWluLnN0eWxlLndpZHRoID0gKHdpZHRoID4gMTApID8gd2lkdGggOiAxMCArICdweCc7Cit9OworLyoqIFNldHMgdGhlIHZhbHVlcyBsaWtlIFhpbmhhLkRpYWxvZy5wcm90b3R5cGUuc2hvdyh2YWx1ZXMpCisgKiBAc2VlICNzaG93CisgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIAorICovCitYaW5oYS5EaWFsb2cucHJvdG90eXBlLnNldFZhbHVlcyA9IGZ1bmN0aW9uKHZhbHVlcykKK3sKKyAgZm9yKHZhciBpIGluIHZhbHVlcykKKyAgeworICAgIGlmICh0eXBlb2YgaSA9PSAnc3RyaW5nJykgCisgICAgeworICAgICAgdmFyIGVsZW1zID0gdGhpcy5nZXRFbGVtZW50c0J5TmFtZShpKTsKKyAgICAgIGlmICghZWxlbXMpIAorICAgICAgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGZvcih2YXIgeCA9IDA7IHggPCBlbGVtcy5sZW5ndGg7IHgrKykKKyAgICAgIHsKKyAgICAgICAgdmFyIGUgPSBlbGVtc1t4XTsKKyAgICAgICAgc3dpdGNoKGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSAnc2VsZWN0JyAgOgorICAgICAgICAgICAgZm9yKHZhciBqID0gMDsgaiA8IGUub3B0aW9ucy5sZW5ndGg7IGorKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlc1tpXSA9PSAnb2JqZWN0JykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvcih2YXIgayA9IDA7IGsgPCB2YWx1ZXNbaV0ubGVuZ3RoOyBrKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaWYodmFsdWVzW2ldW2tdID09IGUub3B0aW9uc1tqXS52YWx1ZSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZS5vcHRpb25zW2pdLnNlbGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSBpZih2YWx1ZXNbaV0gPT0gZS5vcHRpb25zW2pdLnZhbHVlKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZS5vcHRpb25zW2pdLnNlbGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJ3RleHRhcmVhJzoKKyAgICAgICAgICBjYXNlICdpbnB1dCcgICA6CisgICAgICAgICAgICBzd2l0Y2goZS5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAncmFkaW8nICAgOgorICAgICAgICAgICAgICAgIGlmKGUudmFsdWUgPT0gdmFsdWVzW2ldKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGUuY2hlY2tlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAnY2hlY2tib3gnOgorICAgICAgICAgICAgICAgIGlmKHR5cGVvZiB2YWx1ZXNbaV0gPT0gJ29iamVjdCcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZm9yKGogaW4gdmFsdWVzW2ldKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZih2YWx1ZXNbaV1bal0gPT0gZS52YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGUuY2hlY2tlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmKHZhbHVlc1tpXSA9PSBlLnZhbHVlKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBlLmNoZWNrZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgZS52YWx1ZSA9IHZhbHVlc1tpXTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK307CisKKy8qKiBSZXRyaWV2ZXMgdGhlIHZhbHVlcyBsaWtlIFhpbmhhLkRpYWxvZy5wcm90b3R5cGUuaGlkZSgpCisgKiBAc2VlICNoaWRlCisgKiBAdHlwZSBPYmplY3QgdmFsdWVzIAorICovCitYaW5oYS5EaWFsb2cucHJvdG90eXBlLmdldFZhbHVlcyA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIHZhbHVlcyA9IFsgXTsKKyAgdmFyIGlucHV0cyA9IFhpbmhhLmNvbGxlY3Rpb25Ub0FycmF5KHRoaXMucm9vdEVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JykpCisgICAgICAgICAgICAgIC5hcHBlbmQoWGluaGEuY29sbGVjdGlvblRvQXJyYXkodGhpcy5yb290RWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGV4dGFyZWEnKSkpCisgICAgICAgICAgICAgIC5hcHBlbmQoWGluaGEuY29sbGVjdGlvblRvQXJyYXkodGhpcy5yb290RWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2VsZWN0JykpKTsKKworICBmb3IodmFyIHggPSAwOyB4IDwgaW5wdXRzLmxlbmd0aDsgeCsrKQorICB7CisgICAgdmFyIGkgPSBpbnB1dHNbeF07CisgICAgaWYgKCEoaS5uYW1lICYmIHRoaXMucl9pZFtpLm5hbWVdKSkgCisgICAgeworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgaWYodHlwZW9mIHZhbHVlc1t0aGlzLnJfaWRbaS5uYW1lXV0gPT0gJ3VuZGVmaW5lZCcpCisgICAgeworICAgICAgdmFsdWVzW3RoaXMucl9pZFtpLm5hbWVdXSA9IG51bGw7CisgICAgfQorICAgIHZhciB2ID0gdmFsdWVzW3RoaXMucl9pZFtpLm5hbWVdXTsKKworICAgIHN3aXRjaChpLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkKKyAgICB7CisgICAgICBjYXNlICdzZWxlY3QnOgorICAgICAgICBpZihpLm11bHRpcGxlKQorICAgICAgICB7CisgICAgICAgICAgaWYoIXYucHVzaCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZih2ICE9PSBudWxsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB2ID0gW3ZdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB2ID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGZvcih2YXIgaiA9IDA7IGogPCBpLm9wdGlvbnMubGVuZ3RoOyBqKyspCisgICAgICAgICAgeworICAgICAgICAgICAgaWYoaS5vcHRpb25zW2pdLnNlbGVjdGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB2LnB1c2goaS5vcHRpb25zW2pdLnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgaWYoaS5zZWxlY3RlZEluZGV4ID49IDApCisgICAgICAgICAgeworICAgICAgICAgICAgdiA9IGkub3B0aW9uc1tpLnNlbGVjdGVkSW5kZXhdOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKy8qCisgICAgICBjYXNlICd0ZXh0YXJlYSc6CisgICAgICBjYXNlICdpbnB1dCcgICA6CisqLworICAgICAgZGVmYXVsdDoKKyAgICAgICAgc3dpdGNoKGkudHlwZS50b0xvd2VyQ2FzZSgpKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSAgJ3JhZGlvJzoKKyAgICAgICAgICAgIGlmKGkuY2hlY2tlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdiA9IGkudmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnY2hlY2tib3gnOgorICAgICAgICAgICAgaWYodiA9PT0gbnVsbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYodGhpcy5nZXRFbGVtZW50c0J5TmFtZSh0aGlzLnJfaWRbaS5uYW1lXSkubGVuZ3RoID4gMSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHYgPSBbXTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoaS5jaGVja2VkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZih2ICE9PSBudWxsICYmIHR5cGVvZiB2ID09ICdvYmplY3QnICYmIHYucHVzaCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHYucHVzaChpLnZhbHVlKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2ID0gaS52YWx1ZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB2ID0gaS52YWx1ZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICB2YWx1ZXNbdGhpcy5yX2lkW2kubmFtZV1dID0gdjsKKyAgfQorICByZXR1cm4gdmFsdWVzOworfTsKKworLyoqIFNldHMgdGhlIGxvY2FsaXplciB0byB1c2UgZm9yIHRoZSBkaWFsb2cKKyAqICBAcGFyYW0gZnVuY3Rpb258c3RyaW5nIEVpdGhlciBhIGZ1bmN0aW9uIHdoaWNoIHRha2VzIGEgc3RyaW5nIGFzIGEgcGFyYW1ldGVyIGFuZCByZXR1cm5zIAorICogICAgYSBsb2NhbGl6ZWQgc3RyaW5nLCBvciB0aGUgbmFtZSBvZiBhIGNvbnRhY3QgdG8gcGFzcyB0byB0aGUgc3RhbmRhcmQgWGluaGEgbG9jYWxpemVyCisgKiAgICB0aGUgImNvbnRleHQiIHVzdWFsbHkgbWVhbnMgdGhlIG5hbWUgb2YgYSBwbHVnaW4uCisgKi8KKyAKK1hpbmhhLkRpYWxvZy5wcm90b3R5cGUuc2V0TG9jYWxpemVyID0gZnVuY3Rpb24obG9jYWxpemVyKQoreyAgCisgIHZhciBkaWFsb2cgPSB0aGlzOworICBpZih0eXBlb2YgbG9jYWxpemVyID09ICdmdW5jdGlvbicpCisgIHsKKyAgICBkaWFsb2cuX2xjID0gbG9jYWxpemVyOworICB9CisgIGVsc2UgaWYobG9jYWxpemVyKQorICB7CisgICAgdGhpcy5fbGMgPSBmdW5jdGlvbihzdHJpbmcpCisgICAgeworICAgICAgcmV0dXJuIFhpbmhhLl9sYyhzdHJpbmcsbG9jYWxpemVyKTsKKyAgICB9OworICB9CisgIGVsc2UKKyAgeworICAgIHRoaXMuX2xjID0gZnVuY3Rpb24oc3RyaW5nKQorICAgIHsKKyAgICAgIHJldHVybiBzdHJpbmc7CisgICAgfTsKKyAgfQorfQorCisvKiogTG9jYWxpemVzIHN0cmluZ3MgaW4gdGhlIGRpYWxvZy4KKyAqIEBwcml2YXRlCisgKiBAcGFyYW0ge1N0cmluZ30gaHRtbCBUaGUgSFRNTCB0byB0cmFuc2xhdGUKKyAqIEBwYXJhbSB7U3RyaW5nfSBsb2NhbGl6ZXIgQ29udGV4dCBmb3IgdHJhbnNsYXRpb24sIHVzdWFsbHkgcGx1Z2luJ3MgbmFtZSAob3B0aW9uYWwgaWYgc2V0TG9jYWxpemVyKCkgaGFzIGJlZW4gdXNlZCkgCisgKi8KKyAKK1hpbmhhLkRpYWxvZy5wcm90b3R5cGUudHJhbnNsYXRlSHRtbCA9IGZ1bmN0aW9uKGh0bWwsbG9jYWxpemVyKQoreyAgCisgIHZhciBkaWFsb2cgPSB0aGlzOworICBpZihsb2NhbGl6ZXIpIHRoaXMuc2V0TG9jYWxpemVyKGxvY2FsaXplcik7CisgIAorICAvLyBsb29raW5nIGZvciBzdHJpbmdzIG9mIHRoZSBmb3JtIG5hbWU9J1tmb29dJyBvciBpZD0iW2Jhcl0iCisgIGh0bWwgPSBodG1sLnJlcGxhY2UoLygoPzpuYW1lKXwoPzppZCkpPShbJyJdKVxbKFthLXowLTlfXSspXF1cMi9pZywKKyAgICBmdW5jdGlvbihmdWxsU3RyaW5nLCB0eXBlLCBxdW90ZSwgaWQpCisgICAgeworICAgICAgcmV0dXJuIHR5cGUgKyAiPSIgKyBxdW90ZSArIGRpYWxvZy5jcmVhdGVJZChpZCkgKyBxdW90ZTsKKyAgICB9CisgICAgKS5yZXBsYWNlKC88bDEwbj4oLio/KTxcL2wxMG4+L2lnLAorICAgIGZ1bmN0aW9uKGZ1bGxTdHJpbmcsdHJhbnNsYXRlKQorICAgIHsKKyAgICAgIHJldHVybiBkaWFsb2cuX2xjKHRyYW5zbGF0ZSkgOworICAgIH0KKyAgICApLnJlcGxhY2UoL1w9Il9cKCguKj8pXCkiL2csCisgICAgZnVuY3Rpb24oZnVsbFN0cmluZywgdHJhbnNsYXRlKQorICAgIHsKKyAgICAgIHJldHVybiAnPSInICsgZGlhbG9nLl9sYyh0cmFuc2xhdGUpICsgJyInOworICAgIH0KKyAgKTsKKyAgcmV0dXJuIGh0bWw7Cit9OworCisvKioKKyAqIEZpeHVwIGxpbmtzIGluIHRoZSBlbGVtZW50cyB0byBhbGxvdyBsaW5raW5nIHRvIFhpbmhhIHJlc291cmNlcworICogQHByaXZhdGUKKyAqLworWGluaGEuRGlhbG9nLnByb3RvdHlwZS5maXh1cERPTSA9IGZ1bmN0aW9uKHJvb3QscGx1Z2luKQoreworICB2YXIgZGlhbG9nID0gdGhpczsKKyAgaWYodHlwZW9mIHBsdWdpbiAhPSAnc3RyaW5nJykKKyAgeworICAgIHBsdWdpbiA9ICdHZW5lcmljUGx1Z2luJzsKKyAgfQorCisgIHZhciBsaW5rUmVwbGFjZSA9IGZ1bmN0aW9uKGZ1bGxTdHJpbmcsIHJlc291cmNlKSB7CisgICAgc3dpdGNoKHJlc291cmNlKSB7CisgICAgICBjYXNlICJlZGl0b3IiOgorICAgICAgICByZXR1cm4gX2VkaXRvcl91cmw7CisgICAgICBjYXNlICJwbHVnaW4iOgorICAgICAgICByZXR1cm4gWGluaGEuZ2V0UGx1Z2luRGlyKHBsdWdpbik7CisgICAgICBjYXNlICJpbWFnZXMiOgorICAgICAgICByZXR1cm4gZGlhbG9nLmVkaXRvci5pbWdVUkwoJ2ltYWdlcycpOworICAgIH07CisgIH07CisKKyAgdmFyIGltYWdlcyA9IFhpbmhhLmNvbGxlY3Rpb25Ub0FycmF5KHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpKTsKKworICBmb3IgKHZhciBpbmRleD0wOyBpbmRleDxpbWFnZXMubGVuZ3RoOyArK2luZGV4KSB7CisgICAgdmFyIGltYWdlID0gaW1hZ2VzW2luZGV4XTsKKyAgICB2YXIgcmVmZXJlbmNlID0gaW1hZ2UuZ2V0QXR0cmlidXRlKCdzcmMnKTsKKyAgICBpZiAocmVmZXJlbmNlKSB7CisgICAgICB2YXIgZml4ZWRSZWZlcmVuY2UgPSByZWZlcmVuY2UucmVwbGFjZSgvXlxbKGVkaXRvcnxwbHVnaW58aW1hZ2VzKVxdLywgbGlua1JlcGxhY2UpOworICAgICAgaWYgKGZpeGVkUmVmZXJlbmNlICE9IHJlZmVyZW5jZSkgeworICAgICAgICBpbWFnZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIGZpeGVkUmVmZXJlbmNlKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICB2YXIgbGlua3MgPSBYaW5oYS5jb2xsZWN0aW9uVG9BcnJheShyb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhJykpOworCisgIGZvciAodmFyIGluZGV4PTA7IGluZGV4PGxpbmtzLmxlbmd0aDsgKytpbmRleCkgeworICAgIHZhciBsaW5rID0gbGlua3NbaW5kZXhdOworICAgIHZhciByZWZlcmVuY2UgPSBsaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpOworICAgIGlmIChyZWZlcmVuY2UpIHsKKyAgICAgIHZhciBmaXhlZFJlZmVyZW5jZSA9IHJlZmVyZW5jZS5yZXBsYWNlKC9eXFsoZWRpdG9yfHBsdWdpbnxpbWFnZXMpXF0vLCBsaW5rUmVwbGFjZSk7CisgICAgICBpZiAoZml4ZWRSZWZlcmVuY2UgIT0gcmVmZXJlbmNlKSB7CisgICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgZml4ZWRSZWZlcmVuY2UpOworICAgICAgfQorICAgIH0KKyAgfQorCit9OworCisvKiogVXNlIHRoaXMgZnVuY3Rpb24gd2hlbiBhZGRpbmcgYW4gZWxlbWVudCB3aXRoIGEgbmV3IElEL25hbWUgdG8gYSAKKyAqICBkaWFsb2cgYWZ0ZXIgaXQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLiBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMKKyAqICB0aGF0IHRoZSBkaWFsb2cgaGFzIHRoZSBpZC9uYW1lIHN0b3JlZCBpbiBpdHMgcmV2ZXJzZS1sb29rdXAgdGFibGUKKyAqICAod2hpY2ggaXMgcmVxdWlyZWQgZm9yIGZvcm0gdmFsdWVzIHRvIGJlIHByb3Blcmx5IHJldHVybmVkIGJ5CisgKiAgWGluaGEuRGlhbG9nLmhpZGUpLgorICogCisgKiBAcGFyYW0ge2lkfSB0aGUgaWQgKG9yIG5hbWUpIHRvIGFkZCAKKyAqCisgKiBSZXR1cm5zIHRoZSBpbnRlcm5hbCBJRCB0byB3aGljaCB0aGUgcGFzc2VkIGluIElEIG1hcHMKKyAqCisgKiBUT0RPOiBjcmVhdGVJZCBpcyBhIHJlYWxseSBhd2Z1bCBuYW1lLCBidXQgSSBjYW4ndCB0aGluayBvZiBhbnl0aGluZyBiZXR0ZXIuLi4KKyAqLworWGluaGEuRGlhbG9nLnByb3RvdHlwZS5jcmVhdGVJZCA9IGZ1bmN0aW9uKGlkKQoreworICB2YXIgZGlhbG9nID0gdGhpczsKKyAgaWYgKHR5cGVvZiBkaWFsb2cuaWRbaWRdID09ICd1bmRlZmluZWQnKQorICB7CisgICAgZGlhbG9nLmlkW2lkXSA9IFhpbmhhLnVuaXEoJ0RpYWxvZycpOworICAgIGRpYWxvZy5yX2lkW2RpYWxvZy5pZFtpZF1dID0gaWQ7CisgIH0KKyAgcmV0dXJuIGRpYWxvZy5pZFtpZF07Cit9OworCisvKiogV2hlbiBzZXZlcmFsIG1vZGVsZXNzIGRpYWxvZ3MgYXJlIHNob3duLCBvbmUgY2FuIGJlIGJyb3VnaHQgdG8gZnJvbnQgd2l0aCB0aGlzIGZ1bmN0aW9uIChhcyBoYXBwZW5zIG9uIG1vdXNlY2xpY2spIAorICogCisgKiBAcGFyYW0ge1hpbmhhRGlhbG9nfSBkaWFsb2cgVGhlIGRpYWxvZyB0byBhY3RpdmF0ZQorICovCisKK1hpbmhhLkRpYWxvZy5hY3RpdmF0ZU1vZGVsZXNzID0gZnVuY3Rpb24oZGlhbG9nKQoreworICBpZiAoWGluaGEuRGlhbG9nLmFjdGl2ZU1vZGVsZXNzID09IGRpYWxvZyB8fCBkaWFsb2cuYXR0YWNoZWQgKSAKKyAgeworICAgIHJldHVybjsKKyAgfQorICAKKyAgaWYgKFhpbmhhLkRpYWxvZy5hY3RpdmVNb2RlbGVzcyApCisgIHsKKyAgICBYaW5oYS5EaWFsb2cuYWN0aXZlTW9kZWxlc3Mucm9vdEVsZW0uc3R5bGUuekluZGV4ID0gcGFyc2VJbnQoWGluaGEuRGlhbG9nLmFjdGl2ZU1vZGVsZXNzLnJvb3RFbGVtLnN0eWxlLnpJbmRleCwgMTApIC0xMDsKKyAgfQorICBYaW5oYS5EaWFsb2cuYWN0aXZlTW9kZWxlc3MgPSBkaWFsb2c7CisKKyAgWGluaGEuRGlhbG9nLmFjdGl2ZU1vZGVsZXNzLnJvb3RFbGVtLnN0eWxlLnpJbmRleCA9IHBhcnNlSW50KFhpbmhhLkRpYWxvZy5hY3RpdmVNb2RlbGVzcy5yb290RWxlbS5zdHlsZS56SW5kZXgsIDEwKSArIDEwOworfTsKKy8qKiBTZXQgb3BhY2l0eSBjcm9zcyBicm93c2VyIAorICogCisgKiBAcGFyYW0ge0RvbU5vZGV9IGVsIFRoZSBlbGVtZW50IHRvIHNldCB0aGUgb3BhY2l0eQorICogQHBhcmFtIHtPYmplY3R9IHZhbHVlIG9wYWNpdHkgdmFsdWUgKHBlcmNlbnQpCisgKi8KK1hpbmhhLkRpYWxvZy5zZXRPcGFjaXR5ID0gZnVuY3Rpb24oZWwsdmFsdWUpCit7CisgICAgaWYgKHR5cGVvZiBlbC5zdHlsZS5maWx0ZXIgIT0gJ3VuZGVmaW5lZCcpCisgICAgeworICAgICAgICBlbC5zdHlsZS5maWx0ZXIgPSAodmFsdWUgPCAxMDApID8gICdhbHBoYShvcGFjaXR5PScrdmFsdWUrJyknIDogJyc7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVsLnN0eWxlLm9wYWNpdHkgPSB2YWx1ZS8xMDA7CisgICAgfQorfTsKKy8qKiBGYWRlIGluIGFuIGVsZW1lbnQKKyAqIAorICogQHBhcmFtIHtEb21Ob2RlfSBlbCBUaGUgZWxlbWVudCB0byBmYWRlCisgKiBAcGFyYW0ge051bWJlcn0gZGVsYXkgVGltZSBmb3Igb25lIHN0ZXAgaW4gbXMKKyAqIEBwYXJhbSB7TnVtYmVyfSBlbmRPcGFjaXR5IHN0b3Agd2hlbiB0aGlzIHZhbHVlIGlzIHJlYWNoZWQgKHBlcmNlbnQpCisgKiBAcGFyYW0ge051bWJlcn0gc3RlcCBGYWRlIHRoaXMgbXVjaCBwZXIgc3RlcCAocGVyY2VudCkKKyAqLworWGluaGEuRGlhbG9nLmZhZGVJbiA9IGZ1bmN0aW9uKGVsLGVuZE9wYWNpdHksY2FsbGJhY2ssIGRlbGF5LHN0ZXApCit7CisgICAgZGVsYXkgPSBkZWxheSB8fCAxOworICAgIHN0ZXAgPSBzdGVwIHx8IDI1OworICAgIGVuZE9wYWNpdHkgPSBlbmRPcGFjaXR5IHx8IDEwMDsKKyAgICBlbC5vcCA9IGVsLm9wIHx8IDA7CisgICAgdmFyIG9wID0gZWwub3A7CisgICAgaWYgKGVsLnN0eWxlLmRpc3BsYXkgPT0gJ25vbmUnKQorICAgIHsKKyAgICAgICAgWGluaGEuRGlhbG9nLnNldE9wYWNpdHkoZWwsMCk7CisgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgICB9CisgICAgaWYgKG9wIDwgZW5kT3BhY2l0eSkKKyAgICB7CisgICAgICAgIGVsLm9wICs9IHN0ZXA7CisgICAgICAgIFhpbmhhLkRpYWxvZy5zZXRPcGFjaXR5KGVsLG9wKTsKKyAgICAgICAgZWwudGltZU91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtYaW5oYS5EaWFsb2cuZmFkZUluKGVsLCBlbmRPcGFjaXR5LCBjYWxsYmFjaywgZGVsYXksIHN0ZXApO30sZGVsYXkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBYaW5oYS5EaWFsb2cuc2V0T3BhY2l0eShlbCxlbmRPcGFjaXR5KTsKKyAgICAgICAgZWwub3AgPSBlbmRPcGFjaXR5OworICAgICAgICBlbC50aW1lT3V0ID0gbnVsbDsKKyAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSAKKyAgICAgICAgeworICAgICAgICAgIGNhbGxiYWNrLmNhbGwoKTsKKyAgICAgICAgfQorICAgIH0KK307CisvKiogRmFkZSBvdXQgYW4gZWxlbWVudAorICogCisgKiBAcGFyYW0ge0RvbU5vZGV9IGVsIFRoZSBlbGVtZW50IHRvIGZhZGUKKyAqIEBwYXJhbSB7TnVtYmVyfSBkZWxheSBUaW1lIGZvciBvbmUgc3RlcCBpbiBtcworICogQHBhcmFtIHtOdW1iZXJ9IHN0ZXAgRmFkZSB0aGlzIG11Y2ggcGVyIHN0ZXAgKHBlcmNlbnQpCisgKi8KK1hpbmhhLkRpYWxvZy5mYWRlT3V0ID0gZnVuY3Rpb24oZWwsZGVsYXksc3RlcCkKK3sKKyAgICBkZWxheSA9IGRlbGF5IHx8IDE7CisgICAgc3RlcCA9IHN0ZXAgfHwgMzA7CisgICAgaWYgKHR5cGVvZiBlbC5vcCA9PSAndW5kZWZpbmVkJykgCisgICAgeworICAgICAgZWwub3AgPSAxMDA7CisgICAgfQorICAgIHZhciBvcCA9IGVsLm9wOworCisgICAgaWYgKG9wID49IDApCisgICAgeworICAgICAgICBlbC5vcCAtPSBzdGVwOworICAgICAgICBYaW5oYS5EaWFsb2cuc2V0T3BhY2l0eShlbCxvcCk7CisgICAgICAgIGVsLnRpbWVPdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7WGluaGEuRGlhbG9nLmZhZGVPdXQoZWwsZGVsYXksc3RlcCk7fSxkZWxheSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFhpbmhhLkRpYWxvZy5zZXRPcGFjaXR5KGVsLDApOworICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICAgICBlbC5vcCA9IDA7CisgICAgICAgIGVsLnRpbWVPdXQgPSBudWxsOworICAgIH0KK307CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0RpYWxvZ3MvZGlhbG9nLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9EaWFsb2dzL2RpYWxvZy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDVhZmU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9EaWFsb2dzL2RpYWxvZy5qcwpAQCAtMCwwICsxLDEwMSBAQAorCisgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS06bm9UYWJzPXRydWU6dGFiU2l6ZT0yOmluZGVudFNpemU9MjotLQorICAgIC0tICBYaW5oYSAoaXMgbm90IGh0bWxBcmVhKSAtIGh0dHA6Ly94aW5oYS5nb2dvLmNvLm56LworICAgIC0tCisgICAgLS0gIFVzZSBvZiBYaW5oYSBpcyBncmFudGVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGUgaHRtbEFyZWEgTGljZW5zZSAoYmFzZWQgb24KKyAgICAtLSAgQlNEIGxpY2Vuc2UpICBwbGVhc2UgcmVhZCBsaWNlbnNlLnR4dCBpbiB0aGlzIHBhY2thZ2UgZm9yIGRldGFpbHMuCisgICAgLS0KKyAgICAtLSAgWGluaGEgd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gd29yayBieSBNaWhhaSBCYXpvbiB3aGljaCBpczoKKyAgICAtLSAgICAgIENvcHlyaWdodCAoYykgMjAwMy0yMDA0IGR5bmFyY2guY29tLgorICAgIC0tICAgICAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgaW50ZXJhY3RpdmV0b29scy5jb20sIGluYy4KKyAgICAtLSAgICAgIFRoaXMgY29weXJpZ2h0IG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UuCisgICAgLS0KKyAgICAtLSAgVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHN0YW5kYXJkIHBvcHVwIGRpYWxvZworICAgIC0tCisgICAgLS0gICBUaG91Z2ggIkRpYWxvZyIgbG9va3MgbGlrZSBhbiBvYmplY3QsIGl0IGlzbid0IHJlYWxseSBhbiBvYmplY3QuICBJbnN0ZWFkCisgICAgLS0gICBpdCdzIGp1c3QgbmFtZXNwYWNlIGZvciBwcm90ZWN0aW5nIGdsb2JhbCBzeW1ib2xzLgorICAgIC0tCisgICAgLS0KKyAgICAtLSAgJEhlYWRVUkw6IGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvRGlhbG9ncy9kaWFsb2cuanMgJAorICAgIC0tICAkTGFzdENoYW5nZWREYXRlOiAyMDA4LTEwLTEzIDA2OjQyOjQyICsxMzAwIChNb24sIDEzIE9jdCAyMDA4KSAkCisgICAgLS0gICRMYXN0Q2hhbmdlZFJldmlzaW9uOiAxMDg0ICQKKyAgICAtLSAgJExhc3RDaGFuZ2VkQnk6IHJheSAkCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKK2Z1bmN0aW9uIERpYWxvZyh1cmwsIGFjdGlvbiwgaW5pdCkgeworCWlmICh0eXBlb2YgaW5pdCA9PSAidW5kZWZpbmVkIikgeworCQlpbml0ID0gd2luZG93OwkvLyBwYXNzIHRoaXMgd2luZG93IG9iamVjdCBieSBkZWZhdWx0CisJfQorCWlmICh0eXBlb2Ygd2luZG93LnNob3dNb2RhbERpYWxvZyA9PSAnZnVuY3Rpb24nICYmICFYaW5oYS5pc193ZWJraXQpIC8vIHdlYmtpdCBlYXNpbHkgbG9vc2VzIHRoZSBzZWxlY3Rpb24gd2l0aCB3aW5kb3cuc2hvd01vZGFsRGlhbG9nCisJeworCQlEaWFsb2cuX3JldHVybiA9IGZ1bmN0aW9uKHJldFZhbCkgeworCQkJaWYgKHR5cGVvZiBhY3Rpb24gPT0gJ2Z1bmN0aW9uJykgYWN0aW9uIChyZXRWYWwpOworCQl9CisJCXZhciByID0gd2luZG93LnNob3dNb2RhbERpYWxvZyh1cmwsIGluaXQsICJkaWFsb2doZWlnaHQ9MzAwO2RpYWxvZ3dpZHRoPTQwMDtyZXNpemFibGU9eWVzIik7CisJfQorCWVsc2UKKwl7CisJCURpYWxvZy5fZ2Vja29PcGVuTW9kYWwodXJsLCBhY3Rpb24sIGluaXQpOworCX0KK30KKworRGlhbG9nLl9wYXJlbnRFdmVudCA9IGZ1bmN0aW9uKGV2KSB7CisJc2V0VGltZW91dCggZnVuY3Rpb24oKSB7IGlmIChEaWFsb2cuX21vZGFsICYmICFEaWFsb2cuX21vZGFsLmNsb3NlZCkgeyBEaWFsb2cuX21vZGFsLmZvY3VzKCkgfSB9LCA1MCk7CisJdHJ5IHsKKwkJaWYgKERpYWxvZy5fbW9kYWwgJiYgIURpYWxvZy5fbW9kYWwuY2xvc2VkKSB7CisJCQlYaW5oYS5fc3RvcEV2ZW50KGV2KTsKKwkJfSAKKwl9IGNhdGNoIChlKSB7CisJCS8vYWZ0ZXIgY2xvc2luZyB0aGUgcG9wdXAgaW4gSUUgdGhlIGV2ZW50cyBhcmUgbm90IHJlbGVhc2VkIGFuZCB0cnlpbmcgdG8gYWNjZXNzIERpYWxvZy5fbW9kYWwuY2xvc2VkIGNhdXNlcyBhbiBlcnJvcgorCX0KK307CisKKworLy8gc2hvdWxkIGJlIGEgZnVuY3Rpb24sIHRoZSByZXR1cm4gaGFuZGxlciBvZiB0aGUgY3VycmVudGx5IG9wZW5lZCBkaWFsb2cuCitEaWFsb2cuX3JldHVybiA9IG51bGw7CisKKy8vIGNvbnN0YW50LCB0aGUgY3VycmVudGx5IG9wZW5lZCBkaWFsb2cKK0RpYWxvZy5fbW9kYWwgPSBudWxsOworCisvLyB0aGUgZGlhbG9nIHdpbGwgcmVhZCBpdCdzIGFyZ3MgZnJvbSB0aGlzIHZhcmlhYmxlCitEaWFsb2cuX2FyZ3VtZW50cyA9IG51bGw7CisKK0RpYWxvZy5fc2VsZWN0aW9uID0gbnVsbDsKKworRGlhbG9nLl9nZWNrb09wZW5Nb2RhbCA9IGZ1bmN0aW9uKHVybCwgYWN0aW9uLCBpbml0KSB7CisJdmFyIGRsZyA9IHdpbmRvdy5vcGVuKHVybCwgImhhZGlhbG9nIiwKKwkJCSAgICAgICJ0b29sYmFyPW5vLG1lbnViYXI9bm8scGVyc29uYWxiYXI9bm8sd2lkdGg9MTAsaGVpZ2h0PTEwLCIgKworCQkJICAgICAgInNjcm9sbGJhcnM9bm8scmVzaXphYmxlPXllcyxtb2RhbD15ZXMsZGVwZW5kYWJsZT15ZXMiKTsKKwlEaWFsb2cuX21vZGFsID0gZGxnOworCURpYWxvZy5fYXJndW1lbnRzID0gaW5pdDsKKworCS8vIGNhcHR1cmUgc29tZSB3aW5kb3cncyBldmVudHMKKwlmdW5jdGlvbiBjYXB3aW4odykgeworCQlYaW5oYS5fYWRkRXZlbnQodywgImNsaWNrIiwgRGlhbG9nLl9wYXJlbnRFdmVudCk7CisJCVhpbmhhLl9hZGRFdmVudCh3LCAibW91c2Vkb3duIiwgRGlhbG9nLl9wYXJlbnRFdmVudCk7CisJCVhpbmhhLl9hZGRFdmVudCh3LCAiZm9jdXMiLCBEaWFsb2cuX3BhcmVudEV2ZW50KTsKKwl9CisJLy8gcmVsZWFzZSB0aGUgY2FwdHVyZWQgZXZlbnRzCisJZnVuY3Rpb24gcmVsd2luKHcpIHsKKwkJWGluaGEuX3JlbW92ZUV2ZW50KHcsICJjbGljayIsIERpYWxvZy5fcGFyZW50RXZlbnQpOworCQlYaW5oYS5fcmVtb3ZlRXZlbnQodywgIm1vdXNlZG93biIsIERpYWxvZy5fcGFyZW50RXZlbnQpOworCQlYaW5oYS5fcmVtb3ZlRXZlbnQodywgImZvY3VzIiwgRGlhbG9nLl9wYXJlbnRFdmVudCk7CisJfQorCWNhcHdpbih3aW5kb3cpOworCS8vIGNhcHR1cmUgb3RoZXIgZnJhbWVzLCBub3RlIHRoZSBleGNlcHRpb24gdHJhcHBpbmcsIHRoaXMgaXMgYmVjYXVzZQorICAvLyB3ZSBhcmUgbm90IHBlcm1pdHRlZCB0byBhZGQgZXZlbnRzIHRvIGZyYW1lcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50CisgIC8vIHdpbmRvdydzIGRvbWFpbi4KKwlmb3IgKHZhciBpID0gMDsgaSA8IHdpbmRvdy5mcmFtZXMubGVuZ3RoOyBpKyspIHt0cnkgeyBjYXB3aW4od2luZG93LmZyYW1lc1tpXSk7IH0gY2F0Y2goZSkgeyB9IH07CisJLy8gbWFrZSB1cCBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBEaWFsb2cgZW5kcy4KKwlEaWFsb2cuX3JldHVybiA9IGZ1bmN0aW9uICh2YWwpIHsKKwkJaWYgKHZhbCAmJiBhY3Rpb24pIHsKKwkJCWFjdGlvbih2YWwpOworCQl9CisJCXJlbHdpbih3aW5kb3cpOworCQkvLyBjYXB0dXJlIG90aGVyIGZyYW1lcworCQlmb3IgKHZhciBpID0gMDsgaSA8IHdpbmRvdy5mcmFtZXMubGVuZ3RoOyBpKyspIHsgdHJ5IHsgcmVsd2luKHdpbmRvdy5mcmFtZXNbaV0pOyB9IGNhdGNoKGUpIHsgfSB9OworCQlEaWFsb2cuX21vZGFsID0gbnVsbDsKKwl9OworICBEaWFsb2cuX21vZGFsLmZvY3VzKCk7Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvRGlhbG9ncy9kaXYtZGlhbG9nLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9EaWFsb2dzL2Rpdi1kaWFsb2cuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UzNGQ3MwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvRGlhbG9ncy9kaXYtZGlhbG9nLmpzCkBAIC0wLDAgKzEsNzAgQEAKKworICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOm5vVGFicz10cnVlOnRhYlNpemU9MjppbmRlbnRTaXplPTI6LS0KKyAgICAtLSAgWGluaGEgKGlzIG5vdCBodG1sQXJlYSkgLSBodHRwOi8veGluaGEuZ29nby5jby5uei8KKyAgICAtLQorICAgIC0tICBVc2Ugb2YgWGluaGEgaXMgZ3JhbnRlZCBieSB0aGUgdGVybXMgb2YgdGhlIGh0bWxBcmVhIExpY2Vuc2UgKGJhc2VkIG9uCisgICAgLS0gIEJTRCBsaWNlbnNlKSAgcGxlYXNlIHJlYWQgbGljZW5zZS50eHQgaW4gdGhpcyBwYWNrYWdlIGZvciBkZXRhaWxzLgorICAgIC0tCisgICAgLS0gIFhpbmhhIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIHdvcmsgYnkgTWloYWkgQmF6b24gd2hpY2ggaXM6CisgICAgLS0gICAgICBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNCBkeW5hcmNoLmNvbS4KKyAgICAtLSAgICAgIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIGludGVyYWN0aXZldG9vbHMuY29tLCBpbmMuCisgICAgLS0gICAgICBUaGlzIGNvcHlyaWdodCBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlLgorICAgIC0tCisgICAgLS0gICRIZWFkVVJMOiBodHRwOi8vc3ZuLnhpbmhhLndlYmZhY3Rpb25hbC5jb20vdHJ1bmsvbW9kdWxlcy9EaWFsb2dzL2lubGluZS1kaWFsb2cuanMgJAorICAgIC0tICAkTGFzdENoYW5nZWREYXRlOiAyMDA3LTAxLTI0IDAzOjI2OjA0ICsxMzAwIChXZWQsIDI0IEphbiAyMDA3KSAkCisgICAgLS0gICRMYXN0Q2hhbmdlZFJldmlzaW9uOiA2OTQgJAorICAgIC0tICAkTGFzdENoYW5nZWRCeTogZ29nbyAkCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorLyoqIFRoZSBEaXZEaWFsb2cgaXMgdXNlZCBhcyBhIHNlbWktaW5kZXBlbmRhbnQgbWVhbnMgb2YgdXNpbmcgYSBQbHVnaW4gb3V0c2lkZSBvZiAKKyAqICBYaW5oYSwgaXQgZG9lcyBub3QgZGVwZW5kIG9uIGhhdmluZyBhIFhpbmhhIGVkaXRvciBhdmFpbGFibGUgLSBub3QgdGhhdCBvZiBvZiBjb3Vyc2UKKyAqICBQbHVnaW5zIHRoZW1zZWx2ZXMgbWF5IChhbmQgdmVyeSBsaWtlbHkgZG8pIHJlcXVpcmUgYW4gZWRpdG9yLgorICoKKyAqICBAcGFyYW0gRGl2IGludG8gd2hpY2ggdGhlIGRpYWxvZyB3aWxsIGRyYXcgaXRzZWxmLgorICoKKyAqICBAcGFyYW0gSFRNTCBmb3IgdGhlIGRpYWxvZywgd2l0aCB0aGUgc3BlY2lhbCBzdWJ0aXR1dGlvbnMuLi4KKyAqICAgIGlkPSJbc29tZWlkaGVyZV0iIHdpbGwgYXNzaWduIGEgdW5pcXVlIGlkIHRvIHRoZSBlbGVtZW50IGluIHF1ZXN0aW9uCisgKiAgICAgICAgYW5kIHRoaXMgY2FuIGJlIHJldHJpZXZlZCB3aXRoIHlvdXJEaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ3NvbWVpZGhlcmUnKSAgIAorICogICAgXyhTb21lIFRleHQgSGVyZSkgd2lsbCBsb2NhbGl6ZSB0aGUgdGV4dCwgdGhpcyBpcyB1c2VkIGZvciB3aXRoaW4gYXR0cmlidXRlcworICogICAgPGwxMG4+U29tZSBUZXh0IEhlcmU8L2wxMG4+IHdpbGwgbG9jYWxpemUgdGhlIHRleHQsIHRoaXMgaXMgdXNlZCBvdXRzaWRlIGF0dHJpYnV0ZXMKKyAqCisgKiAgQHBhcmFtIEEgZnVuY3Rpb24gd2hpY2ggY2FuIHRha2UgYSBuYXRpdmUgKGVuZ2xpc2gpIHN0cmluZyBhbmQgcmV0dXJuIGEgbG9jYWxpemVkIHZlcnNpb24sCisgKiAgIE9SOyAgIEEgImNvbnRleHQiIHRvIGJlIHVzZWQgd2l0aCB0aGUgc3RhbmRhcmQgWGluaGEuX2xjKCkgbWV0aG9kLAorICogICBPUjsgICBOdWxsIC0gbm8gbG9jYWxpemF0aW9uIHdpbGwgaGFwcGVuLCBvbmx5IG5hdGl2ZSBzdHJpbmdzIHdpbGwgYmUgdXNlZC4KKyAqCisgKi8KKyAgIAorWGluaGEuRGl2RGlhbG9nID0gZnVuY3Rpb24ocm9vdEVsZW0sIGh0bWwsIGxvY2FsaXplcikKK3sKKyAgdGhpcy5pZCAgICA9IHsgfTsKKyAgdGhpcy5yX2lkICA9IHsgfTsgLy8gcmV2ZXJzZSBsb29rdXAgaWQKKyAgdGhpcy5kb2N1bWVudCA9IGRvY3VtZW50OworICAKKyAgdGhpcy5yb290RWxlbSA9IHJvb3RFbGVtOworICB0aGlzLnJvb3RFbGVtLmNsYXNzTmFtZSArPSAnIGRpYWxvZyc7CisgIHRoaXMucm9vdEVsZW0uc3R5bGUuZGlzcGxheSAgPSAnbm9uZSc7CisgICAgCisgIHRoaXMud2lkdGggID0gIHRoaXMucm9vdEVsZW0ub2Zmc2V0V2lkdGggKyAncHgnOworICB0aGlzLmhlaWdodCA9ICB0aGlzLnJvb3RFbGVtLm9mZnNldEhlaWdodCArICdweCc7CisgIAorICB0aGlzLnNldExvY2FsaXplcihsb2NhbGl6ZXIpOworICB0aGlzLnJvb3RFbGVtLmlubmVySFRNTCA9IHRoaXMudHJhbnNsYXRlSHRtbChodG1sKTsgIAorfQorCitYaW5oYS5leHRlbmQoWGluaGEuRGl2RGlhbG9nLCBYaW5oYS5EaWFsb2cpOworCitYaW5oYS5EaXZEaWFsb2cucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbih2YWx1ZXMpCit7ICAKKyAgaWYodHlwZW9mIHZhbHVlcyAhPSAndW5kZWZpbmVkJykKKyAgeworICAgIHRoaXMuc2V0VmFsdWVzKHZhbHVlcyk7CisgIH0KKyAgCisgIHRoaXMucm9vdEVsZW0uc3R5bGUuZGlzcGxheSAgID0gJyc7Cit9OworCitYaW5oYS5EaXZEaWFsb2cucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbigpCit7CisgIHRoaXMucm9vdEVsZW0uc3R5bGUuZGlzcGxheSAgICAgICAgID0gJ25vbmUnOworICByZXR1cm4gdGhpcy5nZXRWYWx1ZXMoKTsKK307CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0RpYWxvZ3MvbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9EaWFsb2dzL2xhbmcvbGNfYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjhhZTJmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9EaWFsb2dzL2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDI1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgIlNvbWUgVGV4dCBIZXJlIjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0RpYWxvZ3MvcGFuZWwtZGlhbG9nLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9EaWFsb2dzL3BhbmVsLWRpYWxvZy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODNhYTE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9EaWFsb2dzL3BhbmVsLWRpYWxvZy5qcwpAQCAtMCwwICsxLDgxIEBACisKK1hpbmhhLlBhbmVsRGlhbG9nID0gZnVuY3Rpb24oZWRpdG9yLCBzaWRlLCBodG1sLCBsb2NhbGl6ZXIpCit7CisgIHRoaXMuaWQgICAgPSB7IH07CisgIHRoaXMucl9pZCAgPSB7IH07IC8vIHJldmVyc2UgbG9va3VwIGlkCisgIHRoaXMuZWRpdG9yICAgPSBlZGl0b3I7CisgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDsKKyAgdGhpcy5yb290RWxlbSA9IGVkaXRvci5hZGRQYW5lbChzaWRlKTsKKworICB2YXIgZGlhbG9nID0gdGhpczsKKyAgaWYodHlwZW9mIGxvY2FsaXplciA9PSAnZnVuY3Rpb24nKQorICB7CisgICAgdGhpcy5fbGMgPSBsb2NhbGl6ZXI7CisgIH0KKyAgZWxzZSBpZihsb2NhbGl6ZXIpCisgIHsKKyAgICB0aGlzLl9sYyA9IGZ1bmN0aW9uKHN0cmluZykKKyAgICB7CisgICAgICByZXR1cm4gWGluaGEuX2xjKHN0cmluZyxsb2NhbGl6ZXIpOworICAgIH07CisgIH0KKyAgZWxzZQorICB7CisgICAgdGhpcy5fbGMgPSBmdW5jdGlvbihzdHJpbmcpCisgICAgeworICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICB9OworICB9CisKKyAgaHRtbCA9IGh0bWwucmVwbGFjZSgvXFsoW2EtejAtOV9dKylcXS9pZywKKyAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihmdWxsU3RyaW5nLCBpZCkKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgZGlhbG9nLmlkW2lkXSA9PSAndW5kZWZpbmVkJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nLmlkW2lkXSA9IFhpbmhhLnVuaXEoJ0RpYWxvZycpOworICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2cucl9pZFtkaWFsb2cuaWRbaWRdXSA9IGlkOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpYWxvZy5pZFtpZF07CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICkucmVwbGFjZSgvPGwxMG4+KC4qPyk8XC9sMTBuPi9pZywKKyAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oZnVsbFN0cmluZyx0cmFuc2xhdGUpCisgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGlhbG9nLl9sYyh0cmFuc2xhdGUpIDsKKyAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICkucmVwbGFjZSgvPSJfXCgoLio/KVwpIi9nLAorICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihmdWxsU3RyaW5nLCB0cmFuc2xhdGUpCisgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJz0iJyArIGRpYWxvZy5fbGModHJhbnNsYXRlKSArICciJzsKKyAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICk7CisKKyAgdGhpcy5yb290RWxlbS5pbm5lckhUTUwgPSBodG1sOworfTsKKworWGluaGEuUGFuZWxEaWFsb2cucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbih2YWx1ZXMpCit7CisgIHRoaXMuc2V0VmFsdWVzKHZhbHVlcyk7CisgIHRoaXMuZWRpdG9yLnNob3dQYW5lbCh0aGlzLnJvb3RFbGVtKTsKK307CisKK1hpbmhhLlBhbmVsRGlhbG9nLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24oKQoreworICB0aGlzLmVkaXRvci5oaWRlUGFuZWwodGhpcy5yb290RWxlbSk7CisgIHJldHVybiB0aGlzLmdldFZhbHVlcygpOworfTsKKworWGluaGEuUGFuZWxEaWFsb2cucHJvdG90eXBlLm9ucmVzaXplICAgPSBYaW5oYS5EaWFsb2cucHJvdG90eXBlLm9ucmVzaXplOworCitYaW5oYS5QYW5lbERpYWxvZy5wcm90b3R5cGUudG9nZ2xlICAgICA9IFhpbmhhLkRpYWxvZy5wcm90b3R5cGUudG9nZ2xlOworCitYaW5oYS5QYW5lbERpYWxvZy5wcm90b3R5cGUuc2V0VmFsdWVzICA9IFhpbmhhLkRpYWxvZy5wcm90b3R5cGUuc2V0VmFsdWVzOworCitYaW5oYS5QYW5lbERpYWxvZy5wcm90b3R5cGUuZ2V0VmFsdWVzICA9IFhpbmhhLkRpYWxvZy5wcm90b3R5cGUuZ2V0VmFsdWVzOworCitYaW5oYS5QYW5lbERpYWxvZy5wcm90b3R5cGUuZ2V0RWxlbWVudEJ5SWQgICAgPSBYaW5oYS5EaWFsb2cucHJvdG90eXBlLmdldEVsZW1lbnRCeUlkOworCitYaW5oYS5QYW5lbERpYWxvZy5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeU5hbWUgPSBYaW5oYS5EaWFsb2cucHJvdG90eXBlLmdldEVsZW1lbnRzQnlOYW1lOworCitYaW5oYS5QYW5lbERpYWxvZy5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IFhpbmhhLkRpYWxvZy5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZTsKKworWGluaGEuUGFuZWxEaWFsb2cucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQgPSBYaW5oYS5EaWFsb2cucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ7CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0RpYWxvZ3MvcG9wdXB3aW4uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0RpYWxvZ3MvcG9wdXB3aW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg1MjY2OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvRGlhbG9ncy9wb3B1cHdpbi5qcwpAQCAtMCwwICsxLDE3OSBAQAorLy8gKGMpIGR5bmFyY2guY29tIDIwMDMtMjAwNAorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorCitmdW5jdGlvbiBQb3B1cFdpbihlZGl0b3IsIHRpdGxlLCBoYW5kbGVyLCBpbml0RnVuY3Rpb24pCit7CisgIHRoaXMuZWRpdG9yID0gZWRpdG9yOworICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyOworICB2YXIgZGxnID0gd2luZG93Lm9wZW4oIiIsICJfX2hhX2RpYWxvZyIsICJ0b29sYmFyPW5vLG1lbnViYXI9bm8scGVyc29uYWxiYXI9bm8sd2lkdGg9NjAwLGhlaWdodD02MDAsbGVmdD0yMCx0b3A9NDAsc2Nyb2xsYmFycz1ubyxyZXNpemFibGU9eWVzIik7CisgIHRoaXMud2luZG93ID0gZGxnOworICB2YXIgZG9jID0gZGxnLmRvY3VtZW50OworICB0aGlzLmRvYyA9IGRvYzsKKyAgdmFyIHNlbGYgPSB0aGlzOworCisgIHZhciBiYXNlID0gZG9jdW1lbnQuYmFzZVVSSSB8fCBkb2N1bWVudC5VUkw7CisgIGlmICggYmFzZSAmJiBiYXNlLm1hdGNoKC8oLiopXC8oW15cL10rKS8pICkKKyAgeworICAgIGJhc2UgPSBSZWdFeHAuJDEgKyAiLyI7CisgIH0KKyAgLy8gQGZpeG1lOiB3aHkgdXNpbmcgYSByZWdleCBoZXJlIGFuZCBub3QgYSBzaW1wbGUgc3RyaW5nIHRlc3QgPworICBpZiAoIHR5cGVvZiBfZWRpdG9yX3VybCAhPSAidW5kZWZpbmVkIiAmJiAhICggL15cLy8udGVzdChfZWRpdG9yX3VybCkgKSAmJiAhICggL2h0dHA6XC9cLy8udGVzdChfZWRpdG9yX3VybCkgKSApCisgIHsKKyAgICAvLyBfZWRpdG9yX3VybCBkb2Vzbid0IHN0YXJ0IHdpdGggJy8nIHdoaWNoIG1lYW5zIGl0J3MgcmVsYXRpdmUKKyAgICAvLyBGSVhNRTogdGhlcmUncyBhIHByb2JsZW0gaGVyZSwgaXQgY291bGQgYmUgaHR0cDovLyB3aGljaAorICAgIC8vIGRvZXNuJ3Qgc3RhcnQgd2l0aCBzbGFzaCBidXQgaXQncyBub3QgcmVsYXRpdmUgZWl0aGVyLgorICAgIGJhc2UgKz0gX2VkaXRvcl91cmw7CisgIH0KKyAgZWxzZQorICB7CisgICAgYmFzZSA9IF9lZGl0b3JfdXJsOworICB9CisgCisgIC8vIEBmaXhtZTogd2h5IHVzaW5nIGEgcmVnZXggaGVyZSBhbmQgbm90IGEgc2ltcGxlIHN0cmluZyB0ZXN0ID8KKyAgaWYgKCAhICggL1wvJC8udGVzdChiYXNlKSApICkKKyAgeworICAgIC8vIGJhc2UgZG9lcyBub3QgZW5kIGluIHNsYXNoLCBhZGQgaXQgbm93CisgICAgYmFzZSArPSAnLyc7CisgIH0KKyAgdGhpcy5iYXNlVVJMID0gYmFzZTsKKworICBkb2Mub3BlbigpOworICB2YXIgaHRtbCA9ICI8aHRtbD48aGVhZD48dGl0bGU+IiArIHRpdGxlICsgIjwvdGl0bGU+XG4iOworICAvLyBodG1sICs9ICI8YmFzZSBocmVmPSciICsgYmFzZSArICJodG1sYXJlYS5qcycgLz5cbiI7CisgIGh0bWwgKz0gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+QGltcG9ydCB1cmwoJyArIF9lZGl0b3JfdXJsICsgJ1hpbmhhLmNzcyk7PC9zdHlsZT5cbic7CisgIGlmICggX2VkaXRvcl9za2luICE9ICIiICkKKyAgeworICAgIGh0bWwgKz0gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+QGltcG9ydCB1cmwoJyArIF9lZGl0b3JfdXJsICsgJ3NraW5zLycgKyBfZWRpdG9yX3NraW4gKyAnL3NraW4uY3NzKTs8L3N0eWxlPlxuJzsKKyAgfQorICBodG1sICs9ICI8L2hlYWQ+XG4iOworICBodG1sICs9ICc8Ym9keSBjbGFzcz0iZGlhbG9nIHBvcHVwd2luIiBpZD0iLS1IQS1ib2R5Ij48L2JvZHk+PC9odG1sPic7CisgIGRvYy53cml0ZShodG1sKTsKKyAgZG9jLmNsb3NlKCk7CisKKyAgLy8gc29tZXRpbWVzIEkgSGF0ZSBNb3ppbGxhLi4uIDstKAorICBmdW5jdGlvbiBpbml0MigpCisgIHsKKyAgICB2YXIgYm9keSA9IGRvYy5ib2R5OworICAgIGlmICggIWJvZHkgKQorICAgIHsKKyAgICAgIHNldFRpbWVvdXQoaW5pdDIsIDI1KTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZGxnLnRpdGxlID0gdGl0bGU7CisgICAgZG9jLmRvY3VtZW50RWxlbWVudC5zdHlsZS5wYWRkaW5nID0gIjBweCI7CisgICAgZG9jLmRvY3VtZW50RWxlbWVudC5zdHlsZS5tYXJnaW4gPSAiMHB4IjsKKyAgICB2YXIgY29udGVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBjb250ZW50LmNsYXNzTmFtZSA9ICJjb250ZW50IjsKKyAgICBzZWxmLmNvbnRlbnQgPSBjb250ZW50OworICAgIGJvZHkuYXBwZW5kQ2hpbGQoY29udGVudCk7CisgICAgc2VsZi5lbGVtZW50ID0gYm9keTsKKyAgICBpbml0RnVuY3Rpb24oc2VsZik7CisgICAgZGxnLmZvY3VzKCk7CisgIH0KKyAgaW5pdDIoKTsKK30KKworUG9wdXBXaW4ucHJvdG90eXBlLmNhbGxIYW5kbGVyID0gZnVuY3Rpb24oKQoreworICB2YXIgdGFncyA9IFsiaW5wdXQiLCAidGV4dGFyZWEiLCAic2VsZWN0Il07CisgIHZhciBwYXJhbXMgPSB7fTsKKyAgZm9yICggdmFyIHRpID0gdGFncy5sZW5ndGg7IC0tdGkgPj0gMDsgKQorICB7CisgICAgdmFyIHRhZyA9IHRhZ3NbdGldOworICAgIHZhciBlbHMgPSB0aGlzLmNvbnRlbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTsKKyAgICBmb3IgKCB2YXIgaiA9IDA7IGogPCBlbHMubGVuZ3RoOyArK2ogKQorICAgIHsKKyAgICAgIHZhciBlbCA9IGVsc1tqXTsKKyAgICAgIHZhciB2YWwgPSBlbC52YWx1ZTsKKyAgICAgIGlmICggZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICJpbnB1dCIgKQorICAgICAgeworICAgICAgICBpZiAoIGVsLnR5cGUgPT0gImNoZWNrYm94IiApCisgICAgICAgIHsKKyAgICAgICAgICB2YWwgPSBlbC5jaGVja2VkOworICAgICAgICB9CisgICAgICB9CisgICAgICBwYXJhbXNbZWwubmFtZV0gPSB2YWw7CisgICAgfQorICB9CisgIHRoaXMuaGFuZGxlcih0aGlzLCBwYXJhbXMpOworICByZXR1cm4gZmFsc2U7Cit9OworCitQb3B1cFdpbi5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpCit7CisgIHRoaXMud2luZG93LmNsb3NlKCk7Cit9OworCitQb3B1cFdpbi5wcm90b3R5cGUuYWRkQnV0dG9ucyA9IGZ1bmN0aW9uKCkKK3sKKyAgLy8gQGZpeG1lOiBpc24ndCBzZWxmIGEgcHJlZGVmaW5lZCB2YXJpYWJsZSB1c2VkIHRvIGFjY2VzcyBzZWxmIGZyYW1lIGluIG1vc3QgYnJvd3NlcnMgPworICAvLyAgICAgICAgIGlmIHllcywgdGhlbiB3ZSBicmVhayBpdCBoZXJlCisgIHZhciBzZWxmID0gdGhpczsKKyAgdmFyIGRpdiA9IHRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICB0aGlzLmNvbnRlbnQuYXBwZW5kQ2hpbGQoZGl2KTsKKyAgZGl2LmlkID0gImJ1dHRvbnMiOworICBkaXYuY2xhc3NOYW1lID0gImJ1dHRvbnMiOworICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kgKQorICB7CisgICAgdmFyIGJ0biA9IGFyZ3VtZW50c1tpXTsKKyAgICB2YXIgYnV0dG9uID0gdGhpcy5kb2MuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CisgICAgZGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7CisgICAgYnV0dG9uLmlubmVySFRNTCA9IFhpbmhhLl9sYyhidG4sICdYaW5oYScpOworICAgIHN3aXRjaCAoYnRuLnRvTG93ZXJDYXNlKCkpCisgICAgeworICAgICAgY2FzZSAib2siOgorICAgICAgICBYaW5oYS5hZGREb20wRXZlbnQoYnV0dG9uLCAnY2xpY2snLAorICAgICAgICAgIGZ1bmN0aW9uKCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBzZWxmLmNhbGxIYW5kbGVyKCk7CisgICAgICAgICAgICBzZWxmLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICApOworICAgICAgYnJlYWs7CisgICAgICBjYXNlICJjYW5jZWwiOgorICAgICAgICBYaW5oYS5hZGREb20wRXZlbnQoYnV0dG9uLCAnY2xpY2snLAorICAgICAgICAgIGZ1bmN0aW9uKCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBzZWxmLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICApOworICAgICAgYnJlYWs7CisgICAgfQorICB9Cit9OworCitQb3B1cFdpbi5wcm90b3R5cGUuc2hvd0F0RWxlbWVudCA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIHNlbGYgPSB0aGlzOworICAvLyBNb3ppbGxhIG5lZWRzIHNvbWUgdGltZSB0byByZWFsaXplIHdoYXQncyBnb2luJyBvbi4uCisgIHNldFRpbWVvdXQoZnVuY3Rpb24oKQorICAgIHsKKyAgICAgIHZhciB3ID0gc2VsZi5jb250ZW50Lm9mZnNldFdpZHRoICsgNDsKKyAgICAgIHZhciBoID0gc2VsZi5jb250ZW50Lm9mZnNldEhlaWdodCArIDQ7CisgICAgICAvLyBzaXplIHRvIGNvbnRlbnQgLS0gdGhhdCdzIGZ1Y2tpbicgYnVnZ3kgaW4gYWxsIGZ1Y2tpbicgYnJvd3NlcnMhISEKKyAgICAgIC8vIHNvIHRoYXQgd2Ugc2V0IGEgbGFyZ2VyIHNpemUgZm9yIHRoZSBkaWFsb2cgd2luZG93IGFuZCB0aGVuIGNlbnRlcgorICAgICAgLy8gdGhlIGVsZW1lbnQgaW5zaWRlLi4uIHBodWNrIQorCisgICAgICAvLyBjZW50ZXIuLi4KKyAgICAgIHZhciBlbCA9IHNlbGYuY29udGVudDsKKyAgICAgIHZhciBzID0gZWwuc3R5bGU7CisgICAgICAvLyBzLndpZHRoID0gZWwub2Zmc2V0V2lkdGggKyAicHgiOworICAgICAgLy8gcy5oZWlnaHQgPSBlbC5vZmZzZXRIZWlnaHQgKyAicHgiOworICAgICAgcy5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CisgICAgICBzLmxlZnQgPSBwYXJzZUludCgodyAtIGVsLm9mZnNldFdpZHRoKSAvIDIsIDEwKSArICJweCI7CisgICAgICBzLnRvcCA9IHBhcnNlSW50KChoIC0gZWwub2Zmc2V0SGVpZ2h0KSAvIDIsIDEwKSArICJweCI7CisgICAgICBpZiAoWGluaGEuaXNfZ2Vja28pCisgICAgICB7CisgICAgICAgIHNlbGYud2luZG93LmlubmVyV2lkdGggPSB3OworICAgICAgICBzZWxmLndpbmRvdy5pbm5lckhlaWdodCA9IGg7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHNlbGYud2luZG93LnJlc2l6ZVRvKHcgKyA4LCBoICsgNzApOworICAgICAgfQorICAgICAgCisgICAgfSwKKyAgICAyNSk7Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvRnVsbFNjcmVlbi9mdWxsLXNjcmVlbi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvRnVsbFNjcmVlbi9mdWxsLXNjcmVlbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjdiYjgyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2Z1bGwtc2NyZWVuLmpzCkBAIC0wLDAgKzEsMjQxIEBACitmdW5jdGlvbiBGdWxsU2NyZWVuKGVkaXRvciwgYXJncykKK3sKKyAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisgIHRoaXMub3JpZ2luYWxTaXplcyA9IG51bGw7CisgIGVkaXRvci5fc3VwZXJjbGVhbl9vbiA9IGZhbHNlOworICB2YXIgY2ZnID0gZWRpdG9yLmNvbmZpZzsKKworICBjZmcucmVnaXN0ZXJJY29uKCdmdWxsc2NyZWVuJywgW19lZGl0b3JfdXJsICsgY2ZnLmltZ1VSTCArICdlZF9idXR0b25zX21haW4ucG5nJyw4LDBdKTsKKyAgY2ZnLnJlZ2lzdGVySWNvbignZnVsbHNjcmVlbnJlc3RvcmUnLCBbX2VkaXRvcl91cmwgKyBjZmcuaW1nVVJMICsgJ2VkX2J1dHRvbnNfbWFpbi5wbmcnLDksMF0pOworICAKKyAgY2ZnLnJlZ2lzdGVyQnV0dG9uCisgICggJ2Z1bGxzY3JlZW4nLAorICAgIHRoaXMuX2xjKCJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiKSwKKyAgICBjZmcuaWNvbkxpc3QuZnVsbHNjcmVlbiwgdHJ1ZSwKKyAgICAgIGZ1bmN0aW9uKGUsIG9iam5hbWUsIG9iaikKKyAgICAgIHsKKyAgICAgICAgZS5fZnVsbFNjcmVlbigpOworICAgICAgfQorICApOworCisgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCAncG9wdXBlZGl0b3InIGFuZCByZXBsYWNlIGl0IHdpdGggZnVsbHNjcmVlbgorICBjZmcuYWRkVG9vbGJhckVsZW1lbnQoImZ1bGxzY3JlZW4iLCAicG9wdXBlZGl0b3IiLCAwKTsKK30KKworRnVsbFNjcmVlbi5fcGx1Z2luSW5mbyA9Cit7CisgIG5hbWUgICAgIDogIkZ1bGxTY3JlZW4iLAorICB2ZXJzaW9uICA6ICIxLjAiLAorICBkZXZlbG9wZXI6ICJKYW1lcyBTbGVlbWFuIiwKKyAgZGV2ZWxvcGVyX3VybDogImh0dHA6Ly93d3cuZ29nby5jby5uei8iLAorICBjX293bmVyICAgICAgOiAiR29nbyBJbnRlcm5ldCBTZXJ2aWNlcyIsCisgIGxpY2Vuc2UgICAgICA6ICJodG1sQXJlYSIsCisgIHNwb25zb3IgICAgICA6ICJHb2dvIEludGVybmV0IFNlcnZpY2VzIiwKKyAgc3BvbnNvcl91cmwgIDogImh0dHA6Ly93d3cuZ29nby5jby5uei8iCit9OworCitGdWxsU2NyZWVuLnByb3RvdHlwZS5fbGMgPSBmdW5jdGlvbihzdHJpbmcpIHsKKyAgICByZXR1cm4gWGluaGEuX2xjKHN0cmluZywge3VybCA6IF9lZGl0b3JfdXJsICsgJ21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nLycsY29udGV4dDoiRnVsbFNjcmVlbiJ9KTsKK307CisKKy8qKiBmdWxsU2NyZWVuIG1ha2VzIGFuIGVkaXRvciB0YWtlIHVwIHRoZSBmdWxsIHdpbmRvdyBzcGFjZSAoYW5kIHJlc2l6ZXMgd2hlbiB0aGUgYnJvd3NlciBpcyByZXNpemVkKQorICogIHRoZSBwcmluY2lwbGUgaXMgdGhlIHNhbWUgYXMgdGhlICJwb3B1cHdpbmRvdyIgZnVuY3Rpb25hbGl0eSBpbiB0aGUgb3JpZ2luYWwgaHRtbEFyZWEsIGV4Y2VwdAorICogIHRoaXMgb25lIGRvZXNuJ3QgcG9wdXAgYSB3aW5kb3cgKGl0IGp1c3QgdXNlcyB0byBwb3NpdGlvbmluZyBoYWNrZXJ5KSBzbyBpdCdzIG11Y2ggbW9yZSByZWxpYWJsZQorICogIGFuZCBtdWNoIGZhc3RlciB0byBzd2l0Y2ggYmV0d2VlbgorICovCisKK1hpbmhhLnByb3RvdHlwZS5fZnVsbFNjcmVlbiA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIGUgPSB0aGlzOworICB2YXIgY2ZnID0gZS5jb25maWc7CisgIGZ1bmN0aW9uIHNpemVJdFVwKCkKKyAgeworICAgIGlmKCFlLl9pc0Z1bGxTY3JlZW4gfHwgZS5fc2l6aW5nKSByZXR1cm4gZmFsc2U7CisgICAgZS5fc2l6aW5nID0gdHJ1ZTsKKyAgICAvLyBXaWR0aCAmIEhlaWdodCBvZiB3aW5kb3cKKyAgICB2YXIgZGltID0gWGluaGEudmlld3BvcnRTaXplKCk7CisgICAgaWYoZS5jb25maWcuZnVsbFNjcmVlblNpemVEb3duTWV0aG9kID09ICdyZXN0b3JlJykgCisgICAgeworICAgICAgZS5vcmlnaW5hbFNpemVzID0geworICAgICAgICB4OiAgIHBhcnNlSW50KGUuX2h0bWxBcmVhLnN0eWxlLndpZHRoKSwKKyAgICAgICAgeTogICBwYXJzZUludChlLl9odG1sQXJlYS5zdHlsZS5oZWlnaHQpLAorICAgICAgICBkaW06IGRpbQorICAgICAgfTsKKyAgICB9CisKKyAgICB2YXIgaCA9IGRpbS55IC0gZS5jb25maWcuZnVsbFNjcmVlbk1hcmdpbnNbMF0gLSAgZS5jb25maWcuZnVsbFNjcmVlbk1hcmdpbnNbMl07CisgICAgdmFyIHcgPSBkaW0ueCAtIGUuY29uZmlnLmZ1bGxTY3JlZW5NYXJnaW5zWzFdIC0gIGUuY29uZmlnLmZ1bGxTY3JlZW5NYXJnaW5zWzNdOworCisgICAgZS5zaXplRWRpdG9yKHcgKyAncHgnLCBoICsgJ3B4Jyx0cnVlLHRydWUpOworICAgIGUuX3NpemluZyA9IGZhbHNlOworICAgIGlmICggZS5fdG9vbGJhck9iamVjdHMuZnVsbHNjcmVlbiApIGUuX3Rvb2xiYXJPYmplY3RzLmZ1bGxzY3JlZW4uc3dhcEltYWdlKGNmZy5pY29uTGlzdC5mdWxsc2NyZWVucmVzdG9yZSk7IAorICB9CisKKyAgZnVuY3Rpb24gc2l6ZUl0RG93bigpCisgIHsKKyAgICBpZihlLl9pc0Z1bGxTY3JlZW4gfHwgZS5fc2l6aW5nKSByZXR1cm4gZmFsc2U7CisgICAgZS5fc2l6aW5nID0gdHJ1ZTsKKworICAgIGlmKGUub3JpZ2luYWxTaXplcyAhPSBudWxsKSAKKyAgICB7CisgICAgICAgIHZhciBvcyA9IGUub3JpZ2luYWxTaXplczsKKyAgICAgICAgdmFyIG5EaW0gPSBYaW5oYS52aWV3cG9ydFNpemUoKTsKKyAgICAgICAgdmFyIG5XID0gb3MueCArIChuRGltLnggLSBvcy5kaW0ueCk7CisgICAgICAgIHZhciBuSCA9IG9zLnkgKyAobkRpbS55IC0gb3MuZGltLnkpOworICAgICAgICBlLnNpemVFZGl0b3IoIG5XICsgJ3B4JywgbkggKyAncHgnLCBlLmNvbmZpZy5zaXplSW5jbHVkZXNCYXJzLCBlLmNvbmZpZy5zaXplSW5jbHVkZXNQYW5lbHMpOworICAgICAgICBlLm9yaWdpbmFsU2l6ZXMgPSBudWxsOworICAgIH0KKyAgICBlbHNlIGUuaW5pdFNpemUoKTsKKworICAgIGUuX3NpemluZyA9IGZhbHNlOworICAgIGlmICggZS5fdG9vbGJhck9iamVjdHMuZnVsbHNjcmVlbiApIGUuX3Rvb2xiYXJPYmplY3RzLmZ1bGxzY3JlZW4uc3dhcEltYWdlKGNmZy5pY29uTGlzdC5mdWxsc2NyZWVuKTsgCisgIH0KKworICAvKiogSXQncyBub3QgcG9zc2libGUgdG8gcmVsaWFibHkgZ2V0IHNjcm9sbCBldmVudHMsIHBhcnRpY3VsYXJseSB3aGVuIHdlIGFyZSBoaWRpbmcgdGhlIHNjcm9sbGJhcnMKKyAgICogICBzbyB3ZSBqdXN0IHJlc2V0IHRoZSBzY3JvbGwgZXZlciBzbyBvZnRlbiB3aGlsZSBpbiBmdWxsc2NyZWVuIG1vZGUKKyAgICovCisgIGZ1bmN0aW9uIHJlc2V0U2Nyb2xsKCkKKyAgeworICAgIGlmKGUuX2lzRnVsbFNjcmVlbikKKyAgICB7CisgICAgICB3aW5kb3cuc2Nyb2xsKDAsMCk7CisgICAgICB3aW5kb3cuc2V0VGltZW91dChyZXNldFNjcm9sbCwxNTApOworICAgIH0KKyAgfQorCisgIGlmKHR5cGVvZiB0aGlzLl9pc0Z1bGxTY3JlZW4gPT0gJ3VuZGVmaW5lZCcpCisgIHsKKyAgICB0aGlzLl9pc0Z1bGxTY3JlZW4gPSBmYWxzZTsKKyAgICBpZihlLnRhcmdldCAhPSBlLl9pZnJhbWUpCisgICAgeworICAgICAgWGluaGEuX2FkZEV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScsIHNpemVJdFVwKTsKKyAgICB9CisgIH0KKworICAvLyBHZWNrbyBoYXMgYSBidWcgd2hlcmUgaWYgeW91IGNoYW5nZSBwb3NpdGlvbi9kaXNwbGF5IG9uIGEKKyAgLy8gZGVzaWduTW9kZSBpZnJhbWUgdGhhdCBkZXNpZ25Nb2RlIGRpZXMuCisgIGlmKFhpbmhhLmlzX2dlY2tvKQorICB7CisgICAgdGhpcy5kZWFjdGl2YXRlRWRpdG9yKCk7CisgIH0KKworICBpZih0aGlzLl9pc0Z1bGxTY3JlZW4pCisgIHsKKyAgICAvLyBVbm1heGltaXplCisgICAgdGhpcy5faHRtbEFyZWEuc3R5bGUucG9zaXRpb24gPSAnJzsKKyAgICBpZiAoIVhpbmhhLmlzX2llICkgdGhpcy5faHRtbEFyZWEuc3R5bGUuYm9yZGVyICAgPSAnJzsKKworICAgIHRyeQorICAgIHsKKyAgICAgIGlmKFhpbmhhLmlzX2llICYmIGRvY3VtZW50LmNvbXBhdE1vZGUgPT0gJ0NTUzFDb21wYXQnKQorICAgICAgeworICAgICAgICB2YXIgYm9kID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2h0bWwnKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgdmFyIGJvZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5Jyk7CisgICAgICB9CisgICAgICBib2RbMF0uc3R5bGUub3ZlcmZsb3c9Jyc7CisgICAgfQorICAgIGNhdGNoKGUpCisgICAgeworICAgICAgLy8gTnV0dGhpbgorICAgIH0KKyAgICB0aGlzLl9pc0Z1bGxTY3JlZW4gPSBmYWxzZTsKKyAgICBzaXplSXREb3duKCk7CisKKyAgICAvLyBSZXN0b3JlIGFsbCBhbmNlc3RvciBwb3NpdGlvbnMKKyAgICB2YXIgYW5jZXN0b3IgPSB0aGlzLl9odG1sQXJlYTsKKyAgICB3aGlsZSgoYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnROb2RlKSAmJiBhbmNlc3Rvci5zdHlsZSkKKyAgICB7CisgICAgICBhbmNlc3Rvci5zdHlsZS5wb3NpdGlvbiA9IGFuY2VzdG9yLl94aW5oYV9mdWxsU2NyZWVuT2xkUG9zaXRpb247CisgICAgICBhbmNlc3Rvci5feGluaGFfZnVsbFNjcmVlbk9sZFBvc2l0aW9uID0gbnVsbDsKKyAgICB9CisgICAgCisgICAgaWYgKCBYaW5oYS5pZV92ZXJzaW9uIDwgNyApCisgICAgeworICAgICAgdmFyIHNlbGVjdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0Iik7CisgICAgICBmb3IgKCB2YXIgaT0wO2k8c2VsZWN0cy5sZW5ndGg7KytpICkKKyAgICAgIHsKKyAgICAgICAgc2VsZWN0c1tpXS5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnOworICAgICAgfQorICAgIH0KKyAgICB3aW5kb3cuc2Nyb2xsKHRoaXMuX3VuU2Nyb2xsLngsIHRoaXMuX3VuU2Nyb2xsLnkpOworICB9CisgIGVsc2UKKyAgeworCisgICAgLy8gR2V0IHRoZSBjdXJyZW50IFNjcm9sbCBQb3NpdGlvbnMKKyAgICB0aGlzLl91blNjcm9sbCA9CisgICAgeworICAgICB4Oih3aW5kb3cucGFnZVhPZmZzZXQpPyh3aW5kb3cucGFnZVhPZmZzZXQpOihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpP2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0OmRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCwKKyAgICAgeTood2luZG93LnBhZ2VZT2Zmc2V0KT8od2luZG93LnBhZ2VZT2Zmc2V0KTooZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KT9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wOmRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wCisgICAgfTsKKworCisgICAgLy8gTWFrZSBhbGwgYW5jZXN0b3JzIHBvc2l0aW9uID0gc3RhdGljCisgICAgdmFyIGFuY2VzdG9yID0gdGhpcy5faHRtbEFyZWE7CisgICAgd2hpbGUoKGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZSkgJiYgYW5jZXN0b3Iuc3R5bGUpCisgICAgeworICAgICAgYW5jZXN0b3IuX3hpbmhhX2Z1bGxTY3JlZW5PbGRQb3NpdGlvbiA9IGFuY2VzdG9yLnN0eWxlLnBvc2l0aW9uOworICAgICAgYW5jZXN0b3Iuc3R5bGUucG9zaXRpb24gPSAnc3RhdGljJzsKKyAgICB9CisgICAgLy8gdmVyeSB1Z2x5IGJ1ZyBpbiBJRSA8IDcgc2hvd3Mgc2VsZWN0IGJveGVzIHRocm91Z2ggZWxlbWVudHMgdGhhdCBhcmUgcG9zaXRpb25lZCBvdmVyIHRoZW0KKyAgICBpZiAoIFhpbmhhLmllX3ZlcnNpb24gPCA3ICkKKyAgICB7CisgICAgICB2YXIgc2VsZWN0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKTsKKyAgICAgIHZhciBzLCBjdXJyZW50RWRpdG9yOworICAgICAgZm9yICggdmFyIGk9MDtpPHNlbGVjdHMubGVuZ3RoOysraSApCisgICAgICB7CisgICAgICAgIHMgPSBzZWxlY3RzW2ldOworICAgICAgICBjdXJyZW50RWRpdG9yID0gZmFsc2U7CisgICAgICAgIHdoaWxlICggcyA9IHMucGFyZW50Tm9kZSApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIHMgPT0gdGhpcy5faHRtbEFyZWEgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGN1cnJlbnRFZGl0b3IgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICggIWN1cnJlbnRFZGl0b3IgJiYgc2VsZWN0c1tpXS5zdHlsZS52aXNpYmlsaXR5ICE9ICdoaWRkZW4nKQorICAgICAgICB7CisgICAgICAgICAgc2VsZWN0c1tpXS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgLy8gTWF4aW1pemUKKyAgICB3aW5kb3cuc2Nyb2xsKDAsMCk7CisgICAgdGhpcy5faHRtbEFyZWEuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnOworICAgIHRoaXMuX2h0bWxBcmVhLnN0eWxlLnpJbmRleCAgID0gOTk5OworICAgIHRoaXMuX2h0bWxBcmVhLnN0eWxlLmxlZnQgICAgID0gZS5jb25maWcuZnVsbFNjcmVlbk1hcmdpbnNbM10gKyAncHgnOworICAgIHRoaXMuX2h0bWxBcmVhLnN0eWxlLnRvcCAgICAgID0gZS5jb25maWcuZnVsbFNjcmVlbk1hcmdpbnNbMF0gKyAncHgnOworICAgIGlmICggIVhpbmhhLmlzX2llICYmICFYaW5oYS5pc193ZWJraXQgKSB0aGlzLl9odG1sQXJlYS5zdHlsZS5ib3JkZXIgICA9ICdub25lJzsKKyAgICB0aGlzLl9pc0Z1bGxTY3JlZW4gPSB0cnVlOworICAgIHJlc2V0U2Nyb2xsKCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICBpZihYaW5oYS5pc19pZSAmJiBkb2N1bWVudC5jb21wYXRNb2RlID09ICdDU1MxQ29tcGF0JykKKyAgICAgIHsKKyAgICAgICAgdmFyIGJvZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJyk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHZhciBib2QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpOworICAgICAgfQorICAgICAgYm9kWzBdLnN0eWxlLm92ZXJmbG93PSdoaWRkZW4nOworICAgIH0KKyAgICBjYXRjaChlKQorICAgIHsKKyAgICAgIC8vIE51dHRoaW4KKyAgICB9CisKKyAgICBzaXplSXRVcCgpOworICB9CisKKyAgaWYoWGluaGEuaXNfZ2Vja28pCisgIHsKKyAgICB0aGlzLmFjdGl2YXRlRWRpdG9yKCk7CisgIH0KKyAgdGhpcy5mb2N1c0VkaXRvcigpOworfTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ2Njg0NgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIkVkaXRvciBtYXhpbWllcmVuL3ZlcmtsZWluZXJuIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0N2YwMGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9lcy5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVzIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIk1heGltaXplL01pbmltaXplIEVkaXRvciI6ICJNYXhpbWl6YXIvTWluaW1pemFyIEVkaXRvciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9mci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzU1MjgwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvZnIuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiQWdyYW5kaXIvUsOpZHVpcmUgbCfDqWRpdGV1ciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9qYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGYyMTYyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvamEuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAi44Ko44OH44Kj44K/44Gu5pyA5aSn5YyWL+acgOWwj+WMliIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFiMDU1OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSwyNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgzNDc0YQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL25iLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIk1ha3NpbWVyL01pbmltZXIgV1lTSVdZRyB2aW5kdSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTg4Mzg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvbmwuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJubCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiRWRpdG9yIG1heGltYWxpc2VyZW4vdmVya2xlaW5lbiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvcGwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9wbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODJkMjMzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvcGwuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiTWFrc3ltYWxpenVqL21pbmltYWxpenVqIGVkeXRvciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9wdF9ici5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTRjNDkyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvcHRfYnIuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwdF9iciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiTWF4aW1pemFyL01pbmltaXphciBFZGl0b3IiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhlN2I4NAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL3J1LmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicnUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogItCg0LDQt9Cy0LXRgNC90YPRgtGML9Ch0LLQtdGA0L3Rg9GC0Ywg0YDQtdC00LDQutGC0L7RgCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvc3YuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9zdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZTE4MzU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvc3YuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiTWF4aW1lcmEvTWluaW1lcmEgV1lTSVdZRyBmw7Zuc3RlciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvdHIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy90ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTk3Y2I1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvdHIuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0ciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiRWRpdMO2csO8IHNpbWdlIGR1cnVtdW5hIGvDvMOnw7xsdC9nZXJpIHnDvGtsZSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9HZWNrby9HZWNrby5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvR2Vja28vR2Vja28uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQzZGU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvR2Vja28vR2Vja28uanMKQEAgLTAsMCArMSw5NjAgQEAKKworICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOm5vVGFicz10cnVlOnRhYlNpemU9MjppbmRlbnRTaXplPTI6LS0KKyAgICAtLSAgWGluaGEgKGlzIG5vdCBodG1sQXJlYSkgLSBodHRwOi8veGluaGEuZ29nby5jby5uei8KKyAgICAtLQorICAgIC0tICBVc2Ugb2YgWGluaGEgaXMgZ3JhbnRlZCBieSB0aGUgdGVybXMgb2YgdGhlIGh0bWxBcmVhIExpY2Vuc2UgKGJhc2VkIG9uCisgICAgLS0gIEJTRCBsaWNlbnNlKSAgcGxlYXNlIHJlYWQgbGljZW5zZS50eHQgaW4gdGhpcyBwYWNrYWdlIGZvciBkZXRhaWxzLgorICAgIC0tCisgICAgLS0gIFhpbmhhIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIHdvcmsgYnkgTWloYWkgQmF6b24gd2hpY2ggaXM6CisgICAgLS0gICAgICBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNCBkeW5hcmNoLmNvbS4KKyAgICAtLSAgICAgIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIGludGVyYWN0aXZldG9vbHMuY29tLCBpbmMuCisgICAgLS0gICAgICBUaGlzIGNvcHlyaWdodCBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlLgorICAgIC0tCisgICAgLS0gVGhpcyBpcyB0aGUgR2Vja28gY29tcGF0YWJpbGl0eSBwbHVnaW4sIHBhcnQgb2YgdGhlIFhpbmhhIGNvcmUuCisgICAgLS0KKyAgICAtLSAgVGhlIGZpbGUgaXMgbG9hZGVkIGFzIGEgc3BlY2lhbCBwbHVnaW4gYnkgdGhlIFhpbmhhIENvcmUgd2hlbgorICAgIC0tICBYaW5oYSBpcyBiZWluZyBydW4gdW5kZXIgYSBHZWNrbyBiYXNlZCBicm93c2VyIHdpdGggdGhlIE1pZGFzCisgICAgLS0gIGVkaXRpbmcgQVBJLgorICAgIC0tCisgICAgLS0gIEl0IHByb3ZpZGVzIGltcGxlbWVudGF0aW9uIGFuZCBzcGVjaWFsaXNhdGlvbiBmb3IgdmFyaW91cyBtZXRob2RzCisgICAgLS0gIGluIHRoZSBjb3JlIHdoZXJlIGRpZmZlcmVudCBhcHByb2FjaGVzIHBlciBicm93c2VyIGFyZSByZXF1aXJlZC4KKyAgICAtLQorICAgIC0tICBEZXNpZ24gTm90ZXM6OgorICAgIC0tICAgTW9zdCBtZXRob2RzIGhlcmUgd2lsbCBzaW1wbHkgYmUgb3ZlcnJpZGluZyBYaW5oYS5wcm90b3R5cGUuPG1ldGhvZD4KKyAgICAtLSAgIGFuZCBzaG91bGQgYmUgY2FsbGVkIHRoYXQsIGJ1dCBtZXRob2RzIHNwZWNpZmljIHRvIEdlY2tvIHNob3VsZCAKKyAgICAtLSAgIGJlIGEgcGFydCBvZiB0aGUgR2Vja28ucHJvdG90eXBlLCB3ZSB3b24ndCB0cmFtcGxlIG9uIG5hbWVzcGFjZQorICAgIC0tICAgdGhhdCB3YXkuCisgICAgLS0KKyAgICAtLSAgJEhlYWRVUkw6IGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvR2Vja28vR2Vja28uanMgJAorICAgIC0tICAkTGFzdENoYW5nZWREYXRlOiAyMDE4LTAyLTE5IDIwOjM1OjQ5ICsxMzAwIChNb24sIDE5IEZlYiAyMDE4KSAkCisgICAgLS0gICRMYXN0Q2hhbmdlZFJldmlzaW9uOiAxNDAyICQKKyAgICAtLSAgJExhc3RDaGFuZ2VkQnk6IGdvZ28gJAorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK0dlY2tvLl9wbHVnaW5JbmZvID0geworICBuYW1lICAgICAgICAgIDogIkdlY2tvIiwKKyAgb3JpZ2luICAgICAgICA6ICJYaW5oYSBDb3JlIiwKKyAgdmVyc2lvbiAgICAgICA6ICIkTGFzdENoYW5nZWRSZXZpc2lvbjogMTQwMiAkIi5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sICckMScpLAorICBkZXZlbG9wZXIgICAgIDogIlRoZSBYaW5oYSBDb3JlIERldmVsb3BlciBUZWFtIiwKKyAgZGV2ZWxvcGVyX3VybCA6ICIkSGVhZFVSTDogaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvbW9kdWxlcy9HZWNrby9HZWNrby5qcyAkIi5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sICckMScpLAorICBzcG9uc29yICAgICAgIDogIiIsCisgIHNwb25zb3JfdXJsICAgOiAiIiwKKyAgbGljZW5zZSAgICAgICA6ICJodG1sQXJlYSIKK307CisKK2Z1bmN0aW9uIEdlY2tvKGVkaXRvcikgeworICB0aGlzLmVkaXRvciA9IGVkaXRvcjsgIAorICBlZGl0b3IuR2Vja28gPSB0aGlzOworfQorCisvKiogQWxsb3cgR2Vja28gdG8gaGFuZGxlIHNvbWUga2V5IGV2ZW50cyBpbiBhIHNwZWNpYWwgd2F5LgorICovCitHZWNrby5wcm90b3R5cGUub25LZXlQcmVzcyA9IGZ1bmN0aW9uKGV2KQoreworICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisgIHZhciBzID0gZWRpdG9yLmdldFNlbGVjdGlvbigpOworICAvLyBIYW5kbGUgc2hvcnRjdXRzCisgIGlmKGVkaXRvci5pc1Nob3J0Q3V0KGV2KSkKKyAgeworICAgIHN3aXRjaChlZGl0b3IuZ2V0S2V5KGV2KS50b0xvd2VyQ2FzZSgpKQorICAgIHsKKyAgICAgIGNhc2UgJ3onOgorICAgICAgeworICAgICAgICBpZihlZGl0b3IuX3VuTGluayAmJiBlZGl0b3IuX3VubGlua09uVW5kbykKKyAgICAgICAgeworICAgICAgICAgIFhpbmhhLl9zdG9wRXZlbnQoZXYpOworICAgICAgICAgIGVkaXRvci5fdW5MaW5rKCk7CisgICAgICAgICAgZWRpdG9yLnVwZGF0ZVRvb2xiYXIoKTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgICAKKyAgICAgIGNhc2UgJ2EnOgorICAgICAgeworICAgICAgICAvLyBLRVkgc2VsZWN0IGFsbAorICAgICAgICBzZWwgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgICAgICAgcmFuZ2UgPSBlZGl0b3IuY3JlYXRlUmFuZ2UoKTsKKyAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvci5fZG9jLmJvZHkpOworICAgICAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpOworICAgICAgICBYaW5oYS5fc3RvcEV2ZW50KGV2KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICAgIAorICAgICAgY2FzZSAndic6CisgICAgICB7CisgICAgICAgIC8vIElmIHdlIGFyZSBub3QgdXNpbmcgaHRtbGFyZWFQYXN0ZSwgZG9uJ3QgbGV0IFhpbmhhIHRyeSBhbmQgYmUgZmFuY3kgYnV0IGxldCB0aGUgCisgICAgICAgIC8vIGV2ZW50IGJlIGhhbmRsZWQgbm9ybWFsbHkgYnkgdGhlIGJyb3dzZXIgKGRvbid0IHN0b3BFdmVudCBpdCkKKyAgICAgICAgaWYoIWVkaXRvci5jb25maWcuaHRtbGFyZWFQYXN0ZSkKKyAgICAgICAgeyAgICAgICAgICAKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIAorICAvLyBIYW5kbGUgbm9ybWFsIGNoYXJhY3RlcnMKKyAgc3dpdGNoKGVkaXRvci5nZXRLZXkoZXYpKQorICB7CisgICAgLy8gU3BhY2UsIHNlZSBpZiB0aGUgdGV4dCBqdXN0IHR5cGVkIGxvb2tzIGxpa2UgYSBVUkwsIG9yIGVtYWlsIGFkZHJlc3MKKyAgICAvLyBhbmQgbGluayBpdCBhcHByb3ByaWF0bHkKKyAgICBjYXNlICcgJzoKKyAgICB7ICAgICAgCisgICAgICB2YXIgYXV0b1dyYXAgPSBmdW5jdGlvbiAodGV4dE5vZGUsIHRhZykKKyAgICAgIHsKKyAgICAgICAgdmFyIHJpZ2h0VGV4dCA9IHRleHROb2RlLm5leHRTaWJsaW5nOworICAgICAgICBpZiAoIHR5cGVvZiB0YWcgPT0gJ3N0cmluZycpCisgICAgICAgIHsKKyAgICAgICAgICB0YWcgPSBlZGl0b3IuX2RvYy5jcmVhdGVFbGVtZW50KHRhZyk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGEgPSB0ZXh0Tm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0YWcsIHJpZ2h0VGV4dCk7CisgICAgICAgIFhpbmhhLnJlbW92ZUZyb21QYXJlbnQodGV4dE5vZGUpOworICAgICAgICBhLmFwcGVuZENoaWxkKHRleHROb2RlKTsKKyAgICAgICAgcmlnaHRUZXh0LmRhdGEgPSAnICcgKyByaWdodFRleHQuZGF0YTsKKyAgICAKKyAgICAgICAgcy5jb2xsYXBzZShyaWdodFRleHQsIDEpOworICAgIAorICAgICAgICBlZGl0b3IuX3VuTGluayA9IGZ1bmN0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgIHZhciB0ID0gYS5maXJzdENoaWxkOworICAgICAgICAgIGEucmVtb3ZlQ2hpbGQodCk7CisgICAgICAgICAgYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LCBhKTsKKyAgICAgICAgICBYaW5oYS5yZW1vdmVGcm9tUGFyZW50KGEpOworICAgICAgICAgIGVkaXRvci5fdW5MaW5rID0gbnVsbDsKKyAgICAgICAgICBlZGl0b3IuX3VubGlua09uVW5kbyA9IGZhbHNlOworICAgICAgICB9OworICAgICAgICBlZGl0b3IuX3VubGlua09uVW5kbyA9IHRydWU7CisgICAgCisgICAgICAgIHJldHVybiBhOworICAgICAgfTsKKworICAgICAgaWYgKCBlZGl0b3IuY29uZmlnLmNvbnZlcnRVcmxzVG9MaW5rcyAmJiBzICYmIHMuaXNDb2xsYXBzZWQgJiYgcy5hbmNob3JOb2RlLm5vZGVUeXBlID09IDMgJiYgcy5hbmNob3JOb2RlLmRhdGEubGVuZ3RoID4gMyAmJiBzLmFuY2hvck5vZGUuZGF0YS5pbmRleE9mKCcuJykgPj0gMCApCisgICAgICB7CisgICAgICAgIHZhciBtaWRTdGFydCA9IHMuYW5jaG9yTm9kZS5kYXRhLnN1YnN0cmluZygwLHMuYW5jaG9yT2Zmc2V0KS5zZWFyY2goL1xTezQsfSQvKTsKKyAgICAgICAgaWYgKCBtaWRTdGFydCA9PSAtMSApCisgICAgICAgIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggZWRpdG9yLl9nZXRGaXJzdEFuY2VzdG9yKHMsICdhJykgKQorICAgICAgICB7CisgICAgICAgICAgYnJlYWs7IC8vIGFscmVhZHkgaW4gYW4gYW5jaG9yCisgICAgICAgIH0KKworICAgICAgICB2YXIgbWF0Y2hEYXRhID0gcy5hbmNob3JOb2RlLmRhdGEuc3Vic3RyaW5nKDAscy5hbmNob3JPZmZzZXQpLnJlcGxhY2UoL14uKj8oXFMqKSQvLCAnJDEnKTsKKworICAgICAgICB2YXIgbUVtYWlsID0gbWF0Y2hEYXRhLm1hdGNoKFhpbmhhLlJFX2VtYWlsKTsKKyAgICAgICAgaWYgKCBtRW1haWwgKQorICAgICAgICB7CisgICAgICAgICAgdmFyIGxlZnRUZXh0RW1haWwgID0gcy5hbmNob3JOb2RlOworICAgICAgICAgIHZhciByaWdodFRleHRFbWFpbCA9IGxlZnRUZXh0RW1haWwuc3BsaXRUZXh0KHMuYW5jaG9yT2Zmc2V0KTsKKyAgICAgICAgICB2YXIgbWlkVGV4dEVtYWlsICAgPSBsZWZ0VGV4dEVtYWlsLnNwbGl0VGV4dChtaWRTdGFydCk7CisKKyAgICAgICAgICBhdXRvV3JhcChtaWRUZXh0RW1haWwsICdhJykuaHJlZiA9ICdtYWlsdG86JyArIG1FbWFpbFswXTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIFJFX2RhdGUgPSAvKFswLTldK1wuKSsvOyAvL2NvdWxkIGJlIGRhdGUgb3IgaXAgb3Igc29tZXRoaW5nIGVsc2UgLi4uCisgICAgICAgIFJFX2lwID0gLyg/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pLzsKKyAgICAgICAgdmFyIG1VcmwgPSBtYXRjaERhdGEubWF0Y2goWGluaGEuUkVfdXJsKTsKKyAgICAgICAgaWYgKCBtVXJsICkKKyAgICAgICAgeworICAgICAgICAgIGlmIChSRV9kYXRlLnRlc3QobWF0Y2hEYXRhKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBicmVhazsgLy9yYXk6IGRpc2FibGluZyBsaW5raW5nIG9mIElQIG51bWJlcnMgYmVjYXVzZSBvZiBnZW5lcmFsIGJ1Z2dpbmVzcyAoc2VlIFRpY2tldCAjMTA4NSkKKyAgICAgICAgICAgIC8qaWYgKCFSRV9pcC50ZXN0KG1hdGNoRGF0YSkpIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0qLworICAgICAgICAgIH0gCisgICAgICAgICAgdmFyIGxlZnRUZXh0VXJsICA9IHMuYW5jaG9yTm9kZTsKKyAgICAgICAgICB2YXIgcmlnaHRUZXh0VXJsID0gbGVmdFRleHRVcmwuc3BsaXRUZXh0KHMuYW5jaG9yT2Zmc2V0KTsKKyAgICAgICAgICB2YXIgbWlkVGV4dFVybCAgID0gbGVmdFRleHRVcmwuc3BsaXRUZXh0KG1pZFN0YXJ0KTsKKyAgICAgICAgICBhdXRvV3JhcChtaWRUZXh0VXJsLCAnYScpLmhyZWYgPSAobVVybFsxXSA/IG1VcmxbMV0gOiAnaHR0cDovLycpICsgbVVybFsyXTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBicmVhazsgICAgCisgIH0KKyAgCisgIC8vIEhhbmRsZSBzcGVjaWFsIGtleXMKKyAgc3dpdGNoICggZXYua2V5Q29kZSApCisgIHsgICAgCisvKiAgVGhpcyBpcyBub3cgaGFuZGxlZCBieSBhIHBsdWdpbiAgCisgICAgY2FzZSAxMzogLy8gRU5URVIKKworICAgIGJyZWFrOyovCisKKyAgICBjYXNlIDI3OiAvLyBFU0NBUEUKKyAgICB7CisgICAgICBpZiAoIGVkaXRvci5fdW5MaW5rICkKKyAgICAgIHsKKyAgICAgICAgZWRpdG9yLl91bkxpbmsoKTsKKyAgICAgICAgWGluaGEuX3N0b3BFdmVudChldik7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgYnJlYWs7CisgICAgCisgICAgY2FzZSA5OiAvLyBLRVkgdGFiCisgICAgeworICAgICAgLy8gTm90ZSB0aGF0IHRoZSBMaXN0T3BlcmF0aW9ucyBwbHVnaW4gd2lsbCBoYW5kbGUgdGFicyBpbiBsaXN0IGl0ZW1zIGFuZCBpbmRlbnQvb3V0ZGVudCB0aG9zZQorICAgICAgLy8gYXQgc29tZSBwb2ludCBUYWJsZU9wZXJhdGlvbnMgbWlnaHQgZG8gYWxzbworICAgICAgLy8gc28gdGhpcyBvbmx5IGhhcyB0byBoYW5kbGUgYSB0YWIvdW50YWIgaW4gdGV4dAorICAgICAgaWYoZWRpdG9yLmNvbmZpZy50YWJTcGFuQ2xhc3MpCisgICAgICB7CisgICAgICAgIGlmKCFldi5zaGlmdEtleSkKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgIC8vICB2LS0gQXZvaWQgbGNfcGFyc2Vfc3RyaW5ncy5waHAKKyAgICAgICAgICBlZGl0b3IuaW5zZXJ0SFRNTCgnPCcrJ3NwYW4gY2xhc3M9IicrZWRpdG9yLmNvbmZpZy50YWJTcGFuQ2xhc3MrJyI+JytlZGl0b3IuY29uZmlnLnRhYlNwYW5Db250ZW50cysnPC9zcGFuPicpOworICAgICAgICAgIHZhciBzID0gZWRpdG9yLmdldFNlbGVjdGlvbigpLmNvbGxhcHNlVG9FbmQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICB2YXIgZXhpc3RpbmdUYWIgPSBlZGl0b3IuZ2V0UGFyZW50RWxlbWVudCgpOworICAgICAgICAgIGlmKGV4aXN0aW5nVGFiICYmIGV4aXN0aW5nVGFiLmNsYXNzTmFtZS5tYXRjaChlZGl0b3IuY29uZmlnLnRhYlNwYW5DbGFzcykpCisgICAgICAgICAgeworICAgICAgICAgICAgdmFyIHMgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgICAgICBzLnJlbW92ZUFsbFJhbmdlcygpOworICAgICAgICAgICAgdmFyIHIgPSBlZGl0b3IuY3JlYXRlUmFuZ2UoKTsKKyAgICAgICAgICAgIHIuc2VsZWN0Tm9kZShleGlzdGluZ1RhYik7CisgICAgICAgICAgICBzLmFkZFJhbmdlKHIpOworICAgICAgICAgICAgcy5kZWxldGVGcm9tRG9jdW1lbnQoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIAorICAgICAgWGluaGEuX3N0b3BFdmVudChldik7CisgICAgICAKKyAgICB9CisgICAgYnJlYWs7CisgICAgCisgICAgY2FzZSA4OiAvLyBLRVkgYmFja3NwYWNlCisgICAgY2FzZSA0NjogLy8gS0VZIGRlbGV0ZQorICAgIHsKKyAgICAgIC8vIFdlIGhhbmRsZSB0aGUgbW96aWxsYSBiYWNrc3BhY2UgZGlyZWN0bHk/PworICAgICAgaWYgKCAhZXYuc2hpZnRLZXkgJiYgdGhpcy5oYW5kbGVCYWNrc3BhY2UoKSApCisgICAgICB7CisgICAgICAgIFhpbmhhLl9zdG9wRXZlbnQoZXYpOworICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICBkZWZhdWx0OgorICAgIHsKKyAgICAgICAgZWRpdG9yLl91bmxpbmtPblVuZG8gPSBmYWxzZTsKKworICAgICAgICAvLyBIYW5kbGUgdGhlICJhdXRvLWxpbmtpbmciLCBzcGVjaWZpY2FsbHkgdGhpcyBiaXQgb2YgY29kZSBzZXRzIHVwIGEgaGFuZGxlciBvbgorICAgICAgICAvLyBhbiBzZWxmLXRpdGxlZCBhbmNob3IgKGVnIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ29nby5jby5uei8iPnd3dy5nb2dvLmNvLm56PC9hPikKKyAgICAgICAgLy8gd2hlbiB0aGUgdGV4dCBjb250ZW50IGlzIGVkaXRlZCwgc3VjaCB0aGF0IGl0IHdpbGwgdXBkYXRlIHRoZSBocmVmIG9uIHRoZSBhbmNob3IKKyAgICAgICAgCisgICAgICAgIGlmICggcy5hbmNob3JOb2RlICYmIHMuYW5jaG9yTm9kZS5ub2RlVHlwZSA9PSAzICkKKyAgICAgICAgeworICAgICAgICAgIC8vIFNlZSBpZiB3ZSBtaWdodCBiZSBjaGFuZ2luZyBhIGxpbmsKKyAgICAgICAgICB2YXIgYSA9IGVkaXRvci5fZ2V0Rmlyc3RBbmNlc3RvcihzLCAnYScpOworICAgICAgICAgIC8vIEB0b2RvOiB3ZSBwcm9iYWJseSBuZWVkIGhlcmUgdG8gaW5mb3JtIHRoZSBzZXRUaW1lb3V0IGJlbG93IHRoYXQgd2Ugbm90IGNoYW5naW5nIGEgbGluayBhbmQgbm90IHN0YXJ0IGFub3RoZXIgc2V0VGltZW91dAorICAgICAgICAgIGlmICggIWEgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOyAvLyBub3QgYW4gYW5jaG9yCisgICAgICAgICAgfSAKKyAgICAgICAgICAKKyAgICAgICAgICBpZiAoICFhLl91cGRhdGVBbmNoVGltZW91dCApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBzLmFuY2hvck5vZGUuZGF0YS5tYXRjaChYaW5oYS5SRV9lbWFpbCkgJiYgYS5ocmVmLm1hdGNoKCdtYWlsdG86JyArIHMuYW5jaG9yTm9kZS5kYXRhLnRyaW0oKSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB2YXIgdGV4dE5vZGUgPSBzLmFuY2hvck5vZGU7CisgICAgICAgICAgICAgIHZhciBmbkFuY2hvciA9IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGEuaHJlZiA9ICdtYWlsdG86JyArIHRleHROb2RlLmRhdGEudHJpbSgpOworICAgICAgICAgICAgICAgIC8vIEBmaXhtZTogd2h5IHRoZSBoZWxsIGRvIGFub3RoZXIgdGltZW91dCBpcyBzdGFydGVkID8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgIFRoaXMgbGVhZCB0byBuZXZlciBlbmRpbmcgdGltZXIgaWYgd2UgZG9udCByZW1vdmUgdGhpcyBsaW5lCisgICAgICAgICAgICAgICAgLy8gICAgICAgICBCdXQgd2hlbiByZW1vdmVkLCB0aGUgZW1haWwgaXMgbm90IGNvcnJlY3RseSB1cGRhdGVkCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIHRvIGZpeCB0aGlzIHdlIHNob3VsZCBtYWtlIGZuQW5jaG9yIGNoZWNrIHRvIHNlZSBpZiB0ZXh0Tm9kZS5kYXRhIGhhcworICAgICAgICAgICAgICAgIC8vICAgc3RvcHBlZCBjaGFuZ2luZyBmb3Igc2F5IDUgc2Vjb25kcyBhbmQgaWYgc28gd2UgZG8gbm90IG1ha2UgdGhpcyBzZXRUaW1lb3V0IAorICAgICAgICAgICAgICAgIGEuX3VwZGF0ZUFuY2hUaW1lb3V0ID0gc2V0VGltZW91dChmbkFuY2hvciwgMjUwKTsKKyAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgYS5fdXBkYXRlQW5jaFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZuQW5jaG9yLCAxMDAwKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBtID0gcy5hbmNob3JOb2RlLmRhdGEubWF0Y2goWGluaGEuUkVfdXJsKTsKKworICAgICAgICAgICAgaWYgKCBtICYmIGEuaHJlZi5tYXRjaChuZXcgUmVnRXhwKCAnaHR0cChzKT86Ly8nICsgWGluaGEuZXNjYXBlU3RyaW5nRm9yUmVnRXhwKCBzLmFuY2hvck5vZGUuZGF0YS50cmltKCkgKSApICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB2YXIgdHh0Tm9kZSA9IHMuYW5jaG9yTm9kZTsKKyAgICAgICAgICAgICAgdmFyIGZuVXJsID0gZnVuY3Rpb24oKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzIG0gaXMgdW5kZWZpbmVkIGJlY2FzZSB0aGUgdXJsIGlzIG5vdCBhbiB1cmwgYW55bW9yZSAod2FzIHd3dy51cmwuY29tIGFuZCBiZWNvbWUgZm9yIGV4YW1wbGUgd3d3LnVybCkKKyAgICAgICAgICAgICAgICAvLyByYXk6IHNob3VsZG4ndCB0aGUgbGluayBiZSB1bi1saW5rZWQgdGhlbj8KKyAgICAgICAgICAgICAgICBtID0gdHh0Tm9kZS5kYXRhLm1hdGNoKFhpbmhhLlJFX3VybCk7CisgICAgICAgICAgICAgICAgaWYobSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBhLmhyZWYgPSAobVsxXSA/IG1bMV0gOiAnaHR0cDovLycpICsgbVsyXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gQGZpeG1lOiB3aHkgdGhlIGhlbGwgZG8gYW5vdGhlciB0aW1lb3V0IGlzIHN0YXJ0ZWQgPworICAgICAgICAgICAgICAgIC8vICAgICAgICAgVGhpcyBsZWFkIHRvIG5ldmVyIGVuZGluZyB0aW1lciBpZiB3ZSBkb250IHJlbW92ZSB0aGlzIGxpbmUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgIEJ1dCB3aGVuIHJlbW92ZWQsIHRoZSB1cmwgaXMgbm90IGNvcnJlY3RseSB1cGRhdGVkCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIHRvIGZpeCB0aGlzIHdlIHNob3VsZCBtYWtlIGZuVXJsIGNoZWNrIHRvIHNlZSBpZiB0ZXh0Tm9kZS5kYXRhIGhhcworICAgICAgICAgICAgICAgIC8vICAgc3RvcHBlZCBjaGFuZ2luZyBmb3Igc2F5IDUgc2Vjb25kcyBhbmQgaWYgc28gd2UgZG8gbm90IG1ha2UgdGhpcyBzZXRUaW1lb3V0CisgICAgICAgICAgICAgICAgYS5fdXBkYXRlQW5jaFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZuVXJsLCAyNTApOworICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICBhLl91cGRhdGVBbmNoVGltZW91dCA9IHNldFRpbWVvdXQoZm5VcmwsIDEwMDApOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gICAgICAgIAorICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgIH0KKyAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBmYWxzZTsgLy8gTGV0IG90aGVyIHBsdWdpbnMgZXRjIGNvbnRpbnVlIGZyb20gaGVyZS4KK30KKworLyoqIFdoZW4gYmFja3NwYWNlIGlzIGhpdCwgdGhlIEdlY2tvIG9uS2V5UHJlc3Mgd2lsbCBleGVjdXRlIHRoaXMgbWV0aG9kLgorICogIEkgZG9uJ3QgcmVtZW1iZXIgd2hhdCB0aGUgZXhhY3QgcHVycG9zZSBvZiB0aGlzIGlzIHRob3VnaCA6LSgKKyAqLworIAorR2Vja28ucHJvdG90eXBlLmhhbmRsZUJhY2tzcGFjZSA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworICBzZXRUaW1lb3V0KAorICAgIGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICB2YXIgc2VsICAgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7CisgICAgICB2YXIgcmFuZ2UgPSBlZGl0b3IuY3JlYXRlUmFuZ2Uoc2VsKTsKKyAgICAgIHZhciBTQyA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyOworICAgICAgdmFyIFNPID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7CisgICAgICB2YXIgRUMgPSByYW5nZS5lbmRDb250YWluZXI7CisgICAgICB2YXIgRU8gPSByYW5nZS5lbmRPZmZzZXQ7CisgICAgICB2YXIgbmV3ciA9IFNDLm5leHRTaWJsaW5nOworICAgICAgaWYgKCBTQy5ub2RlVHlwZSA9PSAzICkKKyAgICAgIHsKKyAgICAgICAgU0MgPSBTQy5wYXJlbnROb2RlOworICAgICAgfQorICAgICAgaWYgKCAhICggL1xTLy50ZXN0KFNDLnRhZ05hbWUpICkgKQorICAgICAgeworICAgICAgICB2YXIgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsKKyAgICAgICAgd2hpbGUgKCBTQy5maXJzdENoaWxkICkKKyAgICAgICAgeworICAgICAgICAgIHAuYXBwZW5kQ2hpbGQoU0MuZmlyc3RDaGlsZCk7CisgICAgICAgIH0KKyAgICAgICAgU0MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocCwgU0MpOworICAgICAgICBYaW5oYS5yZW1vdmVGcm9tUGFyZW50KFNDKTsKKyAgICAgICAgdmFyIHIgPSByYW5nZS5jbG9uZVJhbmdlKCk7CisgICAgICAgIHIuc2V0U3RhcnRCZWZvcmUobmV3cik7CisgICAgICAgIHIuc2V0RW5kQWZ0ZXIobmV3cik7CisgICAgICAgIHIuZXh0cmFjdENvbnRlbnRzKCk7CisgICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgICAgICAgc2VsLmFkZFJhbmdlKHIpOworICAgICAgfQorICAgIH0sCisgICAgMTApOworfTsKKworR2Vja28ucHJvdG90eXBlLmlud2FyZEh0bWwgPSBmdW5jdGlvbihodG1sKQoreworICAgLy8gTWlkYXMgdXNlcyBiIGFuZCBpIGludGVybmFsbHkgaW5zdGVhZCBvZiBzdHJvbmcgYW5kIGVtCisgICAvLyBYaW5oYSB3aWxsIHVzZSBzdHJvbmcgYW5kIGVtIGV4dGVybmFsbHkgKHNlZSBYaW5oYS5wcm90b3R5cGUub3V0d2FyZEh0bWwpICAgCisgICBodG1sID0gaHRtbC5yZXBsYWNlKC88KFwvPylzdHJvbmcoXHN8PnxcLykvaWcsICI8JDFiJDIiKTsKKyAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLzwoXC8/KWVtKFxzfD58XC8pL2lnLCAiPCQxaSQyIik7ICAgIAorICAgCisgICAvLyBCb3RoIElFIGFuZCBHZWNrbyB1c2Ugc3RyaWtlIGludGVybmFsbHkgaW5zdGVhZCBvZiBkZWwgKCM1MjMpCisgICAvLyBYaW5oYSB3aWxsIHByZXNlbnQgZGVsIGV4dGVybmFsbHkgKHNlZSBYaW5oYS5wcm90b3R5cGUub3V0d2FyZEh0bWwKKyAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLzwoXC8/KWRlbChcc3w+fFwvKS9pZywgIjwkMXN0cmlrZSQyIik7CisgICAKKyAgIHJldHVybiBodG1sOworfQorCitHZWNrby5wcm90b3R5cGUub3V0d2FyZEh0bWwgPSBmdW5jdGlvbihodG1sKQoreworICAvLyB0aWNrZXQ6NTYsIHRoZSAiZ3JlZXNlbW9ua2V5IiBwbHVnaW4gZm9yIEZpcmVmb3ggYWRkcyB0aGlzIGp1bmssCisgIC8vIHNvIHdlIHN0cmlwIGl0IG91dC4gIE9yaWdpbmFsIHN1Ym1pdHRlciBnYXZlIGEgcGx1Z2luLCBidXQgdGhhdCdzCisgIC8vIGEgYml0IG11Y2gganVzdCBmb3IgdGhpcyBJTUhPIC0gamFtZXMKKyAgaHRtbCA9IGh0bWwucmVwbGFjZSgvPHNjcmlwdFtcc10qc3JjW1xzXSo9W1xzXSpbJyJdY2hyb21lOlwvXC8uKj9bIiddPltcc10qPFwvc2NyaXB0Pi9pZywgJycpOworCisgIHJldHVybiBodG1sOworfQorCitHZWNrby5wcm90b3R5cGUub25FeGVjQ29tbWFuZCA9IGZ1bmN0aW9uKGNtZElELCBVSSwgcGFyYW0pCit7ICAgCisgIHRyeQorICB7CisgICAgLy8gdXNlQ1NTIGRlcHJlY2F0ZWQgJiByZXBsYWNlZCBieSBzdHlsZVdpdGhDU1MKKyAgICB0aGlzLmVkaXRvci5fZG9jLmV4ZWNDb21tYW5kKCd1c2VDU1MnLCBmYWxzZSwgdHJ1ZSk7IC8vc3dpdGNoIHVzZUNTUyBvZmYgKHRydWU9b2ZmKQorICAgIHRoaXMuZWRpdG9yLl9kb2MuZXhlY0NvbW1hbmQoJ3N0eWxlV2l0aENTUycsIGZhbHNlLCBmYWxzZSk7IC8vc3dpdGNoIHN0eWxlV2l0aENTUyBvZmYgICAgIAorICB9IGNhdGNoIChleCkge30KKyAgICAKKyAgc3dpdGNoKGNtZElEKQorICB7CisgICAgY2FzZSAncGFzdGUnOgorICAgIHsKKyAgICAgIGFsZXJ0KFhpbmhhLl9sYygiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIiwgJ0dlY2tvJykpOworICAgICAgcmV0dXJuIHRydWU7IC8vIEluZGljYXRlIHBhc3RlIGlzIGRvbmUsIHN0b3AgY29tbWFuZCBiZWluZyBpc3N1ZWQgdG8gYnJvd3NlciBieSBYaW5oYS5wcm90b3R5cGUuZXhlY0NvbW1hbmQKKyAgICB9CisgICAgYnJlYWs7CisgICAgY2FzZSAncmVtb3ZlZm9ybWF0JzoKKyAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgICAgIHZhciBzZWwgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7CisgICAgICB2YXIgc2VsU2F2ZSA9IGVkaXRvci5zYXZlU2VsZWN0aW9uKHNlbCk7CisgICAgICB2YXIgcmFuZ2UgPSBlZGl0b3IuY3JlYXRlUmFuZ2Uoc2VsKTsKKworICAgICAgdmFyIGVscyA9IGVkaXRvci5fZG9jLmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTsKKworICAgICAgdmFyIHN0YXJ0ID0gKCByYW5nZS5zdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PSAxICkgPyByYW5nZS5zdGFydENvbnRhaW5lciA6IHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGU7CisgICAgICB2YXIgaSwgZWw7CisgICAgICBpZiAoc2VsLmlzQ29sbGFwc2VkKSByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yLl9kb2MuYm9keSk7CisgICAgICAKKyAgICAgIGZvciAoaT0wOyBpPGVscy5sZW5ndGg7aSsrKQorICAgICAgeworICAgICAgICBlbCA9IGVsc1tpXTsKKyAgICAgICAgaWYgKCByYW5nZS5pc1BvaW50SW5SYW5nZShlbCwgMCkgfHwgKGVsc1tpXSA9PSBzdGFydCAmJiByYW5nZS5zdGFydE9mZnNldCA9PSAwKSkKKyAgICAgICAgeworICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgdGhpcy5lZGl0b3IuX2RvYy5leGVjQ29tbWFuZChjbWRJRCwgVUksIHBhcmFtKTsKKyAgICAgIGVkaXRvci5yZXN0b3JlU2VsZWN0aW9uKHNlbFNhdmUpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgYnJlYWs7CisgIH0KKyAgCisgIHJldHVybiBmYWxzZTsKK30KK0dlY2tvLnByb3RvdHlwZS5vbk1vdXNlRG93biA9IGZ1bmN0aW9uKGV2KQoreyAgIAorICAvLyBHZWNrbyBkb2Vzbid0IHNlbGVjdCBocidzIG9uIHNpbmdsZSBjbGljaworICBpZiAoZXYudGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAiaHIiKQorICB7CisgICAgdmFyIHNlbCA9IHRoaXMuZWRpdG9yLmdldFNlbGVjdGlvbigpOworICAgIHZhciByYW5nZSA9IHRoaXMuZWRpdG9yLmNyZWF0ZVJhbmdlKHNlbCk7CisgICAgcmFuZ2Uuc2VsZWN0Tm9kZShldi50YXJnZXQpOworICB9Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tLS0tLS0gSU1QTEVNRU5UQVRJT04gT0YgVEhFIEFCU1RSQUNUICJYaW5oYS5wcm90b3R5cGUiIE1FVEhPRFMgLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiogSW5zZXJ0IGEgbm9kZSBhdCB0aGUgY3VycmVudCBzZWxlY3Rpb24gcG9pbnQuIAorICogQHBhcmFtIHRvQmVJbnNlcnRlZCBEb21Ob2RlCisgKi8KKworWGluaGEucHJvdG90eXBlLmluc2VydE5vZGVBdFNlbGVjdGlvbiA9IGZ1bmN0aW9uKHRvQmVJbnNlcnRlZCkKK3sKKyAgaWYgKCB0b0JlSW5zZXJ0ZWQub3duZXJEb2N1bWVudCAhPSB0aGlzLl9kb2MgKSAvLyBhcyBvZiBGRjMsIEdlY2tvIGlzIHN0cmljdCByZWdhcmRpbmcgdGhlIG93bmVyRG9jdW1lbnQgb2YgYW4gZWxlbWVudAorICB7CisgICAgdHJ5IAorCXsKKwkJdG9CZUluc2VydGVkID0gdGhpcy5fZG9jLmFkb3B0Tm9kZSggdG9CZUluc2VydGVkICk7CisJfSBjYXRjaCAoZSkge30KKyAgfQorICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKKyAgdmFyIHJhbmdlID0gdGhpcy5jcmVhdGVSYW5nZShzZWwpOworICAvLyByZW1vdmUgdGhlIGN1cnJlbnQgc2VsZWN0aW9uCisgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTsKKyAgdmFyIG5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lcjsKKyAgdmFyIHBvcyA9IHJhbmdlLnN0YXJ0T2Zmc2V0OworICB2YXIgc2Vsbm9kZSA9IHRvQmVJbnNlcnRlZDsKKyAgCisgIHN3aXRjaCAoIG5vZGUubm9kZVR5cGUgKQorICB7CisgICAgY2FzZSAzOiAvLyBOb2RlLlRFWFRfTk9ERQorICAgICAgLy8gd2UgaGF2ZSB0byBzcGxpdCBpdCBhdCB0aGUgY2FyZXQgcG9zaXRpb24uCisgICAgICBpZiAoIHRvQmVJbnNlcnRlZC5ub2RlVHlwZSA9PSAzICkKKyAgICAgIHsKKyAgICAgICAgLy8gZG8gb3B0aW1pemVkIGluc2VydGlvbgorICAgICAgICBub2RlLmluc2VydERhdGEocG9zLCB0b0JlSW5zZXJ0ZWQuZGF0YSk7CisgICAgICAgIHJhbmdlID0gdGhpcy5jcmVhdGVSYW5nZSgpOworICAgICAgICByYW5nZS5zZXRFbmQobm9kZSwgcG9zICsgdG9CZUluc2VydGVkLmxlbmd0aCk7CisgICAgICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIHBvcyArIHRvQmVJbnNlcnRlZC5sZW5ndGgpOworICAgICAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBub2RlID0gbm9kZS5zcGxpdFRleHQocG9zKTsKKyAgICAgICAgaWYgKCB0b0JlSW5zZXJ0ZWQubm9kZVR5cGUgPT0gMTEgLyogTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFICovICkKKyAgICAgICAgeworICAgICAgICAgIHNlbG5vZGUgPSBzZWxub2RlLmZpcnN0Q2hpbGQ7CisgICAgICAgIH0KKyAgICAgICAgbm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0b0JlSW5zZXJ0ZWQsIG5vZGUpOworICAgICAgICB0aGlzLnNlbGVjdE5vZGVDb250ZW50cyhzZWxub2RlKTsKKyAgICAgICAgdGhpcy51cGRhdGVUb29sYmFyKCk7CisgICAgICB9CisgICAgYnJlYWs7CisgICAgY2FzZSAxOiAvLyBOb2RlLkVMRU1FTlRfTk9ERQorICAgICAgaWYgKCB0b0JlSW5zZXJ0ZWQubm9kZVR5cGUgPT0gMTEgLyogTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFICovICkKKyAgICAgIHsKKyAgICAgICAgc2Vsbm9kZSA9IHNlbG5vZGUuZmlyc3RDaGlsZDsKKyAgICAgIH0KKyAgICAgIG5vZGUuaW5zZXJ0QmVmb3JlKHRvQmVJbnNlcnRlZCwgbm9kZS5jaGlsZE5vZGVzW3Bvc10pOworICAgICAgdGhpcy5zZWxlY3ROb2RlQ29udGVudHMoc2Vsbm9kZSk7CisgICAgICB0aGlzLnVwZGF0ZVRvb2xiYXIoKTsKKyAgICBicmVhazsKKyAgfQorfTsKKyAgCisvKiogR2V0IHRoZSBwYXJlbnQgZWxlbWVudCBvZiB0aGUgc3VwcGxpZWQgb3IgY3VycmVudCBzZWxlY3Rpb24uIAorICogIEBwYXJhbSAgIHNlbCBvcHRpb25hbCBzZWxlY3Rpb24gYXMgcmV0dXJuZWQgYnkgZ2V0U2VsZWN0aW9uCisgKiAgQHJldHVybnMgRG9tTm9kZQorICovCisgCitYaW5oYS5wcm90b3R5cGUuZ2V0UGFyZW50RWxlbWVudCA9IGZ1bmN0aW9uKHNlbCkKK3sKKyAgaWYgKCB0eXBlb2Ygc2VsID09ICd1bmRlZmluZWQnICkKKyAgeworICAgIHNlbCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7CisgIH0KKyAgdmFyIHJhbmdlID0gdGhpcy5jcmVhdGVSYW5nZShzZWwpOworICB0cnkKKyAgeworICAgIHZhciBwID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7CisgICAgaWYgKCAhcmFuZ2UuY29sbGFwc2VkICYmIHJhbmdlLnN0YXJ0Q29udGFpbmVyID09IHJhbmdlLmVuZENvbnRhaW5lciAmJgorICAgICAgICByYW5nZS5zdGFydE9mZnNldCAtIHJhbmdlLmVuZE9mZnNldCA8PSAxICYmIHJhbmdlLnN0YXJ0Q29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSApCisgICAgeworICAgICAgcCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLmNoaWxkTm9kZXNbcmFuZ2Uuc3RhcnRPZmZzZXRdOworICAgIH0KKworICAgIHdoaWxlICggcC5ub2RlVHlwZSA9PSAzICkKKyAgICB7CisgICAgICBwID0gcC5wYXJlbnROb2RlOworICAgIH0KKyAgICByZXR1cm4gcDsKKyAgfQorICBjYXRjaCAoZXgpCisgIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorfTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBzZWxlY3RlZCBlbGVtZW50LCBpZiBhbnkuICBUaGF0IGlzLAorICogdGhlIGVsZW1lbnQgdGhhdCB5b3UgaGF2ZSBsYXN0IHNlbGVjdGVkIGluIHRoZSAicGF0aCIKKyAqIGF0IHRoZSBib3R0b20gb2YgdGhlIGVkaXRvciwgb3IgYSAiY29udHJvbCIgKGVnIGltYWdlKQorICoKKyAqIEByZXR1cm5zIG51bGwgfCBEb21Ob2RlCisgKi8KKworWGluaGEucHJvdG90eXBlLmFjdGl2ZUVsZW1lbnQgPSBmdW5jdGlvbihzZWwpCit7CisgIGlmICggKCBzZWwgPT09IG51bGwgKSB8fCB0aGlzLnNlbGVjdGlvbkVtcHR5KHNlbCkgKQorICB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICAvLyBGb3IgTW96aWxsYSB3ZSBqdXN0IHNlZSBpZiB0aGUgc2VsZWN0aW9uIGlzIG5vdCBjb2xsYXBzZWQgKHNvbWV0aGluZyBpcyBzZWxlY3RlZCkKKyAgLy8gYW5kIHRoYXQgdGhlIGFuY2hvciAoc3RhcnQgb2Ygc2VsZWN0aW9uKSBpcyBhbiBlbGVtZW50LiAgVGhpcyBtaWdodCBub3QgYmUgdG90YWxseQorICAvLyBjb3JyZWN0LCB3ZSBwb3NzaWJseSBzaG91bGQgZG8gYSBzaW1sYXIgY2hlY2sgdG8gSUU/CisgIGlmICggIXNlbC5pc0NvbGxhcHNlZCApCisgIHsgICAgICAKKyAgICBpZiAoIHNlbC5hbmNob3JOb2RlLmNoaWxkTm9kZXMubGVuZ3RoID4gc2VsLmFuY2hvck9mZnNldCAmJiBzZWwuYW5jaG9yTm9kZS5jaGlsZE5vZGVzW3NlbC5hbmNob3JPZmZzZXRdLm5vZGVUeXBlID09IDEgKQorICAgIHsKKyAgICAgIHJldHVybiBzZWwuYW5jaG9yTm9kZS5jaGlsZE5vZGVzW3NlbC5hbmNob3JPZmZzZXRdOworICAgIH0KKyAgICBlbHNlIGlmICggc2VsLmFuY2hvck5vZGUubm9kZVR5cGUgPT0gMSApCisgICAgeworICAgICAgcmV0dXJuIHNlbC5hbmNob3JOb2RlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcmV0dXJuIG51bGw7IC8vIHJldHVybiBzZWwuYW5jaG9yTm9kZS5wYXJlbnROb2RlOworICAgIH0KKyAgfQorICByZXR1cm4gbnVsbDsKK307CisKKy8qKiAKKyAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHNlbGVjdGlvbiBpcyBlbXB0eSAoY29sbGFwc2VkKS4KKyAqIEBwYXJhbSBzZWxlY3Rpb24gU2VsZWN0aW9uIG9iamVjdCBhcyByZXR1cm5lZCBieSBnZXRTZWxlY3Rpb24KKyAqIEByZXR1cm5zIHRydWV8ZmFsc2UKKyAqLworIAorWGluaGEucHJvdG90eXBlLnNlbGVjdGlvbkVtcHR5ID0gZnVuY3Rpb24oc2VsKQoreworICBpZiAoICFzZWwgKQorICB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBpZiAoIHR5cGVvZiBzZWwuaXNDb2xsYXBzZWQgIT0gJ3VuZGVmaW5lZCcgKQorICB7ICAgICAgCisgICAgcmV0dXJuIHNlbC5pc0NvbGxhcHNlZDsKKyAgfQorCisgIHJldHVybiB0cnVlOworfTsKKworLyoqIAorICogUmV0dXJucyBhIHJhbmdlIG9iamVjdCB0byBiZSBzdG9yZWQgCisgKiBhbmQgbGF0ZXIgcmVzdG9yZWQgd2l0aCBYaW5oYS5wcm90b3R5cGUucmVzdG9yZVNlbGVjdGlvbigpCisgKiAKKyAqIEByZXR1cm5zIFJhbmdlCisgKi8KK1hpbmhhLnByb3RvdHlwZS5zYXZlU2VsZWN0aW9uID0gZnVuY3Rpb24oKQoreworICByZXR1cm4gdGhpcy5jcmVhdGVSYW5nZSh0aGlzLmdldFNlbGVjdGlvbigpKS5jbG9uZVJhbmdlKCk7Cit9CisvKiogCisgKiBSZXN0b3JlcyBhIHNlbGVjdGlvbiBwcmV2aW91c2x5IHN0b3JlZAorICogQHBhcmFtIHNhdmVkU2VsZWN0aW9uIFJhbmdlIG9iamVjdCBhcyByZXR1cm5lZCBieSBYaW5oYS5wcm90b3R5cGUucmVzdG9yZVNlbGVjdGlvbigpCisgKi8KK1hpbmhhLnByb3RvdHlwZS5yZXN0b3JlU2VsZWN0aW9uID0gZnVuY3Rpb24oc2F2ZWRTZWxlY3Rpb24pCit7CisgIHRyeSAKKyAgeworICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKKyAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOworICBzZWwuYWRkUmFuZ2Uoc2F2ZWRTZWxlY3Rpb24pOworICB9CisgIGNhdGNoIChlKSB7fQorfQorLyoqCisgKiBTZWxlY3RzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gbm9kZS4gIElmIHRoZSBub2RlIGlzIGEgImNvbnRyb2wiIHR5cGUgZWxlbWVudCwgKGltYWdlLCBmb3JtIGlucHV0LCB0YWJsZSkKKyAqIHRoZSBub2RlIGl0c2VsZiBpcyBzZWxlY3RlZCBmb3IgbWFuaXB1bGF0aW9uLgorICoKKyAqIEBwYXJhbSBub2RlIERvbU5vZGUgCisgKiBAcGFyYW0gY29sbGFwc2VUb1N0YXJ0IEEgYm9vbGVhbiB0aGF0LCB3aGVuIHN1cHBsaWVkLCBzYXlzIHRvIGNvbGxhcHNlIHRoZSBzZWxlY3Rpb24uIFRydWUgY29sbGFwc2VzIHRvIHRoZSBzdGFydCwgYW5kIGZhbHNlIHRvIHRoZSBlbmQuCisgKi8KKyAKK1hpbmhhLnByb3RvdHlwZS5zZWxlY3ROb2RlQ29udGVudHMgPSBmdW5jdGlvbihub2RlLCBjb2xsYXBzZVRvU3RhcnQpCit7CisgIHRoaXMuZm9jdXNFZGl0b3IoKTsKKyAgdGhpcy5mb3JjZVJlZHJhdygpOworICB2YXIgcmFuZ2U7CisgIHZhciBjb2xsYXBzZWQgPSB0eXBlb2YgY29sbGFwc2VUb1N0YXJ0ID09ICJ1bmRlZmluZWQiID8gdHJ1ZSA6IGZhbHNlOworICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKKyAgcmFuZ2UgPSB0aGlzLl9kb2MuY3JlYXRlUmFuZ2UoKTsKKyAgaWYgKCAhbm9kZSApCisgIHsKKyAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOworICAgICByZXR1cm47CisgIH0KKyAgLy8gVGFibGVzIGFuZCBJbWFnZXMgZ2V0IHNlbGVjdGVkIGFzICJvYmplY3RzIiByYXRoZXIgdGhhbiB0aGUgdGV4dCBjb250ZW50cworICBpZiAoIGNvbGxhcHNlZCAmJiBub2RlLnRhZ05hbWUgJiYgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkubWF0Y2goL3RhYmxlfGltZ3xpbnB1dHx0ZXh0YXJlYXxzZWxlY3QvKSApCisgIHsKKyAgICByYW5nZS5zZWxlY3ROb2RlKG5vZGUpOworICB9CisgIGVsc2UKKyAgeworICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhub2RlKTsKKyAgfQorICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CisgIHNlbC5hZGRSYW5nZShyYW5nZSk7CisgIGlmICh0eXBlb2YgY29sbGFwc2VUb1N0YXJ0ICE9ICJ1bmRlZmluZWQiKQorICB7CisgICAgaWYgKGNvbGxhcHNlVG9TdGFydCkKKyAgICB7CisgICAgICBzZWwuY29sbGFwc2UocmFuZ2Uuc3RhcnRDb250YWluZXIsIHJhbmdlLnN0YXJ0T2Zmc2V0KTsKKyAgICB9IGVsc2UKKyAgICB7CisgICAgICBzZWwuY29sbGFwc2UocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpOworICAgIH0KKyAgfQorfTsKKyAgCisvKiogSW5zZXJ0IEhUTUwgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24sIGRlbGV0aW5nIHRoZSBzZWxlY3Rpb24gaWYgYW55LiAKKyAqICAKKyAqICBAcGFyYW0gaHRtbCBzdHJpbmcKKyAqLworIAorWGluaGEucHJvdG90eXBlLmluc2VydEhUTUwgPSBmdW5jdGlvbihodG1sKQoreworICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKKyAgdmFyIHJhbmdlID0gdGhpcy5jcmVhdGVSYW5nZShzZWwpOworICB0aGlzLmZvY3VzRWRpdG9yKCk7CisgIC8vIGNvbnN0cnVjdCBhIG5ldyBkb2N1bWVudCBmcmFnbWVudCB3aXRoIHRoZSBnaXZlbiBIVE1MCisgIHZhciBmcmFnbWVudCA9IHRoaXMuX2RvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgIHZhciBkaXYgPSB0aGlzLl9kb2MuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgIGRpdi5pbm5lckhUTUwgPSBodG1sOworICB3aGlsZSAoIGRpdi5maXJzdENoaWxkICkKKyAgeworICAgIC8vIHRoZSBmb2xsb3dpbmcgY2FsbCBhbHNvIHJlbW92ZXMgdGhlIG5vZGUgZnJvbSBkaXYKKyAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChkaXYuZmlyc3RDaGlsZCk7CisgIH0KKyAgLy8gdGhpcyBhbHNvIHJlbW92ZXMgdGhlIHNlbGVjdGlvbgorICB2YXIgbm9kZSA9IHRoaXMuaW5zZXJ0Tm9kZUF0U2VsZWN0aW9uKGZyYWdtZW50KTsKK307CisKKy8qKiBHZXQgdGhlIEhUTUwgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiAgSFRNTCByZXR1cm5lZCBoYXMgbm90IGJlZW4gcGFzc2VkIHRocm91Z2ggb3V0d2FyZEhUTUwuCisgKgorICogQHJldHVybnMgc3RyaW5nCisgKi8KKyAKK1hpbmhhLnByb3RvdHlwZS5nZXRTZWxlY3RlZEhUTUwgPSBmdW5jdGlvbigpCit7CisgIHZhciBzZWwgPSB0aGlzLmdldFNlbGVjdGlvbigpOworICBpZiAoc2VsLmlzQ29sbGFwc2VkKSByZXR1cm4gJyc7CisgIHZhciByYW5nZSA9IHRoaXMuY3JlYXRlUmFuZ2Uoc2VsKTsKKyAgcmV0dXJuIFhpbmhhLmdldEhUTUwocmFuZ2UuY2xvbmVDb250ZW50cygpLCBmYWxzZSwgdGhpcyk7Cit9OworICAKKworLyoqIEdldCBhIFNlbGVjdGlvbiBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiAgTm90ZSB0aGF0IHNlbGVjdGlvbiBvYmplY3RzIGFyZSBicm93c2VyIHNwZWNpZmljLgorICoKKyAqIEByZXR1cm5zIFNlbGVjdGlvbgorICovCisgCitYaW5oYS5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uID0gZnVuY3Rpb24oKQoreworICByZXR1cm4gdGhpcy5faWZyYW1lLmNvbnRlbnRXaW5kb3cuZ2V0U2VsZWN0aW9uKCk7Cit9OworICAKKy8qKiBDcmVhdGUgYSBSYW5nZSBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gc2VsZWN0aW9uLiAgTm90ZSB0aGF0IHJhbmdlIG9iamVjdHMgYXJlIGJyb3dzZXIgc3BlY2lmaWMuCisgKgorICogIEBwYXJhbSBzZWwgU2VsZWN0aW9uIG9iamVjdCAoc2VlIGdldFNlbGVjdGlvbikKKyAqICBAcmV0dXJucyBSYW5nZQorICovCisgCitYaW5oYS5wcm90b3R5cGUuY3JlYXRlUmFuZ2UgPSBmdW5jdGlvbihzZWwpCit7CisgIHRoaXMuYWN0aXZhdGVFZGl0b3IoKTsKKyAgaWYgKCB0eXBlb2Ygc2VsICE9ICJ1bmRlZmluZWQiICkKKyAgeworICAgIHRyeQorICAgIHsKKyAgICAgIHJldHVybiBzZWwuZ2V0UmFuZ2VBdCgwKTsKKyAgICB9CisgICAgY2F0Y2goZXgpCisgICAgeworICAgICAgcmV0dXJuIHRoaXMuX2RvYy5jcmVhdGVSYW5nZSgpOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4gdGhpcy5fZG9jLmNyZWF0ZVJhbmdlKCk7CisgIH0KK307CisKKy8qKiBEdWUgdG8gYnJvd3NlciBkaWZmZXJlbmNlcywgc29tZSBrZXlzIHdoaWNoIFhpbmhhIHByZWZlcnMgdG8gY2FsbCBhIGtleVByZXNzCisgKiAgIGRvIG5vdCBnZXQgYW4gYWN0dWFsIGtleXByZXNzIGV2ZW50LiAgVGhpcyBicm93c2VyIHNwZWNpZmljIGZ1bmN0aW9uIAorICogICBvdmVycmlkZGVuIGluIHRoZSBicm93c2VyJ3MgZW5naW5lIChlZyBtb2R1bGVzL1dlYktpdC9XZWJLaXQuanMpIGFzIHJlcXVpcmVkCisgKiAgIHRha2VzIGEga2V5ZG93biBldmVudCB0eXBlIGFuZCB0ZWxscyB1cyBpZiB3ZSBzaG91bGQgdHJlYXQgaXQgYXMgYSAKKyAqICAga2V5cHJlc3MgZXZlbnQgdHlwZS4KKyAqCisgKiAgVG8gYmUgY2xlYXIsIHRoZSBrZXlzIHdlIGFyZSBpbnRlcmVzdGVkIGhlcmUgYXJlCisgKiAgICAgICAgRXNjYXBlLCBUYWIsIEJhY2tzcGFjZSwgRGVsZXRlLCBFbnRlcgorICogICB0aGVzZSBhcmUgIm5vbiBwcmludGFibGUiIGNoYXJhY3RlcnMgd2hpY2ggd2Ugc3RpbGwgd2FudCB0byByZWdhcmQgZ2VuZXJhbGx5CisgKiAgIGFzIGEga2V5cHJlc3MuICAKKyAqIAorICogIElmIHRoZSBicm93c2VyIGRvZXMgbm90IHJlcG9ydCB0aGVzZSBhcyBhIGtleXByZXNzCisgKiAgICggaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9kNGUvcmF3LWZpbGUvdGlwL2tleS1ldmVudC10ZXN0Lmh0bWwgKQorICogICB0aGVuIHRoaXMgZnVuY3Rpb24gbXVzdCByZXR1cm4gdHJ1ZSBmb3Igc3VjaCBrZXlkb3duIGV2ZW50cyBhcyBpdCBpcworICogICBnaXZlbi4KKyAqIAorICogQHBhcmFtIEtleWJvYXJkRXZlbnQgd2l0aCBrZXlFdmVudC50eXBlID09IGtleWRvd24KKyAqIEByZXR1cm4gYm9vbGVhbgorICovCisKK1hpbmhhLnByb3RvdHlwZS5pc0tleURvd25UaGF0U2hvdWxkR2V0QnV0RG9lc05vdEdldEFLZXlQcmVzc0V2ZW50ID0gZnVuY3Rpb24oa2V5RXZlbnQpCit7CisgIC8vIERvbSAzCisgIGlmKHR5cGVvZiBrZXlFdmVudC5rZXkgIT0gJ3VuZGVmaW5lZCcpCisgIHsKKyAgICAvLyBGb3VuZCB1c2luZyBJRTExICh3aGljaCB1c2VzIEdlY2tvKQorICAgIC8vICAgdGhpcyBzZWVtcyB0byBiZSBhIHJlYXNvbmFibGUgd2F5IHRvIGRpc3Rpbmd1aXNoCisgICAgLy8gICBiZXR3ZWVuIElFMTEgYW5kIG90aGVyIEdlY2tvIGJyb3dzZXJzIHdoaWNoIGRvIAorICAgIC8vICAgbm90IHByb3ZpZGUgdGhlICJPbGQgRE9NMyIgLmNoYXIgcHJvcGVydHkKKyAgICBpZih0eXBlb2Yga2V5RXZlbnQuY2hhciAhPSAndW5kZWZpbmVkJykKKyAgICB7CisgICAgICBpZih0eXBlb2YgWGluaGEuRE9NM19JRTExX0tleURvd25LZXlQcmVzc19SRSA9PSAndW5kZWZpbmVkJykKKyAgICAgIHsKKyAgICAgICAgLy8gSSBkb24ndCBrbm93IGlmIHByZS1kZWZpbmluZyB0aGlzIGlzIHJlYWxseSBmYXN0ZXIgaW4gdGhlIG1vZGVybiB3b3JsZCBvZgorICAgICAgICAvLyAgSmF2YXNjcmlwdCBKSVQgY29tcGlsaW5nLCBidXQgaXQgZG9lcyBubyBoYXJtCisgICAgICAgIFhpbmhhLkRPTTNfSUUxMV9LZXlEb3duS2V5UHJlc3NfUkUgPSAvXihUYWJ8QmFja3NwYWNlfERlbCkvOworICAgICAgfQorICAgICAgCisgICAgICBpZihYaW5oYS5ET00zX0lFMTFfS2V5RG93bktleVByZXNzX1JFLnRlc3Qoa2V5RXZlbnQua2V5KSkKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIEZpcmVmb3ggcmVwb3J0cyBldmVyeXRoaW5nIHdlIG5lZWQgYXMgYSBrZXlwcmVzcworICAgIC8vIGNvcnJlY3RseSAoaW4gdGVybXMgb2YgWGluaGEpCisgIH0KKyAgLy8gTGVnYWN5CisgIGVsc2UKKyAgeworICAgIC8vIEV2ZW4gdmVyeSBvbGQgZmlyZWZveCByZXBvcnRzIGV2ZXJ5dGhpbmcgd2UgbmVlZCBhcyBhIGtleXByZXNzCisgICAgLy8gY29ycmVjdGx5IChpbiB0ZXJtcyBvZiBYaW5oYSkKKyAgfQorfTsKKworLyoqIFJldHVybiB0aGUgY2hhcmFjdGVyIChhcyBhIHN0cmluZykgb2YgYSBrZXlFdmVudCAgLSBpZSwgcHJlc3MgdGhlICdhJyBrZXkgYW5kCisgKiAgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gJ2EnLCBwcmVzcyBTSElGVC1hIGFuZCBpdCB3aWxsIHJldHVybiAnQScuCisgKiAKKyAqICBAcGFyYW0gICBrZXlFdmVudAorICogIEByZXR1cm5zIHN0cmluZworICovCisKK1hpbmhhLnByb3RvdHlwZS5nZXRLZXkgPSBmdW5jdGlvbihrZXlFdmVudCkKK3sgCisgIC8vIERPTTMgS2V5IGlzIGVhc3kgKGlzaCkKKyAgaWYodHlwZW9mIGtleUV2ZW50LmtleSAhPSAndW5kZWZpbmVkJyAmJiBrZXlFdmVudC5rZXkubGVuZ3RoID4gMCkKKyAgeworICAgIHN3aXRjaChrZXlFdmVudC5rZXkpCisgICAgeworICAgICAgY2FzZSAnVW5pZGVudGlmaWVkJzoKKyAgICAgICAgLy8gU29tZSBvbGQgR2Vja28gdmVyc2lvbiByZXBvcnRzIFNoaWZ0LVRhYiBhcyBVbmlkZW50aWZpZWQKKyAgICAgICAgaWYodHlwZW9mIGtleUV2ZW50LmtleUNvZGUgIT0gJ3VuZGVmaW5lZCcgJiYga2V5RXZlbnQua2V5Q29kZSA9PSA5KSByZXR1cm4gJ1RhYic7CisgICAgICAgIAorICAgICAgICAvLyBPdGhlcndpc2Ugbm90IGtub3cKKyAgICAgICAgcmV0dXJuICcnOworICAgICAgICAKKyAgICAgIGNhc2UgJ1NwYWNlYmFyJzogLy8gRkY8MzcKKyAgICAgICAgcmV0dXJuICcgJzsgCisgICAgfQorICAgIAorICAgIHJldHVybiBrZXlFdmVudC5rZXk7CisgIH0KKyAgLy8gSWYgY2hhckNvZGUgaXMgc3BlY2lmaWVkLCB0aGF0J3Mgd2hhdCB3ZSB3YW50CisgIGVsc2UgaWYoa2V5RXZlbnQuY2hhckNvZGUpCisgIHsKKyAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShrZXlFdmVudC5jaGFyQ29kZSk7CisgIH0KKyAgLy8gU2FmYXJpIGRvZXMgbm90IHNldCBjaGFyQ29kZSBpZiBDVFJMIGlzIHByZXNzZWQKKyAgLy8gIGJ1dCBkb2VzIHNldCBrZXlDb2RlIHRvIHRoZSBrZXksIGl0IGFsc28gc2V0cyBrZXlDb2RlCisgIC8vICBmb3IgdGhlIGFjdHVhbCBwcmVzc2luZyBvZiBjdHJsLCBza2lwIHRoYXQKKyAgLy8gIHRoZSBrZXlDb2RlIGluIFNhZmFyaSBzaSB0aGUgdXBwZXJjYXNlIGNoYXJhY3RlcidzIGNvZGUgCisgIC8vICBmb3IgdGhhdCBrZXksIHNvIGlmIHNoaWZ0IGlzIG5vdCBwcmVzc2VkLCBsb3dlcmNhc2UgaXQKKyAgZWxzZSBpZihrZXlFdmVudC5jdHJsS2V5ICYmIGtleUV2ZW50LmtleUNvZGUgIT0gMTcpCisgIHsKKyAgICBpZihrZXlFdmVudC5zaGlmdEtleSkKKyAgICB7CisgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShrZXlFdmVudC5rZXlDb2RlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGtleUV2ZW50LmtleUNvZGUpLnRvTG93ZXJDYXNlKCk7CisgICAgfQorICB9CisgIAorICAvLyBPaywgZ2l2ZSB1cCwgbm8gaWRlYSEKKyAgcmV0dXJuICcnOworfQorCisvKiogUmV0dXJuIHRoZSBIVE1MIHN0cmluZyBvZiB0aGUgZ2l2ZW4gRWxlbWVudCwgaW5jbHVkaW5nIHRoZSBFbGVtZW50LgorICogCisgKiBAcGFyYW0gZWxlbWVudCBIVE1MIEVsZW1lbnQgRG9tTm9kZQorICogQHJldHVybnMgc3RyaW5nCisgKi8KKyAKK1hpbmhhLmdldE91dGVySFRNTCA9IGZ1bmN0aW9uKGVsZW1lbnQpCit7CisgIHJldHVybiAobmV3IFhNTFNlcmlhbGl6ZXIoKSkuc2VyaWFsaXplVG9TdHJpbmcoZWxlbWVudCk7Cit9OworCisvL0NvbnRyb2wgY2hhcmFjdGVyIGZvciByZXRhaW5pbmcgZWRpdCBsb2NhdGlvbiB3aGVuIHN3aXRjaGluZyBtb2RlcworWGluaGEuY2MgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDgyODYpOyAKKworWGluaGEucHJvdG90eXBlLnNldENDID0gZnVuY3Rpb24gKCB0YXJnZXQgKQoreworICB2YXIgY2MgPSBYaW5oYS5jYzsKKyAgdHJ5CisgIHsKKyAgICBpZiAoIHRhcmdldCA9PSAidGV4dGFyZWEiICkKKyAgICB7CisgICAgICB2YXIgdGEgPSB0aGlzLl90ZXh0QXJlYTsKKyAgICAgIHZhciBpbmRleCA9IHRhLnNlbGVjdGlvblN0YXJ0OworICAgICAgdmFyIGJlZm9yZSA9IHRhLnZhbHVlLnN1YnN0cmluZyggMCwgaW5kZXggKQorICAgICAgdmFyIGFmdGVyID0gdGEudmFsdWUuc3Vic3RyaW5nKCBpbmRleCwgdGEudmFsdWUubGVuZ3RoICk7CisKKyAgICAgIGlmICggYWZ0ZXIubWF0Y2goL15bXjxdKj4vKSApIC8vIG1ha2Ugc3VyZSBjdXJzb3IgaXMgaW4gYW4gZWRpdGFibGUgYXJlYSAob3V0c2lkZSB0YWdzLCBzY3JpcHQgYmxvY2tzLCBlbnRpdGllcywgYW5kIGluc2lkZSB0aGUgYm9keSkKKyAgICAgIHsKKyAgICAgICAgdmFyIHRhZ0VuZCA9IGFmdGVyLmluZGV4T2YoIj4iKSArIDE7CisgICAgICAgIHRhLnZhbHVlID0gYmVmb3JlICsgYWZ0ZXIuc3Vic3RyaW5nKCAwLCB0YWdFbmQgKSArIGNjICsgYWZ0ZXIuc3Vic3RyaW5nKCB0YWdFbmQsIGFmdGVyLmxlbmd0aCApOworICAgICAgfQorICAgICAgZWxzZSB0YS52YWx1ZSA9IGJlZm9yZSArIGNjICsgYWZ0ZXI7CisgICAgICB0YS52YWx1ZSA9IHRhLnZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCAoJygmW14nK2NjKyc7XSo/KSgnK2NjKycpKFteJytjYysnXSo/OyknKSwgIiQxJDMkMiIpOworICAgICAgdGEudmFsdWUgPSB0YS52YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAgKCcoPHNjcmlwdFtePl0qPlteJytjYysnXSo/KSgnK2NjKycpKFteJytjYysnXSo/PFwvc2NyaXB0PiknKSwgIiQxJDMkMiIpOworICAgICAgdGEudmFsdWUgPSB0YS52YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAgKCdeKFteJytjYysnXSopKCcrY2MrJykoW14nK2NjKyddKjxib2R5W14+XSo+KSguKj8pJyksICIkMSQzJDIkNCIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgdmFyIHNlbCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7CisgICAgICBzZWwuZ2V0UmFuZ2VBdCgwKS5pbnNlcnROb2RlKCB0aGlzLl9kb2MuY3JlYXRlVGV4dE5vZGUoIGNjICkgKTsKKyAgICB9CisgIH0gY2F0Y2ggKGUpIHt9Cit9OworCitYaW5oYS5wcm90b3R5cGUuZmluZENDID0gZnVuY3Rpb24gKCB0YXJnZXQgKQoreworICBpZiAoIHRhcmdldCA9PSAndGV4dGFyZWEnICkKKyAgeworICB2YXIgdGEgPSB0aGlzLl90ZXh0QXJlYTsKKyAgdmFyIHBvcyA9IHRhLnZhbHVlLmluZGV4T2YoIFhpbmhhLmNjICk7CisgIGlmICggcG9zID09IC0xICkgcmV0dXJuOworICB2YXIgZW5kID0gcG9zICsgWGluaGEuY2MubGVuZ3RoOworICB2YXIgYmVmb3JlID0gIHRhLnZhbHVlLnN1YnN0cmluZyggMCwgcG9zICk7CisgIHZhciBhZnRlciA9IHRhLnZhbHVlLnN1YnN0cmluZyggZW5kLCB0YS52YWx1ZS5sZW5ndGggKTsKKyAgdGEudmFsdWUgPSBiZWZvcmUgOworCisgIHRhLnNjcm9sbFRvcCA9IHRhLnNjcm9sbEhlaWdodDsKKyAgdmFyIHNjcm9sbFBvcyA9IHRhLnNjcm9sbFRvcDsKKyAgCisgIHRhLnZhbHVlICs9IGFmdGVyOworICB0YS5zZXRTZWxlY3Rpb25SYW5nZShwb3MscG9zKTsKKworICB0YS5mb2N1cygpOworICAKKyAgdGEuc2Nyb2xsVG9wID0gc2Nyb2xsUG9zOworCisgIH0KKyAgZWxzZQorICB7CisgICAgdHJ5CisgICAgeworICAgICAgdmFyIGRvYyA9IHRoaXMuX2RvYzsgCisgICAgICBkb2MuYm9keS5pbm5lckhUTUwgPSBkb2MuYm9keS5pbm5lckhUTUwucmVwbGFjZShuZXcgUmVnRXhwKFhpbmhhLmNjKSwnPHNwYW4gaWQ9IlhpbmhhRWRpdGluZ1Bvc3Rpb24iPjwvc3Bhbj4nKTsKKyAgICAgIHZhciBwb3NFbCA9IGRvYy5nZXRFbGVtZW50QnlJZCgnWGluaGFFZGl0aW5nUG9zdGlvbicpOworICAgICAgdGhpcy5zZWxlY3ROb2RlQ29udGVudHMocG9zRWwpOworICAgICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQocG9zRWwpOworICAgICAgcG9zRWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChwb3NFbCk7CisKKyAgICAgIHRoaXMuX2lmcmFtZS5jb250ZW50V2luZG93LmZvY3VzKCk7CisgICAgfSBjYXRjaCAoZSkge30KKyAgfQorfTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0gRVhURU5EIFNPTUUgU1RBTkRBUkQgIlhpbmhhLnByb3RvdHlwZSIgTUVUSE9EUyAtLS0tLS0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworWGluaGEucHJvdG90eXBlLl9zdGFuZGFyZFRvZ2dsZUJvcmRlcnMgPSBYaW5oYS5wcm90b3R5cGUuX3RvZ2dsZUJvcmRlcnM7CitYaW5oYS5wcm90b3R5cGUuX3RvZ2dsZUJvcmRlcnMgPSBmdW5jdGlvbigpCit7CisgIHZhciByZXN1bHQgPSB0aGlzLl9zdGFuZGFyZFRvZ2dsZUJvcmRlcnMoKTsKKyAgCisgIC8vIGZsYXNoaW5nIHRoZSBkaXNwbGF5IGZvcmNlcyBtb3ogdG8gbGlzdGVuIChKQjoxOC0wNC0yMDA1KSAtICMxMDIKKyAgdmFyIHRhYmxlcyA9IHRoaXMuX2RvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnVEFCTEUnKTsKKyAgZm9yKHZhciBpID0gMDsgaSA8IHRhYmxlcy5sZW5ndGg7IGkrKykKKyAgeworICAgIHRhYmxlc1tpXS5zdHlsZS5kaXNwbGF5PSJub25lIjsKKyAgICB0YWJsZXNbaV0uc3R5bGUuZGlzcGxheT0idGFibGUiOworICB9CisgIAorICByZXR1cm4gcmVzdWx0OworfTsKKworLyoqIFJldHVybiB0aGUgZG9jdHlwZSBvZiBhIGRvY3VtZW50LCBpZiBzZXQKKyAqIAorICogQHBhcmFtIGRvYyBET00gZWxlbWVudCBkb2N1bWVudAorICogQHJldHVybnMgc3RyaW5nIHRoZSBhY3R1YWwgZG9jdHlwZQorICovCitYaW5oYS5nZXREb2N0eXBlID0gZnVuY3Rpb24gKGRvYykKK3sKKyAgdmFyIGQgPSAnJzsKKyAgaWYgKGRvYy5kb2N0eXBlKQorICB7CisgICAgZCArPSAnPCFET0NUWVBFICcgKyBkb2MuZG9jdHlwZS5uYW1lICsgIiBQVUJMSUMgIjsKKyAgICBkICs9ICBkb2MuZG9jdHlwZS5wdWJsaWNJZCA/ICciJyArIGRvYy5kb2N0eXBlLnB1YmxpY0lkICsgJyInIDogJyc7ICAKKyAgICBkICs9ICBkb2MuZG9jdHlwZS5zeXN0ZW1JZCA/ICcgIicrIGRvYy5kb2N0eXBlLnN5c3RlbUlkICsgJyInIDogJyc7IAorICAgIGQgKz0gIj4iOworICB9CisgIHJldHVybiBkOworfTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvR2Vja28vbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9HZWNrby9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM2NDA0NAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvR2Vja28vbGFuZy9sY19iYXNlLmpzCkBAIC0wLDAgKzEsMjUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLworLy8gTEFORzogImVuIiwgRU5DT0RJTkc6IFVURi04CisvLyBBdXRob3I6IFRyYW5zbGF0b3ItTmFtZSwgPGVtYWlsQGV4YW1wbGUuY29tPgorLy8KKy8vIExhc3QgcmV2aXNpb246IDIwMTgtMDQtMTIKKy8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KKy8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyAoUGxlYXNlLCByZW1vdmUgaW5mb3JtYXRpb24gYmVsb3cpCisvLyBGT1IgVFJBTlNMQVRPUlM6CisvLworLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCisvLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCisvLworLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7CisvLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50CisvLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCisKK3sKKyAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0dlY2tvL3BhcmFIYW5kbGVyQmVzdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvR2Vja28vcGFyYUhhbmRsZXJCZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOGM1MTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0dlY2tvL3BhcmFIYW5kbGVyQmVzdC5qcwpAQCAtMCwwICsxLDkxMSBAQAorLy8gdGFicyAyCisKKy8qKgorKiBAZmlsZW92ZXJ2aWV3IEJ5IEFkYW0gV3JpZ2h0LCBmb3IgVGhlIFVuaXZlcnNpdHkgb2YgV2VzdGVybiBBdXN0cmFsaWEKKyoKKyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgWGluaGEgaXRzZWxmLgorKiBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisqCisqIEhlYXZpbHkgbW9kaWZpZWQgYnkgWWVybW8gTGFtZXJzIG9mIERUTGluaywgTExDLCBDb2xsZWdlIFBhcmssIE1kLiwgVVNBLgorKiBGb3IgbW9yZSBpbmZvIHNlZSBodHRwOi8vd3d3LmFyZWFlZGl0LmNvbQorKi8KKworLyoqCisqIHBsdWdpbiBJbmZvCisqLworCitFbnRlclBhcmFncmFwaHMuX3BsdWdpbkluZm8gPQoreworICBuYW1lICAgICAgICAgIDogIkVudGVyUGFyYWdyYXBocyIsCisgIHZlcnNpb24gICAgICAgOiAiMS4wIiwKKyAgZGV2ZWxvcGVyICAgICA6ICJBZGFtIFdyaWdodCIsCisgIGRldmVsb3Blcl91cmwgOiAiaHR0cDovL3d3dy5oaXBpa2F0Lm9yZy8iLAorICBzcG9uc29yICAgICAgIDogIlRoZSBVbml2ZXJzaXR5IG9mIFdlc3Rlcm4gQXVzdHJhbGlhIiwKKyAgc3BvbnNvcl91cmwgICA6ICJodHRwOi8vd3d3LnV3YS5lZHUuYXUvIiwKKyAgbGljZW5zZSAgICAgICA6ICJodG1sQXJlYSIKK307CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyAiY29uc3RhbnRzIgorCisvKioKKyogV2hpdGVzcGFjZSBSZWdleAorKi8KKworRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5fd2hpdGVTcGFjZSA9IC9eXHMqJC87CisKKy8qKgorKiBUaGUgcHJhZ21hdGljIGxpc3Qgb2Ygd2hpY2ggZWxlbWVudHMgYSBwYXJhZ3JhcGggbWF5IG5vdCBjb250YWluCisqLworCitFbnRlclBhcmFncmFwaHMucHJvdG90eXBlLl9wRXhjbHVzaW9ucyA9IC9eKGFkZHJlc3N8YmxvY2txdW90ZXxib2R5fGRkfGRpdnxkbHxkdHxmaWVsZHNldHxmb3JtfGgxfGgyfGgzfGg0fGg1fGg2fGhyfGxpfG5vc2NyaXB0fG9sfHB8cHJlfHRhYmxlfHVsKSQvaTsKKworLyoqCisqIGVsZW1lbnRzIHdoaWNoIG1heSBjb250YWluIGEgcGFyYWdyYXBoCisqLworCitFbnRlclBhcmFncmFwaHMucHJvdG90eXBlLl9wQ29udGFpbmVycyA9IC9eKGJvZHl8ZGVsfGRpdnxmaWVsZHNldHxmb3JtfGluc3xtYXB8bm9zY3JpcHR8b2JqZWN0fHRkfHRoKSQvaTsKKworLyoqCisqIEVsZW1lbnRzIHdoaWNoIG1heSBub3QgY29udGFpbiBwYXJhZ3JhcGhzLCBhbmQgd291bGQgcHJlZmVyIGEgYnJlYWsgdG8gYmVpbmcgc3BsaXQKKyovCisKK0VudGVyUGFyYWdyYXBocy5wcm90b3R5cGUuX3BCcmVhayA9IC9eKGFkZHJlc3N8cHJlfGJsb2NrcXVvdGUpJC9pOworCisvKioKKyogRWxlbWVudHMgd2hpY2ggbWF5IG5vdCBjb250YWluIGNoaWxkcmVuCisqLworCitFbnRlclBhcmFncmFwaHMucHJvdG90eXBlLl9wZXJtRW1wdHkgPSAvXihhcmVhfGJhc2V8YmFzZWZvbnR8YnJ8Y29sfGZyYW1lfGhyfGltZ3xpbnB1dHxpc2luZGV4fGxpbmt8bWV0YXxwYXJhbSkkL2k7CisKKy8qKgorKiBFbGVtZW50cyB3aGljaCBjb3VudCBhcyBjb250ZW50LCBhcyBkaXN0aW5jdCBmcm9tIHdoaXRlc3BhY2Ugb3IgY29udGFpbmVycworKi8KKworRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5fZWxlbVNvbGlkID0gL14oYXBwbGV0fGJyfGJ1dHRvbnxocnxpbWd8aW5wdXR8dGFibGUpJC9pOworCisvKioKKyogRWxlbWVudHMgd2hpY2ggc2hvdWxkIGdldCBhIG5ldyBQLCBiZWZvcmUgb3IgYWZ0ZXIsIHdoZW4gZW50ZXIgaXMgcHJlc3NlZCBhdCBlaXRoZXIgZW5kCisqLworCitFbnRlclBhcmFncmFwaHMucHJvdG90eXBlLl9waWZ5U2libGluZyA9IC9eKGFkZHJlc3N8YmxvY2txdW90ZXxkZWx8ZGl2fGRsfGZpZWxkc2V0fGZvcm18aDF8aDJ8aDN8aDR8aDV8aDZ8aHJ8aW5zfG1hcHxub3NjcmlwdHxvYmplY3R8b2x8cHxwcmV8dGFibGV8dWx8KSQvaTsKK0VudGVyUGFyYWdyYXBocy5wcm90b3R5cGUuX3BpZnlGb3JjZWQgPSAvXih1bHxvbHxkbHx0YWJsZSkkL2k7CisKKy8qKgorKiBFbGVtZW50cyB3aGljaCBzaG91bGQgZ2V0IGEgbmV3IFAsIGJlZm9yZSBvciBhZnRlciBhIGNsb3NlIHBhcmVudCwgd2hlbiBlbnRlciBpcyBwcmVzc2VkIGF0IGVpdGhlciBlbmQKKyovCisKK0VudGVyUGFyYWdyYXBocy5wcm90b3R5cGUuX3BpZnlQYXJlbnQgPSAvXihkZHxkdHxsaXx0ZHx0aHx0cikkL2k7CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyogRW50ZXJQYXJhZ3JhcGhzIENvbnN0cnVjdG9yCisqLworCitmdW5jdGlvbiBFbnRlclBhcmFncmFwaHMoZWRpdG9yKQoreworICAKKyAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisgIAorICAvLyBob29rIGludG8gdGhlIGV2ZW50IGhhbmRsZXIgdG8gaW50ZXJjZXB0IGtleSBwcmVzc2VzIGlmIHdlIGFyZSB1c2luZworICAvLyBnZWNrbyAoTW96aWxsYS9GaXJlRm94KQorICBpZiAoWGluaGEuaXNfZ2Vja28pCisgIHsKKyAgICB0aGlzLm9uS2V5UHJlc3MgPSB0aGlzLl9fb25LZXlQcmVzczsKKyAgfQorICAKK30JLy8gZW5kIG9mIGNvbnN0cnVjdG9yLgorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisqIG5hbWUgbWVtYmVyIGZvciBkZWJ1Z2dpbmcKKyoKKyogVGhpcyBtZW1iZXIgaXMgdXNlZCB0byBpZGVudGlmeSBvYmplY3RzIG9mIHRoaXMgY2xhc3MgaW4gZGVidWdnaW5nCisqIG1lc3NhZ2VzLgorKi8KK0VudGVyUGFyYWdyYXBocy5wcm90b3R5cGUubmFtZSA9ICJFbnRlclBhcmFncmFwaHMiOworCisvKioKKyogR2Vja28ncyBhIGJpdCBsYWNraW5nIGluIHNvbWUgb2RkIHdheXMuLi4KKyovCitFbnRlclBhcmFncmFwaHMucHJvdG90eXBlLmluc2VydEFkamFjZW50RWxlbWVudCA9IGZ1bmN0aW9uKHJlZixwb3MsZWwpCit7CisgIGlmICggcG9zID09ICdCZWZvcmVCZWdpbicgKQorICB7CisgICAgcmVmLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsLHJlZik7CisgIH0KKyAgZWxzZSBpZiAoIHBvcyA9PSAnQWZ0ZXJFbmQnICkKKyAgeworICAgIHJlZi5uZXh0U2libGluZyA/IHJlZi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbCxyZWYubmV4dFNpYmxpbmcpIDogcmVmLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoZWwpOworICB9CisgIGVsc2UgaWYgKCBwb3MgPT0gJ0FmdGVyQmVnaW4nICYmIHJlZi5maXJzdENoaWxkICkKKyAgeworICAgIHJlZi5pbnNlcnRCZWZvcmUoZWwscmVmLmZpcnN0Q2hpbGQpOworICB9CisgIGVsc2UgaWYgKCBwb3MgPT0gJ0JlZm9yZUVuZCcgfHwgcG9zID09ICdBZnRlckJlZ2luJyApCisgIHsKKyAgICByZWYuYXBwZW5kQ2hpbGQoZWwpOworICB9CisgIAorfTsJLy8gZW5kIG9mIGluc2VydEFkamFjZW50RWxlbWVudCgpCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisqIFBhc3NlcyBhIGdsb2JhbCBwYXJlbnQgbm9kZSBvciBkb2N1bWVudCBmcmFnbWVudCB0byBmb3JFYWNoTm9kZQorKgorKiBAcGFyYW0gcm9vdCBub2RlIHJvb3Qgbm9kZSB0byBzdGFydCBzZWFyY2ggZnJvbS4KKyogQHBhcmFtIG1vZGUgc3RyaW5nIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggbm9kZS4KKyogQHBhcmFtIGRpcmVjdGlvbiBzdHJpbmcgdHJhdmVyc2FsIGRpcmVjdGlvbiAibHRyIiAobGVmdCB0byByaWdodCkgb3IgInJ0bCIgKHJpZ2h0X3RvX2xlZnQpCisqIEBwYXJhbSBpbml0IGJvb2xlYW4KKyovCisKK0VudGVyUGFyYWdyYXBocy5wcm90b3R5cGUuZm9yRWFjaE5vZGVVbmRlciA9IGZ1bmN0aW9uICggcm9vdCwgbW9kZSwgZGlyZWN0aW9uLCBpbml0ICkKK3sKKyAgCisgIC8vIElkZW50aWZ5IHRoZSBmaXJzdCBhbmQgbGFzdCBub2RlcyB0byBkZWFsIHdpdGgKKyAgdmFyIHN0YXJ0LCBlbmQ7CisgIAorICAvLyBub2RlVHlwZSAxMSBpcyBET0NVTUVOVF9GUkFHTUVOVF9OT0RFIHdoaWNoIGlzIGEgY29udGFpbmVyLgorICBpZiAoIHJvb3Qubm9kZVR5cGUgPT0gMTEgJiYgcm9vdC5maXJzdENoaWxkICkKKyAgeworICAgIHN0YXJ0ID0gcm9vdC5maXJzdENoaWxkOworICAgIGVuZCA9IHJvb3QubGFzdENoaWxkOworICB9CisgIGVsc2UKKyAgeworICAgIHN0YXJ0ID0gZW5kID0gcm9vdDsKKyAgfQorICAvLyB0cmF2ZXJzZSBkb3duIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgdGhlIHRyZWUgZ2V0dGluZyB0aGUgbGFzdCBjaGlsZCBvZiB0aGUgbGFzdAorICAvLyBjaGlsZCBpbiBlYWNoIGxldmVsIHVudGlsIHdlIHJlYWNoIGJvdHRvbS4KKyAgd2hpbGUgKCBlbmQubGFzdENoaWxkICkKKyAgeworICAgIGVuZCA9IGVuZC5sYXN0Q2hpbGQ7CisgIH0KKyAgCisgIHJldHVybiB0aGlzLmZvckVhY2hOb2RlKCBzdGFydCwgZW5kLCBtb2RlLCBkaXJlY3Rpb24sIGluaXQpOworICAKK307CS8vIGVuZCBvZiBmb3JFYWNoTm9kZVVuZGVyKCkKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisqIHBlcmZvcm0gYSBkZXB0aCBmaXJzdCBkZXNjZW50IGluIHRoZSBkaXJlY3Rpb24gcmVxdWVzdGVkLgorKgorKiBAcGFyYW0gbGVmdF9ub2RlIG5vZGUgInN0YXJ0IG5vZGUiCisqIEBwYXJhbSByaWdodF9ub2RlIG5vZGUgImVuZCBub2RlIgorKiBAcGFyYW0gbW9kZSBzdHJpbmcgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBub2RlLiBjdWxsaWRzIG9yIGVtcHR5c2V0LgorKiBAcGFyYW0gZGlyZWN0aW9uIHN0cmluZyB0cmF2ZXJzYWwgZGlyZWN0aW9uICJsdHIiIChsZWZ0IHRvIHJpZ2h0KSBvciAicnRsIiAocmlnaHRfdG9fbGVmdCkKKyogQHBhcmFtIGluaXQgYm9vbGVhbiBvciBvYmplY3QuCisqLworCitFbnRlclBhcmFncmFwaHMucHJvdG90eXBlLmZvckVhY2hOb2RlID0gZnVuY3Rpb24gKGxlZnRfbm9kZSwgcmlnaHRfbm9kZSwgbW9kZSwgZGlyZWN0aW9uLCBpbml0KQoreworICAKKyAgLy8gcmV0dXJucyAiQnJvdGhlciIgbm9kZSBlaXRoZXIgbGVmdCBvciByaWdodC4KKyAgdmFyIGdldFNpYmxpbmcgPSBmdW5jdGlvbihlbGVtLCBkaXJlY3Rpb24pCisJeworICAgIHJldHVybiAoIGRpcmVjdGlvbiA9PSAibHRyIiA/IGVsZW0ubmV4dFNpYmxpbmcgOiBlbGVtLnByZXZpb3VzU2libGluZyApOworCX07CisgIAorICB2YXIgZ2V0Q2hpbGQgPSBmdW5jdGlvbihlbGVtLCBkaXJlY3Rpb24pCisJeworICAgIHJldHVybiAoIGRpcmVjdGlvbiA9PSAibHRyIiA/IGVsZW0uZmlyc3RDaGlsZCA6IGVsZW0ubGFzdENoaWxkICk7CisJfTsKKyAgCisgIHZhciB3YWxrLCBsb29rdXAsIGZuUmV0dXJuVmFsOworICAKKyAgLy8gRklYTUU6IGluaXQgaXMgYSBib29sZWFuIGluIHRoZSBlbXB0eXNldCBjYXNlIGFuZCBhbiBvYmplY3QgaW4KKyAgLy8gdGhlIGN1bGxpZHMgY2FzZS4gVXNlZCBpbmNvbnNpc3RlbnRseS4KKyAgCisgIHZhciBuZXh0X25vZGUgPSBpbml0OworICAKKyAgLy8gdXNlZCB0byBmbGFnIGhhdmluZyByZWFjaGVkIHRoZSBsYXN0IG5vZGUuCisgIAorICB2YXIgZG9uZV9mbGFnID0gZmFsc2U7CisgIAorICAvLyBsb29wIG50aWwgd2UndmUgaGl0IHRoZSBsYXN0IG5vZGUgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi4KKyAgLy8gaWYgd2UncmUgZ29pbmcgbGVmdCB0byByaWdodCB0aGF0J3MgdGhlIHJpZ2h0X25vZGUgYW5kIHZpc2EtdmVyc2EuCisgIAorICB3aGlsZSAoIHdhbGsgIT0gZGlyZWN0aW9uID09ICJsdHIiID8gcmlnaHRfbm9kZSA6IGxlZnRfbm9kZSApCisgIHsKKyAgICAKKyAgICAvLyBvbiBmaXJzdCBlbnRyeSwgd2FsayBoZXJlIGlzIG51bGwuIFNvIHRoaXMgaXMgaG93CisgICAgLy8gd2UgcHJpbWUgdGhlIGxvb3Agd2l0aCB0aGUgZmlyc3Qgbm9kZS4KKyAgICAKKyAgICBpZiAoICF3YWxrICkKKyAgICB7CisgICAgICB3YWxrID0gZGlyZWN0aW9uID09ICJsdHIiID8gbGVmdF9ub2RlIDogcmlnaHRfbm9kZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIAorICAgICAgLy8gaXMgdGhlcmUgYSBjaGlsZCBub2RlPworICAgICAgCisgICAgICBpZiAoIGdldENoaWxkKHdhbGssZGlyZWN0aW9uKSApCisgICAgICB7CisgICAgICAgIAorICAgICAgICAvLyBkZXNjZW5kIGRvd24gaW50byB0aGUgY2hpbGQuCisgICAgICAgIAorICAgICAgICB3YWxrID0gZ2V0Q2hpbGQod2FsayxkaXJlY3Rpb24pOworICAgICAgICAKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgCisgICAgICAgIC8vIGlzIHRoZXJlIGEgc2libGluZyBub2RlIG9uIHRoaXMgbGV2ZWw/CisgICAgICAgIAorICAgICAgICBpZiAoIGdldFNpYmxpbmcod2FsayxkaXJlY3Rpb24pICkKKyAgICAgICAgeworICAgICAgICAgIC8vIG1vdmUgdG8gdGhlIHNpYmxpbmcuCisgICAgICAgICAgd2FsayA9IGdldFNpYmxpbmcod2FsayxkaXJlY3Rpb24pOyAKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBsb29rdXAgPSB3YWxrOworICAgICAgICAgIAorICAgICAgICAgIC8vIGNsaW1iIGJhY2sgdXAgdGhlIHRyZWUgdW50aWwgd2UgZmluZCBhIGxldmVsIHdoZXJlIHdlIGFyZSBub3QgdGhlIGVuZAorICAgICAgICAgIC8vIG5vZGUgb24gdGhlIGxldmVsIChpLmUuIHRoYXQgd2UgaGF2ZSBhIHNpYmxpbmcgaW4gdGhlIGRpcmVjdGlvbgorICAgICAgICAgICAgLy8gd2UgYXJlIHNlYXJjaGluZykgb3IgdW50aWwgd2UgcmVhY2ggdGhlIGVuZC4KKyAgICAgICAgICAKKyAgICAgICAgICB3aGlsZSAoICFnZXRTaWJsaW5nKGxvb2t1cCxkaXJlY3Rpb24pICYmIGxvb2t1cCAhPSAoZGlyZWN0aW9uID09ICJsdHIiID8gcmlnaHRfbm9kZSA6IGxlZnRfbm9kZSkgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGxvb2t1cCA9IGxvb2t1cC5wYXJlbnROb2RlOworICAgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgICAvLyBkaWQgd2UgZmluZCBhIGxldmVsIHdpdGggYSBzaWJsaW5nPworICAgICAgICAgIAorICAgICAgICAgIC8vIHdhbGsgPSAoIGxvb2t1cC5uZXh0U2libGluZyA/IGxvb2t1cC5uZXh0U2libGluZyA6IGxvb2t1cCApIDsKKyAgICAgICAgICAKKyAgICAgICAgICB3YWxrID0gKCBnZXRTaWJsaW5nKGxvb2t1cCxkaXJlY3Rpb24pID8gZ2V0U2libGluZyhsb29rdXAsZGlyZWN0aW9uKSA6IGxvb2t1cCApIDsKKyAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgfQorICAgICAgCisgICAgfQkvLyBlbmQgb2YgZWxzZSB3YWxrLgorICAgIAorICAgIC8vIGhhdmUgd2UgcmVhY2hlZCB0aGUgZW5kPyBlaXRoZXIgYXMgYSByZXN1bHQgb2YgdGhlIHRvcCB3aGlsZSBsb29wIG9yIGNsaW1iaW5nCisgICAgLy8gYmFjayBvdXQgYWJvdmUuCisgICAgCisgICAgZG9uZV9mbGFnID0gKHdhbGs9PSggZGlyZWN0aW9uID09ICJsdHIiID8gcmlnaHRfbm9kZSA6IGxlZnRfbm9kZSkpOworICAgIAorICAgIC8vIGNhbGwgdGhlIHJlcXVlc3RlZCBmdW5jdGlvbiBvbiB0aGUgY3VycmVudCBub2RlLiBGdW5jdGlvbnMKKyAgICAvLyByZXR1cm4gYW4gYXJyYXkuCisgICAgLy8KKyAgICAvLyBQb3NzaWJsZSBmdW5jdGlvbnMgYXJlIF9mZW5DdWxsSWRzLCBfZmVuRW1wdHlTZXQKKyAgICAvLworICAgIC8vIFRoZSBzaXR1YXRpb24gaXMgY29tcGxpY2F0ZWQgYnkgdGhlIGZhY3QgdGhhdCBzb21ldGltZXMgd2Ugd2FudCB0bworICAgIC8vIHJldHVybiB0aGUgYmFzZSBub2RlIGFuZCBzb21ldGltZXMgd2UgZG8gbm90LgorICAgIC8vCisgICAgLy8gbmV4dF9ub2RlIGNhbiBiZSBhbiBvYmplY3QgKHRoaXMudGFrZW5JZHMpLCBhIG5vZGUgKHRleHQsIGVsLCBldGMpIG9yIGZhbHNlLgorICAgIAorICAgIHN3aXRjaCggbW9kZSApCisgICAgeworICAgICAgCisgICAgY2FzZSAiY3VsbGlkcyI6CisgICAgICAKKyAgICAgIGZuUmV0dXJuVmFsID0gdGhpcy5fZmVuQ3VsbElkcyh3YWxrLCBuZXh0X25vZGUgKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSAiZmluZF9maWxsIjoKKyAgICAgIAorICAgICAgZm5SZXR1cm5WYWwgPSB0aGlzLl9mZW5FbXB0eVNldCh3YWxrLCBuZXh0X25vZGUsIG1vZGUsIGRvbmVfZmxhZyk7CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgImZpbmRfY3Vyc29ycG9pbnQiOgorICAgICAgCisgICAgICBmblJldHVyblZhbCA9IHRoaXMuX2ZlbkVtcHR5U2V0KHdhbGssIG5leHRfbm9kZSwgbW9kZSwgZG9uZV9mbGFnKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgfQorICAgIAorICAgIC8vIElmIHRoaXMgbm9kZSB3YW50cyB1cyB0byByZXR1cm4sIHJldHVybiBuZXh0X25vZGUKKyAgICAKKyAgICBpZiAoIGZuUmV0dXJuVmFsWzBdICkKKyAgICB7CisgICAgICByZXR1cm4gZm5SZXR1cm5WYWxbMV07CisgICAgfQorICAgIAorICAgIC8vIGFyZSB3ZSBkb25lIHdpdGggdGhlIGxvb3A/CisgICAgCisgICAgaWYgKCBkb25lX2ZsYWcgKQorICAgIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICAvLyBPdGhlcndpc2UsIHBhc3MgdG8gdGhlIG5leHQgbm9kZQorICAgIAorICAgIGlmICggZm5SZXR1cm5WYWxbMV0gKQorICAgIHsKKyAgICAgIG5leHRfbm9kZSA9IGZuUmV0dXJuVmFsWzFdOworICAgIH0KKyAgICAKKyAgfQkvLyBlbmQgb2Ygd2hpbGUgbG9vcAorICAKKyAgcmV0dXJuIGZhbHNlOworICAKK307CS8vIGVuZCBvZiBmb3JFYWNoTm9kZSgpCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisqIEZpbmQgYSBwb3N0LWluc2VydGlvbiBub2RlLCBvbmx5IGlmIGFsbCBub2RlcyBhcmUgZW1wdHksIG9yIHRoZSBmaXJzdCBjb250ZW50CisqCisqIEBwYXJhbSBub2RlIG5vZGUgY3VycmVudCBub2RlIGJlaW5nZSBleGFtaW5lZC4KKyogQHBhcmFtIG5leHRfbm9kZSBub2RlIG5leHQgbm9kZSB0byBiZSBleGFtaW5lZC4KKyogQHBhcmFtIG5vZGUgc3RyaW5nICJmaW5kX2ZpbGwiIG9yICJmaW5kX2N1cnNvcnBvaW50IgorKiBAcGFyYW0gbGFzdF9mbGFnIGJvb2xlYW4gaXMgdGhpcyB0aGUgbGFzdCBub2RlPworKi8KKworRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5fZmVuRW1wdHlTZXQgPSBmdW5jdGlvbiggbm9kZSwgbmV4dF9ub2RlLCBtb2RlLCBsYXN0X2ZsYWcpCit7CisgIAorICAvLyBNYXJrIHRoaXMgaWYgaXQncyB0aGUgZmlyc3QgYmFzZQorICAKKyAgaWYgKCAhbmV4dF9ub2RlICYmICFub2RlLmZpcnN0Q2hpbGQgKQorICB7CisgICAgbmV4dF9ub2RlID0gbm9kZTsKKyAgfQorICAKKyAgLy8gSXMgaXQgYW4gZWxlbWVudCBub2RlIGFuZCBpcyBpdCBjb25zaWRlcmVkIGNvbnRlbnQ/IChiciwgaHIsIGV0YykKKyAgLy8gb3IgaXMgaXQgYSB0ZXh0IG5vZGUgdGhhdCBpcyBub3QganVzdCB3aGl0ZXNwYWNlPworICAvLyBvciBpcyBpdCBub3QgYW4gZWxlbWVudCBub2RlIGFuZCBub3QgYSB0ZXh0IG5vZGU/CisgIAorICBpZiAoIChub2RlLm5vZGVUeXBlID09IDEgJiYgdGhpcy5fZWxlbVNvbGlkLnRlc3Qobm9kZS5ub2RlTmFtZSkpIHx8CisgICAgKG5vZGUubm9kZVR5cGUgPT0gMyAmJiAhdGhpcy5fd2hpdGVTcGFjZS50ZXN0KG5vZGUubm9kZVZhbHVlKSkgfHwKKyAgKG5vZGUubm9kZVR5cGUgIT0gMSAmJiBub2RlLm5vZGVUeXBlICE9IDMpICkKKyAgeworICAgIAorICAgIHN3aXRjaCggbW9kZSApCisgICAgeworICAgICAgCisgICAgY2FzZSAiZmluZF9maWxsIjoKKyAgICAgIAorICAgICAgLy8gZG9lcyBub3QgcmV0dXJuIGNvbnRlbnQuCisgICAgICAKKyAgICAgIHJldHVybiBuZXcgQXJyYXkodHJ1ZSwgZmFsc2UgKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSAiZmluZF9jdXJzb3Jwb2ludCI6CisgICAgICAKKyAgICAgIC8vIHJldHVybnMgY29udGVudAorICAgICAgCisgICAgICByZXR1cm4gbmV3IEFycmF5KHRydWUsIG5vZGUgKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgfQorICAgIAorICB9CisgIAorICAvLyBJbiBlaXRoZXIgY2FzZSAoZmlsbCBvciBmaW5kY3Vyc29yKSB3ZSByZXR1cm4gdGhlIGJhc2Ugbm9kZS4gVGhlIGF2b2lkcworICAvLyBwcm9ibGVtcyBpbiB0ZXJtaW5hbCBjYXNlcyAoYmVnaW5uaW5nIG9yIGVuZCBvZiBkb2N1bWVudCBvciBjb250YWluZXIgdGFncykKKyAgCisgIGlmICggbGFzdF9mbGFnICkKKyAgeworICAgIHJldHVybiBuZXcgQXJyYXkoIHRydWUsIG5leHRfbm9kZSApOworICB9CisgIAorICByZXR1cm4gbmV3IEFycmF5KCBmYWxzZSwgbmV4dF9ub2RlICk7CisgIAorfTsJLy8gZW5kIG9mIF9mZW5FbXB0eVNldCgpCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyogcmVtb3ZlIGR1cGxpY2F0ZSBJZCdzLgorKgorKiBAcGFyYW0gZXBfcmVmIGVudGVycGFyYWdyYXBocyByZWZlcmVuY2UgdG8gZW50ZXJwYXJhZ3JhcGhzIG9iamVjdAorKi8KKworRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5fZmVuQ3VsbElkcyA9IGZ1bmN0aW9uICggZXBfcmVmLCBub2RlLCBwb25nICkKK3sKKyAgCisgIC8vIENoZWNrIGZvciBhbiBpZCwgYmxhc3QgaXQgaWYgaXQncyBpbiB0aGUgc3RvcmUsIG90aGVyd2lzZSBhZGQgaXQKKyAgCisgIGlmICggbm9kZS5pZCApCisgIHsKKyAgICAKKyAgICBwb25nW25vZGUuaWRdID8gbm9kZS5pZCA9ICcnIDogcG9uZ1tub2RlLmlkXSA9IHRydWU7CisgIH0KKyAgCisgIHJldHVybiBuZXcgQXJyYXkoZmFsc2UscG9uZyk7CisgIAorfTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgorKiBHcmFicyBhIHJhbmdlIHN1aXRhYmxlIGZvciBwYXJhZ3JhcGggc3R1ZmZpbmcKKyoKKyogQHBhcmFtIHJuZyBSYW5nZQorKiBAcGFyYW0gc2VhcmNoX2RpcmVjdGlvbiBzdHJpbmcgImxlZnQiIG9yICJyaWdodCIKKyoKKyogQHRvZG8gY2hlY2sgYmxhbmsgbm9kZSBpc3N1ZSBpbiByb2FtaW5nIGxvb3AuCisqLworCitFbnRlclBhcmFncmFwaHMucHJvdG90eXBlLnByb2Nlc3NTaWRlID0gZnVuY3Rpb24oIHJuZywgc2VhcmNoX2RpcmVjdGlvbikKK3sKKyAgCisgIHZhciBuZXh0ID0gZnVuY3Rpb24oZWxlbWVudCwgc2VhcmNoX2RpcmVjdGlvbikKKwl7CisgICAgcmV0dXJuICggc2VhcmNoX2RpcmVjdGlvbiA9PSAibGVmdCIgPyBlbGVtZW50LnByZXZpb3VzU2libGluZyA6IGVsZW1lbnQubmV4dFNpYmxpbmcgKTsKKwl9OworICAKKyAgdmFyIG5vZGUgPSBzZWFyY2hfZGlyZWN0aW9uID09ICJsZWZ0IiA/IHJuZy5zdGFydENvbnRhaW5lciA6IHJuZy5lbmRDb250YWluZXI7CisgIHZhciBvZmZzZXQgPSBzZWFyY2hfZGlyZWN0aW9uID09ICJsZWZ0IiA/IHJuZy5zdGFydE9mZnNldCA6IHJuZy5lbmRPZmZzZXQ7CisgIHZhciByb2FtLCBzdGFydCA9IG5vZGU7CisgIAorICAvLyBOZXZlciBzdGFydCB3aXRoIGFuIGVsZW1lbnQsIGJlY2F1c2UgdGhlbiB0aGUgZmlyc3Qgcm9hbWluZyBub2RlIG1pZ2h0CisgIC8vIGJlIG9uIHRoZSBleGNsdXNpb24gbGlzdCBhbmQgd2Ugd291bGRuJ3Qga25vdyB1bnRpbCBpdCB3YXMgdG9vIGxhdGUKKyAgCisgIHdoaWxlICggc3RhcnQubm9kZVR5cGUgPT0gMSAmJiAhdGhpcy5fcGVybUVtcHR5LnRlc3Qoc3RhcnQubm9kZU5hbWUpICkKKyAgeworICAgIHN0YXJ0ID0gKCBvZmZzZXQgPyBzdGFydC5sYXN0Q2hpbGQgOiBzdGFydC5maXJzdENoaWxkICk7CisgIH0KKyAgCisgIC8vIENsaW1iIHRoZSB0cmVlLCBsZWZ0IG9yIHJpZ2h0LCB1bnRpbCBvdXIgY291cnNlIG9mIGFjdGlvbiBwcmVzZW50cyBpdHNlbGYKKyAgLy8KKyAgLy8gaWYgcm9hbSBpcyBOVUxMIHRyeSBzdGFydC4KKyAgLy8gaWYgcm9hbSBpcyBOT1QgTlVMTCwgdHJ5IG5leHQgbm9kZSBpbiBvdXIgc2VhcmNoX2RpcmVjdGlvbgorICAvLyBJZiB0aGF0IG5vZGUgaXMgTlVMTCwgZ2V0IG91ciBwYXJlbnQgbm9kZS4KKyAgLy8KKyAgLy8gSWYgYWxsIHRoZSBhYm92ZSB0dXJucyBvdXQgTlVMTCBlbmQgdGhlIGxvb3AuCisgIC8vCisgIC8vIEZJWE1FOiBnZWNrbyAoZmlyZWZveCAxLjAuMykgLSBlbnRlciAidGVzdCIgaW50byBhbiBlbXB0eSBkb2N1bWVudCBhbmQgcHJlc3MgZW50ZXIuCisgIC8vIHNvbWV0aW1lcyB0aGlzIGxvb3AgZmluZHMgYSBibGFuayB0ZXh0IG5vZGUsIHNvbWV0aW1lcyBpdCBkb2Vzbid0LgorICAKKyAgd2hpbGUgKCByb2FtID0gcm9hbSA/ICggbmV4dChyb2FtLHNlYXJjaF9kaXJlY3Rpb24pID8gbmV4dChyb2FtLHNlYXJjaF9kaXJlY3Rpb24pIDogcm9hbS5wYXJlbnROb2RlICkgOiBzdGFydCApCisgIHsKKyAgICAKKyAgICAvLyBuZXh0KCkgaXMgYW4gaW5saW5lIGZ1bmN0aW9uIGRlZmluZWQgYWJvdmUgdGhhdCByZXR1cm5zIHRoZSBuZXh0IG5vZGUgZGVwZW5kaW5nCisgICAgLy8gb24gdGhlIGRpcmVjdGlvbiB3ZSdyZSBzZWFyY2hpbmcuCisgICAgCisgICAgaWYgKCBuZXh0KHJvYW0sc2VhcmNoX2RpcmVjdGlvbikgKQorICAgIHsKKyAgICAgIAorICAgICAgLy8gSWYgdGhlIG5leHQgc2libGluZydzIG9uIHRoZSBleGNsdXNpb24gbGlzdCwgc3RvcCBiZWZvcmUgaXQKKyAgICAgIAorICAgICAgaWYgKCB0aGlzLl9wRXhjbHVzaW9ucy50ZXN0KG5leHQocm9hbSxzZWFyY2hfZGlyZWN0aW9uKS5ub2RlTmFtZSkgKQorICAgICAgeworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JuZyhybmcsIHNlYXJjaF9kaXJlY3Rpb24sIHJvYW0sIG5leHQocm9hbSxzZWFyY2hfZGlyZWN0aW9uKSwgKHNlYXJjaF9kaXJlY3Rpb24gPT0gImxlZnQiPydBZnRlckVuZCc6J0JlZm9yZUJlZ2luJyksIHRydWUsIGZhbHNlKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIAorICAgICAgLy8gSWYgb3VyIHBhcmVudCdzIG9uIHRoZSBjb250YWluZXIgbGlzdCwgc3RvcCBpbnNpZGUgaXQKKyAgICAgIAorICAgICAgaWYgKHRoaXMuX3BDb250YWluZXJzLnRlc3Qocm9hbS5wYXJlbnROb2RlLm5vZGVOYW1lKSkKKyAgICAgIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NSbmcocm5nLCBzZWFyY2hfZGlyZWN0aW9uLCByb2FtLCByb2FtLnBhcmVudE5vZGUsIChzZWFyY2hfZGlyZWN0aW9uID09ICJsZWZ0Ij8nQWZ0ZXJCZWdpbic6J0JlZm9yZUVuZCcpLCB0cnVlLCBmYWxzZSk7CisgICAgICB9CisgICAgICBlbHNlIGlmICh0aGlzLl9wRXhjbHVzaW9ucy50ZXN0KHJvYW0ucGFyZW50Tm9kZS5ub2RlTmFtZSkpCisgICAgICB7CisgICAgICAgIAorICAgICAgICAvLyBjaG9wIHdpdGhvdXQgd3JhcHBpbmcKKyAgICAgICAgCisgICAgICAgIGlmICh0aGlzLl9wQnJlYWsudGVzdChyb2FtLnBhcmVudE5vZGUubm9kZU5hbWUpKQorICAgICAgICB7CisgICAgICAgICAgCisgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JuZyhybmcsIHNlYXJjaF9kaXJlY3Rpb24sIHJvYW0sIHJvYW0ucGFyZW50Tm9kZSwKKyAgICAgICAgICAgIChzZWFyY2hfZGlyZWN0aW9uID09ICJsZWZ0Ij8nQWZ0ZXJCZWdpbic6J0JlZm9yZUVuZCcpLCBmYWxzZSwgKHNlYXJjaF9kaXJlY3Rpb24gPT0gImxlZnQiID90cnVlOmZhbHNlKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgCisgICAgICAgICAgLy8gdGhlIG5leHQocm9hbSxzZWFyY2hfZGlyZWN0aW9uKSBpbiB0aGlzIGNhbGwgaXMgcmVkdW5kYW50IHNpbmNlIHdlIGtub3cgaXQncyBmYWxzZQorICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhlICJpZiBuZXh0KHJvYW0sc2VhcmNoX2RpcmVjdGlvbikiIGFib3ZlLgorICAgICAgICAgIC8vCisgICAgICAgICAgLy8gdGhlIGZpbmFsIGZhbHNlIHByZXZlbnRzIHRoaXMgcmFuZ2UgZnJvbSBiZWluZyB3cmFwcGVkIGluIDxwPidzIG1vc3QgbGlrZWx5CisgICAgICAgICAgLy8gYmVjYXVzZSBpdCdzIGFscmVhZHkgd3JhcHBlZC4KKyAgICAgICAgICAKKyAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUm5nKHJuZywKKyAgICAgICAgICAgIHNlYXJjaF9kaXJlY3Rpb24sCisgICAgICAgICAgICAocm9hbSA9IHJvYW0ucGFyZW50Tm9kZSksCisgICAgICAgICAgICAobmV4dChyb2FtLHNlYXJjaF9kaXJlY3Rpb24pID8gbmV4dChyb2FtLHNlYXJjaF9kaXJlY3Rpb24pIDogcm9hbS5wYXJlbnROb2RlKSwKKyAgICAgICAgICAgIChuZXh0KHJvYW0sc2VhcmNoX2RpcmVjdGlvbikgPyAoc2VhcmNoX2RpcmVjdGlvbiA9PSAibGVmdCI/J0FmdGVyRW5kJzonQmVmb3JlQmVnaW4nKSA6IChzZWFyY2hfZGlyZWN0aW9uID09ICJsZWZ0Ij8nQWZ0ZXJCZWdpbic6J0JlZm9yZUVuZCcpKSwKKyAgICAgICAgICAgIGZhbHNlLAorICAgICAgICAgICAgZmFsc2UpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIAorfTsJLy8gZW5kIG9mIHByb2Nlc3NTaWRlKCkKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgorKiBwcm9jZXNzUm5nIC0gcHJvY2VzcyBSYW5nZS4KKyoKKyogTmVpZ2hib3VyIGFuZCBpbnNlcnRpb24gaWRlbnRpZnkgd2hlcmUgdGhlIG5ldyBub2RlLCByb2FtLCBuZWVkcyB0byBlbnRlcgorKiB0aGUgZG9jdW1lbnQ7IGxhbmRtYXJrcyBpbiBvdXIgc2VsZWN0aW9uIHdpbGwgYmUgZGVsZXRlZCBiZWZvcmUgaW5zZXJ0aW9uCisqCisqIEBwYXJhbSBybiBSYW5nZSBvcmlnaW5hbCBzZWxlY3RlZCByYW5nZQorKiBAcGFyYW0gc2VhcmNoX2RpcmVjdGlvbiBzdHJpbmcgRGlyZWN0aW9uIHRvIHNlYXJjaCBpbi4KKyogQHBhcmFtIHJvYW0gbm9kZQorKiBAcGFyYW0gaW5zZXJ0aW9uIHN0cmluZyBtYXkgYmUgQWZ0ZXJCZWdpbiBvZiBCZWZvcmVFbmQKKyogQHJldHVybiBhcnJheQorKi8KKworRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5wcm9jZXNzUm5nID0gZnVuY3Rpb24ocm5nLCBzZWFyY2hfZGlyZWN0aW9uLCByb2FtLCBuZWlnaGJvdXIsIGluc2VydGlvbiwgcFdyYXAsIHByZUJyKQoreworICB2YXIgbm9kZSA9IHNlYXJjaF9kaXJlY3Rpb24gPT0gImxlZnQiID8gcm5nLnN0YXJ0Q29udGFpbmVyIDogcm5nLmVuZENvbnRhaW5lcjsKKyAgdmFyIG9mZnNldCA9IHNlYXJjaF9kaXJlY3Rpb24gPT0gImxlZnQiID8gcm5nLnN0YXJ0T2Zmc2V0IDogcm5nLmVuZE9mZnNldDsKKyAgCisgIC8vIERlZmluZSB0aGUgcmFuZ2UgdG8gY3V0LCBhbmQgZXh0ZW5kIHRoZSBzZWxlY3Rpb24gcmFuZ2UgdG8gdGhlIHNhbWUgYm91bmRhcnkKKyAgCisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgdmFyIG5ld1JuZyA9IGVkaXRvci5fZG9jLmNyZWF0ZVJhbmdlKCk7CisgIAorICBuZXdSbmcuc2VsZWN0Tm9kZShyb2FtKTsKKyAgLy8gZXh0ZW5kIHRoZSByYW5nZSBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorICAKKyAgaWYgKCBzZWFyY2hfZGlyZWN0aW9uID09ICJsZWZ0IikKKyAgeworICAgIG5ld1JuZy5zZXRFbmQobm9kZSwgb2Zmc2V0KTsKKyAgICBybmcuc2V0U3RhcnQobmV3Um5nLnN0YXJ0Q29udGFpbmVyLCBuZXdSbmcuc3RhcnRPZmZzZXQpOworICB9CisgIGVsc2UgaWYgKCBzZWFyY2hfZGlyZWN0aW9uID09ICJyaWdodCIgKQorICB7CisgICAgCisgICAgbmV3Um5nLnNldFN0YXJ0KG5vZGUsIG9mZnNldCk7CisgICAgcm5nLnNldEVuZChuZXdSbmcuZW5kQ29udGFpbmVyLCBuZXdSbmcuZW5kT2Zmc2V0KTsKKyAgfQorICAvLyBDbG9uZSB0aGUgcmFuZ2UgYW5kIHJlbW92ZSBkdXBsaWNhdGUgaWRzIGl0IHdvdWxkIG90aGVyd2lzZSBwcm9kdWNlCisgIAorICB2YXIgY250ID0gbmV3Um5nLmNsb25lQ29udGVudHMoKTsKKyAgCisgIC8vIGluIHRoaXMgY2FzZSAiaW5pdCIgaXMgYW4gb2JqZWN0IG5vdCBhIGJvb2xlbi4KKyAgCisgIHRoaXMuZm9yRWFjaE5vZGVVbmRlciggY250LCAiY3VsbGlkcyIsICJsdHIiLCB0aGlzLnRha2VuSWRzLCBmYWxzZSwgZmFsc2UpOworICAKKyAgLy8gU3BlY2lhbCBjYXNlLCBmb3IgaW5zZXJ0aW5nIHBhcmFncmFwaHMgYmVmb3JlIHNvbWUgYmxvY2tzIHdoZW4gY2FyZXQgaXMgYXQKKyAgLy8gdGhlaXIgemVybyBvZmZzZXQuCisgIC8vCisgIC8vIFVzZWQgdG8gIm9wZW4gdXAgc3BhY2UiIGluIGZyb250IG9mIGEgbGlzdCwgdGFibGUuIFVzZWZ1bGwgaWYgdGhlIGxpc3QgaXMgYXQKKyAgLy8gdGhlIHRvcCBvZiB0aGUgZG9jdW1lbnQuIChvdGhlcndpc2UgeW91J2QgaGF2ZSBubyB3YXkgb2YgIm1vdmluZyBpdCBkb3duIikuCisgIAorICB2YXIgcGlmeSwgcGlmeU9mZnNldCwgZmlsbDsKKyAgcGlmeSA9IHNlYXJjaF9kaXJlY3Rpb24gPT0gImxlZnQiID8gKG5ld1JuZy5lbmRDb250YWluZXIubm9kZVR5cGUgPT0gMyA/IHRydWU6ZmFsc2UpIDogKG5ld1JuZy5zdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PSAzID8gZmFsc2U6dHJ1ZSk7CisgIHBpZnlPZmZzZXQgPSBwaWZ5ID8gbmV3Um5nLnN0YXJ0T2Zmc2V0IDogbmV3Um5nLmVuZE9mZnNldDsKKyAgcGlmeSA9IHBpZnkgPyBuZXdSbmcuc3RhcnRDb250YWluZXIgOiBuZXdSbmcuZW5kQ29udGFpbmVyOworICAKKyAgaWYgKCB0aGlzLl9waWZ5UGFyZW50LnRlc3QocGlmeS5ub2RlTmFtZSkgJiYgcGlmeS5wYXJlbnROb2RlLmNoaWxkTm9kZXMuaXRlbSgwKSA9PSBwaWZ5ICkKKyAgeworICAgIHdoaWxlICggIXRoaXMuX3BpZnlTaWJsaW5nLnRlc3QocGlmeS5ub2RlTmFtZSkgKQorICAgIHsKKyAgICAgIHBpZnkgPSBwaWZ5LnBhcmVudE5vZGU7CisgICAgfQorICB9CisgIAorICAvLyBOT0RFIFRZUEUgMTEgaXMgRE9DVU1FTlRfRlJBR01FTlQgTk9ERQorICAvLyBJIGRvIG5vdCBwcm9mZXNzIHRvIHVuZGVyc3RhbmQgYW55IG9mIHRoaXMsIHNpbXBseSBhcHBseWluZyBhIHBhdGNoIHRoYXQgb3RoZXJzIHNheSBpcyBnb29kIC0gdGlja2V0OjQ0NgorICBpZiAoIGNudC5ub2RlVHlwZSA9PSAxMSAmJiAhY250LmZpcnN0Q2hpbGQpCisgIHsJCisgICAgaWYgKHBpZnkubm9kZU5hbWUgIT0gIkJPRFkiIHx8IChwaWZ5Lm5vZGVOYW1lID09ICJCT0RZIiAmJiBwaWZ5T2Zmc2V0ICE9IDApKSAKKyAgICB7IC8vV0tSOiBwcmV2ZW50IGJvZHkgdGFnIGluIGVtcHR5IGRvYworICAgICAgY250LmFwcGVuZENoaWxkKGVkaXRvci5fZG9jLmNyZWF0ZUVsZW1lbnQocGlmeS5ub2RlTmFtZSkpOworICAgIH0KKyAgfQorICAKKyAgLy8gWW1MOiBBZGRlZCBhZGRpdGlvbmFsIGxhc3QgcGFyYW1ldGVyIGZvciBmaWxsIGNhc2UgdG8gd29yayBhcm91bmQgbG9naWMKKyAgLy8gZXJyb3IgaW4gZm9yRWFjaE5vZGUoKQorICAKKyAgZmlsbCA9IHRoaXMuZm9yRWFjaE5vZGVVbmRlcihjbnQsICJmaW5kX2ZpbGwiLCAibHRyIiwgZmFsc2UgKTsKKyAgCisgIGlmICggZmlsbCAmJgorICAgIHRoaXMuX3BpZnlTaWJsaW5nLnRlc3QocGlmeS5ub2RlTmFtZSkgJiYKKyAgKCAocGlmeU9mZnNldCA9PSAwKSB8fCAoIHBpZnlPZmZzZXQgPT0gMSAmJiB0aGlzLl9waWZ5Rm9yY2VkLnRlc3QocGlmeS5ub2RlTmFtZSkgKSApICkKKyAgeworICAgIAorICAgIHJvYW0gPSBlZGl0b3IuX2RvYy5jcmVhdGVFbGVtZW50KCAncCcgKTsKKyAgICByb2FtLmlubmVySFRNTCA9ICImbmJzcDsiOworICAgIAorICAgIC8vIHJvYW0gPSBlZGl0b3IuX2RvYy5jcmVhdGVFbGVtZW50KCdwJyk7CisgICAgLy8gcm9hbS5hcHBlbmRDaGlsZChlZGl0b3IuX2RvYy5jcmVhdGVFbGVtZW50KCdicicpKTsKKyAgICAKKyAgICAvLyBmb3IgdGhlc2UgY2FzZXMsIGlmIHdlIGFyZSBwcm9jZXNzaW5nIHRoZSBsZWZ0IGhhbmQgc2lkZSB3ZSB3YW50IGl0IHRvIGhhbHQKKyAgICAvLyBwcm9jZXNzaW5nIGluc3RlYWQgb2YgZG9pbmcgdGhlIHJpZ2h0IGhhbmQgc2lkZS4gKEF2b2lkcyBhZGRpbmcgYW5vdGhlciA8cD4mbmJzcDwvcD4KKyAgICAgIC8vIGFmdGVyIHRoZSBsaXN0IGV0Yy4KKyAgICAgIAorICAgICAgaWYgKChzZWFyY2hfZGlyZWN0aW9uID09ICJsZWZ0IiApICYmIHBpZnkucHJldmlvdXNTaWJsaW5nKQorICAgICAgeworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG5ldyBBcnJheShwaWZ5LnByZXZpb3VzU2libGluZywgJ0FmdGVyRW5kJywgcm9hbSk7CisgICAgICB9CisgICAgICBlbHNlIGlmICgoIHNlYXJjaF9kaXJlY3Rpb24gPT0gInJpZ2h0IikgJiYgcGlmeS5uZXh0U2libGluZykKKyAgICAgIHsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBuZXcgQXJyYXkocGlmeS5uZXh0U2libGluZywgJ0JlZm9yZUJlZ2luJywgcm9hbSk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbmV3IEFycmF5KHBpZnkucGFyZW50Tm9kZSwgKHNlYXJjaF9kaXJlY3Rpb24gPT0gImxlZnQiPydBZnRlckJlZ2luJzonQmVmb3JlRW5kJyksIHJvYW0pOworICAgICAgfQorICAgICAgCisgIH0KKyAgCisgIC8vIElmIG91ciBjbG9uZWQgY29udGVudHMgYXJlICdjb250ZW50Jy1sZXNzLCBzaG92ZSBhIGJyZWFrIGluIHRoZW0KKyAgCisgIGlmICggZmlsbCApCisgIHsKKyAgICAKKyAgICAvLyBJbGwtY29uY2lldmVkPworICAgIC8vCisgICAgLy8gMyBpcyBhIFRFWFQgbm9kZSBhbmQgaXQgc2hvdWxkIGJlIGVtcHR5LgorICAgIC8vCisgICAgCisgICAgaWYgKCBmaWxsLm5vZGVUeXBlID09IDMgKQorICAgIHsKKyAgICAgIC8vIGZpbGwgPSBmaWxsLnBhcmVudE5vZGU7CisgICAgICAKKyAgICAgIGZpbGwgPSBlZGl0b3IuX2RvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgfQorICAgIAorICAgIGlmICggKGZpbGwubm9kZVR5cGUgPT0gMSAmJiAhdGhpcy5fZWxlbVNvbGlkLnRlc3QoKSkgfHwgZmlsbC5ub2RlVHlwZSA9PSAxMSApCisgICAgeworICAgICAgCisgICAgICAvLyBGSVhNRTovQ0hFQ0tNRTogV2hlbiBYaW5oYSBpcyBzd2l0Y2hlZCBmcm9tIFdZU0lXWUcgdG8gdGV4dCBtb2RlCisgICAgICAvLyBYaW5oYS5nZXRIVE1MV3JhcHBlcigpIHdpbGwgc3RyaXAgb3V0IHRoZSB0cmFpbGluZyBici4gTm90IHN1cmUgd2h5LgorICAgICAgCisgICAgICAvLyBmaWxsLmFwcGVuZENoaWxkKGVkaXRvci5fZG9jLmNyZWF0ZUVsZW1lbnQoJ2JyJykpOworICAgICAgCisgICAgICB2YXIgcHRlcm1pbmF0b3IgPSBlZGl0b3IuX2RvYy5jcmVhdGVFbGVtZW50KCAncCcgKTsKKyAgICAgIHB0ZXJtaW5hdG9yLmlubmVySFRNTCA9ICImbmJzcDsiOworICAgICAgCisgICAgICBmaWxsLmFwcGVuZENoaWxkKCBwdGVybWluYXRvciApOworICAgICAgCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAKKyAgICAgIC8vIGZpbGwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZWRpdG9yLl9kb2MuY3JlYXRlRWxlbWVudCgnYnInKSxmaWxsKTsKKyAgICAgIAorICAgICAgdmFyIHB0ZXJtaW5hdG9yID0gZWRpdG9yLl9kb2MuY3JlYXRlRWxlbWVudCggJ3AnICk7CisgICAgICBwdGVybWluYXRvci5pbm5lckhUTUwgPSAiJm5ic3A7IjsKKyAgICAgIAorICAgICAgZmlsbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShwYXJlbnROb2RlLGZpbGwpOworICAgICAgCisgICAgfQorICB9CisgIAorICAvLyBZbUw6IElmIHRoZXJlIHdhcyBubyBjb250ZW50IHJlcGxhY2Ugd2l0aCBmaWxsCisgIC8vIChwcmV2aW91cyBjb2RlIGRpZCBub3QgdXNlIGZpbGwgYW5kIHdlIGVuZGVkIHVwIHdpdGggdGhlCisgICAgLy8gPHA+dGVzdDwvcD48cD48L3A+IGJlY2F1c2UgR2Vja28gd2FzIGZpbmRpbmcgdHdvIGVtcHR5IHRleHQgbm9kZXMKKyAgICAvLyB3aGVuIHRyYXZlcnNpbmcgb24gdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBhbiBlbXB0eSBkb2N1bWVudC4KKyAgICAKKyAgICBpZiAoIGZpbGwgKQorICAgIHsKKyAgICAgIAorICAgICAgcm9hbSA9IGZpbGw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvLyBBbmQgc3R1ZmYgYSBzaGlueSBuZXcgb2JqZWN0IHdpdGggd2hhdGV2ZXIgY29udGVudHMgd2UgaGF2ZQorICAgICAgCisgICAgICByb2FtID0gKHBXcmFwIHx8IChjbnQubm9kZVR5cGUgPT0gMTEgJiYgIWNudC5maXJzdENoaWxkKSkgPyBlZGl0b3IuX2RvYy5jcmVhdGVFbGVtZW50KCdwJykgOiBlZGl0b3IuX2RvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgICByb2FtLmFwcGVuZENoaWxkKGNudCk7CisgICAgfQorICAgIAorICAgIGlmIChwcmVCcikKKyAgICB7CisgICAgICByb2FtLmFwcGVuZENoaWxkKGVkaXRvci5fZG9jLmNyZWF0ZUVsZW1lbnQoJ2JyJykpOworICAgIH0KKyAgICAvLyBSZXR1cm4gdGhlIG5lYXJlc3QgcmVsYXRpdmUsIHJlbGF0aXZlIGluc2VydGlvbiBwb2ludCBhbmQgZnJhZ21lbnQgdG8gaW5zZXJ0CisgICAgCisgICAgcmV0dXJuIG5ldyBBcnJheShuZWlnaGJvdXIsIGluc2VydGlvbiwgcm9hbSk7CisgICAgCit9OwkvLyBlbmQgb2YgcHJvY2Vzc1JuZygpCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisqIGFyZSB3ZSBhbiA8bGk+IHRoYXQgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGJyb3dzZXI/CisqCisqIHRoZXJlIGlzIG5vIGdvb2Qgd2F5IHRvICJnZXQgb3V0IG9mIiBvcmRlcmVkIG9yIHVub3JkZXJlZCBsaXN0cyBmcm9tIEphdmFzY3JpcHQuCisqIFdlIGhhdmUgdG8gcGFzcyB0aGUgb25LZXlQcmVzcyAxMyBldmVudCB0byB0aGUgYnJvd3NlciBzbyBpdCBjYW4gdGFrZSBjYXJlIG9mCisqIGdldHRpbmcgdXMgIm91dCBvZiIgdGhlIGxpc3QuCisqCisqIFRoZSBHZWNrbyBlbmdpbmUgZG9lcyBhIGdvb2Qgam9iIG9mIGhhbmRsaW5nIGFsbCB0aGUgbm9ybWFsIDxsaT4gY2FzZXMgZXhjZXB0IHRoZSAicHJlc3MKKyogZW50ZXIgYXQgdGhlIGZpcnN0IHBvc2l0aW9uIiB3aGVyZSB3ZSB3YW50IGEgPHA+Jm5ic3A8L3A+IGluc2VydGVkIGJlZm9yZSB0aGUgbGlzdC4gVGhlCisqIGJ1aWx0LWluIGJlaGF2aW9yIGlzIHRvIG9wZW4gdXAgYSA8bGk+IGJlZm9yZSB0aGUgY3VycmVudCBlbnRyeSAobm90IGdvb2QpLgorKgorKiBAcGFyYW0gcm5nIFJhbmdlIHJhbmdlLgorKi8KKworRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5pc05vcm1hbExpc3RJdGVtID0gZnVuY3Rpb24ocm5nKQoreworICAKKyAgdmFyIG5vZGUsIGxpc3ROb2RlOworICAKKyAgbm9kZSA9IHJuZy5zdGFydENvbnRhaW5lcjsKKyAgCisgIGlmICgoIHR5cGVvZiBub2RlLm5vZGVOYW1lICE9ICd1bmRlZmluZWQnKSAmJgorICAgICggbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09ICdsaScgKSkKKyAgeworICAgIAorICAgIC8vIGFyZSB3ZSBhIGxpc3QgaXRlbT8KKyAgICAKKyAgICBsaXN0Tm9kZSA9IG5vZGU7CisgIH0KKyAgZWxzZSBpZiAoKCB0eXBlb2Ygbm9kZS5wYXJlbnROb2RlICE9ICd1bmRlZmluZWQnICkgJiYKKyAgICAoIHR5cGVvZiBub2RlLnBhcmVudE5vZGUubm9kZU5hbWUgIT0gJ3VuZGVmaW5lZCcgKSAmJgorICAoIG5vZGUucGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09ICdsaScgKSkKKyAgeworICAgIAorICAgIC8vIG91ciBwYXJlbnQgaXMgYSBsaXN0IGl0ZW0uCisgICAgCisgICAgbGlzdE5vZGUgPSBub2RlLnBhcmVudE5vZGU7CisgICAgCisgIH0KKyAgZWxzZQorICB7CisgICAgLy8gbmVpdGhlciB3ZSBub3Igb3VyIHBhcmVudCBhcmUgYSBsaXN0IGl0ZW0uIHRoaXMgaXMgbm90IGEgbm9ybWFsCisgICAgLy8gbGkgY2FzZS4KKyAgICB2YXIgbGlzdE5vZGUgPSB0aGlzLmVkaXRvci5fZ2V0Rmlyc3RBbmNlc3RvckZvck5vZGVBbmRXaHkobm9kZSwgWyJsaSJdKVswXTsKKyAgICBpZiAoIHR5cGVvZiBsaXN0Tm9kZSA9PSAndW5kZWZpbmVkJyB8fCAhbGlzdE5vZGUgKQorICAgIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKyAgCisgIC8vIGF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhIGxpc3ROb2RlLiBJcyBpdCB0aGUgZmlyc3QgbGlzdCBpdGVtPworICAKKyAgaWYgKCAhIGxpc3ROb2RlLnByZXZpb3VzU2libGluZyApCisgIHsKKyAgICAvLyBhcmUgd2Ugb24gdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgZmlyc3QgbGk/CisgICAgCisgICAgaWYgKCBybmcuc3RhcnRPZmZzZXQgPT0gMCApCisgICAgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorICByZXR1cm4gdHJ1ZTsKKyAgCit9OwkvLyBlbmQgb2YgaXNOb3JtYWxMaXN0SXRlbSgpCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qKgorKiBDYWxsZWQgd2hlbiBhIGtleSBpcyBwcmVzc2VkIGluIHRoZSBlZGl0b3IKKyovCisKK0VudGVyUGFyYWdyYXBocy5wcm90b3R5cGUuX19vbktleVByZXNzID0gZnVuY3Rpb24oZXYpCit7CisgIAorICAvLyBJZiB0aGV5J3ZlIGhpdCBlbnRlciBhbmQgc2hpZnQgaXMgbm90IHByZXNzZWQsIGhhbmRsZSBpdAorICAKKyAgaWYgKGV2LmtleUNvZGUgPT0gMTMgJiYgIWV2LnNoaWZ0S2V5ICYmIHRoaXMuZWRpdG9yLl9pZnJhbWUuY29udGVudFdpbmRvdy5nZXRTZWxlY3Rpb24pCisgIHsKKyAgICByZXR1cm4gdGhpcy5oYW5kbGVFbnRlcihldik7CisgIH0KKyAgCit9OwkvLyBlbmQgb2YgX29uS2V5UHJlc3MoKQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyogSGFuZGxlcyB0aGUgcHJlc3Npbmcgb2YgYW4gdW5zaGlmdGVkIGVudGVyIGZvciBHZWNrbworKi8KKworRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5oYW5kbGVFbnRlciA9IGZ1bmN0aW9uKGV2KQoreworICAKKyAgdmFyIGN1cnNvck5vZGU7CisgIAorICAvLyBHcmFiIHRoZSBzZWxlY3Rpb24gYW5kIGFzc29jaWF0ZWQgcmFuZ2UKKyAgCisgIHZhciBzZWwgPSB0aGlzLmVkaXRvci5nZXRTZWxlY3Rpb24oKTsKKyAgdmFyIHJuZyA9IHRoaXMuZWRpdG9yLmNyZWF0ZVJhbmdlKHNlbCk7CisgIAorICAvLyBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiBhIGxpc3QgYW5kIHRoZSBub2RlIGlzIGVtcHR5IGxldCB0aGUgYnJvd3NlciBoYW5kbGUKKyAgLy8gaXQgdG8gZ2V0IHVzIG91dCBvZiB0aGUgbGlzdC4KKyAgCisgIGlmICggdGhpcy5pc05vcm1hbExpc3RJdGVtKHJuZykgKQorICB7CisgICAgCisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgCisgIC8vIGFzIGZhciBhcyBJIGNhbiB0ZWxsIHRoaXMgaXNuJ3QgYWN0dWFsbHkgdXNlZC4KKyAgCisgIHRoaXMudGFrZW5JZHMgPSBuZXcgT2JqZWN0KCk7CisgIAorICAvLyBHcmFiIHJhbmdlcyBmb3IgZG9jdW1lbnQgcmUtc3R1ZmZpbmcsIGlmIGFwcHJvcHJpYXRlCisgIC8vCisgIC8vIHBTdGFydCBhbmQgcEVuZCBhcmUgYXJyYXlzIGNvbnNpc3Rpbmcgb2YKKyAgLy8gWzBdIG5laWdoYm9yIG5vZGUKKyAgLy8gWzFdIGluc2VydGlvbiB0eXBlCisgIC8vIFsyXSByb2FtCisgIAorICB2YXIgcFN0YXJ0ID0gdGhpcy5wcm9jZXNzU2lkZShybmcsICJsZWZ0Iik7CisgIAorICB2YXIgcEVuZCA9IHRoaXMucHJvY2Vzc1NpZGUocm5nLCAicmlnaHQiKTsKKyAgCisgIC8vIHVzZWQgdG8gcG9zaXRpb24gdGhlIGN1cnNvciBhZnRlciBpbnNlcnRpb24uCisgIAorICBjdXJzb3JOb2RlID0gcEVuZFsyXTsKKyAgCisgIC8vIEdldCByaWQgb2YgZXZlcnl0aGluZyBsb2NhbCB0byB0aGUgc2VsZWN0aW9uCisgIAorICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CisgIHJuZy5kZWxldGVDb250ZW50cygpOworICAKKyAgLy8gR3JhYiBhIG5vZGUgd2UnbGwgaGF2ZSBhZnRlciBpbnNlcnRpb24sIHNpbmNlIGZyYWdtZW50cyB3aWxsIGJlIGxvc3QKKyAgLy8KKyAgLy8gd2UnbGwgdXNlIHRoaXMgdG8gcG9zaXRpb24gdGhlIGN1cnNvci4KKyAgCisgIHZhciBob2xkRW5kID0gdGhpcy5mb3JFYWNoTm9kZVVuZGVyKCBjdXJzb3JOb2RlLCAiZmluZF9jdXJzb3Jwb2ludCIsICJsdHIiLCBmYWxzZSwgdHJ1ZSk7CisgIAorICBpZiAoICEgaG9sZEVuZCApCisgIHsKKyAgICBhbGVydCggIklOVEVSTkFMIEVSUk9SIC0gY291bGQgbm90IGZpbmQgcGxhY2UgdG8gcHV0IGN1cnNvciBhZnRlciBFTlRFUiIgKTsKKyAgfQorICAKKyAgLy8gSW5zZXJ0IG91ciBjYXJlZnVsbHkgY2hvc2VuIGRvY3VtZW50IGZyYWdtZW50cworICAKKyAgaWYgKCBwU3RhcnQgKQorICB7CisgICAgCisgICAgdGhpcy5pbnNlcnRBZGphY2VudEVsZW1lbnQocFN0YXJ0WzBdLCBwU3RhcnRbMV0sIHBTdGFydFsyXSk7CisgIH0KKyAgCisgIGlmICggcEVuZCAmJiBwRW5kLm5vZGVUeXBlICE9IDEpCisgIHsKKyAgICAKKyAgICB0aGlzLmluc2VydEFkamFjZW50RWxlbWVudChwRW5kWzBdLCBwRW5kWzFdLCBwRW5kWzJdKTsKKyAgfQorICAKKyAgLy8gTW92ZSB0aGUgY2FyZXQgaW4gZnJvbnQgb2YgdGhlIGZpcnN0IGdvb2QgdGV4dCBlbGVtZW50CisgIAorICBpZiAoKGhvbGRFbmQpICYmICh0aGlzLl9wZXJtRW1wdHkudGVzdChob2xkRW5kLm5vZGVOYW1lKSApKQorICB7CisgICAgCisgICAgdmFyIHByb2RpZ2FsID0gMDsKKyAgICB3aGlsZSAoIGhvbGRFbmQucGFyZW50Tm9kZS5jaGlsZE5vZGVzLml0ZW0ocHJvZGlnYWwpICE9IGhvbGRFbmQgKQorICAgIHsKKyAgICAgIHByb2RpZ2FsKys7CisgICAgfQorICAgIAorICAgIHNlbC5jb2xsYXBzZSggaG9sZEVuZC5wYXJlbnROb2RlLCBwcm9kaWdhbCk7CisgIH0KKyAgZWxzZQorICB7CisgICAgCisgICAgLy8gaG9sZEVuZCBtaWdodCBiZSBmYWxzZS4KKyAgICAKKyAgICB0cnkKKyAgICB7CisgICAgICBzZWwuY29sbGFwc2UoaG9sZEVuZCwgMCk7CisgICAgICAKKyAgICAgIC8vIGludGVyZXN0aW5nbHksIHNjcm9sbFRvRWxlbWVudCgpIHNjcm9sbCBzbyB0aGUgdG9wIGlmIGhvbGRFbmQgaXMgYSB0ZXh0IG5vZGUuCisgICAgICAKKyAgICAgIGlmICggaG9sZEVuZC5ub2RlVHlwZSA9PSAzICkKKyAgICAgIHsKKyAgICAgICAgaG9sZEVuZCA9IGhvbGRFbmQucGFyZW50Tm9kZTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgdGhpcy5lZGl0b3Iuc2Nyb2xsRWxlbWVudEludG9WaWV3cG9ydChob2xkRW5kKTsKKyAgICAgIC8vdGhpcy5lZGl0b3Iuc2Nyb2xsVG9FbGVtZW50KGhvbGRFbmQpOworICAgIH0KKyAgICBjYXRjaCAoZSkKKyAgICB7CisgICAgICAvLyB3ZSBjb3VsZCB0cnkgdG8gcGxhY2UgdGhlIGN1cnNvciBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KKyAgICB9CisgIH0KKyAgCisgIHRoaXMuZWRpdG9yLnVwZGF0ZVRvb2xiYXIoKTsKKyAgCisgIFhpbmhhLl9zdG9wRXZlbnQoZXYpOworICAKKyAgcmV0dXJuIHRydWU7CisgIAorfTsJLy8gZW5kIG9mIGhhbmRsZUVudGVyKCkKKworLy8gRU5EClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9HZXRIdG1sL0RPTXdhbGsuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0dldEh0bWwvRE9Nd2Fsay5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGVjOWY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9HZXRIdG1sL0RPTXdhbGsuanMKQEAgLTAsMCArMSwzNjAgQEAKKworICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOm5vVGFicz10cnVlOnRhYlNpemU9MjppbmRlbnRTaXplPTI6LS0KKyAgICAtLSAgWGluaGEgKGlzIG5vdCBodG1sQXJlYSkgLSBodHRwOi8veGluaGEuZ29nby5jby5uei8KKyAgICAtLQorICAgIC0tICBVc2Ugb2YgWGluaGEgaXMgZ3JhbnRlZCBieSB0aGUgdGVybXMgb2YgdGhlIGh0bWxBcmVhIExpY2Vuc2UgKGJhc2VkIG9uCisgICAgLS0gIEJTRCBsaWNlbnNlKSAgcGxlYXNlIHJlYWQgbGljZW5zZS50eHQgaW4gdGhpcyBwYWNrYWdlIGZvciBkZXRhaWxzLgorICAgIC0tCisgICAgLS0gIFhpbmhhIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIHdvcmsgYnkgTWloYWkgQmF6b24gd2hpY2ggaXM6CisgICAgLS0gICAgICBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNCBkeW5hcmNoLmNvbS4KKyAgICAtLSAgICAgIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIGludGVyYWN0aXZldG9vbHMuY29tLCBpbmMuCisgICAgLS0gICAgICBUaGlzIGNvcHlyaWdodCBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlLgorICAgIC0tCisgICAgLS0gIFRoaXMgaXMgdGhlIHN0YW5kYXJkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZXRob2QgZm9yIHJlbmRlcmluZyBIVE1MIGNvZGUgZnJvbSB0aGUgRE9NCisgICAgLS0KKyAgICAtLSAgVGhlIGZpbGUgaXMgbG9hZGVkIGJ5IHRoZSBYaW5oYSBDb3JlIHdoZW4gbm8gYWx0ZXJuYXRpdmUgbWV0aG9kIChwbHVnaW4pIGlzIGxvYWRlZC4KKyAgICAtLQorICAgIC0tCisgICAgLS0gICRIZWFkVVJMOiBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL0dldEh0bWwvRE9Nd2Fsay5qcyAkCisgICAgLS0gICRMYXN0Q2hhbmdlZERhdGU6IDIwMTgtMDItMDQgMTc6Mjg6MTYgKzEzMDAgKFN1biwgMDQgRmViIDIwMTgpICQKKyAgICAtLSAgJExhc3RDaGFuZ2VkUmV2aXNpb246IDEzNTYgJAorICAgIC0tICAkTGFzdENoYW5nZWRCeTogZ29nbyAkCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworZnVuY3Rpb24gR2V0SHRtbEltcGxlbWVudGF0aW9uKGVkaXRvcikgeworICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yOworfQorCitHZXRIdG1sSW1wbGVtZW50YXRpb24uX3BsdWdpbkluZm8gPSB7CisgIG5hbWUgICAgICAgICAgOiAiR2V0SHRtbEltcGxlbWVudGF0aW9uIERPTXdhbGsiLAorICBvcmlnaW4gICAgICAgIDogIlhpbmhhIENvcmUiLAorICB2ZXJzaW9uICAgICAgIDogIiRMYXN0Q2hhbmdlZFJldmlzaW9uOiAxMzU2ICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywgJyQxJyksCisgIGRldmVsb3BlciAgICAgOiAiVGhlIFhpbmhhIENvcmUgRGV2ZWxvcGVyIFRlYW0iLAorICBkZXZlbG9wZXJfdXJsIDogIiRIZWFkVVJMOiBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL0dldEh0bWwvRE9Nd2Fsay5qcyAkIi5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sICckMScpLAorICBzcG9uc29yICAgICAgIDogIiIsCisgIHNwb25zb3JfdXJsICAgOiAiIiwKKyAgbGljZW5zZSAgICAgICA6ICJodG1sQXJlYSIKK307CisKKy8vIFJldHJpZXZlcyB0aGUgSFRNTCBjb2RlIGZyb20gdGhlIGdpdmVuIG5vZGUuCSBUaGlzIGlzIGEgcmVwbGFjZW1lbnQgZm9yCisvLyBnZXR0aW5nIGlubmVySFRNTCwgdXNpbmcgc3RhbmRhcmQgRE9NIGNhbGxzLgorLy8gV3JhcHBlciBsZWdhY3kgc2VlICM0NDIKK1hpbmhhLmdldEhUTUwgPSBmdW5jdGlvbihyb290LCBvdXRwdXRSb290LCBlZGl0b3IpCit7CisgIHJldHVybiBYaW5oYS5nZXRIVE1MV3JhcHBlcihyb290LG91dHB1dFJvb3QsZWRpdG9yKTsKK307CisKK1hpbmhhLmVtcHR5QXR0cmlidXRlcyA9ICIgY2hlY2tlZCBkaXNhYmxlZCBpc21hcCByZWFkb25seSBub3dyYXAgY29tcGFjdCBkZWNsYXJlIHNlbGVjdGVkIGRlZmVyIG11bHRpcGxlIG5vcmVzaXplIG5vc2hhZGUgIgorCitYaW5oYS5nZXRIVE1MV3JhcHBlciA9IGZ1bmN0aW9uKHJvb3QsIG91dHB1dFJvb3QsIGVkaXRvciwgaW5kZW50KQoreworICB2YXIgaHRtbCA9ICIiOworICBpZiAoICFpbmRlbnQgKQorICB7CisgICAgaW5kZW50ID0gJyc7CisgIH0KKworICBzd2l0Y2ggKCByb290Lm5vZGVUeXBlICkKKyAgeworICAgIGNhc2UgMTA6Ly8gTm9kZS5ET0NVTUVOVF9UWVBFX05PREUKKyAgICBjYXNlIDY6IC8vIE5vZGUuRU5USVRZX05PREUKKyAgICBjYXNlIDEyOi8vIE5vZGUuTk9UQVRJT05fTk9ERQorICAgICAgLy8gdGhpcyBhbGwgYXJlIGZvciB0aGUgZG9jdW1lbnQgdHlwZSwgcHJvYmFibHkgbm90IG5lY2Vzc2FyeQorICAgIGJyZWFrOworCisgICAgY2FzZSAyOiAvLyBOb2RlLkFUVFJJQlVURV9OT0RFCisgICAgICAvLyBOZXZlciBnZXQgaGVyZSwgdGhpcyBoYXMgdG8gYmUgaGFuZGxlZCBpbiB0aGUgRUxFTUVOVCBjYXNlIGJlY2F1c2UKKyAgICAgIC8vIG9mIElFIGNyYXBuZXNzIHJlcXVyaW5nIHRoYXQgc29tZSBhdHRyaWJ1dGVzIGFyZSBncmFiYmVkIGRpcmVjdGx5IGZyb20KKyAgICAgIC8vIHRoZSBhdHRyaWJ1dGUgKG5vZGVWYWx1ZSBkb2Vzbid0IHJldHVybiBjb3JyZWN0IHZhbHVlcyksIHNlZQorICAgICAgLy9odHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXBzP2hsPWVuJmxyPSZpZT1VVEYtOCZvZT1VVEYtOCZzYWZlPW9mZiZzZWxtPTNwb3JndTRtYzRvZmNvYTF1cWtmN3U4a3Z2MDY0a2pqYjQlNDA0YXguY29tCisgICAgICAvLyBmb3IgaW5mb3JtYXRpb24KKyAgICBicmVhazsKKworICAgIGNhc2UgNDogLy8gTm9kZS5DREFUQV9TRUNUSU9OX05PREUKKyAgICAgIC8vIE1vemlsbGEgc2VlbXMgdG8gY29udmVydCBDREFUQSBpbnRvIGEgY29tbWVudCB3aGVuIGdvaW5nIGludG8gd3lzaXd5ZyBtb2RlLAorICAgICAgLy8gIGRvbid0IGtub3cgYWJvdXQgSUUKKyAgICAgIGh0bWwgKz0gKFhpbmhhLmlzX2llID8gKCdcbicgKyBpbmRlbnQpIDogJycpICsgJzwhW0NEQVRBWycgKyByb290LmRhdGEgKyAnXV0+JyA7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIDU6IC8vIE5vZGUuRU5USVRZX1JFRkVSRU5DRV9OT0RFCisgICAgICBodG1sICs9ICcmJyArIHJvb3Qubm9kZVZhbHVlICsgJzsnOworICAgIGJyZWFrOworCisgICAgY2FzZSA3OiAvLyBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERQorICAgICAgLy8gUEkncyBkb24ndCBzZWVtIHRvIHN1cnZpdmUgZ29pbmcgaW50byB0aGUgd3lzaXd5ZyBtb2RlLCAoYXQgbGVhc3QgaW4gbW96KQorICAgICAgLy8gc28gdGhpcyBpcyBwdXJlbHkgYWNhZGVtaWMKKyAgICAgIGh0bWwgKz0gKFhpbmhhLmlzX2llID8gKCdcbicgKyBpbmRlbnQpIDogJycpICsgJzwnKyc/JyArIHJvb3QudGFyZ2V0ICsgJyAnICsgcm9vdC5kYXRhICsgJyA/Pic7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIDE6IC8vIE5vZGUuRUxFTUVOVF9OT0RFCisgICAgY2FzZSAxMTogLy8gTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFCisgICAgY2FzZSA5OiAvLyBOb2RlLkRPQ1VNRU5UX05PREUKKyAgICAgIHZhciBjbG9zZWQ7CisgICAgICB2YXIgaTsKKyAgICAgIHZhciByb290X3RhZyA9IChyb290Lm5vZGVUeXBlID09IDEpID8gcm9vdC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgOiAnJzsKKyAgICAgIGlmICggKCByb290X3RhZyA9PSAic2NyaXB0IiB8fCByb290X3RhZyA9PSAibm9zY3JpcHQiICkgJiYgZWRpdG9yLmNvbmZpZy5zdHJpcFNjcmlwdHMgKQorICAgICAgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmICggb3V0cHV0Um9vdCApCisgICAgICB7CisgICAgICAgIG91dHB1dFJvb3QgPSAhKGVkaXRvci5jb25maWcuaHRtbFJlbW92ZVRhZ3MgJiYgZWRpdG9yLmNvbmZpZy5odG1sUmVtb3ZlVGFncy50ZXN0KHJvb3RfdGFnKSk7CisgICAgICB9CisgICAgICBpZiAoIFhpbmhhLmlzX2llICYmIHJvb3RfdGFnID09ICJoZWFkIiApCisgICAgICB7CisgICAgICAgIGlmICggb3V0cHV0Um9vdCApCisgICAgICAgIHsKKyAgICAgICAgICBodG1sICs9IChYaW5oYS5pc19pZSA/ICgnXG4nICsgaW5kZW50KSA6ICcnKSArICI8aGVhZD4iOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2YXIgc2F2ZV9tdWx0aWxpbmUgPSBSZWdFeHAubXVsdGlsaW5lOworICAgICAgICBSZWdFeHAubXVsdGlsaW5lID0gdHJ1ZTsKKyAgICAgICAgdmFyIHR4dCA9IAorICAgICAgICByb290LmlubmVySFRNTAorICAgICAgICAucmVwbGFjZShYaW5oYS5SRV90YWdOYW1lLCBmdW5jdGlvbihzdHIsIHAxLCBwMikgeyByZXR1cm4gcDEgKyBwMi50b0xvd2VyQ2FzZSgpOyB9KSAvLyBsb3dlcmNhc2l6ZQorICAgICAgICAucmVwbGFjZSgvXHMqPVxzKigoW14nIl1bXj5cc10qKShbPlxzXSl8IihbXiJdKykifCcoW14nXSspJykvZywgJz0iJDIkNCQ1IiQzJykgLy9hZGQgYXR0cmlidXRlIHF1b3RlcworICAgICAgICAucmVwbGFjZSgvPChsaW5rfG1ldGEpKChccypcUyo9IlteIl0qIikqKT4oW1xuXHJdKikvZywgJzwkMSQyIC8+XG4nKTsgLy90ZXJtaW5hdGUgc2luZ2xldCB0YWdzCisgICAgICAgIFJlZ0V4cC5tdWx0aWxpbmUgPSBzYXZlX211bHRpbGluZTsKKyAgICAgICAgaHRtbCArPSB0eHQgKyAnXG4nOworICAgICAgICBpZiAoIG91dHB1dFJvb3QgKQorICAgICAgICB7CisgICAgICAgICAgaHRtbCArPSAoWGluaGEuaXNfaWUgPyAoJ1xuJyArIGluZGVudCkgOiAnJykgKyAiPC9oZWFkPiI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBlbHNlIGlmICggb3V0cHV0Um9vdCApCisgICAgICB7CisgICAgICAgIGNsb3NlZCA9ICghKHJvb3QuaGFzQ2hpbGROb2RlcygpIHx8IFhpbmhhLm5lZWRzQ2xvc2luZ1RhZyhyb290KSkpOworICAgICAgICBodG1sICs9ICgoWGluaGEuaXNCbG9ja0VsZW1lbnQocm9vdCkpID8gKCdcbicgKyBpbmRlbnQpIDogJycpICsgIjwiICsgcm9vdC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgIHZhciBhdHRycyA9IHJvb3QuYXR0cmlidXRlczsKKyAgICAgICAgCisgICAgICAgIGZvciAoIGkgPSBhdHRycy5sZW5ndGgtMTsgaSA+PSAwOyAtLWkgKQorICAgICAgICB7CisgICAgICAgICAgdmFyIGEgPSBhdHRycy5pdGVtKGkpOworICAgICAgICAgIC8vIEluIGNlcnRhaW4gYnJvd3NlcnMgKCpjb3VnaCogZmlyZWZveCkgdGhlIGRvbSBub2RlIGxvc2VzCisgICAgICAgICAgLy8gaW5mb3JtYXRpb24gaWYgdGhlIGltYWdlIGlzIGN1cnJlbnRseSBicm9rZW4uICBJbiBvcmRlciB0byBwcmV2ZW50CisgICAgICAgICAgLy8gY29ycnVwdGluZyB0aGUgaGVpZ2h0IGFuZCB3aWR0aCBvZiBpbWFnZSB0YWdzLCB3ZSBzdHJpcCBoZWlnaHQgYW5kCisgICAgICAgICAgLy8gd2lkdGggZnJvbSB0aGUgaW1hZ2UgcmF0aGVyIHRoYW4gcmVwb3J0aW5nIGJhZCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICBpZiAoWGluaGEuaXNfcmVhbF9nZWNrbyAmJiAocm9vdC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2ltZycpICYmCisgICAgICAgICAgICAgICgoYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09ICdoZWlnaHQnKSB8fCAoYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09ICd3aWR0aCcpKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXJvb3QuY29tcGxldGUgfHwgcm9vdC5uYXR1cmFsV2lkdGggPT09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBmaXJlZm94IGhhcyBiZWVuIHVuYWJsZSB0byByZWFkIHRoZSBkaW1lbnNpb25zIGZyb20gdGhlIGFjdHVhbCBpbWFnZQorICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZihyb290LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnaW1nJyAmJiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2NvbXBsZXRlJykgY29udGludWU7CisKKyAgICAgICAgICBpZiAodHlwZW9mIGEubm9kZVZhbHVlID09ICdvYmplY3QnICkgY29udGludWU7IC8vIHNlZSAjNjg0CisgICAgICAgICAgaWYgKHJvb3QudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICJpbnB1dCIgCisgICAgICAgICAgICAgICYmIHJvb3QudHlwZS50b0xvd2VyQ2FzZSgpID09ICJjaGVja2JveCIgCisgICAgICAgICAgICAgICYmIGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PSAidmFsdWUiCisgICAgICAgICAgICAgICYmIGEubm9kZVZhbHVlLnRvTG93ZXJDYXNlKCkgPT0gIm9uIikgCisgICAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICggIWEuc3BlY2lmaWVkIAorICAgICAgICAgICAgLy8gSUUgY2xhaW1zIHRoZXNlIGFyZSAhYS5zcGVjaWZpZWQgZXZlbiB0aG91Z2ggdGhleSBhcmUuICBQZXJoYXBzIG90aGVycyB0b28/CisgICAgICAgICAgICAmJiAhKHJvb3QudGFnTmFtZS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9pbnB1dHxvcHRpb24vKSAmJiBhLm5vZGVOYW1lID09ICd2YWx1ZScpCisgICAgICAgICAgICAmJiAhKHJvb3QudGFnTmFtZS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcmVhLykgJiYgYS5ub2RlTmFtZS5tYXRjaCgvc2hhcGV8Y29vcmRzL2kpKSAKKyAgICAgICAgICApCisgICAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICAgIHZhciBuYW1lID0gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgIGlmICggL19tb3pfZWRpdG9yX2JvZ3VzX25vZGUvLnRlc3QobmFtZSkgfHwgKCBuYW1lID09ICdjbGFzcycgJiYgYS5ub2RlVmFsdWUgPT0gJ3dlYmtpdC1ibG9jay1wbGFjZWhvbGRlcicpICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBodG1sID0gIiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKCAvKF9tb3opfChjb250ZW50ZWRpdGFibGUpfChfbXNoKS8udGVzdChuYW1lKSApCisgICAgICAgICAgeworICAgICAgICAgICAgLy8gYXZvaWQgY2VydGFpbiBhdHRyaWJ1dGVzCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisgICAgICAgICAgdmFyIHZhbHVlOworICAgICAgICAgIGlmICggWGluaGEuZW1wdHlBdHRyaWJ1dGVzLmluZGV4T2YoIiAiK25hbWUrIiAiKSAhPSAtMSkKKyAgICAgICAgICB7CisgICAgICAgICAgICB2YWx1ZSA9IG5hbWU7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCBuYW1lICE9ICJzdHlsZSIgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElFNS41IHJlcG9ydHMgMjUgd2hlbiBjZWxsU3BhY2luZyBpcworICAgICAgICAgICAgLy8gMTsgb3RoZXIgdmFsdWVzIG1pZ2h0IGJlIGRvb21lZCB0b28uCisgICAgICAgICAgICAvLyBGb3IgdGhpcyByZWFzb24gd2UgZXh0cmFjdCB0aGUKKyAgICAgICAgICAgIC8vIHZhbHVlcyBkaXJlY3RseSBmcm9tIHRoZSByb290IG5vZGUuCisgICAgICAgICAgICAvLyBJJ20gc3RhcnRpbmcgdG8gSEFURSBKYXZhU2NyaXB0CisgICAgICAgICAgICAvLyBkZXZlbG9wbWVudC4gIEJyb3dzZXIgZGlmZmVyZW5jZXMKKyAgICAgICAgICAgIC8vIHN1Y2suCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gSWYgeW91IGhhdmUgYSBwZXJjZW50IHdpZHRoIGluIHdpZHRoL2hlaWdodCB0aGVuIHdlIG1heSBuZWVkIHRvIHVzZSBub2RlVmFsdWUKKyAgICAgICAgICAgIC8vICBpdCBtYXkgd2VsbCBiZSBPSyB0byB1c2Ugbm9kZVZhbHVlIGFsbCB0aGUgdGltZSB0aGVzZSBkYXlzLCBidXQgaXQncyBlYXNpZXIKKyAgICAgICAgICAgIC8vICB0byBqdXN0IGRvIGl0IGZvciB0aGVzZSBhbmQgbm90IGZpeCB3aGF0J3Mgbm90IGJyb2tlCisgICAgICAgICAgICBpZihuYW1lID09ICJ3aWR0aCIgfHwgbmFtZSA9PSAiaGVpZ2h0IikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYoYS5ub2RlVmFsdWUubWF0Y2goLyUkLykpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGEubm9kZVZhbHVlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhbHVlID0gcm9vdFthLm5vZGVOYW1lXTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVXNpbmcgR2Vja28gdGhlIHZhbHVlcyBvZiBocmVmIGFuZCBzcmMgYXJlIGNvbnZlcnRlZCB0byBhYnNvbHV0ZSBsaW5rcworICAgICAgICAgICAgLy8gdW5sZXNzIHdlIGdldCB0aGVtIHVzaW5nIG5vZGVWYWx1ZSgpICAgICAgICAgICAgCisgICAgICAgICAgICBlbHNlIGlmICggdHlwZW9mIHJvb3RbYS5ub2RlTmFtZV0gIT0gInVuZGVmaW5lZCIgJiYgbmFtZSAhPSAiaHJlZiIgJiYgbmFtZSAhPSAic3JjIiAmJiAhKC9eb24vLnRlc3QobmFtZSkpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdmFsdWUgPSByb290W2Eubm9kZU5hbWVdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB2YWx1ZSA9IGEubm9kZVZhbHVlOworCQkJICBpZiAobmFtZSA9PSAnY2xhc3MnKQorCQkJICB7CisJCQkgIAl2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL0FwcGxlLXN0eWxlLXNwYW4vLCcnKTsKKwkJCQlpZiAoIXZhbHVlKSBjb250aW51ZTsKKwkJCSAgfQorICAgICAgICAgICAgICAvLyBJRSBzZWVtcyBub3Qgd2lsbGluZyB0byByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlcyAtIGl0IGNvbnZlcnRzIHRvIGFic29sdXRlCisgICAgICAgICAgICAgIC8vIGxpbmtzIHVzaW5nIGEubm9kZVZhbHVlLCBhLnZhbHVlLCBhLnN0cmluZ1ZhbHVlLCByb290LmdldEF0dHJpYnV0ZSgiaHJlZiIpCisgICAgICAgICAgICAgIC8vIFNvIHdlIGhhdmUgdG8gc3RyaXAgdGhlIGJhc2V1cmwgbWFudWFsbHkgOi0vCisgICAgICAgICAgICAgIGlmICggWGluaGEuaXNfaWUgJiYgKG5hbWUgPT0gImhyZWYiIHx8IG5hbWUgPT0gInNyYyIpICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhbHVlID0gZWRpdG9yLnN0cmlwQmFzZVVSTCh2YWx1ZSk7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAvLyBIaWdoLWFzY2lpICg4Yml0KSBjaGFyYWN0ZXJzIGluIGxpbmtzIHNlZW0gdG8gY2F1c2UgcHJvYmxlbXMgZm9yIHNvbWUgc2l0ZXMsCisgICAgICAgICAgICAgIC8vIHdoaWxlIHRoaXMgc2VlbXMgdG8gYmUgY29uc2lzdGVudCB3aXRoIFJGQyAzOTg2IFNlY3Rpb24gMi40CisgICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlc2UgYXJlIG5vdCAicmVzZXJ2ZWQiIGNoYXJhY3RlcnMsIGl0IGRvZXMgc2VlbSB0bworICAgICAgICAgICAgICAvLyBjYXVzZSBsaW5rcyB0byBpbnRlcm5hdGlvbmFsIHJlc291cmNlcyBub3QgdG8gd29yay4gIFNlZSB0aWNrZXQ6MTY3CisKKyAgICAgICAgICAgICAgLy8gSUUgYWx3YXlzIHJldHVybnMgaGlnaC1hc2NpaSBjaGFyYWN0ZXJzIHVuLWVuY29kZWQgaW4gbGlua3MgZXZlbiBpZiB0aGV5CisgICAgICAgICAgICAgIC8vIHdlcmUgc3VwcGxpZWQgYXMgJSBjb2RlcyAoaXQgdW5lc2NhcGVzIHRoZW0gd2hlbiB3ZSBwdWwgdGhlIHZhbHVlIGZyb20gdGhlIGxpbmspLgorCisgICAgICAgICAgICAgIC8vIEhtbW0sIHZlcnkgc3RyYW5nZSBpZiB3ZSB1c2UgZW5jb2RlVVJJIGhlcmUsIG9yIGVuY29kZVVSSUNvbXBvbmVudCBpbiBwbGFjZQorICAgICAgICAgICAgICAvLyBvZiBlc2NhcGUgYmVsb3csIHRoZW4gdGhlIGVuY29kaW5nIGlzIHdyb25nLiAgSSBtZWFuLCBjb21wbGV0ZWx5LgorICAgICAgICAgICAgICAvLyBOb3RoaW5nIGxpa2UgaXQgc2hvdWxkIGJlIGF0IGFsbC4gIFVzaW5nIGVzY2FwZSBzZWVtcyB0byB3b3JrIHRob3VnaC4KKyAgICAgICAgICAgICAgLy8gSXQncyBpbiBib3RoIGJyb3dzZXJzIHRvbywgc28gZWl0aGVyIEknbSBkb2luZyBzb21ldGhpbmcgd3JvbmcsIG9yCisgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyBlbHNlIGlzIGdvaW5nIG9uPworCisgICAgICAgICAgICAgIGlmICggZWRpdG9yLmNvbmZpZy5vbmx5N0JpdFByaW50YWJsZXNJblVSTHMgJiYgKCBuYW1lID09ICJocmVmIiB8fCBuYW1lID09ICJzcmMiICkgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8oW14hLX5dKykvZywgZnVuY3Rpb24obWF0Y2gpIHsgcmV0dXJuIGVzY2FwZShtYXRjaCk7IH0pOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCAhWGluaGEuaXNfaWUgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHZhbHVlID0gcm9vdC5zdHlsZS5jc3NUZXh0LnJlcGxhY2UoL3JnYlwoLio/XCkvaWcsZnVuY3Rpb24ocmdiKXsgcmV0dXJuIFhpbmhhLl9jb2xvclRvUmdiKHJnYikgfSk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCF2YWx1ZSkgLy8gSUU4IGhhcyBzdHlsZSBpbiBhdHRyaWJ1dGVzIChzZWUgYmVsb3cpLCBidXQgaXQncyBlbXB0eSEgCisgICAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorCisvKiBUaGlzIGxvb2tzIHdyb25nLCBodHRwOi8vdHJhYy54aW5oYS5vcmcvdGlja2V0LzEzOTEjY29tbWVudDo3CisgICAgICAgICAgaWYgKCAvXihfbW96KT8kLy50ZXN0KHZhbHVlKSApCisgICAgICAgICAgeworICAgICAgICAgICAgLy8gTW96aWxsYSByZXBvcnRzIHNvbWUgc3BlY2lhbCB0YWdzCisgICAgICAgICAgICAvLyBoZXJlOyB3ZSBkb24ndCBuZWVkIHRoZW0uCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisqLworCisgICAgICAgICAgaHRtbCArPSAiICIgKyBuYW1lICsgJz0iJyArIFhpbmhhLmh0bWxFbmNvZGUodmFsdWUpICsgJyInOworICAgICAgICB9CisgICAgICAgIC8vSUUgZmFpbHMgdG8gcHV0IHN0eWxlIGluIGF0dHJpYnV0ZXMgbGlzdCAmIGNzc1RleHQgaXMgVVBQRVJDQVNFCisgICAgICAgIGlmICggWGluaGEuaXNfaWUgJiYgcm9vdC5zdHlsZS5jc3NUZXh0ICkKKyAgICAgICAgeworICAgICAgICAgIGh0bWwgKz0gJyBzdHlsZT0iJyArIHJvb3Quc3R5bGUuY3NzVGV4dC5yZXBsYWNlKC8oXik/KFteOl0qKTooLio/KSg7fCQpL2csIGZ1bmN0aW9uKG0wLCBtMSxtMixtMywgbTQpe3JldHVybiBtMi50b0xvd2VyQ2FzZSgpICsgJzonICsgbTMgKyBtNDt9KSArICciJzsKKyAgICAgICAgfQorICAgICAgICBpZiAoIFhpbmhhLmlzX2llICYmIHJvb3QudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICJvcHRpb24iICYmIHJvb3Quc2VsZWN0ZWQgKQorICAgICAgICB7CisgICAgICAgICAgaHRtbCArPSAnIHNlbGVjdGVkPSJzZWxlY3RlZCInOworICAgICAgICB9CisgICAgICAgIGlmICggaHRtbCAhPT0gIiIgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBjbG9zZWQgJiYgcm9vdF90YWc9PSJwIiApCisgICAgICAgICAgeworICAgICAgICAgICAgLy9uZXZlciB1c2UgPHAgLz4gYXMgZW1wdHkgcGFyYWdyYXBocyB3b24ndCBiZSB2aXNpYmxlCisgICAgICAgICAgICBodG1sICs9ICI+Jm5ic3A7PC9wPiI7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCBjbG9zZWQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGh0bWwgKz0gIiAvPiI7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBodG1sICs9ICI+IjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHZhciBjb250YWluc0Jsb2NrID0gZmFsc2U7CisgICAgICBpZiAoIHJvb3RfdGFnID09ICJzY3JpcHQiIHx8IHJvb3RfdGFnID09ICJub3NjcmlwdCIgKQorICAgICAgeworICAgICAgICBpZiAoICFlZGl0b3IuY29uZmlnLnN0cmlwU2NyaXB0cyApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoWGluaGEuaXNfaWUpCisgICAgICAgICAgeworICAgICAgICAgICAgdmFyIGlubmVyVGV4dCA9ICJcbiIgKyByb290LmlubmVySFRNTC5yZXBsYWNlKC9eW1xuXHJdKi8sJycpLnJlcGxhY2UoL1xzKyQvLCcnKSArICdcbicgKyBpbmRlbnQ7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICB2YXIgaW5uZXJUZXh0ID0gKHJvb3QuaGFzQ2hpbGROb2RlcygpKSA/IHJvb3QuZmlyc3RDaGlsZC5ub2RlVmFsdWUgOiAnJzsKKyAgICAgICAgICB9CisgICAgICAgICAgaHRtbCArPSBpbm5lclRleHQgKyAnPC8nK3Jvb3RfdGFnKyc+JyArICgoWGluaGEuaXNfaWUpID8gJ1xuJyA6ICcnKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZiAocm9vdF90YWcgPT0gInByZSIpCisgICAgICB7CisgICAgICAgIGh0bWwgKz0gKChYaW5oYS5pc19pZSkgPyAnXG4nIDogJycpICsgcm9vdC5pbm5lckhUTUwucmVwbGFjZSgvPGJyPi9nLCdcbicpICsgJzwvJytyb290X3RhZysnPic7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGZvciAoIGkgPSByb290LmZpcnN0Q2hpbGQ7IGk7IGkgPSBpLm5leHRTaWJsaW5nICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggIWNvbnRhaW5zQmxvY2sgJiYgaS5ub2RlVHlwZSA9PSAxICYmIFhpbmhhLmlzQmxvY2tFbGVtZW50KGkpICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBjb250YWluc0Jsb2NrID0gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgICAgaHRtbCArPSBYaW5oYS5nZXRIVE1MV3JhcHBlcihpLCB0cnVlLCBlZGl0b3IsIGluZGVudCArICcgICcpOworICAgICAgICB9CisgICAgICAgIGlmICggb3V0cHV0Um9vdCAmJiAhY2xvc2VkICkKKyAgICAgICAgeworICAgICAgICAgIGh0bWwgKz0gKCgoWGluaGEuaXNCbG9ja0VsZW1lbnQocm9vdCkgJiYgY29udGFpbnNCbG9jaykgfHwgcm9vdF90YWcgPT0gJ2hlYWQnIHx8IHJvb3RfdGFnID09ICdodG1sJykgPyAoJ1xuJyArIGluZGVudCkgOiAnJykgKyAiPC8iICsgcm9vdC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgKyAiPiI7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICBicmVhazsKKworICAgIGNhc2UgMzogLy8gTm9kZS5URVhUX05PREUKKyAgICAgIGlmICggL15zY3JpcHR8bm9zY3JpcHR8c3R5bGUkL2kudGVzdChyb290LnBhcmVudE5vZGUudGFnTmFtZSkgKQorICAgICAgeworICAgICAgICBodG1sID0gcm9vdC5kYXRhOworICAgICAgfQorICAgICAgZWxzZSBpZihyb290LmRhdGEudHJpbSgpID09ICcnKQorICAgICAgeworICAgICAgICBpZihyb290LmRhdGEpCisgICAgICAgIHsKKyAgICAgICAgICBodG1sID0gJyAnOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGh0bWwgPSAnJzsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBodG1sID0gWGluaGEuaHRtbEVuY29kZShyb290LmRhdGEpOworICAgICAgfQorICAgIGJyZWFrOworCisgICAgY2FzZSA4OiAvLyBOb2RlLkNPTU1FTlRfTk9ERQorICAgICAgaHRtbCA9ICI8IS0tIiArIHJvb3QuZGF0YSArICItLT4iOworICAgIGJyZWFrOworICB9CisgIHJldHVybiBodG1sOworfTsKKworCisKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvR2V0SHRtbC9UcmFuc2Zvcm1Jbm5lckhUTUwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0dldEh0bWwvVHJhbnNmb3JtSW5uZXJIVE1MLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNjFmM2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0dldEh0bWwvVHJhbnNmb3JtSW5uZXJIVE1MLmpzCkBAIC0wLDAgKzEsMjMxIEBACisvKioKKyAgKiBCYXNlZCBvbiBYTUxfVXRpbGl0eSBmdW5jdGlvbnMgc3VibWl0dGVkIGJ5IHRyb2Vsc19rbi4KKyAgKiBjcmVkaXQgYWxzbyB0byBhZGlvcywgd2hvIGhlbHBlZCB3aXRoIHJlZyBleHBzOgorICAqIGh0dHA6Ly93d3cuc2l0ZXBvaW50LmNvbS9mb3J1bXMvc2hvd3RocmVhZC5waHA/dD0yMDEwNTIKKyAgKiAKKyAgKiBBIHJlcGxhY2VtZW50IGZvciBYaW5oYS5nZXRIVE1MCisgICoKKyAgKiBGZWF0dXJlczoKKyAgKiAgIC0gR2VuZXJhdGVzIFhIVE1MIGNvZGUKKyAgKiAgIC0gTXVjaCBmYXN0ZXIgdGhhbiBYaW5oYS5nZXRIVE1MCisgICogICAtIEVsaW1pbmF0ZXMgdGhlIGhhY2tzIHRvIGFjY29tb2RhdGUgYnJvd3NlciBxdWlya3MKKyAgKiAgIC0gUmV0dXJucyBjb3JyZWN0IGNvZGUgZm9yIEZsYXNoIG9iamVjdHMgYW5kIHNjcmlwdHMKKyAgKiAgIC0gRm9ybWF0cyBodG1sIGluIGFuIGluZGVudGVkLCByZWFkYWJsZSBmb3JtYXQgaW4gaHRtbCBtb2RlCisgICogICAtIFByZXNlcnZlcyBzY3JpcHQgYW5kIHByZSBmb3JtYXR0aW5nCisgICogICAtIFByZXNlcnZlcyBmb3JtYXR0aW5nIGluIGNvbW1lbnRzCisgICogICAtIFJlbW92ZXMgY29udGVudGVkaXRhYmxlIGZyb20gYm9keSB0YWcgaW4gZnVsbC1wYWdlIG1vZGUKKyAgKiAgIC0gU3VwcG9ydHMgb25seTdCaXRQcmludGFibGVzSW5VUkxzIGNvbmZpZyBvcHRpb24KKyAgKiAgIC0gU3VwcG9ydHMgaHRtbFJlbW92ZVRhZ3MgY29uZmlnIG9wdGlvbgorICAqLworICAKK2Z1bmN0aW9uIEdldEh0bWxJbXBsZW1lbnRhdGlvbihlZGl0b3IpIHsKKyAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKK30KKworR2V0SHRtbEltcGxlbWVudGF0aW9uLl9wbHVnaW5JbmZvID0geworCW5hbWUgICAgICAgICAgOiAiR2V0SHRtbEltcGxlbWVudGF0aW9uIFRyYW5zZm9ybUlubmVySFRNTCIsCisJdmVyc2lvbiAgICAgICA6ICIxLjAiLAorCWRldmVsb3BlciAgICAgOiAiTmVsc29uIEJyaWdodCIsCisJZGV2ZWxvcGVyX3VybCA6ICJodHRwOi8vd3d3LmJyaWdodHdvcmt3ZWIuY29tLyIsCisJc3BvbnNvciAgICAgICA6ICIiLAorICAgIHNwb25zb3JfdXJsICAgOiAiIiwKKwlsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIgorfTsKKworWGluaGEuUmVnRXhwQ2FjaGUgPSBbCisvKjAwKi8gIC88XHMqXC8/KFteXHNcLz5dKylbXHMqXC8+XS9naSwvL2xvd2VyY2FzZSB0YWdzCisvKjAxKi8gIC8oXHMrKV9tb3pbXj0+XSo9W15ccz5dKi9naSwvL3N0cmlwIF9tb3ogYXR0cmlidXRlcworLyowMiovICAvXHMqPVxzKigoW14nIl1bXj5cc10qKShbPlxzXSl8IihbXiJdKykifCcoW14nXSspJykvZywvLyBmaW5kIGF0dHJpYnV0ZXMKKy8qMDMqLyAgL1wvPi9nLC8vc3RyaXAgc2luZ2xldCB0ZXJtaW5hdG9ycworLyowNCovICAvPChicnxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtfGVtYmVkfGFyZWEpKChccypcUyo9IlteIl0qIikqKT4vZywvL3Rlcm1pbmF0ZSBzaW5nbGV0IHRhZ3MKKy8qMDUqLyAgLyg8XHcrXHMrKFx3Kj0iW14iXSoiXHMrKSopKGNoZWNrZWR8Y29tcGFjdHxkZWNsYXJlfGRlZmVyfGRpc2FibGVkfGlzbWFwfG11bHRpcGxlfG5vKGhyZWZ8cmVzaXplfHNoYWRlfHdyYXApfHJlYWRvbmx5fHNlbGVjdGVkKShbXHM+XSkvZ2ksLy9leHBhbmQgc2luZ2xldCBhdHRyaWJ1dGVzCisvKjA2Ki8gIC8oPSJbXiddKiknKFteJyJdKiIpLywvL2NoZWNrIHF1b3RlIG5lc3RpbmcKKy8qMDcqLyAgLyYoPz0oPyEoI1swLTldezIsNX07fFthLXpBLVowLTldezIsNn07fCN4WzAtOWEtZkEtRl17Miw0fTspKVtePF0qPikvZywvL2V4cGFuZCBxdWVyeSBhbXBlcnNhbmRzIG5vdCBpbiBodG1sIGVudGl0aWVzCisvKjA4Ki8gIC88XHMrL2csLy9zdHJpcCB0YWdzdGFydCB3aGl0ZXNwYWNlCisvKjA5Ki8gIC9ccysoXC8pPz4vZywvL3RyaW0gd2hpdGVzcGFjZQorLyoxMCovICAvXHN7Mix9L2csLy90cmltIGV4dHJhIHdoaXRlc3BhY2UKKy8qMTEqLyAgL1xzKyhbXj1cc10rKSgoPSJbXiJdKyIpfChbXHM+XSkpL2csLy8gbG93ZXJjYXNlIGF0dHJpYnV0ZSBuYW1lcworLyoxMiovICAvXHMrY29udGVudGVkaXRhYmxlKD1bXj5cc1wvXSopPy9naSwvL3N0cmlwIGNvbnRlbnRlZGl0YWJsZQorLyoxMyovICAvKChocmVmfHNyYyk9IikoW15cc10qKSIvZywgLy9maW5kIGhyZWYgYW5kIHNyYyBmb3Igc3RyaXBCYXNlSHJlZigpCisvKjE0Ki8gIC88XC8/KGRpdnxwfGhbMS02XXx0YWJsZXx0cnx0ZHx0aHx1bHxvbHxsaXxkbHxkdHxkZHxibG9ja3F1b3RlfG9iamVjdHxicnxocnxpbWd8ZW1iZWR8cGFyYW18cHJlfHNjcmlwdHxodG1sfGhlYWR8Ym9keXxtZXRhfGxpbmt8dGl0bGV8YXJlYXxpbnB1dHxmb3JtfHRleHRhcmVhfHNlbGVjdHxvcHRpb24pW14+XSo+L2csCisvKjE1Ki8gIC88XC8oZGl2fHB8aFsxLTZdfHRhYmxlfHRyfHVsfG9sfGRsfGJsb2NrcXVvdGV8aHRtbHxoZWFkfGJvZHl8c2NyaXB0fGZvcm18c2VsZWN0KSggW14+XSopPz4vZywvL2Jsb2NrbGV2ZWwgY2xvc2luZyB0YWcKKy8qMTYqLyAgLzwoZGl2fHB8aFsxLTZdfHRhYmxlfHRyfHVsfG9sfGRsfGJsb2NrcXVvdGV8b2JqZWN0fGh0bWx8aGVhZHxib2R5fHNjcmlwdHxmb3JtfHNlbGVjdCkoIFtePl0qKT8+L2csLy9ibG9ja2xldmVsIG9wZW5pbmcgdGFnCisvKjE3Ki8gIC88KHRkfHRofGxpfGR0fGRkfG9wdGlvbnxicnxocnxlbWJlZHxwYXJhbXxwcmV8bWV0YXxsaW5rfHRpdGxlfGFyZWF8aW5wdXR8dGV4dGFyZWEpW14+XSo+L2csLy9zaW5nbGV0IHRhZyBvciBvdXRwdXQgb24gMSBsaW5lCisvKjE4Ki8gIC8oXnw8XC8ocHJlfHNjcmlwdCk+KShcc3xbXlxzXSkqPyg8KHByZXxzY3JpcHQpW14+XSo+fCQpL2csLy9maW5kIGNvbnRlbnQgTk9UIGluc2lkZSBwcmUgYW5kIHNjcmlwdCB0YWdzCisvKjE5Ki8gIC8oPHByZVtePl0qPikoW1xzXFNdKSo/KDxcL3ByZT4pL2csLy9maW5kIGNvbnRlbnQgaW5zaWRlIHByZSB0YWdzCisvKjIwKi8gIC8oXnw8IS0tW1xzXFNdKj8tLT4pKFtcc1xTXSo/KSg/PTwhLS1bXHNcU10qPy0tPnwkKS9nLC8vZmluZCBjb250ZW50IE5PVCBpbnNpZGUgY29tbWVudHMKKy8qMjEqLyAgL1xTKj0iIi9nLCAvL2ZpbmQgZW1wdHkgYXR0cmlidXRlcworLyoyMiovICAvPCEtLVtcc1xTXSo/LS0+fDxcP1tcc1xTXSo/XD8+fDxcLz9cd1tePl0qPi9nLCAvL2ZpbmQgYWxsIHRhZ3MsIGluY2x1ZGluZyBjb21tZW50cyBhbmQgcGhwCisvKjIzKi8gIC8oXnw8XC9zY3JpcHQ+KVtcc1xTXSo/KDxzY3JpcHRbXj5dKj58JCkvZyAvL2ZpbmQgY29udGVudCBOT1QgaW5zaWRlIHNjcmlwdCB0YWdzCitdOworLy8gY29tcGlsZSBmb3IgcGVyZm9ybWFuY2U7IFdlYktpdCBkb2Vzbid0IHN1cHBvcnQgdGhpcwordmFyIHRlc3RSRSA9IG5ldyBSZWdFeHAoKS5jb21waWxlKFhpbmhhLlJlZ0V4cENhY2hlWzNdKTsKK2lmICh0eXBlb2YgdGVzdFJFICE9ICd1bmRlZmluZWQnKSB7CisJZm9yICh2YXIgaT0wOyBpPFhpbmhhLlJlZ0V4cENhY2hlLmxlbmd0aDtpKysgKSB7CisJCVhpbmhhLlJlZ0V4cENhY2hlW2ldID0gbmV3IFJlZ0V4cCgpLmNvbXBpbGUoWGluaGEuUmVnRXhwQ2FjaGVbaV0pOworCX0KK30KKworLyoqIAorICAqIENsZWFucyBIVE1MIGludG8gd2VsbGZvcm1lZCB4aHRtbAorICAqLworWGluaGEucHJvdG90eXBlLmNsZWFuSFRNTCA9IGZ1bmN0aW9uKHNIdG1sKSB7CisJdmFyIGMgPSBYaW5oYS5SZWdFeHBDYWNoZTsKKwlzSHRtbCA9IHNIdG1sLgorCQlyZXBsYWNlKGNbMF0sIGZ1bmN0aW9uKHN0cikgeyByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCk7IH0gKS4vL2xvd2VyY2FzZSB0YWdzL2F0dHJpYnV0ZSBuYW1lcworCQlyZXBsYWNlKGNbMV0sICcgJykuLy9zdHJpcCBfbW96IGF0dHJpYnV0ZXMKKwkJcmVwbGFjZShjWzEyXSwgJyAnKS4vL3N0cmlwIGNvbnRlbnRlZGl0YWJsZQorCQlyZXBsYWNlKGNbMl0sICc9IiQyJDQkNSIkMycpLi8vYWRkIGF0dHJpYnV0ZSBxdW90ZXMKKwkJcmVwbGFjZShjWzIxXSwgJyAnKS4vL3N0cmlwIGVtcHR5IGF0dHJpYnV0ZXMKKwkJcmVwbGFjZShjWzExXSwgZnVuY3Rpb24oc3RyLCBwMSwgcDIpIHsgcmV0dXJuICcgJytwMS50b0xvd2VyQ2FzZSgpK3AyOyB9KS4vL2xvd2VyY2FzZSBhdHRyaWJ1dGUgbmFtZXMKKwkJcmVwbGFjZShjWzNdLCAnPicpLi8vc3RyaXAgc2luZ2xldCB0ZXJtaW5hdG9ycworCQlyZXBsYWNlKGNbOV0sICckMT4nKS4vL3RyaW0gd2hpdGVzcGFjZQorCQlyZXBsYWNlKGNbNV0sICckMSQzPSIkMyIkNScpLi8vZXhwYW5kIHNpbmdsZXQgYXR0cmlidXRlcworCQlyZXBsYWNlKGNbNF0sICc8JDEkMiAvPicpLi8vdGVybWluYXRlIHNpbmdsZXQgdGFncworCQlyZXBsYWNlKGNbNl0sICckMSQyJykuLy9jaGVjayBxdW90ZSBuZXN0aW5nCisJCXJlcGxhY2UoY1s3XSwgJyZhbXA7JykuLy9leHBhbmQgcXVlcnkgYW1wZXJzYW5kcworCQlyZXBsYWNlKGNbOF0sICc8JykuLy9zdHJpcCB0YWdzdGFydCB3aGl0ZXNwYWNlCisJCXJlcGxhY2UoY1sxMF0sICcgJyk7Ly90cmltIGV4dHJhIHdoaXRlc3BhY2UKKwlpZihYaW5oYS5pc19pZSAmJiBjWzEzXS50ZXN0KHNIdG1sKSkgeworICAgICAgICAgIHNIdG1sID0gc0h0bWwucmVwbGFjZShjWzEzXSwnJDEnK1hpbmhhLl9lc2NhcGVEb2xsYXJzKHRoaXMuc3RyaXBCYXNlVVJMKFJlZ0V4cC4kMykpKyciJyk7CisJfQorCisJaWYodGhpcy5jb25maWcub25seTdCaXRQcmludGFibGVzSW5VUkxzKSB7CisJCWlmIChYaW5oYS5pc19pZSkgY1sxM10udGVzdChzSHRtbCk7IC8vIG9kZGx5IHRoZSB0ZXN0IGJlbG93IG9ubHkgdHJpZ2dlcnMgd2hlbiB3ZSBjYWxsIHRoaXMgb25jZSBiZWZvcmUgKElFNiksIGluIE1veiBpdCBmYWlscyBpZiB0ZXN0ZWQgdHdpY2UKKwkJaWYgKCBjWzEzXS50ZXN0KHNIdG1sKSkgeworCQkJdHJ5IHsgLy9Nb3ppbGxhIHJldHVybnMgYW4gaW5jb3JyZWN0bHkgZW5jb2RlZCB2YWx1ZSB3aXRoIGlubmVySFRNTAorICAgICAgICAgICAgICAgICAgICAgICAgICBzSHRtbCA9IHNIdG1sLnJlcGxhY2UoY1sxM10sICckMScrWGluaGEuX2VzY2FwZURvbGxhcnMoZGVjb2RlVVJJQ29tcG9uZW50KFJlZ0V4cC4kMykucmVwbGFjZSgvKFteIS1+XSt8JVswLTldKykvZywgZnVuY3Rpb24oY2hyKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JldHVybiBlc2NhcGUoY2hyKTt9KSkrJyInKTsKKwkJCX0gY2F0Y2ggKGUpIHsgLy8gb25jZSB0aGUgVVJMIGlzIGVzY2FwZSgpZWQsIHlvdSBjYW4ndCBkZWNvZGVVUklDb21wb25lbnQoKSBpdCBhbnltb3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNIdG1sID0gc0h0bWwucmVwbGFjZShjWzEzXSwgJyQxJytYaW5oYS5fZXNjYXBlRG9sbGFycyhSZWdFeHAuJDMucmVwbGFjZSgvKFteIS1+XSt8JVswLTldKykvZyxmdW5jdGlvbihjaHIpe3JldHVybiBlc2NhcGUoY2hyKTt9KSsnIicpKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gc0h0bWw7Cit9OworCisvKioKKyAgKiBQcmV0dHlmaWVzIGh0bWwgYnkgaW5zZXJ0aW5nIGxpbmVicmVha3MgYmVmb3JlIHRhZ3MsIGFuZCBpbmRlbnRpbmcgYmxvY2tsZXZlbCB0YWdzCisgICovCitYaW5oYS5pbmRlbnQgPSBmdW5jdGlvbihzLCBzaW5kZW50Q2hhcikgeworCVhpbmhhLl9fbmluZGVudCA9IDA7CisJWGluaGEuX19zaW5kZW50ID0gIiI7CisJWGluaGEuX19zaW5kZW50Q2hhciA9ICh0eXBlb2Ygc2luZGVudENoYXIgPT0gInVuZGVmaW5lZCIpID8gIiAgIiA6IHNpbmRlbnRDaGFyOworCXZhciBjID0gWGluaGEuUmVnRXhwQ2FjaGU7CisJaWYoWGluaGEuaXNfZ2Vja28pIHsgLy9tb3ogY2hhbmdlcyByZXR1cm5zIGludG8gPGJyPiBpbnNpZGUgPHByZT4gdGFncworCQlzID0gcy5yZXBsYWNlKGNbMTldLCBmdW5jdGlvbihzdHIpe3JldHVybiBzdHIucmVwbGFjZSgvPGJyIFwvPi9nLCJcbiIpfSk7CisJfQorCXMgPSBzLnJlcGxhY2UoY1sxOF0sIGZ1bmN0aW9uKHN0cm4pIHsgLy9za2lwIHByZSBhbmQgc2NyaXB0IHRhZ3MKKwkgIHN0cm4gPSBzdHJuLnJlcGxhY2UoY1syMF0sIGZ1bmN0aW9uKHN0LCQxLCQyKSB7IC8vZXhjbHVkZSBjb21tZW50cworCQlzdHJpbmcgPSAkMi5yZXBsYWNlKC9bXG5ccl0vZ2ksICIgIikucmVwbGFjZSgvXHMrL2dpLCIgIikucmVwbGFjZShjWzE0XSwgZnVuY3Rpb24oc3RyKSB7CisJCQlpZiAoc3RyLm1hdGNoKGNbMTZdKSkgeworCQkJCXZhciBzID0gIlxuIiArIFhpbmhhLl9fc2luZGVudCArIHN0cjsKKwkJCQkvLyBibG9ja2xldmVsIG9wZW5pbmd0YWcgLSBpbmNyZWFzZSBpbmRlbnQKKwkJCQlYaW5oYS5fX3NpbmRlbnQgKz0gWGluaGEuX19zaW5kZW50Q2hhcjsKKwkJCQkrK1hpbmhhLl9fbmluZGVudDsKKwkJCQlyZXR1cm4gczsKKwkJCX0gZWxzZSBpZiAoc3RyLm1hdGNoKGNbMTVdKSkgeworCQkJCS8vIGJsb2NrbGV2ZWwgY2xvc2luZ3RhZyAtIGRlY3JlYXNlIGluZGVudAorCQkJCS0tWGluaGEuX19uaW5kZW50OworCQkJCVhpbmhhLl9fc2luZGVudCA9ICIiOworCQkJCWZvciAodmFyIGk9WGluaGEuX19uaW5kZW50O2k+MDstLWkpIHsKKwkJCQkJWGluaGEuX19zaW5kZW50ICs9IFhpbmhhLl9fc2luZGVudENoYXI7CisJCQkJfQorCQkJCXJldHVybiAiXG4iICsgWGluaGEuX19zaW5kZW50ICsgc3RyOworCQkJfSBlbHNlIGlmIChzdHIubWF0Y2goY1sxN10pKSB7CisJCQkJLy8gc2luZ2xldCB0YWcKKwkJCQlyZXR1cm4gIlxuIiArIFhpbmhhLl9fc2luZGVudCArIHN0cjsKKwkJCX0KKwkJCXJldHVybiBzdHI7IC8vIHRoaXMgd29uJ3QgYWN0dWFsbHkgaGFwcGVuCisJCX0pOworCQlyZXR1cm4gJDEgKyBzdHJpbmc7CisJICB9KTtyZXR1cm4gc3RybjsKKyAgICB9KTsKKyAgICAvL2ZpbmFsIGNsZWFudXAKKyAgICBzID0gcy5yZXBsYWNlKC9eXHMqLywnJykuLy9zdHJpcCBsZWFkaW5nIHdoaXRlc3BhY2UKKyAgICAgICAgcmVwbGFjZSgvICtcbi9nLCdcbicpLi8vc3RyaXAgc3BhY2VzIGF0IGVuZCBvZiBsaW5lcworICAgICAgICByZXBsYWNlKC9bXHJcbl0rKFxzKyk8XC9zY3JpcHQ+L2csJ1xuJDE8L3NjcmlwdD4nKTsvL3N0cmlwIHJldHVybnMgYWRkZWQgaW50byBzY3JpcHRzCisgICAgcmV0dXJuIHM7Cit9OworCitYaW5oYS5nZXRIVE1MID0gZnVuY3Rpb24ocm9vdCwgb3V0cHV0Um9vdCwgZWRpdG9yKSB7CisJdmFyIGh0bWwgPSAiIjsKKwl2YXIgYyA9IFhpbmhhLlJlZ0V4cENhY2hlOworCisJaWYocm9vdC5ub2RlVHlwZSA9PSAxMSkgey8vZG9jdW1lbnQgZnJhZ21lbnQKKwkgICAgLy93ZSBjYW4ndCBnZXQgaW5uZXJIVE1MIGZyb20gdGhlIHJvb3QgKHR5cGUgMTEpIG5vZGUsIHNvIHdlIAorCSAgICAvL2NvcHkgYWxsIHRoZSBjaGlsZCBub2RlcyBpbnRvIGEgbmV3IGRpdiBhbmQgZ2V0IGlubmVySFRNTCBmcm9tIHRoZSBkaXYKKwkgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworCSAgICB2YXIgdGVtcCA9IHJvb3QuaW5zZXJ0QmVmb3JlKGRpdixyb290LmZpcnN0Q2hpbGQpOworCSAgICBmb3IgKGogPSB0ZW1wLm5leHRTaWJsaW5nOyBqOyBqID0gai5uZXh0U2libGluZykgeyAKKwkgICAgCQl0ZW1wLmFwcGVuZENoaWxkKGouY2xvbmVOb2RlKHRydWUpKTsKKwkgICAgfQorCQlodG1sICs9IHRlbXAuaW5uZXJIVE1MLnJlcGxhY2UoY1syM10sIGZ1bmN0aW9uKHN0cm4pIHsgLy9za2lwIGNvbnRlbnQgaW5zaWRlIHNjcmlwdCB0YWdzCisJCQlzdHJuID0gc3Rybi5yZXBsYWNlKGNbMjJdLCBmdW5jdGlvbih0YWcpeworCQkJCWlmKC9ePFshXD9dLy50ZXN0KHRhZykpIHJldHVybiB0YWc7IC8vc2tpcCBjb21tZW50cyBhbmQgcGhwIHRhZ3MKKwkJCQllbHNlIHJldHVybiBlZGl0b3IuY2xlYW5IVE1MKHRhZyl9KTsKKwkJCXJldHVybiBzdHJuOworCQl9KTsKKworCX0gZWxzZSB7CisKKwkJdmFyIHJvb3RfdGFnID0gKHJvb3Qubm9kZVR5cGUgPT0gMSkgPyByb290LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA6ICcnOyAKKwkJaWYgKG91dHB1dFJvb3QpIHsgLy9vbmx5IGhhcHBlbnMgd2l0aCA8aHRtbD4gdGFnIGluIGZ1bGxwYWdlIG1vZGUKKwkJCWh0bWwgKz0gIjwiICsgcm9vdF90YWc7CisJCQl2YXIgYXR0cnMgPSByb290LmF0dHJpYnV0ZXM7IC8vIHN0cmFuZ2VseSwgdGhpcyBkb2Vzbid0IHdvcmsgaW4gbW96CisJCQlmb3IgKGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyArK2kpIHsKKwkJCQl2YXIgYSA9IGF0dHJzLml0ZW0oaSk7CisJCQkJaWYgKCFhLnNwZWNpZmllZCkgeworCQkJCSAgY29udGludWU7CisJCQkJfQorCQkJCXZhciBuYW1lID0gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOworCQkJCXZhciB2YWx1ZSA9IGEubm9kZVZhbHVlOworCQkJCWh0bWwgKz0gIiAiICsgbmFtZSArICc9IicgKyB2YWx1ZSArICciJzsKKwkJCX0KKwkJCWh0bWwgKz0gIj4iOworCQl9CisJCWlmKHJvb3RfdGFnID09ICJodG1sIikgeworCQkJaW5uZXJodG1sID0gZWRpdG9yLl9kb2MuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTDsKKwkJfSBlbHNlIHsKKwkJCWlubmVyaHRtbCA9IHJvb3QuaW5uZXJIVE1MOworCQl9CisJCS8vcGFzcyB0YWdzIHRvIGNsZWFuSFRNTCgpIG9uZSBhdCBhIHRpbWUKKwkJLy9pbmNsdWRlcyBzdXBwb3J0IGZvciBodG1sUmVtb3ZlVGFncyBjb25maWcgb3B0aW9uCisJCWh0bWwgKz0gaW5uZXJodG1sLnJlcGxhY2UoY1syM10sIGZ1bmN0aW9uKHN0cm4pIHsgLy9za2lwIGNvbnRlbnQgaW5zaWRlIHNjcmlwdCB0YWdzCisJCQlzdHJuID0gc3Rybi5yZXBsYWNlKGNbMjJdLCBmdW5jdGlvbih0YWcpeworCQkJCWlmKC9ePFshXD9dLy50ZXN0KHRhZykpIHJldHVybiB0YWc7IC8vc2tpcCBjb21tZW50cyBhbmQgcGhwIHRhZ3MKKwkJCQllbHNlIGlmKCEoZWRpdG9yLmNvbmZpZy5odG1sUmVtb3ZlVGFncyAmJiBlZGl0b3IuY29uZmlnLmh0bWxSZW1vdmVUYWdzLnRlc3QodGFnLnJlcGxhY2UoLzwoW15ccz5cL10rKS8sJyQxJykpKSkKKwkJCQkJcmV0dXJuIGVkaXRvci5jbGVhbkhUTUwodGFnKTsKKwkJCQllbHNlIHJldHVybiAnJ30pOworCQkJcmV0dXJuIHN0cm47CisJCX0pOworCQkvL0lFIGRyb3BzICBhbGwgPC9saT4sPC9kdD4sPC9kZD4gdGFncyBpbiBhIGxpc3QgZXhjZXB0IHRoZSBsYXN0IG9uZQorCQlpZihYaW5oYS5pc19pZSkgeworCQkJaHRtbCA9IGh0bWwucmVwbGFjZSgvPChsaXxkZHxkdCkoIFtePl0qKT8+L2csJzwvJDE+PCQxJDI+JykuCisJCQkJcmVwbGFjZSgvKDxbdW9kXWxbXj5dKj5bXHNcU10qPyk8XC8obGl8ZGR8ZHQpPi9nLCAnJDEnKS4KKwkJCQlyZXBsYWNlKC9ccyo8XC8obGl8ZGR8ZHQpPihccyo8XC8obGl8ZGR8ZHQpPikrL2csICc8LyQxPicpLgorCQkJCXJlcGxhY2UoLyg8ZHRbXHM+XVtcc1xTXSo/KSg8XC9kW2R0XT4pKy9nLCAnJDE8L2R0PicpOworCQl9CisJCWlmKFhpbmhhLmlzX2dlY2tvKQorCQkJaHRtbCA9IGh0bWwucmVwbGFjZSgvPGJyIFwvPlxuJC8sICcnKTsgLy9zdHJpcCB0cmFpbGluZyA8YnI+IGFkZGVkIGJ5IG1vegorCQkvL0NsZWFudXAgcmVkdW5kYW50IHdoaXRlc3BhY2UgYmVmb3JlIDwvbGk+PC9kZD48L2R0PiBpbiBJRSBhbmQgTW96aWxsYQorCQlodG1sID0gaHRtbC5yZXBsYWNlKC9ccyooPFwvKGxpfGRkfGR0KT4pL2csICckMScpOworCQlpZiAob3V0cHV0Um9vdCkgeworCQkJaHRtbCArPSAiPC8iICsgcm9vdF90YWcgKyAiPiI7CisJCX0KKwkJaHRtbCA9IFhpbmhhLmluZGVudChodG1sKTsKKwl9OworLy8JaHRtbCA9IFhpbmhhLmh0bWxFbmNvZGUoaHRtbCk7CisKKwlyZXR1cm4gaHRtbDsKK307CisKKy8qKiAKKyAgKiBFc2NhcGVzIGRvbGxhciBzaWducyAoJCkgdG8gbWFrZSB0aGVtIHNhZmUgdG8gdXNlIGluIHJlZ2V4IHJlcGxhY2VtZW50IGZ1bmN0aW9ucyBieSByZXBsYWNpbmcgZWFjaCAkIGluIHRoZSBpbnB1dCB3aXRoICQkLgorICAqIAorICAqIFRoaXMgaXMgYWR2aXNhYmxlIGFueSB0aW1lIHRoZSByZXBsYWNlbWVudCBzdHJpbmcgZm9yIGEgY2FsbCB0byByZXBsYWNlKCkgaXMgYSB2YXJpYWJsZSBhbmQgY291bGQgY29udGFpbiBkb2xsYXIgc2lnbnMgdGhhdCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlZmVyZW5jZXMgdG8gY2FwdHVyZWQgZ3JvdXBzIChlLmcuLCB3aGVuIHlvdSB3YW50IHRoZSB0ZXh0ICIkMTAiIGFuZCBub3QgdGhlIGZpcnN0IGNhcHR1cmVkIGdyb3VwIGZvbGxvd2VkIGJ5IGEgMCkuCisgICogU2VlIGh0dHA6Ly90cmFjLnhpbmhhLm9yZy90aWNrZXQvMTMzNworICAqLworWGluaGEuX2VzY2FwZURvbGxhcnMgPSBmdW5jdGlvbihzdHIpIHsKKyAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cJC9nLCAiJCQkJCIpOworfTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0dldEh0bWwvbGFuZy9wdF9ici5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvR2V0SHRtbC9sYW5nL3B0X2JyLmpzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9HZXRIdG1sL2xhbmcvcHRfYnIuanMKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvR2V0SHRtbC9sYW5nL3B0X2JyLmpzCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9JbmxpbmVTdHlsZXIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9JbmxpbmVTdHlsZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMwMzVjZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL0lubGluZVN0eWxlci5qcwpAQCAtMCwwICsxLDU2NiBAQAorWGluaGEuSW5saW5lU3R5bGVyID0gZnVuY3Rpb24oZWxlbWVudCwgZWRpdG9yLCBkaWFsb2csIGRvYykKK3sKKyAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDsKKyAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisgIHRoaXMuZGlhbG9nID0gZGlhbG9nOworICB0aGlzLmRvYyA9IGRvYyA/IGRvYyA6IGRvY3VtZW50OworICB0aGlzLmlucHV0cyA9IHsKKyAgICBzdHlsZXMgOiB7fSwKKyAgICBhdXggOiB7fQorICB9CisgIHRoaXMuc3R5bGVzID0ge307CisgIHRoaXMuYXV4RGF0YSA9IHt9OyAvL3VuaXRzIGFuZCBzdWNoCit9CisKK1hpbmhhLklubGluZVN0eWxlci5nZXRMZW5ndGggPSBmdW5jdGlvbih2YWx1ZSkKK3sKKyAgdmFyIGxlbiA9IHBhcnNlSW50KHZhbHVlKTsKKyAgaWYgKGlzTmFOKGxlbikpIAorICB7CisgICAgbGVuID0gIiI7CisgIH0KKyAgcmV0dXJuIGxlbjsKK307CisKKy8vIEFwcGxpZXMgdGhlIHN0eWxlIGZvdW5kIGluICJwYXJhbXMiIHRvIHRoZSBnaXZlbiBlbGVtZW50LgorWGluaGEuSW5saW5lU3R5bGVyLnByb3RvdHlwZS5hcHBseVN0eWxlID0gZnVuY3Rpb24ocGFyYW1zLCBfaWZNYXRjaFJlLCBfZXhjZXB0TWF0Y2hSZSkKK3sKKyAgdmFyIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7CisgIHZhciBzdHlsZSA9IGVsZW1lbnQuc3R5bGU7CisKKyAgZm9yICh2YXIgaSBpbiBwYXJhbXMpIAorICB7CisgICAgaWYgKHR5cGVvZiBwYXJhbXNbaV0gPT0gJ2Z1bmN0aW9uJykgCisgICAgICBjb250aW51ZTsKKyAgICBpZiAocGFyYW1zW2ldICE9IG51bGwpCisgICAgICB2YXIgdmFsID0gcGFyYW1zW2ldLnZhbHVlIHx8IHBhcmFtc1tpXTsKKyAgICAKKyAgICBpZihfaWZNYXRjaFJlICYmICFpLm1hdGNoKF9pZk1hdGNoUmUpKSAgICAgICAgY29udGludWU7CisgICAgaWYoX2V4Y2VwdE1hdGNoUmUgJiYgaS5tYXRjaChfZXhjZXB0TWF0Y2hSZSkpIGNvbnRpbnVlOworICAgIAorICAgIHN3aXRjaCAoaSkKKyAgICB7CisgICAgY2FzZSAiYmFja2dyb3VuZEltYWdlIjoKKyAgICAgIGlmICgvXFMvLnRlc3QodmFsKSkgCisgICAgICB7CisgICAgICAgIHN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICJ1cmwoIiArIHZhbCArICIpIjsKKyAgICAgIH0KKyAgICAgIGVsc2UgCisgICAgICB7CisgICAgICAgIHN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICJub25lIjsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgImJvcmRlckNvbGxhcHNlIjoKKyAgICAgIHN0eWxlLmJvcmRlckNvbGxhcHNlID0gcGFyYW1zW2ldID09ICJvbiIgPyAiY29sbGFwc2UiIDogInNlcGFyYXRlIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIndpZHRoIjoKKyAgICAgIGlmICgvXFMvLnRlc3QodmFsKSkgCisgICAgICB7CisgICAgICAgIHN0eWxlLndpZHRoID0gdmFsICsgdGhpcy5pbnB1dHMuYXV4WyJ3aWR0aFVuaXQiXS52YWx1ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgCisgICAgICB7CisgICAgICAgIHN0eWxlLndpZHRoID0gIiI7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICJoZWlnaHQiOgorICAgICAgaWYgKC9cUy8udGVzdCh2YWwpKSAKKyAgICAgIHsKKyAgICAgICAgc3R5bGUuaGVpZ2h0ID0gdmFsICsgdGhpcy5pbnB1dHMuYXV4WyJoZWlnaHRVbml0Il0udmFsdWU7CisgICAgICB9CisgICAgICBlbHNlIAorICAgICAgeworICAgICAgICBzdHlsZS5oZWlnaHQgPSAiIjsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgInRleHRBbGlnbiI6CisgICAgICBpZiAodmFsID09ICJjaGFyIikgCisgICAgICB7CisgICAgICAgIHZhciBjaCA9IHRoaXMuaW5wdXRzLmF1eFsidGV4dEFsaWduQ2hhciJdLnZhbHVlOworICAgICAgICBpZiAoY2ggPT0gJyInKSAKKyAgICAgICAgeworICAgICAgICAgIGNoID0gJ1xcIic7CisgICAgICAgIH0KKyAgICAgICAgc3R5bGUudGV4dEFsaWduID0gJyInICsgY2ggKyAnIic7CisgICAgICB9CisgICAgICBlbHNlIAorICAgICAgICBpZiAodmFsID09ICItIikgCisgICAgICB7CisgICAgICAgIHN0eWxlLnRleHRBbGlnbiA9ICIiOworICAgICAgfQorICAgICAgZWxzZSAKKyAgICAgIHsKKyAgICAgICAgc3R5bGUudGV4dEFsaWduID0gdmFsOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAidmVydGljYWxBbGlnbiI6CisgICAgICBlbGVtZW50LnZBbGlnbiA9ICIiOworICAgICAgaWYgKHZhbCA9PSAiLSIpIAorICAgICAgeworICAgICAgICBzdHlsZS52ZXJ0aWNhbEFsaWduID0gIiI7CisgICAgICAgIAorICAgICAgfQorICAgICAgZWxzZSAKKyAgICAgIHsKKyAgICAgICAgc3R5bGUudmVydGljYWxBbGlnbiA9IHZhbDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgImZsb2F0IjoKKyAgICAgIGlmIChYaW5oYS5pc19pZSkgeworICAgICAgICBzdHlsZS5zdHlsZUZsb2F0ID0gdmFsOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0eWxlLmNzc0Zsb2F0ID0gdmFsOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAiYm9yZGVyV2lkdGgiOgorICAgICAgc3R5bGVbaV0gPSB2YWwgPyB2YWwgKyAicHgiIDogJzBweCc7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiAgICAgIAorICAgICAgc3R5bGVbaV0gPSB2YWw7CisgICAgICBicmVhazsKKyAgICAgIC8vIAkJICAgIGNhc2UgImZfc3RfbWFyZ2luIjoKKyAgICAgIC8vIAkJCXN0eWxlLm1hcmdpbiA9IHZhbCArICJweCI7CisgICAgICAvLyAJCQlicmVhazsKKyAgICAgIC8vIAkJICAgIGNhc2UgImZfc3RfcGFkZGluZyI6CisgICAgICAvLyAJCQlzdHlsZS5wYWRkaW5nID0gdmFsICsgInB4IjsKKyAgICAgIC8vIAkJCWJyZWFrOworICAgIH0KKyAgfQorfTsKKworWGluaGEuSW5saW5lU3R5bGVyLnByb3RvdHlwZS5hcHBseVN0eWxlRXhjZXB0TWF0Y2ggPSBmdW5jdGlvbihwYXJhbXMsIGV4Y2VwdE1hdGNoUmUpCit7CisgIHJldHVybiB0aGlzLmFwcGx5U3R5bGUocGFyYW1zLCBudWxsLCBleGNlcHRNYXRjaFJlKTsKK307CisKK1hpbmhhLklubGluZVN0eWxlci5wcm90b3R5cGUuYXBwbHlTdHlsZUlmTWF0Y2ggICAgPSBmdW5jdGlvbihwYXJhbXMsIGlmTWF0Y2hSZSkKK3sKKyAgcmV0dXJuIHRoaXMuYXBwbHlTdHlsZShwYXJhbXMsIGlmTWF0Y2hSZSk7Cit9OworCitYaW5oYS5JbmxpbmVTdHlsZXIucHJvdG90eXBlLmNyZWF0ZVN0eWxlTGF5b3V0RmllbGRzZXQgPSBmdW5jdGlvbigpCit7CisgIHZhciBzZWxmID0gdGhpczsKKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworICB2YXIgZG9jID0gdGhpcy5kb2M7CisgIHZhciBlbCA9IHRoaXMuZWxlbWVudDsKKyAgdmFyIGZpZWxkc2V0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0Iik7CisgIHZhciBsZWdlbmQgPSBkb2MuY3JlYXRlRWxlbWVudCgibGVnZW5kIik7CisgIGZpZWxkc2V0LmFwcGVuZENoaWxkKGxlZ2VuZCk7CisgIGxlZ2VuZC5pbm5lckhUTUwgPSBYaW5oYS5fbGMoIkxheW91dCIsICJJbmxpbmVTdHlsZXIiKTsKKyAgdmFyIHRhYmxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7CisgIGZpZWxkc2V0LmFwcGVuZENoaWxkKHRhYmxlKTsKKyAgdGFibGUuc3R5bGUud2lkdGggPSAiMTAwJSI7CisgIHZhciB0Ym9keSA9IGRvYy5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpOworICB0YWJsZS5hcHBlbmRDaGlsZCh0Ym9keSk7CisgIAorICB2YXIgdGFnbmFtZSA9IGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKKyAgdmFyIHRyLCB0ZCwgaW5wdXQsIHNlbGVjdCwgb3B0aW9uLCBvcHRpb25zLCBpOworICAKKyAgaWYgKHRhZ25hbWUgIT0gInRkIiAmJiB0YWduYW1lICE9ICJ0ciIgJiYgdGFnbmFtZSAhPSAidGgiKSAKKyAgeworICAgIHRyID0gZG9jLmNyZWF0ZUVsZW1lbnQoInRyIik7CisgICAgdGJvZHkuYXBwZW5kQ2hpbGQodHIpOworICAgIHRkID0gZG9jLmNyZWF0ZUVsZW1lbnQoInRkIik7CisgICAgdGQuY2xhc3NOYW1lID0gImxhYmVsIjsKKyAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CisgICAgdGQuaW5uZXJIVE1MID0gWGluaGEuX2xjKCJGbG9hdCIsICJJbmxpbmVTdHlsZXIiKSArICI6IjsKKyAgICB0ZCA9IGRvYy5jcmVhdGVFbGVtZW50KCJ0ZCIpOworICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKKyAgICBzZWxlY3QgPSBkb2MuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7CisgICAgc2VsZWN0Lm5hbWUgPSB0aGlzLmRpYWxvZy5jcmVhdGVJZCgiZmxvYXQiKTsKKyAgICB0ZC5hcHBlbmRDaGlsZChzZWxlY3QpOworICAgIHRoaXMuaW5wdXRzLnN0eWxlc1snZmxvYXQnXSA9IHNlbGVjdDsKKyAgICAKKyAgICBvcHRpb25zID0gWyJOb25lIiwgIkxlZnQiLCAiUmlnaHQiXTsKKyAgICAvKiBGb3IgbGNfcGFyc2Vfc3RyaW5ncy5waHAKKyAgIAorICAgICAgWGluaGEuX2xjKCJOb25lIiwgIklubGluZVN0eWxlciIpOworICAgICAgWGluaGEuX2xjKCJMZWZ0IiwgIklubGluZVN0eWxlciIpOworICAgICAgWGluaGEuX2xjKCJSaWdodCIsICJJbmxpbmVTdHlsZXIiKTsKKyAgICAgIAorICAgICovCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgKytpKSAKKyAgICB7CisgICAgICB2YXIgVmFsID0gb3B0aW9uc1tpXTsKKyAgICAgIHZhciB2YWwgPSBvcHRpb25zW2ldLnRvTG93ZXJDYXNlKCk7CisgICAgICBvcHRpb24gPSBkb2MuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7CisgICAgICBvcHRpb24uaW5uZXJIVE1MID0gWGluaGEuX2xjKFZhbCwgIklubGluZVN0eWxlciIpOworICAgICAgb3B0aW9uLnZhbHVlID0gdmFsOworICAgICAgaWYgKFhpbmhhLmlzX2llKSB7CisgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9ICgoIiIgKyBlbC5zdHlsZS5zdHlsZUZsb2F0KS50b0xvd2VyQ2FzZSgpID09IHZhbCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gKCgiIiArIGVsLnN0eWxlLmNzc0Zsb2F0KS50b0xvd2VyQ2FzZSgpID09IHZhbCk7CisgICAgICB9CisgICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKKyAgICB9CisgIH0KKyAgCisgIHRyID0gZG9jLmNyZWF0ZUVsZW1lbnQoInRyIik7CisgIHRib2R5LmFwcGVuZENoaWxkKHRyKTsKKyAgdGQgPSBkb2MuY3JlYXRlRWxlbWVudCgidGQiKTsKKyAgdGQuY2xhc3NOYW1lID0gImxhYmVsIjsKKyAgdHIuYXBwZW5kQ2hpbGQodGQpOworICB0ZC5pbm5lckhUTUwgPSBYaW5oYS5fbGMoIldpZHRoIiwgIklubGluZVN0eWxlciIpICsgIjoiOworICB0ZCA9IGRvYy5jcmVhdGVFbGVtZW50KCJ0ZCIpOworICB0ci5hcHBlbmRDaGlsZCh0ZCk7CisgIGlucHV0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CisgIGlucHV0Lm5hbWUgPSB0aGlzLmRpYWxvZy5jcmVhdGVJZCgid2lkdGgiKTsKKyAgaW5wdXQudHlwZSA9ICJ0ZXh0IjsKKyAgaW5wdXQudmFsdWUgPSBYaW5oYS5JbmxpbmVTdHlsZXIuZ2V0TGVuZ3RoKGVsLnN0eWxlLndpZHRoKTsKKyAgaW5wdXQuc2l6ZSA9ICI1IjsKKyAgdGhpcy5pbnB1dHMuc3R5bGVzWyd3aWR0aCddID0gaW5wdXQ7CisgIGlucHV0LnN0eWxlLm1hcmdpblJpZ2h0ID0gIjAuNWVtIjsKKyAgdGQuYXBwZW5kQ2hpbGQoaW5wdXQpOworICBzZWxlY3QgPSBkb2MuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7CisgIHNlbGVjdC5uYW1lID0gdGhpcy5kaWFsb2cuY3JlYXRlSWQoIndpZHRoVW5pdCIpOworICB0aGlzLmlucHV0cy5hdXhbJ3dpZHRoVW5pdCddID0gc2VsZWN0OworICBvcHRpb24gPSBkb2MuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7CisgIG9wdGlvbi5pbm5lckhUTUwgPSBYaW5oYS5fbGMoInBlcmNlbnQiLCAiSW5saW5lU3R5bGVyIik7CisgIG9wdGlvbi52YWx1ZSA9ICIlIjsKKyAgb3B0aW9uLnNlbGVjdGVkID0gLyUvLnRlc3QoZWwuc3R5bGUud2lkdGgpOworICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKKyAgb3B0aW9uID0gZG9jLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpOworICBvcHRpb24uaW5uZXJIVE1MID0gWGluaGEuX2xjKCJwaXhlbHMiLCAiSW5saW5lU3R5bGVyIik7CisgIG9wdGlvbi52YWx1ZSA9ICJweCI7CisgIG9wdGlvbi5zZWxlY3RlZCA9IC9weC8udGVzdChlbC5zdHlsZS53aWR0aCk7CisgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pOworICB0ZC5hcHBlbmRDaGlsZChzZWxlY3QpOworICAKKyAgc2VsZWN0LnN0eWxlLm1hcmdpblJpZ2h0ID0gIjAuNWVtIjsKKyAgdGQuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKFhpbmhhLl9sYygiVGV4dCBhbGlnbiIsICJJbmxpbmVTdHlsZXIiKSArICI6IikpOworICBzZWxlY3QgPSBkb2MuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7CisgIHNlbGVjdC5uYW1lID0gdGhpcy5kaWFsb2cuY3JlYXRlSWQoInRleHRBbGlnbiIpOworICBzZWxlY3Quc3R5bGUubWFyZ2luTGVmdCA9IHNlbGVjdC5zdHlsZS5tYXJnaW5SaWdodCA9ICIwLjVlbSI7CisgIHRkLmFwcGVuZENoaWxkKHNlbGVjdCk7CisgIHRoaXMuaW5wdXRzLnN0eWxlc1sndGV4dEFsaWduJ10gPSBzZWxlY3Q7CisgIG9wdGlvbnMgPSBbIkxlZnQiLCAiQ2VudGVyIiwgIlJpZ2h0IiwgIkp1c3RpZnkiLCAiLSJdOworICBpZiAodGFnbmFtZSA9PSAidGQiKSAKKyAgeworICAgIG9wdGlvbnMucHVzaCgiQ2hhciIpOworICB9CisgIAorICAvKiBGb3IgbGNfcGFyc2Vfc3RyaW5ncy5waHAKKyAgCisgICAgWGluaGEuX2xjKCJMZWZ0IiwgIklubGluZVN0eWxlciIpOworICAgIFhpbmhhLl9sYygiQ2VudGVyIiwgIklubGluZVN0eWxlciIpOworICAgIFhpbmhhLl9sYygiUmlnaHQiLCAiSW5saW5lU3R5bGVyIik7CisgICAgWGluaGEuX2xjKCJKdXN0aWZ5IiwgIklubGluZVN0eWxlciIpOworICAgIFhpbmhhLl9sYygiLSIsICJJbmxpbmVTdHlsZXIiKTsKKyAgICBYaW5oYS5fbGMoIkNoYXIiLCAiSW5saW5lU3R5bGVyIik7CisgICAgCisgICovCisgIAorICBpbnB1dCA9IGRvYy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOworICB0aGlzLmlucHV0cy5hdXhbJ3RleHRBbGlnbkNoYXInXSA9IGlucHV0OworICBpbnB1dC5uYW1lPSB0aGlzLmRpYWxvZy5jcmVhdGVJZCgidGV4dEFsaWduQ2hhciIpOworICBpbnB1dC5zaXplID0gIjEiOworICBpbnB1dC5zdHlsZS5mb250RmFtaWx5ID0gIm1vbm9zcGFjZSI7CisgIHRkLmFwcGVuZENoaWxkKGlucHV0KTsKKyAgCisgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7ICsraSkgCisgIHsKKyAgICB2YXIgVmFsID0gb3B0aW9uc1tpXTsKKyAgICB2YXIgdmFsID0gVmFsLnRvTG93ZXJDYXNlKCk7CisgICAgb3B0aW9uID0gZG9jLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpOworICAgIG9wdGlvbi52YWx1ZSA9IHZhbDsKKyAgICBvcHRpb24uaW5uZXJIVE1MID0gWGluaGEuX2xjKFZhbCwgIklubGluZVN0eWxlciIpOworICAgIG9wdGlvbi5zZWxlY3RlZCA9ICgoZWwuc3R5bGUudGV4dEFsaWduLnRvTG93ZXJDYXNlKCkgPT0gdmFsKSB8fCAoZWwuc3R5bGUudGV4dEFsaWduID09ICIiICYmIFZhbCA9PSAiLSIpKTsKKyAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKKyAgfQorICB2YXIgdGV4dEFsaWduQ2hhcklucHV0ID0gaW5wdXQ7CisgIGZ1bmN0aW9uIHNldENoYXJWaXNpYmlsaXR5KHZhbHVlKQorICB7CisgICAgdGV4dEFsaWduQ2hhcklucHV0LnN0eWxlLnZpc2liaWxpdHkgPSB2YWx1ZSA/ICJ2aXNpYmxlIiA6ICJoaWRkZW4iOworICAgIGlmICh2YWx1ZSkgCisgICAgeworICAgICAgdGV4dEFsaWduQ2hhcklucHV0LmZvY3VzKCk7CisgICAgICB0ZXh0QWxpZ25DaGFySW5wdXQuc2VsZWN0KCk7CisgICAgfQorICB9CisgIHNlbGVjdC5vbmNoYW5nZSA9IGZ1bmN0aW9uKCkKKyAgeworICAgIHNldENoYXJWaXNpYmlsaXR5KHRoaXMudmFsdWUgPT0gImNoYXIiKTsKKyAgfTsKKyAgc2V0Q2hhclZpc2liaWxpdHkoc2VsZWN0LnZhbHVlID09ICJjaGFyIik7CisgIAorICB0ciA9IGRvYy5jcmVhdGVFbGVtZW50KCJ0ciIpOworICB0Ym9keS5hcHBlbmRDaGlsZCh0cik7CisgIHRkID0gZG9jLmNyZWF0ZUVsZW1lbnQoInRkIik7CisgIHRkLmNsYXNzTmFtZSA9ICJsYWJlbCI7CisgIHRyLmFwcGVuZENoaWxkKHRkKTsKKyAgdGQuaW5uZXJIVE1MID0gWGluaGEuX2xjKCJIZWlnaHQiLCAiSW5saW5lU3R5bGVyIikgKyAiOiI7CisgIHRkID0gZG9jLmNyZWF0ZUVsZW1lbnQoInRkIik7CisgIHRyLmFwcGVuZENoaWxkKHRkKTsKKyAgaW5wdXQgPSBkb2MuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKKyAgaW5wdXQubmFtZSA9IHRoaXMuZGlhbG9nLmNyZWF0ZUlkKCJoZWlnaHQiKTsKKyAgaW5wdXQudHlwZSA9ICJ0ZXh0IjsKKyAgaW5wdXQudmFsdWUgPSBYaW5oYS5JbmxpbmVTdHlsZXIuZ2V0TGVuZ3RoKGVsLnN0eWxlLmhlaWdodCk7CisgIGlucHV0LnNpemUgPSAiNSI7CisgIHRoaXMuaW5wdXRzLnN0eWxlc1snaGVpZ2h0J10gPSBpbnB1dDsKKyAgaW5wdXQuc3R5bGUubWFyZ2luUmlnaHQgPSAiMC41ZW0iOworICB0ZC5hcHBlbmRDaGlsZChpbnB1dCk7CisgIHNlbGVjdCA9IGRvYy5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKKyAgc2VsZWN0Lm5hbWUgPSB0aGlzLmRpYWxvZy5jcmVhdGVJZCgiaGVpZ2h0VW5pdCIpOworICB0aGlzLmlucHV0cy5hdXhbJ2hlaWdodFVuaXQnXSA9IHNlbGVjdDsKKyAgb3B0aW9uID0gZG9jLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpOworICBvcHRpb24uaW5uZXJIVE1MID0gWGluaGEuX2xjKCJwZXJjZW50IiwgIklubGluZVN0eWxlciIpOworICBvcHRpb24udmFsdWUgPSAiJSI7CisgIG9wdGlvbi5zZWxlY3RlZCA9IC8lLy50ZXN0KGVsLnN0eWxlLmhlaWdodCk7CisgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pOworICBvcHRpb24gPSBkb2MuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7CisgIG9wdGlvbi5pbm5lckhUTUwgPSBYaW5oYS5fbGMoInBpeGVscyIsICJJbmxpbmVTdHlsZXIiKTsKKyAgb3B0aW9uLnZhbHVlID0gInB4IjsKKyAgb3B0aW9uLnNlbGVjdGVkID0gL3B4Ly50ZXN0KGVsLnN0eWxlLmhlaWdodCk7CisgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pOworICB0ZC5hcHBlbmRDaGlsZChzZWxlY3QpOworICAKKyAgc2VsZWN0LnN0eWxlLm1hcmdpblJpZ2h0ID0gIjAuNWVtIjsKKyAgdGQuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKFhpbmhhLl9sYygiVmVydGljYWwgYWxpZ24iLCAiSW5saW5lU3R5bGVyIikgKyAiOiIpKTsKKyAgc2VsZWN0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOworICBzZWxlY3QubmFtZSA9IHRoaXMuZGlhbG9nLmNyZWF0ZUlkKCJ2ZXJ0aWNhbEFsaWduIik7CisgIHRoaXMuaW5wdXRzLnN0eWxlc1sndmVydGljYWxBbGlnbiddID0gc2VsZWN0OworICBzZWxlY3Quc3R5bGUubWFyZ2luTGVmdCA9ICIwLjVlbSI7CisgIHRkLmFwcGVuZENoaWxkKHNlbGVjdCk7CisgIG9wdGlvbnMgPSBbIlRvcCIsICJNaWRkbGUiLCAiQm90dG9tIiwgIkJhc2VsaW5lIiwgIi0iXTsKKyAgLyogRm9yIGxjX3BhcnNlX3N0cmluZ3MucGhwCisgICAKKyAgIFhpbmhhLl9sYygiVG9wIiwgIklubGluZVN0eWxlciIpOworICAgWGluaGEuX2xjKCJNaWRkbGUiLCAiSW5saW5lU3R5bGVyIik7CisgICBYaW5oYS5fbGMoIkJvdHRvbSIsICJJbmxpbmVTdHlsZXIiKTsKKyAgIFhpbmhhLl9sYygiQmFzZWxpbmUiLCAiSW5saW5lU3R5bGVyIik7CisgICBYaW5oYS5fbGMoIi0iLCAiSW5saW5lU3R5bGVyIik7CisgICAKKyAgICovCisgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7ICsraSkgCisgIHsKKyAgICB2YXIgVmFsID0gb3B0aW9uc1tpXTsKKyAgICB2YXIgdmFsID0gVmFsLnRvTG93ZXJDYXNlKCk7CisgICAgb3B0aW9uID0gZG9jLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpOworICAgIG9wdGlvbi52YWx1ZSA9IHZhbDsKKyAgICBvcHRpb24uaW5uZXJIVE1MID0gWGluaGEuX2xjKFZhbCwgIklubGluZVN0eWxlciIpOworICAgIG9wdGlvbi5zZWxlY3RlZCA9ICgoZWwuc3R5bGUudmVydGljYWxBbGlnbi50b0xvd2VyQ2FzZSgpID09IHZhbCkgfHwgKGVsLnN0eWxlLnZlcnRpY2FsQWxpZ24gPT0gIiIgJiYgVmFsID09ICItIikpOworICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pOworICB9CisgIAorICByZXR1cm4gZmllbGRzZXQ7Cit9OworCisvLyBSZXR1cm5zIGFuIEhUTUwgZWxlbWVudCBjb250YWluaW5nIHRoZSBzdHlsZSBhdHRyaWJ1dGVzIGZvciB0aGUgZ2l2ZW4KKy8vIGVsZW1lbnQuICBUaGlzIGNhbiBiZSBlYXNpbHkgZW1iZWRkZWQgaW50byBhbnkgZGlhbG9nOyB0aGUgZnVuY3Rpb25hbGl0eSBpcworLy8gYWxzbyBwcm92aWRlZC4KK1hpbmhhLklubGluZVN0eWxlci5wcm90b3R5cGUuY3JlYXRlU3R5bGVGaWVsZHNldCA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworICB2YXIgZG9jID0gdGhpcy5kb2M7CisgIHZhciBlbCA9IHRoaXMuZWxlbWVudDsKKyAgCisgIHZhciBmaWVsZHNldCA9IGRvYy5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpOworICB2YXIgbGVnZW5kID0gZG9jLmNyZWF0ZUVsZW1lbnQoImxlZ2VuZCIpOworICBmaWVsZHNldC5hcHBlbmRDaGlsZChsZWdlbmQpOworICBsZWdlbmQuaW5uZXJIVE1MID0gWGluaGEuX2xjKCJDU1MgU3R5bGUiLCAiSW5saW5lU3R5bGVyIik7CisgIHZhciB0YWJsZSA9IGRvYy5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpOworICBmaWVsZHNldC5hcHBlbmRDaGlsZCh0YWJsZSk7CisgIHRhYmxlLnN0eWxlLndpZHRoID0gIjEwMCUiOworICB2YXIgdGJvZHkgPSBkb2MuY3JlYXRlRWxlbWVudCgidGJvZHkiKTsKKyAgdGFibGUuYXBwZW5kQ2hpbGQodGJvZHkpOworICAKKyAgdmFyIHRyLCB0ZCwgaW5wdXQsIHNlbGVjdCwgb3B0aW9uLCBvcHRpb25zLCBpOworICAKKyAgdHIgPSBkb2MuY3JlYXRlRWxlbWVudCgidHIiKTsKKyAgdGJvZHkuYXBwZW5kQ2hpbGQodHIpOworICB0ZCA9IGRvYy5jcmVhdGVFbGVtZW50KCJ0ZCIpOworICB0ci5hcHBlbmRDaGlsZCh0ZCk7CisgIHRkLmNsYXNzTmFtZSA9ICJsYWJlbCI7CisgIHRkLmlubmVySFRNTCA9IFhpbmhhLl9sYygiQmFja2dyb3VuZCIsICJJbmxpbmVTdHlsZXIiKSArICI6IjsKKyAgdGQgPSBkb2MuY3JlYXRlRWxlbWVudCgidGQiKTsKKyAgdHIuYXBwZW5kQ2hpbGQodGQpOworCisgIGlucHV0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CisgIGlucHV0Lm5hbWUgPSB0aGlzLmRpYWxvZy5jcmVhdGVJZCgiYmFja2dyb3VuZENvbG9yIik7CisgIGlucHV0LnZhbHVlID0gWGluaGEuX2NvbG9yVG9SZ2IoIGVsLnN0eWxlLmJhY2tncm91bmRDb2xvciApOworICBpbnB1dC50eXBlID0gImhpZGRlbiI7CisgIHRoaXMuaW5wdXRzLnN0eWxlc1snYmFja2dyb3VuZENvbG9yJ10gPSBpbnB1dDsKKyAgaW5wdXQuc3R5bGUubWFyZ2luUmlnaHQgPSAiMC41ZW0iOworICB0ZC5hcHBlbmRDaGlsZChpbnB1dCk7CisgIG5ldyBYaW5oYS5jb2xvclBpY2tlci5JbnB1dEJpbmRpbmcoaW5wdXQpCisgIAorICB0ZC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIiAiICsgWGluaGEuX2xjKCJJbWFnZSBVUkwiLCAiSW5saW5lU3R5bGVyIikgKyAiOiAiKSk7CisgIGlucHV0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CisgIGlucHV0Lm5hbWUgPSB0aGlzLmRpYWxvZy5jcmVhdGVJZCgiYmFja2dyb3VuZEltYWdlIik7CisgIGlucHV0LnR5cGUgPSAidGV4dCI7CisgIHRoaXMuaW5wdXRzLnN0eWxlc1snYmFja2dyb3VuZEltYWdlJ10gPSBpbnB1dDsKKyAgaWYgKGVsLnN0eWxlLmJhY2tncm91bmRJbWFnZS5tYXRjaCgvdXJsXChccyooLio/KVxzKlwpLykpCisgICAgaW5wdXQudmFsdWUgPSBSZWdFeHAuJDE7CisgIC8vIGlucHV0LnN0eWxlLndpZHRoID0gIjEwMCUiOworICB0ZC5hcHBlbmRDaGlsZChpbnB1dCk7CisgIAorICB0ciA9IGRvYy5jcmVhdGVFbGVtZW50KCJ0ciIpOworICB0Ym9keS5hcHBlbmRDaGlsZCh0cik7CisgIHRkID0gZG9jLmNyZWF0ZUVsZW1lbnQoInRkIik7CisgIHRyLmFwcGVuZENoaWxkKHRkKTsKKyAgdGQuY2xhc3NOYW1lID0gImxhYmVsIjsKKyAgdGQuaW5uZXJIVE1MID0gWGluaGEuX2xjKCJGRyBDb2xvciIsICJJbmxpbmVTdHlsZXIiKSArICI6IjsKKyAgdGQgPSBkb2MuY3JlYXRlRWxlbWVudCgidGQiKTsKKyAgdHIuYXBwZW5kQ2hpbGQodGQpOworICBpbnB1dCA9IGRvYy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOworICBpbnB1dC5uYW1lID0gdGhpcy5kaWFsb2cuY3JlYXRlSWQoImNvbG9yIik7CisgIGlucHV0LnZhbHVlID0gWGluaGEuX2NvbG9yVG9SZ2IoIGVsLnN0eWxlLmNvbG9yICk7CisgIGlucHV0LnR5cGUgPSAiaGlkZGVuIjsKKyAgdGhpcy5pbnB1dHMuc3R5bGVzWydjb2xvciddID0gaW5wdXQ7CisgIGlucHV0LnN0eWxlLm1hcmdpblJpZ2h0ID0gIjAuNWVtIjsKKyAgdGQuYXBwZW5kQ2hpbGQoaW5wdXQpOworICBuZXcgWGluaGEuY29sb3JQaWNrZXIuSW5wdXRCaW5kaW5nKGlucHV0KQorICAKKyAgLy8gZm9yIGJldHRlciBhbGlnbm1lbnQgd2UgaW5jbHVkZSBhbiBpbnZpc2libGUgZmllbGQuCisgIGlucHV0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CisgIGlucHV0LnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKKyAgaW5wdXQudHlwZSA9ICJ0ZXh0IjsKKyAgdGQuYXBwZW5kQ2hpbGQoaW5wdXQpOworICAKKyAgdHIgPSBkb2MuY3JlYXRlRWxlbWVudCgidHIiKTsKKyAgdGJvZHkuYXBwZW5kQ2hpbGQodHIpOworICB0ZCA9IGRvYy5jcmVhdGVFbGVtZW50KCJ0ZCIpOworICB0ci5hcHBlbmRDaGlsZCh0ZCk7CisgIHRkLmNsYXNzTmFtZSA9ICJsYWJlbCI7CisgIHRkLmlubmVySFRNTCA9IFhpbmhhLl9sYygiQm9yZGVyIiwgIklubGluZVN0eWxlciIpICsgIjoiOworICB0ZCA9IGRvYy5jcmVhdGVFbGVtZW50KCJ0ZCIpOworICB0ci5hcHBlbmRDaGlsZCh0ZCk7CisgIGlucHV0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CisgIHZhciBib3JkZXJDb2xvdXJJbnB1dCA9IGlucHV0OworICBpbnB1dC5uYW1lID0gdGhpcy5kaWFsb2cuY3JlYXRlSWQoImJvcmRlckNvbG9yIik7CisgIGlucHV0LnZhbHVlID0gWGluaGEuX2NvbG9yVG9SZ2IoIGVsLnN0eWxlLmJvcmRlckNvbG9yICk7CisgIGlucHV0LnR5cGUgPSAiaGlkZGVuIjsKKyAgdGhpcy5pbnB1dHMuc3R5bGVzWydib3JkZXJDb2xvciddID0gaW5wdXQ7CisgIGlucHV0LnN0eWxlLm1hcmdpblJpZ2h0ID0gIjAuNWVtIjsKKyAgdGQuYXBwZW5kQ2hpbGQoaW5wdXQpOworICBuZXcgWGluaGEuY29sb3JQaWNrZXIuSW5wdXRCaW5kaW5nKGlucHV0KQorICAKKyAgc2VsZWN0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOworICB2YXIgYm9yZGVyU2VsZWN0ID0gc2VsZWN0OyAgCisgIHNlbGVjdC5uYW1lID0gdGhpcy5kaWFsb2cuY3JlYXRlSWQoImJvcmRlclN0eWxlIik7CisgIHZhciBib3JkZXJGaWVsZHMgPSBbXTsKKyAgdGQuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKKyAgdGhpcy5pbnB1dHMuc3R5bGVzWydib3JkZXJTdHlsZSddID0gc2VsZWN0OworICBvcHRpb25zID0gWyJub25lIiwgImRvdHRlZCIsICJkYXNoZWQiLCAic29saWQiLCAiZG91YmxlIiwgImdyb292ZSIsICJyaWRnZSIsICJpbnNldCIsICJvdXRzZXQiXTsKKyAgdmFyIGN1cnJlbnRCb3JkZXJTdHlsZSA9IGVsLnN0eWxlLmJvcmRlclN0eWxlOworICAvLyBHZWNrbyByZXBvcnRzICJzb2xpZCBzb2xpZCBzb2xpZCBzb2xpZCIgZm9yICJib3JkZXItc3R5bGU6IHNvbGlkIi4KKyAgLy8gVGhhdCBpcywgInRvcCByaWdodCBib3R0b20gbGVmdCIgLS0gd2Ugb25seSBjb25zaWRlciB0aGUgZmlyc3QKKyAgLy8gdmFsdWUuCisgIGlmIChjdXJyZW50Qm9yZGVyU3R5bGUubWF0Y2goLyhbXlxzXSopXHMvKSkgY3VycmVudEJvcmRlclN0eWxlID0gUmVnRXhwLiQxOworICBmb3IgKHZhciBpPTA7aTxvcHRpb25zLmxlbmd0aDtpKyspIHsKKyAgICB2YXIgdmFsID0gb3B0aW9uc1tpXTsKKyAgICBvcHRpb24gPSBkb2MuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7CisgICAgb3B0aW9uLnZhbHVlID0gdmFsOworICAgIG9wdGlvbi5pbm5lckhUTUwgPSB2YWw7CisgICAgaWYgKHZhbCA9PSBjdXJyZW50Qm9yZGVyU3R5bGUpIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7CisgICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbik7CisgIH0KKyAgc2VsZWN0LnN0eWxlLm1hcmdpblJpZ2h0ID0gIjAuNWVtIjsKKyAgZnVuY3Rpb24gc2V0Qm9yZGVyRmllbGRzU3RhdHVzKHZhbHVlKQorICB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3JkZXJGaWVsZHMubGVuZ3RoOyArK2kpIAorICAgIHsKKyAgICAgIHZhciBlbCA9IGJvcmRlckZpZWxkc1tpXTsKKyAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSB2YWx1ZSA/ICJoaWRkZW4iIDogInZpc2libGUiOworICAgICAgaWYgKCF2YWx1ZSAmJiAoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICJpbnB1dCIpKSAKKyAgICAgIHsKKyAgICAgICAgZWwuZm9jdXMoKTsKKyAgICAgICAgZWwuc2VsZWN0KCk7CisgICAgICB9CisgICAgfQorICB9CisgIHNlbGVjdC5vbmNoYW5nZSA9IGZ1bmN0aW9uKCkKKyAgeworICAgIHNldEJvcmRlckZpZWxkc1N0YXR1cyh0aGlzLnZhbHVlID09ICJub25lIik7CisgIH07CisgIAorCisgIAorICBpbnB1dCA9IGRvYy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOworICB2YXIgYm9yZGVyV2lkdGhJbnB1dCA9IGlucHV0CisgIGlucHV0Lm5hbWUgPSB0aGlzLmRpYWxvZy5jcmVhdGVJZCgiYm9yZGVyV2lkdGgiKTsKKyAgYm9yZGVyRmllbGRzLnB1c2goaW5wdXQpOworICBpbnB1dC50eXBlID0gInRleHQiOworICB0aGlzLmlucHV0cy5zdHlsZXNbJ2JvcmRlcldpZHRoJ10gPSBpbnB1dDsKKyAgaW5wdXQudmFsdWUgPSBYaW5oYS5JbmxpbmVTdHlsZXIuZ2V0TGVuZ3RoKGVsLnN0eWxlLmJvcmRlcldpZHRoKTsKKyAgaW5wdXQuc2l6ZSA9ICI1IjsKKyAgdGQuYXBwZW5kQ2hpbGQoaW5wdXQpOworICBpbnB1dC5zdHlsZS5tYXJnaW5SaWdodCA9ICIwLjVlbSI7CisgIHZhciBzcGFuID0gZG9jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgc3Bhbi5pbm5lckhUTUwgPSBYaW5oYS5fbGMoInBpeGVscyIsICJJbmxpbmVTdHlsZXIiKTsKKyAgdGQuYXBwZW5kQ2hpbGQoc3Bhbik7CisgIGJvcmRlckZpZWxkcy5wdXNoKHNwYW4pOworICAKKyAgc2V0Qm9yZGVyRmllbGRzU3RhdHVzKHNlbGVjdC52YWx1ZSA9PSAibm9uZSIpOworICAKKyAgLy8gaWYgc29tZWJvZHkgY2hhbmdlcyB0aGUgYm9yZGVyIGNvbG91ciwgYW5kIHRoZSBib3JkZXIgU3R5bGUgaXMgbm90IHNldCwgc2V0IGl0CisgIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZXkgbWlnaHQgbm90IGRvIHRoYXQgYW5kIGdldCBjb25mdXNlZAorICBib3JkZXJDb2xvdXJJbnB1dC5vbmNvbG9ycGlja2VkID0gZnVuY3Rpb24oKXsKKyAgICBpZihib3JkZXJTZWxlY3Quc2VsZWN0ZWRJbmRleCA9PSAwKQorICAgIHsKKyAgICAgIGJvcmRlclNlbGVjdC5zZWxlY3RlZEluZGV4ID0gMzsKKyAgICAgIGJvcmRlclNlbGVjdC5vbmNoYW5nZSgpOworICAgIH0gCisgICAgCisgICAgaWYoIWJvcmRlcldpZHRoSW5wdXQudmFsdWUubGVuZ3RoKSAKKyAgICB7CisgICAgICBib3JkZXJXaWR0aElucHV0LnZhbHVlID0gMTsKKyAgICB9CisgIH07CisgIAorICBpZiAoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICJ0YWJsZSIpIAorICB7CisgICAgLy8gdGhlIGJvcmRlci1jb2xsYXBzZSBzdHlsZSBpcyBvbmx5IGZvciB0YWJsZXMKKyAgICB0ciA9IGRvYy5jcmVhdGVFbGVtZW50KCJ0ciIpOworICAgIHRib2R5LmFwcGVuZENoaWxkKHRyKTsKKyAgICB0ZCA9IGRvYy5jcmVhdGVFbGVtZW50KCJ0ZCIpOworICAgIHRkLmNsYXNzTmFtZSA9ICJsYWJlbCI7CisgICAgdHIuYXBwZW5kQ2hpbGQodGQpOworICAgIGlucHV0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CisgICAgaW5wdXQubmFtZSA9IHRoaXMuZGlhbG9nLmNyZWF0ZUlkKCJib3JkZXJDb2xsYXBzZSIpOworICAgIGlucHV0LnR5cGUgPSAiY2hlY2tib3giOworICAgIGlucHV0LnZhbHVlID0gIm9uIjsKKyAgICB0aGlzLmlucHV0cy5zdHlsZXNbJ2JvcmRlckNvbGxhcHNlJ10gPSBpbnB1dDsKKyAgICBpbnB1dC5pZCA9ICJmX3N0X2JvcmRlckNvbGxhcHNlIjsKKyAgICB2YXIgdmFsID0gKC9jb2xsYXBzZS9pLnRlc3QoZWwuc3R5bGUuYm9yZGVyQ29sbGFwc2UpKTsKKyAgICBpbnB1dC5jaGVja2VkID0gdmFsID8gMSA6IDA7CisgICAgdGQuYXBwZW5kQ2hpbGQoaW5wdXQpOworICAgIAorICAgIHRkID0gZG9jLmNyZWF0ZUVsZW1lbnQoInRkIik7CisgICAgdHIuYXBwZW5kQ2hpbGQodGQpOworICAgIHZhciBsYWJlbCA9IGRvYy5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOworICAgIGxhYmVsLmh0bWxGb3IgPSAiZl9zdF9ib3JkZXJDb2xsYXBzZSI7CisgICAgbGFiZWwuaW5uZXJIVE1MID0gWGluaGEuX2xjKCJDb2xsYXBzZWQgYm9yZGVycyIsICJJbmxpbmVTdHlsZXIiKTsKKyAgICB0ZC5hcHBlbmRDaGlsZChsYWJlbCk7CisgIH0KKyAgCisgIC8vIAl0ciA9IGRvYy5jcmVhdGVFbGVtZW50KCJ0ciIpOworICAvLyAJdGJvZHkuYXBwZW5kQ2hpbGQodHIpOworICAvLyAJdGQgPSBkb2MuY3JlYXRlRWxlbWVudCgidGQiKTsKKyAgLy8gCXRkLmNsYXNzTmFtZSA9ICJsYWJlbCI7CisgIC8vIAl0ci5hcHBlbmRDaGlsZCh0ZCk7CisgIC8vIAl0ZC5pbm5lckhUTUwgPSBYaW5oYS5fbGMoIk1hcmdpbiIsICJJbmxpbmVTdHlsZXIiKSArICI6IjsKKyAgLy8gCXRkID0gZG9jLmNyZWF0ZUVsZW1lbnQoInRkIik7CisgIC8vIAl0ci5hcHBlbmRDaGlsZCh0ZCk7CisgIC8vIAlpbnB1dCA9IGRvYy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOworICAvLyAJaW5wdXQudHlwZSA9ICJ0ZXh0IjsKKyAgLy8gCWlucHV0LnNpemUgPSAiNSI7CisgIC8vIAlpbnB1dC5uYW1lID0gImZfc3RfbWFyZ2luIjsKKyAgLy8gCXRkLmFwcGVuZENoaWxkKGlucHV0KTsKKyAgLy8gCWlucHV0LnN0eWxlLm1hcmdpblJpZ2h0ID0gIjAuNWVtIjsKKyAgLy8gCXRkLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShYaW5oYS5fbGMoIlBhZGRpbmciLCAiSW5saW5lU3R5bGVyIikgKyAiOiIpKTsKKyAgCisgIC8vIAlpbnB1dCA9IGRvYy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOworICAvLyAJaW5wdXQudHlwZSA9ICJ0ZXh0IjsKKyAgLy8gCWlucHV0LnNpemUgPSAiNSI7CisgIC8vIAlpbnB1dC5uYW1lID0gImZfc3RfcGFkZGluZyI7CisgIC8vIAl0ZC5hcHBlbmRDaGlsZChpbnB1dCk7CisgIC8vIAlpbnB1dC5zdHlsZS5tYXJnaW5MZWZ0ID0gIjAuNWVtIjsKKyAgLy8gCWlucHV0LnN0eWxlLm1hcmdpblJpZ2h0ID0gIjAuNWVtIjsKKyAgLy8gCXRkLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShYaW5oYS5fbGMoInBpeGVscyIsICJJbmxpbmVTdHlsZXIiKSkpOworICAKKyAgcmV0dXJuIGZpZWxkc2V0OworfTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvY3ouanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL2N6LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTBjMjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL2N6LmpzCkBAIC0wLDAgKzEsMzcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY3oiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQmFja2dyb3VuZCI6ICJQb3phZMOtIiwKKyAgICAiQmFzZWxpbmUiOiAiWsOha2xhZG7DrSBsaW5rYSIsCisgICAgIkJvcmRlciI6ICJPYnJ5cyIsCisgICAgIkJvdHRvbSI6ICJEb2zFryIsCisgICAgIkNlbnRlciI6ICJOYSBzdMWZZWQiLAorICAgICJDaGFyIjogIlpuYWsiLAorICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICJTdGxhxI1lbsOpIG9rcmFqZSIsCisgICAgIkZHIENvbG9yIjogIkJhcnZhIHBvcMWZZWTDrSIsCisgICAgIkZsb2F0IjogIk9idMOpa8OhbsOtIiwKKyAgICAiSGVpZ2h0IjogIlbDvcWha2EiLAorICAgICJJbWFnZSBVUkwiOiAiQWRyZXNhIG9icsOhemt1IiwKKyAgICAiSnVzdGlmeSI6ICJEbyBzdHJhbiIsCisgICAgIkxheW91dCI6ICJSb3psb8W+ZW7DrSIsCisgICAgIkxlZnQiOiAiVmxldm8iLAorICAgICJNYXJnaW4iOiAiT2tyYWoiLAorICAgICJNaWRkbGUiOiAiTmEgc3TFmWVkIiwKKyAgICAiTm9uZSI6ICLFvcOhZG7DqSIsCisgICAgIlBhZGRpbmciOiAiT2RzYXpvdsOhbsOtIiwKKyAgICAiUmlnaHQiOiAiVnByYXZvIiwKKyAgICAiVGV4dCBhbGlnbiI6ICJaYXJvdm7DoW7DrSB0ZXh0dSIsCisgICAgIlRvcCI6ICJOYWhvcnUiLAorICAgICJWZXJ0aWNhbCBhbGlnbiI6ICJTdmlzbMOpIHphcm92bsOhbsOtIiwKKyAgICAiV2lkdGgiOiAixaDDrcWZa2EiLAorICAgICJwZXJjZW50IjogInByb2NlbnQiLAorICAgICJwaXhlbHMiOiAicGl4ZWzFryIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9kYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvZGEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IwNzc2NAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvZGEuanMKQEAgLTAsMCArMSwzNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYWNrZ3JvdW5kIjogIkJhZ2dydW5kIiwKKyAgICAiQmFzZWxpbmUiOiAiR3J1bmRsaW5qZSIsCisgICAgIkJvcmRlciI6ICJSYW1tZSIsCisgICAgIkJvdHRvbSI6ICJUZWtzdGJ1bmQiLAorICAgICJDZW50ZXIiOiAiQ2VudHJlciIsCisgICAgIkNoYXIiOiAiUGxhZHMiLAorICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICJTYW1tZW5zbWVsdCByYW1tZXIiLAorICAgICJGRyBDb2xvciI6ICJGb250IGZhcnZlIiwKKyAgICAiRmxvYXQiOiAiSnVzdGVyaW5nIiwKKyAgICAiSGVpZ2h0IjogIkjDuGpkZSIsCisgICAgIkltYWdlIFVSTCI6ICJCaWxsZWRlIFVSTCIsCisgICAgIkp1c3RpZnkiOiAiTGlnZSBtYXJnZW5lciIsCisgICAgIkxheW91dCI6ICJMYXlvdXQiLAorICAgICJMZWZ0IjogIlZlbnN0cmUiLAorICAgICJNYXJnaW4iOiAiTWFyZ2VuIiwKKyAgICAiTWlkZGxlIjogIk1pZHQiLAorICAgICJOb25lIjogIkluZ2VuIiwKKyAgICAiUGFkZGluZyI6ICJNYXJnZW4iLAorICAgICJSaWdodCI6ICJIw7hqcmUiLAorICAgICJUZXh0IGFsaWduIjogIlRla3N0IiwKKyAgICAiVG9wIjogIlRvcCIsCisgICAgIlZlcnRpY2FsIGFsaWduIjogIlZlcnRpa2FsIHBsYWNlcmluZyIsCisgICAgIldpZHRoIjogIkJyZWRkZSIsCisgICAgInBlcmNlbnQiOiAicHJvY2VudCIsCisgICAgInBpeGVscyI6ICJwaXhlbCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5NWYxMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvZGUuanMKQEAgLTAsMCArMSwzNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYWNrZ3JvdW5kIjogIkhpbnRlcmdydW5kIiwKKyAgICAiQmFzZWxpbmUiOiAiR3J1bmRsaW5pZSIsCisgICAgIkJvcmRlciI6ICJSYWhtZW4iLAorICAgICJCb3R0b20iOiAidW50ZW4iLAorICAgICJDZW50ZXIiOiAiemVudHJpZXJ0IiwKKyAgICAiQ2hhciI6ICJaZWljaGVuIiwKKyAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAiUmFobWVuIGZhbGxlbiB6dXNhbW1lbiIsCisgICAgIkZHIENvbG9yIjogIlZvcmRlcmdydW5kZmFyYmUiLAorICAgICJGbG9hdCI6ICJGbG9hdCIsCisgICAgIkhlaWdodCI6ICJIw7ZoZSIsCisgICAgIkltYWdlIFVSTCI6ICJCaWxkLVVSTCIsCisgICAgIkp1c3RpZnkiOiAiQmxvY2tzYXR6IiwKKyAgICAiTGF5b3V0IjogIkdlc3RhbHR1bmciLAorICAgICJMZWZ0IjogImxpbmtzIiwKKyAgICAiTWFyZ2luIjogIkF1c3NlbmFic3RhbmQiLAorICAgICJNaWRkbGUiOiAiemVudHJpZXJ0IiwKKyAgICAiTm9uZSI6ICJLZWluZSIsCisgICAgIlBhZGRpbmciOiAiSW5uZW5hYnN0YW5kIiwKKyAgICAiUmlnaHQiOiAicmVjaHRzIiwKKyAgICAiVGV4dCBhbGlnbiI6ICJUZXh0YXVzcmljaHR1bmciLAorICAgICJUb3AiOiAib2JlbiIsCisgICAgIlZlcnRpY2FsIGFsaWduIjogIlZlcnRpa2FsZSBBdXNyaWNodHVuZyIsCisgICAgIldpZHRoIjogIkJyZWl0ZSIsCisgICAgInBlcmNlbnQiOiAiUHJvemVudCIsCisgICAgInBpeGVscyI6ICJQaXhlbCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9lbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlZDQ3OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvZWwuanMKQEAgLTAsMCArMSwzNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYWNrZ3JvdW5kIjogIs6mz4zOvc+Ezr8iLAorICAgICJCYXNlbGluZSI6ICJCYXNlbGluZSIsCisgICAgIkJvcmRlciI6ICLOoM61z4HOr86zz4HOsc68zrzOsSIsCisgICAgIkJvdHRvbSI6ICLOms6sz4TPiSDOvM6tz4HOv8+CIiwKKyAgICAiQ2VudGVyIjogIs6azq3Ovc+Ez4HOvyIsCisgICAgIkNoYXIiOiAizqfOsc+BzrHOus+Ezq7Pgc6xz4IiLAorICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICLOo8+FzrzPgM+Ez4XOs868zq3Ovc6xIM+AzrXPgc65zrPPgc6szrzOvM6xz4TOsSIsCisgICAgIkZHIENvbG9yIjogIs6nz4HPjs68zrEgzrHOvc+EzrnOus61zrnOvM6tzr3Pic69IiwKKyAgICAiRmxvYXQiOiAiRmxvYXQiLAorICAgICJIZWlnaHQiOiAizo7PiM6/z4IiLAorICAgICJJbWFnZSBVUkwiOiAiVVJMIM61zrnOus+Mzr3Osc+CIiwKKyAgICAiSnVzdGlmeSI6ICLOoM67zq7Pgc63z4Igz4PPhM6/zq/Ph863z4POtyIsCisgICAgIkxheW91dCI6ICLOlM65zqzPhM6xzr7OtyIsCisgICAgIkxlZnQiOiAizpHPgc65z4PPhM61z4HOrCIsCisgICAgIk1hcmdpbiI6ICLOoM61z4HOuc64z47Pgc65zr8iLAorICAgICJNaWRkbGUiOiAizprOrc69z4TPgc6/IiwKKyAgICAiTm9uZSI6ICLOpM6vz4DOv8+EzrEiLAorICAgICJQYWRkaW5nIjogIs6Vz4POv8+Hzq4iLAorICAgICJSaWdodCI6ICLOlM61zr7Ouc6sIiwKKyAgICAiVGV4dCBhbGlnbiI6ICLOo8+Ezr/Or8+HzrfPg863IM66zrXOuc68zq3Ovc6/z4UiLAorICAgICJUb3AiOiAizqDOrM69z4kiLAorICAgICJWZXJ0aWNhbCBhbGlnbiI6ICLOms6xz4TOsc66z4zPgc+Fz4bOtyDPg8+Ezr/Or8+HzrfPg863IiwKKyAgICAiV2lkdGgiOiAizqDOu86sz4TOv8+CIiwKKyAgICAicGVyY2VudCI6ICLPhM6/zrnPgiDOtc66zrHPhM+Mzr0iLAorICAgICJwaXhlbHMiOiAicGl4ZWxzIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL2VzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDc2YmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9lcy5qcwpAQCAtMCwwICsxLDM3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVzIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkJhY2tncm91bmQiOiAiRm9uZG8iLAorICAgICJCYXNlbGluZSI6ICJMw61uZWEgYmFzZSIsCisgICAgIkJvcmRlciI6ICJCb3JkZSIsCisgICAgIkJvdHRvbSI6ICJJbmZlcmlvciIsCisgICAgIkNlbnRlciI6ICJDZW50cmFyIiwKKyAgICAiQ2hhciI6ICJDYXLDoWN0ZXIiLAorICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICJCb3JkZXMgY29sYXBzYWRvcyIsCisgICAgIkZHIENvbG9yIjogIkNvbG9yIFByaW5jaXBhbCIsCisgICAgIkZsb2F0IjogIkZsb3RhbnRlIiwKKyAgICAiSGVpZ2h0IjogIkFsdG8iLAorICAgICJJbWFnZSBVUkwiOiAiVVJMIGRlIGxhIGltw6FnZW4iLAorICAgICJKdXN0aWZ5IjogIkp1c3RpZmljYXIiLAorICAgICJMYXlvdXQiOiAiRGlzdHJpYnVjacOzbiIsCisgICAgIkxlZnQiOiAiSXpxdWllcmRhIiwKKyAgICAiTWFyZ2luIjogIk1hcmdlbiIsCisgICAgIk1pZGRsZSI6ICJNZWRpbyIsCisgICAgIk5vbmUiOiAiTmluZ3VubyIsCisgICAgIlBhZGRpbmciOiAiUmVsbGVubyAoUGFkZGluZykiLAorICAgICJSaWdodCI6ICJEZXJlY2hhIiwKKyAgICAiVGV4dCBhbGlnbiI6ICJBbGluZWFjacOzbiBkZWwgdGV4dG8iLAorICAgICJUb3AiOiAiU3VwZXJpb3IiLAorICAgICJWZXJ0aWNhbCBhbGlnbiI6ICJBbGluZWFjacOzbiB2ZXJ0aWNhbCIsCisgICAgIldpZHRoIjogIkFuY2hvIiwKKyAgICAicGVyY2VudCI6ICJwb3IgY2llbnRvIiwKKyAgICAicGl4ZWxzIjogInDDrXhlbGVzIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL2V1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9ldS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDdkZDkwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9ldS5qcwpAQCAtMCwwICsxLDIxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImV1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkJhc2VsaW5lIjogIklydWRpYXJlbiBvaW5lYW4iLAorICAgICJCb3R0b20iOiAiQmVoZWFuIiwKKyAgICAiSW1hZ2UgVVJMIjogIklydWRpYXJlbiBVUkwtYToiLAorICAgICJMYXlvdXQiOiAiRGlzZWludWEiLAorICAgICJMZWZ0IjogIkV6a2VycmV0YXJhIiwKKyAgICAiTWlkZGxlIjogIkVyZGlhbiIsCisgICAgIlJpZ2h0IjogIkVza3VpbmV0YXJhIiwKKyAgICAiVG9wIjogIkdvaWFuIiwKKyAgICAiV2lkdGgiOiAiWmFiYWxlcmE6IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9mYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWY0M2ZhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9mYS5qcwpAQCAtMCwwICsxLDIxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkJhc2VsaW5lIjogItin2KjYqtiv2KfbjCDYrti3IiwKKyAgICAiQm90dG9tIjogItm+2KfbjNuM2YYiLAorICAgICJJbWFnZSBVUkwiOiAiVVJMINiq2LXZiNuM2LEiLAorICAgICJMYXlvdXQiOiAi2YTYp9uM2YciLAorICAgICJMZWZ0IjogItqG2b4iLAorICAgICJNaWRkbGUiOiAi2YjYs9i3IiwKKyAgICAiUmlnaHQiOiAi2LHYp9iz2KoiLAorICAgICJUb3AiOiAi2KjYp9mE2KciLAorICAgICJXaWR0aCI6ICLYt9mI2YQiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvZmkuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL2ZpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YWVhNDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL2ZpLmpzCkBAIC0wLDAgKzEsMzIgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmkiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQmFja2dyb3VuZCI6ICJUYXVzdGEiLAorICAgICJCYXNlbGluZSI6ICJUYWthcmFqYSIsCisgICAgIkJvcmRlciI6ICJSZXVuYSIsCisgICAgIkJvdHRvbSI6ICJBbGxlIiwKKyAgICAiQ2VudGVyIjogIktlc2tlbGxlIiwKKyAgICAiQ2hhciI6ICJNZXJra2kiLAorICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICJMdWhpc3RldHV0IHJldW5hdCIsCisgICAgIkZHIENvbG9yIjogIkZHIFbDpHJpIiwKKyAgICAiSW1hZ2UgVVJMIjogIkt1dmFuIG9zb2l0ZSIsCisgICAgIkxheW91dCI6ICJTb21taXR0ZWx1IiwKKyAgICAiTGVmdCI6ICJWYXNlbiIsCisgICAgIk1hcmdpbiI6ICJNYXJnaW5hYWxpIiwKKyAgICAiTWlkZGxlIjogIktlc2tlbGxlIiwKKyAgICAiUGFkZGluZyI6ICJQYWxzdGFudMOkeXRlIiwKKyAgICAiUmlnaHQiOiAiT2lrZWEiLAorICAgICJUb3AiOiAiWWzDtnMiLAorICAgICJWZXJ0aWNhbCBhbGlnbiI6ICJWZXJ0aWthYWxpIGtvaGRpc3R1cyIsCisgICAgIldpZHRoIjogIkxldmV5cyIsCisgICAgInBlcmNlbnQiOiAicHJvc2VudHRpYSIsCisgICAgInBpeGVscyI6ICJwaWtzZWxpw6QiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NzEzNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsMzcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQmFja2dyb3VuZCI6ICJBcnJpw6hyZSBwbGFuIiwKKyAgICAiQmFzZWxpbmUiOiAiQmFzZWxpbmUiLAorICAgICJCb3JkZXIiOiAiQm9yZHVyZSIsCisgICAgIkJvdHRvbSI6ICJCYXMiLAorICAgICJDZW50ZXIiOiAiQ2VudHJlIiwKKyAgICAiQ2hhciI6ICJDaGFyYWN0w6hyZSIsCisgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIkJvcmR1cmUgZWZmb25kcsOpcyIsCisgICAgIkZHIENvbG9yIjogIkNvdWxldXIgZGUgZmFjZSIsCisgICAgIkZsb2F0IjogIkZsb3R0ZXVyIiwKKyAgICAiSGVpZ2h0IjogIkhhdXRldXIiLAorICAgICJJbWFnZSBVUkwiOiAiVVJMIHBvdXIgbCdpbWFnZSIsCisgICAgIkp1c3RpZnkiOiAiSnVzdGlmacOpIiwKKyAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgIkxlZnQiOiAiR2F1Y2hlIiwKKyAgICAiTWFyZ2luIjogIk1hcmdlIiwKKyAgICAiTWlkZGxlIjogIk1pbGlldSIsCisgICAgIk5vbmUiOiAiQXVjdW4iLAorICAgICJQYWRkaW5nIjogIlJlbXBsaXNzYWdlIiwKKyAgICAiUmlnaHQiOiAiRHJvaXRlIiwKKyAgICAiVGV4dCBhbGlnbiI6ICJBbGlnbmVtZW50IiwKKyAgICAiVG9wIjogIkhhdXQiLAorICAgICJWZXJ0aWNhbCBhbGlnbiI6ICJWZXJ0aWNhbCIsCisgICAgIldpZHRoIjogIkxhcmdldXIiLAorICAgICJwZXJjZW50IjogInBvdXJjZW50IiwKKyAgICAicGl4ZWxzIjogInBpeGVscyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9oZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvaGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQwZTZjNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvaGUuanMKQEAgLTAsMCArMSwzNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJoZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYWNrZ3JvdW5kIjogIteo16fXoiIsCisgICAgIkJhc2VsaW5lIjogIten15Ug15HXodeZ16EiLAorICAgICJCb3JkZXIiOiAi15LXkdeV15wiLAorICAgICJCb3R0b20iOiAi16rXl9eq15XXnyIsCisgICAgIkNlbnRlciI6ICLXnteo15vXliIsCisgICAgIkNoYXIiOiAi16rXlSIsCisgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIteS15HXldec15XXqiDXp9eV16jXodeZ150iLAorICAgICJGRyBDb2xvciI6ICLXpteR16Ig16fXmdeT157XlCIsCisgICAgIkZsb2F0IjogItee16jXl9ejIiwKKyAgICAiSGVpZ2h0IjogIteS15XXkdeUIiwKKyAgICAiSW1hZ2UgVVJMIjogIlVSTCDXlNeq157Xldeg15QiLAorICAgICJKdXN0aWZ5IjogIteZ16nXldeoIiwKKyAgICAiTGF5b3V0IjogItek16jXmdeh15QiLAorICAgICJMZWZ0IjogItep157XkNecIiwKKyAgICAiTWFyZ2luIjogItep15XXnNeZ15nXnSIsCisgICAgIk1pZGRsZSI6ICLXkNee16bXoiIsCisgICAgIk5vbmUiOiAi15DXmdefIiwKKyAgICAiUGFkZGluZyI6ICLXqNeZ15XXldeXINeR16nXldec15nXmdedIiwKKyAgICAiUmlnaHQiOiAi15nXnteZ158iLAorICAgICJUZXh0IGFsaWduIjogIteZ16nXldeoINeY16fXodeYIiwKKyAgICAiVG9wIjogItei15zXmdeV158iLAorICAgICJWZXJ0aWNhbCBhbGlnbiI6ICLXmdeZ16nXldeoINeQ16DXm9eZIiwKKyAgICAiV2lkdGgiOiAi16jXldeX15EiLAorICAgICJwZXJjZW50IjogIteQ15fXldeWIiwKKyAgICAicGl4ZWxzIjogItek15nXp9eh15zXmdedIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9pdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzNiNmEwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9pdC5qcwpAQCAtMCwwICsxLDM3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIml0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkJhY2tncm91bmQiOiAiU2ZvbmRvIiwKKyAgICAiQmFzZWxpbmUiOiAiQWxsaW5lYW1lbnRvIiwKKyAgICAiQm9yZGVyIjogIkJvcmRvIiwKKyAgICAiQm90dG9tIjogIkJhc3NvIiwKKyAgICAiQ2VudGVyIjogIkNlbnRyYSIsCisgICAgIkNoYXIiOiAiQ2FyYXR0ZXJlIiwKKyAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAiQm9yZGkgY2hpdXNpIiwKKyAgICAiRkcgQ29sb3IiOiAiQ29sb3JlIFByaW5jaXBhbGUiLAorICAgICJGbG9hdCI6ICJGbHV0dHVhbnRlIiwKKyAgICAiSGVpZ2h0IjogIkFsdGV6emEiLAorICAgICJJbWFnZSBVUkwiOiAiVVJMIGRlbGwnSW1tYWdpbmUiLAorICAgICJKdXN0aWZ5IjogIkp1c3RpZmljYSIsCisgICAgIkxheW91dCI6ICJMYXlvdXQiLAorICAgICJMZWZ0IjogIlNpbmlzdHJhIiwKKyAgICAiTWFyZ2luIjogIk1hcmdpbmUiLAorICAgICJNaWRkbGUiOiAiQ2VudHJhbGUiLAorICAgICJOb25lIjogIk51bGxhIiwKKyAgICAiUGFkZGluZyI6ICJQYWRkaW5nIiwKKyAgICAiUmlnaHQiOiAiRGVzdHJhIiwKKyAgICAiVGV4dCBhbGlnbiI6ICJBbGxpbmVhbWVudG8gZGVsIFRlc3RvIiwKKyAgICAiVG9wIjogIkFsdG8iLAorICAgICJWZXJ0aWNhbCBhbGlnbiI6ICJBbGxpbmVhbWVudG8gdmVydGljYWxlIiwKKyAgICAiV2lkdGgiOiAiTGFyZ2hlenphIiwKKyAgICAicGVyY2VudCI6ICJwZXJjZW50byIsCisgICAgInBpeGVscyI6ICJwaXhlbHMiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NDliZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL2phLmpzCkBAIC0wLDAgKzEsMzggQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiamEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQmFja2dyb3VuZCI6ICLog4zmma8iLAorICAgICJCYXNlbGluZSI6ICLjg5njg7zjgrnjg6njgqTjg7MiLAorICAgICJCb3JkZXIiOiAi44Oc44O844OA44O8IiwKKyAgICAiQm90dG9tIjogIuS4iyIsCisgICAgIkNTUyBTdHlsZSI6ICJDU1Pjgrnjgr/jgqTjg6siLAorICAgICJDZW50ZXIiOiAi5Lit5aSuIiwKKyAgICAiQ2hhciI6ICLmloflrZciLAorICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICLpmqPmjqXlooPnlYznt5rjgpLph43jga3jgosiLAorICAgICJGRyBDb2xvciI6ICLliY3mma/oibIiLAorICAgICJGbG9hdCI6ICLjg5Xjg63jg7zjg4giLAorICAgICJIZWlnaHQiOiAi6auY44GVIiwKKyAgICAiSW1hZ2UgVVJMIjogIueUu+WDj1VSTCIsCisgICAgIkp1c3RpZnkiOiAi5Lih56uv5o+D44GIIiwKKyAgICAiTGF5b3V0IjogIuODrOOCpOOCouOCpuODiCIsCisgICAgIkxlZnQiOiAi5bemIiwKKyAgICAiTWFyZ2luIjogIumWk+malCIsCisgICAgIk1pZGRsZSI6ICLkuK3lpK4iLAorICAgICJOb25lIjogIuOBquOBlyIsCisgICAgIlBhZGRpbmciOiAi5L2Z55m9IiwKKyAgICAiUmlnaHQiOiAi5Y+zIiwKKyAgICAiVGV4dCBhbGlnbiI6ICLmsLTlubPkvY3nva4iLAorICAgICJUb3AiOiAi5LiKIiwKKyAgICAiVmVydGljYWwgYWxpZ24iOiAi5Z6C55u05L2N572uIiwKKyAgICAiV2lkdGgiOiAi5bmFIiwKKyAgICAicGVyY2VudCI6ICLjg5Hjg7zjgrvjg7Pjg4giLAorICAgICJwaXhlbHMiOiAi44OU44Kv44K744OrIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL2xjX2Jhc2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFlOGFhZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDUxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgIi0iOiAiIiwKKyAgICAiQmFja2dyb3VuZCI6ICIiLAorICAgICJCYXNlbGluZSI6ICIiLAorICAgICJCb3JkZXIiOiAiIiwKKyAgICAiQm90dG9tIjogIiIsCisgICAgIkNTUyBTdHlsZSI6ICIiLAorICAgICJDZW50ZXIiOiAiIiwKKyAgICAiQ2hhciI6ICIiLAorICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICIiLAorICAgICJGRyBDb2xvciI6ICIiLAorICAgICJGbG9hdCI6ICIiLAorICAgICJIZWlnaHQiOiAiIiwKKyAgICAiSW1hZ2UgVVJMIjogIiIsCisgICAgIkp1c3RpZnkiOiAiIiwKKyAgICAiTGF5b3V0IjogIiIsCisgICAgIkxlZnQiOiAiIiwKKyAgICAiTWFyZ2luIjogIiIsCisgICAgIk1pZGRsZSI6ICIiLAorICAgICJOb25lIjogIiIsCisgICAgIlBhZGRpbmciOiAiIiwKKyAgICAiUmlnaHQiOiAiIiwKKyAgICAiVGV4dCBhbGlnbiI6ICIiLAorICAgICJUb3AiOiAiIiwKKyAgICAiVmVydGljYWwgYWxpZ24iOiAiIiwKKyAgICAiV2lkdGgiOiAiIiwKKyAgICAicGVyY2VudCI6ICIiLAorICAgICJwaXhlbHMiOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvbmIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL25iLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMzJlOWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL25iLmpzCkBAIC0wLDAgKzEsMzcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQmFja2dyb3VuZCI6ICJCYWtncnVuZCIsCisgICAgIkJhc2VsaW5lIjogIkdydW5ubGluamUiLAorICAgICJCb3JkZXIiOiAiUmFtbWUiLAorICAgICJCb3R0b20iOiAiQnVubiIsCisgICAgIkNlbnRlciI6ICJTZW50cmVydCIsCisgICAgIkNoYXIiOiAiVGVnbiIsCisgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIkZqZXJuIGthbnRsaW5qZXIiLAorICAgICJGRyBDb2xvciI6ICJGRyBmYXJnZSIsCisgICAgIkZsb2F0IjogIkZseXRlbmRlIiwKKyAgICAiSGVpZ2h0IjogIkjDuHlkZSIsCisgICAgIkltYWdlIFVSTCI6ICJCaWxkZXRzIFVSTCIsCisgICAgIkp1c3RpZnkiOiAiSnVzdGVyIiwKKyAgICAiTGF5b3V0IjogIk9wcHNldHQiLAorICAgICJMZWZ0IjogIlZlbnN0cmUiLAorICAgICJNYXJnaW4iOiAiTWFyZyIsCisgICAgIk1pZGRsZSI6ICJNaWR0ZW4iLAorICAgICJOb25lIjogIkluZ2VuIiwKKyAgICAiUGFkZGluZyI6ICJMdWZ0IiwKKyAgICAiUmlnaHQiOiAiSMO4eXJlIiwKKyAgICAiVGV4dCBhbGlnbiI6ICJKdXN0ZXIgdGVrc3QiLAorICAgICJUb3AiOiAiT3ZlcmthbnQiLAorICAgICJWZXJ0aWNhbCBhbGlnbiI6ICJWZXJ0aWthbCBqdXN0ZXJpbmciLAorICAgICJXaWR0aCI6ICJCcmVkZGUiLAorICAgICJwZXJjZW50IjogInByb3NlbnQiLAorICAgICJwaXhlbHMiOiAiUGlrc2VsIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWIzYzE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9ubC5qcwpAQCAtMCwwICsxLDM3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkJhY2tncm91bmQiOiAiQWNodGVyZ3JvbmQiLAorICAgICJCYXNlbGluZSI6ICJCYXNpcyIsCisgICAgIkJvcmRlciI6ICJLYWRlciIsCisgICAgIkJvdHRvbSI6ICJPbmRlciIsCisgICAgIkNlbnRlciI6ICJNaWRkZW4iLAorICAgICJDaGFyIjogIkthcmFrdGVyIiwKKyAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAiR2VlbiByYW5kZW4iLAorICAgICJGRyBDb2xvciI6ICJWb29yZ3JvbmQiLAorICAgICJGbG9hdCI6ICJad2V2ZW5kIiwKKyAgICAiSGVpZ2h0IjogIkhvb2ciLAorICAgICJJbWFnZSBVUkwiOiAiQWZiZWVsZGluZyBVUkwiLAorICAgICJKdXN0aWZ5IjogIlVpdHZ1bGxlbiIsCisgICAgIkxheW91dCI6ICJXZWVyZ2F2ZSIsCisgICAgIkxlZnQiOiAiTGlua3MiLAorICAgICJNYXJnaW4iOiAiSW5zcHJpbmdlbiIsCisgICAgIk1pZGRsZSI6ICJNaWRkZW4iLAorICAgICJOb25lIjogIkdlZW4iLAorICAgICJQYWRkaW5nIjogIkNlbG1hcmdlIiwKKyAgICAiUmlnaHQiOiAiUmVjaHRzIiwKKyAgICAiVGV4dCBhbGlnbiI6ICJUZXh0IHVpdGxpam5pbmciLAorICAgICJUb3AiOiAiQm92ZW4iLAorICAgICJWZXJ0aWNhbCBhbGlnbiI6ICJWZXJ0aWthbGUgdWl0bGlqbmluZyIsCisgICAgIldpZHRoIjogIkJyZWVkIiwKKyAgICAicGVyY2VudCI6ICJwcm9jZW50IiwKKyAgICAicGl4ZWxzIjogInBpeGVscyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvcGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJmODVjYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvcGwuanMKQEAgLTAsMCArMSwzOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYWNrZ3JvdW5kIjogIlTFgm8iLAorICAgICJCYXNlbGluZSI6ICJMaW5pYSBiYXpvd2EiLAorICAgICJCb3JkZXIiOiAiUmFta2EiLAorICAgICJCb3R0b20iOiAiRMOzxYIiLAorICAgICJDU1MgU3R5bGUiOiAiU3R5bCBDU1MiLAorICAgICJDZW50ZXIiOiAixZpyb2RlayIsCisgICAgIkNoYXIiOiAiWm5hayIsCisgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIlJhbWtpIHNrb2xhcHNvd2FuZSIsCisgICAgIkZHIENvbG9yIjogIktvbG9yIGN6Y2lvbmVrIiwKKyAgICAiRmxvYXQiOiAiT3DFgnl3YW5pZSIsCisgICAgIkhlaWdodCI6ICJXeXNva2/Fm8SHIiwKKyAgICAiSW1hZ2UgVVJMIjogIlVSTCBvYnJhemthIiwKKyAgICAiSnVzdGlmeSI6ICJXeWp1c3R1aiIsCisgICAgIkxheW91dCI6ICJMYXlvdXQiLAorICAgICJMZWZ0IjogIkRvIGxld2VqIiwKKyAgICAiTWFyZ2luIjogIk9kc3TEmXAiLAorICAgICJNaWRkbGUiOiAixZpyb2RlayIsCisgICAgIk5vbmUiOiAiQnJhayIsCisgICAgIlBhZGRpbmciOiAiV2NpxJljaWEiLAorICAgICJSaWdodCI6ICJEbyBwcmF3ZWoiLAorICAgICJUZXh0IGFsaWduIjogIld5ci4gdyBwb3ppb21pZSIsCisgICAgIlRvcCI6ICJHw7NyYSIsCisgICAgIlZlcnRpY2FsIGFsaWduIjogIld5ci4gdyBwaW9uaWUiLAorICAgICJXaWR0aCI6ICJTemVyb2tvxZvEhyIsCisgICAgInBlcmNlbnQiOiAiJSIsCisgICAgInBpeGVscyI6ICJwaWtzZWxpIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9wdF9ici5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2FiM2VlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9wdF9ici5qcwpAQCAtMCwwICsxLDM4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkJhY2tncm91bmQiOiAiRnVuZG8iLAorICAgICJCYXNlbGluZSI6ICJMaW5oYSBkZSBiYXNlIiwKKyAgICAiQm9yZGVyIjogIkJvcmRhIiwKKyAgICAiQm90dG9tIjogIkJhc2UiLAorICAgICJDU1MgU3R5bGUiOiAiRXN0aWxvIChDU1MpIiwKKyAgICAiQ2VudGVyIjogIkNlbnRyYWxpemFyIiwKKyAgICAiQ2hhciI6ICJDYXJhY3RlciIsCisgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIkJvcmRhcyBmZWNoYWRhcyIsCisgICAgIkZHIENvbG9yIjogIkNvciBkZSBwcmltZWlybyBwbGFubyIsCisgICAgIkZsb2F0IjogIkZsdXR1YW50ZSIsCisgICAgIkhlaWdodCI6ICJBbHR1cmEiLAorICAgICJJbWFnZSBVUkwiOiAiVVJMIGRhIGltYWdlbSIsCisgICAgIkp1c3RpZnkiOiAiSnVzdGlmaWNhZG8iLAorICAgICJMYXlvdXQiOiAiRXNxdWVtYSIsCisgICAgIkxlZnQiOiAiRXNxdWVyZGEiLAorICAgICJNYXJnaW4iOiAiTWFyZ2VtIiwKKyAgICAiTWlkZGxlIjogIk1laW8iLAorICAgICJOb25lIjogIk5lbmh1bSIsCisgICAgIlBhZGRpbmciOiAiRXNwYcOnbyBpbnRlcm5vIiwKKyAgICAiUmlnaHQiOiAiRGlyZWl0YSIsCisgICAgIlRleHQgYWxpZ24iOiAiQWxpbmhhbWVudG8gZG8gdGV4dG8iLAorICAgICJUb3AiOiAiVG9wbyIsCisgICAgIlZlcnRpY2FsIGFsaWduIjogIkFsaW5oYW1lbnRvIHZlcnRpY2FsIiwKKyAgICAiV2lkdGgiOiAiTGFyZ3VyYSIsCisgICAgInBlcmNlbnQiOiAicG9yY2VudGFnZW0iLAorICAgICJwaXhlbHMiOiAicGl4ZWxzIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL3JvLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9yby5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWJiYTFkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9yby5qcwpAQCAtMCwwICsxLDM3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJvIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkJhY2tncm91bmQiOiAiRnVuZGFsIiwKKyAgICAiQmFzZWxpbmUiOiAiQmFzZWxpbmUiLAorICAgICJCb3JkZXIiOiAiQ2hlbmFyIiwKKyAgICAiQm90dG9tIjogIkpvcyIsCisgICAgIkNlbnRlciI6ICJDZW50cnUiLAorICAgICJDaGFyIjogIkNhcmFjdGVyIiwKKyAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAiQ2hlbmFyZSBhc2ltaWxhdGUiLAorICAgICJGRyBDb2xvciI6ICJDdWxvYXJlIHRleHQiLAorICAgICJGbG9hdCI6ICJQb3ppxaNpZSIsCisgICAgIkhlaWdodCI6ICLDjm7Eg2zFo2ltZWEiLAorICAgICJJbWFnZSBVUkwiOiAiVVJMLXVsIGltYWdpbmlpIiwKKyAgICAiSnVzdGlmeSI6ICJKdXN0aWZ5IiwKKyAgICAiTGF5b3V0IjogIkFyYW5qYW1lbnQiLAorICAgICJMZWZ0IjogIlN0w6JuZ2EiLAorICAgICJNYXJnaW4iOiAiTWFyZ2luZSIsCisgICAgIk1pZGRsZSI6ICJNaWpsb2MiLAorICAgICJOb25lIjogIk5pbWljIiwKKyAgICAiUGFkZGluZyI6ICJTcGHFo2llcmUiLAorICAgICJSaWdodCI6ICJEcmVhcHRhIiwKKyAgICAiVGV4dCBhbGlnbiI6ICJBbGluaWVyZSIsCisgICAgIlRvcCI6ICJTdXMiLAorICAgICJWZXJ0aWNhbCBhbGlnbiI6ICJBbGluaWVyZSBwZSB2ZXJ0aWNhbMSDIiwKKyAgICAiV2lkdGgiOiAiTMSDxaNpbWUiLAorICAgICJwZXJjZW50IjogInByb2NlbnRlIiwKKyAgICAicGl4ZWxzIjogInBpeGVsaSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9ydS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5OTNkYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvcnUuanMKQEAgLTAsMCArMSwzNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYWNrZ3JvdW5kIjogItCk0L7QvSIsCisgICAgIkJhc2VsaW5lIjogItCf0L4g0L3QuNC20L3QtdC5INCz0YDQsNC90LjRhtC1INGC0LXQutGB0YLQsCIsCisgICAgIkJvcmRlciI6ICLQoNCw0LzQutCwIiwKKyAgICAiQm90dG9tIjogItCf0L4g0L3QuNC20L3QtdC80YMg0LrRgNCw0Y4iLAorICAgICJDZW50ZXIiOiAi0KbQtdC90YLRgCIsCisgICAgIkNoYXIiOiAi0KHQuNC80LLQvtC7IiwKKyAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAi0J3QsNC60LvQsNC00YvQstCw0Y7RidC40LXRgdGPINGA0LDQvNC60LgiLAorICAgICJGRyBDb2xvciI6ICLQptCy0LXRgiDQv9C10YDQtdC00L3QtdCz0L4g0L/Qu9Cw0L3QsCIsCisgICAgIkZsb2F0IjogItCe0LHRgtC10LrQsNC90LjQtSIsCisgICAgIkhlaWdodCI6ICLQktGL0YHQvtGC0LAiLAorICAgICJJbWFnZSBVUkwiOiAiVVJMINC60LDRgNGC0LjQvdC60LgiLAorICAgICJKdXN0aWZ5IjogItCf0L4g0L/RgNCw0LLQvtC80YMg0LrRgNCw0Y4iLAorICAgICJMYXlvdXQiOiAi0KDQsNGB0L/QvtC70L7QttC10L3QuNC1IiwKKyAgICAiTGVmdCI6ICLQn9C+INC70LXQstC+0LzRgyDQutGA0LDRjiIsCisgICAgIk1hcmdpbiI6ICLQntGC0YHRgtGD0L8iLAorICAgICJNaWRkbGUiOiAi0J/QvtGB0YDQtdC00LjQvdC1IiwKKyAgICAiTm9uZSI6ICLQndC40YfQtdCz0L4iLAorICAgICJQYWRkaW5nIjogItCf0L7Qu9GPIiwKKyAgICAiUmlnaHQiOiAi0J/QviDQv9GA0LDQstC+0LzRgyDQutGA0LDRjiIsCisgICAgIlRleHQgYWxpZ24iOiAi0JLRi9GA0LDQstC90LjQstCw0L3QuNC1INGC0LXRgdGC0LAiLAorICAgICJUb3AiOiAi0J/QviDQstC10YDRhdC90LXQvNGDINC60YDQsNGOIiwKKyAgICAiVmVydGljYWwgYWxpZ24iOiAi0JLQtdGA0YLQuNC60LDQu9GM0L3QvtC1ICDQstGL0YDQsNCy0L3QuNCy0LDQvdC40LUiLAorICAgICJXaWR0aCI6ICLQqNC40YDQuNC90LAiLAorICAgICJwZXJjZW50IjogItC/0YDQvtGG0LXQvdGC0L7QsiIsCisgICAgInBpeGVscyI6ICLQv9C40LrRgdC10LvQtdC5IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL3NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9zaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDUxNzRkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9zaC5qcwpAQCAtMCwwICsxLDIxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkJhc2VsaW5lIjogIkRvbmphIGxpbmlqYSIsCisgICAgIkJvdHRvbSI6ICJEbm8iLAorICAgICJJbWFnZSBVUkwiOiAiVVJMIHNsaWtlIiwKKyAgICAiTGF5b3V0IjogIlByZWxvbSIsCisgICAgIkxlZnQiOiAiTGV2byIsCisgICAgIk1pZGRsZSI6ICJTcmVkaW5hIiwKKyAgICAiUmlnaHQiOiAiRGVzbm8iLAorICAgICJUb3AiOiAiVnJoIiwKKyAgICAiV2lkdGgiOiAixaBpcmluYSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9zci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvc3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQzZjRhOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvc3IuanMKQEAgLTAsMCArMSwyMSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYXNlbGluZSI6ICLQlNC+0ZrQsCDQu9C40L3QuNGY0LAiLAorICAgICJCb3R0b20iOiAi0JTQvdC+IiwKKyAgICAiSW1hZ2UgVVJMIjogItCj0KDQmyDRgdC70LjQutC1IiwKKyAgICAiTGF5b3V0IjogItCf0YDQtdC70L7QvCIsCisgICAgIkxlZnQiOiAi0JvQtdCy0L4iLAorICAgICJNaWRkbGUiOiAi0KHRgNC10LTQuNC90LAiLAorICAgICJSaWdodCI6ICLQlNC10YHQvdC+IiwKKyAgICAiVG9wIjogItCS0YDRhSIsCisgICAgIldpZHRoIjogItCo0LjRgNC40L3QsCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbmxpbmVTdHlsZXIvbGFuZy9zdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRhMTBmZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvc3YuanMKQEAgLTAsMCArMSwzNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYWNrZ3JvdW5kIjogIkJha2dydW5kIiwKKyAgICAiQmFzZWxpbmUiOiAiQmFzbGluamUiLAorICAgICJCb3JkZXIiOiAiS2FudGxpbmplIiwKKyAgICAiQm90dG9tIjogIkJvdHRlbiIsCisgICAgIkNlbnRlciI6ICJDZW50cmVyYSIsCisgICAgIkNoYXIiOiAiVGVja2VuIiwKKyAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAiT3N5bmxpZ2Ega2FudGxpbmplciIsCisgICAgIkZHIENvbG9yIjogIkbDtnJncnVuZHNmw6RyZyIsCisgICAgIkZsb2F0IjogIkZseXRhbmRlIiwKKyAgICAiSGVpZ2h0IjogIkjDtmpkIiwKKyAgICAiSW1hZ2UgVVJMIjogIkJpbGRlbnMgVVJMIiwKKyAgICAiSnVzdGlmeSI6ICJKdXN0ZXJhIiwKKyAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgIkxlZnQiOiAiVmVuc3RlciIsCisgICAgIk1hcmdpbiI6ICJNYXJnaW5hbCIsCisgICAgIk1pZGRsZSI6ICJNaXR0ZW4iLAorICAgICJOb25lIjogIkluZ2VuIiwKKyAgICAiUGFkZGluZyI6ICJMdWZ0IiwKKyAgICAiUmlnaHQiOiAiSMO2Z2VyIiwKKyAgICAiVGV4dCBhbGlnbiI6ICJKdXN0ZXJhIHRleHQiLAorICAgICJUb3AiOiAiw5Z2ZXJrYW50IiwKKyAgICAiVmVydGljYWwgYWxpZ24iOiAiVmVydGlrYWwganVzdGVyaW5nIiwKKyAgICAiV2lkdGgiOiAiQnJlZGQiLAorICAgICJwZXJjZW50IjogInByb2NlbnQiLAorICAgICJwaXhlbHMiOiAiYmlsZHB1bmt0ZXIiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5saW5lU3R5bGVyL2xhbmcvdHIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL3RyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNjUzZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0lubGluZVN0eWxlci9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsMzcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQmFja2dyb3VuZCI6ICJBcmthIHBsYW4iLAorICAgICJCYXNlbGluZSI6ICJUYWJhbiBoaXphc8SxIiwKKyAgICAiQm9yZGVyIjogIktlbmFybMSxayIsCisgICAgIkJvdHRvbSI6ICJBbHRhIiwKKyAgICAiQ2VudGVyIjogIk9ydGFsYSIsCisgICAgIkNoYXIiOiAiS2FyYWt0ZXIiLAorICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICJEYXJhbHTEsWxtxLHFnyBrZW5hcmzEsWtsYXIiLAorICAgICJGRyBDb2xvciI6ICLDlm4gcGxhbiByZW5naSIsCisgICAgIkZsb2F0IjogIktheWTEsXIiLAorICAgICJIZWlnaHQiOiAiWcO8a3Nla2xpayIsCisgICAgIkltYWdlIFVSTCI6ICJSZXNpbSBVUkwnc2kiLAorICAgICJKdXN0aWZ5IjogIllhc2xhIiwKKyAgICAiTGF5b3V0IjogIkTDvHplbiIsCisgICAgIkxlZnQiOiAiU29sYSIsCisgICAgIk1hcmdpbiI6ICJLZW5hciBib8WfbHXEn3UiLAorICAgICJNaWRkbGUiOiAiT3J0YWxhIiwKKyAgICAiTm9uZSI6ICJIacOnYmlyaSIsCisgICAgIlBhZGRpbmciOiAixLDDpyBib8WfbHVrIiwKKyAgICAiUmlnaHQiOiAiU2HEn2EiLAorICAgICJUZXh0IGFsaWduIjogIk1ldGluIGhpemFzxLEiLAorICAgICJUb3AiOiAiWXVrYXLEsSIsCisgICAgIlZlcnRpY2FsIGFsaWduIjogIkRpa2V5IGhpemEiLAorICAgICJXaWR0aCI6ICJHZW5pxZ9saWsiLAorICAgICJwZXJjZW50IjogIiUiLAorICAgICJwaXhlbHMiOiAiUGlrc2VsIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9kaWFsb2cuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvZGlhbG9nLmh0bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0luc2VydEltYWdlL2RpYWxvZy5odG1sCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2RpYWxvZy5odG1sCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2luc2VydF9pbWFnZS5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9pbnNlcnRfaW1hZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTA5OTEyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9pbnNlcnRfaW1hZ2UuaHRtbApAQCAtMCwwICsxLDE3MyBAQAorPCFET0NUWVBFIGh0bWwKKyAgICAgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKKyAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Cis8aGVhZD4KKyAgPHRpdGxlPkluc2VydCBJbWFnZTwvdGl0bGU+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL3BvcHVwcy9wb3B1cC5qcyI+PC9zY3JpcHQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi8uLi9wb3B1cHMvcG9wdXAuY3NzIiAvPgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKKworWGluaGEgPSB3aW5kb3cub3BlbmVyLlhpbmhhOworZnVuY3Rpb24gaTE4bihzdHIpIHsKKyAgcmV0dXJuIChYaW5oYS5fbGMoc3RyLCAnSW5zZXJ0SW1hZ2UnKSk7Cit9CisKK2Z1bmN0aW9uIEluaXQoKSB7CisgIF9fZGxnX3RyYW5zbGF0ZSgnSW5zZXJ0SW1hZ2UnKTsKKyAgX19kbGdfaW5pdChudWxsLHt3aWR0aDo0MTAsaGVpZ2h0OjQwMH0pOworICAvLyBNYWtlIHN1cmUgdGhlIHRyYW5zbGF0ZWQgc3RyaW5nIGFwcGVhcnMgaW4gdGhlIGRyb3AgZG93bi4gKGZvciBnZWNrbykKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYWxpZ24iKS5zZWxlY3RlZEluZGV4ID0gMTsKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYWxpZ24iKS5zZWxlY3RlZEluZGV4ID0gNTsKKyAgdmFyIHBhcmFtID0gd2luZG93LmRpYWxvZ0FyZ3VtZW50czsKKyAgaWYgKHBhcmFtWyJmX2Jhc2UiXSkgeworICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYmFzZSIpLnZhbHVlID0gcGFyYW1bImZfYmFzZSJdOworICB9CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3VybCIpLnZhbHVlICAgID0gcGFyYW1bImZfdXJsIl0gPyBwYXJhbVsiZl91cmwiXSA6ICIiOworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9hbHQiKS52YWx1ZSAgICA9IHBhcmFtWyJmX2FsdCJdID8gcGFyYW1bImZfYWx0Il0gOiAiIjsKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYm9yZGVyIikudmFsdWUgPSAodHlwZW9mIHBhcmFtWyJmX2JvcmRlciJdIT0idW5kZWZpbmVkIikgPyBwYXJhbVsiZl9ib3JkZXIiXSA6ICIiOworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9hbGlnbiIpLnZhbHVlICA9IHBhcmFtWyJmX2FsaWduIl0gPyBwYXJhbVsiZl9hbGlnbiJdIDogIiI7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3ZlcnQiKS52YWx1ZSAgID0gKHR5cGVvZiBwYXJhbVsiZl92ZXJ0Il0hPSJ1bmRlZmluZWQiKSA/IHBhcmFtWyJmX3ZlcnQiXSA6ICIiOworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9ob3JpeiIpLnZhbHVlICA9ICh0eXBlb2YgcGFyYW1bImZfaG9yaXoiXSE9InVuZGVmaW5lZCIpID8gcGFyYW1bImZfaG9yaXoiXSA6ICIiOworICBpZiAocGFyYW1bImZfdXJsIl0pIHsKKyAgICAgIHdpbmRvdy5pcHJldmlldy5sb2NhdGlvbi5yZXBsYWNlKFhpbmhhLl9yZXNvbHZlUmVsYXRpdmVVcmwocGFyYW0uZl9iYXNlLCBwYXJhbS5mX3VybCkpOworICB9CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3VybCIpLmZvY3VzKCk7Cit9CisKK2Z1bmN0aW9uIG9uT0soKSB7CisgIHZhciByZXF1aXJlZCA9IHsKKyAgICAiZl91cmwiOiBpMThuKCJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIikKKyAgfTsKKyAgZm9yICh2YXIgaSBpbiByZXF1aXJlZCkgeworICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGkpOworICAgIGlmICghZWwudmFsdWUpIHsKKyAgICAgIGFsZXJ0KHJlcXVpcmVkW2ldKTsKKyAgICAgIGVsLmZvY3VzKCk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisgIC8vIHBhc3MgZGF0YSBiYWNrIHRvIHRoZSBjYWxsaW5nIHdpbmRvdworICB2YXIgZmllbGRzID0gWyJmX3VybCIsICJmX2FsdCIsICJmX2FsaWduIiwgImZfYm9yZGVyIiwKKyAgICAgICAgICAgICAgICAiZl9ob3JpeiIsICJmX3ZlcnQiXTsKKyAgdmFyIHBhcmFtID0gbmV3IE9iamVjdCgpOworICBmb3IgKHZhciBpIGluIGZpZWxkcykgeworICAgIHZhciBpZCA9IGZpZWxkc1tpXTsKKyAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgcGFyYW1baWRdID0gZWwudmFsdWU7CisgIH0KKyAgX19kbGdfY2xvc2UocGFyYW0pOworICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIG9uQ2FuY2VsKCkgeworICBfX2RsZ19jbG9zZShudWxsKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBvblByZXZpZXcoKSB7CisgIHZhciBmX3VybCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3VybCIpOworICB2YXIgdXJsID0gZl91cmwudmFsdWU7CisgIHZhciBiYXNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYmFzZSIpLnZhbHVlOworICBpZiAoIXVybCkgeworICAgIGFsZXJ0KGkxOG4oIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiKSk7CisgICAgZl91cmwuZm9jdXMoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgd2luZG93LmlwcmV2aWV3LmxvY2F0aW9uLnJlcGxhY2UoWGluaGEuX3Jlc29sdmVSZWxhdGl2ZVVybChiYXNlLCB1cmwpKTsKKyAgcmV0dXJuIGZhbHNlOworfQorPC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgY2xhc3M9ImRpYWxvZyIgb25sb2FkPSJJbml0KCkiPgorCis8ZGl2IGNsYXNzPSJ0aXRsZSI+SW5zZXJ0IEltYWdlPC9kaXY+Cis8IS0tLSBuZXcgc3R1ZmYgLS0tPgorPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0iZ2V0Ij4KKzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImJhc2UiIGlkPSJmX2Jhc2UiLz4KKzx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBzdHlsZT0icGFkZGluZzogMHB4OyBtYXJnaW46IDBweCI+CisgIDx0Ym9keT4KKworICA8dHI+CisgICAgPHRkIHN0eWxlPSJ3aWR0aDogN2VtOyB0ZXh0LWFsaWduOiByaWdodCI+SW1hZ2UgVVJMOjwvdGQ+CisgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1cmwiIGlkPSJmX3VybCIgc3R5bGU9IndpZHRoOjc1JSIKKyAgICAgIHRpdGxlPSJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiIC8+CisgICAgICA8YnV0dG9uIG5hbWU9InByZXZpZXciIG9uY2xpY2s9InJldHVybiBvblByZXZpZXcoKTsiCisgICAgICB0aXRsZT0iUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93Ij5QcmV2aWV3PC9idXR0b24+CisgICAgPC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0ZCBzdHlsZT0id2lkdGg6IDdlbTsgdGV4dC1hbGlnbjogcmlnaHQiPkFsdGVybmF0ZSB0ZXh0OjwvdGQ+CisgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJhbHQiIGlkPSJmX2FsdCIgc3R5bGU9IndpZHRoOjEwMCUiCisgICAgICB0aXRsZT0iRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiIC8+PC90ZD4KKyAgPC90cj4KKworICA8L3Rib2R5PgorPC90YWJsZT4KKworPGZpZWxkc2V0IHN0eWxlPSJmbG9hdDogbGVmdDsgbWFyZ2luLWxlZnQ6IDVweDsiPgorPGxlZ2VuZD5MYXlvdXQ8L2xlZ2VuZD4KKworPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJmbCI+QWxpZ25tZW50OjwvZGl2PgorPHNlbGVjdCBzaXplPSIxIiBuYW1lPSJhbGlnbiIgaWQ9ImZfYWxpZ24iCisgIHRpdGxlPSJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIj4KKyAgPG9wdGlvbiB2YWx1ZT0iIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPk5vdCBzZXQ8L29wdGlvbj4KKyAgPG9wdGlvbiB2YWx1ZT0ibGVmdCIgICAgICAgICAgICAgICAgICAgICAgICAgPkxlZnQ8L29wdGlvbj4KKyAgPG9wdGlvbiB2YWx1ZT0icmlnaHQiICAgICAgICAgICAgICAgICAgICAgICAgPlJpZ2h0PC9vcHRpb24+CisgIDxvcHRpb24gdmFsdWU9InRleHR0b3AiICAgICAgICAgICAgICAgICAgICAgID5UZXh0dG9wPC9vcHRpb24+CisgIDxvcHRpb24gdmFsdWU9ImFic21pZGRsZSIgICAgICAgICAgICAgICAgICAgID5BYnNtaWRkbGU8L29wdGlvbj4KKyAgPG9wdGlvbiB2YWx1ZT0iYmFzZWxpbmUiIHNlbGVjdGVkPSJzZWxlY3RlZCIgPkJhc2VsaW5lPC9vcHRpb24+CisgIDxvcHRpb24gdmFsdWU9ImFic2JvdHRvbSIgICAgICAgICAgICAgICAgICAgID5BYnNib3R0b208L29wdGlvbj4KKyAgPG9wdGlvbiB2YWx1ZT0iYm90dG9tIiAgICAgICAgICAgICAgICAgICAgICAgPkJvdHRvbTwvb3B0aW9uPgorICA8b3B0aW9uIHZhbHVlPSJtaWRkbGUiICAgICAgICAgICAgICAgICAgICAgICA+TWlkZGxlPC9vcHRpb24+CisgIDxvcHRpb24gdmFsdWU9InRvcCIgICAgICAgICAgICAgICAgICAgICAgICAgID5Ub3A8L29wdGlvbj4KKzwvc2VsZWN0PgorCis8YnIgLz4KKworPGRpdiBjbGFzcz0iZmwiPkJvcmRlciB0aGlja25lc3M6PC9kaXY+Cis8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYm9yZGVyIiBpZD0iZl9ib3JkZXIiIHNpemU9IjUiCit0aXRsZT0iTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciIgLz4KKworPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgorCis8L2ZpZWxkc2V0PgorCis8ZmllbGRzZXQ+Cis8bGVnZW5kPlNwYWNpbmc8L2xlZ2VuZD4KKworPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJmciI+SG9yaXpvbnRhbDo8L2Rpdj4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJob3JpeiIgaWQ9ImZfaG9yaXoiIHNpemU9IjUiCit0aXRsZT0iSG9yaXpvbnRhbCBwYWRkaW5nIiAvPgorCis8YnIgLz4KKworPGRpdiBjbGFzcz0iZnIiPlZlcnRpY2FsOjwvZGl2PgorPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InZlcnQiIGlkPSJmX3ZlcnQiIHNpemU9IjUiCit0aXRsZT0iVmVydGljYWwgcGFkZGluZyIgLz4KKworPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgorCis8L2ZpZWxkc2V0PgorPGRpdiBjbGFzcz0ic3BhY2UiIHN0eWxlPSJjbGVhcjphbGwiPjwvZGl2PgorPGRpdj4KK0ltYWdlIFByZXZpZXc6PGJyIC8+CisgICAgPGlmcmFtZSBuYW1lPSJpcHJldmlldyIgaWQ9ImlwcmV2aWV3IiBmcmFtZWJvcmRlcj0iMCIgc3R5bGU9ImJvcmRlciA6IDFweCBzb2xpZCBncmF5OyIgCisJaGVpZ2h0PSIyMDAiIHdpZHRoPSIxMDAlIiBzcmM9Ii4uLy4uL3BvcHVwcy9ibGFuay5odG1sIj48L2lmcmFtZT4KKzwvZGl2PgorPGRpdiBpZD0iYnV0dG9ucyI+Cis8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0ib2siIG9uY2xpY2s9InJldHVybiBvbk9LKCk7Ij5PSzwvYnV0dG9uPgorPGJ1dHRvbiB0eXBlPSJidXR0b24iIG5hbWU9ImNhbmNlbCIgb25jbGljaz0icmV0dXJuIG9uQ2FuY2VsKCk7Ij5DYW5jZWw8L2J1dHRvbj4KKzwvZGl2PgorPC9mb3JtPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvaW5zZXJ0X2ltYWdlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9pbnNlcnRfaW1hZ2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUxNzU0NgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvaW5zZXJ0X2ltYWdlLmpzCkBAIC0wLDAgKzEsMTA5IEBACisgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS06bm9UYWJzPXRydWU6dGFiU2l6ZT0yOmluZGVudFNpemU9MjotLQorICAgIC0tICBYaW5oYSAoaXMgbm90IGh0bWxBcmVhKSAtIGh0dHA6Ly94aW5oYS5vcmcKKyAgICAtLQorICAgIC0tICBVc2Ugb2YgWGluaGEgaXMgZ3JhbnRlZCBieSB0aGUgdGVybXMgb2YgdGhlIGh0bWxBcmVhIExpY2Vuc2UgKGJhc2VkIG9uCisgICAgLS0gIEJTRCBsaWNlbnNlKSAgcGxlYXNlIHJlYWQgbGljZW5zZS50eHQgaW4gdGhpcyBwYWNrYWdlIGZvciBkZXRhaWxzLgorICAgIC0tCisgICAgLS0gIENvcHlyaWdodCAoYykgMjAwNS0yMDA4IFhpbmhhIERldmVsb3BlciBUZWFtIGFuZCBjb250cmlidXRvcnMKKyAgICAtLQorICAgIC0tICBUaGlzIGlzIHRoZSBYaW5oYSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbiBvZiBhbiBpbWFnZSBpbnNlcnRpb24gcGx1Z2luCisgICAgLS0KKyAgICAtLSAgaGUgZmlsZSBpcyBsb2FkZWQgYXMgYSBzcGVjaWFsIHBsdWdpbiBieSB0aGUgWGluaGEgQ29yZSB3aGVuIG5vIGFsdGVybmF0aXZlIG1ldGhvZCAocGx1Z2luKSBpcyBsb2FkZWQuCisgICAgLS0KKyAgICAtLQorICAgIC0tICAkSGVhZFVSTDogaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvbW9kdWxlcy9JbnNlcnRJbWFnZS9pbnNlcnRfaW1hZ2UuanMgJAorICAgIC0tICAkTGFzdENoYW5nZWREYXRlOiAyMDE4LTAyLTE5IDIwOjM1OjQ5ICsxMzAwIChNb24sIDE5IEZlYiAyMDE4KSAkCisgICAgLS0gICRMYXN0Q2hhbmdlZFJldmlzaW9uOiAxNDAyICQKKyAgICAtLSAgJExhc3RDaGFuZ2VkQnk6IGdvZ28gJAorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgCitJbnNlcnRJbWFnZS5fcGx1Z2luSW5mbyA9IHsKKyAgbmFtZSAgICAgICAgICA6ICJJbnNlcnRJbWFnZSIsCisgIG9yaWdpbiAgICAgICAgOiAiWGluaGEgQ29yZSIsCisgIHZlcnNpb24gICAgICAgOiAiJExhc3RDaGFuZ2VkUmV2aXNpb246IDE0MDIgJCIucmVwbGFjZSgvXlteOl0qOlxzKiguKilccypcJCQvLCAnJDEnKSwKKyAgZGV2ZWxvcGVyICAgICA6ICJUaGUgWGluaGEgQ29yZSBEZXZlbG9wZXIgVGVhbSIsCisgIGRldmVsb3Blcl91cmwgOiAiJEhlYWRVUkw6IGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvSW5zZXJ0SW1hZ2UvaW5zZXJ0X2ltYWdlLmpzICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywgJyQxJyksCisgIHNwb25zb3IgICAgICAgOiAiIiwKKyAgc3BvbnNvcl91cmwgICA6ICIiLAorICBsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIgorfTsKKworZnVuY3Rpb24gSW5zZXJ0SW1hZ2UoZWRpdG9yKSB7CisJdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisJdmFyIGNmZyA9IGVkaXRvci5jb25maWc7CisJdmFyIHNlbGYgPSB0aGlzOworCisgICAKKyAgIGlmKHR5cGVvZiBlZGl0b3IuX2luc2VydEltYWdlID09ICd1bmRlZmluZWQnKSAKKyAgIHsKKyAgICBlZGl0b3IuX2luc2VydEltYWdlID0gZnVuY3Rpb24oKSB7IHNlbGYuc2hvdygpOyB9OworICAgLy8gZWRpdG9yLmNvbmZpZy5idG5MaXN0Lmluc2VydGltYWdlWzNdID0gZnVuY3Rpb24oKSB7IHNlbGYuc2hvdygpOyB9CisgICB9CisgIH0KKyAgCitJbnNlcnRJbWFnZS5wcm90b3R5cGUuX2xjID0gZnVuY3Rpb24oc3RyaW5nKSB7CisJcmV0dXJuIFhpbmhhLl9sYyhzdHJpbmcsICdJbnNlcnRJbWFnZScpOworfTsKKworSW5zZXJ0SW1hZ2UucHJvdG90eXBlLm9uR2VuZXJhdGVPbmNlID0gZnVuY3Rpb24oKQoreworCUluc2VydEltYWdlLmxvYWRBc3NldHMoKTsKK307CisKK0luc2VydEltYWdlLmxvYWRBc3NldHMgPSBmdW5jdGlvbigpCit7CisJdmFyIHNlbGYgPSBJbnNlcnRJbWFnZTsKKwlpZiAoc2VsZi5sb2FkaW5nKSByZXR1cm47CisJc2VsZi5sb2FkaW5nID0gdHJ1ZTsKKwlYaW5oYS5fZ2V0YmFjayhfZWRpdG9yX3VybCArICdtb2R1bGVzL0luc2VydEltYWdlL2RpYWxvZy5odG1sJywgZnVuY3Rpb24oZ2V0YmFjaykgeyBzZWxmLmh0bWwgPSBnZXRiYWNrOyBzZWxmLmRpYWxvZ1JlYWR5ID0gdHJ1ZTsgfSk7CisJWGluaGEuX2dldGJhY2soX2VkaXRvcl91cmwgKyAnbW9kdWxlcy9JbnNlcnRJbWFnZS9wbHVnaW5NZXRob2RzLmpzJywgZnVuY3Rpb24oZ2V0YmFjaykgeyBldmFsKGdldGJhY2spOyBzZWxmLm1ldGhvZHNSZWFkeSA9IHRydWU7IH0pOworfTsKK0luc2VydEltYWdlLnByb3RvdHlwZS5vblVwZGF0ZVRvb2xiYXIgPSBmdW5jdGlvbigpCit7IAorICBpZiAoIShJbnNlcnRJbWFnZS5kaWFsb2dSZWFkeSAmJiBJbnNlcnRJbWFnZS5tZXRob2RzUmVhZHkpKQorCXsKKwkgIHRoaXMuZWRpdG9yLl90b29sYmFyT2JqZWN0cy5pbnNlcnRpbWFnZS5zdGF0ZSgiZW5hYmxlZCIsIGZhbHNlKTsKKyAgfQorICBlbHNlIHRoaXMub25VcGRhdGVUb29sYmFyID0gbnVsbDsKK307CisgIAorSW5zZXJ0SW1hZ2UucHJvdG90eXBlLnByZXBhcmVEaWFsb2cgPSBmdW5jdGlvbigpCit7CisJdmFyIHNlbGYgPSB0aGlzOworCXZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgCisJdmFyIGRpYWxvZyA9IHRoaXMuZGlhbG9nID0gbmV3IFhpbmhhLkRpYWxvZyhlZGl0b3IsIEluc2VydEltYWdlLmh0bWwsICdYaW5oYScse3dpZHRoOjQxMH0pCisJLy8gQ29ubmVjdCB0aGUgT0sgYW5kIENhbmNlbCBidXR0b25zCisJZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdvaycpLm9uY2xpY2sgPSBmdW5jdGlvbigpIHtzZWxmLmFwcGx5KCk7fQorCisJZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdjYW5jZWwnKS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7IHNlbGYuZGlhbG9nLmhpZGUoKX07CisKKwlkaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ3ByZXZpZXcnKS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7IAorCSAgdmFyIGZfdXJsID0gZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJmX3VybCIpOworCSAgdmFyIHVybCA9IGZfdXJsLnZhbHVlOworCisJICBpZiAoIXVybCkgeworCSAgICBhbGVydChkaWFsb2cuX2xjKCJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIikpOworCSAgICBmX3VybC5mb2N1cygpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisJICBkaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ2lwcmV2aWV3Jykuc3JjID0gdXJsOworCSAgcmV0dXJuIGZhbHNlOworCX0KKwl0aGlzLmRpYWxvZy5vbnJlc2l6ZSA9IGZ1bmN0aW9uICgpCisgIHsKKwkJdmFyIG5ld0hlaWdodEZvclByZXZpZXcgPSAKKwkJcGFyc2VJbnQodGhpcy5oZWlnaHQsMTApIAorCQktIHRoaXMuZ2V0RWxlbWVudEJ5SWQoJ2gxJykub2Zmc2V0SGVpZ2h0IAorCQktIHRoaXMuZ2V0RWxlbWVudEJ5SWQoJ2J1dHRvbnMnKS5vZmZzZXRIZWlnaHQKKwkJLSB0aGlzLmdldEVsZW1lbnRCeUlkKCdpbnB1dHMnKS5vZmZzZXRIZWlnaHQgCisJCS0gcGFyc2VJbnQodGhpcy5yb290RWxlbS5zdHlsZS5wYWRkaW5nQm90dG9tLDEwKTsgLy8gd2UgaGF2ZSBhIHBhZGRpbmcgYXQgdGhlIGJvdHRvbSwgZ290dGEgdGFrZSB0aGlzIGludG8gYWNvdW50CisJCQorCQkKKwkJdGhpcy5nZXRFbGVtZW50QnlJZCgiaXByZXZpZXciKS5zdHlsZS5oZWlnaHQgPSAoKG5ld0hlaWdodEZvclByZXZpZXcgPiAwKSA/IG5ld0hlaWdodEZvclByZXZpZXcgOiAwKSArICJweCI7IC8vIG5vLWdvIGJleW9uZCAwCisJCQorCQl0aGlzLmdldEVsZW1lbnRCeUlkKCJpcHJldmlldyIpLnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAtIDIgICArICdweCc7IC8vIGFuZCB0aGUgd2lkdGgKKworICB9CisJdGhpcy5kaWFsb2dSZWFkeSA9IHRydWU7Cit9OwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL2NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL2NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNzhlNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvY2guanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi5Y+W5raIIiwKKyAgICAiT0siOiAi5aW9IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvY3ouanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvY3ouanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhkM2UxYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9jei5qcwpAQCAtMCwwICsxLDIzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImN6IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkJhc2VsaW5lIjogIlrDoWtsYWRuw60gbGlua2EiLAorICAgICJCb3R0b20iOiAiRG9sxa8iLAorICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgIkltYWdlIFVSTDoiOiAiQWRyZXNhIG9icsOhemt1IiwKKyAgICAiTGF5b3V0IjogIlJvemxvxb5lbsOtIiwKKyAgICAiTGVmdCI6ICJWbGV2byIsCisgICAgIk1pZGRsZSI6ICJOYSBzdMWZZWQiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlJpZ2h0IjogIlZwcmF2byIsCisgICAgIlNwYWNpbmciOiAiTWV6ZXJ5IiwKKyAgICAiVG9wIjogIk5haG9ydSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL2RhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMzgwNTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvZGEuanMKQEAgLTAsMCArMSw0MyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAiQnVuZCIsCisgICAgIkFic21pZGRsZSI6ICJDZW50cmVyZXQiLAorICAgICJBbGlnbm1lbnQ6IjogIkp1c3RlcmluZzoiLAorICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiQWx0ZXJuYXRpdiB0ZXh0OiIsCisgICAgIkJhc2VsaW5lIjogIkdydW5kbGluamUiLAorICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJLYW50YnJlZGRlOiIsCisgICAgIkJvdHRvbSI6ICJUZWtzdGJ1bmQiLAorICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiQW5naXYgYmlsbGVkZXRzIFVSTCIsCisgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogImZvciBicm93c2VyZSBkZXIgaWtrZSB1bmRlcnN0w7h0dGVyIGJpbGxlZGVyIiwKKyAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIlZhbmRyZXQgZnlsZCIsCisgICAgIkhvcml6b250YWw6IjogInZhbmRyZXQ6IiwKKyAgICAiSW1hZ2UgUHJldmlldzoiOiAiQmlsbGVkZSBzbXVna2lnOiIsCisgICAgIkltYWdlIFVSTDoiOiAiQmlsbGVkZSBVUkw6IiwKKyAgICAiSW5zZXJ0IEltYWdlIjogIkluZHPDpnQgYmlsbGVkZSIsCisgICAgIkxheW91dCI6ICJMYXlvdXQiLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIlRvbSBodmlzIGluZ2VuIGthbnQiLAorICAgICJMZWZ0IjogIlZlbnN0cmUiLAorICAgICJNaWRkbGUiOiAiTWlkdCIsCisgICAgIk5vdCBzZXQiOiAiVWJlc3RlbXQiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiQmlsbGVkZXRzIHBvc2l0aW9uIiwKKyAgICAiUHJldmlldyI6ICJTbXVna2lnIiwKKyAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlNtdWdraWcgYWYgYmlsbGVkZXQgaSBldCBueXQgdmluZHVlIiwKKyAgICAiUmlnaHQiOiAiSMO4anJlIiwKKyAgICAiU3BhY2luZyI6ICJBZnN0YW5kIiwKKyAgICAiVGV4dHRvcCI6ICJUZWtzdHRvcCIsCisgICAgIlRvcCI6ICJUb3AiLAorICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIkxvZHJldCBmeWxkIiwKKyAgICAiVmVydGljYWw6IjogImxvZHJldDoiLAorICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIkR1IHNrYWwgYW5naXZlIGVuIFVSTCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL2RlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDJiNTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvZGUuanMKQEAgLTAsMCArMSw0MyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAidW50ZW4gYsO8bmRpZyIsCisgICAgIkFic21pZGRsZSI6ICJtaXR0aWciLAorICAgICJBbGlnbm1lbnQ6IjogIkF1c3JpY2h0dW5nOiIsCisgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJBbHRlcm5hdGl2ZXIgVGV4dDoiLAorICAgICJCYXNlbGluZSI6ICJHcnVuZGxpbmllIiwKKyAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiUmFuZHN0w6Rya2U6IiwKKyAgICAiQm90dG9tIjogInVudGVuIiwKKyAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICJCaXR0ZSBnZWJlbiBzaWUgaGllciBkaWUgQmlsZCBVUkwgZWluIiwKKyAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiZsO8ciBCcm93c2VyLCBkaWUga2VpbmUgQmlsZGVyIHVudGVyc3TDvHR6ZW4iLAorICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiaG9yaXpvbnRhbGVyIEluaGFsdHNhYnN0YW5kIiwKKyAgICAiSG9yaXpvbnRhbDoiOiAiaG9yaXpvbnRhbDoiLAorICAgICJJbWFnZSBQcmV2aWV3OiI6ICJCaWxkIFZvcmFuc2ljaHQ6IiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJCaWxkIFVSTDoiLAorICAgICJJbnNlcnQgSW1hZ2UiOiAiQmlsZCBlaW5mw7xnZW4iLAorICAgICJMYXlvdXQiOiAiR2VzdGFsdHVuZyIsCisgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAibGVlciBsYXNzZW4gZsO8ciBrZWluZW4gUmFuZCIsCisgICAgIkxlZnQiOiAibGlua3MiLAorICAgICJNaWRkbGUiOiAiemVudHJpZXJ0IiwKKyAgICAiTm90IHNldCI6ICJuaWNodCBlaW5nZXN0ZWxsdCIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJBbm9yZG51bmcgZGllc2VzIEJpbGRlcyIsCisgICAgIlByZXZpZXciOiAiVm9yc2NoYXUiLAorICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiVm9yYW5zaWNodCBkZXMgQmlsZGVzIGluIGVpbmVtIG5ldWVuIEZlbnN0ZXIiLAorICAgICJSaWdodCI6ICJyZWNodHMiLAorICAgICJTcGFjaW5nIjogIkFic3RhbmQiLAorICAgICJUZXh0dG9wIjogIm9iZW4gYsO8bmRpZyIsCisgICAgIlRvcCI6ICJvYmVuIiwKKyAgICAiVmVydGljYWwgcGFkZGluZyI6ICJ2ZXJ0aWthbGVyIEluaGFsdHNhYnN0YW5kIiwKKyAgICAiVmVydGljYWw6IjogInZlcnRpa2FsOiIsCisgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiQml0dGUgZ2ViZW4gU2llIGRpZSBVUkwgZWluIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvZWUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvZWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE5MTZlOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9lZS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJMb29idSIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvZWwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUwMmM4YQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9lbC5qcwpAQCAtMCwwICsxLDIzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkJhc2VsaW5lIjogIkJhc2VsaW5lIiwKKyAgICAiQm90dG9tIjogIs6azqzPhM+JIM68zq3Pgc6/z4IiLAorICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciLAorICAgICJJbWFnZSBVUkw6IjogIlVSTCDOtc65zrrPjM69zrHPgiIsCisgICAgIkxheW91dCI6ICLOlM65zqzPhM6xzr7OtyIsCisgICAgIkxlZnQiOiAizpHPgc65z4PPhM61z4HOrCIsCisgICAgIk1pZGRsZSI6ICLOms6tzr3PhM+Bzr8iLAorICAgICJPSyI6ICLOlc69z4TOrM6+zrXOuSIsCisgICAgIlJpZ2h0IjogIs6UzrXOvs65zqwiLAorICAgICJTcGFjaW5nIjogIs6Rz4DOv8+Dz4TOrM+DzrXOuc+CIiwKKyAgICAiVG9wIjogIs6gzqzOvc+JIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRhN2UxZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9lcy5qcwpAQCAtMCwwICsxLDQyIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVzIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICJJbmZlcmlvciBhYnNvbHV0byIsCisgICAgIkFic21pZGRsZSI6ICJNZWRpbyBBYnNvbHV0byIsCisgICAgIkFsaWdubWVudDoiOiAiQWxpbmVhY2nDs246IiwKKyAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIlRleHRvIGFsdGVybmF0aXZvOiIsCisgICAgIkJhc2VsaW5lIjogIkzDrW5lYSBiYXNlIiwKKyAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiVGFtYcOxbyBkZWwgYm9yZGU6IiwKKyAgICAiQm90dG9tIjogIkluZmVyaW9yIiwKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiUGFyYSBuYXZlZ2Fkb3JlcyBxdWUgbm8gc29wb3J0YW4gaW3DoWdlbmVzIiwKKyAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIlJlbGxlbm8gaG9yaXpvbnRhbCIsCisgICAgIkhvcml6b250YWw6IjogImhvcml6b250YWw6IiwKKyAgICAiSW1hZ2UgUHJldmlldzoiOiAiUHJldmlzdWFsaXphY2nDs24gZGUgbGEgaW1hZ2VuOiIsCisgICAgIkltYWdlIFVSTDoiOiAiSW1hZ2VuIFVSTDoiLAorICAgICJJbnNlcnQgSW1hZ2UiOiAiaW5zZXJ0YXIgaW1hZ2VuIiwKKyAgICAiTGF5b3V0IjogIkRpc3RyaWJ1Y2nDs24iLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIlZhY8OtbyBzaSBubyBkZXNlYSBuaW5nw7puIGJvcmRlIiwKKyAgICAiTGVmdCI6ICJJenF1aWVyZGEiLAorICAgICJNaWRkbGUiOiAiTWVkaW8iLAorICAgICJOb3Qgc2V0IjogIk5vIGRlZmluaWRvIiwKKyAgICAiT0siOiAiQWNlcHRhciIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zaWNpw7NuIGRlIGxhIGltYWdlbiIsCisgICAgIlByZXZpZXciOiAiUHJldmlzdWFsaXphciIsCisgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJQcmV2aXN1YWxpemFyIGVuIHVuYSBudWV2YSB2ZW50YW5hIiwKKyAgICAiUmlnaHQiOiAiRGVyZWNoYSIsCisgICAgIlNwYWNpbmciOiAiRXNwYWNpYWRvIiwKKyAgICAiVGV4dHRvcCI6ICJUZXh0byBTdXBlcmlvciIsCisgICAgIlRvcCI6ICJTdXBlcmlvciIsCisgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiUmVsbGVubyBWZXJ0aWNhbCIsCisgICAgIlZlcnRpY2FsOiI6ICJWZXJ0aWNhbDoiLAorICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIkRlYmUgaW50cm9kdWNpciBsYSBVUkwiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9ldS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9ldS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzc0NGMwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL2V1LmpzCkBAIC0wLDAgKzEsNDMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJzYm90dG9tIjogIklydWRpYXJlbiBiZWhla2FsZGVhbiIsCisgICAgIkFic21pZGRsZSI6ICJJcnVkaWFyZW4gZXJkaWFuIiwKKyAgICAiQWxpZ25tZW50OiI6ICJMZXJyb2thdHplYToiLAorICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiVGVzdHUgYWx0ZXJuYXRpYm9hOiIsCisgICAgIkJhc2VsaW5lIjogIklydWRpYXJlbiBvaW5lYW4iLAorICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJFcnR6YXJlbiBsb2RpZXJhOiIsCisgICAgIkJvdHRvbSI6ICJCZWhlYW4iLAorICAgICJDYW5jZWwiOiAiVXR6aSIsCisgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICJJZGF0eiBlemF6dSBpcnVkaWFyZW4gVVJMLWEgaGVtZW4iLAorICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJJcnVkaXJpayBvbmFydHplbiBleiBkdXRlbiBuYWJpZ2F0emFpbGVlbnR6YXQiLAorICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiQmV0ZWdhcnJpIGhvcml6b250YWxhIiwKKyAgICAiSG9yaXpvbnRhbDoiOiAiSG9yaXpvbnRhbGE6IiwKKyAgICAiSW1hZ2UgUHJldmlldzoiOiAiSXJ1ZGlhcmVuIGF1cnJlYmlzdGE6IiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJJcnVkaWFyZW4gVVJMLWE6IiwKKyAgICAiSW5zZXJ0IEltYWdlIjogIklydWRpYSB0eGVydGF0dSIsCisgICAgIkxheW91dCI6ICJEaXNlaW51YSIsCisgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiVXp0YXp1IGh1dHNpayBlcnR6aWsgZXogc29ydHpla28iLAorICAgICJMZWZ0IjogIkV6a2VycmV0YXJhIiwKKyAgICAiTWlkZGxlIjogIkVyZGlhbiIsCisgICAgIk5vdCBzZXQiOiAiRXogZ2FpdHVhIiwKKyAgICAiT0siOiAiQWRvcyIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiSXJ1ZGlhcmVuIGtva2FwZW5hIiwKKyAgICAiUHJldmlldyI6ICJBdXJyZWJpc3RhIiwKKyAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIkF1cnJlaWt1c2kgaXJ1ZGlhIGJlc3RlIGxlaGlvIGJhdGVhbiIsCisgICAgIlJpZ2h0IjogIkVza3VpbmV0YXJhIiwKKyAgICAiU3BhY2luZyI6ICJUYXJ0ZWEiLAorICAgICJUZXh0dG9wIjogIklydWRpYXJlbiBnb2lhbGRlYW4iLAorICAgICJUb3AiOiAiR29pYW4iLAorICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIkJldGVnYXJyaSBiZXJ0aWthbGEiLAorICAgICJWZXJ0aWNhbDoiOiAiQmVydGlrYWxhOiIsCisgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiVVJMLWEgaWRhdHppIGJlaGFyIGR1enUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9mYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9mYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTUxN2UwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL2ZhLmpzCkBAIC0wLDAgKzEsNDMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJzYm90dG9tIjogItiv2YLbjNmC2Kcg2b7Yp9uM24zZhiIsCisgICAgIkFic21pZGRsZSI6ICLYr9mC24zZgtinINmI2LPYtyIsCisgICAgIkFsaWdubWVudDoiOiAi2KrYsdin2LIg2KjZhtiv24wiLAorICAgICJBbHRlcm5hdGUgdGV4dDoiOiAi2YXYqtmGINis2KfbjNqv2LLbjNmGIiwKKyAgICAiQmFzZWxpbmUiOiAi2KfYqNiq2K/Yp9uMINiu2LciLAorICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICLYttiu2KfZhdiqINmE2KjZhyIsCisgICAgIkJvdHRvbSI6ICLZvtin24zbjNmGIiwKKyAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIsCisgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICJVUkwg2KrYtdmI24zYsSDYsdinINin24zZhtis2Kcg2YjYp9ix2K8g2qnZhtuM2K8iLAorICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICLYqNix2KfbjCDZhdix2YjYsdqv2LHZh9in24zbjCDaqdmHINin2LIg2KrYtdin2YjbjNixINm+2LTYqtuM2KjYp9mG24wg2YbZhduMINqp2YbZhtivIiwKKyAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogItm+2LHaqdmG2YbYr9mHINin2YHZgtuMIiwKKyAgICAiSG9yaXpvbnRhbDoiOiAi2KfZgdmC24wiLAorICAgICJJbWFnZSBQcmV2aWV3OiI6ICLZvtuM2LQg2YbZhdin24zYtCDYqti12YjbjNixIiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJVUkwg2KrYtdmI24zYsSIsCisgICAgIkluc2VydCBJbWFnZSI6ICLYp9mB2LLZiNiv2YYg2KrYtdmI24zYsSIsCisgICAgIkxheW91dCI6ICLZhNin24zZhyIsCisgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAi2KjYsdin24wg2KjYr9mI2YYg2YTYqNmHINiu2KfZhNuMINix2YfYpyDaqdmGIiwKKyAgICAiTGVmdCI6ICLahtm+IiwKKyAgICAiTWlkZGxlIjogItmI2LPYtyIsCisgICAgIk5vdCBzZXQiOiAi2KrZhti424zZhSDZhti02K/ZhyIsCisgICAgIk9LIjogItio2YTZhyIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAi2YXZiNmC2LnbjNiqINuM2KfYqNuMINiq2LXZiNuM2LEiLAorICAgICJQcmV2aWV3IjogItm+24zYtCDZhtmF2KfbjNi0IiwKKyAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogItm+24zYtCDZhtmF2KfbjNi0INiq2LXZiNuM2LEg2K/YsSDZvtmG2KzYsdmHINin24wg2KzYr9uM2K8iLAorICAgICJSaWdodCI6ICLYsdin2LPYqiIsCisgICAgIlNwYWNpbmciOiAi2YHYp9i12YTZhyDar9iw2KfYsduMIiwKKyAgICAiVGV4dHRvcCI6ICLYqNin2YTYp9uMINmF2KrZhiIsCisgICAgIlRvcCI6ICLYqNin2YTYpyIsCisgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAi2b7Ysdqp2YbZhtiv2Ycg2LnZhdmI2K/bjCIsCisgICAgIlZlcnRpY2FsOiI6ICLYudmF2YjYr9uMIiwKKyAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICLYtNmF2Kcg2KjYp9uM2K8gVVJMINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9maS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9maS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGQzZDc5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL2ZpLmpzCkBAIC0wLDAgKzEsMjMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmkiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQmFzZWxpbmUiOiAiVGFrYXJhamEiLAorICAgICJCb3R0b20iOiAiQWxsZSIsCisgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJLdXZhbiBvc29pdGUiLAorICAgICJMYXlvdXQiOiAiU29tbWl0dGVsdSIsCisgICAgIkxlZnQiOiAiVmFzZW4iLAorICAgICJNaWRkbGUiOiAiS2Vza2VsbGUiLAorICAgICJPSyI6ICJIeXbDpGtzeSIsCisgICAgIlJpZ2h0IjogIk9pa2VhIiwKKyAgICAiU3BhY2luZyI6ICJQYWxzdGF0aWxhIiwKKyAgICAiVG9wIjogIllsw7ZzIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvZnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcxYjlhMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9mci5qcwpAQCAtMCwwICsxLDQzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICJBYnNib3R0b20iLAorICAgICJBYnNtaWRkbGUiOiAiQWJzbWlkZGxlIiwKKyAgICAiQWxpZ25tZW50OiI6ICJBbGlnbmVtZW50IiwKKyAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIlRleHRlIGFsdGVybmF0aWYiLAorICAgICJCYXNlbGluZSI6ICJCYXNlbGluZSIsCisgICAgIkJvcmRlciB0aGlja25lc3M6IjogIkVwYWlzc2V1ciBib3JkdXJlIiwKKyAgICAiQm90dG9tIjogIkJhcyIsCisgICAgIkNhbmNlbCI6ICJBbm51bGVyIiwKKyAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkVudHJlciBsJ1VSTCBkZSBsJ2ltYWdlIGljaSIsCisgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIlBvdXIgbGVzIG5hdmlnYXRldXJzIHF1aSBuZSBzdXBwb3J0ZW50IHBhcyBsZXMgaW1hZ2VzIiwKKyAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIk1hcmdlIGhvcml6b250YWxlIGludGVybmUiLAorICAgICJIb3Jpem9udGFsOiI6ICJIb3Jpem9udGFsIiwKKyAgICAiSW1hZ2UgUHJldmlldzoiOiAiUHLDqXZpc3VhbGlzYXRpb24iLAorICAgICJJbWFnZSBVUkw6IjogIlVSTCIsCisgICAgIkluc2VydCBJbWFnZSI6ICJJbnPDqXJlciB1bmUgaW1hZ2UiLAorICAgICJMYXlvdXQiOiAiTGF5b3V0IiwKKyAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJMYWlzc2VyIHZpZGUgcG91ciBwYXMgZGUgYm9yZHVyZSIsCisgICAgIkxlZnQiOiAiR2F1Y2hlIiwKKyAgICAiTWlkZGxlIjogIk1pbGlldSIsCisgICAgIk5vdCBzZXQiOiAiSW5kw6lmaW5pIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIlBvc2l0aW9uIGRlIGNldHRlIGltYWdlIiwKKyAgICAiUHJldmlldyI6ICJBcGVyw6d1ICIsCisgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJQcsOpdmlzdWFsaXNlciBsJ2ltYWdlIGRhbnMgdW5lIG5vdXZlbGxlIGZlbsOqdHJlIiwKKyAgICAiUmlnaHQiOiAiRHJvaXRlIiwKKyAgICAiU3BhY2luZyI6ICJFc3BhY2VtZW50IiwKKyAgICAiVGV4dHRvcCI6ICJUZXh0dG9wIiwKKyAgICAiVG9wIjogIkhhdXQiLAorICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIk1hcmdlIHZlcnRpY2FsZSBpbnRlcm5lIiwKKyAgICAiVmVydGljYWw6IjogIlZlcnRpY2FsIiwKKyAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICJWb3VzIGRldmV6IGVudHJlciBsJ1VSTCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL2hlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MjUzZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvaGUuanMKQEAgLTAsMCArMSwyMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJoZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYXNlbGluZSI6ICLXp9eVINeR16HXmdehIiwKKyAgICAiQm90dG9tIjogIteq15fXqteV158iLAorICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgIkltYWdlIFVSTDoiOiAiVVJMINeU16rXnteV16DXlCIsCisgICAgIkxheW91dCI6ICLXpNeo15nXodeUIiwKKyAgICAiTGVmdCI6ICLXqdee15DXnCIsCisgICAgIk1pZGRsZSI6ICLXkNee16bXoiIsCisgICAgIk9LIjogIteQ15nXqdeV16giLAorICAgICJSaWdodCI6ICLXmdee15nXnyIsCisgICAgIlNwYWNpbmciOiAi16jXmdeV15XXlyIsCisgICAgIlRvcCI6ICLXotec15nXldefIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvaHUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM4NTI4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9odS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImh1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJNw6lnc2VtIiwKKyAgICAiT0siOiAiUmVuZGJlbiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL2l0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMDQ4ODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvaXQuanMKQEAgLTAsMCArMSwyMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJpdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYXNlbGluZSI6ICJBbGxpbmVhbWVudG8iLAorICAgICJCb3R0b20iOiAiQmFzc28iLAorICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJVUkwgZGVsbCdJbW1hZ2luZSIsCisgICAgIkxheW91dCI6ICJMYXlvdXQiLAorICAgICJMZWZ0IjogIlNpbmlzdHJhIiwKKyAgICAiTWlkZGxlIjogIkNlbnRyYWxlIiwKKyAgICAiT0siOiAiT0siLAorICAgICJSaWdodCI6ICJEZXN0cmEiLAorICAgICJTcGFjaW5nIjogIlNwYXppYXR1cmEiLAorICAgICJUb3AiOiAiQWx0byIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNGM4MmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvamEuanMKQEAgLTAsMCArMSw0MyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAi5LiLKOe1tuWvvueahCkiLAorICAgICJBYnNtaWRkbGUiOiAi5Lit5aSuKOe1tuWvvueahCkiLAorICAgICJBbGlnbm1lbnQ6IjogIuihjOaPg+OBiDoiLAorICAgICJBbHRlcm5hdGUgdGV4dDoiOiAi5Luj5pu/44OG44Kt44K544OIOiIsCisgICAgIkJhc2VsaW5lIjogIuODmeODvOOCueODqeOCpOODsyIsCisgICAgIkJvcmRlciB0aGlja25lc3M6IjogIuWig+eVjOe3muOBruW5hToiLAorICAgICJCb3R0b20iOiAi5LiLIiwKKyAgICAiQ2FuY2VsIjogIuS4reatoiIsCisgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICLnlLvlg4/jga5VUkzjgpLjgZPjgZPjgavlhaXlipvjgZfjgb7jgZkiLAorICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICLnlLvlg4/ooajnpLrjgpLjgrXjg53jg7zjg4jjgZfjgarjgYTjg5bjg6njgqbjgrbjgavlv4XopoHjgafjgZkiLAorICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAi5rC05bmz5L2Z55m9IiwKKyAgICAiSG9yaXpvbnRhbDoiOiAi5rC05bmzOiIsCisgICAgIkltYWdlIFByZXZpZXc6IjogIueUu+WDj+ODl+ODrOODk+ODpeODvDoiLAorICAgICJJbWFnZSBVUkw6IjogIueUu+WDj1VSTDoiLAorICAgICJJbnNlcnQgSW1hZ2UiOiAi55S75YOP44Gu5oy/5YWlIiwKKyAgICAiTGF5b3V0IjogIuODrOOCpOOCouOCpuODiCIsCisgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAi5aKD55WM57ea44GM44Gq44GE5aC05ZCI44Gv56m644Gu44G+44G+44Gr44GZ44KLIiwKKyAgICAiTGVmdCI6ICLlt6YiLAorICAgICJNaWRkbGUiOiAi5Lit5aSuIiwKKyAgICAiTm90IHNldCI6ICLjgarjgZciLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAi44GT44Gu55S75YOP44Gu6YWN572uIiwKKyAgICAiUHJldmlldyI6ICLooajnpLoiLAorICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAi44Km44Kj44Oz44OJ44Km44Gn55S75YOP44KS6KGo56S6IiwKKyAgICAiUmlnaHQiOiAi5Y+zIiwKKyAgICAiU3BhY2luZyI6ICLplpPpmpQiLAorICAgICJUZXh0dG9wIjogIuODhuOCreOCueODiOS4iumDqCIsCisgICAgIlRvcCI6ICLkuIoiLAorICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIuWeguebtOS9meeZvSIsCisgICAgIlZlcnRpY2FsOiI6ICLlnoLnm7Q6IiwKKyAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICJVUkzjgpLlhaXlipvjgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZkMDNjMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9sY19iYXNlLmpzCkBAIC0wLDAgKzEsNTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLworLy8gTEFORzogImVuIiwgRU5DT0RJTkc6IFVURi04CisvLyBBdXRob3I6IFRyYW5zbGF0b3ItTmFtZSwgPGVtYWlsQGV4YW1wbGUuY29tPgorLy8KKy8vIExhc3QgcmV2aXNpb246IDIwMTgtMDQtMTIKKy8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KKy8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyAoUGxlYXNlLCByZW1vdmUgaW5mb3JtYXRpb24gYmVsb3cpCisvLyBGT1IgVFJBTlNMQVRPUlM6CisvLworLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCisvLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCisvLworLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7CisvLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50CisvLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCisKK3sKKyAgICAiQWJzYm90dG9tIjogIiIsCisgICAgIkFic21pZGRsZSI6ICIiLAorICAgICJBbGlnbm1lbnQ6IjogIiIsCisgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICIiLAorICAgICJCYXNlbGluZSI6ICIiLAorICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICIiLAorICAgICJCb3R0b20iOiAiIiwKKyAgICAiQ2FuY2VsIjogIiIsCisgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICIiLAorICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICIiLAorICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiIiwKKyAgICAiSG9yaXpvbnRhbDoiOiAiIiwKKyAgICAiSW1hZ2UgUHJldmlldzoiOiAiIiwKKyAgICAiSW1hZ2UgVVJMOiI6ICIiLAorICAgICJJbnNlcnQgSW1hZ2UiOiAiIiwKKyAgICAiTGF5b3V0IjogIiIsCisgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiIiwKKyAgICAiTGVmdCI6ICIiLAorICAgICJNaWRkbGUiOiAiIiwKKyAgICAiTm90IHNldCI6ICIiLAorICAgICJPSyI6ICIiLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIiIsCisgICAgIlByZXZpZXciOiAiIiwKKyAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIiIsCisgICAgIlJpZ2h0IjogIiIsCisgICAgIlNwYWNpbmciOiAiIiwKKyAgICAiVGV4dHRvcCI6ICIiLAorICAgICJUb3AiOiAiIiwKKyAgICAiVmVydGljYWwgcGFkZGluZyI6ICIiLAorICAgICJWZXJ0aWNhbDoiOiAiIiwKKyAgICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICIiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL2x0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMTg5MDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvbHQuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9sdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9sdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODNkNWQzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL2x2LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHYiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0Y2VsdCIsCisgICAgIk9LIjogIkxhYmkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9uYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9uYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzMwYjNmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL25iLmpzCkBAIC0wLDAgKzEsMzIgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxpZ25tZW50OiI6ICJKdXN0ZXJpbmc6IiwKKyAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIkFsdGVybmF0aXYgdGVrc3QiLAorICAgICJCYXNlbGluZSI6ICJHcnVubmxpbmplIiwKKyAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiUmFtbWV0eWtrZWxzZToiLAorICAgICJCb3R0b20iOiAiQnVubiIsCisgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICJIb3Jpem9udGFsOiI6ICJIb3Jpc29udGFsOiIsCisgICAgIkltYWdlIFByZXZpZXc6IjogIkZvcmjDpW5kc3Zpc25pbmc6IiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJCaWxkZXRzIFVSTDoiLAorICAgICJJbnNlcnQgSW1hZ2UiOiAiU2V0dCBpbm4gYmlsZGUiLAorICAgICJMYXlvdXQiOiAiT3Bwc2V0dCIsCisgICAgIkxlZnQiOiAiVmVuc3RyZSIsCisgICAgIk1pZGRsZSI6ICJNaWR0ZW4iLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiQmlsZGVwb3NzaXNqb24iLAorICAgICJQcmV2aWV3IjogIkZvcmjDpW5kc3Zpc25pbmciLAorICAgICJSaWdodCI6ICJIw7h5cmUiLAorICAgICJTcGFjaW5nIjogIkx1ZnQiLAorICAgICJUb3AiOiAiT3ZlcmthbnQiLAorICAgICJWZXJ0aWNhbDoiOiAiVmVydGlrYWw6IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvbmwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JlNDRlZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9ubC5qcwpAQCAtMCwwICsxLDM4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsaWdubWVudDoiOiAiVWl0dnVsbGluZzoiLAorICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiQWx0ZXJuYXRpZXZlIHRla3N0OiIsCisgICAgIkJhc2VsaW5lIjogIkJhc2lzIiwKKyAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiUmFuZCBkaWt0ZToiLAorICAgICJCb3R0b20iOiAiT25kZXIiLAorICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkFmYmVlbGRpbmdzbG9jYXRpZSAoVVJMKSIsCisgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIlZvb3IgYnJvd3NlcnMgd2Vsa2UgZ2VlbiBhZmJlZWxkaW5nZW4gb25kZXJzdGV1bmVuIiwKKyAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIkhvcml6b250YWxlIHJ1aW10ZSIsCisgICAgIkhvcml6b250YWw6IjogIkhvcml6b250YWFsOiIsCisgICAgIkltYWdlIFByZXZpZXc6IjogIkFmYmVlbGRpbmdzdm9vcmJlZWxkOiIsCisgICAgIkltYWdlIFVSTDoiOiAiQWZiZWVsZGluZyBVUkw6IiwKKyAgICAiSW5zZXJ0IEltYWdlIjogIkFmYmVlbGRpbmcgaW52b2VnZW4iLAorICAgICJMYXlvdXQiOiAiV2VlcmdhdmUiLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIkxlZWcgdm9vciBnZWVuIHJhbmQiLAorICAgICJMZWZ0IjogIkxpbmtzIiwKKyAgICAiTWlkZGxlIjogIk1pZGRlbiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJVaXRsaWpuZW4gdmFuIGRpdCBiZWVsZCIsCisgICAgIlByZXZpZXciOiAiVm9vcmJlZWxkIiwKKyAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIkFmYmVlbGRpbmcgYmVraWprZW4gaW4gbmlldXcgdmVuc3RlciIsCisgICAgIlJpZ2h0IjogIlJlY2h0cyIsCisgICAgIlNwYWNpbmciOiAibWFyZ2UiLAorICAgICJUb3AiOiAiQm92ZW4iLAorICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIlZlcnRpY2FsZSBydWltdGUiLAorICAgICJWZXJ0aWNhbDoiOiAiVmVydGljYWFsOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL3BsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL3BsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMzI4OWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvcGwuanMKQEAgLTAsMCArMSw0MiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAiQWJzLiBkw7PFgiIsCisgICAgIkFic21pZGRsZSI6ICJBYnMuIMWbcm9kZWsiLAorICAgICJBbGlnbm1lbnQ6IjogIld5csOzd25hbmllOiIsCisgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJUZWtzdCBhbHRlcm5hdHl3bnk6IiwKKyAgICAiQmFzZWxpbmUiOiAiTGluaWEgYmF6b3dhIiwKKyAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiR3J1Ym/Fm8SHIG9icmFtb3dhbmlhOiIsCisgICAgIkJvdHRvbSI6ICJEw7PFgiIsCisgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiUG9kYWogVVJMIG9icmF6a2EiLAorICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJEbGEgcHJ6ZWdsxIVkYXJlaywga3TDs3JlIG5pZSBvYnPFgnVndWrEhSBvYnJhemvDs3ciLAorICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiV2NpxJljaWUgcG96aW9tZSIsCisgICAgIkhvcml6b250YWw6IjogIlBvemlvbWU6IiwKKyAgICAiSW1hZ2UgUHJldmlldzoiOiAiUG9kZ2zEhWQgb2JyYXprYToiLAorICAgICJJbWFnZSBVUkw6IjogIlVSTCBvYnJhemthOiIsCisgICAgIkluc2VydCBJbWFnZSI6ICJXc3RhdyBvYnJhemVrIiwKKyAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiQmV6IHJhbWVrIC0gem9zdGF3IHB1c3RlIiwKKyAgICAiTGVmdCI6ICJEbyBsZXdlaiIsCisgICAgIk1pZGRsZSI6ICLFmnJvZGVrIiwKKyAgICAiTm90IHNldCI6ICJOaWUgdXN0YXdpb25lIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIld5csOzd25hbmllIHRlZ28gb2JyYXprYSBuYSBzdHJvbmllIiwKKyAgICAiUHJldmlldyI6ICJQb2RnbMSFZCIsCisgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJQb2RnbMSFZCBvYnJhemthIHcgbm93eW0gb2tuaWUiLAorICAgICJSaWdodCI6ICJEbyBwcmF3ZWoiLAorICAgICJTcGFjaW5nIjogIk9kc3TEmXAiLAorICAgICJUZXh0dG9wIjogIkfDs3JhIHRla3N0dSIsCisgICAgIlRvcCI6ICJHw7NyYSIsCisgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiV2NpxJljaWUgcGlvbm93ZSIsCisgICAgIlZlcnRpY2FsOiI6ICJQaW9ub3dlOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMjc5YTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvcHRfYnIuanMKQEAgLTAsMCArMSw0MiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwdF9iciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAiSW5mZXJpb3IgYWJzb2x1dG8iLAorICAgICJBYnNtaWRkbGUiOiAiTWVpbyBhYnNvbHV0byIsCisgICAgIkFsaWdubWVudDoiOiAiQWxpbmhhbWVudG86IiwKKyAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIlRleHRvIEFsdGVybmF0aXZvOiIsCisgICAgIkJhc2VsaW5lIjogIkxpbmhhIGRlIGJhc2UiLAorICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJFc3Blc3N1cmEgZGEgQm9yZGEiLAorICAgICJCb3R0b20iOiAiQmFzZSIsCisgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCisgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICJFbnRyZSBhcXVpIGNvbSBhIFVSTCBkYSBpbWFnZW0iLAorICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJQYXJhIG5hdmVnYWRvcmVzIHF1ZSBuw6NvIHN1cG9ydGFtIGltYWdlbnMiLAorICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiRXNwYcOnbyBob3Jpem9udGFsIiwKKyAgICAiSG9yaXpvbnRhbDoiOiAiSG9yaXpvbnRhbDoiLAorICAgICJJbWFnZSBQcmV2aWV3OiI6ICJWaXN1YWxpemHDp8OjbyBkYSBJbWFnZW06IiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJVUkwgZGEgaW1hZ2VtOiIsCisgICAgIkluc2VydCBJbWFnZSI6ICJJbnNlcmlyIEltYWdlbSIsCisgICAgIkxheW91dCI6ICJFc3F1ZW1hIiwKKyAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJEZWl4ZSBlbSBicmFuY28gcGFyYSBzZW0gYm9yZGFzIiwKKyAgICAiTGVmdCI6ICJFc3F1ZXJkYSIsCisgICAgIk1pZGRsZSI6ICJNZWlvIiwKKyAgICAiTm90IHNldCI6ICJOw6NvIGRlZmluaWRvIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIlBvc2ljaW9uYW1lbnRvIGRlc3RhIGltYWdlbSIsCisgICAgIlByZXZpZXciOiAiVmlzdWFsaXphciIsCisgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJWaXN1YWxpemFyIGltYWdlbSBlbSB1bWEgbm92YSBqYW5lbGEiLAorICAgICJSaWdodCI6ICJEaXJlaXRhIiwKKyAgICAiU3BhY2luZyI6ICJFc3Bhw6dhbWVudG8iLAorICAgICJUZXh0dG9wIjogIlRleHRvIG5vIHRvcG8iLAorICAgICJUb3AiOiAiVG9wbyIsCisgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiRXNwYcOnbyB2ZXJ0aWNhbCIsCisgICAgIlZlcnRpY2FsOiI6ICJWZXJ0aWNhbDoiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9yby5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9yby5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmNjYWIxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL3JvLmpzCkBAIC0wLDAgKzEsMjMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicm8iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQmFzZWxpbmUiOiAiQmFzZWxpbmUiLAorICAgICJCb3R0b20iOiAiSm9zIiwKKyAgICAiQ2FuY2VsIjogIlJlbnVuxaPEgyIsCisgICAgIkltYWdlIFVSTDoiOiAiVVJMLXVsIGltYWdpbmlpIiwKKyAgICAiTGF5b3V0IjogIkFyYW5qYW1lbnQiLAorICAgICJMZWZ0IjogIlN0w6JuZ2EiLAorICAgICJNaWRkbGUiOiAiTWlqbG9jIiwKKyAgICAiT0siOiAiQWNjZXB0xIMiLAorICAgICJSaWdodCI6ICJEcmVhcHRhIiwKKyAgICAiU3BhY2luZyI6ICLDjm50cmUgY2VsdWxlIiwKKyAgICAiVG9wIjogIlN1cyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL3J1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZmFkODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvcnUuanMKQEAgLTAsMCArMSw0MyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAi0J/QviDQvdC40LbQvdC10Lkg0LPRgNCw0L3QuNGG0LUiLAorICAgICJBYnNtaWRkbGUiOiAi0J/QviDRgdC10YDQtdC00LjQvdC1INGC0LXQutGB0YLQsCIsCisgICAgIkFsaWdubWVudDoiOiAi0JLRi9GA0LDQstC90LjQstCw0L3QuNC1IiwKKyAgICAiQWx0ZXJuYXRlIHRleHQ6IjogItCQ0LvRjNGC0LXRgNC90LDRgtC40LLQvdGL0Lkg0YLQtdC60YHRgiIsCisgICAgIkJhc2VsaW5lIjogItCf0L4g0L3QuNC20L3QtdC5INCz0YDQsNC90LjRhtC1INGC0LXQutGB0YLQsCIsCisgICAgIkJvcmRlciB0aGlja25lc3M6IjogItCi0L7Qu9GJ0LjQvdCwINGA0LDQvNC60LgiLAorICAgICJCb3R0b20iOiAi0J/QviDQvdC40LbQvdC10LzRgyDQutGA0LDRjiIsCisgICAgIkNhbmNlbCI6ICLQntGC0LzQtdC90LAiLAorICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAi0JLRgdGC0LDQstGM0YLQtSDQsNC00YDQtdGBINC40LfQvtCx0YDQsNC20LXQvdC40Y8iLAorICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICLQlNC70Y8g0LHRgNCw0YPQt9C10YDQvtCyLCDQutC+0YLQvtGA0YvQtSDQvdC1INC+0YLQvtCx0YDQsNC20LDRjtGCINC60LDRgNGC0LjQvdC60LgiLAorICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAi0JPQvtGA0LjQt9C+0L3RgtCw0LvRjNC90YvQtSDQv9C+0LvRjyIsCisgICAgIkhvcml6b250YWw6IjogItCf0L4g0LPQvtGA0LjQt9C+0L3RgtCw0LvQuCIsCisgICAgIkltYWdlIFByZXZpZXc6IjogItCf0YDQtdC00LLQsNGA0LjRgtC10LvRjNC90YvQuSDQv9GA0L7RgdC80L7RgtGAIiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJVUkwg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyIsCisgICAgIkluc2VydCBJbWFnZSI6ICLQktGB0YLQsNCy0LrQsCDQutCw0YDRgtC40L3QutC4IiwKKyAgICAiTGF5b3V0IjogItCg0LDRgdC/0L7Qu9C+0LbQtdC90LjQtSIsCisgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAi0J7RgdGC0LDQstGM0YLQtSDQv9GD0YHRgtGL0LwsINGH0YLQvtCx0Ysg0YPQsdGA0LDRgtGMINGA0LDQvNC60YMiLAorICAgICJMZWZ0IjogItCf0L4g0LvQtdCy0L7QvNGDINC60YDQsNGOIiwKKyAgICAiTWlkZGxlIjogItCf0L7RgdGA0LXQtNC40L3QtSIsCisgICAgIk5vdCBzZXQiOiAi0J3QtSDRg9GB0YLQsNC90L7QstC70LXQvdC+IiwKKyAgICAiT0siOiAiT0siLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogItCg0LDRgdC/0L7Qu9C+0LbQtdC90LjQtSDQuNC30L7QsdGA0LDQttC10L3QuNGPIiwKKyAgICAiUHJldmlldyI6ICLQn9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdGL0Lkg0L/RgNC+0YHQvNC+0YLRgCIsCisgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICLQn9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdGL0Lkg0L/RgNC+0YHQvNC+0YLRgCDQsiDQvtGC0LTQtdC70YzQvdC+0Lwg0L7QutC90LUiLAorICAgICJSaWdodCI6ICLQn9C+INC/0YDQsNCy0L7QvNGDINC60YDQsNGOIiwKKyAgICAiU3BhY2luZyI6ICLQntGC0YHRgtGD0L/RiyIsCisgICAgIlRleHR0b3AiOiAi0J/QviDQstC10YDRhdC90LXQuSDQs9GA0LDQvdC40YbQtSDRgtC10LrRgdGC0LAiLAorICAgICJUb3AiOiAi0J/QviDQstC10YDRhdC90LXQvNGDINC60YDQsNGOIiwKKyAgICAiVmVydGljYWwgcGFkZGluZyI6ICLQktC10YDRgtC40LrQsNC70YzQvdGL0LUg0L/QvtC70Y8iLAorICAgICJWZXJ0aWNhbDoiOiAi0J/QviDQstC10YDRgtC40LrQsNC70LgiLAorICAgICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogItCS0Ysg0LTQvtC70LbQvdGLINCy0LLQtdGB0YLQuCBVUkwiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9zaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9zaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjJjY2EyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL3NoLmpzCkBAIC0wLDAgKzEsNDIgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJzYm90dG9tIjogIkFwc29sdXRubyBkbm8iLAorICAgICJBYnNtaWRkbGUiOiAiQXBzb2x1dG5hIHNyZWRpbmEiLAorICAgICJBbGlnbm1lbnQ6IjogIlJhdm5hbmplIiwKKyAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIkFsdGVybmF0aXZuaSB0ZWtzdCIsCisgICAgIkJhc2VsaW5lIjogIkRvbmphIGxpbmlqYSIsCisgICAgIkJvcmRlciB0aGlja25lc3M6IjogIkRlYmxqaW5hIG9rdmlyYSIsCisgICAgIkJvdHRvbSI6ICJEbm8iLAorICAgICJDYW5jZWwiOiAiUG9uacWhdGkiLAorICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiVW5lc2l0ZSBVUkwgc2xpa2Ugb3ZkZSIsCisgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIlphIHByZXRyYcW+aXZhxI1lIGtvamkgbmUgcG9kcsW+YXZhanUgc2xpa2UiLAorICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiSG9yaXpvbnRhbG5vIG9kc3RvamFuamUiLAorICAgICJIb3Jpem9udGFsOiI6ICJQbyBob3Jpem9udGFsaSIsCisgICAgIkltYWdlIFByZXZpZXc6IjogIlByZWdsZWQgc2xpa2UiLAorICAgICJJbWFnZSBVUkw6IjogIlVSTCBzbGlrZSIsCisgICAgIkluc2VydCBJbWFnZSI6ICJVYmFjaSBzbGlrdSIsCisgICAgIkxheW91dCI6ICJQcmVsb20iLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIk9zdGF2aSBwcmF6bm8ga2FkIG5lbWEgb2t2aXJhIiwKKyAgICAiTGVmdCI6ICJMZXZvIiwKKyAgICAiTWlkZGxlIjogIlNyZWRpbmEiLAorICAgICJOb3Qgc2V0IjogIk5pamUgcG9zdGF2bGplbm8iLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zdGF2bGphbmplIG92ZSBzbGlrZSIsCisgICAgIlByZXZpZXciOiAiUHJlZ2xlZCIsCisgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJQcmVnbGVkYWogc2xpa3UgdSBub3ZvbSBwcm96b3J1IiwKKyAgICAiUmlnaHQiOiAiRGVzbm8iLAorICAgICJTcGFjaW5nIjogIlJhem1hayIsCisgICAgIlRleHR0b3AiOiAiVnJoIHRla3N0YSIsCisgICAgIlRvcCI6ICJWcmgiLAorICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIlZlcnRpa2Fsbm8gb2RzdG9qYW5qZSIsCisgICAgIlZlcnRpY2FsOiI6ICJQbyB2ZXJ0aWthbGkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9zaS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy9zaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njc0ODkyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL3NpLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2kiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIsCisgICAgIk9LIjogIlYgcmVkdSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL3NyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL3NyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMmYzNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvc3IuanMKQEAgLTAsMCArMSw0MiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAi0JDQv9GB0L7Qu9GD0YLQvdC+INC00L3QviIsCisgICAgIkFic21pZGRsZSI6ICLQkNC/0YHQvtC70YPRgtC90LAg0YHRgNC10LTQuNC90LAiLAorICAgICJBbGlnbm1lbnQ6IjogItCg0LDQstC90LDRmtC1IiwKKyAgICAiQWx0ZXJuYXRlIHRleHQ6IjogItCw0LvRgtC10YDQvdCw0YLQuNCy0L3QuCDRgtC10LrRgdGCIiwKKyAgICAiQmFzZWxpbmUiOiAi0JTQvtGa0LAg0LvQuNC90LjRmNCwIiwKKyAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAi0JTQtdCx0ZnQuNC90LAg0L7QutCy0LjRgNCwIiwKKyAgICAiQm90dG9tIjogItCU0L3QviIsCisgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIsCisgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICLQo9C90LXRgdC40YLQtSDQo9Cg0Jsg0YHQu9C40LrQtSDQvtCy0LTQtSIsCisgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogItCX0LAg0L/RgNC10YLRgNCw0LbQuNCy0LDRh9C1INC60L7RmNC4INC90LUg0L/QvtC00YDQttCw0LLQsNGY0YMg0YHQu9C40LrQtSIsCisgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICLQpdC+0YDRgtC40LfQvtC90YLQsNC70L3QviDQvtC00YHRgtC+0ZjQsNGa0LUiLAorICAgICJIb3Jpem9udGFsOiI6ICLQn9C+INGF0L7RgNC40LfQvtC90YLQsNC70LgiLAorICAgICJJbWFnZSBQcmV2aWV3OiI6ICLQn9GA0LXQs9C70LXQtCDRgdC70LjQutC1IiwKKyAgICAiSW1hZ2UgVVJMOiI6ICLQo9Cg0Jsg0YHQu9C40LrQtSIsCisgICAgIkluc2VydCBJbWFnZSI6ICLQo9Cx0LDRhtC4INGB0LvQuNC60YMiLAorICAgICJMYXlvdXQiOiAi0J/RgNC10LvQvtC8IiwKKyAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICLQntGB0YLQsNCy0Lgg0L/RgNCw0LfQvdC+INC60LDQtCDQvdC10LzQsCDQvtC60LLQuNGA0LAiLAorICAgICJMZWZ0IjogItCb0LXQstC+IiwKKyAgICAiTWlkZGxlIjogItCh0YDQtdC00LjQvdCwIiwKKyAgICAiTm90IHNldCI6ICLQndC40ZjQtSDQv9C+0YHRgtCw0LLRmdC10L3QviIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICLQn9C+0YHRgtCw0LLRmdCw0ZrQtSDQvtCy0LUg0YHQu9C40LrQtSIsCisgICAgIlByZXZpZXciOiAi0J/RgNC10LPQu9C10LQiLAorICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAi0J/RgNC10LPQu9C10LTQsNGYINGB0LvQuNC60YMg0YMg0L3QvtCy0L7QvCDQv9GA0L7Qt9C+0YDRgyIsCisgICAgIlJpZ2h0IjogItCU0LXRgdC90L4iLAorICAgICJTcGFjaW5nIjogItCg0LDQt9C80LDQuiIsCisgICAgIlRleHR0b3AiOiAi0JLRgNGFINGC0LXQutGB0YLQsCIsCisgICAgIlRvcCI6ICLQktGA0YUiLAorICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogItCS0LXRgNGC0LjQutCw0LvQvdC+INC+0LTRgdGC0L7RmNCw0ZrQtSIsCisgICAgIlZlcnRpY2FsOiI6ICLQn9C+INCy0LXRgNGC0LjQutCw0LvQuCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL3N2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL3N2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMDllYmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvc3YuanMKQEAgLTAsMCArMSwzOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGlnbm1lbnQ6IjogIlBsYWNlcmluZzoiLAorICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiQWx0ZXJuYXRpdiB0ZXh0OiIsCisgICAgIkJhc2VsaW5lIjogIkJhc2xpbmplIiwKKyAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiUmFtdGpvY2tsZWs6IiwKKyAgICAiQm90dG9tIjogIkJvdHRlbiIsCisgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiQmlsZGVucyBzw7ZrdsOkZyAoVVJMKSIsCisgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIkJlc2tyaXZhbmRlIHRleHQgZsO2ciB3ZWJsw6RzYXJlIHNvbSBpbnRlIHN0w7ZkamVyIGluYsOkZGRhZGUgYmlsZGVyIiwKKyAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIkhvcml6b250ZWxsdCBpbmRyYWcgcMOlIGJpbGQiLAorICAgICJIb3Jpem9udGFsOiI6ICJIb3Jpc29udGVsbDoiLAorICAgICJJbWFnZSBQcmV2aWV3OiI6ICJGw7ZyaGFuZHNncmFuc2tuaW5nOiIsCisgICAgIkltYWdlIFVSTDoiOiAiQmlsZGVucyBVUkw6IiwKKyAgICAiSW5zZXJ0IEltYWdlIjogIkluZm9nYSBiaWxkIiwKKyAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiTMOkbW5hIHRvbXQgZsO2ciBhdHQgdW5kdmlrYSByYW0iLAorICAgICJMZWZ0IjogIlZlbnN0ZXIiLAorICAgICJNaWRkbGUiOiAiTWl0dGVuIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIkJpbGRlbnMgcG9zaXRpb25lcmluZyIsCisgICAgIlByZXZpZXciOiAiRsO2cmhhbmRzZ3JhbnNrYSIsCisgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICLDlnBwbmEgYmlsZCBpIG55dHQgZsO2bnN0ZXIiLAorICAgICJSaWdodCI6ICJIw7ZnZXIiLAorICAgICJTcGFjaW5nIjogIk1lbGxhbnJ1bSIsCisgICAgIlRvcCI6ICLDlnZlcmthbnQiLAorICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIlZlcnRpa2FsdCBpbmRyYWcgcMOlIGJpbGQiLAorICAgICJWZXJ0aWNhbDoiOiAiVmVydGlrYWw6IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvdGguanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL2xhbmcvdGguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRhOWM4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy90aC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLguKLguIHguYDguKXguLTguIEiLAorICAgICJPSyI6ICLguJXguIHguKXguIciCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy90ci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy90ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzE2M2ViCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsNDMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJzYm90dG9tIjogIlNhbHQgYWx0YSIsCisgICAgIkFic21pZGRsZSI6ICJTYWx0IG9ydGEiLAorICAgICJBbGlnbm1lbnQ6IjogIkhpemFsYW1hOiIsCisgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJBbHRlcm5hdGlmIG1ldGluOiIsCisgICAgIkJhc2VsaW5lIjogIlRhYmFuIGhpemFzxLEiLAorICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJLZW5hcmzEsWsga2FsxLFubMSxxJ/EsToiLAorICAgICJCb3R0b20iOiAiQWx0YSIsCisgICAgIkNhbmNlbCI6ICLEsHB0YWwiLAorICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiTMO8dGZlbiBidXJheWEgcmVzaW0gVVJMJ3NpbmkgZ2lyaW4iLAorICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJSZXNpbSBkZXN0ZWtsZW1leWVuIHRhcmF5xLFjxLFsYXIgacOnaW4iLAorICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiWWF0YXkgZG9sZHVybWEgbWlrdGFyxLEiLAorICAgICJIb3Jpem9udGFsOiI6ICJZYXRheToiLAorICAgICJJbWFnZSBQcmV2aWV3OiI6ICJSZXNpbSDDtm5pemxlbWU6IiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJSZXNpbSBVUkwnc2k6IiwKKyAgICAiSW5zZXJ0IEltYWdlIjogIlJlc2ltIGVrbGUiLAorICAgICJMYXlvdXQiOiAiRMO8emVuIiwKKyAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJLZW5hcmzEsWsgaXN0ZW1peW9yc2FuxLF6IGJvxZ8gYsSxcmFrxLFuIiwKKyAgICAiTGVmdCI6ICJTb2xhIiwKKyAgICAiTWlkZGxlIjogIk9ydGFsYSIsCisgICAgIk5vdCBzZXQiOiAiQXlhcmxhbm1hbcSxxZ8iLAorICAgICJPSyI6ICJUYW1hbSIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUmVzbWkga29udW1sYW5kxLFybWEiLAorICAgICJQcmV2aWV3IjogIsOWbml6bGVtZSIsCisgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJSZXNtaSB5ZW5pIHBlbmNlcmVkZSDDtm5pemxlbWUiLAorICAgICJSaWdodCI6ICJTYcSfYSIsCisgICAgIlNwYWNpbmciOiAiQXJhbMSxayIsCisgICAgIlRleHR0b3AiOiAiTWV0aW4tw7xzdHRlIiwKKyAgICAiVG9wIjogIll1a2FyxLEiLAorICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIkRpa2V5IGRvbGR1cm1hIG1pa3RhcsSxIiwKKyAgICAiVmVydGljYWw6IjogIkRpa2V5OiIsCisgICAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiTMO8dGZlbiBVUkwgZ2lyaW4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy92bi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvbGFuZy92bi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDgyZTAyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9sYW5nL3ZuLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidm4iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkjhu6d5IiwKKyAgICAiT0siOiAixJDhu5NuZyDDvSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9wbHVnaW5NZXRob2RzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9wbHVnaW5NZXRob2RzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYTA4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydEltYWdlL3BsdWdpbk1ldGhvZHMuanMKQEAgLTAsMCArMSwxNTIgQEAKK0luc2VydEltYWdlLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24oaW1hZ2UpCit7CisJaWYgKCF0aGlzLmRpYWxvZykgdGhpcy5wcmVwYXJlRGlhbG9nKCk7CisgIAorICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisJaWYgKCB0eXBlb2YgaW1hZ2UgPT0gInVuZGVmaW5lZCIgKQorICB7CisgICAgaW1hZ2UgPSBlZGl0b3IuZ2V0UGFyZW50RWxlbWVudCgpOworICAgIGlmICggaW1hZ2UgJiYgaW1hZ2UudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9ICdpbWcnICkKKyAgICB7CisgICAgICBpbWFnZSA9IG51bGw7CisgICAgfQorICB9CisKKyAgaWYgKCBpbWFnZSApCisgIHsKKyAgICBmdW5jdGlvbiBnZXRTcGVjaWZpZWRBdHRyaWJ1dGUoZWxlbWVudCxhdHRyaWJ1dGUpCisgICAgeworICAgICAgdmFyIGEgPSBlbGVtZW50LmF0dHJpYnV0ZXM7CisgICAgICBmb3IgKHZhciBpPTA7aTxhLmxlbmd0aDtpKyspCisgICAgICB7CisgICAgICAgIGlmIChhW2ldLm5vZGVOYW1lID09IGF0dHJpYnV0ZSAmJiBhW2ldLnNwZWNpZmllZCkKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBhW2ldLnZhbHVlOworICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gJyc7CisgICAgfQorICAgIG91dHBhcmFtID0KKyAgICB7CisgICAgICBmX3VybCAgICA6IGVkaXRvci5zdHJpcEJhc2VVUkwoaW1hZ2UuZ2V0QXR0cmlidXRlKCdzcmMnLDIpKSwgLy8gdGhlIHNlY29uZCBwYXJhbWV0ZXIgbWFrZXMgSUUgcmV0dXJuIHRoZSB2YWx1ZSBhcyBpdCBpcyBzZXQsIGFzIG9wcG9zZWQgdG8gYW4gImludGVycG9sYXRlZCIgKGFzIE1TRE4gY2FsbHMgaXQpIHZhbHVlCisgICAgICBmX2FsdCAgICA6IGltYWdlLmFsdCwKKyAgICAgIGZfYm9yZGVyIDogaW1hZ2UuYm9yZGVyLAorICAgICAgZl9hbGlnbiAgOiBpbWFnZS5hbGlnbiwKKyAgICAgIGZfdmVydCAgIDogZ2V0U3BlY2lmaWVkQXR0cmlidXRlKGltYWdlLCd2c3BhY2UnKSwKKyAgICAgIGZfaG9yaXogIDogZ2V0U3BlY2lmaWVkQXR0cmlidXRlKGltYWdlLCdoc3BhY2UnKSwKKyAgICAgIGZfd2lkdGggIDogaW1hZ2Uud2lkdGgsCisgICAgICBmX2hlaWdodCA6IGltYWdlLmhlaWdodAorICAgIH07CisgIH0KKyAgZWxzZXsKKyAgeworICAgIG91dHBhcmFtID0KKyAgICB7CisgICAgICBmX3VybCAgICA6ICcnLAorICAgICAgZl9hbHQgICAgOiAnJywKKyAgICAgIGZfYm9yZGVyIDogJycsCisgICAgICBmX2FsaWduICA6ICcnLAorICAgICAgZl92ZXJ0ICAgOiAnJywKKyAgICAgIGZfaG9yaXogIDogJycsCisgICAgICBmX3dpZHRoICA6ICcnLAorICAgICAgZl9oZWlnaHQgOiAnJworICAgIH07CisgIH0KKyAgfQorICB0aGlzLmltYWdlID0gaW1hZ2U7CisgIC8vIG5vdyBjYWxsaW5nIHRoZSBzaG93IG1ldGhvZCBvZiB0aGUgWGluaGEuRGlhbG9nIG9iamVjdCB0byBzZXQgdGhlIHZhbHVlcyBhbmQgc2hvdyB0aGUgYWN0dWFsIGRpYWxvZworICB0aGlzLmRpYWxvZy5zaG93KG91dHBhcmFtKTsKK307CisKKy8vIGFuZCBmaW5hbGx5IC4uLiB0YWtlIHNvbWUgYWN0aW9uCitJbnNlcnRJbWFnZS5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbigpCit7CisgIHZhciBwYXJhbSA9IHRoaXMuZGlhbG9nLmhpZGUoKTsKKyAgaWYgKCFwYXJhbS5mX3VybCkKKyAgeworICAgIHJldHVybjsKKyAgfQorICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisgIHZhciBpbWcgPSB0aGlzLmltYWdlOworICBpZiAoICFpbWcgKQorICB7CisgICAgaWYgKCBYaW5oYS5pc19pZSApCisgICAgeworICAgICAgdmFyIHNlbCA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTsKKyAgICAgIHZhciByYW5nZSA9IGVkaXRvci5jcmVhdGVSYW5nZShzZWwpOworICAgICAgZWRpdG9yLl9kb2MuZXhlY0NvbW1hbmQoImluc2VydGltYWdlIiwgZmFsc2UsIHBhcmFtLmZfdXJsKTsKKyAgICAgIGltZyA9IHJhbmdlLnBhcmVudEVsZW1lbnQoKTsKKyAgICAgIC8vIHdvbmRlciBpZiB0aGlzIHdvcmtzLi4uCisgICAgICBpZiAoIGltZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT0gImltZyIgKQorICAgICAgeworICAgICAgICBpbWcgPSBpbWcucHJldmlvdXNTaWJsaW5nOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7CisgICAgICBpbWcuc3JjID0gcGFyYW0uZl91cmw7CisgICAgICBlZGl0b3IuaW5zZXJ0Tm9kZUF0U2VsZWN0aW9uKGltZyk7CisgICAgICBpZiAoICFpbWcudGFnTmFtZSApCisgICAgICB7CisgICAgICAgIC8vIGlmIHRoZSBjdXJzb3IgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZG9jdW1lbnQKKyAgICAgICAgaW1nID0gcmFuZ2Uuc3RhcnRDb250YWluZXIuZmlyc3RDaGlsZDsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgaW1nLnNyYyA9IHBhcmFtLmZfdXJsOworICB9CisKKyAgZm9yICggdmFyIGZpZWxkIGluIHBhcmFtICkKKyAgeworICAgIHZhciB2YWx1ZSA9IHBhcmFtW2ZpZWxkXTsKKyAgICBzd2l0Y2ggKGZpZWxkKQorICAgIHsKKyAgICAgIGNhc2UgImZfYWx0IjoKKyAgICAgIGlmICh2YWx1ZSkKKyAgICAgIGltZy5hbHQgPSB2YWx1ZTsKKyAgICAgIGVsc2UKKyAgICAgIGltZy5yZW1vdmVBdHRyaWJ1dGUoImFsdCIpOworICAgICAgYnJlYWs7CisgICAgICBjYXNlICJmX2JvcmRlciI6CisgICAgICBpZiAodmFsdWUpCisgICAgICBpbWcuYm9yZGVyID0gcGFyc2VJbnQodmFsdWUgfHwgIjAiKTsKKyAgICAgIGVsc2UKKyAgICAgIGltZy5yZW1vdmVBdHRyaWJ1dGUoImJvcmRlciIpOworICAgICAgYnJlYWs7CisgICAgICBjYXNlICJmX2FsaWduIjoKKyAgICAgIGlmICh2YWx1ZS52YWx1ZSkKKyAgICAgIGltZy5hbGlnbiA9IHZhbHVlLnZhbHVlOworICAgICAgZWxzZQorICAgICAgaW1nLnJlbW92ZUF0dHJpYnV0ZSgiYWxpZ24iKTsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSAiZl92ZXJ0IjoKKyAgICAgIGlmICh2YWx1ZSAhPSAiIikKKyAgICAgIGltZy52c3BhY2UgPSBwYXJzZUludCh2YWx1ZSB8fCAiMCIpOworICAgICAgZWxzZQorICAgICAgaW1nLnJlbW92ZUF0dHJpYnV0ZSgidnNwYWNlIik7CisgICAgICBicmVhazsKKyAgICAgIGNhc2UgImZfaG9yaXoiOgorICAgICAgaWYgKHZhbHVlICE9ICIiKQorICAgICAgaW1nLmhzcGFjZSA9IHBhcnNlSW50KHZhbHVlIHx8ICIwIik7CisgICAgICBlbHNlCisgICAgICBpbWcucmVtb3ZlQXR0cmlidXRlKCJoc3BhY2UiKTsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSAiZl93aWR0aCI6CisgICAgICBpZiAodmFsdWUpCisgICAgICBpbWcud2lkdGggPSBwYXJzZUludCh2YWx1ZSB8fCAiMCIpOworICAgICAgZWxzZQorICAgICAgaW1nLnJlbW92ZUF0dHJpYnV0ZSgid2lkdGgiKTsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSAiZl9oZWlnaHQiOgorICAgICAgaWYgKHZhbHVlKQorICAgICAgaW1nLmhlaWdodCA9IHBhcnNlSW50KHZhbHVlIHx8ICIwIik7CisgICAgICBlbHNlCisgICAgICBpbWcucmVtb3ZlQXR0cmlidXRlKCJoZWlnaHQiKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCit9OwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9kaWFsb2cuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvZGlhbG9nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxOWExYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvZGlhbG9nLmh0bWwKQEAgLTAsMCArMSwxMDEgQEAKKzxoMSBpZD0iW2gxXSI+PGwxMG4+SW5zZXJ0IFRhYmxlPC9sMTBuPjwvaDE+DQorPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0iZ2V0IiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4Ij4NCis8ZGl2IGlkPSJbY29sdW1uc19hbGVydF0iIHN0eWxlPSJjb2xvcjpyZWQ7ZGlzcGxheTpub25lIj48bDEwbj5Zb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiBjb2x1bW5zPC9sMTBuPjwvZGl2Pg0KKzxkaXYgaWQ9Iltyb3dzX2FsZXJ0XSIgc3R5bGU9ImNvbG9yOnJlZDtkaXNwbGF5Om5vbmUiPjxsMTBuPllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3M8L2wxMG4+PC9kaXY+DQorDQorPHRhYmxlIGJvcmRlcj0iMCIgc3R5bGU9InBhZGRpbmc6IDBweDsgbWFyZ2luOiAwcHgiPg0KKyAgPHRib2R5Pg0KKyAgPHRyPg0KKyAgPHRkPg0KKyAgICA8bDEwbj5DYXB0aW9uPC9sMTBuPjoNCisgIDwvdGQ+ICANCisgIDx0ZCBjb2xzcGFuPSI0Ij4NCisgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IltjYXB0aW9uXSIgaWQ9IltjYXB0aW9uXSIgc3R5bGU9IndpZHRoOjkwJSIgdGl0bGU9Il8oQ2FwdGlvbiBmb3IgdGhlIHRhYmxlKSIgLz4NCisgIDwvdGQ+DQorICA8L3RyPg0KKyAgPHRyPg0KKyAgICA8dGQgc3R5bGU9IndpZHRoOiA0ZW07IHRleHQtYWxpZ246IHJpZ2h0Ij48bDEwbj5Sb3dzOjwvbDEwbj48L3RkPg0KKyAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Iltyb3dzXSIgaWQ9Iltyb3dzXSIgc2l6ZT0iNSIgdGl0bGU9Il8oTnVtYmVyIG9mIHJvd3MpIiAgLz48L3RkPg0KKyAgICA8dGQgc3R5bGU9IndpZHRoOiA0ZW07IHRleHQtYWxpZ246IHJpZ2h0Ij5XaWR0aDo8L3RkPg0KKyAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ilt3aWR0aF0iIGlkPSJbd2lkdGhdIiBzaXplPSI1IiB0aXRsZT0iXyhXaWR0aCBvZiB0aGUgdGFibGUpIiAvPjwvdGQ+DQorICAgIDx0ZD48c2VsZWN0IHNpemU9IjEiIG5hbWU9Ilt1bml0XSIgaWQ9Ilt1bml0XSIgdGl0bGU9IldpZHRoIHVuaXQiPg0KKyAgICAgIDxvcHRpb24gdmFsdWU9IiUiICAgICAgICAgICAgICAgPjxsMTBuPlBlcmNlbnQ8L2wxMG4+PC9vcHRpb24+DQorICAgICAgPG9wdGlvbiB2YWx1ZT0icHgiICAgICAgICAgICAgICA+PGwxMG4+UGl4ZWxzPC9sMTBuPjwvb3B0aW9uPg0KKyAgICAgIDxvcHRpb24gdmFsdWU9ImVtIiAgICAgICAgICAgICAgPkVtPC9vcHRpb24+DQorICAgIDwvc2VsZWN0PjwvdGQ+DQorICA8L3RyPg0KKyAgPHRyPg0KKyAgICA8dGQgc3R5bGU9IndpZHRoOiA0ZW07IHRleHQtYWxpZ246IHJpZ2h0Ij5Db2xzOjwvdGQ+DQorICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iW2NvbHNdIiBpZD0iW2NvbHNdIiBzaXplPSI1IiB0aXRsZT0iXyhOdW1iZXIgb2YgY29sdW1ucykiICAvPjwvdGQ+DQorICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iW2ZpeGVkXSIgaWQ9IltmaXhlZF0iIHZhbHVlPSJvbiIgLz48L3RkPg0KKyAgICA8dGQgY29sc3Bhbj0iMiI+PGxhYmVsDQorICAgID48bDEwbj5GaXhlZCB3aWR0aCBjb2x1bW5zPC9sMTBuPjwvbGFiZWw+PC90ZD4NCisgIDwvdHI+DQorICA8L3Rib2R5Pg0KKzwvdGFibGU+DQorDQorPGJyIC8+DQorDQorPGZpZWxkc2V0IGlkPSJbbGF5b3V0X2ZpZWxkc2V0XSIgc3R5bGU9ImZsb2F0OiBsZWZ0OyBtYXJnaW4tbGVmdDogMTBweDsiPg0KKzxsZWdlbmQ+PGwxMG4+TGF5b3U8L2wxMG4+dDwvbGVnZW5kPg0KKw0KKzxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4NCisNCis8ZGl2IGNsYXNzPSJmbCI+PGwxMG4+QWxpZ25tZW50OjwvbDEwbj48L2Rpdj4NCis8c2VsZWN0IHNpemU9IjEiIG5hbWU9IlthbGlnbl0iIGlkPSJbYWxpZ25dIg0KKyAgdGl0bGU9IlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiPg0KKyAgPG9wdGlvbiB2YWx1ZT0iIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxsMTBuPk5vdCBzZXQ8L2wxMG4+PC9vcHRpb24+DQorICA8b3B0aW9uIHZhbHVlPSJsZWZ0IiAgICAgICAgICAgICAgICAgICAgICAgICA+PGwxMG4+TGVmdDwvbDEwbj48L29wdGlvbj4NCisgIDxvcHRpb24gdmFsdWU9InJpZ2h0IiAgICAgICAgICAgICAgICAgICAgICAgID48bDEwbj5SaWdodDwvbDEwbj48L29wdGlvbj4NCisgIDxvcHRpb24gdmFsdWU9InRleHR0b3AiICAgICAgICAgICAgICAgICAgICAgID48bDEwbj5UZXh0dG9wPC9sMTBuPjwvb3B0aW9uPg0KKyAgPG9wdGlvbiB2YWx1ZT0iYWJzbWlkZGxlIiAgICAgICAgICAgICAgICAgICAgPjxsMTBuPkFic21pZGRsZTwvbDEwbj48L29wdGlvbj4NCisgIDxvcHRpb24gdmFsdWU9ImJhc2VsaW5lIiAgICAgICAgICAgICAgICAgICAgID48bDEwbj5CYXNlbGluZTwvbDEwbj48L29wdGlvbj4NCisgIDxvcHRpb24gdmFsdWU9ImFic2JvdHRvbSIgICAgICAgICAgICAgICAgICAgID48bDEwbj5BYnNib3R0b208L2wxMG4+PC9vcHRpb24+DQorICA8b3B0aW9uIHZhbHVlPSJib3R0b20iICAgICAgICAgICAgICAgICAgICAgICA+PGwxMG4+Qm90dG9tPC9sMTBuPjwvb3B0aW9uPg0KKyAgPG9wdGlvbiB2YWx1ZT0ibWlkZGxlIiAgICAgICAgICAgICAgICAgICAgICAgPjxsMTBuPk1pZGRsZTwvb3B0aW9uPg0KKyAgPG9wdGlvbiB2YWx1ZT0idG9wIiAgICAgICAgICAgICAgICAgICAgICAgICAgPjxsMTBuPlRvcDwvbDEwbj48L29wdGlvbj4NCis8L3NlbGVjdD4NCisNCis8YnIgLz4NCisNCis8ZGl2IGNsYXNzPSJmbCI+PGwxMG4+Qm9yZGVyPC9sMTBuPjwvZGl2Pg0KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbYm9yZGVyXSIgaWQ9Iltib3JkZXJdIiBzaXplPSIyIiB0aXRsZT0iXyhMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyKSIgLz4gPGwxMG4+UGl4ZWxzPC9sMTBuPg0KKzxzZWxlY3Qgc2l6ZT0iMSIgbmFtZT0iW2JvcmRlcl9zdHlsZV0iIGlkPSJbYm9yZGVyX3N0eWxlXSIgdGl0bGU9Il8oU3R5bGUgb2YgdGhlIGJvcmRlcikiPg0KKyAgPG9wdGlvbiB2YWx1ZT0iIiAgID48L29wdGlvbj4NCisgIDxvcHRpb24gdmFsdWU9InNvbGlkIiAgID5Tb2xpZDwvb3B0aW9uPg0KKyAgPG9wdGlvbiB2YWx1ZT0iZG90dGVkIiAgPkRvdHRlZDwvb3B0aW9uPg0KKyAgPG9wdGlvbiB2YWx1ZT0iZGFzaGVkIiAgPkRhc2hlZDwvb3B0aW9uPg0KKyAgPG9wdGlvbiB2YWx1ZT0iZG91YmxlIiAgPkRvdWJsZTwvb3B0aW9uPg0KKyAgPG9wdGlvbiB2YWx1ZT0iZ3Jvb3ZlIiAgPkdyb292ZTwvb3B0aW9uPg0KKyAgPG9wdGlvbiB2YWx1ZT0icmlkZ2UiICAgPlJpZGdlPC9vcHRpb24+DQorICA8b3B0aW9uIHZhbHVlPSJpbnNldCIgICA+SW5zZXQ8L29wdGlvbj4NCisgIDxvcHRpb24gdmFsdWU9Im91dHNldCIgID5vdXRzZXQ8L29wdGlvbj4NCis8L3NlbGVjdD4NCis8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNyIgaWQ9Iltib3JkZXJfY29sb3JdIiBuYW1lPSJbYm9yZGVyX2NvbG9yXSIvPg0KKzxiciAvPjxsMTBuPkNvbGxhcHNlIGJvcmRlcnM6PC9sMTBuPiANCis8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Iltib3JkZXJfY29sbGFwc2VdIiBpZD0iW2JvcmRlcl9jb2xsYXBzZV0iIHZhbHVlPSJvbiIgLz4NCisNCis8ZGl2IGNsYXNzPSJzcGFjZSI+PC9kaXY+DQorDQorPC9maWVsZHNldD4NCisNCis8ZmllbGRzZXQgIGlkPSJbc3BhY2luZ19maWVsZHNldF0iPg0KKzxsZWdlbmQ+PGwxMG4+U3BhY2luZzwvbDEwbj48L2xlZ2VuZD4NCisNCis8ZGl2IGNsYXNzPSJzcGFjZSI+PC9kaXY+DQorDQorPGRpdiBjbGFzcz0iZnIiPjxsMTBuPkNlbGwgc3BhY2luZzo8L2wxMG4+PC9kaXY+DQorPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IltzcGFjaW5nXSIgaWQ9IltzcGFjaW5nXSIgc2l6ZT0iNSIgdGl0bGU9Il8oU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscykiIC8+DQorDQorPGJyIC8+DQorDQorPGRpdiBjbGFzcz0iZnIiPjxsMTBuPkNlbGwgcGFkZGluZzo8L2wxMG4+PC9kaXY+DQorPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IltwYWRkaW5nXSIgaWQ9IltwYWRkaW5nXSIgc2l6ZT0iNSIgdGl0bGU9Il8oU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCkiIC8+DQorDQorDQorPC9maWVsZHNldD4NCisgIDxkaXYgY2xhc3M9ImJ1dHRvbnMiIHN0eWxlPSJjbGVhcjpsZWZ0Ij4NCisgIDxpbnB1dCB0eXBlPSJidXR0b24iIGlkPSJbb2tdIiAgICAgdmFsdWU9Il8oT0spIiAgICAgLz4NCisgIDxpbnB1dCB0eXBlPSJidXR0b24iIGlkPSJbY2FuY2VsXSIgdmFsdWU9Il8oQ2FuY2VsKSIgLz4NCisgIDwvZGl2Pg0KKzwvZm9ybT4NCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2luc2VydF90YWJsZS5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9pbnNlcnRfdGFibGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjVhYzg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9pbnNlcnRfdGFibGUuaHRtbApAQCAtMCwwICsxLDE1NyBAQAorPGh0bWw+CisKKzxoZWFkPgorICA8dGl0bGU+SW5zZXJ0IFRhYmxlPC90aXRsZT4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vcG9wdXBzL3BvcHVwLmpzIj48L3NjcmlwdD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uLy4uL3BvcHVwcy9wb3B1cC5jc3MiIC8+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKword2luZG93LnJlc2l6ZVRvKDQyNSwgMjUwKTsKKworWGluaGEgPSB3aW5kb3cub3BlbmVyLlhpbmhhOworZnVuY3Rpb24gaTE4bihzdHIpIHsKKyAgcmV0dXJuIChYaW5oYS5fbGMoc3RyLCAnSW5zZXJ0VGFibGUnKSk7Cit9CisKK2Z1bmN0aW9uIEluaXQoKSB7CisgIFhpbmhhID0gd2luZG93Lm9wZW5lci5YaW5oYTsgLy8gbG9hZCB0aGUgWGluaGEgcGx1Z2luIGFuZCBsYW5nIGZpbGUKKyAgX19kbGdfdHJhbnNsYXRlKCdJbnNlcnRUYWJsZScpOworICBfX2RsZ19pbml0KG51bGwsIFhpbmhhLmlzX2llID8gbnVsbCA6IHt3aWR0aDo0MjUsaGVpZ2h0OjI1MH0pOworICAvLyBNYWtlIHN1cmUgdGhlIHRyYW5zbGF0ZWQgc3RyaW5nIGFwcGVhcnMgaW4gdGhlIGRyb3AgZG93bi4gKGZvciBnZWNrbykKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfdW5pdCIpLnNlbGVjdGVkSW5kZXggPSAxOworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl91bml0Iikuc2VsZWN0ZWRJbmRleCA9IDA7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2FsaWduIikuc2VsZWN0ZWRJbmRleCA9IDE7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2FsaWduIikuc2VsZWN0ZWRJbmRleCA9IDA7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3Jvd3MiKS5mb2N1cygpOworfQorCitmdW5jdGlvbiBvbk9LKCkgeworICB2YXIgcmVxdWlyZWQgPSB7CisgICAgImZfcm93cyI6IGkxOG4oIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiKSwKKyAgICAiZl9jb2xzIjogaTE4bigiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyIpCisgIH07CisgIGZvciAodmFyIGkgaW4gcmVxdWlyZWQpIHsKKyAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpKTsKKyAgICBpZiAoIWVsLnZhbHVlKSB7CisgICAgICBhbGVydChyZXF1aXJlZFtpXSk7CisgICAgICBlbC5mb2N1cygpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorICB2YXIgZmllbGRzID0gWyJmX3Jvd3MiLCAiZl9jb2xzIiwgImZfd2lkdGgiLCAiZl91bml0IiwgImZfZml4ZWQiLAorICAgICAgICAgICAgICAgICJmX2FsaWduIiwgImZfYm9yZGVyIiwgImZfc3BhY2luZyIsICJmX3BhZGRpbmciXTsKKyAgdmFyIHBhcmFtID0gbmV3IE9iamVjdCgpOworICBmb3IgKHZhciBpIGluIGZpZWxkcykgeworICAgIHZhciBpZCA9IGZpZWxkc1tpXTsKKyAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgcGFyYW1baWRdID0gKGVsLnR5cGUgPT0gImNoZWNrYm94IikgPyBlbC5jaGVja2VkIDogZWwudmFsdWU7CisgIH0KKyAgX19kbGdfY2xvc2UocGFyYW0pOworICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIG9uQ2FuY2VsKCkgeworICBfX2RsZ19jbG9zZShudWxsKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCis8L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBjbGFzcz0iZGlhbG9nIiBvbmxvYWQ9IkluaXQoKSI+CisKKzxkaXYgY2xhc3M9InRpdGxlIj5JbnNlcnQgVGFibGU8L2Rpdj4KKworPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0iZ2V0Ij4KKzx0YWJsZSBib3JkZXI9IjAiIHN0eWxlPSJwYWRkaW5nOiAwcHg7IG1hcmdpbjogMHB4Ij4KKyAgPHRib2R5PgorCisgIDx0cj4KKyAgICA8dGQgc3R5bGU9IndpZHRoOiA0ZW07IHRleHQtYWxpZ246IHJpZ2h0Ij5Sb3dzOjwvdGQ+CisgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyb3dzIiBpZD0iZl9yb3dzIiBzaXplPSI1IiB0aXRsZT0iTnVtYmVyIG9mIHJvd3MiIHZhbHVlPSIyIiAvPjwvdGQ+CisgICAgPHRkIHN0eWxlPSJ3aWR0aDogNGVtOyB0ZXh0LWFsaWduOiByaWdodCI+V2lkdGg6PC90ZD4KKyAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9IndpZHRoIiBpZD0iZl93aWR0aCIgc2l6ZT0iNSIgdGl0bGU9IldpZHRoIG9mIHRoZSB0YWJsZSIgdmFsdWU9IjEwMCIgLz48L3RkPgorICAgIDx0ZD48c2VsZWN0IHNpemU9IjEiIG5hbWU9InVuaXQiIGlkPSJmX3VuaXQiIHRpdGxlPSJXaWR0aCB1bml0Ij4KKyAgICAgIDxvcHRpb24gdmFsdWU9IiUiIHNlbGVjdGVkPSJzZWxlY3RlZCIgID5QZXJjZW50PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJweCIgICAgICAgICAgICAgID5QaXhlbHM8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImVtIiAgICAgICAgICAgICAgPkVtPC9vcHRpb24+CisgICAgPC9zZWxlY3Q+PC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0ZCBzdHlsZT0id2lkdGg6IDRlbTsgdGV4dC1hbGlnbjogcmlnaHQiPkNvbHM6PC90ZD4KKyAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNvbHMiIGlkPSJmX2NvbHMiIHNpemU9IjUiIHRpdGxlPSJOdW1iZXIgb2YgY29sdW1ucyIgdmFsdWU9IjQiIC8+PC90ZD4KKyAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIGNoZWNrZWQ9ImNoZWNrZWQiIG5hbWU9ImZpeGVkIiBpZD0iZl9maXhlZCIgdmFsdWU9Im9uIiAvPjwvdGQ+CisgICAgPHRkIGNvbHNwYW49IjIiPjxsYWJlbCBmb3I9ImZfZml4ZWQiCisgICAgPkZpeGVkIHdpZHRoIGNvbHVtbnM8L2xhYmVsPjwvdGQ+CisgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorCis8cCAvPgorCis8ZmllbGRzZXQgc3R5bGU9ImZsb2F0OiBsZWZ0OyBtYXJnaW4tbGVmdDogNXB4OyI+Cis8bGVnZW5kPkxheW91dDwvbGVnZW5kPgorCis8ZGl2IGNsYXNzPSJzcGFjZSI+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImZsIj5BbGlnbm1lbnQ6PC9kaXY+Cis8c2VsZWN0IHNpemU9IjEiIG5hbWU9ImFsaWduIiBpZD0iZl9hbGlnbiIKKyAgdGl0bGU9IlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiPgorICA8b3B0aW9uIHZhbHVlPSIiIHNlbGVjdGVkPSJzZWxlY3RlZCIgICAgICAgICA+Tm90IHNldDwvb3B0aW9uPgorICA8b3B0aW9uIHZhbHVlPSJsZWZ0IiAgICAgICAgICAgICAgICAgICAgICAgICA+TGVmdDwvb3B0aW9uPgorICA8b3B0aW9uIHZhbHVlPSJyaWdodCIgICAgICAgICAgICAgICAgICAgICAgICA+UmlnaHQ8L29wdGlvbj4KKyAgPG9wdGlvbiB2YWx1ZT0idGV4dHRvcCIgICAgICAgICAgICAgICAgICAgICAgPlRleHR0b3A8L29wdGlvbj4KKyAgPG9wdGlvbiB2YWx1ZT0iYWJzbWlkZGxlIiAgICAgICAgICAgICAgICAgICAgPkFic21pZGRsZTwvb3B0aW9uPgorICA8b3B0aW9uIHZhbHVlPSJiYXNlbGluZSIgICAgICAgICAgICAgICAgICAgICA+QmFzZWxpbmU8L29wdGlvbj4KKyAgPG9wdGlvbiB2YWx1ZT0iYWJzYm90dG9tIiAgICAgICAgICAgICAgICAgICAgPkFic2JvdHRvbTwvb3B0aW9uPgorICA8b3B0aW9uIHZhbHVlPSJib3R0b20iICAgICAgICAgICAgICAgICAgICAgICA+Qm90dG9tPC9vcHRpb24+CisgIDxvcHRpb24gdmFsdWU9Im1pZGRsZSIgICAgICAgICAgICAgICAgICAgICAgID5NaWRkbGU8L29wdGlvbj4KKyAgPG9wdGlvbiB2YWx1ZT0idG9wIiAgICAgICAgICAgICAgICAgICAgICAgICAgPlRvcDwvb3B0aW9uPgorPC9zZWxlY3Q+CisKKzxwIC8+CisKKzxkaXYgY2xhc3M9ImZsIj5Cb3JkZXIgdGhpY2tuZXNzOjwvZGl2PgorPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImJvcmRlciIgaWQ9ImZfYm9yZGVyIiBzaXplPSI1IiB2YWx1ZT0iMSIKK3RpdGxlPSJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIiAvPgorPCEtLQorPHAgLz4KKworPGRpdiBjbGFzcz0iZmwiPkNvbGxhcHNlIGJvcmRlcnM6PC9kaXY+Cis8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImNvbGxhcHNlIiBpZD0iZl9jb2xsYXBzZSIgLz4KKy0tPgorPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgorCis8L2ZpZWxkc2V0PgorCis8ZmllbGRzZXQgc3R5bGU9ImZsb2F0OnJpZ2h0OyBtYXJnaW4tcmlnaHQ6IDVweDsiPgorPGxlZ2VuZD5TcGFjaW5nPC9sZWdlbmQ+CisKKzxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KKworPGRpdiBjbGFzcz0iZnIiPkNlbGwgc3BhY2luZzo8L2Rpdj4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcGFjaW5nIiBpZD0iZl9zcGFjaW5nIiBzaXplPSI1IiB2YWx1ZT0iMSIKK3RpdGxlPSJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIiAvPgorCis8cCAvPgorCis8ZGl2IGNsYXNzPSJmciI+Q2VsbCBwYWRkaW5nOjwvZGl2PgorPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InBhZGRpbmciIGlkPSJmX3BhZGRpbmciIHNpemU9IjUiIHZhbHVlPSIxIgordGl0bGU9IlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiIC8+CisKKzxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KKworPC9maWVsZHNldD4KKworPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogODVweDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6IDJweDsgdGV4dC1hbGlnbjogcmlnaHQ7Ij4KKzxidXR0b24gdHlwZT0iYnV0dG9uIiBuYW1lPSJvayIgb25jbGljaz0icmV0dXJuIG9uT0soKTsiPk9LPC9idXR0b24+Cis8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbmFtZT0iY2FuY2VsIiBvbmNsaWNrPSJyZXR1cm4gb25DYW5jZWwoKTsiPkNhbmNlbDwvYnV0dG9uPgorPC9kaXY+CisKKzwvZm9ybT4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9pbnNlcnRfdGFibGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2luc2VydF90YWJsZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTQwMzY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9pbnNlcnRfdGFibGUuanMKQEAgLTAsMCArMSw5NCBAQAorCisgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS06bm9UYWJzPXRydWU6dGFiU2l6ZT0yOmluZGVudFNpemU9MjotLQorICAgIC0tICBYaW5oYSAoaXMgbm90IGh0bWxBcmVhKSAtIGh0dHA6Ly94aW5oYS5vcmcKKyAgICAtLQorICAgIC0tICBVc2Ugb2YgWGluaGEgaXMgZ3JhbnRlZCBieSB0aGUgdGVybXMgb2YgdGhlIGh0bWxBcmVhIExpY2Vuc2UgKGJhc2VkIG9uCisgICAgLS0gIEJTRCBsaWNlbnNlKSAgcGxlYXNlIHJlYWQgbGljZW5zZS50eHQgaW4gdGhpcyBwYWNrYWdlIGZvciBkZXRhaWxzLgorICAgIC0tCisgICAgLS0gIENvcHlyaWdodCAoYykgMjAwNS0yMDA4IFhpbmhhIERldmVsb3BlciBUZWFtIGFuZCBjb250cmlidXRvcnMKKyAgICAtLQorICAgIC0tICBYaW5oYSB3YXMgb3JpZ2luYWxseSBiYXNlZCBvbiB3b3JrIGJ5IE1paGFpIEJhem9uIHdoaWNoIGlzOgorICAgIC0tICAgICAgQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQgZHluYXJjaC5jb20uCisgICAgLS0gICAgICBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBpbnRlcmFjdGl2ZXRvb2xzLmNvbSwgaW5jLgorICAgIC0tICAgICAgVGhpcyBjb3B5cmlnaHQgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZS4KKyAgICAtLQorICAgIC0tICBUaGlzIGlzIHRoZSBYaW5oYSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbiBvZiBhIHRhYmxlIGluc2VydGlvbiBwbHVnaW4KKyAgICAtLQorICAgIC0tICBUaGUgZmlsZSBpcyBsb2FkZWQgYnkgdGhlIFhpbmhhIENvcmUgd2hlbiBubyBhbHRlcm5hdGl2ZSBtZXRob2QgKHBsdWdpbikgaXMgbG9hZGVkLgorICAgIC0tCisgICAgLS0KKyAgICAtLSAgJEhlYWRVUkw6IGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvSW5zZXJ0VGFibGUvaW5zZXJ0X3RhYmxlLmpzICQKKyAgICAtLSAgJExhc3RDaGFuZ2VkRGF0ZTogMjAxOC0wMi0xOSAyMDozNTo0OSArMTMwMCAoTW9uLCAxOSBGZWIgMjAxOCkgJAorICAgIC0tICAkTGFzdENoYW5nZWRSZXZpc2lvbjogMTQwMiAkCisgICAgLS0gICRMYXN0Q2hhbmdlZEJ5OiBnb2dvICQKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitJbnNlcnRUYWJsZS5fcGx1Z2luSW5mbyA9IHsKKyAgbmFtZSAgICAgICAgICA6ICJJbnNlcnRUYWJsZSIsCisgIG9yaWdpbiAgICAgICAgOiAiWGluaGEgQ29yZSIsCisgIHZlcnNpb24gICAgICAgOiAiJExhc3RDaGFuZ2VkUmV2aXNpb246IDE0MDIgJCIucmVwbGFjZSgvXlteOl0qOlxzKiguKilccypcJCQvLCAnJDEnKSwKKyAgZGV2ZWxvcGVyICAgICA6ICJUaGUgWGluaGEgQ29yZSBEZXZlbG9wZXIgVGVhbSIsCisgIGRldmVsb3Blcl91cmwgOiAiJEhlYWRVUkw6IGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvSW5zZXJ0VGFibGUvaW5zZXJ0X3RhYmxlLmpzICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywgJyQxJyksCisgIHNwb25zb3IgICAgICAgOiAiIiwKKyAgc3BvbnNvcl91cmwgICA6ICIiLAorICBsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIgorfTsKKworZnVuY3Rpb24gSW5zZXJ0VGFibGUoZWRpdG9yKSB7CisJdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisJdmFyIGNmZyA9IGVkaXRvci5jb25maWc7CisJdmFyIHNlbGYgPSB0aGlzOworCisJaWYodHlwZW9mIGVkaXRvci5faW5zZXJ0VGFibGUgPT0gJ3VuZGVmaW5lZCcpIHsKKwkgICAgZWRpdG9yLl9pbnNlcnRUYWJsZSA9IGZ1bmN0aW9uKCkgeworCQlzZWxmLnNob3coKTsKKwkgICAgfQorCX0KK30KKworSW5zZXJ0VGFibGUucHJvdG90eXBlLl9sYyA9IGZ1bmN0aW9uKHN0cmluZykgeworCXJldHVybiBYaW5oYS5fbGMoc3RyaW5nLCAnSW5zZXJ0VGFibGUnKTsKK307CisKKworSW5zZXJ0VGFibGUucHJvdG90eXBlLm9uR2VuZXJhdGVPbmNlID0gZnVuY3Rpb24oKQoreworCUluc2VydFRhYmxlLmxvYWRBc3NldHMoKTsKK307CitJbnNlcnRUYWJsZS5sb2FkQXNzZXRzID0gZnVuY3Rpb24oKQoreworCXZhciBzZWxmID0gSW5zZXJ0VGFibGU7CisJaWYgKHNlbGYubG9hZGluZykgcmV0dXJuOworCXNlbGYubG9hZGluZyA9IHRydWU7CisJWGluaGEuX2dldGJhY2soX2VkaXRvcl91cmwgKyAnbW9kdWxlcy9JbnNlcnRUYWJsZS9kaWFsb2cuaHRtbCcsIGZ1bmN0aW9uKGdldGJhY2spIHsgc2VsZi5odG1sID0gZ2V0YmFjazsgc2VsZi5kaWFsb2dSZWFkeSA9IHRydWU7IH0pOworCVhpbmhhLl9nZXRiYWNrKF9lZGl0b3JfdXJsICsgJ21vZHVsZXMvSW5zZXJ0VGFibGUvcGx1Z2luTWV0aG9kcy5qcycsIGZ1bmN0aW9uKGdldGJhY2spIHsgZXZhbChnZXRiYWNrKTsgc2VsZi5tZXRob2RzUmVhZHkgPSB0cnVlOyB9KTsKK307CisKK0luc2VydFRhYmxlLnByb3RvdHlwZS5vblVwZGF0ZVRvb2xiYXIgPSBmdW5jdGlvbigpCit7IAorICBpZiAoIShJbnNlcnRUYWJsZS5kaWFsb2dSZWFkeSAmJiBJbnNlcnRUYWJsZS5tZXRob2RzUmVhZHkpKQorCXsKKwkgIHRoaXMuZWRpdG9yLl90b29sYmFyT2JqZWN0cy5pbnNlcnR0YWJsZS5zdGF0ZSgiZW5hYmxlZCIsIGZhbHNlKTsKKwl9CisJZWxzZSB0aGlzLm9uVXBkYXRlVG9vbGJhciA9IG51bGw7Cit9OworCitJbnNlcnRUYWJsZS5wcm90b3R5cGUucHJlcGFyZURpYWxvZyA9IGZ1bmN0aW9uKCkKK3sKKwl2YXIgc2VsZiA9IHRoaXM7CisJdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworCisJdmFyIGRpYWxvZyA9IHRoaXMuZGlhbG9nID0gbmV3IFhpbmhhLkRpYWxvZyhlZGl0b3IsIEluc2VydFRhYmxlLmh0bWwsICdYaW5oYScse3dpZHRoOjQwMH0pCisJLy8gQ29ubmVjdCB0aGUgT0sgYW5kIENhbmNlbCBidXR0b25zCisJZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdvaycpLm9uY2xpY2sgPSBmdW5jdGlvbigpIHtzZWxmLmFwcGx5KCk7fQorCWRpYWxvZy5nZXRFbGVtZW50QnlJZCgnY2FuY2VsJykub25jbGljayA9IGZ1bmN0aW9uKCkgeyBzZWxmLmRpYWxvZy5oaWRlKCl9OworICAKKwl0aGlzLmJvcmRlckNvbG9yUGlja2VyID0gbmV3IFhpbmhhLmNvbG9yUGlja2VyLklucHV0QmluZGluZyhkaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ2JvcmRlcl9jb2xvcicpKTsKKworCXRoaXMuZGlhbG9nLm9ucmVzaXplID0gZnVuY3Rpb24gKCkKKwl7CisJCXRoaXMuZ2V0RWxlbWVudEJ5SWQoImxheW91dF9maWVsZHNldCIpLnN0eWxlLndpZHRoID0odGhpcy53aWR0aCAvIDIpICsgNTAgKyAncHgnOworICAgIHRoaXMuZ2V0RWxlbWVudEJ5SWQoInNwYWNpbmdfZmllbGRzZXQiKS5zdHlsZS53aWR0aCA9KHRoaXMud2lkdGggLyAyKSAtIDEyMCArICdweCc7IAorCX0KKworCXRoaXMuZGlhbG9nUmVhZHkgPSB0cnVlOworfTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9iNS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9iNS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjdjYmFlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2I1LmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiYjUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSW5zZXJ0IFRhYmxlIjogIuaPkuWFpeihqOagvCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMjQ3NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvY2guanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi5Y+W5raIIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIuaPkuWFpeihqOagvCIsCisgICAgIk9LIjogIuWlvSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2N6LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2N6LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ODEzZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvY3ouanMKQEAgLTAsMCArMSwyOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjeiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYXNlbGluZSI6ICJaw6FrbGFkbsOtIGxpbmthIiwKKyAgICAiQm9yZGVyIjogIk9icnlzIiwKKyAgICAiQm90dG9tIjogIkRvbMWvIiwKKyAgICAiQ2FuY2VsIjogIlpydcWhaXQiLAorICAgICJDYXB0aW9uIjogIlRpdHVsZWsiLAorICAgICJJbnNlcnQgVGFibGUiOiAiVmxvxb5pdCB0YWJ1bGt1IiwKKyAgICAiTGF5b3V0IjogIlJvemxvxb5lbsOtIiwKKyAgICAiTGVmdCI6ICJWbGV2byIsCisgICAgIk1pZGRsZSI6ICJOYSBzdMWZZWQiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBlcmNlbnQiOiAicHJvY2VudCIsCisgICAgIlBpeGVscyI6ICJwaXhlbMWvIiwKKyAgICAiUmlnaHQiOiAiVnByYXZvIiwKKyAgICAiU3BhY2luZyI6ICJNZXplcnkiLAorICAgICJUb3AiOiAiTmFob3J1IiwKKyAgICAiV2lkdGg6IjogIsWgw63FmWthIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvZGEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvZGEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIzZDNiMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9kYS5qcwpAQCAtMCwwICsxLDUwIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICJCdW5kIiwKKyAgICAiQWJzbWlkZGxlIjogIkNlbnRyZXJldCIsCisgICAgIkFsaWdubWVudDoiOiAiSnVzdGVyaW5nOiIsCisgICAgIkJhc2VsaW5lIjogIkdydW5kbGluamUiLAorICAgICJCb3JkZXIiOiAiUmFtbWUiLAorICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJLYW50YnJlZGRlOiIsCisgICAgIkJvdHRvbSI6ICJUZWtzdGJ1bmQiLAorICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICJDYXB0aW9uIjogIlRpdGVsIiwKKyAgICAiQ2VsbCBwYWRkaW5nOiI6ICJDZWxsZWZ5bGQ6IiwKKyAgICAiQ2VsbCBzcGFjaW5nOiI6ICJDZWxsZWFmc3RhbmQ6IiwKKyAgICAiQ29sczoiOiAiU8O4amxlcjoiLAorICAgICJFbSI6ICJHZXZpZXJ0IChFbSkiLAorICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIkZhc3QtYnJlZGRlIHPDuGpsZXIiLAorICAgICJJbnNlcnQgVGFibGUiOiAiSW5kc8OmdCB0YWJlbCIsCisgICAgIkxheW91dCI6ICJMYXlvdXQiLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIlRvbSBodmlzIGluZ2VuIGthbnQiLAorICAgICJMZWZ0IjogIlZlbnN0cmUiLAorICAgICJNaWRkbGUiOiAiTWlkdCIsCisgICAgIk5vdCBzZXQiOiAiVWJlc3RlbXQiLAorICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICJBbnRhbCBzw7hqbGVyIiwKKyAgICAiTnVtYmVyIG9mIHJvd3MiOiAiQW50YWwgcsOma2tlciIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUGVyY2VudCI6ICJQcm9jZW50IiwKKyAgICAiUGl4ZWxzIjogIlBpeGVsIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICJQbGFjZXJpbmcgYWYgdGFiZWwiLAorICAgICJSaWdodCI6ICJIw7hqcmUiLAorICAgICJSb3dzOiI6ICJSw6Zra2VyOiIsCisgICAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAiQWZzdGFuZCBtZWxsZW0gY2VsbGVyIiwKKyAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICJMdWZ0IG1lbGxlbSBpbmRob2xkIG9nIGthbnRlciIsCisgICAgIlNwYWNpbmciOiAiQWZzdGFuZCIsCisgICAgIlRleHR0b3AiOiAiVGVrc3R0b3AiLAorICAgICJUb3AiOiAiVG9wIiwKKyAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIlRhYmVsYnJlZGRlIiwKKyAgICAiV2lkdGggdW5pdCI6ICJCcmVkZGVlbmhlZCIsCisgICAgIldpZHRoOiI6ICJCcmVkZGU6IiwKKyAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICJEdSBza2FsIHNrcml2ZSBhbnRhbGxldCBhZiBzw7hqbGVyIiwKKyAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICJEdSBza2FsIHNrcml2ZSBhbnRhbGxldCBhZiByw6Zra2VyIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTljNGVhOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9kZS5qcwpAQCAtMCwwICsxLDUwIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICJ1bnRlbiBiw7xuZGlnIiwKKyAgICAiQWJzbWlkZGxlIjogIm1pdHRpZyIsCisgICAgIkFsaWdubWVudDoiOiAiQXVzcmljaHR1bmc6IiwKKyAgICAiQmFzZWxpbmUiOiAiR3J1bmRsaW5pZSIsCisgICAgIkJvcmRlciI6ICJSYWhtZW4iLAorICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJSYW5kc3TDpHJrZToiLAorICAgICJCb3R0b20iOiAidW50ZW4iLAorICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAiQ2FwdGlvbiI6ICLDnGJlcnNjaHJpZnQiLAorICAgICJDZWxsIHBhZGRpbmc6IjogIklubmVuYWJzdGFuZDoiLAorICAgICJDZWxsIHNwYWNpbmc6IjogIlplbGxlbmFic3RhbmQ6IiwKKyAgICAiQ29sczoiOiAiU3BhbHRlbjoiLAorICAgICJFbSI6ICJHZXZpZXJ0IiwKKyAgICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICJTcGFsdGVuIG1pdCBmZXN0ZXIgQnJlaXRlIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIlRhYmVsbGUgZWluZsO8Z2VuIiwKKyAgICAiTGF5b3V0IjogIkdlc3RhbHR1bmciLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogImxlZXIgbGFzc2VuIGbDvHIga2VpbmVuIFJhbmQiLAorICAgICJMZWZ0IjogImxpbmtzIiwKKyAgICAiTWlkZGxlIjogInplbnRyaWVydCIsCisgICAgIk5vdCBzZXQiOiAibmljaHQgZWluZ2VzdGVsbHQiLAorICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICJTcGFsdGVuYW56YWhsIiwKKyAgICAiTnVtYmVyIG9mIHJvd3MiOiAiWmVpbGVuYW56YWhsIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQZXJjZW50IjogIlByb3plbnQiLAorICAgICJQaXhlbHMiOiAiUGl4ZWwiLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIlBvc2l0aW9uaWVydW5nIGRlciBUYWJlbGxlIiwKKyAgICAiUmlnaHQiOiAicmVjaHRzIiwKKyAgICAiUm93czoiOiAiWmVpbGVuOiIsCisgICAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAiUmF1bSB6d2lzY2hlbiBhbmdyZW56ZW5kZW4gWmVsbGVuIiwKKyAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICJSYXVtIHp3aXNjaGVuIEluaGFsdCB1bmQgUmFuZCBkZXIgWmVsbGUiLAorICAgICJTcGFjaW5nIjogIkFic3RhbmQiLAorICAgICJUZXh0dG9wIjogIm9iZW4gYsO8bmRpZyIsCisgICAgIlRvcCI6ICJvYmVuIiwKKyAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIlRhYmVsbGVuYnJlaXRlIiwKKyAgICAiV2lkdGggdW5pdCI6ICJHcsO2w59lbmVpbmhlaXQiLAorICAgICJXaWR0aDoiOiAiQnJlaXRlOiIsCisgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiQml0dGUgZ2ViZW4gU2llIGRpZSBBbnphaGwgZGVyIFNwYWx0ZW4gYW4iLAorICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIkJpdHRlIGdlYmVuIFNpZSBkaWUgQW56YWhsIGRlciBaZWlsZW4gYW4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9lZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9lZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjM2OWYxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2VlLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIkxpc2EgdGFiZWwiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2VsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2VsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NTQ1MDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvZWwuanMKQEAgLTAsMCArMSwyOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYXNlbGluZSI6ICJCYXNlbGluZSIsCisgICAgIkJvcmRlciI6ICLOoM61z4HOr86zz4HOsc68zrzOsSIsCisgICAgIkJvdHRvbSI6ICLOms6sz4TPiSDOvM6tz4HOv8+CIiwKKyAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAiQ2FwdGlvbiI6ICLOm861zrbOrM69z4TOsSIsCisgICAgIkluc2VydCBUYWJsZSI6ICLOlc65z4POsc6zz4nOs86uIM6gzq/Ovc6xzrrOsSIsCisgICAgIkxheW91dCI6ICLOlM65zqzPhM6xzr7OtyIsCisgICAgIkxlZnQiOiAizpHPgc65z4PPhM61z4HOrCIsCisgICAgIk1pZGRsZSI6ICLOms6tzr3PhM+Bzr8iLAorICAgICJPSyI6ICLOlc69z4TOrM6+zrXOuSIsCisgICAgIlBlcmNlbnQiOiAiz4TOv865z4IgzrXOus6xz4TPjM69IiwKKyAgICAiUGl4ZWxzIjogInBpeGVscyIsCisgICAgIlJpZ2h0IjogIs6UzrXOvs65zqwiLAorICAgICJTcGFjaW5nIjogIs6Rz4DOv8+Dz4TOrM+DzrXOuc+CIiwKKyAgICAiVG9wIjogIs6gzqzOvc+JIiwKKyAgICAiV2lkdGg6IjogIs6gzrvOrM+Ezr/PgiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2VzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNTNlN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvZXMuanMKQEAgLTAsMCArMSw1MCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlcyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAiSW5mZXJpb3IgYWJzb2x1dG8iLAorICAgICJBYnNtaWRkbGUiOiAiTWVkaW8gQWJzb2x1dG8iLAorICAgICJBbGlnbm1lbnQ6IjogIkFsaW5lYWNpw7NuOiIsCisgICAgIkJhc2VsaW5lIjogIkzDrW5lYSBiYXNlIiwKKyAgICAiQm9yZGVyIjogIkJvcmRlIiwKKyAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiVGFtYcOxbyBkZWwgYm9yZGU6IiwKKyAgICAiQm90dG9tIjogIkluZmVyaW9yIiwKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiQ2FwdGlvbiI6ICJUw610dWxvIiwKKyAgICAiQ2VsbCBwYWRkaW5nOiI6ICJSZWxsZW5vIGRlIGNlbGRhczoiLAorICAgICJDZWxsIHNwYWNpbmc6IjogIkVzcGFjaWFkbyBlbnRyZSBjZWxkYXM6IiwKKyAgICAiQ29sczoiOiAiQ29sdW1uYXM6IiwKKyAgICAiRW0iOiAiRW0iLAorICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIkNvbHVtbmFzIGRlIGFuY2hvIGZpam8iLAorICAgICJJbnNlcnQgVGFibGUiOiAiQcOxYWRpciB1bmEgdGFibGEiLAorICAgICJMYXlvdXQiOiAiRGlzdHJpYnVjacOzbiIsCisgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiVmFjw61vIHNpIG5vIGRlc2VhIG5pbmfDum4gYm9yZGUiLAorICAgICJMZWZ0IjogIkl6cXVpZXJkYSIsCisgICAgIk1pZGRsZSI6ICJNZWRpbyIsCisgICAgIk5vdCBzZXQiOiAiTm8gZGVmaW5pZG8iLAorICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICJOw7ptZXJvIGRlIGNvbHVtbmFzIiwKKyAgICAiTnVtYmVyIG9mIHJvd3MiOiAiTsO6bWVybyBkZSBmaWxhcyIsCisgICAgIk9LIjogIkFjZXB0YXIiLAorICAgICJQZXJjZW50IjogIlBvcmNlbnRhamUiLAorICAgICJQaXhlbHMiOiAiUGl4ZWxzIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICJQb3NpY2nDs24gZGUgZXN0YSB0YWJsYSIsCisgICAgIlJpZ2h0IjogIkRlcmVjaGEiLAorICAgICJSb3dzOiI6ICJGaWxhczoiLAorICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIkVzcGFjaWFkbyBlbnRyZSBjZWxkYXMgYWR5YWNlbnRlcyIsCisgICAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAiRXNjYXBjaW8gZW50cmUgZWwgY29udGVuaWRvIHkgZWwgYm9yZGUgZGUgbGEgY2VsZGEiLAorICAgICJTcGFjaW5nIjogIkVzcGFjaWFkbyIsCisgICAgIlRleHR0b3AiOiAiVGV4dG8gU3VwZXJpb3IiLAorICAgICJUb3AiOiAiU3VwZXJpb3IiLAorICAgICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiQW5jaG8gZGUgbGEgdGFibGEiLAorICAgICJXaWR0aCB1bml0IjogIlVuaWRhZCBkZSBhbmNodXJhIiwKKyAgICAiV2lkdGg6IjogIkFuY2hvOiIsCisgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiRGViZSBpbnRyb2R1Y2lyIHVuIG7Dum1lcm8gZGUgY29sdW1uYXMiLAorICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIkRlYmUgaW50cm9kdWNpciB1biBuw7ptZXJvIGRlIGZpbGFzIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvZXUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvZXUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1OGQ4OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9ldS5qcwpAQCAtMCwwICsxLDQ4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImV1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICJJcnVkaWFyZW4gYmVoZWthbGRlYW4iLAorICAgICJBYnNtaWRkbGUiOiAiSXJ1ZGlhcmVuIGVyZGlhbiIsCisgICAgIkFsaWdubWVudDoiOiAiTGVycm9rYXR6ZWE6IiwKKyAgICAiQmFzZWxpbmUiOiAiSXJ1ZGlhcmVuIG9pbmVhbiIsCisgICAgIkJvcmRlciB0aGlja25lc3M6IjogIkVydHphcmVuIGxvZGllcmE6IiwKKyAgICAiQm90dG9tIjogIkJlaGVhbiIsCisgICAgIkNhbmNlbCI6ICJVdHppIiwKKyAgICAiQ2VsbCBwYWRkaW5nOiI6ICJHZWxheGthcmVuIGJldGVnYXJyaWE6IiwKKyAgICAiQ2VsbCBzcGFjaW5nOiI6ICJHZWxheGthLXRhcnRlYToiLAorICAgICJDb2xzOiI6ICJadXRhYmVhazoiLAorICAgICJFbSI6ICJFbSIsCisgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiWmFiYWxlcmEgZmlua29kdW4genV0YWJlYWsiLAorICAgICJJbnNlcnQgVGFibGUiOiAiVGF1bGEgdHhlcnRhdHUiLAorICAgICJMYXlvdXQiOiAiRGlzZWludWEiLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIlV6dGF6dSBodXRzaWsgZXJ0emlrIGV6IHNvcnR6ZWtvIiwKKyAgICAiTGVmdCI6ICJFemtlcnJldGFyYSIsCisgICAgIk1pZGRsZSI6ICJFcmRpYW4iLAorICAgICJOb3Qgc2V0IjogIkV6IGdhaXR1YSIsCisgICAgIk51bWJlciBvZiBjb2x1bW5zIjogIlp1dGFiZS1rb3B1cnVhIiwKKyAgICAiTnVtYmVyIG9mIHJvd3MiOiAiTGVycm8ta29wdXJ1YSIsCisgICAgIk9LIjogIkFkb3MiLAorICAgICJQZXJjZW50IjogIlBvcnR6ZW50YWlhIiwKKyAgICAiUGl4ZWxzIjogIlBpeGVsYWsiLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIlRhdWxhIGhvbmVuIGtva2FwZW5hIiwKKyAgICAiUmlnaHQiOiAiRXNrdWluZXRhcmEiLAorICAgICJSb3dzOiI6ICJMZXJyb2FrOiIsCisgICAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAiR2VsYXhrYSBhdXpva2lkZWVuIGFydGVrbyB0YXJ0ZWEiLAorICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIkdlbGF4a2FyZW4gZWR1a2lhIGV0YSBlcnR6YXJlbiBhcnRla28gdGFydGVhIiwKKyAgICAiU3BhY2luZyI6ICJUYXJ0ZWEiLAorICAgICJUZXh0dG9wIjogIklydWRpYXJlbiBnb2lhbGRlYW4iLAorICAgICJUb3AiOiAiR29pYW4iLAorICAgICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiVGF1bGFyZW4gemFiYWxlcmEiLAorICAgICJXaWR0aCB1bml0IjogIlphYmFsZXJhLXVuaXRhdGVhIiwKKyAgICAiV2lkdGg6IjogIlphYmFsZXJhOiIsCisgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiWnV0YWJlLWtvcHVydWEgaWRhdHppIGJlaGFyIGR1enUiLAorICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIkxlcnJvLWtvcHVydWEgaWRhdHppIGJlaGFyIGR1enUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9mYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9mYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2U4OGM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2ZhLmpzCkBAIC0wLDAgKzEsNDggQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJzYm90dG9tIjogItiv2YLbjNmC2Kcg2b7Yp9uM24zZhiIsCisgICAgIkFic21pZGRsZSI6ICLYr9mC24zZgtinINmI2LPYtyIsCisgICAgIkFsaWdubWVudDoiOiAi2KrYsdin2LIg2KjZhtiv24wiLAorICAgICJCYXNlbGluZSI6ICLYp9io2KrYr9in24wg2K7YtyIsCisgICAgIkJvcmRlciB0aGlja25lc3M6IjogIti22K7Yp9mF2Kog2YTYqNmHIiwKKyAgICAiQm90dG9tIjogItm+2KfbjNuM2YYiLAorICAgICJDYW5jZWwiOiAi2KfZhti12LHYp9mBIiwKKyAgICAiQ2VsbCBwYWRkaW5nOiI6ICLZvtixINqp2YbZhtiv2Ycg2LPZhNmI2YQiLAorICAgICJDZWxsIHNwYWNpbmc6IjogItmB2KfYtdmE2Ycg2LPZhNmI2YQg2YfYpyIsCisgICAgIkNvbHM6IjogItiz2KrZiNmGINmH2KciLAorICAgICJFbSI6ICJFbSIsCisgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAi2LPYqtmI2YYg2YfYp9uMINi32YjZhCDYq9in2KjYqiIsCisgICAgIkluc2VydCBUYWJsZSI6ICLYp9mB2LLZiNiv2YYg2KzYr9mI2YQiLAorICAgICJMYXlvdXQiOiAi2YTYp9uM2YciLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogItio2LHYp9uMINio2K/ZiNmGINmE2KjZhyDYrtin2YTbjCDYsdmH2Kcg2qnZhiIsCisgICAgIkxlZnQiOiAi2obZviIsCisgICAgIk1pZGRsZSI6ICLZiNiz2LciLAorICAgICJOb3Qgc2V0IjogItiq2YbYuNuM2YUg2YbYtNiv2YciLAorICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICLYqti52K/Yp9ivINiz2KrZiNmGINmH2KciLAorICAgICJOdW1iZXIgb2Ygcm93cyI6ICLYqti52K/Yp9ivINix2K/bjNmBINmH2KciLAorICAgICJPSyI6ICLYqNmE2YciLAorICAgICJQZXJjZW50IjogItiv2LHYtdivIiwKKyAgICAiUGl4ZWxzIjogItm+24zaqdiz2YQg2YfYpyIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAi2YXZiNmC2LnbjNiqINuM2KfYqNuMINin24zZhiDYrNiv2YjZhCIsCisgICAgIlJpZ2h0IjogItix2KfYs9iqIiwKKyAgICAiUm93czoiOiAi2LHYr9uM2YEg2YfYpyIsCisgICAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAi2YHYp9i12YTZhyDYqNuM2YYg2LPZhNmI2YQg2YfYp9uMINmH2YXYrNmI2KfYsSIsCisgICAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAi2YHYp9i12YTZhyDYqNuM2YYg2YXYrdiq2YjYpyDZiCDZhNio2Ycg2K/YsSDYs9mE2YjZhCIsCisgICAgIlNwYWNpbmciOiAi2YHYp9i12YTZhyDar9iw2KfYsduMIiwKKyAgICAiVGV4dHRvcCI6ICLYqNin2YTYp9uMINmF2KrZhiIsCisgICAgIlRvcCI6ICLYqNin2YTYpyIsCisgICAgIldpZHRoIG9mIHRoZSB0YWJsZSI6ICLYt9mI2YQg2KzYr9mI2YQiLAorICAgICJXaWR0aCB1bml0IjogItmI2KfYrdivINi32YjZhCIsCisgICAgIldpZHRoOiI6ICLYt9mI2YQiLAorICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiBjb2x1bW5zIjogItio2KfbjNivINiq2LnYr9in2K8g2LPYqtmI2YYg2YfYpyDYsdinINmI2KfYsdivINqp2YbbjNivIiwKKyAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICLYqNin24zYryDYqti52K/Yp9ivINix2K/bjNmBINmH2Kcg2LHYpyDZiNin2LHYryDaqdmG24zYryIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2ZpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2ZpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNjlmYzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvZmkuanMKQEAgLTAsMCArMSwyOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYXNlbGluZSI6ICJUYWthcmFqYSIsCisgICAgIkJvcmRlciI6ICJSZXVuYSIsCisgICAgIkJvdHRvbSI6ICJBbGxlIiwKKyAgICAiQ2FuY2VsIjogIlBlcnV1dGEiLAorICAgICJDYXB0aW9uIjogIk90c2lra28iLAorICAgICJJbnNlcnQgVGFibGUiOiAiTGlzw6TDpCB0YXVsdWtrbyIsCisgICAgIkxheW91dCI6ICJTb21taXR0ZWx1IiwKKyAgICAiTGVmdCI6ICJWYXNlbiIsCisgICAgIk1pZGRsZSI6ICJLZXNrZWxsZSIsCisgICAgIk9LIjogIkh5dsOka3N5IiwKKyAgICAiUGVyY2VudCI6ICJwcm9zZW50dGlhIiwKKyAgICAiUGl4ZWxzIjogInBpa3NlbGnDpCIsCisgICAgIlJpZ2h0IjogIk9pa2VhIiwKKyAgICAiU3BhY2luZyI6ICJQYWxzdGF0aWxhIiwKKyAgICAiVG9wIjogIllsw7ZzIiwKKyAgICAiV2lkdGg6IjogIkxldmV5cyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNWY5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvZnIuanMKQEAgLTAsMCArMSw1MCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAiQWJzYm90dG9tIiwKKyAgICAiQWJzbWlkZGxlIjogIkFic21pZGRsZSIsCisgICAgIkFsaWdubWVudDoiOiAiQWxpZ25lbWVudCIsCisgICAgIkJhc2VsaW5lIjogIkJhc2VsaW5lIiwKKyAgICAiQm9yZGVyIjogIkJvcmR1cmUiLAorICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJFcGFpc3NldXIgYm9yZHVyZSIsCisgICAgIkJvdHRvbSI6ICJCYXMiLAorICAgICJDYW5jZWwiOiAiQW5udWxlciIsCisgICAgIkNhcHRpb24iOiAiw4l0aXF1ZXR0ZSIsCisgICAgIkNlbGwgcGFkZGluZzoiOiAiTWFyZ2UgaW50ZXJuZSIsCisgICAgIkNlbGwgc3BhY2luZzoiOiAiRXNwYWNlbWVudCIsCisgICAgIkNvbHM6IjogIkNvbG9ubmVzIiwKKyAgICAiRW0iOiAiRW0iLAorICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIkNvbG9ubmVzIMOgIHRhaWxsZSBmaXhlIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIkluc8OpcmVyIHVuIHRhYmxlYXUiLAorICAgICJMYXlvdXQiOiAiTGF5b3V0IiwKKyAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJMYWlzc2VyIHZpZGUgcG91ciBwYXMgZGUgYm9yZHVyZSIsCisgICAgIkxlZnQiOiAiR2F1Y2hlIiwKKyAgICAiTWlkZGxlIjogIk1pbGlldSIsCisgICAgIk5vdCBzZXQiOiAiSW5kw6lmaW5pIiwKKyAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiTm9tYnJlIGRlIGNvbG9ubmVzIiwKKyAgICAiTnVtYmVyIG9mIHJvd3MiOiAiTm9tYnJlIGRlIGxpZ25lcyIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUGVyY2VudCI6ICJQb3VyY2VudCIsCisgICAgIlBpeGVscyI6ICJQaXhlbHMiLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIlBvc2l0aW9uIGR1IHRhYmxlYXUiLAorICAgICJSaWdodCI6ICJEcm9pdGUiLAorICAgICJSb3dzOiI6ICJMaWduZXMiLAorICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIkVzcGFjZSBlbnRyZSBsZXMgY2VsbHVsZXMgYWRqYWNlbnRlcyIsCisgICAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAiRXNwYWNlIGVudHJlIGxlIGNvbnRlbnUgZXQgbGEgYm9yZHVyZSBkJ3VuZSBjZWxsdWxlIiwKKyAgICAiU3BhY2luZyI6ICJFc3BhY2VtZW50IiwKKyAgICAiVGV4dHRvcCI6ICJUZXh0dG9wIiwKKyAgICAiVG9wIjogIkhhdXQiLAorICAgICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiTGFyZ2V1ciBkdSB0YWJsZWF1IiwKKyAgICAiV2lkdGggdW5pdCI6ICJVbml0w6lzIGRlIGxhcmdldXIiLAorICAgICJXaWR0aDoiOiAiTGFyZ2V1ciIsCisgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiVm91cyBkZXZleiBlbnRyZXIgbGUgbm9tYnJlIGRlIGNvbG9ubmVzIiwKKyAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICJWb3VzIGRldmV6IGVudHJlciBsZSBub21icmUgZGUgbGlnbmVzIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvaGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvaGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyNDQwYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9oZS5qcwpAQCAtMCwwICsxLDI4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImhlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkJhc2VsaW5lIjogIten15Ug15HXodeZ16EiLAorICAgICJCb3JkZXIiOiAi15LXkdeV15wiLAorICAgICJCb3R0b20iOiAi16rXl9eq15XXnyIsCisgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKKyAgICAiQ2FwdGlvbiI6ICLXm9eV16rXqNeqIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIteU15vXoNehINeY15HXnNeUIiwKKyAgICAiTGF5b3V0IjogItek16jXmdeh15QiLAorICAgICJMZWZ0IjogItep157XkNecIiwKKyAgICAiTWlkZGxlIjogIteQ157XpteiIiwKKyAgICAiT0siOiAi15DXmdep15XXqCIsCisgICAgIlBlcmNlbnQiOiAi15DXl9eV15YiLAorICAgICJQaXhlbHMiOiAi16TXmden16HXnNeZ150iLAorICAgICJSaWdodCI6ICLXmdee15nXnyIsCisgICAgIlNwYWNpbmciOiAi16jXmdeV15XXlyIsCisgICAgIlRvcCI6ICLXotec15nXldefIiwKKyAgICAiV2lkdGg6IjogIteo15XXl9eRIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvaHUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJkY2U5MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9odS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImh1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJNw6lnc2VtIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIlTDoWJsw6F6YXQgYmVzesO6csOhc2EiLAorICAgICJPSyI6ICJSZW5kYmVuIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvaXQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvaXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiYmI4YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9pdC5qcwpAQCAtMCwwICsxLDI4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIml0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkJhc2VsaW5lIjogIkFsbGluZWFtZW50byIsCisgICAgIkJvcmRlciI6ICJCb3JkbyIsCisgICAgIkJvdHRvbSI6ICJCYXNzbyIsCisgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iLAorICAgICJDYXB0aW9uIjogIlRpdG9sbyIsCisgICAgIkluc2VydCBUYWJsZSI6ICJJbnNlcmlzY2kgdGFiZWxsYSIsCisgICAgIkxheW91dCI6ICJMYXlvdXQiLAorICAgICJMZWZ0IjogIlNpbmlzdHJhIiwKKyAgICAiTWlkZGxlIjogIkNlbnRyYWxlIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQZXJjZW50IjogInBlcmNlbnRvIiwKKyAgICAiUGl4ZWxzIjogInBpeGVscyIsCisgICAgIlJpZ2h0IjogIkRlc3RyYSIsCisgICAgIlNwYWNpbmciOiAiU3BhemlhdHVyYSIsCisgICAgIlRvcCI6ICJBbHRvIiwKKyAgICAiV2lkdGg6IjogIkxhcmdoZXp6YSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhOGIyZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvamEuanMKQEAgLTAsMCArMSw1MCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAi5LiLKOe1tuWvvueahCkiLAorICAgICJBYnNtaWRkbGUiOiAi5Lit5aSuKOe1tuWvvueahCkiLAorICAgICJBbGlnbm1lbnQ6IjogIuihjOaPg+OBiDoiLAorICAgICJCYXNlbGluZSI6ICLjg5njg7zjgrnjg6njgqTjg7MiLAorICAgICJCb3JkZXIiOiAi44Oc44O844OA44O8IiwKKyAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAi5aKD55WM57ea44Gu5bmFOiIsCisgICAgIkJvdHRvbSI6ICLkuIsiLAorICAgICJDYW5jZWwiOiAi5Lit5q2iIiwKKyAgICAiQ2FwdGlvbiI6ICLjgq3jg6Pjg5fjgrfjg6fjg7MiLAorICAgICJDZWxsIHBhZGRpbmc6IjogIuOCu+ODq+S9meeZvToiLAorICAgICJDZWxsIHNwYWNpbmc6IjogIuOCu+ODq+mWk+malDoiLAorICAgICJDb2xzOiI6ICLliJc6IiwKKyAgICAiRW0iOiAi55u45a++5YCkKGVtKSIsCisgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAi5YiX44Gu5bmF44KS5Zu65a6aIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIuODhuODvOODluODq+OBruaMv+WFpSIsCisgICAgIkxheW91dCI6ICLjg6zjgqTjgqLjgqbjg4giLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIuWig+eVjOe3muOBjOOBquOBhOWgtOWQiOOBr+epuuOBruOBvuOBvuOBq+OBmeOCiyIsCisgICAgIkxlZnQiOiAi5bemIiwKKyAgICAiTWlkZGxlIjogIuS4reWkriIsCisgICAgIk5vdCBzZXQiOiAi44Gq44GXIiwKKyAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAi5YiX5pWwIiwKKyAgICAiTnVtYmVyIG9mIHJvd3MiOiAi6KGM5pWwIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQZXJjZW50IjogIuODkeODvOOCu+ODs+ODiCglKSIsCisgICAgIlBpeGVscyI6ICLjg5Tjgq/jgrvjg6socHgpIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICLjgZPjga7jg4bjg7zjg5bjg6vjga7phY3nva4iLAorICAgICJSaWdodCI6ICLlj7MiLAorICAgICJSb3dzOiI6ICLooYzmlbA6IiwKKyAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICLpmqPmjqXjgZnjgovjgrvjg6vplpPjga7ot53pm6IiLAorICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIuOCu+ODq+WGheOBq+OBiuOBkeOCi+WGheWuueOBqOWig+eVjOe3muOBqOOBrui3nemboiIsCisgICAgIlNwYWNpbmciOiAi6ZaT6ZqUIiwKKyAgICAiVGV4dHRvcCI6ICLjg4bjgq3jgrnjg4jkuIrpg6giLAorICAgICJUb3AiOiAi5LiKIiwKKyAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIuODhuODvOODluODq+OBruW5hSIsCisgICAgIldpZHRoIHVuaXQiOiAi5bmF44Gu5Y2Y5L2NIiwKKyAgICAiV2lkdGg6IjogIuW5hToiLAorICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiBjb2x1bW5zIjogIuWIl+aVsOOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhCIsCisgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAi6KGM5pWw44KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GEIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNGIzZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDY2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgIkFic2JvdHRvbSI6ICIiLAorICAgICJBYnNtaWRkbGUiOiAiIiwKKyAgICAiQWxpZ25tZW50OiI6ICIiLAorICAgICJCYXNlbGluZSI6ICIiLAorICAgICJCb3JkZXIiOiAiIiwKKyAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiIiwKKyAgICAiQm90dG9tIjogIiIsCisgICAgIkNhbmNlbCI6ICIiLAorICAgICJDYXB0aW9uIjogIiIsCisgICAgIkNhcHRpb24gZm9yIHRoZSB0YWJsZSI6ICIiLAorICAgICJDZWxsIHBhZGRpbmc6IjogIiIsCisgICAgIkNlbGwgc3BhY2luZzoiOiAiIiwKKyAgICAiQ29sbGFwc2UgYm9yZGVyczoiOiAiIiwKKyAgICAiQ29sczoiOiAiIiwKKyAgICAiRW0iOiAiIiwKKyAgICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICIiLAorICAgICJJbnNlcnQgVGFibGUiOiAiIiwKKyAgICAiTGF5b3UiOiAiIiwKKyAgICAiTGF5b3V0IjogIiIsCisgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiIiwKKyAgICAiTGVmdCI6ICIiLAorICAgICJNaWRkbGUiOiAiIiwKKyAgICAiTm90IHNldCI6ICIiLAorICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICIiLAorICAgICJOdW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICJPSyI6ICIiLAorICAgICJQZXJjZW50IjogIiIsCisgICAgIlBpeGVscyI6ICIiLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIiIsCisgICAgIlJpZ2h0IjogIiIsCisgICAgIlJvd3M6IjogIiIsCisgICAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAiIiwKKyAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICIiLAorICAgICJTcGFjaW5nIjogIiIsCisgICAgIlN0eWxlIG9mIHRoZSBib3JkZXIiOiAiIiwKKyAgICAiVGV4dHRvcCI6ICIiLAorICAgICJUb3AiOiAiIiwKKyAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIiIsCisgICAgIldpZHRoIHVuaXQiOiAiIiwKKyAgICAiV2lkdGg6IjogIiIsCisgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiIiwKKyAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICIiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2x0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MDM0OGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvbHQuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIsSudGVycHRpIGxlbnRlbMSZIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9sdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9sdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjM5ZTgzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL2x2LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHYiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0Y2VsdCIsCisgICAgIkluc2VydCBUYWJsZSI6ICJJZXZpZXRvdCB0YWJ1bHUiLAorICAgICJPSyI6ICJMYWJpIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvbmIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E5MTg4NAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDMwIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsaWdubWVudDoiOiAiSnVzdGVyaW5nOiIsCisgICAgIkJhc2VsaW5lIjogIkdydW5ubGluamUiLAorICAgICJCb3JkZXIiOiAiUmFtbWUiLAorICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJSYW1tZXR5a2tlbHNlOiIsCisgICAgIkJvdHRvbSI6ICJCdW5uIiwKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIkNhcHRpb24iOiAiT3ZlcnNrcmlmdCIsCisgICAgIkluc2VydCBUYWJsZSI6ICJTZXR0IGlubiB0YWJlbGwiLAorICAgICJMYXlvdXQiOiAiT3Bwc2V0dCIsCisgICAgIkxlZnQiOiAiVmVuc3RyZSIsCisgICAgIk1pZGRsZSI6ICJNaWR0ZW4iLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBlcmNlbnQiOiAicHJvc2VudCIsCisgICAgIlBpeGVscyI6ICJQaWtzZWwiLAorICAgICJSaWdodCI6ICJIw7h5cmUiLAorICAgICJTcGFjaW5nIjogIkx1ZnQiLAorICAgICJUb3AiOiAiT3ZlcmthbnQiLAorICAgICJXaWR0aDoiOiAiQnJlZGRlOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMTNkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvbmwuanMKQEAgLTAsMCArMSwzMiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJubCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGlnbm1lbnQ6IjogIlVpdHZ1bGxpbmc6IiwKKyAgICAiQmFzZWxpbmUiOiAiQmFzaXMiLAorICAgICJCb3JkZXIiOiAiS2FkZXIiLAorICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJSYW5kIGRpa3RlOiIsCisgICAgIkJvdHRvbSI6ICJPbmRlciIsCisgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iLAorICAgICJDYXB0aW9uIjogIk9wbWVya2luZyIsCisgICAgIkluc2VydCBUYWJsZSI6ICJUYWJlbCBpbnZvZWdlbiIsCisgICAgIkxheW91dCI6ICJXZWVyZ2F2ZSIsCisgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiTGVlZyB2b29yIGdlZW4gcmFuZCIsCisgICAgIkxlZnQiOiAiTGlua3MiLAorICAgICJNaWRkbGUiOiAiTWlkZGVuIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQZXJjZW50IjogInByb2NlbnQiLAorICAgICJQaXhlbHMiOiAicGl4ZWxzIiwKKyAgICAiUmlnaHQiOiAiUmVjaHRzIiwKKyAgICAiUm93czoiOiAiUmlqZW46IiwKKyAgICAiU3BhY2luZyI6ICJtYXJnZSIsCisgICAgIlRvcCI6ICJCb3ZlbiIsCisgICAgIldpZHRoOiI6ICJCcmVlZHRlOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL3BsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL3BsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZDY5MDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvcGwuanMKQEAgLTAsMCArMSw0OCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAiQWJzLiBkw7PFgiIsCisgICAgIkFic21pZGRsZSI6ICJBYnMuIMWbcm9kZWsiLAorICAgICJBbGlnbm1lbnQ6IjogIld5csOzd25hbmllOiIsCisgICAgIkJhc2VsaW5lIjogIkxpbmlhIGJhem93YSIsCisgICAgIkJvcmRlciI6ICJSYW1rYSIsCisgICAgIkJvcmRlciB0aGlja25lc3M6IjogIkdydWJvxZvEhyBvYnJhbW93YW5pYToiLAorICAgICJCb3R0b20iOiAiRMOzxYIiLAorICAgICJDYW5jZWwiOiAiQW51bHVqIiwKKyAgICAiQ2FwdGlvbiI6ICJQb2RwaXMiLAorICAgICJDZWxsIHBhZGRpbmc6IjogIldjacSZY2llIGtvbcOzcmVrOiIsCisgICAgIkNlbGwgc3BhY2luZzoiOiAiT2RzdMSZcCBrb23Ds3JlazoiLAorICAgICJDb2xzOiI6ICJLb2x1bW46IiwKKyAgICAiRW0iOiAiRW0iLAorICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIktvbHVtbnkgbyBzdGHFgmVqIHN6ZXJva2/Fm2NpIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIldzdGF3IHRhYmVsxJkiLAorICAgICJMYXlvdXQiOiAiTGF5b3V0IiwKKyAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJCZXogcmFtZWsgLSB6b3N0YXcgcHVzdGUiLAorICAgICJMZWZ0IjogIkRvIGxld2VqIiwKKyAgICAiTWlkZGxlIjogIsWacm9kZWsiLAorICAgICJOb3Qgc2V0IjogIk5pZSB1c3Rhd2lvbmUiLAorICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICJMaWN6YmEga29sdW1uIiwKKyAgICAiTnVtYmVyIG9mIHJvd3MiOiAiTGljemJhIHdpZXJzenkiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBlcmNlbnQiOiAiUHJvY2VudCIsCisgICAgIlBpeGVscyI6ICJQaWtzZWxpIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICJQb3p5Y2pvbm93YW5pZSB0YWJlbGkiLAorICAgICJSaWdodCI6ICJEbyBwcmF3ZWoiLAorICAgICJSb3dzOiI6ICJXaWVyc3p5OiIsCisgICAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAiUHJ6ZXN0cnplxYQgcG9tacSZZHp5IGtvbcOzcmthbWkiLAorICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIlByemVzdHJ6ZcWEIG1pxJlkenkga3Jhd8SZZHppxIUgYSB6YXdhcnRvxZtjacSFIGtvbcOzcmtpIiwKKyAgICAiU3BhY2luZyI6ICJPZHN0xJlwIiwKKyAgICAiVGV4dHRvcCI6ICJHw7NyYSB0ZWtzdHUiLAorICAgICJUb3AiOiAiR8OzcmEiLAorICAgICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiU3plcm9rb8WbxIcgdGFiZWxpIiwKKyAgICAiV2lkdGggdW5pdCI6ICJKZWRub3N0a2EiLAorICAgICJXaWR0aDoiOiAiU3plcm9rb8WbxIc6IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvcHRfYnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I1ZmU0NAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9wdF9ici5qcwpAQCAtMCwwICsxLDQ5IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICJJbmZlcmlvciBhYnNvbHV0byIsCisgICAgIkFic21pZGRsZSI6ICJNZWlvIGFic29sdXRvIiwKKyAgICAiQWxpZ25tZW50OiI6ICJBbGluaGFtZW50bzoiLAorICAgICJCYXNlbGluZSI6ICJMaW5oYSBkZSBiYXNlIiwKKyAgICAiQm9yZGVyIjogIkJvcmRhIiwKKyAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiRXNwZXNzdXJhIGRhIEJvcmRhIiwKKyAgICAiQm90dG9tIjogIkJhc2UiLAorICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICJDYXB0aW9uIjogIkNhcHRhw6fDo28iLAorICAgICJDZWxsIHBhZGRpbmc6IjogIkVzcGHDp2FtZW50byBpbnRlcm5vIGRhIGPDqWx1bGE6IiwKKyAgICAiQ2VsbCBzcGFjaW5nOiI6ICJFc3Bhw6dhbWVudG8gZGEgY8OpbHVsYToiLAorICAgICJDb2xsYXBzZSBib3JkZXJzOiI6ICJCb3JkYXMgZmVjaGFkYXM6IiwKKyAgICAiQ29sczoiOiAiQ29sdW5hczoiLAorICAgICJFbSI6ICJFbSIsCisgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiQ29sdW5hcyBjb20gbGFyZ3VyYSBmaXhhIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIkluc2VyaXIgVGFiZWxhIiwKKyAgICAiTGF5b3V0IjogIkVzcXVlbWEiLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIkRlaXhlIGVtIGJyYW5jbyBwYXJhIHNlbSBib3JkYXMiLAorICAgICJMZWZ0IjogIkVzcXVlcmRhIiwKKyAgICAiTWlkZGxlIjogIk1laW8iLAorICAgICJOb3Qgc2V0IjogIk7Do28gZGVmaW5pZG8iLAorICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICJOw7ptZXJvIGRlIGNvbHVuYXMiLAorICAgICJOdW1iZXIgb2Ygcm93cyI6ICJOw7ptZXJvIGRlIGxpbmhhcyIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUGVyY2VudCI6ICJQb3JjZW50YWdlbSIsCisgICAgIlBpeGVscyI6ICJQaXhlbHMiLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIlBvc2ljaW9uYW1lbnRvIGRlc3RhIHRhYmVsYSIsCisgICAgIlJpZ2h0IjogIkRpcmVpdGEiLAorICAgICJSb3dzOiI6ICJMaW5oYXM6IiwKKyAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICJFc3Bhw6dvIGVudHJlIGPDqWx1bGFzIGFkamFjZW50ZXMiLAorICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIkVzcGHDp28gZW50cmUgY29udGXDumRvIGUgYm9yZGEgbmEgY8OpbHVsYSIsCisgICAgIlNwYWNpbmciOiAiRXNwYcOnYW1lbnRvIiwKKyAgICAiVGV4dHRvcCI6ICJUZXh0byBubyB0b3BvIiwKKyAgICAiVG9wIjogIlRvcG8iLAorICAgICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiTGFyZ3VyYSBkYSB0YWJlbGEiLAorICAgICJXaWR0aCB1bml0IjogIlVuaWRhZGUgZGUgbGFyZ3VyYSIsCisgICAgIldpZHRoOiI6ICJMYXJndXJhOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL3JvLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL3JvLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYWNjZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvcm8uanMKQEAgLTAsMCArMSwyOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJybyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYXNlbGluZSI6ICJCYXNlbGluZSIsCisgICAgIkJvcmRlciI6ICJDaGVuYXIiLAorICAgICJCb3R0b20iOiAiSm9zIiwKKyAgICAiQ2FuY2VsIjogIlJlbnVuxaPEgyIsCisgICAgIkNhcHRpb24iOiAiVGl0bHUgZGUgdGFiZWwiLAorICAgICJJbnNlcnQgVGFibGUiOiAiSW5zZXJlYXrEgyB1biB0YWJlbCIsCisgICAgIkxheW91dCI6ICJBcmFuamFtZW50IiwKKyAgICAiTGVmdCI6ICJTdMOibmdhIiwKKyAgICAiTWlkZGxlIjogIk1pamxvYyIsCisgICAgIk9LIjogIkFjY2VwdMSDIiwKKyAgICAiUGVyY2VudCI6ICJwcm9jZW50ZSIsCisgICAgIlBpeGVscyI6ICJwaXhlbGkiLAorICAgICJSaWdodCI6ICJEcmVhcHRhIiwKKyAgICAiU3BhY2luZyI6ICLDjm50cmUgY2VsdWxlIiwKKyAgICAiVG9wIjogIlN1cyIsCisgICAgIldpZHRoOiI6ICJMxIPFo2ltZSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL3J1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNmQ0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvcnUuanMKQEAgLTAsMCArMSw1MCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAi0J/QviDQvdC40LbQvdC10Lkg0LPRgNCw0L3QuNGG0LUiLAorICAgICJBYnNtaWRkbGUiOiAi0J/QviDRgdC10YDQtdC00LjQvdC1INGC0LXQutGB0YLQsCIsCisgICAgIkFsaWdubWVudDoiOiAi0JLRi9GA0LDQstC90LjQstCw0L3QuNC1IiwKKyAgICAiQmFzZWxpbmUiOiAi0J/QviDQvdC40LbQvdC10Lkg0LPRgNCw0L3QuNGG0LUg0YLQtdC60YHRgtCwIiwKKyAgICAiQm9yZGVyIjogItCg0LDQvNC60LAiLAorICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICLQotC+0LvRidC40L3QsCDRgNCw0LzQutC4IiwKKyAgICAiQm90dG9tIjogItCf0L4g0L3QuNC20L3QtdC80YMg0LrRgNCw0Y4iLAorICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIiwKKyAgICAiQ2FwdGlvbiI6ICLQl9Cw0LPQvtC70L7QstC+0LoiLAorICAgICJDZWxsIHBhZGRpbmc6IjogItCf0L7Qu9GPINCyINGP0YfQtdC50LrQsNGFIiwKKyAgICAiQ2VsbCBzcGFjaW5nOiI6ICLQoNCw0YHRgdGC0L7Rj9C90LjQtSDQvNC10LbQtNGDINGP0YfQtdC50LrQsNC80LgiLAorICAgICJDb2xzOiI6ICLQodGC0L7Qu9Cx0YbRiyIsCisgICAgIkVtIjogImVtIiwKKyAgICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICLQodGC0L7Qu9Cx0YbRiyDRhNC40LrRgdC40YDQvtCy0LDQvdC90L7QuSDRiNC40YDQuNC90YsiLAorICAgICJJbnNlcnQgVGFibGUiOiAi0JLRgdGC0LDQstC60LAg0YLQsNCx0LvQuNGG0YsiLAorICAgICJMYXlvdXQiOiAi0KDQsNGB0L/QvtC70L7QttC10L3QuNC1IiwKKyAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICLQntGB0YLQsNCy0YzRgtC1INC/0YPRgdGC0YvQvCwg0YfRgtC+0LHRiyDRg9Cx0YDQsNGC0Ywg0YDQsNC80LrRgyIsCisgICAgIkxlZnQiOiAi0J/QviDQu9C10LLQvtC80YMg0LrRgNCw0Y4iLAorICAgICJNaWRkbGUiOiAi0J/QvtGB0YDQtdC00LjQvdC1IiwKKyAgICAiTm90IHNldCI6ICLQndC1INGD0YHRgtCw0L3QvtCy0LvQtdC90L4iLAorICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICLQmtC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0L7Qu9Cx0YbQvtCyIiwKKyAgICAiTnVtYmVyIG9mIHJvd3MiOiAi0JrQvtC70LjRh9C10YHRgtCy0L4g0YHRgtGA0L7QuiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUGVyY2VudCI6ICLQv9GA0L7RhtC10L3RgtGLIiwKKyAgICAiUGl4ZWxzIjogItC/0LjQutGB0LXQu9GLIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICLQoNCw0YHQv9C+0LvQvtC20LXQvdC40LUg0YLQsNCx0LvQuNGG0YsiLAorICAgICJSaWdodCI6ICLQn9C+INC/0YDQsNCy0L7QvNGDINC60YDQsNGOIiwKKyAgICAiUm93czoiOiAi0KHRgtGA0L7QutC4IiwKKyAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICLQoNCw0YHRgdGC0L7Rj9C90LjQtSDQvNC10LbQtNGDINGB0L7RgdC10LTQvdC40LzQuCDRj9GH0LXQudC60LDQvNC4IiwKKyAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICLQoNCw0YHRgdGC0L7Rj9C90LjQtSDQvNC10LbQtNGDINCz0YDQsNC90LjRhtC10Lkg0Y/Rh9C10LnQutC4INC4INGC0LXQutGB0YLQvtC8IiwKKyAgICAiU3BhY2luZyI6ICLQntGC0YHRgtGD0L/RiyIsCisgICAgIlRleHR0b3AiOiAi0J/QviDQstC10YDRhdC90LXQuSDQs9GA0LDQvdC40YbQtSDRgtC10LrRgdGC0LAiLAorICAgICJUb3AiOiAi0J/QviDQstC10YDRhdC90LXQvNGDINC60YDQsNGOIiwKKyAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogItCo0LjRgNC40L3QsCDRgtCw0LHQu9C40YbRiyIsCisgICAgIldpZHRoIHVuaXQiOiAi0JXQtNC40L3QuNGG0Ysg0LjQt9C80LXRgNC10L3QuNGPIiwKKyAgICAiV2lkdGg6IjogItCo0LjRgNC40L3QsCIsCisgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAi0JLRiyDQtNC+0LvQttC90Ysg0LLQstC10YHRgtC4INC60L7Qu9C40YfQtdGB0YLQstC+INGB0YLQvtC70LHRhtC+0LIiLAorICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogItCS0Ysg0LTQvtC70LbQvdGLINCy0LLQtdGB0YLQuCDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0YDQvtC6IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvc2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvc2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1NGJmYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9zaC5qcwpAQCAtMCwwICsxLDQ2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICJBcHNvbHV0bm8gZG5vIiwKKyAgICAiQWJzbWlkZGxlIjogIkFwc29sdXRuYSBzcmVkaW5hIiwKKyAgICAiQWxpZ25tZW50OiI6ICJSYXZuYW5qZSIsCisgICAgIkJhc2VsaW5lIjogIkRvbmphIGxpbmlqYSIsCisgICAgIkJvcmRlciB0aGlja25lc3M6IjogIkRlYmxqaW5hIG9rdmlyYSIsCisgICAgIkJvdHRvbSI6ICJEbm8iLAorICAgICJDYW5jZWwiOiAiUG9uacWhdGkiLAorICAgICJDZWxsIHBhZGRpbmc6IjogIlVudXRyYcWhbmphIG9kc3RvamFuamEgdSDEh2VsaWppIiwKKyAgICAiQ2VsbCBzcGFjaW5nOiI6ICJSYXN0b2phbmplIMSHZWxpamEiLAorICAgICJDb2xzOiI6ICJLb2xvbmUiLAorICAgICJFbSI6ICJFbSIsCisgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiRmlrc2lyYW5hIMWhaXJpbmEga29sb25hIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIlViYWNpIHRhYmVsdSIsCisgICAgIkxheW91dCI6ICJQcmVsb20iLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIk9zdGF2aSBwcmF6bm8ga2FkIG5lbWEgb2t2aXJhIiwKKyAgICAiTGVmdCI6ICJMZXZvIiwKKyAgICAiTWlkZGxlIjogIlNyZWRpbmEiLAorICAgICJOb3Qgc2V0IjogIk5pamUgcG9zdGF2bGplbm8iLAorICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICJCcm9qIGtvbG9uYSIsCisgICAgIk51bWJlciBvZiByb3dzIjogIkJyb2ogcmVkb3ZhIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQZXJjZW50IjogIlByb2NlbmF0IiwKKyAgICAiUGl4ZWxzIjogIlBpa3NlbGkiLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIlBvc3RhdmxqYW5qZSBvdmUgdGFiZWxlIiwKKyAgICAiUmlnaHQiOiAiRGVzbm8iLAorICAgICJSb3dzOiI6ICJSZWRvdmkiLAorICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIlJhc3RvamFuamUgbmFzcHJhbW5paCDEh2VsaWphIiwKKyAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICJSYXN0b2phbmplIGl6bWXEkXUgc2FkcsW+YWphIGkgb2t2aXJhIMSHZWxpamUiLAorICAgICJTcGFjaW5nIjogIlJhem1hayIsCisgICAgIlRleHR0b3AiOiAiVnJoIHRla3N0YSIsCisgICAgIlRvcCI6ICJWcmgiLAorICAgICJXaWR0aCBvZiB0aGUgdGFibGUiOiAixaBpcmluYSB0YWJlbGUiLAorICAgICJXaWR0aCB1bml0IjogIkplZGluaWNhIMWhaXJpbmUiLAorICAgICJXaWR0aDoiOiAixaBpcmluYSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL3NpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL3NpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiODM4OTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvc2kuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUHJla2xpxI1pIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIlZzdGF2aSB0YWJlbG8iLAorICAgICJPSyI6ICJWIHJlZHUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9zci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvbGFuZy9zci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzE3NzhkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL3NyLmpzCkBAIC0wLDAgKzEsNDYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJzYm90dG9tIjogItCQ0L/RgdC+0LvRg9GC0L3QviDQtNC90L4iLAorICAgICJBYnNtaWRkbGUiOiAi0JDQv9GB0L7Qu9GD0YLQvdCwINGB0YDQtdC00LjQvdCwIiwKKyAgICAiQWxpZ25tZW50OiI6ICLQoNCw0LLQvdCw0ZrQtSIsCisgICAgIkJhc2VsaW5lIjogItCU0L7RmtCwINC70LjQvdC40ZjQsCIsCisgICAgIkJvcmRlciB0aGlja25lc3M6IjogItCU0LXQsdGZ0LjQvdCwINC+0LrQstC40YDQsCIsCisgICAgIkJvdHRvbSI6ICLQlNC90L4iLAorICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiLAorICAgICJDZWxsIHBhZGRpbmc6IjogItCj0L3Rg9GC0YDQsNGI0ZrQsCDQvtC00YHRgtC+0ZjQsNGa0LAg0L7QtCDQuNCy0LjRhtCwINGb0LXQu9C40ZjQtSIsCisgICAgIkNlbGwgc3BhY2luZzoiOiAi0KDQsNC30LzQsNC6INC40LfQvNC10ZLRgyDRm9C10LvQuNGY0LAiLAorICAgICJDb2xzOiI6ICLQmtC+0LvQvtC90LUiLAorICAgICJFbSI6ICLQldC8IiwKKyAgICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICLQpNC40LrRgdC40YDQsNC90LAg0YjQuNGA0LjQvdCwINC60L7Qu9C+0L3QtSIsCisgICAgIkluc2VydCBUYWJsZSI6ICLQo9Cx0LDRhtC4INGC0LDQsdC10LvRgyIsCisgICAgIkxheW91dCI6ICLQn9GA0LXQu9C+0LwiLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogItCe0YHRgtCw0LLQuCDQv9GA0LDQt9C90L4g0LrQsNC0INC90LXQvNCwINC+0LrQstC40YDQsCIsCisgICAgIkxlZnQiOiAi0JvQtdCy0L4iLAorICAgICJNaWRkbGUiOiAi0KHRgNC10LTQuNC90LAiLAorICAgICJOb3Qgc2V0IjogItCd0LjRmNC1INC/0L7RgdGC0LDQstGZ0LXQvdC+IiwKKyAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAi0JHRgNC+0Zgg0LrQvtC70L7QvdCwIiwKKyAgICAiTnVtYmVyIG9mIHJvd3MiOiAi0JHRgNC+0Zgg0YDQtdC00L7QstCwIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQZXJjZW50IjogItCf0YDQvtGG0LXQvdCw0YLQsCIsCisgICAgIlBpeGVscyI6ICLQn9C40LrRgdC10LvQsCIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAi0J/QvtGB0YLQsNCy0ZnQsNGa0LUg0L7QstC1INGC0LDQsdC10LvQtSIsCisgICAgIlJpZ2h0IjogItCU0LXRgdC90L4iLAorICAgICJSb3dzOiI6ICLQoNC10LTQvtCy0LgiLAorICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogItCg0LDQt9C80LDQuiDQuNC30LzQtdGS0YMg0L3QsNGB0L/RgNCw0LzQvdC40YUg0ZvQtdC70LjRmNCwIiwKKyAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICLQoNCw0YHRgtC+0ZjQsNGa0LUg0LjQt9C80LXRktGDINGB0LDQtNGA0LbQsNGY0LAg0YMg0ZvQtdC70LjRmNC4INC4INGa0LXQvdC+0LMg0L7QutCy0LjRgNCwIiwKKyAgICAiU3BhY2luZyI6ICLQoNCw0LfQvNCw0LoiLAorICAgICJUZXh0dG9wIjogItCS0YDRhSDRgtC10LrRgdGC0LAiLAorICAgICJUb3AiOiAi0JLRgNGFIiwKKyAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogItCo0LjRgNC40L3QsCDRgtCw0LHQtdC70LUiLAorICAgICJXaWR0aCB1bml0IjogItCI0LXQtNC40L3QuNGG0LAg0YjQuNGA0LjQvdC1IiwKKyAgICAiV2lkdGg6IjogItCo0LjRgNC40L3QsCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL3N2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL3N2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMDcwMjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvc3YuanMKQEAgLTAsMCArMSw0NSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGlnbm1lbnQ6IjogIlBsYWNlcmluZzoiLAorICAgICJCYXNlbGluZSI6ICJCYXNsaW5qZSIsCisgICAgIkJvcmRlciI6ICJLYW50bGluamUiLAorICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJSYW10am9ja2xlazoiLAorICAgICJCb3R0b20iOiAiQm90dGVuIiwKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIkNhcHRpb24iOiAiw5Z2ZXJza3JpZnQiLAorICAgICJDZWxsIHBhZGRpbmc6IjogIkNlbGxpbmRyYWc6IiwKKyAgICAiQ2VsbCBzcGFjaW5nOiI6ICJDZWxsbWFyZ2luYWxlcjoiLAorICAgICJDb2xzOiI6ICJLb2x1bW5lcjoiLAorICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIkZpeGVyYWQgYnJlZGQiLAorICAgICJJbnNlcnQgVGFibGUiOiAiSW5mb2dhIHRhYmVsbCIsCisgICAgIkxheW91dCI6ICJMYXlvdXQiLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIkzDpG1uYSB0b210IGbDtnIgYXR0IHVuZHZpa2EgcmFtIiwKKyAgICAiTGVmdCI6ICJWZW5zdGVyIiwKKyAgICAiTWlkZGxlIjogIk1pdHRlbiIsCisgICAgIk51bWJlciBvZiBjb2x1bW5zIjogIkFudGFsIGtvbHVtbmVyIiwKKyAgICAiTnVtYmVyIG9mIHJvd3MiOiAiQW50YWwgcmFkZXIiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBlcmNlbnQiOiAiUHJvY2VudCIsCisgICAgIlBpeGVscyI6ICJQaXhsYXIiLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIlRhYmVsbHBvc2l0aW9uIiwKKyAgICAiUmlnaHQiOiAiSMO2Z2VyIiwKKyAgICAiUm93czoiOiAiUmFkZXI6IiwKKyAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICJVdHJ5bW1lIG1lbGxhbiBjZWxsZXIiLAorICAgICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIlV0cnltbWUgbWVsbGFuIHJhbSBvY2ggY2VsbGlubmVow6VsbCIsCisgICAgIlNwYWNpbmciOiAiTWVsbGFucnVtIiwKKyAgICAiVG9wIjogIsOWdmVya2FudCIsCisgICAgIldpZHRoIG9mIHRoZSB0YWJsZSI6ICJUYWJlbGxicmVkZCIsCisgICAgIldpZHRoIHVuaXQiOiAiQnJlZGRlbmhldGVyIiwKKyAgICAiV2lkdGg6IjogIkJyZWRkOiIsCisgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAiQW5nZSBhbnRhbCBrb2x1bW5lciIsCisgICAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAiQW5nZSBlbnRhbCByYWRlciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL3RoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL3RoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ODQzNWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvdGguanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0aCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIuC5gOC4nuC4tOC5iOC4oeC4leC4suC4o+C4suC4hyIsCisgICAgIk9LIjogIuC4leC4geC4peC4hyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL3RyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL3RyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MGIxOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvdHIuanMKQEAgLTAsMCArMSw1MCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0ciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAiU2FsdCBhbHRhIiwKKyAgICAiQWJzbWlkZGxlIjogIlNhbHQgb3J0YSIsCisgICAgIkFsaWdubWVudDoiOiAiSGl6YWxhbWE6IiwKKyAgICAiQmFzZWxpbmUiOiAiVGFiYW4gaGl6YXPEsSIsCisgICAgIkJvcmRlciI6ICJLZW5hcmzEsWsiLAorICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJLZW5hcmzEsWsga2FsxLFubMSxxJ/EsToiLAorICAgICJCb3R0b20iOiAiQWx0YSIsCisgICAgIkNhbmNlbCI6ICLEsHB0YWwiLAorICAgICJDYXB0aW9uIjogIkJhxZ9sxLFrIiwKKyAgICAiQ2VsbCBwYWRkaW5nOiI6ICJIw7xjcmUgZG9sZHVybWE6IiwKKyAgICAiQ2VsbCBzcGFjaW5nOiI6ICJIw7xjcmUgYXJhbMSxxJ/EsToiLAorICAgICJDb2xzOiI6ICJTw7x0dW46IiwKKyAgICAiRW0iOiAiRW0iLAorICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIlNhYml0IGJhxZ9sxLEgc8O8dHVuIiwKKyAgICAiSW5zZXJ0IFRhYmxlIjogIlRhYmxvIGVrbGUiLAorICAgICJMYXlvdXQiOiAiRMO8emVuIiwKKyAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJLZW5hcmzEsWsgaXN0ZW1peW9yc2FuxLF6IGJvxZ8gYsSxcmFrxLFuIiwKKyAgICAiTGVmdCI6ICJTb2xhIiwKKyAgICAiTWlkZGxlIjogIk9ydGFsYSIsCisgICAgIk5vdCBzZXQiOiAiQXlhcmxhbm1hbcSxxZ8iLAorICAgICJOdW1iZXIgb2YgY29sdW1ucyI6ICJTw7x0dW4gc2F5xLFzxLEiLAorICAgICJOdW1iZXIgb2Ygcm93cyI6ICJTYXTEsXIgc2F5xLFzxLEiLAorICAgICJPSyI6ICJUYW1hbSIsCisgICAgIlBlcmNlbnQiOiAiWcO8emRlIiwKKyAgICAiUGl4ZWxzIjogIlBpa3NlbCIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiVGFibG8ga29udW1sYW5kxLFybWEiLAorICAgICJSaWdodCI6ICJTYcSfYSIsCisgICAgIlJvd3M6IjogIlNhdMSxcjoiLAorICAgICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIkJpdGnFn2lrIGjDvGNyZSBhcmFsxLHEn8SxIiwKKyAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICLEsMOnIGtlbmFybMSxxJ/EsSB2ZSBow7xjcmUgacOnZXJpxJ9pIGFyYXPEsW5kYWtpIGJvxZ9sdWsiLAorICAgICJTcGFjaW5nIjogIkFyYWzEsWsiLAorICAgICJUZXh0dG9wIjogIk1ldGluLcO8c3R0ZSIsCisgICAgIlRvcCI6ICJZdWthcsSxIiwKKyAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIlRhYmxvIGdlbmnFn2xpxJ9pIiwKKyAgICAiV2lkdGggdW5pdCI6ICJHZW5pxZ9saWsgYmlyaW1pIiwKKyAgICAiV2lkdGg6IjogIkdlbmnFn2xpazoiLAorICAgICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiBjb2x1bW5zIjogIkzDvHRmZW4gc8O8dHVuIHNhecSxc8SxbsSxIGdpcmluIiwKKyAgICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2Ygcm93cyI6ICJMw7x0ZmVuIHNhdMSxciBzYXnEsXPEsW7EsSBnaXJpbiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL3ZuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL3ZuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMjFlMjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvdm4uanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ2biIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiSOG7p3kiLAorICAgICJJbnNlcnQgVGFibGUiOiAiQ2jDqG4gQuG6o25nIiwKKyAgICAiT0siOiAixJDhu5NuZyDDvSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL3poX2NuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9sYW5nL3poX2NuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ODA3N2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL2xhbmcvemhfY24uanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ6aF9jbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJJbnNlcnQgVGFibGUiOiAi5o+S5YWl6KGo5qC8IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL3BsdWdpbk1ldGhvZHMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL0luc2VydFRhYmxlL3BsdWdpbk1ldGhvZHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FmMjRmZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW5zZXJ0VGFibGUvcGx1Z2luTWV0aG9kcy5qcwpAQCAtMCwwICsxLDExOCBAQAorSW5zZXJ0VGFibGUucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbihpbWFnZSkKK3sKKyAgaWYgKCF0aGlzLmRpYWxvZykgdGhpcy5wcmVwYXJlRGlhbG9nKCk7CisKKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworCisgIHZhciB2YWx1ZXMgPSAKKyAgeworICAgICJjYXB0aW9uIiAgICAgICAgICA6ICcnLAorICAgICJyb3dzIiAgICAgICAgICAgICA6ICcyJywKKyAgICAiY29scyIgICAgICAgICAgICAgOiAnNCcsCisgICAgIndpZHRoIiAgICAgICAgICAgIDogJzEwMCcsCisgICAgInVuaXQiICAgICAgICAgICAgIDogJyUnLAorICAgICJmaXhlZCIgICAgICAgICAgICA6ICcnLAorICAgICJhbGlnbiIgICAgICAgICAgICA6ICcnLAorICAgICJib3JkZXIiICAgICAgICAgICA6ICcnLAorICAgICJib3JkZXJfc3R5bGUiICAgICA6ICcnLAorICAgICJib3JkZXJfY29sb3IiICAgICA6ICcnLAorICAgICJib3JkZXJfY29sbGFwc2UiICA6ICdvbicsCisgICAgInNwYWNpbmciICAgICAgICAgIDogJycsCisgICAgInBhZGRpbmciICAgICAgICAgIDogJzUnCisgIH0KKyAgLy8gdXBkYXRlIHRoZSBjb2xvciBvZiB0aGUgcGlja2VyIG1hbnVhbGx5CisgIHRoaXMuYm9yZGVyQ29sb3JQaWNrZXIuc2V0Q29sb3IoJyMwMDAwMDAnKTsKKyAgLy8gbm93IGNhbGxpbmcgdGhlIHNob3cgbWV0aG9kIG9mIHRoZSBYaW5oYS5EaWFsb2cgb2JqZWN0IHRvIHNldCB0aGUgdmFsdWVzIGFuZCBzaG93IHRoZSBhY3R1YWwgZGlhbG9nCisgIHRoaXMuZGlhbG9nLnNob3codmFsdWVzKTsKKyAgdGhpcy5kaWFsb2cub25yZXNpemUoKTsKK307CisKK0luc2VydFRhYmxlLnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworICB2YXIgZG9jID0gZWRpdG9yLl9kb2M7CisgIHZhciBwYXJhbSA9IHRoaXMuZGlhbG9nLmdldFZhbHVlcygpOworICAKKyAgaWYgKCFwYXJhbS5yb3dzIHx8ICFwYXJhbS5jb2xzKQorICB7CisgICAgaWYgKCFwYXJhbS5yb3dzKQorICAgIHsKKyAgICAgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJyb3dzX2FsZXJ0Iikuc3R5bGUuZGlzcGxheSA9ICcnOworICAgIH0KKyAgICBpZiAoIXBhcmFtLmNvbHMpCisgICAgeworICAgICAgdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoImNvbHVtbnNfYWxlcnQiKS5zdHlsZS5kaXNwbGF5ID0gJyc7CisgICAgfQorICAgIHJldHVybjsKKyAgfQorICAvLyBzZWxlY3Rpb24gaXMgb25seSByZXN0b3JlZCBvbiBkaWFsb2cuaGlkZSgpCisgIHRoaXMuZGlhbG9nLmhpZGUoKTsKKyAgLy8gY3JlYXRlIHRoZSB0YWJsZSBlbGVtZW50CisgIHZhciB0YWJsZSA9IGRvYy5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpOworICAvLyBhc3NpZ24gdGhlIGdpdmVuIGFyZ3VtZW50cworICAKKyAgZm9yICggdmFyIGZpZWxkIGluIHBhcmFtICkKKyAgeworICAgIHZhciB2YWx1ZSA9IHBhcmFtW2ZpZWxkXTsKKyAgICBpZiAoICF2YWx1ZSApCisgICAgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIHN3aXRjaCAoZmllbGQpCisgICAgeworICAgICAgY2FzZSAid2lkdGgiOgorICAgICAgdGFibGUuc3R5bGUud2lkdGggPSB2YWx1ZSArIHBhcmFtLnVuaXQudmFsdWU7CisgICAgICBicmVhazsKKyAgICAgIGNhc2UgImFsaWduIjoKKyAgICAgIHRhYmxlLmFsaWduID0gdmFsdWUudmFsdWU7CisgICAgICBicmVhazsKKyAgICAgIGNhc2UgImJvcmRlciI6CisgICAgICB0YWJsZS5zdHlsZS5ib3JkZXIgPSB2YWx1ZSArICdweCAnICsgcGFyYW0uYm9yZGVyX3N0eWxlLnZhbHVlICsgJyAnICsgcGFyYW0uYm9yZGVyX2NvbG9yOworICAgICAgYnJlYWs7CisgICAgICBjYXNlICJib3JkZXJfY29sbGFwc2UiOgorICAgICAgdGFibGUuc3R5bGUuYm9yZGVyQ29sbGFwc2UgPSAodmFsdWUgPT0gJ29uJykgPyAnY29sbGFwc2UnIDogJycgOworICAgICAgYnJlYWs7CisgICAgICBjYXNlICJzcGFjaW5nIjoKKyAgICAgIHRhYmxlLmNlbGxTcGFjaW5nID0gcGFyc2VJbnQodmFsdWUsIDEwKTsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSAicGFkZGluZyI6CisgICAgICB0YWJsZS5jZWxsUGFkZGluZyA9IHBhcnNlSW50KHZhbHVlLCAxMCk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgaWYgKHBhcmFtLmNhcHRpb24pCisgIHsKKyAgICB2YXIgY2FwdGlvbiA9IHRhYmxlLmNyZWF0ZUNhcHRpb24oKTsKKyAgICBjYXB0aW9uLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShwYXJhbS5jYXB0aW9uKSk7CisgICB9CisgIHZhciBjZWxsd2lkdGggPSAwOworICBpZiAoIHBhcmFtLmZpeGVkICkKKyAgeworICAgIGNlbGx3aWR0aCA9IE1hdGguZmxvb3IoMTAwIC8gcGFyc2VJbnQocGFyYW0uY29scywgMTApKTsKKyAgfQorICB2YXIgdGJvZHkgPSBkb2MuY3JlYXRlRWxlbWVudCgidGJvZHkiKTsKKyAgdGFibGUuYXBwZW5kQ2hpbGQodGJvZHkpOworICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBwYXJhbS5yb3dzOyArK2kgKQorICB7CisgICAgdmFyIHRyID0gZG9jLmNyZWF0ZUVsZW1lbnQoInRyIik7CisgICAgdGJvZHkuYXBwZW5kQ2hpbGQodHIpOworICAgIGZvciAoIHZhciBqID0gMDsgaiA8IHBhcmFtLmNvbHM7ICsraiApCisgICAgeworICAgICAgdmFyIHRkID0gZG9jLmNyZWF0ZUVsZW1lbnQoInRkIik7CisgICAgICAvLyBAdG9kbyA6IGNoZWNrIGlmIHRoaXMgbGluZSBkb2VzbnQgc3RvcCB1cyB0byB1c2UgcGl4ZWwgd2lkdGggaW4gY2VsbHMKKyAgICAgIGlmIChjZWxsd2lkdGggJiYgaT09PTApCisgICAgICB7CisgICAgICAgIHRkLnN0eWxlLndpZHRoID0gY2VsbHdpZHRoICsgIiUiOworICAgICAgfQorICAgICAgaWYgKHBhcmFtLmJvcmRlcikKKyAgICAgIHsKKyAgICAgICAgdGQuc3R5bGUuYm9yZGVyID0gcGFyYW0uYm9yZGVyICsgJ3B4ICcgKyBwYXJhbS5ib3JkZXJfc3R5bGUudmFsdWUgKyAnICcgKyBwYXJhbS5ib3JkZXJfY29sb3I7CisgICAgICB9CisgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CisgICAgICAvLyBCcm93c2VycyBsaWtlIHRvIHNlZSBzb21ldGhpbmcgaW5zaWRlIHRoZSBjZWxsICgmbmJzcDspLgorICAgICAgdGQuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCdcdTAwYTAnKSk7CisgICAgfQorICB9CisgIC8vIGluc2VydCB0aGUgdGFibGUKKyAgZWRpdG9yLmluc2VydE5vZGVBdFNlbGVjdGlvbih0YWJsZSk7Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW50ZXJuZXRFeHBsb3Jlci9JbnRlcm5ldEV4cGxvcmVyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9JbnRlcm5ldEV4cGxvcmVyL0ludGVybmV0RXhwbG9yZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMzYzBhMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvSW50ZXJuZXRFeHBsb3Jlci9JbnRlcm5ldEV4cGxvcmVyLmpzCkBAIC0wLDAgKzEsMTAwMiBAQAorDQorICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOm5vVGFicz10cnVlOnRhYlNpemU9MjppbmRlbnRTaXplPTI6LS0NCisgICAgLS0NCisgICAgLS0gIE5PVElDRSBNb2Rlcm4gSUUgZG9lcyBub3QgdXNlIHRoaXMgZW5naW5lIGFueSBtb3JlDQorICAgIC0tDQorICAgIC0tICAgICAgICAgIElFIDExIGlkZW50aWZpZXMgYXMgR2Vja28NCisgICAgLS0gICAgICAgICAgRWRnZSAgaWRlbnRpZmllcyBhcyBXZWJLaXQNCisgICAgLS0NCisgICAgLS0gIFRoZSBsYXN0IElFIHZlcnNpb24gdG8gdXNlIHRoaXMgZW5naW5lIGlzIHByb2JhYmx5IElFMTAsIHBlb3BsZSBzaG91bGQNCisgICAgLS0gICBub3QgdXNlIHN1Y2ggYW4gb2xkIHZlcnNpb24gb2YgSUUgYW5kIHNob3VsZCB1cGdyYWRlIG9yIHVzZSBhIFdlYktpdA0KKyAgICAtLSAgIG9yIEdlY2tvIGJhc2VkIGJyb3dzZXIuDQorICAgIC0tDQorICAgIC0tICBUaGlzIGVuZ2luZSBpcyBubyBsb25nZXIgb2ZmaWNpYWxseSBzdXBwb3J0ZWQgb3IgdGVzdGVkLg0KKyAgICAtLQ0KKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAtLQ0KKyAgICAtLSAgWGluaGEgKGlzIG5vdCBodG1sQXJlYSkgLSBodHRwOi8veGluaGEuZ29nby5jby5uei8NCisgICAgLS0NCisgICAgLS0gIFVzZSBvZiBYaW5oYSBpcyBncmFudGVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGUgaHRtbEFyZWEgTGljZW5zZSAoYmFzZWQgb24NCisgICAgLS0gIEJTRCBsaWNlbnNlKSAgcGxlYXNlIHJlYWQgbGljZW5zZS50eHQgaW4gdGhpcyBwYWNrYWdlIGZvciBkZXRhaWxzLg0KKyAgICAtLQ0KKyAgICAtLSAgWGluaGEgd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gd29yayBieSBNaWhhaSBCYXpvbiB3aGljaCBpczoNCisgICAgLS0gICAgICBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNCBkeW5hcmNoLmNvbS4NCisgICAgLS0gICAgICBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBpbnRlcmFjdGl2ZXRvb2xzLmNvbSwgaW5jLg0KKyAgICAtLSAgICAgIFRoaXMgY29weXJpZ2h0IG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UuDQorICAgIC0tDQorICAgIC0tIFRoaXMgaXMgdGhlIEludGVybmV0IEV4cGxvcmVyIGNvbXBhdGFiaWxpdHkgcGx1Z2luLCBwYXJ0IG9mIHRoZSANCisgICAgLS0gWGluaGEgY29yZS4NCisgICAgLS0NCisgICAgLS0gIFRoZSBmaWxlIGlzIGxvYWRlZCBhcyBhIHNwZWNpYWwgcGx1Z2luIGJ5IHRoZSBYaW5oYSBDb3JlIHdoZW4NCisgICAgLS0gIFhpbmhhIGlzIGJlaW5nIHJ1biB1bmRlciBhbiBJbnRlcm5ldCBFeHBsb3JlciBiYXNlZCBicm93c2VyLg0KKyAgICAtLQ0KKyAgICAtLSAgSXQgcHJvdmlkZXMgaW1wbGVtZW50YXRpb24gYW5kIHNwZWNpYWxpc2F0aW9uIGZvciB2YXJpb3VzIG1ldGhvZHMNCisgICAgLS0gIGluIHRoZSBjb3JlIHdoZXJlIGRpZmZlcmVudCBhcHByb2FjaGVzIHBlciBicm93c2VyIGFyZSByZXF1aXJlZC4NCisgICAgLS0NCisgICAgLS0gIERlc2lnbiBOb3Rlczo6DQorICAgIC0tICAgTW9zdCBtZXRob2RzIGhlcmUgd2lsbCBzaW1wbHkgYmUgb3ZlcnJpZGluZyBYaW5oYS5wcm90b3R5cGUuPG1ldGhvZD4NCisgICAgLS0gICBhbmQgc2hvdWxkIGJlIGNhbGxlZCB0aGF0LCBidXQgbWV0aG9kcyBzcGVjaWZpYyB0byBJRSBzaG91bGQgDQorICAgIC0tICAgYmUgYSBwYXJ0IG9mIHRoZSBJbnRlcm5ldEV4cGxvcmVyLnByb3RvdHlwZSwgd2Ugd29uJ3QgdHJhbXBsZSBvbiANCisgICAgLS0gICBuYW1lc3BhY2UgdGhhdCB3YXkuDQorICAgIC0tDQorICAgIC0tICAkSGVhZFVSTDogaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvbW9kdWxlcy9JbnRlcm5ldEV4cGxvcmVyL0ludGVybmV0RXhwbG9yZXIuanMgJA0KKyAgICAtLSAgJExhc3RDaGFuZ2VkRGF0ZTogMjAxOC0wMi0xOSAyMDozNTo0OSArMTMwMCAoTW9uLCAxOSBGZWIgMjAxOCkgJA0KKyAgICAtLSAgJExhc3RDaGFuZ2VkUmV2aXNpb246IDE0MDIgJA0KKyAgICAtLSAgJExhc3RDaGFuZ2VkQnk6IGdvZ28gJA0KKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KK0ludGVybmV0RXhwbG9yZXIuX3BsdWdpbkluZm8gPSB7DQorICBuYW1lICAgICAgICAgIDogIkludGVybmV0IEV4cGxvcmVyIiwNCisgIG9yaWdpbiAgICAgICAgOiAiWGluaGEgQ29yZSIsDQorICB2ZXJzaW9uICAgICAgIDogIiRMYXN0Q2hhbmdlZFJldmlzaW9uOiAxNDAyICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywgJyQxJyksDQorICBkZXZlbG9wZXIgICAgIDogIlRoZSBYaW5oYSBDb3JlIERldmVsb3BlciBUZWFtIiwNCisgIGRldmVsb3Blcl91cmwgOiAiJEhlYWRVUkw6IGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvSW50ZXJuZXRFeHBsb3Jlci9JbnRlcm5ldEV4cGxvcmVyLmpzICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywgJyQxJyksDQorICBzcG9uc29yICAgICAgIDogIiIsDQorICBzcG9uc29yX3VybCAgIDogIiIsDQorICBsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIg0KK307DQorDQorZnVuY3Rpb24gSW50ZXJuZXRFeHBsb3JlcihlZGl0b3IpIHsNCisgIHRoaXMuZWRpdG9yID0gZWRpdG9yOyAgDQorICBlZGl0b3IuSW50ZXJuZXRFeHBsb3JlciA9IHRoaXM7IC8vIFNvIHdlIGNhbiBkbyBteV9lZGl0b3IuSW50ZXJuZXRFeHBsb3Jlci5kb1NvbWV0aGluZ0lFU3BlY2lmaWMoKTsNCit9DQorDQorLyoqIEFsbG93IEludGVybmV0IEV4cGxvcmVyIHRvIGhhbmRsZSBzb21lIGtleSBldmVudHMgaW4gYSBzcGVjaWFsIHdheS4NCisgKi8NCitJbnRlcm5ldEV4cGxvcmVyLnByb3RvdHlwZS5vbktleVByZXNzID0gZnVuY3Rpb24oZXYpDQorew0KKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOw0KKyAgDQorICAvLyBTaG9ydGN1dHMNCisgIGlmKHRoaXMuZWRpdG9yLmlzU2hvcnRDdXQoZXYpKQ0KKyAgew0KKyAgICBzd2l0Y2godGhpcy5lZGl0b3IuZ2V0S2V5KGV2KS50b0xvd2VyQ2FzZSgpKQ0KKyAgICB7DQorICAgICAgY2FzZSAnbic6DQorICAgICAgew0KKyAgICAgICAgdGhpcy5lZGl0b3IuZXhlY0NvbW1hbmQoJ2Zvcm1hdGJsb2NrJywgZmFsc2UsICc8cD4nKTsgICAgICAgIA0KKyAgICAgICAgWGluaGEuX3N0b3BFdmVudChldik7DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICB9DQorICAgICAgYnJlYWs7DQorICAgICAgDQorICAgICAgY2FzZSAnMSc6DQorICAgICAgY2FzZSAnMic6DQorICAgICAgY2FzZSAnMyc6DQorICAgICAgY2FzZSAnNCc6DQorICAgICAgY2FzZSAnNSc6DQorICAgICAgY2FzZSAnNic6DQorICAgICAgew0KKyAgICAgICAgdGhpcy5lZGl0b3IuZXhlY0NvbW1hbmQoJ2Zvcm1hdGJsb2NrJywgZmFsc2UsICc8aCcrdGhpcy5lZGl0b3IuZ2V0S2V5KGV2KS50b0xvd2VyQ2FzZSgpKyc+Jyk7DQorICAgICAgICBYaW5oYS5fc3RvcEV2ZW50KGV2KTsNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICAgIH0NCisgICAgICBicmVhazsNCisgICAgfQ0KKyAgfQ0KKyAgDQorICBzd2l0Y2goZXYua2V5Q29kZSkgDQorICB7DQorICAgIGNhc2UgODogLy8gS0VZIGJhY2tzcGFjZQ0KKyAgICBjYXNlIDQ2OiAvLyBLRVkgZGVsZXRlDQorICAgIHsNCisgICAgICBpZih0aGlzLmhhbmRsZUJhY2tzcGFjZSgpKQ0KKyAgICAgIHsNCisgICAgICAgIFhpbmhhLl9zdG9wRXZlbnQoZXYpOw0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgICAgfQ0KKyAgICB9DQorICAgIGJyZWFrOw0KKyAgICANCisgICAgY2FzZSA5OiAvLyBLRVkgdGFiDQorICAgIHsNCisgICAgICAvLyBOb3RlIHRoYXQgdGhlIExpc3RPcGVyYXRpb25zIHBsdWdpbiB3aWxsIGhhbmRsZSB0YWJzIGluIGxpc3QgaXRlbXMgYW5kIGluZGVudC9vdXRkZW50IHRob3NlDQorICAgICAgLy8gYXQgc29tZSBwb2ludCBUYWJsZU9wZXJhdGlvbnMgbWlnaHQgZG8gYWxzbw0KKyAgICAgIC8vIHNvIHRoaXMgb25seSBoYXMgdG8gaGFuZGxlIGEgdGFiL3VudGFiIGluIHRleHQNCisgICAgICBpZihlZGl0b3IuY29uZmlnLnRhYlNwYW5DbGFzcykNCisgICAgICB7DQorICAgICAgICBpZighZXYuc2hpZnRLZXkpDQorICAgICAgICB7ICAgICAgICAgICAgICAgICAgLy8gIHYtLSBBdm9pZCBsY19wYXJzZV9zdHJpbmdzLnBocA0KKyAgICAgICAgICBlZGl0b3IuaW5zZXJ0SFRNTCgnPCcrJ3NwYW4gY2xhc3M9IicrZWRpdG9yLmNvbmZpZy50YWJTcGFuQ2xhc3MrJyI+JytlZGl0b3IuY29uZmlnLnRhYlNwYW5Db250ZW50cysnPC9zcGFuPicpOw0KKyAgICAgICAgICB2YXIgcyA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTsNCisgICAgICAgICAgdmFyIHIgPSBlZGl0b3IuY3JlYXRlUmFuZ2Uocyk7ICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICByLmNvbGxhcHNlKHRydWUpOw0KKyAgICAgICAgICByLnNlbGVjdCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAvLyBTaGlmdCB0YWIgaXMgbm90IHRyaXZpYWwgdG8gZml4IGluIG9sZCBJRQ0KKyAgICAgICAgICAvLyBhbmQgSSBkb24ndCBjYXJlIGVub3VnaCBhYm91dCBpdCB0byB0cnkgaGFyZA0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisgICAgICANCisgICAgICBYaW5oYS5fc3RvcEV2ZW50KGV2KTsNCisgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKyAgICBicmVhazsNCisNCisgIH0NCisgIA0KKyAgcmV0dXJuIGZhbHNlOw0KK30NCisNCisvKiogV2hlbiBiYWNrc3BhY2UgaXMgaGl0LCB0aGUgSUUgb25LZXlQcmVzcyB3aWxsIGV4ZWN1dGUgdGhpcyBtZXRob2QuDQorICogIEl0IHByZXNlcnZlcyBsaW5rcyB3aGVuIHlvdSBiYWNrc3BhY2Ugb3ZlciB0aGVtIGFuZCBhcHBhcmVudGx5IA0KKyAqICBkZWxldGVzIGNvbnRyb2wgZWxlbWVudHMgKHRhYmxlcywgaW1hZ2VzLCBmb3JtIGZpZWxkcykgaW4gYSBiZXR0ZXINCisgKiAgd2F5Lg0KKyAqDQorICogIEByZXR1cm5zIHRydWV8ZmFsc2UgVHJ1ZSB3aGVuIGJhY2tzcGFjZSBoYXMgYmVlbiBoYW5kbGVkIHNwZWNpYWxseQ0KKyAqICAgZmFsc2Ugb3RoZXJ3aXNlIChzaG91bGQgcGFzcyB0aHJvdWdoKS4gDQorICovDQorDQorSW50ZXJuZXRFeHBsb3Jlci5wcm90b3R5cGUuaGFuZGxlQmFja3NwYWNlID0gZnVuY3Rpb24oKQ0KK3sNCisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsNCisgIHZhciBzZWwgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7DQorICBpZiAoIHNlbC50eXBlID09ICdDb250cm9sJyApDQorICB7DQorICAgIHZhciBlbG0gPSBlZGl0b3IuYWN0aXZlRWxlbWVudChzZWwpOw0KKyAgICBYaW5oYS5yZW1vdmVGcm9tUGFyZW50KGVsbSk7DQorICAgIHJldHVybiB0cnVlOw0KKyAgfQ0KKw0KKyAgLy8gVGhpcyBiaXQgb2YgY29kZSBwcmVzZXZlcyBsaW5rcyB3aGVuIHlvdSBiYWNrc3BhY2Ugb3ZlciB0aGUNCisgIC8vIGVuZHBvaW50IG9mIHRoZSBsaW5rIGluIElFLiAgV2l0aG91dCBpdCwgaWYgeW91IGhhdmUgc29tZXRoaW5nIGxpa2UNCisgIC8vICAgIGxpbmtfaGVyZSB8DQorICAvLyB3aGVyZSB8IGlzIHRoZSBjdXJzb3IsIGFuZCBiYWNrc3BhY2Ugb3ZlciB0aGUgbGFzdCBlLCB0aGVuIHRoZSBsaW5rDQorICAvLyB3aWxsIGRlLWxpbmssIHdoaWNoIGlzIGEgYml0IHRlZGlvdXMNCisgIHZhciByYW5nZSA9IGVkaXRvci5jcmVhdGVSYW5nZShzZWwpOw0KKyAgdmFyIHIyID0gcmFuZ2UuZHVwbGljYXRlKCk7DQorICByMi5tb3ZlU3RhcnQoImNoYXJhY3RlciIsIC0xKTsNCisgIHZhciBhID0gcjIucGFyZW50RWxlbWVudCgpOw0KKyAgLy8gQGZpeG1lOiB3aHkgdXNpbmcgYWdhaW4gYSByZWdleCB0byB0ZXN0IGEgc2luZ2xlIHN0cmluZyA/Pz8NCisgIGlmICggYSAhPSByYW5nZS5wYXJlbnRFbGVtZW50KCkgJiYgKCAvXmEkL2kudGVzdChhLnRhZ05hbWUpICkgKQ0KKyAgew0KKyAgICByMi5jb2xsYXBzZSh0cnVlKTsNCisgICAgcjIubW92ZUVuZCgiY2hhcmFjdGVyIiwgMSk7DQorICAgIHIyLnBhc3RlSFRNTCgnJyk7DQorICAgIHIyLnNlbGVjdCgpOw0KKyAgICByZXR1cm4gdHJ1ZTsNCisgIH0NCit9Ow0KKw0KK0ludGVybmV0RXhwbG9yZXIucHJvdG90eXBlLmlud2FyZEh0bWwgPSBmdW5jdGlvbihodG1sKQ0KK3sNCisgICAvLyBCb3RoIElFIGFuZCBHZWNrbyB1c2Ugc3RyaWtlIGludGVybmFsbHkgaW5zdGVhZCBvZiBkZWwgKCM1MjMpDQorICAgLy8gWGluaGEgd2lsbCBwcmVzZW50IGRlbCBleHRlcm5hbGx5IChzZWUgWGluaGEucHJvdG90eXBlLm91dHdhcmRIdG1sDQorICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvPChcLz8pZGVsKFxzfD58XC8pL2lnLCAiPCQxc3RyaWtlJDIiKTsNCisgICAvLyBpZSBlYXRzIHNjcmlwdHMgYW5kIGNvbW1lbnRzIGF0IGJlZ2lubmluZyBvZiBwYWdlLCBzbw0KKyAgIC8vIG1ha2Ugc3VyZSB0aGVyZSBpcyBzb21ldGhpbmcgYmVmb3JlIHRoZSBmaXJzdCBzY3JpcHQgb24gdGhlIHBhZ2UNCisgICBodG1sID0gaHRtbC5yZXBsYWNlKC8oPHNjcmlwdHw8IS0tKS9pLCImbmJzcDskMSIpOw0KKyAgIA0KKyAgIC8vIFdlJ3ZlIGdvdCBhIHdvcmthcm91bmQgZm9yIGNlcnRhaW4gaXNzdWVzIHdpdGggc2F2aW5nIGFuZCByZXN0b3JpbmcNCisgICAvLyBzZWxlY3Rpb25zIHRoYXQgbWF5IGNhdXNlIHVzIHRvIGZpbGwgaW4ganVuayBzcGFuIHRhZ3MuICBXZSdsbCBjbGVhbg0KKyAgIC8vIHRob3NlIGhlcmUNCisgICBodG1sID0gaHRtbC5yZXBsYWNlKC88c3BhbltePl0raWQ9Il9fSW5zZXJ0U3Bhbl9Xb3JrYXJvdW5kX1thLXpdKyIuKj8+KFtcc1xTXSo/KTxcL3NwYW4+L2ksIiQxIik7DQorICAgDQorICAgcmV0dXJuIGh0bWw7DQorfQ0KKw0KK0ludGVybmV0RXhwbG9yZXIucHJvdG90eXBlLm91dHdhcmRIdG1sID0gZnVuY3Rpb24oaHRtbCkNCit7DQorICAgLy8gcmVtb3ZlIHNwYWNlIGFkZGVkIGJlZm9yZSBmaXJzdCBzY3JpcHQgb24gdGhlIHBhZ2UNCisgICBodG1sID0gaHRtbC5yZXBsYWNlKC8mbmJzcDsoXHMqKSg8c2NyaXB0fDwhLS0pL2ksIiQxJDIiKTsNCisNCisgICAvLyBXZSd2ZSBnb3QgYSB3b3JrYXJvdW5kIGZvciBjZXJ0YWluIGlzc3VlcyB3aXRoIHNhdmluZyBhbmQgcmVzdG9yaW5nDQorICAgLy8gc2VsZWN0aW9ucyB0aGF0IG1heSBjYXVzZSB1cyB0byBmaWxsIGluIGp1bmsgc3BhbiB0YWdzLiAgV2UnbGwgY2xlYW4NCisgICAvLyB0aG9zZSBoZXJlDQorICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvPHNwYW5bXj5dK2lkPSJfX0luc2VydFNwYW5fV29ya2Fyb3VuZF9bYS16XSsiLio/PihbXHNcU10qPyk8XC9zcGFuPi9pLCIkMSIpOw0KKyAgIA0KKyAgIHJldHVybiBodG1sOw0KK30NCisNCitJbnRlcm5ldEV4cGxvcmVyLnByb3RvdHlwZS5vbkV4ZWNDb21tYW5kID0gZnVuY3Rpb24oY21kSUQsIFVJLCBwYXJhbSkNCit7ICAgDQorICBzd2l0Y2goY21kSUQpDQorICB7DQorICAgIC8vICM2NDUgSUUgb25seSBzYXZlcyB0aGUgaW5pdGlhbCBjb250ZW50IG9mIHRoZSBpZnJhbWUsIHNvIHdlIGNyZWF0ZSBhIHRlbXBvcmFyeSBpZnJhbWUgd2l0aCB0aGUgY3VycmVudCBlZGl0b3IgY29udGVudHMNCisgICAgY2FzZSAnc2F2ZWFzJzoNCisgICAgICAgIHZhciBkb2MgPSBudWxsOw0KKyAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOw0KKyAgICAgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOw0KKyAgICAgICAgaWZyYW1lLnNyYyA9ICJhYm91dDpibGFuayI7DQorICAgICAgICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsNCisgICAgICAgIHRyeQ0KKyAgICAgICAgew0KKyAgICAgICAgICBpZiAoIGlmcmFtZS5jb250ZW50RG9jdW1lbnQgKQ0KKyAgICAgICAgICB7DQorICAgICAgICAgICAgZG9jID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudDsgICAgICAgIA0KKyAgICAgICAgICB9DQorICAgICAgICAgIGVsc2UNCisgICAgICAgICAgew0KKyAgICAgICAgICAgIGRvYyA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50Ow0KKyAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBjYXRjaChleCkNCisgICAgICAgIHsgDQorICAgICAgICAgIC8vaG9wZSB0aGVyZSdzIG5vIGV4Y2VwdGlvbg0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBkb2Mub3BlbigidGV4dC9odG1sIiwicmVwbGFjZSIpOw0KKyAgICAgICAgdmFyIGh0bWwgPSAnJzsNCisgICAgICAgIGlmICggZWRpdG9yLmNvbmZpZy5icm93c2VyUXVpcmtzTW9kZSA9PT0gZmFsc2UgKQ0KKyAgICAgICAgew0KKyAgICAgICAgICB2YXIgZG9jdHlwZSA9ICc8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4nOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZSBpZiAoIGVkaXRvci5jb25maWcuYnJvd3NlclF1aXJrc01vZGUgPT09IHRydWUgKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgdmFyIGRvY3R5cGUgPSAnJzsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgIHZhciBkb2N0eXBlID0gWGluaGEuZ2V0RG9jdHlwZShkb2N1bWVudCk7DQorICAgICAgICB9DQorICAgICAgICBpZiAoICFlZGl0b3IuY29uZmlnLmZ1bGxQYWdlICkNCisgICAgICAgIHsNCisgICAgICAgICAgaHRtbCArPSBkb2N0eXBlICsgIlxuIjsNCisgICAgICAgICAgaHRtbCArPSAiPGh0bWw+XG4iOw0KKyAgICAgICAgICBodG1sICs9ICI8aGVhZD5cbiI7DQorICAgICAgICAgIGh0bWwgKz0gIjxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PSIgKyBlZGl0b3IuY29uZmlnLmNoYXJTZXQgKyAiXCI+XG4iOw0KKyAgICAgICAgICBpZiAoIHR5cGVvZiBlZGl0b3IuY29uZmlnLmJhc2VIcmVmICE9ICd1bmRlZmluZWQnICYmIGVkaXRvci5jb25maWcuYmFzZUhyZWYgIT09IG51bGwgKQ0KKyAgICAgICAgICB7DQorICAgICAgICAgICAgaHRtbCArPSAiPGJhc2UgaHJlZj1cIiIgKyBlZGl0b3IuY29uZmlnLmJhc2VIcmVmICsgIlwiLz5cbiI7DQorICAgICAgICAgIH0NCisgICAgICAgICAgDQorICAgICAgICAgIGlmICggdHlwZW9mIGVkaXRvci5jb25maWcucGFnZVN0eWxlU2hlZXRzICE9PSAndW5kZWZpbmVkJyApDQorICAgICAgICAgIHsNCisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBlZGl0b3IuY29uZmlnLnBhZ2VTdHlsZVNoZWV0cy5sZW5ndGg7IGkrKyApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgaWYgKCBlZGl0b3IuY29uZmlnLnBhZ2VTdHlsZVNoZWV0c1tpXS5sZW5ndGggPiAwICkNCisgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgaHRtbCArPSAiPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIHR5cGU9XCJ0ZXh0L2Nzc1wiIGhyZWY9XCIiICsgZWRpdG9yLmNvbmZpZy5wYWdlU3R5bGVTaGVldHNbaV0gKyAiXCI+IjsNCisgICAgICAgICAgICAgICAgLy9odG1sICs9ICI8c3R5bGU+IEBpbXBvcnQgdXJsKCciICsgZWRpdG9yLmNvbmZpZy5wYWdlU3R5bGVTaGVldHNbaV0gKyAiJyk7IDwvc3R5bGU+XG4iOw0KKyAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgfQ0KKyAgICAgICAgICANCisgICAgICAgICAgaWYgKCBlZGl0b3IuY29uZmlnLnBhZ2VTdHlsZSApDQorICAgICAgICAgIHsNCisgICAgICAgICAgICBodG1sICs9ICI8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+XG4iICsgZWRpdG9yLmNvbmZpZy5wYWdlU3R5bGUgKyAiXG48L3N0eWxlPiI7DQorICAgICAgICAgIH0NCisgICAgICAgICAgDQorICAgICAgICAgIGh0bWwgKz0gIjwvaGVhZD5cbiI7DQorICAgICAgICAgIGh0bWwgKz0gIjxib2R5PlxuIjsNCisgICAgICAgICAgaHRtbCArPSBlZGl0b3IuZ2V0RWRpdG9yQ29udGVudCgpOw0KKyAgICAgICAgICBodG1sICs9ICI8L2JvZHk+XG4iOw0KKyAgICAgICAgICBodG1sICs9ICI8L2h0bWw+IjsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgaHRtbCA9IGVkaXRvci5nZXRFZGl0b3JDb250ZW50KCk7DQorICAgICAgICAgIGlmICggaHRtbC5tYXRjaChYaW5oYS5SRV9kb2N0eXBlKSApDQorICAgICAgICAgIHsNCisgICAgICAgICAgICBlZGl0b3Iuc2V0RG9jdHlwZShSZWdFeHAuJDEpOw0KKyAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBkb2Mud3JpdGUoaHRtbCk7DQorICAgICAgICBkb2MuY2xvc2UoKTsNCisgICAgICAgIGRvYy5leGVjQ29tbWFuZChjbWRJRCwgVUksIHBhcmFtKTsNCisgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1lKTsNCisgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgYnJlYWs7DQorICAgIGNhc2UgJ3JlbW92ZWZvcm1hdCc6DQorICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOw0KKyAgICAgIHZhciBzZWwgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7DQorICAgICAgdmFyIHNlbFNhdmUgPSBlZGl0b3Iuc2F2ZVNlbGVjdGlvbihzZWwpOw0KKw0KKyAgICAgIHZhciBpLCBlbCwgZWxzOw0KKw0KKyAgICAgIGZ1bmN0aW9uIGNsZWFuIChlbCkNCisgICAgICB7DQorICAgICAgICBpZiAoZWwubm9kZVR5cGUgIT0gMSkgcmV0dXJuOw0KKyAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpOw0KKyAgICAgICAgZm9yICh2YXIgaj0wOyBqPGVsLmNoaWxkTm9kZXMubGVuZ3RoO2orKykNCisgICAgICAgIHsNCisgICAgICAgICAgY2xlYW4oZWwuY2hpbGROb2Rlc1tqXSk7DQorICAgICAgICB9DQorICAgICAgICBpZiAoIChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ3NwYW4nICYmICFlbC5hdHRyaWJ1dGVzLmxlbmd0aCApIHx8IGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnZm9udCcpDQorICAgICAgICB7DQorICAgICAgICAgIGVsLm91dGVySFRNTCA9IGVsLmlubmVySFRNTDsNCisgICAgICAgIH0NCisgICAgICB9DQorICAgICAgaWYgKCBlZGl0b3Iuc2VsZWN0aW9uRW1wdHkoc2VsKSApDQorICAgICAgew0KKyAgICAgICAgZWxzID0gZWRpdG9yLl9kb2MuYm9keS5jaGlsZE5vZGVzOw0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykgDQorICAgICAgICB7DQorICAgICAgICAgIGVsID0gZWxzW2ldOw0KKyAgICAgICAgICBpZiAoZWwubm9kZVR5cGUgIT0gMSkgY29udGludWU7DQorICAgICAgICAgIGlmIChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ3NwYW4nKQ0KKyAgICAgICAgICB7DQorICAgICAgICAgICAgbmV3Tm9kZSA9IGVkaXRvci5jb252ZXJ0Tm9kZShlbCwgJ2RpdicpOw0KKyAgICAgICAgICAgIGVsLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld05vZGUsIGVsKTsNCisgICAgICAgICAgICBlbCA9IG5ld05vZGU7DQorICAgICAgICAgIH0NCisgICAgICAgICAgY2xlYW4oZWwpOw0KKyAgICAgICAgfQ0KKyAgICAgIH0gDQorICAgICAgZWRpdG9yLl9kb2MuZXhlY0NvbW1hbmQoY21kSUQsIFVJLCBwYXJhbSk7DQorDQorICAgICAgZWRpdG9yLnJlc3RvcmVTZWxlY3Rpb24oc2VsU2F2ZSk7DQorICAgICAgcmV0dXJuIHRydWU7DQorICAgIGJyZWFrOw0KKyAgfQ0KKyAgDQorICByZXR1cm4gZmFsc2U7DQorfTsNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKi0tLS0tLS0gSU1QTEVNRU5UQVRJT04gT0YgVEhFIEFCU1RSQUNUICJYaW5oYS5wcm90b3R5cGUiIE1FVEhPRFMgLS0tLS0tLS0tKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogSW5zZXJ0IGEgbm9kZSBhdCB0aGUgY3VycmVudCBzZWxlY3Rpb24gcG9pbnQuIA0KKyAqIEBwYXJhbSB0b0JlSW5zZXJ0ZWQgRG9tTm9kZQ0KKyAqLw0KKw0KK1hpbmhhLnByb3RvdHlwZS5pbnNlcnROb2RlQXRTZWxlY3Rpb24gPSBmdW5jdGlvbih0b0JlSW5zZXJ0ZWQpDQorew0KKyAgdGhpcy5pbnNlcnRIVE1MKHRvQmVJbnNlcnRlZC5vdXRlckhUTUwpOw0KK307DQorDQorICANCisvKiogR2V0IHRoZSBwYXJlbnQgZWxlbWVudCBvZiB0aGUgc3VwcGxpZWQgb3IgY3VycmVudCBzZWxlY3Rpb24uIA0KKyAqICBAcGFyYW0gICBzZWwgb3B0aW9uYWwgc2VsZWN0aW9uIGFzIHJldHVybmVkIGJ5IGdldFNlbGVjdGlvbg0KKyAqICBAcmV0dXJucyBEb21Ob2RlDQorICovDQorIA0KK1hpbmhhLnByb3RvdHlwZS5nZXRQYXJlbnRFbGVtZW50ID0gZnVuY3Rpb24oc2VsKQ0KK3sNCisgIGlmICggdHlwZW9mIHNlbCA9PSAndW5kZWZpbmVkJyApDQorICB7DQorICAgIHNlbCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7DQorICB9IA0KKyAgdmFyIHJhbmdlID0gdGhpcy5jcmVhdGVSYW5nZShzZWwpOyANCisgIHN3aXRjaCAoIHNlbC50eXBlICkNCisgIHsNCisgICAgY2FzZSAiVGV4dCI6DQorICAgICAgLy8gdHJ5IHRvIGNpcmN1bXZlbnQgYSBidWcgaW4gSUU6DQorICAgICAgLy8gdGhlIHBhcmVudCByZXR1cm5lZCBpcyBub3QgYWx3YXlzIHRoZSByZWFsIHBhcmVudCBlbGVtZW50DQorICAgICAgdmFyIHBhcmVudCA9IHJhbmdlLnBhcmVudEVsZW1lbnQoKTsNCisgICAgICB3aGlsZSAoIHRydWUgKQ0KKyAgICAgIHsNCisgICAgICAgIHZhciBUZXN0UmFuZ2UgPSByYW5nZS5kdXBsaWNhdGUoKTsNCisgICAgICAgIFRlc3RSYW5nZS5tb3ZlVG9FbGVtZW50VGV4dChwYXJlbnQpOw0KKyAgICAgICAgaWYgKCBUZXN0UmFuZ2UuaW5SYW5nZShyYW5nZSkgKQ0KKyAgICAgICAgew0KKyAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgICAgIGlmICggKCBwYXJlbnQubm9kZVR5cGUgIT0gMSApIHx8ICggcGFyZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnYm9keScgKSApDQorICAgICAgICB7DQorICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7DQorICAgICAgfQ0KKyAgICAgIHJldHVybiBwYXJlbnQ7DQorICAgIGNhc2UgIk5vbmUiOg0KKyAgICAgIC8vIEl0IHNlZW1zIHRoYXQgZXZlbiBmb3Igc2VsZWN0aW9uIG9mIHR5cGUgIk5vbmUiLA0KKyAgICAgIC8vIHRoZXJlIF9pc18gYSBwYXJlbnQgZWxlbWVudCBhbmQgaXQncyB2YWx1ZSBpcyBub3QNCisgICAgICAvLyBvbmx5IGNvcnJlY3QsIGJ1dCB2ZXJ5IGltcG9ydGFudCB0byB1cy4gIE1TSUUgaXMNCisgICAgICAvLyBjZXJ0YWlubHkgdGhlIGJ1Z2dpZXN0IGJyb3dzZXIgaW4gdGhlIHdvcmxkIGFuZCBJDQorICAgICAgLy8gd29uZGVyLCBHb2QsIGhvdyBjYW4gRWFydGggc3RhbmQgaXQ/DQorICAgICAgdHJ5DQorICAgICAgew0KKyAgICAgICAgcmV0dXJuIHJhbmdlLnBhcmVudEVsZW1lbnQoKTsNCisgICAgICB9DQorICAgICAgY2F0Y2goZSkNCisgICAgICB7DQorICAgICAgICByZXR1cm4gdGhpcy5fZG9jLmJvZHk7IC8vID8/DQorICAgICAgfQ0KKyAgICAgIA0KKyAgICBjYXNlICJDb250cm9sIjoNCisgICAgICByZXR1cm4gcmFuZ2UuaXRlbSgwKTsNCisgICAgZGVmYXVsdDoNCisgICAgICByZXR1cm4gdGhpcy5fZG9jLmJvZHk7DQorICB9DQorfTsNCisgIA0KKy8qKg0KKyAqIFJldHVybnMgdGhlIHNlbGVjdGVkIGVsZW1lbnQsIGlmIGFueS4gIFRoYXQgaXMsDQorICogdGhlIGVsZW1lbnQgdGhhdCB5b3UgaGF2ZSBsYXN0IHNlbGVjdGVkIGluIHRoZSAicGF0aCINCisgKiBhdCB0aGUgYm90dG9tIG9mIHRoZSBlZGl0b3IsIG9yIGEgImNvbnRyb2wiIChlZyBpbWFnZSkNCisgKg0KKyAqIEByZXR1cm5zIG51bGwgfCBEb21Ob2RlDQorICovDQorIA0KK1hpbmhhLnByb3RvdHlwZS5hY3RpdmVFbGVtZW50ID0gZnVuY3Rpb24oc2VsKQ0KK3sNCisgIGlmICggKCBzZWwgPT09IG51bGwgKSB8fCB0aGlzLnNlbGVjdGlvbkVtcHR5KHNlbCkgKQ0KKyAgew0KKyAgICByZXR1cm4gbnVsbDsNCisgIH0NCisNCisgIGlmICggc2VsLnR5cGUudG9Mb3dlckNhc2UoKSA9PSAiY29udHJvbCIgKQ0KKyAgew0KKyAgICByZXR1cm4gc2VsLmNyZWF0ZVJhbmdlKCkuaXRlbSgwKTsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLy8gSWYgaXQncyBub3QgYSBjb250cm9sLCB0aGVuIHdlIG5lZWQgdG8gc2VlIGlmDQorICAgIC8vIHRoZSBzZWxlY3Rpb24gaXMgdGhlIF9lbnRpcmVfIHRleHQgb2YgYSBwYXJlbnQgbm9kZQ0KKyAgICAvLyAodGhpcyBoYXBwZW5zIHdoZW4gYSBub2RlIGlzIGNsaWNrZWQgaW4gdGhlIHRyZWUpDQorICAgIHZhciByYW5nZSA9IHNlbC5jcmVhdGVSYW5nZSgpOw0KKyAgICB2YXIgcF9lbG0gPSB0aGlzLmdldFBhcmVudEVsZW1lbnQoc2VsKTsNCisgICAgaWYgKCBwX2VsbS5pbm5lckhUTUwgPT0gcmFuZ2UuaHRtbFRleHQgKQ0KKyAgICB7DQorICAgICAgcmV0dXJuIHBfZWxtOw0KKyAgICB9DQorICAgIC8qDQorICAgIGlmICggcF9lbG0gKQ0KKyAgICB7DQorICAgICAgdmFyIHBfcm5nID0gdGhpcy5fZG9jLmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7DQorICAgICAgcF9ybmcubW92ZVRvRWxlbWVudFRleHQocF9lbG0pOw0KKyAgICAgIGlmICggcF9ybmcuaXNFcXVhbChyYW5nZSkgKQ0KKyAgICAgIHsNCisgICAgICAgIHJldHVybiBwX2VsbTsNCisgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKCByYW5nZS5wYXJlbnRFbGVtZW50KCkgKQ0KKyAgICB7DQorICAgICAgdmFyIHBybnRfcmFuZ2UgPSB0aGlzLl9kb2MuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTsNCisgICAgICBwcm50X3JhbmdlLm1vdmVUb0VsZW1lbnRUZXh0KHJhbmdlLnBhcmVudEVsZW1lbnQoKSk7DQorICAgICAgaWYgKCBwcm50X3JhbmdlLmlzRXF1YWwocmFuZ2UpICkNCisgICAgICB7DQorICAgICAgICByZXR1cm4gcmFuZ2UucGFyZW50RWxlbWVudCgpOw0KKyAgICAgIH0NCisgICAgfQ0KKyAgICAqLw0KKyAgICByZXR1cm4gbnVsbDsNCisgIH0NCit9Ow0KKw0KKy8qKiANCisgKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBzZWxlY3Rpb24gaXMgZW1wdHkgKGNvbGxhcHNlZCkuDQorICogQHBhcmFtIHNlbGVjdGlvbiBTZWxlY3Rpb24gb2JqZWN0IGFzIHJldHVybmVkIGJ5IGdldFNlbGVjdGlvbg0KKyAqIEByZXR1cm5zIHRydWV8ZmFsc2UNCisgKi8NCisgDQorWGluaGEucHJvdG90eXBlLnNlbGVjdGlvbkVtcHR5ID0gZnVuY3Rpb24oc2VsKQ0KK3sNCisgIGlmICggIXNlbCApDQorICB7DQorICAgIHJldHVybiB0cnVlOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIHRoaXMuY3JlYXRlUmFuZ2Uoc2VsKS5odG1sVGV4dCA9PT0gJyc7DQorfTsNCisNCisvKiogDQorICogUmV0dXJucyBhIHJhbmdlIG9iamVjdCB0byBiZSBzdG9yZWQgDQorICogYW5kIGxhdGVyIHJlc3RvcmVkIHdpdGggWGluaGEucHJvdG90eXBlLnJlc3RvcmVTZWxlY3Rpb24oKQ0KKyAqIA0KKyAqIEByZXR1cm5zIFJhbmdlDQorICovDQorWGluaGEucHJvdG90eXBlLnNhdmVTZWxlY3Rpb24gPSBmdW5jdGlvbihzZWwpDQorew0KKyAgcmV0dXJuIHRoaXMuY3JlYXRlUmFuZ2Uoc2VsID8gc2VsIDogdGhpcy5nZXRTZWxlY3Rpb24oKSkNCit9DQorLyoqIA0KKyAqIFJlc3RvcmVzIGEgc2VsZWN0aW9uIHByZXZpb3VzbHkgc3RvcmVkDQorICogQHBhcmFtIHNhdmVkU2VsZWN0aW9uIFJhbmdlIG9iamVjdCBhcyByZXR1cm5lZCBieSBYaW5oYS5wcm90b3R5cGUucmVzdG9yZVNlbGVjdGlvbigpDQorICovDQorWGluaGEucHJvdG90eXBlLnJlc3RvcmVTZWxlY3Rpb24gPSBmdW5jdGlvbihzYXZlZFNlbGVjdGlvbikNCit7DQorICBpZiAoIXNhdmVkU2VsZWN0aW9uKSByZXR1cm47DQorICANCisgIC8vIFRpY2tldCAjMTM4Nw0KKyAgLy8gYXZvaWQgcHJvYmxlbSB3aGVyZSBzYXZlZFNlbGVjdGlvbiBkb2VzIG5vdCBpbXBsZW1lbnQgcGFyZW50RWxlbWVudCgpLiANCisgIC8vIFRoaXMgY29uZGl0aW9uIG9jY3VycyBpZiB0aGVyZSB3YXMgbm8gdGV4dCBzZWxlY3Rpb24gYXQgdGhlIHRpbWUgc2F2ZVNlbGVjdGlvbigpIHdhcyBjYWxsZWQuICBJbiB0aGUgY2FzZSANCisgIC8vIGFuIGltYWdlIHNlbGVjdGlvbiwgdGhlIHNpdHVhdGlvbiBpcyBjb25mdXNpbmcuLi4gdGhlIGltYWdlIG1heSBiZSBzZWxlY3RlZCBpbiB0d28gZGlmZmVyZW50IHdheXM6ICAxKSBieSANCisgIC8vIHNpbXBseSBjbGlja2luZyB0aGUgaW1hZ2UgaXQgd2lsbCBhcHBlYXIgdG8gYmUgc2VsZWN0ZWQgYnkgYSBib3ggd2l0aCBzaXppbmcgaGFuZGxlczsgb3IgMikgYnkgY2xpY2tpbmcgYW5kIA0KKyAgLy8gZHJhZ2dpbmcgb3ZlciB0aGUgaW1hZ2UgYXMgeW91IG1pZ2h0IGNsaWNrIGFuZCBkcmFnIG92ZXIgdGV4dC4gIEluIHRoZSBmaXJzdCBjYXNlLCB0aGUgcmVzdWx0aW5nIHNlbGVjdGlvbiANCisgIC8vIG9iamVjdCBkb2VzIG5vdCBpbXBsZW1lbnQgcGFyZW50RWxlbWVudCgpLCBsZWFkaW5nIHRvIGEgY3Jhc2ggbGF0ZXIgb24gaW4gdGhlIGNvZGUgYmVsb3cuICBUaGUgZm9sbG93aW5nIA0KKyAgLy8gaGFjayBhdm9pZHMgdGhhdCBwcm9ibGVtLiANCisgIA0KKyAgLy8gVGlja2V0ICMxNDg4DQorICAvLyBmaXggY29udHJvbCBzZWxlY3Rpb24gaW4gSUU4DQorICANCisgIHZhciBzYXZlZFBhcmVudEVsZW1lbnQgPSBudWxsOw0KKyAgaWYgKHNhdmVkU2VsZWN0aW9uLnBhcmVudEVsZW1lbnQpDQorICB7DQorICAgIHNhdmVkUGFyZW50RWxlbWVudCA9ICBzYXZlZFNlbGVjdGlvbi5wYXJlbnRFbGVtZW50KCk7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIHNhdmVkUGFyZW50RWxlbWVudCA9IHNhdmVkU2VsZWN0aW9uLml0ZW0oMCk7DQorICB9DQorICANCisgIC8vIEluIG9yZGVyIHRvIHByZXZlbnQgdHJpZ2dlcmluZyB0aGUgSUUgYnVnIG1lbnRpb25lZCBiZWxvdywgd2Ugd2lsbCB0cnkgdG8NCisgIC8vIG9wdGltaXplIGJ5IG5vdCByZXN0b3JpbmcgdGhlIHNlbGVjdGlvbiBpZiBpdCBoYXBwZW5zIHRvIG1hdGNoIHRoZSBjdXJyZW50DQorICAvLyBzZWxlY3Rpb24uDQorICB2YXIgcmFuZ2UgPSB0aGlzLmNyZWF0ZVJhbmdlKHRoaXMuZ2V0U2VsZWN0aW9uKCkpOw0KKw0KKyAgdmFyIHJhbmdlUGFyZW50RWxlbWVudCA9ICBudWxsOw0KKyAgaWYgKHJhbmdlLnBhcmVudEVsZW1lbnQpDQorICB7DQorICAgIHJhbmdlUGFyZW50RWxlbWVudCA9ICByYW5nZS5wYXJlbnRFbGVtZW50KCk7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIHJhbmdlUGFyZW50RWxlbWVudCA9IHJhbmdlLml0ZW0oMCk7DQorICB9DQorDQorICAvLyBXZSBjYW4ndCBjb21wYXJlIHR3byBzZWxlY3Rpb25zIHRoYXQgY29tZSBmcm9tIGRpZmZlcmVudCBkb2N1bWVudHMsIHNvIHdlDQorICAvLyBtdXN0IG1ha2Ugc3VyZSB0aGV5J3JlIGZyb20gdGhlIHNhbWUgZG9jdW1lbnQuDQorICB2YXIgZmluZERvYyA9IGZ1bmN0aW9uKGVsKQ0KKyAgew0KKyAgICBmb3IgKHZhciByb290PWVsOyByb290OyByb290PXJvb3QucGFyZW50Tm9kZSkNCisgICAgew0KKyAgICAgIGlmIChyb290LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnaHRtbCcpDQorICAgICAgew0KKyAgICAgICAgcmV0dXJuIHJvb3QucGFyZW50Tm9kZTsNCisgICAgICB9DQorICAgIH0NCisgICAgcmV0dXJuIG51bGw7DQorICB9DQorDQorICBpZiAoc2F2ZWRTZWxlY3Rpb24ucGFyZW50RWxlbWVudCAmJiBmaW5kRG9jKHNhdmVkUGFyZW50RWxlbWVudCkgPT0gZmluZERvYyhyYW5nZVBhcmVudEVsZW1lbnQpKQ0KKyAgew0KKyAgICBpZiAocmFuZ2UuaXNFcXVhbChzYXZlZFNlbGVjdGlvbikpDQorICAgIHsNCisgICAgICAvLyBUaGUgc2VsZWN0aW9uIGhhc24ndCBtb3ZlZCwgbm8gbmVlZCB0byByZXN0b3JlLg0KKyAgICAgIHJldHVybjsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgdHJ5IHsgc2F2ZWRTZWxlY3Rpb24uc2VsZWN0KCkgfSBjYXRjaCAoZSkge307DQorICByYW5nZSA9IHRoaXMuY3JlYXRlUmFuZ2UodGhpcy5nZXRTZWxlY3Rpb24oKSk7DQorICANCisgIGlmIChyYW5nZS5wYXJlbnRFbGVtZW50KQ0KKyAgew0KKyAgICByYW5nZVBhcmVudEVsZW1lbnQgPSAgcmFuZ2UucGFyZW50RWxlbWVudCgpOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICByYW5nZVBhcmVudEVsZW1lbnQgPSByYW5nZS5pdGVtKDApOw0KKyAgfQ0KKyAgDQorICBpZiAocmFuZ2VQYXJlbnRFbGVtZW50ICE9IHNhdmVkUGFyZW50RWxlbWVudCkNCisgIHsNCisgICAgLy8gSUUgaGFzIGEgcHJvYmxlbSB3aXRoIHNlbGVjdGlvbnMgYXQgdGhlIGVuZCBvZiB0ZXh0IG5vZGVzIHRoYXQNCisgICAgLy8gaW1tZWRpYXRlbHkgcHJlY2VkZSBibG9jayBub2Rlcy4gRXhhbXBsZSBtYXJrdXA6DQorICAgIC8vIDxkaXY+VGV4dCBOb2RlPHA+VGV4dCBpbiBCbG9jazwvcD48L2Rpdj4NCisgICAgLy8gICAgICAgICAgICAgICBeDQorICAgIC8vIFRoZSBwcm9ibGVtIG9jY3VycyB3aGVuIHRoZSBjdXJzb3IgaXMgYWZ0ZXIgdGhlICdlJyBpbiBOb2RlLg0KKw0KKyAgICB2YXIgc29sdXRpb24gPSB0aGlzLmNvbmZpZy5zZWxlY3RXb3JrYXJvdW5kIHx8ICdWaXNpYmxlQ3VlJzsNCisgICAgc3dpdGNoIChzb2x1dGlvbikNCisgICAgew0KKyAgICAgIGNhc2UgJ1NpbXVsYXRlQ2xpY2snOg0KKyAgICAgICAgLy8gVHJ5IHRvIGdldCB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBzZWxlY3Rpb24gYW5kIHRoZW4gc2ltdWxhdGUgYQ0KKyAgICAgICAgLy8gbW91c2UgY2xpY2sgaW4gdGhlIHVwcGVyIHJpZ2h0IGNvcm5lciB0byByZXR1cm4gdGhlIGN1cnNvciB0byB0aGUNCisgICAgICAgIC8vIGNvcnJlY3QgbG9jYXRpb24uDQorDQorICAgICAgICAvLyBObyBjb2RlIHlldCwgZmFsbCB0aHJvdWdoIHRvIEluc2VydFNwYW4NCisgICAgICBjYXNlICdJbnNlcnRTcGFuJzoNCisgICAgICAgIC8vIFRoaXMgd29ya2Fyb3VuZCBpbnNlcnRzIGFuIGVtcHR5IHNwYW4gZWxlbWVudCBzbyB0aGF0IHdlIGFyZSBubw0KKyAgICAgICAgLy8gbG9uZ2VyIHRyeWluZyB0byBzZWxlY3QgYSB0ZXh0IG5vZGUsDQorICAgICAgICB2YXIgcGFyZW50RG9jID0gZmluZERvYyhzYXZlZFBhcmVudEVsZW1lbnQpOw0KKw0KKyAgICAgICAgLy8gQSBmdW5jdGlvbiB1c2VkIHRvIGdlbmVyYXRlIGEgdW5pcXVlIElEIGZvciBvdXIgdGVtcG9yYXJ5IHNwYW4uDQorICAgICAgICB2YXIgcmFuZExldHRlcnMgPSBmdW5jdGlvbihjb3VudCkNCisgICAgICAgIHsNCisgICAgICAgICAgLy8gQnVpbGQgYSBsaXN0IG9mIDI2IGxldHRlcnMuDQorICAgICAgICAgIHZhciBMZXR0ZXJzID0gJyc7DQorICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXg8MjY7ICsraW5kZXgpDQorICAgICAgICAgIHsNCisgICAgICAgICAgICBMZXR0ZXJzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoJ2EnLmNoYXJDb2RlQXQoMCkgKyBpbmRleCk7DQorICAgICAgICAgIH0NCisNCisgICAgICAgICAgdmFyIHJlc3VsdCA9ICcnOw0KKyAgICAgICAgICBmb3IgKHZhciBpbmRleD0wOyBpbmRleDxjb3VudDsgKytpbmRleCkNCisgICAgICAgICAgew0KKyAgICAgICAgICAgIHJlc3VsdCArPSBMZXR0ZXJzLnN1YnN0cihNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTGV0dGVycy5sZW5ndGggKyAxKSwgMSk7DQorICAgICAgICAgIH0NCisgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vIFdlJ2xsIHRyeSB0byBmaW5kIGEgdW5pcXVlIElEIHRvIHVzZSBmb3IgZmluZGluZyBvdXIgZWxlbWVudC4NCisgICAgICAgIHZhciBrZXlMZW5ndGggPSAxOw0KKyAgICAgICAgdmFyIHRlbXBJZCA9ICdfX0luc2VydFNwYW5fV29ya2Fyb3VuZF8nICsgcmFuZExldHRlcnMoa2V5TGVuZ3RoKTsNCisgICAgICAgIHdoaWxlIChwYXJlbnREb2MuZ2V0RWxlbWVudEJ5SWQodGVtcElkKSkNCisgICAgICAgIHsNCisgICAgICAgICAgLy8gRWFjaCB0aW1lIHRoZXJlJ3MgYSBjb2xsaXNpb24sIHdlJ2xsIGluY3JlYXNlIG91ciBrZXkgbGVuZ3RoIGJ5DQorICAgICAgICAgIC8vIG9uZSwgbWFraW5nIHRoZSBjaGFuY2VzIG9mIGEgY29sbGlzaW9uIGV4cG9uZW50aWFsbHkgbW9yZSByYXJlLg0KKyAgICAgICAgICBrZXlMZW5ndGggKz0gMTsNCisgICAgICAgICAgdGVtcElkID0gJ19fSW5zZXJ0U3Bhbl9Xb3JrYXJvdW5kXycgKyByYW5kTGV0dGVycyhrZXlMZW5ndGgpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIHVuaXF1ZWx5IGlkZW50aWZpYWJsZSBlbGVtZW50LCB3ZSdsbCBzdGljayBpdCBhbmQNCisgICAgICAgIC8vIGFuZCB1c2UgaXQgdG8gb3JpZW50IG91ciBzZWxlY3Rpb24uDQorICAgICAgICBzYXZlZFNlbGVjdGlvbi5wYXN0ZUhUTUwoJzxzcGFuIGlkPSInICsgdGVtcElkICsgJyI+PC9zcGFuPicpOw0KKyAgICAgICAgdmFyIHRlbXBTcGFuID0gcGFyZW50RG9jLmdldEVsZW1lbnRCeUlkKHRlbXBJZCk7DQorICAgICAgICBzYXZlZFNlbGVjdGlvbi5tb3ZlVG9FbGVtZW50VGV4dCh0ZW1wU3Bhbik7DQorICAgICAgICBzYXZlZFNlbGVjdGlvbi5zZWxlY3QoKTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgJ0p1c3RpZmljYXRpb25IYWNrJzoNCisgICAgICAgIC8vIFNldHRpbmcgdGhlIGp1c3RpZmljYXRpb24gb24gYW4gZWxlbWVudCBjYXVzZXMgSUUgdG8gYWx0ZXIgdGhlDQorICAgICAgICAvLyBtYXJrdXAgc28gdGhhdCB0aGUgc2VsZWN0aW9uIHdlIHdhbnQgdG8gbWFrZSBpcyBwb3NzaWJsZS4NCisgICAgICAgIC8vIFVuZm9ydHVuYXRlbHksIHRoaXMgY2FuIGZvcmNlIGJsb2NrIGVsZW1lbnRzIHRvIGJlIGtpY2tlZCBvdXQgb2YNCisgICAgICAgIC8vIHRoZWlyIGNvbnRhaW5pbmcgZWxlbWVudCwgc28gaXQgaXMgbm90IHJlY29tbWVuZGVkLg0KKw0KKyAgICAgICAgLy8gU2V0IGEgbm9uLXZhbGlkIGNoYXJhY3RlciBhbmQgdXNlIGl0IHRvIGFuY2hvciBvdXIgc2VsZWN0aW9uLg0KKyAgICAgICAgdmFyIG1hZ2ljU3RyaW5nID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxKTsNCisgICAgICAgIHNhdmVkU2VsZWN0aW9uLnBhc3RlSFRNTChtYWdpY1N0cmluZyk7DQorICAgICAgICBzYXZlZFNlbGVjdGlvbi5maW5kVGV4dChtYWdpY1N0cmluZywtMSk7DQorICAgICAgICBzYXZlZFNlbGVjdGlvbi5zZWxlY3QoKTsNCisNCisgICAgICAgIC8vIEkgZG9uJ3Qga25vdyBob3cgdG8gZmluZCBvdXQgaWYgdGhlcmUncyBhbiBleGlzdGluZyBqdXN0aWZpY2F0aW9uIG9uDQorICAgICAgICAvLyB0aGlzIGVsZW1lbnQuICBIb3BlZnVsbHksIHlvdSdyZSBkb2luZyBhbGwgb2YgeW91ciBzdHlsaW5nIG91dHNpZGUsDQorICAgICAgICAvLyBzbyBJJ2xsIGp1c3QgY2xlYXIuICBJIGFscmVhZHkgdG9sZCB5b3UgdGhpcyB3YXMgYSBoYWNrLg0KKyAgICAgICAgc2F2ZWRTZWxlY3Rpb24uZXhlY0NvbW1hbmQoJ0p1c3RpZnlOb25lJyk7DQorICAgICAgICBzYXZlZFNlbGVjdGlvbi5wYXN0ZUhUTUwoJycpOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSAnVmlzaWJsZUN1ZSc6DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgaW5zZXJ0IGEgbGl0dGxlIGJveCBjaGFyYWN0ZXIgdG8gaG9sZCBvdXIgc2VsZWN0aW9uDQorICAgICAgICAvLyBpbiB0aGUgZGVzaXJlZCBzcG90LiAgV2UncmUgZGVwZW5kaW5nIG9uIHRoZSB1c2VyIHRvIHNlZSB0aGlzIHVnbHkNCisgICAgICAgIC8vIGJveCBhbmQgZGVsZXRlIGl0IHRoZW1zZWx2ZXMuDQorICAgICAgICB2YXIgbWFnaWNTdHJpbmcgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDEpOw0KKyAgICAgICAgc2F2ZWRTZWxlY3Rpb24ucGFzdGVIVE1MKG1hZ2ljU3RyaW5nKTsNCisgICAgICAgIHNhdmVkU2VsZWN0aW9uLmZpbmRUZXh0KG1hZ2ljU3RyaW5nLC0xKTsNCisgICAgICAgIHNhdmVkU2VsZWN0aW9uLnNlbGVjdCgpOw0KKyAgICB9DQorICB9DQorfQ0KKw0KKy8qKg0KKyAqIFNlbGVjdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBub2RlLiAgSWYgdGhlIG5vZGUgaXMgYSAiY29udHJvbCIgdHlwZSBlbGVtZW50LCAoaW1hZ2UsIGZvcm0gaW5wdXQsIHRhYmxlKQ0KKyAqIHRoZSBub2RlIGl0c2VsZiBpcyBzZWxlY3RlZCBmb3IgbWFuaXB1bGF0aW9uLg0KKyAqDQorICogQHBhcmFtIG5vZGUgRG9tTm9kZSANCisgKiBAcGFyYW0gY29sbGFwc2VUb1N0YXJ0IEEgYm9vbGVhbiB0aGF0LCB3aGVuIHN1cHBsaWVkLCBzYXlzIHRvIGNvbGxhcHNlIHRoZSBzZWxlY3Rpb24uIFRydWUgY29sbGFwc2VzIHRvIHRoZSBzdGFydCwgYW5kIGZhbHNlIHRvIHRoZSBlbmQuDQorICovDQorIA0KK1hpbmhhLnByb3RvdHlwZS5zZWxlY3ROb2RlQ29udGVudHMgPSBmdW5jdGlvbihub2RlLCBjb2xsYXBzZVRvU3RhcnQpDQorew0KKyAgdGhpcy5mb2N1c0VkaXRvcigpOw0KKyAgdGhpcy5mb3JjZVJlZHJhdygpOw0KKyAgdmFyIHJhbmdlOw0KKyAgdmFyIGNvbGxhcHNlZCA9IHR5cGVvZiBjb2xsYXBzZVRvU3RhcnQgPT0gInVuZGVmaW5lZCIgPyB0cnVlIDogZmFsc2U7DQorICAvLyBUYWJsZXMgYW5kIEltYWdlcyBnZXQgc2VsZWN0ZWQgYXMgIm9iamVjdHMiIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGNvbnRlbnRzDQorICBpZiAoIGNvbGxhcHNlZCAmJiBub2RlLnRhZ05hbWUgJiYgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkubWF0Y2goL3RhYmxlfGltZ3xpbnB1dHxzZWxlY3R8dGV4dGFyZWEvKSApDQorICB7DQorICAgIHJhbmdlID0gdGhpcy5fZG9jLmJvZHkuY3JlYXRlQ29udHJvbFJhbmdlKCk7DQorICAgIHJhbmdlLmFkZChub2RlKTsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgcmFuZ2UgPSB0aGlzLl9kb2MuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTsNCisgICAgaWYgKDMgPT0gbm9kZS5ub2RlVHlwZSkNCisgICAgew0KKyAgICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIHRleHQgbm9kZXMsIHNpbmNlIG1vdmVUb0VsZW1lbnRUZXh0IGZhaWxzIHdoZW4NCisgICAgICAvLyBhdHRlbXB0aW5nIHRvIHNlbGVjdCBhIHRleHQgbm9kZQ0KKw0KKyAgICAgIC8vIFNpbmNlIHRoZSBUZXh0UmFuZ2UgaGFzIGEgcXVpdGUgbGltaXRlZCBBUEksIG91ciBzdHJhdGVneSBoZXJlIGlzIHRvDQorICAgICAgLy8gc2VsZWN0ICh3aGVyZSBwb3NzaWJsZSkgbmVpZ2hib3Jpbmcgbm9kZXMsIGFuZCB0aGVuIG1vdmUgb3VyIHJhbmdlcw0KKyAgICAgIC8vIGVuZHBvaW50cyB0byBiZSBqdXN0IGluc2lkZSBvZiBuZWlnaGJvcmluZyBzZWxlY3Rpb25zLg0KKyAgICAgIGlmIChub2RlLnBhcmVudE5vZGUpDQorICAgICAgew0KKyAgICAgICAgcmFuZ2UubW92ZVRvRWxlbWVudFRleHQobm9kZS5wYXJlbnROb2RlKTsNCisgICAgICB9IGVsc2UNCisgICAgICB7DQorICAgICAgICByYW5nZS5tb3ZlVG9FbGVtZW50VGV4dCh0aGlzLl9kb2MuYm9keSk7DQorICAgICAgfQ0KKyAgICAgIHZhciB0cmltbWluZ1JhbmdlID0gdGhpcy5fZG9jLmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7DQorDQorICAgICAgLy8gSW4gcmFyZSBzaXR1YXRpb25zIChtb3N0bHkgaHRtbCB0aGF0J3MgYmVlbiBtb25rZXllZCBhYm91dCB3aXRoIGJ5DQorICAgICAgLy8gamF2YXNjcmlwdCwgYnV0IHRoYXQncyB3aGF0IHdlJ3JlIGRvaW5nKSB0aGVyZSBjYW4gYmUgdHdvIGFkamFjZW50DQorICAgICAgLy8gdGV4dCBub2Rlcy4gIFNpbmNlIHdlIHdvbid0IGJlIGFibGUgdG8gaGFuZGxlIHRoZXNlLCB3ZSdsbCBoYXZlIHRvDQorICAgICAgLy8gaGFjayBhbiBvZmZzZXQgYnkgJ21vdmUnaW5nIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGV5IGNvbnRhaW4uDQorICAgICAgdmFyIHRleHRoYWNrT2Zmc2V0ID0gMDsNCisgICAgICB2YXIgYm9yZGVyRWxlbWVudD1ub2RlLnByZXZpb3VzU2libGluZzsNCisgICAgICBmb3IgKDsgYm9yZGVyRWxlbWVudCAmJiAoMSAhPSBib3JkZXJFbGVtZW50Lm5vZGVUeXBlKTsgYm9yZGVyRWxlbWVudCA9IGJvcmRlckVsZW1lbnQucHJldmlvdXNTaWJsaW5nKQ0KKyAgICAgIHsNCisgICAgICAgIGlmICgzID09IGJvcmRlckVsZW1lbnQubm9kZVR5cGUpDQorICAgICAgICB7DQorICAgICAgICAgIC8vIElFIGRvZXNuJ3QgY291bnQgJ1xyJyBhcyBhIGNoYXJhY3Rlciwgc28gd2UgaGF2ZSB0byBhZGp1c3QgdGhlIG9mZnNldC4NCisgICAgICAgICAgdGV4dGhhY2tPZmZzZXQgKz0gYm9yZGVyRWxlbWVudC5ub2RlVmFsdWUubGVuZ3RoLWJvcmRlckVsZW1lbnQubm9kZVZhbHVlLnNwbGl0KCdccicpLmxlbmd0aC0xOw0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisgICAgICBpZiAoYm9yZGVyRWxlbWVudCAmJiAoMSA9PSBib3JkZXJFbGVtZW50Lm5vZGVUeXBlKSkNCisgICAgICB7DQorICAgICAgICB0cmltbWluZ1JhbmdlLm1vdmVUb0VsZW1lbnRUZXh0KGJvcmRlckVsZW1lbnQpOw0KKyAgICAgICAgcmFuZ2Uuc2V0RW5kUG9pbnQoJ1N0YXJ0VG9FbmQnLCB0cmltbWluZ1JhbmdlKTsNCisgICAgICB9DQorICAgICAgaWYgKHRleHRoYWNrT2Zmc2V0KQ0KKyAgICAgIHsNCisgICAgICAgIC8vIFdlIG5vdyBuZWVkIHRvIG1vdmUgdGhlIHNlbGVjdGlvbiBmb3J3YXJkIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycw0KKyAgICAgICAgLy8gaW4gYWxsIHRleHQgbm9kZXMgaW4gYmV0d2VlbiBvdXIgdGV4dCBub2RlIGFuZCBvdXIgcmFuZ2VzIHN0YXJ0aW5nDQorICAgICAgICAvLyBib3JkZXIuDQorICAgICAgICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsdGV4dGhhY2tPZmZzZXQpOw0KKyAgICAgIH0NCisNCisgICAgICAvLyBZb3VwaSEgIE5vdyB3ZSBnZXQgdG8gcmVwZWF0IHRoaXMgdHJpbW1pbmcgb24gdGhlIHJpZ2h0IHNpZGUuDQorICAgICAgdGV4dGhhY2tPZmZzZXQgPSAwOw0KKyAgICAgIGJvcmRlckVsZW1lbnQ9bm9kZS5uZXh0U2libGluZzsNCisgICAgICBmb3IgKDsgYm9yZGVyRWxlbWVudCAmJiAoMSAhPSBib3JkZXJFbGVtZW50Lm5vZGVUeXBlKTsgYm9yZGVyRWxlbWVudCA9IGJvcmRlckVsZW1lbnQubmV4dFNpYmxpbmcpDQorICAgICAgew0KKyAgICAgICAgaWYgKDMgPT0gYm9yZGVyRWxlbWVudC5ub2RlVHlwZSkNCisgICAgICAgIHsNCisgICAgICAgICAgLy8gSUUgZG9lc24ndCBjb3VudCAnXHInIGFzIGEgY2hhcmFjdGVyLCBzbyB3ZSBoYXZlIHRvIGFkanVzdCB0aGUgb2Zmc2V0Lg0KKyAgICAgICAgICB0ZXh0aGFja09mZnNldCArPSBib3JkZXJFbGVtZW50Lm5vZGVWYWx1ZS5sZW5ndGgtYm9yZGVyRWxlbWVudC5ub2RlVmFsdWUuc3BsaXQoJ1xyJykubGVuZ3RoLTE7DQorICAgICAgICAgIGlmICghYm9yZGVyRWxlbWVudC5uZXh0U2libGluZykNCisgICAgICAgICAgew0KKyAgICAgICAgICAgIC8vIFdoZW4gYSB0ZXh0IG5vZGUgaXMgdGhlIGxhc3QgY2hpbGQsIElFIGFkZHMgYW4gZXh0cmEgc2VsZWN0aW9uDQorICAgICAgICAgICAgLy8gInBsYWNlaG9sZGVyIiBmb3IgdGhlIG5ld2xpbmUgY2hhcmFjdGVyLiAgV2UgbmVlZCB0byBhZGp1c3QgZm9yDQorICAgICAgICAgICAgLy8gdGhpcyBjaGFyYWN0ZXIgYXMgd2VsbC4NCisgICAgICAgICAgICB0ZXh0aGFja09mZnNldCArPSAxOw0KKyAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgfQ0KKyAgICAgIGlmIChib3JkZXJFbGVtZW50ICYmICgxID09IGJvcmRlckVsZW1lbnQubm9kZVR5cGUpKQ0KKyAgICAgIHsNCisgICAgICAgIHRyaW1taW5nUmFuZ2UubW92ZVRvRWxlbWVudFRleHQoYm9yZGVyRWxlbWVudCk7DQorICAgICAgICByYW5nZS5zZXRFbmRQb2ludCgnRW5kVG9TdGFydCcsIHRyaW1taW5nUmFuZ2UpOw0KKyAgICAgIH0NCisgICAgICBpZiAodGV4dGhhY2tPZmZzZXQpDQorICAgICAgew0KKyAgICAgICAgLy8gV2Ugbm93IG5lZWQgdG8gbW92ZSB0aGUgc2VsZWN0aW9uIGJhY2t3YXJkIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycw0KKyAgICAgICAgLy8gaW4gYWxsIHRleHQgbm9kZXMgaW4gYmV0d2VlbiBvdXIgdGV4dCBub2RlIGFuZCBvdXIgcmFuZ2VzIGVuZGluZw0KKyAgICAgICAgLy8gYm9yZGVyLg0KKyAgICAgICAgcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywtdGV4dGhhY2tPZmZzZXQpOw0KKyAgICAgIH0NCisgICAgICBpZiAoIW5vZGUubmV4dFNpYmxpbmcpDQorICAgICAgew0KKyAgICAgICAgLy8gQWJvdmUgd2UgcGVyZm9ybWVkIGEgc2xpZ2h0IGFkanVzdG1lbnQgdG8gdGhlIG9mZnNldCBpZiB0aGUgdGV4dA0KKyAgICAgICAgLy8gbm9kZSBjb250YWlucyBhIHNlbGVjdGFibGUgIm5ld2xpbmUiLiAgV2UgbmVlZCB0byBkbyB0aGUgc2FtZSBpZiB0aGUNCisgICAgICAgIC8vIG5vZGUgd2UgYXJlIHRyeWluZyB0byBzZWxlY3QgY29udGFpbnMgYSBuZXdsaW5lLg0KKyAgICAgICAgcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywtMSk7DQorICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICByYW5nZS5tb3ZlVG9FbGVtZW50VGV4dChub2RlKTsNCisgICAgfQ0KKyAgfQ0KKyAgaWYgKHR5cGVvZiBjb2xsYXBzZVRvU3RhcnQgIT0gInVuZGVmaW5lZCIpDQorICB7DQorICAgIHJhbmdlLmNvbGxhcHNlKGNvbGxhcHNlVG9TdGFydCk7DQorICAgIGlmICghY29sbGFwc2VUb1N0YXJ0KQ0KKyAgICB7DQorICAgICAgcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLC0xKTsNCisgICAgICByYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLC0xKTsNCisgICAgfQ0KKyAgfQ0KKyAgcmFuZ2Uuc2VsZWN0KCk7DQorfTsNCisgIA0KKy8qKiBJbnNlcnQgSFRNTCBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiwgZGVsZXRpbmcgdGhlIHNlbGVjdGlvbiBpZiBhbnkuIA0KKyAqICANCisgKiAgQHBhcmFtIGh0bWwgc3RyaW5nDQorICovDQorIA0KK1hpbmhhLnByb3RvdHlwZS5pbnNlcnRIVE1MID0gZnVuY3Rpb24oaHRtbCkNCit7DQorICB0aGlzLmZvY3VzRWRpdG9yKCk7DQorICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsNCisgIHZhciByYW5nZSA9IHRoaXMuY3JlYXRlUmFuZ2Uoc2VsKTsNCisgIHJhbmdlLnBhc3RlSFRNTChodG1sKTsNCit9Ow0KKw0KKw0KKy8qKiBHZXQgdGhlIEhUTUwgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiAgSFRNTCByZXR1cm5lZCBoYXMgbm90IGJlZW4gcGFzc2VkIHRocm91Z2ggb3V0d2FyZEhUTUwuDQorICoNCisgKiBAcmV0dXJucyBzdHJpbmcNCisgKi8NCisgDQorWGluaGEucHJvdG90eXBlLmdldFNlbGVjdGVkSFRNTCA9IGZ1bmN0aW9uKCkNCit7DQorICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsNCisgIGlmICh0aGlzLnNlbGVjdGlvbkVtcHR5KHNlbCkpIHJldHVybiAnJzsNCisgIHZhciByYW5nZSA9IHRoaXMuY3JlYXRlUmFuZ2Uoc2VsKTsNCisgIA0KKyAgLy8gTmVlZCB0byBiZSBjYXJlZnVsIG9mIGNvbnRyb2wgcmFuZ2VzIHdoaWNoIHdvbid0IGhhdmUgaHRtbFRleHQNCisgIGlmKCByYW5nZS5odG1sVGV4dCApDQorICB7DQorICAgIHJldHVybiByYW5nZS5odG1sVGV4dDsNCisgIH0NCisgIGVsc2UgaWYocmFuZ2UubGVuZ3RoID49IDEpDQorICB7DQorICAgIHJldHVybiByYW5nZS5pdGVtKDApLm91dGVySFRNTDsNCisgIH0NCisgIA0KKyAgcmV0dXJuICcnOw0KK307DQorICANCisvKiogR2V0IGEgU2VsZWN0aW9uIG9iamVjdCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uICBOb3RlIHRoYXQgc2VsZWN0aW9uIG9iamVjdHMgYXJlIGJyb3dzZXIgc3BlY2lmaWMuDQorICoNCisgKiBAcmV0dXJucyBTZWxlY3Rpb24NCisgKi8NCisgDQorWGluaGEucHJvdG90eXBlLmdldFNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkNCit7DQorICByZXR1cm4gdGhpcy5fZG9jLnNlbGVjdGlvbjsNCit9Ow0KKw0KKy8qKiBDcmVhdGUgYSBSYW5nZSBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gc2VsZWN0aW9uLiAgTm90ZSB0aGF0IHJhbmdlIG9iamVjdHMgYXJlIGJyb3dzZXIgc3BlY2lmaWMuDQorICoNCisgKiAgQHBhcmFtIHNlbCBTZWxlY3Rpb24gb2JqZWN0IChzZWUgZ2V0U2VsZWN0aW9uKQ0KKyAqICBAcmV0dXJucyBSYW5nZQ0KKyAqLw0KKyANCitYaW5oYS5wcm90b3R5cGUuY3JlYXRlUmFuZ2UgPSBmdW5jdGlvbihzZWwpDQorew0KKyAgaWYgKCFzZWwpIHNlbCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7DQorICANCisgIC8vIHRpY2tldDoxNTA4IC0gd2hlbiB5b3UgZG8gYSBrZXkgZXZlbnQgd2l0aGluIGEgDQorICAvLyBhYnNvbHV0ZSBwb3NpdGlvbiBkaXYsIGluIElFLCB0aGUgdG9vbGJhciB1cGRhdGUNCisgIC8vIGZvciBmb3JtYXRibG9jayBldGMgY2F1c2VzIGEgZ2V0UGFyZW50RWxlbWVudCgpIChhYm92ZSkNCisgIC8vIHdoaWNoIHByb2R1Y2VzIGEgIk5vbmUiIHNlbGVjdCwgdGhlbiBpZiB3ZSBmb2N1c0VkaXRvcigpIGl0DQorICAvLyBkZWZvY3VzZXMgdGhlIGFic29sdXRlIGRpdiBhbmQgZm9jdXNlcyBpbnRvIHRoZSBpZnJhbWUgb3V0c2lkZSBvZiB0aGUNCisgIC8vIGRpdiBzb21ld2hlcmUuICANCisgIC8vDQorICAvLyBSZW1vdmluZyB0aGlzIGlzIHByb2JhYmx5IGEgd29ya2Fyb3VuZCBhbmQgbWF5YmUgaXQgYnJlYWtzIHNvbWV0aGluZyBlbHNlDQorICAvLyBmb2N1c0VkaXRvciBpcyB1c2VkIGluIGEgbnVtYmVyIG9mIHNwb3RzLCBJIHdvdWRsIGhhdmUgdGhvdWdodCBpdCBzaG91bGQNCisgIC8vIGRvIG5vdGhpbmcgaWYgdGhlIGVkaXRvciBpcyBhbHJlYWR5IGZvY3VzZWQuDQorICAvLw0KKyAgLy8gaWYoc2VsLnR5cGUgPT0gJ05vbmUnKSB0aGlzLmZvY3VzRWRpdG9yKCk7DQorICANCisgIHJldHVybiBzZWwuY3JlYXRlUmFuZ2UoKTsNCit9Ow0KKw0KKy8qKiBEdWUgdG8gYnJvd3NlciBkaWZmZXJlbmNlcywgc29tZSBrZXlzIHdoaWNoIFhpbmhhIHByZWZlcnMgdG8gY2FsbCBhIGtleVByZXNzDQorICogICBkbyBub3QgZ2V0IGFuIGFjdHVhbCBrZXlwcmVzcyBldmVudC4gIFRoaXMgYnJvd3NlciBzcGVjaWZpYyBmdW5jdGlvbiANCisgKiAgIG92ZXJyaWRkZW4gaW4gdGhlIGJyb3dzZXIncyBlbmdpbmUgKGVnIG1vZHVsZXMvV2ViS2l0L1dlYktpdC5qcykgYXMgcmVxdWlyZWQNCisgKiAgIHRha2VzIGEga2V5ZG93biBldmVudCB0eXBlIGFuZCB0ZWxscyB1cyBpZiB3ZSBzaG91bGQgdHJlYXQgaXQgYXMgYSANCisgKiAgIGtleXByZXNzIGV2ZW50IHR5cGUuDQorICoNCisgKiAgVG8gYmUgY2xlYXIsIHRoZSBrZXlzIHdlIGFyZSBpbnRlcmVzdGVkIGhlcmUgYXJlDQorICogICAgICAgIEVzY2FwZSwgVGFiLCBCYWNrc3BhY2UsIERlbGV0ZSwgRW50ZXINCisgKiAgIHRoZXNlIGFyZSAibm9uIHByaW50YWJsZSIgY2hhcmFjdGVycyB3aGljaCB3ZSBzdGlsbCB3YW50IHRvIHJlZ2FyZCBnZW5lcmFsbHkNCisgKiAgIGFzIGEga2V5cHJlc3MuICANCisgKiANCisgKiAgSWYgdGhlIGJyb3dzZXIgZG9lcyBub3QgcmVwb3J0IHRoZXNlIGFzIGEga2V5cHJlc3MNCisgKiAgICggaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9kNGUvcmF3LWZpbGUvdGlwL2tleS1ldmVudC10ZXN0Lmh0bWwgKQ0KKyAqICAgdGhlbiB0aGlzIGZ1bmN0aW9uIG11c3QgcmV0dXJuIHRydWUgZm9yIHN1Y2gga2V5ZG93biBldmVudHMgYXMgaXQgaXMNCisgKiAgIGdpdmVuLg0KKyAqIA0KKyAqIEBwYXJhbSBLZXlib2FyZEV2ZW50IHdpdGgga2V5RXZlbnQudHlwZSA9PSBrZXlkb3duDQorICogQHJldHVybiBib29sZWFuDQorICovDQorDQorWGluaGEucHJvdG90eXBlLmlzS2V5RG93blRoYXRTaG91bGRHZXRCdXREb2VzTm90R2V0QUtleVByZXNzRXZlbnQgPSBmdW5jdGlvbihrZXlFdmVudCkNCit7DQorICAvLyBEb20gMw0KKyAgaWYodHlwZW9mIGtleUV2ZW50LmtleSAhPSAndW5kZWZpbmVkJykNCisgIHsNCisgICAgLy8gRm91bmQgdXNpbmcgSUUxMSBpbiA5LTEwIG1vZGVzDQorICAgIGlmKGtleUV2ZW50LmtleS5tYXRjaCgvXihUYWJ8QmFja3NwYWNlfERlbCkvKSkNCisgICAgew0KKyAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9DQorICB9DQorICAvLyBMZWdhY3kNCisgIGVsc2UNCisgIHsNCisgICAgLy8gRm91bmQgdXNpbmcgSUUxMSBpbiA1LTggbW9kZXMNCisgICAgaWYoa2V5RXZlbnQua2V5Q29kZSA9PSA5ICAgLy8gVGFiDQorICAgIHx8IGtleUV2ZW50LmtleUNvZGUgPT0gOCAgIC8vIEJhY2tzcGFjZQ0KKyAgICB8fCBrZXlFdmVudC5rZXlDb2RlID09IDQ2ICAvLyBEZWwNCisgICAgKSByZXR1cm4gdHJ1ZTsNCisgIH0NCit9Ow0KKw0KKy8qKiBSZXR1cm4gdGhlIGNoYXJhY3RlciAoYXMgYSBzdHJpbmcpIG9mIGEga2V5RXZlbnQgIC0gaWUsIHByZXNzIHRoZSAnYScga2V5IGFuZA0KKyAqICB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiAnYScsIHByZXNzIFNISUZULWEgYW5kIGl0IHdpbGwgcmV0dXJuICdBJy4NCisgKiANCisgKiAgQHBhcmFtICAga2V5RXZlbnQNCisgKiAgQHJldHVybnMgc3RyaW5nDQorICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCitYaW5oYS5wcm90b3R5cGUuZ2V0S2V5ID0gZnVuY3Rpb24oa2V5RXZlbnQpDQorew0KKyAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoa2V5RXZlbnQua2V5Q29kZSk7DQorfQ0KKw0KKw0KKy8qKiBSZXR1cm4gdGhlIEhUTUwgc3RyaW5nIG9mIHRoZSBnaXZlbiBFbGVtZW50LCBpbmNsdWRpbmcgdGhlIEVsZW1lbnQuDQorICogDQorICogQHBhcmFtIGVsZW1lbnQgSFRNTCBFbGVtZW50IERvbU5vZGUNCisgKiBAcmV0dXJucyBzdHJpbmcNCisgKi8NCisgDQorWGluaGEuZ2V0T3V0ZXJIVE1MID0gZnVuY3Rpb24oZWxlbWVudCkNCit7DQorICByZXR1cm4gZWxlbWVudC5vdXRlckhUTUw7DQorfTsNCisNCisvLyBDb250cm9sIGNoYXJhY3RlciBmb3IgcmV0YWluaW5nIGVkaXQgbG9jYXRpb24gd2hlbiBzd2l0Y2hpbmcgbW9kZXMNCitYaW5oYS5jYyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHgyMDA5KTsNCisNCitYaW5oYS5wcm90b3R5cGUuc2V0Q0MgPSBmdW5jdGlvbiAoIHRhcmdldCApDQorew0KKyAgdmFyIGNjID0gWGluaGEuY2M7DQorICBpZiAoIHRhcmdldCA9PSAidGV4dGFyZWEiICkNCisgIHsNCisgICAgdmFyIHRhID0gdGhpcy5fdGV4dEFyZWE7DQorICAgIHZhciBwb3MgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsNCisgICAgcG9zLmNvbGxhcHNlKCk7DQorICAgIHBvcy50ZXh0ID0gY2M7DQorICAgIHZhciBpbmRleCA9IHRhLnZhbHVlLmluZGV4T2YoIGNjICk7DQorICAgIHZhciBiZWZvcmUgPSB0YS52YWx1ZS5zdWJzdHJpbmcoIDAsIGluZGV4ICk7DQorICAgIHZhciBhZnRlciAgPSB0YS52YWx1ZS5zdWJzdHJpbmcoIGluZGV4ICsgY2MubGVuZ3RoICwgdGEudmFsdWUubGVuZ3RoICk7DQorICAgIA0KKyAgICBpZiAoIGFmdGVyLm1hdGNoKC9eW148XSo+LykgKSAvLyBtYWtlIHN1cmUgY3Vyc29yIGlzIGluIGFuIGVkaXRhYmxlIGFyZWEgKG91dHNpZGUgdGFncywgc2NyaXB0IGJsb2NrcywgZW50aXRpZXMsIGFuZCBpbnNpZGUgdGhlIGJvZHkpDQorICAgIHsNCisgICAgICB2YXIgdGFnRW5kID0gYWZ0ZXIuaW5kZXhPZigiPiIpICsgMTsNCisgICAgICB0YS52YWx1ZSA9IGJlZm9yZSArIGFmdGVyLnN1YnN0cmluZyggMCwgdGFnRW5kICkgKyBjYyArIGFmdGVyLnN1YnN0cmluZyggdGFnRW5kLCBhZnRlci5sZW5ndGggKTsNCisgICAgfQ0KKyAgICBlbHNlIHRhLnZhbHVlID0gYmVmb3JlICsgY2MgKyBhZnRlcjsNCisgICAgdGEudmFsdWUgPSB0YS52YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAgKCcoJlteJytjYysnO10qPykoJytjYysnKShbXicrY2MrJ10qPzspJyksICIkMSQzJDIiKTsNCisgICAgdGEudmFsdWUgPSB0YS52YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAgKCcoPHNjcmlwdFtePl0qPlteJytjYysnXSo/KSgnK2NjKycpKFteJytjYysnXSo/PFwvc2NyaXB0PiknKSwgIiQxJDMkMiIpOw0KKyAgICB0YS52YWx1ZSA9IHRhLnZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCAoJ14oW14nK2NjKyddKikoJytjYysnKShbXicrY2MrJ10qPGJvZHlbXj5dKj4pKC4qPyknKSwgIiQxJDMkMiQ0Iik7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIHZhciBzZWwgPSB0aGlzLmdldFNlbGVjdGlvbigpOw0KKyAgICB2YXIgciA9IHNlbC5jcmVhdGVSYW5nZSgpOyANCisgICAgaWYgKCBzZWwudHlwZSA9PSAnQ29udHJvbCcgKQ0KKyAgICB7DQorICAgICAgdmFyIGNvbnRyb2wgPSByLml0ZW0oMCk7DQorICAgICAgY29udHJvbC5vdXRlckhUTUwgKz0gY2M7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgci5jb2xsYXBzZSgpOw0KKyAgICAgIHIudGV4dCA9IGNjOw0KKyAgICB9DQorICB9DQorfTsNCisNCitYaW5oYS5wcm90b3R5cGUuZmluZENDID0gZnVuY3Rpb24gKCB0YXJnZXQgKQ0KK3sNCisgIHZhciBmaW5kSW4gPSAoIHRhcmdldCA9PSAndGV4dGFyZWEnICkgPyB0aGlzLl90ZXh0QXJlYSA6IHRoaXMuX2RvYy5ib2R5Ow0KKyAgcmFuZ2UgPSBmaW5kSW4uY3JlYXRlVGV4dFJhbmdlKCk7DQorICAvLyBpbiBjYXNlIHRoZSBjdXJzb3IgaXMgaW5zaWRlIGEgbGluayBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZnJvbSBhIHVybA0KKyAgLy8gdGhlIGNjIGFsc28gYXBwZWFycyBpbiB0aGUgdXJsIGFuZCB3ZSBoYXZlIHRvIHN0cmlwIGl0IG91dCBhZGRpdGlvbmFsbHkgDQorICBpZiggcmFuZ2UuZmluZFRleHQoIGVzY2FwZShYaW5oYS5jYykgKSApDQorICB7DQorICAgIHJhbmdlLnNlbGVjdCgpOw0KKyAgICByYW5nZS50ZXh0ID0gJyc7DQorICAgIHJhbmdlLnNlbGVjdCgpOw0KKyAgfQ0KKyAgaWYoIHJhbmdlLmZpbmRUZXh0KCBYaW5oYS5jYyApICkNCisgIHsNCisgICAgcmFuZ2Uuc2VsZWN0KCk7DQorICAgIHJhbmdlLnRleHQgPSAnJzsNCisgICAgcmFuZ2Uuc2VsZWN0KCk7DQorICB9DQorICBpZiAoIHRhcmdldCA9PSAndGV4dGFyZWEnICkgdGhpcy5fdGV4dEFyZWEuZm9jdXMoKTsNCit9Ow0KKw0KKy8qKiBSZXR1cm4gYSBkb2N0eXBlIG9yIGVtcHR5IHN0cmluZyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZG9jdW1lbnQgaXMgaW4gUWlya3Ntb2RlIG9yIFN0YW5kYXJkcyBDb21wbGlhbnQgTW9kZQ0KKyAqICBJdCdzIGhhcmRseSBwb3NzaWJsZSB0byBkZXRlY3QgdGhlIGFjdHVhbCBkb2N0eXBlIHdpdGhvdXQgdW5yZWFzb25hYmxlIGVmZm9ydCwgc28gd2Ugc2V0IEhUTUwgNC4wMSBqdXN0IHRvIHRyaWdnZXIgdGhlIHJlbmRlcmluZyBtb2RlDQorICogDQorICogQHBhcmFtIGRvYyBET00gZWxlbWVudCBkb2N1bWVudA0KKyAqIEByZXR1cm5zIHN0cmluZyBkb2N0eXBlIHx8IGVtcHR5DQorICovDQorWGluaGEuZ2V0RG9jdHlwZSA9IGZ1bmN0aW9uIChkb2MpDQorew0KKyAgcmV0dXJuIChkb2MuY29tcGF0TW9kZSA9PSAiQ1NTMUNvbXBhdCIgJiYgWGluaGEuaWVfdmVyc2lvbiA8IDggKSA/ICc8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4nIDogJyc7DQorfTsNCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL09wZXJhL09wZXJhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9PcGVyYS9PcGVyYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTY3ZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9PcGVyYS9PcGVyYS5qcwpAQCAtMCwwICsxLDk1NCBAQAorCisgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS06bm9UYWJzPXRydWU6dGFiU2l6ZT0yOmluZGVudFNpemU9MjotLQorICAgIC0tCisgICAgLS0KKyAgICAtLSAgTk9USUNFIE1vZGVybiBPcGVyYSBkb2VzIG5vdCB1c2UgdGhpcyBlbmdpbmUgYW55IG1vcmUsIGl0IGlkZW50aWZpZXMgYXMKKyAgICAtLSAgICAgICAgICAgYW5kIHVzZXMgV2ViS2l0IChPcGVyYSBpcyB0aGVzZSBkYXlzIGJhc2VkIG9uIEJsaW5rKS4KKyAgICAtLQorICAgIC0tICAgUGVvcGxlIHVzaW5nIG9sZGVyIHZlcnNpb25zIG9mIE9wZXJhIHRoYXQgbmVlZCB0aGlzIGVuZ2luZSBzaG91bGQKKyAgICAtLSAgIHVwZ3JhZGUgdG8gYSBXZWJLaXQgb3IgR2Vja28gYmFzZWQgYnJvd3Nlci4KKyAgICAtLQorICAgIC0tICBUaGlzIGVuZ2luZSBpcyBubyBsb25nZXIgb2ZmaWNpYWxseSBzdXBwb3J0ZWQgb3IgdGVzdGVkLgorICAgIC0tCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAtLSAgWGluaGEgKGlzIG5vdCBodG1sQXJlYSkgLSBodHRwOi8veGluaGEuZ29nby5jby5uei8KKyAgICAtLQorICAgIC0tICBVc2Ugb2YgWGluaGEgaXMgZ3JhbnRlZCBieSB0aGUgdGVybXMgb2YgdGhlIGh0bWxBcmVhIExpY2Vuc2UgKGJhc2VkIG9uCisgICAgLS0gIEJTRCBsaWNlbnNlKSAgcGxlYXNlIHJlYWQgbGljZW5zZS50eHQgaW4gdGhpcyBwYWNrYWdlIGZvciBkZXRhaWxzLgorICAgIC0tCisgICAgLS0gIFhpbmhhIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIHdvcmsgYnkgTWloYWkgQmF6b24gd2hpY2ggaXM6CisgICAgLS0gICAgICBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNCBkeW5hcmNoLmNvbS4KKyAgICAtLSAgICAgIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIGludGVyYWN0aXZldG9vbHMuY29tLCBpbmMuCisgICAgLS0gICAgICBUaGlzIGNvcHlyaWdodCBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlLgorICAgIC0tCisgICAgLS0gVGhpcyBpcyB0aGUgT3BlcmEgY29tcGF0YWJpbGl0eSBwbHVnaW4sIHBhcnQgb2YgdGhlIFhpbmhhIGNvcmUuCisgICAgLS0KKyAgICAtLSAgVGhlIGZpbGUgaXMgbG9hZGVkIGFzIGEgc3BlY2lhbCBwbHVnaW4gYnkgdGhlIFhpbmhhIENvcmUgd2hlbgorICAgIC0tICBYaW5oYSBpcyBiZWluZyBydW4gdW5kZXIgYW4gT3BlcmEgYmFzZWQgYnJvd3NlciB3aXRoIHRoZSBNaWRhcworICAgIC0tICBlZGl0aW5nIEFQSS4KKyAgICAtLQorICAgIC0tICBJdCBwcm92aWRlcyBpbXBsZW1lbnRhdGlvbiBhbmQgc3BlY2lhbGlzYXRpb24gZm9yIHZhcmlvdXMgbWV0aG9kcworICAgIC0tICBpbiB0aGUgY29yZSB3aGVyZSBkaWZmZXJlbnQgYXBwcm9hY2hlcyBwZXIgYnJvd3NlciBhcmUgcmVxdWlyZWQuCisgICAgLS0KKyAgICAtLSAgRGVzaWduIE5vdGVzOjoKKyAgICAtLSAgIE1vc3QgbWV0aG9kcyBoZXJlIHdpbGwgc2ltcGx5IGJlIG92ZXJyaWRpbmcgWGluaGEucHJvdG90eXBlLjxtZXRob2Q+CisgICAgLS0gICBhbmQgc2hvdWxkIGJlIGNhbGxlZCB0aGF0LCBidXQgbWV0aG9kcyBzcGVjaWZpYyB0byBPcGVyYSBzaG91bGQgCisgICAgLS0gICBiZSBhIHBhcnQgb2YgdGhlIE9wZXJhLnByb3RvdHlwZSwgd2Ugd29uJ3QgdHJhbXBsZSBvbiBuYW1lc3BhY2UKKyAgICAtLSAgIHRoYXQgd2F5LgorICAgIC0tCisgICAgLS0gICRIZWFkVVJMOiBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL09wZXJhL09wZXJhLmpzICQKKyAgICAtLSAgJExhc3RDaGFuZ2VkRGF0ZTogMjAxOC0wMi0xOSAyMDozNTo0OSArMTMwMCAoTW9uLCAxOSBGZWIgMjAxOCkgJAorICAgIC0tICAkTGFzdENoYW5nZWRSZXZpc2lvbjogMTQwMiAkCisgICAgLS0gICRMYXN0Q2hhbmdlZEJ5OiBnb2dvICQKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitPcGVyYS5fcGx1Z2luSW5mbyA9IHsKKyAgbmFtZSAgICAgICAgICA6ICJPcGVyYSIsCisgIG9yaWdpbiAgICAgICAgOiAiWGluaGEgQ29yZSIsCisgIHZlcnNpb24gICAgICAgOiAiJExhc3RDaGFuZ2VkUmV2aXNpb246IDE0MDIgJCIucmVwbGFjZSgvXlteOl0qOlxzKiguKilccypcJCQvLCAnJDEnKSwKKyAgZGV2ZWxvcGVyICAgICA6ICJUaGUgWGluaGEgQ29yZSBEZXZlbG9wZXIgVGVhbSIsCisgIGRldmVsb3Blcl91cmwgOiAiJEhlYWRVUkw6IGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvT3BlcmEvT3BlcmEuanMgJCIucmVwbGFjZSgvXlteOl0qOlxzKiguKilccypcJCQvLCAnJDEnKSwKKyAgc3BvbnNvciAgICAgICA6ICJHb2dvIEludGVybmV0IFNlcnZpY2VzIExpbWl0ZWQiLAorICBzcG9uc29yX3VybCAgIDogImh0dHA6Ly93d3cuZ29nby5jby5uei8iLAorICBsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIgorfTsKKworZnVuY3Rpb24gT3BlcmEoZWRpdG9yKSB7CisgIHRoaXMuZWRpdG9yID0gZWRpdG9yOyAgCisgIGVkaXRvci5PcGVyYSA9IHRoaXM7Cit9CisKKy8qKiBBbGxvdyBPcGVyYSB0byBoYW5kbGUgc29tZSBrZXkgZXZlbnRzIGluIGEgc3BlY2lhbCB3YXkuCisgKi8KK09wZXJhLnByb3RvdHlwZS5vbktleVByZXNzID0gZnVuY3Rpb24oZXYpCit7CisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgdmFyIHMgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7CisgIAorICAvLyBIYW5kbGUgc2hvcnRjdXRzCisgIGlmKGVkaXRvci5pc1Nob3J0Q3V0KGV2KSkKKyAgeworICAgIHN3aXRjaChlZGl0b3IuZ2V0S2V5KGV2KS50b0xvd2VyQ2FzZSgpKQorICAgIHsKKyAgICAgIGNhc2UgJ3onOgorICAgICAgeworICAgICAgICBpZihlZGl0b3IuX3VuTGluayAmJiBlZGl0b3IuX3VubGlua09uVW5kbykKKyAgICAgICAgeworICAgICAgICAgIFhpbmhhLl9zdG9wRXZlbnQoZXYpOworICAgICAgICAgIGVkaXRvci5fdW5MaW5rKCk7CisgICAgICAgICAgZWRpdG9yLnVwZGF0ZVRvb2xiYXIoKTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgICAKKyAgICAgIGNhc2UgJ2EnOgorICAgICAgeworICAgICAgICAvLyBLRVkgc2VsZWN0IGFsbAorICAgICAgICBzZWwgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgICAgICAgcmFuZ2UgPSBlZGl0b3IuY3JlYXRlUmFuZ2UoKTsKKyAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvci5fZG9jLmJvZHkpOworICAgICAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpOworICAgICAgICBYaW5oYS5fc3RvcEV2ZW50KGV2KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICAgIAorICAgICAgY2FzZSAndic6CisgICAgICB7CisgICAgICAgIC8vIElmIHdlIGFyZSBub3QgdXNpbmcgaHRtbGFyZWFQYXN0ZSwgZG9uJ3QgbGV0IFhpbmhhIHRyeSBhbmQgYmUgZmFuY3kgYnV0IGxldCB0aGUgCisgICAgICAgIC8vIGV2ZW50IGJlIGhhbmRsZWQgbm9ybWFsbHkgYnkgdGhlIGJyb3dzZXIgKGRvbid0IHN0b3BFdmVudCBpdCkKKyAgICAgICAgaWYoIWVkaXRvci5jb25maWcuaHRtbGFyZWFQYXN0ZSkKKyAgICAgICAgeyAgICAgICAgICAKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIAorICAvLyBIYW5kbGUgbm9ybWFsIGNoYXJhY3RlcnMKKyAgc3dpdGNoKGVkaXRvci5nZXRLZXkoZXYpKQorICB7CisgICAgLy8gU3BhY2UsIHNlZSBpZiB0aGUgdGV4dCBqdXN0IHR5cGVkIGxvb2tzIGxpa2UgYSBVUkwsIG9yIGVtYWlsIGFkZHJlc3MKKyAgICAvLyBhbmQgbGluayBpdCBhcHByb3ByaWF0bHkKKyAgICBjYXNlICcgJzoKKyAgICB7ICAgICAgCisgICAgICB2YXIgYXV0b1dyYXAgPSBmdW5jdGlvbiAodGV4dE5vZGUsIHRhZykKKyAgICAgIHsKKyAgICAgICAgdmFyIHJpZ2h0VGV4dCA9IHRleHROb2RlLm5leHRTaWJsaW5nOworICAgICAgICBpZiAoIHR5cGVvZiB0YWcgPT0gJ3N0cmluZycpCisgICAgICAgIHsKKyAgICAgICAgICB0YWcgPSBlZGl0b3IuX2RvYy5jcmVhdGVFbGVtZW50KHRhZyk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGEgPSB0ZXh0Tm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0YWcsIHJpZ2h0VGV4dCk7CisgICAgICAgIFhpbmhhLnJlbW92ZUZyb21QYXJlbnQodGV4dE5vZGUpOworICAgICAgICBhLmFwcGVuZENoaWxkKHRleHROb2RlKTsKKyAgICAgICAgcmlnaHRUZXh0LmRhdGEgPSAnICcgKyByaWdodFRleHQuZGF0YTsKKyAgICAKKyAgICAgICAgcy5jb2xsYXBzZShyaWdodFRleHQsIDEpOworICAgIAorICAgICAgICBlZGl0b3IuX3VuTGluayA9IGZ1bmN0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgIHZhciB0ID0gYS5maXJzdENoaWxkOworICAgICAgICAgIGEucmVtb3ZlQ2hpbGQodCk7CisgICAgICAgICAgYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LCBhKTsKKyAgICAgICAgICBYaW5oYS5yZW1vdmVGcm9tUGFyZW50KGEpOworICAgICAgICAgIGVkaXRvci5fdW5MaW5rID0gbnVsbDsKKyAgICAgICAgICBlZGl0b3IuX3VubGlua09uVW5kbyA9IGZhbHNlOworICAgICAgICB9OworICAgICAgICBlZGl0b3IuX3VubGlua09uVW5kbyA9IHRydWU7CisgICAgCisgICAgICAgIHJldHVybiBhOworICAgICAgfTsKKyAgCisgICAgICBpZiAoIGVkaXRvci5jb25maWcuY29udmVydFVybHNUb0xpbmtzICYmIHMgJiYgcy5pc0NvbGxhcHNlZCAmJiBzLmFuY2hvck5vZGUubm9kZVR5cGUgPT0gMyAmJiBzLmFuY2hvck5vZGUuZGF0YS5sZW5ndGggPiAzICYmIHMuYW5jaG9yTm9kZS5kYXRhLmluZGV4T2YoJy4nKSA+PSAwICkKKyAgICAgIHsKKyAgICAgICAgdmFyIG1pZFN0YXJ0ID0gcy5hbmNob3JOb2RlLmRhdGEuc3Vic3RyaW5nKDAscy5hbmNob3JPZmZzZXQpLnNlYXJjaCgvXFN7NCx9JC8pOworICAgICAgICBpZiAoIG1pZFN0YXJ0ID09IC0xICkKKyAgICAgICAgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBlZGl0b3IuX2dldEZpcnN0QW5jZXN0b3IocywgJ2EnKSApCisgICAgICAgIHsKKyAgICAgICAgICBicmVhazsgLy8gYWxyZWFkeSBpbiBhbiBhbmNob3IKKyAgICAgICAgfQorCisgICAgICAgIHZhciBtYXRjaERhdGEgPSBzLmFuY2hvck5vZGUuZGF0YS5zdWJzdHJpbmcoMCxzLmFuY2hvck9mZnNldCkucmVwbGFjZSgvXi4qPyhcUyopJC8sICckMScpOworCisgICAgICAgIHZhciBtRW1haWwgPSBtYXRjaERhdGEubWF0Y2goWGluaGEuUkVfZW1haWwpOworICAgICAgICBpZiAoIG1FbWFpbCApCisgICAgICAgIHsKKyAgICAgICAgICB2YXIgbGVmdFRleHRFbWFpbCAgPSBzLmFuY2hvck5vZGU7CisgICAgICAgICAgdmFyIHJpZ2h0VGV4dEVtYWlsID0gbGVmdFRleHRFbWFpbC5zcGxpdFRleHQocy5hbmNob3JPZmZzZXQpOworICAgICAgICAgIHZhciBtaWRUZXh0RW1haWwgICA9IGxlZnRUZXh0RW1haWwuc3BsaXRUZXh0KG1pZFN0YXJ0KTsKKworICAgICAgICAgIGF1dG9XcmFwKG1pZFRleHRFbWFpbCwgJ2EnKS5ocmVmID0gJ21haWx0bzonICsgbUVtYWlsWzBdOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgUkVfZGF0ZSA9IC8oWzAtOV0rXC4pKy87IC8vY291bGQgYmUgZGF0ZSBvciBpcCBvciBzb21ldGhpbmcgZWxzZSAuLi4KKyAgICAgICAgUkVfaXAgPSAvKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KVwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPykvOworICAgICAgICB2YXIgbVVybCA9IG1hdGNoRGF0YS5tYXRjaChYaW5oYS5SRV91cmwpOworICAgICAgICBpZiAoIG1VcmwgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKFJFX2RhdGUudGVzdChtYXRjaERhdGEpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOyAvL3JheTogZGlzYWJsaW5nIGxpbmtpbmcgb2YgSVAgbnVtYmVycyBiZWNhdXNlIG9mIGdlbmVyYWwgYnVnZ2luZXNzIChzZWUgVGlja2V0ICMxMDg1KQorICAgICAgICAgICAgLyppZiAoIVJFX2lwLnRlc3QobWF0Y2hEYXRhKSkgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSovCisgICAgICAgICAgfSAKKyAgICAgICAgICB2YXIgbGVmdFRleHRVcmwgID0gcy5hbmNob3JOb2RlOworICAgICAgICAgIHZhciByaWdodFRleHRVcmwgPSBsZWZ0VGV4dFVybC5zcGxpdFRleHQocy5hbmNob3JPZmZzZXQpOworICAgICAgICAgIHZhciBtaWRUZXh0VXJsICAgPSBsZWZ0VGV4dFVybC5zcGxpdFRleHQobWlkU3RhcnQpOworICAgICAgICAgIGF1dG9XcmFwKG1pZFRleHRVcmwsICdhJykuaHJlZiA9IChtVXJsWzFdID8gbVVybFsxXSA6ICdodHRwOi8vJykgKyBtVXJsWzJdOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGJyZWFrOyAgICAKKyAgfQorICAKKyAgLy8gSGFuZGxlIHNwZWNpYWwga2V5cworICBzd2l0Y2ggKCBldi5rZXlDb2RlICkKKyAgeyAgICAKKy8qICBUaGlzIGlzIG5vdyBoYW5kbGVkIGJ5IGEgcGx1Z2luICAKKyAgICBjYXNlIDEzOiAvLyBFTlRFUgorCisgICAgYnJlYWs7Ki8KKworICAgIGNhc2UgMjc6IC8vIEVTQ0FQRQorICAgIHsKKyAgICAgIGlmICggZWRpdG9yLl91bkxpbmsgKQorICAgICAgeworICAgICAgICBlZGl0b3IuX3VuTGluaygpOworICAgICAgICBYaW5oYS5fc3RvcEV2ZW50KGV2KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBicmVhazsKKyAgICAKKyAgICBjYXNlIDg6IC8vIEtFWSBiYWNrc3BhY2UKKyAgICBjYXNlIDQ2OiAvLyBLRVkgZGVsZXRlCisgICAgeworICAgICAgLy8gV2UgaGFuZGxlIHRoZSBtb3ppbGxhIGJhY2tzcGFjZSBkaXJlY3RseT8/CisgICAgICBpZiAoICFldi5zaGlmdEtleSAmJiB0aGlzLmhhbmRsZUJhY2tzcGFjZSgpICkKKyAgICAgIHsKKyAgICAgICAgWGluaGEuX3N0b3BFdmVudChldik7CisgICAgICB9CisgICAgfQorICAgIAorICAgIGRlZmF1bHQ6CisgICAgeworICAgICAgICBlZGl0b3IuX3VubGlua09uVW5kbyA9IGZhbHNlOworCisgICAgICAgIC8vIEhhbmRsZSB0aGUgImF1dG8tbGlua2luZyIsIHNwZWNpZmljYWxseSB0aGlzIGJpdCBvZiBjb2RlIHNldHMgdXAgYSBoYW5kbGVyIG9uCisgICAgICAgIC8vIGFuIHNlbGYtdGl0bGVkIGFuY2hvciAoZWcgPGEgaHJlZj0iaHR0cDovL3d3dy5nb2dvLmNvLm56LyI+d3d3LmdvZ28uY28ubno8L2E+KQorICAgICAgICAvLyB3aGVuIHRoZSB0ZXh0IGNvbnRlbnQgaXMgZWRpdGVkLCBzdWNoIHRoYXQgaXQgd2lsbCB1cGRhdGUgdGhlIGhyZWYgb24gdGhlIGFuY2hvcgorICAgICAgICAKKyAgICAgICAgaWYgKCBzLmFuY2hvck5vZGUgJiYgcy5hbmNob3JOb2RlLm5vZGVUeXBlID09IDMgKQorICAgICAgICB7CisgICAgICAgICAgLy8gU2VlIGlmIHdlIG1pZ2h0IGJlIGNoYW5naW5nIGEgbGluaworICAgICAgICAgIHZhciBhID0gZWRpdG9yLl9nZXRGaXJzdEFuY2VzdG9yKHMsICdhJyk7CisgICAgICAgICAgLy8gQHRvZG86IHdlIHByb2JhYmx5IG5lZWQgaGVyZSB0byBpbmZvcm0gdGhlIHNldFRpbWVvdXQgYmVsb3cgdGhhdCB3ZSBub3QgY2hhbmdpbmcgYSBsaW5rIGFuZCBub3Qgc3RhcnQgYW5vdGhlciBzZXRUaW1lb3V0CisgICAgICAgICAgaWYgKCAhYSApCisgICAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7IC8vIG5vdCBhbiBhbmNob3IKKyAgICAgICAgICB9IAorICAgICAgICAgIAorICAgICAgICAgIGlmICggIWEuX3VwZGF0ZUFuY2hUaW1lb3V0ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIHMuYW5jaG9yTm9kZS5kYXRhLm1hdGNoKFhpbmhhLlJFX2VtYWlsKSAmJiBhLmhyZWYubWF0Y2goJ21haWx0bzonICsgcy5hbmNob3JOb2RlLmRhdGEudHJpbSgpKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHZhciB0ZXh0Tm9kZSA9IHMuYW5jaG9yTm9kZTsKKyAgICAgICAgICAgICAgdmFyIGZuQW5jaG9yID0gZnVuY3Rpb24oKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYS5ocmVmID0gJ21haWx0bzonICsgdGV4dE5vZGUuZGF0YS50cmltKCk7CisgICAgICAgICAgICAgICAgLy8gQGZpeG1lOiB3aHkgdGhlIGhlbGwgZG8gYW5vdGhlciB0aW1lb3V0IGlzIHN0YXJ0ZWQgPworICAgICAgICAgICAgICAgIC8vICAgICAgICAgVGhpcyBsZWFkIHRvIG5ldmVyIGVuZGluZyB0aW1lciBpZiB3ZSBkb250IHJlbW92ZSB0aGlzIGxpbmUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgIEJ1dCB3aGVuIHJlbW92ZWQsIHRoZSBlbWFpbCBpcyBub3QgY29ycmVjdGx5IHVwZGF0ZWQKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0gdG8gZml4IHRoaXMgd2Ugc2hvdWxkIG1ha2UgZm5BbmNob3IgY2hlY2sgdG8gc2VlIGlmIHRleHROb2RlLmRhdGEgaGFzCisgICAgICAgICAgICAgICAgLy8gICBzdG9wcGVkIGNoYW5naW5nIGZvciBzYXkgNSBzZWNvbmRzIGFuZCBpZiBzbyB3ZSBkbyBub3QgbWFrZSB0aGlzIHNldFRpbWVvdXQgCisgICAgICAgICAgICAgICAgYS5fdXBkYXRlQW5jaFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZuQW5jaG9yLCAyNTApOworICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICBhLl91cGRhdGVBbmNoVGltZW91dCA9IHNldFRpbWVvdXQoZm5BbmNob3IsIDEwMDApOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIG0gPSBzLmFuY2hvck5vZGUuZGF0YS5tYXRjaChYaW5oYS5SRV91cmwpOworCisgICAgICAgICAgICBpZiAoIG0gJiYgYS5ocmVmLm1hdGNoKG5ldyBSZWdFeHAoICdodHRwKHMpPzovLycgKyBYaW5oYS5lc2NhcGVTdHJpbmdGb3JSZWdFeHAoIHMuYW5jaG9yTm9kZS5kYXRhLnRyaW0oKSApICkgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHZhciB0eHROb2RlID0gcy5hbmNob3JOb2RlOworICAgICAgICAgICAgICB2YXIgZm5VcmwgPSBmdW5jdGlvbigpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgbSBpcyB1bmRlZmluZWQgYmVjYXNlIHRoZSB1cmwgaXMgbm90IGFuIHVybCBhbnltb3JlICh3YXMgd3d3LnVybC5jb20gYW5kIGJlY29tZSBmb3IgZXhhbXBsZSB3d3cudXJsKQorICAgICAgICAgICAgICAgIC8vIHJheTogc2hvdWxkbid0IHRoZSBsaW5rIGJlIHVuLWxpbmtlZCB0aGVuPworICAgICAgICAgICAgICAgIG0gPSB0eHROb2RlLmRhdGEubWF0Y2goWGluaGEuUkVfdXJsKTsKKyAgICAgICAgICAgICAgICBpZihtKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGEuaHJlZiA9IChtWzFdID8gbVsxXSA6ICdodHRwOi8vJykgKyBtWzJdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBAZml4bWU6IHdoeSB0aGUgaGVsbCBkbyBhbm90aGVyIHRpbWVvdXQgaXMgc3RhcnRlZCA/CisgICAgICAgICAgICAgICAgLy8gICAgICAgICBUaGlzIGxlYWQgdG8gbmV2ZXIgZW5kaW5nIHRpbWVyIGlmIHdlIGRvbnQgcmVtb3ZlIHRoaXMgbGluZQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgQnV0IHdoZW4gcmVtb3ZlZCwgdGhlIHVybCBpcyBub3QgY29ycmVjdGx5IHVwZGF0ZWQKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0gdG8gZml4IHRoaXMgd2Ugc2hvdWxkIG1ha2UgZm5VcmwgY2hlY2sgdG8gc2VlIGlmIHRleHROb2RlLmRhdGEgaGFzCisgICAgICAgICAgICAgICAgLy8gICBzdG9wcGVkIGNoYW5naW5nIGZvciBzYXkgNSBzZWNvbmRzIGFuZCBpZiBzbyB3ZSBkbyBub3QgbWFrZSB0aGlzIHNldFRpbWVvdXQKKyAgICAgICAgICAgICAgICBhLl91cGRhdGVBbmNoVGltZW91dCA9IHNldFRpbWVvdXQoZm5VcmwsIDI1MCk7CisgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgIGEuX3VwZGF0ZUFuY2hUaW1lb3V0ID0gc2V0VGltZW91dChmblVybCwgMTAwMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0gICAgICAgICAgICAgICAgCisgICAgfQorICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIGZhbHNlOyAvLyBMZXQgb3RoZXIgcGx1Z2lucyBldGMgY29udGludWUgZnJvbSBoZXJlLgorfQorCisvKiogV2hlbiBiYWNrc3BhY2UgaXMgaGl0LCB0aGUgT3BlcmEgb25LZXlQcmVzcyB3aWxsIGV4ZWN1dGUgdGhpcyBtZXRob2QuCisgKiAgSSBkb24ndCByZW1lbWJlciB3aGF0IHRoZSBleGFjdCBwdXJwb3NlIG9mIHRoaXMgaXMgdGhvdWdoIDotKAorICovCisgCitPcGVyYS5wcm90b3R5cGUuaGFuZGxlQmFja3NwYWNlID0gZnVuY3Rpb24oKQoreworICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisgIHNldFRpbWVvdXQoCisgICAgZnVuY3Rpb24oKQorICAgIHsKKyAgICAgIHZhciBzZWwgICA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTsKKyAgICAgIHZhciByYW5nZSA9IGVkaXRvci5jcmVhdGVSYW5nZShzZWwpOworICAgICAgdmFyIFNDID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7CisgICAgICB2YXIgU08gPSByYW5nZS5zdGFydE9mZnNldDsKKyAgICAgIHZhciBFQyA9IHJhbmdlLmVuZENvbnRhaW5lcjsKKyAgICAgIHZhciBFTyA9IHJhbmdlLmVuZE9mZnNldDsKKyAgICAgIHZhciBuZXdyID0gU0MubmV4dFNpYmxpbmc7CisgICAgICBpZiAoIFNDLm5vZGVUeXBlID09IDMgKQorICAgICAgeworICAgICAgICBTQyA9IFNDLnBhcmVudE5vZGU7CisgICAgICB9CisgICAgICBpZiAoICEgKCAvXFMvLnRlc3QoU0MudGFnTmFtZSkgKSApCisgICAgICB7CisgICAgICAgIHZhciBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOworICAgICAgICB3aGlsZSAoIFNDLmZpcnN0Q2hpbGQgKQorICAgICAgICB7CisgICAgICAgICAgcC5hcHBlbmRDaGlsZChTQy5maXJzdENoaWxkKTsKKyAgICAgICAgfQorICAgICAgICBTQy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShwLCBTQyk7CisgICAgICAgIFhpbmhhLnJlbW92ZUZyb21QYXJlbnQoU0MpOworICAgICAgICB2YXIgciA9IHJhbmdlLmNsb25lUmFuZ2UoKTsKKyAgICAgICAgci5zZXRTdGFydEJlZm9yZShuZXdyKTsKKyAgICAgICAgci5zZXRFbmRBZnRlcihuZXdyKTsKKyAgICAgICAgci5leHRyYWN0Q29udGVudHMoKTsKKyAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOworICAgICAgICBzZWwuYWRkUmFuZ2Uocik7CisgICAgICB9CisgICAgfSwKKyAgICAxMCk7Cit9OworCitPcGVyYS5wcm90b3R5cGUuaW53YXJkSHRtbCA9IGZ1bmN0aW9uKGh0bWwpCit7CisgICAvLyBCb3RoIElFIGFuZCBPcGVyYSB1c2Ugc3RyaWtlIGludGVybmFsbHkgaW5zdGVhZCBvZiBkZWwgKCM1MjMpCisgICAvLyBYaW5oYSB3aWxsIHByZXNlbnQgZGVsIGV4dGVybmFsbHkgKHNlZSBYaW5oYS5wcm90b3R5cGUub3V0d2FyZEh0bWwKKyAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLzwoXC8/KWRlbChcc3w+fFwvKS9pZywgIjwkMXN0cmlrZSQyIik7CisgICAKKyAgIHJldHVybiBodG1sOworfQorCitPcGVyYS5wcm90b3R5cGUub3V0d2FyZEh0bWwgPSBmdW5jdGlvbihodG1sKQoreworCisgIHJldHVybiBodG1sOworfQorCitPcGVyYS5wcm90b3R5cGUub25FeGVjQ29tbWFuZCA9IGZ1bmN0aW9uKGNtZElELCBVSSwgcGFyYW0pCit7ICAgCisgICAgCisgIHN3aXRjaChjbWRJRCkKKyAgeworICAgIAorICAgIC8qY2FzZSAncGFzdGUnOgorICAgIHsKKyAgICAgIGFsZXJ0KFhpbmhhLl9sYygiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiIsICJPcGVyYSIpKTsKKyAgICAgIHJldHVybiB0cnVlOyAvLyBJbmRpY2F0ZSBwYXN0ZSBpcyBkb25lLCBzdG9wIGNvbW1hbmQgYmVpbmcgaXNzdWVkIHRvIGJyb3dzZXIgYnkgWGluaGEucHJvdG90eXBlLmV4ZWNDb21tYW5kCisgICAgfQorICAgIGJyZWFrOyovCisgICAgCisgICAgY2FzZSAncmVtb3ZlZm9ybWF0JzoKKyAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgICAgIHZhciBzZWwgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7CisgICAgICB2YXIgc2VsU2F2ZSA9IGVkaXRvci5zYXZlU2VsZWN0aW9uKHNlbCk7CisgICAgICB2YXIgcmFuZ2UgPSBlZGl0b3IuY3JlYXRlUmFuZ2Uoc2VsKTsKKworICAgICAgdmFyIGVscyA9IGVkaXRvci5fZG9jLmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTsKKworICAgICAgdmFyIHN0YXJ0ID0gKCByYW5nZS5zdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PSAxICkgPyByYW5nZS5zdGFydENvbnRhaW5lciA6IHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGU7CisgICAgICB2YXIgaSwgZWw7CisgICAgICBpZiAoc2VsLmlzQ29sbGFwc2VkKSByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yLl9kb2MuYm9keSk7CisgICAgICAKKyAgICAgIGZvciAoaT0wOyBpPGVscy5sZW5ndGg7aSsrKQorICAgICAgeworICAgICAgICBlbCA9IGVsc1tpXTsKKyAgICAgICAgaWYgKCByYW5nZS5pc1BvaW50SW5SYW5nZShlbCwgMCkgfHwgKGVsc1tpXSA9PSBzdGFydCAmJiByYW5nZS5zdGFydE9mZnNldCA9PSAwKSkKKyAgICAgICAgeworICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgdGhpcy5lZGl0b3IuX2RvYy5leGVjQ29tbWFuZChjbWRJRCwgVUksIHBhcmFtKTsKKyAgICAgIGVkaXRvci5yZXN0b3JlU2VsZWN0aW9uKHNlbFNhdmUpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgYnJlYWs7CisgICAgCisgIH0KKyAgCisgIHJldHVybiBmYWxzZTsKK30KKworT3BlcmEucHJvdG90eXBlLm9uTW91c2VEb3duID0gZnVuY3Rpb24oZXYpCit7ICAgCisgIAorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLS0tIElNUExFTUVOVEFUSU9OIE9GIFRIRSBBQlNUUkFDVCAiWGluaGEucHJvdG90eXBlIiBNRVRIT0RTIC0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisKKy8qKiBJbnNlcnQgYSBub2RlIGF0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwb2ludC4gCisgKiBAcGFyYW0gdG9CZUluc2VydGVkIERvbU5vZGUKKyAqLworCitYaW5oYS5wcm90b3R5cGUuaW5zZXJ0Tm9kZUF0U2VsZWN0aW9uID0gZnVuY3Rpb24odG9CZUluc2VydGVkKQoreworICBpZiAoIHRvQmVJbnNlcnRlZC5vd25lckRvY3VtZW50ICE9IHRoaXMuX2RvYyApCisgIHsKKyAgICB0cnkgCisgICAgeworICAgICAgdG9CZUluc2VydGVkID0gdGhpcy5fZG9jLmFkb3B0Tm9kZSggdG9CZUluc2VydGVkICk7CisgICAgfSBjYXRjaCAoZSkge30KKyAgfQorICAKKyAgdGhpcy5mb2N1c0VkaXRvcigpOworICAKKyAgdmFyIHNlbCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7ICAgICAgCisgIHZhciByYW5nZSA9IHRoaXMuY3JlYXRlUmFuZ2Uoc2VsKTsKKyAgICAKKyAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTsKKyAgCisgIHZhciBub2RlID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7CisgIHZhciBwb3MgPSByYW5nZS5zdGFydE9mZnNldDsKKyAgdmFyIHNlbG5vZGUgPSB0b0JlSW5zZXJ0ZWQ7CisgIAorICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CisgIAorICBzd2l0Y2ggKCBub2RlLm5vZGVUeXBlICkKKyAgeworICAgIGNhc2UgMzogLy8gTm9kZS5URVhUX05PREUKKyAgICAgIC8vIHdlIGhhdmUgdG8gc3BsaXQgaXQgYXQgdGhlIGNhcmV0IHBvc2l0aW9uLgorICAgICAgaWYgKCB0b0JlSW5zZXJ0ZWQubm9kZVR5cGUgPT0gMyApCisgICAgICB7CisgICAgICAgIC8vIGRvIG9wdGltaXplZCBpbnNlcnRpb24KKyAgICAgICAgbm9kZS5pbnNlcnREYXRhKHBvcywgdG9CZUluc2VydGVkLmRhdGEpOworICAgICAgICByYW5nZSA9IHRoaXMuY3JlYXRlUmFuZ2UoKTsKKyAgICAgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIHBvcyArIHRvQmVJbnNlcnRlZC5sZW5ndGgpOworICAgICAgICByYW5nZS5zZXRTdGFydChub2RlLCBwb3MgKyB0b0JlSW5zZXJ0ZWQubGVuZ3RoKTsKKyAgICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgbm9kZSA9IG5vZGUuc3BsaXRUZXh0KHBvcyk7CisgICAgICAgIGlmICggdG9CZUluc2VydGVkLm5vZGVUeXBlID09IDExIC8qIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSAqLyApCisgICAgICAgIHsKKyAgICAgICAgICBzZWxub2RlID0gc2Vsbm9kZS5maXJzdENoaWxkOworICAgICAgICB9CisgICAgICAgIG5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodG9CZUluc2VydGVkLCBub2RlKTsKKyAgICAgICAgdGhpcy5zZWxlY3ROb2RlQ29udGVudHMoc2Vsbm9kZSk7CisgICAgICAgIHRoaXMudXBkYXRlVG9vbGJhcigpOworICAgICAgfQorICAgIGJyZWFrOworICAgIAorICAgIGNhc2UgMTogLy8gTm9kZS5FTEVNRU5UX05PREUKKyAgICAgIGlmICggdG9CZUluc2VydGVkLm5vZGVUeXBlID09IDExIC8qIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSAqLyApCisgICAgICB7CisgICAgICAgIHNlbG5vZGUgPSBzZWxub2RlLmZpcnN0Q2hpbGQ7CisgICAgICB9CisgICAgICBub2RlLmluc2VydEJlZm9yZSh0b0JlSW5zZXJ0ZWQsIG5vZGUuY2hpbGROb2Rlc1twb3NdKTsKKyAgICAgIHRoaXMuc2VsZWN0Tm9kZUNvbnRlbnRzKHNlbG5vZGUpOworICAgICAgdGhpcy51cGRhdGVUb29sYmFyKCk7CisgICAgYnJlYWs7CisgIH0KK307CisgIAorLyoqIEdldCB0aGUgcGFyZW50IGVsZW1lbnQgb2YgdGhlIHN1cHBsaWVkIG9yIGN1cnJlbnQgc2VsZWN0aW9uLiAKKyAqICBAcGFyYW0gICBzZWwgb3B0aW9uYWwgc2VsZWN0aW9uIGFzIHJldHVybmVkIGJ5IGdldFNlbGVjdGlvbgorICogIEByZXR1cm5zIERvbU5vZGUKKyAqLworIAorWGluaGEucHJvdG90eXBlLmdldFBhcmVudEVsZW1lbnQgPSBmdW5jdGlvbihzZWwpCit7CisgIGlmICggdHlwZW9mIHNlbCA9PSAndW5kZWZpbmVkJyApCisgIHsKKyAgICBzZWwgPSB0aGlzLmdldFNlbGVjdGlvbigpOworICB9CisgIHZhciByYW5nZSA9IHRoaXMuY3JlYXRlUmFuZ2Uoc2VsKTsKKyAgdHJ5CisgIHsKKyAgICB2YXIgcCA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyOworICAgIGlmICggIXJhbmdlLmNvbGxhcHNlZCAmJiByYW5nZS5zdGFydENvbnRhaW5lciA9PSByYW5nZS5lbmRDb250YWluZXIgJiYKKyAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgLSByYW5nZS5lbmRPZmZzZXQgPD0gMSAmJiByYW5nZS5zdGFydENvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkgKQorICAgIHsKKyAgICAgIHAgPSByYW5nZS5zdGFydENvbnRhaW5lci5jaGlsZE5vZGVzW3JhbmdlLnN0YXJ0T2Zmc2V0XTsKKyAgICB9CisKKyAgICB3aGlsZSAoIHAubm9kZVR5cGUgPT0gMyApCisgICAgeworICAgICAgcCA9IHAucGFyZW50Tm9kZTsKKyAgICB9CisgICAgcmV0dXJuIHA7CisgIH0KKyAgY2F0Y2ggKGV4KQorICB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KK307CisKKy8qKgorICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgZWxlbWVudCwgaWYgYW55LiAgVGhhdCBpcywKKyAqIHRoZSBlbGVtZW50IHRoYXQgeW91IGhhdmUgbGFzdCBzZWxlY3RlZCBpbiB0aGUgInBhdGgiCisgKiBhdCB0aGUgYm90dG9tIG9mIHRoZSBlZGl0b3IsIG9yIGEgImNvbnRyb2wiIChlZyBpbWFnZSkKKyAqCisgKiBAcmV0dXJucyBudWxsIHwgRG9tTm9kZQorICovCisKK1hpbmhhLnByb3RvdHlwZS5hY3RpdmVFbGVtZW50ID0gZnVuY3Rpb24oc2VsKQoreworICBpZiAoICggc2VsID09PSBudWxsICkgfHwgdGhpcy5zZWxlY3Rpb25FbXB0eShzZWwpICkKKyAgeworICAgIHJldHVybiBudWxsOworICB9CisKKyAgLy8gRm9yIE1vemlsbGEgd2UganVzdCBzZWUgaWYgdGhlIHNlbGVjdGlvbiBpcyBub3QgY29sbGFwc2VkIChzb21ldGhpbmcgaXMgc2VsZWN0ZWQpCisgIC8vIGFuZCB0aGF0IHRoZSBhbmNob3IgKHN0YXJ0IG9mIHNlbGVjdGlvbikgaXMgYW4gZWxlbWVudC4gIFRoaXMgbWlnaHQgbm90IGJlIHRvdGFsbHkKKyAgLy8gY29ycmVjdCwgd2UgcG9zc2libHkgc2hvdWxkIGRvIGEgc2ltbGFyIGNoZWNrIHRvIElFPworICBpZiAoICFzZWwuaXNDb2xsYXBzZWQgKQorICB7ICAgICAgCisgICAgaWYgKCBzZWwuYW5jaG9yTm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA+IHNlbC5hbmNob3JPZmZzZXQgJiYgc2VsLmFuY2hvck5vZGUuY2hpbGROb2Rlc1tzZWwuYW5jaG9yT2Zmc2V0XS5ub2RlVHlwZSA9PSAxICkKKyAgICB7CisgICAgICByZXR1cm4gc2VsLmFuY2hvck5vZGUuY2hpbGROb2Rlc1tzZWwuYW5jaG9yT2Zmc2V0XTsKKyAgICB9CisgICAgZWxzZSBpZiAoIHNlbC5hbmNob3JOb2RlLm5vZGVUeXBlID09IDEgKQorICAgIHsKKyAgICAgIHJldHVybiBzZWwuYW5jaG9yTm9kZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHJldHVybiBudWxsOyAvLyByZXR1cm4gc2VsLmFuY2hvck5vZGUucGFyZW50Tm9kZTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIG51bGw7Cit9OworCisvKiogCisgKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBzZWxlY3Rpb24gaXMgZW1wdHkgKGNvbGxhcHNlZCkuCisgKiBAcGFyYW0gc2VsZWN0aW9uIFNlbGVjdGlvbiBvYmplY3QgYXMgcmV0dXJuZWQgYnkgZ2V0U2VsZWN0aW9uCisgKiBAcmV0dXJucyB0cnVlfGZhbHNlCisgKi8KKyAKK1hpbmhhLnByb3RvdHlwZS5zZWxlY3Rpb25FbXB0eSA9IGZ1bmN0aW9uKHNlbCkKK3sKKyAgaWYgKCAhc2VsICkKKyAgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgaWYgKCB0eXBlb2Ygc2VsLmlzQ29sbGFwc2VkICE9ICd1bmRlZmluZWQnICkKKyAgeyAgICAgIAorICAgIHJldHVybiBzZWwuaXNDb2xsYXBzZWQ7CisgIH0KKworICByZXR1cm4gdHJ1ZTsKK307CisKKy8qKiAKKyAqIFJldHVybnMgYSByYW5nZSBvYmplY3QgdG8gYmUgc3RvcmVkIAorICogYW5kIGxhdGVyIHJlc3RvcmVkIHdpdGggWGluaGEucHJvdG90eXBlLnJlc3RvcmVTZWxlY3Rpb24oKQorICogCisgKiBAcmV0dXJucyBSYW5nZQorICovCitYaW5oYS5wcm90b3R5cGUuc2F2ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkKK3sKKyAgcmV0dXJuIHRoaXMuY3JlYXRlUmFuZ2UodGhpcy5nZXRTZWxlY3Rpb24oKSkuY2xvbmVSYW5nZSgpOworfQorLyoqIAorICogUmVzdG9yZXMgYSBzZWxlY3Rpb24gcHJldmlvdXNseSBzdG9yZWQKKyAqIEBwYXJhbSBzYXZlZFNlbGVjdGlvbiBSYW5nZSBvYmplY3QgYXMgcmV0dXJuZWQgYnkgWGluaGEucHJvdG90eXBlLnJlc3RvcmVTZWxlY3Rpb24oKQorICovCitYaW5oYS5wcm90b3R5cGUucmVzdG9yZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKHNhdmVkU2VsZWN0aW9uKQoreworICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKKyAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOworICBzZWwuYWRkUmFuZ2Uoc2F2ZWRTZWxlY3Rpb24pOworfQorLyoqCisgKiBTZWxlY3RzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gbm9kZS4gIElmIHRoZSBub2RlIGlzIGEgImNvbnRyb2wiIHR5cGUgZWxlbWVudCwgKGltYWdlLCBmb3JtIGlucHV0LCB0YWJsZSkKKyAqIHRoZSBub2RlIGl0c2VsZiBpcyBzZWxlY3RlZCBmb3IgbWFuaXB1bGF0aW9uLgorICoKKyAqIEBwYXJhbSBub2RlIERvbU5vZGUgCisgKiBAcGFyYW0gY29sbGFwc2VUb1N0YXJ0IEEgYm9vbGVhbiB0aGF0LCB3aGVuIHN1cHBsaWVkLCBzYXlzIHRvIGNvbGxhcHNlIHRoZSBzZWxlY3Rpb24uIFRydWUgY29sbGFwc2VzIHRvIHRoZSBzdGFydCwgYW5kIGZhbHNlIHRvIHRoZSBlbmQuCisgKi8KKyAKK1hpbmhhLnByb3RvdHlwZS5zZWxlY3ROb2RlQ29udGVudHMgPSBmdW5jdGlvbihub2RlLCBjb2xsYXBzZVRvU3RhcnQpCit7CisgIHRoaXMuZm9jdXNFZGl0b3IoKTsKKyAgdGhpcy5mb3JjZVJlZHJhdygpOworICB2YXIgcmFuZ2U7CisgIHZhciBjb2xsYXBzZWQgPSB0eXBlb2YgY29sbGFwc2VUb1N0YXJ0ID09ICJ1bmRlZmluZWQiID8gdHJ1ZSA6IGZhbHNlOworICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKKyAgcmFuZ2UgPSB0aGlzLl9kb2MuY3JlYXRlUmFuZ2UoKTsKKyAgLy8gVGFibGVzIGFuZCBJbWFnZXMgZ2V0IHNlbGVjdGVkIGFzICJvYmplY3RzIiByYXRoZXIgdGhhbiB0aGUgdGV4dCBjb250ZW50cworICBpZiAoIGNvbGxhcHNlZCAmJiBub2RlLnRhZ05hbWUgJiYgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkubWF0Y2goL3RhYmxlfGltZ3xpbnB1dHx0ZXh0YXJlYXxzZWxlY3QvKSApCisgIHsKKyAgICByYW5nZS5zZWxlY3ROb2RlKG5vZGUpOworICB9CisgIGVsc2UKKyAgeworICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhub2RlKTsKKyAgfQorICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CisgIHNlbC5hZGRSYW5nZShyYW5nZSk7CisgIGlmICh0eXBlb2YgY29sbGFwc2VUb1N0YXJ0ICE9ICJ1bmRlZmluZWQiKQorICB7CisgICAgaWYgKGNvbGxhcHNlVG9TdGFydCkKKyAgICB7CisgICAgICBzZWwuY29sbGFwc2UocmFuZ2Uuc3RhcnRDb250YWluZXIsIHJhbmdlLnN0YXJ0T2Zmc2V0KTsKKyAgICB9IGVsc2UKKyAgICB7CisgICAgICBzZWwuY29sbGFwc2UocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpOworICAgIH0KKyAgfQorfTsKKyAgCisvKiogSW5zZXJ0IEhUTUwgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24sIGRlbGV0aW5nIHRoZSBzZWxlY3Rpb24gaWYgYW55LiAKKyAqICAKKyAqICBAcGFyYW0gaHRtbCBzdHJpbmcKKyAqLworIAorWGluaGEucHJvdG90eXBlLmluc2VydEhUTUwgPSBmdW5jdGlvbihodG1sKQoreworICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKKyAgdmFyIHJhbmdlID0gdGhpcy5jcmVhdGVSYW5nZShzZWwpOworICB0aGlzLmZvY3VzRWRpdG9yKCk7CisgIC8vIGNvbnN0cnVjdCBhIG5ldyBkb2N1bWVudCBmcmFnbWVudCB3aXRoIHRoZSBnaXZlbiBIVE1MCisgIHZhciBmcmFnbWVudCA9IHRoaXMuX2RvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgIHZhciBkaXYgPSB0aGlzLl9kb2MuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgIGRpdi5pbm5lckhUTUwgPSBodG1sOworICB3aGlsZSAoIGRpdi5maXJzdENoaWxkICkKKyAgeworICAgIC8vIHRoZSBmb2xsb3dpbmcgY2FsbCBhbHNvIHJlbW92ZXMgdGhlIG5vZGUgZnJvbSBkaXYKKyAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChkaXYuZmlyc3RDaGlsZCk7CisgIH0KKyAgLy8gdGhpcyBhbHNvIHJlbW92ZXMgdGhlIHNlbGVjdGlvbgorICB2YXIgbm9kZSA9IHRoaXMuaW5zZXJ0Tm9kZUF0U2VsZWN0aW9uKGZyYWdtZW50KTsKK307CisKKy8qKiBHZXQgdGhlIEhUTUwgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiAgSFRNTCByZXR1cm5lZCBoYXMgbm90IGJlZW4gcGFzc2VkIHRocm91Z2ggb3V0d2FyZEhUTUwuCisgKgorICogQHJldHVybnMgc3RyaW5nCisgKi8KKyAKK1hpbmhhLnByb3RvdHlwZS5nZXRTZWxlY3RlZEhUTUwgPSBmdW5jdGlvbigpCit7CisgIHZhciBzZWwgPSB0aGlzLmdldFNlbGVjdGlvbigpOworICBpZiAoc2VsLmlzQ29sbGFwc2VkKSByZXR1cm4gJyc7CisgIHZhciByYW5nZSA9IHRoaXMuY3JlYXRlUmFuZ2Uoc2VsKTsKKyAgcmV0dXJuIFhpbmhhLmdldEhUTUwocmFuZ2UuY2xvbmVDb250ZW50cygpLCBmYWxzZSwgdGhpcyk7Cit9OworICAKKworLyoqIEdldCBhIFNlbGVjdGlvbiBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiAgTm90ZSB0aGF0IHNlbGVjdGlvbiBvYmplY3RzIGFyZSBicm93c2VyIHNwZWNpZmljLgorICoKKyAqIEByZXR1cm5zIFNlbGVjdGlvbgorICovCisgCitYaW5oYS5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uID0gZnVuY3Rpb24oKQoreworICB2YXIgc2VsID0gdGhpcy5faWZyYW1lLmNvbnRlbnRXaW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisgIGlmKHNlbCAmJiBzZWwuZm9jdXNOb2RlICYmIHNlbC5mb2N1c05vZGUudGFnTmFtZSAmJiBzZWwuZm9jdXNOb2RlLnRhZ05hbWUgPT0gJ0hUTUwnKQorICB7IC8vIEJhZCBuZXdzIGJhdG1hbiwgdGhpcyBzZWxlY3Rpb24gaXMgd29ua3kgIAorICAgIHZhciBib2QgPSB0aGlzLl9kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXTsKKyAgICB2YXIgcm5nID0gdGhpcy5jcmVhdGVSYW5nZSgpOworICAgIHJuZy5zZWxlY3ROb2RlQ29udGVudHMoYm9kKTsKKyAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CisgICAgc2VsLmFkZFJhbmdlKHJuZyk7CisgICAgc2VsLmNvbGxhcHNlVG9FbmQoKTsgICAgCisgIH0KKyAgcmV0dXJuIHNlbDsgCit9OworICAKKy8qKiBDcmVhdGUgYSBSYW5nZSBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gc2VsZWN0aW9uLiAgTm90ZSB0aGF0IHJhbmdlIG9iamVjdHMgYXJlIGJyb3dzZXIgc3BlY2lmaWMuCisgKgorICogIEBwYXJhbSBzZWwgU2VsZWN0aW9uIG9iamVjdCAoc2VlIGdldFNlbGVjdGlvbikKKyAqICBAcmV0dXJucyBSYW5nZQorICovCisgCitYaW5oYS5wcm90b3R5cGUuY3JlYXRlUmFuZ2UgPSBmdW5jdGlvbihzZWwpCit7CisgIHRoaXMuYWN0aXZhdGVFZGl0b3IoKTsKKyAgaWYgKCB0eXBlb2Ygc2VsICE9ICJ1bmRlZmluZWQiICkKKyAgeworICAgIHRyeQorICAgIHsKKyAgICAgIHJldHVybiBzZWwuZ2V0UmFuZ2VBdCgwKTsKKyAgICB9CisgICAgY2F0Y2goZXgpCisgICAgeworICAgICAgcmV0dXJuIHRoaXMuX2RvYy5jcmVhdGVSYW5nZSgpOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4gdGhpcy5fZG9jLmNyZWF0ZVJhbmdlKCk7CisgIH0KK307CisKKy8qKiAKKyAqIEBOT1RFIEkgZG9uJ3QgaGF2ZSBhIHdheSB0byB0ZXN0IHRoaXMgYW55IG1vcmUgKGRvbid0IGhhdmUgb2xkIG9wZXJhIHZlcnNpb24KKyAqICAgYW5kIGRvbid0IGNhcmUgZW5vdWdoIHRvIGZpbmQgb25lKSwgSSdtIGFzc3VtaW5nIGl0IHdpbGwgcHJvYmFibHkgYmUgY2xvc2UKKyAqICAgdG8gR2Vja28gc28gSSBoYXZlIGp1c3QgY29waWVkIGl0IGRpcmVjdGx5LgorICogCisgKiBEdWUgdG8gYnJvd3NlciBkaWZmZXJlbmNlcywgc29tZSBrZXlzIHdoaWNoIFhpbmhhIHByZWZlcnMgdG8gY2FsbCBhIGtleVByZXNzCisgKiAgIGRvIG5vdCBnZXQgYW4gYWN0dWFsIGtleXByZXNzIGV2ZW50LiAgVGhpcyBicm93c2VyIHNwZWNpZmljIGZ1bmN0aW9uIAorICogICBvdmVycmlkZGVuIGluIHRoZSBicm93c2VyJ3MgZW5naW5lIChlZyBtb2R1bGVzL1dlYktpdC9XZWJLaXQuanMpIGFzIHJlcXVpcmVkCisgKiAgIHRha2VzIGEga2V5ZG93biBldmVudCB0eXBlIGFuZCB0ZWxscyB1cyBpZiB3ZSBzaG91bGQgdHJlYXQgaXQgYXMgYSAKKyAqICAga2V5cHJlc3MgZXZlbnQgdHlwZS4KKyAqCisgKiAgVG8gYmUgY2xlYXIsIHRoZSBrZXlzIHdlIGFyZSBpbnRlcmVzdGVkIGhlcmUgYXJlCisgKiAgICAgICAgRXNjYXBlLCBUYWIsIEJhY2tzcGFjZSwgRGVsZXRlLCBFbnRlcgorICogICB0aGVzZSBhcmUgIm5vbiBwcmludGFibGUiIGNoYXJhY3RlcnMgd2hpY2ggd2Ugc3RpbGwgd2FudCB0byByZWdhcmQgZ2VuZXJhbGx5CisgKiAgIGFzIGEga2V5cHJlc3MuICAKKyAqIAorICogIElmIHRoZSBicm93c2VyIGRvZXMgbm90IHJlcG9ydCB0aGVzZSBhcyBhIGtleXByZXNzCisgKiAgICggaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9kNGUvcmF3LWZpbGUvdGlwL2tleS1ldmVudC10ZXN0Lmh0bWwgKQorICogICB0aGVuIHRoaXMgZnVuY3Rpb24gbXVzdCByZXR1cm4gdHJ1ZSBmb3Igc3VjaCBrZXlkb3duIGV2ZW50cyBhcyBpdCBpcworICogICBnaXZlbi4KKyAqIAorICogQHBhcmFtIEtleWJvYXJkRXZlbnQgd2l0aCBrZXlFdmVudC50eXBlID09IGtleWRvd24KKyAqIEByZXR1cm4gYm9vbGVhbgorICovCisKK1hpbmhhLnByb3RvdHlwZS5pc0tleURvd25UaGF0U2hvdWxkR2V0QnV0RG9lc05vdEdldEFLZXlQcmVzc0V2ZW50ID0gZnVuY3Rpb24oa2V5RXZlbnQpCit7CisgIC8vIERvbSAzCisgIGlmKHR5cGVvZiBrZXlFdmVudC5rZXkgIT0gJ3VuZGVmaW5lZCcpCisgIHsKKyAgICAvLyBGb3VuZCB1c2luZyBJRTExICh3aGljaCB1c2VzIEdlY2tvKQorICAgIC8vICAgdGhpcyBzZWVtcyB0byBiZSBhIHJlYXNvbmFibGUgd2F5IHRvIGRpc3Rpbmd1aXNoCisgICAgLy8gICBiZXR3ZWVuIElFMTEgYW5kIG90aGVyIEdlY2tvIGJyb3dzZXJzIHdoaWNoIGRvIAorICAgIC8vICAgbm90IHByb3ZpZGUgdGhlICJPbGQgRE9NMyIgLmNoYXIgcHJvcGVydHkKKyAgICBpZih0eXBlb2Yga2V5RXZlbnQuY2hhciAhPSAndW5kZWZpbmVkJykKKyAgICB7CisgICAgICBpZihrZXlFdmVudC5rZXkubWF0Y2goL14oVGFifEJhY2tzcGFjZXxEZWwpLykpCisgICAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBGaXJlZm94IHJlcG9ydHMgZXZlcnl0aGluZyB3ZSBuZWVkIGFzIGEga2V5cHJlc3MKKyAgICAvLyBjb3JyZWN0bHkgKGluIHRlcm1zIG9mIFhpbmhhKQorICB9CisgIC8vIExlZ2FjeQorICBlbHNlCisgIHsKKyAgICAvLyBFdmVuIHZlcnkgb2xkIGZpcmVmb3ggcmVwb3J0cyBldmVyeXRoaW5nIHdlIG5lZWQgYXMgYSBrZXlwcmVzcworICAgIC8vIGNvcnJlY3RseSAoaW4gdGVybXMgb2YgWGluaGEpCisgIH0KK307CisKKy8qKiBSZXR1cm4gdGhlIGNoYXJhY3RlciAoYXMgYSBzdHJpbmcpIG9mIGEga2V5RXZlbnQgIC0gaWUsIHByZXNzIHRoZSAnYScga2V5IGFuZAorICogIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuICdhJywgcHJlc3MgU0hJRlQtYSBhbmQgaXQgd2lsbCByZXR1cm4gJ0EnLgorICogCisgKiAgQHBhcmFtICAga2V5RXZlbnQKKyAqICBAcmV0dXJucyBzdHJpbmcKKyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1hpbmhhLnByb3RvdHlwZS5nZXRLZXkgPSBmdW5jdGlvbihrZXlFdmVudCkKK3sKKyAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoa2V5RXZlbnQuY2hhckNvZGUpOworfQorCisvKiogUmV0dXJuIHRoZSBIVE1MIHN0cmluZyBvZiB0aGUgZ2l2ZW4gRWxlbWVudCwgaW5jbHVkaW5nIHRoZSBFbGVtZW50LgorICogCisgKiBAcGFyYW0gZWxlbWVudCBIVE1MIEVsZW1lbnQgRG9tTm9kZQorICogQHJldHVybnMgc3RyaW5nCisgKi8KKyAKK1hpbmhhLmdldE91dGVySFRNTCA9IGZ1bmN0aW9uKGVsZW1lbnQpCit7CisgIHJldHVybiAobmV3IFhNTFNlcmlhbGl6ZXIoKSkuc2VyaWFsaXplVG9TdHJpbmcoZWxlbWVudCk7Cit9OworCisKKy8qIENhcmV0IHBvc2l0aW9uIHJlbWVtYmVyaW5nIHdoZW4gc3dpdGNoIGJldHdlZW4gdGV4dCBhbmQgaHRtbCBtb2RlLgorICogTGFyZ2VseSB0aGlzIGlzIHRoZSBzYW1lIGFzIGZvciBHZWNrbyBleGNlcHQ6CisgKgorICogT3BlcmEgZG9lcyBub3QgaGF2ZSB3aW5kb3cuZmluZCgpIHNvIHdlIHVzZSBpbnN0ZWFkIGFuIGVsZW1lbnQgd2l0aCBrbm93bgorICogaWQgKDxzcGFuIGlkPSJYaW5oYU9wZXJhQ2FyZXRNYXJrZXIiPk1BUks8L3NwYW4+KSBzbyB0aGF0IHdlIGNhbiAKKyAqIGRvIF9kb2MuZ2V0RWxlbWVudEJ5SWQoKSBvbiBpdC4KKyAqIAorICogT3BlcmEgZm9yIHNvbWUgcmVhc29uIHdpbGwgbm90IHNldCB0aGUgaW5zZXJ0IHBvaW50IChmbGFzaGluZyBjYXJldCkKKyAqIGFueXdheSB0aG91Z2gsIGluIHRoZW9yeSwgdGhlIGlmcmFtZSBpcyBmb2N1c2VkIChpbiBmaW5kQ0MgYmVsb3cpIGFuZCB0aGVuCisgKiB0aGUgc2VsZWN0aW9uIChjb250YWluaW5nIHRoZSBzcGFuIGFib3ZlKSBpcyBjb2xsYXBzZWQsIGl0IHNob3VsZCBzaG93CisgKiBjYXJldC4gIEkgZG9uJ3Qga25vdyB3aHkgbm90LiAgU2VlbXMgdG8gcmVxdWlyZSB1c2VyIHRvIGFjdHVhbGx5CisgKiBjbGljayB0byBnZXQgdGhlIGNhcmV0IHRvIHNob3cgKG9yIHR5cGUgYW55dGhpbmcgd2l0aG91dCBpdCBhY3Rpbmcgd2llcmQpPyAKKyAqIFZlcnkgYW5ub3lpbmcuCisgKgorICovIAorWGluaGEuY2MgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDgyODYpOworWGluaGEucHJvdG90eXBlLnNldENDID0gZnVuY3Rpb24gKCB0YXJnZXQgKQoreworICAvLyBEbyBhIHR3byBzdGVwIGNhcmV0IGluc2VydGlvbiwgZmlyc3QgYSBzaW5nbGUgY2hhciwgdGhlbiB3ZSdsbCByZXBsYWNlIHRoYXQgd2l0aCB0aGUgCisgIC8vIGlkJ2Qgc3Bhbi4KKyAgdmFyIGNjID0gWGluaGEuY2M7CisgIAorICB0cnkKKyAgeworICAgIGlmICggdGFyZ2V0ID09ICJ0ZXh0YXJlYSIgKQorICAgIHsKKyAgICAgIHZhciB0YSA9IHRoaXMuX3RleHRBcmVhOworICAgICAgdmFyIGluZGV4ID0gdGEuc2VsZWN0aW9uU3RhcnQ7CisgICAgICB2YXIgYmVmb3JlID0gdGEudmFsdWUuc3Vic3RyaW5nKCAwLCBpbmRleCApCisgICAgICB2YXIgYWZ0ZXIgPSB0YS52YWx1ZS5zdWJzdHJpbmcoIGluZGV4LCB0YS52YWx1ZS5sZW5ndGggKTsKKworICAgICAgaWYgKCBhZnRlci5tYXRjaCgvXltePF0qPi8pICkgLy8gbWFrZSBzdXJlIGN1cnNvciBpcyBpbiBhbiBlZGl0YWJsZSBhcmVhIChvdXRzaWRlIHRhZ3MsIHNjcmlwdCBibG9ja3MsIGVudGl0aWVzLCBhbmQgaW5zaWRlIHRoZSBib2R5KQorICAgICAgeworICAgICAgICB2YXIgdGFnRW5kID0gYWZ0ZXIuaW5kZXhPZigiPiIpICsgMTsKKyAgICAgICAgdGEudmFsdWUgPSBiZWZvcmUgKyBhZnRlci5zdWJzdHJpbmcoIDAsIHRhZ0VuZCApICsgY2MgKyBhZnRlci5zdWJzdHJpbmcoIHRhZ0VuZCwgYWZ0ZXIubGVuZ3RoICk7CisgICAgICB9CisgICAgICBlbHNlIHRhLnZhbHVlID0gYmVmb3JlICsgY2MgKyBhZnRlcjsKKyAgICAgIHRhLnZhbHVlID0gdGEudmFsdWUucmVwbGFjZShuZXcgUmVnRXhwICgnKCZbXicrY2MrJztdKj8pKCcrY2MrJykoW14nK2NjKyddKj87KScpLCAiJDEkMyQyIik7CisgICAgICB0YS52YWx1ZSA9IHRhLnZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCAoJyg8c2NyaXB0W14+XSo+W14nK2NjKyddKj8pKCcrY2MrJykoW14nK2NjKyddKj88XC9zY3JpcHQ+KScpLCAiJDEkMyQyIik7CisgICAgICB0YS52YWx1ZSA9IHRhLnZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCAoJ14oW14nK2NjKyddKikoJytjYysnKShbXicrY2MrJ10qPGJvZHlbXj5dKj4pKC4qPyknKSwgIiQxJDMkMiQ0Iik7CisgICAgICAKKyAgICAgIHRhLnZhbHVlID0gdGEudmFsdWUucmVwbGFjZShjYywgJzxzcGFuIGlkPSJYaW5oYU9wZXJhQ2FyZXRNYXJrZXIiPk1BUks8L3NwYW4+Jyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKKyAgICAgIAorICAgICAgdmFyIG1hcmsgPSAgdGhpcy5fZG9jLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKKyAgICAgIG1hcmsuaWQgID0gJ1hpbmhhT3BlcmFDYXJldE1hcmtlcic7CisgICAgICBzZWwuZ2V0UmFuZ2VBdCgwKS5pbnNlcnROb2RlKCBtYXJrICk7CisgICAgICAKKyAgICB9CisgIH0gY2F0Y2ggKGUpIHt9Cit9OworCitYaW5oYS5wcm90b3R5cGUuZmluZENDID0gZnVuY3Rpb24gKCB0YXJnZXQgKQoreworICBpZiAoIHRhcmdldCA9PSAndGV4dGFyZWEnICkKKyAgeyAgCisgICAgdmFyIHRhID0gdGhpcy5fdGV4dEFyZWE7CisgICAgdmFyIHBvcyA9IHRhLnZhbHVlLnNlYXJjaCggLyg8c3BhblxzK2lkPSJYaW5oYU9wZXJhQ2FyZXRNYXJrZXIiXHMqXC8/PigoXHN8KE1BUkspKSo8XC9zcGFuPik/KS8gKTsgICAgCisgICAgaWYgKCBwb3MgPT0gLTEgKSByZXR1cm47CisgICAgdmFyIGNjID0gUmVnRXhwLiQxOworICAgIHZhciBlbmQgPSBwb3MgKyBjYy5sZW5ndGg7CisgICAgdmFyIGJlZm9yZSA9ICB0YS52YWx1ZS5zdWJzdHJpbmcoIDAsIHBvcyApOworICAgIHZhciBhZnRlciA9IHRhLnZhbHVlLnN1YnN0cmluZyggZW5kLCB0YS52YWx1ZS5sZW5ndGggKTsKKyAgICB0YS52YWx1ZSA9IGJlZm9yZSA7CisgIAorICAgIHRhLnNjcm9sbFRvcCA9IHRhLnNjcm9sbEhlaWdodDsKKyAgICB2YXIgc2Nyb2xsUG9zID0gdGEuc2Nyb2xsVG9wOworICAgIAorICAgIHRhLnZhbHVlICs9IGFmdGVyOworICAgIHRhLnNldFNlbGVjdGlvblJhbmdlKHBvcyxwb3MpOworICAKKyAgICB0YS5mb2N1cygpOworICAgIAorICAgIHRhLnNjcm9sbFRvcCA9IHNjcm9sbFBvczsKKworICB9CisgIGVsc2UKKyAgeyAgICAKKyAgICB2YXIgbWFya2VyID0gdGhpcy5fZG9jLmdldEVsZW1lbnRCeUlkKCdYaW5oYU9wZXJhQ2FyZXRNYXJrZXInKTsKKyAgICBpZihtYXJrZXIpIAorICAgIHsKKyAgICAgIHRoaXMuZm9jdXNFZGl0b3IoKTsvLyB0aGlzLl9pZnJhbWUuY29udGVudFdpbmRvdy5mb2N1cygpOworICAgICAgCisgICAgICB2YXIgcm5nID0gdGhpcy5jcmVhdGVSYW5nZSgpOworICAgICAgcm5nLnNlbGVjdE5vZGUobWFya2VyKTsKKyAgICAgIAorICAgICAgdmFyIHNlbCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7CisgICAgICBzZWwuYWRkUmFuZ2Uocm5nKTsgCisgICAgICBzZWwuY29sbGFwc2VUb1N0YXJ0KCk7CisgICAgICAKKyAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KG1hcmtlcik7CisgICAgICAKKyAgICAgIG1hcmtlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG1hcmtlcik7CisgICAgICByZXR1cm47CisgICAgfQorICB9Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tIEVYVEVORCBTT01FIFNUQU5EQVJEICJYaW5oYS5wcm90b3R5cGUiIE1FVEhPRFMgLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCitYaW5oYS5wcm90b3R5cGUuX3N0YW5kYXJkVG9nZ2xlQm9yZGVycyA9IFhpbmhhLnByb3RvdHlwZS5fdG9nZ2xlQm9yZGVyczsKK1hpbmhhLnByb3RvdHlwZS5fdG9nZ2xlQm9yZGVycyA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIHJlc3VsdCA9IHRoaXMuX3N0YW5kYXJkVG9nZ2xlQm9yZGVycygpOworICAgIAorICAvLyBmbGFzaGluZyB0aGUgZGlzcGxheSBmb3JjZXMgbW96IHRvIGxpc3RlbiAoSkI6MTgtMDQtMjAwNSkgLSAjMTAyCisgIHZhciB0YWJsZXMgPSB0aGlzLl9kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ1RBQkxFJyk7CisgIGZvcih2YXIgaSA9IDA7IGkgPCB0YWJsZXMubGVuZ3RoOyBpKyspCisgIHsKKyAgICB0YWJsZXNbaV0uc3R5bGUuZGlzcGxheT0ibm9uZSI7CisgICAgdGFibGVzW2ldLnN0eWxlLmRpc3BsYXk9InRhYmxlIjsKKyAgfQorICAKKyAgcmV0dXJuIHJlc3VsdDsKK307CisqLworCisvKiogUmV0dXJuIHRoZSBkb2N0eXBlIG9mIGEgZG9jdW1lbnQsIGlmIHNldAorICogCisgKiBAcGFyYW0gZG9jIERPTSBlbGVtZW50IGRvY3VtZW50CisgKiBAcmV0dXJucyBzdHJpbmcgdGhlIGFjdHVhbCBkb2N0eXBlCisgKi8KK1hpbmhhLmdldERvY3R5cGUgPSBmdW5jdGlvbiAoZG9jKQoreworICB2YXIgZCA9ICcnOworICBpZiAoZG9jLmRvY3R5cGUpCisgIHsKKyAgICBkICs9ICc8IURPQ1RZUEUgJyArIGRvYy5kb2N0eXBlLm5hbWUgKyAiIFBVQkxJQyAiOworICAgIGQgKz0gIGRvYy5kb2N0eXBlLnB1YmxpY0lkID8gJyInICsgZG9jLmRvY3R5cGUucHVibGljSWQgKyAnIicgOiAnJzsgIAorICAgIGQgKz0gIGRvYy5kb2N0eXBlLnN5c3RlbUlkID8gJyAiJysgZG9jLmRvY3R5cGUuc3lzdGVtSWQgKyAnIicgOiAnJzsgCisgICAgZCArPSAiPiI7CisgIH0KKyAgcmV0dXJuIGQ7Cit9OworCitYaW5oYS5wcm90b3R5cGUuX3N0YW5kYXJkSW5pdElmcmFtZSA9IFhpbmhhLnByb3RvdHlwZS5pbml0SWZyYW1lOworWGluaGEucHJvdG90eXBlLmluaXRJZnJhbWUgPSBmdW5jdGlvbigpCit7CisgIGlmKCF0aGlzLl9pZnJhbWVMb2FkRG9uZSkgCisgIHsgICAgCisgICAgaWYodGhpcy5faWZyYW1lLmNvbnRlbnRXaW5kb3cgJiYgdGhpcy5faWZyYW1lLmNvbnRlbnRXaW5kb3cueGluaGFSZWFkeVRvUm9sbCkKKyAgICB7CisgICAgICB0aGlzLl9pZnJhbWVMb2FkRG9uZSA9IHRydWU7CisgICAgICB0aGlzLl9zdGFuZGFyZEluaXRJZnJhbWUoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8vIFRpbWVvdXQgYSBsaXR0bGUgKE9wZXJhIGlzIGEgYml0IGRvZGd5IGFib3V0IHVzaW5nIGFuIGV2ZW50KQorICAgICAgdmFyIGVkaXRvciA9IHRoaXM7CisgICAgICBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsgZWRpdG9yLmluaXRJZnJhbWUoKSB9LCA1KTsKKyAgICB9CisgIH0KK30KKworLy8gRm9yIHNvbWUgcmVhc29uLCBPcGVyYSBkb2Vzbid0IGxpc3RlbiB0byBhZGRFdmVudExpc3RlbmVyIGZvciBhdCBsZWFzdCBzZWxlY3QgZWxlbWVudHMgd2l0aCBldmVudCA9IGNoYW5nZQorLy8gc28gd2Ugd2lsbCBoYXZlIHRvIGludGVyY2VwdCB0aG9zZSBhbmQgdXNlIGEgRG9tMCBldmVudCwgdGhlc2UgYXJlIHVzZWQgZWcgZm9yIHRoZSBmb250bmFtZS9zaXplL2Zvcm1hdAorLy8gZHJvcGRvd25zIGluIHRoZSB0b29sYmFyCitYaW5oYS5fYWRkRXZlbnRPcGVyYU9yaWcgPSBYaW5oYS5fYWRkRXZlbnQ7CitYaW5oYS5fYWRkRXZlbnQgPSBmdW5jdGlvbihlbCwgZXZuYW1lLCBmdW5jKQoreworICBpZihlbC50YWdOYW1lICYmIGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnc2VsZWN0JyAmJiBldm5hbWUgPT0gJ2NoYW5nZScpCisgIHsKKyAgICByZXR1cm4gWGluaGEuYWRkRG9tMEV2ZW50KGVsLGV2bmFtZSxmdW5jKTsKKyAgfQorICAKKyAgcmV0dXJuIFhpbmhhLl9hZGRFdmVudE9wZXJhT3JpZyhlbCxldm5hbWUsZnVuYyk7Cit9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL09wZXJhL2xhbmcvY2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL09wZXJhL2xhbmcvY2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY0ZDdiZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvT3BlcmEvbGFuZy9jaC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9PcGVyYS9sYW5nL2RhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9PcGVyYS9sYW5nL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YmYzNzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL09wZXJhL2xhbmcvZGEuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIkluZHPDpnQta25hcHBlbiB2aXJrZXIgaWtrZSBpIE1vemlsbGEtYmFzZXJlZGUgYnJvd3NlcmUuIEJydWcgQ3RybC1WIHDDpSB0YXN0YXR1cmV0IGZvciBhdCBpbmRzw6Z0dGUuIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL09wZXJhL2xhbmcvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL09wZXJhL2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFjZmRiNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvT3BlcmEvbGFuZy9kZS5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiQXVzIFNpY2hlcmhlaXRzZ3LDvG5kZW4gZMO8cmZlbiBTa3JpcHRlIG5vcm1hbGVyd2Vpc2UgbmljaHQgYXVmIEF1c3NjaG5laWRlbi9Lb3BpZXJlbi9FaW5mw7xnZW4genVncmVpZmVuLiBCZW51dHplbiBTaWUgYml0dGUgZGllIGVudHNwcmVjaGVuZGVuIFRhc3RhdHVyLUtvbW1hbmRvcyAoU3RyZyArIHgvYy92KS4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvT3BlcmEvbGFuZy9lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvT3BlcmEvbGFuZy9lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWVjY2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9PcGVyYS9sYW5nL2VzLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXMiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICJFbCBib3TDs24gZGUgcGVnYXIgbm8gZnVuY2lvbmEgZW4gbG9zIG5hdmVnYWRvcmVzIGRlIE1vemlsbGEgcG9yIG1vdGl2b3MgZGUgc2VndXJpZGFkLiBQcmVzaW9uZSBDVFJMLVYgZW4gc3UgdGVjbGFkbyBwYXJhIHBlZ2FybG8gZGlyZWN0YW1lbnRlIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL09wZXJhL2xhbmcvZXUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL09wZXJhL2xhbmcvZXUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFkZTc1YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvT3BlcmEvbGFuZy9ldS5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImV1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiSXRzYXRzaSBib3RvaWEgZXogZGFiaWwgTW96aWxsYW4gb2luYXJyaXR1dGFrbyBuYWJpZ2F0emFpbGVldGFuIChhcnJhem9pIHRla25pa29lbmdhdGlrKS4gU2FjYXR1IENUUkwtViB6dXJlIHRla2xhdHVhbiwgenV6ZW5lYW4gaXRzYXN0ZWtvLiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9PcGVyYS9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9PcGVyYS9sYW5nL2ZhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMmM1ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL09wZXJhL2xhbmcvZmEuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogItiv2qnZhdmHINqG2LPYqNin2YbYr9mGINiv2LEg2YXYsdmI2LHar9ix2YfYp9uMINiz2LHbjCBNb3ppbGxhINqp2KfYsSDZhtmF24wg2qnZhtivICjYqNmHINiv2YTYp9uM2YQg2YHZhtuMINin2YXZhtuM2KrbjCku2KjYsdin24wg2obYs9io2KfZhtiv2YYg2YXYs9iq2YLbjNmFINiMINiv2qnZhdmHIENUUkwtViDYsdinINiv2LEg2LXZgdit2Ycg2qnZhNuM2K8g2KjYstmG24zYry4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvT3BlcmEvbGFuZy9mci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvT3BlcmEvbGFuZy9mci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmYxYTkxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9PcGVyYS9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICJMZSBib3V0b24gQ29sbGVyIG5lIGZvbmN0aW9ubmUgcGFzIHN1ciBsZXMgbmF2aWdhdGV1cnMgYmFzw6lzIHN1ciBNb3ppbGxhIChwb3VyIGRlcyByYWlzb25zIGRlIHPDqWN1cml0w6kpLiBQcmVzc2V6IENUUkwtViBhdSBjbGF2aWVyIHBvdXIgY29sbGVyIGRpcmVjdGVtZW50LiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9PcGVyYS9sYW5nL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9PcGVyYS9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NDE4OTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL09wZXJhL2xhbmcvamEuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIk1vemlsbGHjg5njg7zjgrnjga5XZWLjg5bjg6njgqbjgrbjgafjga/jgIHosrzjgorku5jjgZHjg5zjgr/jg7Pjga/mqZ/og73jgZfjgb7jgZvjgpPvvIjmioDooZPnmoTjgarjgrvjgq3jg6Xjg6rjg4bjgqPkuIrjga7nkIbnlLHjgafvvInjgIJDdHJsK1bjgq3jg7zjgpLmirzjgZfjgabnm7TmjqXosrzjgorku5jjgZHjgabjgY/jgaDjgZXjgYTjgIIiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvT3BlcmEvbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9PcGVyYS9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRiY2UyYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvT3BlcmEvbGFuZy9sY19iYXNlLmpzCkBAIC0wLDAgKzEsMjYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLworLy8gTEFORzogImVuIiwgRU5DT0RJTkc6IFVURi04CisvLyBBdXRob3I6IFRyYW5zbGF0b3ItTmFtZSwgPGVtYWlsQGV4YW1wbGUuY29tPgorLy8KKy8vIExhc3QgcmV2aXNpb246IDIwMTgtMDQtMTIKKy8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KKy8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyAoUGxlYXNlLCByZW1vdmUgaW5mb3JtYXRpb24gYmVsb3cpCisvLyBGT1IgVFJBTlNMQVRPUlM6CisvLworLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCisvLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCisvLworLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7CisvLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50CisvLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCisKK3sKKyAgICAiTUFSSyI6ICIiLAorICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL09wZXJhL2xhbmcvcGwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL09wZXJhL2xhbmcvcGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJkOTNhNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvT3BlcmEvbGFuZy9wbC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInBsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiUHJ6eWNpc2sgV2tsZWogbmllIGR6aWHFgmEgdyBwcnplZ2zEhWRhcmthY2ggTW96aWxsYSB6IHV3YWdpIG5hIHVzdGF3aWVuaWEgYmV6cGllY3plxYRzdHdhLiBOYWNpxZtuaWogQ1JUTC1WLCBhYnkgd2tsZWnEhyB6YXdhcnRvxZvEhyBzY2hvd2thLiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9PcGVyYS9sYW5nL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9PcGVyYS9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OGZjZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL09wZXJhL2xhbmcvcHRfYnIuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwdF9iciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIk8gYm90w6NvIENvbGFyIG7Do28gZnVuY2lvbmEgZW0gbmF2ZWdhZG9yZXMgYmFzZWFkbyBubyBNb3ppbGxhIChwb3IgcmF6w7VlcyB0w6ljbmljYXMgZGUgc2VndXJhbsOnYSkuIFByZXNzaW9uZSBDVFJMLVYgbm8gc2V1IHRlY2xhZG8gcGFyYSBjb2xhciBkaXJldGFtZW50ZS4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvT3BlcmEvbGFuZy9ydS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvT3BlcmEvbGFuZy9ydS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDgwNjkzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9PcGVyYS9sYW5nL3J1LmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicnUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICLQmtC90L7Qv9C60LAg0JLRgdGC0LDQstC40YLRjCDQvdC1INGA0LDQsdC+0YLQsNC10YIg0LIg0LHRgNCw0YPQt9C10YDQsNGFINC90LAg0L7RgdC90L7QstC1IE1vemlsbGEgKNC/0L4g0YLQtdGF0L3QuNGH0LXRgdC60LjQvCDQv9GA0LjRh9C40L3QsNC8LCDRgdCy0Y/Qt9Cw0L3QvdGL0Lwg0YEg0LHQtdC30L7Qv9Cw0YHQvdC+0YHRgtGM0Y4pLiDQndCw0LbQvNC40YLQtSBDdHJsLVYg0L3QsCDQutC70LDQstC40LDRgtGD0YDQtSwg0YfRgtC+0LHRiyDQstGB0YLQsNCy0LjRgtGMLiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9PcGVyYS9sYW5nL3NyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9PcGVyYS9sYW5nL3NyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyN2E0NTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL09wZXJhL2xhbmcvc3IuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogItCU0YPQs9C80LUgJ9C30LDQu9C10L/QuCcg0L3QtSDRgNCw0LTQuCDRgyDQv9GA0LXRgtGA0LDQttC40LLQsNGH0LjQvNCwINC/0L7RgNC+0LTQuNGG0LUgTW96aWxsYSAo0LjQtyDRgNCw0LfQu9C+0LPQsCDRgdC40LPRg9GA0L3QvtGB0YLQuCkuINCf0YDQuNGC0LjRgdC90LjRgtC1IENUUkwtViDQvdCwINGC0LDRgdGC0LDRgtGD0YDQuCDQtNCwINC00LjRgNC10LrRgtC90L4g0LfQsNC70LXQv9C40YLQtS4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvT3BlcmEvbGFuZy9zdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvT3BlcmEvbGFuZy9zdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmY3OTkyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9PcGVyYS9sYW5nL3N2LmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3YiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICJEZW5uYSBrbmFwcCBmdW5nZXJhciBlaiBpIE1vemlsbGFiYXNlcmFkIHdlYmzDpHNhcmUsIGFudsOkbmQgaXN0w6RsbGV0IHNuYWJidGFuZ2VudGVybmEgQ1RSTC1WIHDDpSB0YW5nZW50Ym9yZGV0IGbDtnIgYXR0IGtsaXN0cmEgaW4uIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL09wZXJhL2xhbmcvdHIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL09wZXJhL2xhbmcvdHIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNkOGMzMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvT3BlcmEvbGFuZy90ci5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiR8O8dmVubGlrIHNlYmVwbGVyaW5kZW4gZG9sYXnEsSBiYXrEsSB0YXJhecSxY8SxbGFyIGtlcy9rb3B5YWxhL3lhcMSxxZ90xLFyIGtvbXV0bGFyxLFuYSBlcmnFn2VtZXouIEtlc21lL2tvcHlhbGFtYS95YXDEscWfdMSxcm1hIGtvbXV0dW51IGt1bGxhbm1hayBpw6dpbiBsw7x0ZmVuICBrbGF2eWVuaXppbiBrxLFzYXlvbGxhcsSxbsSxIGt1bGxhbsSxbiAoQ1RSTCArIEMvVi9YKS4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvV2ViS2l0L1dlYktpdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL21vZHVsZXMvV2ViS2l0L1dlYktpdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjAyNDc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9XZWJLaXQvV2ViS2l0LmpzCkBAIC0wLDAgKzEsOTUyIEBACisKKyAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTpub1RhYnM9dHJ1ZTp0YWJTaXplPTI6aW5kZW50U2l6ZT0yOi0tCisgICAgLS0gIFhpbmhhIChpcyBub3QgaHRtbEFyZWEpIC0gaHR0cDovL3hpbmhhLmdvZ28uY28ubnovCisgICAgLS0KKyAgICAtLSAgVXNlIG9mIFhpbmhhIGlzIGdyYW50ZWQgYnkgdGhlIHRlcm1zIG9mIHRoZSBodG1sQXJlYSBMaWNlbnNlIChiYXNlZCBvbgorICAgIC0tICBCU0QgbGljZW5zZSkgIHBsZWFzZSByZWFkIGxpY2Vuc2UudHh0IGluIHRoaXMgcGFja2FnZSBmb3IgZGV0YWlscy4KKyAgICAtLQorICAgIC0tICBYaW5oYSB3YXMgb3JpZ2luYWxseSBiYXNlZCBvbiB3b3JrIGJ5IE1paGFpIEJhem9uIHdoaWNoIGlzOgorICAgIC0tICAgICAgQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQgZHluYXJjaC5jb20uCisgICAgLS0gICAgICBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBpbnRlcmFjdGl2ZXRvb2xzLmNvbSwgaW5jLgorICAgIC0tICAgICAgVGhpcyBjb3B5cmlnaHQgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZS4KKyAgICAtLQorICAgIC0tIFRoaXMgaXMgdGhlIFdlYktpdCAoU2FmYXJpKSBjb21wYXRhYmlsaXR5IHBsdWdpbiwgcGFydCBvZiB0aGUgWGluaGEgY29yZS4KKyAgICAtLQorICAgIC0tICBUaGUgZmlsZSBpcyBsb2FkZWQgYXMgYSBzcGVjaWFsIHBsdWdpbiBieSB0aGUgWGluaGEgQ29yZSB3aGVuCisgICAgLS0gIFhpbmhhIGlzIGJlaW5nIHJ1biB1bmRlciBhIFdlYmtpdCBiYXNlZCBicm93c2VyIHN1Y2ggYXMgU2FmYXJpCisgICAgLS0KKyAgICAtLSAgSXQgcHJvdmlkZXMgaW1wbGVtZW50YXRpb24gYW5kIHNwZWNpYWxpc2F0aW9uIGZvciB2YXJpb3VzIG1ldGhvZHMKKyAgICAtLSAgaW4gdGhlIGNvcmUgd2hlcmUgZGlmZmVyZW50IGFwcHJvYWNoZXMgcGVyIGJyb3dzZXIgYXJlIHJlcXVpcmVkLgorICAgIC0tCisgICAgLS0gIERlc2lnbiBOb3Rlczo6CisgICAgLS0gICBNb3N0IG1ldGhvZHMgaGVyZSB3aWxsIHNpbXBseSBiZSBvdmVycmlkaW5nIFhpbmhhLnByb3RvdHlwZS48bWV0aG9kPgorICAgIC0tICAgYW5kIHNob3VsZCBiZSBjYWxsZWQgdGhhdCwgYnV0IG1ldGhvZHMgc3BlY2lmaWMgdG8gV2Via2l0IHNob3VsZCAKKyAgICAtLSAgIGJlIGEgcGFydCBvZiB0aGUgV2ViS2l0LnByb3RvdHlwZSwgd2Ugd29uJ3QgdHJhbXBsZSBvbiBuYW1lc3BhY2UKKyAgICAtLSAgIHRoYXQgd2F5LgorICAgIC0tCisgICAgLS0gICRIZWFkVVJMOiBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL1dlYktpdC9XZWJLaXQuanMgJAorICAgIC0tICAkTGFzdENoYW5nZWREYXRlOiAyMDE4LTAyLTE5IDIwOjM1OjQ5ICsxMzAwIChNb24sIDE5IEZlYiAyMDE4KSAkCisgICAgLS0gICRMYXN0Q2hhbmdlZFJldmlzaW9uOiAxNDAyICQKKyAgICAtLSAgJExhc3RDaGFuZ2VkQnk6IGdvZ28gJAorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1dlYktpdC5fcGx1Z2luSW5mbyA9IHsKKyAgbmFtZSAgICAgICAgICA6ICJXZWJLaXQiLAorICBvcmlnaW4gICAgICAgIDogIlhpbmhhIENvcmUiLAorICB2ZXJzaW9uICAgICAgIDogIiRMYXN0Q2hhbmdlZFJldmlzaW9uOiAxNDAyICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywgJyQxJyksCisgIGRldmVsb3BlciAgICAgOiAiVGhlIFhpbmhhIENvcmUgRGV2ZWxvcGVyIFRlYW0iLAorICBkZXZlbG9wZXJfdXJsIDogIiRIZWFkVVJMOiBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL1dlYktpdC9XZWJLaXQuanMgJCIucmVwbGFjZSgvXlteOl0qOlxzKiguKilccypcJCQvLCAnJDEnKSwKKyAgc3BvbnNvciAgICAgICA6ICIiLAorICBzcG9uc29yX3VybCAgIDogIiIsCisgIGxpY2Vuc2UgICAgICAgOiAiaHRtbEFyZWEiCit9OworCitmdW5jdGlvbiBXZWJLaXQoZWRpdG9yKSB7CisgIHRoaXMuZWRpdG9yID0gZWRpdG9yOyAgCisgIGVkaXRvci5XZWJLaXQgPSB0aGlzOworfQorCisvKiogQWxsb3cgV2Via2l0IHRvIGhhbmRsZSBzb21lIGtleSBldmVudHMgaW4gYSBzcGVjaWFsIHdheS4KKyAqLworICAKK1dlYktpdC5wcm90b3R5cGUub25LZXlQcmVzcyA9IGZ1bmN0aW9uKGV2KQoreworICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisgIHZhciBzID0gZWRpdG9yLmdldFNlbGVjdGlvbigpOworICAKKyAgLy8gSGFuZGxlIHNob3J0Y3V0cworICBpZihlZGl0b3IuaXNTaG9ydEN1dChldikpCisgIHsgICAgCisgICAgc3dpdGNoKGVkaXRvci5nZXRLZXkoZXYpLnRvTG93ZXJDYXNlKCkpCisgICAgeworICAgICAgY2FzZSAneic6CisgICAgICAgIGlmKGVkaXRvci5fdW5MaW5rICYmIGVkaXRvci5fdW5saW5rT25VbmRvKQorICAgICAgICB7CisgICAgICAgICAgWGluaGEuX3N0b3BFdmVudChldik7CisgICAgICAgICAgZWRpdG9yLl91bkxpbmsoKTsKKyAgICAgICAgICBlZGl0b3IudXBkYXRlVG9vbGJhcigpOworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICBicmVhazsKKwkgIAorCSAgY2FzZSAnYSc6CisgICAgICAgIC8vIGN0cmwtYSBzZWxlY3RzIGFsbCwgYnV0IAorICAgICAgYnJlYWs7CisJICAKKyAgICAgIGNhc2UgJ3YnOgorICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IHVzaW5nIGh0bWxhcmVhUGFzdGUsIGRvbid0IGxldCBYaW5oYSB0cnkgYW5kIGJlIGZhbmN5IGJ1dCBsZXQgdGhlIAorICAgICAgICAvLyBldmVudCBiZSBoYW5kbGVkIG5vcm1hbGx5IGJ5IHRoZSBicm93c2VyIChkb24ndCBzdG9wRXZlbnQgaXQpCisgICAgICAgIGlmKCFlZGl0b3IuY29uZmlnLmh0bWxhcmVhUGFzdGUpCisgICAgICAgIHsgICAgICAgICAgCisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICAKKyAgLy8gSGFuZGxlIG5vcm1hbCBjaGFyYWN0ZXJzCisgIHN3aXRjaChlZGl0b3IuZ2V0S2V5KGV2KSkKKyAgeworICAgIC8vIFNwYWNlLCBzZWUgaWYgdGhlIHRleHQganVzdCB0eXBlZCBsb29rcyBsaWtlIGEgVVJMLCBvciBlbWFpbCBhZGRyZXNzCisgICAgLy8gYW5kIGxpbmsgaXQgYXBwcm9wcmlhdGx5CisgICAgY2FzZSAnICc6IAorICAgICAgdmFyIGF1dG9XcmFwID0gZnVuY3Rpb24gKHRleHROb2RlLCB0YWcpCisgICAgICB7CisgICAgICAgIHZhciByaWdodFRleHQgPSB0ZXh0Tm9kZS5uZXh0U2libGluZzsKKyAgICAgICAgaWYgKCB0eXBlb2YgdGFnID09ICdzdHJpbmcnKQorICAgICAgICB7CisgICAgICAgICAgdGFnID0gZWRpdG9yLl9kb2MuY3JlYXRlRWxlbWVudCh0YWcpOworICAgICAgICB9CisgICAgICAgIHZhciBhID0gdGV4dE5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGFnLCByaWdodFRleHQpOworICAgICAgICBYaW5oYS5yZW1vdmVGcm9tUGFyZW50KHRleHROb2RlKTsKKyAgICAgICAgYS5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7CisgICAgICAgIHJpZ2h0VGV4dC5kYXRhID0gJyAnICsgcmlnaHRUZXh0LmRhdGE7CisgICAgCisgICAgICAgIHMuY29sbGFwc2UocmlnaHRUZXh0LCAxKTsKKyAgICAKKyAgICAgICAgZWRpdG9yLl91bkxpbmsgPSBmdW5jdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICB2YXIgdCA9IGEuZmlyc3RDaGlsZDsKKyAgICAgICAgICBhLnJlbW92ZUNoaWxkKHQpOworICAgICAgICAgIGEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCwgYSk7CisgICAgICAgICAgWGluaGEucmVtb3ZlRnJvbVBhcmVudChhKTsKKyAgICAgICAgICBlZGl0b3IuX3VuTGluayA9IG51bGw7CisgICAgICAgICAgZWRpdG9yLl91bmxpbmtPblVuZG8gPSBmYWxzZTsKKyAgICAgICAgfTsKKyAgICAgICAgZWRpdG9yLl91bmxpbmtPblVuZG8gPSB0cnVlOworICAgICAgICByZXR1cm4gYTsKKyAgICAgIH07CisgIAorICAgICAgaWYgKCBlZGl0b3IuY29uZmlnLmNvbnZlcnRVcmxzVG9MaW5rcyAmJiBzICYmIHMuaXNDb2xsYXBzZWQgJiYgcy5hbmNob3JOb2RlLm5vZGVUeXBlID09IDMgJiYgcy5hbmNob3JOb2RlLmRhdGEubGVuZ3RoID4gMyAmJiBzLmFuY2hvck5vZGUuZGF0YS5pbmRleE9mKCcuJykgPj0gMCApCisgICAgICB7CisgICAgICAgIHZhciBtaWRTdGFydCA9IHMuYW5jaG9yTm9kZS5kYXRhLnN1YnN0cmluZygwLHMuYW5jaG9yT2Zmc2V0KS5zZWFyY2goL1xTezQsfSQvKTsKKyAgICAgICAgaWYgKCBtaWRTdGFydCA9PSAtMSApCisgICAgICAgIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggZWRpdG9yLl9nZXRGaXJzdEFuY2VzdG9yKHMsICdhJykgKQorICAgICAgICB7CisgICAgICAgICAgYnJlYWs7IC8vIGFscmVhZHkgaW4gYW4gYW5jaG9yCisgICAgICAgIH0KKworICAgICAgICB2YXIgbWF0Y2hEYXRhID0gcy5hbmNob3JOb2RlLmRhdGEuc3Vic3RyaW5nKDAscy5hbmNob3JPZmZzZXQpLnJlcGxhY2UoL14uKj8oXFMqKSQvLCAnJDEnKTsKKworICAgICAgICB2YXIgbUVtYWlsID0gbWF0Y2hEYXRhLm1hdGNoKFhpbmhhLlJFX2VtYWlsKTsKKyAgICAgICAgaWYgKCBtRW1haWwgKQorICAgICAgICB7CisgICAgICAgICAgdmFyIGxlZnRUZXh0RW1haWwgID0gcy5hbmNob3JOb2RlOworICAgICAgICAgIHZhciByaWdodFRleHRFbWFpbCA9IGxlZnRUZXh0RW1haWwuc3BsaXRUZXh0KHMuYW5jaG9yT2Zmc2V0KTsKKyAgICAgICAgICB2YXIgbWlkVGV4dEVtYWlsICAgPSBsZWZ0VGV4dEVtYWlsLnNwbGl0VGV4dChtaWRTdGFydCk7CisKKyAgICAgICAgICBhdXRvV3JhcChtaWRUZXh0RW1haWwsICdhJykuaHJlZiA9ICdtYWlsdG86JyArIG1FbWFpbFswXTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIFJFX2RhdGUgPSAvKFswLTldK1wuKSsvOyAvL2NvdWxkIGJlIGRhdGUgb3IgaXAgb3Igc29tZXRoaW5nIGVsc2UgLi4uCisgICAgICAgIFJFX2lwID0gLyg/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pLzsKKyAgICAgICAgdmFyIG1VcmwgPSBtYXRjaERhdGEubWF0Y2goWGluaGEuUkVfdXJsKTsKKyAgICAgICAgaWYgKCBtVXJsICkKKyAgICAgICAgeworICAgICAgICAgIGlmIChSRV9kYXRlLnRlc3QobWF0Y2hEYXRhKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBicmVhazsgLy9yYXk6IGRpc2FibGluZyBsaW5raW5nIG9mIElQIG51bWJlcnMgYmVjYXVzZSBvZiBnZW5lcmFsIGJ1Z2dpbmVzcyAoc2VlIFRpY2tldCAjMTA4NSkKKyAgICAgICAgICAgIC8qaWYgKCFSRV9pcC50ZXN0KG1hdGNoRGF0YSkpIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0qLworICAgICAgICAgIH0gCisgICAgICAgICAgdmFyIGxlZnRUZXh0VXJsICA9IHMuYW5jaG9yTm9kZTsKKyAgICAgICAgICB2YXIgcmlnaHRUZXh0VXJsID0gbGVmdFRleHRVcmwuc3BsaXRUZXh0KHMuYW5jaG9yT2Zmc2V0KTsKKyAgICAgICAgICB2YXIgbWlkVGV4dFVybCAgID0gbGVmdFRleHRVcmwuc3BsaXRUZXh0KG1pZFN0YXJ0KTsKKyAgICAgICAgICBhdXRvV3JhcChtaWRUZXh0VXJsLCAnYScpLmhyZWYgPSAobVVybFsxXSA/IG1VcmxbMV0gOiAnaHR0cDovLycpICsgbVVybFsyXTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIGJyZWFrOworICB9CisgIAorICAvLyBIYW5kbGUgc3BlY2lhbCBrZXlzCisgIHN3aXRjaCAoIGV2LmtleUNvZGUgKQorICB7ICAgIAorICAgIGNhc2UgMTM6IC8vIEVOVEVSCisgICAgICBpZiggZXYuc2hpZnRLZXkgICkKKyAgICAgIHsKKyAgICAgICAgLy9UT0RPOiBoZXJlIHdlIG5lZWQgdG8gYWRkIGluc2VydCBuZXcgbGluZQorICAgICAgfQorICAgIGJyZWFrOworCisgICAgY2FzZSAyNzogLy8gRVNDQVBFCisgICAgICBpZiAoIGVkaXRvci5fdW5MaW5rICkKKyAgICAgIHsKKyAgICAgICAgZWRpdG9yLl91bkxpbmsoKTsKKyAgICAgICAgWGluaGEuX3N0b3BFdmVudChldik7CisgICAgICB9CisgCisgICAgYnJlYWs7CisgICAgCisgICAgY2FzZSA5OiAvLyBLRVkgdGFiCisgICAgeworICAgICAgLy8gTm90ZSB0aGF0IHRoZSBMaXN0T3BlcmF0aW9ucyBwbHVnaW4gd2lsbCBoYW5kbGUgdGFicyBpbiBsaXN0IGl0ZW1zIGFuZCBpbmRlbnQvb3V0ZGVudCB0aG9zZQorICAgICAgLy8gYXQgc29tZSBwb2ludCBUYWJsZU9wZXJhdGlvbnMgbWlnaHQgZG8gYWxzbworICAgICAgLy8gc28gdGhpcyBvbmx5IGhhcyB0byBoYW5kbGUgYSB0YWIvdW50YWIgaW4gdGV4dAorICAgICAgaWYoZWRpdG9yLmNvbmZpZy50YWJTcGFuQ2xhc3MpCisgICAgICB7CisgICAgICAgIGlmKCFldi5zaGlmdEtleSkKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgIC8vICB2LS0gQXZvaWQgbGNfcGFyc2Vfc3RyaW5ncy5waHAKKyAgICAgICAgICBlZGl0b3IuaW5zZXJ0SFRNTCgnPCcrJ3NwYW4gY2xhc3M9IicrZWRpdG9yLmNvbmZpZy50YWJTcGFuQ2xhc3MrJyI+JytlZGl0b3IuY29uZmlnLnRhYlNwYW5Db250ZW50cysnPC9zcGFuPicpOworICAgICAgICAgIHZhciBzID0gZWRpdG9yLmdldFNlbGVjdGlvbigpLmNvbGxhcHNlVG9FbmQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICB2YXIgZXhpc3RpbmdUYWIgPSBlZGl0b3IuZ2V0UGFyZW50RWxlbWVudCgpOworICAgICAgICAgIGlmKGV4aXN0aW5nVGFiICYmIGV4aXN0aW5nVGFiLmNsYXNzTmFtZS5tYXRjaChlZGl0b3IuY29uZmlnLnRhYlNwYW5DbGFzcykpCisgICAgICAgICAgeworICAgICAgICAgICAgdmFyIHMgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgICAgICBzLnJlbW92ZUFsbFJhbmdlcygpOworICAgICAgICAgICAgdmFyIHIgPSBlZGl0b3IuY3JlYXRlUmFuZ2UoKTsKKyAgICAgICAgICAgIHIuc2VsZWN0Tm9kZShleGlzdGluZ1RhYik7CisgICAgICAgICAgICBzLmFkZFJhbmdlKHIpOworICAgICAgICAgICAgcy5kZWxldGVGcm9tRG9jdW1lbnQoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIAorICAgICAgWGluaGEuX3N0b3BFdmVudChldik7CisgICAgICAKKyAgICB9CisgICAgYnJlYWs7CisgICAgCisgICAgY2FzZSA4OiAvLyBLRVkgYmFja3NwYWNlCisgICAgY2FzZSA0NjogLy8gS0VZIGRlbGV0ZQorICAgICAgLy8gV2UgaGFuZGxlIHRoZSBtb3ppbGxhIGJhY2tzcGFjZSBkaXJlY3RseT8/CisgICAgICBpZiAoICFldi5zaGlmdEtleSAmJiB0aGlzLmhhbmRsZUJhY2tzcGFjZSgpICkKKyAgICAgIHsKKyAgICAgICAgWGluaGEuX3N0b3BFdmVudChldik7CisgICAgICB9CisgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZWRpdG9yLl91bmxpbmtPblVuZG8gPSBmYWxzZTsKKworICAgICAgICAvLyBIYW5kbGUgdGhlICJhdXRvLWxpbmtpbmciLCBzcGVjaWZpY2FsbHkgdGhpcyBiaXQgb2YgY29kZSBzZXRzIHVwIGEgaGFuZGxlciBvbgorICAgICAgICAvLyBhbiBzZWxmLXRpdGxlZCBhbmNob3IgKGVnIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ29nby5jby5uei8iPnd3dy5nb2dvLmNvLm56PC9hPikKKyAgICAgICAgLy8gd2hlbiB0aGUgdGV4dCBjb250ZW50IGlzIGVkaXRlZCwgc3VjaCB0aGF0IGl0IHdpbGwgdXBkYXRlIHRoZSBocmVmIG9uIHRoZSBhbmNob3IKKyAgICAgICAgCisgICAgICAgIGlmICggcy5hbmNob3JOb2RlICYmIHMuYW5jaG9yTm9kZS5ub2RlVHlwZSA9PSAzICkKKyAgICAgICAgeworICAgICAgICAgIC8vIFNlZSBpZiB3ZSBtaWdodCBiZSBjaGFuZ2luZyBhIGxpbmsKKyAgICAgICAgICB2YXIgYSA9IGVkaXRvci5fZ2V0Rmlyc3RBbmNlc3RvcihzLCAnYScpOworICAgICAgICAgIC8vIEB0b2RvOiB3ZSBwcm9iYWJseSBuZWVkIGhlcmUgdG8gaW5mb3JtIHRoZSBzZXRUaW1lb3V0IGJlbG93IHRoYXQgd2Ugbm90IGNoYW5naW5nIGEgbGluayBhbmQgbm90IHN0YXJ0IGFub3RoZXIgc2V0VGltZW91dAorICAgICAgICAgIGlmICggIWEgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOyAvLyBub3QgYW4gYW5jaG9yCisgICAgICAgICAgfSAKKyAgICAgICAgICAKKyAgICAgICAgICBpZiAoICFhLl91cGRhdGVBbmNoVGltZW91dCApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBzLmFuY2hvck5vZGUuZGF0YS5tYXRjaChYaW5oYS5SRV9lbWFpbCkgJiYgYS5ocmVmLm1hdGNoKCdtYWlsdG86JyArIHMuYW5jaG9yTm9kZS5kYXRhLnRyaW0oKSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB2YXIgdGV4dE5vZGUgPSBzLmFuY2hvck5vZGU7CisgICAgICAgICAgICAgIHZhciBmbkFuY2hvciA9IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGEuaHJlZiA9ICdtYWlsdG86JyArIHRleHROb2RlLmRhdGEudHJpbSgpOworICAgICAgICAgICAgICAgIC8vIEBmaXhtZTogd2h5IHRoZSBoZWxsIGRvIGFub3RoZXIgdGltZW91dCBpcyBzdGFydGVkID8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgIFRoaXMgbGVhZCB0byBuZXZlciBlbmRpbmcgdGltZXIgaWYgd2UgZG9udCByZW1vdmUgdGhpcyBsaW5lCisgICAgICAgICAgICAgICAgLy8gICAgICAgICBCdXQgd2hlbiByZW1vdmVkLCB0aGUgZW1haWwgaXMgbm90IGNvcnJlY3RseSB1cGRhdGVkCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIHRvIGZpeCB0aGlzIHdlIHNob3VsZCBtYWtlIGZuQW5jaG9yIGNoZWNrIHRvIHNlZSBpZiB0ZXh0Tm9kZS5kYXRhIGhhcworICAgICAgICAgICAgICAgIC8vICAgc3RvcHBlZCBjaGFuZ2luZyBmb3Igc2F5IDUgc2Vjb25kcyBhbmQgaWYgc28gd2UgZG8gbm90IG1ha2UgdGhpcyBzZXRUaW1lb3V0IAorICAgICAgICAgICAgICAgIGEuX3VwZGF0ZUFuY2hUaW1lb3V0ID0gc2V0VGltZW91dChmbkFuY2hvciwgMjUwKTsKKyAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgYS5fdXBkYXRlQW5jaFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZuQW5jaG9yLCAxMDAwKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBtID0gcy5hbmNob3JOb2RlLmRhdGEubWF0Y2goWGluaGEuUkVfdXJsKTsKKworICAgICAgICAgICAgaWYgKCBtICYmIGEuaHJlZi5tYXRjaChuZXcgUmVnRXhwKCAnaHR0cChzKT86Ly8nICsgWGluaGEuZXNjYXBlU3RyaW5nRm9yUmVnRXhwKCBzLmFuY2hvck5vZGUuZGF0YS50cmltKCkgKSApICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB2YXIgdHh0Tm9kZSA9IHMuYW5jaG9yTm9kZTsKKyAgICAgICAgICAgICAgdmFyIGZuVXJsID0gZnVuY3Rpb24oKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzIG0gaXMgdW5kZWZpbmVkIGJlY2FzZSB0aGUgdXJsIGlzIG5vdCBhbiB1cmwgYW55bW9yZSAod2FzIHd3dy51cmwuY29tIGFuZCBiZWNvbWUgZm9yIGV4YW1wbGUgd3d3LnVybCkKKyAgICAgICAgICAgICAgICAvLyByYXk6IHNob3VsZG4ndCB0aGUgbGluayBiZSB1bi1saW5rZWQgdGhlbj8KKyAgICAgICAgICAgICAgICBtID0gdHh0Tm9kZS5kYXRhLm1hdGNoKFhpbmhhLlJFX3VybCk7CisgICAgICAgICAgICAgICAgaWYobSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBhLmhyZWYgPSAobVsxXSA/IG1bMV0gOiAnaHR0cDovLycpICsgbVsyXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gQGZpeG1lOiB3aHkgdGhlIGhlbGwgZG8gYW5vdGhlciB0aW1lb3V0IGlzIHN0YXJ0ZWQgPworICAgICAgICAgICAgICAgIC8vICAgICAgICAgVGhpcyBsZWFkIHRvIG5ldmVyIGVuZGluZyB0aW1lciBpZiB3ZSBkb250IHJlbW92ZSB0aGlzIGxpbmUKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgIEJ1dCB3aGVuIHJlbW92ZWQsIHRoZSB1cmwgaXMgbm90IGNvcnJlY3RseSB1cGRhdGVkCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIHRvIGZpeCB0aGlzIHdlIHNob3VsZCBtYWtlIGZuVXJsIGNoZWNrIHRvIHNlZSBpZiB0ZXh0Tm9kZS5kYXRhIGhhcworICAgICAgICAgICAgICAgIC8vICAgc3RvcHBlZCBjaGFuZ2luZyBmb3Igc2F5IDUgc2Vjb25kcyBhbmQgaWYgc28gd2UgZG8gbm90IG1ha2UgdGhpcyBzZXRUaW1lb3V0CisgICAgICAgICAgICAgICAgYS5fdXBkYXRlQW5jaFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZuVXJsLCAyNTApOworICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICBhLl91cGRhdGVBbmNoVGltZW91dCA9IHNldFRpbWVvdXQoZm5VcmwsIDEwMDApOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gICAgICAgIAorICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIGZhbHNlOyAvLyBMZXQgb3RoZXIgcGx1Z2lucyBldGMgY29udGludWUgZnJvbSBoZXJlLgorfQorCisvKiogV2hlbiBiYWNrc3BhY2UgaXMgaGl0LCB0aGUgR2Vja28gb25LZXlQcmVzcyB3aWxsIGV4ZWN1dGUgdGhpcyBtZXRob2QuCisgKiAgSSBkb24ndCByZW1lbWJlciB3aGF0IHRoZSBleGFjdCBwdXJwb3NlIG9mIHRoaXMgaXMgdGhvdWdoIDotKAorICogIAorICovCisgCitXZWJLaXQucHJvdG90eXBlLmhhbmRsZUJhY2tzcGFjZSA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworICBzZXRUaW1lb3V0KAorICAgIGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICB2YXIgc2VsICAgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7CisgICAgICB2YXIgcmFuZ2UgPSBlZGl0b3IuY3JlYXRlUmFuZ2Uoc2VsKTsKKyAgICAgIHZhciBTQyA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyOworICAgICAgdmFyIFNPID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7CisgICAgICB2YXIgRUMgPSByYW5nZS5lbmRDb250YWluZXI7CisgICAgICB2YXIgRU8gPSByYW5nZS5lbmRPZmZzZXQ7CisgICAgICB2YXIgbmV3ciA9IFNDLm5leHRTaWJsaW5nOworICAgICAgaWYgKCBTQy5ub2RlVHlwZSA9PSAzICkKKyAgICAgIHsKKyAgICAgICAgU0MgPSBTQy5wYXJlbnROb2RlOworICAgICAgfQorICAgICAgaWYgKCAhICggL1xTLy50ZXN0KFNDLnRhZ05hbWUpICkgKQorICAgICAgeworICAgICAgICB2YXIgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsKKyAgICAgICAgd2hpbGUgKCBTQy5maXJzdENoaWxkICkKKyAgICAgICAgeworICAgICAgICAgIHAuYXBwZW5kQ2hpbGQoU0MuZmlyc3RDaGlsZCk7CisgICAgICAgIH0KKyAgICAgICAgU0MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocCwgU0MpOworICAgICAgICBYaW5oYS5yZW1vdmVGcm9tUGFyZW50KFNDKTsKKyAgICAgICAgdmFyIHIgPSByYW5nZS5jbG9uZVJhbmdlKCk7CisgICAgICAgIHIuc2V0U3RhcnRCZWZvcmUobmV3cik7CisgICAgICAgIHIuc2V0RW5kQWZ0ZXIobmV3cik7CisgICAgICAgIHIuZXh0cmFjdENvbnRlbnRzKCk7CisgICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgICAgICAgc2VsLmFkZFJhbmdlKHIpOworICAgICAgfQorICAgIH0sCisgICAgMTApOworfTsKKworV2ViS2l0LnByb3RvdHlwZS5pbndhcmRIdG1sID0gZnVuY3Rpb24oaHRtbCkKK3sKKyAgIHJldHVybiBodG1sOworfQorCitXZWJLaXQucHJvdG90eXBlLm91dHdhcmRIdG1sID0gZnVuY3Rpb24oaHRtbCkKK3sKKyAgcmV0dXJuIGh0bWw7Cit9CisKK1dlYktpdC5wcm90b3R5cGUub25FeGVjQ29tbWFuZCA9IGZ1bmN0aW9uKGNtZElELCBVSSwgcGFyYW0pCit7ICAgCisgIHRoaXMuZWRpdG9yLl9kb2MuZXhlY0NvbW1hbmQoJ3N0eWxlV2l0aENTUycsIGZhbHNlLCBmYWxzZSk7IC8vc3dpdGNoIHN0eWxlV2l0aENTUyBvZmY7IHNlZW1zIHRvIG1ha2Ugbm8gZGlmZmVyZW5jZSB0aG91Z2ggCisgICAKKyAgc3dpdGNoKGNtZElEKQorICB7CisgICAgY2FzZSAncGFzdGUnOgorICAgICAgYWxlcnQoWGluaGEuX2xjKCJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iLCAiV2ViS2l0IikpOworICAgICAgcmV0dXJuIHRydWU7IC8vIEluZGljYXRlIHBhc3RlIGlzIGRvbmUsIHN0b3AgY29tbWFuZCBiZWluZyBpc3N1ZWQgdG8gYnJvd3NlciBieSBYaW5oYS5wcm90b3R5cGUuZXhlY0NvbW1hbmQKKyAgICBicmVhazsKKyAgICBjYXNlICdyZW1vdmVmb3JtYXQnOgorICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworICAgICAgdmFyIHNlbCA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTsKKyAgICAgIHZhciBzZWxTYXZlID0gZWRpdG9yLnNhdmVTZWxlY3Rpb24oc2VsKTsKKyAgICAgIHZhciByYW5nZSA9IGVkaXRvci5jcmVhdGVSYW5nZShzZWwpOworCisgICAgICB2YXIgZWxzID0gZWRpdG9yLl9kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTsKKyAgICAgIGVscyA9IFhpbmhhLmNvbGxlY3Rpb25Ub0FycmF5KGVscyk7CisgICAgICB2YXIgc3RhcnQgPSAoIHJhbmdlLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09IDEgKSA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyIDogcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZTsKKyAgICAgIHZhciBpLGVsLG5ld05vZGUsIGZyYWdtZW50LCBjaGlsZCxyMiA9IGVkaXRvci5fZG9jLmNyZWF0ZVJhbmdlKCk7CisKKyAgICAgIGZ1bmN0aW9uIGNsZWFuIChlbCkKKyAgICAgIHsKKyAgICAgICAgaWYgKGVsLm5vZGVUeXBlICE9IDEpIHJldHVybjsKKyAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpOworICAgICAgICBmb3IgKHZhciBqPTA7IGo8ZWwuY2hpbGROb2Rlcy5sZW5ndGg7aisrKQorICAgICAgICB7CisgICAgICAgICAgY2xlYW4oZWwuY2hpbGROb2Rlc1tqXSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCAoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdzcGFuJyAmJiAhZWwuYXR0cmlidXRlcy5sZW5ndGggKSB8fCBlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2ZvbnQnKQorICAgICAgICB7CisgICAgICAgICAgcjIuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsKTsKKyAgICAgICAgICBmcmFnbWVudCA9IHIyLmV4dHJhY3RDb250ZW50cygpOworICAgICAgICAgIHdoaWxlIChmcmFnbWVudC5maXJzdENoaWxkKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNoaWxkID0gZnJhZ21lbnQucmVtb3ZlQ2hpbGQoZnJhZ21lbnQuZmlyc3RDaGlsZCk7CisgICAgICAgICAgICBlbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjaGlsZCwgZWwpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKHNlbC5pc0NvbGxhcHNlZCkKKyAgICAgIHsKKyAgICAgICAgZWxzID0gZWRpdG9yLl9kb2MuYm9keS5jaGlsZE5vZGVzOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSAKKyAgICAgICAgeworICAgICAgICAgIGVsID0gZWxzW2ldOworICAgICAgICAgIGlmIChlbC5ub2RlVHlwZSAhPSAxKSBjb250aW51ZTsKKyAgICAgICAgICBpZiAoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdzcGFuJykKKyAgICAgICAgICB7CisgICAgICAgICAgICBuZXdOb2RlID0gZWRpdG9yLmNvbnZlcnROb2RlKGVsLCAnZGl2Jyk7CisgICAgICAgICAgICBlbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdOb2RlLCBlbCk7CisgICAgICAgICAgICBlbCA9IG5ld05vZGU7CisgICAgICAgICAgfQorICAgICAgICAgIGNsZWFuKGVsKTsKKyAgICAgICAgfQorICAgICAgfSAKKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgZm9yIChpPTA7IGk8ZWxzLmxlbmd0aDtpKyspCisgICAgICAgIHsKKyAgICAgICAgICBlbCA9IGVsc1tpXTsKKyAgICAgICAgICBpZiAoIHJhbmdlLmlzUG9pbnRJblJhbmdlKGVsLCAwKSB8fCAoZWxzW2ldID09IHN0YXJ0ICYmIHJhbmdlLnN0YXJ0T2Zmc2V0ID09IDApKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNsZWFuKGVsKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcjIuZGV0YWNoKCk7CisgICAgICBlZGl0b3IucmVzdG9yZVNlbGVjdGlvbihzZWxTYXZlKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIGZhbHNlOworfQorV2ViS2l0LnByb3RvdHlwZS5vbk1vdXNlRG93biA9IGZ1bmN0aW9uKGV2KQoreyAKKyAgLy8gc2VsZWN0aW9uIG9mIGhyIGluIFNhZmFyaSBzZWVtcyB1dHRlcmx5IGltcG9zc2libGUgOigKKyAgaWYgKGV2LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gImhyIiB8fCBldi50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICJpbWciKQorICB7CisgICAgdGhpcy5lZGl0b3Iuc2VsZWN0Tm9kZUNvbnRlbnRzKGV2LnRhcmdldCk7CisgIH0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLSBJTVBMRU1FTlRBVElPTiBPRiBUSEUgQUJTVFJBQ1QgIlhpbmhhLnByb3RvdHlwZSIgTUVUSE9EUyAtLS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKiBJbnNlcnQgYSBub2RlIGF0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwb2ludC4gCisgKiBAcGFyYW0gdG9CZUluc2VydGVkIERvbU5vZGUKKyAqLworCitYaW5oYS5wcm90b3R5cGUuaW5zZXJ0Tm9kZUF0U2VsZWN0aW9uID0gZnVuY3Rpb24odG9CZUluc2VydGVkKQoreworICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKKyAgdmFyIHJhbmdlID0gdGhpcy5jcmVhdGVSYW5nZShzZWwpOworICAvLyByZW1vdmUgdGhlIGN1cnJlbnQgc2VsZWN0aW9uCisgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTsKKyAgdmFyIG5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lcjsKKyAgdmFyIHBvcyA9IHJhbmdlLnN0YXJ0T2Zmc2V0OworICB2YXIgc2Vsbm9kZSA9IHRvQmVJbnNlcnRlZDsKKyAgc3dpdGNoICggbm9kZS5ub2RlVHlwZSApCisgIHsKKyAgICBjYXNlIDM6IC8vIE5vZGUuVEVYVF9OT0RFCisgICAgICAvLyB3ZSBoYXZlIHRvIHNwbGl0IGl0IGF0IHRoZSBjYXJldCBwb3NpdGlvbi4KKyAgICAgIGlmICggdG9CZUluc2VydGVkLm5vZGVUeXBlID09IDMgKQorICAgICAgeworICAgICAgICAvLyBkbyBvcHRpbWl6ZWQgaW5zZXJ0aW9uCisgICAgICAgIG5vZGUuaW5zZXJ0RGF0YShwb3MsIHRvQmVJbnNlcnRlZC5kYXRhKTsKKyAgICAgICAgcmFuZ2UgPSB0aGlzLmNyZWF0ZVJhbmdlKCk7CisgICAgICAgIHJhbmdlLnNldEVuZChub2RlLCBwb3MgKyB0b0JlSW5zZXJ0ZWQubGVuZ3RoKTsKKyAgICAgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgcG9zICsgdG9CZUluc2VydGVkLmxlbmd0aCk7CisgICAgICAgIHNlbC5hZGRSYW5nZShyYW5nZSk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIG5vZGUgPSBub2RlLnNwbGl0VGV4dChwb3MpOworICAgICAgICBpZiAoIHRvQmVJbnNlcnRlZC5ub2RlVHlwZSA9PSAxMSAvKiBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUgKi8gKQorICAgICAgICB7CisgICAgICAgICAgc2Vsbm9kZSA9IHNlbG5vZGUuZmlyc3RDaGlsZDsKKyAgICAgICAgfQorICAgICAgICBub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRvQmVJbnNlcnRlZCwgbm9kZSk7CisgICAgICAgIHRoaXMuc2VsZWN0Tm9kZUNvbnRlbnRzKHNlbG5vZGUpOworICAgICAgICB0aGlzLnVwZGF0ZVRvb2xiYXIoKTsKKyAgICAgIH0KKyAgICBicmVhazsKKyAgICBjYXNlIDE6IC8vIE5vZGUuRUxFTUVOVF9OT0RFCisgICAgICBpZiAoIHRvQmVJbnNlcnRlZC5ub2RlVHlwZSA9PSAxMSAvKiBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUgKi8gKQorICAgICAgeworICAgICAgICBzZWxub2RlID0gc2Vsbm9kZS5maXJzdENoaWxkOworICAgICAgfQorICAgICAgbm9kZS5pbnNlcnRCZWZvcmUodG9CZUluc2VydGVkLCBub2RlLmNoaWxkTm9kZXNbcG9zXSk7CisgICAgICB0aGlzLnNlbGVjdE5vZGVDb250ZW50cyhzZWxub2RlKTsKKyAgICAgIHRoaXMudXBkYXRlVG9vbGJhcigpOworICAgIGJyZWFrOworICB9Cit9OworICAKKy8qKiBHZXQgdGhlIHBhcmVudCBlbGVtZW50IG9mIHRoZSBzdXBwbGllZCBvciBjdXJyZW50IHNlbGVjdGlvbi4gCisgKiAgQHBhcmFtICAgc2VsIG9wdGlvbmFsIHNlbGVjdGlvbiBhcyByZXR1cm5lZCBieSBnZXRTZWxlY3Rpb24KKyAqICBAcmV0dXJucyBEb21Ob2RlCisgKi8KKyAKK1hpbmhhLnByb3RvdHlwZS5nZXRQYXJlbnRFbGVtZW50ID0gZnVuY3Rpb24oc2VsKQoreworICBpZiAoIHR5cGVvZiBzZWwgPT0gJ3VuZGVmaW5lZCcgKQorICB7CisgICAgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKKyAgfQorICB2YXIgcmFuZ2UgPSB0aGlzLmNyZWF0ZVJhbmdlKHNlbCk7CisgIHRyeQorICB7CisgICAgdmFyIHAgPSByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjsKKyAgICBpZiAoICFyYW5nZS5jb2xsYXBzZWQgJiYgcmFuZ2Uuc3RhcnRDb250YWluZXIgPT0gcmFuZ2UuZW5kQ29udGFpbmVyICYmCisgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0IC0gcmFuZ2UuZW5kT2Zmc2V0IDw9IDEgJiYgcmFuZ2Uuc3RhcnRDb250YWluZXIuaGFzQ2hpbGROb2RlcygpICkKKyAgICB7CisgICAgICBwID0gcmFuZ2Uuc3RhcnRDb250YWluZXIuY2hpbGROb2Rlc1tyYW5nZS5zdGFydE9mZnNldF07CisgICAgfQorCisgICAgd2hpbGUgKCBwLm5vZGVUeXBlID09IDMgKQorICAgIHsKKyAgICAgIHAgPSBwLnBhcmVudE5vZGU7CisgICAgfQorICAgIHJldHVybiBwOworICB9CisgIGNhdGNoIChleCkKKyAgeworICAgIHJldHVybiBudWxsOworICB9Cit9OworCisvKioKKyAqIFJldHVybnMgdGhlIHNlbGVjdGVkIGVsZW1lbnQsIGlmIGFueS4gIFRoYXQgaXMsCisgKiB0aGUgZWxlbWVudCB0aGF0IHlvdSBoYXZlIGxhc3Qgc2VsZWN0ZWQgaW4gdGhlICJwYXRoIgorICogYXQgdGhlIGJvdHRvbSBvZiB0aGUgZWRpdG9yLCBvciBhICJjb250cm9sIiAoZWcgaW1hZ2UpCisgKgorICogQHJldHVybnMgbnVsbCB8IERvbU5vZGUKKyAqLworCitYaW5oYS5wcm90b3R5cGUuYWN0aXZlRWxlbWVudCA9IGZ1bmN0aW9uKHNlbCkKK3sKKyAgaWYgKCAoIHNlbCA9PT0gbnVsbCApIHx8IHRoaXMuc2VsZWN0aW9uRW1wdHkoc2VsKSApCisgIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIC8vIEZvciBNb3ppbGxhIHdlIGp1c3Qgc2VlIGlmIHRoZSBzZWxlY3Rpb24gaXMgbm90IGNvbGxhcHNlZCAoc29tZXRoaW5nIGlzIHNlbGVjdGVkKQorICAvLyBhbmQgdGhhdCB0aGUgYW5jaG9yIChzdGFydCBvZiBzZWxlY3Rpb24pIGlzIGFuIGVsZW1lbnQuICBUaGlzIG1pZ2h0IG5vdCBiZSB0b3RhbGx5CisgIC8vIGNvcnJlY3QsIHdlIHBvc3NpYmx5IHNob3VsZCBkbyBhIHNpbWxhciBjaGVjayB0byBJRT8KKyAgaWYgKCAhc2VsLmlzQ29sbGFwc2VkICkKKyAgeyAgICAgIAorICAgIGlmICggc2VsLmFuY2hvck5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPiBzZWwuYW5jaG9yT2Zmc2V0ICYmIHNlbC5hbmNob3JOb2RlLmNoaWxkTm9kZXNbc2VsLmFuY2hvck9mZnNldF0ubm9kZVR5cGUgPT0gMSApCisgICAgeworICAgICAgcmV0dXJuIHNlbC5hbmNob3JOb2RlLmNoaWxkTm9kZXNbc2VsLmFuY2hvck9mZnNldF07CisgICAgfQorICAgIGVsc2UgaWYgKCBzZWwuYW5jaG9yTm9kZS5ub2RlVHlwZSA9PSAxICkKKyAgICB7CisgICAgICByZXR1cm4gc2VsLmFuY2hvck5vZGU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICByZXR1cm4gbnVsbDsgLy8gcmV0dXJuIHNlbC5hbmNob3JOb2RlLnBhcmVudE5vZGU7CisgICAgfQorICB9CisgIHJldHVybiBudWxsOworfTsKKworLyoqIAorICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gc2VsZWN0aW9uIGlzIGVtcHR5IChjb2xsYXBzZWQpLgorICogQHBhcmFtIHNlbGVjdGlvbiBTZWxlY3Rpb24gb2JqZWN0IGFzIHJldHVybmVkIGJ5IGdldFNlbGVjdGlvbgorICogQHJldHVybnMgdHJ1ZXxmYWxzZQorICovCisgCitYaW5oYS5wcm90b3R5cGUuc2VsZWN0aW9uRW1wdHkgPSBmdW5jdGlvbihzZWwpCit7CisgIGlmICggIXNlbCApCisgIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGlmICggdHlwZW9mIHNlbC5pc0NvbGxhcHNlZCAhPSAndW5kZWZpbmVkJyApCisgIHsgICAgICAKKyAgICByZXR1cm4gc2VsLmlzQ29sbGFwc2VkOworICB9CisKKyAgcmV0dXJuIHRydWU7Cit9OworCisvKiogCisgKiBSZXR1cm5zIGEgcmFuZ2Ugb2JqZWN0IHRvIGJlIHN0b3JlZCAKKyAqIGFuZCBsYXRlciByZXN0b3JlZCB3aXRoIFhpbmhhLnByb3RvdHlwZS5yZXN0b3JlU2VsZWN0aW9uKCkKKyAqIAorICogQHJldHVybnMgUmFuZ2UKKyAqLworWGluaGEucHJvdG90eXBlLnNhdmVTZWxlY3Rpb24gPSBmdW5jdGlvbigpCit7CisgIHJldHVybiB0aGlzLmNyZWF0ZVJhbmdlKHRoaXMuZ2V0U2VsZWN0aW9uKCkpLmNsb25lUmFuZ2UoKTsKK30KKy8qKiAKKyAqIFJlc3RvcmVzIGEgc2VsZWN0aW9uIHByZXZpb3VzbHkgc3RvcmVkCisgKiBAcGFyYW0gc2F2ZWRTZWxlY3Rpb24gUmFuZ2Ugb2JqZWN0IGFzIHJldHVybmVkIGJ5IFhpbmhhLnByb3RvdHlwZS5yZXN0b3JlU2VsZWN0aW9uKCkKKyAqLworWGluaGEucHJvdG90eXBlLnJlc3RvcmVTZWxlY3Rpb24gPSBmdW5jdGlvbihzYXZlZFNlbGVjdGlvbikKK3sKKyAgdmFyIHNlbCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7CisgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgc2VsLmFkZFJhbmdlKHNhdmVkU2VsZWN0aW9uKTsKK30KKy8qKgorICogU2VsZWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIG5vZGUuICBJZiB0aGUgbm9kZSBpcyBhICJjb250cm9sIiB0eXBlIGVsZW1lbnQsIChpbWFnZSwgZm9ybSBpbnB1dCwgdGFibGUpCisgKiB0aGUgbm9kZSBpdHNlbGYgaXMgc2VsZWN0ZWQgZm9yIG1hbmlwdWxhdGlvbi4KKyAqCisgKiBAcGFyYW0gbm9kZSBEb21Ob2RlIAorICogQHBhcmFtIGNvbGxhcHNlVG9TdGFydCBBIGJvb2xlYW4gdGhhdCwgd2hlbiBzdXBwbGllZCwgc2F5cyB0byBjb2xsYXBzZSB0aGUgc2VsZWN0aW9uLiBUcnVlIGNvbGxhcHNlcyB0byB0aGUgc3RhcnQsIGFuZCBmYWxzZSB0byB0aGUgZW5kLgorICovCisgCitYaW5oYS5wcm90b3R5cGUuc2VsZWN0Tm9kZUNvbnRlbnRzID0gZnVuY3Rpb24obm9kZSwgY29sbGFwc2VUb1N0YXJ0KQoreworICBpZighbm9kZSkgcmV0dXJuOyAvLyBJJ3ZlIHNlZW4gdGhpcyBvbmNlCisgIHRoaXMuZm9jdXNFZGl0b3IoKTsKKyAgdGhpcy5mb3JjZVJlZHJhdygpOworICB2YXIgcmFuZ2U7CisgIHZhciBjb2xsYXBzZWQgPSB0eXBlb2YgY29sbGFwc2VUb1N0YXJ0ID09ICJ1bmRlZmluZWQiID8gdHJ1ZSA6IGZhbHNlOworICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKKyAgcmFuZ2UgPSB0aGlzLl9kb2MuY3JlYXRlUmFuZ2UoKTsKKyAgLy8gVGFibGVzIGFuZCBJbWFnZXMgZ2V0IHNlbGVjdGVkIGFzICJvYmplY3RzIiByYXRoZXIgdGhhbiB0aGUgdGV4dCBjb250ZW50cworICBpZiAoIGNvbGxhcHNlZCAmJiBub2RlLnRhZ05hbWUgJiYgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkubWF0Y2goL3RhYmxlfGltZ3xpbnB1dHx0ZXh0YXJlYXxzZWxlY3QvKSApCisgIHsKKyAgICByYW5nZS5zZWxlY3ROb2RlKG5vZGUpOworICB9CisgIGVsc2UKKyAgeworICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhub2RlKTsKKyAgfQorICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CisgIHNlbC5hZGRSYW5nZShyYW5nZSk7CisgIGlmICh0eXBlb2YgY29sbGFwc2VUb1N0YXJ0ICE9ICJ1bmRlZmluZWQiKQorICB7CisgICAgaWYgKGNvbGxhcHNlVG9TdGFydCkKKyAgICB7CisgICAgICBzZWwuY29sbGFwc2UocmFuZ2Uuc3RhcnRDb250YWluZXIsIHJhbmdlLnN0YXJ0T2Zmc2V0KTsKKyAgICB9IGVsc2UKKyAgICB7CisgICAgICBzZWwuY29sbGFwc2UocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpOworICAgIH0KKyAgfQorfTsKKyAgCisvKiogSW5zZXJ0IEhUTUwgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24sIGRlbGV0aW5nIHRoZSBzZWxlY3Rpb24gaWYgYW55LiAKKyAqICAKKyAqICBAcGFyYW0gaHRtbCBzdHJpbmcKKyAqLworIAorWGluaGEucHJvdG90eXBlLmluc2VydEhUTUwgPSBmdW5jdGlvbihodG1sKQoreworICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKKyAgdmFyIHJhbmdlID0gdGhpcy5jcmVhdGVSYW5nZShzZWwpOworICB0aGlzLmZvY3VzRWRpdG9yKCk7CisgIC8vIGNvbnN0cnVjdCBhIG5ldyBkb2N1bWVudCBmcmFnbWVudCB3aXRoIHRoZSBnaXZlbiBIVE1MCisgIHZhciBmcmFnbWVudCA9IHRoaXMuX2RvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgIHZhciBkaXYgPSB0aGlzLl9kb2MuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgIGRpdi5pbm5lckhUTUwgPSBodG1sOworICB3aGlsZSAoIGRpdi5maXJzdENoaWxkICkKKyAgeworICAgIC8vIHRoZSBmb2xsb3dpbmcgY2FsbCBhbHNvIHJlbW92ZXMgdGhlIG5vZGUgZnJvbSBkaXYKKyAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChkaXYuZmlyc3RDaGlsZCk7CisgIH0KKyAgLy8gdGhpcyBhbHNvIHJlbW92ZXMgdGhlIHNlbGVjdGlvbgorICB2YXIgbm9kZSA9IHRoaXMuaW5zZXJ0Tm9kZUF0U2VsZWN0aW9uKGZyYWdtZW50KTsKK307CisKKy8qKiBHZXQgdGhlIEhUTUwgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiAgSFRNTCByZXR1cm5lZCBoYXMgbm90IGJlZW4gcGFzc2VkIHRocm91Z2ggb3V0d2FyZEhUTUwuCisgKgorICogQHJldHVybnMgc3RyaW5nCisgKi8KKyAKK1hpbmhhLnByb3RvdHlwZS5nZXRTZWxlY3RlZEhUTUwgPSBmdW5jdGlvbigpCit7CisgIHZhciBzZWwgPSB0aGlzLmdldFNlbGVjdGlvbigpOworICBpZiAoc2VsLmlzQ29sbGFwc2VkKSByZXR1cm4gJyc7CisgIHZhciByYW5nZSA9IHRoaXMuY3JlYXRlUmFuZ2Uoc2VsKTsKKworICBpZiAoIHJhbmdlICkKKyAgeworICAgIHJldHVybiBYaW5oYS5nZXRIVE1MKHJhbmdlLmNsb25lQ29udGVudHMoKSwgZmFsc2UsIHRoaXMpOworICB9CisgIGVsc2UgcmV0dXJuICcnOworfTsKKyAgCisKKy8qKiBHZXQgYSBTZWxlY3Rpb24gb2JqZWN0IG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gIE5vdGUgdGhhdCBzZWxlY3Rpb24gb2JqZWN0cyBhcmUgYnJvd3NlciBzcGVjaWZpYy4KKyAqCisgKiBAcmV0dXJucyBTZWxlY3Rpb24KKyAqLworIAorWGluaGEucHJvdG90eXBlLmdldFNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkKK3sKKyAgcmV0dXJuIHRoaXMuX2lmcmFtZS5jb250ZW50V2luZG93LmdldFNlbGVjdGlvbigpOworfTsKKyAgCisvKiogQ3JlYXRlIGEgUmFuZ2Ugb2JqZWN0IGZyb20gdGhlIGdpdmVuIHNlbGVjdGlvbi4gIE5vdGUgdGhhdCByYW5nZSBvYmplY3RzIGFyZSBicm93c2VyIHNwZWNpZmljLgorICoKKyAqICBAcGFyYW0gc2VsIFNlbGVjdGlvbiBvYmplY3QgKHNlZSBnZXRTZWxlY3Rpb24pCisgKiAgQHJldHVybnMgUmFuZ2UKKyAqLworIAorWGluaGEucHJvdG90eXBlLmNyZWF0ZVJhbmdlID0gZnVuY3Rpb24oc2VsKQoreworICB0aGlzLmFjdGl2YXRlRWRpdG9yKCk7CisgIGlmICggdHlwZW9mIHNlbCAhPSAidW5kZWZpbmVkIiApCisgIHsKKyAgICB0cnkKKyAgICB7CisgICAgICByZXR1cm4gc2VsLmdldFJhbmdlQXQoMCk7CisgICAgfQorICAgIGNhdGNoKGV4KQorICAgIHsKKyAgICAgIHJldHVybiB0aGlzLl9kb2MuY3JlYXRlUmFuZ2UoKTsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuIHRoaXMuX2RvYy5jcmVhdGVSYW5nZSgpOworICB9Cit9OworCisKKy8qKiBEdWUgdG8gYnJvd3NlciBkaWZmZXJlbmNlcywgc29tZSBrZXlzIHdoaWNoIFhpbmhhIHByZWZlcnMgdG8gY2FsbCBhIGtleVByZXNzCisgKiAgIGRvIG5vdCBnZXQgYW4gYWN0dWFsIGtleXByZXNzIGV2ZW50LiAgVGhpcyBicm93c2VyIHNwZWNpZmljIGZ1bmN0aW9uIAorICogICBvdmVycmlkZGVuIGluIHRoZSBicm93c2VyJ3MgZW5naW5lIChlZyBtb2R1bGVzL1dlYktpdC9XZWJLaXQuanMpIGFzIHJlcXVpcmVkCisgKiAgIHRha2VzIGEga2V5ZG93biBldmVudCB0eXBlIGFuZCB0ZWxscyB1cyBpZiB3ZSBzaG91bGQgdHJlYXQgaXQgYXMgYSAKKyAqICAga2V5cHJlc3MgZXZlbnQgdHlwZS4KKyAqCisgKiAgVG8gYmUgY2xlYXIsIHRoZSBrZXlzIHdlIGFyZSBpbnRlcmVzdGVkIGhlcmUgYXJlCisgKiAgICAgICAgRXNjYXBlLCBUYWIsIEJhY2tzcGFjZSwgRGVsZXRlLCBFbnRlcgorICogICB0aGVzZSBhcmUgIm5vbiBwcmludGFibGUiIGNoYXJhY3RlcnMgd2hpY2ggd2Ugc3RpbGwgd2FudCB0byByZWdhcmQgZ2VuZXJhbGx5CisgKiAgIGFzIGEga2V5cHJlc3MuICAKKyAqIAorICogIElmIHRoZSBicm93c2VyIGRvZXMgbm90IHJlcG9ydCB0aGVzZSBhcyBhIGtleXByZXNzCisgKiAgICggaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9kNGUvcmF3LWZpbGUvdGlwL2tleS1ldmVudC10ZXN0Lmh0bWwgKQorICogICB0aGVuIHRoaXMgZnVuY3Rpb24gbXVzdCByZXR1cm4gdHJ1ZSBmb3Igc3VjaCBrZXlkb3duIGV2ZW50cyBhcyBpdCBpcworICogICBnaXZlbi4KKyAqIAorICogQHBhcmFtIEtleWJvYXJkRXZlbnQgd2l0aCBrZXlFdmVudC50eXBlID09IGtleWRvd24KKyAqIEByZXR1cm4gYm9vbGVhbgorICovCisKK1hpbmhhLnByb3RvdHlwZS5pc0tleURvd25UaGF0U2hvdWxkR2V0QnV0RG9lc05vdEdldEFLZXlQcmVzc0V2ZW50ID0gZnVuY3Rpb24oa2V5RXZlbnQpCit7CisgIC8vIERvbSAzCisgIGlmKHR5cGVvZiBrZXlFdmVudC5rZXkgIT0gJ3VuZGVmaW5lZCcpCisgIHsKKyAgICBpZih0eXBlb2YgWGluaGEuRE9NM19XZWJLaXRfS2V5RG93bktleVByZXNzX1JFID09ICd1bmRlZmluZWQnKQorICAgIHsKKyAgICAgIC8vIEkgZG9uJ3Qga25vdyBpZiBwcmUtZGVmaW5pbmcgdGhpcyBpcyByZWFsbHkgZmFzdGVyIGluIHRoZSBtb2Rlcm4gd29ybGQgb2YKKyAgICAgIC8vICBKYXZhc2NyaXB0IEpJVCBjb21waWxpbmcsIGJ1dCBpdCBkb2VzIG5vIGhhcm0KKyAgICAgIFhpbmhhLkRPTTNfV2ViS2l0X0tleURvd25LZXlQcmVzc19SRSA9IC9eKEVzY2FwZXxFc2N8VGFifEJhY2tzcGFjZXxEZWxldGV8RGVsKS87CisgICAgfQorICAgIAorICAgIC8vIEZvdW5kIHVzaW5nIENocm9tZSA2NSBhbmQgT3BlcmEgNTAsIEVkZ2UKKyAgICAvLyAgTm90ZSB0aGF0IEVkZ2UgY2FsbHMgRXNjYXBlIEVzYywgYW5kIERlbGV0ZSBEZWwKKyAgICBpZihYaW5oYS5ET00zX1dlYktpdF9LZXlEb3duS2V5UHJlc3NfUkUudGVzdChrZXlFdmVudC5rZXkpKQorICAgIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorICAvLyBPbGQgU2FmYXJpIGFuZCBDaHJvbWUKKyAgZWxzZSBpZih0eXBlb2Yga2V5RXZlbnQua2V5SWRlbnRpZmllciAhPSAndW5kZWZpbmVkJyAmJiBrZXlFdmVudC5rZXlJZGVudGlmaWVyLmxlbmd0aCkKKyAgeworICAgIHZhciBrSSA9IHBhcnNlSW50KGtleUV2ZW50LmtleUlkZW50aWZpZXIucmVwbGFjZSgvXlVcKy8sJycpLDE2KTsKKyAgICAvLyBGb3VuZCB1c2luZyBTYWZhcmkgOS4xLjEgLSBzYWZhcmkgc2VlbXMgdG8gcGFzcyBFU0Mgb2sgYXMgYSBrZXlQcmVzcworICAgIGlmKGtJID09IDkgLyogVGFiICovIHx8IGtJID09IDggLyogQmFja3NwYWNlICovIHx8IGtJID09IDEyNyAvKiBEZWxldGUgKi8gKSByZXR1cm4gdHJ1ZTsKKyAgfQorICAvLyBMZWdhY3kKKyAgZWxzZQorICB7CisgICAgLy8gQWxzbyBDaHJvbWUgNjUsIEknbSBhc3N1bWluZyBwZXJoYXBzIGRhbmdlcm91c2x5LCB0aGF0IGl0J3MgYWJvdXQgdGhlIHNhbWUgYXMgCisgICAgLy8gb2xkZXIgcHJlLUtleWJvYXJkRXZlbnQua2V5IGJ1dCB0aGF0J3MgYmVlbiBhcm91bmQgYSBmZXcgeWVhcnMgbm93IHNvCisgICAgLy8gcGVvcGxlIHdpbGwgbW9zdGx5IGJlIG9uIHN1cHBvcnRpbmcgYnJvd3NlcnMgYW55d2F5IHNvIHRoaXMgcHJvYmFibHkKKyAgICAvLyB3b24ndCBiZSBoaXQgYnkgdGhhdCBtYW55IHBlb3BsZQorICAgIGlmKGtleUV2ZW50LmNoYXJDb2RlID09IDApCisgICAgeworICAgICAgaWYoIGtleUV2ZW50LmtleUNvZGUgPT0gMjcgIC8vIEVTQworICAgICAgIHx8IGtleUV2ZW50LmtleUNvZGUgPT0gOSAgIC8vIFRhYgorICAgICAgIHx8IGtleUV2ZW50LmtleUNvZGUgPT0gOCAgIC8vIEJhY2tzcGFjZQorICAgICAgIHx8IGtleUV2ZW50LmtleUNvZGUgPT0gNDYgIC8vIERlbAorICAgICAgKSByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIH0KK307CisKKy8qKiBSZXR1cm4gdGhlIGNoYXJhY3RlciAoYXMgYSBzdHJpbmcpIG9mIGEga2V5RXZlbnQgIC0gaWUsIHByZXNzIHRoZSAnYScga2V5IGFuZAorICogIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuICdhJywgcHJlc3MgU0hJRlQtYSBhbmQgaXQgd2lsbCByZXR1cm4gJ0EnLgorICogCisgKiAgQHBhcmFtICAga2V5RXZlbnQKKyAqICBAcmV0dXJucyBzdHJpbmcKKyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1hpbmhhLnByb3RvdHlwZS5nZXRLZXkgPSBmdW5jdGlvbihrZXlFdmVudCkKK3sgCisgIC8vIERPTTMgS2V5IGlzIGVhc3kgKGlzaCkKKyAgaWYodHlwZW9mIGtleUV2ZW50LmtleSAhPSAndW5kZWZpbmVkJyAmJiBrZXlFdmVudC5rZXkubGVuZ3RoID4gMCkKKyAgeworICAgIHJldHVybiBrZXlFdmVudC5rZXk7CisgIH0KKyAgLy8gT2xkIERPTTMgdXNlZCBieSAoT2xkPykgU2FmYXJpIFNPTUVUSU1FUyAoYnV0IG5vdCBBTFdBWVMhKSBhbmQgb2xkIENocm9tZQorICBlbHNlIGlmKHR5cGVvZiBrZXlFdmVudC5rZXlJZGVudGlmaWVyICE9ICd1bmRlZmluZWQnICYmIGtleUV2ZW50LmtleUlkZW50aWZpZXIubGVuZ3RoID4gMCAmJiBrZXlFdmVudC5rZXlJZGVudGlmaWVyLm1hdGNoKC9eVVwrLykpCisgIHsKKyAgICAgIHZhciBrZXkgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGtleUV2ZW50LmtleUlkZW50aWZpZXIucmVwbGFjZSgvXlVcKy8sJycpLDE2KSk7CisgICAgICBpZiAoa2V5RXZlbnQuc2hpZnRLZXkpIHJldHVybiBrZXk7CisgICAgICBlbHNlIHJldHVybiBrZXkudG9Mb3dlckNhc2UoKTsKKyAgfQorICAvLyBJZiBjaGFyQ29kZSBpcyBzcGVjaWZpZWQsIHRoYXQncyB3aGF0IHdlIHdhbnQKKyAgZWxzZSBpZihrZXlFdmVudC5jaGFyQ29kZSkKKyAgeworICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGtleUV2ZW50LmNoYXJDb2RlKTsKKyAgfQorICAvLyBTYWZhcmkgZG9lcyBub3Qgc2V0IGNoYXJDb2RlIGlmIENUUkwgaXMgcHJlc3NlZAorICAvLyAgYnV0IGRvZXMgc2V0IGtleUNvZGUgdG8gdGhlIGtleSwgaXQgYWxzbyBzZXRzIGtleUNvZGUKKyAgLy8gIGZvciB0aGUgYWN0dWFsIHByZXNzaW5nIG9mIGN0cmwsIHNraXAgdGhhdAorICAvLyAgdGhlIGtleUNvZGUgaW4gU2FmYXJpIHNpIHRoZSB1cHBlcmNhc2UgY2hhcmFjdGVyJ3MgY29kZSAKKyAgLy8gIGZvciB0aGF0IGtleSwgc28gaWYgc2hpZnQgaXMgbm90IHByZXNzZWQsIGxvd2VyY2FzZSBpdAorICBlbHNlIGlmKGtleUV2ZW50LmN0cmxLZXkgJiYga2V5RXZlbnQua2V5Q29kZSAhPSAxNykKKyAgeworICAgIGlmKGtleUV2ZW50LnNoaWZ0S2V5KQorICAgIHsKKyAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGtleUV2ZW50LmtleUNvZGUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoa2V5RXZlbnQua2V5Q29kZSkudG9Mb3dlckNhc2UoKTsKKyAgICB9CisgIH0KKyAgCisgIC8vIE9rLCBnaXZlIHVwLCBubyBpZGVhIQorICByZXR1cm4gJyc7Cit9CisKKy8qKiBSZXR1cm4gdGhlIEhUTUwgc3RyaW5nIG9mIHRoZSBnaXZlbiBFbGVtZW50LCBpbmNsdWRpbmcgdGhlIEVsZW1lbnQuCisgKiAKKyAqIEBwYXJhbSBlbGVtZW50IEhUTUwgRWxlbWVudCBEb21Ob2RlCisgKiBAcmV0dXJucyBzdHJpbmcKKyAqLworIAorWGluaGEuZ2V0T3V0ZXJIVE1MID0gZnVuY3Rpb24oZWxlbWVudCkKK3sKKyAgcmV0dXJuIChuZXcgWE1MU2VyaWFsaXplcigpKS5zZXJpYWxpemVUb1N0cmluZyhlbGVtZW50KTsKK307CisKK1hpbmhhLmNjID0gU3RyaW5nLmZyb21DaGFyQ29kZSg4Mjg2KTsgCisKK1hpbmhhLnByb3RvdHlwZS5zZXRDQyA9IGZ1bmN0aW9uICggdGFyZ2V0ICkKK3sKKyAgdmFyIGNjID0gWGluaGEuY2M7CisgIHRyeQorICB7CisgICAgaWYgKCB0YXJnZXQgPT0gInRleHRhcmVhIiApCisgICAgeworICAgICAgdmFyIHRhID0gdGhpcy5fdGV4dEFyZWE7CisgICAgICB2YXIgaW5kZXggPSB0YS5zZWxlY3Rpb25TdGFydDsKKyAgICAgIHZhciBiZWZvcmUgPSB0YS52YWx1ZS5zdWJzdHJpbmcoIDAsIGluZGV4ICkKKyAgICAgIHZhciBhZnRlciA9IHRhLnZhbHVlLnN1YnN0cmluZyggaW5kZXgsIHRhLnZhbHVlLmxlbmd0aCApOworCisgICAgICBpZiAoIGFmdGVyLm1hdGNoKC9eW148XSo+LykgKSAvLyBtYWtlIHN1cmUgY3Vyc29yIGlzIGluIGFuIGVkaXRhYmxlIGFyZWEgKG91dHNpZGUgdGFncywgc2NyaXB0IGJsb2NrcywgZW5pdGllcyBhbmQgaW5zaWRlIHRoZSBib2R5KQorICAgICAgeworICAgICAgICB2YXIgdGFnRW5kID0gYWZ0ZXIuaW5kZXhPZigiPiIpICsgMTsKKyAgICAgICAgdGEudmFsdWUgPSBiZWZvcmUgKyBhZnRlci5zdWJzdHJpbmcoIDAsIHRhZ0VuZCApICsgY2MgKyBhZnRlci5zdWJzdHJpbmcoIHRhZ0VuZCwgYWZ0ZXIubGVuZ3RoICk7CisgICAgICB9CisgICAgICBlbHNlIHRhLnZhbHVlID0gYmVmb3JlICsgY2MgKyBhZnRlcjsKKyAgICAgIHRhLnZhbHVlID0gdGEudmFsdWUucmVwbGFjZShuZXcgUmVnRXhwICgnKCZbXicrY2MrJztdKj8pKCcrY2MrJykoW14nK2NjKyddKj87KScpLCAiJDEkMyQyIik7CisgICAgICB0YS52YWx1ZSA9IHRhLnZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCAoJyg8c2NyaXB0W14+XSo+W14nK2NjKyddKj8pKCcrY2MrJykoW14nK2NjKyddKj88XC9zY3JpcHQ+KScpLCAiJDEkMyQyIik7CisgICAgICB0YS52YWx1ZSA9IHRhLnZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCAoJ14oW14nK2NjKyddKikoJytjYysnKShbXicrY2MrJ10qPGJvZHlbXj5dKj4pKC4qPyknKSwgIiQxJDMkMiQ0Iik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKKyAgICAgIHNlbC5nZXRSYW5nZUF0KDApLmluc2VydE5vZGUoIHRoaXMuX2RvYy5jcmVhdGVUZXh0Tm9kZSggY2MgKSApOworICAgIH0KKyAgfSBjYXRjaCAoZSkge30KK307CisKK1hpbmhhLnByb3RvdHlwZS5maW5kQ0MgPSBmdW5jdGlvbiAoIHRhcmdldCApCit7CisgIHZhciBjYyA9IFhpbmhhLmNjOworICAKKyAgaWYgKCB0YXJnZXQgPT0gJ3RleHRhcmVhJyApCisgIHsKKyAgdmFyIHRhID0gdGhpcy5fdGV4dEFyZWE7CisgIHZhciBwb3MgPSB0YS52YWx1ZS5pbmRleE9mKCBjYyApOworICBpZiAoIHBvcyA9PSAtMSApIHJldHVybjsKKyAgdmFyIGVuZCA9IHBvcyArIGNjLmxlbmd0aDsKKyAgdmFyIGJlZm9yZSA9ICB0YS52YWx1ZS5zdWJzdHJpbmcoIDAsIHBvcyApOworICB2YXIgYWZ0ZXIgPSB0YS52YWx1ZS5zdWJzdHJpbmcoIGVuZCwgdGEudmFsdWUubGVuZ3RoICk7CisgIHRhLnZhbHVlID0gYmVmb3JlIDsKKworICB0YS5zY3JvbGxUb3AgPSB0YS5zY3JvbGxIZWlnaHQ7CisgIHZhciBzY3JvbGxQb3MgPSB0YS5zY3JvbGxUb3A7CisgIAorICB0YS52YWx1ZSArPSBhZnRlcjsKKyAgdGEuc2V0U2VsZWN0aW9uUmFuZ2UocG9zLHBvcyk7CisKKyAgdGEuZm9jdXMoKTsKKyAgCisgIHRhLnNjcm9sbFRvcCA9IHNjcm9sbFBvczsKKworICB9CisgIGVsc2UKKyAgeworICAgIHZhciBzZWxmID0gdGhpczsKKyAgICB0cnkKKyAgICB7CisgICAgICB2YXIgZG9jID0gdGhpcy5fZG9jOyAKKyAgICAgIGRvYy5ib2R5LmlubmVySFRNTCA9IGRvYy5ib2R5LmlubmVySFRNTC5yZXBsYWNlKG5ldyBSZWdFeHAoY2MpLCc8c3BhbiBpZD0iWGluaGFFZGl0aW5nUG9zdGlvbiI+PC9zcGFuPicpOworICAgICAgdmFyIHBvc0VsID0gZG9jLmdldEVsZW1lbnRCeUlkKCdYaW5oYUVkaXRpbmdQb3N0aW9uJyk7CisgICAgICB0aGlzLnNlbGVjdE5vZGVDb250ZW50cyhwb3NFbCk7CisgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudChwb3NFbCk7CisgICAgICBwb3NFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHBvc0VsKTsKKworICAgICAgdGhpcy5faWZyYW1lLmNvbnRlbnRXaW5kb3cuZm9jdXMoKTsKKyAgICB9IGNhdGNoIChlKSB7fQorICB9Cit9OworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLSBFWFRFTkQgU09NRSBTVEFOREFSRCAiWGluaGEucHJvdG90eXBlIiBNRVRIT0RTIC0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitYaW5oYS5wcm90b3R5cGUuX3N0YW5kYXJkVG9nZ2xlQm9yZGVycyA9IFhpbmhhLnByb3RvdHlwZS5fdG9nZ2xlQm9yZGVyczsKK1hpbmhhLnByb3RvdHlwZS5fdG9nZ2xlQm9yZGVycyA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIHJlc3VsdCA9IHRoaXMuX3N0YW5kYXJkVG9nZ2xlQm9yZGVycygpOworICAKKyAgLy8gZmxhc2hpbmcgdGhlIGRpc3BsYXkgZm9yY2VzIG1veiB0byBsaXN0ZW4gKEpCOjE4LTA0LTIwMDUpIC0gIzEwMgorICB2YXIgdGFibGVzID0gdGhpcy5fZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdUQUJMRScpOworICBmb3IodmFyIGkgPSAwOyBpIDwgdGFibGVzLmxlbmd0aDsgaSsrKQorICB7CisgICAgdGFibGVzW2ldLnN0eWxlLmRpc3BsYXk9Im5vbmUiOworICAgIHRhYmxlc1tpXS5zdHlsZS5kaXNwbGF5PSJ0YWJsZSI7CisgIH0KKyAgCisgIHJldHVybiByZXN1bHQ7Cit9OworCisvKiogUmV0dXJuIHRoZSBkb2N0eXBlIG9mIGEgZG9jdW1lbnQsIGlmIHNldAorICogCisgKiBAcGFyYW0gZG9jIERPTSBlbGVtZW50IGRvY3VtZW50CisgKiBAcmV0dXJucyBzdHJpbmcgdGhlIGFjdHVhbCBkb2N0eXBlCisgKi8KK1hpbmhhLmdldERvY3R5cGUgPSBmdW5jdGlvbiAoZG9jKQoreworICB2YXIgZCA9ICcnOworICBpZiAoZG9jLmRvY3R5cGUpCisgIHsKKyAgICBkICs9ICc8IURPQ1RZUEUgJyArIGRvYy5kb2N0eXBlLm5hbWUgKyAiIFBVQkxJQyAiOworICAgIGQgKz0gIGRvYy5kb2N0eXBlLnB1YmxpY0lkID8gJyInICsgZG9jLmRvY3R5cGUucHVibGljSWQgKyAnIicgOiAnJzsgIAorICAgIGQgKz0gIGRvYy5kb2N0eXBlLnN5c3RlbUlkID8gJyAiJysgZG9jLmRvY3R5cGUuc3lzdGVtSWQgKyAnIicgOiAnJzsgCisgICAgZCArPSAiPiI7CisgIH0KKyAgcmV0dXJuIGQ7Cit9OwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9XZWJLaXQvbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvbW9kdWxlcy9XZWJLaXQvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNjQwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9tb2R1bGVzL1dlYktpdC9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSwyNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBicm93c2VyIGZvciBzZWN1cml0eSByZWFzb25zLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL0FiYnJldmlhdGlvbi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL0FiYnJldmlhdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTU1Y2M1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vQWJicmV2aWF0aW9uLmpzCkBAIC0wLDAgKzEsMTUzIEBACisvLyBBYmJyZXZpYXRpb24gcGx1Z2luIGZvciBYaW5oYQ0KKy8vIEltcGxlbWVudGF0aW9uIGJ5IFVkbyBTY2htYWwgJiBTY2hhZmZyYXRoIE5ldWVNZWRpZW4NCisvLyBPcmlnaW5hbCBBdXRob3IgLSBVZG8gU2NobWFsDQorLy8NCisvLyAoYykgVWRvIFNjaG1hbCAmIFNjaGFmZnJhdGggTmV1ZU1lZGllbiAyMDA0DQorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLg0KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4NCisNCitmdW5jdGlvbiBBYmJyZXZpYXRpb24oZWRpdG9yKSB7DQorICB0aGlzLmVkaXRvciA9IGVkaXRvcjsNCisgIHZhciBjZmcgPSBlZGl0b3IuY29uZmlnOw0KKyAgdmFyIHNlbGYgPSB0aGlzOw0KKw0KKyAgLy8gcmVnaXN0ZXIgdGhlIHRvb2xiYXIgYnV0dG9ucyBwcm92aWRlZCBieSB0aGlzIHBsdWdpbg0KKyAgY2ZnLnJlZ2lzdGVyQnV0dG9uKHsNCisgICAgaWQgICAgICAgOiAiYWJicmV2aWF0aW9uIiwNCisgICAgdG9vbHRpcCAgOiBYaW5oYS5fbGMoIkFiYnJldmlhdGlvbiIsICJBYmJyZXZpYXRpb24iKSwNCisgICAgaW1hZ2UgICAgOiBlZGl0b3IuaW1nVVJMKCJlZF9hYmJyZXZpYXRpb24uZ2lmIiwgIkFiYnJldmlhdGlvbiIpLA0KKyAgICB0ZXh0TW9kZSA6IGZhbHNlLA0KKyAgICBhY3Rpb24gICA6IGZ1bmN0aW9uKGVkaXRvcikgew0KKyAgICAgICAgICAgICAgICAgc2VsZi5zaG93KCk7DQorICAgICAgICAgICAgICAgfQ0KKyAgfSk7DQorICBjZmcuYWRkVG9vbGJhckVsZW1lbnQoImFiYnJldmlhdGlvbiIsICJpbnNlcnRob3Jpem9udGFscnVsZSIsIDEpOw0KK30NCisNCitBYmJyZXZpYXRpb24uX3BsdWdpbkluZm8gPSB7DQorICBuYW1lICAgICAgICAgIDogIkFiYnJldmlhdGlvbiIsDQorICB2ZXJzaW9uICAgICAgIDogIjEuMCIsDQorICBkZXZlbG9wZXIgICAgIDogIlVkbyBTY2htYWwiLA0KKyAgZGV2ZWxvcGVyX3VybCA6ICIiLA0KKyAgc3BvbnNvciAgICAgICA6ICJMLk4uU2NoYWZmcmF0aCBOZXVlTWVkaWVuIiwNCisgIHNwb25zb3JfdXJsICAgOiAiaHR0cDovL3d3dy5zY2hhZmZyYXRoLW5ldWVtZWRpZW4uZGUvIiwNCisgIGNfb3duZXIgICAgICAgOiAiVWRvIFNjaG1hbCAmIFNjaGFmZnJhdGgtTmV1ZU1lZGllbiIsDQorICBsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIg0KK307DQorDQorLy8gRmlsbHMgaW4gdGhlIHRleHQgZmllbGQgaWYgdGhlIGFjcm9ueW0gaXMgZWl0aGVyIGtub3duIChpLmUuLCBpbiB0aGUgW2xhbmddLmpzIGZpbGUpDQorLy8gb3IgaWYgd2UncmUgZWRpdGluZyBhbiBleGlzdGluZyBhYmJyZXZpYXRpb24uDQorQWJicmV2aWF0aW9uLnByb3RvdHlwZS5maWxsVGV4dCA9IGZ1bmN0aW9uKCkgew0KKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOw0KKyAgdmFyIHRleHQgPSB0aGlzLmh0bWwudG9VcHBlckNhc2UoKTsNCisgIHZhciBhYmJyID0gWGluaGEuZ2V0UGx1Z2luRGlyKHRoaXMuY29uc3RydWN0b3IubmFtZSkgKyAiL2FiYnIvIiArIF9lZGl0b3JfbGFuZyArICIuanMiOw0KKyAgdmFyIGFiYnJEYXRhID0gWGluaGEuX2dldHVybGNvbnRlbnQoYWJicik7DQorDQorICBpZiAoYWJickRhdGEpIHsNCisgICAgZXZhbCgnYWJick9iaiA9ICcgKyBhYmJyRGF0YSk7DQorICAgIGlmIChhYmJyT2JqICE9ICIiKSB7DQorICAgICAgdmFyIGRlc3QgPSB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgidGl0bGUiKTsNCisgICAgICBkZXN0LnZhbHVlID0gdGhpcy50aXRsZSB8fCAiIjsNCisgICAgICBmb3IgKHZhciBpIGluIGFiYnJPYmopIHsNCisgICAgICAgIHNhbWUgPSAoaS50b1VwcGVyQ2FzZSgpPT10ZXh0KTsNCisgICAgICAgIGlmIChzYW1lKQ0KKyAgICAgICAgICBkZXN0LnZhbHVlID0gYWJick9ialtpXTsNCisgICAgICB9DQorICAgIH0NCisgIH0NCit9DQorDQorQWJicmV2aWF0aW9uLnByb3RvdHlwZS5vbkdlbmVyYXRlT25jZSA9IGZ1bmN0aW9uKGVkaXRvcikgew0KKyAgdGhpcy5lZGl0b3IuYWRkRWRpdG9yU3R5bGVzaGVldChYaW5oYS5nZXRQbHVnaW5EaXIoJ0FiYnJldmlhdGlvbicpICsgJy9hYmJyZXZpYXRpb24uY3NzJyk7DQorICB0aGlzLm1ldGhvZHNSZWFkeSA9IHRydWU7IC8vcmVtb3ZlIHRoaXM/DQorICB2YXIgc2VsZiA9IEFiYnJldmlhdGlvbjsNCisgIFhpbmhhLl9nZXRiYWNrKFhpbmhhLmdldFBsdWdpbkRpcignQWJicmV2aWF0aW9uJykgKyAnL2RpYWxvZy5odG1sJywgZnVuY3Rpb24oZ2V0YmFjaykgeyBzZWxmLmh0bWwgPSBnZXRiYWNrOyBzZWxmLmRpYWxvZ1JlYWR5ID0gdHJ1ZTsgfSk7DQorfTsNCisNCitBYmJyZXZpYXRpb24ucHJvdG90eXBlLk9uVXBkYXRlVG9vbGJhciA9IGZ1bmN0aW9uKGVkaXRvcikgew0KKyAgaWYgKCEoQWJicmV2aWF0aW9uLmRpYWxvZ1JlYWR5ICYmIEFiYnJldmlhdGlvbi5tZXRob2RzUmVhZHkpKQ0KKyAgew0KKyAgICB0aGlzLmVkaXRvci5fdG9vbGJhck9iamVjdHMuQWJicmV2aWF0aW9uLnN0YXRlKCJlbmFibGVkIiwgZmFsc2UpOw0KKyAgfQ0KKyAgZWxzZSB0aGlzLm9uVXBkYXRlVG9vbGJhciA9IG51bGw7DQorfQ0KKw0KK0FiYnJldmlhdGlvbi5wcm90b3R5cGUucHJlcGFyZURpYWxvZyA9IGZ1bmN0aW9uKGh0bWwpIHsNCisgIHZhciBzZWxmID0gdGhpczsNCisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsNCisgIHZhciBkaWFsb2cgPSB0aGlzLmRpYWxvZyA9IG5ldyBYaW5oYS5EaWFsb2coZWRpdG9yLCBBYmJyZXZpYXRpb24uaHRtbCwgJ1hpbmhhJywge3dpZHRoOiAyNjAsIGhlaWdodDoxNDB9KTsNCisNCisgIGRpYWxvZy5nZXRFbGVtZW50QnlJZCgnb2snKS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7IHNlbGYuYXBwbHkoKTsgfTsNCisgIGRpYWxvZy5nZXRFbGVtZW50QnlJZCgnZGVsZXRlJykub25jbGljayA9IGZ1bmN0aW9uKCkgeyBzZWxmLm9uZGVsZXRlKCk7IH07DQorICBkaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ2NhbmNlbCcpLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsgc2VsZi5kaWFsb2cuaGlkZSgpOyB9Ow0KKyAgDQorICB0aGlzLmRpYWxvZ1JlYWR5ID0gdHJ1ZTsNCit9DQorDQorQWJicmV2aWF0aW9uLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24oZWRpdG9yKSB7DQorICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7DQorICB0aGlzLmh0bWwgPSBlZGl0b3IuZ2V0U2VsZWN0ZWRIVE1MKCk7DQorICBpZiAoIXRoaXMuZGlhbG9nKSB0aGlzLnByZXBhcmVEaWFsb2coKTsNCisgIHZhciBzZWxmID0gdGhpczsNCisgIHZhciBkb2MgPSBlZGl0b3IuX2RvYzsNCisgIHZhciBzZWwgID0gZWRpdG9yLl9nZXRTZWxlY3Rpb24oKTsNCisgIHZhciByYW5nZSAgPSBlZGl0b3IuX2NyZWF0ZVJhbmdlKHNlbCk7DQorICB2YXIgYWJiciA9IGVkaXRvci5fYWN0aXZlRWxlbWVudChzZWwpOw0KKyAgDQorICBpZighKGFiYnIgIT0gbnVsbCAmJiBhYmJyLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAiYWJiciIpKSB7DQorICAgIGFiYnIgPSBlZGl0b3IuX2dldEZpcnN0QW5jZXN0b3Ioc2VsLCAnYWJicicpOw0KKyAgfQ0KKyAgdGhpcy5hYmJyID0gYWJicjsNCisgIA0KKyAgaWYgKGFiYnIpIHRoaXMudGl0bGUgPSBhYmJyLnRpdGxlOw0KKyAgdGhpcy5maWxsVGV4dCgpOw0KKw0KKyAgdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoImlucHV0cyIpLm9uc3VibWl0ID0gZnVuY3Rpb24oKSB7DQorICAgIHNlbGYuYXBwbHkoKTsNCisgICAgcmV0dXJuIGZhbHNlOw0KKyAgfQ0KKw0KKyAgdGhpcy5kaWFsb2cuc2hvdygpOw0KKyAgdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoInRpdGxlIikuc2VsZWN0KCk7DQorfQ0KKw0KK0FiYnJldmlhdGlvbi5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbigpIHsNCisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsNCisgIHZhciBkb2MgPSBlZGl0b3IuX2RvYzsNCisgIHZhciBhYmJyID0gdGhpcy5hYmJyOw0KKyAgdmFyIGh0bWwgPSB0aGlzLmh0bWw7DQorICB2YXIgcGFyYW0gPSB0aGlzLmRpYWxvZy5oaWRlKCk7DQorDQorICBpZiAoIHBhcmFtICkgew0KKyAgICB2YXIgdGl0bGUgPSBwYXJhbVsidGl0bGUiXTsNCisgICAgaWYgKHRpdGxlID09ICIiIHx8IHRpdGxlID09IG51bGwpIHsNCisgICAgICBpZiAoYWJicikgew0KKyAgICAgICAgdmFyIGNoaWxkID0gYWJici5pbm5lckhUTUw7DQorICAgICAgICBhYmJyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYWJicik7DQorICAgICAgICBlZGl0b3IuaW5zZXJ0SFRNTChjaGlsZCk7IC8vIEZJWDogVGhpcyBkb2Vzbid0IHdvcmsgaW4gU2FmYXJpIDMgDQorICAgICAgfQ0KKyAgICAgIHJldHVybjsNCisgICAgfQ0KKyAgICB0cnkgew0KKyAgICAgIGlmICghYWJicikgew0KKyAgICAgICAgYWJiciA9IGRvYy5jcmVhdGVFbGVtZW50KCJhYmJyIik7DQorICAgICAgICBhYmJyLnRpdGxlID0gdGl0bGU7DQorICAgICAgICBhYmJyLmlubmVySFRNTCA9IGh0bWw7DQorICAgICAgICBpZiAoWGluaGEuaXNfaWUpIHsNCisgICAgICAgICAgcmFuZ2UucGFzdGVIVE1MKGFiYnIub3V0ZXJIVE1MKTsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgIGVkaXRvci5pbnNlcnROb2RlQXRTZWxlY3Rpb24oYWJicik7DQorICAgICAgICB9DQorICAgICAgfSBlbHNlIHsNCisgICAgICAgIGFiYnIudGl0bGUgPSB0aXRsZTsNCisgICAgICB9DQorICAgIH0NCisgICAgY2F0Y2ggKGUpIHsgfQ0KKyAgfQ0KK30NCisNCisNCitBYmJyZXZpYXRpb24ucHJvdG90eXBlLm9uZGVsZXRlID0gZnVuY3Rpb24oKSB7DQorICB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgndGl0bGUnKS52YWx1ZSA9ICIiOw0KKyAgdGhpcy5hcHBseSgpOw0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9hYmJyL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vYWJici9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmI1NDYyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vYWJici9kZS5qcwpAQCAtMCwwICsxLDQwIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRlIiwgRU5DT0RJTkc6IFVURi04CisvLyBBdXRob3I6IFVkbyBTY2htYWwsIDxzY2htYWxAc2NoYWZmcmF0aC1uZXVlbWVkaWVuLmRlPgorLy8KKy8vIChjKSBVZG8gU2NobWFsICYgU2NoYWZmcmF0aCBOZXVlTWVkaWVuIDIwMDQKKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKworeworICAiQWJzLiI6ICJBYnNhdHoiLAorICAiYnNwdy4iOiAiQmVpc3BpZWxzd2Vpc2UiLAorICAiYnp3LiI6ICJiZXppZWh1bmdzd2Vpc2UiLAorICAiYy9vIjogImNhcmUgb2YgLyBiZWksIHp1IEjDpG5kZW4gdm9uIiwKKyAgImNhLiI6ICJjaXJjYSIsCisgICJkLmguIjogImRhcyBoZWnDn3QiLAorICAiZC5KLiI6ICJkZXMgSmFocmVzIiwKKyAgIkRyLiI6ICJEb2t0b3IiLAorICAiZS5WLiI6ICJFaW5nZXRyYWdlbmVyIFZlcmVpbiIsCisgICJlRy4iOiAiRWluZ2V0cmFnZW5lIEdlbm9zc2Vuc2NoYWZ0IiwKKyAgImVoZW0uIjogImVoZW1hbHMiLAorICAiZWluc2NobC4iOiAiZWluc2NobGllw59saWNoIiwKKyAgImV0Yy4iOiAiZXQgY2V0ZXJhIC8gdW5kIHNvIHdlaXRlciIsCisgICJldnRsLiI6ICJldmVudHVlbGwiLAorICAiZmYuIjogIihmb3J0KSBmb2xnZW5kZSIsCisgICJnZW0uIjogImdlbcOkw58iLAorICAiaW5rbC4iOiAiaW5rbHVzaXZlIiwKKyAgIm1heC4iOiAibWF4aW1hbCAvIG1heGltdW0iLAorICAibWluLiI6ICJtaW5kZXN0ZW5zIC8gbWluaW11bSAvIG1pbmltYWwiLAorICAiby5nLiI6ICJvYmVuIGdlbmFubnQiLAorICAicmQuIjogInJ1bmQiLAorICAiUy4iOiAiU2VpdGUiLAorICAidS5hLiI6ICJ1bnRlciBhbmRlcmVtIiwKKyAgInUuw6QuIjogInVuZCDDpGhubGljaCIsCisgICJ1c3cuIjogInVuZCBzbyB3ZWl0ZXIiLAorICAidmdsLiI6ICJ2ZXJnbGVpY2hlIiwKKyAgInouQi4iOiAienVtIEJlaXNwaWVsIiwKKyAgInouVC4iOiAienVtIFRlaWwiLAorICAiei5aLiI6ICJ6dXIgWmVpdCIsCisgICJ6emdsLiI6ICJ6dXrDvGdsaWNoIgorfTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2FiYnIvZW4uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9hYmJyL2VuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOTc0YzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9hYmJyL2VuLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVWRvIFNjaG1hbCwgPHNjaG1hbEBzY2hhZmZyYXRoLW5ldWVtZWRpZW4uZGU+CisvLworLy8gKGMpIFVkbyBTY2htYWwgJiBTY2hhZmZyYXRoIE5ldWVNZWRpZW4gMjAwNAorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorCit7CisgICJBTlNJIjogIkFtZXJpY2FuIE5hdGlvbmFsIFN0YW5kYXJkcyBJbnN0aXR1dGUiLCAgCisgICJBU0EiOiAiQW1lcmljYW4gU3RhbmRhcmRzIEFzc29jaWF0aW9uIiwKKyAgIklTTyI6ICJJbnRlcm5hdGlvbmFsIE9yZ2FuaXNhdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIiwKKyAgIm1pbWUiOiAiTXVsdGlwdXJwb3NlIEludGVybmV0IE1haWwgRXh0ZW5zaW9ucyIsCisgICJVVEYiOiAiVW5pY29kZSBUcmFuc2Zvcm1hdGlvbiBGb3JtYXQiLAorICAiVzNDIjogIldvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0iCit9OwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vYWJicmV2aWF0aW9uLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2FiYnJldmlhdGlvbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY5OTljOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2FiYnJldmlhdGlvbi5jc3MKQEAgLTAsMCArMSwxMSBAQAorYWJiciwgYWNyb255bSwgc3Bhbi5hYmJyIHsNCisgIHdpZHRoOiAxOHB4Ow0KKyAgaGVpZ2h0OiAxOHB4Ow0KKwliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1nL2VkX2FiYnJldmlhdGlvbi5naWYpOwkNCisJYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCisJYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7DQorCXdoaXRlLXNwYWNlIDogbm93cmFwOwkNCisJY3Vyc29yOiBoZWxwOw0KKwlib3JkZXItYm90dG9tOiAxcHggZGFzaGVkICMwMDA7DQorCXBhZGRpbmctbGVmdDogMTlweDsNCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vZGlhbG9nLmh0bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9kaWFsb2cuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjA5ZmIxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vZGlhbG9nLmh0bWwKQEAgLTAsMCArMSwxNiBAQAorPGgxIGlkPSJbaDFdIj48bDEwbj5BYmJyZXZpYXRpb248L2wxMG4+PC9oMT4NCisNCis8Zm9ybSBuYW1lPSJmb3JtIiBhY3Rpb249IiIgbWV0aG9kPSJnZXQiIGlkPSJbaW5wdXRzXSI+DQorICA8ZmllbGRzZXQ+DQorICAgIDxsZWdlbmQ+PGwxMG4+RXhwYW5zaW9uOjwvbDEwbj48L2xlZ2VuZD4NCisgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJbdGl0bGVdIiBuYW1lPSJbdGl0bGVdIiBzaXplPSIzNSIgLz4NCisgPC9maWVsZHNldD4NCis8cCAvPg0KKw0KKzxkaXYgY2xhc3M9ImJ1dHRvbnMiIGlkPSJbYnV0dG9uc10iPg0KKyAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9Iltva10iICAgICB2YWx1ZT0iXyhPSykiICAgICAvPg0KKyAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9IltkZWxldGVdIiB2YWx1ZT0iXyhEZWxldGUpIiAvPg0KKyAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9IltjYW5jZWxdIiB2YWx1ZT0iXyhDYW5jZWwpIiAvPg0KKzwvZGl2Pg0KKzwvZm9ybT4NCisNCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9pbWcvZWRfYWJicmV2aWF0aW9uLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2ltZy9lZF9hYmJyZXZpYXRpb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZmJhM2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9pbWcvZWRfYWJicmV2aWF0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL2NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9jaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDc4ZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9jaC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLlj5bmtogiLAorICAgICJPSyI6ICLlpb0iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvY3ouanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL2N6LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2Yjk5MjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL2N6LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY3oiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlpydcWhaXQiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9kYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvZGEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmYzBkMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvZGEuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJiNmEyZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvZGUuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYmJyZXZpYXRpb24iOiAiQWJrw7xyenVuZyIsCisgICAgIkNhbmNlbCI6ICJBYmJyZWNoZW4iLAorICAgICJEZWxldGUiOiAiTMO2c2NoZW4iLAorICAgICJFeHBhbnNpb246IjogIkVya2zDpHJ1bmc6IiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvZWUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL2VlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOTE2ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL2VlLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvZWwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL2VsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZTAwNmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL2VsLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAiT0siOiAizpXOvc+EzqzOvs61zrkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NjYxM2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL2VzLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXMiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJicmV2aWF0aW9uIjogIkFicmV2aWF0dXJhIiwKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiRGVsZXRlIjogIlN1cHJpbWlyIiwKKyAgICAiRXhwYW5zaW9uOiI6ICJFeHBsaWNhY2nDs24iLAorICAgICJPSyI6ICJBY2VwdGFyIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL2V1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9ldS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmM5ZGJiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9ldS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImV1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJVdHppIiwKKyAgICAiT0siOiAiQWRvcyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9mYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvZmEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlN2Y3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvZmEuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi2KfZhti12LHYp9mBIiwKKyAgICAiT0siOiAi2KjZhNmHIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL2ZpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9maS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjU1MmI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9maS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIiwKKyAgICAiT0siOiAiSHl2w6Rrc3kiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZDU4MmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJicmV2aWF0aW9uIjogIkFicsOpdmlhdGlvbiIsCisgICAgIkNhbmNlbCI6ICJBbm51bGVyIiwKKyAgICAiRGVsZXRlIjogIlN1cHByaW1lciIsCisgICAgIkV4cGFuc2lvbjoiOiAiRXhwbGljYXRpb24iLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9oZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvaGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYwMmY3YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvaGUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJoZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgIk9LIjogIteQ15nXqdeV16giCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL2h1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzODUyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL2h1LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaHUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIk3DqWdzZW0iLAorICAgICJPSyI6ICJSZW5kYmVuIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9pdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGFjYjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9pdC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIml0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9qYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFkNTAzOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvamEuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYmJyZXZpYXRpb24iOiAi55Wl6KqeIiwKKyAgICAiQ2FuY2VsIjogIuS4reatoiIsCisgICAgIkRlbGV0ZSI6ICLliYrpmaQiLAorICAgICJFeHBhbnNpb246IjogIuWxlemWi+OBleOCjOOCi+iqnjoiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ODg2YjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSwyOSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICJBYmJyZXZpYXRpb24iOiAiIiwKKyAgICAiQ2FuY2VsIjogIiIsCisgICAgIkRlbGV0ZSI6ICIiLAorICAgICJFeHBhbnNpb246IjogIiIsCisgICAgIk9LIjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9sdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTE4OTA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9sdC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdMWhYXVrdGkiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9sdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvbHYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzZDVkMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvbHYuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXRjZWx0IiwKKyAgICAiT0siOiAiTGFiaSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9uYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVmZTc3MwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvbmIuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJuYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYmJyZXZpYXRpb24iOiAiQmVza3JpdmUgZm9ya29ydGVsc2UiLAorICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAiRGVsZXRlIjogIkZqZXJuZSIsCisgICAgIkV4cGFuc2lvbjoiOiAiQmV0eWRuaW5nOiIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWUzYzFkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9ubC5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFiYnJldmlhdGlvbiI6ICJBZmtvcnRpbmciLAorICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAiRGVsZXRlIjogIlZlcndpamRlcmVuIiwKKyAgICAiRXhwYW5zaW9uOiI6ICJVaXRicmVpZGluZzoiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvcGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI0M2RlMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvcGwuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW51bHVqIiwKKyAgICAiRGVsZXRlIjogIlVzdcWEIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxODIzMzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJicmV2aWF0aW9uIjogIkFicmV2aWHDp8OjbyIsCisgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCisgICAgIkRlbGV0ZSI6ICJBcGFnYXIiLAorICAgICJFeHBhbnNpb246IjogIkV4cGFuZGlyOiIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL3JvLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9yby5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDZlMWMzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9yby5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJvIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiLAorICAgICJPSyI6ICJBY2NlcHTEgyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9ydS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFkNTlmMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvcnUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvc2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL3NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZTc2ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL3NoLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvc2kuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL3NpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NzQ4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL3NpLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2kiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIsCisgICAgIk9LIjogIlYgcmVkdSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9zci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvc3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlZTZmNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvc3IuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy9zdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgzMzZkOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvc3YuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvdGguanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL3RoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYTljOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0FiYnJldmlhdGlvbi9sYW5nL3RoLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidGgiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIsCisgICAgIk9LIjogIuC4leC4geC4peC4hyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy90ci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvdHIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyYTFmZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvdHIuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0ciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYmJyZXZpYXRpb24iOiAiS8Sxc2FsdG1hIiwKKyAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgIkRlbGV0ZSI6ICJTaWwiLAorICAgICJFeHBhbnNpb246IjogIkHDp8SxbMSxbToiLAorICAgICJPSyI6ICJUYW1hbSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9BYmJyZXZpYXRpb24vbGFuZy92bi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvdm4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ4MmUwMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQWJicmV2aWF0aW9uL2xhbmcvdm4uanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ2biIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiSOG7p3kiLAorICAgICJPSyI6ICLEkOG7k25nIMO9IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NTU0Ryb3BEb3ducy9DU1NEcm9wRG93bnMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NTU0Ryb3BEb3ducy9DU1NEcm9wRG93bnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg4NDk5NQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ1NTRHJvcERvd25zL0NTU0Ryb3BEb3ducy5qcwpAQCAtMCwwICsxLDE0OSBAQAorLy8gU2ltcGxlIENTUyAoY2xhc3NOYW1lKSBwbHVnaW4gZm9yIHRoZSBlZGl0b3IKKy8vIFNwb25zb3JlZCBieSBodHRwOi8vd3d3Lm1pcm8uY29tLmF1CisvLyBJbXBsZW1lbnRhdGlvbiBieSBNaWhhaSBCYXpvbiwgaHR0cDovL2R5bmFyY2guY29tL21pc2hvby4KKy8vCisvLyAoYykgZHluYXJjaC5jb20gMjAwMworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vICRJZDogQ1NTRHJvcERvd25zLmpzIDEzMzcgMjAxOC0wMi0wMyAwODozMDoyNVogZ29nbyAkCisvLyBAVE9ETyBUaGlzIGlzIHRoZSBkZWZhdWx0IGFuZCB3b24ndCBiZSB2ZXJ5IHVzZWZ1bCB0byBvdGhlcnMuCisvLyBXZSBzaG91bGQgbWFrZSB0aGlzIGJldHRlci4KK1hpbmhhLkNvbmZpZy5wcm90b3R5cGUuY3NzUGx1Z2luQ29uZmlnID0KKyAgeworICAgIGNvbWJvcyA6IFsKKyAgICAgIHsgbGFiZWw6ICJTeW50YXgiLAorICAgICAgICAgICAgICAgICAgIC8vIG1lbnUgdGV4dCAgICAgICAvLyBDU1MgY2xhc3MKKyAgICAgICAgb3B0aW9uczogeyAiTm9uZSIgICAgICAgICAgIDogIiIsCisgICAgICAgICAgICAgICAgICAgIkNvZGUiIDogImNvZGUiLAorICAgICAgICAgICAgICAgICAgICJTdHJpbmciIDogInN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgIkNvbW1lbnQiIDogImNvbW1lbnQiLAorICAgICAgICAgICAgICAgICAgICJWYXJpYWJsZSBuYW1lIiA6ICJ2YXJpYWJsZS1uYW1lIiwKKyAgICAgICAgICAgICAgICAgICAiVHlwZSIgOiAidHlwZSIsCisgICAgICAgICAgICAgICAgICAgIlJlZmVyZW5jZSIgOiAicmVmZXJlbmNlIiwKKyAgICAgICAgICAgICAgICAgICAiUHJlcHJvY2Vzc29yIiA6ICJwcmVwcm9jZXNzb3IiLAorICAgICAgICAgICAgICAgICAgICJLZXl3b3JkIiA6ICJrZXl3b3JkIiwKKyAgICAgICAgICAgICAgICAgICAiRnVuY3Rpb24gbmFtZSIgOiAiZnVuY3Rpb24tbmFtZSIsCisgICAgICAgICAgICAgICAgICAgIkh0bWwgdGFnIiA6ICJodG1sLXRhZyIsCisgICAgICAgICAgICAgICAgICAgIkh0bWwgaXRhbGljIiA6ICJodG1sLWhlbHBlci1pdGFsaWMiLAorICAgICAgICAgICAgICAgICAgICJXYXJuaW5nIiA6ICJ3YXJuaW5nIiwKKyAgICAgICAgICAgICAgICAgICAiSHRtbCBib2xkIiA6ICJodG1sLWhlbHBlci1ib2xkIgorICAgICAgICAgICAgICAgICB9LAorICAgICAgICBjb250ZXh0OiAicHJlIgorICAgICAgfSwKKyAgICAgIHsgbGFiZWw6ICJJbmZvIiwKKyAgICAgICAgb3B0aW9uczogeyAiTm9uZSIgICAgICAgICAgIDogIiIsCisgICAgICAgICAgICAgICAgICAgIlF1b3RlIiAgICAgICAgICA6ICJxdW90ZSIsCisgICAgICAgICAgICAgICAgICAgIkhpZ2hsaWdodCIgICAgICA6ICJoaWdobGlnaHQiLAorICAgICAgICAgICAgICAgICAgICJEZXByZWNhdGVkIiAgICAgOiAiZGVwcmVjYXRlZCIKKyAgICAgICAgICAgICAgICAgfQorICAgICAgfQorICAgIF0KKyAgfTsKKworZnVuY3Rpb24gQ1NTRHJvcERvd25zKGVkaXRvciwgcGFyYW1zKSB7CisJdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisJdmFyIGNmZyA9IGVkaXRvci5jb25maWc7CisJdmFyIHNlbGYgPSB0aGlzOworCXZhciBwbHVnaW5fY29uZmlnOworICBpZihwYXJhbXMgJiYgcGFyYW1zLmxlbmd0aCkKKyAgeworICAgIHBsdWdpbl9jb25maWcgPSBwYXJhbXNbMF07CisgIH0KKyAgZWxzZQorICB7CisgICAgcGx1Z2luX2NvbmZpZyA9IGVkaXRvci5jb25maWcuY3NzUGx1Z2luQ29uZmlnOworICB9CisKKyAgdmFyIGNvbWJvcyA9IHBsdWdpbl9jb25maWcuY29tYm9zOworCisJZm9yICh2YXIgaSA9IDA7IGkgPCBjb21ib3MubGVuZ3RoOyBpKyspIHsKKwkJdmFyIGNvbWJvID0gY29tYm9zW2ldOworCQl2YXIgaWQgPSAiQ1NTLWNsYXNzIiArIGk7CisJCXZhciBjc3NfY2xhc3MgPSB7CisJCQlpZCAgICAgICAgIDogaWQsCisJCQlvcHRpb25zICAgIDogY29tYm8ub3B0aW9ucywKKwkJCWFjdGlvbiAgICAgOiBmdW5jdGlvbihlZGl0b3IpIHsgc2VsZi5vblNlbGVjdChlZGl0b3IsIHRoaXMsIGNvbWJvLmNvbnRleHQsIGNvbWJvLnVwZGF0ZWNvbnRleHRjbGFzcyk7IH0sCisJCQlyZWZyZXNoICAgIDogZnVuY3Rpb24oZWRpdG9yKSB7IHNlbGYudXBkYXRlVmFsdWUoZWRpdG9yLCB0aGlzKTsgfSwKKwkJCWNvbnRleHQgICAgOiBjb21iby5jb250ZXh0CisJCX07CisJCWNmZy5yZWdpc3RlckRyb3Bkb3duKGNzc19jbGFzcyk7CisgICAgY2ZnLmFkZFRvb2xiYXJFbGVtZW50KFsiVFsiICsgY29tYm8ubGFiZWwgKyAiXSIsIGlkLCAic2VwYXJhdG9yIl0gLCAiZm9ybWF0YmxvY2siLCAtMSk7CisgCX0KK30KKworQ1NTRHJvcERvd25zLl9wbHVnaW5JbmZvID0geworCW5hbWUgICAgICAgICAgOiAiQ1NTIiwKKwl2ZXJzaW9uICAgICAgIDogIjEuMCIsCisJZGV2ZWxvcGVyICAgICA6ICJNaWhhaSBCYXpvbiIsCisJZGV2ZWxvcGVyX3VybCA6ICJodHRwOi8vZHluYXJjaC5jb20vbWlzaG9vLyIsCisJY19vd25lciAgICAgICA6ICJNaWhhaSBCYXpvbiIsCisJc3BvbnNvciAgICAgICA6ICJNaXJvIEludGVybmF0aW9uYWwiLAorCXNwb25zb3JfdXJsICAgOiAiaHR0cDovL3d3dy5taXJvLmNvbS5hdSIsCisJbGljZW5zZSAgICAgICA6ICJodG1sQXJlYSIKK307CisKK0NTU0Ryb3BEb3ducy5wcm90b3R5cGUub25TZWxlY3QgPSBmdW5jdGlvbihlZGl0b3IsIG9iaiwgY29udGV4dCwgdXBkYXRlY29udGV4dGNsYXNzKSB7CisJdmFyIHRib2JqID0gZWRpdG9yLl90b29sYmFyT2JqZWN0c1tvYmouaWRdOworCXZhciBpbmRleCA9IHRib2JqLmVsZW1lbnQuc2VsZWN0ZWRJbmRleDsKKwl2YXIgY2xhc3NOYW1lID0gdGJvYmouZWxlbWVudC52YWx1ZTsKKworCS8vIHJldHJpZXZlIHBhcmVudCBlbGVtZW50IG9mIHRoZSBzZWxlY3Rpb24KKwl2YXIgcGFyZW50ID0gZWRpdG9yLmdldFBhcmVudEVsZW1lbnQoKTsKKwl2YXIgc3Vycm91bmQgPSB0cnVlOworCisJdmFyIGlzX3NwYW4gPSAocGFyZW50ICYmIHBhcmVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gInNwYW4iKTsKKwl2YXIgdXBkYXRlX3BhcmVudCA9IChjb250ZXh0ICYmIHVwZGF0ZWNvbnRleHRjbGFzcyAmJiBwYXJlbnQgJiYgcGFyZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSBjb250ZXh0KTsKKworCWlmICh1cGRhdGVfcGFyZW50KSB7CisJCXBhcmVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7CisJCWVkaXRvci51cGRhdGVUb29sYmFyKCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaXNfc3BhbiAmJiBpbmRleCA9PSAwICYmICEvXFMvLnRlc3QocGFyZW50LnN0eWxlLmNzc1RleHQpKSB7CisJCXdoaWxlIChwYXJlbnQuZmlyc3RDaGlsZCkgeworCQkJcGFyZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHBhcmVudC5maXJzdENoaWxkLCBwYXJlbnQpOworCQl9CisJCXBhcmVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHBhcmVudCk7CisJCWVkaXRvci51cGRhdGVUb29sYmFyKCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaXNfc3BhbikgeworCQkvLyBtYXliZSB3ZSBjb3VsZCBzaW1wbHkgY2hhbmdlIHRoZSBjbGFzcyBvZiB0aGUgcGFyZW50IG5vZGU/CisJCWlmIChwYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSkgeworCQkJcGFyZW50LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKKwkJCXN1cnJvdW5kID0gZmFsc2U7CisJCQkvLyBpbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIGhhbmRsZSB0aGUgdG9vbGJhciB1cGRhdGlvbgorCQkJLy8gb3Vyc2VsdmVzLgorCQkJZWRpdG9yLnVwZGF0ZVRvb2xiYXIoKTsKKwkJfQorCX0KKworCS8vIE90aGVyIHBvc3NpYmlsaXRpZXMgY291bGQgYmUgY2hlY2tlZCBidXQgcmVxdWlyZSBhIGxvdCBvZiBjb2RlLiAgV2UKKwkvLyBjYW4ndCBhZmZvcmQgdG8gZG8gdGhhdCBub3cuCisJaWYgKHN1cnJvdW5kKSB7CisJCS8vIHNoaXQgaGFwcGVucyA7LSkgbW9zdCBvZiB0aGUgdGltZS4gIHRoaXMgbWV0aG9kIHdvcmtzLCBidXQKKwkJLy8gaXQncyBkYW5nZXJvdXMgd2hlbiBzZWxlY3Rpb24gc3BhbnMgbXVsdGlwbGUgYmxvY2stbGV2ZWwKKwkJLy8gZWxlbWVudHMuCisJCWVkaXRvci5zdXJyb3VuZEhUTUwoIjxzcGFuIGNsYXNzPSciICsgY2xhc3NOYW1lICsgIic+IiwgIjwvc3Bhbj4iKTsKKwl9Cit9OworCitDU1NEcm9wRG93bnMucHJvdG90eXBlLnVwZGF0ZVZhbHVlID0gZnVuY3Rpb24oZWRpdG9yLCBvYmopIHsKKwl2YXIgc2VsZWN0ID0gZWRpdG9yLl90b29sYmFyT2JqZWN0c1tvYmouaWRdLmVsZW1lbnQ7CisJdmFyIHBhcmVudCA9IGVkaXRvci5nZXRQYXJlbnRFbGVtZW50KCk7CisJaWYgKHR5cGVvZiBwYXJlbnQuY2xhc3NOYW1lICE9ICJ1bmRlZmluZWQiICYmIC9cUy8udGVzdChwYXJlbnQuY2xhc3NOYW1lKSkgeworCQl2YXIgb3B0aW9ucyA9IHNlbGVjdC5vcHRpb25zOworCQl2YXIgdmFsdWUgPSBwYXJlbnQuY2xhc3NOYW1lOworCQlmb3IgKHZhciBpID0gb3B0aW9ucy5sZW5ndGg7IC0taSA+PSAwOykgeworCQkJdmFyIG9wdGlvbiA9IG9wdGlvbnNbaV07CisJCQlpZiAodmFsdWUgPT0gb3B0aW9uLnZhbHVlKSB7CisJCQkJc2VsZWN0LnNlbGVjdGVkSW5kZXggPSBpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCX0KKwlzZWxlY3Quc2VsZWN0ZWRJbmRleCA9IDA7Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ1NTUGlja2VyL0NTU1BpY2tlci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ1NTUGlja2VyL0NTU1BpY2tlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWIxY2NkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DU1NQaWNrZXIvQ1NTUGlja2VyLmpzCkBAIC0wLDAgKzEsMTY4IEBACisvKiogQ1NTIFBpY2tlciBQbHVnaW4gYnkgSnVzdGluIFJvdmFuZworICoKKyAqIEZvciBmdWxsIGRvY3VtZW50YXRpb24sIHBsZWFzZSBzZWUgCisgKiAgaHR0cDovL2JpdGJ1Y2tldC5vcmcvcm92YW5nanUveGluaGFfY3NzcGlja2VyL3dpa2kvSG9tZQorICoKKyAqIFNBTVBMRSBDT05GSUc6CisgKgorICogWW91IGNhbiBjb25maWd1cmUgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIGl0ZW0vc3R5bGUgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIENTUyBjbGFzc2VzOgorICoJLkNTU1BpY2tlck9wdGlvbiAoTm9ybWFsIHN0YXRlKQorICoJLkNTU1BpY2tlck9wdGlvbk92ZXIgKE1vdXNlLW92ZXIgc3RhdGUsIHR5cGljYWxseSBib3JkZXIgY2hhbmdlKQorICoJLkNTU1BpY2tlck9wdGlvbkFjdGl2ZSAoSW5kaWNhdG9yIGZvciBhY3RpdmUgY2xhc3NlcyB1bmRlciB0aGUgc2VsZWN0aW9uL2NhcmF0KQorICoJCisgKiBLZXlzIGFyZSBDU1MgQ2xhc3MgbmFtZXMKKyAqCXdyYXBwZXI6IHRhZyB0byB3cmFwIHNlbGVjdGVkIHRleHQgd2l0aAorICoJbmFtZTogZnJpZW5kbHkgbmFtZSB0byBkaXNwbGF5IGluIHBhbmVsIHdpdGggdGhhdCBjbGFzcyBzdHlsZSBhcHBsaWVkIHRvIGl0LgorICoKKyAqIFNhbXBsZSBjb25maWc6IAorICogQ1NTUGlja2VyLmNzc0xpc3QgPSB7CisgKgkJJ3hpbmhhRGFzaGVkQm94Jwk6IHsgJ3dyYXBwZXInOidkaXYnLAknbmFtZSc6J0JyZWFrb3V0IGJveCcgfQorICoJCSd4aW5oYU1pbmlIZWFkbGluZScgOiB7ICd3cmFwcGVyJzonZGl2JywJJ25hbWUnOidTdWItaGVhZGxpbmUnIH0KKyAqIH0KKyAqCisgKi8KKworZnVuY3Rpb24gQ1NTUGlja2VyKGVkaXRvciwgYXJncykgeworCXRoaXMuZWRpdG9yID0gZWRpdG9yOworCXZhciBDU1NQaWNrZXIgPSB0aGlzOworfQorCitDU1NQaWNrZXIuX3BsdWdpbkluZm8gPSB7CisJbmFtZQk6ICJDU1NQaWNrZXIiLAkKKwl2ZXJzaW9uIDogIjIwMDgtMTItMDEiLAorCWF1dGhvcgk6ICJKdXN0aW4gUm92YW5nIgorfQorCitDU1NQaWNrZXIucHJvdG90eXBlLm9uR2VuZXJhdGVPbmNlID0gZnVuY3Rpb24oKSB7CisJdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworCXZhciBDU1NQaWNrZXIgPSB0aGlzOworCWVkaXRvci5fY3NzUGlja2VyID0gZWRpdG9yLmFkZFBhbmVsKCJyaWdodCIpOworCQorCXRoaXMubWFpbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworCWVkaXRvci5fY3NzUGlja2VyLnN0eWxlLmJhY2tncm91bmRDb2xvcj0nI2RlZTVmOCc7CisJZWRpdG9yLl9jc3NQaWNrZXIuYXBwZW5kQ2hpbGQodGhpcy5tYWluKTsKKwkKKwlYaW5oYS5mcmVlTGF0ZXIodGhpcywibWFpbiIpOworCWVkaXRvci5zaG93UGFuZWwoZWRpdG9yLl9jc3NQaWNrZXIpOworfQorCisKK0NTU1BpY2tlci5wcm90b3R5cGUub25VcGRhdGVUb29sYmFyID0gZnVuY3Rpb24oKSB7CisJaWYodGhpcy5lZGl0b3IuX2Nzc1BpY2tlcikgeworCQlpZih0aGlzLl90aW1lb3V0SUQpIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElEKTsKKwkJdmFyIGUgPSB0aGlzLmVkaXRvcjsKKwkJdGhpcy5fdGltZW91dElEID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGUuX2dlbigpOyB9LCAyNTApOyAvLzEwMDAgPSAxc2VjIC8gNTAwPS41c2VjIC8gMjUwPS4yNXNlYworCX0KK30KKworWGluaGEucHJvdG90eXBlLmxpc3RTdHlsZXMgPSBmdW5jdGlvbihzKSB7CisJdmFyIGVkaXRvciA9IHRoaXM7CisJdmFyIG15U2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKKwl2YXIgbXlSYW5nZTsKKwlpZihYaW5oYS5pc19pZSkgeworCQlteVJhbmdlID0gdGhpcy5zYXZlU2VsZWN0aW9uKCk7Ly9teVNlbDsKKwkJbXlTZWwgPSB0aGlzLmNyZWF0ZVJhbmdlKG15U2VsKS50ZXh0OworCX0KKwkKKwl2YXIgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworCQorCWQuY2xhc3NOYW1lPSdDU1NQaWNrZXJPcHRpb24nOworCQorCS8qIElmIG91ciBjYXJhdCBpcyB3aXRoaW4gYW4gYWN0aXZlIGNsYXNzLCBoaWdobGlnaHQgaXQgKi8KKwl2YXIgdG9nZ2xlU3RhdGUgPSBlZGl0b3IuZ2V0U3R5bGVJbmZvKHMpOworCWlmKHRvZ2dsZVN0YXRlKSBYaW5oYS5fYWRkQ2xhc3MoZCwgJ0NTU1BpY2tlck9wdGlvbkFjdGl2ZScpOworCQorCWQuYWxpZ249J2NlbnRlcic7CisgICAgICAgICAgICAgIC8vIHYtLSBBdm9pZCBsY19wYXJzZV9zdHJpbmdzLnBocAorCWQuaW5uZXJIVE1MPSc8JysnZGl2IGNsYXNzPSInK3MrJyI+JytDU1NQaWNrZXIuY3NzTGlzdFtzXS5uYW1lKyc8L2Rpdj4nOworCWQub25jbGljayA9IGZ1bmN0aW9uKCkgeworCQllZGl0b3Iud3JhcFN0eWxlKHMsIG15U2VsLCBteVJhbmdlLCBDU1NQaWNrZXIuY3NzTGlzdFtzXS53cmFwcGVyKTsKKwkJcmV0dXJuIGZhbHNlOworCX07CisJCisJWGluaGEuX2FkZEV2ZW50KGQsICdtb3VzZW92ZXInLCBmdW5jdGlvbihldikgeworCQlYaW5oYS5fYWRkQ2xhc3MoZCwgJ0NTU1BpY2tlck9wdGlvbk92ZXInKTsKKwl9KTsKKwkKKwlYaW5oYS5fYWRkRXZlbnQoZCwgJ21vdXNlb3V0JywgZnVuY3Rpb24oZXYpIHsKKwkJWGluaGEuX3JlbW92ZUNsYXNzKGQsICdDU1NQaWNrZXJPcHRpb25PdmVyJyk7CisJfSk7CisJCisJcmV0dXJuIGQ7Cit9CisKK1hpbmhhLnByb3RvdHlwZS5fZ2VuID0gZnVuY3Rpb24oKSB7CisJdGhpcy5wbHVnaW5zLkNTU1BpY2tlci5pbnN0YW5jZS5tYWluLmlubmVySFRNTD0nJzsKKwlmb3IodmFyIHMgaW4gQ1NTUGlja2VyLmNzc0xpc3QpIHsKKwkJdGhpcy5wbHVnaW5zLkNTU1BpY2tlci5pbnN0YW5jZS5tYWluLmFwcGVuZENoaWxkKHRoaXMubGlzdFN0eWxlcyhzKSk7CisJfQorCXJldHVybiB0cnVlOworfQorCisvKgorCShzdHJpbmcpIHM6IHN0eWxlIG5hbWUKKwkoc3RyaW5nKSBzZWw6IHNlbGVjdGlvbiB0ZXh0CisJKG9iamVjdCkgbXlSYW5nZTogc2VsZWN0aW9uIG9iamVjdAorCShzdHJpbmcpIHNXcmFwcGVyOiB3cmFwcGVyIHRhZyAoZS5nLjogZGl2LCBzcGFuKQorKi8KK1hpbmhhLnByb3RvdHlwZS53cmFwU3R5bGUgPSBmdW5jdGlvbihzLCBzZWwsIG15UmFuZ2UsIHNXcmFwcGVyKSB7CisJaWYoIXNXcmFwcGVyKSBzV3JhcHBlcj0iZGl2IjsKKwlzV3JhcHBlcj1zV3JhcHBlci50b0xvd2VyQ2FzZSgpOworCQorCS8qIFRoZSByZWFzb24gZm9yIHRoZXNlIG5leHQgbGluZXMgaXMgdGhhdCB3ZSB3YW50IHRoZSB1c2VyIHRvIGJlIGFibGUgdG8gcGxhY2UKKwkgKiB0aGVpciBjdXJzb3IgYmVsb3cgdGhlIG5ldyBkaXYgZWxlbWVudC4gT3RoZXJ3aXNlIHRoZXkgY2FuJ3Qgd2hpY2ggbWFrZXMKKwkgKiBwbGFjaW5nIGFueXRoaW5nIGFmdGVyIGEgZGl2IHdyYXBwZXIgZGlmZmljdWx0L2FsbW9zdCBpbXBvc3NpYmxlLiAqLworCXZhciBkaXZCcmVhaz0nJzsKKwlpZihzV3JhcHBlcj09ImRpdiIpIGRpdkJyZWFrPSc8YnIvPic7CisJCisJdmFyIGVkaXRvcj10aGlzOworCXRoaXMuZm9jdXNFZGl0b3IoKTsKKwlpZihYaW5oYS5pc19pZSkgdGhpcy5yZXN0b3JlU2VsZWN0aW9uKG15UmFuZ2UpOworCisJLyogCisJICogRmlyc3QgLSBHZXQgcGFyZW50IGVsZW1lbnRzIGFuZCBzZWUgaWYgdGhlIHN0eWxlIGlzIGFscmVhZHkgYXBwbGllZC4KKwkgKi8KKwl2YXIgdG9nZ2xlU3RhdGUgPSBlZGl0b3IuZ2V0U3R5bGVJbmZvKHMpOworCWlmKCF0b2dnbGVTdGF0ZSkgeworCQkvKiBDcmVhdGUgYSBuZXcgd3JhcHBlciB3aGVuOgorCQkgKiAxLiBTZWxlY3RlZCB0ZXh0IGhhcyBubyAnc251Zycgd3JhcHBlciBhcm91bmQgaXQgYWxyZWFkeS4KKwkJICogMi4gSWYgaXQgZG9lcyBoYXZlIGEgJ3NudWcnIHdyYXBwZXIsIG9ubHkgYXBwZW5kIHRvIHRoZSBjbGFzc05hbWUgaWYgaXQncyBvZiB0aGUgc2FtZSB0eXBlIChzcGFuIG9yIGRpdikgCisJCSAqLworCQlpZihzZWwgPT0gJycpIHNlbCA9ICcmbmJzcDsnOyAvL1dlIGluc2VydCB0aGlzIGlmIHRoZSBzZWxlY3Rpb24gaXMgZW1wdHksIG1ha2luZyBpdCBlYXNpZXIgZm9yIGNhcmF0IHBsYWNlbWVudCB2aWEgY2xpY2sKKwkJCisJCXRoaXMuaW5zZXJ0SFRNTCgiPCIrc1dyYXBwZXIrIiBjbGFzcz0nIitzKyInPiIrc2VsKyI8LyIrc1dyYXBwZXIrIj4iK2RpdkJyZWFrKTsKKwkJLyogTW9kaWZ5IHRoZSAnc251Zycgd3JhcHBlciBpZiB0aGUgYWJvdmUgY29uZGl0aW9ucyBhcmUgbm90IG1ldCBmb3IgYSBuZXcgZWxlbWVudDogKi8JCQorCX0KKwllbHNlIHsKKwkJLyogMS4gSWYgdGhlIGN1cnJlbnQgYW5jZXN0b3IgaGFzIC1qdXN0LSB0aGlzIGNsYXNzbmFtZS4gSXQgc2hvdWxkIGJlIHJlbW92ZWQuIAorCQkgKiAyLiBJZiBpdCBoYXMgbW9yZSB0aGFuIG9uZSBjbGFzcywgaXQgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBvZiB0aGUgcGFyZW50cworCQkgKi8KKwkJWGluaGEuX3JlbW92ZUNsYXNzKHRvZ2dsZVN0YXRlLCBzKTsKKwl9CisJCisJcmV0dXJuIHRydWU7Cit9CisKK1hpbmhhLnByb3RvdHlwZS5nZXRTdHlsZUluZm8gPSBmdW5jdGlvbihzQ2xhc3NUb1Byb2JlKSB7CisJdmFyIGVkaXRvciA9IHRoaXM7CisJdmFyIGFMaXN0ID0gdGhpcy5nZXRBbGxBbmNlc3RvcnMoKTsKKwl2YXIgYSxzOworCQorCWlmKGFMaXN0KSBhTGlzdC5wb3AoKTsgLy9XZSBkb24ndCB3YW50IHRoZSBib2R5IGVsZW1lbnQgdG8gc2hvdyB1cCBpbiB0aGlzIGxpc3QuCisJaWYoYUxpc3QubGVuZ3RoID4gMCkgeworCQlmb3IodmFyIG8gaW4gYUxpc3QpeworCQkJYSA9IGFMaXN0W29dOworCQkJLyogSW5zdGVhZCBvZiBicmVhayBkb3duIGFuZCByZWJ1aWxkIHRoZSBhcnJheSBmb3IgdGhpcyBzZWFyY2gsIHdlJ3JlIGdvaW5nCisJCQkgKiB0byBkbyBzb21lIHN0cmluZyB0cmlja2VyeS4uLgorCQkJICogIC8vIE5PVEU6IFRISVMgTUFZIEJFIFBST05FIFRPIFBBUlRJQUwgTUFUQ0hFUy4gU09MVVRJT04gSVMgVE8gQUREIEEgU1BBQ0UgUFJFUEVORCAKKwkJCSAqLworCQkJaWYoYS5jbGFzc05hbWUpIHsKKwkJCQlzID0gYS5jbGFzc05hbWUudHJpbSgpKycgJzsKKwkJCQlpZihzLnRvTG93ZXJDYXNlKCkubWF0Y2goc0NsYXNzVG9Qcm9iZS50b0xvd2VyQ2FzZSgpKycgJykpIHsKKwkJCQkJcmV0dXJuIGE7CisJCQkJfQorCQkJfQorCQl9CisJfQorCXJldHVybiBmYWxzZTsKK30KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ2hhckNvdW50ZXIvQ2hhckNvdW50ZXIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJDb3VudGVyL0NoYXJDb3VudGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NWM5YjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJDb3VudGVyL0NoYXJDb3VudGVyLmpzCkBAIC0wLDAgKzEsMTAxIEBACisvLyBDaGFyY291bnRlciBmb3IgWGluaGENCisvLyAoYykgVWRvIFNjaG1hbCAmIEwuTi5TY2hhZmZyYXRoIE5ldWVNZWRpZW4NCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuDQorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLg0KKw0KK2Z1bmN0aW9uIENoYXJDb3VudGVyKGVkaXRvcikgew0KKyAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7DQorICB0aGlzLl9DaGFycyA9IDA7DQorICB0aGlzLl9Xb3JkcyA9IDA7DQorICB0aGlzLl9IVE1MID0gMDsNCisgIHRoaXMub25LZXlQcmVzcyA9IHRoaXMuX19vbktleVByZXNzOw0KK30NCisNCitYaW5oYS5Db25maWcucHJvdG90eXBlLkNoYXJDb3VudGVyID0NCit7DQorICAnc2hvd0NoYXInOiB0cnVlLCAvLyBzaG93IHRoZSBjaGFyYWN0ZXJzIGNvdW50LA0KKyAgJ3Nob3dXb3JkJzogdHJ1ZSwgLy8gc2hvdyB0aGUgd29yZHMgY291bnQsDQorICAnc2hvd0h0bWwnOiB0cnVlLCAvLyBzaG93IHRoZSBleGFjdCBodG1sIGNvdW50DQorICAnc2VwYXJhdG9yJzogJyB8ICcsIC8vIHNlcGFyYXRvciB1c2VkIHRvIGpvaW4gaW5mb3JtYXRpb25zDQorICAnbWF4SFRNTCcgOiAtMSAvLyAtMSBmb3IgdW5saW1pdGVkIGxlbmd0aCwgb3RoZXIgbnVtYmVyIGZvciBsaW1pdGluZyB0aGUgbGVuZ3RoIG9mIHRoZSBlZGl0ZWQgSFRNTA0KK307DQorDQorQ2hhckNvdW50ZXIuX3BsdWdpbkluZm8gPSB7DQorICBuYW1lICAgICAgICAgIDogIkNoYXJDb3VudGVyIiwNCisgIHZlcnNpb24gICAgICAgOiAiMS4zMSIsDQorICBkZXZlbG9wZXIgICAgIDogIlVkbyBTY2htYWwiLA0KKyAgZGV2ZWxvcGVyX3VybCA6ICJodHRwOi8vd3d3LnNjaGFmZnJhdGgtbmV1ZW1lZGllbi5kZSIsDQorICBzcG9uc29yICAgICAgIDogIkwuTi5TY2hhZmZyYXRoIE5ldWVNZWRpZW4iLA0KKyAgc3BvbnNvcl91cmwgICA6ICJodHRwOi8vd3d3LnNjaGFmZnJhdGgtbmV1ZW1lZGllbi5kZSIsDQorICBjX293bmVyICAgICAgIDogIlVkbyBTY2htYWwgJiBMLk4uU2NoYWZmcmF0aCBOZXVlTWVkaWVuIiwNCisgIGxpY2Vuc2UgICAgICAgOiAiaHRtbEFyZWEiDQorfTsNCisNCitDaGFyQ291bnRlci5wcm90b3R5cGUuX2xjID0gZnVuY3Rpb24oc3RyaW5nKSB7DQorICByZXR1cm4gWGluaGEuX2xjKHN0cmluZywgIkNoYXJDb3VudGVyIik7DQorfTsNCisNCisNCitDaGFyQ291bnRlci5wcm90b3R5cGUub25HZW5lcmF0ZU9uY2UgPSBmdW5jdGlvbigpIHsNCisgIHZhciBzZWxmID0gdGhpczsNCisgIGlmICh0aGlzLmNoYXJDb3VudD09bnVsbCkgew0KKyAgICAgIHZhciBjaGFyQ291bnQgPSBzZWxmLmVkaXRvci5yZWdpc3RlclN0YXR1c1dpZGdldCgnQ2hhckNvdW50ZXInLCBbJ3d5c2l3eWcnXSk7DQorICAgICAgdGhpcy5jaGFyQ291bnQgPSBjaGFyQ291bnQ7DQorICB9DQorfTsNCisNCitDaGFyQ291bnRlci5wcm90b3R5cGUuX19vbktleVByZXNzPSBmdW5jdGlvbihldikgew0KKyAgaWYgKChldi5rZXlDb2RlICE9IDgpICYmIChldi5rZXlDb2RlICE9NDYpKSB7IC8vIG5vdCBiYWNrc3BhY2UgJiBkZWxldGUNCisgICAgaWYgKHRoaXMuZWRpdG9yLmNvbmZpZy5DaGFyQ291bnRlci5tYXhIVE1MIT0tMSkgew0KKyAgICAgIHZhciBjb250ZW50cyA9IHRoaXMuZWRpdG9yLmdldEhUTUwoKTsNCisgICAgICBpZiAoY29udGVudHMubGVuZ3RoID49IHRoaXMuZWRpdG9yLmNvbmZpZy5DaGFyQ291bnRlci5tYXhIVE1MKSB7DQorICAgICAgICBYaW5oYS5fc3RvcEV2ZW50KGV2KTsNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICAgIH0NCisgICAgfQ0KKyAgfQ0KK30NCisNCitDaGFyQ291bnRlci5wcm90b3R5cGUuX3VwZGF0ZUNoYXJDb3VudD0gZnVuY3Rpb24oKSB7DQorICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7DQorICB2YXIgY2ZnID0gZWRpdG9yLmNvbmZpZzsNCisgIHZhciBjb250ZW50cyA9IGVkaXRvci5nZXRIVE1MKCk7DQorICB2YXIgc3RyaW5nID0gbmV3IEFycmF5KCk7DQorICBpZiAoY2ZnLkNoYXJDb3VudGVyLnNob3dIdG1sKSB7DQorICAgIHN0cmluZ1tzdHJpbmcubGVuZ3RoXSA9IHRoaXMuX2xjKCJIVE1MIikgKyAiOiAiICsgY29udGVudHMubGVuZ3RoOw0KKyAgfQ0KKyAgdGhpcy5fSFRNTCA9IGNvbnRlbnRzLmxlbmd0aDsNCisgIGlmIChjZmcuQ2hhckNvdW50ZXIuc2hvd1dvcmQgfHwgY2ZnLkNoYXJDb3VudGVyLnNob3dDaGFyKSB7DQorICAgIGNvbnRlbnRzID0gY29udGVudHMucmVwbGFjZSgvPFwvP1xzKiEtLVteLS0+XSotLT4vZ2ksICIiICk7DQorICAgIGNvbnRlbnRzID0gY29udGVudHMucmVwbGFjZSgvPCguKz8pPi9nLCAnJyk7Ly9Eb24ndCBjb3VudCBIVE1MIHRhZ3MNCisgICAgY29udGVudHMgPSBjb250ZW50cy5yZXBsYWNlKC8mbmJzcDsvZ2ksICcgJyk7DQorICAgIGNvbnRlbnRzID0gY29udGVudHMucmVwbGFjZSgvKFtcblxyXHRdKS9nLCAnICcpOy8vY29udmVydCBuZXdsaW5lcyBhbmQgdGFicyBpbnRvIHNwYWNlDQorICAgIGNvbnRlbnRzID0gY29udGVudHMucmVwbGFjZSgvKCAgKykvZywgJyAnKTsvL2NvdW50IHNwYWNlcyBvbmx5IG9uY2UNCisgICAgY29udGVudHMgPSBjb250ZW50cy5yZXBsYWNlKC8mKC4qKTsvZywgJyAnKTsvL0NvdW50IGh0bWxlbnRpdGllcyBhcyBvbmUga2V5c3Ryb2tlDQorICAgIGNvbnRlbnRzID0gY29udGVudHMucmVwbGFjZSgvXlxzKnxccyokL2csICcnKTsvL3RyaW0NCisgIH0NCisgIGlmIChjZmcuQ2hhckNvdW50ZXIuc2hvd1dvcmQpIHsNCisgICAgdGhpcy5fV29yZHMgPSAwOw0KKyAgICBmb3IgKHZhciB4PTA7eDxjb250ZW50cy5sZW5ndGg7eCsrKQ0KKyAgICB7DQorICAgICAgaWYgKGNvbnRlbnRzLmNoYXJBdCh4KSA9PSAiICIgKSB7dGhpcy5fV29yZHMrKzt9DQorICAgIH0NCisgICAgaWYgKHRoaXMuX1dvcmRzID49MSkgeyB0aGlzLl9Xb3JkcysrOyB9DQorICAgIHN0cmluZ1tzdHJpbmcubGVuZ3RoXSA9IHRoaXMuX2xjKCJXb3JkcyIpICsgIjogIiArIHRoaXMuX1dvcmRzIDsNCisgIH0NCisgIGlmIChjZmcuQ2hhckNvdW50ZXIuc2hvd0NoYXIpIHsNCisgICAgc3RyaW5nW3N0cmluZy5sZW5ndGhdID0gdGhpcy5fbGMoIkNoYXJzIikgKyAiOiAiICsgY29udGVudHMubGVuZ3RoOw0KKyAgICB0aGlzLl9DaGFycyA9IGNvbnRlbnRzLmxlbmd0aDsNCisgIH0NCisgIHRoaXMuY2hhckNvdW50LmlubmVySFRNTCA9IHN0cmluZy5qb2luKGNmZy5DaGFyQ291bnRlci5zZXBhcmF0b3IpOw0KK307DQorDQorQ2hhckNvdW50ZXIucHJvdG90eXBlLm9uVXBkYXRlVG9vbGJhciA9IGZ1bmN0aW9uKCkgew0KKyAgdGhpcy5jaGFyQ291bnQuaW5uZXJIVE1MID0gdGhpcy5fbGMoIi4uLiBpbiBwcm9ncmVzcyIpOw0KKyAgaWYodGhpcy5fdGltZW91dElEKSB7DQorICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElEKTsNCisgIH0NCisgIHZhciBlID0gdGhpczsNCisgIHRoaXMuX3RpbWVvdXRJRCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge2UuX3VwZGF0ZUNoYXJDb3VudCgpO30sIDEwMDApOw0KK307DQorDQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DaGFyQ291bnRlci9sYW5nL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DaGFyQ291bnRlci9sYW5nL2RlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NzdmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJDb3VudGVyL2xhbmcvZGUuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICIuLi4gaW4gcHJvZ3Jlc3MiOiAiLi4uIGluIEJlYXJiZWl0dW5nIiwKKyAgICAiQ2hhcnMiOiAiWmVpY2hlbiIsCisgICAgIkhUTUwiOiAiSFRNTCIsCisgICAgIldvcmRzIjogIldvcnRlIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJDb3VudGVyL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJDb3VudGVyL2xhbmcvZnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFlODk4YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ2hhckNvdW50ZXIvbGFuZy9mci5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNoYXJzIjogIkNhcmFjdMOocmVzIiwKKyAgICAiV29yZHMiOiAiTW90cyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DaGFyQ291bnRlci9sYW5nL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DaGFyQ291bnRlci9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ODVmNGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJDb3VudGVyL2xhbmcvamEuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICIuLi4gaW4gcHJvZ3Jlc3MiOiAiLi4uIOWHpueQhuS4rSIsCisgICAgIkNoYXJzIjogIuaWh+Wtl+aVsCIsCisgICAgIldvcmRzIjogIuWNmOiqnuaVsCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DaGFyQ291bnRlci9sYW5nL2xjX2Jhc2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJDb3VudGVyL2xhbmcvbGNfYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzJiMjcwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DaGFyQ291bnRlci9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSwyOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICIuLi4gaW4gcHJvZ3Jlc3MiOiAiIiwKKyAgICAiQ2hhcnMiOiAiIiwKKyAgICAiSFRNTCI6ICIiLAorICAgICJXb3JkcyI6ICIiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DaGFyQ291bnRlci9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DaGFyQ291bnRlci9sYW5nL25iLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NTliMGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJDb3VudGVyL2xhbmcvbmIuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJuYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDaGFycyI6ICJUZWduIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJDb3VudGVyL2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJDb3VudGVyL2xhbmcvbmwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFjYjQwZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ2hhckNvdW50ZXIvbGFuZy9ubC5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIi4uLiBpbiBwcm9ncmVzcyI6ICIuLi4gd29yZHQgdmVyd2Vya3QiLAorICAgICJDaGFycyI6ICJUZWtlbnMiLAorICAgICJXb3JkcyI6ICJXb29yZGVuIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJDb3VudGVyL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJDb3VudGVyL2xhbmcvcHRfYnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVmNDgwOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ2hhckNvdW50ZXIvbGFuZy9wdF9ici5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIi4uLiBpbiBwcm9ncmVzcyI6ICIuLi4gZW0gcHJvY2Vzc28iLAorICAgICJDaGFycyI6ICJDYXJhY3RlcmVzIiwKKyAgICAiSFRNTCI6ICJIVE1MIiwKKyAgICAiV29yZHMiOiAiUGFsYXZyYXMiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ2hhcmFjdGVyTWFwL0NoYXJhY3Rlck1hcC5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9DaGFyYWN0ZXJNYXAuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MTA4ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9DaGFyYWN0ZXJNYXAuY3NzCkBAIC0wLDAgKzEsNDMgQEAKKy5DaGFyYWN0ZXJNYXAgeyANCitiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOw0KK30NCisuQ2hhcmFjdGVyTWFwIGEuZW50aXR5IHsNCisgIGZvbnQtc2l6ZToxMnB4Ow0KKyAgd2lkdGg6MThweDsNCisgIGRpc3BsYXk6YmxvY2s7DQorICBmbG9hdDpsZWZ0Ow0KKyAgcGFkZGluZzoycHg7DQorICB0ZXh0LWRlY29yYXRpb246bm9uZTsNCisgIGNvbG9yOiMwMDA7DQorICB0ZXh0LWFsaWduOmNlbnRlcjsNCisgIA0KK30NCisuQ2hhcmFjdGVyTWFwIGEubGlnaHQgew0KKyAgYmFja2dyb3VuZC1jb2xvcjojZmZmZmZmOw0KK30NCisuQ2hhcmFjdGVyTWFwIGEuZGFyayB7DQorICBiYWNrZ3JvdW5kLWNvbG9yOiNmN2Y4ZmQ7DQorfQ0KKy5DaGFyYWN0ZXJNYXAgYS5lbnRpdHk6aG92ZXIgew0KKyAgYmFja2dyb3VuZC1jb2xvcjojZmZkNzYwOw0KKyAgY29sb3I6IzAwMDsNCit9DQorLnBvcHVwIHRkLmNoYXJhY3RlciB7DQorICBmb250LWZhbWlseTpWZXJkYW5hLEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmOw0KKyAgZm9udC1zaXplOjE0cHg7DQorICBmb250LXdlaWdodDpib2xkOw0KKyAgdGV4dC1hbGlnbjpjZW50ZXI7DQorICBiYWNrZ3JvdW5kOiNmZmY7DQorICBwYWRkaW5nOjRweDsNCit9DQorLnBvcHVwIHRkLmNoYXJhY3Rlci1oaWxpdGUgew0KKyAgYmFja2dyb3VuZDojZmZkNzYwOw0KK30NCisucG9wdXAgZm9ybSB7DQorICB0ZXh0LWFsaWduOmNlbnRlcjsNCit9DQorLnBvcHVwIHRhYmxlIHsNCisgIGN1cnNvcjpwb2ludGVyOw0KKyAgYmFja2dyb3VuZC1jb2xvcjojQURBRDlDOw0KKyAgYm9yZGVyOjFweCBpbnNldDsNCit9DQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DaGFyYWN0ZXJNYXAvQ2hhcmFjdGVyTWFwLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DaGFyYWN0ZXJNYXAvQ2hhcmFjdGVyTWFwLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMTUwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9DaGFyYWN0ZXJNYXAuanMKQEAgLTAsMCArMSwxMjQgQEAKKy8vIENoYXJhY3RlciBNYXAgcGx1Z2luIGZvciBYaW5oYQorLy8gT3JpZ2luYWwgQXV0aG9yIC0gQmVybmhhcmQgUGZlaWZlciBub3ZvY2FpbmVAZ214Lm5ldAorWGluaGEubG9hZFN0eWxlKCAnQ2hhcmFjdGVyTWFwLmNzcycsICdDaGFyYWN0ZXJNYXAnICk7CisKK2Z1bmN0aW9uIENoYXJhY3Rlck1hcCggZWRpdG9yICkKK3sKKyAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisgIHZhciBjZmcgPSBlZGl0b3IuY29uZmlnOworICB2YXIgc2VsZiA9IHRoaXM7CisgIGNmZy5yZWdpc3RlckJ1dHRvbigKKyAgICB7CisgICAgICBpZCAgICAgICA6ICdpbnNlcnRjaGFyYWN0ZXInLAorICAgICAgdG9vbHRpcCAgOiBYaW5oYS5fbGMoICdJbnNlcnQgc3BlY2lhbCBjaGFyYWN0ZXInLCAnQ2hhcmFjdGVyTWFwJyApLAorICAgICAgaW1hZ2UgICAgOiBlZGl0b3IuaW1nVVJMKCdpbWFnZXMvdGFuZ28vMTZ4MTYvYXBwcy9hY2Nlc3Nvcmllcy1jaGFyYWN0ZXItbWFwLnBuZycpLAorICAgICAgdGV4dE1vZGUgOiBmYWxzZSwKKyAgICAgIGFjdGlvbiAgIDogZnVuY3Rpb24oKSB7IHNlbGYuc2hvdygpOyB9CisgICAgfQorICApOworICBjZmcuYWRkVG9vbGJhckVsZW1lbnQoJ2luc2VydGNoYXJhY3RlcicsICdjcmVhdGVsaW5rJywgLTEpOworCit9CisKKy8vIGNvbmZpZ3VyYXRpb24gbW9kZSA6IHBhbmVsIG9yIHBvcHVwCitYaW5oYS5Db25maWcucHJvdG90eXBlLkNoYXJhY3Rlck1hcCA9Cit7CisgICdtb2RlJzogJ3BvcHVwJyAvLyBjb25maWd1cmF0aW9uIG1vZGUgOiBwYW5lbCBvciBwb3B1cAorfTsKKworQ2hhcmFjdGVyTWFwLl9wbHVnaW5JbmZvID0KK3sKKyAgbmFtZSAgICAgICAgICA6ICJDaGFyYWN0ZXJNYXAiLAorICB2ZXJzaW9uICAgICAgIDogIjIuMCIsCisgIGRldmVsb3BlciAgICAgOiAiTGF1cmVudCBWaWxkYXkiLAorICBkZXZlbG9wZXJfdXJsIDogImh0dHA6Ly93d3cubW9raGV0LmNvbS8iLAorICBjX293bmVyICAgICAgIDogIlhpbmhhIGNvbW11bml0eSIsCisgIHNwb25zb3IgICAgICAgOiAiIiwKKyAgc3BvbnNvcl91cmwgICA6ICIiLAorICBsaWNlbnNlICAgICAgIDogIkhUTUxBcmVhIgorfTsKKworQ2hhcmFjdGVyTWFwLl9pc0FjdGl2ZSA9IGZhbHNlOworCisKK0NoYXJhY3Rlck1hcC5wcm90b3R5cGUuYWRkRW50aXR5ID0gZnVuY3Rpb24gKCBlbnRpdGUsIHBvcyApCit7CisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgdmFyIHNlbGYgPSB0aGlzOworICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdhJyApOworICBYaW5oYS5fYWRkQ2xhc3MoIGEsICdlbnRpdHknICk7CisgIGEuaW5uZXJIVE1MID0gZW50aXRlOworICBhLmhyZWYgPSAnamF2YXNjcmlwdDp2b2lkKDApJzsKKyAgWGluaGEuX2FkZENsYXNzKGEsIChwb3MlMik/ICdsaWdodCc6J2RhcmsnKTsKKyAgYS5vbmNsaWNrID0gZnVuY3Rpb24oKQorICB7CisgICAgaWYgKFhpbmhhLmlzX2llKSBlZGl0b3IuZm9jdXNFZGl0b3IoKTsKKyAgICBlZGl0b3IuaW5zZXJ0SFRNTCggZW50aXRlICk7CisgICAgLy9zZWxmLl9pc0FjdGl2ZSA9IGZhbHNlOworICAgIC8vZWRpdG9yLmhpZGVQYW5lbCggZWRpdG9yLl9DaGFyYWN0ZXJNYXAgKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH07CisgIHRoaXMuZGlhbG9nLm1haW4uYXBwZW5kQ2hpbGQoIGEgKTsKKyAgYSA9IG51bGw7Cit9OworCitDaGFyYWN0ZXJNYXAucHJvdG90eXBlLm9uR2VuZXJhdGVPbmNlID0gZnVuY3Rpb24oKQoreworCXRoaXMuX3ByZXBhcmVEaWFsb2coKTsKK307CisKK0NoYXJhY3Rlck1hcC5wcm90b3R5cGUuX3ByZXBhcmVEaWFsb2cgPSBmdW5jdGlvbigpCit7CisJdmFyIHNlbGYgPSB0aGlzOworCXZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKworCXZhciBodG1sID0gJzxoMT48bDEwbj5JbnNlcnQgc3BlY2lhbCBjaGFyYWN0ZXI8L2wxMG4+PC9oMT4nOworCisJLy8gTm93IHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkLCBzbyB3ZSBjYW4gYnVpbGQgdGhlIGRpYWxvZy4KKwl0aGlzLmRpYWxvZyA9IG5ldyBYaW5oYS5EaWFsb2coZWRpdG9yLCBodG1sLCAnQ2hhcmFjdGVyTWFwJyx7d2lkdGg6MzAwfSx7bW9kYWw6ZmFsc2V9KTsKKwlYaW5oYS5fYWRkQ2xhc3MoIHRoaXMuZGlhbG9nLnJvb3RFbGVtLCAnQ2hhcmFjdGVyTWFwJyApOworCisJaWYgKGVkaXRvci5jb25maWcuQ2hhcmFjdGVyTWFwICYmIGVkaXRvci5jb25maWcuQ2hhcmFjdGVyTWFwLm1vZGUgPT0gJ3BhbmVsJykgdGhpcy5kaWFsb2cuYXR0YWNoVG9QYW5lbCgncmlnaHQnKTsKKwkKKwl2YXIgZW50aXRlcyA9CisJWworCScmWXVtbDsnLCAnJnNjYXJvbjsnLCAnJiMwNjQ7JywgJyZxdW90OycsICcmaWV4Y2w7JywgJyZjZW50OycsICcmcG91bmQ7JywgJyZjdXJyZW47JywgJyZ5ZW47JywgJyZicnZiYXI7JywKKwknJnNlY3Q7JywgJyZ1bWw7JywgJyZjb3B5OycsICcmb3JkZjsnLCAnJmxhcXVvOycsICcmbm90OycsICcmbWFjcjsnLCAnJmRlZzsnLCAnJnBsdXNtbjsnLCAnJnN1cDI7JywKKwknJnN1cDM7JywgJyZhY3V0ZTsnLCAnJm1pY3JvOycsICcmcGFyYTsnLCAnJm1pZGRvdDsnLCAnJmNlZGlsOycsICcmc3VwMTsnLCAnJm9yZG07JywgJyZyYXF1bzsnLCAnJmZyYWMxNDsnLAorCScmZnJhYzEyOycsICcmZnJhYzM0OycsICcmaXF1ZXN0OycsICcmdGltZXM7JywgJyZPc2xhc2g7JywgJyZkaXZpZGU7JywgJyZvc2xhc2g7JywgJyZmbm9mOycsICcmY2lyYzsnLAorCScmdGlsZGU7JywgJyZuZGFzaDsnLCAnJm1kYXNoOycsICcmbHNxdW87JywgJyZyc3F1bzsnLCAnJnNicXVvOycsICcmbGRxdW87JywgJyZyZHF1bzsnLCAnJmJkcXVvOycsCisJJyZkYWdnZXI7JywgJyZEYWdnZXI7JywgJyZidWxsOycsICcmaGVsbGlwOycsICcmcGVybWlsOycsICcmbHNhcXVvOycsICcmcnNhcXVvOycsICcmZXVybzsnLCAnJnRyYWRlOycsCisJJyZBZ3JhdmU7JywgJyZBYWN1dGU7JywgJyZBY2lyYzsnLCAnJkF0aWxkZTsnLCAnJkF1bWw7JywgJyZBcmluZzsnLCAnJkFFbGlnOycsICcmQ2NlZGlsOycsICcmRWdyYXZlOycsCisJJyZFYWN1dGU7JywgJyZFY2lyYzsnLCAnJkV1bWw7JywgJyZJZ3JhdmU7JywgJyZJYWN1dGU7JywgJyZJY2lyYzsnLCAnJkl1bWw7JywgJyZFVEg7JywgJyZOdGlsZGU7JywKKwknJk9ncmF2ZTsnLCAnJk9hY3V0ZTsnLCAnJk9jaXJjOycsICcmT3RpbGRlOycsICcmT3VtbDsnLCAnJnJlZzsnLCAnJnRpbWVzOycsICcmVWdyYXZlOycsICcmVWFjdXRlOycsCisJJyZVY2lyYzsnLCAnJlV1bWw7JywgJyZZYWN1dGU7JywgJyZUSE9STjsnLCAnJnN6bGlnOycsICcmYWdyYXZlOycsICcmYWFjdXRlOycsICcmYWNpcmM7JywgJyZhdGlsZGU7JywKKwknJmF1bWw7JywgJyZhcmluZzsnLCAnJmFlbGlnOycsICcmY2NlZGlsOycsICcmZWdyYXZlOycsICcmZWFjdXRlOycsICcmZWNpcmM7JywgJyZldW1sOycsICcmaWdyYXZlOycsCisJJyZpYWN1dGU7JywgJyZpY2lyYzsnLCAnJml1bWw7JywgJyZldGg7JywgJyZudGlsZGU7JywgJyZvZ3JhdmU7JywgJyZvYWN1dGU7JywgJyZvY2lyYzsnLCAnJm90aWxkZTsnLAorCScmb3VtbDsnLCAnJmRpdmlkZTsnLCAnJm9zbGFzaDsnLCAnJnVncmF2ZTsnLCAnJnVhY3V0ZTsnLCAnJnVjaXJjOycsICcmdXVtbDsnLCAnJnlhY3V0ZTsnLCAnJnRob3JuOycsCisJJyZ5dW1sOycsICcmT0VsaWc7JywgJyZvZWxpZzsnLCAnJlNjYXJvbjsnCisJXTsKKworCWZvciAoIHZhciBpPTA7IGk8ZW50aXRlcy5sZW5ndGg7IGkrKyApCisJeworCSAgdGhpcy5hZGRFbnRpdHkoIGVudGl0ZXNbaV0sIGkgKTsKKwl9CisJCisJdGhpcy5yZWFkeSA9IHRydWU7CisJLy90aGlzLmhpZGUoKTsKK307CisKK0NoYXJhY3Rlck1hcC5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uKCkKK3sKKyAgaWYoIXRoaXMucmVhZHkpIC8vIGlmIHRoZSB1c2VyIGlzIHRvbyBmYXN0IGNsaWNraW5nIHRoZSwgd2UgaGF2ZSB0byBtYWtlIHRoZW0gd2FpdAorCXsKKwkJdmFyIHNlbGYgPSB0aGlzOworCQl3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHtzZWxmLnNob3coKTt9LDEwMCk7CisJCXJldHVybjsKKwl9CisJdGhpcy5kaWFsb2cudG9nZ2xlKCk7Cit9OworQ2hhcmFjdGVyTWFwLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24oKQoreworCXRoaXMuZGlhbG9nLmhpZGUoKTsKK307CisKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ2hhcmFjdGVyTWFwL2ltZy9lZF9jaGFybWFwLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ2hhcmFjdGVyTWFwL2ltZy9lZF9jaGFybWFwLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzZkNzA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DaGFyYWN0ZXJNYXAvaW1nL2VkX2NoYXJtYXAuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ2hhcmFjdGVyTWFwL2xhbmcvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9sYW5nL2RlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNzNiNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSW5zZXJ0IHNwZWNpYWwgY2hhcmFjdGVyIjogIlNvbmRlcnplaWNoZW4gZWluZsO8Z2VuIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ2hhcmFjdGVyTWFwL2xhbmcvZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9sYW5nL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNWMzZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9sYW5nL2VzLmpzCkBAIC0wLDAgKzEsNyBAQAorLy8gSTE4TiBjb25zdGFudHMNCisvLyBMQU5HOiAiZXMiLCBFTkNPRElORzogVVRGLTgNCisvLyB0cmFuc2xhdGVkOiBEZXJpY2sgTGVvbnkgPGRsZW9ueUBnbWFpbC5jb20+DQorew0KKyAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICJFZGl0YXIgY8OzZGlnbyBIVE1MIGRlbCB0ZXh0byBzZWxlY2Npb25hZG8iLA0KKyAgIlRhZyBFZGl0b3IiOiAiRWRpdG9yIGRlIEV0aXF1ZXRhcyINCit9Ow0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ2hhcmFjdGVyTWFwL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MzE3ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSW5zZXJ0IHNwZWNpYWwgY2hhcmFjdGVyIjogIkluc8OpcmVyIHVuIGNhcmFjdMOocmUgc3DDqWNpYWwiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxlciIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ2hhcmFjdGVyTWFwL2xhbmcvaXQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9sYW5nL2l0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMjE3ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9sYW5nL2l0LmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaXQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSW5zZXJ0IHNwZWNpYWwgY2hhcmFjdGVyIjogIkluc2VyaXNjYSBpbCBjYXJhdHRlcmUgc3BlY2lhbGUiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DaGFyYWN0ZXJNYXAvbGFuZy9qYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ2hhcmFjdGVyTWFwL2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdjNTQzNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ2hhcmFjdGVyTWFwL2xhbmcvamEuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJJbnNlcnQgc3BlY2lhbCBjaGFyYWN0ZXIiOiAi54m55q6K5paH5a2X44KS5oy/5YWlIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQ2FuY2VsIjogIuS4reatoiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ2hhcmFjdGVyTWFwL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ2hhcmFjdGVyTWFwL2xhbmcvbGNfYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTk1NzFmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DaGFyYWN0ZXJNYXAvbGFuZy9sY19iYXNlLmpzCkBAIC0wLDAgKzEsMjUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLworLy8gTEFORzogImVuIiwgRU5DT0RJTkc6IFVURi04CisvLyBBdXRob3I6IFRyYW5zbGF0b3ItTmFtZSwgPGVtYWlsQGV4YW1wbGUuY29tPgorLy8KKy8vIExhc3QgcmV2aXNpb246IDIwMTgtMDQtMTIKKy8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KKy8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyAoUGxlYXNlLCByZW1vdmUgaW5mb3JtYXRpb24gYmVsb3cpCisvLyBGT1IgVFJBTlNMQVRPUlM6CisvLworLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCisvLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCisvLworLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7CisvLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50CisvLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCisKK3sKKyAgICAiSW5zZXJ0IHNwZWNpYWwgY2hhcmFjdGVyIjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DaGFyYWN0ZXJNYXAvbGFuZy9uYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzJkZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DaGFyYWN0ZXJNYXAvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkluc2VydCBzcGVjaWFsIGNoYXJhY3RlciI6ICJTZXR0IGlubiB0ZWduIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ2hhcmFjdGVyTWFwL2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9sYW5nL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNGNjNGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9sYW5nL25sLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSW5zZXJ0IHNwZWNpYWwgY2hhcmFjdGVyIjogIlNwZWNpYWFsIGNoYXJhY3RlciBpbnZvZWdlbiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVlciIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ2hhcmFjdGVyTWFwL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZTM0NDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSW5zZXJ0IHNwZWNpYWwgY2hhcmFjdGVyIjogIkluc2VyaXIgY2FyYWN0ZXIgZXNwZWNpYWwiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DaGFyYWN0ZXJNYXAvbGFuZy9ydS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzY0MjdhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DaGFyYWN0ZXJNYXAvbGFuZy9ydS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJ1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkluc2VydCBzcGVjaWFsIGNoYXJhY3RlciI6ICLQktGB0YLQsNCy0LjRgtGMINGB0L/QtdGG0LjQsNC70YzQvdGL0Lkg0YHQuNC80LLQvtC7IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QuNGC0YwiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9sYW5nL3N2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DaGFyYWN0ZXJNYXAvbGFuZy9zdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YjZjYzNlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9DaGFyYWN0ZXJNYXAvbGFuZy9zdi5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInN2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkluc2VydCBzcGVjaWFsIGNoYXJhY3RlciI6ICJJbmZvZ2EgdGVja2VuIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ2hhcmFjdGVyTWFwL2xhbmcvdHIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9sYW5nL3RyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZDUxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NoYXJhY3Rlck1hcC9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSW5zZXJ0IHNwZWNpYWwgY2hhcmFjdGVyIjogIsOWemVsIGthcmFrdGVyIGVrbGUiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJDYW5jZWwiOiAixLBwdGFsIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9Db250ZXh0TWVudS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvQ29udGV4dE1lbnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNmNWQyOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvQ29udGV4dE1lbnUuanMKQEAgLTAsMCArMSw1NTMgQEAKKy8vIENvbnRleHQgTWVudSBQbHVnaW4gZm9yIEhUTUxBcmVhLTMuMAorLy8gU3BvbnNvcmVkIGJ5IHd3dy5hbWVyaWNhbmJpYmxlLm9yZworLy8gSW1wbGVtZW50YXRpb24gYnkgTWloYWkgQmF6b24sIGh0dHA6Ly9keW5hcmNoLmNvbS9taXNob28vCisvLworLy8gKGMpIGR5bmFyY2guY29tIDIwMDMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gJElkOiBDb250ZXh0TWVudS5qcyAxNDAyIDIwMTgtMDItMTkgMDc6MzU6NDlaIGdvZ28gJAorCitYaW5oYS5sb2FkU3R5bGUoIm1lbnUuY3NzIiwgIkNvbnRleHRNZW51Iik7CisKK2Z1bmN0aW9uIENvbnRleHRNZW51KGVkaXRvcikgeworCXRoaXMuZWRpdG9yID0gZWRpdG9yOworfQorCitDb250ZXh0TWVudS5fcGx1Z2luSW5mbyA9IHsKKwluYW1lICAgICAgICAgIDogIkNvbnRleHRNZW51IiwKKwl2ZXJzaW9uICAgICAgIDogIjEuMCIsCisJZGV2ZWxvcGVyICAgICA6ICJNaWhhaSBCYXpvbiIsCisJZGV2ZWxvcGVyX3VybCA6ICJodHRwOi8vZHluYXJjaC5jb20vbWlzaG9vLyIsCisJY19vd25lciAgICAgICA6ICJkeW5hcmNoLmNvbSIsCisJc3BvbnNvciAgICAgICA6ICJBbWVyaWNhbiBCaWJsZSBTb2NpZXR5IiwKKwlzcG9uc29yX3VybCAgIDogImh0dHA6Ly93d3cuYW1lcmljYW5iaWJsZS5vcmciLAorCWxpY2Vuc2UgICAgICAgOiAiaHRtbEFyZWEiCit9OworCitYaW5oYS5Db25maWcucHJvdG90eXBlLkNvbnRleHRNZW51ID0geworCWRpc2FibGVNb3ppbGxhU3BlbGxDaGVjayA6IGZhbHNlLAorICBjdXN0b21Ib29rcyA6IHsgfSAvLyAnYSc6IFsgWydMYWJlbCcsIGZ1bmN0aW9uKCkgeyBhbGVydCgnQWN0aW9uJyk7IH0sICdUb29sdGlwJywgJy9pY29uLmpwZycgXSBdCit9CisKK0NvbnRleHRNZW51LnByb3RvdHlwZS5vbkdlbmVyYXRlID0gZnVuY3Rpb24oKSB7CisJdmFyIHNlbGYgPSB0aGlzOworCXZhciBkb2MgPSB0aGlzLmVkaXRvcmRvYyA9IHRoaXMuZWRpdG9yLl9pZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDsKKwlYaW5oYS5fYWRkRXZlbnRzKGRvYywgWyJjb250ZXh0bWVudSJdLAorCQkJICAgIGZ1bmN0aW9uIChldmVudCkgeworCQkJCSAgICByZXR1cm4gc2VsZi5wb3B1cE1lbnUoWGluaGEuaXNfaWUgPyBzZWxmLmVkaXRvci5faWZyYW1lLmNvbnRlbnRXaW5kb3cuZXZlbnQgOiBldmVudCk7CisJCQkgICAgfSk7CisJdGhpcy5jdXJyZW50TWVudSA9IG51bGw7CisJCisJaWYgKHRoaXMuZWRpdG9yLmNvbmZpZy5Db250ZXh0TWVudS5kaXNhYmxlTW96aWxsYVNwZWxsQ2hlY2spIHsKKwkJdGhpcy5lZGl0b3Jkb2MuYm9keS5zcGVsbGNoZWNrID0gZmFsc2U7IC8vIEZpcmVmb3ggc3BlbGxjaGVja2luZyBpcyBxdWl0ZSBjb25mdXNpbmcgZm9yIHRoZSB1c2VyIHdoZW4gdGhleSBkb24ndCBnZXQgdGhlIGJyb3dzZXIgY29udGV4dCBtZW51CisJfQorfTsKKworQ29udGV4dE1lbnUucHJvdG90eXBlLmdldENvbnRleHRNZW51ID0gZnVuY3Rpb24odGFyZ2V0KSB7CisJdmFyIHNlbGYgPSB0aGlzOworCXZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKwl2YXIgY29uZmlnID0gZWRpdG9yLmNvbmZpZzsKKwl2YXIgbWVudSA9IFtdOworCXZhciB0Ym8gPSB0aGlzLmVkaXRvci5wbHVnaW5zLlRhYmxlT3BlcmF0aW9uczsKKwlpZiAodGJvKSB0Ym8gPSB0Ym8uaW5zdGFuY2U7CisJdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5oYXNTZWxlY3RlZFRleHQoKTsKKwlpZiAoIVhpbmhhLmlzX2dlY2tvKSB7CisJCWlmIChzZWxlY3Rpb24pIHsKKwkJCW1lbnUucHVzaChbIFhpbmhhLl9sYygiQ3V0IiwgIkNvbnRleHRNZW51IiksIGZ1bmN0aW9uKCkgeyBlZGl0b3IuZXhlY0NvbW1hbmQoImN1dCIpOyB9LCBudWxsLCBjb25maWcuYnRuTGlzdFsiY3V0Il1bMV0gXSwKKwkJCQkgIFsgWGluaGEuX2xjKCJDb3B5IiwgIkNvbnRleHRNZW51IiksIGZ1bmN0aW9uKCkgeyBlZGl0b3IuZXhlY0NvbW1hbmQoImNvcHkiKTsgfSwgbnVsbCwgY29uZmlnLmJ0bkxpc3RbImNvcHkiXVsxXSBdKTsKKwkJCW1lbnUucHVzaChbIFhpbmhhLl9sYygiUGFzdGUiLCAiQ29udGV4dE1lbnUiKSwgZnVuY3Rpb24oKSB7IGVkaXRvci5leGVjQ29tbWFuZCgicGFzdGUiKTsgfSwgbnVsbCwgY29uZmlnLmJ0bkxpc3RbInBhc3RlIl1bMV0gXSk7CisJCX0KKwl9CisJdmFyIGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQ7CisJdmFyIGVsbWVudXMgPSBbXTsKKworCXZhciBsaW5rID0gbnVsbDsKKwl2YXIgdGFibGUgPSBudWxsOworCXZhciB0ciA9IG51bGw7CisJdmFyIHRkID0gbnVsbDsKKwl2YXIgaW1nID0gbnVsbDsKKworCWZ1bmN0aW9uIHRhYmxlT3BlcmF0aW9uKG9wY29kZSkgeworCQl0Ym8uYnV0dG9uUHJlc3MoZWRpdG9yLCBvcGNvZGUpOworCX0KKworCWZ1bmN0aW9uIGluc2VydFBhcmEoYWZ0ZXIpIHsKKwkJdmFyIGVsID0gY3VycmVudFRhcmdldDsKKwkJdmFyIHBhciA9IGVsLnBhcmVudE5vZGU7CisJCXZhciBwID0gZWRpdG9yLl9kb2MuY3JlYXRlRWxlbWVudCgicCIpOworCQlwLmFwcGVuZENoaWxkKGVkaXRvci5fZG9jLmNyZWF0ZUVsZW1lbnQoImJyIikpOworCQlwYXIuaW5zZXJ0QmVmb3JlKHAsIGFmdGVyID8gZWwubmV4dFNpYmxpbmcgOiBlbCk7CisJCXZhciBzZWwgPSBlZGl0b3IuX2dldFNlbGVjdGlvbigpOworCQl2YXIgcmFuZ2UgPSBlZGl0b3IuX2NyZWF0ZVJhbmdlKHNlbCk7CisJCWlmICghWGluaGEuaXNfaWUpIHsKKwkJCXNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKKwkJCXJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhwKTsKKwkJCXJhbmdlLmNvbGxhcHNlKHRydWUpOworCQkJc2VsLmFkZFJhbmdlKHJhbmdlKTsKKwkJfSBlbHNlIHsKKwkJCXJhbmdlLm1vdmVUb0VsZW1lbnRUZXh0KHApOworCQkJcmFuZ2UuY29sbGFwc2UodHJ1ZSk7CisJCQlyYW5nZS5zZWxlY3QoKTsKKwkJfQorCX0KKworCWZvciAoOyB0YXJnZXQ7IHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlKSB7CisJCXZhciB0YWcgPSB0YXJnZXQudGFnTmFtZTsKKwkJaWYgKCF0YWcpCisJCQljb250aW51ZTsKKwkJdGFnID0gdGFnLnRvTG93ZXJDYXNlKCk7CisJCXN3aXRjaCAodGFnKSB7CisJCSAgICBjYXNlICJpbWciOgorCQkJaW1nID0gdGFyZ2V0OworCQkJZWxtZW51cy5wdXNoKG51bGwsCisJCQkJICAgICBbIFhpbmhhLl9sYygiX0ltYWdlIFByb3BlcnRpZXMuLi4iLCAiQ29udGV4dE1lbnUiKSwKKwkJCQkgICAgICAgZnVuY3Rpb24oKSB7CisJCQkJCSAgICAgICBlZGl0b3IuX2luc2VydEltYWdlKGltZyk7CisJCQkJICAgICAgIH0sCisJCQkJICAgICAgIFhpbmhhLl9sYygiU2hvdyB0aGUgaW1hZ2UgcHJvcGVydGllcyBkaWFsb2ciLCAiQ29udGV4dE1lbnUiKSwKKwkJCQkgICAgICAgY29uZmlnLmJ0bkxpc3RbImluc2VydGltYWdlIl1bMV0gXQorCQkJCSk7CisJCQlicmVhazsKKwkJICAgIGNhc2UgImEiOgorCQkJbGluayA9IHRhcmdldDsKKwkJCWVsbWVudXMucHVzaChudWxsLAorCQkJCSAgICAgWyBYaW5oYS5fbGMoIl9Nb2RpZnkgTGluay4uLiIsICJDb250ZXh0TWVudSIpLAorICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7IGVkaXRvci5jb25maWcuYnRuTGlzdFsnY3JlYXRlbGluayddWzNdKGVkaXRvcik7IH0sCisJCQkJICAgICAgIFhpbmhhLl9sYygiQ3VycmVudCBVUkwgaXMiLCAiQ29udGV4dE1lbnUiKSArICc6ICcgKyBsaW5rLmhyZWYsCisJCQkJICAgICAgIGNvbmZpZy5idG5MaXN0WyJjcmVhdGVsaW5rIl1bMV0gXSwKKworCQkJCSAgICAgWyBYaW5oYS5fbGMoIkNoZWNfayBMaW5rLi4uIiwgIkNvbnRleHRNZW51IiksCisJCQkJICAgICAgIGZ1bmN0aW9uKCkgeyB3aW5kb3cub3BlbihsaW5rLmhyZWYpOyB9LAorCQkJCSAgICAgICBYaW5oYS5fbGMoIk9wZW5zIHRoaXMgbGluayBpbiBhIG5ldyB3aW5kb3ciLCAiQ29udGV4dE1lbnUiKSBdLAorCisJCQkJICAgICBbIFhpbmhhLl9sYygiX1JlbW92ZSBMaW5rLi4uIiwgIkNvbnRleHRNZW51IiksCisJCQkJICAgICAgIGZ1bmN0aW9uKCkgeworCQkJCQkgICAgICAgaWYgKGNvbmZpcm0oWGluaGEuX2xjKCJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHVubGluayB0aGlzIGVsZW1lbnQuIiwgIkNvbnRleHRNZW51IikgKyAiXG4iICsKKwkJCQkJCQkgICBYaW5oYS5fbGMoIkxpbmsgcG9pbnRzIHRvOiIsICJDb250ZXh0TWVudSIpICsgIiAiICsgbGluay5ocmVmKSkgeworCQkJCQkJICAgICAgIHdoaWxlIChsaW5rLmZpcnN0Q2hpbGQpCisJCQkJCQkJICAgICAgIGxpbmsucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobGluay5maXJzdENoaWxkLCBsaW5rKTsKKwkJCQkJCSAgICAgICBsaW5rLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobGluayk7CisJCQkJCSAgICAgICB9CisJCQkJICAgICAgIH0sCisJCQkJICAgICAgIFhpbmhhLl9sYygiVW5saW5rIHRoZSBjdXJyZW50IGVsZW1lbnQiLCAiQ29udGV4dE1lbnUiKSBdCisJCQkJKTsKKwkJCWJyZWFrOworICAgICAgICBjYXNlICJ0aCI6CisJCSAgICBjYXNlICJ0ZCI6CisJCQl0ZCA9IHRhcmdldDsKKwkJCWlmICghdGJvKSBicmVhazsKKwkJCWVsbWVudXMucHVzaChudWxsKTsKKyAgICAgIGlmKHR5cGVvZiBjb25maWcuYnRuTGlzdFsiVE8tY2VsbC1wcm9wIl0gIT0gJ3VuZGVmaW5lZCcpCisgICAgICB7CisJCQkJICAgICBlbG1lbnVzLnB1c2goWyBYaW5oYS5fbGMoIkNfZWxsIFByb3BlcnRpZXMuLi4iLCAiQ29udGV4dE1lbnUiKSwKKwkJCQkgICAgICAgZnVuY3Rpb24oKSB7IHRhYmxlT3BlcmF0aW9uKCJUTy1jZWxsLXByb3AiKTsgfSwKKwkJCQkgICAgICAgWGluaGEuX2xjKCJTaG93IHRoZSBUYWJsZSBDZWxsIFByb3BlcnRpZXMgZGlhbG9nIiwgIkNvbnRleHRNZW51IiksCisJCQkJICAgICAgIGNvbmZpZy5idG5MaXN0WyJUTy1jZWxsLXByb3AiXVsxXSBdKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYodHlwZW9mIGNvbmZpZy5idG5MaXN0WyJUTy1jZWxsLWluc2VydC1hZnRlciJdICE9ICd1bmRlZmluZWQnKQorICAgICAgeworICAgICAgICAgICAgIGVsbWVudXMucHVzaCgKKyAgICAgICAgICAgICBbIFhpbmhhLl9sYygiSW5zZXJ0IENlbGwgQWZ0ZXIiLCAiQ29udGV4dE1lbnUiKSwKKwkJCQkgICAgICAgZnVuY3Rpb24oKSB7IHRhYmxlT3BlcmF0aW9uKCJUTy1jZWxsLWluc2VydC1hZnRlciIpOyB9LAorCQkJCSAgICAgICBYaW5oYS5fbGMoIkluc2VydCBDZWxsIEFmdGVyIiwgIkNvbnRleHRNZW51IiksCisJCQkJICAgICAgIGNvbmZpZy5idG5MaXN0WyJUTy1jZWxsLWluc2VydC1hZnRlciJdWzFdIF0pOworICAgICAgfQorICAgICAgCisgICAgICBpZih0eXBlb2YgY29uZmlnLmJ0bkxpc3RbIlRPLWNlbGwtaW5zZXJ0LWJlZm9yZSJdICE9ICd1bmRlZmluZWQnKQorICAgICAgeworICAgICAgICAgICAgIGVsbWVudXMucHVzaChbIFhpbmhhLl9sYygiSW5zZXJ0IENlbGwgQmVmb3JlIiwgIkNvbnRleHRNZW51IiksCisJCQkJICAgICAgIGZ1bmN0aW9uKCkgeyB0YWJsZU9wZXJhdGlvbigiVE8tY2VsbC1pbnNlcnQtYmVmb3JlIik7IH0sCisJCQkJICAgICAgIFhpbmhhLl9sYygiSW5zZXJ0IENlbGwgQWZ0ZXIiLCAiQ29udGV4dE1lbnUiKSwKKwkJCQkgICAgICAgY29uZmlnLmJ0bkxpc3RbIlRPLWNlbGwtaW5zZXJ0LWJlZm9yZSJdWzFdIF0pOworICAgICAgfQorICAgICAgCisgICAgICBpZih0eXBlb2YgY29uZmlnLmJ0bkxpc3RbIlRPLWNlbGwtZGVsZXRlIl0gIT0gJ3VuZGVmaW5lZCcpCisgICAgICB7CisgICAgICAgICAgICAgZWxtZW51cy5wdXNoKFsgWGluaGEuX2xjKCJEZWxldGUgQ2VsbCIsICJDb250ZXh0TWVudSIpLAorCQkJCSAgICAgICBmdW5jdGlvbigpIHsgdGFibGVPcGVyYXRpb24oIlRPLWNlbGwtZGVsZXRlIik7IH0sCisJCQkJICAgICAgIFhpbmhhLl9sYygiRGVsZXRlIENlbGwiLCAiQ29udGV4dE1lbnUiKSwKKwkJCQkgICAgICAgY29uZmlnLmJ0bkxpc3RbIlRPLWNlbGwtZGVsZXRlIl1bMV0gXSk7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmKHR5cGVvZiBjb25maWcuYnRuTGlzdFsiVE8tY2VsbC1tZXJnZSJdICE9ICd1bmRlZmluZWQnKQorICAgICAgeworICAgICAgICAgICAgIGVsbWVudXMucHVzaChbIFhpbmhhLl9sYygiTWVyZ2UgQ2VsbHMiLCAiQ29udGV4dE1lbnUiKSwKKwkJCQkgICAgICAgZnVuY3Rpb24oKSB7IHRhYmxlT3BlcmF0aW9uKCJUTy1jZWxsLW1lcmdlIik7IH0sCisJCQkJICAgICAgIFhpbmhhLl9sYygiTWVyZ2UgQ2VsbHMiLCAiQ29udGV4dE1lbnUiKSwKKwkJCQkgICAgICAgY29uZmlnLmJ0bkxpc3RbIlRPLWNlbGwtbWVyZ2UiXVsxXSBdCisJCQkJKTsKKyAgICAgIH0KKwkJCWJyZWFrOworCQkgICAgY2FzZSAidHIiOgorCQkJdHIgPSB0YXJnZXQ7CisJCQlpZiAoIXRibykgYnJlYWs7CisJCQllbG1lbnVzLnB1c2gobnVsbCk7CisgICAgICAKKyAgICAgIGlmKHR5cGVvZiBjb25maWcuYnRuTGlzdFsiVE8tcm93LXByb3AiXSAhPSAndW5kZWZpbmVkJykKKyAgICAgIHsKKyAgICAgICAgICAgICBlbG1lbnVzLnB1c2goWyBYaW5oYS5fbGMoIlJvX3cgUHJvcGVydGllcy4uLiIsICJDb250ZXh0TWVudSIpLAorCQkJCSAgICAgICBmdW5jdGlvbigpIHsgdGFibGVPcGVyYXRpb24oIlRPLXJvdy1wcm9wIik7IH0sCisJCQkJICAgICAgIFhpbmhhLl9sYygiU2hvdyB0aGUgVGFibGUgUm93IFByb3BlcnRpZXMgZGlhbG9nIiwgIkNvbnRleHRNZW51IiksCisJCQkJICAgICAgIGNvbmZpZy5idG5MaXN0WyJUTy1yb3ctcHJvcCJdWzFdIF0pOworICAgICAgfQorICAgICAgCisgICAgICBpZih0eXBlb2YgY29uZmlnLmJ0bkxpc3RbIlRPLXJvdy1pbnNlcnQtYWJvdmUiXSAhPSAndW5kZWZpbmVkJykKKyAgICAgIHsKKyAgICAgICAgICAgICBlbG1lbnVzLnB1c2goWyBYaW5oYS5fbGMoIklfbnNlcnQgUm93IEJlZm9yZSIsICJDb250ZXh0TWVudSIpLAorCQkJCSAgICAgICBmdW5jdGlvbigpIHsgdGFibGVPcGVyYXRpb24oIlRPLXJvdy1pbnNlcnQtYWJvdmUiKTsgfSwKKwkJCQkgICAgICAgWGluaGEuX2xjKCJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiLCAiQ29udGV4dE1lbnUiKSwKKwkJCQkgICAgICAgY29uZmlnLmJ0bkxpc3RbIlRPLXJvdy1pbnNlcnQtYWJvdmUiXVsxXSBdKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYodHlwZW9mIGNvbmZpZy5idG5MaXN0WyJUTy1yb3ctaW5zZXJ0LXVuZGVyIl0gIT0gJ3VuZGVmaW5lZCcpCisgICAgICB7CisgICAgICAgICAgICAgZWxtZW51cy5wdXNoKFsgWGluaGEuX2xjKCJJbl9zZXJ0IFJvdyBBZnRlciIsICJDb250ZXh0TWVudSIpLAorCQkJCSAgICAgICBmdW5jdGlvbigpIHsgdGFibGVPcGVyYXRpb24oIlRPLXJvdy1pbnNlcnQtdW5kZXIiKTsgfSwKKwkJCQkgICAgICAgWGluaGEuX2xjKCJJbnNlcnQgYSBuZXcgcm93IGFmdGVyIHRoZSBjdXJyZW50IG9uZSIsICJDb250ZXh0TWVudSIpLAorCQkJCSAgICAgICBjb25maWcuYnRuTGlzdFsiVE8tcm93LWluc2VydC11bmRlciJdWzFdIF0pOworICAgICAgfQorICAgICAgCisgICAgICBpZih0eXBlb2YgY29uZmlnLmJ0bkxpc3RbIlRPLXJvdy1kZWxldGUiXSAhPSAndW5kZWZpbmVkJykKKyAgICAgIHsKKyAgICAgICAgICAgICBlbG1lbnVzLnB1c2goWyBYaW5oYS5fbGMoIl9EZWxldGUgUm93IiwgIkNvbnRleHRNZW51IiksCisJCQkJICAgICAgIGZ1bmN0aW9uKCkgeyB0YWJsZU9wZXJhdGlvbigiVE8tcm93LWRlbGV0ZSIpOyB9LAorCQkJCSAgICAgICBYaW5oYS5fbGMoIkRlbGV0ZSB0aGUgY3VycmVudCByb3ciLCAiQ29udGV4dE1lbnUiKSwKKwkJCQkgICAgICAgY29uZmlnLmJ0bkxpc3RbIlRPLXJvdy1kZWxldGUiXVsxXSBdCisJCQkJKTsKKyAgICAgIH0KKwkJCWJyZWFrOworCQkgICAgY2FzZSAidGFibGUiOgorCQkJdGFibGUgPSB0YXJnZXQ7CisJCQlpZiAoIXRibykgYnJlYWs7CisJCQllbG1lbnVzLnB1c2gobnVsbCk7CisgICAgICAKKyAgICAgIGlmKHR5cGVvZiBjb25maWcuYnRuTGlzdFsiVE8tdGFibGUtcHJvcCJdICE9ICd1bmRlZmluZWQnKQorICAgICAgeworICAgICAgICAgICAgIGVsbWVudXMucHVzaChbIFhpbmhhLl9sYygiX1RhYmxlIFByb3BlcnRpZXMuLi4iLCAiQ29udGV4dE1lbnUiKSwKKwkJCQkgICAgICAgZnVuY3Rpb24oKSB7IHRhYmxlT3BlcmF0aW9uKCJUTy10YWJsZS1wcm9wIik7IH0sCisJCQkJICAgICAgIFhpbmhhLl9sYygiU2hvdyB0aGUgVGFibGUgUHJvcGVydGllcyBkaWFsb2ciLCAiQ29udGV4dE1lbnUiKSwKKwkJCQkgICAgICAgY29uZmlnLmJ0bkxpc3RbIlRPLXRhYmxlLXByb3AiXVsxXSBdKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYodHlwZW9mIGNvbmZpZy5idG5MaXN0WyJUTy1jb2wtaW5zZXJ0LWJlZm9yZSJdICE9ICd1bmRlZmluZWQnKQorICAgICAgeworICAgICAgICAgICAgIGVsbWVudXMucHVzaChbIFhpbmhhLl9sYygiSW5zZXJ0IF9Db2x1bW4gQmVmb3JlIiwgIkNvbnRleHRNZW51IiksCisJCQkJICAgICAgIGZ1bmN0aW9uKCkgeyB0YWJsZU9wZXJhdGlvbigiVE8tY29sLWluc2VydC1iZWZvcmUiKTsgfSwKKwkJCQkgICAgICAgWGluaGEuX2xjKCJJbnNlcnQgYSBuZXcgY29sdW1uIGJlZm9yZSB0aGUgY3VycmVudCBvbmUiLCAiQ29udGV4dE1lbnUiKSwKKwkJCQkgICAgICAgY29uZmlnLmJ0bkxpc3RbIlRPLWNvbC1pbnNlcnQtYmVmb3JlIl1bMV0gXSk7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmKHR5cGVvZiBjb25maWcuYnRuTGlzdFsiVE8tY29sLWluc2VydC1hZnRlciJdICE9ICd1bmRlZmluZWQnKQorICAgICAgeworICAgICAgICAgICAgIGVsbWVudXMucHVzaChbIFhpbmhhLl9sYygiSW5zZXJ0IENfb2x1bW4gQWZ0ZXIiLCAiQ29udGV4dE1lbnUiKSwKKwkJCQkgICAgICAgZnVuY3Rpb24oKSB7IHRhYmxlT3BlcmF0aW9uKCJUTy1jb2wtaW5zZXJ0LWFmdGVyIik7IH0sCisJCQkJICAgICAgIFhpbmhhLl9sYygiSW5zZXJ0IGEgbmV3IGNvbHVtbiBhZnRlciB0aGUgY3VycmVudCBvbmUiLCAiQ29udGV4dE1lbnUiKSwKKwkJCQkgICAgICAgY29uZmlnLmJ0bkxpc3RbIlRPLWNvbC1pbnNlcnQtYWZ0ZXIiXVsxXSBdKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYodHlwZW9mIGNvbmZpZy5idG5MaXN0WyJUTy1jb2wtZGVsZXRlIl0gIT0gJ3VuZGVmaW5lZCcpCisgICAgICB7CisgICAgICAgICAgICAgZWxtZW51cy5wdXNoKFsgWGluaGEuX2xjKCJEZV9sZXRlIENvbHVtbiIsICJDb250ZXh0TWVudSIpLAorCQkJCSAgICAgICBmdW5jdGlvbigpIHsgdGFibGVPcGVyYXRpb24oIlRPLWNvbC1kZWxldGUiKTsgfSwKKwkJCQkgICAgICAgWGluaGEuX2xjKCJEZWxldGUgdGhlIGN1cnJlbnQgY29sdW1uIiwgIkNvbnRleHRNZW51IiksCisJCQkJICAgICAgIGNvbmZpZy5idG5MaXN0WyJUTy1jb2wtZGVsZXRlIl1bMV0gXQorCQkJCSk7CisgICAgICB9CisJCQlicmVhazsKKwkJICAgIGNhc2UgImJvZHkiOgorCQkJZWxtZW51cy5wdXNoKG51bGwsCisJCQkJICAgICBbIFhpbmhhLl9sYygiSnVzdGlmeSBMZWZ0IiwgIkNvbnRleHRNZW51IiksCisJCQkJICAgICAgIGZ1bmN0aW9uKCkgeyBlZGl0b3IuZXhlY0NvbW1hbmQoImp1c3RpZnlsZWZ0Iik7IH0sIG51bGwsCisJCQkJICAgICAgIGNvbmZpZy5idG5MaXN0WyJqdXN0aWZ5bGVmdCJdWzFdIF0sCisJCQkJICAgICBbIFhpbmhhLl9sYygiSnVzdGlmeSBDZW50ZXIiLCAiQ29udGV4dE1lbnUiKSwKKwkJCQkgICAgICAgZnVuY3Rpb24oKSB7IGVkaXRvci5leGVjQ29tbWFuZCgianVzdGlmeWNlbnRlciIpOyB9LCBudWxsLAorCQkJCSAgICAgICBjb25maWcuYnRuTGlzdFsianVzdGlmeWNlbnRlciJdWzFdIF0sCisJCQkJICAgICBbIFhpbmhhLl9sYygiSnVzdGlmeSBSaWdodCIsICJDb250ZXh0TWVudSIpLAorCQkJCSAgICAgICBmdW5jdGlvbigpIHsgZWRpdG9yLmV4ZWNDb21tYW5kKCJqdXN0aWZ5cmlnaHQiKTsgfSwgbnVsbCwKKwkJCQkgICAgICAgY29uZmlnLmJ0bkxpc3RbImp1c3RpZnlyaWdodCJdWzFdIF0sCisJCQkJICAgICBbIFhpbmhhLl9sYygiSnVzdGlmeSBGdWxsIiwgIkNvbnRleHRNZW51IiksCisJCQkJICAgICAgIGZ1bmN0aW9uKCkgeyBlZGl0b3IuZXhlY0NvbW1hbmQoImp1c3RpZnlmdWxsIik7IH0sIG51bGwsCisJCQkJICAgICAgIGNvbmZpZy5idG5MaXN0WyJqdXN0aWZ5ZnVsbCJdWzFdIF0KKwkJCQkpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvLyBJZiB0aGVyZSBpcyBhIHNlbGVjdGlvbiwgYW5kIG5vdCBhIGxpbmssIGltYWdlLCBvciBtdWx0aXBsZSB3b3JkcworCS8vICB0aGVuIHRoaXMgbWF5IGJlIGEgbWlzc3BlbGxlZCB3b3JkLCBjYW5jZWwgdGhlIGNvbnRleHQgbWVudSBzbyB0aGF0CisJLy8gIHRoZSBicm93c2VyJ3MgZGVmYXVsdCB3aWxsIGFwcGVhciBhbmQgb2ZmZXIgc3VnZ2VzdGlvbnMKKwlpZiAoc2VsZWN0aW9uICYmICFsaW5rICYmICFpbWcgJiYgIWVkaXRvci5nZXRTZWxlY3RlZEhUTUwoKS5yZXBsYWNlKC88W14+XSs+LywgJycpLm1hdGNoKC9ccy8pKQorICB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisJCisJaWYgKHNlbGVjdGlvbiAmJiAhbGluaykKKwkJbWVudS5wdXNoKG51bGwsIFsgWGluaGEuX2xjKCJNYWtlIGxpbl9rLi4uIiwgIkNvbnRleHRNZW51IiksCisgICAgICAgICAgIGZ1bmN0aW9uKCkgeyBlZGl0b3IuY29uZmlnLmJ0bkxpc3RbJ2NyZWF0ZWxpbmsnXVszXShlZGl0b3IpOyB9LAorCQkJCSAgWGluaGEuX2xjKCJDcmVhdGUgYSBsaW5rIiwgIkNvbnRleHRNZW51IiksCisJCQkJICBjb25maWcuYnRuTGlzdFsiY3JlYXRlbGluayJdWzFdIF0pOworCisgIGlmKGVkaXRvci5jb25maWcuQ29udGV4dE1lbnUuY3VzdG9tSG9va3NbY3VycmVudFRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCldKSAKKyAgeyAKKyAgICB2YXIgaXRlbXMgPSBlZGl0b3IuY29uZmlnLkNvbnRleHRNZW51LmN1c3RvbUhvb2tzW2N1cnJlbnRUYXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpXTsgCisgICAgCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7ICsraSkKKyAgICB7CisgICAgICBtZW51LnB1c2goaXRlbXNbaV0pOyAKKyAgICB9CisgIH0KKworCWZvciAodmFyIGkgPSAwOyBpIDwgZWxtZW51cy5sZW5ndGg7ICsraSkKKwkJbWVudS5wdXNoKGVsbWVudXNbaV0pOworCisJaWYgKCEvaHRtbHxib2R5L2kudGVzdChjdXJyZW50VGFyZ2V0LnRhZ05hbWUpKQorCQltZW51LnB1c2gobnVsbCwKKwkJCSAgWyBYaW5oYS5fbGMoIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiIsICdDb250ZXh0TWVudScsIHtlbGVtOiAiJmx0OyIgKyBjdXJyZW50VGFyZ2V0LnRhZ05hbWUgKyAiJmd0OyJ9KSwKKwkJCSAgICBmdW5jdGlvbigpIHsKKwkJCQkgICAgaWYgKGNvbmZpcm0oWGluaGEuX2xjKCJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGVsZW1lbnQ6IiwgIkNvbnRleHRNZW51IikgKyAiICIgKworCQkJCQkJY3VycmVudFRhcmdldC50YWdOYW1lKSkgeworCQkJCQkgICAgdmFyIGVsID0gY3VycmVudFRhcmdldDsKKwkJCQkJICAgIHZhciBwID0gZWwucGFyZW50Tm9kZTsKKwkJCQkJICAgIHAucmVtb3ZlQ2hpbGQoZWwpOworCQkJCQkgICAgaWYgKFhpbmhhLmlzX2dlY2tvKSB7CisJCQkJCQkgICAgaWYgKHAudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICJ0ZCIgJiYgIXAuaGFzQ2hpbGROb2RlcygpKQorCQkJCQkJCSAgICBwLmFwcGVuZENoaWxkKGVkaXRvci5fZG9jLmNyZWF0ZUVsZW1lbnQoImJyIikpOworCQkJCQkJICAgIGVkaXRvci5mb3JjZVJlZHJhdygpOworCQkJCQkJICAgIGVkaXRvci5mb2N1c0VkaXRvcigpOworCQkJCQkJICAgIGVkaXRvci51cGRhdGVUb29sYmFyKCk7CisJCQkJCQkgICAgaWYgKHRhYmxlKSB7CisJCQkJCQkJICAgIHZhciBzYXZlX2NvbGxhcHNlID0gdGFibGUuc3R5bGUuYm9yZGVyQ29sbGFwc2U7CisJCQkJCQkJICAgIHRhYmxlLnN0eWxlLmJvcmRlckNvbGxhcHNlID0gImNvbGxhcHNlIjsKKwkJCQkJCQkgICAgdGFibGUuc3R5bGUuYm9yZGVyQ29sbGFwc2UgPSAic2VwYXJhdGUiOworCQkJCQkJCSAgICB0YWJsZS5zdHlsZS5ib3JkZXJDb2xsYXBzZSA9IHNhdmVfY29sbGFwc2U7CisJCQkJCQkgICAgfQorCQkJCQkgICAgfQorCQkJCSAgICB9CisJCQkgICAgfSwKKwkJCSAgICBYaW5oYS5fbGMoIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiLCAiQ29udGV4dE1lbnUiKSBdLAorCQkJICBbIFhpbmhhLl9sYygiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiLCAiQ29udGV4dE1lbnUiKSwKKwkJCSAgICBmdW5jdGlvbigpIHsgaW5zZXJ0UGFyYShmYWxzZSk7IH0sCisJCQkgICAgWGluaGEuX2xjKCJJbnNlcnQgYSBwYXJhZ3JhcGggYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUiLCAiQ29udGV4dE1lbnUiKSBdLAorCQkJICBbIFhpbmhhLl9sYygiSW5zZXJ0IHBhcmFncmFwaCBhZnRlciIsICJDb250ZXh0TWVudSIpLAorCQkJICAgIGZ1bmN0aW9uKCkgeyBpbnNlcnRQYXJhKHRydWUpOyB9LAorCQkJICAgIFhpbmhhLl9sYygiSW5zZXJ0IGEgcGFyYWdyYXBoIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUiLCAiQ29udGV4dE1lbnUiKSBdCisJCQkgICk7CisJaWYgKCFtZW51WzBdKSBtZW51LnNoaWZ0KCk7IC8vSWYgdGhlIG1lbnUgYmVnaW5zIHdpdGggYSBzZXBhcmF0b3IsIHJlbW92ZSBpdCBmb3IgY29zbWV0aWNhbCByZWFzb25zCisJcmV0dXJuIG1lbnU7Cit9OworCitDb250ZXh0TWVudS5wcm90b3R5cGUucG9wdXBNZW51ID0gZnVuY3Rpb24oZXYpIHsKKwl2YXIgc2VsZiA9IHRoaXM7CisJaWYgKHRoaXMuY3VycmVudE1lbnUpCisJeworCQl0aGlzLmNsb3NlTWVudSgpOworCX0KKwlmdW5jdGlvbiBnZXRQb3MoZWwpIHsKKwkJdmFyIHIgPSB7IHg6IGVsLm9mZnNldExlZnQsIHk6IGVsLm9mZnNldFRvcCB9OworCQlpZiAoZWwub2Zmc2V0UGFyZW50KSB7CisJCQl2YXIgdG1wID0gZ2V0UG9zKGVsLm9mZnNldFBhcmVudCk7CisJCQlyLnggKz0gdG1wLng7CisJCQlyLnkgKz0gdG1wLnk7CisJCX0KKwkJcmV0dXJuIHI7CisJfQorCWZ1bmN0aW9uIGRvY3VtZW50Q2xpY2soZXYpIHsKKwkJZXYgfHwgKGV2ID0gd2luZG93LmV2ZW50KTsKKwkJaWYgKCFzZWxmLmN1cnJlbnRNZW51KSB7CisJCQlhbGVydChYaW5oYS5fbGMoIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIiwgIkNvbnRleHRNZW51IikpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCXZhciBlbCA9IFhpbmhhLmlzX2llID8gZXYuc3JjRWxlbWVudCA6IGV2LnRhcmdldDsKKwkJZm9yICg7IGVsICE9IG51bGwgJiYgZWwgIT0gc2VsZi5jdXJyZW50TWVudTsgZWwgPSBlbC5wYXJlbnROb2RlKTsKKwkJaWYgKGVsID09IG51bGwpCisJCQlzZWxmLmNsb3NlTWVudSgpOworCQkvL1hpbmhhLl9zdG9wRXZlbnQoZXYpOworCQkvL3JldHVybiBmYWxzZTsKKwl9CisJdmFyIGtleXMgPSBbXTsKKwlmdW5jdGlvbiBrZXlQcmVzcyhldikgeworCQlldiB8fCAoZXYgPSB3aW5kb3cuZXZlbnQpOworCQlYaW5oYS5fc3RvcEV2ZW50KGV2KTsKKwkJaWYgKGV2LmtleUNvZGUgPT0gMjcpIHsKKwkJCXNlbGYuY2xvc2VNZW51KCk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJdmFyIGtleSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoWGluaGEuaXNfaWUgPyBldi5rZXlDb2RlIDogZXYuY2hhckNvZGUpLnRvTG93ZXJDYXNlKCk7CisJCWZvciAodmFyIGkgPSBrZXlzLmxlbmd0aDsgLS1pID49IDA7KSB7CisJCQl2YXIgayA9IGtleXNbaV07CisJCQlpZiAoa1swXS50b0xvd2VyQ2FzZSgpID09IGtleSkKKwkJCQlrWzFdLl9fbXNoLmFjdGl2YXRlKCk7CisJCX0KKwl9CisJc2VsZi5jbG9zZU1lbnUgPSBmdW5jdGlvbigpIHsKKwkJc2VsZi5jdXJyZW50TWVudS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNlbGYuY3VycmVudE1lbnUpOworCQlzZWxmLmN1cnJlbnRNZW51ID0gbnVsbDsKKwkJWGluaGEuX3JlbW92ZUV2ZW50KGRvY3VtZW50LCAibW91c2Vkb3duIiwgZG9jdW1lbnRDbGljayk7CisJCVhpbmhhLl9yZW1vdmVFdmVudChzZWxmLmVkaXRvcmRvYywgIm1vdXNlZG93biIsIGRvY3VtZW50Q2xpY2spOworCQlpZiAoa2V5cy5sZW5ndGggPiAwKQorCQkJWGluaGEuX3JlbW92ZUV2ZW50KHNlbGYuZWRpdG9yZG9jLCAia2V5cHJlc3MiLCBrZXlQcmVzcyk7CisJCWlmIChYaW5oYS5pc19pZSkKKwkJCXNlbGYuaWVQb3B1cC5oaWRlKCk7CisJfQorCXZhciB0YXJnZXQgPSBYaW5oYS5pc19pZSA/IGV2LnNyY0VsZW1lbnQgOiBldi50YXJnZXQ7CisgICAgIHZhciBpZnBvcyA9IGdldFBvcyhzZWxmLmVkaXRvci5faHRtbEFyZWEpOy8vX2lmcmFtZSk7CisJdmFyIHggPSBldi5jbGllbnRYICsgaWZwb3MueDsKKwl2YXIgeSA9IGV2LmNsaWVudFkgKyBpZnBvcy55OworCisJdmFyIGRpdjsKKwl2YXIgZG9jOworCWlmICghWGluaGEuaXNfaWUpIHsKKwkJZG9jID0gZG9jdW1lbnQ7CisJfSBlbHNlIHsKKwkJLy8gSUUgc3RpbmtzCisJCXZhciBwb3B1cCA9IHRoaXMuaWVQb3B1cCA9IHdpbmRvdy5jcmVhdGVQb3B1cCgpOworCQlkb2MgPSBwb3B1cC5kb2N1bWVudDsKKwkJZG9jLm9wZW4oKTsKKwkJZG9jLndyaXRlKCI8aHRtbD48aGVhZD48c3R5bGUgdHlwZT0ndGV4dC9jc3MnPkBpbXBvcnQgdXJsKCIgKyBYaW5oYS5nZXRQbHVnaW5EaXIoJ0NvbnRleHRNZW51JykgKyAiL21lbnUuY3NzKTsgaHRtbCwgYm9keSB7IHBhZGRpbmc6IDBweDsgbWFyZ2luOiAwcHg7IG92ZXJmbG93OiBoaWRkZW47IGJvcmRlcjogMHB4OyB9PC9zdHlsZT48L2hlYWQ+PGJvZHkgdW5zZWxlY3RhYmxlPSd5ZXMnPjwvYm9keT48L2h0bWw+Iik7CisJCWRvYy5jbG9zZSgpOworCX0KKwlkaXYgPSBkb2MuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisJaWYgKFhpbmhhLmlzX2llKQorCQlkaXYudW5zZWxlY3RhYmxlID0gIm9uIjsKKwlkaXYub25jb250ZXh0bWVudSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH07CisJZGl2LmNsYXNzTmFtZSA9ICJodG1sYXJlYS1jb250ZXh0LW1lbnUiOworCWlmICghWGluaGEuaXNfaWUpIHsKKwkgICAgZGl2LnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKKwkgICAgZGl2LnN0eWxlLmxlZnQgPSBkaXYuc3R5bGUudG9wID0gIi0yMDBweCI7CisJfQorCWRvYy5ib2R5LmFwcGVuZENoaWxkKGRpdik7CisKKwl2YXIgdGFibGUgPSBkb2MuY3JlYXRlRWxlbWVudCgidGFibGUiKTsKKwlkaXYuYXBwZW5kQ2hpbGQodGFibGUpOworCXRhYmxlLmNlbGxTcGFjaW5nID0gMDsKKwl0YWJsZS5jZWxsUGFkZGluZyA9IDA7CisJdmFyIHBhcmVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpOworCXRhYmxlLmFwcGVuZENoaWxkKHBhcmVudCk7CisKKwl2YXIgb3B0aW9ucyA9IHRoaXMuZ2V0Q29udGV4dE1lbnUodGFyZ2V0KTsKKyAgaWYob3B0aW9ucyA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTsgLy8gTm8gY29udGV4dCBtZW51CisgIAorCWZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7ICsraSkgeworCQl2YXIgb3B0aW9uID0gb3B0aW9uc1tpXTsKKwkJdmFyIGl0ZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgidHIiKTsKKwkJcGFyZW50LmFwcGVuZENoaWxkKGl0ZW0pOworCQlpZiAoWGluaGEuaXNfaWUpCisJCQlpdGVtLnVuc2VsZWN0YWJsZSA9ICJvbiI7CisJCWVsc2UgaXRlbS5vbm1vdXNlZG93biA9IGZ1bmN0aW9uKGV2KSB7CisJCQlYaW5oYS5fc3RvcEV2ZW50KGV2KTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfTsKKwkJaWYgKCFvcHRpb24pIHsKKwkJCWl0ZW0uY2xhc3NOYW1lID0gInNlcGFyYXRvciI7CisJCQl2YXIgdGQgPSBkb2MuY3JlYXRlRWxlbWVudCgidGQiKTsKKwkJCXRkLmNsYXNzTmFtZSA9ICJpY29uIjsKKwkJCXZhciBJRV9JU19BX0ZVQ0tJTkdfU0hJVCA9ICc+JzsKKwkJCWlmIChYaW5oYS5pc19pZSkgeworCQkJCXRkLnVuc2VsZWN0YWJsZSA9ICJvbiI7CisJCQkJSUVfSVNfQV9GVUNLSU5HX1NISVQgPSAiIHVuc2VsZWN0YWJsZT0nb24nIHN0eWxlPSdoZWlnaHQ9MXB4Jz4mbmJzcDsiOworCQkJfQorCQkJdGQuaW5uZXJIVE1MID0gIjxkaXYiICsgSUVfSVNfQV9GVUNLSU5HX1NISVQgKyAiPC9kaXY+IjsKKwkJCXZhciB0ZDEgPSB0ZC5jbG9uZU5vZGUodHJ1ZSk7CisJCQl0ZDEuY2xhc3NOYW1lID0gImxhYmVsIjsKKwkJCWl0ZW0uYXBwZW5kQ2hpbGQodGQpOworCQkJaXRlbS5hcHBlbmRDaGlsZCh0ZDEpOworCQl9IGVsc2UgeworCQkJdmFyIGxhYmVsID0gb3B0aW9uWzBdOworCQkJaXRlbS5jbGFzc05hbWUgPSAiaXRlbSI7CisJCQlpdGVtLl9fbXNoID0geworCQkJCWl0ZW06IGl0ZW0sCisJCQkJbGFiZWw6IGxhYmVsLAorCQkJCWFjdGlvbjogb3B0aW9uWzFdLAorCQkJCXRvb2x0aXA6IG9wdGlvblsyXSB8fCBudWxsLAorCQkJCWljb246IG9wdGlvblszXSB8fCBudWxsLAorCQkJCWFjdGl2YXRlOiBmdW5jdGlvbigpIHsKKwkJCQkJc2VsZi5jbG9zZU1lbnUoKTsKKwkJCQkJc2VsZi5lZGl0b3IuZm9jdXNFZGl0b3IoKTsKKwkJCQkJdGhpcy5hY3Rpb24oKTsKKwkJCQl9CisJCQl9OworCQkJbGFiZWwgPSBsYWJlbC5yZXBsYWNlKC9fKFthLXpBLVowLTldKS8sICI8dT4kMTwvdT4iKTsKKwkJCWlmIChsYWJlbCAhPSBvcHRpb25bMF0pCisJCQkJa2V5cy5wdXNoKFsgUmVnRXhwLiQxLCBpdGVtIF0pOworCQkJbGFiZWwgPSBsYWJlbC5yZXBsYWNlKC9fXy8sICJfIik7CisJCQl2YXIgdGQxID0gZG9jLmNyZWF0ZUVsZW1lbnQoInRkIik7CisJCQlpZiAoWGluaGEuaXNfaWUpCisJCQkJdGQxLnVuc2VsZWN0YWJsZSA9ICJvbiI7CisJCQlpdGVtLmFwcGVuZENoaWxkKHRkMSk7CisJCQl0ZDEuY2xhc3NOYW1lID0gImljb24iOworCQkJaWYgKGl0ZW0uX19tc2guaWNvbikKKyAgICAgIHsKKyAgICAgICAgdmFyIHQgPSBYaW5oYS5tYWtlQnRuSW1nKGl0ZW0uX19tc2guaWNvbiwgZG9jKTsKKyAgICAgICAgdGQxLmFwcGVuZENoaWxkKHQpOworICAgICAgfQorICAgICAgdmFyIHRkMiA9IGRvYy5jcmVhdGVFbGVtZW50KCJ0ZCIpOworCQkJaWYgKFhpbmhhLmlzX2llKQorCQkJCXRkMi51bnNlbGVjdGFibGUgPSAib24iOworCQkJaXRlbS5hcHBlbmRDaGlsZCh0ZDIpOworCQkJdGQyLmNsYXNzTmFtZSA9ICJsYWJlbCI7CisJCQl0ZDIuaW5uZXJIVE1MID0gbGFiZWw7CisJCQlpdGVtLm9ubW91c2VvdmVyID0gZnVuY3Rpb24oKSB7CisJCQkJdGhpcy5jbGFzc05hbWUgKz0gIiBob3ZlciI7CisJCQkJc2VsZi5lZGl0b3IuX3N0YXR1c0JhclRyZWUuaW5uZXJIVE1MID0gdGhpcy5fX21zaC50b29sdGlwIHx8ICcmbmJzcDsnOworCQkJfTsKKwkJCWl0ZW0ub25tb3VzZW91dCA9IGZ1bmN0aW9uKCkgeyB0aGlzLmNsYXNzTmFtZSA9ICJpdGVtIjsgfTsKKwkJCWl0ZW0ub25jb250ZXh0bWVudSA9IGZ1bmN0aW9uKGV2KSB7CisJCQkJdGhpcy5fX21zaC5hY3RpdmF0ZSgpOworCQkJCWlmICghWGluaGEuaXNfaWUpCisJCQkJCVhpbmhhLl9zdG9wRXZlbnQoZXYpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX07CisJCQlpdGVtLm9ubW91c2V1cCA9IGZ1bmN0aW9uKGV2KSB7CisJCQkJdmFyIHRpbWVTdGFtcCA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CisJCQkJaWYgKHRpbWVTdGFtcCAtIHNlbGYudGltZVN0YW1wID4gNTAwKQorCQkJCQl0aGlzLl9fbXNoLmFjdGl2YXRlKCk7CisJCQkJaWYgKCFYaW5oYS5pc19pZSkKKwkJCQkJWGluaGEuX3N0b3BFdmVudChldik7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfTsKKwkJCS8vaWYgKHR5cGVvZiBvcHRpb25bMl0gPT0gInN0cmluZyIpCisJCQkvL2l0ZW0udGl0bGUgPSBvcHRpb25bMl07CisJCX0KKwl9CisKKwlpZiAoIVhpbmhhLmlzX2llKSB7CisJICAgIC8qIGtlZXAgdGhlbiBtZW51IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaWVudCB3aW5kb3cgYm91bmRhcmllcyAqLyAKKwkKKwkgICAgLyoJcHJvdmlkZSBhIHZpcnR1YWwgbWFyZ2luIHRvIGxlYXZlIGEgc3dvb3NoIG9mIGFpciBiZXR3ZWVuIHRoZQorCQltZW55IGFuZCB0aGUgd2luZG93IGVkZ2UuIFRoaXMgc2hvdWxkIHByb2JhYmx5IGdvIGludG8gdGhlIG1lbnUKKwkJY29udGFpbmVyIGNzcyBhcyBtYXJnaW4gMTBweCBpbnN0ZWFkLi4uCisJICAgICAqLworCSAgICB2YXIgbWFyZ2luID0gMTA7CisJICAgIAorCSAgICBpZiAoeSArIGRpdi5vZmZzZXRIZWlnaHQgKyBtYXJnaW4gPiB3aW5kb3cuaW5uZXJIZWlnaHQpCisJCXkgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSBkaXYub2Zmc2V0SGVpZ2h0IC0gbWFyZ2luOworCSAgICBpZiAoeCArIGRpdi5vZmZzZXRXaWR0aCArIG1hcmdpbiA+IHdpbmRvdy5pbm5lcldpZHRoKQorCQl4ID0gd2luZG93LmlubmVyV2lkdGggLSBkaXYub2Zmc2V0V2lkdGggLSBtYXJnaW47CisJICAgIAorCSAgICBkaXYuc3R5bGUubGVmdCA9IHggKyAicHgiOworCSAgICBkaXYuc3R5bGUudG9wID0geSArICJweCI7CisJICAgIGRpdi5zdHlsZS52aXNpYmlsaXR5ID0gInZpc2libGUiOworCisJfSBlbHNlIHsKKyAgICAvLyBUbyBnZXQgdGhlIHNpemUgd2UgbmVlZCB0byBkaXNwbGF5IHRoZSBwb3B1cCB3aXRoIHNvbWUgd2lkdGgvaGVpZ2h0CisgICAgLy8gdGhlbiB3ZSBjYW4gZ2V0IHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgZGl2IGFuZCByZWRpc3BsYXkgdGhlIHBvcHVwIGF0IHRoZQorICAgIC8vIGNvcnJlY3QgZGltZW5zaW9ucy4KKyAgICB0aGlzLmllUG9wdXAuc2hvdyhldi5zY3JlZW5YLCBldi5zY3JlZW5ZLCAzMDAsNTApOworCQl2YXIgdyA9IGRpdi5vZmZzZXRXaWR0aDsKKwkJdmFyIGggPSBkaXYub2Zmc2V0SGVpZ2h0OworCQl0aGlzLmllUG9wdXAuc2hvdyhldi5zY3JlZW5YLCBldi5zY3JlZW5ZLCB3LCBoKTsKKwl9CisKKwl0aGlzLmN1cnJlbnRNZW51ID0gZGl2OworCXRoaXMudGltZVN0YW1wID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKKworCVhpbmhhLl9hZGRFdmVudChkb2N1bWVudCwgIm1vdXNlZG93biIsIGRvY3VtZW50Q2xpY2spOworCVhpbmhhLl9hZGRFdmVudCh0aGlzLmVkaXRvcmRvYywgIm1vdXNlZG93biIsIGRvY3VtZW50Q2xpY2spOworCWlmIChrZXlzLmxlbmd0aCA+IDApCisJCVhpbmhhLl9hZGRFdmVudCh0aGlzLmVkaXRvcmRvYywgImtleXByZXNzIiwga2V5UHJlc3MpOworCisJWGluaGEuX3N0b3BFdmVudChldik7CisJcmV0dXJuIGZhbHNlOworfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvYjUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvYjUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RiMDM2MgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9iNS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImI1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkp1c3RpZnkgQ2VudGVyIjogIuS9jee9ruWxheS4rSIsCisgICAgIkp1c3RpZnkgRnVsbCI6ICLkvY3nva7lt6blj7PlubPnrYkiLAorICAgICJKdXN0aWZ5IExlZnQiOiAi5L2N572u6Z2g5bemIiwKKyAgICAiSnVzdGlmeSBSaWdodCI6ICLkvY3nva7pnaDlj7MiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9jaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9jaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmQ1YTA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2NoLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAi5bGF5LitIiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIuaVtOm9iiIsCisgICAgIkp1c3RpZnkgTGVmdCI6ICLpnaDlt6YiLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogIumdoOWPsyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2N6LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2N6LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZTg1ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvY3ouanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjeiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJKdXN0aWZ5IENlbnRlciI6ICJOYSBzdMWZZWQiLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAiWmFyb3ZuYXQgZG8gc3RyYW4iLAorICAgICJKdXN0aWZ5IExlZnQiOiAiWmFyb3ZuYXQgZG9sZXZhIiwKKyAgICAiSnVzdGlmeSBSaWdodCI6ICJaYXJvdm5hdCBkb3ByYXZhIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvZGEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvZGEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY3NTEwMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9kYS5qcwpAQCAtMCwwICsxLDE5IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNvcHkiOiAiS29waWVyIiwKKyAgICAiQ3V0IjogIktsaXAiLAorICAgICJKdXN0aWZ5IENlbnRlciI6ICJDZW50cmVyIiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIkxpZ2UgbWFyZ2VuZXIiLAorICAgICJKdXN0aWZ5IExlZnQiOiAiVmVuc3RyZWp1c3RlciIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAiSMO4anJlanVzdGVyIiwKKyAgICAiUGFzdGUiOiAiU8OmdCBpbmQiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjk2NDg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsNTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ19lbGwgUHJvcGVydGllcy4uLiI6ICJaZWxsZW5vcHRpb25lbiIsCisgICAgIkNoZWNfayBMaW5rLi4uIjogIkxpbmsgdGVzdGVuIiwKKyAgICAiQ29weSI6ICJLb3BpZXJlbiIsCisgICAgIkNyZWF0ZSBhIGxpbmsiOiAiTGluayBlcnN0ZWxsZW4iLAorICAgICJDdXJyZW50IFVSTCBpcyI6ICJBa3R1ZWxsZSBVUkwgaXN0IiwKKyAgICAiQ3V0IjogIkF1c3NjaG5laWRlbiIsCisgICAgIkRlX2xldGUgQ29sdW1uIjogIlNwYWx0ZSBsw7ZzY2hlbiIsCisgICAgIkRlbGV0ZSB0aGUgY3VycmVudCBjb2x1bW4iOiAiU3BhbHRlIGzDtnNjaGVuIiwKKyAgICAiRGVsZXRlIHRoZSBjdXJyZW50IHJvdyI6ICJaZWlsZSBsw7ZzY2hlbiIsCisgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIldpZSBzaW5kIFNpZSBkZW5uIGhpZXIgaGluIGdla29tbWVuPyAoUGxlYXNlIHJlcG9ydCEpIiwKKyAgICAiSV9uc2VydCBSb3cgQmVmb3JlIjogIlplaWxlIGVpbmbDvGdlbiB2b3IgUG9zaXRpb24iLAorICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICJaZWlsZSBlaW7DvGdlbiBuYWNoIFBvc2l0aW9uIiwKKyAgICAiSW5zZXJ0IENfb2x1bW4gQWZ0ZXIiOiAiU3BhbHRlIGVpbmbDvGdlbiBuYWNoIFBvc2l0aW9uIiwKKyAgICAiSW5zZXJ0IF9Db2x1bW4gQmVmb3JlIjogIlNwYWx0ZSBlaW5mw7xnZW4gdm9yIFBvc2l0aW9uIiwKKyAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiU3BhbHRlIGVpbmbDvGdlbiBuYWNoIGRlciBha3R1ZWxsZW4gUG9zaXRpb24iLAorICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiU3BhbHRlIGVpbmbDvGdlbiB2b3IgZGVyIGFrdHVlbGxlbiBQb3NpdGlvbiIsCisgICAgIkluc2VydCBhIG5ldyByb3cgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIlplaWxlIGVpbmbDvGdlbiBuYWNoIGRlciBha3R1ZWxsZW4gUG9zaXRpb24iLAorICAgICJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiWmVpbGUgZWluZsO8Z2VuIHZvciBkZXIgYWt0dWVsbGVuIFBvc2l0aW9uIiwKKyAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUiOiAiQWJzYXR6IGVpbmbDvGdlbiBoaW50ZXIgZGVyIGFrdHVlbGxlbiBQb3NpdGlvbiIsCisgICAgIkluc2VydCBhIHBhcmFncmFwaCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZSI6ICJBYnNhdHogZWluZsO8Z2VuIHZvciBkZXIgYWt0dWVsbGVuIFBvc2l0aW9uIiwKKyAgICAiSW5zZXJ0IHBhcmFncmFwaCBhZnRlciI6ICJBYnNhdHogZWluZsO8Z2VuIGhpbnRlciBQb3NpdGlvbiIsCisgICAgIkluc2VydCBwYXJhZ3JhcGggYmVmb3JlIjogIkFic2F0eiBlaW5mw7xnZW4gdm9yIFBvc2l0aW9uIiwKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAiWmVudHJpZXJ0IiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIkJsb2Nrc2F0eiIsCisgICAgIkp1c3RpZnkgTGVmdCI6ICJMaW5rc2LDvG5kaWciLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogIlJlY2h0c2LDvG5kaWciLAorICAgICJMaW5rIHBvaW50cyB0bzoiOiAiTGluayB6ZWlndCBhdWY6IiwKKyAgICAiTWFrZSBsaW5fay4uLiI6ICJMaW5rIGVyc3RlbGxlbiIsCisgICAgIk9wZW5zIHRoaXMgbGluayBpbiBhIG5ldyB3aW5kb3ciOiAiRGllc2VuIExpbmsgaW4gbmV1ZW0gRmVuc3RlciDDtmZmbmVuIiwKKyAgICAiUGFzdGUiOiAiRWluZsO8Z2VuIiwKKyAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBlbGVtZW50OiI6ICJXb2xsZW4gc2llIGRpZXNlcyBFbGVtZW50IHdpcmtsaWNoIGVudGZlcm5lbj8iLAorICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHVubGluayB0aGlzIGVsZW1lbnQuIjogIldvbGxlbiBzaWUgZGllc2VuIExpbmsgd2lya2xpY2ggZW50ZmVybmVuPyIsCisgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICJFbGVtZW50ICRlbGVtIGVudGZlcm5lbi4uLiIsCisgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiRGllc2VzIEVsZW1lbnQgYXVzIGRlbSBEb2t1bWVudCBlbnRmZXJuZW4iLAorICAgICJSb193IFByb3BlcnRpZXMuLi4iOiAiWmVpbGVub3B0aW9uZW4iLAorICAgICJTaG93IHRoZSBUYWJsZSBDZWxsIFByb3BlcnRpZXMgZGlhbG9nIjogIlplbGxlbm9wdGlvbmVuIGFuemVpZ2VuIiwKKyAgICAiU2hvdyB0aGUgVGFibGUgUHJvcGVydGllcyBkaWFsb2ciOiAiVGFiZWxsZW5vcHRpb25lbiBhbnplaWdlbiIsCisgICAgIlNob3cgdGhlIFRhYmxlIFJvdyBQcm9wZXJ0aWVzIGRpYWxvZyI6ICJaZWlsZW5vcHRpb25lbiBhbnplaWdlbiIsCisgICAgIlNob3cgdGhlIGltYWdlIHByb3BlcnRpZXMgZGlhbG9nIjogIkZlbnN0ZXIgZsO8ciBkaWUgQmlsZG9wdGlvbmVuIGFuemVpZ2VuIiwKKyAgICAiVW5saW5rIHRoZSBjdXJyZW50IGVsZW1lbnQiOiAiTGluayBhdWYgRWxlbWVudCBlbnRmZXJuZW4iLAorICAgICJfRGVsZXRlIFJvdyI6ICJaZWlsZSBsw7ZzY2hlbiIsCisgICAgIl9JbWFnZSBQcm9wZXJ0aWVzLi4uIjogIkVpZ2Vuc2NoYWZ0ZW4iLAorICAgICJfTW9kaWZ5IExpbmsuLi4iOiAiTGluayDDpG5kZXJuIiwKKyAgICAiX1JlbW92ZSBMaW5rLi4uIjogIkxpbmsgZW50ZmVybmVuIiwKKyAgICAiX1RhYmxlIFByb3BlcnRpZXMuLi4iOiAiVGFiZWxsZW5vcHRpb25lbiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2VlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2VlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZDViMTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvZWUuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJKdXN0aWZ5IENlbnRlciI6ICJKb29uZGEga2Vza2VsZSIsCisgICAgIkp1c3RpZnkgRnVsbCI6ICJSw7bDtnBqb29uZGEiLAorICAgICJKdXN0aWZ5IExlZnQiOiAiSm9vbmRhIHZhc2FrdWxlIiwKKyAgICAiSnVzdGlmeSBSaWdodCI6ICJKb29uZGEgcGFyZW1hbGUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9lbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9lbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWEwODllCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2VsLmpzCkBAIC0wLDAgKzEsNjMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ19lbGwgUHJvcGVydGllcy4uLiI6ICLOmc60zrnPjM+EzrfPhM61z4IgzrrOtc67zrnOv8+NLi4uIiwKKyAgICAiQ2hlY19rIExpbmsuLi4iOiAizojOu861zrPPh86/z4Igz4PPhc69zrTOrc+DzrzPic69Li4uIiwKKyAgICAiQ29weSI6ICLOkc69z4TOuc6zz4HOsc+Gzq4iLAorICAgICJDcmVhdGUgYSBsaW5rIjogIs6UzrfOvM65zr/Phc+BzrPOr86xIM+Dz4XOvc60zq3Pg868zr/PhSIsCisgICAgIkN1cnJlbnQgVVJMIGlzIjogIs6kzr8gz4TPgc6tz4fPic69IFVSTCDOtc6vzr3Osc65IiwKKyAgICAiQ3V0IjogIs6Rz4DOv866zr/PgM6uIiwKKyAgICAiRGVfbGV0ZSBDb2x1bW4iOiAizpTOuc6xzrPPgc6xz4bOriDPg8+Ezq7Ou863z4IiLAorICAgICJEZWxldGUgdGhlIGN1cnJlbnQgY29sdW1uIjogIs6UzrnOsc6zz4HOsc+Gzq4gzrXPgM65zrvOtc6zzrzOrc69zrfPgiDPg8+Ezq7Ou863z4IiLAorICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIs6UzrnOsc6zz4HOsc+Gzq4gzrXPgM65zrvOtc6zzrzOrc69zrfPgiDOs8+BzrHOvM68zq7PgiIsCisgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIs6gz47PgiDOrs+BzrjOsc+EzrUgzrzOrc+Hz4HOuSDOtc60z447ICjOoM6xz4HOsc66zrHOu86/z43OvM61IM6xzr3Osc+Gzq3Pgc61z4TOtSDPhM6/ISkiLAorICAgICJJX25zZXJ0IFJvdyBCZWZvcmUiOiAizpXOuc+DzrHOs8+JzrPOriDOs8+BzrHOvM68zq7PgiDPgM+BzrnOvSIsCisgICAgIkluX3NlcnQgUm93IEFmdGVyIjogIs6VzrnPg86xzrPPic6zzq4gzrPPgc6xzrzOvM6uz4IgzrzOtc+EzqwiLAorICAgICJJbnNlcnQgQ19vbHVtbiBBZnRlciI6ICLOlc65z4POsc6zz4nOs86uIM+Dz4TOrs67zrfPgiDOvM61z4TOrCIsCisgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICLOlc65z4POsc6zz4nOs86uIM+Dz4TOrs67zrfPgiDPgM+BzrnOvSIsCisgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIs6VzrnPg86xzrPPic6zzq4gzr3Orc6xz4Igz4PPhM6uzrvOt8+CIM68zrXPhM6sIM+EzrfOvSDOtc+AzrnOu861zrPOvM6tzr3OtyIsCisgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICLOlc65z4POsc6zz4nOs86uIM69zq3Osc+CIM+Dz4TOrs67zrfPgiDPgM+BzrnOvSDPhM63zr0gzrXPgM65zrvOtc6zzrzOrc69zrciLAorICAgICJJbnNlcnQgYSBuZXcgcm93IGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICLOlc65z4POsc6zz4nOs86uIM68zrnOsc+CIM69zq3Osc+CIM6zz4HOsc68zrzOrs+CIM68zrXPhM6sIM+EzrfOvSDOtc+AzrnOu861zrPOvM6tzr3OtyIsCisgICAgIkluc2VydCBhIG5ldyByb3cgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICLOlc65z4POsc6zz4nOs86uIM68zrnOsc+CIM69zq3Osc+CIM6zz4HOsc68zrzOrs+CIM+Az4HOuc69IM+EzrfOvSDOtc+AzrnOu861zrPOvM6tzr3OtyIsCisgICAgIkp1c3RpZnkgQ2VudGVyIjogIs6jz4TOv86vz4fOt8+DzrcgzprOrc69z4TPgc6/IiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIs6gzrvOrs+BzrfPgiDOo8+Ezr/Or8+HzrfPg863IiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogIs6jz4TOv86vz4fOt8+DzrcgzpHPgc65z4PPhM61z4HOrCIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAizqPPhM6/zq/Ph863z4POtyDOlM61zr7Ouc6sIiwKKyAgICAiTGluayBwb2ludHMgdG86IjogIs6kzr8gz4TPgc6tz4fPic69IFVSTCDOtc6vzr3Osc65IiwKKyAgICAiTWFrZSBsaW5fay4uLiI6ICLOlM63zrzOuc6/z4XPgc6zzq/OsSDPg8+Fzr3OtM6tz4POvM6/z4UuLi4iLAorICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIs6Rzr3Ov86vzrPOtc65IM6xz4XPhM+MIM+Ezr/OvSDPg8+Nzr3OtM61z4POvM6/IM+DzrUgzq3Ovc6xIM69zq3OvyDPgM6xz4HOrM64z4XPgc6/IiwKKyAgICAiUGFzdGUiOiAizpXPgM65zrrPjM67zrvOt8+DzrciLAorICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHVubGluayB0aGlzIGVsZW1lbnQuIjogIs6Vzq/Pg8+EzrUgzrLOrc6yzrHOuc6/z4Igz4DPic+CIM64zq3Ou861z4TOtSDOvc6xIM6xz4bOsc65z4HOrc+DzrXPhM61IM+Ezr/OvSDPg8+Nzr3OtM61z4POvM6/IM6xz4DPjCDOsc+Fz4TPjCDPhM6/IM+Dz4TOv865z4fOtc6vzr86IiwKKyAgICAiUm9fdyBQcm9wZXJ0aWVzLi4uIjogIs6ZzrTOuc+Mz4TOt8+EzrXPgiDOs8+BzrHOvM68zq7Pgi4uLiIsCisgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAizpnOtM65z4zPhM63z4TOtc+CIM66zrXOu865zr/PjS4uLiIsCisgICAgIlNob3cgdGhlIFRhYmxlIFByb3BlcnRpZXMgZGlhbG9nIjogIs6VzrzPhs6szr3Ouc+DzrcgzrTOuc6xzrvPjM6zzr/PhSDOvM61IM+EzrnPgiDOmc60zrnPjM+EzrfPhM61z4IgzqDOr869zrHOus6xIiwKKyAgICAiU2hvdyB0aGUgVGFibGUgUm93IFByb3BlcnRpZXMgZGlhbG9nIjogIs6ZzrTOuc+Mz4TOt8+EzrXPgiDOs8+BzrHOvM68zq7Pgi4uLiIsCisgICAgIlNob3cgdGhlIGltYWdlIHByb3BlcnRpZXMgZGlhbG9nIjogIs6ZzrTOuc+Mz4TOt8+EzrXPgiDOlc65zrrPjM69zrHPgi4uLiIsCisgICAgIlVubGluayB0aGUgY3VycmVudCBlbGVtZW50IjogIs6Rz4bOsc6vz4HOtc+Dzrcgz4PPhc69zrTOrc+DzrzOv8+FIM6xz4DPjCDPhM6/IM+AzrHPgc+Ozr0gz4PPhM6/zrnPh861zq/OvyIsCisgICAgIl9EZWxldGUgUm93IjogIs6UzrnOsc6zz4HOsc+Gzq4gzrPPgc6xzrzOvM6uz4IiLAorICAgICJfSW1hZ2UgUHJvcGVydGllcy4uLiI6ICLOmc60zrnPjM+EzrfPhM61z4IgzpXOuc66z4zOvc6xz4IuLi4iLAorICAgICJfTW9kaWZ5IExpbmsuLi4iOiAizqTPgc6/z4DOv8+Azr/Or863z4POtyDPg8+Fzr3OtM6tz4POvM6/z4UuLi4iLAorICAgICJfUmVtb3ZlIExpbmsuLi4iOiAizpTOuc6xzrPPgc6xz4bOriDPg8+Fzr3OtM6tz4POvM6/z4UuLi4iLAorICAgICJfVGFibGUgUHJvcGVydGllcy4uLiI6ICLOmc60zrnPjM+EzrfPhM61z4Igz4DOr869zrHOus6xLi4uIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiRGVsZXRlIENlbGwiOiAiIiwKKyAgICAgICAgIkluc2VydCBDZWxsIEFmdGVyIjogIiIsCisgICAgICAgICJJbnNlcnQgQ2VsbCBCZWZvcmUiOiAiIiwKKyAgICAgICAgIkluc2VydCBhIHBhcmFncmFwaCBhZnRlciB0aGUgY3VycmVudCBub2RlIjogIiIsCisgICAgICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUiOiAiIiwKKyAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYWZ0ZXIiOiAiIiwKKyAgICAgICAgIkluc2VydCBwYXJhZ3JhcGggYmVmb3JlIjogIiIsCisgICAgICAgICJNZXJnZSBDZWxscyI6ICIiLAorICAgICAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBlbGVtZW50OiI6ICIiLAorICAgICAgICAiUmVtb3ZlIHRoZSAkZWxlbSBFbGVtZW50Li4uIjogIiIsCisgICAgICAgICJSZW1vdmUgdGhpcyBub2RlIGZyb20gdGhlIGRvY3VtZW50IjogIiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWRjYTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2VzLmpzCkBAIC0wLDAgKzEsNjAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXMiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ19lbGwgUHJvcGVydGllcy4uLiI6ICJQX3JvcGllZGFkZXMgZGUgY2VsZGEuLi4iLAorICAgICJDaGVjX2sgTGluay4uLiI6ICJfVmVyaWZpY2FyIGhpcGVydsOtbmN1bG8uLi4iLAorICAgICJDb3B5IjogIkNvcGlhciIsCisgICAgIkNyZWF0ZSBhIGxpbmsiOiAiQ3JlYXIgdW4gaGlwZXJ2w61uY3VsbyIsCisgICAgIkN1cnJlbnQgVVJMIGlzIjogIkxhIFVSTCBhY3R1YWwgZXMiLAorICAgICJDdXQiOiAiQ29ydGFyIiwKKyAgICAiRGVfbGV0ZSBDb2x1bW4iOiAiX1N1cHJpbWlyIGNvbHVtbmEiLAorICAgICJEZWxldGUgdGhlIGN1cnJlbnQgY29sdW1uIjogIlN1cHJpbWlyIGxhIGNvbHVtbmEgYWN0dWFsIiwKKyAgICAiRGVsZXRlIHRoZSBjdXJyZW50IHJvdyI6ICJTdXByaW1pciBsYSBmaWxhIGFjdHVhbCIsCisgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIsK/Q8OzbW8gaGEgbGxlZ2FkbyBhcXXDrT8gKMKhUG9yIGZhdm9yIHJlcG9ydGUgZWwgZXJyb3IhKSIsCisgICAgIklfbnNlcnQgUm93IEJlZm9yZSI6ICJfSW5zZXJ0YXIgZmlsYSBkZWxhbnRlIiwKKyAgICAiSW5fc2VydCBSb3cgQWZ0ZXIiOiAiSV9uc2VydGFyIGZpbGEgZGV0csOhcyIsCisgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIkluc2VydGFyIF9jb2x1bW5hIGRldHLDoXMiLAorICAgICJJbnNlcnQgX0NvbHVtbiBCZWZvcmUiOiAiSW5zZXJ0X2FyIGNvbHVtbmEgZGVsYW50ZSIsCisgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIkluc2VydGFyIHVuYSBjb2x1bW5hIG51ZXZhIGRlc3B1w6lzIGRlIGxhIGFjdHVhbCIsCisgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICJJbnNlcnRhciB1bmEgY29sdW1uYSBudWV2YSBhbnRlcyBkZSBsYSBhY3R1YWwiLAorICAgICJJbnNlcnQgYSBuZXcgcm93IGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICJJbnNlcnRhciB1bmEgZmlsYSBudWV2YSBkZXNwdcOpcyBkZSBsYSBhY3R1YWwiLAorICAgICJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiSW5zZXJ0YXIgdW5hIGZpbGEgbnVldmEgYW50ZXMgZGUgbGEgYWN0dWFsIiwKKyAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUiOiAiSW5zZXJ0YXIgdW4gcMOhcnJhZm8gZGVzcHXDqXMgZGVsIG5vZG8gYWN0dWFsIiwKKyAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGJlZm9yZSB0aGUgY3VycmVudCBub2RlIjogIkluc2VydGFyIHVuIHDDoXJyYWZvIGFudGVzIGRlbCBub2RvIGFjdHVhbCIsCisgICAgIkluc2VydCBwYXJhZ3JhcGggYWZ0ZXIiOiAiSW5zZXJ0YXIgcMOhcnJhZm8gZGV0csOhcyIsCisgICAgIkluc2VydCBwYXJhZ3JhcGggYmVmb3JlIjogIkluc2VydGFyIHDDoXJyYWZvIGRlbGFudGUiLAorICAgICJKdXN0aWZ5IENlbnRlciI6ICJDZW50cmFyIiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIkp1c3RpZmljYXIiLAorICAgICJKdXN0aWZ5IExlZnQiOiAiQWxpbmVhciBhIGxhIGl6cXVpZXJkYSIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAiQWxpbmVhciBhIGxhIGRlcmVjaGEiLAorICAgICJMaW5rIHBvaW50cyB0bzoiOiAiRWwgaGlwZXJ2w61uY3VsbyBhcHVudGEgYToiLAorICAgICJNYWtlIGxpbl9rLi4uIjogIkNvbnZlcnRpciBlbiBfaGlwZXJ2w61uY3Vsby4uLiIsCisgICAgIk9wZW5zIHRoaXMgbGluayBpbiBhIG5ldyB3aW5kb3ciOiAiQWJyZSBlc3RlIGhpcGVydsOtbmN1bG8gZW4gdW5hIHZlbnRhbmEgbnVldmEiLAorICAgICJQYXN0ZSI6ICJQZWdhciIsCisgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgZWxlbWVudDoiOiAiUG9yIGZhdm9yLCBjb25maXJtZSBxdWUgZGVzZWEgc3VwcmltaXIgZXN0ZSBlbGVtZW50bzoiLAorICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHVubGluayB0aGlzIGVsZW1lbnQuIjogIlBvciBmYXZvciwgY29uZmlybWUgcXVlIGRlc2VhIHN1cHJpbWlyIGVsIGhpcGVydsOtbmN1bG8gZGUgZXN0ZSBlbGVtZW50by4iLAorICAgICJSZW1vdmUgdGhlICRlbGVtIEVsZW1lbnQuLi4iOiAiU3VwcmltaXIgZWwgZWxlbWVudG8gJGVsZW0uLi4iLAorICAgICJSZW1vdmUgdGhpcyBub2RlIGZyb20gdGhlIGRvY3VtZW50IjogIlN1cHJpbWlyIGVzdGUgbm9kbyBkZWwgZG9jdW1lbnRvIiwKKyAgICAiUm9fdyBQcm9wZXJ0aWVzLi4uIjogIlByX29waWVkYWRlcyBkZSBsYSBmaWxhLi4uIiwKKyAgICAiU2hvdyB0aGUgVGFibGUgQ2VsbCBQcm9wZXJ0aWVzIGRpYWxvZyI6ICJNb3N0cmFyIGVsIGRpw6Fsb2dvIFByb3BpZWRhZGVzIGRlIGxhIENlbGRhIiwKKyAgICAiU2hvdyB0aGUgVGFibGUgUHJvcGVydGllcyBkaWFsb2ciOiAiTW9zdHJhciBlbCBkacOhbG9nbyBQcm9waWVkYWRlcyBkZSBsYSBUYWJsYSIsCisgICAgIlNob3cgdGhlIFRhYmxlIFJvdyBQcm9wZXJ0aWVzIGRpYWxvZyI6ICJNb3N0cmFyIGVsIGRpw6Fsb2dvIFByb3BpZWRhZGVzIGRlIGxhIEZpbGEiLAorICAgICJTaG93IHRoZSBpbWFnZSBwcm9wZXJ0aWVzIGRpYWxvZyI6ICJNb3N0cmFyIGVsIGRpw6Fsb2dvIGRlIHByb3BpZWRhZGVzIGRlIGltYWdlbiIsCisgICAgIlVubGluayB0aGUgY3VycmVudCBlbGVtZW50IjogIlN1cHJpbWlyIGVsIGhpcGVydsOtbmN1bG8gZGVsIGVsZW1lbnRvIGFjdHVhbCIsCisgICAgIl9EZWxldGUgUm93IjogIlNfdXByaW1pciBmaWxhIiwKKyAgICAiX0ltYWdlIFByb3BlcnRpZXMuLi4iOiAiX1Byb3BpZWRhZGVzIGRlIGltYWdlbi4uLiIsCisgICAgIl9Nb2RpZnkgTGluay4uLiI6ICJfTW9kaWZpY2FyIGhpcGVydsOtbmN1bG8uLi4iLAorICAgICJfUmVtb3ZlIExpbmsuLi4iOiAiX1N1cHJpbWlyIGhpcGVydsOtbmN1bG8uLi4iLAorICAgICJfVGFibGUgUHJvcGVydGllcy4uLiI6ICJQcm9waV9lZGFkZXMgZGUgbGEgdGFibGEuLi4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJNb2RpZnkgVVJMIjogIk1vZGlmaWNhciBVUkwiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvZXUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvZXUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhMTBlZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9ldS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImV1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkp1c3RpZnkgQ2VudGVyIjogIlplbnRyYXR1IiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIkp1c3RpZmlrYXR1IiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogIkV6a2VycmV0YXJhIGxlcnJva2F0dSIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAiRXNrdWluZXRhcmEgbGVycm9rYXR1IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvZmEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvZmEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxMTJjYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9mYS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkp1c3RpZnkgQ2VudGVyIjogItiq2LHYp9iyINiv2LEg2YjYs9i3IiwKKyAgICAiSnVzdGlmeSBGdWxsIjogItiq2LHYp9iyINin2LIg2obZviDZiCDYsdin2LPYqiIsCisgICAgIkp1c3RpZnkgTGVmdCI6ICLYqtix2KfYsiDYp9iyINqG2b4iLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogItiq2LHYp9iyINiv2LEg2LHYp9iz2KoiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9maS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9maS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmY5MTA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2ZpLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmkiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAiS2Vza2l0w6QiLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAiVGFzYWEgbW9sZW1tYXQgcmV1bmF0IiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogIlRhc2FhIHZhc2VtbWF0IHJldW5hdCIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAiVGFzYWEgb2lrZWF0IHJldW5hdCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwM2Y3N2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvZnIuanMKQEAgLTAsMCArMSw2MCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDX2VsbCBQcm9wZXJ0aWVzLi4uIjogIlBfcm9wcmnDqXTDqXMgZGUgbGEgY2VsbHVsZS4uLiIsCisgICAgIkNoZWNfayBMaW5rLi4uIjogIl9Ww6lyaWZpZXIgbGUgbGllbi4uLiIsCisgICAgIkNvcHkiOiAiQ29waWVyIiwKKyAgICAiQ3JlYXRlIGEgbGluayI6ICJDcsOpZXIgdW4gbGllbiIsCisgICAgIkN1cnJlbnQgVVJMIGlzIjogIkwnVVJMIGNvdXJhbnRlIGVzdCIsCisgICAgIkN1dCI6ICJDb3VwZXIiLAorICAgICJEZV9sZXRlIENvbHVtbiI6ICJfU3VwcHJpbWVyIGxhIGNvbG9ubmUiLAorICAgICJEZWxldGUgdGhlIGN1cnJlbnQgY29sdW1uIjogIlN1cHByaW1lciBjZXR0ZSBjb2xvbm5lIiwKKyAgICAiRGVsZXRlIHRoZSBjdXJyZW50IHJvdyI6ICJTdXBwcmltZXIgbGEgcmFuZ8OpZSBjb3VyYW50ZSIsCisgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIkNvbW1lbnQgw6p0ZXMtdm91cyBhcnJpdsOpIGljaSA/IChSZXBvcnRleiBsZSBidWcgU1ZQICEpIiwKKyAgICAiSV9uc2VydCBSb3cgQmVmb3JlIjogIkluc8OpcmVyIHVuZSByYW5nw6llIGFfdmFudCIsCisgICAgIkluX3NlcnQgUm93IEFmdGVyIjogIkluc8Opcl9lciB1bmUgcmFuZ8OpZSBhcHLDqHMiLAorICAgICJJbnNlcnQgQ19vbHVtbiBBZnRlciI6ICJJbnPDqXJlciB1bmUgY29sb25uZSBhcHLDqHMiLAorICAgICJJbnNlcnQgX0NvbHVtbiBCZWZvcmUiOiAiSV9uc8OpcmVyIHVuZSBjb2xvbm5lIGF2YW50IiwKKyAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiSW5zw6lyZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgYXByw6hzIGNlbGxlLWNpIiwKKyAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIkluc8OpcmVyIHVuZSBub3V2ZWxsZSByYW5nw6llIGF2YW50IGNlbGxlLWNpIiwKKyAgICAiSW5zZXJ0IGEgbmV3IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiSW5zw6lyZXIgdW5lIG5vdXZlbGxlIHJhbmfDqWUgYXByw6hzIGNlbGxlLWNpIiwKKyAgICAiSW5zZXJ0IGEgbmV3IHJvdyBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIkluc8OpcmVyIHVuZSBub3V2ZWxsZSByYW5nw6llIGF2YW50IGNlbGxlLWNpIiwKKyAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUiOiAiSW5zw6lyZXIgdW4gcGFyYWdyYXBoZSBhcHLDqHMgbGUgbm9ldWQgY291cmFudCIsCisgICAgIkluc2VydCBhIHBhcmFncmFwaCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZSI6ICJJbnPDqXJlciB1biBwYXJhZ3JhcGhlIGF2YW50IGxlIG5vZXVkIGNvdXJhbnQiLAorICAgICJJbnNlcnQgcGFyYWdyYXBoIGFmdGVyIjogIkluc8OpcmVyIHVuIHBhcmFncmFwaGUgYXByw6hzIiwKKyAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiSW5zw6lyZXIgdW4gcGFyYWdyYXBoZSBhdmFudCIsCisgICAgIkp1c3RpZnkgQ2VudGVyIjogIkFsaWduZXIgYXUgY2VudHJlIiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIkp1c3RpZmllciIsCisgICAgIkp1c3RpZnkgTGVmdCI6ICJBbGlnbmVyIMOgIGdhdWNoZSIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAiQWxpZ25lciDDoCBkcm9pdGUiLAorICAgICJMaW5rIHBvaW50cyB0bzoiOiAiTGUgbGllbiBwb2ludGUgc3VyOiIsCisgICAgIk1ha2UgbGluX2suLi4iOiAiQ29udmVydGlyIGVuIGxpZW4uLi4iLAorICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIk91dnJpciBjZSBsaWVuIGRhbnMgdW5lIG5vdXZlbGxlIGZlbsOqdHJlIiwKKyAgICAiUGFzdGUiOiAiQ29sbGVyIiwKKyAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBlbGVtZW50OiI6ICJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgY2V0IMOpbMOpbWVudDoiLAorICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHVubGluayB0aGlzIGVsZW1lbnQuIjogIlZvdWxlei12b3VzIHZyYWltZW50IGVubGV2ZXIgbGUgbGllbiBwcsOpc2VudCBzdXIgY2V0IMOpbMOpbWVudC4iLAorICAgICJSZW1vdmUgdGhlICRlbGVtIEVsZW1lbnQuLi4iOiAiU3VwcHJpbWVyIMOJbMOpbWVudCAkZWxlbS4uLiIsCisgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiU3VwcHJpbWVyIGNlIG5vZXVkIGR1IGRvY3VtZW50IiwKKyAgICAiUm9fdyBQcm9wZXJ0aWVzLi4uIjogIlByX29wcmnDqXTDqXMgZGUgbGEgcmFuZ8OpZS4uLiIsCisgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAiQWZmaWNoZXIgbGEgYm9pdGUgZGUgcHJvcHJpw6l0w6kgZGVzIGNlbGx1bGVzIiwKKyAgICAiU2hvdyB0aGUgVGFibGUgUHJvcGVydGllcyBkaWFsb2ciOiAiQWZmaWNoZXIgbGEgYm9pdGUgZGUgcHJvcHJpw6l0w6kgZGUgdGFibGVhdSIsCisgICAgIlNob3cgdGhlIFRhYmxlIFJvdyBQcm9wZXJ0aWVzIGRpYWxvZyI6ICJBZmZpY2hlciBsYSBib2l0ZSBkZSBwcm9wcmnDqXTDqSBkZXMgcmFuZ8OpZXMiLAorICAgICJTaG93IHRoZSBpbWFnZSBwcm9wZXJ0aWVzIGRpYWxvZyI6ICJBZmZpY2hlciBsZSBkaWFsb2d1ZSBkZXMgcHJvcHJpw6l0w6lzIGQnaW1hZ2UiLAorICAgICJVbmxpbmsgdGhlIGN1cnJlbnQgZWxlbWVudCI6ICJFbmxldmVyIGxlIGxpZW4gc3VyIGNldCDDqWzDqW1lbnQiLAorICAgICJfRGVsZXRlIFJvdyI6ICJTdXBwcl9pbWVyIHVuZSByYW5nw6llIiwKKyAgICAiX0ltYWdlIFByb3BlcnRpZXMuLi4iOiAiX1Byb3ByacOpdMOpcyBkZSBsJ2ltYWdlLi4uIiwKKyAgICAiX01vZGlmeSBMaW5rLi4uIjogIl9Nb2RpZmllciBsZSBsaWVuLi4uIiwKKyAgICAiX1JlbW92ZSBMaW5rLi4uIjogIl9TdXBwcmltZXIgbGUgbGllbi4uLiIsCisgICAgIl9UYWJsZSBQcm9wZXJ0aWVzLi4uIjogIlByb3ByacOpX3TDqXMgZGUgbGEgdGFibGUuLi4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJNb2RpZnkgVVJMIjogIk1vZGlmaWVyIGwnVVJMIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2hlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyOTczOTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvaGUuanMKQEAgLTAsMCArMSw1NiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJoZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDX2VsbCBQcm9wZXJ0aWVzLi4uIjogItee15DXpNeZ15nXoNeZINeqX9eQLi4uIiwKKyAgICAiQ2hlY19rIExpbmsuLi4iOiAi15HXk9eVX9enINen15nXqdeV16guLi4iLAorICAgICJDb3B5IjogIteU16LXqtenIiwKKyAgICAiQ3JlYXRlIGEgbGluayI6ICLXmdem15nXqNeqINen15nXqdeV16giLAorICAgICJDdXJyZW50IFVSTCBpcyI6ICJVUkwg16DXldeb15fXmSDXlNeV15AiLAorICAgICJDdXQiOiAi15LXlteV16giLAorICAgICJEZV9sZXRlIENvbHVtbiI6ICLXnteXX9enINeY15XXqCIsCisgICAgIkRlbGV0ZSB0aGUgY3VycmVudCBjb2x1bW4iOiAi157Xl9eZ16fXqiDXkNeqINeU15jXldeoINeU16DXldeb15fXmSIsCisgICAgIkRlbGV0ZSB0aGUgY3VycmVudCByb3ciOiAi157Xl9eZ16fXqiDXkNeqINeU16nXldeo15Qg15TXoNeV15vXl9eZ16oiLAorICAgICJIb3cgZGlkIHlvdSBnZXQgaGVyZT8gKFBsZWFzZSByZXBvcnQhKSI6ICLXkNeZ15og15TXktei16og15TXoNeUPyAo15DXoNeQINeT15XXldeXISkiLAorICAgICJJX25zZXJ0IFJvdyBCZWZvcmUiOiAi15Rf15vXoNehINep15XXqNeUINec16TXoNeZIiwKKyAgICAiSW5fc2VydCBSb3cgQWZ0ZXIiOiAi15TXm9egX9ehINep15XXqNeUINeQ15fXqNeZIiwKKyAgICAiSW5zZXJ0IENfb2x1bW4gQWZ0ZXIiOiAi15TXm9eg16Eg15hf15XXqCDXkNeX16jXmSIsCisgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICLXlNeb16DXoSBf15jXldeoINec16TXoNeZIiwKKyAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAi15TXldeh16TXqiDXmNeV16gg15fXk9epINeQ15fXqNeZINeU16DXldeb15fXmSIsCisgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICLXlNeV16HXpNeqINeY15XXqCDXl9eT16kg15zXpNeg15kg15TXoNeV15vXl9eZIiwKKyAgICAiSW5zZXJ0IGEgbmV3IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAi15TXldeh16TXqiDXqdeV16jXlCDXl9eT16nXlCDXkNeX16jXmSDXlNeg15XXm9eX15nXqiIsCisgICAgIkluc2VydCBhIG5ldyByb3cgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICLXlNeV16HXpNeqINep15XXqNeUINeX15PXqdeUINec16TXoNeZINeU16DXldeb15fXmdeqIiwKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAi15nXqdeV16gg15zXnteo15vXliIsCisgICAgIkp1c3RpZnkgRnVsbCI6ICLXmdep15XXqCDXnNep15XXqNeUINee15zXkNeUIiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogIteZ16nXldeoINec16nXnteQ15wiLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogIteZ16nXldeoINec15nXnteZ158iLAorICAgICJMaW5rIHBvaW50cyB0bzoiOiAi15TXp9eZ16nXldeoINee16bXkdeZ16Ig15DXnDoiLAorICAgICJNYWtlIGxpbl9rLi4uIjogItem15XXqCDXp9eZX9ep15XXqC4uLiIsCisgICAgIk9wZW5zIHRoaXMgbGluayBpbiBhIG5ldyB3aW5kb3ciOiAi16TXqteZ15fXqiDXp9eZ16nXldeoINeW15Qg15HXl9ec15XXnyDXl9eT16kiLAorICAgICJQYXN0ZSI6ICLXlNeT15HXpyIsCisgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgZWxlbWVudDoiOiAi15DXoNeQINeQ16nXqCDXqdeR16jXpteV16DXmiDXnNeU16HXmdeoINeQ16og15TXkNec157XoNeYINeU15bXlDoiLAorICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHVubGluayB0aGlzIGVsZW1lbnQuIjogIteQ16DXkCDXkNep16gg16nXkNeq15Qg16jXldem15Qg15zXoNeq16cg15DXqiDXkNec157XoNeYINeW15QuIiwKKyAgICAiUmVtb3ZlIHRoZSAkZWxlbSBFbGVtZW50Li4uIjogIteU16HXqCDXkNeqINeQ15zXnteg15gg15QtICRlbGVtLi4uIiwKKyAgICAiUmVtb3ZlIHRoaXMgbm9kZSBmcm9tIHRoZSBkb2N1bWVudCI6ICLXlNeh16jXlCDXqdecIG5vZGUg15bXlCDXnteU157Xodee15oiLAorICAgICJSb193IFByb3BlcnRpZXMuLi4iOiAi157XkNek15nXmdeg15kgX9eY15XXqC4uLiIsCisgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAi157XpteZ15Ig15DXqiDXl9ec15XXnyDXlNeT15Ut16nXmdeXINep15wg157XkNek15nXmdeg15kg16rXkCDXkdeY15HXnNeUIiwKKyAgICAiU2hvdyB0aGUgVGFibGUgUHJvcGVydGllcyBkaWFsb2ciOiAi157XpteZ15Ig15DXqiDXl9ec15XXnyDXlNeT15Ut16nXmdeXINep15wg157XkNek15nXmdeg15kg15jXkdec15QiLAorICAgICJTaG93IHRoZSBUYWJsZSBSb3cgUHJvcGVydGllcyBkaWFsb2ciOiAi157XpteZ15Ig15DXqiDXl9ec15XXnyDXlNeT15Ut16nXmdeXINep15wg157XkNek15nXmdeg15kg16nXldeo15Qg15HXmNeR15zXlCIsCisgICAgIlNob3cgdGhlIGltYWdlIHByb3BlcnRpZXMgZGlhbG9nIjogItee16bXmdeSINeQ16og15fXnNeV158g15TXk9eVLdep15nXlyDXqdecINee15DXpNeZ15nXoNeZINeq157Xldeg15QiLAorICAgICJVbmxpbmsgdGhlIGN1cnJlbnQgZWxlbWVudCI6ICLXoNeZ16rXldenINeQ16og15TXkNec157XoNeYINeU16DXldeb15fXmSIsCisgICAgIl9EZWxldGUgUm93IjogIl/XnteX16cg16nXldeo15QiLAorICAgICJfSW1hZ2UgUHJvcGVydGllcy4uLiI6ICJf157XkNek15nXmdeg15kg16rXnteV16DXlC4uLiIsCisgICAgIl9Nb2RpZnkgTGluay4uLiI6ICJf16nXoNeUINen15nXqdeV16guLi4iLAorICAgICJfUmVtb3ZlIExpbmsuLi4iOiAiX9eU16HXqCDXp9eZ16nXldeoLi4uIiwKKyAgICAiX1RhYmxlIFByb3BlcnRpZXMuLi4iOiAi157XkNek15nXmdeg15kg15hf15HXnNeULi4uIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiTW9kaWZ5IFVSTCI6ICLXqdeZ16DXldeZIFVSTCIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9odS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9odS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2JjN2RmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2h1LmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaHUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAiS8O2esOpcHJlIHrDoXJ0IiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIlNvcmtpesOhcnQiLAorICAgICJKdXN0aWZ5IExlZnQiOiAiQmFscmEgesOhcnQiLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogIkpvYmJyYSB6w6FydCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2l0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZDJhNTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvaXQuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJpdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJKdXN0aWZ5IENlbnRlciI6ICJDZW50cmF0byIsCisgICAgIkp1c3RpZnkgRnVsbCI6ICJHaXVzdGlmaWNhdG8iLAorICAgICJKdXN0aWZ5IExlZnQiOiAiU2luaXN0cmEiLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogIkRlc3RyYSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhOGU3ODAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvamEuanMKQEAgLTAsMCArMSw2MSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDX2VsbCBQcm9wZXJ0aWVzLi4uIjogIuOCu+ODq+OBruODl+ODreODkeODhuOCoyhfRSkuLi4iLAorICAgICJDaGVjX2sgTGluay4uLiI6ICLjg6rjg7Pjgq/jgpLnorroqo0oX0spLi4uIiwKKyAgICAiQ29weSI6ICLjgrPjg5Tjg7wiLAorICAgICJDcmVhdGUgYSBsaW5rIjogIuaWsOOBn+OBquODquODs+OCr+OCkuS9nOaIkOOBl+OBvuOBmSIsCisgICAgIkN1cnJlbnQgVVJMIGlzIjogIuePvuWcqOOBrlVSTCIsCisgICAgIkN1dCI6ICLliIfjgorlj5bjgooiLAorICAgICJEZV9sZXRlIENvbHVtbiI6ICLliJfjga7liYrpmaQoX0wpIiwKKyAgICAiRGVsZXRlIENlbGwiOiAi44K744Or44Gu5YmK6ZmkIiwKKyAgICAiRGVsZXRlIHRoZSBjdXJyZW50IGNvbHVtbiI6ICLpgbjmip7kuK3jga7liJfjgpLliYrpmaTjgZfjgb7jgZkiLAorICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIumBuOaKnuS4reOBruihjOOCkuWJiumZpOOBl+OBvuOBmSIsCisgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIuOBqeOBhuOChOOBo+OBpuOBk+OBk+OBq+adpeOBvuOBl+OBn+OBiz8o44Gp44GG44GL5aCx5ZGK44KSISkiLAorICAgICJJX25zZXJ0IFJvdyBCZWZvcmUiOiAi5LiK44Gr6KGM44KS5oy/5YWlKF9OKSIsCisgICAgIkluX3NlcnQgUm93IEFmdGVyIjogIuS4i+OBq+ihjOOCkuaMv+WFpShfUykiLAorICAgICJJbnNlcnQgQ19vbHVtbiBBZnRlciI6ICLlj7PjgavliJfjgpLmjL/lhaUoX08pIiwKKyAgICAiSW5zZXJ0IENlbGwgQWZ0ZXIiOiAi5b6M44Gr44K744Or44KS5oy/5YWlIiwKKyAgICAiSW5zZXJ0IENlbGwgQmVmb3JlIjogIuWJjeOBq+OCu+ODq+OCkuaMv+WFpSIsCisgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICLlt6bjgavliJfjgpLmjL/lhaUoX0MpIiwKKyAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAi6YG45oqe5Lit44Gu5YiX44Gu5Y+z44Gr5LiA5YiX5oy/5YWl44GX44G+44GZIiwKKyAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIumBuOaKnuS4reOBruWIl+OBruW3puOBq+S4gOWIl+aMv+WFpeOBl+OBvuOBmSIsCisgICAgIkluc2VydCBhIG5ldyByb3cgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIumBuOaKnuS4reOBruihjOOBruS4i+OBq+S4gOihjOaMv+WFpeOBl+OBvuOBmSIsCisgICAgIkluc2VydCBhIG5ldyByb3cgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICLpgbjmip7kuK3jga7ooYzjga7kuIrjgavkuIDooYzmjL/lhaXjgZfjgb7jgZkiLAorICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYWZ0ZXIgdGhlIGN1cnJlbnQgbm9kZSI6ICLpgbjmip7kuK3jga7jg47jg7zjg4njga7lvozjgavmrrXokL3jgpLmjL/lhaXjgZfjgb7jgZkiLAorICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUiOiAi6YG45oqe5Lit44Gu44OO44O844OJ44Gu5omL5YmN44Gr5q616JC944KS5oy/5YWl44GX44G+44GZIiwKKyAgICAiSW5zZXJ0IHBhcmFncmFwaCBhZnRlciI6ICLlvozjgavmrrXokL3jgpLmjL/lhaUiLAorICAgICJJbnNlcnQgcGFyYWdyYXBoIGJlZm9yZSI6ICLliY3jgavmrrXokL3jgpLmjL/lhaUiLAorICAgICJKdXN0aWZ5IENlbnRlciI6ICLkuK3lpK7lr4TjgZsiLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAi5Z2H562J5Ymy5LuYIiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogIuW3puWvhOOBmyIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAi5Y+z5a+E44GbIiwKKyAgICAiTGluayBwb2ludHMgdG86IjogIuODquODs+OCr+WFiDoiLAorICAgICJNYWtlIGxpbl9rLi4uIjogIuODquODs+OCr+OBruS9nOaIkChfSykuLi4iLAorICAgICJNZXJnZSBDZWxscyI6ICLjgrvjg6vjga7ntZDlkIgiLAorICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIuOBk+OBruODquODs+OCr+OCkuaWsOOBl+OBhOOCpuOCo+ODs+ODieOCpuOBp+mWi+OBjeOBvuOBmSIsCisgICAgIlBhc3RlIjogIuiyvOOCiuS7mOOBkSIsCisgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgZWxlbWVudDoiOiAi44GT44Gu6KaB57Sg44KS5YmK6Zmk44GX44G+44GZ44CC44KI44KN44GX44GE44Gn44GZ44GL44CCOiIsCisgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gdW5saW5rIHRoaXMgZWxlbWVudC4iOiAi44GT44Gu6KaB57Sg44Gu44Oq44Oz44Kv44KS5YmK6Zmk44GX44G+44GZ44CC44KI44KN44GX44GE44Gn44GZ44GL44CCIiwKKyAgICAiUmVtb3ZlIHRoZSAkZWxlbSBFbGVtZW50Li4uIjogIiRlbGVtIOimgee0oOOCkuWJiumZpCAuLi4iLAorICAgICJSZW1vdmUgdGhpcyBub2RlIGZyb20gdGhlIGRvY3VtZW50IjogIuODieOCreODpeODoeODs+ODiOOBi+OCieOBk+OBruODjuODvOODieOCkuWJiumZpOOBl+OBvuOBmSIsCisgICAgIlJvX3cgUHJvcGVydGllcy4uLiI6ICLooYzjga7jg5fjg63jg5Hjg4bjgqMoX1cpLi4uIiwKKyAgICAiU2hvdyB0aGUgVGFibGUgQ2VsbCBQcm9wZXJ0aWVzIGRpYWxvZyI6ICLjg4bjg7zjg5bjg6vjgrvjg6vjga7jg5fjg63jg5Hjg4bjgqPjg4DjgqTjgqLjg63jgrDjgpLooajnpLrjgZfjgb7jgZkiLAorICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICLjg4bjg7zjg5bjg6vjga7jg5fjg63jg5Hjg4bjgqPjg4DjgqTjgqLjg63jgrDjgpLooajnpLrjgZfjgb7jgZkiLAorICAgICJTaG93IHRoZSBUYWJsZSBSb3cgUHJvcGVydGllcyBkaWFsb2ciOiAi44OG44O844OW44Or6KGM44Gu44OX44Ot44OR44OG44Kj44OA44Kk44Ki44Ot44Kw44KS6KGo56S644GX44G+44GZIiwKKyAgICAiU2hvdyB0aGUgaW1hZ2UgcHJvcGVydGllcyBkaWFsb2ciOiAi44GT44Gu55S75YOP44Gu44OX44Ot44OR44OG44Kj44OA44Kk44Ki44Ot44Kw44KS6KGo56S644GX44G+44GZIiwKKyAgICAiVW5saW5rIHRoZSBjdXJyZW50IGVsZW1lbnQiOiAi44GT44Gu6KaB57Sg44Gu44Oq44Oz44Kv44KS6Kej6ZmkIiwKKyAgICAiX0RlbGV0ZSBSb3ciOiAi6KGM44Gu5YmK6ZmkKF9EKSIsCisgICAgIl9JbWFnZSBQcm9wZXJ0aWVzLi4uIjogIueUu+WDj+OBruODl+ODreODkeODhuOCoyhfSSkuLi4iLAorICAgICJfTW9kaWZ5IExpbmsuLi4iOiAi44Oq44Oz44Kv44Gu5L+u5q2jKF9NKS4uLiIsCisgICAgIl9SZW1vdmUgTGluay4uLiI6ICLjg6rjg7Pjgq/jga7liYrpmaQoX1IpIiwKKyAgICAiX1RhYmxlIFByb3BlcnRpZXMuLi4iOiAi44OG44O844OW44Or44Gu44OX44Ot44OR44OG44KjKF9UKS4uLiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2xjX2Jhc2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvbGNfYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTg5NDc3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSw3MyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICJDX2VsbCBQcm9wZXJ0aWVzLi4uIjogIiIsCisgICAgIkNoZWNfayBMaW5rLi4uIjogIiIsCisgICAgIkNvcHkiOiAiIiwKKyAgICAiQ3JlYXRlIGEgbGluayI6ICIiLAorICAgICJDdXJyZW50IFVSTCBpcyI6ICIiLAorICAgICJDdXQiOiAiIiwKKyAgICAiRGVfbGV0ZSBDb2x1bW4iOiAiIiwKKyAgICAiRGVsZXRlIENlbGwiOiAiIiwKKyAgICAiRGVsZXRlIHRoZSBjdXJyZW50IGNvbHVtbiI6ICIiLAorICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIiIsCisgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIiIsCisgICAgIklfbnNlcnQgUm93IEJlZm9yZSI6ICIiLAorICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICIiLAorICAgICJJbnNlcnQgQ19vbHVtbiBBZnRlciI6ICIiLAorICAgICJJbnNlcnQgQ2VsbCBBZnRlciI6ICIiLAorICAgICJJbnNlcnQgQ2VsbCBCZWZvcmUiOiAiIiwKKyAgICAiSW5zZXJ0IF9Db2x1bW4gQmVmb3JlIjogIiIsCisgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIiIsCisgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICJJbnNlcnQgYSBuZXcgcm93IGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICIiLAorICAgICJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiIiwKKyAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUiOiAiIiwKKyAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGJlZm9yZSB0aGUgY3VycmVudCBub2RlIjogIiIsCisgICAgIkluc2VydCBwYXJhZ3JhcGggYWZ0ZXIiOiAiIiwKKyAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiIiwKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAiIiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIiIsCisgICAgIkp1c3RpZnkgTGVmdCI6ICIiLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogIiIsCisgICAgIkxpbmsgcG9pbnRzIHRvOiI6ICIiLAorICAgICJNYWtlIGxpbl9rLi4uIjogIiIsCisgICAgIk1lcmdlIENlbGxzIjogIiIsCisgICAgIk9wZW5zIHRoaXMgbGluayBpbiBhIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAiUGFzdGUiOiAiIiwKKyAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBlbGVtZW50OiI6ICIiLAorICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHVubGluayB0aGlzIGVsZW1lbnQuIjogIiIsCisgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICIiLAorICAgICJSZW1vdmUgdGhpcyBub2RlIGZyb20gdGhlIGRvY3VtZW50IjogIiIsCisgICAgIlJvX3cgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICJTaG93IHRoZSBUYWJsZSBDZWxsIFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgIlNob3cgdGhlIFRhYmxlIFByb3BlcnRpZXMgZGlhbG9nIjogIiIsCisgICAgIlNob3cgdGhlIFRhYmxlIFJvdyBQcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICJTaG93IHRoZSBpbWFnZSBwcm9wZXJ0aWVzIGRpYWxvZyI6ICIiLAorICAgICJVbmxpbmsgdGhlIGN1cnJlbnQgZWxlbWVudCI6ICIiLAorICAgICJfRGVsZXRlIFJvdyI6ICIiLAorICAgICJfSW1hZ2UgUHJvcGVydGllcy4uLiI6ICIiLAorICAgICJfTW9kaWZ5IExpbmsuLi4iOiAiIiwKKyAgICAiX1JlbW92ZSBMaW5rLi4uIjogIiIsCisgICAgIl9UYWJsZSBQcm9wZXJ0aWVzLi4uIjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvbHQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvbHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhlZjk1NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9sdC5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkp1c3RpZnkgQ2VudGVyIjogIkx5Z2lhdmltYXMgcGFnYWwgY2VudHLEhSIsCisgICAgIkp1c3RpZnkgRnVsbCI6ICJMeWdpdW90aSBwYXN0cmFpcMSFIiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogIkx5Z2lhdmltYXMgcGFnYWwga2FpcsSZIiwKKyAgICAiSnVzdGlmeSBSaWdodCI6ICJMeWdpYXZpbWFzIHBhZ2FsIGRlxaFpbsSZIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvbHYuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvbHYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYwZDFmYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9sdi5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkp1c3RpZnkgQ2VudGVyIjogIkl6bMOuZHppbsOidCBjZW50csOiIiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIkl6bMOuZHppbsOidCBwYSB2aXN1IGxhcHUiLAorICAgICJKdXN0aWZ5IExlZnQiOiAiSXpsw65kemluw6J0IHBhIGtyZWlzaSIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAiSXpsw65kemluw6J0IHBhIGxhYmkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9uYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9uYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmM2ZDVhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL25iLmpzCkBAIC0wLDAgKzEsNTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ19lbGwgUHJvcGVydGllcy4uLiI6ICJDX2VsbGVlZ2Vuc2thcGVyLi4uIiwKKyAgICAiQ2hlY19rIExpbmsuLi4iOiAiU2plX2trIExpbmsuLi4iLAorICAgICJDb3B5IjogIktvcGllciIsCisgICAgIkNyZWF0ZSBhIGxpbmsiOiAiTGFnIG55IGxpbmsiLAorICAgICJDdXJyZW50IFVSTCBpcyI6ICJHamVsZGVuZGUgVVJMIGVyIiwKKyAgICAiQ3V0IjogIktsaXBwIHV0IiwKKyAgICAiRGVfbGV0ZSBDb2x1bW4iOiAiU19sZXR0IGtvbG9ubmUiLAorICAgICJEZWxldGUgdGhlIGN1cnJlbnQgY29sdW1uIjogIlNsZXR0IGdqZWxkZW5kZSBrb2xvbm5lIiwKKyAgICAiRGVsZXRlIHRoZSBjdXJyZW50IHJvdyI6ICJTbGV0dCBnamVsZGVuZGUgcmFkIiwKKyAgICAiSG93IGRpZCB5b3UgZ2V0IGhlcmU/IChQbGVhc2UgcmVwb3J0ISkiOiAiSHZhIHNramVkZGU/IChWZW5ubGlnc3QgYmVza3JpdikiLAorICAgICJJX25zZXJ0IFJvdyBCZWZvcmUiOiAiU2V0dCBJX25uIHJhZCBmw7hyIiwKKyAgICAiSW5fc2VydCBSb3cgQWZ0ZXIiOiAiX1NldHQgaW5uIHJhZCBldHRlciIsCisgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIlNldHQgaW5uIGtfb2xvbm5lIGV0dGVyIiwKKyAgICAiSW5zZXJ0IF9Db2x1bW4gQmVmb3JlIjogIlNldHQgaW5uIGtvbG9ubmUgZXR0ZXIgKF9jKSIsCisgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIlNldHQgaW5uIGtvbG9ubmUgZXR0ZXIgZ2plbGRlbmRlIiwKKyAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIlNldHQgaW5uIGtvbG9ubmUgZsO4ciBnamVsZGVuZGUiLAorICAgICJJbnNlcnQgYSBuZXcgcm93IGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICJTZXR0IGlubiBueSByYWQgZXR0ZXIgZ2plbGRlbmRlIiwKKyAgICAiSW5zZXJ0IGEgbmV3IHJvdyBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIlNldHQgaW5uIG55IHJhZCBmw7hyIGdqZWxkZW5kZSIsCisgICAgIkluc2VydCBhIHBhcmFncmFwaCBhZnRlciB0aGUgY3VycmVudCBub2RlIjogIlNldHQgaW5uIHBhcmFncmFmIGV0dGVyIGdqZWxkZW5kZSBub2RlIiwKKyAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGJlZm9yZSB0aGUgY3VycmVudCBub2RlIjogIlNldHQgaW5uIHBhcmFncmFmIGbDuHIgZ2plbGRlbmRlIG5vZGUiLAorICAgICJJbnNlcnQgcGFyYWdyYXBoIGFmdGVyIjogIlNldHQgaW5uIHBhcmFncmFmIGV0dGVyIiwKKyAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiU2V0dCBpbm4gcGFyYWdyYWYgZsO4ciIsCisgICAgIkp1c3RpZnkgQ2VudGVyIjogIl9NaWR0anVzdGVyIiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIkJsb2trX2p1c3RlciIsCisgICAgIkp1c3RpZnkgTGVmdCI6ICJfVmVuc3RyZWp1c3RlciIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAiX0jDuHlyZWp1c3RlciIsCisgICAgIkxpbmsgcG9pbnRzIHRvOiI6ICJMaW5rIHBla2VyIHRpbDoiLAorICAgICJNYWtlIGxpbl9rLi4uIjogIkxhZyBsZW5fa2UuLi4iLAorICAgICJPcGVucyB0aGlzIGxpbmsgaW4gYSBuZXcgd2luZG93IjogIsOFcG5lciBkZW5uZSBsaW5rIGkgbnl0dCB2aW5kdSIsCisgICAgIlBhc3RlIjogIkxpbSBpbm4iLAorICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGVsZW1lbnQ6IjogIlZlbm5saWdzdCBiZWtyZWZ0IGF0IGR1IMO4bnNrZXIgw6UgZmplcm5lIGVsZW1lbnRldDoiLAorICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHVubGluayB0aGlzIGVsZW1lbnQuIjogIlZlbm5saWdzdCBiZWtyZWZ0IGF0IGR1IMO4bnNrZXIgw6UgZmplcm5lIGxpbmsgcMOlIGVsZW1lbnRldCIsCisgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICJGamVybmUgJGVsZW0gZWxlbWVudGV0Li4uIiwKKyAgICAiUmVtb3ZlIHRoaXMgbm9kZSBmcm9tIHRoZSBkb2N1bWVudCI6ICJGamVybmUgZGVubmUgbm9kZSBmcmEgZG9rdW1lbnRldCIsCisgICAgIlJvX3cgUHJvcGVydGllcy4uLiI6ICJSYWQgRWdlbnNrYXBlci4uLiAoX3cpIiwKKyAgICAiU2hvdyB0aGUgVGFibGUgQ2VsbCBQcm9wZXJ0aWVzIGRpYWxvZyI6ICJWaXMgZWdlbnNrYXBlciBmb3IgY2VsbGUiLAorICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICJWaXMgZWdlbnNrYXBlciBmb3IgdGFiZWxsZW4iLAorICAgICJTaG93IHRoZSBUYWJsZSBSb3cgUHJvcGVydGllcyBkaWFsb2ciOiAiVmlzIGVnZW5za2FwZXIgZm9yIHJhZCIsCisgICAgIlNob3cgdGhlIGltYWdlIHByb3BlcnRpZXMgZGlhbG9nIjogIlZpcyBiaWxkZWVnZW5za2FwZXIiLAorICAgICJVbmxpbmsgdGhlIGN1cnJlbnQgZWxlbWVudCI6ICJGamVybmUgbGluayBww6UgZ2plbGRlbmRlIGVsZW1lbnQiLAorICAgICJfRGVsZXRlIFJvdyI6ICJTbGV0dCByYWQgKF9kKSIsCisgICAgIl9JbWFnZSBQcm9wZXJ0aWVzLi4uIjogIl9CaWxkZWVnZW5za2FwZXIuLi4iLAorICAgICJfTW9kaWZ5IExpbmsuLi4iOiAiX1JlZGlnZXIgTGluay4uLiIsCisgICAgIl9SZW1vdmUgTGluay4uLiI6ICJfRmplcm5lIExpbmsuLi4iLAorICAgICJfVGFibGUgUHJvcGVydGllcy4uLiI6ICJfVGFiZWxsZWdlbnNrYXBlci4uLiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0M2UyZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvbmwuanMKQEAgLTAsMCArMSw1NiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJubCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDX2VsbCBQcm9wZXJ0aWVzLi4uIjogIkNfZWxlaWdlbnNjaGFwcGVuLi4uIiwKKyAgICAiQ2hlY19rIExpbmsuLi4iOiAiQ29udHJvbGVlciBoeXBlcmxpbl9rLi4uIiwKKyAgICAiQ29weSI6ICJLb3Bpw6tyZW4iLAorICAgICJDcmVhdGUgYSBsaW5rIjogIk1hYWsgZWVuIGh5cGVybGluayIsCisgICAgIkN1cnJlbnQgVVJMIGlzIjogIkh1aWRpZyBVUkwgaXMiLAorICAgICJDdXQiOiAiS25pcHBlbiIsCisgICAgIkRlX2xldGUgQ29sdW1uIjogIktvbG9tIHZlcndpamRlcmVuIiwKKyAgICAiRGVsZXRlIHRoZSBjdXJyZW50IGNvbHVtbiI6ICJWZXJ3aWpkZXIgZGUgaHVpZGlnZSBrb2xvbSIsCisgICAgIkRlbGV0ZSB0aGUgY3VycmVudCByb3ciOiAiVmVyd2lqZGVyIGRlIGh1aWRpZ2UgcmlqIiwKKyAgICAiSG93IGRpZCB5b3UgZ2V0IGhlcmU/IChQbGVhc2UgcmVwb3J0ISkiOiAiSG9lIGt3YW0gamUgaGllcj8gKEEuVS5CLiBkb29yZ2V2ZW4hKSIsCisgICAgIklfbnNlcnQgUm93IEJlZm9yZSI6ICJSaWogaW52b2VnZW4gYm92ZW4iLAorICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICJSaWogaW52b2VnZW4gb25kZXIiLAorICAgICJJbnNlcnQgQ19vbHVtbiBBZnRlciI6ICJLb2xvbSBpbnZvZWdlbiBuYSIsCisgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICJLb2xvbSBpbnZvZWdlbiB2b29yIiwKKyAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBhZnRlciB0aGUgY3VycmVudCBvbmUiOiAiVm9lZyBlZW4gbmlldXdlIGtvbG9tIGluIG5hIGRlIGh1aWRpZ2UiLAorICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiVm9lZyBlZW4gbmlldXdlIGtvbG9tIGluIHZvb3IgZGUgaHVpZGlnZSIsCisgICAgIkluc2VydCBhIG5ldyByb3cgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIlZvZWcgZWVuIG5pZXV3ZSByaWogaW4gb25kZXIgZGUgaHVpZGlnZSIsCisgICAgIkluc2VydCBhIG5ldyByb3cgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICJWb2VnIGVlbiBuaWV1d2UgcmlqIGluIGJvdmVuIGRlIGh1aWRpZ2UiLAorICAgICJKdXN0aWZ5IENlbnRlciI6ICJDZW50cmVyZW4iLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAiVWl0dnVsbGVuIiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogIkxpbmtzIHVpdGxpam5lbiIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAiUmVjaHRzIHVpdGxpam5lbiIsCisgICAgIkxpbmsgcG9pbnRzIHRvOiI6ICJIeXBlcmxpbmsgdmVyd2lqc3QgbmFhcjoiLAorICAgICJNYWtlIGxpbl9rLi4uIjogIk1hYWsgaHlwZXJsaW5fay4uLiIsCisgICAgIk9wZW5zIHRoaXMgbGluayBpbiBhIG5ldyB3aW5kb3ciOiAiT3BlbmQgZGV6ZSBoeXBlcmxpbmsgaW4gZWVuIG5pZXV3IHZlbnN0ZXIiLAorICAgICJQYXN0ZSI6ICJQbGFra2VuIiwKKyAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBlbGVtZW50OiI6ICJJcyBoZXQgd2Vya2VsaWprIGRlIGJlZG9lbGluZyBkaXQgZWxlbWVudCB0ZSB2ZXJ3aWpkZXJlbjoiLAorICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHVubGluayB0aGlzIGVsZW1lbnQuIjogIklzIGhldCB3ZXJrZWxpamsgZGUgYmVkb2VsaW5nIGRpdCBlbGVtZW50IHRlIHVubGlua2VuLiIsCisgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICJWZXJ3aWpkZXIgaGV0ICRlbGVtIGVsZW1lbnQuLi4iLAorICAgICJSZW1vdmUgdGhpcyBub2RlIGZyb20gdGhlIGRvY3VtZW50IjogIlZlcndpamRlciBkaXQgcHVudCB2YW4gaGV0IGRvY3VtZW50IiwKKyAgICAiUm9fdyBQcm9wZXJ0aWVzLi4uIjogIlJpamVpZ2Vuc2NoYV9wcGVuLi4uIiwKKyAgICAiU2hvdyB0aGUgVGFibGUgQ2VsbCBQcm9wZXJ0aWVzIGRpYWxvZyI6ICJMYWF0IGRlIHRhYmVsIGNlbGVpZ2Vuc2NoYXBwZW4gZGlhbG9nIHppZW4iLAorICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICJMYWF0IGRlIHRhYmVsIGVpZ2Vuc2NoYXBwZW4gZGlhbG9nIHppZW4iLAorICAgICJTaG93IHRoZSBUYWJsZSBSb3cgUHJvcGVydGllcyBkaWFsb2ciOiAiTGFhdCBkZSB0YWJlbCByaWplaWdlbnNjaGFwcGVuIGRpYWxvZyB6aWVuIiwKKyAgICAiU2hvdyB0aGUgaW1hZ2UgcHJvcGVydGllcyBkaWFsb2ciOiAiTGFhdCBoZXQgYWZiZWVsZGluZ3NlaWdlbnNjaGFwcGVuIGRpYWxvZyB6aWVuIiwKKyAgICAiVW5saW5rIHRoZSBjdXJyZW50IGVsZW1lbnQiOiAiVW5saW5rIGhldCBodWlkaWdlIGVsZW1lbnQiLAorICAgICJfRGVsZXRlIFJvdyI6ICJSaWogX3ZlcndpamRlcmVuIiwKKyAgICAiX0ltYWdlIFByb3BlcnRpZXMuLi4iOiAiRWlnZW5zY2hhcHBlbiBhZmJlZWxkaW5nLi4uIiwKKyAgICAiX01vZGlmeSBMaW5rLi4uIjogIkh5cGVybGluX2sgYWFucGFzc2VuLi4uIiwKKyAgICAiX1JlbW92ZSBMaW5rLi4uIjogIlZlX3J3aWpkZXIgaHlwZXJsaW5rLi4uIiwKKyAgICAiX1RhYmxlIFByb3BlcnRpZXMuLi4iOiAiX1RhYmVsZWlnZW5zY2hhcHBlbi4uLiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIk1vZGlmeSBVUkwiOiAiQWFucGFzc2VuIFVSTCIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9wbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2EzMWVmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL3BsLmpzCkBAIC0wLDAgKzEsNTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicGwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ19lbGwgUHJvcGVydGllcy4uLiI6ICJXxYJhxZtjaXdvxZtjaSBrb23Ds3JraSIsCisgICAgIkNoZWNfayBMaW5rLi4uIjogIlNwcmF3ZMW6IG9kbm/Fm25payIsCisgICAgIkNvcHkiOiAiS29waXVqIiwKKyAgICAiQ3JlYXRlIGEgbGluayI6ICJVdHfDs3J6IG9kbm/Fm25payIsCisgICAgIkN1cnJlbnQgVVJMIGlzIjogIkJpZcW8xIVjeSBVUkwgb2Rub8WbbmlrYSIsCisgICAgIkN1dCI6ICJXeXRuaWoiLAorICAgICJEZV9sZXRlIENvbHVtbiI6ICJVc3XFhCBrb2x1bW7EmSIsCisgICAgIkRlbGV0ZSB0aGUgY3VycmVudCBjb2x1bW4iOiAiVXN1d2EgYmllxbzEhWPEhSBrb2x1bW7EmSIsCisgICAgIkRlbGV0ZSB0aGUgY3VycmVudCByb3ciOiAiVXN1xYQgYmllxbzEhWN5IHdpZXJzeiIsCisgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIkphayB0dSB0cmFmacWCZcWbIChQcm9zesSZLCBwb2RhaiBva29saWN6bm/Fm2NpISkiLAorICAgICJJX25zZXJ0IFJvdyBCZWZvcmUiOiAiV3N0YXcgd2llcnN6IHByemVkIiwKKyAgICAiSW5fc2VydCBSb3cgQWZ0ZXIiOiAiV3N0YXcgd2llcnN6IHBvIiwKKyAgICAiSW5zZXJ0IENfb2x1bW4gQWZ0ZXIiOiAiV3N0YXcga29sdW1uxJkgcG8iLAorICAgICJJbnNlcnQgX0NvbHVtbiBCZWZvcmUiOiAiV3N0YXcga29sdW1uxJkgcHJ6ZWQiLAorICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICJXc3RhdyBub3fEhSBrb2x1bW7EmSBwbyBiaWXFvMSFY2VqIiwKKyAgICAiSW5zZXJ0IGEgbmV3IGNvbHVtbiBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIldzdGF3IG5vd8SFIGtvbHVtbsSZIHByemVkIGJpZcW8xIVjxIUiLAorICAgICJJbnNlcnQgYSBuZXcgcm93IGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICJXc3RhdyBub3d5IHdpZXJzeiBwbyBiaWXFvMSFY3ltIiwKKyAgICAiSW5zZXJ0IGEgbmV3IHJvdyBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIldzdGF3IG5vd3kgd2llcnN6IHByemVkIGJpZcW8xIVjeW0iLAorICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYWZ0ZXIgdGhlIGN1cnJlbnQgbm9kZSI6ICJXc3RhdyBha2FwaXQgcG8gYmllxbzEhWN5bSBlbGVtZW5jaWUiLAorICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUiOiAiV3N0YXcgYWthcGl0IHByemVkIGJpZcW8xIVjeW0gZWxlbWVudGVtIiwKKyAgICAiSW5zZXJ0IHBhcmFncmFwaCBhZnRlciI6ICJXc3RhdyBha2FwaXQgcG8iLAorICAgICJJbnNlcnQgcGFyYWdyYXBoIGJlZm9yZSI6ICJXc3RhdyBha2FwaXQgcHJ6ZWQiLAorICAgICJKdXN0aWZ5IENlbnRlciI6ICJXeWNlbnRydWoiLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAiV3lqdXN0dWoiLAorICAgICJKdXN0aWZ5IExlZnQiOiAiV3lyw7N3bmFqIGRvIGxld2VqIiwKKyAgICAiSnVzdGlmeSBSaWdodCI6ICJXeXLDs3duYWogZG8gcHJhd2VqIiwKKyAgICAiTGluayBwb2ludHMgdG86IjogIk9kbm/Fm25payB3c2thenVqZSBuYToiLAorICAgICJNYWtlIGxpbl9rLi4uIjogIlV0d8Ozcnogb2Rub8WbbmlrIiwKKyAgICAiT3BlbnMgdGhpcyBsaW5rIGluIGEgbmV3IHdpbmRvdyI6ICJPdHdpZXJhIHRlbiBvZG5vxZtuaWsgdyBub3d5bSBva25pZSIsCisgICAgIlBhc3RlIjogIldrbGVqIiwKKyAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBlbGVtZW50OiI6ICJOYSBwZXdubyBjaGNlc3ogdXN1bsSFxIcgdGVuIGVsZW1lbnQ/IiwKKyAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICJOYSBwZXdubyBjaGNlc3ogdXN1bsSFxIcgb2Rub8WbbmlrPyIsCisgICAgIlJlbW92ZSB0aGUgJGVsZW0gRWxlbWVudC4uLiI6ICJVc3XFhCAkZWxlbS4uLiIsCisgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiVXN1xYQgdGVuIGVsZW1lbnQgeiBkb2t1bWVudHUiLAorICAgICJSb193IFByb3BlcnRpZXMuLi4iOiAiV8WCYcWbY2l3b8WbY2kgd2llcnN6YSIsCisgICAgIlNob3cgdGhlIFRhYmxlIENlbGwgUHJvcGVydGllcyBkaWFsb2ciOiAiUG9rYcW8IG9rbm8gd8WCYcWbY2l3b8WbY2kga29tw7Nya2kiLAorICAgICJTaG93IHRoZSBUYWJsZSBQcm9wZXJ0aWVzIGRpYWxvZyI6ICJQb2thxbwgb2tpZW5rbyB3xYJhxZtjaXdvxZtjaSB0YWJlbGkiLAorICAgICJTaG93IHRoZSBUYWJsZSBSb3cgUHJvcGVydGllcyBkaWFsb2ciOiAiUG9rYcW8IG9rbm8gd8WCYcWbY2l3b8WbY2kgd2llcnN6YSIsCisgICAgIlNob3cgdGhlIGltYWdlIHByb3BlcnRpZXMgZGlhbG9nIjogIlBva2HFvCBva2llbmtvIHfFgmHFm2Npd2/Fm2NpIG9icmF6a2EiLAorICAgICJVbmxpbmsgdGhlIGN1cnJlbnQgZWxlbWVudCI6ICJVc3XFhCBvZG5vxZtuaWsgeiB6YXpuYWN6b25lZ28gZWxlbWVudHUiLAorICAgICJfRGVsZXRlIFJvdyI6ICJVc3XFhCB3aWVyc3oiLAorICAgICJfSW1hZ2UgUHJvcGVydGllcy4uLiI6ICJXxYJhxZtjaXdvxZtjaSBvYnJhemthIiwKKyAgICAiX01vZGlmeSBMaW5rLi4uIjogIlptaWXFhCBvZG5vxZtuaWsiLAorICAgICJfUmVtb3ZlIExpbmsuLi4iOiAiVXN1xYQgb2Rub8WbbmlrIiwKKyAgICAiX1RhYmxlIFByb3BlcnRpZXMuLi4iOiAiV8WCYcWbY2l3b8WbY2kgdGFiZWxpIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvcHRfYnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM5MDFlYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9wdF9ici5qcwpAQCAtMCwwICsxLDYxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNfZWxsIFByb3BlcnRpZXMuLi4iOiAiUHJvcHJpZWRhZGVzIGRhIGPDqWx1bGEiLAorICAgICJDaGVjX2sgTGluay4uLiI6ICJWZXJpZmljYXIgTGluay4uLiIsCisgICAgIkNvcHkiOiAiQ29waWFyIiwKKyAgICAiQ3JlYXRlIGEgbGluayI6ICJDcmlhciB1bSBub3ZvIGxpbmsiLAorICAgICJDdXJyZW50IFVSTCBpcyI6ICJBIFVSTCBjb3JyZW50ZSDDqSIsCisgICAgIkN1dCI6ICJSZWNvcnRhciIsCisgICAgIkRlX2xldGUgQ29sdW1uIjogIkFwYWdhciBDb2x1bmEiLAorICAgICJEZWxldGUgQ2VsbCI6ICJBcGFnYXIgQ8OpbHVsYSIsCisgICAgIkRlbGV0ZSB0aGUgY3VycmVudCBjb2x1bW4iOiAiQXBhZ2FyIGEgY29sdW5hIGF0dWFsIiwKKyAgICAiRGVsZXRlIHRoZSBjdXJyZW50IHJvdyI6ICJBcGFnYXIgYSBsaW5oYSBhdHVhbCIsCisgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIkNvbW8gdm9jw6ogY29tZcOnb3UgYXF1aT8gKFBvciBmYXZvciwgaW5mb3JtZSEpIiwKKyAgICAiSV9uc2VydCBSb3cgQmVmb3JlIjogIkluc2VyaXIgbGluaGEgYW50ZXMgZGVzdGUgcG9udG8iLAorICAgICJJbl9zZXJ0IFJvdyBBZnRlciI6ICJJbnNlcmlyIGxpbmhhIGRlcG9pcyBkZXN0ZSBwb250byIsCisgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIkluc2VyaXIgY29sdW5hIGFww7NzIGVzdGUgcG9udG8iLAorICAgICJJbnNlcnQgQ2VsbCBBZnRlciI6ICJJbnNlcmlyIEPDqWx1bGEgRGVwb2lzIiwKKyAgICAiSW5zZXJ0IENlbGwgQmVmb3JlIjogIkluc2VyaXIgQ8OpbHVsYSBBbnRlcyIsCisgICAgIkluc2VydCBfQ29sdW1uIEJlZm9yZSI6ICJJbnNlcmlyIGNvbHVuYSBhbnRlcyBkZXN0ZSBwb250byIsCisgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIkluc2VyaXIgdW1hIG5vdmEgY29sdW5hIGFww7NzIGVzdGEiLAorICAgICJJbnNlcnQgYSBuZXcgY29sdW1uIGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiSW5zZXJpciB1bWEgbm92YSBjb2x1bmEgYW50ZXMgZGVzdGEiLAorICAgICJJbnNlcnQgYSBuZXcgcm93IGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICJJbnNlcmlyIHVtYSBsaW5oYSBhcMOzcyBlc3RhIiwKKyAgICAiSW5zZXJ0IGEgbmV3IHJvdyBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIjogIkluc2VyaXIgdW1hIG5vdmEgbGluaGEgYW50ZXMgZGVzdGEiLAorICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYWZ0ZXIgdGhlIGN1cnJlbnQgbm9kZSI6ICJJbnNlcmlyIHVtIHBhcsOhZ3JhZm8gYXDDs3MgbyBuw7MgYXR1YWwiLAorICAgICJJbnNlcnQgYSBwYXJhZ3JhcGggYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUiOiAiSW5zZXJpciB1bSBwYXLDoWdyYWZvIGFudGVzIGRvIG7DsyBhdHVhbCIsCisgICAgIkluc2VydCBwYXJhZ3JhcGggYWZ0ZXIiOiAiSW5zZXJpciB1bSBwYXLDoWdyYWZvIGFww7NzIiwKKyAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiSW5zZXJpciB1bSBwYXLDoWdyYWZvIGFudGVzIiwKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAiSnVzdGlmaWNhciBjZW50cmFsaXphZG8iLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAiSnVzdGlmaWNhw6fDo28gY29tcGxldGEiLAorICAgICJKdXN0aWZ5IExlZnQiOiAiSnVzdGlmaWNhciDDoCBlc3F1ZXJkYSIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAiSnVzdGlmaWNhciDDoCBkaXJlaXRhIiwKKyAgICAiTGluayBwb2ludHMgdG86IjogIkxpbmsgcGFyYToiLAorICAgICJNYWtlIGxpbl9rLi4uIjogIkNyaWFyIGxpbmsuLi4iLAorICAgICJNZXJnZSBDZWxscyI6ICJNZXNjbGFyIEPDqWx1bGFzIiwKKyAgICAiT3BlbnMgdGhpcyBsaW5rIGluIGEgbmV3IHdpbmRvdyI6ICJBYnJpciBlc3RlIGxpbmsgZW0gdW1hIG5vdmEgamFuZWxhIiwKKyAgICAiUGFzdGUiOiAiQ29sYXIiLAorICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGVsZW1lbnQ6IjogIlBvciBmYXZvciwgY29uZmlybWUgcXVlIGRlc2VqYSByZW1vdmVyIGVzdGUgZWxlbWVudG86IiwKKyAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byB1bmxpbmsgdGhpcyBlbGVtZW50LiI6ICJQb3IgZmF2b3IsIGNvbmZpcm1lIHF1ZSBkZXNlamEgcmV0aXJhciBvIGxpbmsgZG8gZWxlbWVudG8uIiwKKyAgICAiUmVtb3ZlIHRoZSAkZWxlbSBFbGVtZW50Li4uIjogIlJlbW92ZXIgbyBlbGVtZW50byAkZWxlbS4uLiIsCisgICAgIlJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgZG9jdW1lbnQiOiAiUmVtb3ZlciBlc3RlIG7DsyBkbyBkb2N1bWVudG8iLAorICAgICJSb193IFByb3BlcnRpZXMuLi4iOiAiUHJvcHJpZWRhZGVzIGRhIExpbmhhIiwKKyAgICAiU2hvdyB0aGUgVGFibGUgQ2VsbCBQcm9wZXJ0aWVzIGRpYWxvZyI6ICJNb3N0cmFyIFByb3ByaWVkYWRlcyBkYSBUYWJlbGFzIiwKKyAgICAiU2hvdyB0aGUgVGFibGUgUHJvcGVydGllcyBkaWFsb2ciOiAiTW9zdHJhciBjYWl4YSBkZSBkacOhbG9nbyBkZSBQcm9wcmllZGFkZXMgZGEgVGFiZWxhIiwKKyAgICAiU2hvdyB0aGUgVGFibGUgUm93IFByb3BlcnRpZXMgZGlhbG9nIjogIk1vc3RyYXIgY2FpeGEgZGUgZGnDoWxvZ28gZGUgUHJvcHJpZWRhZGVzIGRhIExpbmhhIiwKKyAgICAiU2hvdyB0aGUgaW1hZ2UgcHJvcGVydGllcyBkaWFsb2ciOiAiTW9zdHJhciBhIGNhaXhhIGRlIGRpw6Fsb2dvIGRhcyBQcm9wcmllZGFkZXMgZGEgaW1hZ2VtIiwKKyAgICAiVW5saW5rIHRoZSBjdXJyZW50IGVsZW1lbnQiOiAiUmVtb3ZlciBsaW5rIGRvIGVsZW1lbnRvIGF0dWFsIiwKKyAgICAiX0RlbGV0ZSBSb3ciOiAiQXBhZ2FyIGxpbmhhIiwKKyAgICAiX0ltYWdlIFByb3BlcnRpZXMuLi4iOiAiUHJvcHJpZWRhZGVzIGRhIGltYWdlbS4uLiIsCisgICAgIl9Nb2RpZnkgTGluay4uLiI6ICJNb2RpZmljYXIgbGluayIsCisgICAgIl9SZW1vdmUgTGluay4uLiI6ICJSZW1vdmVyIExpbmsiLAorICAgICJfVGFibGUgUHJvcGVydGllcy4uLiI6ICJQcm9wcmllZGFkZXMgZGEgVGFiZWxhIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvcm8uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvcm8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQxNTlkNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9yby5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJvIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkp1c3RpZnkgQ2VudGVyIjogIkFsaW5pZXJlIHBlIGNlbnRydSIsCisgICAgIkp1c3RpZnkgRnVsbCI6ICJBbGluaWVyZSDDrm4gYW1iZWxlIHDEg3LFo2kiLAorICAgICJKdXN0aWZ5IExlZnQiOiAiQWxpbmllcmUgbGEgc3TDom5nYSIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAiQWxpbmllcmUgbGEgZHJlYXB0YSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL3J1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOWQ1MGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvcnUuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJKdXN0aWZ5IENlbnRlciI6ICLQn9C+INGG0LXQvdGC0YDRgyIsCisgICAgIkp1c3RpZnkgRnVsbCI6ICLQn9C+INGI0LjRgNC40L3QtSIsCisgICAgIkp1c3RpZnkgTGVmdCI6ICLQn9C+INC70LXQstC+0LzRgyDQutGA0LDRjiIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAi0J/QviDQv9GA0LDQstC+0LzRgyDQutGA0LDRjiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL3NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL3NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZjVjZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvc2guanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJKdXN0aWZ5IENlbnRlciI6ICJSYXZuYW5qZSBwbyBzaW1ldHJhbGkiLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAiUHVubyByYXZuYW5qZSIsCisgICAgIkp1c3RpZnkgTGVmdCI6ICJSYXZuYW5qZSB1bGV2byIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAiUmF2bmFuamUgdWRlc25vIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvc2kuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvc2kuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcyY2I2OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9zaS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkp1c3RpZnkgQ2VudGVyIjogIk5hIHNyZWRpbm8iLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAiUG9yYXpkZWxpIHZzZWJpbm8iLAorICAgICJKdXN0aWZ5IExlZnQiOiAiUG9yYXZuYWogbGV2byIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAiUG9yYXZuYWogZGVzbm8iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9zci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9zci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGI2MDE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL3NyLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAi0KDQsNCy0L3QsNGa0LUg0L/QviDRgdC40LzQtdGC0YDQsNC70LgiLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAi0J/Rg9C90L4g0YDQsNCy0L3QsNGa0LUiLAorICAgICJKdXN0aWZ5IExlZnQiOiAi0KDQsNCy0L3QsNGa0LUg0YPQu9C10LLQviIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAi0KDQsNCy0L3QsNGa0LUg0YPQtNC10YHQvdC+IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvc3YuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY5ODljMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy9zdi5qcwpAQCAtMCwwICsxLDU3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInN2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNfZWxsIFByb3BlcnRpZXMuLi4iOiAiQ19lbGxlZ2Vuc2thcGVyLi4uIiwKKyAgICAiQ2hlY19rIExpbmsuLi4iOiAiS29udHJvbGxlcmEgbMOkbmsuLi4iLAorICAgICJDb3B5IjogIktvcGllcmEiLAorICAgICJDcmVhdGUgYSBsaW5rIjogIlNLYXBhIG55IGzDpG5rIiwKKyAgICAiQ3VycmVudCBVUkwgaXMiOiAiQWt0dWVsbHQgVVJMIMOkciIsCisgICAgIkN1dCI6ICJLbGlwcCB1dCIsCisgICAgIkRlX2xldGUgQ29sdW1uIjogIl9SYWRlcmEga29sdW1uIiwKKyAgICAiRGVsZXRlIHRoZSBjdXJyZW50IGNvbHVtbiI6ICJSYWRlcmEgYWt0dWVsbCBrb2x1bW4iLAorICAgICJEZWxldGUgdGhlIGN1cnJlbnQgcm93IjogIlQgYm9ydCBha3R1ZWxsIHJhZCIsCisgICAgIkhvdyBkaWQgeW91IGdldCBoZXJlPyAoUGxlYXNlIHJlcG9ydCEpIjogIkh1ciBoYW1uYWRlIGR1IGjDpHI/IChCZXNrcml2IGbDtnJsb3BwZXQpIiwKKyAgICAiSV9uc2VydCBSb3cgQmVmb3JlIjogIklfbmZvZ2EgcmFkIGbDtnJlIiwKKyAgICAiSW5fc2VydCBSb3cgQWZ0ZXIiOiAiSW5mb2dhIHJhZCBlZnRlciBha3R1ZWxsIHJhZCIsCisgICAgIkluc2VydCBDX29sdW1uIEFmdGVyIjogIkluZm9nYSBrX29sdW1uIGVmdGVyIiwKKyAgICAiSW5zZXJ0IF9Db2x1bW4gQmVmb3JlIjogIkluZm9nYSBrb2x1bW4gZWZ0ZXIgKF9jKSIsCisgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIjogIkluZm9nYSBrb2x1bW4gZWZ0ZXIgYWt0dWVsbCIsCisgICAgIkluc2VydCBhIG5ldyBjb2x1bW4gYmVmb3JlIHRoZSBjdXJyZW50IG9uZSI6ICJJbmZvZ2Ega29sdW1uIGbDtnJlIGFrdHVlbGwiLAorICAgICJJbnNlcnQgYSBuZXcgcm93IGFmdGVyIHRoZSBjdXJyZW50IG9uZSI6ICJJbmZvZ2EgbnkgcmFkIGVmdGVyIGFrdHVlbGwiLAorICAgICJJbnNlcnQgYSBuZXcgcm93IGJlZm9yZSB0aGUgY3VycmVudCBvbmUiOiAiSW5mb2dhIG55IHJhZCBmw7ZyZSBha3R1ZWxsIiwKKyAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUiOiAiSW5mb2dhIHBhcmFncmFmIGVmdGVyIGFrdHVlbGwgbm9kIiwKKyAgICAiSW5zZXJ0IGEgcGFyYWdyYXBoIGJlZm9yZSB0aGUgY3VycmVudCBub2RlIjogIkluZm9nYSBwYXJhZ3JhZiBmw7ZyZSBha3R1ZWxsIG5vZCIsCisgICAgIkluc2VydCBwYXJhZ3JhcGggYWZ0ZXIiOiAiSW5mb2dhIHBhcmFncmFmIGVmdGVyIiwKKyAgICAiSW5zZXJ0IHBhcmFncmFwaCBiZWZvcmUiOiAiSW5mb2dhIHBhcmFncmFmIGbDtnJlIiwKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAiX0NlbnRlcmp1c3RlcmEiLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAiQmxvY2tfanVzdGVyYSIsCisgICAgIkp1c3RpZnkgTGVmdCI6ICJfVsOkbnN0ZXJqdXN0ZXJhIiwKKyAgICAiSnVzdGlmeSBSaWdodCI6ICJfSMO2Z2VyanVzdGVyYSIsCisgICAgIkxpbmsgcG9pbnRzIHRvOiI6ICJMw6Rua2VuIHBla2FyIG1vdDoiLAorICAgICJNYWtlIGxpbl9rLi4uIjogIlNrYXBhIGzDpG5fay4uLiIsCisgICAgIk9wZW5zIHRoaXMgbGluayBpbiBhIG5ldyB3aW5kb3ciOiAiw5ZwcG5hIGzDpG5rIGkgbnl0dCBmw7Zuc3RlciIsCisgICAgIlBhc3RlIjogIktsaXN0cmEgaW4iLAorICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGVsZW1lbnQ6IjogIkJla3LDpGZ0YSBib3J0dGFnbmluZyBhdiBlbGVtZW50OiIsCisgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gdW5saW5rIHRoaXMgZWxlbWVudC4iOiAiQmVrcsOkZnRhIGJvcnR0YWduaW5nIGF2IGzDpG5rIiwKKyAgICAiUmVtb3ZlIHRoZSAkZWxlbSBFbGVtZW50Li4uIjogIlJhZGVyYSBlbGVtZW50ZXQgJGVsZW0uLi4iLAorICAgICJSZW1vdmUgdGhpcyBub2RlIGZyb20gdGhlIGRvY3VtZW50IjogIlJhZGVyYSBub2QgZnLDpW4gZG9rdW1lbnRldCIsCisgICAgIlJvX3cgUHJvcGVydGllcy4uLiI6ICJSYWRlZ2Vuc2thcGVyLi4uIChfdykiLAorICAgICJTaG93IHRoZSBUYWJsZSBDZWxsIFByb3BlcnRpZXMgZGlhbG9nIjogIlZpc2EgZWdlbnNrYXBlciBmb3IgY2VsbGVuIiwKKyAgICAiU2hvdyB0aGUgVGFibGUgUHJvcGVydGllcyBkaWFsb2ciOiAiVmlzYSB0YWJlbGxlZ2Vuc2thcGVyIiwKKyAgICAiU2hvdyB0aGUgVGFibGUgUm93IFByb3BlcnRpZXMgZGlhbG9nIjogIlZpc2EgZWdlbnNrYXBlciBmw7ZyIHJhZCIsCisgICAgIlNob3cgdGhlIGltYWdlIHByb3BlcnRpZXMgZGlhbG9nIjogIlZpc2EgYmlsZGVnZW5za2FwZXIiLAorICAgICJVbmxpbmsgdGhlIGN1cnJlbnQgZWxlbWVudCI6ICJUYSBib3J0IGzDpG5rIGtvcHBsYWQgdGlsbCBlbGVtZW50ZXQiLAorICAgICJfRGVsZXRlIFJvdyI6ICJSYWRlcmEgcmFkIChfZCkiLAorICAgICJfSW1hZ2UgUHJvcGVydGllcy4uLiI6ICJfQmlsZGVnZW5za2FwZXIuLi4iLAorICAgICJfTW9kaWZ5IExpbmsuLi4iOiAiX1JlZGlnZXJhIEzDpG5rLi4uIiwKKyAgICAiX1JlbW92ZSBMaW5rLi4uIjogIl9UYSBib3J0IGzDpG5rLi4uIiwKKyAgICAiX1RhYmxlIFByb3BlcnRpZXMuLi4iOiAiX1RhYmVsbGVnZW5za2FwZXIuLi4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvQ29udGV4dE1lbnUvbGFuZy90aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDAwNjZkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL3RoLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidGgiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSnVzdGlmeSBDZW50ZXIiOiAi4LiI4Lix4LiU4LiB4Li24LmI4LiH4LiB4Lil4Liy4LiHIiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIuC4iOC4seC4lOC5gOC4leC5h+C4oeC4guC4reC4miIsCisgICAgIkp1c3RpZnkgTGVmdCI6ICLguIjguLHguJTguIrguLTguJTguIvguYnguLLguKIiLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogIuC4iOC4seC4lOC4iuC4tOC4lOC4guC4p+C4siIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL3RyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL3RyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MWU4Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvdHIuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0ciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJKdXN0aWZ5IENlbnRlciI6ICJPcnRheWEgaGl6YWxhIiwKKyAgICAiSnVzdGlmeSBGdWxsIjogIlRhbSBoaXphbGEiLAorICAgICJKdXN0aWZ5IExlZnQiOiAiU29sYSBoaXphbGEiLAorICAgICJKdXN0aWZ5IFJpZ2h0IjogIlNhxJ9hIGhpemFsYSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL3ZuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL3ZuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMGE3YzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvdm4uanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ2biIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJKdXN0aWZ5IENlbnRlciI6ICJDxINuIEdp4buvYSIsCisgICAgIkp1c3RpZnkgRnVsbCI6ICJDxINuIMSQ4buBdSIsCisgICAgIkp1c3RpZnkgTGVmdCI6ICJDxINuIFRyw6FpIiwKKyAgICAiSnVzdGlmeSBSaWdodCI6ICJDxINuIFBo4bqjaSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL3poX2NuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9sYW5nL3poX2NuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZGQ4MWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L2xhbmcvemhfY24uanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ6aF9jbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJKdXN0aWZ5IENlbnRlciI6ICLkvY3nva7lsYXkuK0iLAorICAgICJKdXN0aWZ5IEZ1bGwiOiAi5L2N572u5bem5Y+z5bmz562JIiwKKyAgICAiSnVzdGlmeSBMZWZ0IjogIuS9jee9rumdoOW3piIsCisgICAgIkp1c3RpZnkgUmlnaHQiOiAi5L2N572u6Z2g5Y+zIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0NvbnRleHRNZW51L21lbnUuY3NzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9tZW51LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGM2NGI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Db250ZXh0TWVudS9tZW51LmNzcwpAQCAtMCwwICsxLDY3IEBACisvKiBzdHlsZXMgZm9yIHRoZSBDb250ZXh0TWVudSAvSFRNTEFyZWEgKi8KKy8qIFRoZSBDb250ZXh0TWVudSBwbHVnaW4gaXMgKGMpIGR5bmFyY2guY29tIDIwMDMuICovCisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYgKi8KKworZGl2Lmh0bWxhcmVhLWNvbnRleHQtbWVudSB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgYm9yZGVyOiAxcHggc29saWQgI2FjYTg5OTsKKyAgcGFkZGluZzogMnB4OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBjb2xvcjogIzAwMDsKKyAgY3Vyc29yOiBkZWZhdWx0OworICB6LWluZGV4OiAxMDAwOworfQorCitkaXYuaHRtbGFyZWEtY29udGV4dC1tZW51IHRhYmxlIHsKKyAgZm9udDogMTFweCB0YWhvbWEsdmVyZGFuYSxzYW5zLXNlcmlmOworICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworfQorCitkaXYuaHRtbGFyZWEtY29udGV4dC1tZW51IHRyLml0ZW0gdGQuaWNvbiBpbWcgeworLyogdGFrZW4gY2FyZSBvZiBieSB4aW5oYS5tYWtlQnRuSW1nKCkgKi8KKy8qIHdpZHRoOiAxOHB4OyAqLworLyogaGVpZ2h0OiAxOHB4OyAqLworfQorCitkaXYuaHRtbGFyZWEtY29udGV4dC1tZW51IHRyLml0ZW0gdGQuaWNvbiB7CisgIHBhZGRpbmc6IDBweCAzcHg7CisgIHdpZHRoOiAxOHB4OworICBoZWlnaHQ6IDE4cHg7CisgIGJhY2tncm91bmQtY29sb3I6ICNjZGY7Cit9CisKK2Rpdi5odG1sYXJlYS1jb250ZXh0LW1lbnUgdHIuaXRlbSB0ZC5sYWJlbCB7CisgIHBhZGRpbmc6IDFweCAxMHB4IDFweCAzcHg7Cit9CisKK2Rpdi5odG1sYXJlYS1jb250ZXh0LW1lbnUgdHIuc2VwYXJhdG9yIHRkIHsKKyAgcGFkZGluZzogMnB4IDBweDsKK30KKworZGl2Lmh0bWxhcmVhLWNvbnRleHQtbWVudSB0ci5zZXBhcmF0b3IgdGQgZGl2IHsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNhY2E4OTk7CisgIG92ZXJmbG93OiBoaWRkZW47CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKK30KKworZGl2Lmh0bWxhcmVhLWNvbnRleHQtbWVudSB0ci5zZXBhcmF0b3IgdGQuaWNvbiB7CisgIGJhY2tncm91bmQtY29sb3I6ICNjZGY7Cit9CisKK2Rpdi5odG1sYXJlYS1jb250ZXh0LW1lbnUgdHIuc2VwYXJhdG9yIHRkLmljb24gZGl2IHsKKy8qICBtYXJnaW4tbGVmdDogM3B4OyAqLworICBib3JkZXItY29sb3I6ICNmZmY7Cit9CisKK2Rpdi5odG1sYXJlYS1jb250ZXh0LW1lbnUgdHIuc2VwYXJhdG9yIHRkLmxhYmVsIGRpdiB7CisgIG1hcmdpbi1yaWdodDogM3B4OworfQorCitkaXYuaHRtbGFyZWEtY29udGV4dC1tZW51IHRyLml0ZW0uaG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzE2YWM1OworICBjb2xvcjogI2ZmZjsKK30KKworZGl2Lmh0bWxhcmVhLWNvbnRleHQtbWVudSB0ci5pdGVtLmhvdmVyIHRkLmljb24geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjE5YWY1OworfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9EZWZpbml0aW9uTGlzdC9EZWZpbml0aW9uTGlzdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRGVmaW5pdGlvbkxpc3QvRGVmaW5pdGlvbkxpc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmOTNhZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRGVmaW5pdGlvbkxpc3QvRGVmaW5pdGlvbkxpc3QuanMKQEAgLTAsMCArMSw5OSBAQAorLy8gRGVmaW5pdGlvbkxpc3QgcGx1Z2luIGZvciBYaW5oYQorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgWGluaGEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorCisKK2Z1bmN0aW9uIERlZmluaXRpb25MaXN0KGVkaXRvcikgeworICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKKyAgdmFyIGNmZyA9IGVkaXRvci5jb25maWc7CisgIHZhciBibCA9IERlZmluaXRpb25MaXN0LmJ0bkxpc3Q7CisgIHZhciBzZWxmID0gdGhpczsKKyAgLy8gcmVnaXN0ZXIgdGhlIHRvb2xiYXIgYnV0dG9ucyBwcm92aWRlZCBieSB0aGlzIHBsdWdpbgorICBmb3IgKHZhciBpID0gMDsgaSA8IGJsLmxlbmd0aDsgKytpKSB7CisgICAgdmFyIGJ0biA9IGJsW2ldOworICAgIGlmICghYnRuKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgdmFyIGlkID0gYnRuWzBdOworICAgIGNmZy5yZWdpc3RlckJ1dHRvbihpZCwgdGhpcy5fbGMoYnRuWzFdKSwgZWRpdG9yLmltZ1VSTCgiZWRfIiArIGJ0blswXSArICIuZ2lmIiwgIkRlZmluaXRpb25MaXN0IiksIGZhbHNlLAorICAgICAgZnVuY3Rpb24oZWRpdG9yLCBpZCkgeworICAgICAgICAvLyBkaXNwYXRjaCBidXR0b24gcHJlc3MgZXZlbnQKKyAgICAgICAgc2VsZi5idXR0b25QcmVzcyhlZGl0b3IsIGlkKTsKKyAgICAgIH0pOworICB9CisKKyAgLy8gV2UnbGwgaW5zZXJ0IHRoZSBidXR0b25zIG5leHQgdG8gdGhlIFVML09MIGJ1dHRvbnMsIGlmIHRoZXkgZXhpc3QuCisgIC8vIElmIG5laXRoZXIgb2YgdGhvc2UgYnV0dG9ucyBleGlzdHMsIGFkZFRvb2xiYXJFbGVtZW50IHB1dHMgb3VyIGJ1dHRvbnMKKyAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdG9vbGJhciwgd2hpY2ggaXMgZ29vZCBlbm91Z2guCisgIGNmZy5hZGRUb29sYmFyRWxlbWVudCgiZGwiLCBbImluc2VydHVub3JkZXJlZGxpc3QiLCAiaW5zZXJ0b3JkZXJlZGxpc3QiXSwgMSk7CisgIGNmZy5hZGRUb29sYmFyRWxlbWVudCgiZHQiLCAiZGwiLCAxKTsKKyAgY2ZnLmFkZFRvb2xiYXJFbGVtZW50KCJkZCIsICJkdCIsIDEpOworfQorCitEZWZpbml0aW9uTGlzdC5fcGx1Z2luSW5mbyA9IHsKKyAgbmFtZSAgICAgICAgICA6ICJEZWZpbml0aW9uTGlzdCIsCisgIHZlcnNpb24gICAgICAgOiAiMS4xIiwKKyAgZGV2ZWxvcGVyICAgICA6ICJVZG8gU2NobWFsIiwKKyAgZGV2ZWxvcGVyX3VybCA6ICIiLAorICBjX293bmVyICAgICAgIDogIlVkbyBTY2htYWwiLAorICBsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIgorfTsKKworLy8gdGhlIGxpc3Qgb2YgYnV0dG9ucyBhZGRlZCBieSB0aGlzIHBsdWdpbgorRGVmaW5pdGlvbkxpc3QuYnRuTGlzdCA9IFsgICAgICAgICAvLyBmb3IgbGNfcGFyc2Vfc3RyaW5ncy5waHAKKyAgWyJkbCIsICJkZWZpbml0aW9uIGxpc3QiXSwgICAgICAgLy8gWGluaGEuX2xjKCdkZWZpbml0aW9uIGxpc3QnLCAnRGVmaW5pdGlvbkxpc3QnKTsgCisgIFsiZHQiLCAiZGVmaW5pdGlvbiB0ZXJtIl0sICAgICAgIC8vIFhpbmhhLl9sYygnZGVmaW5pdGlvbiB0ZXJtJywgJ0RlZmluaXRpb25MaXN0Jyk7IAorICBbImRkIiwgImRlZmluaXRpb24gZGVzY3JpcHRpb24iXSAvLyBYaW5oYS5fbGMoJ2RlZmluaXRpb24gZGVzY3JpcHRpb24nLCAnRGVmaW5pdGlvbkxpc3QnKTsgCisgIF07CisKK0RlZmluaXRpb25MaXN0LnByb3RvdHlwZS5fbGMgPSBmdW5jdGlvbihzdHJpbmcpIHsKKyAgcmV0dXJuIFhpbmhhLl9sYyhzdHJpbmcsICdEZWZpbml0aW9uTGlzdCcpOworfTsKKworRGVmaW5pdGlvbkxpc3QucHJvdG90eXBlLm9uR2VuZXJhdGUgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5lZGl0b3IuYWRkRWRpdG9yU3R5bGVzaGVldChYaW5oYS5nZXRQbHVnaW5EaXIoJ0RlZmluaXRpb25MaXN0JykgKyAnL2RlZmluaXRpb24tbGlzdC5jc3MnKTsKK307CisKK0RlZmluaXRpb25MaXN0LnByb3RvdHlwZS5idXR0b25QcmVzcyA9IGZ1bmN0aW9uKGVkaXRvcixidXR0b25faWQpIHsKKyAgdmFyIHBlOworICB2YXIgZHg7CisgIGlmIChidXR0b25faWQ9PSdkbCcpIHsgLy9kZWZpbml0aW9uIGxpc3QKKyAgICBwZSA9IGVkaXRvci5nZXRQYXJlbnRFbGVtZW50KCk7CisgICAgaWYoIHBlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPSAnYm9keScgKSB7CisgICAgICB3aGlsZSAocGUucGFyZW50Tm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT0gJ2JvZHknKSB7CisgICAgICAgIHBlID0gcGUucGFyZW50Tm9kZTsKKyAgICAgIH0KKyAgICB9CisgICAgZHggPSBlZGl0b3IuX2RvYy5jcmVhdGVFbGVtZW50KGJ1dHRvbl9pZCk7CisgICAgZHguaW5uZXJIVE1MID0gJyZuYnNwOyc7CisgICAgaWYoIHBlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnYm9keScgKSB7CisgICAgICBwZS5hcHBlbmRDaGlsZChkeCk7CisgICAgfWVsc2UgaWYocGUucGFyZW50Tm9kZS5sYXN0Q2hpbGQ9PXBlKSB7CisgICAgICBwZS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGR4KTsKKyAgICB9ZWxzZXsKKyAgICAgIHBlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGR4LHBlLm5leHRTaWJsaW5nKTsKKyAgICB9CisgIH0gZWxzZSBpZiAoKGJ1dHRvbl9pZD09J2R0Jyl8fChidXR0b25faWQ9PSdkZCcpKSB7IC8vZGVmaW5pdGlvbiB0ZXJtIG9yIGRlc2NyaXB0aW9uCisgICAgcGUgPSBlZGl0b3IuZ2V0UGFyZW50RWxlbWVudCgpOworICAgIHdoaWxlIChwZSAmJiAocGUubm9kZVR5cGUgPT0gMSkgJiYgKHBlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPSAnYm9keScpKSB7CisgICAgICBpZihwZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2RsJykgeworICAgICAgICBkeCA9IGVkaXRvci5fZG9jLmNyZWF0ZUVsZW1lbnQoYnV0dG9uX2lkKTsKKyAgICAgICAgZHguaW5uZXJIVE1MID0gJyZuYnNwOyc7CisgICAgICAgIHBlLmFwcGVuZENoaWxkKGR4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9ZWxzZSBpZigocGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdkdCcpfHwocGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdkZCcpKXsKKyAgICAgICAgZHggPSBlZGl0b3IuX2RvYy5jcmVhdGVFbGVtZW50KGJ1dHRvbl9pZCk7CisgICAgICAgIGR4LmlubmVySFRNTCA9ICcmbmJzcDsnOworICAgICAgICBpZihwZS5wYXJlbnROb2RlLmxhc3RDaGlsZD09cGUpIHsKKyAgICAgICAgcGUucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChkeCk7CisgICAgICAgIH1lbHNleworICAgICAgICAgIHBlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGR4LHBlLm5leHRTaWJsaW5nKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHBlID0gcGUucGFyZW50Tm9kZTsKKyAgICB9CisgICAgaWYocGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdib2R5JykKKyAgYWxlcnQoJ1lvdSBjYW4gaW5zZXJ0IGEgZGVmaW5pdGlvbiB0ZXJtIG9yIGRlc2NyaXB0aW9uIG9ubHkgaW4gYSBkZWZpbml0aW9uIGxpc3QhJyk7CisgIH0KK307CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0RlZmluaXRpb25MaXN0L2RlZmluaXRpb24tbGlzdC5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0RlZmluaXRpb25MaXN0L2RlZmluaXRpb24tbGlzdC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlNTlkNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRGVmaW5pdGlvbkxpc3QvZGVmaW5pdGlvbi1saXN0LmNzcwpAQCAtMCwwICsxLDE1IEBACitkbCB7IGJvcmRlcjogMXB4IGRvdHRlZCAjODAwMDAwOyB9CitkdCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChpbWcvZWRfZHQuZ2lmKTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7CisgIHBhZGRpbmctbGVmdDogMTlweDsKKyAgY29sb3I6ICM4MDAwMDA7Cit9CitkZCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChpbWcvZWRfZGQuZ2lmKTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7CisgIHBhZGRpbmctbGVmdDogMTlweDsKKyAgY29sb3I6ICM4MDAwMDA7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9EZWZpbml0aW9uTGlzdC9pbWcvZWRfZGQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9EZWZpbml0aW9uTGlzdC9pbWcvZWRfZGQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YjI1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0RlZmluaXRpb25MaXN0L2ltZy9lZF9kZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9EZWZpbml0aW9uTGlzdC9pbWcvZWRfZGwuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9EZWZpbml0aW9uTGlzdC9pbWcvZWRfZGwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlOWIzNzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0RlZmluaXRpb25MaXN0L2ltZy9lZF9kbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9EZWZpbml0aW9uTGlzdC9pbWcvZWRfZHQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9EZWZpbml0aW9uTGlzdC9pbWcvZWRfZHQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3Nzc3MGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0RlZmluaXRpb25MaXN0L2ltZy9lZF9kdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9EZWZpbml0aW9uTGlzdC9sYW5nL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9EZWZpbml0aW9uTGlzdC9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhODMzZDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0RlZmluaXRpb25MaXN0L2xhbmcvamEuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJkZWZpbml0aW9uIGRlc2NyaXB0aW9uIjogIuWumue+qeOBruiqrOaYjiIsCisgICAgImRlZmluaXRpb24gbGlzdCI6ICLlrprnvqnjg6rjgrnjg4giLAorICAgICJkZWZpbml0aW9uIHRlcm0iOiAi5a6a576p6KqeIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0RlZmluaXRpb25MaXN0L2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRGVmaW5pdGlvbkxpc3QvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMTAyNGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0RlZmluaXRpb25MaXN0L2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDI3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgImRlZmluaXRpb24gZGVzY3JpcHRpb24iOiAiIiwKKyAgICAiZGVmaW5pdGlvbiBsaXN0IjogIiIsCisgICAgImRlZmluaXRpb24gdGVybSI6ICIiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9EZWZpbml0aW9uTGlzdC9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9EZWZpbml0aW9uTGlzdC9sYW5nL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YzFiZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0RlZmluaXRpb25MaXN0L2xhbmcvbmwuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJubCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJkZWZpbml0aW9uIGRlc2NyaXB0aW9uIjogImRlZmluaXRpZSBvbXNjaHJpanZpbmciLAorICAgICJkZWZpbml0aW9uIGxpc3QiOiAiZGVmaW5pdGllIGxpanN0IiwKKyAgICAiZGVmaW5pdGlvbiB0ZXJtIjogImRlZmluaXRpZSB0ZXJtIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0RlZmluaXRpb25MaXN0L2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0RlZmluaXRpb25MaXN0L2xhbmcvcHRfYnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZhMWMyZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRGVmaW5pdGlvbkxpc3QvbGFuZy9wdF9ici5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgImRlZmluaXRpb24gZGVzY3JpcHRpb24iOiAiRGVzY3Jpw6fDo28gZGUgZGVmaW5pw6fDo28iLAorICAgICJkZWZpbml0aW9uIGxpc3QiOiAiTGlzdGEgZGUgZGVmaW5pw6fDo28iLAorICAgICJkZWZpbml0aW9uIHRlcm0iOiAiVGVybW8gZGUgZGVmaW5pw6fDo28iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRGVmaW5pdGlvbkxpc3QvbGFuZy9ydS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRGVmaW5pdGlvbkxpc3QvbGFuZy9ydS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGQxZWUyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9EZWZpbml0aW9uTGlzdC9sYW5nL3J1LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicnUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiZGVmaW5pdGlvbiBkZXNjcmlwdGlvbiI6ICLQn9C+0Y/RgdC90LXQvdC40LUiLAorICAgICJkZWZpbml0aW9uIGxpc3QiOiAi0KHQv9C40YHQvtC6INGBINC+0L/RgNC10LTQtdC70LXQvdC40LXQvCIsCisgICAgImRlZmluaXRpb24gdGVybSI6ICLQl9Cw0LPQvtC70L7QstC+0LoiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRHluYW1pY0NTUy9EeW5hbWljQ1NTLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9EeW5hbWljQ1NTL0R5bmFtaWNDU1MuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUxYTBmMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRHluYW1pY0NTUy9EeW5hbWljQ1NTLmpzCkBAIC0wLDAgKzEsMjM3IEBACisvLyBEeW5hbWljIENTUyAoY2xhc3NOYW1lKSBwbHVnaW4gZm9yIEhUTUxBcmVhCisvLyBTcG9uc29yZWQgYnkgaHR0cDovL3d3dy5zeXN0ZW1jb25jZXB0LmRlCisvLyBJbXBsZW1lbnRhdGlvbiBieSBIb2xnZXIgSGVlcworLy8KKy8vIChjKSBzeXN0ZW1jb25jZXB0LmRlIDIwMDQKKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKworZnVuY3Rpb24gRHluYW1pY0NTUyhlZGl0b3IsIGFyZ3MpIHsKKyAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisgIHZhciBjZmcgPSBlZGl0b3IuY29uZmlnOworICB2YXIgc2VsZiA9IHRoaXM7CisKKy8qdmFyIGNzc0FycmF5PW51bGw7CisgIHZhciBjc3NMZW5ndGg9MDsqLworICB2YXIgbGFzdFRhZz1udWxsOworICB2YXIgbGFzdENsYXNzPW51bGw7CisKKyAgdmFyIGNzc19jbGFzcyA9IHsKKyAgICBpZCAgICAgICAgIDogIkR5bmFtaWNDU1MtY2xhc3MiLAorICAgIHRvb2x0aXAgICAgICAgOiB0aGlzLl9sYygiQ2hvb3NlIHN0eWxlc2hlZXQiKSwKKyAgICBvcHRpb25zICAgIDogeyIiOiIifSwKKyAgICBhY3Rpb24gICAgIDogZnVuY3Rpb24oZWRpdG9yKSB7IHNlbGYub25TZWxlY3QoZWRpdG9yLCB0aGlzKTsgfSwKKyAgICByZWZyZXNoICAgIDogZnVuY3Rpb24oZWRpdG9yKSB7IHNlbGYudXBkYXRlVmFsdWUoZWRpdG9yLCB0aGlzKTsgfQorICB9OworICBjZmcucmVnaXN0ZXJEcm9wZG93bihjc3NfY2xhc3MpOworICBjZmcuYWRkVG9vbGJhckVsZW1lbnQoWyJUW0NTU10iLCAiRHluYW1pY0NTUy1jbGFzcyIsICJzZXBhcmF0b3IiXSAsICJmb3JtYXRibG9jayIsIC0xKTsKK30KKworRHluYW1pY0NTUy5wYXJzZVN0eWxlU2hlZXQ9ZnVuY3Rpb24oZWRpdG9yKXsKKyAgICAgICAgaWZyYW1lID0gZWRpdG9yLl9pZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDsKKworICAgICAgICBjc3NBcnJheT1EeW5hbWljQ1NTLmNzc0FycmF5OworICAgICAgICBpZighY3NzQXJyYXkpIGNzc0FycmF5PW5ldyBBcnJheSgpOworCisgICAgICAgIGZvcihpPTA7aTxpZnJhbWUuc3R5bGVTaGVldHMubGVuZ3RoO2krKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYoaWZyYW1lLnN0eWxlU2hlZXRzW2ldLnRpdGxlID09ICJYaW5oYUludGVybmFsQ1NTIikgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE1vemlsbGEKKyAgICAgICAgICAgIGlmKFhpbmhhLmlzX2dlY2tvKXsKKyAgICAgICAgICAgICAgICB0cnl7CisgICAgICAgICAgICAgICAgICAgIGNzc0FycmF5PUR5bmFtaWNDU1MuYXBwbHlDU1NSdWxlKGlmcmFtZS5zdHlsZVNoZWV0c1tpXS5jc3NSdWxlcyxjc3NBcnJheSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoKGUpeworICAgICAgICAgICAgICAgICAgICAvL2FsZXJ0KGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIElFCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0cnl7CisgICAgICAgICAgICAgICAgICAgIGlmKGlmcmFtZS5zdHlsZVNoZWV0c1tpXS5ydWxlcyl7CisgICAgICAgICAgICAgICAgICAgICAgICBjc3NBcnJheT1EeW5hbWljQ1NTLmFwcGx5Q1NTUnVsZShpZnJhbWUuc3R5bGVTaGVldHNbaV0ucnVsZXMsY3NzQXJyYXkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIEBpbXBvcnQgU3R5bGVTaGVldHMgKElFKQorICAgICAgICAgICAgICAgICAgICBpZihpZnJhbWUuc3R5bGVTaGVldHNbaV0uaW1wb3J0cyl7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaj0wO2o8aWZyYW1lLnN0eWxlU2hlZXRzW2ldLmltcG9ydHMubGVuZ3RoO2orKyl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzQXJyYXk9RHluYW1pY0NTUy5hcHBseUNTU1J1bGUoaWZyYW1lLnN0eWxlU2hlZXRzW2ldLmltcG9ydHNbal0ucnVsZXMsY3NzQXJyYXkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhdGNoKGUpeworICAgICAgICAgICAgICAgICAgICAvL2FsZXJ0KGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBEeW5hbWljQ1NTLmNzc0FycmF5PWNzc0FycmF5OworfTsKKworRHluYW1pY0NTUy5hcHBseUNTU1J1bGU9ZnVuY3Rpb24oY3NzUnVsZXMsY3NzQXJyYXkpeworICAgIGZvcihydWxlIGluIGNzc1J1bGVzKXsKKyAgICAgICAgaWYodHlwZW9mIGNzc1J1bGVzW3J1bGVdID09ICdmdW5jdGlvbicpIGNvbnRpbnVlOworICAgICAgICAvLyBTdHlsZVJ1bGUKKyAgICAgICAgaWYoY3NzUnVsZXNbcnVsZV0uc2VsZWN0b3JUZXh0KXsKKyAgICAgICAgICAgIGlmKGNzc1J1bGVzW3J1bGVdLnNlbGVjdG9yVGV4dC5zZWFyY2goLzorLyk9PS0xKXsKKworICAgICAgICAgICAgICAgIC8vIHNwbGl0IGVxdWFsIFN0eWxlcyAoTW96aWxsYS1zcGVjaWZpYykgZS5xLiBoZWFkLCBib2R5IHtib3JkZXI6MHB4fQorICAgICAgICAgICAgICAgIC8vIGZvciBpZSBub3QgcmVsZXZhbnQuIHJldHVybnMgYWxsd2F5cyBvbmUgZWxlbWVudAorICAgICAgICAgICAgICAgIGNzc0VsZW1lbnRzID0gY3NzUnVsZXNbcnVsZV0uc2VsZWN0b3JUZXh0LnNwbGl0KCIsIik7CisgICAgICAgICAgICAgICAgZm9yKGs9MDtrPGNzc0VsZW1lbnRzLmxlbmd0aDtrKyspeworICAgICAgICAgICAgICAgICAgICBjc3NFbGVtZW50ID0gY3NzRWxlbWVudHNba10uc3BsaXQoIi4iKTsKKworICAgICAgICAgICAgICAgICAgICB0YWdOYW1lPWNzc0VsZW1lbnRbMF0udG9Mb3dlckNhc2UoKS50cmltKCk7CisgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1jc3NFbGVtZW50WzFdOworCisgICAgICAgICAgICAgICAgICAgIGlmKCF0YWdOYW1lKSB0YWdOYW1lPSdhbGwnOworICAgICAgICAgICAgICAgICAgICBpZighY3NzQXJyYXlbdGFnTmFtZV0pIGNzc0FycmF5W3RhZ05hbWVdPW5ldyBBcnJheSgpOworCisgICAgICAgICAgICAgICAgICAgIGlmKGNsYXNzTmFtZSl7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0YWdOYW1lPT0nYWxsJykgY3NzTmFtZT1jbGFzc05hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGNzc05hbWU9JzwnK2NsYXNzTmFtZSsnPic7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nbm9uZSc7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0YWdOYW1lPT0nYWxsJykgY3NzTmFtZT1YaW5oYS5fbGMoIkRlZmF1bHQiLCAnRHluYW1pY0NTUycpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBjc3NOYW1lPSc8JytYaW5oYS5fbGMoIkRlZmF1bHQiLCAnRHluYW1pY0NTUycpKyc+JzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjc3NBcnJheVt0YWdOYW1lXVtjbGFzc05hbWVdPWNzc05hbWU7CisgICAgICAgICAgICAgICAgICAgIER5bmFtaWNDU1MuY3NzTGVuZ3RoKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEltcG9ydFJ1bGUgKE1vemlsbGEpCisgICAgICAgIGVsc2UgaWYoY3NzUnVsZXNbcnVsZV0uc3R5bGVTaGVldCl7CisgICAgICAgICAgICBjc3NBcnJheT1EeW5hbWljQ1NTLmFwcGx5Q1NTUnVsZShjc3NSdWxlc1tydWxlXS5zdHlsZVNoZWV0LmNzc1J1bGVzLGNzc0FycmF5KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY3NzQXJyYXk7Cit9OworCitEeW5hbWljQ1NTLl9wbHVnaW5JbmZvID0geworICBuYW1lICAgICAgICAgIDogIkR5bmFtaWNDU1MiLAorICB2ZXJzaW9uICAgICAgIDogIjEuNS4yIiwKKyAgZGV2ZWxvcGVyICAgICA6ICJIb2xnZXIgSGVlcyIsCisgIGRldmVsb3Blcl91cmwgOiAiaHR0cDovL3d3dy5zeXN0ZW1jb25jZXB0LmRlLyIsCisgIGNfb3duZXIgICAgICAgOiAiSG9sZ2VyIEhlZXMiLAorICBzcG9uc29yICAgICAgIDogIlN5c3RlbSBDb25jZXB0IEdtYkgiLAorICBzcG9uc29yX3VybCAgIDogImh0dHA6Ly93d3cuc3lzdGVtY29uY2VwdC5kZS8iLAorICBsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIgorfTsKKworRHluYW1pY0NTUy5wcm90b3R5cGUuX2xjID0gZnVuY3Rpb24oc3RyaW5nKSB7CisgICAgcmV0dXJuIFhpbmhhLl9sYyhzdHJpbmcsICdEeW5hbWljQ1NTJyk7Cit9OworCitEeW5hbWljQ1NTLnByb3RvdHlwZS5vblNlbGVjdCA9IGZ1bmN0aW9uKGVkaXRvciwgb2JqKSB7CisgICAgdmFyIHRib2JqID0gZWRpdG9yLl90b29sYmFyT2JqZWN0c1tvYmouaWRdOworICAgIHZhciBpbmRleCA9IHRib2JqLmVsZW1lbnQuc2VsZWN0ZWRJbmRleDsKKyAgICB2YXIgY2xhc3NOYW1lID0gdGJvYmouZWxlbWVudC52YWx1ZTsKKworICAgIHZhciBwYXJlbnQgPSBlZGl0b3IuZ2V0UGFyZW50RWxlbWVudCgpOworCisgICAgaWYoY2xhc3NOYW1lIT0nbm9uZScpeworICAgICAgICBwYXJlbnQuY2xhc3NOYW1lPWNsYXNzTmFtZTsKKyAgICAgICAgRHluYW1pY0NTUy5sYXN0Q2xhc3M9Y2xhc3NOYW1lOworICAgIH0KKyAgICBlbHNleworICAgICAgICBpZihYaW5oYS5pc19nZWNrbykgcGFyZW50LnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTsKKyAgICAgICAgZWxzZSBwYXJlbnQucmVtb3ZlQXR0cmlidXRlKCdjbGFzc05hbWUnKTsKKyAgICB9CisgICAgZWRpdG9yLnVwZGF0ZVRvb2xiYXIoKTsKK307CisKKy8qRHluYW1pY0NTUy5wcm90b3R5cGUub25Nb2RlID0gZnVuY3Rpb24obW9kZSkgeworICAgIGlmKG1vZGU9PSd3eXNpd3lnJyl7CisgICAgICAgIC8vIHJlcGFyc2UgcG9zc2libGUgY2hhbmdlZCBjc3MgZmlsZXMKKyAgICAgICAgRHluYW1pY0NTUy5jc3NBcnJheT1udWxsOworICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKHRoaXMuZWRpdG9yLHRoaXMuZWRpdG9yLmNvbmZpZy5jdXN0b21TZWxlY3RzWyJEeW5hbWljQ1NTLWNsYXNzIl0pOworICAgIH0KK30qLworCitEeW5hbWljQ1NTLnByb3RvdHlwZS5yZXBhcnNlVGltZXIgPSBmdW5jdGlvbihlZGl0b3IsIG9iaiwgaW5zdGFuY2UpIHsKKyAgICAvLyBuZXcgYXR0ZW1wdCBvZiByZXNjYW4gc3R5bGVzaGVldHMgaW4gMSwyLDQgYW5kIDggc2Vjb25kIChlLmcuIGZvciBleHRlcm5hbCBjc3MtZmlsZXMgd2l0aCBsb25nZXIgaW5pdGlhbGlzYXRpb24pCisgICAgaWYoRHluYW1pY0NTUy5wYXJzZUNvdW50PDkpeworICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIER5bmFtaWNDU1MuY3NzTGVuZ3RoPTA7CisgICAgICAgICAgICBEeW5hbWljQ1NTLnBhcnNlU3R5bGVTaGVldChlZGl0b3IpOworICAgICAgICAgICAgaWYoRHluYW1pY0NTUy5jc3NPbGRMZW5ndGghPUR5bmFtaWNDU1MuY3NzTGVuZ3RoKXsKKyAgICAgICAgICAgICAgICBEeW5hbWljQ1NTLmNzc09sZExlbmd0aD1EeW5hbWljQ1NTLmNzc0xlbmd0aDsKKyAgICAgICAgICAgICAgICBEeW5hbWljQ1NTLmxhc3RDbGFzcz1udWxsOworICAgICAgICAgICAgICAgIGluc3RhbmNlLnVwZGF0ZVZhbHVlKGVkaXRvciwgb2JqKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluc3RhbmNlLnJlcGFyc2VUaW1lcihlZGl0b3IsIG9iaiwgaW5zdGFuY2UpOworICAgICAgICB9LER5bmFtaWNDU1MucGFyc2VDb3VudCoxMDAwKTsKKyAgICAgICAgRHluYW1pY0NTUy5wYXJzZUNvdW50PUR5bmFtaWNDU1MucGFyc2VDb3VudCoyOworICAgIH0KK307CisKK0R5bmFtaWNDU1MucHJvdG90eXBlLnVwZGF0ZVZhbHVlID0gZnVuY3Rpb24oZWRpdG9yLCBvYmopIHsKKyAgICAgICAgY3NzQXJyYXk9RHluYW1pY0NTUy5jc3NBcnJheTsKKyAgICAgICAgLy8gaW5pdGlhbCBzdHlsZSBpbml0CisgICAgICAgIGlmKCFjc3NBcnJheSl7CisgICAgICAgICAgICBEeW5hbWljQ1NTLmNzc0xlbmd0aD0wOworICAgICAgICAgICAgRHluYW1pY0NTUy5wYXJzZVN0eWxlU2hlZXQoZWRpdG9yKTsKKyAgICAgICAgICAgIGNzc0FycmF5PUR5bmFtaWNDU1MuY3NzQXJyYXk7CisgICAgICAgICAgICBEeW5hbWljQ1NTLmNzc09sZExlbmd0aD1EeW5hbWljQ1NTLmNzc0xlbmd0aDsKKyAgICAgICAgICAgIER5bmFtaWNDU1MucGFyc2VDb3VudD0xOworICAgICAgICAgICAgdGhpcy5yZXBhcnNlVGltZXIoZWRpdG9yLG9iaix0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBwYXJlbnQgPSBlZGl0b3IuZ2V0UGFyZW50RWxlbWVudCgpOworICAgICAgICB2YXIgdGFnTmFtZSA9IHBhcmVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgIHZhciBjbGFzc05hbWUgPSBwYXJlbnQuY2xhc3NOYW1lOworCisgICAgICAgIGlmKHRoaXMubGFzdFRhZyE9dGFnTmFtZSB8fCB0aGlzLmxhc3RDbGFzcyE9Y2xhc3NOYW1lKXsKKyAgICAgICAgICAgIHRoaXMubGFzdFRhZz10YWdOYW1lOworICAgICAgICAgICAgdGhpcy5sYXN0Q2xhc3M9Y2xhc3NOYW1lOworCisgICAgICAgICAgICB2YXIgc2VsZWN0ID0gZWRpdG9yLl90b29sYmFyT2JqZWN0c1tvYmouaWRdLmVsZW1lbnQ7CisKKyAgICAgICAgICAgIHdoaWxlKHNlbGVjdC5sZW5ndGg+MCl7CisgICAgICAgICAgICAgICAgc2VsZWN0Lm9wdGlvbnNbc2VsZWN0Lmxlbmd0aC0xXSA9IG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNlbGVjdC5vcHRpb25zWzBdPW5ldyBPcHRpb24odGhpcy5fbGMoIkRlZmF1bHQiKSwnbm9uZScpOworICAgICAgICAgICAgaWYoY3NzQXJyYXkpeworICAgICAgICAgICAgICAgIC8vIHN0eWxlIGNsYXNzIG9ubHkgYWxsb3dlZCBpZiBwYXJlbnQgdGFnIGlzIG5vdCBib2R5IG9yIGVkaXRvciBpcyBpbiBmdWxscGFnZSBtb2RlCisgICAgICAgICAgICAgICAgaWYodGFnTmFtZSE9J2JvZHknIHx8IGVkaXRvci5jb25maWcuZnVsbFBhZ2UpeworICAgICAgICAgICAgICAgICAgICBpZihjc3NBcnJheVt0YWdOYW1lXSl7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoY3NzQ2xhc3MgaW4gY3NzQXJyYXlbdGFnTmFtZV0peworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBjc3NBcnJheVt0YWdOYW1lXVtjc3NDbGFzc10gIT0gJ3N0cmluZycpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNzc0NsYXNzPT0nbm9uZScpIHNlbGVjdC5vcHRpb25zWzBdPW5ldyBPcHRpb24oY3NzQXJyYXlbdGFnTmFtZV1bY3NzQ2xhc3NdLGNzc0NsYXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHNlbGVjdC5vcHRpb25zW3NlbGVjdC5sZW5ndGhdPW5ldyBPcHRpb24oY3NzQXJyYXlbdGFnTmFtZV1bY3NzQ2xhc3NdLGNzc0NsYXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmKGNzc0FycmF5WydhbGwnXSl7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoY3NzQ2xhc3MgaW4gY3NzQXJyYXlbJ2FsbCddKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgY3NzQXJyYXlbJ2FsbCddW2Nzc0NsYXNzXSAhPSAnc3RyaW5nJykgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0Lm9wdGlvbnNbc2VsZWN0Lmxlbmd0aF09bmV3IE9wdGlvbihjc3NBcnJheVsnYWxsJ11bY3NzQ2xhc3NdLGNzc0NsYXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKGNzc0FycmF5W3RhZ05hbWVdICYmIGNzc0FycmF5W3RhZ05hbWVdWydub25lJ10pIHNlbGVjdC5vcHRpb25zWzBdPW5ldyBPcHRpb24oY3NzQXJyYXlbdGFnTmFtZV1bJ25vbmUnXSwnbm9uZScpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZWxlY3Quc2VsZWN0ZWRJbmRleCA9IDA7CisKKyAgICAgICAgICAgIGlmICh0eXBlb2YgY2xhc3NOYW1lICE9ICJ1bmRlZmluZWQiICYmIC9cUy8udGVzdChjbGFzc05hbWUpKSB7CisgICAgICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSBzZWxlY3Qub3B0aW9uczsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gb3B0aW9ucy5sZW5ndGg7IC0taSA+PSAwOykgeworICAgICAgICAgICAgICAgICAgICB2YXIgb3B0aW9uID0gb3B0aW9uc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBvcHRpb24udmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0ZWRJbmRleCA9IGk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoc2VsZWN0LnNlbGVjdGVkSW5kZXggPT0gMCl7CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5vcHRpb25zW3NlbGVjdC5sZW5ndGhdPW5ldyBPcHRpb24odGhpcy5fbGMoIlVuZGVmaW5lZCIpLGNsYXNzTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3RlZEluZGV4PXNlbGVjdC5sZW5ndGgtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKHNlbGVjdC5sZW5ndGg+MSkgc2VsZWN0LmRpc2FibGVkPWZhbHNlOworICAgICAgICAgICAgZWxzZSBzZWxlY3QuZGlzYWJsZWQ9dHJ1ZTsKKyAgICAgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0R5bmFtaWNDU1MvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRHluYW1pY0NTUy9sYW5nL2RlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMmE3YzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0R5bmFtaWNDU1MvbGFuZy9kZS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNob29zZSBzdHlsZXNoZWV0IjogIlfDpGhsZW4gU2llIGVpbmVuIFN0eWxlU2hlZXQgYXVzIiwKKyAgICAiRGVmYXVsdCI6ICJTdGFuZGFyZCIsCisgICAgIlVuZGVmaW5lZCI6ICJOaWNodCBkZWZpbmllcnQiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRHluYW1pY0NTUy9sYW5nL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9EeW5hbWljQ1NTL2xhbmcvZnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBlYTdiOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRHluYW1pY0NTUy9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2hvb3NlIHN0eWxlc2hlZXQiOiAiQ2hvaXNpciBmZXVpbGxlIGRlIHN0eWxlIiwKKyAgICAiRGVmYXVsdCI6ICJEw6lmYXV0IiwKKyAgICAiVW5kZWZpbmVkIjogIk5vbiBkw6lmaW5pIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0R5bmFtaWNDU1MvbGFuZy9qYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRHluYW1pY0NTUy9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZGNmZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0R5bmFtaWNDU1MvbGFuZy9qYS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNob29zZSBzdHlsZXNoZWV0IjogIuOCueOCv+OCpOODq+OCt+ODvOODiOOBrumBuOaKniIsCisgICAgIkRlZmF1bHQiOiAi44Gq44GXIiwKKyAgICAiVW5kZWZpbmVkIjogIuacquWumue+qSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9EeW5hbWljQ1NTL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRHluYW1pY0NTUy9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE4YzNkNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRHluYW1pY0NTUy9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSwyNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICJDaG9vc2Ugc3R5bGVzaGVldCI6ICIiLAorICAgICJEZWZhdWx0IjogIiIsCisgICAgIlVuZGVmaW5lZCI6ICIiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9EeW5hbWljQ1NTL2xhbmcvbmIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0R5bmFtaWNDU1MvbGFuZy9uYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGIwODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9EeW5hbWljQ1NTL2xhbmcvbmIuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJuYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDaG9vc2Ugc3R5bGVzaGVldCI6ICJWZWxnIHN0aWxzZXR0IiwKKyAgICAiRGVmYXVsdCI6ICJTdGFuZGFyZCIsCisgICAgIlVuZGVmaW5lZCI6ICJVZGVmaW5lcnQiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRHluYW1pY0NTUy9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9EeW5hbWljQ1NTL2xhbmcvbmwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE4NDUwNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRHluYW1pY0NTUy9sYW5nL25sLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2hvb3NlIHN0eWxlc2hlZXQiOiAiS2llcyBzdHlsZXNoZWV0IiwKKyAgICAiRGVmYXVsdCI6ICJEZWZhdWx0IiwKKyAgICAiVW5kZWZpbmVkIjogIlVuZ2VkZWZpbmllZXJkIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0R5bmFtaWNDU1MvbGFuZy9wdF9ici5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRHluYW1pY0NTUy9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMmM5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0R5bmFtaWNDU1MvbGFuZy9wdF9ici5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNob29zZSBzdHlsZXNoZWV0IjogIkVzY29saGVyIGVzdGlsbyIsCisgICAgIkRlZmF1bHQiOiAiUGFkcsOjbyIsCisgICAgIlVuZGVmaW5lZCI6ICJJbmRlZmluaWRvIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvRWRpdFRhZy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9FZGl0VGFnLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNzBkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvRWRpdFRhZy5qcwpAQCAtMCwwICsxLDU2IEBACisvLyBDaGFyYWN0ZXIgTWFwIHBsdWdpbiBmb3IgWGluaGENCisvLyBTcG9uc29yZWQgYnkgaHR0cDovL3d3dy5zeXN0ZW1jb25jZXB0LmRlDQorLy8gSW1wbGVtZW50YXRpb24gYnkgSG9sZ2VyIEhlZXMgYmFzZWQgb24gSFRNTEFyZWEgWFREIDEuNSAoaHR0cDovL21vc2ZvcmdlLm5ldC9wcm9qZWN0cy9odG1sYXJlYTN4dGQvKQ0KKy8vIE9yaWdpbmFsIEF1dGhvciAtIEJlcm5oYXJkIFBmZWlmZXIgbm92b2NhaW5lQGdteC5uZXQgDQorLy8NCisvLyAoYykgc3lzdGVtY29uY2VwdC5kZSAyMDA0DQorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgWGluaGEgaXRzZWxmLg0KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4NCisNCitmdW5jdGlvbiBFZGl0VGFnKGVkaXRvcikgew0KKyAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7DQorCXZhciBjZmcgPSBlZGl0b3IuY29uZmlnOw0KKwl2YXIgc2VsZiA9IHRoaXM7DQorICAgICAgICANCisJY2ZnLnJlZ2lzdGVyQnV0dG9uKHsNCisgICAgICAgICAgICAgICAgaWQgICAgICAgOiAiZWRpdHRhZyIsDQorICAgICAgICAgICAgICAgIHRvb2x0aXAgIDogdGhpcy5fbGMoIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCIpLA0KKyAgICAgICAgICAgICAgICBpbWFnZSAgICA6IGVkaXRvci5pbWdVUkwoImVkX2VkaXRfdGFnLmdpZiIsICJFZGl0VGFnIiksDQorICAgICAgICAgICAgICAgIHRleHRNb2RlIDogZmFsc2UsDQorICAgICAgICAgICAgICAgIGFjdGlvbiAgIDogZnVuY3Rpb24oZWRpdG9yKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1dHRvblByZXNzKGVkaXRvcik7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0pOw0KKw0KKwljZmcuYWRkVG9vbGJhckVsZW1lbnQoImVkaXR0YWciLCAiaHRtbG1vZGUiLDEpOw0KKw0KK30NCisNCitFZGl0VGFnLl9wbHVnaW5JbmZvID0gew0KKwluYW1lICAgICAgICAgIDogIkVkaXRUYWciLA0KKwl2ZXJzaW9uICAgICAgIDogIjEuMCIsDQorCWRldmVsb3BlciAgICAgOiAiUGVnb3Jhcm8gTWFyY28iLA0KKwlkZXZlbG9wZXJfdXJsIDogImh0dHA6Ly93d3cuc2luLWl0YWxpYS5jb20vIiwNCisJY19vd25lciAgICAgICA6ICJNYXJjbyBQZWdvcmFybyIsDQorCXNwb25zb3IgICAgICAgOiAiU2luIEl0YWxpYSIsDQorCXNwb25zb3JfdXJsICAgOiAiaHR0cDovL3d3dy5zaW4taXRhbGlhLmNvbS8iLA0KKwlsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIg0KK307DQorDQorRWRpdFRhZy5wcm90b3R5cGUuX2xjID0gZnVuY3Rpb24oc3RyaW5nKSB7DQorICAgIHJldHVybiBYaW5oYS5fbGMoc3RyaW5nLCAnRWRpdFRhZycpOw0KK307DQorDQorRWRpdFRhZy5wcm90b3R5cGUuYnV0dG9uUHJlc3MgPSBmdW5jdGlvbihlZGl0b3IpIHsNCisJLy8gQ29zdHJ1emlvbmUgZGVsbCdvZ2dldHRvIHBhcmFtZXRyaSBkYSBwYXNzYXJlIGFsbGEgZGlhbG9nLg0KKwlvdXRwYXJhbSA9IHsNCisJCWNvbnRlbnQgOiBlZGl0b3IuZ2V0U2VsZWN0ZWRIVE1MKCkNCisJfTsgLy8gRmluZSBjb3N0cnV6aW9uZSBwYXJhbWV0cmkgcGVyIGlsIHBhc3NhZ2dpbyBhbGxhIGRpYWxvZy4NCisJZWRpdG9yLl9wb3B1cERpYWxvZyggInBsdWdpbjovL0VkaXRUYWcvZWRpdF90YWciLCBmdW5jdGlvbiggaHRtbCApIHsNCisJCWlmICggIWh0bWwgKSB7ICANCisJCQkvL3VzZXIgbXVzdCBoYXZlIHByZXNzZWQgQ2FuY2VsDQorCQkJcmV0dXJuIGZhbHNlOw0KKwkJfQ0KKwkJZWRpdG9yLmluc2VydEhUTUwoIGh0bWwgKTsNCisJfSwgb3V0cGFyYW0pOw0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2ltZy9lZF9lZGl0X3RhZy5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvaW1nL2VkX2VkaXRfdGFnLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTY3MWZiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2ltZy9lZF9lZGl0X3RhZy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvY2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9jaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDc4ZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvY2guanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi5Y+W5raIIiwKKyAgICAiT0siOiAi5aW9IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9jei5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL2N6LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2Yjk5MjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9jei5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImN6IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJacnXFoWl0IiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL2RhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvZGEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmYzBkMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL2RhLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGVyIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYxOWVkNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICJIVE1MIGltIGF1c2dld8OkaGx0ZW4gQmVyZWljaCBiZWFyYmVpdGVuIiwKKyAgICAiT0siOiAiT0siLAorICAgICJUYWcgRWRpdG9yIjogIkhUTUwgdGFnIEVkaXRvciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvZWUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9lZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTkxNmU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvZWUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTG9vYnUiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvZWwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9lbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmUwMDZjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvZWwuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciLAorICAgICJPSyI6ICLOlc69z4TOrM6+zrXOuSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjM2MjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvZXMuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlcyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICJFZGl0IEhUTUwgZm9yIHNlbGVjdGVkIHRleHQiOiAiRWRpdGFyIGPDs2RpZ28gSFRNTCBkZWwgdGV4dG8gc2VsZWNjaW9uYWRvIiwKKyAgICAiT0siOiAiQWNlcHRhciIsCisgICAgIlRhZyBFZGl0b3IiOiAiRWRpdG9yIGRlIEV0aXF1ZXRhcyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvZXUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9ldS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmM5ZGJiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvZXUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJldSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiVXR6aSIsCisgICAgIk9LIjogIkFkb3MiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvZmEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlN2Y3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL2ZhLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIsCisgICAgIk9LIjogItio2YTZhyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvZmkuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9maS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjU1MmI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvZmkuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUGVydXV0YSIsCisgICAgIk9LIjogIkh5dsOka3N5IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9mci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMGI5MjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9mci5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGVyIiwKKyAgICAiRWRpdCBIVE1MIGZvciBzZWxlY3RlZCB0ZXh0IjogIkVkaXRlciBsZSBjb2RlIEhUTUwgZHUgdGV4dGUgc8OpbGVjdGlvbm7DqSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiVGFnIEVkaXRvciI6ICJFZGl0ZXVyIGRlIHRhZyBIVE1MIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9oZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MDJmN2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9oZS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImhlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKKyAgICAiT0siOiAi15DXmdep15XXqCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9odS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzg1MjhkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvaHUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJodSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIsCisgICAgIk9LIjogIlJlbmRiZW4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvaXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBhY2I0NQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL2l0LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaXQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGFtZW50byIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9qYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNWM0M2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9qYS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICJFZGl0IEhUTUwgZm9yIHNlbGVjdGVkIHRleHQiOiAi6YG45oqe5Lit44OG44Kt44K544OI44GuSFRNTOOCkue3qOmbhuOBl+OBvuOBmSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiVGFnIEVkaXRvciI6ICLjgr/jgrDjgqjjg4fjgqPjgr8iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL2xjX2Jhc2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmY2Y1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9sY19iYXNlLmpzCkBAIC0wLDAgKzEsMjkgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLworLy8gTEFORzogImVuIiwgRU5DT0RJTkc6IFVURi04CisvLyBBdXRob3I6IFRyYW5zbGF0b3ItTmFtZSwgPGVtYWlsQGV4YW1wbGUuY29tPgorLy8KKy8vIExhc3QgcmV2aXNpb246IDIwMTgtMDQtMTIKKy8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KKy8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyAoUGxlYXNlLCByZW1vdmUgaW5mb3JtYXRpb24gYmVsb3cpCisvLyBGT1IgVFJBTlNMQVRPUlM6CisvLworLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCisvLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCisvLworLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7CisvLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50CisvLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCisKK3sKKyAgICAiQ2FuY2VsIjogIiIsCisgICAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICIiLAorICAgICJFZGl0IFRhZyBCeSBQZWciOiAiIiwKKyAgICAiT0siOiAiIiwKKyAgICAiVGFnIEVkaXRvciI6ICIiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvbHQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9sdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTE4OTA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvbHQuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL2x2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvbHYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzZDVkMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL2x2LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHYiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0Y2VsdCIsCisgICAgIk9LIjogIkxhYmkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQwNzRmMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL25iLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICJSZWRpZ2VyIEhUTUwgZm9yIGRlbiB2YWxndGUgdGVrc3RlbiIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9ubC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOGIyNTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9ubC5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iLAorICAgICJFZGl0IEhUTUwgZm9yIHNlbGVjdGVkIHRleHQiOiAiSFRNTCBiZXdlcmtlbiB2b29yIGdlc2VsZWN0ZWVyZGUgdGVrc3QiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlRhZyBFZGl0b3IiOiAiSFRNTCB0YWcgRWRpdG9yIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL3BsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NzlhZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9wbC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInBsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9wdF9ici5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTU5MjI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvcHRfYnIuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwdF9iciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICJFZGl0IEhUTUwgZm9yIHNlbGVjdGVkIHRleHQiOiAiRWRpdGFyIEhUTUwgcGFyYSB0ZXh0byBzZWxlY2lvbmFkbyIsCisgICAgIkVkaXQgVGFnIEJ5IFBlZyI6ICJFZGl0YXIgVGFnIHBvciBQZWciLAorICAgICJPSyI6ICJPSyIsCisgICAgIlRhZyBFZGl0b3IiOiAiRWRpdG9yIGRlIFRhZyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvcm8uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9yby5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDZlMWMzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvcm8uanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJybyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKKyAgICAiT0siOiAiQWNjZXB0xIMiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFkNTlmMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL3J1LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicnUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9zaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL3NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZTc2ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9zaC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9zaS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL3NpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NzQ4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy9zaS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiLAorICAgICJPSyI6ICJWIHJlZHUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL3NyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvc3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlZTZmNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL3NyLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL3N2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgzMzZkOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL3N2LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3YiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL3RoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYTljOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvbGFuZy90aC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLguKLguIHguYDguKXguLTguIEiLAorICAgICJPSyI6ICLguJXguIHguKXguIciCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL3RyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvdHIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU1ODQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgIkVkaXQgSFRNTCBmb3Igc2VsZWN0ZWQgdGV4dCI6ICJTZcOnaWxlbiBtZXRpbiBpw6dpbiBIVE1MIGTDvHplbmxlbWVzaSB5YXAiLAorICAgICJPSyI6ICJUYW1hbSIsCisgICAgIlRhZyBFZGl0b3IiOiAiSFRNTCBldGlrZXQgZMO8emVubGV5aWNpc2kiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL3ZuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL2xhbmcvdm4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ4MmUwMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRWRpdFRhZy9sYW5nL3ZuLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidm4iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkjhu6d5IiwKKyAgICAiT0siOiAixJDhu5NuZyDDvSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL3BvcHVwcy9lZGl0X3RhZy5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FZGl0VGFnL3BvcHVwcy9lZGl0X3RhZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZWI1NDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VkaXRUYWcvcG9wdXBzL2VkaXRfdGFnLmh0bWwKQEAgLTAsMCArMSwzOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQorPGh0bWw+DQorPGhlYWQ+DQorICA8dGl0bGU+RWRpdCBUYWcgQnkgUGVnPC90aXRsZT4NCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uLy4uLy4uL3BvcHVwcy9wb3B1cC5jc3MiIC8+DQorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi9wb3B1cHMvcG9wdXAuanMiPjwvc2NyaXB0Pg0KKzxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPg0KKyAgd2luZG93LnJlc2l6ZVRvKDYwMCwgNDUwKTsNCitmdW5jdGlvbiBJbml0KCkgew0KKyAgX19kbGdfdHJhbnNsYXRlKCJFZGl0VGFnIik7DQorICBfX2RsZ19pbml0KCk7DQorDQorICB2YXIgcGFyYW0gPSB3aW5kb3cuZGlhbG9nQXJndW1lbnRzOw0KKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRBRyIpLnZhbHVlID0gcGFyYW1bImNvbnRlbnQiXTsNCisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUQUciKS5mb2N1cygpOw0KK30NCisNCitmdW5jdGlvbiBvbkNhbmNlbCgpIHsNCisgIF9fZGxnX2Nsb3NlKCBudWxsICk7DQorICByZXR1cm4gZmFsc2U7DQorfQ0KKw0KK2Z1bmN0aW9uIG9uT0soKSB7DQorICB2YXIgcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRBRyIpLnZhbHVlOw0KKyAgX19kbGdfY2xvc2UoIHJldCApOw0KK30NCis8L3NjcmlwdD4NCis8L2hlYWQ+DQorDQorPGJvZHkgY2xhc3M9ImRpYWxvZyIgb25Mb2FkPSJJbml0KCk7Ij4NCis8ZGl2IGNsYXNzPSJ0aXRsZSI+VGFnIEVkaXRvcjwvZGl2Pg0KKzx0ZXh0YXJlYSBuYW1lPSJUQUciIGlkPSJUQUciIGNvbHM9MjIgcm93cz01IHN0eWxlPSJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAzMTVweDsgbWFyZ2luLXRvcDogOHB4OyBtYXJnaW4tYm90dG9tOiA0cHg7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IGZvbnQtc2l6ZTogMTFweDsiPjwvdGV4dGFyZWE+DQorPGRpdiBpZD0iYnV0dG9ucyI+DQorICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJvayIgb25jbGljaz0icmV0dXJuIG9uT0soKTsiPk9LPC9idXR0b24+DQorICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBuYW1lPSJjYW5jZWwiIG9uY2xpY2s9InJldHVybiBvbkNhbmNlbCgpOyI+Q2FuY2VsPC9idXR0b24+DQorPC9kaXY+DQorPC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VuY29kZU91dHB1dC9FbmNvZGVPdXRwdXQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VuY29kZU91dHB1dC9FbmNvZGVPdXRwdXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhiN2RlZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRW5jb2RlT3V0cHV0L0VuY29kZU91dHB1dC5qcwpAQCAtMCwwICsxLDI2NCBAQAorLyoqCisgRW5jb2RlT3V0cHV0IGZvciBYaW5oYQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgCisgQXQgdGhlIGxhc3QgbW9tZW50IGJlZm9yZSBzdWJtaXR0aW5nLCBlbmNvZGUgdGhlIHRleHRhcmVhIGludG8gb25lIG9mIHZhcmlvdXMgCisgZW5jb2RpbmdzLCBhbHNvIGRlY29kZSBpdCBpZiB0aGUgdGV4dGFyZWEgaXMgbG9hZGVkIHdpdGggZW5jb2RlZCBjb250ZW50LgorIAorIFRoaXMgaXMgZG9uZSB0byBwcm90ZWN0IGFnYWluc3QgbW9kX3NlY3VyaXR5IHByb2JsZW1zLCBieSBlbmNvZGluZyBpdCBiZWZvcmUKKyBzdWJtaXR0aW5nIHRoZW4gdGhlcmUgaXMgbGVzcyBjaGFuY2UgdGhhdCBtb2Rfc2VjdXJpdHkgd2lsbCBkZXRlY3QgeW91ciAKKyBodG1sIHN1Ym1pc3Npb24gYXMgc29tZXRoaW5nIHVucGxlYXNhbnQuCisgCisgRW5jb2Rpbmcgc3R5bGUgaXMgc3BlY2lmaWVkIHZpYSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBmb3IgZXhhbXBsZQorIAorIHt7eworICAgeGluaGFfY29uZmlnLkVuY29kZU91dHB1dC5lbmNvZGVyID0gJ3IxMyc7CisgfX19CisgCisgVGhlIGF2YWlsYWJsZSBlbmNvZGluZ3MgYXJlOgorICAgCisgKiByMTMgICAtIGh0bWwgaXMgcm90MTMgKGFscGhhbnVtIG9ubHkgaXMgcm90YXRlZCkgICAgICAtLSBwcmVmaXggOiFyMTMhOgorICogYjY0ICAgLSBodG1sIGlzIGJhc2U2NCBlbmNvZGVkICAgICAgICAgICAgICAgICAgICAgICAgLS0gcHJlZml4IDohYjY0IToKKyAqIDY0ciAgIC0gaHRtbCBpcyBiYXNlNjQgZW5jb2RlZCBhbmQgdGhlbiB0aGF0IGlzIHJvdDEzIC0tIHByZWZpeCA6ITY0ciE6CisgKiByNjQgICAtIGh0bWwgaXMgcm90MTMgYW5kIHRoZW4gdGhhdCBpcyBiYXNlNjQgICAgICAgICAtLSBwcmVmaXggOiFyNjQhOgorICogZmFsc2UgLSBubyBlbmNvZGluZyBwZXJmb3JtZWQgKGRlY29kaW5nIHN0aWxsIHdpbGwgaWYgcHJlZml4ZWQpCisgIAorIFlvdSB3aWxsIG9mIGNvdXJzZSBuZWVkIHRvIGRldGVjdCB0aGUgcHJlZml4IChlZyA6IXIxMyE6KSBvbiBmaWVsZHMgaW4geW91ciAKKyBzZXJ2ZXIgc2lkZSBjb2RlIGFuZCB1bmVuY29kZSB0aGVtLCBmb3IgZXhhbXBsZSBpbiBQSFAgeW91IGNhbiBkby4uCisgICAKKyBpZihwcmVnX21hdGNoKCcvXig6IXIxMyE6KS8nLCAkX1BPU1RbJ215SHRtbEFyZWEnXSkpCisgeworICAgLy8gUmVtb3ZlIHRoZSBwcmVmaXgKKyAgICRfUE9TVFsnbXlIdG1sQXJlYSddID0gKHN0cmluZykgc3Vic3RyKCRfUE9TVFsnbXlIdG1sQXJlYSddLCA3KTsKKyAgIAorICAgLy8gcm90MTMgaXQKKyAgICRfUE9TVFsnbXlIdG1sQXJlYSddID0gc3RyX3JvdDEzKCRfUE9TVFsnbXlIdG1sQXJlYSddKTsKKyB9CisgZWxzZWlmKHByZWdfbWF0Y2goJy9eKDohYjY0ITopLycsICRfUE9TVFsnbXlIdG1sQXJlYSddKSkKKyB7CisgICAvLyBSZW1vdmUgdGhlIHByZWZpeAorICAgJF9QT1NUWydteUh0bWxBcmVhJ10gPSAoc3RyaW5nKSBzdWJzdHIoJF9QT1NUWydteUh0bWxBcmVhJ10sIDcpOworICAgCisgICAvLyBiNjQgaXQKKyAgICRfUE9TVFsnbXlIdG1sQXJlYSddID0gYmFzZTY0X2RlY29kZSgkX1BPU1RbJ215SHRtbEFyZWEnXSk7CisgfQorIGVsc2VpZihwcmVnX21hdGNoKCcvXig6ITY0ciE6KS8nLCAkX1BPU1RbJ215SHRtbEFyZWEnXSkpCisgeworICAgLy8gUmVtb3ZlIHRoZSBwcmVmaXgKKyAgICRfUE9TVFsnbXlIdG1sQXJlYSddID0gKHN0cmluZykgc3Vic3RyKCRfUE9TVFsnbXlIdG1sQXJlYSddLCA3KTsKKyAgIAorICAgLy8gcm90MTMgaXQKKyAgICRfUE9TVFsnbXlIdG1sQXJlYSddID0gc3RyX3JvdDEzKCRfUE9TVFsnbXlIdG1sQXJlYSddKTsKKyAgIAorICAgLy8gYjY0IGl0CisgICAkX1BPU1RbJ215SHRtbEFyZWEnXSA9IGJhc2U2NF9kZWNvZGUoJF9QT1NUWydteUh0bWxBcmVhJ10pOworIH0KKyBlbHNlaWYocHJlZ19tYXRjaCgnL14oOiE2NHIhOikvJywgJF9QT1NUWydteUh0bWxBcmVhJ10pKQorIHsKKyAgIC8vIFJlbW92ZSB0aGUgcHJlZml4CisgICAkX1BPU1RbJ215SHRtbEFyZWEnXSA9IChzdHJpbmcpIHN1YnN0cigkX1BPU1RbJ215SHRtbEFyZWEnXSwgNyk7CisgICAKKyAgIC8vIGI2NCBpdAorICAgJF9QT1NUWydteUh0bWxBcmVhJ10gPSBiYXNlNjRfZGVjb2RlKCRfUE9TVFsnbXlIdG1sQXJlYSddKTsKKyAgIAorICAgLy8gcm90MTMgaXQKKyAgICRfUE9TVFsnbXlIdG1sQXJlYSddID0gc3RyX3JvdDEzKCRfUE9TVFsnbXlIdG1sQXJlYSddKTsKKyB9CisKKyovCisKK0VuY29kZU91dHB1dC5fcGx1Z2luSW5mbyA9IHsKKyAgbmFtZSAgICAgICAgICA6ICJFbmNvZGVPdXRwdXQiLAorICB2ZXJzaW9uICAgICAgIDogIjEuMCIsCisgIGRldmVsb3BlciAgICAgOiAiR29nbyBJbnRlcm5ldCBTZXJ2aWNlcyBMaW1pdGVkIiwKKyAgZGV2ZWxvcGVyX3VybCA6ICJodHRwOi8vd3d3LmdvZ28uY28ubnoiLAorICBzcG9uc29yICAgICAgIDogIiIsCisgIHNwb25zb3JfdXJsICAgOiAiIiwKKyAgbGljZW5zZSAgICAgICA6ICJodG1sQXJlYSIKK30KKworWGluaGEuQ29uZmlnLnByb3RvdHlwZS5FbmNvZGVPdXRwdXQgPSAKK3sKKyAgLy8gT25lIG9mCisgIC8vIAorICAvLyAgIHIxMyAgIC0gaHRtbCBpcyByb3QxMyAoYWxwaGFudW0gb25seSBpcyByb3RhdGVkKSAgICAgIC0tIHByZWZpeCA6IXIxMyE6CisgIC8vICAgYjY0ICAgLSBodG1sIGlzIGJhc2U2NCBlbmNvZGVkICAgICAgICAgICAgICAgICAgICAgICAgLS0gcHJlZml4IDohYjY0IToKKyAgLy8gICA2NHIgICAtIGh0bWwgaXMgYmFzZTY0IGVuY29kZWQgYW5kIHRoZW4gdGhhdCBpcyByb3QxMyAtLSBwcmVmaXggOiE2NHIhOgorICAvLyAgIHI2NCAgIC0gaHRtbCBpcyByb3QxMyBhbmQgdGhlbiB0aGF0IGlzIGJhc2U2NCAgICAgICAgIC0tIHByZWZpeCA6IXI2NCE6CisgIC8vCisgIC8vICAgZmFsc2UgLSBubyBlbmNvZGluZyBwZXJmb3JtZWQgKGRlY29kaW5nIHN0aWxsIHdpbGwgaWYgcHJlZml4ZWQpCisgIAorICBlbmNvZGVyOiAgICdyMTMnCisgIAorfQorCitmdW5jdGlvbiBFbmNvZGVPdXRwdXQoZWRpdG9yKQoreworICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKK30KKworRW5jb2RlT3V0cHV0LnByb3RvdHlwZS5yb3QxMyA9IGZ1bmN0aW9uIChzKQoreworICByZXR1cm4gKHMgPyBzIDogdGhpcykuc3BsaXQoJycpLm1hcChmdW5jdGlvbihfKQorICB7CisgICAgICBpZiAoIV8ubWF0Y2goL1tBLVphLXpdLykpIHJldHVybiBfOworICAgICAgYyA9IE1hdGguZmxvb3IoXy5jaGFyQ29kZUF0KDApIC8gOTcpOworICAgICAgayA9IChfLnRvTG93ZXJDYXNlKCkuY2hhckNvZGVBdCgwKSAtIDgzKSAlIDI2IHx8IDI2OworICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoayArICgoYyA9PSAwKSA/IDY0IDogOTYpKTsKKyAgfSkuam9pbignJyk7Cit9CisKK0VuY29kZU91dHB1dC5wcm90b3R5cGUudW5yb3QxMyA9IGZ1bmN0aW9uIChzKQoreworICByZXR1cm4gdGhpcy5yb3QxMyhzKTsKK30KKworRW5jb2RlT3V0cHV0LnByb3RvdHlwZS5iNjQgPSBmdW5jdGlvbiAocykKK3sKKyAgcmV0dXJuIFhpbmhhLmJhc2U2NF9lbmNvZGUocyk7Cit9CisKK0VuY29kZU91dHB1dC5wcm90b3R5cGUudW5iNjQgPSBmdW5jdGlvbiAocykKK3sKKyAgcmV0dXJuIFhpbmhhLmJhc2U2NF9kZWNvZGUocyk7Cit9CisKK0VuY29kZU91dHB1dC5wcm90b3R5cGUub25HZW5lcmF0ZSA9IGZ1bmN0aW9uICgpCit7CisKK30KK0VuY29kZU91dHB1dC5wcm90b3R5cGUub25HZW5lcmF0ZU9uY2UgPSBmdW5jdGlvbiAoKQoreworCit9CisKKy8qIElmIHRoZSBpbndhcmQgaHRtbCBpcyByMTMsIGRlLWVuY29kZSBpdC4KKyAqIG5vdGUgdGhhdCB3ZSBkbyBub3QgZW5jb2RlIGluIG91dHdhcmRIdG1sIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudAorICogdG8gbWVzcyB1cCB0aGUgc291cmNlIGNvZGUgdmlldywgdGhpcyBkZS1jb2RlIGluIGlud2FyZCBpcyBqdXN0CisgKiB0byBjYXRjaCBhbnkgbGVmdC1vdmVycyB3aGVuIHlvdSB1c2UgdGhlIGJhY2sgYnV0dG9uLCBvciBzdWJtaXQgCisgKiBpbiBjb2RlIHZpZXcgbW9kZS4KKyAqLworCitFbmNvZGVPdXRwdXQucHJvdG90eXBlLmlud2FyZEh0bWwgPSBmdW5jdGlvbihodG1sKQoreworICBpZihodG1sLm1hdGNoKC9eOiFyMTMhOi8pKQorICB7CisgICAgLy8gQ2xlYW4gdXAgYSBoYW5naW5nIHJvdDEzLCB0aGlzIHdpbGwgaGFwcGVuIGlmIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZAorICAgIC8vIHdoaWxlIGluIHRleHQgbW9kZSwgYW5kIGl0J3Mgc3VibWl0dGVkIHRvIGEgbmV3IHdpbmRvdy90YWIKKyAgICBodG1sID0gdGhpcy51bnJvdDEzKGh0bWwuc3Vic3RyaW5nKDcpKTsKKyAgfSAgICAKKyAgZWxzZSBpZihodG1sLm1hdGNoKC9eOiFiNjQ6IS8pKQorICB7CisgICAgaHRtbCA9IHRoaXMudW5iNjQoaHRtbC5zdWJzdHJpbmcoNykpOworICB9CisgIGVsc2UgaWYoaHRtbC5tYXRjaCgvXjohNjRyITovKSkKKyAgeworICAgIGh0bWwgPSB0aGlzLnVuYjY0KHRoaXMudW5yb3QxMyhodG1sLnN1YnN0cmluZyg3KSkpOworICB9CisgIGVsc2UgaWYoaHRtbC5tYXRjaCgvXjohcjY0ITovKSkKKyAgeworICAgIGh0bWwgPSB0aGlzLnVucm90MTModGhpcy51bmI2NChodG1sLnN1YnN0cmluZyg3KSkpOworICB9CisgIAorICByZXR1cm4gaHRtbDsKK30KKworRW5jb2RlT3V0cHV0LnByb3RvdHlwZS5vdXR3YXJkSHRtbCA9IGZ1bmN0aW9uKGh0bWwpCit7CisgIHJldHVybiBodG1sOworfQorCitFbmNvZGVPdXRwdXQucHJvdG90eXBlLm9uVXBkYXRlVG9vbGJhciA9IGZ1bmN0aW9uICgpCit7CisgIHJldHVybiBmYWxzZTsKK30KKworRW5jb2RlT3V0cHV0LnByb3RvdHlwZS5vbkV4ZWNDb21tYW5kID0gZnVuY3Rpb24gKCBjbWRJRCwgVUksIHBhcmFtICkKK3sKKyAgcmV0dXJuIGZhbHNlOworfQorCitFbmNvZGVPdXRwdXQucHJvdG90eXBlLm9uS2V5UHJlc3MgPSBmdW5jdGlvbiAoIGV2ZW50ICkKK3sKKyAgcmV0dXJuIGZhbHNlOworfQorCitFbmNvZGVPdXRwdXQucHJvdG90eXBlLm9uTW91c2VEb3duID0gZnVuY3Rpb24gKCBldmVudCApCit7CisgIHJldHVybiBmYWxzZTsKK30KKworRW5jb2RlT3V0cHV0LnByb3RvdHlwZS5vbkJlZm9yZVN1Ym1pdCA9IGZ1bmN0aW9uICgpCit7CisgIHJldHVybiBmYWxzZTsKK30KKworRW5jb2RlT3V0cHV0LnByb3RvdHlwZS5vbkJlZm9yZVN1Ym1pdFRleHRBcmVhID0gZnVuY3Rpb24oKQoreyAgICAKKyAgc3dpdGNoKHRoaXMuZWRpdG9yLmNvbmZpZy5FbmNvZGVPdXRwdXQuZW5jb2RlcikKKyAgeworICAgIGNhc2UgJ3I2NCc6CisgICAgICB0aGlzLmVkaXRvci5fdGV4dEFyZWEudmFsdWUgPSAnOiFyNjQhOicgKyB0aGlzLmI2NCh0aGlzLnJvdDEzKHRoaXMuZWRpdG9yLl90ZXh0QXJlYS52YWx1ZSkpOworICAgICAgYnJlYWs7CisgICAgICAKKyAgICBjYXNlICc2NHInOgorICAgICAgdGhpcy5lZGl0b3IuX3RleHRBcmVhLnZhbHVlID0gJzohNjRyITonICsgdGhpcy5yb3QxMyh0aGlzLmI2NCh0aGlzLmVkaXRvci5fdGV4dEFyZWEudmFsdWUpKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSAnYjY0JzoKKyAgICAgIHRoaXMuZWRpdG9yLl90ZXh0QXJlYS52YWx1ZSA9ICc6IWI2NCE6JyArIHRoaXMuYjY0KHRoaXMuZWRpdG9yLl90ZXh0QXJlYS52YWx1ZSk7CisgICAgICBicmVhazsKKyAgICAgICAgICAKKyAgICBjYXNlICdyMTMnOgorICAgICAgdGhpcy5lZGl0b3IuX3RleHRBcmVhLnZhbHVlID0gJzohcjEzITonICsgdGhpcy5yb3QxMyh0aGlzLmVkaXRvci5fdGV4dEFyZWEudmFsdWUpOyAKKyAgICAgIGJyZWFrOworICB9CisgIAorICB2YXIgZSA9IHRoaXM7CisgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IGUuZWRpdG9yLl90ZXh0QXJlYS52YWx1ZSA9IGUuaW53YXJkSHRtbChlLmVkaXRvci5fdGV4dEFyZWEudmFsdWUpOyB9LCAyMDAwKTsKKyAgCisgIHJldHVybiBmYWxzZTsKK30KKworRW5jb2RlT3V0cHV0LnByb3RvdHlwZS5vbkJlZm9yZVVubG9hZCA9IGZ1bmN0aW9uICgpCit7CisgIHJldHVybiBmYWxzZTsKK30KKworRW5jb2RlT3V0cHV0LnByb3RvdHlwZS5vbkJlZm9yZVJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KQoreworICByZXR1cm4gZmFsc2U7Cit9CisKK0VuY29kZU91dHB1dC5wcm90b3R5cGUub25SZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkKK3sKKyAgcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IGFjdGlvbiBvbmUgb2YgJ2FkZCcsICdyZW1vdmUnLCAnaGlkZScsICdzaG93JywgJ211bHRpX2hpZGUnLCAnbXVsdGlfc2hvdycKKyAqIEBwYXJhbSB7RE9NTm9kZXxBcnJheX0gcGFuZWwgZWl0aGVyIHRoZSBwYW5lbCBpdHNlbGYgb3IgYW4gYXJyYXkgbGlrZSBbJ2xlZnQnLCdyaWdodCcsJ3RvcCcsJ2JvdHRvbSddCisgKi8KK0VuY29kZU91dHB1dC5wcm90b3R5cGUub25QYW5lbENoYW5nZSA9IGZ1bmN0aW9uIChhY3Rpb24sIHBhbmVsKQoreworICByZXR1cm4gZmFsc2U7Cit9CisvKioKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IG1vZGUgZWl0aGVyICd0ZXh0bW9kZScgb3IgJ3d5c2l3eWcnCisgKi8KK0VuY29kZU91dHB1dC5wcm90b3R5cGUub25Nb2RlID0gZnVuY3Rpb24gKG1vZGUpCit7CisgIHJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiAKKyAqIEBwYXJhbSB7U3RyaW5nfSBtb2RlIGVpdGhlciAndGV4dG1vZGUnIG9yICd3eXNpd3lnJworICovCitFbmNvZGVPdXRwdXQucHJvdG90eXBlLm9uQmVmb3JlTW9kZSA9IGZ1bmN0aW9uIChtb2RlKQoreworCisgIHJldHVybiBmYWxzZTsKK30KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vQVNDSUlNYXRoTUwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL0FTQ0lJTWF0aE1MLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MGE3OTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL0FTQ0lJTWF0aE1MLmpzCkBAIC0wLDAgKzEsMzM2NCBAQAorLyoKK0FTQ0lJTWF0aE1MLmpzCis9PT09PT09PT09PT09PQorVGhpcyBmaWxlIGNvbnRhaW5zIEphdmFTY3JpcHQgZnVuY3Rpb25zIHRvIGNvbnZlcnQgQVNDSUkgbWF0aCBub3RhdGlvbgorYW5kIExhVGVYIHRvIFByZXNlbnRhdGlvbiBNYXRoTUwuIFNpbXBsZSBncmFwaGljcyBjb21tYW5kcyBhcmUgYWxzbwordHJhbnNsYXRlZCB0byBTVkcgaW1hZ2VzLiBUaGUgY29udmVyc2lvbiBpcyBkb25lIHdoaWxlIHRoZSAoWClIVE1MIAorcGFnZSBsb2FkcywgYW5kIHNob3VsZCB3b3JrIHdpdGggRmlyZWZveC9Nb3ppbGxhL05ldHNjYXBlIDcrIGFuZCBJbnRlcm5ldCAKK0V4cGxvcmVyIDYvNyArIE1hdGhQbGF5ZXIgKGh0dHA6Ly93d3cuZGVzc2NpLmNvbS9lbi9wcm9kdWN0cy9tYXRocGxheWVyLykgKworQWRvYmUgU1ZHdmlldyAzLjAzIChodHRwOi8vd3d3LmFkb2JlLmNvbS9zdmcvdmlld2VyL2luc3RhbGwvKS4KKworSnVzdCBhZGQgdGhlIG5leHQgbGluZSB0byB5b3VyIChYKUhUTUwgcGFnZSB3aXRoIHRoaXMgZmlsZSBpbiB0aGUgc2FtZSBmb2xkZXI6CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkFTQ0lJTWF0aE1MLmpzIj48L3NjcmlwdD4KKworKHVzaW5nIHRoZSBncmFwaGljcyBpbiBJRSBhbHNvIHJlcXVpcmVzIHRoZSBmaWxlICJkLnN2ZyIgaW4gdGhlIHNhbWUgZm9sZGVyKS4KK1RoaXMgaXMgYSBjb252ZW5pZW50IGFuZCBpbmV4cGVuc2l2ZSBzb2x1dGlvbiBmb3IgYXV0aG9yaW5nIE1hdGhNTCBhbmQgU1ZHLgorCitWZXJzaW9uIDIuMSBPY3QgOCwgMjAwOCwgKGMpIFBldGVyIEppcHNlbiBodHRwOi8vd3d3LmNoYXBtYW4uZWR1L35qaXBzZW4KK1RoaXMgdmVyc2lvbiBleHRlbmRzIEFTQ0lJTWF0aE1MLmpzIHdpdGggTGFUZVhNYXRoTUwuanMgYW5kIEFTQ0lJc3ZnLmpzLgorTGF0ZXN0IHZlcnNpb24gYXQgaHR0cDovL3d3dy5jaGFwbWFuLmVkdS9+amlwc2VuL21hdGhtbC9BU0NJSU1hdGhNTC5qcworSWYgeW91IHVzZSBpdCBvbiBhIHdlYnBhZ2UsIHBsZWFzZSBzZW5kIHRoZSBVUkwgdG8gamlwc2VuQGNoYXBtYW4uZWR1CisKK1RoZSBMYVRlWE1hdGhNTCBtb2RpZmljYXRpb25zIHdlcmUgbWFkZSBieSBEb3VnbGFzIFdvb2RhbGwsIEp1bmUgMjAwNi4KKyhmb3IgZGV0YWlscyBzZWUgaGVhZGVyIG9uIHRoZSBMYVRlWE1hdGhNTCBwYXJ0IGluIG1pZGRsZSBvZiBmaWxlKQorRXh0ZW5zaXZlIGNsZWFuLXVwIGFuZCBpbXByb3ZlbWVudHMgYnkgUGF1bG8gU29hcmVzLCBPY3QgMjAwNy4KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKK3lvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIAorQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIAorKGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbmNlcy9sZ3BsLmh0bWwpIGZvciBtb3JlIGRldGFpbHMuCisqLworCit2YXIgbWF0aGNvbG9yID0gImJsdWUiOyAgICAgICAgLy8gY2hhbmdlIGl0IHRvICIiICh0byBpbmhlcml0KSBvciBhbm90aGVyIGNvbG9yCit2YXIgbWF0aGZvbnRzaXplID0gIjFlbSI7ICAgICAgLy8gY2hhbmdlIHRvIGUuZy4gMS4yZW0gZm9yIGxhcmdlciBtYXRoCit2YXIgbWF0aGZvbnRmYW1pbHkgPSAic2VyaWYiOyAgLy8gY2hhbmdlIHRvICIiIHRvIGluaGVyaXQgKHdvcmtzIGluIElFKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciBhbm90aGVyIGZhbWlseSAoZS5nLiAiYXJpYWwiKQordmFyIGF1dG9tYXRocmVjb2duaXplID0gZmFsc2U7IC8vIHdyaXRpbmcgImFtYXRoIiBvbiBwYWdlIG1ha2VzIHRoaXMgdHJ1ZQordmFyIGNoZWNrRm9yTWF0aE1MID0gdHJ1ZTsgICAgIC8vIGNoZWNrIGlmIGJyb3dzZXIgY2FuIGRpc3BsYXkgTWF0aE1MCit2YXIgbm90aWZ5SWZOb01hdGhNTCA9IHRydWU7ICAgLy8gZGlzcGxheSBub3RlIGF0IHRvcCBpZiBubyBNYXRoTUwgY2FwYWJpbGl0eQordmFyIGFsZXJ0SWZOb01hdGhNTCA9IGZhbHNlOyAgIC8vIHNob3cgYWxlcnQgYm94IGlmIG5vIE1hdGhNTCBjYXBhYmlsaXR5Cit2YXIgdHJhbnNsYXRlT25Mb2FkID0gdHJ1ZTsgICAgLy8gc2V0IHRvIGZhbHNlIHRvIGRvIGNhbGwgdHJhbnNsYXRvcnMgZnJvbSBqcyAKK3ZhciB0cmFuc2xhdGVMYVRlWCA9IHRydWU7ICAgICAvLyBmYWxzZSB0byBwcmVzZXJ2ZSAkLi4kLCAkJC4uJCQKK3ZhciB0cmFuc2xhdGVMYVRlWGZvcm1hdHRpbmcgPSB0cnVlOyAvLyBmYWxzZSB0byBwcmVzZXJ2ZSBcZW1waCxcYmVnaW57fSxcZW5ke30KK3ZhciB0cmFuc2xhdGVBU0NJSU1hdGggPSB0cnVlOyAvLyBmYWxzZSB0byBwcmVzZXJ2ZSBgLi5gCit2YXIgdHJhbnNsYXRlQVNDSUlzdmcgPSB0cnVlOyAgLy8gZmFsc2UgdG8gcHJlc2VydmUgYWdyYXBoLi4sIFxiZWdpbntncmFwaH0uLgordmFyIGF2b2lkaW5uZXJIVE1MID0gZmFsc2U7ICAgLy8gc2V0IHRydWUgaWYgYXNzaWduaW5nIHRvIGlubmVySFRNTCBnaXZlcyBlcnJvcgordmFyIGRpc3BsYXlzdHlsZSA9IHRydWU7ICAgICAgLy8gcHV0cyBsaW1pdHMgYWJvdmUgYW5kIGJlbG93IGxhcmdlIG9wZXJhdG9ycwordmFyIHNob3dhc2NpaWZvcm11bGFvbmhvdmVyID0gdHJ1ZTsgLy8gaGVscHMgc3R1ZGVudHMgbGVhcm4gQVNDSUlNYXRoCit2YXIgZGVjaW1hbHNpZ24gPSAiLiI7ICAgICAgICAvLyBjaGFuZ2UgdG8gIiwiIGlmIHlvdSBsaWtlLCBiZXdhcmUgb2YgYCgxLDIpYCEKK3ZhciBBTWRlbGltaXRlcjEgPSAiYCIsIEFNZXNjYXBlMSA9ICJcXFxcYCI7IC8vIGNhbiB1c2Ugb3RoZXIgY2hhcmFjdGVycwordmFyIEFNZG9jdW1lbnRJZCA9ICJ3aWtpdGV4dCIgLy8gUG1XaWtpIGVsZW1lbnQgY29udGFpbmluZyBtYXRoIChkZWZhdWx0PWJvZHkpCit2YXIgY2hlY2tmb3Jwcm9jZXNzYXNjaWltYXRoaW5tb29kbGUgPSBmYWxzZTsgLy8gdHJ1ZSBmb3Igc3lzdGVtcyBsaWtlIE1vb2RsZQordmFyIGRzdmdsb2NhdGlvbiA9ICIiOyAvLyBwYXRoIHRvIGQuc3ZnIChibGFuayBpZiBzYW1lIGFzIEFTQ0lJTWF0aE1MLmpzIGxvYykKKworLyorKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyovCisKK3ZhciBpc0lFID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TPT1udWxsOwordmFyIG5vTWF0aE1MID0gZmFsc2UsIHRyYW5zbGF0ZWQgPSBmYWxzZTsKKworaWYgKGlzSUUpIHsgLy8gYXZvaWQgYWRkaW5nIE1hdGhQbGF5ZXIgaW5mbyBleHBsaWNpdGx5IHRvIGVhY2ggd2VicGFnZQorICBkb2N1bWVudC53cml0ZSgiPG9iamVjdCBpZD1cIm1hdGhwbGF5ZXJcIlwKKyAgY2xhc3NpZD1cImNsc2lkOjMyRjY2QTIwLTc2MTQtMTFENC1CRDExLTAwMTA0QkQzRjk4N1wiPjwvb2JqZWN0PiIpOworICBkb2N1bWVudC53cml0ZSgiPD9pbXBvcnQgbmFtZXNwYWNlPVwibVwiIGltcGxlbWVudGF0aW9uPVwiI21hdGhwbGF5ZXJcIj8+Iik7Cit9CisKKy8vIEFkZCBhIHN0eWxlc2hlZXQsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMgY3VzdG9tIHN0eWxlc2hlZXQgKGFkYXB0ZWQgZnJvbSBUVykKK2Z1bmN0aW9uIHNldFN0eWxlc2hlZXQocykgeworCXZhciBpZCA9ICJBTU1MY3VzdG9tU3R5bGVTaGVldCI7CisJdmFyIG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisJaWYoZG9jdW1lbnQuY3JlYXRlU3R5bGVTaGVldCkgeworCQkvLyBUZXN0IGZvciBJRSdzIG5vbi1zdGFuZGFyZCBjcmVhdGVTdHlsZVNoZWV0IG1ldGhvZAorCQlpZihuKQorCQkJbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pOworCQkvLyBUaGlzIGZhaWxlZCB3aXRob3V0IHRoZSAmbmJzcDsKKwkJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5pbnNlcnRBZGphY2VudEhUTUwoImJlZm9yZUVuZCIsIiZuYnNwOzxzdHlsZSBpZD0nIiArIGlkICsgIic+IiArIHMgKyAiPC9zdHlsZT4iKTsKKwl9IGVsc2UgeworCQlpZihuKSB7CisJCQluLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzKSxuLmZpcnN0Q2hpbGQpOworCQl9IGVsc2UgeworCQkJbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CisJCQluLnR5cGUgPSAidGV4dC9jc3MiOworCQkJbi5pZCA9IGlkOworCQkJbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzKSk7CisJCQlkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKG4pOworCQl9CisJfQorfQorCitzZXRTdHlsZXNoZWV0KCIjQU1NTGNsb3NlRGl2IFx7Zm9udC1zaXplOjAuOGVtOyBwYWRkaW5nLXRvcDoxZW07IGNvbG9yOiMwMTRcfVxuI0FNTUx3YXJuaW5nQm94IFx7cG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwMCU7IHRvcDowOyBsZWZ0OjA7IHotaW5kZXg6MjAwOyB0ZXh0LWFsaWduOmNlbnRlcjsgZm9udC1zaXplOjFlbTsgZm9udC13ZWlnaHQ6Ym9sZDsgcGFkZGluZzowLjVlbSAwIDAuNWVtIDA7IGNvbG9yOiNmZmM7IGJhY2tncm91bmQ6I2MzMFx9Iik7CisKK2Z1bmN0aW9uIGluaXQoKXsKKwl2YXIgbXNnLCB3YXJuaW5ncyA9IG5ldyBBcnJheSgpOworCWlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZD09bnVsbCl7CisJCWFsZXJ0KCJUaGlzIHdlYnBhZ2UgcmVxdWlyZXMgYSByZWNlbnQgYnJvd3NlciBzdWNoIGFzIE1vemlsbGEgRmlyZWZveC9OZXRzY2FwZSA3KyBvciBJbnRlcm5ldCBFeHBsb3JlciA2KyB3aXRoIE1hdGhQbGF5ZXIgYW5kIEFkb2JlIFNWR3ZpZXdlciIpOworCQlyZXR1cm4gbnVsbDsKKwl9CisJaWYgKGNoZWNrRm9yTWF0aE1MICYmIChtc2cgPSBjaGVja01hdGhNTCgpKSkgd2FybmluZ3MucHVzaChtc2cpOworCWlmIChjaGVja0lmU1ZHYXZhaWxhYmxlICYmIChtc2cgPSBjaGVja1NWRygpKSkgd2FybmluZ3MucHVzaChtc2cpOworCWlmICh3YXJuaW5ncy5sZW5ndGg+MCkgZGlzcGxheVdhcm5pbmdzKHdhcm5pbmdzKTsKKwlpZiAoIW5vTWF0aE1MKSBpbml0U3ltYm9scygpOworCXJldHVybiB0cnVlOworfQorCitmdW5jdGlvbiBjaGVja01hdGhNTCgpeworICBpZiAobmF2aWdhdG9yLmFwcE5hbWUuc2xpY2UoMCw4KT09Ik5ldHNjYXBlIikgCisgICAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLnNsaWNlKDAsMSk+PSI1Iikgbm9NYXRoTUwgPSBudWxsOworICAgIGVsc2Ugbm9NYXRoTUwgPSB0cnVlOworICBlbHNlIGlmIChuYXZpZ2F0b3IuYXBwTmFtZS5zbGljZSgwLDkpPT0iTWljcm9zb2Z0IikKKyAgICB0cnkgeworICAgICAgICB2YXIgQWN0aXZlWCA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNYXRoUGxheWVyLkZhY3RvcnkuMSIpOworICAgICAgICBub01hdGhNTCA9IG51bGw7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBub01hdGhNTCA9IHRydWU7CisgICAgfQorICBlbHNlIGlmIChuYXZpZ2F0b3IuYXBwTmFtZS5zbGljZSgwLDUpPT0iT3BlcmEiKSAKKyAgICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uc2xpY2UoMCwzKT49IjkuNSIpIG5vTWF0aE1MID0gbnVsbDsKKyAgZWxzZSBub01hdGhNTCA9IHRydWU7CisvL25vTWF0aE1MID0gdHJ1ZTsgLy91bmNvbW1lbnQgdG8gY2hlY2sKKyAgaWYgKG5vTWF0aE1MICYmIG5vdGlmeUlmTm9NYXRoTUwpIHsKKyAgICB2YXIgbXNnID0gIlRvIHZpZXcgdGhlIEFTQ0lJTWF0aE1MIG5vdGF0aW9uIHVzZSBJbnRlcm5ldCBFeHBsb3JlciArIE1hdGhQbGF5ZXIgb3IgTW96aWxsYSBGaXJlZm94IDIuMCBvciBsYXRlci4iOworICAgIGlmIChhbGVydElmTm9NYXRoTUwpCisgICAgICAgYWxlcnQobXNnKTsKKyAgICBlbHNlIHJldHVybiBtc2c7CisgIH0KK30KKworZnVuY3Rpb24gaGlkZVdhcm5pbmcoKXsKKwl2YXIgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07CisJYm9keS5yZW1vdmVDaGlsZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQU1NTHdhcm5pbmdCb3gnKSk7CisJYm9keS5vbmNsaWNrID0gbnVsbDsKK30KKworZnVuY3Rpb24gZGlzcGxheVdhcm5pbmdzKHdhcm5pbmdzKSB7CisgIHZhciBpLCBmcmFnLCBuZCA9IGNyZWF0ZUVsZW1lbnRYSFRNTCgiZGl2Iik7CisgIHZhciBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTsKKyAgYm9keS5vbmNsaWNrPWhpZGVXYXJuaW5nOworICBuZC5pZCA9ICdBTU1Md2FybmluZ0JveCc7CisgIGZvciAoaT0wOyBpPHdhcm5pbmdzLmxlbmd0aDsgaSsrKSB7CisJZnJhZyA9IGNyZWF0ZUVsZW1lbnRYSFRNTCgiZGl2Iik7CisJZnJhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh3YXJuaW5nc1tpXSkpOworCWZyYWcuc3R5bGUucGFkZGluZ0JvdHRvbSA9ICIxLjBlbSI7CisJbmQuYXBwZW5kQ2hpbGQoZnJhZyk7CisgIH0KKyAgbmQuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudFhIVE1MKCJwIikpOworICBuZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiRm9yIGluc3RydWN0aW9ucyBzZWUgdGhlICIpKTsKKyAgdmFyIGFuID0gY3JlYXRlRWxlbWVudFhIVE1MKCJhIik7CisgIGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJBU0NJSU1hdGhNTCIpKTsKKyAgYW4uc2V0QXR0cmlidXRlKCJocmVmIiwiaHR0cDovL3d3dy5jaGFwbWFuLmVkdS9+amlwc2VuL2FzY2lpbWF0aC5odG1sIik7CisgIG5kLmFwcGVuZENoaWxkKGFuKTsKKyAgbmQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiBob21lcGFnZSIpKTsKKyAgYW4gPSBjcmVhdGVFbGVtZW50WEhUTUwoImRpdiIpOworICBhbi5pZCA9ICdBTU1MY2xvc2VEaXYnOworICBhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnKGNsaWNrIGFueXdoZXJlIHRvIGNsb3NlIHRoaXMgd2FybmluZyknKSk7CisgIG5kLmFwcGVuZENoaWxkKGFuKTsKKyAgdmFyIGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdOworICBib2R5Lmluc2VydEJlZm9yZShuZCxib2R5LmNoaWxkTm9kZXNbMF0pOworfQorCitmdW5jdGlvbiB0cmFuc2xhdGUoc3BhbmNsYXNzQU0pIHsKKyAgaWYgKCF0cmFuc2xhdGVkKSB7IC8vIHJ1biB0aGlzIG9ubHkgb25jZQorICAgIHRyYW5zbGF0ZWQgPSB0cnVlOworICAgIHZhciBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTsKKyAgICB2YXIgcHJvY2Vzc04gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChBTWRvY3VtZW50SWQpOworICAgIGlmICh0cmFuc2xhdGVMYVRlWCkgTE1wcm9jZXNzTm9kZSgocHJvY2Vzc04hPW51bGw/cHJvY2Vzc046Ym9keSkpOworICAgIGlmICh0cmFuc2xhdGVBU0NJSU1hdGgpIEFNcHJvY2Vzc05vZGUoKHByb2Nlc3NOIT1udWxsP3Byb2Nlc3NOOmJvZHkpLCBmYWxzZSwgc3BhbmNsYXNzQU0pOworICB9Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUVsZW1lbnRYSFRNTCh0KSB7CisgIGlmIChpc0lFKSByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTsKKyAgZWxzZSByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIix0KTsKK30KKworZnVuY3Rpb24gY3JlYXRlTW1sTm9kZSh0LGZyYWcpIHsKKyAgaWYgKGlzSUUpIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibToiK3QpOworICBlbHNlIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIix0KTsKKyAgaWYgKGZyYWcpIG5vZGUuYXBwZW5kQ2hpbGQoZnJhZyk7CisgIHJldHVybiBub2RlOworfQorCisvLyBjaGFyYWN0ZXIgbGlzdHMgZm9yIE1vemlsbGEvTmV0c2NhcGUgZm9udHMKK3ZhciBBTWNhbCA9IFsweEVGMzUsMHgyMTJDLDB4RUYzNiwweEVGMzcsMHgyMTMwLDB4MjEzMSwweEVGMzgsMHgyMTBCLDB4MjExMCwweEVGMzksMHhFRjNBLDB4MjExMiwweDIxMzMsMHhFRjNCLDB4RUYzQywweEVGM0QsMHhFRjNFLDB4MjExQiwweEVGM0YsMHhFRjQwLDB4RUY0MSwweEVGNDIsMHhFRjQzLDB4RUY0NCwweEVGNDUsMHhFRjQ2XTsKK3ZhciBBTWZyayA9IFsweEVGNUQsMHhFRjVFLDB4MjEyRCwweEVGNUYsMHhFRjYwLDB4RUY2MSwweEVGNjIsMHgyMTBDLDB4MjExMSwweEVGNjMsMHhFRjY0LDB4RUY2NSwweEVGNjYsMHhFRjY3LDB4RUY2OCwweEVGNjksMHhFRjZBLDB4MjExQywweEVGNkIsMHhFRjZDLDB4RUY2RCwweEVGNkUsMHhFRjZGLDB4RUY3MCwweEVGNzEsMHgyMTI4XTsKK3ZhciBBTWJiYiA9IFsweEVGOEMsMHhFRjhELDB4MjEwMiwweEVGOEUsMHhFRjhGLDB4RUY5MCwweEVGOTEsMHgyMTBELDB4RUY5MiwweEVGOTMsMHhFRjk0LDB4RUY5NSwweEVGOTYsMHgyMTE1LDB4RUY5NywweDIxMTksMHgyMTFBLDB4MjExRCwweEVGOTgsMHhFRjk5LDB4RUY5QSwweEVGOUIsMHhFRjlDLDB4RUY5RCwweEVGOUUsMHgyMTI0XTsKKwordmFyIENPTlNUID0gMCwgVU5BUlkgPSAxLCBCSU5BUlkgPSAyLCBJTkZJWCA9IDMsIExFRlRCUkFDS0VUID0gNCwKKyAgICBSSUdIVEJSQUNLRVQgPSA1LCBTUEFDRSA9IDYsIFVOREVST1ZFUiA9IDcsIERFRklOSVRJT04gPSA4LAorICAgIExFRlRSSUdIVCA9IDksIFRFWFQgPSAxMCwgQklHID0gMTEsIExPTkcgPSAxMiwgU1RSRVRDSFkgPSAxMywKKyAgICBNQVRSSVggPSAxNDs7IC8vIHRva2VuIHR5cGVzCisKK3ZhciBBTXF1b3RlID0ge2lucHV0OiJcIiIsICAgdGFnOiJtdGV4dCIsIG91dHB1dDoibWJveCIsIHRleDpudWxsLCB0dHlwZTpURVhUfTsKKwordmFyIEFNc3ltYm9scyA9IFsKKy8vc29tZSBncmVlayBzeW1ib2xzCit7aW5wdXQ6ImFscGhhIiwgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNCMSIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6ImJldGEiLCAgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNCMiIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6ImNoaSIsICAgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNDNyIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6ImRlbHRhIiwgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNCNCIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IkRlbHRhIiwgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MDM5NCIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6ImVwc2kiLCAgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNCNSIsIHRleDoiZXBzaWxvbiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoidmFyZXBzaWxvbiIsIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDI1QiIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6ImV0YSIsICAgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNCNyIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6ImdhbW1hIiwgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNCMyIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IkdhbW1hIiwgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MDM5MyIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6ImlvdGEiLCAgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNCOSIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6ImthcHBhIiwgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNCQSIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6ImxhbWJkYSIsIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNCQiIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IkxhbWJkYSIsIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MDM5QiIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Im11IiwgICAgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNCQyIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Im51IiwgICAgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNCRCIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Im9tZWdhIiwgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNDOSIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Ik9tZWdhIiwgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MDNBOSIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6InBoaSIsICAgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNDNiIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6InZhcnBoaSIsIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNENSIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlBoaSIsICAgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MDNBNiIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6InBpIiwgICAgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNDMCIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlBpIiwgICAgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MDNBMCIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6InBzaSIsICAgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNDOCIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlBzaSIsICAgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNBOCIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6InJobyIsICAgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNDMSIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6InNpZ21hIiwgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNDMyIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlNpZ21hIiwgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MDNBMyIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6InRhdSIsICAgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNDNCIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6InRoZXRhIiwgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNCOCIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6InZhcnRoZXRhIiwgdGFnOiJtaSIsIG91dHB1dDoiXHUwM0QxIiwgdGV4Om51bGwsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiVGhldGEiLCAgdGFnOiJtbyIsIG91dHB1dDoiXHUwMzk4IiwgdGV4Om51bGwsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoidXBzaWxvbiIsIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNDNSIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6InhpIiwgICAgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNCRSIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlhpIiwgICAgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MDM5RSIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6InpldGEiLCAgIHRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNCNiIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCisKKy8vYmluYXJ5IG9wZXJhdGlvbiBzeW1ib2xzCisvL3tpbnB1dDoiLSIsICB0YWc6Im1vIiwgb3V0cHV0OiJcdTAwOTYiLCB0ZXg6bnVsbCwgdHR5cGU6Q09OU1R9LAore2lucHV0OiIqIiwgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjJDNSIsIHRleDoiY2RvdCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiKioiLCB0YWc6Im1vIiwgb3V0cHV0OiJcdTIyQzYiLCB0ZXg6InN0YXIiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Ii8vIiwgdGFnOiJtbyIsIG91dHB1dDoiLyIsICAgICAgdGV4Om51bGwsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxcXCIsIHRhZzoibW8iLCBvdXRwdXQ6IlxcIiwgICB0ZXg6ImJhY2tzbGFzaCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoic2V0bWludXMiLCB0YWc6Im1vIiwgb3V0cHV0OiJcXCIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Inh4IiwgdGFnOiJtbyIsIG91dHB1dDoiXHUwMEQ3IiwgdGV4OiJ0aW1lcyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiLToiLCB0YWc6Im1vIiwgb3V0cHV0OiJcdTAwRjciLCB0ZXg6ImRpdmlkZSIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiQCIsICB0YWc6Im1vIiwgb3V0cHV0OiJcdTI2QUMiLCB0ZXg6ImNpcmMiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Im8rIiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMjk1IiwgdGV4OiJvcGx1cyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoib3giLCB0YWc6Im1vIiwgb3V0cHV0OiJcdTIyOTciLCB0ZXg6Im90aW1lcyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiby4iLCB0YWc6Im1vIiwgb3V0cHV0OiJcdTIyOTkiLCB0ZXg6Im9kb3QiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6InN1bSIsIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIxMSIsIHRleDpudWxsLCB0dHlwZTpVTkRFUk9WRVJ9LAore2lucHV0OiJwcm9kIiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMjBGIiwgdGV4Om51bGwsIHR0eXBlOlVOREVST1ZFUn0sCit7aW5wdXQ6Il5eIiwgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIyNyIsIHRleDoid2VkZ2UiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Il5eXiIsIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjJDMCIsIHRleDoiYmlnd2VkZ2UiLCB0dHlwZTpVTkRFUk9WRVJ9LAore2lucHV0OiJ2diIsICB0YWc6Im1vIiwgb3V0cHV0OiJcdTIyMjgiLCB0ZXg6InZlZSIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoidnZ2IiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMkMxIiwgdGV4OiJiaWd2ZWUiLCB0dHlwZTpVTkRFUk9WRVJ9LAore2lucHV0OiJubiIsICB0YWc6Im1vIiwgb3V0cHV0OiJcdTIyMjkiLCB0ZXg6ImNhcCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoibm5uIiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMkMyIiwgdGV4OiJiaWdjYXAiLCB0dHlwZTpVTkRFUk9WRVJ9LAore2lucHV0OiJ1dSIsICB0YWc6Im1vIiwgb3V0cHV0OiJcdTIyMkEiLCB0ZXg6ImN1cCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoidXV1IiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMkMzIiwgdGV4OiJiaWdjdXAiLCB0dHlwZTpVTkRFUk9WRVJ9LAorCisvL2JpbmFyeSByZWxhdGlvbiBzeW1ib2xzCit7aW5wdXQ6IiE9IiwgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjI2MCIsIHRleDoibmUiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Ijo9IiwgIHRhZzoibW8iLCBvdXRwdXQ6Ijo9IiwgICAgIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Imx0IiwgIHRhZzoibW8iLCBvdXRwdXQ6IjwiLCAgICAgIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Ijw9IiwgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjI2NCIsIHRleDoibGUiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Imx0PSIsIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjI2NCIsIHRleDoibGVxIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiI+PSIsICB0YWc6Im1vIiwgb3V0cHV0OiJcdTIyNjUiLCB0ZXg6ImdlIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJnZXEiLCB0YWc6Im1vIiwgb3V0cHV0OiJcdTIyNjUiLCB0ZXg6bnVsbCwgdHR5cGU6Q09OU1R9LAore2lucHV0OiItPCIsICB0YWc6Im1vIiwgb3V0cHV0OiJcdTIyN0EiLCB0ZXg6InByZWMiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Ii1sdCIsIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjI3QSIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Ij4tIiwgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjI3QiIsIHRleDoic3VjYyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiLTw9IiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyQUFGIiwgdGV4OiJwcmVjZXEiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Ij4tPSIsIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MkFCMCIsIHRleDoic3VjY2VxIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJpbiIsICB0YWc6Im1vIiwgb3V0cHV0OiJcdTIyMDgiLCB0ZXg6bnVsbCwgdHR5cGU6Q09OU1R9LAore2lucHV0OiIhaW4iLCB0YWc6Im1vIiwgb3V0cHV0OiJcdTIyMDkiLCB0ZXg6Im5vdGluIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJzdWIiLCB0YWc6Im1vIiwgb3V0cHV0OiJcdTIyODIiLCB0ZXg6InN1YnNldCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoic3VwIiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMjgzIiwgdGV4OiJzdXBzZXQiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6InN1YmUiLCB0YWc6Im1vIiwgb3V0cHV0OiJcdTIyODYiLCB0ZXg6InN1YnNldGVxIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJzdXBlIiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMjg3IiwgdGV4OiJzdXBzZXRlcSIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiLT0iLCAgdGFnOiJtbyIsIG91dHB1dDoiXHUyMjYxIiwgdGV4OiJlcXVpdiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoifj0iLCAgdGFnOiJtbyIsIG91dHB1dDoiXHUyMjQ1IiwgdGV4OiJjb25nIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJ+fiIsICB0YWc6Im1vIiwgb3V0cHV0OiJcdTIyNDgiLCB0ZXg6ImFwcHJveCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoicHJvcCIsIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIxRCIsIHRleDoicHJvcHRvIiwgdHR5cGU6Q09OU1R9LAorCisvL2xvZ2ljYWwgc3ltYm9scwore2lucHV0OiJhbmQiLCB0YWc6Im10ZXh0Iiwgb3V0cHV0OiJhbmQiLCB0ZXg6bnVsbCwgdHR5cGU6U1BBQ0V9LAore2lucHV0OiJvciIsICB0YWc6Im10ZXh0Iiwgb3V0cHV0OiJvciIsICB0ZXg6bnVsbCwgdHR5cGU6U1BBQ0V9LAore2lucHV0OiJub3QiLCB0YWc6Im1vIiwgb3V0cHV0OiJcdTAwQUMiLCB0ZXg6Im5lZyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiPT4iLCAgdGFnOiJtbyIsIG91dHB1dDoiXHUyMUQyIiwgdGV4OiJpbXBsaWVzIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJpZiIsICB0YWc6Im1vIiwgb3V0cHV0OiJpZiIsICAgICB0ZXg6bnVsbCwgdHR5cGU6U1BBQ0V9LAore2lucHV0OiI8PT4iLCB0YWc6Im1vIiwgb3V0cHV0OiJcdTIxRDQiLCB0ZXg6ImlmZiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiQUEiLCAgdGFnOiJtbyIsIG91dHB1dDoiXHUyMjAwIiwgdGV4OiJmb3JhbGwiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IkVFIiwgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIwMyIsIHRleDoiZXhpc3RzIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJffF8iLCB0YWc6Im1vIiwgb3V0cHV0OiJcdTIyQTUiLCB0ZXg6ImJvdCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiVFQiLCAgdGFnOiJtbyIsIG91dHB1dDoiXHUyMkE0IiwgdGV4OiJ0b3AiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6InwtLSIsICB0YWc6Im1vIiwgb3V0cHV0OiJcdTIyQTIiLCB0ZXg6InZkYXNoIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJ8PT0iLCAgdGFnOiJtbyIsIG91dHB1dDoiXHUyMkE4IiwgdGV4OiJtb2RlbHMiLCB0dHlwZTpDT05TVH0sCisKKy8vZ3JvdXBpbmcgYnJhY2tldHMKK3tpbnB1dDoiKCIsIHRhZzoibW8iLCBvdXRwdXQ6IigiLCB0ZXg6bnVsbCwgdHR5cGU6TEVGVEJSQUNLRVR9LAore2lucHV0OiIpIiwgdGFnOiJtbyIsIG91dHB1dDoiKSIsIHRleDpudWxsLCB0dHlwZTpSSUdIVEJSQUNLRVR9LAore2lucHV0OiJbIiwgdGFnOiJtbyIsIG91dHB1dDoiWyIsIHRleDpudWxsLCB0dHlwZTpMRUZUQlJBQ0tFVH0sCit7aW5wdXQ6Il0iLCB0YWc6Im1vIiwgb3V0cHV0OiJdIiwgdGV4Om51bGwsIHR0eXBlOlJJR0hUQlJBQ0tFVH0sCit7aW5wdXQ6InsiLCB0YWc6Im1vIiwgb3V0cHV0OiJ7IiwgdGV4Om51bGwsIHR0eXBlOkxFRlRCUkFDS0VUfSwKK3tpbnB1dDoifSIsIHRhZzoibW8iLCBvdXRwdXQ6In0iLCB0ZXg6bnVsbCwgdHR5cGU6UklHSFRCUkFDS0VUfSwKK3tpbnB1dDoifCIsIHRhZzoibW8iLCBvdXRwdXQ6InwiLCB0ZXg6bnVsbCwgdHR5cGU6TEVGVFJJR0hUfSwKKy8ve2lucHV0OiJ8fCIsIHRhZzoibW8iLCBvdXRwdXQ6Inx8IiwgdGV4Om51bGwsIHR0eXBlOkxFRlRSSUdIVH0sCit7aW5wdXQ6Iig6IiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMzI5IiwgdGV4OiJsYW5nbGUiLCB0dHlwZTpMRUZUQlJBQ0tFVH0sCit7aW5wdXQ6IjopIiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMzJBIiwgdGV4OiJyYW5nbGUiLCB0dHlwZTpSSUdIVEJSQUNLRVR9LAore2lucHV0OiI8PCIsIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjMyOSIsIHRleDpudWxsLCB0dHlwZTpMRUZUQlJBQ0tFVH0sCit7aW5wdXQ6Ij4+IiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMzJBIiwgdGV4Om51bGwsIHR0eXBlOlJJR0hUQlJBQ0tFVH0sCit7aW5wdXQ6Ins6IiwgdGFnOiJtbyIsIG91dHB1dDoiezoiLCB0ZXg6bnVsbCwgdHR5cGU6TEVGVEJSQUNLRVQsIGludmlzaWJsZTp0cnVlfSwKK3tpbnB1dDoiOn0iLCB0YWc6Im1vIiwgb3V0cHV0OiI6fSIsIHRleDpudWxsLCB0dHlwZTpSSUdIVEJSQUNLRVQsIGludmlzaWJsZTp0cnVlfSwKKworLy9taXNjZWxsYW5lb3VzIHN5bWJvbHMKK3tpbnB1dDoiaW50IiwgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIyQiIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6ImR4IiwgICB0YWc6Im1pIiwgb3V0cHV0OiJ7OmQgeDp9IiwgdGV4Om51bGwsIHR0eXBlOkRFRklOSVRJT059LAore2lucHV0OiJkeSIsICAgdGFnOiJtaSIsIG91dHB1dDoiezpkIHk6fSIsIHRleDpudWxsLCB0dHlwZTpERUZJTklUSU9OfSwKK3tpbnB1dDoiZHoiLCAgIHRhZzoibWkiLCBvdXRwdXQ6Ins6ZCB6On0iLCB0ZXg6bnVsbCwgdHR5cGU6REVGSU5JVElPTn0sCit7aW5wdXQ6ImR0IiwgICB0YWc6Im1pIiwgb3V0cHV0OiJ7OmQgdDp9IiwgdGV4Om51bGwsIHR0eXBlOkRFRklOSVRJT059LAore2lucHV0OiJvaW50IiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMjJFIiwgdGV4Om51bGwsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiZGVsIiwgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIwMiIsIHRleDoicGFydGlhbCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiZ3JhZCIsIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIwNyIsIHRleDoibmFibGEiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IistIiwgICB0YWc6Im1vIiwgb3V0cHV0OiJcdTAwQjEiLCB0ZXg6InBtIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJPLyIsICAgdGFnOiJtbyIsIG91dHB1dDoiXHUyMjA1IiwgdGV4OiJlbXB0eXNldCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoib28iLCAgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIxRSIsIHRleDoiaW5mdHkiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6ImFsZXBoIiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMTM1IiwgdGV4Om51bGwsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiLi4uIiwgIHRhZzoibW8iLCBvdXRwdXQ6Ii4uLiIsICAgIHRleDoibGRvdHMiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IjouIiwgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIzNCIsICB0ZXg6InRoZXJlZm9yZSIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiL18iLCAgdGFnOiJtbyIsIG91dHB1dDoiXHUyMjIwIiwgIHRleDoiYW5nbGUiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcICIsICB0YWc6Im1vIiwgb3V0cHV0OiJcdTAwQTAiLCB0ZXg6bnVsbCwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJxdWFkIiwgdGFnOiJtbyIsIG91dHB1dDoiXHUwMEEwXHUwMEEwIiwgdGV4Om51bGwsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoicXF1YWQiLCB0YWc6Im1vIiwgb3V0cHV0OiJcdTAwQTBcdTAwQTBcdTAwQTBcdTAwQTAiLCB0ZXg6bnVsbCwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJjZG90cyIsIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjJFRiIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6InZkb3RzIiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMkVFIiwgdGV4Om51bGwsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiZGRvdHMiLCB0YWc6Im1vIiwgb3V0cHV0OiJcdTIyRjEiLCB0ZXg6bnVsbCwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJkaWFtb25kIiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMkM0IiwgdGV4Om51bGwsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoic3F1YXJlIiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyNUExIiwgdGV4Om51bGwsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoifF9fIiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMzBBIiwgIHRleDoibGZsb29yIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJfX3wiLCB0YWc6Im1vIiwgb3V0cHV0OiJcdTIzMEIiLCAgdGV4OiJyZmxvb3IiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Inx+IiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMzA4IiwgIHRleDoibGNlaWxpbmciLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6In58IiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMzA5IiwgIHRleDoicmNlaWxpbmciLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IkNDIiwgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjEwMiIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Ik5OIiwgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjExNSIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlFRIiwgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjExQSIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlJSIiwgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjExRCIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlpaIiwgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjEyNCIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6ImYiLCAgIHRhZzoibWkiLCBvdXRwdXQ6ImYiLCAgICAgIHRleDpudWxsLCB0dHlwZTpVTkFSWSwgZnVuYzp0cnVlfSwKK3tpbnB1dDoiZyIsICAgdGFnOiJtaSIsIG91dHB1dDoiZyIsICAgICAgdGV4Om51bGwsIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LAorCisvL3N0YW5kYXJkIGZ1bmN0aW9ucwore2lucHV0OiJsaW0iLCAgdGFnOiJtbyIsIG91dHB1dDoibGltIiwgdGV4Om51bGwsIHR0eXBlOlVOREVST1ZFUn0sCit7aW5wdXQ6IkxpbSIsICB0YWc6Im1vIiwgb3V0cHV0OiJMaW0iLCB0ZXg6bnVsbCwgdHR5cGU6VU5ERVJPVkVSfSwKK3tpbnB1dDoic2luIiwgIHRhZzoibW8iLCBvdXRwdXQ6InNpbiIsIHRleDpudWxsLCB0dHlwZTpVTkFSWSwgZnVuYzp0cnVlfSwKK3tpbnB1dDoiY29zIiwgIHRhZzoibW8iLCBvdXRwdXQ6ImNvcyIsIHRleDpudWxsLCB0dHlwZTpVTkFSWSwgZnVuYzp0cnVlfSwKK3tpbnB1dDoidGFuIiwgIHRhZzoibW8iLCBvdXRwdXQ6InRhbiIsIHRleDpudWxsLCB0dHlwZTpVTkFSWSwgZnVuYzp0cnVlfSwKK3tpbnB1dDoic2luaCIsIHRhZzoibW8iLCBvdXRwdXQ6InNpbmgiLCB0ZXg6bnVsbCwgdHR5cGU6VU5BUlksIGZ1bmM6dHJ1ZX0sCit7aW5wdXQ6ImNvc2giLCB0YWc6Im1vIiwgb3V0cHV0OiJjb3NoIiwgdGV4Om51bGwsIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LAore2lucHV0OiJ0YW5oIiwgdGFnOiJtbyIsIG91dHB1dDoidGFuaCIsIHRleDpudWxsLCB0dHlwZTpVTkFSWSwgZnVuYzp0cnVlfSwKK3tpbnB1dDoiY290IiwgIHRhZzoibW8iLCBvdXRwdXQ6ImNvdCIsIHRleDpudWxsLCB0dHlwZTpVTkFSWSwgZnVuYzp0cnVlfSwKK3tpbnB1dDoic2VjIiwgIHRhZzoibW8iLCBvdXRwdXQ6InNlYyIsIHRleDpudWxsLCB0dHlwZTpVTkFSWSwgZnVuYzp0cnVlfSwKK3tpbnB1dDoiY3NjIiwgIHRhZzoibW8iLCBvdXRwdXQ6ImNzYyIsIHRleDpudWxsLCB0dHlwZTpVTkFSWSwgZnVuYzp0cnVlfSwKK3tpbnB1dDoibG9nIiwgIHRhZzoibW8iLCBvdXRwdXQ6ImxvZyIsIHRleDpudWxsLCB0dHlwZTpVTkFSWSwgZnVuYzp0cnVlfSwKK3tpbnB1dDoibG4iLCAgIHRhZzoibW8iLCBvdXRwdXQ6ImxuIiwgIHRleDpudWxsLCB0dHlwZTpVTkFSWSwgZnVuYzp0cnVlfSwKK3tpbnB1dDoiZGV0IiwgIHRhZzoibW8iLCBvdXRwdXQ6ImRldCIsIHRleDpudWxsLCB0dHlwZTpVTkFSWSwgZnVuYzp0cnVlfSwKK3tpbnB1dDoiZGltIiwgIHRhZzoibW8iLCBvdXRwdXQ6ImRpbSIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Im1vZCIsICB0YWc6Im1vIiwgb3V0cHV0OiJtb2QiLCB0ZXg6bnVsbCwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJnY2QiLCAgdGFnOiJtbyIsIG91dHB1dDoiZ2NkIiwgdGV4Om51bGwsIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LAore2lucHV0OiJsY20iLCAgdGFnOiJtbyIsIG91dHB1dDoibGNtIiwgdGV4Om51bGwsIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LAore2lucHV0OiJsdWIiLCAgdGFnOiJtbyIsIG91dHB1dDoibHViIiwgdGV4Om51bGwsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiZ2xiIiwgIHRhZzoibW8iLCBvdXRwdXQ6ImdsYiIsIHRleDpudWxsLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Im1pbiIsICB0YWc6Im1vIiwgb3V0cHV0OiJtaW4iLCB0ZXg6bnVsbCwgdHR5cGU6VU5ERVJPVkVSfSwKK3tpbnB1dDoibWF4IiwgIHRhZzoibW8iLCBvdXRwdXQ6Im1heCIsIHRleDpudWxsLCB0dHlwZTpVTkRFUk9WRVJ9LAorCisvL2Fycm93cwore2lucHV0OiJ1YXJyIiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMTkxIiwgdGV4OiJ1cGFycm93IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJkYXJyIiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMTkzIiwgdGV4OiJkb3duYXJyb3ciLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6InJhcnIiLCB0YWc6Im1vIiwgb3V0cHV0OiJcdTIxOTIiLCB0ZXg6InJpZ2h0YXJyb3ciLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Ii0+IiwgICB0YWc6Im1vIiwgb3V0cHV0OiJcdTIxOTIiLCB0ZXg6InRvIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiI+LT4iLCAgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjFBMyIsIHRleDoicmlnaHRhcnJvd3RhaWwiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Ii0+PiIsICAgdGFnOiJtbyIsIG91dHB1dDoiXHUyMUEwIiwgdGV4OiJ0d29oZWFkcmlnaHRhcnJvdyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiPi0+PiIsICAgdGFnOiJtbyIsIG91dHB1dDoiXHUyOTE2IiwgdGV4OiJ0d29oZWFkcmlnaHRhcnJvd3RhaWwiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6InwtPiIsICB0YWc6Im1vIiwgb3V0cHV0OiJcdTIxQTYiLCB0ZXg6Im1hcHN0byIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoibGFyciIsIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjE5MCIsIHRleDoibGVmdGFycm93IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJoYXJyIiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMTk0IiwgdGV4OiJsZWZ0cmlnaHRhcnJvdyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoickFyciIsIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjFEMiIsIHRleDoiUmlnaHRhcnJvdyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoibEFyciIsIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjFEMCIsIHRleDoiTGVmdGFycm93IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJoQXJyIiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMUQ0IiwgdGV4OiJMZWZ0cmlnaHRhcnJvdyIsIHR0eXBlOkNPTlNUfSwKKy8vY29tbWFuZHMgd2l0aCBhcmd1bWVudAore2lucHV0OiJzcXJ0IiwgdGFnOiJtc3FydCIsIG91dHB1dDoic3FydCIsIHRleDpudWxsLCB0dHlwZTpVTkFSWX0sCit7aW5wdXQ6InJvb3QiLCB0YWc6Im1yb290Iiwgb3V0cHV0OiJyb290IiwgdGV4Om51bGwsIHR0eXBlOkJJTkFSWX0sCit7aW5wdXQ6ImZyYWMiLCB0YWc6Im1mcmFjIiwgb3V0cHV0OiIvIiwgICAgdGV4Om51bGwsIHR0eXBlOkJJTkFSWX0sCit7aW5wdXQ6Ii8iLCAgICB0YWc6Im1mcmFjIiwgb3V0cHV0OiIvIiwgICAgdGV4Om51bGwsIHR0eXBlOklORklYfSwKK3tpbnB1dDoic3RhY2tyZWwiLCB0YWc6Im1vdmVyIiwgb3V0cHV0OiJzdGFja3JlbCIsIHRleDpudWxsLCB0dHlwZTpCSU5BUll9LAore2lucHV0OiJfIiwgICAgdGFnOiJtc3ViIiwgIG91dHB1dDoiXyIsICAgIHRleDpudWxsLCB0dHlwZTpJTkZJWH0sCit7aW5wdXQ6Il4iLCAgICB0YWc6Im1zdXAiLCAgb3V0cHV0OiJeIiwgICAgdGV4Om51bGwsIHR0eXBlOklORklYfSwKK3tpbnB1dDoiaGF0IiwgdGFnOiJtb3ZlciIsIG91dHB1dDoiXHUwMDVFIiwgdGV4Om51bGwsIHR0eXBlOlVOQVJZLCBhY2M6dHJ1ZX0sCit7aW5wdXQ6ImJhciIsIHRhZzoibW92ZXIiLCBvdXRwdXQ6Ilx1MDBBRiIsIHRleDoib3ZlcmxpbmUiLCB0dHlwZTpVTkFSWSwgYWNjOnRydWV9LAore2lucHV0OiJ2ZWMiLCB0YWc6Im1vdmVyIiwgb3V0cHV0OiJcdTIxOTIiLCB0ZXg6bnVsbCwgdHR5cGU6VU5BUlksIGFjYzp0cnVlfSwKK3tpbnB1dDoiZG90IiwgdGFnOiJtb3ZlciIsIG91dHB1dDoiLiIsICAgICAgdGV4Om51bGwsIHR0eXBlOlVOQVJZLCBhY2M6dHJ1ZX0sCit7aW5wdXQ6ImRkb3QiLCB0YWc6Im1vdmVyIiwgb3V0cHV0OiIuLiIsICAgIHRleDpudWxsLCB0dHlwZTpVTkFSWSwgYWNjOnRydWV9LAore2lucHV0OiJ1bCIsIHRhZzoibXVuZGVyIiwgb3V0cHV0OiJcdTAzMzIiLCB0ZXg6InVuZGVybGluZSIsIHR0eXBlOlVOQVJZLCBhY2M6dHJ1ZX0sCit7aW5wdXQ6InRleHQiLCB0YWc6Im10ZXh0Iiwgb3V0cHV0OiJ0ZXh0IiwgdGV4Om51bGwsIHR0eXBlOlRFWFR9LAore2lucHV0OiJtYm94IiwgdGFnOiJtdGV4dCIsIG91dHB1dDoibWJveCIsIHRleDpudWxsLCB0dHlwZTpURVhUfSwKK0FNcXVvdGUsCit7aW5wdXQ6ImJiIiwgdGFnOiJtc3R5bGUiLCBhdG5hbWU6ImZvbnR3ZWlnaHQiLCBhdHZhbDoiYm9sZCIsIG91dHB1dDoiYmIiLCB0ZXg6bnVsbCwgdHR5cGU6VU5BUll9LAore2lucHV0OiJtYXRoYmYiLCB0YWc6Im1zdHlsZSIsIGF0bmFtZToiZm9udHdlaWdodCIsIGF0dmFsOiJib2xkIiwgb3V0cHV0OiJtYXRoYmYiLCB0ZXg6bnVsbCwgdHR5cGU6VU5BUll9LAore2lucHV0OiJzZiIsIHRhZzoibXN0eWxlIiwgYXRuYW1lOiJmb250ZmFtaWx5IiwgYXR2YWw6InNhbnMtc2VyaWYiLCBvdXRwdXQ6InNmIiwgdGV4Om51bGwsIHR0eXBlOlVOQVJZfSwKK3tpbnB1dDoibWF0aHNmIiwgdGFnOiJtc3R5bGUiLCBhdG5hbWU6ImZvbnRmYW1pbHkiLCBhdHZhbDoic2Fucy1zZXJpZiIsIG91dHB1dDoibWF0aHNmIiwgdGV4Om51bGwsIHR0eXBlOlVOQVJZfSwKK3tpbnB1dDoiYmJiIiwgdGFnOiJtc3R5bGUiLCBhdG5hbWU6Im1hdGh2YXJpYW50IiwgYXR2YWw6ImRvdWJsZS1zdHJ1Y2siLCBvdXRwdXQ6ImJiYiIsIHRleDpudWxsLCB0dHlwZTpVTkFSWSwgY29kZXM6QU1iYmJ9LAore2lucHV0OiJtYXRoYmIiLCB0YWc6Im1zdHlsZSIsIGF0bmFtZToibWF0aHZhcmlhbnQiLCBhdHZhbDoiZG91YmxlLXN0cnVjayIsIG91dHB1dDoibWF0aGJiIiwgdGV4Om51bGwsIHR0eXBlOlVOQVJZLCBjb2RlczpBTWJiYn0sCit7aW5wdXQ6ImNjIiwgIHRhZzoibXN0eWxlIiwgYXRuYW1lOiJtYXRodmFyaWFudCIsIGF0dmFsOiJzY3JpcHQiLCBvdXRwdXQ6ImNjIiwgdGV4Om51bGwsIHR0eXBlOlVOQVJZLCBjb2RlczpBTWNhbH0sCit7aW5wdXQ6Im1hdGhjYWwiLCB0YWc6Im1zdHlsZSIsIGF0bmFtZToibWF0aHZhcmlhbnQiLCBhdHZhbDoic2NyaXB0Iiwgb3V0cHV0OiJtYXRoY2FsIiwgdGV4Om51bGwsIHR0eXBlOlVOQVJZLCBjb2RlczpBTWNhbH0sCit7aW5wdXQ6InR0IiwgIHRhZzoibXN0eWxlIiwgYXRuYW1lOiJmb250ZmFtaWx5IiwgYXR2YWw6Im1vbm9zcGFjZSIsIG91dHB1dDoidHQiLCB0ZXg6bnVsbCwgdHR5cGU6VU5BUll9LAore2lucHV0OiJtYXRodHQiLCB0YWc6Im1zdHlsZSIsIGF0bmFtZToiZm9udGZhbWlseSIsIGF0dmFsOiJtb25vc3BhY2UiLCBvdXRwdXQ6Im1hdGh0dCIsIHRleDpudWxsLCB0dHlwZTpVTkFSWX0sCit7aW5wdXQ6ImZyIiwgIHRhZzoibXN0eWxlIiwgYXRuYW1lOiJtYXRodmFyaWFudCIsIGF0dmFsOiJmcmFrdHVyIiwgb3V0cHV0OiJmciIsIHRleDpudWxsLCB0dHlwZTpVTkFSWSwgY29kZXM6QU1mcmt9LAore2lucHV0OiJtYXRoZnJhayIsICB0YWc6Im1zdHlsZSIsIGF0bmFtZToibWF0aHZhcmlhbnQiLCBhdHZhbDoiZnJha3R1ciIsIG91dHB1dDoibWF0aGZyYWsiLCB0ZXg6bnVsbCwgdHR5cGU6VU5BUlksIGNvZGVzOkFNZnJrfQorXTsKKworZnVuY3Rpb24gY29tcGFyZU5hbWVzKHMxLHMyKSB7CisgIGlmIChzMS5pbnB1dCA+IHMyLmlucHV0KSByZXR1cm4gMQorICBlbHNlIHJldHVybiAtMTsKK30KKwordmFyIEFNbmFtZXMgPSBbXTsgLy9saXN0IG9mIGlucHV0IHN5bWJvbHMKKworZnVuY3Rpb24gaW5pdFN5bWJvbHMoKSB7CisgIHZhciB0ZXhzeW1ib2xzID0gW10sIGk7CisgIGZvciAoaT0wOyBpPEFNc3ltYm9scy5sZW5ndGg7IGkrKykKKyAgICBpZiAoQU1zeW1ib2xzW2ldLnRleCkgCisgICAgICB0ZXhzeW1ib2xzW3RleHN5bWJvbHMubGVuZ3RoXSA9IHtpbnB1dDpBTXN5bWJvbHNbaV0udGV4LCAKKyAgICAgICAgdGFnOkFNc3ltYm9sc1tpXS50YWcsIG91dHB1dDpBTXN5bWJvbHNbaV0ub3V0cHV0LCB0dHlwZTpBTXN5bWJvbHNbaV0udHR5cGV9OworICBBTXN5bWJvbHMgPSBBTXN5bWJvbHMuY29uY2F0KHRleHN5bWJvbHMpOworICByZWZyZXNoU3ltYm9scygpOworfQorCitmdW5jdGlvbiByZWZyZXNoU3ltYm9scygpeworICB2YXIgaTsKKyAgQU1zeW1ib2xzLnNvcnQoY29tcGFyZU5hbWVzKTsKKyAgZm9yIChpPTA7IGk8QU1zeW1ib2xzLmxlbmd0aDsgaSsrKSBBTW5hbWVzW2ldID0gQU1zeW1ib2xzW2ldLmlucHV0OworICBMTXN5bWJvbHMuc29ydChjb21wYXJlTmFtZXMpOworICBmb3IgKGk9MDsgaTxMTXN5bWJvbHMubGVuZ3RoOyBpKyspIExNbmFtZXNbaV0gPSBMTXN5bWJvbHNbaV0uaW5wdXQ7Cit9CisKK2Z1bmN0aW9uIGRlZmluZShvbGRzdHIsbmV3c3RyKSB7CisgIGlmKG9sZHN0ci5zdWJzdHIoMCwxKT09IlxcIikKKyAgICBMTXN5bWJvbHMgPSBMTXN5bWJvbHMuY29uY2F0KFt7aW5wdXQ6b2xkc3RyLCB0YWc6Im1vIiwgb3V0cHV0Om5ld3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0eXBlOkRFRklOSVRJT059XSk7CisgIGVsc2UKKyAgICBBTXN5bWJvbHMgPSBBTXN5bWJvbHMuY29uY2F0KFt7aW5wdXQ6b2xkc3RyLCB0YWc6Im1vIiwgb3V0cHV0Om5ld3N0ciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXg6bnVsbCwgdHR5cGU6REVGSU5JVElPTn1dKTsKKyAgcmVmcmVzaFN5bWJvbHMoKTsgLy8gdGhpcyBtYXkgYmUgYSBwcm9ibGVtIGlmIG1hbnkgc3ltYm9scyBhcmUgZGVmaW5lZCEKK30KKworZnVuY3Rpb24gQU1yZW1vdmVDaGFyc0FuZEJsYW5rcyhzdHIsbikgeworLy9yZW1vdmUgbiBjaGFyYWN0ZXJzIGFuZCBhbnkgZm9sbG93aW5nIGJsYW5rcworICB2YXIgc3Q7CisgIGlmIChzdHIuY2hhckF0KG4pPT0iXFwiICYmIHN0ci5jaGFyQXQobisxKSE9IlxcIiAmJiBzdHIuY2hhckF0KG4rMSkhPSIgIikgCisgICAgc3QgPSBzdHIuc2xpY2UobisxKTsKKyAgZWxzZSBzdCA9IHN0ci5zbGljZShuKTsKKyAgZm9yICh2YXIgaT0wOyBpPHN0Lmxlbmd0aCAmJiBzdC5jaGFyQ29kZUF0KGkpPD0zMjsgaT1pKzEpOworICByZXR1cm4gc3Quc2xpY2UoaSk7Cit9CisKK2Z1bmN0aW9uIHBvc2l0aW9uKGFyciwgc3RyLCBuKSB7IAorLy8gcmV0dXJuIHBvc2l0aW9uID49biB3aGVyZSBzdHIgYXBwZWFycyBvciB3b3VsZCBiZSBpbnNlcnRlZAorLy8gYXNzdW1lcyBhcnIgaXMgc29ydGVkCisgIGlmIChuPT0wKSB7CisgICAgdmFyIGgsbTsKKyAgICBuID0gLTE7CisgICAgaCA9IGFyci5sZW5ndGg7CisgICAgd2hpbGUgKG4rMTxoKSB7CisgICAgICBtID0gKG4raCkgPj4gMTsKKyAgICAgIGlmIChhcnJbbV08c3RyKSBuID0gbTsgZWxzZSBoID0gbTsKKyAgICB9CisgICAgcmV0dXJuIGg7CisgIH0gZWxzZQorICAgIGZvciAodmFyIGk9bjsgaTxhcnIubGVuZ3RoICYmIGFycltpXTxzdHI7IGkrKyk7CisgIHJldHVybiBpOyAvLyBpPWFyci5sZW5ndGggfHwgYXJyW2ldPj1zdHIKK30KKworZnVuY3Rpb24gQU1nZXRTeW1ib2woc3RyKSB7CisvL3JldHVybiBtYXhpbWFsIGluaXRpYWwgc3Vic3RyaW5nIG9mIHN0ciB0aGF0IGFwcGVhcnMgaW4gbmFtZXMKKy8vcmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm9uZQorICB2YXIgayA9IDA7IC8vbmV3IHBvcworICB2YXIgaiA9IDA7IC8vb2xkIHBvcworICB2YXIgbWs7IC8vbWF0Y2ggcG9zCisgIHZhciBzdDsKKyAgdmFyIHRhZ3N0OworICB2YXIgbWF0Y2ggPSAiIjsKKyAgdmFyIG1vcmUgPSB0cnVlOworICBmb3IgKHZhciBpPTE7IGk8PXN0ci5sZW5ndGggJiYgbW9yZTsgaSsrKSB7CisgICAgc3QgPSBzdHIuc2xpY2UoMCxpKTsgLy9pbml0aWFsIHN1YnN0cmluZyBvZiBsZW5ndGggaQorICAgIGogPSBrOworICAgIGsgPSBwb3NpdGlvbihBTW5hbWVzLCBzdCwgaik7CisgICAgaWYgKGs8QU1uYW1lcy5sZW5ndGggJiYgc3RyLnNsaWNlKDAsQU1uYW1lc1trXS5sZW5ndGgpPT1BTW5hbWVzW2tdKXsKKyAgICAgIG1hdGNoID0gQU1uYW1lc1trXTsKKyAgICAgIG1rID0gazsKKyAgICAgIGkgPSBtYXRjaC5sZW5ndGg7CisgICAgfQorICAgIG1vcmUgPSBrPEFNbmFtZXMubGVuZ3RoICYmIHN0ci5zbGljZSgwLEFNbmFtZXNba10ubGVuZ3RoKT49QU1uYW1lc1trXTsKKyAgfQorICBBTXByZXZpb3VzU3ltYm9sPUFNY3VycmVudFN5bWJvbDsKKyAgaWYgKG1hdGNoIT0iIil7CisgICAgQU1jdXJyZW50U3ltYm9sPUFNc3ltYm9sc1tta10udHR5cGU7CisgICAgcmV0dXJuIEFNc3ltYm9sc1tta107IAorICB9CisvLyBpZiBzdHJbMF0gaXMgYSBkaWdpdCBvciAtIHJldHVybiBtYXhzdWJzdHJpbmcgb2YgZGlnaXRzLmRpZ2l0cworICBBTWN1cnJlbnRTeW1ib2w9Q09OU1Q7CisgIGsgPSAxOworICBzdCA9IHN0ci5zbGljZSgwLDEpOworICB2YXIgaW50ZWcgPSB0cnVlOworICB3aGlsZSAoIjAiPD1zdCAmJiBzdDw9IjkiICYmIGs8PXN0ci5sZW5ndGgpIHsKKyAgICBzdCA9IHN0ci5zbGljZShrLGsrMSk7CisgICAgaysrOworICB9CisgIGlmIChzdCA9PSBkZWNpbWFsc2lnbikgeworICAgIHN0ID0gc3RyLnNsaWNlKGssaysxKTsKKyAgICBpZiAoIjAiPD1zdCAmJiBzdDw9IjkiKSB7CisgICAgICBpbnRlZyA9IGZhbHNlOworICAgICAgaysrOworICAgICAgd2hpbGUgKCIwIjw9c3QgJiYgc3Q8PSI5IiAmJiBrPD1zdHIubGVuZ3RoKSB7CisgICAgICAgIHN0ID0gc3RyLnNsaWNlKGssaysxKTsKKyAgICAgICAgaysrOworICAgICAgfQorICAgIH0KKyAgfQorICBpZiAoKGludGVnICYmIGs+MSkgfHwgaz4yKSB7CisgICAgc3QgPSBzdHIuc2xpY2UoMCxrLTEpOworICAgIHRhZ3N0ID0gIm1uIjsKKyAgfSBlbHNlIHsKKyAgICBrID0gMjsKKyAgICBzdCA9IHN0ci5zbGljZSgwLDEpOyAvL3Rha2UgMSBjaGFyYWN0ZXIKKyAgICB0YWdzdCA9ICgoIkEiPnN0IHx8IHN0PiJaIikgJiYgKCJhIj5zdCB8fCBzdD4ieiIpPyJtbyI6Im1pIik7CisgIH0KKyAgaWYgKHN0PT0iLSIgJiYgQU1wcmV2aW91c1N5bWJvbD09SU5GSVgpIHsKKyAgICBBTWN1cnJlbnRTeW1ib2wgPSBJTkZJWDsgIC8vdHJpY2sgIi8iIGludG8gcmVjb2duaXppbmcgIi0iIG9uIHNlY29uZCBwYXJzZQorICAgIHJldHVybiB7aW5wdXQ6c3QsIHRhZzp0YWdzdCwgb3V0cHV0OnN0LCB0dHlwZTpVTkFSWSwgZnVuYzp0cnVlfTsKKyAgfQorICByZXR1cm4ge2lucHV0OnN0LCB0YWc6dGFnc3QsIG91dHB1dDpzdCwgdHR5cGU6Q09OU1R9OworfQorCitmdW5jdGlvbiBBTXJlbW92ZUJyYWNrZXRzKG5vZGUpIHsKKyAgdmFyIHN0OworICBpZiAobm9kZS5ub2RlTmFtZT09Im1yb3ciKSB7CisgICAgc3QgPSBub2RlLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5ub2RlVmFsdWU7CisgICAgaWYgKHN0PT0iKCIgfHwgc3Q9PSJbIiB8fCBzdD09InsiKSBub2RlLnJlbW92ZUNoaWxkKG5vZGUuZmlyc3RDaGlsZCk7CisgIH0KKyAgaWYgKG5vZGUubm9kZU5hbWU9PSJtcm93IikgeworICAgIHN0ID0gbm9kZS5sYXN0Q2hpbGQuZmlyc3RDaGlsZC5ub2RlVmFsdWU7CisgICAgaWYgKHN0PT0iKSIgfHwgc3Q9PSJdIiB8fCBzdD09In0iKSBub2RlLnJlbW92ZUNoaWxkKG5vZGUubGFzdENoaWxkKTsKKyAgfQorfQorCisvKlBhcnNpbmcgQVNDSUkgbWF0aCBleHByZXNzaW9ucyB3aXRoIHRoZSBmb2xsb3dpbmcgZ3JhbW1hcgordiA6Oj0gW0EtWmEtel0gfCBncmVlayBsZXR0ZXJzIHwgbnVtYmVycyB8IG90aGVyIGNvbnN0YW50IHN5bWJvbHMKK3UgOjo9IHNxcnQgfCB0ZXh0IHwgYmIgfCBvdGhlciB1bmFyeSBzeW1ib2xzIGZvciBmb250IGNvbW1hbmRzCitiIDo6PSBmcmFjIHwgcm9vdCB8IHN0YWNrcmVsICAgICAgICAgYmluYXJ5IHN5bWJvbHMKK2wgOjo9ICggfCBbIHwgeyB8ICg6IHwgezogICAgICAgICAgICBsZWZ0IGJyYWNrZXRzCityIDo6PSApIHwgXSB8IH0gfCA6KSB8IDp9ICAgICAgICAgICAgcmlnaHQgYnJhY2tldHMKK1MgOjo9IHYgfCBsRXIgfCB1UyB8IGJTUyAgICAgICAgICAgICBTaW1wbGUgZXhwcmVzc2lvbgorSSA6Oj0gU19TIHwgU15TIHwgU19TXlMgfCBTICAgICAgICAgIEludGVybWVkaWF0ZSBleHByZXNzaW9uCitFIDo6PSBJRSB8IEkvSSAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbgorRWFjaCB0ZXJtaW5hbCBzeW1ib2wgaXMgdHJhbnNsYXRlZCBpbnRvIGEgY29ycmVzcG9uZGluZyBtYXRobWwgbm9kZS4qLworCit2YXIgQU1uZXN0aW5nRGVwdGgsQU1wcmV2aW91c1N5bWJvbCxBTWN1cnJlbnRTeW1ib2w7CisKK2Z1bmN0aW9uIEFNcGFyc2VTZXhwcihzdHIpIHsgLy9wYXJzZXMgc3RyIGFuZCByZXR1cm5zIFtub2RlLHRhaWxzdHJdCisgIHZhciBzeW1ib2wsIG5vZGUsIHJlc3VsdCwgaSwgc3QsLy8gcmlnaHR2ZXJ0ID0gZmFsc2UsCisgICAgbmV3RnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgc3RyID0gQU1yZW1vdmVDaGFyc0FuZEJsYW5rcyhzdHIsMCk7CisgIHN5bWJvbCA9IEFNZ2V0U3ltYm9sKHN0cik7ICAgICAgICAgICAgIC8vZWl0aGVyIGEgdG9rZW4gb3IgYSBicmFja2V0IG9yIGVtcHR5CisgIGlmIChzeW1ib2wgPT0gbnVsbCB8fCBzeW1ib2wudHR5cGUgPT0gUklHSFRCUkFDS0VUICYmIEFNbmVzdGluZ0RlcHRoID4gMCkgeworICAgIHJldHVybiBbbnVsbCxzdHJdOworICB9CisgIGlmIChzeW1ib2wudHR5cGUgPT0gREVGSU5JVElPTikgeworICAgIHN0ciA9IHN5bWJvbC5vdXRwdXQrQU1yZW1vdmVDaGFyc0FuZEJsYW5rcyhzdHIsc3ltYm9sLmlucHV0Lmxlbmd0aCk7IAorICAgIHN5bWJvbCA9IEFNZ2V0U3ltYm9sKHN0cik7CisgIH0KKyAgc3dpdGNoIChzeW1ib2wudHR5cGUpIHsgIGNhc2UgVU5ERVJPVkVSOgorICBjYXNlIENPTlNUOgorICAgIHN0ciA9IEFNcmVtb3ZlQ2hhcnNBbmRCbGFua3Moc3RyLHN5bWJvbC5pbnB1dC5sZW5ndGgpOyAKKyAgICByZXR1cm4gW2NyZWF0ZU1tbE5vZGUoc3ltYm9sLnRhZywgICAgICAgIC8vaXRzIGEgY29uc3RhbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3ltYm9sLm91dHB1dCkpLHN0cl07CisgIGNhc2UgTEVGVEJSQUNLRVQ6ICAgLy9yZWFkIChleHByKykKKyAgICBBTW5lc3RpbmdEZXB0aCsrOworICAgIHN0ciA9IEFNcmVtb3ZlQ2hhcnNBbmRCbGFua3Moc3RyLHN5bWJvbC5pbnB1dC5sZW5ndGgpOyAKKyAgICByZXN1bHQgPSBBTXBhcnNlRXhwcihzdHIsdHJ1ZSk7CisgICAgQU1uZXN0aW5nRGVwdGgtLTsKKyAgICBpZiAodHlwZW9mIHN5bWJvbC5pbnZpc2libGUgPT0gImJvb2xlYW4iICYmIHN5bWJvbC5pbnZpc2libGUpIAorICAgICAgbm9kZSA9IGNyZWF0ZU1tbE5vZGUoIm1yb3ciLHJlc3VsdFswXSk7CisgICAgZWxzZSB7CisgICAgICBub2RlID0gY3JlYXRlTW1sTm9kZSgibW8iLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN5bWJvbC5vdXRwdXQpKTsKKyAgICAgIG5vZGUgPSBjcmVhdGVNbWxOb2RlKCJtcm93Iixub2RlKTsKKyAgICAgIG5vZGUuYXBwZW5kQ2hpbGQocmVzdWx0WzBdKTsKKyAgICB9CisgICAgcmV0dXJuIFtub2RlLHJlc3VsdFsxXV07CisgIGNhc2UgVEVYVDoKKyAgICAgIGlmIChzeW1ib2whPUFNcXVvdGUpIHN0ciA9IEFNcmVtb3ZlQ2hhcnNBbmRCbGFua3Moc3RyLHN5bWJvbC5pbnB1dC5sZW5ndGgpOworICAgICAgaWYgKHN0ci5jaGFyQXQoMCk9PSJ7IikgaT1zdHIuaW5kZXhPZigifSIpOworICAgICAgZWxzZSBpZiAoc3RyLmNoYXJBdCgwKT09IigiKSBpPXN0ci5pbmRleE9mKCIpIik7CisgICAgICBlbHNlIGlmIChzdHIuY2hhckF0KDApPT0iWyIpIGk9c3RyLmluZGV4T2YoIl0iKTsKKyAgICAgIGVsc2UgaWYgKHN5bWJvbD09QU1xdW90ZSkgaT1zdHIuc2xpY2UoMSkuaW5kZXhPZigiXCIiKSsxOworICAgICAgZWxzZSBpID0gMDsKKyAgICAgIGlmIChpPT0tMSkgaSA9IHN0ci5sZW5ndGg7CisgICAgICBzdCA9IHN0ci5zbGljZSgxLGkpOworICAgICAgaWYgKHN0LmNoYXJBdCgwKSA9PSAiICIpIHsKKyAgICAgICAgbm9kZSA9IGNyZWF0ZU1tbE5vZGUoIm1zcGFjZSIpOworICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIxZXgiKTsKKyAgICAgICAgbmV3RnJhZy5hcHBlbmRDaGlsZChub2RlKTsKKyAgICAgIH0KKyAgICAgIG5ld0ZyYWcuYXBwZW5kQ2hpbGQoCisgICAgICAgIGNyZWF0ZU1tbE5vZGUoc3ltYm9sLnRhZyxkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdCkpKTsKKyAgICAgIGlmIChzdC5jaGFyQXQoc3QubGVuZ3RoLTEpID09ICIgIikgeworICAgICAgICBub2RlID0gY3JlYXRlTW1sTm9kZSgibXNwYWNlIik7CisgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjFleCIpOworICAgICAgICBuZXdGcmFnLmFwcGVuZENoaWxkKG5vZGUpOworICAgICAgfQorICAgICAgc3RyID0gQU1yZW1vdmVDaGFyc0FuZEJsYW5rcyhzdHIsaSsxKTsKKyAgICAgIHJldHVybiBbY3JlYXRlTW1sTm9kZSgibXJvdyIsbmV3RnJhZyksc3RyXTsKKyAgY2FzZSBVTkFSWToKKyAgICAgIHN0ciA9IEFNcmVtb3ZlQ2hhcnNBbmRCbGFua3Moc3RyLHN5bWJvbC5pbnB1dC5sZW5ndGgpOyAKKyAgICAgIHJlc3VsdCA9IEFNcGFyc2VTZXhwcihzdHIpOworICAgICAgaWYgKHJlc3VsdFswXT09bnVsbCkgcmV0dXJuIFtjcmVhdGVNbWxOb2RlKHN5bWJvbC50YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN5bWJvbC5vdXRwdXQpKSxzdHJdOworICAgICAgaWYgKHR5cGVvZiBzeW1ib2wuZnVuYyA9PSAiYm9vbGVhbiIgJiYgc3ltYm9sLmZ1bmMpIHsgLy8gZnVuY3Rpb25zIGhhY2sKKyAgICAgICAgc3QgPSBzdHIuY2hhckF0KDApOworICAgICAgICBpZiAoc3Q9PSJeIiB8fCBzdD09Il8iIHx8IHN0PT0iLyIgfHwgc3Q9PSJ8IiB8fCBzdD09IiwiKSB7CisgICAgICAgICAgcmV0dXJuIFtjcmVhdGVNbWxOb2RlKHN5bWJvbC50YWcsCisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN5bWJvbC5vdXRwdXQpKSxzdHJdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG5vZGUgPSBjcmVhdGVNbWxOb2RlKCJtcm93IiwKKyAgICAgICAgICAgY3JlYXRlTW1sTm9kZShzeW1ib2wudGFnLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN5bWJvbC5vdXRwdXQpKSk7CisgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChyZXN1bHRbMF0pOworICAgICAgICAgIHJldHVybiBbbm9kZSxyZXN1bHRbMV1dOworICAgICAgICB9CisgICAgICB9CisgICAgICBBTXJlbW92ZUJyYWNrZXRzKHJlc3VsdFswXSk7CisgICAgICBpZiAoc3ltYm9sLmlucHV0ID09ICJzcXJ0IikgeyAgICAgICAgICAgLy8gc3FydAorICAgICAgICByZXR1cm4gW2NyZWF0ZU1tbE5vZGUoc3ltYm9sLnRhZyxyZXN1bHRbMF0pLHJlc3VsdFsxXV07CisgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzeW1ib2wuYWNjID09ICJib29sZWFuIiAmJiBzeW1ib2wuYWNjKSB7ICAgLy8gYWNjZW50CisgICAgICAgIG5vZGUgPSBjcmVhdGVNbWxOb2RlKHN5bWJvbC50YWcscmVzdWx0WzBdKTsKKyAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChjcmVhdGVNbWxOb2RlKCJtbyIsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3ltYm9sLm91dHB1dCkpKTsKKyAgICAgICAgcmV0dXJuIFtub2RlLHJlc3VsdFsxXV07CisgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvbnQgY2hhbmdlIGNvbW1hbmQKKyAgICAgICAgaWYgKCFpc0lFICYmIHR5cGVvZiBzeW1ib2wuY29kZXMgIT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICBmb3IgKGk9MDsgaTxyZXN1bHRbMF0uY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGlmIChyZXN1bHRbMF0uY2hpbGROb2Rlc1tpXS5ub2RlTmFtZT09Im1pIiB8fCByZXN1bHRbMF0ubm9kZU5hbWU9PSJtaSIpIHsKKyAgICAgICAgICAgICAgc3QgPSAocmVzdWx0WzBdLm5vZGVOYW1lPT0ibWkiP3Jlc3VsdFswXS5maXJzdENoaWxkLm5vZGVWYWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFswXS5jaGlsZE5vZGVzW2ldLmZpcnN0Q2hpbGQubm9kZVZhbHVlKTsKKyAgICAgICAgICAgICAgdmFyIG5ld3N0ID0gW107CisgICAgICAgICAgICAgIGZvciAodmFyIGo9MDsgajxzdC5sZW5ndGg7IGorKykKKyAgICAgICAgICAgICAgICBpZiAoc3QuY2hhckNvZGVBdChqKT42NCAmJiBzdC5jaGFyQ29kZUF0KGopPDkxKSBuZXdzdCA9IG5ld3N0ICsKKyAgICAgICAgICAgICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoc3ltYm9sLmNvZGVzW3N0LmNoYXJDb2RlQXQoaiktNjVdKTsKKyAgICAgICAgICAgICAgICBlbHNlIG5ld3N0ID0gbmV3c3QgKyBzdC5jaGFyQXQoaik7CisgICAgICAgICAgICAgIGlmIChyZXN1bHRbMF0ubm9kZU5hbWU9PSJtaSIpCisgICAgICAgICAgICAgICAgcmVzdWx0WzBdPWNyZWF0ZU1tbE5vZGUoIm1vIikuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5ld3N0KSk7CisgICAgICAgICAgICAgIGVsc2UgcmVzdWx0WzBdLnJlcGxhY2VDaGlsZChjcmVhdGVNbWxOb2RlKCJtbyIpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5ld3N0KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzBdLmNoaWxkTm9kZXNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG5vZGUgPSBjcmVhdGVNbWxOb2RlKHN5bWJvbC50YWcscmVzdWx0WzBdKTsKKyAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoc3ltYm9sLmF0bmFtZSxzeW1ib2wuYXR2YWwpOworICAgICAgICByZXR1cm4gW25vZGUscmVzdWx0WzFdXTsKKyAgICAgIH0KKyAgY2FzZSBCSU5BUlk6CisgICAgc3RyID0gQU1yZW1vdmVDaGFyc0FuZEJsYW5rcyhzdHIsc3ltYm9sLmlucHV0Lmxlbmd0aCk7IAorICAgIHJlc3VsdCA9IEFNcGFyc2VTZXhwcihzdHIpOworICAgIGlmIChyZXN1bHRbMF09PW51bGwpIHJldHVybiBbY3JlYXRlTW1sTm9kZSgibW8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3ltYm9sLmlucHV0KSksc3RyXTsKKyAgICBBTXJlbW92ZUJyYWNrZXRzKHJlc3VsdFswXSk7CisgICAgdmFyIHJlc3VsdDIgPSBBTXBhcnNlU2V4cHIocmVzdWx0WzFdKTsKKyAgICBpZiAocmVzdWx0MlswXT09bnVsbCkgcmV0dXJuIFtjcmVhdGVNbWxOb2RlKCJtbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzeW1ib2wuaW5wdXQpKSxzdHJdOworICAgIEFNcmVtb3ZlQnJhY2tldHMocmVzdWx0MlswXSk7CisgICAgaWYgKHN5bWJvbC5pbnB1dD09InJvb3QiIHx8IHN5bWJvbC5pbnB1dD09InN0YWNrcmVsIikgCisgICAgICBuZXdGcmFnLmFwcGVuZENoaWxkKHJlc3VsdDJbMF0pOworICAgIG5ld0ZyYWcuYXBwZW5kQ2hpbGQocmVzdWx0WzBdKTsKKyAgICBpZiAoc3ltYm9sLmlucHV0PT0iZnJhYyIpIG5ld0ZyYWcuYXBwZW5kQ2hpbGQocmVzdWx0MlswXSk7CisgICAgcmV0dXJuIFtjcmVhdGVNbWxOb2RlKHN5bWJvbC50YWcsbmV3RnJhZykscmVzdWx0MlsxXV07CisgIGNhc2UgSU5GSVg6CisgICAgc3RyID0gQU1yZW1vdmVDaGFyc0FuZEJsYW5rcyhzdHIsc3ltYm9sLmlucHV0Lmxlbmd0aCk7IAorICAgIHJldHVybiBbY3JlYXRlTW1sTm9kZSgibW8iLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN5bWJvbC5vdXRwdXQpKSxzdHJdOworICBjYXNlIFNQQUNFOgorICAgIHN0ciA9IEFNcmVtb3ZlQ2hhcnNBbmRCbGFua3Moc3RyLHN5bWJvbC5pbnB1dC5sZW5ndGgpOyAKKyAgICBub2RlID0gY3JlYXRlTW1sTm9kZSgibXNwYWNlIik7CisgICAgbm9kZS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMWV4Iik7CisgICAgbmV3RnJhZy5hcHBlbmRDaGlsZChub2RlKTsKKyAgICBuZXdGcmFnLmFwcGVuZENoaWxkKAorICAgICAgY3JlYXRlTW1sTm9kZShzeW1ib2wudGFnLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN5bWJvbC5vdXRwdXQpKSk7CisgICAgbm9kZSA9IGNyZWF0ZU1tbE5vZGUoIm1zcGFjZSIpOworICAgIG5vZGUuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjFleCIpOworICAgIG5ld0ZyYWcuYXBwZW5kQ2hpbGQobm9kZSk7CisgICAgcmV0dXJuIFtjcmVhdGVNbWxOb2RlKCJtcm93IixuZXdGcmFnKSxzdHJdOworICBjYXNlIExFRlRSSUdIVDoKKy8vICAgIGlmIChyaWdodHZlcnQpIHJldHVybiBbbnVsbCxzdHJdOyBlbHNlIHJpZ2h0dmVydCA9IHRydWU7CisgICAgQU1uZXN0aW5nRGVwdGgrKzsKKyAgICBzdHIgPSBBTXJlbW92ZUNoYXJzQW5kQmxhbmtzKHN0cixzeW1ib2wuaW5wdXQubGVuZ3RoKTsgCisgICAgcmVzdWx0ID0gQU1wYXJzZUV4cHIoc3RyLGZhbHNlKTsKKyAgICBBTW5lc3RpbmdEZXB0aC0tOworICAgIHZhciBzdCA9ICIiOworICAgIGlmIChyZXN1bHRbMF0ubGFzdENoaWxkIT1udWxsKQorICAgICAgc3QgPSByZXN1bHRbMF0ubGFzdENoaWxkLmZpcnN0Q2hpbGQubm9kZVZhbHVlOworICAgIGlmIChzdCA9PSAifCIpIHsgLy8gaXRzIGFuIGFic29sdXRlIHZhbHVlIHN1YnRlcm0KKyAgICAgIG5vZGUgPSBjcmVhdGVNbWxOb2RlKCJtbyIsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3ltYm9sLm91dHB1dCkpOworICAgICAgbm9kZSA9IGNyZWF0ZU1tbE5vZGUoIm1yb3ciLG5vZGUpOworICAgICAgbm9kZS5hcHBlbmRDaGlsZChyZXN1bHRbMF0pOworICAgICAgcmV0dXJuIFtub2RlLHJlc3VsdFsxXV07CisgICAgfSBlbHNlIHsgLy8gdGhlICJ8IiBpcyBhIFxtaWQgc28gdXNlIHVuaWNvZGUgMjIyMyAoZGl2aWRlcykgZm9yIHNwYWNpbmcKKyAgICAgIG5vZGUgPSBjcmVhdGVNbWxOb2RlKCJtbyIsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlx1MjIyMyIpKTsKKyAgICAgIG5vZGUgPSBjcmVhdGVNbWxOb2RlKCJtcm93Iixub2RlKTsKKyAgICAgIHJldHVybiBbbm9kZSxzdHJdOworICAgIH0KKyAgZGVmYXVsdDoKKy8vYWxlcnQoImRlZmF1bHQiKTsKKyAgICBzdHIgPSBBTXJlbW92ZUNoYXJzQW5kQmxhbmtzKHN0cixzeW1ib2wuaW5wdXQubGVuZ3RoKTsgCisgICAgcmV0dXJuIFtjcmVhdGVNbWxOb2RlKHN5bWJvbC50YWcsICAgICAgICAvL2l0cyBhIGNvbnN0YW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN5bWJvbC5vdXRwdXQpKSxzdHJdOworICB9Cit9CisKK2Z1bmN0aW9uIEFNcGFyc2VJZXhwcihzdHIpIHsKKyAgdmFyIHN5bWJvbCwgc3ltMSwgc3ltMiwgbm9kZSwgcmVzdWx0LCB1bmRlcm92ZXI7CisgIHN0ciA9IEFNcmVtb3ZlQ2hhcnNBbmRCbGFua3Moc3RyLDApOworICBzeW0xID0gQU1nZXRTeW1ib2woc3RyKTsKKyAgcmVzdWx0ID0gQU1wYXJzZVNleHByKHN0cik7CisgIG5vZGUgPSByZXN1bHRbMF07CisgIHN0ciA9IHJlc3VsdFsxXTsKKyAgc3ltYm9sID0gQU1nZXRTeW1ib2woc3RyKTsKKyAgaWYgKHN5bWJvbC50dHlwZSA9PSBJTkZJWCAmJiBzeW1ib2wuaW5wdXQgIT0gIi8iKSB7CisgICAgc3RyID0gQU1yZW1vdmVDaGFyc0FuZEJsYW5rcyhzdHIsc3ltYm9sLmlucHV0Lmxlbmd0aCk7CisvLyAgICBpZiAoc3ltYm9sLmlucHV0ID09ICIvIikgcmVzdWx0ID0gQU1wYXJzZUlleHByKHN0cik7IGVsc2UgLi4uCisgICAgcmVzdWx0ID0gQU1wYXJzZVNleHByKHN0cik7CisgICAgaWYgKHJlc3VsdFswXSA9PSBudWxsKSAvLyBzaG93IGJveCBpbiBwbGFjZSBvZiBtaXNzaW5nIGFyZ3VtZW50CisgICAgICByZXN1bHRbMF0gPSBjcmVhdGVNbWxOb2RlKCJtbyIsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlx1MjVBMSIpKTsKKyAgICBlbHNlIEFNcmVtb3ZlQnJhY2tldHMocmVzdWx0WzBdKTsKKyAgICBzdHIgPSByZXN1bHRbMV07CisvLyAgICBpZiAoc3ltYm9sLmlucHV0ID09ICIvIikgQU1yZW1vdmVCcmFja2V0cyhub2RlKTsKKyAgICBpZiAoc3ltYm9sLmlucHV0ID09ICJfIikgeworICAgICAgc3ltMiA9IEFNZ2V0U3ltYm9sKHN0cik7CisgICAgICB1bmRlcm92ZXIgPSAoc3ltMS50dHlwZSA9PSBVTkRFUk9WRVIpOworICAgICAgaWYgKHN5bTIuaW5wdXQgPT0gIl4iKSB7CisgICAgICAgIHN0ciA9IEFNcmVtb3ZlQ2hhcnNBbmRCbGFua3Moc3RyLHN5bTIuaW5wdXQubGVuZ3RoKTsKKyAgICAgICAgdmFyIHJlczIgPSBBTXBhcnNlU2V4cHIoc3RyKTsKKyAgICAgICAgQU1yZW1vdmVCcmFja2V0cyhyZXMyWzBdKTsKKyAgICAgICAgc3RyID0gcmVzMlsxXTsKKyAgICAgICAgbm9kZSA9IGNyZWF0ZU1tbE5vZGUoKHVuZGVyb3Zlcj8ibXVuZGVyb3ZlciI6Im1zdWJzdXAiKSxub2RlKTsKKyAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChyZXN1bHRbMF0pOworICAgICAgICBub2RlLmFwcGVuZENoaWxkKHJlczJbMF0pOworICAgICAgICBub2RlID0gY3JlYXRlTW1sTm9kZSgibXJvdyIsbm9kZSk7IC8vIHNvIHN1bSBkb2VzIG5vdCBzdHJldGNoCisgICAgICB9IGVsc2UgeworICAgICAgICBub2RlID0gY3JlYXRlTW1sTm9kZSgodW5kZXJvdmVyPyJtdW5kZXIiOiJtc3ViIiksbm9kZSk7CisgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQocmVzdWx0WzBdKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgbm9kZSA9IGNyZWF0ZU1tbE5vZGUoc3ltYm9sLnRhZyxub2RlKTsKKyAgICAgIG5vZGUuYXBwZW5kQ2hpbGQocmVzdWx0WzBdKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIFtub2RlLHN0cl07Cit9CisKK2Z1bmN0aW9uIEFNcGFyc2VFeHByKHN0cixyaWdodGJyYWNrZXQpIHsKKyAgdmFyIHN5bWJvbCwgbm9kZSwgcmVzdWx0LCBpLCBub2RlTGlzdCA9IFtdLAorICBuZXdGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworICBkbyB7CisgICAgc3RyID0gQU1yZW1vdmVDaGFyc0FuZEJsYW5rcyhzdHIsMCk7CisgICAgcmVzdWx0ID0gQU1wYXJzZUlleHByKHN0cik7CisgICAgbm9kZSA9IHJlc3VsdFswXTsKKyAgICBzdHIgPSByZXN1bHRbMV07CisgICAgc3ltYm9sID0gQU1nZXRTeW1ib2woc3RyKTsKKyAgICBpZiAoc3ltYm9sLnR0eXBlID09IElORklYICYmIHN5bWJvbC5pbnB1dCA9PSAiLyIpIHsKKyAgICAgIHN0ciA9IEFNcmVtb3ZlQ2hhcnNBbmRCbGFua3Moc3RyLHN5bWJvbC5pbnB1dC5sZW5ndGgpOworICAgICAgcmVzdWx0ID0gQU1wYXJzZUlleHByKHN0cik7CisgICAgICBpZiAocmVzdWx0WzBdID09IG51bGwpIC8vIHNob3cgYm94IGluIHBsYWNlIG9mIG1pc3NpbmcgYXJndW1lbnQKKyAgICAgICAgcmVzdWx0WzBdID0gY3JlYXRlTW1sTm9kZSgibW8iLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcdTI1QTEiKSk7CisgICAgICBlbHNlIEFNcmVtb3ZlQnJhY2tldHMocmVzdWx0WzBdKTsKKyAgICAgIHN0ciA9IHJlc3VsdFsxXTsKKyAgICAgIEFNcmVtb3ZlQnJhY2tldHMobm9kZSk7CisgICAgICBub2RlID0gY3JlYXRlTW1sTm9kZShzeW1ib2wudGFnLG5vZGUpOworICAgICAgbm9kZS5hcHBlbmRDaGlsZChyZXN1bHRbMF0pOworICAgICAgbmV3RnJhZy5hcHBlbmRDaGlsZChub2RlKTsKKyAgICAgIHN5bWJvbCA9IEFNZ2V0U3ltYm9sKHN0cik7CisgICAgfSAKKyAgICBlbHNlIGlmIChub2RlIT11bmRlZmluZWQpIG5ld0ZyYWcuYXBwZW5kQ2hpbGQobm9kZSk7CisgIH0gd2hpbGUgKChzeW1ib2wudHR5cGUgIT0gUklHSFRCUkFDS0VUICYmIAorICAgICAgICAgICAoc3ltYm9sLnR0eXBlICE9IExFRlRSSUdIVCB8fCByaWdodGJyYWNrZXQpCisgICAgICAgICAgIHx8IEFNbmVzdGluZ0RlcHRoID09IDApICYmIHN5bWJvbCE9bnVsbCAmJiBzeW1ib2wub3V0cHV0IT0iIik7CisgIGlmIChzeW1ib2wudHR5cGUgPT0gUklHSFRCUkFDS0VUIHx8IHN5bWJvbC50dHlwZSA9PSBMRUZUUklHSFQpIHsKKy8vICAgIGlmIChBTW5lc3RpbmdEZXB0aCA+IDApIEFNbmVzdGluZ0RlcHRoLS07CisgICAgdmFyIGxlbiA9IG5ld0ZyYWcuY2hpbGROb2Rlcy5sZW5ndGg7CisgICAgaWYgKGxlbj4wICYmIG5ld0ZyYWcuY2hpbGROb2Rlc1tsZW4tMV0ubm9kZU5hbWUgPT0gIm1yb3ciICYmIGxlbj4xICYmCisgICAgICBuZXdGcmFnLmNoaWxkTm9kZXNbbGVuLTJdLm5vZGVOYW1lID09ICJtbyIgJiYKKyAgICAgIG5ld0ZyYWcuY2hpbGROb2Rlc1tsZW4tMl0uZmlyc3RDaGlsZC5ub2RlVmFsdWUgPT0gIiwiKSB7IC8vbWF0cml4CisgICAgICB2YXIgcmlnaHQgPSBuZXdGcmFnLmNoaWxkTm9kZXNbbGVuLTFdLmxhc3RDaGlsZC5maXJzdENoaWxkLm5vZGVWYWx1ZTsKKyAgICAgIGlmIChyaWdodD09IikiIHx8IHJpZ2h0PT0iXSIpIHsKKyAgICAgICAgdmFyIGxlZnQgPSBuZXdGcmFnLmNoaWxkTm9kZXNbbGVuLTFdLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5ub2RlVmFsdWU7CisgICAgICAgIGlmIChsZWZ0PT0iKCIgJiYgcmlnaHQ9PSIpIiAmJiBzeW1ib2wub3V0cHV0ICE9ICJ9IiB8fCAKKyAgICAgICAgICAgIGxlZnQ9PSJbIiAmJiByaWdodD09Il0iKSB7CisgICAgICAgIHZhciBwb3MgPSBbXTsgLy8gcG9zaXRpb25zIG9mIGNvbW1hcworICAgICAgICB2YXIgbWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgdmFyIG0gPSBuZXdGcmFnLmNoaWxkTm9kZXMubGVuZ3RoOworICAgICAgICBmb3IgKGk9MDsgbWF0cml4ICYmIGk8bTsgaT1pKzIpIHsKKyAgICAgICAgICBwb3NbaV0gPSBbXTsKKyAgICAgICAgICBub2RlID0gbmV3RnJhZy5jaGlsZE5vZGVzW2ldOworICAgICAgICAgIGlmIChtYXRyaXgpIG1hdHJpeCA9IG5vZGUubm9kZU5hbWU9PSJtcm93IiAmJiAKKyAgICAgICAgICAgIChpPT1tLTEgfHwgbm9kZS5uZXh0U2libGluZy5ub2RlTmFtZT09Im1vIiAmJiAKKyAgICAgICAgICAgIG5vZGUubmV4dFNpYmxpbmcuZmlyc3RDaGlsZC5ub2RlVmFsdWU9PSIsIikmJgorICAgICAgICAgICAgbm9kZS5maXJzdENoaWxkLmZpcnN0Q2hpbGQubm9kZVZhbHVlPT1sZWZ0ICYmCisgICAgICAgICAgICBub2RlLmxhc3RDaGlsZC5maXJzdENoaWxkLm5vZGVWYWx1ZT09cmlnaHQ7CisgICAgICAgICAgaWYgKG1hdHJpeCkgCisgICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8bm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaisrKQorICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZE5vZGVzW2pdLmZpcnN0Q2hpbGQubm9kZVZhbHVlPT0iLCIpCisgICAgICAgICAgICAgICAgcG9zW2ldW3Bvc1tpXS5sZW5ndGhdPWo7CisgICAgICAgICAgaWYgKG1hdHJpeCAmJiBpPjEpIG1hdHJpeCA9IHBvc1tpXS5sZW5ndGggPT0gcG9zW2ktMl0ubGVuZ3RoOworICAgICAgICB9CisgICAgICAgIGlmIChtYXRyaXgpIHsKKyAgICAgICAgICB2YXIgcm93LCBmcmFnLCBuLCBrLCB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICAgICAgICBmb3IgKGk9MDsgaTxtOyBpPWkrMikgeworICAgICAgICAgICAgcm93ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworICAgICAgICAgICAgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICAgICAgICAgIG5vZGUgPSBuZXdGcmFnLmZpcnN0Q2hpbGQ7IC8vIDxtcm93PigtLC0sLi4uLC0sLSk8L21yb3c+CisgICAgICAgICAgICBuID0gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsKKyAgICAgICAgICAgIGsgPSAwOworICAgICAgICAgICAgbm9kZS5yZW1vdmVDaGlsZChub2RlLmZpcnN0Q2hpbGQpOyAvL3JlbW92ZSAoCisgICAgICAgICAgICBmb3IgKGo9MTsgajxuLTE7IGorKykgeworICAgICAgICAgICAgICBpZiAodHlwZW9mIHBvc1tpXVtrXSAhPSAidW5kZWZpbmVkIiAmJiBqPT1wb3NbaV1ba10peworICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5maXJzdENoaWxkKTsgLy9yZW1vdmUgLAorICAgICAgICAgICAgICAgIHJvdy5hcHBlbmRDaGlsZChjcmVhdGVNbWxOb2RlKCJtdGQiLGZyYWcpKTsKKyAgICAgICAgICAgICAgICBrKys7CisgICAgICAgICAgICAgIH0gZWxzZSBmcmFnLmFwcGVuZENoaWxkKG5vZGUuZmlyc3RDaGlsZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByb3cuYXBwZW5kQ2hpbGQoY3JlYXRlTW1sTm9kZSgibXRkIixmcmFnKSk7CisgICAgICAgICAgICBpZiAobmV3RnJhZy5jaGlsZE5vZGVzLmxlbmd0aD4yKSB7CisgICAgICAgICAgICAgIG5ld0ZyYWcucmVtb3ZlQ2hpbGQobmV3RnJhZy5maXJzdENoaWxkKTsgLy9yZW1vdmUgPG1yb3c+KTwvbXJvdz4KKyAgICAgICAgICAgICAgbmV3RnJhZy5yZW1vdmVDaGlsZChuZXdGcmFnLmZpcnN0Q2hpbGQpOyAvL3JlbW92ZSA8bW8+LDwvbW8+CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChjcmVhdGVNbWxOb2RlKCJtdHIiLHJvdykpOworICAgICAgICAgIH0KKyAgICAgICAgICBub2RlID0gY3JlYXRlTW1sTm9kZSgibXRhYmxlIix0YWJsZSk7CisgICAgICAgICAgaWYgKHR5cGVvZiBzeW1ib2wuaW52aXNpYmxlID09ICJib29sZWFuIiAmJiBzeW1ib2wuaW52aXNpYmxlKSBub2RlLnNldEF0dHJpYnV0ZSgiY29sdW1uYWxpZ24iLCJsZWZ0Iik7CisgICAgICAgICAgbmV3RnJhZy5yZXBsYWNlQ2hpbGQobm9kZSxuZXdGcmFnLmZpcnN0Q2hpbGQpOworICAgICAgICB9CisgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBzdHIgPSBBTXJlbW92ZUNoYXJzQW5kQmxhbmtzKHN0cixzeW1ib2wuaW5wdXQubGVuZ3RoKTsKKyAgICBpZiAodHlwZW9mIHN5bWJvbC5pbnZpc2libGUgIT0gImJvb2xlYW4iIHx8ICFzeW1ib2wuaW52aXNpYmxlKSB7CisgICAgICBub2RlID0gY3JlYXRlTW1sTm9kZSgibW8iLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN5bWJvbC5vdXRwdXQpKTsKKyAgICAgIG5ld0ZyYWcuYXBwZW5kQ2hpbGQobm9kZSk7CisgICAgfQorICB9CisgIHJldHVybiBbbmV3RnJhZyxzdHJdOworfQorCitmdW5jdGlvbiBwYXJzZU1hdGgoc3RyLGxhdGV4KSB7CisgIHZhciBmcmFnLCBub2RlOworICBBTW5lc3RpbmdEZXB0aCA9IDA7CisgIGZyYWcgPSBsYXRleCA/IExNcGFyc2VFeHByKHN0ci5yZXBsYWNlKC9eXHMrL2csIiIpLGZhbHNlLGZhbHNlKVswXSA6IEFNcGFyc2VFeHByKHN0ci5yZXBsYWNlKC9eXHMrL2csIiIpLGZhbHNlKVswXTsKKyAgbm9kZSA9IGNyZWF0ZU1tbE5vZGUoIm1zdHlsZSIsZnJhZyk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJtYXRoY29sb3IiLG1hdGhjb2xvcik7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJmb250ZmFtaWx5IixtYXRoZm9udGZhbWlseSk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJtYXRoc2l6ZSIsbWF0aGZvbnRzaXplKTsKKyAgaWYgKGRpc3BsYXlzdHlsZSkgbm9kZS5zZXRBdHRyaWJ1dGUoImRpc3BsYXlzdHlsZSIsInRydWUiKTsKKyAgbm9kZSA9IGNyZWF0ZU1tbE5vZGUoIm1hdGgiLG5vZGUpOworICBpZiAoc2hvd2FzY2lpZm9ybXVsYW9uaG92ZXIpICAgICAgICAgICAgICAgICAgICAgIC8vZml4ZWQgYnkgZGpoc3Ugc28gbmV3bGluZQorICAgIG5vZGUuc2V0QXR0cmlidXRlKCJ0aXRsZSIsc3RyLnJlcGxhY2UoL1xzKy9nLCIgIikpOy8vZG9lcyBub3Qgc2hvdyBpbiBHZWNrbworICByZXR1cm4gbm9kZTsKK30KKworZnVuY3Rpb24gc3RyYXJyMmRvY0ZyYWcoYXJyLCBsaW5lYnJlYWtzLCBsYXRleCkgeworICB2YXIgbmV3RnJhZz1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgIHZhciBleHByID0gZmFsc2U7CisgIGZvciAodmFyIGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspIHsKKyAgICBpZiAoZXhwcikgbmV3RnJhZy5hcHBlbmRDaGlsZChwYXJzZU1hdGgoYXJyW2ldLGxhdGV4KSk7CisgICAgZWxzZSB7CisgICAgICB2YXIgYXJyaSA9IChsaW5lYnJlYWtzID8gYXJyW2ldLnNwbGl0KCJcblxuIikgOiBbYXJyW2ldXSk7CisgICAgICBuZXdGcmFnLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnRYSFRNTCgic3BhbiIpLgorICAgICAgYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYXJyaVswXSkpKTsKKyAgICAgIGZvciAodmFyIGo9MTsgajxhcnJpLmxlbmd0aDsgaisrKSB7CisgICAgICAgIG5ld0ZyYWcuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudFhIVE1MKCJwIikpOworICAgICAgICBuZXdGcmFnLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnRYSFRNTCgic3BhbiIpLgorICAgICAgICBhcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShhcnJpW2pdKSkpOworICAgICAgfQorICAgIH0KKyAgICBleHByID0gIWV4cHI7CisgIH0KKyAgcmV0dXJuIG5ld0ZyYWc7Cit9CisKK2Z1bmN0aW9uIEFNYXV0b21hdGhyZWMoc3RyKSB7CisvL2Zvcm11bGEgaXMgYSBzcGFjZSAob3Igc3RhcnQgb2Ygc3RyKSBmb2xsb3dlZCBieSBhIG1heGltYWwgc2VxdWVuY2Ugb2YgKnR3byogb3IgbW9yZSB0b2tlbnMsIHBvc3NpYmx5IHNlcGFyYXRlZCBieSBydW5zIG9mIGRpZ2l0cyBhbmQvb3Igc3BhY2UuCisvL3Rva2VucyBhcmUgc2luZ2xlIGxldHRlcnMgKGV4Y2VwdCBhLCBBLCBJKSBhbmQgQVNDSUlNYXRoTUwgdG9rZW5zCisgIHZhciB0ZXhjb21tYW5kID0gIlxcXFxbYS16QS1aXSt8XFxcXFxcc3wiOworICB2YXIgYW1iaWdBTXRva2VuID0gIlxcYig/Om9vfGxpbXxsbnxpbnR8b2ludHxkZWx8Z3JhZHxhbGVwaHxwcm9kfHByb3B8c2luaHxjb3NofHRhbmh8Y29zfHNlY3xwaXx0dHxmcnxzZnxzdWJlfHN1cGV8c3VifHN1cHxkZXR8bW9kfGdjZHxsY218bWlufG1heHx2ZWN8ZGRvdHx1bHxjaGl8ZXRhfG51fG11KSg/IVthLXpdKXwiOworICB2YXIgZW5nbGlzaEFNdG9rZW4gPSAiXFxiKD86c3VtfG94fGxvZ3xzaW58dGFufGRpbXxoYXR8YmFyfGRvdCkoPyFbYS16XSl8IjsKKyAgdmFyIHNlY29uZGVuZ2xpc2hBTXRva2VuID0gInxcXGJJXFxifFxcYmluXFxifFxcYnRleHRcXGIiOyAvLyB0b29rIGlmIGFuZCBvciBub3Qgb3V0CisgIHZhciBzaW1wbGVBTXRva2VuID0gIk5OfFpafFFRfFJSfENDfFRUfEFBfEVFfHNxcnR8ZHh8ZHl8ZHp8ZHR8eHh8dnZ8dXV8bm58YmJ8Y2N8Y3NjfGNvdHxhbHBoYXxiZXRhfGRlbHRhfERlbHRhfGVwc2lsb258Z2FtbWF8R2FtbWF8a2FwcGF8bGFtYmRhfExhbWJkYXxvbWVnYXxwaGl8UGhpfFBpfHBzaXxQc2l8cmhvfHNpZ21hfFNpZ21hfHRhdXx0aGV0YXxUaGV0YXx4aXxYaXx6ZXRhIjsgLy8gdXV1IG5ubj8KKyAgdmFyIGxldHRlciA9ICJbYS16QS1ISi1aXSg/PSg/OlteYS16QS1aXXwkfCIrYW1iaWdBTXRva2VuK2VuZ2xpc2hBTXRva2VuK3NpbXBsZUFNdG9rZW4rIikpfCI7CisgIHZhciB0b2tlbiA9IGxldHRlcit0ZXhjb21tYW5kKyJcXGQrfFstKClbXFxde30rPSomXl8lXFxcQC88PixcXHwhOjsnfl18XFwuKD8hKD86XHgyMHwkKSl8IithbWJpZ0FNdG9rZW4rZW5nbGlzaEFNdG9rZW4rc2ltcGxlQU10b2tlbjsKKyAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiKF58XFxzKSgoKCIrdG9rZW4rIilcXHM/KSgoIit0b2tlbitzZWNvbmRlbmdsaXNoQU10b2tlbisiKVxccz8pKykoWywuP10/KD89XFxzfCQpKSIsImciKTsKKyAgc3RyID0gc3RyLnJlcGxhY2UocmUsIiBgJDJgJDciKTsKKyAgdmFyIGFyciA9IHN0ci5zcGxpdChBTWRlbGltaXRlcjEpOworICB2YXIgcmUxID0gbmV3IFJlZ0V4cCgiKF58XFxzKShbYi16Qi1ISi1aKyo8Pl18Iit0ZXhjb21tYW5kK2FtYmlnQU10b2tlbitzaW1wbGVBTXRva2VuKyIpKFxcc3xcXG58JCkiLCJnIik7CisgIHZhciByZTIgPSBuZXcgUmVnRXhwKCIoXnxcXHMpKFthLXpdfCIrdGV4Y29tbWFuZCthbWJpZ0FNdG9rZW4rc2ltcGxlQU10b2tlbisiKShbLC5dKSIsImciKTsgLy8gcmVtb3ZlZCB8XGQrIGZvciBub3cKKyAgZm9yIChpPTA7IGk8YXJyLmxlbmd0aDsgaSsrKSAgIC8vc2luZ2xlIG5vbmVuZ2xpc2ggdG9rZW5zCisgICAgaWYgKGklMj09MCkgeworICAgICAgYXJyW2ldID0gYXJyW2ldLnJlcGxhY2UocmUxLCIgYCQyYCQzIik7CisgICAgICBhcnJbaV0gPSBhcnJbaV0ucmVwbGFjZShyZTIsIiBgJDJgJDMiKTsKKyAgICAgIGFycltpXSA9IGFycltpXS5yZXBsYWNlKC8oW3t9W1xdXSkvLCJgJDFgIik7CisgICAgfQorICBzdHIgPSBhcnIuam9pbihBTWRlbGltaXRlcjEpOworICBzdHIgPSBzdHIucmVwbGFjZSgvKChefFxzKVwoW2EtekEtWl17Mix9Lio/KVwpYC9nLCIkMWApIik7ICAvL2ZpeCBwYXJlbnRoZXNlcworICBzdHIgPSBzdHIucmVwbGFjZSgvYChcKChhXHN8aW5ccykpKC4qP1thLXpBLVpdezIsfVwpKS9nLCIkMWAkMyIpOyAgLy9maXggcGFyZW50aGVzZXMKKyAgc3RyID0gc3RyLnJlcGxhY2UoL1xzaW5gL2csImAgaW4iKTsKKyAgc3RyID0gc3RyLnJlcGxhY2UoL2AoXChcd1wpWywuXT8oXHN8XG58JCkpL2csIiQxYCIpOworICBzdHIgPSBzdHIucmVwbGFjZSgvYChbMC05Ll0rfGUuZ3xpLmUpYChcLj8pL2dpLCIkMSQyIik7CisgIHN0ciA9IHN0ci5yZXBsYWNlKC9gKFswLTkuXSs6KWAvZywiJDEiKTsKKyAgcmV0dXJuIHN0cjsKK30KKworZnVuY3Rpb24gcHJvY2Vzc05vZGVSKG4sIGxpbmVicmVha3MsbGF0ZXgpIHsKKyAgdmFyIG10Y2gsIHN0ciwgYXJyLCBmcmcsIGk7CisgIGlmIChuLmNoaWxkTm9kZXMubGVuZ3RoID09IDApIHsKKyAgIGlmICgobi5ub2RlVHlwZSE9OCB8fCBsaW5lYnJlYWtzKSAmJgorICAgIG4ucGFyZW50Tm9kZS5ub2RlTmFtZSE9ImZvcm0iICYmIG4ucGFyZW50Tm9kZS5ub2RlTmFtZSE9IkZPUk0iICYmCisgICAgbi5wYXJlbnROb2RlLm5vZGVOYW1lIT0idGV4dGFyZWEiICYmIG4ucGFyZW50Tm9kZS5ub2RlTmFtZSE9IlRFWFRBUkVBIiAvKiYmCisgICAgbi5wYXJlbnROb2RlLm5vZGVOYW1lIT0icHJlIiAmJiBuLnBhcmVudE5vZGUubm9kZU5hbWUhPSJQUkUiKi8pIHsKKyAgICBzdHIgPSBuLm5vZGVWYWx1ZTsKKyAgICBpZiAoIShzdHIgPT0gbnVsbCkpIHsKKyAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cclxuXHJcbi9nLCJcblxuIik7CisgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXHgyMCsvZywiICIpOworICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xzKlxyXG4vZywiICIpOworICAgICAgaWYobGF0ZXgpIHsKKy8vIERFTElNSVRFUlM6CisgICAgICAgIG10Y2ggPSAoc3RyLmluZGV4T2YoIlwkIik9PS0xID8gZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoLyhbXlxcXSlcJC9nLCIkMSBcJCIpOworICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXlwkLywiIFwkIik7CS8vIGluIGNhc2UgXCQgYXQgc3RhcnQgb2Ygc3RyaW5nCisgICAgICAgIGFyciA9IHN0ci5zcGxpdCgiIFwkIik7CisgICAgICAgIGZvciAoaT0wOyBpPGFyci5sZW5ndGg7IGkrKykKKwkgIGFycltpXT1hcnJbaV0ucmVwbGFjZSgvXFxcJC9nLCJcJCIpOworICAgICAgfSBlbHNlIHsKKyAgICAgIG10Y2ggPSBmYWxzZTsKKyAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoQU1lc2NhcGUxLCAiZyIpLAorICAgICAgICAgICAgICBmdW5jdGlvbigpe210Y2ggPSB0cnVlOyByZXR1cm4gIkFNZXNjYXBlMSJ9KTsKKyAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXD9lbmR7P2E/bWF0aH0/L2ksCisgICAgICAgICAgICAgIGZ1bmN0aW9uKCl7YXV0b21hdGhyZWNvZ25pemUgPSBmYWxzZTsgbXRjaCA9IHRydWU7IHJldHVybiAiIn0pOworICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL2FtYXRoXGJ8XFxiZWdpbnthP21hdGh9L2ksCisgICAgICAgICAgICAgIGZ1bmN0aW9uKCl7YXV0b21hdGhyZWNvZ25pemUgPSB0cnVlOyBtdGNoID0gdHJ1ZTsgcmV0dXJuICIifSk7CisgICAgICBhcnIgPSBzdHIuc3BsaXQoQU1kZWxpbWl0ZXIxKTsKKyAgICAgIGlmIChhdXRvbWF0aHJlY29nbml6ZSkKKyAgICAgICAgZm9yIChpPTA7IGk8YXJyLmxlbmd0aDsgaSsrKQorICAgICAgICAgIGlmIChpJTI9PTApIGFycltpXSA9IEFNYXV0b21hdGhyZWMoYXJyW2ldKTsKKyAgICAgIHN0ciA9IGFyci5qb2luKEFNZGVsaW1pdGVyMSk7CisgICAgICBhcnIgPSBzdHIuc3BsaXQoQU1kZWxpbWl0ZXIxKTsKKyAgICAgIGZvciAoaT0wOyBpPGFyci5sZW5ndGg7IGkrKykgLy8gdGhpcyBpcyBhIHByb2JsZW0gKioqKioqKioqKioqCisgICAgICAgIGFycltpXT1hcnJbaV0ucmVwbGFjZSgvQU1lc2NhcGUxL2csQU1kZWxpbWl0ZXIxKTsKKyAgICAgIH0KKyAgICAgIGlmIChhcnIubGVuZ3RoPjEgfHwgbXRjaCkgeworICAgICAgICBpZiAoIW5vTWF0aE1MKSB7CisgICAgICAgICAgZnJnID0gc3RyYXJyMmRvY0ZyYWcoYXJyLG4ubm9kZVR5cGU9PTgsbGF0ZXgpOworICAgICAgICAgIHZhciBsZW4gPSBmcmcuY2hpbGROb2Rlcy5sZW5ndGg7CisgICAgICAgICAgbi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmcmcsbik7CisgICAgICAgICAgcmV0dXJuIGxlbi0xOworICAgICAgICB9IGVsc2UgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICAgfSBlbHNlIHJldHVybiAwOworICB9IGVsc2UgaWYgKG4ubm9kZU5hbWUhPSJtYXRoIikgeworICAgIGZvciAoaT0wOyBpPG4uY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykKKyAgICAgIGkgKz0gcHJvY2Vzc05vZGVSKG4uY2hpbGROb2Rlc1tpXSwgbGluZWJyZWFrcyxsYXRleCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2Z1bmN0aW9uIEFNcHJvY2Vzc05vZGUobiwgbGluZWJyZWFrcywgc3BhbmNsYXNzQU0pIHsKKyAgdmFyIGZyYWcsc3Q7CisgIGlmIChzcGFuY2xhc3NBTSE9bnVsbCkgeworICAgIGZyYWcgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3BhbiIpCisgICAgZm9yICh2YXIgaT0wO2k8ZnJhZy5sZW5ndGg7aSsrKQorICAgICAgaWYgKGZyYWdbaV0uY2xhc3NOYW1lID09ICJBTSIpIAorICAgICAgICBwcm9jZXNzTm9kZVIoZnJhZ1tpXSxsaW5lYnJlYWtzLGZhbHNlKTsKKyAgfSBlbHNlIHsKKyAgICB0cnkgeworICAgICAgc3QgPSBuLmlubmVySFRNTDsgLy8gbG9vayBmb3IgQU1kZWxpbWl0ZXIgb24gcGFnZQorICAgIH0gY2F0Y2goZXJyKSB7fQorLy9hbGVydChzdCkKKyAgICBpZiAoc3Q9PW51bGwgfHwgL2FtYXRoXGJ8XFxiZWdpbnthP21hdGh9L2kudGVzdChzdCkgfHwKKyAgICAgIHN0LmluZGV4T2YoQU1kZWxpbWl0ZXIxKyIgIikhPS0xIHx8IHN0LnNsaWNlKC0xKT09QU1kZWxpbWl0ZXIxIHx8CisgICAgICBzdC5pbmRleE9mKEFNZGVsaW1pdGVyMSsiPCIpIT0tMSB8fCBzdC5pbmRleE9mKEFNZGVsaW1pdGVyMSsiXG4iKSE9LTEpIHsKKyAgICAgIHByb2Nlc3NOb2RlUihuLGxpbmVicmVha3MsZmFsc2UpOworICAgIH0KKyAgfQorLyogIGlmIChpc0lFKSB7IC8vbmVlZGVkIHRvIG1hdGNoIHNpemUgYW5kIGZvbnQgb2YgZm9ybXVsYSB0byBzdXJyb3VuZGluZyB0ZXh0CisgICAgZnJhZyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdtYXRoJyk7CisgICAgZm9yICh2YXIgaT0wO2k8ZnJhZy5sZW5ndGg7aSsrKSBmcmFnW2ldLnVwZGF0ZSgpIC8vV2hhdCBpcyB0aGlzPworICB9Ki8KK30KKworLyoKK0xhVGVYTWF0aE1MLmpzCis9PT09PT09PT09PT09PQorCitWZXJzaW9uIDEuMSwgSnVseSAyMCwgMjAwNyAoYykgbW9kaWZpY2F0aW9ucyBieSBQZXRlciBKaXBzZW4KKworKGNoYW5nZXM6IHJlbmFtZWQgZ2xvYmFsIHZhcmlhYmxlcyBmcm9tIEFNLi4uIHRvIExNLi4uIHNvIHRoYXQKK0xhVGVYTWF0aE1MIGFuZCBBU0NJSU1hdGhNTCBjYW4gYmUgdXNlZCBzaW11bHRhbmVvdXNseSkKKworUHJldmlvdXMgaGVhZGVyIG5vdGljZToKK1RoaXMgZmlsZSAoVmVyc2lvbiAxLjApLCBpcyBkdWUgdG8gRG91Z2xhcyBXb29kYWxsLCBKdW5lIDIwMDYuCitJdCBjb250YWlucyBKYXZhU2NyaXB0IGZ1bmN0aW9ucyB0byBjb252ZXJ0IChtb3N0IHNpbXBsZSkgTGFUZVgKK21hdGggbm90YXRpb24gdG8gUHJlc2VudGF0aW9uIE1hdGhNTC4gIEl0IHdhcyBvYnRhaW5lZCBieQorZG93bmxvYWRpbmcgdGhlIGZpbGUgQVNDSUlNYXRoTUwuanMgZnJvbQorCWh0dHA6Ly93d3cxLmNoYXBtYW4uZWR1L35qaXBzZW4vbWF0aG1sL2FzY2lpbWF0aGRvd25sb2FkLworYW5kIG1vZGlmeWluZyBpdCBzbyB0aGF0IGl0IGNhcnJpZXMgb3V0IE9OTFkgdGhvc2UgY29udmVyc2lvbnMKK3RoYXQgd291bGQgYmUgY2FycmllZCBvdXQgaW4gTGFUZVguICBBIGRlc2NyaXB0aW9uIG9mIHRoZSBvcmlnaW5hbAorZmlsZSwgd2l0aCBleGFtcGxlcywgY2FuIGJlIGZvdW5kIGF0CisJd3d3MS5jaGFwbWFuLmVkdS9+amlwc2VuL21hdGhtbC9hc2NpaW1hdGguaHRtbAorCUFTQ0lJTWF0aE1MOiBNYXRoIG9uIHRoZSB3ZWIgZm9yIGV2ZXJ5b25lCisKK0hlcmUgaXMgdGhlIGhlYWRlciBub3RpY2UgZnJvbSB0aGUgb3JpZ2luYWwgZmlsZToKKworQVNDSUlNYXRoTUwuanMKKz09PT09PT09PT09PT09CitUaGlzIGZpbGUgY29udGFpbnMgSmF2YVNjcmlwdCBmdW5jdGlvbnMgdG8gY29udmVydCBBU0NJSSBtYXRoIG5vdGF0aW9uCit0byBQcmVzZW50YXRpb24gTWF0aE1MLiBUaGUgY29udmVyc2lvbiBpcyBkb25lIHdoaWxlIHRoZSAoWClIVE1MIHBhZ2UKK2xvYWRzLCBhbmQgc2hvdWxkIHdvcmsgd2l0aCBGaXJlZm94L01vemlsbGEvTmV0c2NhcGUgNysgYW5kIEludGVybmV0CitFeHBsb3JlciA2K01hdGhQbGF5ZXIgKGh0dHA6Ly93d3cuZGVzc2NpLmNvbS9lbi9wcm9kdWN0cy9tYXRocGxheWVyLykuCitKdXN0IGFkZCB0aGUgbmV4dCBsaW5lIHRvIHlvdXIgKFgpSFRNTCBwYWdlIHdpdGggdGhpcyBmaWxlIGluIHRoZSBzYW1lIGZvbGRlcjoKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkFTQ0lJTWF0aE1MLmpzIj48L3NjcmlwdD4KK1RoaXMgaXMgYSBjb252ZW5pZW50IGFuZCBpbmV4cGVuc2l2ZSBzb2x1dGlvbiBmb3IgYXV0aG9yaW5nIE1hdGhNTC4KKworVmVyc2lvbiAxLjQuNyBEZWMgMTUsIDIwMDUsIChjKSBQZXRlciBKaXBzZW4gaHR0cDovL3d3dy5jaGFwbWFuLmVkdS9+amlwc2VuCitMYXRlc3QgdmVyc2lvbiBhdCBodHRwOi8vd3d3LmNoYXBtYW4uZWR1L35qaXBzZW4vbWF0aG1sL0FTQ0lJTWF0aE1MLmpzCitGb3IgY2hhbmdlcyBzZWUgaHR0cDovL3d3dy5jaGFwbWFuLmVkdS9+amlwc2VuL21hdGhtbC9hc2NpaW1hdGhjaGFuZ2VzLnR4dAorSWYgeW91IHVzZSBpdCBvbiBhIHdlYnBhZ2UsIHBsZWFzZSBzZW5kIHRoZSBVUkwgdG8gamlwc2VuQGNoYXBtYW4uZWR1CisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Cit5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZS9sZ3BsLmh0bWwpCitmb3IgbW9yZSBkZXRhaWxzLgorCitMYVRlWE1hdGhNTC5qcyAoY3RkKQorPT09PT09PT09PT09PT0KKworQ29udGVudCBiZXR3ZWVuICQuLi4kIGFuZCAkJC4uLiQkIGlzIGNvbnZlcnRlZCBieSB0aGlzIHBhcnQgb2YgdGhlIGZpbGUKKyovCisKKy8vIGFsbCBmdXJ0aGVyIGdsb2JhbCB2YXJpYWJsZXMgc3RhcnQgd2l0aCAiTE0iCisKKy8vIENvbW1lbnRlZCBvdXQgYnkgRFJXIHRvIHByZXZlbnQgMS8yIHR1cm5pbmcgaW50byBhIDItbGluZSBmcmFjdGlvbgorLy8gTE1kaXYgICA9IHtpbnB1dDoiLyIsCSB0YWc6Im1mcmFjIiwgb3V0cHV0OiIvIiwgICAgdHR5cGU6SU5GSVh9LAorLy8gQ29tbWVudGVkIG91dCBieSBEUlcgc28gdGhhdCAiIHByaW50cyBsaXRlcmFsbHkgaW4gZXF1YXRpb25zCisvLyBMTXF1b3RlID0ge2lucHV0OiJcIiIsCSB0YWc6Im10ZXh0Iiwgb3V0cHV0OiJtYm94IiwgdHR5cGU6VEVYVH07CisKK3ZhciBMTXN5bWJvbHMgPSBbCisvL0dyZWVrIGxldHRlcnMKK3tpbnB1dDoiXFxhbHBoYSIsCXRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNCMSIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxiZXRhIiwJdGFnOiJtaSIsIG91dHB1dDoiXHUwM0IyIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGdhbW1hIiwJdGFnOiJtaSIsIG91dHB1dDoiXHUwM0IzIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGRlbHRhIiwJdGFnOiJtaSIsIG91dHB1dDoiXHUwM0I0IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGVwc2lsb24iLAl0YWc6Im1pIiwgb3V0cHV0OiJcdTAzQjUiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcdmFyZXBzaWxvbiIsICB0YWc6Im1pIiwgb3V0cHV0OiJcdTAyNUIiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcemV0YSIsCXRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNCNiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxldGEiLAkJdGFnOiJtaSIsIG91dHB1dDoiXHUwM0I3IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHRoZXRhIiwJdGFnOiJtaSIsIG91dHB1dDoiXHUwM0I4IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHZhcnRoZXRhIiwJdGFnOiJtaSIsIG91dHB1dDoiXHUwM0QxIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGlvdGEiLAl0YWc6Im1pIiwgb3V0cHV0OiJcdTAzQjkiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Ilxca2FwcGEiLAl0YWc6Im1pIiwgb3V0cHV0OiJcdTAzQkEiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcbGFtYmRhIiwJdGFnOiJtaSIsIG91dHB1dDoiXHUwM0JCIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXG11IiwJCXRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNCQyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxudSIsCQl0YWc6Im1pIiwgb3V0cHV0OiJcdTAzQkQiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxceGkiLAkJdGFnOiJtaSIsIG91dHB1dDoiXHUwM0JFIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHBpIiwJCXRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNDMCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFx2YXJwaSIsCXRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNENiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxyaG8iLAkJdGFnOiJtaSIsIG91dHB1dDoiXHUwM0MxIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHZhcnJobyIsCXRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNGMSIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFx2YXJzaWdtYSIsCXRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNDMiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxzaWdtYSIsCXRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNDMyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFx0YXUiLAkJdGFnOiJtaSIsIG91dHB1dDoiXHUwM0M0IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHVwc2lsb24iLAl0YWc6Im1pIiwgb3V0cHV0OiJcdTAzQzUiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxccGhpIiwJCXRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNDNiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFx2YXJwaGkiLAl0YWc6Im1pIiwgb3V0cHV0OiJcdTAzRDUiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcY2hpIiwJCXRhZzoibWkiLCBvdXRwdXQ6Ilx1MDNDNyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxwc2kiLAkJdGFnOiJtaSIsIG91dHB1dDoiXHUwM0M4IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXG9tZWdhIiwJdGFnOiJtaSIsIG91dHB1dDoiXHUwM0M5IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXEdhbW1hIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUwMzkzIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXERlbHRhIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUwMzk0IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXFRoZXRhIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUwMzk4IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXExhbWJkYSIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MDM5QiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxYaSIsCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTAzOUUiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcUGkiLAkJdGFnOiJtbyIsIG91dHB1dDoiXHUwM0EwIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXFNpZ21hIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUwM0EzIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXFVwc2lsb24iLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTAzQTUiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcUGhpIiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MDNBNiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxQc2kiLAkJdGFnOiJtbyIsIG91dHB1dDoiXHUwM0E4IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXE9tZWdhIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUwM0E5IiwgdHR5cGU6Q09OU1R9LAorCisvL2ZyYWN0aW9ucwore2lucHV0OiJcXGZyYWMxMiIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MDBCRCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxmcmFjMTQiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTAwQkMiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcZnJhYzM0IiwJdGFnOiJtbyIsIG91dHB1dDoiXHUwMEJFIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGZyYWMxMyIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjE1MyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxmcmFjMjMiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIxNTQiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcZnJhYzE1IiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMTU1IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGZyYWMyNSIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjE1NiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxmcmFjMzUiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIxNTciLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcZnJhYzQ1IiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMTU4IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGZyYWMxNiIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjE1OSIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxmcmFjNTYiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIxNUEiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcZnJhYzE4IiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMTVCIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGZyYWMzOCIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjE1QyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxmcmFjNTgiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIxNUQiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcZnJhYzc4IiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMTVFIiwgdHR5cGU6Q09OU1R9LAorCisvL2JpbmFyeSBvcGVyYXRpb24gc3ltYm9scwore2lucHV0OiJcXHBtIiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MDBCMSIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxtcCIsCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyMTMiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcdHJpYW5nbGVsZWZ0Iix0YWc6Im1vIiwgb3V0cHV0OiJcdTIyQjIiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcdHJpYW5nbGVyaWdodCIsdGFnOiJtbyIsb3V0cHV0OiJcdTIyQjMiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcY2RvdCIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjJDNSIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxzdGFyIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMkM2IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGFzdCIsCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTAwMkEiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcdGltZXMiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTAwRDciLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcZGl2IiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MDBGNyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxjaXJjIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjE4IiwgdHR5cGU6Q09OU1R9LAorLy97aW5wdXQ6IlxcYnVsbGV0IiwJICB0YWc6Im1vIiwgb3V0cHV0OiJcdTIyMTkiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcYnVsbGV0IiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMDIyIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXG9wbHVzIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjk1IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXG9taW51cyIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjI5NiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxvdGltZXMiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyOTciLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcYmlnY2lyYyIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjVDQiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxvc2xhc2giLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyOTgiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Ilxcb2RvdCIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjI5OSIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxsYW5kIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjI3IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHdlZGdlIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjI3IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGxvciIsCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyMjgiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcdmVlIiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIyOCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxjYXAiLAkJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjI5IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGN1cCIsCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyMkEiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Ilxcc3FjYXAiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyOTMiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Ilxcc3FjdXAiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyOTQiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcdXBsdXMiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyOEUiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcYW1hbGciLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyMTAiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcYmlndHJpYW5nbGV1cCIsdGFnOiJtbyIsb3V0cHV0OiJcdTI1QjMiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcYmlndHJpYW5nbGVkb3duIix0YWc6Im1vIixvdXRwdXQ6Ilx1MjVCRCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxkYWciLAkJdGFnOiJtbyIsIG91dHB1dDoiXHUyMDIwIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGRhZ2dlciIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjAyMCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxkZGFnIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMDIxIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGRkYWdnZXIiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIwMjEiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcbGhkIiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjJCMiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxyaGQiLAkJdGFnOiJtbyIsIG91dHB1dDoiXHUyMkIzIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHVubGhkIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMkI0IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHVucmhkIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMkI1IiwgdHR5cGU6Q09OU1R9LAorCisKKy8vQklHIE9wZXJhdG9ycwore2lucHV0OiJcXHN1bSIsCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyMTEiLCB0dHlwZTpVTkRFUk9WRVJ9LAore2lucHV0OiJcXHByb2QiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyMEYiLCB0dHlwZTpVTkRFUk9WRVJ9LAore2lucHV0OiJcXGJpZ2NhcCIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjJDMiIsIHR0eXBlOlVOREVST1ZFUn0sCit7aW5wdXQ6IlxcYmlnY3VwIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMkMzIiwgdHR5cGU6VU5ERVJPVkVSfSwKK3tpbnB1dDoiXFxiaWd3ZWRnZSIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjJDMCIsIHR0eXBlOlVOREVST1ZFUn0sCit7aW5wdXQ6IlxcYmlndmVlIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMkMxIiwgdHR5cGU6VU5ERVJPVkVSfSwKK3tpbnB1dDoiXFxiaWdzcWNhcCIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MkEwNSIsIHR0eXBlOlVOREVST1ZFUn0sCit7aW5wdXQ6IlxcYmlnc3FjdXAiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTJBMDYiLCB0dHlwZTpVTkRFUk9WRVJ9LAore2lucHV0OiJcXGNvcHJvZCIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIxMCIsIHR0eXBlOlVOREVST1ZFUn0sCit7aW5wdXQ6IlxcYmlnb3BsdXMiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTJBMDEiLCB0dHlwZTpVTkRFUk9WRVJ9LAore2lucHV0OiJcXGJpZ290aW1lcyIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MkEwMiIsIHR0eXBlOlVOREVST1ZFUn0sCit7aW5wdXQ6IlxcYmlnb2RvdCIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MkEwMCIsIHR0eXBlOlVOREVST1ZFUn0sCit7aW5wdXQ6IlxcYmlndXBsdXMiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTJBMDQiLCB0dHlwZTpVTkRFUk9WRVJ9LAore2lucHV0OiJcXGludCIsCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyMkIiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Ilxcb2ludCIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIyRSIsIHR0eXBlOkNPTlNUfSwKKworLy9iaW5hcnkgcmVsYXRpb24gc3ltYm9scwore2lucHV0OiI6PSIsCQl0YWc6Im1vIiwgb3V0cHV0OiI6PSIsCSAgIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxsdCIsCQl0YWc6Im1vIiwgb3V0cHV0OiI8IiwJICAgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGd0IiwJCXRhZzoibW8iLCBvdXRwdXQ6Ij4iLAkgICB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcbmUiLAkJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjYwIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXG5lcSIsCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyNjAiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcbGUiLAkJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjY0IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGxlcSIsCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyNjQiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcbGVxc2xhbnQiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyNjQiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcZ2UiLAkJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjY1IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGdlcSIsCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyNjUiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcZ2Vxc2xhbnQiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyNjUiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcZXF1aXYiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyNjEiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcbGwiLAkJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjZBIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGdnIiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjI2QiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxkb3RlcSIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjI1MCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxwcmVjIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjdBIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHN1Y2MiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyN0IiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxccHJlY2VxIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjdDIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHN1Y2NlcSIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjI3RCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxzdWJzZXQiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyODIiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Ilxcc3Vwc2V0IiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjgzIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHN1YnNldGVxIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjg2IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHN1cHNldGVxIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjg3IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHNxc3Vic2V0IiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjhGIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHNxc3Vwc2V0IiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjkwIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHNxc3Vic2V0ZXEiLCAgdGFnOiJtbyIsIG91dHB1dDoiXHUyMjkxIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHNxc3Vwc2V0ZXEiLCAgdGFnOiJtbyIsIG91dHB1dDoiXHUyMjkyIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHNpbSIsCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyM0MiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6Ilxcc2ltZXEiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyNDMiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcYXBwcm94IiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjQ4IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGNvbmciLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyNDUiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcSm9pbiIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjJDOCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxib3d0aWUiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyQzgiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcaW4iLAkJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjA4IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXG5pIiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIwQiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxvd25zIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjBCIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHByb3B0byIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIxRCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFx2ZGFzaCIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjJBMiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxkYXNodiIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjJBMyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxtb2RlbHMiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyQTgiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxccGVycCIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjJBNSIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxzbWlsZSIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjMyMyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxmcm93biIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjMyMiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxhc3ltcCIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjI0RCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxub3RpbiIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIwOSIsIHR0eXBlOkNPTlNUfSwKKworLy9tYXRyaWNlcwore2lucHV0OiJcXGJlZ2lue2VxbmFycmF5fSIsCW91dHB1dDoiWCIsCXR0eXBlOk1BVFJJWCwgaW52aXNpYmxlOnRydWV9LAore2lucHV0OiJcXGJlZ2lue2FycmF5fSIsCW91dHB1dDoiWCIsCXR0eXBlOk1BVFJJWCwgaW52aXNpYmxlOnRydWV9LAore2lucHV0OiJcXFxcIiwJCQlvdXRwdXQ6In0meyIsCXR0eXBlOkRFRklOSVRJT059LAore2lucHV0OiJcXGVuZHtlcW5hcnJheX0iLAlvdXRwdXQ6In19IiwJdHR5cGU6REVGSU5JVElPTn0sCit7aW5wdXQ6IlxcZW5ke2FycmF5fSIsCQlvdXRwdXQ6In19IiwJdHR5cGU6REVGSU5JVElPTn0sCisKKy8vZ3JvdXBpbmcgYW5kIGxpdGVyYWwgYnJhY2tldHMgLS0gaWV2YWwgaXMgZm9yIElFCit7aW5wdXQ6IlxcYmlnIiwJICAgdGFnOiJtbyIsIG91dHB1dDoiWCIsIGF0dmFsOiIxLjIiLCBpZXZhbDoiMi4yIiwgdHR5cGU6QklHfSwKK3tpbnB1dDoiXFxCaWciLAkgICB0YWc6Im1vIiwgb3V0cHV0OiJYIiwgYXR2YWw6IjEuNiIsIGlldmFsOiIyLjYiLCB0dHlwZTpCSUd9LAore2lucHV0OiJcXGJpZ2ciLCAgIHRhZzoibW8iLCBvdXRwdXQ6IlgiLCBhdHZhbDoiMi4yIiwgaWV2YWw6IjMuMiIsIHR0eXBlOkJJR30sCit7aW5wdXQ6IlxcQmlnZyIsICAgdGFnOiJtbyIsIG91dHB1dDoiWCIsIGF0dmFsOiIyLjkiLCBpZXZhbDoiMy45IiwgdHR5cGU6QklHfSwKK3tpbnB1dDoiXFxsZWZ0IiwgICB0YWc6Im1vIiwgb3V0cHV0OiJYIiwgdHR5cGU6TEVGVEJSQUNLRVR9LAore2lucHV0OiJcXHJpZ2h0IiwgIHRhZzoibW8iLCBvdXRwdXQ6IlgiLCB0dHlwZTpSSUdIVEJSQUNLRVR9LAore2lucHV0OiJ7IiwJICAgb3V0cHV0OiJ7IiwgdHR5cGU6TEVGVEJSQUNLRVQsICBpbnZpc2libGU6dHJ1ZX0sCit7aW5wdXQ6In0iLAkgICBvdXRwdXQ6In0iLCB0dHlwZTpSSUdIVEJSQUNLRVQsIGludmlzaWJsZTp0cnVlfSwKKwore2lucHV0OiIoIiwJICAgdGFnOiJtbyIsIG91dHB1dDoiKCIsICAgICAgYXR2YWw6IjEiLCB0dHlwZTpTVFJFVENIWX0sCit7aW5wdXQ6IlsiLAkgICB0YWc6Im1vIiwgb3V0cHV0OiJbIiwgICAgICBhdHZhbDoiMSIsIHR0eXBlOlNUUkVUQ0hZfSwKK3tpbnB1dDoiXFxsYnJhY2siLCB0YWc6Im1vIiwgb3V0cHV0OiJbIiwgICAgICBhdHZhbDoiMSIsIHR0eXBlOlNUUkVUQ0hZfSwKK3tpbnB1dDoiXFx7IiwJICAgdGFnOiJtbyIsIG91dHB1dDoieyIsICAgICAgYXR2YWw6IjEiLCB0dHlwZTpTVFJFVENIWX0sCit7aW5wdXQ6IlxcbGJyYWNlIiwgdGFnOiJtbyIsIG91dHB1dDoieyIsICAgICAgYXR2YWw6IjEiLCB0dHlwZTpTVFJFVENIWX0sCit7aW5wdXQ6IlxcbGFuZ2xlIiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMzI5IiwgYXR2YWw6IjEiLCB0dHlwZTpTVFJFVENIWX0sCit7aW5wdXQ6IlxcbGZsb29yIiwgdGFnOiJtbyIsIG91dHB1dDoiXHUyMzBBIiwgYXR2YWw6IjEiLCB0dHlwZTpTVFJFVENIWX0sCit7aW5wdXQ6IlxcbGNlaWwiLCAgdGFnOiJtbyIsIG91dHB1dDoiXHUyMzA4IiwgYXR2YWw6IjEiLCB0dHlwZTpTVFJFVENIWX0sCisKKy8vIHJ0YWc6Im1pIiBjYXVzZXMgc3BhY2UgdG8gYmUgaW5zZXJ0ZWQgYmVmb3JlIGEgZm9sbG93aW5nIHNpbiwgY29zLCBldGMuCisvLyAoc2VlIGZ1bmN0aW9uIExNcGFyc2VFeHByKCkgKQore2lucHV0OiIpIiwJICB0YWc6Im1vIixvdXRwdXQ6IikiLAkgICAgcnRhZzoibWkiLGF0dmFsOiIxIix0dHlwZTpTVFJFVENIWX0sCit7aW5wdXQ6Il0iLAkgIHRhZzoibW8iLG91dHB1dDoiXSIsCSAgICBydGFnOiJtaSIsYXR2YWw6IjEiLHR0eXBlOlNUUkVUQ0hZfSwKK3tpbnB1dDoiXFxyYnJhY2siLHRhZzoibW8iLG91dHB1dDoiXSIsCSAgICBydGFnOiJtaSIsYXR2YWw6IjEiLHR0eXBlOlNUUkVUQ0hZfSwKK3tpbnB1dDoiXFx9IiwJICB0YWc6Im1vIixvdXRwdXQ6In0iLAkgICAgcnRhZzoibWkiLGF0dmFsOiIxIix0dHlwZTpTVFJFVENIWX0sCit7aW5wdXQ6IlxccmJyYWNlIix0YWc6Im1vIixvdXRwdXQ6In0iLAkgICAgcnRhZzoibWkiLGF0dmFsOiIxIix0dHlwZTpTVFJFVENIWX0sCit7aW5wdXQ6IlxccmFuZ2xlIix0YWc6Im1vIixvdXRwdXQ6Ilx1MjMyQSIsIHJ0YWc6Im1pIixhdHZhbDoiMSIsdHR5cGU6U1RSRVRDSFl9LAore2lucHV0OiJcXHJmbG9vciIsdGFnOiJtbyIsb3V0cHV0OiJcdTIzMEIiLCBydGFnOiJtaSIsYXR2YWw6IjEiLHR0eXBlOlNUUkVUQ0hZfSwKK3tpbnB1dDoiXFxyY2VpbCIsIHRhZzoibW8iLG91dHB1dDoiXHUyMzA5IiwgcnRhZzoibWkiLGF0dmFsOiIxIix0dHlwZTpTVFJFVENIWX0sCisKKy8vICJ8IiwgIlxcfCIsICJcXHZlcnQiIGFuZCAiXFxWZXJ0IiBtb2RpZmllZCBsYXRlcjogbHNwYWNlID0gcnNwYWNlID0gMGVtCit7aW5wdXQ6InwiLAkJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjIzIiwgYXR2YWw6IjEiLCB0dHlwZTpTVFJFVENIWX0sCit7aW5wdXQ6IlxcfCIsCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyMjUiLCBhdHZhbDoiMSIsIHR0eXBlOlNUUkVUQ0hZfSwKK3tpbnB1dDoiXFx2ZXJ0IiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjIzIiwgYXR2YWw6IjEiLCB0dHlwZTpTVFJFVENIWX0sCit7aW5wdXQ6IlxcVmVydCIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIyNSIsIGF0dmFsOiIxIiwgdHR5cGU6U1RSRVRDSFl9LAore2lucHV0OiJcXG1pZCIsCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyMjMiLCBhdHZhbDoiMSIsIHR0eXBlOlNUUkVUQ0hZfSwKK3tpbnB1dDoiXFxwYXJhbGxlbCIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIyNSIsIGF0dmFsOiIxIiwgdHR5cGU6U1RSRVRDSFl9LAore2lucHV0OiIvIiwJCXRhZzoibW8iLCBvdXRwdXQ6Ii8iLAlhdHZhbDoiMS4wMSIsIHR0eXBlOlNUUkVUQ0hZfSwKK3tpbnB1dDoiXFxiYWNrc2xhc2giLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyMTYiLCBhdHZhbDoiMSIsIHR0eXBlOlNUUkVUQ0hZfSwKK3tpbnB1dDoiXFxzZXRtaW51cyIsCXRhZzoibW8iLCBvdXRwdXQ6IlxcIiwJICAgdHR5cGU6Q09OU1R9LAorCisvL21pc2NlbGxhbmVvdXMgc3ltYm9scwore2lucHV0OiJcXCEiLAkgIHRhZzoibXNwYWNlIiwgYXRuYW1lOiJ3aWR0aCIsIGF0dmFsOiItMC4xNjdlbSIsIHR0eXBlOlNQQUNFfSwKK3tpbnB1dDoiXFwsIiwJICB0YWc6Im1zcGFjZSIsIGF0bmFtZToid2lkdGgiLCBhdHZhbDoiMC4xNjdlbSIsIHR0eXBlOlNQQUNFfSwKK3tpbnB1dDoiXFw+IiwJICB0YWc6Im1zcGFjZSIsIGF0bmFtZToid2lkdGgiLCBhdHZhbDoiMC4yMjJlbSIsIHR0eXBlOlNQQUNFfSwKK3tpbnB1dDoiXFw6IiwJICB0YWc6Im1zcGFjZSIsIGF0bmFtZToid2lkdGgiLCBhdHZhbDoiMC4yMjJlbSIsIHR0eXBlOlNQQUNFfSwKK3tpbnB1dDoiXFw7IiwJICB0YWc6Im1zcGFjZSIsIGF0bmFtZToid2lkdGgiLCBhdHZhbDoiMC4yNzhlbSIsIHR0eXBlOlNQQUNFfSwKK3tpbnB1dDoifiIsCSAgdGFnOiJtc3BhY2UiLCBhdG5hbWU6IndpZHRoIiwgYXR2YWw6IjAuMzMzZW0iLCB0dHlwZTpTUEFDRX0sCit7aW5wdXQ6IlxccXVhZCIsICB0YWc6Im1zcGFjZSIsIGF0bmFtZToid2lkdGgiLCBhdHZhbDoiMWVtIiwgdHR5cGU6U1BBQ0V9LAore2lucHV0OiJcXHFxdWFkIiwgdGFnOiJtc3BhY2UiLCBhdG5hbWU6IndpZHRoIiwgYXR2YWw6IjJlbSIsIHR0eXBlOlNQQUNFfSwKKy8ve2lucHV0OiJ7fSIsCQkgIHRhZzoibW8iLCBvdXRwdXQ6Ilx1MjAwQiIsIHR0eXBlOkNPTlNUfSwgLy8gemVyby13aWR0aAore2lucHV0OiJcXHByaW1lIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMDMyIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiInIiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MDJCOSIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiJyciLAkJdGFnOiJtbyIsIG91dHB1dDoiXHUwMkJBIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiInJyciLAkJdGFnOiJtbyIsIG91dHB1dDoiXHUyMDM0IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiInJycnIiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjA1NyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxsZG90cyIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjAyNiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxjZG90cyIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjJFRiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFx2ZG90cyIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjJFRSIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxkZG90cyIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjJGMSIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxmb3JhbGwiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyMDAiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcZXhpc3RzIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjAzIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXFJlIiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjExQyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxJbSIsCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTIxMTEiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcYWxlcGgiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIxMzUiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcaGJhciIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjEwRiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxlbGwiLAkJdGFnOiJtbyIsIG91dHB1dDoiXHUyMTEzIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHdwIiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjExOCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxlbXB0eXNldCIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIwNSIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxpbmZ0eSIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIxRSIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxzdXJkIiwJdGFnOiJtbyIsIG91dHB1dDoiXFxzcXJ0e30iLCB0dHlwZTpERUZJTklUSU9OfSwKK3tpbnB1dDoiXFxwYXJ0aWFsIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjAyIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXG5hYmxhIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMjA3IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHRyaWFuZ2xlIiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyNUIzIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHRoZXJlZm9yZSIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIzNCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxhbmdsZSIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjIyMCIsIHR0eXBlOkNPTlNUfSwKKy8ve2lucHV0OiJcXFxcICIsCSAgdGFnOiJtbyIsIG91dHB1dDoiXHUwMEEwIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGRpYW1vbmQiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIyQzQiLCB0dHlwZTpDT05TVH0sCisvL3tpbnB1dDoiXFxEaWFtb25kIiwJICB0YWc6Im1vIiwgb3V0cHV0OiJcdTI1Q0EiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcRGlhbW9uZCIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjVDNyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxuZWciLAkJdGFnOiJtbyIsIG91dHB1dDoiXHUwMEFDIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXGxub3QiLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTAwQUMiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcYm90IiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjJBNSIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFx0b3AiLAkJdGFnOiJtbyIsIG91dHB1dDoiXHUyMkE0IiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHNxdWFyZSIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjVBQiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxCb3giLAkJdGFnOiJtbyIsIG91dHB1dDoiXHUyNUExIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHdyIiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjI0MCIsIHR0eXBlOkNPTlNUfSwKKworLy9zdGFuZGFyZCBmdW5jdGlvbnMKKy8vTm90ZSBVTkRFUk9WRVIgKm11c3QqIGhhdmUgdGFnOiJtbyIgdG8gd29yayBwcm9wZXJseQore2lucHV0OiJcXGFyY2NvcyIsIHRhZzoibWkiLCBvdXRwdXQ6ImFyY2NvcyIsIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LAore2lucHV0OiJcXGFyY3NpbiIsIHRhZzoibWkiLCBvdXRwdXQ6ImFyY3NpbiIsIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LAore2lucHV0OiJcXGFyY3RhbiIsIHRhZzoibWkiLCBvdXRwdXQ6ImFyY3RhbiIsIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LAore2lucHV0OiJcXGFyZyIsCSAgIHRhZzoibWkiLCBvdXRwdXQ6ImFyZyIsICAgIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LAore2lucHV0OiJcXGNvcyIsCSAgIHRhZzoibWkiLCBvdXRwdXQ6ImNvcyIsICAgIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LAore2lucHV0OiJcXGNvc2giLCAgIHRhZzoibWkiLCBvdXRwdXQ6ImNvc2giLCAgIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LAore2lucHV0OiJcXGNvdCIsCSAgIHRhZzoibWkiLCBvdXRwdXQ6ImNvdCIsICAgIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LAore2lucHV0OiJcXGNvdGgiLCAgIHRhZzoibWkiLCBvdXRwdXQ6ImNvdGgiLCAgIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LAore2lucHV0OiJcXGNzYyIsCSAgIHRhZzoibWkiLCBvdXRwdXQ6ImNzYyIsICAgIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LAore2lucHV0OiJcXGRlZyIsCSAgIHRhZzoibWkiLCBvdXRwdXQ6ImRlZyIsICAgIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LAore2lucHV0OiJcXGRldCIsCSAgIHRhZzoibWkiLCBvdXRwdXQ6ImRldCIsICAgIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LAore2lucHV0OiJcXGRpbSIsCSAgIHRhZzoibWkiLCBvdXRwdXQ6ImRpbSIsICAgIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LCAvL0NPTlNUPwore2lucHV0OiJcXGV4cCIsCSAgIHRhZzoibWkiLCBvdXRwdXQ6ImV4cCIsICAgIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LAore2lucHV0OiJcXGdjZCIsCSAgIHRhZzoibWkiLCBvdXRwdXQ6ImdjZCIsICAgIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LCAvL0NPTlNUPwore2lucHV0OiJcXGhvbSIsCSAgIHRhZzoibWkiLCBvdXRwdXQ6ImhvbSIsICAgIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LAore2lucHV0OiJcXGluZiIsCSAgICAgIHRhZzoibW8iLCBvdXRwdXQ6ImluZiIsCSB0dHlwZTpVTkRFUk9WRVJ9LAore2lucHV0OiJcXGtlciIsCSAgIHRhZzoibWkiLCBvdXRwdXQ6ImtlciIsICAgIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9LAore2lucHV0OiJcXGxnIiwJICAgdGFnOiJtaSIsIG91dHB1dDoibGciLCAgICAgdHR5cGU6VU5BUlksIGZ1bmM6dHJ1ZX0sCit7aW5wdXQ6IlxcbGltIiwJICAgICAgdGFnOiJtbyIsIG91dHB1dDoibGltIiwJIHR0eXBlOlVOREVST1ZFUn0sCit7aW5wdXQ6IlxcbGltaW5mIiwgICAgdGFnOiJtbyIsIG91dHB1dDoibGltaW5mIiwgdHR5cGU6VU5ERVJPVkVSfSwKK3tpbnB1dDoiXFxsaW1zdXAiLCAgICB0YWc6Im1vIiwgb3V0cHV0OiJsaW1zdXAiLCB0dHlwZTpVTkRFUk9WRVJ9LAore2lucHV0OiJcXGxuIiwJICAgdGFnOiJtaSIsIG91dHB1dDoibG4iLCAgICAgdHR5cGU6VU5BUlksIGZ1bmM6dHJ1ZX0sCit7aW5wdXQ6IlxcbG9nIiwJICAgdGFnOiJtaSIsIG91dHB1dDoibG9nIiwgICAgdHR5cGU6VU5BUlksIGZ1bmM6dHJ1ZX0sCit7aW5wdXQ6IlxcbWF4IiwJICAgICAgdGFnOiJtbyIsIG91dHB1dDoibWF4IiwJIHR0eXBlOlVOREVST1ZFUn0sCit7aW5wdXQ6IlxcbWluIiwJICAgICAgdGFnOiJtbyIsIG91dHB1dDoibWluIiwJIHR0eXBlOlVOREVST1ZFUn0sCit7aW5wdXQ6IlxcUHIiLAkgICB0YWc6Im1pIiwgb3V0cHV0OiJQciIsICAgICB0dHlwZTpVTkFSWSwgZnVuYzp0cnVlfSwKK3tpbnB1dDoiXFxzZWMiLAkgICB0YWc6Im1pIiwgb3V0cHV0OiJzZWMiLCAgICB0dHlwZTpVTkFSWSwgZnVuYzp0cnVlfSwKK3tpbnB1dDoiXFxzaW4iLAkgICB0YWc6Im1pIiwgb3V0cHV0OiJzaW4iLCAgICB0dHlwZTpVTkFSWSwgZnVuYzp0cnVlfSwKK3tpbnB1dDoiXFxzaW5oIiwgICB0YWc6Im1pIiwgb3V0cHV0OiJzaW5oIiwgICB0dHlwZTpVTkFSWSwgZnVuYzp0cnVlfSwKK3tpbnB1dDoiXFxzdXAiLAkgICAgICB0YWc6Im1vIiwgb3V0cHV0OiJzdXAiLAkgdHR5cGU6VU5ERVJPVkVSfSwKK3tpbnB1dDoiXFx0YW4iLAkgICB0YWc6Im1pIiwgb3V0cHV0OiJ0YW4iLCAgICB0dHlwZTpVTkFSWSwgZnVuYzp0cnVlfSwKK3tpbnB1dDoiXFx0YW5oIiwgICB0YWc6Im1pIiwgb3V0cHV0OiJ0YW5oIiwgICB0dHlwZTpVTkFSWSwgZnVuYzp0cnVlfSwKKworLy9hcnJvd3MKK3tpbnB1dDoiXFxnZXRzIiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjE5MCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxsZWZ0YXJyb3ciLAkJdGFnOiJtbyIsIG91dHB1dDoiXHUyMTkwIiwgdHR5cGU6Q09OU1R9LAore2lucHV0OiJcXHRvIiwJCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTIxOTIiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxccmlnaHRhcnJvdyIsCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTIxOTIiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcbGVmdHJpZ2h0YXJyb3ciLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIxOTQiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcdXBhcnJvdyIsCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTIxOTEiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcZG93bmFycm93IiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjE5MyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFx1cGRvd25hcnJvdyIsCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTIxOTUiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcTGVmdGFycm93IiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjFEMCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxSaWdodGFycm93IiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjFEMiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxMZWZ0cmlnaHRhcnJvdyIsCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjFENCIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxpZmYiLCB0YWc6Im1vIiwgb3V0cHV0OiJ+XFxMb25nbGVmdHJpZ2h0YXJyb3d+IiwgdHR5cGU6REVGSU5JVElPTn0sCit7aW5wdXQ6IlxcVXBhcnJvdyIsCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTIxRDEiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcRG93bmFycm93IiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjFEMyIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxVcGRvd25hcnJvdyIsCQl0YWc6Im1vIiwgb3V0cHV0OiJcdTIxRDUiLCB0dHlwZTpDT05TVH0sCit7aW5wdXQ6IlxcbWFwc3RvIiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjFBNiIsIHR0eXBlOkNPTlNUfSwKK3tpbnB1dDoiXFxsb25nbGVmdGFycm93IiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMTkwIiwgdHR5cGU6TE9OR30sCit7aW5wdXQ6IlxcbG9uZ3JpZ2h0YXJyb3ciLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIxOTIiLCB0dHlwZTpMT05HfSwKK3tpbnB1dDoiXFxsb25nbGVmdHJpZ2h0YXJyb3ciLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIxOTQiLCB0dHlwZTpMT05HfSwKK3tpbnB1dDoiXFxMb25nbGVmdGFycm93IiwJdGFnOiJtbyIsIG91dHB1dDoiXHUyMUQwIiwgdHR5cGU6TE9OR30sCit7aW5wdXQ6IlxcTG9uZ3JpZ2h0YXJyb3ciLAl0YWc6Im1vIiwgb3V0cHV0OiJcdTIxRDIiLCB0dHlwZTpMT05HfSwKK3tpbnB1dDoiXFxpbXBsaWVzIiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjFEMiIsIHR0eXBlOkxPTkd9LAore2lucHV0OiJcXExvbmdsZWZ0cmlnaHRhcnJvdyIsICB0YWc6Im1vIiwgb3V0cHV0OiJcdTIxRDQiLCB0dHlwZTpMT05HfSwKK3tpbnB1dDoiXFxsb25nbWFwc3RvIiwJCXRhZzoibW8iLCBvdXRwdXQ6Ilx1MjFBNiIsIHR0eXBlOkNPTlNUfSwKKwkJCQkJCQkvLyBkaXNhc3RlciBpZiBMT05HCisKKy8vY29tbWFuZHMgd2l0aCBhcmd1bWVudAorCit7aW5wdXQ6Ilxcc3FydCIsCXRhZzoibXNxcnQiLCBvdXRwdXQ6InNxcnQiLAl0dHlwZTpVTkFSWX0sCit7aW5wdXQ6Ilxccm9vdCIsCXRhZzoibXJvb3QiLCBvdXRwdXQ6InJvb3QiLAl0dHlwZTpCSU5BUll9LAore2lucHV0OiJcXGZyYWMiLAl0YWc6Im1mcmFjIiwgb3V0cHV0OiIvIiwJdHR5cGU6QklOQVJZfSwKK3tpbnB1dDoiXFxzdGFja3JlbCIsICAgIHRhZzoibW92ZXIiLCBvdXRwdXQ6InN0YWNrcmVsIiwgdHR5cGU6QklOQVJZfSwKK3tpbnB1dDoiXFxhdG9wIiwJdGFnOiJtZnJhYyIsIG91dHB1dDoiIiwJCXR0eXBlOklORklYfSwKK3tpbnB1dDoiXFxjaG9vc2UiLCAgICAgIHRhZzoibWZyYWMiLCBvdXRwdXQ6IiIsCQl0dHlwZTpJTkZJWH0sCit7aW5wdXQ6Il8iLAkJdGFnOiJtc3ViIiwgIG91dHB1dDoiXyIsCXR0eXBlOklORklYfSwKK3tpbnB1dDoiXiIsCQl0YWc6Im1zdXAiLCAgb3V0cHV0OiJeIiwJdHR5cGU6SU5GSVh9LAore2lucHV0OiJcXG1hdGhybSIsCXRhZzoibXRleHQiLCBvdXRwdXQ6InRleHQiLAl0dHlwZTpURVhUfSwKK3tpbnB1dDoiXFxtYm94IiwJdGFnOiJtdGV4dCIsIG91dHB1dDoibWJveCIsCXR0eXBlOlRFWFR9LAorCisvL2RpYWNyaXRpY2FsIG1hcmtzCit7aW5wdXQ6IlxcYWN1dGUiLAl0YWc6Im1vdmVyIiwgIG91dHB1dDoiXHUwMEI0IiwgdHR5cGU6VU5BUlksIGFjYzp0cnVlfSwKKy8ve2lucHV0OiJcXGFjdXRlIiwJICB0YWc6Im1vdmVyIiwgIG91dHB1dDoiXHUwMzE3IiwgdHR5cGU6VU5BUlksIGFjYzp0cnVlfSwKKy8ve2lucHV0OiJcXGFjdXRlIiwJICB0YWc6Im1vdmVyIiwgIG91dHB1dDoiXHUwMzAxIiwgdHR5cGU6VU5BUlksIGFjYzp0cnVlfSwKKy8ve2lucHV0OiJcXGdyYXZlIiwJICB0YWc6Im1vdmVyIiwgIG91dHB1dDoiXHUwMzAwIiwgdHR5cGU6VU5BUlksIGFjYzp0cnVlfSwKKy8ve2lucHV0OiJcXGdyYXZlIiwJICB0YWc6Im1vdmVyIiwgIG91dHB1dDoiXHUwMzE2IiwgdHR5cGU6VU5BUlksIGFjYzp0cnVlfSwKK3tpbnB1dDoiXFxncmF2ZSIsCXRhZzoibW92ZXIiLCAgb3V0cHV0OiJcdTAwNjAiLCB0dHlwZTpVTkFSWSwgYWNjOnRydWV9LAore2lucHV0OiJcXGJyZXZlIiwJdGFnOiJtb3ZlciIsICBvdXRwdXQ6Ilx1MDJEOCIsIHR0eXBlOlVOQVJZLCBhY2M6dHJ1ZX0sCit7aW5wdXQ6IlxcY2hlY2siLAl0YWc6Im1vdmVyIiwgIG91dHB1dDoiXHUwMkM3IiwgdHR5cGU6VU5BUlksIGFjYzp0cnVlfSwKK3tpbnB1dDoiXFxkb3QiLAkJdGFnOiJtb3ZlciIsICBvdXRwdXQ6Ii4iLCAgICAgIHR0eXBlOlVOQVJZLCBhY2M6dHJ1ZX0sCit7aW5wdXQ6IlxcZGRvdCIsCXRhZzoibW92ZXIiLCAgb3V0cHV0OiIuLiIsICAgICB0dHlwZTpVTkFSWSwgYWNjOnRydWV9LAorLy97aW5wdXQ6IlxcZGRvdCIsCSAgdGFnOiJtb3ZlciIsICBvdXRwdXQ6Ilx1MDBBOCIsIHR0eXBlOlVOQVJZLCBhY2M6dHJ1ZX0sCit7aW5wdXQ6IlxcbWF0aHJpbmciLAl0YWc6Im1vdmVyIiwgIG91dHB1dDoiXHUwMEIwIiwgdHR5cGU6VU5BUlksIGFjYzp0cnVlfSwKK3tpbnB1dDoiXFx2ZWMiLAkJdGFnOiJtb3ZlciIsICBvdXRwdXQ6Ilx1MjBENyIsIHR0eXBlOlVOQVJZLCBhY2M6dHJ1ZX0sCit7aW5wdXQ6Ilxcb3ZlcnJpZ2h0YXJyb3ciLHRhZzoibW92ZXIiLG91dHB1dDoiXHUyMEQ3IiwgdHR5cGU6VU5BUlksIGFjYzp0cnVlfSwKK3tpbnB1dDoiXFxvdmVybGVmdGFycm93Iix0YWc6Im1vdmVyIiwgb3V0cHV0OiJcdTIwRDYiLCB0dHlwZTpVTkFSWSwgYWNjOnRydWV9LAore2lucHV0OiJcXGhhdCIsCQl0YWc6Im1vdmVyIiwgIG91dHB1dDoiXHUwMDVFIiwgdHR5cGU6VU5BUlksIGFjYzp0cnVlfSwKK3tpbnB1dDoiXFx3aWRlaGF0IiwJdGFnOiJtb3ZlciIsICBvdXRwdXQ6Ilx1MDMwMiIsIHR0eXBlOlVOQVJZLCBhY2M6dHJ1ZX0sCit7aW5wdXQ6IlxcdGlsZGUiLAl0YWc6Im1vdmVyIiwgIG91dHB1dDoifiIsICAgICAgdHR5cGU6VU5BUlksIGFjYzp0cnVlfSwKKy8ve2lucHV0OiJcXHRpbGRlIiwJICB0YWc6Im1vdmVyIiwgIG91dHB1dDoiXHUwMzAzIiwgdHR5cGU6VU5BUlksIGFjYzp0cnVlfSwKK3tpbnB1dDoiXFx3aWRldGlsZGUiLAl0YWc6Im1vdmVyIiwgIG91dHB1dDoiXHUwMkRDIiwgdHR5cGU6VU5BUlksIGFjYzp0cnVlfSwKK3tpbnB1dDoiXFxiYXIiLAkJdGFnOiJtb3ZlciIsICBvdXRwdXQ6Ilx1MjAzRSIsIHR0eXBlOlVOQVJZLCBhY2M6dHJ1ZX0sCit7aW5wdXQ6Ilxcb3ZlcmJyYWNlIiwJdGFnOiJtb3ZlciIsICBvdXRwdXQ6Ilx1MjNCNCIsIHR0eXBlOlVOQVJZLCBhY2M6dHJ1ZX0sCit7aW5wdXQ6Ilxcb3ZlcmxpbmUiLAl0YWc6Im1vdmVyIiwgIG91dHB1dDoiXHUwMEFGIiwgdHR5cGU6VU5BUlksIGFjYzp0cnVlfSwKK3tpbnB1dDoiXFx1bmRlcmJyYWNlIiwgIHRhZzoibXVuZGVyIiwgb3V0cHV0OiJcdTIzQjUiLCB0dHlwZTpVTkFSWSwgYWNjOnRydWV9LAore2lucHV0OiJcXHVuZGVybGluZSIsCXRhZzoibXVuZGVyIiwgb3V0cHV0OiJcdTAwQUYiLCB0dHlwZTpVTkFSWSwgYWNjOnRydWV9LAorLy97aW5wdXQ6InVuZGVybGluZSIsCXRhZzoibXVuZGVyIiwgb3V0cHV0OiJcdTAzMzIiLCB0dHlwZTpVTkFSWSwgYWNjOnRydWV9LAorCisvL3R5cGVzdHlsZXMgYW5kIGZvbnRzCit7aW5wdXQ6IlxcZGlzcGxheXN0eWxlIix0YWc6Im1zdHlsZSIsYXRuYW1lOiJkaXNwbGF5c3R5bGUiLGF0dmFsOiJ0cnVlIiwgdHR5cGU6VU5BUll9LAore2lucHV0OiJcXHRleHRzdHlsZSIsdGFnOiJtc3R5bGUiLGF0bmFtZToiZGlzcGxheXN0eWxlIixhdHZhbDoiZmFsc2UiLCB0dHlwZTpVTkFSWX0sCit7aW5wdXQ6Ilxcc2NyaXB0c3R5bGUiLHRhZzoibXN0eWxlIixhdG5hbWU6InNjcmlwdGxldmVsIixhdHZhbDoiMSIsIHR0eXBlOlVOQVJZfSwKK3tpbnB1dDoiXFxzY3JpcHRzY3JpcHRzdHlsZSIsdGFnOiJtc3R5bGUiLGF0bmFtZToic2NyaXB0bGV2ZWwiLGF0dmFsOiIyIiwgdHR5cGU6VU5BUll9LAore2lucHV0OiJcXHRleHRybSIsIHRhZzoibXN0eWxlIiwgb3V0cHV0OiJcXG1hdGhybSIsIHR0eXBlOiBERUZJTklUSU9OfSwKK3tpbnB1dDoiXFxtYXRoYmYiLCB0YWc6Im1zdHlsZSIsIGF0bmFtZToibWF0aHZhcmlhbnQiLCBhdHZhbDoiYm9sZCIsIHR0eXBlOlVOQVJZfSwKK3tpbnB1dDoiXFx0ZXh0YmYiLCB0YWc6Im1zdHlsZSIsIGF0bmFtZToibWF0aHZhcmlhbnQiLCBhdHZhbDoiYm9sZCIsIHR0eXBlOlVOQVJZfSwKK3tpbnB1dDoiXFxtYXRoaXQiLCB0YWc6Im1zdHlsZSIsIGF0bmFtZToibWF0aHZhcmlhbnQiLCBhdHZhbDoiaXRhbGljIiwgdHR5cGU6VU5BUll9LAore2lucHV0OiJcXHRleHRpdCIsIHRhZzoibXN0eWxlIiwgYXRuYW1lOiJtYXRodmFyaWFudCIsIGF0dmFsOiJpdGFsaWMiLCB0dHlwZTpVTkFSWX0sCit7aW5wdXQ6IlxcbWF0aHR0IiwgdGFnOiJtc3R5bGUiLCBhdG5hbWU6Im1hdGh2YXJpYW50IiwgYXR2YWw6Im1vbm9zcGFjZSIsIHR0eXBlOlVOQVJZfSwKK3tpbnB1dDoiXFx0ZXh0dHQiLCB0YWc6Im1zdHlsZSIsIGF0bmFtZToibWF0aHZhcmlhbnQiLCBhdHZhbDoibW9ub3NwYWNlIiwgdHR5cGU6VU5BUll9LAore2lucHV0OiJcXG1hdGhzZiIsIHRhZzoibXN0eWxlIiwgYXRuYW1lOiJtYXRodmFyaWFudCIsIGF0dmFsOiJzYW5zLXNlcmlmIiwgdHR5cGU6VU5BUll9LAore2lucHV0OiJcXG1hdGhiYiIsIHRhZzoibXN0eWxlIiwgYXRuYW1lOiJtYXRodmFyaWFudCIsIGF0dmFsOiJkb3VibGUtc3RydWNrIiwgdHR5cGU6VU5BUlksIGNvZGVzOkFNYmJifSwKK3tpbnB1dDoiXFxtYXRoY2FsIix0YWc6Im1zdHlsZSIsIGF0bmFtZToibWF0aHZhcmlhbnQiLCBhdHZhbDoic2NyaXB0IiwgdHR5cGU6VU5BUlksIGNvZGVzOkFNY2FsfSwKK3tpbnB1dDoiXFxtYXRoZnJhayIsdGFnOiJtc3R5bGUiLGF0bmFtZToibWF0aHZhcmlhbnQiLCBhdHZhbDoiZnJha3R1ciIsdHR5cGU6VU5BUlksIGNvZGVzOkFNZnJrfQorXTsKKwordmFyIExNbmFtZXMgPSBbXTsgLy9saXN0IG9mIGlucHV0IHN5bWJvbHMKKworZnVuY3Rpb24gTE1yZW1vdmVDaGFyc0FuZEJsYW5rcyhzdHIsbikgeworLy9yZW1vdmUgbiBjaGFyYWN0ZXJzIGFuZCBhbnkgZm9sbG93aW5nIGJsYW5rcworICB2YXIgc3Q7CisgIHN0ID0gc3RyLnNsaWNlKG4pOworICBmb3IgKHZhciBpPTA7IGk8c3QubGVuZ3RoICYmIHN0LmNoYXJDb2RlQXQoaSk8PTMyOyBpPWkrMSk7CisgIHJldHVybiBzdC5zbGljZShpKTsKK30KKworZnVuY3Rpb24gTE1nZXRTeW1ib2woc3RyKSB7CisvL3JldHVybiBtYXhpbWFsIGluaXRpYWwgc3Vic3RyaW5nIG9mIHN0ciB0aGF0IGFwcGVhcnMgaW4gbmFtZXMKKy8vcmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm9uZQorICB2YXIgayA9IDA7IC8vbmV3IHBvcworICB2YXIgaiA9IDA7IC8vb2xkIHBvcworICB2YXIgbWs7IC8vbWF0Y2ggcG9zCisgIHZhciBzdDsKKyAgdmFyIHRhZ3N0OworICB2YXIgbWF0Y2ggPSAiIjsKKyAgdmFyIG1vcmUgPSB0cnVlOworICBmb3IgKHZhciBpPTE7IGk8PXN0ci5sZW5ndGggJiYgbW9yZTsgaSsrKSB7CisgICAgc3QgPSBzdHIuc2xpY2UoMCxpKTsgLy9pbml0aWFsIHN1YnN0cmluZyBvZiBsZW5ndGggaQorICAgIGogPSBrOworICAgIGsgPSBwb3NpdGlvbihMTW5hbWVzLCBzdCwgaik7CisgICAgaWYgKGs8TE1uYW1lcy5sZW5ndGggJiYgc3RyLnNsaWNlKDAsTE1uYW1lc1trXS5sZW5ndGgpPT1MTW5hbWVzW2tdKXsKKyAgICAgIG1hdGNoID0gTE1uYW1lc1trXTsKKyAgICAgIG1rID0gazsKKyAgICAgIGkgPSBtYXRjaC5sZW5ndGg7CisgICAgfQorICAgIG1vcmUgPSBrPExNbmFtZXMubGVuZ3RoICYmIHN0ci5zbGljZSgwLExNbmFtZXNba10ubGVuZ3RoKT49TE1uYW1lc1trXTsKKyAgfQorICBMTXByZXZpb3VzU3ltYm9sPUxNY3VycmVudFN5bWJvbDsKKyAgaWYgKG1hdGNoIT0iIil7CisgICAgTE1jdXJyZW50U3ltYm9sPUxNc3ltYm9sc1tta10udHR5cGU7CisgICAgcmV0dXJuIExNc3ltYm9sc1tta107CisgIH0KKyAgTE1jdXJyZW50U3ltYm9sPUNPTlNUOworICBrID0gMTsKKyAgc3QgPSBzdHIuc2xpY2UoMCwxKTsgLy90YWtlIDEgY2hhcmFjdGVyCisgIGlmICgiMCI8PXN0ICYmIHN0PD0iOSIpIHRhZ3N0ID0gIm1uIjsKKyAgZWxzZSB0YWdzdCA9ICgoIkEiPnN0IHx8IHN0PiJaIikgJiYgKCJhIj5zdCB8fCBzdD4ieiIpPyJtbyI6Im1pIik7CisvKgorLy8gQ29tbWVudGVkIG91dCBieSBEUlcgKG5vdCBmdWxseSB1bmRlcnN0b29kLCBidXQgcHJvYmFibHkgdG8gZG8gd2l0aAorLy8gdXNlIG9mICIvIiBhcyBhbiBJTkZJWCB2ZXJzaW9uIG9mICJcXGZyYWMiLCB3aGljaCB3ZSBkb24ndCB3YW50KToKKy8vfQorLy9pZiAoc3Q9PSItIiAmJiBMTXByZXZpb3VzU3ltYm9sPT1JTkZJWCkgeworLy8gIExNY3VycmVudFN5bWJvbCA9IElORklYOyAgLy90cmljayAiLyIgaW50byByZWNvZ25pemluZyAiLSIgb24gc2Vjb25kIHBhcnNlCisvLyAgcmV0dXJuIHtpbnB1dDpzdCwgdGFnOnRhZ3N0LCBvdXRwdXQ6c3QsIHR0eXBlOlVOQVJZLCBmdW5jOnRydWV9OworLy99CisqLworICByZXR1cm4ge2lucHV0OnN0LCB0YWc6dGFnc3QsIG91dHB1dDpzdCwgdHR5cGU6Q09OU1R9OworfQorCisKKy8qUGFyc2luZyBBU0NJSSBtYXRoIGV4cHJlc3Npb25zIHdpdGggdGhlIGZvbGxvd2luZyBncmFtbWFyCit2IDo6PSBbQS1aYS16XSB8IGdyZWVrIGxldHRlcnMgfCBudW1iZXJzIHwgb3RoZXIgY29uc3RhbnQgc3ltYm9scwordSA6Oj0gc3FydCB8IHRleHQgfCBiYiB8IG90aGVyIHVuYXJ5IHN5bWJvbHMgZm9yIGZvbnQgY29tbWFuZHMKK2IgOjo9IGZyYWMgfCByb290IHwgc3RhY2tyZWwJYmluYXJ5IHN5bWJvbHMKK2wgOjo9IHsgfCBcbGVmdAkJCWxlZnQgYnJhY2tldHMKK3IgOjo9IH0gfCBccmlnaHQJCXJpZ2h0IGJyYWNrZXRzCitTIDo6PSB2IHwgbEVyIHwgdVMgfCBiU1MJU2ltcGxlIGV4cHJlc3Npb24KK0kgOjo9IFNfUyB8IFNeUyB8IFNfU15TIHwgUwlJbnRlcm1lZGlhdGUgZXhwcmVzc2lvbgorRSA6Oj0gSUUgfCBJL0kJCQlFeHByZXNzaW9uCitFYWNoIHRlcm1pbmFsIHN5bWJvbCBpcyB0cmFuc2xhdGVkIGludG8gYSBjb3JyZXNwb25kaW5nIG1hdGhtbCBub2RlLiovCisKK3ZhciBMTXByZXZpb3VzU3ltYm9sLExNY3VycmVudFN5bWJvbDsKKworZnVuY3Rpb24gTE1wYXJzZVNleHByKHN0cikgeyAvL3BhcnNlcyBzdHIgYW5kIHJldHVybnMgW25vZGUsdGFpbHN0ciwobm9kZSl0YWddCisgIHZhciBzeW1ib2wsIG5vZGUsIHJlc3VsdCwgcmVzdWx0MiwgaSwgc3QsLy8gcmlnaHR2ZXJ0ID0gZmFsc2UsCisgICAgbmV3RnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgc3RyID0gTE1yZW1vdmVDaGFyc0FuZEJsYW5rcyhzdHIsMCk7CisgIHN5bWJvbCA9IExNZ2V0U3ltYm9sKHN0cik7ICAgICAgICAgICAgIC8vZWl0aGVyIGEgdG9rZW4gb3IgYSBicmFja2V0IG9yIGVtcHR5CisgIGlmIChzeW1ib2wgPT0gbnVsbCB8fCBzeW1ib2wudHR5cGUgPT0gUklHSFRCUkFDS0VUKQorICAgIHJldHVybiBbbnVsbCxzdHIsbnVsbF07CisgIGlmIChzeW1ib2wudHR5cGUgPT0gREVGSU5JVElPTikgeworICAgIHN0ciA9IHN5bWJvbC5vdXRwdXQrTE1yZW1vdmVDaGFyc0FuZEJsYW5rcyhzdHIsc3ltYm9sLmlucHV0Lmxlbmd0aCk7CisgICAgc3ltYm9sID0gTE1nZXRTeW1ib2woc3RyKTsKKyAgICBpZiAoc3ltYm9sID09IG51bGwgfHwgc3ltYm9sLnR0eXBlID09IFJJR0hUQlJBQ0tFVCkKKyAgICAgIHJldHVybiBbbnVsbCxzdHIsbnVsbF07CisgIH0KKyAgc3RyID0gTE1yZW1vdmVDaGFyc0FuZEJsYW5rcyhzdHIsc3ltYm9sLmlucHV0Lmxlbmd0aCk7CisgIHN3aXRjaCAoc3ltYm9sLnR0eXBlKSB7CisgIGNhc2UgU1BBQ0U6CisgICAgbm9kZSA9IGNyZWF0ZU1tbE5vZGUoc3ltYm9sLnRhZyk7CisgICAgbm9kZS5zZXRBdHRyaWJ1dGUoc3ltYm9sLmF0bmFtZSxzeW1ib2wuYXR2YWwpOworICAgIHJldHVybiBbbm9kZSxzdHIsc3ltYm9sLnRhZ107CisgIGNhc2UgVU5ERVJPVkVSOgorICAgIGlmIChpc0lFKSB7CisgICAgICBpZiAoc3ltYm9sLmlucHV0LnN1YnN0cigwLDQpID09ICJcXGJpZyIpIHsgICAvLyBib3RjaCBmb3IgbWlzc2luZyBzeW1ib2xzCisJc3RyID0gIlxcIitzeW1ib2wuaW5wdXQuc3Vic3RyKDQpK3N0cjsJICAgLy8gbWFrZSBcYmlnY3VwID0gXGN1cCBldGMuCisJc3ltYm9sID0gTE1nZXRTeW1ib2woc3RyKTsKKwlzeW1ib2wudHR5cGUgPSBVTkRFUk9WRVI7CisJc3RyID0gTE1yZW1vdmVDaGFyc0FuZEJsYW5rcyhzdHIsc3ltYm9sLmlucHV0Lmxlbmd0aCk7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBbY3JlYXRlTW1sTm9kZShzeW1ib2wudGFnLAorCQkJZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3ltYm9sLm91dHB1dCkpLHN0cixzeW1ib2wudGFnXTsKKyAgY2FzZSBDT05TVDoKKyAgICB2YXIgb3V0cHV0ID0gc3ltYm9sLm91dHB1dDsKKyAgICBpZiAoaXNJRSkgeworICAgICAgaWYgKHN5bWJvbC5pbnB1dCA9PSAiJyIpCisJb3V0cHV0ID0gIlx1MjAzMiI7CisgICAgICBlbHNlIGlmIChzeW1ib2wuaW5wdXQgPT0gIicnIikKKwlvdXRwdXQgPSAiXHUyMDMzIjsKKyAgICAgIGVsc2UgaWYgKHN5bWJvbC5pbnB1dCA9PSAiJycnIikKKwlvdXRwdXQgPSAiXHUyMDMzXHUyMDMyIjsKKyAgICAgIGVsc2UgaWYgKHN5bWJvbC5pbnB1dCA9PSAiJycnJyIpCisJb3V0cHV0ID0gIlx1MjAzM1x1MjAzMyI7CisgICAgICBlbHNlIGlmIChzeW1ib2wuaW5wdXQgPT0gIlxcc3F1YXJlIikKKwlvdXRwdXQgPSAiXHUyNUExIjsJLy8gc2FtZSBhcyBcQm94CisgICAgICBlbHNlIGlmIChzeW1ib2wuaW5wdXQuc3Vic3RyKDAsNSkgPT0gIlxcZnJhYyIpIHsKKwkJCQkJCS8vIGJvdGNoIGZvciBtaXNzaW5nIGZyYWN0aW9ucworCXZhciBkZW5vbSA9IHN5bWJvbC5pbnB1dC5zdWJzdHIoNiwxKTsKKwlpZiAoZGVub20gPT0gIjUiIHx8IGRlbm9tID09ICI2IikgeworCSAgc3RyID0gc3ltYm9sLmlucHV0LnJlcGxhY2UoL1xcZnJhYy8sIlxcZnJhYyAiKStzdHI7CisJICByZXR1cm4gW25vZGUsc3RyLHN5bWJvbC50YWddOworCX0KKyAgICAgIH0KKyAgICB9CisgICAgbm9kZSA9IGNyZWF0ZU1tbE5vZGUoc3ltYm9sLnRhZyxkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShvdXRwdXQpKTsKKyAgICByZXR1cm4gW25vZGUsc3RyLHN5bWJvbC50YWddOworICBjYXNlIExPTkc6ICAvLyBhZGRlZCBieSBEUlcKKyAgICBub2RlID0gY3JlYXRlTW1sTm9kZShzeW1ib2wudGFnLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN5bWJvbC5vdXRwdXQpKTsKKyAgICBub2RlLnNldEF0dHJpYnV0ZSgibWluc2l6ZSIsIjEuNSIpOworICAgIG5vZGUuc2V0QXR0cmlidXRlKCJtYXhzaXplIiwiMS41Iik7CisgICAgbm9kZSA9IGNyZWF0ZU1tbE5vZGUoIm1vdmVyIixub2RlKTsKKyAgICBub2RlLmFwcGVuZENoaWxkKGNyZWF0ZU1tbE5vZGUoIm1zcGFjZSIpKTsKKyAgICByZXR1cm4gW25vZGUsc3RyLHN5bWJvbC50YWddOworICBjYXNlIFNUUkVUQ0hZOiAgLy8gYWRkZWQgYnkgRFJXCisgICAgaWYgKGlzSUUgJiYgc3ltYm9sLmlucHV0ID09ICJcXGJhY2tzbGFzaCIpCisJc3ltYm9sLm91dHB1dCA9ICJcXCI7CS8vIGRvZXNuJ3QgZXhwYW5kLCBidXQgdGhlbiBub3IgZG9lcyAiXHUyMjE2IgorICAgIG5vZGUgPSBjcmVhdGVNbWxOb2RlKHN5bWJvbC50YWcsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3ltYm9sLm91dHB1dCkpOworICAgIGlmIChzeW1ib2wuaW5wdXQgPT0gInwiIHx8IHN5bWJvbC5pbnB1dCA9PSAiXFx2ZXJ0IiB8fAorCXN5bWJvbC5pbnB1dCA9PSAiXFx8IiB8fCBzeW1ib2wuaW5wdXQgPT0gIlxcVmVydCIpIHsKKwkgIG5vZGUuc2V0QXR0cmlidXRlKCJsc3BhY2UiLCIwZW0iKTsKKwkgIG5vZGUuc2V0QXR0cmlidXRlKCJyc3BhY2UiLCIwZW0iKTsKKyAgICB9CisgICAgbm9kZS5zZXRBdHRyaWJ1dGUoIm1heHNpemUiLHN5bWJvbC5hdHZhbCk7ICAvLyBkb24ndCBhbGxvdyB0byBzdHJldGNoIGhlcmUKKyAgICBpZiAoc3ltYm9sLnJ0YWcgIT0gbnVsbCkKKyAgICAgIHJldHVybiBbbm9kZSxzdHIsc3ltYm9sLnJ0YWddOworICAgIGVsc2UKKyAgICAgIHJldHVybiBbbm9kZSxzdHIsc3ltYm9sLnRhZ107CisgIGNhc2UgQklHOiAgLy8gYWRkZWQgYnkgRFJXCisgICAgdmFyIGF0dmFsID0gc3ltYm9sLmF0dmFsOworICAgIGlmIChpc0lFKQorICAgICAgYXR2YWwgPSBzeW1ib2wuaWV2YWw7CisgICAgc3ltYm9sID0gTE1nZXRTeW1ib2woc3RyKTsKKyAgICBpZiAoc3ltYm9sID09IG51bGwpCisJcmV0dXJuIFtudWxsLHN0cixudWxsXTsKKyAgICBzdHIgPSBMTXJlbW92ZUNoYXJzQW5kQmxhbmtzKHN0cixzeW1ib2wuaW5wdXQubGVuZ3RoKTsKKyAgICBub2RlID0gY3JlYXRlTW1sTm9kZShzeW1ib2wudGFnLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN5bWJvbC5vdXRwdXQpKTsKKyAgICBpZiAoaXNJRSkgewkJLy8gdG8gZ2V0IGJyYWNrZXRzIHRvIGV4cGFuZAorICAgICAgdmFyIHNwYWNlID0gY3JlYXRlTW1sTm9kZSgibXNwYWNlIik7CisgICAgICBzcGFjZS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsYXR2YWwrImV4Iik7CisgICAgICBub2RlID0gY3JlYXRlTW1sTm9kZSgibXJvdyIsbm9kZSk7CisgICAgICBub2RlLmFwcGVuZENoaWxkKHNwYWNlKTsKKyAgICB9IGVsc2UgewkJLy8gaWdub3JlZCBpbiBJRQorICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoIm1pbnNpemUiLGF0dmFsKTsKKyAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCJtYXhzaXplIixhdHZhbCk7CisgICAgfQorICAgIHJldHVybiBbbm9kZSxzdHIsc3ltYm9sLnRhZ107CisgIGNhc2UgTEVGVEJSQUNLRVQ6ICAgLy9yZWFkIChleHByKykKKyAgICBpZiAoc3ltYm9sLmlucHV0ID09ICJcXGxlZnQiKSB7IC8vIGxlZnQgd2hhdD8KKyAgICAgIHN5bWJvbCA9IExNZ2V0U3ltYm9sKHN0cik7CisgICAgICBpZiAoc3ltYm9sICE9IG51bGwpIHsKKwlpZiAoc3ltYm9sLmlucHV0ID09ICIuIikKKwkgIHN5bWJvbC5pbnZpc2libGUgPSB0cnVlOworCXN0ciA9IExNcmVtb3ZlQ2hhcnNBbmRCbGFua3Moc3RyLHN5bWJvbC5pbnB1dC5sZW5ndGgpOworICAgICAgfQorICAgIH0KKyAgICByZXN1bHQgPSBMTXBhcnNlRXhwcihzdHIsdHJ1ZSxmYWxzZSk7CisgICAgaWYgKHN5bWJvbD09bnVsbCB8fAorCSh0eXBlb2Ygc3ltYm9sLmludmlzaWJsZSA9PSAiYm9vbGVhbiIgJiYgc3ltYm9sLmludmlzaWJsZSkpCisgICAgICBub2RlID0gY3JlYXRlTW1sTm9kZSgibXJvdyIscmVzdWx0WzBdKTsKKyAgICBlbHNlIHsKKyAgICAgIG5vZGUgPSBjcmVhdGVNbWxOb2RlKCJtbyIsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3ltYm9sLm91dHB1dCkpOworICAgICAgbm9kZSA9IGNyZWF0ZU1tbE5vZGUoIm1yb3ciLG5vZGUpOworICAgICAgbm9kZS5hcHBlbmRDaGlsZChyZXN1bHRbMF0pOworICAgIH0KKyAgICByZXR1cm4gW25vZGUscmVzdWx0WzFdLHJlc3VsdFsyXV07CisgIGNhc2UgTUFUUklYOgkgLy9yZWFkIChleHByKykKKyAgICBpZiAoc3ltYm9sLmlucHV0ID09ICJcXGJlZ2lue2FycmF5fSIpIHsKKyAgICAgIHZhciBtYXNrID0gIiI7CisgICAgICBzeW1ib2wgPSBMTWdldFN5bWJvbChzdHIpOworICAgICAgc3RyID0gTE1yZW1vdmVDaGFyc0FuZEJsYW5rcyhzdHIsMCk7CisgICAgICBpZiAoc3ltYm9sID09IG51bGwpCisJbWFzayA9ICJsIjsKKyAgICAgIGVsc2UgeworCXN0ciA9IExNcmVtb3ZlQ2hhcnNBbmRCbGFua3Moc3RyLHN5bWJvbC5pbnB1dC5sZW5ndGgpOworCWlmIChzeW1ib2wuaW5wdXQgIT0gInsiKQorCSAgbWFzayA9ICJsIjsKKwllbHNlIGRvIHsKKwkgIHN5bWJvbCA9IExNZ2V0U3ltYm9sKHN0cik7CisJICBpZiAoc3ltYm9sICE9IG51bGwpIHsKKwkgICAgc3RyID0gTE1yZW1vdmVDaGFyc0FuZEJsYW5rcyhzdHIsc3ltYm9sLmlucHV0Lmxlbmd0aCk7CisJICAgIGlmIChzeW1ib2wuaW5wdXQgIT0gIn0iKQorCSAgICAgIG1hc2sgPSBtYXNrK3N5bWJvbC5pbnB1dDsKKwkgIH0KKwl9IHdoaWxlIChzeW1ib2wgIT0gbnVsbCAmJiBzeW1ib2wuaW5wdXQgIT0gIiIgJiYgc3ltYm9sLmlucHV0ICE9ICJ9Iik7CisgICAgICB9CisgICAgICByZXN1bHQgPSBMTXBhcnNlRXhwcigieyIrc3RyLHRydWUsdHJ1ZSk7CisvLyAgICBpZiAocmVzdWx0WzBdPT1udWxsKSByZXR1cm4gW2NyZWF0ZU1tbE5vZGUoIm1vIiwKKy8vCQkJICAgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3ltYm9sLmlucHV0KSksc3RyXTsKKyAgICAgIG5vZGUgPSBjcmVhdGVNbWxOb2RlKCJtdGFibGUiLHJlc3VsdFswXSk7CisgICAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9sL2csImxlZnQgIik7CisgICAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9yL2csInJpZ2h0ICIpOworICAgICAgbWFzayA9IG1hc2sucmVwbGFjZSgvYy9nLCJjZW50ZXIgIik7CisgICAgICBub2RlLnNldEF0dHJpYnV0ZSgiY29sdW1uYWxpZ24iLG1hc2spOworICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoImRpc3BsYXlzdHlsZSIsImZhbHNlIik7CisgICAgICBpZiAoaXNJRSkKKwlyZXR1cm4gW25vZGUscmVzdWx0WzFdLG51bGxdOworLy8gdHJ5aW5nIHRvIGdldCBhICpsaXR0bGUqIGJpdCBvZiBzcGFjZSBhcm91bmQgdGhlIGFycmF5CisvLyAoSUUgYWxyZWFkeSBpbmNsdWRlcyBpdCkKKyAgICAgIHZhciBsc3BhY2UgPSBjcmVhdGVNbWxOb2RlKCJtc3BhY2UiKTsKKyAgICAgIGxzcGFjZS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMC4xNjdlbSIpOworICAgICAgdmFyIHJzcGFjZSA9IGNyZWF0ZU1tbE5vZGUoIm1zcGFjZSIpOworICAgICAgcnNwYWNlLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIwLjE2N2VtIik7CisgICAgICB2YXIgbm9kZTEgPSBjcmVhdGVNbWxOb2RlKCJtcm93Iixsc3BhY2UpOworICAgICAgbm9kZTEuYXBwZW5kQ2hpbGQobm9kZSk7CisgICAgICBub2RlMS5hcHBlbmRDaGlsZChyc3BhY2UpOworICAgICAgcmV0dXJuIFtub2RlMSxyZXN1bHRbMV0sbnVsbF07CisgICAgfSBlbHNlIHsJLy8gZXFuYXJyYXkKKyAgICAgIHJlc3VsdCA9IExNcGFyc2VFeHByKCJ7IitzdHIsdHJ1ZSx0cnVlKTsKKyAgICAgIG5vZGUgPSBjcmVhdGVNbWxOb2RlKCJtdGFibGUiLHJlc3VsdFswXSk7CisgICAgICBpZiAoaXNJRSkKKwlub2RlLnNldEF0dHJpYnV0ZSgiY29sdW1uc3BhY2luZyIsIjAuMjVlbSIpOyAvLyBiZXN0IGluIHByYWN0aWNlPworICAgICAgZWxzZQorCW5vZGUuc2V0QXR0cmlidXRlKCJjb2x1bW5zcGFjaW5nIiwiMC4xNjdlbSIpOyAvLyBjb3JyZWN0IChidXQgaWdub3JlZD8pCisgICAgICBub2RlLnNldEF0dHJpYnV0ZSgiY29sdW1uYWxpZ24iLCJyaWdodCBjZW50ZXIgbGVmdCIpOworICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoImRpc3BsYXlzdHlsZSIsInRydWUiKTsKKyAgICAgIG5vZGUgPSBjcmVhdGVNbWxOb2RlKCJtcm93Iixub2RlKTsKKyAgICAgIHJldHVybiBbbm9kZSxyZXN1bHRbMV0sbnVsbF07CisgICAgfQorICBjYXNlIFRFWFQ6CisgICAgICBpZiAoc3RyLmNoYXJBdCgwKT09InsiKSBpPXN0ci5pbmRleE9mKCJ9Iik7CisgICAgICBlbHNlIGkgPSAwOworICAgICAgaWYgKGk9PS0xKQorCQkgaSA9IHN0ci5sZW5ndGg7CisgICAgICBzdCA9IHN0ci5zbGljZSgxLGkpOworICAgICAgaWYgKHN0LmNoYXJBdCgwKSA9PSAiICIpIHsKKwlub2RlID0gY3JlYXRlTW1sTm9kZSgibXNwYWNlIik7CisJbm9kZS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMC4zM2VtIik7CS8vIHdhcyAxZXgKKwluZXdGcmFnLmFwcGVuZENoaWxkKG5vZGUpOworICAgICAgfQorICAgICAgbmV3RnJhZy5hcHBlbmRDaGlsZCgKKyAgICAgICAgY3JlYXRlTW1sTm9kZShzeW1ib2wudGFnLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN0KSkpOworICAgICAgaWYgKHN0LmNoYXJBdChzdC5sZW5ndGgtMSkgPT0gIiAiKSB7CisJbm9kZSA9IGNyZWF0ZU1tbE5vZGUoIm1zcGFjZSIpOworCW5vZGUuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjAuMzNlbSIpOwkvLyB3YXMgMWV4CisJbmV3RnJhZy5hcHBlbmRDaGlsZChub2RlKTsKKyAgICAgIH0KKyAgICAgIHN0ciA9IExNcmVtb3ZlQ2hhcnNBbmRCbGFua3Moc3RyLGkrMSk7CisgICAgICByZXR1cm4gW2NyZWF0ZU1tbE5vZGUoIm1yb3ciLG5ld0ZyYWcpLHN0cixudWxsXTsKKyAgY2FzZSBVTkFSWToKKyAgICAgIHJlc3VsdCA9IExNcGFyc2VTZXhwcihzdHIpOworICAgICAgaWYgKHJlc3VsdFswXT09bnVsbCkgcmV0dXJuIFtjcmVhdGVNbWxOb2RlKHN5bWJvbC50YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN5bWJvbC5vdXRwdXQpKSxzdHJdOworICAgICAgaWYgKHR5cGVvZiBzeW1ib2wuZnVuYyA9PSAiYm9vbGVhbiIgJiYgc3ltYm9sLmZ1bmMpIHsgLy8gZnVuY3Rpb25zIGhhY2sKKwlzdCA9IHN0ci5jaGFyQXQoMCk7CisvLwlpZiAoc3Q9PSJeIiB8fCBzdD09Il8iIHx8IHN0PT0iLyIgfHwgc3Q9PSJ8IiB8fCBzdD09IiwiKSB7CisJaWYgKHN0PT0iXiIgfHwgc3Q9PSJfIiB8fCBzdD09IiwiKSB7CisJICByZXR1cm4gW2NyZWF0ZU1tbE5vZGUoc3ltYm9sLnRhZywKKwkJICAgIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN5bWJvbC5vdXRwdXQpKSxzdHIsc3ltYm9sLnRhZ107CisgICAgICAgIH0gZWxzZSB7CisJICBub2RlID0gY3JlYXRlTW1sTm9kZSgibXJvdyIsCisJICAgY3JlYXRlTW1sTm9kZShzeW1ib2wudGFnLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN5bWJvbC5vdXRwdXQpKSk7CisJICBpZiAoaXNJRSkgeworCSAgICB2YXIgc3BhY2UgPSBjcmVhdGVNbWxOb2RlKCJtc3BhY2UiKTsKKwkgICAgc3BhY2Uuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjAuMTY3ZW0iKTsKKwkgICAgbm9kZS5hcHBlbmRDaGlsZChzcGFjZSk7CisJICB9CisJICBub2RlLmFwcGVuZENoaWxkKHJlc3VsdFswXSk7CisJICByZXR1cm4gW25vZGUscmVzdWx0WzFdLHN5bWJvbC50YWddOworICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoc3ltYm9sLmlucHV0ID09ICJcXHNxcnQiKSB7CQkvLyBzcXJ0CisJaWYgKGlzSUUpIHsJLy8gc2V0IG1pbnNpemUsIGZvciBcc3VyZAorCSAgdmFyIHNwYWNlID0gY3JlYXRlTW1sTm9kZSgibXNwYWNlIik7CisJICBzcGFjZS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjEuMmV4Iik7CisJICBzcGFjZS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMGVtIik7CS8vIHByb2JhYmx5IG5vIGVmZmVjdAorCSAgbm9kZSA9IGNyZWF0ZU1tbE5vZGUoc3ltYm9sLnRhZyxyZXN1bHRbMF0pCisvLwkgIG5vZGUuc2V0QXR0cmlidXRlKCJtaW5zaXplIiwiMSIpOwkvLyBpZ25vcmVkCisvLwkgIG5vZGUgPSBjcmVhdGVNbWxOb2RlKCJtcm93Iixub2RlKTsgIC8vIGhvcGVmdWxseSB1bm5lY2Vzc2FyeQorCSAgbm9kZS5hcHBlbmRDaGlsZChzcGFjZSk7CisJICByZXR1cm4gW25vZGUscmVzdWx0WzFdLHN5bWJvbC50YWddOworCX0gZWxzZQorCSAgcmV0dXJuIFtjcmVhdGVNbWxOb2RlKHN5bWJvbC50YWcscmVzdWx0WzBdKSxyZXN1bHRbMV0sc3ltYm9sLnRhZ107CisgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzeW1ib2wuYWNjID09ICJib29sZWFuIiAmJiBzeW1ib2wuYWNjKSB7ICAgLy8gYWNjZW50CisgICAgICAgIG5vZGUgPSBjcmVhdGVNbWxOb2RlKHN5bWJvbC50YWcscmVzdWx0WzBdKTsKKwl2YXIgb3V0cHV0ID0gc3ltYm9sLm91dHB1dDsKKwlpZiAoaXNJRSkgeworCQlpZiAoc3ltYm9sLmlucHV0ID09ICJcXGhhdCIpCisJCQlvdXRwdXQgPSAiXHUwMzAyIjsKKwkJZWxzZSBpZiAoc3ltYm9sLmlucHV0ID09ICJcXHdpZGVoYXQiKQorCQkJb3V0cHV0ID0gIlx1MDA1RSI7CisJCWVsc2UgaWYgKHN5bWJvbC5pbnB1dCA9PSAiXFxiYXIiKQorCQkJb3V0cHV0ID0gIlx1MDBBRiI7CisJCWVsc2UgaWYgKHN5bWJvbC5pbnB1dCA9PSAiXFxncmF2ZSIpCisJCQlvdXRwdXQgPSAiXHUwMzAwIjsKKwkJZWxzZSBpZiAoc3ltYm9sLmlucHV0ID09ICJcXHRpbGRlIikKKwkJCW91dHB1dCA9ICJcdTAzMDMiOworCX0KKwl2YXIgbm9kZTEgPSBjcmVhdGVNbWxOb2RlKCJtbyIsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUob3V0cHV0KSk7CisJaWYgKHN5bWJvbC5pbnB1dCA9PSAiXFx2ZWMiIHx8IHN5bWJvbC5pbnB1dCA9PSAiXFxjaGVjayIpCisJCQkJCQkvLyBkb24ndCBhbGxvdyB0byBzdHJldGNoCisJICAgIG5vZGUxLnNldEF0dHJpYnV0ZSgibWF4c2l6ZSIsIjEuMiIpOworCQkgLy8gd2h5IGRvZXNuJ3QgIjEiIHdvcms/ICBcdmVjIG5lYXJseSBkaXNhcHBlYXJzIGluIGZpcmVmb3gKKwlpZiAoaXNJRSAmJiBzeW1ib2wuaW5wdXQgPT0gIlxcYmFyIikKKwkgICAgbm9kZTEuc2V0QXR0cmlidXRlKCJtYXhzaXplIiwiMC41Iik7CisJaWYgKHN5bWJvbC5pbnB1dCA9PSAiXFx1bmRlcmJyYWNlIiB8fCBzeW1ib2wuaW5wdXQgPT0gIlxcdW5kZXJsaW5lIikKKwkgIG5vZGUxLnNldEF0dHJpYnV0ZSgiYWNjZW50dW5kZXIiLCJ0cnVlIik7CisJZWxzZQorCSAgbm9kZTEuc2V0QXR0cmlidXRlKCJhY2NlbnQiLCJ0cnVlIik7CisJbm9kZS5hcHBlbmRDaGlsZChub2RlMSk7CisJaWYgKHN5bWJvbC5pbnB1dCA9PSAiXFxvdmVyYnJhY2UiIHx8IHN5bWJvbC5pbnB1dCA9PSAiXFx1bmRlcmJyYWNlIikKKwkgIG5vZGUudHR5cGUgPSBVTkRFUk9WRVI7CisJcmV0dXJuIFtub2RlLHJlc3VsdFsxXSxzeW1ib2wudGFnXTsKKyAgICAgIH0gZWxzZSB7CQkJICAgICAgLy8gZm9udCBjaGFuZ2Ugb3IgZGlzcGxheXN0eWxlIGNvbW1hbmQKKyAgICAgICAgaWYgKCFpc0lFICYmIHR5cGVvZiBzeW1ib2wuY29kZXMgIT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICBmb3IgKGk9MDsgaTxyZXN1bHRbMF0uY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGlmIChyZXN1bHRbMF0uY2hpbGROb2Rlc1tpXS5ub2RlTmFtZT09Im1pIiB8fCByZXN1bHRbMF0ubm9kZU5hbWU9PSJtaSIpIHsKKyAgICAgICAgICAgICAgc3QgPSAocmVzdWx0WzBdLm5vZGVOYW1lPT0ibWkiP3Jlc3VsdFswXS5maXJzdENoaWxkLm5vZGVWYWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFswXS5jaGlsZE5vZGVzW2ldLmZpcnN0Q2hpbGQubm9kZVZhbHVlKTsKKyAgICAgICAgICAgICAgdmFyIG5ld3N0ID0gW107CisgICAgICAgICAgICAgIGZvciAodmFyIGo9MDsgajxzdC5sZW5ndGg7IGorKykKKyAgICAgICAgICAgICAgICBpZiAoc3QuY2hhckNvZGVBdChqKT42NCAmJiBzdC5jaGFyQ29kZUF0KGopPDkxKSBuZXdzdCA9IG5ld3N0ICsKKyAgICAgICAgICAgICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoc3ltYm9sLmNvZGVzW3N0LmNoYXJDb2RlQXQoaiktNjVdKTsKKyAgICAgICAgICAgICAgICBlbHNlIG5ld3N0ID0gbmV3c3QgKyBzdC5jaGFyQXQoaik7CisgICAgICAgICAgICAgIGlmIChyZXN1bHRbMF0ubm9kZU5hbWU9PSJtaSIpCisgICAgICAgICAgICAgICAgcmVzdWx0WzBdPWNyZWF0ZU1tbE5vZGUoIm1vIikuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5ld3N0KSk7CisgICAgICAgICAgICAgIGVsc2UgcmVzdWx0WzBdLnJlcGxhY2VDaGlsZChjcmVhdGVNbWxOb2RlKCJtbyIpLgorICAgICAgICAgIGFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5ld3N0KSkscmVzdWx0WzBdLmNoaWxkTm9kZXNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG5vZGUgPSBjcmVhdGVNbWxOb2RlKHN5bWJvbC50YWcscmVzdWx0WzBdKTsKKyAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoc3ltYm9sLmF0bmFtZSxzeW1ib2wuYXR2YWwpOworCWlmIChzeW1ib2wuaW5wdXQgPT0gIlxcc2NyaXB0c3R5bGUiIHx8CisJICAgIHN5bWJvbC5pbnB1dCA9PSAiXFxzY3JpcHRzY3JpcHRzdHlsZSIpCisJCW5vZGUuc2V0QXR0cmlidXRlKCJkaXNwbGF5c3R5bGUiLCJmYWxzZSIpOworCXJldHVybiBbbm9kZSxyZXN1bHRbMV0sc3ltYm9sLnRhZ107CisgICAgICB9CisgIGNhc2UgQklOQVJZOgorICAgIHJlc3VsdCA9IExNcGFyc2VTZXhwcihzdHIpOworICAgIGlmIChyZXN1bHRbMF09PW51bGwpIHJldHVybiBbY3JlYXRlTW1sTm9kZSgibW8iLAorCQkJICAgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3ltYm9sLmlucHV0KSksc3RyLG51bGxdOworICAgIHJlc3VsdDIgPSBMTXBhcnNlU2V4cHIocmVzdWx0WzFdKTsKKyAgICBpZiAocmVzdWx0MlswXT09bnVsbCkgcmV0dXJuIFtjcmVhdGVNbWxOb2RlKCJtbyIsCisJCQkgICBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzeW1ib2wuaW5wdXQpKSxzdHIsbnVsbF07CisgICAgaWYgKHN5bWJvbC5pbnB1dD09Ilxccm9vdCIgfHwgc3ltYm9sLmlucHV0PT0iXFxzdGFja3JlbCIpCisgICAgICBuZXdGcmFnLmFwcGVuZENoaWxkKHJlc3VsdDJbMF0pOworICAgIG5ld0ZyYWcuYXBwZW5kQ2hpbGQocmVzdWx0WzBdKTsKKyAgICBpZiAoc3ltYm9sLmlucHV0PT0iXFxmcmFjIikgbmV3RnJhZy5hcHBlbmRDaGlsZChyZXN1bHQyWzBdKTsKKyAgICByZXR1cm4gW2NyZWF0ZU1tbE5vZGUoc3ltYm9sLnRhZyxuZXdGcmFnKSxyZXN1bHQyWzFdLHN5bWJvbC50YWddOworICBjYXNlIElORklYOgorICAgIHN0ciA9IExNcmVtb3ZlQ2hhcnNBbmRCbGFua3Moc3RyLHN5bWJvbC5pbnB1dC5sZW5ndGgpOworICAgIHJldHVybiBbY3JlYXRlTW1sTm9kZSgibW8iLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN5bWJvbC5vdXRwdXQpKSwKKwlzdHIsc3ltYm9sLnRhZ107CisgIGRlZmF1bHQ6CisgICAgcmV0dXJuIFtjcmVhdGVNbWxOb2RlKHN5bWJvbC50YWcsICAgICAgICAvL2l0cyBhIGNvbnN0YW50CisJZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3ltYm9sLm91dHB1dCkpLHN0cixzeW1ib2wudGFnXTsKKyAgfQorfQorCitmdW5jdGlvbiBMTXBhcnNlSWV4cHIoc3RyKSB7CisgIHZhciBzeW1ib2wsIHN5bTEsIHN5bTIsIG5vZGUsIHJlc3VsdCwgdGFnLCB1bmRlcm92ZXI7CisgIHN0ciA9IExNcmVtb3ZlQ2hhcnNBbmRCbGFua3Moc3RyLDApOworICBzeW0xID0gTE1nZXRTeW1ib2woc3RyKTsKKyAgcmVzdWx0ID0gTE1wYXJzZVNleHByKHN0cik7CisgIG5vZGUgPSByZXN1bHRbMF07CisgIHN0ciA9IHJlc3VsdFsxXTsKKyAgdGFnID0gcmVzdWx0WzJdOworICBzeW1ib2wgPSBMTWdldFN5bWJvbChzdHIpOworICBpZiAoc3ltYm9sLnR0eXBlID09IElORklYKSB7CisgICAgc3RyID0gTE1yZW1vdmVDaGFyc0FuZEJsYW5rcyhzdHIsc3ltYm9sLmlucHV0Lmxlbmd0aCk7CisgICAgcmVzdWx0ID0gTE1wYXJzZVNleHByKHN0cik7CisgICAgaWYgKHJlc3VsdFswXSA9PSBudWxsKSAvLyBzaG93IGJveCBpbiBwbGFjZSBvZiBtaXNzaW5nIGFyZ3VtZW50CisgICAgICByZXN1bHRbMF0gPSBjcmVhdGVNbWxOb2RlKCJtbyIsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlx1MjVBMSIpKTsKKyAgICBzdHIgPSByZXN1bHRbMV07CisgICAgdGFnID0gcmVzdWx0WzJdOworICAgIGlmIChzeW1ib2wuaW5wdXQgPT0gIl8iIHx8IHN5bWJvbC5pbnB1dCA9PSAiXiIpIHsKKyAgICAgIHN5bTIgPSBMTWdldFN5bWJvbChzdHIpOworICAgICAgdGFnID0gbnVsbDsJLy8gbm8gc3BhY2UgYmV0d2VlbiB4XjIgYW5kIGEgZm9sbG93aW5nIHNpbiwgY29zLCBldGMuCisvLyBUaGlzIGlzIGZvciBcdW5kZXJicmFjZSBhbmQgXG92ZXJicmFjZQorICAgICAgdW5kZXJvdmVyID0gKChzeW0xLnR0eXBlID09IFVOREVST1ZFUikgfHwgKG5vZGUudHR5cGUgPT0gVU5ERVJPVkVSKSk7CisvLyAgICB1bmRlcm92ZXIgPSAoc3ltMS50dHlwZSA9PSBVTkRFUk9WRVIpOworICAgICAgaWYgKHN5bWJvbC5pbnB1dCA9PSAiXyIgJiYgc3ltMi5pbnB1dCA9PSAiXiIpIHsKKyAgICAgICAgc3RyID0gTE1yZW1vdmVDaGFyc0FuZEJsYW5rcyhzdHIsc3ltMi5pbnB1dC5sZW5ndGgpOworICAgICAgICB2YXIgcmVzMiA9IExNcGFyc2VTZXhwcihzdHIpOworCXN0ciA9IHJlczJbMV07CisJdGFnID0gcmVzMlsyXTsgIC8vIGxlYXZlIHNwYWNlIGJldHdlZW4geF8xXjIgYW5kIGEgZm9sbG93aW5nIHNpbiBldGMuCisgICAgICAgIG5vZGUgPSBjcmVhdGVNbWxOb2RlKCh1bmRlcm92ZXI/Im11bmRlcm92ZXIiOiJtc3Vic3VwIiksbm9kZSk7CisgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQocmVzdWx0WzBdKTsKKyAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChyZXMyWzBdKTsKKyAgICAgIH0gZWxzZSBpZiAoc3ltYm9sLmlucHV0ID09ICJfIikgeworCW5vZGUgPSBjcmVhdGVNbWxOb2RlKCh1bmRlcm92ZXI/Im11bmRlciI6Im1zdWIiKSxub2RlKTsKKyAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChyZXN1bHRbMF0pOworICAgICAgfSBlbHNlIHsKKwlub2RlID0gY3JlYXRlTW1sTm9kZSgodW5kZXJvdmVyPyJtb3ZlciI6Im1zdXAiKSxub2RlKTsKKyAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChyZXN1bHRbMF0pOworICAgICAgfQorICAgICAgbm9kZSA9IGNyZWF0ZU1tbE5vZGUoIm1yb3ciLG5vZGUpOyAvLyBzbyBzdW0gZG9lcyBub3Qgc3RyZXRjaAorICAgIH0gZWxzZSB7CisgICAgICBub2RlID0gY3JlYXRlTW1sTm9kZShzeW1ib2wudGFnLG5vZGUpOworICAgICAgaWYgKHN5bWJvbC5pbnB1dCA9PSAiXFxhdG9wIiB8fCBzeW1ib2wuaW5wdXQgPT0gIlxcY2hvb3NlIikKKwlub2RlLnNldEF0dHJpYnV0ZSgibGluZXRoaWNrbmVzcyIsIjBleCIpOworICAgICAgbm9kZS5hcHBlbmRDaGlsZChyZXN1bHRbMF0pOworICAgICAgaWYgKHN5bWJvbC5pbnB1dCA9PSAiXFxjaG9vc2UiKQorCW5vZGUgPSBjcmVhdGVNbWxOb2RlKCJtZmVuY2VkIixub2RlKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIFtub2RlLHN0cix0YWddOworfQorCitmdW5jdGlvbiBMTXBhcnNlRXhwcihzdHIscmlnaHRicmFja2V0LG1hdHJpeCkgeworICB2YXIgc3ltYm9sLCBub2RlLCByZXN1bHQsIGksIHRhZywKKyAgbmV3RnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgZG8geworICAgIHN0ciA9IExNcmVtb3ZlQ2hhcnNBbmRCbGFua3Moc3RyLDApOworICAgIHJlc3VsdCA9IExNcGFyc2VJZXhwcihzdHIpOworICAgIG5vZGUgPSByZXN1bHRbMF07CisgICAgc3RyID0gcmVzdWx0WzFdOworICAgIHRhZyA9IHJlc3VsdFsyXTsKKyAgICBzeW1ib2wgPSBMTWdldFN5bWJvbChzdHIpOworICAgIGlmIChub2RlIT11bmRlZmluZWQpIHsKKyAgICAgIGlmICgodGFnID09ICJtbiIgfHwgdGFnID09ICJtaSIpICYmIHN5bWJvbCE9bnVsbCAmJgorCXR5cGVvZiBzeW1ib2wuZnVuYyA9PSAiYm9vbGVhbiIgJiYgc3ltYm9sLmZ1bmMpIHsKKwkJCS8vIEFkZCBzcGFjZSBiZWZvcmUgXHNpbiBpbiAyXHNpbiB4IG9yIHhcc2luIHgKKwkgIHZhciBzcGFjZSA9IGNyZWF0ZU1tbE5vZGUoIm1zcGFjZSIpOworCSAgc3BhY2Uuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjAuMTY3ZW0iKTsKKwkgIG5vZGUgPSBjcmVhdGVNbWxOb2RlKCJtcm93Iixub2RlKTsKKwkgIG5vZGUuYXBwZW5kQ2hpbGQoc3BhY2UpOworICAgICAgfQorICAgICAgbmV3RnJhZy5hcHBlbmRDaGlsZChub2RlKTsKKyAgICB9CisgIH0gd2hpbGUgKChzeW1ib2wudHR5cGUgIT0gUklHSFRCUkFDS0VUKQorICAgICAgICAmJiBzeW1ib2whPW51bGwgJiYgc3ltYm9sLm91dHB1dCE9IiIpOworICB0YWcgPSBudWxsOworICBpZiAoc3ltYm9sLnR0eXBlID09IFJJR0hUQlJBQ0tFVCkgeworICAgIGlmIChzeW1ib2wuaW5wdXQgPT0gIlxccmlnaHQiKSB7IC8vIHJpZ2h0IHdoYXQ/CisgICAgICBzdHIgPSBMTXJlbW92ZUNoYXJzQW5kQmxhbmtzKHN0cixzeW1ib2wuaW5wdXQubGVuZ3RoKTsKKyAgICAgIHN5bWJvbCA9IExNZ2V0U3ltYm9sKHN0cik7CisgICAgICBpZiAoc3ltYm9sICE9IG51bGwgJiYgc3ltYm9sLmlucHV0ID09ICIuIikKKwlzeW1ib2wuaW52aXNpYmxlID0gdHJ1ZTsKKyAgICAgIGlmIChzeW1ib2wgIT0gbnVsbCkKKwl0YWcgPSBzeW1ib2wucnRhZzsKKyAgICB9CisgICAgaWYgKHN5bWJvbCE9bnVsbCkKKyAgICAgIHN0ciA9IExNcmVtb3ZlQ2hhcnNBbmRCbGFua3Moc3RyLHN5bWJvbC5pbnB1dC5sZW5ndGgpOyAvLyByZWFkeSB0byByZXR1cm4KKyAgICB2YXIgbGVuID0gbmV3RnJhZy5jaGlsZE5vZGVzLmxlbmd0aDsKKyAgICBpZiAobWF0cml4ICYmCisgICAgICBsZW4+MCAmJiBuZXdGcmFnLmNoaWxkTm9kZXNbbGVuLTFdLm5vZGVOYW1lID09ICJtcm93IiAmJiBsZW4+MSAmJgorICAgICAgbmV3RnJhZy5jaGlsZE5vZGVzW2xlbi0yXS5ub2RlTmFtZSA9PSAibW8iICYmCisgICAgICBuZXdGcmFnLmNoaWxkTm9kZXNbbGVuLTJdLmZpcnN0Q2hpbGQubm9kZVZhbHVlID09ICImIikgeyAvL21hdHJpeAorCXZhciBwb3MgPSBbXTsgLy8gcG9zaXRpb25zIG9mIGFtcGVyc2FuZHMKKyAgICAgICAgdmFyIG0gPSBuZXdGcmFnLmNoaWxkTm9kZXMubGVuZ3RoOworICAgICAgICBmb3IgKGk9MDsgbWF0cml4ICYmIGk8bTsgaT1pKzIpIHsKKyAgICAgICAgICBwb3NbaV0gPSBbXTsKKyAgICAgICAgICBub2RlID0gbmV3RnJhZy5jaGlsZE5vZGVzW2ldOworCSAgZm9yICh2YXIgaj0wOyBqPG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGorKykKKwkgICAgaWYgKG5vZGUuY2hpbGROb2Rlc1tqXS5maXJzdENoaWxkLm5vZGVWYWx1ZT09IiYiKQorCSAgICAgIHBvc1tpXVtwb3NbaV0ubGVuZ3RoXT1qOworICAgICAgICB9CisJdmFyIHJvdywgZnJhZywgbiwgaywgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisJZm9yIChpPTA7IGk8bTsgaT1pKzIpIHsKKwkgIHJvdyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKwkgIGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisJICBub2RlID0gbmV3RnJhZy5maXJzdENoaWxkOyAvLyA8bXJvdz4gLSYtJi4uLiYtJi0gPC9tcm93PgorCSAgbiA9IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7CisJICBrID0gMDsKKwkgIGZvciAoaj0wOyBqPG47IGorKykgeworCSAgICBpZiAodHlwZW9mIHBvc1tpXVtrXSAhPSAidW5kZWZpbmVkIiAmJiBqPT1wb3NbaV1ba10peworCSAgICAgIG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5maXJzdENoaWxkKTsgLy9yZW1vdmUgJgorCSAgICAgIHJvdy5hcHBlbmRDaGlsZChjcmVhdGVNbWxOb2RlKCJtdGQiLGZyYWcpKTsKKwkgICAgICBrKys7CisJICAgIH0gZWxzZSBmcmFnLmFwcGVuZENoaWxkKG5vZGUuZmlyc3RDaGlsZCk7CisJICB9CisJICByb3cuYXBwZW5kQ2hpbGQoY3JlYXRlTW1sTm9kZSgibXRkIixmcmFnKSk7CisJICBpZiAobmV3RnJhZy5jaGlsZE5vZGVzLmxlbmd0aD4yKSB7CisJICAgIG5ld0ZyYWcucmVtb3ZlQ2hpbGQobmV3RnJhZy5maXJzdENoaWxkKTsgLy9yZW1vdmUgPG1yb3c+IDwvbXJvdz4KKwkgICAgbmV3RnJhZy5yZW1vdmVDaGlsZChuZXdGcmFnLmZpcnN0Q2hpbGQpOyAvL3JlbW92ZSA8bW8+JjwvbW8+CisJICB9CisJICB0YWJsZS5hcHBlbmRDaGlsZChjcmVhdGVNbWxOb2RlKCJtdHIiLHJvdykpOworCX0KKwlyZXR1cm4gW3RhYmxlLHN0cl07CisgICAgfQorICAgIGlmICh0eXBlb2Ygc3ltYm9sLmludmlzaWJsZSAhPSAiYm9vbGVhbiIgfHwgIXN5bWJvbC5pbnZpc2libGUpIHsKKyAgICAgIG5vZGUgPSBjcmVhdGVNbWxOb2RlKCJtbyIsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3ltYm9sLm91dHB1dCkpOworICAgICAgbmV3RnJhZy5hcHBlbmRDaGlsZChub2RlKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIFtuZXdGcmFnLHN0cix0YWddOworfQorCit2YXIgdGNudCA9IDAsIGRjbnQgPSAwOyAvL3RoZW9yZW0gYW5kIGRlZmluaXRpb24gY291bnRlcnMKKworZnVuY3Rpb24gc2ltcGxlTGFUZVhmb3JtYXR0aW5nKHN0KSB7CisgIHN0ID0gc3QucmVwbGFjZSgvXCRcJCgoLnxcbikqPylcJFwkL2csIjxwIGFsaWduPVwiY2VudGVyXCI+JFxcZGlzcGxheXN0eWxleyQxfSQ8L3A+Iik7CisgIHN0ID0gc3QucmVwbGFjZSgvXFxiZWdpbnsodGhlb3JlbXxsZW1tYXxwcm9wb3NpdGlvbnxjb3JvbGxhcnkpfSgoLnxcbikqPylcXGVuZHtcMX0vZyxmdW5jdGlvbihyLHMsdCl7dGNudCsrOyByZXR1cm4gIjxiPiIrcy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStzLnNsaWNlKDEpKyIgIit0Y250KyIuPC9iPiA8aT4iK3QucmVwbGFjZSgvXlxzKjxcLz9cdytcLz8+fFxzKjxcLz9cdytcLz8+JC9nLCIiKSsiPC9pPiJ9KTsKKyAgc3QgPSBzdC5yZXBsYWNlKC9cXGJlZ2lueyhkZWZpbml0aW9ufGV4YW1wbGV8cmVtYXJrfHByb2JsZW18ZXhlcmNpc2V8Y29uamVjdHVyZXxzb2x1dGlvbil9KCgufFxuKSo/KVxcZW5ke1wxfS9nLGZ1bmN0aW9uKHIscyx0KXtkY250Kys7IHJldHVybiAiPGI+IitzLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Muc2xpY2UoMSkrIiAiK2RjbnQrIi48L2I+ICIrdC5yZXBsYWNlKC9eXHMqPFwvP1x3K1wvPz58XHMqPFwvP1x3K1wvPz4kL2csIiIpfSk7CisgIHN0ID0gc3QucmVwbGFjZSgvXFxiZWdpbntwcm9vZn0oKC58XG4pKj8pXFxlbmR7cHJvb2Z9L2csZnVuY3Rpb24ocyx0KXtyZXR1cm4gIjxpPlByb29mOjwvaT4gIit0LnJlcGxhY2UoL15ccyo8XC8/XHcrXC8/Pnxccyo8XC8/XHcrXC8/PiQvZywiIikrIiAmI3gyNUExOyJ9KTsKKyAgc3QgPSBzdC5yZXBsYWNlKC9cXGVtcGh7KC4qPyl9L2csIjxlbT4kMTwvZW0+Iik7CisgIHN0ID0gc3QucmVwbGFjZSgvXFx0ZXh0YmZ7KC4qPyl9L2csIjxiPiQxPC9iPiIpOworICBzdCA9IHN0LnJlcGxhY2UoL1xcY2l0ZXsoLio/KX0vZywiWyQxXSIpOworICBzdCA9IHN0LnJlcGxhY2UoL1xcY2hhcHRlcnsoLio/KX0vZywiPGgyPiQxPC9oMj4iKTsKKyAgc3QgPSBzdC5yZXBsYWNlKC9cXHNlY3Rpb257KC4qPyl9KFxzKjxcLz8oYnJ8cClccz9cLz8+KT8vZywiPGgzPiQxPC9oMz4iKTsKKyAgc3QgPSBzdC5yZXBsYWNlKC9cXHN1YnNlY3Rpb257KCgufFxuKSo/KX0vZywiPGg0PiQxPC9oND4iKTsKKyAgc3QgPSBzdC5yZXBsYWNlKC9cXGJlZ2lue2l0ZW1pemV9KFxzKjxcLz8oYnJ8cClccz9cLz8+KT8vZywiPHVsPiIpOworICBzdCA9IHN0LnJlcGxhY2UoL1xcaXRlbVxzKCgufFxuKSo/KSg/PShcXGl0ZW18XFxlbmQpKS9nLCI8bGk+JDE8L2xpPiIpOworICBzdCA9IHN0LnJlcGxhY2UoL1xcZW5ke2l0ZW1pemV9KFxzKjxcLz8oYnJ8cClccz9cLz8+KT8vZywiPC91bD4iKTsKKyAgc3QgPSBzdC5yZXBsYWNlKC9cXGJlZ2lue2VudW1lcmF0ZX0oXHMqPFwvPyhicnxwKVxzP1wvPz4pPy9nLCI8b2w+Iik7CisgIHN0ID0gc3QucmVwbGFjZSgvXFxlbmR7ZW51bWVyYXRlfShccyo8XC8/KGJyfHApXHM/XC8/Pik/L2csIjwvb2w+Iik7CisgIHN0ID0gc3QucmVwbGFjZSgvXFxpdGVtXFsoLio/KV17KC4qPyl9L2csIjxkdD4kMTwvZHQ+PGRkPiQyPC9kZD4iKTsKKyAgc3QgPSBzdC5yZXBsYWNlKC9cXGJlZ2lue2Rlc2NyaXB0aW9ufS9nLCI8ZGw+Iik7CisgIHN0ID0gc3QucmVwbGFjZSgvXFxlbmR7ZGVzY3JpcHRpb259L2csIjwvZGw+Iik7CisgIHN0ID0gc3QucmVwbGFjZSgvXFxuZXdsaW5lXGIvZywiPGJyLz4iKTsKKyAgc3QgPSBzdC5yZXBsYWNlKC9cXG5ld3BhZ2VcYi9nLCI8YnIgc3R5bGU9XCJwYWdlLWJyZWFrLWFmdGVyOmFsd2F5cztcIj4iKTsKKyAgc3QgPSBzdC5yZXBsYWNlKC9cXHBhclxiL2csIjxwPiZuYnNwOzwvcD4iKTsKKyAgc3QgPSBzdC5yZXBsYWNlKC9cXGJpZ3NraXAvZywiPHAgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjAuNWluXCI+Jm5ic3A7PC9wPiIpOworICBzdCA9IHN0LnJlcGxhY2UoL1xcbWVkc2tpcC9nLCI8cCBzdHlsZT1cIm1hcmdpbi1ib3R0b206MC4zaW5cIj4mbmJzcDs8L3A+Iik7CisgIHN0ID0gc3QucmVwbGFjZSgvXFxzbWFsbHNraXAvZywiPHAgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjAuMTVpblwiPiZuYnNwOzwvcD4iKTsKKyAgc3QgPSBzdC5yZXBsYWNlKC9cXGJlZ2lue2NlbnRlcn0oKC58XG4pKj8pXFxlbmR7Y2VudGVyfS9nLCI8Y2VudGVyPiQxPC9jZW50ZXI+Iik7CisgIHJldHVybiBzdAorfQorCitmdW5jdGlvbiBBU0NJSWFuZGdyYXBoZm9ybWF0dGluZyhzdCkgeworICBzdCA9IHN0LnJlcGxhY2UoLzxzdXA+KC4qPyk8XC9zdXA+KFxzfChcUykpL2dpLCJeeyQxfSAkMyIpOworLy9zdCA9IHN0LnJlcGxhY2UoLzxcLz9mb250Lio/Pi9naSwiIik7IC8vIGRvIHRoaXMgb25seSBpbiBhbWF0aC4uLmVuZGFtYXRoCisgIHN0ID0gc3QucmVwbGFjZSgvKFByb29mOikvZywiPGk+JDE8L2k+Iik7CisgIHN0ID0gc3QucmVwbGFjZSgvUUVEL2csIiZuYnNwOyAmbmJzcDsgJiN4MjVBMTsiKTsKKyAgc3QgPSBzdC5yZXBsYWNlKC8oXFw/ZW5kez9hP21hdGh9PykvaWcsIjxzcGFuPjwvc3Bhbj4kMSIpOworICBzdCA9IHN0LnJlcGxhY2UoLyhcYmFtYXRoXGJ8XFxiZWdpbnthP21hdGh9KS9pZywiPHNwYW4+PC9zcGFuPiQxIik7CisgIHN0ID0gc3QucmVwbGFjZSgvKFs+XG5dKShUaGVvcmVtfExlbW1hfFByb3Bvc2l0aW9ufENvcm9sbGFyeXxEZWZpbml0aW9ufEV4YW1wbGV8UmVtYXJrfFByb2JsZW18RXhlcmNpc2V8Q29uamVjdHVyZXxTb2x1dGlvbikoOnxcV1xXPyhcd3xcc3wtfFwuKSo/XFc/OikvZywiJDE8Yj4kMiQzPC9iPiIpOworICBzdCA9IHN0LnJlcGxhY2UoLzxlbWJlZFxzK2NsYXNzXHM/PVxzPyI/QVNDSUlzdmciPy9naSwiPGVtYmVkIGNsYXNzPVwiQVNDSUlzdmdcIiBzcmM9XCIiK2Rzdmdsb2NhdGlvbisiZC5zdmdcIiB3bW9kZT1cInRyYW5zcGFyZW50XCIiKTsKKyAgc3QgPSBzdC5yZXBsYWNlKC8oPzpcXGJlZ2lue2E/Z3JhcGh9fFxiYWdyYXBofFwoOmdyYXBoXHMpKCgufFxuKSo/KSg/OlxcZW5ke2E/Z3JhcGh9fGVuZGE/Z3JhcGh8OlwpKS9nLGZ1bmN0aW9uKHMsdCl7cmV0dXJuICI8dGFibGU+PHRyPjx0ZD48ZGl2IGNsYXNzPVwiQVNDSUlzdmdcIj48ZW1iZWQgY2xhc3M9XCJBU0NJSXN2Z1wiIHNyYz1cIiIrZHN2Z2xvY2F0aW9uKyJkLnN2Z1wiIHdtb2RlPVwidHJhbnNwYXJlbnRcIiBzY3JpcHQ9XCciK3QucmVwbGFjZSgvPFwvPyhicnxwfHByZSlccz9cLz8+L2dpLCJcbiIpKyJcJy8+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+In0pOworICBzdCA9IHN0LnJlcGxhY2UoL2luc2VydEFTQ0lJTWF0aENhbGN1bGF0b3IvZywiPGRpdiBjbGFzcz1cIkFTQ0lJTWF0aENhbGN1bGF0b3JcIj48L2Rpdj4iKTsKKy8vYWxlcnQoZHN2Z2xvY2F0aW9uKQorICByZXR1cm4gc3QKK30KKworZnVuY3Rpb24gTE1wcm9jZXNzTm9kZShuKSB7CisgIHZhciBmcmFnLHN0OworICB0cnkgeworICAgIHN0ID0gbi5pbm5lckhUTUw7CisgIH0gY2F0Y2goZXJyKSB7fQorICB2YXIgYW0gPSAvYW1hdGhcYnxcYmFncmFwaC9pLnRlc3Qoc3QpOworICBpZiAoKHN0PT1udWxsIHx8IHN0LmluZGV4T2YoIlwkICIpIT0tMSB8fCBzdC5pbmRleE9mKCJcJDwiKSE9LTEgfHwgCisgICAgICAgc3QuaW5kZXhPZigiXFxiZWdpbiIpIT0tMSB8fCBhbSB8fCBzdC5zbGljZSgtMSk9PSIkIiB8fAorICAgICAgIHN0LmluZGV4T2YoIlwkXG4iKSE9LTEpJiYgIS9lZGl0LWNvbnRlbnR8SFRNTEFyZWF8d2lraWVkaXR8d3BUZXh0Ym94MS8udGVzdChzdCkpeworICAgIGlmICghYXZvaWRpbm5lckhUTUwgJiYgdHJhbnNsYXRlTGFUZVhmb3JtYXR0aW5nKSAKKyAgICAgIHN0ID0gc2ltcGxlTGFUZVhmb3JtYXR0aW5nKHN0KTsKKyAgICBpZiAoc3QhPW51bGwgJiYgYW0gJiYgIWF2b2lkaW5uZXJIVE1MKSB7CisgICAgICBzdCA9IEFTQ0lJYW5kZ3JhcGhmb3JtYXR0aW5nKHN0KTsKKyAgICB9CisgICAgc3QgPSBzdC5yZXBsYWNlKC8lN0UvZywifiIpOyAvLyBlbHNlIFBtV2lraSBoYXMgdXJsIGlzc3VlcworLy9hbGVydChzdCkKKyAgICBpZiAoIWF2b2lkaW5uZXJIVE1MKSBuLmlubmVySFRNTCA9IHN0OworICAgIHByb2Nlc3NOb2RlUihuLGZhbHNlLHRydWUpOworICB9CisvKiAgaWYgKGlzSUUpIHsgLy9uZWVkZWQgdG8gbWF0Y2ggc2l6ZSBhbmQgZm9udCBvZiBmb3JtdWxhIHRvIHN1cnJvdW5kaW5nIHRleHQKKyAgICBmcmFnID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21hdGgnKTsKKyAgICBmb3IgKHZhciBpPTA7aTxmcmFnLmxlbmd0aDtpKyspIGZyYWdbaV0udXBkYXRlKCkgLy9pcyB0aGlzIHJlYWxseSBuZWVkZWQ/CisgIH0qLworfQorCisvKiBBU0NJSXN2Zy5qcworPT09PT09PT09PT09PT0KK0phdmFTY3JpcHQgcm91dGluZXMgdG8gZHluYW1pY2FsbHkgZ2VuZXJhdGUgU2NhbGFibGUgVmVjdG9yIEdyYXBoaWNzCit1c2luZyBhIG1hdGhlbWF0aWNhbCB4eS1jb29yZGluYXRlIHN5c3RlbSAoeSBpbmNyZWFzZXMgdXB3YXJkcykgYW5kCit2ZXJ5IGludHVpdGl2ZSBKYXZhU2NyaXB0IGNvbW1hbmRzIChubyBwcm9ncmFtbWluZyBleHBlcmllbmNlIHJlcXVpcmVkKS4KK0FTQ0lJc3ZnLmpzIGlzIGdvb2QgZm9yIGxlYXJuaW5nIG1hdGggYW5kIGlsbHVzdHJhdGluZyBvbmxpbmUgbWF0aCB0ZXh0cy4KK1dvcmtzIHdpdGggSW50ZXJuZXQgRXhwbG9yZXIrQWRvYmUgU1ZHdmlld2VyIGFuZCBTVkcgZW5hYmxlZCBNb3ppbGxhL0ZpcmVmb3guCisKK1ZlciAxLjIuOSBKdWx5IDMxLCAyMDA3IChjKSBQZXRlciBKaXBzZW4gaHR0cDovL3d3dy5jaGFwbWFuLmVkdS9+amlwc2VuCitMYXRlc3QgdmVyc2lvbiBhdCBodHRwOi8vbWF0aC5jaGFwbWFuLmVkdS9+amlwc2VuL21hdGgvcHViL0FTQ0lJc3ZnLmpzCitJZiB5b3UgdXNlIGl0IG9uIGEgd2VicGFnZSwgcGxlYXNlIHNlbmQgdGhlIFVSTCB0byBqaXBzZW5AY2hhcG1hbi5lZHUKKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKK3lvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlcgorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2UvbGdwbC5odG1sKSAKK2ZvciBtb3JlIGRldGFpbHMuKi8KKworLy8geW91IGNhbiBjaGFuZ2UgdGhlc2UKK3ZhciBjaGVja0lmU1ZHYXZhaWxhYmxlID0gdHJ1ZTsKK3ZhciBub3RpZnlJZk5vU1ZHID0gdHJ1ZTsKK3ZhciBhbGVydElmTm9TVkcgPSBmYWxzZTsKK3ZhciBub1NWRyA9IGZhbHNlOworCisvLyBnbG9iYWwgZGVmYXVsdHMgdXNlZCBpZiBub3Qgc3BlY2lmaWVkIGJ5IGdyYXBoICh5b3UgY2FuIGNoYW5nZSB0aGVzZSkKK3ZhciBkZWZhdWx0d2lkdGggPSAzMDA7IGRlZmF1bHRoZWlnaHQgPSAyMDA7ICAgLy8gaW4gcGl4ZWxzCit2YXIgZGVmYXVsdHhtaW4gPSAtNS41OyBkZWZhdWx0eG1heCA9IDUuNTsgICAgIC8vIGluIHVzZXJjb29yZHMKK3ZhciBkZWZhdWx0Ym9yZGVyID0gMDsgYm9yZGVyID0gZGVmYXVsdGJvcmRlcjsgLy8gaW4gcGl4ZWwKK3ZhciBkZWZhdWx0c3Ryb2tld2lkdGggPSAiMSI7IC8vIGRlZmF1bHQgbGluZSB3aWR0aCBpbiBwaXhlbAordmFyIGRlZmF1bHRzdHJva2UgPSAiYmx1ZSI7ICAgLy8gZGVmYXVsdCBsaW5lIGNvbG9yCit2YXIgZGVmYXVsdHN0cm9rZW9wYWNpdHkgPSAxOyAvLyB0cmFuc3BhcmVudCA9IDAsIHNvbGlkID0xCit2YXIgZGVmYXVsdHN0cm9rZWRhc2hhcnJheSA9IG51bGw7IC8vICIxMCwxMCIgZ2l2ZXMgMTBweCBsb25nIGRhc2hlcwordmFyIGRlZmF1bHRmaWxsID0gIm5vbmUiOyAgICAgICAgLy8gZGVmYXVsdCBmaWxsIGNvbG9yCit2YXIgZGVmYXVsdGZpbGxvcGFjaXR5ID0gMTsgICAgICAvLyB0cmFuc3BhcmVudCA9IDAsIHNvbGlkID0xCit2YXIgZGVmYXVsdGZvbnRzdHlsZSA9ICJub3JtYWwiOyAvLyBkZWZhdWx0IHRleHQgc2hhcGUgbm9ybWFsfGl0YWxpY3xpbmhlcml0Cit2YXIgZGVmYXVsdGZvbnRmYW1pbHkgPSAidGltZXMiOyAvLyBkZWZhdWx0IGZvbnQgdGltZXN8YXJpZWx8aGVsdmV0aWNhfC4uLgordmFyIGRlZmF1bHRmb250c2l6ZSA9ICIxNiI7ICAgICAgLy8gZGVmYXVsdCBzaXplIChzY2FsZWQgYXV0b21hdGljYWxseSkKK3ZhciBkZWZhdWx0Zm9udHdlaWdodCA9ICJub3JtYWwiOy8vIG5vcm1hbHxib2xkfGJvbGRlcnxsaWdodGVyfDEwMHwuLi58OTAwCit2YXIgZGVmYXVsdGZvbnRzdHJva2UgPSAibm9uZSI7ICAvLyBkZWZhdWx0IGZvbnQgb3V0bGluZSBjb2xvcgordmFyIGRlZmF1bHRmb250ZmlsbCA9ICJub25lIjsgICAgLy8gZGVmYXVsdCBmb250IGNvbG9yCit2YXIgZGVmYXVsdG1hcmtlciA9ICJub25lIjsgICAgICAvLyAiZG90IiB8ICJhcnJvdyIgfCAiKyIgfCAiLSIgfCAifCIKK3ZhciBkZWZhdWx0ZW5kcG9pbnRzID0gIiI7ICAgICAgIC8vICJjLWQiIHdoZXJlIGMgaXMgPHxvfCogYW5kIGQgaXMgPnxvfCoKKworLy8gZ2xvYmFsIHZhbHVlcyB1c2VkIGZvciBhbGwgcGljdHVyZXMgKHlvdSBjYW4gY2hhbmdlIHRoZXNlKQordmFyIHNob3djb29yZGluYXRlcyA9IHRydWU7Cit2YXIgbWFya2Vyc3Ryb2tld2lkdGggPSAiMSI7Cit2YXIgbWFya2Vyc3Ryb2tlID0gImJsYWNrIjsKK3ZhciBtYXJrZXJmaWxsID0gInllbGxvdyI7Cit2YXIgbWFya2Vyc2l6ZSA9IDQ7Cit2YXIgYXJyb3dmaWxsID0gc3Ryb2tlOwordmFyIGRvdHJhZGl1cyA9IDQ7Cit2YXIgdGlja2xlbmd0aCA9IDQ7Cit2YXIgYXhlc3N0cm9rZSA9ICJibGFjayI7Cit2YXIgZ3JpZHN0cm9rZSA9ICJncmV5IjsKK3ZhciBiYWNrZ3JvdW5kc3R5bGUgPSAiZmlsbC1vcGFjaXR5OjE7IGZpbGw6d2hpdGUiOwordmFyIHNpbmdsZWxldHRlcnNpdGFsaWMgPSB0cnVlOworCisvLyBpbnRlcm5hbCB2YXJpYWJsZXMgKHByb2JhYmx5IG5vIG5lZWQgdG8gY2hhbmdlIHRoZXNlKQordmFyIHBpY3R1cmVwb3MgPSBudWxsOyAvLyBwb3NpdGlvbiBvZiBwaWN0dXJlIHJlbGF0aXZlIHRvIHRvcCBvZiBIVE1MIHBhZ2UKK3ZhciB4dW5pdGxlbmd0aDsgICAgICAgLy8gaW4gcGl4ZWxzLCB1c2VkIHRvIGNvbnZlcnQgdG8gdXNlciBjb29yZGluYXRlcwordmFyIHl1bml0bGVuZ3RoOyAgICAgICAvLyBpbiBwaXhlbHMKK3ZhciBvcmlnaW4gPSBbMCwwXTsgICAgLy8gaW4gcGl4ZWxzIChkZWZhdWx0IGlzIGJvdHRvbSBsZWZ0IGNvcm5lcikKK3ZhciBhYm92ZSA9ICJhYm92ZSI7ICAgLy8gc2hvcnRoYW5kcyAodG8gYXZvaWQgdHlwaW5nIHF1b3RlcykKK3ZhciBiZWxvdyA9ICJiZWxvdyI7Cit2YXIgbGVmdCA9ICJsZWZ0IjsKK3ZhciByaWdodCA9ICJyaWdodCI7Cit2YXIgYWJvdmVsZWZ0ID0gImFib3ZlbGVmdCI7Cit2YXIgYWJvdmVyaWdodCA9ICJhYm92ZXJpZ2h0IjsKK3ZhciBiZWxvd2xlZnQgPSAiYmVsb3dsZWZ0IjsKK3ZhciBiZWxvd3JpZ2h0ID0gImJlbG93cmlnaHQiOwordmFyIHhtaW4sIHhtYXgsIHltaW4sIHltYXgsIHhzY2wsIHlzY2wsIAorICAgIHhncmlkLCB5Z3JpZCwgeHRpY2ssIHl0aWNrLCBpbml0aWFsaXplZDsKK3ZhciBzdHJva2V3aWR0aCwgc3Ryb2tlZGFzaGFycmF5LCBzdHJva2UsIGZpbGwsIHN0cm9rZW9wYWNpdHksIGZpbGxvcGFjaXR5OwordmFyIGZvbnRzdHlsZSwgZm9udGZhbWlseSwgZm9udHNpemUsIGZvbnR3ZWlnaHQsIGZvbnRzdHJva2UsIGZvbnRmaWxsOwordmFyIG1hcmtlciwgZW5kcG9pbnRzLCBkeW5hbWljID0ge307Cit2YXIgcGljdHVyZSwgc3ZncGljdHVyZSwgZG9jLCB3aWR0aCwgaGVpZ2h0OwordmFyIGlzSUUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlM9PW51bGw7CisKK3ZhciBjcGkgPSAiXHUwM0MwIiwgY3RoZXRhID0gIlx1MDNCOCI7ICAgICAgLy8gY2hhcmFjdGVyIGZvciBwaSwgdGhldGEKK3ZhciBsb2cgPSBmdW5jdGlvbih4KSB7IHJldHVybiBsbih4KS9sbigxMCkgfTsKK3ZhciBwaSA9IE1hdGguUEksIGUgPSBNYXRoLkUsIGxuID0gTWF0aC5sb2csIHNxcnQgPSBNYXRoLnNxcnQ7Cit2YXIgZmxvb3IgPSBNYXRoLmZsb29yLCBjZWlsID0gTWF0aC5jZWlsLCBhYnMgPSBNYXRoLmFiczsKK3ZhciBzaW4gPSBNYXRoLnNpbiwgY29zID0gTWF0aC5jb3MsIHRhbiA9IE1hdGgudGFuOwordmFyIGFyY3NpbiA9IE1hdGguYXNpbiwgYXJjY29zID0gTWF0aC5hY29zLCBhcmN0YW4gPSBNYXRoLmF0YW47Cit2YXIgc2VjID0gZnVuY3Rpb24oeCkgeyByZXR1cm4gMS9NYXRoLmNvcyh4KSB9OwordmFyIGNzYyA9IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIDEvTWF0aC5zaW4oeCkgfTsKK3ZhciBjb3QgPSBmdW5jdGlvbih4KSB7IHJldHVybiAxL01hdGgudGFuKHgpIH07Cit2YXIgYXJjc2VjID0gZnVuY3Rpb24oeCkgeyByZXR1cm4gYXJjY29zKDEveCkgfTsKK3ZhciBhcmNjc2MgPSBmdW5jdGlvbih4KSB7IHJldHVybiBhcmNzaW4oMS94KSB9OwordmFyIGFyY2NvdCA9IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIGFyY3RhbigxL3gpIH07Cit2YXIgc2luaCA9IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIChNYXRoLmV4cCh4KS1NYXRoLmV4cCgteCkpLzIgfTsKK3ZhciBjb3NoID0gZnVuY3Rpb24oeCkgeyByZXR1cm4gKE1hdGguZXhwKHgpK01hdGguZXhwKC14KSkvMiB9OwordmFyIHRhbmggPSAKKyAgZnVuY3Rpb24oeCkgeyByZXR1cm4gKE1hdGguZXhwKHgpLU1hdGguZXhwKC14KSkvKE1hdGguZXhwKHgpK01hdGguZXhwKC14KSkgfTsKK3ZhciBzZWNoID0gZnVuY3Rpb24oeCkgeyByZXR1cm4gMS9jb3NoKHgpIH07Cit2YXIgY3NjaCA9IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIDEvc2luaCh4KSB9OwordmFyIGNvdGggPSBmdW5jdGlvbih4KSB7IHJldHVybiAxL3RhbmgoeCkgfTsKK3ZhciBhcmNzaW5oID0gZnVuY3Rpb24oeCkgeyByZXR1cm4gbG4oeCtNYXRoLnNxcnQoeCp4KzEpKSB9OwordmFyIGFyY2Nvc2ggPSBmdW5jdGlvbih4KSB7IHJldHVybiBsbih4K01hdGguc3FydCh4KngtMSkpIH07Cit2YXIgYXJjdGFuaCA9IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIGxuKCgxK3gpLygxLXgpKS8yIH07Cit2YXIgc2VjaCA9IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIDEvY29zaCh4KSB9OwordmFyIGNzY2ggPSBmdW5jdGlvbih4KSB7IHJldHVybiAxL3NpbmgoeCkgfTsKK3ZhciBjb3RoID0gZnVuY3Rpb24oeCkgeyByZXR1cm4gMS90YW5oKHgpIH07Cit2YXIgYXJjc2VjaCA9IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIGFyY2Nvc2goMS94KSB9OwordmFyIGFyY2NzY2ggPSBmdW5jdGlvbih4KSB7IHJldHVybiBhcmNzaW5oKDEveCkgfTsKK3ZhciBhcmNjb3RoID0gZnVuY3Rpb24oeCkgeyByZXR1cm4gYXJjdGFuaCgxL3gpIH07Cit2YXIgc2lnbiA9IGZ1bmN0aW9uKHgpIHsgcmV0dXJuICh4PT0wPzA6KHg8MD8tMToxKSkgfTsKKworZnVuY3Rpb24gZmFjdG9yaWFsKHgsbikgeyAvLyBGYWN0b3JpYWwgZnVuY3Rpb24KKyAgaWYgKG49PW51bGwpIG49MTsKKyAgaWYgKE1hdGguYWJzKHgtTWF0aC5yb3VuZCh4KjEwMDAwMDApLzEwMDAwMDApPDFlLTE1KQorICAgIHggPSBNYXRoLnJvdW5kKHgqMTAwMDAwMCkvMTAwMDAwMDsKKyAgaWYgKHgtTWF0aC5mbG9vcih4KSE9MCkgcmV0dXJuIE5hTjsKKyAgZm9yICh2YXIgaT14LW47IGk+MDsgaS09bikgeCo9aTsKKyAgcmV0dXJuICh4PDA/TmFOOih4PT0wPzE6eCkpOworfQorCitmdW5jdGlvbiBDKHgsaykgeyAgLy8gQmlub21pYWwgY29lZmZpY2llbnQgZnVuY3Rpb24KKyAgdmFyIHJlcz0xOworICBmb3IgKHZhciBpPTA7IGk8azsgaSsrKSByZXMqPSh4LWkpLyhrLWkpOworICByZXR1cm4gcmVzOworfQorCitmdW5jdGlvbiBjaG9wKHgsbikgeyAvLyBUcnVuY2F0ZSBkZWNpbWFsIG51bWJlciB0byBuIHBsYWNlcyBhZnRlciBkZWNpbWFsIHBvaW50CisgIGlmIChuPT1udWxsKSBuPTA7CisgIHJldHVybiBNYXRoLmZsb29yKHgqTWF0aC5wb3coMTAsbikpL01hdGgucG93KDEwLG4pOworfQorCitmdW5jdGlvbiByYW4oYSxiLG4pIHsgLy8gR2VuZXJhdGUgcmFuZG9tIG51bWJlciBpbiBbYSxiXSB3aXRoIG4gZGlnaXRzIGFmdGVyIC4KKyAgaWYgKG49PW51bGwpIG49MDsKKyAgcmV0dXJuIGNob3AoKGIrTWF0aC5wb3coMTAsLW4pLWEpKk1hdGgucmFuZG9tKCkrYSxuKTsKK30KKworZnVuY3Rpb24gbXlDcmVhdGVFbGVtZW50U1ZHKHQpIHsKKyAgaWYgKGlzSUUpIHJldHVybiBkb2MuY3JlYXRlRWxlbWVudCh0KTsKKyAgZWxzZSByZXR1cm4gZG9jLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHQpOworfQorCitmdW5jdGlvbiBnZXRFbGVtZW50c0J5Q2xhc3MoY29udGFpbmVyLCB0YWdOYW1lLCBjbHNOYW1lKXsKKyAgdmFyIGxpc3QgPSBuZXcgQXJyYXkoMCk7CisgIHZhciBjb2xsZWN0aW9uID0gY29udGFpbmVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpOworICBmb3IodmFyIGkgPSAwOyBpIDwgY29sbGVjdGlvbi5sZW5ndGg7IGkrKykKKyAgICBpZihjb2xsZWN0aW9uW2ldLmNsYXNzTmFtZS5zbGljZSgwLGNsc05hbWUubGVuZ3RoKT09Y2xzTmFtZSkKKyAgICAgIGxpc3RbbGlzdC5sZW5ndGhdID0gY29sbGVjdGlvbltpXTsKKyAgcmV0dXJuIGxpc3Q7Cit9CisKK2Z1bmN0aW9uIHNob3dvYmoob2JqKSB7CisgIHZhciBzdD0iIiwgaTsKKyAgZm9yIChpIGluIG9iaikgCisgICAgc3QgKz0gKG9iai5nZXRBdHRyaWJ1dGUoaSk9PW51bGw/IiI6IiAiK2krIjoiK29iai5nZXRBdHRyaWJ1dGUoaSkpOworICByZXR1cm4gc3Q7Cit9CisKK2Z1bmN0aW9uIGZpbmRQb3Mob2JqKSB7IC8vIHRvcC1sZWZ0IGNvcm5lciBvZiBvYmogb24gSFRNTCBwYWdlIGluIHBpeGVsCisgIHZhciBjdXJsZWZ0ID0gY3VydG9wID0gMDsKKyAgaWYgKG9iai5vZmZzZXRQYXJlbnQpIHsKKyAgICBjdXJsZWZ0ID0gb2JqLm9mZnNldExlZnQKKyAgICBjdXJ0b3AgPSBvYmoub2Zmc2V0VG9wCisgICAgd2hpbGUgKG9iaiA9IG9iai5vZmZzZXRQYXJlbnQpIHsKKyAgICAgIGN1cmxlZnQgKz0gb2JqLm9mZnNldExlZnQKKyAgICAgIGN1cnRvcCArPSBvYmoub2Zmc2V0VG9wCisvL2FsZXJ0KHNob3dvYmoob2JqKStbY3VybGVmdCxjdXJ0b3BdKQorICAgIH0KKyAgfQorICByZXR1cm4gW2N1cmxlZnQsY3VydG9wXTsKK30KKworZnVuY3Rpb24gY2hlY2tTVkcoKXsKKyAgaWYgKG5hdmlnYXRvci5hcHBOYW1lLnNsaWNlKDAsOCk9PSJOZXRzY2FwZSIpIAorICAgIGlmICh3aW5kb3dbJ1NWR0VsZW1lbnQnXSkgbm9TVkcgPSBudWxsOworICAgIGVsc2Ugbm9TVkcgPSB0cnVlOworICBlbHNlIGlmIChuYXZpZ2F0b3IuYXBwTmFtZS5zbGljZSgwLDkpPT0iTWljcm9zb2Z0IikKKyAgICB0cnkgeworICAgICAgdmFyIG9TVkc9ZXZhbCgibmV3IEFjdGl2ZVhPYmplY3QoJ0Fkb2JlLlNWR0N0bC4zJyk7Iik7CisgICAgICAgIG5vU1ZHID0gbnVsbDsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIG5vU1ZHID0gdHJ1ZTsKKyAgICB9CisgIGVsc2UgaWYgKG5hdmlnYXRvci5hcHBOYW1lLnNsaWNlKDAsNSk9PSJPcGVyYSIpIC8vIHdvcmtzIG9ubHkgZm9yIDkuNTBiMQorICAgIG5vU1ZHID0gbnVsbDsKKyAgZWxzZSBub1NWRyA9IHRydWU7CisvL25vU1ZHID0gdHJ1ZTsgLy91bmNvbW1lbnQgdG8gY2hlY2sKKyAgaWYgKG5vU1ZHICYmIG5vdGlmeUlmTm9TVkcpIHsKKyAgICB2YXIgbXNnID0gIlRvIHZpZXcgdGhlIEFTQ0lJc3ZnIGltYWdlcyB1c2UgSW50ZXJuZXQgRXhwbG9yZXIgKyBBZG9iZSBTVkd2aWV3ZXIgb3IgTW96aWxsYSBGaXJlZm94IDIuMCBvciBsYXRlci4iCisgICAgaWYgKGFsZXJ0SWZOb1NWRykKKyAgICAgIGFsZXJ0KG1zZyk7CisgICAgZWxzZSByZXR1cm4gbXNnOworICB9Cit9CisKK2Z1bmN0aW9uIHNldFRleHQoc3QsaWQpIHsgLy8gYWRkIHRleHQgdG8gYW4gZXhpc3Rpbmcgbm9kZSB3aXRoIGdpdmVuIGlkCisgIHZhciBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICBpZiAobm9kZSE9bnVsbCkKKyAgICBpZiAobm9kZS5jaGlsZE5vZGVzLmxlbmd0aCE9MCkgbm9kZS5jaGlsZE5vZGVzWzBdLm5vZGVWYWx1ZSA9IHN0OworICAgIGVsc2Ugbm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdCkpOworfQorCitmdW5jdGlvbiBnZXRYKGV2dCkgeyAvLyByZXR1cm4gbW91c2UgeC1jb29yZCBpbiB1c2VyIGNvb3JkaW5hdGUgc3lzdGVtCisgIHZhciBzdmdyb290ID0gZXZ0LnRhcmdldC5wYXJlbnROb2RlOworICAgIHBvcyA9IGZpbmRQb3Moc3Zncm9vdC5wYXJlbnROb2RlKTsKKyAgcmV0dXJuIChldnQuY2xpZW50WCsoaXNJRT8wOndpbmRvdy5wYWdlWE9mZnNldCktcG9zWzBdLXN2Z3Jvb3QuZ2V0QXR0cmlidXRlKCJveCIpKS9wYXJzZUZsb2F0KHN2Z3Jvb3QuZ2V0QXR0cmlidXRlKCJ4dW5pdGxlbmd0aCIpKTsKK30KKworZnVuY3Rpb24gZ2V0WShldnQpIHsgLy8gcmV0dXJuIG1vdXNlIHktY29vcmQgaW4gdXNlciBjb29yZGluYXRlIHN5c3RlbQorICB2YXIgc3Zncm9vdCA9IGV2dC50YXJnZXQucGFyZW50Tm9kZTsKKyAgICBwb3MgPSBmaW5kUG9zKHN2Z3Jvb3QucGFyZW50Tm9kZSk7CisvL2FsZXJ0KHNob3dvYmooc3Zncm9vdCkrc3Zncm9vdC5nZXRBdHRyaWJ1dGUoIm15dG9wIikpCisgIHJldHVybiAoc3Zncm9vdC5nZXRBdHRyaWJ1dGUoImhlaWdodCIpLXN2Z3Jvb3QuZ2V0QXR0cmlidXRlKCJveSIpLShldnQuY2xpZW50WSsoaXNJRT8wOndpbmRvdy5wYWdlWU9mZnNldCktcG9zWzFdKSkvcGFyc2VGbG9hdChzdmdyb290LmdldEF0dHJpYnV0ZSgieXVuaXRsZW5ndGgiKSk7Cit9CisKK2Z1bmN0aW9uIHRyYW5zbGF0ZWFuZGV2YWwoc3JjKSB7IC8vbW9kaWZ5IHVzZXIgaW5wdXQgdG8gSmF2YVNjcmlwdCBzeW50YXgKKyAgdmFyIGVycnN0cjsKKyAgLy8gcmVwbGFjZSBwbG90KGYoeCksLi4uKSB3aXRoIHBsb3QoImYoeCkiLC4uLikgIAorICBzcmMgPSBzcmMucmVwbGFjZSgvcGxvdFwoXHgyMCooW15cImZcW11bXlxuXHI7XSs/KVwsL2csInBsb3RcKFwiJDFcIiwiKTsKKyAgc3JjID0gc3JjLnJlcGxhY2UoL3Bsb3RcKFx4MjAqKFteXCJmXFtdW15cblxyO10rKVwpL2csInBsb3QoXCIkMVwiKSIpOworCisgIC8vIHJlcGxhY2UgKGV4cHIsZXhwcikgYnkgW2V4cHIsZXhwcl0gd2hlcmUgZXhwciBoYXMgbm8gKCwpIGluIGl0CisgIHNyYyA9IHNyYy5yZXBsYWNlKC8oWz1bKCxdXHgyMCopXCgoWy1hLXowLTkuLysqXSs/KSwoWy1hLXowLTkuLysqXSs/KVwpL2csIiQxWyQyLCQzXSIpOworLy9hbGVydChzcmMpCisgIC8vIGluc2VydCAqIGJldHdlZW4gZGlnaXQgYW5kIGxldHRlciBlLmcuIDJ4IC0tPiAyKngKKyAgc3JjID0gc3JjLnJlcGxhY2UoLyhbMC05XSkoW2EtZGYtekEtWl18ZV4pL2csIiQxKiQyIik7CisgIHNyYyA9IHNyYy5yZXBsYWNlKC9cKShbXCgwLTlhLXpBLVpdKS9nLCJcKSokMSIpOworCisgIHRyeSB7CisgICAgd2l0aCAoTWF0aCkgZXZhbChzcmMpOyAgICAgICAgICAvLyBoZXJlIHRoZSBzdmdwaWN0dXJlIG9iamVjdCBpcyBjcmVhdGVkCisgIH0gY2F0Y2goZXJyKSB7CisgICAgaWYgKGVyciE9IndhaXQiKSB7CisvL2FsZXJ0KGRzdmdsb2NhdGlvbikKKyAgICAgIGlmICh0eXBlb2YgZXJyPT0ib2JqZWN0IikgCisgICAgICAgIGVycnN0ciA9IGVyci5uYW1lKyIgIitlcnIubWVzc2FnZSsiICIrZXJyLm51bWJlcisiICIrZXJyLmRlc2NyaXB0aW9uOworICAgICAgZWxzZSBlcnJzdHIgPSBlcnI7CisgICAgICBhbGVydChlcnJzdHIrIlxuIitzcmMpCisgICAgfQorICB9Cit9CisKK3ZhciBsYXN0U2xvdCA9IDA7CisKK2Z1bmN0aW9uIGRyYXdQaWN0dXJlcygpIHsgLy8gbWFpbiByb3V0aW5lOyBjYWxsZWQgYWZ0ZXIgd2VicGFnZSBoYXMgbG9hZGVkCisgIHZhciBzcmMsIGlkLCBkc3ZnLCBuZCwgbm9kZSwgaHQsIGluZGV4LCBjb2xzLCBhcnIsIGksIG5vZGUyOworICB2YXIgQVNib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTsKKyAgcGljdHVyZXMgPSBnZXRFbGVtZW50c0J5Q2xhc3MoQVNib2R5LCJlbWJlZCIsIkFTQ0lJc3ZnIik7CisgIHZhciBsZW4gPSBwaWN0dXJlcy5sZW5ndGg7CisgIGlmKGxlbj09MCkgcmV0dXJuOworICBmb3IgKGluZGV4ID0gbGFzdFNsb3Q7IGluZGV4IDwgbGVuK2xhc3RTbG90OyBpbmRleCsrKSB7CisgICB3aWR0aCA9IG51bGw7IGhlaWdodCA9IG51bGw7IAorICAgeG1pbiA9IG51bGw7IHhtYXggPSBudWxsOyB5bWluID0gbnVsbDsgeW1heCA9IG51bGw7CisgICB4c2NsID0gbnVsbDsgeGdyaWQgPSBudWxsOyB5c2NsID0gbnVsbDsgeWdyaWQgPSBudWxsOworICAgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgIHBpY3R1cmUgPSBwaWN0dXJlc1tpbmRleC1sYXN0U2xvdF07ICAvLyBjdXJyZW50IHBpY3R1cmUgb2JqZWN0CisgICBzcmMgPSBwaWN0dXJlLmdldEF0dHJpYnV0ZSgic2NyaXB0Iik7IC8vIGdldCB0aGUgQVNDSUlzdmcgY29kZQorICAgaWYgKHNyYz09bnVsbCkgc3JjID0gIiI7CisgICAvLyBpbnNlcnQgImF4ZXMoKSIgaWYgbm90IHByZXNlbnQgICoqKioqKioqIGV4cGVyaW1lbnRhbAorICAgaWYgKCEvYXhlc1xifGluaXRQaWN0dXJlLy50ZXN0KHNyYykpIHsKKyAgICAgdmFyIGkgPSAwOworICAgICB3aGlsZSAoLygoeXNjbHx5bWF4fHltaW58eHNjbHx4bWF4fHhtaW58XGJ3aWR0aHxcYmhlaWdodClccyo9XHMqLT9cZCooXGRcLnxcLlxkfFxkKVxkKlxzKjs/KS8udGVzdChzcmMuc2xpY2UoaSkpKSBpKys7CisgICAgIHNyYyA9IChpPT0wPyJheGVzKCk7ICIrc3JjOiBzcmMuc2xpY2UoMCxpKStzcmMuc2xpY2UoaSkucmVwbGFjZSgvKChzY2x8bWF4fG1pbnxpZHRofGVpZ2h0KVxzKj1ccyotP1xkKihcZFwufFwuXGR8XGQpXGQqXHMqOz8pLywiJDFcbmF4ZXMoKTsiKSk7CisgICB9CisgICBodCA9IHBpY3R1cmUuZ2V0QXR0cmlidXRlKCJoZWlnaHQiKTsKKyAgIGlmIChpc0lFKSB7CisgICAgIHBpY3R1cmUuc2V0QXR0cmlidXRlKCJ3bW9kZSIsInRyYW5zcGFyZW50Iik7CisvL2FsZXJ0KCIqIitwaWN0dXJlLmdldEF0dHJpYnV0ZSgic3JjIikrZHN2Z2xvY2F0aW9uKTsKKy8vYWRkaW5nIGQuc3ZnIGR5bmFtaWNhbGx5IGdyZWF0ZXMgcHJvYmxlbXMgaW4gSUUuLi4KKy8vICAgICBpZiAocGljdHVyZS5nZXRBdHRyaWJ1dGUoInNyYyIpPT0iIikgcGljdHVyZS5zZXRBdHRyaWJ1dGUoInNyYyIsZHN2Z2xvY2F0aW9uKyJkLnN2ZyIpOworICAgfQorICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwaWN0dXJlIisoaW5kZXgrMSkrIm1tbCIpPT1udWxsKSB7CisgICAgIHBpY3R1cmUucGFyZW50Tm9kZS5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7CisgICAgIG5vZGUgPSBjcmVhdGVFbGVtZW50WEhUTUwoImRpdiIpOworICAgICBub2RlLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKKyAgICAgbm9kZS5zdHlsZS50b3AgPSAiMHB4IjsKKyAgICAgbm9kZS5zdHlsZS5sZWZ0ID0gIjBweCI7CisgICAgIG5vZGUuc2V0QXR0cmlidXRlKCJpZCIsInBpY3R1cmUiKyhpbmRleCsxKSsibW1sIik7CisgICAgIHBpY3R1cmUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSxwaWN0dXJlLm5leHRTaWJsaW5nKTsKKyAgIH0KKyAgIGlmIChodD09bnVsbCkgaHQgPSIiOworLy8gICBpZiAoaHQhPSIiKSBkZWZhdWx0Ym9yZGVyID0gMjU7CisgICBpZiAoaHQ9PSIiIHx8IHNyYz09IiIpIAorICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGljdHVyZSIrKGluZGV4KzEpKyJpbnB1dCIpPT1udWxsKSB7CisgICAgICBub2RlID0gY3JlYXRlRWxlbWVudFhIVE1MKCJ0ZXh0YXJlYSIpOworICAgICAgYXJyID0gc3JjLnNwbGl0KCJcbiIpOworICAgICAgY29scyA9IDA7CisgICAgICBmb3IgKGk9MDtpPGFyci5sZW5ndGg7aSsrKSBjb2xzID0gTWF0aC5tYXgoY29scyxhcnJbaV0ubGVuZ3RoKTsKKyAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCJyb3dzIixNYXRoLm1pbigxMCxhcnIubGVuZ3RoKSsxKTsKKyAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCJjb2xzIixNYXRoLm1heChNYXRoLm1pbig2MCxjb2xzKSwyMCkrNSk7CisvLyAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6YmxvY2siKTsKKyAgICAgIGlmIChpc0lFKSBzcmMgPSBzcmMucmVwbGFjZSgvKFteXHJdKVxuL2csIiQxXHIiKTsKKyAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3JjKSk7CisgICAgICBpZiAoc3JjLmluZGV4T2YoInNob3djb2RlKCkiKT09LTEpIG5vZGUuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCJpZCIsInBpY3R1cmUiKyhpbmRleCsxKSsiaW5wdXQiKTsKKyAgICAgIHBpY3R1cmUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSxwaWN0dXJlLm5leHRTaWJsaW5nKTsKKyAgICAgIHBpY3R1cmUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY3JlYXRlRWxlbWVudFhIVE1MKCJiciIpLG5vZGUpOworICAgICAgbm9kZTIgPSBjcmVhdGVFbGVtZW50WEhUTUwoImJ1dHRvbiIpOworICAgICAgbm9kZTIuc2V0QXR0cmlidXRlKCJpZCIsInBpY3R1cmUiKyhpbmRleCsxKSsiYnV0dG9uIik7CisgICAgICBpZiAoaXNJRSkgbm9kZTIub25jbGljayA9IGZ1bmN0aW9uKCkge3VwZGF0ZVBpY3R1cmUodGhpcyl9OworICAgICAgZWxzZSBub2RlMi5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCJ1cGRhdGVQaWN0dXJlKHRoaXMpIik7CisgICAgICBub2RlMi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiVXBkYXRlIikpOworICAgICAgaWYgKHNyYy5pbmRleE9mKCJzaG93Y29kZSgpIik9PS0xKSBub2RlMi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgICAgcGljdHVyZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlMixub2RlKTsKKy8vICAgICAgcGljdHVyZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiQVNDSUkiKSxub2RlKTsKKyAgICAgIHBpY3R1cmUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY3JlYXRlRWxlbWVudFhIVE1MKCJiciIpLG5vZGUpOworICAgIH0gZWxzZSBzcmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGljdHVyZSIrKGluZGV4KzEpKyJpbnB1dCIpLnZhbHVlOworICAgIGlkID0gcGljdHVyZS5nZXRBdHRyaWJ1dGUoImlkIik7CisgICAgZHN2ZyA9IHBpY3R1cmUuZ2V0QXR0cmlidXRlKCJzcmMiKTsKKyAgICBpZiAoaWQgPT0gbnVsbCB8fCBpZCA9PSAiIikgeworICAgICAgaWQgPSAicGljdHVyZSIrKGluZGV4KzEpOworICAgICAgcGljdHVyZS5zZXRBdHRyaWJ1dGUoImlkIixpZCk7CisgICAgfQorICAgIHRyYW5zbGF0ZWFuZGV2YWwoc3JjKTsKKyAgfQorICBsYXN0U2xvdCs9bGVuOworfQorCitmdW5jdGlvbiBzZXRkZWZhdWx0cygpIHsgLy9jYWxsZWQgYmVmb3JlIGVhY2ggZ3JhcGggaXMgZXZhbHVhdGVkCisgIHN0cm9rZXdpZHRoID0gZGVmYXVsdHN0cm9rZXdpZHRoOworICBzdHJva2UgPSBkZWZhdWx0c3Ryb2tlOworICBzdHJva2VvcGFjaXR5ID0gZGVmYXVsdHN0cm9rZW9wYWNpdHk7CisgIHN0cm9rZWRhc2hhcnJheSA9IGRlZmF1bHRzdHJva2VkYXNoYXJyYXk7CisgIGZpbGwgPSBkZWZhdWx0ZmlsbDsKKyAgZmlsbG9wYWNpdHkgPSBkZWZhdWx0ZmlsbG9wYWNpdHk7CisgIGZvbnRzdHlsZSA9IGRlZmF1bHRmb250c3R5bGU7CisgIGZvbnRmYW1pbHkgPSBkZWZhdWx0Zm9udGZhbWlseTsKKyAgZm9udHNpemUgPSBkZWZhdWx0Zm9udHNpemU7CisgIGZvbnR3ZWlnaHQgPSBkZWZhdWx0Zm9udHdlaWdodDsKKyAgZm9udHN0cm9rZSA9IGRlZmF1bHRmb250c3Ryb2tlOworICBmb250ZmlsbCA9IGRlZmF1bHRmb250ZmlsbDsKKyAgbWFya2VyID0gZGVmYXVsdG1hcmtlcjsKKyAgZW5kcG9pbnRzID0gZGVmYXVsdGVuZHBvaW50czsKK30KKworZnVuY3Rpb24gc3dpdGNoVG8oaWQpIHsgLy8gdXNlZCBieSBkeW5hbWljIGNvZGUgdG8gc2VsZWN0IGFwcHJvcHJpYXRlIGdyYXBoCisgIGlmIChpZD09dW5kZWZpbmVkKSByZXR1cm47CisgIHZhciBuYW1lID0gaWQ7CisgIGlmICh0eXBlb2YgbmFtZSE9InN0cmluZyIpIG5hbWUgPSBpZC50YXJnZXQucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsKKyAgcGljdHVyZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG5hbWUpOworICB3aWR0aCA9IHBpY3R1cmUuZ2V0QXR0cmlidXRlKCJ3aWR0aCIpLTA7CisgIGhlaWdodCA9IHBpY3R1cmUuZ2V0QXR0cmlidXRlKCJoZWlnaHQiKS0wOworICBzZXRkZWZhdWx0cygpOworICBpZiAoKHBpY3R1cmUubm9kZU5hbWUgPT0gIkVNQkVEIiB8fCBwaWN0dXJlLm5vZGVOYW1lID09ICJlbWJlZCIpICYmIGlzSUUpIHsKKyAgICBzdmdwaWN0dXJlID0gcGljdHVyZS5nZXRTVkdEb2N1bWVudCgpLmdldEVsZW1lbnRCeUlkKCJyb290Iik7CisgICAgZG9jID0gcGljdHVyZS5nZXRTVkdEb2N1bWVudCgpOworICB9IGVsc2UgeworICAgIHN2Z3BpY3R1cmUgPSBwaWN0dXJlOworICAgIGRvYyA9IGRvY3VtZW50OworICB9CisgIHh1bml0bGVuZ3RoID0gcGFyc2VGbG9hdChzdmdwaWN0dXJlLmdldEF0dHJpYnV0ZSgieHVuaXRsZW5ndGgiKSk7CisgIHl1bml0bGVuZ3RoID0gcGFyc2VGbG9hdChzdmdwaWN0dXJlLmdldEF0dHJpYnV0ZSgieXVuaXRsZW5ndGgiKSk7CisgIHhtaW4gPSBwYXJzZUZsb2F0KHN2Z3BpY3R1cmUuZ2V0QXR0cmlidXRlKCJ4bWluIikpOworICB4bWF4ID0gcGFyc2VGbG9hdChzdmdwaWN0dXJlLmdldEF0dHJpYnV0ZSgieG1heCIpKTsKKyAgeW1pbiA9IHBhcnNlRmxvYXQoc3ZncGljdHVyZS5nZXRBdHRyaWJ1dGUoInltaW4iKSk7CisgIHltYXggPSBwYXJzZUZsb2F0KHN2Z3BpY3R1cmUuZ2V0QXR0cmlidXRlKCJ5bWF4IikpOworICBvcmlnaW4gPSBbc3ZncGljdHVyZS5nZXRBdHRyaWJ1dGUoIm94IiktMCxzdmdwaWN0dXJlLmdldEF0dHJpYnV0ZSgib3kiKS0wXTsKK30KKworZnVuY3Rpb24gdXBkYXRlUGljdHVyZShvYmopIHsKKyAgdmFyIG5vZGUsIHNyYywgaWQsIHRvcCwgbGVmdDsKKyAgaWYgKHR5cGVvZiBvYmo9PSJvYmplY3QiKSBpZCA9IG9iai5pZC5zbGljZSgwLC02KTsKKyAgZWxzZSBpZCA9ICh0eXBlb2Ygb2JqPT0ic3RyaW5nIj9vYmo6InBpY3R1cmUiKyhvYmorMSkpOworICBzcmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCsiaW5wdXQiKS52YWx1ZTsKKyAgeG1pbiA9IG51bGw7IHhtYXggPSBudWxsOyB5bWluID0gbnVsbDsgeW1heCA9IG51bGw7CisgIHhzY2wgPSBudWxsOyB4Z3JpZCA9IG51bGw7IHlzY2wgPSBudWxsOyB5Z3JpZCA9IG51bGw7CisgIGluaXRpYWxpemVkID0gZmFsc2U7CisgIHBpY3R1cmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgIHRyYW5zbGF0ZWFuZGV2YWwoc3JjKQorfQorCitmdW5jdGlvbiBjaGFuZ2VwaWN0dXJlc2l6ZShldnQsZmFjdG9yKSB7CisgIHZhciBvYmogPSBldnQudGFyZ2V0OworICB2YXIgbmFtZSA9IG9iai5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgibmFtZSIpOworICB2YXIgcGljID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobmFtZSk7CisgIHZhciBzcmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuYW1lKyJpbnB1dCIpLnZhbHVlOworICBpZiAoIS9oZWlnaHQvLnRlc3Qoc3JjKSkgc3JjID0gImhlaWdodD0wOyAiK3NyYzsKKyAgaWYgKCEvd2lkdGgvLnRlc3Qoc3JjKSkgc3JjID0gIndpZHRoPTA7ICIrc3JjOworICBzcmMgPSBzcmMucmVwbGFjZSgvd2lkdGhccyo9XHMqXGQrLywid2lkdGg9IisoZmFjdG9yKihwaWMuZ2V0QXR0cmlidXRlKCJ3aWR0aCIpLTApKSk7CisgIHNyYyA9IHNyYy5yZXBsYWNlKC9oZWlnaHRccyo9XHMqXGQrLywiaGVpZ2h0PSIrKGZhY3RvcioocGljLmdldEF0dHJpYnV0ZSgiaGVpZ2h0IiktMCkpKTsKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobmFtZSsiaW5wdXQiKS52YWx1ZSA9IHNyYzsKKyAgdXBkYXRlUGljdHVyZShuYW1lKTsKK30KKworZnVuY3Rpb24gem9vbShldnQsZmFjdG9yKSB7CisgIHN3aXRjaFRvKGV2dCk7CisgIHZhciBvYmogPSBldnQudGFyZ2V0OworICB2YXIgbmFtZSA9IG9iai5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgibmFtZSIpOworICB2YXIgcGljID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobmFtZSk7CisgIHZhciBzcmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuYW1lKyJpbnB1dCIpLnZhbHVlOworICB2YXIgeGxlbiA9ICh4bWF4LXhtaW4pLzI7CisgIHZhciB5bGVuID0gKHltYXgteW1pbikvMjsKKyAgdmFyIHhjZW4gPSBnZXRYKGV2dCksIHljZW4gPSBnZXRZKGV2dCk7CisgIGlmICghL3ltYXgvLnRlc3Qoc3JjKSkgc3JjID0gInltYXg9MDsgIitzcmM7CisgIGlmICghL3ltaW4vLnRlc3Qoc3JjKSkgc3JjID0gInltaW49MDsgIitzcmM7CisgIGlmICghL3htYXgvLnRlc3Qoc3JjKSkgc3JjID0gInhtYXg9MDsgIitzcmM7CisgIGlmICghL3htaW4vLnRlc3Qoc3JjKSkgc3JjID0gInhtaW49MDsgIitzcmM7CisgIHNyYyA9IHNyYy5yZXBsYWNlKC94bWluXHMqPVxzKlstXGQuZV0rLywieG1pbj0iKyh4Y2VuLWZhY3Rvcip4bGVuKSk7CisgIHNyYyA9IHNyYy5yZXBsYWNlKC94bWF4XHMqPVxzKlstXGQuZV0rLywieG1heD0iKyh4Y2VuK2ZhY3Rvcip4bGVuKSk7CisgIHNyYyA9IHNyYy5yZXBsYWNlKC95bWluXHMqPVxzKlstXGQuZV0rLywieW1pbj0iKyh5Y2VuLWZhY3Rvcip5bGVuKSk7CisgIHNyYyA9IHNyYy5yZXBsYWNlKC95bWF4XHMqPVxzKlstXGQuZV0rLywieW1heD0iKyh5Y2VuK2ZhY3Rvcip5bGVuKSk7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG5hbWUrImlucHV0IikudmFsdWUgPSBzcmM7CisgIHVwZGF0ZVBpY3R1cmUobmFtZSk7Cit9CisKK3ZhciBzaW5jZUZpcnN0Q2xpY2sgPSAwOyAvLyBvbmRibGNsaWNrIHNpbXVsYXRpb24gZnJvbSAKK3ZhciBkYmxDbGtUaW1lcjsgICAgICAgICAvLyBodHRwOi8vd3d3LmVuamEub3JnL2RhdmlkLz9jYXQ9MTMgVGhhbmtzIQorZnVuY3Rpb24gdGltZXIoKSB7CisgIGlmKHNpbmNlRmlyc3RDbGljazw2MCkgeworICAgIHNpbmNlRmlyc3RDbGljaysrOworICAgIHNldFRpbWVvdXQoInRpbWVyKCkiLDEwKTsKKyAgfSBlbHNlIHsKKyAgICBjbGVhclRpbWVvdXQoZGJsQ2xrVGltZXIpOworICAgIGRibENsa1RpbWVyID0gIiI7CisgIH0KK30KK2Z1bmN0aW9uIG1DbGljayhldnQpIHsKKyAgaWYoc2luY2VGaXJzdENsaWNrIT0wKSB7CisgICAgaWYoc2luY2VGaXJzdENsaWNrIDw9IDQwKSB7CisgICAgICBpZiAoZXZ0LnNoaWZ0S2V5KSB7CisgICAgICAgIGlmIChldnQuYWx0S2V5KSBjaGFuZ2VwaWN0dXJlc2l6ZShldnQsMik7CisgICAgICAgIGVsc2Ugem9vbShldnQsLjUpOworICAgICAgfSBlbHNlIGlmIChldnQuYWx0S2V5KSB6b29tKGV2dCwyKTsvL2NoYW5nZXBpY3R1cmVzaXplKGV2dCwuNSk7CisgICAgICBlbHNlIHNob3dIaWRlQ29kZShldnQpOyAgICAgICAgICAgICAvLyBkbyB0aGlzIG9uIGRibGNsaWNrCisgICAgICBjbGVhclRpbWVvdXQoZGJsQ2xrVGltZXIpOworICAgICAgZGJsQ2xrVGltZXIgPSAiIjsKKyAgICB9IGVsc2UgeworICAgICAgY2xlYXJUaW1lb3V0KGRibENsa1RpbWVyKTsKKyAgICAgIHNpbmNlRmlyc3RDbGljayA9IDA7CisgICAgICBkYmxDbGtUaW1lciA9IHNldFRpbWVvdXQoInRpbWVyKCkiLDEwKTsKKyAgICB9CSAgICAgIAorICB9IGVsc2UgeworICAgIHNpbmNlRmlyc3RDbGljayA9IDA7CisgICAgZGJsQ2xrVGltZXIgPSBzZXRUaW1lb3V0KCJ0aW1lcigpIiwxMCk7CisgIH0KK30KKworZnVuY3Rpb24gc2hvd0hpZGVDb2RlKGV2dCkgeyAvLyBjYWxsZWQgYnkgb25jbGljayBldmVudAorLy8gIGlmIChldnQuZ2V0RGV0YWlsKCk9PTIpIHsvL2dldERldGFpbCB1bmZvcnR1bmF0ZWx5IG5vdCBpbiBGaXJlZm94CisgIHZhciBvYmo9ZXZ0LnRhcmdldDsKKyAgdmFyIG5hbWUgPSBvYmoucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsKKyAgdmFyIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuYW1lKyJpbnB1dCIpOworICBub2RlLnN0eWxlLmRpc3BsYXkgPSAobm9kZS5zdHlsZS5kaXNwbGF5ID09ICJub25lIj8iIjoibm9uZSIpOworICB2YXIgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG5hbWUrImJ1dHRvbiIpOworICBub2RlLnN0eWxlLmRpc3BsYXkgPSAobm9kZS5zdHlsZS5kaXNwbGF5ID09ICJub25lIj8iIjoibm9uZSIpOworLy8gIH0KK30KKworZnVuY3Rpb24gc2hvd2NvZGUoKSB7fSAvLyBkbyBub3RoaW5nCisKK2Z1bmN0aW9uIHNldEJvcmRlcih4KSB7IGJvcmRlciA9IHggfSAvL2RlcHJlY2F0ZQorCitmdW5jdGlvbiBpbml0UGljdHVyZSh4X21pbix4X21heCx5X21pbix5X21heCkgeyAvLyBzZXQgdXAgdGhlIGdyYXBoCisvLyB1c3VhbGx5IGNhbGxlZCBieSBheGVzKCkgb3Igbm9heGVzKCksIGJ1dCBjYW4gYmUgdXNlZCBkaXJlY3RseQorIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgc2V0ZGVmYXVsdHMoKTsKKyAgaW5pdGlhbGl6ZWQgPSB0cnVlOworICBpZiAoeF9taW4hPW51bGwpIHhtaW4gPSB4X21pbjsKKyAgaWYgKHhfbWF4IT1udWxsKSB4bWF4ID0geF9tYXg7CisgIGlmICh5X21pbiE9bnVsbCkgeW1pbiA9IHlfbWluOworICBpZiAoeV9tYXghPW51bGwpIHltYXggPSB5X21heDsKKyAgaWYgKHhtaW49PW51bGwpIHhtaW4gPSBkZWZhdWx0eG1pbjsKKyAgaWYgKHhtYXg9PW51bGwpIHhtYXggPSBkZWZhdWx0eG1heDsKKyBpZiAodHlwZW9mIHhtaW4gIT0gIm51bWJlciIgfHwgdHlwZW9mIHhtYXggIT0gIm51bWJlciIgfHwgeG1pbiA+PSB4bWF4KSAKKyAgIGFsZXJ0KCJQaWN0dXJlIHJlcXVpcmVzIGF0IGxlYXN0IHR3byBudW1iZXJzOiB4bWluIDwgeG1heCIpOworIGVsc2UgaWYgKHlfbWF4ICE9IG51bGwgJiYgKHR5cGVvZiB5X21pbiAhPSAibnVtYmVyIiB8fCAKKyAgICAgICAgICB0eXBlb2YgeV9tYXggIT0gIm51bWJlciIgfHwgeV9taW4gPj0geV9tYXgpKQorICAgYWxlcnQoImluaXRQaWN0dXJlKHhtaW4seG1heCx5bWluLHltYXgpIHJlcXVpcmVzIG51bWJlcnMgeW1pbiA8IHltYXgiKTsKKyBlbHNlIHsKKyAgaWYgKHdpZHRoPT1udWxsKSB7CisgICAgd2lkdGggPSBwaWN0dXJlLmdldEF0dHJpYnV0ZSgid2lkdGgiKTsKKyAgICBpZiAod2lkdGg9PW51bGwgfHwgd2lkdGg9PSIiKSB3aWR0aD1kZWZhdWx0d2lkdGg7CisgIH0KKyAgcGljdHVyZS5zZXRBdHRyaWJ1dGUoIndpZHRoIix3aWR0aCk7CisgIGlmIChoZWlnaHQ9PW51bGwpIHsgCisgICAgaGVpZ2h0ID0gcGljdHVyZS5nZXRBdHRyaWJ1dGUoImhlaWdodCIpOworICAgIGlmIChoZWlnaHQ9PW51bGwgfHwgaGVpZ2h0PT0iIikgaGVpZ2h0PWRlZmF1bHRoZWlnaHQ7CisgIH0KKyAgcGljdHVyZS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsaGVpZ2h0KTsKKyAgeHVuaXRsZW5ndGggPSAod2lkdGgtMipib3JkZXIpLyh4bWF4LXhtaW4pOworICB5dW5pdGxlbmd0aCA9IHh1bml0bGVuZ3RoOworLy9hbGVydCh4bWluKyIgIit4bWF4KyIgIit5bWluKyIgIit5bWF4KQorICBpZiAoeW1pbj09bnVsbCkgeworICAgIG9yaWdpbiA9IFsteG1pbip4dW5pdGxlbmd0aCtib3JkZXIsaGVpZ2h0LzJdOworICAgIHltaW4gPSAtKGhlaWdodC0yKmJvcmRlcikvKDIqeXVuaXRsZW5ndGgpOworICAgIHltYXggPSAteW1pbjsKKyAgfSBlbHNlIHsKKyAgICBpZiAoeW1heCE9bnVsbCkgeXVuaXRsZW5ndGggPSAoaGVpZ2h0LTIqYm9yZGVyKS8oeW1heC15bWluKTsKKyAgICBlbHNlIHltYXggPSAoaGVpZ2h0LTIqYm9yZGVyKS95dW5pdGxlbmd0aCArIHltaW47CisgICAgb3JpZ2luID0gWy14bWluKnh1bml0bGVuZ3RoK2JvcmRlciwteW1pbip5dW5pdGxlbmd0aCtib3JkZXJdOworICB9CisgIGlmIChpc0lFKSB7CisgICAgaWYgKHBpY3R1cmUuRlVMTFNDUkVFTj09dW5kZWZpbmVkKSB7CisgICAgICBzZXRUaW1lb3V0KCdkcmF3UGljdHVyZXMoKScsNTApOworICAgICAgdGhyb3cgIndhaXQiOworICAgIH0KKyAgICBzdmdwaWN0dXJlID0gcGljdHVyZS5nZXRTVkdEb2N1bWVudCgpLmdldEVsZW1lbnRCeUlkKCJyb290Iik7CisgICAgaWYgKHN2Z3BpY3R1cmU9PW51bGwpIHsKKyAgICAgIHNldFRpbWVvdXQoJ2RyYXdQaWN0dXJlcygpJyw1MCk7CisgICAgICB0aHJvdyAid2FpdCI7CisgICAgfQorICAgIHN2Z3BpY3R1cmUgPSBwaWN0dXJlLmdldFNWR0RvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQoInJvb3QiKTsKKyAgICB3aGlsZSAoc3ZncGljdHVyZS5jaGlsZE5vZGVzLmxlbmd0aD4wKSAKKyAgICAgIHN2Z3BpY3R1cmUucmVtb3ZlQ2hpbGQoc3ZncGljdHVyZS5sYXN0Q2hpbGQpOyAKKyAgICBzdmdwaWN0dXJlLnNldEF0dHJpYnV0ZSgid2lkdGgiLHdpZHRoKTsKKyAgICBzdmdwaWN0dXJlLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixoZWlnaHQpOworICAgIHN2Z3BpY3R1cmUuc2V0QXR0cmlidXRlKCJuYW1lIixwaWN0dXJlLmdldEF0dHJpYnV0ZSgiaWQiKSk7CisgICAgZG9jID0gcGljdHVyZS5nZXRTVkdEb2N1bWVudCgpOworICB9IGVsc2UgeworICAgIHZhciBxbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTsKKyAgICBxbm9kZS5zZXRBdHRyaWJ1dGUoImlkIixwaWN0dXJlLmdldEF0dHJpYnV0ZSgiaWQiKSk7CisgICAgcW5vZGUuc2V0QXR0cmlidXRlKCJuYW1lIixwaWN0dXJlLmdldEF0dHJpYnV0ZSgiaWQiKSk7CisvLyAgICBxbm9kZS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTppbmxpbmUiKTsKKyAgICBxbm9kZS5zZXRBdHRyaWJ1dGUoIndpZHRoIixwaWN0dXJlLmdldEF0dHJpYnV0ZSgid2lkdGgiKSk7CisgICAgcW5vZGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLHBpY3R1cmUuZ2V0QXR0cmlidXRlKCJoZWlnaHQiKSk7CisgICAgcGljdHVyZXBvcyA9IGZpbmRQb3MocGljdHVyZSk7CisvLyAgcW5vZGUuc2V0QXR0cmlidXRlKCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKTsKKyAgICBpZiAocGljdHVyZS5wYXJlbnROb2RlIT1udWxsKSB7CisgICAgICBwaWN0dXJlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHFub2RlLHBpY3R1cmUpOworICAgIH0gZWxzZSB7CisgICAgICBzdmdwaWN0dXJlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHFub2RlLHN2Z3BpY3R1cmUpOworICAgIH0KKyAgICBzdmdwaWN0dXJlID0gcW5vZGU7CisgICAgZG9jID0gZG9jdW1lbnQ7CisgIH0KKyAgdmFyIG5kID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocGljdHVyZS5nZXRBdHRyaWJ1dGUoImlkIikrIm1tbCIpOworICBpZiAobmQhPW51bGwpIC8vIGNsZWFyIG91dCBNYXRoTUwgbGF5ZXIKKyAgICB3aGlsZSAobmQuY2hpbGROb2Rlcy5sZW5ndGg+MCkgbmQucmVtb3ZlQ2hpbGQobmQubGFzdENoaWxkKTsgCisgIHN2Z3BpY3R1cmUuc2V0QXR0cmlidXRlKCJ4dW5pdGxlbmd0aCIseHVuaXRsZW5ndGgpOworICBzdmdwaWN0dXJlLnNldEF0dHJpYnV0ZSgieXVuaXRsZW5ndGgiLHl1bml0bGVuZ3RoKTsKKyAgc3ZncGljdHVyZS5zZXRBdHRyaWJ1dGUoInhtaW4iLHhtaW4pOworICBzdmdwaWN0dXJlLnNldEF0dHJpYnV0ZSgieG1heCIseG1heCk7CisgIHN2Z3BpY3R1cmUuc2V0QXR0cmlidXRlKCJ5bWluIix5bWluKTsKKyAgc3ZncGljdHVyZS5zZXRBdHRyaWJ1dGUoInltYXgiLHltYXgpOworICBzdmdwaWN0dXJlLnNldEF0dHJpYnV0ZSgib3giLG9yaWdpblswXSk7CisgIHN2Z3BpY3R1cmUuc2V0QXR0cmlidXRlKCJveSIsb3JpZ2luWzFdKTsKKyAgdmFyIG5vZGUgPSBteUNyZWF0ZUVsZW1lbnRTVkcoInJlY3QiKTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoIngiLCIwIik7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJ5IiwiMCIpOworICBub2RlLnNldEF0dHJpYnV0ZSgid2lkdGgiLHdpZHRoKTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsaGVpZ2h0KTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoInN0eWxlIixiYWNrZ3JvdW5kc3R5bGUpOworICBzdmdwaWN0dXJlLmFwcGVuZENoaWxkKG5vZGUpOworICBzdmdwaWN0dXJlLnNldEF0dHJpYnV0ZSgib25tb3VzZW1vdmUiLCJkaXNwbGF5Q29vcmQoZXZ0KSIpOworICBzdmdwaWN0dXJlLnNldEF0dHJpYnV0ZSgib25tb3VzZW91dCIsInJlbW92ZUNvb3JkKGV2dCkiKTsKKyAgc3ZncGljdHVyZS5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCJtQ2xpY2soZXZ0KSIpOworICBub2RlID0gbXlDcmVhdGVFbGVtZW50U1ZHKCJ0ZXh0Iik7IC8vIHVzZWQgZm9yIGRpc3BsYXlDb29yZAorICBub2RlLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoImlkIiwiY29vcmRzIik7CisgIHN2Z3BpY3R1cmUuYXBwZW5kQ2hpbGQobm9kZSk7CisgIG5vZGUgPSBteUNyZWF0ZUVsZW1lbnRTVkcoInRleHQiKTsgLy8gdXNlZCBmb3IgdGV4dCBkaXNwbGF5CisgIG5vZGUuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCIgIikpOworICBub2RlLnNldEF0dHJpYnV0ZSgiaWQiLCJjb29yZHMiKTsKKyAgc3ZncGljdHVyZS5hcHBlbmRDaGlsZChub2RlKTsKKyAgYm9yZGVyID0gZGVmYXVsdGJvcmRlcjsKKyB9CisgfQorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL3VzZXIgZ3JhcGhpY3MgY29tbWFuZHMgc3RhcnQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Z1bmN0aW9uIGxpbmUocCxxLGlkLGVuZHB0cykgeyAvLyBzZWdtZW50IGNvbm5lY3RpbmcgcG9pbnRzIHAscSAoY29vcmRpbmF0ZXMgaW4gdW5pdHMpCisgIHZhciBub2RlOworICBpZiAoaWQhPW51bGwpIG5vZGUgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoaWQpOworICBpZiAobm9kZT09bnVsbCkgeworICAgIG5vZGUgPSBteUNyZWF0ZUVsZW1lbnRTVkcoInBhdGgiKTsKKyAgICBub2RlLnNldEF0dHJpYnV0ZSgiaWQiLCBpZCk7CisgICAgc3ZncGljdHVyZS5hcHBlbmRDaGlsZChub2RlKTsKKyAgfQorICBub2RlLnNldEF0dHJpYnV0ZSgiZCIsIk0iKyhwWzBdKnh1bml0bGVuZ3RoK29yaWdpblswXSkrIiwiKworICAgIChoZWlnaHQtcFsxXSp5dW5pdGxlbmd0aC1vcmlnaW5bMV0pKyIgIisKKyAgICAocVswXSp4dW5pdGxlbmd0aCtvcmlnaW5bMF0pKyIsIisoaGVpZ2h0LXFbMV0qeXVuaXRsZW5ndGgtb3JpZ2luWzFdKSk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLCBzdHJva2V3aWR0aCk7CisgIGlmIChzdHJva2VkYXNoYXJyYXkhPW51bGwpIAorICAgIG5vZGUuc2V0QXR0cmlidXRlKCJzdHJva2UtZGFzaGFycmF5Iiwgc3Ryb2tlZGFzaGFycmF5KTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsIHN0cm9rZSk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJmaWxsIiwgZmlsbCk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJzdHJva2Utb3BhY2l0eSIsIHN0cm9rZW9wYWNpdHkpOworICBub2RlLnNldEF0dHJpYnV0ZSgiZmlsbC1vcGFjaXR5IiwgZmlsbG9wYWNpdHkpOworICBpZiAobWFya2VyPT0iZG90IiB8fCBtYXJrZXI9PSJhcnJvd2RvdCIpIHsKKyAgICBBU2RvdChwLG1hcmtlcnNpemUsbWFya2Vyc3Ryb2tlLG1hcmtlcmZpbGwpOworICAgIGlmIChtYXJrZXI9PSJhcnJvd2RvdCIpIGFycm93aGVhZChwLHEpOworICAgIEFTZG90KHEsbWFya2Vyc2l6ZSxtYXJrZXJzdHJva2UsbWFya2VyZmlsbCk7CisgIH0gZWxzZSBpZiAobWFya2VyPT0iYXJyb3ciKSBhcnJvd2hlYWQocCxxKTsKKyAgaWYgKGVuZHB0cz09bnVsbCAmJiBlbmRwb2ludHMhPSIiKSBlbmRwdHMgPSBlbmRwb2ludHM7CisgIGlmIChlbmRwdHMhPW51bGwpIHsKKyAgICBpZiAoZW5kcHRzLmluZGV4T2YoIjwtIikgIT0gLTEpIGFycm93aGVhZChxLHApOworICAgIGlmIChlbmRwdHMuaW5kZXhPZigiby0iKSAhPSAtMSkgZG90KHAsICJvcGVuIik7CisgICAgaWYgKGVuZHB0cy5pbmRleE9mKCIqLSIpICE9IC0xKSBkb3QocCwgImNsb3NlZCIpOworICAgIGlmIChlbmRwdHMuaW5kZXhPZigiLT4iKSAhPSAtMSkgYXJyb3doZWFkKHAscSk7CisgICAgaWYgKGVuZHB0cy5pbmRleE9mKCItbyIpICE9IC0xKSBkb3QocSwgIm9wZW4iKTsKKyAgICBpZiAoZW5kcHRzLmluZGV4T2YoIi0qIikgIT0gLTEpIGRvdChxLCAiY2xvc2VkIik7CisgIH0KK30KKworZnVuY3Rpb24gcGF0aChwbGlzdCxpZCxjLGVuZHB0cykgeworICBpZiAoYz09bnVsbCkgYz0iIjsKKyAgdmFyIG5vZGUsIHN0LCBpOworICBpZiAoaWQhPW51bGwpIG5vZGUgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoaWQpOworICBpZiAobm9kZT09bnVsbCkgeworICAgIG5vZGUgPSBteUNyZWF0ZUVsZW1lbnRTVkcoInBhdGgiKTsKKyAgICBub2RlLnNldEF0dHJpYnV0ZSgiaWQiLCBpZCk7CisgICAgc3ZncGljdHVyZS5hcHBlbmRDaGlsZChub2RlKTsKKyAgfQorICBpZiAodHlwZW9mIHBsaXN0ID09ICJzdHJpbmciKSBzdCA9IHBsaXN0OworICBlbHNlIHsKKyAgICBzdCA9ICJNIjsKKyAgICBzdCArPSAocGxpc3RbMF1bMF0qeHVuaXRsZW5ndGgrb3JpZ2luWzBdKSsiLCIrCisgICAgICAgICAgKGhlaWdodC1wbGlzdFswXVsxXSp5dW5pdGxlbmd0aC1vcmlnaW5bMV0pKyIgIitjOworICAgIGZvciAoaT0xOyBpPHBsaXN0Lmxlbmd0aDsgaSsrKQorICAgICAgc3QgKz0gKHBsaXN0W2ldWzBdKnh1bml0bGVuZ3RoK29yaWdpblswXSkrIiwiKworICAgICAgICAgICAgKGhlaWdodC1wbGlzdFtpXVsxXSp5dW5pdGxlbmd0aC1vcmlnaW5bMV0pKyIgIjsKKyAgfQorICBub2RlLnNldEF0dHJpYnV0ZSgiZCIsIHN0KTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsIHN0cm9rZXdpZHRoKTsKKyAgaWYgKHN0cm9rZWRhc2hhcnJheSE9bnVsbCkgCisgICAgbm9kZS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNoYXJyYXkiLCBzdHJva2VkYXNoYXJyYXkpOworICBub2RlLnNldEF0dHJpYnV0ZSgic3Ryb2tlIiwgc3Ryb2tlKTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoImZpbGwiLCBmaWxsKTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1vcGFjaXR5Iiwgc3Ryb2tlb3BhY2l0eSk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJmaWxsLW9wYWNpdHkiLCBmaWxsb3BhY2l0eSk7CisgIGlmIChtYXJrZXI9PSJkb3QiIHx8IG1hcmtlcj09ImFycm93ZG90IikKKyAgICBmb3IgKGk9MDsgaTxwbGlzdC5sZW5ndGg7IGkrKykKKyAgICAgIGlmIChjIT0iQyIgJiYgYyE9IlQiIHx8IGkhPTEgJiYgaSE9MikKKyAgICAgICAgQVNkb3QocGxpc3RbaV0sbWFya2Vyc2l6ZSxtYXJrZXJzdHJva2UsbWFya2VyZmlsbCk7CisgIGlmIChlbmRwdHM9PW51bGwgJiYgZW5kcG9pbnRzIT0iIikgZW5kcHRzID0gZW5kcG9pbnRzOworICBpZiAoZW5kcHRzIT1udWxsKSB7CisgICAgaWYgKGVuZHB0cy5pbmRleE9mKCI8LSIpICE9IC0xKSBhcnJvd2hlYWQocGxpc3RbMV0scGxpc3RbMF0pOworICAgIGlmIChlbmRwdHMuaW5kZXhPZigiby0iKSAhPSAtMSkgZG90KHBsaXN0WzBdLCAib3BlbiIpOworICAgIGlmIChlbmRwdHMuaW5kZXhPZigiKi0iKSAhPSAtMSkgZG90KHBsaXN0WzBdLCAiY2xvc2VkIik7CisgICAgaWYgKGVuZHB0cy5pbmRleE9mKCItPiIpICE9IC0xKSBhcnJvd2hlYWQocGxpc3RbcGxpc3QubGVuZ3RoLTJdLHBsaXN0W3BsaXN0Lmxlbmd0aC0xXSk7CisgICAgaWYgKGVuZHB0cy5pbmRleE9mKCItbyIpICE9IC0xKSBkb3QocGxpc3RbcGxpc3QubGVuZ3RoLTFdLCAib3BlbiIpOworICAgIGlmIChlbmRwdHMuaW5kZXhPZigiLSoiKSAhPSAtMSkgZG90KHBsaXN0W3BsaXN0Lmxlbmd0aC0xXSwgImNsb3NlZCIpOworICB9Cit9CisKK2Z1bmN0aW9uIGN1cnZlKHBsaXN0LGlkLGVuZHB0cykgeworICBwYXRoKHBsaXN0LGlkLCJUIixlbmRwdHMpOworfQorCitmdW5jdGlvbiB2ZWN0b3IocCxxLGlkKSB7CisgIGxpbmUocCxxLGlkLCIiLCItPiIpOworfQorCitmdW5jdGlvbiBjaXJjbGUoY2VudGVyLHJhZGl1cyxpZCkgeyAvLyBjb29yZGluYXRlcyBpbiB1bml0cworICB2YXIgbm9kZTsKKyAgaWYgKGlkIT1udWxsKSBub2RlID0gZG9jLmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgaWYgKG5vZGU9PW51bGwpIHsKKyAgICBub2RlID0gbXlDcmVhdGVFbGVtZW50U1ZHKCJjaXJjbGUiKTsKKyAgICBub2RlLnNldEF0dHJpYnV0ZSgiaWQiLCBpZCk7CisgICAgc3ZncGljdHVyZS5hcHBlbmRDaGlsZChub2RlKTsKKyAgfQorICBub2RlLnNldEF0dHJpYnV0ZSgiY3giLGNlbnRlclswXSp4dW5pdGxlbmd0aCtvcmlnaW5bMF0pOworICBub2RlLnNldEF0dHJpYnV0ZSgiY3kiLGhlaWdodC1jZW50ZXJbMV0qeXVuaXRsZW5ndGgtb3JpZ2luWzFdKTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoInIiLHJhZGl1cyp4dW5pdGxlbmd0aCk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLCBzdHJva2V3aWR0aCk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJzdHJva2UiLCBzdHJva2UpOworICBub2RlLnNldEF0dHJpYnV0ZSgiZmlsbCIsIGZpbGwpOworICBub2RlLnNldEF0dHJpYnV0ZSgic3Ryb2tlLW9wYWNpdHkiLCBzdHJva2VvcGFjaXR5KTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoImZpbGwtb3BhY2l0eSIsIGZpbGxvcGFjaXR5KTsKK30KKworZnVuY3Rpb24gbG9vcChwLGQsaWQpIHsgCisvLyBkIGlzIGEgZGlyZWN0aW9uIHZlY3RvciBlLmcuIFsxLDBdIG1lYW5zIGxvb3Agc3RhcnRzIGluIHRoYXQgZGlyZWN0aW9uCisgIGlmIChkPT1udWxsKSBkPVsxLDBdOworICBwYXRoKFtwLFtwWzBdK2RbMF0scFsxXStkWzFdXSxbcFswXS1kWzFdLHBbMV0rZFswXV0scF0saWQsIkMiKTsKKyAgaWYgKG1hcmtlcj09ImFycm93IiB8fCBtYXJrZXI9PSJhcnJvd2RvdCIpIAorICAgIGFycm93aGVhZChbcFswXStNYXRoLmNvcygxLjQpKmRbMF0tTWF0aC5zaW4oMS40KSpkWzFdLAorICAgICAgICAgICAgICAgcFsxXStNYXRoLnNpbigxLjQpKmRbMF0rTWF0aC5jb3MoMS40KSpkWzFdXSxwKTsKK30KKworZnVuY3Rpb24gYXJjKHN0YXJ0LGVuZCxyYWRpdXMsaWQsbGFyZ2VhcmMpIHsgLy8gY29vcmRpbmF0ZXMgaW4gdW5pdHMKKyAgdmFyIG5vZGUsIHY7CisvL2FsZXJ0KFtmaWxsLCBzdHJva2UsIG9yaWdpbiwgeHVuaXRsZW5ndGgsIHl1bml0bGVuZ3RoLCBoZWlnaHRdKQorICBpZiAoaWQhPW51bGwpIG5vZGUgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoaWQpOworICBpZiAobGFyZ2VhcmM9PW51bGwpIGxhcmdlYXJjPTA7CisgIGlmIChyYWRpdXM9PW51bGwpIHsKKyAgICB2PVtlbmRbMF0tc3RhcnRbMF0sZW5kWzFdLXN0YXJ0WzFdXTsKKyAgICByYWRpdXMgPSBNYXRoLnNxcnQodlswXSp2WzBdK3ZbMV0qdlsxXSk7CisgIH0KKyAgaWYgKG5vZGU9PW51bGwpIHsKKyAgICBub2RlID0gbXlDcmVhdGVFbGVtZW50U1ZHKCJwYXRoIik7CisgICAgbm9kZS5zZXRBdHRyaWJ1dGUoImlkIiwgaWQpOworICAgIHN2Z3BpY3R1cmUuYXBwZW5kQ2hpbGQobm9kZSk7CisgIH0KKyAgbm9kZS5zZXRBdHRyaWJ1dGUoImQiLCJNIisoc3RhcnRbMF0qeHVuaXRsZW5ndGgrb3JpZ2luWzBdKSsiLCIrCisgICAgKGhlaWdodC1zdGFydFsxXSp5dW5pdGxlbmd0aC1vcmlnaW5bMV0pKyIgQSIrcmFkaXVzKnh1bml0bGVuZ3RoKyIsIisKKyAgICAgcmFkaXVzKnl1bml0bGVuZ3RoKyIgMCAiK2xhcmdlYXJjKyIsMCAiKyhlbmRbMF0qeHVuaXRsZW5ndGgrb3JpZ2luWzBdKSsiLCIrCisgICAgKGhlaWdodC1lbmRbMV0qeXVuaXRsZW5ndGgtb3JpZ2luWzFdKSk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLCBzdHJva2V3aWR0aCk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJzdHJva2UiLCBzdHJva2UpOworICBub2RlLnNldEF0dHJpYnV0ZSgiZmlsbCIsIGZpbGwpOworICBub2RlLnNldEF0dHJpYnV0ZSgic3Ryb2tlLW9wYWNpdHkiLCBzdHJva2VvcGFjaXR5KTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoImZpbGwtb3BhY2l0eSIsIGZpbGxvcGFjaXR5KTsKKyAgaWYgKG1hcmtlcj09ImFycm93IiB8fCBtYXJrZXI9PSJhcnJvd2RvdCIpIHsKKyAgICB1ID0gWyhlbmRbMV0tc3RhcnRbMV0pLzQsKHN0YXJ0WzBdLWVuZFswXSkvNF07CisgICAgdiA9IFsoZW5kWzBdLXN0YXJ0WzBdKS8yLChlbmRbMV0tc3RhcnRbMV0pLzJdOworLy9hbGVydChbdSx2XSkKKyAgICB2ID0gW3N0YXJ0WzBdK3ZbMF0rdVswXSxzdGFydFsxXSt2WzFdK3VbMV1dOworICB9IGVsc2Ugdj1bc3RhcnRbMF0sc3RhcnRbMV1dOworICBpZiAobWFya2VyPT0iZG90IiB8fCBtYXJrZXI9PSJhcnJvd2RvdCIpIHsKKyAgICBBU2RvdChzdGFydCxtYXJrZXJzaXplLG1hcmtlcnN0cm9rZSxtYXJrZXJmaWxsKTsKKyAgICBpZiAobWFya2VyPT0iYXJyb3dkb3QiKSBhcnJvd2hlYWQodixlbmQpOworICAgIEFTZG90KGVuZCxtYXJrZXJzaXplLG1hcmtlcnN0cm9rZSxtYXJrZXJmaWxsKTsKKyAgfSBlbHNlIGlmIChtYXJrZXI9PSJhcnJvdyIpIGFycm93aGVhZCh2LGVuZCk7Cit9CisKK2Z1bmN0aW9uIHNlY3RvcihjZW50ZXIsc3RhcnQsZW5kLGlkKSB7IC8vIGNlbnRlcixzdGFydCxlbmQgc2hvdWxkIGJlIGlzb2NlbGVzCisgIHZhciByeCA9IHN0YXJ0WzBdLWNlbnRlclswXSwgcnkgPSBzdGFydFsxXS1jZW50ZXJbMV07CisgIGFyYyhzdGFydCxlbmQsTWF0aC5zcXJ0KHJ4KnJ4K3J5KnJ5KSxpZCsiYXJjIik7CisgIHBhdGgoW2VuZCxjZW50ZXIsc3RhcnRdLGlkKyJwYXRoIik7Cit9CisKK2Z1bmN0aW9uIGVsbGlwc2UoY2VudGVyLHJ4LHJ5LGlkKSB7IC8vIGNvb3JkaW5hdGVzIGluIHVuaXRzCisgIHZhciBub2RlOworICBpZiAoaWQhPW51bGwpIG5vZGUgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoaWQpOworICBpZiAobm9kZT09bnVsbCkgeworICAgIG5vZGUgPSBteUNyZWF0ZUVsZW1lbnRTVkcoImVsbGlwc2UiKTsKKyAgICBub2RlLnNldEF0dHJpYnV0ZSgiaWQiLCBpZCk7CisgICAgc3ZncGljdHVyZS5hcHBlbmRDaGlsZChub2RlKTsKKyAgfQorICBub2RlLnNldEF0dHJpYnV0ZSgiY3giLGNlbnRlclswXSp4dW5pdGxlbmd0aCtvcmlnaW5bMF0pOworICBub2RlLnNldEF0dHJpYnV0ZSgiY3kiLGhlaWdodC1jZW50ZXJbMV0qeXVuaXRsZW5ndGgtb3JpZ2luWzFdKTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoInJ4IixyeCp4dW5pdGxlbmd0aCk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJyeSIscnkqeXVuaXRsZW5ndGgpOworICBub2RlLnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIiwgc3Ryb2tld2lkdGgpOworICBub2RlLnNldEF0dHJpYnV0ZSgic3Ryb2tlIiwgc3Ryb2tlKTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoImZpbGwiLCBmaWxsKTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1vcGFjaXR5Iiwgc3Ryb2tlb3BhY2l0eSk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJmaWxsLW9wYWNpdHkiLCBmaWxsb3BhY2l0eSk7Cit9CisKK2Z1bmN0aW9uIHRyaWFuZ2xlKHAscSxyLGlkKSB7CisgIHBhdGgoW3AscSxyLHBdLGlkKQorfQorCitmdW5jdGlvbiByZWN0KHAscSxpZCxyeCxyeSkgeyAvLyBvcHBvc2l0ZSBjb3JuZXJzIGluIHVuaXRzLCByb3VuZGVkIGJ5IHJhZGlpCisgIHZhciBub2RlOworICBpZiAoaWQhPW51bGwpIG5vZGUgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoaWQpOworICBpZiAobm9kZT09bnVsbCkgeworICAgIG5vZGUgPSBteUNyZWF0ZUVsZW1lbnRTVkcoInJlY3QiKTsKKyAgICBub2RlLnNldEF0dHJpYnV0ZSgiaWQiLCBpZCk7CisgICAgc3ZncGljdHVyZS5hcHBlbmRDaGlsZChub2RlKTsKKyAgfQorICBub2RlLnNldEF0dHJpYnV0ZSgieCIscFswXSp4dW5pdGxlbmd0aCtvcmlnaW5bMF0pOworICBub2RlLnNldEF0dHJpYnV0ZSgieSIsaGVpZ2h0LXFbMV0qeXVuaXRsZW5ndGgtb3JpZ2luWzFdKTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwocVswXS1wWzBdKSp4dW5pdGxlbmd0aCk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLChxWzFdLXBbMV0pKnl1bml0bGVuZ3RoKTsKKyAgaWYgKHJ4IT1udWxsKSBub2RlLnNldEF0dHJpYnV0ZSgicngiLHJ4Knh1bml0bGVuZ3RoKTsKKyAgaWYgKHJ5IT1udWxsKSBub2RlLnNldEF0dHJpYnV0ZSgicnkiLHJ5Knl1bml0bGVuZ3RoKTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsIHN0cm9rZXdpZHRoKTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsIHN0cm9rZSk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJmaWxsIiwgZmlsbCk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJzdHJva2Utb3BhY2l0eSIsIHN0cm9rZW9wYWNpdHkpOworICBub2RlLnNldEF0dHJpYnV0ZSgiZmlsbC1vcGFjaXR5IiwgZmlsbG9wYWNpdHkpOworfQorCitmdW5jdGlvbiB0ZXh0KHAsc3QscG9zLGlkLGZvbnRzdHkpIHsKKyAgdmFyIGRub2RlLCBub2RlLCBkeCA9IDAsIGR5ID0gZm9udHNpemUvMywgc3RyID0gc3QudG9TdHJpbmcoKTsKKyAgaWYgKC8oYHxcJCkvLnRlc3Qoc3RyKSkgeyAgLy8gbGF5ZXIgZm9yIEFTQ0lJTWF0aE1MIGFuZCBMYVRlWE1hdGhNTAorICAgIGRub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3ZncGljdHVyZS5nZXRBdHRyaWJ1dGUoIm5hbWUiKSsibW1sIik7CisgICAgaWYgKGRub2RlIT1udWxsKSB7CisgICAgICBpZiAoaWQhPW51bGwpIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgICBpZiAobm9kZT09bnVsbCkgeworLy9hbGVydChkbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCkKKyAgICAgICAgbm9kZSA9IGNyZWF0ZUVsZW1lbnRYSFRNTCgiZGl2Iik7CisgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCJpZCIsIGlkKTsKKyAgICAgICAgbm9kZS5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CisgICAgICAgIGRub2RlLmFwcGVuZENoaWxkKG5vZGUpOworICAgICAgfQorICAgICAgd2hpbGUgKG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg+MCkgbm9kZS5yZW1vdmVDaGlsZChub2RlLmxhc3RDaGlsZCk7IAorICAgICAgbm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHIpKTsKKyAgICAgIGlmICgvYC8udGVzdChzdHIpKSBBTXByb2Nlc3NOb2RlKG5vZGUpOyBlbHNlIExNcHJvY2Vzc05vZGUobm9kZSk7CisgICAgICBkeCA9IC1ub2RlLm9mZnNldFdpZHRoLzI7CisgICAgICBkeSA9IC1ub2RlLm9mZnNldEhlaWdodC8yOworICAgICAgaWYgKHBvcyE9bnVsbCkgeworICAgICAgICBpZiAoL2Fib3ZlLy50ZXN0KHBvcykpIGR5ID0gLW5vZGUub2Zmc2V0SGVpZ2h0OworICAgICAgICBpZiAoL2JlbG93Ly50ZXN0KHBvcykpIGR5ID0gMDsKKyAgICAgICAgaWYgKC9yaWdodC8udGVzdChwb3MpKSBkeCA9IDA7CisgICAgICAgIGlmICggL2xlZnQvLnRlc3QocG9zKSkgZHggPSAtbm9kZS5vZmZzZXRXaWR0aDsKKyAgICAgIH0KKyAgICAgIG5vZGUuc3R5bGUubGVmdCA9ICIiKyhwWzBdKnh1bml0bGVuZ3RoK29yaWdpblswXStkeCkrInB4IjsKKyAgICAgIG5vZGUuc3R5bGUudG9wID0gIiIrKGhlaWdodC1wWzFdKnl1bml0bGVuZ3RoLW9yaWdpblsxXStkeSkrInB4IjsKKyAgICB9CisgICAgcmV0dXJuIHA7CisgIH0KKyAgdmFyIHRleHRhbmNob3IgPSAibWlkZGxlIjsgIC8vIHJlZ3VsYXIgdGV4dCBnb2VzIGludG8gU1ZHCisgIGlmIChwb3MhPW51bGwpIHsKKyAgICBpZiAoL2Fib3ZlLy50ZXN0KHBvcykpIGR5ID0gLWZvbnRzaXplLzI7CisgICAgaWYgKC9iZWxvdy8udGVzdChwb3MpKSBkeSA9IGZvbnRzaXplLTA7CisgICAgaWYgKC9yaWdodC8udGVzdChwb3MpKSB7dGV4dGFuY2hvciA9ICJzdGFydCI7IGR4ID0gZm9udHNpemUvNDt9CisgICAgaWYgKCAvbGVmdC8udGVzdChwb3MpKSB7dGV4dGFuY2hvciA9ICJlbmQiOyAgZHggPSAtZm9udHNpemUvNDt9CisgIH0KKyAgaWYgKGlkIT1udWxsKSBub2RlID0gZG9jLmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgaWYgKG5vZGU9PW51bGwpIHsKKyAgICBub2RlID0gbXlDcmVhdGVFbGVtZW50U1ZHKCJ0ZXh0Iik7CisgICAgbm9kZS5zZXRBdHRyaWJ1dGUoImlkIiwgaWQpOworICAgIHN2Z3BpY3R1cmUuYXBwZW5kQ2hpbGQobm9kZSk7CisgICAgbm9kZS5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoc3RyKSk7CisgIH0KKyAgd2hpbGUgKG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg+MSkgbm9kZS5yZW1vdmVDaGlsZChub2RlLmxhc3RDaGlsZCk7IAorICBub2RlLmxhc3RDaGlsZC5ub2RlVmFsdWUgPSAiXHhBMCIrc3RyKyJceEEwIjsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoIngiLHBbMF0qeHVuaXRsZW5ndGgrb3JpZ2luWzBdK2R4KTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoInkiLGhlaWdodC1wWzFdKnl1bml0bGVuZ3RoLW9yaWdpblsxXStkeSk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJmb250LXN0eWxlIiwoZm9udHN0eSE9bnVsbD9mb250c3R5OgorICAgIChzdHIuc2VhcmNoKC9eW2EtekEtWl0kLykhPS0xPyJpdGFsaWMiOmZvbnRzdHlsZSkpKTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoImZvbnQtZmFtaWx5Iixmb250ZmFtaWx5KTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoImZvbnQtc2l6ZSIsZm9udHNpemUpOworICBub2RlLnNldEF0dHJpYnV0ZSgiZm9udC13ZWlnaHQiLGZvbnR3ZWlnaHQpOworICBub2RlLnNldEF0dHJpYnV0ZSgidGV4dC1hbmNob3IiLHRleHRhbmNob3IpOworICBpZiAoZm9udHN0cm9rZSE9Im5vbmUiKSBub2RlLnNldEF0dHJpYnV0ZSgic3Ryb2tlIixmb250c3Ryb2tlKTsKKyAgaWYgKGZvbnRmaWxsIT0ibm9uZSIpIG5vZGUuc2V0QXR0cmlidXRlKCJmaWxsIixmb250ZmlsbCk7CisgIHJldHVybiBwOworfQorCitmdW5jdGlvbiBtdGV4dChwLHN0LHBvcyxmb250c3R5LGZvbnRzeikgeyAvLyBtZXRob2QgZm9yIHVwZGF0aW5nIHRleHQgb24gYW4gc3ZnCisvLyAidGhpcyIgaXMgdGhlIHRleHQgb2JqZWN0IG9yIHRoZSBzdmdwaWN0dXJlIG9iamVjdAorICB2YXIgdGV4dGFuY2hvciA9ICJtaWRkbGUiOworICB2YXIgZHggPSAwOyB2YXIgZHkgPSBmb250c2l6ZS8zOworICBpZiAocG9zIT1udWxsKSB7CisgICAgaWYgKHBvcy5zbGljZSgwLDUpPT0iYWJvdmUiKSBkeSA9IC1mb250c2l6ZS8yOworICAgIGlmIChwb3Muc2xpY2UoMCw1KT09ImJlbG93IikgZHkgPSBmb250c2l6ZS0wOworICAgIGlmIChwb3Muc2xpY2UoMCw1KT09InJpZ2h0IiB8fCBwb3Muc2xpY2UoNSwxMCk9PSJyaWdodCIpIHsKKyAgICAgIHRleHRhbmNob3IgPSAic3RhcnQiOworICAgICAgZHggPSBmb250c2l6ZS8yOworICAgIH0KKyAgICBpZiAocG9zLnNsaWNlKDAsNCk9PSJsZWZ0IiB8fCBwb3Muc2xpY2UoNSw5KT09ImxlZnQiKSB7CisgICAgICB0ZXh0YW5jaG9yID0gImVuZCI7CisgICAgICBkeCA9IC1mb250c2l6ZS8yOworICAgIH0KKyAgfQorICB2YXIgbm9kZSA9IHRoaXM7CisgIGlmICh0aGlzLm5vZGVOYW1lPT0ic3ZnIikgeworICAgIG5vZGUgPSBteUNyZWF0ZUVsZW1lbnRTVkcoInRleHQiKTsKKyAgICB0aGlzLmFwcGVuZENoaWxkKG5vZGUpOworICAgIG5vZGUuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKHN0KSk7CisgIH0KKyAgbm9kZS5sYXN0Q2hpbGQubm9kZVZhbHVlID0gc3Q7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJ4IixwWzBdK2R4KTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoInkiLHBbMV0rZHkpOworICBub2RlLnNldEF0dHJpYnV0ZSgiZm9udC1zdHlsZSIsKGZvbnRzdHkhPW51bGw/Zm9udHN0eTpmb250c3R5bGUpKTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoImZvbnQtZmFtaWx5Iixmb250ZmFtaWx5KTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoImZvbnQtc2l6ZSIsKGZvbnRzeiE9bnVsbD9mb250c3o6Zm9udHNpemUpKTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoImZvbnQtd2VpZ2h0Iixmb250d2VpZ2h0KTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoInRleHQtYW5jaG9yIix0ZXh0YW5jaG9yKTsKKyAgaWYgKGZvbnRzdHJva2UhPSJub25lIikgbm9kZS5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsZm9udHN0cm9rZSk7CisgIGlmIChmb250ZmlsbCE9Im5vbmUiKSBub2RlLnNldEF0dHJpYnV0ZSgiZmlsbCIsZm9udGZpbGwpOworfQorCitmdW5jdGlvbiBpbWFnZShpbWd1cmwscCx3LGgsaWQpIHsgLy8gbm90IHdvcmtpbmcgeWV0CisgIHZhciBub2RlOworICBpZiAoaWQhPW51bGwpIG5vZGUgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoaWQpOworICBpZiAobm9kZT09bnVsbCkgeworICAgIG5vZGUgPSBteUNyZWF0ZUVsZW1lbnRTVkcoImltYWdlIik7CisgICAgbm9kZS5zZXRBdHRyaWJ1dGUoImlkIiwgaWQpOworICAgIHN2Z3BpY3R1cmUuYXBwZW5kQ2hpbGQobm9kZSk7CisgIH0KKyAgbm9kZS5zZXRBdHRyaWJ1dGUoIngiLHBbMF0qeHVuaXRsZW5ndGgrb3JpZ2luWzBdKTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoInkiLGhlaWdodC1wWzFdKnl1bml0bGVuZ3RoLW9yaWdpblsxXSk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJ3aWR0aCIsdyk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLGgpOworICBub2RlLnNldEF0dHJpYnV0ZSgieGxpbms6aHJlZiIsIGltZ3VybCk7Cit9CisKK2Z1bmN0aW9uIEFTZG90KGNlbnRlcixyYWRpdXMscyxmKSB7IC8vIGNvb3JkaW5hdGVzIGluIHVuaXRzLCByYWRpdXMgaW4gcGl4ZWwKKyAgaWYgKHM9PW51bGwpIHMgPSBzdHJva2U7IGlmIChmPT1udWxsKSBmID0gZmlsbDsKKyAgdmFyIG5vZGUgPSBteUNyZWF0ZUVsZW1lbnRTVkcoImNpcmNsZSIpOworICBub2RlLnNldEF0dHJpYnV0ZSgiY3giLGNlbnRlclswXSp4dW5pdGxlbmd0aCtvcmlnaW5bMF0pOworICBub2RlLnNldEF0dHJpYnV0ZSgiY3kiLGhlaWdodC1jZW50ZXJbMV0qeXVuaXRsZW5ndGgtb3JpZ2luWzFdKTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoInIiLHJhZGl1cyk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLCBzdHJva2V3aWR0aCk7CisgIG5vZGUuc2V0QXR0cmlidXRlKCJzdHJva2UiLCBzKTsKKyAgbm9kZS5zZXRBdHRyaWJ1dGUoImZpbGwiLCBmKTsKKyAgc3ZncGljdHVyZS5hcHBlbmRDaGlsZChub2RlKTsKK30KKworZnVuY3Rpb24gZG90KGNlbnRlciwgdHlwLCBsYWJlbCwgcG9zLCBpZCkgeworICB2YXIgbm9kZTsKKyAgdmFyIGN4ID0gY2VudGVyWzBdKnh1bml0bGVuZ3RoK29yaWdpblswXTsKKyAgdmFyIGN5ID0gaGVpZ2h0LWNlbnRlclsxXSp5dW5pdGxlbmd0aC1vcmlnaW5bMV07CisgIGlmIChpZCE9bnVsbCkgbm9kZSA9IGRvYy5nZXRFbGVtZW50QnlJZChpZCk7CisgIGlmICh0eXA9PSIrIiB8fCB0eXA9PSItIiB8fCB0eXA9PSJ8IikgeworICAgIGlmIChub2RlPT1udWxsKSB7CisgICAgICBub2RlID0gbXlDcmVhdGVFbGVtZW50U1ZHKCJwYXRoIik7CisgICAgICBub2RlLnNldEF0dHJpYnV0ZSgiaWQiLCBpZCk7CisgICAgICBzdmdwaWN0dXJlLmFwcGVuZENoaWxkKG5vZGUpOworICAgIH0KKyAgICBpZiAodHlwPT0iKyIpIHsKKyAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCJkIiwKKyAgICAgICAgIiBNICIrKGN4LXRpY2tsZW5ndGgpKyIgIitjeSsiIEwgIisoY3grdGlja2xlbmd0aCkrIiAiK2N5KworICAgICAgICAiIE0gIitjeCsiICIrKGN5LXRpY2tsZW5ndGgpKyIgTCAiK2N4KyIgIisoY3krdGlja2xlbmd0aCkpOworICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsIC41KTsKKyAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCJzdHJva2UiLCBheGVzc3Ryb2tlKTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKHR5cD09Ii0iKSBub2RlLnNldEF0dHJpYnV0ZSgiZCIsCisgICAgICAgICIgTSAiKyhjeC10aWNrbGVuZ3RoKSsiICIrY3krIiBMICIrKGN4K3RpY2tsZW5ndGgpKyIgIitjeSk7CisgICAgICBlbHNlIG5vZGUuc2V0QXR0cmlidXRlKCJkIiwKKyAgICAgICAgIiBNICIrY3grIiAiKyhjeS10aWNrbGVuZ3RoKSsiIEwgIitjeCsiICIrKGN5K3RpY2tsZW5ndGgpKTsKKyAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLCBzdHJva2V3aWR0aCk7CisgICAgICBub2RlLnNldEF0dHJpYnV0ZSgic3Ryb2tlIiwgc3Ryb2tlKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaWYgKG5vZGU9PW51bGwpIHsKKyAgICAgIG5vZGUgPSBteUNyZWF0ZUVsZW1lbnRTVkcoImNpcmNsZSIpOworICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoImlkIiwgaWQpOworICAgICAgc3ZncGljdHVyZS5hcHBlbmRDaGlsZChub2RlKTsKKyAgICB9CisgICAgbm9kZS5zZXRBdHRyaWJ1dGUoImN4IixjeCk7CisgICAgbm9kZS5zZXRBdHRyaWJ1dGUoImN5IixjeSk7CisgICAgbm9kZS5zZXRBdHRyaWJ1dGUoInIiLGRvdHJhZGl1cyk7CisgICAgbm9kZS5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsIHN0cm9rZXdpZHRoKTsKKyAgICBub2RlLnNldEF0dHJpYnV0ZSgic3Ryb2tlIiwgc3Ryb2tlKTsKKyAgICBub2RlLnNldEF0dHJpYnV0ZSgiZmlsbCIsICh0eXA9PSJvcGVuIj8id2hpdGUiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cD09ImNsb3NlZCI/c3Ryb2tlOm1hcmtlcmZpbGwpKSk7CisgIH0KKyAgaWYgKGxhYmVsIT1udWxsKSAKKyAgICB0ZXh0KGNlbnRlcixsYWJlbCwocG9zPT1udWxsPyJiZWxvdyI6cG9zKSwoaWQ9PW51bGw/aWQ6aWQrImxhYmVsIikpCit9CisKK3BvaW50ID0gZG90OyAvL2FsdGVybmF0aXZlIG5hbWUKKworZnVuY3Rpb24gYXJyb3doZWFkKHAscSkgeyAvLyBkcmF3IGFycm93aGVhZCBhdCBxIChpbiB1bml0cykgYWRkIHNpemUgcGFyYW0KKyAgdmFyIHVwOworICB2YXIgdiA9IFtwWzBdKnh1bml0bGVuZ3RoK29yaWdpblswXSxoZWlnaHQtcFsxXSp5dW5pdGxlbmd0aC1vcmlnaW5bMV1dOworICB2YXIgdyA9IFtxWzBdKnh1bml0bGVuZ3RoK29yaWdpblswXSxoZWlnaHQtcVsxXSp5dW5pdGxlbmd0aC1vcmlnaW5bMV1dOworICB2YXIgdSA9IFt3WzBdLXZbMF0sd1sxXS12WzFdXTsKKyAgdmFyIGQgPSBNYXRoLnNxcnQodVswXSp1WzBdK3VbMV0qdVsxXSk7CisgIGlmIChkID4gMC4wMDAwMDAwMSkgeworICAgIHUgPSBbdVswXS9kLCB1WzFdL2RdOworICAgIHVwID0gWy11WzFdLHVbMF1dOworICAgIHZhciBub2RlID0gbXlDcmVhdGVFbGVtZW50U1ZHKCJwYXRoIik7CisgICAgbm9kZS5zZXRBdHRyaWJ1dGUoImQiLCJNICIrKHdbMF0tMTUqdVswXS00KnVwWzBdKSsiICIrCisgICAgICAod1sxXS0xNSp1WzFdLTQqdXBbMV0pKyIgTCAiKyh3WzBdLTMqdVswXSkrIiAiKyh3WzFdLTMqdVsxXSkrIiBMICIrCisgICAgICAod1swXS0xNSp1WzBdKzQqdXBbMF0pKyIgIisod1sxXS0xNSp1WzFdKzQqdXBbMV0pKyIgeiIpOworICAgIG5vZGUuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLCBtYXJrZXJzdHJva2V3aWR0aCk7CisgICAgbm9kZS5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsIHN0cm9rZSk7IC8qd2FzIG1hcmtlcnN0cm9rZSovCisgICAgbm9kZS5zZXRBdHRyaWJ1dGUoImZpbGwiLCBzdHJva2UpOyAvKndhcyBhcnJvd2ZpbGwqLworICAgIG5vZGUuc2V0QXR0cmlidXRlKCJzdHJva2Utb3BhY2l0eSIsIHN0cm9rZW9wYWNpdHkpOworICAgIG5vZGUuc2V0QXR0cmlidXRlKCJmaWxsLW9wYWNpdHkiLCBmaWxsb3BhY2l0eSk7CisgICAgc3ZncGljdHVyZS5hcHBlbmRDaGlsZChub2RlKTsgICAgCisgIH0KK30KKworZnVuY3Rpb24gY2hvcFooc3QpIHsKKyAgdmFyIGsgPSBzdC5pbmRleE9mKCIuIik7CisgIGlmIChrPT0tMSkgcmV0dXJuIHN0OworICBmb3IgKHZhciBpPXN0Lmxlbmd0aC0xOyBpPmsgJiYgc3QuY2hhckF0KGkpPT0iMCI7IGktLSk7CisgIGlmIChpPT1rKSBpLS07CisgIHJldHVybiBzdC5zbGljZSgwLGkrMSk7Cit9CisKK2Z1bmN0aW9uIGdyaWQoZHgsZHkpIHsgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKyAgYXhlcyhkeCxkeSxudWxsLGR4LGR5KQorfQorCitmdW5jdGlvbiBub2F4ZXMoKSB7CisgIGlmICghaW5pdGlhbGl6ZWQpIGluaXRQaWN0dXJlKCk7Cit9CisKK2Z1bmN0aW9uIGF4ZXMoZHgsZHksbGFiZWxzLGdkeCxnZHkpIHsKKy8veHNjbD14IGlzIGVxdWl2YWxlbnQgdG8geHRpY2s9eDsgeGdyaWQ9eDsgbGFiZWxzPXRydWU7CisgIHZhciB4LCB5LCBsZHgsIGxkeSwgbHgsIGx5LCBseHAsIGx5cCwgcG5vZGUsIHN0OworICBpZiAoIWluaXRpYWxpemVkKSBpbml0UGljdHVyZSgpOworICBpZiAodHlwZW9mIGR4PT0ic3RyaW5nIikgeyBsYWJlbHMgPSBkeDsgZHggPSBudWxsOyB9CisgIGlmICh0eXBlb2YgZHk9PSJzdHJpbmciKSB7IGdkeCA9IGR5OyBkeSA9IG51bGw7IH0KKyAgaWYgKHhzY2whPW51bGwpIHtkeCA9IHhzY2w7IGdkeCA9IHhzY2w7IGxhYmVscyA9IGR4fQorICBpZiAoeXNjbCE9bnVsbCkge2R5ID0geXNjbDsgZ2R5ID0geXNjbH0KKyAgaWYgKHh0aWNrIT1udWxsKSB7ZHggPSB4dGlja30KKyAgaWYgKHl0aWNrIT1udWxsKSB7ZHkgPSB5dGlja30KKyAgZHggPSAoZHg9PW51bGw/eHVuaXRsZW5ndGg6ZHgqeHVuaXRsZW5ndGgpOworICBkeSA9IChkeT09bnVsbD9keDpkeSp5dW5pdGxlbmd0aCk7CisgIGZvbnRzaXplID0gTWF0aC5taW4oZHgvMixkeS8yLDE2KTsgLy9hbGVydChmb250c2l6ZSkKKyAgdGlja2xlbmd0aCA9IGZvbnRzaXplLzQ7CisgIGlmICh4Z3JpZCE9bnVsbCkgZ2R4ID0geGdyaWQ7CisgIGlmICh5Z3JpZCE9bnVsbCkgZ2R5ID0geWdyaWQ7CisgIGlmIChnZHghPW51bGwpIHsKKyAgICBnZHggPSAodHlwZW9mIGdkeD09InN0cmluZyI/ZHg6Z2R4Knh1bml0bGVuZ3RoKTsKKyAgICBnZHkgPSAoZ2R5PT1udWxsP2R5OmdkeSp5dW5pdGxlbmd0aCk7CisgICAgcG5vZGUgPSBteUNyZWF0ZUVsZW1lbnRTVkcoInBhdGgiKTsKKyAgICBzdD0iIjsKKyAgICBmb3IgKHggPSBvcmlnaW5bMF07IHg8d2lkdGg7IHggPSB4K2dkeCkKKyAgICAgIHN0ICs9ICIgTSIreCsiLDAiKyIgIit4KyIsIitoZWlnaHQ7CisgICAgZm9yICh4ID0gb3JpZ2luWzBdLWdkeDsgeD4wOyB4ID0geC1nZHgpCisgICAgICBzdCArPSAiIE0iK3grIiwwIisiICIreCsiLCIraGVpZ2h0OworICAgIGZvciAoeSA9IGhlaWdodC1vcmlnaW5bMV07IHk8aGVpZ2h0OyB5ID0geStnZHkpCisgICAgICBzdCArPSAiIE0wLCIreSsiICIrd2lkdGgrIiwiK3k7CisgICAgZm9yICh5ID0gaGVpZ2h0LW9yaWdpblsxXS1nZHk7IHk+MDsgeSA9IHktZ2R5KQorICAgICAgc3QgKz0gIiBNMCwiK3krIiAiK3dpZHRoKyIsIit5OworICAgIHBub2RlLnNldEF0dHJpYnV0ZSgiZCIsc3QpOworICAgIHBub2RlLnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIiwgLjUpOworICAgIHBub2RlLnNldEF0dHJpYnV0ZSgic3Ryb2tlIiwgZ3JpZHN0cm9rZSk7CisgICAgcG5vZGUuc2V0QXR0cmlidXRlKCJmaWxsIiwgZmlsbCk7CisgICAgc3ZncGljdHVyZS5hcHBlbmRDaGlsZChwbm9kZSk7CisgIH0KKyAgcG5vZGUgPSBteUNyZWF0ZUVsZW1lbnRTVkcoInBhdGgiKTsKKyAgc3Q9Ik0wLCIrKGhlaWdodC1vcmlnaW5bMV0pKyIgIit3aWR0aCsiLCIrCisgICAgKGhlaWdodC1vcmlnaW5bMV0pKyIgTSIrb3JpZ2luWzBdKyIsMCAiK29yaWdpblswXSsiLCIraGVpZ2h0OworICBmb3IgKHggPSBvcmlnaW5bMF0rZHg7IHg8d2lkdGg7IHggPSB4K2R4KQorICAgIHN0ICs9ICIgTSIreCsiLCIrKGhlaWdodC1vcmlnaW5bMV0rdGlja2xlbmd0aCkrIiAiK3grIiwiKworICAgICAgICAgICAoaGVpZ2h0LW9yaWdpblsxXS10aWNrbGVuZ3RoKTsKKyAgZm9yICh4ID0gb3JpZ2luWzBdLWR4OyB4PjA7IHggPSB4LWR4KQorICAgIHN0ICs9ICIgTSIreCsiLCIrKGhlaWdodC1vcmlnaW5bMV0rdGlja2xlbmd0aCkrIiAiK3grIiwiKworICAgICAgICAgICAoaGVpZ2h0LW9yaWdpblsxXS10aWNrbGVuZ3RoKTsKKyAgZm9yICh5ID0gaGVpZ2h0LW9yaWdpblsxXStkeTsgeTxoZWlnaHQ7IHkgPSB5K2R5KQorICAgIHN0ICs9ICIgTSIrKG9yaWdpblswXSt0aWNrbGVuZ3RoKSsiLCIreSsiICIrKG9yaWdpblswXS10aWNrbGVuZ3RoKSsiLCIreTsKKyAgZm9yICh5ID0gaGVpZ2h0LW9yaWdpblsxXS1keTsgeT4wOyB5ID0geS1keSkKKyAgICBzdCArPSAiIE0iKyhvcmlnaW5bMF0rdGlja2xlbmd0aCkrIiwiK3krIiAiKyhvcmlnaW5bMF0tdGlja2xlbmd0aCkrIiwiK3k7CisgIGlmIChsYWJlbHMhPW51bGwpIHdpdGggKE1hdGgpIHsKKyAgICBsZHggPSBkeC94dW5pdGxlbmd0aDsKKyAgICBsZHkgPSBkeS95dW5pdGxlbmd0aDsKKyAgICBseCA9ICh4bWluPjAgfHwgeG1heDwwP3htaW46MCk7CisgICAgbHkgPSAoeW1pbj4wIHx8IHltYXg8MD95bWluOjApOworICAgIGx4cCA9IChseT09MD8iYmVsb3ciOiJhYm92ZSIpOworICAgIGx5cCA9IChseD09MD8ibGVmdCI6InJpZ2h0Iik7CisgICAgdmFyIGRkeCA9IGZsb29yKDEuMS1sb2cobGR4KS9sb2coMTApKSsxOworICAgIHZhciBkZHkgPSBmbG9vcigxLjEtbG9nKGxkeSkvbG9nKDEwKSkrMTsKKyAgICBmb3IgKHggPSBsZHg7IHg8PXhtYXg7IHggPSB4K2xkeCkKKyAgICAgIHRleHQoW3gsbHldLGNob3BaKHgudG9GaXhlZChkZHgpKSxseHApOworICAgIGZvciAoeCA9IC1sZHg7IHhtaW48PXg7IHggPSB4LWxkeCkKKyAgICAgIHRleHQoW3gsbHldLGNob3BaKHgudG9GaXhlZChkZHgpKSxseHApOworICAgIGZvciAoeSA9IGxkeTsgeTw9eW1heDsgeSA9IHkrbGR5KQorICAgICAgdGV4dChbbHgseV0sY2hvcFooeS50b0ZpeGVkKGRkeSkpLGx5cCk7CisgICAgZm9yICh5ID0gLWxkeTsgeW1pbjw9eTsgeSA9IHktbGR5KQorICAgICAgdGV4dChbbHgseV0sY2hvcFooeS50b0ZpeGVkKGRkeSkpLGx5cCk7CisgIH0KKyAgZm9udHNpemUgPSBkZWZhdWx0Zm9udHNpemU7CisgIHBub2RlLnNldEF0dHJpYnV0ZSgiZCIsc3QpOworICBwbm9kZS5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsIC41KTsKKyAgcG5vZGUuc2V0QXR0cmlidXRlKCJzdHJva2UiLCBheGVzc3Ryb2tlKTsKKyAgcG5vZGUuc2V0QXR0cmlidXRlKCJmaWxsIiwgZmlsbCk7CisgIHBub2RlLnNldEF0dHJpYnV0ZSgic3Ryb2tlLW9wYWNpdHkiLCBzdHJva2VvcGFjaXR5KTsKKyAgcG5vZGUuc2V0QXR0cmlidXRlKCJmaWxsLW9wYWNpdHkiLCBmaWxsb3BhY2l0eSk7CisgIHN2Z3BpY3R1cmUuYXBwZW5kQ2hpbGQocG5vZGUpOworfQorCitmdW5jdGlvbiBtYXRoanMoc3QpIHsKKyAgLy90cmFuc2xhdGUgYSBtYXRoIGZvcm11bGEgdG8ganMgZnVuY3Rpb24gbm90YXRpb24KKyAgLy8gYV5iIC0tPiBwb3coYSxiKQorICAvLyBuYSAtLT4gbiphCisgIC8vICguLi4pZCAtLT4gKC4uLikqZAorICAvLyBuISAtLT4gZmFjdG9yaWFsKG4pCisgIC8vIHNpbl4tMSAtLT4gYXJjc2luIGV0Yy4KKyAgLy93aGlsZSBeIGluIHN0cmluZywgZmluZCB0ZXJtIG9uIGxlZnQgYW5kIHJpZ2h0CisgIC8vc2xpY2UgYW5kIGNvbmNhdCBuZXcgZm9ybXVsYSBzdHJpbmcKKyAgc3QgPSBzdC5yZXBsYWNlKC9ccy9nLCIiKTsKKyAgaWYgKHN0LmluZGV4T2YoIl4tMSIpIT0tMSkgeworICAgIHN0ID0gc3QucmVwbGFjZSgvc2luXF4tMS9nLCJhcmNzaW4iKTsKKyAgICBzdCA9IHN0LnJlcGxhY2UoL2Nvc1xeLTEvZywiYXJjY29zIik7CisgICAgc3QgPSBzdC5yZXBsYWNlKC90YW5cXi0xL2csImFyY3RhbiIpOworICAgIHN0ID0gc3QucmVwbGFjZSgvc2VjXF4tMS9nLCJhcmNzZWMiKTsKKyAgICBzdCA9IHN0LnJlcGxhY2UoL2NzY1xeLTEvZywiYXJjY3NjIik7CisgICAgc3QgPSBzdC5yZXBsYWNlKC9jb3RcXi0xL2csImFyY2NvdCIpOworICAgIHN0ID0gc3QucmVwbGFjZSgvc2luaFxeLTEvZywiYXJjc2luaCIpOworICAgIHN0ID0gc3QucmVwbGFjZSgvY29zaFxeLTEvZywiYXJjY29zaCIpOworICAgIHN0ID0gc3QucmVwbGFjZSgvdGFuaFxeLTEvZywiYXJjdGFuaCIpOworICAgIHN0ID0gc3QucmVwbGFjZSgvc2VjaFxeLTEvZywiYXJjc2VjaCIpOworICAgIHN0ID0gc3QucmVwbGFjZSgvY3NjaFxeLTEvZywiYXJjY3NjaCIpOworICAgIHN0ID0gc3QucmVwbGFjZSgvY290aFxeLTEvZywiYXJjY290aCIpOworICB9CisgIHN0ID0gc3QucmVwbGFjZSgvXmUkL2csIihNYXRoLkUpIik7CisgIHN0ID0gc3QucmVwbGFjZSgvXmUoW15hLXpBLVpdKS9nLCIoTWF0aC5FKSQxIik7CisgIHN0ID0gc3QucmVwbGFjZSgvKFteYS16QS1aXSllL2csIiQxKE1hdGguRSkiKTsKKy8vICBzdCA9IHN0LnJlcGxhY2UoLyhbXmEtekEtWl0pZShbXmEtekEtWl0pL2csIiQxKE1hdGguRSkkMiIpOworICBzdCA9IHN0LnJlcGxhY2UoLyhbMC05XSkoW1woYS16QS1aXSkvZywiJDEqJDIiKTsKKyAgc3QgPSBzdC5yZXBsYWNlKC9cKShbXCgwLTlhLXpBLVpdKS9nLCJcKSokMSIpOworICB2YXIgaSxqLGssIGNoLCBuZXN0ZWQ7CisgIHdoaWxlICgoaT1zdC5pbmRleE9mKCJeIikpIT0tMSkgeworICAgIC8vZmluZCBsZWZ0IGFyZ3VtZW50CisgICAgaWYgKGk9PTApIHJldHVybiAiRXJyb3I6IG1pc3NpbmcgYXJndW1lbnQiOworICAgIGogPSBpLTE7CisgICAgY2ggPSBzdC5jaGFyQXQoaik7CisgICAgaWYgKGNoPj0iMCIgJiYgY2g8PSI5Iikgey8vIGxvb2sgZm9yIChkZWNpbWFsKSBudW1iZXIKKyAgICAgIGotLTsKKyAgICAgIHdoaWxlIChqPj0wICYmIChjaD1zdC5jaGFyQXQoaikpPj0iMCIgJiYgY2g8PSI5Iikgai0tOworICAgICAgaWYgKGNoPT0iLiIpIHsKKyAgICAgICAgai0tOworICAgICAgICB3aGlsZSAoaj49MCAmJiAoY2g9c3QuY2hhckF0KGopKT49IjAiICYmIGNoPD0iOSIpIGotLTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGNoPT0iKSIpIHsvLyBsb29rIGZvciBtYXRjaGluZyBvcGVuaW5nIGJyYWNrZXQgYW5kIGZ1bmN0aW9uIG5hbWUKKyAgICAgIG5lc3RlZCA9IDE7CisgICAgICBqLS07CisgICAgICB3aGlsZSAoaj49MCAmJiBuZXN0ZWQ+MCkgeworICAgICAgICBjaCA9IHN0LmNoYXJBdChqKTsKKyAgICAgICAgaWYgKGNoPT0iKCIpIG5lc3RlZC0tOworICAgICAgICBlbHNlIGlmIChjaD09IikiKSBuZXN0ZWQrKzsKKyAgICAgICAgai0tOworICAgICAgfQorICAgICAgd2hpbGUgKGo+PTAgJiYgKGNoPXN0LmNoYXJBdChqKSk+PSJhIiAmJiBjaDw9InoiIHx8IGNoPj0iQSIgJiYgY2g8PSJaIikKKyAgICAgICAgai0tOworICAgIH0gZWxzZSBpZiAoY2g+PSJhIiAmJiBjaDw9InoiIHx8IGNoPj0iQSIgJiYgY2g8PSJaIikgey8vIGxvb2sgZm9yIHZhcmlhYmxlCisgICAgICBqLS07CisgICAgICB3aGlsZSAoaj49MCAmJiAoY2g9c3QuY2hhckF0KGopKT49ImEiICYmIGNoPD0ieiIgfHwgY2g+PSJBIiAmJiBjaDw9IloiKQorICAgICAgICBqLS07CisgICAgfSBlbHNlIHsgCisgICAgICByZXR1cm4gIkVycm9yOiBpbmNvcnJlY3Qgc3ludGF4IGluICIrc3QrIiBhdCBwb3NpdGlvbiAiK2o7CisgICAgfQorICAgIC8vZmluZCByaWdodCBhcmd1bWVudAorICAgIGlmIChpPT1zdC5sZW5ndGgtMSkgcmV0dXJuICJFcnJvcjogbWlzc2luZyBhcmd1bWVudCI7CisgICAgayA9IGkrMTsKKyAgICBjaCA9IHN0LmNoYXJBdChrKTsKKyAgICBpZiAoY2g+PSIwIiAmJiBjaDw9IjkiIHx8IGNoPT0iLSIpIHsvLyBsb29rIGZvciBzaWduZWQgKGRlY2ltYWwpIG51bWJlcgorICAgICAgaysrOworICAgICAgd2hpbGUgKGs8c3QubGVuZ3RoICYmIChjaD1zdC5jaGFyQXQoaykpPj0iMCIgJiYgY2g8PSI5IikgaysrOworICAgICAgaWYgKGNoPT0iLiIpIHsKKyAgICAgICAgaysrOworICAgICAgICB3aGlsZSAoazxzdC5sZW5ndGggJiYgKGNoPXN0LmNoYXJBdChrKSk+PSIwIiAmJiBjaDw9IjkiKSBrKys7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChjaD09IigiKSB7Ly8gbG9vayBmb3IgbWF0Y2hpbmcgY2xvc2luZyBicmFja2V0IGFuZCBmdW5jdGlvbiBuYW1lCisgICAgICBuZXN0ZWQgPSAxOworICAgICAgaysrOworICAgICAgd2hpbGUgKGs8c3QubGVuZ3RoICYmIG5lc3RlZD4wKSB7CisgICAgICAgIGNoID0gc3QuY2hhckF0KGspOworICAgICAgICBpZiAoY2g9PSIoIikgbmVzdGVkKys7CisgICAgICAgIGVsc2UgaWYgKGNoPT0iKSIpIG5lc3RlZC0tOworICAgICAgICBrKys7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChjaD49ImEiICYmIGNoPD0ieiIgfHwgY2g+PSJBIiAmJiBjaDw9IloiKSB7Ly8gbG9vayBmb3IgdmFyaWFibGUKKyAgICAgIGsrKzsKKyAgICAgIHdoaWxlIChrPHN0Lmxlbmd0aCAmJiAoY2g9c3QuY2hhckF0KGspKT49ImEiICYmIGNoPD0ieiIgfHwKKyAgICAgICAgICAgICAgIGNoPj0iQSIgJiYgY2g8PSJaIikgaysrOworICAgIH0gZWxzZSB7IAorICAgICAgcmV0dXJuICJFcnJvcjogaW5jb3JyZWN0IHN5bnRheCBpbiAiK3N0KyIgYXQgcG9zaXRpb24gIitrOworICAgIH0KKyAgICBzdCA9IHN0LnNsaWNlKDAsaisxKSsiTWF0aC5wb3coIitzdC5zbGljZShqKzEsaSkrIiwiK3N0LnNsaWNlKGkrMSxrKSsiKSIrCisgICAgICAgICAgIHN0LnNsaWNlKGspOworICB9CisgIHdoaWxlICgoaT1zdC5pbmRleE9mKCIhIikpIT0tMSkgeworICAgIC8vZmluZCBsZWZ0IGFyZ3VtZW50CisgICAgaWYgKGk9PTApIHJldHVybiAiRXJyb3I6IG1pc3NpbmcgYXJndW1lbnQiOworICAgIGogPSBpLTE7CisgICAgY2ggPSBzdC5jaGFyQXQoaik7CisgICAgaWYgKGNoPj0iMCIgJiYgY2g8PSI5Iikgey8vIGxvb2sgZm9yIChkZWNpbWFsKSBudW1iZXIKKyAgICAgIGotLTsKKyAgICAgIHdoaWxlIChqPj0wICYmIChjaD1zdC5jaGFyQXQoaikpPj0iMCIgJiYgY2g8PSI5Iikgai0tOworICAgICAgaWYgKGNoPT0iLiIpIHsKKyAgICAgICAgai0tOworICAgICAgICB3aGlsZSAoaj49MCAmJiAoY2g9c3QuY2hhckF0KGopKT49IjAiICYmIGNoPD0iOSIpIGotLTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGNoPT0iKSIpIHsvLyBsb29rIGZvciBtYXRjaGluZyBvcGVuaW5nIGJyYWNrZXQgYW5kIGZ1bmN0aW9uIG5hbWUKKyAgICAgIG5lc3RlZCA9IDE7CisgICAgICBqLS07CisgICAgICB3aGlsZSAoaj49MCAmJiBuZXN0ZWQ+MCkgeworICAgICAgICBjaCA9IHN0LmNoYXJBdChqKTsKKyAgICAgICAgaWYgKGNoPT0iKCIpIG5lc3RlZC0tOworICAgICAgICBlbHNlIGlmIChjaD09IikiKSBuZXN0ZWQrKzsKKyAgICAgICAgai0tOworICAgICAgfQorICAgICAgd2hpbGUgKGo+PTAgJiYgKGNoPXN0LmNoYXJBdChqKSk+PSJhIiAmJiBjaDw9InoiIHx8IGNoPj0iQSIgJiYgY2g8PSJaIikKKyAgICAgICAgai0tOworICAgIH0gZWxzZSBpZiAoY2g+PSJhIiAmJiBjaDw9InoiIHx8IGNoPj0iQSIgJiYgY2g8PSJaIikgey8vIGxvb2sgZm9yIHZhcmlhYmxlCisgICAgICBqLS07CisgICAgICB3aGlsZSAoaj49MCAmJiAoY2g9c3QuY2hhckF0KGopKT49ImEiICYmIGNoPD0ieiIgfHwgY2g+PSJBIiAmJiBjaDw9IloiKQorICAgICAgICBqLS07CisgICAgfSBlbHNlIHsgCisgICAgICByZXR1cm4gIkVycm9yOiBpbmNvcnJlY3Qgc3ludGF4IGluICIrc3QrIiBhdCBwb3NpdGlvbiAiK2o7CisgICAgfQorICAgIHN0ID0gc3Quc2xpY2UoMCxqKzEpKyJmYWN0b3JpYWwoIitzdC5zbGljZShqKzEsaSkrIikiK3N0LnNsaWNlKGkrMSk7CisgIH0KKyAgcmV0dXJuIHN0OworfQorCitmdW5jdGlvbiBwbG90KGZ1bix4X21pbix4X21heCxwb2ludHMsaWQsZW5kcHRzKSB7CisgIHZhciBwdGggPSBbXTsKKyAgdmFyIGYgPSBmdW5jdGlvbih4KSB7IHJldHVybiB4IH0sIGcgPSBmdW47CisgIHZhciBuYW1lID0gbnVsbDsKKyAgaWYgKHR5cGVvZiBmdW49PSJzdHJpbmciKSAKKyAgICBldmFsKCJnID0gZnVuY3Rpb24oeCl7IHdpdGgoTWF0aCkgcmV0dXJuICIrbWF0aGpzKGZ1bikrIiB9Iik7CisgIGVsc2UgaWYgKHR5cGVvZiBmdW49PSJvYmplY3QiKSB7CisgICAgZXZhbCgiZiA9IGZ1bmN0aW9uKHQpeyB3aXRoKE1hdGgpIHJldHVybiAiK21hdGhqcyhmdW5bMF0pKyIgfSIpOworICAgIGV2YWwoImcgPSBmdW5jdGlvbih0KXsgd2l0aChNYXRoKSByZXR1cm4gIittYXRoanMoZnVuWzFdKSsiIH0iKTsKKyAgfQorICBpZiAodHlwZW9mIHhfbWluPT0ic3RyaW5nIikgeyBuYW1lID0geF9taW47IHhfbWluID0geG1pbiB9CisgIGVsc2UgbmFtZSA9IGlkOworICB2YXIgbWluID0gKHhfbWluPT1udWxsP3htaW46eF9taW4pOworICB2YXIgbWF4ID0gKHhfbWF4PT1udWxsP3htYXg6eF9tYXgpOworICB2YXIgaW5jID0gbWF4LW1pbi0wLjAwMDAwMSoobWF4LW1pbik7CisgIGluYyA9IChwb2ludHM9PW51bGw/aW5jLzIwMDppbmMvcG9pbnRzKTsKKyAgdmFyIGd0OworLy9hbGVydCh0eXBlb2YgZyhtaW4pKQorICBmb3IgKHZhciB0ID0gbWluOyB0IDw9IG1heDsgdCArPSBpbmMpIHsKKyAgICBndCA9IGcodCk7CisgICAgaWYgKCEoaXNOYU4oZ3QpfHxNYXRoLmFicyhndCk9PSJJbmZpbml0eSIpKSBwdGhbcHRoLmxlbmd0aF0gPSBbZih0KSwgZ3RdOworICB9CisgIHBhdGgocHRoLG5hbWUsbnVsbCxlbmRwdHMpOworICByZXR1cm4gcHRoOworfQorCisvLyBtYWtlIHBvbGFyIHBsb3QKKworLy8gbWFrZSBSaWVtYW5uIHN1bXMKKworZnVuY3Rpb24gc2xvcGVmaWVsZChmdW4sZHgsZHkpIHsKKyAgdmFyIGcgPSBmdW47CisgIGlmICh0eXBlb2YgZnVuPT0ic3RyaW5nIikgCisgICAgZXZhbCgiZyA9IGZ1bmN0aW9uKHgseSl7IHdpdGgoTWF0aCkgcmV0dXJuICIrbWF0aGpzKGZ1bikrIiB9Iik7CisgIHZhciBneHkseCx5LHUsdixkejsKKyAgaWYgKGR4PT1udWxsKSBkeD0xOworICBpZiAoZHk9PW51bGwpIGR5PTE7CisgIGR6ID0gTWF0aC5zcXJ0KGR4KmR4K2R5KmR5KS82OworICB2YXIgeF9taW4gPSBNYXRoLmNlaWwoeG1pbi9keCk7CisgIHZhciB5X21pbiA9IE1hdGguY2VpbCh5bWluL2R5KTsKKyAgZm9yICh4ID0geF9taW47IHggPD0geG1heDsgeCArPSBkeCkKKyAgICBmb3IgKHkgPSB5X21pbjsgeSA8PSB5bWF4OyB5ICs9IGR5KSB7CisgICAgICBneHkgPSBnKHgseSk7CisgICAgICBpZiAoIWlzTmFOKGd4eSkpIHsKKyAgICAgICAgaWYgKE1hdGguYWJzKGd4eSk9PSJJbmZpbml0eSIpIHt1ID0gMDsgdiA9IGR6O30KKyAgICAgICAgZWxzZSB7dSA9IGR6L01hdGguc3FydCgxK2d4eSpneHkpOyB2ID0gZ3h5KnU7fQorICAgICAgICBsaW5lKFt4LXUseS12XSxbeCt1LHkrdl0pOworICAgICAgfQorICAgIH0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy91c2VyIGdyYXBoaWNzIGNvbW1hbmRzIGVuZCBoZXJlLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitmdW5jdGlvbiBzaG93X3Byb3BzKG9iaikgeworICB2YXIgcmVzdWx0ID0gIiI7CisgIGZvciAodmFyIGk9MDsgaTwgb2JqLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspCisgICAgcmVzdWx0ICs9IG9iai5jaGlsZE5vZGVzLml0ZW0oaSkgKyAiXG4iOworICByZXR1cm4gcmVzdWx0OworfQorCitmdW5jdGlvbiBkaXNwbGF5Q29vcmQoZXZ0KSB7CisgIGlmIChzaG93Y29vcmRpbmF0ZXMpIHsKKyAgICB2YXIgc3Zncm9vdCA9IGV2dC50YXJnZXQucGFyZW50Tm9kZTsKKyAgICB2YXIgbmwgPSBzdmdyb290LmNoaWxkTm9kZXM7CisgICAgZm9yICh2YXIgaT0wOyBpPG5sLmxlbmd0aCAmJiBubC5pdGVtKGkpLm5vZGVOYW1lIT0idGV4dCI7IGkrKyk7CisgICAgdmFyIGNub2RlID0gbmwuaXRlbShpKTsKKyAgICBjbm9kZS5tdGV4dCA9IG10ZXh0OworICAgIGNub2RlLm10ZXh0KFtzdmdyb290LmdldEF0dHJpYnV0ZSgid2lkdGgiKS0oLTcpLHN2Z3Jvb3QuZ2V0QXR0cmlidXRlKCJoZWlnaHQiKS03XSwiKCIrZ2V0WChldnQpLnRvRml4ZWQoMikrIiwgIitnZXRZKGV2dCkudG9GaXhlZCgyKSsiKSIsICJsZWZ0IiwgIiIsICIxMSIpOworLyogICAgdmFyIGRub2RlID0gbmwuaXRlbShpKzEpOworICAgIGRub2RlLm10ZXh0ID0gbXRleHQ7CisgICAgZG5vZGUubXRleHQoWzAsc3Zncm9vdC5nZXRBdHRyaWJ1dGUoImhlaWdodCIpLTZdLCJUcnkgKHNoaWZ0L2FsdCktZGJsY2xpY2siLCAicmlnaHQiLCAiIiwgIjgiKTsKKyovICB9Cit9CisKK2Z1bmN0aW9uIHJlbW92ZUNvb3JkKGV2dCkgeworICAgIHZhciBzdmdyb290ID0gZXZ0LnRhcmdldC5wYXJlbnROb2RlOworICAgIHZhciBubCA9IHN2Z3Jvb3QuY2hpbGROb2RlczsKKyAgICBmb3IgKHZhciBpPTA7IGk8bmwubGVuZ3RoICYmIG5sLml0ZW0oaSkubm9kZU5hbWUhPSJ0ZXh0IjsgaSsrKTsKKyAgICB2YXIgY25vZGUgPSBubC5pdGVtKGkpOworICAgIGNub2RlLm10ZXh0ID0gbXRleHQ7CisgICAgY25vZGUubXRleHQoW3N2Z3Jvb3QuZ2V0QXR0cmlidXRlKCJ3aWR0aCIpLTAsc3Zncm9vdC5nZXRBdHRyaWJ1dGUoImhlaWdodCIpLTBdLCIiLCAiYWJvdmVsZWZ0IiwgIiIpOworLyogICAgdmFyIGRub2RlID0gbmwuaXRlbShpKzEpOworICAgIGRub2RlLm10ZXh0ID0gbXRleHQ7CisgICAgZG5vZGUubXRleHQoWzAsc3Zncm9vdC5nZXRBdHRyaWJ1dGUoImhlaWdodCIpLTBdLCIiLCAiYWJvdmVyaWdodCIsICIiKTsKKyovfQorCitmdW5jdGlvbiBpbml0QVNDSUlNYXRoQ2FsY3VsYXRvcnMobGkpIHsKKyAgdmFyIGk7CisgIGZvciAoaT0wOyBpPGxpLmxlbmd0aDsgaSsrKSB7CisgICAgbGlbaV0uaW5uZXJIVE1MID0gY2FsY3N0cjsKKyAgICBBTXByb2Nlc3NOb2RlKGxpW2ldKTsKKyAgfQorICBsaSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZXh0YXJlYSIpOworICB2YXIgc3Q7CisgIGZvciAoaT0wOyBpPGxpLmxlbmd0aDsgaSsrKSB7CisgICAgc3QgPSBsaVtpXS5nZXRBdHRyaWJ1dGUoIm9ua2V5dXAiKTsKKyAgICBpZiAoc3QhPW51bGwpIGV2YWwoU3RyaW5nKHN0KS5yZXBsYWNlKC9mdW5jdGlvbiBhbm9ueW1vdXNcKFwpLywiIikpOworICB9Cit9CisKK2Z1bmN0aW9uIGNhbGN1bGF0ZShpbnB1dElkLG91dHB1dElkKSB7CisgIHZhciBzdHIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbnB1dElkKS52YWx1ZTsKKyAgdmFyIGVyciA9ICIiOworICB2YXIgaW5kID0gc3RyLmxhc3RJbmRleE9mKCJcbiIpOworICBpZiAoaW5kPT1zdHIubGVuZ3RoLTEpIHN0ciA9IHN0ci5zbGljZSgwLGluZCk7CisgIHN0ciA9IHN0ci5zbGljZShzdHIubGFzdEluZGV4T2YoIlxuIikrMSk7CisgIHRyeSB7CisgICAgdmFyIHJlcyA9IGV2YWwobWF0aGpzKHN0cikpOworICB9IGNhdGNoKGUpIHsKKyAgICBlcnIgPSAic3ludGF4IGluY29tcGxldGUiOworICB9CisgIGlmICghaXNOYU4ocmVzKSAmJiByZXMhPSJJbmZpbml0eSIpIAorICAgIHN0ciA9ICJgIitzdHIrIiA9YCAiKyhNYXRoLmFicyhyZXMtTWF0aC5yb3VuZChyZXMqMTAwMDAwMCkvMTAwMDAwMCk8MWUtMTU/TWF0aC5yb3VuZChyZXMqMTAwMDAwMCkvMTAwMDAwMDpyZXMpK2VycjsgCisgIGVsc2UgaWYgKHN0ciE9IiIpIHN0ciA9ICJgIitzdHIrImAgPSB1bmRlZmluZWQiOyAvL2RlYnVnOittYXRoanMoc3RyKTsKKyAgdmFyIG91dG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvdXRwdXRJZCk7CisgIHZhciBuID0gb3V0bm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsKKyAgZm9yICh2YXIgaT0wOyBpPG47IGkrKykKKyAgICBvdXRub2RlLnJlbW92ZUNoaWxkKG91dG5vZGUuZmlyc3RDaGlsZCk7CisgIG91dG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3RyKSk7CisgIEFNcHJvY2Vzc05vZGUob3V0bm9kZSk7Cit9CisKK2Z1bmN0aW9uIGFwcGVuZChzdCl7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbicpLnZhbHVlKz1zdDsKKyAgY2FsY3VsYXRlKCdpbicsJ291dCcpOworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5zY3JvbGxUb3AgPSAxMDAwOworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1cygpOworfQorCitmdW5jdGlvbiBjbGVhclRleHRBcmVhKCl7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbicpLnZhbHVlPSIiOworICBjYWxjdWxhdGUoJ2luJywnb3V0Jyk7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbicpLmZvY3VzKCk7Cit9CisKK3ZhciBjYWxjc3RyID0gIjx0YWJsZSBhbGlnbj1cImNlbnRlclwiPlxuPHRyPjx0aD5cbkFTQ0lJTWF0aCBTY2llbnRpZmljIENhbGN1bGF0b3JcbjwvdGg+PC90cj5cbjx0cj48dGQ+XG5DbGljayBpbiB0aGUgYm94IHRvIHVzZSB5b3VyIGtleWJvYXJkIG9yIHVzZSB0aGUgYnV0dG9uc1xuPC90ZD48L3RyPlxuPHRyPjx0ZD5cbjx0ZXh0YXJlYSBpZD1cImluXCIgcm93cz1cIjNcIiBjb2xzPVwiNDBcIiBvbmtleXVwPVwiY2FsY3VsYXRlKCdpbicsJ291dCcpXCI+PC90ZXh0YXJlYT48L3RkPjwvdHI+XG48dHI+PHRkIGhlaWdodD1cIjUwXCI+UmVzdWx0OiAmbmJzcDsgJm5ic3A7IDxzcGFuIGlkPVwib3V0XCI+PC9zcGFuPjwvdGQ+PC90cj5cbjwvdGFibGU+XG48dGFibGUgYWxpZ249XCJjZW50ZXJcIiBjZWxsc3BhY2luZz1cIjBcIiBjZWxscGFkZGluZz1cIjBcIj5cbjx0Ym9keSBhbGlnbj1cImNlbnRlclwiPlxuPHRyPlxuPHRkIGNvbHNwYW49XCI0XCI+XG48YnV0dG9uIG9uY2xpY2s9XCJhcHBlbmQoJ3Npbl4tMSgnKVwiPjxmb250IHNpemU9Mj5gc2luXi0xYDwvZm9udD48L2J1dHRvbj48YnV0dG9uIG9uY2xpY2s9XCJhcHBlbmQoJ2Nvc14tMSgnKVwiPjxmb250IHNpemU9Mj5gY29zXi0xYDwvZm9udD48L2J1dHRvbj48YnV0dG9uIG9uY2xpY2s9XCJhcHBlbmQoJ3Rhbl4tMSgnKVwiPjxmb250IHNpemU9Mj5gdGFuXi0xYDwvZm9udD48L2J1dHRvbj48L3RkPlxuPHRkPjxidXR0b24gb25jbGljaz1cImNsZWFyVGV4dEFyZWEoKVwiPiZuYnNwO2BDYCZuYnNwOzwvYnV0dG9uPjwvdGQ+XG5cbjwvdHI+XG48dHI+XG48dGQ+PGJ1dHRvbiBvbmNsaWNrPVwiYXBwZW5kKCdwaScpXCI+Jm5ic3A7YHBpYCAmbmJzcDs8L2J1dHRvbj48L3RkPlxuPHRkPjxidXR0b24gb25jbGljaz1cImFwcGVuZCgnc2luKCcpXCI+Jm5ic3A7YHNpbmA8L2J1dHRvbj48L3RkPlxuPHRkPjxidXR0b24gb25jbGljaz1cImFwcGVuZCgnY29zKCcpXCI+Jm5ic3A7YGNvc2A8L2J1dHRvbj48L3RkPlxuPHRkPjxidXR0b24gb25jbGljaz1cImFwcGVuZCgndGFuKCcpXCI+Jm5ic3A7YHRhbmA8L2J1dHRvbj48L3RkPlxuPHRkPjxidXR0b24gb25jbGljaz1cImFwcGVuZCgnXicpXCI+YHheeWA8L2J1dHRvbj48L3RkPlxuPC90cj5cbjx0cj5cbjx0ZD48YnV0dG9uIG9uY2xpY2s9XCJhcHBlbmQoJyEnKVwiPiZuYnNwOyBgIWAgJm5ic3A7PC9idXR0b24+PC90ZD5cblxuPHRkPjxidXR0b24gb25jbGljaz1cImFwcGVuZCgnKCcpXCI+PGZvbnQgc2l6ZT0yPiZuYnNwOyZuYnNwO2AoYCZuYnNwOyZuYnNwOzwvZm9udD48L2J1dHRvbj48L3RkPlxuPHRkPjxidXR0b24gb25jbGljaz1cImFwcGVuZCgnKScpXCI+PGZvbnQgc2l6ZT0yPiZuYnNwOyZuYnNwO2ApYCZuYnNwOyZuYnNwOzwvZm9udD48L2J1dHRvbj48L3RkPlxuPHRkPjxidXR0b24gb25jbGljaz1cImFwcGVuZCgnc3FydCgnKVwiPjxmb250IHNpemU9Mj5gc3FydCh7Ojp9XlwgKWA8L2ZvbnQ+PC9idXR0b24+PC90ZD5cbjx0ZD48YnV0dG9uIG9uY2xpY2s9XCJhcHBlbmQoJy8nKVwiPiZuYnNwO2AtOlwgYDwvYnV0dG9uPjwvdGQ+XG48L3RyPlxuPHRyPlxuPHRkPjxidXR0b24gb25jbGljaz1cImFwcGVuZCgnbG9nKCcpXCI+YGxvZ2A8L2J1dHRvbj48L3RkPlxuPHRkPjxidXR0b24gb25jbGljaz1cImFwcGVuZCgnNycpXCI+Jm5ic3A7IGA3YCAmbmJzcDs8L2J1dHRvbj48L3RkPlxuPHRkPjxidXR0b24gb25jbGljaz1cImFwcGVuZCgnOCcpXCI+Jm5ic3A7IGA4YCAmbmJzcDs8L2J1dHRvbj48L3RkPlxuXG48dGQ+PGJ1dHRvbiBvbmNsaWNrPVwiYXBwZW5kKCc5JylcIj4mbmJzcDsgYDlgICZuYnNwOzwvYnV0dG9uPjwvdGQ+XG48dGQ+PGJ1dHRvbiBvbmNsaWNrPVwiYXBwZW5kKCcqJylcIj4mbmJzcDtgdGltZXNgJm5ic3A7PC9idXR0b24+PC90ZD5cbjwvdHI+XG48dHI+XG48dGQ+PGJ1dHRvbiBvbmNsaWNrPVwiYXBwZW5kKCdsbignKVwiPiZuYnNwO2BsbmAmbmJzcDs8L2J1dHRvbj48L3RkPlxuPHRkPjxidXR0b24gb25jbGljaz1cImFwcGVuZCgnNCcpXCI+Jm5ic3A7IGA0YCAmbmJzcDs8L2J1dHRvbj48L3RkPlxuPHRkPjxidXR0b24gb25jbGljaz1cImFwcGVuZCgnNScpXCI+Jm5ic3A7IGA1YCAmbmJzcDs8L2J1dHRvbj48L3RkPlxuPHRkPjxidXR0b24gb25jbGljaz1cImFwcGVuZCgnNicpXCI+Jm5ic3A7IGA2YCAmbmJzcDs8L2J1dHRvbj48L3RkPlxuXG48dGQ+PGJ1dHRvbiBvbmNsaWNrPVwiYXBwZW5kKCctJylcIj4mbmJzcDtgLXs6On1gJm5ic3A7PC9idXR0b24+PC90ZD5cbjwvdHI+XG48dHI+XG48dGQ+PGJ1dHRvbiBvbmNsaWNrPVwiYXBwZW5kKCdlJylcIj4mbmJzcDsgYGVgICZuYnNwOzwvYnV0dG9uPjwvdGQ+XG48dGQ+PGJ1dHRvbiBvbmNsaWNrPVwiYXBwZW5kKCcxJylcIj4mbmJzcDsmbmJzcDtgMWAgJm5ic3A7PC9idXR0b24+PC90ZD5cbjx0ZD48YnV0dG9uIG9uY2xpY2s9XCJhcHBlbmQoJzInKVwiPiZuYnNwOyBgMmAgJm5ic3A7PC9idXR0b24+PC90ZD5cbjx0ZD48YnV0dG9uIG9uY2xpY2s9XCJhcHBlbmQoJzMnKVwiPiZuYnNwOyBgM2AgJm5ic3A7PC9idXR0b24+PC90ZD5cbjx0ZD48YnV0dG9uIG9uY2xpY2s9XCJhcHBlbmQoJysnKVwiPiZuYnNwO2Arezo6fWAmbmJzcDs8L2J1dHRvbj48L3RkPlxuXG48L3RyPlxuPHRyPlxuPHRkPiA8IS0tYnV0dG9uIG9uY2xpY2s9XCJhcHBlbmQoJ3BpJylcIj4mbmJzcDtgcGlgICZuYnNwOzwvYnV0dG9uLS0+PC90ZD5cbjx0ZD48YnV0dG9uIG9uY2xpY2s9XCJhcHBlbmQoJzAnKVwiPiZuYnNwOyBgMGAgJm5ic3A7PC9idXR0b24+PC90ZD5cbjx0ZD48YnV0dG9uIG9uY2xpY2s9XCJhcHBlbmQoJy4nKVwiPiZuYnNwOyBgLmAgJm5ic3A7PC9idXR0b24+PC90ZD5cbjx0ZD48YnV0dG9uIG9uY2xpY2s9XCJhcHBlbmQoJ1xcbicpXCI+Jm5ic3A7YFwiZW50XCJgPC9idXR0b24+PC90ZD5cbjwvdHI+XG48L3Rib2R5PlxuPC90YWJsZT4iOworCisvLyBHTzEuMSBHZW5lcmljIG9ubG9hZCBieSBCcm90aGVyY2FrZQorLy8gaHR0cDovL3d3dy5icm90aGVyY2FrZS5jb20vCisvL29ubG9hZCBmdW5jdGlvbiAocmVwbGFjZXMgdGhlIG9ubG9hZD0idHJhbnNsYXRlKCkiIGluIHRoZSA8Ym9keT4gdGFnKQorZnVuY3Rpb24gZ2VuZXJpYygpCit7CisgIGlmKCFpbml0KCkpIHJldHVybjsKKyAgaWYgKHRyYW5zbGF0ZU9uTG9hZCkgeworICAgIHZhciBuZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwcm9jZXNzYXNjaWltYXRoaW5tb29kbGUiKTsKKyAgICBpZiAobmQhPW51bGwpIGRzdmdsb2NhdGlvbiA9IG5kLmNsYXNzTmFtZTsKKyAgICBpZiAobmQhPW51bGwgfHwgIWNoZWNrZm9ycHJvY2Vzc2FzY2lpbWF0aGlubW9vZGxlKSB7CisgICAgICB0cmFuc2xhdGUoKTsKKyAgICAgIGlmICghbm9TVkcgJiYgdHJhbnNsYXRlQVNDSUlzdmcpIGRyYXdQaWN0dXJlcygpOworICAgIH0KKyAgICB2YXIgbGkgPSBnZXRFbGVtZW50c0J5Q2xhc3MoZG9jdW1lbnQsImRpdiIsIkFTQ0lJTWF0aENhbGN1bGF0b3IiKTsKKyAgICBpZiAoIW5vTWF0aE1MICYmIGxpLmxlbmd0aD4wKSBpbml0QVNDSUlNYXRoQ2FsY3VsYXRvcnMobGkpOworICB9Cit9OworLy9zZXR1cCBvbmxvYWQgZnVuY3Rpb24KK2lmKHR5cGVvZiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciAhPSAndW5kZWZpbmVkJykKK3sKKyAgLy8uLiBnZWNrbywgc2FmYXJpLCBrb25xdWVyb3IgYW5kIHN0YW5kYXJkCisgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZ2VuZXJpYywgZmFsc2UpOworfQorZWxzZSBpZih0eXBlb2YgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciAhPSAndW5kZWZpbmVkJykKK3sKKyAgLy8uLiBvcGVyYSA3CisgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBnZW5lcmljLCBmYWxzZSk7Cit9CitlbHNlIGlmKHR5cGVvZiB3aW5kb3cuYXR0YWNoRXZlbnQgIT0gJ3VuZGVmaW5lZCcpCit7CisgIC8vLi4gd2luL2llCisgIHdpbmRvdy5hdHRhY2hFdmVudCgnb25sb2FkJywgZ2VuZXJpYyk7Cit9CisvLyoqIHJlbW92ZSB0aGlzIGNvbmRpdGlvbiB0byBkZWdyYWRlIG9sZGVyIGJyb3dzZXJzCitlbHNlCit7CisgIC8vLi4gbWFjL2llNSBhbmQgYW55dGhpbmcgZWxzZSB0aGF0IGdldHMgdGhpcyBmYXIKKyAgLy9pZiB0aGVyZSdzIGFuIGV4aXN0aW5nIG9ubG9hZCBmdW5jdGlvbgorICBpZih0eXBlb2Ygd2luZG93Lm9ubG9hZCA9PSAnZnVuY3Rpb24nKQorICB7CisgICAgLy9zdG9yZSBpdAorICAgIHZhciBleGlzdGluZyA9IG9ubG9hZDsKKyAgICAvL2FkZCBuZXcgb25sb2FkIGhhbmRsZXIKKyAgICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKQorICAgIHsKKyAgICAgIC8vY2FsbCBleGlzdGluZyBvbmxvYWQgZnVuY3Rpb24KKyAgICAgIGV4aXN0aW5nKCk7CisgICAgICAvL2NhbGwgZ2VuZXJpYyBvbmxvYWQgZnVuY3Rpb24KKyAgICAgIGdlbmVyaWMoKTsKKyAgICB9OworICB9CisgIGVsc2UKKyAgeworICAgIC8vc2V0dXAgb25sb2FkIGZ1bmN0aW9uCisgICAgd2luZG93Lm9ubG9hZCA9IGdlbmVyaWM7CisgIH0KK30KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vRXF1YXRpb24uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL0VxdWF0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMjljZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL0VxdWF0aW9uLmpzCkBAIC0wLDAgKzEsMjMyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcDQorIEFzY2lpTWF0aE1MIEZvcm11bGEgRWRpdG9yIGZvciBYaW5oYQ0KKyBfX19fX19fX19fX19fX19fX19fX19fXw0KKyANCisgQmFzZWQgb24gQXNjaWlNYXRoTUwgYnkgUGV0ZXIgSmlwc2VuIGh0dHA6Ly93d3cuY2hhcG1hbi5lZHUvfmppcHNlbg0KKyANCisgSW5jbHVkaW5nIGEgdGFibGUgd2l0aCBtYXRoIHN5bWJvbHMgZm9yIGVhc3kgaW5wdXQgbW9kaWZpZWQgZnJvbSBDaGFyYWN0ZXJNYXAgZm9yIEFTQ0lJTWF0aE1MIGJ5IFBldGVyIEppcHNlbg0KKyBIVE1MU291cmNlIGJhc2VkIG9uIEhUTUxBcmVhIFhURCAxLjUgKGh0dHA6Ly9tb3Nmb3JnZS5uZXQvcHJvamVjdHMvaHRtbGFyZWEzeHRkLykgbW9kaWZpZWQgYnkgSG9sZ2VyIEhlZXMNCisgT3JpZ2luYWwgQXV0aG9yIC0gQmVybmhhcmQgUGZlaWZlciBub3ZvY2FpbmVAZ214Lm5ldA0KKyANCisgU2VlIHJlYWRtZS50eHQNCisgDQorIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdA0KKyB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorDQorIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCANCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQ0KKyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbCkgDQorIGZvciBtb3JlIGRldGFpbHMuDQorDQorIFJhaW11bmQgTWV5ZXIgIDExLzIzLzIwMDYNCisgICAgIA0KK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCitmdW5jdGlvbiBFcXVhdGlvbihlZGl0b3IpIHsNCisJdGhpcy5lZGl0b3IgPSBlZGl0b3I7DQorDQorCXZhciBjZmcgPSBlZGl0b3IuY29uZmlnOw0KKwl2YXIgc2VsZiA9IHRoaXM7DQorCQ0KKw0KKwkvLyByZWdpc3RlciB0aGUgdG9vbGJhciBidXR0b25zIHByb3ZpZGVkIGJ5IHRoaXMgcGx1Z2luDQorCWNmZy5yZWdpc3RlckJ1dHRvbih7DQorCWlkICAgICAgIDogImVxdWF0aW9uIiwNCisJdG9vbHRpcCAgOiB0aGlzLl9sYygiRm9ybXVsYSBFZGl0b3IiKSwNCisJaW1hZ2UgICAgOiBlZGl0b3IuaW1nVVJMKCJlcXVhdGlvbi5naWYiLCAiRXF1YXRpb24iKSwNCisJdGV4dE1vZGUgOiBmYWxzZSwNCisJYWN0aW9uICAgOiBmdW5jdGlvbihlZGl0b3IsIGlkKSB7DQorCQkJc2VsZi5idXR0b25QcmVzcyhlZGl0b3IsIGlkKTsNCisJCX0NCisJfSk7DQorCWNmZy5hZGRUb29sYmFyRWxlbWVudCgiZXF1YXRpb24iLCAiaW5zZXJ0aG9yaXpvbnRhbHJ1bGUiLCAtMSk7DQorCQ0KKwltYXRoY29sb3IgPSBjZmcuRXF1YXRpb24ubWF0aGNvbG9yOyAgICAgICAvLyBjaGFuZ2UgaXQgdG8gIiIgKHRvIGluaGVyaXQpIG9yIGFueSBvdGhlciBjb2xvcg0KKwltYXRoZm9udGZhbWlseSA9IGNmZy5FcXVhdGlvbi5tYXRoZm9udGZhbWlseTsNCisJDQorCXRoaXMuZW5hYmxlZCA9ICFYaW5oYS5pc19pZTsNCisJDQorCWlmICh0aGlzLmVuYWJsZWQpDQorCXsJDQorCQl0aGlzLm9uQmVmb3JlU3VibWl0ID0gdGhpcy5vbkJlZm9yZVVubG9hZCA9IGZ1bmN0aW9uICgpIHtzZWxmLnVuUGFyc2UoKTt9Ow0KKwl9DQorCQ0KKwlpZiAodHlwZW9mICBBTXByb2Nlc3NOb2RlICE9ICJmdW5jdGlvbiIpDQorCXsNCisJCVhpbmhhLl9sb2FkYmFjayhYaW5oYS5nZXRQbHVnaW5EaXIoJ0VxdWF0aW9uJykgKyAiL0FTQ0lJTWF0aE1MLmpzIiwgZnVuY3Rpb24gKCkgeyB0cmFuc2xhdGUoKTsgfSk7DQorCX0NCit9DQorDQorWGluaGEuQ29uZmlnLnByb3RvdHlwZS5FcXVhdGlvbiA9DQorew0KKwkibWF0aGNvbG9yIiA6ICJibGFjayIsICAgICAgIC8vIGNoYW5nZSBpdCB0byAiIiAodG8gaW5oZXJpdCkgb3IgYW55IG90aGVyIGNvbG9yDQorCSJtYXRoZm9udGZhbWlseSIgOiAic2VyaWYiIC8vIGNoYW5nZSB0byAiIiB0byBpbmhlcml0ICh3b3JrcyBpbiBJRSkgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIGFub3RoZXIgZmFtaWx5IChlLmcuICJhcmlhbCIpDQorfQ0KKw0KK0VxdWF0aW9uLl9wbHVnaW5JbmZvID0gew0KKwluYW1lICAgICAgICAgIDogIkFTQ0lJTWF0aE1MIEZvcm11bGEgRWRpdG9yIiwNCisJdmVyc2lvbiAgICAgICA6ICIyLjMgKDIwMDgtMDEtMjYpIiwNCisJZGV2ZWxvcGVyICAgICA6ICJSYWltdW5kIE1leWVyIiwNCisJZGV2ZWxvcGVyX3VybCA6ICJodHRwOi8veC13ZWJzZXJ2aWNlLm5ldCIsDQorCWNfb3duZXIgICAgICAgOiAiIiwNCisJc3BvbnNvciAgICAgICA6ICIiLA0KKwlzcG9uc29yX3VybCAgIDogIiIsDQorCWxpY2Vuc2UgICAgICAgOiAiR05VL0xHUEwiDQorfTsNCisNCitFcXVhdGlvbi5wcm90b3R5cGUuX2xjID0gZnVuY3Rpb24oc3RyaW5nKSANCit7DQorICAgIHJldHVybiBYaW5oYS5fbGMoc3RyaW5nLCAnRXF1YXRpb24nKTsNCit9Ow0KK0VxdWF0aW9uLnByb3RvdHlwZS5vbkdlbmVyYXRlID0gZnVuY3Rpb24oKSANCit7DQorCXRoaXMucGFyc2UoKTsNCit9Ow0KKw0KKy8vIGF2b2lkIGNoYW5naW5nIHRoZSBmb3JtdWxhIGluIHRoZSBlZGl0b3INCitFcXVhdGlvbi5wcm90b3R5cGUub25LZXlQcmVzcyA9IGZ1bmN0aW9uKGV2KQ0KK3sNCisJaWYgKHRoaXMuZW5hYmxlZCkNCisJew0KKwkJZSA9IHRoaXMuZWRpdG9yOw0KKwkJdmFyIHNwYW4gPSBlLl9nZXRGaXJzdEFuY2VzdG9yKGUuZ2V0U2VsZWN0aW9uKCksWydzcGFuJ10pOw0KKwkJaWYgKCBzcGFuICYmIHNwYW4uY2xhc3NOYW1lID09ICJBTSIgKQ0KKwkJew0KKwkJCWlmICgNCisJCQkJZXYua2V5Q29kZSA9PSA4IHx8IC8vIGRlbGV0ZQ0KKwkJCQlldi5rZXlDb2RlID09IDQ2IHx8Ly8gYmFja3NwYWNlDQorCQkJCWV2LmNoYXJDb2RlCSAgICAgICAvLyBhbGwgY2hhcmFjdGVyIGtleXMNCisJCQkpIA0KKwkJCXsgLy8gc3RvcCBldmVudA0KKwkJCQlYaW5oYS5fc3RvcEV2ZW50KGV2KTsNCisJCQkJcmV0dXJuIHRydWU7IA0KKwkJCX0NCisJCX0NCisJfQ0KKwlyZXR1cm4gZmFsc2U7DQorfQ0KK0VxdWF0aW9uLnByb3RvdHlwZS5vbkJlZm9yZU1vZGUgPSBmdW5jdGlvbiggbW9kZSApDQorew0KKwlpZiAodGhpcy5lbmFibGVkICYmIG1vZGUgPT0gJ3RleHRtb2RlJykNCisJew0KKwkJdGhpcy51blBhcnNlKCk7DQorCX0NCit9DQorRXF1YXRpb24ucHJvdG90eXBlLm9uTW9kZSA9IGZ1bmN0aW9uKCBtb2RlICkNCit7DQorCWlmICh0aGlzLmVuYWJsZWQgJiYgbW9kZSA9PSAnd3lzaXd5ZycpDQorCXsNCisJCXRoaXMucGFyc2UoKTsNCisJfQ0KK30NCisNCitFcXVhdGlvbi5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAoKQ0KK3sNCisJaWYgKHRoaXMuZW5hYmxlZCkNCisJew0KKwkJdmFyIGRvYyA9IHRoaXMuZWRpdG9yLl9kb2M7DQorCQl2YXIgc3BhbnMgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNwYW4iKTsNCisJCWZvciAodmFyIGkgPSAwO2k8c3BhbnMubGVuZ3RoO2krKykNCisJCXsNCisJCQl2YXIgbm9kZSA9IHNwYW5zW2ldOw0KKwkJCWlmIChub2RlLmNsYXNzTmFtZSAhPSAnQU0nKSBjb250aW51ZTsNCisJCQlpZiAobm9kZS5pbm5lckhUTUwuaW5kZXhPZih0aGlzLmVkaXRvci5jYykgIT0gLTEpIC8vIGF2b2lkIHByb2JsZW1zIHdpdGggc291cmNlIGNvZGUgcG9zaXRpb24gYXV4aWxpYXJ5IGNoYXJhY3Rlcg0KKwkJCXsNCisJCQkJbm9kZS5pbm5lckhUTUwgPSBub2RlLmlubmVySFRNTC5yZXBsYWNlKHRoaXMuZWRpdG9yLmNjLCcnKTsNCisJCQkJbm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkb2MuY3JlYXRlVGV4dE5vZGUodGhpcy5lZGl0b3IuY2MpLCBub2RlKTsNCisJCQl9DQorCQkJbm9kZS50aXRsZSA9IG5vZGUuaW5uZXJIVE1MOw0KKwkJCS8vIEZGMyBzdHJpY3Qgc291cmNlIGRvY3VtZW50IHBvbGljeTogDQorCQkJLy8gdGhlIHNwYW4gaXMgdGFrZW4gZnJvbSB0aGUgZWRpdG9yIGRvY3VtZW50LCBwcm9jZXNzZWQgaW4gdGhlIHBsdWdpbiBkb2N1bWVudCwgYW5kIHB1dCBiYWNrIGluIHRoZSBlZGl0b3INCisJCQl2YXIgY2xvbmUgPSBub2RlLmNsb25lTm9kZSh0cnVlKTsNCisJCQl0cnkgew0KKwkJCQlkb2N1bWVudC5hZG9wdE5vZGUoY2xvbmUpOw0KKwkJCX0gY2F0Y2ggKGUpIHt9DQorCQkJQU1wcm9jZXNzTm9kZShjbG9uZSwgZmFsc2UpOw0KKwkJCXRyeSB7DQorCQkJCWRvYy5hZG9wdE5vZGUoY2xvbmUpOw0KKwkJCX0gY2F0Y2ggKGUpIHt9DQorCQkJbm9kZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChjbG9uZSwgbm9kZSk7DQorCQkJLy8gaW5zZXJ0IHNwYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHByb3RlY3RlZCBub2RlLCBvdGhlcndpZGUgb25lIGNvdWxkIGdldCBzdHVjaw0KKwkJCWNsb25lLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGRvYy5jcmVhdGVUZXh0Tm9kZShTdHJpbmcuZnJvbUNoYXJDb2RlKDMyKSksY2xvbmUpOw0KKwkJCWNsb25lLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGRvYy5jcmVhdGVUZXh0Tm9kZShTdHJpbmcuZnJvbUNoYXJDb2RlKDMyKSksY2xvbmUubmV4dFNpYmxpbmcpOw0KKwkJfQ0KKwl9DQorfQ0KKw0KK0VxdWF0aW9uLnByb3RvdHlwZS51blBhcnNlID0gZnVuY3Rpb24gKCkNCit7DQorCXZhciBkb2MgPSB0aGlzLmVkaXRvci5fZG9jOw0KKwl2YXIgc3BhbnMgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNwYW4iKTsNCisJZm9yICh2YXIgaSA9IDA7aTxzcGFucy5sZW5ndGg7aSsrKQ0KKwl7DQorCQl2YXIgbm9kZSA9IHNwYW5zW2ldOw0KKwkJaWYgKG5vZGUuY2xhc3NOYW1lLmluZGV4T2YgKCJBTSIpID09IC0xIHx8IG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm1hdGgiKS5sZW5ndGggPT0gMCkgY29udGludWU7DQorCQl2YXIgZm9ybXVsYSA9ICdgJyArIG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21hdGgnKVswXS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJykgKyAnYCc7DQorCQlub2RlLmlubmVySFRNTCA9IGZvcm11bGE7DQorCQlub2RlLnNldEF0dHJpYnV0ZSgidGl0bGUiLCBudWxsKTsNCisJfQ0KK30NCisNCitFcXVhdGlvbi5wcm90b3R5cGUuYnV0dG9uUHJlc3MgPSBmdW5jdGlvbigpIA0KK3sNCisJdmFyIHNlbGYgPSB0aGlzOw0KKwl2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7DQorCXZhciBhcmdzID0ge307DQorCQ0KKwlhcmdzWydlZGl0b3InXSA9IGVkaXRvcjsNCisJDQorCXZhciBwYXJlbnQgPSBlZGl0b3IuX2dldEZpcnN0QW5jZXN0b3IoZWRpdG9yLmdldFNlbGVjdGlvbigpLFsnc3BhbiddKTsNCisJaWYgKHBhcmVudCkNCisJew0KKwkJYXJnc1siZWRpdGVkTm9kZSJdID0gcGFyZW50Ow0KKwl9DQorCURpYWxvZyhYaW5oYS5nZXRQbHVnaW5EaXIoJ0VxdWF0aW9uJykgKyAiL3BvcHVwcy9kaWFsb2cuaHRtbCIsIGZ1bmN0aW9uKHBhcmFtcykgew0KKwkJCQlzZWxmLmluc2VydChwYXJhbXMpOw0KKwkJCX0sIGFyZ3MpOw0KK307DQorDQorRXF1YXRpb24ucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uIChwYXJhbSkNCit7DQorCWlmICh0eXBlb2YgcGFyYW0gPT0gJ3VuZGVmaW5lZCcgfHwgcGFyYW0gPT0gbnVsbCkgcmV0dXJuOw0KKw0KKwlpZiAodHlwZW9mIHBhcmFtWyJmb3JtdWxhIl0gIT0gInVuZGVmaW5lZCIpDQorCXsNCisJCXZhciBmb3JtdWxhID0gKHBhcmFtWyJmb3JtdWxhIl0gIT0gJycpID8gcGFyYW1bImZvcm11bGEiXS5yZXBsYWNlKC9eYD8oLiopYD8kL20sImAkMWAiKSA6ICcnOw0KKw0KKwkJaWYgKHBhcmFtWyJlZGl0ZWROb2RlIl0gJiYgKHBhcmFtWyJlZGl0ZWROb2RlIl0udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdzcGFuJykpIA0KKwkJew0KKwkJCXZhciBzcGFuID0gcGFyYW1bImVkaXRlZE5vZGUiXTsgDQorCQkJaWYgKGZvcm11bGEgIT0gJycpDQorCQkJew0KKwkJCQlzcGFuLmlubmVySFRNTCA9IGZvcm11bGE7DQorCQkJCWlmICh0aGlzLmVuYWJsZWQpIHNwYW4udGl0bGUgPSBmb3JtdWxhOw0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJCQlzcGFuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3Bhbik7DQorCQkJfQ0KKwkJCQ0KKwkJfQ0KKwkJZWxzZSBpZiAoIXBhcmFtWyJlZGl0ZWROb2RlIl0gJiYgZm9ybXVsYSAhPSAnJykNCisJCXsNCisJCQlpZiAodGhpcy5lbmFibGVkKQ0KKwkJCXsJCQkNCisJCQkJdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7DQorCQkJCXNwYW4uY2xhc3NOYW1lID0gJ0FNJzsNCisJCQkJdGhpcy5lZGl0b3IuaW5zZXJ0Tm9kZUF0U2VsZWN0aW9uKHNwYW4pOw0KKwkJCQlzcGFuLmlubmVySFRNTCA9IGZvcm11bGE7DQorCQkJCXNwYW4udGl0bGUgPSBmb3JtdWxhOw0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJCQl0aGlzLmVkaXRvci5pbnNlcnRIVE1MKCc8c3BhbiBjbGFzcz0iQU0iPicrZm9ybXVsYSsnPC9zcGFuPicpOw0KKwkJCX0NCisJCX0NCisNCisJCWlmICh0aGlzLmVuYWJsZWQpIHRoaXMucGFyc2UoKTsvL0FNcHJvY2Vzc05vZGUodGhpcy5lZGl0b3IuX2RvYy5ib2R5LCBmYWxzZSk7DQorCX0NCit9DQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9leGFtcGxlLmh0bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2V4YW1wbGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWMwN2E2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9leGFtcGxlLmh0bWwKQEAgLTAsMCArMSw0NSBAQAorPCFET0NUWVBFIGh0bWwKKyAgICAgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIKKyAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CisKKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KKzxoZWFkPgorICA8dGl0bGU+QXNjaWlNYXRoTUwgRXhhbXBsZTwvdGl0bGU+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICB2YXIgbWF0aGNvbG9yID0gImJsYWNrIjsgCisgIDwvc2NyaXB0PgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJBU0NJSU1hdGhNTC5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBib2R5IHsgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWYgfQorICBwcmUge2JvcmRlcjogZG90dGVkIGdyZXkgdGhpbjsgYmFja2dyb3VuZC1jb2xvcjpMaWdodFllbGxvdzsgfQorICAKKyAgPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgPgorPGgxPkFzY2lpTWF0aE1MIEV4YW1wbGU8L2gxPgorPHA+VGhpcyBzaG93cyBob3cgdG8gc2V0IHVwIHlvdXIgcGFnZSB0byBkaXNwbGF5IE1hdGhNTCB1c2luZyBBc2NpaU1hdGhNTDwvcD4KKzxwPkFkZCB0aGlzIHRvIHRoZSBoZWFkIHNlY3Rpb24gb2YgeW91ciBkb2N1bWVudDo8L3A+Cis8cHJlPgorCisgICZsdDshLS0gVGhpcyBibG9jayBpcyBvcHRpb25hbCBjb25maWd1cmF0aW9uIC0tJmd0OworICAmbHQ7c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCImZ3Q7CisgICAgdmFyIG1hdGhjb2xvciA9ICJibGFjayI7IC8vIFlvdSBtYXkgY2hhbmdlIHRoZSBjb2xvciBvZiB0aGUgZm9ybXVsYWUgKGRlZmF1bHQ6IHJlZCkKKyAgICB2YXIgc2hvd2FzY2lpZm9ybXVsYW9uaG92ZXIgPSBmYWxzZTsgLy8gaGVscHMgc3R1ZGVudHMgbGVhcm4gQVNDSUlNYXRoLCBzZXQgdG8gZmFsc2UgaWYgeW91IGxpa2UgIChkZWZhdWx0OnRydWUpCisgICAgdmFyIG1hdGhmb250ZmFtaWx5ID0gIkFyaWFsIjsgLy9hbmQgdGhlIGZvbnQgKGRlZmF1bHQ6IHNlcmlmLCB3aGljaCBpcyBnb29kIEkgdGhpbmspCisgICZsdDsvc2NyaXB0Jmd0OworICAmbHQ7IS0tIFRISVMgTE9BRFMgVEhFIEFDVFVBTCBTQ1JJUFQsIFBMRUFTRSBBREpVU1QgVEhFIFVSTCAtLSZsdDsKKyAgJmx0O3NjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3hpbmhhL3BsdWdpbnMvRXF1YXRpb24vQVNDSUlNYXRoTUwuanMiJmd0OyZsdDsvc2NyaXB0Jmd0OworCisKKzwvcHJlPgorPHA+PHNwYW4gY2xhc3M9IkFNIj5gaW50X2FeYmYoeClkeGA8L3NwYW4+PC9wPgorPHA+PHNwYW4gY2xhc3M9IkFNIj5gW1thLGJdLFtjLGRdXWA8L3NwYW4+PGJyIC8+PC9wPgorPHA+CisgQVNDSUlNYXRoTUwgYnkgPGEgaHJlZj0iaHR0cDovL3d3dy5jaGFwbWFuLmVkdS9+amlwc2VuIiBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYsJ19ibGFuaycpO3JldHVybiBmYWxzZTsiPlBldGVyIEppcHNlbjwvYT4sIAorPGEgaHJlZj0iaHR0cDovL3d3dy5jaGFwbWFuLmVkdSIgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCdfYmxhbmsnKTtyZXR1cm4gZmFsc2U7Ij5DaGFwbWFuIFVuaXZlcnNpdHk8L2E+PGJyIC8+CisgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFzY2lpTWF0aE1MIHZpc2l0IHRoaXMgcGFnZTogPGEgaHJlZj0iaHR0cDovL3d3dzEuY2hhcG1hbi5lZHUvfmppcHNlbi9tYXRobWwvYXNjaWltYXRoLmh0bWwiIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZiwnX2JsYW5rJywnJyk7cmV0dXJuIGZhbHNlOyI+aHR0cDovL3d3dzEuY2hhcG1hbi5lZHUvfmppcHNlbi9tYXRobWwvYXNjaWltYXRoLmh0bWw8L2E+CisKKzwvcD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9hYnNfdmFsdWUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9pbWcvYWJzX3ZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yzg3OThmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9pbWcvYWJzX3ZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9kaWFnX2ZyYWN0aW9uLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vaW1nL2RpYWdfZnJhY3Rpb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOGI4MDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9kaWFnX2ZyYWN0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9kaXZpZGUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9pbWcvZGl2aWRlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjVhOWY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9pbWcvZGl2aWRlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9kc3BfZ3JlYXRlcl9lcXVhbC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9kc3BfZ3JlYXRlcl9lcXVhbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNiMjI3MQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vaW1nL2RzcF9ncmVhdGVyX2VxdWFsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9kc3BfbGVzc19lcXVhbC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9kc3BfbGVzc19lcXVhbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM3Nzc0NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vaW1nL2RzcF9sZXNzX2VxdWFsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9kc3Bfbm90ZXF1YWwuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9pbWcvZHNwX25vdGVxdWFsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODE2NWNiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9pbWcvZHNwX25vdGVxdWFsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9lcXVhdGlvbi5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9lcXVhdGlvbi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdiYzI3YQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vaW1nL2VxdWF0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9lcXVhdGlvbi5vbGQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9pbWcvZXF1YXRpb24ub2xkLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmFjNzdhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9pbWcvZXF1YXRpb24ub2xkLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9ncmVhdGVyX2VxdWFsX3RoYW4uZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9pbWcvZ3JlYXRlcl9lcXVhbF90aGFuLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTM3NzEyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9pbWcvZ3JlYXRlcl9lcXVhbF90aGFuLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9ob3JfZnJhY3Rpb24uZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9pbWcvaG9yX2ZyYWN0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWUwYWM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9pbWcvaG9yX2ZyYWN0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9sZXNzX2VxdWFsX3RoYW4uZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9pbWcvbGVzc19lcXVhbF90aGFuLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTFiZTVmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9pbWcvbGVzc19lcXVhbF90aGFuLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9tdWwuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9pbWcvbXVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjcxYzkxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9pbWcvbXVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9ub3RlcXVhbC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9ub3RlcXVhbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE1NjIwMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vaW1nL25vdGVxdWFsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9wYXJlbnRoZXNpcy5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9wYXJlbnRoZXNpcy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU2Zjg4YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vaW1nL3BhcmVudGhlc2lzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9yb290LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vaW1nL3Jvb3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMjZlNDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9yb290LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9zcXVhcmVfcm9vdC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2ltZy9zcXVhcmVfcm9vdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNmMzQxNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vaW1nL3NxdWFyZV9yb290LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvY2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvY2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ3OGU0NAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9jaC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLlj5bmtogiLAorICAgICJPSyI6ICLlpb0iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9jei5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9jei5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmI5OTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2N6LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY3oiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlpydcWhaXQiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2RhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZWM3YmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvZGEuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlByZXZpZXciOiAiU211Z2tpZyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2RlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MGY3MDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvZGUuanMKQEAgLTAsMCArMSwyNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBc2NpaU1hdGggRm9ybXVsYSBJbnB1dCI6ICJBc2NpaU1hdGggRm9ybWVsZWRpdG9yIiwKKyAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgIkZvcm11bGEgRWRpdG9yIjogIkZvcm1lbGVkaXRvciIsCisgICAgIklucHV0IjogIkVpbmdhYmUiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlByZXZpZXciOiAiVm9yc2NoYXUiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBdHRlbnRpb24gSW50ZXJuZXQgRXhwbG9yZXIgdXNlcnM6IFBsZWFzZSBub3RlIHRoYXQgdGhlcmUgaXMgbm8gV1lTSVdZRyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZm9ybXVsYSBpbiB0aGUgZWRpdG9yITxiciAvPllvdSBtaWdodCB3aXNoIHRvIHVzZSA8YSBocmVmPVwiaHR0cDovL3d3dy5tb3ppbGxhLmNvbVwiIG9uY2xpY2s9XCJ3aW5kb3cub3Blbih0aGlzLmhyZWYsJ19ibGFuaycpO3JldHVybiBmYWxzZTtcIj5Nb3ppbGxhIEZpcmVmb3g8L2E+IGluc3RlYWQuIjogIkFjaHR1bmcgSW50ZXJuZXQgRXhwbG9yZXItQmVudXR6ZXI6IERpZSBGb3JtZWwgd2lyZCBpbSBFZGl0b3IgbmljaHQgYWxzIFdZU0lXWUcgZGFyZ2VzdGVsbHQuPGJyIC8+QmVudXR6ZW4gU2llIDxhIGhyZWY9XCJodHRwOi8vd3d3Lm1vemlsbGEuY29tXCIgdGFyZ2V0PVwiX2JsYW5rXCI+TW96aWxsYSBGaXJlZm94PC9hPiBhbHMgQWx0ZXJuYXRpdmUuIiwKKyAgICAgICAgIkJhc2VkIG9uIEFTQ0lJTWF0aE1MIGJ5ICI6ICJCYXNpZXJ0IGF1ZiBBU0NJSU1hdGhNTCB2b24gIiwKKyAgICAgICAgIkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFzY2lpTWF0aE1MIHZpc2l0IHRoaXMgcGFnZTogIjogIkbDvHIgd2VpdGVyZSBJbmZvcm1hdGlvbmVuIGJlc3VjaGVuIFNpZSBiaXR0ZSBkaWVzZSBTZWl0ZTogIiwKKyAgICAgICAgIlNob3cgTWF0aE1MIjogIlplaWdlIE1hdGhNTCIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9lZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9lZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTkxNmU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2VlLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9lbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9lbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmUwMDZjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2VsLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAiT0siOiAizpXOvc+EzqzOvs61zrkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWMxMTIyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2VzLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXMiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiT0siOiAiQWNlcHRhciIsCisgICAgIlByZXZpZXciOiAiUHJldmlzdWFsaXphciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2V1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2V1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NGU0MjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvZXUuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJldSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiVXR6aSIsCisgICAgIk9LIjogIkFkb3MiLAorICAgICJQcmV2aWV3IjogIkF1cnJlYmlzdGEiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9mYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9mYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWRjNzc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2ZhLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIsCisgICAgIk9LIjogItio2YTZhyIsCisgICAgIlByZXZpZXciOiAi2b7bjNi0INmG2YXYp9uM2LQiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9maS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9maS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjU1MmI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2ZpLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmkiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlBlcnV1dGEiLAorICAgICJPSyI6ICJIeXbDpGtzeSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5N2E2NTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvZnIuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxlciIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUHJldmlldyI6ICJBcGVyw6d1ICIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2hlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MDJmN2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvaGUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJoZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgIk9LIjogIteQ15nXqdeV16giCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9odS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9odS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzg1MjhkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2h1LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaHUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIk3DqWdzZW0iLAorICAgICJPSyI6ICJSZW5kYmVuIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvaXQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvaXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBhY2I0NQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9pdC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIml0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NzE4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvamEuanMKQEAgLTAsMCArMSwyMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBc2NpaU1hdGggRm9ybXVsYSBJbnB1dCI6ICJBc2NpaU1hdGgg5pWw5byP5YWl5YqbIiwKKyAgICAiQ2FuY2VsIjogIuS4reatoiIsCisgICAgIkZvcm11bGEgRWRpdG9yIjogIuaVsOW8j+OCqOODh+OCo+OCvyIsCisgICAgIklucHV0IjogIuWFpeWKmyIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUHJldmlldyI6ICLooajnpLoiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBdHRlbnRpb246IEVkaXRpbmcgdGhlIGZvcm11bGEgaW4gdGhlIGVkaXRvciBpcyBub3QgcG9zc2libGUsIHBsZWFzZSB1c2UgdGhpcyBkaWFsb2chIjogIuazqOaEjzog44Ko44OH44Kj44K/44Gn5pWw5byP44KS57eo6ZuG44GZ44KL44GT44Go44Gv44Gn44GN44G+44Gb44KT44CC5b+F44Ga44CB44GT44Gu44OA44Kk44Ki44Ot44Kw44KS5L2/55So44GX44Gm44GP44Gg44GV44GEIiwKKyAgICAgICAgIkJhc2VkIG9uIEFTQ0lJTWF0aE1MIGJ5ICI6ICJCYXNlZCBvbiBBU0NJSU1hdGhNTCBieSAiLAorICAgICAgICAiRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQXNjaWlNYXRoTUwgdmlzaXQgdGhpcyBwYWdlOiAiOiAiQXNjaWlNYXRo44Gu6Kmz57Sw44Gv44GT44Gu44Oa44O844K444Gr44GC44KK44G+44GZOiAiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZDE4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDMyOSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICIhPSI6ICIiLAorICAgICIhaW4iOiAiIiwKKyAgICAiJmd0Oy0iOiAiIiwKKyAgICAiJmd0Oz0iOiAiIiwKKyAgICAiJmx0Oz0iOiAiIiwKKyAgICAiJmx0Oz0mZ3Q7IjogIiIsCisgICAgIiZsdDt4Jmd0OyI6ICIiLAorICAgICImbmJzcDsgYCFgICZuYnNwOyI6ICIiLAorICAgICImbmJzcDsgYC5gICZuYnNwOyI6ICIiLAorICAgICImbmJzcDsgYDBgICZuYnNwOyI6ICIiLAorICAgICImbmJzcDsgYDJgICZuYnNwOyI6ICIiLAorICAgICImbmJzcDsgYDNgICZuYnNwOyI6ICIiLAorICAgICImbmJzcDsgYDRgICZuYnNwOyI6ICIiLAorICAgICImbmJzcDsgYDVgICZuYnNwOyI6ICIiLAorICAgICImbmJzcDsgYDZgICZuYnNwOyI6ICIiLAorICAgICImbmJzcDsgYDdgICZuYnNwOyI6ICIiLAorICAgICImbmJzcDsgYDhgICZuYnNwOyI6ICIiLAorICAgICImbmJzcDsgYDlgICZuYnNwOyI6ICIiLAorICAgICImbmJzcDsgYGVgICZuYnNwOyI6ICIiLAorICAgICImbmJzcDsmbmJzcDtgMWAgJm5ic3A7IjogIiIsCisgICAgIiZuYnNwO2Arezo6fWAmbmJzcDsiOiAiIiwKKyAgICAiJm5ic3A7YC06XFwgYCI6ICIiLAorICAgICImbmJzcDtgLXs6On1gJm5ic3A7IjogIiIsCisgICAgIiZuYnNwO2BDYCZuYnNwOyI6ICIiLAorICAgICImbmJzcDtgY29zYCI6ICIiLAorICAgICImbmJzcDtgbG5gJm5ic3A7IjogIiIsCisgICAgIiZuYnNwO2BwaWAgJm5ic3A7IjogIiIsCisgICAgIiZuYnNwO2BzaW5gIjogIiIsCisgICAgIiZuYnNwO2B0YW5gIjogIiIsCisgICAgIiZuYnNwO2B0aW1lc2AmbmJzcDsiOiAiIiwKKyAgICAiJnF1b3Q7dGV4dCZxdW90OyI6ICIiLAorICAgICInK2Zvcm11bGErJyI6ICIiLAorICAgICIoKG4pLChrKSkiOiAiIiwKKyAgICAiKHgrMSkvKHgtMSkiOiAiIiwKKyAgICAiKiI6ICIiLAorICAgICIqKiI6ICIiLAorICAgICIrLSI6ICIiLAorICAgICItJmd0OyI6ICIiLAorICAgICItJmx0OyI6ICIiLAorICAgICItOiI6ICIiLAorICAgICItPSI6ICIiLAorICAgICIvLyI6ICIiLAorICAgICIvXyI6ICIiLAorICAgICI6LiI6ICIiLAorICAgICI9Jmd0OyI6ICIiLAorICAgICJAIjogIiIsCisgICAgIkFBIjogIiIsCisgICAgIkFzY2lpTWF0aCBGb3JtdWxhIElucHV0IjogIiIsCisgICAgIkFzY2lpTWF0aE1MIEV4YW1wbGUiOiAiIiwKKyAgICAiQmFzZWQgb24gQVNDSUlNYXRoTUwgYnkiOiAiIiwKKyAgICAiQ0MiOiAiIiwKKyAgICAiQ2FuY2VsIjogIiIsCisgICAgIkRlbHRhIjogIiIsCisgICAgIkVFIjogIiIsCisgICAgIkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFzY2lpTWF0aE1MIHZpc2l0IHRoaXMgcGFnZToiOiAiIiwKKyAgICAiRm9ybXVsYSBFZGl0b3IiOiAiIiwKKyAgICAiR2FtbWEiOiAiIiwKKyAgICAiSW5wdXQiOiAiIiwKKyAgICAiTGFtYmRhIjogIiIsCisgICAgIk5OIjogIiIsCisgICAgIk8vIjogIiIsCisgICAgIk9LIjogIiIsCisgICAgIk9tZWdhIjogIiIsCisgICAgIlBoaSI6ICIiLAorICAgICJQaSI6ICIiLAorICAgICJQcmV2aWV3IjogIiIsCisgICAgIlBzaSI6ICIiLAorICAgICJRUSI6ICIiLAorICAgICJSUiI6ICIiLAorICAgICJTaWdtYSI6ICIiLAorICAgICJUVCI6ICIiLAorICAgICJUaGV0YSI6ICIiLAorICAgICJYaSI6ICIiLAorICAgICJaWiI6ICIiLAorICAgICJbW2EsYl0sW2MsZF1dIjogIiIsCisgICAgIlxcXFwiOiAiIiwKKyAgICAiXFxuQ2xpY2sgaW4gdGhlIGJveCB0byB1c2UgeW91ciBrZXlib2FyZCBvciB1c2UgdGhlIGJ1dHRvbnNcXG4iOiAiIiwKKyAgICAiXl4iOiAiIiwKKyAgICAiXl5eIjogIiIsCisgICAgIl9ffCI6ICIiLAorICAgICJffF8iOiAiIiwKKyAgICAiYCE9YCI6ICIiLAorICAgICJgIWluYCI6ICIiLAorICAgICJgJmFuZDtgIjogIiIsCisgICAgImAmY2FwO2AiOiAiIiwKKyAgICAiYCZjdXA7YCI6ICIiLAorICAgICJgJmd0Oy1gIjogIiIsCisgICAgImAmZ3Q7PWAiOiAiIiwKKyAgICAiYCZsdDs9Jmd0O2AiOiAiIiwKKyAgICAiYCZsdDs9YCI6ICIiLAorICAgICJgJmx0O3gmZ3Q7YCI6ICIiLAorICAgICJgJm9yO2AiOiAiIiwKKyAgICAiYCZxdW90O3RleHQmcXVvdDtgIjogIiIsCisgICAgImAoKG4pLChrKSlgIjogIiIsCisgICAgImAoeCsxKS8oeC0xKWAiOiAiIiwKKyAgICAiYCoqYCI6ICIiLAorICAgICJgKmAiOiAiIiwKKyAgICAiYCstYCI6ICIiLAorICAgICJgLSZndDtgIjogIiIsCisgICAgImAtJmx0O2AiOiAiIiwKKyAgICAiYC06YCI6ICIiLAorICAgICJgLT1gIjogIiIsCisgICAgImAvL2AiOiAiIiwKKyAgICAiYC9fYCI6ICIiLAorICAgICJgOi5gIjogIiIsCisgICAgImA9Jmd0O2AiOiAiIiwKKyAgICAiYEBgIjogIiIsCisgICAgImBBQWAiOiAiIiwKKyAgICAiYENDYCI6ICIiLAorICAgICJgRGVsdGFgIjogIiIsCisgICAgImBFRWAiOiAiIiwKKyAgICAiYEdhbW1hYCI6ICIiLAorICAgICJgTGFtYmRhYCI6ICIiLAorICAgICJgTk5gIjogIiIsCisgICAgImBPL2AiOiAiIiwKKyAgICAiYE9tZWdhYCI6ICIiLAorICAgICJgUGhpYCI6ICIiLAorICAgICJgUGlgIjogIiIsCisgICAgImBQc2lgIjogIiIsCisgICAgImBRUWAiOiAiIiwKKyAgICAiYFJSYCI6ICIiLAorICAgICJgU2lnbWFgIjogIiIsCisgICAgImBUVGAiOiAiIiwKKyAgICAiYFRoZXRhYCI6ICIiLAorICAgICJgWGlgIjogIiIsCisgICAgImBaWmAiOiAiIiwKKyAgICAiYFtbYSxiXSxbYyxkXV1gIjogIiIsCisgICAgImBcXFxcYCI6ICIiLAorICAgICJgX198YCI6ICIiLAorICAgICJgX3xfYCI6ICIiLAorICAgICJgYWxlcGhgIjogIiIsCisgICAgImBhbHBoYWAiOiAiIiwKKyAgICAiYGFuZGAiOiAiIiwKKyAgICAiYGJhcmFgIjogIiIsCisgICAgImBiYmFgIjogIiIsCisgICAgImBiYmJhYCI6ICIiLAorICAgICJgYmV0YWAiOiAiIiwKKyAgICAiYGNjYWAiOiAiIiwKKyAgICAiYGNoaWAiOiAiIiwKKyAgICAiYGRhcnJgIjogIiIsCisgICAgImBkZG90YWAiOiAiIiwKKyAgICAiYGRlbGAiOiAiIiwKKyAgICAiYGRlbHRhYCI6ICIiLAorICAgICJgZGlhbW9uZGAiOiAiIiwKKyAgICAiYGRvdGFgIjogIiIsCisgICAgImBkeS9keGAiOiAiIiwKKyAgICAiYGVwc2lgIjogIiIsCisgICAgImBldGFgIjogIiIsCisgICAgImBmcmFgIjogIiIsCisgICAgImBnYW1tYWAiOiAiIiwKKyAgICAiYGdyYWRgIjogIiIsCisgICAgImBoQXJyYCI6ICIiLAorICAgICJgaGFycmAiOiAiIiwKKyAgICAiYGhhdGFgIjogIiIsCisgICAgImBpZmAiOiAiIiwKKyAgICAiYGluYCI6ICIiLAorICAgICJgaW50YCI6ICIiLAorICAgICJgaW90YWAiOiAiIiwKKyAgICAiYGthcHBhYCI6ICIiLAorICAgICJgbEFycmAiOiAiIiwKKyAgICAiYGxhbWJkYWAiOiAiIiwKKyAgICAiYGxhcnJgIjogIiIsCisgICAgImBsaW1fKHgtJmd0O29vKWAiOiAiIiwKKyAgICAiYGxvZ2AiOiAiIiwKKyAgICAiYG11YCI6ICIiLAorICAgICJgbm5gIjogIiIsCisgICAgImBub3RgIjogIiIsCisgICAgImBudWAiOiAiIiwKKyAgICAiYG8rYCI6ICIiLAorICAgICJgby5gIjogIiIsCisgICAgImBvaW50YCI6ICIiLAorICAgICJgb21lZ2FgIjogIiIsCisgICAgImBvb2AiOiAiIiwKKyAgICAiYG9yYCI6ICIiLAorICAgICJgb3hgIjogIiIsCisgICAgImBwaGlgIjogIiIsCisgICAgImBwaWAiOiAiIiwKKyAgICAiYHByb2RgIjogIiIsCisgICAgImBwcm9wYCI6ICIiLAorICAgICJgcHNpYCI6ICIiLAorICAgICJgcXVhZGAiOiAiIiwKKyAgICAiYHJBcnJgIjogIiIsCisgICAgImByaG9gIjogIiIsCisgICAgImByb290KG4pKHgpYCI6ICIiLAorICAgICJgc2ZhYCI6ICIiLAorICAgICJgc2lnbWFgIjogIiIsCisgICAgImBzcXJ0KHgpYCI6ICIiLAorICAgICJgc3F1YXJlYCI6ICIiLAorICAgICJgc3RhY2tyZWwoLSZndDspKCspYCI6ICIiLAorICAgICJgc3ViYCI6ICIiLAorICAgICJgc3ViZWAiOiAiIiwKKyAgICAiYHN1bWAiOiAiIiwKKyAgICAiYHN1cGAiOiAiIiwKKyAgICAiYHN1cGVgIjogIiIsCisgICAgImB0YXVgIjogIiIsCisgICAgImB0aGV0YWAiOiAiIiwKKyAgICAiYHR0YWAiOiAiIiwKKyAgICAiYHVhcnJgIjogIiIsCisgICAgImB1bGFgIjogIiIsCisgICAgImB1cHNpbG9uYCI6ICIiLAorICAgICJgdXVgIjogIiIsCisgICAgImB2ZWNhYCI6ICIiLAorICAgICJgdnZgIjogIiIsCisgICAgImB4XyhtbilgIjogIiIsCisgICAgImB4aWAiOiAiIiwKKyAgICAiYHh4YCI6ICIiLAorICAgICJgemV0YWAiOiAiIiwKKyAgICAiYHwtJmd0O2AiOiAiIiwKKyAgICAiYHwtLWAiOiAiIiwKKyAgICAiYHw9PWAiOiAiIiwKKyAgICAiYHxfX2AiOiAiIiwKKyAgICAiYHx+YCI6ICIiLAorICAgICJgfj1gIjogIiIsCisgICAgImB+fGAiOiAiIiwKKyAgICAiYH5+YCI6ICIiLAorICAgICJhbGVwaCI6ICIiLAorICAgICJhbHBoYSI6ICIiLAorICAgICJhbmQiOiAiIiwKKyAgICAiYmFyYSI6ICIiLAorICAgICJiYmEiOiAiIiwKKyAgICAiYmJiYSI6ICIiLAorICAgICJiZXRhIjogIiIsCisgICAgImNjYSI6ICIiLAorICAgICJjaGkiOiAiIiwKKyAgICAiZGFyciI6ICIiLAorICAgICJkZG90YSI6ICIiLAorICAgICJkZWwiOiAiIiwKKyAgICAiZGVsdGEiOiAiIiwKKyAgICAiZGlhbW9uZCI6ICIiLAorICAgICJkb3RhIjogIiIsCisgICAgImR5L2R4IjogIiIsCisgICAgImVwc2kiOiAiIiwKKyAgICAiZXRhIjogIiIsCisgICAgImZyYSI6ICIiLAorICAgICJnYW1tYSI6ICIiLAorICAgICJncmFkIjogIiIsCisgICAgImhBcnIiOiAiIiwKKyAgICAiaGFyciI6ICIiLAorICAgICJoYXRhIjogIiIsCisgICAgImlmIjogIiIsCisgICAgImluIjogIiIsCisgICAgImludCI6ICIiLAorICAgICJpbnRfYV5iZih4KWR4IjogIiIsCisgICAgImlvdGEiOiAiIiwKKyAgICAia2FwcGEiOiAiIiwKKyAgICAibEFyciI6ICIiLAorICAgICJsYW1iZGEiOiAiIiwKKyAgICAibGFyciI6ICIiLAorICAgICJsaW1fKHgtJmd0O29vKSI6ICIiLAorICAgICJtdSI6ICIiLAorICAgICJubiI6ICIiLAorICAgICJubm4iOiAiIiwKKyAgICAibm90IjogIiIsCisgICAgIm51IjogIiIsCisgICAgIm8rIjogIiIsCisgICAgIm8uIjogIiIsCisgICAgIm9pbnQiOiAiIiwKKyAgICAib21lZ2EiOiAiIiwKKyAgICAib28iOiAiIiwKKyAgICAib3IiOiAiIiwKKyAgICAib3giOiAiIiwKKyAgICAicGhpIjogIiIsCisgICAgInBpIjogIiIsCisgICAgInByb2QiOiAiIiwKKyAgICAicHJvcCI6ICIiLAorICAgICJwc2kiOiAiIiwKKyAgICAicXVhZCI6ICIiLAorICAgICJyQXJyIjogIiIsCisgICAgInJobyI6ICIiLAorICAgICJyb290KG4pKHgpIjogIiIsCisgICAgInNmYSI6ICIiLAorICAgICJzaWdtYSI6ICIiLAorICAgICJzcXJ0KHgpIjogIiIsCisgICAgInNxdWFyZSI6ICIiLAorICAgICJzdGFja3JlbCgtJmd0OykoKykiOiAiIiwKKyAgICAic3ViIjogIiIsCisgICAgInN1YmUiOiAiIiwKKyAgICAic3VtIjogIiIsCisgICAgInN1bV8obj0xKV5vbyI6ICIiLAorICAgICJzdXAiOiAiIiwKKyAgICAic3VwZSI6ICIiLAorICAgICJ0YXUiOiAiIiwKKyAgICAidGhldGEiOiAiIiwKKyAgICAidHRhIjogIiIsCisgICAgInVhcnIiOiAiIiwKKyAgICAidWxhIjogIiIsCisgICAgInVwc2lsb24iOiAiIiwKKyAgICAidXUiOiAiIiwKKyAgICAidXV1IjogIiIsCisgICAgInZlY2EiOiAiIiwKKyAgICAidnYiOiAiIiwKKyAgICAidnZ2IjogIiIsCisgICAgInheKG0rbikiOiAiIiwKKyAgICAieF8obW4pIjogIiIsCisgICAgInhpIjogIiIsCisgICAgInh4IjogIiIsCisgICAgInpldGEiOiAiIiwKKyAgICAifC0mZ3Q7IjogIiIsCisgICAgInwtLSI6ICIiLAorICAgICJ8PT0iOiAiIiwKKyAgICAifF9fIjogIiIsCisgICAgInx+IjogIiIsCisgICAgIn49IjogIiIsCisgICAgIn58IjogIiIsCisgICAgIn5+IjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvbHQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvbHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDExODkwOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9sdC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdMWhYXVrdGkiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2x2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL2x2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4M2Q1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvbHYuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXRjZWx0IiwKKyAgICAiT0siOiAiTGFiaSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL25iLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNmRmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvbmIuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJuYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAiT0siOiAiT0siLAorICAgICJQcmV2aWV3IjogIkZvcmjDpW5kc3Zpc25pbmciCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9ubC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDU3MDVjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL25sLmpzCkBAIC0wLDAgKzEsMjMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQXNjaWlNYXRoIEZvcm11bGEgSW5wdXQiOiAiQXNjaWlNYXRoIEZvcm11bGUgSW52b2VyZW4iLAorICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAiRm9ybXVsYSBFZGl0b3IiOiAiRm9ybXVsZSBJbnZvZXJlbiIsCisgICAgIklucHV0IjogIkludm9lciIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUHJldmlldyI6ICJWb29yYmVlbGQiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBdHRlbnRpb246IEVkaXRpbmcgdGhlIGZvcm11bGEgaW4gdGhlIGVkaXRvciBpcyBub3QgcG9zc2libGUsIHBsZWFzZSB1c2UgdGhpcyBkaWFsb2chIjogIkxldCBvcCEgaGV0IGJld2Vya2VuIHZhbiBkZSBmb3JtdWxlIGluIGRlIGVkaXRvciBpcyBuaWV0IG1vZ2VsaWprLCBnZWJydWlrIGRpdCBkaWFsb29nISIsCisgICAgICAgICJCYXNlZCBvbiBBU0NJSU1hdGhNTCBieSAiOiAiR2ViYXNzZWVyZCBvcCAgQVNDSUlNYXRoTUwgdmFuICIsCisgICAgICAgICJGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBBc2NpaU1hdGhNTCB2aXNpdCB0aGlzIHBhZ2U6ICI6ICJWb29yIG1lZXIgaW5mb3JtYXRpZSBvdmVyIEFzY2lpTWF0aE1MIGdhIGplIG5hYXI6ICIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9wbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGYyZmQyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL3BsLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicGwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFudWx1aiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUHJldmlldyI6ICJQb2RnbMSFZCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNGJjNzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvcHRfYnIuanMKQEAgLTAsMCArMSwzMSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwdF9iciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICImcXVvdDt0ZXh0JnF1b3Q7IjogIiZxdW90O3RleHQmcXVvdDsiLAorICAgICJBc2NpaU1hdGggRm9ybXVsYSBJbnB1dCI6ICJJbnNlcmlyIEbDs3JtdWxhIEFzY2lpTWF0aCIsCisgICAgIkFzY2lpTWF0aE1MIEV4YW1wbGUiOiAiRXhlbXBsbyBBc2NpaU1hdGhNTCIsCisgICAgIkJhc2VkIG9uIEFTQ0lJTWF0aE1MIGJ5IjogIkJhc2VhZG8gbm8gQVNDSUlNYXRoTUwgcG9yIiwKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQXNjaWlNYXRoTUwgdmlzaXQgdGhpcyBwYWdlOiI6ICJQYXJhIG1haW9yZXMgaW5mb3JtYcOnw7VlcyBkbyBBc2NpaU1hdGhNTCB2aXNpdGUgZXN0ZSBzaXRlOiIsCisgICAgIkZvcm11bGEgRWRpdG9yIjogIkVkaXRvciBkZSBGw7NybXVsYSIsCisgICAgIklucHV0IjogIkVudHJhZGEiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlByZXZpZXciOiAiVmlzdWFsaXphciIsCisgICAgImAmcXVvdDt0ZXh0JnF1b3Q7YCI6ICJgJnF1b3Q7dGV4dG8mcXVvdDtgIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQXR0ZW50aW9uIEludGVybmV0IEV4cGxvcmVyIHVzZXJzOiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXJlIGlzIG5vIFdZU0lXWUcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZvcm11bGEgaW4gdGhlIGVkaXRvciEgWW91IG1pZ2h0IHdpc2ggdG8gdXNlIE1vemlsbGEgRmlyZWZveCBpbnN0ZWFkLiI6ICJBdGVuw6fDo28gdXN1w6FyaW9zIGRvIEludGVybmV0IEV4cGxvcmVyOiBPYnNlcnZlIHF1ZSBuw6NvIMOpIHBvc3PDrXZlbCByZXByZXNlbnRhciBmw7NybXVsYXMgbm8gZWRpdG9yIG5vIG1vZG8gZGUgdmlzdWFsaXphw6fDo28hIMOJIHByZWZlcml2ZWxtZW50ZSBxdWUgdm9jw6ogdXRpbGl6ZSBvIE1vemlsbGEgRmlyZWZveC4iLAorICAgICAgICAiQXR0ZW50aW9uOiBFZGl0aW5nIHRoZSBmb3JtdWxhIGluIHRoZSBlZGl0b3IgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgdXNlIHRoaXMgZGlhbG9nISI6ICJBdGVuw6fDo286IE7Do28gw6kgcG9zc8OtdmVsIGVkaXRhciBhIGbDs3JtdWxhIG5vIGVkaXRvci4gUHBvciBmYXZvciwgdXRpbGl6ZSBlc3RlIGNhaXhhIGRlIGRpw6Fsb2dvISIsCisgICAgICAgICJFcXVhdGlvbiI6ICJFcXVhw6fDo28iLAorICAgICAgICAiSW5zZXJ0IjogIkluc2VyaXIiLAorICAgICAgICAiU2VsZWN0IG9wZXJhdGlvbiI6ICJTZWxlY2lvbmFyIG9wZXJhw6fDo28iLAorICAgICAgICAiU2hvdyBNYXRoTUwiOiAiTW9zdHJhciBNYXRoTUwiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvcm8uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvcm8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2ZTFjMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9yby5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJvIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiLAorICAgICJPSyI6ICJBY2NlcHTEgyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL3J1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNDk1MTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvcnUuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQcmV2aWV3IjogItCf0YDQtdC00LLQsNGA0LjRgtC10LvRjNC90YvQuSDQv9GA0L7RgdC80L7RgtGAIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvc2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvc2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4NDQ3NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9zaC5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUHJldmlldyI6ICJQcmVnbGVkIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvc2kuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvc2kuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY3NDg5MgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9zaS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiLAorICAgICJPSyI6ICJWIHJlZHUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9zci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9zci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDE5YjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL3NyLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IiwKKyAgICAiT0siOiAiT0siLAorICAgICJQcmV2aWV3IjogItCf0YDQtdCz0LvQtdC0IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvc3YuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg3Y2EwMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy9zdi5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInN2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlByZXZpZXciOiAiRsO2cmhhbmRzZ3JhbnNrYSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL3RoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9sYW5nL3RoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYTljOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvdGguanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0aCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwKKyAgICAiT0siOiAi4LiV4LiB4Lil4LiHIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvdHIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvdHIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVlOWNlMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy90ci5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLEsHB0YWwiLAorICAgICJPSyI6ICJUYW1hbSIsCisgICAgIlByZXZpZXciOiAiw5ZuaXpsZW1lIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvdm4uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0VxdWF0aW9uL2xhbmcvdm4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ4MmUwMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vbGFuZy92bi5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInZuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJI4buneSIsCisgICAgIk9LIjogIsSQ4buTbmcgw70iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vcG9wdXBzL2RpYWxvZy5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9wb3B1cHMvZGlhbG9nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI5YjJjYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vcG9wdXBzL2RpYWxvZy5odG1sCkBAIC0wLDAgKzEsMzc3IEBACis8IURPQ1RZUEUgaHRtbAorICAgICBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIgorICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKworPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgorPGhlYWQ+CisgIDx0aXRsZT5Bc2NpaU1hdGggRm9ybXVsYSBJbnB1dDwvdGl0bGU+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uLy4uL3BvcHVwcy9wb3B1cC5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL0FTQ0lJTWF0aE1MLmpzIj48L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vLi4vLi4vcG9wdXBzL3BvcHVwLmNzcyIgLz4KKworICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorCS8qIDwhW0NEQVRBWyAqLworCSNvdXRwdXROb2RlLCNpbnB1dFRleHQsI21hdGhtbCB7CisJCXBhZGRpbmc6NXB4OworCQliYWNrZ3JvdW5kLWNvbG9yOndoaXRlOworCQl3aWR0aDo5OCU7CisJCWhlaWdodDoyMDBweDsKKwkJZm9udC1zaXplOjEuM2VtOworCQlib3JkZXI6IDFweCBzb2xpZCBkYXJrZ3JleTsKKwkJb3ZlcmZsb3c6YXV0bzsKKwl9CisJI2NsaWNrSW5wdXQgeworCQl3aWR0aDoxMDAlOworCQlib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7CisJCWJhY2tncm91bmQtY29sb3I6IHdoaXRlOworCQl0ZXh0LWFsaWduOmNlbnRlcjsKKwl9CisJI2NsaWNrSW5wdXQgdGQgeworCQlib3JkZXI6IHRoaW4gc29saWQgZ3JheTsKKwkJY3Vyc29yOnBvaW50ZXI7CisJCWZvbnQtc2l6ZToxLjFlbTsKKwkJCisJfQorCWgzIHsKKwkJZm9udC1zaXplOjEuNmVtOworCX0KKwkvKiBdXT4gKi8KKyAgPC9zdHlsZT4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorIC8vIDwhW0NEQVRBWworLy8gU1RBUlQgLSBBZGRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEFTQ0lJTWF0aE1MIDIuMAordmFyIEFNdHJhbnNsYXRlZCA9IGZhbHNlOworLy8gTmV4dCAyIGZ1bmN0aW9ucyBjb3BpZWQgZnJvbSBBU0NJSU1hdGhNTCAxLjQuNworZnVuY3Rpb24gQU1jcmVhdGVFbGVtZW50WEhUTUwodCkgeworICBpZiAoaXNJRSkgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7CisgIGVsc2UgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsIHQpOworfQorZnVuY3Rpb24gQU1pbml0U3ltYm9scygpIHsKKyAgdmFyIHRleHN5bWJvbHMgPSBbXSwgaTsKKyAgZm9yIChpPTA7IGk8QU1zeW1ib2xzLmxlbmd0aDsgaSsrKQorICAgIGlmIChBTXN5bWJvbHNbaV0udGV4KSAKKyAgICAgIHRleHN5bWJvbHNbdGV4c3ltYm9scy5sZW5ndGhdID0ge2lucHV0OkFNc3ltYm9sc1tpXS50ZXgsIAorICAgICAgICB0YWc6QU1zeW1ib2xzW2ldLnRhZywgb3V0cHV0OkFNc3ltYm9sc1tpXS5vdXRwdXQsIHR0eXBlOkFNc3ltYm9sc1tpXS50dHlwZX07CisgIEFNc3ltYm9scyA9IEFNc3ltYm9scy5jb25jYXQodGV4c3ltYm9scyk7CisgIEFNc3ltYm9scy5zb3J0KGNvbXBhcmVOYW1lcyk7CisgIGZvciAoaT0wOyBpPEFNc3ltYm9scy5sZW5ndGg7IGkrKykgQU1uYW1lc1tpXSA9IEFNc3ltYm9sc1tpXS5pbnB1dDsKK30KKy8vIEVORCAtIEFkZGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQVNDSUlNYXRoTUwgMi4wCisKKyAgIHdpbmRvdy5yZXNpemVUbyg1MDAsIDMwMCk7Cit2YXIgc2hvd2FzY2lpZm9ybXVsYW9uaG92ZXIgPSBmYWxzZTsKK2lmICh0eXBlb2YgWGluaGEgPT0gInVuZGVmaW5lZCIpCisJWGluaGEgPSB3aW5kb3cub3BlbmVyLlhpbmhhOworCitmdW5jdGlvbiBpMThuKHN0cikgeworICByZXR1cm4gKFhpbmhhLl9sYyhzdHIsICdFcXVhdGlvbicpKTsKK30KK2Z1bmN0aW9uIHNldCAoc3RyaW5nKQoreworCXZhciBpbnB1dEZpZWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlucHV0VGV4dCIpOworCWlucHV0RmllbGQudmFsdWUgKz0gc3RyaW5nOworCXByZXZpZXcoKTsKKwlpbnB1dEZpZWxkLmZvY3VzKCk7CisJcmV0dXJuIGZhbHNlOworfQorZnVuY3Rpb24gcHJldmlldygpIHsKKyAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbnB1dFRleHQiKSAhPSAnJykgeworICAgICAgdmFyIHN0ciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbnB1dFRleHQiKS52YWx1ZTsKKyAgICAgIHZhciBvdXRub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm91dHB1dE5vZGUiKTsKKyAgICAgIHZhciBuZXdub2RlID0gQU1jcmVhdGVFbGVtZW50WEhUTUwoImRpdiIpOworICAgICAgbmV3bm9kZS5zZXRBdHRyaWJ1dGUoImlkIiwib3V0cHV0Tm9kZSIpOworICAgICAgb3V0bm9kZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdub2RlLG91dG5vZGUpOworICAgICAgb3V0bm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvdXRwdXROb2RlIik7CisgICAgICB2YXIgbiA9IG91dG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgb3V0bm9kZS5yZW1vdmVDaGlsZChvdXRub2RlLmZpcnN0Q2hpbGQpOworICAgICAgb3V0bm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYCIrc3RyKyJgIikpOworICAgICAgQU1wcm9jZXNzTm9kZShvdXRub2RlLHRydWUpOworICB9Cit9CitmdW5jdGlvbiBJbml0KCkgeworCV9fZGxnX3RyYW5zbGF0ZSgnRXF1YXRpb24nKTsKKwlfX2RsZ19pbml0KCk7CisJdmFyIHBhcmFtID0gd2luZG93LmRpYWxvZ0FyZ3VtZW50czsKKwl2YXIgY2ZnID0gcGFyYW1bImVkaXRvciJdLmNvbmZpZzsKKwkKKwltYXRoY29sb3IgPSBjZmcuRXF1YXRpb24ubWF0aGNvbG9yOworCW1hdGhmb250ZmFtaWx5ID0gY2ZnLkVxdWF0aW9uLm1hdGhmb250ZmFtaWx5OworCQorCXRyYW5zbGF0ZSgpOworCXZhciBpbnB1dEZpZWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlucHV0VGV4dCIpOyAKKwkKKwlpZiAocGFyYW1bImVkaXRlZE5vZGUiXSAmJiBwYXJhbVsiZWRpdGVkTm9kZSJdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnc3BhbicpCisJeworCQl2YXIgZm9ybXVsYSA9IHBhcmFtWyJlZGl0ZWROb2RlIl0uZ2V0QXR0cmlidXRlKCJ0aXRsZSIpLnJlcGxhY2UoL15gKiguKj8pYCokL20sIiQxIik7CisJCWlmICghZm9ybXVsYSkgZm9ybXVsYSA9IHBhcmFtWyJlZGl0ZWROb2RlIl0uaW5uZXJIVE1MLnJlcGxhY2UoL15gKiguKj8pYCokL20sIiQxIik7IAorCQlpbnB1dEZpZWxkLnZhbHVlID0gZm9ybXVsYTsKKwkJcHJldmlldygpOworCX0KKwllbHNlIGlucHV0RmllbGQudmFsdWUgPSAnJzsKKwlpbnB1dEZpZWxkLmZvY3VzKCk7Cit9CisgIAorZnVuY3Rpb24gb25PSygpIHsKKyAJCisgdmFyIHBhcmFtID0geworIAkiZWRpdGVkTm9kZSI6d2luZG93LmRpYWxvZ0FyZ3VtZW50cy5lZGl0ZWROb2RlLAorIAkiZm9ybXVsYSIgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW5wdXRUZXh0IikudmFsdWUKKyB9OworIAorIF9fZGxnX2Nsb3NlKHBhcmFtKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBvbkNhbmNlbCgpIHsKKyAgX19kbGdfY2xvc2UobnVsbCk7CisgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gdHJhbnNsYXRlKCkgeworICBpZiAoIUFNdHJhbnNsYXRlZCkgeyAvLyBydW4gdGhpcyBvbmx5IG9uY2UKKyAgICBBTXRyYW5zbGF0ZWQgPSB0cnVlOworICAgIEFNaW5pdFN5bWJvbHMoKTsKKyAgICBBTXByb2Nlc3NOb2RlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbGlja0lucHV0IiksdHJ1ZSk7CisgICAgcHJldmlldygpOworICB9Cit9Cit3aW5kb3cub25sb2FkID0gSW5pdDsKKworZnVuY3Rpb24gQU1ub2RlMnN0cmluZyhpbk5vZGUsaW5kZW50KSB7CisvLyB0aGFua3MgdG8gSmFtZXMgRnJhemVyIGZvciBjb250cmlidXRpbmcgYW4gaW5pdGlhbCB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24KKyAgIHZhciBpLCBzdHIgPSAiIjsKKyAgIGlmKGluTm9kZS5ub2RlVHlwZSA9PSAxKSB7CisgICAgICAgdmFyIG5hbWUgPSBpbk5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsgLy8gKElFIGZpeCkKKyAgICAgICBzdHIgPSAiXHIiICsgaW5kZW50ICsgIjwiICsgbmFtZTsKKyAgICAgICBmb3IoaT0wOyBpIDwgaW5Ob2RlLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgIGlmIChpbk5vZGUuYXR0cmlidXRlc1tpXS5ub2RlVmFsdWUhPSJpdGFsaWMiICYmCisgICAgICAgICAgICAgICBpbk5vZGUuYXR0cmlidXRlc1tpXS5ub2RlVmFsdWUhPSIiICYmICAvL3N0b3AganVuayBhdHRyaWJ1dGVzCisgICAgICAgICAgICAgICBpbk5vZGUuYXR0cmlidXRlc1tpXS5ub2RlVmFsdWUhPSJpbmhlcml0IiAmJiAvLyAobW9zdGx5IElFKQorICAgICAgICAgICAgICAgaW5Ob2RlLmF0dHJpYnV0ZXNbaV0ubm9kZVZhbHVlIT11bmRlZmluZWQgJiYKKyAgICAgICAgICAgICAgIGluTm9kZS5hdHRyaWJ1dGVzW2ldLm5vZGVOYW1lWzBdICE9ICctJworICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgc3RyICs9ICIgIitpbk5vZGUuYXR0cmlidXRlc1tpXS5ub2RlTmFtZSsiPSIrCisgICAgICAgICAgICAgICAgICAgICAiXCIiK2luTm9kZS5hdHRyaWJ1dGVzW2ldLm5vZGVWYWx1ZSsiXCIiOworICAgICAgIGlmIChuYW1lID09ICJtYXRoIikgCisgICAgICAgICAgIHN0ciArPSAiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiIjsKKyAgICAgICBzdHIgKz0gIj4iOworICAgICAgIGZvcihpPTA7IGk8aW5Ob2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgIHN0ciArPSBBTW5vZGUyc3RyaW5nKGluTm9kZS5jaGlsZE5vZGVzW2ldLCBpbmRlbnQrIiAgIik7CisgICAgICAgaWYgKG5hbWUgIT0gIm1vIiAmJiBuYW1lICE9ICJtaSIgJiYgbmFtZSAhPSAibW4iKSBzdHIgKz0gIlxyIitpbmRlbnQ7CisgICAgICAgc3RyICs9ICI8LyIgKyBuYW1lICsgIj4iOworICAgfQorICAgZWxzZSBpZihpbk5vZGUubm9kZVR5cGUgPT0gMykgeworICAgICAgIHZhciBzdCA9IGluTm9kZS5ub2RlVmFsdWU7CisgICAgICAgZm9yIChpPTA7IGk8c3QubGVuZ3RoOyBpKyspCisgICAgICAgICAgIGlmIChzdC5jaGFyQ29kZUF0KGkpPDMyIHx8IHN0LmNoYXJDb2RlQXQoaSk+MTI2KQorICAgICAgICAgICAgICAgc3RyICs9ICImIyIrc3QuY2hhckNvZGVBdChpKSsiOyI7CisgICAgICAgICAgIGVsc2UgaWYgKHN0LmNoYXJBdChpKT09IjwiICYmIGluZGVudCAhPSAiICAiKSBzdHIgKz0gIiZsdDsiOworICAgICAgICAgICBlbHNlIGlmIChzdC5jaGFyQXQoaSk9PSI+IiAmJiBpbmRlbnQgIT0gIiAgIikgc3RyICs9ICImZ3Q7IjsKKyAgICAgICAgICAgZWxzZSBpZiAoc3QuY2hhckF0KGkpPT0iJiIgJiYgaW5kZW50ICE9ICIgICIpIHN0ciArPSAiJmFtcDsiOworICAgICAgICAgICBlbHNlIHN0ciArPSBzdC5jaGFyQXQoaSk7CisgICB9CisgICByZXR1cm4gc3RyOworfSAKK2Z1bmN0aW9uIHNob3dNYXRoTUwoKQoreworCXZhciBtYXRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm91dHB1dE5vZGUiKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgibWF0aCIpWzBdOworCWlmIChtYXRoKQorCQltYXRoLnBhcmVudE5vZGUuaW5uZXJIVE1MID0gJzxwcmU+JytYaW5oYS5odG1sRW5jb2RlKEFNbm9kZTJzdHJpbmcobWF0aCwnJykpKyc8L3ByZT4nOworfQorLy8gXV0+Cis8L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBjbGFzcz0iZGlhbG9nIj4KKzxkaXYgY2xhc3M9InRpdGxlIj5Bc2NpaU1hdGggRm9ybXVsYSBJbnB1dDwvZGl2PgorPCEtLQorVGFibGUgbW9kaWZpZWQgZnJvbSBDaGFyYWN0ZXJNYXAgZm9yIEFTQ0lJTWF0aE1MIGJ5IFBldGVyIEppcHNlbgorSFRNTFNvdXJjZSBiYXNlZCBvbiBIVE1MQXJlYSBYVEQgMS41IChodHRwOi8vbW9zZm9yZ2UubmV0L3Byb2plY3RzL2h0bWxhcmVhM3h0ZC8pIG1vZGlmaWVkIGJ5IEhvbGdlciBIZWVzCitPcmlnaW5hbCBBdXRob3IgLSBCZXJuaGFyZCBQZmVpZmVyIG5vdm9jYWluZUBnbXgubmV0CistLT4KKzx0YWJsZSAgaWQ9ImNsaWNrSW5wdXQiPgorPHRyPgorPHRkIGNvbHNwYW49IjMiIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSIoeCsxKS8oeC0xKSIgb25jbGljaz0ic2V0KCcoeCsxKS8oeC0xKScpIj5gKHgrMSkvKHgtMSlgPC90ZD4KKzx0ZCBjb2xzcGFuPSIyIiBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0ieF4obStuKSIgb25jbGljaz0ic2V0KCd4XihtK24pJykiPmB4XihtK24pYDwvdGQ+Cis8dGQgY29sc3Bhbj0iMiIgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9InhfKG1uKSIgb25jbGljaz0ic2V0KCd4XyhtbiknKSI+YHhfKG1uKWA8L3RkPgorPHRkIGNvbHNwYW49IjIiIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJzcXJ0KHgpIiBvbmNsaWNrPSJzZXQoJ3NxcnQoeCknKSI+YHNxcnQoeClgPC90ZD4KKzx0ZCBjb2xzcGFuPSIzIiBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0icm9vdChuKSh4KSIgb25jbGljaz0ic2V0KCdyb290KG4pKHgpJykiPmByb290KG4pKHgpYDwvdGQ+Cis8dGQgY29sc3Bhbj0iMiIgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9IiZxdW90O3RleHQmcXVvdDsiIG9uY2xpY2s9InNldCgnJnF1b3Q7dGV4dCZxdW90OycpIj5gJnF1b3Q7dGV4dCZxdW90O2A8L3RkPgorPHRkIGNvbHNwYW49IjIiIGNsYXNzPSJjaGFyYWN0ZXIiIHN0eWxlPSJjdXJzb3I6ZGVmYXVsdCI+PC90ZD4KKzwvdHI+PHRyPgorPHRkIGNvbHNwYW49IjIiIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJkeS9keCIgb25jbGljaz0ic2V0KCdkeS9keCcpIj5gZHkvZHhgPC90ZD4KKzx0ZCBjb2xzcGFuPSIzIiBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0ibGltXyh4LSZndDtvbykiIG9uY2xpY2s9InNldCgnbGltXyh4LSZndDtvbyknKSI+YGxpbV8oeC0mZ3Q7b28pYDwvdGQ+Cis8dGQgY29sc3Bhbj0iMyIgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9InN1bV8obj0xKV5vbyIgb25jbGljaz0ic2V0KCdzdW1fKG49MSleb28nKSI+YHN1bV8obj0xKV5vb2A8L3RkPgorPHRkIGNvbHNwYW49IjMiIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJpbnRfYV5iZih4KWR4IiBvbmNsaWNrPSJzZXQoJ2ludF9hXmJmKHgpZHgnKSI+YGludF9hXmJmKHgpZHhgPC90ZD4KKzx0ZCBjb2xzcGFuPSIzIiBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iW1thLGJdLFtjLGRdXSIgb25jbGljaz0ic2V0KCdbW2EsYl0sW2MsZF1dJykiPmBbW2EsYl0sW2MsZF1dYDwvdGQ+Cis8dGQgY29sc3Bhbj0iMiIgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9IigobiksKGspKSIgb25jbGljaz0ic2V0KCcoKG4pLChrKSknKSI+YCgobiksKGspKWA8L3RkPgorPC90cj48dHI+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9IioiIG9uY2xpY2s9InNldCgnKicpIj5gKmA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSIqKiIgb25jbGljaz0ic2V0KCcqKicpIj5gKipgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iLy8iIG9uY2xpY2s9InNldCgnLy8nKSI+YC8vYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9IlxcIiBvbmNsaWNrPSJzZXQoJ1xcXFwnKSI+YFxcYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9Inh4IiBvbmNsaWNrPSJzZXQoJ3h4JykiPmB4eGA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSItOiIgb25jbGljaz0ic2V0KCctOicpIj5gLTpgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iQCIgb25jbGljaz0ic2V0KCdAJykiPmBAYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9Im8rIiBvbmNsaWNrPSJzZXQoJ28rJykiPmBvK2A8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJveCIgb25jbGljaz0ic2V0KCdveCcpIj5gb3hgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iby4iIG9uY2xpY2s9InNldCgnby4nKSI+YG8uYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9InN1bSIgb25jbGljaz0ic2V0KCdzdW0nKSI+YHN1bWA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJwcm9kIiBvbmNsaWNrPSJzZXQoJ3Byb2QnKSI+YHByb2RgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iXl4iIG9uY2xpY2s9InNldCgnXl4nKSI+YF5eYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9Il5eXiIgb25jbGljaz0ic2V0KCdeXl4nKSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTpsYXJnZXIiPmAmYW5kO2A8L3NwYW4+PC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0idnYiIG9uY2xpY2s9InNldCgndnYnKSI+YHZ2YDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9InZ2diIgb25jbGljaz0ic2V0KCd2dnYnKSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTpsYXJnZXIiPmAmb3I7YDwvc3Bhbj48L3RkPgorPC90cj48dHI+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9IiE9IiBvbmNsaWNrPSJzZXQoJyE9JykiPmAhPWA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSImbHQ7PSIgb25jbGljaz0ic2V0KCcmbHQ7PScpIj5gJmx0Oz1gPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iJmd0Oz0iIG9uY2xpY2s9InNldCgnJmd0Oz0nKSI+YCZndDs9YDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9Ii0mbHQ7IiBvbmNsaWNrPSJzZXQoJy0mbHQ7JykiPmAtJmx0O2A8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSImZ3Q7LSIgb25jbGljaz0ic2V0KCcmZ3Q7LScpIj5gJmd0Oy1gPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iaW4iIG9uY2xpY2s9InNldCgnaW4nKSI+YGluYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9IiFpbiIgb25jbGljaz0ic2V0KCchaW4nKSI+YCFpbmA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJzdWIiIG9uY2xpY2s9InNldCgnc3ViJykiPmBzdWJgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0ic3VwIiBvbmNsaWNrPSJzZXQoJ3N1cCcpIj5gc3VwYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9InN1YmUiIG9uY2xpY2s9InNldCgnc3ViZScpIj5gc3ViZWA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJzdXBlIiBvbmNsaWNrPSJzZXQoJ3N1cGUnKSI+YHN1cGVgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iTy8iIG9uY2xpY2s9InNldCgnTy8nKSI+YE8vYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9Im5uIiBvbmNsaWNrPSJzZXQoJ25uJykiPmBubmA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJubm4iIG9uY2xpY2s9InNldCgnbm5uJykiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6bGFyZ2VyIj5gJmNhcDtgPC9zcGFuPjwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9InV1IiBvbmNsaWNrPSJzZXQoJ3V1JykiPmB1dWA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJ1dXUiIG9uY2xpY2s9InNldCgndXV1JykiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6bGFyZ2VyIj5gJmN1cDtgPC9zcGFuPjwvdGQ+Cis8L3RyPjx0cj4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iYW5kIiBvbmNsaWNrPSJzZXQoJ2FuZCcpIj5gYW5kYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9Im9yIiBvbmNsaWNrPSJzZXQoJ29yJykiPmBvcmA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJub3QiIG9uY2xpY2s9InNldCgnbm90JykiPmBub3RgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iPSZndDsiIG9uY2xpY2s9InNldCgnPT0mZ3Q7JykiPmA9Jmd0O2A8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJpZiIgb25jbGljaz0ic2V0KCdpZicpIj5gaWZgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iJmx0Oz0mZ3Q7IiBvbmNsaWNrPSJzZXQoJyZsdDs9Jmd0OycpIj5gJmx0Oz0mZ3Q7YDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9IkFBIiBvbmNsaWNrPSJzZXQoJ0FBJykiPmBBQWA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJFRSIgb25jbGljaz0ic2V0KCdFRScpIj5gRUVgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iX3xfIiBvbmNsaWNrPSJzZXQoJ198XycpIj5gX3xfYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9IlRUIiBvbmNsaWNrPSJzZXQoJ1RUJykiPmBUVGA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJ8LS0iIG9uY2xpY2s9InNldCgnfC0tJykiPmB8LS1gPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0ifD09IiBvbmNsaWNrPSJzZXQoJ3w9PScpIj5gfD09YDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9Ii09IiBvbmNsaWNrPSJzZXQoJy09JykiPmAtPWA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJ+PSIgb25jbGljaz0ic2V0KCd+PScpIj5gfj1gPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0ifn4iIG9uY2xpY2s9InNldCgnfn4nKSI+YH5+YDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9InByb3AiIG9uY2xpY2s9InNldCgncHJvcCcpIj5gcHJvcGA8L3RkPgorPC90cj48dHI+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9ImludCIgb25jbGljaz0ic2V0KCdpbnQnKSI+YGludGA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJvaW50IiBvbmNsaWNrPSJzZXQoJ29pbnQnKSI+YG9pbnRgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iZGVsIiBvbmNsaWNrPSJzZXQoJ2RlbCcpIj5gZGVsYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9ImdyYWQiIG9uY2xpY2s9InNldCgnZ3JhZCcpIj5gZ3JhZGA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSIrLSIgb25jbGljaz0ic2V0KCcrLScpIj5gKy1gPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0ib28iIG9uY2xpY2s9InNldCgnb28nKSI+YG9vYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9ImFsZXBoIiBvbmNsaWNrPSJzZXQoJ2FsZXBoJykiPmBhbGVwaGA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJxdWFkIiBvbmNsaWNrPSJzZXQoJ3F1YWQnKSI+YHF1YWRgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iZGlhbW9uZCIgb25jbGljaz0ic2V0KCdkaWFtb25kJykiPmBkaWFtb25kYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9InNxdWFyZSIgb25jbGljaz0ic2V0KCdzcXVhcmUnKSI+YHNxdWFyZWA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJ8X18iIG9uY2xpY2s9InNldCgnfF9fJykiPmB8X19gPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iX198IiBvbmNsaWNrPSJzZXQoJ19ffCcpIj5gX198YDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9Inx+IiBvbmNsaWNrPSJzZXQoJ3x+JykiPmB8fmA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJ+fCIgb25jbGljaz0ic2V0KCd+fCcpIj5gfnxgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iJmx0O3gmZ3Q7IiBvbmNsaWNrPSJzZXQoJyZsdDt4Jmd0OycpIj5gJmx0O3gmZ3Q7YDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9Ii9fIiBvbmNsaWNrPSJzZXQoJy9fJykiPmAvX2A8L3RkPgorPC90cj48dHI+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9InVhcnIiIG9uY2xpY2s9InNldCgndWFycicpIj5gdWFycmA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJkYXJyIiBvbmNsaWNrPSJzZXQoJ2RhcnInKSI+YGRhcnJgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0ibGFyciIgb25jbGljaz0ic2V0KCdsYXJyJykiPmBsYXJyYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9Ii0mZ3Q7IiBvbmNsaWNrPSJzZXQoJy0mZ3Q7JykiPmAtJmd0O2A8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJ8LSZndDsiIG9uY2xpY2s9InNldCgnfC0mZ3Q7JykiPmB8LSZndDtgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iaGFyciIgb25jbGljaz0ic2V0KCdoYXJyJykiPmBoYXJyYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9ImxBcnIiIG9uY2xpY2s9InNldCgnbEFycicpIj5gbEFycmA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJyQXJyIiBvbmNsaWNrPSJzZXQoJ3JBcnInKSI+YHJBcnJgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iaEFyciIgb25jbGljaz0ic2V0KCdoQXJyJykiPmBoQXJyYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9ImhhdGEiIG9uY2xpY2s9InNldCgnaGF0JykiPmBoYXRhYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9InVsYSIgb25jbGljaz0ic2V0KCd1bCcpIj5gdWxhYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9ImRvdGEiIG9uY2xpY2s9InNldCgnZG90JykiPmBkb3RhYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9ImRkb3RhIiBvbmNsaWNrPSJzZXQoJ2Rkb3QnKSI+YGRkb3RhYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9InZlY2EiIG9uY2xpY2s9InNldCgndmVjJykiPmB2ZWNhYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9ImJhcmEiIG9uY2xpY2s9InNldCgnYmFyJykiPmBiYXJhYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9IjouIiBvbmNsaWNrPSJzZXQoJzouJykiPmA6LmA8L3RkPgorPC90cj48dHI+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9Ik5OIiBvbmNsaWNrPSJzZXQoJ05OJykiPmBOTmA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJaWiIgb25jbGljaz0ic2V0KCdaWicpIj5gWlpgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iUVEiIG9uY2xpY2s9InNldCgnUVEnKSI+YFFRYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9IlJSIiBvbmNsaWNrPSJzZXQoJ1JSJykiPmBSUmA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJDQyIgb25jbGljaz0ic2V0KCdDQycpIj5gQ0NgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iYmJhIiBvbmNsaWNrPSJzZXQoJ2JiJykiPmBiYmFgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iYmJiYSIgb25jbGljaz0ic2V0KCdiYmInKSI+YGJiYmFgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iY2NhIiBvbmNsaWNrPSJzZXQoJ2NjJykiPmBjY2FgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iZnJhIiBvbmNsaWNrPSJzZXQoJ2ZyJykiPmBmcmFgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0ic2ZhIiBvbmNsaWNrPSJzZXQoJ3NmJykiPmBzZmFgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0idHRhIiBvbmNsaWNrPSJzZXQoJ3R0JykiPmB0dGFgPC90ZD4KKzx0ZCBjb2xzcGFuPSI0IiBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0ic3RhY2tyZWwoLSZndDspKCspIiBvbmNsaWNrPSJzZXQoJ3N0YWNrcmVsKC0mZ3Q7KSgrKScpIj5gc3RhY2tyZWwoLSZndDspKCspYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9InVwc2lsb24iIG9uY2xpY2s9InNldCgndXBzaWxvbicpIj5gdXBzaWxvbmA8L3RkPgorPC90cj48dHI+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9ImFscGhhIiBvbmNsaWNrPSJzZXQoJ2FscGhhJykiPmBhbHBoYWA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJiZXRhIiBvbmNsaWNrPSJzZXQoJ2JldGEnKSI+YGJldGFgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iZ2FtbWEiIG9uY2xpY2s9InNldCgnZ2FtbWEnKSI+YGdhbW1hYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9IkdhbW1hIiBvbmNsaWNrPSJzZXQoJ0dhbW1hJykiPmBHYW1tYWA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJkZWx0YSIgb25jbGljaz0ic2V0KCdkZWx0YScpIj5gZGVsdGFgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iRGVsdGEiIG9uY2xpY2s9InNldCgnRGVsdGEnKSI+YERlbHRhYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9ImVwc2kiIG9uY2xpY2s9InNldCgnZXBzaScpIj5gZXBzaWA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJ6ZXRhIiBvbmNsaWNrPSJzZXQoJ3pldGEnKSI+YHpldGFgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iZXRhIiBvbmNsaWNrPSJzZXQoJ2V0YScpIj5gZXRhYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9InRoZXRhIiBvbmNsaWNrPSJzZXQoJ3RoZXRhJykiPmB0aGV0YWA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJUaGV0YSIgb25jbGljaz0ic2V0KCdUaGV0YScpIj5gVGhldGFgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iaW90YSIgb25jbGljaz0ic2V0KCdpb3RhJykiPmBpb3RhYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9ImthcHBhIiBvbmNsaWNrPSJzZXQoJ2thcHBhJykiPmBrYXBwYWA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJsYW1iZGEiIG9uY2xpY2s9InNldCgnbGFtYmRhJykiPmBsYW1iZGFgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iTGFtYmRhIiBvbmNsaWNrPSJzZXQoJ0xhbWJkYScpIj5gTGFtYmRhYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9Im11IiBvbmNsaWNrPSJzZXQoJ211JykiPmBtdWA8L3RkPgorPC90cj48dHI+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9Im51IiBvbmNsaWNrPSJzZXQoJ251JykiPmBudWA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJwaSIgb25jbGljaz0ic2V0KCdwaScpIj5gcGlgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iUGkiIG9uY2xpY2s9InNldCgnUGknKSI+YFBpYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9InJobyIgb25jbGljaz0ic2V0KCdyaG8nKSI+YHJob2A8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJzaWdtYSIgb25jbGljaz0ic2V0KCdzaWdtYScpIj5gc2lnbWFgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iU2lnbWEiIG9uY2xpY2s9InNldCgnU2lnbWEnKSI+YFNpZ21hYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9InRhdSIgb25jbGljaz0ic2V0KCd0YXUnKSI+YHRhdWA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJ4aSIgb25jbGljaz0ic2V0KCd4aScpIj5geGlgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iWGkiIG9uY2xpY2s9InNldCgnWGknKSI+YFhpYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9InBoaSIgb25jbGljaz0ic2V0KCdwaGknKSI+YHBoaWA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJQaGkiIG9uY2xpY2s9InNldCgnUGhpJykiPmBQaGlgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0iY2hpIiBvbmNsaWNrPSJzZXQoJ2NoaScpIj5gY2hpYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9InBzaSIgb25jbGljaz0ic2V0KCdwc2knKSI+YHBzaWA8L3RkPgorPHRkIGNsYXNzPSJjaGFyYWN0ZXIiIHRpdGxlPSJQc2kiIG9uY2xpY2s9InNldCgnUHNpJykiPmBQc2lgPC90ZD4KKzx0ZCBjbGFzcz0iY2hhcmFjdGVyIiB0aXRsZT0ib21lZ2EiIG9uY2xpY2s9InNldCgnb21lZ2EnKSI+YG9tZWdhYDwvdGQ+Cis8dGQgY2xhc3M9ImNoYXJhY3RlciIgdGl0bGU9Ik9tZWdhIiBvbmNsaWNrPSJzZXQoJ09tZWdhJykiPmBPbWVnYWA8L3RkPgorPC90cj4KKzwvdGFibGU+Cis8Zm9ybSBhY3Rpb249ImphdmFzY3JpcHQ6dm9pZCgwKTsiPgorPHRhYmxlIHN0eWxlPSJ3aWR0aDogMTAwJTtib3JkZXI6bm9uZSI+CisgIDx0cj4KKyAgICA8dGQgc3R5bGU9IndpZHRoOjUwJSI+SW5wdXQ8L3RkPjx0ZCBzdHlsZT0id2lkdGg6NTAlIj48aW5wdXQgdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJzaG93TWF0aE1MKCkiIHN0eWxlPSJmbG9hdDpyaWdodDtmb250LXNpemU6MTBweCIgdmFsdWU9IlNob3cgTWF0aE1MIiAvPjxzcGFuPlByZXZpZXc8L3NwYW4+PC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0ZD4KKyAgICA8dGV4dGFyZWEgaWQ9ImlucHV0VGV4dCIgb25rZXl1cD0icHJldmlldygpIj48L3RleHRhcmVhPgorICAgIDwvdGQ+CisgICAgPHRkPgorICAgIDxkaXYgaWQ9Im91dHB1dE5vZGUiPjwvZGl2PgorICAgIDx0ZXh0YXJlYSBpZD0ibWF0aG1sIiBzdHlsZT0iZGlzcGxheTpub25lIj48L3RleHRhcmVhPgorICAgIDwvdGQ+CisgIDwvdHI+CisgIDx0cj48dGQgY29sc3Bhbj0iMiI+CisgIDxzcGFuPkJhc2VkIG9uIEFTQ0lJTWF0aE1MIGJ5IDwvc3Bhbj48YSBocmVmPSJodHRwOi8vd3d3LmNoYXBtYW4uZWR1L35qaXBzZW4iIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZiwnX2JsYW5rJywnJyk7cmV0dXJuIGZhbHNlOyI+UGV0ZXIgSmlwc2VuPC9hPiwgCis8YSBocmVmPSJodHRwOi8vd3d3LmNoYXBtYW4uZWR1IiBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYsJ19ibGFuaycsJycpO3JldHVybiBmYWxzZTsiPkNoYXBtYW4gVW5pdmVyc2l0eTwvYT48YnIgLz4KKyAgPHNwYW4+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQXNjaWlNYXRoTUwgdmlzaXQgdGhpcyBwYWdlOiA8L3NwYW4+PGEgaHJlZj0iaHR0cDovL3d3dzEuY2hhcG1hbi5lZHUvfmppcHNlbi9tYXRobWwvYXNjaWltYXRoLmh0bWwiIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZiwnX2JsYW5rJywnJyk7cmV0dXJuIGZhbHNlOyI+aHR0cDovL3d3dzEuY2hhcG1hbi5lZHUvfmppcHNlbi9tYXRobWwvYXNjaWltYXRoLmh0bWw8L2E+PC90ZD48L3RyPgorPC90YWJsZT4KKworPGRpdiBpZD0iYnV0dG9ucyI+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisvLyA8IVtDREFUQVsKK2lmIChYaW5oYS5pc19pZSkKKyBkb2N1bWVudC53cml0ZSgnPHNwYW4gc3R5bGU9ImNvbG9yOnJlZDtmbG9hdDpsZWZ0Ij4nK2kxOG4oJ0F0dGVudGlvbiBJbnRlcm5ldCBFeHBsb3JlciB1c2VyczogUGxlYXNlIG5vdGUgdGhhdCB0aGVyZSBpcyBubyBXWVNJV1lHIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmb3JtdWxhIGluIHRoZSBlZGl0b3IhPGJyIC8+WW91IG1pZ2h0IHdpc2ggdG8gdXNlIDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5jb20iIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZixcJ19ibGFua1wnKTtyZXR1cm4gZmFsc2U7Ij5Nb3ppbGxhIEZpcmVmb3g8L2E+IGluc3RlYWQuJykrJzwvc3Bhbj4nKTsKKy8vIF1dPgorPC9zY3JpcHQ+CisgIDxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJvayIgb25jbGljaz0icmV0dXJuIG9uT0soKTsiPk9LPC9idXR0b24+CisgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBuYW1lPSJjYW5jZWwiIG9uY2xpY2s9InJldHVybiBvbkNhbmNlbCgpOyI+Q2FuY2VsPC9idXR0b24+Cis8L2Rpdj4KKzwvZm9ybT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vcmVhZG1lLnR4dCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRXF1YXRpb24vcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjcxOWNlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9FcXVhdGlvbi9yZWFkbWUudHh0CkBAIC0wLDAgKzEsMzggQEAKK0FzY2lpTWF0aE1MIEZvcm11bGEgRWRpdG9yIGZvciBYaW5oYQorIF9fX19fX19fX19fX19fX19fX19fX19fCisgCitCYXNlZCBvbiBBc2NpaU1hdGhNTCBieSBQZXRlciBKaXBzZW4gKGh0dHA6Ly93d3cuY2hhcG1hbi5lZHUvfmppcHNlbikuCitQbHVnaW4gYnkgUmFpbXVuZCBNZXllciAocmF5KSB4aW5oYUByYWltdW5kbWV5ZXIuZGUKKworQXNjaWlNYXRoTUwgaXMgYSBKYXZhU2NyaXB0IGxpYnJhcnkgZm9yIHRyYW5zbGF0aW5nIEFTQ0lJIG1hdGggbm90YXRpb24gdG8gUHJlc2VudGF0aW9uIE1hdGhNTC4KKworVXNhZ2UKKyBUaGUgZm9ybW11bGFlIGFyZSBzdG9yZWQgaW4gdGhlaXIgQVNDSUkgcmVwcmVzZW50YXRpb24sIHNvIHlvdSBoYXZlIHRvIGluY2x1ZGUgdGhlIAorIEFTQ0lJTWF0aE1MIGxpYnJhcnkgd2hpY2ggY2FuIGJlIGZvdW5kIGluIHRoZSBwbHVnaW4gZm9sZGVyIGluIG9yZGVyIHRvIHJlbmRlciB0aGUgTWF0aE1MIG91dHB1dCBpbiB5b3VyIHBhZ2VzLiAKKyAKKyBFeGFtcGxlIChhbHNvIHNlZSBleGFtcGxlLmh0bWwpOgorICB2YXIgbWF0aGNvbG9yID0gImJsYWNrIjsgLy8gIFlvdSBtYXkgY2hhbmdlIHRoZSBjb2xvciBvZiB0aGUgZm9ybXVsYWUgKGRlZmF1bHQ6IHJlZCkKKyAgdmFyIG1hdGhmb250ZmFtaWx5ID0gIkFyaWFsIjsgLy9hbmQgdGhlIGZvbnQgKGRlZmF1bHQ6IHNlcmlmLCB3aGljaCBpcyBnb29kIEkgdGhpbmspCisgIHZhciBzaG93YXNjaWlmb3JtdWxhb25ob3ZlciA9IGZhbHNlOyAvLyBpZiB0cnVlIGhlbHBzIHN0dWRlbnRzIGxlYXJuIEFTQ0lJTWF0aCAoZGVmYXVsdDp0cnVlKQorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIveGluaGEvcGx1Z2lucy9Bc2NpaU1hdGgvQVNDSUlNYXRoTUwuanMiPjwvc2NyaXB0PgorCisgVGhlIHJlY29tbWVuZGVkIGJyb3dzZXIgZm9yIHVzaW5nIHRoaXMgcGx1Z2luIGlzIE1vemlsbGEvRmlyZWZveC4gQXQgdGhlIG1vbWVudCBzaG93aW5nIHRoZSBNYXRoTUwgb3V0cHV0CisgaW5zaWRlIHRoZSBlZGl0b3IgaXMgbm90IHN1cHBvcnRlZCBpbiBJbnRlcm5ldCBFeHBsb3Jlci4KKyAKKyAKK0xpY2Vuc2UgaW5mb3JtYXRpb24KKworIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwpIAorIGZvciBtb3JlIGRldGFpbHMuCisgCisgTk9URTogSSBoYXZlIGNoYW5nZWQgdGhlIGxpY2Vuc2Ugb2YgQXNjaWlNYXRoTUwgZnJvbSBHUEwgdG8gTEdQTCBhY2NvcmRpbmcgdG8gYSBwZXJtaXNzaW9uIAorIGZyb20gdGhlIGF1dGhvciAoc2VlIGh0dHA6Ly94aW5oYS5nb2dvLmNvLm56L3B1bmJiL3ZpZXd0b3BpYy5waHA/cGlkPTQxNTAjcDQxNTApCisgUmFpbXVuZCBNZXllciAxMS0yOS0yMDA2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvRmFuY3lTZWxlY3RzLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL0ZhbmN5U2VsZWN0cy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5MTRlMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL0ZhbmN5U2VsZWN0cy5jc3MKQEAgLTAsMCArMSwxNCBAQAorLnRvb2xiYXJFbGVtZW50IC5zZWxlY3QyIHsgZm9udC1zaXplOjExcHg7IGZvbnQtZmFtaWx5OiBUYWhvbWEsIFZlcmRhbmEsIHNhbnMtc2VyaWY7IH0KKy50b29sYmFyRWxlbWVudCAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSB7IGhlaWdodDoyMHB4OyB9Cisuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCAKK3sKKyAgICBsaW5lLWhlaWdodDogMThweDsKK30KKworLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3cgeworICAgIGhlaWdodDogMTZweDsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAxcHg7CisgICAgcmlnaHQ6IDFweDsKKyAgICB3aWR0aDogMjBweDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9GYW5jeVNlbGVjdHMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9GYW5jeVNlbGVjdHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZjOGQ1MwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL0ZhbmN5U2VsZWN0cy5qcwpAQCAtMCwwICsxLDE2OCBAQAorLyoqCisgID0gV2ViS2l0IEltYWdlIFJlc2l6ZXIgPQorICAKKyAgVGhlIFdlYktpdCBiYXNlZCAob3Igc2ltaWxhcikgYnJvd3NlcnMsIGluY2x1ZGluZyBDaHJvbWUgKGFuZCBFZGdlKQorICBkb24ndCBzdXBwb3J0IGRyYWctdG8tc2l6ZSBpbWFnZXMgb3IgdGFibGVzLCB3aGljaCBpcyBhIHBhaW4uCisgIAorICBUaGlzIHBsdWdpbiBpbXBsZW1lbnRzIHRoZSBFZGl0b3JCb29zdCBqUXVlcnkgcmVzaXppbmcgcGx1Z2luCisgICAgaHR0cDovL3d3dy5lZGl0b3Jib29zdC5uZXQvV2Via2l0cmVzaXplL0luZGV4CisgIGpRdWVyeSBpcyByZXF1aXJlZCwgbmF0dXJhbGx5LCBpZiBpdCdzIG5vdCBhbHJlYWR5IGxvYWRlZCAKKyAgdGhlbiB3ZSB3aWxsIGxvYWQgb3VyIG93biB2ZXJzaW9uLCBzbyBlbnN1cmUgeW91IGxvYWQgeW91ciB2ZXJzaW9uCisgIGZpcnN0IGlmIHlvdSBuZWVkIGEgbmV3ZXIgb25lICh0aGVuIHRoaXMgbWlnaHQgYnJlYWssIGJ1dCBvaCB3ZWxsKS4KKyAgCisgID09IFVzYWdlID09Ll8KKyAgSW5zdHJ1Y3QgWGluaGEgdG8gbG9hZCB0aGUgV2ViS2l0SW1hZ2VSZXN1emUgcGx1Z2luIChmb2xsb3cgdGhlIE5ld2JpZUd1aWRlKSwKKyAgeW91IGNhbiBsb2FkIHRoaXMgcGx1Z2luIGV2ZW4gaW4gbm9uIFdlYktpdCBicm93c2VycywgaXQgd2lsbCBkbyAKKyAgbm90aGluZyAobm8gaGFybSwgbm8gYmVuZWZpdCkuCisgIAorICA9PSBDYXV0aW9uID09CisgIFRoaXMgb25seSB3b3JrcyBhY2NlcHRhYmx5IGluIGVpdGhlcjoKKyAgICBTdGFuZGFyZHMgTW9kZSAgKGVnIERvY3R5cGUgPCFET0NUWVBFIGh0bWw+ICkKKyAgICBRdWlya3MgTW9kZSAgICAgKGVnIG5vIGRvY3R5cGUgICAgICAgICAgICAgICkKKyAgICAKKyAgaXQgZG9lcyBub3Qgd29yayBncmVhdCBpbiAiQWxtb3N0IFN0YW5kYXJkcyBNb2RlIiBiZWNhdXNlIHNjcm9sbGluZyB0aHJvd3MKKyAgdGhlIHJlc2l6ZSBib3JkZXIgb3V0IG9mIHBsYWNlLCAsdGhhdCdzIG9rIGlmIHlvdSBkb24ndCBuZWVkIHRvIHNjcm9sbCwgCisgIGVpdGhlciBiZWNhdXNlIHlvdXIgdGV4dCBpcyBzbWFsbCwgb3IgeW91IGFyZSBpbiBGdWxsU2NyZWVuIG1vZGUgb3IgCisgIHNvbWV0aGluZywgYnV0IGFueXdheS4KKyAgCisgCisgKiBAYXV0aG9yICRBdXRob3IkCisgKiBAdmVyc2lvbiAkSWQkCisgKiBAcGFja2FnZSBXZWJLaXRSZXNpemUKKyAqLworCisKK0ZhbmN5U2VsZWN0cy5fcGx1Z2luSW5mbyA9IHsKKyAgbmFtZSAgICAgICAgICA6ICJGYW5jeSBTZWxlY3QgQm94ZXMgKGpRdWVyeSBzZWxlY3QyKSIsCisgIHZlcnNpb24gICAgICAgOiAiMS4wIiwKKyAgZGV2ZWxvcGVyICAgICA6ICJTZWxlY3QyIEF1dGhvcnMsIEphbWVzIFNsZWVtYW4gKFhpbmhhKSIsCisgIGRldmVsb3Blcl91cmwgOiAiaHR0cHM6Ly9zZWxlY3QyLm9yZy8iLAorICBsaWNlbnNlICAgICAgIDogIk1JVCIKK307CisKKy8vIFRoZSBvcHRpb25zIGhlcmUgYXJlIGFzIGZvciB0aGUgJ3dpZHRoJyBjb25maWd1cmF0aW9uIG9wdGlvbgorLy8gb2YgalF1ZXJ5IFNlbGVjdDIgLSBodHRwczovL3NlbGVjdDIub3JnL2FwcGVhcmFuY2UKKy8vIElmIHlvdSBkb24ndCB1c2Ugc3BlY2lmaWMgc2l6ZXMgaGVyZSwgdGhlbiBpdCB3b3JrcyBmaW5lLCBidXQgCisvLyBjYW4gImp1bXAgYXJvdW5kIiBpbiB0aGUgdG9vbCBiYXIgaWYgaXQgY2hhbmdlcyBzaXplIHdpdGggc2VsZWN0aW9uCitYaW5oYS5Db25maWcucHJvdG90eXBlLkZhbmN5U2VsZWN0cyA9IHsKKyAgd2lkdGhzOiB7CisgICAgJ2Zvcm1hdGJsb2NrJyA6ICc5MHB4JywKKyAgICAnZm9udG5hbWUnICAgIDogJzEzMHB4JywKKyAgICAnZm9udHNpemUnICAgIDogJzgwcHgnLAorICAgICdEeW5hbWljQ1NTLWNsYXNzJyA6ICcxMzBweCcsCisgICAgJ2xhbmdtYXJrcycgIDogJzExMHB4JworICB9Cit9OworCitYaW5oYS5sb2FkTGlicmFyeSgnalF1ZXJ5JykKKyAgLmxvYWRTdHlsZSgnc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvY3NzL3NlbGVjdDIuY3NzJywnRmFuY3lTZWxlY3RzJykKKyAgLmxvYWRTY3JpcHQoJ3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL3NlbGVjdDIuanMnLCAnRmFuY3lTZWxlY3RzJykKKyAgLmxvYWRTdHlsZSgnRmFuY3lTZWxlY3RzLmNzcycsICAgICAgICAgICAgICAgICAgICAgICAnRmFuY3lTZWxlY3RzJykKKyAgLmxvYWRTY3JpcHRJZihfZWRpdG9yX2xhbmcgIT0gJ2VuJywgJ3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vJytfZWRpdG9yX2xhbmcrJy5qcycsICdGYW5jeVNlbGVjdHMnKTsKKyAgCitmdW5jdGlvbiBGYW5jeVNlbGVjdHMoZWRpdG9yKQoreworICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yOworICAgIHRoaXMuX2lzV29ya2luZyA9IGZhbHNlOyAvLyBTZXQgdHJ1ZSBvbmNlIGV2ZXJ5dGhpbmcgaXMgc2V0dXAsIG9yIG5vdCBpZiBpdCBmYWlscyAob2xkIGJyb3dzZXIpCit9CisKK0ZhbmN5U2VsZWN0cy5wcm90b3R5cGUub25HZW5lcmF0ZU9uY2UgPSBmdW5jdGlvbigpCit7CisgIAorICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisgIAorICAvLyBCZSBzdXJlIHdlIHdhaXQgdW50aWwgalF1ZXJ5IGlzIGxvYWRlZAorICBpZighKHR5cGVvZiBqUXVlcnkgIT0gJ3VuZGVmaW5lZCcgJiYgalF1ZXJ5ICYmIGpRdWVyeS5mbiAmJiBqUXVlcnkuZm4uc2VsZWN0MiAmJiBqUXVlcnkoZWRpdG9yLl9odG1sQXJlYSkuZmluZCgnLnRvb2xiYXJFbGVtZW50IHNlbGVjdCcpLmxlbmd0aCkpCisgIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtzZWxmLm9uR2VuZXJhdGVPbmNlKCl9LCA1MDApOworICAgIHJldHVybjsKKyAgfQorICAKKyAgZnVuY3Rpb24gZm9ybWF0Rm9udE5hbWUob3B0KQorICB7CisgICAgaWYoIW9wdC5pZCkgcmV0dXJuIG9wdC50ZXh0OworICAgIAorICAgIGlmKG9wdC5pZC5tYXRjaCgvd2luZ2RpbmdzfHdlYmRpbmdzL2kpKQorICAgIHsgICAgICAgICAgICAgICAvLyB2LS0gQXZvaWQgbGNfcGFyc2Vfc3RyaW5ncy5waHAKKyAgICAgIHJldHVybiBqUXVlcnkoJzwnKydzcGFuPicrb3B0LnRleHQrJzwvc3Bhbj4gPCcrJ3NwYW4gc3R5bGU9ImZvbnQtZmFtaWx5Oicrb3B0LmlkKyciOyIgdGl0bGU9Iicrb3B0LnRleHQrJyI+KihKTDwvc3Bhbj4nKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHJldHVybiBqUXVlcnkoJzxzcGFuIHN0eWxlPSJmb250LWZhbWlseTonK29wdC5pZCsnIjsiIHRpdGxlPSInK29wdC50ZXh0KyciPicrb3B0LnRleHQrJzwvc3Bhbj4nKTsKKyAgICB9CisgIH0KKyAgCisgIGZ1bmN0aW9uIGZvcm1hdEZvbnRTaXplKG9wdCkKKyAgeworICAgIGlmKCFvcHQuaWQpIHJldHVybiBvcHQudGV4dDsKKyAgIHJldHVybiBqUXVlcnkoJzxmb250IHNpemU9Iicrb3B0LmlkKyciOyIgdGl0bGU9Iicrb3B0LnRleHQrJyI+JytvcHQudGV4dCsnPC9mb250PicpOworICB9CisgIAorICB0cnkKKyAgeworICAgIGpRdWVyeShlZGl0b3IuX2h0bWxBcmVhKS5maW5kKCcudG9vbGJhckVsZW1lbnQgc2VsZWN0JykuZWFjaChmdW5jdGlvbihpLGUpeworICAgICAgdmFyIHR4dCA9IGUubmFtZTsKKyAgICAgIHZhciBlbCAgPSBlOworICAgICAgCisgICAgICB2YXIgd2lkdGggPSAncmVzb2x2ZSc7CisgICAgICBpZih0eXBlb2YgZWRpdG9yLmNvbmZpZy5GYW5jeVNlbGVjdHMud2lkdGhzW3R4dF0gIT0gJ3VuZGVmaW5lZCcpCisgICAgICB7CisgICAgICAgIHdpZHRoID0gZWRpdG9yLmNvbmZpZy5GYW5jeVNlbGVjdHMud2lkdGhzW3R4dF07CisgICAgICB9CisgICAgICAKKyAgICAgIHN3aXRjaCh0eHQpCisgICAgICB7CisgICAgICAgIGNhc2UgJ2ZvbnRuYW1lJzoKKyAgICAgICAgICBqUXVlcnkoZSkuc2VsZWN0Mih7ZHJvcGRvd25BdXRvV2lkdGg6IHRydWUsIHRoZW1lOiAnZGVmYXVsdCcsIHRlbXBsYXRlUmVzdWx0OiBmb3JtYXRGb250TmFtZSwgd2lkdGg6IHdpZHRofSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2ZvbnRzaXplJzoKKyAgICAgICAgICBqUXVlcnkoZSkuc2VsZWN0Mih7ZHJvcGRvd25BdXRvV2lkdGg6IHRydWUsIHRoZW1lOiAnZGVmYXVsdCcsIHRlbXBsYXRlUmVzdWx0OiBmb3JtYXRGb250U2l6ZSwgd2lkdGg6IHdpZHRofSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgalF1ZXJ5KGUpLnNlbGVjdDIoe2Ryb3Bkb3duQXV0b1dpZHRoOiB0cnVlLCB0aGVtZTogJ2RlZmF1bHQnLCB3aWR0aDogd2lkdGh9KTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgalF1ZXJ5KGUpLm9uKCdzZWxlY3QyOm9wZW5pbmcnLCBmdW5jdGlvbigpeworICAgICAgICAvLyBJRTExIG5lZWRzIHRoaXMgYmVjYXVzZSBvcGVuaW5nIHRoZSBzZWxlY3QyIGRlLXNlbGVjdHMgdGhlIHNlbGVjdGVkIHRleHQKKyAgICAgICAgLy8gc28gaWYgd2UgZG9uJ3Qgc2F2ZSBhbmQgcmVzdG9yZSBpdCBub3RoaW5nIGhhcHBlbnMgKGV4Y2VwdCB0aGF0IHRoZSB0ZXh0IGlzIGRlc2VsZWN0ZWQpCisgICAgICAgIC8vIEZGLCBDaHJvbWUgYW5kIEVkZ2UgYXJlIGZpbmUgd2l0aG91dCB0aGlzLCBidXQgdGhleSBhbHNvIGRvbid0IHNlZW0gdG8gY2FyZSB3aXRoIGl0CisgICAgICAgIC8vIHNvIEkgZ3Vlc3MganVzdCBkbyBpdCBhY3Jvc3MgdGhlIGJvYXJkIGlzIHNhZmUgZW5vdWdoCisgICAgICAgIGVsLl9GYW5jeVNlbGVjdHNfU2F2ZWRTZWxlY3Rpb24gPSBlZGl0b3Iuc2F2ZVNlbGVjdGlvbigpOworICAgICAgfSk7CisgICAgICAKKyAgICAgIGpRdWVyeShlKS5vbignc2VsZWN0MjpzZWxlY3QnLCBmdW5jdGlvbigpeworICAgICAgICBpZihlbC5fRmFuY3lTZWxlY3RzX1NhdmVkU2VsZWN0aW9uKSAKKyAgICAgICAgeworICAgICAgICAgIGVkaXRvci5yZXN0b3JlU2VsZWN0aW9uKGVsLl9GYW5jeVNlbGVjdHNfU2F2ZWRTZWxlY3Rpb24pOworICAgICAgICB9CisgICAgICAgIGVsLl9GYW5jeVNlbGVjdHNfU2F2ZWRTZWxlY3Rpb24gPSBudWxsOworICAgICAgICBlZGl0b3IuX2NvbWJvU2VsZWN0ZWQoZWwsIHR4dCk7CisgICAgICB9KTsKKyAgICAgIAorICAgIH0pOworICAgIAorICAgIHRoaXMuX2lzV29ya2luZyA9IHRydWU7CisgIH0KKyAgY2F0Y2goZSkKKyAgeworICAgIC8vIE9sZCBicm93c2VycyBtYXkgZmFpbCBhbmQgbGVhdmUgYSBwYXJ0aWFsbHkgY29uc3RydWN0ZWQgc2VsZWN0MiwgcmVtb3ZlIHRoYXQKKyAgICAvLyBzbyBqdXN0IHRoZSBvcmlnaW5hbCBzZWxlY3RzIGFyZSBsZWZ0CisgICAgdmFyIGZhaWxlZCA9IFhpbmhhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZWRpdG9yLl9odG1sQXJlYSwnc2VsZWN0Mi1jb250YWluZXInKTsKKyAgICBmb3IodmFyIGkgPSAwOyBpIDwgZmFpbGVkLmxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgIGZhaWxlZFtpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGZhaWxlZFtpXSk7CisgICAgfQorICB9Cit9OworCitGYW5jeVNlbGVjdHMucHJvdG90eXBlLm9uVXBkYXRlVG9vbGJhciA9IGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisgICAgCisgICAgaWYoIXRoaXMuX2lzV29ya2luZykgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGpRdWVyeSgnLnRvb2xiYXJFbGVtZW50IHNlbGVjdCcpLmVhY2goZnVuY3Rpb24oaSxlKXsKKyAgICAgIGpRdWVyeShlKS50cmlnZ2VyKCdjaGFuZ2UnKTsKKyAgICB9KTsKK307CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9sYW5nL2xjX2Jhc2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE0MmU4MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDI1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgIicrb3B0LnRleHQrJyI6ICIiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvY3NzL3NlbGVjdDIuY3NzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvY3NzL3NlbGVjdDIuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlM2FmZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9jc3Mvc2VsZWN0Mi5jc3MKQEAgLTAsMCArMSw0ODQgQEAKKy5zZWxlY3QyLWNvbnRhaW5lciB7CisgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgbWFyZ2luOiAwOworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0KKyAgLnNlbGVjdDItY29udGFpbmVyIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIHsKKyAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIGN1cnNvcjogcG9pbnRlcjsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBoZWlnaHQ6IDI4cHg7CisgICAgdXNlci1zZWxlY3Q6IG5vbmU7CisgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsgfQorICAgIC5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIHsKKyAgICAgIGRpc3BsYXk6IGJsb2NrOworICAgICAgcGFkZGluZy1sZWZ0OiA4cHg7CisgICAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4OworICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOworICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfQorICAgIC5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyIHsKKyAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfQorICAuc2VsZWN0Mi1jb250YWluZXJbZGlyPSJydGwiXSAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIHsKKyAgICBwYWRkaW5nLXJpZ2h0OiA4cHg7CisgICAgcGFkZGluZy1sZWZ0OiAyMHB4OyB9CisgIC5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlIHsKKyAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIGN1cnNvcjogcG9pbnRlcjsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBtaW4taGVpZ2h0OiAzMnB4OworICAgIHVzZXItc2VsZWN0OiBub25lOworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7IH0KKyAgICAuc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIHsKKyAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgICBwYWRkaW5nLWxlZnQ6IDhweDsKKyAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOworICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfQorICAuc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItc2VhcmNoLS1pbmxpbmUgeworICAgIGZsb2F0OiBsZWZ0OyB9CisgICAgLnNlbGVjdDItY29udGFpbmVyIC5zZWxlY3QyLXNlYXJjaC0taW5saW5lIC5zZWxlY3QyLXNlYXJjaF9fZmllbGQgeworICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAgIGJvcmRlcjogbm9uZTsKKyAgICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICAgIG1hcmdpbi10b3A6IDVweDsKKyAgICAgIHBhZGRpbmc6IDA7IH0KKyAgICAgIC5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1zZWFyY2gtLWlubGluZSAuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uIHsKKyAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOyB9CisKKy5zZWxlY3QyLWRyb3Bkb3duIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7CisgIGJvcmRlci1yYWRpdXM6IDRweDsKKyAgYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgZGlzcGxheTogYmxvY2s7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgbGVmdDogLTEwMDAwMHB4OworICB3aWR0aDogMTAwJTsKKyAgei1pbmRleDogMTA1MTsgfQorCisuc2VsZWN0Mi1yZXN1bHRzIHsKKyAgZGlzcGxheTogYmxvY2s7IH0KKworLnNlbGVjdDItcmVzdWx0c19fb3B0aW9ucyB7CisgIGxpc3Qtc3R5bGU6IG5vbmU7CisgIG1hcmdpbjogMDsKKyAgcGFkZGluZzogMDsgfQorCisuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24geworICBwYWRkaW5nOiA2cHg7CisgIHVzZXItc2VsZWN0OiBub25lOworICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyB9CisgIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvblthcmlhLXNlbGVjdGVkXSB7CisgICAgY3Vyc29yOiBwb2ludGVyOyB9CisKKy5zZWxlY3QyLWNvbnRhaW5lci0tb3BlbiAuc2VsZWN0Mi1kcm9wZG93biB7CisgIGxlZnQ6IDA7IH0KKworLnNlbGVjdDItY29udGFpbmVyLS1vcGVuIC5zZWxlY3QyLWRyb3Bkb3duLS1hYm92ZSB7CisgIGJvcmRlci1ib3R0b206IG5vbmU7CisgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7CisgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOyB9CisKKy5zZWxlY3QyLWNvbnRhaW5lci0tb3BlbiAuc2VsZWN0Mi1kcm9wZG93bi0tYmVsb3cgeworICBib3JkZXItdG9wOiBub25lOworICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOworICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsgfQorCisuc2VsZWN0Mi1zZWFyY2gtLWRyb3Bkb3duIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHBhZGRpbmc6IDRweDsgfQorICAuc2VsZWN0Mi1zZWFyY2gtLWRyb3Bkb3duIC5zZWxlY3QyLXNlYXJjaF9fZmllbGQgeworICAgIHBhZGRpbmc6IDRweDsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9CisgICAgLnNlbGVjdDItc2VhcmNoLS1kcm9wZG93biAuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uIHsKKyAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgfQorICAuc2VsZWN0Mi1zZWFyY2gtLWRyb3Bkb3duLnNlbGVjdDItc2VhcmNoLS1oaWRlIHsKKyAgICBkaXNwbGF5OiBub25lOyB9CisKKy5zZWxlY3QyLWNsb3NlLW1hc2sgeworICBib3JkZXI6IDA7CisgIG1hcmdpbjogMDsKKyAgcGFkZGluZzogMDsKKyAgZGlzcGxheTogYmxvY2s7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgbGVmdDogMDsKKyAgdG9wOiAwOworICBtaW4taGVpZ2h0OiAxMDAlOworICBtaW4td2lkdGg6IDEwMCU7CisgIGhlaWdodDogYXV0bzsKKyAgd2lkdGg6IGF1dG87CisgIG9wYWNpdHk6IDA7CisgIHotaW5kZXg6IDk5OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MCk7IH0KKworLnNlbGVjdDItaGlkZGVuLWFjY2Vzc2libGUgeworICBib3JkZXI6IDAgIWltcG9ydGFudDsKKyAgY2xpcDogcmVjdCgwIDAgMCAwKSAhaW1wb3J0YW50OworICAtd2Via2l0LWNsaXAtcGF0aDogaW5zZXQoNTAlKSAhaW1wb3J0YW50OworICBjbGlwLXBhdGg6IGluc2V0KDUwJSkgIWltcG9ydGFudDsKKyAgaGVpZ2h0OiAxcHggIWltcG9ydGFudDsKKyAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OworICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OworICB3aWR0aDogMXB4ICFpbXBvcnRhbnQ7CisgIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDsgfQorCisuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBib3JkZXI6IDFweCBzb2xpZCAjYWFhOworICBib3JkZXItcmFkaXVzOiA0cHg7IH0KKyAgLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQgeworICAgIGNvbG9yOiAjNDQ0OworICAgIGxpbmUtaGVpZ2h0OiAyOHB4OyB9CisgIC5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyIHsKKyAgICBjdXJzb3I6IHBvaW50ZXI7CisgICAgZmxvYXQ6IHJpZ2h0OworICAgIGZvbnQtd2VpZ2h0OiBib2xkOyB9CisgIC5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX3BsYWNlaG9sZGVyIHsKKyAgICBjb2xvcjogIzk5OTsgfQorICAuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19hcnJvdyB7CisgICAgaGVpZ2h0OiAyNnB4OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDFweDsKKyAgICByaWdodDogMXB4OworICAgIHdpZHRoOiAyMHB4OyB9CisgICAgLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3cgYiB7CisgICAgICBib3JkZXItY29sb3I6ICM4ODggdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7CisgICAgICBib3JkZXItc3R5bGU6IHNvbGlkOworICAgICAgYm9yZGVyLXdpZHRoOiA1cHggNHB4IDAgNHB4OworICAgICAgaGVpZ2h0OiAwOworICAgICAgbGVmdDogNTAlOworICAgICAgbWFyZ2luLWxlZnQ6IC00cHg7CisgICAgICBtYXJnaW4tdG9wOiAtMnB4OworICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgdG9wOiA1MCU7CisgICAgICB3aWR0aDogMDsgfQorCisuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHRbZGlyPSJydGwiXSAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyIHsKKyAgZmxvYXQ6IGxlZnQ7IH0KKworLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0W2Rpcj0icnRsIl0gLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19hcnJvdyB7CisgIGxlZnQ6IDFweDsKKyAgcmlnaHQ6IGF1dG87IH0KKworLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0LnNlbGVjdDItY29udGFpbmVyLS1kaXNhYmxlZCAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGN1cnNvcjogZGVmYXVsdDsgfQorICAuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQuc2VsZWN0Mi1jb250YWluZXItLWRpc2FibGVkIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fY2xlYXIgeworICAgIGRpc3BsYXk6IG5vbmU7IH0KKworLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0LnNlbGVjdDItY29udGFpbmVyLS1vcGVuIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3cgYiB7CisgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzg4OCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLXdpZHRoOiAwIDRweCA1cHggNHB4OyB9CisKKy5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7CisgIGJvcmRlci1yYWRpdXM6IDRweDsKKyAgY3Vyc29yOiB0ZXh0OyB9CisgIC5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlIC5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQgeworICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgbGlzdC1zdHlsZTogbm9uZTsKKyAgICBtYXJnaW46IDA7CisgICAgcGFkZGluZzogMCA1cHg7CisgICAgd2lkdGg6IDEwMCU7IH0KKyAgICAuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIGxpIHsKKyAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7IH0KKyAgLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUgLnNlbGVjdDItc2VsZWN0aW9uX19wbGFjZWhvbGRlciB7CisgICAgY29sb3I6ICM5OTk7CisgICAgbWFyZ2luLXRvcDogNXB4OworICAgIGZsb2F0OiBsZWZ0OyB9CisgIC5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlIC5zZWxlY3QyLXNlbGVjdGlvbl9fY2xlYXIgeworICAgIGN1cnNvcjogcG9pbnRlcjsKKyAgICBmbG9hdDogcmlnaHQ7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgbWFyZ2luLXRvcDogNXB4OworICAgIG1hcmdpbi1yaWdodDogMTBweDsgfQorICAuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2U0ZTRlNDsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjYWFhOworICAgIGJvcmRlci1yYWRpdXM6IDRweDsKKyAgICBjdXJzb3I6IGRlZmF1bHQ7CisgICAgZmxvYXQ6IGxlZnQ7CisgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CisgICAgbWFyZ2luLXRvcDogNXB4OworICAgIHBhZGRpbmc6IDAgNXB4OyB9CisgIC5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlIC5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19yZW1vdmUgeworICAgIGNvbG9yOiAjOTk5OworICAgIGN1cnNvcjogcG9pbnRlcjsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgbWFyZ2luLXJpZ2h0OiAycHg7IH0KKyAgICAuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZV9fcmVtb3ZlOmhvdmVyIHsKKyAgICAgIGNvbG9yOiAjMzMzOyB9CisKKy5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdFtkaXI9InJ0bCJdIC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUgLnNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2UsIC5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdFtkaXI9InJ0bCJdIC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUgLnNlbGVjdDItc2VsZWN0aW9uX19wbGFjZWhvbGRlciwgLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0W2Rpcj0icnRsIl0gLnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZSAuc2VsZWN0Mi1zZWFyY2gtLWlubGluZSB7CisgIGZsb2F0OiByaWdodDsgfQorCisuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHRbZGlyPSJydGwiXSAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlIC5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlIHsKKyAgbWFyZ2luLWxlZnQ6IDVweDsKKyAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9CisKKy5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdFtkaXI9InJ0bCJdIC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUgLnNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2VfX3JlbW92ZSB7CisgIG1hcmdpbi1sZWZ0OiAycHg7CisgIG1hcmdpbi1yaWdodDogYXV0bzsgfQorCisuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQuc2VsZWN0Mi1jb250YWluZXItLWZvY3VzIC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUgeworICBib3JkZXI6IHNvbGlkIGJsYWNrIDFweDsKKyAgb3V0bGluZTogMDsgfQorCisuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQuc2VsZWN0Mi1jb250YWluZXItLWRpc2FibGVkIC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICBjdXJzb3I6IGRlZmF1bHQ7IH0KKworLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0LnNlbGVjdDItY29udGFpbmVyLS1kaXNhYmxlZCAuc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZV9fcmVtb3ZlIHsKKyAgZGlzcGxheTogbm9uZTsgfQorCisuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQuc2VsZWN0Mi1jb250YWluZXItLW9wZW4uc2VsZWN0Mi1jb250YWluZXItLWFib3ZlIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlLCAuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQuc2VsZWN0Mi1jb250YWluZXItLW9wZW4uc2VsZWN0Mi1jb250YWluZXItLWFib3ZlIC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUgeworICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOworICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsgfQorCisuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQuc2VsZWN0Mi1jb250YWluZXItLW9wZW4uc2VsZWN0Mi1jb250YWluZXItLWJlbG93IC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlLCAuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQuc2VsZWN0Mi1jb250YWluZXItLW9wZW4uc2VsZWN0Mi1jb250YWluZXItLWJlbG93IC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUgeworICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOworICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsgfQorCisuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItc2VhcmNoLS1kcm9wZG93biAuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkIHsKKyAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsgfQorCisuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItc2VhcmNoLS1pbmxpbmUgLnNlbGVjdDItc2VhcmNoX19maWVsZCB7CisgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworICBib3JkZXI6IG5vbmU7CisgIG91dGxpbmU6IDA7CisgIGJveC1zaGFkb3c6IG5vbmU7CisgIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkOyB9CisKKy5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1yZXN1bHRzID4gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9ucyB7CisgIG1heC1oZWlnaHQ6IDIwMHB4OworICBvdmVyZmxvdy15OiBhdXRvOyB9CisKKy5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25bcm9sZT1ncm91cF0geworICBwYWRkaW5nOiAwOyB9CisKKy5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25bYXJpYS1kaXNhYmxlZD10cnVlXSB7CisgIGNvbG9yOiAjOTk5OyB9CisKKy5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25bYXJpYS1zZWxlY3RlZD10cnVlXSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNkZGQ7IH0KKworLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbiAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24geworICBwYWRkaW5nLWxlZnQ6IDFlbTsgfQorICAuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbiAuc2VsZWN0Mi1yZXN1bHRzX19ncm91cCB7CisgICAgcGFkZGluZy1sZWZ0OiAwOyB9CisgIC5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbiB7CisgICAgbWFyZ2luLWxlZnQ6IC0xZW07CisgICAgcGFkZGluZy1sZWZ0OiAyZW07IH0KKyAgICAuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbiAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIHsKKyAgICAgIG1hcmdpbi1sZWZ0OiAtMmVtOworICAgICAgcGFkZGluZy1sZWZ0OiAzZW07IH0KKyAgICAgIC5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbiAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIHsKKyAgICAgICAgbWFyZ2luLWxlZnQ6IC0zZW07CisgICAgICAgIHBhZGRpbmctbGVmdDogNGVtOyB9CisgICAgICAgIC5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbiAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbiB7CisgICAgICAgICAgbWFyZ2luLWxlZnQ6IC00ZW07CisgICAgICAgICAgcGFkZGluZy1sZWZ0OiA1ZW07IH0KKyAgICAgICAgICAuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbiAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbiAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIHsKKyAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtNWVtOworICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA2ZW07IH0KKworLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0taGlnaGxpZ2h0ZWRbYXJpYS1zZWxlY3RlZF0geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTg5N2ZiOworICBjb2xvcjogd2hpdGU7IH0KKworLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXJlc3VsdHNfX2dyb3VwIHsKKyAgY3Vyc29yOiBkZWZhdWx0OworICBkaXNwbGF5OiBibG9jazsKKyAgcGFkZGluZzogNnB4OyB9CisKKy5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYyAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7CisgIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7CisgIGJvcmRlci1yYWRpdXM6IDRweDsKKyAgb3V0bGluZTogMDsKKyAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCB3aGl0ZSA1MCUsICNlZWVlZWUgMTAwJSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsIHdoaXRlIDUwJSwgI2VlZWVlZSAxMDAlKTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgd2hpdGUgNTAlLCAjZWVlZWVlIDEwMCUpOworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNGRkZGRkZGRicsIGVuZENvbG9yc3RyPScjRkZFRUVFRUUnLCBHcmFkaWVudFR5cGU9MCk7IH0KKyAgLnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlOmZvY3VzIHsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjNTg5N2ZiOyB9CisgIC5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYyAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIHsKKyAgICBjb2xvcjogIzQ0NDsKKyAgICBsaW5lLWhlaWdodDogMjhweDsgfQorICAuc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19jbGVhciB7CisgICAgY3Vyc29yOiBwb2ludGVyOworICAgIGZsb2F0OiByaWdodDsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7IH0KKyAgLnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fcGxhY2Vob2xkZXIgeworICAgIGNvbG9yOiAjOTk5OyB9CisgIC5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYyAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2Fycm93IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkOworICAgIGJvcmRlcjogbm9uZTsKKyAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNhYWE7CisgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDsKKyAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4OworICAgIGhlaWdodDogMjZweDsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAxcHg7CisgICAgcmlnaHQ6IDFweDsKKyAgICB3aWR0aDogMjBweDsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICNlZWVlZWUgNTAlLCAjY2NjY2NjIDEwMCUpOworICAgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICNlZWVlZWUgNTAlLCAjY2NjY2NjIDEwMCUpOworICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNlZWVlZWUgNTAlLCAjY2NjY2NjIDEwMCUpOworICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAgICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjRkZFRUVFRUUnLCBlbmRDb2xvcnN0cj0nI0ZGQ0NDQ0NDJywgR3JhZGllbnRUeXBlPTApOyB9CisgICAgLnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3cgYiB7CisgICAgICBib3JkZXItY29sb3I6ICM4ODggdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7CisgICAgICBib3JkZXItc3R5bGU6IHNvbGlkOworICAgICAgYm9yZGVyLXdpZHRoOiA1cHggNHB4IDAgNHB4OworICAgICAgaGVpZ2h0OiAwOworICAgICAgbGVmdDogNTAlOworICAgICAgbWFyZ2luLWxlZnQ6IC00cHg7CisgICAgICBtYXJnaW4tdG9wOiAtMnB4OworICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgdG9wOiA1MCU7CisgICAgICB3aWR0aDogMDsgfQorCisuc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWNbZGlyPSJydGwiXSAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyIHsKKyAgZmxvYXQ6IGxlZnQ7IH0KKworLnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljW2Rpcj0icnRsIl0gLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19hcnJvdyB7CisgIGJvcmRlcjogbm9uZTsKKyAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2FhYTsKKyAgYm9yZGVyLXJhZGl1czogMDsKKyAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4OworICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7CisgIGxlZnQ6IDFweDsKKyAgcmlnaHQ6IGF1dG87IH0KKworLnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljLnNlbGVjdDItY29udGFpbmVyLS1vcGVuIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIHsKKyAgYm9yZGVyOiAxcHggc29saWQgIzU4OTdmYjsgfQorICAuc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMuc2VsZWN0Mi1jb250YWluZXItLW9wZW4gLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19hcnJvdyB7CisgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CisgICAgYm9yZGVyOiBub25lOyB9CisgICAgLnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljLnNlbGVjdDItY29udGFpbmVyLS1vcGVuIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3cgYiB7CisgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICM4ODggdHJhbnNwYXJlbnQ7CisgICAgICBib3JkZXItd2lkdGg6IDAgNHB4IDVweCA0cHg7IH0KKworLnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljLnNlbGVjdDItY29udGFpbmVyLS1vcGVuLnNlbGVjdDItY29udGFpbmVyLS1hYm92ZSAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSB7CisgIGJvcmRlci10b3A6IG5vbmU7CisgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7CisgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIHdoaXRlIDAlLCAjZWVlZWVlIDUwJSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsIHdoaXRlIDAlLCAjZWVlZWVlIDUwJSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHdoaXRlIDAlLCAjZWVlZWVlIDUwJSk7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI0ZGRkZGRkZGJywgZW5kQ29sb3JzdHI9JyNGRkVFRUVFRScsIEdyYWRpZW50VHlwZT0wKTsgfQorCisuc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMuc2VsZWN0Mi1jb250YWluZXItLW9wZW4uc2VsZWN0Mi1jb250YWluZXItLWJlbG93IC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIHsKKyAgYm9yZGVyLWJvdHRvbTogbm9uZTsKKyAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDsKKyAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7CisgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2VlZWVlZSA1MCUsIHdoaXRlIDEwMCUpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAjZWVlZWVlIDUwJSwgd2hpdGUgMTAwJSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNlZWVlZWUgNTAlLCB3aGl0ZSAxMDAlKTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjRkZFRUVFRUUnLCBlbmRDb2xvcnN0cj0nI0ZGRkZGRkZGJywgR3JhZGllbnRUeXBlPTApOyB9CisKKy5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYyAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7CisgIGJvcmRlci1yYWRpdXM6IDRweDsKKyAgY3Vyc29yOiB0ZXh0OworICBvdXRsaW5lOiAwOyB9CisgIC5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYyAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlOmZvY3VzIHsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjNTg5N2ZiOyB9CisgIC5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYyAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlIC5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQgeworICAgIGxpc3Qtc3R5bGU6IG5vbmU7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDAgNXB4OyB9CisgIC5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYyAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlIC5zZWxlY3QyLXNlbGVjdGlvbl9fY2xlYXIgeworICAgIGRpc3BsYXk6IG5vbmU7IH0KKyAgLnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljIC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUgLnNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2UgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNlNGU0ZTQ7CisgICAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKKyAgICBib3JkZXItcmFkaXVzOiA0cHg7CisgICAgY3Vyc29yOiBkZWZhdWx0OworICAgIGZsb2F0OiBsZWZ0OworICAgIG1hcmdpbi1yaWdodDogNXB4OworICAgIG1hcmdpbi10b3A6IDVweDsKKyAgICBwYWRkaW5nOiAwIDVweDsgfQorICAuc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMgLnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZV9fcmVtb3ZlIHsKKyAgICBjb2xvcjogIzg4ODsKKyAgICBjdXJzb3I6IHBvaW50ZXI7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIG1hcmdpbi1yaWdodDogMnB4OyB9CisgICAgLnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljIC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUgLnNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2VfX3JlbW92ZTpob3ZlciB7CisgICAgICBjb2xvcjogIzU1NTsgfQorCisuc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWNbZGlyPSJydGwiXSAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlIC5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlIHsKKyAgZmxvYXQ6IHJpZ2h0OworICBtYXJnaW4tbGVmdDogNXB4OworICBtYXJnaW4tcmlnaHQ6IGF1dG87IH0KKworLnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljW2Rpcj0icnRsIl0gLnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZV9fcmVtb3ZlIHsKKyAgbWFyZ2luLWxlZnQ6IDJweDsKKyAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9CisKKy5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYy5zZWxlY3QyLWNvbnRhaW5lci0tb3BlbiAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlIHsKKyAgYm9yZGVyOiAxcHggc29saWQgIzU4OTdmYjsgfQorCisuc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMuc2VsZWN0Mi1jb250YWluZXItLW9wZW4uc2VsZWN0Mi1jb250YWluZXItLWFib3ZlIC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUgeworICBib3JkZXItdG9wOiBub25lOworICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOworICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsgfQorCisuc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMuc2VsZWN0Mi1jb250YWluZXItLW9wZW4uc2VsZWN0Mi1jb250YWluZXItLWJlbG93IC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUgeworICBib3JkZXItYm90dG9tOiBub25lOworICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOworICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsgfQorCisuc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMgLnNlbGVjdDItc2VhcmNoLS1kcm9wZG93biAuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkIHsKKyAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKKyAgb3V0bGluZTogMDsgfQorCisuc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMgLnNlbGVjdDItc2VhcmNoLS1pbmxpbmUgLnNlbGVjdDItc2VhcmNoX19maWVsZCB7CisgIG91dGxpbmU6IDA7CisgIGJveC1zaGFkb3c6IG5vbmU7IH0KKworLnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljIC5zZWxlY3QyLWRyb3Bkb3duIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OyB9CisKKy5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYyAuc2VsZWN0Mi1kcm9wZG93bi0tYWJvdmUgeworICBib3JkZXItYm90dG9tOiBub25lOyB9CisKKy5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYyAuc2VsZWN0Mi1kcm9wZG93bi0tYmVsb3cgeworICBib3JkZXItdG9wOiBub25lOyB9CisKKy5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYyAuc2VsZWN0Mi1yZXN1bHRzID4gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9ucyB7CisgIG1heC1oZWlnaHQ6IDIwMHB4OworICBvdmVyZmxvdy15OiBhdXRvOyB9CisKKy5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYyAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25bcm9sZT1ncm91cF0geworICBwYWRkaW5nOiAwOyB9CisKKy5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYyAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25bYXJpYS1kaXNhYmxlZD10cnVlXSB7CisgIGNvbG9yOiBncmV5OyB9CisKKy5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYyAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWhpZ2hsaWdodGVkW2FyaWEtc2VsZWN0ZWRdIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzM4NzVkNzsKKyAgY29sb3I6IHdoaXRlOyB9CisKKy5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYyAuc2VsZWN0Mi1yZXN1bHRzX19ncm91cCB7CisgIGN1cnNvcjogZGVmYXVsdDsKKyAgZGlzcGxheTogYmxvY2s7CisgIHBhZGRpbmc6IDZweDsgfQorCisuc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMuc2VsZWN0Mi1jb250YWluZXItLW9wZW4gLnNlbGVjdDItZHJvcGRvd24geworICBib3JkZXItY29sb3I6ICM1ODk3ZmI7IH0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2Nzcy9zZWxlY3QyLm1pbi5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9jc3Mvc2VsZWN0Mi5taW4uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZDU5OTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9jc3Mvc2VsZWN0Mi5taW4uY3NzCkBAIC0wLDAgKzEgQEAKKy5zZWxlY3QyLWNvbnRhaW5lcntib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjA7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MjhweDt1c2VyLXNlbGVjdDpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZX0uc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZHtkaXNwbGF5OmJsb2NrO3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDoyMHB4O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0uc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19jbGVhcntwb3NpdGlvbjpyZWxhdGl2ZX0uc2VsZWN0Mi1jb250YWluZXJbZGlyPSJydGwiXSAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVke3BhZGRpbmctcmlnaHQ6OHB4O3BhZGRpbmctbGVmdDoyMHB4fS5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxle2JveC1zaXppbmc6Ym9yZGVyLWJveDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmJsb2NrO21pbi1oZWlnaHQ6MzJweDt1c2VyLXNlbGVjdDpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZX0uc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVke2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6OHB4O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1zZWFyY2gtLWlubGluZXtmbG9hdDpsZWZ0fS5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1zZWFyY2gtLWlubGluZSAuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxke2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6bm9uZTtmb250LXNpemU6MTAwJTttYXJnaW4tdG9wOjVweDtwYWRkaW5nOjB9LnNlbGVjdDItY29udGFpbmVyIC5zZWxlY3QyLXNlYXJjaC0taW5saW5lIC5zZWxlY3QyLXNlYXJjaF9fZmllbGQ6Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LnNlbGVjdDItZHJvcGRvd257YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTtib3JkZXI6MXB4IHNvbGlkICNhYWE7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTAwMDAwcHg7d2lkdGg6MTAwJTt6LWluZGV4OjEwNTF9LnNlbGVjdDItcmVzdWx0c3tkaXNwbGF5OmJsb2NrfS5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbnN7bGlzdC1zdHlsZTpub25lO21hcmdpbjowO3BhZGRpbmc6MH0uc2VsZWN0Mi1yZXN1bHRzX19vcHRpb257cGFkZGluZzo2cHg7dXNlci1zZWxlY3Q6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmV9LnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRde2N1cnNvcjpwb2ludGVyfS5zZWxlY3QyLWNvbnRhaW5lci0tb3BlbiAuc2VsZWN0Mi1kcm9wZG93bntsZWZ0OjB9LnNlbGVjdDItY29udGFpbmVyLS1vcGVuIC5zZWxlY3QyLWRyb3Bkb3duLS1hYm92ZXtib3JkZXItYm90dG9tOm5vbmU7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LnNlbGVjdDItY29udGFpbmVyLS1vcGVuIC5zZWxlY3QyLWRyb3Bkb3duLS1iZWxvd3tib3JkZXItdG9wOm5vbmU7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9LnNlbGVjdDItc2VhcmNoLS1kcm9wZG93bntkaXNwbGF5OmJsb2NrO3BhZGRpbmc6NHB4fS5zZWxlY3QyLXNlYXJjaC0tZHJvcGRvd24gLnNlbGVjdDItc2VhcmNoX19maWVsZHtwYWRkaW5nOjRweDt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uc2VsZWN0Mi1zZWFyY2gtLWRyb3Bkb3duIC5zZWxlY3QyLXNlYXJjaF9fZmllbGQ6Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LnNlbGVjdDItc2VhcmNoLS1kcm9wZG93bi5zZWxlY3QyLXNlYXJjaC0taGlkZXtkaXNwbGF5Om5vbmV9LnNlbGVjdDItY2xvc2UtbWFza3tib3JkZXI6MDttYXJnaW46MDtwYWRkaW5nOjA7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpmaXhlZDtsZWZ0OjA7dG9wOjA7bWluLWhlaWdodDoxMDAlO21pbi13aWR0aDoxMDAlO2hlaWdodDphdXRvO3dpZHRoOmF1dG87b3BhY2l0eTowO3otaW5kZXg6OTk7YmFja2dyb3VuZC1jb2xvcjojZmZmO2ZpbHRlcjphbHBoYShvcGFjaXR5PTApfS5zZWxlY3QyLWhpZGRlbi1hY2Nlc3NpYmxle2JvcmRlcjowICFpbXBvcnRhbnQ7Y2xpcDpyZWN0KDAgMCAwIDApICFpbXBvcnRhbnQ7LXdlYmtpdC1jbGlwLXBhdGg6aW5zZXQoNTAlKSAhaW1wb3J0YW50O2NsaXAtcGF0aDppbnNldCg1MCUpICFpbXBvcnRhbnQ7aGVpZ2h0OjFweCAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50O3BhZGRpbmc6MCAhaW1wb3J0YW50O3Bvc2l0aW9uOmFic29sdXRlICFpbXBvcnRhbnQ7d2lkdGg6MXB4ICFpbXBvcnRhbnQ7d2hpdGUtc3BhY2U6bm93cmFwICFpbXBvcnRhbnR9LnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xle2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNhYWE7Ym9yZGVyLXJhZGl1czo0cHh9LnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWR7Y29sb3I6IzQ0NDtsaW5lLWhlaWdodDoyOHB4fS5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFye2N1cnNvcjpwb2ludGVyO2Zsb2F0OnJpZ2h0O2ZvbnQtd2VpZ2h0OmJvbGR9LnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fcGxhY2Vob2xkZXJ7Y29sb3I6Izk5OX0uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19hcnJvd3toZWlnaHQ6MjZweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MXB4O3JpZ2h0OjFweDt3aWR0aDoyMHB4fS5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2Fycm93IGJ7Ym9yZGVyLWNvbG9yOiM4ODggdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDo1cHggNHB4IDAgNHB4O2hlaWdodDowO2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi00cHg7bWFyZ2luLXRvcDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7d2lkdGg6MH0uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHRbZGlyPSJydGwiXSAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFye2Zsb2F0OmxlZnR9LnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0W2Rpcj0icnRsIl0gLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19hcnJvd3tsZWZ0OjFweDtyaWdodDphdXRvfS5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdC5zZWxlY3QyLWNvbnRhaW5lci0tZGlzYWJsZWQgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGV7YmFja2dyb3VuZC1jb2xvcjojZWVlO2N1cnNvcjpkZWZhdWx0fS5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdC5zZWxlY3QyLWNvbnRhaW5lci0tZGlzYWJsZWQgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19jbGVhcntkaXNwbGF5Om5vbmV9LnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0LnNlbGVjdDItY29udGFpbmVyLS1vcGVuIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3cgYntib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzg4OCB0cmFuc3BhcmVudDtib3JkZXItd2lkdGg6MCA0cHggNXB4IDRweH0uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZXtiYWNrZ3JvdW5kLWNvbG9yOndoaXRlO2JvcmRlcjoxcHggc29saWQgI2FhYTtib3JkZXItcmFkaXVzOjRweDtjdXJzb3I6dGV4dH0uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVke2JveC1zaXppbmc6Ym9yZGVyLWJveDtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowIDVweDt3aWR0aDoxMDAlfS5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlIC5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQgbGl7bGlzdC1zdHlsZTpub25lfS5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlIC5zZWxlY3QyLXNlbGVjdGlvbl9fcGxhY2Vob2xkZXJ7Y29sb3I6Izk5OTttYXJnaW4tdG9wOjVweDtmbG9hdDpsZWZ0fS5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlIC5zZWxlY3QyLXNlbGVjdGlvbl9fY2xlYXJ7Y3Vyc29yOnBvaW50ZXI7ZmxvYXQ6cmlnaHQ7Zm9udC13ZWlnaHQ6Ym9sZDttYXJnaW4tdG9wOjVweDttYXJnaW4tcmlnaHQ6MTBweH0uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZXtiYWNrZ3JvdW5kLWNvbG9yOiNlNGU0ZTQ7Ym9yZGVyOjFweCBzb2xpZCAjYWFhO2JvcmRlci1yYWRpdXM6NHB4O2N1cnNvcjpkZWZhdWx0O2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0OjVweDttYXJnaW4tdG9wOjVweDtwYWRkaW5nOjAgNXB4fS5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlIC5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19yZW1vdmV7Y29sb3I6Izk5OTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXdlaWdodDpib2xkO21hcmdpbi1yaWdodDoycHh9LnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUgLnNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2VfX3JlbW92ZTpob3Zlcntjb2xvcjojMzMzfS5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdFtkaXI9InJ0bCJdIC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUgLnNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2UsLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0W2Rpcj0icnRsIl0gLnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX3BsYWNlaG9sZGVyLC5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdFtkaXI9InJ0bCJdIC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUgLnNlbGVjdDItc2VhcmNoLS1pbmxpbmV7ZmxvYXQ6cmlnaHR9LnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0W2Rpcj0icnRsIl0gLnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZXttYXJnaW4tbGVmdDo1cHg7bWFyZ2luLXJpZ2h0OmF1dG99LnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0W2Rpcj0icnRsIl0gLnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZV9fcmVtb3Zle21hcmdpbi1sZWZ0OjJweDttYXJnaW4tcmlnaHQ6YXV0b30uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQuc2VsZWN0Mi1jb250YWluZXItLWZvY3VzIC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGV7Ym9yZGVyOnNvbGlkIGJsYWNrIDFweDtvdXRsaW5lOjB9LnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0LnNlbGVjdDItY29udGFpbmVyLS1kaXNhYmxlZCAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxle2JhY2tncm91bmQtY29sb3I6I2VlZTtjdXJzb3I6ZGVmYXVsdH0uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQuc2VsZWN0Mi1jb250YWluZXItLWRpc2FibGVkIC5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19yZW1vdmV7ZGlzcGxheTpub25lfS5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdC5zZWxlY3QyLWNvbnRhaW5lci0tb3Blbi5zZWxlY3QyLWNvbnRhaW5lci0tYWJvdmUgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUsLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0LnNlbGVjdDItY29udGFpbmVyLS1vcGVuLnNlbGVjdDItY29udGFpbmVyLS1hYm92ZSAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxle2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowfS5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdC5zZWxlY3QyLWNvbnRhaW5lci0tb3Blbi5zZWxlY3QyLWNvbnRhaW5lci0tYmVsb3cgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUsLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0LnNlbGVjdDItY29udGFpbmVyLS1vcGVuLnNlbGVjdDItY29udGFpbmVyLS1iZWxvdyAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxle2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWFyY2gtLWRyb3Bkb3duIC5zZWxlY3QyLXNlYXJjaF9fZmllbGR7Ym9yZGVyOjFweCBzb2xpZCAjYWFhfS5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWFyY2gtLWlubGluZSAuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxke2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7b3V0bGluZTowO2JveC1zaGFkb3c6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkfS5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1yZXN1bHRzPi5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbnN7bWF4LWhlaWdodDoyMDBweDtvdmVyZmxvdy15OmF1dG99LnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbltyb2xlPWdyb3VwXXtwYWRkaW5nOjB9LnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvblthcmlhLWRpc2FibGVkPXRydWVde2NvbG9yOiM5OTl9LnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvblthcmlhLXNlbGVjdGVkPXRydWVde2JhY2tncm91bmQtY29sb3I6I2RkZH0uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbntwYWRkaW5nLWxlZnQ6MWVtfS5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIC5zZWxlY3QyLXJlc3VsdHNfX2dyb3Vwe3BhZGRpbmctbGVmdDowfS5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbnttYXJnaW4tbGVmdDotMWVtO3BhZGRpbmctbGVmdDoyZW19LnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbiAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbnttYXJnaW4tbGVmdDotMmVtO3BhZGRpbmctbGVmdDozZW19LnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbiAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbiAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb257bWFyZ2luLWxlZnQ6LTNlbTtwYWRkaW5nLWxlZnQ6NGVtfS5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbiAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbnttYXJnaW4tbGVmdDotNGVtO3BhZGRpbmctbGVmdDo1ZW19LnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbiAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbiAuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbnttYXJnaW4tbGVmdDotNWVtO3BhZGRpbmctbGVmdDo2ZW19LnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0taGlnaGxpZ2h0ZWRbYXJpYS1zZWxlY3RlZF17YmFja2dyb3VuZC1jb2xvcjojNTg5N2ZiO2NvbG9yOndoaXRlfS5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1yZXN1bHRzX19ncm91cHtjdXJzb3I6ZGVmYXVsdDtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6NnB4fS5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYyAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmN2Y3Zjc7Ym9yZGVyOjFweCBzb2xpZCAjYWFhO2JvcmRlci1yYWRpdXM6NHB4O291dGxpbmU6MDtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZmZiA1MCUsICNlZWUgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCAjZmZmIDUwJSwgI2VlZSAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmZmYgNTAlLCAjZWVlIDEwMCUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI0ZGRkZGRkZGJywgZW5kQ29sb3JzdHI9JyNGRkVFRUVFRScsIEdyYWRpZW50VHlwZT0wKX0uc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGU6Zm9jdXN7Ym9yZGVyOjFweCBzb2xpZCAjNTg5N2ZifS5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYyAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVke2NvbG9yOiM0NDQ7bGluZS1oZWlnaHQ6MjhweH0uc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19jbGVhcntjdXJzb3I6cG9pbnRlcjtmbG9hdDpyaWdodDtmb250LXdlaWdodDpib2xkO21hcmdpbi1yaWdodDoxMHB4fS5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYyAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX3BsYWNlaG9sZGVye2NvbG9yOiM5OTl9LnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3d7YmFja2dyb3VuZC1jb2xvcjojZGRkO2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjYWFhO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7aGVpZ2h0OjI2cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjFweDtyaWdodDoxcHg7d2lkdGg6MjBweDtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2VlZSA1MCUsICNjY2MgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCAjZWVlIDUwJSwgI2NjYyAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNlZWUgNTAlLCAjY2NjIDEwMCUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI0ZGRUVFRUVFJywgZW5kQ29sb3JzdHI9JyNGRkNDQ0NDQycsIEdyYWRpZW50VHlwZT0wKX0uc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19hcnJvdyBie2JvcmRlci1jb2xvcjojODg4IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6NXB4IDRweCAwIDRweDtoZWlnaHQ6MDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotNHB4O21hcmdpbi10b3A6LTJweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjB9LnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljW2Rpcj0icnRsIl0gLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19jbGVhcntmbG9hdDpsZWZ0fS5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpY1tkaXI9InJ0bCJdIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3d7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjYWFhO2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtsZWZ0OjFweDtyaWdodDphdXRvfS5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYy5zZWxlY3QyLWNvbnRhaW5lci0tb3BlbiAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZXtib3JkZXI6MXB4IHNvbGlkICM1ODk3ZmJ9LnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljLnNlbGVjdDItY29udGFpbmVyLS1vcGVuIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3d7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6bm9uZX0uc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMuc2VsZWN0Mi1jb250YWluZXItLW9wZW4gLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19hcnJvdyBie2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjODg4IHRyYW5zcGFyZW50O2JvcmRlci13aWR0aDowIDRweCA1cHggNHB4fS5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYy5zZWxlY3QyLWNvbnRhaW5lci0tb3Blbi5zZWxlY3QyLWNvbnRhaW5lci0tYWJvdmUgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGV7Ym9yZGVyLXRvcDpub25lO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZmZmIDAlLCAjZWVlIDUwJSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCAjZmZmIDAlLCAjZWVlIDUwJSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZmZmIDAlLCAjZWVlIDUwJSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjRkZGRkZGRkYnLCBlbmRDb2xvcnN0cj0nI0ZGRUVFRUVFJywgR3JhZGllbnRUeXBlPTApfS5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYy5zZWxlY3QyLWNvbnRhaW5lci0tb3Blbi5zZWxlY3QyLWNvbnRhaW5lci0tYmVsb3cgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGV7Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZWVlIDUwJSwgI2ZmZiAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsICNlZWUgNTAlLCAjZmZmIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2VlZSA1MCUsICNmZmYgMTAwJSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjRkZFRUVFRUUnLCBlbmRDb2xvcnN0cj0nI0ZGRkZGRkZGJywgR3JhZGllbnRUeXBlPTApfS5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYyAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxle2JhY2tncm91bmQtY29sb3I6d2hpdGU7Ym9yZGVyOjFweCBzb2xpZCAjYWFhO2JvcmRlci1yYWRpdXM6NHB4O2N1cnNvcjp0ZXh0O291dGxpbmU6MH0uc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMgLnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZTpmb2N1c3tib3JkZXI6MXB4IHNvbGlkICM1ODk3ZmJ9LnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljIC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUgLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZHtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowIDVweH0uc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMgLnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFye2Rpc3BsYXk6bm9uZX0uc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMgLnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZXtiYWNrZ3JvdW5kLWNvbG9yOiNlNGU0ZTQ7Ym9yZGVyOjFweCBzb2xpZCAjYWFhO2JvcmRlci1yYWRpdXM6NHB4O2N1cnNvcjpkZWZhdWx0O2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0OjVweDttYXJnaW4tdG9wOjVweDtwYWRkaW5nOjAgNXB4fS5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYyAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlIC5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19yZW1vdmV7Y29sb3I6Izg4ODtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXdlaWdodDpib2xkO21hcmdpbi1yaWdodDoycHh9LnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljIC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUgLnNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2VfX3JlbW92ZTpob3Zlcntjb2xvcjojNTU1fS5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpY1tkaXI9InJ0bCJdIC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUgLnNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2V7ZmxvYXQ6cmlnaHQ7bWFyZ2luLWxlZnQ6NXB4O21hcmdpbi1yaWdodDphdXRvfS5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpY1tkaXI9InJ0bCJdIC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUgLnNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2VfX3JlbW92ZXttYXJnaW4tbGVmdDoycHg7bWFyZ2luLXJpZ2h0OmF1dG99LnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljLnNlbGVjdDItY29udGFpbmVyLS1vcGVuIC5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGV7Ym9yZGVyOjFweCBzb2xpZCAjNTg5N2ZifS5zZWxlY3QyLWNvbnRhaW5lci0tY2xhc3NpYy5zZWxlY3QyLWNvbnRhaW5lci0tb3Blbi5zZWxlY3QyLWNvbnRhaW5lci0tYWJvdmUgLnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZXtib3JkZXItdG9wOm5vbmU7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9LnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljLnNlbGVjdDItY29udGFpbmVyLS1vcGVuLnNlbGVjdDItY29udGFpbmVyLS1iZWxvdyAuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxle2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMgLnNlbGVjdDItc2VhcmNoLS1kcm9wZG93biAuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxke2JvcmRlcjoxcHggc29saWQgI2FhYTtvdXRsaW5lOjB9LnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljIC5zZWxlY3QyLXNlYXJjaC0taW5saW5lIC5zZWxlY3QyLXNlYXJjaF9fZmllbGR7b3V0bGluZTowO2JveC1zaGFkb3c6bm9uZX0uc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMgLnNlbGVjdDItZHJvcGRvd257YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnR9LnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljIC5zZWxlY3QyLWRyb3Bkb3duLS1hYm92ZXtib3JkZXItYm90dG9tOm5vbmV9LnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljIC5zZWxlY3QyLWRyb3Bkb3duLS1iZWxvd3tib3JkZXItdG9wOm5vbmV9LnNlbGVjdDItY29udGFpbmVyLS1jbGFzc2ljIC5zZWxlY3QyLXJlc3VsdHM+LnNlbGVjdDItcmVzdWx0c19fb3B0aW9uc3ttYXgtaGVpZ2h0OjIwMHB4O292ZXJmbG93LXk6YXV0b30uc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMgLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW3JvbGU9Z3JvdXBde3BhZGRpbmc6MH0uc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMgLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y29sb3I6Z3JleX0uc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMgLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1oaWdobGlnaHRlZFthcmlhLXNlbGVjdGVkXXtiYWNrZ3JvdW5kLWNvbG9yOiMzODc1ZDc7Y29sb3I6I2ZmZn0uc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMgLnNlbGVjdDItcmVzdWx0c19fZ3JvdXB7Y3Vyc29yOmRlZmF1bHQ7ZGlzcGxheTpibG9jaztwYWRkaW5nOjZweH0uc2VsZWN0Mi1jb250YWluZXItLWNsYXNzaWMuc2VsZWN0Mi1jb250YWluZXItLW9wZW4gLnNlbGVjdDItZHJvcGRvd257Ym9yZGVyLWNvbG9yOiM1ODk3ZmJ9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2FmLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9hZi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzYyOGFlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9hZi5qcwpAQCAtMCwwICsxLDMgQEAKKy8qISBTZWxlY3QyIDQuMC42LXJjLjEgfCBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQgKi8KKworKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5JiZqUXVlcnkuZm4mJmpRdWVyeS5mbi5zZWxlY3QyJiZqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpdmFyIGU9alF1ZXJ5LmZuLnNlbGVjdDIuYW1kO3JldHVybiBlLmRlZmluZSgic2VsZWN0Mi9pMThuL2FmIixbXSxmdW5jdGlvbigpe3JldHVybntlcnJvckxvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iRGllIHJlc3VsdGF0ZSBrb24gbmllIGdlbGFhaSB3b3JkIG5pZS4ifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtLG49IlZlcnd5ZGVycyBhc3NlYmxpZWYgIit0KyIgY2hhcmFjdGVyIjtyZXR1cm4gdCE9MSYmKG4rPSJzIiksbn0saW5wdXRUb29TaG9ydDpmdW5jdGlvbihlKXt2YXIgdD1lLm1pbmltdW0tZS5pbnB1dC5sZW5ndGgsbj0iVm9lciBhc3NlYmxpZWYgIit0KyIgb2YgbWVlciBrYXJha3RlcnMiO3JldHVybiBufSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiJNZWVyIHJlc3VsdGF0ZSB3b3JkIGdlbGFhaeKApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD0iS2llcyBhc3NlYmxpZWYgbmV0ICIrZS5tYXhpbXVtKyIgaXRlbSI7cmV0dXJuIGUubWF4aW11bSE9MSYmKHQrPSJzIiksdH0sbm9SZXN1bHRzOmZ1bmN0aW9uKCl7cmV0dXJuIkdlZW4gcmVzdWx0YXRlIGdldmluZCJ9LHNlYXJjaGluZzpmdW5jdGlvbigpe3JldHVybiJCZXNpZ+KApiJ9fX0pLHtkZWZpbmU6ZS5kZWZpbmUscmVxdWlyZTplLnJlcXVpcmV9fSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2FyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9hci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGI1ZWRiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9hci5qcwpAQCAtMCwwICsxLDMgQEAKKy8qISBTZWxlY3QyIDQuMC42LXJjLjEgfCBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQgKi8KKworKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5JiZqUXVlcnkuZm4mJmpRdWVyeS5mbi5zZWxlY3QyJiZqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpdmFyIGU9alF1ZXJ5LmZuLnNlbGVjdDIuYW1kO3JldHVybiBlLmRlZmluZSgic2VsZWN0Mi9pMThuL2FyIixbXSxmdW5jdGlvbigpe3JldHVybntlcnJvckxvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4i2YTYpyDZitmF2YPZhiDYqtit2YXZitmEINin2YTZhtiq2KfYptisIn0saW5wdXRUb29Mb25nOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5wdXQubGVuZ3RoLWUubWF4aW11bTtyZXR1cm4i2KfZhNix2KzYp9ihINit2LDZgSAiK3QrIiDYudmG2KfYtdixIn0saW5wdXRUb29TaG9ydDpmdW5jdGlvbihlKXt2YXIgdD1lLm1pbmltdW0tZS5pbnB1dC5sZW5ndGg7cmV0dXJuItin2YTYsdis2KfYoSDYpdi22KfZgdipICIrdCsiINi52YbYp9i12LEifSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiLYrNin2LHZiiDYqtit2YXZitmEINmG2KrYp9im2Kwg2KXYttin2YHZitipLi4uIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKGUpe3JldHVybiLYqtiz2KrYt9mK2Lkg2KXYrtiq2YrYp9ixICIrZS5tYXhpbXVtKyIg2KjZhtmI2K8g2YHZgti3In0sbm9SZXN1bHRzOmZ1bmN0aW9uKCl7cmV0dXJuItmE2YUg2YrYqtmFINin2YTYudir2YjYsSDYudmE2Ykg2KPZiiDZhtiq2KfYptisIn0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuItis2KfYsdmKINin2YTYqNit2KvigKYifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9hei5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vYXouanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg0YzM5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vYXouanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi9heiIsW10sZnVuY3Rpb24oKXtyZXR1cm57aW5wdXRUb29Mb25nOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5wdXQubGVuZ3RoLWUubWF4aW11bTtyZXR1cm4gdCsiIHNpbXZvbCBzaWxpbiJ9LGlucHV0VG9vU2hvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5taW5pbXVtLWUuaW5wdXQubGVuZ3RoO3JldHVybiB0KyIgc2ltdm9sIGRheGlsIGVkaW4ifSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiJEYWhhIMOnb3ggbsmZdGljyZkgecO8a2zJmW5pcuKApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4iU2FkyZljyZkgIitlLm1heGltdW0rIiBlbGVtZW50IHNlw6fJmSBiaWzJmXJzaW5peiJ9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiJOyZl0aWPJmSB0YXDEsWxtYWTEsSJ9LHNlYXJjaGluZzpmdW5jdGlvbigpe3JldHVybiJBeHRhcsSxbMSxcuKApiJ9fX0pLHtkZWZpbmU6ZS5kZWZpbmUscmVxdWlyZTplLnJlcXVpcmV9fSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2JnLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9iZy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjQzMjVhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9iZy5qcwpAQCAtMCwwICsxLDMgQEAKKy8qISBTZWxlY3QyIDQuMC42LXJjLjEgfCBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQgKi8KKworKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5JiZqUXVlcnkuZm4mJmpRdWVyeS5mbi5zZWxlY3QyJiZqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpdmFyIGU9alF1ZXJ5LmZuLnNlbGVjdDIuYW1kO3JldHVybiBlLmRlZmluZSgic2VsZWN0Mi9pMThuL2JnIixbXSxmdW5jdGlvbigpe3JldHVybntpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtLG49ItCc0L7Qu9GPINCy0YrQstC10LTQtdGC0LUg0YEgIit0KyIg0L/Qvi3QvNCw0LvQutC+INGB0LjQvNCy0L7QuyI7cmV0dXJuIHQ+MSYmKG4rPSJhIiksbn0saW5wdXRUb29TaG9ydDpmdW5jdGlvbihlKXt2YXIgdD1lLm1pbmltdW0tZS5pbnB1dC5sZW5ndGgsbj0i0JzQvtC70Y8g0LLRitCy0LXQtNC10YLQtSDQvtGJ0LUgIit0KyIg0YHQuNC80LLQvtC7IjtyZXR1cm4gdD4xJiYobis9ImEiKSxufSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiLQl9Cw0YDQtdC20LTQsNGCINGB0LUg0L7RidC14oCmIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKGUpe3ZhciB0PSLQnNC+0LbQtdGC0LUg0LTQsCDQvdCw0L/RgNCw0LLQuNGC0LUg0LTQviAiK2UubWF4aW11bSsiICI7cmV0dXJuIGUubWF4aW11bT4xP3QrPSLQuNC30LHQvtGA0LAiOnQrPSLQuNC30LHQvtGAIix0fSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm4i0J3Rj9C80LAg0L3QsNC80LXRgNC10L3QuCDRgdGK0LLQv9Cw0LTQtdC90LjRjyJ9LHNlYXJjaGluZzpmdW5jdGlvbigpe3JldHVybiLQotGK0YDRgdC10L3QteKApiJ9fX0pLHtkZWZpbmU6ZS5kZWZpbmUscmVxdWlyZTplLnJlcXVpcmV9fSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2JzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9icy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDBjYzUwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9icy5qcwpAQCAtMCwwICsxLDMgQEAKKy8qISBTZWxlY3QyIDQuMC42LXJjLjEgfCBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQgKi8KKworKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5JiZqUXVlcnkuZm4mJmpRdWVyeS5mbi5zZWxlY3QyJiZqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpdmFyIGU9alF1ZXJ5LmZuLnNlbGVjdDIuYW1kO3JldHVybiBlLmRlZmluZSgic2VsZWN0Mi9pMThuL2JzIixbXSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scil7cmV0dXJuIGUlMTA9PTEmJmUlMTAwIT0xMT90OmUlMTA+PTImJmUlMTA8PTQmJihlJTEwMDwxMnx8ZSUxMDA+MTQpP246cn1yZXR1cm57ZXJyb3JMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIlByZXV6aW1hbmplIG5pamUgdXNwaWplbG8uIn0saW5wdXRUb29Mb25nOmZ1bmN0aW9uKHQpe3ZhciBuPXQuaW5wdXQubGVuZ3RoLXQubWF4aW11bSxyPSJPYnJpxaFpdGUgIituKyIgc2ltYm9sIjtyZXR1cm4gcis9ZShuLCIiLCJhIiwiYSIpLHJ9LGlucHV0VG9vU2hvcnQ6ZnVuY3Rpb24odCl7dmFyIG49dC5taW5pbXVtLXQuaW5wdXQubGVuZ3RoLHI9IlVrdWNhanRlIGJhciBqb8WhICIrbisiIHNpbWJvbCI7cmV0dXJuIHIrPWUobiwiIiwiYSIsImEiKSxyfSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiJQcmV1emltYW5qZSBqb8WhIHJlenVsdGF0YeKApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbih0KXt2YXIgbj0iTW/FvmV0ZSBpemFicmF0aSBzYW1vICIrdC5tYXhpbXVtKyIgc3RhdmsiO3JldHVybiBuKz1lKHQubWF4aW11bSwidSIsImUiLCJpIiksbn0sbm9SZXN1bHRzOmZ1bmN0aW9uKCl7cmV0dXJuIk5pxaF0YSBuaWplIHByb25hxJFlbm8ifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iUHJldHJhZ2HigKYifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9jYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vY2EuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZhNmFiZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vY2EuanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi9jYSIsW10sZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3JMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkxhIGPDoHJyZWdhIGhhIGZhbGxhdCJ9LGlucHV0VG9vTG9uZzpmdW5jdGlvbihlKXt2YXIgdD1lLmlucHV0Lmxlbmd0aC1lLm1heGltdW0sbj0iU2kgdXMgcGxhdSwgZWxpbWluYSAiK3QrIiBjYXIiO3JldHVybiB0PT0xP24rPSLDoGN0ZXIiOm4rPSLDoGN0ZXJzIixufSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWUubWluaW11bS1lLmlucHV0Lmxlbmd0aCxuPSJTaSB1cyBwbGF1LCBpbnRyb2R1ZWl4ICIrdCsiIGNhciI7cmV0dXJuIHQ9PTE/bis9IsOgY3RlciI6bis9IsOgY3RlcnMiLG59LGxvYWRpbmdNb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIkNhcnJlZ2FudCBtw6lzIHJlc3VsdGF0c+KApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD0iTm9tw6lzIGVzIHBvdCBzZWxlY2Npb25hciAiK2UubWF4aW11bSsiIGVsZW1lbnQiO3JldHVybiBlLm1heGltdW0hPTEmJih0Kz0icyIpLHR9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiJObyBzJ2hhbiB0cm9iYXQgcmVzdWx0YXRzIn0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkNlcmNhbnTigKYifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9jcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vY3MuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwZDQ2NgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vY3MuanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi9jcyIsW10sZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7c3dpdGNoKGUpe2Nhc2UgMjpyZXR1cm4gdD8iZHZhIjoiZHbEmyI7Y2FzZSAzOnJldHVybiJ0xZlpIjtjYXNlIDQ6cmV0dXJuIsSNdHnFmWkifXJldHVybiIifXJldHVybntlcnJvckxvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iVsO9c2xlZGt5IG5lbW9obHkgYsO9dCBuYcSNdGVueS4ifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24odCl7dmFyIG49dC5pbnB1dC5sZW5ndGgtdC5tYXhpbXVtO3JldHVybiBuPT0xPyJQcm9zw61tLCB6YWRlanRlIG8gamVkZW4gem5hayBtw6luxJsuIjpuPD00PyJQcm9zw61tLCB6YWRlanRlIG8gIitlKG4sITApKyIgem5ha3kgbcOpbsSbLiI6IlByb3PDrW0sIHphZGVqdGUgbyAiK24rIiB6bmFrxa8gbcOpbsSbLiJ9LGlucHV0VG9vU2hvcnQ6ZnVuY3Rpb24odCl7dmFyIG49dC5taW5pbXVtLXQuaW5wdXQubGVuZ3RoO3JldHVybiBuPT0xPyJQcm9zw61tLCB6YWRlanRlIGplxaF0xJsgamVkZW4gem5hay4iOm48PTQ/IlByb3PDrW0sIHphZGVqdGUgamXFoXTEmyBkYWzFocOtICIrZShuLCEwKSsiIHpuYWt5LiI6IlByb3PDrW0sIHphZGVqdGUgamXFoXTEmyBkYWzFocOtY2ggIituKyIgem5ha8WvLiJ9LGxvYWRpbmdNb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIk5hxI3DrXRhasOtIHNlIGRhbMWhw60gdsO9c2xlZGt54oCmIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKHQpe3ZhciBuPXQubWF4aW11bTtyZXR1cm4gbj09MT8iTcWvxb5ldGUgenZvbGl0IGplbiBqZWRudSBwb2xvxb5rdS4iOm48PTQ/Ik3Fr8W+ZXRlIHp2b2xpdCBtYXhpbcOhbG7EmyAiK2UobiwhMSkrIiBwb2xvxb5reS4iOiJNxa/FvmV0ZSB6dm9saXQgbWF4aW3DoWxuxJsgIituKyIgcG9sb8W+ZWsuIn0sbm9SZXN1bHRzOmZ1bmN0aW9uKCl7cmV0dXJuIk5lbmFsZXplbnkgxb7DoWRuw6kgcG9sb8W+a3kuIn0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIlZ5aGxlZMOhdsOhbsOt4oCmIn19fSkse2RlZmluZTplLmRlZmluZSxyZXF1aXJlOmUucmVxdWlyZX19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vZGEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MWQxYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2RhLmpzCkBAIC0wLDAgKzEsMyBAQAorLyohIFNlbGVjdDIgNC4wLjYtcmMuMSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZCAqLworCisoZnVuY3Rpb24oKXtpZihqUXVlcnkmJmpRdWVyeS5mbiYmalF1ZXJ5LmZuLnNlbGVjdDImJmpRdWVyeS5mbi5zZWxlY3QyLmFtZCl2YXIgZT1qUXVlcnkuZm4uc2VsZWN0Mi5hbWQ7cmV0dXJuIGUuZGVmaW5lKCJzZWxlY3QyL2kxOG4vZGEiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiJSZXN1bHRhdGVybmUga3VubmUgaWtrZSBpbmRsw6ZzZXMuIn0saW5wdXRUb29Mb25nOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5wdXQubGVuZ3RoLWUubWF4aW11bTtyZXR1cm4iQW5naXYgdmVubGlnc3QgIit0KyIgdGVnbiBtaW5kcmUifSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWUubWluaW11bS1lLmlucHV0Lmxlbmd0aDtyZXR1cm4iQW5naXYgdmVubGlnc3QgIit0KyIgdGVnbiBtZXJlIn0sbG9hZGluZ01vcmU6ZnVuY3Rpb24oKXtyZXR1cm4iSW5kbMOmc2VyIGZsZXJlIHJlc3VsdGF0ZXLigKYifSxtYXhpbXVtU2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9IkR1IGthbiBrdW4gdsOmbGdlICIrZS5tYXhpbXVtKyIgZW1uZSI7cmV0dXJuIGUubWF4aW11bSE9MSYmKHQrPSJyIiksdH0sbm9SZXN1bHRzOmZ1bmN0aW9uKCl7cmV0dXJuIkluZ2VuIHJlc3VsdGF0ZXIgZnVuZGV0In0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIlPDuGdlcuKApiJ9fX0pLHtkZWZpbmU6ZS5kZWZpbmUscmVxdWlyZTplLnJlcXVpcmV9fSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWEwMTcyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9kZS5qcwpAQCAtMCwwICsxLDMgQEAKKy8qISBTZWxlY3QyIDQuMC42LXJjLjEgfCBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQgKi8KKworKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5JiZqUXVlcnkuZm4mJmpRdWVyeS5mbi5zZWxlY3QyJiZqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpdmFyIGU9alF1ZXJ5LmZuLnNlbGVjdDIuYW1kO3JldHVybiBlLmRlZmluZSgic2VsZWN0Mi9pMThuL2RlIixbXSxmdW5jdGlvbigpe3JldHVybntlcnJvckxvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iRGllIEVyZ2Vibmlzc2Uga29ubnRlbiBuaWNodCBnZWxhZGVuIHdlcmRlbi4ifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtO3JldHVybiJCaXR0ZSAiK3QrIiBaZWljaGVuIHdlbmlnZXIgZWluZ2ViZW4ifSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWUubWluaW11bS1lLmlucHV0Lmxlbmd0aDtyZXR1cm4iQml0dGUgIit0KyIgWmVpY2hlbiBtZWhyIGVpbmdlYmVuIn0sbG9hZGluZ01vcmU6ZnVuY3Rpb24oKXtyZXR1cm4iTGFkZSBtZWhyIEVyZ2Vibmlzc2XigKYifSxtYXhpbXVtU2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9IlNpZSBrw7ZubmVuIG51ciAiK2UubWF4aW11bSsiIEVpbnRyIjtyZXR1cm4gZS5tYXhpbXVtPT09MT90Kz0iYWciOnQrPSLDpGdlIix0Kz0iIGF1c3fDpGhsZW4iLHR9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiJLZWluZSDDnGJlcmVpbnN0aW1tdW5nZW4gZ2VmdW5kZW4ifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iU3VjaGXigKYifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9kc2IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2RzYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDQ1MDQwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9kc2IuanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi9kc2IiLFtdLGZ1bmN0aW9uKCl7dmFyIGU9WyJ6bmFtdcWha28iLCJ6bmFtdcWhY2UiLCJ6bmFtdcWha2EiLCJ6bmFtdcWha293Il0sdD1bInphcGlzayIsInphcGlza2EiLCJ6YXBpc2tpIiwiemFwaXNrb3ciXSxuPWZ1bmN0aW9uKHQsbil7aWYodD09PTEpcmV0dXJuIG5bMF07aWYodD09PTIpcmV0dXJuIG5bMV07aWYodD4yJiZ0PD00KXJldHVybiBuWzJdO2lmKHQ+PTUpcmV0dXJuIG5bM119O3JldHVybntlcnJvckxvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iV3VzbMSbZGtpIG5qZWpzdSBzZSBkYWxpIHphY3l0YcWbLiJ9LGlucHV0VG9vTG9uZzpmdW5jdGlvbih0KXt2YXIgcj10LmlucHV0Lmxlbmd0aC10Lm1heGltdW07cmV0dXJuIlDFoW9zeW0gbGHFoXVqICIrcisiICIrbihyLGUpfSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKHQpe3ZhciByPXQubWluaW11bS10LmlucHV0Lmxlbmd0aDtyZXR1cm4iUMWhb3N5bSB6YXDDs2RhaiBuYW5lam1qZW5qZWogIityKyIgIituKHIsZSl9LGxvYWRpbmdNb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIkRhbMWhbmUgd3VzbMSbZGtpIHNlIHphY3l0YWp14oCmIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKGUpe3JldHVybiJNw7PFvm/FoSBqYW5vICIrZS5tYXhpbXVtKyIgIituKGUubWF4aW11bSx0KSsid3VicmHFmy4ifSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm4ixb1lZG5lIHd1c2zEm2RraSBuYW1ha2FuZSJ9LHNlYXJjaGluZzpmdW5jdGlvbigpe3JldHVybiJQeXRhIHNl4oCmIn19fSkse2RlZmluZTplLmRlZmluZSxyZXF1aXJlOmUucmVxdWlyZX19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vZWwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2VsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMjRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2VsLmpzCkBAIC0wLDAgKzEsMyBAQAorLyohIFNlbGVjdDIgNC4wLjYtcmMuMSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZCAqLworCisoZnVuY3Rpb24oKXtpZihqUXVlcnkmJmpRdWVyeS5mbiYmalF1ZXJ5LmZuLnNlbGVjdDImJmpRdWVyeS5mbi5zZWxlY3QyLmFtZCl2YXIgZT1qUXVlcnkuZm4uc2VsZWN0Mi5hbWQ7cmV0dXJuIGUuZGVmaW5lKCJzZWxlY3QyL2kxOG4vZWwiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiLOpM6xIM6xz4DOv8+EzrXOu86tz4POvM6xz4TOsSDOtM61zr0gzrzPgM+Mz4HOtc+DzrHOvSDOvc6xIM+Gzr/Pgc+Ez47Pg86/z4XOvS4ifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtLG49Is6gzrHPgc6xzrrOsc67z44gzrTOuc6xzrPPgc6sz4jPhM61ICIrdCsiIM+HzrHPgc6xzrrPhM6uz4EiO3JldHVybiB0PT0xJiYobis9Is6xIiksdCE9MSYmKG4rPSLOtc+CIiksbn0saW5wdXRUb29TaG9ydDpmdW5jdGlvbihlKXt2YXIgdD1lLm1pbmltdW0tZS5pbnB1dC5sZW5ndGgsbj0izqDOsc+BzrHOus6xzrvPjiDPg8+FzrzPgM67zrfPgc+Oz4PPhM61ICIrdCsiIM6uIM+AzrXPgc65z4PPg8+Mz4TOtc+Bzr/Phc+CIM+HzrHPgc6xzrrPhM6uz4HOtc+CIjtyZXR1cm4gbn0sbG9hZGluZ01vcmU6ZnVuY3Rpb24oKXtyZXR1cm4izqbPjM+Bz4TPic+Dzrcgz4DOtc+BzrnPg8+Dz4zPhM61z4HPic69IM6xz4DOv8+EzrXOu861z4POvM6sz4TPic694oCmIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKGUpe3ZhciB0PSLOnM+Azr/Pgc61zq/PhM61IM69zrEgzrXPgM65zrvOrc6+zrXPhM61IM68z4zOvc6/ICIrZS5tYXhpbXVtKyIgzrXPgM65zrvOv86zIjtyZXR1cm4gZS5tYXhpbXVtPT0xJiYodCs9Is6uIiksZS5tYXhpbXVtIT0xJiYodCs9Is6tz4IiKSx0fSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm4izpTOtc69IM6yz4HOrc64zrfOus6xzr0gzrHPgM6/z4TOtc67zq3Pg868zrHPhM6xIn0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIs6Rzr3Osc62zq7PhM63z4POt+KApiJ9fX0pLHtkZWZpbmU6ZS5kZWZpbmUscmVxdWlyZTplLnJlcXVpcmV9fSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2VuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9lbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDZkNzhhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9lbi5qcwpAQCAtMCwwICsxLDMgQEAKKy8qISBTZWxlY3QyIDQuMC42LXJjLjEgfCBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQgKi8KKworKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5JiZqUXVlcnkuZm4mJmpRdWVyeS5mbi5zZWxlY3QyJiZqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpdmFyIGU9alF1ZXJ5LmZuLnNlbGVjdDIuYW1kO3JldHVybiBlLmRlZmluZSgic2VsZWN0Mi9pMThuL2VuIixbXSxmdW5jdGlvbigpe3JldHVybntlcnJvckxvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iVGhlIHJlc3VsdHMgY291bGQgbm90IGJlIGxvYWRlZC4ifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtLG49IlBsZWFzZSBkZWxldGUgIit0KyIgY2hhcmFjdGVyIjtyZXR1cm4gdCE9MSYmKG4rPSJzIiksbn0saW5wdXRUb29TaG9ydDpmdW5jdGlvbihlKXt2YXIgdD1lLm1pbmltdW0tZS5pbnB1dC5sZW5ndGgsbj0iUGxlYXNlIGVudGVyICIrdCsiIG9yIG1vcmUgY2hhcmFjdGVycyI7cmV0dXJuIG59LGxvYWRpbmdNb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIkxvYWRpbmcgbW9yZSByZXN1bHRz4oCmIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKGUpe3ZhciB0PSJZb3UgY2FuIG9ubHkgc2VsZWN0ICIrZS5tYXhpbXVtKyIgaXRlbSI7cmV0dXJuIGUubWF4aW11bSE9MSYmKHQrPSJzIiksdH0sbm9SZXN1bHRzOmZ1bmN0aW9uKCl7cmV0dXJuIk5vIHJlc3VsdHMgZm91bmQifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iU2VhcmNoaW5n4oCmIn19fSkse2RlZmluZTplLmRlZmluZSxyZXF1aXJlOmUucmVxdWlyZX19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MzA5NTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2VzLmpzCkBAIC0wLDAgKzEsMyBAQAorLyohIFNlbGVjdDIgNC4wLjYtcmMuMSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZCAqLworCisoZnVuY3Rpb24oKXtpZihqUXVlcnkmJmpRdWVyeS5mbiYmalF1ZXJ5LmZuLnNlbGVjdDImJmpRdWVyeS5mbi5zZWxlY3QyLmFtZCl2YXIgZT1qUXVlcnkuZm4uc2VsZWN0Mi5hbWQ7cmV0dXJuIGUuZGVmaW5lKCJzZWxlY3QyL2kxOG4vZXMiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiJObyBzZSBwdWRpZXJvbiBjYXJnYXIgbG9zIHJlc3VsdGFkb3MifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtLG49IlBvciBmYXZvciwgZWxpbWluZSAiK3QrIiBjYXIiO3JldHVybiB0PT0xP24rPSLDoWN0ZXIiOm4rPSJhY3RlcmVzIixufSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWUubWluaW11bS1lLmlucHV0Lmxlbmd0aCxuPSJQb3IgZmF2b3IsIGludHJvZHV6Y2EgIit0KyIgY2FyIjtyZXR1cm4gdD09MT9uKz0iw6FjdGVyIjpuKz0iYWN0ZXJlcyIsbn0sbG9hZGluZ01vcmU6ZnVuY3Rpb24oKXtyZXR1cm4iQ2FyZ2FuZG8gbcOhcyByZXN1bHRhZG9z4oCmIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKGUpe3ZhciB0PSJTw7NsbyBwdWVkZSBzZWxlY2Npb25hciAiK2UubWF4aW11bSsiIGVsZW1lbnRvIjtyZXR1cm4gZS5tYXhpbXVtIT0xJiYodCs9InMiKSx0fSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm4iTm8gc2UgZW5jb250cmFyb24gcmVzdWx0YWRvcyJ9LHNlYXJjaGluZzpmdW5jdGlvbigpe3JldHVybiJCdXNjYW5kb+KApiJ9fX0pLHtkZWZpbmU6ZS5kZWZpbmUscmVxdWlyZTplLnJlcXVpcmV9fSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2V0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9ldC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTliNmM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9ldC5qcwpAQCAtMCwwICsxLDMgQEAKKy8qISBTZWxlY3QyIDQuMC42LXJjLjEgfCBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQgKi8KKworKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5JiZqUXVlcnkuZm4mJmpRdWVyeS5mbi5zZWxlY3QyJiZqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpdmFyIGU9alF1ZXJ5LmZuLnNlbGVjdDIuYW1kO3JldHVybiBlLmRlZmluZSgic2VsZWN0Mi9pMThuL2V0IixbXSxmdW5jdGlvbigpe3JldHVybntpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtLG49IlNpc2VzdGEgIit0KyIgdMOkaHQiO3JldHVybiB0IT0xJiYobis9ImUiKSxuKz0iIHbDpGhlbSIsbn0saW5wdXRUb29TaG9ydDpmdW5jdGlvbihlKXt2YXIgdD1lLm1pbmltdW0tZS5pbnB1dC5sZW5ndGgsbj0iU2lzZXN0YSAiK3QrIiB0w6RodCI7cmV0dXJuIHQhPTEmJihuKz0iZSIpLG4rPSIgcm9oa2VtIixufSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiJMYWVuIHR1bGVtdXNp4oCmIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKGUpe3ZhciB0PSJTYWFkIHZhaWQgIitlLm1heGltdW0rIiB0dWxlbXVzIjtyZXR1cm4gZS5tYXhpbXVtPT0xP3QrPSJlIjp0Kz0idCIsdCs9IiB2YWxpZGEiLHR9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiJUdWxlbXVzZWQgcHV1ZHV2YWQifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iT3RzaW7igKYifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9ldS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vZXUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQwMzA5MwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vZXUuanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi9ldSIsW10sZnVuY3Rpb24oKXtyZXR1cm57aW5wdXRUb29Mb25nOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5wdXQubGVuZ3RoLWUubWF4aW11bSxuPSJJZGF0emkgIjtyZXR1cm4gdD09MT9uKz0ia2FyYWt0ZXJlIGJhdCI6bis9dCsiIGthcmFrdGVyZSIsbis9IiBndXR4aWFnbyIsbn0saW5wdXRUb29TaG9ydDpmdW5jdGlvbihlKXt2YXIgdD1lLm1pbmltdW0tZS5pbnB1dC5sZW5ndGgsbj0iSWRhdHppICI7cmV0dXJuIHQ9PTE/bis9ImthcmFrdGVyZSBiYXQiOm4rPXQrIiBrYXJha3RlcmUiLG4rPSIgZ2VoaWFnbyIsbn0sbG9hZGluZ01vcmU6ZnVuY3Rpb24oKXtyZXR1cm4iRW1haXR6YSBnZWhpYWdvIGthcmdhdHplbuKApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXhpbXVtPT09MT8iRWxlbWVudHUgYmFrYXJyYSBoYXV0YSBkZXpha2V6dSI6ZS5tYXhpbXVtKyIgZWxlbWVudHUgaGF1dGEgZGl0emFrZXp1IHNvaWxpayJ9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiJFeiBkYSBiYXQgZGF0b3JyZW5payBhdXJraXR1In0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkJpbGF0emVu4oCmIn19fSkse2RlZmluZTplLmRlZmluZSxyZXF1aXJlOmUucmVxdWlyZX19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vZmEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2ZhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYTdkMGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2ZhLmpzCkBAIC0wLDAgKzEsMyBAQAorLyohIFNlbGVjdDIgNC4wLjYtcmMuMSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZCAqLworCisoZnVuY3Rpb24oKXtpZihqUXVlcnkmJmpRdWVyeS5mbiYmalF1ZXJ5LmZuLnNlbGVjdDImJmpRdWVyeS5mbi5zZWxlY3QyLmFtZCl2YXIgZT1qUXVlcnkuZm4uc2VsZWN0Mi5hbWQ7cmV0dXJuIGUuZGVmaW5lKCJzZWxlY3QyL2kxOG4vZmEiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiLYp9mF2qnYp9mGINio2KfYsdqv2LDYp9ix24wg2YbYqtin24zYrCDZiNis2YjYryDZhtiv2KfYsdivLiJ9LGlucHV0VG9vTG9uZzpmdW5jdGlvbihlKXt2YXIgdD1lLmlucHV0Lmxlbmd0aC1lLm1heGltdW0sbj0i2YTYt9mB2KfZiyAiK3QrIiDaqdin2LHYp9qp2KrYsSDYsdinINit2LDZgSDZhtmF2KfbjNuM2K8iO3JldHVybiBufSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWUubWluaW11bS1lLmlucHV0Lmxlbmd0aCxuPSLZhNi32YHYp9mLINiq2LnYr9in2K8gIit0KyIg2qnYp9ix2Kfaqdiq2LEg24zYpyDYqNuM2LTYqtixINmI2KfYsdivINmG2YXYp9uM24zYryI7cmV0dXJuIG59LGxvYWRpbmdNb3JlOmZ1bmN0aW9uKCl7cmV0dXJuItiv2LEg2K3Yp9mEINio2KfYsdqv2LDYp9ix24wg2YbYqtin24zYrCDYqNuM2LTYqtixLi4uIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKGUpe3ZhciB0PSLYtNmF2Kcg2KrZhtmH2Kcg2YXbjOKAjNiq2YjYp9mG24zYryAiK2UubWF4aW11bSsiINii24zYqtmFINix2Kcg2KfZhtiq2K7Yp9ioINmG2YXYp9uM24zYryI7cmV0dXJuIHR9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiLZh9uM2oYg2YbYqtuM2KzZh+KAjNin24wg24zYp9mB2Kog2YbYtNivIn0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuItiv2LEg2K3Yp9mEINis2LPYqtis2YguLi4ifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9maS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vZmkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI2ZTRkYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vZmkuanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi9maSIsW10sZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3JMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIlR1bG9rc2lhIGVpIHNhYXR1IGxhZGF0dHVhLiJ9LGlucHV0VG9vTG9uZzpmdW5jdGlvbihlKXt2YXIgdD1lLmlucHV0Lmxlbmd0aC1lLm1heGltdW07cmV0dXJuIk9sZSBoeXbDpCBqYSBhbm5hICIrdCsiIG1lcmtracOkIHbDpGhlbW3DpG4ifSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWUubWluaW11bS1lLmlucHV0Lmxlbmd0aDtyZXR1cm4iT2xlIGh5dsOkIGphIGFubmEgIit0KyIgbWVya2tpw6QgbGlzw6TDpCJ9LGxvYWRpbmdNb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIkxhZGF0YWFuIGxpc8Okw6QgdHVsb2tzaWHigKYifSxtYXhpbXVtU2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIlZvaXQgdmFsaXRhIGFpbm9hc3RhYW4gIitlLm1heGltdW0rIiBrcGwifSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm4iRWkgdHVsb2tzaWEifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iSGFldGFhbuKApiJ9fX0pLHtkZWZpbmU6ZS5kZWZpbmUscmVxdWlyZTplLnJlcXVpcmV9fSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9mci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjMxODNjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9mci5qcwpAQCAtMCwwICsxLDMgQEAKKy8qISBTZWxlY3QyIDQuMC42LXJjLjEgfCBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQgKi8KKworKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5JiZqUXVlcnkuZm4mJmpRdWVyeS5mbi5zZWxlY3QyJiZqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpdmFyIGU9alF1ZXJ5LmZuLnNlbGVjdDIuYW1kO3JldHVybiBlLmRlZmluZSgic2VsZWN0Mi9pMThuL2ZyIixbXSxmdW5jdGlvbigpe3JldHVybntlcnJvckxvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iTGVzIHLDqXN1bHRhdHMgbmUgcGV1dmVudCBwYXMgw6p0cmUgY2hhcmfDqXMuIn0saW5wdXRUb29Mb25nOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5wdXQubGVuZ3RoLWUubWF4aW11bTtyZXR1cm4iU3VwcHJpbWV6ICIrdCsiIGNhcmFjdMOocmUiKyh0PjE/InMiOiIiKX0saW5wdXRUb29TaG9ydDpmdW5jdGlvbihlKXt2YXIgdD1lLm1pbmltdW0tZS5pbnB1dC5sZW5ndGg7cmV0dXJuIlNhaXNpc3NleiBhdSBtb2lucyAiK3QrIiBjYXJhY3TDqHJlIisodD4xPyJzIjoiIil9LGxvYWRpbmdNb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIkNoYXJnZW1lbnQgZGUgcsOpc3VsdGF0cyBzdXBwbMOpbWVudGFpcmVz4oCmIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKGUpe3JldHVybiJWb3VzIHBvdXZleiBzZXVsZW1lbnQgc8OpbGVjdGlvbm5lciAiK2UubWF4aW11bSsiIMOpbMOpbWVudCIrKGUubWF4aW11bT4xPyJzIjoiIil9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiJBdWN1biByw6lzdWx0YXQgdHJvdXbDqSJ9LHNlYXJjaGluZzpmdW5jdGlvbigpe3JldHVybiJSZWNoZXJjaGUgZW4gY291cnPigKYifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9nbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vZ2wuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwMWE2MgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vZ2wuanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi9nbCIsW10sZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3JMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIk5vbiBmb2kgcG9zw61iZWwgY2FyZ2FyIG9zIHJlc3VsdGFkb3MuIn0saW5wdXRUb29Mb25nOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5wdXQubGVuZ3RoLWUubWF4aW11bTtyZXR1cm4gdD09PTE/IkVsaW1pbmUgdW4gY2Fyw6FjdGVyIjoiRWxpbWluZSAiK3QrIiBjYXJhY3RlcmVzIn0saW5wdXRUb29TaG9ydDpmdW5jdGlvbihlKXt2YXIgdD1lLm1pbmltdW0tZS5pbnB1dC5sZW5ndGg7cmV0dXJuIHQ9PT0xPyJFbmdhZGEgdW4gY2Fyw6FjdGVyIjoiRW5nYWRhICIrdCsiIGNhcmFjdGVyZXMifSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiJDYXJnYW5kbyBtw6FpcyByZXN1bHRhZG9z4oCmIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLm1heGltdW09PT0xPyJTw7MgcG9kZSBzZWxlY2Npb25hciB1biBlbGVtZW50byI6IlPDsyBwb2RlIHNlbGVjY2lvbmFyICIrZS5tYXhpbXVtKyIgZWxlbWVudG9zIn0sbm9SZXN1bHRzOmZ1bmN0aW9uKCl7cmV0dXJuIk5vbiBzZSBhdG9wYXJvbiByZXN1bHRhZG9zIn0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkJ1c2NhbmRv4oCmIn19fSkse2RlZmluZTplLmRlZmluZSxyZXF1aXJlOmUucmVxdWlyZX19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vaGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZDdlOGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2hlLmpzCkBAIC0wLDAgKzEsMyBAQAorLyohIFNlbGVjdDIgNC4wLjYtcmMuMSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZCAqLworCisoZnVuY3Rpb24oKXtpZihqUXVlcnkmJmpRdWVyeS5mbiYmalF1ZXJ5LmZuLnNlbGVjdDImJmpRdWVyeS5mbi5zZWxlY3QyLmFtZCl2YXIgZT1qUXVlcnkuZm4uc2VsZWN0Mi5hbWQ7cmV0dXJuIGUuZGVmaW5lKCJzZWxlY3QyL2kxOG4vaGUiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiLXqdeS15nXkNeUINeR15jXoteZ16DXqiDXlNeq15XXpteQ15XXqiJ9LGlucHV0VG9vTG9uZzpmdW5jdGlvbihlKXt2YXIgdD1lLmlucHV0Lmxlbmd0aC1lLm1heGltdW0sbj0i16DXkCDXnNee15fXldenICI7cmV0dXJuIHQ9PT0xP24rPSLXqteVINeQ15fXkyI6bis9dCsiINeq15XXldeZ150iLG59LGlucHV0VG9vU2hvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5taW5pbXVtLWUuaW5wdXQubGVuZ3RoLG49Iteg15Ag15zXlNeb16DXmdehICI7cmV0dXJuIHQ9PT0xP24rPSLXqteVINeQ15fXkyI6bis9dCsiINeq15XXldeZ150iLG4rPSIg15DXlSDXmdeV16rXqCIsbn0sbG9hZGluZ01vcmU6ZnVuY3Rpb24oKXtyZXR1cm4i15jXldei158g16rXldem15DXldeqINeg15XXodek15XXquKApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD0i15HXkNek16nXqNeV16rXmiDXnNeR15fXldeoINei15MgIjtyZXR1cm4gZS5tYXhpbXVtPT09MT90Kz0i16TXqNeZ15gg15DXl9eTIjp0Kz1lLm1heGltdW0rIiDXpNeo15nXmNeZ150iLHR9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiLXnNeQINeg157XpteQ15Ug16rXldem15DXldeqIn0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuItee15fXpNep4oCmIn19fSkse2RlZmluZTplLmRlZmluZSxyZXF1aXJlOmUucmVxdWlyZX19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vaGkuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2hpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYzk0YzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2hpLmpzCkBAIC0wLDAgKzEsMyBAQAorLyohIFNlbGVjdDIgNC4wLjYtcmMuMSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZCAqLworCisoZnVuY3Rpb24oKXtpZihqUXVlcnkmJmpRdWVyeS5mbiYmalF1ZXJ5LmZuLnNlbGVjdDImJmpRdWVyeS5mbi5zZWxlY3QyLmFtZCl2YXIgZT1qUXVlcnkuZm4uc2VsZWN0Mi5hbWQ7cmV0dXJuIGUuZGVmaW5lKCJzZWxlY3QyL2kxOG4vaGkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiLgpKrgpLDgpL/gpKPgpL7gpK7gpYvgpIIg4KSV4KWLIOCksuCli+CkoSDgpKjgpLngpYDgpIIg4KSV4KS/4KSv4KS+IOCknOCkviDgpLjgpJXgpL7gpaQifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtLG49dCsiIOCkheCkleCljeCkt+CksCDgpJXgpYsg4KS54KSf4KS+IOCkpuClh+CkgiI7cmV0dXJuIHQ+MSYmKG49dCsiIOCkheCkleCljeCkt+CksOCli+CkgiDgpJXgpYsg4KS54KSf4KS+IOCkpuClh+CkgiAiKSxufSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWUubWluaW11bS1lLmlucHV0Lmxlbmd0aCxuPSLgpJXgpYPgpKrgpK/gpL4gIit0KyIg4KSv4KS+IOCkheCkp+Ckv+CklSDgpIXgpJXgpY3gpLfgpLAg4KSm4KSw4KWN4KScIOCkleCksOClh+CkgiI7cmV0dXJuIG59LGxvYWRpbmdNb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIuCkheCkp+Ckv+CklSDgpKrgpLDgpL/gpKPgpL7gpK4g4KSy4KWL4KShIOCkueCliyDgpLDgpLngpYcg4KS54KWILi4uIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKGUpe3ZhciB0PSLgpIbgpKog4KSV4KWH4KS14KSyICIrZS5tYXhpbXVtKyIg4KSG4KSH4KSf4KSuIOCkleCkviDgpJrgpK/gpKgg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIiO3JldHVybiB0fSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm4i4KSV4KWL4KSIIOCkquCksOCkv+Cko+CkvuCkriDgpKjgpLngpYDgpIIg4KSu4KS/4KSy4KS+In0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIuCkluCli+CknCDgpLDgpLngpL4g4KS54KWILi4uIn19fSkse2RlZmluZTplLmRlZmluZSxyZXF1aXJlOmUucmVxdWlyZX19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vaHIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2hyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MzdhOTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2hyLmpzCkBAIC0wLDAgKzEsMyBAQAorLyohIFNlbGVjdDIgNC4wLjYtcmMuMSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZCAqLworCisoZnVuY3Rpb24oKXtpZihqUXVlcnkmJmpRdWVyeS5mbiYmalF1ZXJ5LmZuLnNlbGVjdDImJmpRdWVyeS5mbi5zZWxlY3QyLmFtZCl2YXIgZT1qUXVlcnkuZm4uc2VsZWN0Mi5hbWQ7cmV0dXJuIGUuZGVmaW5lKCJzZWxlY3QyL2kxOG4vaHIiLFtdLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD0iICIrZSsiIHpuYWsiO3JldHVybiBlJTEwPDUmJmUlMTA+MCYmKGUlMTAwPDV8fGUlMTAwPjE5KT9lJTEwPjEmJih0Kz0iYSIpOnQrPSJvdmEiLHR9cmV0dXJue2Vycm9yTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiJQcmV1emltYW5qZSBuaWplIHVzcGplbG8uIn0saW5wdXRUb29Mb25nOmZ1bmN0aW9uKHQpe3ZhciBuPXQuaW5wdXQubGVuZ3RoLXQubWF4aW11bTtyZXR1cm4iVW5lc2l0ZSAiK2Uobil9LGlucHV0VG9vU2hvcnQ6ZnVuY3Rpb24odCl7dmFyIG49dC5taW5pbXVtLXQuaW5wdXQubGVuZ3RoO3JldHVybiJVbmVzaXRlIGpvxaEgIitlKG4pfSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiJVxI1pdGF2YW5qZSByZXp1bHRhdGHigKYifSxtYXhpbXVtU2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIk1ha3NpbWFsYW4gYnJvaiBvZGFicmFuaWggc3RhdmtpIGplICIrZS5tYXhpbXVtfSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm4iTmVtYSByZXp1bHRhdGEifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iUHJldHJhZ2HigKYifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9oc2IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2hzYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzBlMThjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9oc2IuanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi9oc2IiLFtdLGZ1bmN0aW9uKCl7dmFyIGU9WyJ6bmFtamXFoWtvIiwiem5hbWplxaFjZSIsInpuYW1qZcWha2EiLCJ6bmFtamXFoWtvdyJdLHQ9WyJ6YXBpc2siLCJ6YXBpc2thaiIsInphcGlza2kiLCJ6YXBpc2tvdyJdLG49ZnVuY3Rpb24odCxuKXtpZih0PT09MSlyZXR1cm4gblswXTtpZih0PT09MilyZXR1cm4gblsxXTtpZih0PjImJnQ8PTQpcmV0dXJuIG5bMl07aWYodD49NSlyZXR1cm4gblszXX07cmV0dXJue2Vycm9yTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiJXdXNsxJtka2kgbmplZGFjaHUgc28gemHEjWl0YcSHLiJ9LGlucHV0VG9vTG9uZzpmdW5jdGlvbih0KXt2YXIgcj10LmlucHV0Lmxlbmd0aC10Lm1heGltdW07cmV0dXJuIlByb8WhdSB6aGHFoWVqICIrcisiICIrbihyLGUpfSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKHQpe3ZhciByPXQubWluaW11bS10LmlucHV0Lmxlbmd0aDtyZXR1cm4iUHJvxaF1IHphcG9kYWogem5ham1qZcWExaFhICIrcisiICIrbihyLGUpfSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiJEYWzFoWUgd3VzbMSbZGtpIHNvIHphxI1pdGFqYeKApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4iTcOzxb5lxaEgamVub8W+ICIrZS5tYXhpbXVtKyIgIituKGUubWF4aW11bSx0KSsid3VicmHEhyJ9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiLFvWFuZSB3dXNsxJtka2kgbmFtYWthbmUifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iUHl0YSBzb+KApiJ9fX0pLHtkZWZpbmU6ZS5kZWZpbmUscmVxdWlyZTplLnJlcXVpcmV9fSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2h1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9odS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjk2YzI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9odS5qcwpAQCAtMCwwICsxLDMgQEAKKy8qISBTZWxlY3QyIDQuMC42LXJjLjEgfCBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQgKi8KKworKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5JiZqUXVlcnkuZm4mJmpRdWVyeS5mbi5zZWxlY3QyJiZqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpdmFyIGU9alF1ZXJ5LmZuLnNlbGVjdDIuYW1kO3JldHVybiBlLmRlZmluZSgic2VsZWN0Mi9pMThuL2h1IixbXSxmdW5jdGlvbigpe3JldHVybntlcnJvckxvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iQXogZXJlZG3DqW55ZWsgYmV0w7ZsdMOpc2UgbmVtIHNpa2Vyw7xsdC4ifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtO3JldHVybiJUw7psIGhvc3N6w7ouICIrdCsiIGthcmFrdGVycmVsIHTDtmJiLCBtaW50IGtlbGxlbmUuIn0saW5wdXRUb29TaG9ydDpmdW5jdGlvbihlKXt2YXIgdD1lLm1pbmltdW0tZS5pbnB1dC5sZW5ndGg7cmV0dXJuIlTDumwgcsO2dmlkLiBNw6lnICIrdCsiIGthcmFrdGVyIGhpw6FueXppay4ifSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiJUw7ZsdMOpc+KApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4iQ3NhayAiK2UubWF4aW11bSsiIGVsZW1ldCBsZWhldCBraXbDoWxhc3p0YW5pLiJ9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiJOaW5jcyB0YWzDoWxhdC4ifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iS2VyZXPDqXPigKYifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9oeS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vaHkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdkYjgzZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vaHkuanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi9oeSIsW10sZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3JMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuItSx1oDVpNW11bjWgtW21oTVttWl1oDVqCDVsNW21aHWgNWh1b7VuNaAINW51acg1aLVpdW81bbVpdWs1okifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtLG49ItS91bbVpNaA1bjWgtW0INWl1bbWhCDVsNWl1bzVodaB1bbVpdWsICIrdCsiINW21bfVodW2IjtyZXR1cm4gbn0saW5wdXRUb29TaG9ydDpmdW5jdGlvbihlKXt2YXIgdD1lLm1pbmltdW0tZS5pbnB1dC5sZW5ndGgsbj0i1L3VttWk1oDVuNaC1bQg1aXVttaEINW01bjWgtW/1oTVodWj1oDVpdWsICIrdCsiINWv1aHVtCDVodW+1aXVrCDVttW31aHVttW21aXWgCI7cmV0dXJuIG59LGxvYWRpbmdNb3JlOmZ1bmN0aW9uKCl7cmV0dXJuItSy1aXVvNW21b7VuNaC1bQg1aXVtiDVttW41oAg1aHWgNWk1bXVuNaC1bbWhNW21aXWgOKApOKApOKApCJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD0i1LTVuNaC1oQg1a/VodaA1bjVsiDVpdaEINWo1bbVv9aA1aXVrCDVodW81aHVvtWl1azVodWj1bjWgtW11bbVqCAiK2UubWF4aW11bSsiINWv1aXVvyI7cmV0dXJuIHR9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiLUsdaA1aTVtdW41oLVttaE1bbVpdaAINW51aXVtiDVo9W/1bbVvtWl1awifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4i1YjWgNW41bbVuNaC1bTigKTigKTigKQifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9pZC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vaWQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ3YmEyYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vaWQuanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi9pZCIsW10sZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3JMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkRhdGEgdGlkYWsgYm9sZWggZGlhbWJpbC4ifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtO3JldHVybiJIYXB1c2thbiAiK3QrIiBodXJ1ZiJ9LGlucHV0VG9vU2hvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5taW5pbXVtLWUuaW5wdXQubGVuZ3RoO3JldHVybiJNYXN1a2thbiAiK3QrIiBodXJ1ZiBsYWdpIn0sbG9hZGluZ01vcmU6ZnVuY3Rpb24oKXtyZXR1cm4iTWVuZ2FtYmlsIGRhdGHigKYifSxtYXhpbXVtU2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIkFuZGEgaGFueWEgZGFwYXQgbWVtaWxpaCAiK2UubWF4aW11bSsiIHBpbGloYW4ifSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm4iVGlkYWsgYWRhIGRhdGEgeWFuZyBzZXN1YWkifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iTWVuY2FyaeKApiJ9fX0pLHtkZWZpbmU6ZS5kZWZpbmUscmVxdWlyZTplLnJlcXVpcmV9fSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2lzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9pcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWUxZjM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9pcy5qcwpAQCAtMCwwICsxLDMgQEAKKy8qISBTZWxlY3QyIDQuMC42LXJjLjEgfCBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQgKi8KKworKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5JiZqUXVlcnkuZm4mJmpRdWVyeS5mbi5zZWxlY3QyJiZqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpdmFyIGU9alF1ZXJ5LmZuLnNlbGVjdDIuYW1kO3JldHVybiBlLmRlZmluZSgic2VsZWN0Mi9pMThuL2lzIixbXSxmdW5jdGlvbigpe3JldHVybntpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtLG49IlZpbnNhbWxlZ2FzdCBzdHl0dGnDsCB0ZXh0YSB1bSAiK3QrIiBzdGFmIjtyZXR1cm4gdDw9MT9uOm4rImkifSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWUubWluaW11bS1lLmlucHV0Lmxlbmd0aCxuPSJWaW5zYW1sZWdhc3Qgc2tyaWZpw7AgIit0KyIgc3RhZiI7cmV0dXJuIHQ+MSYmKG4rPSJpIiksbis9IiDDrSB2acOwYsOzdCIsbn0sbG9hZGluZ01vcmU6ZnVuY3Rpb24oKXtyZXR1cm4iU8Oma2kgZmxlaXJpIG5pw7B1cnN0w7bDsHVy4oCmIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKGUpe3JldHVybiLDnsO6IGdldHVyIGHDsGVpbnMgdmFsacOwICIrZS5tYXhpbXVtKyIgYXRyacOwaSJ9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiJFa2tlcnQgZmFubnN0In0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkxlaXRh4oCmIn19fSkse2RlZmluZTplLmRlZmluZSxyZXF1aXJlOmUucmVxdWlyZX19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vaXQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2l0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NmJmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2l0LmpzCkBAIC0wLDAgKzEsMyBAQAorLyohIFNlbGVjdDIgNC4wLjYtcmMuMSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZCAqLworCisoZnVuY3Rpb24oKXtpZihqUXVlcnkmJmpRdWVyeS5mbiYmalF1ZXJ5LmZuLnNlbGVjdDImJmpRdWVyeS5mbi5zZWxlY3QyLmFtZCl2YXIgZT1qUXVlcnkuZm4uc2VsZWN0Mi5hbWQ7cmV0dXJuIGUuZGVmaW5lKCJzZWxlY3QyL2kxOG4vaXQiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiJJIHJpc3VsdGF0aSBub24gcG9zc29ubyBlc3NlcmUgY2FyaWNhdGkuIn0saW5wdXRUb29Mb25nOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5wdXQubGVuZ3RoLWUubWF4aW11bSxuPSJQZXIgZmF2b3JlIGNhbmNlbGxhICIrdCsiIGNhcmF0dGVyIjtyZXR1cm4gdCE9PTE/bis9ImkiOm4rPSJlIixufSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWUubWluaW11bS1lLmlucHV0Lmxlbmd0aCxuPSJQZXIgZmF2b3JlIGluc2VyaXNjaSAiK3QrIiBvIHBpw7kgY2FyYXR0ZXJpIjtyZXR1cm4gbn0sbG9hZGluZ01vcmU6ZnVuY3Rpb24oKXtyZXR1cm4iQ2FyaWNhbmRvIHBpw7kgcmlzdWx0YXRp4oCmIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKGUpe3ZhciB0PSJQdW9pIHNlbGV6aW9uYXJlIHNvbG8gIitlLm1heGltdW0rIiBlbGVtZW50IjtyZXR1cm4gZS5tYXhpbXVtIT09MT90Kz0iaSI6dCs9Im8iLHR9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiJOZXNzdW4gcmlzdWx0YXRvIHRyb3ZhdG8ifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iU3RvIGNlcmNhbmRv4oCmIn19fSkse2RlZmluZTplLmRlZmluZSxyZXF1aXJlOmUucmVxdWlyZX19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYThlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2phLmpzCkBAIC0wLDAgKzEsMyBAQAorLyohIFNlbGVjdDIgNC4wLjYtcmMuMSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZCAqLworCisoZnVuY3Rpb24oKXtpZihqUXVlcnkmJmpRdWVyeS5mbiYmalF1ZXJ5LmZuLnNlbGVjdDImJmpRdWVyeS5mbi5zZWxlY3QyLmFtZCl2YXIgZT1qUXVlcnkuZm4uc2VsZWN0Mi5hbWQ7cmV0dXJuIGUuZGVmaW5lKCJzZWxlY3QyL2kxOG4vamEiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiLntZDmnpzjgYzoqq3jgb/ovrzjgb7jgozjgb7jgZvjgpPjgafjgZfjgZ8ifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtLG49dCsiIOaWh+Wtl+OCkuWJiumZpOOBl+OBpuOBj+OBoOOBleOBhCI7cmV0dXJuIG59LGlucHV0VG9vU2hvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5taW5pbXVtLWUuaW5wdXQubGVuZ3RoLG49IuWwkeOBquOBj+OBqOOCgiAiK3QrIiDmloflrZfjgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYQiO3JldHVybiBufSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiLoqq3jgb/ovrzjgb/kuK3igKYifSxtYXhpbXVtU2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXhpbXVtKyIg5Lu244GX44GL6YG45oqe44Gn44GN44G+44Gb44KTIjtyZXR1cm4gdH0sbm9SZXN1bHRzOmZ1bmN0aW9uKCl7cmV0dXJuIuWvvuixoeOBjOimi+OBpOOBi+OCiuOBvuOBm+OCkyJ9LHNlYXJjaGluZzpmdW5jdGlvbigpe3JldHVybiLmpJzntKLjgZfjgabjgYTjgb7jgZnigKYifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9rbS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4va20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUyYzRhZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4va20uanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi9rbSIsW10sZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3JMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIuGemOGet+Gek+GeouGetuGeheGekeGetuGeieGemeGegOGekeGet+Gek+GfkuGek+Gek+GfkOGemSJ9LGlucHV0VG9vTG9uZzpmdW5jdGlvbihlKXt2YXIgdD1lLmlucHV0Lmxlbmd0aC1lLm1heGltdW0sbj0i4Z6f4Z684Z6Y4Z6b4Z674Z6U4Z6F4Z+B4Z6JICAiK3QrIiDhnqLhnoDhn5Lhnp/hnpoiO3JldHVybiBufSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWUubWluaW11bS1lLmlucHV0Lmxlbmd0aCxuPSLhnp/hnrzhnpjhnpThnonhn5LhnoXhnrzhnpsiK3QrIiDhnqLhnoDhn5Lhnp/hnpog4Z6a4Z66IOGeheGfkuGemuGevuGek+Geh+GetuGehOGek+GfgeGfhyI7cmV0dXJuIG59LGxvYWRpbmdNb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIuGegOGfhuGeluGeu+GehOGekeGetuGeieGemeGegOGekeGet+Gek+GfkuGek+Gek+GfkOGemeGelOGek+GfkuGekOGfguGemC4uLiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD0i4Z6i4Z+S4Z6T4Z6A4Z6i4Z624Z6F4Z6H4Z+S4Z6a4Z6+4Z6f4Z6a4Z6+4Z6f4Z6U4Z624Z6T4Z6P4Z+CICIrZS5tYXhpbXVtKyIg4Z6H4Z6Y4Z+S4Z6a4Z6+4Z6f4Z6U4Z+J4Z674Z6O4Z+S4Z6O4Z+E4Z+HIjtyZXR1cm4gdH0sbm9SZXN1bHRzOmZ1bmN0aW9uKCl7cmV0dXJuIuGemOGet+Gek+GemOGetuGek+Gem+GekeGfkuGekuGeleGemyJ9LHNlYXJjaGluZzpmdW5jdGlvbigpe3JldHVybiLhnoDhn4bhnpbhnrvhnoThnp/hn5Lhnpzhn4LhnoThnprhnoAuLi4ifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9rby5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4va28uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FlZTAzZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4va28uanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi9rbyIsW10sZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3JMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIuqysOqzvOulvCDrtojrn6zsmKwg7IiYIOyXhuyKteuLiOuLpC4ifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtLG49IuuEiOustCDquYHri4jri6QuICIrdCsiIOq4gOyekCDsp4Dsm4zso7zshLjsmpQuIjtyZXR1cm4gbn0saW5wdXRUb29TaG9ydDpmdW5jdGlvbihlKXt2YXIgdD1lLm1pbmltdW0tZS5pbnB1dC5sZW5ndGgsbj0i64SI66y0IOynp+yKteuLiOuLpC4gIit0KyIg6riA7J6QIOuNlCDsnoXroKXtlbTso7zshLjsmpQuIjtyZXR1cm4gbn0sbG9hZGluZ01vcmU6ZnVuY3Rpb24oKXtyZXR1cm4i67aI65+s7Jik64qUIOykkeKApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD0i7LWc64yAICIrZS5tYXhpbXVtKyLqsJzquYzsp4Drp4wg7ISg7YOdIOqwgOuKpe2VqeuLiOuLpC4iO3JldHVybiB0fSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm4i6rKw6rO86rCAIOyXhuyKteuLiOuLpC4ifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4i6rKA7IOJIOykkeKApiJ9fX0pLHtkZWZpbmU6ZS5kZWZpbmUscmVxdWlyZTplLnJlcXVpcmV9fSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9sdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2Y5YWYyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9sdC5qcwpAQCAtMCwwICsxLDMgQEAKKy8qISBTZWxlY3QyIDQuMC42LXJjLjEgfCBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQgKi8KKworKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5JiZqUXVlcnkuZm4mJmpRdWVyeS5mbi5zZWxlY3QyJiZqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpdmFyIGU9alF1ZXJ5LmZuLnNlbGVjdDIuYW1kO3JldHVybiBlLmRlZmluZSgic2VsZWN0Mi9pMThuL2x0IixbXSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scil7cmV0dXJuIGUlMTA9PT0xJiYoZSUxMDA8MTF8fGUlMTAwPjE5KT90OmUlMTA+PTImJmUlMTA8PTkmJihlJTEwMDwxMXx8ZSUxMDA+MTkpP246cn1yZXR1cm57aW5wdXRUb29Mb25nOmZ1bmN0aW9uKHQpe3ZhciBuPXQuaW5wdXQubGVuZ3RoLXQubWF4aW11bSxyPSJQYcWhYWxpbmtpdGUgIituKyIgc2ltYm9sIjtyZXR1cm4gcis9ZShuLCLEryIsIml1cyIsImnFsyIpLHJ9LGlucHV0VG9vU2hvcnQ6ZnVuY3Rpb24odCl7dmFyIG49dC5taW5pbXVtLXQuaW5wdXQubGVuZ3RoLHI9IsSucmHFoXlraXRlIGRhciAiK24rIiBzaW1ib2wiO3JldHVybiByKz1lKG4sIsSvIiwiaXVzIiwiacWzIikscn0sbG9hZGluZ01vcmU6ZnVuY3Rpb24oKXtyZXR1cm4iS3JhdW5hbWEgZGF1Z2lhdSByZXp1bHRhdMWz4oCmIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKHQpe3ZhciBuPSJKxatzIGdhbGl0ZSBwYXNpcmlua3RpIHRpayAiK3QubWF4aW11bSsiIGVsZW1lbnQiO3JldHVybiBuKz1lKHQubWF4aW11bSwixIUiLCJ1cyIsIsWzIiksbn0sbm9SZXN1bHRzOmZ1bmN0aW9uKCl7cmV0dXJuIkF0aXRpa21lbsWzIG5lcmFzdGEifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iSWXFoWtvbWHigKYifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9sdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vbHYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyYjFiNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vbHYuanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi9sdiIsW10sZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3JldHVybiBlPT09MTE/dDplJTEwPT09MT9uOnJ9cmV0dXJue2lucHV0VG9vTG9uZzpmdW5jdGlvbih0KXt2YXIgbj10LmlucHV0Lmxlbmd0aC10Lm1heGltdW0scj0iTMWrZHp1IGlldmFkaWV0IHBhciAgIituO3JldHVybiByKz0iIHNpbWJvbCIrZShuLCJpZW0iLCJ1IiwiaWVtIikscisiIG1hesSBayJ9LGlucHV0VG9vU2hvcnQ6ZnVuY3Rpb24odCl7dmFyIG49dC5taW5pbXVtLXQuaW5wdXQubGVuZ3RoLHI9IkzFq2R6dSBpZXZhZGlldCB2xJNsICIrbjtyZXR1cm4gcis9IiBzaW1ib2wiK2UobiwidXMiLCJ1IiwidXMiKSxyfSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiJEYXR1IGllbMSBZGXigKYifSxtYXhpbXVtU2VsZWN0ZWQ6ZnVuY3Rpb24odCl7dmFyIG49IkrFq3MgdmFyYXQgaXp2xJNsxJN0aWVzIG5lIHZhaXLEgWsga8SBICIrdC5tYXhpbXVtO3JldHVybiBuKz0iIGVsZW1lbnQiK2UodC5tYXhpbXVtLCJ1cyIsInUiLCJ1cyIpLG59LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiJTYWtyaXTEq2J1IG5hdiJ9LHNlYXJjaGluZzpmdW5jdGlvbigpe3JldHVybiJNZWtsxJPFoWFuYeKApiJ9fX0pLHtkZWZpbmU6ZS5kZWZpbmUscmVxdWlyZTplLnJlcXVpcmV9fSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL21rLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9tay5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjRjMzM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9tay5qcwpAQCAtMCwwICsxLDMgQEAKKy8qISBTZWxlY3QyIDQuMC42LXJjLjEgfCBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQgKi8KKworKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5JiZqUXVlcnkuZm4mJmpRdWVyeS5mbi5zZWxlY3QyJiZqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpdmFyIGU9alF1ZXJ5LmZuLnNlbGVjdDIuYW1kO3JldHVybiBlLmRlZmluZSgic2VsZWN0Mi9pMThuL21rIixbXSxmdW5jdGlvbigpe3JldHVybntpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtLG49ItCS0LUg0LzQvtC70LjQvNC1INCy0L3QtdGB0LXRgtC1ICIrZS5tYXhpbXVtKyIg0L/QvtC80LDQu9C60YMg0LrQsNGA0LDQutGC0LXRgCI7cmV0dXJuIGUubWF4aW11bSE9PTEmJihuKz0i0LgiKSxufSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWUubWluaW11bS1lLmlucHV0Lmxlbmd0aCxuPSLQktC1INC80L7Qu9C40LzQtSDQstC90LXRgdC10YLQtSDRg9GI0YLQtSAiK2UubWF4aW11bSsiINC60LDRgNCw0LrRgtC10YAiO3JldHVybiBlLm1heGltdW0hPT0xJiYobis9ItC4Iiksbn0sbG9hZGluZ01vcmU6ZnVuY3Rpb24oKXtyZXR1cm4i0JLRh9C40YLRg9Cy0LDRmtC1INGA0LXQt9GD0LvRgtCw0YLQuOKApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD0i0JzQvtC20LXRgtC1INC00LAg0LjQt9Cx0LXRgNC10YLQtSDRgdCw0LzQviAiK2UubWF4aW11bSsiINGB0YLQsNCy0LoiO3JldHVybiBlLm1heGltdW09PT0xP3QrPSLQsCI6dCs9ItC4Iix0fSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm4i0J3QtdC80LAg0L/RgNC+0L3QsNGY0LTQtdC90L4g0YHQvtCy0L/QsNGT0LDRmtCwIn0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuItCf0YDQtdCx0LDRgNGD0LLQsNGa0LXigKYifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9tcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vbXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk5MDk5NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vbXMuanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi9tcyIsW10sZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3JMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIktlcHV0dXNhbiB0aWRhayBiZXJqYXlhIGRpbXVhdGthbi4ifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtO3JldHVybiJTaWxhIGhhcHVza2FuICIrdCsiIGFrc2FyYSJ9LGlucHV0VG9vU2hvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5taW5pbXVtLWUuaW5wdXQubGVuZ3RoO3JldHVybiJTaWxhIG1hc3Vra2FuICIrdCsiIGF0YXUgbGViaWggYWtzYXJhIn0sbG9hZGluZ01vcmU6ZnVuY3Rpb24oKXtyZXR1cm4iU2VkYW5nIG1lbXVhdGthbiBrZXB1dHVzYW7igKYifSxtYXhpbXVtU2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIkFuZGEgaGFueWEgYm9sZWggbWVtaWxpaCAiK2UubWF4aW11bSsiIHBpbGloYW4ifSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm4iVGlhZGEgcGFkYW5hbiB5YW5nIGRpdGVtdWkifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iTWVuY2FyaeKApiJ9fX0pLHtkZWZpbmU6ZS5kZWZpbmUscmVxdWlyZTplLnJlcXVpcmV9fSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9uYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjU1M2NhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9uYi5qcwpAQCAtMCwwICsxLDMgQEAKKy8qISBTZWxlY3QyIDQuMC42LXJjLjEgfCBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQgKi8KKworKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5JiZqUXVlcnkuZm4mJmpRdWVyeS5mbi5zZWxlY3QyJiZqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpdmFyIGU9alF1ZXJ5LmZuLnNlbGVjdDIuYW1kO3JldHVybiBlLmRlZmluZSgic2VsZWN0Mi9pMThuL25iIixbXSxmdW5jdGlvbigpe3JldHVybntlcnJvckxvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iS3VubmUgaWtrZSBoZW50ZSByZXN1bHRhdGVyLiJ9LGlucHV0VG9vTG9uZzpmdW5jdGlvbihlKXt2YXIgdD1lLmlucHV0Lmxlbmd0aC1lLm1heGltdW07cmV0dXJuIlZlbm5saWdzdCBmamVybiAiK3QrIiB0ZWduIn0saW5wdXRUb29TaG9ydDpmdW5jdGlvbihlKXt2YXIgdD1lLm1pbmltdW0tZS5pbnB1dC5sZW5ndGg7cmV0dXJuIlZlbm5saWdzdCBza3JpdiBpbm4gIit0KyIgdGVnbiB0aWwifSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiJMYXN0ZXIgZmxlcmUgcmVzdWx0YXRlcuKApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4iRHUga2FuIHZlbGdlIG1ha3MgIitlLm1heGltdW0rIiBlbGVtZW50ZXIifSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm4iSW5nZW4gdHJlZmYifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iU8O4a2Vy4oCmIn19fSkse2RlZmluZTplLmRlZmluZSxyZXF1aXJlOmUucmVxdWlyZX19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0M2MzNmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL25sLmpzCkBAIC0wLDAgKzEsMyBAQAorLyohIFNlbGVjdDIgNC4wLjYtcmMuMSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZCAqLworCisoZnVuY3Rpb24oKXtpZihqUXVlcnkmJmpRdWVyeS5mbiYmalF1ZXJ5LmZuLnNlbGVjdDImJmpRdWVyeS5mbi5zZWxlY3QyLmFtZCl2YXIgZT1qUXVlcnkuZm4uc2VsZWN0Mi5hbWQ7cmV0dXJuIGUuZGVmaW5lKCJzZWxlY3QyL2kxOG4vbmwiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiJEZSByZXN1bHRhdGVuIGtvbmRlbiBuaWV0IHdvcmRlbiBnZWxhZGVuLiJ9LGlucHV0VG9vTG9uZzpmdW5jdGlvbihlKXt2YXIgdD1lLmlucHV0Lmxlbmd0aC1lLm1heGltdW0sbj0iR2VsaWV2ZSAiK3QrIiBrYXJha3RlcnMgdGUgdmVyd2lqZGVyZW4iO3JldHVybiBufSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWUubWluaW11bS1lLmlucHV0Lmxlbmd0aCxuPSJHZWxpZXZlICIrdCsiIG9mIG1lZXIga2FyYWt0ZXJzIGluIHRlIHZvZXJlbiI7cmV0dXJuIG59LGxvYWRpbmdNb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIk1lZXIgcmVzdWx0YXRlbiBsYWRlbuKApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm1heGltdW09PTE/ImthbiI6Imt1bm5lbiIsbj0iRXIgIit0KyIgbWFhciAiK2UubWF4aW11bSsiIGl0ZW0iO3JldHVybiBlLm1heGltdW0hPTEmJihuKz0icyIpLG4rPSIgd29yZGVuIGdlc2VsZWN0ZWVyZCIsbn0sbm9SZXN1bHRzOmZ1bmN0aW9uKCl7cmV0dXJuIkdlZW4gcmVzdWx0YXRlbiBnZXZvbmRlbuKApiJ9LHNlYXJjaGluZzpmdW5jdGlvbigpe3JldHVybiJab2VrZW7igKYifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vcGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA0ZjBlOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vcGwuanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi9wbCIsW10sZnVuY3Rpb24oKXt2YXIgZT1bInpuYWsiLCJ6bmFraSIsInpuYWvDs3ciXSx0PVsiZWxlbWVudCIsImVsZW1lbnR5IiwiZWxlbWVudMOzdyJdLG49ZnVuY3Rpb24odCxuKXtpZih0PT09MSlyZXR1cm4gblswXTtpZih0PjEmJnQ8PTQpcmV0dXJuIG5bMV07aWYodD49NSlyZXR1cm4gblsyXX07cmV0dXJue2Vycm9yTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiJOaWUgbW/FvG5hIHphxYJhZG93YcSHIHd5bmlrw7N3LiJ9LGlucHV0VG9vTG9uZzpmdW5jdGlvbih0KXt2YXIgcj10LmlucHV0Lmxlbmd0aC10Lm1heGltdW07cmV0dXJuIlVzdcWEICIrcisiICIrbihyLGUpfSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKHQpe3ZhciByPXQubWluaW11bS10LmlucHV0Lmxlbmd0aDtyZXR1cm4iUG9kYWogcHJ6eW5ham1uaWVqICIrcisiICIrbihyLGUpfSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiJUcndhIMWCYWRvd2FuaWXigKYifSxtYXhpbXVtU2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIk1vxbxlc3ogemF6bmFjennEhyB0eWxrbyAiK2UubWF4aW11bSsiICIrbihlLm1heGltdW0sdCl9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiJCcmFrIHd5bmlrw7N3In0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIlRyd2Egd3lzenVraXdhbmll4oCmIn19fSkse2RlZmluZTplLmRlZmluZSxyZXF1aXJlOmUucmVxdWlyZX19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vcHMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL3BzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNWU4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL3BzLmpzCkBAIC0wLDAgKzEsMyBAQAorLyohIFNlbGVjdDIgNC4wLjYtcmMuMSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZCAqLworCisoZnVuY3Rpb24oKXtpZihqUXVlcnkmJmpRdWVyeS5mbiYmalF1ZXJ5LmZuLnNlbGVjdDImJmpRdWVyeS5mbi5zZWxlY3QyLmFtZCl2YXIgZT1qUXVlcnkuZm4uc2VsZWN0Mi5hbWQ7cmV0dXJuIGUuZGVmaW5lKCJzZWxlY3QyL2kxOG4vcHMiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiLZvtin2YrZhNmKINmG2Ycg2LPZiiDYqtix2YTYp9iz2Ycg2qnbkNiv2KfbjCJ9LGlucHV0VG9vTG9uZzpmdW5jdGlvbihlKXt2YXIgdD1lLmlucHV0Lmxlbmd0aC1lLm1heGltdW0sbj0i2K8g2YXZh9ix2KjYp9mG240g2YTZhdiu2YogIit0KyIg2KrZiNix24wg2pPZhtqrINqp2pPYpiI7cmV0dXJuIHQhPTEmJihuPW4ucmVwbGFjZSgi2KrZiNix24wiLCLYqtmI2LHZiiIpKSxufSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWUubWluaW11bS1lLmlucHV0Lmxlbmd0aCxuPSLZhNqWINiq2LEg2YTaltmHICIrdCsiINmK2Kcg2onbkNixINiq2YjYsdmKINmI2YTZitqp2KYiO3JldHVybiBufSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiLZhtmI2LHZiiDZvtin2YrZhNmKINiq2LHZhNin2LPZhyDaqdmK2pbZii4uLiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD0i2KrYp9iz2Ygg2YrZiNin2LLZiiAiK2UubWF4aW11bSsiINmC2YTZhSDZvtmHINmG2prZhyDaqdmI2YTYp9uMINiz24wiO3JldHVybiBlLm1heGltdW0hPTEmJih0PXQucmVwbGFjZSgi2YLZhNmFIiwi2YLZhNmF2YjZhtmHIikpLHR9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiLZvtin2YrZhNmKINmIINmG2Ycg2YXZiNmG2K/ZhCDYs9mI25AifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4i2YTZvNmI2YQg2qnZitqW2YouLi4ifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9wdC1CUi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vcHQtQlIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmViODJmMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vcHQtQlIuanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi9wdC1CUiIsW10sZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3JMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIk9zIHJlc3VsdGFkb3MgbsOjbyBwdWRlcmFtIHNlciBjYXJyZWdhZG9zLiJ9LGlucHV0VG9vTG9uZzpmdW5jdGlvbihlKXt2YXIgdD1lLmlucHV0Lmxlbmd0aC1lLm1heGltdW0sbj0iQXBhZ3VlICIrdCsiIGNhcmFjdGVyIjtyZXR1cm4gdCE9MSYmKG4rPSJlcyIpLG59LGlucHV0VG9vU2hvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5taW5pbXVtLWUuaW5wdXQubGVuZ3RoLG49IkRpZ2l0ZSAiK3QrIiBvdSBtYWlzIGNhcmFjdGVyZXMiO3JldHVybiBufSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiJDYXJyZWdhbmRvIG1haXMgcmVzdWx0YWRvc+KApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD0iVm9jw6ogc8OzIHBvZGUgc2VsZWNpb25hciAiK2UubWF4aW11bSsiIGl0ZSI7cmV0dXJuIGUubWF4aW11bT09MT90Kz0ibSI6dCs9Im5zIix0fSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm4iTmVuaHVtIHJlc3VsdGFkbyBlbmNvbnRyYWRvIn0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkJ1c2NhbmRv4oCmIn19fSkse2RlZmluZTplLmRlZmluZSxyZXF1aXJlOmUucmVxdWlyZX19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vcHQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL3B0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMWYyNWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL3B0LmpzCkBAIC0wLDAgKzEsMyBAQAorLyohIFNlbGVjdDIgNC4wLjYtcmMuMSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZCAqLworCisoZnVuY3Rpb24oKXtpZihqUXVlcnkmJmpRdWVyeS5mbiYmalF1ZXJ5LmZuLnNlbGVjdDImJmpRdWVyeS5mbi5zZWxlY3QyLmFtZCl2YXIgZT1qUXVlcnkuZm4uc2VsZWN0Mi5hbWQ7cmV0dXJuIGUuZGVmaW5lKCJzZWxlY3QyL2kxOG4vcHQiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiJPcyByZXN1bHRhZG9zIG7Do28gcHVkZXJhbSBzZXIgY2FycmVnYWRvcy4ifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtLG49IlBvciBmYXZvciBhcGFndWUgIit0KyIgIjtyZXR1cm4gbis9dCE9MT8iY2FyYWN0ZXJlcyI6ImNhcmFjdGVyZSIsbn0saW5wdXRUb29TaG9ydDpmdW5jdGlvbihlKXt2YXIgdD1lLm1pbmltdW0tZS5pbnB1dC5sZW5ndGgsbj0iSW50cm9kdXphICIrdCsiIG91IG1haXMgY2FyYWN0ZXJlcyI7cmV0dXJuIG59LGxvYWRpbmdNb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIkEgY2FycmVnYXIgbWFpcyByZXN1bHRhZG9z4oCmIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKGUpe3ZhciB0PSJBcGVuYXMgcG9kZSBzZWxlY2Npb25hciAiK2UubWF4aW11bSsiICI7cmV0dXJuIHQrPWUubWF4aW11bSE9MT8iaXRlbnMiOiJpdGVtIix0fSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm4iU2VtIHJlc3VsdGFkb3MifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iQSBwcm9jdXJhcuKApiJ9fX0pLHtkZWZpbmU6ZS5kZWZpbmUscmVxdWlyZTplLnJlcXVpcmV9fSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL3JvLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9yby5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDNjMjI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9yby5qcwpAQCAtMCwwICsxLDMgQEAKKy8qISBTZWxlY3QyIDQuMC42LXJjLjEgfCBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQgKi8KKworKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5JiZqUXVlcnkuZm4mJmpRdWVyeS5mbi5zZWxlY3QyJiZqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpdmFyIGU9alF1ZXJ5LmZuLnNlbGVjdDIuYW1kO3JldHVybiBlLmRlZmluZSgic2VsZWN0Mi9pMThuL3JvIixbXSxmdW5jdGlvbigpe3JldHVybntlcnJvckxvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iUmV6dWx0YXRlbGUgbnUgYXUgcHV0dXQgZmkgaW5jxINyY2F0ZS4ifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtLG49IlbEgyBydWfEg20gc8SDIMiZdGVyZ2XIm2kiK3QrIiBjYXJhY3RlciI7cmV0dXJuIHQhPT0xJiYobis9ImUiKSxufSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWUubWluaW11bS1lLmlucHV0Lmxlbmd0aCxuPSJWxIMgcnVnxINtIHPEgyBpbnRyb2R1Y2XIm2kgIit0KyIgc2F1IG1haSBtdWx0ZSBjYXJhY3RlcmUiO3JldHVybiBufSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiJTZSDDrm5jYXJjxIMgbWFpIG11bHRlIHJlenVsdGF0ZeKApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD0iQXZlyJtpIHZvaWUgc8SDIHNlbGVjdGHIm2kgY2VsIG11bHQgIitlLm1heGltdW07cmV0dXJuIHQrPSIgZWxlbWVudCIsZS5tYXhpbXVtIT09MSYmKHQrPSJlIiksdH0sbm9SZXN1bHRzOmZ1bmN0aW9uKCl7cmV0dXJuIk51IGF1IGZvc3QgZ8SDc2l0ZSByZXp1bHRhdGUifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iQ8SDdXRhcmXigKYifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9ydS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM3ZDI1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vcnUuanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi9ydSIsW10sZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3JldHVybiBlJTEwPDUmJmUlMTA+MCYmZSUxMDA8NXx8ZSUxMDA+MjA/ZSUxMD4xP246dDpyfXJldHVybntlcnJvckxvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4i0J3QtdCy0L7Qt9C80L7QttC90L4g0LfQsNCz0YDRg9C30LjRgtGMINGA0LXQt9GD0LvRjNGC0LDRgtGLIn0saW5wdXRUb29Mb25nOmZ1bmN0aW9uKHQpe3ZhciBuPXQuaW5wdXQubGVuZ3RoLXQubWF4aW11bSxyPSLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0L3QsCAiK24rIiDRgdC40LzQstC+0LsiO3JldHVybiByKz1lKG4sIiIsImEiLCLQvtCyIikscis9IiDQvNC10L3RjNGI0LUiLHJ9LGlucHV0VG9vU2hvcnQ6ZnVuY3Rpb24odCl7dmFyIG49dC5taW5pbXVtLXQuaW5wdXQubGVuZ3RoLHI9ItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQtdGJ0LUg0YXQvtGC0Y8g0LHRiyAiK24rIiDRgdC40LzQstC+0LsiO3JldHVybiByKz1lKG4sIiIsImEiLCLQvtCyIikscn0sbG9hZGluZ01vcmU6ZnVuY3Rpb24oKXtyZXR1cm4i0JfQsNCz0YDRg9C30LrQsCDQtNCw0L3QvdGL0YXigKYifSxtYXhpbXVtU2VsZWN0ZWQ6ZnVuY3Rpb24odCl7dmFyIG49ItCS0Ysg0LzQvtC20LXRgtC1INCy0YvQsdGA0LDRgtGMINC90LUg0LHQvtC70LXQtSAiK3QubWF4aW11bSsiINGN0LvQtdC80LXQvdGCIjtyZXR1cm4gbis9ZSh0Lm1heGltdW0sIiIsImEiLCLQvtCyIiksbn0sbm9SZXN1bHRzOmZ1bmN0aW9uKCl7cmV0dXJuItCh0L7QstC/0LDQtNC10L3QuNC5INC90LUg0L3QsNC50LTQtdC90L4ifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4i0J/QvtC40YHQuuKApiJ9fX0pLHtkZWZpbmU6ZS5kZWZpbmUscmVxdWlyZTplLnJlcXVpcmV9fSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL3NrLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9zay5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGQwODFmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9zay5qcwpAQCAtMCwwICsxLDMgQEAKKy8qISBTZWxlY3QyIDQuMC42LXJjLjEgfCBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQgKi8KKworKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5JiZqUXVlcnkuZm4mJmpRdWVyeS5mbi5zZWxlY3QyJiZqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpdmFyIGU9alF1ZXJ5LmZuLnNlbGVjdDIuYW1kO3JldHVybiBlLmRlZmluZSgic2VsZWN0Mi9pMThuL3NrIixbXSxmdW5jdGlvbigpe3ZhciBlPXsyOmZ1bmN0aW9uKGUpe3JldHVybiBlPyJkdmEiOiJkdmUifSwzOmZ1bmN0aW9uKCl7cmV0dXJuInRyaSJ9LDQ6ZnVuY3Rpb24oKXtyZXR1cm4ixaF0eXJpIn19O3JldHVybntlcnJvckxvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iVsO9c2xlZGt5IHNhIG5lcG9kYXJpbG8gbmHEjcOtdGHFpS4ifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24odCl7dmFyIG49dC5pbnB1dC5sZW5ndGgtdC5tYXhpbXVtO3JldHVybiBuPT0xPyJQcm9zw61tLCB6YWRhanRlIG8gamVkZW4gem5hayBtZW5laiI6bj49MiYmbjw9ND8iUHJvc8OtbSwgemFkYWp0ZSBvICIrZVtuXSghMCkrIiB6bmFreSBtZW5laiI6IlByb3PDrW0sIHphZGFqdGUgbyAiK24rIiB6bmFrb3YgbWVuZWoifSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKHQpe3ZhciBuPXQubWluaW11bS10LmlucHV0Lmxlbmd0aDtyZXR1cm4gbj09MT8iUHJvc8OtbSwgemFkYWp0ZSBlxaF0ZSBqZWRlbiB6bmFrIjpuPD00PyJQcm9zw61tLCB6YWRhanRlIGXFoXRlIMSPYWzFoWllICIrZVtuXSghMCkrIiB6bmFreSI6IlByb3PDrW0sIHphZGFqdGUgZcWhdGUgxI9hbMWhw61jaCAiK24rIiB6bmFrb3YifSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiJOYcSNw610YW5pZSDEj2FsxaHDrWNoIHbDvXNsZWRrb3bigKYifSxtYXhpbXVtU2VsZWN0ZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWF4aW11bT09MT8iTcO0xb5ldGUgenZvbGnFpSBsZW4gamVkbnUgcG9sb8W+a3UiOnQubWF4aW11bT49MiYmdC5tYXhpbXVtPD00PyJNw7TFvmV0ZSB6dm9sacWlIG5hanZpYWMgIitlW3QubWF4aW11bV0oITEpKyIgcG9sb8W+a3kiOiJNw7TFvmV0ZSB6dm9sacWlIG5hanZpYWMgIit0Lm1heGltdW0rIiBwb2xvxb5pZWsifSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm4iTmVuYcWhbGkgc2Egxb5pYWRuZSBwb2xvxb5reSJ9LHNlYXJjaGluZzpmdW5jdGlvbigpe3JldHVybiJWeWjEvmFkw6F2YW5pZeKApiJ9fX0pLHtkZWZpbmU6ZS5kZWZpbmUscmVxdWlyZTplLnJlcXVpcmV9fSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL3NsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9zbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDAyZGU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9zbC5qcwpAQCAtMCwwICsxLDMgQEAKKy8qISBTZWxlY3QyIDQuMC42LXJjLjEgfCBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQgKi8KKworKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5JiZqUXVlcnkuZm4mJmpRdWVyeS5mbi5zZWxlY3QyJiZqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpdmFyIGU9alF1ZXJ5LmZuLnNlbGVjdDIuYW1kO3JldHVybiBlLmRlZmluZSgic2VsZWN0Mi9pMThuL3NsIixbXSxmdW5jdGlvbigpe3JldHVybntlcnJvckxvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iWmFkZXRrb3YgaXNrYW5qYSBuaSBiaWxvIG1vZ2/EjWUgbmFsb8W+aXRpLiJ9LGlucHV0VG9vTG9uZzpmdW5jdGlvbihlKXt2YXIgdD1lLmlucHV0Lmxlbmd0aC1lLm1heGltdW0sbj0iUHJvc2ltIHpicmnFoWl0ZSAiK3QrIiB6bmFrIjtyZXR1cm4gdD09Mj9uKz0iYSI6dCE9MSYmKG4rPSJlIiksbn0saW5wdXRUb29TaG9ydDpmdW5jdGlvbihlKXt2YXIgdD1lLm1pbmltdW0tZS5pbnB1dC5sZW5ndGgsbj0iUHJvc2ltIHZwacWhaXRlIMWhZSAiK3QrIiB6bmFrIjtyZXR1cm4gdD09Mj9uKz0iYSI6dCE9MSYmKG4rPSJlIiksbn0sbG9hZGluZ01vcmU6ZnVuY3Rpb24oKXtyZXR1cm4iTmFsYWdhbSB2ZcSNIHphZGV0a2924oCmIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKGUpe3ZhciB0PSJPem5hxI1pdGUgbGFoa28gbmFqdmXEjSAiK2UubWF4aW11bSsiIHByZWRtZXQiO3JldHVybiBlLm1heGltdW09PTI/dCs9ImEiOmUubWF4aW11bSE9MSYmKHQrPSJlIiksdH0sbm9SZXN1bHRzOmZ1bmN0aW9uKCl7cmV0dXJuIk5pIHphZGV0a292LiJ9LHNlYXJjaGluZzpmdW5jdGlvbigpe3JldHVybiJJxaHEjWVt4oCmIn19fSkse2RlZmluZTplLmRlZmluZSxyZXF1aXJlOmUucmVxdWlyZX19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vc3ItQ3lybC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vc3ItQ3lybC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWY3NTlmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9zci1DeXJsLmpzCkBAIC0wLDAgKzEsMyBAQAorLyohIFNlbGVjdDIgNC4wLjYtcmMuMSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZCAqLworCisoZnVuY3Rpb24oKXtpZihqUXVlcnkmJmpRdWVyeS5mbiYmalF1ZXJ5LmZuLnNlbGVjdDImJmpRdWVyeS5mbi5zZWxlY3QyLmFtZCl2YXIgZT1qUXVlcnkuZm4uc2VsZWN0Mi5hbWQ7cmV0dXJuIGUuZGVmaW5lKCJzZWxlY3QyL2kxOG4vc3ItQ3lybCIsW10sZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3JldHVybiBlJTEwPT0xJiZlJTEwMCE9MTE/dDplJTEwPj0yJiZlJTEwPD00JiYoZSUxMDA8MTJ8fGUlMTAwPjE0KT9uOnJ9cmV0dXJue2Vycm9yTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiLQn9GA0LXRg9C30LjQvNCw0ZrQtSDQvdC40ZjQtSDRg9GB0L/QtdC70L4uIn0saW5wdXRUb29Mb25nOmZ1bmN0aW9uKHQpe3ZhciBuPXQuaW5wdXQubGVuZ3RoLXQubWF4aW11bSxyPSLQntCx0YDQuNGI0LjRgtC1ICIrbisiINGB0LjQvNCx0L7QuyI7cmV0dXJuIHIrPWUobiwiIiwi0LAiLCLQsCIpLHJ9LGlucHV0VG9vU2hvcnQ6ZnVuY3Rpb24odCl7dmFyIG49dC5taW5pbXVtLXQuaW5wdXQubGVuZ3RoLHI9ItCj0LrRg9GG0LDRmNGC0LUg0LHQsNGAINGY0L7RiCAiK24rIiDRgdC40LzQsdC+0LsiO3JldHVybiByKz1lKG4sIiIsItCwIiwi0LAiKSxyfSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiLQn9GA0LXRg9C30LjQvNCw0ZrQtSDRmNC+0Ygg0YDQtdC30YPQu9GC0LDRgtCw4oCmIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKHQpe3ZhciBuPSLQnNC+0LbQtdGC0LUg0LjQt9Cw0LHRgNCw0YLQuCDRgdCw0LzQviAiK3QubWF4aW11bSsiINGB0YLQsNCy0LoiO3JldHVybiBuKz1lKHQubWF4aW11bSwi0YMiLCLQtSIsItC4Iiksbn0sbm9SZXN1bHRzOmZ1bmN0aW9uKCl7cmV0dXJuItCd0LjRiNGC0LAg0L3QuNGY0LUg0L/RgNC+0L3QsNGS0LXQvdC+In0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuItCf0YDQtdGC0YDQsNCz0LDigKYifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9zci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vc3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkyMDlkZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vc3IuanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi9zciIsW10sZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3JldHVybiBlJTEwPT0xJiZlJTEwMCE9MTE/dDplJTEwPj0yJiZlJTEwPD00JiYoZSUxMDA8MTJ8fGUlMTAwPjE0KT9uOnJ9cmV0dXJue2Vycm9yTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiJQcmV1emltYW5qZSBuaWplIHVzcGVsby4ifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24odCl7dmFyIG49dC5pbnB1dC5sZW5ndGgtdC5tYXhpbXVtLHI9Ik9icmnFoWl0ZSAiK24rIiBzaW1ib2wiO3JldHVybiByKz1lKG4sIiIsImEiLCJhIikscn0saW5wdXRUb29TaG9ydDpmdW5jdGlvbih0KXt2YXIgbj10Lm1pbmltdW0tdC5pbnB1dC5sZW5ndGgscj0iVWt1Y2FqdGUgYmFyIGpvxaEgIituKyIgc2ltYm9sIjtyZXR1cm4gcis9ZShuLCIiLCJhIiwiYSIpLHJ9LGxvYWRpbmdNb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIlByZXV6aW1hbmplIGpvxaEgcmV6dWx0YXRh4oCmIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKHQpe3ZhciBuPSJNb8W+ZXRlIGl6YWJyYXRpIHNhbW8gIit0Lm1heGltdW0rIiBzdGF2ayI7cmV0dXJuIG4rPWUodC5tYXhpbXVtLCJ1IiwiZSIsImkiKSxufSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm4iTmnFoXRhIG5pamUgcHJvbmHEkWVubyJ9LHNlYXJjaGluZzpmdW5jdGlvbigpe3JldHVybiJQcmV0cmFnYeKApiJ9fX0pLHtkZWZpbmU6ZS5kZWZpbmUscmVxdWlyZTplLnJlcXVpcmV9fSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL3N2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9zdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWY5N2ExCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi9zdi5qcwpAQCAtMCwwICsxLDMgQEAKKy8qISBTZWxlY3QyIDQuMC42LXJjLjEgfCBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQgKi8KKworKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5JiZqUXVlcnkuZm4mJmpRdWVyeS5mbi5zZWxlY3QyJiZqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpdmFyIGU9alF1ZXJ5LmZuLnNlbGVjdDIuYW1kO3JldHVybiBlLmRlZmluZSgic2VsZWN0Mi9pMThuL3N2IixbXSxmdW5jdGlvbigpe3JldHVybntlcnJvckxvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iUmVzdWx0YXQga3VuZGUgaW50ZSBsYWRkYXMuIn0saW5wdXRUb29Mb25nOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5wdXQubGVuZ3RoLWUubWF4aW11bSxuPSJWw6RubGlnZW4gc3VkZGEgdXQgIit0KyIgdGVja2VuIjtyZXR1cm4gbn0saW5wdXRUb29TaG9ydDpmdW5jdGlvbihlKXt2YXIgdD1lLm1pbmltdW0tZS5pbnB1dC5sZW5ndGgsbj0iVsOkbmxpZ2VuIHNrcml2IGluICIrdCsiIGVsbGVyIGZsZXIgdGVja2VuIjtyZXR1cm4gbn0sbG9hZGluZ01vcmU6ZnVuY3Rpb24oKXtyZXR1cm4iTGFkZGFyIGZsZXIgcmVzdWx0YXTigKYifSxtYXhpbXVtU2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9IkR1IGthbiBtYXggdsOkbGphICIrZS5tYXhpbXVtKyIgZWxlbWVudCI7cmV0dXJuIHR9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiJJbmdhIHRyw6RmZmFyIn0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIlPDtmtlcuKApiJ9fX0pLHtkZWZpbmU6ZS5kZWZpbmUscmVxdWlyZTplLnJlcXVpcmV9fSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL3RoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi90aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWExNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi90aC5qcwpAQCAtMCwwICsxLDMgQEAKKy8qISBTZWxlY3QyIDQuMC42LXJjLjEgfCBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQgKi8KKworKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5JiZqUXVlcnkuZm4mJmpRdWVyeS5mbi5zZWxlY3QyJiZqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpdmFyIGU9alF1ZXJ5LmZuLnNlbGVjdDIuYW1kO3JldHVybiBlLmRlZmluZSgic2VsZWN0Mi9pMThuL3RoIixbXSxmdW5jdGlvbigpe3JldHVybntlcnJvckxvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4i4LmE4Lih4LmI4Liq4Liy4Lih4Liy4Lij4LiW4LiE4LmJ4LiZ4LiC4LmJ4Lit4Lih4Li54Lil4LmE4LiU4LmJIn0saW5wdXRUb29Mb25nOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5wdXQubGVuZ3RoLWUubWF4aW11bSxuPSLguYLguJvguKPguJTguKXguJrguK3guK3guIEgIit0KyIg4LiV4Lix4Lin4Lit4Lix4LiB4Lip4LijIjtyZXR1cm4gbn0saW5wdXRUb29TaG9ydDpmdW5jdGlvbihlKXt2YXIgdD1lLm1pbmltdW0tZS5pbnB1dC5sZW5ndGgsbj0i4LmC4Lib4Lij4LiU4Lie4Li04Lih4Lie4LmM4LmA4Lie4Li04LmI4Lih4Lit4Li14LiBICIrdCsiIOC4leC4seC4p+C4reC4seC4geC4qeC4oyI7cmV0dXJuIG59LGxvYWRpbmdNb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIuC4geC4s+C4peC4seC4h+C4hOC5ieC4meC4guC5ieC4reC4oeC4ueC4peC5gOC4nuC4tOC5iOC4oeKApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD0i4LiE4Li44LiT4Liq4Liy4Lih4Liy4Lij4LiW4LmA4Lil4Li34Lit4LiB4LmE4LiU4LmJ4LmE4Lih4LmI4LmA4LiB4Li04LiZICIrZS5tYXhpbXVtKyIg4Lij4Liy4Lii4LiB4Liy4LijIjtyZXR1cm4gdH0sbm9SZXN1bHRzOmZ1bmN0aW9uKCl7cmV0dXJuIuC5hOC4oeC5iOC4nuC4muC4guC5ieC4reC4oeC4ueC4pSJ9LHNlYXJjaGluZzpmdW5jdGlvbigpe3JldHVybiLguIHguLPguKXguLHguIfguITguYnguJnguILguYnguK3guKHguLnguKXigKYifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi90ay5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vdGsuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY1ZjU1MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vdGsuanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi90ayIsW10sZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3JMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIk5ldGlqZSDDvcO8a2xlbm1lZGkuIn0saW5wdXRUb29Mb25nOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5wdXQubGVuZ3RoLWUubWF4aW11bSxuPXQrIiBoYXJwIGJvenXFiC4iO3JldHVybiBufSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWUubWluaW11bS1lLmlucHV0Lmxlbmd0aCxuPSLDnWVuZS1kZSBpxYggYXogIit0KyIgaGFycCDDvWF6ecWILiI7cmV0dXJuIG59LGxvYWRpbmdNb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIkvDtnByw6RrIG5ldGlqZSBnw7Zya2V6aWzDvcOkcuKApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD0iRGnFiGUgIitlLm1heGltdW0rIiBzYW55c3lueSBzYcO9bGHFiC4iO3JldHVybiB0fSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm4iTmV0aWplIHRhcHlsbWFkeS4ifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iR8O2emxlbsO9w6Ry4oCmIn19fSkse2RlZmluZTplLmRlZmluZSxyZXF1aXJlOmUucmVxdWlyZX19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vdHIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL3RyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5N2E4OTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL3RyLmpzCkBAIC0wLDAgKzEsMyBAQAorLyohIFNlbGVjdDIgNC4wLjYtcmMuMSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZCAqLworCisoZnVuY3Rpb24oKXtpZihqUXVlcnkmJmpRdWVyeS5mbiYmalF1ZXJ5LmZuLnNlbGVjdDImJmpRdWVyeS5mbi5zZWxlY3QyLmFtZCl2YXIgZT1qUXVlcnkuZm4uc2VsZWN0Mi5hbWQ7cmV0dXJuIGUuZGVmaW5lKCJzZWxlY3QyL2kxOG4vdHIiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiJTb251w6cgecO8a2xlbmVtZWRpIn0saW5wdXRUb29Mb25nOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5wdXQubGVuZ3RoLWUubWF4aW11bSxuPXQrIiBrYXJha3RlciBkYWhhIGdpcm1lbGlzaW5peiI7cmV0dXJuIG59LGlucHV0VG9vU2hvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5taW5pbXVtLWUuaW5wdXQubGVuZ3RoLG49IkVuIGF6ICIrdCsiIGthcmFrdGVyIGRhaGEgZ2lybWVsaXNpbml6IjtyZXR1cm4gbn0sbG9hZGluZ01vcmU6ZnVuY3Rpb24oKXtyZXR1cm4iRGFoYSBmYXpsYeKApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD0iU2FkZWNlICIrZS5tYXhpbXVtKyIgc2XDp2ltIHlhcGFiaWxpcnNpbml6IjtyZXR1cm4gdH0sbm9SZXN1bHRzOmZ1bmN0aW9uKCl7cmV0dXJuIlNvbnXDpyBidWx1bmFtYWTEsSJ9LHNlYXJjaGluZzpmdW5jdGlvbigpe3JldHVybiJBcmFuxLF5b3LigKYifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi91ay5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vdWsuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMzOTg5YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vdWsuanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi91ayIsW10sZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3JldHVybiBlJTEwMD4xMCYmZSUxMDA8MTU/cjplJTEwPT09MT90OmUlMTA+MSYmZSUxMDw1P246cn1yZXR1cm57ZXJyb3JMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuItCd0LXQvNC+0LbQu9C40LLQviDQt9Cw0LLQsNC90YLQsNC20LjRgtC4INGA0LXQt9GD0LvRjNGC0LDRgtC4In0saW5wdXRUb29Mb25nOmZ1bmN0aW9uKHQpe3ZhciBuPXQuaW5wdXQubGVuZ3RoLXQubWF4aW11bTtyZXR1cm4i0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LLQuNC00LDQu9GW0YLRjCAiK24rIiAiK2UodC5tYXhpbXVtLCLQu9GW0YLQtdGA0YMiLCLQu9GW0YLQtdGA0LgiLCLQu9GW0YLQtdGAIil9LGlucHV0VG9vU2hvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5taW5pbXVtLWUuaW5wdXQubGVuZ3RoO3JldHVybiLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQstCy0LXQtNGW0YLRjCAiK3QrIiDQsNCx0L4g0LHRltC70YzRiNC1INC70ZbRgtC10YAifSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiLQl9Cw0LLQsNC90YLQsNC20LXQvdC90Y8g0ZbQvdGI0LjRhSDRgNC10LfRg9C70YzRgtCw0YLRltCy4oCmIn0sbWF4aW11bVNlbGVjdGVkOmZ1bmN0aW9uKHQpe3JldHVybiLQktC4INC80L7QttC10YLQtSDQstC40LHRgNCw0YLQuCDQu9C40YjQtSAiK3QubWF4aW11bSsiICIrZSh0Lm1heGltdW0sItC/0YPQvdC60YIiLCLQv9GD0L3QutGC0LgiLCLQv9GD0L3QutGC0ZbQsiIpfSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm4i0J3RltGH0L7Qs9C+INC90LUg0LfQvdCw0LnQtNC10L3QviJ9LHNlYXJjaGluZzpmdW5jdGlvbigpe3JldHVybiLQn9C+0YjRg9C64oCmIn19fSkse2RlZmluZTplLmRlZmluZSxyZXF1aXJlOmUucmVxdWlyZX19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vdmkuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL3ZpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMzJjYjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL3ZpLmpzCkBAIC0wLDAgKzEsMyBAQAorLyohIFNlbGVjdDIgNC4wLjYtcmMuMSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZCAqLworCisoZnVuY3Rpb24oKXtpZihqUXVlcnkmJmpRdWVyeS5mbiYmalF1ZXJ5LmZuLnNlbGVjdDImJmpRdWVyeS5mbi5zZWxlY3QyLmFtZCl2YXIgZT1qUXVlcnkuZm4uc2VsZWN0Mi5hbWQ7cmV0dXJuIGUuZGVmaW5lKCJzZWxlY3QyL2kxOG4vdmkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue2lucHV0VG9vTG9uZzpmdW5jdGlvbihlKXt2YXIgdD1lLmlucHV0Lmxlbmd0aC1lLm1heGltdW0sbj0iVnVpIGzDsm5nIG5o4bqtcCDDrXQgaMahbiAiK3QrIiBrw70gdOG7sSI7cmV0dXJuIHQhPTEmJihuKz0icyIpLG59LGlucHV0VG9vU2hvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5taW5pbXVtLWUuaW5wdXQubGVuZ3RoLG49IlZ1aSBsw7JuZyBuaOG6rXAgbmhp4buBdSBoxqFuICIrdCsiIGvDvSB04buxIjtyZXR1cm4gbn0sbG9hZGluZ01vcmU6ZnVuY3Rpb24oKXtyZXR1cm4ixJBhbmcgbOG6pXkgdGjDqm0ga+G6v3QgcXXhuqPigKYifSxtYXhpbXVtU2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9IkNo4buJIGPDsyB0aOG7gyBjaOG7jW4gxJHGsOG7o2MgIitlLm1heGltdW0rIiBs4buxYSBjaOG7jW4iO3JldHVybiB0fSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm4iS2jDtG5nIHTDrG0gdGjhuqV5IGvhur90IHF14bqjIn0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIsSQYW5nIHTDrG3igKYifX19KSx7ZGVmaW5lOmUuZGVmaW5lLHJlcXVpcmU6ZS5yZXF1aXJlfX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvaTE4bi96aC1DTi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vemgtQ04uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM0OWRiYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vemgtQ04uanMKQEAgLTAsMCArMSwzIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovCisKKyhmdW5jdGlvbigpe2lmKGpRdWVyeSYmalF1ZXJ5LmZuJiZqUXVlcnkuZm4uc2VsZWN0MiYmalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKXZhciBlPWpRdWVyeS5mbi5zZWxlY3QyLmFtZDtyZXR1cm4gZS5kZWZpbmUoInNlbGVjdDIvaTE4bi96aC1DTiIsW10sZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3JMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIuaXoOazlei9veWFpee7k+aenOOAgiJ9LGlucHV0VG9vTG9uZzpmdW5jdGlvbihlKXt2YXIgdD1lLmlucHV0Lmxlbmd0aC1lLm1heGltdW0sbj0i6K+35Yig6ZmkIit0KyLkuKrlrZfnrKYiO3JldHVybiBufSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWUubWluaW11bS1lLmlucHV0Lmxlbmd0aCxuPSLor7flho3ovpPlhaXoh7PlsJEiK3QrIuS4quWtl+espiI7cmV0dXJuIG59LGxvYWRpbmdNb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIui9veWFpeabtOWkmue7k+aenOKApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD0i5pyA5aSa5Y+q6IO96YCJ5oupIitlLm1heGltdW0rIuS4qumhueebriI7cmV0dXJuIHR9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiLmnKrmib7liLDnu5PmnpwifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4i5pCc57Si5Lit4oCmIn19fSkse2RlZmluZTplLmRlZmluZSxyZXF1aXJlOmUucmVxdWlyZX19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL2kxOG4vemgtVFcuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL3poLVRXLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllOWY3YjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9pMThuL3poLVRXLmpzCkBAIC0wLDAgKzEsMyBAQAorLyohIFNlbGVjdDIgNC4wLjYtcmMuMSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZCAqLworCisoZnVuY3Rpb24oKXtpZihqUXVlcnkmJmpRdWVyeS5mbiYmalF1ZXJ5LmZuLnNlbGVjdDImJmpRdWVyeS5mbi5zZWxlY3QyLmFtZCl2YXIgZT1qUXVlcnkuZm4uc2VsZWN0Mi5hbWQ7cmV0dXJuIGUuZGVmaW5lKCJzZWxlY3QyL2kxOG4vemgtVFciLFtdLGZ1bmN0aW9uKCl7cmV0dXJue2lucHV0VG9vTG9uZzpmdW5jdGlvbihlKXt2YXIgdD1lLmlucHV0Lmxlbmd0aC1lLm1heGltdW0sbj0i6KuL5Yiq5o6JIit0KyLlgIvlrZflhYMiO3JldHVybiBufSxpbnB1dFRvb1Nob3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWUubWluaW11bS1lLmlucHV0Lmxlbmd0aCxuPSLoq4vlho3ovLjlhaUiK3QrIuWAi+Wtl+WFgyI7cmV0dXJuIG59LGxvYWRpbmdNb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIui8ieWFpeS4reKApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD0i5L2g5Y+q6IO96YG45pOH5pyA5aSaIitlLm1heGltdW0rIumghSI7cmV0dXJuIHR9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiLmspLmnInmib7liLDnm7jnrKbnmoTpoIXnm64ifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm4i5pCc5bCL5Lit4oCmIn19fSkse2RlZmluZTplLmRlZmluZSxyZXF1aXJlOmUucmVxdWlyZX19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL3NlbGVjdDIuZnVsbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL3NlbGVjdDIuZnVsbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTg5Nzg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvc2VsZWN0Mi5mdWxsLmpzCkBAIC0wLDAgKzEsNjU1OSBAQAorLyohCisgKiBTZWxlY3QyIDQuMC42LXJjLjEKKyAqIGh0dHBzOi8vc2VsZWN0Mi5naXRodWIuaW8KKyAqCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKKyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZAorICovCis7KGZ1bmN0aW9uIChmYWN0b3J5KSB7CisgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsKKyAgICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuCisgICAgZGVmaW5lKFsnanF1ZXJ5J10sIGZhY3RvcnkpOworICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7CisgICAgLy8gTm9kZS9Db21tb25KUworICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJvb3QsIGpRdWVyeSkgeworICAgICAgaWYgKGpRdWVyeSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgIC8vIHJlcXVpcmUoJ2pRdWVyeScpIHJldHVybnMgYSBmYWN0b3J5IHRoYXQgcmVxdWlyZXMgd2luZG93IHRvCisgICAgICAgIC8vIGJ1aWxkIGEgalF1ZXJ5IGluc3RhbmNlLCB3ZSBub3JtYWxpemUgaG93IHdlIHVzZSBtb2R1bGVzCisgICAgICAgIC8vIHRoYXQgcmVxdWlyZSB0aGlzIHBhdHRlcm4gYnV0IHRoZSB3aW5kb3cgcHJvdmlkZWQgaXMgYSBub29wCisgICAgICAgIC8vIGlmIGl0J3MgZGVmaW5lZCAoaG93IGpxdWVyeSB3b3JrcykKKyAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgalF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5Jyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgalF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5Jykocm9vdCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGZhY3RvcnkoalF1ZXJ5KTsKKyAgICAgIHJldHVybiBqUXVlcnk7CisgICAgfTsKKyAgfSBlbHNlIHsKKyAgICAvLyBCcm93c2VyIGdsb2JhbHMKKyAgICBmYWN0b3J5KGpRdWVyeSk7CisgIH0KK30gKGZ1bmN0aW9uIChqUXVlcnkpIHsKKyAgLy8gVGhpcyBpcyBuZWVkZWQgc28gd2UgY2FuIGNhdGNoIHRoZSBBTUQgbG9hZGVyIGNvbmZpZ3VyYXRpb24gYW5kIHVzZSBpdAorICAvLyBUaGUgaW5uZXIgZmlsZSBzaG91bGQgYmUgd3JhcHBlZCAoYnkgYGJhbm5lci5zdGFydC5qc2ApIGluIGEgZnVuY3Rpb24gdGhhdAorICAvLyByZXR1cm5zIHRoZSBBTUQgbG9hZGVyIHJlZmVyZW5jZXMuCisgIHZhciBTMiA9KGZ1bmN0aW9uICgpIHsKKyAgLy8gUmVzdG9yZSB0aGUgU2VsZWN0MiBBTUQgbG9hZGVyIHNvIGl0IGNhbiBiZSB1c2VkCisgIC8vIE5lZWRlZCBtb3N0bHkgaW4gdGhlIGxhbmd1YWdlIGZpbGVzLCB3aGVyZSB0aGUgbG9hZGVyIGlzIG5vdCBpbnNlcnRlZAorICBpZiAoalF1ZXJ5ICYmIGpRdWVyeS5mbiAmJiBqUXVlcnkuZm4uc2VsZWN0MiAmJiBqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpIHsKKyAgICB2YXIgUzIgPSBqUXVlcnkuZm4uc2VsZWN0Mi5hbWQ7CisgIH0KK3ZhciBTMjsoZnVuY3Rpb24gKCkgeyBpZiAoIVMyIHx8ICFTMi5yZXF1aXJlanMpIHsKK2lmICghUzIpIHsgUzIgPSB7fTsgfSBlbHNlIHsgcmVxdWlyZSA9IFMyOyB9CisvKioKKyAqIEBsaWNlbnNlIGFsbW9uZCAwLjMuMyBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycy4KKyAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLCBodHRwOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvYWxtb25kL0xJQ0VOU0UKKyAqLworLy9Hb2luZyBzbG9wcHkgdG8gYXZvaWQgJ3VzZSBzdHJpY3QnIHN0cmluZyBjb3N0LCBidXQgc3RyaWN0IHByYWN0aWNlcyBzaG91bGQKKy8vYmUgZm9sbG93ZWQuCisvKmdsb2JhbCBzZXRUaW1lb3V0OiBmYWxzZSAqLworCit2YXIgcmVxdWlyZWpzLCByZXF1aXJlLCBkZWZpbmU7CisoZnVuY3Rpb24gKHVuZGVmKSB7CisgICAgdmFyIG1haW4sIHJlcSwgbWFrZU1hcCwgaGFuZGxlcnMsCisgICAgICAgIGRlZmluZWQgPSB7fSwKKyAgICAgICAgd2FpdGluZyA9IHt9LAorICAgICAgICBjb25maWcgPSB7fSwKKyAgICAgICAgZGVmaW5pbmcgPSB7fSwKKyAgICAgICAgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSwKKyAgICAgICAgYXBzID0gW10uc2xpY2UsCisgICAgICAgIGpzU3VmZml4UmVnRXhwID0gL1wuanMkLzsKKworICAgIGZ1bmN0aW9uIGhhc1Byb3Aob2JqLCBwcm9wKSB7CisgICAgICAgIHJldHVybiBoYXNPd24uY2FsbChvYmosIHByb3ApOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdpdmVuIGEgcmVsYXRpdmUgbW9kdWxlIG5hbWUsIGxpa2UgLi9zb21ldGhpbmcsIG5vcm1hbGl6ZSBpdCB0bworICAgICAqIGEgcmVhbCBuYW1lIHRoYXQgY2FuIGJlIG1hcHBlZCB0byBhIHBhdGguCisgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIHJlbGF0aXZlIG5hbWUKKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gYmFzZU5hbWUgYSByZWFsIG5hbWUgdGhhdCB0aGUgbmFtZSBhcmcgaXMgcmVsYXRpdmUKKyAgICAgKiB0by4KKyAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBub3JtYWxpemVkIG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBub3JtYWxpemUobmFtZSwgYmFzZU5hbWUpIHsKKyAgICAgICAgdmFyIG5hbWVQYXJ0cywgbmFtZVNlZ21lbnQsIG1hcFZhbHVlLCBmb3VuZE1hcCwgbGFzdEluZGV4LAorICAgICAgICAgICAgZm91bmRJLCBmb3VuZFN0YXJNYXAsIHN0YXJJLCBpLCBqLCBwYXJ0LCBub3JtYWxpemVkQmFzZVBhcnRzLAorICAgICAgICAgICAgYmFzZVBhcnRzID0gYmFzZU5hbWUgJiYgYmFzZU5hbWUuc3BsaXQoIi8iKSwKKyAgICAgICAgICAgIG1hcCA9IGNvbmZpZy5tYXAsCisgICAgICAgICAgICBzdGFyTWFwID0gKG1hcCAmJiBtYXBbJyonXSkgfHwge307CisKKyAgICAgICAgLy9BZGp1c3QgYW55IHJlbGF0aXZlIHBhdGhzLgorICAgICAgICBpZiAobmFtZSkgeworICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3BsaXQoJy8nKTsKKyAgICAgICAgICAgIGxhc3RJbmRleCA9IG5hbWUubGVuZ3RoIC0gMTsKKworICAgICAgICAgICAgLy8gSWYgd2FudGluZyBub2RlIElEIGNvbXBhdGliaWxpdHksIHN0cmlwIC5qcyBmcm9tIGVuZAorICAgICAgICAgICAgLy8gb2YgSURzLiBIYXZlIHRvIGRvIHRoaXMgaGVyZSwgYW5kIG5vdCBpbiBuYW1lVG9VcmwKKyAgICAgICAgICAgIC8vIGJlY2F1c2Ugbm9kZSBhbGxvd3MgZWl0aGVyIC5qcyBvciBub24gLmpzIHRvIG1hcAorICAgICAgICAgICAgLy8gdG8gc2FtZSBmaWxlLgorICAgICAgICAgICAgaWYgKGNvbmZpZy5ub2RlSWRDb21wYXQgJiYganNTdWZmaXhSZWdFeHAudGVzdChuYW1lW2xhc3RJbmRleF0pKSB7CisgICAgICAgICAgICAgICAgbmFtZVtsYXN0SW5kZXhdID0gbmFtZVtsYXN0SW5kZXhdLnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU3RhcnRzIHdpdGggYSAnLicgc28gbmVlZCB0aGUgYmFzZU5hbWUKKyAgICAgICAgICAgIGlmIChuYW1lWzBdLmNoYXJBdCgwKSA9PT0gJy4nICYmIGJhc2VQYXJ0cykgeworICAgICAgICAgICAgICAgIC8vQ29udmVydCBiYXNlTmFtZSB0byBhcnJheSwgYW5kIGxvcCBvZmYgdGhlIGxhc3QgcGFydCwKKyAgICAgICAgICAgICAgICAvL3NvIHRoYXQgLiBtYXRjaGVzIHRoYXQgJ2RpcmVjdG9yeScgYW5kIG5vdCBuYW1lIG9mIHRoZSBiYXNlTmFtZSdzCisgICAgICAgICAgICAgICAgLy9tb2R1bGUuIEZvciBpbnN0YW5jZSwgYmFzZU5hbWUgb2YgJ29uZS90d28vdGhyZWUnLCBtYXBzIHRvCisgICAgICAgICAgICAgICAgLy8nb25lL3R3by90aHJlZS5qcycsIGJ1dCB3ZSB3YW50IHRoZSBkaXJlY3RvcnksICdvbmUvdHdvJyBmb3IKKyAgICAgICAgICAgICAgICAvL3RoaXMgbm9ybWFsaXphdGlvbi4KKyAgICAgICAgICAgICAgICBub3JtYWxpemVkQmFzZVBhcnRzID0gYmFzZVBhcnRzLnNsaWNlKDAsIGJhc2VQYXJ0cy5sZW5ndGggLSAxKTsKKyAgICAgICAgICAgICAgICBuYW1lID0gbm9ybWFsaXplZEJhc2VQYXJ0cy5jb25jYXQobmFtZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vc3RhcnQgdHJpbURvdHMKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgcGFydCA9IG5hbWVbaV07CisgICAgICAgICAgICAgICAgaWYgKHBhcnQgPT09ICcuJykgeworICAgICAgICAgICAgICAgICAgICBuYW1lLnNwbGljZShpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgaSAtPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiBhdCB0aGUgc3RhcnQsIG9yIHByZXZpb3VzIHZhbHVlIGlzIHN0aWxsIC4uLAorICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoZW0gc28gdGhhdCB3aGVuIGNvbnZlcnRlZCB0byBhIHBhdGggaXQgbWF5CisgICAgICAgICAgICAgICAgICAgIC8vIHN0aWxsIHdvcmsgd2hlbiBjb252ZXJ0ZWQgdG8gYSBwYXRoLCBldmVuIHRob3VnaAorICAgICAgICAgICAgICAgICAgICAvLyBhcyBhbiBJRCBpdCBpcyBsZXNzIHRoYW4gaWRlYWwuIEluIGxhcmdlciBwb2ludAorICAgICAgICAgICAgICAgICAgICAvLyByZWxlYXNlcywgbWF5IGJlIGJldHRlciB0byBqdXN0IGtpY2sgb3V0IGFuIGVycm9yLgorICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCB8fCAoaSA9PT0gMSAmJiBuYW1lWzJdID09PSAnLi4nKSB8fCBuYW1lW2kgLSAxXSA9PT0gJy4uJykgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuc3BsaWNlKGkgLSAxLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgLT0gMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vZW5kIHRyaW1Eb3RzCisKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lLmpvaW4oJy8nKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vQXBwbHkgbWFwIGNvbmZpZyBpZiBhdmFpbGFibGUuCisgICAgICAgIGlmICgoYmFzZVBhcnRzIHx8IHN0YXJNYXApICYmIG1hcCkgeworICAgICAgICAgICAgbmFtZVBhcnRzID0gbmFtZS5zcGxpdCgnLycpOworCisgICAgICAgICAgICBmb3IgKGkgPSBuYW1lUGFydHMubGVuZ3RoOyBpID4gMDsgaSAtPSAxKSB7CisgICAgICAgICAgICAgICAgbmFtZVNlZ21lbnQgPSBuYW1lUGFydHMuc2xpY2UoMCwgaSkuam9pbigiLyIpOworCisgICAgICAgICAgICAgICAgaWYgKGJhc2VQYXJ0cykgeworICAgICAgICAgICAgICAgICAgICAvL0ZpbmQgdGhlIGxvbmdlc3QgYmFzZU5hbWUgc2VnbWVudCBtYXRjaCBpbiB0aGUgY29uZmlnLgorICAgICAgICAgICAgICAgICAgICAvL1NvLCBkbyBqb2lucyBvbiB0aGUgYmlnZ2VzdCB0byBzbWFsbGVzdCBsZW5ndGhzIG9mIGJhc2VQYXJ0cy4KKyAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gYmFzZVBhcnRzLmxlbmd0aDsgaiA+IDA7IGogLT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBtYXBbYmFzZVBhcnRzLnNsaWNlKDAsIGopLmpvaW4oJy8nKV07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vYmFzZU5hbWUgc2VnbWVudCBoYXMgIGNvbmZpZywgZmluZCBpZiBpdCBoYXMgb25lIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzIG5hbWUuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBWYWx1ZSA9IG1hcFZhbHVlW25hbWVTZWdtZW50XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXRjaCwgdXBkYXRlIG5hbWUgdG8gdGhlIG5ldyB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRNYXAgPSBtYXBWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJID0gaTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGZvdW5kTWFwKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vQ2hlY2sgZm9yIGEgc3RhciBtYXAgbWF0Y2gsIGJ1dCBqdXN0IGhvbGQgb24gdG8gaXQsCisgICAgICAgICAgICAgICAgLy9pZiB0aGVyZSBpcyBhIHNob3J0ZXIgc2VnbWVudCBtYXRjaCBsYXRlciBpbiBhIG1hdGNoaW5nCisgICAgICAgICAgICAgICAgLy9jb25maWcsIHRoZW4gZmF2b3Igb3ZlciB0aGlzIHN0YXIgbWFwLgorICAgICAgICAgICAgICAgIGlmICghZm91bmRTdGFyTWFwICYmIHN0YXJNYXAgJiYgc3Rhck1hcFtuYW1lU2VnbWVudF0pIHsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRTdGFyTWFwID0gc3Rhck1hcFtuYW1lU2VnbWVudF07CisgICAgICAgICAgICAgICAgICAgIHN0YXJJID0gaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZm91bmRNYXAgJiYgZm91bmRTdGFyTWFwKSB7CisgICAgICAgICAgICAgICAgZm91bmRNYXAgPSBmb3VuZFN0YXJNYXA7CisgICAgICAgICAgICAgICAgZm91bmRJID0gc3Rhckk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmb3VuZE1hcCkgeworICAgICAgICAgICAgICAgIG5hbWVQYXJ0cy5zcGxpY2UoMCwgZm91bmRJLCBmb3VuZE1hcCk7CisgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWVQYXJ0cy5qb2luKCcvJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBtYWtlUmVxdWlyZShyZWxOYW1lLCBmb3JjZVN5bmMpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIC8vQSB2ZXJzaW9uIG9mIGEgcmVxdWlyZSBmdW5jdGlvbiB0aGF0IHBhc3NlcyBhIG1vZHVsZU5hbWUKKyAgICAgICAgICAgIC8vdmFsdWUgZm9yIGl0ZW1zIHRoYXQgbWF5IG5lZWQgdG8KKyAgICAgICAgICAgIC8vbG9vayB1cCBwYXRocyByZWxhdGl2ZSB0byB0aGUgbW9kdWxlTmFtZQorICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcHMuY2FsbChhcmd1bWVudHMsIDApOworCisgICAgICAgICAgICAvL0lmIGZpcnN0IGFyZyBpcyBub3QgcmVxdWlyZSgnc3RyaW5nJyksIGFuZCB0aGVyZSBpcyBvbmx5CisgICAgICAgICAgICAvL29uZSBhcmcsIGl0IGlzIHRoZSBhcnJheSBmb3JtIHdpdGhvdXQgYSBjYWxsYmFjay4gSW5zZXJ0CisgICAgICAgICAgICAvL2EgbnVsbCBzbyB0aGF0IHRoZSBmb2xsb3dpbmcgY29uY2F0IGlzIGNvcnJlY3QuCisgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gIT09ICdzdHJpbmcnICYmIGFyZ3MubGVuZ3RoID09PSAxKSB7CisgICAgICAgICAgICAgICAgYXJncy5wdXNoKG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlcS5hcHBseSh1bmRlZiwgYXJncy5jb25jYXQoW3JlbE5hbWUsIGZvcmNlU3luY10pKTsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBtYWtlTm9ybWFsaXplKHJlbE5hbWUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKG5hbWUsIHJlbE5hbWUpOworICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIG1ha2VMb2FkKGRlcE5hbWUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgZGVmaW5lZFtkZXBOYW1lXSA9IHZhbHVlOworICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIGNhbGxEZXAobmFtZSkgeworICAgICAgICBpZiAoaGFzUHJvcCh3YWl0aW5nLCBuYW1lKSkgeworICAgICAgICAgICAgdmFyIGFyZ3MgPSB3YWl0aW5nW25hbWVdOworICAgICAgICAgICAgZGVsZXRlIHdhaXRpbmdbbmFtZV07CisgICAgICAgICAgICBkZWZpbmluZ1tuYW1lXSA9IHRydWU7CisgICAgICAgICAgICBtYWluLmFwcGx5KHVuZGVmLCBhcmdzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaGFzUHJvcChkZWZpbmVkLCBuYW1lKSAmJiAhaGFzUHJvcChkZWZpbmluZywgbmFtZSkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gJyArIG5hbWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBkZWZpbmVkW25hbWVdOworICAgIH0KKworICAgIC8vVHVybnMgYSBwbHVnaW4hcmVzb3VyY2UgdG8gW3BsdWdpbiwgcmVzb3VyY2VdCisgICAgLy93aXRoIHRoZSBwbHVnaW4gYmVpbmcgdW5kZWZpbmVkIGlmIHRoZSBuYW1lCisgICAgLy9kaWQgbm90IGhhdmUgYSBwbHVnaW4gcHJlZml4LgorICAgIGZ1bmN0aW9uIHNwbGl0UHJlZml4KG5hbWUpIHsKKyAgICAgICAgdmFyIHByZWZpeCwKKyAgICAgICAgICAgIGluZGV4ID0gbmFtZSA/IG5hbWUuaW5kZXhPZignIScpIDogLTE7CisgICAgICAgIGlmIChpbmRleCA+IC0xKSB7CisgICAgICAgICAgICBwcmVmaXggPSBuYW1lLnN1YnN0cmluZygwLCBpbmRleCk7CisgICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxLCBuYW1lLmxlbmd0aCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFtwcmVmaXgsIG5hbWVdOworICAgIH0KKworICAgIC8vQ3JlYXRlcyBhIHBhcnRzIGFycmF5IGZvciBhIHJlbE5hbWUgd2hlcmUgZmlyc3QgcGFydCBpcyBwbHVnaW4gSUQsCisgICAgLy9zZWNvbmQgcGFydCBpcyByZXNvdXJjZSBJRC4gQXNzdW1lcyByZWxOYW1lIGhhcyBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4KKyAgICBmdW5jdGlvbiBtYWtlUmVsUGFydHMocmVsTmFtZSkgeworICAgICAgICByZXR1cm4gcmVsTmFtZSA/IHNwbGl0UHJlZml4KHJlbE5hbWUpIDogW107CisgICAgfQorCisgICAgLyoqCisgICAgICogTWFrZXMgYSBuYW1lIG1hcCwgbm9ybWFsaXppbmcgdGhlIG5hbWUsIGFuZCB1c2luZyBhIHBsdWdpbgorICAgICAqIGZvciBub3JtYWxpemF0aW9uIGlmIG5lY2Vzc2FyeS4gR3JhYnMgYSByZWYgdG8gcGx1Z2luCisgICAgICogdG9vLCBhcyBhbiBvcHRpbWl6YXRpb24uCisgICAgICovCisgICAgbWFrZU1hcCA9IGZ1bmN0aW9uIChuYW1lLCByZWxQYXJ0cykgeworICAgICAgICB2YXIgcGx1Z2luLAorICAgICAgICAgICAgcGFydHMgPSBzcGxpdFByZWZpeChuYW1lKSwKKyAgICAgICAgICAgIHByZWZpeCA9IHBhcnRzWzBdLAorICAgICAgICAgICAgcmVsUmVzb3VyY2VOYW1lID0gcmVsUGFydHNbMV07CisKKyAgICAgICAgbmFtZSA9IHBhcnRzWzFdOworCisgICAgICAgIGlmIChwcmVmaXgpIHsKKyAgICAgICAgICAgIHByZWZpeCA9IG5vcm1hbGl6ZShwcmVmaXgsIHJlbFJlc291cmNlTmFtZSk7CisgICAgICAgICAgICBwbHVnaW4gPSBjYWxsRGVwKHByZWZpeCk7CisgICAgICAgIH0KKworICAgICAgICAvL05vcm1hbGl6ZSBhY2NvcmRpbmcKKyAgICAgICAgaWYgKHByZWZpeCkgeworICAgICAgICAgICAgaWYgKHBsdWdpbiAmJiBwbHVnaW4ubm9ybWFsaXplKSB7CisgICAgICAgICAgICAgICAgbmFtZSA9IHBsdWdpbi5ub3JtYWxpemUobmFtZSwgbWFrZU5vcm1hbGl6ZShyZWxSZXNvdXJjZU5hbWUpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbmFtZSA9IG5vcm1hbGl6ZShuYW1lLCByZWxSZXNvdXJjZU5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmFtZSA9IG5vcm1hbGl6ZShuYW1lLCByZWxSZXNvdXJjZU5hbWUpOworICAgICAgICAgICAgcGFydHMgPSBzcGxpdFByZWZpeChuYW1lKTsKKyAgICAgICAgICAgIHByZWZpeCA9IHBhcnRzWzBdOworICAgICAgICAgICAgbmFtZSA9IHBhcnRzWzFdOworICAgICAgICAgICAgaWYgKHByZWZpeCkgeworICAgICAgICAgICAgICAgIHBsdWdpbiA9IGNhbGxEZXAocHJlZml4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vVXNpbmcgcmlkaWN1bG91cyBwcm9wZXJ0eSBuYW1lcyBmb3Igc3BhY2UgcmVhc29ucworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgZjogcHJlZml4ID8gcHJlZml4ICsgJyEnICsgbmFtZSA6IG5hbWUsIC8vZnVsbE5hbWUKKyAgICAgICAgICAgIG46IG5hbWUsCisgICAgICAgICAgICBwcjogcHJlZml4LAorICAgICAgICAgICAgcDogcGx1Z2luCisgICAgICAgIH07CisgICAgfTsKKworICAgIGZ1bmN0aW9uIG1ha2VDb25maWcobmFtZSkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIChjb25maWcgJiYgY29uZmlnLmNvbmZpZyAmJiBjb25maWcuY29uZmlnW25hbWVdKSB8fCB7fTsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBoYW5kbGVycyA9IHsKKyAgICAgICAgcmVxdWlyZTogZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlUmVxdWlyZShuYW1lKTsKKyAgICAgICAgfSwKKyAgICAgICAgZXhwb3J0czogZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgICAgIHZhciBlID0gZGVmaW5lZFtuYW1lXTsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgZSAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChkZWZpbmVkW25hbWVdID0ge30pOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBtb2R1bGU6IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIGlkOiBuYW1lLAorICAgICAgICAgICAgICAgIHVyaTogJycsCisgICAgICAgICAgICAgICAgZXhwb3J0czogZGVmaW5lZFtuYW1lXSwKKyAgICAgICAgICAgICAgICBjb25maWc6IG1ha2VDb25maWcobmFtZSkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICB9OworCisgICAgbWFpbiA9IGZ1bmN0aW9uIChuYW1lLCBkZXBzLCBjYWxsYmFjaywgcmVsTmFtZSkgeworICAgICAgICB2YXIgY2pzTW9kdWxlLCBkZXBOYW1lLCByZXQsIG1hcCwgaSwgcmVsUGFydHMsCisgICAgICAgICAgICBhcmdzID0gW10sCisgICAgICAgICAgICBjYWxsYmFja1R5cGUgPSB0eXBlb2YgY2FsbGJhY2ssCisgICAgICAgICAgICB1c2luZ0V4cG9ydHM7CisKKyAgICAgICAgLy9Vc2UgbmFtZSBpZiBubyByZWxOYW1lCisgICAgICAgIHJlbE5hbWUgPSByZWxOYW1lIHx8IG5hbWU7CisgICAgICAgIHJlbFBhcnRzID0gbWFrZVJlbFBhcnRzKHJlbE5hbWUpOworCisgICAgICAgIC8vQ2FsbCB0aGUgY2FsbGJhY2sgdG8gZGVmaW5lIHRoZSBtb2R1bGUsIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGNhbGxiYWNrVHlwZSA9PT0gJ3VuZGVmaW5lZCcgfHwgY2FsbGJhY2tUeXBlID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICAvL1B1bGwgb3V0IHRoZSBkZWZpbmVkIGRlcGVuZGVuY2llcyBhbmQgcGFzcyB0aGUgb3JkZXJlZAorICAgICAgICAgICAgLy92YWx1ZXMgdG8gdGhlIGNhbGxiYWNrLgorICAgICAgICAgICAgLy9EZWZhdWx0IHRvIFtyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGVdIGlmIG5vIGRlcHMKKyAgICAgICAgICAgIGRlcHMgPSAhZGVwcy5sZW5ndGggJiYgY2FsbGJhY2subGVuZ3RoID8gWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJ10gOiBkZXBzOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRlcHMubGVuZ3RoOyBpICs9IDEpIHsKKyAgICAgICAgICAgICAgICBtYXAgPSBtYWtlTWFwKGRlcHNbaV0sIHJlbFBhcnRzKTsKKyAgICAgICAgICAgICAgICBkZXBOYW1lID0gbWFwLmY7CisKKyAgICAgICAgICAgICAgICAvL0Zhc3QgcGF0aCBDb21tb25KUyBzdGFuZGFyZCBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgaWYgKGRlcE5hbWUgPT09ICJyZXF1aXJlIikgeworICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gaGFuZGxlcnMucmVxdWlyZShuYW1lKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlcE5hbWUgPT09ICJleHBvcnRzIikgeworICAgICAgICAgICAgICAgICAgICAvL0NvbW1vbkpTIG1vZHVsZSBzcGVjIDEuMQorICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gaGFuZGxlcnMuZXhwb3J0cyhuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgdXNpbmdFeHBvcnRzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlcE5hbWUgPT09ICJtb2R1bGUiKSB7CisgICAgICAgICAgICAgICAgICAgIC8vQ29tbW9uSlMgbW9kdWxlIHNwZWMgMS4xCisgICAgICAgICAgICAgICAgICAgIGNqc01vZHVsZSA9IGFyZ3NbaV0gPSBoYW5kbGVycy5tb2R1bGUobmFtZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoYXNQcm9wKGRlZmluZWQsIGRlcE5hbWUpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQcm9wKHdhaXRpbmcsIGRlcE5hbWUpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQcm9wKGRlZmluaW5nLCBkZXBOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gY2FsbERlcChkZXBOYW1lKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hcC5wKSB7CisgICAgICAgICAgICAgICAgICAgIG1hcC5wLmxvYWQobWFwLm4sIG1ha2VSZXF1aXJlKHJlbE5hbWUsIHRydWUpLCBtYWtlTG9hZChkZXBOYW1lKSwge30pOworICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gZGVmaW5lZFtkZXBOYW1lXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobmFtZSArICcgbWlzc2luZyAnICsgZGVwTmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXQgPSBjYWxsYmFjayA/IGNhbGxiYWNrLmFwcGx5KGRlZmluZWRbbmFtZV0sIGFyZ3MpIDogdW5kZWZpbmVkOworCisgICAgICAgICAgICBpZiAobmFtZSkgeworICAgICAgICAgICAgICAgIC8vSWYgc2V0dGluZyBleHBvcnRzIHZpYSAibW9kdWxlIiBpcyBpbiBwbGF5LAorICAgICAgICAgICAgICAgIC8vZmF2b3IgdGhhdCBvdmVyIHJldHVybiB2YWx1ZSBhbmQgZXhwb3J0cy4gQWZ0ZXIgdGhhdCwKKyAgICAgICAgICAgICAgICAvL2Zhdm9yIGEgbm9uLXVuZGVmaW5lZCByZXR1cm4gdmFsdWUgb3ZlciBleHBvcnRzIHVzZS4KKyAgICAgICAgICAgICAgICBpZiAoY2pzTW9kdWxlICYmIGNqc01vZHVsZS5leHBvcnRzICE9PSB1bmRlZiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgY2pzTW9kdWxlLmV4cG9ydHMgIT09IGRlZmluZWRbbmFtZV0pIHsKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lZFtuYW1lXSA9IGNqc01vZHVsZS5leHBvcnRzOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0ICE9PSB1bmRlZiB8fCAhdXNpbmdFeHBvcnRzKSB7CisgICAgICAgICAgICAgICAgICAgIC8vVXNlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIGRlZmluZWRbbmFtZV0gPSByZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG5hbWUpIHsKKyAgICAgICAgICAgIC8vTWF5IGp1c3QgYmUgYW4gb2JqZWN0IGRlZmluaXRpb24gZm9yIHRoZSBtb2R1bGUuIE9ubHkKKyAgICAgICAgICAgIC8vd29ycnkgYWJvdXQgZGVmaW5pbmcgaWYgaGF2ZSBhIG1vZHVsZSBuYW1lLgorICAgICAgICAgICAgZGVmaW5lZFtuYW1lXSA9IGNhbGxiYWNrOworICAgICAgICB9CisgICAgfTsKKworICAgIHJlcXVpcmVqcyA9IHJlcXVpcmUgPSByZXEgPSBmdW5jdGlvbiAoZGVwcywgY2FsbGJhY2ssIHJlbE5hbWUsIGZvcmNlU3luYywgYWx0KSB7CisgICAgICAgIGlmICh0eXBlb2YgZGVwcyA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgIGlmIChoYW5kbGVyc1tkZXBzXSkgeworICAgICAgICAgICAgICAgIC8vY2FsbGJhY2sgaW4gdGhpcyBjYXNlIGlzIHJlYWxseSByZWxOYW1lCisgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXJzW2RlcHNdKGNhbGxiYWNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vSnVzdCByZXR1cm4gdGhlIG1vZHVsZSB3YW50ZWQuIEluIHRoaXMgc2NlbmFyaW8sIHRoZQorICAgICAgICAgICAgLy9kZXBzIGFyZyBpcyB0aGUgbW9kdWxlIG5hbWUsIGFuZCBzZWNvbmQgYXJnIChpZiBwYXNzZWQpCisgICAgICAgICAgICAvL2lzIGp1c3QgdGhlIHJlbE5hbWUuCisgICAgICAgICAgICAvL05vcm1hbGl6ZSBtb2R1bGUgbmFtZSwgaWYgaXQgY29udGFpbnMgLiBvciAuLgorICAgICAgICAgICAgcmV0dXJuIGNhbGxEZXAobWFrZU1hcChkZXBzLCBtYWtlUmVsUGFydHMoY2FsbGJhY2spKS5mKTsKKyAgICAgICAgfSBlbHNlIGlmICghZGVwcy5zcGxpY2UpIHsKKyAgICAgICAgICAgIC8vZGVwcyBpcyBhIGNvbmZpZyBvYmplY3QsIG5vdCBhbiBhcnJheS4KKyAgICAgICAgICAgIGNvbmZpZyA9IGRlcHM7CisgICAgICAgICAgICBpZiAoY29uZmlnLmRlcHMpIHsKKyAgICAgICAgICAgICAgICByZXEoY29uZmlnLmRlcHMsIGNvbmZpZy5jYWxsYmFjayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2FsbGJhY2suc3BsaWNlKSB7CisgICAgICAgICAgICAgICAgLy9jYWxsYmFjayBpcyBhbiBhcnJheSwgd2hpY2ggbWVhbnMgaXQgaXMgYSBkZXBlbmRlbmN5IGxpc3QuCisgICAgICAgICAgICAgICAgLy9BZGp1c3QgYXJncyBpZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgZGVwcyA9IGNhbGxiYWNrOworICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcmVsTmFtZTsKKyAgICAgICAgICAgICAgICByZWxOYW1lID0gbnVsbDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVwcyA9IHVuZGVmOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy9TdXBwb3J0IHJlcXVpcmUoWydhJ10pCisgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307CisKKyAgICAgICAgLy9JZiByZWxOYW1lIGlzIGEgZnVuY3Rpb24sIGl0IGlzIGFuIGVycmJhY2sgaGFuZGxlciwKKyAgICAgICAgLy9zbyByZW1vdmUgaXQuCisgICAgICAgIGlmICh0eXBlb2YgcmVsTmFtZSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgICAgcmVsTmFtZSA9IGZvcmNlU3luYzsKKyAgICAgICAgICAgIGZvcmNlU3luYyA9IGFsdDsKKyAgICAgICAgfQorCisgICAgICAgIC8vU2ltdWxhdGUgYXN5bmMgY2FsbGJhY2s7CisgICAgICAgIGlmIChmb3JjZVN5bmMpIHsKKyAgICAgICAgICAgIG1haW4odW5kZWYsIGRlcHMsIGNhbGxiYWNrLCByZWxOYW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vVXNpbmcgYSBub24temVybyB2YWx1ZSBiZWNhdXNlIG9mIGNvbmNlcm4gZm9yIHdoYXQgb2xkIGJyb3dzZXJzCisgICAgICAgICAgICAvL2RvLCBhbmQgbGF0ZXN0IGJyb3dzZXJzICJ1cGdyYWRlIiB0byA0IGlmIGxvd2VyIHZhbHVlIGlzIHVzZWQ6CisgICAgICAgICAgICAvL2h0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RpbWVycy5odG1sI2RvbS13aW5kb3d0aW1lcnMtc2V0dGltZW91dDoKKyAgICAgICAgICAgIC8vSWYgd2FudCBhIHZhbHVlIGltbWVkaWF0ZWx5LCB1c2UgcmVxdWlyZSgnaWQnKSBpbnN0ZWFkIC0tIHNvbWV0aGluZworICAgICAgICAgICAgLy90aGF0IHdvcmtzIGluIGFsbW9uZCBvbiB0aGUgZ2xvYmFsIGxldmVsLCBidXQgbm90IGd1YXJhbnRlZWQgYW5kCisgICAgICAgICAgICAvL3VubGlrZWx5IHRvIHdvcmsgaW4gb3RoZXIgQU1EIGltcGxlbWVudGF0aW9ucy4KKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIG1haW4odW5kZWYsIGRlcHMsIGNhbGxiYWNrLCByZWxOYW1lKTsKKyAgICAgICAgICAgIH0sIDQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlcTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogSnVzdCBkcm9wcyB0aGUgY29uZmlnIG9uIHRoZSBmbG9vciwgYnV0IHJldHVybnMgcmVxIGluIGNhc2UKKyAgICAgKiB0aGUgY29uZmlnIHJldHVybiB2YWx1ZSBpcyB1c2VkLgorICAgICAqLworICAgIHJlcS5jb25maWcgPSBmdW5jdGlvbiAoY2ZnKSB7CisgICAgICAgIHJldHVybiByZXEoY2ZnKTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogRXhwb3NlIG1vZHVsZSByZWdpc3RyeSBmb3IgZGVidWdnaW5nIGFuZCB0b29saW5nCisgICAgICovCisgICAgcmVxdWlyZWpzLl9kZWZpbmVkID0gZGVmaW5lZDsKKworICAgIGRlZmluZSA9IGZ1bmN0aW9uIChuYW1lLCBkZXBzLCBjYWxsYmFjaykgeworICAgICAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlZSBhbG1vbmQgUkVBRE1FOiBpbmNvcnJlY3QgbW9kdWxlIGJ1aWxkLCBubyBtb2R1bGUgbmFtZScpOworICAgICAgICB9CisKKyAgICAgICAgLy9UaGlzIG1vZHVsZSBtYXkgbm90IGhhdmUgZGVwZW5kZW5jaWVzCisgICAgICAgIGlmICghZGVwcy5zcGxpY2UpIHsKKyAgICAgICAgICAgIC8vZGVwcyBpcyBub3QgYW4gYXJyYXksIHNvIHByb2JhYmx5IG1lYW5zCisgICAgICAgICAgICAvL2FuIG9iamVjdCBsaXRlcmFsIG9yIGZhY3RvcnkgZnVuY3Rpb24gZm9yCisgICAgICAgICAgICAvL3RoZSB2YWx1ZS4gQWRqdXN0IGFyZ3MuCisgICAgICAgICAgICBjYWxsYmFjayA9IGRlcHM7CisgICAgICAgICAgICBkZXBzID0gW107CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgbmFtZSkgJiYgIWhhc1Byb3Aod2FpdGluZywgbmFtZSkpIHsKKyAgICAgICAgICAgIHdhaXRpbmdbbmFtZV0gPSBbbmFtZSwgZGVwcywgY2FsbGJhY2tdOworICAgICAgICB9CisgICAgfTsKKworICAgIGRlZmluZS5hbWQgPSB7CisgICAgICAgIGpRdWVyeTogdHJ1ZQorICAgIH07Cit9KCkpOworCitTMi5yZXF1aXJlanMgPSByZXF1aXJlanM7UzIucmVxdWlyZSA9IHJlcXVpcmU7UzIuZGVmaW5lID0gZGVmaW5lOworfQorfSgpKTsKK1MyLmRlZmluZSgiYWxtb25kIiwgZnVuY3Rpb24oKXt9KTsKKworLyogZ2xvYmFsIGpRdWVyeTpmYWxzZSwgJDpmYWxzZSAqLworUzIuZGVmaW5lKCdqcXVlcnknLFtdLGZ1bmN0aW9uICgpIHsKKyAgdmFyIF8kID0galF1ZXJ5IHx8ICQ7CisKKyAgaWYgKF8kID09IG51bGwgJiYgY29uc29sZSAmJiBjb25zb2xlLmVycm9yKSB7CisgICAgY29uc29sZS5lcnJvcigKKyAgICAgICdTZWxlY3QyOiBBbiBpbnN0YW5jZSBvZiBqUXVlcnkgb3IgYSBqUXVlcnktY29tcGF0aWJsZSBsaWJyYXJ5IHdhcyBub3QgJyArCisgICAgICAnZm91bmQuIE1ha2Ugc3VyZSB0aGF0IHlvdSBhcmUgaW5jbHVkaW5nIGpRdWVyeSBiZWZvcmUgU2VsZWN0MiBvbiB5b3VyICcgKworICAgICAgJ3dlYiBwYWdlLicKKyAgICApOworICB9CisKKyAgcmV0dXJuIF8kOworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi91dGlscycsWworICAnanF1ZXJ5JworXSwgZnVuY3Rpb24gKCQpIHsKKyAgdmFyIFV0aWxzID0ge307CisKKyAgVXRpbHMuRXh0ZW5kID0gZnVuY3Rpb24gKENoaWxkQ2xhc3MsIFN1cGVyQ2xhc3MpIHsKKyAgICB2YXIgX19oYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7CisKKyAgICBmdW5jdGlvbiBCYXNlQ29uc3RydWN0b3IgKCkgeworICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IENoaWxkQ2xhc3M7CisgICAgfQorCisgICAgZm9yICh2YXIga2V5IGluIFN1cGVyQ2xhc3MpIHsKKyAgICAgIGlmIChfX2hhc1Byb3AuY2FsbChTdXBlckNsYXNzLCBrZXkpKSB7CisgICAgICAgIENoaWxkQ2xhc3Nba2V5XSA9IFN1cGVyQ2xhc3Nba2V5XTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBCYXNlQ29uc3RydWN0b3IucHJvdG90eXBlID0gU3VwZXJDbGFzcy5wcm90b3R5cGU7CisgICAgQ2hpbGRDbGFzcy5wcm90b3R5cGUgPSBuZXcgQmFzZUNvbnN0cnVjdG9yKCk7CisgICAgQ2hpbGRDbGFzcy5fX3N1cGVyX18gPSBTdXBlckNsYXNzLnByb3RvdHlwZTsKKworICAgIHJldHVybiBDaGlsZENsYXNzOworICB9OworCisgIGZ1bmN0aW9uIGdldE1ldGhvZHMgKHRoZUNsYXNzKSB7CisgICAgdmFyIHByb3RvID0gdGhlQ2xhc3MucHJvdG90eXBlOworCisgICAgdmFyIG1ldGhvZHMgPSBbXTsKKworICAgIGZvciAodmFyIG1ldGhvZE5hbWUgaW4gcHJvdG8pIHsKKyAgICAgIHZhciBtID0gcHJvdG9bbWV0aG9kTmFtZV07CisKKyAgICAgIGlmICh0eXBlb2YgbSAhPT0gJ2Z1bmN0aW9uJykgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgaWYgKG1ldGhvZE5hbWUgPT09ICdjb25zdHJ1Y3RvcicpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIG1ldGhvZHMucHVzaChtZXRob2ROYW1lKTsKKyAgICB9CisKKyAgICByZXR1cm4gbWV0aG9kczsKKyAgfQorCisgIFV0aWxzLkRlY29yYXRlID0gZnVuY3Rpb24gKFN1cGVyQ2xhc3MsIERlY29yYXRvckNsYXNzKSB7CisgICAgdmFyIGRlY29yYXRlZE1ldGhvZHMgPSBnZXRNZXRob2RzKERlY29yYXRvckNsYXNzKTsKKyAgICB2YXIgc3VwZXJNZXRob2RzID0gZ2V0TWV0aG9kcyhTdXBlckNsYXNzKTsKKworICAgIGZ1bmN0aW9uIERlY29yYXRlZENsYXNzICgpIHsKKyAgICAgIHZhciB1bnNoaWZ0ID0gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQ7CisKKyAgICAgIHZhciBhcmdDb3VudCA9IERlY29yYXRvckNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5sZW5ndGg7CisKKyAgICAgIHZhciBjYWxsZWRDb25zdHJ1Y3RvciA9IFN1cGVyQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yOworCisgICAgICBpZiAoYXJnQ291bnQgPiAwKSB7CisgICAgICAgIHVuc2hpZnQuY2FsbChhcmd1bWVudHMsIFN1cGVyQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yKTsKKworICAgICAgICBjYWxsZWRDb25zdHJ1Y3RvciA9IERlY29yYXRvckNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjsKKyAgICAgIH0KKworICAgICAgY2FsbGVkQ29uc3RydWN0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB9CisKKyAgICBEZWNvcmF0b3JDbGFzcy5kaXNwbGF5TmFtZSA9IFN1cGVyQ2xhc3MuZGlzcGxheU5hbWU7CisKKyAgICBmdW5jdGlvbiBjdHIgKCkgeworICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IERlY29yYXRlZENsYXNzOworICAgIH0KKworICAgIERlY29yYXRlZENsYXNzLnByb3RvdHlwZSA9IG5ldyBjdHIoKTsKKworICAgIGZvciAodmFyIG0gPSAwOyBtIDwgc3VwZXJNZXRob2RzLmxlbmd0aDsgbSsrKSB7CisgICAgICB2YXIgc3VwZXJNZXRob2QgPSBzdXBlck1ldGhvZHNbbV07CisKKyAgICAgIERlY29yYXRlZENsYXNzLnByb3RvdHlwZVtzdXBlck1ldGhvZF0gPQorICAgICAgICBTdXBlckNsYXNzLnByb3RvdHlwZVtzdXBlck1ldGhvZF07CisgICAgfQorCisgICAgdmFyIGNhbGxlZE1ldGhvZCA9IGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7CisgICAgICAvLyBTdHViIG91dCB0aGUgb3JpZ2luYWwgbWV0aG9kIGlmIGl0J3Mgbm90IGRlY29yYXRpbmcgYW4gYWN0dWFsIG1ldGhvZAorICAgICAgdmFyIG9yaWdpbmFsTWV0aG9kID0gZnVuY3Rpb24gKCkge307CisKKyAgICAgIGlmIChtZXRob2ROYW1lIGluIERlY29yYXRlZENsYXNzLnByb3RvdHlwZSkgeworICAgICAgICBvcmlnaW5hbE1ldGhvZCA9IERlY29yYXRlZENsYXNzLnByb3RvdHlwZVttZXRob2ROYW1lXTsKKyAgICAgIH0KKworICAgICAgdmFyIGRlY29yYXRlZE1ldGhvZCA9IERlY29yYXRvckNsYXNzLnByb3RvdHlwZVttZXRob2ROYW1lXTsKKworICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHVuc2hpZnQgPSBBcnJheS5wcm90b3R5cGUudW5zaGlmdDsKKworICAgICAgICB1bnNoaWZ0LmNhbGwoYXJndW1lbnRzLCBvcmlnaW5hbE1ldGhvZCk7CisKKyAgICAgICAgcmV0dXJuIGRlY29yYXRlZE1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgfTsKKyAgICB9OworCisgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkZWNvcmF0ZWRNZXRob2RzLmxlbmd0aDsgZCsrKSB7CisgICAgICB2YXIgZGVjb3JhdGVkTWV0aG9kID0gZGVjb3JhdGVkTWV0aG9kc1tkXTsKKworICAgICAgRGVjb3JhdGVkQ2xhc3MucHJvdG90eXBlW2RlY29yYXRlZE1ldGhvZF0gPSBjYWxsZWRNZXRob2QoZGVjb3JhdGVkTWV0aG9kKTsKKyAgICB9CisKKyAgICByZXR1cm4gRGVjb3JhdGVkQ2xhc3M7CisgIH07CisKKyAgdmFyIE9ic2VydmFibGUgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy5saXN0ZW5lcnMgPSB7fTsKKyAgfTsKKworICBPYnNlcnZhYmxlLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHsKKyAgICB0aGlzLmxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzIHx8IHt9OworCisgICAgaWYgKGV2ZW50IGluIHRoaXMubGlzdGVuZXJzKSB7CisgICAgICB0aGlzLmxpc3RlbmVyc1tldmVudF0ucHVzaChjYWxsYmFjayk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMubGlzdGVuZXJzW2V2ZW50XSA9IFtjYWxsYmFja107CisgICAgfQorICB9OworCisgIE9ic2VydmFibGUucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7CisgICAgdmFyIHBhcmFtcyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKKworICAgIHRoaXMubGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnMgfHwge307CisKKyAgICAvLyBQYXJhbXMgc2hvdWxkIGFsd2F5cyBjb21lIGluIGFzIGFuIGFycmF5CisgICAgaWYgKHBhcmFtcyA9PSBudWxsKSB7CisgICAgICBwYXJhbXMgPSBbXTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGVyZSBhcmUgbm8gYXJndW1lbnRzIHRvIHRoZSBldmVudCwgdXNlIGEgdGVtcG9yYXJ5IG9iamVjdAorICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAwKSB7CisgICAgICBwYXJhbXMucHVzaCh7fSk7CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBgX3R5cGVgIG9mIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIGV2ZW50CisgICAgcGFyYW1zWzBdLl90eXBlID0gZXZlbnQ7CisKKyAgICBpZiAoZXZlbnQgaW4gdGhpcy5saXN0ZW5lcnMpIHsKKyAgICAgIHRoaXMuaW52b2tlKHRoaXMubGlzdGVuZXJzW2V2ZW50XSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTsKKyAgICB9CisKKyAgICBpZiAoJyonIGluIHRoaXMubGlzdGVuZXJzKSB7CisgICAgICB0aGlzLmludm9rZSh0aGlzLmxpc3RlbmVyc1snKiddLCBhcmd1bWVudHMpOworICAgIH0KKyAgfTsKKworICBPYnNlcnZhYmxlLnByb3RvdHlwZS5pbnZva2UgPSBmdW5jdGlvbiAobGlzdGVuZXJzLCBwYXJhbXMpIHsKKyAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICBsaXN0ZW5lcnNbaV0uYXBwbHkodGhpcywgcGFyYW1zKTsKKyAgICB9CisgIH07CisKKyAgVXRpbHMuT2JzZXJ2YWJsZSA9IE9ic2VydmFibGU7CisKKyAgVXRpbHMuZ2VuZXJhdGVDaGFycyA9IGZ1bmN0aW9uIChsZW5ndGgpIHsKKyAgICB2YXIgY2hhcnMgPSAnJzsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciByYW5kb21DaGFyID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMzYpOworICAgICAgY2hhcnMgKz0gcmFuZG9tQ2hhci50b1N0cmluZygzNik7CisgICAgfQorCisgICAgcmV0dXJuIGNoYXJzOworICB9OworCisgIFV0aWxzLmJpbmQgPSBmdW5jdGlvbiAoZnVuYywgY29udGV4dCkgeworICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7CisgICAgfTsKKyAgfTsKKworICBVdGlscy5fY29udmVydERhdGEgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgIGZvciAodmFyIG9yaWdpbmFsS2V5IGluIGRhdGEpIHsKKyAgICAgIHZhciBrZXlzID0gb3JpZ2luYWxLZXkuc3BsaXQoJy0nKTsKKworICAgICAgdmFyIGRhdGFMZXZlbCA9IGRhdGE7CisKKyAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBrZXlzLmxlbmd0aDsgaysrKSB7CisgICAgICAgIHZhciBrZXkgPSBrZXlzW2tdOworCisgICAgICAgIC8vIExvd2VyY2FzZSB0aGUgZmlyc3QgbGV0dGVyCisgICAgICAgIC8vIEJ5IGRlZmF1bHQsIGRhc2gtc2VwYXJhdGVkIGJlY29tZXMgY2FtZWxDYXNlCisgICAgICAgIGtleSA9IGtleS5zdWJzdHJpbmcoMCwgMSkudG9Mb3dlckNhc2UoKSArIGtleS5zdWJzdHJpbmcoMSk7CisKKyAgICAgICAgaWYgKCEoa2V5IGluIGRhdGFMZXZlbCkpIHsKKyAgICAgICAgICBkYXRhTGV2ZWxba2V5XSA9IHt9OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGsgPT0ga2V5cy5sZW5ndGggLSAxKSB7CisgICAgICAgICAgZGF0YUxldmVsW2tleV0gPSBkYXRhW29yaWdpbmFsS2V5XTsKKyAgICAgICAgfQorCisgICAgICAgIGRhdGFMZXZlbCA9IGRhdGFMZXZlbFtrZXldOworICAgICAgfQorCisgICAgICBkZWxldGUgZGF0YVtvcmlnaW5hbEtleV07CisgICAgfQorCisgICAgcmV0dXJuIGRhdGE7CisgIH07CisKKyAgVXRpbHMuaGFzU2Nyb2xsID0gZnVuY3Rpb24gKGluZGV4LCBlbCkgeworICAgIC8vIEFkYXB0ZWQgZnJvbSB0aGUgZnVuY3Rpb24gY3JlYXRlZCBieSBAU2hhZG93U2NyaXB0ZXIKKyAgICAvLyBhbmQgYWRhcHRlZCBieSBAQmlsbEJhcnJ5IG9uIHRoZSBTdGFjayBFeGNoYW5nZSBDb2RlIFJldmlldyB3ZWJzaXRlLgorICAgIC8vIFRoZSBvcmlnaW5hbCBjb2RlIGNhbiBiZSBmb3VuZCBhdAorICAgIC8vIGh0dHA6Ly9jb2RlcmV2aWV3LnN0YWNrZXhjaGFuZ2UuY29tL3EvMTMzMzgKKyAgICAvLyBhbmQgd2FzIGRlc2lnbmVkIHRvIGJlIHVzZWQgd2l0aCB0aGUgU2l6emxlIHNlbGVjdG9yIGVuZ2luZS4KKworICAgIHZhciAkZWwgPSAkKGVsKTsKKyAgICB2YXIgb3ZlcmZsb3dYID0gZWwuc3R5bGUub3ZlcmZsb3dYOworICAgIHZhciBvdmVyZmxvd1kgPSBlbC5zdHlsZS5vdmVyZmxvd1k7CisKKyAgICAvL0NoZWNrIGJvdGggeCBhbmQgeSBkZWNsYXJhdGlvbnMKKyAgICBpZiAob3ZlcmZsb3dYID09PSBvdmVyZmxvd1kgJiYKKyAgICAgICAgKG92ZXJmbG93WSA9PT0gJ2hpZGRlbicgfHwgb3ZlcmZsb3dZID09PSAndmlzaWJsZScpKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG92ZXJmbG93WCA9PT0gJ3Njcm9sbCcgfHwgb3ZlcmZsb3dZID09PSAnc2Nyb2xsJykgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuICgkZWwuaW5uZXJIZWlnaHQoKSA8IGVsLnNjcm9sbEhlaWdodCB8fAorICAgICAgJGVsLmlubmVyV2lkdGgoKSA8IGVsLnNjcm9sbFdpZHRoKTsKKyAgfTsKKworICBVdGlscy5lc2NhcGVNYXJrdXAgPSBmdW5jdGlvbiAobWFya3VwKSB7CisgICAgdmFyIHJlcGxhY2VNYXAgPSB7CisgICAgICAnXFwnOiAnJiM5MjsnLAorICAgICAgJyYnOiAnJmFtcDsnLAorICAgICAgJzwnOiAnJmx0OycsCisgICAgICAnPic6ICcmZ3Q7JywKKyAgICAgICciJzogJyZxdW90OycsCisgICAgICAnXCcnOiAnJiMzOTsnLAorICAgICAgJy8nOiAnJiM0NzsnCisgICAgfTsKKworICAgIC8vIERvIG5vdCB0cnkgdG8gZXNjYXBlIHRoZSBtYXJrdXAgaWYgaXQncyBub3QgYSBzdHJpbmcKKyAgICBpZiAodHlwZW9mIG1hcmt1cCAhPT0gJ3N0cmluZycpIHsKKyAgICAgIHJldHVybiBtYXJrdXA7CisgICAgfQorCisgICAgcmV0dXJuIFN0cmluZyhtYXJrdXApLnJlcGxhY2UoL1smPD4iJ1wvXFxdL2csIGZ1bmN0aW9uIChtYXRjaCkgeworICAgICAgcmV0dXJuIHJlcGxhY2VNYXBbbWF0Y2hdOworICAgIH0pOworICB9OworCisgIC8vIEFwcGVuZCBhbiBhcnJheSBvZiBqUXVlcnkgbm9kZXMgdG8gYSBnaXZlbiBlbGVtZW50LgorICBVdGlscy5hcHBlbmRNYW55ID0gZnVuY3Rpb24gKCRlbGVtZW50LCAkbm9kZXMpIHsKKyAgICAvLyBqUXVlcnkgMS43LnggZG9lcyBub3Qgc3VwcG9ydCAkLmZuLmFwcGVuZCgpIHdpdGggYW4gYXJyYXkKKyAgICAvLyBGYWxsIGJhY2sgdG8gYSBqUXVlcnkgb2JqZWN0IGNvbGxlY3Rpb24gdXNpbmcgJC5mbi5hZGQoKQorICAgIGlmICgkLmZuLmpxdWVyeS5zdWJzdHIoMCwgMykgPT09ICcxLjcnKSB7CisgICAgICB2YXIgJGpxTm9kZXMgPSAkKCk7CisKKyAgICAgICQubWFwKCRub2RlcywgZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgJGpxTm9kZXMgPSAkanFOb2Rlcy5hZGQobm9kZSk7CisgICAgICB9KTsKKworICAgICAgJG5vZGVzID0gJGpxTm9kZXM7CisgICAgfQorCisgICAgJGVsZW1lbnQuYXBwZW5kKCRub2Rlcyk7CisgIH07CisKKyAgLy8gQ2FjaGUgb2JqZWN0cyBpbiBVdGlscy5fX2NhY2hlIGluc3RlYWQgb2YgJC5kYXRhIChzZWUgIzQzNDYpCisgIFV0aWxzLl9fY2FjaGUgPSB7fTsKKworICB2YXIgaWQgPSAwOworICBVdGlscy5HZXRVbmlxdWVFbGVtZW50SWQgPSBmdW5jdGlvbiAoZWxlbWVudCkgeworICAgIC8vIEdldCBhIHVuaXF1ZSBlbGVtZW50IElkLiBJZiBlbGVtZW50IGhhcyBubyBpZCwgCisgICAgLy8gY3JlYXRlcyBhIG5ldyB1bmlxdWUgbnVtYmVyLCBzdG9yZXMgaXQgaW4gdGhlIGlkIAorICAgIC8vIGF0dHJpYnV0ZSBhbmQgcmV0dXJucyB0aGUgbmV3IGlkLiAKKyAgICAvLyBJZiBhbiBpZCBhbHJlYWR5IGV4aXN0cywgaXQgc2ltcGx5IHJldHVybnMgaXQuCisKKyAgICB2YXIgc2VsZWN0MklkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2VsZWN0Mi1pZCcpOworICAgIGlmIChzZWxlY3QySWQgPT0gbnVsbCkgeworICAgICAgLy8gSWYgZWxlbWVudCBoYXMgaWQsIHVzZSBpdC4KKyAgICAgIGlmIChlbGVtZW50LmlkKSB7CisgICAgICAgIHNlbGVjdDJJZCA9IGVsZW1lbnQuaWQ7CisgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXNlbGVjdDItaWQnLCBzZWxlY3QySWQpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2VsZWN0Mi1pZCcsICsraWQpOworICAgICAgICBzZWxlY3QySWQgPSBpZC50b1N0cmluZygpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc2VsZWN0MklkOworICB9OworCisgIFV0aWxzLlN0b3JlRGF0YSA9IGZ1bmN0aW9uIChlbGVtZW50LCBuYW1lLCB2YWx1ZSkgeworICAgIC8vIFN0b3JlcyBhbiBpdGVtIGluIHRoZSBjYWNoZSBmb3IgYSBzcGVjaWZpZWQgZWxlbWVudC4KKyAgICAvLyBuYW1lIGlzIHRoZSBjYWNoZSBrZXkuICAgIAorICAgIHZhciBpZCA9IFV0aWxzLkdldFVuaXF1ZUVsZW1lbnRJZChlbGVtZW50KTsKKyAgICBpZiAoIVV0aWxzLl9fY2FjaGVbaWRdKSB7CisgICAgICBVdGlscy5fX2NhY2hlW2lkXSA9IHt9OworICAgIH0KKworICAgIFV0aWxzLl9fY2FjaGVbaWRdW25hbWVdID0gdmFsdWU7CisgIH07CisKKyAgVXRpbHMuR2V0RGF0YSA9IGZ1bmN0aW9uIChlbGVtZW50LCBuYW1lKSB7CisgICAgLy8gUmV0cmlldmVzIGEgdmFsdWUgZnJvbSB0aGUgY2FjaGUgYnkgaXRzIGtleSAobmFtZSkKKyAgICAvLyBuYW1lIGlzIG9wdGlvbmFsLiBJZiBubyBuYW1lIHNwZWNpZmllZCwgcmV0dXJuIAorICAgIC8vIGFsbCBjYWNoZSBpdGVtcyBmb3IgdGhlIHNwZWNpZmllZCBlbGVtZW50LgorICAgIC8vIGFuZCBmb3IgYSBzcGVjaWZpZWQgZWxlbWVudC4KKyAgICB2YXIgaWQgPSBVdGlscy5HZXRVbmlxdWVFbGVtZW50SWQoZWxlbWVudCk7CisgICAgaWYgKG5hbWUpIHsKKyAgICAgIGlmIChVdGlscy5fX2NhY2hlW2lkXSkgeworICAgICAgICByZXR1cm4gVXRpbHMuX19jYWNoZVtpZF1bbmFtZV0gIT0gbnVsbCA/IAorCSAgICAgIFV0aWxzLl9fY2FjaGVbaWRdW25hbWVdOgorCSAgICAgICQoZWxlbWVudCkuZGF0YShuYW1lKTsgLy8gRmFsbGJhY2sgdG8gSFRNTDUgZGF0YSBhdHRyaWJzLgorICAgICAgfQorICAgICAgcmV0dXJuICQoZWxlbWVudCkuZGF0YShuYW1lKTsgLy8gRmFsbGJhY2sgdG8gSFRNTDUgZGF0YSBhdHRyaWJzLgorICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gVXRpbHMuX19jYWNoZVtpZF07CQkJICAgCisgICAgfQorICB9OworCisgIFV0aWxzLlJlbW92ZURhdGEgPSBmdW5jdGlvbiAoZWxlbWVudCkgeworICAgIC8vIFJlbW92ZXMgYWxsIGNhY2hlZCBpdGVtcyBmb3IgYSBzcGVjaWZpZWQgZWxlbWVudC4KKyAgICB2YXIgaWQgPSBVdGlscy5HZXRVbmlxdWVFbGVtZW50SWQoZWxlbWVudCk7CisgICAgaWYgKFV0aWxzLl9fY2FjaGVbaWRdICE9IG51bGwpIHsKKyAgICAgIGRlbGV0ZSBVdGlscy5fX2NhY2hlW2lkXTsKKyAgICB9CisgIH07CisKKyAgcmV0dXJuIFV0aWxzOworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9yZXN1bHRzJyxbCisgICdqcXVlcnknLAorICAnLi91dGlscycKK10sIGZ1bmN0aW9uICgkLCBVdGlscykgeworICBmdW5jdGlvbiBSZXN1bHRzICgkZWxlbWVudCwgb3B0aW9ucywgZGF0YUFkYXB0ZXIpIHsKKyAgICB0aGlzLiRlbGVtZW50ID0gJGVsZW1lbnQ7CisgICAgdGhpcy5kYXRhID0gZGF0YUFkYXB0ZXI7CisgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKKworICAgIFJlc3VsdHMuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7CisgIH0KKworICBVdGlscy5FeHRlbmQoUmVzdWx0cywgVXRpbHMuT2JzZXJ2YWJsZSk7CisKKyAgUmVzdWx0cy5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkgeworICAgIHZhciAkcmVzdWx0cyA9ICQoCisgICAgICAnPHVsIGNsYXNzPSJzZWxlY3QyLXJlc3VsdHNfX29wdGlvbnMiIHJvbGU9InRyZWUiPjwvdWw+JworICAgICk7CisKKyAgICBpZiAodGhpcy5vcHRpb25zLmdldCgnbXVsdGlwbGUnKSkgeworICAgICAgJHJlc3VsdHMuYXR0cignYXJpYS1tdWx0aXNlbGVjdGFibGUnLCAndHJ1ZScpOworICAgIH0KKworICAgIHRoaXMuJHJlc3VsdHMgPSAkcmVzdWx0czsKKworICAgIHJldHVybiAkcmVzdWx0czsKKyAgfTsKKworICBSZXN1bHRzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLiRyZXN1bHRzLmVtcHR5KCk7CisgIH07CisKKyAgUmVzdWx0cy5wcm90b3R5cGUuZGlzcGxheU1lc3NhZ2UgPSBmdW5jdGlvbiAocGFyYW1zKSB7CisgICAgdmFyIGVzY2FwZU1hcmt1cCA9IHRoaXMub3B0aW9ucy5nZXQoJ2VzY2FwZU1hcmt1cCcpOworCisgICAgdGhpcy5jbGVhcigpOworICAgIHRoaXMuaGlkZUxvYWRpbmcoKTsKKworICAgIHZhciAkbWVzc2FnZSA9ICQoCisgICAgICAnPGxpIHJvbGU9InRyZWVpdGVtIiBhcmlhLWxpdmU9ImFzc2VydGl2ZSInICsKKyAgICAgICcgY2xhc3M9InNlbGVjdDItcmVzdWx0c19fb3B0aW9uIj48L2xpPicKKyAgICApOworCisgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLm9wdGlvbnMuZ2V0KCd0cmFuc2xhdGlvbnMnKS5nZXQocGFyYW1zLm1lc3NhZ2UpOworCisgICAgJG1lc3NhZ2UuYXBwZW5kKAorICAgICAgZXNjYXBlTWFya3VwKAorICAgICAgICBtZXNzYWdlKHBhcmFtcy5hcmdzKQorICAgICAgKQorICAgICk7CisKKyAgICAkbWVzc2FnZVswXS5jbGFzc05hbWUgKz0gJyBzZWxlY3QyLXJlc3VsdHNfX21lc3NhZ2UnOworCisgICAgdGhpcy4kcmVzdWx0cy5hcHBlbmQoJG1lc3NhZ2UpOworICB9OworCisgIFJlc3VsdHMucHJvdG90eXBlLmhpZGVNZXNzYWdlcyA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLiRyZXN1bHRzLmZpbmQoJy5zZWxlY3QyLXJlc3VsdHNfX21lc3NhZ2UnKS5yZW1vdmUoKTsKKyAgfTsKKworICBSZXN1bHRzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgIHRoaXMuaGlkZUxvYWRpbmcoKTsKKworICAgIHZhciAkb3B0aW9ucyA9IFtdOworCisgICAgaWYgKGRhdGEucmVzdWx0cyA9PSBudWxsIHx8IGRhdGEucmVzdWx0cy5sZW5ndGggPT09IDApIHsKKyAgICAgIGlmICh0aGlzLiRyZXN1bHRzLmNoaWxkcmVuKCkubGVuZ3RoID09PSAwKSB7CisgICAgICAgIHRoaXMudHJpZ2dlcigncmVzdWx0czptZXNzYWdlJywgeworICAgICAgICAgIG1lc3NhZ2U6ICdub1Jlc3VsdHMnCisgICAgICAgIH0pOworICAgICAgfQorCisgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGF0YS5yZXN1bHRzID0gdGhpcy5zb3J0KGRhdGEucmVzdWx0cyk7CisKKyAgICBmb3IgKHZhciBkID0gMDsgZCA8IGRhdGEucmVzdWx0cy5sZW5ndGg7IGQrKykgeworICAgICAgdmFyIGl0ZW0gPSBkYXRhLnJlc3VsdHNbZF07CisKKyAgICAgIHZhciAkb3B0aW9uID0gdGhpcy5vcHRpb24oaXRlbSk7CisKKyAgICAgICRvcHRpb25zLnB1c2goJG9wdGlvbik7CisgICAgfQorCisgICAgdGhpcy4kcmVzdWx0cy5hcHBlbmQoJG9wdGlvbnMpOworICB9OworCisgIFJlc3VsdHMucHJvdG90eXBlLnBvc2l0aW9uID0gZnVuY3Rpb24gKCRyZXN1bHRzLCAkZHJvcGRvd24pIHsKKyAgICB2YXIgJHJlc3VsdHNDb250YWluZXIgPSAkZHJvcGRvd24uZmluZCgnLnNlbGVjdDItcmVzdWx0cycpOworICAgICRyZXN1bHRzQ29udGFpbmVyLmFwcGVuZCgkcmVzdWx0cyk7CisgIH07CisKKyAgUmVzdWx0cy5wcm90b3R5cGUuc29ydCA9IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgdmFyIHNvcnRlciA9IHRoaXMub3B0aW9ucy5nZXQoJ3NvcnRlcicpOworCisgICAgcmV0dXJuIHNvcnRlcihkYXRhKTsKKyAgfTsKKworICBSZXN1bHRzLnByb3RvdHlwZS5oaWdobGlnaHRGaXJzdEl0ZW0gPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyICRvcHRpb25zID0gdGhpcy4kcmVzdWx0cworICAgICAgLmZpbmQoJy5zZWxlY3QyLXJlc3VsdHNfX29wdGlvblthcmlhLXNlbGVjdGVkXScpOworCisgICAgdmFyICRzZWxlY3RlZCA9ICRvcHRpb25zLmZpbHRlcignW2FyaWEtc2VsZWN0ZWQ9dHJ1ZV0nKTsKKworICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2VsZWN0ZWQgb3B0aW9ucworICAgIGlmICgkc2VsZWN0ZWQubGVuZ3RoID4gMCkgeworICAgICAgLy8gSWYgdGhlcmUgYXJlIHNlbGVjdGVkIG9wdGlvbnMsIGhpZ2hsaWdodCB0aGUgZmlyc3QKKyAgICAgICRzZWxlY3RlZC5maXJzdCgpLnRyaWdnZXIoJ21vdXNlZW50ZXInKTsKKyAgICB9IGVsc2UgeworICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHNlbGVjdGVkIG9wdGlvbnMsIGhpZ2hsaWdodCB0aGUgZmlyc3Qgb3B0aW9uCisgICAgICAvLyBpbiB0aGUgZHJvcGRvd24KKyAgICAgICRvcHRpb25zLmZpcnN0KCkudHJpZ2dlcignbW91c2VlbnRlcicpOworICAgIH0KKworICAgIHRoaXMuZW5zdXJlSGlnaGxpZ2h0VmlzaWJsZSgpOworICB9OworCisgIFJlc3VsdHMucHJvdG90eXBlLnNldENsYXNzZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgdGhpcy5kYXRhLmN1cnJlbnQoZnVuY3Rpb24gKHNlbGVjdGVkKSB7CisgICAgICB2YXIgc2VsZWN0ZWRJZHMgPSAkLm1hcChzZWxlY3RlZCwgZnVuY3Rpb24gKHMpIHsKKyAgICAgICAgcmV0dXJuIHMuaWQudG9TdHJpbmcoKTsKKyAgICAgIH0pOworCisgICAgICB2YXIgJG9wdGlvbnMgPSBzZWxmLiRyZXN1bHRzCisgICAgICAgIC5maW5kKCcuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25bYXJpYS1zZWxlY3RlZF0nKTsKKworICAgICAgJG9wdGlvbnMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciAkb3B0aW9uID0gJCh0aGlzKTsKKworICAgICAgICB2YXIgaXRlbSA9IFV0aWxzLkdldERhdGEodGhpcywgJ2RhdGEnKTsKKworICAgICAgICAvLyBpZCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgd2hlbiBjb21wYXJpbmcKKyAgICAgICAgdmFyIGlkID0gJycgKyBpdGVtLmlkOworCisgICAgICAgIGlmICgoaXRlbS5lbGVtZW50ICE9IG51bGwgJiYgaXRlbS5lbGVtZW50LnNlbGVjdGVkKSB8fAorICAgICAgICAgICAgKGl0ZW0uZWxlbWVudCA9PSBudWxsICYmICQuaW5BcnJheShpZCwgc2VsZWN0ZWRJZHMpID4gLTEpKSB7CisgICAgICAgICAgJG9wdGlvbi5hdHRyKCdhcmlhLXNlbGVjdGVkJywgJ3RydWUnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAkb3B0aW9uLmF0dHIoJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnKTsKKyAgICAgICAgfQorICAgICAgfSk7CisKKyAgICB9KTsKKyAgfTsKKworICBSZXN1bHRzLnByb3RvdHlwZS5zaG93TG9hZGluZyA9IGZ1bmN0aW9uIChwYXJhbXMpIHsKKyAgICB0aGlzLmhpZGVMb2FkaW5nKCk7CisKKyAgICB2YXIgbG9hZGluZ01vcmUgPSB0aGlzLm9wdGlvbnMuZ2V0KCd0cmFuc2xhdGlvbnMnKS5nZXQoJ3NlYXJjaGluZycpOworCisgICAgdmFyIGxvYWRpbmcgPSB7CisgICAgICBkaXNhYmxlZDogdHJ1ZSwKKyAgICAgIGxvYWRpbmc6IHRydWUsCisgICAgICB0ZXh0OiBsb2FkaW5nTW9yZShwYXJhbXMpCisgICAgfTsKKyAgICB2YXIgJGxvYWRpbmcgPSB0aGlzLm9wdGlvbihsb2FkaW5nKTsKKyAgICAkbG9hZGluZy5jbGFzc05hbWUgKz0gJyBsb2FkaW5nLXJlc3VsdHMnOworCisgICAgdGhpcy4kcmVzdWx0cy5wcmVwZW5kKCRsb2FkaW5nKTsKKyAgfTsKKworICBSZXN1bHRzLnByb3RvdHlwZS5oaWRlTG9hZGluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLiRyZXN1bHRzLmZpbmQoJy5sb2FkaW5nLXJlc3VsdHMnKS5yZW1vdmUoKTsKKyAgfTsKKworICBSZXN1bHRzLnByb3RvdHlwZS5vcHRpb24gPSBmdW5jdGlvbiAoZGF0YSkgeworICAgIHZhciBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOworICAgIG9wdGlvbi5jbGFzc05hbWUgPSAnc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24nOworCisgICAgdmFyIGF0dHJzID0geworICAgICAgJ3JvbGUnOiAndHJlZWl0ZW0nLAorICAgICAgJ2FyaWEtc2VsZWN0ZWQnOiAnZmFsc2UnCisgICAgfTsKKworICAgIGlmIChkYXRhLmRpc2FibGVkKSB7CisgICAgICBkZWxldGUgYXR0cnNbJ2FyaWEtc2VsZWN0ZWQnXTsKKyAgICAgIGF0dHJzWydhcmlhLWRpc2FibGVkJ10gPSAndHJ1ZSc7CisgICAgfQorCisgICAgaWYgKGRhdGEuaWQgPT0gbnVsbCkgeworICAgICAgZGVsZXRlIGF0dHJzWydhcmlhLXNlbGVjdGVkJ107CisgICAgfQorCisgICAgaWYgKGRhdGEuX3Jlc3VsdElkICE9IG51bGwpIHsKKyAgICAgIG9wdGlvbi5pZCA9IGRhdGEuX3Jlc3VsdElkOworICAgIH0KKworICAgIGlmIChkYXRhLnRpdGxlKSB7CisgICAgICBvcHRpb24udGl0bGUgPSBkYXRhLnRpdGxlOworICAgIH0KKworICAgIGlmIChkYXRhLmNoaWxkcmVuKSB7CisgICAgICBhdHRycy5yb2xlID0gJ2dyb3VwJzsKKyAgICAgIGF0dHJzWydhcmlhLWxhYmVsJ10gPSBkYXRhLnRleHQ7CisgICAgICBkZWxldGUgYXR0cnNbJ2FyaWEtc2VsZWN0ZWQnXTsKKyAgICB9CisKKyAgICBmb3IgKHZhciBhdHRyIGluIGF0dHJzKSB7CisgICAgICB2YXIgdmFsID0gYXR0cnNbYXR0cl07CisKKyAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoYXR0ciwgdmFsKTsKKyAgICB9CisKKyAgICBpZiAoZGF0YS5jaGlsZHJlbikgeworICAgICAgdmFyICRvcHRpb24gPSAkKG9wdGlvbik7CisKKyAgICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0cm9uZycpOworICAgICAgbGFiZWwuY2xhc3NOYW1lID0gJ3NlbGVjdDItcmVzdWx0c19fZ3JvdXAnOworCisgICAgICB2YXIgJGxhYmVsID0gJChsYWJlbCk7CisgICAgICB0aGlzLnRlbXBsYXRlKGRhdGEsIGxhYmVsKTsKKworICAgICAgdmFyICRjaGlsZHJlbiA9IFtdOworCisgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGRhdGEuY2hpbGRyZW4ubGVuZ3RoOyBjKyspIHsKKyAgICAgICAgdmFyIGNoaWxkID0gZGF0YS5jaGlsZHJlbltjXTsKKworICAgICAgICB2YXIgJGNoaWxkID0gdGhpcy5vcHRpb24oY2hpbGQpOworCisgICAgICAgICRjaGlsZHJlbi5wdXNoKCRjaGlsZCk7CisgICAgICB9CisKKyAgICAgIHZhciAkY2hpbGRyZW5Db250YWluZXIgPSAkKCc8dWw+PC91bD4nLCB7CisgICAgICAgICdjbGFzcyc6ICdzZWxlY3QyLXJlc3VsdHNfX29wdGlvbnMgc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25zLS1uZXN0ZWQnCisgICAgICB9KTsKKworICAgICAgJGNoaWxkcmVuQ29udGFpbmVyLmFwcGVuZCgkY2hpbGRyZW4pOworCisgICAgICAkb3B0aW9uLmFwcGVuZChsYWJlbCk7CisgICAgICAkb3B0aW9uLmFwcGVuZCgkY2hpbGRyZW5Db250YWluZXIpOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLnRlbXBsYXRlKGRhdGEsIG9wdGlvbik7CisgICAgfQorCisgICAgVXRpbHMuU3RvcmVEYXRhKG9wdGlvbiwgJ2RhdGEnLCBkYXRhKTsKKworICAgIHJldHVybiBvcHRpb247CisgIH07CisKKyAgUmVzdWx0cy5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChjb250YWluZXIsICRjb250YWluZXIpIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICB2YXIgaWQgPSBjb250YWluZXIuaWQgKyAnLXJlc3VsdHMnOworCisgICAgdGhpcy4kcmVzdWx0cy5hdHRyKCdpZCcsIGlkKTsKKworICAgIGNvbnRhaW5lci5vbigncmVzdWx0czphbGwnLCBmdW5jdGlvbiAocGFyYW1zKSB7CisgICAgICBzZWxmLmNsZWFyKCk7CisgICAgICBzZWxmLmFwcGVuZChwYXJhbXMuZGF0YSk7CisKKyAgICAgIGlmIChjb250YWluZXIuaXNPcGVuKCkpIHsKKyAgICAgICAgc2VsZi5zZXRDbGFzc2VzKCk7CisgICAgICAgIHNlbGYuaGlnaGxpZ2h0Rmlyc3RJdGVtKCk7CisgICAgICB9CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6YXBwZW5kJywgZnVuY3Rpb24gKHBhcmFtcykgeworICAgICAgc2VsZi5hcHBlbmQocGFyYW1zLmRhdGEpOworCisgICAgICBpZiAoY29udGFpbmVyLmlzT3BlbigpKSB7CisgICAgICAgIHNlbGYuc2V0Q2xhc3NlcygpOworICAgICAgfQorICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCdxdWVyeScsIGZ1bmN0aW9uIChwYXJhbXMpIHsKKyAgICAgIHNlbGYuaGlkZU1lc3NhZ2VzKCk7CisgICAgICBzZWxmLnNob3dMb2FkaW5nKHBhcmFtcyk7CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ3NlbGVjdCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGlmICghY29udGFpbmVyLmlzT3BlbigpKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgc2VsZi5zZXRDbGFzc2VzKCk7CisgICAgICBzZWxmLmhpZ2hsaWdodEZpcnN0SXRlbSgpOworICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCd1bnNlbGVjdCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGlmICghY29udGFpbmVyLmlzT3BlbigpKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgc2VsZi5zZXRDbGFzc2VzKCk7CisgICAgICBzZWxmLmhpZ2hsaWdodEZpcnN0SXRlbSgpOworICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCdvcGVuJywgZnVuY3Rpb24gKCkgeworICAgICAgLy8gV2hlbiB0aGUgZHJvcGRvd24gaXMgb3BlbiwgYXJpYS1leHBlbmRlZD0idHJ1ZSIKKyAgICAgIHNlbGYuJHJlc3VsdHMuYXR0cignYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7CisgICAgICBzZWxmLiRyZXN1bHRzLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7CisKKyAgICAgIHNlbGYuc2V0Q2xhc3NlcygpOworICAgICAgc2VsZi5lbnN1cmVIaWdobGlnaHRWaXNpYmxlKCk7CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkgeworICAgICAgLy8gV2hlbiB0aGUgZHJvcGRvd24gaXMgY2xvc2VkLCBhcmlhLWV4cGVuZGVkPSJmYWxzZSIKKyAgICAgIHNlbGYuJHJlc3VsdHMuYXR0cignYXJpYS1leHBhbmRlZCcsICdmYWxzZScpOworICAgICAgc2VsZi4kcmVzdWx0cy5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7CisgICAgICBzZWxmLiRyZXN1bHRzLnJlbW92ZUF0dHIoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcpOworICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCdyZXN1bHRzOnRvZ2dsZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkaGlnaGxpZ2h0ZWQgPSBzZWxmLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpOworCisgICAgICBpZiAoJGhpZ2hsaWdodGVkLmxlbmd0aCA9PT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgICRoaWdobGlnaHRlZC50cmlnZ2VyKCdtb3VzZXVwJyk7CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6c2VsZWN0JywgZnVuY3Rpb24gKCkgeworICAgICAgdmFyICRoaWdobGlnaHRlZCA9IHNlbGYuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCk7CisKKyAgICAgIGlmICgkaGlnaGxpZ2h0ZWQubGVuZ3RoID09PSAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgdmFyIGRhdGEgPSBVdGlscy5HZXREYXRhKCRoaWdobGlnaHRlZFswXSwgJ2RhdGEnKTsKKworICAgICAgaWYgKCRoaWdobGlnaHRlZC5hdHRyKCdhcmlhLXNlbGVjdGVkJykgPT0gJ3RydWUnKSB7CisgICAgICAgIHNlbGYudHJpZ2dlcignY2xvc2UnLCB7fSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBzZWxmLnRyaWdnZXIoJ3NlbGVjdCcsIHsKKyAgICAgICAgICBkYXRhOiBkYXRhCisgICAgICAgIH0pOworICAgICAgfQorICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCdyZXN1bHRzOnByZXZpb3VzJywgZnVuY3Rpb24gKCkgeworICAgICAgdmFyICRoaWdobGlnaHRlZCA9IHNlbGYuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCk7CisKKyAgICAgIHZhciAkb3B0aW9ucyA9IHNlbGYuJHJlc3VsdHMuZmluZCgnW2FyaWEtc2VsZWN0ZWRdJyk7CisKKyAgICAgIHZhciBjdXJyZW50SW5kZXggPSAkb3B0aW9ucy5pbmRleCgkaGlnaGxpZ2h0ZWQpOworCisgICAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBhdCB0ZSB0b3AsIGRvbid0IG1vdmUgZnVydGhlcgorICAgICAgLy8gSWYgbm8gb3B0aW9ucywgY3VycmVudEluZGV4IHdpbGwgYmUgLTEKKyAgICAgIGlmIChjdXJyZW50SW5kZXggPD0gMCkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHZhciBuZXh0SW5kZXggPSBjdXJyZW50SW5kZXggLSAxOworCisgICAgICAvLyBJZiBub25lIGFyZSBoaWdobGlnaHRlZCwgaGlnaGxpZ2h0IHRoZSBmaXJzdAorICAgICAgaWYgKCRoaWdobGlnaHRlZC5sZW5ndGggPT09IDApIHsKKyAgICAgICAgbmV4dEluZGV4ID0gMDsKKyAgICAgIH0KKworICAgICAgdmFyICRuZXh0ID0gJG9wdGlvbnMuZXEobmV4dEluZGV4KTsKKworICAgICAgJG5leHQudHJpZ2dlcignbW91c2VlbnRlcicpOworCisgICAgICB2YXIgY3VycmVudE9mZnNldCA9IHNlbGYuJHJlc3VsdHMub2Zmc2V0KCkudG9wOworICAgICAgdmFyIG5leHRUb3AgPSAkbmV4dC5vZmZzZXQoKS50b3A7CisgICAgICB2YXIgbmV4dE9mZnNldCA9IHNlbGYuJHJlc3VsdHMuc2Nyb2xsVG9wKCkgKyAobmV4dFRvcCAtIGN1cnJlbnRPZmZzZXQpOworCisgICAgICBpZiAobmV4dEluZGV4ID09PSAwKSB7CisgICAgICAgIHNlbGYuJHJlc3VsdHMuc2Nyb2xsVG9wKDApOworICAgICAgfSBlbHNlIGlmIChuZXh0VG9wIC0gY3VycmVudE9mZnNldCA8IDApIHsKKyAgICAgICAgc2VsZi4kcmVzdWx0cy5zY3JvbGxUb3AobmV4dE9mZnNldCk7CisgICAgICB9CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6bmV4dCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkaGlnaGxpZ2h0ZWQgPSBzZWxmLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpOworCisgICAgICB2YXIgJG9wdGlvbnMgPSBzZWxmLiRyZXN1bHRzLmZpbmQoJ1thcmlhLXNlbGVjdGVkXScpOworCisgICAgICB2YXIgY3VycmVudEluZGV4ID0gJG9wdGlvbnMuaW5kZXgoJGhpZ2hsaWdodGVkKTsKKworICAgICAgdmFyIG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCArIDE7CisKKyAgICAgIC8vIElmIHdlIGFyZSBhdCB0aGUgbGFzdCBvcHRpb24sIHN0YXkgdGhlcmUKKyAgICAgIGlmIChuZXh0SW5kZXggPj0gJG9wdGlvbnMubGVuZ3RoKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgdmFyICRuZXh0ID0gJG9wdGlvbnMuZXEobmV4dEluZGV4KTsKKworICAgICAgJG5leHQudHJpZ2dlcignbW91c2VlbnRlcicpOworCisgICAgICB2YXIgY3VycmVudE9mZnNldCA9IHNlbGYuJHJlc3VsdHMub2Zmc2V0KCkudG9wICsKKyAgICAgICAgc2VsZi4kcmVzdWx0cy5vdXRlckhlaWdodChmYWxzZSk7CisgICAgICB2YXIgbmV4dEJvdHRvbSA9ICRuZXh0Lm9mZnNldCgpLnRvcCArICRuZXh0Lm91dGVySGVpZ2h0KGZhbHNlKTsKKyAgICAgIHZhciBuZXh0T2Zmc2V0ID0gc2VsZi4kcmVzdWx0cy5zY3JvbGxUb3AoKSArIG5leHRCb3R0b20gLSBjdXJyZW50T2Zmc2V0OworCisgICAgICBpZiAobmV4dEluZGV4ID09PSAwKSB7CisgICAgICAgIHNlbGYuJHJlc3VsdHMuc2Nyb2xsVG9wKDApOworICAgICAgfSBlbHNlIGlmIChuZXh0Qm90dG9tID4gY3VycmVudE9mZnNldCkgeworICAgICAgICBzZWxmLiRyZXN1bHRzLnNjcm9sbFRvcChuZXh0T2Zmc2V0KTsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbigncmVzdWx0czpmb2N1cycsIGZ1bmN0aW9uIChwYXJhbXMpIHsKKyAgICAgIHBhcmFtcy5lbGVtZW50LmFkZENsYXNzKCdzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0taGlnaGxpZ2h0ZWQnKTsKKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbigncmVzdWx0czptZXNzYWdlJywgZnVuY3Rpb24gKHBhcmFtcykgeworICAgICAgc2VsZi5kaXNwbGF5TWVzc2FnZShwYXJhbXMpOworICAgIH0pOworCisgICAgaWYgKCQuZm4ubW91c2V3aGVlbCkgeworICAgICAgdGhpcy4kcmVzdWx0cy5vbignbW91c2V3aGVlbCcsIGZ1bmN0aW9uIChlKSB7CisgICAgICAgIHZhciB0b3AgPSBzZWxmLiRyZXN1bHRzLnNjcm9sbFRvcCgpOworCisgICAgICAgIHZhciBib3R0b20gPSBzZWxmLiRyZXN1bHRzLmdldCgwKS5zY3JvbGxIZWlnaHQgLSB0b3AgKyBlLmRlbHRhWTsKKworICAgICAgICB2YXIgaXNBdFRvcCA9IGUuZGVsdGFZID4gMCAmJiB0b3AgLSBlLmRlbHRhWSA8PSAwOworICAgICAgICB2YXIgaXNBdEJvdHRvbSA9IGUuZGVsdGFZIDwgMCAmJiBib3R0b20gPD0gc2VsZi4kcmVzdWx0cy5oZWlnaHQoKTsKKworICAgICAgICBpZiAoaXNBdFRvcCkgeworICAgICAgICAgIHNlbGYuJHJlc3VsdHMuc2Nyb2xsVG9wKDApOworCisgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNBdEJvdHRvbSkgeworICAgICAgICAgIHNlbGYuJHJlc3VsdHMuc2Nyb2xsVG9wKAorICAgICAgICAgICAgc2VsZi4kcmVzdWx0cy5nZXQoMCkuc2Nyb2xsSGVpZ2h0IC0gc2VsZi4kcmVzdWx0cy5oZWlnaHQoKQorICAgICAgICAgICk7CisKKyAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgdGhpcy4kcmVzdWx0cy5vbignbW91c2V1cCcsICcuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25bYXJpYS1zZWxlY3RlZF0nLAorICAgICAgZnVuY3Rpb24gKGV2dCkgeworICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsKKworICAgICAgdmFyIGRhdGEgPSBVdGlscy5HZXREYXRhKHRoaXMsICdkYXRhJyk7CisKKyAgICAgIGlmICgkdGhpcy5hdHRyKCdhcmlhLXNlbGVjdGVkJykgPT09ICd0cnVlJykgeworICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmdldCgnbXVsdGlwbGUnKSkgeworICAgICAgICAgIHNlbGYudHJpZ2dlcigndW5zZWxlY3QnLCB7CisgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnQsCisgICAgICAgICAgICBkYXRhOiBkYXRhCisgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc2VsZi50cmlnZ2VyKCdjbG9zZScsIHt9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgc2VsZi50cmlnZ2VyKCdzZWxlY3QnLCB7CisgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2dCwKKyAgICAgICAgZGF0YTogZGF0YQorICAgICAgfSk7CisgICAgfSk7CisKKyAgICB0aGlzLiRyZXN1bHRzLm9uKCdtb3VzZWVudGVyJywgJy5zZWxlY3QyLXJlc3VsdHNfX29wdGlvblthcmlhLXNlbGVjdGVkXScsCisgICAgICBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICB2YXIgZGF0YSA9IFV0aWxzLkdldERhdGEodGhpcywgJ2RhdGEnKTsKKworICAgICAgc2VsZi5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKQorICAgICAgICAgIC5yZW1vdmVDbGFzcygnc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWhpZ2hsaWdodGVkJyk7CisKKyAgICAgIHNlbGYudHJpZ2dlcigncmVzdWx0czpmb2N1cycsIHsKKyAgICAgICAgZGF0YTogZGF0YSwKKyAgICAgICAgZWxlbWVudDogJCh0aGlzKQorICAgICAgfSk7CisgICAgfSk7CisgIH07CisKKyAgUmVzdWx0cy5wcm90b3R5cGUuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzID0gZnVuY3Rpb24gKCkgeworICAgIHZhciAkaGlnaGxpZ2h0ZWQgPSB0aGlzLiRyZXN1bHRzCisgICAgLmZpbmQoJy5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0taGlnaGxpZ2h0ZWQnKTsKKworICAgIHJldHVybiAkaGlnaGxpZ2h0ZWQ7CisgIH07CisKKyAgUmVzdWx0cy5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLiRyZXN1bHRzLnJlbW92ZSgpOworICB9OworCisgIFJlc3VsdHMucHJvdG90eXBlLmVuc3VyZUhpZ2hsaWdodFZpc2libGUgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyICRoaWdobGlnaHRlZCA9IHRoaXMuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCk7CisKKyAgICBpZiAoJGhpZ2hsaWdodGVkLmxlbmd0aCA9PT0gMCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciAkb3B0aW9ucyA9IHRoaXMuJHJlc3VsdHMuZmluZCgnW2FyaWEtc2VsZWN0ZWRdJyk7CisKKyAgICB2YXIgY3VycmVudEluZGV4ID0gJG9wdGlvbnMuaW5kZXgoJGhpZ2hsaWdodGVkKTsKKworICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gdGhpcy4kcmVzdWx0cy5vZmZzZXQoKS50b3A7CisgICAgdmFyIG5leHRUb3AgPSAkaGlnaGxpZ2h0ZWQub2Zmc2V0KCkudG9wOworICAgIHZhciBuZXh0T2Zmc2V0ID0gdGhpcy4kcmVzdWx0cy5zY3JvbGxUb3AoKSArIChuZXh0VG9wIC0gY3VycmVudE9mZnNldCk7CisKKyAgICB2YXIgb2Zmc2V0RGVsdGEgPSBuZXh0VG9wIC0gY3VycmVudE9mZnNldDsKKyAgICBuZXh0T2Zmc2V0IC09ICRoaWdobGlnaHRlZC5vdXRlckhlaWdodChmYWxzZSkgKiAyOworCisgICAgaWYgKGN1cnJlbnRJbmRleCA8PSAyKSB7CisgICAgICB0aGlzLiRyZXN1bHRzLnNjcm9sbFRvcCgwKTsKKyAgICB9IGVsc2UgaWYgKG9mZnNldERlbHRhID4gdGhpcy4kcmVzdWx0cy5vdXRlckhlaWdodCgpIHx8IG9mZnNldERlbHRhIDwgMCkgeworICAgICAgdGhpcy4kcmVzdWx0cy5zY3JvbGxUb3AobmV4dE9mZnNldCk7CisgICAgfQorICB9OworCisgIFJlc3VsdHMucHJvdG90eXBlLnRlbXBsYXRlID0gZnVuY3Rpb24gKHJlc3VsdCwgY29udGFpbmVyKSB7CisgICAgdmFyIHRlbXBsYXRlID0gdGhpcy5vcHRpb25zLmdldCgndGVtcGxhdGVSZXN1bHQnKTsKKyAgICB2YXIgZXNjYXBlTWFya3VwID0gdGhpcy5vcHRpb25zLmdldCgnZXNjYXBlTWFya3VwJyk7CisKKyAgICB2YXIgY29udGVudCA9IHRlbXBsYXRlKHJlc3VsdCwgY29udGFpbmVyKTsKKworICAgIGlmIChjb250ZW50ID09IG51bGwpIHsKKyAgICAgIGNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7CisgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gZXNjYXBlTWFya3VwKGNvbnRlbnQpOworICAgIH0gZWxzZSB7CisgICAgICAkKGNvbnRhaW5lcikuYXBwZW5kKGNvbnRlbnQpOworICAgIH0KKyAgfTsKKworICByZXR1cm4gUmVzdWx0czsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIva2V5cycsWworCitdLCBmdW5jdGlvbiAoKSB7CisgIHZhciBLRVlTID0geworICAgIEJBQ0tTUEFDRTogOCwKKyAgICBUQUI6IDksCisgICAgRU5URVI6IDEzLAorICAgIFNISUZUOiAxNiwKKyAgICBDVFJMOiAxNywKKyAgICBBTFQ6IDE4LAorICAgIEVTQzogMjcsCisgICAgU1BBQ0U6IDMyLAorICAgIFBBR0VfVVA6IDMzLAorICAgIFBBR0VfRE9XTjogMzQsCisgICAgRU5EOiAzNSwKKyAgICBIT01FOiAzNiwKKyAgICBMRUZUOiAzNywKKyAgICBVUDogMzgsCisgICAgUklHSFQ6IDM5LAorICAgIERPV046IDQwLAorICAgIERFTEVURTogNDYKKyAgfTsKKworICByZXR1cm4gS0VZUzsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvc2VsZWN0aW9uL2Jhc2UnLFsKKyAgJ2pxdWVyeScsCisgICcuLi91dGlscycsCisgICcuLi9rZXlzJworXSwgZnVuY3Rpb24gKCQsIFV0aWxzLCBLRVlTKSB7CisgIGZ1bmN0aW9uIEJhc2VTZWxlY3Rpb24gKCRlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhpcy4kZWxlbWVudCA9ICRlbGVtZW50OworICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CisKKyAgICBCYXNlU2VsZWN0aW9uLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpOworICB9CisKKyAgVXRpbHMuRXh0ZW5kKEJhc2VTZWxlY3Rpb24sIFV0aWxzLk9ic2VydmFibGUpOworCisgIEJhc2VTZWxlY3Rpb24ucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgJHNlbGVjdGlvbiA9ICQoCisgICAgICAnPHNwYW4gY2xhc3M9InNlbGVjdDItc2VsZWN0aW9uIiByb2xlPSJjb21ib2JveCIgJyArCisgICAgICAnIGFyaWEtaGFzcG9wdXA9InRydWUiIGFyaWEtZXhwYW5kZWQ9ImZhbHNlIj4nICsKKyAgICAgICc8L3NwYW4+JworICAgICk7CisKKyAgICB0aGlzLl90YWJpbmRleCA9IDA7CisKKyAgICBpZiAoVXRpbHMuR2V0RGF0YSh0aGlzLiRlbGVtZW50WzBdLCAnb2xkLXRhYmluZGV4JykgIT0gbnVsbCkgeworICAgICAgdGhpcy5fdGFiaW5kZXggPSBVdGlscy5HZXREYXRhKHRoaXMuJGVsZW1lbnRbMF0sICdvbGQtdGFiaW5kZXgnKTsKKyAgICB9IGVsc2UgaWYgKHRoaXMuJGVsZW1lbnQuYXR0cigndGFiaW5kZXgnKSAhPSBudWxsKSB7CisgICAgICB0aGlzLl90YWJpbmRleCA9IHRoaXMuJGVsZW1lbnQuYXR0cigndGFiaW5kZXgnKTsKKyAgICB9CisKKyAgICAkc2VsZWN0aW9uLmF0dHIoJ3RpdGxlJywgdGhpcy4kZWxlbWVudC5hdHRyKCd0aXRsZScpKTsKKyAgICAkc2VsZWN0aW9uLmF0dHIoJ3RhYmluZGV4JywgdGhpcy5fdGFiaW5kZXgpOworCisgICAgdGhpcy4kc2VsZWN0aW9uID0gJHNlbGVjdGlvbjsKKworICAgIHJldHVybiAkc2VsZWN0aW9uOworICB9OworCisgIEJhc2VTZWxlY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoY29udGFpbmVyLCAkY29udGFpbmVyKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgdmFyIGlkID0gY29udGFpbmVyLmlkICsgJy1jb250YWluZXInOworICAgIHZhciByZXN1bHRzSWQgPSBjb250YWluZXIuaWQgKyAnLXJlc3VsdHMnOworCisgICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7CisKKyAgICB0aGlzLiRzZWxlY3Rpb24ub24oJ2ZvY3VzJywgZnVuY3Rpb24gKGV2dCkgeworICAgICAgc2VsZi50cmlnZ2VyKCdmb2N1cycsIGV2dCk7CisgICAgfSk7CisKKyAgICB0aGlzLiRzZWxlY3Rpb24ub24oJ2JsdXInLCBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICBzZWxmLl9oYW5kbGVCbHVyKGV2dCk7CisgICAgfSk7CisKKyAgICB0aGlzLiRzZWxlY3Rpb24ub24oJ2tleWRvd24nLCBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICBzZWxmLnRyaWdnZXIoJ2tleXByZXNzJywgZXZ0KTsKKworICAgICAgaWYgKGV2dC53aGljaCA9PT0gS0VZUy5TUEFDRSkgeworICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbigncmVzdWx0czpmb2N1cycsIGZ1bmN0aW9uIChwYXJhbXMpIHsKKyAgICAgIHNlbGYuJHNlbGVjdGlvbi5hdHRyKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBwYXJhbXMuZGF0YS5fcmVzdWx0SWQpOworICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCdzZWxlY3Rpb246dXBkYXRlJywgZnVuY3Rpb24gKHBhcmFtcykgeworICAgICAgc2VsZi51cGRhdGUocGFyYW1zLmRhdGEpOworICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCdvcGVuJywgZnVuY3Rpb24gKCkgeworICAgICAgLy8gV2hlbiB0aGUgZHJvcGRvd24gaXMgb3BlbiwgYXJpYS1leHBhbmRlZD0idHJ1ZSIKKyAgICAgIHNlbGYuJHNlbGVjdGlvbi5hdHRyKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKTsKKyAgICAgIHNlbGYuJHNlbGVjdGlvbi5hdHRyKCdhcmlhLW93bnMnLCByZXN1bHRzSWQpOworCisgICAgICBzZWxmLl9hdHRhY2hDbG9zZUhhbmRsZXIoY29udGFpbmVyKTsKKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7CisgICAgICAvLyBXaGVuIHRoZSBkcm9wZG93biBpcyBjbG9zZWQsIGFyaWEtZXhwYW5kZWQ9ImZhbHNlIgorICAgICAgc2VsZi4kc2VsZWN0aW9uLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTsKKyAgICAgIHNlbGYuJHNlbGVjdGlvbi5yZW1vdmVBdHRyKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKTsKKyAgICAgIHNlbGYuJHNlbGVjdGlvbi5yZW1vdmVBdHRyKCdhcmlhLW93bnMnKTsKKworICAgICAgc2VsZi4kc2VsZWN0aW9uLmZvY3VzKCk7CisgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgIHNlbGYuJHNlbGVjdGlvbi5mb2N1cygpOworICAgICAgfSwgMCk7CisKKyAgICAgIHNlbGYuX2RldGFjaENsb3NlSGFuZGxlcihjb250YWluZXIpOworICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCdlbmFibGUnLCBmdW5jdGlvbiAoKSB7CisgICAgICBzZWxmLiRzZWxlY3Rpb24uYXR0cigndGFiaW5kZXgnLCBzZWxmLl90YWJpbmRleCk7CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ2Rpc2FibGUnLCBmdW5jdGlvbiAoKSB7CisgICAgICBzZWxmLiRzZWxlY3Rpb24uYXR0cigndGFiaW5kZXgnLCAnLTEnKTsKKyAgICB9KTsKKyAgfTsKKworICBCYXNlU2VsZWN0aW9uLnByb3RvdHlwZS5faGFuZGxlQmx1ciA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGRlbGF5ZWQgYXMgdGhlIGFjdGl2ZSBlbGVtZW50IGlzIHRoZSBib2R5IHdoZW4gdGhlIHRhYgorICAgIC8vIGtleSBpcyBwcmVzc2VkLCBwb3NzaWJseSBhbG9uZyB3aXRoIG90aGVycy4KKyAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAvLyBEb24ndCB0cmlnZ2VyIGBibHVyYCBpZiB0aGUgZm9jdXMgaXMgc3RpbGwgaW4gdGhlIHNlbGVjdGlvbgorICAgICAgaWYgKAorICAgICAgICAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBzZWxmLiRzZWxlY3Rpb25bMF0pIHx8CisgICAgICAgICgkLmNvbnRhaW5zKHNlbGYuJHNlbGVjdGlvblswXSwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpCisgICAgICApIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICBzZWxmLnRyaWdnZXIoJ2JsdXInLCBldnQpOworICAgIH0sIDEpOworICB9OworCisgIEJhc2VTZWxlY3Rpb24ucHJvdG90eXBlLl9hdHRhY2hDbG9zZUhhbmRsZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgJChkb2N1bWVudC5ib2R5KS5vbignbW91c2Vkb3duLnNlbGVjdDIuJyArIGNvbnRhaW5lci5pZCwgZnVuY3Rpb24gKGUpIHsKKyAgICAgIHZhciAkdGFyZ2V0ID0gJChlLnRhcmdldCk7CisKKyAgICAgIHZhciAkc2VsZWN0ID0gJHRhcmdldC5jbG9zZXN0KCcuc2VsZWN0MicpOworCisgICAgICB2YXIgJGFsbCA9ICQoJy5zZWxlY3QyLnNlbGVjdDItY29udGFpbmVyLS1vcGVuJyk7CisKKyAgICAgICRhbGwuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7CisKKyAgICAgICAgaWYgKHRoaXMgPT0gJHNlbGVjdFswXSkgeworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciAkZWxlbWVudCA9IFV0aWxzLkdldERhdGEodGhpcywgJ2VsZW1lbnQnKTsKKworICAgICAgICAkZWxlbWVudC5zZWxlY3QyKCdjbG9zZScpOworICAgICAgfSk7CisgICAgfSk7CisgIH07CisKKyAgQmFzZVNlbGVjdGlvbi5wcm90b3R5cGUuX2RldGFjaENsb3NlSGFuZGxlciA9IGZ1bmN0aW9uIChjb250YWluZXIpIHsKKyAgICAkKGRvY3VtZW50LmJvZHkpLm9mZignbW91c2Vkb3duLnNlbGVjdDIuJyArIGNvbnRhaW5lci5pZCk7CisgIH07CisKKyAgQmFzZVNlbGVjdGlvbi5wcm90b3R5cGUucG9zaXRpb24gPSBmdW5jdGlvbiAoJHNlbGVjdGlvbiwgJGNvbnRhaW5lcikgeworICAgIHZhciAkc2VsZWN0aW9uQ29udGFpbmVyID0gJGNvbnRhaW5lci5maW5kKCcuc2VsZWN0aW9uJyk7CisgICAgJHNlbGVjdGlvbkNvbnRhaW5lci5hcHBlbmQoJHNlbGVjdGlvbik7CisgIH07CisKKyAgQmFzZVNlbGVjdGlvbi5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLl9kZXRhY2hDbG9zZUhhbmRsZXIodGhpcy5jb250YWluZXIpOworICB9OworCisgIEJhc2VTZWxlY3Rpb24ucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYHVwZGF0ZWAgbWV0aG9kIG11c3QgYmUgZGVmaW5lZCBpbiBjaGlsZCBjbGFzc2VzLicpOworICB9OworCisgIHJldHVybiBCYXNlU2VsZWN0aW9uOworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vc2luZ2xlJyxbCisgICdqcXVlcnknLAorICAnLi9iYXNlJywKKyAgJy4uL3V0aWxzJywKKyAgJy4uL2tleXMnCitdLCBmdW5jdGlvbiAoJCwgQmFzZVNlbGVjdGlvbiwgVXRpbHMsIEtFWVMpIHsKKyAgZnVuY3Rpb24gU2luZ2xlU2VsZWN0aW9uICgpIHsKKyAgICBTaW5nbGVTZWxlY3Rpb24uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgIH0KKworICBVdGlscy5FeHRlbmQoU2luZ2xlU2VsZWN0aW9uLCBCYXNlU2VsZWN0aW9uKTsKKworICBTaW5nbGVTZWxlY3Rpb24ucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgJHNlbGVjdGlvbiA9IFNpbmdsZVNlbGVjdGlvbi5fX3N1cGVyX18ucmVuZGVyLmNhbGwodGhpcyk7CisKKyAgICAkc2VsZWN0aW9uLmFkZENsYXNzKCdzZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlJyk7CisKKyAgICAkc2VsZWN0aW9uLmh0bWwoCisgICAgICAnPHNwYW4gY2xhc3M9InNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCI+PC9zcGFuPicgKworICAgICAgJzxzcGFuIGNsYXNzPSJzZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3ciIHJvbGU9InByZXNlbnRhdGlvbiI+JyArCisgICAgICAgICc8YiByb2xlPSJwcmVzZW50YXRpb24iPjwvYj4nICsKKyAgICAgICc8L3NwYW4+JworICAgICk7CisKKyAgICByZXR1cm4gJHNlbGVjdGlvbjsKKyAgfTsKKworICBTaW5nbGVTZWxlY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoY29udGFpbmVyLCAkY29udGFpbmVyKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgU2luZ2xlU2VsZWN0aW9uLl9fc3VwZXJfXy5iaW5kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisKKyAgICB2YXIgaWQgPSBjb250YWluZXIuaWQgKyAnLWNvbnRhaW5lcic7CisKKyAgICB0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCcpCisgICAgICAuYXR0cignaWQnLCBpZCkKKyAgICAgIC5hdHRyKCdyb2xlJywgJ3RleHRib3gnKQorICAgICAgLmF0dHIoJ2FyaWEtcmVhZG9ubHknLCAndHJ1ZScpOworICAgIHRoaXMuJHNlbGVjdGlvbi5hdHRyKCdhcmlhLWxhYmVsbGVkYnknLCBpZCk7CisKKyAgICB0aGlzLiRzZWxlY3Rpb24ub24oJ21vdXNlZG93bicsIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgIC8vIE9ubHkgcmVzcG9uZCB0byBsZWZ0IGNsaWNrcworICAgICAgaWYgKGV2dC53aGljaCAhPT0gMSkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHNlbGYudHJpZ2dlcigndG9nZ2xlJywgeworICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnQKKyAgICAgIH0pOworICAgIH0pOworCisgICAgdGhpcy4kc2VsZWN0aW9uLm9uKCdmb2N1cycsIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgIC8vIFVzZXIgZm9jdXNlcyBvbiB0aGUgY29udGFpbmVyCisgICAgfSk7CisKKyAgICB0aGlzLiRzZWxlY3Rpb24ub24oJ2JsdXInLCBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAvLyBVc2VyIGV4aXRzIHRoZSBjb250YWluZXIKKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbignZm9jdXMnLCBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICBpZiAoIWNvbnRhaW5lci5pc09wZW4oKSkgeworICAgICAgICBzZWxmLiRzZWxlY3Rpb24uZm9jdXMoKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfTsKKworICBTaW5nbGVTZWxlY3Rpb24ucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkgeworICAgIHZhciAkcmVuZGVyZWQgPSB0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCcpOworICAgICRyZW5kZXJlZC5lbXB0eSgpOworICAgICRyZW5kZXJlZC5yZW1vdmVBdHRyKCd0aXRsZScpOyAvLyBjbGVhciB0b29sdGlwIG9uIGVtcHR5CisgIH07CisKKyAgU2luZ2xlU2VsZWN0aW9uLnByb3RvdHlwZS5kaXNwbGF5ID0gZnVuY3Rpb24gKGRhdGEsIGNvbnRhaW5lcikgeworICAgIHZhciB0ZW1wbGF0ZSA9IHRoaXMub3B0aW9ucy5nZXQoJ3RlbXBsYXRlU2VsZWN0aW9uJyk7CisgICAgdmFyIGVzY2FwZU1hcmt1cCA9IHRoaXMub3B0aW9ucy5nZXQoJ2VzY2FwZU1hcmt1cCcpOworCisgICAgcmV0dXJuIGVzY2FwZU1hcmt1cCh0ZW1wbGF0ZShkYXRhLCBjb250YWluZXIpKTsKKyAgfTsKKworICBTaW5nbGVTZWxlY3Rpb24ucHJvdG90eXBlLnNlbGVjdGlvbkNvbnRhaW5lciA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gJCgnPHNwYW4+PC9zcGFuPicpOworICB9OworCisgIFNpbmdsZVNlbGVjdGlvbi5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRhdGEpIHsKKyAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHsKKyAgICAgIHRoaXMuY2xlYXIoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgc2VsZWN0aW9uID0gZGF0YVswXTsKKworICAgIHZhciAkcmVuZGVyZWQgPSB0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCcpOworICAgIHZhciBmb3JtYXR0ZWQgPSB0aGlzLmRpc3BsYXkoc2VsZWN0aW9uLCAkcmVuZGVyZWQpOworCisgICAgJHJlbmRlcmVkLmVtcHR5KCkuYXBwZW5kKGZvcm1hdHRlZCk7CisgICAgJHJlbmRlcmVkLmF0dHIoJ3RpdGxlJywgc2VsZWN0aW9uLnRpdGxlIHx8IHNlbGVjdGlvbi50ZXh0KTsKKyAgfTsKKworICByZXR1cm4gU2luZ2xlU2VsZWN0aW9uOworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vbXVsdGlwbGUnLFsKKyAgJ2pxdWVyeScsCisgICcuL2Jhc2UnLAorICAnLi4vdXRpbHMnCitdLCBmdW5jdGlvbiAoJCwgQmFzZVNlbGVjdGlvbiwgVXRpbHMpIHsKKyAgZnVuY3Rpb24gTXVsdGlwbGVTZWxlY3Rpb24gKCRlbGVtZW50LCBvcHRpb25zKSB7CisgICAgTXVsdGlwbGVTZWxlY3Rpb24uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgIH0KKworICBVdGlscy5FeHRlbmQoTXVsdGlwbGVTZWxlY3Rpb24sIEJhc2VTZWxlY3Rpb24pOworCisgIE11bHRpcGxlU2VsZWN0aW9uLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyICRzZWxlY3Rpb24gPSBNdWx0aXBsZVNlbGVjdGlvbi5fX3N1cGVyX18ucmVuZGVyLmNhbGwodGhpcyk7CisKKyAgICAkc2VsZWN0aW9uLmFkZENsYXNzKCdzZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGUnKTsKKworICAgICRzZWxlY3Rpb24uaHRtbCgKKyAgICAgICc8dWwgY2xhc3M9InNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCI+PC91bD4nCisgICAgKTsKKworICAgIHJldHVybiAkc2VsZWN0aW9uOworICB9OworCisgIE11bHRpcGxlU2VsZWN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgJGNvbnRhaW5lcikgeworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIE11bHRpcGxlU2VsZWN0aW9uLl9fc3VwZXJfXy5iaW5kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisKKyAgICB0aGlzLiRzZWxlY3Rpb24ub24oJ2NsaWNrJywgZnVuY3Rpb24gKGV2dCkgeworICAgICAgc2VsZi50cmlnZ2VyKCd0b2dnbGUnLCB7CisgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2dAorICAgICAgfSk7CisgICAgfSk7CisKKyAgICB0aGlzLiRzZWxlY3Rpb24ub24oCisgICAgICAnY2xpY2snLAorICAgICAgJy5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19yZW1vdmUnLAorICAgICAgZnVuY3Rpb24gKGV2dCkgeworICAgICAgICAvLyBJZ25vcmUgdGhlIGV2ZW50IGlmIGl0IGlzIGRpc2FibGVkCisgICAgICAgIGlmIChzZWxmLm9wdGlvbnMuZ2V0KCdkaXNhYmxlZCcpKSB7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyICRyZW1vdmUgPSAkKHRoaXMpOworICAgICAgICB2YXIgJHNlbGVjdGlvbiA9ICRyZW1vdmUucGFyZW50KCk7CisKKyAgICAgICAgdmFyIGRhdGEgPSBVdGlscy5HZXREYXRhKCRzZWxlY3Rpb25bMF0sICdkYXRhJyk7CisKKyAgICAgICAgc2VsZi50cmlnZ2VyKCd1bnNlbGVjdCcsIHsKKyAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnQsCisgICAgICAgICAgZGF0YTogZGF0YQorICAgICAgICB9KTsKKyAgICAgIH0KKyAgICApOworICB9OworCisgIE11bHRpcGxlU2VsZWN0aW9uLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgJHJlbmRlcmVkID0gdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKTsKKyAgICAkcmVuZGVyZWQuZW1wdHkoKTsKKyAgICAkcmVuZGVyZWQucmVtb3ZlQXR0cigndGl0bGUnKTsKKyAgfTsKKworICBNdWx0aXBsZVNlbGVjdGlvbi5wcm90b3R5cGUuZGlzcGxheSA9IGZ1bmN0aW9uIChkYXRhLCBjb250YWluZXIpIHsKKyAgICB2YXIgdGVtcGxhdGUgPSB0aGlzLm9wdGlvbnMuZ2V0KCd0ZW1wbGF0ZVNlbGVjdGlvbicpOworICAgIHZhciBlc2NhcGVNYXJrdXAgPSB0aGlzLm9wdGlvbnMuZ2V0KCdlc2NhcGVNYXJrdXAnKTsKKworICAgIHJldHVybiBlc2NhcGVNYXJrdXAodGVtcGxhdGUoZGF0YSwgY29udGFpbmVyKSk7CisgIH07CisKKyAgTXVsdGlwbGVTZWxlY3Rpb24ucHJvdG90eXBlLnNlbGVjdGlvbkNvbnRhaW5lciA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgJGNvbnRhaW5lciA9ICQoCisgICAgICAnPGxpIGNsYXNzPSJzZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlIj4nICsKKyAgICAgICAgJzxzcGFuIGNsYXNzPSJzZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19yZW1vdmUiIHJvbGU9InByZXNlbnRhdGlvbiI+JyArCisgICAgICAgICAgJyZ0aW1lczsnICsKKyAgICAgICAgJzwvc3Bhbj4nICsKKyAgICAgICc8L2xpPicKKyAgICApOworCisgICAgcmV0dXJuICRjb250YWluZXI7CisgIH07CisKKyAgTXVsdGlwbGVTZWxlY3Rpb24ucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgdGhpcy5jbGVhcigpOworCisgICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFyICRzZWxlY3Rpb25zID0gW107CisKKyAgICBmb3IgKHZhciBkID0gMDsgZCA8IGRhdGEubGVuZ3RoOyBkKyspIHsKKyAgICAgIHZhciBzZWxlY3Rpb24gPSBkYXRhW2RdOworCisgICAgICB2YXIgJHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uQ29udGFpbmVyKCk7CisgICAgICB2YXIgZm9ybWF0dGVkID0gdGhpcy5kaXNwbGF5KHNlbGVjdGlvbiwgJHNlbGVjdGlvbik7CisKKyAgICAgICRzZWxlY3Rpb24uYXBwZW5kKGZvcm1hdHRlZCk7CisgICAgICAkc2VsZWN0aW9uLmF0dHIoJ3RpdGxlJywgc2VsZWN0aW9uLnRpdGxlIHx8IHNlbGVjdGlvbi50ZXh0KTsKKworICAgICAgVXRpbHMuU3RvcmVEYXRhKCRzZWxlY3Rpb25bMF0sICdkYXRhJywgc2VsZWN0aW9uKTsKKworICAgICAgJHNlbGVjdGlvbnMucHVzaCgkc2VsZWN0aW9uKTsKKyAgICB9CisKKyAgICB2YXIgJHJlbmRlcmVkID0gdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKTsKKworICAgIFV0aWxzLmFwcGVuZE1hbnkoJHJlbmRlcmVkLCAkc2VsZWN0aW9ucyk7CisgIH07CisKKyAgcmV0dXJuIE11bHRpcGxlU2VsZWN0aW9uOworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vcGxhY2Vob2xkZXInLFsKKyAgJy4uL3V0aWxzJworXSwgZnVuY3Rpb24gKFV0aWxzKSB7CisgIGZ1bmN0aW9uIFBsYWNlaG9sZGVyIChkZWNvcmF0ZWQsICRlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhpcy5wbGFjZWhvbGRlciA9IHRoaXMubm9ybWFsaXplUGxhY2Vob2xkZXIob3B0aW9ucy5nZXQoJ3BsYWNlaG9sZGVyJykpOworCisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgJGVsZW1lbnQsIG9wdGlvbnMpOworICB9CisKKyAgUGxhY2Vob2xkZXIucHJvdG90eXBlLm5vcm1hbGl6ZVBsYWNlaG9sZGVyID0gZnVuY3Rpb24gKF8sIHBsYWNlaG9sZGVyKSB7CisgICAgaWYgKHR5cGVvZiBwbGFjZWhvbGRlciA9PT0gJ3N0cmluZycpIHsKKyAgICAgIHBsYWNlaG9sZGVyID0geworICAgICAgICBpZDogJycsCisgICAgICAgIHRleHQ6IHBsYWNlaG9sZGVyCisgICAgICB9OworICAgIH0KKworICAgIHJldHVybiBwbGFjZWhvbGRlcjsKKyAgfTsKKworICBQbGFjZWhvbGRlci5wcm90b3R5cGUuY3JlYXRlUGxhY2Vob2xkZXIgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBwbGFjZWhvbGRlcikgeworICAgIHZhciAkcGxhY2Vob2xkZXIgPSB0aGlzLnNlbGVjdGlvbkNvbnRhaW5lcigpOworCisgICAgJHBsYWNlaG9sZGVyLmh0bWwodGhpcy5kaXNwbGF5KHBsYWNlaG9sZGVyKSk7CisgICAgJHBsYWNlaG9sZGVyLmFkZENsYXNzKCdzZWxlY3QyLXNlbGVjdGlvbl9fcGxhY2Vob2xkZXInKQorICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZScpOworCisgICAgcmV0dXJuICRwbGFjZWhvbGRlcjsKKyAgfTsKKworICBQbGFjZWhvbGRlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgZGF0YSkgeworICAgIHZhciBzaW5nbGVQbGFjZWhvbGRlciA9ICgKKyAgICAgIGRhdGEubGVuZ3RoID09IDEgJiYgZGF0YVswXS5pZCAhPSB0aGlzLnBsYWNlaG9sZGVyLmlkCisgICAgKTsKKyAgICB2YXIgbXVsdGlwbGVTZWxlY3Rpb25zID0gZGF0YS5sZW5ndGggPiAxOworCisgICAgaWYgKG11bHRpcGxlU2VsZWN0aW9ucyB8fCBzaW5nbGVQbGFjZWhvbGRlcikgeworICAgICAgcmV0dXJuIGRlY29yYXRlZC5jYWxsKHRoaXMsIGRhdGEpOworICAgIH0KKworICAgIHRoaXMuY2xlYXIoKTsKKworICAgIHZhciAkcGxhY2Vob2xkZXIgPSB0aGlzLmNyZWF0ZVBsYWNlaG9sZGVyKHRoaXMucGxhY2Vob2xkZXIpOworCisgICAgdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKS5hcHBlbmQoJHBsYWNlaG9sZGVyKTsKKyAgfTsKKworICByZXR1cm4gUGxhY2Vob2xkZXI7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL3NlbGVjdGlvbi9hbGxvd0NsZWFyJyxbCisgICdqcXVlcnknLAorICAnLi4va2V5cycsCisgICcuLi91dGlscycKK10sIGZ1bmN0aW9uICgkLCBLRVlTLCBVdGlscykgeworICBmdW5jdGlvbiBBbGxvd0NsZWFyICgpIHsgfQorCisgIEFsbG93Q2xlYXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIsICRjb250YWluZXIpIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBjb250YWluZXIsICRjb250YWluZXIpOworCisgICAgaWYgKHRoaXMucGxhY2Vob2xkZXIgPT0gbnVsbCkgeworICAgICAgaWYgKHRoaXMub3B0aW9ucy5nZXQoJ2RlYnVnJykgJiYgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5lcnJvcikgeworICAgICAgICBjb25zb2xlLmVycm9yKAorICAgICAgICAgICdTZWxlY3QyOiBUaGUgYGFsbG93Q2xlYXJgIG9wdGlvbiBzaG91bGQgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiAnICsKKyAgICAgICAgICAnd2l0aCB0aGUgYHBsYWNlaG9sZGVyYCBvcHRpb24uJworICAgICAgICApOworICAgICAgfQorICAgIH0KKworICAgIHRoaXMuJHNlbGVjdGlvbi5vbignbW91c2Vkb3duJywgJy5zZWxlY3QyLXNlbGVjdGlvbl9fY2xlYXInLAorICAgICAgZnVuY3Rpb24gKGV2dCkgeworICAgICAgICBzZWxmLl9oYW5kbGVDbGVhcihldnQpOworICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCdrZXlwcmVzcycsIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgIHNlbGYuX2hhbmRsZUtleWJvYXJkQ2xlYXIoZXZ0LCBjb250YWluZXIpOworICAgIH0pOworICB9OworCisgIEFsbG93Q2xlYXIucHJvdG90eXBlLl9oYW5kbGVDbGVhciA9IGZ1bmN0aW9uIChfLCBldnQpIHsKKyAgICAvLyBJZ25vcmUgdGhlIGV2ZW50IGlmIGl0IGlzIGRpc2FibGVkCisgICAgaWYgKHRoaXMub3B0aW9ucy5nZXQoJ2Rpc2FibGVkJykpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgJGNsZWFyID0gdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fY2xlYXInKTsKKworICAgIC8vIElnbm9yZSB0aGUgZXZlbnQgaWYgbm90aGluZyBoYXMgYmVlbiBzZWxlY3RlZAorICAgIGlmICgkY2xlYXIubGVuZ3RoID09PSAwKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpOworCisgICAgdmFyIGRhdGEgPSBVdGlscy5HZXREYXRhKCRjbGVhclswXSwgJ2RhdGEnKTsKKworICAgIHZhciBwcmV2aW91c1ZhbCA9IHRoaXMuJGVsZW1lbnQudmFsKCk7CisgICAgdGhpcy4kZWxlbWVudC52YWwodGhpcy5wbGFjZWhvbGRlci5pZCk7CisKKyAgICB2YXIgdW5zZWxlY3REYXRhID0geworICAgICAgZGF0YTogZGF0YQorICAgIH07CisgICAgdGhpcy50cmlnZ2VyKCdjbGVhcicsIHVuc2VsZWN0RGF0YSk7CisgICAgaWYgKHVuc2VsZWN0RGF0YS5wcmV2ZW50ZWQpIHsKKyAgICAgIHRoaXMuJGVsZW1lbnQudmFsKHByZXZpb3VzVmFsKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKHZhciBkID0gMDsgZCA8IGRhdGEubGVuZ3RoOyBkKyspIHsKKyAgICAgIHVuc2VsZWN0RGF0YSA9IHsKKyAgICAgICAgZGF0YTogZGF0YVtkXQorICAgICAgfTsKKworICAgICAgLy8gVHJpZ2dlciB0aGUgYHVuc2VsZWN0YCBldmVudCwgc28gcGVvcGxlIGNhbiBwcmV2ZW50IGl0IGZyb20gYmVpbmcKKyAgICAgIC8vIGNsZWFyZWQuCisgICAgICB0aGlzLnRyaWdnZXIoJ3Vuc2VsZWN0JywgdW5zZWxlY3REYXRhKTsKKworICAgICAgLy8gSWYgdGhlIGV2ZW50IHdhcyBwcmV2ZW50ZWQsIGRvbid0IGNsZWFyIGl0IG91dC4KKyAgICAgIGlmICh1bnNlbGVjdERhdGEucHJldmVudGVkKSB7CisgICAgICAgIHRoaXMuJGVsZW1lbnQudmFsKHByZXZpb3VzVmFsKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKworICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignY2hhbmdlJyk7CisKKyAgICB0aGlzLnRyaWdnZXIoJ3RvZ2dsZScsIHt9KTsKKyAgfTsKKworICBBbGxvd0NsZWFyLnByb3RvdHlwZS5faGFuZGxlS2V5Ym9hcmRDbGVhciA9IGZ1bmN0aW9uIChfLCBldnQsIGNvbnRhaW5lcikgeworICAgIGlmIChjb250YWluZXIuaXNPcGVuKCkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZXZ0LndoaWNoID09IEtFWVMuREVMRVRFIHx8IGV2dC53aGljaCA9PSBLRVlTLkJBQ0tTUEFDRSkgeworICAgICAgdGhpcy5faGFuZGxlQ2xlYXIoZXZ0KTsKKyAgICB9CisgIH07CisKKyAgQWxsb3dDbGVhci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgZGF0YSkgeworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGRhdGEpOworCisgICAgaWYgKHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX3BsYWNlaG9sZGVyJykubGVuZ3RoID4gMCB8fAorICAgICAgICBkYXRhLmxlbmd0aCA9PT0gMCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciAkcmVtb3ZlID0gJCgKKyAgICAgICc8c3BhbiBjbGFzcz0ic2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyIj4nICsKKyAgICAgICAgJyZ0aW1lczsnICsKKyAgICAgICc8L3NwYW4+JworICAgICk7CisgICAgVXRpbHMuU3RvcmVEYXRhKCRyZW1vdmVbMF0sICdkYXRhJywgZGF0YSk7CisKKyAgICB0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCcpLnByZXBlbmQoJHJlbW92ZSk7CisgIH07CisKKyAgcmV0dXJuIEFsbG93Q2xlYXI7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL3NlbGVjdGlvbi9zZWFyY2gnLFsKKyAgJ2pxdWVyeScsCisgICcuLi91dGlscycsCisgICcuLi9rZXlzJworXSwgZnVuY3Rpb24gKCQsIFV0aWxzLCBLRVlTKSB7CisgIGZ1bmN0aW9uIFNlYXJjaCAoZGVjb3JhdGVkLCAkZWxlbWVudCwgb3B0aW9ucykgeworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsICRlbGVtZW50LCBvcHRpb25zKTsKKyAgfQorCisgIFNlYXJjaC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRlY29yYXRlZCkgeworICAgIHZhciAkc2VhcmNoID0gJCgKKyAgICAgICc8bGkgY2xhc3M9InNlbGVjdDItc2VhcmNoIHNlbGVjdDItc2VhcmNoLS1pbmxpbmUiPicgKworICAgICAgICAnPGlucHV0IGNsYXNzPSJzZWxlY3QyLXNlYXJjaF9fZmllbGQiIHR5cGU9InNlYXJjaCIgdGFiaW5kZXg9Ii0xIicgKworICAgICAgICAnIGF1dG9jb21wbGV0ZT0ib2ZmIiBhdXRvY29ycmVjdD0ib2ZmIiBhdXRvY2FwaXRhbGl6ZT0ibm9uZSInICsKKyAgICAgICAgJyBzcGVsbGNoZWNrPSJmYWxzZSIgcm9sZT0idGV4dGJveCIgYXJpYS1hdXRvY29tcGxldGU9Imxpc3QiIC8+JyArCisgICAgICAnPC9saT4nCisgICAgKTsKKworICAgIHRoaXMuJHNlYXJjaENvbnRhaW5lciA9ICRzZWFyY2g7CisgICAgdGhpcy4kc2VhcmNoID0gJHNlYXJjaC5maW5kKCdpbnB1dCcpOworCisgICAgdmFyICRyZW5kZXJlZCA9IGRlY29yYXRlZC5jYWxsKHRoaXMpOworCisgICAgdGhpcy5fdHJhbnNmZXJUYWJJbmRleCgpOworCisgICAgcmV0dXJuICRyZW5kZXJlZDsKKyAgfTsKKworICBTZWFyY2gucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIsICRjb250YWluZXIpIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBjb250YWluZXIsICRjb250YWluZXIpOworCisgICAgY29udGFpbmVyLm9uKCdvcGVuJywgZnVuY3Rpb24gKCkgeworICAgICAgc2VsZi4kc2VhcmNoLnRyaWdnZXIoJ2ZvY3VzJyk7CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkgeworICAgICAgc2VsZi4kc2VhcmNoLnZhbCgnJyk7CisgICAgICBzZWxmLiRzZWFyY2gucmVtb3ZlQXR0cignYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7CisgICAgICBzZWxmLiRzZWFyY2gudHJpZ2dlcignZm9jdXMnKTsKKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbignZW5hYmxlJywgZnVuY3Rpb24gKCkgeworICAgICAgc2VsZi4kc2VhcmNoLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpOworCisgICAgICBzZWxmLl90cmFuc2ZlclRhYkluZGV4KCk7CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ2Rpc2FibGUnLCBmdW5jdGlvbiAoKSB7CisgICAgICBzZWxmLiRzZWFyY2gucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbignZm9jdXMnLCBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICBzZWxmLiRzZWFyY2gudHJpZ2dlcignZm9jdXMnKTsKKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbigncmVzdWx0czpmb2N1cycsIGZ1bmN0aW9uIChwYXJhbXMpIHsKKyAgICAgIHNlbGYuJHNlYXJjaC5hdHRyKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBwYXJhbXMuaWQpOworICAgIH0pOworCisgICAgdGhpcy4kc2VsZWN0aW9uLm9uKCdmb2N1c2luJywgJy5zZWxlY3QyLXNlYXJjaC0taW5saW5lJywgZnVuY3Rpb24gKGV2dCkgeworICAgICAgc2VsZi50cmlnZ2VyKCdmb2N1cycsIGV2dCk7CisgICAgfSk7CisKKyAgICB0aGlzLiRzZWxlY3Rpb24ub24oJ2ZvY3Vzb3V0JywgJy5zZWxlY3QyLXNlYXJjaC0taW5saW5lJywgZnVuY3Rpb24gKGV2dCkgeworICAgICAgc2VsZi5faGFuZGxlQmx1cihldnQpOworICAgIH0pOworCisgICAgdGhpcy4kc2VsZWN0aW9uLm9uKCdrZXlkb3duJywgJy5zZWxlY3QyLXNlYXJjaC0taW5saW5lJywgZnVuY3Rpb24gKGV2dCkgeworICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpOworCisgICAgICBzZWxmLnRyaWdnZXIoJ2tleXByZXNzJywgZXZ0KTsKKworICAgICAgc2VsZi5fa2V5VXBQcmV2ZW50ZWQgPSBldnQuaXNEZWZhdWx0UHJldmVudGVkKCk7CisKKyAgICAgIHZhciBrZXkgPSBldnQud2hpY2g7CisKKyAgICAgIGlmIChrZXkgPT09IEtFWVMuQkFDS1NQQUNFICYmIHNlbGYuJHNlYXJjaC52YWwoKSA9PT0gJycpIHsKKyAgICAgICAgdmFyICRwcmV2aW91c0Nob2ljZSA9IHNlbGYuJHNlYXJjaENvbnRhaW5lcgorICAgICAgICAgIC5wcmV2KCcuc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZScpOworCisgICAgICAgIGlmICgkcHJldmlvdXNDaG9pY2UubGVuZ3RoID4gMCkgeworICAgICAgICAgIHZhciBpdGVtID0gVXRpbHMuR2V0RGF0YSgkcHJldmlvdXNDaG9pY2VbMF0sICdkYXRhJyk7CisKKyAgICAgICAgICBzZWxmLnNlYXJjaFJlbW92ZUNob2ljZShpdGVtKTsKKworICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB9CisgICAgICB9CisgICAgfSk7CisKKyAgICAvLyBUcnkgdG8gZGV0ZWN0IHRoZSBJRSB2ZXJzaW9uIHNob3VsZCB0aGUgYGRvY3VtZW50TW9kZWAgcHJvcGVydHkgdGhhdAorICAgIC8vIGlzIHN0b3JlZCBvbiB0aGUgZG9jdW1lbnQuIFRoaXMgaXMgb25seSBpbXBsZW1lbnRlZCBpbiBJRSBhbmQgaXMKKyAgICAvLyBzbGlnaHRseSBjbGVhbmVyIHRoYW4gZG9pbmcgYSB1c2VyIGFnZW50IGNoZWNrLgorICAgIC8vIFRoaXMgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZSBpbiBFZGdlLCBidXQgRWRnZSBhbHNvIGRvZXNuJ3QgaGF2ZQorICAgIC8vIHRoaXMgYnVnLgorICAgIHZhciBtc2llID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlOworICAgIHZhciBkaXNhYmxlSW5wdXRFdmVudHMgPSBtc2llICYmIG1zaWUgPD0gMTE7CisKKyAgICAvLyBXb3JrYXJvdW5kIGZvciBicm93c2VycyB3aGljaCBkbyBub3Qgc3VwcG9ydCB0aGUgYGlucHV0YCBldmVudAorICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IGRvdWJsZS10cmlnZ2VyaW5nIG9mIGV2ZW50cyBmb3IgYnJvd3NlcnMgd2hpY2ggc3VwcG9ydAorICAgIC8vIGJvdGggdGhlIGBrZXl1cGAgYW5kIGBpbnB1dGAgZXZlbnRzLgorICAgIHRoaXMuJHNlbGVjdGlvbi5vbigKKyAgICAgICdpbnB1dC5zZWFyY2hjaGVjaycsCisgICAgICAnLnNlbGVjdDItc2VhcmNoLS1pbmxpbmUnLAorICAgICAgZnVuY3Rpb24gKGV2dCkgeworICAgICAgICAvLyBJRSB3aWxsIHRyaWdnZXIgdGhlIGBpbnB1dGAgZXZlbnQgd2hlbiBhIHBsYWNlaG9sZGVyIGlzIHVzZWQgb24gYQorICAgICAgICAvLyBzZWFyY2ggYm94LiBUbyBnZXQgYXJvdW5kIHRoaXMgaXNzdWUsIHdlIGFyZSBmb3JjZWQgdG8gaWdub3JlIGFsbAorICAgICAgICAvLyBgaW5wdXRgIGV2ZW50cyBpbiBJRSBhbmQga2VlcCB1c2luZyBga2V5dXBgLgorICAgICAgICBpZiAoZGlzYWJsZUlucHV0RXZlbnRzKSB7CisgICAgICAgICAgc2VsZi4kc2VsZWN0aW9uLm9mZignaW5wdXQuc2VhcmNoIGlucHV0LnNlYXJjaGNoZWNrJyk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gVW5iaW5kIHRoZSBkdXBsaWNhdGVkIGBrZXl1cGAgZXZlbnQKKyAgICAgICAgc2VsZi4kc2VsZWN0aW9uLm9mZigna2V5dXAuc2VhcmNoJyk7CisgICAgICB9CisgICAgKTsKKworICAgIHRoaXMuJHNlbGVjdGlvbi5vbigKKyAgICAgICdrZXl1cC5zZWFyY2ggaW5wdXQuc2VhcmNoJywKKyAgICAgICcuc2VsZWN0Mi1zZWFyY2gtLWlubGluZScsCisgICAgICBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAgIC8vIElFIHdpbGwgdHJpZ2dlciB0aGUgYGlucHV0YCBldmVudCB3aGVuIGEgcGxhY2Vob2xkZXIgaXMgdXNlZCBvbiBhCisgICAgICAgIC8vIHNlYXJjaCBib3guIFRvIGdldCBhcm91bmQgdGhpcyBpc3N1ZSwgd2UgYXJlIGZvcmNlZCB0byBpZ25vcmUgYWxsCisgICAgICAgIC8vIGBpbnB1dGAgZXZlbnRzIGluIElFIGFuZCBrZWVwIHVzaW5nIGBrZXl1cGAuCisgICAgICAgIGlmIChkaXNhYmxlSW5wdXRFdmVudHMgJiYgZXZ0LnR5cGUgPT09ICdpbnB1dCcpIHsKKyAgICAgICAgICBzZWxmLiRzZWxlY3Rpb24ub2ZmKCdpbnB1dC5zZWFyY2ggaW5wdXQuc2VhcmNoY2hlY2snKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2YXIga2V5ID0gZXZ0LndoaWNoOworCisgICAgICAgIC8vIFdlIGNhbiBmcmVlbHkgaWdub3JlIGV2ZW50cyBmcm9tIG1vZGlmaWVyIGtleXMKKyAgICAgICAgaWYgKGtleSA9PSBLRVlTLlNISUZUIHx8IGtleSA9PSBLRVlTLkNUUkwgfHwga2V5ID09IEtFWVMuQUxUKSB7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGFiYmluZyB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIHRoZSBga2V5ZG93bmAgcGhhc2UKKyAgICAgICAgaWYgKGtleSA9PSBLRVlTLlRBQikgeworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHNlbGYuaGFuZGxlU2VhcmNoKGV2dCk7CisgICAgICB9CisgICAgKTsKKyAgfTsKKworICAvKioKKyAgICogVGhpcyBtZXRob2Qgd2lsbCB0cmFuc2ZlciB0aGUgdGFiaW5kZXggYXR0cmlidXRlIGZyb20gdGhlIHJlbmRlcmVkCisgICAqIHNlbGVjdGlvbiB0byB0aGUgc2VhcmNoIGJveC4gVGhpcyBhbGxvd3MgZm9yIHRoZSBzZWFyY2ggYm94IHRvIGJlIHVzZWQgYXMKKyAgICogdGhlIHByaW1hcnkgZm9jdXMgaW5zdGVhZCBvZiB0aGUgc2VsZWN0aW9uIGNvbnRhaW5lci4KKyAgICoKKyAgICogQHByaXZhdGUKKyAgICovCisgIFNlYXJjaC5wcm90b3R5cGUuX3RyYW5zZmVyVGFiSW5kZXggPSBmdW5jdGlvbiAoZGVjb3JhdGVkKSB7CisgICAgdGhpcy4kc2VhcmNoLmF0dHIoJ3RhYmluZGV4JywgdGhpcy4kc2VsZWN0aW9uLmF0dHIoJ3RhYmluZGV4JykpOworICAgIHRoaXMuJHNlbGVjdGlvbi5hdHRyKCd0YWJpbmRleCcsICctMScpOworICB9OworCisgIFNlYXJjaC5wcm90b3R5cGUuY3JlYXRlUGxhY2Vob2xkZXIgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBwbGFjZWhvbGRlcikgeworICAgIHRoaXMuJHNlYXJjaC5hdHRyKCdwbGFjZWhvbGRlcicsIHBsYWNlaG9sZGVyLnRleHQpOworICB9OworCisgIFNlYXJjaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgZGF0YSkgeworICAgIHZhciBzZWFyY2hIYWRGb2N1cyA9IHRoaXMuJHNlYXJjaFswXSA9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50OworCisgICAgdGhpcy4kc2VhcmNoLmF0dHIoJ3BsYWNlaG9sZGVyJywgJycpOworCisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgZGF0YSk7CisKKyAgICB0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCcpCisgICAgICAgICAgICAgICAgICAgLmFwcGVuZCh0aGlzLiRzZWFyY2hDb250YWluZXIpOworCisgICAgdGhpcy5yZXNpemVTZWFyY2goKTsKKyAgICBpZiAoc2VhcmNoSGFkRm9jdXMpIHsKKyAgICAgIHZhciBpc1RhZ0lucHV0ID0gdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1zZWxlY3QyLXRhZ10nKS5sZW5ndGg7CisgICAgICBpZiAoaXNUYWdJbnB1dCkgeworICAgICAgICAvLyBmaXggSUUxMSBidWcgd2hlcmUgdGFnIGlucHV0IGxvc3QgZm9jdXMKKyAgICAgICAgdGhpcy4kZWxlbWVudC5mb2N1cygpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy4kc2VhcmNoLmZvY3VzKCk7CisgICAgICB9CisgICAgfQorICB9OworCisgIFNlYXJjaC5wcm90b3R5cGUuaGFuZGxlU2VhcmNoID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMucmVzaXplU2VhcmNoKCk7CisKKyAgICBpZiAoIXRoaXMuX2tleVVwUHJldmVudGVkKSB7CisgICAgICB2YXIgaW5wdXQgPSB0aGlzLiRzZWFyY2gudmFsKCk7CisKKyAgICAgIHRoaXMudHJpZ2dlcigncXVlcnknLCB7CisgICAgICAgIHRlcm06IGlucHV0CisgICAgICB9KTsKKyAgICB9CisKKyAgICB0aGlzLl9rZXlVcFByZXZlbnRlZCA9IGZhbHNlOworICB9OworCisgIFNlYXJjaC5wcm90b3R5cGUuc2VhcmNoUmVtb3ZlQ2hvaWNlID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgaXRlbSkgeworICAgIHRoaXMudHJpZ2dlcigndW5zZWxlY3QnLCB7CisgICAgICBkYXRhOiBpdGVtCisgICAgfSk7CisKKyAgICB0aGlzLiRzZWFyY2gudmFsKGl0ZW0udGV4dCk7CisgICAgdGhpcy5oYW5kbGVTZWFyY2goKTsKKyAgfTsKKworICBTZWFyY2gucHJvdG90eXBlLnJlc2l6ZVNlYXJjaCA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLiRzZWFyY2guY3NzKCd3aWR0aCcsICcyNXB4Jyk7CisKKyAgICB2YXIgd2lkdGggPSAnJzsKKworICAgIGlmICh0aGlzLiRzZWFyY2guYXR0cigncGxhY2Vob2xkZXInKSAhPT0gJycpIHsKKyAgICAgIHdpZHRoID0gdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKS5pbm5lcldpZHRoKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciBtaW5pbXVtV2lkdGggPSB0aGlzLiRzZWFyY2gudmFsKCkubGVuZ3RoICsgMTsKKworICAgICAgd2lkdGggPSAobWluaW11bVdpZHRoICogMC43NSkgKyAnZW0nOworICAgIH0KKworICAgIHRoaXMuJHNlYXJjaC5jc3MoJ3dpZHRoJywgd2lkdGgpOworICB9OworCisgIHJldHVybiBTZWFyY2g7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL3NlbGVjdGlvbi9ldmVudFJlbGF5JyxbCisgICdqcXVlcnknCitdLCBmdW5jdGlvbiAoJCkgeworICBmdW5jdGlvbiBFdmVudFJlbGF5ICgpIHsgfQorCisgIEV2ZW50UmVsYXkucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIsICRjb250YWluZXIpIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgdmFyIHJlbGF5RXZlbnRzID0gWworICAgICAgJ29wZW4nLCAnb3BlbmluZycsCisgICAgICAnY2xvc2UnLCAnY2xvc2luZycsCisgICAgICAnc2VsZWN0JywgJ3NlbGVjdGluZycsCisgICAgICAndW5zZWxlY3QnLCAndW5zZWxlY3RpbmcnLAorICAgICAgJ2NsZWFyJywgJ2NsZWFyaW5nJworICAgIF07CisKKyAgICB2YXIgcHJldmVudGFibGVFdmVudHMgPSBbCisgICAgICAnb3BlbmluZycsICdjbG9zaW5nJywgJ3NlbGVjdGluZycsICd1bnNlbGVjdGluZycsICdjbGVhcmluZycKKyAgICBdOworCisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgY29udGFpbmVyLCAkY29udGFpbmVyKTsKKworICAgIGNvbnRhaW5lci5vbignKicsIGZ1bmN0aW9uIChuYW1lLCBwYXJhbXMpIHsKKyAgICAgIC8vIElnbm9yZSBldmVudHMgdGhhdCBzaG91bGQgbm90IGJlIHJlbGF5ZWQKKyAgICAgIGlmICgkLmluQXJyYXkobmFtZSwgcmVsYXlFdmVudHMpID09PSAtMSkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIC8vIFRoZSBwYXJhbWV0ZXJzIHNob3VsZCBhbHdheXMgYmUgYW4gb2JqZWN0CisgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307CisKKyAgICAgIC8vIEdlbmVyYXRlIHRoZSBqUXVlcnkgZXZlbnQgZm9yIHRoZSBTZWxlY3QyIGV2ZW50CisgICAgICB2YXIgZXZ0ID0gJC5FdmVudCgnc2VsZWN0MjonICsgbmFtZSwgeworICAgICAgICBwYXJhbXM6IHBhcmFtcworICAgICAgfSk7CisKKyAgICAgIHNlbGYuJGVsZW1lbnQudHJpZ2dlcihldnQpOworCisgICAgICAvLyBPbmx5IGhhbmRsZSBwcmV2ZW50YWJsZSBldmVudHMgaWYgaXQgd2FzIG9uZQorICAgICAgaWYgKCQuaW5BcnJheShuYW1lLCBwcmV2ZW50YWJsZUV2ZW50cykgPT09IC0xKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgcGFyYW1zLnByZXZlbnRlZCA9IGV2dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICB9KTsKKyAgfTsKKworICByZXR1cm4gRXZlbnRSZWxheTsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvdHJhbnNsYXRpb24nLFsKKyAgJ2pxdWVyeScsCisgICdyZXF1aXJlJworXSwgZnVuY3Rpb24gKCQsIHJlcXVpcmUpIHsKKyAgZnVuY3Rpb24gVHJhbnNsYXRpb24gKGRpY3QpIHsKKyAgICB0aGlzLmRpY3QgPSBkaWN0IHx8IHt9OworICB9CisKKyAgVHJhbnNsYXRpb24ucHJvdG90eXBlLmFsbCA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gdGhpcy5kaWN0OworICB9OworCisgIFRyYW5zbGF0aW9uLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7CisgICAgcmV0dXJuIHRoaXMuZGljdFtrZXldOworICB9OworCisgIFRyYW5zbGF0aW9uLnByb3RvdHlwZS5leHRlbmQgPSBmdW5jdGlvbiAodHJhbnNsYXRpb24pIHsKKyAgICB0aGlzLmRpY3QgPSAkLmV4dGVuZCh7fSwgdHJhbnNsYXRpb24uYWxsKCksIHRoaXMuZGljdCk7CisgIH07CisKKyAgLy8gU3RhdGljIGZ1bmN0aW9ucworCisgIFRyYW5zbGF0aW9uLl9jYWNoZSA9IHt9OworCisgIFRyYW5zbGF0aW9uLmxvYWRQYXRoID0gZnVuY3Rpb24gKHBhdGgpIHsKKyAgICBpZiAoIShwYXRoIGluIFRyYW5zbGF0aW9uLl9jYWNoZSkpIHsKKyAgICAgIHZhciB0cmFuc2xhdGlvbnMgPSByZXF1aXJlKHBhdGgpOworCisgICAgICBUcmFuc2xhdGlvbi5fY2FjaGVbcGF0aF0gPSB0cmFuc2xhdGlvbnM7CisgICAgfQorCisgICAgcmV0dXJuIG5ldyBUcmFuc2xhdGlvbihUcmFuc2xhdGlvbi5fY2FjaGVbcGF0aF0pOworICB9OworCisgIHJldHVybiBUcmFuc2xhdGlvbjsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvZGlhY3JpdGljcycsWworCitdLCBmdW5jdGlvbiAoKSB7CisgIHZhciBkaWFjcml0aWNzID0geworICAgICdcdTI0QjYnOiAnQScsCisgICAgJ1x1RkYyMSc6ICdBJywKKyAgICAnXHUwMEMwJzogJ0EnLAorICAgICdcdTAwQzEnOiAnQScsCisgICAgJ1x1MDBDMic6ICdBJywKKyAgICAnXHUxRUE2JzogJ0EnLAorICAgICdcdTFFQTQnOiAnQScsCisgICAgJ1x1MUVBQSc6ICdBJywKKyAgICAnXHUxRUE4JzogJ0EnLAorICAgICdcdTAwQzMnOiAnQScsCisgICAgJ1x1MDEwMCc6ICdBJywKKyAgICAnXHUwMTAyJzogJ0EnLAorICAgICdcdTFFQjAnOiAnQScsCisgICAgJ1x1MUVBRSc6ICdBJywKKyAgICAnXHUxRUI0JzogJ0EnLAorICAgICdcdTFFQjInOiAnQScsCisgICAgJ1x1MDIyNic6ICdBJywKKyAgICAnXHUwMUUwJzogJ0EnLAorICAgICdcdTAwQzQnOiAnQScsCisgICAgJ1x1MDFERSc6ICdBJywKKyAgICAnXHUxRUEyJzogJ0EnLAorICAgICdcdTAwQzUnOiAnQScsCisgICAgJ1x1MDFGQSc6ICdBJywKKyAgICAnXHUwMUNEJzogJ0EnLAorICAgICdcdTAyMDAnOiAnQScsCisgICAgJ1x1MDIwMic6ICdBJywKKyAgICAnXHUxRUEwJzogJ0EnLAorICAgICdcdTFFQUMnOiAnQScsCisgICAgJ1x1MUVCNic6ICdBJywKKyAgICAnXHUxRTAwJzogJ0EnLAorICAgICdcdTAxMDQnOiAnQScsCisgICAgJ1x1MDIzQSc6ICdBJywKKyAgICAnXHUyQzZGJzogJ0EnLAorICAgICdcdUE3MzInOiAnQUEnLAorICAgICdcdTAwQzYnOiAnQUUnLAorICAgICdcdTAxRkMnOiAnQUUnLAorICAgICdcdTAxRTInOiAnQUUnLAorICAgICdcdUE3MzQnOiAnQU8nLAorICAgICdcdUE3MzYnOiAnQVUnLAorICAgICdcdUE3MzgnOiAnQVYnLAorICAgICdcdUE3M0EnOiAnQVYnLAorICAgICdcdUE3M0MnOiAnQVknLAorICAgICdcdTI0QjcnOiAnQicsCisgICAgJ1x1RkYyMic6ICdCJywKKyAgICAnXHUxRTAyJzogJ0InLAorICAgICdcdTFFMDQnOiAnQicsCisgICAgJ1x1MUUwNic6ICdCJywKKyAgICAnXHUwMjQzJzogJ0InLAorICAgICdcdTAxODInOiAnQicsCisgICAgJ1x1MDE4MSc6ICdCJywKKyAgICAnXHUyNEI4JzogJ0MnLAorICAgICdcdUZGMjMnOiAnQycsCisgICAgJ1x1MDEwNic6ICdDJywKKyAgICAnXHUwMTA4JzogJ0MnLAorICAgICdcdTAxMEEnOiAnQycsCisgICAgJ1x1MDEwQyc6ICdDJywKKyAgICAnXHUwMEM3JzogJ0MnLAorICAgICdcdTFFMDgnOiAnQycsCisgICAgJ1x1MDE4Nyc6ICdDJywKKyAgICAnXHUwMjNCJzogJ0MnLAorICAgICdcdUE3M0UnOiAnQycsCisgICAgJ1x1MjRCOSc6ICdEJywKKyAgICAnXHVGRjI0JzogJ0QnLAorICAgICdcdTFFMEEnOiAnRCcsCisgICAgJ1x1MDEwRSc6ICdEJywKKyAgICAnXHUxRTBDJzogJ0QnLAorICAgICdcdTFFMTAnOiAnRCcsCisgICAgJ1x1MUUxMic6ICdEJywKKyAgICAnXHUxRTBFJzogJ0QnLAorICAgICdcdTAxMTAnOiAnRCcsCisgICAgJ1x1MDE4Qic6ICdEJywKKyAgICAnXHUwMThBJzogJ0QnLAorICAgICdcdTAxODknOiAnRCcsCisgICAgJ1x1QTc3OSc6ICdEJywKKyAgICAnXHUwMUYxJzogJ0RaJywKKyAgICAnXHUwMUM0JzogJ0RaJywKKyAgICAnXHUwMUYyJzogJ0R6JywKKyAgICAnXHUwMUM1JzogJ0R6JywKKyAgICAnXHUyNEJBJzogJ0UnLAorICAgICdcdUZGMjUnOiAnRScsCisgICAgJ1x1MDBDOCc6ICdFJywKKyAgICAnXHUwMEM5JzogJ0UnLAorICAgICdcdTAwQ0EnOiAnRScsCisgICAgJ1x1MUVDMCc6ICdFJywKKyAgICAnXHUxRUJFJzogJ0UnLAorICAgICdcdTFFQzQnOiAnRScsCisgICAgJ1x1MUVDMic6ICdFJywKKyAgICAnXHUxRUJDJzogJ0UnLAorICAgICdcdTAxMTInOiAnRScsCisgICAgJ1x1MUUxNCc6ICdFJywKKyAgICAnXHUxRTE2JzogJ0UnLAorICAgICdcdTAxMTQnOiAnRScsCisgICAgJ1x1MDExNic6ICdFJywKKyAgICAnXHUwMENCJzogJ0UnLAorICAgICdcdTFFQkEnOiAnRScsCisgICAgJ1x1MDExQSc6ICdFJywKKyAgICAnXHUwMjA0JzogJ0UnLAorICAgICdcdTAyMDYnOiAnRScsCisgICAgJ1x1MUVCOCc6ICdFJywKKyAgICAnXHUxRUM2JzogJ0UnLAorICAgICdcdTAyMjgnOiAnRScsCisgICAgJ1x1MUUxQyc6ICdFJywKKyAgICAnXHUwMTE4JzogJ0UnLAorICAgICdcdTFFMTgnOiAnRScsCisgICAgJ1x1MUUxQSc6ICdFJywKKyAgICAnXHUwMTkwJzogJ0UnLAorICAgICdcdTAxOEUnOiAnRScsCisgICAgJ1x1MjRCQic6ICdGJywKKyAgICAnXHVGRjI2JzogJ0YnLAorICAgICdcdTFFMUUnOiAnRicsCisgICAgJ1x1MDE5MSc6ICdGJywKKyAgICAnXHVBNzdCJzogJ0YnLAorICAgICdcdTI0QkMnOiAnRycsCisgICAgJ1x1RkYyNyc6ICdHJywKKyAgICAnXHUwMUY0JzogJ0cnLAorICAgICdcdTAxMUMnOiAnRycsCisgICAgJ1x1MUUyMCc6ICdHJywKKyAgICAnXHUwMTFFJzogJ0cnLAorICAgICdcdTAxMjAnOiAnRycsCisgICAgJ1x1MDFFNic6ICdHJywKKyAgICAnXHUwMTIyJzogJ0cnLAorICAgICdcdTAxRTQnOiAnRycsCisgICAgJ1x1MDE5Myc6ICdHJywKKyAgICAnXHVBN0EwJzogJ0cnLAorICAgICdcdUE3N0QnOiAnRycsCisgICAgJ1x1QTc3RSc6ICdHJywKKyAgICAnXHUyNEJEJzogJ0gnLAorICAgICdcdUZGMjgnOiAnSCcsCisgICAgJ1x1MDEyNCc6ICdIJywKKyAgICAnXHUxRTIyJzogJ0gnLAorICAgICdcdTFFMjYnOiAnSCcsCisgICAgJ1x1MDIxRSc6ICdIJywKKyAgICAnXHUxRTI0JzogJ0gnLAorICAgICdcdTFFMjgnOiAnSCcsCisgICAgJ1x1MUUyQSc6ICdIJywKKyAgICAnXHUwMTI2JzogJ0gnLAorICAgICdcdTJDNjcnOiAnSCcsCisgICAgJ1x1MkM3NSc6ICdIJywKKyAgICAnXHVBNzhEJzogJ0gnLAorICAgICdcdTI0QkUnOiAnSScsCisgICAgJ1x1RkYyOSc6ICdJJywKKyAgICAnXHUwMENDJzogJ0knLAorICAgICdcdTAwQ0QnOiAnSScsCisgICAgJ1x1MDBDRSc6ICdJJywKKyAgICAnXHUwMTI4JzogJ0knLAorICAgICdcdTAxMkEnOiAnSScsCisgICAgJ1x1MDEyQyc6ICdJJywKKyAgICAnXHUwMTMwJzogJ0knLAorICAgICdcdTAwQ0YnOiAnSScsCisgICAgJ1x1MUUyRSc6ICdJJywKKyAgICAnXHUxRUM4JzogJ0knLAorICAgICdcdTAxQ0YnOiAnSScsCisgICAgJ1x1MDIwOCc6ICdJJywKKyAgICAnXHUwMjBBJzogJ0knLAorICAgICdcdTFFQ0EnOiAnSScsCisgICAgJ1x1MDEyRSc6ICdJJywKKyAgICAnXHUxRTJDJzogJ0knLAorICAgICdcdTAxOTcnOiAnSScsCisgICAgJ1x1MjRCRic6ICdKJywKKyAgICAnXHVGRjJBJzogJ0onLAorICAgICdcdTAxMzQnOiAnSicsCisgICAgJ1x1MDI0OCc6ICdKJywKKyAgICAnXHUyNEMwJzogJ0snLAorICAgICdcdUZGMkInOiAnSycsCisgICAgJ1x1MUUzMCc6ICdLJywKKyAgICAnXHUwMUU4JzogJ0snLAorICAgICdcdTFFMzInOiAnSycsCisgICAgJ1x1MDEzNic6ICdLJywKKyAgICAnXHUxRTM0JzogJ0snLAorICAgICdcdTAxOTgnOiAnSycsCisgICAgJ1x1MkM2OSc6ICdLJywKKyAgICAnXHVBNzQwJzogJ0snLAorICAgICdcdUE3NDInOiAnSycsCisgICAgJ1x1QTc0NCc6ICdLJywKKyAgICAnXHVBN0EyJzogJ0snLAorICAgICdcdTI0QzEnOiAnTCcsCisgICAgJ1x1RkYyQyc6ICdMJywKKyAgICAnXHUwMTNGJzogJ0wnLAorICAgICdcdTAxMzknOiAnTCcsCisgICAgJ1x1MDEzRCc6ICdMJywKKyAgICAnXHUxRTM2JzogJ0wnLAorICAgICdcdTFFMzgnOiAnTCcsCisgICAgJ1x1MDEzQic6ICdMJywKKyAgICAnXHUxRTNDJzogJ0wnLAorICAgICdcdTFFM0EnOiAnTCcsCisgICAgJ1x1MDE0MSc6ICdMJywKKyAgICAnXHUwMjNEJzogJ0wnLAorICAgICdcdTJDNjInOiAnTCcsCisgICAgJ1x1MkM2MCc6ICdMJywKKyAgICAnXHVBNzQ4JzogJ0wnLAorICAgICdcdUE3NDYnOiAnTCcsCisgICAgJ1x1QTc4MCc6ICdMJywKKyAgICAnXHUwMUM3JzogJ0xKJywKKyAgICAnXHUwMUM4JzogJ0xqJywKKyAgICAnXHUyNEMyJzogJ00nLAorICAgICdcdUZGMkQnOiAnTScsCisgICAgJ1x1MUUzRSc6ICdNJywKKyAgICAnXHUxRTQwJzogJ00nLAorICAgICdcdTFFNDInOiAnTScsCisgICAgJ1x1MkM2RSc6ICdNJywKKyAgICAnXHUwMTlDJzogJ00nLAorICAgICdcdTI0QzMnOiAnTicsCisgICAgJ1x1RkYyRSc6ICdOJywKKyAgICAnXHUwMUY4JzogJ04nLAorICAgICdcdTAxNDMnOiAnTicsCisgICAgJ1x1MDBEMSc6ICdOJywKKyAgICAnXHUxRTQ0JzogJ04nLAorICAgICdcdTAxNDcnOiAnTicsCisgICAgJ1x1MUU0Nic6ICdOJywKKyAgICAnXHUwMTQ1JzogJ04nLAorICAgICdcdTFFNEEnOiAnTicsCisgICAgJ1x1MUU0OCc6ICdOJywKKyAgICAnXHUwMjIwJzogJ04nLAorICAgICdcdTAxOUQnOiAnTicsCisgICAgJ1x1QTc5MCc6ICdOJywKKyAgICAnXHVBN0E0JzogJ04nLAorICAgICdcdTAxQ0EnOiAnTkonLAorICAgICdcdTAxQ0InOiAnTmonLAorICAgICdcdTI0QzQnOiAnTycsCisgICAgJ1x1RkYyRic6ICdPJywKKyAgICAnXHUwMEQyJzogJ08nLAorICAgICdcdTAwRDMnOiAnTycsCisgICAgJ1x1MDBENCc6ICdPJywKKyAgICAnXHUxRUQyJzogJ08nLAorICAgICdcdTFFRDAnOiAnTycsCisgICAgJ1x1MUVENic6ICdPJywKKyAgICAnXHUxRUQ0JzogJ08nLAorICAgICdcdTAwRDUnOiAnTycsCisgICAgJ1x1MUU0Qyc6ICdPJywKKyAgICAnXHUwMjJDJzogJ08nLAorICAgICdcdTFFNEUnOiAnTycsCisgICAgJ1x1MDE0Qyc6ICdPJywKKyAgICAnXHUxRTUwJzogJ08nLAorICAgICdcdTFFNTInOiAnTycsCisgICAgJ1x1MDE0RSc6ICdPJywKKyAgICAnXHUwMjJFJzogJ08nLAorICAgICdcdTAyMzAnOiAnTycsCisgICAgJ1x1MDBENic6ICdPJywKKyAgICAnXHUwMjJBJzogJ08nLAorICAgICdcdTFFQ0UnOiAnTycsCisgICAgJ1x1MDE1MCc6ICdPJywKKyAgICAnXHUwMUQxJzogJ08nLAorICAgICdcdTAyMEMnOiAnTycsCisgICAgJ1x1MDIwRSc6ICdPJywKKyAgICAnXHUwMUEwJzogJ08nLAorICAgICdcdTFFREMnOiAnTycsCisgICAgJ1x1MUVEQSc6ICdPJywKKyAgICAnXHUxRUUwJzogJ08nLAorICAgICdcdTFFREUnOiAnTycsCisgICAgJ1x1MUVFMic6ICdPJywKKyAgICAnXHUxRUNDJzogJ08nLAorICAgICdcdTFFRDgnOiAnTycsCisgICAgJ1x1MDFFQSc6ICdPJywKKyAgICAnXHUwMUVDJzogJ08nLAorICAgICdcdTAwRDgnOiAnTycsCisgICAgJ1x1MDFGRSc6ICdPJywKKyAgICAnXHUwMTg2JzogJ08nLAorICAgICdcdTAxOUYnOiAnTycsCisgICAgJ1x1QTc0QSc6ICdPJywKKyAgICAnXHVBNzRDJzogJ08nLAorICAgICdcdTAxQTInOiAnT0knLAorICAgICdcdUE3NEUnOiAnT08nLAorICAgICdcdTAyMjInOiAnT1UnLAorICAgICdcdTI0QzUnOiAnUCcsCisgICAgJ1x1RkYzMCc6ICdQJywKKyAgICAnXHUxRTU0JzogJ1AnLAorICAgICdcdTFFNTYnOiAnUCcsCisgICAgJ1x1MDFBNCc6ICdQJywKKyAgICAnXHUyQzYzJzogJ1AnLAorICAgICdcdUE3NTAnOiAnUCcsCisgICAgJ1x1QTc1Mic6ICdQJywKKyAgICAnXHVBNzU0JzogJ1AnLAorICAgICdcdTI0QzYnOiAnUScsCisgICAgJ1x1RkYzMSc6ICdRJywKKyAgICAnXHVBNzU2JzogJ1EnLAorICAgICdcdUE3NTgnOiAnUScsCisgICAgJ1x1MDI0QSc6ICdRJywKKyAgICAnXHUyNEM3JzogJ1InLAorICAgICdcdUZGMzInOiAnUicsCisgICAgJ1x1MDE1NCc6ICdSJywKKyAgICAnXHUxRTU4JzogJ1InLAorICAgICdcdTAxNTgnOiAnUicsCisgICAgJ1x1MDIxMCc6ICdSJywKKyAgICAnXHUwMjEyJzogJ1InLAorICAgICdcdTFFNUEnOiAnUicsCisgICAgJ1x1MUU1Qyc6ICdSJywKKyAgICAnXHUwMTU2JzogJ1InLAorICAgICdcdTFFNUUnOiAnUicsCisgICAgJ1x1MDI0Qyc6ICdSJywKKyAgICAnXHUyQzY0JzogJ1InLAorICAgICdcdUE3NUEnOiAnUicsCisgICAgJ1x1QTdBNic6ICdSJywKKyAgICAnXHVBNzgyJzogJ1InLAorICAgICdcdTI0QzgnOiAnUycsCisgICAgJ1x1RkYzMyc6ICdTJywKKyAgICAnXHUxRTlFJzogJ1MnLAorICAgICdcdTAxNUEnOiAnUycsCisgICAgJ1x1MUU2NCc6ICdTJywKKyAgICAnXHUwMTVDJzogJ1MnLAorICAgICdcdTFFNjAnOiAnUycsCisgICAgJ1x1MDE2MCc6ICdTJywKKyAgICAnXHUxRTY2JzogJ1MnLAorICAgICdcdTFFNjInOiAnUycsCisgICAgJ1x1MUU2OCc6ICdTJywKKyAgICAnXHUwMjE4JzogJ1MnLAorICAgICdcdTAxNUUnOiAnUycsCisgICAgJ1x1MkM3RSc6ICdTJywKKyAgICAnXHVBN0E4JzogJ1MnLAorICAgICdcdUE3ODQnOiAnUycsCisgICAgJ1x1MjRDOSc6ICdUJywKKyAgICAnXHVGRjM0JzogJ1QnLAorICAgICdcdTFFNkEnOiAnVCcsCisgICAgJ1x1MDE2NCc6ICdUJywKKyAgICAnXHUxRTZDJzogJ1QnLAorICAgICdcdTAyMUEnOiAnVCcsCisgICAgJ1x1MDE2Mic6ICdUJywKKyAgICAnXHUxRTcwJzogJ1QnLAorICAgICdcdTFFNkUnOiAnVCcsCisgICAgJ1x1MDE2Nic6ICdUJywKKyAgICAnXHUwMUFDJzogJ1QnLAorICAgICdcdTAxQUUnOiAnVCcsCisgICAgJ1x1MDIzRSc6ICdUJywKKyAgICAnXHVBNzg2JzogJ1QnLAorICAgICdcdUE3MjgnOiAnVFonLAorICAgICdcdTI0Q0EnOiAnVScsCisgICAgJ1x1RkYzNSc6ICdVJywKKyAgICAnXHUwMEQ5JzogJ1UnLAorICAgICdcdTAwREEnOiAnVScsCisgICAgJ1x1MDBEQic6ICdVJywKKyAgICAnXHUwMTY4JzogJ1UnLAorICAgICdcdTFFNzgnOiAnVScsCisgICAgJ1x1MDE2QSc6ICdVJywKKyAgICAnXHUxRTdBJzogJ1UnLAorICAgICdcdTAxNkMnOiAnVScsCisgICAgJ1x1MDBEQyc6ICdVJywKKyAgICAnXHUwMURCJzogJ1UnLAorICAgICdcdTAxRDcnOiAnVScsCisgICAgJ1x1MDFENSc6ICdVJywKKyAgICAnXHUwMUQ5JzogJ1UnLAorICAgICdcdTFFRTYnOiAnVScsCisgICAgJ1x1MDE2RSc6ICdVJywKKyAgICAnXHUwMTcwJzogJ1UnLAorICAgICdcdTAxRDMnOiAnVScsCisgICAgJ1x1MDIxNCc6ICdVJywKKyAgICAnXHUwMjE2JzogJ1UnLAorICAgICdcdTAxQUYnOiAnVScsCisgICAgJ1x1MUVFQSc6ICdVJywKKyAgICAnXHUxRUU4JzogJ1UnLAorICAgICdcdTFFRUUnOiAnVScsCisgICAgJ1x1MUVFQyc6ICdVJywKKyAgICAnXHUxRUYwJzogJ1UnLAorICAgICdcdTFFRTQnOiAnVScsCisgICAgJ1x1MUU3Mic6ICdVJywKKyAgICAnXHUwMTcyJzogJ1UnLAorICAgICdcdTFFNzYnOiAnVScsCisgICAgJ1x1MUU3NCc6ICdVJywKKyAgICAnXHUwMjQ0JzogJ1UnLAorICAgICdcdTI0Q0InOiAnVicsCisgICAgJ1x1RkYzNic6ICdWJywKKyAgICAnXHUxRTdDJzogJ1YnLAorICAgICdcdTFFN0UnOiAnVicsCisgICAgJ1x1MDFCMic6ICdWJywKKyAgICAnXHVBNzVFJzogJ1YnLAorICAgICdcdTAyNDUnOiAnVicsCisgICAgJ1x1QTc2MCc6ICdWWScsCisgICAgJ1x1MjRDQyc6ICdXJywKKyAgICAnXHVGRjM3JzogJ1cnLAorICAgICdcdTFFODAnOiAnVycsCisgICAgJ1x1MUU4Mic6ICdXJywKKyAgICAnXHUwMTc0JzogJ1cnLAorICAgICdcdTFFODYnOiAnVycsCisgICAgJ1x1MUU4NCc6ICdXJywKKyAgICAnXHUxRTg4JzogJ1cnLAorICAgICdcdTJDNzInOiAnVycsCisgICAgJ1x1MjRDRCc6ICdYJywKKyAgICAnXHVGRjM4JzogJ1gnLAorICAgICdcdTFFOEEnOiAnWCcsCisgICAgJ1x1MUU4Qyc6ICdYJywKKyAgICAnXHUyNENFJzogJ1knLAorICAgICdcdUZGMzknOiAnWScsCisgICAgJ1x1MUVGMic6ICdZJywKKyAgICAnXHUwMEREJzogJ1knLAorICAgICdcdTAxNzYnOiAnWScsCisgICAgJ1x1MUVGOCc6ICdZJywKKyAgICAnXHUwMjMyJzogJ1knLAorICAgICdcdTFFOEUnOiAnWScsCisgICAgJ1x1MDE3OCc6ICdZJywKKyAgICAnXHUxRUY2JzogJ1knLAorICAgICdcdTFFRjQnOiAnWScsCisgICAgJ1x1MDFCMyc6ICdZJywKKyAgICAnXHUwMjRFJzogJ1knLAorICAgICdcdTFFRkUnOiAnWScsCisgICAgJ1x1MjRDRic6ICdaJywKKyAgICAnXHVGRjNBJzogJ1onLAorICAgICdcdTAxNzknOiAnWicsCisgICAgJ1x1MUU5MCc6ICdaJywKKyAgICAnXHUwMTdCJzogJ1onLAorICAgICdcdTAxN0QnOiAnWicsCisgICAgJ1x1MUU5Mic6ICdaJywKKyAgICAnXHUxRTk0JzogJ1onLAorICAgICdcdTAxQjUnOiAnWicsCisgICAgJ1x1MDIyNCc6ICdaJywKKyAgICAnXHUyQzdGJzogJ1onLAorICAgICdcdTJDNkInOiAnWicsCisgICAgJ1x1QTc2Mic6ICdaJywKKyAgICAnXHUyNEQwJzogJ2EnLAorICAgICdcdUZGNDEnOiAnYScsCisgICAgJ1x1MUU5QSc6ICdhJywKKyAgICAnXHUwMEUwJzogJ2EnLAorICAgICdcdTAwRTEnOiAnYScsCisgICAgJ1x1MDBFMic6ICdhJywKKyAgICAnXHUxRUE3JzogJ2EnLAorICAgICdcdTFFQTUnOiAnYScsCisgICAgJ1x1MUVBQic6ICdhJywKKyAgICAnXHUxRUE5JzogJ2EnLAorICAgICdcdTAwRTMnOiAnYScsCisgICAgJ1x1MDEwMSc6ICdhJywKKyAgICAnXHUwMTAzJzogJ2EnLAorICAgICdcdTFFQjEnOiAnYScsCisgICAgJ1x1MUVBRic6ICdhJywKKyAgICAnXHUxRUI1JzogJ2EnLAorICAgICdcdTFFQjMnOiAnYScsCisgICAgJ1x1MDIyNyc6ICdhJywKKyAgICAnXHUwMUUxJzogJ2EnLAorICAgICdcdTAwRTQnOiAnYScsCisgICAgJ1x1MDFERic6ICdhJywKKyAgICAnXHUxRUEzJzogJ2EnLAorICAgICdcdTAwRTUnOiAnYScsCisgICAgJ1x1MDFGQic6ICdhJywKKyAgICAnXHUwMUNFJzogJ2EnLAorICAgICdcdTAyMDEnOiAnYScsCisgICAgJ1x1MDIwMyc6ICdhJywKKyAgICAnXHUxRUExJzogJ2EnLAorICAgICdcdTFFQUQnOiAnYScsCisgICAgJ1x1MUVCNyc6ICdhJywKKyAgICAnXHUxRTAxJzogJ2EnLAorICAgICdcdTAxMDUnOiAnYScsCisgICAgJ1x1MkM2NSc6ICdhJywKKyAgICAnXHUwMjUwJzogJ2EnLAorICAgICdcdUE3MzMnOiAnYWEnLAorICAgICdcdTAwRTYnOiAnYWUnLAorICAgICdcdTAxRkQnOiAnYWUnLAorICAgICdcdTAxRTMnOiAnYWUnLAorICAgICdcdUE3MzUnOiAnYW8nLAorICAgICdcdUE3MzcnOiAnYXUnLAorICAgICdcdUE3MzknOiAnYXYnLAorICAgICdcdUE3M0InOiAnYXYnLAorICAgICdcdUE3M0QnOiAnYXknLAorICAgICdcdTI0RDEnOiAnYicsCisgICAgJ1x1RkY0Mic6ICdiJywKKyAgICAnXHUxRTAzJzogJ2InLAorICAgICdcdTFFMDUnOiAnYicsCisgICAgJ1x1MUUwNyc6ICdiJywKKyAgICAnXHUwMTgwJzogJ2InLAorICAgICdcdTAxODMnOiAnYicsCisgICAgJ1x1MDI1Myc6ICdiJywKKyAgICAnXHUyNEQyJzogJ2MnLAorICAgICdcdUZGNDMnOiAnYycsCisgICAgJ1x1MDEwNyc6ICdjJywKKyAgICAnXHUwMTA5JzogJ2MnLAorICAgICdcdTAxMEInOiAnYycsCisgICAgJ1x1MDEwRCc6ICdjJywKKyAgICAnXHUwMEU3JzogJ2MnLAorICAgICdcdTFFMDknOiAnYycsCisgICAgJ1x1MDE4OCc6ICdjJywKKyAgICAnXHUwMjNDJzogJ2MnLAorICAgICdcdUE3M0YnOiAnYycsCisgICAgJ1x1MjE4NCc6ICdjJywKKyAgICAnXHUyNEQzJzogJ2QnLAorICAgICdcdUZGNDQnOiAnZCcsCisgICAgJ1x1MUUwQic6ICdkJywKKyAgICAnXHUwMTBGJzogJ2QnLAorICAgICdcdTFFMEQnOiAnZCcsCisgICAgJ1x1MUUxMSc6ICdkJywKKyAgICAnXHUxRTEzJzogJ2QnLAorICAgICdcdTFFMEYnOiAnZCcsCisgICAgJ1x1MDExMSc6ICdkJywKKyAgICAnXHUwMThDJzogJ2QnLAorICAgICdcdTAyNTYnOiAnZCcsCisgICAgJ1x1MDI1Nyc6ICdkJywKKyAgICAnXHVBNzdBJzogJ2QnLAorICAgICdcdTAxRjMnOiAnZHonLAorICAgICdcdTAxQzYnOiAnZHonLAorICAgICdcdTI0RDQnOiAnZScsCisgICAgJ1x1RkY0NSc6ICdlJywKKyAgICAnXHUwMEU4JzogJ2UnLAorICAgICdcdTAwRTknOiAnZScsCisgICAgJ1x1MDBFQSc6ICdlJywKKyAgICAnXHUxRUMxJzogJ2UnLAorICAgICdcdTFFQkYnOiAnZScsCisgICAgJ1x1MUVDNSc6ICdlJywKKyAgICAnXHUxRUMzJzogJ2UnLAorICAgICdcdTFFQkQnOiAnZScsCisgICAgJ1x1MDExMyc6ICdlJywKKyAgICAnXHUxRTE1JzogJ2UnLAorICAgICdcdTFFMTcnOiAnZScsCisgICAgJ1x1MDExNSc6ICdlJywKKyAgICAnXHUwMTE3JzogJ2UnLAorICAgICdcdTAwRUInOiAnZScsCisgICAgJ1x1MUVCQic6ICdlJywKKyAgICAnXHUwMTFCJzogJ2UnLAorICAgICdcdTAyMDUnOiAnZScsCisgICAgJ1x1MDIwNyc6ICdlJywKKyAgICAnXHUxRUI5JzogJ2UnLAorICAgICdcdTFFQzcnOiAnZScsCisgICAgJ1x1MDIyOSc6ICdlJywKKyAgICAnXHUxRTFEJzogJ2UnLAorICAgICdcdTAxMTknOiAnZScsCisgICAgJ1x1MUUxOSc6ICdlJywKKyAgICAnXHUxRTFCJzogJ2UnLAorICAgICdcdTAyNDcnOiAnZScsCisgICAgJ1x1MDI1Qic6ICdlJywKKyAgICAnXHUwMUREJzogJ2UnLAorICAgICdcdTI0RDUnOiAnZicsCisgICAgJ1x1RkY0Nic6ICdmJywKKyAgICAnXHUxRTFGJzogJ2YnLAorICAgICdcdTAxOTInOiAnZicsCisgICAgJ1x1QTc3Qyc6ICdmJywKKyAgICAnXHUyNEQ2JzogJ2cnLAorICAgICdcdUZGNDcnOiAnZycsCisgICAgJ1x1MDFGNSc6ICdnJywKKyAgICAnXHUwMTFEJzogJ2cnLAorICAgICdcdTFFMjEnOiAnZycsCisgICAgJ1x1MDExRic6ICdnJywKKyAgICAnXHUwMTIxJzogJ2cnLAorICAgICdcdTAxRTcnOiAnZycsCisgICAgJ1x1MDEyMyc6ICdnJywKKyAgICAnXHUwMUU1JzogJ2cnLAorICAgICdcdTAyNjAnOiAnZycsCisgICAgJ1x1QTdBMSc6ICdnJywKKyAgICAnXHUxRDc5JzogJ2cnLAorICAgICdcdUE3N0YnOiAnZycsCisgICAgJ1x1MjRENyc6ICdoJywKKyAgICAnXHVGRjQ4JzogJ2gnLAorICAgICdcdTAxMjUnOiAnaCcsCisgICAgJ1x1MUUyMyc6ICdoJywKKyAgICAnXHUxRTI3JzogJ2gnLAorICAgICdcdTAyMUYnOiAnaCcsCisgICAgJ1x1MUUyNSc6ICdoJywKKyAgICAnXHUxRTI5JzogJ2gnLAorICAgICdcdTFFMkInOiAnaCcsCisgICAgJ1x1MUU5Nic6ICdoJywKKyAgICAnXHUwMTI3JzogJ2gnLAorICAgICdcdTJDNjgnOiAnaCcsCisgICAgJ1x1MkM3Nic6ICdoJywKKyAgICAnXHUwMjY1JzogJ2gnLAorICAgICdcdTAxOTUnOiAnaHYnLAorICAgICdcdTI0RDgnOiAnaScsCisgICAgJ1x1RkY0OSc6ICdpJywKKyAgICAnXHUwMEVDJzogJ2knLAorICAgICdcdTAwRUQnOiAnaScsCisgICAgJ1x1MDBFRSc6ICdpJywKKyAgICAnXHUwMTI5JzogJ2knLAorICAgICdcdTAxMkInOiAnaScsCisgICAgJ1x1MDEyRCc6ICdpJywKKyAgICAnXHUwMEVGJzogJ2knLAorICAgICdcdTFFMkYnOiAnaScsCisgICAgJ1x1MUVDOSc6ICdpJywKKyAgICAnXHUwMUQwJzogJ2knLAorICAgICdcdTAyMDknOiAnaScsCisgICAgJ1x1MDIwQic6ICdpJywKKyAgICAnXHUxRUNCJzogJ2knLAorICAgICdcdTAxMkYnOiAnaScsCisgICAgJ1x1MUUyRCc6ICdpJywKKyAgICAnXHUwMjY4JzogJ2knLAorICAgICdcdTAxMzEnOiAnaScsCisgICAgJ1x1MjREOSc6ICdqJywKKyAgICAnXHVGRjRBJzogJ2onLAorICAgICdcdTAxMzUnOiAnaicsCisgICAgJ1x1MDFGMCc6ICdqJywKKyAgICAnXHUwMjQ5JzogJ2onLAorICAgICdcdTI0REEnOiAnaycsCisgICAgJ1x1RkY0Qic6ICdrJywKKyAgICAnXHUxRTMxJzogJ2snLAorICAgICdcdTAxRTknOiAnaycsCisgICAgJ1x1MUUzMyc6ICdrJywKKyAgICAnXHUwMTM3JzogJ2snLAorICAgICdcdTFFMzUnOiAnaycsCisgICAgJ1x1MDE5OSc6ICdrJywKKyAgICAnXHUyQzZBJzogJ2snLAorICAgICdcdUE3NDEnOiAnaycsCisgICAgJ1x1QTc0Myc6ICdrJywKKyAgICAnXHVBNzQ1JzogJ2snLAorICAgICdcdUE3QTMnOiAnaycsCisgICAgJ1x1MjREQic6ICdsJywKKyAgICAnXHVGRjRDJzogJ2wnLAorICAgICdcdTAxNDAnOiAnbCcsCisgICAgJ1x1MDEzQSc6ICdsJywKKyAgICAnXHUwMTNFJzogJ2wnLAorICAgICdcdTFFMzcnOiAnbCcsCisgICAgJ1x1MUUzOSc6ICdsJywKKyAgICAnXHUwMTNDJzogJ2wnLAorICAgICdcdTFFM0QnOiAnbCcsCisgICAgJ1x1MUUzQic6ICdsJywKKyAgICAnXHUwMTdGJzogJ2wnLAorICAgICdcdTAxNDInOiAnbCcsCisgICAgJ1x1MDE5QSc6ICdsJywKKyAgICAnXHUwMjZCJzogJ2wnLAorICAgICdcdTJDNjEnOiAnbCcsCisgICAgJ1x1QTc0OSc6ICdsJywKKyAgICAnXHVBNzgxJzogJ2wnLAorICAgICdcdUE3NDcnOiAnbCcsCisgICAgJ1x1MDFDOSc6ICdsaicsCisgICAgJ1x1MjREQyc6ICdtJywKKyAgICAnXHVGRjREJzogJ20nLAorICAgICdcdTFFM0YnOiAnbScsCisgICAgJ1x1MUU0MSc6ICdtJywKKyAgICAnXHUxRTQzJzogJ20nLAorICAgICdcdTAyNzEnOiAnbScsCisgICAgJ1x1MDI2Ric6ICdtJywKKyAgICAnXHUyNEREJzogJ24nLAorICAgICdcdUZGNEUnOiAnbicsCisgICAgJ1x1MDFGOSc6ICduJywKKyAgICAnXHUwMTQ0JzogJ24nLAorICAgICdcdTAwRjEnOiAnbicsCisgICAgJ1x1MUU0NSc6ICduJywKKyAgICAnXHUwMTQ4JzogJ24nLAorICAgICdcdTFFNDcnOiAnbicsCisgICAgJ1x1MDE0Nic6ICduJywKKyAgICAnXHUxRTRCJzogJ24nLAorICAgICdcdTFFNDknOiAnbicsCisgICAgJ1x1MDE5RSc6ICduJywKKyAgICAnXHUwMjcyJzogJ24nLAorICAgICdcdTAxNDknOiAnbicsCisgICAgJ1x1QTc5MSc6ICduJywKKyAgICAnXHVBN0E1JzogJ24nLAorICAgICdcdTAxQ0MnOiAnbmonLAorICAgICdcdTI0REUnOiAnbycsCisgICAgJ1x1RkY0Ric6ICdvJywKKyAgICAnXHUwMEYyJzogJ28nLAorICAgICdcdTAwRjMnOiAnbycsCisgICAgJ1x1MDBGNCc6ICdvJywKKyAgICAnXHUxRUQzJzogJ28nLAorICAgICdcdTFFRDEnOiAnbycsCisgICAgJ1x1MUVENyc6ICdvJywKKyAgICAnXHUxRUQ1JzogJ28nLAorICAgICdcdTAwRjUnOiAnbycsCisgICAgJ1x1MUU0RCc6ICdvJywKKyAgICAnXHUwMjJEJzogJ28nLAorICAgICdcdTFFNEYnOiAnbycsCisgICAgJ1x1MDE0RCc6ICdvJywKKyAgICAnXHUxRTUxJzogJ28nLAorICAgICdcdTFFNTMnOiAnbycsCisgICAgJ1x1MDE0Ric6ICdvJywKKyAgICAnXHUwMjJGJzogJ28nLAorICAgICdcdTAyMzEnOiAnbycsCisgICAgJ1x1MDBGNic6ICdvJywKKyAgICAnXHUwMjJCJzogJ28nLAorICAgICdcdTFFQ0YnOiAnbycsCisgICAgJ1x1MDE1MSc6ICdvJywKKyAgICAnXHUwMUQyJzogJ28nLAorICAgICdcdTAyMEQnOiAnbycsCisgICAgJ1x1MDIwRic6ICdvJywKKyAgICAnXHUwMUExJzogJ28nLAorICAgICdcdTFFREQnOiAnbycsCisgICAgJ1x1MUVEQic6ICdvJywKKyAgICAnXHUxRUUxJzogJ28nLAorICAgICdcdTFFREYnOiAnbycsCisgICAgJ1x1MUVFMyc6ICdvJywKKyAgICAnXHUxRUNEJzogJ28nLAorICAgICdcdTFFRDknOiAnbycsCisgICAgJ1x1MDFFQic6ICdvJywKKyAgICAnXHUwMUVEJzogJ28nLAorICAgICdcdTAwRjgnOiAnbycsCisgICAgJ1x1MDFGRic6ICdvJywKKyAgICAnXHUwMjU0JzogJ28nLAorICAgICdcdUE3NEInOiAnbycsCisgICAgJ1x1QTc0RCc6ICdvJywKKyAgICAnXHUwMjc1JzogJ28nLAorICAgICdcdTAxQTMnOiAnb2knLAorICAgICdcdTAyMjMnOiAnb3UnLAorICAgICdcdUE3NEYnOiAnb28nLAorICAgICdcdTI0REYnOiAncCcsCisgICAgJ1x1RkY1MCc6ICdwJywKKyAgICAnXHUxRTU1JzogJ3AnLAorICAgICdcdTFFNTcnOiAncCcsCisgICAgJ1x1MDFBNSc6ICdwJywKKyAgICAnXHUxRDdEJzogJ3AnLAorICAgICdcdUE3NTEnOiAncCcsCisgICAgJ1x1QTc1Myc6ICdwJywKKyAgICAnXHVBNzU1JzogJ3AnLAorICAgICdcdTI0RTAnOiAncScsCisgICAgJ1x1RkY1MSc6ICdxJywKKyAgICAnXHUwMjRCJzogJ3EnLAorICAgICdcdUE3NTcnOiAncScsCisgICAgJ1x1QTc1OSc6ICdxJywKKyAgICAnXHUyNEUxJzogJ3InLAorICAgICdcdUZGNTInOiAncicsCisgICAgJ1x1MDE1NSc6ICdyJywKKyAgICAnXHUxRTU5JzogJ3InLAorICAgICdcdTAxNTknOiAncicsCisgICAgJ1x1MDIxMSc6ICdyJywKKyAgICAnXHUwMjEzJzogJ3InLAorICAgICdcdTFFNUInOiAncicsCisgICAgJ1x1MUU1RCc6ICdyJywKKyAgICAnXHUwMTU3JzogJ3InLAorICAgICdcdTFFNUYnOiAncicsCisgICAgJ1x1MDI0RCc6ICdyJywKKyAgICAnXHUwMjdEJzogJ3InLAorICAgICdcdUE3NUInOiAncicsCisgICAgJ1x1QTdBNyc6ICdyJywKKyAgICAnXHVBNzgzJzogJ3InLAorICAgICdcdTI0RTInOiAncycsCisgICAgJ1x1RkY1Myc6ICdzJywKKyAgICAnXHUwMERGJzogJ3MnLAorICAgICdcdTAxNUInOiAncycsCisgICAgJ1x1MUU2NSc6ICdzJywKKyAgICAnXHUwMTVEJzogJ3MnLAorICAgICdcdTFFNjEnOiAncycsCisgICAgJ1x1MDE2MSc6ICdzJywKKyAgICAnXHUxRTY3JzogJ3MnLAorICAgICdcdTFFNjMnOiAncycsCisgICAgJ1x1MUU2OSc6ICdzJywKKyAgICAnXHUwMjE5JzogJ3MnLAorICAgICdcdTAxNUYnOiAncycsCisgICAgJ1x1MDIzRic6ICdzJywKKyAgICAnXHVBN0E5JzogJ3MnLAorICAgICdcdUE3ODUnOiAncycsCisgICAgJ1x1MUU5Qic6ICdzJywKKyAgICAnXHUyNEUzJzogJ3QnLAorICAgICdcdUZGNTQnOiAndCcsCisgICAgJ1x1MUU2Qic6ICd0JywKKyAgICAnXHUxRTk3JzogJ3QnLAorICAgICdcdTAxNjUnOiAndCcsCisgICAgJ1x1MUU2RCc6ICd0JywKKyAgICAnXHUwMjFCJzogJ3QnLAorICAgICdcdTAxNjMnOiAndCcsCisgICAgJ1x1MUU3MSc6ICd0JywKKyAgICAnXHUxRTZGJzogJ3QnLAorICAgICdcdTAxNjcnOiAndCcsCisgICAgJ1x1MDFBRCc6ICd0JywKKyAgICAnXHUwMjg4JzogJ3QnLAorICAgICdcdTJDNjYnOiAndCcsCisgICAgJ1x1QTc4Nyc6ICd0JywKKyAgICAnXHVBNzI5JzogJ3R6JywKKyAgICAnXHUyNEU0JzogJ3UnLAorICAgICdcdUZGNTUnOiAndScsCisgICAgJ1x1MDBGOSc6ICd1JywKKyAgICAnXHUwMEZBJzogJ3UnLAorICAgICdcdTAwRkInOiAndScsCisgICAgJ1x1MDE2OSc6ICd1JywKKyAgICAnXHUxRTc5JzogJ3UnLAorICAgICdcdTAxNkInOiAndScsCisgICAgJ1x1MUU3Qic6ICd1JywKKyAgICAnXHUwMTZEJzogJ3UnLAorICAgICdcdTAwRkMnOiAndScsCisgICAgJ1x1MDFEQyc6ICd1JywKKyAgICAnXHUwMUQ4JzogJ3UnLAorICAgICdcdTAxRDYnOiAndScsCisgICAgJ1x1MDFEQSc6ICd1JywKKyAgICAnXHUxRUU3JzogJ3UnLAorICAgICdcdTAxNkYnOiAndScsCisgICAgJ1x1MDE3MSc6ICd1JywKKyAgICAnXHUwMUQ0JzogJ3UnLAorICAgICdcdTAyMTUnOiAndScsCisgICAgJ1x1MDIxNyc6ICd1JywKKyAgICAnXHUwMUIwJzogJ3UnLAorICAgICdcdTFFRUInOiAndScsCisgICAgJ1x1MUVFOSc6ICd1JywKKyAgICAnXHUxRUVGJzogJ3UnLAorICAgICdcdTFFRUQnOiAndScsCisgICAgJ1x1MUVGMSc6ICd1JywKKyAgICAnXHUxRUU1JzogJ3UnLAorICAgICdcdTFFNzMnOiAndScsCisgICAgJ1x1MDE3Myc6ICd1JywKKyAgICAnXHUxRTc3JzogJ3UnLAorICAgICdcdTFFNzUnOiAndScsCisgICAgJ1x1MDI4OSc6ICd1JywKKyAgICAnXHUyNEU1JzogJ3YnLAorICAgICdcdUZGNTYnOiAndicsCisgICAgJ1x1MUU3RCc6ICd2JywKKyAgICAnXHUxRTdGJzogJ3YnLAorICAgICdcdTAyOEInOiAndicsCisgICAgJ1x1QTc1Ric6ICd2JywKKyAgICAnXHUwMjhDJzogJ3YnLAorICAgICdcdUE3NjEnOiAndnknLAorICAgICdcdTI0RTYnOiAndycsCisgICAgJ1x1RkY1Nyc6ICd3JywKKyAgICAnXHUxRTgxJzogJ3cnLAorICAgICdcdTFFODMnOiAndycsCisgICAgJ1x1MDE3NSc6ICd3JywKKyAgICAnXHUxRTg3JzogJ3cnLAorICAgICdcdTFFODUnOiAndycsCisgICAgJ1x1MUU5OCc6ICd3JywKKyAgICAnXHUxRTg5JzogJ3cnLAorICAgICdcdTJDNzMnOiAndycsCisgICAgJ1x1MjRFNyc6ICd4JywKKyAgICAnXHVGRjU4JzogJ3gnLAorICAgICdcdTFFOEInOiAneCcsCisgICAgJ1x1MUU4RCc6ICd4JywKKyAgICAnXHUyNEU4JzogJ3knLAorICAgICdcdUZGNTknOiAneScsCisgICAgJ1x1MUVGMyc6ICd5JywKKyAgICAnXHUwMEZEJzogJ3knLAorICAgICdcdTAxNzcnOiAneScsCisgICAgJ1x1MUVGOSc6ICd5JywKKyAgICAnXHUwMjMzJzogJ3knLAorICAgICdcdTFFOEYnOiAneScsCisgICAgJ1x1MDBGRic6ICd5JywKKyAgICAnXHUxRUY3JzogJ3knLAorICAgICdcdTFFOTknOiAneScsCisgICAgJ1x1MUVGNSc6ICd5JywKKyAgICAnXHUwMUI0JzogJ3knLAorICAgICdcdTAyNEYnOiAneScsCisgICAgJ1x1MUVGRic6ICd5JywKKyAgICAnXHUyNEU5JzogJ3onLAorICAgICdcdUZGNUEnOiAneicsCisgICAgJ1x1MDE3QSc6ICd6JywKKyAgICAnXHUxRTkxJzogJ3onLAorICAgICdcdTAxN0MnOiAneicsCisgICAgJ1x1MDE3RSc6ICd6JywKKyAgICAnXHUxRTkzJzogJ3onLAorICAgICdcdTFFOTUnOiAneicsCisgICAgJ1x1MDFCNic6ICd6JywKKyAgICAnXHUwMjI1JzogJ3onLAorICAgICdcdTAyNDAnOiAneicsCisgICAgJ1x1MkM2Qyc6ICd6JywKKyAgICAnXHVBNzYzJzogJ3onLAorICAgICdcdTAzODYnOiAnXHUwMzkxJywKKyAgICAnXHUwMzg4JzogJ1x1MDM5NScsCisgICAgJ1x1MDM4OSc6ICdcdTAzOTcnLAorICAgICdcdTAzOEEnOiAnXHUwMzk5JywKKyAgICAnXHUwM0FBJzogJ1x1MDM5OScsCisgICAgJ1x1MDM4Qyc6ICdcdTAzOUYnLAorICAgICdcdTAzOEUnOiAnXHUwM0E1JywKKyAgICAnXHUwM0FCJzogJ1x1MDNBNScsCisgICAgJ1x1MDM4Ric6ICdcdTAzQTknLAorICAgICdcdTAzQUMnOiAnXHUwM0IxJywKKyAgICAnXHUwM0FEJzogJ1x1MDNCNScsCisgICAgJ1x1MDNBRSc6ICdcdTAzQjcnLAorICAgICdcdTAzQUYnOiAnXHUwM0I5JywKKyAgICAnXHUwM0NBJzogJ1x1MDNCOScsCisgICAgJ1x1MDM5MCc6ICdcdTAzQjknLAorICAgICdcdTAzQ0MnOiAnXHUwM0JGJywKKyAgICAnXHUwM0NEJzogJ1x1MDNDNScsCisgICAgJ1x1MDNDQic6ICdcdTAzQzUnLAorICAgICdcdTAzQjAnOiAnXHUwM0M1JywKKyAgICAnXHUwM0M5JzogJ1x1MDNDOScsCisgICAgJ1x1MDNDMic6ICdcdTAzQzMnCisgIH07CisKKyAgcmV0dXJuIGRpYWNyaXRpY3M7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2RhdGEvYmFzZScsWworICAnLi4vdXRpbHMnCitdLCBmdW5jdGlvbiAoVXRpbHMpIHsKKyAgZnVuY3Rpb24gQmFzZUFkYXB0ZXIgKCRlbGVtZW50LCBvcHRpb25zKSB7CisgICAgQmFzZUFkYXB0ZXIuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7CisgIH0KKworICBVdGlscy5FeHRlbmQoQmFzZUFkYXB0ZXIsIFV0aWxzLk9ic2VydmFibGUpOworCisgIEJhc2VBZGFwdGVyLnByb3RvdHlwZS5jdXJyZW50ID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYGN1cnJlbnRgIG1ldGhvZCBtdXN0IGJlIGRlZmluZWQgaW4gY2hpbGQgY2xhc3Nlcy4nKTsKKyAgfTsKKworICBCYXNlQWRhcHRlci5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykgeworICAgIHRocm93IG5ldyBFcnJvcignVGhlIGBxdWVyeWAgbWV0aG9kIG11c3QgYmUgZGVmaW5lZCBpbiBjaGlsZCBjbGFzc2VzLicpOworICB9OworCisgIEJhc2VBZGFwdGVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgJGNvbnRhaW5lcikgeworICAgIC8vIENhbiBiZSBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzCisgIH07CisKKyAgQmFzZUFkYXB0ZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7CisgICAgLy8gQ2FuIGJlIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXMKKyAgfTsKKworICBCYXNlQWRhcHRlci5wcm90b3R5cGUuZ2VuZXJhdGVSZXN1bHRJZCA9IGZ1bmN0aW9uIChjb250YWluZXIsIGRhdGEpIHsKKyAgICB2YXIgaWQgPSBjb250YWluZXIuaWQgKyAnLXJlc3VsdC0nOworCisgICAgaWQgKz0gVXRpbHMuZ2VuZXJhdGVDaGFycyg0KTsKKworICAgIGlmIChkYXRhLmlkICE9IG51bGwpIHsKKyAgICAgIGlkICs9ICctJyArIGRhdGEuaWQudG9TdHJpbmcoKTsKKyAgICB9IGVsc2UgeworICAgICAgaWQgKz0gJy0nICsgVXRpbHMuZ2VuZXJhdGVDaGFycyg0KTsKKyAgICB9CisgICAgcmV0dXJuIGlkOworICB9OworCisgIHJldHVybiBCYXNlQWRhcHRlcjsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvZGF0YS9zZWxlY3QnLFsKKyAgJy4vYmFzZScsCisgICcuLi91dGlscycsCisgICdqcXVlcnknCitdLCBmdW5jdGlvbiAoQmFzZUFkYXB0ZXIsIFV0aWxzLCAkKSB7CisgIGZ1bmN0aW9uIFNlbGVjdEFkYXB0ZXIgKCRlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhpcy4kZWxlbWVudCA9ICRlbGVtZW50OworICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CisKKyAgICBTZWxlY3RBZGFwdGVyLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpOworICB9CisKKyAgVXRpbHMuRXh0ZW5kKFNlbGVjdEFkYXB0ZXIsIEJhc2VBZGFwdGVyKTsKKworICBTZWxlY3RBZGFwdGVyLnByb3RvdHlwZS5jdXJyZW50ID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgdmFyIGRhdGEgPSBbXTsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICB0aGlzLiRlbGVtZW50LmZpbmQoJzpzZWxlY3RlZCcpLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgdmFyICRvcHRpb24gPSAkKHRoaXMpOworCisgICAgICB2YXIgb3B0aW9uID0gc2VsZi5pdGVtKCRvcHRpb24pOworCisgICAgICBkYXRhLnB1c2gob3B0aW9uKTsKKyAgICB9KTsKKworICAgIGNhbGxiYWNrKGRhdGEpOworICB9OworCisgIFNlbGVjdEFkYXB0ZXIucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgZGF0YS5zZWxlY3RlZCA9IHRydWU7CisKKyAgICAvLyBJZiBkYXRhLmVsZW1lbnQgaXMgYSBET00gbm9kZSwgdXNlIGl0IGluc3RlYWQKKyAgICBpZiAoJChkYXRhLmVsZW1lbnQpLmlzKCdvcHRpb24nKSkgeworICAgICAgZGF0YS5lbGVtZW50LnNlbGVjdGVkID0gdHJ1ZTsKKworICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdjaGFuZ2UnKTsKKworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh0aGlzLiRlbGVtZW50LnByb3AoJ211bHRpcGxlJykpIHsKKyAgICAgIHRoaXMuY3VycmVudChmdW5jdGlvbiAoY3VycmVudERhdGEpIHsKKyAgICAgICAgdmFyIHZhbCA9IFtdOworCisgICAgICAgIGRhdGEgPSBbZGF0YV07CisgICAgICAgIGRhdGEucHVzaC5hcHBseShkYXRhLCBjdXJyZW50RGF0YSk7CisKKyAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkYXRhLmxlbmd0aDsgZCsrKSB7CisgICAgICAgICAgdmFyIGlkID0gZGF0YVtkXS5pZDsKKworICAgICAgICAgIGlmICgkLmluQXJyYXkoaWQsIHZhbCkgPT09IC0xKSB7CisgICAgICAgICAgICB2YWwucHVzaChpZCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc2VsZi4kZWxlbWVudC52YWwodmFsKTsKKyAgICAgICAgc2VsZi4kZWxlbWVudC50cmlnZ2VyKCdjaGFuZ2UnKTsKKyAgICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICB2YXIgdmFsID0gZGF0YS5pZDsKKworICAgICAgdGhpcy4kZWxlbWVudC52YWwodmFsKTsKKyAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignY2hhbmdlJyk7CisgICAgfQorICB9OworCisgIFNlbGVjdEFkYXB0ZXIucHJvdG90eXBlLnVuc2VsZWN0ID0gZnVuY3Rpb24gKGRhdGEpIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICBpZiAoIXRoaXMuJGVsZW1lbnQucHJvcCgnbXVsdGlwbGUnKSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRhdGEuc2VsZWN0ZWQgPSBmYWxzZTsKKworICAgIGlmICgkKGRhdGEuZWxlbWVudCkuaXMoJ29wdGlvbicpKSB7CisgICAgICBkYXRhLmVsZW1lbnQuc2VsZWN0ZWQgPSBmYWxzZTsKKworICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdjaGFuZ2UnKTsKKworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRoaXMuY3VycmVudChmdW5jdGlvbiAoY3VycmVudERhdGEpIHsKKyAgICAgIHZhciB2YWwgPSBbXTsKKworICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBjdXJyZW50RGF0YS5sZW5ndGg7IGQrKykgeworICAgICAgICB2YXIgaWQgPSBjdXJyZW50RGF0YVtkXS5pZDsKKworICAgICAgICBpZiAoaWQgIT09IGRhdGEuaWQgJiYgJC5pbkFycmF5KGlkLCB2YWwpID09PSAtMSkgeworICAgICAgICAgIHZhbC5wdXNoKGlkKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBzZWxmLiRlbGVtZW50LnZhbCh2YWwpOworCisgICAgICBzZWxmLiRlbGVtZW50LnRyaWdnZXIoJ2NoYW5nZScpOworICAgIH0pOworICB9OworCisgIFNlbGVjdEFkYXB0ZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoY29udGFpbmVyLCAkY29udGFpbmVyKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7CisKKyAgICBjb250YWluZXIub24oJ3NlbGVjdCcsIGZ1bmN0aW9uIChwYXJhbXMpIHsKKyAgICAgIHNlbGYuc2VsZWN0KHBhcmFtcy5kYXRhKTsKKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbigndW5zZWxlY3QnLCBmdW5jdGlvbiAocGFyYW1zKSB7CisgICAgICBzZWxmLnVuc2VsZWN0KHBhcmFtcy5kYXRhKTsKKyAgICB9KTsKKyAgfTsKKworICBTZWxlY3RBZGFwdGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgeworICAgIC8vIFJlbW92ZSBhbnl0aGluZyBhZGRlZCB0byBjaGlsZCBlbGVtZW50cworICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnKicpLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgLy8gUmVtb3ZlIGFueSBjdXN0b20gZGF0YSBzZXQgYnkgU2VsZWN0MgorICAgICAgVXRpbHMuUmVtb3ZlRGF0YSh0aGlzKTsKKyAgICB9KTsKKyAgfTsKKworICBTZWxlY3RBZGFwdGVyLnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7CisgICAgdmFyIGRhdGEgPSBbXTsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICB2YXIgJG9wdGlvbnMgPSB0aGlzLiRlbGVtZW50LmNoaWxkcmVuKCk7CisKKyAgICAkb3B0aW9ucy5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkb3B0aW9uID0gJCh0aGlzKTsKKworICAgICAgaWYgKCEkb3B0aW9uLmlzKCdvcHRpb24nKSAmJiAhJG9wdGlvbi5pcygnb3B0Z3JvdXAnKSkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHZhciBvcHRpb24gPSBzZWxmLml0ZW0oJG9wdGlvbik7CisKKyAgICAgIHZhciBtYXRjaGVzID0gc2VsZi5tYXRjaGVzKHBhcmFtcywgb3B0aW9uKTsKKworICAgICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHsKKyAgICAgICAgZGF0YS5wdXNoKG1hdGNoZXMpOworICAgICAgfQorICAgIH0pOworCisgICAgY2FsbGJhY2soeworICAgICAgcmVzdWx0czogZGF0YQorICAgIH0pOworICB9OworCisgIFNlbGVjdEFkYXB0ZXIucHJvdG90eXBlLmFkZE9wdGlvbnMgPSBmdW5jdGlvbiAoJG9wdGlvbnMpIHsKKyAgICBVdGlscy5hcHBlbmRNYW55KHRoaXMuJGVsZW1lbnQsICRvcHRpb25zKTsKKyAgfTsKKworICBTZWxlY3RBZGFwdGVyLnByb3RvdHlwZS5vcHRpb24gPSBmdW5jdGlvbiAoZGF0YSkgeworICAgIHZhciBvcHRpb247CisKKyAgICBpZiAoZGF0YS5jaGlsZHJlbikgeworICAgICAgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0Z3JvdXAnKTsKKyAgICAgIG9wdGlvbi5sYWJlbCA9IGRhdGEudGV4dDsKKyAgICB9IGVsc2UgeworICAgICAgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CisKKyAgICAgIGlmIChvcHRpb24udGV4dENvbnRlbnQgIT09IHVuZGVmaW5lZCkgeworICAgICAgICBvcHRpb24udGV4dENvbnRlbnQgPSBkYXRhLnRleHQ7CisgICAgICB9IGVsc2UgeworICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gZGF0YS50ZXh0OworICAgICAgfQorICAgIH0KKworICAgIGlmIChkYXRhLmlkICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIG9wdGlvbi52YWx1ZSA9IGRhdGEuaWQ7CisgICAgfQorCisgICAgaWYgKGRhdGEuZGlzYWJsZWQpIHsKKyAgICAgIG9wdGlvbi5kaXNhYmxlZCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGRhdGEuc2VsZWN0ZWQpIHsKKyAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGRhdGEudGl0bGUpIHsKKyAgICAgIG9wdGlvbi50aXRsZSA9IGRhdGEudGl0bGU7CisgICAgfQorCisgICAgdmFyICRvcHRpb24gPSAkKG9wdGlvbik7CisKKyAgICB2YXIgbm9ybWFsaXplZERhdGEgPSB0aGlzLl9ub3JtYWxpemVJdGVtKGRhdGEpOworICAgIG5vcm1hbGl6ZWREYXRhLmVsZW1lbnQgPSBvcHRpb247CisKKyAgICAvLyBPdmVycmlkZSB0aGUgb3B0aW9uJ3MgZGF0YSB3aXRoIHRoZSBjb21iaW5lZCBkYXRhCisgICAgVXRpbHMuU3RvcmVEYXRhKG9wdGlvbiwgJ2RhdGEnLCBub3JtYWxpemVkRGF0YSk7CisKKyAgICByZXR1cm4gJG9wdGlvbjsKKyAgfTsKKworICBTZWxlY3RBZGFwdGVyLnByb3RvdHlwZS5pdGVtID0gZnVuY3Rpb24gKCRvcHRpb24pIHsKKyAgICB2YXIgZGF0YSA9IHt9OworCisgICAgZGF0YSA9IFV0aWxzLkdldERhdGEoJG9wdGlvblswXSwgJ2RhdGEnKTsKKworICAgIGlmIChkYXRhICE9IG51bGwpIHsKKyAgICAgIHJldHVybiBkYXRhOworICAgIH0KKworICAgIGlmICgkb3B0aW9uLmlzKCdvcHRpb24nKSkgeworICAgICAgZGF0YSA9IHsKKyAgICAgICAgaWQ6ICRvcHRpb24udmFsKCksCisgICAgICAgIHRleHQ6ICRvcHRpb24udGV4dCgpLAorICAgICAgICBkaXNhYmxlZDogJG9wdGlvbi5wcm9wKCdkaXNhYmxlZCcpLAorICAgICAgICBzZWxlY3RlZDogJG9wdGlvbi5wcm9wKCdzZWxlY3RlZCcpLAorICAgICAgICB0aXRsZTogJG9wdGlvbi5wcm9wKCd0aXRsZScpCisgICAgICB9OworICAgIH0gZWxzZSBpZiAoJG9wdGlvbi5pcygnb3B0Z3JvdXAnKSkgeworICAgICAgZGF0YSA9IHsKKyAgICAgICAgdGV4dDogJG9wdGlvbi5wcm9wKCdsYWJlbCcpLAorICAgICAgICBjaGlsZHJlbjogW10sCisgICAgICAgIHRpdGxlOiAkb3B0aW9uLnByb3AoJ3RpdGxlJykKKyAgICAgIH07CisKKyAgICAgIHZhciAkY2hpbGRyZW4gPSAkb3B0aW9uLmNoaWxkcmVuKCdvcHRpb24nKTsKKyAgICAgIHZhciBjaGlsZHJlbiA9IFtdOworCisgICAgICBmb3IgKHZhciBjID0gMDsgYyA8ICRjaGlsZHJlbi5sZW5ndGg7IGMrKykgeworICAgICAgICB2YXIgJGNoaWxkID0gJCgkY2hpbGRyZW5bY10pOworCisgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuaXRlbSgkY2hpbGQpOworCisgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpOworICAgICAgfQorCisgICAgICBkYXRhLmNoaWxkcmVuID0gY2hpbGRyZW47CisgICAgfQorCisgICAgZGF0YSA9IHRoaXMuX25vcm1hbGl6ZUl0ZW0oZGF0YSk7CisgICAgZGF0YS5lbGVtZW50ID0gJG9wdGlvblswXTsKKworICAgIFV0aWxzLlN0b3JlRGF0YSgkb3B0aW9uWzBdLCAnZGF0YScsIGRhdGEpOworCisgICAgcmV0dXJuIGRhdGE7CisgIH07CisKKyAgU2VsZWN0QWRhcHRlci5wcm90b3R5cGUuX25vcm1hbGl6ZUl0ZW0gPSBmdW5jdGlvbiAoaXRlbSkgeworICAgIGlmIChpdGVtICE9PSBPYmplY3QoaXRlbSkpIHsKKyAgICAgIGl0ZW0gPSB7CisgICAgICAgIGlkOiBpdGVtLAorICAgICAgICB0ZXh0OiBpdGVtCisgICAgICB9OworICAgIH0KKworICAgIGl0ZW0gPSAkLmV4dGVuZCh7fSwgeworICAgICAgdGV4dDogJycKKyAgICB9LCBpdGVtKTsKKworICAgIHZhciBkZWZhdWx0cyA9IHsKKyAgICAgIHNlbGVjdGVkOiBmYWxzZSwKKyAgICAgIGRpc2FibGVkOiBmYWxzZQorICAgIH07CisKKyAgICBpZiAoaXRlbS5pZCAhPSBudWxsKSB7CisgICAgICBpdGVtLmlkID0gaXRlbS5pZC50b1N0cmluZygpOworICAgIH0KKworICAgIGlmIChpdGVtLnRleHQgIT0gbnVsbCkgeworICAgICAgaXRlbS50ZXh0ID0gaXRlbS50ZXh0LnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgaWYgKGl0ZW0uX3Jlc3VsdElkID09IG51bGwgJiYgaXRlbS5pZCAmJiB0aGlzLmNvbnRhaW5lciAhPSBudWxsKSB7CisgICAgICBpdGVtLl9yZXN1bHRJZCA9IHRoaXMuZ2VuZXJhdGVSZXN1bHRJZCh0aGlzLmNvbnRhaW5lciwgaXRlbSk7CisgICAgfQorCisgICAgcmV0dXJuICQuZXh0ZW5kKHt9LCBkZWZhdWx0cywgaXRlbSk7CisgIH07CisKKyAgU2VsZWN0QWRhcHRlci5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uIChwYXJhbXMsIGRhdGEpIHsKKyAgICB2YXIgbWF0Y2hlciA9IHRoaXMub3B0aW9ucy5nZXQoJ21hdGNoZXInKTsKKworICAgIHJldHVybiBtYXRjaGVyKHBhcmFtcywgZGF0YSk7CisgIH07CisKKyAgcmV0dXJuIFNlbGVjdEFkYXB0ZXI7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2RhdGEvYXJyYXknLFsKKyAgJy4vc2VsZWN0JywKKyAgJy4uL3V0aWxzJywKKyAgJ2pxdWVyeScKK10sIGZ1bmN0aW9uIChTZWxlY3RBZGFwdGVyLCBVdGlscywgJCkgeworICBmdW5jdGlvbiBBcnJheUFkYXB0ZXIgKCRlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdmFyIGRhdGEgPSBvcHRpb25zLmdldCgnZGF0YScpIHx8IFtdOworCisgICAgQXJyYXlBZGFwdGVyLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsICRlbGVtZW50LCBvcHRpb25zKTsKKworICAgIHRoaXMuYWRkT3B0aW9ucyh0aGlzLmNvbnZlcnRUb09wdGlvbnMoZGF0YSkpOworICB9CisKKyAgVXRpbHMuRXh0ZW5kKEFycmF5QWRhcHRlciwgU2VsZWN0QWRhcHRlcik7CisKKyAgQXJyYXlBZGFwdGVyLnByb3RvdHlwZS5zZWxlY3QgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgIHZhciAkb3B0aW9uID0gdGhpcy4kZWxlbWVudC5maW5kKCdvcHRpb24nKS5maWx0ZXIoZnVuY3Rpb24gKGksIGVsbSkgeworICAgICAgcmV0dXJuIGVsbS52YWx1ZSA9PSBkYXRhLmlkLnRvU3RyaW5nKCk7CisgICAgfSk7CisKKyAgICBpZiAoJG9wdGlvbi5sZW5ndGggPT09IDApIHsKKyAgICAgICRvcHRpb24gPSB0aGlzLm9wdGlvbihkYXRhKTsKKworICAgICAgdGhpcy5hZGRPcHRpb25zKCRvcHRpb24pOworICAgIH0KKworICAgIEFycmF5QWRhcHRlci5fX3N1cGVyX18uc2VsZWN0LmNhbGwodGhpcywgZGF0YSk7CisgIH07CisKKyAgQXJyYXlBZGFwdGVyLnByb3RvdHlwZS5jb252ZXJ0VG9PcHRpb25zID0gZnVuY3Rpb24gKGRhdGEpIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICB2YXIgJGV4aXN0aW5nID0gdGhpcy4kZWxlbWVudC5maW5kKCdvcHRpb24nKTsKKyAgICB2YXIgZXhpc3RpbmdJZHMgPSAkZXhpc3RpbmcubWFwKGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiBzZWxmLml0ZW0oJCh0aGlzKSkuaWQ7CisgICAgfSkuZ2V0KCk7CisKKyAgICB2YXIgJG9wdGlvbnMgPSBbXTsKKworICAgIC8vIEZpbHRlciBvdXQgYWxsIGl0ZW1zIGV4Y2VwdCBmb3IgdGhlIG9uZSBwYXNzZWQgaW4gdGhlIGFyZ3VtZW50CisgICAgZnVuY3Rpb24gb25seUl0ZW0gKGl0ZW0pIHsKKyAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAkKHRoaXMpLnZhbCgpID09IGl0ZW0uaWQ7CisgICAgICB9OworICAgIH0KKworICAgIGZvciAodmFyIGQgPSAwOyBkIDwgZGF0YS5sZW5ndGg7IGQrKykgeworICAgICAgdmFyIGl0ZW0gPSB0aGlzLl9ub3JtYWxpemVJdGVtKGRhdGFbZF0pOworCisgICAgICAvLyBTa2lwIGl0ZW1zIHdoaWNoIHdlcmUgcHJlLWxvYWRlZCwgb25seSBtZXJnZSB0aGUgZGF0YQorICAgICAgaWYgKCQuaW5BcnJheShpdGVtLmlkLCBleGlzdGluZ0lkcykgPj0gMCkgeworICAgICAgICB2YXIgJGV4aXN0aW5nT3B0aW9uID0gJGV4aXN0aW5nLmZpbHRlcihvbmx5SXRlbShpdGVtKSk7CisKKyAgICAgICAgdmFyIGV4aXN0aW5nRGF0YSA9IHRoaXMuaXRlbSgkZXhpc3RpbmdPcHRpb24pOworICAgICAgICB2YXIgbmV3RGF0YSA9ICQuZXh0ZW5kKHRydWUsIHt9LCBpdGVtLCBleGlzdGluZ0RhdGEpOworCisgICAgICAgIHZhciAkbmV3T3B0aW9uID0gdGhpcy5vcHRpb24obmV3RGF0YSk7CisKKyAgICAgICAgJGV4aXN0aW5nT3B0aW9uLnJlcGxhY2VXaXRoKCRuZXdPcHRpb24pOworCisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICB2YXIgJG9wdGlvbiA9IHRoaXMub3B0aW9uKGl0ZW0pOworCisgICAgICBpZiAoaXRlbS5jaGlsZHJlbikgeworICAgICAgICB2YXIgJGNoaWxkcmVuID0gdGhpcy5jb252ZXJ0VG9PcHRpb25zKGl0ZW0uY2hpbGRyZW4pOworCisgICAgICAgIFV0aWxzLmFwcGVuZE1hbnkoJG9wdGlvbiwgJGNoaWxkcmVuKTsKKyAgICAgIH0KKworICAgICAgJG9wdGlvbnMucHVzaCgkb3B0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gJG9wdGlvbnM7CisgIH07CisKKyAgcmV0dXJuIEFycmF5QWRhcHRlcjsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvZGF0YS9hamF4JyxbCisgICcuL2FycmF5JywKKyAgJy4uL3V0aWxzJywKKyAgJ2pxdWVyeScKK10sIGZ1bmN0aW9uIChBcnJheUFkYXB0ZXIsIFV0aWxzLCAkKSB7CisgIGZ1bmN0aW9uIEFqYXhBZGFwdGVyICgkZWxlbWVudCwgb3B0aW9ucykgeworICAgIHRoaXMuYWpheE9wdGlvbnMgPSB0aGlzLl9hcHBseURlZmF1bHRzKG9wdGlvbnMuZ2V0KCdhamF4JykpOworCisgICAgaWYgKHRoaXMuYWpheE9wdGlvbnMucHJvY2Vzc1Jlc3VsdHMgIT0gbnVsbCkgeworICAgICAgdGhpcy5wcm9jZXNzUmVzdWx0cyA9IHRoaXMuYWpheE9wdGlvbnMucHJvY2Vzc1Jlc3VsdHM7CisgICAgfQorCisgICAgQWpheEFkYXB0ZXIuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgJGVsZW1lbnQsIG9wdGlvbnMpOworICB9CisKKyAgVXRpbHMuRXh0ZW5kKEFqYXhBZGFwdGVyLCBBcnJheUFkYXB0ZXIpOworCisgIEFqYXhBZGFwdGVyLnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0cyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAgdmFyIGRlZmF1bHRzID0geworICAgICAgZGF0YTogZnVuY3Rpb24gKHBhcmFtcykgeworICAgICAgICByZXR1cm4gJC5leHRlbmQoe30sIHBhcmFtcywgeworICAgICAgICAgIHE6IHBhcmFtcy50ZXJtCisgICAgICAgIH0pOworICAgICAgfSwKKyAgICAgIHRyYW5zcG9ydDogZnVuY3Rpb24gKHBhcmFtcywgc3VjY2VzcywgZmFpbHVyZSkgeworICAgICAgICB2YXIgJHJlcXVlc3QgPSAkLmFqYXgocGFyYW1zKTsKKworICAgICAgICAkcmVxdWVzdC50aGVuKHN1Y2Nlc3MpOworICAgICAgICAkcmVxdWVzdC5mYWlsKGZhaWx1cmUpOworCisgICAgICAgIHJldHVybiAkcmVxdWVzdDsKKyAgICAgIH0KKyAgICB9OworCisgICAgcmV0dXJuICQuZXh0ZW5kKHt9LCBkZWZhdWx0cywgb3B0aW9ucywgdHJ1ZSk7CisgIH07CisKKyAgQWpheEFkYXB0ZXIucHJvdG90eXBlLnByb2Nlc3NSZXN1bHRzID0gZnVuY3Rpb24gKHJlc3VsdHMpIHsKKyAgICByZXR1cm4gcmVzdWx0czsKKyAgfTsKKworICBBamF4QWRhcHRlci5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykgeworICAgIHZhciBtYXRjaGVzID0gW107CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgaWYgKHRoaXMuX3JlcXVlc3QgIT0gbnVsbCkgeworICAgICAgLy8gSlNPTlAgcmVxdWVzdHMgY2Fubm90IGFsd2F5cyBiZSBhYm9ydGVkCisgICAgICBpZiAoJC5pc0Z1bmN0aW9uKHRoaXMuX3JlcXVlc3QuYWJvcnQpKSB7CisgICAgICAgIHRoaXMuX3JlcXVlc3QuYWJvcnQoKTsKKyAgICAgIH0KKworICAgICAgdGhpcy5fcmVxdWVzdCA9IG51bGw7CisgICAgfQorCisgICAgdmFyIG9wdGlvbnMgPSAkLmV4dGVuZCh7CisgICAgICB0eXBlOiAnR0VUJworICAgIH0sIHRoaXMuYWpheE9wdGlvbnMpOworCisgICAgaWYgKHR5cGVvZiBvcHRpb25zLnVybCA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybC5jYWxsKHRoaXMuJGVsZW1lbnQsIHBhcmFtcyk7CisgICAgfQorCisgICAgaWYgKHR5cGVvZiBvcHRpb25zLmRhdGEgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgIG9wdGlvbnMuZGF0YSA9IG9wdGlvbnMuZGF0YS5jYWxsKHRoaXMuJGVsZW1lbnQsIHBhcmFtcyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcmVxdWVzdCAoKSB7CisgICAgICB2YXIgJHJlcXVlc3QgPSBvcHRpb25zLnRyYW5zcG9ydChvcHRpb25zLCBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICB2YXIgcmVzdWx0cyA9IHNlbGYucHJvY2Vzc1Jlc3VsdHMoZGF0YSwgcGFyYW1zKTsKKworICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmdldCgnZGVidWcnKSAmJiB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLmVycm9yKSB7CisgICAgICAgICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHJlc3BvbnNlIGluY2x1ZGVkIGEgYHJlc3VsdHNgIGtleS4KKyAgICAgICAgICBpZiAoIXJlc3VsdHMgfHwgIXJlc3VsdHMucmVzdWx0cyB8fCAhJC5pc0FycmF5KHJlc3VsdHMucmVzdWx0cykpIHsKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoCisgICAgICAgICAgICAgICdTZWxlY3QyOiBUaGUgQUpBWCByZXN1bHRzIGRpZCBub3QgcmV0dXJuIGFuIGFycmF5IGluIHRoZSAnICsKKyAgICAgICAgICAgICAgJ2ByZXN1bHRzYCBrZXkgb2YgdGhlIHJlc3BvbnNlLicKKyAgICAgICAgICAgICk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY2FsbGJhY2socmVzdWx0cyk7CisgICAgICB9LCBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIEF0dGVtcHQgdG8gZGV0ZWN0IGlmIGEgcmVxdWVzdCB3YXMgYWJvcnRlZAorICAgICAgICAvLyBPbmx5IHdvcmtzIGlmIHRoZSB0cmFuc3BvcnQgZXhwb3NlcyBhIHN0YXR1cyBwcm9wZXJ0eQorICAgICAgICBpZiAoJ3N0YXR1cycgaW4gJHJlcXVlc3QgJiYKKyAgICAgICAgICAgICgkcmVxdWVzdC5zdGF0dXMgPT09IDAgfHwgJHJlcXVlc3Quc3RhdHVzID09PSAnMCcpKSB7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc2VsZi50cmlnZ2VyKCdyZXN1bHRzOm1lc3NhZ2UnLCB7CisgICAgICAgICAgbWVzc2FnZTogJ2Vycm9yTG9hZGluZycKKyAgICAgICAgfSk7CisgICAgICB9KTsKKworICAgICAgc2VsZi5fcmVxdWVzdCA9ICRyZXF1ZXN0OworICAgIH0KKworICAgIGlmICh0aGlzLmFqYXhPcHRpb25zLmRlbGF5ICYmIHBhcmFtcy50ZXJtICE9IG51bGwpIHsKKyAgICAgIGlmICh0aGlzLl9xdWVyeVRpbWVvdXQpIHsKKyAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl9xdWVyeVRpbWVvdXQpOworICAgICAgfQorCisgICAgICB0aGlzLl9xdWVyeVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChyZXF1ZXN0LCB0aGlzLmFqYXhPcHRpb25zLmRlbGF5KTsKKyAgICB9IGVsc2UgeworICAgICAgcmVxdWVzdCgpOworICAgIH0KKyAgfTsKKworICByZXR1cm4gQWpheEFkYXB0ZXI7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2RhdGEvdGFncycsWworICAnanF1ZXJ5JworXSwgZnVuY3Rpb24gKCQpIHsKKyAgZnVuY3Rpb24gVGFncyAoZGVjb3JhdGVkLCAkZWxlbWVudCwgb3B0aW9ucykgeworICAgIHZhciB0YWdzID0gb3B0aW9ucy5nZXQoJ3RhZ3MnKTsKKworICAgIHZhciBjcmVhdGVUYWcgPSBvcHRpb25zLmdldCgnY3JlYXRlVGFnJyk7CisKKyAgICBpZiAoY3JlYXRlVGFnICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIHRoaXMuY3JlYXRlVGFnID0gY3JlYXRlVGFnOworICAgIH0KKworICAgIHZhciBpbnNlcnRUYWcgPSBvcHRpb25zLmdldCgnaW5zZXJ0VGFnJyk7CisKKyAgICBpZiAoaW5zZXJ0VGFnICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgdGhpcy5pbnNlcnRUYWcgPSBpbnNlcnRUYWc7CisgICAgfQorCisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgJGVsZW1lbnQsIG9wdGlvbnMpOworCisgICAgaWYgKCQuaXNBcnJheSh0YWdzKSkgeworICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCB0YWdzLmxlbmd0aDsgdCsrKSB7CisgICAgICAgIHZhciB0YWcgPSB0YWdzW3RdOworICAgICAgICB2YXIgaXRlbSA9IHRoaXMuX25vcm1hbGl6ZUl0ZW0odGFnKTsKKworICAgICAgICB2YXIgJG9wdGlvbiA9IHRoaXMub3B0aW9uKGl0ZW0pOworCisgICAgICAgIHRoaXMuJGVsZW1lbnQuYXBwZW5kKCRvcHRpb24pOworICAgICAgfQorICAgIH0KKyAgfQorCisgIFRhZ3MucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgcGFyYW1zLCBjYWxsYmFjaykgeworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIHRoaXMuX3JlbW92ZU9sZFRhZ3MoKTsKKworICAgIGlmIChwYXJhbXMudGVybSA9PSBudWxsIHx8IHBhcmFtcy5wYWdlICE9IG51bGwpIHsKKyAgICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIHBhcmFtcywgY2FsbGJhY2spOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZ1bmN0aW9uIHdyYXBwZXIgKG9iaiwgY2hpbGQpIHsKKyAgICAgIHZhciBkYXRhID0gb2JqLnJlc3VsdHM7CisKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgb3B0aW9uID0gZGF0YVtpXTsKKworICAgICAgICB2YXIgY2hlY2tDaGlsZHJlbiA9ICgKKyAgICAgICAgICBvcHRpb24uY2hpbGRyZW4gIT0gbnVsbCAmJgorICAgICAgICAgICF3cmFwcGVyKHsKKyAgICAgICAgICAgIHJlc3VsdHM6IG9wdGlvbi5jaGlsZHJlbgorICAgICAgICAgIH0sIHRydWUpCisgICAgICAgICk7CisKKyAgICAgICAgdmFyIG9wdGlvblRleHQgPSAob3B0aW9uLnRleHQgfHwgJycpLnRvVXBwZXJDYXNlKCk7CisgICAgICAgIHZhciBwYXJhbXNUZXJtID0gKHBhcmFtcy50ZXJtIHx8ICcnKS50b1VwcGVyQ2FzZSgpOworCisgICAgICAgIHZhciBjaGVja1RleHQgPSBvcHRpb25UZXh0ID09PSBwYXJhbXNUZXJtOworCisgICAgICAgIGlmIChjaGVja1RleHQgfHwgY2hlY2tDaGlsZHJlbikgeworICAgICAgICAgIGlmIChjaGlsZCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKworICAgICAgICAgIG9iai5kYXRhID0gZGF0YTsKKyAgICAgICAgICBjYWxsYmFjayhvYmopOworCisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChjaGlsZCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKworICAgICAgdmFyIHRhZyA9IHNlbGYuY3JlYXRlVGFnKHBhcmFtcyk7CisKKyAgICAgIGlmICh0YWcgIT0gbnVsbCkgeworICAgICAgICB2YXIgJG9wdGlvbiA9IHNlbGYub3B0aW9uKHRhZyk7CisgICAgICAgICRvcHRpb24uYXR0cignZGF0YS1zZWxlY3QyLXRhZycsIHRydWUpOworCisgICAgICAgIHNlbGYuYWRkT3B0aW9ucyhbJG9wdGlvbl0pOworCisgICAgICAgIHNlbGYuaW5zZXJ0VGFnKGRhdGEsIHRhZyk7CisgICAgICB9CisKKyAgICAgIG9iai5yZXN1bHRzID0gZGF0YTsKKworICAgICAgY2FsbGJhY2sob2JqKTsKKyAgICB9CisKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBwYXJhbXMsIHdyYXBwZXIpOworICB9OworCisgIFRhZ3MucHJvdG90eXBlLmNyZWF0ZVRhZyA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIHBhcmFtcykgeworICAgIHZhciB0ZXJtID0gJC50cmltKHBhcmFtcy50ZXJtKTsKKworICAgIGlmICh0ZXJtID09PSAnJykgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgIGlkOiB0ZXJtLAorICAgICAgdGV4dDogdGVybQorICAgIH07CisgIH07CisKKyAgVGFncy5wcm90b3R5cGUuaW5zZXJ0VGFnID0gZnVuY3Rpb24gKF8sIGRhdGEsIHRhZykgeworICAgIGRhdGEudW5zaGlmdCh0YWcpOworICB9OworCisgIFRhZ3MucHJvdG90eXBlLl9yZW1vdmVPbGRUYWdzID0gZnVuY3Rpb24gKF8pIHsKKyAgICB2YXIgdGFnID0gdGhpcy5fbGFzdFRhZzsKKworICAgIHZhciAkb3B0aW9ucyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnb3B0aW9uW2RhdGEtc2VsZWN0Mi10YWddJyk7CisKKyAgICAkb3B0aW9ucy5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgJCh0aGlzKS5yZW1vdmUoKTsKKyAgICB9KTsKKyAgfTsKKworICByZXR1cm4gVGFnczsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvZGF0YS90b2tlbml6ZXInLFsKKyAgJ2pxdWVyeScKK10sIGZ1bmN0aW9uICgkKSB7CisgIGZ1bmN0aW9uIFRva2VuaXplciAoZGVjb3JhdGVkLCAkZWxlbWVudCwgb3B0aW9ucykgeworICAgIHZhciB0b2tlbml6ZXIgPSBvcHRpb25zLmdldCgndG9rZW5pemVyJyk7CisKKyAgICBpZiAodG9rZW5pemVyICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIHRoaXMudG9rZW5pemVyID0gdG9rZW5pemVyOworICAgIH0KKworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsICRlbGVtZW50LCBvcHRpb25zKTsKKyAgfQorCisgIFRva2VuaXplci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGNvbnRhaW5lciwgJGNvbnRhaW5lcikgeworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGNvbnRhaW5lciwgJGNvbnRhaW5lcik7CisKKyAgICB0aGlzLiRzZWFyY2ggPSAgY29udGFpbmVyLmRyb3Bkb3duLiRzZWFyY2ggfHwgY29udGFpbmVyLnNlbGVjdGlvbi4kc2VhcmNoIHx8CisgICAgICAkY29udGFpbmVyLmZpbmQoJy5zZWxlY3QyLXNlYXJjaF9fZmllbGQnKTsKKyAgfTsKKworICBUb2tlbml6ZXIucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgcGFyYW1zLCBjYWxsYmFjaykgeworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIGZ1bmN0aW9uIGNyZWF0ZUFuZFNlbGVjdCAoZGF0YSkgeworICAgICAgLy8gTm9ybWFsaXplIHRoZSBkYXRhIG9iamVjdCBzbyB3ZSBjYW4gdXNlIGl0IGZvciBjaGVja3MKKyAgICAgIHZhciBpdGVtID0gc2VsZi5fbm9ybWFsaXplSXRlbShkYXRhKTsKKworICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRhdGEgb2JqZWN0IGFscmVhZHkgZXhpc3RzIGFzIGEgdGFnCisgICAgICAvLyBTZWxlY3QgaXQgaWYgaXQgZG9lc24ndAorICAgICAgdmFyICRleGlzdGluZ09wdGlvbnMgPSBzZWxmLiRlbGVtZW50LmZpbmQoJ29wdGlvbicpLmZpbHRlcihmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAkKHRoaXMpLnZhbCgpID09PSBpdGVtLmlkOworICAgICAgfSk7CisKKyAgICAgIC8vIElmIGFuIGV4aXN0aW5nIG9wdGlvbiB3YXNuJ3QgZm91bmQgZm9yIGl0LCBjcmVhdGUgdGhlIG9wdGlvbgorICAgICAgaWYgKCEkZXhpc3RpbmdPcHRpb25zLmxlbmd0aCkgeworICAgICAgICB2YXIgJG9wdGlvbiA9IHNlbGYub3B0aW9uKGl0ZW0pOworICAgICAgICAkb3B0aW9uLmF0dHIoJ2RhdGEtc2VsZWN0Mi10YWcnLCB0cnVlKTsKKworICAgICAgICBzZWxmLl9yZW1vdmVPbGRUYWdzKCk7CisgICAgICAgIHNlbGYuYWRkT3B0aW9ucyhbJG9wdGlvbl0pOworICAgICAgfQorCisgICAgICAvLyBTZWxlY3QgdGhlIGl0ZW0sIG5vdyB0aGF0IHdlIGtub3cgdGhlcmUgaXMgYW4gb3B0aW9uIGZvciBpdAorICAgICAgc2VsZWN0KGl0ZW0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNlbGVjdCAoZGF0YSkgeworICAgICAgc2VsZi50cmlnZ2VyKCdzZWxlY3QnLCB7CisgICAgICAgIGRhdGE6IGRhdGEKKyAgICAgIH0pOworICAgIH0KKworICAgIHBhcmFtcy50ZXJtID0gcGFyYW1zLnRlcm0gfHwgJyc7CisKKyAgICB2YXIgdG9rZW5EYXRhID0gdGhpcy50b2tlbml6ZXIocGFyYW1zLCB0aGlzLm9wdGlvbnMsIGNyZWF0ZUFuZFNlbGVjdCk7CisKKyAgICBpZiAodG9rZW5EYXRhLnRlcm0gIT09IHBhcmFtcy50ZXJtKSB7CisgICAgICAvLyBSZXBsYWNlIHRoZSBzZWFyY2ggdGVybSBpZiB3ZSBoYXZlIHRoZSBzZWFyY2ggYm94CisgICAgICBpZiAodGhpcy4kc2VhcmNoLmxlbmd0aCkgeworICAgICAgICB0aGlzLiRzZWFyY2gudmFsKHRva2VuRGF0YS50ZXJtKTsKKyAgICAgICAgdGhpcy4kc2VhcmNoLmZvY3VzKCk7CisgICAgICB9CisKKyAgICAgIHBhcmFtcy50ZXJtID0gdG9rZW5EYXRhLnRlcm07CisgICAgfQorCisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgcGFyYW1zLCBjYWxsYmFjayk7CisgIH07CisKKyAgVG9rZW5pemVyLnByb3RvdHlwZS50b2tlbml6ZXIgPSBmdW5jdGlvbiAoXywgcGFyYW1zLCBvcHRpb25zLCBjYWxsYmFjaykgeworICAgIHZhciBzZXBhcmF0b3JzID0gb3B0aW9ucy5nZXQoJ3Rva2VuU2VwYXJhdG9ycycpIHx8IFtdOworICAgIHZhciB0ZXJtID0gcGFyYW1zLnRlcm07CisgICAgdmFyIGkgPSAwOworCisgICAgdmFyIGNyZWF0ZVRhZyA9IHRoaXMuY3JlYXRlVGFnIHx8IGZ1bmN0aW9uIChwYXJhbXMpIHsKKyAgICAgIHJldHVybiB7CisgICAgICAgIGlkOiBwYXJhbXMudGVybSwKKyAgICAgICAgdGV4dDogcGFyYW1zLnRlcm0KKyAgICAgIH07CisgICAgfTsKKworICAgIHdoaWxlIChpIDwgdGVybS5sZW5ndGgpIHsKKyAgICAgIHZhciB0ZXJtQ2hhciA9IHRlcm1baV07CisKKyAgICAgIGlmICgkLmluQXJyYXkodGVybUNoYXIsIHNlcGFyYXRvcnMpID09PSAtMSkgeworICAgICAgICBpKys7CisKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIHZhciBwYXJ0ID0gdGVybS5zdWJzdHIoMCwgaSk7CisgICAgICB2YXIgcGFydFBhcmFtcyA9ICQuZXh0ZW5kKHt9LCBwYXJhbXMsIHsKKyAgICAgICAgdGVybTogcGFydAorICAgICAgfSk7CisKKyAgICAgIHZhciBkYXRhID0gY3JlYXRlVGFnKHBhcnRQYXJhbXMpOworCisgICAgICBpZiAoZGF0YSA9PSBudWxsKSB7CisgICAgICAgIGkrKzsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGNhbGxiYWNrKGRhdGEpOworCisgICAgICAvLyBSZXNldCB0aGUgdGVybSB0byBub3QgaW5jbHVkZSB0aGUgdG9rZW5pemVkIHBvcnRpb24KKyAgICAgIHRlcm0gPSB0ZXJtLnN1YnN0cihpICsgMSkgfHwgJyc7CisgICAgICBpID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgdGVybTogdGVybQorICAgIH07CisgIH07CisKKyAgcmV0dXJuIFRva2VuaXplcjsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvZGF0YS9taW5pbXVtSW5wdXRMZW5ndGgnLFsKKworXSwgZnVuY3Rpb24gKCkgeworICBmdW5jdGlvbiBNaW5pbXVtSW5wdXRMZW5ndGggKGRlY29yYXRlZCwgJGUsIG9wdGlvbnMpIHsKKyAgICB0aGlzLm1pbmltdW1JbnB1dExlbmd0aCA9IG9wdGlvbnMuZ2V0KCdtaW5pbXVtSW5wdXRMZW5ndGgnKTsKKworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsICRlLCBvcHRpb25zKTsKKyAgfQorCisgIE1pbmltdW1JbnB1dExlbmd0aC5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBwYXJhbXMsIGNhbGxiYWNrKSB7CisgICAgcGFyYW1zLnRlcm0gPSBwYXJhbXMudGVybSB8fCAnJzsKKworICAgIGlmIChwYXJhbXMudGVybS5sZW5ndGggPCB0aGlzLm1pbmltdW1JbnB1dExlbmd0aCkgeworICAgICAgdGhpcy50cmlnZ2VyKCdyZXN1bHRzOm1lc3NhZ2UnLCB7CisgICAgICAgIG1lc3NhZ2U6ICdpbnB1dFRvb1Nob3J0JywKKyAgICAgICAgYXJnczogeworICAgICAgICAgIG1pbmltdW06IHRoaXMubWluaW11bUlucHV0TGVuZ3RoLAorICAgICAgICAgIGlucHV0OiBwYXJhbXMudGVybSwKKyAgICAgICAgICBwYXJhbXM6IHBhcmFtcworICAgICAgICB9CisgICAgICB9KTsKKworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIHBhcmFtcywgY2FsbGJhY2spOworICB9OworCisgIHJldHVybiBNaW5pbXVtSW5wdXRMZW5ndGg7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2RhdGEvbWF4aW11bUlucHV0TGVuZ3RoJyxbCisKK10sIGZ1bmN0aW9uICgpIHsKKyAgZnVuY3Rpb24gTWF4aW11bUlucHV0TGVuZ3RoIChkZWNvcmF0ZWQsICRlLCBvcHRpb25zKSB7CisgICAgdGhpcy5tYXhpbXVtSW5wdXRMZW5ndGggPSBvcHRpb25zLmdldCgnbWF4aW11bUlucHV0TGVuZ3RoJyk7CisKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCAkZSwgb3B0aW9ucyk7CisgIH0KKworICBNYXhpbXVtSW5wdXRMZW5ndGgucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgcGFyYW1zLCBjYWxsYmFjaykgeworICAgIHBhcmFtcy50ZXJtID0gcGFyYW1zLnRlcm0gfHwgJyc7CisKKyAgICBpZiAodGhpcy5tYXhpbXVtSW5wdXRMZW5ndGggPiAwICYmCisgICAgICAgIHBhcmFtcy50ZXJtLmxlbmd0aCA+IHRoaXMubWF4aW11bUlucHV0TGVuZ3RoKSB7CisgICAgICB0aGlzLnRyaWdnZXIoJ3Jlc3VsdHM6bWVzc2FnZScsIHsKKyAgICAgICAgbWVzc2FnZTogJ2lucHV0VG9vTG9uZycsCisgICAgICAgIGFyZ3M6IHsKKyAgICAgICAgICBtYXhpbXVtOiB0aGlzLm1heGltdW1JbnB1dExlbmd0aCwKKyAgICAgICAgICBpbnB1dDogcGFyYW1zLnRlcm0sCisgICAgICAgICAgcGFyYW1zOiBwYXJhbXMKKyAgICAgICAgfQorICAgICAgfSk7CisKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBwYXJhbXMsIGNhbGxiYWNrKTsKKyAgfTsKKworICByZXR1cm4gTWF4aW11bUlucHV0TGVuZ3RoOworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9kYXRhL21heGltdW1TZWxlY3Rpb25MZW5ndGgnLFsKKworXSwgZnVuY3Rpb24gKCl7CisgIGZ1bmN0aW9uIE1heGltdW1TZWxlY3Rpb25MZW5ndGggKGRlY29yYXRlZCwgJGUsIG9wdGlvbnMpIHsKKyAgICB0aGlzLm1heGltdW1TZWxlY3Rpb25MZW5ndGggPSBvcHRpb25zLmdldCgnbWF4aW11bVNlbGVjdGlvbkxlbmd0aCcpOworCisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgJGUsIG9wdGlvbnMpOworICB9CisKKyAgTWF4aW11bVNlbGVjdGlvbkxlbmd0aC5wcm90b3R5cGUucXVlcnkgPQorICAgIGZ1bmN0aW9uIChkZWNvcmF0ZWQsIHBhcmFtcywgY2FsbGJhY2spIHsKKyAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgdGhpcy5jdXJyZW50KGZ1bmN0aW9uIChjdXJyZW50RGF0YSkgeworICAgICAgICB2YXIgY291bnQgPSBjdXJyZW50RGF0YSAhPSBudWxsID8gY3VycmVudERhdGEubGVuZ3RoIDogMDsKKyAgICAgICAgaWYgKHNlbGYubWF4aW11bVNlbGVjdGlvbkxlbmd0aCA+IDAgJiYKKyAgICAgICAgICBjb3VudCA+PSBzZWxmLm1heGltdW1TZWxlY3Rpb25MZW5ndGgpIHsKKyAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3Jlc3VsdHM6bWVzc2FnZScsIHsKKyAgICAgICAgICAgIG1lc3NhZ2U6ICdtYXhpbXVtU2VsZWN0ZWQnLAorICAgICAgICAgICAgYXJnczogeworICAgICAgICAgICAgICBtYXhpbXVtOiBzZWxmLm1heGltdW1TZWxlY3Rpb25MZW5ndGgKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZGVjb3JhdGVkLmNhbGwoc2VsZiwgcGFyYW1zLCBjYWxsYmFjayk7CisgICAgICB9KTsKKyAgfTsKKworICByZXR1cm4gTWF4aW11bVNlbGVjdGlvbkxlbmd0aDsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvZHJvcGRvd24nLFsKKyAgJ2pxdWVyeScsCisgICcuL3V0aWxzJworXSwgZnVuY3Rpb24gKCQsIFV0aWxzKSB7CisgIGZ1bmN0aW9uIERyb3Bkb3duICgkZWxlbWVudCwgb3B0aW9ucykgeworICAgIHRoaXMuJGVsZW1lbnQgPSAkZWxlbWVudDsKKyAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOworCisgICAgRHJvcGRvd24uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7CisgIH0KKworICBVdGlscy5FeHRlbmQoRHJvcGRvd24sIFV0aWxzLk9ic2VydmFibGUpOworCisgIERyb3Bkb3duLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyICRkcm9wZG93biA9ICQoCisgICAgICAnPHNwYW4gY2xhc3M9InNlbGVjdDItZHJvcGRvd24iPicgKworICAgICAgICAnPHNwYW4gY2xhc3M9InNlbGVjdDItcmVzdWx0cyI+PC9zcGFuPicgKworICAgICAgJzwvc3Bhbj4nCisgICAgKTsKKworICAgICRkcm9wZG93bi5hdHRyKCdkaXInLCB0aGlzLm9wdGlvbnMuZ2V0KCdkaXInKSk7CisKKyAgICB0aGlzLiRkcm9wZG93biA9ICRkcm9wZG93bjsKKworICAgIHJldHVybiAkZHJvcGRvd247CisgIH07CisKKyAgRHJvcGRvd24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoKSB7CisgICAgLy8gU2hvdWxkIGJlIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXMKKyAgfTsKKworICBEcm9wZG93bi5wcm90b3R5cGUucG9zaXRpb24gPSBmdW5jdGlvbiAoJGRyb3Bkb3duLCAkY29udGFpbmVyKSB7CisgICAgLy8gU2hvdWxkIGJlIGltcGxtZW50ZWQgaW4gc3ViY2xhc3NlcworICB9OworCisgIERyb3Bkb3duLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgeworICAgIC8vIFJlbW92ZSB0aGUgZHJvcGRvd24gZnJvbSB0aGUgRE9NCisgICAgdGhpcy4kZHJvcGRvd24ucmVtb3ZlKCk7CisgIH07CisKKyAgcmV0dXJuIERyb3Bkb3duOworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9kcm9wZG93bi9zZWFyY2gnLFsKKyAgJ2pxdWVyeScsCisgICcuLi91dGlscycKK10sIGZ1bmN0aW9uICgkLCBVdGlscykgeworICBmdW5jdGlvbiBTZWFyY2ggKCkgeyB9CisKKyAgU2VhcmNoLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGVjb3JhdGVkKSB7CisgICAgdmFyICRyZW5kZXJlZCA9IGRlY29yYXRlZC5jYWxsKHRoaXMpOworCisgICAgdmFyICRzZWFyY2ggPSAkKAorICAgICAgJzxzcGFuIGNsYXNzPSJzZWxlY3QyLXNlYXJjaCBzZWxlY3QyLXNlYXJjaC0tZHJvcGRvd24iPicgKworICAgICAgICAnPGlucHV0IGNsYXNzPSJzZWxlY3QyLXNlYXJjaF9fZmllbGQiIHR5cGU9InNlYXJjaCIgdGFiaW5kZXg9Ii0xIicgKworICAgICAgICAnIGF1dG9jb21wbGV0ZT0ib2ZmIiBhdXRvY29ycmVjdD0ib2ZmIiBhdXRvY2FwaXRhbGl6ZT0ibm9uZSInICsKKyAgICAgICAgJyBzcGVsbGNoZWNrPSJmYWxzZSIgcm9sZT0idGV4dGJveCIgLz4nICsKKyAgICAgICc8L3NwYW4+JworICAgICk7CisKKyAgICB0aGlzLiRzZWFyY2hDb250YWluZXIgPSAkc2VhcmNoOworICAgIHRoaXMuJHNlYXJjaCA9ICRzZWFyY2guZmluZCgnaW5wdXQnKTsKKworICAgICRyZW5kZXJlZC5wcmVwZW5kKCRzZWFyY2gpOworCisgICAgcmV0dXJuICRyZW5kZXJlZDsKKyAgfTsKKworICBTZWFyY2gucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIsICRjb250YWluZXIpIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBjb250YWluZXIsICRjb250YWluZXIpOworCisgICAgdGhpcy4kc2VhcmNoLm9uKCdrZXlkb3duJywgZnVuY3Rpb24gKGV2dCkgeworICAgICAgc2VsZi50cmlnZ2VyKCdrZXlwcmVzcycsIGV2dCk7CisKKyAgICAgIHNlbGYuX2tleVVwUHJldmVudGVkID0gZXZ0LmlzRGVmYXVsdFByZXZlbnRlZCgpOworICAgIH0pOworCisgICAgLy8gV29ya2Fyb3VuZCBmb3IgYnJvd3NlcnMgd2hpY2ggZG8gbm90IHN1cHBvcnQgdGhlIGBpbnB1dGAgZXZlbnQKKyAgICAvLyBUaGlzIHdpbGwgcHJldmVudCBkb3VibGUtdHJpZ2dlcmluZyBvZiBldmVudHMgZm9yIGJyb3dzZXJzIHdoaWNoIHN1cHBvcnQKKyAgICAvLyBib3RoIHRoZSBga2V5dXBgIGFuZCBgaW5wdXRgIGV2ZW50cy4KKyAgICB0aGlzLiRzZWFyY2gub24oJ2lucHV0JywgZnVuY3Rpb24gKGV2dCkgeworICAgICAgLy8gVW5iaW5kIHRoZSBkdXBsaWNhdGVkIGBrZXl1cGAgZXZlbnQKKyAgICAgICQodGhpcykub2ZmKCdrZXl1cCcpOworICAgIH0pOworCisgICAgdGhpcy4kc2VhcmNoLm9uKCdrZXl1cCBpbnB1dCcsIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgIHNlbGYuaGFuZGxlU2VhcmNoKGV2dCk7CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ29wZW4nLCBmdW5jdGlvbiAoKSB7CisgICAgICBzZWxmLiRzZWFyY2guYXR0cigndGFiaW5kZXgnLCAwKTsKKworICAgICAgc2VsZi4kc2VhcmNoLmZvY3VzKCk7CisKKyAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgc2VsZi4kc2VhcmNoLmZvY3VzKCk7CisgICAgICB9LCAwKTsKKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7CisgICAgICBzZWxmLiRzZWFyY2guYXR0cigndGFiaW5kZXgnLCAtMSk7CisKKyAgICAgIHNlbGYuJHNlYXJjaC52YWwoJycpOworICAgICAgc2VsZi4kc2VhcmNoLmJsdXIoKTsKKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbignZm9jdXMnLCBmdW5jdGlvbiAoKSB7CisgICAgICBpZiAoIWNvbnRhaW5lci5pc09wZW4oKSkgeworICAgICAgICBzZWxmLiRzZWFyY2guZm9jdXMoKTsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbigncmVzdWx0czphbGwnLCBmdW5jdGlvbiAocGFyYW1zKSB7CisgICAgICBpZiAocGFyYW1zLnF1ZXJ5LnRlcm0gPT0gbnVsbCB8fCBwYXJhbXMucXVlcnkudGVybSA9PT0gJycpIHsKKyAgICAgICAgdmFyIHNob3dTZWFyY2ggPSBzZWxmLnNob3dTZWFyY2gocGFyYW1zKTsKKworICAgICAgICBpZiAoc2hvd1NlYXJjaCkgeworICAgICAgICAgIHNlbGYuJHNlYXJjaENvbnRhaW5lci5yZW1vdmVDbGFzcygnc2VsZWN0Mi1zZWFyY2gtLWhpZGUnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzZWxmLiRzZWFyY2hDb250YWluZXIuYWRkQ2xhc3MoJ3NlbGVjdDItc2VhcmNoLS1oaWRlJyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKyAgfTsKKworICBTZWFyY2gucHJvdG90eXBlLmhhbmRsZVNlYXJjaCA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICBpZiAoIXRoaXMuX2tleVVwUHJldmVudGVkKSB7CisgICAgICB2YXIgaW5wdXQgPSB0aGlzLiRzZWFyY2gudmFsKCk7CisKKyAgICAgIHRoaXMudHJpZ2dlcigncXVlcnknLCB7CisgICAgICAgIHRlcm06IGlucHV0CisgICAgICB9KTsKKyAgICB9CisKKyAgICB0aGlzLl9rZXlVcFByZXZlbnRlZCA9IGZhbHNlOworICB9OworCisgIFNlYXJjaC5wcm90b3R5cGUuc2hvd1NlYXJjaCA9IGZ1bmN0aW9uIChfLCBwYXJhbXMpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfTsKKworICByZXR1cm4gU2VhcmNoOworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9kcm9wZG93bi9oaWRlUGxhY2Vob2xkZXInLFsKKworXSwgZnVuY3Rpb24gKCkgeworICBmdW5jdGlvbiBIaWRlUGxhY2Vob2xkZXIgKGRlY29yYXRlZCwgJGVsZW1lbnQsIG9wdGlvbnMsIGRhdGFBZGFwdGVyKSB7CisgICAgdGhpcy5wbGFjZWhvbGRlciA9IHRoaXMubm9ybWFsaXplUGxhY2Vob2xkZXIob3B0aW9ucy5nZXQoJ3BsYWNlaG9sZGVyJykpOworCisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgJGVsZW1lbnQsIG9wdGlvbnMsIGRhdGFBZGFwdGVyKTsKKyAgfQorCisgIEhpZGVQbGFjZWhvbGRlci5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgZGF0YSkgeworICAgIGRhdGEucmVzdWx0cyA9IHRoaXMucmVtb3ZlUGxhY2Vob2xkZXIoZGF0YS5yZXN1bHRzKTsKKworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGRhdGEpOworICB9OworCisgIEhpZGVQbGFjZWhvbGRlci5wcm90b3R5cGUubm9ybWFsaXplUGxhY2Vob2xkZXIgPSBmdW5jdGlvbiAoXywgcGxhY2Vob2xkZXIpIHsKKyAgICBpZiAodHlwZW9mIHBsYWNlaG9sZGVyID09PSAnc3RyaW5nJykgeworICAgICAgcGxhY2Vob2xkZXIgPSB7CisgICAgICAgIGlkOiAnJywKKyAgICAgICAgdGV4dDogcGxhY2Vob2xkZXIKKyAgICAgIH07CisgICAgfQorCisgICAgcmV0dXJuIHBsYWNlaG9sZGVyOworICB9OworCisgIEhpZGVQbGFjZWhvbGRlci5wcm90b3R5cGUucmVtb3ZlUGxhY2Vob2xkZXIgPSBmdW5jdGlvbiAoXywgZGF0YSkgeworICAgIHZhciBtb2RpZmllZERhdGEgPSBkYXRhLnNsaWNlKDApOworCisgICAgZm9yICh2YXIgZCA9IGRhdGEubGVuZ3RoIC0gMTsgZCA+PSAwOyBkLS0pIHsKKyAgICAgIHZhciBpdGVtID0gZGF0YVtkXTsKKworICAgICAgaWYgKHRoaXMucGxhY2Vob2xkZXIuaWQgPT09IGl0ZW0uaWQpIHsKKyAgICAgICAgbW9kaWZpZWREYXRhLnNwbGljZShkLCAxKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbW9kaWZpZWREYXRhOworICB9OworCisgIHJldHVybiBIaWRlUGxhY2Vob2xkZXI7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duL2luZmluaXRlU2Nyb2xsJyxbCisgICdqcXVlcnknCitdLCBmdW5jdGlvbiAoJCkgeworICBmdW5jdGlvbiBJbmZpbml0ZVNjcm9sbCAoZGVjb3JhdGVkLCAkZWxlbWVudCwgb3B0aW9ucywgZGF0YUFkYXB0ZXIpIHsKKyAgICB0aGlzLmxhc3RQYXJhbXMgPSB7fTsKKworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsICRlbGVtZW50LCBvcHRpb25zLCBkYXRhQWRhcHRlcik7CisKKyAgICB0aGlzLiRsb2FkaW5nTW9yZSA9IHRoaXMuY3JlYXRlTG9hZGluZ01vcmUoKTsKKyAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKKyAgfQorCisgIEluZmluaXRlU2Nyb2xsLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBkYXRhKSB7CisgICAgdGhpcy4kbG9hZGluZ01vcmUucmVtb3ZlKCk7CisgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CisKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBkYXRhKTsKKworICAgIGlmICh0aGlzLnNob3dMb2FkaW5nTW9yZShkYXRhKSkgeworICAgICAgdGhpcy4kcmVzdWx0cy5hcHBlbmQodGhpcy4kbG9hZGluZ01vcmUpOworICAgIH0KKyAgfTsKKworICBJbmZpbml0ZVNjcm9sbC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGNvbnRhaW5lciwgJGNvbnRhaW5lcikgeworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGNvbnRhaW5lciwgJGNvbnRhaW5lcik7CisKKyAgICBjb250YWluZXIub24oJ3F1ZXJ5JywgZnVuY3Rpb24gKHBhcmFtcykgeworICAgICAgc2VsZi5sYXN0UGFyYW1zID0gcGFyYW1zOworICAgICAgc2VsZi5sb2FkaW5nID0gdHJ1ZTsKKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbigncXVlcnk6YXBwZW5kJywgZnVuY3Rpb24gKHBhcmFtcykgeworICAgICAgc2VsZi5sYXN0UGFyYW1zID0gcGFyYW1zOworICAgICAgc2VsZi5sb2FkaW5nID0gdHJ1ZTsKKyAgICB9KTsKKworICAgIHRoaXMuJHJlc3VsdHMub24oJ3Njcm9sbCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBpc0xvYWRNb3JlVmlzaWJsZSA9ICQuY29udGFpbnMoCisgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwKKyAgICAgICAgc2VsZi4kbG9hZGluZ01vcmVbMF0KKyAgICAgICk7CisKKyAgICAgIGlmIChzZWxmLmxvYWRpbmcgfHwgIWlzTG9hZE1vcmVWaXNpYmxlKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgdmFyIGN1cnJlbnRPZmZzZXQgPSBzZWxmLiRyZXN1bHRzLm9mZnNldCgpLnRvcCArCisgICAgICAgIHNlbGYuJHJlc3VsdHMub3V0ZXJIZWlnaHQoZmFsc2UpOworICAgICAgdmFyIGxvYWRpbmdNb3JlT2Zmc2V0ID0gc2VsZi4kbG9hZGluZ01vcmUub2Zmc2V0KCkudG9wICsKKyAgICAgICAgc2VsZi4kbG9hZGluZ01vcmUub3V0ZXJIZWlnaHQoZmFsc2UpOworCisgICAgICBpZiAoY3VycmVudE9mZnNldCArIDUwID49IGxvYWRpbmdNb3JlT2Zmc2V0KSB7CisgICAgICAgIHNlbGYubG9hZE1vcmUoKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfTsKKworICBJbmZpbml0ZVNjcm9sbC5wcm90b3R5cGUubG9hZE1vcmUgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKKworICAgIHZhciBwYXJhbXMgPSAkLmV4dGVuZCh7fSwge3BhZ2U6IDF9LCB0aGlzLmxhc3RQYXJhbXMpOworCisgICAgcGFyYW1zLnBhZ2UrKzsKKworICAgIHRoaXMudHJpZ2dlcigncXVlcnk6YXBwZW5kJywgcGFyYW1zKTsKKyAgfTsKKworICBJbmZpbml0ZVNjcm9sbC5wcm90b3R5cGUuc2hvd0xvYWRpbmdNb3JlID0gZnVuY3Rpb24gKF8sIGRhdGEpIHsKKyAgICByZXR1cm4gZGF0YS5wYWdpbmF0aW9uICYmIGRhdGEucGFnaW5hdGlvbi5tb3JlOworICB9OworCisgIEluZmluaXRlU2Nyb2xsLnByb3RvdHlwZS5jcmVhdGVMb2FkaW5nTW9yZSA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgJG9wdGlvbiA9ICQoCisgICAgICAnPGxpICcgKworICAgICAgJ2NsYXNzPSJzZWxlY3QyLXJlc3VsdHNfX29wdGlvbiBzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tbG9hZC1tb3JlIicgKworICAgICAgJ3JvbGU9InRyZWVpdGVtIiBhcmlhLWRpc2FibGVkPSJ0cnVlIj48L2xpPicKKyAgICApOworCisgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLm9wdGlvbnMuZ2V0KCd0cmFuc2xhdGlvbnMnKS5nZXQoJ2xvYWRpbmdNb3JlJyk7CisKKyAgICAkb3B0aW9uLmh0bWwobWVzc2FnZSh0aGlzLmxhc3RQYXJhbXMpKTsKKworICAgIHJldHVybiAkb3B0aW9uOworICB9OworCisgIHJldHVybiBJbmZpbml0ZVNjcm9sbDsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvZHJvcGRvd24vYXR0YWNoQm9keScsWworICAnanF1ZXJ5JywKKyAgJy4uL3V0aWxzJworXSwgZnVuY3Rpb24gKCQsIFV0aWxzKSB7CisgIGZ1bmN0aW9uIEF0dGFjaEJvZHkgKGRlY29yYXRlZCwgJGVsZW1lbnQsIG9wdGlvbnMpIHsKKyAgICB0aGlzLiRkcm9wZG93blBhcmVudCA9IG9wdGlvbnMuZ2V0KCdkcm9wZG93blBhcmVudCcpIHx8ICQoZG9jdW1lbnQuYm9keSk7CisKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCAkZWxlbWVudCwgb3B0aW9ucyk7CisgIH0KKworICBBdHRhY2hCb2R5LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgY29udGFpbmVyLCAkY29udGFpbmVyKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgdmFyIHNldHVwUmVzdWx0c0V2ZW50cyA9IGZhbHNlOworCisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgY29udGFpbmVyLCAkY29udGFpbmVyKTsKKworICAgIGNvbnRhaW5lci5vbignb3BlbicsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHNlbGYuX3Nob3dEcm9wZG93bigpOworICAgICAgc2VsZi5fYXR0YWNoUG9zaXRpb25pbmdIYW5kbGVyKGNvbnRhaW5lcik7CisKKyAgICAgIGlmICghc2V0dXBSZXN1bHRzRXZlbnRzKSB7CisgICAgICAgIHNldHVwUmVzdWx0c0V2ZW50cyA9IHRydWU7CisKKyAgICAgICAgY29udGFpbmVyLm9uKCdyZXN1bHRzOmFsbCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICBzZWxmLl9wb3NpdGlvbkRyb3Bkb3duKCk7CisgICAgICAgICAgc2VsZi5fcmVzaXplRHJvcGRvd24oKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29udGFpbmVyLm9uKCdyZXN1bHRzOmFwcGVuZCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICBzZWxmLl9wb3NpdGlvbkRyb3Bkb3duKCk7CisgICAgICAgICAgc2VsZi5fcmVzaXplRHJvcGRvd24oKTsKKyAgICAgICAgfSk7CisgICAgICB9CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkgeworICAgICAgc2VsZi5faGlkZURyb3Bkb3duKCk7CisgICAgICBzZWxmLl9kZXRhY2hQb3NpdGlvbmluZ0hhbmRsZXIoY29udGFpbmVyKTsKKyAgICB9KTsKKworICAgIHRoaXMuJGRyb3Bkb3duQ29udGFpbmVyLm9uKCdtb3VzZWRvd24nLCBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgfSk7CisgIH07CisKKyAgQXR0YWNoQm9keS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQpIHsKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzKTsKKworICAgIHRoaXMuJGRyb3Bkb3duQ29udGFpbmVyLnJlbW92ZSgpOworICB9OworCisgIEF0dGFjaEJvZHkucHJvdG90eXBlLnBvc2l0aW9uID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgJGRyb3Bkb3duLCAkY29udGFpbmVyKSB7CisgICAgLy8gQ2xvbmUgYWxsIG9mIHRoZSBjb250YWluZXIgY2xhc3NlcworICAgICRkcm9wZG93bi5hdHRyKCdjbGFzcycsICRjb250YWluZXIuYXR0cignY2xhc3MnKSk7CisKKyAgICAkZHJvcGRvd24ucmVtb3ZlQ2xhc3MoJ3NlbGVjdDInKTsKKyAgICAkZHJvcGRvd24uYWRkQ2xhc3MoJ3NlbGVjdDItY29udGFpbmVyLS1vcGVuJyk7CisKKyAgICAkZHJvcGRvd24uY3NzKHsKKyAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLAorICAgICAgdG9wOiAtOTk5OTk5CisgICAgfSk7CisKKyAgICB0aGlzLiRjb250YWluZXIgPSAkY29udGFpbmVyOworICB9OworCisgIEF0dGFjaEJvZHkucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQpIHsKKyAgICB2YXIgJGNvbnRhaW5lciA9ICQoJzxzcGFuPjwvc3Bhbj4nKTsKKworICAgIHZhciAkZHJvcGRvd24gPSBkZWNvcmF0ZWQuY2FsbCh0aGlzKTsKKyAgICAkY29udGFpbmVyLmFwcGVuZCgkZHJvcGRvd24pOworCisgICAgdGhpcy4kZHJvcGRvd25Db250YWluZXIgPSAkY29udGFpbmVyOworCisgICAgcmV0dXJuICRjb250YWluZXI7CisgIH07CisKKyAgQXR0YWNoQm9keS5wcm90b3R5cGUuX2hpZGVEcm9wZG93biA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQpIHsKKyAgICB0aGlzLiRkcm9wZG93bkNvbnRhaW5lci5kZXRhY2goKTsKKyAgfTsKKworICBBdHRhY2hCb2R5LnByb3RvdHlwZS5fYXR0YWNoUG9zaXRpb25pbmdIYW5kbGVyID0KKyAgICAgIGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGNvbnRhaW5lcikgeworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIHZhciBzY3JvbGxFdmVudCA9ICdzY3JvbGwuc2VsZWN0Mi4nICsgY29udGFpbmVyLmlkOworICAgIHZhciByZXNpemVFdmVudCA9ICdyZXNpemUuc2VsZWN0Mi4nICsgY29udGFpbmVyLmlkOworICAgIHZhciBvcmllbnRhdGlvbkV2ZW50ID0gJ29yaWVudGF0aW9uY2hhbmdlLnNlbGVjdDIuJyArIGNvbnRhaW5lci5pZDsKKworICAgIHZhciAkd2F0Y2hlcnMgPSB0aGlzLiRjb250YWluZXIucGFyZW50cygpLmZpbHRlcihVdGlscy5oYXNTY3JvbGwpOworICAgICR3YXRjaGVycy5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIFV0aWxzLlN0b3JlRGF0YSh0aGlzLCAnc2VsZWN0Mi1zY3JvbGwtcG9zaXRpb24nLCB7CisgICAgICAgIHg6ICQodGhpcykuc2Nyb2xsTGVmdCgpLAorICAgICAgICB5OiAkKHRoaXMpLnNjcm9sbFRvcCgpCisgICAgICB9KTsKKyAgICB9KTsKKworICAgICR3YXRjaGVycy5vbihzY3JvbGxFdmVudCwgZnVuY3Rpb24gKGV2KSB7CisgICAgICB2YXIgcG9zaXRpb24gPSBVdGlscy5HZXREYXRhKHRoaXMsICdzZWxlY3QyLXNjcm9sbC1wb3NpdGlvbicpOworICAgICAgJCh0aGlzKS5zY3JvbGxUb3AocG9zaXRpb24ueSk7CisgICAgfSk7CisKKyAgICAkKHdpbmRvdykub24oc2Nyb2xsRXZlbnQgKyAnICcgKyByZXNpemVFdmVudCArICcgJyArIG9yaWVudGF0aW9uRXZlbnQsCisgICAgICBmdW5jdGlvbiAoZSkgeworICAgICAgc2VsZi5fcG9zaXRpb25Ecm9wZG93bigpOworICAgICAgc2VsZi5fcmVzaXplRHJvcGRvd24oKTsKKyAgICB9KTsKKyAgfTsKKworICBBdHRhY2hCb2R5LnByb3RvdHlwZS5fZGV0YWNoUG9zaXRpb25pbmdIYW5kbGVyID0KKyAgICAgIGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGNvbnRhaW5lcikgeworICAgIHZhciBzY3JvbGxFdmVudCA9ICdzY3JvbGwuc2VsZWN0Mi4nICsgY29udGFpbmVyLmlkOworICAgIHZhciByZXNpemVFdmVudCA9ICdyZXNpemUuc2VsZWN0Mi4nICsgY29udGFpbmVyLmlkOworICAgIHZhciBvcmllbnRhdGlvbkV2ZW50ID0gJ29yaWVudGF0aW9uY2hhbmdlLnNlbGVjdDIuJyArIGNvbnRhaW5lci5pZDsKKworICAgIHZhciAkd2F0Y2hlcnMgPSB0aGlzLiRjb250YWluZXIucGFyZW50cygpLmZpbHRlcihVdGlscy5oYXNTY3JvbGwpOworICAgICR3YXRjaGVycy5vZmYoc2Nyb2xsRXZlbnQpOworCisgICAgJCh3aW5kb3cpLm9mZihzY3JvbGxFdmVudCArICcgJyArIHJlc2l6ZUV2ZW50ICsgJyAnICsgb3JpZW50YXRpb25FdmVudCk7CisgIH07CisKKyAgQXR0YWNoQm9keS5wcm90b3R5cGUuX3Bvc2l0aW9uRHJvcGRvd24gPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyICR3aW5kb3cgPSAkKHdpbmRvdyk7CisKKyAgICB2YXIgaXNDdXJyZW50bHlBYm92ZSA9IHRoaXMuJGRyb3Bkb3duLmhhc0NsYXNzKCdzZWxlY3QyLWRyb3Bkb3duLS1hYm92ZScpOworICAgIHZhciBpc0N1cnJlbnRseUJlbG93ID0gdGhpcy4kZHJvcGRvd24uaGFzQ2xhc3MoJ3NlbGVjdDItZHJvcGRvd24tLWJlbG93Jyk7CisKKyAgICB2YXIgbmV3RGlyZWN0aW9uID0gbnVsbDsKKworICAgIHZhciBvZmZzZXQgPSB0aGlzLiRjb250YWluZXIub2Zmc2V0KCk7CisKKyAgICBvZmZzZXQuYm90dG9tID0gb2Zmc2V0LnRvcCArIHRoaXMuJGNvbnRhaW5lci5vdXRlckhlaWdodChmYWxzZSk7CisKKyAgICB2YXIgY29udGFpbmVyID0geworICAgICAgaGVpZ2h0OiB0aGlzLiRjb250YWluZXIub3V0ZXJIZWlnaHQoZmFsc2UpCisgICAgfTsKKworICAgIGNvbnRhaW5lci50b3AgPSBvZmZzZXQudG9wOworICAgIGNvbnRhaW5lci5ib3R0b20gPSBvZmZzZXQudG9wICsgY29udGFpbmVyLmhlaWdodDsKKworICAgIHZhciBkcm9wZG93biA9IHsKKyAgICAgIGhlaWdodDogdGhpcy4kZHJvcGRvd24ub3V0ZXJIZWlnaHQoZmFsc2UpCisgICAgfTsKKworICAgIHZhciB2aWV3cG9ydCA9IHsKKyAgICAgIHRvcDogJHdpbmRvdy5zY3JvbGxUb3AoKSwKKyAgICAgIGJvdHRvbTogJHdpbmRvdy5zY3JvbGxUb3AoKSArICR3aW5kb3cuaGVpZ2h0KCkKKyAgICB9OworCisgICAgdmFyIGVub3VnaFJvb21BYm92ZSA9IHZpZXdwb3J0LnRvcCA8IChvZmZzZXQudG9wIC0gZHJvcGRvd24uaGVpZ2h0KTsKKyAgICB2YXIgZW5vdWdoUm9vbUJlbG93ID0gdmlld3BvcnQuYm90dG9tID4gKG9mZnNldC5ib3R0b20gKyBkcm9wZG93bi5oZWlnaHQpOworCisgICAgdmFyIGNzcyA9IHsKKyAgICAgIGxlZnQ6IG9mZnNldC5sZWZ0LAorICAgICAgdG9wOiBjb250YWluZXIuYm90dG9tCisgICAgfTsKKworICAgIC8vIERldGVybWluZSB3aGF0IHRoZSBwYXJlbnQgZWxlbWVudCBpcyB0byB1c2UgZm9yIGNhbGNpdWxhdGluZyB0aGUgb2Zmc2V0CisgICAgdmFyICRvZmZzZXRQYXJlbnQgPSB0aGlzLiRkcm9wZG93blBhcmVudDsKKworICAgIC8vIEZvciBzdGF0aWNhbGx5IHBvc2l0b25lZCBlbGVtZW50cywgd2UgbmVlZCB0byBnZXQgdGhlIGVsZW1lbnQKKyAgICAvLyB0aGF0IGlzIGRldGVybWluaW5nIHRoZSBvZmZzZXQKKyAgICBpZiAoJG9mZnNldFBhcmVudC5jc3MoJ3Bvc2l0aW9uJykgPT09ICdzdGF0aWMnKSB7CisgICAgICAkb2Zmc2V0UGFyZW50ID0gJG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQoKTsKKyAgICB9CisKKyAgICB2YXIgcGFyZW50T2Zmc2V0ID0gJG9mZnNldFBhcmVudC5vZmZzZXQoKTsKKworICAgIGNzcy50b3AgLT0gcGFyZW50T2Zmc2V0LnRvcDsKKyAgICBjc3MubGVmdCAtPSBwYXJlbnRPZmZzZXQubGVmdDsKKworICAgIGlmICghaXNDdXJyZW50bHlBYm92ZSAmJiAhaXNDdXJyZW50bHlCZWxvdykgeworICAgICAgbmV3RGlyZWN0aW9uID0gJ2JlbG93JzsKKyAgICB9CisKKyAgICBpZiAoIWVub3VnaFJvb21CZWxvdyAmJiBlbm91Z2hSb29tQWJvdmUgJiYgIWlzQ3VycmVudGx5QWJvdmUpIHsKKyAgICAgIG5ld0RpcmVjdGlvbiA9ICdhYm92ZSc7CisgICAgfSBlbHNlIGlmICghZW5vdWdoUm9vbUFib3ZlICYmIGVub3VnaFJvb21CZWxvdyAmJiBpc0N1cnJlbnRseUFib3ZlKSB7CisgICAgICBuZXdEaXJlY3Rpb24gPSAnYmVsb3cnOworICAgIH0KKworICAgIGlmIChuZXdEaXJlY3Rpb24gPT0gJ2Fib3ZlJyB8fAorICAgICAgKGlzQ3VycmVudGx5QWJvdmUgJiYgbmV3RGlyZWN0aW9uICE9PSAnYmVsb3cnKSkgeworICAgICAgY3NzLnRvcCA9IGNvbnRhaW5lci50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0gZHJvcGRvd24uaGVpZ2h0OworICAgIH0KKworICAgIGlmIChuZXdEaXJlY3Rpb24gIT0gbnVsbCkgeworICAgICAgdGhpcy4kZHJvcGRvd24KKyAgICAgICAgLnJlbW92ZUNsYXNzKCdzZWxlY3QyLWRyb3Bkb3duLS1iZWxvdyBzZWxlY3QyLWRyb3Bkb3duLS1hYm92ZScpCisgICAgICAgIC5hZGRDbGFzcygnc2VsZWN0Mi1kcm9wZG93bi0tJyArIG5ld0RpcmVjdGlvbik7CisgICAgICB0aGlzLiRjb250YWluZXIKKyAgICAgICAgLnJlbW92ZUNsYXNzKCdzZWxlY3QyLWNvbnRhaW5lci0tYmVsb3cgc2VsZWN0Mi1jb250YWluZXItLWFib3ZlJykKKyAgICAgICAgLmFkZENsYXNzKCdzZWxlY3QyLWNvbnRhaW5lci0tJyArIG5ld0RpcmVjdGlvbik7CisgICAgfQorCisgICAgdGhpcy4kZHJvcGRvd25Db250YWluZXIuY3NzKGNzcyk7CisgIH07CisKKyAgQXR0YWNoQm9keS5wcm90b3R5cGUuX3Jlc2l6ZURyb3Bkb3duID0gZnVuY3Rpb24gKCkgeworICAgIHZhciBjc3MgPSB7CisgICAgICB3aWR0aDogdGhpcy4kY29udGFpbmVyLm91dGVyV2lkdGgoZmFsc2UpICsgJ3B4JworICAgIH07CisKKyAgICBpZiAodGhpcy5vcHRpb25zLmdldCgnZHJvcGRvd25BdXRvV2lkdGgnKSkgeworICAgICAgY3NzLm1pbldpZHRoID0gY3NzLndpZHRoOworICAgICAgY3NzLnBvc2l0aW9uID0gJ3JlbGF0aXZlJzsKKyAgICAgIGNzcy53aWR0aCA9ICdhdXRvJzsKKyAgICB9CisKKyAgICB0aGlzLiRkcm9wZG93bi5jc3MoY3NzKTsKKyAgfTsKKworICBBdHRhY2hCb2R5LnByb3RvdHlwZS5fc2hvd0Ryb3Bkb3duID0gZnVuY3Rpb24gKGRlY29yYXRlZCkgeworICAgIHRoaXMuJGRyb3Bkb3duQ29udGFpbmVyLmFwcGVuZFRvKHRoaXMuJGRyb3Bkb3duUGFyZW50KTsKKworICAgIHRoaXMuX3Bvc2l0aW9uRHJvcGRvd24oKTsKKyAgICB0aGlzLl9yZXNpemVEcm9wZG93bigpOworICB9OworCisgIHJldHVybiBBdHRhY2hCb2R5OworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9kcm9wZG93bi9taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCcsWworCitdLCBmdW5jdGlvbiAoKSB7CisgIGZ1bmN0aW9uIGNvdW50UmVzdWx0cyAoZGF0YSkgeworICAgIHZhciBjb3VudCA9IDA7CisKKyAgICBmb3IgKHZhciBkID0gMDsgZCA8IGRhdGEubGVuZ3RoOyBkKyspIHsKKyAgICAgIHZhciBpdGVtID0gZGF0YVtkXTsKKworICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHsKKyAgICAgICAgY291bnQgKz0gY291bnRSZXN1bHRzKGl0ZW0uY2hpbGRyZW4pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY291bnQrKzsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7CisgIH0KKworICBmdW5jdGlvbiBNaW5pbXVtUmVzdWx0c0ZvclNlYXJjaCAoZGVjb3JhdGVkLCAkZWxlbWVudCwgb3B0aW9ucywgZGF0YUFkYXB0ZXIpIHsKKyAgICB0aGlzLm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoID0gb3B0aW9ucy5nZXQoJ21pbmltdW1SZXN1bHRzRm9yU2VhcmNoJyk7CisKKyAgICBpZiAodGhpcy5taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCA8IDApIHsKKyAgICAgIHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2ggPSBJbmZpbml0eTsKKyAgICB9CisKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCAkZWxlbWVudCwgb3B0aW9ucywgZGF0YUFkYXB0ZXIpOworICB9CisKKyAgTWluaW11bVJlc3VsdHNGb3JTZWFyY2gucHJvdG90eXBlLnNob3dTZWFyY2ggPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBwYXJhbXMpIHsKKyAgICBpZiAoY291bnRSZXN1bHRzKHBhcmFtcy5kYXRhLnJlc3VsdHMpIDwgdGhpcy5taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBwYXJhbXMpOworICB9OworCisgIHJldHVybiBNaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvZHJvcGRvd24vc2VsZWN0T25DbG9zZScsWworICAnLi4vdXRpbHMnCitdLCBmdW5jdGlvbiAoVXRpbHMpIHsKKyAgZnVuY3Rpb24gU2VsZWN0T25DbG9zZSAoKSB7IH0KKworICBTZWxlY3RPbkNsb3NlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgY29udGFpbmVyLCAkY29udGFpbmVyKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgY29udGFpbmVyLCAkY29udGFpbmVyKTsKKworICAgIGNvbnRhaW5lci5vbignY2xvc2UnLCBmdW5jdGlvbiAocGFyYW1zKSB7CisgICAgICBzZWxmLl9oYW5kbGVTZWxlY3RPbkNsb3NlKHBhcmFtcyk7CisgICAgfSk7CisgIH07CisKKyAgU2VsZWN0T25DbG9zZS5wcm90b3R5cGUuX2hhbmRsZVNlbGVjdE9uQ2xvc2UgPSBmdW5jdGlvbiAoXywgcGFyYW1zKSB7CisgICAgaWYgKHBhcmFtcyAmJiBwYXJhbXMub3JpZ2luYWxTZWxlY3QyRXZlbnQgIT0gbnVsbCkgeworICAgICAgdmFyIGV2ZW50ID0gcGFyYW1zLm9yaWdpbmFsU2VsZWN0MkV2ZW50OworCisgICAgICAvLyBEb24ndCBzZWxlY3QgYW4gaXRlbSBpZiB0aGUgY2xvc2UgZXZlbnQgd2FzIHRyaWdnZXJlZCBmcm9tIGEgc2VsZWN0IG9yCisgICAgICAvLyB1bnNlbGVjdCBldmVudAorICAgICAgaWYgKGV2ZW50Ll90eXBlID09PSAnc2VsZWN0JyB8fCBldmVudC5fdHlwZSA9PT0gJ3Vuc2VsZWN0JykgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgdmFyICRoaWdobGlnaHRlZFJlc3VsdHMgPSB0aGlzLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpOworCisgICAgLy8gT25seSBzZWxlY3QgaGlnaGxpZ2h0ZWQgcmVzdWx0cworICAgIGlmICgkaGlnaGxpZ2h0ZWRSZXN1bHRzLmxlbmd0aCA8IDEpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgZGF0YSA9IFV0aWxzLkdldERhdGEoJGhpZ2hsaWdodGVkUmVzdWx0c1swXSwgJ2RhdGEnKTsKKworICAgIC8vIERvbid0IHJlLXNlbGVjdCBhbHJlYWR5IHNlbGVjdGVkIHJlc3VsdGUKKyAgICBpZiAoCisgICAgICAoZGF0YS5lbGVtZW50ICE9IG51bGwgJiYgZGF0YS5lbGVtZW50LnNlbGVjdGVkKSB8fAorICAgICAgKGRhdGEuZWxlbWVudCA9PSBudWxsICYmIGRhdGEuc2VsZWN0ZWQpCisgICAgKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhpcy50cmlnZ2VyKCdzZWxlY3QnLCB7CisgICAgICAgIGRhdGE6IGRhdGEKKyAgICB9KTsKKyAgfTsKKworICByZXR1cm4gU2VsZWN0T25DbG9zZTsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvZHJvcGRvd24vY2xvc2VPblNlbGVjdCcsWworCitdLCBmdW5jdGlvbiAoKSB7CisgIGZ1bmN0aW9uIENsb3NlT25TZWxlY3QgKCkgeyB9CisKKyAgQ2xvc2VPblNlbGVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGNvbnRhaW5lciwgJGNvbnRhaW5lcikgeworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGNvbnRhaW5lciwgJGNvbnRhaW5lcik7CisKKyAgICBjb250YWluZXIub24oJ3NlbGVjdCcsIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgIHNlbGYuX3NlbGVjdFRyaWdnZXJlZChldnQpOworICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCd1bnNlbGVjdCcsIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgIHNlbGYuX3NlbGVjdFRyaWdnZXJlZChldnQpOworICAgIH0pOworICB9OworCisgIENsb3NlT25TZWxlY3QucHJvdG90eXBlLl9zZWxlY3RUcmlnZ2VyZWQgPSBmdW5jdGlvbiAoXywgZXZ0KSB7CisgICAgdmFyIG9yaWdpbmFsRXZlbnQgPSBldnQub3JpZ2luYWxFdmVudDsKKworICAgIC8vIERvbid0IGNsb3NlIGlmIHRoZSBjb250cm9sIGtleSBpcyBiZWluZyBoZWxkCisgICAgaWYgKG9yaWdpbmFsRXZlbnQgJiYgb3JpZ2luYWxFdmVudC5jdHJsS2V5KSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhpcy50cmlnZ2VyKCdjbG9zZScsIHsKKyAgICAgIG9yaWdpbmFsRXZlbnQ6IG9yaWdpbmFsRXZlbnQsCisgICAgICBvcmlnaW5hbFNlbGVjdDJFdmVudDogZXZ0CisgICAgfSk7CisgIH07CisKKyAgcmV0dXJuIENsb3NlT25TZWxlY3Q7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2kxOG4vZW4nLFtdLGZ1bmN0aW9uICgpIHsKKyAgLy8gRW5nbGlzaAorICByZXR1cm4geworICAgIGVycm9yTG9hZGluZzogZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuICdUaGUgcmVzdWx0cyBjb3VsZCBub3QgYmUgbG9hZGVkLic7CisgICAgfSwKKyAgICBpbnB1dFRvb0xvbmc6IGZ1bmN0aW9uIChhcmdzKSB7CisgICAgICB2YXIgb3ZlckNoYXJzID0gYXJncy5pbnB1dC5sZW5ndGggLSBhcmdzLm1heGltdW07CisKKyAgICAgIHZhciBtZXNzYWdlID0gJ1BsZWFzZSBkZWxldGUgJyArIG92ZXJDaGFycyArICcgY2hhcmFjdGVyJzsKKworICAgICAgaWYgKG92ZXJDaGFycyAhPSAxKSB7CisgICAgICAgIG1lc3NhZ2UgKz0gJ3MnOworICAgICAgfQorCisgICAgICByZXR1cm4gbWVzc2FnZTsKKyAgICB9LAorICAgIGlucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChhcmdzKSB7CisgICAgICB2YXIgcmVtYWluaW5nQ2hhcnMgPSBhcmdzLm1pbmltdW0gLSBhcmdzLmlucHV0Lmxlbmd0aDsKKworICAgICAgdmFyIG1lc3NhZ2UgPSAnUGxlYXNlIGVudGVyICcgKyByZW1haW5pbmdDaGFycyArICcgb3IgbW9yZSBjaGFyYWN0ZXJzJzsKKworICAgICAgcmV0dXJuIG1lc3NhZ2U7CisgICAgfSwKKyAgICBsb2FkaW5nTW9yZTogZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuICdMb2FkaW5nIG1vcmUgcmVzdWx0c+KApic7CisgICAgfSwKKyAgICBtYXhpbXVtU2VsZWN0ZWQ6IGZ1bmN0aW9uIChhcmdzKSB7CisgICAgICB2YXIgbWVzc2FnZSA9ICdZb3UgY2FuIG9ubHkgc2VsZWN0ICcgKyBhcmdzLm1heGltdW0gKyAnIGl0ZW0nOworCisgICAgICBpZiAoYXJncy5tYXhpbXVtICE9IDEpIHsKKyAgICAgICAgbWVzc2FnZSArPSAncyc7CisgICAgICB9CisKKyAgICAgIHJldHVybiBtZXNzYWdlOworICAgIH0sCisgICAgbm9SZXN1bHRzOiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gJ05vIHJlc3VsdHMgZm91bmQnOworICAgIH0sCisgICAgc2VhcmNoaW5nOiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gJ1NlYXJjaGluZ+KApic7CisgICAgfQorICB9OworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9kZWZhdWx0cycsWworICAnanF1ZXJ5JywKKyAgJ3JlcXVpcmUnLAorCisgICcuL3Jlc3VsdHMnLAorCisgICcuL3NlbGVjdGlvbi9zaW5nbGUnLAorICAnLi9zZWxlY3Rpb24vbXVsdGlwbGUnLAorICAnLi9zZWxlY3Rpb24vcGxhY2Vob2xkZXInLAorICAnLi9zZWxlY3Rpb24vYWxsb3dDbGVhcicsCisgICcuL3NlbGVjdGlvbi9zZWFyY2gnLAorICAnLi9zZWxlY3Rpb24vZXZlbnRSZWxheScsCisKKyAgJy4vdXRpbHMnLAorICAnLi90cmFuc2xhdGlvbicsCisgICcuL2RpYWNyaXRpY3MnLAorCisgICcuL2RhdGEvc2VsZWN0JywKKyAgJy4vZGF0YS9hcnJheScsCisgICcuL2RhdGEvYWpheCcsCisgICcuL2RhdGEvdGFncycsCisgICcuL2RhdGEvdG9rZW5pemVyJywKKyAgJy4vZGF0YS9taW5pbXVtSW5wdXRMZW5ndGgnLAorICAnLi9kYXRhL21heGltdW1JbnB1dExlbmd0aCcsCisgICcuL2RhdGEvbWF4aW11bVNlbGVjdGlvbkxlbmd0aCcsCisKKyAgJy4vZHJvcGRvd24nLAorICAnLi9kcm9wZG93bi9zZWFyY2gnLAorICAnLi9kcm9wZG93bi9oaWRlUGxhY2Vob2xkZXInLAorICAnLi9kcm9wZG93bi9pbmZpbml0ZVNjcm9sbCcsCisgICcuL2Ryb3Bkb3duL2F0dGFjaEJvZHknLAorICAnLi9kcm9wZG93bi9taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCcsCisgICcuL2Ryb3Bkb3duL3NlbGVjdE9uQ2xvc2UnLAorICAnLi9kcm9wZG93bi9jbG9zZU9uU2VsZWN0JywKKworICAnLi9pMThuL2VuJworXSwgZnVuY3Rpb24gKCQsIHJlcXVpcmUsCisKKyAgICAgICAgICAgICBSZXN1bHRzTGlzdCwKKworICAgICAgICAgICAgIFNpbmdsZVNlbGVjdGlvbiwgTXVsdGlwbGVTZWxlY3Rpb24sIFBsYWNlaG9sZGVyLCBBbGxvd0NsZWFyLAorICAgICAgICAgICAgIFNlbGVjdGlvblNlYXJjaCwgRXZlbnRSZWxheSwKKworICAgICAgICAgICAgIFV0aWxzLCBUcmFuc2xhdGlvbiwgRElBQ1JJVElDUywKKworICAgICAgICAgICAgIFNlbGVjdERhdGEsIEFycmF5RGF0YSwgQWpheERhdGEsIFRhZ3MsIFRva2VuaXplciwKKyAgICAgICAgICAgICBNaW5pbXVtSW5wdXRMZW5ndGgsIE1heGltdW1JbnB1dExlbmd0aCwgTWF4aW11bVNlbGVjdGlvbkxlbmd0aCwKKworICAgICAgICAgICAgIERyb3Bkb3duLCBEcm9wZG93blNlYXJjaCwgSGlkZVBsYWNlaG9sZGVyLCBJbmZpbml0ZVNjcm9sbCwKKyAgICAgICAgICAgICBBdHRhY2hCb2R5LCBNaW5pbXVtUmVzdWx0c0ZvclNlYXJjaCwgU2VsZWN0T25DbG9zZSwgQ2xvc2VPblNlbGVjdCwKKworICAgICAgICAgICAgIEVuZ2xpc2hUcmFuc2xhdGlvbikgeworICBmdW5jdGlvbiBEZWZhdWx0cyAoKSB7CisgICAgdGhpcy5yZXNldCgpOworICB9CisKKyAgRGVmYXVsdHMucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICBvcHRpb25zID0gJC5leHRlbmQodHJ1ZSwge30sIHRoaXMuZGVmYXVsdHMsIG9wdGlvbnMpOworCisgICAgaWYgKG9wdGlvbnMuZGF0YUFkYXB0ZXIgPT0gbnVsbCkgeworICAgICAgaWYgKG9wdGlvbnMuYWpheCAhPSBudWxsKSB7CisgICAgICAgIG9wdGlvbnMuZGF0YUFkYXB0ZXIgPSBBamF4RGF0YTsKKyAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5kYXRhICE9IG51bGwpIHsKKyAgICAgICAgb3B0aW9ucy5kYXRhQWRhcHRlciA9IEFycmF5RGF0YTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG9wdGlvbnMuZGF0YUFkYXB0ZXIgPSBTZWxlY3REYXRhOworICAgICAgfQorCisgICAgICBpZiAob3B0aW9ucy5taW5pbXVtSW5wdXRMZW5ndGggPiAwKSB7CisgICAgICAgIG9wdGlvbnMuZGF0YUFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZSgKKyAgICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyLAorICAgICAgICAgIE1pbmltdW1JbnB1dExlbmd0aAorICAgICAgICApOworICAgICAgfQorCisgICAgICBpZiAob3B0aW9ucy5tYXhpbXVtSW5wdXRMZW5ndGggPiAwKSB7CisgICAgICAgIG9wdGlvbnMuZGF0YUFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZSgKKyAgICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyLAorICAgICAgICAgIE1heGltdW1JbnB1dExlbmd0aAorICAgICAgICApOworICAgICAgfQorCisgICAgICBpZiAob3B0aW9ucy5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoID4gMCkgeworICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoCisgICAgICAgICAgb3B0aW9ucy5kYXRhQWRhcHRlciwKKyAgICAgICAgICBNYXhpbXVtU2VsZWN0aW9uTGVuZ3RoCisgICAgICAgICk7CisgICAgICB9CisKKyAgICAgIGlmIChvcHRpb25zLnRhZ3MpIHsKKyAgICAgICAgb3B0aW9ucy5kYXRhQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKG9wdGlvbnMuZGF0YUFkYXB0ZXIsIFRhZ3MpOworICAgICAgfQorCisgICAgICBpZiAob3B0aW9ucy50b2tlblNlcGFyYXRvcnMgIT0gbnVsbCB8fCBvcHRpb25zLnRva2VuaXplciAhPSBudWxsKSB7CisgICAgICAgIG9wdGlvbnMuZGF0YUFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZSgKKyAgICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyLAorICAgICAgICAgIFRva2VuaXplcgorICAgICAgICApOworICAgICAgfQorCisgICAgICBpZiAob3B0aW9ucy5xdWVyeSAhPSBudWxsKSB7CisgICAgICAgIHZhciBRdWVyeSA9IHJlcXVpcmUob3B0aW9ucy5hbWRCYXNlICsgJ2NvbXBhdC9xdWVyeScpOworCisgICAgICAgIG9wdGlvbnMuZGF0YUFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZSgKKyAgICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyLAorICAgICAgICAgIFF1ZXJ5CisgICAgICAgICk7CisgICAgICB9CisKKyAgICAgIGlmIChvcHRpb25zLmluaXRTZWxlY3Rpb24gIT0gbnVsbCkgeworICAgICAgICB2YXIgSW5pdFNlbGVjdGlvbiA9IHJlcXVpcmUob3B0aW9ucy5hbWRCYXNlICsgJ2NvbXBhdC9pbml0U2VsZWN0aW9uJyk7CisKKyAgICAgICAgb3B0aW9ucy5kYXRhQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKAorICAgICAgICAgIG9wdGlvbnMuZGF0YUFkYXB0ZXIsCisgICAgICAgICAgSW5pdFNlbGVjdGlvbgorICAgICAgICApOworICAgICAgfQorICAgIH0KKworICAgIGlmIChvcHRpb25zLnJlc3VsdHNBZGFwdGVyID09IG51bGwpIHsKKyAgICAgIG9wdGlvbnMucmVzdWx0c0FkYXB0ZXIgPSBSZXN1bHRzTGlzdDsKKworICAgICAgaWYgKG9wdGlvbnMuYWpheCAhPSBudWxsKSB7CisgICAgICAgIG9wdGlvbnMucmVzdWx0c0FkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZSgKKyAgICAgICAgICBvcHRpb25zLnJlc3VsdHNBZGFwdGVyLAorICAgICAgICAgIEluZmluaXRlU2Nyb2xsCisgICAgICAgICk7CisgICAgICB9CisKKyAgICAgIGlmIChvcHRpb25zLnBsYWNlaG9sZGVyICE9IG51bGwpIHsKKyAgICAgICAgb3B0aW9ucy5yZXN1bHRzQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKAorICAgICAgICAgIG9wdGlvbnMucmVzdWx0c0FkYXB0ZXIsCisgICAgICAgICAgSGlkZVBsYWNlaG9sZGVyCisgICAgICAgICk7CisgICAgICB9CisKKyAgICAgIGlmIChvcHRpb25zLnNlbGVjdE9uQ2xvc2UpIHsKKyAgICAgICAgb3B0aW9ucy5yZXN1bHRzQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKAorICAgICAgICAgIG9wdGlvbnMucmVzdWx0c0FkYXB0ZXIsCisgICAgICAgICAgU2VsZWN0T25DbG9zZQorICAgICAgICApOworICAgICAgfQorICAgIH0KKworICAgIGlmIChvcHRpb25zLmRyb3Bkb3duQWRhcHRlciA9PSBudWxsKSB7CisgICAgICBpZiAob3B0aW9ucy5tdWx0aXBsZSkgeworICAgICAgICBvcHRpb25zLmRyb3Bkb3duQWRhcHRlciA9IERyb3Bkb3duOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIFNlYXJjaGFibGVEcm9wZG93biA9IFV0aWxzLkRlY29yYXRlKERyb3Bkb3duLCBEcm9wZG93blNlYXJjaCk7CisKKyAgICAgICAgb3B0aW9ucy5kcm9wZG93bkFkYXB0ZXIgPSBTZWFyY2hhYmxlRHJvcGRvd247CisgICAgICB9CisKKyAgICAgIGlmIChvcHRpb25zLm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoICE9PSAwKSB7CisgICAgICAgIG9wdGlvbnMuZHJvcGRvd25BZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoCisgICAgICAgICAgb3B0aW9ucy5kcm9wZG93bkFkYXB0ZXIsCisgICAgICAgICAgTWluaW11bVJlc3VsdHNGb3JTZWFyY2gKKyAgICAgICAgKTsKKyAgICAgIH0KKworICAgICAgaWYgKG9wdGlvbnMuY2xvc2VPblNlbGVjdCkgeworICAgICAgICBvcHRpb25zLmRyb3Bkb3duQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKAorICAgICAgICAgIG9wdGlvbnMuZHJvcGRvd25BZGFwdGVyLAorICAgICAgICAgIENsb3NlT25TZWxlY3QKKyAgICAgICAgKTsKKyAgICAgIH0KKworICAgICAgaWYgKAorICAgICAgICBvcHRpb25zLmRyb3Bkb3duQ3NzQ2xhc3MgIT0gbnVsbCB8fAorICAgICAgICBvcHRpb25zLmRyb3Bkb3duQ3NzICE9IG51bGwgfHwKKyAgICAgICAgb3B0aW9ucy5hZGFwdERyb3Bkb3duQ3NzQ2xhc3MgIT0gbnVsbAorICAgICAgKSB7CisgICAgICAgIHZhciBEcm9wZG93bkNTUyA9IHJlcXVpcmUob3B0aW9ucy5hbWRCYXNlICsgJ2NvbXBhdC9kcm9wZG93bkNzcycpOworCisgICAgICAgIG9wdGlvbnMuZHJvcGRvd25BZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoCisgICAgICAgICAgb3B0aW9ucy5kcm9wZG93bkFkYXB0ZXIsCisgICAgICAgICAgRHJvcGRvd25DU1MKKyAgICAgICAgKTsKKyAgICAgIH0KKworICAgICAgb3B0aW9ucy5kcm9wZG93bkFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZSgKKyAgICAgICAgb3B0aW9ucy5kcm9wZG93bkFkYXB0ZXIsCisgICAgICAgIEF0dGFjaEJvZHkKKyAgICAgICk7CisgICAgfQorCisgICAgaWYgKG9wdGlvbnMuc2VsZWN0aW9uQWRhcHRlciA9PSBudWxsKSB7CisgICAgICBpZiAob3B0aW9ucy5tdWx0aXBsZSkgeworICAgICAgICBvcHRpb25zLnNlbGVjdGlvbkFkYXB0ZXIgPSBNdWx0aXBsZVNlbGVjdGlvbjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG9wdGlvbnMuc2VsZWN0aW9uQWRhcHRlciA9IFNpbmdsZVNlbGVjdGlvbjsKKyAgICAgIH0KKworICAgICAgLy8gQWRkIHRoZSBwbGFjZWhvbGRlciBtaXhpbiBpZiBhIHBsYWNlaG9sZGVyIHdhcyBzcGVjaWZpZWQKKyAgICAgIGlmIChvcHRpb25zLnBsYWNlaG9sZGVyICE9IG51bGwpIHsKKyAgICAgICAgb3B0aW9ucy5zZWxlY3Rpb25BZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoCisgICAgICAgICAgb3B0aW9ucy5zZWxlY3Rpb25BZGFwdGVyLAorICAgICAgICAgIFBsYWNlaG9sZGVyCisgICAgICAgICk7CisgICAgICB9CisKKyAgICAgIGlmIChvcHRpb25zLmFsbG93Q2xlYXIpIHsKKyAgICAgICAgb3B0aW9ucy5zZWxlY3Rpb25BZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoCisgICAgICAgICAgb3B0aW9ucy5zZWxlY3Rpb25BZGFwdGVyLAorICAgICAgICAgIEFsbG93Q2xlYXIKKyAgICAgICAgKTsKKyAgICAgIH0KKworICAgICAgaWYgKG9wdGlvbnMubXVsdGlwbGUpIHsKKyAgICAgICAgb3B0aW9ucy5zZWxlY3Rpb25BZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoCisgICAgICAgICAgb3B0aW9ucy5zZWxlY3Rpb25BZGFwdGVyLAorICAgICAgICAgIFNlbGVjdGlvblNlYXJjaAorICAgICAgICApOworICAgICAgfQorCisgICAgICBpZiAoCisgICAgICAgIG9wdGlvbnMuY29udGFpbmVyQ3NzQ2xhc3MgIT0gbnVsbCB8fAorICAgICAgICBvcHRpb25zLmNvbnRhaW5lckNzcyAhPSBudWxsIHx8CisgICAgICAgIG9wdGlvbnMuYWRhcHRDb250YWluZXJDc3NDbGFzcyAhPSBudWxsCisgICAgICApIHsKKyAgICAgICAgdmFyIENvbnRhaW5lckNTUyA9IHJlcXVpcmUob3B0aW9ucy5hbWRCYXNlICsgJ2NvbXBhdC9jb250YWluZXJDc3MnKTsKKworICAgICAgICBvcHRpb25zLnNlbGVjdGlvbkFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZSgKKyAgICAgICAgICBvcHRpb25zLnNlbGVjdGlvbkFkYXB0ZXIsCisgICAgICAgICAgQ29udGFpbmVyQ1NTCisgICAgICAgICk7CisgICAgICB9CisKKyAgICAgIG9wdGlvbnMuc2VsZWN0aW9uQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKAorICAgICAgICBvcHRpb25zLnNlbGVjdGlvbkFkYXB0ZXIsCisgICAgICAgIEV2ZW50UmVsYXkKKyAgICAgICk7CisgICAgfQorCisgICAgaWYgKHR5cGVvZiBvcHRpb25zLmxhbmd1YWdlID09PSAnc3RyaW5nJykgeworICAgICAgLy8gQ2hlY2sgaWYgdGhlIGxhbmd1YWdlIGlzIHNwZWNpZmllZCB3aXRoIGEgcmVnaW9uCisgICAgICBpZiAob3B0aW9ucy5sYW5ndWFnZS5pbmRleE9mKCctJykgPiAwKSB7CisgICAgICAgIC8vIEV4dHJhY3QgdGhlIHJlZ2lvbiBpbmZvcm1hdGlvbiBpZiBpdCBpcyBpbmNsdWRlZAorICAgICAgICB2YXIgbGFuZ3VhZ2VQYXJ0cyA9IG9wdGlvbnMubGFuZ3VhZ2Uuc3BsaXQoJy0nKTsKKyAgICAgICAgdmFyIGJhc2VMYW5ndWFnZSA9IGxhbmd1YWdlUGFydHNbMF07CisKKyAgICAgICAgb3B0aW9ucy5sYW5ndWFnZSA9IFtvcHRpb25zLmxhbmd1YWdlLCBiYXNlTGFuZ3VhZ2VdOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgb3B0aW9ucy5sYW5ndWFnZSA9IFtvcHRpb25zLmxhbmd1YWdlXTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoJC5pc0FycmF5KG9wdGlvbnMubGFuZ3VhZ2UpKSB7CisgICAgICB2YXIgbGFuZ3VhZ2VzID0gbmV3IFRyYW5zbGF0aW9uKCk7CisgICAgICBvcHRpb25zLmxhbmd1YWdlLnB1c2goJ2VuJyk7CisKKyAgICAgIHZhciBsYW5ndWFnZU5hbWVzID0gb3B0aW9ucy5sYW5ndWFnZTsKKworICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBsYW5ndWFnZU5hbWVzLmxlbmd0aDsgbCsrKSB7CisgICAgICAgIHZhciBuYW1lID0gbGFuZ3VhZ2VOYW1lc1tsXTsKKyAgICAgICAgdmFyIGxhbmd1YWdlID0ge307CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAvLyBUcnkgdG8gbG9hZCBpdCB3aXRoIHRoZSBvcmlnaW5hbCBuYW1lCisgICAgICAgICAgbGFuZ3VhZ2UgPSBUcmFuc2xhdGlvbi5sb2FkUGF0aChuYW1lKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBjb3VsZG4ndCBsb2FkIGl0LCBjaGVjayBpZiBpdCB3YXNuJ3QgdGhlIGZ1bGwgcGF0aAorICAgICAgICAgICAgbmFtZSA9IHRoaXMuZGVmYXVsdHMuYW1kTGFuZ3VhZ2VCYXNlICsgbmFtZTsKKyAgICAgICAgICAgIGxhbmd1YWdlID0gVHJhbnNsYXRpb24ubG9hZFBhdGgobmFtZSk7CisgICAgICAgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgICAgIC8vIFRoZSB0cmFuc2xhdGlvbiBjb3VsZCBub3QgYmUgbG9hZGVkIGF0IGFsbC4gU29tZXRpbWVzIHRoaXMgaXMKKyAgICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgYSBjb25maWd1cmF0aW9uIHByb2JsZW0sIG90aGVyIHRpbWVzIHRoaXMgY2FuIGJlCisgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIGhvdyBTZWxlY3QyIGhlbHBzIGxvYWQgYWxsIHBvc3NpYmxlIHRyYW5zbGF0aW9uIGZpbGVzLgorICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVidWcgJiYgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS53YXJuKSB7CisgICAgICAgICAgICAgIGNvbnNvbGUud2FybigKKyAgICAgICAgICAgICAgICAnU2VsZWN0MjogVGhlIGxhbmd1YWdlIGZpbGUgZm9yICInICsgbmFtZSArICciIGNvdWxkIG5vdCBiZSAnICsKKyAgICAgICAgICAgICAgICAnYXV0b21hdGljYWxseSBsb2FkZWQuIEEgZmFsbGJhY2sgd2lsbCBiZSB1c2VkIGluc3RlYWQuJworICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBsYW5ndWFnZXMuZXh0ZW5kKGxhbmd1YWdlKTsKKyAgICAgIH0KKworICAgICAgb3B0aW9ucy50cmFuc2xhdGlvbnMgPSBsYW5ndWFnZXM7CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciBiYXNlVHJhbnNsYXRpb24gPSBUcmFuc2xhdGlvbi5sb2FkUGF0aCgKKyAgICAgICAgdGhpcy5kZWZhdWx0cy5hbWRMYW5ndWFnZUJhc2UgKyAnZW4nCisgICAgICApOworICAgICAgdmFyIGN1c3RvbVRyYW5zbGF0aW9uID0gbmV3IFRyYW5zbGF0aW9uKG9wdGlvbnMubGFuZ3VhZ2UpOworCisgICAgICBjdXN0b21UcmFuc2xhdGlvbi5leHRlbmQoYmFzZVRyYW5zbGF0aW9uKTsKKworICAgICAgb3B0aW9ucy50cmFuc2xhdGlvbnMgPSBjdXN0b21UcmFuc2xhdGlvbjsKKyAgICB9CisKKyAgICByZXR1cm4gb3B0aW9uczsKKyAgfTsKKworICBEZWZhdWx0cy5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gc3RyaXBEaWFjcml0aWNzICh0ZXh0KSB7CisgICAgICAvLyBVc2VkICd1bmkgcmFuZ2UgKyBuYW1lZCBmdW5jdGlvbicgZnJvbSBodHRwOi8vanNwZXJmLmNvbS9kaWFjcml0aWNzLzE4CisgICAgICBmdW5jdGlvbiBtYXRjaChhKSB7CisgICAgICAgIHJldHVybiBESUFDUklUSUNTW2FdIHx8IGE7CisgICAgICB9CisKKyAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL1teXHUwMDAwLVx1MDA3RV0vZywgbWF0Y2gpOworICAgIH0KKworICAgIGZ1bmN0aW9uIG1hdGNoZXIgKHBhcmFtcywgZGF0YSkgeworICAgICAgLy8gQWx3YXlzIHJldHVybiB0aGUgb2JqZWN0IGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gY29tcGFyZQorICAgICAgaWYgKCQudHJpbShwYXJhbXMudGVybSkgPT09ICcnKSB7CisgICAgICAgIHJldHVybiBkYXRhOworICAgICAgfQorCisgICAgICAvLyBEbyBhIHJlY3Vyc2l2ZSBjaGVjayBmb3Igb3B0aW9ucyB3aXRoIGNoaWxkcmVuCisgICAgICBpZiAoZGF0YS5jaGlsZHJlbiAmJiBkYXRhLmNoaWxkcmVuLmxlbmd0aCA+IDApIHsKKyAgICAgICAgLy8gQ2xvbmUgdGhlIGRhdGEgb2JqZWN0IGlmIHRoZXJlIGFyZSBjaGlsZHJlbgorICAgICAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIGFzIHdlIG1vZGlmeSB0aGUgb2JqZWN0IHRvIHJlbW92ZSBhbnkgbm9uLW1hdGNoZXMKKyAgICAgICAgdmFyIG1hdGNoID0gJC5leHRlbmQodHJ1ZSwge30sIGRhdGEpOworCisgICAgICAgIC8vIENoZWNrIGVhY2ggY2hpbGQgb2YgdGhlIG9wdGlvbgorICAgICAgICBmb3IgKHZhciBjID0gZGF0YS5jaGlsZHJlbi5sZW5ndGggLSAxOyBjID49IDA7IGMtLSkgeworICAgICAgICAgIHZhciBjaGlsZCA9IGRhdGEuY2hpbGRyZW5bY107CisKKyAgICAgICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoZXIocGFyYW1zLCBjaGlsZCk7CisKKyAgICAgICAgICAvLyBJZiB0aGVyZSB3YXNuJ3QgYSBtYXRjaCwgcmVtb3ZlIHRoZSBvYmplY3QgaW4gdGhlIGFycmF5CisgICAgICAgICAgaWYgKG1hdGNoZXMgPT0gbnVsbCkgeworICAgICAgICAgICAgbWF0Y2guY2hpbGRyZW4uc3BsaWNlKGMsIDEpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIGFueSBjaGlsZHJlbiBtYXRjaGVkLCByZXR1cm4gdGhlIG5ldyBvYmplY3QKKyAgICAgICAgaWYgKG1hdGNoLmNoaWxkcmVuLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGVyZSB3ZXJlIG5vIG1hdGNoaW5nIGNoaWxkcmVuLCBjaGVjayBqdXN0IHRoZSBwbGFpbiBvYmplY3QKKyAgICAgICAgcmV0dXJuIG1hdGNoZXIocGFyYW1zLCBtYXRjaCk7CisgICAgICB9CisKKyAgICAgIHZhciBvcmlnaW5hbCA9IHN0cmlwRGlhY3JpdGljcyhkYXRhLnRleHQpLnRvVXBwZXJDYXNlKCk7CisgICAgICB2YXIgdGVybSA9IHN0cmlwRGlhY3JpdGljcyhwYXJhbXMudGVybSkudG9VcHBlckNhc2UoKTsKKworICAgICAgLy8gQ2hlY2sgaWYgdGhlIHRleHQgY29udGFpbnMgdGhlIHRlcm0KKyAgICAgIGlmIChvcmlnaW5hbC5pbmRleE9mKHRlcm0pID4gLTEpIHsKKyAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICB9CisKKyAgICAgIC8vIElmIGl0IGRvZXNuJ3QgY29udGFpbiB0aGUgdGVybSwgZG9uJ3QgcmV0dXJuIGFueXRoaW5nCisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICB0aGlzLmRlZmF1bHRzID0geworICAgICAgYW1kQmFzZTogJy4vJywKKyAgICAgIGFtZExhbmd1YWdlQmFzZTogJy4vaTE4bi8nLAorICAgICAgY2xvc2VPblNlbGVjdDogdHJ1ZSwKKyAgICAgIGRlYnVnOiBmYWxzZSwKKyAgICAgIGRyb3Bkb3duQXV0b1dpZHRoOiBmYWxzZSwKKyAgICAgIGVzY2FwZU1hcmt1cDogVXRpbHMuZXNjYXBlTWFya3VwLAorICAgICAgbGFuZ3VhZ2U6IEVuZ2xpc2hUcmFuc2xhdGlvbiwKKyAgICAgIG1hdGNoZXI6IG1hdGNoZXIsCisgICAgICBtaW5pbXVtSW5wdXRMZW5ndGg6IDAsCisgICAgICBtYXhpbXVtSW5wdXRMZW5ndGg6IDAsCisgICAgICBtYXhpbXVtU2VsZWN0aW9uTGVuZ3RoOiAwLAorICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IDAsCisgICAgICBzZWxlY3RPbkNsb3NlOiBmYWxzZSwKKyAgICAgIHNvcnRlcjogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICB9LAorICAgICAgdGVtcGxhdGVSZXN1bHQ6IGZ1bmN0aW9uIChyZXN1bHQpIHsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC50ZXh0OworICAgICAgfSwKKyAgICAgIHRlbXBsYXRlU2VsZWN0aW9uOiBmdW5jdGlvbiAoc2VsZWN0aW9uKSB7CisgICAgICAgIHJldHVybiBzZWxlY3Rpb24udGV4dDsKKyAgICAgIH0sCisgICAgICB0aGVtZTogJ2RlZmF1bHQnLAorICAgICAgd2lkdGg6ICdyZXNvbHZlJworICAgIH07CisgIH07CisKKyAgRGVmYXVsdHMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7CisgICAgdmFyIGNhbWVsS2V5ID0gJC5jYW1lbENhc2Uoa2V5KTsKKworICAgIHZhciBkYXRhID0ge307CisgICAgZGF0YVtjYW1lbEtleV0gPSB2YWx1ZTsKKworICAgIHZhciBjb252ZXJ0ZWREYXRhID0gVXRpbHMuX2NvbnZlcnREYXRhKGRhdGEpOworCisgICAgJC5leHRlbmQodHJ1ZSwgdGhpcy5kZWZhdWx0cywgY29udmVydGVkRGF0YSk7CisgIH07CisKKyAgdmFyIGRlZmF1bHRzID0gbmV3IERlZmF1bHRzKCk7CisKKyAgcmV0dXJuIGRlZmF1bHRzOworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9vcHRpb25zJyxbCisgICdyZXF1aXJlJywKKyAgJ2pxdWVyeScsCisgICcuL2RlZmF1bHRzJywKKyAgJy4vdXRpbHMnCitdLCBmdW5jdGlvbiAocmVxdWlyZSwgJCwgRGVmYXVsdHMsIFV0aWxzKSB7CisgIGZ1bmN0aW9uIE9wdGlvbnMgKG9wdGlvbnMsICRlbGVtZW50KSB7CisgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKKworICAgIGlmICgkZWxlbWVudCAhPSBudWxsKSB7CisgICAgICB0aGlzLmZyb21FbGVtZW50KCRlbGVtZW50KTsKKyAgICB9CisKKyAgICB0aGlzLm9wdGlvbnMgPSBEZWZhdWx0cy5hcHBseSh0aGlzLm9wdGlvbnMpOworCisgICAgaWYgKCRlbGVtZW50ICYmICRlbGVtZW50LmlzKCdpbnB1dCcpKSB7CisgICAgICB2YXIgSW5wdXRDb21wYXQgPSByZXF1aXJlKHRoaXMuZ2V0KCdhbWRCYXNlJykgKyAnY29tcGF0L2lucHV0RGF0YScpOworCisgICAgICB0aGlzLm9wdGlvbnMuZGF0YUFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZSgKKyAgICAgICAgdGhpcy5vcHRpb25zLmRhdGFBZGFwdGVyLAorICAgICAgICBJbnB1dENvbXBhdAorICAgICAgKTsKKyAgICB9CisgIH0KKworICBPcHRpb25zLnByb3RvdHlwZS5mcm9tRWxlbWVudCA9IGZ1bmN0aW9uICgkZSkgeworICAgIHZhciBleGNsdWRlZERhdGEgPSBbJ3NlbGVjdDInXTsKKworICAgIGlmICh0aGlzLm9wdGlvbnMubXVsdGlwbGUgPT0gbnVsbCkgeworICAgICAgdGhpcy5vcHRpb25zLm11bHRpcGxlID0gJGUucHJvcCgnbXVsdGlwbGUnKTsKKyAgICB9CisKKyAgICBpZiAodGhpcy5vcHRpb25zLmRpc2FibGVkID09IG51bGwpIHsKKyAgICAgIHRoaXMub3B0aW9ucy5kaXNhYmxlZCA9ICRlLnByb3AoJ2Rpc2FibGVkJyk7CisgICAgfQorCisgICAgaWYgKHRoaXMub3B0aW9ucy5sYW5ndWFnZSA9PSBudWxsKSB7CisgICAgICBpZiAoJGUucHJvcCgnbGFuZycpKSB7CisgICAgICAgIHRoaXMub3B0aW9ucy5sYW5ndWFnZSA9ICRlLnByb3AoJ2xhbmcnKS50b0xvd2VyQ2FzZSgpOworICAgICAgfSBlbHNlIGlmICgkZS5jbG9zZXN0KCdbbGFuZ10nKS5wcm9wKCdsYW5nJykpIHsKKyAgICAgICAgdGhpcy5vcHRpb25zLmxhbmd1YWdlID0gJGUuY2xvc2VzdCgnW2xhbmddJykucHJvcCgnbGFuZycpOworICAgICAgfQorICAgIH0KKworICAgIGlmICh0aGlzLm9wdGlvbnMuZGlyID09IG51bGwpIHsKKyAgICAgIGlmICgkZS5wcm9wKCdkaXInKSkgeworICAgICAgICB0aGlzLm9wdGlvbnMuZGlyID0gJGUucHJvcCgnZGlyJyk7CisgICAgICB9IGVsc2UgaWYgKCRlLmNsb3Nlc3QoJ1tkaXJdJykucHJvcCgnZGlyJykpIHsKKyAgICAgICAgdGhpcy5vcHRpb25zLmRpciA9ICRlLmNsb3Nlc3QoJ1tkaXJdJykucHJvcCgnZGlyJyk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLm9wdGlvbnMuZGlyID0gJ2x0cic7CisgICAgICB9CisgICAgfQorCisgICAgJGUucHJvcCgnZGlzYWJsZWQnLCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQpOworICAgICRlLnByb3AoJ211bHRpcGxlJywgdGhpcy5vcHRpb25zLm11bHRpcGxlKTsKKworICAgIGlmIChVdGlscy5HZXREYXRhKCRlWzBdLCAnc2VsZWN0MlRhZ3MnKSkgeworICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1ZyAmJiB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLndhcm4pIHsKKyAgICAgICAgY29uc29sZS53YXJuKAorICAgICAgICAgICdTZWxlY3QyOiBUaGUgYGRhdGEtc2VsZWN0Mi10YWdzYCBhdHRyaWJ1dGUgaGFzIGJlZW4gY2hhbmdlZCB0byAnICsKKyAgICAgICAgICAndXNlIHRoZSBgZGF0YS1kYXRhYCBhbmQgYGRhdGEtdGFncz0idHJ1ZSJgIGF0dHJpYnV0ZXMgYW5kIHdpbGwgYmUgJyArCisgICAgICAgICAgJ3JlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIFNlbGVjdDIuJworICAgICAgICApOworICAgICAgfQorCisgICAgICBVdGlscy5TdG9yZURhdGEoJGVbMF0sICdkYXRhJywgVXRpbHMuR2V0RGF0YSgkZVswXSwgJ3NlbGVjdDJUYWdzJykpOworICAgICAgVXRpbHMuU3RvcmVEYXRhKCRlWzBdLCAndGFncycsIHRydWUpOworICAgIH0KKworICAgIGlmIChVdGlscy5HZXREYXRhKCRlWzBdLCAnYWpheFVybCcpKSB7CisgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnICYmIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUud2FybikgeworICAgICAgICBjb25zb2xlLndhcm4oCisgICAgICAgICAgJ1NlbGVjdDI6IFRoZSBgZGF0YS1hamF4LXVybGAgYXR0cmlidXRlIGhhcyBiZWVuIGNoYW5nZWQgdG8gJyArCisgICAgICAgICAgJ2BkYXRhLWFqYXgtLXVybGAgYW5kIHN1cHBvcnQgZm9yIHRoZSBvbGQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCcgKworICAgICAgICAgICcgaW4gZnV0dXJlIHZlcnNpb25zIG9mIFNlbGVjdDIuJworICAgICAgICApOworICAgICAgfQorCisgICAgICAkZS5hdHRyKCdhamF4LS11cmwnLCBVdGlscy5HZXREYXRhKCRlWzBdLCAnYWpheFVybCcpKTsKKyAgICAgIFV0aWxzLlN0b3JlRGF0YSgkZVswXSwgJ2FqYXgtVXJsJywgVXRpbHMuR2V0RGF0YSgkZVswXSwgJ2FqYXhVcmwnKSk7CisJICAKKyAgICB9CisKKyAgICB2YXIgZGF0YXNldCA9IHt9OworCisgICAgLy8gUHJlZmVyIHRoZSBlbGVtZW50J3MgYGRhdGFzZXRgIGF0dHJpYnV0ZSBpZiBpdCBleGlzdHMKKyAgICAvLyBqUXVlcnkgMS54IGRvZXMgbm90IGNvcnJlY3RseSBoYW5kbGUgZGF0YSBhdHRyaWJ1dGVzIHdpdGggbXVsdGlwbGUgZGFzaGVzCisgICAgaWYgKCQuZm4uanF1ZXJ5ICYmICQuZm4uanF1ZXJ5LnN1YnN0cigwLCAyKSA9PSAnMS4nICYmICRlWzBdLmRhdGFzZXQpIHsKKyAgICAgIGRhdGFzZXQgPSAkLmV4dGVuZCh0cnVlLCB7fSwgJGVbMF0uZGF0YXNldCwgVXRpbHMuR2V0RGF0YSgkZVswXSkpOworICAgIH0gZWxzZSB7CisgICAgICBkYXRhc2V0ID0gVXRpbHMuR2V0RGF0YSgkZVswXSk7CisgICAgfQorCisgICAgdmFyIGRhdGEgPSAkLmV4dGVuZCh0cnVlLCB7fSwgZGF0YXNldCk7CisKKyAgICBkYXRhID0gVXRpbHMuX2NvbnZlcnREYXRhKGRhdGEpOworCisgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHsKKyAgICAgIGlmICgkLmluQXJyYXkoa2V5LCBleGNsdWRlZERhdGEpID4gLTEpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGlmICgkLmlzUGxhaW5PYmplY3QodGhpcy5vcHRpb25zW2tleV0pKSB7CisgICAgICAgICQuZXh0ZW5kKHRoaXMub3B0aW9uc1trZXldLCBkYXRhW2tleV0pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy5vcHRpb25zW2tleV0gPSBkYXRhW2tleV07CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRoaXM7CisgIH07CisKKyAgT3B0aW9ucy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkgeworICAgIHJldHVybiB0aGlzLm9wdGlvbnNba2V5XTsKKyAgfTsKKworICBPcHRpb25zLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWwpIHsKKyAgICB0aGlzLm9wdGlvbnNba2V5XSA9IHZhbDsKKyAgfTsKKworICByZXR1cm4gT3B0aW9uczsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvY29yZScsWworICAnanF1ZXJ5JywKKyAgJy4vb3B0aW9ucycsCisgICcuL3V0aWxzJywKKyAgJy4va2V5cycKK10sIGZ1bmN0aW9uICgkLCBPcHRpb25zLCBVdGlscywgS0VZUykgeworICB2YXIgU2VsZWN0MiA9IGZ1bmN0aW9uICgkZWxlbWVudCwgb3B0aW9ucykgeworICAgIGlmIChVdGlscy5HZXREYXRhKCRlbGVtZW50WzBdLCAnc2VsZWN0MicpICE9IG51bGwpIHsKKyAgICAgIFV0aWxzLkdldERhdGEoJGVsZW1lbnRbMF0sICdzZWxlY3QyJykuZGVzdHJveSgpOworICAgIH0KKworICAgIHRoaXMuJGVsZW1lbnQgPSAkZWxlbWVudDsKKworICAgIHRoaXMuaWQgPSB0aGlzLl9nZW5lcmF0ZUlkKCRlbGVtZW50KTsKKworICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworCisgICAgdGhpcy5vcHRpb25zID0gbmV3IE9wdGlvbnMob3B0aW9ucywgJGVsZW1lbnQpOworCisgICAgU2VsZWN0Mi5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzKTsKKworICAgIC8vIFNldCB1cCB0aGUgdGFiaW5kZXgKKworICAgIHZhciB0YWJpbmRleCA9ICRlbGVtZW50LmF0dHIoJ3RhYmluZGV4JykgfHwgMDsKKyAgICBVdGlscy5TdG9yZURhdGEoJGVsZW1lbnRbMF0sICdvbGQtdGFiaW5kZXgnLCB0YWJpbmRleCk7CisgICAgJGVsZW1lbnQuYXR0cigndGFiaW5kZXgnLCAnLTEnKTsKKworICAgIC8vIFNldCB1cCBjb250YWluZXJzIGFuZCBhZGFwdGVycworCisgICAgdmFyIERhdGFBZGFwdGVyID0gdGhpcy5vcHRpb25zLmdldCgnZGF0YUFkYXB0ZXInKTsKKyAgICB0aGlzLmRhdGFBZGFwdGVyID0gbmV3IERhdGFBZGFwdGVyKCRlbGVtZW50LCB0aGlzLm9wdGlvbnMpOworCisgICAgdmFyICRjb250YWluZXIgPSB0aGlzLnJlbmRlcigpOworCisgICAgdGhpcy5fcGxhY2VDb250YWluZXIoJGNvbnRhaW5lcik7CisKKyAgICB2YXIgU2VsZWN0aW9uQWRhcHRlciA9IHRoaXMub3B0aW9ucy5nZXQoJ3NlbGVjdGlvbkFkYXB0ZXInKTsKKyAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25BZGFwdGVyKCRlbGVtZW50LCB0aGlzLm9wdGlvbnMpOworICAgIHRoaXMuJHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uLnJlbmRlcigpOworCisgICAgdGhpcy5zZWxlY3Rpb24ucG9zaXRpb24odGhpcy4kc2VsZWN0aW9uLCAkY29udGFpbmVyKTsKKworICAgIHZhciBEcm9wZG93bkFkYXB0ZXIgPSB0aGlzLm9wdGlvbnMuZ2V0KCdkcm9wZG93bkFkYXB0ZXInKTsKKyAgICB0aGlzLmRyb3Bkb3duID0gbmV3IERyb3Bkb3duQWRhcHRlcigkZWxlbWVudCwgdGhpcy5vcHRpb25zKTsKKyAgICB0aGlzLiRkcm9wZG93biA9IHRoaXMuZHJvcGRvd24ucmVuZGVyKCk7CisKKyAgICB0aGlzLmRyb3Bkb3duLnBvc2l0aW9uKHRoaXMuJGRyb3Bkb3duLCAkY29udGFpbmVyKTsKKworICAgIHZhciBSZXN1bHRzQWRhcHRlciA9IHRoaXMub3B0aW9ucy5nZXQoJ3Jlc3VsdHNBZGFwdGVyJyk7CisgICAgdGhpcy5yZXN1bHRzID0gbmV3IFJlc3VsdHNBZGFwdGVyKCRlbGVtZW50LCB0aGlzLm9wdGlvbnMsIHRoaXMuZGF0YUFkYXB0ZXIpOworICAgIHRoaXMuJHJlc3VsdHMgPSB0aGlzLnJlc3VsdHMucmVuZGVyKCk7CisKKyAgICB0aGlzLnJlc3VsdHMucG9zaXRpb24odGhpcy4kcmVzdWx0cywgdGhpcy4kZHJvcGRvd24pOworCisgICAgLy8gQmluZCBldmVudHMKKworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIC8vIEJpbmQgdGhlIGNvbnRhaW5lciB0byBhbGwgb2YgdGhlIGFkYXB0ZXJzCisgICAgdGhpcy5fYmluZEFkYXB0ZXJzKCk7CisKKyAgICAvLyBSZWdpc3RlciBhbnkgRE9NIGV2ZW50IGhhbmRsZXJzCisgICAgdGhpcy5fcmVnaXN0ZXJEb21FdmVudHMoKTsKKworICAgIC8vIFJlZ2lzdGVyIGFueSBpbnRlcm5hbCBldmVudCBoYW5kbGVycworICAgIHRoaXMuX3JlZ2lzdGVyRGF0YUV2ZW50cygpOworICAgIHRoaXMuX3JlZ2lzdGVyU2VsZWN0aW9uRXZlbnRzKCk7CisgICAgdGhpcy5fcmVnaXN0ZXJEcm9wZG93bkV2ZW50cygpOworICAgIHRoaXMuX3JlZ2lzdGVyUmVzdWx0c0V2ZW50cygpOworICAgIHRoaXMuX3JlZ2lzdGVyRXZlbnRzKCk7CisKKyAgICAvLyBTZXQgdGhlIGluaXRpYWwgc3RhdGUKKyAgICB0aGlzLmRhdGFBZGFwdGVyLmN1cnJlbnQoZnVuY3Rpb24gKGluaXRpYWxEYXRhKSB7CisgICAgICBzZWxmLnRyaWdnZXIoJ3NlbGVjdGlvbjp1cGRhdGUnLCB7CisgICAgICAgIGRhdGE6IGluaXRpYWxEYXRhCisgICAgICB9KTsKKyAgICB9KTsKKworICAgIC8vIEhpZGUgdGhlIG9yaWdpbmFsIHNlbGVjdAorICAgICRlbGVtZW50LmFkZENsYXNzKCdzZWxlY3QyLWhpZGRlbi1hY2Nlc3NpYmxlJyk7CisgICAgJGVsZW1lbnQuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpOworCisgICAgLy8gU3luY2hyb25pemUgYW55IG1vbml0b3JlZCBhdHRyaWJ1dGVzCisgICAgdGhpcy5fc3luY0F0dHJpYnV0ZXMoKTsKKworICAgIFV0aWxzLlN0b3JlRGF0YSgkZWxlbWVudFswXSwgJ3NlbGVjdDInLCB0aGlzKTsKKworICAgIC8vIEVuc3VyZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoICRlbGVtZW50LmRhdGEoJ3NlbGVjdDInKS4KKyAgICAkZWxlbWVudC5kYXRhKCdzZWxlY3QyJywgdGhpcyk7CisgIH07CisKKyAgVXRpbHMuRXh0ZW5kKFNlbGVjdDIsIFV0aWxzLk9ic2VydmFibGUpOworCisgIFNlbGVjdDIucHJvdG90eXBlLl9nZW5lcmF0ZUlkID0gZnVuY3Rpb24gKCRlbGVtZW50KSB7CisgICAgdmFyIGlkID0gJyc7CisKKyAgICBpZiAoJGVsZW1lbnQuYXR0cignaWQnKSAhPSBudWxsKSB7CisgICAgICBpZCA9ICRlbGVtZW50LmF0dHIoJ2lkJyk7CisgICAgfSBlbHNlIGlmICgkZWxlbWVudC5hdHRyKCduYW1lJykgIT0gbnVsbCkgeworICAgICAgaWQgPSAkZWxlbWVudC5hdHRyKCduYW1lJykgKyAnLScgKyBVdGlscy5nZW5lcmF0ZUNoYXJzKDIpOworICAgIH0gZWxzZSB7CisgICAgICBpZCA9IFV0aWxzLmdlbmVyYXRlQ2hhcnMoNCk7CisgICAgfQorCisgICAgaWQgPSBpZC5yZXBsYWNlKC8oOnxcLnxcW3xcXXwsKS9nLCAnJyk7CisgICAgaWQgPSAnc2VsZWN0Mi0nICsgaWQ7CisKKyAgICByZXR1cm4gaWQ7CisgIH07CisKKyAgU2VsZWN0Mi5wcm90b3R5cGUuX3BsYWNlQ29udGFpbmVyID0gZnVuY3Rpb24gKCRjb250YWluZXIpIHsKKyAgICAkY29udGFpbmVyLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpOworCisgICAgdmFyIHdpZHRoID0gdGhpcy5fcmVzb2x2ZVdpZHRoKHRoaXMuJGVsZW1lbnQsIHRoaXMub3B0aW9ucy5nZXQoJ3dpZHRoJykpOworCisgICAgaWYgKHdpZHRoICE9IG51bGwpIHsKKyAgICAgICRjb250YWluZXIuY3NzKCd3aWR0aCcsIHdpZHRoKTsKKyAgICB9CisgIH07CisKKyAgU2VsZWN0Mi5wcm90b3R5cGUuX3Jlc29sdmVXaWR0aCA9IGZ1bmN0aW9uICgkZWxlbWVudCwgbWV0aG9kKSB7CisgICAgdmFyIFdJRFRIID0gL153aWR0aDooKFstK10/KFswLTldKlwuKT9bMC05XSspKHB4fGVtfGV4fCV8aW58Y218bW18cHR8cGMpKS9pOworCisgICAgaWYgKG1ldGhvZCA9PSAncmVzb2x2ZScpIHsKKyAgICAgIHZhciBzdHlsZVdpZHRoID0gdGhpcy5fcmVzb2x2ZVdpZHRoKCRlbGVtZW50LCAnc3R5bGUnKTsKKworICAgICAgaWYgKHN0eWxlV2lkdGggIT0gbnVsbCkgeworICAgICAgICByZXR1cm4gc3R5bGVXaWR0aDsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVXaWR0aCgkZWxlbWVudCwgJ2VsZW1lbnQnKTsKKyAgICB9CisKKyAgICBpZiAobWV0aG9kID09ICdlbGVtZW50JykgeworICAgICAgdmFyIGVsZW1lbnRXaWR0aCA9ICRlbGVtZW50Lm91dGVyV2lkdGgoZmFsc2UpOworCisgICAgICBpZiAoZWxlbWVudFdpZHRoIDw9IDApIHsKKyAgICAgICAgcmV0dXJuICdhdXRvJzsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIGVsZW1lbnRXaWR0aCArICdweCc7CisgICAgfQorCisgICAgaWYgKG1ldGhvZCA9PSAnc3R5bGUnKSB7CisgICAgICB2YXIgc3R5bGUgPSAkZWxlbWVudC5hdHRyKCdzdHlsZScpOworCisgICAgICBpZiAodHlwZW9mKHN0eWxlKSAhPT0gJ3N0cmluZycpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9CisKKyAgICAgIHZhciBhdHRycyA9IHN0eWxlLnNwbGl0KCc7Jyk7CisKKyAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXR0cnMubGVuZ3RoOyBpIDwgbDsgaSA9IGkgKyAxKSB7CisgICAgICAgIHZhciBhdHRyID0gYXR0cnNbaV0ucmVwbGFjZSgvXHMvZywgJycpOworICAgICAgICB2YXIgbWF0Y2hlcyA9IGF0dHIubWF0Y2goV0lEVEgpOworCisgICAgICAgIGlmIChtYXRjaGVzICE9PSBudWxsICYmIG1hdGNoZXMubGVuZ3RoID49IDEpIHsKKyAgICAgICAgICByZXR1cm4gbWF0Y2hlc1sxXTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICByZXR1cm4gbWV0aG9kOworICB9OworCisgIFNlbGVjdDIucHJvdG90eXBlLl9iaW5kQWRhcHRlcnMgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy5kYXRhQWRhcHRlci5iaW5kKHRoaXMsIHRoaXMuJGNvbnRhaW5lcik7CisgICAgdGhpcy5zZWxlY3Rpb24uYmluZCh0aGlzLCB0aGlzLiRjb250YWluZXIpOworCisgICAgdGhpcy5kcm9wZG93bi5iaW5kKHRoaXMsIHRoaXMuJGNvbnRhaW5lcik7CisgICAgdGhpcy5yZXN1bHRzLmJpbmQodGhpcywgdGhpcy4kY29udGFpbmVyKTsKKyAgfTsKKworICBTZWxlY3QyLnByb3RvdHlwZS5fcmVnaXN0ZXJEb21FdmVudHMgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgdGhpcy4kZWxlbWVudC5vbignY2hhbmdlLnNlbGVjdDInLCBmdW5jdGlvbiAoKSB7CisgICAgICBzZWxmLmRhdGFBZGFwdGVyLmN1cnJlbnQoZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgc2VsZi50cmlnZ2VyKCdzZWxlY3Rpb246dXBkYXRlJywgeworICAgICAgICAgIGRhdGE6IGRhdGEKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIHRoaXMuJGVsZW1lbnQub24oJ2ZvY3VzLnNlbGVjdDInLCBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICBzZWxmLnRyaWdnZXIoJ2ZvY3VzJywgZXZ0KTsKKyAgICB9KTsKKworICAgIHRoaXMuX3N5bmNBID0gVXRpbHMuYmluZCh0aGlzLl9zeW5jQXR0cmlidXRlcywgdGhpcyk7CisgICAgdGhpcy5fc3luY1MgPSBVdGlscy5iaW5kKHRoaXMuX3N5bmNTdWJ0cmVlLCB0aGlzKTsKKworICAgIGlmICh0aGlzLiRlbGVtZW50WzBdLmF0dGFjaEV2ZW50KSB7CisgICAgICB0aGlzLiRlbGVtZW50WzBdLmF0dGFjaEV2ZW50KCdvbnByb3BlcnR5Y2hhbmdlJywgdGhpcy5fc3luY0EpOworICAgIH0KKworICAgIHZhciBvYnNlcnZlciA9IHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyIHx8CisgICAgICB3aW5kb3cuV2ViS2l0TXV0YXRpb25PYnNlcnZlciB8fAorICAgICAgd2luZG93Lk1vek11dGF0aW9uT2JzZXJ2ZXIKKyAgICA7CisKKyAgICBpZiAob2JzZXJ2ZXIgIT0gbnVsbCkgeworICAgICAgdGhpcy5fb2JzZXJ2ZXIgPSBuZXcgb2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykgeworICAgICAgICAkLmVhY2gobXV0YXRpb25zLCBzZWxmLl9zeW5jQSk7CisgICAgICAgICQuZWFjaChtdXRhdGlvbnMsIHNlbGYuX3N5bmNTKTsKKyAgICAgIH0pOworICAgICAgdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLiRlbGVtZW50WzBdLCB7CisgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsCisgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSwKKyAgICAgICAgc3VidHJlZTogZmFsc2UKKyAgICAgIH0pOworICAgIH0gZWxzZSBpZiAodGhpcy4kZWxlbWVudFswXS5hZGRFdmVudExpc3RlbmVyKSB7CisgICAgICB0aGlzLiRlbGVtZW50WzBdLmFkZEV2ZW50TGlzdGVuZXIoCisgICAgICAgICdET01BdHRyTW9kaWZpZWQnLAorICAgICAgICBzZWxmLl9zeW5jQSwKKyAgICAgICAgZmFsc2UKKyAgICAgICk7CisgICAgICB0aGlzLiRlbGVtZW50WzBdLmFkZEV2ZW50TGlzdGVuZXIoCisgICAgICAgICdET01Ob2RlSW5zZXJ0ZWQnLAorICAgICAgICBzZWxmLl9zeW5jUywKKyAgICAgICAgZmFsc2UKKyAgICAgICk7CisgICAgICB0aGlzLiRlbGVtZW50WzBdLmFkZEV2ZW50TGlzdGVuZXIoCisgICAgICAgICdET01Ob2RlUmVtb3ZlZCcsCisgICAgICAgIHNlbGYuX3N5bmNTLAorICAgICAgICBmYWxzZQorICAgICAgKTsKKyAgICB9CisgIH07CisKKyAgU2VsZWN0Mi5wcm90b3R5cGUuX3JlZ2lzdGVyRGF0YUV2ZW50cyA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICB0aGlzLmRhdGFBZGFwdGVyLm9uKCcqJywgZnVuY3Rpb24gKG5hbWUsIHBhcmFtcykgeworICAgICAgc2VsZi50cmlnZ2VyKG5hbWUsIHBhcmFtcyk7CisgICAgfSk7CisgIH07CisKKyAgU2VsZWN0Mi5wcm90b3R5cGUuX3JlZ2lzdGVyU2VsZWN0aW9uRXZlbnRzID0gZnVuY3Rpb24gKCkgeworICAgIHZhciBzZWxmID0gdGhpczsKKyAgICB2YXIgbm9uUmVsYXlFdmVudHMgPSBbJ3RvZ2dsZScsICdmb2N1cyddOworCisgICAgdGhpcy5zZWxlY3Rpb24ub24oJ3RvZ2dsZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHNlbGYudG9nZ2xlRHJvcGRvd24oKTsKKyAgICB9KTsKKworICAgIHRoaXMuc2VsZWN0aW9uLm9uKCdmb2N1cycsIGZ1bmN0aW9uIChwYXJhbXMpIHsKKyAgICAgIHNlbGYuZm9jdXMocGFyYW1zKTsKKyAgICB9KTsKKworICAgIHRoaXMuc2VsZWN0aW9uLm9uKCcqJywgZnVuY3Rpb24gKG5hbWUsIHBhcmFtcykgeworICAgICAgaWYgKCQuaW5BcnJheShuYW1lLCBub25SZWxheUV2ZW50cykgIT09IC0xKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgc2VsZi50cmlnZ2VyKG5hbWUsIHBhcmFtcyk7CisgICAgfSk7CisgIH07CisKKyAgU2VsZWN0Mi5wcm90b3R5cGUuX3JlZ2lzdGVyRHJvcGRvd25FdmVudHMgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgdGhpcy5kcm9wZG93bi5vbignKicsIGZ1bmN0aW9uIChuYW1lLCBwYXJhbXMpIHsKKyAgICAgIHNlbGYudHJpZ2dlcihuYW1lLCBwYXJhbXMpOworICAgIH0pOworICB9OworCisgIFNlbGVjdDIucHJvdG90eXBlLl9yZWdpc3RlclJlc3VsdHNFdmVudHMgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgdGhpcy5yZXN1bHRzLm9uKCcqJywgZnVuY3Rpb24gKG5hbWUsIHBhcmFtcykgeworICAgICAgc2VsZi50cmlnZ2VyKG5hbWUsIHBhcmFtcyk7CisgICAgfSk7CisgIH07CisKKyAgU2VsZWN0Mi5wcm90b3R5cGUuX3JlZ2lzdGVyRXZlbnRzID0gZnVuY3Rpb24gKCkgeworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIHRoaXMub24oJ29wZW4nLCBmdW5jdGlvbiAoKSB7CisgICAgICBzZWxmLiRjb250YWluZXIuYWRkQ2xhc3MoJ3NlbGVjdDItY29udGFpbmVyLS1vcGVuJyk7CisgICAgfSk7CisKKyAgICB0aGlzLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHNlbGYuJGNvbnRhaW5lci5yZW1vdmVDbGFzcygnc2VsZWN0Mi1jb250YWluZXItLW9wZW4nKTsKKyAgICB9KTsKKworICAgIHRoaXMub24oJ2VuYWJsZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHNlbGYuJGNvbnRhaW5lci5yZW1vdmVDbGFzcygnc2VsZWN0Mi1jb250YWluZXItLWRpc2FibGVkJyk7CisgICAgfSk7CisKKyAgICB0aGlzLm9uKCdkaXNhYmxlJywgZnVuY3Rpb24gKCkgeworICAgICAgc2VsZi4kY29udGFpbmVyLmFkZENsYXNzKCdzZWxlY3QyLWNvbnRhaW5lci0tZGlzYWJsZWQnKTsKKyAgICB9KTsKKworICAgIHRoaXMub24oJ2JsdXInLCBmdW5jdGlvbiAoKSB7CisgICAgICBzZWxmLiRjb250YWluZXIucmVtb3ZlQ2xhc3MoJ3NlbGVjdDItY29udGFpbmVyLS1mb2N1cycpOworICAgIH0pOworCisgICAgdGhpcy5vbigncXVlcnknLCBmdW5jdGlvbiAocGFyYW1zKSB7CisgICAgICBpZiAoIXNlbGYuaXNPcGVuKCkpIHsKKyAgICAgICAgc2VsZi50cmlnZ2VyKCdvcGVuJywge30pOworICAgICAgfQorCisgICAgICB0aGlzLmRhdGFBZGFwdGVyLnF1ZXJ5KHBhcmFtcywgZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgc2VsZi50cmlnZ2VyKCdyZXN1bHRzOmFsbCcsIHsKKyAgICAgICAgICBkYXRhOiBkYXRhLAorICAgICAgICAgIHF1ZXJ5OiBwYXJhbXMKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIHRoaXMub24oJ3F1ZXJ5OmFwcGVuZCcsIGZ1bmN0aW9uIChwYXJhbXMpIHsKKyAgICAgIHRoaXMuZGF0YUFkYXB0ZXIucXVlcnkocGFyYW1zLCBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICBzZWxmLnRyaWdnZXIoJ3Jlc3VsdHM6YXBwZW5kJywgeworICAgICAgICAgIGRhdGE6IGRhdGEsCisgICAgICAgICAgcXVlcnk6IHBhcmFtcworICAgICAgICB9KTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAgdGhpcy5vbigna2V5cHJlc3MnLCBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICB2YXIga2V5ID0gZXZ0LndoaWNoOworCisgICAgICBpZiAoc2VsZi5pc09wZW4oKSkgeworICAgICAgICBpZiAoa2V5ID09PSBLRVlTLkVTQyB8fCBrZXkgPT09IEtFWVMuVEFCIHx8CisgICAgICAgICAgICAoa2V5ID09PSBLRVlTLlVQICYmIGV2dC5hbHRLZXkpKSB7CisgICAgICAgICAgc2VsZi5jbG9zZSgpOworCisgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBLRVlTLkVOVEVSKSB7CisgICAgICAgICAgc2VsZi50cmlnZ2VyKCdyZXN1bHRzOnNlbGVjdCcsIHt9KTsKKworICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB9IGVsc2UgaWYgKChrZXkgPT09IEtFWVMuU1BBQ0UgJiYgZXZ0LmN0cmxLZXkpKSB7CisgICAgICAgICAgc2VsZi50cmlnZ2VyKCdyZXN1bHRzOnRvZ2dsZScsIHt9KTsKKworICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gS0VZUy5VUCkgeworICAgICAgICAgIHNlbGYudHJpZ2dlcigncmVzdWx0czpwcmV2aW91cycsIHt9KTsKKworICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gS0VZUy5ET1dOKSB7CisgICAgICAgICAgc2VsZi50cmlnZ2VyKCdyZXN1bHRzOm5leHQnLCB7fSk7CisKKyAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGtleSA9PT0gS0VZUy5FTlRFUiB8fCBrZXkgPT09IEtFWVMuU1BBQ0UgfHwKKyAgICAgICAgICAgIChrZXkgPT09IEtFWVMuRE9XTiAmJiBldnQuYWx0S2V5KSkgeworICAgICAgICAgIHNlbGYub3BlbigpOworCisgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKyAgfTsKKworICBTZWxlY3QyLnByb3RvdHlwZS5fc3luY0F0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy5vcHRpb25zLnNldCgnZGlzYWJsZWQnLCB0aGlzLiRlbGVtZW50LnByb3AoJ2Rpc2FibGVkJykpOworCisgICAgaWYgKHRoaXMub3B0aW9ucy5nZXQoJ2Rpc2FibGVkJykpIHsKKyAgICAgIGlmICh0aGlzLmlzT3BlbigpKSB7CisgICAgICAgIHRoaXMuY2xvc2UoKTsKKyAgICAgIH0KKworICAgICAgdGhpcy50cmlnZ2VyKCdkaXNhYmxlJywge30pOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLnRyaWdnZXIoJ2VuYWJsZScsIHt9KTsKKyAgICB9CisgIH07CisKKyAgU2VsZWN0Mi5wcm90b3R5cGUuX3N5bmNTdWJ0cmVlID0gZnVuY3Rpb24gKGV2dCwgbXV0YXRpb25zKSB7CisgICAgdmFyIGNoYW5nZWQgPSBmYWxzZTsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAvLyBJZ25vcmUgYW55IG11dGF0aW9uIGV2ZW50cyByYWlzZWQgZm9yIGVsZW1lbnRzIHRoYXQgYXJlbid0IG9wdGlvbnMgb3IKKyAgICAvLyBvcHRncm91cHMuIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSB3aGVuIHRoZSBzZWxlY3QgZWxlbWVudCBpcyBkZXN0cm95ZWQKKyAgICBpZiAoCisgICAgICBldnQgJiYgZXZ0LnRhcmdldCAmJiAoCisgICAgICAgIGV2dC50YXJnZXQubm9kZU5hbWUgIT09ICdPUFRJT04nICYmIGV2dC50YXJnZXQubm9kZU5hbWUgIT09ICdPUFRHUk9VUCcKKyAgICAgICkKKyAgICApIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW11dGF0aW9ucykgeworICAgICAgLy8gSWYgbXV0YXRpb24gZXZlbnRzIGFyZW4ndCBzdXBwb3J0ZWQsIHRoZW4gd2UgY2FuIG9ubHkgYXNzdW1lIHRoYXQgdGhlCisgICAgICAvLyBjaGFuZ2UgYWZmZWN0ZWQgdGhlIHNlbGVjdGlvbnMKKyAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAobXV0YXRpb25zLmFkZGVkTm9kZXMgJiYgbXV0YXRpb25zLmFkZGVkTm9kZXMubGVuZ3RoID4gMCkgeworICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBtdXRhdGlvbnMuYWRkZWROb2Rlcy5sZW5ndGg7IG4rKykgeworICAgICAgICB2YXIgbm9kZSA9IG11dGF0aW9ucy5hZGRlZE5vZGVzW25dOworCisgICAgICAgIGlmIChub2RlLnNlbGVjdGVkKSB7CisgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG11dGF0aW9ucy5yZW1vdmVkTm9kZXMgJiYgbXV0YXRpb25zLnJlbW92ZWROb2Rlcy5sZW5ndGggPiAwKSB7CisgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBPbmx5IHJlLXB1bGwgdGhlIGRhdGEgaWYgd2UgdGhpbmsgdGhlcmUgaXMgYSBjaGFuZ2UKKyAgICBpZiAoY2hhbmdlZCkgeworICAgICAgdGhpcy5kYXRhQWRhcHRlci5jdXJyZW50KGZ1bmN0aW9uIChjdXJyZW50RGF0YSkgeworICAgICAgICBzZWxmLnRyaWdnZXIoJ3NlbGVjdGlvbjp1cGRhdGUnLCB7CisgICAgICAgICAgZGF0YTogY3VycmVudERhdGEKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9CisgIH07CisKKyAgLyoqCisgICAqIE92ZXJyaWRlIHRoZSB0cmlnZ2VyIG1ldGhvZCB0byBhdXRvbWF0aWNhbGx5IHRyaWdnZXIgcHJlLWV2ZW50cyB3aGVuCisgICAqIHRoZXJlIGFyZSBldmVudHMgdGhhdCBjYW4gYmUgcHJldmVudGVkLgorICAgKi8KKyAgU2VsZWN0Mi5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uIChuYW1lLCBhcmdzKSB7CisgICAgdmFyIGFjdHVhbFRyaWdnZXIgPSBTZWxlY3QyLl9fc3VwZXJfXy50cmlnZ2VyOworICAgIHZhciBwcmVUcmlnZ2VyTWFwID0geworICAgICAgJ29wZW4nOiAnb3BlbmluZycsCisgICAgICAnY2xvc2UnOiAnY2xvc2luZycsCisgICAgICAnc2VsZWN0JzogJ3NlbGVjdGluZycsCisgICAgICAndW5zZWxlY3QnOiAndW5zZWxlY3RpbmcnLAorICAgICAgJ2NsZWFyJzogJ2NsZWFyaW5nJworICAgIH07CisKKyAgICBpZiAoYXJncyA9PT0gdW5kZWZpbmVkKSB7CisgICAgICBhcmdzID0ge307CisgICAgfQorCisgICAgaWYgKG5hbWUgaW4gcHJlVHJpZ2dlck1hcCkgeworICAgICAgdmFyIHByZVRyaWdnZXJOYW1lID0gcHJlVHJpZ2dlck1hcFtuYW1lXTsKKyAgICAgIHZhciBwcmVUcmlnZ2VyQXJncyA9IHsKKyAgICAgICAgcHJldmVudGVkOiBmYWxzZSwKKyAgICAgICAgbmFtZTogbmFtZSwKKyAgICAgICAgYXJnczogYXJncworICAgICAgfTsKKworICAgICAgYWN0dWFsVHJpZ2dlci5jYWxsKHRoaXMsIHByZVRyaWdnZXJOYW1lLCBwcmVUcmlnZ2VyQXJncyk7CisKKyAgICAgIGlmIChwcmVUcmlnZ2VyQXJncy5wcmV2ZW50ZWQpIHsKKyAgICAgICAgYXJncy5wcmV2ZW50ZWQgPSB0cnVlOworCisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBhY3R1YWxUcmlnZ2VyLmNhbGwodGhpcywgbmFtZSwgYXJncyk7CisgIH07CisKKyAgU2VsZWN0Mi5wcm90b3R5cGUudG9nZ2xlRHJvcGRvd24gPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKHRoaXMub3B0aW9ucy5nZXQoJ2Rpc2FibGVkJykpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodGhpcy5pc09wZW4oKSkgeworICAgICAgdGhpcy5jbG9zZSgpOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLm9wZW4oKTsKKyAgICB9CisgIH07CisKKyAgU2VsZWN0Mi5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAodGhpcy5pc09wZW4oKSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRoaXMudHJpZ2dlcigncXVlcnknLCB7fSk7CisgIH07CisKKyAgU2VsZWN0Mi5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKCF0aGlzLmlzT3BlbigpKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhpcy50cmlnZ2VyKCdjbG9zZScsIHt9KTsKKyAgfTsKKworICBTZWxlY3QyLnByb3RvdHlwZS5pc09wZW4gPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIHRoaXMuJGNvbnRhaW5lci5oYXNDbGFzcygnc2VsZWN0Mi1jb250YWluZXItLW9wZW4nKTsKKyAgfTsKKworICBTZWxlY3QyLnByb3RvdHlwZS5oYXNGb2N1cyA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gdGhpcy4kY29udGFpbmVyLmhhc0NsYXNzKCdzZWxlY3QyLWNvbnRhaW5lci0tZm9jdXMnKTsKKyAgfTsKKworICBTZWxlY3QyLnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgLy8gTm8gbmVlZCB0byByZS10cmlnZ2VyIGZvY3VzIGV2ZW50cyBpZiB3ZSBhcmUgYWxyZWFkeSBmb2N1c2VkCisgICAgaWYgKHRoaXMuaGFzRm9jdXMoKSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRoaXMuJGNvbnRhaW5lci5hZGRDbGFzcygnc2VsZWN0Mi1jb250YWluZXItLWZvY3VzJyk7CisgICAgdGhpcy50cmlnZ2VyKCdmb2N1cycsIHt9KTsKKyAgfTsKKworICBTZWxlY3QyLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAoYXJncykgeworICAgIGlmICh0aGlzLm9wdGlvbnMuZ2V0KCdkZWJ1ZycpICYmIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUud2FybikgeworICAgICAgY29uc29sZS53YXJuKAorICAgICAgICAnU2VsZWN0MjogVGhlIGBzZWxlY3QyKCJlbmFibGUiKWAgbWV0aG9kIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIHdpbGwnICsKKyAgICAgICAgJyBiZSByZW1vdmVkIGluIGxhdGVyIFNlbGVjdDIgdmVyc2lvbnMuIFVzZSAkZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIpJyArCisgICAgICAgICcgaW5zdGVhZC4nCisgICAgICApOworICAgIH0KKworICAgIGlmIChhcmdzID09IG51bGwgfHwgYXJncy5sZW5ndGggPT09IDApIHsKKyAgICAgIGFyZ3MgPSBbdHJ1ZV07CisgICAgfQorCisgICAgdmFyIGRpc2FibGVkID0gIWFyZ3NbMF07CisKKyAgICB0aGlzLiRlbGVtZW50LnByb3AoJ2Rpc2FibGVkJywgZGlzYWJsZWQpOworICB9OworCisgIFNlbGVjdDIucHJvdG90eXBlLmRhdGEgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKHRoaXMub3B0aW9ucy5nZXQoJ2RlYnVnJykgJiYKKyAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS53YXJuKSB7CisgICAgICBjb25zb2xlLndhcm4oCisgICAgICAgICdTZWxlY3QyOiBEYXRhIGNhbiBubyBsb25nZXIgYmUgc2V0IHVzaW5nIGBzZWxlY3QyKCJkYXRhIilgLiBZb3UgJyArCisgICAgICAgICdzaG91bGQgY29uc2lkZXIgc2V0dGluZyB0aGUgdmFsdWUgaW5zdGVhZCB1c2luZyBgJGVsZW1lbnQudmFsKClgLicKKyAgICAgICk7CisgICAgfQorCisgICAgdmFyIGRhdGEgPSBbXTsKKworICAgIHRoaXMuZGF0YUFkYXB0ZXIuY3VycmVudChmdW5jdGlvbiAoY3VycmVudERhdGEpIHsKKyAgICAgIGRhdGEgPSBjdXJyZW50RGF0YTsKKyAgICB9KTsKKworICAgIHJldHVybiBkYXRhOworICB9OworCisgIFNlbGVjdDIucHJvdG90eXBlLnZhbCA9IGZ1bmN0aW9uIChhcmdzKSB7CisgICAgaWYgKHRoaXMub3B0aW9ucy5nZXQoJ2RlYnVnJykgJiYgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS53YXJuKSB7CisgICAgICBjb25zb2xlLndhcm4oCisgICAgICAgICdTZWxlY3QyOiBUaGUgYHNlbGVjdDIoInZhbCIpYCBtZXRob2QgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgd2lsbCBiZScgKworICAgICAgICAnIHJlbW92ZWQgaW4gbGF0ZXIgU2VsZWN0MiB2ZXJzaW9ucy4gVXNlICRlbGVtZW50LnZhbCgpIGluc3RlYWQuJworICAgICAgKTsKKyAgICB9CisKKyAgICBpZiAoYXJncyA9PSBudWxsIHx8IGFyZ3MubGVuZ3RoID09PSAwKSB7CisgICAgICByZXR1cm4gdGhpcy4kZWxlbWVudC52YWwoKTsKKyAgICB9CisKKyAgICB2YXIgbmV3VmFsID0gYXJnc1swXTsKKworICAgIGlmICgkLmlzQXJyYXkobmV3VmFsKSkgeworICAgICAgbmV3VmFsID0gJC5tYXAobmV3VmFsLCBmdW5jdGlvbiAob2JqKSB7CisgICAgICAgIHJldHVybiBvYmoudG9TdHJpbmcoKTsKKyAgICAgIH0pOworICAgIH0KKworICAgIHRoaXMuJGVsZW1lbnQudmFsKG5ld1ZhbCkudHJpZ2dlcignY2hhbmdlJyk7CisgIH07CisKKyAgU2VsZWN0Mi5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLiRjb250YWluZXIucmVtb3ZlKCk7CisKKyAgICBpZiAodGhpcy4kZWxlbWVudFswXS5kZXRhY2hFdmVudCkgeworICAgICAgdGhpcy4kZWxlbWVudFswXS5kZXRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIHRoaXMuX3N5bmNBKTsKKyAgICB9CisKKyAgICBpZiAodGhpcy5fb2JzZXJ2ZXIgIT0gbnVsbCkgeworICAgICAgdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgdGhpcy5fb2JzZXJ2ZXIgPSBudWxsOworICAgIH0gZWxzZSBpZiAodGhpcy4kZWxlbWVudFswXS5yZW1vdmVFdmVudExpc3RlbmVyKSB7CisgICAgICB0aGlzLiRlbGVtZW50WzBdCisgICAgICAgIC5yZW1vdmVFdmVudExpc3RlbmVyKCdET01BdHRyTW9kaWZpZWQnLCB0aGlzLl9zeW5jQSwgZmFsc2UpOworICAgICAgdGhpcy4kZWxlbWVudFswXQorICAgICAgICAucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NTm9kZUluc2VydGVkJywgdGhpcy5fc3luY1MsIGZhbHNlKTsKKyAgICAgIHRoaXMuJGVsZW1lbnRbMF0KKyAgICAgICAgLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ0RPTU5vZGVSZW1vdmVkJywgdGhpcy5fc3luY1MsIGZhbHNlKTsKKyAgICB9CisKKyAgICB0aGlzLl9zeW5jQSA9IG51bGw7CisgICAgdGhpcy5fc3luY1MgPSBudWxsOworCisgICAgdGhpcy4kZWxlbWVudC5vZmYoJy5zZWxlY3QyJyk7CisgICAgdGhpcy4kZWxlbWVudC5hdHRyKCd0YWJpbmRleCcsCisgICAgVXRpbHMuR2V0RGF0YSh0aGlzLiRlbGVtZW50WzBdLCAnb2xkLXRhYmluZGV4JykpOworCisgICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygnc2VsZWN0Mi1oaWRkZW4tYWNjZXNzaWJsZScpOworICAgIHRoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTsKKyAgICBVdGlscy5SZW1vdmVEYXRhKHRoaXMuJGVsZW1lbnRbMF0pOworICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlRGF0YSgnc2VsZWN0MicpOworCisgICAgdGhpcy5kYXRhQWRhcHRlci5kZXN0cm95KCk7CisgICAgdGhpcy5zZWxlY3Rpb24uZGVzdHJveSgpOworICAgIHRoaXMuZHJvcGRvd24uZGVzdHJveSgpOworICAgIHRoaXMucmVzdWx0cy5kZXN0cm95KCk7CisKKyAgICB0aGlzLmRhdGFBZGFwdGVyID0gbnVsbDsKKyAgICB0aGlzLnNlbGVjdGlvbiA9IG51bGw7CisgICAgdGhpcy5kcm9wZG93biA9IG51bGw7CisgICAgdGhpcy5yZXN1bHRzID0gbnVsbDsKKyAgfTsKKworICBTZWxlY3QyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyICRjb250YWluZXIgPSAkKAorICAgICAgJzxzcGFuIGNsYXNzPSJzZWxlY3QyIHNlbGVjdDItY29udGFpbmVyIj4nICsKKyAgICAgICAgJzxzcGFuIGNsYXNzPSJzZWxlY3Rpb24iPjwvc3Bhbj4nICsKKyAgICAgICAgJzxzcGFuIGNsYXNzPSJkcm9wZG93bi13cmFwcGVyIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zcGFuPicgKworICAgICAgJzwvc3Bhbj4nCisgICAgKTsKKworICAgICRjb250YWluZXIuYXR0cignZGlyJywgdGhpcy5vcHRpb25zLmdldCgnZGlyJykpOworCisgICAgdGhpcy4kY29udGFpbmVyID0gJGNvbnRhaW5lcjsKKworICAgIHRoaXMuJGNvbnRhaW5lci5hZGRDbGFzcygnc2VsZWN0Mi1jb250YWluZXItLScgKyB0aGlzLm9wdGlvbnMuZ2V0KCd0aGVtZScpKTsKKworICAgIFV0aWxzLlN0b3JlRGF0YSgkY29udGFpbmVyWzBdLCAnZWxlbWVudCcsIHRoaXMuJGVsZW1lbnQpOworCisgICAgcmV0dXJuICRjb250YWluZXI7CisgIH07CisKKyAgcmV0dXJuIFNlbGVjdDI7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2NvbXBhdC91dGlscycsWworICAnanF1ZXJ5JworXSwgZnVuY3Rpb24gKCQpIHsKKyAgZnVuY3Rpb24gc3luY0Nzc0NsYXNzZXMgKCRkZXN0LCAkc3JjLCBhZGFwdGVyKSB7CisgICAgdmFyIGNsYXNzZXMsIHJlcGxhY2VtZW50cyA9IFtdLCBhZGFwdGVkOworCisgICAgY2xhc3NlcyA9ICQudHJpbSgkZGVzdC5hdHRyKCdjbGFzcycpKTsKKworICAgIGlmIChjbGFzc2VzKSB7CisgICAgICBjbGFzc2VzID0gJycgKyBjbGFzc2VzOyAvLyBmb3IgSUUgd2hpY2ggcmV0dXJucyBvYmplY3QKKworICAgICAgJChjbGFzc2VzLnNwbGl0KC9ccysvKSkuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIFNhdmUgYWxsIFNlbGVjdDIgY2xhc3NlcworICAgICAgICBpZiAodGhpcy5pbmRleE9mKCdzZWxlY3QyLScpID09PSAwKSB7CisgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2godGhpcyk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIGNsYXNzZXMgPSAkLnRyaW0oJHNyYy5hdHRyKCdjbGFzcycpKTsKKworICAgIGlmIChjbGFzc2VzKSB7CisgICAgICBjbGFzc2VzID0gJycgKyBjbGFzc2VzOyAvLyBmb3IgSUUgd2hpY2ggcmV0dXJucyBvYmplY3QKKworICAgICAgJChjbGFzc2VzLnNwbGl0KC9ccysvKSkuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIE9ubHkgYWRhcHQgbm9uLVNlbGVjdDIgY2xhc3NlcworICAgICAgICBpZiAodGhpcy5pbmRleE9mKCdzZWxlY3QyLScpICE9PSAwKSB7CisgICAgICAgICAgYWRhcHRlZCA9IGFkYXB0ZXIodGhpcyk7CisKKyAgICAgICAgICBpZiAoYWRhcHRlZCAhPSBudWxsKSB7CisgICAgICAgICAgICByZXBsYWNlbWVudHMucHVzaChhZGFwdGVkKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgICRkZXN0LmF0dHIoJ2NsYXNzJywgcmVwbGFjZW1lbnRzLmpvaW4oJyAnKSk7CisgIH0KKworICByZXR1cm4geworICAgIHN5bmNDc3NDbGFzc2VzOiBzeW5jQ3NzQ2xhc3NlcworICB9OworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9jb21wYXQvY29udGFpbmVyQ3NzJyxbCisgICdqcXVlcnknLAorICAnLi91dGlscycKK10sIGZ1bmN0aW9uICgkLCBDb21wYXRVdGlscykgeworICAvLyBOby1vcCBDU1MgYWRhcHRlciB0aGF0IGRpc2NhcmRzIGFsbCBjbGFzc2VzIGJ5IGRlZmF1bHQKKyAgZnVuY3Rpb24gX2NvbnRhaW5lckFkYXB0ZXIgKGNsYXp6KSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBmdW5jdGlvbiBDb250YWluZXJDU1MgKCkgeyB9CisKKyAgQ29udGFpbmVyQ1NTLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGVjb3JhdGVkKSB7CisgICAgdmFyICRjb250YWluZXIgPSBkZWNvcmF0ZWQuY2FsbCh0aGlzKTsKKworICAgIHZhciBjb250YWluZXJDc3NDbGFzcyA9IHRoaXMub3B0aW9ucy5nZXQoJ2NvbnRhaW5lckNzc0NsYXNzJykgfHwgJyc7CisKKyAgICBpZiAoJC5pc0Z1bmN0aW9uKGNvbnRhaW5lckNzc0NsYXNzKSkgeworICAgICAgY29udGFpbmVyQ3NzQ2xhc3MgPSBjb250YWluZXJDc3NDbGFzcyh0aGlzLiRlbGVtZW50KTsKKyAgICB9CisKKyAgICB2YXIgY29udGFpbmVyQ3NzQWRhcHRlciA9IHRoaXMub3B0aW9ucy5nZXQoJ2FkYXB0Q29udGFpbmVyQ3NzQ2xhc3MnKTsKKyAgICBjb250YWluZXJDc3NBZGFwdGVyID0gY29udGFpbmVyQ3NzQWRhcHRlciB8fCBfY29udGFpbmVyQWRhcHRlcjsKKworICAgIGlmIChjb250YWluZXJDc3NDbGFzcy5pbmRleE9mKCc6YWxsOicpICE9PSAtMSkgeworICAgICAgY29udGFpbmVyQ3NzQ2xhc3MgPSBjb250YWluZXJDc3NDbGFzcy5yZXBsYWNlKCc6YWxsOicsICcnKTsKKworICAgICAgdmFyIF9jc3NBZGFwdGVyID0gY29udGFpbmVyQ3NzQWRhcHRlcjsKKworICAgICAgY29udGFpbmVyQ3NzQWRhcHRlciA9IGZ1bmN0aW9uIChjbGF6eikgeworICAgICAgICB2YXIgYWRhcHRlZCA9IF9jc3NBZGFwdGVyKGNsYXp6KTsKKworICAgICAgICBpZiAoYWRhcHRlZCAhPSBudWxsKSB7CisgICAgICAgICAgLy8gQXBwZW5kIHRoZSBvbGQgb25lIGFsb25nIHdpdGggdGhlIGFkYXB0ZWQgb25lCisgICAgICAgICAgcmV0dXJuIGFkYXB0ZWQgKyAnICcgKyBjbGF6ejsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjbGF6ejsKKyAgICAgIH07CisgICAgfQorCisgICAgdmFyIGNvbnRhaW5lckNzcyA9IHRoaXMub3B0aW9ucy5nZXQoJ2NvbnRhaW5lckNzcycpIHx8IHt9OworCisgICAgaWYgKCQuaXNGdW5jdGlvbihjb250YWluZXJDc3MpKSB7CisgICAgICBjb250YWluZXJDc3MgPSBjb250YWluZXJDc3ModGhpcy4kZWxlbWVudCk7CisgICAgfQorCisgICAgQ29tcGF0VXRpbHMuc3luY0Nzc0NsYXNzZXMoJGNvbnRhaW5lciwgdGhpcy4kZWxlbWVudCwgY29udGFpbmVyQ3NzQWRhcHRlcik7CisKKyAgICAkY29udGFpbmVyLmNzcyhjb250YWluZXJDc3MpOworICAgICRjb250YWluZXIuYWRkQ2xhc3MoY29udGFpbmVyQ3NzQ2xhc3MpOworCisgICAgcmV0dXJuICRjb250YWluZXI7CisgIH07CisKKyAgcmV0dXJuIENvbnRhaW5lckNTUzsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvY29tcGF0L2Ryb3Bkb3duQ3NzJyxbCisgICdqcXVlcnknLAorICAnLi91dGlscycKK10sIGZ1bmN0aW9uICgkLCBDb21wYXRVdGlscykgeworICAvLyBOby1vcCBDU1MgYWRhcHRlciB0aGF0IGRpc2NhcmRzIGFsbCBjbGFzc2VzIGJ5IGRlZmF1bHQKKyAgZnVuY3Rpb24gX2Ryb3Bkb3duQWRhcHRlciAoY2xhenopIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIGZ1bmN0aW9uIERyb3Bkb3duQ1NTICgpIHsgfQorCisgIERyb3Bkb3duQ1NTLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGVjb3JhdGVkKSB7CisgICAgdmFyICRkcm9wZG93biA9IGRlY29yYXRlZC5jYWxsKHRoaXMpOworCisgICAgdmFyIGRyb3Bkb3duQ3NzQ2xhc3MgPSB0aGlzLm9wdGlvbnMuZ2V0KCdkcm9wZG93bkNzc0NsYXNzJykgfHwgJyc7CisKKyAgICBpZiAoJC5pc0Z1bmN0aW9uKGRyb3Bkb3duQ3NzQ2xhc3MpKSB7CisgICAgICBkcm9wZG93bkNzc0NsYXNzID0gZHJvcGRvd25Dc3NDbGFzcyh0aGlzLiRlbGVtZW50KTsKKyAgICB9CisKKyAgICB2YXIgZHJvcGRvd25Dc3NBZGFwdGVyID0gdGhpcy5vcHRpb25zLmdldCgnYWRhcHREcm9wZG93bkNzc0NsYXNzJyk7CisgICAgZHJvcGRvd25Dc3NBZGFwdGVyID0gZHJvcGRvd25Dc3NBZGFwdGVyIHx8IF9kcm9wZG93bkFkYXB0ZXI7CisKKyAgICBpZiAoZHJvcGRvd25Dc3NDbGFzcy5pbmRleE9mKCc6YWxsOicpICE9PSAtMSkgeworICAgICAgZHJvcGRvd25Dc3NDbGFzcyA9IGRyb3Bkb3duQ3NzQ2xhc3MucmVwbGFjZSgnOmFsbDonLCAnJyk7CisKKyAgICAgIHZhciBfY3NzQWRhcHRlciA9IGRyb3Bkb3duQ3NzQWRhcHRlcjsKKworICAgICAgZHJvcGRvd25Dc3NBZGFwdGVyID0gZnVuY3Rpb24gKGNsYXp6KSB7CisgICAgICAgIHZhciBhZGFwdGVkID0gX2Nzc0FkYXB0ZXIoY2xhenopOworCisgICAgICAgIGlmIChhZGFwdGVkICE9IG51bGwpIHsKKyAgICAgICAgICAvLyBBcHBlbmQgdGhlIG9sZCBvbmUgYWxvbmcgd2l0aCB0aGUgYWRhcHRlZCBvbmUKKyAgICAgICAgICByZXR1cm4gYWRhcHRlZCArICcgJyArIGNsYXp6OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNsYXp6OworICAgICAgfTsKKyAgICB9CisKKyAgICB2YXIgZHJvcGRvd25Dc3MgPSB0aGlzLm9wdGlvbnMuZ2V0KCdkcm9wZG93bkNzcycpIHx8IHt9OworCisgICAgaWYgKCQuaXNGdW5jdGlvbihkcm9wZG93bkNzcykpIHsKKyAgICAgIGRyb3Bkb3duQ3NzID0gZHJvcGRvd25Dc3ModGhpcy4kZWxlbWVudCk7CisgICAgfQorCisgICAgQ29tcGF0VXRpbHMuc3luY0Nzc0NsYXNzZXMoJGRyb3Bkb3duLCB0aGlzLiRlbGVtZW50LCBkcm9wZG93bkNzc0FkYXB0ZXIpOworCisgICAgJGRyb3Bkb3duLmNzcyhkcm9wZG93bkNzcyk7CisgICAgJGRyb3Bkb3duLmFkZENsYXNzKGRyb3Bkb3duQ3NzQ2xhc3MpOworCisgICAgcmV0dXJuICRkcm9wZG93bjsKKyAgfTsKKworICByZXR1cm4gRHJvcGRvd25DU1M7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2NvbXBhdC9pbml0U2VsZWN0aW9uJyxbCisgICdqcXVlcnknCitdLCBmdW5jdGlvbiAoJCkgeworICBmdW5jdGlvbiBJbml0U2VsZWN0aW9uIChkZWNvcmF0ZWQsICRlbGVtZW50LCBvcHRpb25zKSB7CisgICAgaWYgKG9wdGlvbnMuZ2V0KCdkZWJ1ZycpICYmIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUud2FybikgeworICAgICAgY29uc29sZS53YXJuKAorICAgICAgICAnU2VsZWN0MjogVGhlIGBpbml0U2VsZWN0aW9uYCBvcHRpb24gaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvcicgKworICAgICAgICAnIG9mIGEgY3VzdG9tIGRhdGEgYWRhcHRlciB0aGF0IG92ZXJyaWRlcyB0aGUgYGN1cnJlbnRgIG1ldGhvZC4gJyArCisgICAgICAgICdUaGlzIG1ldGhvZCBpcyBub3cgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGluc3RlYWQgb2YgYSBzaW5nbGUgJyArCisgICAgICAgICd0aW1lIHdoZW4gdGhlIGluc3RhbmNlIGlzIGluaXRpYWxpemVkLiBTdXBwb3J0IHdpbGwgYmUgcmVtb3ZlZCAnICsKKyAgICAgICAgJ2ZvciB0aGUgYGluaXRTZWxlY3Rpb25gIG9wdGlvbiBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgU2VsZWN0MicKKyAgICAgICk7CisgICAgfQorCisgICAgdGhpcy5pbml0U2VsZWN0aW9uID0gb3B0aW9ucy5nZXQoJ2luaXRTZWxlY3Rpb24nKTsKKyAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gZmFsc2U7CisKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCAkZWxlbWVudCwgb3B0aW9ucyk7CisgIH0KKworICBJbml0U2VsZWN0aW9uLnByb3RvdHlwZS5jdXJyZW50ID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgY2FsbGJhY2spIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICBpZiAodGhpcy5faXNJbml0aWFsaXplZCkgeworICAgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgY2FsbGJhY2spOworCisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhpcy5pbml0U2VsZWN0aW9uLmNhbGwobnVsbCwgdGhpcy4kZWxlbWVudCwgZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgIHNlbGYuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgICBpZiAoISQuaXNBcnJheShkYXRhKSkgeworICAgICAgICBkYXRhID0gW2RhdGFdOworICAgICAgfQorCisgICAgICBjYWxsYmFjayhkYXRhKTsKKyAgICB9KTsKKyAgfTsKKworICByZXR1cm4gSW5pdFNlbGVjdGlvbjsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvY29tcGF0L2lucHV0RGF0YScsWworICAnanF1ZXJ5JywKKyAgJy4uL3V0aWxzJworXSwgZnVuY3Rpb24gKCQsIFV0aWxzKSB7CisgIGZ1bmN0aW9uIElucHV0RGF0YSAoZGVjb3JhdGVkLCAkZWxlbWVudCwgb3B0aW9ucykgeworICAgIHRoaXMuX2N1cnJlbnREYXRhID0gW107CisgICAgdGhpcy5fdmFsdWVTZXBhcmF0b3IgPSBvcHRpb25zLmdldCgndmFsdWVTZXBhcmF0b3InKSB8fCAnLCc7CisKKyAgICBpZiAoJGVsZW1lbnQucHJvcCgndHlwZScpID09PSAnaGlkZGVuJykgeworICAgICAgaWYgKG9wdGlvbnMuZ2V0KCdkZWJ1ZycpICYmIGNvbnNvbGUgJiYgY29uc29sZS53YXJuKSB7CisgICAgICAgIGNvbnNvbGUud2FybigKKyAgICAgICAgICAnU2VsZWN0MjogVXNpbmcgYSBoaWRkZW4gaW5wdXQgd2l0aCBTZWxlY3QyIGlzIG5vIGxvbmdlciAnICsKKyAgICAgICAgICAnc3VwcG9ydGVkIGFuZCBtYXkgc3RvcCB3b3JraW5nIGluIHRoZSBmdXR1cmUuIEl0IGlzIHJlY29tbWVuZGVkICcgKworICAgICAgICAgICd0byB1c2UgYSBgPHNlbGVjdD5gIGVsZW1lbnQgaW5zdGVhZC4nCisgICAgICAgICk7CisgICAgICB9CisgICAgfQorCisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgJGVsZW1lbnQsIG9wdGlvbnMpOworICB9CisKKyAgSW5wdXREYXRhLnByb3RvdHlwZS5jdXJyZW50ID0gZnVuY3Rpb24gKF8sIGNhbGxiYWNrKSB7CisgICAgZnVuY3Rpb24gZ2V0U2VsZWN0ZWQgKGRhdGEsIHNlbGVjdGVkSWRzKSB7CisgICAgICB2YXIgc2VsZWN0ZWQgPSBbXTsKKworICAgICAgaWYgKGRhdGEuc2VsZWN0ZWQgfHwgJC5pbkFycmF5KGRhdGEuaWQsIHNlbGVjdGVkSWRzKSAhPT0gLTEpIHsKKyAgICAgICAgZGF0YS5zZWxlY3RlZCA9IHRydWU7CisgICAgICAgIHNlbGVjdGVkLnB1c2goZGF0YSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBkYXRhLnNlbGVjdGVkID0gZmFsc2U7CisgICAgICB9CisKKyAgICAgIGlmIChkYXRhLmNoaWxkcmVuKSB7CisgICAgICAgIHNlbGVjdGVkLnB1c2guYXBwbHkoc2VsZWN0ZWQsIGdldFNlbGVjdGVkKGRhdGEuY2hpbGRyZW4sIHNlbGVjdGVkSWRzKSk7CisgICAgICB9CisKKyAgICAgIHJldHVybiBzZWxlY3RlZDsKKyAgICB9CisKKyAgICB2YXIgc2VsZWN0ZWQgPSBbXTsKKworICAgIGZvciAodmFyIGQgPSAwOyBkIDwgdGhpcy5fY3VycmVudERhdGEubGVuZ3RoOyBkKyspIHsKKyAgICAgIHZhciBkYXRhID0gdGhpcy5fY3VycmVudERhdGFbZF07CisKKyAgICAgIHNlbGVjdGVkLnB1c2guYXBwbHkoCisgICAgICAgIHNlbGVjdGVkLAorICAgICAgICBnZXRTZWxlY3RlZCgKKyAgICAgICAgICBkYXRhLAorICAgICAgICAgIHRoaXMuJGVsZW1lbnQudmFsKCkuc3BsaXQoCisgICAgICAgICAgICB0aGlzLl92YWx1ZVNlcGFyYXRvcgorICAgICAgICAgICkKKyAgICAgICAgKQorICAgICAgKTsKKyAgICB9CisKKyAgICBjYWxsYmFjayhzZWxlY3RlZCk7CisgIH07CisKKyAgSW5wdXREYXRhLnByb3RvdHlwZS5zZWxlY3QgPSBmdW5jdGlvbiAoXywgZGF0YSkgeworICAgIGlmICghdGhpcy5vcHRpb25zLmdldCgnbXVsdGlwbGUnKSkgeworICAgICAgdGhpcy5jdXJyZW50KGZ1bmN0aW9uIChhbGxEYXRhKSB7CisgICAgICAgICQubWFwKGFsbERhdGEsIGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgZGF0YS5zZWxlY3RlZCA9IGZhbHNlOworICAgICAgICB9KTsKKyAgICAgIH0pOworCisgICAgICB0aGlzLiRlbGVtZW50LnZhbChkYXRhLmlkKTsKKyAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignY2hhbmdlJyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciB2YWx1ZSA9IHRoaXMuJGVsZW1lbnQudmFsKCk7CisgICAgICB2YWx1ZSArPSB0aGlzLl92YWx1ZVNlcGFyYXRvciArIGRhdGEuaWQ7CisKKyAgICAgIHRoaXMuJGVsZW1lbnQudmFsKHZhbHVlKTsKKyAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignY2hhbmdlJyk7CisgICAgfQorICB9OworCisgIElucHV0RGF0YS5wcm90b3R5cGUudW5zZWxlY3QgPSBmdW5jdGlvbiAoXywgZGF0YSkgeworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIGRhdGEuc2VsZWN0ZWQgPSBmYWxzZTsKKworICAgIHRoaXMuY3VycmVudChmdW5jdGlvbiAoYWxsRGF0YSkgeworICAgICAgdmFyIHZhbHVlcyA9IFtdOworCisgICAgICBmb3IgKHZhciBkID0gMDsgZCA8IGFsbERhdGEubGVuZ3RoOyBkKyspIHsKKyAgICAgICAgdmFyIGl0ZW0gPSBhbGxEYXRhW2RdOworCisgICAgICAgIGlmIChkYXRhLmlkID09IGl0ZW0uaWQpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZhbHVlcy5wdXNoKGl0ZW0uaWQpOworICAgICAgfQorCisgICAgICBzZWxmLiRlbGVtZW50LnZhbCh2YWx1ZXMuam9pbihzZWxmLl92YWx1ZVNlcGFyYXRvcikpOworICAgICAgc2VsZi4kZWxlbWVudC50cmlnZ2VyKCdjaGFuZ2UnKTsKKyAgICB9KTsKKyAgfTsKKworICBJbnB1dERhdGEucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24gKF8sIHBhcmFtcywgY2FsbGJhY2spIHsKKyAgICB2YXIgcmVzdWx0cyA9IFtdOworCisgICAgZm9yICh2YXIgZCA9IDA7IGQgPCB0aGlzLl9jdXJyZW50RGF0YS5sZW5ndGg7IGQrKykgeworICAgICAgdmFyIGRhdGEgPSB0aGlzLl9jdXJyZW50RGF0YVtkXTsKKworICAgICAgdmFyIG1hdGNoZXMgPSB0aGlzLm1hdGNoZXMocGFyYW1zLCBkYXRhKTsKKworICAgICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHsKKyAgICAgICAgcmVzdWx0cy5wdXNoKG1hdGNoZXMpOworICAgICAgfQorICAgIH0KKworICAgIGNhbGxiYWNrKHsKKyAgICAgIHJlc3VsdHM6IHJlc3VsdHMKKyAgICB9KTsKKyAgfTsKKworICBJbnB1dERhdGEucHJvdG90eXBlLmFkZE9wdGlvbnMgPSBmdW5jdGlvbiAoXywgJG9wdGlvbnMpIHsKKyAgICB2YXIgb3B0aW9ucyA9ICQubWFwKCRvcHRpb25zLCBmdW5jdGlvbiAoJG9wdGlvbikgeworICAgICAgcmV0dXJuIFV0aWxzLkdldERhdGEoJG9wdGlvblswXSwgJ2RhdGEnKTsKKyAgICB9KTsKKworICAgIHRoaXMuX2N1cnJlbnREYXRhLnB1c2guYXBwbHkodGhpcy5fY3VycmVudERhdGEsIG9wdGlvbnMpOworICB9OworCisgIHJldHVybiBJbnB1dERhdGE7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2NvbXBhdC9tYXRjaGVyJyxbCisgICdqcXVlcnknCitdLCBmdW5jdGlvbiAoJCkgeworICBmdW5jdGlvbiBvbGRNYXRjaGVyIChtYXRjaGVyKSB7CisgICAgZnVuY3Rpb24gd3JhcHBlZE1hdGNoZXIgKHBhcmFtcywgZGF0YSkgeworICAgICAgdmFyIG1hdGNoID0gJC5leHRlbmQodHJ1ZSwge30sIGRhdGEpOworCisgICAgICBpZiAocGFyYW1zLnRlcm0gPT0gbnVsbCB8fCAkLnRyaW0ocGFyYW1zLnRlcm0pID09PSAnJykgeworICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgICB9CisKKyAgICAgIGlmIChkYXRhLmNoaWxkcmVuKSB7CisgICAgICAgIGZvciAodmFyIGMgPSBkYXRhLmNoaWxkcmVuLmxlbmd0aCAtIDE7IGMgPj0gMDsgYy0tKSB7CisgICAgICAgICAgdmFyIGNoaWxkID0gZGF0YS5jaGlsZHJlbltjXTsKKworICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBjaGlsZCBvYmplY3QgbWF0Y2hlcworICAgICAgICAgIC8vIFRoZSBvbGQgbWF0Y2hlciByZXR1cm5lZCBhIGJvb2xlYW4gdHJ1ZSBvciBmYWxzZQorICAgICAgICAgIHZhciBkb2VzTWF0Y2ggPSBtYXRjaGVyKHBhcmFtcy50ZXJtLCBjaGlsZC50ZXh0LCBjaGlsZCk7CisKKyAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgZGlkbid0IG1hdGNoLCBwb3AgaXQgb2ZmCisgICAgICAgICAgaWYgKCFkb2VzTWF0Y2gpIHsKKyAgICAgICAgICAgIG1hdGNoLmNoaWxkcmVuLnNwbGljZShjLCAxKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2guY2hpbGRyZW4ubGVuZ3RoID4gMCkgeworICAgICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAobWF0Y2hlcihwYXJhbXMudGVybSwgZGF0YS50ZXh0LCBkYXRhKSkgeworICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgICB9CisKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHJldHVybiB3cmFwcGVkTWF0Y2hlcjsKKyAgfQorCisgIHJldHVybiBvbGRNYXRjaGVyOworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9jb21wYXQvcXVlcnknLFsKKworXSwgZnVuY3Rpb24gKCkgeworICBmdW5jdGlvbiBRdWVyeSAoZGVjb3JhdGVkLCAkZWxlbWVudCwgb3B0aW9ucykgeworICAgIGlmIChvcHRpb25zLmdldCgnZGVidWcnKSAmJiB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLndhcm4pIHsKKyAgICAgIGNvbnNvbGUud2FybigKKyAgICAgICAgJ1NlbGVjdDI6IFRoZSBgcXVlcnlgIG9wdGlvbiBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGEgJyArCisgICAgICAgICdjdXN0b20gZGF0YSBhZGFwdGVyIHRoYXQgb3ZlcnJpZGVzIHRoZSBgcXVlcnlgIG1ldGhvZC4gU3VwcG9ydCAnICsKKyAgICAgICAgJ3dpbGwgYmUgcmVtb3ZlZCBmb3IgdGhlIGBxdWVyeWAgb3B0aW9uIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiAnICsKKyAgICAgICAgJ1NlbGVjdDIuJworICAgICAgKTsKKyAgICB9CisKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCAkZWxlbWVudCwgb3B0aW9ucyk7CisgIH0KKworICBRdWVyeS5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbiAoXywgcGFyYW1zLCBjYWxsYmFjaykgeworICAgIHBhcmFtcy5jYWxsYmFjayA9IGNhbGxiYWNrOworCisgICAgdmFyIHF1ZXJ5ID0gdGhpcy5vcHRpb25zLmdldCgncXVlcnknKTsKKworICAgIHF1ZXJ5LmNhbGwobnVsbCwgcGFyYW1zKTsKKyAgfTsKKworICByZXR1cm4gUXVlcnk7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duL2F0dGFjaENvbnRhaW5lcicsWworCitdLCBmdW5jdGlvbiAoKSB7CisgIGZ1bmN0aW9uIEF0dGFjaENvbnRhaW5lciAoZGVjb3JhdGVkLCAkZWxlbWVudCwgb3B0aW9ucykgeworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsICRlbGVtZW50LCBvcHRpb25zKTsKKyAgfQorCisgIEF0dGFjaENvbnRhaW5lci5wcm90b3R5cGUucG9zaXRpb24gPQorICAgIGZ1bmN0aW9uIChkZWNvcmF0ZWQsICRkcm9wZG93biwgJGNvbnRhaW5lcikgeworICAgIHZhciAkZHJvcGRvd25Db250YWluZXIgPSAkY29udGFpbmVyLmZpbmQoJy5kcm9wZG93bi13cmFwcGVyJyk7CisgICAgJGRyb3Bkb3duQ29udGFpbmVyLmFwcGVuZCgkZHJvcGRvd24pOworCisgICAgJGRyb3Bkb3duLmFkZENsYXNzKCdzZWxlY3QyLWRyb3Bkb3duLS1iZWxvdycpOworICAgICRjb250YWluZXIuYWRkQ2xhc3MoJ3NlbGVjdDItY29udGFpbmVyLS1iZWxvdycpOworICB9OworCisgIHJldHVybiBBdHRhY2hDb250YWluZXI7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duL3N0b3BQcm9wYWdhdGlvbicsWworCitdLCBmdW5jdGlvbiAoKSB7CisgIGZ1bmN0aW9uIFN0b3BQcm9wYWdhdGlvbiAoKSB7IH0KKworICBTdG9wUHJvcGFnYXRpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIsICRjb250YWluZXIpIHsKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBjb250YWluZXIsICRjb250YWluZXIpOworCisgICAgdmFyIHN0b3BwZWRFdmVudHMgPSBbCisgICAgJ2JsdXInLAorICAgICdjaGFuZ2UnLAorICAgICdjbGljaycsCisgICAgJ2RibGNsaWNrJywKKyAgICAnZm9jdXMnLAorICAgICdmb2N1c2luJywKKyAgICAnZm9jdXNvdXQnLAorICAgICdpbnB1dCcsCisgICAgJ2tleWRvd24nLAorICAgICdrZXl1cCcsCisgICAgJ2tleXByZXNzJywKKyAgICAnbW91c2Vkb3duJywKKyAgICAnbW91c2VlbnRlcicsCisgICAgJ21vdXNlbGVhdmUnLAorICAgICdtb3VzZW1vdmUnLAorICAgICdtb3VzZW92ZXInLAorICAgICdtb3VzZXVwJywKKyAgICAnc2VhcmNoJywKKyAgICAndG91Y2hlbmQnLAorICAgICd0b3VjaHN0YXJ0JworICAgIF07CisKKyAgICB0aGlzLiRkcm9wZG93bi5vbihzdG9wcGVkRXZlbnRzLmpvaW4oJyAnKSwgZnVuY3Rpb24gKGV2dCkgeworICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpOworICAgIH0pOworICB9OworCisgIHJldHVybiBTdG9wUHJvcGFnYXRpb247Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL3NlbGVjdGlvbi9zdG9wUHJvcGFnYXRpb24nLFsKKworXSwgZnVuY3Rpb24gKCkgeworICBmdW5jdGlvbiBTdG9wUHJvcGFnYXRpb24gKCkgeyB9CisKKyAgU3RvcFByb3BhZ2F0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgY29udGFpbmVyLCAkY29udGFpbmVyKSB7CisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgY29udGFpbmVyLCAkY29udGFpbmVyKTsKKworICAgIHZhciBzdG9wcGVkRXZlbnRzID0gWworICAgICAgJ2JsdXInLAorICAgICAgJ2NoYW5nZScsCisgICAgICAnY2xpY2snLAorICAgICAgJ2RibGNsaWNrJywKKyAgICAgICdmb2N1cycsCisgICAgICAnZm9jdXNpbicsCisgICAgICAnZm9jdXNvdXQnLAorICAgICAgJ2lucHV0JywKKyAgICAgICdrZXlkb3duJywKKyAgICAgICdrZXl1cCcsCisgICAgICAna2V5cHJlc3MnLAorICAgICAgJ21vdXNlZG93bicsCisgICAgICAnbW91c2VlbnRlcicsCisgICAgICAnbW91c2VsZWF2ZScsCisgICAgICAnbW91c2Vtb3ZlJywKKyAgICAgICdtb3VzZW92ZXInLAorICAgICAgJ21vdXNldXAnLAorICAgICAgJ3NlYXJjaCcsCisgICAgICAndG91Y2hlbmQnLAorICAgICAgJ3RvdWNoc3RhcnQnCisgICAgXTsKKworICAgIHRoaXMuJHNlbGVjdGlvbi5vbihzdG9wcGVkRXZlbnRzLmpvaW4oJyAnKSwgZnVuY3Rpb24gKGV2dCkgeworICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpOworICAgIH0pOworICB9OworCisgIHJldHVybiBTdG9wUHJvcGFnYXRpb247Cit9KTsKKworLyohCisgKiBqUXVlcnkgTW91c2V3aGVlbCAzLjEuMTMKKyAqCisgKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycworICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCisgKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCisgKi8KKworKGZ1bmN0aW9uIChmYWN0b3J5KSB7CisgICAgaWYgKCB0eXBlb2YgUzIuZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIFMyLmRlZmluZS5hbWQgKSB7CisgICAgICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS4KKyAgICAgICAgUzIuZGVmaW5lKCdqcXVlcnktbW91c2V3aGVlbCcsWydqcXVlcnknXSwgZmFjdG9yeSk7CisgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHsKKyAgICAgICAgLy8gTm9kZS9Db21tb25KUyBzdHlsZSBmb3IgQnJvd3NlcmlmeQorICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3Rvcnk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQnJvd3NlciBnbG9iYWxzCisgICAgICAgIGZhY3RvcnkoalF1ZXJ5KTsKKyAgICB9Cit9KGZ1bmN0aW9uICgkKSB7CisKKyAgICB2YXIgdG9GaXggID0gWyd3aGVlbCcsICdtb3VzZXdoZWVsJywgJ0RPTU1vdXNlU2Nyb2xsJywgJ01vek1vdXNlUGl4ZWxTY3JvbGwnXSwKKyAgICAgICAgdG9CaW5kID0gKCAnb253aGVlbCcgaW4gZG9jdW1lbnQgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlID49IDkgKSA/CisgICAgICAgICAgICAgICAgICAgIFsnd2hlZWwnXSA6IFsnbW91c2V3aGVlbCcsICdEb21Nb3VzZVNjcm9sbCcsICdNb3pNb3VzZVBpeGVsU2Nyb2xsJ10sCisgICAgICAgIHNsaWNlICA9IEFycmF5LnByb3RvdHlwZS5zbGljZSwKKyAgICAgICAgbnVsbExvd2VzdERlbHRhVGltZW91dCwgbG93ZXN0RGVsdGE7CisKKyAgICBpZiAoICQuZXZlbnQuZml4SG9va3MgKSB7CisgICAgICAgIGZvciAoIHZhciBpID0gdG9GaXgubGVuZ3RoOyBpOyApIHsKKyAgICAgICAgICAgICQuZXZlbnQuZml4SG9va3NbIHRvRml4Wy0taV0gXSA9ICQuZXZlbnQubW91c2VIb29rczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZhciBzcGVjaWFsID0gJC5ldmVudC5zcGVjaWFsLm1vdXNld2hlZWwgPSB7CisgICAgICAgIHZlcnNpb246ICczLjEuMTInLAorCisgICAgICAgIHNldHVwOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICggdGhpcy5hZGRFdmVudExpc3RlbmVyICkgeworICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gdG9CaW5kLmxlbmd0aDsgaTsgKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lciggdG9CaW5kWy0taV0sIGhhbmRsZXIsIGZhbHNlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLm9ubW91c2V3aGVlbCA9IGhhbmRsZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBTdG9yZSB0aGUgbGluZSBoZWlnaHQgYW5kIHBhZ2UgaGVpZ2h0IGZvciB0aGlzIHBhcnRpY3VsYXIgZWxlbWVudAorICAgICAgICAgICAgJC5kYXRhKHRoaXMsICdtb3VzZXdoZWVsLWxpbmUtaGVpZ2h0Jywgc3BlY2lhbC5nZXRMaW5lSGVpZ2h0KHRoaXMpKTsKKyAgICAgICAgICAgICQuZGF0YSh0aGlzLCAnbW91c2V3aGVlbC1wYWdlLWhlaWdodCcsIHNwZWNpYWwuZ2V0UGFnZUhlaWdodCh0aGlzKSk7CisgICAgICAgIH0sCisKKyAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKCB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSB0b0JpbmQubGVuZ3RoOyBpOyApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCB0b0JpbmRbLS1pXSwgaGFuZGxlciwgZmFsc2UgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMub25tb3VzZXdoZWVsID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENsZWFuIHVwIHRoZSBkYXRhIHdlIGFkZGVkIHRvIHRoZSBlbGVtZW50CisgICAgICAgICAgICAkLnJlbW92ZURhdGEodGhpcywgJ21vdXNld2hlZWwtbGluZS1oZWlnaHQnKTsKKyAgICAgICAgICAgICQucmVtb3ZlRGF0YSh0aGlzLCAnbW91c2V3aGVlbC1wYWdlLWhlaWdodCcpOworICAgICAgICB9LAorCisgICAgICAgIGdldExpbmVIZWlnaHQ6IGZ1bmN0aW9uKGVsZW0pIHsKKyAgICAgICAgICAgIHZhciAkZWxlbSA9ICQoZWxlbSksCisgICAgICAgICAgICAgICAgJHBhcmVudCA9ICRlbGVtWydvZmZzZXRQYXJlbnQnIGluICQuZm4gPyAnb2Zmc2V0UGFyZW50JyA6ICdwYXJlbnQnXSgpOworICAgICAgICAgICAgaWYgKCEkcGFyZW50Lmxlbmd0aCkgeworICAgICAgICAgICAgICAgICRwYXJlbnQgPSAkKCdib2R5Jyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoJHBhcmVudC5jc3MoJ2ZvbnRTaXplJyksIDEwKSB8fCBwYXJzZUludCgkZWxlbS5jc3MoJ2ZvbnRTaXplJyksIDEwKSB8fCAxNjsKKyAgICAgICAgfSwKKworICAgICAgICBnZXRQYWdlSGVpZ2h0OiBmdW5jdGlvbihlbGVtKSB7CisgICAgICAgICAgICByZXR1cm4gJChlbGVtKS5oZWlnaHQoKTsKKyAgICAgICAgfSwKKworICAgICAgICBzZXR0aW5nczogeworICAgICAgICAgICAgYWRqdXN0T2xkRGVsdGFzOiB0cnVlLCAvLyBzZWUgc2hvdWxkQWRqdXN0T2xkRGVsdGFzKCkgYmVsb3cKKyAgICAgICAgICAgIG5vcm1hbGl6ZU9mZnNldDogdHJ1ZSAgLy8gY2FsbHMgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZvciBlYWNoIGV2ZW50CisgICAgICAgIH0KKyAgICB9OworCisgICAgJC5mbi5leHRlbmQoeworICAgICAgICBtb3VzZXdoZWVsOiBmdW5jdGlvbihmbikgeworICAgICAgICAgICAgcmV0dXJuIGZuID8gdGhpcy5iaW5kKCdtb3VzZXdoZWVsJywgZm4pIDogdGhpcy50cmlnZ2VyKCdtb3VzZXdoZWVsJyk7CisgICAgICAgIH0sCisKKyAgICAgICAgdW5tb3VzZXdoZWVsOiBmdW5jdGlvbihmbikgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5iaW5kKCdtb3VzZXdoZWVsJywgZm4pOworICAgICAgICB9CisgICAgfSk7CisKKworICAgIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHsKKyAgICAgICAgdmFyIG9yZ0V2ZW50ICAgPSBldmVudCB8fCB3aW5kb3cuZXZlbnQsCisgICAgICAgICAgICBhcmdzICAgICAgID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLAorICAgICAgICAgICAgZGVsdGEgICAgICA9IDAsCisgICAgICAgICAgICBkZWx0YVggICAgID0gMCwKKyAgICAgICAgICAgIGRlbHRhWSAgICAgPSAwLAorICAgICAgICAgICAgYWJzRGVsdGEgICA9IDAsCisgICAgICAgICAgICBvZmZzZXRYICAgID0gMCwKKyAgICAgICAgICAgIG9mZnNldFkgICAgPSAwOworICAgICAgICBldmVudCA9ICQuZXZlbnQuZml4KG9yZ0V2ZW50KTsKKyAgICAgICAgZXZlbnQudHlwZSA9ICdtb3VzZXdoZWVsJzsKKworICAgICAgICAvLyBPbGQgc2Nob29sIHNjcm9sbHdoZWVsIGRlbHRhCisgICAgICAgIGlmICggJ2RldGFpbCcgICAgICBpbiBvcmdFdmVudCApIHsgZGVsdGFZID0gb3JnRXZlbnQuZGV0YWlsICogLTE7ICAgICAgfQorICAgICAgICBpZiAoICd3aGVlbERlbHRhJyAgaW4gb3JnRXZlbnQgKSB7IGRlbHRhWSA9IG9yZ0V2ZW50LndoZWVsRGVsdGE7ICAgICAgIH0KKyAgICAgICAgaWYgKCAnd2hlZWxEZWx0YVknIGluIG9yZ0V2ZW50ICkgeyBkZWx0YVkgPSBvcmdFdmVudC53aGVlbERlbHRhWTsgICAgICB9CisgICAgICAgIGlmICggJ3doZWVsRGVsdGFYJyBpbiBvcmdFdmVudCApIHsgZGVsdGFYID0gb3JnRXZlbnQud2hlZWxEZWx0YVggKiAtMTsgfQorCisgICAgICAgIC8vIEZpcmVmb3ggPCAxNyBob3Jpem9udGFsIHNjcm9sbGluZyByZWxhdGVkIHRvIERPTU1vdXNlU2Nyb2xsIGV2ZW50CisgICAgICAgIGlmICggJ2F4aXMnIGluIG9yZ0V2ZW50ICYmIG9yZ0V2ZW50LmF4aXMgPT09IG9yZ0V2ZW50LkhPUklaT05UQUxfQVhJUyApIHsKKyAgICAgICAgICAgIGRlbHRhWCA9IGRlbHRhWSAqIC0xOworICAgICAgICAgICAgZGVsdGFZID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNldCBkZWx0YSB0byBiZSBkZWx0YVkgb3IgZGVsdGFYIGlmIGRlbHRhWSBpcyAwIGZvciBiYWNrd2FyZHMgY29tcGF0YWJpbGl0aXkKKyAgICAgICAgZGVsdGEgPSBkZWx0YVkgPT09IDAgPyBkZWx0YVggOiBkZWx0YVk7CisKKyAgICAgICAgLy8gTmV3IHNjaG9vbCB3aGVlbCBkZWx0YSAod2hlZWwgZXZlbnQpCisgICAgICAgIGlmICggJ2RlbHRhWScgaW4gb3JnRXZlbnQgKSB7CisgICAgICAgICAgICBkZWx0YVkgPSBvcmdFdmVudC5kZWx0YVkgKiAtMTsKKyAgICAgICAgICAgIGRlbHRhICA9IGRlbHRhWTsKKyAgICAgICAgfQorICAgICAgICBpZiAoICdkZWx0YVgnIGluIG9yZ0V2ZW50ICkgeworICAgICAgICAgICAgZGVsdGFYID0gb3JnRXZlbnQuZGVsdGFYOworICAgICAgICAgICAgaWYgKCBkZWx0YVkgPT09IDAgKSB7IGRlbHRhICA9IGRlbHRhWCAqIC0xOyB9CisgICAgICAgIH0KKworICAgICAgICAvLyBObyBjaGFuZ2UgYWN0dWFsbHkgaGFwcGVuZWQsIG5vIHJlYXNvbiB0byBnbyBhbnkgZnVydGhlcgorICAgICAgICBpZiAoIGRlbHRhWSA9PT0gMCAmJiBkZWx0YVggPT09IDAgKSB7IHJldHVybjsgfQorCisgICAgICAgIC8vIE5lZWQgdG8gY29udmVydCBsaW5lcyBhbmQgcGFnZXMgdG8gcGl4ZWxzIGlmIHdlIGFyZW4ndCBhbHJlYWR5IGluIHBpeGVscworICAgICAgICAvLyBUaGVyZSBhcmUgdGhyZWUgZGVsdGEgbW9kZXM6CisgICAgICAgIC8vICAgKiBkZWx0YU1vZGUgMCBpcyBieSBwaXhlbHMsIG5vdGhpbmcgdG8gZG8KKyAgICAgICAgLy8gICAqIGRlbHRhTW9kZSAxIGlzIGJ5IGxpbmVzCisgICAgICAgIC8vICAgKiBkZWx0YU1vZGUgMiBpcyBieSBwYWdlcworICAgICAgICBpZiAoIG9yZ0V2ZW50LmRlbHRhTW9kZSA9PT0gMSApIHsKKyAgICAgICAgICAgIHZhciBsaW5lSGVpZ2h0ID0gJC5kYXRhKHRoaXMsICdtb3VzZXdoZWVsLWxpbmUtaGVpZ2h0Jyk7CisgICAgICAgICAgICBkZWx0YSAgKj0gbGluZUhlaWdodDsKKyAgICAgICAgICAgIGRlbHRhWSAqPSBsaW5lSGVpZ2h0OworICAgICAgICAgICAgZGVsdGFYICo9IGxpbmVIZWlnaHQ7CisgICAgICAgIH0gZWxzZSBpZiAoIG9yZ0V2ZW50LmRlbHRhTW9kZSA9PT0gMiApIHsKKyAgICAgICAgICAgIHZhciBwYWdlSGVpZ2h0ID0gJC5kYXRhKHRoaXMsICdtb3VzZXdoZWVsLXBhZ2UtaGVpZ2h0Jyk7CisgICAgICAgICAgICBkZWx0YSAgKj0gcGFnZUhlaWdodDsKKyAgICAgICAgICAgIGRlbHRhWSAqPSBwYWdlSGVpZ2h0OworICAgICAgICAgICAgZGVsdGFYICo9IHBhZ2VIZWlnaHQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBTdG9yZSBsb3dlc3QgYWJzb2x1dGUgZGVsdGEgdG8gbm9ybWFsaXplIHRoZSBkZWx0YSB2YWx1ZXMKKyAgICAgICAgYWJzRGVsdGEgPSBNYXRoLm1heCggTWF0aC5hYnMoZGVsdGFZKSwgTWF0aC5hYnMoZGVsdGFYKSApOworCisgICAgICAgIGlmICggIWxvd2VzdERlbHRhIHx8IGFic0RlbHRhIDwgbG93ZXN0RGVsdGEgKSB7CisgICAgICAgICAgICBsb3dlc3REZWx0YSA9IGFic0RlbHRhOworCisgICAgICAgICAgICAvLyBBZGp1c3Qgb2xkZXIgZGVsdGFzIGlmIG5lY2Vzc2FyeQorICAgICAgICAgICAgaWYgKCBzaG91bGRBZGp1c3RPbGREZWx0YXMob3JnRXZlbnQsIGFic0RlbHRhKSApIHsKKyAgICAgICAgICAgICAgICBsb3dlc3REZWx0YSAvPSA0MDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkanVzdCBvbGRlciBkZWx0YXMgaWYgbmVjZXNzYXJ5CisgICAgICAgIGlmICggc2hvdWxkQWRqdXN0T2xkRGVsdGFzKG9yZ0V2ZW50LCBhYnNEZWx0YSkgKSB7CisgICAgICAgICAgICAvLyBEaXZpZGUgYWxsIHRoZSB0aGluZ3MgYnkgNDAhCisgICAgICAgICAgICBkZWx0YSAgLz0gNDA7CisgICAgICAgICAgICBkZWx0YVggLz0gNDA7CisgICAgICAgICAgICBkZWx0YVkgLz0gNDA7CisgICAgICAgIH0KKworICAgICAgICAvLyBHZXQgYSB3aG9sZSwgbm9ybWFsaXplZCB2YWx1ZSBmb3IgdGhlIGRlbHRhcworICAgICAgICBkZWx0YSAgPSBNYXRoWyBkZWx0YSAgPj0gMSA/ICdmbG9vcicgOiAnY2VpbCcgXShkZWx0YSAgLyBsb3dlc3REZWx0YSk7CisgICAgICAgIGRlbHRhWCA9IE1hdGhbIGRlbHRhWCA+PSAxID8gJ2Zsb29yJyA6ICdjZWlsJyBdKGRlbHRhWCAvIGxvd2VzdERlbHRhKTsKKyAgICAgICAgZGVsdGFZID0gTWF0aFsgZGVsdGFZID49IDEgPyAnZmxvb3InIDogJ2NlaWwnIF0oZGVsdGFZIC8gbG93ZXN0RGVsdGEpOworCisgICAgICAgIC8vIE5vcm1hbGlzZSBvZmZzZXRYIGFuZCBvZmZzZXRZIHByb3BlcnRpZXMKKyAgICAgICAgaWYgKCBzcGVjaWFsLnNldHRpbmdzLm5vcm1hbGl6ZU9mZnNldCAmJiB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCApIHsKKyAgICAgICAgICAgIHZhciBib3VuZGluZ1JlY3QgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAgICAgICAgb2Zmc2V0WCA9IGV2ZW50LmNsaWVudFggLSBib3VuZGluZ1JlY3QubGVmdDsKKyAgICAgICAgICAgIG9mZnNldFkgPSBldmVudC5jbGllbnRZIC0gYm91bmRpbmdSZWN0LnRvcDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkZCBpbmZvcm1hdGlvbiB0byB0aGUgZXZlbnQgb2JqZWN0CisgICAgICAgIGV2ZW50LmRlbHRhWCA9IGRlbHRhWDsKKyAgICAgICAgZXZlbnQuZGVsdGFZID0gZGVsdGFZOworICAgICAgICBldmVudC5kZWx0YUZhY3RvciA9IGxvd2VzdERlbHRhOworICAgICAgICBldmVudC5vZmZzZXRYID0gb2Zmc2V0WDsKKyAgICAgICAgZXZlbnQub2Zmc2V0WSA9IG9mZnNldFk7CisgICAgICAgIC8vIEdvIGFoZWFkIGFuZCBzZXQgZGVsdGFNb2RlIHRvIDAgc2luY2Ugd2UgY29udmVydGVkIHRvIHBpeGVscworICAgICAgICAvLyBBbHRob3VnaCB0aGlzIGlzIGEgbGl0dGxlIG9kZCBzaW5jZSB3ZSBvdmVyd3JpdGUgdGhlIGRlbHRhWC9ZCisgICAgICAgIC8vIHByb3BlcnRpZXMgd2l0aCBub3JtYWxpemVkIGRlbHRhcy4KKyAgICAgICAgZXZlbnQuZGVsdGFNb2RlID0gMDsKKworICAgICAgICAvLyBBZGQgZXZlbnQgYW5kIGRlbHRhIHRvIHRoZSBmcm9udCBvZiB0aGUgYXJndW1lbnRzCisgICAgICAgIGFyZ3MudW5zaGlmdChldmVudCwgZGVsdGEsIGRlbHRhWCwgZGVsdGFZKTsKKworICAgICAgICAvLyBDbGVhcm91dCBsb3dlc3REZWx0YSBhZnRlciBzb21ldGltZSB0byBiZXR0ZXIKKyAgICAgICAgLy8gaGFuZGxlIG11bHRpcGxlIGRldmljZSB0eXBlcyB0aGF0IGdpdmUgZGlmZmVyZW50CisgICAgICAgIC8vIGEgZGlmZmVyZW50IGxvd2VzdERlbHRhCisgICAgICAgIC8vIEV4OiB0cmFja3BhZCA9IDMgYW5kIG1vdXNlIHdoZWVsID0gMTIwCisgICAgICAgIGlmIChudWxsTG93ZXN0RGVsdGFUaW1lb3V0KSB7IGNsZWFyVGltZW91dChudWxsTG93ZXN0RGVsdGFUaW1lb3V0KTsgfQorICAgICAgICBudWxsTG93ZXN0RGVsdGFUaW1lb3V0ID0gc2V0VGltZW91dChudWxsTG93ZXN0RGVsdGEsIDIwMCk7CisKKyAgICAgICAgcmV0dXJuICgkLmV2ZW50LmRpc3BhdGNoIHx8ICQuZXZlbnQuaGFuZGxlKS5hcHBseSh0aGlzLCBhcmdzKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBudWxsTG93ZXN0RGVsdGEoKSB7CisgICAgICAgIGxvd2VzdERlbHRhID0gbnVsbDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzaG91bGRBZGp1c3RPbGREZWx0YXMob3JnRXZlbnQsIGFic0RlbHRhKSB7CisgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gb2xkZXIgZXZlbnQgYW5kIHRoZSBkZWx0YSBpcyBkaXZpc2FibGUgYnkgMTIwLAorICAgICAgICAvLyB0aGVuIHdlIGFyZSBhc3N1bWluZyB0aGF0IHRoZSBicm93c2VyIGlzIHRyZWF0aW5nIHRoaXMgYXMgYW4KKyAgICAgICAgLy8gb2xkZXIgbW91c2Ugd2hlZWwgZXZlbnQgYW5kIHRoYXQgd2Ugc2hvdWxkIGRpdmlkZSB0aGUgZGVsdGFzCisgICAgICAgIC8vIGJ5IDQwIHRvIHRyeSBhbmQgZ2V0IGEgbW9yZSB1c2FibGUgZGVsdGFGYWN0b3IuCisgICAgICAgIC8vIFNpZGUgbm90ZSwgdGhpcyBhY3R1YWxseSBpbXBhY3RzIHRoZSByZXBvcnRlZCBzY3JvbGwgZGlzdGFuY2UKKyAgICAgICAgLy8gaW4gb2xkZXIgYnJvd3NlcnMgYW5kIGNhbiBjYXVzZSBzY3JvbGxpbmcgdG8gYmUgc2xvd2VyIHRoYW4gbmF0aXZlLgorICAgICAgICAvLyBUdXJuIHRoaXMgb2ZmIGJ5IHNldHRpbmcgJC5ldmVudC5zcGVjaWFsLm1vdXNld2hlZWwuc2V0dGluZ3MuYWRqdXN0T2xkRGVsdGFzIHRvIGZhbHNlLgorICAgICAgICByZXR1cm4gc3BlY2lhbC5zZXR0aW5ncy5hZGp1c3RPbGREZWx0YXMgJiYgb3JnRXZlbnQudHlwZSA9PT0gJ21vdXNld2hlZWwnICYmIGFic0RlbHRhICUgMTIwID09PSAwOworICAgIH0KKworfSkpOworCitTMi5kZWZpbmUoJ2pxdWVyeS5zZWxlY3QyJyxbCisgICdqcXVlcnknLAorICAnanF1ZXJ5LW1vdXNld2hlZWwnLAorCisgICcuL3NlbGVjdDIvY29yZScsCisgICcuL3NlbGVjdDIvZGVmYXVsdHMnLAorICAnLi9zZWxlY3QyL3V0aWxzJworXSwgZnVuY3Rpb24gKCQsIF8sIFNlbGVjdDIsIERlZmF1bHRzLCBVdGlscykgeworICBpZiAoJC5mbi5zZWxlY3QyID09IG51bGwpIHsKKyAgICAvLyBBbGwgbWV0aG9kcyB0aGF0IHNob3VsZCByZXR1cm4gdGhlIGVsZW1lbnQKKyAgICB2YXIgdGhpc01ldGhvZHMgPSBbJ29wZW4nLCAnY2xvc2UnLCAnZGVzdHJveSddOworCisgICAgJC5mbi5zZWxlY3QyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworCisgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnKSB7CisgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgdmFyIGluc3RhbmNlT3B0aW9ucyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBvcHRpb25zKTsKKworICAgICAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBTZWxlY3QyKCQodGhpcyksIGluc3RhbmNlT3B0aW9ucyk7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiB0aGlzOworICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgdmFyIHJldDsKKyAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOworCisgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgdmFyIGluc3RhbmNlID0gVXRpbHMuR2V0RGF0YSh0aGlzLCAnc2VsZWN0MicpOworCisgICAgICAgICAgaWYgKGluc3RhbmNlID09IG51bGwgJiYgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5lcnJvcikgeworICAgICAgICAgICAgY29uc29sZS5lcnJvcigKKyAgICAgICAgICAgICAgJ1RoZSBzZWxlY3QyKFwnJyArIG9wdGlvbnMgKyAnXCcpIG1ldGhvZCB3YXMgY2FsbGVkIG9uIGFuICcgKworICAgICAgICAgICAgICAnZWxlbWVudCB0aGF0IGlzIG5vdCB1c2luZyBTZWxlY3QyLicKKyAgICAgICAgICAgICk7CisgICAgICAgICAgfQorCisgICAgICAgICAgcmV0ID0gaW5zdGFuY2Vbb3B0aW9uc10uYXBwbHkoaW5zdGFuY2UsIGFyZ3MpOworICAgICAgICB9KTsKKworICAgICAgICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgYmUgcmV0dXJuaW5nIGB0aGlzYAorICAgICAgICBpZiAoJC5pbkFycmF5KG9wdGlvbnMsIHRoaXNNZXRob2RzKSA+IC0xKSB7CisgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyBmb3IgU2VsZWN0MjogJyArIG9wdGlvbnMpOworICAgICAgfQorICAgIH07CisgIH0KKworICBpZiAoJC5mbi5zZWxlY3QyLmRlZmF1bHRzID09IG51bGwpIHsKKyAgICAkLmZuLnNlbGVjdDIuZGVmYXVsdHMgPSBEZWZhdWx0czsKKyAgfQorCisgIHJldHVybiBTZWxlY3QyOworfSk7CisKKyAgLy8gUmV0dXJuIHRoZSBBTUQgbG9hZGVyIGNvbmZpZ3VyYXRpb24gc28gaXQgY2FuIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGlzIGZpbGUKKyAgcmV0dXJuIHsKKyAgICBkZWZpbmU6IFMyLmRlZmluZSwKKyAgICByZXF1aXJlOiBTMi5yZXF1aXJlCisgIH07Cit9KCkpOworCisgIC8vIEF1dG9sb2FkIHRoZSBqUXVlcnkgYmluZGluZ3MKKyAgLy8gV2Uga25vdyB0aGF0IGFsbCBvZiB0aGUgbW9kdWxlcyBleGlzdCBhYm92ZSB0aGlzLCBzbyB3ZSdyZSBzYWZlCisgIHZhciBzZWxlY3QyID0gUzIucmVxdWlyZSgnanF1ZXJ5LnNlbGVjdDInKTsKKworICAvLyBIb2xkIHRoZSBBTUQgbW9kdWxlIHJlZmVyZW5jZXMgb24gdGhlIGpRdWVyeSBmdW5jdGlvbiB0aGF0IHdhcyBqdXN0IGxvYWRlZAorICAvLyBUaGlzIGFsbG93cyBTZWxlY3QyIHRvIHVzZSB0aGUgaW50ZXJuYWwgbG9hZGVyIG91dHNpZGUgb2YgdGhpcyBmaWxlLCBzdWNoCisgIC8vIGFzIGluIHRoZSBsYW5ndWFnZSBmaWxlcy4KKyAgalF1ZXJ5LmZuLnNlbGVjdDIuYW1kID0gUzI7CisKKyAgLy8gUmV0dXJuIHRoZSBTZWxlY3QyIGluc3RhbmNlIGZvciBhbnlvbmUgd2hvIGlzIGltcG9ydGluZyBpdC4KKyAgcmV0dXJuIHNlbGVjdDI7Cit9KSk7CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9zZWxlY3QyLmZ1bGwubWluLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvc2VsZWN0Mi5mdWxsLm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjRlZmViCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvc2VsZWN0Mi5mdWxsLm1pbi5qcwpAQCAtMCwwICsxIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovIWZ1bmN0aW9uKGEpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsianF1ZXJ5Il0sYSk6Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKGIsYyl7cmV0dXJuIHZvaWQgMD09PWMmJihjPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3JlcXVpcmUoImpxdWVyeSIpOnJlcXVpcmUoImpxdWVyeSIpKGIpKSxhKGMpLGN9OmEoalF1ZXJ5KX0oZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXtpZihhJiZhLmZuJiZhLmZuLnNlbGVjdDImJmEuZm4uc2VsZWN0Mi5hbWQpdmFyIGI9YS5mbi5zZWxlY3QyLmFtZDt2YXIgYjtyZXR1cm4gZnVuY3Rpb24oKXtpZighYnx8IWIucmVxdWlyZWpzKXtiP2M9YjpiPXt9O3ZhciBhLGMsZDshZnVuY3Rpb24oYil7ZnVuY3Rpb24gZShhLGIpe3JldHVybiB2LmNhbGwoYSxiKX1mdW5jdGlvbiBmKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG89YiYmYi5zcGxpdCgiLyIpLHA9dC5tYXAscT1wJiZwWyIqIl18fHt9O2lmKGEpe2ZvcihhPWEuc3BsaXQoIi8iKSxnPWEubGVuZ3RoLTEsdC5ub2RlSWRDb21wYXQmJngudGVzdChhW2ddKSYmKGFbZ109YVtnXS5yZXBsYWNlKHgsIiIpKSwiLiI9PT1hWzBdLmNoYXJBdCgwKSYmbyYmKG49by5zbGljZSgwLG8ubGVuZ3RoLTEpLGE9bi5jb25jYXQoYSkpLGs9MDtrPGEubGVuZ3RoO2srKylpZigiLiI9PT0obT1hW2tdKSlhLnNwbGljZShrLDEpLGstPTE7ZWxzZSBpZigiLi4iPT09bSl7aWYoMD09PWt8fDE9PT1rJiYiLi4iPT09YVsyXXx8Ii4uIj09PWFbay0xXSljb250aW51ZTtrPjAmJihhLnNwbGljZShrLTEsMiksay09Mil9YT1hLmpvaW4oIi8iKX1pZigob3x8cSkmJnApe2ZvcihjPWEuc3BsaXQoIi8iKSxrPWMubGVuZ3RoO2s+MDtrLT0xKXtpZihkPWMuc2xpY2UoMCxrKS5qb2luKCIvIiksbylmb3IobD1vLmxlbmd0aDtsPjA7bC09MSlpZigoZT1wW28uc2xpY2UoMCxsKS5qb2luKCIvIildKSYmKGU9ZVtkXSkpe2Y9ZSxoPWs7YnJlYWt9aWYoZilicmVhazshaSYmcSYmcVtkXSYmKGk9cVtkXSxqPWspfSFmJiZpJiYoZj1pLGg9aiksZiYmKGMuc3BsaWNlKDAsaCxmKSxhPWMuam9pbigiLyIpKX1yZXR1cm4gYX1mdW5jdGlvbiBnKGEsYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9dy5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGRbMF0mJjE9PT1kLmxlbmd0aCYmZC5wdXNoKG51bGwpLG8uYXBwbHkoYixkLmNvbmNhdChbYSxjXSkpfX1mdW5jdGlvbiBoKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZihiLGEpfX1mdW5jdGlvbiBpKGEpe3JldHVybiBmdW5jdGlvbihiKXtyW2FdPWJ9fWZ1bmN0aW9uIGooYSl7aWYoZShzLGEpKXt2YXIgYz1zW2FdO2RlbGV0ZSBzW2FdLHVbYV09ITAsbi5hcHBseShiLGMpfWlmKCFlKHIsYSkmJiFlKHUsYSkpdGhyb3cgbmV3IEVycm9yKCJObyAiK2EpO3JldHVybiByW2FdfWZ1bmN0aW9uIGsoYSl7dmFyIGIsYz1hP2EuaW5kZXhPZigiISIpOi0xO3JldHVybiBjPi0xJiYoYj1hLnN1YnN0cmluZygwLGMpLGE9YS5zdWJzdHJpbmcoYysxLGEubGVuZ3RoKSksW2IsYV19ZnVuY3Rpb24gbChhKXtyZXR1cm4gYT9rKGEpOltdfWZ1bmN0aW9uIG0oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQmJnQuY29uZmlnJiZ0LmNvbmZpZ1thXXx8e319fXZhciBuLG8scCxxLHI9e30scz17fSx0PXt9LHU9e30sdj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHc9W10uc2xpY2UseD0vXC5qcyQvO3A9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPWsoYSksZT1kWzBdLGc9YlsxXTtyZXR1cm4gYT1kWzFdLGUmJihlPWYoZSxnKSxjPWooZSkpLGU/YT1jJiZjLm5vcm1hbGl6ZT9jLm5vcm1hbGl6ZShhLGgoZykpOmYoYSxnKTooYT1mKGEsZyksZD1rKGEpLGU9ZFswXSxhPWRbMV0sZSYmKGM9aihlKSkpLHtmOmU/ZSsiISIrYTphLG46YSxwcjplLHA6Y319LHE9e3JlcXVpcmU6ZnVuY3Rpb24oYSl7cmV0dXJuIGcoYSl9LGV4cG9ydHM6ZnVuY3Rpb24oYSl7dmFyIGI9clthXTtyZXR1cm4gdm9pZCAwIT09Yj9iOnJbYV09e319LG1vZHVsZTpmdW5jdGlvbihhKXtyZXR1cm57aWQ6YSx1cmk6IiIsZXhwb3J0czpyW2FdLGNvbmZpZzptKGEpfX19LG49ZnVuY3Rpb24oYSxjLGQsZil7dmFyIGgsayxtLG4sbyx0LHYsdz1bXSx4PXR5cGVvZiBkO2lmKGY9Znx8YSx0PWwoZiksInVuZGVmaW5lZCI9PT14fHwiZnVuY3Rpb24iPT09eCl7Zm9yKGM9IWMubGVuZ3RoJiZkLmxlbmd0aD9bInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl06YyxvPTA7bzxjLmxlbmd0aDtvKz0xKWlmKG49cChjW29dLHQpLCJyZXF1aXJlIj09PShrPW4uZikpd1tvXT1xLnJlcXVpcmUoYSk7ZWxzZSBpZigiZXhwb3J0cyI9PT1rKXdbb109cS5leHBvcnRzKGEpLHY9ITA7ZWxzZSBpZigibW9kdWxlIj09PWspaD13W29dPXEubW9kdWxlKGEpO2Vsc2UgaWYoZShyLGspfHxlKHMsayl8fGUodSxrKSl3W29dPWooayk7ZWxzZXtpZighbi5wKXRocm93IG5ldyBFcnJvcihhKyIgbWlzc2luZyAiK2spO24ucC5sb2FkKG4ubixnKGYsITApLGkoaykse30pLHdbb109cltrXX1tPWQ/ZC5hcHBseShyW2FdLHcpOnZvaWQgMCxhJiYoaCYmaC5leHBvcnRzIT09YiYmaC5leHBvcnRzIT09clthXT9yW2FdPWguZXhwb3J0czptPT09YiYmdnx8KHJbYV09bSkpfWVsc2UgYSYmKHJbYV09ZCl9LGE9Yz1vPWZ1bmN0aW9uKGEsYyxkLGUsZil7aWYoInN0cmluZyI9PXR5cGVvZiBhKXJldHVybiBxW2FdP3FbYV0oYyk6aihwKGEsbChjKSkuZik7aWYoIWEuc3BsaWNlKXtpZih0PWEsdC5kZXBzJiZvKHQuZGVwcyx0LmNhbGxiYWNrKSwhYylyZXR1cm47Yy5zcGxpY2U/KGE9YyxjPWQsZD1udWxsKTphPWJ9cmV0dXJuIGM9Y3x8ZnVuY3Rpb24oKXt9LCJmdW5jdGlvbiI9PXR5cGVvZiBkJiYoZD1lLGU9ZiksZT9uKGIsYSxjLGQpOnNldFRpbWVvdXQoZnVuY3Rpb24oKXtuKGIsYSxjLGQpfSw0KSxvfSxvLmNvbmZpZz1mdW5jdGlvbihhKXtyZXR1cm4gbyhhKX0sYS5fZGVmaW5lZD1yLGQ9ZnVuY3Rpb24oYSxiLGMpe2lmKCJzdHJpbmciIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoIlNlZSBhbG1vbmQgUkVBRE1FOiBpbmNvcnJlY3QgbW9kdWxlIGJ1aWxkLCBubyBtb2R1bGUgbmFtZSIpO2Iuc3BsaWNlfHwoYz1iLGI9W10pLGUocixhKXx8ZShzLGEpfHwoc1thXT1bYSxiLGNdKX0sZC5hbWQ9e2pRdWVyeTohMH19KCksYi5yZXF1aXJlanM9YSxiLnJlcXVpcmU9YyxiLmRlZmluZT1kfX0oKSxiLmRlZmluZSgiYWxtb25kIixmdW5jdGlvbigpe30pLGIuZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7dmFyIGI9YXx8JDtyZXR1cm4gbnVsbD09YiYmY29uc29sZSYmY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcigiU2VsZWN0MjogQW4gaW5zdGFuY2Ugb2YgalF1ZXJ5IG9yIGEgalF1ZXJ5LWNvbXBhdGlibGUgbGlicmFyeSB3YXMgbm90IGZvdW5kLiBNYWtlIHN1cmUgdGhhdCB5b3UgYXJlIGluY2x1ZGluZyBqUXVlcnkgYmVmb3JlIFNlbGVjdDIgb24geW91ciB3ZWIgcGFnZS4iKSxifSksYi5kZWZpbmUoInNlbGVjdDIvdXRpbHMiLFsianF1ZXJ5Il0sZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt2YXIgYj1hLnByb3RvdHlwZSxjPVtdO2Zvcih2YXIgZCBpbiBiKXsiZnVuY3Rpb24iPT10eXBlb2YgYltkXSYmKCJjb25zdHJ1Y3RvciIhPT1kJiZjLnB1c2goZCkpfXJldHVybiBjfXZhciBjPXt9O2MuRXh0ZW5kPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYygpe3RoaXMuY29uc3RydWN0b3I9YX12YXIgZD17fS5oYXNPd25Qcm9wZXJ0eTtmb3IodmFyIGUgaW4gYilkLmNhbGwoYixlKSYmKGFbZV09YltlXSk7cmV0dXJuIGMucHJvdG90eXBlPWIucHJvdG90eXBlLGEucHJvdG90eXBlPW5ldyBjLGEuX19zdXBlcl9fPWIucHJvdG90eXBlLGF9LGMuRGVjb3JhdGU9ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBkKCl7dmFyIGI9QXJyYXkucHJvdG90eXBlLnVuc2hpZnQsZD1jLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5sZW5ndGgsZT1hLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtkPjAmJihiLmNhbGwoYXJndW1lbnRzLGEucHJvdG90eXBlLmNvbnN0cnVjdG9yKSxlPWMucHJvdG90eXBlLmNvbnN0cnVjdG9yKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBlKCl7dGhpcy5jb25zdHJ1Y3Rvcj1kfXZhciBmPWIoYyksZz1iKGEpO2MuZGlzcGxheU5hbWU9YS5kaXNwbGF5TmFtZSxkLnByb3RvdHlwZT1uZXcgZTtmb3IodmFyIGg9MDtoPGcubGVuZ3RoO2grKyl7dmFyIGk9Z1toXTtkLnByb3RvdHlwZVtpXT1hLnByb3RvdHlwZVtpXX1mb3IodmFyIGo9KGZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKCl7fTthIGluIGQucHJvdG90eXBlJiYoYj1kLnByb3RvdHlwZVthXSk7dmFyIGU9Yy5wcm90b3R5cGVbYV07cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwoYXJndW1lbnRzLGIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pLGs9MDtrPGYubGVuZ3RoO2srKyl7dmFyIGw9ZltrXTtkLnByb3RvdHlwZVtsXT1qKGwpfXJldHVybiBkfTt2YXIgZD1mdW5jdGlvbigpe3RoaXMubGlzdGVuZXJzPXt9fTtkLnByb3RvdHlwZS5vbj1mdW5jdGlvbihhLGIpe3RoaXMubGlzdGVuZXJzPXRoaXMubGlzdGVuZXJzfHx7fSxhIGluIHRoaXMubGlzdGVuZXJzP3RoaXMubGlzdGVuZXJzW2FdLnB1c2goYik6dGhpcy5saXN0ZW5lcnNbYV09W2JdfSxkLnByb3RvdHlwZS50cmlnZ2VyPWZ1bmN0aW9uKGEpe3ZhciBiPUFycmF5LnByb3RvdHlwZS5zbGljZSxjPWIuY2FsbChhcmd1bWVudHMsMSk7dGhpcy5saXN0ZW5lcnM9dGhpcy5saXN0ZW5lcnN8fHt9LG51bGw9PWMmJihjPVtdKSwwPT09Yy5sZW5ndGgmJmMucHVzaCh7fSksY1swXS5fdHlwZT1hLGEgaW4gdGhpcy5saXN0ZW5lcnMmJnRoaXMuaW52b2tlKHRoaXMubGlzdGVuZXJzW2FdLGIuY2FsbChhcmd1bWVudHMsMSkpLCIqImluIHRoaXMubGlzdGVuZXJzJiZ0aGlzLmludm9rZSh0aGlzLmxpc3RlbmVyc1siKiJdLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLmludm9rZT1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKylhW2NdLmFwcGx5KHRoaXMsYil9LGMuT2JzZXJ2YWJsZT1kLGMuZ2VuZXJhdGVDaGFycz1mdW5jdGlvbihhKXtmb3IodmFyIGI9IiIsYz0wO2M8YTtjKyspe2IrPU1hdGguZmxvb3IoMzYqTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMzYpfXJldHVybiBifSxjLmJpbmQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXthLmFwcGx5KGIsYXJndW1lbnRzKX19LGMuX2NvbnZlcnREYXRhPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiBhKXt2YXIgYz1iLnNwbGl0KCItIiksZD1hO2lmKDEhPT1jLmxlbmd0aCl7Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPWNbZV07Zj1mLnN1YnN0cmluZygwLDEpLnRvTG93ZXJDYXNlKCkrZi5zdWJzdHJpbmcoMSksZiBpbiBkfHwoZFtmXT17fSksZT09Yy5sZW5ndGgtMSYmKGRbZl09YVtiXSksZD1kW2ZdfWRlbGV0ZSBhW2JdfX1yZXR1cm4gYX0sYy5oYXNTY3JvbGw9ZnVuY3Rpb24oYixjKXt2YXIgZD1hKGMpLGU9Yy5zdHlsZS5vdmVyZmxvd1gsZj1jLnN0eWxlLm92ZXJmbG93WTtyZXR1cm4oZSE9PWZ8fCJoaWRkZW4iIT09ZiYmInZpc2libGUiIT09ZikmJigic2Nyb2xsIj09PWV8fCJzY3JvbGwiPT09Znx8KGQuaW5uZXJIZWlnaHQoKTxjLnNjcm9sbEhlaWdodHx8ZC5pbm5lcldpZHRoKCk8Yy5zY3JvbGxXaWR0aCkpfSxjLmVzY2FwZU1hcmt1cD1mdW5jdGlvbihhKXt2YXIgYj17IlxcIjoiJiM5MjsiLCImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyIsIi8iOiImIzQ3OyJ9O3JldHVybiJzdHJpbmciIT10eXBlb2YgYT9hOlN0cmluZyhhKS5yZXBsYWNlKC9bJjw+IidcL1xcXS9nLGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfSl9LGMuYXBwZW5kTWFueT1mdW5jdGlvbihiLGMpe2lmKCIxLjciPT09YS5mbi5qcXVlcnkuc3Vic3RyKDAsMykpe3ZhciBkPWEoKTthLm1hcChjLGZ1bmN0aW9uKGEpe2Q9ZC5hZGQoYSl9KSxjPWR9Yi5hcHBlbmQoYyl9LGMuX19jYWNoZT17fTt2YXIgZT0wO3JldHVybiBjLkdldFVuaXF1ZUVsZW1lbnRJZD1mdW5jdGlvbihhKXt2YXIgYj1hLmdldEF0dHJpYnV0ZSgiZGF0YS1zZWxlY3QyLWlkIik7cmV0dXJuIG51bGw9PWImJihhLmlkPyhiPWEuaWQsYS5zZXRBdHRyaWJ1dGUoImRhdGEtc2VsZWN0Mi1pZCIsYikpOihhLnNldEF0dHJpYnV0ZSgiZGF0YS1zZWxlY3QyLWlkIiwrK2UpLGI9ZS50b1N0cmluZygpKSksYn0sYy5TdG9yZURhdGE9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWMuR2V0VW5pcXVlRWxlbWVudElkKGEpO2MuX19jYWNoZVtlXXx8KGMuX19jYWNoZVtlXT17fSksYy5fX2NhY2hlW2VdW2JdPWR9LGMuR2V0RGF0YT1mdW5jdGlvbihiLGQpe3ZhciBlPWMuR2V0VW5pcXVlRWxlbWVudElkKGIpO3JldHVybiBkP2MuX19jYWNoZVtlXSYmbnVsbCE9Yy5fX2NhY2hlW2VdW2RdP2MuX19jYWNoZVtlXVtkXTphKGIpLmRhdGEoZCk6Yy5fX2NhY2hlW2VdfSxjLlJlbW92ZURhdGE9ZnVuY3Rpb24oYSl7dmFyIGI9Yy5HZXRVbmlxdWVFbGVtZW50SWQoYSk7bnVsbCE9Yy5fX2NhY2hlW2JdJiZkZWxldGUgYy5fX2NhY2hlW2JdfSxjfSksYi5kZWZpbmUoInNlbGVjdDIvcmVzdWx0cyIsWyJqcXVlcnkiLCIuL3V0aWxzIl0sZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYixkKXt0aGlzLiRlbGVtZW50PWEsdGhpcy5kYXRhPWQsdGhpcy5vcHRpb25zPWIsYy5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzKX1yZXR1cm4gYi5FeHRlbmQoYyxiLk9ic2VydmFibGUpLGMucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBiPWEoJzx1bCBjbGFzcz0ic2VsZWN0Mi1yZXN1bHRzX19vcHRpb25zIiByb2xlPSJ0cmVlIj48L3VsPicpO3JldHVybiB0aGlzLm9wdGlvbnMuZ2V0KCJtdWx0aXBsZSIpJiZiLmF0dHIoImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSIpLHRoaXMuJHJlc3VsdHM9YixifSxjLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuJHJlc3VsdHMuZW1wdHkoKX0sYy5wcm90b3R5cGUuZGlzcGxheU1lc3NhZ2U9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5vcHRpb25zLmdldCgiZXNjYXBlTWFya3VwIik7dGhpcy5jbGVhcigpLHRoaXMuaGlkZUxvYWRpbmcoKTt2YXIgZD1hKCc8bGkgcm9sZT0idHJlZWl0ZW0iIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBjbGFzcz0ic2VsZWN0Mi1yZXN1bHRzX19vcHRpb24iPjwvbGk+JyksZT10aGlzLm9wdGlvbnMuZ2V0KCJ0cmFuc2xhdGlvbnMiKS5nZXQoYi5tZXNzYWdlKTtkLmFwcGVuZChjKGUoYi5hcmdzKSkpLGRbMF0uY2xhc3NOYW1lKz0iIHNlbGVjdDItcmVzdWx0c19fbWVzc2FnZSIsdGhpcy4kcmVzdWx0cy5hcHBlbmQoZCl9LGMucHJvdG90eXBlLmhpZGVNZXNzYWdlcz1mdW5jdGlvbigpe3RoaXMuJHJlc3VsdHMuZmluZCgiLnNlbGVjdDItcmVzdWx0c19fbWVzc2FnZSIpLnJlbW92ZSgpfSxjLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oYSl7dGhpcy5oaWRlTG9hZGluZygpO3ZhciBiPVtdO2lmKG51bGw9PWEucmVzdWx0c3x8MD09PWEucmVzdWx0cy5sZW5ndGgpcmV0dXJuIHZvaWQoMD09PXRoaXMuJHJlc3VsdHMuY2hpbGRyZW4oKS5sZW5ndGgmJnRoaXMudHJpZ2dlcigicmVzdWx0czptZXNzYWdlIix7bWVzc2FnZToibm9SZXN1bHRzIn0pKTthLnJlc3VsdHM9dGhpcy5zb3J0KGEucmVzdWx0cyk7Zm9yKHZhciBjPTA7YzxhLnJlc3VsdHMubGVuZ3RoO2MrKyl7dmFyIGQ9YS5yZXN1bHRzW2NdLGU9dGhpcy5vcHRpb24oZCk7Yi5wdXNoKGUpfXRoaXMuJHJlc3VsdHMuYXBwZW5kKGIpfSxjLnByb3RvdHlwZS5wb3NpdGlvbj1mdW5jdGlvbihhLGIpe2IuZmluZCgiLnNlbGVjdDItcmVzdWx0cyIpLmFwcGVuZChhKX0sYy5wcm90b3R5cGUuc29ydD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5vcHRpb25zLmdldCgic29ydGVyIikoYSl9LGMucHJvdG90eXBlLmhpZ2hsaWdodEZpcnN0SXRlbT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJHJlc3VsdHMuZmluZCgiLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdIiksYj1hLmZpbHRlcigiW2FyaWEtc2VsZWN0ZWQ9dHJ1ZV0iKTtiLmxlbmd0aD4wP2IuZmlyc3QoKS50cmlnZ2VyKCJtb3VzZWVudGVyIik6YS5maXJzdCgpLnRyaWdnZXIoIm1vdXNlZW50ZXIiKSx0aGlzLmVuc3VyZUhpZ2hsaWdodFZpc2libGUoKX0sYy5wcm90b3R5cGUuc2V0Q2xhc3Nlcz1mdW5jdGlvbigpe3ZhciBjPXRoaXM7dGhpcy5kYXRhLmN1cnJlbnQoZnVuY3Rpb24oZCl7dmFyIGU9YS5tYXAoZCxmdW5jdGlvbihhKXtyZXR1cm4gYS5pZC50b1N0cmluZygpfSk7Yy4kcmVzdWx0cy5maW5kKCIuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25bYXJpYS1zZWxlY3RlZF0iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxkPWIuR2V0RGF0YSh0aGlzLCJkYXRhIiksZj0iIitkLmlkO251bGwhPWQuZWxlbWVudCYmZC5lbGVtZW50LnNlbGVjdGVkfHxudWxsPT1kLmVsZW1lbnQmJmEuaW5BcnJheShmLGUpPi0xP2MuYXR0cigiYXJpYS1zZWxlY3RlZCIsInRydWUiKTpjLmF0dHIoImFyaWEtc2VsZWN0ZWQiLCJmYWxzZSIpfSl9KX0sYy5wcm90b3R5cGUuc2hvd0xvYWRpbmc9ZnVuY3Rpb24oYSl7dGhpcy5oaWRlTG9hZGluZygpO3ZhciBiPXRoaXMub3B0aW9ucy5nZXQoInRyYW5zbGF0aW9ucyIpLmdldCgic2VhcmNoaW5nIiksYz17ZGlzYWJsZWQ6ITAsbG9hZGluZzohMCx0ZXh0OmIoYSl9LGQ9dGhpcy5vcHRpb24oYyk7ZC5jbGFzc05hbWUrPSIgbG9hZGluZy1yZXN1bHRzIix0aGlzLiRyZXN1bHRzLnByZXBlbmQoZCl9LGMucHJvdG90eXBlLmhpZGVMb2FkaW5nPWZ1bmN0aW9uKCl7dGhpcy4kcmVzdWx0cy5maW5kKCIubG9hZGluZy1yZXN1bHRzIikucmVtb3ZlKCl9LGMucHJvdG90eXBlLm9wdGlvbj1mdW5jdGlvbihjKXt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpO2QuY2xhc3NOYW1lPSJzZWxlY3QyLXJlc3VsdHNfX29wdGlvbiI7dmFyIGU9e3JvbGU6InRyZWVpdGVtIiwiYXJpYS1zZWxlY3RlZCI6ImZhbHNlIn07Yy5kaXNhYmxlZCYmKGRlbGV0ZSBlWyJhcmlhLXNlbGVjdGVkIl0sZVsiYXJpYS1kaXNhYmxlZCJdPSJ0cnVlIiksbnVsbD09Yy5pZCYmZGVsZXRlIGVbImFyaWEtc2VsZWN0ZWQiXSxudWxsIT1jLl9yZXN1bHRJZCYmKGQuaWQ9Yy5fcmVzdWx0SWQpLGMudGl0bGUmJihkLnRpdGxlPWMudGl0bGUpLGMuY2hpbGRyZW4mJihlLnJvbGU9Imdyb3VwIixlWyJhcmlhLWxhYmVsIl09Yy50ZXh0LGRlbGV0ZSBlWyJhcmlhLXNlbGVjdGVkIl0pO2Zvcih2YXIgZiBpbiBlKXt2YXIgZz1lW2ZdO2Quc2V0QXR0cmlidXRlKGYsZyl9aWYoYy5jaGlsZHJlbil7dmFyIGg9YShkKSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0cm9uZyIpO2kuY2xhc3NOYW1lPSJzZWxlY3QyLXJlc3VsdHNfX2dyb3VwIjthKGkpO3RoaXMudGVtcGxhdGUoYyxpKTtmb3IodmFyIGo9W10saz0wO2s8Yy5jaGlsZHJlbi5sZW5ndGg7aysrKXt2YXIgbD1jLmNoaWxkcmVuW2tdLG09dGhpcy5vcHRpb24obCk7ai5wdXNoKG0pfXZhciBuPWEoIjx1bD48L3VsPiIse2NsYXNzOiJzZWxlY3QyLXJlc3VsdHNfX29wdGlvbnMgc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25zLS1uZXN0ZWQifSk7bi5hcHBlbmQoaiksaC5hcHBlbmQoaSksaC5hcHBlbmQobil9ZWxzZSB0aGlzLnRlbXBsYXRlKGMsZCk7cmV0dXJuIGIuU3RvcmVEYXRhKGQsImRhdGEiLGMpLGR9LGMucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oYyxkKXt2YXIgZT10aGlzLGY9Yy5pZCsiLXJlc3VsdHMiO3RoaXMuJHJlc3VsdHMuYXR0cigiaWQiLGYpLGMub24oInJlc3VsdHM6YWxsIixmdW5jdGlvbihhKXtlLmNsZWFyKCksZS5hcHBlbmQoYS5kYXRhKSxjLmlzT3BlbigpJiYoZS5zZXRDbGFzc2VzKCksZS5oaWdobGlnaHRGaXJzdEl0ZW0oKSl9KSxjLm9uKCJyZXN1bHRzOmFwcGVuZCIsZnVuY3Rpb24oYSl7ZS5hcHBlbmQoYS5kYXRhKSxjLmlzT3BlbigpJiZlLnNldENsYXNzZXMoKX0pLGMub24oInF1ZXJ5IixmdW5jdGlvbihhKXtlLmhpZGVNZXNzYWdlcygpLGUuc2hvd0xvYWRpbmcoYSl9KSxjLm9uKCJzZWxlY3QiLGZ1bmN0aW9uKCl7Yy5pc09wZW4oKSYmKGUuc2V0Q2xhc3NlcygpLGUuaGlnaGxpZ2h0Rmlyc3RJdGVtKCkpfSksYy5vbigidW5zZWxlY3QiLGZ1bmN0aW9uKCl7Yy5pc09wZW4oKSYmKGUuc2V0Q2xhc3NlcygpLGUuaGlnaGxpZ2h0Rmlyc3RJdGVtKCkpfSksYy5vbigib3BlbiIsZnVuY3Rpb24oKXtlLiRyZXN1bHRzLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJ0cnVlIiksZS4kcmVzdWx0cy5hdHRyKCJhcmlhLWhpZGRlbiIsImZhbHNlIiksZS5zZXRDbGFzc2VzKCksZS5lbnN1cmVIaWdobGlnaHRWaXNpYmxlKCl9KSxjLm9uKCJjbG9zZSIsZnVuY3Rpb24oKXtlLiRyZXN1bHRzLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJmYWxzZSIpLGUuJHJlc3VsdHMuYXR0cigiYXJpYS1oaWRkZW4iLCJ0cnVlIiksZS4kcmVzdWx0cy5yZW1vdmVBdHRyKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiKX0pLGMub24oInJlc3VsdHM6dG9nZ2xlIixmdW5jdGlvbigpe3ZhciBhPWUuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCk7MCE9PWEubGVuZ3RoJiZhLnRyaWdnZXIoIm1vdXNldXAiKX0pLGMub24oInJlc3VsdHM6c2VsZWN0IixmdW5jdGlvbigpe3ZhciBhPWUuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCk7aWYoMCE9PWEubGVuZ3RoKXt2YXIgYz1iLkdldERhdGEoYVswXSwiZGF0YSIpOyJ0cnVlIj09YS5hdHRyKCJhcmlhLXNlbGVjdGVkIik/ZS50cmlnZ2VyKCJjbG9zZSIse30pOmUudHJpZ2dlcigic2VsZWN0Iix7ZGF0YTpjfSl9fSksYy5vbigicmVzdWx0czpwcmV2aW91cyIsZnVuY3Rpb24oKXt2YXIgYT1lLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpLGI9ZS4kcmVzdWx0cy5maW5kKCJbYXJpYS1zZWxlY3RlZF0iKSxjPWIuaW5kZXgoYSk7aWYoIShjPD0wKSl7dmFyIGQ9Yy0xOzA9PT1hLmxlbmd0aCYmKGQ9MCk7dmFyIGY9Yi5lcShkKTtmLnRyaWdnZXIoIm1vdXNlZW50ZXIiKTt2YXIgZz1lLiRyZXN1bHRzLm9mZnNldCgpLnRvcCxoPWYub2Zmc2V0KCkudG9wLGk9ZS4kcmVzdWx0cy5zY3JvbGxUb3AoKSsoaC1nKTswPT09ZD9lLiRyZXN1bHRzLnNjcm9sbFRvcCgwKTpoLWc8MCYmZS4kcmVzdWx0cy5zY3JvbGxUb3AoaSl9fSksYy5vbigicmVzdWx0czpuZXh0IixmdW5jdGlvbigpe3ZhciBhPWUuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCksYj1lLiRyZXN1bHRzLmZpbmQoIlthcmlhLXNlbGVjdGVkXSIpLGM9Yi5pbmRleChhKSxkPWMrMTtpZighKGQ+PWIubGVuZ3RoKSl7dmFyIGY9Yi5lcShkKTtmLnRyaWdnZXIoIm1vdXNlZW50ZXIiKTt2YXIgZz1lLiRyZXN1bHRzLm9mZnNldCgpLnRvcCtlLiRyZXN1bHRzLm91dGVySGVpZ2h0KCExKSxoPWYub2Zmc2V0KCkudG9wK2Yub3V0ZXJIZWlnaHQoITEpLGk9ZS4kcmVzdWx0cy5zY3JvbGxUb3AoKStoLWc7MD09PWQ/ZS4kcmVzdWx0cy5zY3JvbGxUb3AoMCk6aD5nJiZlLiRyZXN1bHRzLnNjcm9sbFRvcChpKX19KSxjLm9uKCJyZXN1bHRzOmZvY3VzIixmdW5jdGlvbihhKXthLmVsZW1lbnQuYWRkQ2xhc3MoInNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1oaWdobGlnaHRlZCIpfSksYy5vbigicmVzdWx0czptZXNzYWdlIixmdW5jdGlvbihhKXtlLmRpc3BsYXlNZXNzYWdlKGEpfSksYS5mbi5tb3VzZXdoZWVsJiZ0aGlzLiRyZXN1bHRzLm9uKCJtb3VzZXdoZWVsIixmdW5jdGlvbihhKXt2YXIgYj1lLiRyZXN1bHRzLnNjcm9sbFRvcCgpLGM9ZS4kcmVzdWx0cy5nZXQoMCkuc2Nyb2xsSGVpZ2h0LWIrYS5kZWx0YVksZD1hLmRlbHRhWT4wJiZiLWEuZGVsdGFZPD0wLGY9YS5kZWx0YVk8MCYmYzw9ZS4kcmVzdWx0cy5oZWlnaHQoKTtkPyhlLiRyZXN1bHRzLnNjcm9sbFRvcCgwKSxhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSk6ZiYmKGUuJHJlc3VsdHMuc2Nyb2xsVG9wKGUuJHJlc3VsdHMuZ2V0KDApLnNjcm9sbEhlaWdodC1lLiRyZXN1bHRzLmhlaWdodCgpKSxhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSl9KSx0aGlzLiRyZXN1bHRzLm9uKCJtb3VzZXVwIiwiLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdIixmdW5jdGlvbihjKXt2YXIgZD1hKHRoaXMpLGY9Yi5HZXREYXRhKHRoaXMsImRhdGEiKTtpZigidHJ1ZSI9PT1kLmF0dHIoImFyaWEtc2VsZWN0ZWQiKSlyZXR1cm4gdm9pZChlLm9wdGlvbnMuZ2V0KCJtdWx0aXBsZSIpP2UudHJpZ2dlcigidW5zZWxlY3QiLHtvcmlnaW5hbEV2ZW50OmMsZGF0YTpmfSk6ZS50cmlnZ2VyKCJjbG9zZSIse30pKTtlLnRyaWdnZXIoInNlbGVjdCIse29yaWdpbmFsRXZlbnQ6YyxkYXRhOmZ9KX0pLHRoaXMuJHJlc3VsdHMub24oIm1vdXNlZW50ZXIiLCIuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25bYXJpYS1zZWxlY3RlZF0iLGZ1bmN0aW9uKGMpe3ZhciBkPWIuR2V0RGF0YSh0aGlzLCJkYXRhIik7ZS5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKS5yZW1vdmVDbGFzcygic2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWhpZ2hsaWdodGVkIiksZS50cmlnZ2VyKCJyZXN1bHRzOmZvY3VzIix7ZGF0YTpkLGVsZW1lbnQ6YSh0aGlzKX0pfSl9LGMucHJvdG90eXBlLmdldEhpZ2hsaWdodGVkUmVzdWx0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZXN1bHRzLmZpbmQoIi5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0taGlnaGxpZ2h0ZWQiKX0sYy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuJHJlc3VsdHMucmVtb3ZlKCl9LGMucHJvdG90eXBlLmVuc3VyZUhpZ2hsaWdodFZpc2libGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpO2lmKDAhPT1hLmxlbmd0aCl7dmFyIGI9dGhpcy4kcmVzdWx0cy5maW5kKCJbYXJpYS1zZWxlY3RlZF0iKSxjPWIuaW5kZXgoYSksZD10aGlzLiRyZXN1bHRzLm9mZnNldCgpLnRvcCxlPWEub2Zmc2V0KCkudG9wLGY9dGhpcy4kcmVzdWx0cy5zY3JvbGxUb3AoKSsoZS1kKSxnPWUtZDtmLT0yKmEub3V0ZXJIZWlnaHQoITEpLGM8PTI/dGhpcy4kcmVzdWx0cy5zY3JvbGxUb3AoMCk6KGc+dGhpcy4kcmVzdWx0cy5vdXRlckhlaWdodCgpfHxnPDApJiZ0aGlzLiRyZXN1bHRzLnNjcm9sbFRvcChmKX19LGMucHJvdG90eXBlLnRlbXBsYXRlPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcy5vcHRpb25zLmdldCgidGVtcGxhdGVSZXN1bHQiKSxlPXRoaXMub3B0aW9ucy5nZXQoImVzY2FwZU1hcmt1cCIpLGY9ZChiLGMpO251bGw9PWY/Yy5zdHlsZS5kaXNwbGF5PSJub25lIjoic3RyaW5nIj09dHlwZW9mIGY/Yy5pbm5lckhUTUw9ZShmKTphKGMpLmFwcGVuZChmKX0sY30pLGIuZGVmaW5lKCJzZWxlY3QyL2tleXMiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue0JBQ0tTUEFDRTo4LFRBQjo5LEVOVEVSOjEzLFNISUZUOjE2LENUUkw6MTcsQUxUOjE4LEVTQzoyNyxTUEFDRTozMixQQUdFX1VQOjMzLFBBR0VfRE9XTjozNCxFTkQ6MzUsSE9NRTozNixMRUZUOjM3LFVQOjM4LFJJR0hUOjM5LERPV046NDAsREVMRVRFOjQ2fX0pLGIuZGVmaW5lKCJzZWxlY3QyL3NlbGVjdGlvbi9iYXNlIixbImpxdWVyeSIsIi4uL3V0aWxzIiwiLi4va2V5cyJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEsYil7dGhpcy4kZWxlbWVudD1hLHRoaXMub3B0aW9ucz1iLGQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyl9cmV0dXJuIGIuRXh0ZW5kKGQsYi5PYnNlcnZhYmxlKSxkLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgYz1hKCc8c3BhbiBjbGFzcz0ic2VsZWN0Mi1zZWxlY3Rpb24iIHJvbGU9ImNvbWJvYm94IiAgYXJpYS1oYXNwb3B1cD0idHJ1ZSIgYXJpYS1leHBhbmRlZD0iZmFsc2UiPjwvc3Bhbj4nKTtyZXR1cm4gdGhpcy5fdGFiaW5kZXg9MCxudWxsIT1iLkdldERhdGEodGhpcy4kZWxlbWVudFswXSwib2xkLXRhYmluZGV4Iik/dGhpcy5fdGFiaW5kZXg9Yi5HZXREYXRhKHRoaXMuJGVsZW1lbnRbMF0sIm9sZC10YWJpbmRleCIpOm51bGwhPXRoaXMuJGVsZW1lbnQuYXR0cigidGFiaW5kZXgiKSYmKHRoaXMuX3RhYmluZGV4PXRoaXMuJGVsZW1lbnQuYXR0cigidGFiaW5kZXgiKSksYy5hdHRyKCJ0aXRsZSIsdGhpcy4kZWxlbWVudC5hdHRyKCJ0aXRsZSIpKSxjLmF0dHIoInRhYmluZGV4Iix0aGlzLl90YWJpbmRleCksdGhpcy4kc2VsZWN0aW9uPWMsY30sZC5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMsZT0oYS5pZCxhLmlkKyItcmVzdWx0cyIpO3RoaXMuY29udGFpbmVyPWEsdGhpcy4kc2VsZWN0aW9uLm9uKCJmb2N1cyIsZnVuY3Rpb24oYSl7ZC50cmlnZ2VyKCJmb2N1cyIsYSl9KSx0aGlzLiRzZWxlY3Rpb24ub24oImJsdXIiLGZ1bmN0aW9uKGEpe2QuX2hhbmRsZUJsdXIoYSl9KSx0aGlzLiRzZWxlY3Rpb24ub24oImtleWRvd24iLGZ1bmN0aW9uKGEpe2QudHJpZ2dlcigia2V5cHJlc3MiLGEpLGEud2hpY2g9PT1jLlNQQUNFJiZhLnByZXZlbnREZWZhdWx0KCl9KSxhLm9uKCJyZXN1bHRzOmZvY3VzIixmdW5jdGlvbihhKXtkLiRzZWxlY3Rpb24uYXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixhLmRhdGEuX3Jlc3VsdElkKX0pLGEub24oInNlbGVjdGlvbjp1cGRhdGUiLGZ1bmN0aW9uKGEpe2QudXBkYXRlKGEuZGF0YSl9KSxhLm9uKCJvcGVuIixmdW5jdGlvbigpe2QuJHNlbGVjdGlvbi5hdHRyKCJhcmlhLWV4cGFuZGVkIiwidHJ1ZSIpLGQuJHNlbGVjdGlvbi5hdHRyKCJhcmlhLW93bnMiLGUpLGQuX2F0dGFjaENsb3NlSGFuZGxlcihhKX0pLGEub24oImNsb3NlIixmdW5jdGlvbigpe2QuJHNlbGVjdGlvbi5hdHRyKCJhcmlhLWV4cGFuZGVkIiwiZmFsc2UiKSxkLiRzZWxlY3Rpb24ucmVtb3ZlQXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50IiksZC4kc2VsZWN0aW9uLnJlbW92ZUF0dHIoImFyaWEtb3ducyIpLGQuJHNlbGVjdGlvbi5mb2N1cygpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC4kc2VsZWN0aW9uLmZvY3VzKCl9LDApLGQuX2RldGFjaENsb3NlSGFuZGxlcihhKX0pLGEub24oImVuYWJsZSIsZnVuY3Rpb24oKXtkLiRzZWxlY3Rpb24uYXR0cigidGFiaW5kZXgiLGQuX3RhYmluZGV4KX0pLGEub24oImRpc2FibGUiLGZ1bmN0aW9uKCl7ZC4kc2VsZWN0aW9uLmF0dHIoInRhYmluZGV4IiwiLTEiKX0pfSxkLnByb3RvdHlwZS5faGFuZGxlQmx1cj1mdW5jdGlvbihiKXt2YXIgYz10aGlzO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09Yy4kc2VsZWN0aW9uWzBdfHxhLmNvbnRhaW5zKGMuJHNlbGVjdGlvblswXSxkb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8Yy50cmlnZ2VyKCJibHVyIixiKX0sMSl9LGQucHJvdG90eXBlLl9hdHRhY2hDbG9zZUhhbmRsZXI9ZnVuY3Rpb24oYyl7YShkb2N1bWVudC5ib2R5KS5vbigibW91c2Vkb3duLnNlbGVjdDIuIitjLmlkLGZ1bmN0aW9uKGMpe3ZhciBkPWEoYy50YXJnZXQpLGU9ZC5jbG9zZXN0KCIuc2VsZWN0MiIpO2EoIi5zZWxlY3QyLnNlbGVjdDItY29udGFpbmVyLS1vcGVuIikuZWFjaChmdW5jdGlvbigpe2EodGhpcyksdGhpcyE9ZVswXSYmYi5HZXREYXRhKHRoaXMsImVsZW1lbnQiKS5zZWxlY3QyKCJjbG9zZSIpfSl9KX0sZC5wcm90b3R5cGUuX2RldGFjaENsb3NlSGFuZGxlcj1mdW5jdGlvbihiKXthKGRvY3VtZW50LmJvZHkpLm9mZigibW91c2Vkb3duLnNlbGVjdDIuIitiLmlkKX0sZC5wcm90b3R5cGUucG9zaXRpb249ZnVuY3Rpb24oYSxiKXtiLmZpbmQoIi5zZWxlY3Rpb24iKS5hcHBlbmQoYSl9LGQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXRhY2hDbG9zZUhhbmRsZXIodGhpcy5jb250YWluZXIpfSxkLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKCJUaGUgYHVwZGF0ZWAgbWV0aG9kIG11c3QgYmUgZGVmaW5lZCBpbiBjaGlsZCBjbGFzc2VzLiIpfSxkfSksYi5kZWZpbmUoInNlbGVjdDIvc2VsZWN0aW9uL3NpbmdsZSIsWyJqcXVlcnkiLCIuL2Jhc2UiLCIuLi91dGlscyIsIi4uL2tleXMiXSxmdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBlKCl7ZS5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBjLkV4dGVuZChlLGIpLGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBhPWUuX19zdXBlcl9fLnJlbmRlci5jYWxsKHRoaXMpO3JldHVybiBhLmFkZENsYXNzKCJzZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIiksYS5odG1sKCc8c3BhbiBjbGFzcz0ic2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIj48L3NwYW4+PHNwYW4gY2xhc3M9InNlbGVjdDItc2VsZWN0aW9uX19hcnJvdyIgcm9sZT0icHJlc2VudGF0aW9uIj48YiByb2xlPSJwcmVzZW50YXRpb24iPjwvYj48L3NwYW4+JyksYX0sZS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7ZS5fX3N1cGVyX18uYmluZC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGQ9YS5pZCsiLWNvbnRhaW5lciI7dGhpcy4kc2VsZWN0aW9uLmZpbmQoIi5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQiKS5hdHRyKCJpZCIsZCkuYXR0cigicm9sZSIsInRleHRib3giKS5hdHRyKCJhcmlhLXJlYWRvbmx5IiwidHJ1ZSIpLHRoaXMuJHNlbGVjdGlvbi5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLGQpLHRoaXMuJHNlbGVjdGlvbi5vbigibW91c2Vkb3duIixmdW5jdGlvbihhKXsxPT09YS53aGljaCYmYy50cmlnZ2VyKCJ0b2dnbGUiLHtvcmlnaW5hbEV2ZW50OmF9KX0pLHRoaXMuJHNlbGVjdGlvbi5vbigiZm9jdXMiLGZ1bmN0aW9uKGEpe30pLHRoaXMuJHNlbGVjdGlvbi5vbigiYmx1ciIsZnVuY3Rpb24oYSl7fSksYS5vbigiZm9jdXMiLGZ1bmN0aW9uKGIpe2EuaXNPcGVuKCl8fGMuJHNlbGVjdGlvbi5mb2N1cygpfSl9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kc2VsZWN0aW9uLmZpbmQoIi5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQiKTthLmVtcHR5KCksYS5yZW1vdmVBdHRyKCJ0aXRsZSIpfSxlLnByb3RvdHlwZS5kaXNwbGF5PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5vcHRpb25zLmdldCgidGVtcGxhdGVTZWxlY3Rpb24iKTtyZXR1cm4gdGhpcy5vcHRpb25zLmdldCgiZXNjYXBlTWFya3VwIikoYyhhLGIpKX0sZS5wcm90b3R5cGUuc2VsZWN0aW9uQ29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuIGEoIjxzcGFuPjwvc3Bhbj4iKX0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGEpe2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gdm9pZCB0aGlzLmNsZWFyKCk7dmFyIGI9YVswXSxjPXRoaXMuJHNlbGVjdGlvbi5maW5kKCIuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIiksZD10aGlzLmRpc3BsYXkoYixjKTtjLmVtcHR5KCkuYXBwZW5kKGQpLGMuYXR0cigidGl0bGUiLGIudGl0bGV8fGIudGV4dCl9LGV9KSxiLmRlZmluZSgic2VsZWN0Mi9zZWxlY3Rpb24vbXVsdGlwbGUiLFsianF1ZXJ5IiwiLi9iYXNlIiwiLi4vdXRpbHMiXSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhLGIpe2QuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gYy5FeHRlbmQoZCxiKSxkLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgYT1kLl9fc3VwZXJfXy5yZW5kZXIuY2FsbCh0aGlzKTtyZXR1cm4gYS5hZGRDbGFzcygic2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlIiksYS5odG1sKCc8dWwgY2xhc3M9InNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCI+PC91bD4nKSxhfSxkLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGIsZSl7dmFyIGY9dGhpcztkLl9fc3VwZXJfXy5iaW5kLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLiRzZWxlY3Rpb24ub24oImNsaWNrIixmdW5jdGlvbihhKXtmLnRyaWdnZXIoInRvZ2dsZSIse29yaWdpbmFsRXZlbnQ6YX0pfSksdGhpcy4kc2VsZWN0aW9uLm9uKCJjbGljayIsIi5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19yZW1vdmUiLGZ1bmN0aW9uKGIpe2lmKCFmLm9wdGlvbnMuZ2V0KCJkaXNhYmxlZCIpKXt2YXIgZD1hKHRoaXMpLGU9ZC5wYXJlbnQoKSxnPWMuR2V0RGF0YShlWzBdLCJkYXRhIik7Zi50cmlnZ2VyKCJ1bnNlbGVjdCIse29yaWdpbmFsRXZlbnQ6YixkYXRhOmd9KX19KX0sZC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRzZWxlY3Rpb24uZmluZCgiLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCIpO2EuZW1wdHkoKSxhLnJlbW92ZUF0dHIoInRpdGxlIil9LGQucHJvdG90eXBlLmRpc3BsYXk9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLm9wdGlvbnMuZ2V0KCJ0ZW1wbGF0ZVNlbGVjdGlvbiIpO3JldHVybiB0aGlzLm9wdGlvbnMuZ2V0KCJlc2NhcGVNYXJrdXAiKShjKGEsYikpfSxkLnByb3RvdHlwZS5zZWxlY3Rpb25Db250YWluZXI9ZnVuY3Rpb24oKXtyZXR1cm4gYSgnPGxpIGNsYXNzPSJzZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlIj48c3BhbiBjbGFzcz0ic2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZV9fcmVtb3ZlIiByb2xlPSJwcmVzZW50YXRpb24iPiZ0aW1lczs8L3NwYW4+PC9saT4nKX0sZC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGEpe2lmKHRoaXMuY2xlYXIoKSwwIT09YS5sZW5ndGgpe2Zvcih2YXIgYj1bXSxkPTA7ZDxhLmxlbmd0aDtkKyspe3ZhciBlPWFbZF0sZj10aGlzLnNlbGVjdGlvbkNvbnRhaW5lcigpLGc9dGhpcy5kaXNwbGF5KGUsZik7Zi5hcHBlbmQoZyksZi5hdHRyKCJ0aXRsZSIsZS50aXRsZXx8ZS50ZXh0KSxjLlN0b3JlRGF0YShmWzBdLCJkYXRhIixlKSxiLnB1c2goZil9dmFyIGg9dGhpcy4kc2VsZWN0aW9uLmZpbmQoIi5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQiKTtjLmFwcGVuZE1hbnkoaCxiKX19LGR9KSxiLmRlZmluZSgic2VsZWN0Mi9zZWxlY3Rpb24vcGxhY2Vob2xkZXIiLFsiLi4vdXRpbHMiXSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsYixjKXt0aGlzLnBsYWNlaG9sZGVyPXRoaXMubm9ybWFsaXplUGxhY2Vob2xkZXIoYy5nZXQoInBsYWNlaG9sZGVyIikpLGEuY2FsbCh0aGlzLGIsYyl9cmV0dXJuIGIucHJvdG90eXBlLm5vcm1hbGl6ZVBsYWNlaG9sZGVyPWZ1bmN0aW9uKGEsYil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBiJiYoYj17aWQ6IiIsdGV4dDpifSksYn0sYi5wcm90b3R5cGUuY3JlYXRlUGxhY2Vob2xkZXI9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLnNlbGVjdGlvbkNvbnRhaW5lcigpO3JldHVybiBjLmh0bWwodGhpcy5kaXNwbGF5KGIpKSxjLmFkZENsYXNzKCJzZWxlY3QyLXNlbGVjdGlvbl9fcGxhY2Vob2xkZXIiKS5yZW1vdmVDbGFzcygic2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZSIpLGN9LGIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihhLGIpe3ZhciBjPTE9PWIubGVuZ3RoJiZiWzBdLmlkIT10aGlzLnBsYWNlaG9sZGVyLmlkO2lmKGIubGVuZ3RoPjF8fGMpcmV0dXJuIGEuY2FsbCh0aGlzLGIpO3RoaXMuY2xlYXIoKTt2YXIgZD10aGlzLmNyZWF0ZVBsYWNlaG9sZGVyKHRoaXMucGxhY2Vob2xkZXIpO3RoaXMuJHNlbGVjdGlvbi5maW5kKCIuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIikuYXBwZW5kKGQpfSxifSksYi5kZWZpbmUoInNlbGVjdDIvc2VsZWN0aW9uL2FsbG93Q2xlYXIiLFsianF1ZXJ5IiwiLi4va2V5cyIsIi4uL3V0aWxzIl0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoKXt9cmV0dXJuIGQucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXM7YS5jYWxsKHRoaXMsYixjKSxudWxsPT10aGlzLnBsYWNlaG9sZGVyJiZ0aGlzLm9wdGlvbnMuZ2V0KCJkZWJ1ZyIpJiZ3aW5kb3cuY29uc29sZSYmY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcigiU2VsZWN0MjogVGhlIGBhbGxvd0NsZWFyYCBvcHRpb24gc2hvdWxkIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgYHBsYWNlaG9sZGVyYCBvcHRpb24uIiksdGhpcy4kc2VsZWN0aW9uLm9uKCJtb3VzZWRvd24iLCIuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyIixmdW5jdGlvbihhKXtkLl9oYW5kbGVDbGVhcihhKX0pLGIub24oImtleXByZXNzIixmdW5jdGlvbihhKXtkLl9oYW5kbGVLZXlib2FyZENsZWFyKGEsYil9KX0sZC5wcm90b3R5cGUuX2hhbmRsZUNsZWFyPWZ1bmN0aW9uKGEsYil7aWYoIXRoaXMub3B0aW9ucy5nZXQoImRpc2FibGVkIikpe3ZhciBkPXRoaXMuJHNlbGVjdGlvbi5maW5kKCIuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyIik7aWYoMCE9PWQubGVuZ3RoKXtiLnN0b3BQcm9wYWdhdGlvbigpO3ZhciBlPWMuR2V0RGF0YShkWzBdLCJkYXRhIiksZj10aGlzLiRlbGVtZW50LnZhbCgpO3RoaXMuJGVsZW1lbnQudmFsKHRoaXMucGxhY2Vob2xkZXIuaWQpO3ZhciBnPXtkYXRhOmV9O2lmKHRoaXMudHJpZ2dlcigiY2xlYXIiLGcpLGcucHJldmVudGVkKXJldHVybiB2b2lkIHRoaXMuJGVsZW1lbnQudmFsKGYpO2Zvcih2YXIgaD0wO2g8ZS5sZW5ndGg7aCsrKWlmKGc9e2RhdGE6ZVtoXX0sdGhpcy50cmlnZ2VyKCJ1bnNlbGVjdCIsZyksZy5wcmV2ZW50ZWQpcmV0dXJuIHZvaWQgdGhpcy4kZWxlbWVudC52YWwoZik7dGhpcy4kZWxlbWVudC50cmlnZ2VyKCJjaGFuZ2UiKSx0aGlzLnRyaWdnZXIoInRvZ2dsZSIse30pfX19LGQucHJvdG90eXBlLl9oYW5kbGVLZXlib2FyZENsZWFyPWZ1bmN0aW9uKGEsYyxkKXtkLmlzT3BlbigpfHxjLndoaWNoIT1iLkRFTEVURSYmYy53aGljaCE9Yi5CQUNLU1BBQ0V8fHRoaXMuX2hhbmRsZUNsZWFyKGMpfSxkLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oYixkKXtpZihiLmNhbGwodGhpcyxkKSwhKHRoaXMuJHNlbGVjdGlvbi5maW5kKCIuc2VsZWN0Mi1zZWxlY3Rpb25fX3BsYWNlaG9sZGVyIikubGVuZ3RoPjB8fDA9PT1kLmxlbmd0aCkpe3ZhciBlPWEoJzxzcGFuIGNsYXNzPSJzZWxlY3QyLXNlbGVjdGlvbl9fY2xlYXIiPiZ0aW1lczs8L3NwYW4+Jyk7Yy5TdG9yZURhdGEoZVswXSwiZGF0YSIsZCksdGhpcy4kc2VsZWN0aW9uLmZpbmQoIi5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQiKS5wcmVwZW5kKGUpfX0sZH0pLGIuZGVmaW5lKCJzZWxlY3QyL3NlbGVjdGlvbi9zZWFyY2giLFsianF1ZXJ5IiwiLi4vdXRpbHMiLCIuLi9rZXlzIl0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSxiLGMpe2EuY2FsbCh0aGlzLGIsYyl9cmV0dXJuIGQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihiKXt2YXIgYz1hKCc8bGkgY2xhc3M9InNlbGVjdDItc2VhcmNoIHNlbGVjdDItc2VhcmNoLS1pbmxpbmUiPjxpbnB1dCBjbGFzcz0ic2VsZWN0Mi1zZWFyY2hfX2ZpZWxkIiB0eXBlPSJzZWFyY2giIHRhYmluZGV4PSItMSIgYXV0b2NvbXBsZXRlPSJvZmYiIGF1dG9jb3JyZWN0PSJvZmYiIGF1dG9jYXBpdGFsaXplPSJub25lIiBzcGVsbGNoZWNrPSJmYWxzZSIgcm9sZT0idGV4dGJveCIgYXJpYS1hdXRvY29tcGxldGU9Imxpc3QiIC8+PC9saT4nKTt0aGlzLiRzZWFyY2hDb250YWluZXI9Yyx0aGlzLiRzZWFyY2g9Yy5maW5kKCJpbnB1dCIpO3ZhciBkPWIuY2FsbCh0aGlzKTtyZXR1cm4gdGhpcy5fdHJhbnNmZXJUYWJJbmRleCgpLGR9LGQucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oYSxkLGUpe3ZhciBmPXRoaXM7YS5jYWxsKHRoaXMsZCxlKSxkLm9uKCJvcGVuIixmdW5jdGlvbigpe2YuJHNlYXJjaC50cmlnZ2VyKCJmb2N1cyIpfSksZC5vbigiY2xvc2UiLGZ1bmN0aW9uKCl7Zi4kc2VhcmNoLnZhbCgiIiksZi4kc2VhcmNoLnJlbW92ZUF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIpLGYuJHNlYXJjaC50cmlnZ2VyKCJmb2N1cyIpfSksZC5vbigiZW5hYmxlIixmdW5jdGlvbigpe2YuJHNlYXJjaC5wcm9wKCJkaXNhYmxlZCIsITEpLGYuX3RyYW5zZmVyVGFiSW5kZXgoKX0pLGQub24oImRpc2FibGUiLGZ1bmN0aW9uKCl7Zi4kc2VhcmNoLnByb3AoImRpc2FibGVkIiwhMCl9KSxkLm9uKCJmb2N1cyIsZnVuY3Rpb24oYSl7Zi4kc2VhcmNoLnRyaWdnZXIoImZvY3VzIil9KSxkLm9uKCJyZXN1bHRzOmZvY3VzIixmdW5jdGlvbihhKXtmLiRzZWFyY2guYXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixhLmlkKX0pLHRoaXMuJHNlbGVjdGlvbi5vbigiZm9jdXNpbiIsIi5zZWxlY3QyLXNlYXJjaC0taW5saW5lIixmdW5jdGlvbihhKXtmLnRyaWdnZXIoImZvY3VzIixhKX0pLHRoaXMuJHNlbGVjdGlvbi5vbigiZm9jdXNvdXQiLCIuc2VsZWN0Mi1zZWFyY2gtLWlubGluZSIsZnVuY3Rpb24oYSl7Zi5faGFuZGxlQmx1cihhKX0pLHRoaXMuJHNlbGVjdGlvbi5vbigia2V5ZG93biIsIi5zZWxlY3QyLXNlYXJjaC0taW5saW5lIixmdW5jdGlvbihhKXtpZihhLnN0b3BQcm9wYWdhdGlvbigpLGYudHJpZ2dlcigia2V5cHJlc3MiLGEpLGYuX2tleVVwUHJldmVudGVkPWEuaXNEZWZhdWx0UHJldmVudGVkKCksYS53aGljaD09PWMuQkFDS1NQQUNFJiYiIj09PWYuJHNlYXJjaC52YWwoKSl7dmFyIGQ9Zi4kc2VhcmNoQ29udGFpbmVyLnByZXYoIi5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlIik7aWYoZC5sZW5ndGg+MCl7dmFyIGU9Yi5HZXREYXRhKGRbMF0sImRhdGEiKTtmLnNlYXJjaFJlbW92ZUNob2ljZShlKSxhLnByZXZlbnREZWZhdWx0KCl9fX0pO3ZhciBnPWRvY3VtZW50LmRvY3VtZW50TW9kZSxoPWcmJmc8PTExO3RoaXMuJHNlbGVjdGlvbi5vbigiaW5wdXQuc2VhcmNoY2hlY2siLCIuc2VsZWN0Mi1zZWFyY2gtLWlubGluZSIsZnVuY3Rpb24oYSl7aWYoaClyZXR1cm4gdm9pZCBmLiRzZWxlY3Rpb24ub2ZmKCJpbnB1dC5zZWFyY2ggaW5wdXQuc2VhcmNoY2hlY2siKTtmLiRzZWxlY3Rpb24ub2ZmKCJrZXl1cC5zZWFyY2giKX0pLHRoaXMuJHNlbGVjdGlvbi5vbigia2V5dXAuc2VhcmNoIGlucHV0LnNlYXJjaCIsIi5zZWxlY3QyLXNlYXJjaC0taW5saW5lIixmdW5jdGlvbihhKXtpZihoJiYiaW5wdXQiPT09YS50eXBlKXJldHVybiB2b2lkIGYuJHNlbGVjdGlvbi5vZmYoImlucHV0LnNlYXJjaCBpbnB1dC5zZWFyY2hjaGVjayIpO3ZhciBiPWEud2hpY2g7YiE9Yy5TSElGVCYmYiE9Yy5DVFJMJiZiIT1jLkFMVCYmYiE9Yy5UQUImJmYuaGFuZGxlU2VhcmNoKGEpfSl9LGQucHJvdG90eXBlLl90cmFuc2ZlclRhYkluZGV4PWZ1bmN0aW9uKGEpe3RoaXMuJHNlYXJjaC5hdHRyKCJ0YWJpbmRleCIsdGhpcy4kc2VsZWN0aW9uLmF0dHIoInRhYmluZGV4IikpLHRoaXMuJHNlbGVjdGlvbi5hdHRyKCJ0YWJpbmRleCIsIi0xIil9LGQucHJvdG90eXBlLmNyZWF0ZVBsYWNlaG9sZGVyPWZ1bmN0aW9uKGEsYil7dGhpcy4kc2VhcmNoLmF0dHIoInBsYWNlaG9sZGVyIixiLnRleHQpfSxkLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLiRzZWFyY2hbMF09PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aWYodGhpcy4kc2VhcmNoLmF0dHIoInBsYWNlaG9sZGVyIiwiIiksYS5jYWxsKHRoaXMsYiksdGhpcy4kc2VsZWN0aW9uLmZpbmQoIi5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQiKS5hcHBlbmQodGhpcy4kc2VhcmNoQ29udGFpbmVyKSx0aGlzLnJlc2l6ZVNlYXJjaCgpLGMpe3RoaXMuJGVsZW1lbnQuZmluZCgiW2RhdGEtc2VsZWN0Mi10YWddIikubGVuZ3RoP3RoaXMuJGVsZW1lbnQuZm9jdXMoKTp0aGlzLiRzZWFyY2guZm9jdXMoKX19LGQucHJvdG90eXBlLmhhbmRsZVNlYXJjaD1mdW5jdGlvbigpe2lmKHRoaXMucmVzaXplU2VhcmNoKCksIXRoaXMuX2tleVVwUHJldmVudGVkKXt2YXIgYT10aGlzLiRzZWFyY2gudmFsKCk7dGhpcy50cmlnZ2VyKCJxdWVyeSIse3Rlcm06YX0pfXRoaXMuX2tleVVwUHJldmVudGVkPSExfSxkLnByb3RvdHlwZS5zZWFyY2hSZW1vdmVDaG9pY2U9ZnVuY3Rpb24oYSxiKXt0aGlzLnRyaWdnZXIoInVuc2VsZWN0Iix7ZGF0YTpifSksdGhpcy4kc2VhcmNoLnZhbChiLnRleHQpLHRoaXMuaGFuZGxlU2VhcmNoKCl9LGQucHJvdG90eXBlLnJlc2l6ZVNlYXJjaD1mdW5jdGlvbigpe3RoaXMuJHNlYXJjaC5jc3MoIndpZHRoIiwiMjVweCIpO3ZhciBhPSIiO2lmKCIiIT09dGhpcy4kc2VhcmNoLmF0dHIoInBsYWNlaG9sZGVyIikpYT10aGlzLiRzZWxlY3Rpb24uZmluZCgiLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCIpLmlubmVyV2lkdGgoKTtlbHNle2E9Ljc1Kih0aGlzLiRzZWFyY2gudmFsKCkubGVuZ3RoKzEpKyJlbSJ9dGhpcy4kc2VhcmNoLmNzcygid2lkdGgiLGEpfSxkfSksYi5kZWZpbmUoInNlbGVjdDIvc2VsZWN0aW9uL2V2ZW50UmVsYXkiLFsianF1ZXJ5Il0sZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe31yZXR1cm4gYi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihiLGMsZCl7dmFyIGU9dGhpcyxmPVsib3BlbiIsIm9wZW5pbmciLCJjbG9zZSIsImNsb3NpbmciLCJzZWxlY3QiLCJzZWxlY3RpbmciLCJ1bnNlbGVjdCIsInVuc2VsZWN0aW5nIiwiY2xlYXIiLCJjbGVhcmluZyJdLGc9WyJvcGVuaW5nIiwiY2xvc2luZyIsInNlbGVjdGluZyIsInVuc2VsZWN0aW5nIiwiY2xlYXJpbmciXTtiLmNhbGwodGhpcyxjLGQpLGMub24oIioiLGZ1bmN0aW9uKGIsYyl7aWYoLTEhPT1hLmluQXJyYXkoYixmKSl7Yz1jfHx7fTt2YXIgZD1hLkV2ZW50KCJzZWxlY3QyOiIrYix7cGFyYW1zOmN9KTtlLiRlbGVtZW50LnRyaWdnZXIoZCksLTEhPT1hLmluQXJyYXkoYixnKSYmKGMucHJldmVudGVkPWQuaXNEZWZhdWx0UHJldmVudGVkKCkpfX0pfSxifSksYi5kZWZpbmUoInNlbGVjdDIvdHJhbnNsYXRpb24iLFsianF1ZXJ5IiwicmVxdWlyZSJdLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXt0aGlzLmRpY3Q9YXx8e319cmV0dXJuIGMucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpY3R9LGMucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kaWN0W2FdfSxjLnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24oYil7dGhpcy5kaWN0PWEuZXh0ZW5kKHt9LGIuYWxsKCksdGhpcy5kaWN0KX0sYy5fY2FjaGU9e30sYy5sb2FkUGF0aD1mdW5jdGlvbihhKXtpZighKGEgaW4gYy5fY2FjaGUpKXt2YXIgZD1iKGEpO2MuX2NhY2hlW2FdPWR9cmV0dXJuIG5ldyBjKGMuX2NhY2hlW2FdKX0sY30pLGIuZGVmaW5lKCJzZWxlY3QyL2RpYWNyaXRpY3MiLFtdLGZ1bmN0aW9uKCl7cmV0dXJueyLikrYiOiJBIiwi77yhIjoiQSIsIsOAIjoiQSIsIsOBIjoiQSIsIsOCIjoiQSIsIuG6piI6IkEiLCLhuqQiOiJBIiwi4bqqIjoiQSIsIuG6qCI6IkEiLCLDgyI6IkEiLCLEgCI6IkEiLCLEgiI6IkEiLCLhurAiOiJBIiwi4bquIjoiQSIsIuG6tCI6IkEiLCLhurIiOiJBIiwiyKYiOiJBIiwix6AiOiJBIiwiw4QiOiJBIiwix54iOiJBIiwi4bqiIjoiQSIsIsOFIjoiQSIsIse6IjoiQSIsIseNIjoiQSIsIsiAIjoiQSIsIsiCIjoiQSIsIuG6oCI6IkEiLCLhuqwiOiJBIiwi4bq2IjoiQSIsIuG4gCI6IkEiLCLEhCI6IkEiLCLIuiI6IkEiLCLisa8iOiJBIiwi6pyyIjoiQUEiLCLDhiI6IkFFIiwix7wiOiJBRSIsIseiIjoiQUUiLCLqnLQiOiJBTyIsIuqctiI6IkFVIiwi6py4IjoiQVYiLCLqnLoiOiJBViIsIuqcvCI6IkFZIiwi4pK3IjoiQiIsIu+8oiI6IkIiLCLhuIIiOiJCIiwi4biEIjoiQiIsIuG4hiI6IkIiLCLJgyI6IkIiLCLGgiI6IkIiLCLGgSI6IkIiLCLikrgiOiJDIiwi77yjIjoiQyIsIsSGIjoiQyIsIsSIIjoiQyIsIsSKIjoiQyIsIsSMIjoiQyIsIsOHIjoiQyIsIuG4iCI6IkMiLCLGhyI6IkMiLCLIuyI6IkMiLCLqnL4iOiJDIiwi4pK5IjoiRCIsIu+8pCI6IkQiLCLhuIoiOiJEIiwixI4iOiJEIiwi4biMIjoiRCIsIuG4kCI6IkQiLCLhuJIiOiJEIiwi4biOIjoiRCIsIsSQIjoiRCIsIsaLIjoiRCIsIsaKIjoiRCIsIsaJIjoiRCIsIuqduSI6IkQiLCLHsSI6IkRaIiwix4QiOiJEWiIsIseyIjoiRHoiLCLHhSI6IkR6Iiwi4pK6IjoiRSIsIu+8pSI6IkUiLCLDiCI6IkUiLCLDiSI6IkUiLCLDiiI6IkUiLCLhu4AiOiJFIiwi4bq+IjoiRSIsIuG7hCI6IkUiLCLhu4IiOiJFIiwi4bq8IjoiRSIsIsSSIjoiRSIsIuG4lCI6IkUiLCLhuJYiOiJFIiwixJQiOiJFIiwixJYiOiJFIiwiw4siOiJFIiwi4bq6IjoiRSIsIsSaIjoiRSIsIsiEIjoiRSIsIsiGIjoiRSIsIuG6uCI6IkUiLCLhu4YiOiJFIiwiyKgiOiJFIiwi4bicIjoiRSIsIsSYIjoiRSIsIuG4mCI6IkUiLCLhuJoiOiJFIiwixpAiOiJFIiwixo4iOiJFIiwi4pK7IjoiRiIsIu+8piI6IkYiLCLhuJ4iOiJGIiwixpEiOiJGIiwi6p27IjoiRiIsIuKSvCI6IkciLCLvvKciOiJHIiwix7QiOiJHIiwixJwiOiJHIiwi4bigIjoiRyIsIsSeIjoiRyIsIsSgIjoiRyIsIsemIjoiRyIsIsSiIjoiRyIsIsekIjoiRyIsIsaTIjoiRyIsIuqeoCI6IkciLCLqnb0iOiJHIiwi6p2+IjoiRyIsIuKSvSI6IkgiLCLvvKgiOiJIIiwixKQiOiJIIiwi4biiIjoiSCIsIuG4piI6IkgiLCLIniI6IkgiLCLhuKQiOiJIIiwi4bioIjoiSCIsIuG4qiI6IkgiLCLEpiI6IkgiLCLisaciOiJIIiwi4rG1IjoiSCIsIuqejSI6IkgiLCLikr4iOiJJIiwi77ypIjoiSSIsIsOMIjoiSSIsIsONIjoiSSIsIsOOIjoiSSIsIsSoIjoiSSIsIsSqIjoiSSIsIsSsIjoiSSIsIsSwIjoiSSIsIsOPIjoiSSIsIuG4riI6IkkiLCLhu4giOiJJIiwix48iOiJJIiwiyIgiOiJJIiwiyIoiOiJJIiwi4buKIjoiSSIsIsSuIjoiSSIsIuG4rCI6IkkiLCLGlyI6IkkiLCLikr8iOiJKIiwi77yqIjoiSiIsIsS0IjoiSiIsIsmIIjoiSiIsIuKTgCI6IksiLCLvvKsiOiJLIiwi4biwIjoiSyIsIseoIjoiSyIsIuG4siI6IksiLCLEtiI6IksiLCLhuLQiOiJLIiwixpgiOiJLIiwi4rGpIjoiSyIsIuqdgCI6IksiLCLqnYIiOiJLIiwi6p2EIjoiSyIsIuqeoiI6IksiLCLik4EiOiJMIiwi77ysIjoiTCIsIsS/IjoiTCIsIsS5IjoiTCIsIsS9IjoiTCIsIuG4tiI6IkwiLCLhuLgiOiJMIiwixLsiOiJMIiwi4bi8IjoiTCIsIuG4uiI6IkwiLCLFgSI6IkwiLCLIvSI6IkwiLCLisaIiOiJMIiwi4rGgIjoiTCIsIuqdiCI6IkwiLCLqnYYiOiJMIiwi6p6AIjoiTCIsIseHIjoiTEoiLCLHiCI6IkxqIiwi4pOCIjoiTSIsIu+8rSI6Ik0iLCLhuL4iOiJNIiwi4bmAIjoiTSIsIuG5giI6Ik0iLCLisa4iOiJNIiwixpwiOiJNIiwi4pODIjoiTiIsIu+8riI6Ik4iLCLHuCI6Ik4iLCLFgyI6Ik4iLCLDkSI6Ik4iLCLhuYQiOiJOIiwixYciOiJOIiwi4bmGIjoiTiIsIsWFIjoiTiIsIuG5iiI6Ik4iLCLhuYgiOiJOIiwiyKAiOiJOIiwixp0iOiJOIiwi6p6QIjoiTiIsIuqepCI6Ik4iLCLHiiI6Ik5KIiwix4siOiJOaiIsIuKThCI6Ik8iLCLvvK8iOiJPIiwiw5IiOiJPIiwiw5MiOiJPIiwiw5QiOiJPIiwi4buSIjoiTyIsIuG7kCI6Ik8iLCLhu5YiOiJPIiwi4buUIjoiTyIsIsOVIjoiTyIsIuG5jCI6Ik8iLCLIrCI6Ik8iLCLhuY4iOiJPIiwixYwiOiJPIiwi4bmQIjoiTyIsIuG5kiI6Ik8iLCLFjiI6Ik8iLCLIriI6Ik8iLCLIsCI6Ik8iLCLDliI6Ik8iLCLIqiI6Ik8iLCLhu44iOiJPIiwixZAiOiJPIiwix5EiOiJPIiwiyIwiOiJPIiwiyI4iOiJPIiwixqAiOiJPIiwi4bucIjoiTyIsIuG7miI6Ik8iLCLhu6AiOiJPIiwi4bueIjoiTyIsIuG7oiI6Ik8iLCLhu4wiOiJPIiwi4buYIjoiTyIsIseqIjoiTyIsIsesIjoiTyIsIsOYIjoiTyIsIse+IjoiTyIsIsaGIjoiTyIsIsafIjoiTyIsIuqdiiI6Ik8iLCLqnYwiOiJPIiwixqIiOiJPSSIsIuqdjiI6Ik9PIiwiyKIiOiJPVSIsIuKThSI6IlAiLCLvvLAiOiJQIiwi4bmUIjoiUCIsIuG5liI6IlAiLCLGpCI6IlAiLCLisaMiOiJQIiwi6p2QIjoiUCIsIuqdkiI6IlAiLCLqnZQiOiJQIiwi4pOGIjoiUSIsIu+8sSI6IlEiLCLqnZYiOiJRIiwi6p2YIjoiUSIsIsmKIjoiUSIsIuKThyI6IlIiLCLvvLIiOiJSIiwixZQiOiJSIiwi4bmYIjoiUiIsIsWYIjoiUiIsIsiQIjoiUiIsIsiSIjoiUiIsIuG5miI6IlIiLCLhuZwiOiJSIiwixZYiOiJSIiwi4bmeIjoiUiIsIsmMIjoiUiIsIuKxpCI6IlIiLCLqnZoiOiJSIiwi6p6mIjoiUiIsIuqegiI6IlIiLCLik4giOiJTIiwi77yzIjoiUyIsIuG6niI6IlMiLCLFmiI6IlMiLCLhuaQiOiJTIiwixZwiOiJTIiwi4bmgIjoiUyIsIsWgIjoiUyIsIuG5piI6IlMiLCLhuaIiOiJTIiwi4bmoIjoiUyIsIsiYIjoiUyIsIsWeIjoiUyIsIuKxviI6IlMiLCLqnqgiOiJTIiwi6p6EIjoiUyIsIuKTiSI6IlQiLCLvvLQiOiJUIiwi4bmqIjoiVCIsIsWkIjoiVCIsIuG5rCI6IlQiLCLImiI6IlQiLCLFoiI6IlQiLCLhubAiOiJUIiwi4bmuIjoiVCIsIsWmIjoiVCIsIsasIjoiVCIsIsauIjoiVCIsIsi+IjoiVCIsIuqehiI6IlQiLCLqnKgiOiJUWiIsIuKTiiI6IlUiLCLvvLUiOiJVIiwiw5kiOiJVIiwiw5oiOiJVIiwiw5siOiJVIiwixagiOiJVIiwi4bm4IjoiVSIsIsWqIjoiVSIsIuG5uiI6IlUiLCLFrCI6IlUiLCLDnCI6IlUiLCLHmyI6IlUiLCLHlyI6IlUiLCLHlSI6IlUiLCLHmSI6IlUiLCLhu6YiOiJVIiwixa4iOiJVIiwixbAiOiJVIiwix5MiOiJVIiwiyJQiOiJVIiwiyJYiOiJVIiwixq8iOiJVIiwi4buqIjoiVSIsIuG7qCI6IlUiLCLhu64iOiJVIiwi4busIjoiVSIsIuG7sCI6IlUiLCLhu6QiOiJVIiwi4bmyIjoiVSIsIsWyIjoiVSIsIuG5tiI6IlUiLCLhubQiOiJVIiwiyYQiOiJVIiwi4pOLIjoiViIsIu+8tiI6IlYiLCLhubwiOiJWIiwi4bm+IjoiViIsIsayIjoiViIsIuqdniI6IlYiLCLJhSI6IlYiLCLqnaAiOiJWWSIsIuKTjCI6IlciLCLvvLciOiJXIiwi4bqAIjoiVyIsIuG6giI6IlciLCLFtCI6IlciLCLhuoYiOiJXIiwi4bqEIjoiVyIsIuG6iCI6IlciLCLisbIiOiJXIiwi4pONIjoiWCIsIu+8uCI6IlgiLCLhuooiOiJYIiwi4bqMIjoiWCIsIuKTjiI6IlkiLCLvvLkiOiJZIiwi4buyIjoiWSIsIsOdIjoiWSIsIsW2IjoiWSIsIuG7uCI6IlkiLCLIsiI6IlkiLCLhuo4iOiJZIiwixbgiOiJZIiwi4bu2IjoiWSIsIuG7tCI6IlkiLCLGsyI6IlkiLCLJjiI6IlkiLCLhu74iOiJZIiwi4pOPIjoiWiIsIu+8uiI6IloiLCLFuSI6IloiLCLhupAiOiJaIiwixbsiOiJaIiwixb0iOiJaIiwi4bqSIjoiWiIsIuG6lCI6IloiLCLGtSI6IloiLCLIpCI6IloiLCLisb8iOiJaIiwi4rGrIjoiWiIsIuqdoiI6IloiLCLik5AiOiJhIiwi772BIjoiYSIsIuG6miI6ImEiLCLDoCI6ImEiLCLDoSI6ImEiLCLDoiI6ImEiLCLhuqciOiJhIiwi4bqlIjoiYSIsIuG6qyI6ImEiLCLhuqkiOiJhIiwiw6MiOiJhIiwixIEiOiJhIiwixIMiOiJhIiwi4bqxIjoiYSIsIuG6ryI6ImEiLCLhurUiOiJhIiwi4bqzIjoiYSIsIsinIjoiYSIsIsehIjoiYSIsIsOkIjoiYSIsIsefIjoiYSIsIuG6oyI6ImEiLCLDpSI6ImEiLCLHuyI6ImEiLCLHjiI6ImEiLCLIgSI6ImEiLCLIgyI6ImEiLCLhuqEiOiJhIiwi4bqtIjoiYSIsIuG6tyI6ImEiLCLhuIEiOiJhIiwixIUiOiJhIiwi4rGlIjoiYSIsIsmQIjoiYSIsIuqcsyI6ImFhIiwiw6YiOiJhZSIsIse9IjoiYWUiLCLHoyI6ImFlIiwi6py1IjoiYW8iLCLqnLciOiJhdSIsIuqcuSI6ImF2Iiwi6py7IjoiYXYiLCLqnL0iOiJheSIsIuKTkSI6ImIiLCLvvYIiOiJiIiwi4biDIjoiYiIsIuG4hSI6ImIiLCLhuIciOiJiIiwixoAiOiJiIiwixoMiOiJiIiwiyZMiOiJiIiwi4pOSIjoiYyIsIu+9gyI6ImMiLCLEhyI6ImMiLCLEiSI6ImMiLCLEiyI6ImMiLCLEjSI6ImMiLCLDpyI6ImMiLCLhuIkiOiJjIiwixogiOiJjIiwiyLwiOiJjIiwi6py/IjoiYyIsIuKGhCI6ImMiLCLik5MiOiJkIiwi772EIjoiZCIsIuG4iyI6ImQiLCLEjyI6ImQiLCLhuI0iOiJkIiwi4biRIjoiZCIsIuG4kyI6ImQiLCLhuI8iOiJkIiwixJEiOiJkIiwixowiOiJkIiwiyZYiOiJkIiwiyZciOiJkIiwi6p26IjoiZCIsIsezIjoiZHoiLCLHhiI6ImR6Iiwi4pOUIjoiZSIsIu+9hSI6ImUiLCLDqCI6ImUiLCLDqSI6ImUiLCLDqiI6ImUiLCLhu4EiOiJlIiwi4bq/IjoiZSIsIuG7hSI6ImUiLCLhu4MiOiJlIiwi4bq9IjoiZSIsIsSTIjoiZSIsIuG4lSI6ImUiLCLhuJciOiJlIiwixJUiOiJlIiwixJciOiJlIiwiw6siOiJlIiwi4bq7IjoiZSIsIsSbIjoiZSIsIsiFIjoiZSIsIsiHIjoiZSIsIuG6uSI6ImUiLCLhu4ciOiJlIiwiyKkiOiJlIiwi4bidIjoiZSIsIsSZIjoiZSIsIuG4mSI6ImUiLCLhuJsiOiJlIiwiyYciOiJlIiwiyZsiOiJlIiwix50iOiJlIiwi4pOVIjoiZiIsIu+9hiI6ImYiLCLhuJ8iOiJmIiwixpIiOiJmIiwi6p28IjoiZiIsIuKTliI6ImciLCLvvYciOiJnIiwix7UiOiJnIiwixJ0iOiJnIiwi4bihIjoiZyIsIsSfIjoiZyIsIsShIjoiZyIsIsenIjoiZyIsIsSjIjoiZyIsIselIjoiZyIsIsmgIjoiZyIsIuqeoSI6ImciLCLhtbkiOiJnIiwi6p2/IjoiZyIsIuKTlyI6ImgiLCLvvYgiOiJoIiwixKUiOiJoIiwi4bijIjoiaCIsIuG4pyI6ImgiLCLInyI6ImgiLCLhuKUiOiJoIiwi4bipIjoiaCIsIuG4qyI6ImgiLCLhupYiOiJoIiwixKciOiJoIiwi4rGoIjoiaCIsIuKxtiI6ImgiLCLJpSI6ImgiLCLGlSI6Imh2Iiwi4pOYIjoiaSIsIu+9iSI6ImkiLCLDrCI6ImkiLCLDrSI6ImkiLCLDriI6ImkiLCLEqSI6ImkiLCLEqyI6ImkiLCLErSI6ImkiLCLDryI6ImkiLCLhuK8iOiJpIiwi4buJIjoiaSIsIseQIjoiaSIsIsiJIjoiaSIsIsiLIjoiaSIsIuG7iyI6ImkiLCLEryI6ImkiLCLhuK0iOiJpIiwiyagiOiJpIiwixLEiOiJpIiwi4pOZIjoiaiIsIu+9iiI6ImoiLCLEtSI6ImoiLCLHsCI6ImoiLCLJiSI6ImoiLCLik5oiOiJrIiwi772LIjoiayIsIuG4sSI6ImsiLCLHqSI6ImsiLCLhuLMiOiJrIiwixLciOiJrIiwi4bi1IjoiayIsIsaZIjoiayIsIuKxqiI6ImsiLCLqnYEiOiJrIiwi6p2DIjoiayIsIuqdhSI6ImsiLCLqnqMiOiJrIiwi4pObIjoibCIsIu+9jCI6ImwiLCLFgCI6ImwiLCLEuiI6ImwiLCLEviI6ImwiLCLhuLciOiJsIiwi4bi5IjoibCIsIsS8IjoibCIsIuG4vSI6ImwiLCLhuLsiOiJsIiwixb8iOiJsIiwixYIiOiJsIiwixpoiOiJsIiwiyasiOiJsIiwi4rGhIjoibCIsIuqdiSI6ImwiLCLqnoEiOiJsIiwi6p2HIjoibCIsIseJIjoibGoiLCLik5wiOiJtIiwi772NIjoibSIsIuG4vyI6Im0iLCLhuYEiOiJtIiwi4bmDIjoibSIsIsmxIjoibSIsIsmvIjoibSIsIuKTnSI6Im4iLCLvvY4iOiJuIiwix7kiOiJuIiwixYQiOiJuIiwiw7EiOiJuIiwi4bmFIjoibiIsIsWIIjoibiIsIuG5hyI6Im4iLCLFhiI6Im4iLCLhuYsiOiJuIiwi4bmJIjoibiIsIsaeIjoibiIsIsmyIjoibiIsIsWJIjoibiIsIuqekSI6Im4iLCLqnqUiOiJuIiwix4wiOiJuaiIsIuKTniI6Im8iLCLvvY8iOiJvIiwiw7IiOiJvIiwiw7MiOiJvIiwiw7QiOiJvIiwi4buTIjoibyIsIuG7kSI6Im8iLCLhu5ciOiJvIiwi4buVIjoibyIsIsO1IjoibyIsIuG5jSI6Im8iLCLIrSI6Im8iLCLhuY8iOiJvIiwixY0iOiJvIiwi4bmRIjoibyIsIuG5kyI6Im8iLCLFjyI6Im8iLCLIryI6Im8iLCLIsSI6Im8iLCLDtiI6Im8iLCLIqyI6Im8iLCLhu48iOiJvIiwixZEiOiJvIiwix5IiOiJvIiwiyI0iOiJvIiwiyI8iOiJvIiwixqEiOiJvIiwi4budIjoibyIsIuG7myI6Im8iLCLhu6EiOiJvIiwi4bufIjoibyIsIuG7oyI6Im8iLCLhu40iOiJvIiwi4buZIjoibyIsIserIjoibyIsIsetIjoibyIsIsO4IjoibyIsIse/IjoibyIsIsmUIjoibyIsIuqdiyI6Im8iLCLqnY0iOiJvIiwiybUiOiJvIiwixqMiOiJvaSIsIsijIjoib3UiLCLqnY8iOiJvbyIsIuKTnyI6InAiLCLvvZAiOiJwIiwi4bmVIjoicCIsIuG5lyI6InAiLCLGpSI6InAiLCLhtb0iOiJwIiwi6p2RIjoicCIsIuqdkyI6InAiLCLqnZUiOiJwIiwi4pOgIjoicSIsIu+9kSI6InEiLCLJiyI6InEiLCLqnZciOiJxIiwi6p2ZIjoicSIsIuKToSI6InIiLCLvvZIiOiJyIiwixZUiOiJyIiwi4bmZIjoiciIsIsWZIjoiciIsIsiRIjoiciIsIsiTIjoiciIsIuG5myI6InIiLCLhuZ0iOiJyIiwixZciOiJyIiwi4bmfIjoiciIsIsmNIjoiciIsIsm9IjoiciIsIuqdmyI6InIiLCLqnqciOiJyIiwi6p6DIjoiciIsIuKToiI6InMiLCLvvZMiOiJzIiwiw58iOiJzIiwixZsiOiJzIiwi4bmlIjoicyIsIsWdIjoicyIsIuG5oSI6InMiLCLFoSI6InMiLCLhuaciOiJzIiwi4bmjIjoicyIsIuG5qSI6InMiLCLImSI6InMiLCLFnyI6InMiLCLIvyI6InMiLCLqnqkiOiJzIiwi6p6FIjoicyIsIuG6myI6InMiLCLik6MiOiJ0Iiwi772UIjoidCIsIuG5qyI6InQiLCLhupciOiJ0IiwixaUiOiJ0Iiwi4bmtIjoidCIsIsibIjoidCIsIsWjIjoidCIsIuG5sSI6InQiLCLhua8iOiJ0IiwixaciOiJ0Iiwixq0iOiJ0IiwiyogiOiJ0Iiwi4rGmIjoidCIsIuqehyI6InQiLCLqnKkiOiJ0eiIsIuKTpCI6InUiLCLvvZUiOiJ1Iiwiw7kiOiJ1Iiwiw7oiOiJ1Iiwiw7siOiJ1IiwixakiOiJ1Iiwi4bm5IjoidSIsIsWrIjoidSIsIuG5uyI6InUiLCLFrSI6InUiLCLDvCI6InUiLCLHnCI6InUiLCLHmCI6InUiLCLHliI6InUiLCLHmiI6InUiLCLhu6ciOiJ1Iiwixa8iOiJ1IiwixbEiOiJ1Iiwix5QiOiJ1IiwiyJUiOiJ1IiwiyJciOiJ1IiwixrAiOiJ1Iiwi4burIjoidSIsIuG7qSI6InUiLCLhu68iOiJ1Iiwi4butIjoidSIsIuG7sSI6InUiLCLhu6UiOiJ1Iiwi4bmzIjoidSIsIsWzIjoidSIsIuG5tyI6InUiLCLhubUiOiJ1IiwiyokiOiJ1Iiwi4pOlIjoidiIsIu+9liI6InYiLCLhub0iOiJ2Iiwi4bm/IjoidiIsIsqLIjoidiIsIuqdnyI6InYiLCLKjCI6InYiLCLqnaEiOiJ2eSIsIuKTpiI6InciLCLvvZciOiJ3Iiwi4bqBIjoidyIsIuG6gyI6InciLCLFtSI6InciLCLhuociOiJ3Iiwi4bqFIjoidyIsIuG6mCI6InciLCLhuokiOiJ3Iiwi4rGzIjoidyIsIuKTpyI6IngiLCLvvZgiOiJ4Iiwi4bqLIjoieCIsIuG6jSI6IngiLCLik6giOiJ5Iiwi772ZIjoieSIsIuG7syI6InkiLCLDvSI6InkiLCLFtyI6InkiLCLhu7kiOiJ5IiwiyLMiOiJ5Iiwi4bqPIjoieSIsIsO/IjoieSIsIuG7tyI6InkiLCLhupkiOiJ5Iiwi4bu1IjoieSIsIsa0IjoieSIsIsmPIjoieSIsIuG7vyI6InkiLCLik6kiOiJ6Iiwi772aIjoieiIsIsW6IjoieiIsIuG6kSI6InoiLCLFvCI6InoiLCLFviI6InoiLCLhupMiOiJ6Iiwi4bqVIjoieiIsIsa2IjoieiIsIsilIjoieiIsIsmAIjoieiIsIuKxrCI6InoiLCLqnaMiOiJ6IiwizoYiOiLOkSIsIs6IIjoizpUiLCLOiSI6Is6XIiwizooiOiLOmSIsIs6qIjoizpkiLCLOjCI6Is6fIiwizo4iOiLOpSIsIs6rIjoizqUiLCLOjyI6Is6pIiwizqwiOiLOsSIsIs6tIjoizrUiLCLOriI6Is63Iiwizq8iOiLOuSIsIs+KIjoizrkiLCLOkCI6Is65Iiwiz4wiOiLOvyIsIs+NIjoiz4UiLCLPiyI6Is+FIiwizrAiOiLPhSIsIs+JIjoiz4kiLCLPgiI6Is+DIn19KSxiLmRlZmluZSgic2VsZWN0Mi9kYXRhL2Jhc2UiLFsiLi4vdXRpbHMiXSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsYyl7Yi5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzKX1yZXR1cm4gYS5FeHRlbmQoYixhLk9ic2VydmFibGUpLGIucHJvdG90eXBlLmN1cnJlbnQ9ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKCJUaGUgYGN1cnJlbnRgIG1ldGhvZCBtdXN0IGJlIGRlZmluZWQgaW4gY2hpbGQgY2xhc3Nlcy4iKX0sYi5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24oYSxiKXt0aHJvdyBuZXcgRXJyb3IoIlRoZSBgcXVlcnlgIG1ldGhvZCBtdXN0IGJlIGRlZmluZWQgaW4gY2hpbGQgY2xhc3Nlcy4iKX0sYi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihhLGIpe30sYi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe30sYi5wcm90b3R5cGUuZ2VuZXJhdGVSZXN1bHRJZD1mdW5jdGlvbihiLGMpe3ZhciBkPWIuaWQrIi1yZXN1bHQtIjtyZXR1cm4gZCs9YS5nZW5lcmF0ZUNoYXJzKDQpLG51bGwhPWMuaWQ/ZCs9Ii0iK2MuaWQudG9TdHJpbmcoKTpkKz0iLSIrYS5nZW5lcmF0ZUNoYXJzKDQpLGR9LGJ9KSxiLmRlZmluZSgic2VsZWN0Mi9kYXRhL3NlbGVjdCIsWyIuL2Jhc2UiLCIuLi91dGlscyIsImpxdWVyeSJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEsYil7dGhpcy4kZWxlbWVudD1hLHRoaXMub3B0aW9ucz1iLGQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyl9cmV0dXJuIGIuRXh0ZW5kKGQsYSksZC5wcm90b3R5cGUuY3VycmVudD1mdW5jdGlvbihhKXt2YXIgYj1bXSxkPXRoaXM7dGhpcy4kZWxlbWVudC5maW5kKCI6c2VsZWN0ZWQiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGE9Yyh0aGlzKSxlPWQuaXRlbShhKTtiLnB1c2goZSl9KSxhKGIpfSxkLnByb3RvdHlwZS5zZWxlY3Q9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZihhLnNlbGVjdGVkPSEwLGMoYS5lbGVtZW50KS5pcygib3B0aW9uIikpcmV0dXJuIGEuZWxlbWVudC5zZWxlY3RlZD0hMCx2b2lkIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigiY2hhbmdlIik7aWYodGhpcy4kZWxlbWVudC5wcm9wKCJtdWx0aXBsZSIpKXRoaXMuY3VycmVudChmdW5jdGlvbihkKXt2YXIgZT1bXTthPVthXSxhLnB1c2guYXBwbHkoYSxkKTtmb3IodmFyIGY9MDtmPGEubGVuZ3RoO2YrKyl7dmFyIGc9YVtmXS5pZDstMT09PWMuaW5BcnJheShnLGUpJiZlLnB1c2goZyl9Yi4kZWxlbWVudC52YWwoZSksYi4kZWxlbWVudC50cmlnZ2VyKCJjaGFuZ2UiKX0pO2Vsc2V7dmFyIGQ9YS5pZDt0aGlzLiRlbGVtZW50LnZhbChkKSx0aGlzLiRlbGVtZW50LnRyaWdnZXIoImNoYW5nZSIpfX0sZC5wcm90b3R5cGUudW5zZWxlY3Q9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZih0aGlzLiRlbGVtZW50LnByb3AoIm11bHRpcGxlIikpe2lmKGEuc2VsZWN0ZWQ9ITEsYyhhLmVsZW1lbnQpLmlzKCJvcHRpb24iKSlyZXR1cm4gYS5lbGVtZW50LnNlbGVjdGVkPSExLHZvaWQgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJjaGFuZ2UiKTt0aGlzLmN1cnJlbnQoZnVuY3Rpb24oZCl7Zm9yKHZhciBlPVtdLGY9MDtmPGQubGVuZ3RoO2YrKyl7dmFyIGc9ZFtmXS5pZDtnIT09YS5pZCYmLTE9PT1jLmluQXJyYXkoZyxlKSYmZS5wdXNoKGcpfWIuJGVsZW1lbnQudmFsKGUpLGIuJGVsZW1lbnQudHJpZ2dlcigiY2hhbmdlIil9KX19LGQucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO3RoaXMuY29udGFpbmVyPWEsYS5vbigic2VsZWN0IixmdW5jdGlvbihhKXtjLnNlbGVjdChhLmRhdGEpfSksYS5vbigidW5zZWxlY3QiLGZ1bmN0aW9uKGEpe2MudW5zZWxlY3QoYS5kYXRhKX0pfSxkLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5maW5kKCIqIikuZWFjaChmdW5jdGlvbigpe2IuUmVtb3ZlRGF0YSh0aGlzKX0pfSxkLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbihhLGIpe3ZhciBkPVtdLGU9dGhpczt0aGlzLiRlbGVtZW50LmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbigpe3ZhciBiPWModGhpcyk7aWYoYi5pcygib3B0aW9uIil8fGIuaXMoIm9wdGdyb3VwIikpe3ZhciBmPWUuaXRlbShiKSxnPWUubWF0Y2hlcyhhLGYpO251bGwhPT1nJiZkLnB1c2goZyl9fSksYih7cmVzdWx0czpkfSl9LGQucHJvdG90eXBlLmFkZE9wdGlvbnM9ZnVuY3Rpb24oYSl7Yi5hcHBlbmRNYW55KHRoaXMuJGVsZW1lbnQsYSl9LGQucHJvdG90eXBlLm9wdGlvbj1mdW5jdGlvbihhKXt2YXIgZDthLmNoaWxkcmVuPyhkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGdyb3VwIiksZC5sYWJlbD1hLnRleHQpOihkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpLHZvaWQgMCE9PWQudGV4dENvbnRlbnQ/ZC50ZXh0Q29udGVudD1hLnRleHQ6ZC5pbm5lclRleHQ9YS50ZXh0KSx2b2lkIDAhPT1hLmlkJiYoZC52YWx1ZT1hLmlkKSxhLmRpc2FibGVkJiYoZC5kaXNhYmxlZD0hMCksYS5zZWxlY3RlZCYmKGQuc2VsZWN0ZWQ9ITApLGEudGl0bGUmJihkLnRpdGxlPWEudGl0bGUpO3ZhciBlPWMoZCksZj10aGlzLl9ub3JtYWxpemVJdGVtKGEpO3JldHVybiBmLmVsZW1lbnQ9ZCxiLlN0b3JlRGF0YShkLCJkYXRhIixmKSxlfSxkLnByb3RvdHlwZS5pdGVtPWZ1bmN0aW9uKGEpe3ZhciBkPXt9O2lmKG51bGwhPShkPWIuR2V0RGF0YShhWzBdLCJkYXRhIikpKXJldHVybiBkO2lmKGEuaXMoIm9wdGlvbiIpKWQ9e2lkOmEudmFsKCksdGV4dDphLnRleHQoKSxkaXNhYmxlZDphLnByb3AoImRpc2FibGVkIiksc2VsZWN0ZWQ6YS5wcm9wKCJzZWxlY3RlZCIpLHRpdGxlOmEucHJvcCgidGl0bGUiKX07ZWxzZSBpZihhLmlzKCJvcHRncm91cCIpKXtkPXt0ZXh0OmEucHJvcCgibGFiZWwiKSxjaGlsZHJlbjpbXSx0aXRsZTphLnByb3AoInRpdGxlIil9O2Zvcih2YXIgZT1hLmNoaWxkcmVuKCJvcHRpb24iKSxmPVtdLGc9MDtnPGUubGVuZ3RoO2crKyl7dmFyIGg9YyhlW2ddKSxpPXRoaXMuaXRlbShoKTtmLnB1c2goaSl9ZC5jaGlsZHJlbj1mfXJldHVybiBkPXRoaXMuX25vcm1hbGl6ZUl0ZW0oZCksZC5lbGVtZW50PWFbMF0sYi5TdG9yZURhdGEoYVswXSwiZGF0YSIsZCksZH0sZC5wcm90b3R5cGUuX25vcm1hbGl6ZUl0ZW09ZnVuY3Rpb24oYSl7YSE9PU9iamVjdChhKSYmKGE9e2lkOmEsdGV4dDphfSksYT1jLmV4dGVuZCh7fSx7dGV4dDoiIn0sYSk7dmFyIGI9e3NlbGVjdGVkOiExLGRpc2FibGVkOiExfTtyZXR1cm4gbnVsbCE9YS5pZCYmKGEuaWQ9YS5pZC50b1N0cmluZygpKSxudWxsIT1hLnRleHQmJihhLnRleHQ9YS50ZXh0LnRvU3RyaW5nKCkpLG51bGw9PWEuX3Jlc3VsdElkJiZhLmlkJiZudWxsIT10aGlzLmNvbnRhaW5lciYmKGEuX3Jlc3VsdElkPXRoaXMuZ2VuZXJhdGVSZXN1bHRJZCh0aGlzLmNvbnRhaW5lcixhKSksYy5leHRlbmQoe30sYixhKX0sZC5wcm90b3R5cGUubWF0Y2hlcz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9wdGlvbnMuZ2V0KCJtYXRjaGVyIikoYSxiKX0sZH0pLGIuZGVmaW5lKCJzZWxlY3QyL2RhdGEvYXJyYXkiLFsiLi9zZWxlY3QiLCIuLi91dGlscyIsImpxdWVyeSJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEsYil7dmFyIGM9Yi5nZXQoImRhdGEiKXx8W107ZC5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLGEsYiksdGhpcy5hZGRPcHRpb25zKHRoaXMuY29udmVydFRvT3B0aW9ucyhjKSl9cmV0dXJuIGIuRXh0ZW5kKGQsYSksZC5wcm90b3R5cGUuc2VsZWN0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuJGVsZW1lbnQuZmluZCgib3B0aW9uIikuZmlsdGVyKGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGMudmFsdWU9PWEuaWQudG9TdHJpbmcoKX0pOzA9PT1iLmxlbmd0aCYmKGI9dGhpcy5vcHRpb24oYSksdGhpcy5hZGRPcHRpb25zKGIpKSxkLl9fc3VwZXJfXy5zZWxlY3QuY2FsbCh0aGlzLGEpfSxkLnByb3RvdHlwZS5jb252ZXJ0VG9PcHRpb25zPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcykudmFsKCk9PWEuaWR9fWZvcih2YXIgZT10aGlzLGY9dGhpcy4kZWxlbWVudC5maW5kKCJvcHRpb24iKSxnPWYubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUuaXRlbShjKHRoaXMpKS5pZH0pLmdldCgpLGg9W10saT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgaj10aGlzLl9ub3JtYWxpemVJdGVtKGFbaV0pO2lmKGMuaW5BcnJheShqLmlkLGcpPj0wKXt2YXIgaz1mLmZpbHRlcihkKGopKSxsPXRoaXMuaXRlbShrKSxtPWMuZXh0ZW5kKCEwLHt9LGosbCksbj10aGlzLm9wdGlvbihtKTtrLnJlcGxhY2VXaXRoKG4pfWVsc2V7dmFyIG89dGhpcy5vcHRpb24oaik7aWYoai5jaGlsZHJlbil7dmFyIHA9dGhpcy5jb252ZXJ0VG9PcHRpb25zKGouY2hpbGRyZW4pO2IuYXBwZW5kTWFueShvLHApfWgucHVzaChvKX19cmV0dXJuIGh9LGR9KSxiLmRlZmluZSgic2VsZWN0Mi9kYXRhL2FqYXgiLFsiLi9hcnJheSIsIi4uL3V0aWxzIiwianF1ZXJ5Il0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSxiKXt0aGlzLmFqYXhPcHRpb25zPXRoaXMuX2FwcGx5RGVmYXVsdHMoYi5nZXQoImFqYXgiKSksbnVsbCE9dGhpcy5hamF4T3B0aW9ucy5wcm9jZXNzUmVzdWx0cyYmKHRoaXMucHJvY2Vzc1Jlc3VsdHM9dGhpcy5hamF4T3B0aW9ucy5wcm9jZXNzUmVzdWx0cyksZC5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLGEsYil9cmV0dXJuIGIuRXh0ZW5kKGQsYSksZC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdHM9ZnVuY3Rpb24oYSl7dmFyIGI9e2RhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIGMuZXh0ZW5kKHt9LGEse3E6YS50ZXJtfSl9LHRyYW5zcG9ydDpmdW5jdGlvbihhLGIsZCl7dmFyIGU9Yy5hamF4KGEpO3JldHVybiBlLnRoZW4oYiksZS5mYWlsKGQpLGV9fTtyZXR1cm4gYy5leHRlbmQoe30sYixhLCEwKX0sZC5wcm90b3R5cGUucHJvY2Vzc1Jlc3VsdHM9ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LGQucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gZCgpe3ZhciBkPWYudHJhbnNwb3J0KGYsZnVuY3Rpb24oZCl7dmFyIGY9ZS5wcm9jZXNzUmVzdWx0cyhkLGEpO2Uub3B0aW9ucy5nZXQoImRlYnVnIikmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLmVycm9yJiYoZiYmZi5yZXN1bHRzJiZjLmlzQXJyYXkoZi5yZXN1bHRzKXx8Y29uc29sZS5lcnJvcigiU2VsZWN0MjogVGhlIEFKQVggcmVzdWx0cyBkaWQgbm90IHJldHVybiBhbiBhcnJheSBpbiB0aGUgYHJlc3VsdHNgIGtleSBvZiB0aGUgcmVzcG9uc2UuIikpLGIoZil9LGZ1bmN0aW9uKCl7InN0YXR1cyJpbiBkJiYoMD09PWQuc3RhdHVzfHwiMCI9PT1kLnN0YXR1cyl8fGUudHJpZ2dlcigicmVzdWx0czptZXNzYWdlIix7bWVzc2FnZToiZXJyb3JMb2FkaW5nIn0pfSk7ZS5fcmVxdWVzdD1kfXZhciBlPXRoaXM7bnVsbCE9dGhpcy5fcmVxdWVzdCYmKGMuaXNGdW5jdGlvbih0aGlzLl9yZXF1ZXN0LmFib3J0KSYmdGhpcy5fcmVxdWVzdC5hYm9ydCgpLHRoaXMuX3JlcXVlc3Q9bnVsbCk7dmFyIGY9Yy5leHRlbmQoe3R5cGU6IkdFVCJ9LHRoaXMuYWpheE9wdGlvbnMpOyJmdW5jdGlvbiI9PXR5cGVvZiBmLnVybCYmKGYudXJsPWYudXJsLmNhbGwodGhpcy4kZWxlbWVudCxhKSksImZ1bmN0aW9uIj09dHlwZW9mIGYuZGF0YSYmKGYuZGF0YT1mLmRhdGEuY2FsbCh0aGlzLiRlbGVtZW50LGEpKSx0aGlzLmFqYXhPcHRpb25zLmRlbGF5JiZudWxsIT1hLnRlcm0/KHRoaXMuX3F1ZXJ5VGltZW91dCYmd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl9xdWVyeVRpbWVvdXQpLHRoaXMuX3F1ZXJ5VGltZW91dD13aW5kb3cuc2V0VGltZW91dChkLHRoaXMuYWpheE9wdGlvbnMuZGVsYXkpKTpkKCl9LGR9KSxiLmRlZmluZSgic2VsZWN0Mi9kYXRhL3RhZ3MiLFsianF1ZXJ5Il0sZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiLGMsZCl7dmFyIGU9ZC5nZXQoInRhZ3MiKSxmPWQuZ2V0KCJjcmVhdGVUYWciKTt2b2lkIDAhPT1mJiYodGhpcy5jcmVhdGVUYWc9Zik7dmFyIGc9ZC5nZXQoImluc2VydFRhZyIpO2lmKHZvaWQgMCE9PWcmJih0aGlzLmluc2VydFRhZz1nKSxiLmNhbGwodGhpcyxjLGQpLGEuaXNBcnJheShlKSlmb3IodmFyIGg9MDtoPGUubGVuZ3RoO2grKyl7dmFyIGk9ZVtoXSxqPXRoaXMuX25vcm1hbGl6ZUl0ZW0oaSksaz10aGlzLm9wdGlvbihqKTt0aGlzLiRlbGVtZW50LmFwcGVuZChrKX19cmV0dXJuIGIucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEsZil7Zm9yKHZhciBnPWEucmVzdWx0cyxoPTA7aDxnLmxlbmd0aDtoKyspe3ZhciBpPWdbaF0saj1udWxsIT1pLmNoaWxkcmVuJiYhZCh7cmVzdWx0czppLmNoaWxkcmVufSwhMCk7aWYoKGkudGV4dHx8IiIpLnRvVXBwZXJDYXNlKCk9PT0oYi50ZXJtfHwiIikudG9VcHBlckNhc2UoKXx8ailyZXR1cm4hZiYmKGEuZGF0YT1nLHZvaWQgYyhhKSl9aWYoZilyZXR1cm4hMDt2YXIgaz1lLmNyZWF0ZVRhZyhiKTtpZihudWxsIT1rKXt2YXIgbD1lLm9wdGlvbihrKTtsLmF0dHIoImRhdGEtc2VsZWN0Mi10YWciLCEwKSxlLmFkZE9wdGlvbnMoW2xdKSxlLmluc2VydFRhZyhnLGspfWEucmVzdWx0cz1nLGMoYSl9dmFyIGU9dGhpcztpZih0aGlzLl9yZW1vdmVPbGRUYWdzKCksbnVsbD09Yi50ZXJtfHxudWxsIT1iLnBhZ2UpcmV0dXJuIHZvaWQgYS5jYWxsKHRoaXMsYixjKTthLmNhbGwodGhpcyxiLGQpfSxiLnByb3RvdHlwZS5jcmVhdGVUYWc9ZnVuY3Rpb24oYixjKXt2YXIgZD1hLnRyaW0oYy50ZXJtKTtyZXR1cm4iIj09PWQ/bnVsbDp7aWQ6ZCx0ZXh0OmR9fSxiLnByb3RvdHlwZS5pbnNlcnRUYWc9ZnVuY3Rpb24oYSxiLGMpe2IudW5zaGlmdChjKX0sYi5wcm90b3R5cGUuX3JlbW92ZU9sZFRhZ3M9ZnVuY3Rpb24oYil7dGhpcy5fbGFzdFRhZzt0aGlzLiRlbGVtZW50LmZpbmQoIm9wdGlvbltkYXRhLXNlbGVjdDItdGFnXSIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkfHxhKHRoaXMpLnJlbW92ZSgpfSl9LGJ9KSxiLmRlZmluZSgic2VsZWN0Mi9kYXRhL3Rva2VuaXplciIsWyJqcXVlcnkiXSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsYixjKXt2YXIgZD1jLmdldCgidG9rZW5pemVyIik7dm9pZCAwIT09ZCYmKHRoaXMudG9rZW5pemVyPWQpLGEuY2FsbCh0aGlzLGIsYyl9cmV0dXJuIGIucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oYSxiLGMpe2EuY2FsbCh0aGlzLGIsYyksdGhpcy4kc2VhcmNoPWIuZHJvcGRvd24uJHNlYXJjaHx8Yi5zZWxlY3Rpb24uJHNlYXJjaHx8Yy5maW5kKCIuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkIil9LGIucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKGIsYyxkKXtmdW5jdGlvbiBlKGIpe3ZhciBjPWcuX25vcm1hbGl6ZUl0ZW0oYik7aWYoIWcuJGVsZW1lbnQuZmluZCgib3B0aW9uIikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykudmFsKCk9PT1jLmlkfSkubGVuZ3RoKXt2YXIgZD1nLm9wdGlvbihjKTtkLmF0dHIoImRhdGEtc2VsZWN0Mi10YWciLCEwKSxnLl9yZW1vdmVPbGRUYWdzKCksZy5hZGRPcHRpb25zKFtkXSl9ZihjKX1mdW5jdGlvbiBmKGEpe2cudHJpZ2dlcigic2VsZWN0Iix7ZGF0YTphfSl9dmFyIGc9dGhpcztjLnRlcm09Yy50ZXJtfHwiIjt2YXIgaD10aGlzLnRva2VuaXplcihjLHRoaXMub3B0aW9ucyxlKTtoLnRlcm0hPT1jLnRlcm0mJih0aGlzLiRzZWFyY2gubGVuZ3RoJiYodGhpcy4kc2VhcmNoLnZhbChoLnRlcm0pLHRoaXMuJHNlYXJjaC5mb2N1cygpKSxjLnRlcm09aC50ZXJtKSxiLmNhbGwodGhpcyxjLGQpfSxiLnByb3RvdHlwZS50b2tlbml6ZXI9ZnVuY3Rpb24oYixjLGQsZSl7Zm9yKHZhciBmPWQuZ2V0KCJ0b2tlblNlcGFyYXRvcnMiKXx8W10sZz1jLnRlcm0saD0wLGk9dGhpcy5jcmVhdGVUYWd8fGZ1bmN0aW9uKGEpe3JldHVybntpZDphLnRlcm0sdGV4dDphLnRlcm19fTtoPGcubGVuZ3RoOyl7dmFyIGo9Z1toXTtpZigtMSE9PWEuaW5BcnJheShqLGYpKXt2YXIgaz1nLnN1YnN0cigwLGgpLGw9YS5leHRlbmQoe30sYyx7dGVybTprfSksbT1pKGwpO251bGwhPW0/KGUobSksZz1nLnN1YnN0cihoKzEpfHwiIixoPTApOmgrK31lbHNlIGgrK31yZXR1cm57dGVybTpnfX0sYn0pLGIuZGVmaW5lKCJzZWxlY3QyL2RhdGEvbWluaW11bUlucHV0TGVuZ3RoIixbXSxmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiLGMpe3RoaXMubWluaW11bUlucHV0TGVuZ3RoPWMuZ2V0KCJtaW5pbXVtSW5wdXRMZW5ndGgiKSxhLmNhbGwodGhpcyxiLGMpfXJldHVybiBhLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbihhLGIsYyl7aWYoYi50ZXJtPWIudGVybXx8IiIsYi50ZXJtLmxlbmd0aDx0aGlzLm1pbmltdW1JbnB1dExlbmd0aClyZXR1cm4gdm9pZCB0aGlzLnRyaWdnZXIoInJlc3VsdHM6bWVzc2FnZSIse21lc3NhZ2U6ImlucHV0VG9vU2hvcnQiLGFyZ3M6e21pbmltdW06dGhpcy5taW5pbXVtSW5wdXRMZW5ndGgsaW5wdXQ6Yi50ZXJtLHBhcmFtczpifX0pO2EuY2FsbCh0aGlzLGIsYyl9LGF9KSxiLmRlZmluZSgic2VsZWN0Mi9kYXRhL21heGltdW1JbnB1dExlbmd0aCIsW10sZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYixjKXt0aGlzLm1heGltdW1JbnB1dExlbmd0aD1jLmdldCgibWF4aW11bUlucHV0TGVuZ3RoIiksYS5jYWxsKHRoaXMsYixjKX1yZXR1cm4gYS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24oYSxiLGMpe2lmKGIudGVybT1iLnRlcm18fCIiLHRoaXMubWF4aW11bUlucHV0TGVuZ3RoPjAmJmIudGVybS5sZW5ndGg+dGhpcy5tYXhpbXVtSW5wdXRMZW5ndGgpcmV0dXJuIHZvaWQgdGhpcy50cmlnZ2VyKCJyZXN1bHRzOm1lc3NhZ2UiLHttZXNzYWdlOiJpbnB1dFRvb0xvbmciLGFyZ3M6e21heGltdW06dGhpcy5tYXhpbXVtSW5wdXRMZW5ndGgsaW5wdXQ6Yi50ZXJtLHBhcmFtczpifX0pO2EuY2FsbCh0aGlzLGIsYyl9LGF9KSxiLmRlZmluZSgic2VsZWN0Mi9kYXRhL21heGltdW1TZWxlY3Rpb25MZW5ndGgiLFtdLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIsYyl7dGhpcy5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoPWMuZ2V0KCJtYXhpbXVtU2VsZWN0aW9uTGVuZ3RoIiksYS5jYWxsKHRoaXMsYixjKX1yZXR1cm4gYS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXM7dGhpcy5jdXJyZW50KGZ1bmN0aW9uKGUpe3ZhciBmPW51bGwhPWU/ZS5sZW5ndGg6MDtpZihkLm1heGltdW1TZWxlY3Rpb25MZW5ndGg+MCYmZj49ZC5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoKXJldHVybiB2b2lkIGQudHJpZ2dlcigicmVzdWx0czptZXNzYWdlIix7bWVzc2FnZToibWF4aW11bVNlbGVjdGVkIixhcmdzOnttYXhpbXVtOmQubWF4aW11bVNlbGVjdGlvbkxlbmd0aH19KTthLmNhbGwoZCxiLGMpfSl9LGF9KSxiLmRlZmluZSgic2VsZWN0Mi9kcm9wZG93biIsWyJqcXVlcnkiLCIuL3V0aWxzIl0sZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7dGhpcy4kZWxlbWVudD1hLHRoaXMub3B0aW9ucz1iLGMuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyl9cmV0dXJuIGIuRXh0ZW5kKGMsYi5PYnNlcnZhYmxlKSxjLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgYj1hKCc8c3BhbiBjbGFzcz0ic2VsZWN0Mi1kcm9wZG93biI+PHNwYW4gY2xhc3M9InNlbGVjdDItcmVzdWx0cyI+PC9zcGFuPjwvc3Bhbj4nKTtyZXR1cm4gYi5hdHRyKCJkaXIiLHRoaXMub3B0aW9ucy5nZXQoImRpciIpKSx0aGlzLiRkcm9wZG93bj1iLGJ9LGMucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt9LGMucHJvdG90eXBlLnBvc2l0aW9uPWZ1bmN0aW9uKGEsYil7fSxjLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy4kZHJvcGRvd24ucmVtb3ZlKCl9LGN9KSxiLmRlZmluZSgic2VsZWN0Mi9kcm9wZG93bi9zZWFyY2giLFsianF1ZXJ5IiwiLi4vdXRpbHMiXSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoKXt9cmV0dXJuIGMucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihiKXt2YXIgYz1iLmNhbGwodGhpcyksZD1hKCc8c3BhbiBjbGFzcz0ic2VsZWN0Mi1zZWFyY2ggc2VsZWN0Mi1zZWFyY2gtLWRyb3Bkb3duIj48aW5wdXQgY2xhc3M9InNlbGVjdDItc2VhcmNoX19maWVsZCIgdHlwZT0ic2VhcmNoIiB0YWJpbmRleD0iLTEiIGF1dG9jb21wbGV0ZT0ib2ZmIiBhdXRvY29ycmVjdD0ib2ZmIiBhdXRvY2FwaXRhbGl6ZT0ibm9uZSIgc3BlbGxjaGVjaz0iZmFsc2UiIHJvbGU9InRleHRib3giIC8+PC9zcGFuPicpO3JldHVybiB0aGlzLiRzZWFyY2hDb250YWluZXI9ZCx0aGlzLiRzZWFyY2g9ZC5maW5kKCJpbnB1dCIpLGMucHJlcGVuZChkKSxjfSxjLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGIsYyxkKXt2YXIgZT10aGlzO2IuY2FsbCh0aGlzLGMsZCksdGhpcy4kc2VhcmNoLm9uKCJrZXlkb3duIixmdW5jdGlvbihhKXtlLnRyaWdnZXIoImtleXByZXNzIixhKSxlLl9rZXlVcFByZXZlbnRlZD1hLmlzRGVmYXVsdFByZXZlbnRlZCgpfSksdGhpcy4kc2VhcmNoLm9uKCJpbnB1dCIsZnVuY3Rpb24oYil7YSh0aGlzKS5vZmYoImtleXVwIil9KSx0aGlzLiRzZWFyY2gub24oImtleXVwIGlucHV0IixmdW5jdGlvbihhKXtlLmhhbmRsZVNlYXJjaChhKX0pLGMub24oIm9wZW4iLGZ1bmN0aW9uKCl7ZS4kc2VhcmNoLmF0dHIoInRhYmluZGV4IiwwKSxlLiRzZWFyY2guZm9jdXMoKSx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UuJHNlYXJjaC5mb2N1cygpfSwwKX0pLGMub24oImNsb3NlIixmdW5jdGlvbigpe2UuJHNlYXJjaC5hdHRyKCJ0YWJpbmRleCIsLTEpLGUuJHNlYXJjaC52YWwoIiIpLGUuJHNlYXJjaC5ibHVyKCl9KSxjLm9uKCJmb2N1cyIsZnVuY3Rpb24oKXtjLmlzT3BlbigpfHxlLiRzZWFyY2guZm9jdXMoKX0pLGMub24oInJlc3VsdHM6YWxsIixmdW5jdGlvbihhKXtpZihudWxsPT1hLnF1ZXJ5LnRlcm18fCIiPT09YS5xdWVyeS50ZXJtKXtlLnNob3dTZWFyY2goYSk/ZS4kc2VhcmNoQ29udGFpbmVyLnJlbW92ZUNsYXNzKCJzZWxlY3QyLXNlYXJjaC0taGlkZSIpOmUuJHNlYXJjaENvbnRhaW5lci5hZGRDbGFzcygic2VsZWN0Mi1zZWFyY2gtLWhpZGUiKX19KX0sYy5wcm90b3R5cGUuaGFuZGxlU2VhcmNoPWZ1bmN0aW9uKGEpe2lmKCF0aGlzLl9rZXlVcFByZXZlbnRlZCl7dmFyIGI9dGhpcy4kc2VhcmNoLnZhbCgpO3RoaXMudHJpZ2dlcigicXVlcnkiLHt0ZXJtOmJ9KX10aGlzLl9rZXlVcFByZXZlbnRlZD0hMX0sYy5wcm90b3R5cGUuc2hvd1NlYXJjaD1mdW5jdGlvbihhLGIpe3JldHVybiEwfSxjfSksYi5kZWZpbmUoInNlbGVjdDIvZHJvcGRvd24vaGlkZVBsYWNlaG9sZGVyIixbXSxmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiLGMsZCl7dGhpcy5wbGFjZWhvbGRlcj10aGlzLm5vcm1hbGl6ZVBsYWNlaG9sZGVyKGMuZ2V0KCJwbGFjZWhvbGRlciIpKSxhLmNhbGwodGhpcyxiLGMsZCl9cmV0dXJuIGEucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihhLGIpe2IucmVzdWx0cz10aGlzLnJlbW92ZVBsYWNlaG9sZGVyKGIucmVzdWx0cyksYS5jYWxsKHRoaXMsYil9LGEucHJvdG90eXBlLm5vcm1hbGl6ZVBsYWNlaG9sZGVyPWZ1bmN0aW9uKGEsYil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBiJiYoYj17aWQ6IiIsdGV4dDpifSksYn0sYS5wcm90b3R5cGUucmVtb3ZlUGxhY2Vob2xkZXI9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yi5zbGljZSgwKSxkPWIubGVuZ3RoLTE7ZD49MDtkLS0pe3ZhciBlPWJbZF07dGhpcy5wbGFjZWhvbGRlci5pZD09PWUuaWQmJmMuc3BsaWNlKGQsMSl9cmV0dXJuIGN9LGF9KSxiLmRlZmluZSgic2VsZWN0Mi9kcm9wZG93bi9pbmZpbml0ZVNjcm9sbCIsWyJqcXVlcnkiXSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsYixjLGQpe3RoaXMubGFzdFBhcmFtcz17fSxhLmNhbGwodGhpcyxiLGMsZCksdGhpcy4kbG9hZGluZ01vcmU9dGhpcy5jcmVhdGVMb2FkaW5nTW9yZSgpLHRoaXMubG9hZGluZz0hMX1yZXR1cm4gYi5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGEsYil7dGhpcy4kbG9hZGluZ01vcmUucmVtb3ZlKCksdGhpcy5sb2FkaW5nPSExLGEuY2FsbCh0aGlzLGIpLHRoaXMuc2hvd0xvYWRpbmdNb3JlKGIpJiZ0aGlzLiRyZXN1bHRzLmFwcGVuZCh0aGlzLiRsb2FkaW5nTW9yZSl9LGIucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oYixjLGQpe3ZhciBlPXRoaXM7Yi5jYWxsKHRoaXMsYyxkKSxjLm9uKCJxdWVyeSIsZnVuY3Rpb24oYSl7ZS5sYXN0UGFyYW1zPWEsZS5sb2FkaW5nPSEwfSksYy5vbigicXVlcnk6YXBwZW5kIixmdW5jdGlvbihhKXtlLmxhc3RQYXJhbXM9YSxlLmxvYWRpbmc9ITB9KSx0aGlzLiRyZXN1bHRzLm9uKCJzY3JvbGwiLGZ1bmN0aW9uKCl7dmFyIGI9YS5jb250YWlucyhkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZS4kbG9hZGluZ01vcmVbMF0pO2lmKCFlLmxvYWRpbmcmJmIpe2UuJHJlc3VsdHMub2Zmc2V0KCkudG9wK2UuJHJlc3VsdHMub3V0ZXJIZWlnaHQoITEpKzUwPj1lLiRsb2FkaW5nTW9yZS5vZmZzZXQoKS50b3ArZS4kbG9hZGluZ01vcmUub3V0ZXJIZWlnaHQoITEpJiZlLmxvYWRNb3JlKCl9fSl9LGIucHJvdG90eXBlLmxvYWRNb3JlPWZ1bmN0aW9uKCl7dGhpcy5sb2FkaW5nPSEwO3ZhciBiPWEuZXh0ZW5kKHt9LHtwYWdlOjF9LHRoaXMubGFzdFBhcmFtcyk7Yi5wYWdlKyssdGhpcy50cmlnZ2VyKCJxdWVyeTphcHBlbmQiLGIpfSxiLnByb3RvdHlwZS5zaG93TG9hZGluZ01vcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi5wYWdpbmF0aW9uJiZiLnBhZ2luYXRpb24ubW9yZX0sYi5wcm90b3R5cGUuY3JlYXRlTG9hZGluZ01vcmU9ZnVuY3Rpb24oKXt2YXIgYj1hKCc8bGkgY2xhc3M9InNlbGVjdDItcmVzdWx0c19fb3B0aW9uIHNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1sb2FkLW1vcmUicm9sZT0idHJlZWl0ZW0iIGFyaWEtZGlzYWJsZWQ9InRydWUiPjwvbGk+JyksYz10aGlzLm9wdGlvbnMuZ2V0KCJ0cmFuc2xhdGlvbnMiKS5nZXQoImxvYWRpbmdNb3JlIik7cmV0dXJuIGIuaHRtbChjKHRoaXMubGFzdFBhcmFtcykpLGJ9LGJ9KSxiLmRlZmluZSgic2VsZWN0Mi9kcm9wZG93bi9hdHRhY2hCb2R5IixbImpxdWVyeSIsIi4uL3V0aWxzIl0sZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIsYyxkKXt0aGlzLiRkcm9wZG93blBhcmVudD1kLmdldCgiZHJvcGRvd25QYXJlbnQiKXx8YShkb2N1bWVudC5ib2R5KSxiLmNhbGwodGhpcyxjLGQpfXJldHVybiBjLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLGU9ITE7YS5jYWxsKHRoaXMsYixjKSxiLm9uKCJvcGVuIixmdW5jdGlvbigpe2QuX3Nob3dEcm9wZG93bigpLGQuX2F0dGFjaFBvc2l0aW9uaW5nSGFuZGxlcihiKSxlfHwoZT0hMCxiLm9uKCJyZXN1bHRzOmFsbCIsZnVuY3Rpb24oKXtkLl9wb3NpdGlvbkRyb3Bkb3duKCksZC5fcmVzaXplRHJvcGRvd24oKX0pLGIub24oInJlc3VsdHM6YXBwZW5kIixmdW5jdGlvbigpe2QuX3Bvc2l0aW9uRHJvcGRvd24oKSxkLl9yZXNpemVEcm9wZG93bigpfSkpfSksYi5vbigiY2xvc2UiLGZ1bmN0aW9uKCl7ZC5faGlkZURyb3Bkb3duKCksZC5fZGV0YWNoUG9zaXRpb25pbmdIYW5kbGVyKGIpfSksdGhpcy4kZHJvcGRvd25Db250YWluZXIub24oIm1vdXNlZG93biIsZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKX0pfSxjLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKGEpe2EuY2FsbCh0aGlzKSx0aGlzLiRkcm9wZG93bkNvbnRhaW5lci5yZW1vdmUoKX0sYy5wcm90b3R5cGUucG9zaXRpb249ZnVuY3Rpb24oYSxiLGMpe2IuYXR0cigiY2xhc3MiLGMuYXR0cigiY2xhc3MiKSksYi5yZW1vdmVDbGFzcygic2VsZWN0MiIpLGIuYWRkQ2xhc3MoInNlbGVjdDItY29udGFpbmVyLS1vcGVuIiksYi5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOi05OTk5OTl9KSx0aGlzLiRjb250YWluZXI9Y30sYy5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGIpe3ZhciBjPWEoIjxzcGFuPjwvc3Bhbj4iKSxkPWIuY2FsbCh0aGlzKTtyZXR1cm4gYy5hcHBlbmQoZCksdGhpcy4kZHJvcGRvd25Db250YWluZXI9YyxjfSxjLnByb3RvdHlwZS5faGlkZURyb3Bkb3duPWZ1bmN0aW9uKGEpe3RoaXMuJGRyb3Bkb3duQ29udGFpbmVyLmRldGFjaCgpfSxjLnByb3RvdHlwZS5fYXR0YWNoUG9zaXRpb25pbmdIYW5kbGVyPWZ1bmN0aW9uKGMsZCl7dmFyIGU9dGhpcyxmPSJzY3JvbGwuc2VsZWN0Mi4iK2QuaWQsZz0icmVzaXplLnNlbGVjdDIuIitkLmlkLGg9Im9yaWVudGF0aW9uY2hhbmdlLnNlbGVjdDIuIitkLmlkLGk9dGhpcy4kY29udGFpbmVyLnBhcmVudHMoKS5maWx0ZXIoYi5oYXNTY3JvbGwpO2kuZWFjaChmdW5jdGlvbigpe2IuU3RvcmVEYXRhKHRoaXMsInNlbGVjdDItc2Nyb2xsLXBvc2l0aW9uIix7eDphKHRoaXMpLnNjcm9sbExlZnQoKSx5OmEodGhpcykuc2Nyb2xsVG9wKCl9KX0pLGkub24oZixmdW5jdGlvbihjKXt2YXIgZD1iLkdldERhdGEodGhpcywic2VsZWN0Mi1zY3JvbGwtcG9zaXRpb24iKTthKHRoaXMpLnNjcm9sbFRvcChkLnkpfSksYSh3aW5kb3cpLm9uKGYrIiAiK2crIiAiK2gsZnVuY3Rpb24oYSl7ZS5fcG9zaXRpb25Ecm9wZG93bigpLGUuX3Jlc2l6ZURyb3Bkb3duKCl9KX0sYy5wcm90b3R5cGUuX2RldGFjaFBvc2l0aW9uaW5nSGFuZGxlcj1mdW5jdGlvbihjLGQpe3ZhciBlPSJzY3JvbGwuc2VsZWN0Mi4iK2QuaWQsZj0icmVzaXplLnNlbGVjdDIuIitkLmlkLGc9Im9yaWVudGF0aW9uY2hhbmdlLnNlbGVjdDIuIitkLmlkO3RoaXMuJGNvbnRhaW5lci5wYXJlbnRzKCkuZmlsdGVyKGIuaGFzU2Nyb2xsKS5vZmYoZSksYSh3aW5kb3cpLm9mZihlKyIgIitmKyIgIitnKX0sYy5wcm90b3R5cGUuX3Bvc2l0aW9uRHJvcGRvd249ZnVuY3Rpb24oKXt2YXIgYj1hKHdpbmRvdyksYz10aGlzLiRkcm9wZG93bi5oYXNDbGFzcygic2VsZWN0Mi1kcm9wZG93bi0tYWJvdmUiKSxkPXRoaXMuJGRyb3Bkb3duLmhhc0NsYXNzKCJzZWxlY3QyLWRyb3Bkb3duLS1iZWxvdyIpLGU9bnVsbCxmPXRoaXMuJGNvbnRhaW5lci5vZmZzZXQoKTtmLmJvdHRvbT1mLnRvcCt0aGlzLiRjb250YWluZXIub3V0ZXJIZWlnaHQoITEpO3ZhciBnPXtoZWlnaHQ6dGhpcy4kY29udGFpbmVyLm91dGVySGVpZ2h0KCExKX07Zy50b3A9Zi50b3AsZy5ib3R0b209Zi50b3ArZy5oZWlnaHQ7dmFyIGg9e2hlaWdodDp0aGlzLiRkcm9wZG93bi5vdXRlckhlaWdodCghMSl9LGk9e3RvcDpiLnNjcm9sbFRvcCgpLGJvdHRvbTpiLnNjcm9sbFRvcCgpK2IuaGVpZ2h0KCl9LGo9aS50b3A8Zi50b3AtaC5oZWlnaHQsaz1pLmJvdHRvbT5mLmJvdHRvbStoLmhlaWdodCxsPXtsZWZ0OmYubGVmdCx0b3A6Zy5ib3R0b219LG09dGhpcy4kZHJvcGRvd25QYXJlbnQ7InN0YXRpYyI9PT1tLmNzcygicG9zaXRpb24iKSYmKG09bS5vZmZzZXRQYXJlbnQoKSk7dmFyIG49bS5vZmZzZXQoKTtsLnRvcC09bi50b3AsbC5sZWZ0LT1uLmxlZnQsY3x8ZHx8KGU9ImJlbG93Iiksa3x8IWp8fGM/IWomJmsmJmMmJihlPSJiZWxvdyIpOmU9ImFib3ZlIiwoImFib3ZlIj09ZXx8YyYmImJlbG93IiE9PWUpJiYobC50b3A9Zy50b3Atbi50b3AtaC5oZWlnaHQpLG51bGwhPWUmJih0aGlzLiRkcm9wZG93bi5yZW1vdmVDbGFzcygic2VsZWN0Mi1kcm9wZG93bi0tYmVsb3cgc2VsZWN0Mi1kcm9wZG93bi0tYWJvdmUiKS5hZGRDbGFzcygic2VsZWN0Mi1kcm9wZG93bi0tIitlKSx0aGlzLiRjb250YWluZXIucmVtb3ZlQ2xhc3MoInNlbGVjdDItY29udGFpbmVyLS1iZWxvdyBzZWxlY3QyLWNvbnRhaW5lci0tYWJvdmUiKS5hZGRDbGFzcygic2VsZWN0Mi1jb250YWluZXItLSIrZSkpLHRoaXMuJGRyb3Bkb3duQ29udGFpbmVyLmNzcyhsKX0sYy5wcm90b3R5cGUuX3Jlc2l6ZURyb3Bkb3duPWZ1bmN0aW9uKCl7dmFyIGE9e3dpZHRoOnRoaXMuJGNvbnRhaW5lci5vdXRlcldpZHRoKCExKSsicHgifTt0aGlzLm9wdGlvbnMuZ2V0KCJkcm9wZG93bkF1dG9XaWR0aCIpJiYoYS5taW5XaWR0aD1hLndpZHRoLGEucG9zaXRpb249InJlbGF0aXZlIixhLndpZHRoPSJhdXRvIiksdGhpcy4kZHJvcGRvd24uY3NzKGEpfSxjLnByb3RvdHlwZS5fc2hvd0Ryb3Bkb3duPWZ1bmN0aW9uKGEpe3RoaXMuJGRyb3Bkb3duQ29udGFpbmVyLmFwcGVuZFRvKHRoaXMuJGRyb3Bkb3duUGFyZW50KSx0aGlzLl9wb3NpdGlvbkRyb3Bkb3duKCksdGhpcy5fcmVzaXplRHJvcGRvd24oKX0sY30pLGIuZGVmaW5lKCJzZWxlY3QyL2Ryb3Bkb3duL21pbmltdW1SZXN1bHRzRm9yU2VhcmNoIixbXSxmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYil7Zm9yKHZhciBjPTAsZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgZT1iW2RdO2UuY2hpbGRyZW4/Yys9YShlLmNoaWxkcmVuKTpjKyt9cmV0dXJuIGN9ZnVuY3Rpb24gYihhLGIsYyxkKXt0aGlzLm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoPWMuZ2V0KCJtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaCIpLHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2g8MCYmKHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2g9MS8wKSxhLmNhbGwodGhpcyxiLGMsZCl9cmV0dXJuIGIucHJvdG90eXBlLnNob3dTZWFyY2g9ZnVuY3Rpb24oYixjKXtyZXR1cm4hKGEoYy5kYXRhLnJlc3VsdHMpPHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2gpJiZiLmNhbGwodGhpcyxjKX0sYn0pLGIuZGVmaW5lKCJzZWxlY3QyL2Ryb3Bkb3duL3NlbGVjdE9uQ2xvc2UiLFsiLi4vdXRpbHMiXSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKCl7fXJldHVybiBiLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzO2EuY2FsbCh0aGlzLGIsYyksYi5vbigiY2xvc2UiLGZ1bmN0aW9uKGEpe2QuX2hhbmRsZVNlbGVjdE9uQ2xvc2UoYSl9KX0sYi5wcm90b3R5cGUuX2hhbmRsZVNlbGVjdE9uQ2xvc2U9ZnVuY3Rpb24oYixjKXtpZihjJiZudWxsIT1jLm9yaWdpbmFsU2VsZWN0MkV2ZW50KXt2YXIgZD1jLm9yaWdpbmFsU2VsZWN0MkV2ZW50O2lmKCJzZWxlY3QiPT09ZC5fdHlwZXx8InVuc2VsZWN0Ij09PWQuX3R5cGUpcmV0dXJufXZhciBlPXRoaXMuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCk7aWYoIShlLmxlbmd0aDwxKSl7dmFyIGY9YS5HZXREYXRhKGVbMF0sImRhdGEiKTtudWxsIT1mLmVsZW1lbnQmJmYuZWxlbWVudC5zZWxlY3RlZHx8bnVsbD09Zi5lbGVtZW50JiZmLnNlbGVjdGVkfHx0aGlzLnRyaWdnZXIoInNlbGVjdCIse2RhdGE6Zn0pfX0sYn0pLGIuZGVmaW5lKCJzZWxlY3QyL2Ryb3Bkb3duL2Nsb3NlT25TZWxlY3QiLFtdLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe31yZXR1cm4gYS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpczthLmNhbGwodGhpcyxiLGMpLGIub24oInNlbGVjdCIsZnVuY3Rpb24oYSl7ZC5fc2VsZWN0VHJpZ2dlcmVkKGEpfSksYi5vbigidW5zZWxlY3QiLGZ1bmN0aW9uKGEpe2QuX3NlbGVjdFRyaWdnZXJlZChhKX0pfSxhLnByb3RvdHlwZS5fc2VsZWN0VHJpZ2dlcmVkPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5vcmlnaW5hbEV2ZW50O2MmJmMuY3RybEtleXx8dGhpcy50cmlnZ2VyKCJjbG9zZSIse29yaWdpbmFsRXZlbnQ6YyxvcmlnaW5hbFNlbGVjdDJFdmVudDpifSl9LGF9KSxiLmRlZmluZSgic2VsZWN0Mi9pMThuL2VuIixbXSxmdW5jdGlvbigpe3JldHVybntlcnJvckxvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iVGhlIHJlc3VsdHMgY291bGQgbm90IGJlIGxvYWRlZC4ifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oYSl7dmFyIGI9YS5pbnB1dC5sZW5ndGgtYS5tYXhpbXVtLGM9IlBsZWFzZSBkZWxldGUgIitiKyIgY2hhcmFjdGVyIjtyZXR1cm4gMSE9YiYmKGMrPSJzIiksY30saW5wdXRUb29TaG9ydDpmdW5jdGlvbihhKXtyZXR1cm4iUGxlYXNlIGVudGVyICIrKGEubWluaW11bS1hLmlucHV0Lmxlbmd0aCkrIiBvciBtb3JlIGNoYXJhY3RlcnMifSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiJMb2FkaW5nIG1vcmUgcmVzdWx0c+KApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihhKXt2YXIgYj0iWW91IGNhbiBvbmx5IHNlbGVjdCAiK2EubWF4aW11bSsiIGl0ZW0iO3JldHVybiAxIT1hLm1heGltdW0mJihiKz0icyIpLGJ9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiJObyByZXN1bHRzIGZvdW5kIn0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIlNlYXJjaGluZ+KApiJ9fX0pLGIuZGVmaW5lKCJzZWxlY3QyL2RlZmF1bHRzIixbImpxdWVyeSIsInJlcXVpcmUiLCIuL3Jlc3VsdHMiLCIuL3NlbGVjdGlvbi9zaW5nbGUiLCIuL3NlbGVjdGlvbi9tdWx0aXBsZSIsIi4vc2VsZWN0aW9uL3BsYWNlaG9sZGVyIiwiLi9zZWxlY3Rpb24vYWxsb3dDbGVhciIsIi4vc2VsZWN0aW9uL3NlYXJjaCIsIi4vc2VsZWN0aW9uL2V2ZW50UmVsYXkiLCIuL3V0aWxzIiwiLi90cmFuc2xhdGlvbiIsIi4vZGlhY3JpdGljcyIsIi4vZGF0YS9zZWxlY3QiLCIuL2RhdGEvYXJyYXkiLCIuL2RhdGEvYWpheCIsIi4vZGF0YS90YWdzIiwiLi9kYXRhL3Rva2VuaXplciIsIi4vZGF0YS9taW5pbXVtSW5wdXRMZW5ndGgiLCIuL2RhdGEvbWF4aW11bUlucHV0TGVuZ3RoIiwiLi9kYXRhL21heGltdW1TZWxlY3Rpb25MZW5ndGgiLCIuL2Ryb3Bkb3duIiwiLi9kcm9wZG93bi9zZWFyY2giLCIuL2Ryb3Bkb3duL2hpZGVQbGFjZWhvbGRlciIsIi4vZHJvcGRvd24vaW5maW5pdGVTY3JvbGwiLCIuL2Ryb3Bkb3duL2F0dGFjaEJvZHkiLCIuL2Ryb3Bkb3duL21pbmltdW1SZXN1bHRzRm9yU2VhcmNoIiwiLi9kcm9wZG93bi9zZWxlY3RPbkNsb3NlIiwiLi9kcm9wZG93bi9jbG9zZU9uU2VsZWN0IiwiLi9pMThuL2VuIl0sZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LHgseSx6LEEsQixDKXtmdW5jdGlvbiBEKCl7dGhpcy5yZXNldCgpfXJldHVybiBELnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbihsKXtpZihsPWEuZXh0ZW5kKCEwLHt9LHRoaXMuZGVmYXVsdHMsbCksbnVsbD09bC5kYXRhQWRhcHRlcil7aWYobnVsbCE9bC5hamF4P2wuZGF0YUFkYXB0ZXI9bzpudWxsIT1sLmRhdGE/bC5kYXRhQWRhcHRlcj1uOmwuZGF0YUFkYXB0ZXI9bSxsLm1pbmltdW1JbnB1dExlbmd0aD4wJiYobC5kYXRhQWRhcHRlcj1qLkRlY29yYXRlKGwuZGF0YUFkYXB0ZXIscikpLGwubWF4aW11bUlucHV0TGVuZ3RoPjAmJihsLmRhdGFBZGFwdGVyPWouRGVjb3JhdGUobC5kYXRhQWRhcHRlcixzKSksbC5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoPjAmJihsLmRhdGFBZGFwdGVyPWouRGVjb3JhdGUobC5kYXRhQWRhcHRlcix0KSksbC50YWdzJiYobC5kYXRhQWRhcHRlcj1qLkRlY29yYXRlKGwuZGF0YUFkYXB0ZXIscCkpLG51bGw9PWwudG9rZW5TZXBhcmF0b3JzJiZudWxsPT1sLnRva2VuaXplcnx8KGwuZGF0YUFkYXB0ZXI9ai5EZWNvcmF0ZShsLmRhdGFBZGFwdGVyLHEpKSxudWxsIT1sLnF1ZXJ5KXt2YXIgQz1iKGwuYW1kQmFzZSsiY29tcGF0L3F1ZXJ5Iik7bC5kYXRhQWRhcHRlcj1qLkRlY29yYXRlKGwuZGF0YUFkYXB0ZXIsQyl9aWYobnVsbCE9bC5pbml0U2VsZWN0aW9uKXt2YXIgRD1iKGwuYW1kQmFzZSsiY29tcGF0L2luaXRTZWxlY3Rpb24iKTtsLmRhdGFBZGFwdGVyPWouRGVjb3JhdGUobC5kYXRhQWRhcHRlcixEKX19aWYobnVsbD09bC5yZXN1bHRzQWRhcHRlciYmKGwucmVzdWx0c0FkYXB0ZXI9YyxudWxsIT1sLmFqYXgmJihsLnJlc3VsdHNBZGFwdGVyPWouRGVjb3JhdGUobC5yZXN1bHRzQWRhcHRlcix4KSksbnVsbCE9bC5wbGFjZWhvbGRlciYmKGwucmVzdWx0c0FkYXB0ZXI9ai5EZWNvcmF0ZShsLnJlc3VsdHNBZGFwdGVyLHcpKSxsLnNlbGVjdE9uQ2xvc2UmJihsLnJlc3VsdHNBZGFwdGVyPWouRGVjb3JhdGUobC5yZXN1bHRzQWRhcHRlcixBKSkpLG51bGw9PWwuZHJvcGRvd25BZGFwdGVyKXtpZihsLm11bHRpcGxlKWwuZHJvcGRvd25BZGFwdGVyPXU7ZWxzZXt2YXIgRT1qLkRlY29yYXRlKHUsdik7bC5kcm9wZG93bkFkYXB0ZXI9RX1pZigwIT09bC5taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCYmKGwuZHJvcGRvd25BZGFwdGVyPWouRGVjb3JhdGUobC5kcm9wZG93bkFkYXB0ZXIseikpLGwuY2xvc2VPblNlbGVjdCYmKGwuZHJvcGRvd25BZGFwdGVyPWouRGVjb3JhdGUobC5kcm9wZG93bkFkYXB0ZXIsQikpLG51bGwhPWwuZHJvcGRvd25Dc3NDbGFzc3x8bnVsbCE9bC5kcm9wZG93bkNzc3x8bnVsbCE9bC5hZGFwdERyb3Bkb3duQ3NzQ2xhc3Mpe3ZhciBGPWIobC5hbWRCYXNlKyJjb21wYXQvZHJvcGRvd25Dc3MiKTtsLmRyb3Bkb3duQWRhcHRlcj1qLkRlY29yYXRlKGwuZHJvcGRvd25BZGFwdGVyLEYpfWwuZHJvcGRvd25BZGFwdGVyPWouRGVjb3JhdGUobC5kcm9wZG93bkFkYXB0ZXIseSl9aWYobnVsbD09bC5zZWxlY3Rpb25BZGFwdGVyKXtpZihsLm11bHRpcGxlP2wuc2VsZWN0aW9uQWRhcHRlcj1lOmwuc2VsZWN0aW9uQWRhcHRlcj1kLG51bGwhPWwucGxhY2Vob2xkZXImJihsLnNlbGVjdGlvbkFkYXB0ZXI9ai5EZWNvcmF0ZShsLnNlbGVjdGlvbkFkYXB0ZXIsZikpLGwuYWxsb3dDbGVhciYmKGwuc2VsZWN0aW9uQWRhcHRlcj1qLkRlY29yYXRlKGwuc2VsZWN0aW9uQWRhcHRlcixnKSksbC5tdWx0aXBsZSYmKGwuc2VsZWN0aW9uQWRhcHRlcj1qLkRlY29yYXRlKGwuc2VsZWN0aW9uQWRhcHRlcixoKSksbnVsbCE9bC5jb250YWluZXJDc3NDbGFzc3x8bnVsbCE9bC5jb250YWluZXJDc3N8fG51bGwhPWwuYWRhcHRDb250YWluZXJDc3NDbGFzcyl7dmFyIEc9YihsLmFtZEJhc2UrImNvbXBhdC9jb250YWluZXJDc3MiKTtsLnNlbGVjdGlvbkFkYXB0ZXI9ai5EZWNvcmF0ZShsLnNlbGVjdGlvbkFkYXB0ZXIsRyl9bC5zZWxlY3Rpb25BZGFwdGVyPWouRGVjb3JhdGUobC5zZWxlY3Rpb25BZGFwdGVyLGkpfWlmKCJzdHJpbmciPT10eXBlb2YgbC5sYW5ndWFnZSlpZihsLmxhbmd1YWdlLmluZGV4T2YoIi0iKT4wKXt2YXIgSD1sLmxhbmd1YWdlLnNwbGl0KCItIiksST1IWzBdO2wubGFuZ3VhZ2U9W2wubGFuZ3VhZ2UsSV19ZWxzZSBsLmxhbmd1YWdlPVtsLmxhbmd1YWdlXTtpZihhLmlzQXJyYXkobC5sYW5ndWFnZSkpe3ZhciBKPW5ldyBrO2wubGFuZ3VhZ2UucHVzaCgiZW4iKTtmb3IodmFyIEs9bC5sYW5ndWFnZSxMPTA7TDxLLmxlbmd0aDtMKyspe3ZhciBNPUtbTF0sTj17fTt0cnl7Tj1rLmxvYWRQYXRoKE0pfWNhdGNoKGEpe3RyeXtNPXRoaXMuZGVmYXVsdHMuYW1kTGFuZ3VhZ2VCYXNlK00sTj1rLmxvYWRQYXRoKE0pfWNhdGNoKGEpe2wuZGVidWcmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybignU2VsZWN0MjogVGhlIGxhbmd1YWdlIGZpbGUgZm9yICInK00rJyIgY291bGQgbm90IGJlIGF1dG9tYXRpY2FsbHkgbG9hZGVkLiBBIGZhbGxiYWNrIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLicpO2NvbnRpbnVlfX1KLmV4dGVuZChOKX1sLnRyYW5zbGF0aW9ucz1KfWVsc2V7dmFyIE89ay5sb2FkUGF0aCh0aGlzLmRlZmF1bHRzLmFtZExhbmd1YWdlQmFzZSsiZW4iKSxQPW5ldyBrKGwubGFuZ3VhZ2UpO1AuZXh0ZW5kKE8pLGwudHJhbnNsYXRpb25zPVB9cmV0dXJuIGx9LEQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihhKXtmdW5jdGlvbiBiKGEpe3JldHVybiBsW2FdfHxhfXJldHVybiBhLnJlcGxhY2UoL1teXHUwMDAwLVx1MDA3RV0vZyxiKX1mdW5jdGlvbiBjKGQsZSl7aWYoIiI9PT1hLnRyaW0oZC50ZXJtKSlyZXR1cm4gZTtpZihlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLmxlbmd0aD4wKXtmb3IodmFyIGY9YS5leHRlbmQoITAse30sZSksZz1lLmNoaWxkcmVuLmxlbmd0aC0xO2c+PTA7Zy0tKXtudWxsPT1jKGQsZS5jaGlsZHJlbltnXSkmJmYuY2hpbGRyZW4uc3BsaWNlKGcsMSl9cmV0dXJuIGYuY2hpbGRyZW4ubGVuZ3RoPjA/ZjpjKGQsZil9dmFyIGg9YihlLnRleHQpLnRvVXBwZXJDYXNlKCksaT1iKGQudGVybSkudG9VcHBlckNhc2UoKTtyZXR1cm4gaC5pbmRleE9mKGkpPi0xP2U6bnVsbH10aGlzLmRlZmF1bHRzPXthbWRCYXNlOiIuLyIsYW1kTGFuZ3VhZ2VCYXNlOiIuL2kxOG4vIixjbG9zZU9uU2VsZWN0OiEwLGRlYnVnOiExLGRyb3Bkb3duQXV0b1dpZHRoOiExLGVzY2FwZU1hcmt1cDpqLmVzY2FwZU1hcmt1cCxsYW5ndWFnZTpDLG1hdGNoZXI6YyxtaW5pbXVtSW5wdXRMZW5ndGg6MCxtYXhpbXVtSW5wdXRMZW5ndGg6MCxtYXhpbXVtU2VsZWN0aW9uTGVuZ3RoOjAsbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6MCxzZWxlY3RPbkNsb3NlOiExLHNvcnRlcjpmdW5jdGlvbihhKXtyZXR1cm4gYX0sdGVtcGxhdGVSZXN1bHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEudGV4dH0sdGVtcGxhdGVTZWxlY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuIGEudGV4dH0sdGhlbWU6ImRlZmF1bHQiLHdpZHRoOiJyZXNvbHZlIn19LEQucHJvdG90eXBlLnNldD1mdW5jdGlvbihiLGMpe3ZhciBkPWEuY2FtZWxDYXNlKGIpLGU9e307ZVtkXT1jO3ZhciBmPWouX2NvbnZlcnREYXRhKGUpO2EuZXh0ZW5kKCEwLHRoaXMuZGVmYXVsdHMsZil9LG5ldyBEfSksYi5kZWZpbmUoInNlbGVjdDIvb3B0aW9ucyIsWyJyZXF1aXJlIiwianF1ZXJ5IiwiLi9kZWZhdWx0cyIsIi4vdXRpbHMiXSxmdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBlKGIsZSl7aWYodGhpcy5vcHRpb25zPWIsbnVsbCE9ZSYmdGhpcy5mcm9tRWxlbWVudChlKSx0aGlzLm9wdGlvbnM9Yy5hcHBseSh0aGlzLm9wdGlvbnMpLGUmJmUuaXMoImlucHV0Iikpe3ZhciBmPWEodGhpcy5nZXQoImFtZEJhc2UiKSsiY29tcGF0L2lucHV0RGF0YSIpO3RoaXMub3B0aW9ucy5kYXRhQWRhcHRlcj1kLkRlY29yYXRlKHRoaXMub3B0aW9ucy5kYXRhQWRhcHRlcixmKX19cmV0dXJuIGUucHJvdG90eXBlLmZyb21FbGVtZW50PWZ1bmN0aW9uKGEpe3ZhciBjPVsic2VsZWN0MiJdO251bGw9PXRoaXMub3B0aW9ucy5tdWx0aXBsZSYmKHRoaXMub3B0aW9ucy5tdWx0aXBsZT1hLnByb3AoIm11bHRpcGxlIikpLG51bGw9PXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmKHRoaXMub3B0aW9ucy5kaXNhYmxlZD1hLnByb3AoImRpc2FibGVkIikpLG51bGw9PXRoaXMub3B0aW9ucy5sYW5ndWFnZSYmKGEucHJvcCgibGFuZyIpP3RoaXMub3B0aW9ucy5sYW5ndWFnZT1hLnByb3AoImxhbmciKS50b0xvd2VyQ2FzZSgpOmEuY2xvc2VzdCgiW2xhbmddIikucHJvcCgibGFuZyIpJiYodGhpcy5vcHRpb25zLmxhbmd1YWdlPWEuY2xvc2VzdCgiW2xhbmddIikucHJvcCgibGFuZyIpKSksbnVsbD09dGhpcy5vcHRpb25zLmRpciYmKGEucHJvcCgiZGlyIik/dGhpcy5vcHRpb25zLmRpcj1hLnByb3AoImRpciIpOmEuY2xvc2VzdCgiW2Rpcl0iKS5wcm9wKCJkaXIiKT90aGlzLm9wdGlvbnMuZGlyPWEuY2xvc2VzdCgiW2Rpcl0iKS5wcm9wKCJkaXIiKTp0aGlzLm9wdGlvbnMuZGlyPSJsdHIiKSxhLnByb3AoImRpc2FibGVkIix0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLGEucHJvcCgibXVsdGlwbGUiLHRoaXMub3B0aW9ucy5tdWx0aXBsZSksZC5HZXREYXRhKGFbMF0sInNlbGVjdDJUYWdzIikmJih0aGlzLm9wdGlvbnMuZGVidWcmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybignU2VsZWN0MjogVGhlIGBkYXRhLXNlbGVjdDItdGFnc2AgYXR0cmlidXRlIGhhcyBiZWVuIGNoYW5nZWQgdG8gdXNlIHRoZSBgZGF0YS1kYXRhYCBhbmQgYGRhdGEtdGFncz0idHJ1ZSJgIGF0dHJpYnV0ZXMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgU2VsZWN0Mi4nKSxkLlN0b3JlRGF0YShhWzBdLCJkYXRhIixkLkdldERhdGEoYVswXSwic2VsZWN0MlRhZ3MiKSksZC5TdG9yZURhdGEoYVswXSwidGFncyIsITApKSxkLkdldERhdGEoYVswXSwiYWpheFVybCIpJiYodGhpcy5vcHRpb25zLmRlYnVnJiZ3aW5kb3cuY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIlNlbGVjdDI6IFRoZSBgZGF0YS1hamF4LXVybGAgYXR0cmlidXRlIGhhcyBiZWVuIGNoYW5nZWQgdG8gYGRhdGEtYWpheC0tdXJsYCBhbmQgc3VwcG9ydCBmb3IgdGhlIG9sZCBhdHRyaWJ1dGUgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBTZWxlY3QyLiIpLGEuYXR0cigiYWpheC0tdXJsIixkLkdldERhdGEoYVswXSwiYWpheFVybCIpKSxkLlN0b3JlRGF0YShhWzBdLCJhamF4LVVybCIsZC5HZXREYXRhKGFbMF0sImFqYXhVcmwiKSkpO3ZhciBlPXt9O2U9Yi5mbi5qcXVlcnkmJiIxLiI9PWIuZm4uanF1ZXJ5LnN1YnN0cigwLDIpJiZhWzBdLmRhdGFzZXQ/Yi5leHRlbmQoITAse30sYVswXS5kYXRhc2V0LGQuR2V0RGF0YShhWzBdKSk6ZC5HZXREYXRhKGFbMF0pO3ZhciBmPWIuZXh0ZW5kKCEwLHt9LGUpO2Y9ZC5fY29udmVydERhdGEoZik7Zm9yKHZhciBnIGluIGYpYi5pbkFycmF5KGcsYyk+LTF8fChiLmlzUGxhaW5PYmplY3QodGhpcy5vcHRpb25zW2ddKT9iLmV4dGVuZCh0aGlzLm9wdGlvbnNbZ10sZltnXSk6dGhpcy5vcHRpb25zW2ddPWZbZ10pO3JldHVybiB0aGlzfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub3B0aW9uc1thXX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy5vcHRpb25zW2FdPWJ9LGV9KSxiLmRlZmluZSgic2VsZWN0Mi9jb3JlIixbImpxdWVyeSIsIi4vb3B0aW9ucyIsIi4vdXRpbHMiLCIuL2tleXMiXSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1mdW5jdGlvbihhLGQpe251bGwhPWMuR2V0RGF0YShhWzBdLCJzZWxlY3QyIikmJmMuR2V0RGF0YShhWzBdLCJzZWxlY3QyIikuZGVzdHJveSgpLHRoaXMuJGVsZW1lbnQ9YSx0aGlzLmlkPXRoaXMuX2dlbmVyYXRlSWQoYSksZD1kfHx7fSx0aGlzLm9wdGlvbnM9bmV3IGIoZCxhKSxlLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3ZhciBmPWEuYXR0cigidGFiaW5kZXgiKXx8MDtjLlN0b3JlRGF0YShhWzBdLCJvbGQtdGFiaW5kZXgiLGYpLGEuYXR0cigidGFiaW5kZXgiLCItMSIpO3ZhciBnPXRoaXMub3B0aW9ucy5nZXQoImRhdGFBZGFwdGVyIik7dGhpcy5kYXRhQWRhcHRlcj1uZXcgZyhhLHRoaXMub3B0aW9ucyk7dmFyIGg9dGhpcy5yZW5kZXIoKTt0aGlzLl9wbGFjZUNvbnRhaW5lcihoKTt2YXIgaT10aGlzLm9wdGlvbnMuZ2V0KCJzZWxlY3Rpb25BZGFwdGVyIik7dGhpcy5zZWxlY3Rpb249bmV3IGkoYSx0aGlzLm9wdGlvbnMpLHRoaXMuJHNlbGVjdGlvbj10aGlzLnNlbGVjdGlvbi5yZW5kZXIoKSx0aGlzLnNlbGVjdGlvbi5wb3NpdGlvbih0aGlzLiRzZWxlY3Rpb24saCk7dmFyIGo9dGhpcy5vcHRpb25zLmdldCgiZHJvcGRvd25BZGFwdGVyIik7dGhpcy5kcm9wZG93bj1uZXcgaihhLHRoaXMub3B0aW9ucyksdGhpcy4kZHJvcGRvd249dGhpcy5kcm9wZG93bi5yZW5kZXIoKSx0aGlzLmRyb3Bkb3duLnBvc2l0aW9uKHRoaXMuJGRyb3Bkb3duLGgpO3ZhciBrPXRoaXMub3B0aW9ucy5nZXQoInJlc3VsdHNBZGFwdGVyIik7dGhpcy5yZXN1bHRzPW5ldyBrKGEsdGhpcy5vcHRpb25zLHRoaXMuZGF0YUFkYXB0ZXIpLHRoaXMuJHJlc3VsdHM9dGhpcy5yZXN1bHRzLnJlbmRlcigpLHRoaXMucmVzdWx0cy5wb3NpdGlvbih0aGlzLiRyZXN1bHRzLHRoaXMuJGRyb3Bkb3duKTt2YXIgbD10aGlzO3RoaXMuX2JpbmRBZGFwdGVycygpLHRoaXMuX3JlZ2lzdGVyRG9tRXZlbnRzKCksdGhpcy5fcmVnaXN0ZXJEYXRhRXZlbnRzKCksdGhpcy5fcmVnaXN0ZXJTZWxlY3Rpb25FdmVudHMoKSx0aGlzLl9yZWdpc3RlckRyb3Bkb3duRXZlbnRzKCksdGhpcy5fcmVnaXN0ZXJSZXN1bHRzRXZlbnRzKCksdGhpcy5fcmVnaXN0ZXJFdmVudHMoKSx0aGlzLmRhdGFBZGFwdGVyLmN1cnJlbnQoZnVuY3Rpb24oYSl7bC50cmlnZ2VyKCJzZWxlY3Rpb246dXBkYXRlIix7ZGF0YTphfSl9KSxhLmFkZENsYXNzKCJzZWxlY3QyLWhpZGRlbi1hY2Nlc3NpYmxlIiksYS5hdHRyKCJhcmlhLWhpZGRlbiIsInRydWUiKSx0aGlzLl9zeW5jQXR0cmlidXRlcygpLGMuU3RvcmVEYXRhKGFbMF0sInNlbGVjdDIiLHRoaXMpLGEuZGF0YSgic2VsZWN0MiIsdGhpcyl9O3JldHVybiBjLkV4dGVuZChlLGMuT2JzZXJ2YWJsZSksZS5wcm90b3R5cGUuX2dlbmVyYXRlSWQ9ZnVuY3Rpb24oYSl7dmFyIGI9IiI7cmV0dXJuIGI9bnVsbCE9YS5hdHRyKCJpZCIpP2EuYXR0cigiaWQiKTpudWxsIT1hLmF0dHIoIm5hbWUiKT9hLmF0dHIoIm5hbWUiKSsiLSIrYy5nZW5lcmF0ZUNoYXJzKDIpOmMuZ2VuZXJhdGVDaGFycyg0KSxiPWIucmVwbGFjZSgvKDp8XC58XFt8XF18LCkvZywiIiksYj0ic2VsZWN0Mi0iK2J9LGUucHJvdG90eXBlLl9wbGFjZUNvbnRhaW5lcj1mdW5jdGlvbihhKXthLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpO3ZhciBiPXRoaXMuX3Jlc29sdmVXaWR0aCh0aGlzLiRlbGVtZW50LHRoaXMub3B0aW9ucy5nZXQoIndpZHRoIikpO251bGwhPWImJmEuY3NzKCJ3aWR0aCIsYil9LGUucHJvdG90eXBlLl9yZXNvbHZlV2lkdGg9ZnVuY3Rpb24oYSxiKXt2YXIgYz0vXndpZHRoOigoWy0rXT8oWzAtOV0qXC4pP1swLTldKykocHh8ZW18ZXh8JXxpbnxjbXxtbXxwdHxwYykpL2k7aWYoInJlc29sdmUiPT1iKXt2YXIgZD10aGlzLl9yZXNvbHZlV2lkdGgoYSwic3R5bGUiKTtyZXR1cm4gbnVsbCE9ZD9kOnRoaXMuX3Jlc29sdmVXaWR0aChhLCJlbGVtZW50Iil9aWYoImVsZW1lbnQiPT1iKXt2YXIgZT1hLm91dGVyV2lkdGgoITEpO3JldHVybiBlPD0wPyJhdXRvIjplKyJweCJ9aWYoInN0eWxlIj09Yil7dmFyIGY9YS5hdHRyKCJzdHlsZSIpO2lmKCJzdHJpbmciIT10eXBlb2YgZilyZXR1cm4gbnVsbDtmb3IodmFyIGc9Zi5zcGxpdCgiOyIpLGg9MCxpPWcubGVuZ3RoO2g8aTtoKz0xKXt2YXIgaj1nW2hdLnJlcGxhY2UoL1xzL2csIiIpLGs9ai5tYXRjaChjKTtpZihudWxsIT09ayYmay5sZW5ndGg+PTEpcmV0dXJuIGtbMV19cmV0dXJuIG51bGx9cmV0dXJuIGJ9LGUucHJvdG90eXBlLl9iaW5kQWRhcHRlcnM9ZnVuY3Rpb24oKXt0aGlzLmRhdGFBZGFwdGVyLmJpbmQodGhpcyx0aGlzLiRjb250YWluZXIpLHRoaXMuc2VsZWN0aW9uLmJpbmQodGhpcyx0aGlzLiRjb250YWluZXIpLHRoaXMuZHJvcGRvd24uYmluZCh0aGlzLHRoaXMuJGNvbnRhaW5lciksdGhpcy5yZXN1bHRzLmJpbmQodGhpcyx0aGlzLiRjb250YWluZXIpfSxlLnByb3RvdHlwZS5fcmVnaXN0ZXJEb21FdmVudHM9ZnVuY3Rpb24oKXt2YXIgYj10aGlzO3RoaXMuJGVsZW1lbnQub24oImNoYW5nZS5zZWxlY3QyIixmdW5jdGlvbigpe2IuZGF0YUFkYXB0ZXIuY3VycmVudChmdW5jdGlvbihhKXtiLnRyaWdnZXIoInNlbGVjdGlvbjp1cGRhdGUiLHtkYXRhOmF9KX0pfSksdGhpcy4kZWxlbWVudC5vbigiZm9jdXMuc2VsZWN0MiIsZnVuY3Rpb24oYSl7Yi50cmlnZ2VyKCJmb2N1cyIsYSl9KSx0aGlzLl9zeW5jQT1jLmJpbmQodGhpcy5fc3luY0F0dHJpYnV0ZXMsdGhpcyksdGhpcy5fc3luY1M9Yy5iaW5kKHRoaXMuX3N5bmNTdWJ0cmVlLHRoaXMpLHRoaXMuJGVsZW1lbnRbMF0uYXR0YWNoRXZlbnQmJnRoaXMuJGVsZW1lbnRbMF0uYXR0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLHRoaXMuX3N5bmNBKTt2YXIgZD13aW5kb3cuTXV0YXRpb25PYnNlcnZlcnx8d2luZG93LldlYktpdE11dGF0aW9uT2JzZXJ2ZXJ8fHdpbmRvdy5Nb3pNdXRhdGlvbk9ic2VydmVyO251bGwhPWQ/KHRoaXMuX29ic2VydmVyPW5ldyBkKGZ1bmN0aW9uKGMpe2EuZWFjaChjLGIuX3N5bmNBKSxhLmVhY2goYyxiLl9zeW5jUyl9KSx0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHRoaXMuJGVsZW1lbnRbMF0se2F0dHJpYnV0ZXM6ITAsY2hpbGRMaXN0OiEwLHN1YnRyZWU6ITF9KSk6dGhpcy4kZWxlbWVudFswXS5hZGRFdmVudExpc3RlbmVyJiYodGhpcy4kZWxlbWVudFswXS5hZGRFdmVudExpc3RlbmVyKCJET01BdHRyTW9kaWZpZWQiLGIuX3N5bmNBLCExKSx0aGlzLiRlbGVtZW50WzBdLmFkZEV2ZW50TGlzdGVuZXIoIkRPTU5vZGVJbnNlcnRlZCIsYi5fc3luY1MsITEpLHRoaXMuJGVsZW1lbnRbMF0uYWRkRXZlbnRMaXN0ZW5lcigiRE9NTm9kZVJlbW92ZWQiLGIuX3N5bmNTLCExKSl9LGUucHJvdG90eXBlLl9yZWdpc3RlckRhdGFFdmVudHM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3RoaXMuZGF0YUFkYXB0ZXIub24oIioiLGZ1bmN0aW9uKGIsYyl7YS50cmlnZ2VyKGIsYyl9KX0sZS5wcm90b3R5cGUuX3JlZ2lzdGVyU2VsZWN0aW9uRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPVsidG9nZ2xlIiwiZm9jdXMiXTt0aGlzLnNlbGVjdGlvbi5vbigidG9nZ2xlIixmdW5jdGlvbigpe2IudG9nZ2xlRHJvcGRvd24oKX0pLHRoaXMuc2VsZWN0aW9uLm9uKCJmb2N1cyIsZnVuY3Rpb24oYSl7Yi5mb2N1cyhhKX0pLHRoaXMuc2VsZWN0aW9uLm9uKCIqIixmdW5jdGlvbihkLGUpey0xPT09YS5pbkFycmF5KGQsYykmJmIudHJpZ2dlcihkLGUpfSl9LGUucHJvdG90eXBlLl9yZWdpc3RlckRyb3Bkb3duRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLmRyb3Bkb3duLm9uKCIqIixmdW5jdGlvbihiLGMpe2EudHJpZ2dlcihiLGMpfSl9LGUucHJvdG90eXBlLl9yZWdpc3RlclJlc3VsdHNFdmVudHM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3RoaXMucmVzdWx0cy5vbigiKiIsZnVuY3Rpb24oYixjKXthLnRyaWdnZXIoYixjKX0pfSxlLnByb3RvdHlwZS5fcmVnaXN0ZXJFdmVudHM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3RoaXMub24oIm9wZW4iLGZ1bmN0aW9uKCl7YS4kY29udGFpbmVyLmFkZENsYXNzKCJzZWxlY3QyLWNvbnRhaW5lci0tb3BlbiIpfSksdGhpcy5vbigiY2xvc2UiLGZ1bmN0aW9uKCl7YS4kY29udGFpbmVyLnJlbW92ZUNsYXNzKCJzZWxlY3QyLWNvbnRhaW5lci0tb3BlbiIpfSksdGhpcy5vbigiZW5hYmxlIixmdW5jdGlvbigpe2EuJGNvbnRhaW5lci5yZW1vdmVDbGFzcygic2VsZWN0Mi1jb250YWluZXItLWRpc2FibGVkIil9KSx0aGlzLm9uKCJkaXNhYmxlIixmdW5jdGlvbigpe2EuJGNvbnRhaW5lci5hZGRDbGFzcygic2VsZWN0Mi1jb250YWluZXItLWRpc2FibGVkIil9KSx0aGlzLm9uKCJibHVyIixmdW5jdGlvbigpe2EuJGNvbnRhaW5lci5yZW1vdmVDbGFzcygic2VsZWN0Mi1jb250YWluZXItLWZvY3VzIil9KSx0aGlzLm9uKCJxdWVyeSIsZnVuY3Rpb24oYil7YS5pc09wZW4oKXx8YS50cmlnZ2VyKCJvcGVuIix7fSksdGhpcy5kYXRhQWRhcHRlci5xdWVyeShiLGZ1bmN0aW9uKGMpe2EudHJpZ2dlcigicmVzdWx0czphbGwiLHtkYXRhOmMscXVlcnk6Yn0pfSl9KSx0aGlzLm9uKCJxdWVyeTphcHBlbmQiLGZ1bmN0aW9uKGIpe3RoaXMuZGF0YUFkYXB0ZXIucXVlcnkoYixmdW5jdGlvbihjKXthLnRyaWdnZXIoInJlc3VsdHM6YXBwZW5kIix7ZGF0YTpjLHF1ZXJ5OmJ9KX0pfSksdGhpcy5vbigia2V5cHJlc3MiLGZ1bmN0aW9uKGIpe3ZhciBjPWIud2hpY2g7YS5pc09wZW4oKT9jPT09ZC5FU0N8fGM9PT1kLlRBQnx8Yz09PWQuVVAmJmIuYWx0S2V5PyhhLmNsb3NlKCksYi5wcmV2ZW50RGVmYXVsdCgpKTpjPT09ZC5FTlRFUj8oYS50cmlnZ2VyKCJyZXN1bHRzOnNlbGVjdCIse30pLGIucHJldmVudERlZmF1bHQoKSk6Yz09PWQuU1BBQ0UmJmIuY3RybEtleT8oYS50cmlnZ2VyKCJyZXN1bHRzOnRvZ2dsZSIse30pLGIucHJldmVudERlZmF1bHQoKSk6Yz09PWQuVVA/KGEudHJpZ2dlcigicmVzdWx0czpwcmV2aW91cyIse30pLGIucHJldmVudERlZmF1bHQoKSk6Yz09PWQuRE9XTiYmKGEudHJpZ2dlcigicmVzdWx0czpuZXh0Iix7fSksYi5wcmV2ZW50RGVmYXVsdCgpKTooYz09PWQuRU5URVJ8fGM9PT1kLlNQQUNFfHxjPT09ZC5ET1dOJiZiLmFsdEtleSkmJihhLm9wZW4oKSxiLnByZXZlbnREZWZhdWx0KCkpfSl9LGUucHJvdG90eXBlLl9zeW5jQXR0cmlidXRlcz1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zZXQoImRpc2FibGVkIix0aGlzLiRlbGVtZW50LnByb3AoImRpc2FibGVkIikpLHRoaXMub3B0aW9ucy5nZXQoImRpc2FibGVkIik/KHRoaXMuaXNPcGVuKCkmJnRoaXMuY2xvc2UoKSx0aGlzLnRyaWdnZXIoImRpc2FibGUiLHt9KSk6dGhpcy50cmlnZ2VyKCJlbmFibGUiLHt9KX0sZS5wcm90b3R5cGUuX3N5bmNTdWJ0cmVlPWZ1bmN0aW9uKGEsYil7dmFyIGM9ITEsZD10aGlzO2lmKCFhfHwhYS50YXJnZXR8fCJPUFRJT04iPT09YS50YXJnZXQubm9kZU5hbWV8fCJPUFRHUk9VUCI9PT1hLnRhcmdldC5ub2RlTmFtZSl7aWYoYilpZihiLmFkZGVkTm9kZXMmJmIuYWRkZWROb2Rlcy5sZW5ndGg+MClmb3IodmFyIGU9MDtlPGIuYWRkZWROb2Rlcy5sZW5ndGg7ZSsrKXt2YXIgZj1iLmFkZGVkTm9kZXNbZV07Zi5zZWxlY3RlZCYmKGM9ITApfWVsc2UgYi5yZW1vdmVkTm9kZXMmJmIucmVtb3ZlZE5vZGVzLmxlbmd0aD4wJiYoYz0hMCk7ZWxzZSBjPSEwO2MmJnRoaXMuZGF0YUFkYXB0ZXIuY3VycmVudChmdW5jdGlvbihhKXtkLnRyaWdnZXIoInNlbGVjdGlvbjp1cGRhdGUiLHtkYXRhOmF9KX0pfX0sZS5wcm90b3R5cGUudHJpZ2dlcj1mdW5jdGlvbihhLGIpe3ZhciBjPWUuX19zdXBlcl9fLnRyaWdnZXIsZD17b3Blbjoib3BlbmluZyIsY2xvc2U6ImNsb3NpbmciLHNlbGVjdDoic2VsZWN0aW5nIix1bnNlbGVjdDoidW5zZWxlY3RpbmciLGNsZWFyOiJjbGVhcmluZyJ9O2lmKHZvaWQgMD09PWImJihiPXt9KSxhIGluIGQpe3ZhciBmPWRbYV0sZz17cHJldmVudGVkOiExLG5hbWU6YSxhcmdzOmJ9O2lmKGMuY2FsbCh0aGlzLGYsZyksZy5wcmV2ZW50ZWQpcmV0dXJuIHZvaWQoYi5wcmV2ZW50ZWQ9ITApfWMuY2FsbCh0aGlzLGEsYil9LGUucHJvdG90eXBlLnRvZ2dsZURyb3Bkb3duPWZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmdldCgiZGlzYWJsZWQiKXx8KHRoaXMuaXNPcGVuKCk/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpKX0sZS5wcm90b3R5cGUub3Blbj1mdW5jdGlvbigpe3RoaXMuaXNPcGVuKCl8fHRoaXMudHJpZ2dlcigicXVlcnkiLHt9KX0sZS5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt0aGlzLmlzT3BlbigpJiZ0aGlzLnRyaWdnZXIoImNsb3NlIix7fSl9LGUucHJvdG90eXBlLmlzT3Blbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRjb250YWluZXIuaGFzQ2xhc3MoInNlbGVjdDItY29udGFpbmVyLS1vcGVuIil9LGUucHJvdG90eXBlLmhhc0ZvY3VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGNvbnRhaW5lci5oYXNDbGFzcygic2VsZWN0Mi1jb250YWluZXItLWZvY3VzIil9LGUucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKGEpe3RoaXMuaGFzRm9jdXMoKXx8KHRoaXMuJGNvbnRhaW5lci5hZGRDbGFzcygic2VsZWN0Mi1jb250YWluZXItLWZvY3VzIiksdGhpcy50cmlnZ2VyKCJmb2N1cyIse30pKX0sZS5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKGEpe3RoaXMub3B0aW9ucy5nZXQoImRlYnVnIikmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybignU2VsZWN0MjogVGhlIGBzZWxlY3QyKCJlbmFibGUiKWAgbWV0aG9kIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBsYXRlciBTZWxlY3QyIHZlcnNpb25zLiBVc2UgJGVsZW1lbnQucHJvcCgiZGlzYWJsZWQiKSBpbnN0ZWFkLicpLG51bGwhPWEmJjAhPT1hLmxlbmd0aHx8KGE9WyEwXSk7dmFyIGI9IWFbMF07dGhpcy4kZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsYil9LGUucHJvdG90eXBlLmRhdGE9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZ2V0KCJkZWJ1ZyIpJiZhcmd1bWVudHMubGVuZ3RoPjAmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybignU2VsZWN0MjogRGF0YSBjYW4gbm8gbG9uZ2VyIGJlIHNldCB1c2luZyBgc2VsZWN0MigiZGF0YSIpYC4gWW91IHNob3VsZCBjb25zaWRlciBzZXR0aW5nIHRoZSB2YWx1ZSBpbnN0ZWFkIHVzaW5nIGAkZWxlbWVudC52YWwoKWAuJyk7dmFyIGE9W107cmV0dXJuIHRoaXMuZGF0YUFkYXB0ZXIuY3VycmVudChmdW5jdGlvbihiKXthPWJ9KSxhfSxlLnByb3RvdHlwZS52YWw9ZnVuY3Rpb24oYil7aWYodGhpcy5vcHRpb25zLmdldCgiZGVidWciKSYmd2luZG93LmNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCdTZWxlY3QyOiBUaGUgYHNlbGVjdDIoInZhbCIpYCBtZXRob2QgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGxhdGVyIFNlbGVjdDIgdmVyc2lvbnMuIFVzZSAkZWxlbWVudC52YWwoKSBpbnN0ZWFkLicpLG51bGw9PWJ8fDA9PT1iLmxlbmd0aClyZXR1cm4gdGhpcy4kZWxlbWVudC52YWwoKTt2YXIgYz1iWzBdO2EuaXNBcnJheShjKSYmKGM9YS5tYXAoYyxmdW5jdGlvbihhKXtyZXR1cm4gYS50b1N0cmluZygpfSkpLHRoaXMuJGVsZW1lbnQudmFsKGMpLnRyaWdnZXIoImNoYW5nZSIpfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy4kY29udGFpbmVyLnJlbW92ZSgpLHRoaXMuJGVsZW1lbnRbMF0uZGV0YWNoRXZlbnQmJnRoaXMuJGVsZW1lbnRbMF0uZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLHRoaXMuX3N5bmNBKSxudWxsIT10aGlzLl9vYnNlcnZlcj8odGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuX29ic2VydmVyPW51bGwpOnRoaXMuJGVsZW1lbnRbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lciYmKHRoaXMuJGVsZW1lbnRbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQXR0ck1vZGlmaWVkIix0aGlzLl9zeW5jQSwhMSksdGhpcy4kZWxlbWVudFswXS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Ob2RlSW5zZXJ0ZWQiLHRoaXMuX3N5bmNTLCExKSx0aGlzLiRlbGVtZW50WzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTU5vZGVSZW1vdmVkIix0aGlzLl9zeW5jUywhMSkpLHRoaXMuX3N5bmNBPW51bGwsdGhpcy5fc3luY1M9bnVsbCx0aGlzLiRlbGVtZW50Lm9mZigiLnNlbGVjdDIiKSx0aGlzLiRlbGVtZW50LmF0dHIoInRhYmluZGV4IixjLkdldERhdGEodGhpcy4kZWxlbWVudFswXSwib2xkLXRhYmluZGV4IikpLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInNlbGVjdDItaGlkZGVuLWFjY2Vzc2libGUiKSx0aGlzLiRlbGVtZW50LmF0dHIoImFyaWEtaGlkZGVuIiwiZmFsc2UiKSxjLlJlbW92ZURhdGEodGhpcy4kZWxlbWVudFswXSksdGhpcy4kZWxlbWVudC5yZW1vdmVEYXRhKCJzZWxlY3QyIiksdGhpcy5kYXRhQWRhcHRlci5kZXN0cm95KCksdGhpcy5zZWxlY3Rpb24uZGVzdHJveSgpLHRoaXMuZHJvcGRvd24uZGVzdHJveSgpLHRoaXMucmVzdWx0cy5kZXN0cm95KCksdGhpcy5kYXRhQWRhcHRlcj1udWxsLHRoaXMuc2VsZWN0aW9uPW51bGwsdGhpcy5kcm9wZG93bj1udWxsLHRoaXMucmVzdWx0cz1udWxsfSxlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgYj1hKCc8c3BhbiBjbGFzcz0ic2VsZWN0MiBzZWxlY3QyLWNvbnRhaW5lciI+PHNwYW4gY2xhc3M9InNlbGVjdGlvbiI+PC9zcGFuPjxzcGFuIGNsYXNzPSJkcm9wZG93bi13cmFwcGVyIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zcGFuPjwvc3Bhbj4nKTtyZXR1cm4gYi5hdHRyKCJkaXIiLHRoaXMub3B0aW9ucy5nZXQoImRpciIpKSx0aGlzLiRjb250YWluZXI9Yix0aGlzLiRjb250YWluZXIuYWRkQ2xhc3MoInNlbGVjdDItY29udGFpbmVyLS0iK3RoaXMub3B0aW9ucy5nZXQoInRoZW1lIikpLGMuU3RvcmVEYXRhKGJbMF0sImVsZW1lbnQiLHRoaXMuJGVsZW1lbnQpLGJ9LGV9KSxiLmRlZmluZSgic2VsZWN0Mi9jb21wYXQvdXRpbHMiLFsianF1ZXJ5Il0sZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiLGMsZCl7dmFyIGUsZixnPVtdO2U9YS50cmltKGIuYXR0cigiY2xhc3MiKSksZSYmKGU9IiIrZSxhKGUuc3BsaXQoL1xzKy8pKS5lYWNoKGZ1bmN0aW9uKCl7MD09PXRoaXMuaW5kZXhPZigic2VsZWN0Mi0iKSYmZy5wdXNoKHRoaXMpfSkpLGU9YS50cmltKGMuYXR0cigiY2xhc3MiKSksZSYmKGU9IiIrZSxhKGUuc3BsaXQoL1xzKy8pKS5lYWNoKGZ1bmN0aW9uKCl7MCE9PXRoaXMuaW5kZXhPZigic2VsZWN0Mi0iKSYmbnVsbCE9KGY9ZCh0aGlzKSkmJmcucHVzaChmKX0pKSxiLmF0dHIoImNsYXNzIixnLmpvaW4oIiAiKSl9cmV0dXJue3N5bmNDc3NDbGFzc2VzOmJ9fSksYi5kZWZpbmUoInNlbGVjdDIvY29tcGF0L2NvbnRhaW5lckNzcyIsWyJqcXVlcnkiLCIuL3V0aWxzIl0sZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBudWxsfWZ1bmN0aW9uIGQoKXt9cmV0dXJuIGQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihkKXt2YXIgZT1kLmNhbGwodGhpcyksZj10aGlzLm9wdGlvbnMuZ2V0KCJjb250YWluZXJDc3NDbGFzcyIpfHwiIjthLmlzRnVuY3Rpb24oZikmJihmPWYodGhpcy4kZWxlbWVudCkpO3ZhciBnPXRoaXMub3B0aW9ucy5nZXQoImFkYXB0Q29udGFpbmVyQ3NzQ2xhc3MiKTtpZihnPWd8fGMsLTEhPT1mLmluZGV4T2YoIjphbGw6Iikpe2Y9Zi5yZXBsYWNlKCI6YWxsOiIsIiIpO3ZhciBoPWc7Zz1mdW5jdGlvbihhKXt2YXIgYj1oKGEpO3JldHVybiBudWxsIT1iP2IrIiAiK2E6YX19dmFyIGk9dGhpcy5vcHRpb25zLmdldCgiY29udGFpbmVyQ3NzIil8fHt9O3JldHVybiBhLmlzRnVuY3Rpb24oaSkmJihpPWkodGhpcy4kZWxlbWVudCkpLGIuc3luY0Nzc0NsYXNzZXMoZSx0aGlzLiRlbGVtZW50LGcpLGUuY3NzKGkpLGUuYWRkQ2xhc3MoZiksZX0sZH0pLGIuZGVmaW5lKCJzZWxlY3QyL2NvbXBhdC9kcm9wZG93bkNzcyIsWyJqcXVlcnkiLCIuL3V0aWxzIl0sZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBudWxsfWZ1bmN0aW9uIGQoKXt9cmV0dXJuIGQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihkKXt2YXIgZT1kLmNhbGwodGhpcyksZj10aGlzLm9wdGlvbnMuZ2V0KCJkcm9wZG93bkNzc0NsYXNzIil8fCIiO2EuaXNGdW5jdGlvbihmKSYmKGY9Zih0aGlzLiRlbGVtZW50KSk7dmFyIGc9dGhpcy5vcHRpb25zLmdldCgiYWRhcHREcm9wZG93bkNzc0NsYXNzIik7aWYoZz1nfHxjLC0xIT09Zi5pbmRleE9mKCI6YWxsOiIpKXtmPWYucmVwbGFjZSgiOmFsbDoiLCIiKTt2YXIgaD1nO2c9ZnVuY3Rpb24oYSl7dmFyIGI9aChhKTtyZXR1cm4gbnVsbCE9Yj9iKyIgIithOmF9fXZhciBpPXRoaXMub3B0aW9ucy5nZXQoImRyb3Bkb3duQ3NzIil8fHt9O3JldHVybiBhLmlzRnVuY3Rpb24oaSkmJihpPWkodGhpcy4kZWxlbWVudCkpLGIuc3luY0Nzc0NsYXNzZXMoZSx0aGlzLiRlbGVtZW50LGcpLGUuY3NzKGkpLGUuYWRkQ2xhc3MoZiksZX0sZH0pLGIuZGVmaW5lKCJzZWxlY3QyL2NvbXBhdC9pbml0U2VsZWN0aW9uIixbImpxdWVyeSJdLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiLGMpe2MuZ2V0KCJkZWJ1ZyIpJiZ3aW5kb3cuY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIlNlbGVjdDI6IFRoZSBgaW5pdFNlbGVjdGlvbmAgb3B0aW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYSBjdXN0b20gZGF0YSBhZGFwdGVyIHRoYXQgb3ZlcnJpZGVzIHRoZSBgY3VycmVudGAgbWV0aG9kLiBUaGlzIG1ldGhvZCBpcyBub3cgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGluc3RlYWQgb2YgYSBzaW5nbGUgdGltZSB3aGVuIHRoZSBpbnN0YW5jZSBpcyBpbml0aWFsaXplZC4gU3VwcG9ydCB3aWxsIGJlIHJlbW92ZWQgZm9yIHRoZSBgaW5pdFNlbGVjdGlvbmAgb3B0aW9uIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBTZWxlY3QyIiksdGhpcy5pbml0U2VsZWN0aW9uPWMuZ2V0KCJpbml0U2VsZWN0aW9uIiksdGhpcy5faXNJbml0aWFsaXplZD0hMSxhLmNhbGwodGhpcyxiLGMpfXJldHVybiBiLnByb3RvdHlwZS5jdXJyZW50PWZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcztpZih0aGlzLl9pc0luaXRpYWxpemVkKXJldHVybiB2b2lkIGIuY2FsbCh0aGlzLGMpO3RoaXMuaW5pdFNlbGVjdGlvbi5jYWxsKG51bGwsdGhpcy4kZWxlbWVudCxmdW5jdGlvbihiKXtkLl9pc0luaXRpYWxpemVkPSEwLGEuaXNBcnJheShiKXx8KGI9W2JdKSxjKGIpfSl9LGJ9KSxiLmRlZmluZSgic2VsZWN0Mi9jb21wYXQvaW5wdXREYXRhIixbImpxdWVyeSIsIi4uL3V0aWxzIl0sZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYixjKXt0aGlzLl9jdXJyZW50RGF0YT1bXSx0aGlzLl92YWx1ZVNlcGFyYXRvcj1jLmdldCgidmFsdWVTZXBhcmF0b3IiKXx8IiwiLCJoaWRkZW4iPT09Yi5wcm9wKCJ0eXBlIikmJmMuZ2V0KCJkZWJ1ZyIpJiZjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiU2VsZWN0MjogVXNpbmcgYSBoaWRkZW4gaW5wdXQgd2l0aCBTZWxlY3QyIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgYW5kIG1heSBzdG9wIHdvcmtpbmcgaW4gdGhlIGZ1dHVyZS4gSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGEgYDxzZWxlY3Q+YCBlbGVtZW50IGluc3RlYWQuIiksYS5jYWxsKHRoaXMsYixjKX1yZXR1cm4gYy5wcm90b3R5cGUuY3VycmVudD1mdW5jdGlvbihiLGMpe2Z1bmN0aW9uIGQoYixjKXt2YXIgZT1bXTtyZXR1cm4gYi5zZWxlY3RlZHx8LTEhPT1hLmluQXJyYXkoYi5pZCxjKT8oYi5zZWxlY3RlZD0hMCxlLnB1c2goYikpOmIuc2VsZWN0ZWQ9ITEsYi5jaGlsZHJlbiYmZS5wdXNoLmFwcGx5KGUsZChiLmNoaWxkcmVuLGMpKSxlfWZvcih2YXIgZT1bXSxmPTA7Zjx0aGlzLl9jdXJyZW50RGF0YS5sZW5ndGg7ZisrKXt2YXIgZz10aGlzLl9jdXJyZW50RGF0YVtmXTtlLnB1c2guYXBwbHkoZSxkKGcsdGhpcy4kZWxlbWVudC52YWwoKS5zcGxpdCh0aGlzLl92YWx1ZVNlcGFyYXRvcikpKX1jKGUpfSxjLnByb3RvdHlwZS5zZWxlY3Q9ZnVuY3Rpb24oYixjKXtpZih0aGlzLm9wdGlvbnMuZ2V0KCJtdWx0aXBsZSIpKXt2YXIgZD10aGlzLiRlbGVtZW50LnZhbCgpO2QrPXRoaXMuX3ZhbHVlU2VwYXJhdG9yK2MuaWQsdGhpcy4kZWxlbWVudC52YWwoZCksdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJjaGFuZ2UiKX1lbHNlIHRoaXMuY3VycmVudChmdW5jdGlvbihiKXthLm1hcChiLGZ1bmN0aW9uKGEpe2Euc2VsZWN0ZWQ9ITF9KX0pLHRoaXMuJGVsZW1lbnQudmFsKGMuaWQpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcigiY2hhbmdlIil9LGMucHJvdG90eXBlLnVuc2VsZWN0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztiLnNlbGVjdGVkPSExLHRoaXMuY3VycmVudChmdW5jdGlvbihhKXtmb3IodmFyIGQ9W10sZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgZj1hW2VdO2IuaWQhPWYuaWQmJmQucHVzaChmLmlkKX1jLiRlbGVtZW50LnZhbChkLmpvaW4oYy5fdmFsdWVTZXBhcmF0b3IpKSxjLiRlbGVtZW50LnRyaWdnZXIoImNoYW5nZSIpfSl9LGMucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9W10sZT0wO2U8dGhpcy5fY3VycmVudERhdGEubGVuZ3RoO2UrKyl7dmFyIGY9dGhpcy5fY3VycmVudERhdGFbZV0sZz10aGlzLm1hdGNoZXMoYixmKTtudWxsIT09ZyYmZC5wdXNoKGcpfWMoe3Jlc3VsdHM6ZH0pfSxjLnByb3RvdHlwZS5hZGRPcHRpb25zPWZ1bmN0aW9uKGMsZCl7dmFyIGU9YS5tYXAoZCxmdW5jdGlvbihhKXtyZXR1cm4gYi5HZXREYXRhKGFbMF0sImRhdGEiKX0pO3RoaXMuX2N1cnJlbnREYXRhLnB1c2guYXBwbHkodGhpcy5fY3VycmVudERhdGEsZSl9LGN9KSxiLmRlZmluZSgic2VsZWN0Mi9jb21wYXQvbWF0Y2hlciIsWyJqcXVlcnkiXSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGIpe2Z1bmN0aW9uIGMoYyxkKXt2YXIgZT1hLmV4dGVuZCghMCx7fSxkKTtpZihudWxsPT1jLnRlcm18fCIiPT09YS50cmltKGMudGVybSkpcmV0dXJuIGU7aWYoZC5jaGlsZHJlbil7Zm9yKHZhciBmPWQuY2hpbGRyZW4ubGVuZ3RoLTE7Zj49MDtmLS0pe3ZhciBnPWQuY2hpbGRyZW5bZl07YihjLnRlcm0sZy50ZXh0LGcpfHxlLmNoaWxkcmVuLnNwbGljZShmLDEpfWlmKGUuY2hpbGRyZW4ubGVuZ3RoPjApcmV0dXJuIGV9cmV0dXJuIGIoYy50ZXJtLGQudGV4dCxkKT9lOm51bGx9cmV0dXJuIGN9cmV0dXJuIGJ9KSxiLmRlZmluZSgic2VsZWN0Mi9jb21wYXQvcXVlcnkiLFtdLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIsYyl7Yy5nZXQoImRlYnVnIikmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiU2VsZWN0MjogVGhlIGBxdWVyeWAgb3B0aW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYSBjdXN0b20gZGF0YSBhZGFwdGVyIHRoYXQgb3ZlcnJpZGVzIHRoZSBgcXVlcnlgIG1ldGhvZC4gU3VwcG9ydCB3aWxsIGJlIHJlbW92ZWQgZm9yIHRoZSBgcXVlcnlgIG9wdGlvbiBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgU2VsZWN0Mi4iKSxhLmNhbGwodGhpcyxiLGMpfXJldHVybiBhLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbihhLGIsYyl7Yi5jYWxsYmFjaz1jLHRoaXMub3B0aW9ucy5nZXQoInF1ZXJ5IikuY2FsbChudWxsLGIpfSxhfSksYi5kZWZpbmUoInNlbGVjdDIvZHJvcGRvd24vYXR0YWNoQ29udGFpbmVyIixbXSxmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiLGMpe2EuY2FsbCh0aGlzLGIsYyl9cmV0dXJuIGEucHJvdG90eXBlLnBvc2l0aW9uPWZ1bmN0aW9uKGEsYixjKXtjLmZpbmQoIi5kcm9wZG93bi13cmFwcGVyIikuYXBwZW5kKGIpLGIuYWRkQ2xhc3MoInNlbGVjdDItZHJvcGRvd24tLWJlbG93IiksYy5hZGRDbGFzcygic2VsZWN0Mi1jb250YWluZXItLWJlbG93Iil9LGF9KSxiLmRlZmluZSgic2VsZWN0Mi9kcm9wZG93bi9zdG9wUHJvcGFnYXRpb24iLFtdLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe31yZXR1cm4gYS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihhLGIsYyl7YS5jYWxsKHRoaXMsYixjKTt2YXIgZD1bImJsdXIiLCJjaGFuZ2UiLCJjbGljayIsImRibGNsaWNrIiwiZm9jdXMiLCJmb2N1c2luIiwiZm9jdXNvdXQiLCJpbnB1dCIsImtleWRvd24iLCJrZXl1cCIsImtleXByZXNzIiwibW91c2Vkb3duIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJtb3VzZW1vdmUiLCJtb3VzZW92ZXIiLCJtb3VzZXVwIiwic2VhcmNoIiwidG91Y2hlbmQiLCJ0b3VjaHN0YXJ0Il07dGhpcy4kZHJvcGRvd24ub24oZC5qb2luKCIgIiksZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKX0pfSxhfSksYi5kZWZpbmUoInNlbGVjdDIvc2VsZWN0aW9uL3N0b3BQcm9wYWdhdGlvbiIsW10sZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7fXJldHVybiBhLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGEsYixjKXthLmNhbGwodGhpcyxiLGMpO3ZhciBkPVsiYmx1ciIsImNoYW5nZSIsImNsaWNrIiwiZGJsY2xpY2siLCJmb2N1cyIsImZvY3VzaW4iLCJmb2N1c291dCIsImlucHV0Iiwia2V5ZG93biIsImtleXVwIiwia2V5cHJlc3MiLCJtb3VzZWRvd24iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIm1vdXNlbW92ZSIsIm1vdXNlb3ZlciIsIm1vdXNldXAiLCJzZWFyY2giLCJ0b3VjaGVuZCIsInRvdWNoc3RhcnQiXTt0aGlzLiRzZWxlY3Rpb24ub24oZC5qb2luKCIgIiksZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKX0pfSxhfSksZnVuY3Rpb24oYyl7ImZ1bmN0aW9uIj09dHlwZW9mIGIuZGVmaW5lJiZiLmRlZmluZS5hbWQ/Yi5kZWZpbmUoImpxdWVyeS1tb3VzZXdoZWVsIixbImpxdWVyeSJdLGMpOiJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1jOmMoYSl9KGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYil7dmFyIGc9Ynx8d2luZG93LmV2ZW50LGg9aS5jYWxsKGFyZ3VtZW50cywxKSxqPTAsbD0wLG09MCxuPTAsbz0wLHA9MDtpZihiPWEuZXZlbnQuZml4KGcpLGIudHlwZT0ibW91c2V3aGVlbCIsImRldGFpbCJpbiBnJiYobT0tMSpnLmRldGFpbCksIndoZWVsRGVsdGEiaW4gZyYmKG09Zy53aGVlbERlbHRhKSwid2hlZWxEZWx0YVkiaW4gZyYmKG09Zy53aGVlbERlbHRhWSksIndoZWVsRGVsdGFYImluIGcmJihsPS0xKmcud2hlZWxEZWx0YVgpLCJheGlzImluIGcmJmcuYXhpcz09PWcuSE9SSVpPTlRBTF9BWElTJiYobD0tMSptLG09MCksaj0wPT09bT9sOm0sImRlbHRhWSJpbiBnJiYobT0tMSpnLmRlbHRhWSxqPW0pLCJkZWx0YVgiaW4gZyYmKGw9Zy5kZWx0YVgsMD09PW0mJihqPS0xKmwpKSwwIT09bXx8MCE9PWwpe2lmKDE9PT1nLmRlbHRhTW9kZSl7dmFyIHE9YS5kYXRhKHRoaXMsIm1vdXNld2hlZWwtbGluZS1oZWlnaHQiKTtqKj1xLG0qPXEsbCo9cX1lbHNlIGlmKDI9PT1nLmRlbHRhTW9kZSl7dmFyIHI9YS5kYXRhKHRoaXMsIm1vdXNld2hlZWwtcGFnZS1oZWlnaHQiKTtqKj1yLG0qPXIsbCo9cn1pZihuPU1hdGgubWF4KE1hdGguYWJzKG0pLE1hdGguYWJzKGwpKSwoIWZ8fG48ZikmJihmPW4sZChnLG4pJiYoZi89NDApKSxkKGcsbikmJihqLz00MCxsLz00MCxtLz00MCksaj1NYXRoW2o+PTE/ImZsb29yIjoiY2VpbCJdKGovZiksbD1NYXRoW2w+PTE/ImZsb29yIjoiY2VpbCJdKGwvZiksbT1NYXRoW20+PTE/ImZsb29yIjoiY2VpbCJdKG0vZiksay5zZXR0aW5ncy5ub3JtYWxpemVPZmZzZXQmJnRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXt2YXIgcz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO289Yi5jbGllbnRYLXMubGVmdCxwPWIuY2xpZW50WS1zLnRvcH1yZXR1cm4gYi5kZWx0YVg9bCxiLmRlbHRhWT1tLGIuZGVsdGFGYWN0b3I9ZixiLm9mZnNldFg9byxiLm9mZnNldFk9cCxiLmRlbHRhTW9kZT0wLGgudW5zaGlmdChiLGosbCxtKSxlJiZjbGVhclRpbWVvdXQoZSksZT1zZXRUaW1lb3V0KGMsMjAwKSwoYS5ldmVudC5kaXNwYXRjaHx8YS5ldmVudC5oYW5kbGUpLmFwcGx5KHRoaXMsaCl9fWZ1bmN0aW9uIGMoKXtmPW51bGx9ZnVuY3Rpb24gZChhLGIpe3JldHVybiBrLnNldHRpbmdzLmFkanVzdE9sZERlbHRhcyYmIm1vdXNld2hlZWwiPT09YS50eXBlJiZiJTEyMD09MH12YXIgZSxmLGc9WyJ3aGVlbCIsIm1vdXNld2hlZWwiLCJET01Nb3VzZVNjcm9sbCIsIk1vek1vdXNlUGl4ZWxTY3JvbGwiXSxoPSJvbndoZWVsImluIGRvY3VtZW50fHxkb2N1bWVudC5kb2N1bWVudE1vZGU+PTk/WyJ3aGVlbCJdOlsibW91c2V3aGVlbCIsIkRvbU1vdXNlU2Nyb2xsIiwiTW96TW91c2VQaXhlbFNjcm9sbCJdLGk9QXJyYXkucHJvdG90eXBlLnNsaWNlO2lmKGEuZXZlbnQuZml4SG9va3MpZm9yKHZhciBqPWcubGVuZ3RoO2o7KWEuZXZlbnQuZml4SG9va3NbZ1stLWpdXT1hLmV2ZW50Lm1vdXNlSG9va3M7dmFyIGs9YS5ldmVudC5zcGVjaWFsLm1vdXNld2hlZWw9e3ZlcnNpb246IjMuMS4xMiIsc2V0dXA6ZnVuY3Rpb24oKXtpZih0aGlzLmFkZEV2ZW50TGlzdGVuZXIpZm9yKHZhciBjPWgubGVuZ3RoO2M7KXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihoWy0tY10sYiwhMSk7ZWxzZSB0aGlzLm9ubW91c2V3aGVlbD1iO2EuZGF0YSh0aGlzLCJtb3VzZXdoZWVsLWxpbmUtaGVpZ2h0IixrLmdldExpbmVIZWlnaHQodGhpcykpLGEuZGF0YSh0aGlzLCJtb3VzZXdoZWVsLXBhZ2UtaGVpZ2h0IixrLmdldFBhZ2VIZWlnaHQodGhpcykpfSx0ZWFyZG93bjpmdW5jdGlvbigpe2lmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcilmb3IodmFyIGM9aC5sZW5ndGg7YzspdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGhbLS1jXSxiLCExKTtlbHNlIHRoaXMub25tb3VzZXdoZWVsPW51bGw7YS5yZW1vdmVEYXRhKHRoaXMsIm1vdXNld2hlZWwtbGluZS1oZWlnaHQiKSxhLnJlbW92ZURhdGEodGhpcywibW91c2V3aGVlbC1wYWdlLWhlaWdodCIpfSxnZXRMaW5lSGVpZ2h0OmZ1bmN0aW9uKGIpe3ZhciBjPWEoYiksZD1jWyJvZmZzZXRQYXJlbnQiaW4gYS5mbj8ib2Zmc2V0UGFyZW50IjoicGFyZW50Il0oKTtyZXR1cm4gZC5sZW5ndGh8fChkPWEoImJvZHkiKSkscGFyc2VJbnQoZC5jc3MoImZvbnRTaXplIiksMTApfHxwYXJzZUludChjLmNzcygiZm9udFNpemUiKSwxMCl8fDE2fSxnZXRQYWdlSGVpZ2h0OmZ1bmN0aW9uKGIpe3JldHVybiBhKGIpLmhlaWdodCgpfSxzZXR0aW5nczp7YWRqdXN0T2xkRGVsdGFzOiEwLG5vcm1hbGl6ZU9mZnNldDohMH19O2EuZm4uZXh0ZW5kKHttb3VzZXdoZWVsOmZ1bmN0aW9uKGEpe3JldHVybiBhP3RoaXMuYmluZCgibW91c2V3aGVlbCIsYSk6dGhpcy50cmlnZ2VyKCJtb3VzZXdoZWVsIil9LHVubW91c2V3aGVlbDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy51bmJpbmQoIm1vdXNld2hlZWwiLGEpfX0pfSksYi5kZWZpbmUoImpxdWVyeS5zZWxlY3QyIixbImpxdWVyeSIsImpxdWVyeS1tb3VzZXdoZWVsIiwiLi9zZWxlY3QyL2NvcmUiLCIuL3NlbGVjdDIvZGVmYXVsdHMiLCIuL3NlbGVjdDIvdXRpbHMiXSxmdW5jdGlvbihhLGIsYyxkLGUpe2lmKG51bGw9PWEuZm4uc2VsZWN0Mil7dmFyIGY9WyJvcGVuIiwiY2xvc2UiLCJkZXN0cm95Il07YS5mbi5zZWxlY3QyPWZ1bmN0aW9uKGIpe2lmKCJvYmplY3QiPT10eXBlb2YoYj1ifHx7fSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEuZXh0ZW5kKCEwLHt9LGIpO25ldyBjKGEodGhpcyksZCl9KSx0aGlzO2lmKCJzdHJpbmciPT10eXBlb2YgYil7dmFyIGQsZz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBhPWUuR2V0RGF0YSh0aGlzLCJzZWxlY3QyIik7bnVsbD09YSYmd2luZG93LmNvbnNvbGUmJmNvbnNvbGUuZXJyb3ImJmNvbnNvbGUuZXJyb3IoIlRoZSBzZWxlY3QyKCciK2IrIicpIG1ldGhvZCB3YXMgY2FsbGVkIG9uIGFuIGVsZW1lbnQgdGhhdCBpcyBub3QgdXNpbmcgU2VsZWN0Mi4iKSxkPWFbYl0uYXBwbHkoYSxnKX0pLGEuaW5BcnJheShiLGYpPi0xP3RoaXM6ZH10aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXJndW1lbnRzIGZvciBTZWxlY3QyOiAiK2IpfX1yZXR1cm4gbnVsbD09YS5mbi5zZWxlY3QyLmRlZmF1bHRzJiYoYS5mbi5zZWxlY3QyLmRlZmF1bHRzPWQpLGN9KSx7ZGVmaW5lOmIuZGVmaW5lLHJlcXVpcmU6Yi5yZXF1aXJlfX0oKSxjPWIucmVxdWlyZSgianF1ZXJ5LnNlbGVjdDIiKTtyZXR1cm4gYS5mbi5zZWxlY3QyLmFtZD1iLGN9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9zZWxlY3QyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvc2VsZWN0Mi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2QzM2FmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GYW5jeVNlbGVjdHMvc2VsZWN0Mi00LjAuNi1yYy4xLWRpc3QvanMvc2VsZWN0Mi5qcwpAQCAtMCwwICsxLDU4NDcgQEAKKy8qIQorICogU2VsZWN0MiA0LjAuNi1yYy4xCisgKiBodHRwczovL3NlbGVjdDIuZ2l0aHViLmlvCisgKgorICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCisgKiBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQKKyAqLworOyhmdW5jdGlvbiAoZmFjdG9yeSkgeworICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7CisgICAgLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLgorICAgIGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTsKKyAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykgeworICAgIC8vIE5vZGUvQ29tbW9uSlMKKyAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb290LCBqUXVlcnkpIHsKKyAgICAgIGlmIChqUXVlcnkgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAvLyByZXF1aXJlKCdqUXVlcnknKSByZXR1cm5zIGEgZmFjdG9yeSB0aGF0IHJlcXVpcmVzIHdpbmRvdyB0bworICAgICAgICAvLyBidWlsZCBhIGpRdWVyeSBpbnN0YW5jZSwgd2Ugbm9ybWFsaXplIGhvdyB3ZSB1c2UgbW9kdWxlcworICAgICAgICAvLyB0aGF0IHJlcXVpcmUgdGhpcyBwYXR0ZXJuIGJ1dCB0aGUgd2luZG93IHByb3ZpZGVkIGlzIGEgbm9vcAorICAgICAgICAvLyBpZiBpdCdzIGRlZmluZWQgKGhvdyBqcXVlcnkgd29ya3MpCisgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgIGpRdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeScpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGpRdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeScpKHJvb3QpOworICAgICAgICB9CisgICAgICB9CisgICAgICBmYWN0b3J5KGpRdWVyeSk7CisgICAgICByZXR1cm4galF1ZXJ5OworICAgIH07CisgIH0gZWxzZSB7CisgICAgLy8gQnJvd3NlciBnbG9iYWxzCisgICAgZmFjdG9yeShqUXVlcnkpOworICB9Cit9IChmdW5jdGlvbiAoalF1ZXJ5KSB7CisgIC8vIFRoaXMgaXMgbmVlZGVkIHNvIHdlIGNhbiBjYXRjaCB0aGUgQU1EIGxvYWRlciBjb25maWd1cmF0aW9uIGFuZCB1c2UgaXQKKyAgLy8gVGhlIGlubmVyIGZpbGUgc2hvdWxkIGJlIHdyYXBwZWQgKGJ5IGBiYW5uZXIuc3RhcnQuanNgKSBpbiBhIGZ1bmN0aW9uIHRoYXQKKyAgLy8gcmV0dXJucyB0aGUgQU1EIGxvYWRlciByZWZlcmVuY2VzLgorICB2YXIgUzIgPShmdW5jdGlvbiAoKSB7CisgIC8vIFJlc3RvcmUgdGhlIFNlbGVjdDIgQU1EIGxvYWRlciBzbyBpdCBjYW4gYmUgdXNlZAorICAvLyBOZWVkZWQgbW9zdGx5IGluIHRoZSBsYW5ndWFnZSBmaWxlcywgd2hlcmUgdGhlIGxvYWRlciBpcyBub3QgaW5zZXJ0ZWQKKyAgaWYgKGpRdWVyeSAmJiBqUXVlcnkuZm4gJiYgalF1ZXJ5LmZuLnNlbGVjdDIgJiYgalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKSB7CisgICAgdmFyIFMyID0galF1ZXJ5LmZuLnNlbGVjdDIuYW1kOworICB9Cit2YXIgUzI7KGZ1bmN0aW9uICgpIHsgaWYgKCFTMiB8fCAhUzIucmVxdWlyZWpzKSB7CitpZiAoIVMyKSB7IFMyID0ge307IH0gZWxzZSB7IHJlcXVpcmUgPSBTMjsgfQorLyoqCisgKiBAbGljZW5zZSBhbG1vbmQgMC4zLjMgQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMuCisgKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSwgaHR0cDovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL2FsbW9uZC9MSUNFTlNFCisgKi8KKy8vR29pbmcgc2xvcHB5IHRvIGF2b2lkICd1c2Ugc3RyaWN0JyBzdHJpbmcgY29zdCwgYnV0IHN0cmljdCBwcmFjdGljZXMgc2hvdWxkCisvL2JlIGZvbGxvd2VkLgorLypnbG9iYWwgc2V0VGltZW91dDogZmFsc2UgKi8KKwordmFyIHJlcXVpcmVqcywgcmVxdWlyZSwgZGVmaW5lOworKGZ1bmN0aW9uICh1bmRlZikgeworICAgIHZhciBtYWluLCByZXEsIG1ha2VNYXAsIGhhbmRsZXJzLAorICAgICAgICBkZWZpbmVkID0ge30sCisgICAgICAgIHdhaXRpbmcgPSB7fSwKKyAgICAgICAgY29uZmlnID0ge30sCisgICAgICAgIGRlZmluaW5nID0ge30sCisgICAgICAgIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksCisgICAgICAgIGFwcyA9IFtdLnNsaWNlLAorICAgICAgICBqc1N1ZmZpeFJlZ0V4cCA9IC9cLmpzJC87CisKKyAgICBmdW5jdGlvbiBoYXNQcm9wKG9iaiwgcHJvcCkgeworICAgICAgICByZXR1cm4gaGFzT3duLmNhbGwob2JqLCBwcm9wKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHaXZlbiBhIHJlbGF0aXZlIG1vZHVsZSBuYW1lLCBsaWtlIC4vc29tZXRoaW5nLCBub3JtYWxpemUgaXQgdG8KKyAgICAgKiBhIHJlYWwgbmFtZSB0aGF0IGNhbiBiZSBtYXBwZWQgdG8gYSBwYXRoLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSByZWxhdGl2ZSBuYW1lCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGJhc2VOYW1lIGEgcmVhbCBuYW1lIHRoYXQgdGhlIG5hbWUgYXJnIGlzIHJlbGF0aXZlCisgICAgICogdG8uCisgICAgICogQHJldHVybnMge1N0cmluZ30gbm9ybWFsaXplZCBuYW1lCisgICAgICovCisgICAgZnVuY3Rpb24gbm9ybWFsaXplKG5hbWUsIGJhc2VOYW1lKSB7CisgICAgICAgIHZhciBuYW1lUGFydHMsIG5hbWVTZWdtZW50LCBtYXBWYWx1ZSwgZm91bmRNYXAsIGxhc3RJbmRleCwKKyAgICAgICAgICAgIGZvdW5kSSwgZm91bmRTdGFyTWFwLCBzdGFySSwgaSwgaiwgcGFydCwgbm9ybWFsaXplZEJhc2VQYXJ0cywKKyAgICAgICAgICAgIGJhc2VQYXJ0cyA9IGJhc2VOYW1lICYmIGJhc2VOYW1lLnNwbGl0KCIvIiksCisgICAgICAgICAgICBtYXAgPSBjb25maWcubWFwLAorICAgICAgICAgICAgc3Rhck1hcCA9IChtYXAgJiYgbWFwWycqJ10pIHx8IHt9OworCisgICAgICAgIC8vQWRqdXN0IGFueSByZWxhdGl2ZSBwYXRocy4KKyAgICAgICAgaWYgKG5hbWUpIHsKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lLnNwbGl0KCcvJyk7CisgICAgICAgICAgICBsYXN0SW5kZXggPSBuYW1lLmxlbmd0aCAtIDE7CisKKyAgICAgICAgICAgIC8vIElmIHdhbnRpbmcgbm9kZSBJRCBjb21wYXRpYmlsaXR5LCBzdHJpcCAuanMgZnJvbSBlbmQKKyAgICAgICAgICAgIC8vIG9mIElEcy4gSGF2ZSB0byBkbyB0aGlzIGhlcmUsIGFuZCBub3QgaW4gbmFtZVRvVXJsCisgICAgICAgICAgICAvLyBiZWNhdXNlIG5vZGUgYWxsb3dzIGVpdGhlciAuanMgb3Igbm9uIC5qcyB0byBtYXAKKyAgICAgICAgICAgIC8vIHRvIHNhbWUgZmlsZS4KKyAgICAgICAgICAgIGlmIChjb25maWcubm9kZUlkQ29tcGF0ICYmIGpzU3VmZml4UmVnRXhwLnRlc3QobmFtZVtsYXN0SW5kZXhdKSkgeworICAgICAgICAgICAgICAgIG5hbWVbbGFzdEluZGV4XSA9IG5hbWVbbGFzdEluZGV4XS5yZXBsYWNlKGpzU3VmZml4UmVnRXhwLCAnJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFN0YXJ0cyB3aXRoIGEgJy4nIHNvIG5lZWQgdGhlIGJhc2VOYW1lCisgICAgICAgICAgICBpZiAobmFtZVswXS5jaGFyQXQoMCkgPT09ICcuJyAmJiBiYXNlUGFydHMpIHsKKyAgICAgICAgICAgICAgICAvL0NvbnZlcnQgYmFzZU5hbWUgdG8gYXJyYXksIGFuZCBsb3Agb2ZmIHRoZSBsYXN0IHBhcnQsCisgICAgICAgICAgICAgICAgLy9zbyB0aGF0IC4gbWF0Y2hlcyB0aGF0ICdkaXJlY3RvcnknIGFuZCBub3QgbmFtZSBvZiB0aGUgYmFzZU5hbWUncworICAgICAgICAgICAgICAgIC8vbW9kdWxlLiBGb3IgaW5zdGFuY2UsIGJhc2VOYW1lIG9mICdvbmUvdHdvL3RocmVlJywgbWFwcyB0bworICAgICAgICAgICAgICAgIC8vJ29uZS90d28vdGhyZWUuanMnLCBidXQgd2Ugd2FudCB0aGUgZGlyZWN0b3J5LCAnb25lL3R3bycgZm9yCisgICAgICAgICAgICAgICAgLy90aGlzIG5vcm1hbGl6YXRpb24uCisgICAgICAgICAgICAgICAgbm9ybWFsaXplZEJhc2VQYXJ0cyA9IGJhc2VQYXJ0cy5zbGljZSgwLCBiYXNlUGFydHMubGVuZ3RoIC0gMSk7CisgICAgICAgICAgICAgICAgbmFtZSA9IG5vcm1hbGl6ZWRCYXNlUGFydHMuY29uY2F0KG5hbWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvL3N0YXJ0IHRyaW1Eb3RzCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHBhcnQgPSBuYW1lW2ldOworICAgICAgICAgICAgICAgIGlmIChwYXJ0ID09PSAnLicpIHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZS5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgICAgICAgICAgIGkgLT0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgYXQgdGhlIHN0YXJ0LCBvciBwcmV2aW91cyB2YWx1ZSBpcyBzdGlsbCAuLiwKKyAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCB0aGVtIHNvIHRoYXQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBwYXRoIGl0IG1heQorICAgICAgICAgICAgICAgICAgICAvLyBzdGlsbCB3b3JrIHdoZW4gY29udmVydGVkIHRvIGEgcGF0aCwgZXZlbiB0aG91Z2gKKyAgICAgICAgICAgICAgICAgICAgLy8gYXMgYW4gSUQgaXQgaXMgbGVzcyB0aGFuIGlkZWFsLiBJbiBsYXJnZXIgcG9pbnQKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVsZWFzZXMsIG1heSBiZSBiZXR0ZXIgdG8ganVzdCBraWNrIG91dCBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgKGkgPT09IDEgJiYgbmFtZVsyXSA9PT0gJy4uJykgfHwgbmFtZVtpIC0gMV0gPT09ICcuLicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLnNwbGljZShpIC0gMSwgMik7CisgICAgICAgICAgICAgICAgICAgICAgICBpIC09IDI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvL2VuZCB0cmltRG90cworCisgICAgICAgICAgICBuYW1lID0gbmFtZS5qb2luKCcvJyk7CisgICAgICAgIH0KKworICAgICAgICAvL0FwcGx5IG1hcCBjb25maWcgaWYgYXZhaWxhYmxlLgorICAgICAgICBpZiAoKGJhc2VQYXJ0cyB8fCBzdGFyTWFwKSAmJiBtYXApIHsKKyAgICAgICAgICAgIG5hbWVQYXJ0cyA9IG5hbWUuc3BsaXQoJy8nKTsKKworICAgICAgICAgICAgZm9yIChpID0gbmFtZVBhcnRzLmxlbmd0aDsgaSA+IDA7IGkgLT0gMSkgeworICAgICAgICAgICAgICAgIG5hbWVTZWdtZW50ID0gbmFtZVBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oIi8iKTsKKworICAgICAgICAgICAgICAgIGlmIChiYXNlUGFydHMpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9GaW5kIHRoZSBsb25nZXN0IGJhc2VOYW1lIHNlZ21lbnQgbWF0Y2ggaW4gdGhlIGNvbmZpZy4KKyAgICAgICAgICAgICAgICAgICAgLy9TbywgZG8gam9pbnMgb24gdGhlIGJpZ2dlc3QgdG8gc21hbGxlc3QgbGVuZ3RocyBvZiBiYXNlUGFydHMuCisgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGJhc2VQYXJ0cy5sZW5ndGg7IGogPiAwOyBqIC09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcFZhbHVlID0gbWFwW2Jhc2VQYXJ0cy5zbGljZSgwLCBqKS5qb2luKCcvJyldOworCisgICAgICAgICAgICAgICAgICAgICAgICAvL2Jhc2VOYW1lIHNlZ21lbnQgaGFzICBjb25maWcsIGZpbmQgaWYgaXQgaGFzIG9uZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcyBuYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBtYXBWYWx1ZVtuYW1lU2VnbWVudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTWF0Y2gsIHVwZGF0ZSBuYW1lIHRvIHRoZSBuZXcgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kTWFwID0gbWFwVmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSSA9IGk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChmb3VuZE1hcCkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvL0NoZWNrIGZvciBhIHN0YXIgbWFwIG1hdGNoLCBidXQganVzdCBob2xkIG9uIHRvIGl0LAorICAgICAgICAgICAgICAgIC8vaWYgdGhlcmUgaXMgYSBzaG9ydGVyIHNlZ21lbnQgbWF0Y2ggbGF0ZXIgaW4gYSBtYXRjaGluZworICAgICAgICAgICAgICAgIC8vY29uZmlnLCB0aGVuIGZhdm9yIG92ZXIgdGhpcyBzdGFyIG1hcC4KKyAgICAgICAgICAgICAgICBpZiAoIWZvdW5kU3Rhck1hcCAmJiBzdGFyTWFwICYmIHN0YXJNYXBbbmFtZVNlZ21lbnRdKSB7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kU3Rhck1hcCA9IHN0YXJNYXBbbmFtZVNlZ21lbnRdOworICAgICAgICAgICAgICAgICAgICBzdGFySSA9IGk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWZvdW5kTWFwICYmIGZvdW5kU3Rhck1hcCkgeworICAgICAgICAgICAgICAgIGZvdW5kTWFwID0gZm91bmRTdGFyTWFwOworICAgICAgICAgICAgICAgIGZvdW5kSSA9IHN0YXJJOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZm91bmRNYXApIHsKKyAgICAgICAgICAgICAgICBuYW1lUGFydHMuc3BsaWNlKDAsIGZvdW5kSSwgZm91bmRNYXApOworICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lUGFydHMuam9pbignLycpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQorCisgICAgZnVuY3Rpb24gbWFrZVJlcXVpcmUocmVsTmFtZSwgZm9yY2VTeW5jKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAvL0EgdmVyc2lvbiBvZiBhIHJlcXVpcmUgZnVuY3Rpb24gdGhhdCBwYXNzZXMgYSBtb2R1bGVOYW1lCisgICAgICAgICAgICAvL3ZhbHVlIGZvciBpdGVtcyB0aGF0IG1heSBuZWVkIHRvCisgICAgICAgICAgICAvL2xvb2sgdXAgcGF0aHMgcmVsYXRpdmUgdG8gdGhlIG1vZHVsZU5hbWUKKyAgICAgICAgICAgIHZhciBhcmdzID0gYXBzLmNhbGwoYXJndW1lbnRzLCAwKTsKKworICAgICAgICAgICAgLy9JZiBmaXJzdCBhcmcgaXMgbm90IHJlcXVpcmUoJ3N0cmluZycpLCBhbmQgdGhlcmUgaXMgb25seQorICAgICAgICAgICAgLy9vbmUgYXJnLCBpdCBpcyB0aGUgYXJyYXkgZm9ybSB3aXRob3V0IGEgY2FsbGJhY2suIEluc2VydAorICAgICAgICAgICAgLy9hIG51bGwgc28gdGhhdCB0aGUgZm9sbG93aW5nIGNvbmNhdCBpcyBjb3JyZWN0LgorICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdICE9PSAnc3RyaW5nJyAmJiBhcmdzLmxlbmd0aCA9PT0gMSkgeworICAgICAgICAgICAgICAgIGFyZ3MucHVzaChudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXEuYXBwbHkodW5kZWYsIGFyZ3MuY29uY2F0KFtyZWxOYW1lLCBmb3JjZVN5bmNdKSk7CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gbWFrZU5vcm1hbGl6ZShyZWxOYW1lKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShuYW1lLCByZWxOYW1lKTsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBtYWtlTG9hZChkZXBOYW1lKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIGRlZmluZWRbZGVwTmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjYWxsRGVwKG5hbWUpIHsKKyAgICAgICAgaWYgKGhhc1Byb3Aod2FpdGluZywgbmFtZSkpIHsKKyAgICAgICAgICAgIHZhciBhcmdzID0gd2FpdGluZ1tuYW1lXTsKKyAgICAgICAgICAgIGRlbGV0ZSB3YWl0aW5nW25hbWVdOworICAgICAgICAgICAgZGVmaW5pbmdbbmFtZV0gPSB0cnVlOworICAgICAgICAgICAgbWFpbi5hcHBseSh1bmRlZiwgYXJncyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgbmFtZSkgJiYgIWhhc1Byb3AoZGVmaW5pbmcsIG5hbWUpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vICcgKyBuYW1lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZGVmaW5lZFtuYW1lXTsKKyAgICB9CisKKyAgICAvL1R1cm5zIGEgcGx1Z2luIXJlc291cmNlIHRvIFtwbHVnaW4sIHJlc291cmNlXQorICAgIC8vd2l0aCB0aGUgcGx1Z2luIGJlaW5nIHVuZGVmaW5lZCBpZiB0aGUgbmFtZQorICAgIC8vZGlkIG5vdCBoYXZlIGEgcGx1Z2luIHByZWZpeC4KKyAgICBmdW5jdGlvbiBzcGxpdFByZWZpeChuYW1lKSB7CisgICAgICAgIHZhciBwcmVmaXgsCisgICAgICAgICAgICBpbmRleCA9IG5hbWUgPyBuYW1lLmluZGV4T2YoJyEnKSA6IC0xOworICAgICAgICBpZiAoaW5kZXggPiAtMSkgeworICAgICAgICAgICAgcHJlZml4ID0gbmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOworICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSwgbmFtZS5sZW5ndGgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBbcHJlZml4LCBuYW1lXTsKKyAgICB9CisKKyAgICAvL0NyZWF0ZXMgYSBwYXJ0cyBhcnJheSBmb3IgYSByZWxOYW1lIHdoZXJlIGZpcnN0IHBhcnQgaXMgcGx1Z2luIElELAorICAgIC8vc2Vjb25kIHBhcnQgaXMgcmVzb3VyY2UgSUQuIEFzc3VtZXMgcmVsTmFtZSBoYXMgYWxyZWFkeSBiZWVuIG5vcm1hbGl6ZWQuCisgICAgZnVuY3Rpb24gbWFrZVJlbFBhcnRzKHJlbE5hbWUpIHsKKyAgICAgICAgcmV0dXJuIHJlbE5hbWUgPyBzcGxpdFByZWZpeChyZWxOYW1lKSA6IFtdOworICAgIH0KKworICAgIC8qKgorICAgICAqIE1ha2VzIGEgbmFtZSBtYXAsIG5vcm1hbGl6aW5nIHRoZSBuYW1lLCBhbmQgdXNpbmcgYSBwbHVnaW4KKyAgICAgKiBmb3Igbm9ybWFsaXphdGlvbiBpZiBuZWNlc3NhcnkuIEdyYWJzIGEgcmVmIHRvIHBsdWdpbgorICAgICAqIHRvbywgYXMgYW4gb3B0aW1pemF0aW9uLgorICAgICAqLworICAgIG1ha2VNYXAgPSBmdW5jdGlvbiAobmFtZSwgcmVsUGFydHMpIHsKKyAgICAgICAgdmFyIHBsdWdpbiwKKyAgICAgICAgICAgIHBhcnRzID0gc3BsaXRQcmVmaXgobmFtZSksCisgICAgICAgICAgICBwcmVmaXggPSBwYXJ0c1swXSwKKyAgICAgICAgICAgIHJlbFJlc291cmNlTmFtZSA9IHJlbFBhcnRzWzFdOworCisgICAgICAgIG5hbWUgPSBwYXJ0c1sxXTsKKworICAgICAgICBpZiAocHJlZml4KSB7CisgICAgICAgICAgICBwcmVmaXggPSBub3JtYWxpemUocHJlZml4LCByZWxSZXNvdXJjZU5hbWUpOworICAgICAgICAgICAgcGx1Z2luID0gY2FsbERlcChwcmVmaXgpOworICAgICAgICB9CisKKyAgICAgICAgLy9Ob3JtYWxpemUgYWNjb3JkaW5nCisgICAgICAgIGlmIChwcmVmaXgpIHsKKyAgICAgICAgICAgIGlmIChwbHVnaW4gJiYgcGx1Z2luLm5vcm1hbGl6ZSkgeworICAgICAgICAgICAgICAgIG5hbWUgPSBwbHVnaW4ubm9ybWFsaXplKG5hbWUsIG1ha2VOb3JtYWxpemUocmVsUmVzb3VyY2VOYW1lKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG5hbWUgPSBub3JtYWxpemUobmFtZSwgcmVsUmVzb3VyY2VOYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5hbWUgPSBub3JtYWxpemUobmFtZSwgcmVsUmVzb3VyY2VOYW1lKTsKKyAgICAgICAgICAgIHBhcnRzID0gc3BsaXRQcmVmaXgobmFtZSk7CisgICAgICAgICAgICBwcmVmaXggPSBwYXJ0c1swXTsKKyAgICAgICAgICAgIG5hbWUgPSBwYXJ0c1sxXTsKKyAgICAgICAgICAgIGlmIChwcmVmaXgpIHsKKyAgICAgICAgICAgICAgICBwbHVnaW4gPSBjYWxsRGVwKHByZWZpeCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvL1VzaW5nIHJpZGljdWxvdXMgcHJvcGVydHkgbmFtZXMgZm9yIHNwYWNlIHJlYXNvbnMKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGY6IHByZWZpeCA/IHByZWZpeCArICchJyArIG5hbWUgOiBuYW1lLCAvL2Z1bGxOYW1lCisgICAgICAgICAgICBuOiBuYW1lLAorICAgICAgICAgICAgcHI6IHByZWZpeCwKKyAgICAgICAgICAgIHA6IHBsdWdpbgorICAgICAgICB9OworICAgIH07CisKKyAgICBmdW5jdGlvbiBtYWtlQ29uZmlnKG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiAoY29uZmlnICYmIGNvbmZpZy5jb25maWcgJiYgY29uZmlnLmNvbmZpZ1tuYW1lXSkgfHwge307CisgICAgICAgIH07CisgICAgfQorCisgICAgaGFuZGxlcnMgPSB7CisgICAgICAgIHJlcXVpcmU6IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gbWFrZVJlcXVpcmUobmFtZSk7CisgICAgICAgIH0sCisgICAgICAgIGV4cG9ydHM6IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgICAgICB2YXIgZSA9IGRlZmluZWRbbmFtZV07CisgICAgICAgICAgICBpZiAodHlwZW9mIGUgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiAoZGVmaW5lZFtuYW1lXSA9IHt9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgbW9kdWxlOiBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBpZDogbmFtZSwKKyAgICAgICAgICAgICAgICB1cmk6ICcnLAorICAgICAgICAgICAgICAgIGV4cG9ydHM6IGRlZmluZWRbbmFtZV0sCisgICAgICAgICAgICAgICAgY29uZmlnOiBtYWtlQ29uZmlnKG5hbWUpCisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgfTsKKworICAgIG1haW4gPSBmdW5jdGlvbiAobmFtZSwgZGVwcywgY2FsbGJhY2ssIHJlbE5hbWUpIHsKKyAgICAgICAgdmFyIGNqc01vZHVsZSwgZGVwTmFtZSwgcmV0LCBtYXAsIGksIHJlbFBhcnRzLAorICAgICAgICAgICAgYXJncyA9IFtdLAorICAgICAgICAgICAgY2FsbGJhY2tUeXBlID0gdHlwZW9mIGNhbGxiYWNrLAorICAgICAgICAgICAgdXNpbmdFeHBvcnRzOworCisgICAgICAgIC8vVXNlIG5hbWUgaWYgbm8gcmVsTmFtZQorICAgICAgICByZWxOYW1lID0gcmVsTmFtZSB8fCBuYW1lOworICAgICAgICByZWxQYXJ0cyA9IG1ha2VSZWxQYXJ0cyhyZWxOYW1lKTsKKworICAgICAgICAvL0NhbGwgdGhlIGNhbGxiYWNrIHRvIGRlZmluZSB0aGUgbW9kdWxlLCBpZiBuZWNlc3NhcnkuCisgICAgICAgIGlmIChjYWxsYmFja1R5cGUgPT09ICd1bmRlZmluZWQnIHx8IGNhbGxiYWNrVHlwZSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgICAgLy9QdWxsIG91dCB0aGUgZGVmaW5lZCBkZXBlbmRlbmNpZXMgYW5kIHBhc3MgdGhlIG9yZGVyZWQKKyAgICAgICAgICAgIC8vdmFsdWVzIHRvIHRoZSBjYWxsYmFjay4KKyAgICAgICAgICAgIC8vRGVmYXVsdCB0byBbcmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlXSBpZiBubyBkZXBzCisgICAgICAgICAgICBkZXBzID0gIWRlcHMubGVuZ3RoICYmIGNhbGxiYWNrLmxlbmd0aCA/IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZSddIDogZGVwczsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkZXBzLmxlbmd0aDsgaSArPSAxKSB7CisgICAgICAgICAgICAgICAgbWFwID0gbWFrZU1hcChkZXBzW2ldLCByZWxQYXJ0cyk7CisgICAgICAgICAgICAgICAgZGVwTmFtZSA9IG1hcC5mOworCisgICAgICAgICAgICAgICAgLy9GYXN0IHBhdGggQ29tbW9uSlMgc3RhbmRhcmQgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIGlmIChkZXBOYW1lID09PSAicmVxdWlyZSIpIHsKKyAgICAgICAgICAgICAgICAgICAgYXJnc1tpXSA9IGhhbmRsZXJzLnJlcXVpcmUobmFtZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZXBOYW1lID09PSAiZXhwb3J0cyIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9Db21tb25KUyBtb2R1bGUgc3BlYyAxLjEKKyAgICAgICAgICAgICAgICAgICAgYXJnc1tpXSA9IGhhbmRsZXJzLmV4cG9ydHMobmFtZSk7CisgICAgICAgICAgICAgICAgICAgIHVzaW5nRXhwb3J0cyA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZXBOYW1lID09PSAibW9kdWxlIikgeworICAgICAgICAgICAgICAgICAgICAvL0NvbW1vbkpTIG1vZHVsZSBzcGVjIDEuMQorICAgICAgICAgICAgICAgICAgICBjanNNb2R1bGUgPSBhcmdzW2ldID0gaGFuZGxlcnMubW9kdWxlKG5hbWUpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzUHJvcChkZWZpbmVkLCBkZXBOYW1lKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUHJvcCh3YWl0aW5nLCBkZXBOYW1lKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUHJvcChkZWZpbmluZywgZGVwTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXJnc1tpXSA9IGNhbGxEZXAoZGVwTmFtZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXAucCkgeworICAgICAgICAgICAgICAgICAgICBtYXAucC5sb2FkKG1hcC5uLCBtYWtlUmVxdWlyZShyZWxOYW1lLCB0cnVlKSwgbWFrZUxvYWQoZGVwTmFtZSksIHt9KTsKKyAgICAgICAgICAgICAgICAgICAgYXJnc1tpXSA9IGRlZmluZWRbZGVwTmFtZV07CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG5hbWUgKyAnIG1pc3NpbmcgJyArIGRlcE5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0ID0gY2FsbGJhY2sgPyBjYWxsYmFjay5hcHBseShkZWZpbmVkW25hbWVdLCBhcmdzKSA6IHVuZGVmaW5lZDsKKworICAgICAgICAgICAgaWYgKG5hbWUpIHsKKyAgICAgICAgICAgICAgICAvL0lmIHNldHRpbmcgZXhwb3J0cyB2aWEgIm1vZHVsZSIgaXMgaW4gcGxheSwKKyAgICAgICAgICAgICAgICAvL2Zhdm9yIHRoYXQgb3ZlciByZXR1cm4gdmFsdWUgYW5kIGV4cG9ydHMuIEFmdGVyIHRoYXQsCisgICAgICAgICAgICAgICAgLy9mYXZvciBhIG5vbi11bmRlZmluZWQgcmV0dXJuIHZhbHVlIG92ZXIgZXhwb3J0cyB1c2UuCisgICAgICAgICAgICAgICAgaWYgKGNqc01vZHVsZSAmJiBjanNNb2R1bGUuZXhwb3J0cyAhPT0gdW5kZWYgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGNqc01vZHVsZS5leHBvcnRzICE9PSBkZWZpbmVkW25hbWVdKSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZWRbbmFtZV0gPSBjanNNb2R1bGUuZXhwb3J0czsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldCAhPT0gdW5kZWYgfHwgIXVzaW5nRXhwb3J0cykgeworICAgICAgICAgICAgICAgICAgICAvL1VzZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgICAgICBkZWZpbmVkW25hbWVdID0gcmV0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChuYW1lKSB7CisgICAgICAgICAgICAvL01heSBqdXN0IGJlIGFuIG9iamVjdCBkZWZpbml0aW9uIGZvciB0aGUgbW9kdWxlLiBPbmx5CisgICAgICAgICAgICAvL3dvcnJ5IGFib3V0IGRlZmluaW5nIGlmIGhhdmUgYSBtb2R1bGUgbmFtZS4KKyAgICAgICAgICAgIGRlZmluZWRbbmFtZV0gPSBjYWxsYmFjazsKKyAgICAgICAgfQorICAgIH07CisKKyAgICByZXF1aXJlanMgPSByZXF1aXJlID0gcmVxID0gZnVuY3Rpb24gKGRlcHMsIGNhbGxiYWNrLCByZWxOYW1lLCBmb3JjZVN5bmMsIGFsdCkgeworICAgICAgICBpZiAodHlwZW9mIGRlcHMgPT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICBpZiAoaGFuZGxlcnNbZGVwc10pIHsKKyAgICAgICAgICAgICAgICAvL2NhbGxiYWNrIGluIHRoaXMgY2FzZSBpcyByZWFsbHkgcmVsTmFtZQorICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyc1tkZXBzXShjYWxsYmFjayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvL0p1c3QgcmV0dXJuIHRoZSBtb2R1bGUgd2FudGVkLiBJbiB0aGlzIHNjZW5hcmlvLCB0aGUKKyAgICAgICAgICAgIC8vZGVwcyBhcmcgaXMgdGhlIG1vZHVsZSBuYW1lLCBhbmQgc2Vjb25kIGFyZyAoaWYgcGFzc2VkKQorICAgICAgICAgICAgLy9pcyBqdXN0IHRoZSByZWxOYW1lLgorICAgICAgICAgICAgLy9Ob3JtYWxpemUgbW9kdWxlIG5hbWUsIGlmIGl0IGNvbnRhaW5zIC4gb3IgLi4KKyAgICAgICAgICAgIHJldHVybiBjYWxsRGVwKG1ha2VNYXAoZGVwcywgbWFrZVJlbFBhcnRzKGNhbGxiYWNrKSkuZik7CisgICAgICAgIH0gZWxzZSBpZiAoIWRlcHMuc3BsaWNlKSB7CisgICAgICAgICAgICAvL2RlcHMgaXMgYSBjb25maWcgb2JqZWN0LCBub3QgYW4gYXJyYXkuCisgICAgICAgICAgICBjb25maWcgPSBkZXBzOworICAgICAgICAgICAgaWYgKGNvbmZpZy5kZXBzKSB7CisgICAgICAgICAgICAgICAgcmVxKGNvbmZpZy5kZXBzLCBjb25maWcuY2FsbGJhY2spOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFjYWxsYmFjaykgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNhbGxiYWNrLnNwbGljZSkgeworICAgICAgICAgICAgICAgIC8vY2FsbGJhY2sgaXMgYW4gYXJyYXksIHdoaWNoIG1lYW5zIGl0IGlzIGEgZGVwZW5kZW5jeSBsaXN0LgorICAgICAgICAgICAgICAgIC8vQWRqdXN0IGFyZ3MgaWYgdGhlcmUgYXJlIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgIGRlcHMgPSBjYWxsYmFjazsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHJlbE5hbWU7CisgICAgICAgICAgICAgICAgcmVsTmFtZSA9IG51bGw7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlcHMgPSB1bmRlZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vU3VwcG9ydCByZXF1aXJlKFsnYSddKQorICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9OworCisgICAgICAgIC8vSWYgcmVsTmFtZSBpcyBhIGZ1bmN0aW9uLCBpdCBpcyBhbiBlcnJiYWNrIGhhbmRsZXIsCisgICAgICAgIC8vc28gcmVtb3ZlIGl0LgorICAgICAgICBpZiAodHlwZW9mIHJlbE5hbWUgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgIHJlbE5hbWUgPSBmb3JjZVN5bmM7CisgICAgICAgICAgICBmb3JjZVN5bmMgPSBhbHQ7CisgICAgICAgIH0KKworICAgICAgICAvL1NpbXVsYXRlIGFzeW5jIGNhbGxiYWNrOworICAgICAgICBpZiAoZm9yY2VTeW5jKSB7CisgICAgICAgICAgICBtYWluKHVuZGVmLCBkZXBzLCBjYWxsYmFjaywgcmVsTmFtZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvL1VzaW5nIGEgbm9uLXplcm8gdmFsdWUgYmVjYXVzZSBvZiBjb25jZXJuIGZvciB3aGF0IG9sZCBicm93c2VycworICAgICAgICAgICAgLy9kbywgYW5kIGxhdGVzdCBicm93c2VycyAidXBncmFkZSIgdG8gNCBpZiBsb3dlciB2YWx1ZSBpcyB1c2VkOgorICAgICAgICAgICAgLy9odHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aW1lcnMuaHRtbCNkb20td2luZG93dGltZXJzLXNldHRpbWVvdXQ6CisgICAgICAgICAgICAvL0lmIHdhbnQgYSB2YWx1ZSBpbW1lZGlhdGVseSwgdXNlIHJlcXVpcmUoJ2lkJykgaW5zdGVhZCAtLSBzb21ldGhpbmcKKyAgICAgICAgICAgIC8vdGhhdCB3b3JrcyBpbiBhbG1vbmQgb24gdGhlIGdsb2JhbCBsZXZlbCwgYnV0IG5vdCBndWFyYW50ZWVkIGFuZAorICAgICAgICAgICAgLy91bmxpa2VseSB0byB3b3JrIGluIG90aGVyIEFNRCBpbXBsZW1lbnRhdGlvbnMuCisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBtYWluKHVuZGVmLCBkZXBzLCBjYWxsYmFjaywgcmVsTmFtZSk7CisgICAgICAgICAgICB9LCA0KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXE7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEp1c3QgZHJvcHMgdGhlIGNvbmZpZyBvbiB0aGUgZmxvb3IsIGJ1dCByZXR1cm5zIHJlcSBpbiBjYXNlCisgICAgICogdGhlIGNvbmZpZyByZXR1cm4gdmFsdWUgaXMgdXNlZC4KKyAgICAgKi8KKyAgICByZXEuY29uZmlnID0gZnVuY3Rpb24gKGNmZykgeworICAgICAgICByZXR1cm4gcmVxKGNmZyk7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEV4cG9zZSBtb2R1bGUgcmVnaXN0cnkgZm9yIGRlYnVnZ2luZyBhbmQgdG9vbGluZworICAgICAqLworICAgIHJlcXVpcmVqcy5fZGVmaW5lZCA9IGRlZmluZWQ7CisKKyAgICBkZWZpbmUgPSBmdW5jdGlvbiAobmFtZSwgZGVwcywgY2FsbGJhY2spIHsKKyAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWUgYWxtb25kIFJFQURNRTogaW5jb3JyZWN0IG1vZHVsZSBidWlsZCwgbm8gbW9kdWxlIG5hbWUnKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vVGhpcyBtb2R1bGUgbWF5IG5vdCBoYXZlIGRlcGVuZGVuY2llcworICAgICAgICBpZiAoIWRlcHMuc3BsaWNlKSB7CisgICAgICAgICAgICAvL2RlcHMgaXMgbm90IGFuIGFycmF5LCBzbyBwcm9iYWJseSBtZWFucworICAgICAgICAgICAgLy9hbiBvYmplY3QgbGl0ZXJhbCBvciBmYWN0b3J5IGZ1bmN0aW9uIGZvcgorICAgICAgICAgICAgLy90aGUgdmFsdWUuIEFkanVzdCBhcmdzLgorICAgICAgICAgICAgY2FsbGJhY2sgPSBkZXBzOworICAgICAgICAgICAgZGVwcyA9IFtdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFoYXNQcm9wKGRlZmluZWQsIG5hbWUpICYmICFoYXNQcm9wKHdhaXRpbmcsIG5hbWUpKSB7CisgICAgICAgICAgICB3YWl0aW5nW25hbWVdID0gW25hbWUsIGRlcHMsIGNhbGxiYWNrXTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBkZWZpbmUuYW1kID0geworICAgICAgICBqUXVlcnk6IHRydWUKKyAgICB9OworfSgpKTsKKworUzIucmVxdWlyZWpzID0gcmVxdWlyZWpzO1MyLnJlcXVpcmUgPSByZXF1aXJlO1MyLmRlZmluZSA9IGRlZmluZTsKK30KK30oKSk7CitTMi5kZWZpbmUoImFsbW9uZCIsIGZ1bmN0aW9uKCl7fSk7CisKKy8qIGdsb2JhbCBqUXVlcnk6ZmFsc2UsICQ6ZmFsc2UgKi8KK1MyLmRlZmluZSgnanF1ZXJ5JyxbXSxmdW5jdGlvbiAoKSB7CisgIHZhciBfJCA9IGpRdWVyeSB8fCAkOworCisgIGlmIChfJCA9PSBudWxsICYmIGNvbnNvbGUgJiYgY29uc29sZS5lcnJvcikgeworICAgIGNvbnNvbGUuZXJyb3IoCisgICAgICAnU2VsZWN0MjogQW4gaW5zdGFuY2Ugb2YgalF1ZXJ5IG9yIGEgalF1ZXJ5LWNvbXBhdGlibGUgbGlicmFyeSB3YXMgbm90ICcgKworICAgICAgJ2ZvdW5kLiBNYWtlIHN1cmUgdGhhdCB5b3UgYXJlIGluY2x1ZGluZyBqUXVlcnkgYmVmb3JlIFNlbGVjdDIgb24geW91ciAnICsKKyAgICAgICd3ZWIgcGFnZS4nCisgICAgKTsKKyAgfQorCisgIHJldHVybiBfJDsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvdXRpbHMnLFsKKyAgJ2pxdWVyeScKK10sIGZ1bmN0aW9uICgkKSB7CisgIHZhciBVdGlscyA9IHt9OworCisgIFV0aWxzLkV4dGVuZCA9IGZ1bmN0aW9uIChDaGlsZENsYXNzLCBTdXBlckNsYXNzKSB7CisgICAgdmFyIF9faGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5OworCisgICAgZnVuY3Rpb24gQmFzZUNvbnN0cnVjdG9yICgpIHsKKyAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBDaGlsZENsYXNzOworICAgIH0KKworICAgIGZvciAodmFyIGtleSBpbiBTdXBlckNsYXNzKSB7CisgICAgICBpZiAoX19oYXNQcm9wLmNhbGwoU3VwZXJDbGFzcywga2V5KSkgeworICAgICAgICBDaGlsZENsYXNzW2tleV0gPSBTdXBlckNsYXNzW2tleV07CisgICAgICB9CisgICAgfQorCisgICAgQmFzZUNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IFN1cGVyQ2xhc3MucHJvdG90eXBlOworICAgIENoaWxkQ2xhc3MucHJvdG90eXBlID0gbmV3IEJhc2VDb25zdHJ1Y3RvcigpOworICAgIENoaWxkQ2xhc3MuX19zdXBlcl9fID0gU3VwZXJDbGFzcy5wcm90b3R5cGU7CisKKyAgICByZXR1cm4gQ2hpbGRDbGFzczsKKyAgfTsKKworICBmdW5jdGlvbiBnZXRNZXRob2RzICh0aGVDbGFzcykgeworICAgIHZhciBwcm90byA9IHRoZUNsYXNzLnByb3RvdHlwZTsKKworICAgIHZhciBtZXRob2RzID0gW107CisKKyAgICBmb3IgKHZhciBtZXRob2ROYW1lIGluIHByb3RvKSB7CisgICAgICB2YXIgbSA9IHByb3RvW21ldGhvZE5hbWVdOworCisgICAgICBpZiAodHlwZW9mIG0gIT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGlmIChtZXRob2ROYW1lID09PSAnY29uc3RydWN0b3InKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBtZXRob2RzLnB1c2gobWV0aG9kTmFtZSk7CisgICAgfQorCisgICAgcmV0dXJuIG1ldGhvZHM7CisgIH0KKworICBVdGlscy5EZWNvcmF0ZSA9IGZ1bmN0aW9uIChTdXBlckNsYXNzLCBEZWNvcmF0b3JDbGFzcykgeworICAgIHZhciBkZWNvcmF0ZWRNZXRob2RzID0gZ2V0TWV0aG9kcyhEZWNvcmF0b3JDbGFzcyk7CisgICAgdmFyIHN1cGVyTWV0aG9kcyA9IGdldE1ldGhvZHMoU3VwZXJDbGFzcyk7CisKKyAgICBmdW5jdGlvbiBEZWNvcmF0ZWRDbGFzcyAoKSB7CisgICAgICB2YXIgdW5zaGlmdCA9IEFycmF5LnByb3RvdHlwZS51bnNoaWZ0OworCisgICAgICB2YXIgYXJnQ291bnQgPSBEZWNvcmF0b3JDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IubGVuZ3RoOworCisgICAgICB2YXIgY2FsbGVkQ29uc3RydWN0b3IgPSBTdXBlckNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjsKKworICAgICAgaWYgKGFyZ0NvdW50ID4gMCkgeworICAgICAgICB1bnNoaWZ0LmNhbGwoYXJndW1lbnRzLCBTdXBlckNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcik7CisKKyAgICAgICAgY2FsbGVkQ29uc3RydWN0b3IgPSBEZWNvcmF0b3JDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3I7CisgICAgICB9CisKKyAgICAgIGNhbGxlZENvbnN0cnVjdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgfQorCisgICAgRGVjb3JhdG9yQ2xhc3MuZGlzcGxheU5hbWUgPSBTdXBlckNsYXNzLmRpc3BsYXlOYW1lOworCisgICAgZnVuY3Rpb24gY3RyICgpIHsKKyAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBEZWNvcmF0ZWRDbGFzczsKKyAgICB9CisKKyAgICBEZWNvcmF0ZWRDbGFzcy5wcm90b3R5cGUgPSBuZXcgY3RyKCk7CisKKyAgICBmb3IgKHZhciBtID0gMDsgbSA8IHN1cGVyTWV0aG9kcy5sZW5ndGg7IG0rKykgeworICAgICAgdmFyIHN1cGVyTWV0aG9kID0gc3VwZXJNZXRob2RzW21dOworCisgICAgICBEZWNvcmF0ZWRDbGFzcy5wcm90b3R5cGVbc3VwZXJNZXRob2RdID0KKyAgICAgICAgU3VwZXJDbGFzcy5wcm90b3R5cGVbc3VwZXJNZXRob2RdOworICAgIH0KKworICAgIHZhciBjYWxsZWRNZXRob2QgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSkgeworICAgICAgLy8gU3R1YiBvdXQgdGhlIG9yaWdpbmFsIG1ldGhvZCBpZiBpdCdzIG5vdCBkZWNvcmF0aW5nIGFuIGFjdHVhbCBtZXRob2QKKyAgICAgIHZhciBvcmlnaW5hbE1ldGhvZCA9IGZ1bmN0aW9uICgpIHt9OworCisgICAgICBpZiAobWV0aG9kTmFtZSBpbiBEZWNvcmF0ZWRDbGFzcy5wcm90b3R5cGUpIHsKKyAgICAgICAgb3JpZ2luYWxNZXRob2QgPSBEZWNvcmF0ZWRDbGFzcy5wcm90b3R5cGVbbWV0aG9kTmFtZV07CisgICAgICB9CisKKyAgICAgIHZhciBkZWNvcmF0ZWRNZXRob2QgPSBEZWNvcmF0b3JDbGFzcy5wcm90b3R5cGVbbWV0aG9kTmFtZV07CisKKyAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB1bnNoaWZ0ID0gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQ7CisKKyAgICAgICAgdW5zaGlmdC5jYWxsKGFyZ3VtZW50cywgb3JpZ2luYWxNZXRob2QpOworCisgICAgICAgIHJldHVybiBkZWNvcmF0ZWRNZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgIH07CisgICAgfTsKKworICAgIGZvciAodmFyIGQgPSAwOyBkIDwgZGVjb3JhdGVkTWV0aG9kcy5sZW5ndGg7IGQrKykgeworICAgICAgdmFyIGRlY29yYXRlZE1ldGhvZCA9IGRlY29yYXRlZE1ldGhvZHNbZF07CisKKyAgICAgIERlY29yYXRlZENsYXNzLnByb3RvdHlwZVtkZWNvcmF0ZWRNZXRob2RdID0gY2FsbGVkTWV0aG9kKGRlY29yYXRlZE1ldGhvZCk7CisgICAgfQorCisgICAgcmV0dXJuIERlY29yYXRlZENsYXNzOworICB9OworCisgIHZhciBPYnNlcnZhYmxlID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMubGlzdGVuZXJzID0ge307CisgIH07CisKKyAgT2JzZXJ2YWJsZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7CisgICAgdGhpcy5saXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVycyB8fCB7fTsKKworICAgIGlmIChldmVudCBpbiB0aGlzLmxpc3RlbmVycykgeworICAgICAgdGhpcy5saXN0ZW5lcnNbZXZlbnRdLnB1c2goY2FsbGJhY2spOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLmxpc3RlbmVyc1tldmVudF0gPSBbY2FsbGJhY2tdOworICAgIH0KKyAgfTsKKworICBPYnNlcnZhYmxlLnByb3RvdHlwZS50cmlnZ2VyID0gZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgdmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlOworICAgIHZhciBwYXJhbXMgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7CisKKyAgICB0aGlzLmxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzIHx8IHt9OworCisgICAgLy8gUGFyYW1zIHNob3VsZCBhbHdheXMgY29tZSBpbiBhcyBhbiBhcnJheQorICAgIGlmIChwYXJhbXMgPT0gbnVsbCkgeworICAgICAgcGFyYW1zID0gW107CisgICAgfQorCisgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGFyZ3VtZW50cyB0byB0aGUgZXZlbnQsIHVzZSBhIHRlbXBvcmFyeSBvYmplY3QKKyAgICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkgeworICAgICAgcGFyYW1zLnB1c2goe30pOworICAgIH0KKworICAgIC8vIFNldCB0aGUgYF90eXBlYCBvZiB0aGUgZmlyc3Qgb2JqZWN0IHRvIHRoZSBldmVudAorICAgIHBhcmFtc1swXS5fdHlwZSA9IGV2ZW50OworCisgICAgaWYgKGV2ZW50IGluIHRoaXMubGlzdGVuZXJzKSB7CisgICAgICB0aGlzLmludm9rZSh0aGlzLmxpc3RlbmVyc1tldmVudF0sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7CisgICAgfQorCisgICAgaWYgKCcqJyBpbiB0aGlzLmxpc3RlbmVycykgeworICAgICAgdGhpcy5pbnZva2UodGhpcy5saXN0ZW5lcnNbJyonXSwgYXJndW1lbnRzKTsKKyAgICB9CisgIH07CisKKyAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuaW52b2tlID0gZnVuY3Rpb24gKGxpc3RlbmVycywgcGFyYW1zKSB7CisgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykgeworICAgICAgbGlzdGVuZXJzW2ldLmFwcGx5KHRoaXMsIHBhcmFtcyk7CisgICAgfQorICB9OworCisgIFV0aWxzLk9ic2VydmFibGUgPSBPYnNlcnZhYmxlOworCisgIFV0aWxzLmdlbmVyYXRlQ2hhcnMgPSBmdW5jdGlvbiAobGVuZ3RoKSB7CisgICAgdmFyIGNoYXJzID0gJyc7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgcmFuZG9tQ2hhciA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDM2KTsKKyAgICAgIGNoYXJzICs9IHJhbmRvbUNoYXIudG9TdHJpbmcoMzYpOworICAgIH0KKworICAgIHJldHVybiBjaGFyczsKKyAgfTsKKworICBVdGlscy5iaW5kID0gZnVuY3Rpb24gKGZ1bmMsIGNvbnRleHQpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gKCkgeworICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpOworICAgIH07CisgIH07CisKKyAgVXRpbHMuX2NvbnZlcnREYXRhID0gZnVuY3Rpb24gKGRhdGEpIHsKKyAgICBmb3IgKHZhciBvcmlnaW5hbEtleSBpbiBkYXRhKSB7CisgICAgICB2YXIga2V5cyA9IG9yaWdpbmFsS2V5LnNwbGl0KCctJyk7CisKKyAgICAgIHZhciBkYXRhTGV2ZWwgPSBkYXRhOworCisgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKykgeworICAgICAgICB2YXIga2V5ID0ga2V5c1trXTsKKworICAgICAgICAvLyBMb3dlcmNhc2UgdGhlIGZpcnN0IGxldHRlcgorICAgICAgICAvLyBCeSBkZWZhdWx0LCBkYXNoLXNlcGFyYXRlZCBiZWNvbWVzIGNhbWVsQ2FzZQorICAgICAgICBrZXkgPSBrZXkuc3Vic3RyaW5nKDAsIDEpLnRvTG93ZXJDYXNlKCkgKyBrZXkuc3Vic3RyaW5nKDEpOworCisgICAgICAgIGlmICghKGtleSBpbiBkYXRhTGV2ZWwpKSB7CisgICAgICAgICAgZGF0YUxldmVsW2tleV0gPSB7fTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChrID09IGtleXMubGVuZ3RoIC0gMSkgeworICAgICAgICAgIGRhdGFMZXZlbFtrZXldID0gZGF0YVtvcmlnaW5hbEtleV07CisgICAgICAgIH0KKworICAgICAgICBkYXRhTGV2ZWwgPSBkYXRhTGV2ZWxba2V5XTsKKyAgICAgIH0KKworICAgICAgZGVsZXRlIGRhdGFbb3JpZ2luYWxLZXldOworICAgIH0KKworICAgIHJldHVybiBkYXRhOworICB9OworCisgIFV0aWxzLmhhc1Njcm9sbCA9IGZ1bmN0aW9uIChpbmRleCwgZWwpIHsKKyAgICAvLyBBZGFwdGVkIGZyb20gdGhlIGZ1bmN0aW9uIGNyZWF0ZWQgYnkgQFNoYWRvd1NjcmlwdGVyCisgICAgLy8gYW5kIGFkYXB0ZWQgYnkgQEJpbGxCYXJyeSBvbiB0aGUgU3RhY2sgRXhjaGFuZ2UgQ29kZSBSZXZpZXcgd2Vic2l0ZS4KKyAgICAvLyBUaGUgb3JpZ2luYWwgY29kZSBjYW4gYmUgZm91bmQgYXQKKyAgICAvLyBodHRwOi8vY29kZXJldmlldy5zdGFja2V4Y2hhbmdlLmNvbS9xLzEzMzM4CisgICAgLy8gYW5kIHdhcyBkZXNpZ25lZCB0byBiZSB1c2VkIHdpdGggdGhlIFNpenpsZSBzZWxlY3RvciBlbmdpbmUuCisKKyAgICB2YXIgJGVsID0gJChlbCk7CisgICAgdmFyIG92ZXJmbG93WCA9IGVsLnN0eWxlLm92ZXJmbG93WDsKKyAgICB2YXIgb3ZlcmZsb3dZID0gZWwuc3R5bGUub3ZlcmZsb3dZOworCisgICAgLy9DaGVjayBib3RoIHggYW5kIHkgZGVjbGFyYXRpb25zCisgICAgaWYgKG92ZXJmbG93WCA9PT0gb3ZlcmZsb3dZICYmCisgICAgICAgIChvdmVyZmxvd1kgPT09ICdoaWRkZW4nIHx8IG92ZXJmbG93WSA9PT0gJ3Zpc2libGUnKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChvdmVyZmxvd1ggPT09ICdzY3JvbGwnIHx8IG92ZXJmbG93WSA9PT0gJ3Njcm9sbCcpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiAoJGVsLmlubmVySGVpZ2h0KCkgPCBlbC5zY3JvbGxIZWlnaHQgfHwKKyAgICAgICRlbC5pbm5lcldpZHRoKCkgPCBlbC5zY3JvbGxXaWR0aCk7CisgIH07CisKKyAgVXRpbHMuZXNjYXBlTWFya3VwID0gZnVuY3Rpb24gKG1hcmt1cCkgeworICAgIHZhciByZXBsYWNlTWFwID0geworICAgICAgJ1xcJzogJyYjOTI7JywKKyAgICAgICcmJzogJyZhbXA7JywKKyAgICAgICc8JzogJyZsdDsnLAorICAgICAgJz4nOiAnJmd0OycsCisgICAgICAnIic6ICcmcXVvdDsnLAorICAgICAgJ1wnJzogJyYjMzk7JywKKyAgICAgICcvJzogJyYjNDc7JworICAgIH07CisKKyAgICAvLyBEbyBub3QgdHJ5IHRvIGVzY2FwZSB0aGUgbWFya3VwIGlmIGl0J3Mgbm90IGEgc3RyaW5nCisgICAgaWYgKHR5cGVvZiBtYXJrdXAgIT09ICdzdHJpbmcnKSB7CisgICAgICByZXR1cm4gbWFya3VwOworICAgIH0KKworICAgIHJldHVybiBTdHJpbmcobWFya3VwKS5yZXBsYWNlKC9bJjw+IidcL1xcXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHsKKyAgICAgIHJldHVybiByZXBsYWNlTWFwW21hdGNoXTsKKyAgICB9KTsKKyAgfTsKKworICAvLyBBcHBlbmQgYW4gYXJyYXkgb2YgalF1ZXJ5IG5vZGVzIHRvIGEgZ2l2ZW4gZWxlbWVudC4KKyAgVXRpbHMuYXBwZW5kTWFueSA9IGZ1bmN0aW9uICgkZWxlbWVudCwgJG5vZGVzKSB7CisgICAgLy8galF1ZXJ5IDEuNy54IGRvZXMgbm90IHN1cHBvcnQgJC5mbi5hcHBlbmQoKSB3aXRoIGFuIGFycmF5CisgICAgLy8gRmFsbCBiYWNrIHRvIGEgalF1ZXJ5IG9iamVjdCBjb2xsZWN0aW9uIHVzaW5nICQuZm4uYWRkKCkKKyAgICBpZiAoJC5mbi5qcXVlcnkuc3Vic3RyKDAsIDMpID09PSAnMS43JykgeworICAgICAgdmFyICRqcU5vZGVzID0gJCgpOworCisgICAgICAkLm1hcCgkbm9kZXMsIGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICRqcU5vZGVzID0gJGpxTm9kZXMuYWRkKG5vZGUpOworICAgICAgfSk7CisKKyAgICAgICRub2RlcyA9ICRqcU5vZGVzOworICAgIH0KKworICAgICRlbGVtZW50LmFwcGVuZCgkbm9kZXMpOworICB9OworCisgIC8vIENhY2hlIG9iamVjdHMgaW4gVXRpbHMuX19jYWNoZSBpbnN0ZWFkIG9mICQuZGF0YSAoc2VlICM0MzQ2KQorICBVdGlscy5fX2NhY2hlID0ge307CisKKyAgdmFyIGlkID0gMDsKKyAgVXRpbHMuR2V0VW5pcXVlRWxlbWVudElkID0gZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICAvLyBHZXQgYSB1bmlxdWUgZWxlbWVudCBJZC4gSWYgZWxlbWVudCBoYXMgbm8gaWQsIAorICAgIC8vIGNyZWF0ZXMgYSBuZXcgdW5pcXVlIG51bWJlciwgc3RvcmVzIGl0IGluIHRoZSBpZCAKKyAgICAvLyBhdHRyaWJ1dGUgYW5kIHJldHVybnMgdGhlIG5ldyBpZC4gCisgICAgLy8gSWYgYW4gaWQgYWxyZWFkeSBleGlzdHMsIGl0IHNpbXBseSByZXR1cm5zIGl0LgorCisgICAgdmFyIHNlbGVjdDJJZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXNlbGVjdDItaWQnKTsKKyAgICBpZiAoc2VsZWN0MklkID09IG51bGwpIHsKKyAgICAgIC8vIElmIGVsZW1lbnQgaGFzIGlkLCB1c2UgaXQuCisgICAgICBpZiAoZWxlbWVudC5pZCkgeworICAgICAgICBzZWxlY3QySWQgPSBlbGVtZW50LmlkOworICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1zZWxlY3QyLWlkJywgc2VsZWN0MklkKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXNlbGVjdDItaWQnLCArK2lkKTsKKyAgICAgICAgc2VsZWN0MklkID0gaWQudG9TdHJpbmcoKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHNlbGVjdDJJZDsKKyAgfTsKKworICBVdGlscy5TdG9yZURhdGEgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHsKKyAgICAvLyBTdG9yZXMgYW4gaXRlbSBpbiB0aGUgY2FjaGUgZm9yIGEgc3BlY2lmaWVkIGVsZW1lbnQuCisgICAgLy8gbmFtZSBpcyB0aGUgY2FjaGUga2V5LiAgICAKKyAgICB2YXIgaWQgPSBVdGlscy5HZXRVbmlxdWVFbGVtZW50SWQoZWxlbWVudCk7CisgICAgaWYgKCFVdGlscy5fX2NhY2hlW2lkXSkgeworICAgICAgVXRpbHMuX19jYWNoZVtpZF0gPSB7fTsKKyAgICB9CisKKyAgICBVdGlscy5fX2NhY2hlW2lkXVtuYW1lXSA9IHZhbHVlOworICB9OworCisgIFV0aWxzLkdldERhdGEgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZSkgeworICAgIC8vIFJldHJpZXZlcyBhIHZhbHVlIGZyb20gdGhlIGNhY2hlIGJ5IGl0cyBrZXkgKG5hbWUpCisgICAgLy8gbmFtZSBpcyBvcHRpb25hbC4gSWYgbm8gbmFtZSBzcGVjaWZpZWQsIHJldHVybiAKKyAgICAvLyBhbGwgY2FjaGUgaXRlbXMgZm9yIHRoZSBzcGVjaWZpZWQgZWxlbWVudC4KKyAgICAvLyBhbmQgZm9yIGEgc3BlY2lmaWVkIGVsZW1lbnQuCisgICAgdmFyIGlkID0gVXRpbHMuR2V0VW5pcXVlRWxlbWVudElkKGVsZW1lbnQpOworICAgIGlmIChuYW1lKSB7CisgICAgICBpZiAoVXRpbHMuX19jYWNoZVtpZF0pIHsKKyAgICAgICAgcmV0dXJuIFV0aWxzLl9fY2FjaGVbaWRdW25hbWVdICE9IG51bGwgPyAKKwkgICAgICBVdGlscy5fX2NhY2hlW2lkXVtuYW1lXToKKwkgICAgICAkKGVsZW1lbnQpLmRhdGEobmFtZSk7IC8vIEZhbGxiYWNrIHRvIEhUTUw1IGRhdGEgYXR0cmlicy4KKyAgICAgIH0KKyAgICAgIHJldHVybiAkKGVsZW1lbnQpLmRhdGEobmFtZSk7IC8vIEZhbGxiYWNrIHRvIEhUTUw1IGRhdGEgYXR0cmlicy4KKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIFV0aWxzLl9fY2FjaGVbaWRdOwkJCSAgIAorICAgIH0KKyAgfTsKKworICBVdGlscy5SZW1vdmVEYXRhID0gZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICAvLyBSZW1vdmVzIGFsbCBjYWNoZWQgaXRlbXMgZm9yIGEgc3BlY2lmaWVkIGVsZW1lbnQuCisgICAgdmFyIGlkID0gVXRpbHMuR2V0VW5pcXVlRWxlbWVudElkKGVsZW1lbnQpOworICAgIGlmIChVdGlscy5fX2NhY2hlW2lkXSAhPSBudWxsKSB7CisgICAgICBkZWxldGUgVXRpbHMuX19jYWNoZVtpZF07CisgICAgfQorICB9OworCisgIHJldHVybiBVdGlsczsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvcmVzdWx0cycsWworICAnanF1ZXJ5JywKKyAgJy4vdXRpbHMnCitdLCBmdW5jdGlvbiAoJCwgVXRpbHMpIHsKKyAgZnVuY3Rpb24gUmVzdWx0cyAoJGVsZW1lbnQsIG9wdGlvbnMsIGRhdGFBZGFwdGVyKSB7CisgICAgdGhpcy4kZWxlbWVudCA9ICRlbGVtZW50OworICAgIHRoaXMuZGF0YSA9IGRhdGFBZGFwdGVyOworICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CisKKyAgICBSZXN1bHRzLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpOworICB9CisKKyAgVXRpbHMuRXh0ZW5kKFJlc3VsdHMsIFV0aWxzLk9ic2VydmFibGUpOworCisgIFJlc3VsdHMucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgJHJlc3VsdHMgPSAkKAorICAgICAgJzx1bCBjbGFzcz0ic2VsZWN0Mi1yZXN1bHRzX19vcHRpb25zIiByb2xlPSJ0cmVlIj48L3VsPicKKyAgICApOworCisgICAgaWYgKHRoaXMub3B0aW9ucy5nZXQoJ211bHRpcGxlJykpIHsKKyAgICAgICRyZXN1bHRzLmF0dHIoJ2FyaWEtbXVsdGlzZWxlY3RhYmxlJywgJ3RydWUnKTsKKyAgICB9CisKKyAgICB0aGlzLiRyZXN1bHRzID0gJHJlc3VsdHM7CisKKyAgICByZXR1cm4gJHJlc3VsdHM7CisgIH07CisKKyAgUmVzdWx0cy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy4kcmVzdWx0cy5lbXB0eSgpOworICB9OworCisgIFJlc3VsdHMucHJvdG90eXBlLmRpc3BsYXlNZXNzYWdlID0gZnVuY3Rpb24gKHBhcmFtcykgeworICAgIHZhciBlc2NhcGVNYXJrdXAgPSB0aGlzLm9wdGlvbnMuZ2V0KCdlc2NhcGVNYXJrdXAnKTsKKworICAgIHRoaXMuY2xlYXIoKTsKKyAgICB0aGlzLmhpZGVMb2FkaW5nKCk7CisKKyAgICB2YXIgJG1lc3NhZ2UgPSAkKAorICAgICAgJzxsaSByb2xlPSJ0cmVlaXRlbSIgYXJpYS1saXZlPSJhc3NlcnRpdmUiJyArCisgICAgICAnIGNsYXNzPSJzZWxlY3QyLXJlc3VsdHNfX29wdGlvbiI+PC9saT4nCisgICAgKTsKKworICAgIHZhciBtZXNzYWdlID0gdGhpcy5vcHRpb25zLmdldCgndHJhbnNsYXRpb25zJykuZ2V0KHBhcmFtcy5tZXNzYWdlKTsKKworICAgICRtZXNzYWdlLmFwcGVuZCgKKyAgICAgIGVzY2FwZU1hcmt1cCgKKyAgICAgICAgbWVzc2FnZShwYXJhbXMuYXJncykKKyAgICAgICkKKyAgICApOworCisgICAgJG1lc3NhZ2VbMF0uY2xhc3NOYW1lICs9ICcgc2VsZWN0Mi1yZXN1bHRzX19tZXNzYWdlJzsKKworICAgIHRoaXMuJHJlc3VsdHMuYXBwZW5kKCRtZXNzYWdlKTsKKyAgfTsKKworICBSZXN1bHRzLnByb3RvdHlwZS5oaWRlTWVzc2FnZXMgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy4kcmVzdWx0cy5maW5kKCcuc2VsZWN0Mi1yZXN1bHRzX19tZXNzYWdlJykucmVtb3ZlKCk7CisgIH07CisKKyAgUmVzdWx0cy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKGRhdGEpIHsKKyAgICB0aGlzLmhpZGVMb2FkaW5nKCk7CisKKyAgICB2YXIgJG9wdGlvbnMgPSBbXTsKKworICAgIGlmIChkYXRhLnJlc3VsdHMgPT0gbnVsbCB8fCBkYXRhLnJlc3VsdHMubGVuZ3RoID09PSAwKSB7CisgICAgICBpZiAodGhpcy4kcmVzdWx0cy5jaGlsZHJlbigpLmxlbmd0aCA9PT0gMCkgeworICAgICAgICB0aGlzLnRyaWdnZXIoJ3Jlc3VsdHM6bWVzc2FnZScsIHsKKyAgICAgICAgICBtZXNzYWdlOiAnbm9SZXN1bHRzJworICAgICAgICB9KTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRhdGEucmVzdWx0cyA9IHRoaXMuc29ydChkYXRhLnJlc3VsdHMpOworCisgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkYXRhLnJlc3VsdHMubGVuZ3RoOyBkKyspIHsKKyAgICAgIHZhciBpdGVtID0gZGF0YS5yZXN1bHRzW2RdOworCisgICAgICB2YXIgJG9wdGlvbiA9IHRoaXMub3B0aW9uKGl0ZW0pOworCisgICAgICAkb3B0aW9ucy5wdXNoKCRvcHRpb24pOworICAgIH0KKworICAgIHRoaXMuJHJlc3VsdHMuYXBwZW5kKCRvcHRpb25zKTsKKyAgfTsKKworICBSZXN1bHRzLnByb3RvdHlwZS5wb3NpdGlvbiA9IGZ1bmN0aW9uICgkcmVzdWx0cywgJGRyb3Bkb3duKSB7CisgICAgdmFyICRyZXN1bHRzQ29udGFpbmVyID0gJGRyb3Bkb3duLmZpbmQoJy5zZWxlY3QyLXJlc3VsdHMnKTsKKyAgICAkcmVzdWx0c0NvbnRhaW5lci5hcHBlbmQoJHJlc3VsdHMpOworICB9OworCisgIFJlc3VsdHMucHJvdG90eXBlLnNvcnQgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgIHZhciBzb3J0ZXIgPSB0aGlzLm9wdGlvbnMuZ2V0KCdzb3J0ZXInKTsKKworICAgIHJldHVybiBzb3J0ZXIoZGF0YSk7CisgIH07CisKKyAgUmVzdWx0cy5wcm90b3R5cGUuaGlnaGxpZ2h0Rmlyc3RJdGVtID0gZnVuY3Rpb24gKCkgeworICAgIHZhciAkb3B0aW9ucyA9IHRoaXMuJHJlc3VsdHMKKyAgICAgIC5maW5kKCcuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25bYXJpYS1zZWxlY3RlZF0nKTsKKworICAgIHZhciAkc2VsZWN0ZWQgPSAkb3B0aW9ucy5maWx0ZXIoJ1thcmlhLXNlbGVjdGVkPXRydWVdJyk7CisKKyAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNlbGVjdGVkIG9wdGlvbnMKKyAgICBpZiAoJHNlbGVjdGVkLmxlbmd0aCA+IDApIHsKKyAgICAgIC8vIElmIHRoZXJlIGFyZSBzZWxlY3RlZCBvcHRpb25zLCBoaWdobGlnaHQgdGhlIGZpcnN0CisgICAgICAkc2VsZWN0ZWQuZmlyc3QoKS50cmlnZ2VyKCdtb3VzZWVudGVyJyk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBzZWxlY3RlZCBvcHRpb25zLCBoaWdobGlnaHQgdGhlIGZpcnN0IG9wdGlvbgorICAgICAgLy8gaW4gdGhlIGRyb3Bkb3duCisgICAgICAkb3B0aW9ucy5maXJzdCgpLnRyaWdnZXIoJ21vdXNlZW50ZXInKTsKKyAgICB9CisKKyAgICB0aGlzLmVuc3VyZUhpZ2hsaWdodFZpc2libGUoKTsKKyAgfTsKKworICBSZXN1bHRzLnByb3RvdHlwZS5zZXRDbGFzc2VzID0gZnVuY3Rpb24gKCkgeworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIHRoaXMuZGF0YS5jdXJyZW50KGZ1bmN0aW9uIChzZWxlY3RlZCkgeworICAgICAgdmFyIHNlbGVjdGVkSWRzID0gJC5tYXAoc2VsZWN0ZWQsIGZ1bmN0aW9uIChzKSB7CisgICAgICAgIHJldHVybiBzLmlkLnRvU3RyaW5nKCk7CisgICAgICB9KTsKKworICAgICAgdmFyICRvcHRpb25zID0gc2VsZi4kcmVzdWx0cworICAgICAgICAuZmluZCgnLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdJyk7CisKKyAgICAgICRvcHRpb25zLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgJG9wdGlvbiA9ICQodGhpcyk7CisKKyAgICAgICAgdmFyIGl0ZW0gPSBVdGlscy5HZXREYXRhKHRoaXMsICdkYXRhJyk7CisKKyAgICAgICAgLy8gaWQgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIHdoZW4gY29tcGFyaW5nCisgICAgICAgIHZhciBpZCA9ICcnICsgaXRlbS5pZDsKKworICAgICAgICBpZiAoKGl0ZW0uZWxlbWVudCAhPSBudWxsICYmIGl0ZW0uZWxlbWVudC5zZWxlY3RlZCkgfHwKKyAgICAgICAgICAgIChpdGVtLmVsZW1lbnQgPT0gbnVsbCAmJiAkLmluQXJyYXkoaWQsIHNlbGVjdGVkSWRzKSA+IC0xKSkgeworICAgICAgICAgICRvcHRpb24uYXR0cignYXJpYS1zZWxlY3RlZCcsICd0cnVlJyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgJG9wdGlvbi5hdHRyKCdhcmlhLXNlbGVjdGVkJywgJ2ZhbHNlJyk7CisgICAgICAgIH0KKyAgICAgIH0pOworCisgICAgfSk7CisgIH07CisKKyAgUmVzdWx0cy5wcm90b3R5cGUuc2hvd0xvYWRpbmcgPSBmdW5jdGlvbiAocGFyYW1zKSB7CisgICAgdGhpcy5oaWRlTG9hZGluZygpOworCisgICAgdmFyIGxvYWRpbmdNb3JlID0gdGhpcy5vcHRpb25zLmdldCgndHJhbnNsYXRpb25zJykuZ2V0KCdzZWFyY2hpbmcnKTsKKworICAgIHZhciBsb2FkaW5nID0geworICAgICAgZGlzYWJsZWQ6IHRydWUsCisgICAgICBsb2FkaW5nOiB0cnVlLAorICAgICAgdGV4dDogbG9hZGluZ01vcmUocGFyYW1zKQorICAgIH07CisgICAgdmFyICRsb2FkaW5nID0gdGhpcy5vcHRpb24obG9hZGluZyk7CisgICAgJGxvYWRpbmcuY2xhc3NOYW1lICs9ICcgbG9hZGluZy1yZXN1bHRzJzsKKworICAgIHRoaXMuJHJlc3VsdHMucHJlcGVuZCgkbG9hZGluZyk7CisgIH07CisKKyAgUmVzdWx0cy5wcm90b3R5cGUuaGlkZUxvYWRpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy4kcmVzdWx0cy5maW5kKCcubG9hZGluZy1yZXN1bHRzJykucmVtb3ZlKCk7CisgIH07CisKKyAgUmVzdWx0cy5wcm90b3R5cGUub3B0aW9uID0gZnVuY3Rpb24gKGRhdGEpIHsKKyAgICB2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTsKKyAgICBvcHRpb24uY2xhc3NOYW1lID0gJ3NlbGVjdDItcmVzdWx0c19fb3B0aW9uJzsKKworICAgIHZhciBhdHRycyA9IHsKKyAgICAgICdyb2xlJzogJ3RyZWVpdGVtJywKKyAgICAgICdhcmlhLXNlbGVjdGVkJzogJ2ZhbHNlJworICAgIH07CisKKyAgICBpZiAoZGF0YS5kaXNhYmxlZCkgeworICAgICAgZGVsZXRlIGF0dHJzWydhcmlhLXNlbGVjdGVkJ107CisgICAgICBhdHRyc1snYXJpYS1kaXNhYmxlZCddID0gJ3RydWUnOworICAgIH0KKworICAgIGlmIChkYXRhLmlkID09IG51bGwpIHsKKyAgICAgIGRlbGV0ZSBhdHRyc1snYXJpYS1zZWxlY3RlZCddOworICAgIH0KKworICAgIGlmIChkYXRhLl9yZXN1bHRJZCAhPSBudWxsKSB7CisgICAgICBvcHRpb24uaWQgPSBkYXRhLl9yZXN1bHRJZDsKKyAgICB9CisKKyAgICBpZiAoZGF0YS50aXRsZSkgeworICAgICAgb3B0aW9uLnRpdGxlID0gZGF0YS50aXRsZTsKKyAgICB9CisKKyAgICBpZiAoZGF0YS5jaGlsZHJlbikgeworICAgICAgYXR0cnMucm9sZSA9ICdncm91cCc7CisgICAgICBhdHRyc1snYXJpYS1sYWJlbCddID0gZGF0YS50ZXh0OworICAgICAgZGVsZXRlIGF0dHJzWydhcmlhLXNlbGVjdGVkJ107CisgICAgfQorCisgICAgZm9yICh2YXIgYXR0ciBpbiBhdHRycykgeworICAgICAgdmFyIHZhbCA9IGF0dHJzW2F0dHJdOworCisgICAgICBvcHRpb24uc2V0QXR0cmlidXRlKGF0dHIsIHZhbCk7CisgICAgfQorCisgICAgaWYgKGRhdGEuY2hpbGRyZW4pIHsKKyAgICAgIHZhciAkb3B0aW9uID0gJChvcHRpb24pOworCisgICAgICB2YXIgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHJvbmcnKTsKKyAgICAgIGxhYmVsLmNsYXNzTmFtZSA9ICdzZWxlY3QyLXJlc3VsdHNfX2dyb3VwJzsKKworICAgICAgdmFyICRsYWJlbCA9ICQobGFiZWwpOworICAgICAgdGhpcy50ZW1wbGF0ZShkYXRhLCBsYWJlbCk7CisKKyAgICAgIHZhciAkY2hpbGRyZW4gPSBbXTsKKworICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBkYXRhLmNoaWxkcmVuLmxlbmd0aDsgYysrKSB7CisgICAgICAgIHZhciBjaGlsZCA9IGRhdGEuY2hpbGRyZW5bY107CisKKyAgICAgICAgdmFyICRjaGlsZCA9IHRoaXMub3B0aW9uKGNoaWxkKTsKKworICAgICAgICAkY2hpbGRyZW4ucHVzaCgkY2hpbGQpOworICAgICAgfQorCisgICAgICB2YXIgJGNoaWxkcmVuQ29udGFpbmVyID0gJCgnPHVsPjwvdWw+JywgeworICAgICAgICAnY2xhc3MnOiAnc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25zIHNlbGVjdDItcmVzdWx0c19fb3B0aW9ucy0tbmVzdGVkJworICAgICAgfSk7CisKKyAgICAgICRjaGlsZHJlbkNvbnRhaW5lci5hcHBlbmQoJGNoaWxkcmVuKTsKKworICAgICAgJG9wdGlvbi5hcHBlbmQobGFiZWwpOworICAgICAgJG9wdGlvbi5hcHBlbmQoJGNoaWxkcmVuQ29udGFpbmVyKTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy50ZW1wbGF0ZShkYXRhLCBvcHRpb24pOworICAgIH0KKworICAgIFV0aWxzLlN0b3JlRGF0YShvcHRpb24sICdkYXRhJywgZGF0YSk7CisKKyAgICByZXR1cm4gb3B0aW9uOworICB9OworCisgIFJlc3VsdHMucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoY29udGFpbmVyLCAkY29udGFpbmVyKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgdmFyIGlkID0gY29udGFpbmVyLmlkICsgJy1yZXN1bHRzJzsKKworICAgIHRoaXMuJHJlc3VsdHMuYXR0cignaWQnLCBpZCk7CisKKyAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6YWxsJywgZnVuY3Rpb24gKHBhcmFtcykgeworICAgICAgc2VsZi5jbGVhcigpOworICAgICAgc2VsZi5hcHBlbmQocGFyYW1zLmRhdGEpOworCisgICAgICBpZiAoY29udGFpbmVyLmlzT3BlbigpKSB7CisgICAgICAgIHNlbGYuc2V0Q2xhc3NlcygpOworICAgICAgICBzZWxmLmhpZ2hsaWdodEZpcnN0SXRlbSgpOworICAgICAgfQorICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCdyZXN1bHRzOmFwcGVuZCcsIGZ1bmN0aW9uIChwYXJhbXMpIHsKKyAgICAgIHNlbGYuYXBwZW5kKHBhcmFtcy5kYXRhKTsKKworICAgICAgaWYgKGNvbnRhaW5lci5pc09wZW4oKSkgeworICAgICAgICBzZWxmLnNldENsYXNzZXMoKTsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbigncXVlcnknLCBmdW5jdGlvbiAocGFyYW1zKSB7CisgICAgICBzZWxmLmhpZGVNZXNzYWdlcygpOworICAgICAgc2VsZi5zaG93TG9hZGluZyhwYXJhbXMpOworICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCdzZWxlY3QnLCBmdW5jdGlvbiAoKSB7CisgICAgICBpZiAoIWNvbnRhaW5lci5pc09wZW4oKSkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHNlbGYuc2V0Q2xhc3NlcygpOworICAgICAgc2VsZi5oaWdobGlnaHRGaXJzdEl0ZW0oKTsKKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbigndW5zZWxlY3QnLCBmdW5jdGlvbiAoKSB7CisgICAgICBpZiAoIWNvbnRhaW5lci5pc09wZW4oKSkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHNlbGYuc2V0Q2xhc3NlcygpOworICAgICAgc2VsZi5oaWdobGlnaHRGaXJzdEl0ZW0oKTsKKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbignb3BlbicsIGZ1bmN0aW9uICgpIHsKKyAgICAgIC8vIFdoZW4gdGhlIGRyb3Bkb3duIGlzIG9wZW4sIGFyaWEtZXhwZW5kZWQ9InRydWUiCisgICAgICBzZWxmLiRyZXN1bHRzLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpOworICAgICAgc2VsZi4kcmVzdWx0cy5hdHRyKCdhcmlhLWhpZGRlbicsICdmYWxzZScpOworCisgICAgICBzZWxmLnNldENsYXNzZXMoKTsKKyAgICAgIHNlbGYuZW5zdXJlSGlnaGxpZ2h0VmlzaWJsZSgpOworICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIC8vIFdoZW4gdGhlIGRyb3Bkb3duIGlzIGNsb3NlZCwgYXJpYS1leHBlbmRlZD0iZmFsc2UiCisgICAgICBzZWxmLiRyZXN1bHRzLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTsKKyAgICAgIHNlbGYuJHJlc3VsdHMuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpOworICAgICAgc2VsZi4kcmVzdWx0cy5yZW1vdmVBdHRyKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKTsKKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbigncmVzdWx0czp0b2dnbGUnLCBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgJGhpZ2hsaWdodGVkID0gc2VsZi5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKTsKKworICAgICAgaWYgKCRoaWdobGlnaHRlZC5sZW5ndGggPT09IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICAkaGlnaGxpZ2h0ZWQudHJpZ2dlcignbW91c2V1cCcpOworICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCdyZXN1bHRzOnNlbGVjdCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkaGlnaGxpZ2h0ZWQgPSBzZWxmLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpOworCisgICAgICBpZiAoJGhpZ2hsaWdodGVkLmxlbmd0aCA9PT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHZhciBkYXRhID0gVXRpbHMuR2V0RGF0YSgkaGlnaGxpZ2h0ZWRbMF0sICdkYXRhJyk7CisKKyAgICAgIGlmICgkaGlnaGxpZ2h0ZWQuYXR0cignYXJpYS1zZWxlY3RlZCcpID09ICd0cnVlJykgeworICAgICAgICBzZWxmLnRyaWdnZXIoJ2Nsb3NlJywge30pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc2VsZi50cmlnZ2VyKCdzZWxlY3QnLCB7CisgICAgICAgICAgZGF0YTogZGF0YQorICAgICAgICB9KTsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbigncmVzdWx0czpwcmV2aW91cycsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkaGlnaGxpZ2h0ZWQgPSBzZWxmLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpOworCisgICAgICB2YXIgJG9wdGlvbnMgPSBzZWxmLiRyZXN1bHRzLmZpbmQoJ1thcmlhLXNlbGVjdGVkXScpOworCisgICAgICB2YXIgY3VycmVudEluZGV4ID0gJG9wdGlvbnMuaW5kZXgoJGhpZ2hsaWdodGVkKTsKKworICAgICAgLy8gSWYgd2UgYXJlIGFscmVhZHkgYXQgdGUgdG9wLCBkb24ndCBtb3ZlIGZ1cnRoZXIKKyAgICAgIC8vIElmIG5vIG9wdGlvbnMsIGN1cnJlbnRJbmRleCB3aWxsIGJlIC0xCisgICAgICBpZiAoY3VycmVudEluZGV4IDw9IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICB2YXIgbmV4dEluZGV4ID0gY3VycmVudEluZGV4IC0gMTsKKworICAgICAgLy8gSWYgbm9uZSBhcmUgaGlnaGxpZ2h0ZWQsIGhpZ2hsaWdodCB0aGUgZmlyc3QKKyAgICAgIGlmICgkaGlnaGxpZ2h0ZWQubGVuZ3RoID09PSAwKSB7CisgICAgICAgIG5leHRJbmRleCA9IDA7CisgICAgICB9CisKKyAgICAgIHZhciAkbmV4dCA9ICRvcHRpb25zLmVxKG5leHRJbmRleCk7CisKKyAgICAgICRuZXh0LnRyaWdnZXIoJ21vdXNlZW50ZXInKTsKKworICAgICAgdmFyIGN1cnJlbnRPZmZzZXQgPSBzZWxmLiRyZXN1bHRzLm9mZnNldCgpLnRvcDsKKyAgICAgIHZhciBuZXh0VG9wID0gJG5leHQub2Zmc2V0KCkudG9wOworICAgICAgdmFyIG5leHRPZmZzZXQgPSBzZWxmLiRyZXN1bHRzLnNjcm9sbFRvcCgpICsgKG5leHRUb3AgLSBjdXJyZW50T2Zmc2V0KTsKKworICAgICAgaWYgKG5leHRJbmRleCA9PT0gMCkgeworICAgICAgICBzZWxmLiRyZXN1bHRzLnNjcm9sbFRvcCgwKTsKKyAgICAgIH0gZWxzZSBpZiAobmV4dFRvcCAtIGN1cnJlbnRPZmZzZXQgPCAwKSB7CisgICAgICAgIHNlbGYuJHJlc3VsdHMuc2Nyb2xsVG9wKG5leHRPZmZzZXQpOworICAgICAgfQorICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCdyZXN1bHRzOm5leHQnLCBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgJGhpZ2hsaWdodGVkID0gc2VsZi5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKTsKKworICAgICAgdmFyICRvcHRpb25zID0gc2VsZi4kcmVzdWx0cy5maW5kKCdbYXJpYS1zZWxlY3RlZF0nKTsKKworICAgICAgdmFyIGN1cnJlbnRJbmRleCA9ICRvcHRpb25zLmluZGV4KCRoaWdobGlnaHRlZCk7CisKKyAgICAgIHZhciBuZXh0SW5kZXggPSBjdXJyZW50SW5kZXggKyAxOworCisgICAgICAvLyBJZiB3ZSBhcmUgYXQgdGhlIGxhc3Qgb3B0aW9uLCBzdGF5IHRoZXJlCisgICAgICBpZiAobmV4dEluZGV4ID49ICRvcHRpb25zLmxlbmd0aCkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHZhciAkbmV4dCA9ICRvcHRpb25zLmVxKG5leHRJbmRleCk7CisKKyAgICAgICRuZXh0LnRyaWdnZXIoJ21vdXNlZW50ZXInKTsKKworICAgICAgdmFyIGN1cnJlbnRPZmZzZXQgPSBzZWxmLiRyZXN1bHRzLm9mZnNldCgpLnRvcCArCisgICAgICAgIHNlbGYuJHJlc3VsdHMub3V0ZXJIZWlnaHQoZmFsc2UpOworICAgICAgdmFyIG5leHRCb3R0b20gPSAkbmV4dC5vZmZzZXQoKS50b3AgKyAkbmV4dC5vdXRlckhlaWdodChmYWxzZSk7CisgICAgICB2YXIgbmV4dE9mZnNldCA9IHNlbGYuJHJlc3VsdHMuc2Nyb2xsVG9wKCkgKyBuZXh0Qm90dG9tIC0gY3VycmVudE9mZnNldDsKKworICAgICAgaWYgKG5leHRJbmRleCA9PT0gMCkgeworICAgICAgICBzZWxmLiRyZXN1bHRzLnNjcm9sbFRvcCgwKTsKKyAgICAgIH0gZWxzZSBpZiAobmV4dEJvdHRvbSA+IGN1cnJlbnRPZmZzZXQpIHsKKyAgICAgICAgc2VsZi4kcmVzdWx0cy5zY3JvbGxUb3AobmV4dE9mZnNldCk7CisgICAgICB9CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6Zm9jdXMnLCBmdW5jdGlvbiAocGFyYW1zKSB7CisgICAgICBwYXJhbXMuZWxlbWVudC5hZGRDbGFzcygnc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWhpZ2hsaWdodGVkJyk7CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6bWVzc2FnZScsIGZ1bmN0aW9uIChwYXJhbXMpIHsKKyAgICAgIHNlbGYuZGlzcGxheU1lc3NhZ2UocGFyYW1zKTsKKyAgICB9KTsKKworICAgIGlmICgkLmZuLm1vdXNld2hlZWwpIHsKKyAgICAgIHRoaXMuJHJlc3VsdHMub24oJ21vdXNld2hlZWwnLCBmdW5jdGlvbiAoZSkgeworICAgICAgICB2YXIgdG9wID0gc2VsZi4kcmVzdWx0cy5zY3JvbGxUb3AoKTsKKworICAgICAgICB2YXIgYm90dG9tID0gc2VsZi4kcmVzdWx0cy5nZXQoMCkuc2Nyb2xsSGVpZ2h0IC0gdG9wICsgZS5kZWx0YVk7CisKKyAgICAgICAgdmFyIGlzQXRUb3AgPSBlLmRlbHRhWSA+IDAgJiYgdG9wIC0gZS5kZWx0YVkgPD0gMDsKKyAgICAgICAgdmFyIGlzQXRCb3R0b20gPSBlLmRlbHRhWSA8IDAgJiYgYm90dG9tIDw9IHNlbGYuJHJlc3VsdHMuaGVpZ2h0KCk7CisKKyAgICAgICAgaWYgKGlzQXRUb3ApIHsKKyAgICAgICAgICBzZWxmLiRyZXN1bHRzLnNjcm9sbFRvcCgwKTsKKworICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICB9IGVsc2UgaWYgKGlzQXRCb3R0b20pIHsKKyAgICAgICAgICBzZWxmLiRyZXN1bHRzLnNjcm9sbFRvcCgKKyAgICAgICAgICAgIHNlbGYuJHJlc3VsdHMuZ2V0KDApLnNjcm9sbEhlaWdodCAtIHNlbGYuJHJlc3VsdHMuaGVpZ2h0KCkKKyAgICAgICAgICApOworCisgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIHRoaXMuJHJlc3VsdHMub24oJ21vdXNldXAnLCAnLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdJywKKyAgICAgIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7CisKKyAgICAgIHZhciBkYXRhID0gVXRpbHMuR2V0RGF0YSh0aGlzLCAnZGF0YScpOworCisgICAgICBpZiAoJHRoaXMuYXR0cignYXJpYS1zZWxlY3RlZCcpID09PSAndHJ1ZScpIHsKKyAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5nZXQoJ211bHRpcGxlJykpIHsKKyAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3Vuc2VsZWN0JywgeworICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0LAorICAgICAgICAgICAgZGF0YTogZGF0YQorICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHNlbGYudHJpZ2dlcignY2xvc2UnLCB7fSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHNlbGYudHJpZ2dlcignc2VsZWN0JywgeworICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnQsCisgICAgICAgIGRhdGE6IGRhdGEKKyAgICAgIH0pOworICAgIH0pOworCisgICAgdGhpcy4kcmVzdWx0cy5vbignbW91c2VlbnRlcicsICcuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25bYXJpYS1zZWxlY3RlZF0nLAorICAgICAgZnVuY3Rpb24gKGV2dCkgeworICAgICAgdmFyIGRhdGEgPSBVdGlscy5HZXREYXRhKHRoaXMsICdkYXRhJyk7CisKKyAgICAgIHNlbGYuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCkKKyAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1oaWdobGlnaHRlZCcpOworCisgICAgICBzZWxmLnRyaWdnZXIoJ3Jlc3VsdHM6Zm9jdXMnLCB7CisgICAgICAgIGRhdGE6IGRhdGEsCisgICAgICAgIGVsZW1lbnQ6ICQodGhpcykKKyAgICAgIH0pOworICAgIH0pOworICB9OworCisgIFJlc3VsdHMucHJvdG90eXBlLmdldEhpZ2hsaWdodGVkUmVzdWx0cyA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgJGhpZ2hsaWdodGVkID0gdGhpcy4kcmVzdWx0cworICAgIC5maW5kKCcuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWhpZ2hsaWdodGVkJyk7CisKKyAgICByZXR1cm4gJGhpZ2hsaWdodGVkOworICB9OworCisgIFJlc3VsdHMucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy4kcmVzdWx0cy5yZW1vdmUoKTsKKyAgfTsKKworICBSZXN1bHRzLnByb3RvdHlwZS5lbnN1cmVIaWdobGlnaHRWaXNpYmxlID0gZnVuY3Rpb24gKCkgeworICAgIHZhciAkaGlnaGxpZ2h0ZWQgPSB0aGlzLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpOworCisgICAgaWYgKCRoaWdobGlnaHRlZC5sZW5ndGggPT09IDApIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgJG9wdGlvbnMgPSB0aGlzLiRyZXN1bHRzLmZpbmQoJ1thcmlhLXNlbGVjdGVkXScpOworCisgICAgdmFyIGN1cnJlbnRJbmRleCA9ICRvcHRpb25zLmluZGV4KCRoaWdobGlnaHRlZCk7CisKKyAgICB2YXIgY3VycmVudE9mZnNldCA9IHRoaXMuJHJlc3VsdHMub2Zmc2V0KCkudG9wOworICAgIHZhciBuZXh0VG9wID0gJGhpZ2hsaWdodGVkLm9mZnNldCgpLnRvcDsKKyAgICB2YXIgbmV4dE9mZnNldCA9IHRoaXMuJHJlc3VsdHMuc2Nyb2xsVG9wKCkgKyAobmV4dFRvcCAtIGN1cnJlbnRPZmZzZXQpOworCisgICAgdmFyIG9mZnNldERlbHRhID0gbmV4dFRvcCAtIGN1cnJlbnRPZmZzZXQ7CisgICAgbmV4dE9mZnNldCAtPSAkaGlnaGxpZ2h0ZWQub3V0ZXJIZWlnaHQoZmFsc2UpICogMjsKKworICAgIGlmIChjdXJyZW50SW5kZXggPD0gMikgeworICAgICAgdGhpcy4kcmVzdWx0cy5zY3JvbGxUb3AoMCk7CisgICAgfSBlbHNlIGlmIChvZmZzZXREZWx0YSA+IHRoaXMuJHJlc3VsdHMub3V0ZXJIZWlnaHQoKSB8fCBvZmZzZXREZWx0YSA8IDApIHsKKyAgICAgIHRoaXMuJHJlc3VsdHMuc2Nyb2xsVG9wKG5leHRPZmZzZXQpOworICAgIH0KKyAgfTsKKworICBSZXN1bHRzLnByb3RvdHlwZS50ZW1wbGF0ZSA9IGZ1bmN0aW9uIChyZXN1bHQsIGNvbnRhaW5lcikgeworICAgIHZhciB0ZW1wbGF0ZSA9IHRoaXMub3B0aW9ucy5nZXQoJ3RlbXBsYXRlUmVzdWx0Jyk7CisgICAgdmFyIGVzY2FwZU1hcmt1cCA9IHRoaXMub3B0aW9ucy5nZXQoJ2VzY2FwZU1hcmt1cCcpOworCisgICAgdmFyIGNvbnRlbnQgPSB0ZW1wbGF0ZShyZXN1bHQsIGNvbnRhaW5lcik7CisKKyAgICBpZiAoY29udGVudCA9PSBudWxsKSB7CisgICAgICBjb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgeworICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGVzY2FwZU1hcmt1cChjb250ZW50KTsKKyAgICB9IGVsc2UgeworICAgICAgJChjb250YWluZXIpLmFwcGVuZChjb250ZW50KTsKKyAgICB9CisgIH07CisKKyAgcmV0dXJuIFJlc3VsdHM7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2tleXMnLFsKKworXSwgZnVuY3Rpb24gKCkgeworICB2YXIgS0VZUyA9IHsKKyAgICBCQUNLU1BBQ0U6IDgsCisgICAgVEFCOiA5LAorICAgIEVOVEVSOiAxMywKKyAgICBTSElGVDogMTYsCisgICAgQ1RSTDogMTcsCisgICAgQUxUOiAxOCwKKyAgICBFU0M6IDI3LAorICAgIFNQQUNFOiAzMiwKKyAgICBQQUdFX1VQOiAzMywKKyAgICBQQUdFX0RPV046IDM0LAorICAgIEVORDogMzUsCisgICAgSE9NRTogMzYsCisgICAgTEVGVDogMzcsCisgICAgVVA6IDM4LAorICAgIFJJR0hUOiAzOSwKKyAgICBET1dOOiA0MCwKKyAgICBERUxFVEU6IDQ2CisgIH07CisKKyAgcmV0dXJuIEtFWVM7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL3NlbGVjdGlvbi9iYXNlJyxbCisgICdqcXVlcnknLAorICAnLi4vdXRpbHMnLAorICAnLi4va2V5cycKK10sIGZ1bmN0aW9uICgkLCBVdGlscywgS0VZUykgeworICBmdW5jdGlvbiBCYXNlU2VsZWN0aW9uICgkZWxlbWVudCwgb3B0aW9ucykgeworICAgIHRoaXMuJGVsZW1lbnQgPSAkZWxlbWVudDsKKyAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOworCisgICAgQmFzZVNlbGVjdGlvbi5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzKTsKKyAgfQorCisgIFV0aWxzLkV4dGVuZChCYXNlU2VsZWN0aW9uLCBVdGlscy5PYnNlcnZhYmxlKTsKKworICBCYXNlU2VsZWN0aW9uLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyICRzZWxlY3Rpb24gPSAkKAorICAgICAgJzxzcGFuIGNsYXNzPSJzZWxlY3QyLXNlbGVjdGlvbiIgcm9sZT0iY29tYm9ib3giICcgKworICAgICAgJyBhcmlhLWhhc3BvcHVwPSJ0cnVlIiBhcmlhLWV4cGFuZGVkPSJmYWxzZSI+JyArCisgICAgICAnPC9zcGFuPicKKyAgICApOworCisgICAgdGhpcy5fdGFiaW5kZXggPSAwOworCisgICAgaWYgKFV0aWxzLkdldERhdGEodGhpcy4kZWxlbWVudFswXSwgJ29sZC10YWJpbmRleCcpICE9IG51bGwpIHsKKyAgICAgIHRoaXMuX3RhYmluZGV4ID0gVXRpbHMuR2V0RGF0YSh0aGlzLiRlbGVtZW50WzBdLCAnb2xkLXRhYmluZGV4Jyk7CisgICAgfSBlbHNlIGlmICh0aGlzLiRlbGVtZW50LmF0dHIoJ3RhYmluZGV4JykgIT0gbnVsbCkgeworICAgICAgdGhpcy5fdGFiaW5kZXggPSB0aGlzLiRlbGVtZW50LmF0dHIoJ3RhYmluZGV4Jyk7CisgICAgfQorCisgICAgJHNlbGVjdGlvbi5hdHRyKCd0aXRsZScsIHRoaXMuJGVsZW1lbnQuYXR0cigndGl0bGUnKSk7CisgICAgJHNlbGVjdGlvbi5hdHRyKCd0YWJpbmRleCcsIHRoaXMuX3RhYmluZGV4KTsKKworICAgIHRoaXMuJHNlbGVjdGlvbiA9ICRzZWxlY3Rpb247CisKKyAgICByZXR1cm4gJHNlbGVjdGlvbjsKKyAgfTsKKworICBCYXNlU2VsZWN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgJGNvbnRhaW5lcikgeworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIHZhciBpZCA9IGNvbnRhaW5lci5pZCArICctY29udGFpbmVyJzsKKyAgICB2YXIgcmVzdWx0c0lkID0gY29udGFpbmVyLmlkICsgJy1yZXN1bHRzJzsKKworICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyOworCisgICAgdGhpcy4kc2VsZWN0aW9uLm9uKCdmb2N1cycsIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgIHNlbGYudHJpZ2dlcignZm9jdXMnLCBldnQpOworICAgIH0pOworCisgICAgdGhpcy4kc2VsZWN0aW9uLm9uKCdibHVyJywgZnVuY3Rpb24gKGV2dCkgeworICAgICAgc2VsZi5faGFuZGxlQmx1cihldnQpOworICAgIH0pOworCisgICAgdGhpcy4kc2VsZWN0aW9uLm9uKCdrZXlkb3duJywgZnVuY3Rpb24gKGV2dCkgeworICAgICAgc2VsZi50cmlnZ2VyKCdrZXlwcmVzcycsIGV2dCk7CisKKyAgICAgIGlmIChldnQud2hpY2ggPT09IEtFWVMuU1BBQ0UpIHsKKyAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7CisgICAgICB9CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6Zm9jdXMnLCBmdW5jdGlvbiAocGFyYW1zKSB7CisgICAgICBzZWxmLiRzZWxlY3Rpb24uYXR0cignYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgcGFyYW1zLmRhdGEuX3Jlc3VsdElkKTsKKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbignc2VsZWN0aW9uOnVwZGF0ZScsIGZ1bmN0aW9uIChwYXJhbXMpIHsKKyAgICAgIHNlbGYudXBkYXRlKHBhcmFtcy5kYXRhKTsKKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbignb3BlbicsIGZ1bmN0aW9uICgpIHsKKyAgICAgIC8vIFdoZW4gdGhlIGRyb3Bkb3duIGlzIG9wZW4sIGFyaWEtZXhwYW5kZWQ9InRydWUiCisgICAgICBzZWxmLiRzZWxlY3Rpb24uYXR0cignYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7CisgICAgICBzZWxmLiRzZWxlY3Rpb24uYXR0cignYXJpYS1vd25zJywgcmVzdWx0c0lkKTsKKworICAgICAgc2VsZi5fYXR0YWNoQ2xvc2VIYW5kbGVyKGNvbnRhaW5lcik7CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkgeworICAgICAgLy8gV2hlbiB0aGUgZHJvcGRvd24gaXMgY2xvc2VkLCBhcmlhLWV4cGFuZGVkPSJmYWxzZSIKKyAgICAgIHNlbGYuJHNlbGVjdGlvbi5hdHRyKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7CisgICAgICBzZWxmLiRzZWxlY3Rpb24ucmVtb3ZlQXR0cignYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7CisgICAgICBzZWxmLiRzZWxlY3Rpb24ucmVtb3ZlQXR0cignYXJpYS1vd25zJyk7CisKKyAgICAgIHNlbGYuJHNlbGVjdGlvbi5mb2N1cygpOworICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICBzZWxmLiRzZWxlY3Rpb24uZm9jdXMoKTsKKyAgICAgIH0sIDApOworCisgICAgICBzZWxmLl9kZXRhY2hDbG9zZUhhbmRsZXIoY29udGFpbmVyKTsKKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbignZW5hYmxlJywgZnVuY3Rpb24gKCkgeworICAgICAgc2VsZi4kc2VsZWN0aW9uLmF0dHIoJ3RhYmluZGV4Jywgc2VsZi5fdGFiaW5kZXgpOworICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCdkaXNhYmxlJywgZnVuY3Rpb24gKCkgeworICAgICAgc2VsZi4kc2VsZWN0aW9uLmF0dHIoJ3RhYmluZGV4JywgJy0xJyk7CisgICAgfSk7CisgIH07CisKKyAgQmFzZVNlbGVjdGlvbi5wcm90b3R5cGUuX2hhbmRsZUJsdXIgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgLy8gVGhpcyBuZWVkcyB0byBiZSBkZWxheWVkIGFzIHRoZSBhY3RpdmUgZWxlbWVudCBpcyB0aGUgYm9keSB3aGVuIHRoZSB0YWIKKyAgICAvLyBrZXkgaXMgcHJlc3NlZCwgcG9zc2libHkgYWxvbmcgd2l0aCBvdGhlcnMuCisgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgLy8gRG9uJ3QgdHJpZ2dlciBgYmx1cmAgaWYgdGhlIGZvY3VzIGlzIHN0aWxsIGluIHRoZSBzZWxlY3Rpb24KKyAgICAgIGlmICgKKyAgICAgICAgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gc2VsZi4kc2VsZWN0aW9uWzBdKSB8fAorICAgICAgICAoJC5jb250YWlucyhzZWxmLiRzZWxlY3Rpb25bMF0sIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKQorICAgICAgKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgc2VsZi50cmlnZ2VyKCdibHVyJywgZXZ0KTsKKyAgICB9LCAxKTsKKyAgfTsKKworICBCYXNlU2VsZWN0aW9uLnByb3RvdHlwZS5fYXR0YWNoQ2xvc2VIYW5kbGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcikgeworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICQoZG9jdW1lbnQuYm9keSkub24oJ21vdXNlZG93bi5zZWxlY3QyLicgKyBjb250YWluZXIuaWQsIGZ1bmN0aW9uIChlKSB7CisgICAgICB2YXIgJHRhcmdldCA9ICQoZS50YXJnZXQpOworCisgICAgICB2YXIgJHNlbGVjdCA9ICR0YXJnZXQuY2xvc2VzdCgnLnNlbGVjdDInKTsKKworICAgICAgdmFyICRhbGwgPSAkKCcuc2VsZWN0Mi5zZWxlY3QyLWNvbnRhaW5lci0tb3BlbicpOworCisgICAgICAkYWxsLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOworCisgICAgICAgIGlmICh0aGlzID09ICRzZWxlY3RbMF0pIHsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2YXIgJGVsZW1lbnQgPSBVdGlscy5HZXREYXRhKHRoaXMsICdlbGVtZW50Jyk7CisKKyAgICAgICAgJGVsZW1lbnQuc2VsZWN0MignY2xvc2UnKTsKKyAgICAgIH0pOworICAgIH0pOworICB9OworCisgIEJhc2VTZWxlY3Rpb24ucHJvdG90eXBlLl9kZXRhY2hDbG9zZUhhbmRsZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7CisgICAgJChkb2N1bWVudC5ib2R5KS5vZmYoJ21vdXNlZG93bi5zZWxlY3QyLicgKyBjb250YWluZXIuaWQpOworICB9OworCisgIEJhc2VTZWxlY3Rpb24ucHJvdG90eXBlLnBvc2l0aW9uID0gZnVuY3Rpb24gKCRzZWxlY3Rpb24sICRjb250YWluZXIpIHsKKyAgICB2YXIgJHNlbGVjdGlvbkNvbnRhaW5lciA9ICRjb250YWluZXIuZmluZCgnLnNlbGVjdGlvbicpOworICAgICRzZWxlY3Rpb25Db250YWluZXIuYXBwZW5kKCRzZWxlY3Rpb24pOworICB9OworCisgIEJhc2VTZWxlY3Rpb24ucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy5fZGV0YWNoQ2xvc2VIYW5kbGVyKHRoaXMuY29udGFpbmVyKTsKKyAgfTsKKworICBCYXNlU2VsZWN0aW9uLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgIHRocm93IG5ldyBFcnJvcignVGhlIGB1cGRhdGVgIG1ldGhvZCBtdXN0IGJlIGRlZmluZWQgaW4gY2hpbGQgY2xhc3Nlcy4nKTsKKyAgfTsKKworICByZXR1cm4gQmFzZVNlbGVjdGlvbjsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvc2VsZWN0aW9uL3NpbmdsZScsWworICAnanF1ZXJ5JywKKyAgJy4vYmFzZScsCisgICcuLi91dGlscycsCisgICcuLi9rZXlzJworXSwgZnVuY3Rpb24gKCQsIEJhc2VTZWxlY3Rpb24sIFV0aWxzLCBLRVlTKSB7CisgIGZ1bmN0aW9uIFNpbmdsZVNlbGVjdGlvbiAoKSB7CisgICAgU2luZ2xlU2VsZWN0aW9uLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICB9CisKKyAgVXRpbHMuRXh0ZW5kKFNpbmdsZVNlbGVjdGlvbiwgQmFzZVNlbGVjdGlvbik7CisKKyAgU2luZ2xlU2VsZWN0aW9uLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyICRzZWxlY3Rpb24gPSBTaW5nbGVTZWxlY3Rpb24uX19zdXBlcl9fLnJlbmRlci5jYWxsKHRoaXMpOworCisgICAgJHNlbGVjdGlvbi5hZGRDbGFzcygnc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZScpOworCisgICAgJHNlbGVjdGlvbi5odG1sKAorICAgICAgJzxzcGFuIGNsYXNzPSJzZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQiPjwvc3Bhbj4nICsKKyAgICAgICc8c3BhbiBjbGFzcz0ic2VsZWN0Mi1zZWxlY3Rpb25fX2Fycm93IiByb2xlPSJwcmVzZW50YXRpb24iPicgKworICAgICAgICAnPGIgcm9sZT0icHJlc2VudGF0aW9uIj48L2I+JyArCisgICAgICAnPC9zcGFuPicKKyAgICApOworCisgICAgcmV0dXJuICRzZWxlY3Rpb247CisgIH07CisKKyAgU2luZ2xlU2VsZWN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgJGNvbnRhaW5lcikgeworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIFNpbmdsZVNlbGVjdGlvbi5fX3N1cGVyX18uYmluZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCisgICAgdmFyIGlkID0gY29udGFpbmVyLmlkICsgJy1jb250YWluZXInOworCisgICAgdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKQorICAgICAgLmF0dHIoJ2lkJywgaWQpCisgICAgICAuYXR0cigncm9sZScsICd0ZXh0Ym94JykKKyAgICAgIC5hdHRyKCdhcmlhLXJlYWRvbmx5JywgJ3RydWUnKTsKKyAgICB0aGlzLiRzZWxlY3Rpb24uYXR0cignYXJpYS1sYWJlbGxlZGJ5JywgaWQpOworCisgICAgdGhpcy4kc2VsZWN0aW9uLm9uKCdtb3VzZWRvd24nLCBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAvLyBPbmx5IHJlc3BvbmQgdG8gbGVmdCBjbGlja3MKKyAgICAgIGlmIChldnQud2hpY2ggIT09IDEpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICBzZWxmLnRyaWdnZXIoJ3RvZ2dsZScsIHsKKyAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIHRoaXMuJHNlbGVjdGlvbi5vbignZm9jdXMnLCBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAvLyBVc2VyIGZvY3VzZXMgb24gdGhlIGNvbnRhaW5lcgorICAgIH0pOworCisgICAgdGhpcy4kc2VsZWN0aW9uLm9uKCdibHVyJywgZnVuY3Rpb24gKGV2dCkgeworICAgICAgLy8gVXNlciBleGl0cyB0aGUgY29udGFpbmVyCisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ2ZvY3VzJywgZnVuY3Rpb24gKGV2dCkgeworICAgICAgaWYgKCFjb250YWluZXIuaXNPcGVuKCkpIHsKKyAgICAgICAgc2VsZi4kc2VsZWN0aW9uLmZvY3VzKCk7CisgICAgICB9CisgICAgfSk7CisgIH07CisKKyAgU2luZ2xlU2VsZWN0aW9uLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgJHJlbmRlcmVkID0gdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKTsKKyAgICAkcmVuZGVyZWQuZW1wdHkoKTsKKyAgICAkcmVuZGVyZWQucmVtb3ZlQXR0cigndGl0bGUnKTsgLy8gY2xlYXIgdG9vbHRpcCBvbiBlbXB0eQorICB9OworCisgIFNpbmdsZVNlbGVjdGlvbi5wcm90b3R5cGUuZGlzcGxheSA9IGZ1bmN0aW9uIChkYXRhLCBjb250YWluZXIpIHsKKyAgICB2YXIgdGVtcGxhdGUgPSB0aGlzLm9wdGlvbnMuZ2V0KCd0ZW1wbGF0ZVNlbGVjdGlvbicpOworICAgIHZhciBlc2NhcGVNYXJrdXAgPSB0aGlzLm9wdGlvbnMuZ2V0KCdlc2NhcGVNYXJrdXAnKTsKKworICAgIHJldHVybiBlc2NhcGVNYXJrdXAodGVtcGxhdGUoZGF0YSwgY29udGFpbmVyKSk7CisgIH07CisKKyAgU2luZ2xlU2VsZWN0aW9uLnByb3RvdHlwZS5zZWxlY3Rpb25Db250YWluZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuICQoJzxzcGFuPjwvc3Bhbj4nKTsKKyAgfTsKKworICBTaW5nbGVTZWxlY3Rpb24ucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7CisgICAgICB0aGlzLmNsZWFyKCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFyIHNlbGVjdGlvbiA9IGRhdGFbMF07CisKKyAgICB2YXIgJHJlbmRlcmVkID0gdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKTsKKyAgICB2YXIgZm9ybWF0dGVkID0gdGhpcy5kaXNwbGF5KHNlbGVjdGlvbiwgJHJlbmRlcmVkKTsKKworICAgICRyZW5kZXJlZC5lbXB0eSgpLmFwcGVuZChmb3JtYXR0ZWQpOworICAgICRyZW5kZXJlZC5hdHRyKCd0aXRsZScsIHNlbGVjdGlvbi50aXRsZSB8fCBzZWxlY3Rpb24udGV4dCk7CisgIH07CisKKyAgcmV0dXJuIFNpbmdsZVNlbGVjdGlvbjsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvc2VsZWN0aW9uL211bHRpcGxlJyxbCisgICdqcXVlcnknLAorICAnLi9iYXNlJywKKyAgJy4uL3V0aWxzJworXSwgZnVuY3Rpb24gKCQsIEJhc2VTZWxlY3Rpb24sIFV0aWxzKSB7CisgIGZ1bmN0aW9uIE11bHRpcGxlU2VsZWN0aW9uICgkZWxlbWVudCwgb3B0aW9ucykgeworICAgIE11bHRpcGxlU2VsZWN0aW9uLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICB9CisKKyAgVXRpbHMuRXh0ZW5kKE11bHRpcGxlU2VsZWN0aW9uLCBCYXNlU2VsZWN0aW9uKTsKKworICBNdWx0aXBsZVNlbGVjdGlvbi5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkgeworICAgIHZhciAkc2VsZWN0aW9uID0gTXVsdGlwbGVTZWxlY3Rpb24uX19zdXBlcl9fLnJlbmRlci5jYWxsKHRoaXMpOworCisgICAgJHNlbGVjdGlvbi5hZGRDbGFzcygnc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlJyk7CisKKyAgICAkc2VsZWN0aW9uLmh0bWwoCisgICAgICAnPHVsIGNsYXNzPSJzZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQiPjwvdWw+JworICAgICk7CisKKyAgICByZXR1cm4gJHNlbGVjdGlvbjsKKyAgfTsKKworICBNdWx0aXBsZVNlbGVjdGlvbi5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChjb250YWluZXIsICRjb250YWluZXIpIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICBNdWx0aXBsZVNlbGVjdGlvbi5fX3N1cGVyX18uYmluZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCisgICAgdGhpcy4kc2VsZWN0aW9uLm9uKCdjbGljaycsIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgIHNlbGYudHJpZ2dlcigndG9nZ2xlJywgeworICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnQKKyAgICAgIH0pOworICAgIH0pOworCisgICAgdGhpcy4kc2VsZWN0aW9uLm9uKAorICAgICAgJ2NsaWNrJywKKyAgICAgICcuc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZV9fcmVtb3ZlJywKKyAgICAgIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgLy8gSWdub3JlIHRoZSBldmVudCBpZiBpdCBpcyBkaXNhYmxlZAorICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmdldCgnZGlzYWJsZWQnKSkgeworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciAkcmVtb3ZlID0gJCh0aGlzKTsKKyAgICAgICAgdmFyICRzZWxlY3Rpb24gPSAkcmVtb3ZlLnBhcmVudCgpOworCisgICAgICAgIHZhciBkYXRhID0gVXRpbHMuR2V0RGF0YSgkc2VsZWN0aW9uWzBdLCAnZGF0YScpOworCisgICAgICAgIHNlbGYudHJpZ2dlcigndW5zZWxlY3QnLCB7CisgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0LAorICAgICAgICAgIGRhdGE6IGRhdGEKKyAgICAgICAgfSk7CisgICAgICB9CisgICAgKTsKKyAgfTsKKworICBNdWx0aXBsZVNlbGVjdGlvbi5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyICRyZW5kZXJlZCA9IHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkJyk7CisgICAgJHJlbmRlcmVkLmVtcHR5KCk7CisgICAgJHJlbmRlcmVkLnJlbW92ZUF0dHIoJ3RpdGxlJyk7CisgIH07CisKKyAgTXVsdGlwbGVTZWxlY3Rpb24ucHJvdG90eXBlLmRpc3BsYXkgPSBmdW5jdGlvbiAoZGF0YSwgY29udGFpbmVyKSB7CisgICAgdmFyIHRlbXBsYXRlID0gdGhpcy5vcHRpb25zLmdldCgndGVtcGxhdGVTZWxlY3Rpb24nKTsKKyAgICB2YXIgZXNjYXBlTWFya3VwID0gdGhpcy5vcHRpb25zLmdldCgnZXNjYXBlTWFya3VwJyk7CisKKyAgICByZXR1cm4gZXNjYXBlTWFya3VwKHRlbXBsYXRlKGRhdGEsIGNvbnRhaW5lcikpOworICB9OworCisgIE11bHRpcGxlU2VsZWN0aW9uLnByb3RvdHlwZS5zZWxlY3Rpb25Db250YWluZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyICRjb250YWluZXIgPSAkKAorICAgICAgJzxsaSBjbGFzcz0ic2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZSI+JyArCisgICAgICAgICc8c3BhbiBjbGFzcz0ic2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZV9fcmVtb3ZlIiByb2xlPSJwcmVzZW50YXRpb24iPicgKworICAgICAgICAgICcmdGltZXM7JyArCisgICAgICAgICc8L3NwYW4+JyArCisgICAgICAnPC9saT4nCisgICAgKTsKKworICAgIHJldHVybiAkY29udGFpbmVyOworICB9OworCisgIE11bHRpcGxlU2VsZWN0aW9uLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgIHRoaXMuY2xlYXIoKTsKKworICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciAkc2VsZWN0aW9ucyA9IFtdOworCisgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkYXRhLmxlbmd0aDsgZCsrKSB7CisgICAgICB2YXIgc2VsZWN0aW9uID0gZGF0YVtkXTsKKworICAgICAgdmFyICRzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbkNvbnRhaW5lcigpOworICAgICAgdmFyIGZvcm1hdHRlZCA9IHRoaXMuZGlzcGxheShzZWxlY3Rpb24sICRzZWxlY3Rpb24pOworCisgICAgICAkc2VsZWN0aW9uLmFwcGVuZChmb3JtYXR0ZWQpOworICAgICAgJHNlbGVjdGlvbi5hdHRyKCd0aXRsZScsIHNlbGVjdGlvbi50aXRsZSB8fCBzZWxlY3Rpb24udGV4dCk7CisKKyAgICAgIFV0aWxzLlN0b3JlRGF0YSgkc2VsZWN0aW9uWzBdLCAnZGF0YScsIHNlbGVjdGlvbik7CisKKyAgICAgICRzZWxlY3Rpb25zLnB1c2goJHNlbGVjdGlvbik7CisgICAgfQorCisgICAgdmFyICRyZW5kZXJlZCA9IHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkJyk7CisKKyAgICBVdGlscy5hcHBlbmRNYW55KCRyZW5kZXJlZCwgJHNlbGVjdGlvbnMpOworICB9OworCisgIHJldHVybiBNdWx0aXBsZVNlbGVjdGlvbjsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvc2VsZWN0aW9uL3BsYWNlaG9sZGVyJyxbCisgICcuLi91dGlscycKK10sIGZ1bmN0aW9uIChVdGlscykgeworICBmdW5jdGlvbiBQbGFjZWhvbGRlciAoZGVjb3JhdGVkLCAkZWxlbWVudCwgb3B0aW9ucykgeworICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0aGlzLm5vcm1hbGl6ZVBsYWNlaG9sZGVyKG9wdGlvbnMuZ2V0KCdwbGFjZWhvbGRlcicpKTsKKworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsICRlbGVtZW50LCBvcHRpb25zKTsKKyAgfQorCisgIFBsYWNlaG9sZGVyLnByb3RvdHlwZS5ub3JtYWxpemVQbGFjZWhvbGRlciA9IGZ1bmN0aW9uIChfLCBwbGFjZWhvbGRlcikgeworICAgIGlmICh0eXBlb2YgcGxhY2Vob2xkZXIgPT09ICdzdHJpbmcnKSB7CisgICAgICBwbGFjZWhvbGRlciA9IHsKKyAgICAgICAgaWQ6ICcnLAorICAgICAgICB0ZXh0OiBwbGFjZWhvbGRlcgorICAgICAgfTsKKyAgICB9CisKKyAgICByZXR1cm4gcGxhY2Vob2xkZXI7CisgIH07CisKKyAgUGxhY2Vob2xkZXIucHJvdG90eXBlLmNyZWF0ZVBsYWNlaG9sZGVyID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgcGxhY2Vob2xkZXIpIHsKKyAgICB2YXIgJHBsYWNlaG9sZGVyID0gdGhpcy5zZWxlY3Rpb25Db250YWluZXIoKTsKKworICAgICRwbGFjZWhvbGRlci5odG1sKHRoaXMuZGlzcGxheShwbGFjZWhvbGRlcikpOworICAgICRwbGFjZWhvbGRlci5hZGRDbGFzcygnc2VsZWN0Mi1zZWxlY3Rpb25fX3BsYWNlaG9sZGVyJykKKyAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NlbGVjdDItc2VsZWN0aW9uX19jaG9pY2UnKTsKKworICAgIHJldHVybiAkcGxhY2Vob2xkZXI7CisgIH07CisKKyAgUGxhY2Vob2xkZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGRhdGEpIHsKKyAgICB2YXIgc2luZ2xlUGxhY2Vob2xkZXIgPSAoCisgICAgICBkYXRhLmxlbmd0aCA9PSAxICYmIGRhdGFbMF0uaWQgIT0gdGhpcy5wbGFjZWhvbGRlci5pZAorICAgICk7CisgICAgdmFyIG11bHRpcGxlU2VsZWN0aW9ucyA9IGRhdGEubGVuZ3RoID4gMTsKKworICAgIGlmIChtdWx0aXBsZVNlbGVjdGlvbnMgfHwgc2luZ2xlUGxhY2Vob2xkZXIpIHsKKyAgICAgIHJldHVybiBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBkYXRhKTsKKyAgICB9CisKKyAgICB0aGlzLmNsZWFyKCk7CisKKyAgICB2YXIgJHBsYWNlaG9sZGVyID0gdGhpcy5jcmVhdGVQbGFjZWhvbGRlcih0aGlzLnBsYWNlaG9sZGVyKTsKKworICAgIHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkJykuYXBwZW5kKCRwbGFjZWhvbGRlcik7CisgIH07CisKKyAgcmV0dXJuIFBsYWNlaG9sZGVyOworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vYWxsb3dDbGVhcicsWworICAnanF1ZXJ5JywKKyAgJy4uL2tleXMnLAorICAnLi4vdXRpbHMnCitdLCBmdW5jdGlvbiAoJCwgS0VZUywgVXRpbHMpIHsKKyAgZnVuY3Rpb24gQWxsb3dDbGVhciAoKSB7IH0KKworICBBbGxvd0NsZWFyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgY29udGFpbmVyLCAkY29udGFpbmVyKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgY29udGFpbmVyLCAkY29udGFpbmVyKTsKKworICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyID09IG51bGwpIHsKKyAgICAgIGlmICh0aGlzLm9wdGlvbnMuZ2V0KCdkZWJ1ZycpICYmIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUuZXJyb3IpIHsKKyAgICAgICAgY29uc29sZS5lcnJvcigKKyAgICAgICAgICAnU2VsZWN0MjogVGhlIGBhbGxvd0NsZWFyYCBvcHRpb24gc2hvdWxkIGJlIHVzZWQgaW4gY29tYmluYXRpb24gJyArCisgICAgICAgICAgJ3dpdGggdGhlIGBwbGFjZWhvbGRlcmAgb3B0aW9uLicKKyAgICAgICAgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB0aGlzLiRzZWxlY3Rpb24ub24oJ21vdXNlZG93bicsICcuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyJywKKyAgICAgIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgc2VsZi5faGFuZGxlQ2xlYXIoZXZ0KTsKKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbigna2V5cHJlc3MnLCBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICBzZWxmLl9oYW5kbGVLZXlib2FyZENsZWFyKGV2dCwgY29udGFpbmVyKTsKKyAgICB9KTsKKyAgfTsKKworICBBbGxvd0NsZWFyLnByb3RvdHlwZS5faGFuZGxlQ2xlYXIgPSBmdW5jdGlvbiAoXywgZXZ0KSB7CisgICAgLy8gSWdub3JlIHRoZSBldmVudCBpZiBpdCBpcyBkaXNhYmxlZAorICAgIGlmICh0aGlzLm9wdGlvbnMuZ2V0KCdkaXNhYmxlZCcpKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFyICRjbGVhciA9IHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyJyk7CisKKyAgICAvLyBJZ25vcmUgdGhlIGV2ZW50IGlmIG5vdGhpbmcgaGFzIGJlZW4gc2VsZWN0ZWQKKyAgICBpZiAoJGNsZWFyLmxlbmd0aCA9PT0gMCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTsKKworICAgIHZhciBkYXRhID0gVXRpbHMuR2V0RGF0YSgkY2xlYXJbMF0sICdkYXRhJyk7CisKKyAgICB2YXIgcHJldmlvdXNWYWwgPSB0aGlzLiRlbGVtZW50LnZhbCgpOworICAgIHRoaXMuJGVsZW1lbnQudmFsKHRoaXMucGxhY2Vob2xkZXIuaWQpOworCisgICAgdmFyIHVuc2VsZWN0RGF0YSA9IHsKKyAgICAgIGRhdGE6IGRhdGEKKyAgICB9OworICAgIHRoaXMudHJpZ2dlcignY2xlYXInLCB1bnNlbGVjdERhdGEpOworICAgIGlmICh1bnNlbGVjdERhdGEucHJldmVudGVkKSB7CisgICAgICB0aGlzLiRlbGVtZW50LnZhbChwcmV2aW91c1ZhbCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkYXRhLmxlbmd0aDsgZCsrKSB7CisgICAgICB1bnNlbGVjdERhdGEgPSB7CisgICAgICAgIGRhdGE6IGRhdGFbZF0KKyAgICAgIH07CisKKyAgICAgIC8vIFRyaWdnZXIgdGhlIGB1bnNlbGVjdGAgZXZlbnQsIHNvIHBlb3BsZSBjYW4gcHJldmVudCBpdCBmcm9tIGJlaW5nCisgICAgICAvLyBjbGVhcmVkLgorICAgICAgdGhpcy50cmlnZ2VyKCd1bnNlbGVjdCcsIHVuc2VsZWN0RGF0YSk7CisKKyAgICAgIC8vIElmIHRoZSBldmVudCB3YXMgcHJldmVudGVkLCBkb24ndCBjbGVhciBpdCBvdXQuCisgICAgICBpZiAodW5zZWxlY3REYXRhLnByZXZlbnRlZCkgeworICAgICAgICB0aGlzLiRlbGVtZW50LnZhbChwcmV2aW91c1ZhbCk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisKKyAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2NoYW5nZScpOworCisgICAgdGhpcy50cmlnZ2VyKCd0b2dnbGUnLCB7fSk7CisgIH07CisKKyAgQWxsb3dDbGVhci5wcm90b3R5cGUuX2hhbmRsZUtleWJvYXJkQ2xlYXIgPSBmdW5jdGlvbiAoXywgZXZ0LCBjb250YWluZXIpIHsKKyAgICBpZiAoY29udGFpbmVyLmlzT3BlbigpKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGV2dC53aGljaCA9PSBLRVlTLkRFTEVURSB8fCBldnQud2hpY2ggPT0gS0VZUy5CQUNLU1BBQ0UpIHsKKyAgICAgIHRoaXMuX2hhbmRsZUNsZWFyKGV2dCk7CisgICAgfQorICB9OworCisgIEFsbG93Q2xlYXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGRhdGEpIHsKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBkYXRhKTsKKworICAgIGlmICh0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19wbGFjZWhvbGRlcicpLmxlbmd0aCA+IDAgfHwKKyAgICAgICAgZGF0YS5sZW5ndGggPT09IDApIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgJHJlbW92ZSA9ICQoCisgICAgICAnPHNwYW4gY2xhc3M9InNlbGVjdDItc2VsZWN0aW9uX19jbGVhciI+JyArCisgICAgICAgICcmdGltZXM7JyArCisgICAgICAnPC9zcGFuPicKKyAgICApOworICAgIFV0aWxzLlN0b3JlRGF0YSgkcmVtb3ZlWzBdLCAnZGF0YScsIGRhdGEpOworCisgICAgdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKS5wcmVwZW5kKCRyZW1vdmUpOworICB9OworCisgIHJldHVybiBBbGxvd0NsZWFyOworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vc2VhcmNoJyxbCisgICdqcXVlcnknLAorICAnLi4vdXRpbHMnLAorICAnLi4va2V5cycKK10sIGZ1bmN0aW9uICgkLCBVdGlscywgS0VZUykgeworICBmdW5jdGlvbiBTZWFyY2ggKGRlY29yYXRlZCwgJGVsZW1lbnQsIG9wdGlvbnMpIHsKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCAkZWxlbWVudCwgb3B0aW9ucyk7CisgIH0KKworICBTZWFyY2gucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQpIHsKKyAgICB2YXIgJHNlYXJjaCA9ICQoCisgICAgICAnPGxpIGNsYXNzPSJzZWxlY3QyLXNlYXJjaCBzZWxlY3QyLXNlYXJjaC0taW5saW5lIj4nICsKKyAgICAgICAgJzxpbnB1dCBjbGFzcz0ic2VsZWN0Mi1zZWFyY2hfX2ZpZWxkIiB0eXBlPSJzZWFyY2giIHRhYmluZGV4PSItMSInICsKKyAgICAgICAgJyBhdXRvY29tcGxldGU9Im9mZiIgYXV0b2NvcnJlY3Q9Im9mZiIgYXV0b2NhcGl0YWxpemU9Im5vbmUiJyArCisgICAgICAgICcgc3BlbGxjaGVjaz0iZmFsc2UiIHJvbGU9InRleHRib3giIGFyaWEtYXV0b2NvbXBsZXRlPSJsaXN0IiAvPicgKworICAgICAgJzwvbGk+JworICAgICk7CisKKyAgICB0aGlzLiRzZWFyY2hDb250YWluZXIgPSAkc2VhcmNoOworICAgIHRoaXMuJHNlYXJjaCA9ICRzZWFyY2guZmluZCgnaW5wdXQnKTsKKworICAgIHZhciAkcmVuZGVyZWQgPSBkZWNvcmF0ZWQuY2FsbCh0aGlzKTsKKworICAgIHRoaXMuX3RyYW5zZmVyVGFiSW5kZXgoKTsKKworICAgIHJldHVybiAkcmVuZGVyZWQ7CisgIH07CisKKyAgU2VhcmNoLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgY29udGFpbmVyLCAkY29udGFpbmVyKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgY29udGFpbmVyLCAkY29udGFpbmVyKTsKKworICAgIGNvbnRhaW5lci5vbignb3BlbicsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHNlbGYuJHNlYXJjaC50cmlnZ2VyKCdmb2N1cycpOworICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHNlbGYuJHNlYXJjaC52YWwoJycpOworICAgICAgc2VsZi4kc2VhcmNoLnJlbW92ZUF0dHIoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcpOworICAgICAgc2VsZi4kc2VhcmNoLnRyaWdnZXIoJ2ZvY3VzJyk7CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ2VuYWJsZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHNlbGYuJHNlYXJjaC5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTsKKworICAgICAgc2VsZi5fdHJhbnNmZXJUYWJJbmRleCgpOworICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCdkaXNhYmxlJywgZnVuY3Rpb24gKCkgeworICAgICAgc2VsZi4kc2VhcmNoLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ2ZvY3VzJywgZnVuY3Rpb24gKGV2dCkgeworICAgICAgc2VsZi4kc2VhcmNoLnRyaWdnZXIoJ2ZvY3VzJyk7CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6Zm9jdXMnLCBmdW5jdGlvbiAocGFyYW1zKSB7CisgICAgICBzZWxmLiRzZWFyY2guYXR0cignYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgcGFyYW1zLmlkKTsKKyAgICB9KTsKKworICAgIHRoaXMuJHNlbGVjdGlvbi5vbignZm9jdXNpbicsICcuc2VsZWN0Mi1zZWFyY2gtLWlubGluZScsIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgIHNlbGYudHJpZ2dlcignZm9jdXMnLCBldnQpOworICAgIH0pOworCisgICAgdGhpcy4kc2VsZWN0aW9uLm9uKCdmb2N1c291dCcsICcuc2VsZWN0Mi1zZWFyY2gtLWlubGluZScsIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgIHNlbGYuX2hhbmRsZUJsdXIoZXZ0KTsKKyAgICB9KTsKKworICAgIHRoaXMuJHNlbGVjdGlvbi5vbigna2V5ZG93bicsICcuc2VsZWN0Mi1zZWFyY2gtLWlubGluZScsIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTsKKworICAgICAgc2VsZi50cmlnZ2VyKCdrZXlwcmVzcycsIGV2dCk7CisKKyAgICAgIHNlbGYuX2tleVVwUHJldmVudGVkID0gZXZ0LmlzRGVmYXVsdFByZXZlbnRlZCgpOworCisgICAgICB2YXIga2V5ID0gZXZ0LndoaWNoOworCisgICAgICBpZiAoa2V5ID09PSBLRVlTLkJBQ0tTUEFDRSAmJiBzZWxmLiRzZWFyY2gudmFsKCkgPT09ICcnKSB7CisgICAgICAgIHZhciAkcHJldmlvdXNDaG9pY2UgPSBzZWxmLiRzZWFyY2hDb250YWluZXIKKyAgICAgICAgICAucHJldignLnNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2UnKTsKKworICAgICAgICBpZiAoJHByZXZpb3VzQ2hvaWNlLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICB2YXIgaXRlbSA9IFV0aWxzLkdldERhdGEoJHByZXZpb3VzQ2hvaWNlWzBdLCAnZGF0YScpOworCisgICAgICAgICAgc2VsZi5zZWFyY2hSZW1vdmVDaG9pY2UoaXRlbSk7CisKKyAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworCisgICAgLy8gVHJ5IHRvIGRldGVjdCB0aGUgSUUgdmVyc2lvbiBzaG91bGQgdGhlIGBkb2N1bWVudE1vZGVgIHByb3BlcnR5IHRoYXQKKyAgICAvLyBpcyBzdG9yZWQgb24gdGhlIGRvY3VtZW50LiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgaW4gSUUgYW5kIGlzCisgICAgLy8gc2xpZ2h0bHkgY2xlYW5lciB0aGFuIGRvaW5nIGEgdXNlciBhZ2VudCBjaGVjay4KKyAgICAvLyBUaGlzIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUgaW4gRWRnZSwgYnV0IEVkZ2UgYWxzbyBkb2Vzbid0IGhhdmUKKyAgICAvLyB0aGlzIGJ1Zy4KKyAgICB2YXIgbXNpZSA9IGRvY3VtZW50LmRvY3VtZW50TW9kZTsKKyAgICB2YXIgZGlzYWJsZUlucHV0RXZlbnRzID0gbXNpZSAmJiBtc2llIDw9IDExOworCisgICAgLy8gV29ya2Fyb3VuZCBmb3IgYnJvd3NlcnMgd2hpY2ggZG8gbm90IHN1cHBvcnQgdGhlIGBpbnB1dGAgZXZlbnQKKyAgICAvLyBUaGlzIHdpbGwgcHJldmVudCBkb3VibGUtdHJpZ2dlcmluZyBvZiBldmVudHMgZm9yIGJyb3dzZXJzIHdoaWNoIHN1cHBvcnQKKyAgICAvLyBib3RoIHRoZSBga2V5dXBgIGFuZCBgaW5wdXRgIGV2ZW50cy4KKyAgICB0aGlzLiRzZWxlY3Rpb24ub24oCisgICAgICAnaW5wdXQuc2VhcmNoY2hlY2snLAorICAgICAgJy5zZWxlY3QyLXNlYXJjaC0taW5saW5lJywKKyAgICAgIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgLy8gSUUgd2lsbCB0cmlnZ2VyIHRoZSBgaW5wdXRgIGV2ZW50IHdoZW4gYSBwbGFjZWhvbGRlciBpcyB1c2VkIG9uIGEKKyAgICAgICAgLy8gc2VhcmNoIGJveC4gVG8gZ2V0IGFyb3VuZCB0aGlzIGlzc3VlLCB3ZSBhcmUgZm9yY2VkIHRvIGlnbm9yZSBhbGwKKyAgICAgICAgLy8gYGlucHV0YCBldmVudHMgaW4gSUUgYW5kIGtlZXAgdXNpbmcgYGtleXVwYC4KKyAgICAgICAgaWYgKGRpc2FibGVJbnB1dEV2ZW50cykgeworICAgICAgICAgIHNlbGYuJHNlbGVjdGlvbi5vZmYoJ2lucHV0LnNlYXJjaCBpbnB1dC5zZWFyY2hjaGVjaycpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVuYmluZCB0aGUgZHVwbGljYXRlZCBga2V5dXBgIGV2ZW50CisgICAgICAgIHNlbGYuJHNlbGVjdGlvbi5vZmYoJ2tleXVwLnNlYXJjaCcpOworICAgICAgfQorICAgICk7CisKKyAgICB0aGlzLiRzZWxlY3Rpb24ub24oCisgICAgICAna2V5dXAuc2VhcmNoIGlucHV0LnNlYXJjaCcsCisgICAgICAnLnNlbGVjdDItc2VhcmNoLS1pbmxpbmUnLAorICAgICAgZnVuY3Rpb24gKGV2dCkgeworICAgICAgICAvLyBJRSB3aWxsIHRyaWdnZXIgdGhlIGBpbnB1dGAgZXZlbnQgd2hlbiBhIHBsYWNlaG9sZGVyIGlzIHVzZWQgb24gYQorICAgICAgICAvLyBzZWFyY2ggYm94LiBUbyBnZXQgYXJvdW5kIHRoaXMgaXNzdWUsIHdlIGFyZSBmb3JjZWQgdG8gaWdub3JlIGFsbAorICAgICAgICAvLyBgaW5wdXRgIGV2ZW50cyBpbiBJRSBhbmQga2VlcCB1c2luZyBga2V5dXBgLgorICAgICAgICBpZiAoZGlzYWJsZUlucHV0RXZlbnRzICYmIGV2dC50eXBlID09PSAnaW5wdXQnKSB7CisgICAgICAgICAgc2VsZi4kc2VsZWN0aW9uLm9mZignaW5wdXQuc2VhcmNoIGlucHV0LnNlYXJjaGNoZWNrJyk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGtleSA9IGV2dC53aGljaDsKKworICAgICAgICAvLyBXZSBjYW4gZnJlZWx5IGlnbm9yZSBldmVudHMgZnJvbSBtb2RpZmllciBrZXlzCisgICAgICAgIGlmIChrZXkgPT0gS0VZUy5TSElGVCB8fCBrZXkgPT0gS0VZUy5DVFJMIHx8IGtleSA9PSBLRVlTLkFMVCkgeworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRhYmJpbmcgd2lsbCBiZSBoYW5kbGVkIGR1cmluZyB0aGUgYGtleWRvd25gIHBoYXNlCisgICAgICAgIGlmIChrZXkgPT0gS0VZUy5UQUIpIHsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzZWxmLmhhbmRsZVNlYXJjaChldnQpOworICAgICAgfQorICAgICk7CisgIH07CisKKyAgLyoqCisgICAqIFRoaXMgbWV0aG9kIHdpbGwgdHJhbnNmZXIgdGhlIHRhYmluZGV4IGF0dHJpYnV0ZSBmcm9tIHRoZSByZW5kZXJlZAorICAgKiBzZWxlY3Rpb24gdG8gdGhlIHNlYXJjaCBib3guIFRoaXMgYWxsb3dzIGZvciB0aGUgc2VhcmNoIGJveCB0byBiZSB1c2VkIGFzCisgICAqIHRoZSBwcmltYXJ5IGZvY3VzIGluc3RlYWQgb2YgdGhlIHNlbGVjdGlvbiBjb250YWluZXIuCisgICAqCisgICAqIEBwcml2YXRlCisgICAqLworICBTZWFyY2gucHJvdG90eXBlLl90cmFuc2ZlclRhYkluZGV4ID0gZnVuY3Rpb24gKGRlY29yYXRlZCkgeworICAgIHRoaXMuJHNlYXJjaC5hdHRyKCd0YWJpbmRleCcsIHRoaXMuJHNlbGVjdGlvbi5hdHRyKCd0YWJpbmRleCcpKTsKKyAgICB0aGlzLiRzZWxlY3Rpb24uYXR0cigndGFiaW5kZXgnLCAnLTEnKTsKKyAgfTsKKworICBTZWFyY2gucHJvdG90eXBlLmNyZWF0ZVBsYWNlaG9sZGVyID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgcGxhY2Vob2xkZXIpIHsKKyAgICB0aGlzLiRzZWFyY2guYXR0cigncGxhY2Vob2xkZXInLCBwbGFjZWhvbGRlci50ZXh0KTsKKyAgfTsKKworICBTZWFyY2gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGRhdGEpIHsKKyAgICB2YXIgc2VhcmNoSGFkRm9jdXMgPSB0aGlzLiRzZWFyY2hbMF0gPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsKKworICAgIHRoaXMuJHNlYXJjaC5hdHRyKCdwbGFjZWhvbGRlcicsICcnKTsKKworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGRhdGEpOworCisgICAgdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKQorICAgICAgICAgICAgICAgICAgIC5hcHBlbmQodGhpcy4kc2VhcmNoQ29udGFpbmVyKTsKKworICAgIHRoaXMucmVzaXplU2VhcmNoKCk7CisgICAgaWYgKHNlYXJjaEhhZEZvY3VzKSB7CisgICAgICB2YXIgaXNUYWdJbnB1dCA9IHRoaXMuJGVsZW1lbnQuZmluZCgnW2RhdGEtc2VsZWN0Mi10YWddJykubGVuZ3RoOworICAgICAgaWYgKGlzVGFnSW5wdXQpIHsKKyAgICAgICAgLy8gZml4IElFMTEgYnVnIHdoZXJlIHRhZyBpbnB1dCBsb3N0IGZvY3VzCisgICAgICAgIHRoaXMuJGVsZW1lbnQuZm9jdXMoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMuJHNlYXJjaC5mb2N1cygpOworICAgICAgfQorICAgIH0KKyAgfTsKKworICBTZWFyY2gucHJvdG90eXBlLmhhbmRsZVNlYXJjaCA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLnJlc2l6ZVNlYXJjaCgpOworCisgICAgaWYgKCF0aGlzLl9rZXlVcFByZXZlbnRlZCkgeworICAgICAgdmFyIGlucHV0ID0gdGhpcy4kc2VhcmNoLnZhbCgpOworCisgICAgICB0aGlzLnRyaWdnZXIoJ3F1ZXJ5JywgeworICAgICAgICB0ZXJtOiBpbnB1dAorICAgICAgfSk7CisgICAgfQorCisgICAgdGhpcy5fa2V5VXBQcmV2ZW50ZWQgPSBmYWxzZTsKKyAgfTsKKworICBTZWFyY2gucHJvdG90eXBlLnNlYXJjaFJlbW92ZUNob2ljZSA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGl0ZW0pIHsKKyAgICB0aGlzLnRyaWdnZXIoJ3Vuc2VsZWN0JywgeworICAgICAgZGF0YTogaXRlbQorICAgIH0pOworCisgICAgdGhpcy4kc2VhcmNoLnZhbChpdGVtLnRleHQpOworICAgIHRoaXMuaGFuZGxlU2VhcmNoKCk7CisgIH07CisKKyAgU2VhcmNoLnByb3RvdHlwZS5yZXNpemVTZWFyY2ggPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy4kc2VhcmNoLmNzcygnd2lkdGgnLCAnMjVweCcpOworCisgICAgdmFyIHdpZHRoID0gJyc7CisKKyAgICBpZiAodGhpcy4kc2VhcmNoLmF0dHIoJ3BsYWNlaG9sZGVyJykgIT09ICcnKSB7CisgICAgICB3aWR0aCA9IHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkJykuaW5uZXJXaWR0aCgpOworICAgIH0gZWxzZSB7CisgICAgICB2YXIgbWluaW11bVdpZHRoID0gdGhpcy4kc2VhcmNoLnZhbCgpLmxlbmd0aCArIDE7CisKKyAgICAgIHdpZHRoID0gKG1pbmltdW1XaWR0aCAqIDAuNzUpICsgJ2VtJzsKKyAgICB9CisKKyAgICB0aGlzLiRzZWFyY2guY3NzKCd3aWR0aCcsIHdpZHRoKTsKKyAgfTsKKworICByZXR1cm4gU2VhcmNoOworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vZXZlbnRSZWxheScsWworICAnanF1ZXJ5JworXSwgZnVuY3Rpb24gKCQpIHsKKyAgZnVuY3Rpb24gRXZlbnRSZWxheSAoKSB7IH0KKworICBFdmVudFJlbGF5LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgY29udGFpbmVyLCAkY29udGFpbmVyKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworICAgIHZhciByZWxheUV2ZW50cyA9IFsKKyAgICAgICdvcGVuJywgJ29wZW5pbmcnLAorICAgICAgJ2Nsb3NlJywgJ2Nsb3NpbmcnLAorICAgICAgJ3NlbGVjdCcsICdzZWxlY3RpbmcnLAorICAgICAgJ3Vuc2VsZWN0JywgJ3Vuc2VsZWN0aW5nJywKKyAgICAgICdjbGVhcicsICdjbGVhcmluZycKKyAgICBdOworCisgICAgdmFyIHByZXZlbnRhYmxlRXZlbnRzID0gWworICAgICAgJ29wZW5pbmcnLCAnY2xvc2luZycsICdzZWxlY3RpbmcnLCAndW5zZWxlY3RpbmcnLCAnY2xlYXJpbmcnCisgICAgXTsKKworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGNvbnRhaW5lciwgJGNvbnRhaW5lcik7CisKKyAgICBjb250YWluZXIub24oJyonLCBmdW5jdGlvbiAobmFtZSwgcGFyYW1zKSB7CisgICAgICAvLyBJZ25vcmUgZXZlbnRzIHRoYXQgc2hvdWxkIG5vdCBiZSByZWxheWVkCisgICAgICBpZiAoJC5pbkFycmF5KG5hbWUsIHJlbGF5RXZlbnRzKSA9PT0gLTEpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICAvLyBUaGUgcGFyYW1ldGVycyBzaG91bGQgYWx3YXlzIGJlIGFuIG9iamVjdAorICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9OworCisgICAgICAvLyBHZW5lcmF0ZSB0aGUgalF1ZXJ5IGV2ZW50IGZvciB0aGUgU2VsZWN0MiBldmVudAorICAgICAgdmFyIGV2dCA9ICQuRXZlbnQoJ3NlbGVjdDI6JyArIG5hbWUsIHsKKyAgICAgICAgcGFyYW1zOiBwYXJhbXMKKyAgICAgIH0pOworCisgICAgICBzZWxmLiRlbGVtZW50LnRyaWdnZXIoZXZ0KTsKKworICAgICAgLy8gT25seSBoYW5kbGUgcHJldmVudGFibGUgZXZlbnRzIGlmIGl0IHdhcyBvbmUKKyAgICAgIGlmICgkLmluQXJyYXkobmFtZSwgcHJldmVudGFibGVFdmVudHMpID09PSAtMSkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHBhcmFtcy5wcmV2ZW50ZWQgPSBldnQuaXNEZWZhdWx0UHJldmVudGVkKCk7CisgICAgfSk7CisgIH07CisKKyAgcmV0dXJuIEV2ZW50UmVsYXk7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL3RyYW5zbGF0aW9uJyxbCisgICdqcXVlcnknLAorICAncmVxdWlyZScKK10sIGZ1bmN0aW9uICgkLCByZXF1aXJlKSB7CisgIGZ1bmN0aW9uIFRyYW5zbGF0aW9uIChkaWN0KSB7CisgICAgdGhpcy5kaWN0ID0gZGljdCB8fCB7fTsKKyAgfQorCisgIFRyYW5zbGF0aW9uLnByb3RvdHlwZS5hbGwgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIHRoaXMuZGljdDsKKyAgfTsKKworICBUcmFuc2xhdGlvbi5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkgeworICAgIHJldHVybiB0aGlzLmRpY3Rba2V5XTsKKyAgfTsKKworICBUcmFuc2xhdGlvbi5wcm90b3R5cGUuZXh0ZW5kID0gZnVuY3Rpb24gKHRyYW5zbGF0aW9uKSB7CisgICAgdGhpcy5kaWN0ID0gJC5leHRlbmQoe30sIHRyYW5zbGF0aW9uLmFsbCgpLCB0aGlzLmRpY3QpOworICB9OworCisgIC8vIFN0YXRpYyBmdW5jdGlvbnMKKworICBUcmFuc2xhdGlvbi5fY2FjaGUgPSB7fTsKKworICBUcmFuc2xhdGlvbi5sb2FkUGF0aCA9IGZ1bmN0aW9uIChwYXRoKSB7CisgICAgaWYgKCEocGF0aCBpbiBUcmFuc2xhdGlvbi5fY2FjaGUpKSB7CisgICAgICB2YXIgdHJhbnNsYXRpb25zID0gcmVxdWlyZShwYXRoKTsKKworICAgICAgVHJhbnNsYXRpb24uX2NhY2hlW3BhdGhdID0gdHJhbnNsYXRpb25zOworICAgIH0KKworICAgIHJldHVybiBuZXcgVHJhbnNsYXRpb24oVHJhbnNsYXRpb24uX2NhY2hlW3BhdGhdKTsKKyAgfTsKKworICByZXR1cm4gVHJhbnNsYXRpb247Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2RpYWNyaXRpY3MnLFsKKworXSwgZnVuY3Rpb24gKCkgeworICB2YXIgZGlhY3JpdGljcyA9IHsKKyAgICAnXHUyNEI2JzogJ0EnLAorICAgICdcdUZGMjEnOiAnQScsCisgICAgJ1x1MDBDMCc6ICdBJywKKyAgICAnXHUwMEMxJzogJ0EnLAorICAgICdcdTAwQzInOiAnQScsCisgICAgJ1x1MUVBNic6ICdBJywKKyAgICAnXHUxRUE0JzogJ0EnLAorICAgICdcdTFFQUEnOiAnQScsCisgICAgJ1x1MUVBOCc6ICdBJywKKyAgICAnXHUwMEMzJzogJ0EnLAorICAgICdcdTAxMDAnOiAnQScsCisgICAgJ1x1MDEwMic6ICdBJywKKyAgICAnXHUxRUIwJzogJ0EnLAorICAgICdcdTFFQUUnOiAnQScsCisgICAgJ1x1MUVCNCc6ICdBJywKKyAgICAnXHUxRUIyJzogJ0EnLAorICAgICdcdTAyMjYnOiAnQScsCisgICAgJ1x1MDFFMCc6ICdBJywKKyAgICAnXHUwMEM0JzogJ0EnLAorICAgICdcdTAxREUnOiAnQScsCisgICAgJ1x1MUVBMic6ICdBJywKKyAgICAnXHUwMEM1JzogJ0EnLAorICAgICdcdTAxRkEnOiAnQScsCisgICAgJ1x1MDFDRCc6ICdBJywKKyAgICAnXHUwMjAwJzogJ0EnLAorICAgICdcdTAyMDInOiAnQScsCisgICAgJ1x1MUVBMCc6ICdBJywKKyAgICAnXHUxRUFDJzogJ0EnLAorICAgICdcdTFFQjYnOiAnQScsCisgICAgJ1x1MUUwMCc6ICdBJywKKyAgICAnXHUwMTA0JzogJ0EnLAorICAgICdcdTAyM0EnOiAnQScsCisgICAgJ1x1MkM2Ric6ICdBJywKKyAgICAnXHVBNzMyJzogJ0FBJywKKyAgICAnXHUwMEM2JzogJ0FFJywKKyAgICAnXHUwMUZDJzogJ0FFJywKKyAgICAnXHUwMUUyJzogJ0FFJywKKyAgICAnXHVBNzM0JzogJ0FPJywKKyAgICAnXHVBNzM2JzogJ0FVJywKKyAgICAnXHVBNzM4JzogJ0FWJywKKyAgICAnXHVBNzNBJzogJ0FWJywKKyAgICAnXHVBNzNDJzogJ0FZJywKKyAgICAnXHUyNEI3JzogJ0InLAorICAgICdcdUZGMjInOiAnQicsCisgICAgJ1x1MUUwMic6ICdCJywKKyAgICAnXHUxRTA0JzogJ0InLAorICAgICdcdTFFMDYnOiAnQicsCisgICAgJ1x1MDI0Myc6ICdCJywKKyAgICAnXHUwMTgyJzogJ0InLAorICAgICdcdTAxODEnOiAnQicsCisgICAgJ1x1MjRCOCc6ICdDJywKKyAgICAnXHVGRjIzJzogJ0MnLAorICAgICdcdTAxMDYnOiAnQycsCisgICAgJ1x1MDEwOCc6ICdDJywKKyAgICAnXHUwMTBBJzogJ0MnLAorICAgICdcdTAxMEMnOiAnQycsCisgICAgJ1x1MDBDNyc6ICdDJywKKyAgICAnXHUxRTA4JzogJ0MnLAorICAgICdcdTAxODcnOiAnQycsCisgICAgJ1x1MDIzQic6ICdDJywKKyAgICAnXHVBNzNFJzogJ0MnLAorICAgICdcdTI0QjknOiAnRCcsCisgICAgJ1x1RkYyNCc6ICdEJywKKyAgICAnXHUxRTBBJzogJ0QnLAorICAgICdcdTAxMEUnOiAnRCcsCisgICAgJ1x1MUUwQyc6ICdEJywKKyAgICAnXHUxRTEwJzogJ0QnLAorICAgICdcdTFFMTInOiAnRCcsCisgICAgJ1x1MUUwRSc6ICdEJywKKyAgICAnXHUwMTEwJzogJ0QnLAorICAgICdcdTAxOEInOiAnRCcsCisgICAgJ1x1MDE4QSc6ICdEJywKKyAgICAnXHUwMTg5JzogJ0QnLAorICAgICdcdUE3NzknOiAnRCcsCisgICAgJ1x1MDFGMSc6ICdEWicsCisgICAgJ1x1MDFDNCc6ICdEWicsCisgICAgJ1x1MDFGMic6ICdEeicsCisgICAgJ1x1MDFDNSc6ICdEeicsCisgICAgJ1x1MjRCQSc6ICdFJywKKyAgICAnXHVGRjI1JzogJ0UnLAorICAgICdcdTAwQzgnOiAnRScsCisgICAgJ1x1MDBDOSc6ICdFJywKKyAgICAnXHUwMENBJzogJ0UnLAorICAgICdcdTFFQzAnOiAnRScsCisgICAgJ1x1MUVCRSc6ICdFJywKKyAgICAnXHUxRUM0JzogJ0UnLAorICAgICdcdTFFQzInOiAnRScsCisgICAgJ1x1MUVCQyc6ICdFJywKKyAgICAnXHUwMTEyJzogJ0UnLAorICAgICdcdTFFMTQnOiAnRScsCisgICAgJ1x1MUUxNic6ICdFJywKKyAgICAnXHUwMTE0JzogJ0UnLAorICAgICdcdTAxMTYnOiAnRScsCisgICAgJ1x1MDBDQic6ICdFJywKKyAgICAnXHUxRUJBJzogJ0UnLAorICAgICdcdTAxMUEnOiAnRScsCisgICAgJ1x1MDIwNCc6ICdFJywKKyAgICAnXHUwMjA2JzogJ0UnLAorICAgICdcdTFFQjgnOiAnRScsCisgICAgJ1x1MUVDNic6ICdFJywKKyAgICAnXHUwMjI4JzogJ0UnLAorICAgICdcdTFFMUMnOiAnRScsCisgICAgJ1x1MDExOCc6ICdFJywKKyAgICAnXHUxRTE4JzogJ0UnLAorICAgICdcdTFFMUEnOiAnRScsCisgICAgJ1x1MDE5MCc6ICdFJywKKyAgICAnXHUwMThFJzogJ0UnLAorICAgICdcdTI0QkInOiAnRicsCisgICAgJ1x1RkYyNic6ICdGJywKKyAgICAnXHUxRTFFJzogJ0YnLAorICAgICdcdTAxOTEnOiAnRicsCisgICAgJ1x1QTc3Qic6ICdGJywKKyAgICAnXHUyNEJDJzogJ0cnLAorICAgICdcdUZGMjcnOiAnRycsCisgICAgJ1x1MDFGNCc6ICdHJywKKyAgICAnXHUwMTFDJzogJ0cnLAorICAgICdcdTFFMjAnOiAnRycsCisgICAgJ1x1MDExRSc6ICdHJywKKyAgICAnXHUwMTIwJzogJ0cnLAorICAgICdcdTAxRTYnOiAnRycsCisgICAgJ1x1MDEyMic6ICdHJywKKyAgICAnXHUwMUU0JzogJ0cnLAorICAgICdcdTAxOTMnOiAnRycsCisgICAgJ1x1QTdBMCc6ICdHJywKKyAgICAnXHVBNzdEJzogJ0cnLAorICAgICdcdUE3N0UnOiAnRycsCisgICAgJ1x1MjRCRCc6ICdIJywKKyAgICAnXHVGRjI4JzogJ0gnLAorICAgICdcdTAxMjQnOiAnSCcsCisgICAgJ1x1MUUyMic6ICdIJywKKyAgICAnXHUxRTI2JzogJ0gnLAorICAgICdcdTAyMUUnOiAnSCcsCisgICAgJ1x1MUUyNCc6ICdIJywKKyAgICAnXHUxRTI4JzogJ0gnLAorICAgICdcdTFFMkEnOiAnSCcsCisgICAgJ1x1MDEyNic6ICdIJywKKyAgICAnXHUyQzY3JzogJ0gnLAorICAgICdcdTJDNzUnOiAnSCcsCisgICAgJ1x1QTc4RCc6ICdIJywKKyAgICAnXHUyNEJFJzogJ0knLAorICAgICdcdUZGMjknOiAnSScsCisgICAgJ1x1MDBDQyc6ICdJJywKKyAgICAnXHUwMENEJzogJ0knLAorICAgICdcdTAwQ0UnOiAnSScsCisgICAgJ1x1MDEyOCc6ICdJJywKKyAgICAnXHUwMTJBJzogJ0knLAorICAgICdcdTAxMkMnOiAnSScsCisgICAgJ1x1MDEzMCc6ICdJJywKKyAgICAnXHUwMENGJzogJ0knLAorICAgICdcdTFFMkUnOiAnSScsCisgICAgJ1x1MUVDOCc6ICdJJywKKyAgICAnXHUwMUNGJzogJ0knLAorICAgICdcdTAyMDgnOiAnSScsCisgICAgJ1x1MDIwQSc6ICdJJywKKyAgICAnXHUxRUNBJzogJ0knLAorICAgICdcdTAxMkUnOiAnSScsCisgICAgJ1x1MUUyQyc6ICdJJywKKyAgICAnXHUwMTk3JzogJ0knLAorICAgICdcdTI0QkYnOiAnSicsCisgICAgJ1x1RkYyQSc6ICdKJywKKyAgICAnXHUwMTM0JzogJ0onLAorICAgICdcdTAyNDgnOiAnSicsCisgICAgJ1x1MjRDMCc6ICdLJywKKyAgICAnXHVGRjJCJzogJ0snLAorICAgICdcdTFFMzAnOiAnSycsCisgICAgJ1x1MDFFOCc6ICdLJywKKyAgICAnXHUxRTMyJzogJ0snLAorICAgICdcdTAxMzYnOiAnSycsCisgICAgJ1x1MUUzNCc6ICdLJywKKyAgICAnXHUwMTk4JzogJ0snLAorICAgICdcdTJDNjknOiAnSycsCisgICAgJ1x1QTc0MCc6ICdLJywKKyAgICAnXHVBNzQyJzogJ0snLAorICAgICdcdUE3NDQnOiAnSycsCisgICAgJ1x1QTdBMic6ICdLJywKKyAgICAnXHUyNEMxJzogJ0wnLAorICAgICdcdUZGMkMnOiAnTCcsCisgICAgJ1x1MDEzRic6ICdMJywKKyAgICAnXHUwMTM5JzogJ0wnLAorICAgICdcdTAxM0QnOiAnTCcsCisgICAgJ1x1MUUzNic6ICdMJywKKyAgICAnXHUxRTM4JzogJ0wnLAorICAgICdcdTAxM0InOiAnTCcsCisgICAgJ1x1MUUzQyc6ICdMJywKKyAgICAnXHUxRTNBJzogJ0wnLAorICAgICdcdTAxNDEnOiAnTCcsCisgICAgJ1x1MDIzRCc6ICdMJywKKyAgICAnXHUyQzYyJzogJ0wnLAorICAgICdcdTJDNjAnOiAnTCcsCisgICAgJ1x1QTc0OCc6ICdMJywKKyAgICAnXHVBNzQ2JzogJ0wnLAorICAgICdcdUE3ODAnOiAnTCcsCisgICAgJ1x1MDFDNyc6ICdMSicsCisgICAgJ1x1MDFDOCc6ICdMaicsCisgICAgJ1x1MjRDMic6ICdNJywKKyAgICAnXHVGRjJEJzogJ00nLAorICAgICdcdTFFM0UnOiAnTScsCisgICAgJ1x1MUU0MCc6ICdNJywKKyAgICAnXHUxRTQyJzogJ00nLAorICAgICdcdTJDNkUnOiAnTScsCisgICAgJ1x1MDE5Qyc6ICdNJywKKyAgICAnXHUyNEMzJzogJ04nLAorICAgICdcdUZGMkUnOiAnTicsCisgICAgJ1x1MDFGOCc6ICdOJywKKyAgICAnXHUwMTQzJzogJ04nLAorICAgICdcdTAwRDEnOiAnTicsCisgICAgJ1x1MUU0NCc6ICdOJywKKyAgICAnXHUwMTQ3JzogJ04nLAorICAgICdcdTFFNDYnOiAnTicsCisgICAgJ1x1MDE0NSc6ICdOJywKKyAgICAnXHUxRTRBJzogJ04nLAorICAgICdcdTFFNDgnOiAnTicsCisgICAgJ1x1MDIyMCc6ICdOJywKKyAgICAnXHUwMTlEJzogJ04nLAorICAgICdcdUE3OTAnOiAnTicsCisgICAgJ1x1QTdBNCc6ICdOJywKKyAgICAnXHUwMUNBJzogJ05KJywKKyAgICAnXHUwMUNCJzogJ05qJywKKyAgICAnXHUyNEM0JzogJ08nLAorICAgICdcdUZGMkYnOiAnTycsCisgICAgJ1x1MDBEMic6ICdPJywKKyAgICAnXHUwMEQzJzogJ08nLAorICAgICdcdTAwRDQnOiAnTycsCisgICAgJ1x1MUVEMic6ICdPJywKKyAgICAnXHUxRUQwJzogJ08nLAorICAgICdcdTFFRDYnOiAnTycsCisgICAgJ1x1MUVENCc6ICdPJywKKyAgICAnXHUwMEQ1JzogJ08nLAorICAgICdcdTFFNEMnOiAnTycsCisgICAgJ1x1MDIyQyc6ICdPJywKKyAgICAnXHUxRTRFJzogJ08nLAorICAgICdcdTAxNEMnOiAnTycsCisgICAgJ1x1MUU1MCc6ICdPJywKKyAgICAnXHUxRTUyJzogJ08nLAorICAgICdcdTAxNEUnOiAnTycsCisgICAgJ1x1MDIyRSc6ICdPJywKKyAgICAnXHUwMjMwJzogJ08nLAorICAgICdcdTAwRDYnOiAnTycsCisgICAgJ1x1MDIyQSc6ICdPJywKKyAgICAnXHUxRUNFJzogJ08nLAorICAgICdcdTAxNTAnOiAnTycsCisgICAgJ1x1MDFEMSc6ICdPJywKKyAgICAnXHUwMjBDJzogJ08nLAorICAgICdcdTAyMEUnOiAnTycsCisgICAgJ1x1MDFBMCc6ICdPJywKKyAgICAnXHUxRURDJzogJ08nLAorICAgICdcdTFFREEnOiAnTycsCisgICAgJ1x1MUVFMCc6ICdPJywKKyAgICAnXHUxRURFJzogJ08nLAorICAgICdcdTFFRTInOiAnTycsCisgICAgJ1x1MUVDQyc6ICdPJywKKyAgICAnXHUxRUQ4JzogJ08nLAorICAgICdcdTAxRUEnOiAnTycsCisgICAgJ1x1MDFFQyc6ICdPJywKKyAgICAnXHUwMEQ4JzogJ08nLAorICAgICdcdTAxRkUnOiAnTycsCisgICAgJ1x1MDE4Nic6ICdPJywKKyAgICAnXHUwMTlGJzogJ08nLAorICAgICdcdUE3NEEnOiAnTycsCisgICAgJ1x1QTc0Qyc6ICdPJywKKyAgICAnXHUwMUEyJzogJ09JJywKKyAgICAnXHVBNzRFJzogJ09PJywKKyAgICAnXHUwMjIyJzogJ09VJywKKyAgICAnXHUyNEM1JzogJ1AnLAorICAgICdcdUZGMzAnOiAnUCcsCisgICAgJ1x1MUU1NCc6ICdQJywKKyAgICAnXHUxRTU2JzogJ1AnLAorICAgICdcdTAxQTQnOiAnUCcsCisgICAgJ1x1MkM2Myc6ICdQJywKKyAgICAnXHVBNzUwJzogJ1AnLAorICAgICdcdUE3NTInOiAnUCcsCisgICAgJ1x1QTc1NCc6ICdQJywKKyAgICAnXHUyNEM2JzogJ1EnLAorICAgICdcdUZGMzEnOiAnUScsCisgICAgJ1x1QTc1Nic6ICdRJywKKyAgICAnXHVBNzU4JzogJ1EnLAorICAgICdcdTAyNEEnOiAnUScsCisgICAgJ1x1MjRDNyc6ICdSJywKKyAgICAnXHVGRjMyJzogJ1InLAorICAgICdcdTAxNTQnOiAnUicsCisgICAgJ1x1MUU1OCc6ICdSJywKKyAgICAnXHUwMTU4JzogJ1InLAorICAgICdcdTAyMTAnOiAnUicsCisgICAgJ1x1MDIxMic6ICdSJywKKyAgICAnXHUxRTVBJzogJ1InLAorICAgICdcdTFFNUMnOiAnUicsCisgICAgJ1x1MDE1Nic6ICdSJywKKyAgICAnXHUxRTVFJzogJ1InLAorICAgICdcdTAyNEMnOiAnUicsCisgICAgJ1x1MkM2NCc6ICdSJywKKyAgICAnXHVBNzVBJzogJ1InLAorICAgICdcdUE3QTYnOiAnUicsCisgICAgJ1x1QTc4Mic6ICdSJywKKyAgICAnXHUyNEM4JzogJ1MnLAorICAgICdcdUZGMzMnOiAnUycsCisgICAgJ1x1MUU5RSc6ICdTJywKKyAgICAnXHUwMTVBJzogJ1MnLAorICAgICdcdTFFNjQnOiAnUycsCisgICAgJ1x1MDE1Qyc6ICdTJywKKyAgICAnXHUxRTYwJzogJ1MnLAorICAgICdcdTAxNjAnOiAnUycsCisgICAgJ1x1MUU2Nic6ICdTJywKKyAgICAnXHUxRTYyJzogJ1MnLAorICAgICdcdTFFNjgnOiAnUycsCisgICAgJ1x1MDIxOCc6ICdTJywKKyAgICAnXHUwMTVFJzogJ1MnLAorICAgICdcdTJDN0UnOiAnUycsCisgICAgJ1x1QTdBOCc6ICdTJywKKyAgICAnXHVBNzg0JzogJ1MnLAorICAgICdcdTI0QzknOiAnVCcsCisgICAgJ1x1RkYzNCc6ICdUJywKKyAgICAnXHUxRTZBJzogJ1QnLAorICAgICdcdTAxNjQnOiAnVCcsCisgICAgJ1x1MUU2Qyc6ICdUJywKKyAgICAnXHUwMjFBJzogJ1QnLAorICAgICdcdTAxNjInOiAnVCcsCisgICAgJ1x1MUU3MCc6ICdUJywKKyAgICAnXHUxRTZFJzogJ1QnLAorICAgICdcdTAxNjYnOiAnVCcsCisgICAgJ1x1MDFBQyc6ICdUJywKKyAgICAnXHUwMUFFJzogJ1QnLAorICAgICdcdTAyM0UnOiAnVCcsCisgICAgJ1x1QTc4Nic6ICdUJywKKyAgICAnXHVBNzI4JzogJ1RaJywKKyAgICAnXHUyNENBJzogJ1UnLAorICAgICdcdUZGMzUnOiAnVScsCisgICAgJ1x1MDBEOSc6ICdVJywKKyAgICAnXHUwMERBJzogJ1UnLAorICAgICdcdTAwREInOiAnVScsCisgICAgJ1x1MDE2OCc6ICdVJywKKyAgICAnXHUxRTc4JzogJ1UnLAorICAgICdcdTAxNkEnOiAnVScsCisgICAgJ1x1MUU3QSc6ICdVJywKKyAgICAnXHUwMTZDJzogJ1UnLAorICAgICdcdTAwREMnOiAnVScsCisgICAgJ1x1MDFEQic6ICdVJywKKyAgICAnXHUwMUQ3JzogJ1UnLAorICAgICdcdTAxRDUnOiAnVScsCisgICAgJ1x1MDFEOSc6ICdVJywKKyAgICAnXHUxRUU2JzogJ1UnLAorICAgICdcdTAxNkUnOiAnVScsCisgICAgJ1x1MDE3MCc6ICdVJywKKyAgICAnXHUwMUQzJzogJ1UnLAorICAgICdcdTAyMTQnOiAnVScsCisgICAgJ1x1MDIxNic6ICdVJywKKyAgICAnXHUwMUFGJzogJ1UnLAorICAgICdcdTFFRUEnOiAnVScsCisgICAgJ1x1MUVFOCc6ICdVJywKKyAgICAnXHUxRUVFJzogJ1UnLAorICAgICdcdTFFRUMnOiAnVScsCisgICAgJ1x1MUVGMCc6ICdVJywKKyAgICAnXHUxRUU0JzogJ1UnLAorICAgICdcdTFFNzInOiAnVScsCisgICAgJ1x1MDE3Mic6ICdVJywKKyAgICAnXHUxRTc2JzogJ1UnLAorICAgICdcdTFFNzQnOiAnVScsCisgICAgJ1x1MDI0NCc6ICdVJywKKyAgICAnXHUyNENCJzogJ1YnLAorICAgICdcdUZGMzYnOiAnVicsCisgICAgJ1x1MUU3Qyc6ICdWJywKKyAgICAnXHUxRTdFJzogJ1YnLAorICAgICdcdTAxQjInOiAnVicsCisgICAgJ1x1QTc1RSc6ICdWJywKKyAgICAnXHUwMjQ1JzogJ1YnLAorICAgICdcdUE3NjAnOiAnVlknLAorICAgICdcdTI0Q0MnOiAnVycsCisgICAgJ1x1RkYzNyc6ICdXJywKKyAgICAnXHUxRTgwJzogJ1cnLAorICAgICdcdTFFODInOiAnVycsCisgICAgJ1x1MDE3NCc6ICdXJywKKyAgICAnXHUxRTg2JzogJ1cnLAorICAgICdcdTFFODQnOiAnVycsCisgICAgJ1x1MUU4OCc6ICdXJywKKyAgICAnXHUyQzcyJzogJ1cnLAorICAgICdcdTI0Q0QnOiAnWCcsCisgICAgJ1x1RkYzOCc6ICdYJywKKyAgICAnXHUxRThBJzogJ1gnLAorICAgICdcdTFFOEMnOiAnWCcsCisgICAgJ1x1MjRDRSc6ICdZJywKKyAgICAnXHVGRjM5JzogJ1knLAorICAgICdcdTFFRjInOiAnWScsCisgICAgJ1x1MDBERCc6ICdZJywKKyAgICAnXHUwMTc2JzogJ1knLAorICAgICdcdTFFRjgnOiAnWScsCisgICAgJ1x1MDIzMic6ICdZJywKKyAgICAnXHUxRThFJzogJ1knLAorICAgICdcdTAxNzgnOiAnWScsCisgICAgJ1x1MUVGNic6ICdZJywKKyAgICAnXHUxRUY0JzogJ1knLAorICAgICdcdTAxQjMnOiAnWScsCisgICAgJ1x1MDI0RSc6ICdZJywKKyAgICAnXHUxRUZFJzogJ1knLAorICAgICdcdTI0Q0YnOiAnWicsCisgICAgJ1x1RkYzQSc6ICdaJywKKyAgICAnXHUwMTc5JzogJ1onLAorICAgICdcdTFFOTAnOiAnWicsCisgICAgJ1x1MDE3Qic6ICdaJywKKyAgICAnXHUwMTdEJzogJ1onLAorICAgICdcdTFFOTInOiAnWicsCisgICAgJ1x1MUU5NCc6ICdaJywKKyAgICAnXHUwMUI1JzogJ1onLAorICAgICdcdTAyMjQnOiAnWicsCisgICAgJ1x1MkM3Ric6ICdaJywKKyAgICAnXHUyQzZCJzogJ1onLAorICAgICdcdUE3NjInOiAnWicsCisgICAgJ1x1MjREMCc6ICdhJywKKyAgICAnXHVGRjQxJzogJ2EnLAorICAgICdcdTFFOUEnOiAnYScsCisgICAgJ1x1MDBFMCc6ICdhJywKKyAgICAnXHUwMEUxJzogJ2EnLAorICAgICdcdTAwRTInOiAnYScsCisgICAgJ1x1MUVBNyc6ICdhJywKKyAgICAnXHUxRUE1JzogJ2EnLAorICAgICdcdTFFQUInOiAnYScsCisgICAgJ1x1MUVBOSc6ICdhJywKKyAgICAnXHUwMEUzJzogJ2EnLAorICAgICdcdTAxMDEnOiAnYScsCisgICAgJ1x1MDEwMyc6ICdhJywKKyAgICAnXHUxRUIxJzogJ2EnLAorICAgICdcdTFFQUYnOiAnYScsCisgICAgJ1x1MUVCNSc6ICdhJywKKyAgICAnXHUxRUIzJzogJ2EnLAorICAgICdcdTAyMjcnOiAnYScsCisgICAgJ1x1MDFFMSc6ICdhJywKKyAgICAnXHUwMEU0JzogJ2EnLAorICAgICdcdTAxREYnOiAnYScsCisgICAgJ1x1MUVBMyc6ICdhJywKKyAgICAnXHUwMEU1JzogJ2EnLAorICAgICdcdTAxRkInOiAnYScsCisgICAgJ1x1MDFDRSc6ICdhJywKKyAgICAnXHUwMjAxJzogJ2EnLAorICAgICdcdTAyMDMnOiAnYScsCisgICAgJ1x1MUVBMSc6ICdhJywKKyAgICAnXHUxRUFEJzogJ2EnLAorICAgICdcdTFFQjcnOiAnYScsCisgICAgJ1x1MUUwMSc6ICdhJywKKyAgICAnXHUwMTA1JzogJ2EnLAorICAgICdcdTJDNjUnOiAnYScsCisgICAgJ1x1MDI1MCc6ICdhJywKKyAgICAnXHVBNzMzJzogJ2FhJywKKyAgICAnXHUwMEU2JzogJ2FlJywKKyAgICAnXHUwMUZEJzogJ2FlJywKKyAgICAnXHUwMUUzJzogJ2FlJywKKyAgICAnXHVBNzM1JzogJ2FvJywKKyAgICAnXHVBNzM3JzogJ2F1JywKKyAgICAnXHVBNzM5JzogJ2F2JywKKyAgICAnXHVBNzNCJzogJ2F2JywKKyAgICAnXHVBNzNEJzogJ2F5JywKKyAgICAnXHUyNEQxJzogJ2InLAorICAgICdcdUZGNDInOiAnYicsCisgICAgJ1x1MUUwMyc6ICdiJywKKyAgICAnXHUxRTA1JzogJ2InLAorICAgICdcdTFFMDcnOiAnYicsCisgICAgJ1x1MDE4MCc6ICdiJywKKyAgICAnXHUwMTgzJzogJ2InLAorICAgICdcdTAyNTMnOiAnYicsCisgICAgJ1x1MjREMic6ICdjJywKKyAgICAnXHVGRjQzJzogJ2MnLAorICAgICdcdTAxMDcnOiAnYycsCisgICAgJ1x1MDEwOSc6ICdjJywKKyAgICAnXHUwMTBCJzogJ2MnLAorICAgICdcdTAxMEQnOiAnYycsCisgICAgJ1x1MDBFNyc6ICdjJywKKyAgICAnXHUxRTA5JzogJ2MnLAorICAgICdcdTAxODgnOiAnYycsCisgICAgJ1x1MDIzQyc6ICdjJywKKyAgICAnXHVBNzNGJzogJ2MnLAorICAgICdcdTIxODQnOiAnYycsCisgICAgJ1x1MjREMyc6ICdkJywKKyAgICAnXHVGRjQ0JzogJ2QnLAorICAgICdcdTFFMEInOiAnZCcsCisgICAgJ1x1MDEwRic6ICdkJywKKyAgICAnXHUxRTBEJzogJ2QnLAorICAgICdcdTFFMTEnOiAnZCcsCisgICAgJ1x1MUUxMyc6ICdkJywKKyAgICAnXHUxRTBGJzogJ2QnLAorICAgICdcdTAxMTEnOiAnZCcsCisgICAgJ1x1MDE4Qyc6ICdkJywKKyAgICAnXHUwMjU2JzogJ2QnLAorICAgICdcdTAyNTcnOiAnZCcsCisgICAgJ1x1QTc3QSc6ICdkJywKKyAgICAnXHUwMUYzJzogJ2R6JywKKyAgICAnXHUwMUM2JzogJ2R6JywKKyAgICAnXHUyNEQ0JzogJ2UnLAorICAgICdcdUZGNDUnOiAnZScsCisgICAgJ1x1MDBFOCc6ICdlJywKKyAgICAnXHUwMEU5JzogJ2UnLAorICAgICdcdTAwRUEnOiAnZScsCisgICAgJ1x1MUVDMSc6ICdlJywKKyAgICAnXHUxRUJGJzogJ2UnLAorICAgICdcdTFFQzUnOiAnZScsCisgICAgJ1x1MUVDMyc6ICdlJywKKyAgICAnXHUxRUJEJzogJ2UnLAorICAgICdcdTAxMTMnOiAnZScsCisgICAgJ1x1MUUxNSc6ICdlJywKKyAgICAnXHUxRTE3JzogJ2UnLAorICAgICdcdTAxMTUnOiAnZScsCisgICAgJ1x1MDExNyc6ICdlJywKKyAgICAnXHUwMEVCJzogJ2UnLAorICAgICdcdTFFQkInOiAnZScsCisgICAgJ1x1MDExQic6ICdlJywKKyAgICAnXHUwMjA1JzogJ2UnLAorICAgICdcdTAyMDcnOiAnZScsCisgICAgJ1x1MUVCOSc6ICdlJywKKyAgICAnXHUxRUM3JzogJ2UnLAorICAgICdcdTAyMjknOiAnZScsCisgICAgJ1x1MUUxRCc6ICdlJywKKyAgICAnXHUwMTE5JzogJ2UnLAorICAgICdcdTFFMTknOiAnZScsCisgICAgJ1x1MUUxQic6ICdlJywKKyAgICAnXHUwMjQ3JzogJ2UnLAorICAgICdcdTAyNUInOiAnZScsCisgICAgJ1x1MDFERCc6ICdlJywKKyAgICAnXHUyNEQ1JzogJ2YnLAorICAgICdcdUZGNDYnOiAnZicsCisgICAgJ1x1MUUxRic6ICdmJywKKyAgICAnXHUwMTkyJzogJ2YnLAorICAgICdcdUE3N0MnOiAnZicsCisgICAgJ1x1MjRENic6ICdnJywKKyAgICAnXHVGRjQ3JzogJ2cnLAorICAgICdcdTAxRjUnOiAnZycsCisgICAgJ1x1MDExRCc6ICdnJywKKyAgICAnXHUxRTIxJzogJ2cnLAorICAgICdcdTAxMUYnOiAnZycsCisgICAgJ1x1MDEyMSc6ICdnJywKKyAgICAnXHUwMUU3JzogJ2cnLAorICAgICdcdTAxMjMnOiAnZycsCisgICAgJ1x1MDFFNSc6ICdnJywKKyAgICAnXHUwMjYwJzogJ2cnLAorICAgICdcdUE3QTEnOiAnZycsCisgICAgJ1x1MUQ3OSc6ICdnJywKKyAgICAnXHVBNzdGJzogJ2cnLAorICAgICdcdTI0RDcnOiAnaCcsCisgICAgJ1x1RkY0OCc6ICdoJywKKyAgICAnXHUwMTI1JzogJ2gnLAorICAgICdcdTFFMjMnOiAnaCcsCisgICAgJ1x1MUUyNyc6ICdoJywKKyAgICAnXHUwMjFGJzogJ2gnLAorICAgICdcdTFFMjUnOiAnaCcsCisgICAgJ1x1MUUyOSc6ICdoJywKKyAgICAnXHUxRTJCJzogJ2gnLAorICAgICdcdTFFOTYnOiAnaCcsCisgICAgJ1x1MDEyNyc6ICdoJywKKyAgICAnXHUyQzY4JzogJ2gnLAorICAgICdcdTJDNzYnOiAnaCcsCisgICAgJ1x1MDI2NSc6ICdoJywKKyAgICAnXHUwMTk1JzogJ2h2JywKKyAgICAnXHUyNEQ4JzogJ2knLAorICAgICdcdUZGNDknOiAnaScsCisgICAgJ1x1MDBFQyc6ICdpJywKKyAgICAnXHUwMEVEJzogJ2knLAorICAgICdcdTAwRUUnOiAnaScsCisgICAgJ1x1MDEyOSc6ICdpJywKKyAgICAnXHUwMTJCJzogJ2knLAorICAgICdcdTAxMkQnOiAnaScsCisgICAgJ1x1MDBFRic6ICdpJywKKyAgICAnXHUxRTJGJzogJ2knLAorICAgICdcdTFFQzknOiAnaScsCisgICAgJ1x1MDFEMCc6ICdpJywKKyAgICAnXHUwMjA5JzogJ2knLAorICAgICdcdTAyMEInOiAnaScsCisgICAgJ1x1MUVDQic6ICdpJywKKyAgICAnXHUwMTJGJzogJ2knLAorICAgICdcdTFFMkQnOiAnaScsCisgICAgJ1x1MDI2OCc6ICdpJywKKyAgICAnXHUwMTMxJzogJ2knLAorICAgICdcdTI0RDknOiAnaicsCisgICAgJ1x1RkY0QSc6ICdqJywKKyAgICAnXHUwMTM1JzogJ2onLAorICAgICdcdTAxRjAnOiAnaicsCisgICAgJ1x1MDI0OSc6ICdqJywKKyAgICAnXHUyNERBJzogJ2snLAorICAgICdcdUZGNEInOiAnaycsCisgICAgJ1x1MUUzMSc6ICdrJywKKyAgICAnXHUwMUU5JzogJ2snLAorICAgICdcdTFFMzMnOiAnaycsCisgICAgJ1x1MDEzNyc6ICdrJywKKyAgICAnXHUxRTM1JzogJ2snLAorICAgICdcdTAxOTknOiAnaycsCisgICAgJ1x1MkM2QSc6ICdrJywKKyAgICAnXHVBNzQxJzogJ2snLAorICAgICdcdUE3NDMnOiAnaycsCisgICAgJ1x1QTc0NSc6ICdrJywKKyAgICAnXHVBN0EzJzogJ2snLAorICAgICdcdTI0REInOiAnbCcsCisgICAgJ1x1RkY0Qyc6ICdsJywKKyAgICAnXHUwMTQwJzogJ2wnLAorICAgICdcdTAxM0EnOiAnbCcsCisgICAgJ1x1MDEzRSc6ICdsJywKKyAgICAnXHUxRTM3JzogJ2wnLAorICAgICdcdTFFMzknOiAnbCcsCisgICAgJ1x1MDEzQyc6ICdsJywKKyAgICAnXHUxRTNEJzogJ2wnLAorICAgICdcdTFFM0InOiAnbCcsCisgICAgJ1x1MDE3Ric6ICdsJywKKyAgICAnXHUwMTQyJzogJ2wnLAorICAgICdcdTAxOUEnOiAnbCcsCisgICAgJ1x1MDI2Qic6ICdsJywKKyAgICAnXHUyQzYxJzogJ2wnLAorICAgICdcdUE3NDknOiAnbCcsCisgICAgJ1x1QTc4MSc6ICdsJywKKyAgICAnXHVBNzQ3JzogJ2wnLAorICAgICdcdTAxQzknOiAnbGonLAorICAgICdcdTI0REMnOiAnbScsCisgICAgJ1x1RkY0RCc6ICdtJywKKyAgICAnXHUxRTNGJzogJ20nLAorICAgICdcdTFFNDEnOiAnbScsCisgICAgJ1x1MUU0Myc6ICdtJywKKyAgICAnXHUwMjcxJzogJ20nLAorICAgICdcdTAyNkYnOiAnbScsCisgICAgJ1x1MjRERCc6ICduJywKKyAgICAnXHVGRjRFJzogJ24nLAorICAgICdcdTAxRjknOiAnbicsCisgICAgJ1x1MDE0NCc6ICduJywKKyAgICAnXHUwMEYxJzogJ24nLAorICAgICdcdTFFNDUnOiAnbicsCisgICAgJ1x1MDE0OCc6ICduJywKKyAgICAnXHUxRTQ3JzogJ24nLAorICAgICdcdTAxNDYnOiAnbicsCisgICAgJ1x1MUU0Qic6ICduJywKKyAgICAnXHUxRTQ5JzogJ24nLAorICAgICdcdTAxOUUnOiAnbicsCisgICAgJ1x1MDI3Mic6ICduJywKKyAgICAnXHUwMTQ5JzogJ24nLAorICAgICdcdUE3OTEnOiAnbicsCisgICAgJ1x1QTdBNSc6ICduJywKKyAgICAnXHUwMUNDJzogJ25qJywKKyAgICAnXHUyNERFJzogJ28nLAorICAgICdcdUZGNEYnOiAnbycsCisgICAgJ1x1MDBGMic6ICdvJywKKyAgICAnXHUwMEYzJzogJ28nLAorICAgICdcdTAwRjQnOiAnbycsCisgICAgJ1x1MUVEMyc6ICdvJywKKyAgICAnXHUxRUQxJzogJ28nLAorICAgICdcdTFFRDcnOiAnbycsCisgICAgJ1x1MUVENSc6ICdvJywKKyAgICAnXHUwMEY1JzogJ28nLAorICAgICdcdTFFNEQnOiAnbycsCisgICAgJ1x1MDIyRCc6ICdvJywKKyAgICAnXHUxRTRGJzogJ28nLAorICAgICdcdTAxNEQnOiAnbycsCisgICAgJ1x1MUU1MSc6ICdvJywKKyAgICAnXHUxRTUzJzogJ28nLAorICAgICdcdTAxNEYnOiAnbycsCisgICAgJ1x1MDIyRic6ICdvJywKKyAgICAnXHUwMjMxJzogJ28nLAorICAgICdcdTAwRjYnOiAnbycsCisgICAgJ1x1MDIyQic6ICdvJywKKyAgICAnXHUxRUNGJzogJ28nLAorICAgICdcdTAxNTEnOiAnbycsCisgICAgJ1x1MDFEMic6ICdvJywKKyAgICAnXHUwMjBEJzogJ28nLAorICAgICdcdTAyMEYnOiAnbycsCisgICAgJ1x1MDFBMSc6ICdvJywKKyAgICAnXHUxRUREJzogJ28nLAorICAgICdcdTFFREInOiAnbycsCisgICAgJ1x1MUVFMSc6ICdvJywKKyAgICAnXHUxRURGJzogJ28nLAorICAgICdcdTFFRTMnOiAnbycsCisgICAgJ1x1MUVDRCc6ICdvJywKKyAgICAnXHUxRUQ5JzogJ28nLAorICAgICdcdTAxRUInOiAnbycsCisgICAgJ1x1MDFFRCc6ICdvJywKKyAgICAnXHUwMEY4JzogJ28nLAorICAgICdcdTAxRkYnOiAnbycsCisgICAgJ1x1MDI1NCc6ICdvJywKKyAgICAnXHVBNzRCJzogJ28nLAorICAgICdcdUE3NEQnOiAnbycsCisgICAgJ1x1MDI3NSc6ICdvJywKKyAgICAnXHUwMUEzJzogJ29pJywKKyAgICAnXHUwMjIzJzogJ291JywKKyAgICAnXHVBNzRGJzogJ29vJywKKyAgICAnXHUyNERGJzogJ3AnLAorICAgICdcdUZGNTAnOiAncCcsCisgICAgJ1x1MUU1NSc6ICdwJywKKyAgICAnXHUxRTU3JzogJ3AnLAorICAgICdcdTAxQTUnOiAncCcsCisgICAgJ1x1MUQ3RCc6ICdwJywKKyAgICAnXHVBNzUxJzogJ3AnLAorICAgICdcdUE3NTMnOiAncCcsCisgICAgJ1x1QTc1NSc6ICdwJywKKyAgICAnXHUyNEUwJzogJ3EnLAorICAgICdcdUZGNTEnOiAncScsCisgICAgJ1x1MDI0Qic6ICdxJywKKyAgICAnXHVBNzU3JzogJ3EnLAorICAgICdcdUE3NTknOiAncScsCisgICAgJ1x1MjRFMSc6ICdyJywKKyAgICAnXHVGRjUyJzogJ3InLAorICAgICdcdTAxNTUnOiAncicsCisgICAgJ1x1MUU1OSc6ICdyJywKKyAgICAnXHUwMTU5JzogJ3InLAorICAgICdcdTAyMTEnOiAncicsCisgICAgJ1x1MDIxMyc6ICdyJywKKyAgICAnXHUxRTVCJzogJ3InLAorICAgICdcdTFFNUQnOiAncicsCisgICAgJ1x1MDE1Nyc6ICdyJywKKyAgICAnXHUxRTVGJzogJ3InLAorICAgICdcdTAyNEQnOiAncicsCisgICAgJ1x1MDI3RCc6ICdyJywKKyAgICAnXHVBNzVCJzogJ3InLAorICAgICdcdUE3QTcnOiAncicsCisgICAgJ1x1QTc4Myc6ICdyJywKKyAgICAnXHUyNEUyJzogJ3MnLAorICAgICdcdUZGNTMnOiAncycsCisgICAgJ1x1MDBERic6ICdzJywKKyAgICAnXHUwMTVCJzogJ3MnLAorICAgICdcdTFFNjUnOiAncycsCisgICAgJ1x1MDE1RCc6ICdzJywKKyAgICAnXHUxRTYxJzogJ3MnLAorICAgICdcdTAxNjEnOiAncycsCisgICAgJ1x1MUU2Nyc6ICdzJywKKyAgICAnXHUxRTYzJzogJ3MnLAorICAgICdcdTFFNjknOiAncycsCisgICAgJ1x1MDIxOSc6ICdzJywKKyAgICAnXHUwMTVGJzogJ3MnLAorICAgICdcdTAyM0YnOiAncycsCisgICAgJ1x1QTdBOSc6ICdzJywKKyAgICAnXHVBNzg1JzogJ3MnLAorICAgICdcdTFFOUInOiAncycsCisgICAgJ1x1MjRFMyc6ICd0JywKKyAgICAnXHVGRjU0JzogJ3QnLAorICAgICdcdTFFNkInOiAndCcsCisgICAgJ1x1MUU5Nyc6ICd0JywKKyAgICAnXHUwMTY1JzogJ3QnLAorICAgICdcdTFFNkQnOiAndCcsCisgICAgJ1x1MDIxQic6ICd0JywKKyAgICAnXHUwMTYzJzogJ3QnLAorICAgICdcdTFFNzEnOiAndCcsCisgICAgJ1x1MUU2Ric6ICd0JywKKyAgICAnXHUwMTY3JzogJ3QnLAorICAgICdcdTAxQUQnOiAndCcsCisgICAgJ1x1MDI4OCc6ICd0JywKKyAgICAnXHUyQzY2JzogJ3QnLAorICAgICdcdUE3ODcnOiAndCcsCisgICAgJ1x1QTcyOSc6ICd0eicsCisgICAgJ1x1MjRFNCc6ICd1JywKKyAgICAnXHVGRjU1JzogJ3UnLAorICAgICdcdTAwRjknOiAndScsCisgICAgJ1x1MDBGQSc6ICd1JywKKyAgICAnXHUwMEZCJzogJ3UnLAorICAgICdcdTAxNjknOiAndScsCisgICAgJ1x1MUU3OSc6ICd1JywKKyAgICAnXHUwMTZCJzogJ3UnLAorICAgICdcdTFFN0InOiAndScsCisgICAgJ1x1MDE2RCc6ICd1JywKKyAgICAnXHUwMEZDJzogJ3UnLAorICAgICdcdTAxREMnOiAndScsCisgICAgJ1x1MDFEOCc6ICd1JywKKyAgICAnXHUwMUQ2JzogJ3UnLAorICAgICdcdTAxREEnOiAndScsCisgICAgJ1x1MUVFNyc6ICd1JywKKyAgICAnXHUwMTZGJzogJ3UnLAorICAgICdcdTAxNzEnOiAndScsCisgICAgJ1x1MDFENCc6ICd1JywKKyAgICAnXHUwMjE1JzogJ3UnLAorICAgICdcdTAyMTcnOiAndScsCisgICAgJ1x1MDFCMCc6ICd1JywKKyAgICAnXHUxRUVCJzogJ3UnLAorICAgICdcdTFFRTknOiAndScsCisgICAgJ1x1MUVFRic6ICd1JywKKyAgICAnXHUxRUVEJzogJ3UnLAorICAgICdcdTFFRjEnOiAndScsCisgICAgJ1x1MUVFNSc6ICd1JywKKyAgICAnXHUxRTczJzogJ3UnLAorICAgICdcdTAxNzMnOiAndScsCisgICAgJ1x1MUU3Nyc6ICd1JywKKyAgICAnXHUxRTc1JzogJ3UnLAorICAgICdcdTAyODknOiAndScsCisgICAgJ1x1MjRFNSc6ICd2JywKKyAgICAnXHVGRjU2JzogJ3YnLAorICAgICdcdTFFN0QnOiAndicsCisgICAgJ1x1MUU3Ric6ICd2JywKKyAgICAnXHUwMjhCJzogJ3YnLAorICAgICdcdUE3NUYnOiAndicsCisgICAgJ1x1MDI4Qyc6ICd2JywKKyAgICAnXHVBNzYxJzogJ3Z5JywKKyAgICAnXHUyNEU2JzogJ3cnLAorICAgICdcdUZGNTcnOiAndycsCisgICAgJ1x1MUU4MSc6ICd3JywKKyAgICAnXHUxRTgzJzogJ3cnLAorICAgICdcdTAxNzUnOiAndycsCisgICAgJ1x1MUU4Nyc6ICd3JywKKyAgICAnXHUxRTg1JzogJ3cnLAorICAgICdcdTFFOTgnOiAndycsCisgICAgJ1x1MUU4OSc6ICd3JywKKyAgICAnXHUyQzczJzogJ3cnLAorICAgICdcdTI0RTcnOiAneCcsCisgICAgJ1x1RkY1OCc6ICd4JywKKyAgICAnXHUxRThCJzogJ3gnLAorICAgICdcdTFFOEQnOiAneCcsCisgICAgJ1x1MjRFOCc6ICd5JywKKyAgICAnXHVGRjU5JzogJ3knLAorICAgICdcdTFFRjMnOiAneScsCisgICAgJ1x1MDBGRCc6ICd5JywKKyAgICAnXHUwMTc3JzogJ3knLAorICAgICdcdTFFRjknOiAneScsCisgICAgJ1x1MDIzMyc6ICd5JywKKyAgICAnXHUxRThGJzogJ3knLAorICAgICdcdTAwRkYnOiAneScsCisgICAgJ1x1MUVGNyc6ICd5JywKKyAgICAnXHUxRTk5JzogJ3knLAorICAgICdcdTFFRjUnOiAneScsCisgICAgJ1x1MDFCNCc6ICd5JywKKyAgICAnXHUwMjRGJzogJ3knLAorICAgICdcdTFFRkYnOiAneScsCisgICAgJ1x1MjRFOSc6ICd6JywKKyAgICAnXHVGRjVBJzogJ3onLAorICAgICdcdTAxN0EnOiAneicsCisgICAgJ1x1MUU5MSc6ICd6JywKKyAgICAnXHUwMTdDJzogJ3onLAorICAgICdcdTAxN0UnOiAneicsCisgICAgJ1x1MUU5Myc6ICd6JywKKyAgICAnXHUxRTk1JzogJ3onLAorICAgICdcdTAxQjYnOiAneicsCisgICAgJ1x1MDIyNSc6ICd6JywKKyAgICAnXHUwMjQwJzogJ3onLAorICAgICdcdTJDNkMnOiAneicsCisgICAgJ1x1QTc2Myc6ICd6JywKKyAgICAnXHUwMzg2JzogJ1x1MDM5MScsCisgICAgJ1x1MDM4OCc6ICdcdTAzOTUnLAorICAgICdcdTAzODknOiAnXHUwMzk3JywKKyAgICAnXHUwMzhBJzogJ1x1MDM5OScsCisgICAgJ1x1MDNBQSc6ICdcdTAzOTknLAorICAgICdcdTAzOEMnOiAnXHUwMzlGJywKKyAgICAnXHUwMzhFJzogJ1x1MDNBNScsCisgICAgJ1x1MDNBQic6ICdcdTAzQTUnLAorICAgICdcdTAzOEYnOiAnXHUwM0E5JywKKyAgICAnXHUwM0FDJzogJ1x1MDNCMScsCisgICAgJ1x1MDNBRCc6ICdcdTAzQjUnLAorICAgICdcdTAzQUUnOiAnXHUwM0I3JywKKyAgICAnXHUwM0FGJzogJ1x1MDNCOScsCisgICAgJ1x1MDNDQSc6ICdcdTAzQjknLAorICAgICdcdTAzOTAnOiAnXHUwM0I5JywKKyAgICAnXHUwM0NDJzogJ1x1MDNCRicsCisgICAgJ1x1MDNDRCc6ICdcdTAzQzUnLAorICAgICdcdTAzQ0InOiAnXHUwM0M1JywKKyAgICAnXHUwM0IwJzogJ1x1MDNDNScsCisgICAgJ1x1MDNDOSc6ICdcdTAzQzknLAorICAgICdcdTAzQzInOiAnXHUwM0MzJworICB9OworCisgIHJldHVybiBkaWFjcml0aWNzOworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9kYXRhL2Jhc2UnLFsKKyAgJy4uL3V0aWxzJworXSwgZnVuY3Rpb24gKFV0aWxzKSB7CisgIGZ1bmN0aW9uIEJhc2VBZGFwdGVyICgkZWxlbWVudCwgb3B0aW9ucykgeworICAgIEJhc2VBZGFwdGVyLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpOworICB9CisKKyAgVXRpbHMuRXh0ZW5kKEJhc2VBZGFwdGVyLCBVdGlscy5PYnNlcnZhYmxlKTsKKworICBCYXNlQWRhcHRlci5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgIHRocm93IG5ldyBFcnJvcignVGhlIGBjdXJyZW50YCBtZXRob2QgbXVzdCBiZSBkZWZpbmVkIGluIGNoaWxkIGNsYXNzZXMuJyk7CisgIH07CisKKyAgQmFzZUFkYXB0ZXIucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgcXVlcnlgIG1ldGhvZCBtdXN0IGJlIGRlZmluZWQgaW4gY2hpbGQgY2xhc3Nlcy4nKTsKKyAgfTsKKworICBCYXNlQWRhcHRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChjb250YWluZXIsICRjb250YWluZXIpIHsKKyAgICAvLyBDYW4gYmUgaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3NlcworICB9OworCisgIEJhc2VBZGFwdGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgeworICAgIC8vIENhbiBiZSBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzCisgIH07CisKKyAgQmFzZUFkYXB0ZXIucHJvdG90eXBlLmdlbmVyYXRlUmVzdWx0SWQgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBkYXRhKSB7CisgICAgdmFyIGlkID0gY29udGFpbmVyLmlkICsgJy1yZXN1bHQtJzsKKworICAgIGlkICs9IFV0aWxzLmdlbmVyYXRlQ2hhcnMoNCk7CisKKyAgICBpZiAoZGF0YS5pZCAhPSBudWxsKSB7CisgICAgICBpZCArPSAnLScgKyBkYXRhLmlkLnRvU3RyaW5nKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGlkICs9ICctJyArIFV0aWxzLmdlbmVyYXRlQ2hhcnMoNCk7CisgICAgfQorICAgIHJldHVybiBpZDsKKyAgfTsKKworICByZXR1cm4gQmFzZUFkYXB0ZXI7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2RhdGEvc2VsZWN0JyxbCisgICcuL2Jhc2UnLAorICAnLi4vdXRpbHMnLAorICAnanF1ZXJ5JworXSwgZnVuY3Rpb24gKEJhc2VBZGFwdGVyLCBVdGlscywgJCkgeworICBmdW5jdGlvbiBTZWxlY3RBZGFwdGVyICgkZWxlbWVudCwgb3B0aW9ucykgeworICAgIHRoaXMuJGVsZW1lbnQgPSAkZWxlbWVudDsKKyAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOworCisgICAgU2VsZWN0QWRhcHRlci5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzKTsKKyAgfQorCisgIFV0aWxzLkV4dGVuZChTZWxlY3RBZGFwdGVyLCBCYXNlQWRhcHRlcik7CisKKyAgU2VsZWN0QWRhcHRlci5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgIHZhciBkYXRhID0gW107CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgdGhpcy4kZWxlbWVudC5maW5kKCc6c2VsZWN0ZWQnKS5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkb3B0aW9uID0gJCh0aGlzKTsKKworICAgICAgdmFyIG9wdGlvbiA9IHNlbGYuaXRlbSgkb3B0aW9uKTsKKworICAgICAgZGF0YS5wdXNoKG9wdGlvbik7CisgICAgfSk7CisKKyAgICBjYWxsYmFjayhkYXRhKTsKKyAgfTsKKworICBTZWxlY3RBZGFwdGVyLnByb3RvdHlwZS5zZWxlY3QgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIGRhdGEuc2VsZWN0ZWQgPSB0cnVlOworCisgICAgLy8gSWYgZGF0YS5lbGVtZW50IGlzIGEgRE9NIG5vZGUsIHVzZSBpdCBpbnN0ZWFkCisgICAgaWYgKCQoZGF0YS5lbGVtZW50KS5pcygnb3B0aW9uJykpIHsKKyAgICAgIGRhdGEuZWxlbWVudC5zZWxlY3RlZCA9IHRydWU7CisKKyAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignY2hhbmdlJyk7CisKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodGhpcy4kZWxlbWVudC5wcm9wKCdtdWx0aXBsZScpKSB7CisgICAgICB0aGlzLmN1cnJlbnQoZnVuY3Rpb24gKGN1cnJlbnREYXRhKSB7CisgICAgICAgIHZhciB2YWwgPSBbXTsKKworICAgICAgICBkYXRhID0gW2RhdGFdOworICAgICAgICBkYXRhLnB1c2guYXBwbHkoZGF0YSwgY3VycmVudERhdGEpOworCisgICAgICAgIGZvciAodmFyIGQgPSAwOyBkIDwgZGF0YS5sZW5ndGg7IGQrKykgeworICAgICAgICAgIHZhciBpZCA9IGRhdGFbZF0uaWQ7CisKKyAgICAgICAgICBpZiAoJC5pbkFycmF5KGlkLCB2YWwpID09PSAtMSkgeworICAgICAgICAgICAgdmFsLnB1c2goaWQpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNlbGYuJGVsZW1lbnQudmFsKHZhbCk7CisgICAgICAgIHNlbGYuJGVsZW1lbnQudHJpZ2dlcignY2hhbmdlJyk7CisgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgdmFyIHZhbCA9IGRhdGEuaWQ7CisKKyAgICAgIHRoaXMuJGVsZW1lbnQudmFsKHZhbCk7CisgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2NoYW5nZScpOworICAgIH0KKyAgfTsKKworICBTZWxlY3RBZGFwdGVyLnByb3RvdHlwZS51bnNlbGVjdCA9IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgaWYgKCF0aGlzLiRlbGVtZW50LnByb3AoJ211bHRpcGxlJykpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkYXRhLnNlbGVjdGVkID0gZmFsc2U7CisKKyAgICBpZiAoJChkYXRhLmVsZW1lbnQpLmlzKCdvcHRpb24nKSkgeworICAgICAgZGF0YS5lbGVtZW50LnNlbGVjdGVkID0gZmFsc2U7CisKKyAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignY2hhbmdlJyk7CisKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0aGlzLmN1cnJlbnQoZnVuY3Rpb24gKGN1cnJlbnREYXRhKSB7CisgICAgICB2YXIgdmFsID0gW107CisKKyAgICAgIGZvciAodmFyIGQgPSAwOyBkIDwgY3VycmVudERhdGEubGVuZ3RoOyBkKyspIHsKKyAgICAgICAgdmFyIGlkID0gY3VycmVudERhdGFbZF0uaWQ7CisKKyAgICAgICAgaWYgKGlkICE9PSBkYXRhLmlkICYmICQuaW5BcnJheShpZCwgdmFsKSA9PT0gLTEpIHsKKyAgICAgICAgICB2YWwucHVzaChpZCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgc2VsZi4kZWxlbWVudC52YWwodmFsKTsKKworICAgICAgc2VsZi4kZWxlbWVudC50cmlnZ2VyKCdjaGFuZ2UnKTsKKyAgICB9KTsKKyAgfTsKKworICBTZWxlY3RBZGFwdGVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgJGNvbnRhaW5lcikgeworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyOworCisgICAgY29udGFpbmVyLm9uKCdzZWxlY3QnLCBmdW5jdGlvbiAocGFyYW1zKSB7CisgICAgICBzZWxmLnNlbGVjdChwYXJhbXMuZGF0YSk7CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ3Vuc2VsZWN0JywgZnVuY3Rpb24gKHBhcmFtcykgeworICAgICAgc2VsZi51bnNlbGVjdChwYXJhbXMuZGF0YSk7CisgICAgfSk7CisgIH07CisKKyAgU2VsZWN0QWRhcHRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHsKKyAgICAvLyBSZW1vdmUgYW55dGhpbmcgYWRkZWQgdG8gY2hpbGQgZWxlbWVudHMKKyAgICB0aGlzLiRlbGVtZW50LmZpbmQoJyonKS5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIC8vIFJlbW92ZSBhbnkgY3VzdG9tIGRhdGEgc2V0IGJ5IFNlbGVjdDIKKyAgICAgIFV0aWxzLlJlbW92ZURhdGEodGhpcyk7CisgICAgfSk7CisgIH07CisKKyAgU2VsZWN0QWRhcHRlci5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykgeworICAgIHZhciBkYXRhID0gW107CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgdmFyICRvcHRpb25zID0gdGhpcy4kZWxlbWVudC5jaGlsZHJlbigpOworCisgICAgJG9wdGlvbnMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgJG9wdGlvbiA9ICQodGhpcyk7CisKKyAgICAgIGlmICghJG9wdGlvbi5pcygnb3B0aW9uJykgJiYgISRvcHRpb24uaXMoJ29wdGdyb3VwJykpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICB2YXIgb3B0aW9uID0gc2VsZi5pdGVtKCRvcHRpb24pOworCisgICAgICB2YXIgbWF0Y2hlcyA9IHNlbGYubWF0Y2hlcyhwYXJhbXMsIG9wdGlvbik7CisKKyAgICAgIGlmIChtYXRjaGVzICE9PSBudWxsKSB7CisgICAgICAgIGRhdGEucHVzaChtYXRjaGVzKTsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIGNhbGxiYWNrKHsKKyAgICAgIHJlc3VsdHM6IGRhdGEKKyAgICB9KTsKKyAgfTsKKworICBTZWxlY3RBZGFwdGVyLnByb3RvdHlwZS5hZGRPcHRpb25zID0gZnVuY3Rpb24gKCRvcHRpb25zKSB7CisgICAgVXRpbHMuYXBwZW5kTWFueSh0aGlzLiRlbGVtZW50LCAkb3B0aW9ucyk7CisgIH07CisKKyAgU2VsZWN0QWRhcHRlci5wcm90b3R5cGUub3B0aW9uID0gZnVuY3Rpb24gKGRhdGEpIHsKKyAgICB2YXIgb3B0aW9uOworCisgICAgaWYgKGRhdGEuY2hpbGRyZW4pIHsKKyAgICAgIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGdyb3VwJyk7CisgICAgICBvcHRpb24ubGFiZWwgPSBkYXRhLnRleHQ7CisgICAgfSBlbHNlIHsKKyAgICAgIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOworCisgICAgICBpZiAob3B0aW9uLnRleHRDb250ZW50ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgb3B0aW9uLnRleHRDb250ZW50ID0gZGF0YS50ZXh0OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IGRhdGEudGV4dDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZGF0YS5pZCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICBvcHRpb24udmFsdWUgPSBkYXRhLmlkOworICAgIH0KKworICAgIGlmIChkYXRhLmRpc2FibGVkKSB7CisgICAgICBvcHRpb24uZGlzYWJsZWQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChkYXRhLnNlbGVjdGVkKSB7CisgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChkYXRhLnRpdGxlKSB7CisgICAgICBvcHRpb24udGl0bGUgPSBkYXRhLnRpdGxlOworICAgIH0KKworICAgIHZhciAkb3B0aW9uID0gJChvcHRpb24pOworCisgICAgdmFyIG5vcm1hbGl6ZWREYXRhID0gdGhpcy5fbm9ybWFsaXplSXRlbShkYXRhKTsKKyAgICBub3JtYWxpemVkRGF0YS5lbGVtZW50ID0gb3B0aW9uOworCisgICAgLy8gT3ZlcnJpZGUgdGhlIG9wdGlvbidzIGRhdGEgd2l0aCB0aGUgY29tYmluZWQgZGF0YQorICAgIFV0aWxzLlN0b3JlRGF0YShvcHRpb24sICdkYXRhJywgbm9ybWFsaXplZERhdGEpOworCisgICAgcmV0dXJuICRvcHRpb247CisgIH07CisKKyAgU2VsZWN0QWRhcHRlci5wcm90b3R5cGUuaXRlbSA9IGZ1bmN0aW9uICgkb3B0aW9uKSB7CisgICAgdmFyIGRhdGEgPSB7fTsKKworICAgIGRhdGEgPSBVdGlscy5HZXREYXRhKCRvcHRpb25bMF0sICdkYXRhJyk7CisKKyAgICBpZiAoZGF0YSAhPSBudWxsKSB7CisgICAgICByZXR1cm4gZGF0YTsKKyAgICB9CisKKyAgICBpZiAoJG9wdGlvbi5pcygnb3B0aW9uJykpIHsKKyAgICAgIGRhdGEgPSB7CisgICAgICAgIGlkOiAkb3B0aW9uLnZhbCgpLAorICAgICAgICB0ZXh0OiAkb3B0aW9uLnRleHQoKSwKKyAgICAgICAgZGlzYWJsZWQ6ICRvcHRpb24ucHJvcCgnZGlzYWJsZWQnKSwKKyAgICAgICAgc2VsZWN0ZWQ6ICRvcHRpb24ucHJvcCgnc2VsZWN0ZWQnKSwKKyAgICAgICAgdGl0bGU6ICRvcHRpb24ucHJvcCgndGl0bGUnKQorICAgICAgfTsKKyAgICB9IGVsc2UgaWYgKCRvcHRpb24uaXMoJ29wdGdyb3VwJykpIHsKKyAgICAgIGRhdGEgPSB7CisgICAgICAgIHRleHQ6ICRvcHRpb24ucHJvcCgnbGFiZWwnKSwKKyAgICAgICAgY2hpbGRyZW46IFtdLAorICAgICAgICB0aXRsZTogJG9wdGlvbi5wcm9wKCd0aXRsZScpCisgICAgICB9OworCisgICAgICB2YXIgJGNoaWxkcmVuID0gJG9wdGlvbi5jaGlsZHJlbignb3B0aW9uJyk7CisgICAgICB2YXIgY2hpbGRyZW4gPSBbXTsKKworICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCAkY2hpbGRyZW4ubGVuZ3RoOyBjKyspIHsKKyAgICAgICAgdmFyICRjaGlsZCA9ICQoJGNoaWxkcmVuW2NdKTsKKworICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLml0ZW0oJGNoaWxkKTsKKworICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTsKKyAgICAgIH0KKworICAgICAgZGF0YS5jaGlsZHJlbiA9IGNoaWxkcmVuOworICAgIH0KKworICAgIGRhdGEgPSB0aGlzLl9ub3JtYWxpemVJdGVtKGRhdGEpOworICAgIGRhdGEuZWxlbWVudCA9ICRvcHRpb25bMF07CisKKyAgICBVdGlscy5TdG9yZURhdGEoJG9wdGlvblswXSwgJ2RhdGEnLCBkYXRhKTsKKworICAgIHJldHVybiBkYXRhOworICB9OworCisgIFNlbGVjdEFkYXB0ZXIucHJvdG90eXBlLl9ub3JtYWxpemVJdGVtID0gZnVuY3Rpb24gKGl0ZW0pIHsKKyAgICBpZiAoaXRlbSAhPT0gT2JqZWN0KGl0ZW0pKSB7CisgICAgICBpdGVtID0geworICAgICAgICBpZDogaXRlbSwKKyAgICAgICAgdGV4dDogaXRlbQorICAgICAgfTsKKyAgICB9CisKKyAgICBpdGVtID0gJC5leHRlbmQoe30sIHsKKyAgICAgIHRleHQ6ICcnCisgICAgfSwgaXRlbSk7CisKKyAgICB2YXIgZGVmYXVsdHMgPSB7CisgICAgICBzZWxlY3RlZDogZmFsc2UsCisgICAgICBkaXNhYmxlZDogZmFsc2UKKyAgICB9OworCisgICAgaWYgKGl0ZW0uaWQgIT0gbnVsbCkgeworICAgICAgaXRlbS5pZCA9IGl0ZW0uaWQudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBpZiAoaXRlbS50ZXh0ICE9IG51bGwpIHsKKyAgICAgIGl0ZW0udGV4dCA9IGl0ZW0udGV4dC50b1N0cmluZygpOworICAgIH0KKworICAgIGlmIChpdGVtLl9yZXN1bHRJZCA9PSBudWxsICYmIGl0ZW0uaWQgJiYgdGhpcy5jb250YWluZXIgIT0gbnVsbCkgeworICAgICAgaXRlbS5fcmVzdWx0SWQgPSB0aGlzLmdlbmVyYXRlUmVzdWx0SWQodGhpcy5jb250YWluZXIsIGl0ZW0pOworICAgIH0KKworICAgIHJldHVybiAkLmV4dGVuZCh7fSwgZGVmYXVsdHMsIGl0ZW0pOworICB9OworCisgIFNlbGVjdEFkYXB0ZXIucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbiAocGFyYW1zLCBkYXRhKSB7CisgICAgdmFyIG1hdGNoZXIgPSB0aGlzLm9wdGlvbnMuZ2V0KCdtYXRjaGVyJyk7CisKKyAgICByZXR1cm4gbWF0Y2hlcihwYXJhbXMsIGRhdGEpOworICB9OworCisgIHJldHVybiBTZWxlY3RBZGFwdGVyOworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9kYXRhL2FycmF5JyxbCisgICcuL3NlbGVjdCcsCisgICcuLi91dGlscycsCisgICdqcXVlcnknCitdLCBmdW5jdGlvbiAoU2VsZWN0QWRhcHRlciwgVXRpbHMsICQpIHsKKyAgZnVuY3Rpb24gQXJyYXlBZGFwdGVyICgkZWxlbWVudCwgb3B0aW9ucykgeworICAgIHZhciBkYXRhID0gb3B0aW9ucy5nZXQoJ2RhdGEnKSB8fCBbXTsKKworICAgIEFycmF5QWRhcHRlci5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLCAkZWxlbWVudCwgb3B0aW9ucyk7CisKKyAgICB0aGlzLmFkZE9wdGlvbnModGhpcy5jb252ZXJ0VG9PcHRpb25zKGRhdGEpKTsKKyAgfQorCisgIFV0aWxzLkV4dGVuZChBcnJheUFkYXB0ZXIsIFNlbGVjdEFkYXB0ZXIpOworCisgIEFycmF5QWRhcHRlci5wcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24gKGRhdGEpIHsKKyAgICB2YXIgJG9wdGlvbiA9IHRoaXMuJGVsZW1lbnQuZmluZCgnb3B0aW9uJykuZmlsdGVyKGZ1bmN0aW9uIChpLCBlbG0pIHsKKyAgICAgIHJldHVybiBlbG0udmFsdWUgPT0gZGF0YS5pZC50b1N0cmluZygpOworICAgIH0pOworCisgICAgaWYgKCRvcHRpb24ubGVuZ3RoID09PSAwKSB7CisgICAgICAkb3B0aW9uID0gdGhpcy5vcHRpb24oZGF0YSk7CisKKyAgICAgIHRoaXMuYWRkT3B0aW9ucygkb3B0aW9uKTsKKyAgICB9CisKKyAgICBBcnJheUFkYXB0ZXIuX19zdXBlcl9fLnNlbGVjdC5jYWxsKHRoaXMsIGRhdGEpOworICB9OworCisgIEFycmF5QWRhcHRlci5wcm90b3R5cGUuY29udmVydFRvT3B0aW9ucyA9IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgdmFyICRleGlzdGluZyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnb3B0aW9uJyk7CisgICAgdmFyIGV4aXN0aW5nSWRzID0gJGV4aXN0aW5nLm1hcChmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gc2VsZi5pdGVtKCQodGhpcykpLmlkOworICAgIH0pLmdldCgpOworCisgICAgdmFyICRvcHRpb25zID0gW107CisKKyAgICAvLyBGaWx0ZXIgb3V0IGFsbCBpdGVtcyBleGNlcHQgZm9yIHRoZSBvbmUgcGFzc2VkIGluIHRoZSBhcmd1bWVudAorICAgIGZ1bmN0aW9uIG9ubHlJdGVtIChpdGVtKSB7CisgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gJCh0aGlzKS52YWwoKSA9PSBpdGVtLmlkOworICAgICAgfTsKKyAgICB9CisKKyAgICBmb3IgKHZhciBkID0gMDsgZCA8IGRhdGEubGVuZ3RoOyBkKyspIHsKKyAgICAgIHZhciBpdGVtID0gdGhpcy5fbm9ybWFsaXplSXRlbShkYXRhW2RdKTsKKworICAgICAgLy8gU2tpcCBpdGVtcyB3aGljaCB3ZXJlIHByZS1sb2FkZWQsIG9ubHkgbWVyZ2UgdGhlIGRhdGEKKyAgICAgIGlmICgkLmluQXJyYXkoaXRlbS5pZCwgZXhpc3RpbmdJZHMpID49IDApIHsKKyAgICAgICAgdmFyICRleGlzdGluZ09wdGlvbiA9ICRleGlzdGluZy5maWx0ZXIob25seUl0ZW0oaXRlbSkpOworCisgICAgICAgIHZhciBleGlzdGluZ0RhdGEgPSB0aGlzLml0ZW0oJGV4aXN0aW5nT3B0aW9uKTsKKyAgICAgICAgdmFyIG5ld0RhdGEgPSAkLmV4dGVuZCh0cnVlLCB7fSwgaXRlbSwgZXhpc3RpbmdEYXRhKTsKKworICAgICAgICB2YXIgJG5ld09wdGlvbiA9IHRoaXMub3B0aW9uKG5ld0RhdGEpOworCisgICAgICAgICRleGlzdGluZ09wdGlvbi5yZXBsYWNlV2l0aCgkbmV3T3B0aW9uKTsKKworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgdmFyICRvcHRpb24gPSB0aGlzLm9wdGlvbihpdGVtKTsKKworICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHsKKyAgICAgICAgdmFyICRjaGlsZHJlbiA9IHRoaXMuY29udmVydFRvT3B0aW9ucyhpdGVtLmNoaWxkcmVuKTsKKworICAgICAgICBVdGlscy5hcHBlbmRNYW55KCRvcHRpb24sICRjaGlsZHJlbik7CisgICAgICB9CisKKyAgICAgICRvcHRpb25zLnB1c2goJG9wdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuICRvcHRpb25zOworICB9OworCisgIHJldHVybiBBcnJheUFkYXB0ZXI7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2RhdGEvYWpheCcsWworICAnLi9hcnJheScsCisgICcuLi91dGlscycsCisgICdqcXVlcnknCitdLCBmdW5jdGlvbiAoQXJyYXlBZGFwdGVyLCBVdGlscywgJCkgeworICBmdW5jdGlvbiBBamF4QWRhcHRlciAoJGVsZW1lbnQsIG9wdGlvbnMpIHsKKyAgICB0aGlzLmFqYXhPcHRpb25zID0gdGhpcy5fYXBwbHlEZWZhdWx0cyhvcHRpb25zLmdldCgnYWpheCcpKTsKKworICAgIGlmICh0aGlzLmFqYXhPcHRpb25zLnByb2Nlc3NSZXN1bHRzICE9IG51bGwpIHsKKyAgICAgIHRoaXMucHJvY2Vzc1Jlc3VsdHMgPSB0aGlzLmFqYXhPcHRpb25zLnByb2Nlc3NSZXN1bHRzOworICAgIH0KKworICAgIEFqYXhBZGFwdGVyLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsICRlbGVtZW50LCBvcHRpb25zKTsKKyAgfQorCisgIFV0aWxzLkV4dGVuZChBamF4QWRhcHRlciwgQXJyYXlBZGFwdGVyKTsKKworICBBamF4QWRhcHRlci5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdHMgPSBmdW5jdGlvbiAob3B0aW9ucykgeworICAgIHZhciBkZWZhdWx0cyA9IHsKKyAgICAgIGRhdGE6IGZ1bmN0aW9uIChwYXJhbXMpIHsKKyAgICAgICAgcmV0dXJuICQuZXh0ZW5kKHt9LCBwYXJhbXMsIHsKKyAgICAgICAgICBxOiBwYXJhbXMudGVybQorICAgICAgICB9KTsKKyAgICAgIH0sCisgICAgICB0cmFuc3BvcnQ6IGZ1bmN0aW9uIChwYXJhbXMsIHN1Y2Nlc3MsIGZhaWx1cmUpIHsKKyAgICAgICAgdmFyICRyZXF1ZXN0ID0gJC5hamF4KHBhcmFtcyk7CisKKyAgICAgICAgJHJlcXVlc3QudGhlbihzdWNjZXNzKTsKKyAgICAgICAgJHJlcXVlc3QuZmFpbChmYWlsdXJlKTsKKworICAgICAgICByZXR1cm4gJHJlcXVlc3Q7CisgICAgICB9CisgICAgfTsKKworICAgIHJldHVybiAkLmV4dGVuZCh7fSwgZGVmYXVsdHMsIG9wdGlvbnMsIHRydWUpOworICB9OworCisgIEFqYXhBZGFwdGVyLnByb3RvdHlwZS5wcm9jZXNzUmVzdWx0cyA9IGZ1bmN0aW9uIChyZXN1bHRzKSB7CisgICAgcmV0dXJuIHJlc3VsdHM7CisgIH07CisKKyAgQWpheEFkYXB0ZXIucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHsKKyAgICB2YXIgbWF0Y2hlcyA9IFtdOworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIGlmICh0aGlzLl9yZXF1ZXN0ICE9IG51bGwpIHsKKyAgICAgIC8vIEpTT05QIHJlcXVlc3RzIGNhbm5vdCBhbHdheXMgYmUgYWJvcnRlZAorICAgICAgaWYgKCQuaXNGdW5jdGlvbih0aGlzLl9yZXF1ZXN0LmFib3J0KSkgeworICAgICAgICB0aGlzLl9yZXF1ZXN0LmFib3J0KCk7CisgICAgICB9CisKKyAgICAgIHRoaXMuX3JlcXVlc3QgPSBudWxsOworICAgIH0KKworICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoeworICAgICAgdHlwZTogJ0dFVCcKKyAgICB9LCB0aGlzLmFqYXhPcHRpb25zKTsKKworICAgIGlmICh0eXBlb2Ygb3B0aW9ucy51cmwgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgIG9wdGlvbnMudXJsID0gb3B0aW9ucy51cmwuY2FsbCh0aGlzLiRlbGVtZW50LCBwYXJhbXMpOworICAgIH0KKworICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kYXRhID09PSAnZnVuY3Rpb24nKSB7CisgICAgICBvcHRpb25zLmRhdGEgPSBvcHRpb25zLmRhdGEuY2FsbCh0aGlzLiRlbGVtZW50LCBwYXJhbXMpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJlcXVlc3QgKCkgeworICAgICAgdmFyICRyZXF1ZXN0ID0gb3B0aW9ucy50cmFuc3BvcnQob3B0aW9ucywgZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgdmFyIHJlc3VsdHMgPSBzZWxmLnByb2Nlc3NSZXN1bHRzKGRhdGEsIHBhcmFtcyk7CisKKyAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5nZXQoJ2RlYnVnJykgJiYgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5lcnJvcikgeworICAgICAgICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZXNwb25zZSBpbmNsdWRlZCBhIGByZXN1bHRzYCBrZXkuCisgICAgICAgICAgaWYgKCFyZXN1bHRzIHx8ICFyZXN1bHRzLnJlc3VsdHMgfHwgISQuaXNBcnJheShyZXN1bHRzLnJlc3VsdHMpKSB7CisgICAgICAgICAgICBjb25zb2xlLmVycm9yKAorICAgICAgICAgICAgICAnU2VsZWN0MjogVGhlIEFKQVggcmVzdWx0cyBkaWQgbm90IHJldHVybiBhbiBhcnJheSBpbiB0aGUgJyArCisgICAgICAgICAgICAgICdgcmVzdWx0c2Aga2V5IG9mIHRoZSByZXNwb25zZS4nCisgICAgICAgICAgICApOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNhbGxiYWNrKHJlc3VsdHMpOworICAgICAgfSwgZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBBdHRlbXB0IHRvIGRldGVjdCBpZiBhIHJlcXVlc3Qgd2FzIGFib3J0ZWQKKyAgICAgICAgLy8gT25seSB3b3JrcyBpZiB0aGUgdHJhbnNwb3J0IGV4cG9zZXMgYSBzdGF0dXMgcHJvcGVydHkKKyAgICAgICAgaWYgKCdzdGF0dXMnIGluICRyZXF1ZXN0ICYmCisgICAgICAgICAgICAoJHJlcXVlc3Quc3RhdHVzID09PSAwIHx8ICRyZXF1ZXN0LnN0YXR1cyA9PT0gJzAnKSkgeworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHNlbGYudHJpZ2dlcigncmVzdWx0czptZXNzYWdlJywgeworICAgICAgICAgIG1lc3NhZ2U6ICdlcnJvckxvYWRpbmcnCisgICAgICAgIH0pOworICAgICAgfSk7CisKKyAgICAgIHNlbGYuX3JlcXVlc3QgPSAkcmVxdWVzdDsKKyAgICB9CisKKyAgICBpZiAodGhpcy5hamF4T3B0aW9ucy5kZWxheSAmJiBwYXJhbXMudGVybSAhPSBudWxsKSB7CisgICAgICBpZiAodGhpcy5fcXVlcnlUaW1lb3V0KSB7CisgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fcXVlcnlUaW1lb3V0KTsKKyAgICAgIH0KKworICAgICAgdGhpcy5fcXVlcnlUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQocmVxdWVzdCwgdGhpcy5hamF4T3B0aW9ucy5kZWxheSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJlcXVlc3QoKTsKKyAgICB9CisgIH07CisKKyAgcmV0dXJuIEFqYXhBZGFwdGVyOworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9kYXRhL3RhZ3MnLFsKKyAgJ2pxdWVyeScKK10sIGZ1bmN0aW9uICgkKSB7CisgIGZ1bmN0aW9uIFRhZ3MgKGRlY29yYXRlZCwgJGVsZW1lbnQsIG9wdGlvbnMpIHsKKyAgICB2YXIgdGFncyA9IG9wdGlvbnMuZ2V0KCd0YWdzJyk7CisKKyAgICB2YXIgY3JlYXRlVGFnID0gb3B0aW9ucy5nZXQoJ2NyZWF0ZVRhZycpOworCisgICAgaWYgKGNyZWF0ZVRhZyAhPT0gdW5kZWZpbmVkKSB7CisgICAgICB0aGlzLmNyZWF0ZVRhZyA9IGNyZWF0ZVRhZzsKKyAgICB9CisKKyAgICB2YXIgaW5zZXJ0VGFnID0gb3B0aW9ucy5nZXQoJ2luc2VydFRhZycpOworCisgICAgaWYgKGluc2VydFRhZyAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgIHRoaXMuaW5zZXJ0VGFnID0gaW5zZXJ0VGFnOworICAgIH0KKworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsICRlbGVtZW50LCBvcHRpb25zKTsKKworICAgIGlmICgkLmlzQXJyYXkodGFncykpIHsKKyAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgdGFncy5sZW5ndGg7IHQrKykgeworICAgICAgICB2YXIgdGFnID0gdGFnc1t0XTsKKyAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLl9ub3JtYWxpemVJdGVtKHRhZyk7CisKKyAgICAgICAgdmFyICRvcHRpb24gPSB0aGlzLm9wdGlvbihpdGVtKTsKKworICAgICAgICB0aGlzLiRlbGVtZW50LmFwcGVuZCgkb3B0aW9uKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBUYWdzLnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIHBhcmFtcywgY2FsbGJhY2spIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICB0aGlzLl9yZW1vdmVPbGRUYWdzKCk7CisKKyAgICBpZiAocGFyYW1zLnRlcm0gPT0gbnVsbCB8fCBwYXJhbXMucGFnZSAhPSBudWxsKSB7CisgICAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBwYXJhbXMsIGNhbGxiYWNrKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB3cmFwcGVyIChvYmosIGNoaWxkKSB7CisgICAgICB2YXIgZGF0YSA9IG9iai5yZXN1bHRzOworCisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIG9wdGlvbiA9IGRhdGFbaV07CisKKyAgICAgICAgdmFyIGNoZWNrQ2hpbGRyZW4gPSAoCisgICAgICAgICAgb3B0aW9uLmNoaWxkcmVuICE9IG51bGwgJiYKKyAgICAgICAgICAhd3JhcHBlcih7CisgICAgICAgICAgICByZXN1bHRzOiBvcHRpb24uY2hpbGRyZW4KKyAgICAgICAgICB9LCB0cnVlKQorICAgICAgICApOworCisgICAgICAgIHZhciBvcHRpb25UZXh0ID0gKG9wdGlvbi50ZXh0IHx8ICcnKS50b1VwcGVyQ2FzZSgpOworICAgICAgICB2YXIgcGFyYW1zVGVybSA9IChwYXJhbXMudGVybSB8fCAnJykudG9VcHBlckNhc2UoKTsKKworICAgICAgICB2YXIgY2hlY2tUZXh0ID0gb3B0aW9uVGV4dCA9PT0gcGFyYW1zVGVybTsKKworICAgICAgICBpZiAoY2hlY2tUZXh0IHx8IGNoZWNrQ2hpbGRyZW4pIHsKKyAgICAgICAgICBpZiAoY2hpbGQpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBvYmouZGF0YSA9IGRhdGE7CisgICAgICAgICAgY2FsbGJhY2sob2JqKTsKKworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoY2hpbGQpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisKKyAgICAgIHZhciB0YWcgPSBzZWxmLmNyZWF0ZVRhZyhwYXJhbXMpOworCisgICAgICBpZiAodGFnICE9IG51bGwpIHsKKyAgICAgICAgdmFyICRvcHRpb24gPSBzZWxmLm9wdGlvbih0YWcpOworICAgICAgICAkb3B0aW9uLmF0dHIoJ2RhdGEtc2VsZWN0Mi10YWcnLCB0cnVlKTsKKworICAgICAgICBzZWxmLmFkZE9wdGlvbnMoWyRvcHRpb25dKTsKKworICAgICAgICBzZWxmLmluc2VydFRhZyhkYXRhLCB0YWcpOworICAgICAgfQorCisgICAgICBvYmoucmVzdWx0cyA9IGRhdGE7CisKKyAgICAgIGNhbGxiYWNrKG9iaik7CisgICAgfQorCisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgcGFyYW1zLCB3cmFwcGVyKTsKKyAgfTsKKworICBUYWdzLnByb3RvdHlwZS5jcmVhdGVUYWcgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBwYXJhbXMpIHsKKyAgICB2YXIgdGVybSA9ICQudHJpbShwYXJhbXMudGVybSk7CisKKyAgICBpZiAodGVybSA9PT0gJycpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHJldHVybiB7CisgICAgICBpZDogdGVybSwKKyAgICAgIHRleHQ6IHRlcm0KKyAgICB9OworICB9OworCisgIFRhZ3MucHJvdG90eXBlLmluc2VydFRhZyA9IGZ1bmN0aW9uIChfLCBkYXRhLCB0YWcpIHsKKyAgICBkYXRhLnVuc2hpZnQodGFnKTsKKyAgfTsKKworICBUYWdzLnByb3RvdHlwZS5fcmVtb3ZlT2xkVGFncyA9IGZ1bmN0aW9uIChfKSB7CisgICAgdmFyIHRhZyA9IHRoaXMuX2xhc3RUYWc7CisKKyAgICB2YXIgJG9wdGlvbnMgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ29wdGlvbltkYXRhLXNlbGVjdDItdGFnXScpOworCisgICAgJG9wdGlvbnMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICBpZiAodGhpcy5zZWxlY3RlZCkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgICQodGhpcykucmVtb3ZlKCk7CisgICAgfSk7CisgIH07CisKKyAgcmV0dXJuIFRhZ3M7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2RhdGEvdG9rZW5pemVyJyxbCisgICdqcXVlcnknCitdLCBmdW5jdGlvbiAoJCkgeworICBmdW5jdGlvbiBUb2tlbml6ZXIgKGRlY29yYXRlZCwgJGVsZW1lbnQsIG9wdGlvbnMpIHsKKyAgICB2YXIgdG9rZW5pemVyID0gb3B0aW9ucy5nZXQoJ3Rva2VuaXplcicpOworCisgICAgaWYgKHRva2VuaXplciAhPT0gdW5kZWZpbmVkKSB7CisgICAgICB0aGlzLnRva2VuaXplciA9IHRva2VuaXplcjsKKyAgICB9CisKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCAkZWxlbWVudCwgb3B0aW9ucyk7CisgIH0KKworICBUb2tlbml6ZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIsICRjb250YWluZXIpIHsKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBjb250YWluZXIsICRjb250YWluZXIpOworCisgICAgdGhpcy4kc2VhcmNoID0gIGNvbnRhaW5lci5kcm9wZG93bi4kc2VhcmNoIHx8IGNvbnRhaW5lci5zZWxlY3Rpb24uJHNlYXJjaCB8fAorICAgICAgJGNvbnRhaW5lci5maW5kKCcuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkJyk7CisgIH07CisKKyAgVG9rZW5pemVyLnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIHBhcmFtcywgY2FsbGJhY2spIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICBmdW5jdGlvbiBjcmVhdGVBbmRTZWxlY3QgKGRhdGEpIHsKKyAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgZGF0YSBvYmplY3Qgc28gd2UgY2FuIHVzZSBpdCBmb3IgY2hlY2tzCisgICAgICB2YXIgaXRlbSA9IHNlbGYuX25vcm1hbGl6ZUl0ZW0oZGF0YSk7CisKKyAgICAgIC8vIENoZWNrIGlmIHRoZSBkYXRhIG9iamVjdCBhbHJlYWR5IGV4aXN0cyBhcyBhIHRhZworICAgICAgLy8gU2VsZWN0IGl0IGlmIGl0IGRvZXNuJ3QKKyAgICAgIHZhciAkZXhpc3RpbmdPcHRpb25zID0gc2VsZi4kZWxlbWVudC5maW5kKCdvcHRpb24nKS5maWx0ZXIoZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gJCh0aGlzKS52YWwoKSA9PT0gaXRlbS5pZDsKKyAgICAgIH0pOworCisgICAgICAvLyBJZiBhbiBleGlzdGluZyBvcHRpb24gd2Fzbid0IGZvdW5kIGZvciBpdCwgY3JlYXRlIHRoZSBvcHRpb24KKyAgICAgIGlmICghJGV4aXN0aW5nT3B0aW9ucy5sZW5ndGgpIHsKKyAgICAgICAgdmFyICRvcHRpb24gPSBzZWxmLm9wdGlvbihpdGVtKTsKKyAgICAgICAgJG9wdGlvbi5hdHRyKCdkYXRhLXNlbGVjdDItdGFnJywgdHJ1ZSk7CisKKyAgICAgICAgc2VsZi5fcmVtb3ZlT2xkVGFncygpOworICAgICAgICBzZWxmLmFkZE9wdGlvbnMoWyRvcHRpb25dKTsKKyAgICAgIH0KKworICAgICAgLy8gU2VsZWN0IHRoZSBpdGVtLCBub3cgdGhhdCB3ZSBrbm93IHRoZXJlIGlzIGFuIG9wdGlvbiBmb3IgaXQKKyAgICAgIHNlbGVjdChpdGVtKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzZWxlY3QgKGRhdGEpIHsKKyAgICAgIHNlbGYudHJpZ2dlcignc2VsZWN0JywgeworICAgICAgICBkYXRhOiBkYXRhCisgICAgICB9KTsKKyAgICB9CisKKyAgICBwYXJhbXMudGVybSA9IHBhcmFtcy50ZXJtIHx8ICcnOworCisgICAgdmFyIHRva2VuRGF0YSA9IHRoaXMudG9rZW5pemVyKHBhcmFtcywgdGhpcy5vcHRpb25zLCBjcmVhdGVBbmRTZWxlY3QpOworCisgICAgaWYgKHRva2VuRGF0YS50ZXJtICE9PSBwYXJhbXMudGVybSkgeworICAgICAgLy8gUmVwbGFjZSB0aGUgc2VhcmNoIHRlcm0gaWYgd2UgaGF2ZSB0aGUgc2VhcmNoIGJveAorICAgICAgaWYgKHRoaXMuJHNlYXJjaC5sZW5ndGgpIHsKKyAgICAgICAgdGhpcy4kc2VhcmNoLnZhbCh0b2tlbkRhdGEudGVybSk7CisgICAgICAgIHRoaXMuJHNlYXJjaC5mb2N1cygpOworICAgICAgfQorCisgICAgICBwYXJhbXMudGVybSA9IHRva2VuRGF0YS50ZXJtOworICAgIH0KKworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIHBhcmFtcywgY2FsbGJhY2spOworICB9OworCisgIFRva2VuaXplci5wcm90b3R5cGUudG9rZW5pemVyID0gZnVuY3Rpb24gKF8sIHBhcmFtcywgb3B0aW9ucywgY2FsbGJhY2spIHsKKyAgICB2YXIgc2VwYXJhdG9ycyA9IG9wdGlvbnMuZ2V0KCd0b2tlblNlcGFyYXRvcnMnKSB8fCBbXTsKKyAgICB2YXIgdGVybSA9IHBhcmFtcy50ZXJtOworICAgIHZhciBpID0gMDsKKworICAgIHZhciBjcmVhdGVUYWcgPSB0aGlzLmNyZWF0ZVRhZyB8fCBmdW5jdGlvbiAocGFyYW1zKSB7CisgICAgICByZXR1cm4geworICAgICAgICBpZDogcGFyYW1zLnRlcm0sCisgICAgICAgIHRleHQ6IHBhcmFtcy50ZXJtCisgICAgICB9OworICAgIH07CisKKyAgICB3aGlsZSAoaSA8IHRlcm0ubGVuZ3RoKSB7CisgICAgICB2YXIgdGVybUNoYXIgPSB0ZXJtW2ldOworCisgICAgICBpZiAoJC5pbkFycmF5KHRlcm1DaGFyLCBzZXBhcmF0b3JzKSA9PT0gLTEpIHsKKyAgICAgICAgaSsrOworCisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICB2YXIgcGFydCA9IHRlcm0uc3Vic3RyKDAsIGkpOworICAgICAgdmFyIHBhcnRQYXJhbXMgPSAkLmV4dGVuZCh7fSwgcGFyYW1zLCB7CisgICAgICAgIHRlcm06IHBhcnQKKyAgICAgIH0pOworCisgICAgICB2YXIgZGF0YSA9IGNyZWF0ZVRhZyhwYXJ0UGFyYW1zKTsKKworICAgICAgaWYgKGRhdGEgPT0gbnVsbCkgeworICAgICAgICBpKys7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBjYWxsYmFjayhkYXRhKTsKKworICAgICAgLy8gUmVzZXQgdGhlIHRlcm0gdG8gbm90IGluY2x1ZGUgdGhlIHRva2VuaXplZCBwb3J0aW9uCisgICAgICB0ZXJtID0gdGVybS5zdWJzdHIoaSArIDEpIHx8ICcnOworICAgICAgaSA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgIHRlcm06IHRlcm0KKyAgICB9OworICB9OworCisgIHJldHVybiBUb2tlbml6ZXI7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2RhdGEvbWluaW11bUlucHV0TGVuZ3RoJyxbCisKK10sIGZ1bmN0aW9uICgpIHsKKyAgZnVuY3Rpb24gTWluaW11bUlucHV0TGVuZ3RoIChkZWNvcmF0ZWQsICRlLCBvcHRpb25zKSB7CisgICAgdGhpcy5taW5pbXVtSW5wdXRMZW5ndGggPSBvcHRpb25zLmdldCgnbWluaW11bUlucHV0TGVuZ3RoJyk7CisKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCAkZSwgb3B0aW9ucyk7CisgIH0KKworICBNaW5pbXVtSW5wdXRMZW5ndGgucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgcGFyYW1zLCBjYWxsYmFjaykgeworICAgIHBhcmFtcy50ZXJtID0gcGFyYW1zLnRlcm0gfHwgJyc7CisKKyAgICBpZiAocGFyYW1zLnRlcm0ubGVuZ3RoIDwgdGhpcy5taW5pbXVtSW5wdXRMZW5ndGgpIHsKKyAgICAgIHRoaXMudHJpZ2dlcigncmVzdWx0czptZXNzYWdlJywgeworICAgICAgICBtZXNzYWdlOiAnaW5wdXRUb29TaG9ydCcsCisgICAgICAgIGFyZ3M6IHsKKyAgICAgICAgICBtaW5pbXVtOiB0aGlzLm1pbmltdW1JbnB1dExlbmd0aCwKKyAgICAgICAgICBpbnB1dDogcGFyYW1zLnRlcm0sCisgICAgICAgICAgcGFyYW1zOiBwYXJhbXMKKyAgICAgICAgfQorICAgICAgfSk7CisKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBwYXJhbXMsIGNhbGxiYWNrKTsKKyAgfTsKKworICByZXR1cm4gTWluaW11bUlucHV0TGVuZ3RoOworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9kYXRhL21heGltdW1JbnB1dExlbmd0aCcsWworCitdLCBmdW5jdGlvbiAoKSB7CisgIGZ1bmN0aW9uIE1heGltdW1JbnB1dExlbmd0aCAoZGVjb3JhdGVkLCAkZSwgb3B0aW9ucykgeworICAgIHRoaXMubWF4aW11bUlucHV0TGVuZ3RoID0gb3B0aW9ucy5nZXQoJ21heGltdW1JbnB1dExlbmd0aCcpOworCisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgJGUsIG9wdGlvbnMpOworICB9CisKKyAgTWF4aW11bUlucHV0TGVuZ3RoLnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIHBhcmFtcywgY2FsbGJhY2spIHsKKyAgICBwYXJhbXMudGVybSA9IHBhcmFtcy50ZXJtIHx8ICcnOworCisgICAgaWYgKHRoaXMubWF4aW11bUlucHV0TGVuZ3RoID4gMCAmJgorICAgICAgICBwYXJhbXMudGVybS5sZW5ndGggPiB0aGlzLm1heGltdW1JbnB1dExlbmd0aCkgeworICAgICAgdGhpcy50cmlnZ2VyKCdyZXN1bHRzOm1lc3NhZ2UnLCB7CisgICAgICAgIG1lc3NhZ2U6ICdpbnB1dFRvb0xvbmcnLAorICAgICAgICBhcmdzOiB7CisgICAgICAgICAgbWF4aW11bTogdGhpcy5tYXhpbXVtSW5wdXRMZW5ndGgsCisgICAgICAgICAgaW5wdXQ6IHBhcmFtcy50ZXJtLAorICAgICAgICAgIHBhcmFtczogcGFyYW1zCisgICAgICAgIH0KKyAgICAgIH0pOworCisgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgcGFyYW1zLCBjYWxsYmFjayk7CisgIH07CisKKyAgcmV0dXJuIE1heGltdW1JbnB1dExlbmd0aDsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvZGF0YS9tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoJyxbCisKK10sIGZ1bmN0aW9uICgpeworICBmdW5jdGlvbiBNYXhpbXVtU2VsZWN0aW9uTGVuZ3RoIChkZWNvcmF0ZWQsICRlLCBvcHRpb25zKSB7CisgICAgdGhpcy5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoID0gb3B0aW9ucy5nZXQoJ21heGltdW1TZWxlY3Rpb25MZW5ndGgnKTsKKworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsICRlLCBvcHRpb25zKTsKKyAgfQorCisgIE1heGltdW1TZWxlY3Rpb25MZW5ndGgucHJvdG90eXBlLnF1ZXJ5ID0KKyAgICBmdW5jdGlvbiAoZGVjb3JhdGVkLCBwYXJhbXMsIGNhbGxiYWNrKSB7CisgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgIHRoaXMuY3VycmVudChmdW5jdGlvbiAoY3VycmVudERhdGEpIHsKKyAgICAgICAgdmFyIGNvdW50ID0gY3VycmVudERhdGEgIT0gbnVsbCA/IGN1cnJlbnREYXRhLmxlbmd0aCA6IDA7CisgICAgICAgIGlmIChzZWxmLm1heGltdW1TZWxlY3Rpb25MZW5ndGggPiAwICYmCisgICAgICAgICAgY291bnQgPj0gc2VsZi5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoKSB7CisgICAgICAgICAgc2VsZi50cmlnZ2VyKCdyZXN1bHRzOm1lc3NhZ2UnLCB7CisgICAgICAgICAgICBtZXNzYWdlOiAnbWF4aW11bVNlbGVjdGVkJywKKyAgICAgICAgICAgIGFyZ3M6IHsKKyAgICAgICAgICAgICAgbWF4aW11bTogc2VsZi5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoCisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGRlY29yYXRlZC5jYWxsKHNlbGYsIHBhcmFtcywgY2FsbGJhY2spOworICAgICAgfSk7CisgIH07CisKKyAgcmV0dXJuIE1heGltdW1TZWxlY3Rpb25MZW5ndGg7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duJyxbCisgICdqcXVlcnknLAorICAnLi91dGlscycKK10sIGZ1bmN0aW9uICgkLCBVdGlscykgeworICBmdW5jdGlvbiBEcm9wZG93biAoJGVsZW1lbnQsIG9wdGlvbnMpIHsKKyAgICB0aGlzLiRlbGVtZW50ID0gJGVsZW1lbnQ7CisgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKKworICAgIERyb3Bkb3duLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpOworICB9CisKKyAgVXRpbHMuRXh0ZW5kKERyb3Bkb3duLCBVdGlscy5PYnNlcnZhYmxlKTsKKworICBEcm9wZG93bi5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkgeworICAgIHZhciAkZHJvcGRvd24gPSAkKAorICAgICAgJzxzcGFuIGNsYXNzPSJzZWxlY3QyLWRyb3Bkb3duIj4nICsKKyAgICAgICAgJzxzcGFuIGNsYXNzPSJzZWxlY3QyLXJlc3VsdHMiPjwvc3Bhbj4nICsKKyAgICAgICc8L3NwYW4+JworICAgICk7CisKKyAgICAkZHJvcGRvd24uYXR0cignZGlyJywgdGhpcy5vcHRpb25zLmdldCgnZGlyJykpOworCisgICAgdGhpcy4kZHJvcGRvd24gPSAkZHJvcGRvd247CisKKyAgICByZXR1cm4gJGRyb3Bkb3duOworICB9OworCisgIERyb3Bkb3duLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKCkgeworICAgIC8vIFNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzCisgIH07CisKKyAgRHJvcGRvd24ucHJvdG90eXBlLnBvc2l0aW9uID0gZnVuY3Rpb24gKCRkcm9wZG93biwgJGNvbnRhaW5lcikgeworICAgIC8vIFNob3VsZCBiZSBpbXBsbWVudGVkIGluIHN1YmNsYXNzZXMKKyAgfTsKKworICBEcm9wZG93bi5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHsKKyAgICAvLyBSZW1vdmUgdGhlIGRyb3Bkb3duIGZyb20gdGhlIERPTQorICAgIHRoaXMuJGRyb3Bkb3duLnJlbW92ZSgpOworICB9OworCisgIHJldHVybiBEcm9wZG93bjsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvZHJvcGRvd24vc2VhcmNoJyxbCisgICdqcXVlcnknLAorICAnLi4vdXRpbHMnCitdLCBmdW5jdGlvbiAoJCwgVXRpbHMpIHsKKyAgZnVuY3Rpb24gU2VhcmNoICgpIHsgfQorCisgIFNlYXJjaC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRlY29yYXRlZCkgeworICAgIHZhciAkcmVuZGVyZWQgPSBkZWNvcmF0ZWQuY2FsbCh0aGlzKTsKKworICAgIHZhciAkc2VhcmNoID0gJCgKKyAgICAgICc8c3BhbiBjbGFzcz0ic2VsZWN0Mi1zZWFyY2ggc2VsZWN0Mi1zZWFyY2gtLWRyb3Bkb3duIj4nICsKKyAgICAgICAgJzxpbnB1dCBjbGFzcz0ic2VsZWN0Mi1zZWFyY2hfX2ZpZWxkIiB0eXBlPSJzZWFyY2giIHRhYmluZGV4PSItMSInICsKKyAgICAgICAgJyBhdXRvY29tcGxldGU9Im9mZiIgYXV0b2NvcnJlY3Q9Im9mZiIgYXV0b2NhcGl0YWxpemU9Im5vbmUiJyArCisgICAgICAgICcgc3BlbGxjaGVjaz0iZmFsc2UiIHJvbGU9InRleHRib3giIC8+JyArCisgICAgICAnPC9zcGFuPicKKyAgICApOworCisgICAgdGhpcy4kc2VhcmNoQ29udGFpbmVyID0gJHNlYXJjaDsKKyAgICB0aGlzLiRzZWFyY2ggPSAkc2VhcmNoLmZpbmQoJ2lucHV0Jyk7CisKKyAgICAkcmVuZGVyZWQucHJlcGVuZCgkc2VhcmNoKTsKKworICAgIHJldHVybiAkcmVuZGVyZWQ7CisgIH07CisKKyAgU2VhcmNoLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgY29udGFpbmVyLCAkY29udGFpbmVyKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgY29udGFpbmVyLCAkY29udGFpbmVyKTsKKworICAgIHRoaXMuJHNlYXJjaC5vbigna2V5ZG93bicsIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgIHNlbGYudHJpZ2dlcigna2V5cHJlc3MnLCBldnQpOworCisgICAgICBzZWxmLl9rZXlVcFByZXZlbnRlZCA9IGV2dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICB9KTsKKworICAgIC8vIFdvcmthcm91bmQgZm9yIGJyb3dzZXJzIHdoaWNoIGRvIG5vdCBzdXBwb3J0IHRoZSBgaW5wdXRgIGV2ZW50CisgICAgLy8gVGhpcyB3aWxsIHByZXZlbnQgZG91YmxlLXRyaWdnZXJpbmcgb2YgZXZlbnRzIGZvciBicm93c2VycyB3aGljaCBzdXBwb3J0CisgICAgLy8gYm90aCB0aGUgYGtleXVwYCBhbmQgYGlucHV0YCBldmVudHMuCisgICAgdGhpcy4kc2VhcmNoLm9uKCdpbnB1dCcsIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgIC8vIFVuYmluZCB0aGUgZHVwbGljYXRlZCBga2V5dXBgIGV2ZW50CisgICAgICAkKHRoaXMpLm9mZigna2V5dXAnKTsKKyAgICB9KTsKKworICAgIHRoaXMuJHNlYXJjaC5vbigna2V5dXAgaW5wdXQnLCBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICBzZWxmLmhhbmRsZVNlYXJjaChldnQpOworICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCdvcGVuJywgZnVuY3Rpb24gKCkgeworICAgICAgc2VsZi4kc2VhcmNoLmF0dHIoJ3RhYmluZGV4JywgMCk7CisKKyAgICAgIHNlbGYuJHNlYXJjaC5mb2N1cygpOworCisgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgIHNlbGYuJHNlYXJjaC5mb2N1cygpOworICAgICAgfSwgMCk7CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkgeworICAgICAgc2VsZi4kc2VhcmNoLmF0dHIoJ3RhYmluZGV4JywgLTEpOworCisgICAgICBzZWxmLiRzZWFyY2gudmFsKCcnKTsKKyAgICAgIHNlbGYuJHNlYXJjaC5ibHVyKCk7CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ2ZvY3VzJywgZnVuY3Rpb24gKCkgeworICAgICAgaWYgKCFjb250YWluZXIuaXNPcGVuKCkpIHsKKyAgICAgICAgc2VsZi4kc2VhcmNoLmZvY3VzKCk7CisgICAgICB9CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6YWxsJywgZnVuY3Rpb24gKHBhcmFtcykgeworICAgICAgaWYgKHBhcmFtcy5xdWVyeS50ZXJtID09IG51bGwgfHwgcGFyYW1zLnF1ZXJ5LnRlcm0gPT09ICcnKSB7CisgICAgICAgIHZhciBzaG93U2VhcmNoID0gc2VsZi5zaG93U2VhcmNoKHBhcmFtcyk7CisKKyAgICAgICAgaWYgKHNob3dTZWFyY2gpIHsKKyAgICAgICAgICBzZWxmLiRzZWFyY2hDb250YWluZXIucmVtb3ZlQ2xhc3MoJ3NlbGVjdDItc2VhcmNoLS1oaWRlJyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc2VsZi4kc2VhcmNoQ29udGFpbmVyLmFkZENsYXNzKCdzZWxlY3QyLXNlYXJjaC0taGlkZScpOworICAgICAgICB9CisgICAgICB9CisgICAgfSk7CisgIH07CisKKyAgU2VhcmNoLnByb3RvdHlwZS5oYW5kbGVTZWFyY2ggPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgaWYgKCF0aGlzLl9rZXlVcFByZXZlbnRlZCkgeworICAgICAgdmFyIGlucHV0ID0gdGhpcy4kc2VhcmNoLnZhbCgpOworCisgICAgICB0aGlzLnRyaWdnZXIoJ3F1ZXJ5JywgeworICAgICAgICB0ZXJtOiBpbnB1dAorICAgICAgfSk7CisgICAgfQorCisgICAgdGhpcy5fa2V5VXBQcmV2ZW50ZWQgPSBmYWxzZTsKKyAgfTsKKworICBTZWFyY2gucHJvdG90eXBlLnNob3dTZWFyY2ggPSBmdW5jdGlvbiAoXywgcGFyYW1zKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH07CisKKyAgcmV0dXJuIFNlYXJjaDsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvZHJvcGRvd24vaGlkZVBsYWNlaG9sZGVyJyxbCisKK10sIGZ1bmN0aW9uICgpIHsKKyAgZnVuY3Rpb24gSGlkZVBsYWNlaG9sZGVyIChkZWNvcmF0ZWQsICRlbGVtZW50LCBvcHRpb25zLCBkYXRhQWRhcHRlcikgeworICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0aGlzLm5vcm1hbGl6ZVBsYWNlaG9sZGVyKG9wdGlvbnMuZ2V0KCdwbGFjZWhvbGRlcicpKTsKKworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsICRlbGVtZW50LCBvcHRpb25zLCBkYXRhQWRhcHRlcik7CisgIH0KKworICBIaWRlUGxhY2Vob2xkZXIucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGRhdGEpIHsKKyAgICBkYXRhLnJlc3VsdHMgPSB0aGlzLnJlbW92ZVBsYWNlaG9sZGVyKGRhdGEucmVzdWx0cyk7CisKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBkYXRhKTsKKyAgfTsKKworICBIaWRlUGxhY2Vob2xkZXIucHJvdG90eXBlLm5vcm1hbGl6ZVBsYWNlaG9sZGVyID0gZnVuY3Rpb24gKF8sIHBsYWNlaG9sZGVyKSB7CisgICAgaWYgKHR5cGVvZiBwbGFjZWhvbGRlciA9PT0gJ3N0cmluZycpIHsKKyAgICAgIHBsYWNlaG9sZGVyID0geworICAgICAgICBpZDogJycsCisgICAgICAgIHRleHQ6IHBsYWNlaG9sZGVyCisgICAgICB9OworICAgIH0KKworICAgIHJldHVybiBwbGFjZWhvbGRlcjsKKyAgfTsKKworICBIaWRlUGxhY2Vob2xkZXIucHJvdG90eXBlLnJlbW92ZVBsYWNlaG9sZGVyID0gZnVuY3Rpb24gKF8sIGRhdGEpIHsKKyAgICB2YXIgbW9kaWZpZWREYXRhID0gZGF0YS5zbGljZSgwKTsKKworICAgIGZvciAodmFyIGQgPSBkYXRhLmxlbmd0aCAtIDE7IGQgPj0gMDsgZC0tKSB7CisgICAgICB2YXIgaXRlbSA9IGRhdGFbZF07CisKKyAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyLmlkID09PSBpdGVtLmlkKSB7CisgICAgICAgIG1vZGlmaWVkRGF0YS5zcGxpY2UoZCwgMSk7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1vZGlmaWVkRGF0YTsKKyAgfTsKKworICByZXR1cm4gSGlkZVBsYWNlaG9sZGVyOworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9kcm9wZG93bi9pbmZpbml0ZVNjcm9sbCcsWworICAnanF1ZXJ5JworXSwgZnVuY3Rpb24gKCQpIHsKKyAgZnVuY3Rpb24gSW5maW5pdGVTY3JvbGwgKGRlY29yYXRlZCwgJGVsZW1lbnQsIG9wdGlvbnMsIGRhdGFBZGFwdGVyKSB7CisgICAgdGhpcy5sYXN0UGFyYW1zID0ge307CisKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCAkZWxlbWVudCwgb3B0aW9ucywgZGF0YUFkYXB0ZXIpOworCisgICAgdGhpcy4kbG9hZGluZ01vcmUgPSB0aGlzLmNyZWF0ZUxvYWRpbmdNb3JlKCk7CisgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CisgIH0KKworICBJbmZpbml0ZVNjcm9sbC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgZGF0YSkgeworICAgIHRoaXMuJGxvYWRpbmdNb3JlLnJlbW92ZSgpOworICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOworCisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgZGF0YSk7CisKKyAgICBpZiAodGhpcy5zaG93TG9hZGluZ01vcmUoZGF0YSkpIHsKKyAgICAgIHRoaXMuJHJlc3VsdHMuYXBwZW5kKHRoaXMuJGxvYWRpbmdNb3JlKTsKKyAgICB9CisgIH07CisKKyAgSW5maW5pdGVTY3JvbGwucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIsICRjb250YWluZXIpIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBjb250YWluZXIsICRjb250YWluZXIpOworCisgICAgY29udGFpbmVyLm9uKCdxdWVyeScsIGZ1bmN0aW9uIChwYXJhbXMpIHsKKyAgICAgIHNlbGYubGFzdFBhcmFtcyA9IHBhcmFtczsKKyAgICAgIHNlbGYubG9hZGluZyA9IHRydWU7CisgICAgfSk7CisKKyAgICBjb250YWluZXIub24oJ3F1ZXJ5OmFwcGVuZCcsIGZ1bmN0aW9uIChwYXJhbXMpIHsKKyAgICAgIHNlbGYubGFzdFBhcmFtcyA9IHBhcmFtczsKKyAgICAgIHNlbGYubG9hZGluZyA9IHRydWU7CisgICAgfSk7CisKKyAgICB0aGlzLiRyZXN1bHRzLm9uKCdzY3JvbGwnLCBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgaXNMb2FkTW9yZVZpc2libGUgPSAkLmNvbnRhaW5zKAorICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsCisgICAgICAgIHNlbGYuJGxvYWRpbmdNb3JlWzBdCisgICAgICApOworCisgICAgICBpZiAoc2VsZi5sb2FkaW5nIHx8ICFpc0xvYWRNb3JlVmlzaWJsZSkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gc2VsZi4kcmVzdWx0cy5vZmZzZXQoKS50b3AgKworICAgICAgICBzZWxmLiRyZXN1bHRzLm91dGVySGVpZ2h0KGZhbHNlKTsKKyAgICAgIHZhciBsb2FkaW5nTW9yZU9mZnNldCA9IHNlbGYuJGxvYWRpbmdNb3JlLm9mZnNldCgpLnRvcCArCisgICAgICAgIHNlbGYuJGxvYWRpbmdNb3JlLm91dGVySGVpZ2h0KGZhbHNlKTsKKworICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgKyA1MCA+PSBsb2FkaW5nTW9yZU9mZnNldCkgeworICAgICAgICBzZWxmLmxvYWRNb3JlKCk7CisgICAgICB9CisgICAgfSk7CisgIH07CisKKyAgSW5maW5pdGVTY3JvbGwucHJvdG90eXBlLmxvYWRNb3JlID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMubG9hZGluZyA9IHRydWU7CisKKyAgICB2YXIgcGFyYW1zID0gJC5leHRlbmQoe30sIHtwYWdlOiAxfSwgdGhpcy5sYXN0UGFyYW1zKTsKKworICAgIHBhcmFtcy5wYWdlKys7CisKKyAgICB0aGlzLnRyaWdnZXIoJ3F1ZXJ5OmFwcGVuZCcsIHBhcmFtcyk7CisgIH07CisKKyAgSW5maW5pdGVTY3JvbGwucHJvdG90eXBlLnNob3dMb2FkaW5nTW9yZSA9IGZ1bmN0aW9uIChfLCBkYXRhKSB7CisgICAgcmV0dXJuIGRhdGEucGFnaW5hdGlvbiAmJiBkYXRhLnBhZ2luYXRpb24ubW9yZTsKKyAgfTsKKworICBJbmZpbml0ZVNjcm9sbC5wcm90b3R5cGUuY3JlYXRlTG9hZGluZ01vcmUgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyICRvcHRpb24gPSAkKAorICAgICAgJzxsaSAnICsKKyAgICAgICdjbGFzcz0ic2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWxvYWQtbW9yZSInICsKKyAgICAgICdyb2xlPSJ0cmVlaXRlbSIgYXJpYS1kaXNhYmxlZD0idHJ1ZSI+PC9saT4nCisgICAgKTsKKworICAgIHZhciBtZXNzYWdlID0gdGhpcy5vcHRpb25zLmdldCgndHJhbnNsYXRpb25zJykuZ2V0KCdsb2FkaW5nTW9yZScpOworCisgICAgJG9wdGlvbi5odG1sKG1lc3NhZ2UodGhpcy5sYXN0UGFyYW1zKSk7CisKKyAgICByZXR1cm4gJG9wdGlvbjsKKyAgfTsKKworICByZXR1cm4gSW5maW5pdGVTY3JvbGw7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duL2F0dGFjaEJvZHknLFsKKyAgJ2pxdWVyeScsCisgICcuLi91dGlscycKK10sIGZ1bmN0aW9uICgkLCBVdGlscykgeworICBmdW5jdGlvbiBBdHRhY2hCb2R5IChkZWNvcmF0ZWQsICRlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhpcy4kZHJvcGRvd25QYXJlbnQgPSBvcHRpb25zLmdldCgnZHJvcGRvd25QYXJlbnQnKSB8fCAkKGRvY3VtZW50LmJvZHkpOworCisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgJGVsZW1lbnQsIG9wdGlvbnMpOworICB9CisKKyAgQXR0YWNoQm9keS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGNvbnRhaW5lciwgJGNvbnRhaW5lcikgeworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIHZhciBzZXR1cFJlc3VsdHNFdmVudHMgPSBmYWxzZTsKKworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGNvbnRhaW5lciwgJGNvbnRhaW5lcik7CisKKyAgICBjb250YWluZXIub24oJ29wZW4nLCBmdW5jdGlvbiAoKSB7CisgICAgICBzZWxmLl9zaG93RHJvcGRvd24oKTsKKyAgICAgIHNlbGYuX2F0dGFjaFBvc2l0aW9uaW5nSGFuZGxlcihjb250YWluZXIpOworCisgICAgICBpZiAoIXNldHVwUmVzdWx0c0V2ZW50cykgeworICAgICAgICBzZXR1cFJlc3VsdHNFdmVudHMgPSB0cnVlOworCisgICAgICAgIGNvbnRhaW5lci5vbigncmVzdWx0czphbGwnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgc2VsZi5fcG9zaXRpb25Ecm9wZG93bigpOworICAgICAgICAgIHNlbGYuX3Jlc2l6ZURyb3Bkb3duKCk7CisgICAgICAgIH0pOworCisgICAgICAgIGNvbnRhaW5lci5vbigncmVzdWx0czphcHBlbmQnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgc2VsZi5fcG9zaXRpb25Ecm9wZG93bigpOworICAgICAgICAgIHNlbGYuX3Jlc2l6ZURyb3Bkb3duKCk7CisgICAgICAgIH0pOworICAgICAgfQorICAgIH0pOworCisgICAgY29udGFpbmVyLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHNlbGYuX2hpZGVEcm9wZG93bigpOworICAgICAgc2VsZi5fZGV0YWNoUG9zaXRpb25pbmdIYW5kbGVyKGNvbnRhaW5lcik7CisgICAgfSk7CisKKyAgICB0aGlzLiRkcm9wZG93bkNvbnRhaW5lci5vbignbW91c2Vkb3duJywgZnVuY3Rpb24gKGV2dCkgeworICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpOworICAgIH0pOworICB9OworCisgIEF0dGFjaEJvZHkucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVjb3JhdGVkKSB7CisgICAgZGVjb3JhdGVkLmNhbGwodGhpcyk7CisKKyAgICB0aGlzLiRkcm9wZG93bkNvbnRhaW5lci5yZW1vdmUoKTsKKyAgfTsKKworICBBdHRhY2hCb2R5LnByb3RvdHlwZS5wb3NpdGlvbiA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsICRkcm9wZG93biwgJGNvbnRhaW5lcikgeworICAgIC8vIENsb25lIGFsbCBvZiB0aGUgY29udGFpbmVyIGNsYXNzZXMKKyAgICAkZHJvcGRvd24uYXR0cignY2xhc3MnLCAkY29udGFpbmVyLmF0dHIoJ2NsYXNzJykpOworCisgICAgJGRyb3Bkb3duLnJlbW92ZUNsYXNzKCdzZWxlY3QyJyk7CisgICAgJGRyb3Bkb3duLmFkZENsYXNzKCdzZWxlY3QyLWNvbnRhaW5lci0tb3BlbicpOworCisgICAgJGRyb3Bkb3duLmNzcyh7CisgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJywKKyAgICAgIHRvcDogLTk5OTk5OQorICAgIH0pOworCisgICAgdGhpcy4kY29udGFpbmVyID0gJGNvbnRhaW5lcjsKKyAgfTsKKworICBBdHRhY2hCb2R5LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGVjb3JhdGVkKSB7CisgICAgdmFyICRjb250YWluZXIgPSAkKCc8c3Bhbj48L3NwYW4+Jyk7CisKKyAgICB2YXIgJGRyb3Bkb3duID0gZGVjb3JhdGVkLmNhbGwodGhpcyk7CisgICAgJGNvbnRhaW5lci5hcHBlbmQoJGRyb3Bkb3duKTsKKworICAgIHRoaXMuJGRyb3Bkb3duQ29udGFpbmVyID0gJGNvbnRhaW5lcjsKKworICAgIHJldHVybiAkY29udGFpbmVyOworICB9OworCisgIEF0dGFjaEJvZHkucHJvdG90eXBlLl9oaWRlRHJvcGRvd24gPSBmdW5jdGlvbiAoZGVjb3JhdGVkKSB7CisgICAgdGhpcy4kZHJvcGRvd25Db250YWluZXIuZGV0YWNoKCk7CisgIH07CisKKyAgQXR0YWNoQm9keS5wcm90b3R5cGUuX2F0dGFjaFBvc2l0aW9uaW5nSGFuZGxlciA9CisgICAgICBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIpIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICB2YXIgc2Nyb2xsRXZlbnQgPSAnc2Nyb2xsLnNlbGVjdDIuJyArIGNvbnRhaW5lci5pZDsKKyAgICB2YXIgcmVzaXplRXZlbnQgPSAncmVzaXplLnNlbGVjdDIuJyArIGNvbnRhaW5lci5pZDsKKyAgICB2YXIgb3JpZW50YXRpb25FdmVudCA9ICdvcmllbnRhdGlvbmNoYW5nZS5zZWxlY3QyLicgKyBjb250YWluZXIuaWQ7CisKKyAgICB2YXIgJHdhdGNoZXJzID0gdGhpcy4kY29udGFpbmVyLnBhcmVudHMoKS5maWx0ZXIoVXRpbHMuaGFzU2Nyb2xsKTsKKyAgICAkd2F0Y2hlcnMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICBVdGlscy5TdG9yZURhdGEodGhpcywgJ3NlbGVjdDItc2Nyb2xsLXBvc2l0aW9uJywgeworICAgICAgICB4OiAkKHRoaXMpLnNjcm9sbExlZnQoKSwKKyAgICAgICAgeTogJCh0aGlzKS5zY3JvbGxUb3AoKQorICAgICAgfSk7CisgICAgfSk7CisKKyAgICAkd2F0Y2hlcnMub24oc2Nyb2xsRXZlbnQsIGZ1bmN0aW9uIChldikgeworICAgICAgdmFyIHBvc2l0aW9uID0gVXRpbHMuR2V0RGF0YSh0aGlzLCAnc2VsZWN0Mi1zY3JvbGwtcG9zaXRpb24nKTsKKyAgICAgICQodGhpcykuc2Nyb2xsVG9wKHBvc2l0aW9uLnkpOworICAgIH0pOworCisgICAgJCh3aW5kb3cpLm9uKHNjcm9sbEV2ZW50ICsgJyAnICsgcmVzaXplRXZlbnQgKyAnICcgKyBvcmllbnRhdGlvbkV2ZW50LAorICAgICAgZnVuY3Rpb24gKGUpIHsKKyAgICAgIHNlbGYuX3Bvc2l0aW9uRHJvcGRvd24oKTsKKyAgICAgIHNlbGYuX3Jlc2l6ZURyb3Bkb3duKCk7CisgICAgfSk7CisgIH07CisKKyAgQXR0YWNoQm9keS5wcm90b3R5cGUuX2RldGFjaFBvc2l0aW9uaW5nSGFuZGxlciA9CisgICAgICBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIpIHsKKyAgICB2YXIgc2Nyb2xsRXZlbnQgPSAnc2Nyb2xsLnNlbGVjdDIuJyArIGNvbnRhaW5lci5pZDsKKyAgICB2YXIgcmVzaXplRXZlbnQgPSAncmVzaXplLnNlbGVjdDIuJyArIGNvbnRhaW5lci5pZDsKKyAgICB2YXIgb3JpZW50YXRpb25FdmVudCA9ICdvcmllbnRhdGlvbmNoYW5nZS5zZWxlY3QyLicgKyBjb250YWluZXIuaWQ7CisKKyAgICB2YXIgJHdhdGNoZXJzID0gdGhpcy4kY29udGFpbmVyLnBhcmVudHMoKS5maWx0ZXIoVXRpbHMuaGFzU2Nyb2xsKTsKKyAgICAkd2F0Y2hlcnMub2ZmKHNjcm9sbEV2ZW50KTsKKworICAgICQod2luZG93KS5vZmYoc2Nyb2xsRXZlbnQgKyAnICcgKyByZXNpemVFdmVudCArICcgJyArIG9yaWVudGF0aW9uRXZlbnQpOworICB9OworCisgIEF0dGFjaEJvZHkucHJvdG90eXBlLl9wb3NpdGlvbkRyb3Bkb3duID0gZnVuY3Rpb24gKCkgeworICAgIHZhciAkd2luZG93ID0gJCh3aW5kb3cpOworCisgICAgdmFyIGlzQ3VycmVudGx5QWJvdmUgPSB0aGlzLiRkcm9wZG93bi5oYXNDbGFzcygnc2VsZWN0Mi1kcm9wZG93bi0tYWJvdmUnKTsKKyAgICB2YXIgaXNDdXJyZW50bHlCZWxvdyA9IHRoaXMuJGRyb3Bkb3duLmhhc0NsYXNzKCdzZWxlY3QyLWRyb3Bkb3duLS1iZWxvdycpOworCisgICAgdmFyIG5ld0RpcmVjdGlvbiA9IG51bGw7CisKKyAgICB2YXIgb2Zmc2V0ID0gdGhpcy4kY29udGFpbmVyLm9mZnNldCgpOworCisgICAgb2Zmc2V0LmJvdHRvbSA9IG9mZnNldC50b3AgKyB0aGlzLiRjb250YWluZXIub3V0ZXJIZWlnaHQoZmFsc2UpOworCisgICAgdmFyIGNvbnRhaW5lciA9IHsKKyAgICAgIGhlaWdodDogdGhpcy4kY29udGFpbmVyLm91dGVySGVpZ2h0KGZhbHNlKQorICAgIH07CisKKyAgICBjb250YWluZXIudG9wID0gb2Zmc2V0LnRvcDsKKyAgICBjb250YWluZXIuYm90dG9tID0gb2Zmc2V0LnRvcCArIGNvbnRhaW5lci5oZWlnaHQ7CisKKyAgICB2YXIgZHJvcGRvd24gPSB7CisgICAgICBoZWlnaHQ6IHRoaXMuJGRyb3Bkb3duLm91dGVySGVpZ2h0KGZhbHNlKQorICAgIH07CisKKyAgICB2YXIgdmlld3BvcnQgPSB7CisgICAgICB0b3A6ICR3aW5kb3cuc2Nyb2xsVG9wKCksCisgICAgICBib3R0b206ICR3aW5kb3cuc2Nyb2xsVG9wKCkgKyAkd2luZG93LmhlaWdodCgpCisgICAgfTsKKworICAgIHZhciBlbm91Z2hSb29tQWJvdmUgPSB2aWV3cG9ydC50b3AgPCAob2Zmc2V0LnRvcCAtIGRyb3Bkb3duLmhlaWdodCk7CisgICAgdmFyIGVub3VnaFJvb21CZWxvdyA9IHZpZXdwb3J0LmJvdHRvbSA+IChvZmZzZXQuYm90dG9tICsgZHJvcGRvd24uaGVpZ2h0KTsKKworICAgIHZhciBjc3MgPSB7CisgICAgICBsZWZ0OiBvZmZzZXQubGVmdCwKKyAgICAgIHRvcDogY29udGFpbmVyLmJvdHRvbQorICAgIH07CisKKyAgICAvLyBEZXRlcm1pbmUgd2hhdCB0aGUgcGFyZW50IGVsZW1lbnQgaXMgdG8gdXNlIGZvciBjYWxjaXVsYXRpbmcgdGhlIG9mZnNldAorICAgIHZhciAkb2Zmc2V0UGFyZW50ID0gdGhpcy4kZHJvcGRvd25QYXJlbnQ7CisKKyAgICAvLyBGb3Igc3RhdGljYWxseSBwb3NpdG9uZWQgZWxlbWVudHMsIHdlIG5lZWQgdG8gZ2V0IHRoZSBlbGVtZW50CisgICAgLy8gdGhhdCBpcyBkZXRlcm1pbmluZyB0aGUgb2Zmc2V0CisgICAgaWYgKCRvZmZzZXRQYXJlbnQuY3NzKCdwb3NpdGlvbicpID09PSAnc3RhdGljJykgeworICAgICAgJG9mZnNldFBhcmVudCA9ICRvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50KCk7CisgICAgfQorCisgICAgdmFyIHBhcmVudE9mZnNldCA9ICRvZmZzZXRQYXJlbnQub2Zmc2V0KCk7CisKKyAgICBjc3MudG9wIC09IHBhcmVudE9mZnNldC50b3A7CisgICAgY3NzLmxlZnQgLT0gcGFyZW50T2Zmc2V0LmxlZnQ7CisKKyAgICBpZiAoIWlzQ3VycmVudGx5QWJvdmUgJiYgIWlzQ3VycmVudGx5QmVsb3cpIHsKKyAgICAgIG5ld0RpcmVjdGlvbiA9ICdiZWxvdyc7CisgICAgfQorCisgICAgaWYgKCFlbm91Z2hSb29tQmVsb3cgJiYgZW5vdWdoUm9vbUFib3ZlICYmICFpc0N1cnJlbnRseUFib3ZlKSB7CisgICAgICBuZXdEaXJlY3Rpb24gPSAnYWJvdmUnOworICAgIH0gZWxzZSBpZiAoIWVub3VnaFJvb21BYm92ZSAmJiBlbm91Z2hSb29tQmVsb3cgJiYgaXNDdXJyZW50bHlBYm92ZSkgeworICAgICAgbmV3RGlyZWN0aW9uID0gJ2JlbG93JzsKKyAgICB9CisKKyAgICBpZiAobmV3RGlyZWN0aW9uID09ICdhYm92ZScgfHwKKyAgICAgIChpc0N1cnJlbnRseUFib3ZlICYmIG5ld0RpcmVjdGlvbiAhPT0gJ2JlbG93JykpIHsKKyAgICAgIGNzcy50b3AgPSBjb250YWluZXIudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGRyb3Bkb3duLmhlaWdodDsKKyAgICB9CisKKyAgICBpZiAobmV3RGlyZWN0aW9uICE9IG51bGwpIHsKKyAgICAgIHRoaXMuJGRyb3Bkb3duCisgICAgICAgIC5yZW1vdmVDbGFzcygnc2VsZWN0Mi1kcm9wZG93bi0tYmVsb3cgc2VsZWN0Mi1kcm9wZG93bi0tYWJvdmUnKQorICAgICAgICAuYWRkQ2xhc3MoJ3NlbGVjdDItZHJvcGRvd24tLScgKyBuZXdEaXJlY3Rpb24pOworICAgICAgdGhpcy4kY29udGFpbmVyCisgICAgICAgIC5yZW1vdmVDbGFzcygnc2VsZWN0Mi1jb250YWluZXItLWJlbG93IHNlbGVjdDItY29udGFpbmVyLS1hYm92ZScpCisgICAgICAgIC5hZGRDbGFzcygnc2VsZWN0Mi1jb250YWluZXItLScgKyBuZXdEaXJlY3Rpb24pOworICAgIH0KKworICAgIHRoaXMuJGRyb3Bkb3duQ29udGFpbmVyLmNzcyhjc3MpOworICB9OworCisgIEF0dGFjaEJvZHkucHJvdG90eXBlLl9yZXNpemVEcm9wZG93biA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgY3NzID0geworICAgICAgd2lkdGg6IHRoaXMuJGNvbnRhaW5lci5vdXRlcldpZHRoKGZhbHNlKSArICdweCcKKyAgICB9OworCisgICAgaWYgKHRoaXMub3B0aW9ucy5nZXQoJ2Ryb3Bkb3duQXV0b1dpZHRoJykpIHsKKyAgICAgIGNzcy5taW5XaWR0aCA9IGNzcy53aWR0aDsKKyAgICAgIGNzcy5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7CisgICAgICBjc3Mud2lkdGggPSAnYXV0byc7CisgICAgfQorCisgICAgdGhpcy4kZHJvcGRvd24uY3NzKGNzcyk7CisgIH07CisKKyAgQXR0YWNoQm9keS5wcm90b3R5cGUuX3Nob3dEcm9wZG93biA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQpIHsKKyAgICB0aGlzLiRkcm9wZG93bkNvbnRhaW5lci5hcHBlbmRUbyh0aGlzLiRkcm9wZG93blBhcmVudCk7CisKKyAgICB0aGlzLl9wb3NpdGlvbkRyb3Bkb3duKCk7CisgICAgdGhpcy5fcmVzaXplRHJvcGRvd24oKTsKKyAgfTsKKworICByZXR1cm4gQXR0YWNoQm9keTsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvZHJvcGRvd24vbWluaW11bVJlc3VsdHNGb3JTZWFyY2gnLFsKKworXSwgZnVuY3Rpb24gKCkgeworICBmdW5jdGlvbiBjb3VudFJlc3VsdHMgKGRhdGEpIHsKKyAgICB2YXIgY291bnQgPSAwOworCisgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkYXRhLmxlbmd0aDsgZCsrKSB7CisgICAgICB2YXIgaXRlbSA9IGRhdGFbZF07CisKKyAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7CisgICAgICAgIGNvdW50ICs9IGNvdW50UmVzdWx0cyhpdGVtLmNoaWxkcmVuKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNvdW50Kys7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworICB9CisKKyAgZnVuY3Rpb24gTWluaW11bVJlc3VsdHNGb3JTZWFyY2ggKGRlY29yYXRlZCwgJGVsZW1lbnQsIG9wdGlvbnMsIGRhdGFBZGFwdGVyKSB7CisgICAgdGhpcy5taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCA9IG9wdGlvbnMuZ2V0KCdtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaCcpOworCisgICAgaWYgKHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2ggPCAwKSB7CisgICAgICB0aGlzLm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoID0gSW5maW5pdHk7CisgICAgfQorCisgICAgZGVjb3JhdGVkLmNhbGwodGhpcywgJGVsZW1lbnQsIG9wdGlvbnMsIGRhdGFBZGFwdGVyKTsKKyAgfQorCisgIE1pbmltdW1SZXN1bHRzRm9yU2VhcmNoLnByb3RvdHlwZS5zaG93U2VhcmNoID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgcGFyYW1zKSB7CisgICAgaWYgKGNvdW50UmVzdWx0cyhwYXJhbXMuZGF0YS5yZXN1bHRzKSA8IHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2gpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gZGVjb3JhdGVkLmNhbGwodGhpcywgcGFyYW1zKTsKKyAgfTsKKworICByZXR1cm4gTWluaW11bVJlc3VsdHNGb3JTZWFyY2g7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duL3NlbGVjdE9uQ2xvc2UnLFsKKyAgJy4uL3V0aWxzJworXSwgZnVuY3Rpb24gKFV0aWxzKSB7CisgIGZ1bmN0aW9uIFNlbGVjdE9uQ2xvc2UgKCkgeyB9CisKKyAgU2VsZWN0T25DbG9zZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGNvbnRhaW5lciwgJGNvbnRhaW5lcikgeworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGNvbnRhaW5lciwgJGNvbnRhaW5lcik7CisKKyAgICBjb250YWluZXIub24oJ2Nsb3NlJywgZnVuY3Rpb24gKHBhcmFtcykgeworICAgICAgc2VsZi5faGFuZGxlU2VsZWN0T25DbG9zZShwYXJhbXMpOworICAgIH0pOworICB9OworCisgIFNlbGVjdE9uQ2xvc2UucHJvdG90eXBlLl9oYW5kbGVTZWxlY3RPbkNsb3NlID0gZnVuY3Rpb24gKF8sIHBhcmFtcykgeworICAgIGlmIChwYXJhbXMgJiYgcGFyYW1zLm9yaWdpbmFsU2VsZWN0MkV2ZW50ICE9IG51bGwpIHsKKyAgICAgIHZhciBldmVudCA9IHBhcmFtcy5vcmlnaW5hbFNlbGVjdDJFdmVudDsKKworICAgICAgLy8gRG9uJ3Qgc2VsZWN0IGFuIGl0ZW0gaWYgdGhlIGNsb3NlIGV2ZW50IHdhcyB0cmlnZ2VyZWQgZnJvbSBhIHNlbGVjdCBvcgorICAgICAgLy8gdW5zZWxlY3QgZXZlbnQKKyAgICAgIGlmIChldmVudC5fdHlwZSA9PT0gJ3NlbGVjdCcgfHwgZXZlbnQuX3R5cGUgPT09ICd1bnNlbGVjdCcpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKworICAgIHZhciAkaGlnaGxpZ2h0ZWRSZXN1bHRzID0gdGhpcy5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKTsKKworICAgIC8vIE9ubHkgc2VsZWN0IGhpZ2hsaWdodGVkIHJlc3VsdHMKKyAgICBpZiAoJGhpZ2hsaWdodGVkUmVzdWx0cy5sZW5ndGggPCAxKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFyIGRhdGEgPSBVdGlscy5HZXREYXRhKCRoaWdobGlnaHRlZFJlc3VsdHNbMF0sICdkYXRhJyk7CisKKyAgICAvLyBEb24ndCByZS1zZWxlY3QgYWxyZWFkeSBzZWxlY3RlZCByZXN1bHRlCisgICAgaWYgKAorICAgICAgKGRhdGEuZWxlbWVudCAhPSBudWxsICYmIGRhdGEuZWxlbWVudC5zZWxlY3RlZCkgfHwKKyAgICAgIChkYXRhLmVsZW1lbnQgPT0gbnVsbCAmJiBkYXRhLnNlbGVjdGVkKQorICAgICkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRoaXMudHJpZ2dlcignc2VsZWN0JywgeworICAgICAgICBkYXRhOiBkYXRhCisgICAgfSk7CisgIH07CisKKyAgcmV0dXJuIFNlbGVjdE9uQ2xvc2U7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duL2Nsb3NlT25TZWxlY3QnLFsKKworXSwgZnVuY3Rpb24gKCkgeworICBmdW5jdGlvbiBDbG9zZU9uU2VsZWN0ICgpIHsgfQorCisgIENsb3NlT25TZWxlY3QucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIsICRjb250YWluZXIpIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBjb250YWluZXIsICRjb250YWluZXIpOworCisgICAgY29udGFpbmVyLm9uKCdzZWxlY3QnLCBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICBzZWxmLl9zZWxlY3RUcmlnZ2VyZWQoZXZ0KTsKKyAgICB9KTsKKworICAgIGNvbnRhaW5lci5vbigndW5zZWxlY3QnLCBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICBzZWxmLl9zZWxlY3RUcmlnZ2VyZWQoZXZ0KTsKKyAgICB9KTsKKyAgfTsKKworICBDbG9zZU9uU2VsZWN0LnByb3RvdHlwZS5fc2VsZWN0VHJpZ2dlcmVkID0gZnVuY3Rpb24gKF8sIGV2dCkgeworICAgIHZhciBvcmlnaW5hbEV2ZW50ID0gZXZ0Lm9yaWdpbmFsRXZlbnQ7CisKKyAgICAvLyBEb24ndCBjbG9zZSBpZiB0aGUgY29udHJvbCBrZXkgaXMgYmVpbmcgaGVsZAorICAgIGlmIChvcmlnaW5hbEV2ZW50ICYmIG9yaWdpbmFsRXZlbnQuY3RybEtleSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRoaXMudHJpZ2dlcignY2xvc2UnLCB7CisgICAgICBvcmlnaW5hbEV2ZW50OiBvcmlnaW5hbEV2ZW50LAorICAgICAgb3JpZ2luYWxTZWxlY3QyRXZlbnQ6IGV2dAorICAgIH0pOworICB9OworCisgIHJldHVybiBDbG9zZU9uU2VsZWN0OworfSk7CisKK1MyLmRlZmluZSgnc2VsZWN0Mi9pMThuL2VuJyxbXSxmdW5jdGlvbiAoKSB7CisgIC8vIEVuZ2xpc2gKKyAgcmV0dXJuIHsKKyAgICBlcnJvckxvYWRpbmc6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiAnVGhlIHJlc3VsdHMgY291bGQgbm90IGJlIGxvYWRlZC4nOworICAgIH0sCisgICAgaW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoYXJncykgeworICAgICAgdmFyIG92ZXJDaGFycyA9IGFyZ3MuaW5wdXQubGVuZ3RoIC0gYXJncy5tYXhpbXVtOworCisgICAgICB2YXIgbWVzc2FnZSA9ICdQbGVhc2UgZGVsZXRlICcgKyBvdmVyQ2hhcnMgKyAnIGNoYXJhY3Rlcic7CisKKyAgICAgIGlmIChvdmVyQ2hhcnMgIT0gMSkgeworICAgICAgICBtZXNzYWdlICs9ICdzJzsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIG1lc3NhZ2U7CisgICAgfSwKKyAgICBpbnB1dFRvb1Nob3J0OiBmdW5jdGlvbiAoYXJncykgeworICAgICAgdmFyIHJlbWFpbmluZ0NoYXJzID0gYXJncy5taW5pbXVtIC0gYXJncy5pbnB1dC5sZW5ndGg7CisKKyAgICAgIHZhciBtZXNzYWdlID0gJ1BsZWFzZSBlbnRlciAnICsgcmVtYWluaW5nQ2hhcnMgKyAnIG9yIG1vcmUgY2hhcmFjdGVycyc7CisKKyAgICAgIHJldHVybiBtZXNzYWdlOworICAgIH0sCisgICAgbG9hZGluZ01vcmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiAnTG9hZGluZyBtb3JlIHJlc3VsdHPigKYnOworICAgIH0sCisgICAgbWF4aW11bVNlbGVjdGVkOiBmdW5jdGlvbiAoYXJncykgeworICAgICAgdmFyIG1lc3NhZ2UgPSAnWW91IGNhbiBvbmx5IHNlbGVjdCAnICsgYXJncy5tYXhpbXVtICsgJyBpdGVtJzsKKworICAgICAgaWYgKGFyZ3MubWF4aW11bSAhPSAxKSB7CisgICAgICAgIG1lc3NhZ2UgKz0gJ3MnOworICAgICAgfQorCisgICAgICByZXR1cm4gbWVzc2FnZTsKKyAgICB9LAorICAgIG5vUmVzdWx0czogZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuICdObyByZXN1bHRzIGZvdW5kJzsKKyAgICB9LAorICAgIHNlYXJjaGluZzogZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuICdTZWFyY2hpbmfigKYnOworICAgIH0KKyAgfTsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvZGVmYXVsdHMnLFsKKyAgJ2pxdWVyeScsCisgICdyZXF1aXJlJywKKworICAnLi9yZXN1bHRzJywKKworICAnLi9zZWxlY3Rpb24vc2luZ2xlJywKKyAgJy4vc2VsZWN0aW9uL211bHRpcGxlJywKKyAgJy4vc2VsZWN0aW9uL3BsYWNlaG9sZGVyJywKKyAgJy4vc2VsZWN0aW9uL2FsbG93Q2xlYXInLAorICAnLi9zZWxlY3Rpb24vc2VhcmNoJywKKyAgJy4vc2VsZWN0aW9uL2V2ZW50UmVsYXknLAorCisgICcuL3V0aWxzJywKKyAgJy4vdHJhbnNsYXRpb24nLAorICAnLi9kaWFjcml0aWNzJywKKworICAnLi9kYXRhL3NlbGVjdCcsCisgICcuL2RhdGEvYXJyYXknLAorICAnLi9kYXRhL2FqYXgnLAorICAnLi9kYXRhL3RhZ3MnLAorICAnLi9kYXRhL3Rva2VuaXplcicsCisgICcuL2RhdGEvbWluaW11bUlucHV0TGVuZ3RoJywKKyAgJy4vZGF0YS9tYXhpbXVtSW5wdXRMZW5ndGgnLAorICAnLi9kYXRhL21heGltdW1TZWxlY3Rpb25MZW5ndGgnLAorCisgICcuL2Ryb3Bkb3duJywKKyAgJy4vZHJvcGRvd24vc2VhcmNoJywKKyAgJy4vZHJvcGRvd24vaGlkZVBsYWNlaG9sZGVyJywKKyAgJy4vZHJvcGRvd24vaW5maW5pdGVTY3JvbGwnLAorICAnLi9kcm9wZG93bi9hdHRhY2hCb2R5JywKKyAgJy4vZHJvcGRvd24vbWluaW11bVJlc3VsdHNGb3JTZWFyY2gnLAorICAnLi9kcm9wZG93bi9zZWxlY3RPbkNsb3NlJywKKyAgJy4vZHJvcGRvd24vY2xvc2VPblNlbGVjdCcsCisKKyAgJy4vaTE4bi9lbicKK10sIGZ1bmN0aW9uICgkLCByZXF1aXJlLAorCisgICAgICAgICAgICAgUmVzdWx0c0xpc3QsCisKKyAgICAgICAgICAgICBTaW5nbGVTZWxlY3Rpb24sIE11bHRpcGxlU2VsZWN0aW9uLCBQbGFjZWhvbGRlciwgQWxsb3dDbGVhciwKKyAgICAgICAgICAgICBTZWxlY3Rpb25TZWFyY2gsIEV2ZW50UmVsYXksCisKKyAgICAgICAgICAgICBVdGlscywgVHJhbnNsYXRpb24sIERJQUNSSVRJQ1MsCisKKyAgICAgICAgICAgICBTZWxlY3REYXRhLCBBcnJheURhdGEsIEFqYXhEYXRhLCBUYWdzLCBUb2tlbml6ZXIsCisgICAgICAgICAgICAgTWluaW11bUlucHV0TGVuZ3RoLCBNYXhpbXVtSW5wdXRMZW5ndGgsIE1heGltdW1TZWxlY3Rpb25MZW5ndGgsCisKKyAgICAgICAgICAgICBEcm9wZG93biwgRHJvcGRvd25TZWFyY2gsIEhpZGVQbGFjZWhvbGRlciwgSW5maW5pdGVTY3JvbGwsCisgICAgICAgICAgICAgQXR0YWNoQm9keSwgTWluaW11bVJlc3VsdHNGb3JTZWFyY2gsIFNlbGVjdE9uQ2xvc2UsIENsb3NlT25TZWxlY3QsCisKKyAgICAgICAgICAgICBFbmdsaXNoVHJhbnNsYXRpb24pIHsKKyAgZnVuY3Rpb24gRGVmYXVsdHMgKCkgeworICAgIHRoaXMucmVzZXQoKTsKKyAgfQorCisgIERlZmF1bHRzLnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CisgICAgb3B0aW9ucyA9ICQuZXh0ZW5kKHRydWUsIHt9LCB0aGlzLmRlZmF1bHRzLCBvcHRpb25zKTsKKworICAgIGlmIChvcHRpb25zLmRhdGFBZGFwdGVyID09IG51bGwpIHsKKyAgICAgIGlmIChvcHRpb25zLmFqYXggIT0gbnVsbCkgeworICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyID0gQWpheERhdGE7CisgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZGF0YSAhPSBudWxsKSB7CisgICAgICAgIG9wdGlvbnMuZGF0YUFkYXB0ZXIgPSBBcnJheURhdGE7CisgICAgICB9IGVsc2UgeworICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyID0gU2VsZWN0RGF0YTsKKyAgICAgIH0KKworICAgICAgaWYgKG9wdGlvbnMubWluaW11bUlucHV0TGVuZ3RoID4gMCkgeworICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoCisgICAgICAgICAgb3B0aW9ucy5kYXRhQWRhcHRlciwKKyAgICAgICAgICBNaW5pbXVtSW5wdXRMZW5ndGgKKyAgICAgICAgKTsKKyAgICAgIH0KKworICAgICAgaWYgKG9wdGlvbnMubWF4aW11bUlucHV0TGVuZ3RoID4gMCkgeworICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoCisgICAgICAgICAgb3B0aW9ucy5kYXRhQWRhcHRlciwKKyAgICAgICAgICBNYXhpbXVtSW5wdXRMZW5ndGgKKyAgICAgICAgKTsKKyAgICAgIH0KKworICAgICAgaWYgKG9wdGlvbnMubWF4aW11bVNlbGVjdGlvbkxlbmd0aCA+IDApIHsKKyAgICAgICAgb3B0aW9ucy5kYXRhQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKAorICAgICAgICAgIG9wdGlvbnMuZGF0YUFkYXB0ZXIsCisgICAgICAgICAgTWF4aW11bVNlbGVjdGlvbkxlbmd0aAorICAgICAgICApOworICAgICAgfQorCisgICAgICBpZiAob3B0aW9ucy50YWdzKSB7CisgICAgICAgIG9wdGlvbnMuZGF0YUFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZShvcHRpb25zLmRhdGFBZGFwdGVyLCBUYWdzKTsKKyAgICAgIH0KKworICAgICAgaWYgKG9wdGlvbnMudG9rZW5TZXBhcmF0b3JzICE9IG51bGwgfHwgb3B0aW9ucy50b2tlbml6ZXIgIT0gbnVsbCkgeworICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoCisgICAgICAgICAgb3B0aW9ucy5kYXRhQWRhcHRlciwKKyAgICAgICAgICBUb2tlbml6ZXIKKyAgICAgICAgKTsKKyAgICAgIH0KKworICAgICAgaWYgKG9wdGlvbnMucXVlcnkgIT0gbnVsbCkgeworICAgICAgICB2YXIgUXVlcnkgPSByZXF1aXJlKG9wdGlvbnMuYW1kQmFzZSArICdjb21wYXQvcXVlcnknKTsKKworICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoCisgICAgICAgICAgb3B0aW9ucy5kYXRhQWRhcHRlciwKKyAgICAgICAgICBRdWVyeQorICAgICAgICApOworICAgICAgfQorCisgICAgICBpZiAob3B0aW9ucy5pbml0U2VsZWN0aW9uICE9IG51bGwpIHsKKyAgICAgICAgdmFyIEluaXRTZWxlY3Rpb24gPSByZXF1aXJlKG9wdGlvbnMuYW1kQmFzZSArICdjb21wYXQvaW5pdFNlbGVjdGlvbicpOworCisgICAgICAgIG9wdGlvbnMuZGF0YUFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZSgKKyAgICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyLAorICAgICAgICAgIEluaXRTZWxlY3Rpb24KKyAgICAgICAgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAob3B0aW9ucy5yZXN1bHRzQWRhcHRlciA9PSBudWxsKSB7CisgICAgICBvcHRpb25zLnJlc3VsdHNBZGFwdGVyID0gUmVzdWx0c0xpc3Q7CisKKyAgICAgIGlmIChvcHRpb25zLmFqYXggIT0gbnVsbCkgeworICAgICAgICBvcHRpb25zLnJlc3VsdHNBZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoCisgICAgICAgICAgb3B0aW9ucy5yZXN1bHRzQWRhcHRlciwKKyAgICAgICAgICBJbmZpbml0ZVNjcm9sbAorICAgICAgICApOworICAgICAgfQorCisgICAgICBpZiAob3B0aW9ucy5wbGFjZWhvbGRlciAhPSBudWxsKSB7CisgICAgICAgIG9wdGlvbnMucmVzdWx0c0FkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZSgKKyAgICAgICAgICBvcHRpb25zLnJlc3VsdHNBZGFwdGVyLAorICAgICAgICAgIEhpZGVQbGFjZWhvbGRlcgorICAgICAgICApOworICAgICAgfQorCisgICAgICBpZiAob3B0aW9ucy5zZWxlY3RPbkNsb3NlKSB7CisgICAgICAgIG9wdGlvbnMucmVzdWx0c0FkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZSgKKyAgICAgICAgICBvcHRpb25zLnJlc3VsdHNBZGFwdGVyLAorICAgICAgICAgIFNlbGVjdE9uQ2xvc2UKKyAgICAgICAgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAob3B0aW9ucy5kcm9wZG93bkFkYXB0ZXIgPT0gbnVsbCkgeworICAgICAgaWYgKG9wdGlvbnMubXVsdGlwbGUpIHsKKyAgICAgICAgb3B0aW9ucy5kcm9wZG93bkFkYXB0ZXIgPSBEcm9wZG93bjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBTZWFyY2hhYmxlRHJvcGRvd24gPSBVdGlscy5EZWNvcmF0ZShEcm9wZG93biwgRHJvcGRvd25TZWFyY2gpOworCisgICAgICAgIG9wdGlvbnMuZHJvcGRvd25BZGFwdGVyID0gU2VhcmNoYWJsZURyb3Bkb3duOworICAgICAgfQorCisgICAgICBpZiAob3B0aW9ucy5taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCAhPT0gMCkgeworICAgICAgICBvcHRpb25zLmRyb3Bkb3duQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKAorICAgICAgICAgIG9wdGlvbnMuZHJvcGRvd25BZGFwdGVyLAorICAgICAgICAgIE1pbmltdW1SZXN1bHRzRm9yU2VhcmNoCisgICAgICAgICk7CisgICAgICB9CisKKyAgICAgIGlmIChvcHRpb25zLmNsb3NlT25TZWxlY3QpIHsKKyAgICAgICAgb3B0aW9ucy5kcm9wZG93bkFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZSgKKyAgICAgICAgICBvcHRpb25zLmRyb3Bkb3duQWRhcHRlciwKKyAgICAgICAgICBDbG9zZU9uU2VsZWN0CisgICAgICAgICk7CisgICAgICB9CisKKyAgICAgIGlmICgKKyAgICAgICAgb3B0aW9ucy5kcm9wZG93bkNzc0NsYXNzICE9IG51bGwgfHwKKyAgICAgICAgb3B0aW9ucy5kcm9wZG93bkNzcyAhPSBudWxsIHx8CisgICAgICAgIG9wdGlvbnMuYWRhcHREcm9wZG93bkNzc0NsYXNzICE9IG51bGwKKyAgICAgICkgeworICAgICAgICB2YXIgRHJvcGRvd25DU1MgPSByZXF1aXJlKG9wdGlvbnMuYW1kQmFzZSArICdjb21wYXQvZHJvcGRvd25Dc3MnKTsKKworICAgICAgICBvcHRpb25zLmRyb3Bkb3duQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKAorICAgICAgICAgIG9wdGlvbnMuZHJvcGRvd25BZGFwdGVyLAorICAgICAgICAgIERyb3Bkb3duQ1NTCisgICAgICAgICk7CisgICAgICB9CisKKyAgICAgIG9wdGlvbnMuZHJvcGRvd25BZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoCisgICAgICAgIG9wdGlvbnMuZHJvcGRvd25BZGFwdGVyLAorICAgICAgICBBdHRhY2hCb2R5CisgICAgICApOworICAgIH0KKworICAgIGlmIChvcHRpb25zLnNlbGVjdGlvbkFkYXB0ZXIgPT0gbnVsbCkgeworICAgICAgaWYgKG9wdGlvbnMubXVsdGlwbGUpIHsKKyAgICAgICAgb3B0aW9ucy5zZWxlY3Rpb25BZGFwdGVyID0gTXVsdGlwbGVTZWxlY3Rpb247CisgICAgICB9IGVsc2UgeworICAgICAgICBvcHRpb25zLnNlbGVjdGlvbkFkYXB0ZXIgPSBTaW5nbGVTZWxlY3Rpb247CisgICAgICB9CisKKyAgICAgIC8vIEFkZCB0aGUgcGxhY2Vob2xkZXIgbWl4aW4gaWYgYSBwbGFjZWhvbGRlciB3YXMgc3BlY2lmaWVkCisgICAgICBpZiAob3B0aW9ucy5wbGFjZWhvbGRlciAhPSBudWxsKSB7CisgICAgICAgIG9wdGlvbnMuc2VsZWN0aW9uQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKAorICAgICAgICAgIG9wdGlvbnMuc2VsZWN0aW9uQWRhcHRlciwKKyAgICAgICAgICBQbGFjZWhvbGRlcgorICAgICAgICApOworICAgICAgfQorCisgICAgICBpZiAob3B0aW9ucy5hbGxvd0NsZWFyKSB7CisgICAgICAgIG9wdGlvbnMuc2VsZWN0aW9uQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKAorICAgICAgICAgIG9wdGlvbnMuc2VsZWN0aW9uQWRhcHRlciwKKyAgICAgICAgICBBbGxvd0NsZWFyCisgICAgICAgICk7CisgICAgICB9CisKKyAgICAgIGlmIChvcHRpb25zLm11bHRpcGxlKSB7CisgICAgICAgIG9wdGlvbnMuc2VsZWN0aW9uQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKAorICAgICAgICAgIG9wdGlvbnMuc2VsZWN0aW9uQWRhcHRlciwKKyAgICAgICAgICBTZWxlY3Rpb25TZWFyY2gKKyAgICAgICAgKTsKKyAgICAgIH0KKworICAgICAgaWYgKAorICAgICAgICBvcHRpb25zLmNvbnRhaW5lckNzc0NsYXNzICE9IG51bGwgfHwKKyAgICAgICAgb3B0aW9ucy5jb250YWluZXJDc3MgIT0gbnVsbCB8fAorICAgICAgICBvcHRpb25zLmFkYXB0Q29udGFpbmVyQ3NzQ2xhc3MgIT0gbnVsbAorICAgICAgKSB7CisgICAgICAgIHZhciBDb250YWluZXJDU1MgPSByZXF1aXJlKG9wdGlvbnMuYW1kQmFzZSArICdjb21wYXQvY29udGFpbmVyQ3NzJyk7CisKKyAgICAgICAgb3B0aW9ucy5zZWxlY3Rpb25BZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoCisgICAgICAgICAgb3B0aW9ucy5zZWxlY3Rpb25BZGFwdGVyLAorICAgICAgICAgIENvbnRhaW5lckNTUworICAgICAgICApOworICAgICAgfQorCisgICAgICBvcHRpb25zLnNlbGVjdGlvbkFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZSgKKyAgICAgICAgb3B0aW9ucy5zZWxlY3Rpb25BZGFwdGVyLAorICAgICAgICBFdmVudFJlbGF5CisgICAgICApOworICAgIH0KKworICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5sYW5ndWFnZSA9PT0gJ3N0cmluZycpIHsKKyAgICAgIC8vIENoZWNrIGlmIHRoZSBsYW5ndWFnZSBpcyBzcGVjaWZpZWQgd2l0aCBhIHJlZ2lvbgorICAgICAgaWYgKG9wdGlvbnMubGFuZ3VhZ2UuaW5kZXhPZignLScpID4gMCkgeworICAgICAgICAvLyBFeHRyYWN0IHRoZSByZWdpb24gaW5mb3JtYXRpb24gaWYgaXQgaXMgaW5jbHVkZWQKKyAgICAgICAgdmFyIGxhbmd1YWdlUGFydHMgPSBvcHRpb25zLmxhbmd1YWdlLnNwbGl0KCctJyk7CisgICAgICAgIHZhciBiYXNlTGFuZ3VhZ2UgPSBsYW5ndWFnZVBhcnRzWzBdOworCisgICAgICAgIG9wdGlvbnMubGFuZ3VhZ2UgPSBbb3B0aW9ucy5sYW5ndWFnZSwgYmFzZUxhbmd1YWdlXTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG9wdGlvbnMubGFuZ3VhZ2UgPSBbb3B0aW9ucy5sYW5ndWFnZV07CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCQuaXNBcnJheShvcHRpb25zLmxhbmd1YWdlKSkgeworICAgICAgdmFyIGxhbmd1YWdlcyA9IG5ldyBUcmFuc2xhdGlvbigpOworICAgICAgb3B0aW9ucy5sYW5ndWFnZS5wdXNoKCdlbicpOworCisgICAgICB2YXIgbGFuZ3VhZ2VOYW1lcyA9IG9wdGlvbnMubGFuZ3VhZ2U7CisKKyAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgbGFuZ3VhZ2VOYW1lcy5sZW5ndGg7IGwrKykgeworICAgICAgICB2YXIgbmFtZSA9IGxhbmd1YWdlTmFtZXNbbF07CisgICAgICAgIHZhciBsYW5ndWFnZSA9IHt9OworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgLy8gVHJ5IHRvIGxvYWQgaXQgd2l0aCB0aGUgb3JpZ2luYWwgbmFtZQorICAgICAgICAgIGxhbmd1YWdlID0gVHJhbnNsYXRpb24ubG9hZFBhdGgobmFtZSk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gSWYgd2UgY291bGRuJ3QgbG9hZCBpdCwgY2hlY2sgaWYgaXQgd2Fzbid0IHRoZSBmdWxsIHBhdGgKKyAgICAgICAgICAgIG5hbWUgPSB0aGlzLmRlZmF1bHRzLmFtZExhbmd1YWdlQmFzZSArIG5hbWU7CisgICAgICAgICAgICBsYW5ndWFnZSA9IFRyYW5zbGF0aW9uLmxvYWRQYXRoKG5hbWUpOworICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgICAgICAvLyBUaGUgdHJhbnNsYXRpb24gY291bGQgbm90IGJlIGxvYWRlZCBhdCBhbGwuIFNvbWV0aW1lcyB0aGlzIGlzCisgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIGEgY29uZmlndXJhdGlvbiBwcm9ibGVtLCBvdGhlciB0aW1lcyB0aGlzIGNhbiBiZQorICAgICAgICAgICAgLy8gYmVjYXVzZSBvZiBob3cgU2VsZWN0MiBoZWxwcyBsb2FkIGFsbCBwb3NzaWJsZSB0cmFuc2xhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgIGlmIChvcHRpb25zLmRlYnVnICYmIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUud2FybikgeworICAgICAgICAgICAgICBjb25zb2xlLndhcm4oCisgICAgICAgICAgICAgICAgJ1NlbGVjdDI6IFRoZSBsYW5ndWFnZSBmaWxlIGZvciAiJyArIG5hbWUgKyAnIiBjb3VsZCBub3QgYmUgJyArCisgICAgICAgICAgICAgICAgJ2F1dG9tYXRpY2FsbHkgbG9hZGVkLiBBIGZhbGxiYWNrIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLicKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbGFuZ3VhZ2VzLmV4dGVuZChsYW5ndWFnZSk7CisgICAgICB9CisKKyAgICAgIG9wdGlvbnMudHJhbnNsYXRpb25zID0gbGFuZ3VhZ2VzOworICAgIH0gZWxzZSB7CisgICAgICB2YXIgYmFzZVRyYW5zbGF0aW9uID0gVHJhbnNsYXRpb24ubG9hZFBhdGgoCisgICAgICAgIHRoaXMuZGVmYXVsdHMuYW1kTGFuZ3VhZ2VCYXNlICsgJ2VuJworICAgICAgKTsKKyAgICAgIHZhciBjdXN0b21UcmFuc2xhdGlvbiA9IG5ldyBUcmFuc2xhdGlvbihvcHRpb25zLmxhbmd1YWdlKTsKKworICAgICAgY3VzdG9tVHJhbnNsYXRpb24uZXh0ZW5kKGJhc2VUcmFuc2xhdGlvbik7CisKKyAgICAgIG9wdGlvbnMudHJhbnNsYXRpb25zID0gY3VzdG9tVHJhbnNsYXRpb247CisgICAgfQorCisgICAgcmV0dXJuIG9wdGlvbnM7CisgIH07CisKKyAgRGVmYXVsdHMucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHN0cmlwRGlhY3JpdGljcyAodGV4dCkgeworICAgICAgLy8gVXNlZCAndW5pIHJhbmdlICsgbmFtZWQgZnVuY3Rpb24nIGZyb20gaHR0cDovL2pzcGVyZi5jb20vZGlhY3JpdGljcy8xOAorICAgICAgZnVuY3Rpb24gbWF0Y2goYSkgeworICAgICAgICByZXR1cm4gRElBQ1JJVElDU1thXSB8fCBhOworICAgICAgfQorCisgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9bXlx1MDAwMC1cdTAwN0VdL2csIG1hdGNoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBtYXRjaGVyIChwYXJhbXMsIGRhdGEpIHsKKyAgICAgIC8vIEFsd2F5cyByZXR1cm4gdGhlIG9iamVjdCBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbXBhcmUKKyAgICAgIGlmICgkLnRyaW0ocGFyYW1zLnRlcm0pID09PSAnJykgeworICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgIH0KKworICAgICAgLy8gRG8gYSByZWN1cnNpdmUgY2hlY2sgZm9yIG9wdGlvbnMgd2l0aCBjaGlsZHJlbgorICAgICAgaWYgKGRhdGEuY2hpbGRyZW4gJiYgZGF0YS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7CisgICAgICAgIC8vIENsb25lIHRoZSBkYXRhIG9iamVjdCBpZiB0aGVyZSBhcmUgY2hpbGRyZW4KKyAgICAgICAgLy8gVGhpcyBpcyByZXF1aXJlZCBhcyB3ZSBtb2RpZnkgdGhlIG9iamVjdCB0byByZW1vdmUgYW55IG5vbi1tYXRjaGVzCisgICAgICAgIHZhciBtYXRjaCA9ICQuZXh0ZW5kKHRydWUsIHt9LCBkYXRhKTsKKworICAgICAgICAvLyBDaGVjayBlYWNoIGNoaWxkIG9mIHRoZSBvcHRpb24KKyAgICAgICAgZm9yICh2YXIgYyA9IGRhdGEuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgYyA+PSAwOyBjLS0pIHsKKyAgICAgICAgICB2YXIgY2hpbGQgPSBkYXRhLmNoaWxkcmVuW2NdOworCisgICAgICAgICAgdmFyIG1hdGNoZXMgPSBtYXRjaGVyKHBhcmFtcywgY2hpbGQpOworCisgICAgICAgICAgLy8gSWYgdGhlcmUgd2Fzbid0IGEgbWF0Y2gsIHJlbW92ZSB0aGUgb2JqZWN0IGluIHRoZSBhcnJheQorICAgICAgICAgIGlmIChtYXRjaGVzID09IG51bGwpIHsKKyAgICAgICAgICAgIG1hdGNoLmNoaWxkcmVuLnNwbGljZShjLCAxKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiBhbnkgY2hpbGRyZW4gbWF0Y2hlZCwgcmV0dXJuIHRoZSBuZXcgb2JqZWN0CisgICAgICAgIGlmIChtYXRjaC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7CisgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBubyBtYXRjaGluZyBjaGlsZHJlbiwgY2hlY2sganVzdCB0aGUgcGxhaW4gb2JqZWN0CisgICAgICAgIHJldHVybiBtYXRjaGVyKHBhcmFtcywgbWF0Y2gpOworICAgICAgfQorCisgICAgICB2YXIgb3JpZ2luYWwgPSBzdHJpcERpYWNyaXRpY3MoZGF0YS50ZXh0KS50b1VwcGVyQ2FzZSgpOworICAgICAgdmFyIHRlcm0gPSBzdHJpcERpYWNyaXRpY3MocGFyYW1zLnRlcm0pLnRvVXBwZXJDYXNlKCk7CisKKyAgICAgIC8vIENoZWNrIGlmIHRoZSB0ZXh0IGNvbnRhaW5zIHRoZSB0ZXJtCisgICAgICBpZiAob3JpZ2luYWwuaW5kZXhPZih0ZXJtKSA+IC0xKSB7CisgICAgICAgIHJldHVybiBkYXRhOworICAgICAgfQorCisgICAgICAvLyBJZiBpdCBkb2Vzbid0IGNvbnRhaW4gdGhlIHRlcm0sIGRvbid0IHJldHVybiBhbnl0aGluZworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgdGhpcy5kZWZhdWx0cyA9IHsKKyAgICAgIGFtZEJhc2U6ICcuLycsCisgICAgICBhbWRMYW5ndWFnZUJhc2U6ICcuL2kxOG4vJywKKyAgICAgIGNsb3NlT25TZWxlY3Q6IHRydWUsCisgICAgICBkZWJ1ZzogZmFsc2UsCisgICAgICBkcm9wZG93bkF1dG9XaWR0aDogZmFsc2UsCisgICAgICBlc2NhcGVNYXJrdXA6IFV0aWxzLmVzY2FwZU1hcmt1cCwKKyAgICAgIGxhbmd1YWdlOiBFbmdsaXNoVHJhbnNsYXRpb24sCisgICAgICBtYXRjaGVyOiBtYXRjaGVyLAorICAgICAgbWluaW11bUlucHV0TGVuZ3RoOiAwLAorICAgICAgbWF4aW11bUlucHV0TGVuZ3RoOiAwLAorICAgICAgbWF4aW11bVNlbGVjdGlvbkxlbmd0aDogMCwKKyAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiAwLAorICAgICAgc2VsZWN0T25DbG9zZTogZmFsc2UsCisgICAgICBzb3J0ZXI6IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgIHJldHVybiBkYXRhOworICAgICAgfSwKKyAgICAgIHRlbXBsYXRlUmVzdWx0OiBmdW5jdGlvbiAocmVzdWx0KSB7CisgICAgICAgIHJldHVybiByZXN1bHQudGV4dDsKKyAgICAgIH0sCisgICAgICB0ZW1wbGF0ZVNlbGVjdGlvbjogZnVuY3Rpb24gKHNlbGVjdGlvbikgeworICAgICAgICByZXR1cm4gc2VsZWN0aW9uLnRleHQ7CisgICAgICB9LAorICAgICAgdGhlbWU6ICdkZWZhdWx0JywKKyAgICAgIHdpZHRoOiAncmVzb2x2ZScKKyAgICB9OworICB9OworCisgIERlZmF1bHRzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgeworICAgIHZhciBjYW1lbEtleSA9ICQuY2FtZWxDYXNlKGtleSk7CisKKyAgICB2YXIgZGF0YSA9IHt9OworICAgIGRhdGFbY2FtZWxLZXldID0gdmFsdWU7CisKKyAgICB2YXIgY29udmVydGVkRGF0YSA9IFV0aWxzLl9jb252ZXJ0RGF0YShkYXRhKTsKKworICAgICQuZXh0ZW5kKHRydWUsIHRoaXMuZGVmYXVsdHMsIGNvbnZlcnRlZERhdGEpOworICB9OworCisgIHZhciBkZWZhdWx0cyA9IG5ldyBEZWZhdWx0cygpOworCisgIHJldHVybiBkZWZhdWx0czsKK30pOworCitTMi5kZWZpbmUoJ3NlbGVjdDIvb3B0aW9ucycsWworICAncmVxdWlyZScsCisgICdqcXVlcnknLAorICAnLi9kZWZhdWx0cycsCisgICcuL3V0aWxzJworXSwgZnVuY3Rpb24gKHJlcXVpcmUsICQsIERlZmF1bHRzLCBVdGlscykgeworICBmdW5jdGlvbiBPcHRpb25zIChvcHRpb25zLCAkZWxlbWVudCkgeworICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CisKKyAgICBpZiAoJGVsZW1lbnQgIT0gbnVsbCkgeworICAgICAgdGhpcy5mcm9tRWxlbWVudCgkZWxlbWVudCk7CisgICAgfQorCisgICAgdGhpcy5vcHRpb25zID0gRGVmYXVsdHMuYXBwbHkodGhpcy5vcHRpb25zKTsKKworICAgIGlmICgkZWxlbWVudCAmJiAkZWxlbWVudC5pcygnaW5wdXQnKSkgeworICAgICAgdmFyIElucHV0Q29tcGF0ID0gcmVxdWlyZSh0aGlzLmdldCgnYW1kQmFzZScpICsgJ2NvbXBhdC9pbnB1dERhdGEnKTsKKworICAgICAgdGhpcy5vcHRpb25zLmRhdGFBZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoCisgICAgICAgIHRoaXMub3B0aW9ucy5kYXRhQWRhcHRlciwKKyAgICAgICAgSW5wdXRDb21wYXQKKyAgICAgICk7CisgICAgfQorICB9CisKKyAgT3B0aW9ucy5wcm90b3R5cGUuZnJvbUVsZW1lbnQgPSBmdW5jdGlvbiAoJGUpIHsKKyAgICB2YXIgZXhjbHVkZWREYXRhID0gWydzZWxlY3QyJ107CisKKyAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpcGxlID09IG51bGwpIHsKKyAgICAgIHRoaXMub3B0aW9ucy5tdWx0aXBsZSA9ICRlLnByb3AoJ211bHRpcGxlJyk7CisgICAgfQorCisgICAgaWYgKHRoaXMub3B0aW9ucy5kaXNhYmxlZCA9PSBudWxsKSB7CisgICAgICB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgPSAkZS5wcm9wKCdkaXNhYmxlZCcpOworICAgIH0KKworICAgIGlmICh0aGlzLm9wdGlvbnMubGFuZ3VhZ2UgPT0gbnVsbCkgeworICAgICAgaWYgKCRlLnByb3AoJ2xhbmcnKSkgeworICAgICAgICB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UgPSAkZS5wcm9wKCdsYW5nJykudG9Mb3dlckNhc2UoKTsKKyAgICAgIH0gZWxzZSBpZiAoJGUuY2xvc2VzdCgnW2xhbmddJykucHJvcCgnbGFuZycpKSB7CisgICAgICAgIHRoaXMub3B0aW9ucy5sYW5ndWFnZSA9ICRlLmNsb3Nlc3QoJ1tsYW5nXScpLnByb3AoJ2xhbmcnKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodGhpcy5vcHRpb25zLmRpciA9PSBudWxsKSB7CisgICAgICBpZiAoJGUucHJvcCgnZGlyJykpIHsKKyAgICAgICAgdGhpcy5vcHRpb25zLmRpciA9ICRlLnByb3AoJ2RpcicpOworICAgICAgfSBlbHNlIGlmICgkZS5jbG9zZXN0KCdbZGlyXScpLnByb3AoJ2RpcicpKSB7CisgICAgICAgIHRoaXMub3B0aW9ucy5kaXIgPSAkZS5jbG9zZXN0KCdbZGlyXScpLnByb3AoJ2RpcicpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy5vcHRpb25zLmRpciA9ICdsdHInOworICAgICAgfQorICAgIH0KKworICAgICRlLnByb3AoJ2Rpc2FibGVkJywgdGhpcy5vcHRpb25zLmRpc2FibGVkKTsKKyAgICAkZS5wcm9wKCdtdWx0aXBsZScsIHRoaXMub3B0aW9ucy5tdWx0aXBsZSk7CisKKyAgICBpZiAoVXRpbHMuR2V0RGF0YSgkZVswXSwgJ3NlbGVjdDJUYWdzJykpIHsKKyAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVidWcgJiYgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS53YXJuKSB7CisgICAgICAgIGNvbnNvbGUud2FybigKKyAgICAgICAgICAnU2VsZWN0MjogVGhlIGBkYXRhLXNlbGVjdDItdGFnc2AgYXR0cmlidXRlIGhhcyBiZWVuIGNoYW5nZWQgdG8gJyArCisgICAgICAgICAgJ3VzZSB0aGUgYGRhdGEtZGF0YWAgYW5kIGBkYXRhLXRhZ3M9InRydWUiYCBhdHRyaWJ1dGVzIGFuZCB3aWxsIGJlICcgKworICAgICAgICAgICdyZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBTZWxlY3QyLicKKyAgICAgICAgKTsKKyAgICAgIH0KKworICAgICAgVXRpbHMuU3RvcmVEYXRhKCRlWzBdLCAnZGF0YScsIFV0aWxzLkdldERhdGEoJGVbMF0sICdzZWxlY3QyVGFncycpKTsKKyAgICAgIFV0aWxzLlN0b3JlRGF0YSgkZVswXSwgJ3RhZ3MnLCB0cnVlKTsKKyAgICB9CisKKyAgICBpZiAoVXRpbHMuR2V0RGF0YSgkZVswXSwgJ2FqYXhVcmwnKSkgeworICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1ZyAmJiB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLndhcm4pIHsKKyAgICAgICAgY29uc29sZS53YXJuKAorICAgICAgICAgICdTZWxlY3QyOiBUaGUgYGRhdGEtYWpheC11cmxgIGF0dHJpYnV0ZSBoYXMgYmVlbiBjaGFuZ2VkIHRvICcgKworICAgICAgICAgICdgZGF0YS1hamF4LS11cmxgIGFuZCBzdXBwb3J0IGZvciB0aGUgb2xkIGF0dHJpYnV0ZSB3aWxsIGJlIHJlbW92ZWQnICsKKyAgICAgICAgICAnIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBTZWxlY3QyLicKKyAgICAgICAgKTsKKyAgICAgIH0KKworICAgICAgJGUuYXR0cignYWpheC0tdXJsJywgVXRpbHMuR2V0RGF0YSgkZVswXSwgJ2FqYXhVcmwnKSk7CisgICAgICBVdGlscy5TdG9yZURhdGEoJGVbMF0sICdhamF4LVVybCcsIFV0aWxzLkdldERhdGEoJGVbMF0sICdhamF4VXJsJykpOworCSAgCisgICAgfQorCisgICAgdmFyIGRhdGFzZXQgPSB7fTsKKworICAgIC8vIFByZWZlciB0aGUgZWxlbWVudCdzIGBkYXRhc2V0YCBhdHRyaWJ1dGUgaWYgaXQgZXhpc3RzCisgICAgLy8galF1ZXJ5IDEueCBkb2VzIG5vdCBjb3JyZWN0bHkgaGFuZGxlIGRhdGEgYXR0cmlidXRlcyB3aXRoIG11bHRpcGxlIGRhc2hlcworICAgIGlmICgkLmZuLmpxdWVyeSAmJiAkLmZuLmpxdWVyeS5zdWJzdHIoMCwgMikgPT0gJzEuJyAmJiAkZVswXS5kYXRhc2V0KSB7CisgICAgICBkYXRhc2V0ID0gJC5leHRlbmQodHJ1ZSwge30sICRlWzBdLmRhdGFzZXQsIFV0aWxzLkdldERhdGEoJGVbMF0pKTsKKyAgICB9IGVsc2UgeworICAgICAgZGF0YXNldCA9IFV0aWxzLkdldERhdGEoJGVbMF0pOworICAgIH0KKworICAgIHZhciBkYXRhID0gJC5leHRlbmQodHJ1ZSwge30sIGRhdGFzZXQpOworCisgICAgZGF0YSA9IFV0aWxzLl9jb252ZXJ0RGF0YShkYXRhKTsKKworICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7CisgICAgICBpZiAoJC5pbkFycmF5KGtleSwgZXhjbHVkZWREYXRhKSA+IC0xKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBpZiAoJC5pc1BsYWluT2JqZWN0KHRoaXMub3B0aW9uc1trZXldKSkgeworICAgICAgICAkLmV4dGVuZCh0aGlzLm9wdGlvbnNba2V5XSwgZGF0YVtrZXldKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMub3B0aW9uc1trZXldID0gZGF0YVtrZXldOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0aGlzOworICB9OworCisgIE9wdGlvbnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHsKKyAgICByZXR1cm4gdGhpcy5vcHRpb25zW2tleV07CisgIH07CisKKyAgT3B0aW9ucy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFsKSB7CisgICAgdGhpcy5vcHRpb25zW2tleV0gPSB2YWw7CisgIH07CisKKyAgcmV0dXJuIE9wdGlvbnM7Cit9KTsKKworUzIuZGVmaW5lKCdzZWxlY3QyL2NvcmUnLFsKKyAgJ2pxdWVyeScsCisgICcuL29wdGlvbnMnLAorICAnLi91dGlscycsCisgICcuL2tleXMnCitdLCBmdW5jdGlvbiAoJCwgT3B0aW9ucywgVXRpbHMsIEtFWVMpIHsKKyAgdmFyIFNlbGVjdDIgPSBmdW5jdGlvbiAoJGVsZW1lbnQsIG9wdGlvbnMpIHsKKyAgICBpZiAoVXRpbHMuR2V0RGF0YSgkZWxlbWVudFswXSwgJ3NlbGVjdDInKSAhPSBudWxsKSB7CisgICAgICBVdGlscy5HZXREYXRhKCRlbGVtZW50WzBdLCAnc2VsZWN0MicpLmRlc3Ryb3koKTsKKyAgICB9CisKKyAgICB0aGlzLiRlbGVtZW50ID0gJGVsZW1lbnQ7CisKKyAgICB0aGlzLmlkID0gdGhpcy5fZ2VuZXJhdGVJZCgkZWxlbWVudCk7CisKKyAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKworICAgIHRoaXMub3B0aW9ucyA9IG5ldyBPcHRpb25zKG9wdGlvbnMsICRlbGVtZW50KTsKKworICAgIFNlbGVjdDIuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7CisKKyAgICAvLyBTZXQgdXAgdGhlIHRhYmluZGV4CisKKyAgICB2YXIgdGFiaW5kZXggPSAkZWxlbWVudC5hdHRyKCd0YWJpbmRleCcpIHx8IDA7CisgICAgVXRpbHMuU3RvcmVEYXRhKCRlbGVtZW50WzBdLCAnb2xkLXRhYmluZGV4JywgdGFiaW5kZXgpOworICAgICRlbGVtZW50LmF0dHIoJ3RhYmluZGV4JywgJy0xJyk7CisKKyAgICAvLyBTZXQgdXAgY29udGFpbmVycyBhbmQgYWRhcHRlcnMKKworICAgIHZhciBEYXRhQWRhcHRlciA9IHRoaXMub3B0aW9ucy5nZXQoJ2RhdGFBZGFwdGVyJyk7CisgICAgdGhpcy5kYXRhQWRhcHRlciA9IG5ldyBEYXRhQWRhcHRlcigkZWxlbWVudCwgdGhpcy5vcHRpb25zKTsKKworICAgIHZhciAkY29udGFpbmVyID0gdGhpcy5yZW5kZXIoKTsKKworICAgIHRoaXMuX3BsYWNlQ29udGFpbmVyKCRjb250YWluZXIpOworCisgICAgdmFyIFNlbGVjdGlvbkFkYXB0ZXIgPSB0aGlzLm9wdGlvbnMuZ2V0KCdzZWxlY3Rpb25BZGFwdGVyJyk7CisgICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uQWRhcHRlcigkZWxlbWVudCwgdGhpcy5vcHRpb25zKTsKKyAgICB0aGlzLiRzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbi5yZW5kZXIoKTsKKworICAgIHRoaXMuc2VsZWN0aW9uLnBvc2l0aW9uKHRoaXMuJHNlbGVjdGlvbiwgJGNvbnRhaW5lcik7CisKKyAgICB2YXIgRHJvcGRvd25BZGFwdGVyID0gdGhpcy5vcHRpb25zLmdldCgnZHJvcGRvd25BZGFwdGVyJyk7CisgICAgdGhpcy5kcm9wZG93biA9IG5ldyBEcm9wZG93bkFkYXB0ZXIoJGVsZW1lbnQsIHRoaXMub3B0aW9ucyk7CisgICAgdGhpcy4kZHJvcGRvd24gPSB0aGlzLmRyb3Bkb3duLnJlbmRlcigpOworCisgICAgdGhpcy5kcm9wZG93bi5wb3NpdGlvbih0aGlzLiRkcm9wZG93biwgJGNvbnRhaW5lcik7CisKKyAgICB2YXIgUmVzdWx0c0FkYXB0ZXIgPSB0aGlzLm9wdGlvbnMuZ2V0KCdyZXN1bHRzQWRhcHRlcicpOworICAgIHRoaXMucmVzdWx0cyA9IG5ldyBSZXN1bHRzQWRhcHRlcigkZWxlbWVudCwgdGhpcy5vcHRpb25zLCB0aGlzLmRhdGFBZGFwdGVyKTsKKyAgICB0aGlzLiRyZXN1bHRzID0gdGhpcy5yZXN1bHRzLnJlbmRlcigpOworCisgICAgdGhpcy5yZXN1bHRzLnBvc2l0aW9uKHRoaXMuJHJlc3VsdHMsIHRoaXMuJGRyb3Bkb3duKTsKKworICAgIC8vIEJpbmQgZXZlbnRzCisKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAvLyBCaW5kIHRoZSBjb250YWluZXIgdG8gYWxsIG9mIHRoZSBhZGFwdGVycworICAgIHRoaXMuX2JpbmRBZGFwdGVycygpOworCisgICAgLy8gUmVnaXN0ZXIgYW55IERPTSBldmVudCBoYW5kbGVycworICAgIHRoaXMuX3JlZ2lzdGVyRG9tRXZlbnRzKCk7CisKKyAgICAvLyBSZWdpc3RlciBhbnkgaW50ZXJuYWwgZXZlbnQgaGFuZGxlcnMKKyAgICB0aGlzLl9yZWdpc3RlckRhdGFFdmVudHMoKTsKKyAgICB0aGlzLl9yZWdpc3RlclNlbGVjdGlvbkV2ZW50cygpOworICAgIHRoaXMuX3JlZ2lzdGVyRHJvcGRvd25FdmVudHMoKTsKKyAgICB0aGlzLl9yZWdpc3RlclJlc3VsdHNFdmVudHMoKTsKKyAgICB0aGlzLl9yZWdpc3RlckV2ZW50cygpOworCisgICAgLy8gU2V0IHRoZSBpbml0aWFsIHN0YXRlCisgICAgdGhpcy5kYXRhQWRhcHRlci5jdXJyZW50KGZ1bmN0aW9uIChpbml0aWFsRGF0YSkgeworICAgICAgc2VsZi50cmlnZ2VyKCdzZWxlY3Rpb246dXBkYXRlJywgeworICAgICAgICBkYXRhOiBpbml0aWFsRGF0YQorICAgICAgfSk7CisgICAgfSk7CisKKyAgICAvLyBIaWRlIHRoZSBvcmlnaW5hbCBzZWxlY3QKKyAgICAkZWxlbWVudC5hZGRDbGFzcygnc2VsZWN0Mi1oaWRkZW4tYWNjZXNzaWJsZScpOworICAgICRlbGVtZW50LmF0dHIoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTsKKworICAgIC8vIFN5bmNocm9uaXplIGFueSBtb25pdG9yZWQgYXR0cmlidXRlcworICAgIHRoaXMuX3N5bmNBdHRyaWJ1dGVzKCk7CisKKyAgICBVdGlscy5TdG9yZURhdGEoJGVsZW1lbnRbMF0sICdzZWxlY3QyJywgdGhpcyk7CisKKyAgICAvLyBFbnN1cmUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCAkZWxlbWVudC5kYXRhKCdzZWxlY3QyJykuCisgICAgJGVsZW1lbnQuZGF0YSgnc2VsZWN0MicsIHRoaXMpOworICB9OworCisgIFV0aWxzLkV4dGVuZChTZWxlY3QyLCBVdGlscy5PYnNlcnZhYmxlKTsKKworICBTZWxlY3QyLnByb3RvdHlwZS5fZ2VuZXJhdGVJZCA9IGZ1bmN0aW9uICgkZWxlbWVudCkgeworICAgIHZhciBpZCA9ICcnOworCisgICAgaWYgKCRlbGVtZW50LmF0dHIoJ2lkJykgIT0gbnVsbCkgeworICAgICAgaWQgPSAkZWxlbWVudC5hdHRyKCdpZCcpOworICAgIH0gZWxzZSBpZiAoJGVsZW1lbnQuYXR0cignbmFtZScpICE9IG51bGwpIHsKKyAgICAgIGlkID0gJGVsZW1lbnQuYXR0cignbmFtZScpICsgJy0nICsgVXRpbHMuZ2VuZXJhdGVDaGFycygyKTsKKyAgICB9IGVsc2UgeworICAgICAgaWQgPSBVdGlscy5nZW5lcmF0ZUNoYXJzKDQpOworICAgIH0KKworICAgIGlkID0gaWQucmVwbGFjZSgvKDp8XC58XFt8XF18LCkvZywgJycpOworICAgIGlkID0gJ3NlbGVjdDItJyArIGlkOworCisgICAgcmV0dXJuIGlkOworICB9OworCisgIFNlbGVjdDIucHJvdG90eXBlLl9wbGFjZUNvbnRhaW5lciA9IGZ1bmN0aW9uICgkY29udGFpbmVyKSB7CisgICAgJGNvbnRhaW5lci5pbnNlcnRBZnRlcih0aGlzLiRlbGVtZW50KTsKKworICAgIHZhciB3aWR0aCA9IHRoaXMuX3Jlc29sdmVXaWR0aCh0aGlzLiRlbGVtZW50LCB0aGlzLm9wdGlvbnMuZ2V0KCd3aWR0aCcpKTsKKworICAgIGlmICh3aWR0aCAhPSBudWxsKSB7CisgICAgICAkY29udGFpbmVyLmNzcygnd2lkdGgnLCB3aWR0aCk7CisgICAgfQorICB9OworCisgIFNlbGVjdDIucHJvdG90eXBlLl9yZXNvbHZlV2lkdGggPSBmdW5jdGlvbiAoJGVsZW1lbnQsIG1ldGhvZCkgeworICAgIHZhciBXSURUSCA9IC9ed2lkdGg6KChbLStdPyhbMC05XSpcLik/WzAtOV0rKShweHxlbXxleHwlfGlufGNtfG1tfHB0fHBjKSkvaTsKKworICAgIGlmIChtZXRob2QgPT0gJ3Jlc29sdmUnKSB7CisgICAgICB2YXIgc3R5bGVXaWR0aCA9IHRoaXMuX3Jlc29sdmVXaWR0aCgkZWxlbWVudCwgJ3N0eWxlJyk7CisKKyAgICAgIGlmIChzdHlsZVdpZHRoICE9IG51bGwpIHsKKyAgICAgICAgcmV0dXJuIHN0eWxlV2lkdGg7CisgICAgICB9CisKKyAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlV2lkdGgoJGVsZW1lbnQsICdlbGVtZW50Jyk7CisgICAgfQorCisgICAgaWYgKG1ldGhvZCA9PSAnZWxlbWVudCcpIHsKKyAgICAgIHZhciBlbGVtZW50V2lkdGggPSAkZWxlbWVudC5vdXRlcldpZHRoKGZhbHNlKTsKKworICAgICAgaWYgKGVsZW1lbnRXaWR0aCA8PSAwKSB7CisgICAgICAgIHJldHVybiAnYXV0byc7CisgICAgICB9CisKKyAgICAgIHJldHVybiBlbGVtZW50V2lkdGggKyAncHgnOworICAgIH0KKworICAgIGlmIChtZXRob2QgPT0gJ3N0eWxlJykgeworICAgICAgdmFyIHN0eWxlID0gJGVsZW1lbnQuYXR0cignc3R5bGUnKTsKKworICAgICAgaWYgKHR5cGVvZihzdHlsZSkgIT09ICdzdHJpbmcnKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorCisgICAgICB2YXIgYXR0cnMgPSBzdHlsZS5zcGxpdCgnOycpOworCisgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF0dHJzLmxlbmd0aDsgaSA8IGw7IGkgPSBpICsgMSkgeworICAgICAgICB2YXIgYXR0ciA9IGF0dHJzW2ldLnJlcGxhY2UoL1xzL2csICcnKTsKKyAgICAgICAgdmFyIG1hdGNoZXMgPSBhdHRyLm1hdGNoKFdJRFRIKTsKKworICAgICAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCAmJiBtYXRjaGVzLmxlbmd0aCA+PSAxKSB7CisgICAgICAgICAgcmV0dXJuIG1hdGNoZXNbMV07CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcmV0dXJuIG1ldGhvZDsKKyAgfTsKKworICBTZWxlY3QyLnByb3RvdHlwZS5fYmluZEFkYXB0ZXJzID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMuZGF0YUFkYXB0ZXIuYmluZCh0aGlzLCB0aGlzLiRjb250YWluZXIpOworICAgIHRoaXMuc2VsZWN0aW9uLmJpbmQodGhpcywgdGhpcy4kY29udGFpbmVyKTsKKworICAgIHRoaXMuZHJvcGRvd24uYmluZCh0aGlzLCB0aGlzLiRjb250YWluZXIpOworICAgIHRoaXMucmVzdWx0cy5iaW5kKHRoaXMsIHRoaXMuJGNvbnRhaW5lcik7CisgIH07CisKKyAgU2VsZWN0Mi5wcm90b3R5cGUuX3JlZ2lzdGVyRG9tRXZlbnRzID0gZnVuY3Rpb24gKCkgeworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIHRoaXMuJGVsZW1lbnQub24oJ2NoYW5nZS5zZWxlY3QyJywgZnVuY3Rpb24gKCkgeworICAgICAgc2VsZi5kYXRhQWRhcHRlci5jdXJyZW50KGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgIHNlbGYudHJpZ2dlcignc2VsZWN0aW9uOnVwZGF0ZScsIHsKKyAgICAgICAgICBkYXRhOiBkYXRhCisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICB0aGlzLiRlbGVtZW50Lm9uKCdmb2N1cy5zZWxlY3QyJywgZnVuY3Rpb24gKGV2dCkgeworICAgICAgc2VsZi50cmlnZ2VyKCdmb2N1cycsIGV2dCk7CisgICAgfSk7CisKKyAgICB0aGlzLl9zeW5jQSA9IFV0aWxzLmJpbmQodGhpcy5fc3luY0F0dHJpYnV0ZXMsIHRoaXMpOworICAgIHRoaXMuX3N5bmNTID0gVXRpbHMuYmluZCh0aGlzLl9zeW5jU3VidHJlZSwgdGhpcyk7CisKKyAgICBpZiAodGhpcy4kZWxlbWVudFswXS5hdHRhY2hFdmVudCkgeworICAgICAgdGhpcy4kZWxlbWVudFswXS5hdHRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIHRoaXMuX3N5bmNBKTsKKyAgICB9CisKKyAgICB2YXIgb2JzZXJ2ZXIgPSB3aW5kb3cuTXV0YXRpb25PYnNlcnZlciB8fAorICAgICAgd2luZG93LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIgfHwKKyAgICAgIHdpbmRvdy5Nb3pNdXRhdGlvbk9ic2VydmVyCisgICAgOworCisgICAgaWYgKG9ic2VydmVyICE9IG51bGwpIHsKKyAgICAgIHRoaXMuX29ic2VydmVyID0gbmV3IG9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHsKKyAgICAgICAgJC5lYWNoKG11dGF0aW9ucywgc2VsZi5fc3luY0EpOworICAgICAgICAkLmVhY2gobXV0YXRpb25zLCBzZWxmLl9zeW5jUyk7CisgICAgICB9KTsKKyAgICAgIHRoaXMuX29ic2VydmVyLm9ic2VydmUodGhpcy4kZWxlbWVudFswXSwgeworICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLAorICAgICAgICBjaGlsZExpc3Q6IHRydWUsCisgICAgICAgIHN1YnRyZWU6IGZhbHNlCisgICAgICB9KTsKKyAgICB9IGVsc2UgaWYgKHRoaXMuJGVsZW1lbnRbMF0uYWRkRXZlbnRMaXN0ZW5lcikgeworICAgICAgdGhpcy4kZWxlbWVudFswXS5hZGRFdmVudExpc3RlbmVyKAorICAgICAgICAnRE9NQXR0ck1vZGlmaWVkJywKKyAgICAgICAgc2VsZi5fc3luY0EsCisgICAgICAgIGZhbHNlCisgICAgICApOworICAgICAgdGhpcy4kZWxlbWVudFswXS5hZGRFdmVudExpc3RlbmVyKAorICAgICAgICAnRE9NTm9kZUluc2VydGVkJywKKyAgICAgICAgc2VsZi5fc3luY1MsCisgICAgICAgIGZhbHNlCisgICAgICApOworICAgICAgdGhpcy4kZWxlbWVudFswXS5hZGRFdmVudExpc3RlbmVyKAorICAgICAgICAnRE9NTm9kZVJlbW92ZWQnLAorICAgICAgICBzZWxmLl9zeW5jUywKKyAgICAgICAgZmFsc2UKKyAgICAgICk7CisgICAgfQorICB9OworCisgIFNlbGVjdDIucHJvdG90eXBlLl9yZWdpc3RlckRhdGFFdmVudHMgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgdGhpcy5kYXRhQWRhcHRlci5vbignKicsIGZ1bmN0aW9uIChuYW1lLCBwYXJhbXMpIHsKKyAgICAgIHNlbGYudHJpZ2dlcihuYW1lLCBwYXJhbXMpOworICAgIH0pOworICB9OworCisgIFNlbGVjdDIucHJvdG90eXBlLl9yZWdpc3RlclNlbGVjdGlvbkV2ZW50cyA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgdmFyIG5vblJlbGF5RXZlbnRzID0gWyd0b2dnbGUnLCAnZm9jdXMnXTsKKworICAgIHRoaXMuc2VsZWN0aW9uLm9uKCd0b2dnbGUnLCBmdW5jdGlvbiAoKSB7CisgICAgICBzZWxmLnRvZ2dsZURyb3Bkb3duKCk7CisgICAgfSk7CisKKyAgICB0aGlzLnNlbGVjdGlvbi5vbignZm9jdXMnLCBmdW5jdGlvbiAocGFyYW1zKSB7CisgICAgICBzZWxmLmZvY3VzKHBhcmFtcyk7CisgICAgfSk7CisKKyAgICB0aGlzLnNlbGVjdGlvbi5vbignKicsIGZ1bmN0aW9uIChuYW1lLCBwYXJhbXMpIHsKKyAgICAgIGlmICgkLmluQXJyYXkobmFtZSwgbm9uUmVsYXlFdmVudHMpICE9PSAtMSkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHNlbGYudHJpZ2dlcihuYW1lLCBwYXJhbXMpOworICAgIH0pOworICB9OworCisgIFNlbGVjdDIucHJvdG90eXBlLl9yZWdpc3RlckRyb3Bkb3duRXZlbnRzID0gZnVuY3Rpb24gKCkgeworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIHRoaXMuZHJvcGRvd24ub24oJyonLCBmdW5jdGlvbiAobmFtZSwgcGFyYW1zKSB7CisgICAgICBzZWxmLnRyaWdnZXIobmFtZSwgcGFyYW1zKTsKKyAgICB9KTsKKyAgfTsKKworICBTZWxlY3QyLnByb3RvdHlwZS5fcmVnaXN0ZXJSZXN1bHRzRXZlbnRzID0gZnVuY3Rpb24gKCkgeworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIHRoaXMucmVzdWx0cy5vbignKicsIGZ1bmN0aW9uIChuYW1lLCBwYXJhbXMpIHsKKyAgICAgIHNlbGYudHJpZ2dlcihuYW1lLCBwYXJhbXMpOworICAgIH0pOworICB9OworCisgIFNlbGVjdDIucHJvdG90eXBlLl9yZWdpc3RlckV2ZW50cyA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICB0aGlzLm9uKCdvcGVuJywgZnVuY3Rpb24gKCkgeworICAgICAgc2VsZi4kY29udGFpbmVyLmFkZENsYXNzKCdzZWxlY3QyLWNvbnRhaW5lci0tb3BlbicpOworICAgIH0pOworCisgICAgdGhpcy5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7CisgICAgICBzZWxmLiRjb250YWluZXIucmVtb3ZlQ2xhc3MoJ3NlbGVjdDItY29udGFpbmVyLS1vcGVuJyk7CisgICAgfSk7CisKKyAgICB0aGlzLm9uKCdlbmFibGUnLCBmdW5jdGlvbiAoKSB7CisgICAgICBzZWxmLiRjb250YWluZXIucmVtb3ZlQ2xhc3MoJ3NlbGVjdDItY29udGFpbmVyLS1kaXNhYmxlZCcpOworICAgIH0pOworCisgICAgdGhpcy5vbignZGlzYWJsZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHNlbGYuJGNvbnRhaW5lci5hZGRDbGFzcygnc2VsZWN0Mi1jb250YWluZXItLWRpc2FibGVkJyk7CisgICAgfSk7CisKKyAgICB0aGlzLm9uKCdibHVyJywgZnVuY3Rpb24gKCkgeworICAgICAgc2VsZi4kY29udGFpbmVyLnJlbW92ZUNsYXNzKCdzZWxlY3QyLWNvbnRhaW5lci0tZm9jdXMnKTsKKyAgICB9KTsKKworICAgIHRoaXMub24oJ3F1ZXJ5JywgZnVuY3Rpb24gKHBhcmFtcykgeworICAgICAgaWYgKCFzZWxmLmlzT3BlbigpKSB7CisgICAgICAgIHNlbGYudHJpZ2dlcignb3BlbicsIHt9KTsKKyAgICAgIH0KKworICAgICAgdGhpcy5kYXRhQWRhcHRlci5xdWVyeShwYXJhbXMsIGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgIHNlbGYudHJpZ2dlcigncmVzdWx0czphbGwnLCB7CisgICAgICAgICAgZGF0YTogZGF0YSwKKyAgICAgICAgICBxdWVyeTogcGFyYW1zCisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICB0aGlzLm9uKCdxdWVyeTphcHBlbmQnLCBmdW5jdGlvbiAocGFyYW1zKSB7CisgICAgICB0aGlzLmRhdGFBZGFwdGVyLnF1ZXJ5KHBhcmFtcywgZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgc2VsZi50cmlnZ2VyKCdyZXN1bHRzOmFwcGVuZCcsIHsKKyAgICAgICAgICBkYXRhOiBkYXRhLAorICAgICAgICAgIHF1ZXJ5OiBwYXJhbXMKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIHRoaXMub24oJ2tleXByZXNzJywgZnVuY3Rpb24gKGV2dCkgeworICAgICAgdmFyIGtleSA9IGV2dC53aGljaDsKKworICAgICAgaWYgKHNlbGYuaXNPcGVuKCkpIHsKKyAgICAgICAgaWYgKGtleSA9PT0gS0VZUy5FU0MgfHwga2V5ID09PSBLRVlTLlRBQiB8fAorICAgICAgICAgICAgKGtleSA9PT0gS0VZUy5VUCAmJiBldnQuYWx0S2V5KSkgeworICAgICAgICAgIHNlbGYuY2xvc2UoKTsKKworICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gS0VZUy5FTlRFUikgeworICAgICAgICAgIHNlbGYudHJpZ2dlcigncmVzdWx0czpzZWxlY3QnLCB7fSk7CisKKyAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgfSBlbHNlIGlmICgoa2V5ID09PSBLRVlTLlNQQUNFICYmIGV2dC5jdHJsS2V5KSkgeworICAgICAgICAgIHNlbGYudHJpZ2dlcigncmVzdWx0czp0b2dnbGUnLCB7fSk7CisKKyAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IEtFWVMuVVApIHsKKyAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3Jlc3VsdHM6cHJldmlvdXMnLCB7fSk7CisKKyAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IEtFWVMuRE9XTikgeworICAgICAgICAgIHNlbGYudHJpZ2dlcigncmVzdWx0czpuZXh0Jywge30pOworCisgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChrZXkgPT09IEtFWVMuRU5URVIgfHwga2V5ID09PSBLRVlTLlNQQUNFIHx8CisgICAgICAgICAgICAoa2V5ID09PSBLRVlTLkRPV04gJiYgZXZ0LmFsdEtleSkpIHsKKyAgICAgICAgICBzZWxmLm9wZW4oKTsKKworICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB9CisgICAgICB9CisgICAgfSk7CisgIH07CisKKyAgU2VsZWN0Mi5wcm90b3R5cGUuX3N5bmNBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMub3B0aW9ucy5zZXQoJ2Rpc2FibGVkJywgdGhpcy4kZWxlbWVudC5wcm9wKCdkaXNhYmxlZCcpKTsKKworICAgIGlmICh0aGlzLm9wdGlvbnMuZ2V0KCdkaXNhYmxlZCcpKSB7CisgICAgICBpZiAodGhpcy5pc09wZW4oKSkgeworICAgICAgICB0aGlzLmNsb3NlKCk7CisgICAgICB9CisKKyAgICAgIHRoaXMudHJpZ2dlcignZGlzYWJsZScsIHt9KTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy50cmlnZ2VyKCdlbmFibGUnLCB7fSk7CisgICAgfQorICB9OworCisgIFNlbGVjdDIucHJvdG90eXBlLl9zeW5jU3VidHJlZSA9IGZ1bmN0aW9uIChldnQsIG11dGF0aW9ucykgeworICAgIHZhciBjaGFuZ2VkID0gZmFsc2U7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgLy8gSWdub3JlIGFueSBtdXRhdGlvbiBldmVudHMgcmFpc2VkIGZvciBlbGVtZW50cyB0aGF0IGFyZW4ndCBvcHRpb25zIG9yCisgICAgLy8gb3B0Z3JvdXBzLiBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugd2hlbiB0aGUgc2VsZWN0IGVsZW1lbnQgaXMgZGVzdHJveWVkCisgICAgaWYgKAorICAgICAgZXZ0ICYmIGV2dC50YXJnZXQgJiYgKAorICAgICAgICBldnQudGFyZ2V0Lm5vZGVOYW1lICE9PSAnT1BUSU9OJyAmJiBldnQudGFyZ2V0Lm5vZGVOYW1lICE9PSAnT1BUR1JPVVAnCisgICAgICApCisgICAgKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtdXRhdGlvbnMpIHsKKyAgICAgIC8vIElmIG11dGF0aW9uIGV2ZW50cyBhcmVuJ3Qgc3VwcG9ydGVkLCB0aGVuIHdlIGNhbiBvbmx5IGFzc3VtZSB0aGF0IHRoZQorICAgICAgLy8gY2hhbmdlIGFmZmVjdGVkIHRoZSBzZWxlY3Rpb25zCisgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKG11dGF0aW9ucy5hZGRlZE5vZGVzICYmIG11dGF0aW9ucy5hZGRlZE5vZGVzLmxlbmd0aCA+IDApIHsKKyAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbXV0YXRpb25zLmFkZGVkTm9kZXMubGVuZ3RoOyBuKyspIHsKKyAgICAgICAgdmFyIG5vZGUgPSBtdXRhdGlvbnMuYWRkZWROb2Rlc1tuXTsKKworICAgICAgICBpZiAobm9kZS5zZWxlY3RlZCkgeworICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIGlmIChtdXRhdGlvbnMucmVtb3ZlZE5vZGVzICYmIG11dGF0aW9ucy5yZW1vdmVkTm9kZXMubGVuZ3RoID4gMCkgeworICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgfQorCisgICAgLy8gT25seSByZS1wdWxsIHRoZSBkYXRhIGlmIHdlIHRoaW5rIHRoZXJlIGlzIGEgY2hhbmdlCisgICAgaWYgKGNoYW5nZWQpIHsKKyAgICAgIHRoaXMuZGF0YUFkYXB0ZXIuY3VycmVudChmdW5jdGlvbiAoY3VycmVudERhdGEpIHsKKyAgICAgICAgc2VsZi50cmlnZ2VyKCdzZWxlY3Rpb246dXBkYXRlJywgeworICAgICAgICAgIGRhdGE6IGN1cnJlbnREYXRhCisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfQorICB9OworCisgIC8qKgorICAgKiBPdmVycmlkZSB0aGUgdHJpZ2dlciBtZXRob2QgdG8gYXV0b21hdGljYWxseSB0cmlnZ2VyIHByZS1ldmVudHMgd2hlbgorICAgKiB0aGVyZSBhcmUgZXZlbnRzIHRoYXQgY2FuIGJlIHByZXZlbnRlZC4KKyAgICovCisgIFNlbGVjdDIucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbiAobmFtZSwgYXJncykgeworICAgIHZhciBhY3R1YWxUcmlnZ2VyID0gU2VsZWN0Mi5fX3N1cGVyX18udHJpZ2dlcjsKKyAgICB2YXIgcHJlVHJpZ2dlck1hcCA9IHsKKyAgICAgICdvcGVuJzogJ29wZW5pbmcnLAorICAgICAgJ2Nsb3NlJzogJ2Nsb3NpbmcnLAorICAgICAgJ3NlbGVjdCc6ICdzZWxlY3RpbmcnLAorICAgICAgJ3Vuc2VsZWN0JzogJ3Vuc2VsZWN0aW5nJywKKyAgICAgICdjbGVhcic6ICdjbGVhcmluZycKKyAgICB9OworCisgICAgaWYgKGFyZ3MgPT09IHVuZGVmaW5lZCkgeworICAgICAgYXJncyA9IHt9OworICAgIH0KKworICAgIGlmIChuYW1lIGluIHByZVRyaWdnZXJNYXApIHsKKyAgICAgIHZhciBwcmVUcmlnZ2VyTmFtZSA9IHByZVRyaWdnZXJNYXBbbmFtZV07CisgICAgICB2YXIgcHJlVHJpZ2dlckFyZ3MgPSB7CisgICAgICAgIHByZXZlbnRlZDogZmFsc2UsCisgICAgICAgIG5hbWU6IG5hbWUsCisgICAgICAgIGFyZ3M6IGFyZ3MKKyAgICAgIH07CisKKyAgICAgIGFjdHVhbFRyaWdnZXIuY2FsbCh0aGlzLCBwcmVUcmlnZ2VyTmFtZSwgcHJlVHJpZ2dlckFyZ3MpOworCisgICAgICBpZiAocHJlVHJpZ2dlckFyZ3MucHJldmVudGVkKSB7CisgICAgICAgIGFyZ3MucHJldmVudGVkID0gdHJ1ZTsKKworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgYWN0dWFsVHJpZ2dlci5jYWxsKHRoaXMsIG5hbWUsIGFyZ3MpOworICB9OworCisgIFNlbGVjdDIucHJvdG90eXBlLnRvZ2dsZURyb3Bkb3duID0gZnVuY3Rpb24gKCkgeworICAgIGlmICh0aGlzLm9wdGlvbnMuZ2V0KCdkaXNhYmxlZCcpKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHRoaXMuaXNPcGVuKCkpIHsKKyAgICAgIHRoaXMuY2xvc2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy5vcGVuKCk7CisgICAgfQorICB9OworCisgIFNlbGVjdDIucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKHRoaXMuaXNPcGVuKCkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0aGlzLnRyaWdnZXIoJ3F1ZXJ5Jywge30pOworICB9OworCisgIFNlbGVjdDIucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkgeworICAgIGlmICghdGhpcy5pc09wZW4oKSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRoaXMudHJpZ2dlcignY2xvc2UnLCB7fSk7CisgIH07CisKKyAgU2VsZWN0Mi5wcm90b3R5cGUuaXNPcGVuID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiB0aGlzLiRjb250YWluZXIuaGFzQ2xhc3MoJ3NlbGVjdDItY29udGFpbmVyLS1vcGVuJyk7CisgIH07CisKKyAgU2VsZWN0Mi5wcm90b3R5cGUuaGFzRm9jdXMgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIHRoaXMuJGNvbnRhaW5lci5oYXNDbGFzcygnc2VsZWN0Mi1jb250YWluZXItLWZvY3VzJyk7CisgIH07CisKKyAgU2VsZWN0Mi5wcm90b3R5cGUuZm9jdXMgPSBmdW5jdGlvbiAoZGF0YSkgeworICAgIC8vIE5vIG5lZWQgdG8gcmUtdHJpZ2dlciBmb2N1cyBldmVudHMgaWYgd2UgYXJlIGFscmVhZHkgZm9jdXNlZAorICAgIGlmICh0aGlzLmhhc0ZvY3VzKCkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0aGlzLiRjb250YWluZXIuYWRkQ2xhc3MoJ3NlbGVjdDItY29udGFpbmVyLS1mb2N1cycpOworICAgIHRoaXMudHJpZ2dlcignZm9jdXMnLCB7fSk7CisgIH07CisKKyAgU2VsZWN0Mi5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKGFyZ3MpIHsKKyAgICBpZiAodGhpcy5vcHRpb25zLmdldCgnZGVidWcnKSAmJiB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLndhcm4pIHsKKyAgICAgIGNvbnNvbGUud2FybigKKyAgICAgICAgJ1NlbGVjdDI6IFRoZSBgc2VsZWN0MigiZW5hYmxlIilgIG1ldGhvZCBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCB3aWxsJyArCisgICAgICAgICcgYmUgcmVtb3ZlZCBpbiBsYXRlciBTZWxlY3QyIHZlcnNpb25zLiBVc2UgJGVsZW1lbnQucHJvcCgiZGlzYWJsZWQiKScgKworICAgICAgICAnIGluc3RlYWQuJworICAgICAgKTsKKyAgICB9CisKKyAgICBpZiAoYXJncyA9PSBudWxsIHx8IGFyZ3MubGVuZ3RoID09PSAwKSB7CisgICAgICBhcmdzID0gW3RydWVdOworICAgIH0KKworICAgIHZhciBkaXNhYmxlZCA9ICFhcmdzWzBdOworCisgICAgdGhpcy4kZWxlbWVudC5wcm9wKCdkaXNhYmxlZCcsIGRpc2FibGVkKTsKKyAgfTsKKworICBTZWxlY3QyLnByb3RvdHlwZS5kYXRhID0gZnVuY3Rpb24gKCkgeworICAgIGlmICh0aGlzLm9wdGlvbnMuZ2V0KCdkZWJ1ZycpICYmCisgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUud2FybikgeworICAgICAgY29uc29sZS53YXJuKAorICAgICAgICAnU2VsZWN0MjogRGF0YSBjYW4gbm8gbG9uZ2VyIGJlIHNldCB1c2luZyBgc2VsZWN0MigiZGF0YSIpYC4gWW91ICcgKworICAgICAgICAnc2hvdWxkIGNvbnNpZGVyIHNldHRpbmcgdGhlIHZhbHVlIGluc3RlYWQgdXNpbmcgYCRlbGVtZW50LnZhbCgpYC4nCisgICAgICApOworICAgIH0KKworICAgIHZhciBkYXRhID0gW107CisKKyAgICB0aGlzLmRhdGFBZGFwdGVyLmN1cnJlbnQoZnVuY3Rpb24gKGN1cnJlbnREYXRhKSB7CisgICAgICBkYXRhID0gY3VycmVudERhdGE7CisgICAgfSk7CisKKyAgICByZXR1cm4gZGF0YTsKKyAgfTsKKworICBTZWxlY3QyLnByb3RvdHlwZS52YWwgPSBmdW5jdGlvbiAoYXJncykgeworICAgIGlmICh0aGlzLm9wdGlvbnMuZ2V0KCdkZWJ1ZycpICYmIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUud2FybikgeworICAgICAgY29uc29sZS53YXJuKAorICAgICAgICAnU2VsZWN0MjogVGhlIGBzZWxlY3QyKCJ2YWwiKWAgbWV0aG9kIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUnICsKKyAgICAgICAgJyByZW1vdmVkIGluIGxhdGVyIFNlbGVjdDIgdmVyc2lvbnMuIFVzZSAkZWxlbWVudC52YWwoKSBpbnN0ZWFkLicKKyAgICAgICk7CisgICAgfQorCisgICAgaWYgKGFyZ3MgPT0gbnVsbCB8fCBhcmdzLmxlbmd0aCA9PT0gMCkgeworICAgICAgcmV0dXJuIHRoaXMuJGVsZW1lbnQudmFsKCk7CisgICAgfQorCisgICAgdmFyIG5ld1ZhbCA9IGFyZ3NbMF07CisKKyAgICBpZiAoJC5pc0FycmF5KG5ld1ZhbCkpIHsKKyAgICAgIG5ld1ZhbCA9ICQubWFwKG5ld1ZhbCwgZnVuY3Rpb24gKG9iaikgeworICAgICAgICByZXR1cm4gb2JqLnRvU3RyaW5nKCk7CisgICAgICB9KTsKKyAgICB9CisKKyAgICB0aGlzLiRlbGVtZW50LnZhbChuZXdWYWwpLnRyaWdnZXIoJ2NoYW5nZScpOworICB9OworCisgIFNlbGVjdDIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy4kY29udGFpbmVyLnJlbW92ZSgpOworCisgICAgaWYgKHRoaXMuJGVsZW1lbnRbMF0uZGV0YWNoRXZlbnQpIHsKKyAgICAgIHRoaXMuJGVsZW1lbnRbMF0uZGV0YWNoRXZlbnQoJ29ucHJvcGVydHljaGFuZ2UnLCB0aGlzLl9zeW5jQSk7CisgICAgfQorCisgICAgaWYgKHRoaXMuX29ic2VydmVyICE9IG51bGwpIHsKKyAgICAgIHRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgIHRoaXMuX29ic2VydmVyID0gbnVsbDsKKyAgICB9IGVsc2UgaWYgKHRoaXMuJGVsZW1lbnRbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcikgeworICAgICAgdGhpcy4kZWxlbWVudFswXQorICAgICAgICAucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NQXR0ck1vZGlmaWVkJywgdGhpcy5fc3luY0EsIGZhbHNlKTsKKyAgICAgIHRoaXMuJGVsZW1lbnRbMF0KKyAgICAgICAgLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ0RPTU5vZGVJbnNlcnRlZCcsIHRoaXMuX3N5bmNTLCBmYWxzZSk7CisgICAgICB0aGlzLiRlbGVtZW50WzBdCisgICAgICAgIC5yZW1vdmVFdmVudExpc3RlbmVyKCdET01Ob2RlUmVtb3ZlZCcsIHRoaXMuX3N5bmNTLCBmYWxzZSk7CisgICAgfQorCisgICAgdGhpcy5fc3luY0EgPSBudWxsOworICAgIHRoaXMuX3N5bmNTID0gbnVsbDsKKworICAgIHRoaXMuJGVsZW1lbnQub2ZmKCcuc2VsZWN0MicpOworICAgIHRoaXMuJGVsZW1lbnQuYXR0cigndGFiaW5kZXgnLAorICAgIFV0aWxzLkdldERhdGEodGhpcy4kZWxlbWVudFswXSwgJ29sZC10YWJpbmRleCcpKTsKKworICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ3NlbGVjdDItaGlkZGVuLWFjY2Vzc2libGUnKTsKKyAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7CisgICAgVXRpbHMuUmVtb3ZlRGF0YSh0aGlzLiRlbGVtZW50WzBdKTsKKyAgICB0aGlzLiRlbGVtZW50LnJlbW92ZURhdGEoJ3NlbGVjdDInKTsKKworICAgIHRoaXMuZGF0YUFkYXB0ZXIuZGVzdHJveSgpOworICAgIHRoaXMuc2VsZWN0aW9uLmRlc3Ryb3koKTsKKyAgICB0aGlzLmRyb3Bkb3duLmRlc3Ryb3koKTsKKyAgICB0aGlzLnJlc3VsdHMuZGVzdHJveSgpOworCisgICAgdGhpcy5kYXRhQWRhcHRlciA9IG51bGw7CisgICAgdGhpcy5zZWxlY3Rpb24gPSBudWxsOworICAgIHRoaXMuZHJvcGRvd24gPSBudWxsOworICAgIHRoaXMucmVzdWx0cyA9IG51bGw7CisgIH07CisKKyAgU2VsZWN0Mi5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkgeworICAgIHZhciAkY29udGFpbmVyID0gJCgKKyAgICAgICc8c3BhbiBjbGFzcz0ic2VsZWN0MiBzZWxlY3QyLWNvbnRhaW5lciI+JyArCisgICAgICAgICc8c3BhbiBjbGFzcz0ic2VsZWN0aW9uIj48L3NwYW4+JyArCisgICAgICAgICc8c3BhbiBjbGFzcz0iZHJvcGRvd24td3JhcHBlciIgYXJpYS1oaWRkZW49InRydWUiPjwvc3Bhbj4nICsKKyAgICAgICc8L3NwYW4+JworICAgICk7CisKKyAgICAkY29udGFpbmVyLmF0dHIoJ2RpcicsIHRoaXMub3B0aW9ucy5nZXQoJ2RpcicpKTsKKworICAgIHRoaXMuJGNvbnRhaW5lciA9ICRjb250YWluZXI7CisKKyAgICB0aGlzLiRjb250YWluZXIuYWRkQ2xhc3MoJ3NlbGVjdDItY29udGFpbmVyLS0nICsgdGhpcy5vcHRpb25zLmdldCgndGhlbWUnKSk7CisKKyAgICBVdGlscy5TdG9yZURhdGEoJGNvbnRhaW5lclswXSwgJ2VsZW1lbnQnLCB0aGlzLiRlbGVtZW50KTsKKworICAgIHJldHVybiAkY29udGFpbmVyOworICB9OworCisgIHJldHVybiBTZWxlY3QyOworfSk7CisKK1MyLmRlZmluZSgnanF1ZXJ5LW1vdXNld2hlZWwnLFsKKyAgJ2pxdWVyeScKK10sIGZ1bmN0aW9uICgkKSB7CisgIC8vIFVzZWQgdG8gc2hpbSBqUXVlcnkubW91c2V3aGVlbCBmb3Igbm9uLWZ1bGwgYnVpbGRzLgorICByZXR1cm4gJDsKK30pOworCitTMi5kZWZpbmUoJ2pxdWVyeS5zZWxlY3QyJyxbCisgICdqcXVlcnknLAorICAnanF1ZXJ5LW1vdXNld2hlZWwnLAorCisgICcuL3NlbGVjdDIvY29yZScsCisgICcuL3NlbGVjdDIvZGVmYXVsdHMnLAorICAnLi9zZWxlY3QyL3V0aWxzJworXSwgZnVuY3Rpb24gKCQsIF8sIFNlbGVjdDIsIERlZmF1bHRzLCBVdGlscykgeworICBpZiAoJC5mbi5zZWxlY3QyID09IG51bGwpIHsKKyAgICAvLyBBbGwgbWV0aG9kcyB0aGF0IHNob3VsZCByZXR1cm4gdGhlIGVsZW1lbnQKKyAgICB2YXIgdGhpc01ldGhvZHMgPSBbJ29wZW4nLCAnY2xvc2UnLCAnZGVzdHJveSddOworCisgICAgJC5mbi5zZWxlY3QyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKKyAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworCisgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnKSB7CisgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgdmFyIGluc3RhbmNlT3B0aW9ucyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBvcHRpb25zKTsKKworICAgICAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBTZWxlY3QyKCQodGhpcyksIGluc3RhbmNlT3B0aW9ucyk7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiB0aGlzOworICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgdmFyIHJldDsKKyAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOworCisgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgdmFyIGluc3RhbmNlID0gVXRpbHMuR2V0RGF0YSh0aGlzLCAnc2VsZWN0MicpOworCisgICAgICAgICAgaWYgKGluc3RhbmNlID09IG51bGwgJiYgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5lcnJvcikgeworICAgICAgICAgICAgY29uc29sZS5lcnJvcigKKyAgICAgICAgICAgICAgJ1RoZSBzZWxlY3QyKFwnJyArIG9wdGlvbnMgKyAnXCcpIG1ldGhvZCB3YXMgY2FsbGVkIG9uIGFuICcgKworICAgICAgICAgICAgICAnZWxlbWVudCB0aGF0IGlzIG5vdCB1c2luZyBTZWxlY3QyLicKKyAgICAgICAgICAgICk7CisgICAgICAgICAgfQorCisgICAgICAgICAgcmV0ID0gaW5zdGFuY2Vbb3B0aW9uc10uYXBwbHkoaW5zdGFuY2UsIGFyZ3MpOworICAgICAgICB9KTsKKworICAgICAgICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgYmUgcmV0dXJuaW5nIGB0aGlzYAorICAgICAgICBpZiAoJC5pbkFycmF5KG9wdGlvbnMsIHRoaXNNZXRob2RzKSA+IC0xKSB7CisgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyBmb3IgU2VsZWN0MjogJyArIG9wdGlvbnMpOworICAgICAgfQorICAgIH07CisgIH0KKworICBpZiAoJC5mbi5zZWxlY3QyLmRlZmF1bHRzID09IG51bGwpIHsKKyAgICAkLmZuLnNlbGVjdDIuZGVmYXVsdHMgPSBEZWZhdWx0czsKKyAgfQorCisgIHJldHVybiBTZWxlY3QyOworfSk7CisKKyAgLy8gUmV0dXJuIHRoZSBBTUQgbG9hZGVyIGNvbmZpZ3VyYXRpb24gc28gaXQgY2FuIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGlzIGZpbGUKKyAgcmV0dXJuIHsKKyAgICBkZWZpbmU6IFMyLmRlZmluZSwKKyAgICByZXF1aXJlOiBTMi5yZXF1aXJlCisgIH07Cit9KCkpOworCisgIC8vIEF1dG9sb2FkIHRoZSBqUXVlcnkgYmluZGluZ3MKKyAgLy8gV2Uga25vdyB0aGF0IGFsbCBvZiB0aGUgbW9kdWxlcyBleGlzdCBhYm92ZSB0aGlzLCBzbyB3ZSdyZSBzYWZlCisgIHZhciBzZWxlY3QyID0gUzIucmVxdWlyZSgnanF1ZXJ5LnNlbGVjdDInKTsKKworICAvLyBIb2xkIHRoZSBBTUQgbW9kdWxlIHJlZmVyZW5jZXMgb24gdGhlIGpRdWVyeSBmdW5jdGlvbiB0aGF0IHdhcyBqdXN0IGxvYWRlZAorICAvLyBUaGlzIGFsbG93cyBTZWxlY3QyIHRvIHVzZSB0aGUgaW50ZXJuYWwgbG9hZGVyIG91dHNpZGUgb2YgdGhpcyBmaWxlLCBzdWNoCisgIC8vIGFzIGluIHRoZSBsYW5ndWFnZSBmaWxlcy4KKyAgalF1ZXJ5LmZuLnNlbGVjdDIuYW1kID0gUzI7CisKKyAgLy8gUmV0dXJuIHRoZSBTZWxlY3QyIGluc3RhbmNlIGZvciBhbnlvbmUgd2hvIGlzIGltcG9ydGluZyBpdC4KKyAgcmV0dXJuIHNlbGVjdDI7Cit9KSk7CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9zZWxlY3QyLm1pbi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmFuY3lTZWxlY3RzL3NlbGVjdDItNC4wLjYtcmMuMS1kaXN0L2pzL3NlbGVjdDIubWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MDUyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZhbmN5U2VsZWN0cy9zZWxlY3QyLTQuMC42LXJjLjEtZGlzdC9qcy9zZWxlY3QyLm1pbi5qcwpAQCAtMCwwICsxIEBACisvKiEgU2VsZWN0MiA0LjAuNi1yYy4xIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovIWZ1bmN0aW9uKGEpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsianF1ZXJ5Il0sYSk6Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKGIsYyl7cmV0dXJuIHZvaWQgMD09PWMmJihjPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3JlcXVpcmUoImpxdWVyeSIpOnJlcXVpcmUoImpxdWVyeSIpKGIpKSxhKGMpLGN9OmEoalF1ZXJ5KX0oZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXtpZihhJiZhLmZuJiZhLmZuLnNlbGVjdDImJmEuZm4uc2VsZWN0Mi5hbWQpdmFyIGI9YS5mbi5zZWxlY3QyLmFtZDt2YXIgYjtyZXR1cm4gZnVuY3Rpb24oKXtpZighYnx8IWIucmVxdWlyZWpzKXtiP2M9YjpiPXt9O3ZhciBhLGMsZDshZnVuY3Rpb24oYil7ZnVuY3Rpb24gZShhLGIpe3JldHVybiB2LmNhbGwoYSxiKX1mdW5jdGlvbiBmKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG89YiYmYi5zcGxpdCgiLyIpLHA9dC5tYXAscT1wJiZwWyIqIl18fHt9O2lmKGEpe2ZvcihhPWEuc3BsaXQoIi8iKSxnPWEubGVuZ3RoLTEsdC5ub2RlSWRDb21wYXQmJngudGVzdChhW2ddKSYmKGFbZ109YVtnXS5yZXBsYWNlKHgsIiIpKSwiLiI9PT1hWzBdLmNoYXJBdCgwKSYmbyYmKG49by5zbGljZSgwLG8ubGVuZ3RoLTEpLGE9bi5jb25jYXQoYSkpLGs9MDtrPGEubGVuZ3RoO2srKylpZigiLiI9PT0obT1hW2tdKSlhLnNwbGljZShrLDEpLGstPTE7ZWxzZSBpZigiLi4iPT09bSl7aWYoMD09PWt8fDE9PT1rJiYiLi4iPT09YVsyXXx8Ii4uIj09PWFbay0xXSljb250aW51ZTtrPjAmJihhLnNwbGljZShrLTEsMiksay09Mil9YT1hLmpvaW4oIi8iKX1pZigob3x8cSkmJnApe2ZvcihjPWEuc3BsaXQoIi8iKSxrPWMubGVuZ3RoO2s+MDtrLT0xKXtpZihkPWMuc2xpY2UoMCxrKS5qb2luKCIvIiksbylmb3IobD1vLmxlbmd0aDtsPjA7bC09MSlpZigoZT1wW28uc2xpY2UoMCxsKS5qb2luKCIvIildKSYmKGU9ZVtkXSkpe2Y9ZSxoPWs7YnJlYWt9aWYoZilicmVhazshaSYmcSYmcVtkXSYmKGk9cVtkXSxqPWspfSFmJiZpJiYoZj1pLGg9aiksZiYmKGMuc3BsaWNlKDAsaCxmKSxhPWMuam9pbigiLyIpKX1yZXR1cm4gYX1mdW5jdGlvbiBnKGEsYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9dy5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGRbMF0mJjE9PT1kLmxlbmd0aCYmZC5wdXNoKG51bGwpLG8uYXBwbHkoYixkLmNvbmNhdChbYSxjXSkpfX1mdW5jdGlvbiBoKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZihiLGEpfX1mdW5jdGlvbiBpKGEpe3JldHVybiBmdW5jdGlvbihiKXtyW2FdPWJ9fWZ1bmN0aW9uIGooYSl7aWYoZShzLGEpKXt2YXIgYz1zW2FdO2RlbGV0ZSBzW2FdLHVbYV09ITAsbi5hcHBseShiLGMpfWlmKCFlKHIsYSkmJiFlKHUsYSkpdGhyb3cgbmV3IEVycm9yKCJObyAiK2EpO3JldHVybiByW2FdfWZ1bmN0aW9uIGsoYSl7dmFyIGIsYz1hP2EuaW5kZXhPZigiISIpOi0xO3JldHVybiBjPi0xJiYoYj1hLnN1YnN0cmluZygwLGMpLGE9YS5zdWJzdHJpbmcoYysxLGEubGVuZ3RoKSksW2IsYV19ZnVuY3Rpb24gbChhKXtyZXR1cm4gYT9rKGEpOltdfWZ1bmN0aW9uIG0oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQmJnQuY29uZmlnJiZ0LmNvbmZpZ1thXXx8e319fXZhciBuLG8scCxxLHI9e30scz17fSx0PXt9LHU9e30sdj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHc9W10uc2xpY2UseD0vXC5qcyQvO3A9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPWsoYSksZT1kWzBdLGc9YlsxXTtyZXR1cm4gYT1kWzFdLGUmJihlPWYoZSxnKSxjPWooZSkpLGU/YT1jJiZjLm5vcm1hbGl6ZT9jLm5vcm1hbGl6ZShhLGgoZykpOmYoYSxnKTooYT1mKGEsZyksZD1rKGEpLGU9ZFswXSxhPWRbMV0sZSYmKGM9aihlKSkpLHtmOmU/ZSsiISIrYTphLG46YSxwcjplLHA6Y319LHE9e3JlcXVpcmU6ZnVuY3Rpb24oYSl7cmV0dXJuIGcoYSl9LGV4cG9ydHM6ZnVuY3Rpb24oYSl7dmFyIGI9clthXTtyZXR1cm4gdm9pZCAwIT09Yj9iOnJbYV09e319LG1vZHVsZTpmdW5jdGlvbihhKXtyZXR1cm57aWQ6YSx1cmk6IiIsZXhwb3J0czpyW2FdLGNvbmZpZzptKGEpfX19LG49ZnVuY3Rpb24oYSxjLGQsZil7dmFyIGgsayxtLG4sbyx0LHYsdz1bXSx4PXR5cGVvZiBkO2lmKGY9Znx8YSx0PWwoZiksInVuZGVmaW5lZCI9PT14fHwiZnVuY3Rpb24iPT09eCl7Zm9yKGM9IWMubGVuZ3RoJiZkLmxlbmd0aD9bInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl06YyxvPTA7bzxjLmxlbmd0aDtvKz0xKWlmKG49cChjW29dLHQpLCJyZXF1aXJlIj09PShrPW4uZikpd1tvXT1xLnJlcXVpcmUoYSk7ZWxzZSBpZigiZXhwb3J0cyI9PT1rKXdbb109cS5leHBvcnRzKGEpLHY9ITA7ZWxzZSBpZigibW9kdWxlIj09PWspaD13W29dPXEubW9kdWxlKGEpO2Vsc2UgaWYoZShyLGspfHxlKHMsayl8fGUodSxrKSl3W29dPWooayk7ZWxzZXtpZighbi5wKXRocm93IG5ldyBFcnJvcihhKyIgbWlzc2luZyAiK2spO24ucC5sb2FkKG4ubixnKGYsITApLGkoaykse30pLHdbb109cltrXX1tPWQ/ZC5hcHBseShyW2FdLHcpOnZvaWQgMCxhJiYoaCYmaC5leHBvcnRzIT09YiYmaC5leHBvcnRzIT09clthXT9yW2FdPWguZXhwb3J0czptPT09YiYmdnx8KHJbYV09bSkpfWVsc2UgYSYmKHJbYV09ZCl9LGE9Yz1vPWZ1bmN0aW9uKGEsYyxkLGUsZil7aWYoInN0cmluZyI9PXR5cGVvZiBhKXJldHVybiBxW2FdP3FbYV0oYyk6aihwKGEsbChjKSkuZik7aWYoIWEuc3BsaWNlKXtpZih0PWEsdC5kZXBzJiZvKHQuZGVwcyx0LmNhbGxiYWNrKSwhYylyZXR1cm47Yy5zcGxpY2U/KGE9YyxjPWQsZD1udWxsKTphPWJ9cmV0dXJuIGM9Y3x8ZnVuY3Rpb24oKXt9LCJmdW5jdGlvbiI9PXR5cGVvZiBkJiYoZD1lLGU9ZiksZT9uKGIsYSxjLGQpOnNldFRpbWVvdXQoZnVuY3Rpb24oKXtuKGIsYSxjLGQpfSw0KSxvfSxvLmNvbmZpZz1mdW5jdGlvbihhKXtyZXR1cm4gbyhhKX0sYS5fZGVmaW5lZD1yLGQ9ZnVuY3Rpb24oYSxiLGMpe2lmKCJzdHJpbmciIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoIlNlZSBhbG1vbmQgUkVBRE1FOiBpbmNvcnJlY3QgbW9kdWxlIGJ1aWxkLCBubyBtb2R1bGUgbmFtZSIpO2Iuc3BsaWNlfHwoYz1iLGI9W10pLGUocixhKXx8ZShzLGEpfHwoc1thXT1bYSxiLGNdKX0sZC5hbWQ9e2pRdWVyeTohMH19KCksYi5yZXF1aXJlanM9YSxiLnJlcXVpcmU9YyxiLmRlZmluZT1kfX0oKSxiLmRlZmluZSgiYWxtb25kIixmdW5jdGlvbigpe30pLGIuZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7dmFyIGI9YXx8JDtyZXR1cm4gbnVsbD09YiYmY29uc29sZSYmY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcigiU2VsZWN0MjogQW4gaW5zdGFuY2Ugb2YgalF1ZXJ5IG9yIGEgalF1ZXJ5LWNvbXBhdGlibGUgbGlicmFyeSB3YXMgbm90IGZvdW5kLiBNYWtlIHN1cmUgdGhhdCB5b3UgYXJlIGluY2x1ZGluZyBqUXVlcnkgYmVmb3JlIFNlbGVjdDIgb24geW91ciB3ZWIgcGFnZS4iKSxifSksYi5kZWZpbmUoInNlbGVjdDIvdXRpbHMiLFsianF1ZXJ5Il0sZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt2YXIgYj1hLnByb3RvdHlwZSxjPVtdO2Zvcih2YXIgZCBpbiBiKXsiZnVuY3Rpb24iPT10eXBlb2YgYltkXSYmKCJjb25zdHJ1Y3RvciIhPT1kJiZjLnB1c2goZCkpfXJldHVybiBjfXZhciBjPXt9O2MuRXh0ZW5kPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYygpe3RoaXMuY29uc3RydWN0b3I9YX12YXIgZD17fS5oYXNPd25Qcm9wZXJ0eTtmb3IodmFyIGUgaW4gYilkLmNhbGwoYixlKSYmKGFbZV09YltlXSk7cmV0dXJuIGMucHJvdG90eXBlPWIucHJvdG90eXBlLGEucHJvdG90eXBlPW5ldyBjLGEuX19zdXBlcl9fPWIucHJvdG90eXBlLGF9LGMuRGVjb3JhdGU9ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBkKCl7dmFyIGI9QXJyYXkucHJvdG90eXBlLnVuc2hpZnQsZD1jLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5sZW5ndGgsZT1hLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtkPjAmJihiLmNhbGwoYXJndW1lbnRzLGEucHJvdG90eXBlLmNvbnN0cnVjdG9yKSxlPWMucHJvdG90eXBlLmNvbnN0cnVjdG9yKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBlKCl7dGhpcy5jb25zdHJ1Y3Rvcj1kfXZhciBmPWIoYyksZz1iKGEpO2MuZGlzcGxheU5hbWU9YS5kaXNwbGF5TmFtZSxkLnByb3RvdHlwZT1uZXcgZTtmb3IodmFyIGg9MDtoPGcubGVuZ3RoO2grKyl7dmFyIGk9Z1toXTtkLnByb3RvdHlwZVtpXT1hLnByb3RvdHlwZVtpXX1mb3IodmFyIGo9KGZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKCl7fTthIGluIGQucHJvdG90eXBlJiYoYj1kLnByb3RvdHlwZVthXSk7dmFyIGU9Yy5wcm90b3R5cGVbYV07cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwoYXJndW1lbnRzLGIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pLGs9MDtrPGYubGVuZ3RoO2srKyl7dmFyIGw9ZltrXTtkLnByb3RvdHlwZVtsXT1qKGwpfXJldHVybiBkfTt2YXIgZD1mdW5jdGlvbigpe3RoaXMubGlzdGVuZXJzPXt9fTtkLnByb3RvdHlwZS5vbj1mdW5jdGlvbihhLGIpe3RoaXMubGlzdGVuZXJzPXRoaXMubGlzdGVuZXJzfHx7fSxhIGluIHRoaXMubGlzdGVuZXJzP3RoaXMubGlzdGVuZXJzW2FdLnB1c2goYik6dGhpcy5saXN0ZW5lcnNbYV09W2JdfSxkLnByb3RvdHlwZS50cmlnZ2VyPWZ1bmN0aW9uKGEpe3ZhciBiPUFycmF5LnByb3RvdHlwZS5zbGljZSxjPWIuY2FsbChhcmd1bWVudHMsMSk7dGhpcy5saXN0ZW5lcnM9dGhpcy5saXN0ZW5lcnN8fHt9LG51bGw9PWMmJihjPVtdKSwwPT09Yy5sZW5ndGgmJmMucHVzaCh7fSksY1swXS5fdHlwZT1hLGEgaW4gdGhpcy5saXN0ZW5lcnMmJnRoaXMuaW52b2tlKHRoaXMubGlzdGVuZXJzW2FdLGIuY2FsbChhcmd1bWVudHMsMSkpLCIqImluIHRoaXMubGlzdGVuZXJzJiZ0aGlzLmludm9rZSh0aGlzLmxpc3RlbmVyc1siKiJdLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLmludm9rZT1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKylhW2NdLmFwcGx5KHRoaXMsYil9LGMuT2JzZXJ2YWJsZT1kLGMuZ2VuZXJhdGVDaGFycz1mdW5jdGlvbihhKXtmb3IodmFyIGI9IiIsYz0wO2M8YTtjKyspe2IrPU1hdGguZmxvb3IoMzYqTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMzYpfXJldHVybiBifSxjLmJpbmQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXthLmFwcGx5KGIsYXJndW1lbnRzKX19LGMuX2NvbnZlcnREYXRhPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiBhKXt2YXIgYz1iLnNwbGl0KCItIiksZD1hO2lmKDEhPT1jLmxlbmd0aCl7Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPWNbZV07Zj1mLnN1YnN0cmluZygwLDEpLnRvTG93ZXJDYXNlKCkrZi5zdWJzdHJpbmcoMSksZiBpbiBkfHwoZFtmXT17fSksZT09Yy5sZW5ndGgtMSYmKGRbZl09YVtiXSksZD1kW2ZdfWRlbGV0ZSBhW2JdfX1yZXR1cm4gYX0sYy5oYXNTY3JvbGw9ZnVuY3Rpb24oYixjKXt2YXIgZD1hKGMpLGU9Yy5zdHlsZS5vdmVyZmxvd1gsZj1jLnN0eWxlLm92ZXJmbG93WTtyZXR1cm4oZSE9PWZ8fCJoaWRkZW4iIT09ZiYmInZpc2libGUiIT09ZikmJigic2Nyb2xsIj09PWV8fCJzY3JvbGwiPT09Znx8KGQuaW5uZXJIZWlnaHQoKTxjLnNjcm9sbEhlaWdodHx8ZC5pbm5lcldpZHRoKCk8Yy5zY3JvbGxXaWR0aCkpfSxjLmVzY2FwZU1hcmt1cD1mdW5jdGlvbihhKXt2YXIgYj17IlxcIjoiJiM5MjsiLCImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyIsIi8iOiImIzQ3OyJ9O3JldHVybiJzdHJpbmciIT10eXBlb2YgYT9hOlN0cmluZyhhKS5yZXBsYWNlKC9bJjw+IidcL1xcXS9nLGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfSl9LGMuYXBwZW5kTWFueT1mdW5jdGlvbihiLGMpe2lmKCIxLjciPT09YS5mbi5qcXVlcnkuc3Vic3RyKDAsMykpe3ZhciBkPWEoKTthLm1hcChjLGZ1bmN0aW9uKGEpe2Q9ZC5hZGQoYSl9KSxjPWR9Yi5hcHBlbmQoYyl9LGMuX19jYWNoZT17fTt2YXIgZT0wO3JldHVybiBjLkdldFVuaXF1ZUVsZW1lbnRJZD1mdW5jdGlvbihhKXt2YXIgYj1hLmdldEF0dHJpYnV0ZSgiZGF0YS1zZWxlY3QyLWlkIik7cmV0dXJuIG51bGw9PWImJihhLmlkPyhiPWEuaWQsYS5zZXRBdHRyaWJ1dGUoImRhdGEtc2VsZWN0Mi1pZCIsYikpOihhLnNldEF0dHJpYnV0ZSgiZGF0YS1zZWxlY3QyLWlkIiwrK2UpLGI9ZS50b1N0cmluZygpKSksYn0sYy5TdG9yZURhdGE9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWMuR2V0VW5pcXVlRWxlbWVudElkKGEpO2MuX19jYWNoZVtlXXx8KGMuX19jYWNoZVtlXT17fSksYy5fX2NhY2hlW2VdW2JdPWR9LGMuR2V0RGF0YT1mdW5jdGlvbihiLGQpe3ZhciBlPWMuR2V0VW5pcXVlRWxlbWVudElkKGIpO3JldHVybiBkP2MuX19jYWNoZVtlXSYmbnVsbCE9Yy5fX2NhY2hlW2VdW2RdP2MuX19jYWNoZVtlXVtkXTphKGIpLmRhdGEoZCk6Yy5fX2NhY2hlW2VdfSxjLlJlbW92ZURhdGE9ZnVuY3Rpb24oYSl7dmFyIGI9Yy5HZXRVbmlxdWVFbGVtZW50SWQoYSk7bnVsbCE9Yy5fX2NhY2hlW2JdJiZkZWxldGUgYy5fX2NhY2hlW2JdfSxjfSksYi5kZWZpbmUoInNlbGVjdDIvcmVzdWx0cyIsWyJqcXVlcnkiLCIuL3V0aWxzIl0sZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYixkKXt0aGlzLiRlbGVtZW50PWEsdGhpcy5kYXRhPWQsdGhpcy5vcHRpb25zPWIsYy5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzKX1yZXR1cm4gYi5FeHRlbmQoYyxiLk9ic2VydmFibGUpLGMucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBiPWEoJzx1bCBjbGFzcz0ic2VsZWN0Mi1yZXN1bHRzX19vcHRpb25zIiByb2xlPSJ0cmVlIj48L3VsPicpO3JldHVybiB0aGlzLm9wdGlvbnMuZ2V0KCJtdWx0aXBsZSIpJiZiLmF0dHIoImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSIpLHRoaXMuJHJlc3VsdHM9YixifSxjLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuJHJlc3VsdHMuZW1wdHkoKX0sYy5wcm90b3R5cGUuZGlzcGxheU1lc3NhZ2U9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5vcHRpb25zLmdldCgiZXNjYXBlTWFya3VwIik7dGhpcy5jbGVhcigpLHRoaXMuaGlkZUxvYWRpbmcoKTt2YXIgZD1hKCc8bGkgcm9sZT0idHJlZWl0ZW0iIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBjbGFzcz0ic2VsZWN0Mi1yZXN1bHRzX19vcHRpb24iPjwvbGk+JyksZT10aGlzLm9wdGlvbnMuZ2V0KCJ0cmFuc2xhdGlvbnMiKS5nZXQoYi5tZXNzYWdlKTtkLmFwcGVuZChjKGUoYi5hcmdzKSkpLGRbMF0uY2xhc3NOYW1lKz0iIHNlbGVjdDItcmVzdWx0c19fbWVzc2FnZSIsdGhpcy4kcmVzdWx0cy5hcHBlbmQoZCl9LGMucHJvdG90eXBlLmhpZGVNZXNzYWdlcz1mdW5jdGlvbigpe3RoaXMuJHJlc3VsdHMuZmluZCgiLnNlbGVjdDItcmVzdWx0c19fbWVzc2FnZSIpLnJlbW92ZSgpfSxjLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oYSl7dGhpcy5oaWRlTG9hZGluZygpO3ZhciBiPVtdO2lmKG51bGw9PWEucmVzdWx0c3x8MD09PWEucmVzdWx0cy5sZW5ndGgpcmV0dXJuIHZvaWQoMD09PXRoaXMuJHJlc3VsdHMuY2hpbGRyZW4oKS5sZW5ndGgmJnRoaXMudHJpZ2dlcigicmVzdWx0czptZXNzYWdlIix7bWVzc2FnZToibm9SZXN1bHRzIn0pKTthLnJlc3VsdHM9dGhpcy5zb3J0KGEucmVzdWx0cyk7Zm9yKHZhciBjPTA7YzxhLnJlc3VsdHMubGVuZ3RoO2MrKyl7dmFyIGQ9YS5yZXN1bHRzW2NdLGU9dGhpcy5vcHRpb24oZCk7Yi5wdXNoKGUpfXRoaXMuJHJlc3VsdHMuYXBwZW5kKGIpfSxjLnByb3RvdHlwZS5wb3NpdGlvbj1mdW5jdGlvbihhLGIpe2IuZmluZCgiLnNlbGVjdDItcmVzdWx0cyIpLmFwcGVuZChhKX0sYy5wcm90b3R5cGUuc29ydD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5vcHRpb25zLmdldCgic29ydGVyIikoYSl9LGMucHJvdG90eXBlLmhpZ2hsaWdodEZpcnN0SXRlbT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJHJlc3VsdHMuZmluZCgiLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdIiksYj1hLmZpbHRlcigiW2FyaWEtc2VsZWN0ZWQ9dHJ1ZV0iKTtiLmxlbmd0aD4wP2IuZmlyc3QoKS50cmlnZ2VyKCJtb3VzZWVudGVyIik6YS5maXJzdCgpLnRyaWdnZXIoIm1vdXNlZW50ZXIiKSx0aGlzLmVuc3VyZUhpZ2hsaWdodFZpc2libGUoKX0sYy5wcm90b3R5cGUuc2V0Q2xhc3Nlcz1mdW5jdGlvbigpe3ZhciBjPXRoaXM7dGhpcy5kYXRhLmN1cnJlbnQoZnVuY3Rpb24oZCl7dmFyIGU9YS5tYXAoZCxmdW5jdGlvbihhKXtyZXR1cm4gYS5pZC50b1N0cmluZygpfSk7Yy4kcmVzdWx0cy5maW5kKCIuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25bYXJpYS1zZWxlY3RlZF0iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxkPWIuR2V0RGF0YSh0aGlzLCJkYXRhIiksZj0iIitkLmlkO251bGwhPWQuZWxlbWVudCYmZC5lbGVtZW50LnNlbGVjdGVkfHxudWxsPT1kLmVsZW1lbnQmJmEuaW5BcnJheShmLGUpPi0xP2MuYXR0cigiYXJpYS1zZWxlY3RlZCIsInRydWUiKTpjLmF0dHIoImFyaWEtc2VsZWN0ZWQiLCJmYWxzZSIpfSl9KX0sYy5wcm90b3R5cGUuc2hvd0xvYWRpbmc9ZnVuY3Rpb24oYSl7dGhpcy5oaWRlTG9hZGluZygpO3ZhciBiPXRoaXMub3B0aW9ucy5nZXQoInRyYW5zbGF0aW9ucyIpLmdldCgic2VhcmNoaW5nIiksYz17ZGlzYWJsZWQ6ITAsbG9hZGluZzohMCx0ZXh0OmIoYSl9LGQ9dGhpcy5vcHRpb24oYyk7ZC5jbGFzc05hbWUrPSIgbG9hZGluZy1yZXN1bHRzIix0aGlzLiRyZXN1bHRzLnByZXBlbmQoZCl9LGMucHJvdG90eXBlLmhpZGVMb2FkaW5nPWZ1bmN0aW9uKCl7dGhpcy4kcmVzdWx0cy5maW5kKCIubG9hZGluZy1yZXN1bHRzIikucmVtb3ZlKCl9LGMucHJvdG90eXBlLm9wdGlvbj1mdW5jdGlvbihjKXt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpO2QuY2xhc3NOYW1lPSJzZWxlY3QyLXJlc3VsdHNfX29wdGlvbiI7dmFyIGU9e3JvbGU6InRyZWVpdGVtIiwiYXJpYS1zZWxlY3RlZCI6ImZhbHNlIn07Yy5kaXNhYmxlZCYmKGRlbGV0ZSBlWyJhcmlhLXNlbGVjdGVkIl0sZVsiYXJpYS1kaXNhYmxlZCJdPSJ0cnVlIiksbnVsbD09Yy5pZCYmZGVsZXRlIGVbImFyaWEtc2VsZWN0ZWQiXSxudWxsIT1jLl9yZXN1bHRJZCYmKGQuaWQ9Yy5fcmVzdWx0SWQpLGMudGl0bGUmJihkLnRpdGxlPWMudGl0bGUpLGMuY2hpbGRyZW4mJihlLnJvbGU9Imdyb3VwIixlWyJhcmlhLWxhYmVsIl09Yy50ZXh0LGRlbGV0ZSBlWyJhcmlhLXNlbGVjdGVkIl0pO2Zvcih2YXIgZiBpbiBlKXt2YXIgZz1lW2ZdO2Quc2V0QXR0cmlidXRlKGYsZyl9aWYoYy5jaGlsZHJlbil7dmFyIGg9YShkKSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0cm9uZyIpO2kuY2xhc3NOYW1lPSJzZWxlY3QyLXJlc3VsdHNfX2dyb3VwIjthKGkpO3RoaXMudGVtcGxhdGUoYyxpKTtmb3IodmFyIGo9W10saz0wO2s8Yy5jaGlsZHJlbi5sZW5ndGg7aysrKXt2YXIgbD1jLmNoaWxkcmVuW2tdLG09dGhpcy5vcHRpb24obCk7ai5wdXNoKG0pfXZhciBuPWEoIjx1bD48L3VsPiIse2NsYXNzOiJzZWxlY3QyLXJlc3VsdHNfX29wdGlvbnMgc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25zLS1uZXN0ZWQifSk7bi5hcHBlbmQoaiksaC5hcHBlbmQoaSksaC5hcHBlbmQobil9ZWxzZSB0aGlzLnRlbXBsYXRlKGMsZCk7cmV0dXJuIGIuU3RvcmVEYXRhKGQsImRhdGEiLGMpLGR9LGMucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oYyxkKXt2YXIgZT10aGlzLGY9Yy5pZCsiLXJlc3VsdHMiO3RoaXMuJHJlc3VsdHMuYXR0cigiaWQiLGYpLGMub24oInJlc3VsdHM6YWxsIixmdW5jdGlvbihhKXtlLmNsZWFyKCksZS5hcHBlbmQoYS5kYXRhKSxjLmlzT3BlbigpJiYoZS5zZXRDbGFzc2VzKCksZS5oaWdobGlnaHRGaXJzdEl0ZW0oKSl9KSxjLm9uKCJyZXN1bHRzOmFwcGVuZCIsZnVuY3Rpb24oYSl7ZS5hcHBlbmQoYS5kYXRhKSxjLmlzT3BlbigpJiZlLnNldENsYXNzZXMoKX0pLGMub24oInF1ZXJ5IixmdW5jdGlvbihhKXtlLmhpZGVNZXNzYWdlcygpLGUuc2hvd0xvYWRpbmcoYSl9KSxjLm9uKCJzZWxlY3QiLGZ1bmN0aW9uKCl7Yy5pc09wZW4oKSYmKGUuc2V0Q2xhc3NlcygpLGUuaGlnaGxpZ2h0Rmlyc3RJdGVtKCkpfSksYy5vbigidW5zZWxlY3QiLGZ1bmN0aW9uKCl7Yy5pc09wZW4oKSYmKGUuc2V0Q2xhc3NlcygpLGUuaGlnaGxpZ2h0Rmlyc3RJdGVtKCkpfSksYy5vbigib3BlbiIsZnVuY3Rpb24oKXtlLiRyZXN1bHRzLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJ0cnVlIiksZS4kcmVzdWx0cy5hdHRyKCJhcmlhLWhpZGRlbiIsImZhbHNlIiksZS5zZXRDbGFzc2VzKCksZS5lbnN1cmVIaWdobGlnaHRWaXNpYmxlKCl9KSxjLm9uKCJjbG9zZSIsZnVuY3Rpb24oKXtlLiRyZXN1bHRzLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJmYWxzZSIpLGUuJHJlc3VsdHMuYXR0cigiYXJpYS1oaWRkZW4iLCJ0cnVlIiksZS4kcmVzdWx0cy5yZW1vdmVBdHRyKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiKX0pLGMub24oInJlc3VsdHM6dG9nZ2xlIixmdW5jdGlvbigpe3ZhciBhPWUuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCk7MCE9PWEubGVuZ3RoJiZhLnRyaWdnZXIoIm1vdXNldXAiKX0pLGMub24oInJlc3VsdHM6c2VsZWN0IixmdW5jdGlvbigpe3ZhciBhPWUuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCk7aWYoMCE9PWEubGVuZ3RoKXt2YXIgYz1iLkdldERhdGEoYVswXSwiZGF0YSIpOyJ0cnVlIj09YS5hdHRyKCJhcmlhLXNlbGVjdGVkIik/ZS50cmlnZ2VyKCJjbG9zZSIse30pOmUudHJpZ2dlcigic2VsZWN0Iix7ZGF0YTpjfSl9fSksYy5vbigicmVzdWx0czpwcmV2aW91cyIsZnVuY3Rpb24oKXt2YXIgYT1lLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpLGI9ZS4kcmVzdWx0cy5maW5kKCJbYXJpYS1zZWxlY3RlZF0iKSxjPWIuaW5kZXgoYSk7aWYoIShjPD0wKSl7dmFyIGQ9Yy0xOzA9PT1hLmxlbmd0aCYmKGQ9MCk7dmFyIGY9Yi5lcShkKTtmLnRyaWdnZXIoIm1vdXNlZW50ZXIiKTt2YXIgZz1lLiRyZXN1bHRzLm9mZnNldCgpLnRvcCxoPWYub2Zmc2V0KCkudG9wLGk9ZS4kcmVzdWx0cy5zY3JvbGxUb3AoKSsoaC1nKTswPT09ZD9lLiRyZXN1bHRzLnNjcm9sbFRvcCgwKTpoLWc8MCYmZS4kcmVzdWx0cy5zY3JvbGxUb3AoaSl9fSksYy5vbigicmVzdWx0czpuZXh0IixmdW5jdGlvbigpe3ZhciBhPWUuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCksYj1lLiRyZXN1bHRzLmZpbmQoIlthcmlhLXNlbGVjdGVkXSIpLGM9Yi5pbmRleChhKSxkPWMrMTtpZighKGQ+PWIubGVuZ3RoKSl7dmFyIGY9Yi5lcShkKTtmLnRyaWdnZXIoIm1vdXNlZW50ZXIiKTt2YXIgZz1lLiRyZXN1bHRzLm9mZnNldCgpLnRvcCtlLiRyZXN1bHRzLm91dGVySGVpZ2h0KCExKSxoPWYub2Zmc2V0KCkudG9wK2Yub3V0ZXJIZWlnaHQoITEpLGk9ZS4kcmVzdWx0cy5zY3JvbGxUb3AoKStoLWc7MD09PWQ/ZS4kcmVzdWx0cy5zY3JvbGxUb3AoMCk6aD5nJiZlLiRyZXN1bHRzLnNjcm9sbFRvcChpKX19KSxjLm9uKCJyZXN1bHRzOmZvY3VzIixmdW5jdGlvbihhKXthLmVsZW1lbnQuYWRkQ2xhc3MoInNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1oaWdobGlnaHRlZCIpfSksYy5vbigicmVzdWx0czptZXNzYWdlIixmdW5jdGlvbihhKXtlLmRpc3BsYXlNZXNzYWdlKGEpfSksYS5mbi5tb3VzZXdoZWVsJiZ0aGlzLiRyZXN1bHRzLm9uKCJtb3VzZXdoZWVsIixmdW5jdGlvbihhKXt2YXIgYj1lLiRyZXN1bHRzLnNjcm9sbFRvcCgpLGM9ZS4kcmVzdWx0cy5nZXQoMCkuc2Nyb2xsSGVpZ2h0LWIrYS5kZWx0YVksZD1hLmRlbHRhWT4wJiZiLWEuZGVsdGFZPD0wLGY9YS5kZWx0YVk8MCYmYzw9ZS4kcmVzdWx0cy5oZWlnaHQoKTtkPyhlLiRyZXN1bHRzLnNjcm9sbFRvcCgwKSxhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSk6ZiYmKGUuJHJlc3VsdHMuc2Nyb2xsVG9wKGUuJHJlc3VsdHMuZ2V0KDApLnNjcm9sbEhlaWdodC1lLiRyZXN1bHRzLmhlaWdodCgpKSxhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSl9KSx0aGlzLiRyZXN1bHRzLm9uKCJtb3VzZXVwIiwiLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdIixmdW5jdGlvbihjKXt2YXIgZD1hKHRoaXMpLGY9Yi5HZXREYXRhKHRoaXMsImRhdGEiKTtpZigidHJ1ZSI9PT1kLmF0dHIoImFyaWEtc2VsZWN0ZWQiKSlyZXR1cm4gdm9pZChlLm9wdGlvbnMuZ2V0KCJtdWx0aXBsZSIpP2UudHJpZ2dlcigidW5zZWxlY3QiLHtvcmlnaW5hbEV2ZW50OmMsZGF0YTpmfSk6ZS50cmlnZ2VyKCJjbG9zZSIse30pKTtlLnRyaWdnZXIoInNlbGVjdCIse29yaWdpbmFsRXZlbnQ6YyxkYXRhOmZ9KX0pLHRoaXMuJHJlc3VsdHMub24oIm1vdXNlZW50ZXIiLCIuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25bYXJpYS1zZWxlY3RlZF0iLGZ1bmN0aW9uKGMpe3ZhciBkPWIuR2V0RGF0YSh0aGlzLCJkYXRhIik7ZS5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKS5yZW1vdmVDbGFzcygic2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWhpZ2hsaWdodGVkIiksZS50cmlnZ2VyKCJyZXN1bHRzOmZvY3VzIix7ZGF0YTpkLGVsZW1lbnQ6YSh0aGlzKX0pfSl9LGMucHJvdG90eXBlLmdldEhpZ2hsaWdodGVkUmVzdWx0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZXN1bHRzLmZpbmQoIi5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0taGlnaGxpZ2h0ZWQiKX0sYy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuJHJlc3VsdHMucmVtb3ZlKCl9LGMucHJvdG90eXBlLmVuc3VyZUhpZ2hsaWdodFZpc2libGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpO2lmKDAhPT1hLmxlbmd0aCl7dmFyIGI9dGhpcy4kcmVzdWx0cy5maW5kKCJbYXJpYS1zZWxlY3RlZF0iKSxjPWIuaW5kZXgoYSksZD10aGlzLiRyZXN1bHRzLm9mZnNldCgpLnRvcCxlPWEub2Zmc2V0KCkudG9wLGY9dGhpcy4kcmVzdWx0cy5zY3JvbGxUb3AoKSsoZS1kKSxnPWUtZDtmLT0yKmEub3V0ZXJIZWlnaHQoITEpLGM8PTI/dGhpcy4kcmVzdWx0cy5zY3JvbGxUb3AoMCk6KGc+dGhpcy4kcmVzdWx0cy5vdXRlckhlaWdodCgpfHxnPDApJiZ0aGlzLiRyZXN1bHRzLnNjcm9sbFRvcChmKX19LGMucHJvdG90eXBlLnRlbXBsYXRlPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcy5vcHRpb25zLmdldCgidGVtcGxhdGVSZXN1bHQiKSxlPXRoaXMub3B0aW9ucy5nZXQoImVzY2FwZU1hcmt1cCIpLGY9ZChiLGMpO251bGw9PWY/Yy5zdHlsZS5kaXNwbGF5PSJub25lIjoic3RyaW5nIj09dHlwZW9mIGY/Yy5pbm5lckhUTUw9ZShmKTphKGMpLmFwcGVuZChmKX0sY30pLGIuZGVmaW5lKCJzZWxlY3QyL2tleXMiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue0JBQ0tTUEFDRTo4LFRBQjo5LEVOVEVSOjEzLFNISUZUOjE2LENUUkw6MTcsQUxUOjE4LEVTQzoyNyxTUEFDRTozMixQQUdFX1VQOjMzLFBBR0VfRE9XTjozNCxFTkQ6MzUsSE9NRTozNixMRUZUOjM3LFVQOjM4LFJJR0hUOjM5LERPV046NDAsREVMRVRFOjQ2fX0pLGIuZGVmaW5lKCJzZWxlY3QyL3NlbGVjdGlvbi9iYXNlIixbImpxdWVyeSIsIi4uL3V0aWxzIiwiLi4va2V5cyJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEsYil7dGhpcy4kZWxlbWVudD1hLHRoaXMub3B0aW9ucz1iLGQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyl9cmV0dXJuIGIuRXh0ZW5kKGQsYi5PYnNlcnZhYmxlKSxkLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgYz1hKCc8c3BhbiBjbGFzcz0ic2VsZWN0Mi1zZWxlY3Rpb24iIHJvbGU9ImNvbWJvYm94IiAgYXJpYS1oYXNwb3B1cD0idHJ1ZSIgYXJpYS1leHBhbmRlZD0iZmFsc2UiPjwvc3Bhbj4nKTtyZXR1cm4gdGhpcy5fdGFiaW5kZXg9MCxudWxsIT1iLkdldERhdGEodGhpcy4kZWxlbWVudFswXSwib2xkLXRhYmluZGV4Iik/dGhpcy5fdGFiaW5kZXg9Yi5HZXREYXRhKHRoaXMuJGVsZW1lbnRbMF0sIm9sZC10YWJpbmRleCIpOm51bGwhPXRoaXMuJGVsZW1lbnQuYXR0cigidGFiaW5kZXgiKSYmKHRoaXMuX3RhYmluZGV4PXRoaXMuJGVsZW1lbnQuYXR0cigidGFiaW5kZXgiKSksYy5hdHRyKCJ0aXRsZSIsdGhpcy4kZWxlbWVudC5hdHRyKCJ0aXRsZSIpKSxjLmF0dHIoInRhYmluZGV4Iix0aGlzLl90YWJpbmRleCksdGhpcy4kc2VsZWN0aW9uPWMsY30sZC5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMsZT0oYS5pZCxhLmlkKyItcmVzdWx0cyIpO3RoaXMuY29udGFpbmVyPWEsdGhpcy4kc2VsZWN0aW9uLm9uKCJmb2N1cyIsZnVuY3Rpb24oYSl7ZC50cmlnZ2VyKCJmb2N1cyIsYSl9KSx0aGlzLiRzZWxlY3Rpb24ub24oImJsdXIiLGZ1bmN0aW9uKGEpe2QuX2hhbmRsZUJsdXIoYSl9KSx0aGlzLiRzZWxlY3Rpb24ub24oImtleWRvd24iLGZ1bmN0aW9uKGEpe2QudHJpZ2dlcigia2V5cHJlc3MiLGEpLGEud2hpY2g9PT1jLlNQQUNFJiZhLnByZXZlbnREZWZhdWx0KCl9KSxhLm9uKCJyZXN1bHRzOmZvY3VzIixmdW5jdGlvbihhKXtkLiRzZWxlY3Rpb24uYXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixhLmRhdGEuX3Jlc3VsdElkKX0pLGEub24oInNlbGVjdGlvbjp1cGRhdGUiLGZ1bmN0aW9uKGEpe2QudXBkYXRlKGEuZGF0YSl9KSxhLm9uKCJvcGVuIixmdW5jdGlvbigpe2QuJHNlbGVjdGlvbi5hdHRyKCJhcmlhLWV4cGFuZGVkIiwidHJ1ZSIpLGQuJHNlbGVjdGlvbi5hdHRyKCJhcmlhLW93bnMiLGUpLGQuX2F0dGFjaENsb3NlSGFuZGxlcihhKX0pLGEub24oImNsb3NlIixmdW5jdGlvbigpe2QuJHNlbGVjdGlvbi5hdHRyKCJhcmlhLWV4cGFuZGVkIiwiZmFsc2UiKSxkLiRzZWxlY3Rpb24ucmVtb3ZlQXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50IiksZC4kc2VsZWN0aW9uLnJlbW92ZUF0dHIoImFyaWEtb3ducyIpLGQuJHNlbGVjdGlvbi5mb2N1cygpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC4kc2VsZWN0aW9uLmZvY3VzKCl9LDApLGQuX2RldGFjaENsb3NlSGFuZGxlcihhKX0pLGEub24oImVuYWJsZSIsZnVuY3Rpb24oKXtkLiRzZWxlY3Rpb24uYXR0cigidGFiaW5kZXgiLGQuX3RhYmluZGV4KX0pLGEub24oImRpc2FibGUiLGZ1bmN0aW9uKCl7ZC4kc2VsZWN0aW9uLmF0dHIoInRhYmluZGV4IiwiLTEiKX0pfSxkLnByb3RvdHlwZS5faGFuZGxlQmx1cj1mdW5jdGlvbihiKXt2YXIgYz10aGlzO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09Yy4kc2VsZWN0aW9uWzBdfHxhLmNvbnRhaW5zKGMuJHNlbGVjdGlvblswXSxkb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8Yy50cmlnZ2VyKCJibHVyIixiKX0sMSl9LGQucHJvdG90eXBlLl9hdHRhY2hDbG9zZUhhbmRsZXI9ZnVuY3Rpb24oYyl7YShkb2N1bWVudC5ib2R5KS5vbigibW91c2Vkb3duLnNlbGVjdDIuIitjLmlkLGZ1bmN0aW9uKGMpe3ZhciBkPWEoYy50YXJnZXQpLGU9ZC5jbG9zZXN0KCIuc2VsZWN0MiIpO2EoIi5zZWxlY3QyLnNlbGVjdDItY29udGFpbmVyLS1vcGVuIikuZWFjaChmdW5jdGlvbigpe2EodGhpcyksdGhpcyE9ZVswXSYmYi5HZXREYXRhKHRoaXMsImVsZW1lbnQiKS5zZWxlY3QyKCJjbG9zZSIpfSl9KX0sZC5wcm90b3R5cGUuX2RldGFjaENsb3NlSGFuZGxlcj1mdW5jdGlvbihiKXthKGRvY3VtZW50LmJvZHkpLm9mZigibW91c2Vkb3duLnNlbGVjdDIuIitiLmlkKX0sZC5wcm90b3R5cGUucG9zaXRpb249ZnVuY3Rpb24oYSxiKXtiLmZpbmQoIi5zZWxlY3Rpb24iKS5hcHBlbmQoYSl9LGQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXRhY2hDbG9zZUhhbmRsZXIodGhpcy5jb250YWluZXIpfSxkLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKCJUaGUgYHVwZGF0ZWAgbWV0aG9kIG11c3QgYmUgZGVmaW5lZCBpbiBjaGlsZCBjbGFzc2VzLiIpfSxkfSksYi5kZWZpbmUoInNlbGVjdDIvc2VsZWN0aW9uL3NpbmdsZSIsWyJqcXVlcnkiLCIuL2Jhc2UiLCIuLi91dGlscyIsIi4uL2tleXMiXSxmdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBlKCl7ZS5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBjLkV4dGVuZChlLGIpLGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBhPWUuX19zdXBlcl9fLnJlbmRlci5jYWxsKHRoaXMpO3JldHVybiBhLmFkZENsYXNzKCJzZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIiksYS5odG1sKCc8c3BhbiBjbGFzcz0ic2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIj48L3NwYW4+PHNwYW4gY2xhc3M9InNlbGVjdDItc2VsZWN0aW9uX19hcnJvdyIgcm9sZT0icHJlc2VudGF0aW9uIj48YiByb2xlPSJwcmVzZW50YXRpb24iPjwvYj48L3NwYW4+JyksYX0sZS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7ZS5fX3N1cGVyX18uYmluZC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGQ9YS5pZCsiLWNvbnRhaW5lciI7dGhpcy4kc2VsZWN0aW9uLmZpbmQoIi5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQiKS5hdHRyKCJpZCIsZCkuYXR0cigicm9sZSIsInRleHRib3giKS5hdHRyKCJhcmlhLXJlYWRvbmx5IiwidHJ1ZSIpLHRoaXMuJHNlbGVjdGlvbi5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLGQpLHRoaXMuJHNlbGVjdGlvbi5vbigibW91c2Vkb3duIixmdW5jdGlvbihhKXsxPT09YS53aGljaCYmYy50cmlnZ2VyKCJ0b2dnbGUiLHtvcmlnaW5hbEV2ZW50OmF9KX0pLHRoaXMuJHNlbGVjdGlvbi5vbigiZm9jdXMiLGZ1bmN0aW9uKGEpe30pLHRoaXMuJHNlbGVjdGlvbi5vbigiYmx1ciIsZnVuY3Rpb24oYSl7fSksYS5vbigiZm9jdXMiLGZ1bmN0aW9uKGIpe2EuaXNPcGVuKCl8fGMuJHNlbGVjdGlvbi5mb2N1cygpfSl9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kc2VsZWN0aW9uLmZpbmQoIi5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQiKTthLmVtcHR5KCksYS5yZW1vdmVBdHRyKCJ0aXRsZSIpfSxlLnByb3RvdHlwZS5kaXNwbGF5PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5vcHRpb25zLmdldCgidGVtcGxhdGVTZWxlY3Rpb24iKTtyZXR1cm4gdGhpcy5vcHRpb25zLmdldCgiZXNjYXBlTWFya3VwIikoYyhhLGIpKX0sZS5wcm90b3R5cGUuc2VsZWN0aW9uQ29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuIGEoIjxzcGFuPjwvc3Bhbj4iKX0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGEpe2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gdm9pZCB0aGlzLmNsZWFyKCk7dmFyIGI9YVswXSxjPXRoaXMuJHNlbGVjdGlvbi5maW5kKCIuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIiksZD10aGlzLmRpc3BsYXkoYixjKTtjLmVtcHR5KCkuYXBwZW5kKGQpLGMuYXR0cigidGl0bGUiLGIudGl0bGV8fGIudGV4dCl9LGV9KSxiLmRlZmluZSgic2VsZWN0Mi9zZWxlY3Rpb24vbXVsdGlwbGUiLFsianF1ZXJ5IiwiLi9iYXNlIiwiLi4vdXRpbHMiXSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhLGIpe2QuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gYy5FeHRlbmQoZCxiKSxkLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgYT1kLl9fc3VwZXJfXy5yZW5kZXIuY2FsbCh0aGlzKTtyZXR1cm4gYS5hZGRDbGFzcygic2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlIiksYS5odG1sKCc8dWwgY2xhc3M9InNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCI+PC91bD4nKSxhfSxkLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGIsZSl7dmFyIGY9dGhpcztkLl9fc3VwZXJfXy5iaW5kLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLiRzZWxlY3Rpb24ub24oImNsaWNrIixmdW5jdGlvbihhKXtmLnRyaWdnZXIoInRvZ2dsZSIse29yaWdpbmFsRXZlbnQ6YX0pfSksdGhpcy4kc2VsZWN0aW9uLm9uKCJjbGljayIsIi5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19yZW1vdmUiLGZ1bmN0aW9uKGIpe2lmKCFmLm9wdGlvbnMuZ2V0KCJkaXNhYmxlZCIpKXt2YXIgZD1hKHRoaXMpLGU9ZC5wYXJlbnQoKSxnPWMuR2V0RGF0YShlWzBdLCJkYXRhIik7Zi50cmlnZ2VyKCJ1bnNlbGVjdCIse29yaWdpbmFsRXZlbnQ6YixkYXRhOmd9KX19KX0sZC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRzZWxlY3Rpb24uZmluZCgiLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCIpO2EuZW1wdHkoKSxhLnJlbW92ZUF0dHIoInRpdGxlIil9LGQucHJvdG90eXBlLmRpc3BsYXk9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLm9wdGlvbnMuZ2V0KCJ0ZW1wbGF0ZVNlbGVjdGlvbiIpO3JldHVybiB0aGlzLm9wdGlvbnMuZ2V0KCJlc2NhcGVNYXJrdXAiKShjKGEsYikpfSxkLnByb3RvdHlwZS5zZWxlY3Rpb25Db250YWluZXI9ZnVuY3Rpb24oKXtyZXR1cm4gYSgnPGxpIGNsYXNzPSJzZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlIj48c3BhbiBjbGFzcz0ic2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZV9fcmVtb3ZlIiByb2xlPSJwcmVzZW50YXRpb24iPiZ0aW1lczs8L3NwYW4+PC9saT4nKX0sZC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGEpe2lmKHRoaXMuY2xlYXIoKSwwIT09YS5sZW5ndGgpe2Zvcih2YXIgYj1bXSxkPTA7ZDxhLmxlbmd0aDtkKyspe3ZhciBlPWFbZF0sZj10aGlzLnNlbGVjdGlvbkNvbnRhaW5lcigpLGc9dGhpcy5kaXNwbGF5KGUsZik7Zi5hcHBlbmQoZyksZi5hdHRyKCJ0aXRsZSIsZS50aXRsZXx8ZS50ZXh0KSxjLlN0b3JlRGF0YShmWzBdLCJkYXRhIixlKSxiLnB1c2goZil9dmFyIGg9dGhpcy4kc2VsZWN0aW9uLmZpbmQoIi5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQiKTtjLmFwcGVuZE1hbnkoaCxiKX19LGR9KSxiLmRlZmluZSgic2VsZWN0Mi9zZWxlY3Rpb24vcGxhY2Vob2xkZXIiLFsiLi4vdXRpbHMiXSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsYixjKXt0aGlzLnBsYWNlaG9sZGVyPXRoaXMubm9ybWFsaXplUGxhY2Vob2xkZXIoYy5nZXQoInBsYWNlaG9sZGVyIikpLGEuY2FsbCh0aGlzLGIsYyl9cmV0dXJuIGIucHJvdG90eXBlLm5vcm1hbGl6ZVBsYWNlaG9sZGVyPWZ1bmN0aW9uKGEsYil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBiJiYoYj17aWQ6IiIsdGV4dDpifSksYn0sYi5wcm90b3R5cGUuY3JlYXRlUGxhY2Vob2xkZXI9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLnNlbGVjdGlvbkNvbnRhaW5lcigpO3JldHVybiBjLmh0bWwodGhpcy5kaXNwbGF5KGIpKSxjLmFkZENsYXNzKCJzZWxlY3QyLXNlbGVjdGlvbl9fcGxhY2Vob2xkZXIiKS5yZW1vdmVDbGFzcygic2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZSIpLGN9LGIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihhLGIpe3ZhciBjPTE9PWIubGVuZ3RoJiZiWzBdLmlkIT10aGlzLnBsYWNlaG9sZGVyLmlkO2lmKGIubGVuZ3RoPjF8fGMpcmV0dXJuIGEuY2FsbCh0aGlzLGIpO3RoaXMuY2xlYXIoKTt2YXIgZD10aGlzLmNyZWF0ZVBsYWNlaG9sZGVyKHRoaXMucGxhY2Vob2xkZXIpO3RoaXMuJHNlbGVjdGlvbi5maW5kKCIuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIikuYXBwZW5kKGQpfSxifSksYi5kZWZpbmUoInNlbGVjdDIvc2VsZWN0aW9uL2FsbG93Q2xlYXIiLFsianF1ZXJ5IiwiLi4va2V5cyIsIi4uL3V0aWxzIl0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoKXt9cmV0dXJuIGQucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXM7YS5jYWxsKHRoaXMsYixjKSxudWxsPT10aGlzLnBsYWNlaG9sZGVyJiZ0aGlzLm9wdGlvbnMuZ2V0KCJkZWJ1ZyIpJiZ3aW5kb3cuY29uc29sZSYmY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcigiU2VsZWN0MjogVGhlIGBhbGxvd0NsZWFyYCBvcHRpb24gc2hvdWxkIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgYHBsYWNlaG9sZGVyYCBvcHRpb24uIiksdGhpcy4kc2VsZWN0aW9uLm9uKCJtb3VzZWRvd24iLCIuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyIixmdW5jdGlvbihhKXtkLl9oYW5kbGVDbGVhcihhKX0pLGIub24oImtleXByZXNzIixmdW5jdGlvbihhKXtkLl9oYW5kbGVLZXlib2FyZENsZWFyKGEsYil9KX0sZC5wcm90b3R5cGUuX2hhbmRsZUNsZWFyPWZ1bmN0aW9uKGEsYil7aWYoIXRoaXMub3B0aW9ucy5nZXQoImRpc2FibGVkIikpe3ZhciBkPXRoaXMuJHNlbGVjdGlvbi5maW5kKCIuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyIik7aWYoMCE9PWQubGVuZ3RoKXtiLnN0b3BQcm9wYWdhdGlvbigpO3ZhciBlPWMuR2V0RGF0YShkWzBdLCJkYXRhIiksZj10aGlzLiRlbGVtZW50LnZhbCgpO3RoaXMuJGVsZW1lbnQudmFsKHRoaXMucGxhY2Vob2xkZXIuaWQpO3ZhciBnPXtkYXRhOmV9O2lmKHRoaXMudHJpZ2dlcigiY2xlYXIiLGcpLGcucHJldmVudGVkKXJldHVybiB2b2lkIHRoaXMuJGVsZW1lbnQudmFsKGYpO2Zvcih2YXIgaD0wO2g8ZS5sZW5ndGg7aCsrKWlmKGc9e2RhdGE6ZVtoXX0sdGhpcy50cmlnZ2VyKCJ1bnNlbGVjdCIsZyksZy5wcmV2ZW50ZWQpcmV0dXJuIHZvaWQgdGhpcy4kZWxlbWVudC52YWwoZik7dGhpcy4kZWxlbWVudC50cmlnZ2VyKCJjaGFuZ2UiKSx0aGlzLnRyaWdnZXIoInRvZ2dsZSIse30pfX19LGQucHJvdG90eXBlLl9oYW5kbGVLZXlib2FyZENsZWFyPWZ1bmN0aW9uKGEsYyxkKXtkLmlzT3BlbigpfHxjLndoaWNoIT1iLkRFTEVURSYmYy53aGljaCE9Yi5CQUNLU1BBQ0V8fHRoaXMuX2hhbmRsZUNsZWFyKGMpfSxkLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oYixkKXtpZihiLmNhbGwodGhpcyxkKSwhKHRoaXMuJHNlbGVjdGlvbi5maW5kKCIuc2VsZWN0Mi1zZWxlY3Rpb25fX3BsYWNlaG9sZGVyIikubGVuZ3RoPjB8fDA9PT1kLmxlbmd0aCkpe3ZhciBlPWEoJzxzcGFuIGNsYXNzPSJzZWxlY3QyLXNlbGVjdGlvbl9fY2xlYXIiPiZ0aW1lczs8L3NwYW4+Jyk7Yy5TdG9yZURhdGEoZVswXSwiZGF0YSIsZCksdGhpcy4kc2VsZWN0aW9uLmZpbmQoIi5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQiKS5wcmVwZW5kKGUpfX0sZH0pLGIuZGVmaW5lKCJzZWxlY3QyL3NlbGVjdGlvbi9zZWFyY2giLFsianF1ZXJ5IiwiLi4vdXRpbHMiLCIuLi9rZXlzIl0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSxiLGMpe2EuY2FsbCh0aGlzLGIsYyl9cmV0dXJuIGQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihiKXt2YXIgYz1hKCc8bGkgY2xhc3M9InNlbGVjdDItc2VhcmNoIHNlbGVjdDItc2VhcmNoLS1pbmxpbmUiPjxpbnB1dCBjbGFzcz0ic2VsZWN0Mi1zZWFyY2hfX2ZpZWxkIiB0eXBlPSJzZWFyY2giIHRhYmluZGV4PSItMSIgYXV0b2NvbXBsZXRlPSJvZmYiIGF1dG9jb3JyZWN0PSJvZmYiIGF1dG9jYXBpdGFsaXplPSJub25lIiBzcGVsbGNoZWNrPSJmYWxzZSIgcm9sZT0idGV4dGJveCIgYXJpYS1hdXRvY29tcGxldGU9Imxpc3QiIC8+PC9saT4nKTt0aGlzLiRzZWFyY2hDb250YWluZXI9Yyx0aGlzLiRzZWFyY2g9Yy5maW5kKCJpbnB1dCIpO3ZhciBkPWIuY2FsbCh0aGlzKTtyZXR1cm4gdGhpcy5fdHJhbnNmZXJUYWJJbmRleCgpLGR9LGQucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oYSxkLGUpe3ZhciBmPXRoaXM7YS5jYWxsKHRoaXMsZCxlKSxkLm9uKCJvcGVuIixmdW5jdGlvbigpe2YuJHNlYXJjaC50cmlnZ2VyKCJmb2N1cyIpfSksZC5vbigiY2xvc2UiLGZ1bmN0aW9uKCl7Zi4kc2VhcmNoLnZhbCgiIiksZi4kc2VhcmNoLnJlbW92ZUF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIpLGYuJHNlYXJjaC50cmlnZ2VyKCJmb2N1cyIpfSksZC5vbigiZW5hYmxlIixmdW5jdGlvbigpe2YuJHNlYXJjaC5wcm9wKCJkaXNhYmxlZCIsITEpLGYuX3RyYW5zZmVyVGFiSW5kZXgoKX0pLGQub24oImRpc2FibGUiLGZ1bmN0aW9uKCl7Zi4kc2VhcmNoLnByb3AoImRpc2FibGVkIiwhMCl9KSxkLm9uKCJmb2N1cyIsZnVuY3Rpb24oYSl7Zi4kc2VhcmNoLnRyaWdnZXIoImZvY3VzIil9KSxkLm9uKCJyZXN1bHRzOmZvY3VzIixmdW5jdGlvbihhKXtmLiRzZWFyY2guYXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixhLmlkKX0pLHRoaXMuJHNlbGVjdGlvbi5vbigiZm9jdXNpbiIsIi5zZWxlY3QyLXNlYXJjaC0taW5saW5lIixmdW5jdGlvbihhKXtmLnRyaWdnZXIoImZvY3VzIixhKX0pLHRoaXMuJHNlbGVjdGlvbi5vbigiZm9jdXNvdXQiLCIuc2VsZWN0Mi1zZWFyY2gtLWlubGluZSIsZnVuY3Rpb24oYSl7Zi5faGFuZGxlQmx1cihhKX0pLHRoaXMuJHNlbGVjdGlvbi5vbigia2V5ZG93biIsIi5zZWxlY3QyLXNlYXJjaC0taW5saW5lIixmdW5jdGlvbihhKXtpZihhLnN0b3BQcm9wYWdhdGlvbigpLGYudHJpZ2dlcigia2V5cHJlc3MiLGEpLGYuX2tleVVwUHJldmVudGVkPWEuaXNEZWZhdWx0UHJldmVudGVkKCksYS53aGljaD09PWMuQkFDS1NQQUNFJiYiIj09PWYuJHNlYXJjaC52YWwoKSl7dmFyIGQ9Zi4kc2VhcmNoQ29udGFpbmVyLnByZXYoIi5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlIik7aWYoZC5sZW5ndGg+MCl7dmFyIGU9Yi5HZXREYXRhKGRbMF0sImRhdGEiKTtmLnNlYXJjaFJlbW92ZUNob2ljZShlKSxhLnByZXZlbnREZWZhdWx0KCl9fX0pO3ZhciBnPWRvY3VtZW50LmRvY3VtZW50TW9kZSxoPWcmJmc8PTExO3RoaXMuJHNlbGVjdGlvbi5vbigiaW5wdXQuc2VhcmNoY2hlY2siLCIuc2VsZWN0Mi1zZWFyY2gtLWlubGluZSIsZnVuY3Rpb24oYSl7aWYoaClyZXR1cm4gdm9pZCBmLiRzZWxlY3Rpb24ub2ZmKCJpbnB1dC5zZWFyY2ggaW5wdXQuc2VhcmNoY2hlY2siKTtmLiRzZWxlY3Rpb24ub2ZmKCJrZXl1cC5zZWFyY2giKX0pLHRoaXMuJHNlbGVjdGlvbi5vbigia2V5dXAuc2VhcmNoIGlucHV0LnNlYXJjaCIsIi5zZWxlY3QyLXNlYXJjaC0taW5saW5lIixmdW5jdGlvbihhKXtpZihoJiYiaW5wdXQiPT09YS50eXBlKXJldHVybiB2b2lkIGYuJHNlbGVjdGlvbi5vZmYoImlucHV0LnNlYXJjaCBpbnB1dC5zZWFyY2hjaGVjayIpO3ZhciBiPWEud2hpY2g7YiE9Yy5TSElGVCYmYiE9Yy5DVFJMJiZiIT1jLkFMVCYmYiE9Yy5UQUImJmYuaGFuZGxlU2VhcmNoKGEpfSl9LGQucHJvdG90eXBlLl90cmFuc2ZlclRhYkluZGV4PWZ1bmN0aW9uKGEpe3RoaXMuJHNlYXJjaC5hdHRyKCJ0YWJpbmRleCIsdGhpcy4kc2VsZWN0aW9uLmF0dHIoInRhYmluZGV4IikpLHRoaXMuJHNlbGVjdGlvbi5hdHRyKCJ0YWJpbmRleCIsIi0xIil9LGQucHJvdG90eXBlLmNyZWF0ZVBsYWNlaG9sZGVyPWZ1bmN0aW9uKGEsYil7dGhpcy4kc2VhcmNoLmF0dHIoInBsYWNlaG9sZGVyIixiLnRleHQpfSxkLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLiRzZWFyY2hbMF09PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aWYodGhpcy4kc2VhcmNoLmF0dHIoInBsYWNlaG9sZGVyIiwiIiksYS5jYWxsKHRoaXMsYiksdGhpcy4kc2VsZWN0aW9uLmZpbmQoIi5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQiKS5hcHBlbmQodGhpcy4kc2VhcmNoQ29udGFpbmVyKSx0aGlzLnJlc2l6ZVNlYXJjaCgpLGMpe3RoaXMuJGVsZW1lbnQuZmluZCgiW2RhdGEtc2VsZWN0Mi10YWddIikubGVuZ3RoP3RoaXMuJGVsZW1lbnQuZm9jdXMoKTp0aGlzLiRzZWFyY2guZm9jdXMoKX19LGQucHJvdG90eXBlLmhhbmRsZVNlYXJjaD1mdW5jdGlvbigpe2lmKHRoaXMucmVzaXplU2VhcmNoKCksIXRoaXMuX2tleVVwUHJldmVudGVkKXt2YXIgYT10aGlzLiRzZWFyY2gudmFsKCk7dGhpcy50cmlnZ2VyKCJxdWVyeSIse3Rlcm06YX0pfXRoaXMuX2tleVVwUHJldmVudGVkPSExfSxkLnByb3RvdHlwZS5zZWFyY2hSZW1vdmVDaG9pY2U9ZnVuY3Rpb24oYSxiKXt0aGlzLnRyaWdnZXIoInVuc2VsZWN0Iix7ZGF0YTpifSksdGhpcy4kc2VhcmNoLnZhbChiLnRleHQpLHRoaXMuaGFuZGxlU2VhcmNoKCl9LGQucHJvdG90eXBlLnJlc2l6ZVNlYXJjaD1mdW5jdGlvbigpe3RoaXMuJHNlYXJjaC5jc3MoIndpZHRoIiwiMjVweCIpO3ZhciBhPSIiO2lmKCIiIT09dGhpcy4kc2VhcmNoLmF0dHIoInBsYWNlaG9sZGVyIikpYT10aGlzLiRzZWxlY3Rpb24uZmluZCgiLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCIpLmlubmVyV2lkdGgoKTtlbHNle2E9Ljc1Kih0aGlzLiRzZWFyY2gudmFsKCkubGVuZ3RoKzEpKyJlbSJ9dGhpcy4kc2VhcmNoLmNzcygid2lkdGgiLGEpfSxkfSksYi5kZWZpbmUoInNlbGVjdDIvc2VsZWN0aW9uL2V2ZW50UmVsYXkiLFsianF1ZXJ5Il0sZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe31yZXR1cm4gYi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihiLGMsZCl7dmFyIGU9dGhpcyxmPVsib3BlbiIsIm9wZW5pbmciLCJjbG9zZSIsImNsb3NpbmciLCJzZWxlY3QiLCJzZWxlY3RpbmciLCJ1bnNlbGVjdCIsInVuc2VsZWN0aW5nIiwiY2xlYXIiLCJjbGVhcmluZyJdLGc9WyJvcGVuaW5nIiwiY2xvc2luZyIsInNlbGVjdGluZyIsInVuc2VsZWN0aW5nIiwiY2xlYXJpbmciXTtiLmNhbGwodGhpcyxjLGQpLGMub24oIioiLGZ1bmN0aW9uKGIsYyl7aWYoLTEhPT1hLmluQXJyYXkoYixmKSl7Yz1jfHx7fTt2YXIgZD1hLkV2ZW50KCJzZWxlY3QyOiIrYix7cGFyYW1zOmN9KTtlLiRlbGVtZW50LnRyaWdnZXIoZCksLTEhPT1hLmluQXJyYXkoYixnKSYmKGMucHJldmVudGVkPWQuaXNEZWZhdWx0UHJldmVudGVkKCkpfX0pfSxifSksYi5kZWZpbmUoInNlbGVjdDIvdHJhbnNsYXRpb24iLFsianF1ZXJ5IiwicmVxdWlyZSJdLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXt0aGlzLmRpY3Q9YXx8e319cmV0dXJuIGMucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpY3R9LGMucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kaWN0W2FdfSxjLnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24oYil7dGhpcy5kaWN0PWEuZXh0ZW5kKHt9LGIuYWxsKCksdGhpcy5kaWN0KX0sYy5fY2FjaGU9e30sYy5sb2FkUGF0aD1mdW5jdGlvbihhKXtpZighKGEgaW4gYy5fY2FjaGUpKXt2YXIgZD1iKGEpO2MuX2NhY2hlW2FdPWR9cmV0dXJuIG5ldyBjKGMuX2NhY2hlW2FdKX0sY30pLGIuZGVmaW5lKCJzZWxlY3QyL2RpYWNyaXRpY3MiLFtdLGZ1bmN0aW9uKCl7cmV0dXJueyLikrYiOiJBIiwi77yhIjoiQSIsIsOAIjoiQSIsIsOBIjoiQSIsIsOCIjoiQSIsIuG6piI6IkEiLCLhuqQiOiJBIiwi4bqqIjoiQSIsIuG6qCI6IkEiLCLDgyI6IkEiLCLEgCI6IkEiLCLEgiI6IkEiLCLhurAiOiJBIiwi4bquIjoiQSIsIuG6tCI6IkEiLCLhurIiOiJBIiwiyKYiOiJBIiwix6AiOiJBIiwiw4QiOiJBIiwix54iOiJBIiwi4bqiIjoiQSIsIsOFIjoiQSIsIse6IjoiQSIsIseNIjoiQSIsIsiAIjoiQSIsIsiCIjoiQSIsIuG6oCI6IkEiLCLhuqwiOiJBIiwi4bq2IjoiQSIsIuG4gCI6IkEiLCLEhCI6IkEiLCLIuiI6IkEiLCLisa8iOiJBIiwi6pyyIjoiQUEiLCLDhiI6IkFFIiwix7wiOiJBRSIsIseiIjoiQUUiLCLqnLQiOiJBTyIsIuqctiI6IkFVIiwi6py4IjoiQVYiLCLqnLoiOiJBViIsIuqcvCI6IkFZIiwi4pK3IjoiQiIsIu+8oiI6IkIiLCLhuIIiOiJCIiwi4biEIjoiQiIsIuG4hiI6IkIiLCLJgyI6IkIiLCLGgiI6IkIiLCLGgSI6IkIiLCLikrgiOiJDIiwi77yjIjoiQyIsIsSGIjoiQyIsIsSIIjoiQyIsIsSKIjoiQyIsIsSMIjoiQyIsIsOHIjoiQyIsIuG4iCI6IkMiLCLGhyI6IkMiLCLIuyI6IkMiLCLqnL4iOiJDIiwi4pK5IjoiRCIsIu+8pCI6IkQiLCLhuIoiOiJEIiwixI4iOiJEIiwi4biMIjoiRCIsIuG4kCI6IkQiLCLhuJIiOiJEIiwi4biOIjoiRCIsIsSQIjoiRCIsIsaLIjoiRCIsIsaKIjoiRCIsIsaJIjoiRCIsIuqduSI6IkQiLCLHsSI6IkRaIiwix4QiOiJEWiIsIseyIjoiRHoiLCLHhSI6IkR6Iiwi4pK6IjoiRSIsIu+8pSI6IkUiLCLDiCI6IkUiLCLDiSI6IkUiLCLDiiI6IkUiLCLhu4AiOiJFIiwi4bq+IjoiRSIsIuG7hCI6IkUiLCLhu4IiOiJFIiwi4bq8IjoiRSIsIsSSIjoiRSIsIuG4lCI6IkUiLCLhuJYiOiJFIiwixJQiOiJFIiwixJYiOiJFIiwiw4siOiJFIiwi4bq6IjoiRSIsIsSaIjoiRSIsIsiEIjoiRSIsIsiGIjoiRSIsIuG6uCI6IkUiLCLhu4YiOiJFIiwiyKgiOiJFIiwi4bicIjoiRSIsIsSYIjoiRSIsIuG4mCI6IkUiLCLhuJoiOiJFIiwixpAiOiJFIiwixo4iOiJFIiwi4pK7IjoiRiIsIu+8piI6IkYiLCLhuJ4iOiJGIiwixpEiOiJGIiwi6p27IjoiRiIsIuKSvCI6IkciLCLvvKciOiJHIiwix7QiOiJHIiwixJwiOiJHIiwi4bigIjoiRyIsIsSeIjoiRyIsIsSgIjoiRyIsIsemIjoiRyIsIsSiIjoiRyIsIsekIjoiRyIsIsaTIjoiRyIsIuqeoCI6IkciLCLqnb0iOiJHIiwi6p2+IjoiRyIsIuKSvSI6IkgiLCLvvKgiOiJIIiwixKQiOiJIIiwi4biiIjoiSCIsIuG4piI6IkgiLCLIniI6IkgiLCLhuKQiOiJIIiwi4bioIjoiSCIsIuG4qiI6IkgiLCLEpiI6IkgiLCLisaciOiJIIiwi4rG1IjoiSCIsIuqejSI6IkgiLCLikr4iOiJJIiwi77ypIjoiSSIsIsOMIjoiSSIsIsONIjoiSSIsIsOOIjoiSSIsIsSoIjoiSSIsIsSqIjoiSSIsIsSsIjoiSSIsIsSwIjoiSSIsIsOPIjoiSSIsIuG4riI6IkkiLCLhu4giOiJJIiwix48iOiJJIiwiyIgiOiJJIiwiyIoiOiJJIiwi4buKIjoiSSIsIsSuIjoiSSIsIuG4rCI6IkkiLCLGlyI6IkkiLCLikr8iOiJKIiwi77yqIjoiSiIsIsS0IjoiSiIsIsmIIjoiSiIsIuKTgCI6IksiLCLvvKsiOiJLIiwi4biwIjoiSyIsIseoIjoiSyIsIuG4siI6IksiLCLEtiI6IksiLCLhuLQiOiJLIiwixpgiOiJLIiwi4rGpIjoiSyIsIuqdgCI6IksiLCLqnYIiOiJLIiwi6p2EIjoiSyIsIuqeoiI6IksiLCLik4EiOiJMIiwi77ysIjoiTCIsIsS/IjoiTCIsIsS5IjoiTCIsIsS9IjoiTCIsIuG4tiI6IkwiLCLhuLgiOiJMIiwixLsiOiJMIiwi4bi8IjoiTCIsIuG4uiI6IkwiLCLFgSI6IkwiLCLIvSI6IkwiLCLisaIiOiJMIiwi4rGgIjoiTCIsIuqdiCI6IkwiLCLqnYYiOiJMIiwi6p6AIjoiTCIsIseHIjoiTEoiLCLHiCI6IkxqIiwi4pOCIjoiTSIsIu+8rSI6Ik0iLCLhuL4iOiJNIiwi4bmAIjoiTSIsIuG5giI6Ik0iLCLisa4iOiJNIiwixpwiOiJNIiwi4pODIjoiTiIsIu+8riI6Ik4iLCLHuCI6Ik4iLCLFgyI6Ik4iLCLDkSI6Ik4iLCLhuYQiOiJOIiwixYciOiJOIiwi4bmGIjoiTiIsIsWFIjoiTiIsIuG5iiI6Ik4iLCLhuYgiOiJOIiwiyKAiOiJOIiwixp0iOiJOIiwi6p6QIjoiTiIsIuqepCI6Ik4iLCLHiiI6Ik5KIiwix4siOiJOaiIsIuKThCI6Ik8iLCLvvK8iOiJPIiwiw5IiOiJPIiwiw5MiOiJPIiwiw5QiOiJPIiwi4buSIjoiTyIsIuG7kCI6Ik8iLCLhu5YiOiJPIiwi4buUIjoiTyIsIsOVIjoiTyIsIuG5jCI6Ik8iLCLIrCI6Ik8iLCLhuY4iOiJPIiwixYwiOiJPIiwi4bmQIjoiTyIsIuG5kiI6Ik8iLCLFjiI6Ik8iLCLIriI6Ik8iLCLIsCI6Ik8iLCLDliI6Ik8iLCLIqiI6Ik8iLCLhu44iOiJPIiwixZAiOiJPIiwix5EiOiJPIiwiyIwiOiJPIiwiyI4iOiJPIiwixqAiOiJPIiwi4bucIjoiTyIsIuG7miI6Ik8iLCLhu6AiOiJPIiwi4bueIjoiTyIsIuG7oiI6Ik8iLCLhu4wiOiJPIiwi4buYIjoiTyIsIseqIjoiTyIsIsesIjoiTyIsIsOYIjoiTyIsIse+IjoiTyIsIsaGIjoiTyIsIsafIjoiTyIsIuqdiiI6Ik8iLCLqnYwiOiJPIiwixqIiOiJPSSIsIuqdjiI6Ik9PIiwiyKIiOiJPVSIsIuKThSI6IlAiLCLvvLAiOiJQIiwi4bmUIjoiUCIsIuG5liI6IlAiLCLGpCI6IlAiLCLisaMiOiJQIiwi6p2QIjoiUCIsIuqdkiI6IlAiLCLqnZQiOiJQIiwi4pOGIjoiUSIsIu+8sSI6IlEiLCLqnZYiOiJRIiwi6p2YIjoiUSIsIsmKIjoiUSIsIuKThyI6IlIiLCLvvLIiOiJSIiwixZQiOiJSIiwi4bmYIjoiUiIsIsWYIjoiUiIsIsiQIjoiUiIsIsiSIjoiUiIsIuG5miI6IlIiLCLhuZwiOiJSIiwixZYiOiJSIiwi4bmeIjoiUiIsIsmMIjoiUiIsIuKxpCI6IlIiLCLqnZoiOiJSIiwi6p6mIjoiUiIsIuqegiI6IlIiLCLik4giOiJTIiwi77yzIjoiUyIsIuG6niI6IlMiLCLFmiI6IlMiLCLhuaQiOiJTIiwixZwiOiJTIiwi4bmgIjoiUyIsIsWgIjoiUyIsIuG5piI6IlMiLCLhuaIiOiJTIiwi4bmoIjoiUyIsIsiYIjoiUyIsIsWeIjoiUyIsIuKxviI6IlMiLCLqnqgiOiJTIiwi6p6EIjoiUyIsIuKTiSI6IlQiLCLvvLQiOiJUIiwi4bmqIjoiVCIsIsWkIjoiVCIsIuG5rCI6IlQiLCLImiI6IlQiLCLFoiI6IlQiLCLhubAiOiJUIiwi4bmuIjoiVCIsIsWmIjoiVCIsIsasIjoiVCIsIsauIjoiVCIsIsi+IjoiVCIsIuqehiI6IlQiLCLqnKgiOiJUWiIsIuKTiiI6IlUiLCLvvLUiOiJVIiwiw5kiOiJVIiwiw5oiOiJVIiwiw5siOiJVIiwixagiOiJVIiwi4bm4IjoiVSIsIsWqIjoiVSIsIuG5uiI6IlUiLCLFrCI6IlUiLCLDnCI6IlUiLCLHmyI6IlUiLCLHlyI6IlUiLCLHlSI6IlUiLCLHmSI6IlUiLCLhu6YiOiJVIiwixa4iOiJVIiwixbAiOiJVIiwix5MiOiJVIiwiyJQiOiJVIiwiyJYiOiJVIiwixq8iOiJVIiwi4buqIjoiVSIsIuG7qCI6IlUiLCLhu64iOiJVIiwi4busIjoiVSIsIuG7sCI6IlUiLCLhu6QiOiJVIiwi4bmyIjoiVSIsIsWyIjoiVSIsIuG5tiI6IlUiLCLhubQiOiJVIiwiyYQiOiJVIiwi4pOLIjoiViIsIu+8tiI6IlYiLCLhubwiOiJWIiwi4bm+IjoiViIsIsayIjoiViIsIuqdniI6IlYiLCLJhSI6IlYiLCLqnaAiOiJWWSIsIuKTjCI6IlciLCLvvLciOiJXIiwi4bqAIjoiVyIsIuG6giI6IlciLCLFtCI6IlciLCLhuoYiOiJXIiwi4bqEIjoiVyIsIuG6iCI6IlciLCLisbIiOiJXIiwi4pONIjoiWCIsIu+8uCI6IlgiLCLhuooiOiJYIiwi4bqMIjoiWCIsIuKTjiI6IlkiLCLvvLkiOiJZIiwi4buyIjoiWSIsIsOdIjoiWSIsIsW2IjoiWSIsIuG7uCI6IlkiLCLIsiI6IlkiLCLhuo4iOiJZIiwixbgiOiJZIiwi4bu2IjoiWSIsIuG7tCI6IlkiLCLGsyI6IlkiLCLJjiI6IlkiLCLhu74iOiJZIiwi4pOPIjoiWiIsIu+8uiI6IloiLCLFuSI6IloiLCLhupAiOiJaIiwixbsiOiJaIiwixb0iOiJaIiwi4bqSIjoiWiIsIuG6lCI6IloiLCLGtSI6IloiLCLIpCI6IloiLCLisb8iOiJaIiwi4rGrIjoiWiIsIuqdoiI6IloiLCLik5AiOiJhIiwi772BIjoiYSIsIuG6miI6ImEiLCLDoCI6ImEiLCLDoSI6ImEiLCLDoiI6ImEiLCLhuqciOiJhIiwi4bqlIjoiYSIsIuG6qyI6ImEiLCLhuqkiOiJhIiwiw6MiOiJhIiwixIEiOiJhIiwixIMiOiJhIiwi4bqxIjoiYSIsIuG6ryI6ImEiLCLhurUiOiJhIiwi4bqzIjoiYSIsIsinIjoiYSIsIsehIjoiYSIsIsOkIjoiYSIsIsefIjoiYSIsIuG6oyI6ImEiLCLDpSI6ImEiLCLHuyI6ImEiLCLHjiI6ImEiLCLIgSI6ImEiLCLIgyI6ImEiLCLhuqEiOiJhIiwi4bqtIjoiYSIsIuG6tyI6ImEiLCLhuIEiOiJhIiwixIUiOiJhIiwi4rGlIjoiYSIsIsmQIjoiYSIsIuqcsyI6ImFhIiwiw6YiOiJhZSIsIse9IjoiYWUiLCLHoyI6ImFlIiwi6py1IjoiYW8iLCLqnLciOiJhdSIsIuqcuSI6ImF2Iiwi6py7IjoiYXYiLCLqnL0iOiJheSIsIuKTkSI6ImIiLCLvvYIiOiJiIiwi4biDIjoiYiIsIuG4hSI6ImIiLCLhuIciOiJiIiwixoAiOiJiIiwixoMiOiJiIiwiyZMiOiJiIiwi4pOSIjoiYyIsIu+9gyI6ImMiLCLEhyI6ImMiLCLEiSI6ImMiLCLEiyI6ImMiLCLEjSI6ImMiLCLDpyI6ImMiLCLhuIkiOiJjIiwixogiOiJjIiwiyLwiOiJjIiwi6py/IjoiYyIsIuKGhCI6ImMiLCLik5MiOiJkIiwi772EIjoiZCIsIuG4iyI6ImQiLCLEjyI6ImQiLCLhuI0iOiJkIiwi4biRIjoiZCIsIuG4kyI6ImQiLCLhuI8iOiJkIiwixJEiOiJkIiwixowiOiJkIiwiyZYiOiJkIiwiyZciOiJkIiwi6p26IjoiZCIsIsezIjoiZHoiLCLHhiI6ImR6Iiwi4pOUIjoiZSIsIu+9hSI6ImUiLCLDqCI6ImUiLCLDqSI6ImUiLCLDqiI6ImUiLCLhu4EiOiJlIiwi4bq/IjoiZSIsIuG7hSI6ImUiLCLhu4MiOiJlIiwi4bq9IjoiZSIsIsSTIjoiZSIsIuG4lSI6ImUiLCLhuJciOiJlIiwixJUiOiJlIiwixJciOiJlIiwiw6siOiJlIiwi4bq7IjoiZSIsIsSbIjoiZSIsIsiFIjoiZSIsIsiHIjoiZSIsIuG6uSI6ImUiLCLhu4ciOiJlIiwiyKkiOiJlIiwi4bidIjoiZSIsIsSZIjoiZSIsIuG4mSI6ImUiLCLhuJsiOiJlIiwiyYciOiJlIiwiyZsiOiJlIiwix50iOiJlIiwi4pOVIjoiZiIsIu+9hiI6ImYiLCLhuJ8iOiJmIiwixpIiOiJmIiwi6p28IjoiZiIsIuKTliI6ImciLCLvvYciOiJnIiwix7UiOiJnIiwixJ0iOiJnIiwi4bihIjoiZyIsIsSfIjoiZyIsIsShIjoiZyIsIsenIjoiZyIsIsSjIjoiZyIsIselIjoiZyIsIsmgIjoiZyIsIuqeoSI6ImciLCLhtbkiOiJnIiwi6p2/IjoiZyIsIuKTlyI6ImgiLCLvvYgiOiJoIiwixKUiOiJoIiwi4bijIjoiaCIsIuG4pyI6ImgiLCLInyI6ImgiLCLhuKUiOiJoIiwi4bipIjoiaCIsIuG4qyI6ImgiLCLhupYiOiJoIiwixKciOiJoIiwi4rGoIjoiaCIsIuKxtiI6ImgiLCLJpSI6ImgiLCLGlSI6Imh2Iiwi4pOYIjoiaSIsIu+9iSI6ImkiLCLDrCI6ImkiLCLDrSI6ImkiLCLDriI6ImkiLCLEqSI6ImkiLCLEqyI6ImkiLCLErSI6ImkiLCLDryI6ImkiLCLhuK8iOiJpIiwi4buJIjoiaSIsIseQIjoiaSIsIsiJIjoiaSIsIsiLIjoiaSIsIuG7iyI6ImkiLCLEryI6ImkiLCLhuK0iOiJpIiwiyagiOiJpIiwixLEiOiJpIiwi4pOZIjoiaiIsIu+9iiI6ImoiLCLEtSI6ImoiLCLHsCI6ImoiLCLJiSI6ImoiLCLik5oiOiJrIiwi772LIjoiayIsIuG4sSI6ImsiLCLHqSI6ImsiLCLhuLMiOiJrIiwixLciOiJrIiwi4bi1IjoiayIsIsaZIjoiayIsIuKxqiI6ImsiLCLqnYEiOiJrIiwi6p2DIjoiayIsIuqdhSI6ImsiLCLqnqMiOiJrIiwi4pObIjoibCIsIu+9jCI6ImwiLCLFgCI6ImwiLCLEuiI6ImwiLCLEviI6ImwiLCLhuLciOiJsIiwi4bi5IjoibCIsIsS8IjoibCIsIuG4vSI6ImwiLCLhuLsiOiJsIiwixb8iOiJsIiwixYIiOiJsIiwixpoiOiJsIiwiyasiOiJsIiwi4rGhIjoibCIsIuqdiSI6ImwiLCLqnoEiOiJsIiwi6p2HIjoibCIsIseJIjoibGoiLCLik5wiOiJtIiwi772NIjoibSIsIuG4vyI6Im0iLCLhuYEiOiJtIiwi4bmDIjoibSIsIsmxIjoibSIsIsmvIjoibSIsIuKTnSI6Im4iLCLvvY4iOiJuIiwix7kiOiJuIiwixYQiOiJuIiwiw7EiOiJuIiwi4bmFIjoibiIsIsWIIjoibiIsIuG5hyI6Im4iLCLFhiI6Im4iLCLhuYsiOiJuIiwi4bmJIjoibiIsIsaeIjoibiIsIsmyIjoibiIsIsWJIjoibiIsIuqekSI6Im4iLCLqnqUiOiJuIiwix4wiOiJuaiIsIuKTniI6Im8iLCLvvY8iOiJvIiwiw7IiOiJvIiwiw7MiOiJvIiwiw7QiOiJvIiwi4buTIjoibyIsIuG7kSI6Im8iLCLhu5ciOiJvIiwi4buVIjoibyIsIsO1IjoibyIsIuG5jSI6Im8iLCLIrSI6Im8iLCLhuY8iOiJvIiwixY0iOiJvIiwi4bmRIjoibyIsIuG5kyI6Im8iLCLFjyI6Im8iLCLIryI6Im8iLCLIsSI6Im8iLCLDtiI6Im8iLCLIqyI6Im8iLCLhu48iOiJvIiwixZEiOiJvIiwix5IiOiJvIiwiyI0iOiJvIiwiyI8iOiJvIiwixqEiOiJvIiwi4budIjoibyIsIuG7myI6Im8iLCLhu6EiOiJvIiwi4bufIjoibyIsIuG7oyI6Im8iLCLhu40iOiJvIiwi4buZIjoibyIsIserIjoibyIsIsetIjoibyIsIsO4IjoibyIsIse/IjoibyIsIsmUIjoibyIsIuqdiyI6Im8iLCLqnY0iOiJvIiwiybUiOiJvIiwixqMiOiJvaSIsIsijIjoib3UiLCLqnY8iOiJvbyIsIuKTnyI6InAiLCLvvZAiOiJwIiwi4bmVIjoicCIsIuG5lyI6InAiLCLGpSI6InAiLCLhtb0iOiJwIiwi6p2RIjoicCIsIuqdkyI6InAiLCLqnZUiOiJwIiwi4pOgIjoicSIsIu+9kSI6InEiLCLJiyI6InEiLCLqnZciOiJxIiwi6p2ZIjoicSIsIuKToSI6InIiLCLvvZIiOiJyIiwixZUiOiJyIiwi4bmZIjoiciIsIsWZIjoiciIsIsiRIjoiciIsIsiTIjoiciIsIuG5myI6InIiLCLhuZ0iOiJyIiwixZciOiJyIiwi4bmfIjoiciIsIsmNIjoiciIsIsm9IjoiciIsIuqdmyI6InIiLCLqnqciOiJyIiwi6p6DIjoiciIsIuKToiI6InMiLCLvvZMiOiJzIiwiw58iOiJzIiwixZsiOiJzIiwi4bmlIjoicyIsIsWdIjoicyIsIuG5oSI6InMiLCLFoSI6InMiLCLhuaciOiJzIiwi4bmjIjoicyIsIuG5qSI6InMiLCLImSI6InMiLCLFnyI6InMiLCLIvyI6InMiLCLqnqkiOiJzIiwi6p6FIjoicyIsIuG6myI6InMiLCLik6MiOiJ0Iiwi772UIjoidCIsIuG5qyI6InQiLCLhupciOiJ0IiwixaUiOiJ0Iiwi4bmtIjoidCIsIsibIjoidCIsIsWjIjoidCIsIuG5sSI6InQiLCLhua8iOiJ0IiwixaciOiJ0Iiwixq0iOiJ0IiwiyogiOiJ0Iiwi4rGmIjoidCIsIuqehyI6InQiLCLqnKkiOiJ0eiIsIuKTpCI6InUiLCLvvZUiOiJ1Iiwiw7kiOiJ1Iiwiw7oiOiJ1Iiwiw7siOiJ1IiwixakiOiJ1Iiwi4bm5IjoidSIsIsWrIjoidSIsIuG5uyI6InUiLCLFrSI6InUiLCLDvCI6InUiLCLHnCI6InUiLCLHmCI6InUiLCLHliI6InUiLCLHmiI6InUiLCLhu6ciOiJ1Iiwixa8iOiJ1IiwixbEiOiJ1Iiwix5QiOiJ1IiwiyJUiOiJ1IiwiyJciOiJ1IiwixrAiOiJ1Iiwi4burIjoidSIsIuG7qSI6InUiLCLhu68iOiJ1Iiwi4butIjoidSIsIuG7sSI6InUiLCLhu6UiOiJ1Iiwi4bmzIjoidSIsIsWzIjoidSIsIuG5tyI6InUiLCLhubUiOiJ1IiwiyokiOiJ1Iiwi4pOlIjoidiIsIu+9liI6InYiLCLhub0iOiJ2Iiwi4bm/IjoidiIsIsqLIjoidiIsIuqdnyI6InYiLCLKjCI6InYiLCLqnaEiOiJ2eSIsIuKTpiI6InciLCLvvZciOiJ3Iiwi4bqBIjoidyIsIuG6gyI6InciLCLFtSI6InciLCLhuociOiJ3Iiwi4bqFIjoidyIsIuG6mCI6InciLCLhuokiOiJ3Iiwi4rGzIjoidyIsIuKTpyI6IngiLCLvvZgiOiJ4Iiwi4bqLIjoieCIsIuG6jSI6IngiLCLik6giOiJ5Iiwi772ZIjoieSIsIuG7syI6InkiLCLDvSI6InkiLCLFtyI6InkiLCLhu7kiOiJ5IiwiyLMiOiJ5Iiwi4bqPIjoieSIsIsO/IjoieSIsIuG7tyI6InkiLCLhupkiOiJ5Iiwi4bu1IjoieSIsIsa0IjoieSIsIsmPIjoieSIsIuG7vyI6InkiLCLik6kiOiJ6Iiwi772aIjoieiIsIsW6IjoieiIsIuG6kSI6InoiLCLFvCI6InoiLCLFviI6InoiLCLhupMiOiJ6Iiwi4bqVIjoieiIsIsa2IjoieiIsIsilIjoieiIsIsmAIjoieiIsIuKxrCI6InoiLCLqnaMiOiJ6IiwizoYiOiLOkSIsIs6IIjoizpUiLCLOiSI6Is6XIiwizooiOiLOmSIsIs6qIjoizpkiLCLOjCI6Is6fIiwizo4iOiLOpSIsIs6rIjoizqUiLCLOjyI6Is6pIiwizqwiOiLOsSIsIs6tIjoizrUiLCLOriI6Is63Iiwizq8iOiLOuSIsIs+KIjoizrkiLCLOkCI6Is65Iiwiz4wiOiLOvyIsIs+NIjoiz4UiLCLPiyI6Is+FIiwizrAiOiLPhSIsIs+JIjoiz4kiLCLPgiI6Is+DIn19KSxiLmRlZmluZSgic2VsZWN0Mi9kYXRhL2Jhc2UiLFsiLi4vdXRpbHMiXSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsYyl7Yi5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzKX1yZXR1cm4gYS5FeHRlbmQoYixhLk9ic2VydmFibGUpLGIucHJvdG90eXBlLmN1cnJlbnQ9ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKCJUaGUgYGN1cnJlbnRgIG1ldGhvZCBtdXN0IGJlIGRlZmluZWQgaW4gY2hpbGQgY2xhc3Nlcy4iKX0sYi5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24oYSxiKXt0aHJvdyBuZXcgRXJyb3IoIlRoZSBgcXVlcnlgIG1ldGhvZCBtdXN0IGJlIGRlZmluZWQgaW4gY2hpbGQgY2xhc3Nlcy4iKX0sYi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihhLGIpe30sYi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe30sYi5wcm90b3R5cGUuZ2VuZXJhdGVSZXN1bHRJZD1mdW5jdGlvbihiLGMpe3ZhciBkPWIuaWQrIi1yZXN1bHQtIjtyZXR1cm4gZCs9YS5nZW5lcmF0ZUNoYXJzKDQpLG51bGwhPWMuaWQ/ZCs9Ii0iK2MuaWQudG9TdHJpbmcoKTpkKz0iLSIrYS5nZW5lcmF0ZUNoYXJzKDQpLGR9LGJ9KSxiLmRlZmluZSgic2VsZWN0Mi9kYXRhL3NlbGVjdCIsWyIuL2Jhc2UiLCIuLi91dGlscyIsImpxdWVyeSJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEsYil7dGhpcy4kZWxlbWVudD1hLHRoaXMub3B0aW9ucz1iLGQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyl9cmV0dXJuIGIuRXh0ZW5kKGQsYSksZC5wcm90b3R5cGUuY3VycmVudD1mdW5jdGlvbihhKXt2YXIgYj1bXSxkPXRoaXM7dGhpcy4kZWxlbWVudC5maW5kKCI6c2VsZWN0ZWQiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGE9Yyh0aGlzKSxlPWQuaXRlbShhKTtiLnB1c2goZSl9KSxhKGIpfSxkLnByb3RvdHlwZS5zZWxlY3Q9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZihhLnNlbGVjdGVkPSEwLGMoYS5lbGVtZW50KS5pcygib3B0aW9uIikpcmV0dXJuIGEuZWxlbWVudC5zZWxlY3RlZD0hMCx2b2lkIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigiY2hhbmdlIik7aWYodGhpcy4kZWxlbWVudC5wcm9wKCJtdWx0aXBsZSIpKXRoaXMuY3VycmVudChmdW5jdGlvbihkKXt2YXIgZT1bXTthPVthXSxhLnB1c2guYXBwbHkoYSxkKTtmb3IodmFyIGY9MDtmPGEubGVuZ3RoO2YrKyl7dmFyIGc9YVtmXS5pZDstMT09PWMuaW5BcnJheShnLGUpJiZlLnB1c2goZyl9Yi4kZWxlbWVudC52YWwoZSksYi4kZWxlbWVudC50cmlnZ2VyKCJjaGFuZ2UiKX0pO2Vsc2V7dmFyIGQ9YS5pZDt0aGlzLiRlbGVtZW50LnZhbChkKSx0aGlzLiRlbGVtZW50LnRyaWdnZXIoImNoYW5nZSIpfX0sZC5wcm90b3R5cGUudW5zZWxlY3Q9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZih0aGlzLiRlbGVtZW50LnByb3AoIm11bHRpcGxlIikpe2lmKGEuc2VsZWN0ZWQ9ITEsYyhhLmVsZW1lbnQpLmlzKCJvcHRpb24iKSlyZXR1cm4gYS5lbGVtZW50LnNlbGVjdGVkPSExLHZvaWQgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJjaGFuZ2UiKTt0aGlzLmN1cnJlbnQoZnVuY3Rpb24oZCl7Zm9yKHZhciBlPVtdLGY9MDtmPGQubGVuZ3RoO2YrKyl7dmFyIGc9ZFtmXS5pZDtnIT09YS5pZCYmLTE9PT1jLmluQXJyYXkoZyxlKSYmZS5wdXNoKGcpfWIuJGVsZW1lbnQudmFsKGUpLGIuJGVsZW1lbnQudHJpZ2dlcigiY2hhbmdlIil9KX19LGQucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO3RoaXMuY29udGFpbmVyPWEsYS5vbigic2VsZWN0IixmdW5jdGlvbihhKXtjLnNlbGVjdChhLmRhdGEpfSksYS5vbigidW5zZWxlY3QiLGZ1bmN0aW9uKGEpe2MudW5zZWxlY3QoYS5kYXRhKX0pfSxkLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5maW5kKCIqIikuZWFjaChmdW5jdGlvbigpe2IuUmVtb3ZlRGF0YSh0aGlzKX0pfSxkLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbihhLGIpe3ZhciBkPVtdLGU9dGhpczt0aGlzLiRlbGVtZW50LmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbigpe3ZhciBiPWModGhpcyk7aWYoYi5pcygib3B0aW9uIil8fGIuaXMoIm9wdGdyb3VwIikpe3ZhciBmPWUuaXRlbShiKSxnPWUubWF0Y2hlcyhhLGYpO251bGwhPT1nJiZkLnB1c2goZyl9fSksYih7cmVzdWx0czpkfSl9LGQucHJvdG90eXBlLmFkZE9wdGlvbnM9ZnVuY3Rpb24oYSl7Yi5hcHBlbmRNYW55KHRoaXMuJGVsZW1lbnQsYSl9LGQucHJvdG90eXBlLm9wdGlvbj1mdW5jdGlvbihhKXt2YXIgZDthLmNoaWxkcmVuPyhkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGdyb3VwIiksZC5sYWJlbD1hLnRleHQpOihkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpLHZvaWQgMCE9PWQudGV4dENvbnRlbnQ/ZC50ZXh0Q29udGVudD1hLnRleHQ6ZC5pbm5lclRleHQ9YS50ZXh0KSx2b2lkIDAhPT1hLmlkJiYoZC52YWx1ZT1hLmlkKSxhLmRpc2FibGVkJiYoZC5kaXNhYmxlZD0hMCksYS5zZWxlY3RlZCYmKGQuc2VsZWN0ZWQ9ITApLGEudGl0bGUmJihkLnRpdGxlPWEudGl0bGUpO3ZhciBlPWMoZCksZj10aGlzLl9ub3JtYWxpemVJdGVtKGEpO3JldHVybiBmLmVsZW1lbnQ9ZCxiLlN0b3JlRGF0YShkLCJkYXRhIixmKSxlfSxkLnByb3RvdHlwZS5pdGVtPWZ1bmN0aW9uKGEpe3ZhciBkPXt9O2lmKG51bGwhPShkPWIuR2V0RGF0YShhWzBdLCJkYXRhIikpKXJldHVybiBkO2lmKGEuaXMoIm9wdGlvbiIpKWQ9e2lkOmEudmFsKCksdGV4dDphLnRleHQoKSxkaXNhYmxlZDphLnByb3AoImRpc2FibGVkIiksc2VsZWN0ZWQ6YS5wcm9wKCJzZWxlY3RlZCIpLHRpdGxlOmEucHJvcCgidGl0bGUiKX07ZWxzZSBpZihhLmlzKCJvcHRncm91cCIpKXtkPXt0ZXh0OmEucHJvcCgibGFiZWwiKSxjaGlsZHJlbjpbXSx0aXRsZTphLnByb3AoInRpdGxlIil9O2Zvcih2YXIgZT1hLmNoaWxkcmVuKCJvcHRpb24iKSxmPVtdLGc9MDtnPGUubGVuZ3RoO2crKyl7dmFyIGg9YyhlW2ddKSxpPXRoaXMuaXRlbShoKTtmLnB1c2goaSl9ZC5jaGlsZHJlbj1mfXJldHVybiBkPXRoaXMuX25vcm1hbGl6ZUl0ZW0oZCksZC5lbGVtZW50PWFbMF0sYi5TdG9yZURhdGEoYVswXSwiZGF0YSIsZCksZH0sZC5wcm90b3R5cGUuX25vcm1hbGl6ZUl0ZW09ZnVuY3Rpb24oYSl7YSE9PU9iamVjdChhKSYmKGE9e2lkOmEsdGV4dDphfSksYT1jLmV4dGVuZCh7fSx7dGV4dDoiIn0sYSk7dmFyIGI9e3NlbGVjdGVkOiExLGRpc2FibGVkOiExfTtyZXR1cm4gbnVsbCE9YS5pZCYmKGEuaWQ9YS5pZC50b1N0cmluZygpKSxudWxsIT1hLnRleHQmJihhLnRleHQ9YS50ZXh0LnRvU3RyaW5nKCkpLG51bGw9PWEuX3Jlc3VsdElkJiZhLmlkJiZudWxsIT10aGlzLmNvbnRhaW5lciYmKGEuX3Jlc3VsdElkPXRoaXMuZ2VuZXJhdGVSZXN1bHRJZCh0aGlzLmNvbnRhaW5lcixhKSksYy5leHRlbmQoe30sYixhKX0sZC5wcm90b3R5cGUubWF0Y2hlcz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9wdGlvbnMuZ2V0KCJtYXRjaGVyIikoYSxiKX0sZH0pLGIuZGVmaW5lKCJzZWxlY3QyL2RhdGEvYXJyYXkiLFsiLi9zZWxlY3QiLCIuLi91dGlscyIsImpxdWVyeSJdLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEsYil7dmFyIGM9Yi5nZXQoImRhdGEiKXx8W107ZC5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLGEsYiksdGhpcy5hZGRPcHRpb25zKHRoaXMuY29udmVydFRvT3B0aW9ucyhjKSl9cmV0dXJuIGIuRXh0ZW5kKGQsYSksZC5wcm90b3R5cGUuc2VsZWN0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuJGVsZW1lbnQuZmluZCgib3B0aW9uIikuZmlsdGVyKGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGMudmFsdWU9PWEuaWQudG9TdHJpbmcoKX0pOzA9PT1iLmxlbmd0aCYmKGI9dGhpcy5vcHRpb24oYSksdGhpcy5hZGRPcHRpb25zKGIpKSxkLl9fc3VwZXJfXy5zZWxlY3QuY2FsbCh0aGlzLGEpfSxkLnByb3RvdHlwZS5jb252ZXJ0VG9PcHRpb25zPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcykudmFsKCk9PWEuaWR9fWZvcih2YXIgZT10aGlzLGY9dGhpcy4kZWxlbWVudC5maW5kKCJvcHRpb24iKSxnPWYubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUuaXRlbShjKHRoaXMpKS5pZH0pLmdldCgpLGg9W10saT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgaj10aGlzLl9ub3JtYWxpemVJdGVtKGFbaV0pO2lmKGMuaW5BcnJheShqLmlkLGcpPj0wKXt2YXIgaz1mLmZpbHRlcihkKGopKSxsPXRoaXMuaXRlbShrKSxtPWMuZXh0ZW5kKCEwLHt9LGosbCksbj10aGlzLm9wdGlvbihtKTtrLnJlcGxhY2VXaXRoKG4pfWVsc2V7dmFyIG89dGhpcy5vcHRpb24oaik7aWYoai5jaGlsZHJlbil7dmFyIHA9dGhpcy5jb252ZXJ0VG9PcHRpb25zKGouY2hpbGRyZW4pO2IuYXBwZW5kTWFueShvLHApfWgucHVzaChvKX19cmV0dXJuIGh9LGR9KSxiLmRlZmluZSgic2VsZWN0Mi9kYXRhL2FqYXgiLFsiLi9hcnJheSIsIi4uL3V0aWxzIiwianF1ZXJ5Il0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSxiKXt0aGlzLmFqYXhPcHRpb25zPXRoaXMuX2FwcGx5RGVmYXVsdHMoYi5nZXQoImFqYXgiKSksbnVsbCE9dGhpcy5hamF4T3B0aW9ucy5wcm9jZXNzUmVzdWx0cyYmKHRoaXMucHJvY2Vzc1Jlc3VsdHM9dGhpcy5hamF4T3B0aW9ucy5wcm9jZXNzUmVzdWx0cyksZC5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLGEsYil9cmV0dXJuIGIuRXh0ZW5kKGQsYSksZC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdHM9ZnVuY3Rpb24oYSl7dmFyIGI9e2RhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIGMuZXh0ZW5kKHt9LGEse3E6YS50ZXJtfSl9LHRyYW5zcG9ydDpmdW5jdGlvbihhLGIsZCl7dmFyIGU9Yy5hamF4KGEpO3JldHVybiBlLnRoZW4oYiksZS5mYWlsKGQpLGV9fTtyZXR1cm4gYy5leHRlbmQoe30sYixhLCEwKX0sZC5wcm90b3R5cGUucHJvY2Vzc1Jlc3VsdHM9ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LGQucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gZCgpe3ZhciBkPWYudHJhbnNwb3J0KGYsZnVuY3Rpb24oZCl7dmFyIGY9ZS5wcm9jZXNzUmVzdWx0cyhkLGEpO2Uub3B0aW9ucy5nZXQoImRlYnVnIikmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLmVycm9yJiYoZiYmZi5yZXN1bHRzJiZjLmlzQXJyYXkoZi5yZXN1bHRzKXx8Y29uc29sZS5lcnJvcigiU2VsZWN0MjogVGhlIEFKQVggcmVzdWx0cyBkaWQgbm90IHJldHVybiBhbiBhcnJheSBpbiB0aGUgYHJlc3VsdHNgIGtleSBvZiB0aGUgcmVzcG9uc2UuIikpLGIoZil9LGZ1bmN0aW9uKCl7InN0YXR1cyJpbiBkJiYoMD09PWQuc3RhdHVzfHwiMCI9PT1kLnN0YXR1cyl8fGUudHJpZ2dlcigicmVzdWx0czptZXNzYWdlIix7bWVzc2FnZToiZXJyb3JMb2FkaW5nIn0pfSk7ZS5fcmVxdWVzdD1kfXZhciBlPXRoaXM7bnVsbCE9dGhpcy5fcmVxdWVzdCYmKGMuaXNGdW5jdGlvbih0aGlzLl9yZXF1ZXN0LmFib3J0KSYmdGhpcy5fcmVxdWVzdC5hYm9ydCgpLHRoaXMuX3JlcXVlc3Q9bnVsbCk7dmFyIGY9Yy5leHRlbmQoe3R5cGU6IkdFVCJ9LHRoaXMuYWpheE9wdGlvbnMpOyJmdW5jdGlvbiI9PXR5cGVvZiBmLnVybCYmKGYudXJsPWYudXJsLmNhbGwodGhpcy4kZWxlbWVudCxhKSksImZ1bmN0aW9uIj09dHlwZW9mIGYuZGF0YSYmKGYuZGF0YT1mLmRhdGEuY2FsbCh0aGlzLiRlbGVtZW50LGEpKSx0aGlzLmFqYXhPcHRpb25zLmRlbGF5JiZudWxsIT1hLnRlcm0/KHRoaXMuX3F1ZXJ5VGltZW91dCYmd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl9xdWVyeVRpbWVvdXQpLHRoaXMuX3F1ZXJ5VGltZW91dD13aW5kb3cuc2V0VGltZW91dChkLHRoaXMuYWpheE9wdGlvbnMuZGVsYXkpKTpkKCl9LGR9KSxiLmRlZmluZSgic2VsZWN0Mi9kYXRhL3RhZ3MiLFsianF1ZXJ5Il0sZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiLGMsZCl7dmFyIGU9ZC5nZXQoInRhZ3MiKSxmPWQuZ2V0KCJjcmVhdGVUYWciKTt2b2lkIDAhPT1mJiYodGhpcy5jcmVhdGVUYWc9Zik7dmFyIGc9ZC5nZXQoImluc2VydFRhZyIpO2lmKHZvaWQgMCE9PWcmJih0aGlzLmluc2VydFRhZz1nKSxiLmNhbGwodGhpcyxjLGQpLGEuaXNBcnJheShlKSlmb3IodmFyIGg9MDtoPGUubGVuZ3RoO2grKyl7dmFyIGk9ZVtoXSxqPXRoaXMuX25vcm1hbGl6ZUl0ZW0oaSksaz10aGlzLm9wdGlvbihqKTt0aGlzLiRlbGVtZW50LmFwcGVuZChrKX19cmV0dXJuIGIucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEsZil7Zm9yKHZhciBnPWEucmVzdWx0cyxoPTA7aDxnLmxlbmd0aDtoKyspe3ZhciBpPWdbaF0saj1udWxsIT1pLmNoaWxkcmVuJiYhZCh7cmVzdWx0czppLmNoaWxkcmVufSwhMCk7aWYoKGkudGV4dHx8IiIpLnRvVXBwZXJDYXNlKCk9PT0oYi50ZXJtfHwiIikudG9VcHBlckNhc2UoKXx8ailyZXR1cm4hZiYmKGEuZGF0YT1nLHZvaWQgYyhhKSl9aWYoZilyZXR1cm4hMDt2YXIgaz1lLmNyZWF0ZVRhZyhiKTtpZihudWxsIT1rKXt2YXIgbD1lLm9wdGlvbihrKTtsLmF0dHIoImRhdGEtc2VsZWN0Mi10YWciLCEwKSxlLmFkZE9wdGlvbnMoW2xdKSxlLmluc2VydFRhZyhnLGspfWEucmVzdWx0cz1nLGMoYSl9dmFyIGU9dGhpcztpZih0aGlzLl9yZW1vdmVPbGRUYWdzKCksbnVsbD09Yi50ZXJtfHxudWxsIT1iLnBhZ2UpcmV0dXJuIHZvaWQgYS5jYWxsKHRoaXMsYixjKTthLmNhbGwodGhpcyxiLGQpfSxiLnByb3RvdHlwZS5jcmVhdGVUYWc9ZnVuY3Rpb24oYixjKXt2YXIgZD1hLnRyaW0oYy50ZXJtKTtyZXR1cm4iIj09PWQ/bnVsbDp7aWQ6ZCx0ZXh0OmR9fSxiLnByb3RvdHlwZS5pbnNlcnRUYWc9ZnVuY3Rpb24oYSxiLGMpe2IudW5zaGlmdChjKX0sYi5wcm90b3R5cGUuX3JlbW92ZU9sZFRhZ3M9ZnVuY3Rpb24oYil7dGhpcy5fbGFzdFRhZzt0aGlzLiRlbGVtZW50LmZpbmQoIm9wdGlvbltkYXRhLXNlbGVjdDItdGFnXSIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkfHxhKHRoaXMpLnJlbW92ZSgpfSl9LGJ9KSxiLmRlZmluZSgic2VsZWN0Mi9kYXRhL3Rva2VuaXplciIsWyJqcXVlcnkiXSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsYixjKXt2YXIgZD1jLmdldCgidG9rZW5pemVyIik7dm9pZCAwIT09ZCYmKHRoaXMudG9rZW5pemVyPWQpLGEuY2FsbCh0aGlzLGIsYyl9cmV0dXJuIGIucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oYSxiLGMpe2EuY2FsbCh0aGlzLGIsYyksdGhpcy4kc2VhcmNoPWIuZHJvcGRvd24uJHNlYXJjaHx8Yi5zZWxlY3Rpb24uJHNlYXJjaHx8Yy5maW5kKCIuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkIil9LGIucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKGIsYyxkKXtmdW5jdGlvbiBlKGIpe3ZhciBjPWcuX25vcm1hbGl6ZUl0ZW0oYik7aWYoIWcuJGVsZW1lbnQuZmluZCgib3B0aW9uIikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykudmFsKCk9PT1jLmlkfSkubGVuZ3RoKXt2YXIgZD1nLm9wdGlvbihjKTtkLmF0dHIoImRhdGEtc2VsZWN0Mi10YWciLCEwKSxnLl9yZW1vdmVPbGRUYWdzKCksZy5hZGRPcHRpb25zKFtkXSl9ZihjKX1mdW5jdGlvbiBmKGEpe2cudHJpZ2dlcigic2VsZWN0Iix7ZGF0YTphfSl9dmFyIGc9dGhpcztjLnRlcm09Yy50ZXJtfHwiIjt2YXIgaD10aGlzLnRva2VuaXplcihjLHRoaXMub3B0aW9ucyxlKTtoLnRlcm0hPT1jLnRlcm0mJih0aGlzLiRzZWFyY2gubGVuZ3RoJiYodGhpcy4kc2VhcmNoLnZhbChoLnRlcm0pLHRoaXMuJHNlYXJjaC5mb2N1cygpKSxjLnRlcm09aC50ZXJtKSxiLmNhbGwodGhpcyxjLGQpfSxiLnByb3RvdHlwZS50b2tlbml6ZXI9ZnVuY3Rpb24oYixjLGQsZSl7Zm9yKHZhciBmPWQuZ2V0KCJ0b2tlblNlcGFyYXRvcnMiKXx8W10sZz1jLnRlcm0saD0wLGk9dGhpcy5jcmVhdGVUYWd8fGZ1bmN0aW9uKGEpe3JldHVybntpZDphLnRlcm0sdGV4dDphLnRlcm19fTtoPGcubGVuZ3RoOyl7dmFyIGo9Z1toXTtpZigtMSE9PWEuaW5BcnJheShqLGYpKXt2YXIgaz1nLnN1YnN0cigwLGgpLGw9YS5leHRlbmQoe30sYyx7dGVybTprfSksbT1pKGwpO251bGwhPW0/KGUobSksZz1nLnN1YnN0cihoKzEpfHwiIixoPTApOmgrK31lbHNlIGgrK31yZXR1cm57dGVybTpnfX0sYn0pLGIuZGVmaW5lKCJzZWxlY3QyL2RhdGEvbWluaW11bUlucHV0TGVuZ3RoIixbXSxmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiLGMpe3RoaXMubWluaW11bUlucHV0TGVuZ3RoPWMuZ2V0KCJtaW5pbXVtSW5wdXRMZW5ndGgiKSxhLmNhbGwodGhpcyxiLGMpfXJldHVybiBhLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbihhLGIsYyl7aWYoYi50ZXJtPWIudGVybXx8IiIsYi50ZXJtLmxlbmd0aDx0aGlzLm1pbmltdW1JbnB1dExlbmd0aClyZXR1cm4gdm9pZCB0aGlzLnRyaWdnZXIoInJlc3VsdHM6bWVzc2FnZSIse21lc3NhZ2U6ImlucHV0VG9vU2hvcnQiLGFyZ3M6e21pbmltdW06dGhpcy5taW5pbXVtSW5wdXRMZW5ndGgsaW5wdXQ6Yi50ZXJtLHBhcmFtczpifX0pO2EuY2FsbCh0aGlzLGIsYyl9LGF9KSxiLmRlZmluZSgic2VsZWN0Mi9kYXRhL21heGltdW1JbnB1dExlbmd0aCIsW10sZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYixjKXt0aGlzLm1heGltdW1JbnB1dExlbmd0aD1jLmdldCgibWF4aW11bUlucHV0TGVuZ3RoIiksYS5jYWxsKHRoaXMsYixjKX1yZXR1cm4gYS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24oYSxiLGMpe2lmKGIudGVybT1iLnRlcm18fCIiLHRoaXMubWF4aW11bUlucHV0TGVuZ3RoPjAmJmIudGVybS5sZW5ndGg+dGhpcy5tYXhpbXVtSW5wdXRMZW5ndGgpcmV0dXJuIHZvaWQgdGhpcy50cmlnZ2VyKCJyZXN1bHRzOm1lc3NhZ2UiLHttZXNzYWdlOiJpbnB1dFRvb0xvbmciLGFyZ3M6e21heGltdW06dGhpcy5tYXhpbXVtSW5wdXRMZW5ndGgsaW5wdXQ6Yi50ZXJtLHBhcmFtczpifX0pO2EuY2FsbCh0aGlzLGIsYyl9LGF9KSxiLmRlZmluZSgic2VsZWN0Mi9kYXRhL21heGltdW1TZWxlY3Rpb25MZW5ndGgiLFtdLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIsYyl7dGhpcy5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoPWMuZ2V0KCJtYXhpbXVtU2VsZWN0aW9uTGVuZ3RoIiksYS5jYWxsKHRoaXMsYixjKX1yZXR1cm4gYS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXM7dGhpcy5jdXJyZW50KGZ1bmN0aW9uKGUpe3ZhciBmPW51bGwhPWU/ZS5sZW5ndGg6MDtpZihkLm1heGltdW1TZWxlY3Rpb25MZW5ndGg+MCYmZj49ZC5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoKXJldHVybiB2b2lkIGQudHJpZ2dlcigicmVzdWx0czptZXNzYWdlIix7bWVzc2FnZToibWF4aW11bVNlbGVjdGVkIixhcmdzOnttYXhpbXVtOmQubWF4aW11bVNlbGVjdGlvbkxlbmd0aH19KTthLmNhbGwoZCxiLGMpfSl9LGF9KSxiLmRlZmluZSgic2VsZWN0Mi9kcm9wZG93biIsWyJqcXVlcnkiLCIuL3V0aWxzIl0sZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7dGhpcy4kZWxlbWVudD1hLHRoaXMub3B0aW9ucz1iLGMuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyl9cmV0dXJuIGIuRXh0ZW5kKGMsYi5PYnNlcnZhYmxlKSxjLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgYj1hKCc8c3BhbiBjbGFzcz0ic2VsZWN0Mi1kcm9wZG93biI+PHNwYW4gY2xhc3M9InNlbGVjdDItcmVzdWx0cyI+PC9zcGFuPjwvc3Bhbj4nKTtyZXR1cm4gYi5hdHRyKCJkaXIiLHRoaXMub3B0aW9ucy5nZXQoImRpciIpKSx0aGlzLiRkcm9wZG93bj1iLGJ9LGMucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt9LGMucHJvdG90eXBlLnBvc2l0aW9uPWZ1bmN0aW9uKGEsYil7fSxjLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy4kZHJvcGRvd24ucmVtb3ZlKCl9LGN9KSxiLmRlZmluZSgic2VsZWN0Mi9kcm9wZG93bi9zZWFyY2giLFsianF1ZXJ5IiwiLi4vdXRpbHMiXSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoKXt9cmV0dXJuIGMucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihiKXt2YXIgYz1iLmNhbGwodGhpcyksZD1hKCc8c3BhbiBjbGFzcz0ic2VsZWN0Mi1zZWFyY2ggc2VsZWN0Mi1zZWFyY2gtLWRyb3Bkb3duIj48aW5wdXQgY2xhc3M9InNlbGVjdDItc2VhcmNoX19maWVsZCIgdHlwZT0ic2VhcmNoIiB0YWJpbmRleD0iLTEiIGF1dG9jb21wbGV0ZT0ib2ZmIiBhdXRvY29ycmVjdD0ib2ZmIiBhdXRvY2FwaXRhbGl6ZT0ibm9uZSIgc3BlbGxjaGVjaz0iZmFsc2UiIHJvbGU9InRleHRib3giIC8+PC9zcGFuPicpO3JldHVybiB0aGlzLiRzZWFyY2hDb250YWluZXI9ZCx0aGlzLiRzZWFyY2g9ZC5maW5kKCJpbnB1dCIpLGMucHJlcGVuZChkKSxjfSxjLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGIsYyxkKXt2YXIgZT10aGlzO2IuY2FsbCh0aGlzLGMsZCksdGhpcy4kc2VhcmNoLm9uKCJrZXlkb3duIixmdW5jdGlvbihhKXtlLnRyaWdnZXIoImtleXByZXNzIixhKSxlLl9rZXlVcFByZXZlbnRlZD1hLmlzRGVmYXVsdFByZXZlbnRlZCgpfSksdGhpcy4kc2VhcmNoLm9uKCJpbnB1dCIsZnVuY3Rpb24oYil7YSh0aGlzKS5vZmYoImtleXVwIil9KSx0aGlzLiRzZWFyY2gub24oImtleXVwIGlucHV0IixmdW5jdGlvbihhKXtlLmhhbmRsZVNlYXJjaChhKX0pLGMub24oIm9wZW4iLGZ1bmN0aW9uKCl7ZS4kc2VhcmNoLmF0dHIoInRhYmluZGV4IiwwKSxlLiRzZWFyY2guZm9jdXMoKSx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2UuJHNlYXJjaC5mb2N1cygpfSwwKX0pLGMub24oImNsb3NlIixmdW5jdGlvbigpe2UuJHNlYXJjaC5hdHRyKCJ0YWJpbmRleCIsLTEpLGUuJHNlYXJjaC52YWwoIiIpLGUuJHNlYXJjaC5ibHVyKCl9KSxjLm9uKCJmb2N1cyIsZnVuY3Rpb24oKXtjLmlzT3BlbigpfHxlLiRzZWFyY2guZm9jdXMoKX0pLGMub24oInJlc3VsdHM6YWxsIixmdW5jdGlvbihhKXtpZihudWxsPT1hLnF1ZXJ5LnRlcm18fCIiPT09YS5xdWVyeS50ZXJtKXtlLnNob3dTZWFyY2goYSk/ZS4kc2VhcmNoQ29udGFpbmVyLnJlbW92ZUNsYXNzKCJzZWxlY3QyLXNlYXJjaC0taGlkZSIpOmUuJHNlYXJjaENvbnRhaW5lci5hZGRDbGFzcygic2VsZWN0Mi1zZWFyY2gtLWhpZGUiKX19KX0sYy5wcm90b3R5cGUuaGFuZGxlU2VhcmNoPWZ1bmN0aW9uKGEpe2lmKCF0aGlzLl9rZXlVcFByZXZlbnRlZCl7dmFyIGI9dGhpcy4kc2VhcmNoLnZhbCgpO3RoaXMudHJpZ2dlcigicXVlcnkiLHt0ZXJtOmJ9KX10aGlzLl9rZXlVcFByZXZlbnRlZD0hMX0sYy5wcm90b3R5cGUuc2hvd1NlYXJjaD1mdW5jdGlvbihhLGIpe3JldHVybiEwfSxjfSksYi5kZWZpbmUoInNlbGVjdDIvZHJvcGRvd24vaGlkZVBsYWNlaG9sZGVyIixbXSxmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiLGMsZCl7dGhpcy5wbGFjZWhvbGRlcj10aGlzLm5vcm1hbGl6ZVBsYWNlaG9sZGVyKGMuZ2V0KCJwbGFjZWhvbGRlciIpKSxhLmNhbGwodGhpcyxiLGMsZCl9cmV0dXJuIGEucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihhLGIpe2IucmVzdWx0cz10aGlzLnJlbW92ZVBsYWNlaG9sZGVyKGIucmVzdWx0cyksYS5jYWxsKHRoaXMsYil9LGEucHJvdG90eXBlLm5vcm1hbGl6ZVBsYWNlaG9sZGVyPWZ1bmN0aW9uKGEsYil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBiJiYoYj17aWQ6IiIsdGV4dDpifSksYn0sYS5wcm90b3R5cGUucmVtb3ZlUGxhY2Vob2xkZXI9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yi5zbGljZSgwKSxkPWIubGVuZ3RoLTE7ZD49MDtkLS0pe3ZhciBlPWJbZF07dGhpcy5wbGFjZWhvbGRlci5pZD09PWUuaWQmJmMuc3BsaWNlKGQsMSl9cmV0dXJuIGN9LGF9KSxiLmRlZmluZSgic2VsZWN0Mi9kcm9wZG93bi9pbmZpbml0ZVNjcm9sbCIsWyJqcXVlcnkiXSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsYixjLGQpe3RoaXMubGFzdFBhcmFtcz17fSxhLmNhbGwodGhpcyxiLGMsZCksdGhpcy4kbG9hZGluZ01vcmU9dGhpcy5jcmVhdGVMb2FkaW5nTW9yZSgpLHRoaXMubG9hZGluZz0hMX1yZXR1cm4gYi5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGEsYil7dGhpcy4kbG9hZGluZ01vcmUucmVtb3ZlKCksdGhpcy5sb2FkaW5nPSExLGEuY2FsbCh0aGlzLGIpLHRoaXMuc2hvd0xvYWRpbmdNb3JlKGIpJiZ0aGlzLiRyZXN1bHRzLmFwcGVuZCh0aGlzLiRsb2FkaW5nTW9yZSl9LGIucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oYixjLGQpe3ZhciBlPXRoaXM7Yi5jYWxsKHRoaXMsYyxkKSxjLm9uKCJxdWVyeSIsZnVuY3Rpb24oYSl7ZS5sYXN0UGFyYW1zPWEsZS5sb2FkaW5nPSEwfSksYy5vbigicXVlcnk6YXBwZW5kIixmdW5jdGlvbihhKXtlLmxhc3RQYXJhbXM9YSxlLmxvYWRpbmc9ITB9KSx0aGlzLiRyZXN1bHRzLm9uKCJzY3JvbGwiLGZ1bmN0aW9uKCl7dmFyIGI9YS5jb250YWlucyhkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZS4kbG9hZGluZ01vcmVbMF0pO2lmKCFlLmxvYWRpbmcmJmIpe2UuJHJlc3VsdHMub2Zmc2V0KCkudG9wK2UuJHJlc3VsdHMub3V0ZXJIZWlnaHQoITEpKzUwPj1lLiRsb2FkaW5nTW9yZS5vZmZzZXQoKS50b3ArZS4kbG9hZGluZ01vcmUub3V0ZXJIZWlnaHQoITEpJiZlLmxvYWRNb3JlKCl9fSl9LGIucHJvdG90eXBlLmxvYWRNb3JlPWZ1bmN0aW9uKCl7dGhpcy5sb2FkaW5nPSEwO3ZhciBiPWEuZXh0ZW5kKHt9LHtwYWdlOjF9LHRoaXMubGFzdFBhcmFtcyk7Yi5wYWdlKyssdGhpcy50cmlnZ2VyKCJxdWVyeTphcHBlbmQiLGIpfSxiLnByb3RvdHlwZS5zaG93TG9hZGluZ01vcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi5wYWdpbmF0aW9uJiZiLnBhZ2luYXRpb24ubW9yZX0sYi5wcm90b3R5cGUuY3JlYXRlTG9hZGluZ01vcmU9ZnVuY3Rpb24oKXt2YXIgYj1hKCc8bGkgY2xhc3M9InNlbGVjdDItcmVzdWx0c19fb3B0aW9uIHNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1sb2FkLW1vcmUicm9sZT0idHJlZWl0ZW0iIGFyaWEtZGlzYWJsZWQ9InRydWUiPjwvbGk+JyksYz10aGlzLm9wdGlvbnMuZ2V0KCJ0cmFuc2xhdGlvbnMiKS5nZXQoImxvYWRpbmdNb3JlIik7cmV0dXJuIGIuaHRtbChjKHRoaXMubGFzdFBhcmFtcykpLGJ9LGJ9KSxiLmRlZmluZSgic2VsZWN0Mi9kcm9wZG93bi9hdHRhY2hCb2R5IixbImpxdWVyeSIsIi4uL3V0aWxzIl0sZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIsYyxkKXt0aGlzLiRkcm9wZG93blBhcmVudD1kLmdldCgiZHJvcGRvd25QYXJlbnQiKXx8YShkb2N1bWVudC5ib2R5KSxiLmNhbGwodGhpcyxjLGQpfXJldHVybiBjLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLGU9ITE7YS5jYWxsKHRoaXMsYixjKSxiLm9uKCJvcGVuIixmdW5jdGlvbigpe2QuX3Nob3dEcm9wZG93bigpLGQuX2F0dGFjaFBvc2l0aW9uaW5nSGFuZGxlcihiKSxlfHwoZT0hMCxiLm9uKCJyZXN1bHRzOmFsbCIsZnVuY3Rpb24oKXtkLl9wb3NpdGlvbkRyb3Bkb3duKCksZC5fcmVzaXplRHJvcGRvd24oKX0pLGIub24oInJlc3VsdHM6YXBwZW5kIixmdW5jdGlvbigpe2QuX3Bvc2l0aW9uRHJvcGRvd24oKSxkLl9yZXNpemVEcm9wZG93bigpfSkpfSksYi5vbigiY2xvc2UiLGZ1bmN0aW9uKCl7ZC5faGlkZURyb3Bkb3duKCksZC5fZGV0YWNoUG9zaXRpb25pbmdIYW5kbGVyKGIpfSksdGhpcy4kZHJvcGRvd25Db250YWluZXIub24oIm1vdXNlZG93biIsZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKX0pfSxjLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKGEpe2EuY2FsbCh0aGlzKSx0aGlzLiRkcm9wZG93bkNvbnRhaW5lci5yZW1vdmUoKX0sYy5wcm90b3R5cGUucG9zaXRpb249ZnVuY3Rpb24oYSxiLGMpe2IuYXR0cigiY2xhc3MiLGMuYXR0cigiY2xhc3MiKSksYi5yZW1vdmVDbGFzcygic2VsZWN0MiIpLGIuYWRkQ2xhc3MoInNlbGVjdDItY29udGFpbmVyLS1vcGVuIiksYi5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOi05OTk5OTl9KSx0aGlzLiRjb250YWluZXI9Y30sYy5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGIpe3ZhciBjPWEoIjxzcGFuPjwvc3Bhbj4iKSxkPWIuY2FsbCh0aGlzKTtyZXR1cm4gYy5hcHBlbmQoZCksdGhpcy4kZHJvcGRvd25Db250YWluZXI9YyxjfSxjLnByb3RvdHlwZS5faGlkZURyb3Bkb3duPWZ1bmN0aW9uKGEpe3RoaXMuJGRyb3Bkb3duQ29udGFpbmVyLmRldGFjaCgpfSxjLnByb3RvdHlwZS5fYXR0YWNoUG9zaXRpb25pbmdIYW5kbGVyPWZ1bmN0aW9uKGMsZCl7dmFyIGU9dGhpcyxmPSJzY3JvbGwuc2VsZWN0Mi4iK2QuaWQsZz0icmVzaXplLnNlbGVjdDIuIitkLmlkLGg9Im9yaWVudGF0aW9uY2hhbmdlLnNlbGVjdDIuIitkLmlkLGk9dGhpcy4kY29udGFpbmVyLnBhcmVudHMoKS5maWx0ZXIoYi5oYXNTY3JvbGwpO2kuZWFjaChmdW5jdGlvbigpe2IuU3RvcmVEYXRhKHRoaXMsInNlbGVjdDItc2Nyb2xsLXBvc2l0aW9uIix7eDphKHRoaXMpLnNjcm9sbExlZnQoKSx5OmEodGhpcykuc2Nyb2xsVG9wKCl9KX0pLGkub24oZixmdW5jdGlvbihjKXt2YXIgZD1iLkdldERhdGEodGhpcywic2VsZWN0Mi1zY3JvbGwtcG9zaXRpb24iKTthKHRoaXMpLnNjcm9sbFRvcChkLnkpfSksYSh3aW5kb3cpLm9uKGYrIiAiK2crIiAiK2gsZnVuY3Rpb24oYSl7ZS5fcG9zaXRpb25Ecm9wZG93bigpLGUuX3Jlc2l6ZURyb3Bkb3duKCl9KX0sYy5wcm90b3R5cGUuX2RldGFjaFBvc2l0aW9uaW5nSGFuZGxlcj1mdW5jdGlvbihjLGQpe3ZhciBlPSJzY3JvbGwuc2VsZWN0Mi4iK2QuaWQsZj0icmVzaXplLnNlbGVjdDIuIitkLmlkLGc9Im9yaWVudGF0aW9uY2hhbmdlLnNlbGVjdDIuIitkLmlkO3RoaXMuJGNvbnRhaW5lci5wYXJlbnRzKCkuZmlsdGVyKGIuaGFzU2Nyb2xsKS5vZmYoZSksYSh3aW5kb3cpLm9mZihlKyIgIitmKyIgIitnKX0sYy5wcm90b3R5cGUuX3Bvc2l0aW9uRHJvcGRvd249ZnVuY3Rpb24oKXt2YXIgYj1hKHdpbmRvdyksYz10aGlzLiRkcm9wZG93bi5oYXNDbGFzcygic2VsZWN0Mi1kcm9wZG93bi0tYWJvdmUiKSxkPXRoaXMuJGRyb3Bkb3duLmhhc0NsYXNzKCJzZWxlY3QyLWRyb3Bkb3duLS1iZWxvdyIpLGU9bnVsbCxmPXRoaXMuJGNvbnRhaW5lci5vZmZzZXQoKTtmLmJvdHRvbT1mLnRvcCt0aGlzLiRjb250YWluZXIub3V0ZXJIZWlnaHQoITEpO3ZhciBnPXtoZWlnaHQ6dGhpcy4kY29udGFpbmVyLm91dGVySGVpZ2h0KCExKX07Zy50b3A9Zi50b3AsZy5ib3R0b209Zi50b3ArZy5oZWlnaHQ7dmFyIGg9e2hlaWdodDp0aGlzLiRkcm9wZG93bi5vdXRlckhlaWdodCghMSl9LGk9e3RvcDpiLnNjcm9sbFRvcCgpLGJvdHRvbTpiLnNjcm9sbFRvcCgpK2IuaGVpZ2h0KCl9LGo9aS50b3A8Zi50b3AtaC5oZWlnaHQsaz1pLmJvdHRvbT5mLmJvdHRvbStoLmhlaWdodCxsPXtsZWZ0OmYubGVmdCx0b3A6Zy5ib3R0b219LG09dGhpcy4kZHJvcGRvd25QYXJlbnQ7InN0YXRpYyI9PT1tLmNzcygicG9zaXRpb24iKSYmKG09bS5vZmZzZXRQYXJlbnQoKSk7dmFyIG49bS5vZmZzZXQoKTtsLnRvcC09bi50b3AsbC5sZWZ0LT1uLmxlZnQsY3x8ZHx8KGU9ImJlbG93Iiksa3x8IWp8fGM/IWomJmsmJmMmJihlPSJiZWxvdyIpOmU9ImFib3ZlIiwoImFib3ZlIj09ZXx8YyYmImJlbG93IiE9PWUpJiYobC50b3A9Zy50b3Atbi50b3AtaC5oZWlnaHQpLG51bGwhPWUmJih0aGlzLiRkcm9wZG93bi5yZW1vdmVDbGFzcygic2VsZWN0Mi1kcm9wZG93bi0tYmVsb3cgc2VsZWN0Mi1kcm9wZG93bi0tYWJvdmUiKS5hZGRDbGFzcygic2VsZWN0Mi1kcm9wZG93bi0tIitlKSx0aGlzLiRjb250YWluZXIucmVtb3ZlQ2xhc3MoInNlbGVjdDItY29udGFpbmVyLS1iZWxvdyBzZWxlY3QyLWNvbnRhaW5lci0tYWJvdmUiKS5hZGRDbGFzcygic2VsZWN0Mi1jb250YWluZXItLSIrZSkpLHRoaXMuJGRyb3Bkb3duQ29udGFpbmVyLmNzcyhsKX0sYy5wcm90b3R5cGUuX3Jlc2l6ZURyb3Bkb3duPWZ1bmN0aW9uKCl7dmFyIGE9e3dpZHRoOnRoaXMuJGNvbnRhaW5lci5vdXRlcldpZHRoKCExKSsicHgifTt0aGlzLm9wdGlvbnMuZ2V0KCJkcm9wZG93bkF1dG9XaWR0aCIpJiYoYS5taW5XaWR0aD1hLndpZHRoLGEucG9zaXRpb249InJlbGF0aXZlIixhLndpZHRoPSJhdXRvIiksdGhpcy4kZHJvcGRvd24uY3NzKGEpfSxjLnByb3RvdHlwZS5fc2hvd0Ryb3Bkb3duPWZ1bmN0aW9uKGEpe3RoaXMuJGRyb3Bkb3duQ29udGFpbmVyLmFwcGVuZFRvKHRoaXMuJGRyb3Bkb3duUGFyZW50KSx0aGlzLl9wb3NpdGlvbkRyb3Bkb3duKCksdGhpcy5fcmVzaXplRHJvcGRvd24oKX0sY30pLGIuZGVmaW5lKCJzZWxlY3QyL2Ryb3Bkb3duL21pbmltdW1SZXN1bHRzRm9yU2VhcmNoIixbXSxmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYil7Zm9yKHZhciBjPTAsZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgZT1iW2RdO2UuY2hpbGRyZW4/Yys9YShlLmNoaWxkcmVuKTpjKyt9cmV0dXJuIGN9ZnVuY3Rpb24gYihhLGIsYyxkKXt0aGlzLm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoPWMuZ2V0KCJtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaCIpLHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2g8MCYmKHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2g9MS8wKSxhLmNhbGwodGhpcyxiLGMsZCl9cmV0dXJuIGIucHJvdG90eXBlLnNob3dTZWFyY2g9ZnVuY3Rpb24oYixjKXtyZXR1cm4hKGEoYy5kYXRhLnJlc3VsdHMpPHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2gpJiZiLmNhbGwodGhpcyxjKX0sYn0pLGIuZGVmaW5lKCJzZWxlY3QyL2Ryb3Bkb3duL3NlbGVjdE9uQ2xvc2UiLFsiLi4vdXRpbHMiXSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKCl7fXJldHVybiBiLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzO2EuY2FsbCh0aGlzLGIsYyksYi5vbigiY2xvc2UiLGZ1bmN0aW9uKGEpe2QuX2hhbmRsZVNlbGVjdE9uQ2xvc2UoYSl9KX0sYi5wcm90b3R5cGUuX2hhbmRsZVNlbGVjdE9uQ2xvc2U9ZnVuY3Rpb24oYixjKXtpZihjJiZudWxsIT1jLm9yaWdpbmFsU2VsZWN0MkV2ZW50KXt2YXIgZD1jLm9yaWdpbmFsU2VsZWN0MkV2ZW50O2lmKCJzZWxlY3QiPT09ZC5fdHlwZXx8InVuc2VsZWN0Ij09PWQuX3R5cGUpcmV0dXJufXZhciBlPXRoaXMuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCk7aWYoIShlLmxlbmd0aDwxKSl7dmFyIGY9YS5HZXREYXRhKGVbMF0sImRhdGEiKTtudWxsIT1mLmVsZW1lbnQmJmYuZWxlbWVudC5zZWxlY3RlZHx8bnVsbD09Zi5lbGVtZW50JiZmLnNlbGVjdGVkfHx0aGlzLnRyaWdnZXIoInNlbGVjdCIse2RhdGE6Zn0pfX0sYn0pLGIuZGVmaW5lKCJzZWxlY3QyL2Ryb3Bkb3duL2Nsb3NlT25TZWxlY3QiLFtdLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe31yZXR1cm4gYS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpczthLmNhbGwodGhpcyxiLGMpLGIub24oInNlbGVjdCIsZnVuY3Rpb24oYSl7ZC5fc2VsZWN0VHJpZ2dlcmVkKGEpfSksYi5vbigidW5zZWxlY3QiLGZ1bmN0aW9uKGEpe2QuX3NlbGVjdFRyaWdnZXJlZChhKX0pfSxhLnByb3RvdHlwZS5fc2VsZWN0VHJpZ2dlcmVkPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5vcmlnaW5hbEV2ZW50O2MmJmMuY3RybEtleXx8dGhpcy50cmlnZ2VyKCJjbG9zZSIse29yaWdpbmFsRXZlbnQ6YyxvcmlnaW5hbFNlbGVjdDJFdmVudDpifSl9LGF9KSxiLmRlZmluZSgic2VsZWN0Mi9pMThuL2VuIixbXSxmdW5jdGlvbigpe3JldHVybntlcnJvckxvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iVGhlIHJlc3VsdHMgY291bGQgbm90IGJlIGxvYWRlZC4ifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oYSl7dmFyIGI9YS5pbnB1dC5sZW5ndGgtYS5tYXhpbXVtLGM9IlBsZWFzZSBkZWxldGUgIitiKyIgY2hhcmFjdGVyIjtyZXR1cm4gMSE9YiYmKGMrPSJzIiksY30saW5wdXRUb29TaG9ydDpmdW5jdGlvbihhKXtyZXR1cm4iUGxlYXNlIGVudGVyICIrKGEubWluaW11bS1hLmlucHV0Lmxlbmd0aCkrIiBvciBtb3JlIGNoYXJhY3RlcnMifSxsb2FkaW5nTW9yZTpmdW5jdGlvbigpe3JldHVybiJMb2FkaW5nIG1vcmUgcmVzdWx0c+KApiJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihhKXt2YXIgYj0iWW91IGNhbiBvbmx5IHNlbGVjdCAiK2EubWF4aW11bSsiIGl0ZW0iO3JldHVybiAxIT1hLm1heGltdW0mJihiKz0icyIpLGJ9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVybiJObyByZXN1bHRzIGZvdW5kIn0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIlNlYXJjaGluZ+KApiJ9fX0pLGIuZGVmaW5lKCJzZWxlY3QyL2RlZmF1bHRzIixbImpxdWVyeSIsInJlcXVpcmUiLCIuL3Jlc3VsdHMiLCIuL3NlbGVjdGlvbi9zaW5nbGUiLCIuL3NlbGVjdGlvbi9tdWx0aXBsZSIsIi4vc2VsZWN0aW9uL3BsYWNlaG9sZGVyIiwiLi9zZWxlY3Rpb24vYWxsb3dDbGVhciIsIi4vc2VsZWN0aW9uL3NlYXJjaCIsIi4vc2VsZWN0aW9uL2V2ZW50UmVsYXkiLCIuL3V0aWxzIiwiLi90cmFuc2xhdGlvbiIsIi4vZGlhY3JpdGljcyIsIi4vZGF0YS9zZWxlY3QiLCIuL2RhdGEvYXJyYXkiLCIuL2RhdGEvYWpheCIsIi4vZGF0YS90YWdzIiwiLi9kYXRhL3Rva2VuaXplciIsIi4vZGF0YS9taW5pbXVtSW5wdXRMZW5ndGgiLCIuL2RhdGEvbWF4aW11bUlucHV0TGVuZ3RoIiwiLi9kYXRhL21heGltdW1TZWxlY3Rpb25MZW5ndGgiLCIuL2Ryb3Bkb3duIiwiLi9kcm9wZG93bi9zZWFyY2giLCIuL2Ryb3Bkb3duL2hpZGVQbGFjZWhvbGRlciIsIi4vZHJvcGRvd24vaW5maW5pdGVTY3JvbGwiLCIuL2Ryb3Bkb3duL2F0dGFjaEJvZHkiLCIuL2Ryb3Bkb3duL21pbmltdW1SZXN1bHRzRm9yU2VhcmNoIiwiLi9kcm9wZG93bi9zZWxlY3RPbkNsb3NlIiwiLi9kcm9wZG93bi9jbG9zZU9uU2VsZWN0IiwiLi9pMThuL2VuIl0sZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LHgseSx6LEEsQixDKXtmdW5jdGlvbiBEKCl7dGhpcy5yZXNldCgpfXJldHVybiBELnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbihsKXtpZihsPWEuZXh0ZW5kKCEwLHt9LHRoaXMuZGVmYXVsdHMsbCksbnVsbD09bC5kYXRhQWRhcHRlcil7aWYobnVsbCE9bC5hamF4P2wuZGF0YUFkYXB0ZXI9bzpudWxsIT1sLmRhdGE/bC5kYXRhQWRhcHRlcj1uOmwuZGF0YUFkYXB0ZXI9bSxsLm1pbmltdW1JbnB1dExlbmd0aD4wJiYobC5kYXRhQWRhcHRlcj1qLkRlY29yYXRlKGwuZGF0YUFkYXB0ZXIscikpLGwubWF4aW11bUlucHV0TGVuZ3RoPjAmJihsLmRhdGFBZGFwdGVyPWouRGVjb3JhdGUobC5kYXRhQWRhcHRlcixzKSksbC5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoPjAmJihsLmRhdGFBZGFwdGVyPWouRGVjb3JhdGUobC5kYXRhQWRhcHRlcix0KSksbC50YWdzJiYobC5kYXRhQWRhcHRlcj1qLkRlY29yYXRlKGwuZGF0YUFkYXB0ZXIscCkpLG51bGw9PWwudG9rZW5TZXBhcmF0b3JzJiZudWxsPT1sLnRva2VuaXplcnx8KGwuZGF0YUFkYXB0ZXI9ai5EZWNvcmF0ZShsLmRhdGFBZGFwdGVyLHEpKSxudWxsIT1sLnF1ZXJ5KXt2YXIgQz1iKGwuYW1kQmFzZSsiY29tcGF0L3F1ZXJ5Iik7bC5kYXRhQWRhcHRlcj1qLkRlY29yYXRlKGwuZGF0YUFkYXB0ZXIsQyl9aWYobnVsbCE9bC5pbml0U2VsZWN0aW9uKXt2YXIgRD1iKGwuYW1kQmFzZSsiY29tcGF0L2luaXRTZWxlY3Rpb24iKTtsLmRhdGFBZGFwdGVyPWouRGVjb3JhdGUobC5kYXRhQWRhcHRlcixEKX19aWYobnVsbD09bC5yZXN1bHRzQWRhcHRlciYmKGwucmVzdWx0c0FkYXB0ZXI9YyxudWxsIT1sLmFqYXgmJihsLnJlc3VsdHNBZGFwdGVyPWouRGVjb3JhdGUobC5yZXN1bHRzQWRhcHRlcix4KSksbnVsbCE9bC5wbGFjZWhvbGRlciYmKGwucmVzdWx0c0FkYXB0ZXI9ai5EZWNvcmF0ZShsLnJlc3VsdHNBZGFwdGVyLHcpKSxsLnNlbGVjdE9uQ2xvc2UmJihsLnJlc3VsdHNBZGFwdGVyPWouRGVjb3JhdGUobC5yZXN1bHRzQWRhcHRlcixBKSkpLG51bGw9PWwuZHJvcGRvd25BZGFwdGVyKXtpZihsLm11bHRpcGxlKWwuZHJvcGRvd25BZGFwdGVyPXU7ZWxzZXt2YXIgRT1qLkRlY29yYXRlKHUsdik7bC5kcm9wZG93bkFkYXB0ZXI9RX1pZigwIT09bC5taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCYmKGwuZHJvcGRvd25BZGFwdGVyPWouRGVjb3JhdGUobC5kcm9wZG93bkFkYXB0ZXIseikpLGwuY2xvc2VPblNlbGVjdCYmKGwuZHJvcGRvd25BZGFwdGVyPWouRGVjb3JhdGUobC5kcm9wZG93bkFkYXB0ZXIsQikpLG51bGwhPWwuZHJvcGRvd25Dc3NDbGFzc3x8bnVsbCE9bC5kcm9wZG93bkNzc3x8bnVsbCE9bC5hZGFwdERyb3Bkb3duQ3NzQ2xhc3Mpe3ZhciBGPWIobC5hbWRCYXNlKyJjb21wYXQvZHJvcGRvd25Dc3MiKTtsLmRyb3Bkb3duQWRhcHRlcj1qLkRlY29yYXRlKGwuZHJvcGRvd25BZGFwdGVyLEYpfWwuZHJvcGRvd25BZGFwdGVyPWouRGVjb3JhdGUobC5kcm9wZG93bkFkYXB0ZXIseSl9aWYobnVsbD09bC5zZWxlY3Rpb25BZGFwdGVyKXtpZihsLm11bHRpcGxlP2wuc2VsZWN0aW9uQWRhcHRlcj1lOmwuc2VsZWN0aW9uQWRhcHRlcj1kLG51bGwhPWwucGxhY2Vob2xkZXImJihsLnNlbGVjdGlvbkFkYXB0ZXI9ai5EZWNvcmF0ZShsLnNlbGVjdGlvbkFkYXB0ZXIsZikpLGwuYWxsb3dDbGVhciYmKGwuc2VsZWN0aW9uQWRhcHRlcj1qLkRlY29yYXRlKGwuc2VsZWN0aW9uQWRhcHRlcixnKSksbC5tdWx0aXBsZSYmKGwuc2VsZWN0aW9uQWRhcHRlcj1qLkRlY29yYXRlKGwuc2VsZWN0aW9uQWRhcHRlcixoKSksbnVsbCE9bC5jb250YWluZXJDc3NDbGFzc3x8bnVsbCE9bC5jb250YWluZXJDc3N8fG51bGwhPWwuYWRhcHRDb250YWluZXJDc3NDbGFzcyl7dmFyIEc9YihsLmFtZEJhc2UrImNvbXBhdC9jb250YWluZXJDc3MiKTtsLnNlbGVjdGlvbkFkYXB0ZXI9ai5EZWNvcmF0ZShsLnNlbGVjdGlvbkFkYXB0ZXIsRyl9bC5zZWxlY3Rpb25BZGFwdGVyPWouRGVjb3JhdGUobC5zZWxlY3Rpb25BZGFwdGVyLGkpfWlmKCJzdHJpbmciPT10eXBlb2YgbC5sYW5ndWFnZSlpZihsLmxhbmd1YWdlLmluZGV4T2YoIi0iKT4wKXt2YXIgSD1sLmxhbmd1YWdlLnNwbGl0KCItIiksST1IWzBdO2wubGFuZ3VhZ2U9W2wubGFuZ3VhZ2UsSV19ZWxzZSBsLmxhbmd1YWdlPVtsLmxhbmd1YWdlXTtpZihhLmlzQXJyYXkobC5sYW5ndWFnZSkpe3ZhciBKPW5ldyBrO2wubGFuZ3VhZ2UucHVzaCgiZW4iKTtmb3IodmFyIEs9bC5sYW5ndWFnZSxMPTA7TDxLLmxlbmd0aDtMKyspe3ZhciBNPUtbTF0sTj17fTt0cnl7Tj1rLmxvYWRQYXRoKE0pfWNhdGNoKGEpe3RyeXtNPXRoaXMuZGVmYXVsdHMuYW1kTGFuZ3VhZ2VCYXNlK00sTj1rLmxvYWRQYXRoKE0pfWNhdGNoKGEpe2wuZGVidWcmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybignU2VsZWN0MjogVGhlIGxhbmd1YWdlIGZpbGUgZm9yICInK00rJyIgY291bGQgbm90IGJlIGF1dG9tYXRpY2FsbHkgbG9hZGVkLiBBIGZhbGxiYWNrIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLicpO2NvbnRpbnVlfX1KLmV4dGVuZChOKX1sLnRyYW5zbGF0aW9ucz1KfWVsc2V7dmFyIE89ay5sb2FkUGF0aCh0aGlzLmRlZmF1bHRzLmFtZExhbmd1YWdlQmFzZSsiZW4iKSxQPW5ldyBrKGwubGFuZ3VhZ2UpO1AuZXh0ZW5kKE8pLGwudHJhbnNsYXRpb25zPVB9cmV0dXJuIGx9LEQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihhKXtmdW5jdGlvbiBiKGEpe3JldHVybiBsW2FdfHxhfXJldHVybiBhLnJlcGxhY2UoL1teXHUwMDAwLVx1MDA3RV0vZyxiKX1mdW5jdGlvbiBjKGQsZSl7aWYoIiI9PT1hLnRyaW0oZC50ZXJtKSlyZXR1cm4gZTtpZihlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLmxlbmd0aD4wKXtmb3IodmFyIGY9YS5leHRlbmQoITAse30sZSksZz1lLmNoaWxkcmVuLmxlbmd0aC0xO2c+PTA7Zy0tKXtudWxsPT1jKGQsZS5jaGlsZHJlbltnXSkmJmYuY2hpbGRyZW4uc3BsaWNlKGcsMSl9cmV0dXJuIGYuY2hpbGRyZW4ubGVuZ3RoPjA/ZjpjKGQsZil9dmFyIGg9YihlLnRleHQpLnRvVXBwZXJDYXNlKCksaT1iKGQudGVybSkudG9VcHBlckNhc2UoKTtyZXR1cm4gaC5pbmRleE9mKGkpPi0xP2U6bnVsbH10aGlzLmRlZmF1bHRzPXthbWRCYXNlOiIuLyIsYW1kTGFuZ3VhZ2VCYXNlOiIuL2kxOG4vIixjbG9zZU9uU2VsZWN0OiEwLGRlYnVnOiExLGRyb3Bkb3duQXV0b1dpZHRoOiExLGVzY2FwZU1hcmt1cDpqLmVzY2FwZU1hcmt1cCxsYW5ndWFnZTpDLG1hdGNoZXI6YyxtaW5pbXVtSW5wdXRMZW5ndGg6MCxtYXhpbXVtSW5wdXRMZW5ndGg6MCxtYXhpbXVtU2VsZWN0aW9uTGVuZ3RoOjAsbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6MCxzZWxlY3RPbkNsb3NlOiExLHNvcnRlcjpmdW5jdGlvbihhKXtyZXR1cm4gYX0sdGVtcGxhdGVSZXN1bHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEudGV4dH0sdGVtcGxhdGVTZWxlY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuIGEudGV4dH0sdGhlbWU6ImRlZmF1bHQiLHdpZHRoOiJyZXNvbHZlIn19LEQucHJvdG90eXBlLnNldD1mdW5jdGlvbihiLGMpe3ZhciBkPWEuY2FtZWxDYXNlKGIpLGU9e307ZVtkXT1jO3ZhciBmPWouX2NvbnZlcnREYXRhKGUpO2EuZXh0ZW5kKCEwLHRoaXMuZGVmYXVsdHMsZil9LG5ldyBEfSksYi5kZWZpbmUoInNlbGVjdDIvb3B0aW9ucyIsWyJyZXF1aXJlIiwianF1ZXJ5IiwiLi9kZWZhdWx0cyIsIi4vdXRpbHMiXSxmdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBlKGIsZSl7aWYodGhpcy5vcHRpb25zPWIsbnVsbCE9ZSYmdGhpcy5mcm9tRWxlbWVudChlKSx0aGlzLm9wdGlvbnM9Yy5hcHBseSh0aGlzLm9wdGlvbnMpLGUmJmUuaXMoImlucHV0Iikpe3ZhciBmPWEodGhpcy5nZXQoImFtZEJhc2UiKSsiY29tcGF0L2lucHV0RGF0YSIpO3RoaXMub3B0aW9ucy5kYXRhQWRhcHRlcj1kLkRlY29yYXRlKHRoaXMub3B0aW9ucy5kYXRhQWRhcHRlcixmKX19cmV0dXJuIGUucHJvdG90eXBlLmZyb21FbGVtZW50PWZ1bmN0aW9uKGEpe3ZhciBjPVsic2VsZWN0MiJdO251bGw9PXRoaXMub3B0aW9ucy5tdWx0aXBsZSYmKHRoaXMub3B0aW9ucy5tdWx0aXBsZT1hLnByb3AoIm11bHRpcGxlIikpLG51bGw9PXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmKHRoaXMub3B0aW9ucy5kaXNhYmxlZD1hLnByb3AoImRpc2FibGVkIikpLG51bGw9PXRoaXMub3B0aW9ucy5sYW5ndWFnZSYmKGEucHJvcCgibGFuZyIpP3RoaXMub3B0aW9ucy5sYW5ndWFnZT1hLnByb3AoImxhbmciKS50b0xvd2VyQ2FzZSgpOmEuY2xvc2VzdCgiW2xhbmddIikucHJvcCgibGFuZyIpJiYodGhpcy5vcHRpb25zLmxhbmd1YWdlPWEuY2xvc2VzdCgiW2xhbmddIikucHJvcCgibGFuZyIpKSksbnVsbD09dGhpcy5vcHRpb25zLmRpciYmKGEucHJvcCgiZGlyIik/dGhpcy5vcHRpb25zLmRpcj1hLnByb3AoImRpciIpOmEuY2xvc2VzdCgiW2Rpcl0iKS5wcm9wKCJkaXIiKT90aGlzLm9wdGlvbnMuZGlyPWEuY2xvc2VzdCgiW2Rpcl0iKS5wcm9wKCJkaXIiKTp0aGlzLm9wdGlvbnMuZGlyPSJsdHIiKSxhLnByb3AoImRpc2FibGVkIix0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLGEucHJvcCgibXVsdGlwbGUiLHRoaXMub3B0aW9ucy5tdWx0aXBsZSksZC5HZXREYXRhKGFbMF0sInNlbGVjdDJUYWdzIikmJih0aGlzLm9wdGlvbnMuZGVidWcmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybignU2VsZWN0MjogVGhlIGBkYXRhLXNlbGVjdDItdGFnc2AgYXR0cmlidXRlIGhhcyBiZWVuIGNoYW5nZWQgdG8gdXNlIHRoZSBgZGF0YS1kYXRhYCBhbmQgYGRhdGEtdGFncz0idHJ1ZSJgIGF0dHJpYnV0ZXMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgU2VsZWN0Mi4nKSxkLlN0b3JlRGF0YShhWzBdLCJkYXRhIixkLkdldERhdGEoYVswXSwic2VsZWN0MlRhZ3MiKSksZC5TdG9yZURhdGEoYVswXSwidGFncyIsITApKSxkLkdldERhdGEoYVswXSwiYWpheFVybCIpJiYodGhpcy5vcHRpb25zLmRlYnVnJiZ3aW5kb3cuY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIlNlbGVjdDI6IFRoZSBgZGF0YS1hamF4LXVybGAgYXR0cmlidXRlIGhhcyBiZWVuIGNoYW5nZWQgdG8gYGRhdGEtYWpheC0tdXJsYCBhbmQgc3VwcG9ydCBmb3IgdGhlIG9sZCBhdHRyaWJ1dGUgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBTZWxlY3QyLiIpLGEuYXR0cigiYWpheC0tdXJsIixkLkdldERhdGEoYVswXSwiYWpheFVybCIpKSxkLlN0b3JlRGF0YShhWzBdLCJhamF4LVVybCIsZC5HZXREYXRhKGFbMF0sImFqYXhVcmwiKSkpO3ZhciBlPXt9O2U9Yi5mbi5qcXVlcnkmJiIxLiI9PWIuZm4uanF1ZXJ5LnN1YnN0cigwLDIpJiZhWzBdLmRhdGFzZXQ/Yi5leHRlbmQoITAse30sYVswXS5kYXRhc2V0LGQuR2V0RGF0YShhWzBdKSk6ZC5HZXREYXRhKGFbMF0pO3ZhciBmPWIuZXh0ZW5kKCEwLHt9LGUpO2Y9ZC5fY29udmVydERhdGEoZik7Zm9yKHZhciBnIGluIGYpYi5pbkFycmF5KGcsYyk+LTF8fChiLmlzUGxhaW5PYmplY3QodGhpcy5vcHRpb25zW2ddKT9iLmV4dGVuZCh0aGlzLm9wdGlvbnNbZ10sZltnXSk6dGhpcy5vcHRpb25zW2ddPWZbZ10pO3JldHVybiB0aGlzfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub3B0aW9uc1thXX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy5vcHRpb25zW2FdPWJ9LGV9KSxiLmRlZmluZSgic2VsZWN0Mi9jb3JlIixbImpxdWVyeSIsIi4vb3B0aW9ucyIsIi4vdXRpbHMiLCIuL2tleXMiXSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1mdW5jdGlvbihhLGQpe251bGwhPWMuR2V0RGF0YShhWzBdLCJzZWxlY3QyIikmJmMuR2V0RGF0YShhWzBdLCJzZWxlY3QyIikuZGVzdHJveSgpLHRoaXMuJGVsZW1lbnQ9YSx0aGlzLmlkPXRoaXMuX2dlbmVyYXRlSWQoYSksZD1kfHx7fSx0aGlzLm9wdGlvbnM9bmV3IGIoZCxhKSxlLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3ZhciBmPWEuYXR0cigidGFiaW5kZXgiKXx8MDtjLlN0b3JlRGF0YShhWzBdLCJvbGQtdGFiaW5kZXgiLGYpLGEuYXR0cigidGFiaW5kZXgiLCItMSIpO3ZhciBnPXRoaXMub3B0aW9ucy5nZXQoImRhdGFBZGFwdGVyIik7dGhpcy5kYXRhQWRhcHRlcj1uZXcgZyhhLHRoaXMub3B0aW9ucyk7dmFyIGg9dGhpcy5yZW5kZXIoKTt0aGlzLl9wbGFjZUNvbnRhaW5lcihoKTt2YXIgaT10aGlzLm9wdGlvbnMuZ2V0KCJzZWxlY3Rpb25BZGFwdGVyIik7dGhpcy5zZWxlY3Rpb249bmV3IGkoYSx0aGlzLm9wdGlvbnMpLHRoaXMuJHNlbGVjdGlvbj10aGlzLnNlbGVjdGlvbi5yZW5kZXIoKSx0aGlzLnNlbGVjdGlvbi5wb3NpdGlvbih0aGlzLiRzZWxlY3Rpb24saCk7dmFyIGo9dGhpcy5vcHRpb25zLmdldCgiZHJvcGRvd25BZGFwdGVyIik7dGhpcy5kcm9wZG93bj1uZXcgaihhLHRoaXMub3B0aW9ucyksdGhpcy4kZHJvcGRvd249dGhpcy5kcm9wZG93bi5yZW5kZXIoKSx0aGlzLmRyb3Bkb3duLnBvc2l0aW9uKHRoaXMuJGRyb3Bkb3duLGgpO3ZhciBrPXRoaXMub3B0aW9ucy5nZXQoInJlc3VsdHNBZGFwdGVyIik7dGhpcy5yZXN1bHRzPW5ldyBrKGEsdGhpcy5vcHRpb25zLHRoaXMuZGF0YUFkYXB0ZXIpLHRoaXMuJHJlc3VsdHM9dGhpcy5yZXN1bHRzLnJlbmRlcigpLHRoaXMucmVzdWx0cy5wb3NpdGlvbih0aGlzLiRyZXN1bHRzLHRoaXMuJGRyb3Bkb3duKTt2YXIgbD10aGlzO3RoaXMuX2JpbmRBZGFwdGVycygpLHRoaXMuX3JlZ2lzdGVyRG9tRXZlbnRzKCksdGhpcy5fcmVnaXN0ZXJEYXRhRXZlbnRzKCksdGhpcy5fcmVnaXN0ZXJTZWxlY3Rpb25FdmVudHMoKSx0aGlzLl9yZWdpc3RlckRyb3Bkb3duRXZlbnRzKCksdGhpcy5fcmVnaXN0ZXJSZXN1bHRzRXZlbnRzKCksdGhpcy5fcmVnaXN0ZXJFdmVudHMoKSx0aGlzLmRhdGFBZGFwdGVyLmN1cnJlbnQoZnVuY3Rpb24oYSl7bC50cmlnZ2VyKCJzZWxlY3Rpb246dXBkYXRlIix7ZGF0YTphfSl9KSxhLmFkZENsYXNzKCJzZWxlY3QyLWhpZGRlbi1hY2Nlc3NpYmxlIiksYS5hdHRyKCJhcmlhLWhpZGRlbiIsInRydWUiKSx0aGlzLl9zeW5jQXR0cmlidXRlcygpLGMuU3RvcmVEYXRhKGFbMF0sInNlbGVjdDIiLHRoaXMpLGEuZGF0YSgic2VsZWN0MiIsdGhpcyl9O3JldHVybiBjLkV4dGVuZChlLGMuT2JzZXJ2YWJsZSksZS5wcm90b3R5cGUuX2dlbmVyYXRlSWQ9ZnVuY3Rpb24oYSl7dmFyIGI9IiI7cmV0dXJuIGI9bnVsbCE9YS5hdHRyKCJpZCIpP2EuYXR0cigiaWQiKTpudWxsIT1hLmF0dHIoIm5hbWUiKT9hLmF0dHIoIm5hbWUiKSsiLSIrYy5nZW5lcmF0ZUNoYXJzKDIpOmMuZ2VuZXJhdGVDaGFycyg0KSxiPWIucmVwbGFjZSgvKDp8XC58XFt8XF18LCkvZywiIiksYj0ic2VsZWN0Mi0iK2J9LGUucHJvdG90eXBlLl9wbGFjZUNvbnRhaW5lcj1mdW5jdGlvbihhKXthLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpO3ZhciBiPXRoaXMuX3Jlc29sdmVXaWR0aCh0aGlzLiRlbGVtZW50LHRoaXMub3B0aW9ucy5nZXQoIndpZHRoIikpO251bGwhPWImJmEuY3NzKCJ3aWR0aCIsYil9LGUucHJvdG90eXBlLl9yZXNvbHZlV2lkdGg9ZnVuY3Rpb24oYSxiKXt2YXIgYz0vXndpZHRoOigoWy0rXT8oWzAtOV0qXC4pP1swLTldKykocHh8ZW18ZXh8JXxpbnxjbXxtbXxwdHxwYykpL2k7aWYoInJlc29sdmUiPT1iKXt2YXIgZD10aGlzLl9yZXNvbHZlV2lkdGgoYSwic3R5bGUiKTtyZXR1cm4gbnVsbCE9ZD9kOnRoaXMuX3Jlc29sdmVXaWR0aChhLCJlbGVtZW50Iil9aWYoImVsZW1lbnQiPT1iKXt2YXIgZT1hLm91dGVyV2lkdGgoITEpO3JldHVybiBlPD0wPyJhdXRvIjplKyJweCJ9aWYoInN0eWxlIj09Yil7dmFyIGY9YS5hdHRyKCJzdHlsZSIpO2lmKCJzdHJpbmciIT10eXBlb2YgZilyZXR1cm4gbnVsbDtmb3IodmFyIGc9Zi5zcGxpdCgiOyIpLGg9MCxpPWcubGVuZ3RoO2g8aTtoKz0xKXt2YXIgaj1nW2hdLnJlcGxhY2UoL1xzL2csIiIpLGs9ai5tYXRjaChjKTtpZihudWxsIT09ayYmay5sZW5ndGg+PTEpcmV0dXJuIGtbMV19cmV0dXJuIG51bGx9cmV0dXJuIGJ9LGUucHJvdG90eXBlLl9iaW5kQWRhcHRlcnM9ZnVuY3Rpb24oKXt0aGlzLmRhdGFBZGFwdGVyLmJpbmQodGhpcyx0aGlzLiRjb250YWluZXIpLHRoaXMuc2VsZWN0aW9uLmJpbmQodGhpcyx0aGlzLiRjb250YWluZXIpLHRoaXMuZHJvcGRvd24uYmluZCh0aGlzLHRoaXMuJGNvbnRhaW5lciksdGhpcy5yZXN1bHRzLmJpbmQodGhpcyx0aGlzLiRjb250YWluZXIpfSxlLnByb3RvdHlwZS5fcmVnaXN0ZXJEb21FdmVudHM9ZnVuY3Rpb24oKXt2YXIgYj10aGlzO3RoaXMuJGVsZW1lbnQub24oImNoYW5nZS5zZWxlY3QyIixmdW5jdGlvbigpe2IuZGF0YUFkYXB0ZXIuY3VycmVudChmdW5jdGlvbihhKXtiLnRyaWdnZXIoInNlbGVjdGlvbjp1cGRhdGUiLHtkYXRhOmF9KX0pfSksdGhpcy4kZWxlbWVudC5vbigiZm9jdXMuc2VsZWN0MiIsZnVuY3Rpb24oYSl7Yi50cmlnZ2VyKCJmb2N1cyIsYSl9KSx0aGlzLl9zeW5jQT1jLmJpbmQodGhpcy5fc3luY0F0dHJpYnV0ZXMsdGhpcyksdGhpcy5fc3luY1M9Yy5iaW5kKHRoaXMuX3N5bmNTdWJ0cmVlLHRoaXMpLHRoaXMuJGVsZW1lbnRbMF0uYXR0YWNoRXZlbnQmJnRoaXMuJGVsZW1lbnRbMF0uYXR0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLHRoaXMuX3N5bmNBKTt2YXIgZD13aW5kb3cuTXV0YXRpb25PYnNlcnZlcnx8d2luZG93LldlYktpdE11dGF0aW9uT2JzZXJ2ZXJ8fHdpbmRvdy5Nb3pNdXRhdGlvbk9ic2VydmVyO251bGwhPWQ/KHRoaXMuX29ic2VydmVyPW5ldyBkKGZ1bmN0aW9uKGMpe2EuZWFjaChjLGIuX3N5bmNBKSxhLmVhY2goYyxiLl9zeW5jUyl9KSx0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHRoaXMuJGVsZW1lbnRbMF0se2F0dHJpYnV0ZXM6ITAsY2hpbGRMaXN0OiEwLHN1YnRyZWU6ITF9KSk6dGhpcy4kZWxlbWVudFswXS5hZGRFdmVudExpc3RlbmVyJiYodGhpcy4kZWxlbWVudFswXS5hZGRFdmVudExpc3RlbmVyKCJET01BdHRyTW9kaWZpZWQiLGIuX3N5bmNBLCExKSx0aGlzLiRlbGVtZW50WzBdLmFkZEV2ZW50TGlzdGVuZXIoIkRPTU5vZGVJbnNlcnRlZCIsYi5fc3luY1MsITEpLHRoaXMuJGVsZW1lbnRbMF0uYWRkRXZlbnRMaXN0ZW5lcigiRE9NTm9kZVJlbW92ZWQiLGIuX3N5bmNTLCExKSl9LGUucHJvdG90eXBlLl9yZWdpc3RlckRhdGFFdmVudHM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3RoaXMuZGF0YUFkYXB0ZXIub24oIioiLGZ1bmN0aW9uKGIsYyl7YS50cmlnZ2VyKGIsYyl9KX0sZS5wcm90b3R5cGUuX3JlZ2lzdGVyU2VsZWN0aW9uRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPVsidG9nZ2xlIiwiZm9jdXMiXTt0aGlzLnNlbGVjdGlvbi5vbigidG9nZ2xlIixmdW5jdGlvbigpe2IudG9nZ2xlRHJvcGRvd24oKX0pLHRoaXMuc2VsZWN0aW9uLm9uKCJmb2N1cyIsZnVuY3Rpb24oYSl7Yi5mb2N1cyhhKX0pLHRoaXMuc2VsZWN0aW9uLm9uKCIqIixmdW5jdGlvbihkLGUpey0xPT09YS5pbkFycmF5KGQsYykmJmIudHJpZ2dlcihkLGUpfSl9LGUucHJvdG90eXBlLl9yZWdpc3RlckRyb3Bkb3duRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLmRyb3Bkb3duLm9uKCIqIixmdW5jdGlvbihiLGMpe2EudHJpZ2dlcihiLGMpfSl9LGUucHJvdG90eXBlLl9yZWdpc3RlclJlc3VsdHNFdmVudHM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3RoaXMucmVzdWx0cy5vbigiKiIsZnVuY3Rpb24oYixjKXthLnRyaWdnZXIoYixjKX0pfSxlLnByb3RvdHlwZS5fcmVnaXN0ZXJFdmVudHM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3RoaXMub24oIm9wZW4iLGZ1bmN0aW9uKCl7YS4kY29udGFpbmVyLmFkZENsYXNzKCJzZWxlY3QyLWNvbnRhaW5lci0tb3BlbiIpfSksdGhpcy5vbigiY2xvc2UiLGZ1bmN0aW9uKCl7YS4kY29udGFpbmVyLnJlbW92ZUNsYXNzKCJzZWxlY3QyLWNvbnRhaW5lci0tb3BlbiIpfSksdGhpcy5vbigiZW5hYmxlIixmdW5jdGlvbigpe2EuJGNvbnRhaW5lci5yZW1vdmVDbGFzcygic2VsZWN0Mi1jb250YWluZXItLWRpc2FibGVkIil9KSx0aGlzLm9uKCJkaXNhYmxlIixmdW5jdGlvbigpe2EuJGNvbnRhaW5lci5hZGRDbGFzcygic2VsZWN0Mi1jb250YWluZXItLWRpc2FibGVkIil9KSx0aGlzLm9uKCJibHVyIixmdW5jdGlvbigpe2EuJGNvbnRhaW5lci5yZW1vdmVDbGFzcygic2VsZWN0Mi1jb250YWluZXItLWZvY3VzIil9KSx0aGlzLm9uKCJxdWVyeSIsZnVuY3Rpb24oYil7YS5pc09wZW4oKXx8YS50cmlnZ2VyKCJvcGVuIix7fSksdGhpcy5kYXRhQWRhcHRlci5xdWVyeShiLGZ1bmN0aW9uKGMpe2EudHJpZ2dlcigicmVzdWx0czphbGwiLHtkYXRhOmMscXVlcnk6Yn0pfSl9KSx0aGlzLm9uKCJxdWVyeTphcHBlbmQiLGZ1bmN0aW9uKGIpe3RoaXMuZGF0YUFkYXB0ZXIucXVlcnkoYixmdW5jdGlvbihjKXthLnRyaWdnZXIoInJlc3VsdHM6YXBwZW5kIix7ZGF0YTpjLHF1ZXJ5OmJ9KX0pfSksdGhpcy5vbigia2V5cHJlc3MiLGZ1bmN0aW9uKGIpe3ZhciBjPWIud2hpY2g7YS5pc09wZW4oKT9jPT09ZC5FU0N8fGM9PT1kLlRBQnx8Yz09PWQuVVAmJmIuYWx0S2V5PyhhLmNsb3NlKCksYi5wcmV2ZW50RGVmYXVsdCgpKTpjPT09ZC5FTlRFUj8oYS50cmlnZ2VyKCJyZXN1bHRzOnNlbGVjdCIse30pLGIucHJldmVudERlZmF1bHQoKSk6Yz09PWQuU1BBQ0UmJmIuY3RybEtleT8oYS50cmlnZ2VyKCJyZXN1bHRzOnRvZ2dsZSIse30pLGIucHJldmVudERlZmF1bHQoKSk6Yz09PWQuVVA/KGEudHJpZ2dlcigicmVzdWx0czpwcmV2aW91cyIse30pLGIucHJldmVudERlZmF1bHQoKSk6Yz09PWQuRE9XTiYmKGEudHJpZ2dlcigicmVzdWx0czpuZXh0Iix7fSksYi5wcmV2ZW50RGVmYXVsdCgpKTooYz09PWQuRU5URVJ8fGM9PT1kLlNQQUNFfHxjPT09ZC5ET1dOJiZiLmFsdEtleSkmJihhLm9wZW4oKSxiLnByZXZlbnREZWZhdWx0KCkpfSl9LGUucHJvdG90eXBlLl9zeW5jQXR0cmlidXRlcz1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zZXQoImRpc2FibGVkIix0aGlzLiRlbGVtZW50LnByb3AoImRpc2FibGVkIikpLHRoaXMub3B0aW9ucy5nZXQoImRpc2FibGVkIik/KHRoaXMuaXNPcGVuKCkmJnRoaXMuY2xvc2UoKSx0aGlzLnRyaWdnZXIoImRpc2FibGUiLHt9KSk6dGhpcy50cmlnZ2VyKCJlbmFibGUiLHt9KX0sZS5wcm90b3R5cGUuX3N5bmNTdWJ0cmVlPWZ1bmN0aW9uKGEsYil7dmFyIGM9ITEsZD10aGlzO2lmKCFhfHwhYS50YXJnZXR8fCJPUFRJT04iPT09YS50YXJnZXQubm9kZU5hbWV8fCJPUFRHUk9VUCI9PT1hLnRhcmdldC5ub2RlTmFtZSl7aWYoYilpZihiLmFkZGVkTm9kZXMmJmIuYWRkZWROb2Rlcy5sZW5ndGg+MClmb3IodmFyIGU9MDtlPGIuYWRkZWROb2Rlcy5sZW5ndGg7ZSsrKXt2YXIgZj1iLmFkZGVkTm9kZXNbZV07Zi5zZWxlY3RlZCYmKGM9ITApfWVsc2UgYi5yZW1vdmVkTm9kZXMmJmIucmVtb3ZlZE5vZGVzLmxlbmd0aD4wJiYoYz0hMCk7ZWxzZSBjPSEwO2MmJnRoaXMuZGF0YUFkYXB0ZXIuY3VycmVudChmdW5jdGlvbihhKXtkLnRyaWdnZXIoInNlbGVjdGlvbjp1cGRhdGUiLHtkYXRhOmF9KX0pfX0sZS5wcm90b3R5cGUudHJpZ2dlcj1mdW5jdGlvbihhLGIpe3ZhciBjPWUuX19zdXBlcl9fLnRyaWdnZXIsZD17b3Blbjoib3BlbmluZyIsY2xvc2U6ImNsb3NpbmciLHNlbGVjdDoic2VsZWN0aW5nIix1bnNlbGVjdDoidW5zZWxlY3RpbmciLGNsZWFyOiJjbGVhcmluZyJ9O2lmKHZvaWQgMD09PWImJihiPXt9KSxhIGluIGQpe3ZhciBmPWRbYV0sZz17cHJldmVudGVkOiExLG5hbWU6YSxhcmdzOmJ9O2lmKGMuY2FsbCh0aGlzLGYsZyksZy5wcmV2ZW50ZWQpcmV0dXJuIHZvaWQoYi5wcmV2ZW50ZWQ9ITApfWMuY2FsbCh0aGlzLGEsYil9LGUucHJvdG90eXBlLnRvZ2dsZURyb3Bkb3duPWZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmdldCgiZGlzYWJsZWQiKXx8KHRoaXMuaXNPcGVuKCk/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpKX0sZS5wcm90b3R5cGUub3Blbj1mdW5jdGlvbigpe3RoaXMuaXNPcGVuKCl8fHRoaXMudHJpZ2dlcigicXVlcnkiLHt9KX0sZS5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt0aGlzLmlzT3BlbigpJiZ0aGlzLnRyaWdnZXIoImNsb3NlIix7fSl9LGUucHJvdG90eXBlLmlzT3Blbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRjb250YWluZXIuaGFzQ2xhc3MoInNlbGVjdDItY29udGFpbmVyLS1vcGVuIil9LGUucHJvdG90eXBlLmhhc0ZvY3VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGNvbnRhaW5lci5oYXNDbGFzcygic2VsZWN0Mi1jb250YWluZXItLWZvY3VzIil9LGUucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKGEpe3RoaXMuaGFzRm9jdXMoKXx8KHRoaXMuJGNvbnRhaW5lci5hZGRDbGFzcygic2VsZWN0Mi1jb250YWluZXItLWZvY3VzIiksdGhpcy50cmlnZ2VyKCJmb2N1cyIse30pKX0sZS5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKGEpe3RoaXMub3B0aW9ucy5nZXQoImRlYnVnIikmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybignU2VsZWN0MjogVGhlIGBzZWxlY3QyKCJlbmFibGUiKWAgbWV0aG9kIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBsYXRlciBTZWxlY3QyIHZlcnNpb25zLiBVc2UgJGVsZW1lbnQucHJvcCgiZGlzYWJsZWQiKSBpbnN0ZWFkLicpLG51bGwhPWEmJjAhPT1hLmxlbmd0aHx8KGE9WyEwXSk7dmFyIGI9IWFbMF07dGhpcy4kZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsYil9LGUucHJvdG90eXBlLmRhdGE9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZ2V0KCJkZWJ1ZyIpJiZhcmd1bWVudHMubGVuZ3RoPjAmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybignU2VsZWN0MjogRGF0YSBjYW4gbm8gbG9uZ2VyIGJlIHNldCB1c2luZyBgc2VsZWN0MigiZGF0YSIpYC4gWW91IHNob3VsZCBjb25zaWRlciBzZXR0aW5nIHRoZSB2YWx1ZSBpbnN0ZWFkIHVzaW5nIGAkZWxlbWVudC52YWwoKWAuJyk7dmFyIGE9W107cmV0dXJuIHRoaXMuZGF0YUFkYXB0ZXIuY3VycmVudChmdW5jdGlvbihiKXthPWJ9KSxhfSxlLnByb3RvdHlwZS52YWw9ZnVuY3Rpb24oYil7aWYodGhpcy5vcHRpb25zLmdldCgiZGVidWciKSYmd2luZG93LmNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCdTZWxlY3QyOiBUaGUgYHNlbGVjdDIoInZhbCIpYCBtZXRob2QgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGxhdGVyIFNlbGVjdDIgdmVyc2lvbnMuIFVzZSAkZWxlbWVudC52YWwoKSBpbnN0ZWFkLicpLG51bGw9PWJ8fDA9PT1iLmxlbmd0aClyZXR1cm4gdGhpcy4kZWxlbWVudC52YWwoKTt2YXIgYz1iWzBdO2EuaXNBcnJheShjKSYmKGM9YS5tYXAoYyxmdW5jdGlvbihhKXtyZXR1cm4gYS50b1N0cmluZygpfSkpLHRoaXMuJGVsZW1lbnQudmFsKGMpLnRyaWdnZXIoImNoYW5nZSIpfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy4kY29udGFpbmVyLnJlbW92ZSgpLHRoaXMuJGVsZW1lbnRbMF0uZGV0YWNoRXZlbnQmJnRoaXMuJGVsZW1lbnRbMF0uZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLHRoaXMuX3N5bmNBKSxudWxsIT10aGlzLl9vYnNlcnZlcj8odGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuX29ic2VydmVyPW51bGwpOnRoaXMuJGVsZW1lbnRbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lciYmKHRoaXMuJGVsZW1lbnRbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQXR0ck1vZGlmaWVkIix0aGlzLl9zeW5jQSwhMSksdGhpcy4kZWxlbWVudFswXS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Ob2RlSW5zZXJ0ZWQiLHRoaXMuX3N5bmNTLCExKSx0aGlzLiRlbGVtZW50WzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTU5vZGVSZW1vdmVkIix0aGlzLl9zeW5jUywhMSkpLHRoaXMuX3N5bmNBPW51bGwsdGhpcy5fc3luY1M9bnVsbCx0aGlzLiRlbGVtZW50Lm9mZigiLnNlbGVjdDIiKSx0aGlzLiRlbGVtZW50LmF0dHIoInRhYmluZGV4IixjLkdldERhdGEodGhpcy4kZWxlbWVudFswXSwib2xkLXRhYmluZGV4IikpLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInNlbGVjdDItaGlkZGVuLWFjY2Vzc2libGUiKSx0aGlzLiRlbGVtZW50LmF0dHIoImFyaWEtaGlkZGVuIiwiZmFsc2UiKSxjLlJlbW92ZURhdGEodGhpcy4kZWxlbWVudFswXSksdGhpcy4kZWxlbWVudC5yZW1vdmVEYXRhKCJzZWxlY3QyIiksdGhpcy5kYXRhQWRhcHRlci5kZXN0cm95KCksdGhpcy5zZWxlY3Rpb24uZGVzdHJveSgpLHRoaXMuZHJvcGRvd24uZGVzdHJveSgpLHRoaXMucmVzdWx0cy5kZXN0cm95KCksdGhpcy5kYXRhQWRhcHRlcj1udWxsLHRoaXMuc2VsZWN0aW9uPW51bGwsdGhpcy5kcm9wZG93bj1udWxsLHRoaXMucmVzdWx0cz1udWxsfSxlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgYj1hKCc8c3BhbiBjbGFzcz0ic2VsZWN0MiBzZWxlY3QyLWNvbnRhaW5lciI+PHNwYW4gY2xhc3M9InNlbGVjdGlvbiI+PC9zcGFuPjxzcGFuIGNsYXNzPSJkcm9wZG93bi13cmFwcGVyIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zcGFuPjwvc3Bhbj4nKTtyZXR1cm4gYi5hdHRyKCJkaXIiLHRoaXMub3B0aW9ucy5nZXQoImRpciIpKSx0aGlzLiRjb250YWluZXI9Yix0aGlzLiRjb250YWluZXIuYWRkQ2xhc3MoInNlbGVjdDItY29udGFpbmVyLS0iK3RoaXMub3B0aW9ucy5nZXQoInRoZW1lIikpLGMuU3RvcmVEYXRhKGJbMF0sImVsZW1lbnQiLHRoaXMuJGVsZW1lbnQpLGJ9LGV9KSxiLmRlZmluZSgianF1ZXJ5LW1vdXNld2hlZWwiLFsianF1ZXJ5Il0sZnVuY3Rpb24oYSl7cmV0dXJuIGF9KSxiLmRlZmluZSgianF1ZXJ5LnNlbGVjdDIiLFsianF1ZXJ5IiwianF1ZXJ5LW1vdXNld2hlZWwiLCIuL3NlbGVjdDIvY29yZSIsIi4vc2VsZWN0Mi9kZWZhdWx0cyIsIi4vc2VsZWN0Mi91dGlscyJdLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYobnVsbD09YS5mbi5zZWxlY3QyKXt2YXIgZj1bIm9wZW4iLCJjbG9zZSIsImRlc3Ryb3kiXTthLmZuLnNlbGVjdDI9ZnVuY3Rpb24oYil7aWYoIm9iamVjdCI9PXR5cGVvZihiPWJ8fHt9KSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YS5leHRlbmQoITAse30sYik7bmV3IGMoYSh0aGlzKSxkKX0pLHRoaXM7aWYoInN0cmluZyI9PXR5cGVvZiBiKXt2YXIgZCxnPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGE9ZS5HZXREYXRhKHRoaXMsInNlbGVjdDIiKTtudWxsPT1hJiZ3aW5kb3cuY29uc29sZSYmY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcigiVGhlIHNlbGVjdDIoJyIrYisiJykgbWV0aG9kIHdhcyBjYWxsZWQgb24gYW4gZWxlbWVudCB0aGF0IGlzIG5vdCB1c2luZyBTZWxlY3QyLiIpLGQ9YVtiXS5hcHBseShhLGcpfSksYS5pbkFycmF5KGIsZik+LTE/dGhpczpkfXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhcmd1bWVudHMgZm9yIFNlbGVjdDI6ICIrYil9fXJldHVybiBudWxsPT1hLmZuLnNlbGVjdDIuZGVmYXVsdHMmJihhLmZuLnNlbGVjdDIuZGVmYXVsdHM9ZCksY30pLHtkZWZpbmU6Yi5kZWZpbmUscmVxdWlyZTpiLnJlcXVpcmV9fSgpLGM9Yi5yZXF1aXJlKCJqcXVlcnkuc2VsZWN0MiIpO3JldHVybiBhLmZuLnNlbGVjdDIuYW1kPWIsY30pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmluZFJlcGxhY2UvRmluZFJlcGxhY2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL0ZpbmRSZXBsYWNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NWU2ODMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL0ZpbmRSZXBsYWNlLmpzCkBAIC0wLDAgKzEsNDIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwNCisgRmluZCBhbmQgUmVwbGFjZSBQbHVnaW4gZm9yIEhUTUxBcmVhLTMuMA0KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyBhdXRob3I6IENhdSBndWFuYWJhcmEgDQorIGUtbWFpbDogY2F1Z2JAaWJlc3QuY29tLmJyDQorXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK2Z1bmN0aW9uIEZpbmRSZXBsYWNlKGVkaXRvcikgew0KK3RoaXMuZWRpdG9yID0gZWRpdG9yOw0KK3ZhciBjZmcgPSBlZGl0b3IuY29uZmlnOw0KK3ZhciBzZWxmID0gdGhpczsNCitjZmcucmVnaXN0ZXJCdXR0b24oIkZSLWZpbmRyZXBsYWNlIiwgdGhpcy5fbGMoIkZpbmQgYW5kIFJlcGxhY2UiKSwNCisgICAgICAgICAgICAgICAgICAgZWRpdG9yLmltZ1VSTCgiZWRfZmluZC5naWYiLCAiRmluZFJlcGxhY2UiKSwgZmFsc2UsDQorICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGVkaXRvcikgeyBzZWxmLmJ1dHRvblByZXNzKGVkaXRvcik7IH0pOw0KK2NmZy5hZGRUb29sYmFyRWxlbWVudChbIkZSLWZpbmRyZXBsYWNlIiwic2VwYXJhdG9yIl0sIFsiZm9ybWF0YmxvY2siLCJmb250c2l6ZSIsImZvbnRuYW1lIl0sIC0xKTsNCit9DQorDQorRmluZFJlcGxhY2UucHJvdG90eXBlLmJ1dHRvblByZXNzID0gZnVuY3Rpb24oZWRpdG9yKSB7IA0KK0ZpbmRSZXBsYWNlLmVkaXRvciA9IGVkaXRvcjsNCit2YXIgc2VsID0gZWRpdG9yLmdldFNlbGVjdGVkSFRNTCgpOw0KKyAgaWYoL1x3Ly50ZXN0KHNlbCkpIHsNCisgIHNlbCA9IHNlbC5yZXBsYWNlKC88W14+XSo+L2csIiIpOw0KKyAgc2VsID0gc2VsLnJlcGxhY2UoLyZuYnNwOy9nLCIiKTsNCisgIH0NCit2YXIgcGFyYW0gPSAvXHcvLnRlc3Qoc2VsKSA/IHtmcl9wYXR0ZXJuOiBzZWx9IDogbnVsbDsNCitlZGl0b3IuX3BvcHVwRGlhbG9nKCJwbHVnaW46Ly9GaW5kUmVwbGFjZS9maW5kX3JlcGxhY2UiLCBudWxsLCBwYXJhbSk7DQorfTsNCisNCitGaW5kUmVwbGFjZS5fcGx1Z2luSW5mbyA9IHsNCisgIG5hbWUgICAgICAgICAgOiAiRmluZFJlcGxhY2UiLA0KKyAgdmVyc2lvbiAgICAgICA6ICIxLjAgLSBiZXRhIiwNCisgIGRldmVsb3BlciAgICAgOiAiQ2F1IEd1YW5hYmFyYSIsDQorICBkZXZlbG9wZXJfdXJsIDogIm1haWx0bzpjYXVnYkBpYmVzdC5jb20uYnIiLA0KKyAgY19vd25lciAgICAgICA6ICJDYXUgR3VhbmFiYXJhIiwNCisgIHNwb25zb3IgICAgICAgOiAiSW5kZXBlbmRlbnQgcHJvZHVjdGlvbiIsDQorICBzcG9uc29yX3VybCAgIDogImh0dHA6Ly93d3cubmV0Zmxhc2guY29tLmJyL2diL0hBMy1yYzEvZXhhbXBsZXMvZmluZC1yZXBsYWNlLmh0bWwiLA0KKyAgbGljZW5zZSAgICAgICA6ICJodG1sQXJlYSINCit9Ow0KKw0KK0ZpbmRSZXBsYWNlLnByb3RvdHlwZS5fbGMgPSBmdW5jdGlvbihzdHJpbmcpIHsNCisgICAgcmV0dXJuIFhpbmhhLl9sYyhzdHJpbmcsICdGaW5kUmVwbGFjZScpOw0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9mcl9lbmdpbmUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL2ZyX2VuZ2luZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjQ4NDg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9mcl9lbmdpbmUuanMKQEAgLTAsMCArMSwxNDkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwNCisgRmluZCBhbmQgUmVwbGFjZSBQbHVnaW4gZm9yIEhUTUxBcmVhLTMuMA0KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyBhdXRob3I6IENhdSBndWFuYWJhcmEgDQorIGUtbWFpbDogY2F1Z2JAaWJlc3QuY29tLmJyDQorXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZhciBGaW5kUmVwbGFjZSA9IHdpbmRvdy5vcGVuZXIuRmluZFJlcGxhY2U7DQordmFyIGVkaXRvciA9IEZpbmRSZXBsYWNlLmVkaXRvcjsNCit2YXIgaXNfbW8gPSB3aW5kb3cub3BlbmVyLlhpbmhhLmlzX2dlY2tvOw0KK3ZhciB0b3NlYXJjaCA9ICcnOw0KK3ZhciBwYXRlciA9IG51bGw7DQordmFyIGJ1ZmZlciA9IG51bGw7DQordmFyIG1hdGNoZXMgPSAwOw0KK3ZhciByZXBsYWNlcyA9IDA7DQordmFyIGZyX3NwYW5zID0gbmV3IEFycmF5KCk7DQorZnVuY3Rpb24gX2xjKHN0cmluZykgew0KKyAgICByZXR1cm4od2luZG93Lm9wZW5lci5YaW5oYS5fbGMoc3RyaW5nLCAnRmluZFJlcGxhY2UnKSk7DQorfQ0KK2Z1bmN0aW9uIGV4ZWNTZWFyY2gocGFyYW1zKSB7DQordmFyIGlodG1sID0gZWRpdG9yLl9kb2MuYm9keS5pbm5lckhUTUw7DQorICBpZihidWZmZXIgPT0gbnVsbCkgDQorICAgIGJ1ZmZlciA9IGlodG1sOw0KKyAgICANCisgIGlmKHBhcmFtc1snZnJfcGF0dGVybiddICE9IHRvc2VhcmNoKSB7DQorICAgIGlmKHRvc2VhcmNoICE9ICcnKQ0KKyAgICAgIGNsZWFyRG9jKCk7DQorICB0b3NlYXJjaCA9IHBhcmFtc1snZnJfcGF0dGVybiddOw0KKyAgfQ0KKyAgDQorICBpZihtYXRjaGVzID09IDApIHsNCisgIGVyID0gcGFyYW1zWydmcl93b3JkcyddID8gIi8oPyE8W14+XSopKFxcYiIrcGFyYW1zWydmcl9wYXR0ZXJuJ10rIlxcYikoPyFbXjxdKj4pL2ciIDoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi8oPyE8W14+XSopKCIrcGFyYW1zWydmcl9wYXR0ZXJuJ10rIikoPyFbXjxdKj4pL2ciOw0KKyAgICBpZighcGFyYW1zWydmcl9tYXRjaGNhc2UnXSkNCisgICAgICBlciArPSAiaSI7IA0KKw0KKyAgcGF0ZXIgPSBldmFsKGVyKTsNCisgIA0KKyAgdmFyIHRhZ28gPSAnPHNwYW4gaWQ9ZnJtYXJrPic7DQorICB2YXIgdGFnYyA9ICc8L3NwYW4+JzsNCisgIHZhciBuZXdIdG1sID0gaWh0bWwucmVwbGFjZShwYXRlcix0YWdvKyIkMSIrdGFnYyk7DQorICANCisgIGVkaXRvci5zZXRIVE1MKG5ld0h0bWwpOw0KKyAgDQorICB2YXIgZ2V0YWxsc3BhbnMgPSBlZGl0b3IuX2RvYy5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzcGFuIik7IA0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdldGFsbHNwYW5zLmxlbmd0aDsgaSsrKSANCisgICAgICBpZigvXmZybWFyay8udGVzdChnZXRhbGxzcGFuc1tpXS5pZCkpDQorICAgICAgICBmcl9zcGFucy5wdXNoKGdldGFsbHNwYW5zW2ldKTsNCisgIH0NCisNCitzcGFuV2Fsa2VyKHBhcmFtc1snZnJfcGF0dGVybiddLHBhcmFtc1snZnJfcmVwbGFjZW1lbnQnXSxwYXJhbXNbJ2ZyX3JlcGxhY2VhbGwnXSk7DQorfQ0KKw0KK2Z1bmN0aW9uIHNwYW5XYWxrZXIocGF0dGVybixyZXBsYWNlbWVudCxyZXBsYWNlYWxsKSB7DQordmFyIGZvdW5kdHJ1ZSA9IGZhbHNlOw0KK2NsZWFyTWFya3MoKTsNCisNCisgIGZvciAodmFyIGkgPSBtYXRjaGVzOyBpIDwgZnJfc3BhbnMubGVuZ3RoOyBpKyspIHsNCisgIHZhciBlbG0gPSBmcl9zcGFuc1tpXTsNCisgIGZvdW5kdHJ1ZSA9IHRydWU7DQorICAgIGlmKCEoL1swLTldJC8udGVzdChlbG0uaWQpKSkgeyANCisgICAgbWF0Y2hlcysrOw0KKyAgICBkaXNhYignZnJfY2xlYXInLGZhbHNlKTsNCisgICAgZWxtLmlkID0gJ2ZybWFya18nK21hdGNoZXM7DQorICAgIGVsbS5zdHlsZS5jb2xvciA9ICd3aGl0ZSc7DQorICAgIGVsbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnaGlnaGxpZ2h0JzsNCisgICAgZWxtLnN0eWxlLmZvbnRXZWlnaHQgPSAnYm9sZCc7DQorICAgIGVsbS5zY3JvbGxJbnRvVmlldyhmYWxzZSk7DQorICAgICAgaWYoL1x3Ly50ZXN0KHJlcGxhY2VtZW50KSkgew0KKyAgICAgICAgaWYocmVwbGFjZWFsbCB8fCBjb25maXJtKF9sYygiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IikpKSB7DQorICAgICAgICBlbG0uZmlyc3RDaGlsZC5yZXBsYWNlRGF0YSgwLGVsbS5maXJzdENoaWxkLmRhdGEubGVuZ3RoLHJlcGxhY2VtZW50KTsNCisgICAgICAgIHJlcGxhY2VzKys7DQorICAgICAgICBkaXNhYignZnJfdW5kbycsZmFsc2UpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYocmVwbGFjZWFsbCkgew0KKyAgICAgICAgY2xlYXJNYXJrcygpOw0KKyAgICAgICAgY29udGludWU7DQorICAgICAgICB9DQorICAgICAgfQ0KKyAgICBicmVhazsNCisgICAgfQ0KKyAgfQ0KKyAgdmFyIGxhc3QgPSAoaSA+PSBmcl9zcGFucy5sZW5ndGggLSAxKTsNCisgIGlmKGxhc3QgfHwgIWZvdW5kdHJ1ZSkgeyAvLyBFT0YNCisgIHZhciBtZXNzYWdlID0gX2xjKCJEb25lIikrJzpcblxuJzsNCisgICAgaWYobWF0Y2hlcyA+IDApIHsNCisgICAgICBpZihtYXRjaGVzID09IDEpIG1lc3NhZ2UgKz0gbWF0Y2hlcysnICcrX2xjKCJmb3VuZCBpdGVtIik7DQorICAgICAgZWxzZSAgICAgICAgICAgICBtZXNzYWdlICs9IG1hdGNoZXMrJyAnK19sYygiZm91bmQgaXRlbXMiKTsNCisgICAgICBpZihyZXBsYWNlcyA+IDApIHsNCisgICAgICAgIGlmKHJlcGxhY2VzID09IDEpIG1lc3NhZ2UgKz0gJyxcbicrcmVwbGFjZXMrJyAnK19sYygicmVwbGFjZWQgaXRlbSIpOw0KKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgbWVzc2FnZSArPSAnLFxuJytyZXBsYWNlcysnICcrX2xjKCJyZXBsYWNlZCBpdGVtcyIpOw0KKyAgICAgIH0NCisgICAgaGlsaXRlQWxsKCk7DQorICAgIGRpc2FiKCdmcl9oaWxpdGVhbGwnLGZhbHNlKTsNCisgICAgfSBlbHNlIHsgbWVzc2FnZSArPSAnIicrcGF0dGVybisnIiAnK19sYygibm90IGZvdW5kIik7IH0NCisgIGFsZXJ0KG1lc3NhZ2UrJy4nKTsNCisgIH0NCit9DQorDQorZnVuY3Rpb24gY2xlYXJEb2MoKSB7DQordmFyIGRvYyA9IGVkaXRvci5fZG9jLmJvZHkuaW5uZXJIVE1MOyANCit2YXIgZXIgPSAvKDxzcGFuXHMrW14+XSppZD0uP2ZybWFya1tePl0qPikoW148Pl0qKSg8XC9zcGFuPikvZ2k7DQorZWRpdG9yLl9kb2MuYm9keS5pbm5lckhUTUwgPSBkb2MucmVwbGFjZShlciwiJDIiKTsNCitwYXRlciA9IG51bGw7DQordG9zZWFyY2ggPSAnJzsNCitmcl9zcGFucyA9IG5ldyBBcnJheSgpOw0KK21hdGNoZXMgPSAwOw0KK3JlcGxhY2VzID0gMDsNCitkaXNhYigiZnJfaGlsaXRlYWxsLGZyX2NsZWFyIix0cnVlKTsNCit9DQorDQorZnVuY3Rpb24gY2xlYXJNYXJrcygpIHsNCit2YXIgZ2V0YWxsID0gZWRpdG9yLl9kb2MuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3BhbiIpOyANCisgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2V0YWxsLmxlbmd0aDsgaSsrKSB7DQorICB2YXIgZWxtID0gZ2V0YWxsW2ldOw0KKyAgICBpZigvXmZybWFyay8udGVzdChlbG0uaWQpKSB7DQorICAgIHZhciBvYmpTdHlsZSA9IGVkaXRvci5fZG9jLmdldEVsZW1lbnRCeUlkKGVsbS5pZCkuc3R5bGU7DQorICAgIG9ialN0eWxlLmJhY2tncm91bmRDb2xvciA9ICIiOw0KKyAgICBvYmpTdHlsZS5jb2xvciA9ICIiOw0KKyAgICBvYmpTdHlsZS5mb250V2VpZ2h0ID0gIiI7DQorICAgIH0NCisgIH0NCit9DQorDQorZnVuY3Rpb24gaGlsaXRlQWxsKCkgeyANCit2YXIgZ2V0YWxsID0gZWRpdG9yLl9kb2MuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3BhbiIpOyANCisgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2V0YWxsLmxlbmd0aDsgaSsrKSB7DQorICB2YXIgZWxtID0gZ2V0YWxsW2ldOw0KKyAgICBpZigvXmZybWFyay8udGVzdChlbG0uaWQpKSB7IA0KKyAgICB2YXIgb2JqU3R5bGUgPSBlZGl0b3IuX2RvYy5nZXRFbGVtZW50QnlJZChlbG0uaWQpLnN0eWxlOw0KKyAgICBvYmpTdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAiaGlnaGxpZ2h0IjsNCisgICAgb2JqU3R5bGUuY29sb3IgPSAid2hpdGUiOw0KKyAgICBvYmpTdHlsZS5mb250V2VpZ2h0ID0gImJvbGQiOw0KKyAgICB9DQorICB9DQorfQ0KKw0KK2Z1bmN0aW9uIHJlc2V0Q29udGVudHMoKSB7IA0KKyAgaWYoYnVmZmVyID09IG51bGwpIHJldHVybjsNCit2YXIgdHJhbnNwID0gZWRpdG9yLl9kb2MuYm9keS5pbm5lckhUTUw7DQorZWRpdG9yLl9kb2MuYm9keS5pbm5lckhUTUwgPSBidWZmZXI7DQorYnVmZmVyID0gdHJhbnNwOw0KK30NCisNCitmdW5jdGlvbiBkaXNhYihlbG1zLHRvc2V0KSB7IA0KK3ZhciBuYW1lcyA9IGVsbXMuc3BsaXQoL1ssOyBdKy8pOw0KKyAgZm9yKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSANCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobmFtZXNbaV0pLmRpc2FibGVkID0gdG9zZXQ7DQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmluZFJlcGxhY2UvaW1nL2VkX2ZpbmQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9pbWcvZWRfZmluZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE4NzdkNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmluZFJlcGxhY2UvaW1nL2VkX2ZpbmQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmluZFJlcGxhY2UvbGFuZy9jei5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmluZFJlcGxhY2UvbGFuZy9jei5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjk3ODJhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9sYW5nL2N6LmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY3oiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiUmVwbGFjZSB3aXRoOiI6ICJaYW3Em25pdCB6YSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9sYW5nL2RhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9sYW5nL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZTY2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL2xhbmcvZGEuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDbGVhciI6ICJGb3J0cnlkIiwKKyAgICAiUmVwbGFjZSB3aXRoOiI6ICJFcnN0YXQgbWVkIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL2xhbmcvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NkNmY4MwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmluZFJlcGxhY2UvbGFuZy9kZS5qcwpAQCAtMCwwICsxLDMyIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhc2Ugc2Vuc2l0aXZlIHNlYXJjaCI6ICJHcm/Dny0vS2xlaW5zY2hyZWlidW5nIiwKKyAgICAiQ2xlYXIiOiAiTsOkY2hzdGVzIGVyc2V0emVuIiwKKyAgICAiRG9uZSI6ICJGZXJ0aWciLAorICAgICJFbnRlciB0aGUgdGV4dCB5b3Ugd2FudCB0byBmaW5kIjogIkdlYmVuIFNpZSBlaW5lbiBUZXh0IGVpbiBkZW4gU2llIGZpbmRlbiBtw7ZjaHRlbiIsCisgICAgIkZpbmQgYW5kIFJlcGxhY2UiOiAiU3VjaGVuIHVuZCBlcnNldHplbiIsCisgICAgIkhpZ2hsaWdodCI6ICJIZXJ2b3JoZWJlbiIsCisgICAgIkluZm9ybSBhIHJlcGxhY2VtZW50IHdvcmQiOiAiR2ViZW4gc2llIGVpbmVuIFRleHQgenVtIGVyc2V0emVuIGVpbiIsCisgICAgIk5leHQiOiAiTsOkY2hzdGVyIiwKKyAgICAiT3B0aW9ucyI6ICJPcHRpb25lbiIsCisgICAgIlJlcGxhY2Ugd2l0aDoiOiAiRXJzZXR6ZW4gZHVyY2g6IiwKKyAgICAiU2VhcmNoIGZvcjoiOiAiU3VjaGVuIG5hY2g6IiwKKyAgICAiU3Vic3RpdHV0ZSBhbGwgb2NjdXJyZW5jZXMiOiAiYWxsZSBUcmVmZmVyIGVyc2V0emVuIiwKKyAgICAiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IjogIlRyZWZmZXIgZXJzZXR6ZW4/IiwKKyAgICAiVW5kbyI6ICJSw7xja2fDpG5naWciLAorICAgICJXaG9sZSB3b3JkcyBvbmx5IjogIkdhbnplIFfDtnJ0ZXIiLAorICAgICJmb3VuZCBpdGVtIjogIlRyZWZmZXIiLAorICAgICJmb3VuZCBpdGVtcyI6ICJhbGxlIFRyZWZmZXIiLAorICAgICJub3QgZm91bmQiOiAia2VpbiBUZWZmZXIiLAorICAgICJyZXBsYWNlZCBpdGVtIjogImVyc2V0enRlciBUcmVmZmVyIiwKKyAgICAicmVwbGFjZWQgaXRlbXMiOiAiZXJzZXR6dGUgVHJlZmZlciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9sYW5nL2VzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9sYW5nL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1Yzk2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL2xhbmcvZXMuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlcyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDbGVhciI6ICJFbGltaW5hciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9sYW5nL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYTQ5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL2xhbmcvZnIuanMKQEAgLTAsMCArMSwzMiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAiUmVjaGVyY2hlIHNlbnNpYmxlIMOgIGxhIGNhc3NlIiwKKyAgICAiQ2xlYXIiOiAiRWZmYWNlciIsCisgICAgIkRvbmUiOiAiRmluIiwKKyAgICAiRW50ZXIgdGhlIHRleHQgeW91IHdhbnQgdG8gZmluZCI6ICJUZXh0ZSDDoCB0cm91dmVyIiwKKyAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICJDaGVyY2hlciBldCBSZW1wbGFjZXIiLAorICAgICJIaWdobGlnaHQiOiAiU3VybGlnbmVyIiwKKyAgICAiSW5mb3JtIGEgcmVwbGFjZW1lbnQgd29yZCI6ICJJbmRpcXVleiB1biBtb3QgZGUgcmVtcGxhY2VtZW50IiwKKyAgICAiTmV4dCI6ICJTdWl2YW50IiwKKyAgICAiT3B0aW9ucyI6ICJPcHRpb25zIiwKKyAgICAiUmVwbGFjZSB3aXRoOiI6ICJSZW1wbGFjZXIgcGFyIiwKKyAgICAiU2VhcmNoIGZvcjoiOiAiQ2hlcmNoZXIiLAorICAgICJTdWJzdGl0dXRlIGFsbCBvY2N1cnJlbmNlcyI6ICJSZW1wbGFjZXIgdG91dGVzIGxlcyBvY2N1cmVuY2VzIiwKKyAgICAiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IjogIlJlbXBsYWNlciBjZXR0ZSBvY2N1cnJlbmNlID8iLAorICAgICJVbmRvIjogIkFubnVsZXIiLAorICAgICJXaG9sZSB3b3JkcyBvbmx5IjogIk1vdHMgZW50aWVycyBzZXVsZW1lbnQiLAorICAgICJmb3VuZCBpdGVtIjogIsOpbMOpbWVudCB0cm91dsOpIiwKKyAgICAiZm91bmQgaXRlbXMiOiAiw6lsw6ltZW50cyB0cm91dsOpcyIsCisgICAgIm5vdCBmb3VuZCI6ICJub24gdHJvdXbDqSIsCisgICAgInJlcGxhY2VkIGl0ZW0iOiAiw6lsw6ltZW50IHJlbXBsYWPDqSIsCisgICAgInJlcGxhY2VkIGl0ZW1zIjogIsOpbMOpbWVudHMgcmVtcGxhY8OpcyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9sYW5nL2hlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYjY4OGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL2xhbmcvaGUuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJoZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJSZXBsYWNlIHdpdGg6IjogIteU15fXnNejINeRLSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9sYW5nL2h1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9sYW5nL2h1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMzJkOTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL2xhbmcvaHUuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJodSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJSZXBsYWNlIHdpdGg6IjogIkNzZXJlIGEga8O2dmV0a2V6xZFyZToiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmluZFJlcGxhY2UvbGFuZy9qYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmluZFJlcGxhY2UvbGFuZy9qYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGMwNTBmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9sYW5nL2phLmpzCkBAIC0wLDAgKzEsMzIgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiamEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FzZSBzZW5zaXRpdmUgc2VhcmNoIjogIuWkp+aWh+Wtly/lsI/mloflrZfljLrliKUiLAorICAgICJDbGVhciI6ICLpgJrluLjooajnpLoiLAorICAgICJEb25lIjogIue1guS6hiIsCisgICAgIkVudGVyIHRoZSB0ZXh0IHlvdSB3YW50IHRvIGZpbmQiOiAi5qSc57Si44GX44Gf44GE44OG44Kt44K544OI44KS5YWl5Yqb44GX44G+44GZIiwKKyAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICLmpJzntKIv572u5o+bIiwKKyAgICAiSGlnaGxpZ2h0IjogIuW8t+iqv+ihqOekuiIsCisgICAgIkluZm9ybSBhIHJlcGxhY2VtZW50IHdvcmQiOiAi5Y2Y6Kqe44Gu572u5o+b44KS55+l44KJ44Gb44KLIiwKKyAgICAiTmV4dCI6ICLmrKHjgpLmpJzntKIiLAorICAgICJPcHRpb25zIjogIuioreWumiIsCisgICAgIlJlcGxhY2Ugd2l0aDoiOiAi572u5o+bOiIsCisgICAgIlNlYXJjaCBmb3I6IjogIuaknOe0ojoiLAorICAgICJTdWJzdGl0dXRlIGFsbCBvY2N1cnJlbmNlcyI6ICLjgZnjgbnjgabnva7mj5siLAorICAgICJTdWJzdGl0dXRlIHRoaXMgb2NjdXJyZW5jZT8iOiAi572u5o+b44GX44G+44GZ44GLPyIsCisgICAgIlVuZG8iOiAi5YWD44Gr5oi744GZIiwKKyAgICAiV2hvbGUgd29yZHMgb25seSI6ICLlrozlhajkuIDoh7Tjga7jgb8iLAorICAgICJmb3VuZCBpdGVtIjogIuS7tuOBjOaknOe0ouOBleOCjOOBvuOBl+OBnyIsCisgICAgImZvdW5kIGl0ZW1zIjogIuS7tuOBjOaknOe0ouOBleOCjOOBvuOBl+OBnyIsCisgICAgIm5vdCBmb3VuZCI6ICLjga/jgYLjgorjgb7jgZvjgpMiLAorICAgICJyZXBsYWNlZCBpdGVtIjogIuS7tuOBjOe9ruaPm+OBleOCjOOBvuOBl+OBnyIsCisgICAgInJlcGxhY2VkIGl0ZW1zIjogIuS7tuOBjOe9ruaPm+OBleOCjOOBvuOBl+OBnyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9sYW5nL2xjX2Jhc2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL2xhbmcvbGNfYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjczMWUyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSw0NSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICInO1xyXG4gIHZhciB0YWdjID0gJyI6ICIiLAorICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAiIiwKKyAgICAiQ2xlYXIiOiAiIiwKKyAgICAiRG9uZSI6ICIiLAorICAgICJFbnRlciB0aGUgdGV4dCB5b3Ugd2FudCB0byBmaW5kIjogIiIsCisgICAgIkZpbmQgYW5kIFJlcGxhY2UiOiAiIiwKKyAgICAiSGlnaGxpZ2h0IjogIiIsCisgICAgIkluZm9ybSBhIHJlcGxhY2VtZW50IHdvcmQiOiAiIiwKKyAgICAiTmV4dCI6ICIiLAorICAgICJPcHRpb25zIjogIiIsCisgICAgIlJlcGxhY2Ugd2l0aDoiOiAiIiwKKyAgICAiU2VhcmNoIGZvcjoiOiAiIiwKKyAgICAiU3Vic3RpdHV0ZSBhbGwgb2NjdXJyZW5jZXMiOiAiIiwKKyAgICAiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IjogIiIsCisgICAgIlVuZG8iOiAiIiwKKyAgICAiV2hvbGUgd29yZHMgb25seSI6ICIiLAorICAgICJmb3VuZCBpdGVtIjogIiIsCisgICAgImZvdW5kIGl0ZW1zIjogIiIsCisgICAgIm5vdCBmb3VuZCI6ICIiLAorICAgICJyZXBsYWNlZCBpdGVtIjogIiIsCisgICAgInJlcGxhY2VkIGl0ZW1zIjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL2xhbmcvbmIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlMzA2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmluZFJlcGxhY2UvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDMyIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhc2Ugc2Vuc2l0aXZlIHNlYXJjaCI6ICJTa2lsbGUgbWVsbG9tIHN0b3JlIG9nIHNtw6UgYm9rc3RhdmVyIiwKKyAgICAiQ2xlYXIiOiAiVMO4bSIsCisgICAgIkRvbmUiOiAiRmVyZGlnIiwKKyAgICAiRW50ZXIgdGhlIHRleHQgeW91IHdhbnQgdG8gZmluZCI6ICJTa3JpdiBpbm4gdGVrc3RlbiBkdSDDuG5za2VyIMOlIGZpbm5lIiwKKyAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICJTw7hrIG9nIGVyc3RhdHQiLAorICAgICJIaWdobGlnaHQiOiAiVXRoZXYiLAorICAgICJJbmZvcm0gYSByZXBsYWNlbWVudCB3b3JkIjogIlZlbm5saWdzdCBza3JpdiBpbm4gZXQgZXJzdGF0bmluZ3NvcmQgLyBzZXRuaW5nIiwKKyAgICAiTmV4dCI6ICJOZXN0ZSIsCisgICAgIk9wdGlvbnMiOiAiVmFsZyIsCisgICAgIlJlcGxhY2Ugd2l0aDoiOiAiRXJzdGF0dCBtZWQ6IiwKKyAgICAiU2VhcmNoIGZvcjoiOiAiU8O4ayBldHRlcjoiLAorICAgICJTdWJzdGl0dXRlIGFsbCBvY2N1cnJlbmNlcyI6ICJFcnN0YXR0IGFsbGUgdHJlZmYiLAorICAgICJTdWJzdGl0dXRlIHRoaXMgb2NjdXJyZW5jZT8iOiAiVmVubmxpZ3N0IGJla3JlZnQgYXQgZHUgdmlsIGVyc3RhdHRlPyIsCisgICAgIlVuZG8iOiAiVGlsYmFrZSIsCisgICAgIldob2xlIHdvcmRzIG9ubHkiOiAiQmFyZSBoZWxlIG9yZCIsCisgICAgImZvdW5kIGl0ZW0iOiAiVHJlZmYiLAorICAgICJmb3VuZCBpdGVtcyI6ICJmb3Jla29tc3RlciBmdW5uZXQgaSBzw7hrZXQiLAorICAgICJub3QgZm91bmQiOiAiaWtrZSBmdW5uZXQiLAorICAgICJyZXBsYWNlZCBpdGVtIjogImVyc3RhdHRldCB0cmVmZiIsCisgICAgInJlcGxhY2VkIGl0ZW1zIjogImZvcmVrb21zdGVyIGVyc3RhdHRldCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9sYW5nL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMjhmNzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL2xhbmcvbmwuanMKQEAgLTAsMCArMSwzMiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJubCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAiRXhhY3Qgem9la2VuIiwKKyAgICAiQ2xlYXIiOiAiTGVlZyIsCisgICAgIkRvbmUiOiAiVm9sdG9vaWVuIiwKKyAgICAiRW50ZXIgdGhlIHRleHQgeW91IHdhbnQgdG8gZmluZCI6ICJWb2VyIHRla3N0IGluIHdhYXIgamUgb3Agd2lsdCB6b2VrZW4iLAorICAgICJGaW5kIGFuZCBSZXBsYWNlIjogIlpvZWsgZW4gdmVydmFuZyIsCisgICAgIkhpZ2hsaWdodCI6ICJNYXJrZXJlbiIsCisgICAgIkluZm9ybSBhIHJlcGxhY2VtZW50IHdvcmQiOiAiVm9lciBlZW4gdmVydmFuZyB3b29yZCBvZiB6aW4gaW4iLAorICAgICJOZXh0IjogIlZvbGdlbmRlIiwKKyAgICAiT3B0aW9ucyI6ICJPcHRpZXMiLAorICAgICJSZXBsYWNlIHdpdGg6IjogIlZlcnZhbmcgbWV0OiIsCisgICAgIlNlYXJjaCBmb3I6IjogIlpvZWsgbmFhcjoiLAorICAgICJTdWJzdGl0dXRlIGFsbCBvY2N1cnJlbmNlcyI6ICJWZXJ2YW5nIGFsbGUgb3ZlcmVlbmtvbXN0ZW4iLAorICAgICJTdWJzdGl0dXRlIHRoaXMgb2NjdXJyZW5jZT8iOiAiRGV6ZSBvdmVyZWVua29tc3QgdmVydmFuZ2VuPyIsCisgICAgIlVuZG8iOiAiT25nZWRhYW4gbWFrZW4iLAorICAgICJXaG9sZSB3b3JkcyBvbmx5IjogIkFsbGVlbiBoZWxlIHdvb3JkZW4iLAorICAgICJmb3VuZCBpdGVtIjogImdldm9uZGVuIG92ZXJlZW5rb21zdCIsCisgICAgImZvdW5kIGl0ZW1zIjogImdldm9uZGVuIG92ZXJlZW5rb21zdGVuIiwKKyAgICAibm90IGZvdW5kIjogIm5pZXQgZ2V2b25kZW4iLAorICAgICJyZXBsYWNlZCBpdGVtIjogInZlcnZhbmdlbiBpdGVtIiwKKyAgICAicmVwbGFjZWQgaXRlbXMiOiAidmVydmFuZ2VuIGl0ZW1zIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL2xhbmcvcGwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL2xhbmcvcGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdlYWY1MwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmluZFJlcGxhY2UvbGFuZy9wbC5qcwpAQCAtMCwwICsxLDMyIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInBsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhc2Ugc2Vuc2l0aXZlIHNlYXJjaCI6ICJXZyB3aWVsa2/Fm2NpIGxpdGVyIiwKKyAgICAiQ2xlYXIiOiAiV3ljennFm8SHIiwKKyAgICAiRG9uZSI6ICJHb3Rvd2UiLAorICAgICJFbnRlciB0aGUgdGV4dCB5b3Ugd2FudCB0byBmaW5kIjogIlBvZGFqIHRla3N0LCBqYWtpIGNoY2VzeiB3eXN6dWthxIciLAorICAgICJGaW5kIGFuZCBSZXBsYWNlIjogIlpuYWpkxbogaSB6YW1pZcWEIiwKKyAgICAiSGlnaGxpZ2h0IjogIlBvZMWbd2lldGwiLAorICAgICJJbmZvcm0gYSByZXBsYWNlbWVudCB3b3JkIjogIlBvZGFqIHRla3N0IGRvIHphbWlhbnkiLAorICAgICJOZXh0IjogIk5hc3TEmXBueSIsCisgICAgIk9wdGlvbnMiOiAiT3BjamUiLAorICAgICJSZXBsYWNlIHdpdGg6IjogIlphbWllxYQgbmE6IiwKKyAgICAiU2VhcmNoIGZvcjoiOiAiU3p1a2FqOiIsCisgICAgIlN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIjogIlphbWllxYQgd3N6eXN0a2llIHd5c3TEhXBpZW5pYSIsCisgICAgIlN1YnN0aXR1dGUgdGhpcyBvY2N1cnJlbmNlPyI6ICJaYW1pZW5pxIcgdG8gd3lzdMSFcGllbmllPyIsCisgICAgIlVuZG8iOiAiQ29mbmlqIiwKKyAgICAiV2hvbGUgd29yZHMgb25seSI6ICJDYcWCZSBzxYJvd2EiLAorICAgICJmb3VuZCBpdGVtIjogInpuYWxlemlvbnkiLAorICAgICJmb3VuZCBpdGVtcyI6ICJ6bmFsZXppb255Y2giLAorICAgICJub3QgZm91bmQiOiAibmllIHpuYWxlemlvbnkiLAorICAgICJyZXBsYWNlZCBpdGVtIjogInphbWllbmlvbnkiLAorICAgICJyZXBsYWNlZCBpdGVtcyI6ICJ6YW1pZW5pb255Y2giCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmluZFJlcGxhY2UvbGFuZy9wdF9ici5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmluZFJlcGxhY2UvbGFuZy9wdF9ici5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzQyNzRlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMzIgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FzZSBzZW5zaXRpdmUgc2VhcmNoIjogIlByb2N1cmEgZGlmZXJlbmNpYWRhIE1hacO6c2N1bGFzL01pbsO6c2N1bGFzIiwKKyAgICAiQ2xlYXIiOiAiTGltcGFyIiwKKyAgICAiRG9uZSI6ICJFeGVjdXRhZG8iLAorICAgICJFbnRlciB0aGUgdGV4dCB5b3Ugd2FudCB0byBmaW5kIjogIkZvcm5lw6dhIG8gdGV4dG8gcXVlIGRlc2VqYSBwcm9jdXJhciIsCisgICAgIkZpbmQgYW5kIFJlcGxhY2UiOiAiUHJvY3VyYXIgZSBTdWJzdGl0dWlyIiwKKyAgICAiSGlnaGxpZ2h0IjogIk1hcmNhciIsCisgICAgIkluZm9ybSBhIHJlcGxhY2VtZW50IHdvcmQiOiAiSW5mb3JtZSB1bWEgcGFsYXZyYSBwYXJhIHN1YnN0aXR1aXIiLAorICAgICJOZXh0IjogIlByw7N4aW1hIiwKKyAgICAiT3B0aW9ucyI6ICJPcMOnw7VlcyIsCisgICAgIlJlcGxhY2Ugd2l0aDoiOiAiU3Vic3RpdHVpciBwb3I6IiwKKyAgICAiU2VhcmNoIGZvcjoiOiAiUHJvY3VyYXIgcG9yOiIsCisgICAgIlN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIjogIlN1YnN0aXR1aXIgdG9kYXMgYXMgb2NvcnLDqm5jaWFzIiwKKyAgICAiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IjogIlN1YnN0aXR1aXIgdG9kYXMgYXMgb2NvcnLDqm5jaWFzPyIsCisgICAgIlVuZG8iOiAiRGVzZmF6ZXIiLAorICAgICJXaG9sZSB3b3JkcyBvbmx5IjogIkFwZW5hcyBwYWxhdnJhcyBpbnRlaXJhcyIsCisgICAgImZvdW5kIGl0ZW0iOiAiSXRlbSBlbmNvbnRyYWRvIiwKKyAgICAiZm91bmQgaXRlbXMiOiAiSXRlbnMgZW5jb250cmFkb3MiLAorICAgICJub3QgZm91bmQiOiAibmFkYSBlbmNvbnRyYWRvIiwKKyAgICAicmVwbGFjZWQgaXRlbSI6ICJzdWJzdGl0dWlyIGl0ZW0iLAorICAgICJyZXBsYWNlZCBpdGVtcyI6ICJzdWJzdGl0dWlyIGl0ZW5zIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL2xhbmcvcm8uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL2xhbmcvcm8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU2ZDQ5MQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmluZFJlcGxhY2UvbGFuZy9yby5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJvIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIlJlcGxhY2Ugd2l0aDoiOiAiw45ubG9jdWllxZ90ZSBjdSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GaW5kUmVwbGFjZS9sYW5nL3J1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNjQxY2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL2xhbmcvcnUuanMKQEAgLTAsMCArMSwzMiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYXNlIHNlbnNpdGl2ZSBzZWFyY2giOiAi0J/QvtC40YHQuiDRgSDRg9GH0LXRgtC+0Lwg0YDQtdCz0LjRgdGC0YDQsCIsCisgICAgIkNsZWFyIjogItCe0YfQuNGB0YLQuNGC0YwiLAorICAgICJEb25lIjogIk9LIiwKKyAgICAiRW50ZXIgdGhlIHRleHQgeW91IHdhbnQgdG8gZmluZCI6ICLQktCy0LXQtNC40YLQtSDRgtC10LrRgdGCLCDQutC+0YLQvtGA0YvQuSDQstGLINGF0L7RgtC40YLQtSDQvdCw0LnRgtC4IiwKKyAgICAiRmluZCBhbmQgUmVwbGFjZSI6ICLQndCw0LnRgtC4INC4INC30LDQvNC10L3QuNGC0YwiLAorICAgICJIaWdobGlnaHQiOiAi0JLRi9C00LXQu9C40YLRjCIsCisgICAgIkluZm9ybSBhIHJlcGxhY2VtZW50IHdvcmQiOiAi0J/QvtC60LDQt9Cw0YLRjCDQt9Cw0LzQtdGJ0LDRjtGJ0LXQtSDRgdC70L7QstC+IiwKKyAgICAiTmV4dCI6ICLQodC70LXQtC4iLAorICAgICJPcHRpb25zIjogItCe0L/RhtC40LgiLAorICAgICJSZXBsYWNlIHdpdGg6IjogItCX0LDQvNC10L3QuNGC0Ywg0YEiLAorICAgICJTZWFyY2ggZm9yOiI6ICLQndCw0LnRgtC4IiwKKyAgICAiU3Vic3RpdHV0ZSBhbGwgb2NjdXJyZW5jZXMiOiAi0JfQsNC80LXQvdC40YLRjCDQstGB0LUg0LLRhdC+0LbQtNC10L3QuNGPIiwKKyAgICAiU3Vic3RpdHV0ZSB0aGlzIG9jY3VycmVuY2U/IjogItCX0LDQvNC10L3QuNGC0Ywg0Y3RgtC+INCy0YXQvtC20LTQtdC90LjQtT8iLAorICAgICJVbmRvIjogItCe0YLQvNC10L3QuNGC0YwiLAorICAgICJXaG9sZSB3b3JkcyBvbmx5IjogItCi0L7Qu9GM0LrQviDRgdC70L7QstCwINGG0LXQu9C40LrQvtC8IiwKKyAgICAiZm91bmQgaXRlbSI6ICLQvdCw0LnRgtC4IiwKKyAgICAiZm91bmQgaXRlbXMiOiAi0L3QsNC50YLQuCIsCisgICAgIm5vdCBmb3VuZCI6ICLQvdC1INC90LDQudC00LXQvdC+IiwKKyAgICAicmVwbGFjZWQgaXRlbSI6ICLQt9Cw0LzQtdC90LXQvdC90LDRjyIsCisgICAgInJlcGxhY2VkIGl0ZW1zIjogItC30LDQvNC10L3QtdC90L3Ri9C1IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL2xhbmcvc3YuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDIyY2Q5MQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmluZFJlcGxhY2UvbGFuZy9zdi5qcwpAQCAtMCwwICsxLDMyIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInN2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhc2Ugc2Vuc2l0aXZlIHNlYXJjaCI6ICJTa2lsaiBtZWxsYW4gc3RvcmEgb2NoIHNtw6UgYm9rc3TDpHZlciIsCisgICAgIkNsZWFyIjogIlTDtm0iLAorICAgICJEb25lIjogIkbDpHJkaWciLAorICAgICJFbnRlciB0aGUgdGV4dCB5b3Ugd2FudCB0byBmaW5kIjogIlNrcml2IGluIHRleHQgZHUgdmlsbCBzw7ZrYSIsCisgICAgIkZpbmQgYW5kIFJlcGxhY2UiOiAiU8O2ayBvY2ggZXJzw6R0dCIsCisgICAgIkhpZ2hsaWdodCI6ICJNYXJrZXJhIiwKKyAgICAiSW5mb3JtIGEgcmVwbGFjZW1lbnQgd29yZCI6ICJTa3JpdiBpbiBldHQgZXJzw6R0dG5pbmdzb3JkIiwKKyAgICAiTmV4dCI6ICJOw6RzdGEiLAorICAgICJPcHRpb25zIjogIlbDpGxqIiwKKyAgICAiUmVwbGFjZSB3aXRoOiI6ICJFcnPDpHR0IG1lZDoiLAorICAgICJTZWFyY2ggZm9yOiI6ICJTw7ZrIGVmdGVyOiIsCisgICAgIlN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIjogIkVyc3RhdHQgYWxsYSB0csOkZmZhciIsCisgICAgIlN1YnN0aXR1dGUgdGhpcyBvY2N1cnJlbmNlPyI6ICJFcnPDpHR0IGRlbm5hPyIsCisgICAgIlVuZG8iOiAiVGlsbGJha2EiLAorICAgICJXaG9sZSB3b3JkcyBvbmx5IjogIkJhcmEgaGVsYSBvcmQiLAorICAgICJmb3VuZCBpdGVtIjogIlRyw6RmZiIsCisgICAgImZvdW5kIGl0ZW1zIjogImbDtnJla29tc3RlciBmdW5uYSBpIHPDtmtuaW5nZW4iLAorICAgICJub3QgZm91bmQiOiAiaW50ZSBmdW5uZXQiLAorICAgICJyZXBsYWNlZCBpdGVtIjogImVyc3RhdHQgdHLDpGZmIiwKKyAgICAicmVwbGFjZWQgaXRlbXMiOiAiZsO2cmVrb21zdGVyIGVyc3RhdHRhIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL3BvcHVwcy9maW5kX3JlcGxhY2UuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRmluZFJlcGxhY2UvcG9wdXBzL2ZpbmRfcmVwbGFjZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMGZjMDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0ZpbmRSZXBsYWNlL3BvcHVwcy9maW5kX3JlcGxhY2UuaHRtbApAQCAtMCwwICsxLDE2MiBAQAorPGh0bWw+Cis8aGVhZD4KKyAgPHRpdGxlPkZpbmQgYW5kIFJlcGxhY2U8L3RpdGxlPgorPCEtLQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorIEZpbmQgYW5kIFJlcGxhY2UgUGx1Z2luIGZvciBIVE1MQXJlYS0zLjAKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGF1dGhvcjogQ2F1IGd1YW5hYmFyYSAKKyBlLW1haWw6IGNhdWdiQGliZXN0LmNvbS5icgorXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLS0+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9mcl9lbmdpbmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vLi4vcG9wdXBzL3BvcHVwLmpzIj48L3NjcmlwdD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uLy4uLy4uL3BvcHVwcy9wb3B1cC5jc3MiIC8+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKword2luZG93LnJlc2l6ZVRvKDMzNSwgMjUwKTsKKwordmFyIGFjY2VwdGVkID0geworICAgICAgICAgICAgICAgICdmcl9wYXR0ZXJuJyAgICAgICA6IHRydWUsCisgICAgICAgICAgICAgICAgJ2ZyX3JlcGxhY2VtZW50JyAgIDogdHJ1ZSwKKyAgICAgICAgICAgICAgICAnZnJfd29yZHMnICAgICAgICAgOiB0cnVlLAorICAgICAgICAgICAgICAgICdmcl9tYXRjaGNhc2UnICAgICA6IHRydWUsCisgICAgICAgICAgICAgICAgJ2ZyX3JlcGxhY2VhbGwnICAgIDogdHJ1ZQorICAgICAgICAgICAgICAgfTsKKworZnVuY3Rpb24gSW5pdCgpIHsKK19fZGxnX3RyYW5zbGF0ZSgnRmluZFJlcGxhY2UnKTsKK19fZGxnX2luaXQoKTsKKworZGlzYWIoImZyX3VuZG8sZnJfY2xlYXIsZnJfaGlsaXRlYWxsIix0cnVlKTsKKwordmFyIHBhcmFtcyA9IHdpbmRvdy5kaWFsb2dBcmd1bWVudHM7CisgIGlmKHBhcmFtcykgeworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZnJfcGF0dGVybicpLnZhbHVlID0gcGFyYW1zWyJmcl9wYXR0ZXJuIl07CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmcl9yZXBsYWNlbWVudCcpLmZvY3VzKCk7CisgIH0gZWxzZSB7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmcl9wYXR0ZXJuJykuZm9jdXMoKTsKKyAgfQorICAKK2RvY3VtZW50LmJvZHkub25rZXlwcmVzcyA9IF9fZGxnX2tleV9wcmVzczsKK30KKworZnVuY3Rpb24gb25DYW5jZWwoKSB7CisgIGNsZWFyRG9jKCk7CisgIF9fZGxnX2Nsb3NlKG51bGwpOworICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIG9uT0soKSB7CisgIHZhciByZXF1aXJlZCA9IHsnZnJfcGF0dGVybicgOiBfbGMoIkVudGVyIHRoZSB0ZXh0IHlvdSB3YW50IHRvIGZpbmQiKX07CisgIGZvciAodmFyIGkgaW4gcmVxdWlyZWQpIHsKKyAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpKTsKKyAgICAgIGlmICghZWwudmFsdWUpIHsKKyAgICAgICAgYWxlcnQocmVxdWlyZWRbaV0pOworICAgICAgICBlbC5mb2N1cygpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgIH0KKworICB2YXIgcGFyYW0gPSB7fTsKKyAgZm9yICh2YXIgaSBpbiBhY2NlcHRlZCkgeworICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpKTsKKyAgcGFyYW1baV0gPSBlbC50eXBlID09ICdjaGVja2JveCcgPyBlbC5jaGVja2VkIDogZWwudmFsdWU7CisgIH0KKyAgZXhlY1NlYXJjaChwYXJhbSk7CisgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gX19kbGdfa2V5X3ByZXNzKGV2KSB7CitldiB8fCAoZXYgPSB3aW5kb3cuZXZlbnQpOworICBzd2l0Y2goZXYua2V5Q29kZSkgeworICAgIGNhc2UgMTM6CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZyX2dvJykuY2xpY2soKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZnJfcGF0dGVybicpLmZvY3VzKCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDI3OgorICAgIGNsZWFyRG9jKCk7CisgICAgd2luZG93LmNsb3NlKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CityZXR1cm4gdHJ1ZTsKK30KKworPC9zY3JpcHQ+CisKKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cit0YWJsZSAubGFiZWwgeyB0ZXh0LWFsaWduOiByaWdodDsgd2lkdGg6IDEyZW07IH0KKy50aXRsZSB7CitiYWNrZ3JvdW5kOiAjZGRmOworY29sb3I6ICMwMDA7Citmb250LXdlaWdodDogYm9sZDsKK2ZvbnQtc2l6ZTogMTIwJTsKK3BhZGRpbmc6IDNweCAxMHB4OworbWFyZ2luLWJvdHRvbTogMTBweDsKK2JvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsKK2xldHRlci1zcGFjaW5nOiAycHg7Cit9CisuYnV0dG9ucyB7IGJvcmRlci10b3A6IDFweCBzb2xpZCAjOTk5OyBwYWRkaW5nOiAycHg7IHRleHQtYWxpZ246IHJpZ2h0OyB9CisuaHJzdHlsZSB7IGJvcmRlci13aWR0aDogMXB4OyBib3JkZXItY29sb3I6ICM2NjY7IHdpZHRoOiA5NSU7IHBhZGRpbmc6IDJweDsgfQorPC9zdHlsZT4KKyAgPC9oZWFkPgorICA8Ym9keSBjbGFzcz0iZGlhbG9nIiBvbmxvYWQ9IkluaXQoKSI+CisgIDxkaXYgY2xhc3M9InRpdGxlIj5GaW5kIGFuZCBSZXBsYWNlPC9kaXY+CisgIDxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9ImdldCI+CisgIDx0YWJsZSBib3JkZXI9IjAiIHN0eWxlPSJ3aWR0aDogMTAwJTsgcGFkZGluZzogMnB4OyI+PCEtLS0tPgorICAgIDx0Ym9keT4KKyAgICAgIDx0cj4gCisgICAgICAgIDx0ZCB3aWR0aD0iMjklIiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiBib3R0b207Ij5TZWFyY2ggZm9yOjwvdGQ+CisgICAgICAgIDx0ZCB3aWR0aD0iNzElIiBjb2xzcGFuPSIyIiBzdHlsZT0idmVydGljYWwtYWxpZ246IGJvdHRvbTsiPiAKKyAgICAgICAgPGlucHV0IGlkPSJmcl9wYXR0ZXJuIiB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6IDIwMHB4IiBvbkZvY3VzPSJ0aGlzLnNlbGVjdCgpOyI+IAorICAgICAgICA8L3RkPgorICAgICAgPC90cj4KKyAgICAgIDx0cj4gCisgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij5SZXBsYWNlIHdpdGg6PC90ZD4KKyAgICAgICAgPHRkIGNvbHNwYW49IjIiPiAKKyAgICAgICAgPGlucHV0IGlkPSJmcl9yZXBsYWNlbWVudCIgdHlwZT0idGV4dCIgc3R5bGU9IndpZHRoOiAyMDBweCIgb25Gb2N1cz0idGhpcy5zZWxlY3QoKTsiPiAKKyAgICAgICAgPC90ZD4KKyAgICAgIDwvdHI+CisgICAgICA8dHI+IAorICAgICAgICA8dGQgY29sc3Bhbj0iMyI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIxIiBjZWxsc3BhY2luZz0iMCI+CisgICAgICAgICAgICA8dHI+IAorICAgICAgICAgICAgICA8dGQgd2lkdGg9Ijc4JSIgc3R5bGU9InBhZGRpbmc6IDJweCI+CisgICAgICAgICAgICAgIDxGSUVMRFNFVCBzdHlsZT0id2lkdGg6OTAlOyBwYWRkaW5nOiA1cHgiPgorICAgICAgICAgICAgICAgIDxMRUdFTkQ+PHNwYW4+T3B0aW9uczwvc3Bhbj48L0xFR0VORD4KKyAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iZnJfd29yZHMiIHR5cGU9ImNoZWNrYm94IiBjaGVja2VkIG9uQ2xpY2s9ImNsZWFyRG9jKCk7IiB2YWx1ZT0ib24iPgorICAgICAgICAgICAgICAgIDxzcGFuIG9uQ2xpY2s9ImUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZnJfd29yZHMnKTsgCisgICAgICAgICAgICAgICAgZS5jbGljaygpOyBlLmZvY3VzKCk7IiBzdHlsZT0iY3Vyc29yOmRlZmF1bHQiPiAKKyAgICAgICAgICAgICAgICAgIDxzcGFuPldob2xlIHdvcmRzIG9ubHk8L3NwYW4+PC9zcGFuPjxiciAvPgorICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJmcl9tYXRjaGNhc2UiIHR5cGU9ImNoZWNrYm94IiBvbkNsaWNrPSJjbGVhckRvYygpOyIgdmFsdWU9Im9uIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBvbkNsaWNrPSJlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZyX21hdGNoY2FzZScpOyAKKyAgICAgICAgICAgICAgICBlLmNsaWNrKCk7IGUuZm9jdXMoKTsiIHN0eWxlPSJjdXJzb3I6ZGVmYXVsdCI+IAorICAgICAgICAgICAgICAgICAgPHNwYW4+Q2FzZSBzZW5zaXRpdmUgc2VhcmNoPC9zcGFuPjwvc3Bhbj48YnIgLz4KKyAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iZnJfcmVwbGFjZWFsbCIgdHlwZT0iY2hlY2tib3giIG9uQ2xpY2s9IgorICAgICAgICAgICAgICAgICAgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZyX3JlcGxhY2VtZW50JykudmFsdWUgPT0gJycpIHsKKyAgICAgICAgICAgICAgICAgIGFsZXJ0KF9sYygnSW5mb3JtIGEgcmVwbGFjZW1lbnQgd29yZCcpKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGNsZWFyRG9jKCk7IiB2YWx1ZT0ib24iPgorICAgICAgICAgICAgICAgIDxzcGFuIG9uQ2xpY2s9ImUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZnJfcmVwbGFjZWFsbCcpOyAKKyAgICAgICAgICAgICAgICBlLmNsaWNrKCk7IGUuZm9jdXMoKTsiIHN0eWxlPSJjdXJzb3I6ZGVmYXVsdCI+IAorICAgICAgICAgICAgICAgICAgPHNwYW4+U3Vic3RpdHV0ZSBhbGwgb2NjdXJyZW5jZXM8L3NwYW4+PC9zcGFuPgorICAgICAgICAgICAgICAgIDwvRklFTERTRVQ+PC90ZD4KKzx0ZCB3aWR0aD0iMjIlIiBzdHlsZT0idmVydGljYWwtYWxpZ246IGJvdHRvbTsgdGV4dC1hbGlnbjogcmlnaHQ7IHBhZGRpbmc6IDRweCI+IAorPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJmcl9jbGVhciIgb25DbGljaz0iY2xlYXJNYXJrcygpIj5DbGVhcjwvYnV0dG9uPgorPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgorPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJmcl9oaWxpdGVhbGwiIG9uQ2xpY2s9ImhpbGl0ZUFsbCgpIj5IaWdobGlnaHQ8L2J1dHRvbj4KKzxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KKzxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iZnJfdW5kbyIgb25DbGljaz0icmVzZXRDb250ZW50cygpOyI+VW5kbzwvYnV0dG9uPgorPC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgPC90YWJsZT48L3RkPgorICAgICAgPC90cj4KKyAgICA8L3Rib2R5PgorICA8L3RhYmxlPgorPGRpdiBzdHlsZT0iYm9yZGVyLXRvcDogMXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6IDJweDsgcGFkZGluZzogNXB4OyB0ZXh0LWFsaWduOiByaWdodDsgaGVpZ2h0OiAyMHB4Ij48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9ImZyX2dvIiBvbmNsaWNrPSJyZXR1cm4gb25PSygpOyI+TmV4dDwvYnV0dG9uPgorPGJ1dHRvbiB0eXBlPSJidXR0b24iIG5hbWU9ImNhbmNlbCIgb25jbGljaz0icmV0dXJuIG9uQ2FuY2VsKCk7Ij5Eb25lPC9idXR0b24+Cis8L2Rpdj4KKzwvZm9ybT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybU9wZXJhdGlvbnMvRm9ybU9wZXJhdGlvbnMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1PcGVyYXRpb25zL0Zvcm1PcGVyYXRpb25zLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMjg5MmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1PcGVyYXRpb25zL0Zvcm1PcGVyYXRpb25zLmpzCkBAIC0wLDAgKzEsNzU2IEBACisKKyAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTpub1RhYnM9dHJ1ZTp0YWJTaXplPTI6aW5kZW50U2l6ZT0yOi0tCisgICAgLS0gIEZvcm1PcGVyYXRpb25zIFBsdWdpbgorICAgIC0tCisgICAgLS0gICRIZWFkVVJMOiBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9wbHVnaW5zL0Zvcm1PcGVyYXRpb25zL0Zvcm1PcGVyYXRpb25zLmpzICQKKyAgICAtLSAgJExhc3RDaGFuZ2VkRGF0ZTogMjAwOC0xMC0xMyAwNjo0Mjo0MiArMTMwMCAoTW9uLCAxMyBPY3QgMjAwOCkgJAorICAgIC0tICAkTGFzdENoYW5nZWRSZXZpc2lvbjogMTA4NCAkCisgICAgLS0gICRMYXN0Q2hhbmdlZEJ5OiByYXkgJAorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworWGluaGEuQ29uZmlnLnByb3RvdHlwZS5Gb3JtT3BlcmF0aW9ucyA9Cit7CisgIC8vIGZvcm1hdCBmb3IgZmllbGRzIHdoZXJlIG11bHRpcGxlIHZhbHVlcyBtYXkgYmUgc2VsZWN0ZWQKKyAgLy8gICAgJ3BocCcgICAgICAgICAgPT4gRmllbGROYW1lW10KKyAgLy8gICAgJ3VubW9kaWZpZWQnICAgPT4gRmllbGROYW1lCisgICdtdWx0aXBsZV9maWVsZF9mb3JtYXQnOiAncGhwJywKKyAgJ2FsbG93X2VkaXRfZm9ybScgICAgICA6IGZhbHNlLAorICAnZGVmYXVsdF9mb3JtX2FjdGlvbicgIDogWGluaGEuZ2V0UGx1Z2luRGlyKCdGb3JtT3BlcmF0aW9ucycpICsgJy9mb3JtbWFpbC5waHAnLAorICAnZGVmYXVsdF9mb3JtX2h0bWwnICAgIDogWGluaGEuX2dldHVybGNvbnRlbnQoWGluaGEuZ2V0UGx1Z2luRGlyKCdGb3JtT3BlcmF0aW9ucycpICsgJy9kZWZhdWx0X2Zvcm0uaHRtbCcpCit9OworCitGb3JtT3BlcmF0aW9ucy5fcGx1Z2luSW5mbyA9Cit7CisgIG5hbWUgICAgIDogIkZvcm1PcGVyYXRpb25zIiwKKyAgdmVyc2lvbiAgOiAiMS4wIiwKKyAgZGV2ZWxvcGVyOiAiSmFtZXMgU2xlZW1hbiIsCisgIGRldmVsb3Blcl91cmw6ICJodHRwOi8vd3d3LmdvZ28uY28ubnovIiwKKyAgY19vd25lciAgICAgIDogIkdvZ28gSW50ZXJuZXQgU2VydmljZXMiLAorICBsaWNlbnNlICAgICAgOiAiaHRtbEFyZWEiLAorICBzcG9uc29yICAgICAgOiAiR29nbyBJbnRlcm5ldCBTZXJ2aWNlcyIsCisgIHNwb25zb3JfdXJsICA6ICJodHRwOi8vd3d3LmdvZ28uY28ubnovIgorfTsKKworZnVuY3Rpb24gRm9ybU9wZXJhdGlvbnMoZWRpdG9yKQoreworICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKKyAgdGhpcy5wYW5lbCAgPSBmYWxzZTsKKyAgdGhpcy5odG1sICAgPSBmYWxzZTsKKyAgdGhpcy5yZWFkeSAgPSBmYWxzZTsKKyAgdGhpcy5hY3RpdmVFbGVtZW50ID0gbnVsbDsKKyAgdGhpcy5fcHJlcGFyZVBhbmVsKCk7CisKKworICBlZGl0b3IuY29uZmlnLnBhZ2VTdHlsZVNoZWV0cy5wdXNoKFhpbmhhLmdldFBsdWdpbkRpcignRm9ybU9wZXJhdGlvbnMnKSArICcvaWZyYW1lLmNzcycpOworCisgIHZhciB0b29sYmFyID0KKyAgWworICAgICdzZXBhcmF0b3InLAorICAgICdpbnNlcnRfZm9ybScsCisgICAgJ2luc2VydF90ZXh0X2ZpZWxkJywKKyAgICAnaW5zZXJ0X3RleHRhcmVhX2ZpZWxkJywKKyAgICAnaW5zZXJ0X3NlbGVjdF9maWVsZCcsCisgICAgJ2luc2VydF9jYl9maWVsZCcsCisgICAgJ2luc2VydF9yYl9maWVsZCcsCisgICAgJ2luc2VydF9idXR0b24nCisgIF07CisKKyAgdGhpcy5lZGl0b3IuY29uZmlnLnRvb2xiYXIucHVzaCh0b29sYmFyKTsKKworICBmdW5jdGlvbiBwYXN0ZUFuZFNlbGVjdChodG1sVGFnKQorICB7CisgICAgdmFyIGlkID0gWGluaGEudW5pcSgnZm8nKTsKKyAgICBodG1sVGFnID0gaHRtbFRhZy5yZXBsYWNlKC9ePChbXiBcLz5dKykvaSwgJzwkMSBpZD0iJytpZCsnIicpOworICAgIGVkaXRvci5pbnNlcnRIVE1MKGh0bWxUYWcpOworICAgIHZhciBlbCA9IGVkaXRvci5fZG9jLmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICBlbC5zZXRBdHRyaWJ1dGUoJ2lkJywgJycpOworICAgIGVkaXRvci5zZWxlY3ROb2RlQ29udGVudHMoZWwpOworICAgIGVkaXRvci51cGRhdGVUb29sYmFyKCk7CisgICAgcmV0dXJuIGVsOworICB9CisKKyAgdmFyIGJ1dHRvbnNJbWFnZSA9IGVkaXRvci5pbWdVUkwoJ2J1dHRvbnMuZ2lmJywgJ0Zvcm1PcGVyYXRpb25zJyk7CisKKyAgRm9ybU9wZXJhdGlvbnMucHJvdG90eXBlLl9sYyA9IGZ1bmN0aW9uKHN0cmluZykgeworICAgIHJldHVybiBYaW5oYS5fbGMoc3RyaW5nLCAnRm9ybU9wZXJhdGlvbnMnKTsKKyAgfTsKKworICB0aGlzLmVkaXRvci5jb25maWcuYnRuTGlzdC5pbnNlcnRfZm9ybSA9CisgIFsgdGhpcy5fbGMoIkluc2VydCBhIEZvcm0uIiksCisgICAgW2J1dHRvbnNJbWFnZSwgMCwgMF0sCisgICAgZmFsc2UsCisgICAgZnVuY3Rpb24oKQorICAgIHsKKyAgICAgIHZhciBmb3JtID0gbnVsbDsKKyAgICAgIGlmKGVkaXRvci5jb25maWcuRm9ybU9wZXJhdGlvbnMuZGVmYXVsdF9mb3JtX2h0bWwpCisgICAgICB7CisgICAgICAgIGZvcm0gPSBwYXN0ZUFuZFNlbGVjdChlZGl0b3IuY29uZmlnLkZvcm1PcGVyYXRpb25zLmRlZmF1bHRfZm9ybV9odG1sKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgZm9ybSA9IHBhc3RlQW5kU2VsZWN0KCc8Zm9ybT4mbmJzcDs8L2Zvcm0+Jyk7CisgICAgICB9CisKKyAgICAgIGlmKGVkaXRvci5jb25maWcuRm9ybU9wZXJhdGlvbnMuZGVmYXVsdF9mb3JtX2FjdGlvbiAmJiAhZm9ybS5hY3Rpb24pCisgICAgICB7CisgICAgICAgIGZvcm0uYWN0aW9uID0gZWRpdG9yLmNvbmZpZy5Gb3JtT3BlcmF0aW9ucy5kZWZhdWx0X2Zvcm1fYWN0aW9uOworICAgICAgfQorICAgIH0KKyAgXTsKKworICB0aGlzLmVkaXRvci5jb25maWcuYnRuTGlzdC5pbnNlcnRfdGV4dF9maWVsZCA9CisgIFsgdGhpcy5fbGMoIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iKSwKKyAgICBbYnV0dG9uc0ltYWdlLCAxLCAwXSwKKyAgICBmYWxzZSwKKyAgICBmdW5jdGlvbigpCisgICAgeworICAgICAgcGFzdGVBbmRTZWxlY3QoJzxpbnB1dCB0eXBlPSJ0ZXh0IiAvPicpOworICAgIH0sCisgICAgJ2Zvcm0nCisgIF07CisKKyAgdGhpcy5lZGl0b3IuY29uZmlnLmJ0bkxpc3QuaW5zZXJ0X3RleHRhcmVhX2ZpZWxkID0KKyAgWyB0aGlzLl9sYygiSW5zZXJ0IGEgbXVsdGktbGluZSB0ZXh0IGZpZWxkLiIpLAorICAgIFtidXR0b25zSW1hZ2UsIDIsIDBdLAorICAgIGZhbHNlLAorICAgIGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICBwYXN0ZUFuZFNlbGVjdCgnPHRleHRhcmVhPiA8L3RleHRhcmVhPicpOworICAgIH0sCisgICAgJ2Zvcm0nCisgIF07CisKKyAgdGhpcy5lZGl0b3IuY29uZmlnLmJ0bkxpc3QuaW5zZXJ0X3NlbGVjdF9maWVsZCA9CisgIFsgdGhpcy5fbGMoIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iKSwKKyAgICBbYnV0dG9uc0ltYWdlLCAzLCAwXSwKKyAgICBmYWxzZSwKKyAgICBmdW5jdGlvbigpCisgICAgeworICAgICAgcGFzdGVBbmRTZWxlY3QoJzxzZWxlY3Q+IDxvcHRpb24gdmFsdWU9IiI+UGxlYXNlIFNlbGVjdC4uLjwvb3B0aW9uPiA8L3NlbGVjdD4nKTsKKyAgICB9LAorICAgICdmb3JtJworICBdOworCisgIHRoaXMuZWRpdG9yLmNvbmZpZy5idG5MaXN0Lmluc2VydF9jYl9maWVsZCA9CisgIFsgdGhpcy5fbGMoIkluc2VydCBhIGNoZWNrIGJveC4iKSwKKyAgICBbYnV0dG9uc0ltYWdlLCA0LCAwXSwKKyAgICBmYWxzZSwKKyAgICBmdW5jdGlvbigpCisgICAgeworICAgICAgcGFzdGVBbmRTZWxlY3QoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgLz4nKTsKKyAgICB9LAorICAgICdmb3JtJworICBdOworCisgIHRoaXMuZWRpdG9yLmNvbmZpZy5idG5MaXN0Lmluc2VydF9yYl9maWVsZCA9CisgIFsgdGhpcy5fbGMoIkluc2VydCBhIHJhZGlvIGJ1dHRvbi4iKSwKKyAgICBbYnV0dG9uc0ltYWdlLCA1LCAwXSwKKyAgICBmYWxzZSwKKyAgICBmdW5jdGlvbigpCisgICAgeworICAgICAgcGFzdGVBbmRTZWxlY3QoJzxpbnB1dCB0eXBlPSJyYWRpbyIgLz4nKTsKKyAgICB9LAorICAgICdmb3JtJworICBdOworCisgIHRoaXMuZWRpdG9yLmNvbmZpZy5idG5MaXN0Lmluc2VydF9idXR0b24gPQorICBbIHRoaXMuX2xjKCJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiIpLAorICAgIFtidXR0b25zSW1hZ2UsIDYsIDBdLAorICAgIGZhbHNlLAorICAgIGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICBwYXN0ZUFuZFNlbGVjdCgnPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlbmQiIC8+Jyk7CisgICAgfSwKKyAgICAnZm9ybScKKyAgXTsKK30KKworRm9ybU9wZXJhdGlvbnMucHJvdG90eXBlLm9uR2VuZXJhdGUgPSBmdW5jdGlvbigpCit7CisgIC8vIEdlY2tvIGRvZXMgbm90IHJlZ2lzdGVyIGNsaWNrIGV2ZW50cyBvbiBzZWxlY3QgbGlzdHMgaW5zaWRlIHRoZSBpZnJhbWUKKyAgLy8gc28gdGhlIG9ubHkgd2F5IG9mIGRldGVjdGluZyB0aGF0IGlzIHRvIGRvIGFuIGV2ZW50IG9uIG1vdXNlIG1vdmUuCisgIGlmKCBYaW5oYS5pc19nZWNrbykKKyAgeworICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgICB2YXIgZG9jICAgID0gdGhpcy5lZGl0b3IuX2RvYzsKKyAgICBYaW5oYS5fYWRkRXZlbnRzCisgICAgKGRvYywgWyJtb3VzZW1vdmUiXSwKKyAgICAgZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgcmV0dXJuIGVkaXRvci5fZWRpdG9yRXZlbnQoZXZlbnQpOworICAgICB9KTsKKyAgfQorfTsKKworRm9ybU9wZXJhdGlvbnMucHJvdG90eXBlLl9wcmVwYXJlUGFuZWwgPSBmdW5jdGlvbiAoKQoreworICB2YXIgZm8gPSB0aGlzOworICBpZih0aGlzLmh0bWwgPT0gZmFsc2UpCisgIHsKKworICAgIFhpbmhhLl9nZXRiYWNrKFhpbmhhLmdldFBsdWdpbkRpcignRm9ybU9wZXJhdGlvbnMnKSArICcvcGFuZWwuaHRtbCcsCisgICAgICBmdW5jdGlvbih0eHQpCisgICAgICB7CisgICAgICAgIGZvLmh0bWwgPSB0eHQ7CisgICAgICAgIGZvLl9wcmVwYXJlUGFuZWwoKTsKKyAgICAgIH0KKyAgICApOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGlmKHR5cGVvZiBYaW5oYS5EaWFsb2cgPT0gJ3VuZGVmaW5lZCcpCisgIHsKKyAgICBYaW5oYS5fbG9hZGJhY2sKKyAgICAgIChfZWRpdG9yX3VybCArICdtb2R1bGVzL0RpYWxvZ3MvWGluaGFEaWFsb2cuanMnLCBmdW5jdGlvbigpIHsgZm8uX3ByZXBhcmVQYW5lbCgpOyB9ICk7CisgICAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBpZih0eXBlb2YgWGluaGEuUGFuZWxEaWFsb2cgPT0gJ3VuZGVmaW5lZCcpCisgIHsKKyAgICBYaW5oYS5fbG9hZGJhY2sKKyAgICAgIChfZWRpdG9yX3VybCArICdtb2R1bGVzL0RpYWxvZ3MvcGFuZWwtZGlhbG9nLmpzJywgZnVuY3Rpb24oKSB7IGZvLl9wcmVwYXJlUGFuZWwoKTsgfSApOworICAgICAgcmV0dXJuIGZhbHNlOworICB9CisKKworCisgIHRoaXMucGFuZWwgPSBuZXcgWGluaGEuUGFuZWxEaWFsb2codGhpcy5lZGl0b3IsJ2JvdHRvbScsdGhpcy5odG1sLCdGb3JtT3BlcmF0aW9ucycpOworICB0aGlzLnBhbmVsLmhpZGUoKTsKKyAgdGhpcy5yZWFkeSA9IHRydWU7Cit9OworCitGb3JtT3BlcmF0aW9ucy5wcm90b3R5cGUub25VcGRhdGVUb29sYmFyID0gZnVuY3Rpb24oKQoreworICBpZighdGhpcy5yZWFkeSkgcmV0dXJuIHRydWU7CisgIHZhciBhY3RpdmVFbGVtZW50ID0gdGhpcy5lZGl0b3IuX2FjdGl2ZUVsZW1lbnQodGhpcy5lZGl0b3IuX2dldFNlbGVjdGlvbigpKTsKKyAgaWYoYWN0aXZlRWxlbWVudCAhPSBudWxsKQorICB7CisgICAgaWYoYWN0aXZlRWxlbWVudCA9PSB0aGlzLmFjdGl2ZUVsZW1lbnQpIHJldHVybiB0cnVlOworCisgICAgdmFyIHRhZyA9IGFjdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpOworICAgIAorICAgIHRoaXMuaGlkZUFsbCgpOworICAgIGlmKHRhZyA9PT0gJ2Zvcm0nKQorICAgIHsKKyAgICAgIGlmKHRoaXMuZWRpdG9yLmNvbmZpZy5Gb3JtT3BlcmF0aW9ucy5hbGxvd19lZGl0X2Zvcm0pCisgICAgICB7CisgICAgICAgIHRoaXMuc2hvd0Zvcm0oYWN0aXZlRWxlbWVudCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHRoaXMucGFuZWwuaGlkZSgpOworICAgICAgICB0aGlzLmFjdGl2ZUVsZW1lbnQgPSBudWxsOworICAgICAgICB0aGlzLnBhbmVsLmhpZGUoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisKKyAgICAgIGlmKHRoaXMuZWRpdG9yLmNvbmZpZy5Gb3JtT3BlcmF0aW9ucy5hbGxvd19lZGl0X2Zvcm0gJiYgdHlwZW9mIGFjdGl2ZUVsZW1lbnQuZm9ybSAhPSAndW5kZWZpbmVkJyAmJiBhY3RpdmVFbGVtZW50LmZvcm0pCisgICAgICB7CisgICAgICAgIHRoaXMuc2hvd0Zvcm0oYWN0aXZlRWxlbWVudC5mb3JtKTsKKyAgICAgIH0KKworICAgICAgc3dpdGNoKHRhZykKKyAgICAgIHsKKyAgICAgICAgY2FzZSAnZm9ybSc6CisgICAgICAgIHsKKyAgICAgICAgICB0aGlzLnNob3dGb3JtKGFjdGl2ZUVsZW1lbnQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJ2lucHV0JzoKKyAgICAgICAgeworICAgICAgICAgIHN3aXRjaChhY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgndHlwZScpLnRvTG93ZXJDYXNlKCkpCisgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSAndGV4dCcgICAgOgorICAgICAgICAgICAgY2FzZSAncGFzc3dvcmQnOgorICAgICAgICAgICAgY2FzZSAnaGlkZGVuJyAgOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICB0aGlzLnNob3dUZXh0KGFjdGl2ZUVsZW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ3JhZGlvJyAgIDoKKyAgICAgICAgICAgIGNhc2UgJ2NoZWNrYm94JzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdGhpcy5zaG93Q2JSZChhY3RpdmVFbGVtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdzdWJtaXQnICA6CisgICAgICAgICAgICBjYXNlICdyZXNldCcgICA6CisgICAgICAgICAgICBjYXNlICdidXR0b24nICA6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHRoaXMuc2hvd0J1dHRvbihhY3RpdmVFbGVtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICd0ZXh0YXJlYSc6CisgICAgICAgIHsKKyAgICAgICAgICB0aGlzLnNob3dUZXh0YXJlYShhY3RpdmVFbGVtZW50KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICdzZWxlY3QnOgorICAgICAgICB7CisgICAgICAgICAgdGhpcy5zaG93U2VsZWN0KGFjdGl2ZUVsZW1lbnQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIHsKKyAgICAgICAgICB0aGlzLmFjdGl2ZUVsZW1lbnQgPSBudWxsOworICAgICAgICAgIHRoaXMucGFuZWwuaGlkZSgpOworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIAorICAgIHRoaXMucGFuZWwuc2hvdygpOworICAgIAorICAgIC8vdGhpcy5lZGl0b3Iuc2Nyb2xsVG9FbGVtZW50KGFjdGl2ZUVsZW1lbnQpOworICAgIHRoaXMuYWN0aXZlRWxlbWVudCA9IGFjdGl2ZUVsZW1lbnQ7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgZWxzZQorICB7CisgICAgdGhpcy5hY3RpdmVFbGVtZW50ID0gbnVsbDsKKyAgICB0aGlzLnBhbmVsLmhpZGUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorfTsKKworCitGb3JtT3BlcmF0aW9ucy5wcm90b3R5cGUuaGlkZUFsbCA9IGZ1bmN0aW9uKCkKK3sKKyAgdGhpcy5wYW5lbC5nZXRFbGVtZW50QnlJZCgnZnNfZm9ybScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgIHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ2ZzX3RleHQnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICB0aGlzLnBhbmVsLmdldEVsZW1lbnRCeUlkKCdmc190ZXh0YXJlYScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgIHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ2ZzX3NlbGVjdCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgIHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ2ZzX2NicmQnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICB0aGlzLnBhbmVsLmdldEVsZW1lbnRCeUlkKCdmc19idXR0b24nKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworfTsKKworRm9ybU9wZXJhdGlvbnMucHJvdG90eXBlLnNob3dGb3JtID0gZnVuY3Rpb24oZm9ybSkKK3sKKyAgdGhpcy5wYW5lbC5nZXRFbGVtZW50QnlJZCgnZnNfZm9ybScpLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgdmFyIHZhbHMgPQorICB7CisgICAgJ2FjdGlvbicgOiBmb3JtLmFjdGlvbiwKKyAgICAnbWV0aG9kJyA6IGZvcm0ubWV0aG9kLnRvVXBwZXJDYXNlKCkKKyAgfQorICB0aGlzLnBhbmVsLnNldFZhbHVlcyh2YWxzKTsKKyAgdmFyIGYgPSBmb3JtOworICB0aGlzLnBhbmVsLmdldEVsZW1lbnRCeUlkKCdhY3Rpb24nKS5vbmtleXVwID0gZnVuY3Rpb24gKCkgeyBmLmFjdGlvbiA9IHRoaXMudmFsdWU7IH07CisgIHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ21ldGhvZCcpLm9uY2hhbmdlICAgPSBmdW5jdGlvbiAoKSB7IGYubWV0aG9kID0gdGhpcy5vcHRpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0udmFsdWU7IH07Cit9OworCitGb3JtT3BlcmF0aW9ucy5wcm90b3R5cGUuc2hvd1RleHQgPSBmdW5jdGlvbiAoaW5wdXQpCit7CisgIHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ2ZzX3RleHQnKS5zdHlsZS5kaXNwbGF5ID0gJyc7CisKKyAgdmFyIHZhbHMgPQorICB7CisgICAgJ3RleHRfbmFtZScgIDogdGhpcy5kZWZvcm1hdE5hbWUoaW5wdXQsIGlucHV0Lm5hbWUpLAorICAgICd0ZXh0X3ZhbHVlJyA6IGlucHV0LnZhbHVlLAorICAgICd0ZXh0X3R5cGUnICA6IGlucHV0LnR5cGUudG9Mb3dlckNhc2UoKSwKKyAgICAndGV4dF93aWR0aCcgOiBpbnB1dC5zdHlsZS53aWR0aCA/IHBhcnNlRmxvYXQoaW5wdXQuc3R5bGUud2lkdGgucmVwbGFjZSgvW14wLTkuXS8sICcnKSkgOiAnJywKKyAgICAndGV4dF93aWR0aF91bml0cyc6IGlucHV0LnN0eWxlLndpZHRoID8gaW5wdXQuc3R5bGUud2lkdGgucmVwbGFjZSgvWzAtOS5dLywgJycpLnRvTG93ZXJDYXNlKCkgOiAnZXgnLAorICAgICd0ZXh0X21heGxlbmd0aCcgIDogaW5wdXQubWF4bGVuZ3RoICAgPyBpbnB1dC5tYXhsZW5ndGggOiAnJworICB9CisgIHRoaXMucGFuZWwuc2V0VmFsdWVzKHZhbHMpOworCisgIHZhciBpID0gaW5wdXQ7CisgIHZhciBmbyA9IHRoaXM7CisKKyAgdGhpcy5wYW5lbC5nZXRFbGVtZW50QnlJZCgndGV4dF9uYW1lJykub25rZXl1cCAgID0gZnVuY3Rpb24gKCkgeyBpLm5hbWUgPSBmby5mb3JtYXROYW1lKGksIHRoaXMudmFsdWUpOyB9CisgIHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ3RleHRfdmFsdWUnKS5vbmtleXVwICA9IGZ1bmN0aW9uICgpIHsgaS52YWx1ZSA9IHRoaXMudmFsdWU7IH0KKyAgdGhpcy5wYW5lbC5nZXRFbGVtZW50QnlJZCgndGV4dF90eXBlJykub25jaGFuZ2UgICA9IGZ1bmN0aW9uICgpCisgICAgeworICAgICAgaWYoIVhpbmhhLmlzX2llKQorICAgICAgeworICAgICAgICBpLnR5cGUgPSB0aGlzLm9wdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLy8gSUUgZG9lcyBub3QgcGVybWl0IG1vZGlmaWNhdGlvbnMgb2YgdGhlIHR5cGUgb2YgYSBmb3JtIGZpZWxkIG9uY2UgaXQgaXMgc2V0CisgICAgICAgIC8vIFdlIHRoZXJlZm9yIGhhdmUgdG8gZGVzdHJveSBhbmQgcmVjcmVhdGUgaXQuICBJIHN3ZWFyLCBpZiBJIGV2ZXIKKyAgICAgICAgLy8gbWVldCBhbnkgb2YgdGhlIEludGVybmV0IEV4cGxvcmVyIGRldmVsb3BtZW50IHRlYW0gSSdtIGdvbm5hCisgICAgICAgIC8vIGtpY2sgdGhlbSBpbiB0aGUgbnV0cyEKKyAgICAgICAgdmFyIHRtcENvbnRhaW5lciA9IGZvLmVkaXRvci5fZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBpZighL3R5cGU9Ly50ZXN0KGkub3V0ZXJIVE1MKSkKKyAgICAgICAgeworICAgICAgICAgIHRtcENvbnRhaW5lci5pbm5lckhUTUwgPSBpLm91dGVySFRNTC5yZXBsYWNlKC88SU5QVVQvaSwgJzxpbnB1dCB0eXBlPSInKyB0aGlzLm9wdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZSArICciJyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgdG1wQ29udGFpbmVyLmlubmVySFRNTCA9IGkub3V0ZXJIVE1MLnJlcGxhY2UoL3R5cGU9Ij9bYS16XSsiPy9pLCAndHlwZT0iJyArIHRoaXMub3B0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdLnZhbHVlICsgJyInKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgbmV3RWxlbWVudCA9IFhpbmhhLnJlbW92ZUZyb21QYXJlbnQodG1wQ29udGFpbmVyLmNoaWxkTm9kZXNbMF0pOworICAgICAgICBpLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld0VsZW1lbnQsIGkpOworICAgICAgICBYaW5oYS5yZW1vdmVGcm9tUGFyZW50KGkpOworICAgICAgICBpbnB1dCA9IGkgPSBuZXdFbGVtZW50OworICAgICAgfQorICAgIH0KKworICB2YXIgdyAgPSB0aGlzLnBhbmVsLmdldEVsZW1lbnRCeUlkKCd0ZXh0X3dpZHRoJyk7CisgIHZhciB3dSA9IHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ3RleHRfd2lkdGhfdW5pdHMnKTsKKworICB0aGlzLnBhbmVsLmdldEVsZW1lbnRCeUlkKCd0ZXh0X3dpZHRoJykub25rZXl1cCAgICAgPQorICB0aGlzLnBhbmVsLmdldEVsZW1lbnRCeUlkKCd0ZXh0X3dpZHRoX3VuaXRzJykub25jaGFuZ2UgPQorICAgIGZ1bmN0aW9uICgpCisgICAgeworICAgICAgaWYoIXcudmFsdWUgfHwgaXNOYU4ocGFyc2VGbG9hdCh3LnZhbHVlKSkpCisgICAgICB7CisgICAgICAgIGkuc3R5bGUud2lkdGggPSAnJzsKKyAgICAgIH0KKyAgICAgIGkuc3R5bGUud2lkdGggPSBwYXJzZUZsb2F0KHcudmFsdWUpICsgd3Uub3B0aW9uc1t3dS5zZWxlY3RlZEluZGV4XS52YWx1ZTsKKyAgICB9CisKKyAgdGhpcy5wYW5lbC5nZXRFbGVtZW50QnlJZCgndGV4dF9tYXhsZW5ndGgnKS5vbmtleXVwID0gZnVuY3Rpb24gKCkgeyBpLm1heGxlbmd0aCA9IHRoaXMudmFsdWU7IH0KK307CisKK0Zvcm1PcGVyYXRpb25zLnByb3RvdHlwZS5zaG93Q2JSZCA9IGZ1bmN0aW9uIChpbnB1dCkKK3sKKyAgdGhpcy5wYW5lbC5nZXRFbGVtZW50QnlJZCgnZnNfY2JyZCcpLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgdmFyIHZhbHMgPQorICB7CisgICAgJ2NicmRfbmFtZScgICAgOiB0aGlzLmRlZm9ybWF0TmFtZShpbnB1dCwgaW5wdXQubmFtZSksCisgICAgJ2NicmRfdmFsdWUnICAgOiBpbnB1dC52YWx1ZSwKKyAgICAnY2JyZF9jaGVja2VkJyA6IGlucHV0LmNoZWNrZWQgPyAxIDogMCwKKyAgICAnY2JyZF90eXBlJyAgICA6IGlucHV0LnR5cGUudG9Mb3dlckNhc2UoKQorICB9OworICB0aGlzLnBhbmVsLnNldFZhbHVlcyh2YWxzKTsKKworICB2YXIgaSA9IGlucHV0OworICB2YXIgZm8gPSB0aGlzOworICB0aGlzLnBhbmVsLmdldEVsZW1lbnRCeUlkKCdjYnJkX25hbWUnKS5vbmtleXVwICAgPSBmdW5jdGlvbiAoKSB7IGkubmFtZSA9IGZvLmZvcm1hdE5hbWUoaSwgdGhpcy52YWx1ZSk7IH0KKyAgdGhpcy5wYW5lbC5nZXRFbGVtZW50QnlJZCgnY2JyZF92YWx1ZScpLm9ua2V5dXAgID0gZnVuY3Rpb24gKCkgeyBpLnZhbHVlID0gdGhpcy52YWx1ZTsgfQorICB0aGlzLnBhbmVsLmdldEVsZW1lbnRCeUlkKCdjYnJkX3R5cGUnKS5vbmNoYW5nZSAgID0gZnVuY3Rpb24gKCkKKyAgICB7CisgICAgICBpZighWGluaGEuaXNfaWUpCisgICAgICB7CisgICAgICAgIGkudHlwZSA9IHRoaXMub3B0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdLnZhbHVlOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvLyBJRSBkb2VzIG5vdCBwZXJtaXQgbW9kaWZpY2F0aW9ucyBvZiB0aGUgdHlwZSBvZiBhIGZvcm0gZmllbGQgb25jZSBpdCBpcyBzZXQKKyAgICAgICAgLy8gV2UgdGhlcmVmb3IgaGF2ZSB0byBkZXN0cm95IGFuZCByZWNyZWF0ZSBpdC4gIEkgc3dlYXIsIGlmIEkgZXZlcgorICAgICAgICAvLyBtZWV0IGFueSBvZiB0aGUgSW50ZXJuZXQgRXhwbG9yZXIgZGV2ZWxvcG1lbnQgdGVhbSBJJ20gZ29ubmEKKyAgICAgICAgLy8ga2ljayB0aGVtIGluIHRoZSBudXRzIQorICAgICAgICB2YXIgdG1wQ29udGFpbmVyID0gZm8uZWRpdG9yLl9kb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIGlmKCEvdHlwZT0vLnRlc3QoaS5vdXRlckhUTUwpKQorICAgICAgICB7CisgICAgICAgICAgdG1wQ29udGFpbmVyLmlubmVySFRNTCA9IGkub3V0ZXJIVE1MLnJlcGxhY2UoLzxJTlBVVC9pLCAnPGlucHV0IHR5cGU9IicrIHRoaXMub3B0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdLnZhbHVlICsgJyInKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICB0bXBDb250YWluZXIuaW5uZXJIVE1MID0gaS5vdXRlckhUTUwucmVwbGFjZSgvdHlwZT0iP1thLXpdKyI/L2ksICd0eXBlPSInICsgdGhpcy5vcHRpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0udmFsdWUgKyAnIicpOworICAgICAgICB9CisgICAgICAgIHZhciBuZXdFbGVtZW50ID0gWGluaGEucmVtb3ZlRnJvbVBhcmVudCh0bXBDb250YWluZXIuY2hpbGROb2Rlc1swXSk7CisgICAgICAgIGkucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3RWxlbWVudCwgaSk7CisgICAgICAgIFhpbmhhLnJlbW92ZUZyb21QYXJlbnQoaSk7CisgICAgICAgIGlucHV0ID0gaSA9IG5ld0VsZW1lbnQ7CisgICAgICB9CisgICAgfQorICB0aGlzLnBhbmVsLmdldEVsZW1lbnRCeUlkKCdjYnJkX2NoZWNrZWQnKS5vbmNsaWNrICAgPSBmdW5jdGlvbiAoKSB7IGkuY2hlY2tlZCA9IHRoaXMuY2hlY2tlZDsgfQorfTsKKworRm9ybU9wZXJhdGlvbnMucHJvdG90eXBlLnNob3dCdXR0b24gPSBmdW5jdGlvbiAoaW5wdXQpCit7CisgIHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ2ZzX2J1dHRvbicpLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgdmFyIHZhbHMgPQorICB7CisgICAgJ2J1dHRvbl9uYW1lJyAgICA6IHRoaXMuZGVmb3JtYXROYW1lKGlucHV0LCBpbnB1dC5uYW1lKSwKKyAgICAnYnV0dG9uX3ZhbHVlJyAgIDogaW5wdXQudmFsdWUsCisgICAgJ2J1dHRvbl90eXBlJyAgICA6IGlucHV0LnR5cGUudG9Mb3dlckNhc2UoKQorICB9OworICB0aGlzLnBhbmVsLnNldFZhbHVlcyh2YWxzKTsKKworICB2YXIgaSA9IGlucHV0OworICB2YXIgZm8gPSB0aGlzOworICB0aGlzLnBhbmVsLmdldEVsZW1lbnRCeUlkKCdidXR0b25fbmFtZScpLm9ua2V5dXAgICA9IGZ1bmN0aW9uICgpIHsgaS5uYW1lID0gZm8uZm9ybWF0TmFtZShpLCB0aGlzLnZhbHVlKTsgfTsKKyAgdGhpcy5wYW5lbC5nZXRFbGVtZW50QnlJZCgnYnV0dG9uX3ZhbHVlJykub25rZXl1cCAgPSBmdW5jdGlvbiAoKSB7IGkudmFsdWUgPSB0aGlzLnZhbHVlOyB9OworICB0aGlzLnBhbmVsLmdldEVsZW1lbnRCeUlkKCdidXR0b25fdHlwZScpLm9uY2hhbmdlICAgPSBmdW5jdGlvbiAoKQorICAgIHsKKyAgICAgIGlmKCFYaW5oYS5pc19pZSkKKyAgICAgIHsKKyAgICAgICAgaS50eXBlID0gdGhpcy5vcHRpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0udmFsdWU7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8vIElFIGRvZXMgbm90IHBlcm1pdCBtb2RpZmljYXRpb25zIG9mIHRoZSB0eXBlIG9mIGEgZm9ybSBmaWVsZCBvbmNlIGl0IGlzIHNldAorICAgICAgICAvLyBXZSB0aGVyZWZvciBoYXZlIHRvIGRlc3Ryb3kgYW5kIHJlY3JlYXRlIGl0LiAgSSBzd2VhciwgaWYgSSBldmVyCisgICAgICAgIC8vIG1lZXQgYW55IG9mIHRoZSBJbnRlcm5ldCBFeHBsb3JlciBkZXZlbG9wbWVudCB0ZWFtIEknbSBnb25uYQorICAgICAgICAvLyBraWNrIHRoZW0gaW4gdGhlIG51dHMhCisgICAgICAgIHZhciB0bXBDb250YWluZXIgPSBmby5lZGl0b3IuX2RvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgaWYoIS90eXBlPS8udGVzdChpLm91dGVySFRNTCkpCisgICAgICAgIHsKKyAgICAgICAgICB0bXBDb250YWluZXIuaW5uZXJIVE1MID0gaS5vdXRlckhUTUwucmVwbGFjZSgvPElOUFVUL2ksICc8aW5wdXQgdHlwZT0iJysgdGhpcy5vcHRpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0udmFsdWUgKyAnIicpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHRtcENvbnRhaW5lci5pbm5lckhUTUwgPSBpLm91dGVySFRNTC5yZXBsYWNlKC90eXBlPSI/W2Etel0rIj8vaSwgJ3R5cGU9IicgKyB0aGlzLm9wdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZSArICciJyk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIG5ld0VsZW1lbnQgPSBYaW5oYS5yZW1vdmVGcm9tUGFyZW50KHRtcENvbnRhaW5lci5jaGlsZE5vZGVzWzBdKTsKKyAgICAgICAgaS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdFbGVtZW50LCBpKTsKKyAgICAgICAgWGluaGEucmVtb3ZlRnJvbVBhcmVudChpKTsKKyAgICAgICAgaW5wdXQgPSBpID0gbmV3RWxlbWVudDsKKyAgICAgIH0KKyAgICB9OworfTsKKworRm9ybU9wZXJhdGlvbnMucHJvdG90eXBlLnNob3dUZXh0YXJlYSA9IGZ1bmN0aW9uIChpbnB1dCkKK3sKKyAgdGhpcy5wYW5lbC5nZXRFbGVtZW50QnlJZCgnZnNfdGV4dGFyZWEnKS5zdHlsZS5kaXNwbGF5ID0gJyc7CisgIHZhciB2YWxzID0KKyAgeworICAgICd0ZXh0YXJlYV9uYW1lJyAgOiB0aGlzLmRlZm9ybWF0TmFtZShpbnB1dCwgaW5wdXQubmFtZSksCisgICAgJ3RleHRhcmVhX3ZhbHVlJyA6IGlucHV0LnZhbHVlLAorICAgICd0ZXh0YXJlYV93aWR0aCcgOiBpbnB1dC5zdHlsZS53aWR0aCA/IHBhcnNlRmxvYXQoaW5wdXQuc3R5bGUud2lkdGgucmVwbGFjZSgvW14wLTkuXS8sICcnKSkgOiAnJywKKyAgICAndGV4dGFyZWFfd2lkdGhfdW5pdHMnIDogaW5wdXQuc3R5bGUud2lkdGggPyBpbnB1dC5zdHlsZS53aWR0aC5yZXBsYWNlKC9bMC05Ll0vLCAnJykudG9Mb3dlckNhc2UoKSA6ICdleCcsCisgICAgJ3RleHRhcmVhX2hlaWdodCcgICAgICA6IGlucHV0LnN0eWxlLmhlaWdodCA/IHBhcnNlRmxvYXQoaW5wdXQuc3R5bGUuaGVpZ2h0LnJlcGxhY2UoL1teMC05Ll0vLCAnJykpIDogJycsCisgICAgJ3RleHRhcmVhX2hlaWdodF91bml0cyc6IGlucHV0LnN0eWxlLmhlaWdodCA/IGlucHV0LnN0eWxlLmhlaWdodC5yZXBsYWNlKC9bMC05Ll0vLCAnJykudG9Mb3dlckNhc2UoKSA6ICdleCcKKyAgfTsKKworICB0aGlzLnBhbmVsLnNldFZhbHVlcyh2YWxzKTsKKworICB2YXIgaSA9IGlucHV0OworICB2YXIgZm8gPSB0aGlzOworICB0aGlzLnBhbmVsLmdldEVsZW1lbnRCeUlkKCd0ZXh0YXJlYV9uYW1lJykub25rZXl1cCAgID0gZnVuY3Rpb24gKCkgeyBpLm5hbWUgPSBmby5mb3JtYXROYW1lKGksIHRoaXMudmFsdWUpOyB9OworICB0aGlzLnBhbmVsLmdldEVsZW1lbnRCeUlkKCd0ZXh0YXJlYV92YWx1ZScpLm9ua2V5dXAgID0gZnVuY3Rpb24gKCkgeyBpLnZhbHVlID0gaS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlOyB9OworCisgIHZhciB3ICA9IHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ3RleHRhcmVhX3dpZHRoJyk7CisgIHZhciB3dSA9IHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ3RleHRhcmVhX3dpZHRoX3VuaXRzJyk7CisKKyAgdGhpcy5wYW5lbC5nZXRFbGVtZW50QnlJZCgndGV4dGFyZWFfd2lkdGgnKS5vbmtleXVwICAgICA9CisgIHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ3RleHRhcmVhX3dpZHRoX3VuaXRzJykub25jaGFuZ2UgPQorICAgIGZ1bmN0aW9uICgpCisgICAgeworICAgICAgaWYoIXcudmFsdWUgfHwgaXNOYU4ocGFyc2VGbG9hdCh3LnZhbHVlKSkpCisgICAgICB7CisgICAgICAgIGkuc3R5bGUud2lkdGggPSAnJzsKKyAgICAgIH0KKyAgICAgIGkuc3R5bGUud2lkdGggPSBwYXJzZUZsb2F0KHcudmFsdWUpICsgd3Uub3B0aW9uc1t3dS5zZWxlY3RlZEluZGV4XS52YWx1ZTsKKyAgICB9OworCisgIHZhciBoICA9IHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ3RleHRhcmVhX2hlaWdodCcpOworICB2YXIgaHUgPSB0aGlzLnBhbmVsLmdldEVsZW1lbnRCeUlkKCd0ZXh0YXJlYV9oZWlnaHRfdW5pdHMnKTsKKworICB0aGlzLnBhbmVsLmdldEVsZW1lbnRCeUlkKCd0ZXh0YXJlYV9oZWlnaHQnKS5vbmtleXVwICAgICA9CisgIHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ3RleHRhcmVhX2hlaWdodF91bml0cycpLm9uY2hhbmdlID0KKyAgICBmdW5jdGlvbiAoKQorICAgIHsKKyAgICAgIGlmKCFoLnZhbHVlIHx8IGlzTmFOKHBhcnNlRmxvYXQoaC52YWx1ZSkpKQorICAgICAgeworICAgICAgICBpLnN0eWxlLmhlaWdodCA9ICcnOworICAgICAgfQorICAgICAgaS5zdHlsZS5oZWlnaHQgPSBwYXJzZUZsb2F0KGgudmFsdWUpICsgaHUub3B0aW9uc1todS5zZWxlY3RlZEluZGV4XS52YWx1ZTsKKyAgICB9OworCit9OworCitGb3JtT3BlcmF0aW9ucy5wcm90b3R5cGUuc2hvd1NlbGVjdCA9IGZ1bmN0aW9uIChpbnB1dCkKK3sKKyAgdGhpcy5wYW5lbC5nZXRFbGVtZW50QnlJZCgnZnNfc2VsZWN0Jykuc3R5bGUuZGlzcGxheSA9ICcnOworICB2YXIgdmFscyA9CisgIHsKKyAgICAnc2VsZWN0X25hbWUnICA6IHRoaXMuZGVmb3JtYXROYW1lKGlucHV0LCBpbnB1dC5uYW1lKSwKKyAgICAnc2VsZWN0X211bHRpcGxlJyA6IGlucHV0Lm11bHRpcGxlID8gMSA6IDAsCisgICAgJ3NlbGVjdF93aWR0aCcgOiBpbnB1dC5zdHlsZS53aWR0aCA/IHBhcnNlRmxvYXQoaW5wdXQuc3R5bGUud2lkdGgucmVwbGFjZSgvW14wLTkuXS8sICcnKSkgOiAnJywKKyAgICAnc2VsZWN0X3dpZHRoX3VuaXRzJyA6IGlucHV0LnN0eWxlLndpZHRoID8gaW5wdXQuc3R5bGUud2lkdGgucmVwbGFjZSgvWzAtOS5dLywgJycpLnRvTG93ZXJDYXNlKCkgOiAnZXgnLAorICAgICAgJ3NlbGVjdF9oZWlnaHQnICAgICAgOiBpbnB1dC5zdHlsZS5oZWlnaHQgPyBwYXJzZUZsb2F0KGlucHV0LnN0eWxlLmhlaWdodC5yZXBsYWNlKC9bXjAtOS5dLywgJycpKSA6IChpbnB1dC5zaXplICYmIGlucHV0LnNpemUgPiAwID8gaW5wdXQuc2l6ZSA6IDEpLAorICAgICdzZWxlY3RfaGVpZ2h0X3VuaXRzJzogaW5wdXQuc3R5bGUuaGVpZ2h0ID8gaW5wdXQuc3R5bGUuaGVpZ2h0LnJlcGxhY2UoL1swLTkuXS8sICcnKS50b0xvd2VyQ2FzZSgpIDogJ2l0ZW1zJworICB9OworCisgIHRoaXMucGFuZWwuc2V0VmFsdWVzKHZhbHMpOworCisgIHZhciBpID0gaW5wdXQ7CisgIHZhciBmbyA9IHRoaXM7CisgIHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdF9uYW1lJykub25rZXl1cCAgID0gZnVuY3Rpb24gKCkgeyBpLm5hbWUgPSBmby5mb3JtYXROYW1lKGksIHRoaXMudmFsdWUpOyB9OworICB0aGlzLnBhbmVsLmdldEVsZW1lbnRCeUlkKCdzZWxlY3RfbXVsdGlwbGUnKS5vbmNsaWNrICAgPSBmdW5jdGlvbiAoKSB7IGkubXVsdGlwbGUgPSB0aGlzLmNoZWNrZWQ7IH07CisKKyAgdmFyIHcgID0gdGhpcy5wYW5lbC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0X3dpZHRoJyk7CisgIHZhciB3dSA9IHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdF93aWR0aF91bml0cycpOworCisgIHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdF93aWR0aCcpLm9ua2V5dXAgICAgID0KKyAgdGhpcy5wYW5lbC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0X3dpZHRoX3VuaXRzJykub25jaGFuZ2UgPQorICAgIGZ1bmN0aW9uICgpCisgICAgeworICAgICAgaWYoIXcudmFsdWUgfHwgaXNOYU4ocGFyc2VGbG9hdCh3LnZhbHVlKSkpCisgICAgICB7CisgICAgICAgIGkuc3R5bGUud2lkdGggPSAnJzsKKyAgICAgIH0KKyAgICAgIGkuc3R5bGUud2lkdGggPSBwYXJzZUZsb2F0KHcudmFsdWUpICsgd3Uub3B0aW9uc1t3dS5zZWxlY3RlZEluZGV4XS52YWx1ZTsKKyAgICB9OworCisgIHZhciBoICA9IHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdF9oZWlnaHQnKTsKKyAgdmFyIGh1ID0gdGhpcy5wYW5lbC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0X2hlaWdodF91bml0cycpOworCisgIHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdF9oZWlnaHQnKS5vbmtleXVwICAgICA9CisgIHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdF9oZWlnaHRfdW5pdHMnKS5vbmNoYW5nZSA9CisgICAgZnVuY3Rpb24gKCkKKyAgICB7CisgICAgICBpZighaC52YWx1ZSB8fCBpc05hTihwYXJzZUZsb2F0KGgudmFsdWUpKSkKKyAgICAgIHsKKyAgICAgICAgaS5zdHlsZS5oZWlnaHQgPSAnJzsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICBpZihodS5zZWxlY3RlZEluZGV4ID09IDApCisgICAgICB7CisgICAgICAgIGkuc3R5bGUuaGVpZ2h0ID0gJyc7CisgICAgICAgIGkuc2l6ZSA9IHBhcnNlSW50KGgudmFsdWUpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBpLnN0eWxlLmhlaWdodCA9IHBhcnNlRmxvYXQoaC52YWx1ZSkgKyBodS5vcHRpb25zW2h1LnNlbGVjdGVkSW5kZXhdLnZhbHVlOworICAgICAgfQorICAgIH07CisKKworICB2YXIgZm9fc2VsID0gdGhpcy5wYW5lbC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0X29wdGlvbnMnKTsKKyAgdGhpcy5hcnJheVRvT3B0cyh0aGlzLm9wdHNUb0FycmF5KGlucHV0Lm9wdGlvbnMpLCBmb19zZWwub3B0aW9ucyk7CisKKyAgdGhpcy5wYW5lbC5nZXRFbGVtZW50QnlJZCgnYWRkX29wdGlvbicpLm9uY2xpY2sgPQorICAgIGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICB2YXIgdHh0ID0gcHJvbXB0KFhpbmhhLl9sYygiRW50ZXIgdGhlIG5hbWUgZm9yIG5ldyBvcHRpb24uIiwgJ0Zvcm1PcGVyYXRpb25zJykpOworICAgICAgaWYodHh0ID09IG51bGwpIHJldHVybjsKKyAgICAgIHZhciBuZXdPcHQgPSBuZXcgT3B0aW9uKHR4dCk7CisgICAgICB2YXIgb3B0cyAgID0gZm8ub3B0c1RvQXJyYXkoZm9fc2VsLm9wdGlvbnMpOworICAgICAgaWYoZm9fc2VsLnNlbGVjdGVkSW5kZXggPj0gMCkKKyAgICAgIHsKKyAgICAgICAgb3B0cy5zcGxpY2UoZm9fc2VsLnNlbGVjdGVkSW5kZXgsIDAsIG5ld09wdCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIG9wdHMucHVzaChuZXdPcHQpOworICAgICAgfQorICAgICAgZm8uYXJyYXlUb09wdHMob3B0cywgaW5wdXQub3B0aW9ucyk7CisgICAgICBmby5hcnJheVRvT3B0cyhvcHRzLCBmb19zZWwub3B0aW9ucyk7CisgICAgfTsKKworICB0aGlzLnBhbmVsLmdldEVsZW1lbnRCeUlkKCdkZWxfb3B0aW9uJykub25jbGljayA9CisgICAgZnVuY3Rpb24oKQorICAgIHsKKyAgICAgIHZhciBvcHRzICAgID0gZm8ub3B0c1RvQXJyYXkoZm9fc2VsLm9wdGlvbnMpOworICAgICAgdmFyIG5ld09wdHMgPSBbIF07CisgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgb3B0cy5sZW5ndGg7IGkrKykKKyAgICAgIHsKKyAgICAgICAgaWYob3B0c1tpXS5zZWxlY3RlZCkgY29udGludWU7CisgICAgICAgIG5ld09wdHMucHVzaChvcHRzW2ldKTsKKyAgICAgIH0KKyAgICAgIGZvLmFycmF5VG9PcHRzKG5ld09wdHMsIGlucHV0Lm9wdGlvbnMpOworICAgICAgZm8uYXJyYXlUb09wdHMobmV3T3B0cywgZm9fc2VsLm9wdGlvbnMpOworICAgIH07CisKKyAgdGhpcy5wYW5lbC5nZXRFbGVtZW50QnlJZCgndXBfb3B0aW9uJykub25jbGljayA9CisgICAgZnVuY3Rpb24oKQorICAgIHsKKyAgICAgIGlmKCEoZm9fc2VsLnNlbGVjdGVkSW5kZXggPiAwKSkgcmV0dXJuOworICAgICAgdmFyIG9wdHMgICAgPSBmby5vcHRzVG9BcnJheShmb19zZWwub3B0aW9ucyk7CisgICAgICB2YXIgbW92ZSAgICA9IG9wdHMuc3BsaWNlKGZvX3NlbC5zZWxlY3RlZEluZGV4LCAxKS5wb3AoKTsKKyAgICAgIG9wdHMuc3BsaWNlKGZvX3NlbC5zZWxlY3RlZEluZGV4IC0gMSwgMCwgbW92ZSk7CisgICAgICBmby5hcnJheVRvT3B0cyhvcHRzLCBpbnB1dC5vcHRpb25zKTsKKyAgICAgIGZvLmFycmF5VG9PcHRzKG9wdHMsIGZvX3NlbC5vcHRpb25zKTsKKyAgICB9OworCisgIHRoaXMucGFuZWwuZ2V0RWxlbWVudEJ5SWQoJ2Rvd25fb3B0aW9uJykub25jbGljayA9CisgICAgZnVuY3Rpb24oKQorICAgIHsKKyAgICAgIGlmKGZvX3NlbC5zZWxlY3RlZEluZGV4ID09IGZvX3NlbC5vcHRpb25zLmxlbmd0aCAtIDEpIHJldHVybjsKKyAgICAgIHZhciBvcHRzICAgID0gZm8ub3B0c1RvQXJyYXkoZm9fc2VsLm9wdGlvbnMpOworICAgICAgdmFyIG1vdmUgICAgPSBvcHRzLnNwbGljZShmb19zZWwuc2VsZWN0ZWRJbmRleCwgMSkucG9wKCk7CisgICAgICBvcHRzLnNwbGljZShmb19zZWwuc2VsZWN0ZWRJbmRleCsxLCAwLCBtb3ZlKTsKKyAgICAgIGZvLmFycmF5VG9PcHRzKG9wdHMsIGlucHV0Lm9wdGlvbnMpOworICAgICAgZm8uYXJyYXlUb09wdHMob3B0cywgZm9fc2VsLm9wdGlvbnMpOworICAgIH07CisKKyAgdGhpcy5wYW5lbC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0X29wdGlvbnMnKS5vbmNoYW5nZSA9CisgICAgZnVuY3Rpb24oKQorICAgIHsKKyAgICAgIGZvLmFycmF5VG9PcHRzKGZvLm9wdHNUb0FycmF5KGZvX3NlbC5vcHRpb25zKSwgaW5wdXQub3B0aW9ucyk7CisgICAgfTsKK307CisKK0Zvcm1PcGVyYXRpb25zLnByb3RvdHlwZS5vcHRzVG9BcnJheSA9IGZ1bmN0aW9uKG8pCit7CisgIHZhciBhID0gWyBdOworICBmb3IodmFyIGkgPSAwOyBpIDwgby5sZW5ndGg7IGkrKykKKyAgeworICAgIGEucHVzaCgKKyAgICAgIHsKKyAgICAgICAgJ3RleHQnICAgICAgICAgICAgOiBvW2ldLnRleHQsCisgICAgICAgICd2YWx1ZScgICAgICAgICAgIDogb1tpXS52YWx1ZSwKKyAgICAgICAgJ2RlZmF1bHRTZWxlY3RlZCcgOiBvW2ldLmRlZmF1bHRTZWxlY3RlZCwKKyAgICAgICAgJ3NlbGVjdGVkJyAgICAgICAgOiBvW2ldLnNlbGVjdGVkCisgICAgICB9CisgICAgKTsKKyAgfQorICByZXR1cm4gYTsKK307CisKK0Zvcm1PcGVyYXRpb25zLnByb3RvdHlwZS5hcnJheVRvT3B0cyA9IGZ1bmN0aW9uKGEsIG8pCit7CisgIGZvcih2YXIgaSA9IG8ubGVuZ3RoIC0xOyBpID49IDA7IGktLSkKKyAgeworICAgIG9baV0gPSBudWxsOworICB9CisKKyAgZm9yKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspCisgIHsKKyAgICBvW2ldID0gbmV3IE9wdGlvbihhW2ldLnRleHQsIGFbaV0udmFsdWUsIGFbaV0uZGVmYXVsdFNlbGVjdGVkLCBhW2ldLnNlbGVjdGVkKTsKKyAgfQorfTsKKworRm9ybU9wZXJhdGlvbnMucHJvdG90eXBlLmZvcm1hdE5hbWUgPSBmdW5jdGlvbihpbnB1dCwgbmFtZSkKK3sKKworICAvLyBNdWx0aXBsZSBuYW1lCisgIHZhciBtbmFtZSA9IG5hbWU7CisgIHN3aXRjaCh0aGlzLmVkaXRvci5jb25maWcuRm9ybU9wZXJhdGlvbnMubXVsdGlwbGVfZmllbGRfZm9ybWF0KQorICB7CisgICAgY2FzZSAncGhwJzoKKyAgICB7CisgICAgICBtbmFtZSArPSAnW10nOworICAgIH0KKyAgICBicmVhazsKKworICAgIGNhc2UgJ3VubW9kaWZpZWQnOgorICAgIHsKKyAgICAgIC8vIExlYXZlIGFzIGlzLgorICAgIH0KKyAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgeworICAgICAgdGhyb3coIlVua25vd24gbXVsdGlwbGUgZmllbGQgZm9ybWF0ICIgKyB0aGlzLmVkaXRvci5jb25maWcuRm9ybU9wZXJhdGlvbnMubXVsdGlwbGVfZmllbGRfZm9ybWF0KTsKKyAgICB9CisgIH0KKworICBpZgorICAoCisgICAgICAgKGlucHV0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnc2VsZWN0JyAmJiBpbnB1dC5tdWx0aXBsZSkKKyAgICB8fCAoaW5wdXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdpbnB1dCcgICYmIGlucHV0LnR5cGUudG9Mb3dlckNhc2UoKSA9PSAnY2hlY2tib3gnKQorICApCisgIHsKKyAgICBuYW1lID0gbW5hbWU7CisgIH0KKworICByZXR1cm4gbmFtZTsKK307CisKK0Zvcm1PcGVyYXRpb25zLnByb3RvdHlwZS5kZWZvcm1hdE5hbWUgPSBmdW5jdGlvbihpbnB1dCwgbmFtZSkKK3sKKyAgaWYodGhpcy5lZGl0b3IuY29uZmlnLkZvcm1PcGVyYXRpb25zLm11bHRpcGxlX2ZpZWxkX2Zvcm1hdCA9PSAncGhwJykKKyAgeworICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoL1xbXF0kLywgJycpOworICB9CisKKyAgcmV0dXJuIG5hbWU7Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybU9wZXJhdGlvbnMvUkVBRE1FIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3JtT3BlcmF0aW9ucy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgxNmM2NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybU9wZXJhdGlvbnMvUkVBRE1FCkBAIC0wLDAgKzEsMzIgQEAKK0Zvcm0gT3BlcmF0aW9ucyBQbHVnaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVXNhZ2U6CisgIDEuIEZvbGxvdyB0aGUgc3RhbmRhcmQgcHJvY2VkdXJlIGZvciBsb2FkaW5nIGEgcGx1Z2luLgorICAyLiBZb3UgbWF5IGNvbmZpZ3VyZSB0aGUgcGx1Z2luIGJ5IHNldHRpbmcgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIHZhcmlhYmxlcywgb3IgbGVhdmUgdGhlbSBhcyB0aGUgZGVmYXVsdHMuCisKKyAgICAgIHhpbmhhX2NvbmZpZy5Gb3JtT3BlcmF0aW9ucy5tdWx0aXBsZV9maWVsZF9mb3JtYXQKKyAgICAgICAgPSAncGhwJworICAgICAgICAgICAgICB0aGlzIHdpbGwgY2F1c2UgY2hlY2tib3ggYW5kICJtdWx0aXBsZSIgc2VsZWN0IGZpZWxkcyB0byBoYXZlIFtdCisgICAgICAgICAgICAgIGFwcGVuZGVkIHRvIHRoaWVyIGZpZWxkIG5hbWVzIHNpbGVudGx5CisgICAgICAgID0gJ3VubW9kaWZpZWQnCisgICAgICAgICAgICAgIGZpZWxkIG5hbWVzIHdpbGwgbm90IGJlIHNpbGVudGx5IG1vZGlmaWVkCisKKyAgICAgIHhpbmhhX2NvbmZpZy5Gb3JtT3BlcmF0aW9ucy5hbGxvd19lZGl0X2Zvcm0KKyAgICAgICAgPSB0cnVlCisgICAgICAgICAgICAgIHRoZSB1c2VyIHdpbGwgYmUgYWJsZSB0byBlZGl0IHRoZSBhY3Rpb24sIGFuZCBtZXRob2Qgb2YgZm9ybXMKKyAgICAgICAgPSBmYWxzZQorICAgICAgICAgICAgICBuZWl0aGVyIGFjdGlvbiwgbm9yIG1ldGhvZCBpcyBlZGl0YWJsZQorCisgICAgICB4aW5oYV9jb25maWcuRm9ybU9wZXJhdGlvbnMuZGVmYXVsdF9mb3JtX2FjdGlvbgorICAgICAgICA9ICd3aGF0ZXZlciB5b3Ugd2FudCcKKyAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgZm9ybSBhY3Rpb24gdG8gc2V0IHdoZW4gaW5zZXJ0aW5nIGEgZm9ybS4gIFRoZSBzdGFuZGFyZCBvbmUgaXMgYSBwaHAgZmlsZSBpbiB0aGUgRm9ybSBPcGVyYXRpb25zIGRpcmVjdG9yeSB3aGljaCB3aWxsIGVtYWlsIHRoZSBmb3JtIHBvc3QgdG8gZW5xdWlyaWVzQDxzZXJ2ZXIgaG9zdG5hbWUgaGVyZT4KKworICAgICAgeGluaGFfY29uZmlnLkZvcm1PcGVyYXRpb25zLmRlZmF1bHRfZm9ybV9odG1sCisgICAgICAgID0gJzxmb3JtPndoYXRldmVyIHlvdSB3YW50IGhlcmU8L2Zvcm0+JworICAgICAgICAgICAgICB0aGUgZGVmYXVsdCBodG1sIHRvIGluc2VydCB3aGVuIGluc2VydGluZyBhIGZvcm0uICBUaGUgc3RhbmRhcmQgb25lIGlzIGEgYmFzaWMgY29udGFjdCBmb3JtLiAgSWYgeW91IHdvdWxkIGxpa2UgdG8gc3BlY2lmeSBhbiBleHRlcm5hbCBmaWxlIHdoaWNoIGNvbnRhaW5zIHRoZSBIVE1MIGZvciB0aGUgZm9ybSwgeW91IG1heSBkbyBzbyB2aWEKKyAgICAgICAgICAgICAgPSBIVE1MQXJlYS5fZ2V0dXJsY29udGVudCgnaHR0cDovL2Fic29sdXRlL3VybC90by9maWxlLmh0bWwnKQorICAgICAgICAgICAgICBzZWUgZGVmYXVsdF9mb3JtLmh0bWwgZm9yIGEgc3VpdGFibGUgZXhhbXBsZSwgcGF5IGF0dGVudGlvbiB0byB0aGUgZm9ybSB0YWcuCisKKworCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1PcGVyYXRpb25zL2RlZmF1bHRfZm9ybS5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3JtT3BlcmF0aW9ucy9kZWZhdWx0X2Zvcm0uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTdkNGUxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3JtT3BlcmF0aW9ucy9kZWZhdWx0X2Zvcm0uaHRtbApAQCAtMCwwICsxLDM2IEBACis8Zm9ybT4KKyAgPHRhYmxlIGNsYXNzPSJjb250YWN0X2Zvcm0iPgorICAgIDxjYXB0aW9uPkNvbnRhY3QgVXM8L2NhcHRpb24+CisgICAgPHRib2R5PgorICAgICAgPHRyPgorICAgICAgICA8dGg+WW91ciBuYW1lOjwvdGg+CisgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTmFtZSIgdmFsdWU9IiIgLz48L3RkPgorICAgICAgPC90cj4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRoPllvdXIgZW1haWw6PC90aD4KKyAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJFbWFpbCIgdmFsdWU9IiIgLz48L3RkPgorICAgICAgPC90cj4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRoPk1lc3NhZ2UgU3ViamVjdDo8L3RoPgorICAgICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlN1YmplY3QiIHZhbHVlPSIiIC8+PC90ZD4KKyAgICAgIDwvdHI+CisgICAgICA8dHI+CisgICAgICAgIDx0aD5XaGF0IGFyZSB5b3VyIGhvYmJpZXM/PC90aD4KKyAgICAgICAgPHRkPgorICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgdmFsdWU9Ik1hcmJsZXMiIG5hbWU9IkhvYmJpZXNbXSIgLz4gTWFyYmxlcyA8YnIgLz4KKyAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIHZhbHVlPSJDb25rZXJzIiBuYW1lPSJIb2JiaWVzW10iIC8+IENvbmtlcnMgPGJyIC8+CisgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiB2YWx1ZT0iSmFja3MiIG5hbWU9IkhvYmJpZXNbXSIgLz4gSmFja3MKKyAgICAgICAgPC90ZD4KKyAgICAgIDwvdHI+CisgICAgICA8dHI+CisgICAgICAgIDx0aD5NZXNzYWdlIEJvZHk6PC90aD4KKyAgICAgIDwvdHI+CisgICAgICA8dHI+CisgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KKyAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0iTWVzc2FnZSI+IDwvdGV4dGFyZWE+CisgICAgICAgIDwvdGQ+CisgICAgICA8L3RyPgorICAgIDwvdGJvZHk+CisgIDwvdGFibGU+CisgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZW5kIiAvPiAmbmJzcDsmbmJzcDsgPGlucHV0IHR5cGU9InJlc2V0IiB2YWx1ZT0iUmVzZXQiIC8+Cis8L2Zvcm0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3JtT3BlcmF0aW9ucy9mb3JtbWFpbC5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1PcGVyYXRpb25zL2Zvcm1tYWlsLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDhiMzI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3JtT3BlcmF0aW9ucy9mb3JtbWFpbC5waHAKQEAgLTAsMCArMSw5NSBAQAorPD9waHAKKworICAkc2VuZF90byAgICAgID0gJ1dlYnNpdGUgRW5xdWlyaWVzIDxlbnF1aXJpZXNAJyAuIHByZWdfcmVwbGFjZSgnL153d3cuLycsICcnLCAkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJz4nOworCisgICRlbWFpbGZpZWxkICAgPSBOVUxMOworICAkc3ViamVjdGZpZWxkID0gTlVMTDsKKyAgJG5hbWVmaWVsZCAgICA9IE5VTEw7CisKKyAgJHdoZW5fZG9uZV9nb3RvICAgID0gaXNzZXQoJF9SRVFVRVNUWyd3aGVuX2RvbmVfZ290byddKSA/ICRfUkVRVUVTVFsnd2hlbl9kb25lX2dvdG8nXSA6IE5VTEw7CisKKyAgaWYoJF9QT1NUKQorICB7CisgICAgdW5zZXQoJF9QT1NUWyd3aGVuX2RvbmVfZ290byddKTsKKyAgICAkbWVzc2FnZSAgICA9ICcnOworICAgICRsb25nZXN0S2V5ID0gMDsKKyAgICBmb3JlYWNoKGFycmF5X2tleXMoJF9QT1NUKSBhcyAka2V5KQorICAgIHsKKyAgICAgICRsb25nZXN0S2V5ID0gbWF4KHN0cmxlbigka2V5KSwgJGxvbmdlc3RLZXkpOworICAgIH0KKyAgICAkbG9uZ2VzdEtleSA9IG1heCgkbG9uZ2VzdEtleSwgMTUpOworCisgICAgZm9yZWFjaCgkX1BPU1QgYXMgJFZhciA9PiAkVmFsKQorICAgIHsKKyAgICAgIGlmKCEkZW1haWxmaWVsZCkKKyAgICAgIHsKKyAgICAgICAgaWYocHJlZ19tYXRjaCgnLyhefFxzKWUtP21haWwoXHN8JCkvaScsICRWYXIpKQorICAgICAgICB7CisgICAgICAgICAgJGVtYWlsZmllbGQgPSAkVmFyOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmKCEkc3ViamVjdGZpZWxkKQorICAgICAgeworICAgICAgICBpZihwcmVnX21hdGNoKCcvKF58XHMpc3ViamVjdChcc3wkKS9pJywgJFZhcikpCisgICAgICAgIHsKKyAgICAgICAgICAkc3ViamVjdGZpZWxkID0gJFZhcjsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZighJG5hbWVmaWVsZCkKKyAgICAgIHsKKyAgICAgICAgaWYocHJlZ19tYXRjaCgnLyhefFxzKWZyb20oXHN8JCkvaScsICRWYXIpIHx8IHByZWdfbWF0Y2goJy8oXnxccyluYW1lKFxzfCQpL2knLCAkVmFyKSkKKyAgICAgICAgeworICAgICAgICAgICRuYW1lZmllbGQgPSAkVmFyOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmKGlzX2FycmF5KCRWYWwpKQorICAgICAgeworICAgICAgICAkVmFsID0gaW1wbG9kZSgnLCAnLCAkVmFsKTsKKyAgICAgIH0KKworICAgICAgJG1lc3NhZ2UgLj0gJFZhcjsKKyAgICAgIGlmKHN0cmxlbigkVmFyKSA8ICRsb25nZXN0S2V5KQorICAgICAgeworICAgICAgICAkbWVzc2FnZSAuPSBzdHJfcmVwZWF0KCcuJywgJGxvbmdlc3RLZXkgLSBzdHJsZW4oJFZhcikpOworICAgICAgfQorICAgICAgJG1lc3NhZ2UgLj0gJzonOworICAgICAgaWYoKDY0IC0gbWF4KHN0cmxlbigkVmFyKSwgJGxvbmdlc3RLZXkpIDwgc3RybGVuKCRWYWwpKSB8fCBwcmVnX21hdGNoKCcvXHI/XG4vJywgJFZhbCkpCisgICAgICB7CisgICAgICAgICRtZXNzYWdlIC49ICJcclxuICAiOworICAgICAgICAkbWVzc2FnZSAuPSBwcmVnX3JlcGxhY2UoJy9ccj9cbi8nLCAiXHJcbiAgIiwgd29yZHdyYXAoJFZhbCwgNjIpKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgJG1lc3NhZ2UgLj0gJyAnIC4gJFZhbCAuICJcclxuIjsKKyAgICAgIH0KKyAgICB9CisKKyAgICAkc3ViamVjdCA9ICRzdWJqZWN0ZmllbGQgPyAkX1BPU1RbJHN1YmplY3RmaWVsZF0gOiAnRW5xdWlyeSc7CisgICAgJGVtYWlsICAgPSAkZW1haWxmaWVsZCAgID8gJF9QT1NUWyRlbWFpbGZpZWxkXSAgIDogICRzZW5kX3RvOworICAgIGlmKCRuYW1lZmllbGQpCisgICAgeworICAgICAgJGZyb20gPSAkX1BPU1RbJG5hbWVmaWVsZF0gLiAnIDwnIC4gJGVtYWlsIC4gJz4nOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgJGZyb20gPSAnV2Vic2l0ZSBWaXNpdG9yJyAuICcgPCcgLiAkZW1haWwgLiAnPic7CisgICAgfQorCisgICAgbWFpbCgkc2VuZF90bywgJHN1YmplY3QsICRtZXNzYWdlLCAiRnJvbTogJGZyb20iKTsKKworICAgIGlmKCEkd2hlbl9kb25lX2dvdG8pCisgICAgeworICAgICAgPz4KKyAgICAgIDxodG1sPjxoZWFkPjx0aXRsZT5NZXNzYWdlIFNlbnQ8L3RpdGxlPjwvaGVhZD48Ym9keT48aDE+TWVzc2FnZSBTZW50PC9oMT48L2JvZHk+PC9odG1sPgorICAgICAgPD9waHAKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGhlYWRlcigibG9jYXRpb246ICR3aGVuX2RvbmVfZ290byIpOworICAgICAgZXhpdDsKKyAgICB9CisgIH0KKz8+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1PcGVyYXRpb25zL2lmcmFtZS5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1PcGVyYXRpb25zL2lmcmFtZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVlMWRjZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybU9wZXJhdGlvbnMvaWZyYW1lLmNzcwpAQCAtMCwwICsxIEBACitmb3JtIHsgYm9yZGVyOiAxcHggcmVkIGRvdHRlZDsgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybU9wZXJhdGlvbnMvaW1nL2J1dHRvbnMuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3JtT3BlcmF0aW9ucy9pbWcvYnV0dG9ucy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQxNDE3MQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybU9wZXJhdGlvbnMvaW1nL2J1dHRvbnMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybU9wZXJhdGlvbnMvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybU9wZXJhdGlvbnMvbGFuZy9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGE4MmEyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3JtT3BlcmF0aW9ucy9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsMTkgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSW5zZXJ0IGEgRm9ybS4iOiAiRW1haWwgRm9ybSBlaW5mw7xnZW4uIiwKKyAgICAiSW5zZXJ0IGEgY2hlY2sgYm94LiI6ICJIw6RrY2hlbmZlbGQgZWluZsO8Z2VuIiwKKyAgICAiSW5zZXJ0IGEgbXVsdGktbGluZSB0ZXh0IGZpZWxkLiI6ICJNZWhyemVpbGlnZXMgVGV4dGZlbGQgZWluZsO8Z2VuLiIsCisgICAgIkluc2VydCBhIHJhZGlvIGJ1dHRvbi4iOiAiT3B0aW9uc2ZlbGQgZWluZsO8Z2VuIiwKKyAgICAiSW5zZXJ0IGEgc2VsZWN0IGZpZWxkLiI6ICJBdXN3YWhsZmVsZCBlaW5mw7xnZW4uIiwKKyAgICAiSW5zZXJ0IGEgc3VibWl0L3Jlc2V0IGJ1dHRvbi4iOiAiU2VuZGVuL3p1csO8Y2tzZXR6ZW4gU2NoYWx0ZmzDpGNoZSIsCisgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiUGFzc3dvcnQgb2RlciB1bnNpY2h0YmFyZXMgRmVsZCBlaW5mw7xnZW4uIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1PcGVyYXRpb25zL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1PcGVyYXRpb25zL2xhbmcvZnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkNzQwYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybU9wZXJhdGlvbnMvbGFuZy9mci5qcwpAQCAtMCwwICsxLDE5IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkluc2VydCBhIEZvcm0uIjogIkluc8OpcmVyIHVuIGZvcm11bGFpcmUiLAorICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIkluc8OpcmVyIHVuZSBjYXNlIMOgIGNvY2hlciIsCisgICAgIkluc2VydCBhIG11bHRpLWxpbmUgdGV4dCBmaWVsZC4iOiAiSW5zw6lyZXIgdW4gY2hhbXAgdGV4dGUgw6AgbGlnbmVzIG11bHRpcGxlcyIsCisgICAgIkluc2VydCBhIHJhZGlvIGJ1dHRvbi4iOiAiSW5zw6lyZXIgdW4gYm91dG9uIHJhZGlvIiwKKyAgICAiSW5zZXJ0IGEgc2VsZWN0IGZpZWxkLiI6ICJJbnPDqXJlciB1bmUgYm9pdGUgZGUgc8OpbGVjdGlvbiIsCisgICAgIkluc2VydCBhIHN1Ym1pdC9yZXNldCBidXR0b24uIjogIkluc8OpcmVyIHVuIGJvdXRvbiBkZSBzb3VtaXNzaW9uL2FubnVsYXRpb24iLAorICAgICJJbnNlcnQgYSB0ZXh0LCBwYXNzd29yZCBvciBoaWRkZW4gZmllbGQuIjogIkluc8OpcmVyIHVuIHRleHRlLCB1biBtb3QgZGUgcGFzc2Ugb3UgdW4gY2hhbXAgaW52aXNpYmxlIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1PcGVyYXRpb25zL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1PcGVyYXRpb25zL2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E4OTc2YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybU9wZXJhdGlvbnMvbGFuZy9qYS5qcwpAQCAtMCwwICsxLDYxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkVudGVyIHRoZSBuYW1lIGZvciBuZXcgb3B0aW9uLiI6ICLmlrDjgZfjgYTpgbjmip7ogqLjgavlkI3liY3jgpLjgaTjgZHjgabjgY/jgaDjgZXjgYTjgIIiLAorICAgICJGb3JtIEVkaXRvciI6ICLjg5Xjgqnjg7zjg6Djgqjjg4fjgqPjgr8iLAorICAgICJJbnNlcnQgYSBGb3JtLiI6ICLjg5Xjgqnjg7zjg6DjgpLmjL/lhaUiLAorICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIuODgeOCp+ODg+OCr+ODnOODg+OCr+OCueOCkuaMv+WFpSIsCisgICAgIkluc2VydCBhIG11bHRpLWxpbmUgdGV4dCBmaWVsZC4iOiAi6KSH5pWw6KGM44OG44Kt44K544OI44OV44Kj44O844Or44OJ44KS5oy/5YWlIiwKKyAgICAiSW5zZXJ0IGEgcmFkaW8gYnV0dG9uLiI6ICLjg6njgrjjgqrjg5zjgr/jg7PjgpLmjL/lhaUiLAorICAgICJJbnNlcnQgYSBzZWxlY3QgZmllbGQuIjogIumBuOaKnuODquOCueODiOOCkuaMv+WFpSIsCisgICAgIkluc2VydCBhIHN1Ym1pdC9yZXNldCBidXR0b24uIjogIumAgeS/oS/jg6rjgrvjg4Pjg4jjg5zjgr/jg7PjgpLmjL/lhaUiLAorICAgICJJbnNlcnQgYSB0ZXh0LCBwYXNzd29yZCBvciBoaWRkZW4gZmllbGQuIjogIuODhuOCreOCueODiC/jg5Hjgrnjg6/jg7zjg4kv6Z2e6KGo56S644OV44Kj44O844Or44OJ44KS5oy/5YWlIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiJSI6ICIlIiwKKyAgICAgICAgIkFjdGlvbjoiOiAi44Ki44Kv44K344On44OzOiIsCisgICAgICAgICJBZGQiOiAi6L+95YqgIiwKKyAgICAgICAgIkJ1dHRvbiI6ICLjg5zjgr/jg7MiLAorICAgICAgICAiQ2hlY2sgQm94IChcIlNlbGVjdCBNYW55XCIpIjogIuODgeOCp+ODg+OCr+ODnOODg+OCr+OCuSjopIfmlbDpgbjmip4pIiwKKyAgICAgICAgIkNoZWNrIEJveC9SYWRpbyBCdXR0b24iOiAi44OB44Kn44OD44Kv44Oc44OD44Kv44K5L+ODqeOCuOOCquODnOOCv+ODsyIsCisgICAgICAgICJEZWxldGUiOiAi5YmK6ZmkIiwKKyAgICAgICAgIkRyb3AtRG93bi9MaXN0IEZpZWxkIjogIuODieODreODg+ODl+ODgOOCpuODsy/jg6rjgrnjg4giLAorICAgICAgICAiRm9ybSI6ICLjg5Xjgqnjg7zjg6AiLAorICAgICAgICAiR0VUIjogIkdFVCIsCisgICAgICAgICJIZWlnaHQ6IjogIumrmOOBlToiLAorICAgICAgICAiSW5pdGlhbCBWYWx1ZSI6ICLliJ3mnJ/lgKQiLAorICAgICAgICAiSW5pdGlhbCBWYWx1ZToiOiAi5Yid5pyf5YCkOiIsCisgICAgICAgICJMYWJlbDoiOiAi44Op44OZ44OrOiIsCisgICAgICAgICJNYXggTGVuZ3RoOiI6ICLmnIDlpKfplbc6IiwKKyAgICAgICAgIk1heSBDaG9vc2UgTXVsdGlwbGU6IjogIuikh+aVsOmBuOaKnuWPr+iDvToiLAorICAgICAgICAiTWV0aG9kOiI6ICLjg6Hjgr3jg4Pjg4k6IiwKKyAgICAgICAgIk1vdmUgRG93biI6ICLkuIvjgbgiLAorICAgICAgICAiTW92ZSBVcCI6ICLkuIrjgbgiLAorICAgICAgICAiTXVsdGktbGluZSBGaWVsZCI6ICLopIfmlbDooYzjg5XjgqPjg7zjg6vjg4kiLAorICAgICAgICAiTmFtZToiOiAi5ZCN5YmNOiIsCisgICAgICAgICJPcHRpb25zIjogIumBuOaKnuiCoiIsCisgICAgICAgICJQT1NUIjogIlBPU1QiLAorICAgICAgICAiUmFkaW8gQnV0dG9uIChcIlNlbGVjdCBPbmVcIikiOiAi44Op44K444Kq44Oc44K/44OzKOWNmOS4gOmBuOaKnikiLAorICAgICAgICAiUmVzZXQiOiAi44Oq44K744OD44OIIiwKKyAgICAgICAgIlNlbGVjdGVkIGJ5IGRlZmF1bHQ6IjogIuODh+ODleOCqeODq+ODiOmBuOaKnjoiLAorICAgICAgICAiU3VibWl0IjogIumAgeS/oSIsCisgICAgICAgICJUZXh0IEZpZWxkIjogIuODhuOCreOCueODiOODleOCo+ODvOODq+ODiSIsCisgICAgICAgICJUaXA6IENoZWNrIGJveGVzIChzZWxlY3QgbWFueSkgYW5kIHJhZGlvIGJ1dHRvbnMgKHNlbGVjdCBvbmUgb25seSkgdGhhdCBhcmUgY2hvaWNlcyBmb3IgYSBzaW5nbGUgcXVlc3Rpb24gc2hvdWxkIGhhdmUgdGhlIHNhbWUgTmFtZSB0byB3b3JrIGNvcnJlY3RseS4iOiAi44OS44Oz44OIOuOBsuOBqOOBpOOBruizquWVj+OBq+OBpOOBhOOBpuOAgeikh+aVsOOBruODgeOCp+ODg+OCr+ODnOODg+OCr+OCuSjopIfmlbDpgbjmip4p44CB44G+44Gf44Gv6KSH5pWw44Gu44Op44K444Kq44Oc44K/44OzKOWNmOS4gOmBuOaKninjgYzjgYLjgovloLTlkIjjgIHjgZnjgbnjgabjgavlkIzjgZjlkI3liY3jgpLku5jjgZHjgarjgZHjgozjgbDmraPjgZfjgY/mqZ/og73jgZfjgb7jgZvjgpPjgIIiLAorICAgICAgICAiVHlwZToiOiAi44K/44Kk44OXOiIsCisgICAgICAgICJWYWx1ZToiOiAi5YCkOiIsCisgICAgICAgICJXaWR0aDoiOiAi5bmFOiIsCisgICAgICAgICJjaGFycyI6ICLmloflrZciLAorICAgICAgICAiaGlkZGVuIGZpZWxkIjogIumdnuihqOekuuODleOCo+ODvOODq+ODiSIsCisgICAgICAgICJpdGVtcyI6ICLpoIXnm64iLAorICAgICAgICAibm9ybWFsIHRleHQgZmllbGQiOiAi5qiZ5rqW44OG44Kt44K544OI44OV44Kj44O844Or44OJIiwKKyAgICAgICAgInBhc3N3b3JkIjogIuODkeOCueODr+ODvOODiSIsCisgICAgICAgICJweCI6ICLjg5Tjgq/jgrvjg6siCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1PcGVyYXRpb25zL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybU9wZXJhdGlvbnMvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNWFiN2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1PcGVyYXRpb25zL2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDM1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgIkVudGVyIHRoZSBuYW1lIGZvciBuZXcgb3B0aW9uLiI6ICIiLAorICAgICJGb3JtIEVkaXRvciI6ICIiLAorICAgICJJbnNlcnQgYSBGb3JtLiI6ICIiLAorICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIiIsCisgICAgIkluc2VydCBhIG11bHRpLWxpbmUgdGV4dCBmaWVsZC4iOiAiIiwKKyAgICAiSW5zZXJ0IGEgcmFkaW8gYnV0dG9uLiI6ICIiLAorICAgICJJbnNlcnQgYSBzZWxlY3QgZmllbGQuIjogIiIsCisgICAgIkluc2VydCBhIHN1Ym1pdC9yZXNldCBidXR0b24uIjogIiIsCisgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiIiwKKyAgICAiTWVzc2FnZSBTZW50IjogIiIsCisgICAgIlBsZWFzZSBTZWxlY3QuLi4iOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybU9wZXJhdGlvbnMvbGFuZy9uYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybU9wZXJhdGlvbnMvbGFuZy9uYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTdjY2ZkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3JtT3BlcmF0aW9ucy9sYW5nL25iLmpzCkBAIC0wLDAgKzEsMTkgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSW5zZXJ0IGEgRm9ybS4iOiAiU2V0dCBpbm4gc2tqZW1hIiwKKyAgICAiSW5zZXJ0IGEgY2hlY2sgYm94LiI6ICJIYWtlYm9rcyIsCisgICAgIkluc2VydCBhIG11bHRpLWxpbmUgdGV4dCBmaWVsZC4iOiAiU2V0dCBpbm4gdGVrc3RmZWx0IG1lZCBmbGVyZSBsaW5qZXIiLAorICAgICJJbnNlcnQgYSByYWRpbyBidXR0b24uIjogIlNldHQgaW5uIGVuIHJhZGlva25hcHAiLAorICAgICJJbnNlcnQgYSBzZWxlY3QgZmllbGQuIjogIlNldHQgaW5uIHZhbGdib2tzLyBuZXRyZWtrc2Jva3MiLAorICAgICJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiI6ICJTZXR0IGlubiBzZW5kLS9udWxsc3RpbGwga25hcHAgZm9yIHNramVtYWV0IiwKKyAgICAiSW5zZXJ0IGEgdGV4dCwgcGFzc3dvcmQgb3IgaGlkZGVuIGZpZWxkLiI6ICJTZXR0IGlubiBmb3JtZmVsdCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3JtT3BlcmF0aW9ucy9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3JtT3BlcmF0aW9ucy9sYW5nL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NmY4MjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1PcGVyYXRpb25zL2xhbmcvbmwuanMKQEAgLTAsMCArMSwxOSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJubCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJJbnNlcnQgYSBGb3JtLiI6ICJGb3JtdWxpZXIgaW52b2VnZW4iLAorICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIkVlbiBjaGVja2JveCBpbnZvZWdlbiIsCisgICAgIkluc2VydCBhIG11bHRpLWxpbmUgdGV4dCBmaWVsZC4iOiAiRWVuIHRla3N0dmVsZCBtZXQgbWVlcmRlcmUgbGlqbmVuIGludm9lZ2VuIiwKKyAgICAiSW5zZXJ0IGEgcmFkaW8gYnV0dG9uLiI6ICJFZW4gcmFkaW8ga25vcCBpbnZvZWdlbiIsCisgICAgIkluc2VydCBhIHNlbGVjdCBmaWVsZC4iOiAiRWVuIHNlbGVjdGllbGlqc3QgaW52b2VnZW4iLAorICAgICJJbnNlcnQgYSBzdWJtaXQvcmVzZXQgYnV0dG9uLiI6ICJFZW4gdmVyemVuZC93aXMga25vcCBpbnZvZWdlbiIsCisgICAgIkluc2VydCBhIHRleHQsIHBhc3N3b3JkIG9yIGhpZGRlbiBmaWVsZC4iOiAiVGVrc3QsIHdhY2h0d29vcmQgb2YgdmVyYm9yZ2VuIHZlbGQgaW52b2VnZW4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybU9wZXJhdGlvbnMvbGFuZy9wdF9ici5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybU9wZXJhdGlvbnMvbGFuZy9wdF9ici5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWJjNTEzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3JtT3BlcmF0aW9ucy9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMjEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiRW50ZXIgdGhlIG5hbWUgZm9yIG5ldyBvcHRpb24uIjogIkVudHJlIGNvbSBvIG5vbWUgcGFyYSBub3ZhIG9ww6fDo28iLAorICAgICJGb3JtIEVkaXRvciI6ICJFZGl0b3IgZGUgRm9ybXVsw6FyaW9zIiwKKyAgICAiSW5zZXJ0IGEgRm9ybS4iOiAiSW5zZXJpciB1bSBGb3JtdWzDoXJpby4iLAorICAgICJJbnNlcnQgYSBjaGVjayBib3guIjogIkluc2VyaXIgdW1hIGNhaXhhIGRlIG9ww6fDo28iLAorICAgICJJbnNlcnQgYSBtdWx0aS1saW5lIHRleHQgZmllbGQuIjogIkluc2VyaXIgdW0gdGV4dG8gbXVsdGktbGluaGEuIiwKKyAgICAiSW5zZXJ0IGEgcmFkaW8gYnV0dG9uLiI6ICJJbnNlcmlyIHVtIGNhbXBvIGRlIGVzY29saGEiLAorICAgICJJbnNlcnQgYSBzZWxlY3QgZmllbGQuIjogIkluc2VyaXIgc2VsZcOnw6NvLiIsCisgICAgIkluc2VydCBhIHN1Ym1pdC9yZXNldCBidXR0b24uIjogIkluc2VyaXIgdW0gYm90w6NvIGRlIGVudmlvL3Jlc2V0IiwKKyAgICAiSW5zZXJ0IGEgdGV4dCwgcGFzc3dvcmQgb3IgaGlkZGVuIGZpZWxkLiI6ICJJbnNlcmlyIHVtIHRleHRvLCBzZW5oYSBvdSBjYW1wbyBlc2NvbmRpZG8uIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1PcGVyYXRpb25zL3BhbmVsLmh0bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1PcGVyYXRpb25zL3BhbmVsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYxYjc3NQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybU9wZXJhdGlvbnMvcGFuZWwuaHRtbApAQCAtMCwwICsxLDIxMyBAQAorPGRpdj4KKzxoMSBpZD0iW2gxXSI+PGwxMG4+Rm9ybSBFZGl0b3I8L2wxMG4+PC9oMT4KKyAgPGZpZWxkc2V0IGlkPSJbZnNfZm9ybV0iPgorICAgIDxsZWdlbmQ+Rm9ybTwvbGVnZW5kPgorICAgIDx0YWJsZT4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRoPjxsYWJlbD5BY3Rpb246PC9sYWJlbD48L3RoPgorICAgICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIHNpemU9IjI1IiBuYW1lPSJbYWN0aW9uXSIgaWQ9IlthY3Rpb25dIiAvPjwvdGQ+CisKKyAgICAgICAgPHRoPjxsYWJlbD5NZXRob2Q6PC9sYWJlbD48L3RoPgorICAgICAgICA8dGQ+PHNlbGVjdCBuYW1lPSJbbWV0aG9kXSIgaWQ9IlttZXRob2RdIj48b3B0aW9uIHZhbHVlPSJQT1NUIj5QT1NUPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iR0VUIj5HRVQ8L29wdGlvbj48L3NlbGVjdD48L3RkPgorICAgICAgPC90cj4KKyAgICA8L3RhYmxlPgorICA8L2ZpZWxkc2V0PgorCisgIDxmaWVsZHNldCBpZD0iW2ZzX3RleHRdIj4KKyAgICA8bGVnZW5kPlRleHQgRmllbGQ8L2xlZ2VuZD4KKworICAgIDx0YWJsZT4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRoPk5hbWU6PC90aD4KKyAgICAgICAgPHRkPgorICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbdGV4dF9uYW1lXSIgaWQ9Ilt0ZXh0X25hbWVdIiBzaXplPSIyNSIgLz4KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPHRoPiZuYnNwOzwvdGg+CisgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgorICAgICAgPC90cj4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRoPlR5cGU6PC90aD4KKyAgICAgICAgPHRkPgorICAgICAgICAgIDxzZWxlY3QgbmFtZT0iW3RleHRfdHlwZV0iIGlkPSJbdGV4dF90eXBlXSI+CisgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ0ZXh0Ij5ub3JtYWwgdGV4dCBmaWVsZDwvb3B0aW9uPgorICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icGFzc3dvcmQiPnBhc3N3b3JkPC9vcHRpb24+CisgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJoaWRkZW4iPmhpZGRlbiBmaWVsZDwvb3B0aW9uPgorICAgICAgICAgIDwvc2VsZWN0PgorICAgICAgICA8L3RkPgorICAgICAgICA8dGg+SW5pdGlhbCBWYWx1ZTo8L3RoPgorICAgICAgICA8dGQ+CisgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ilt0ZXh0X3ZhbHVlXSIgaWQ9Ilt0ZXh0X3ZhbHVlXSIgc2l6ZT0iMjUiIC8+CisgICAgICAgIDwvdGQ+CisgICAgICA8L3RyPgorICAgICAgPHRyPgorICAgICAgICA8dGg+V2lkdGg6PC90aD4KKyAgICAgICAgPHRkPgorICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbdGV4dF93aWR0aF0iIGlkPSJbdGV4dF93aWR0aF0iIHNpemU9IjUiIC8+CisgICAgICAgICAgPHNlbGVjdCBuYW1lPSJbdGV4dF93aWR0aF91bml0c10iIGlkPSJbdGV4dF93aWR0aF91bml0c10iPgorICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZW0iPmNoYXJzPC9vcHRpb24+CisgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJweCI+cHg8L29wdGlvbgorICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiUiPiU8L29wdGlvbj4KKyAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPHRoPk1heCBMZW5ndGg6PC90aD4KKyAgICAgICAgPHRkPgorICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbdGV4dF9tYXhsZW5ndGhdIiBpZD0iW3RleHRfbWF4bGVuZ3RoXSIgICBzaXplPSI1IiAvPgorICAgICAgICA8L3RkPgorICAgICAgPC90cj4KKyAgICA8L3RhYmxlPgorICA8L2ZpZWxkc2V0PgorCisgIDxmaWVsZHNldCAgaWQ9Iltmc19jYnJkXSI+CisgICAgPGxlZ2VuZD5DaGVjayBCb3gvUmFkaW8gQnV0dG9uPC9sZWdlbmQ+CisgICAgPHRhYmxlPgorICAgICAgPHRyPgorICAgICAgICA8dGg+TmFtZTo8L3RoPgorICAgICAgICA8dGQ+CisgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IltjYnJkX25hbWVdIiBpZD0iW2NicmRfbmFtZV0iIHNpemU9IjI1IiAvPgorICAgICAgICA8L3RkPgorICAgICAgICA8dGg+VmFsdWU6PC90aD4KKyAgICAgICAgPHRkPgorICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbY2JyZF92YWx1ZV0iIGlkPSJbY2JyZF92YWx1ZV0iIHNpemU9IjI1IiAvPgorICAgICAgICA8L3RkPgorICAgICAgPC90cj4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRoPlR5cGU6PC90aD4KKyAgICAgICAgPHRkPgorICAgICAgICAgIDxzZWxlY3QgbmFtZT0iW2NicmRfdHlwZV0iIGlkPSJbY2JyZF90eXBlXSI+CisgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJjaGVja2JveCI+Q2hlY2sgQm94ICgiU2VsZWN0IE1hbnkiKTwvb3B0aW9uPgorICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icmFkaW8iPlJhZGlvIEJ1dHRvbiAoIlNlbGVjdCBPbmUiKTwvb3B0aW9uPgorICAgICAgICAgIDwvc2VsZWN0PgorICAgICAgICA8L3RkPgorICAgICAgICA8dGg+U2VsZWN0ZWQgYnkgZGVmYXVsdDo8L3RoPgorICAgICAgICA8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJbY2JyZF9jaGVja2VkXSIgaWQ9IltjYnJkX2NoZWNrZWRdIiB2YWx1ZT0iMSIgLz48L3RkPgorICAgICAgPC90cj4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRkIGNvbHNwYW49IjQiPgorICAgICAgICAgIDxwIGNsYXNzPSJoZWxwIj4KKyAgICAgICAgICAgIFRpcDogQ2hlY2sgYm94ZXMgKHNlbGVjdCBtYW55KSBhbmQgcmFkaW8gYnV0dG9ucyAoc2VsZWN0IG9uZSBvbmx5KSB0aGF0IGFyZSBjaG9pY2VzIGZvciBhIHNpbmdsZSBxdWVzdGlvbiBzaG91bGQgaGF2ZSB0aGUgc2FtZSBOYW1lIHRvIHdvcmsgY29ycmVjdGx5LgorICAgICAgICAgIDwvcD4KKyAgICAgICAgPC90ZD4KKyAgICAgIDwvdHI+CisgICAgPC90YWJsZT4KKyAgPC9maWVsZHNldD4KKworICA8ZmllbGRzZXQgIGlkPSJbZnNfYnV0dG9uXSI+CisgICAgPGxlZ2VuZD5CdXR0b248L2xlZ2VuZD4KKyAgICA8dGFibGU+CisgICAgICA8dHI+CisgICAgICAgIDx0aD5OYW1lOjwvdGg+CisgICAgICAgIDx0ZD4KKyAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iW2J1dHRvbl9uYW1lXSIgaWQ9IltidXR0b25fbmFtZV0iIHNpemU9IjI1IiAvPgorICAgICAgICA8L3RkPgorICAgICAgICA8dGg+TGFiZWw6PC90aD4KKyAgICAgICAgPHRkPgorICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbYnV0dG9uX3ZhbHVlXSIgaWQ9IltidXR0b25fdmFsdWVdIiBzaXplPSIyNSIgLz4KKyAgICAgICAgPC90ZD4KKyAgICAgIDwvdHI+CisgICAgICA8dHI+CisgICAgICAgIDx0aD5UeXBlOjwvdGg+CisgICAgICAgIDx0ZD4KKyAgICAgICAgICA8c2VsZWN0IG5hbWU9IltidXR0b25fdHlwZV0iIGlkPSJbYnV0dG9uX3R5cGVdIj4KKyAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InN1Ym1pdCI+U3VibWl0PC9vcHRpb24+CisgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJyZXNldCI+UmVzZXQ8L29wdGlvbj4KKyAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPHRkPiZuYnNwOzwvdGQ+CisgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgorICAgICAgPC90cj4KKyAgICA8L3RhYmxlPgorICA8L2ZpZWxkc2V0PgorCisKKyAgPGZpZWxkc2V0ICBpZD0iW2ZzX3RleHRhcmVhXSI+CisgICAgPGxlZ2VuZD5NdWx0aS1saW5lIEZpZWxkPC9sZWdlbmQ+CisgICAgPHRhYmxlPgorICAgICAgPHRyPgorICAgICAgICA8dGg+TmFtZTo8L3RoPgorICAgICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ilt0ZXh0YXJlYV9uYW1lXSIgaWQ9Ilt0ZXh0YXJlYV9uYW1lXSIgc2l6ZT0iMjUiIC8+PC90ZD4KKworICAgIDx0aD5Jbml0aWFsIFZhbHVlPC90aD4KKyAgICAgIDwvdHI+CisKKyAgICAgIDx0cj4KKyAgICAgICAgPHRoPldpZHRoOjwvdGg+CisgICAgICAgIDx0ZD4KKyAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iW3RleHRhcmVhX3dpZHRoXSIgaWQ9Ilt0ZXh0YXJlYV93aWR0aF0iIHNpemU9IjUiIC8+CisgICAgICAgICAgPHNlbGVjdCBuYW1lPSJbdGV4dGFyZWFfd2lkdGhfdW5pdHNdIiBpZD0iW3RleHRhcmVhX3dpZHRoX3VuaXRzXSI+CisgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJlbSI+Y2hhcnM8L29wdGlvbj4KKyAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB4Ij5weDwvb3B0aW9uPgorICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iJSI+JTwvb3B0aW9uPgorICAgICAgICAgIDwvc2VsZWN0PgorICAgICAgICA8L3RkPgorICAgICAgICA8dGQgcm93c3Bhbj0iMiI+PHRleHRhcmVhIG5hbWU9Ilt0ZXh0YXJlYV92YWx1ZV0iIGNvbHM9IjQwIiByb3dzPSI0IiBpZD0iW3RleHRhcmVhX3ZhbHVlXSI+PC90ZXh0YXJlYT48L3RkPgorICAgICAgPC90cj4KKworICAgICAgPHRyPgorICAgICAgICA8dGg+SGVpZ2h0OjwvdGg+CisgICAgICAgIDx0ZD4KKyAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iW3RleHRhcmVhX2hlaWdodF0iIGlkPSJbdGV4dGFyZWFfaGVpZ2h0XSIgc2l6ZT0iNSIgLz4KKyAgICAgICAgICA8c2VsZWN0IG5hbWU9Ilt0ZXh0YXJlYV9oZWlnaHRfdW5pdHNdIiBpZD0iW3RleHRhcmVhX2hlaWdodF91bml0c10iPgorICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZW0iPmNoYXJzPC9vcHRpb24+CisgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJweCI+cHg8L29wdGlvbj4KKyAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAgPC90ZD4KKyAgICAgIDwvdHI+CisKKyAgICA8L3RhYmxlPgorICA8L2ZpZWxkc2V0PgorCisgIDxmaWVsZHNldCAgaWQ9Iltmc19zZWxlY3RdIj4KKyAgICA8bGVnZW5kPkRyb3AtRG93bi9MaXN0IEZpZWxkPC9sZWdlbmQ+CisKKzx0YWJsZT4KKyAgPHRyPgorICAgIDx0aD5OYW1lOjwvdGg+CisgICAgPHRkPgorICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IltzZWxlY3RfbmFtZV0iIGlkPSJbc2VsZWN0X25hbWVdIiBzaXplPSIyNSIgLz4KKyAgICA8L3RkPgorICAgIDx0aCBjb2xzcGFuPSIyIj5PcHRpb25zPC90aD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0aD5NYXkgQ2hvb3NlIE11bHRpcGxlOjwvdGg+CisgICAgPHRkPgorICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJbc2VsZWN0X211bHRpcGxlXSIgaWQ9IltzZWxlY3RfbXVsdGlwbGVdIiBzaXplPSIyNSIgdmFsdWU9IjEiIC8+CisgICAgPC90ZD4KKyAgICA8dGQgcm93c3Bhbj0iMyI+CisgICAgICA8c2VsZWN0IG5hbWU9IltzZWxlY3Rfb3B0aW9uc10iIHNpemU9IjUiIGlkPSJbc2VsZWN0X29wdGlvbnNdIiA+CisgICAgICA8L3NlbGVjdD4KKyAgICA8L3RkPgorICAgIDx0ZCByb3dzcGFuPSIzIj4KKyAgICAgIDxpbnB1dCBuYW1lPSJidXR0b24iIHR5cGU9ImJ1dHRvbiIgaWQ9IlthZGRfb3B0aW9uXSIgdmFsdWU9IkFkZCIgICAgICAgLz4KKyAgICAgIDxicj4KKyAgICAgIDxpbnB1dCBuYW1lPSJidXR0b24yIiB0eXBlPSJidXR0b24iIGlkPSJbZGVsX29wdGlvbl0iIHZhbHVlPSJEZWxldGUiICAgIC8+CisgICAgICA8YnI+CisgICAgICA8aW5wdXQgbmFtZT0iYnV0dG9uMiIgIHR5cGU9ImJ1dHRvbiIgaWQ9Ilt1cF9vcHRpb25dIiB2YWx1ZT0iTW92ZSBVcCIgICAvPgorICAgICAgPGJyPgorICAgICAgPGlucHV0IG5hbWU9ImJ1dHRvbjIiICB0eXBlPSJidXR0b24iIGlkPSJbZG93bl9vcHRpb25dIiB2YWx1ZT0iTW92ZSBEb3duIiAvPgorICAgIDwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGg+V2lkdGg6PC90aD4KKyAgICA8dGQ+CisgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iW3NlbGVjdF93aWR0aF0iIGlkPSJbc2VsZWN0X3dpZHRoXSIgc2l6ZT0iNSIgLz4KKyAgICAgIDxzZWxlY3QgbmFtZT0iW3NlbGVjdF93aWR0aF91bml0c10iIGlkPSJbc2VsZWN0X3dpZHRoX3VuaXRzXSI+CisgICAgICAgIDxvcHRpb24gdmFsdWU9ImVtIj5jaGFyczwvb3B0aW9uPgorICAgICAgICA8b3B0aW9uIHZhbHVlPSJweCI+cHg8L29wdGlvbj4KKyAgICAgICAgPG9wdGlvbiB2YWx1ZT0iJSI+JTwvb3B0aW9uPgorICAgICAgPC9zZWxlY3Q+CisgICAgPC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0aD5IZWlnaHQ6PC90aD4KKyAgICA8dGQ+CisgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iW3NlbGVjdF9oZWlnaHRdIiBpZD0iW3NlbGVjdF9oZWlnaHRdIiBzaXplPSI1IiAvPgorICAgICAgPHNlbGVjdCBuYW1lPSJbc2VsZWN0X2hlaWdodF91bml0c10iIGlkPSJbc2VsZWN0X2hlaWdodF91bml0c10iPgorICAgICAgICA8b3B0aW9uIHZhbHVlPSJpdGVtcyI+aXRlbXM8L29wdGlvbj4KKyAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHgiPnB4PC9vcHRpb24+CisgICAgICA8L3NlbGVjdD4KKyAgICA8L3RkPgorICA8L3RyPgorPC90YWJsZT4KKyAgPC9maWVsZHNldD4KKzwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvRm9ybXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL0Zvcm1zLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyN2NkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL0Zvcm1zLmpzCkBAIC0wLDAgKzEsMzU0IEBACisvLyBGb3JtIHBsdWdpbiBmb3IgWGluaGEKKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKworCitmdW5jdGlvbiBGb3JtcyhlZGl0b3IpIHsKKyAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisgIHZhciBjZmcgPSBlZGl0b3IuY29uZmlnOworICB2YXIgYmwgPSBGb3Jtcy5idG5MaXN0OworICB2YXIgc2VsZiA9IHRoaXM7CisgIC8vIHJlZ2lzdGVyIHRoZSB0b29sYmFyIGJ1dHRvbnMgcHJvdmlkZWQgYnkgdGhpcyBwbHVnaW4KKyAgdmFyIHRvb2xiYXIgPSBbImxpbmVicmVhayJdOworICBmb3IgKHZhciBpID0gMDsgaSA8IGJsLmxlbmd0aDsgKytpKSB7CisgICAgdmFyIGJ0biA9IGJsW2ldOworICAgIGlmICghYnRuKSB7CisgICAgICB0b29sYmFyLnB1c2goInNlcGFyYXRvciIpOworICAgIH0gZWxzZSB7CisgICAgICB2YXIgaWQgPSBidG5bMF07CisgICAgICBpZiAoaTwzKQorICAgICAgICBjZmcucmVnaXN0ZXJCdXR0b24oaWQsIHRoaXMuX2xjKGJ0blsxXSksIGVkaXRvci5pbWdVUkwoImVkXyIgKyBidG5bMF0gKyAiLmdpZiIsICJGb3JtcyIpLCBmYWxzZSwKKyAgICAgICAgICAgICBmdW5jdGlvbihlZGl0b3IsIGlkKSB7CisgICAgICAgICAgICAgICAvLyBkaXNwYXRjaCBidXR0b24gcHJlc3MgZXZlbnQKKyAgICAgICAgICAgICAgIHNlbGYuYnV0dG9uUHJlc3MoZWRpdG9yLCBpZCk7CisgICAgICAgICAgICAgfSk7CisgICAgICBlbHNlCisgICAgICAgIGNmZy5yZWdpc3RlckJ1dHRvbihpZCwgdGhpcy5fbGMoYnRuWzFdKSwgZWRpdG9yLmltZ1VSTCgiZWRfIiArIGJ0blswXSArICIuZ2lmIiwgIkZvcm1zIiksIGZhbHNlLAorICAgICAgICAgICAgIGZ1bmN0aW9uKGVkaXRvciwgaWQpIHsKKyAgICAgICAgICAgICAgIC8vIGRpc3BhdGNoIGJ1dHRvbiBwcmVzcyBldmVudAorICAgICAgICAgICAgICAgc2VsZi5idXR0b25QcmVzcyhlZGl0b3IsIGlkKTsKKyAgICAgICAgICAgICB9LCJmb3JtIik7CisgICAgICB0b29sYmFyLnB1c2goaWQpOworICAgIH0KKyAgfQorICAvLyBhZGQgYSBuZXcgbGluZSBpbiB0aGUgdG9vbGJhcgorICBjZmcudG9vbGJhci5wdXNoKHRvb2xiYXIpOworfQorCitGb3Jtcy5fcGx1Z2luSW5mbyA9IHsKKyAgbmFtZSAgICAgICAgICA6ICJGb3JtcyIsCisgIG9yaWdpbiAgICAgICAgOiAidmVyc2lvbjogMS4wLCBieSBOZWxzb24gQnJpZ2h0LCBCcmlnaHRXb3JrLCBJbmMuLCBodHRwOi8vd3d3LmJyaWdodHdvcmt3ZWIuY29tIiwKKyAgdmVyc2lvbiAgICAgICA6ICIyLjAiLAorICBkZXZlbG9wZXIgICAgIDogIlVkbyBTY2htYWwiLAorICBkZXZlbG9wZXJfdXJsIDogIiIsCisgIHNwb25zb3IgICAgICAgOiAiTC5OLlNjaGFmZnJhdGggTmV1ZU1lZGllbiIsCisgIHNwb25zb3JfdXJsICAgOiAiaHR0cDovL3d3dy5zY2hhZmZyYXRoLW5ldWVtZWRpZW4uZGUvIiwKKyAgY19vd25lciAgICAgICA6ICJVZG8gU2NobWFsICYgU2NoYWZmcmF0aC1OZXVlTWVkaWVuIiwKKyAgbGljZW5zZSAgICAgICA6ICJodG1sQXJlYSIKK307CisKKy8vIHRoZSBsaXN0IG9mIGJ1dHRvbnMgYWRkZWQgYnkgdGhpcyBwbHVnaW4KK0Zvcm1zLmJ0bkxpc3QgPSBbCisgIC8vIGZvcm0gcHJvcGVydGllcyBidXR0b24KKyAgbnVsbCwgLy8gc2VwYXJhdG9yCisgIFsiZm9ybSIsICAgICAgICAiRm9ybSJdLAorICBudWxsLCAvLyBzZXBhcmF0b3IKKyAgLy8gZm9ybSBlbGVtZW50cworICBbInRleHRhcmVhIiwgICAgIlRleHRhcmVhIl0sCisgIFsic2VsZWN0IiwgICAgICAiU2VsZWN0aW9uIEZpZWxkIl0sCisgIFsiY2hlY2tib3giLCAgICAiQ2hlY2tib3giXSwKKyAgWyJyYWRpbyIsICAgICAgICJSYWRpbyBCdXR0b24iXSwKKyAgWyJ0ZXh0IiwgICAgICAgICJUZXh0IEZpZWxkIl0sCisgIFsicGFzc3dvcmQiLCAgICAiUGFzc3dvcmQgRmllbGQiXSwKKyAgWyJmaWxlIiwgICAgICAgICJGaWxlIEZpZWxkIl0sCisgIFsiYnV0dG9uIiwgICAgICAiQnV0dG9uIl0sCisgIFsic3VibWl0IiwgICAgICAiU3VibWl0IEJ1dHRvbiJdLAorICBbInJlc2V0IiwgICAgICAgIlJlc2V0IEJ1dHRvbiJdLAorICBbImltYWdlIiwgICAgICAgIkltYWdlIEJ1dHRvbiJdLAorICBbImhpZGRlbiIsICAgICAgIkhpZGRlbiBGaWVsZCJdLAorICBbImxhYmVsIiwgICAgICAgIkxhYmVsIl0sCisgIFsiZmllbGRzZXQiLCAgICAiRmllbGQgU2V0Il0KKyAgXTsKKworRm9ybXMucHJvdG90eXBlLl9sYyA9IGZ1bmN0aW9uKHN0cmluZykgeworICAgIHJldHVybiBYaW5oYS5fbGMoc3RyaW5nLCAnRm9ybXMnKTsKK307CisKK0Zvcm1zLnByb3RvdHlwZS5vbkdlbmVyYXRlID0gZnVuY3Rpb24oKSB7CisgIHRoaXMuZWRpdG9yLmFkZEVkaXRvclN0eWxlc2hlZXQoWGluaGEuZ2V0UGx1Z2luRGlyKCJGb3JtcyIpICsgJy9mb3Jtcy5jc3MnKTsKK307CisKK0Zvcm1zLnByb3RvdHlwZS5idXR0b25QcmVzcyA9IGZ1bmN0aW9uKGVkaXRvcixidXR0b25faWQsIG5vZGUpIHsKKyAgZnVuY3Rpb24gb3B0aW9uVmFsdWVzKHRleHQsdmFsdWUpIHsKKyAgICB0aGlzLnRleHQgPSB0ZXh0OworICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKKyAgfQorICB2YXIgb3V0cGFyYW0gPSBuZXcgT2JqZWN0KCk7CisgIHZhciB0eXBlID0gYnV0dG9uX2lkOworICB2YXIgc2VsID0gZWRpdG9yLl9nZXRTZWxlY3Rpb24oKTsKKyAgdmFyIHJhbmdlID0gZWRpdG9yLl9jcmVhdGVSYW5nZShzZWwpOworICBpZiAoYnV0dG9uX2lkPT0iZm9ybSIpIHsgLy9Gb3JtCisgICAgLy8gc2VlIGlmIHNlbGVjdGlvbiBpcyBpbnNpZGUgYW4gZXhpc3RpbmcgJ2Zvcm0nIHRhZworICAgIHZhciBwZSA9IGVkaXRvci5nZXRQYXJlbnRFbGVtZW50KCk7CisgICAgdmFyIGZybSA9IG51bGw7CisgICAgd2hpbGUgKHBlICYmIChwZS5ub2RlVHlwZSA9PSAxKSAmJiAocGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9ICdib2R5JykpIHsKKyAgICAgIGlmKHBlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAiZm9ybSIpIHsKKyAgICAgICAgZnJtID0gcGU7CisgICAgICAgIGJyZWFrOworICAgICAgfSBlbHNlCisgICAgICAgIHBlID0gcGUucGFyZW50Tm9kZTsKKyAgICB9CisgICAgaWYgKGZybSkgeworICAgICAgb3V0cGFyYW0uZl9uYW1lID0gZnJtLm5hbWU7CisgICAgICBvdXRwYXJhbS5mX2FjdGlvbiA9IGZybS5hY3Rpb247CisgICAgICBvdXRwYXJhbS5mX21ldGhvZCA9IGZybS5tZXRob2Q7CisgICAgICBvdXRwYXJhbS5mX2VuY3R5cGUgPSBmcm0uZW5jdHlwZTsKKyAgICAgIG91dHBhcmFtLmZfdGFyZ2V0ID0gZnJtLnRhcmdldDsKKyAgICB9IGVsc2UgezsKKyAgICAgIG91dHBhcmFtLmZfbmFtZSA9ICIiOworICAgICAgb3V0cGFyYW0uZl9hY3Rpb24gPSAiIjsKKyAgICAgIG91dHBhcmFtLmZfbWV0aG9kID0gIiI7CisgICAgICBvdXRwYXJhbS5mX2VuY3R5cGUgPSAiIjsKKyAgICAgIG91dHBhcmFtLmZfdGFyZ2V0ID0gIiI7CisgICAgfQorICAgIGVkaXRvci5fcG9wdXBEaWFsb2coInBsdWdpbjovL0Zvcm1zL2Zvcm0iLCBmdW5jdGlvbihwYXJhbSkgeworICAgICAgaWYgKHBhcmFtKSB7CisgICAgICAgIGlmKGZybSkgeworICAgICAgICAgIGZybS5uYW1lID0gcGFyYW1bImZfbmFtZSJdOworICAgICAgICAgIGZybS5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsIHBhcmFtWyJmX2FjdGlvbiJdKTsKKyAgICAgICAgICBmcm0uc2V0QXR0cmlidXRlKCJtZXRob2QiLCBwYXJhbVsiZl9tZXRob2QiXSk7CisgICAgICAgICAgZnJtLnNldEF0dHJpYnV0ZSgiZW5jdHlwZSIscGFyYW1bImZfZW5jdHlwZSJdKTsKKyAgICAgICAgICBmcm0uc2V0QXR0cmlidXRlKCJ0YXJnZXQiLCBwYXJhbVsiZl90YXJnZXQiXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZnJtID0gJzxmb3JtIG5hbWU9IicgKyBwYXJhbVsiZl9uYW1lIl0gKyAnIic7CisgICAgICAgICAgaWYgKHBhcmFtWyJmX2FjdGlvbiJdICE9ICIiKSBmcm0gKz0gJyBhY3Rpb249IicgKyBwYXJhbVsiZl9hY3Rpb24iXSArICciJzsKKyAgICAgICAgICBpZiAocGFyYW1bImZfbWV0aG9kIl0gIT0gIiIpIGZybSArPSAnIG1ldGhvZD0iJyArIHBhcmFtWyJmX21ldGhvZCJdICsgJyInOworICAgICAgICAgIGlmIChwYXJhbVsiZl9lbmN0eXBlIl0gIT0gIiIpIGZybSArPSAnIGVuY3R5cGU9IicgKyBwYXJhbVsiZl9lbmN0eXBlIl0gKyAnIic7CisgICAgICAgICAgaWYgKHBhcmFtWyJmX3RhcmdldCJdICE9ICIiKSBmcm0gKz0gJyB0YXJnZXQ9IicgKyBwYXJhbVsiZl90YXJnZXQiXSArICciJzsKKyAgICAgICAgICBmcm0gKz0gJz4nOworICAgICAgICAgIGVkaXRvci5zdXJyb3VuZEhUTUwoZnJtLCAnJm5ic3A7PC9mb3JtPicpOworICAgICAgICB9CisgICAgICB9CisgICAgfSwgb3V0cGFyYW0pOworCisgIH0gZWxzZSB7IC8vIGZvcm0gZWxlbWVudCAoY2hlY2tib3gsIHJhZGlvLCB0ZXh0LCBwYXNzd29yZCwgdGV4dGFyZWEsIHNlbGVjdCwgYnV0dG9uLCBzdWJtaXQsIHJlc2V0LCBpbWFnZSwgaGlkZGVuKQorICAgIHZhciB0YWdOYW1lID0gIiI7CisgICAgLy8gc2VlIGlmIHNlbGVjdGlvbiBpcyBhbiBmb3JtIGVsZW1lbnQKKyAgICBpZiAodHlwZW9mIG5vZGUgPT0gInVuZGVmaW5lZCIpIHsKKyAgICAgIG5vZGUgPSBlZGl0b3IuZ2V0UGFyZW50RWxlbWVudCgpOworICAgICAgdmFyIHRhZyA9IG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpCisgICAgICBpZiAobm9kZSAmJiAodGFnID09ICJsZWdlbmQiKSkgeworICAgICAgICBub2RlID0gbm9kZS5wYXJlbnRFbGVtZW50OworICAgICAgICB0YWcgPSBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgIH0KKyAgICAgIGlmIChub2RlICYmICEodGFnID09ICJ0ZXh0YXJlYSIgfHwgdGFnID09ICJzZWxlY3QiIHx8IHRhZyA9PSAiaW5wdXQiIHx8IHRhZyA9PSAibGFiZWwiIHx8IHRhZyA9PSAiZmllbGRzZXQiKSkKKyAgICAgICAgbm9kZSA9IG51bGw7CisgICAgfQorCisgICAgaWYobm9kZSkgeworICAgICAgdHlwZSA9IG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgb3V0cGFyYW0uZl9uYW1lID0gbm9kZS5uYW1lOworICAgICAgdGFnTmFtZSA9IG5vZGUudGFnTmFtZTsKKyAgICAgIGlmICh0eXBlID09ICJpbnB1dCIpIHsKKyAgICAgICAgb3V0cGFyYW0uZl90eXBlID0gbm9kZS50eXBlOworICAgICAgICB0eXBlID0gbm9kZS50eXBlOworICAgICAgfQorICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgInRleHRhcmVhIjoKKyAgICAgICAgICBvdXRwYXJhbS5mX2NvbHMgPSBub2RlLmNvbHM7CisgICAgICAgICAgb3V0cGFyYW0uZl9yb3dzID0gbm9kZS5yb3dzOworICAgICAgICAgIG91dHBhcmFtLmZfdGV4dCA9IG5vZGUuaW5uZXJIVE1MOworICAgICAgICAgIG91dHBhcmFtLmZfd3JhcCA9IG5vZGUuZ2V0QXR0cmlidXRlKCJ3cmFwIik7CisgICAgICAgICAgb3V0cGFyYW0uZl9yZWFkT25seSA9IG5vZGUuZ2V0QXR0cmlidXRlKCJyZWFkT25seSIpOworICAgICAgICAgIG91dHBhcmFtLmZfZGlzYWJsZWQgPSBub2RlLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKTsKKyAgICAgICAgICBvdXRwYXJhbS5mX3RhYmluZGV4ID0gbm9kZS5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7CisgICAgICAgICAgb3V0cGFyYW0uZl9hY2Nlc3NrZXkgPSBub2RlLmdldEF0dHJpYnV0ZSgiYWNjZXNza2V5Iik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgInNlbGVjdCI6CisgICAgICAgICAgb3V0cGFyYW0uZl9zaXplID0gcGFyc2VJbnQobm9kZS5zaXplKTsKKyAgICAgICAgICBvdXRwYXJhbS5mX211bHRpcGxlID0gbm9kZS5nZXRBdHRyaWJ1dGUoIm11bHRpcGxlIik7CisgICAgICAgICAgb3V0cGFyYW0uZl9kaXNhYmxlZCA9IG5vZGUuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpOworICAgICAgICAgIG91dHBhcmFtLmZfdGFiaW5kZXggPSBub2RlLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTsKKyAgICAgICAgICB2YXIgYV9vcHRpb25zID0gbmV3IEFycmF5KCk7CisgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPD1ub2RlLm9wdGlvbnMubGVuZ3RoLTE7IGkrKykgeworICAgICAgICAgICAgYV9vcHRpb25zW2ldID0gbmV3IG9wdGlvblZhbHVlcyhub2RlLm9wdGlvbnNbaV0udGV4dCwgbm9kZS5vcHRpb25zW2ldLnZhbHVlKTsKKyAgICAgICAgICB9CisgICAgICAgICAgb3V0cGFyYW0uZl9vcHRpb25zID0gYV9vcHRpb25zOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJ0ZXh0IjoKKyAgICAgICAgY2FzZSAicGFzc3dvcmQiOgorICAgICAgICAgIG91dHBhcmFtLmZfdmFsdWUgPSBub2RlLnZhbHVlOworICAgICAgICAgIG91dHBhcmFtLmZfc2l6ZSA9IG5vZGUuc2l6ZTsKKyAgICAgICAgICBvdXRwYXJhbS5mX21heExlbmd0aCA9IG5vZGUubWF4TGVuZ3RoOworICAgICAgICAgIG91dHBhcmFtLmZfcmVhZE9ubHkgPSBub2RlLmdldEF0dHJpYnV0ZSgicmVhZE9ubHkiKTsKKyAgICAgICAgICBvdXRwYXJhbS5mX2Rpc2FibGVkID0gbm9kZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIik7CisgICAgICAgICAgb3V0cGFyYW0uZl90YWJpbmRleCA9IG5vZGUuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpOworICAgICAgICAgIG91dHBhcmFtLmZfYWNjZXNza2V5ID0gbm9kZS5nZXRBdHRyaWJ1dGUoImFjY2Vzc2tleSIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJoaWRkZW4iOgorICAgICAgICAgIG91dHBhcmFtLmZfdmFsdWUgPSBub2RlLnZhbHVlOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJzdWJtaXQiOgorICAgICAgICBjYXNlICJyZXNldCI6CisgICAgICAgICAgb3V0cGFyYW0uZl92YWx1ZSA9IG5vZGUudmFsdWU7CisgICAgICAgICAgb3V0cGFyYW0uZl9kaXNhYmxlZCA9IG5vZGUuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpOworICAgICAgICAgIG91dHBhcmFtLmZfdGFiaW5kZXggPSBub2RlLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTsKKyAgICAgICAgICBvdXRwYXJhbS5mX2FjY2Vzc2tleSA9IG5vZGUuZ2V0QXR0cmlidXRlKCJhY2Nlc3NrZXkiKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiY2hlY2tib3giOgorICAgICAgICBjYXNlICJyYWRpbyI6CisgICAgICAgICAgb3V0cGFyYW0uZl92YWx1ZSA9IG5vZGUudmFsdWU7CisgICAgICAgICAgb3V0cGFyYW0uZl9jaGVja2VkID0gbm9kZS5jaGVja2VkOworICAgICAgICAgIG91dHBhcmFtLmZfZGlzYWJsZWQgPSBub2RlLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKTsKKyAgICAgICAgICBvdXRwYXJhbS5mX3RhYmluZGV4ID0gbm9kZS5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7CisgICAgICAgICAgb3V0cGFyYW0uZl9hY2Nlc3NrZXkgPSBub2RlLmdldEF0dHJpYnV0ZSgiYWNjZXNza2V5Iik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgImJ1dHRvbiI6CisgICAgICAgICAgb3V0cGFyYW0uZl92YWx1ZSA9IG5vZGUudmFsdWU7CisgICAgICAgICAgb3V0cGFyYW0uZl9vbmNsaWNrID0gbm9kZS5nZXRBdHRyaWJ1dGUoIm9uY2xpY2siKTsKKyAgICAgICAgICBvdXRwYXJhbS5mX2Rpc2FibGVkID0gbm9kZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIik7CisgICAgICAgICAgb3V0cGFyYW0uZl90YWJpbmRleCA9IG5vZGUuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpOworICAgICAgICAgIG91dHBhcmFtLmZfYWNjZXNza2V5ID0gbm9kZS5nZXRBdHRyaWJ1dGUoImFjY2Vzc2tleSIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJpbWFnZSI6CisgICAgICAgICAgb3V0cGFyYW0uZl92YWx1ZSA9IG5vZGUudmFsdWU7CisgICAgICAgICAgb3V0cGFyYW0uZl9zcmMgPSBub2RlLnNyYzsKKyAgICAgICAgICBvdXRwYXJhbS5mX2Rpc2FibGVkID0gbm9kZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIik7CisgICAgICAgICAgb3V0cGFyYW0uZl90YWJpbmRleCA9IG5vZGUuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpOworICAgICAgICAgIG91dHBhcmFtLmZfYWNjZXNza2V5ID0gbm9kZS5nZXRBdHRyaWJ1dGUoImFjY2Vzc2tleSIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJmaWxlIjoKKyAgICAgICAgICBvdXRwYXJhbS5mX2Rpc2FibGVkID0gbm9kZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIik7CisgICAgICAgICAgb3V0cGFyYW0uZl90YWJpbmRleCA9IG5vZGUuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpOworICAgICAgICAgIG91dHBhcmFtLmZfYWNjZXNza2V5ID0gbm9kZS5nZXRBdHRyaWJ1dGUoImFjY2Vzc2tleSIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJsYWJlbCI6CisgICAgICAgICAgb3V0cGFyYW0uZl90ZXh0ID0gbm9kZS5pbm5lckhUTUw7CisgICAgICAgICAgb3V0cGFyYW0uZl9mb3IgPSBub2RlLmdldEF0dHJpYnV0ZSgiZm9yIik7CisgICAgICAgICAgb3V0cGFyYW0uZl9hY2Nlc3NrZXkgPSBub2RlLmdldEF0dHJpYnV0ZSgiYWNjZXNza2V5Iik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgImZpZWxkc2V0IjoKKyAgICAgICAgICBpZihub2RlLmZpcnN0Q2hpbGQudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0ibGVnZW5kIikKKyAgICAgICAgICAgIG91dHBhcmFtLmZfdGV4dCA9IG5vZGUuZmlyc3RDaGlsZC5pbm5lckhUTUw7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0cGFyYW0uZl90ZXh0ID0gIiI7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIG91dHBhcmFtLmZfbmFtZSA9ICIiOworICAgICAgc3dpdGNoIChidXR0b25faWQpIHsKKyAgICAgICAgY2FzZSAidGV4dGFyZWEiOgorICAgICAgICBjYXNlICJzZWxlY3QiOgorICAgICAgICBjYXNlICJsYWJlbCI6CisgICAgICAgIGNhc2UgImZpZWxkc2V0IjoKKyAgICAgICAgICB0YWdOYW1lID0gYnV0dG9uX2lkOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHRhZ05hbWUgPSAiaW5wdXQiOworICAgICAgICAgIG91dHBhcmFtLmZfdHlwZSA9IGJ1dHRvbl9pZDsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIG91dHBhcmFtLmZfb3B0aW9ucyA9ICIiOworICAgICAgb3V0cGFyYW0uZl9jb2xzID0gIjIwIjsKKyAgICAgIG91dHBhcmFtLmZfcm93cyA9ICI0IjsKKyAgICAgIG91dHBhcmFtLmZfbXVsdGlwbGUgPSAiZmFsc2UiOworICAgICAgb3V0cGFyYW0uZl92YWx1ZSA9ICIiOworICAgICAgb3V0cGFyYW0uZl9zaXplID0gIiI7CisgICAgICBvdXRwYXJhbS5mX21heExlbmd0aCA9ICIiOworICAgICAgb3V0cGFyYW0uZl9jaGVja2VkID0gIiI7CisgICAgICBvdXRwYXJhbS5mX3NyYyA9ICIiOworICAgICAgb3V0cGFyYW0uZl9vbmNsaWNrID0gIiI7CisgICAgICBvdXRwYXJhbS5mX3dyYXAgPSAiIjsKKyAgICAgIG91dHBhcmFtLmZfcmVhZE9ubHkgPSAiZmFsc2UiOworICAgICAgb3V0cGFyYW0uZl9kaXNhYmxlZCA9ICJmYWxzZSI7CisgICAgICBvdXRwYXJhbS5mX3RhYmluZGV4ID0gIiI7CisgICAgICBvdXRwYXJhbS5mX2FjY2Vzc2tleSA9ICIiOworICAgICAgb3V0cGFyYW0uZl9mb3IgPSAiIjsKKyAgICAgIG91dHBhcmFtLmZfdGV4dCA9ICIiOworICAgICAgb3V0cGFyYW0uZl9sZWdlbmQgPSAiIjsKKyAgICB9CisgICAgZWRpdG9yLl9wb3B1cERpYWxvZygicGx1Z2luOi8vRm9ybXMvIiArIHRhZ05hbWUgKyAiLmh0bWwiLCBmdW5jdGlvbihwYXJhbSkgeworICAgICAgaWYgKHBhcmFtKSB7CisgICAgICAgIGlmKHBhcmFtWyJmX2NvbHMiXSkKKyAgICAgICAgICBpZiAoaXNOYU4ocGFyc2VJbnQocGFyYW1bImZfY29scyJdLDEwKSkgfHwgcGFyc2VJbnQocGFyYW1bImZfY29scyJdLDEwKSA8PSAwKQorICAgICAgICAgICAgcGFyYW1bImZfY29scyJdID0gIiI7CisgICAgICAgIGlmKHBhcmFtWyJmX3Jvd3MiXSkKKyAgICAgICAgICBpZihpc05hTihwYXJzZUludChwYXJhbVsiZl9yb3dzIl0sMTApKSB8fCBwYXJzZUludChwYXJhbVsiZl9yb3dzIl0sMTApIDw9IDApCisgICAgICAgICAgICBwYXJhbVsiZl9yb3dzIl0gPSAiIjsKKyAgICAgICAgaWYocGFyYW1bImZfc2l6ZSJdKQorICAgICAgICAgIGlmKGlzTmFOKHBhcnNlSW50KHBhcmFtWyJmX3NpemUiXSwxMCkpIHx8IHBhcnNlSW50KHBhcmFtWyJmX3NpemUiXSwxMCkgPD0gMCkKKyAgICAgICAgICAgIHBhcmFtWyJmX3NpemUiXSA9ICIiOworICAgICAgICBpZihwYXJhbVsiZl9tYXhsZW5ndGgiXSkKKyAgICAgICAgICBpZihpc05hTihwYXJzZUludChwYXJhbVsiZl9tYXhMZW5ndGgiXSwxMCkpIHx8IHBhcnNlSW50KHBhcmFtWyJmX21heExlbmd0aCJdLDEwKSA8PSAwKQorICAgICAgICAgICAgcGFyYW1bImZfbWF4TGVuZ3RoIl0gPSAiIjsKKyAgICAgICAgaWYobm9kZSkgeworICAgICAgICAgIC8vcHJlcGFyZSBleGlzdGluZyBFbGVtZW50CisgICAgICAgICAgZm9yIChmaWVsZCBpbiBwYXJhbSkgeworICAgICAgICAgICAgLy9hbGVydChmaWVsZC5zdWJzdHJpbmcoMiwyMCkgKyAnPScgKyBwYXJhbVtmaWVsZF0pOyAgLy90byBiZSBzaWxlbnQhIGJ5IGh0YW5ha2EKKyAgICAgICAgICAgIGlmICgoZmllbGQ9PSJmX3RleHQiKSB8fCAoZmllbGQ9PSJmX29wdGlvbnMiKSB8fCAoZmllbGQ9PSJmX29uY2xpY2siKSB8fCAoZmllbGQ9PSJmX2NoZWNrZWQiKSljb250aW51ZTsKKyAgICAgICAgICAgIGlmIChwYXJhbVtmaWVsZF0gIT0gIiIpCisgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGZpZWxkLnN1YnN0cmluZygyLDIwKSwgcGFyYW1bZmllbGRdKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoZmllbGQuc3Vic3RyaW5nKDIsMjApKTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHR5cGUgPT0gInRleHRhcmVhIikgeworICAgICAgICAgICAgbm9kZS5pbm5lckhUTUwgPSBwYXJhbVsiZl90ZXh0Il07CisgICAgICAgICAgfSBlbHNlIGlmKHR5cGUgPT0gInNlbGVjdCIpIHsKKyAgICAgICAgICAgIG5vZGUub3B0aW9ucy5sZW5ndGggPSAwOworICAgICAgICAgICAgdmFyIG9wdGlvbnNMaXN0ID0gIHBhcmFtWyJmX29wdGlvbnMiXTsKKyAgICAgICAgICAgIGZvciAoaT0wOyBpPD0gb3B0aW9uc0xpc3QubGVuZ3RoLTE7IGkrKykgeworICAgICAgICAgICAgICBub2RlLm9wdGlvbnNbaV0gPSBuZXcgT3B0aW9uKG9wdGlvbnNMaXN0W2ldLnRleHQsIG9wdGlvbnNMaXN0W2ldLnZhbHVlKQorICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSBpZih0eXBlID09ICJsYWJlbCIpIHsKKyAgICAgICAgICAgIG5vZGUuaW5uZXJIVE1MID0gcGFyYW1bImZfdGV4dCJdOworICAgICAgICAgIH0gZWxzZSBpZih0eXBlID09ICJmaWVsZHNldCIpIHsKKyAgICAgICAgICAgIGlmKG91dHBhcmFtLmZfdGV4dCAhPSAiIikgeworICAgICAgICAgICAgICBpZihub2RlLmZpcnN0Q2hpbGQudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0ibGVnZW5kIikKKyAgICAgICAgICAgICAgICBub2RlLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID0gcGFyYW1bImZfdGV4dCJdOworICAgICAgICAgICAgfSBlbHNlIHt9Ly8gbm90IGltcGxlbWVudGVkIGpldAorICAgICAgICAgIH0gZWxzZSBpZigodHlwZSA9PSAiY2hlY2tib3giKSB8fCAodHlwZSA9PSAicmFkaW8iKSkgeyAvL2lucHV0CisgICAgICAgICAgICAgIGlmKHBhcmFtWyJmX2NoZWNrZWQiXSE9IiIpCisgICAgICAgICAgICAgICAgbm9kZS5jaGVja2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5vZGUuY2hlY2tlZCA9IGZhbHNlOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZihwYXJhbVsiZl9vbmNsaWNrIl0peworICAgICAgICAgICAgICBub2RlLm9uY2xpY2sgPSAiIjsKKyAgICAgICAgICAgICAgaWYocGFyYW1bImZfb25jbGljayJdIT0iIikKKyAgICAgICAgICAgICAgICBub2RlLm9uY2xpY2sgPSBwYXJhbVsiZl9vbmNsaWNrIl07CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8vY3JlYXRlIEVsZW1lbnQKKyAgICAgICAgICB2YXIgdGV4dCA9ICIiOworICAgICAgICAgIGZvciAoZmllbGQgaW4gcGFyYW0pIHsKKyAgICAgICAgICAgIGlmICghcGFyYW1bZmllbGRdKSBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICgocGFyYW1bZmllbGRdPT0iIikgfHwgKGZpZWxkPT0iZl90ZXh0Iil8fCAoZmllbGQ9PSJmX29wdGlvbnMiKSljb250aW51ZTsKKyAgICAgICAgICAgIHRleHQgKz0gIiAiICsgZmllbGQuc3Vic3RyaW5nKDIsMjApICsgJz0iJyArIHBhcmFtW2ZpZWxkXSArICciJzsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZih0eXBlID09ICJ0ZXh0YXJlYSIpIHsKKyAgICAgICAgICAgIHRleHQgPSAnPHRleHRhcmVhJyArIHRleHQgKyAnPicgKyBwYXJhbVsiZl90ZXh0Il0gKyAnPC90ZXh0YXJlYT4nOworICAgICAgICAgIH0gZWxzZSBpZih0eXBlID09ICJzZWxlY3QiKSB7CisgICAgICAgICAgICB0ZXh0ID0gJzxzZWxlY3QnICsgdGV4dCArICc+JzsKKyAgICAgICAgICAgIHZhciBvcHRpb25zTGlzdCA9ICBwYXJhbVsiZl9vcHRpb25zIl07CisgICAgICAgICAgICBmb3IgKGk9MDsgaTw9IG9wdGlvbnNMaXN0Lmxlbmd0aC0xOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgIC8vICB2LS0gQXZvaWQgbGNfcGFyc2Vfc3RyaW5ncy5waHAKKyAgICAgICAgICAgICAgdGV4dCArPSAnPCcrJ29wdGlvbiB2YWx1ZT0iJytvcHRpb25zTGlzdFtpXS52YWx1ZSsnIj4nK29wdGlvbnNMaXN0W2ldLnRleHQrJzwvb3B0aW9uPic7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0ZXh0ICs9ICc8L3NlbGVjdD4nOworICAgICAgICAgIH0gZWxzZSBpZih0eXBlID09ICJsYWJlbCIpIHsKKyAgICAgICAgICAgIHRleHQgPSAnPGxhYmVsJyArIHRleHQgKyAnPicgKyBwYXJhbVsiZl90ZXh0Il0gKyAnPC9sYWJlbD4nOworICAgICAgICAgIH0gZWxzZSBpZih0eXBlID09ICJmaWVsZHNldCIpIHsKKyAgICAgICAgICAgIHRleHQgPSAnPGZpZWxkc2V0JyArIHRleHQgKyAnPic7CisgICAgICAgICAgICBpZiAocGFyYW1bImZfbGVnZW5kIl0gIT0gIiIpIHRleHQgKz0gJzxsZWdlbmQ+JyArIHBhcmFtWyJmX3RleHQiXSArICc8L2xlZ2VuZD4nOworICAgICAgICAgICAgdGV4dCArPSAnPC9maWVsZHNldD4nOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXh0ID0gJzxpbnB1dCB0eXBlPSInK3R5cGUrJyInICsgdGV4dCArICc+JzsKKyAgICAgICAgICB9CisgICAgICAgICAgZWRpdG9yLmluc2VydEhUTUwodGV4dCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LCBvdXRwYXJhbSk7CisgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9mb3Jtcy5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2Zvcm1zLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTBmY2E2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9mb3Jtcy5jc3MKQEAgLTAsMCArMSwzIEBACitmb3JtIHsNCisgIGJvcmRlcjogMXB4IGRvdHRlZCByZWQ7DQorfQ0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX2J1dHRvbi5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2ltZy9lZF9idXR0b24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYTRlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2ltZy9lZF9idXR0b24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX2NoZWNrYm94LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX2NoZWNrYm94LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTdhZmZhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9pbWcvZWRfY2hlY2tib3guZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX2ZpZWxkc2V0LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX2ZpZWxkc2V0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjM1OGU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9pbWcvZWRfZmllbGRzZXQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX2ZpbGUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9pbWcvZWRfZmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y2MWNlMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX2ZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX2Zvcm0uZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9pbWcvZWRfZm9ybS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJjMjkzZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX2Zvcm0uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX2hpZGRlbi5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2ltZy9lZF9oaWRkZW4uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YjMyNWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2ltZy9lZF9oaWRkZW4uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX2ltYWdlLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX2ltYWdlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzhjODhlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9pbWcvZWRfaW1hZ2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX2xhYmVsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX2xhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTNmY2U3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9pbWcvZWRfbGFiZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX3Bhc3N3b3JkLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX3Bhc3N3b3JkLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzk5MjE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9pbWcvZWRfcGFzc3dvcmQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX3JhZGlvLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX3JhZGlvLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjcyZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9pbWcvZWRfcmFkaW8uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX3Jlc2V0LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX3Jlc2V0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGZlZThlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9pbWcvZWRfcmVzZXQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX3NlbGVjdC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2ltZy9lZF9zZWxlY3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYTU5ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2ltZy9lZF9zZWxlY3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX3N1Ym1pdC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2ltZy9lZF9zdWJtaXQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMTJhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2ltZy9lZF9zdWJtaXQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX3RleHQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9pbWcvZWRfdGV4dC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI4MTU5YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX3RleHQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX3RleHRhcmVhLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvaW1nL2VkX3RleHRhcmVhLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmM4NzRhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9pbWcvZWRfdGV4dGFyZWEuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9jaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9jaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDc4ZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL2NoLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgIk9LIjogIuWlvSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL2N6LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL2N6LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNGJiNGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvY3ouanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjeiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgIkltYWdlIFVSTDoiOiAiQWRyZXNhIG9icsOhemt1IiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9kYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9kYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTNlOTQyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL2RhLmpzCkBAIC0wLDAgKzEsMTggQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGVyIiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJCaWxsZWRlIFVSTDoiLAorICAgICJOYW1lIjogIk5hdm4iLAorICAgICJPSyI6ICJPSyIsCisgICAgIlJvd3M6IjogIlLDpmtrZXI6IiwKKyAgICAiU2l6ZToiOiAiU3TDuHJyZWxzZSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL2RlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzY2FjMGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvZGUuanMKQEAgLTAsMCArMSwyMCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJCaWxkIFVSTDoiLAorICAgICJOYW1lIjogIk5hbWUiLAorICAgICJPSyI6ICJPSyIsCisgICAgIk9wdGlvbnMiOiAiT3B0aW9uZW4iLAorICAgICJSb3dzOiI6ICJaZWlsZW46IiwKKyAgICAiU2l6ZToiOiAiR3LDtsOfZToiLAorICAgICJUZXh0OiI6ICJUZXh0OiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL2VlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL2VlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOTE2ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvZWUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTG9vYnUiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL2VsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL2VsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNDRjNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvZWwuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciLAorICAgICJJbWFnZSBVUkw6IjogIlVSTCDOtc65zrrPjM69zrHPgiIsCisgICAgIk9LIjogIs6Vzr3PhM6szr7Otc65IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiMmNiMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9lcy5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVzIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCisgICAgIkltYWdlIFVSTDoiOiAiSW1hZ2VuIFVSTDoiLAorICAgICJPSyI6ICJBY2VwdGFyIiwKKyAgICAiUm93czoiOiAiRmlsYXM6IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvZXUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvZXUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNiNGFmZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9ldS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImV1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJVdHppIiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJJcnVkaWFyZW4gVVJMLWE6IiwKKyAgICAiT0siOiAiQWRvcyIsCisgICAgIlJvd3M6IjogIkxlcnJvYWs6IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvZmEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvZmEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU0NzAyYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9mYS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiLAorICAgICJJbWFnZSBVUkw6IjogIlVSTCDYqti12YjbjNixIiwKKyAgICAiT0siOiAi2KjZhNmHIiwKKyAgICAiUm93czoiOiAi2LHYr9uM2YEg2YfYpyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL2ZpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL2ZpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjY2ExZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvZmkuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUGVydXV0YSIsCisgICAgIkltYWdlIFVSTDoiOiAiS3V2YW4gb3NvaXRlIiwKKyAgICAiT0siOiAiSHl2w6Rrc3kiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9mci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9mci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGRlMDM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsMjEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsZXIiLAorICAgICJJbWFnZSBVUkw6IjogIlVSTCIsCisgICAgIk5hbWUiOiAiTm9tIiwKKyAgICAiTmFtZS9JRDoiOiAiTm9tL0lEIiwKKyAgICAiT0siOiAiT0siLAorICAgICJPcHRpb25zIjogIk9wdGlvbnMiLAorICAgICJSb3dzOiI6ICJMaWduZXMiLAorICAgICJTaXplOiI6ICJUYWlsbGUiLAorICAgICJUZXh0OiI6ICJUZXh0ZSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL2hlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNDI1YWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvaGUuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJoZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgIkltYWdlIFVSTDoiOiAiVVJMINeU16rXnteV16DXlCIsCisgICAgIk9LIjogIteQ15nXqdeV16giCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9odS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9odS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzg1MjhkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL2h1LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaHUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIk3DqWdzZW0iLAorICAgICJPSyI6ICJSZW5kYmVuIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvaXQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvaXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlMTkxMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9pdC5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIml0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iLAorICAgICJJbWFnZSBVUkw6IjogIlVSTCBkZWxsJ0ltbWFnaW5lIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9qYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9qYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2VhNzJiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL2phLmpzCkBAIC0wLDAgKzEsOTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiamEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiJ29uQ2xpY2snPSI6ICInb25DbGljayc9IiwKKyAgICAiQWNjZXNzIEtleToiOiAi44Ki44Kv44K744K544Kt44O8OiIsCisgICAgIkFjdGlvbiBVUkw6IjogIuOCouOCr+OCt+ODp+ODs1VSTDoiLAorICAgICJCdXR0b24gU2NyaXB0IjogIuODnOOCv+ODs+OCueOCr+ODquODl+ODiCIsCisgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICJDaGVja2VkIjogIuODgeOCp+ODg+OCr+a4iOOBvyIsCisgICAgIkNvbHVtbnM6IjogIuWIl+aVsDoiLAorICAgICJEZWZhdWx0IHRleHQgKG9wdGlvbmFsKSI6ICLjg4bjgq3jgrnjg4jliJ3mnJ/lgKQo44Kq44OX44K344On44OzKSIsCisgICAgIkRpbWVuc2lvbnMiOiAi5aSn44GN44GVIiwKKyAgICAiRGlzYWJsZWQiOiAi54Sh5Yq5IiwKKyAgICAiRW5jb2Rpbmc6IjogIuOCqOODs+OCs+ODvOODiToiLAorICAgICJGb3IgQ29udHJvbDoiOiAi5Yi25b6h5a++6LGhOiIsCisgICAgIkZvcm0iOiAi44OV44Kp44O844OgIiwKKyAgICAiRm9ybSBFbGVtZW50OiBGSUVMRFNFVCI6ICLjg5Xjgqnjg7zjg6DopoHntKA6IEZJRUxEU0VUIiwKKyAgICAiRm9ybSBFbGVtZW50OiBJTlBVVCI6ICLjg5Xjgqnjg7zjg6DopoHntKA6IElOUFVUIiwKKyAgICAiRm9ybSBFbGVtZW50OiBMQUJFTCI6ICLjg5Xjgqnjg7zjg6DopoHntKA6IExBQkVMIiwKKyAgICAiRm9ybSBFbGVtZW50OiBTRUxFQ1QiOiAi44OV44Kp44O844Og6KaB57SgOiBTRUxFQ1QiLAorICAgICJGb3JtIEVsZW1lbnQ6IFRFWFRBUkVBIjogIuODleOCqeODvOODoOimgee0oDogVEVYVEFSRUEiLAorICAgICJGb3JtIE5hbWU6IjogIuODleOCqeODvOODoOWQjToiLAorICAgICJGb3JtIGhhbmRsZXIgc2NyaXB0IjogIuODleOCqeODvOODoOWHpueQhuOCueOCr+ODquODl+ODiCIsCisgICAgIkdldCI6ICJHRVQiLAorICAgICJIVE1MLUZvcm0gdG8gQ0dJIChkZWZhdWx0KSI6ICJIVE1M44OV44Kp44O844Og44GL44KJQ0dJ44G4KOODh+ODleOCqeODq+ODiCkiLAorICAgICJIYXJkIjogIuODj+ODvOODiSIsCisgICAgIkhlaWdodCBpbiBudW1iZXIgb2Ygcm93cyI6ICLooYzmlbDjgavjgojjgovpq5jjgZUiLAorICAgICJJbWFnZSBVUkw6IjogIueUu+WDj1VSTDoiLAorICAgICJJbWFnZSBzb3VyY2UiOiAi55S75YOP44K944O844K5IiwKKyAgICAiSW5pdGlhbCBUZXh0OiI6ICLliJ3mnJ/jg4bjgq3jgrnjg4g6IiwKKyAgICAiSmF2YXNjcmlwdCBmb3IgYnV0dG9uIGNsaWNrIjogIuODnOOCv+ODs+OCr+ODquODg+OCr+aZguOBrkphdmFTY3JpdHAiLAorICAgICJMYWJlbDoiOiAi44Op44OZ44OrOiIsCisgICAgIkxlZ2VuZDoiOiAi44Kw44Or44O844OX5ZCNOiIsCisgICAgIk1heCBsZW5ndGg6IjogIuacgOWkp+mVtzoiLAorICAgICJNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjY2VwdGVkIjogIuWFpeWKm+WPr+iDveOBquacgOWkp+aWh+Wtl+aVsCIsCisgICAgIk1ldGhvZDoiOiAi44Oh44K944OD44OJOiIsCisgICAgIk5hbWUiOiAi5ZCN5YmNIiwKKyAgICAiTmFtZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICLjg5Xjgqnjg7zjg6DlhaXlipvjga7lkI3liY0iLAorICAgICJOYW1lL0lEOiI6ICLlkI3liY0vSUQ6IiwKKyAgICAiT0siOiAiT0siLAorICAgICJPZmYiOiAi44Kq44OVIiwKKyAgICAiT3B0aW9ucyI6ICLpgbjmip7ogqIiLAorICAgICJQaHlzaWNhbCI6ICLniannkIbnmoQiLAorICAgICJQbGVhc2UgZW50ZXIgYSBMYWJlbCI6ICLjg6njg5njg6vjgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYQiLAorICAgICJQb3N0IjogIlBPU1QiLAorICAgICJSZWFkIE9ubHkiOiAi6Kqt44G/5Y+W44KK5bCC55SoIiwKKyAgICAiUm93czoiOiAi6KGM5pWwOiIsCisgICAgIlNpemUgb2YgdGV4dCBib3ggaW4gY2hhcmFjdGVycyI6ICLmloflrZfmlbDjgavjgojjgovjg4bjgq3jgrnjg4jjg5zjg4Pjgq/jgrnjga7lpKfjgY3jgZUiLAorICAgICJTaXplOiI6ICLjgrXjgqTjgro6IiwKKyAgICAiU29mdCI6ICLjgr3jg5Xjg4giLAorICAgICJUYWIgSW5kZXg6IjogIuOCv+ODlumghuW6jzoiLAorICAgICJUYXJnZXQgRnJhbWU6IjogIuOCv+ODvOOCsuODg+ODiDoiLAorICAgICJUZXh0OiI6ICLjg4bjgq3jgrnjg4g6IiwKKyAgICAiVVJMIG9mIGltYWdlIjogIueUu+WDj+OBrlVSTCIsCisgICAgIlZhbHVlIG9mIHRoZSBmb3JtIGlucHV0IjogIuODleOCqeODvOODoOWFpeWKm+OBruWApCIsCisgICAgIlZhbHVlOiI6ICLlgKQ6IiwKKyAgICAiVmlydHVhbCI6ICLku67mg7MiLAorICAgICJXaWR0aCBpbiBudW1iZXIgb2YgY2hhcmFjdGVycyI6ICLmloflrZfmlbDjgavjgojjgovluYUiLAorICAgICJXcmFwIE1vZGU6IjogIuaKmOOCiui/lOOBlzoiLAorICAgICJZb3UgbXVzdCBlbnRlciBhIE5hbWUiOiAi5ZCN5YmN44GM5b+F6KaB44Gn44GZIiwKKyAgICAibXVsdGlwYXJ0IEZvcm0gRGF0YSAoRmlsZS1VcGxvYWQpIjogIuODnuODq+ODgeODkeODvOODiCjjg5XjgqHjgqTjg6vjgqLjg4Pjg5fjg63jg7zjg4nnlKgpIiwKKyAgICAibmFtZSBvZiB0aGUgdGV4dGFyZWEiOiAi44OG44Kt44K544OI44Ko44Oq44Ki44Gu5ZCN5YmNIiwKKyAgICAibm9ybWFsIjogIuaomea6liIsCisgICAgIm5vd3JhcCI6ICLmipjjgorov5TjgZfjgarjgZciLAorICAgICJwcmUiOiAi44OV44Kp44O844Oe44OD44OI5riI44G/IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQWRkIjogIui/veWKoCIsCisgICAgICAgICJCdXR0b24iOiAi44Oc44K/44OzIiwKKyAgICAgICAgIkNoZWNrYm94IjogIuODgeOCp+ODg+OCr+ODnOODg+OCr+OCuSIsCisgICAgICAgICJEZWxldGUiOiAi5YmK6ZmkIiwKKyAgICAgICAgIkZpZWxkIFNldCI6ICLjg5XjgqPjg7zjg6vjg4njgrvjg4Pjg4giLAorICAgICAgICAiRmlsZSBGaWVsZCI6ICLjg5XjgqHjgqTjg6vjg5XjgqPjg7zjg6vjg4kiLAorICAgICAgICAiSGlkZGVuIEZpZWxkIjogIumdnuihqOekuuODleOCo+ODvOODq+ODiSIsCisgICAgICAgICJJbWFnZSBCdXR0b24iOiAi55S75YOP44Oc44K/44OzIiwKKyAgICAgICAgIkxhYmVsIjogIuODqeODmeODqyIsCisgICAgICAgICJMYWJsZToiOiAi44Op44OZ44OrOiIsCisgICAgICAgICJNb3ZlIERvd24iOiAi5LiL44G4IiwKKyAgICAgICAgIk1vdmUgVXAiOiAi5LiK44G4IiwKKyAgICAgICAgIk11bHRpcGxlIFNlbGVjdCI6ICLopIfmlbDpgbjmip4iLAorICAgICAgICAiUGFzc3dvcmQgRmllbGQiOiAi44OR44K544Ov44O844OJ44OV44Kj44O844Or44OJIiwKKyAgICAgICAgIlJhZGlvIEJ1dHRvbiI6ICLjg6njgrjjgqrjg5zjgr/jg7MiLAorICAgICAgICAiUmVzZXQgQnV0dG9uIjogIuODquOCu+ODg+ODiOODnOOCv+ODsyIsCisgICAgICAgICJTZWxlY3Rpb24gRmllbGQiOiAi6YG45oqe6IKi44OV44Kj44O844Or44OJIiwKKyAgICAgICAgIlN1Ym1pdCBCdXR0b24iOiAi6YCB5L+h44Oc44K/44OzIiwKKyAgICAgICAgIlRleHQgRmllbGQiOiAi44OG44Kt44K544OI44OV44Kj44O844Or44OJIiwKKyAgICAgICAgIlRleHRhcmVhIjogIuODhuOCreOCueODiOOCqOODquOCoiIsCisgICAgICAgICJZb3UgbXVzdCBlbnRlciB0aGUgZm9ybSBuYW1lIjogIuODleOCqeODvOODoOWQjeOBjOW/heimgeOBp+OBmSIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkMzhiYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9sY19iYXNlLmpzCkBAIC0wLDAgKzEsOTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLworLy8gTEFORzogImVuIiwgRU5DT0RJTkc6IFVURi04CisvLyBBdXRob3I6IFRyYW5zbGF0b3ItTmFtZSwgPGVtYWlsQGV4YW1wbGUuY29tPgorLy8KKy8vIExhc3QgcmV2aXNpb246IDIwMTgtMDQtMTIKKy8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KKy8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyAoUGxlYXNlLCByZW1vdmUgaW5mb3JtYXRpb24gYmVsb3cpCisvLyBGT1IgVFJBTlNMQVRPUlM6CisvLworLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCisvLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCisvLworLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7CisvLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50CisvLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCisKK3sKKyAgICAiJ29uQ2xpY2snPSI6ICIiLAorICAgICJBY2Nlc3MgS2V5OiI6ICIiLAorICAgICJBY3Rpb24gVVJMOiI6ICIiLAorICAgICJCdXR0b24gU2NyaXB0IjogIiIsCisgICAgIkNhbmNlbCI6ICIiLAorICAgICJDaGVja2VkIjogIiIsCisgICAgIkNvbHVtbnM6IjogIiIsCisgICAgIkRlZmF1bHQgdGV4dCAob3B0aW9uYWwpIjogIiIsCisgICAgIkRpbWVuc2lvbnMiOiAiIiwKKyAgICAiRGlzYWJsZWQiOiAiIiwKKyAgICAiRW5jb2Rpbmc6IjogIiIsCisgICAgIkZvciBDb250cm9sOiI6ICIiLAorICAgICJGb3JtIjogIiIsCisgICAgIkZvcm0gRWxlbWVudDogRklFTERTRVQiOiAiIiwKKyAgICAiRm9ybSBFbGVtZW50OiBJTlBVVCI6ICIiLAorICAgICJGb3JtIEVsZW1lbnQ6IExBQkVMIjogIiIsCisgICAgIkZvcm0gRWxlbWVudDogU0VMRUNUIjogIiIsCisgICAgIkZvcm0gRWxlbWVudDogVEVYVEFSRUEiOiAiIiwKKyAgICAiRm9ybSBOYW1lOiI6ICIiLAorICAgICJGb3JtIGhhbmRsZXIgc2NyaXB0IjogIiIsCisgICAgIkdldCI6ICIiLAorICAgICJIVE1MLUZvcm0gdG8gQ0dJIChkZWZhdWx0KSI6ICIiLAorICAgICJIYXJkIjogIiIsCisgICAgIkhlaWdodCBpbiBudW1iZXIgb2Ygcm93cyI6ICIiLAorICAgICJJbWFnZSBVUkw6IjogIiIsCisgICAgIkltYWdlIHNvdXJjZSI6ICIiLAorICAgICJJbml0aWFsIFRleHQ6IjogIiIsCisgICAgIkluc2VydC9FZGl0IEZvcm0iOiAiIiwKKyAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IEZJRUxEU0VUIjogIiIsCisgICAgIkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBJTlBVVCI6ICIiLAorICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgTEFCRUwiOiAiIiwKKyAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFNFTEVDVCI6ICIiLAorICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgVEVYVEFSRUEiOiAiIiwKKyAgICAiSmF2YXNjcmlwdCBmb3IgYnV0dG9uIGNsaWNrIjogIiIsCisgICAgIkxhYmVsOiI6ICIiLAorICAgICJMZWdlbmQ6IjogIiIsCisgICAgIk1heCBsZW5ndGg6IjogIiIsCisgICAgIk1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWNjZXB0ZWQiOiAiIiwKKyAgICAiTWV0aG9kOiI6ICIiLAorICAgICJOYW1lIjogIiIsCisgICAgIk5hbWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiIiwKKyAgICAiTmFtZSBvZiB0aGUgZm9ybSBzZWxlY3QiOiAiIiwKKyAgICAiTmFtZS9JRDoiOiAiIiwKKyAgICAiT0siOiAiIiwKKyAgICAiT2ZmIjogIiIsCisgICAgIk9wdGlvbnMiOiAiIiwKKyAgICAiUGh5c2ljYWwiOiAiIiwKKyAgICAiUGxlYXNlIGVudGVyIGEgTGFiZWwiOiAiIiwKKyAgICAiUG9zdCI6ICIiLAorICAgICJSZWFkIE9ubHkiOiAiIiwKKyAgICAiUm93czoiOiAiIiwKKyAgICAiU2l6ZSBvZiB0ZXh0IGJveCBpbiBjaGFyYWN0ZXJzIjogIiIsCisgICAgIlNpemU6IjogIiIsCisgICAgIlNvZnQiOiAiIiwKKyAgICAiVGFiIEluZGV4OiI6ICIiLAorICAgICJUYXJnZXQgRnJhbWU6IjogIiIsCisgICAgIlRleHQ6IjogIiIsCisgICAgIlVSTCBvZiBpbWFnZSI6ICIiLAorICAgICJWYWx1ZSBvZiB0aGUgZm9ybSBpbnB1dCI6ICIiLAorICAgICJWYWx1ZToiOiAiIiwKKyAgICAiVmlydHVhbCI6ICIiLAorICAgICJXaWR0aCBpbiBudW1iZXIgb2YgY2hhcmFjdGVycyI6ICIiLAorICAgICJXcmFwIE1vZGU6IjogIiIsCisgICAgIllvdSBtdXN0IGVudGVyIGEgTmFtZSI6ICIiLAorICAgICJtdWx0aXBhcnQgRm9ybSBEYXRhIChGaWxlLVVwbG9hZCkiOiAiIiwKKyAgICAibmFtZSBvZiB0aGUgdGV4dGFyZWEiOiAiIiwKKyAgICAibm9ybWFsIjogIiIsCisgICAgIm5vd3JhcCI6ICIiLAorICAgICJwcmUiOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9sdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9sdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTE4OTA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL2x0LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvbHYuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvbHYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzZDVkMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9sdi5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdGNlbHQiLAorICAgICJPSyI6ICJMYWJpIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvbmIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU3NzkyZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDIwIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICJJbWFnZSBVUkw6IjogIkJpbGRldHMgVVJMOiIsCisgICAgIk5hbWUiOiAiTmF2biIsCisgICAgIk5hbWUvSUQ6IjogIk5hdm4vSUQ6IiwKKyAgICAiT0siOiAiT0siLAorICAgICJPcHRpb25zIjogIlZhbGciLAorICAgICJTaXplOiI6ICJTdMO4cnJlbHNlIiwKKyAgICAiVGV4dDoiOiAiVGVrc3Q6IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvbmwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRiZTdiZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9ubC5qcwpAQCAtMCwwICsxLDk4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIidvbkNsaWNrJz0iOiAiJ29uQ2xpY2snPSIsCisgICAgIkFjY2VzcyBLZXk6IjogIlRvZWdhbmdzIHRvZXRzOiIsCisgICAgIkFjdGlvbiBVUkw6IjogIkFjdGllIFVSTDoiLAorICAgICJCdXR0b24gU2NyaXB0IjogIktub3Agc2NyaXB0IiwKKyAgICAiQ2FuY2VsIjogIkFubnVsZXJlbiIsCisgICAgIkNoZWNrZWQiOiAiQ2hlY2tlZCIsCisgICAgIkNvbHVtbnM6IjogIktvbG9tbWVuOiIsCisgICAgIkRlZmF1bHQgdGV4dCAob3B0aW9uYWwpIjogIlN0YW5kYWFyZCB0ZWtzdCAob3B0aW9uZWVsKSIsCisgICAgIkRpbWVuc2lvbnMiOiAiRGltZW50aWVzIiwKKyAgICAiRGlzYWJsZWQiOiAiVWl0Z2VzY2hha2VsZCIsCisgICAgIkVuY29kaW5nOiI6ICJFbmNvZGVyaW5nOiIsCisgICAgIkZvciBDb250cm9sOiI6ICJWb29yIGNvbnRyb2xlOiIsCisgICAgIkZvcm0iOiAiRm9ybXVsaWVyIiwKKyAgICAiRm9ybSBFbGVtZW50OiBGSUVMRFNFVCI6ICJGb3JtdWxpZXIgZWxlbWVudDogRklFTERTRVQiLAorICAgICJGb3JtIEVsZW1lbnQ6IElOUFVUIjogIkZvcm11bGllciBlbGVtZW50OiBJTlBVVCIsCisgICAgIkZvcm0gRWxlbWVudDogTEFCRUwiOiAiRm9ybXVsaWVyIGVsZW1lbnQ6IExBQkVMIiwKKyAgICAiRm9ybSBFbGVtZW50OiBTRUxFQ1QiOiAiRm9ybXVsaWVyIGVsZW1lbnQ6IFNFTEVDVCIsCisgICAgIkZvcm0gRWxlbWVudDogVEVYVEFSRUEiOiAiRm9ybXVsaWVyIGVsZW1lbnQ6IFRFWFRBUkVBIiwKKyAgICAiRm9ybSBOYW1lOiI6ICJGb3JtdWxpZXIgbmFhbWU6IiwKKyAgICAiRm9ybSBoYW5kbGVyIHNjcmlwdCI6ICJGb3JtdWxpZXIgc2NyaXB0IiwKKyAgICAiR2V0IjogIkdFVCIsCisgICAgIkhUTUwtRm9ybSB0byBDR0kgKGRlZmF1bHQpIjogIkhUTUwgZm9ybXVsaWVyIG5hYXIgQ0dJIChzdGFuZGFhcmQpIiwKKyAgICAiSGFyZCI6ICJIYXJkIiwKKyAgICAiSGVpZ2h0IGluIG51bWJlciBvZiByb3dzIjogIkhvb2d0ZSBpbiBhYW50YWwgdGVrZW5zIiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJBZmJlZWxkaW5nIFVSTDoiLAorICAgICJJbWFnZSBzb3VyY2UiOiAiQWZiZWVsZGluZyBicm9uIiwKKyAgICAiSW5pdGlhbCBUZXh0OiI6ICJTdGFydCB0ZWtzdDoiLAorICAgICJKYXZhc2NyaXB0IGZvciBidXR0b24gY2xpY2siOiAiS25vcCBrbGlrIG1ldCBKYXZhU2NyaXB0IiwKKyAgICAiTGFiZWw6IjogIkxhYmVsIiwKKyAgICAiTGVnZW5kOiI6ICJMZWdlbmQ6IiwKKyAgICAiTWF4IGxlbmd0aDoiOiAiTWF4aW1hbGUgbGVuZ3RlOiIsCisgICAgIk1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWNjZXB0ZWQiOiAiTWF4aW1hYWwgYWFudGFsIHRla2VucyB0b2VnZXN0YWFuIiwKKyAgICAiTWV0aG9kOiI6ICJNZXRob2RlOiIsCisgICAgIk5hbWUiOiAiTmFhbWUiLAorICAgICJOYW1lIG9mIHRoZSBmb3JtIGlucHV0IjogIk5hYW0gdmFuIGZvcm11bGllciBpbnZvZXIiLAorICAgICJOYW1lIG9mIHRoZSBmb3JtIHNlbGVjdCI6ICJOYWFtIHZhbiBmb3JtdWxpZXIgc2VsZWN0IiwKKyAgICAiTmFtZS9JRDoiOiAiTmFhbS9JRDoiLAorICAgICJPSyI6ICJPSyIsCisgICAgIk9mZiI6ICJVaXQiLAorICAgICJPcHRpb25zIjogIk9wdGllcyIsCisgICAgIlBoeXNpY2FsIjogIkZ5c2llayIsCisgICAgIlBsZWFzZSBlbnRlciBhIExhYmVsIjogIlZvZXIgZWVuIExhYmVsIGluIiwKKyAgICAiUG9zdCI6ICJQT1NUIiwKKyAgICAiUmVhZCBPbmx5IjogIkFsbGVlbiBsZXplbiIsCisgICAgIlJvd3M6IjogIlJpamVuOiIsCisgICAgIlNpemUgb2YgdGV4dCBib3ggaW4gY2hhcmFjdGVycyI6ICJHcm9vdHRlIHZhbiB0ZWtzdHZlbGQgaW4gdGVrZW5zIiwKKyAgICAiU2l6ZToiOiAiR3Jvb3R0ZToiLAorICAgICJTb2Z0IjogIlphY2h0IiwKKyAgICAiVGFiIEluZGV4OiI6ICJUYWIgdm9sZ29yZGU6IiwKKyAgICAiVGFyZ2V0IEZyYW1lOiI6ICJEb2VsIHZlbnN0ZXI6IiwKKyAgICAiVGV4dDoiOiAiVGVrc3Q6IiwKKyAgICAiVVJMIG9mIGltYWdlIjogIkFmYmVlbGRpbmcgVVJMIiwKKyAgICAiVmFsdWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiV2FhcmRlIHZhbiBmb3JtdWxpZXIgaW52b2VyIiwKKyAgICAiVmFsdWU6IjogIldhYXJkZToiLAorICAgICJWaXJ0dWFsIjogIlZpcnR1ZWVsIiwKKyAgICAiV2lkdGggaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMiOiAiQnJlZWR0ZSBpbiBhYW50YWwgdGVrZW5zIiwKKyAgICAiV3JhcCBNb2RlOiI6ICJUZXJ1Z2xvb3A6IiwKKyAgICAiWW91IG11c3QgZW50ZXIgYSBOYW1lIjogIlZvZXIgZWVuIE5hYW0gaW4iLAorICAgICJtdWx0aXBhcnQgRm9ybSBEYXRhIChGaWxlLVVwbG9hZCkiOiAiTXVsdGlwYXJ0IGZvcm11bGllciBkYXRhKEJlc3RhbmRzIHVwbG9hZCkiLAorICAgICJuYW1lIG9mIHRoZSB0ZXh0YXJlYSI6ICJOYWFtIHZhbiB0ZWtzdCBnZWJpZWQiLAorICAgICJub3JtYWwiOiAibm9ybWFhbCIsCisgICAgIm5vd3JhcCI6ICJnZWVuIHRlcnVnbG9vcCIsCisgICAgInByZSI6ICJwcmUiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBZGQiOiAiVG9ldm9lZ2VuIiwKKyAgICAgICAgIkJ1dHRvbiI6ICJLbm9wIiwKKyAgICAgICAgIkNoZWNrYm94IjogIkNoZWNrYm94IiwKKyAgICAgICAgIkRlbGV0ZSI6ICJWZXJ3aWpkZXJlbiIsCisgICAgICAgICJGaWVsZCBTZXQiOiAiVmVsZHNldCIsCisgICAgICAgICJGaWxlIEZpZWxkIjogIkJlc3RhbmRzdmVsZCIsCisgICAgICAgICJIaWRkZW4gRmllbGQiOiAiVmVyYm9yZ2VuIHZlbGQiLAorICAgICAgICAiSW1hZ2UgQnV0dG9uIjogIkFmYmVlbGRpbmcga25vcCIsCisgICAgICAgICJMYWJlbCI6ICJMYWJlbCIsCisgICAgICAgICJMYWJsZToiOiAiTGFiZWw6IiwKKyAgICAgICAgIk1vdmUgRG93biI6ICJPbWxhYWciLAorICAgICAgICAiTW92ZSBVcCI6ICJPbWhvb2ciLAorICAgICAgICAiTXVsdGlwbGUgU2VsZWN0IjogIk1lZXJkZXJlIHNlbGVjdGllIG1vZ2VsaWpraGVkZW4iLAorICAgICAgICAiUGFzc3dvcmQgRmllbGQiOiAiV2FjaHR3b29yZHZlbGQiLAorICAgICAgICAiUmFkaW8gQnV0dG9uIjogIlJhZGlvIGtub3AiLAorICAgICAgICAiUmVzZXQgQnV0dG9uIjogIldpcyBrbm9wIiwKKyAgICAgICAgIlNlbGVjdGlvbiBGaWVsZCI6ICJTZWxlY3RpZWxpanN0IiwKKyAgICAgICAgIlN1Ym1pdCBCdXR0b24iOiAiVmVyemVuZCBrbm9wIiwKKyAgICAgICAgIlRleHQgRmllbGQiOiAiVGVrc3R2ZWxkIiwKKyAgICAgICAgIlRleHRhcmVhIjogIlRla3N0Z2ViaWVkIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBmb3JtIG5hbWUiOiAiVm9lciBlZW4gZm9ybXVsaWVyIE5hYW0gaW4iCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvcGwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvcGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE5M2Q4NQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9wbC5qcwpAQCAtMCwwICsxLDE5IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInBsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICJJbWFnZSBVUkw6IjogIlVSTCBvYnJhemthOiIsCisgICAgIk5hbWUiOiAiTmF6d2EiLAorICAgICJPSyI6ICJPSyIsCisgICAgIk9wdGlvbnMiOiAiT3BjamUiLAorICAgICJSb3dzOiI6ICJXaWVyc3p5OiIsCisgICAgIlNpemU6IjogIlJvem1pYXI6IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvcHRfYnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAyYWVhYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9wdF9ici5qcwpAQCAtMCwwICsxLDc4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFjY2VzcyBLZXk6IjogIlRlY2xhIGRlIEFjZXNzbzoiLAorICAgICJBY3Rpb24gVVJMOiI6ICJBw6fDo28gLSBVUkw6IiwKKyAgICAiQnV0dG9uIFNjcmlwdCI6ICJTY3JpcHQgZGUgQm90w6NvIiwKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiQ2hlY2tlZCI6ICJEZWZpbmlkbyIsCisgICAgIkNvbHVtbnM6IjogIkNvbHVuYXM6IiwKKyAgICAiRGVmYXVsdCB0ZXh0IChvcHRpb25hbCkiOiAiVGV4dG8gcGFkcsOjbyAob3BjaW9uYWwpIiwKKyAgICAiRGltZW5zaW9ucyI6ICJEaW1lbnPDtWVzIiwKKyAgICAiRGlzYWJsZWQiOiAiRGVzYXRpdmFkbyIsCisgICAgIkVuY29kaW5nOiI6ICJDb2RpZmljYcOnw6NvOiIsCisgICAgIkZvciBDb250cm9sOiI6ICJQYXJhIENvbnRyb2xlOiIsCisgICAgIkZvcm0iOiAiRm9ybXVsw6FyaW8iLAorICAgICJGb3JtIEVsZW1lbnQ6IEZJRUxEU0VUIjogIkVsZW1lbnRvIGRvIGZvcm11bMOhcmlvOiBGSUVMRFNFVCIsCisgICAgIkZvcm0gRWxlbWVudDogSU5QVVQiOiAiRWxlbWVudG8gZG8gZm9ybXVsw6FyaW86IElOUFVUIiwKKyAgICAiRm9ybSBFbGVtZW50OiBMQUJFTCI6ICJFbGVtZW50byBkbyBmb3JtdWzDoXJpbzogTEFCRUwiLAorICAgICJGb3JtIEVsZW1lbnQ6IFNFTEVDVCI6ICJFbGVtZW50byBkbyBmb3JtdWzDoXJpbzogU0VMRUNUIiwKKyAgICAiRm9ybSBFbGVtZW50OiBURVhUQVJFQSI6ICJFbGVtZW50byBkbyBmb3JtdWzDoXJpbzogVEVYVEFSRUEiLAorICAgICJGb3JtIE5hbWU6IjogIk5vbWUgZG8gRm9ybXVsw6FyaW86IiwKKyAgICAiRm9ybSBoYW5kbGVyIHNjcmlwdCI6ICJTY3JpcHQgZG8gRm9ybXVsw6FyaW8iLAorICAgICJIVE1MLUZvcm0gdG8gQ0dJIChkZWZhdWx0KSI6ICJGb3JtdWzDoXJpbyBwYXJhIENHSSAocGFkcsOjbykiLAorICAgICJIYXJkIjogIkRpZsOtY2lsIiwKKyAgICAiSGVpZ2h0IGluIG51bWJlciBvZiByb3dzIjogIkFsdHVyYSBlbSBuw7ptZXJvIGRlIGxpbmhhcyIsCisgICAgIkltYWdlIFVSTDoiOiAiVVJMIGRhIGltYWdlbToiLAorICAgICJJbWFnZSBzb3VyY2UiOiAiSW1hZ2VtIGRlIE9yaWdlbSIsCisgICAgIkluaXRpYWwgVGV4dDoiOiAiVGV4dG8gSW5pY2lhbDoiLAorICAgICJJbnNlcnQvRWRpdCBGb3JtIjogIkluc2VyaXIvRWRpdGFyIEZvcm11bMOhcmlvIiwKKyAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IEZJRUxEU0VUIjogIkluc2VyaXIvRWRpdGFyIEVsZW1lbnRvIEZJRUxEU0VUIiwKKyAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IElOUFVUIjogIkluc2VyaXIvRWRpdGFyIEVsZW1lbnRvIElOUFVUIiwKKyAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IExBQkVMIjogIkluc2VyaXIvRWRpdGFyIEVsZW1lbnRvIExBQkVMIiwKKyAgICAiSW5zZXJ0L0VkaXQgRm9ybSBFbGVtZW50IFNFTEVDVCI6ICJJbnNlcmlyL0VkaXRhciBFbGVtZW50byBTRUxFQ1QiLAorICAgICJJbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgVEVYVEFSRUEiOiAiSW5zZXJpci9FZGl0YXIgRWxlbWVudG8gVEVYVEFSRUEiLAorICAgICJKYXZhc2NyaXB0IGZvciBidXR0b24gY2xpY2siOiAiSmF2YXNjcmlwdCBwYXJhIGJvdMOjbyBkZSBjbGljYXIiLAorICAgICJMYWJlbDoiOiAiRXRpcXVldGE6IiwKKyAgICAiTGVnZW5kOiI6ICJMZWdlbmRhOiIsCisgICAgIk1heCBsZW5ndGg6IjogIkNvbXByaW1lbnRvIE3DoXguOiIsCisgICAgIk1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWNjZXB0ZWQiOiAiTcOheGltbyBuw7ptZXJvIGRlIGNhcmFjdGVyZXMgYWNlaXRvcyIsCisgICAgIk1ldGhvZDoiOiAiTcOpdG9kbzoiLAorICAgICJOYW1lIjogIk5vbWUiLAorICAgICJOYW1lIG9mIHRoZSBmb3JtIGlucHV0IjogIk5vbWUgZG8gZm9ybXVsw6FyaW8gZGUgZW50cmFkYSIsCisgICAgIk5hbWUgb2YgdGhlIGZvcm0gc2VsZWN0IjogIk5vbWUgZG8gZm9ybXVsw6FyaW8gZGUgc2VsZcOnw6NvIiwKKyAgICAiTmFtZS9JRDoiOiAiTm9tZS9JRDoiLAorICAgICJPSyI6ICJPSyIsCisgICAgIk9mZiI6ICJEZXNsaWdhZG8iLAorICAgICJPcHRpb25zIjogIk9ww6fDtWVzIiwKKyAgICAiUGh5c2ljYWwiOiAiRsOtc2ljbyIsCisgICAgIlBsZWFzZSBlbnRlciBhIExhYmVsIjogIlBvciBmYXZvciwgZW50cmUgdW1hIEV0aXF1ZXRhIiwKKyAgICAiUG9zdCI6ICJQb3N0IiwKKyAgICAiUmVhZCBPbmx5IjogIlNvbWVudGUgTGVpdHVyYSIsCisgICAgIlJvd3M6IjogIkxpbmhhczoiLAorICAgICJTaXplIG9mIHRleHQgYm94IGluIGNoYXJhY3RlcnMiOiAiVGFtYW5obyBkYSBjYWl4YSBkZSB0ZXh0byBlbSBjYXJhY3RlcmVzIiwKKyAgICAiU2l6ZToiOiAiVGFtYW5obzoiLAorICAgICJTb2Z0IjogIkbDoWNpbCIsCisgICAgIlRhYiBJbmRleDoiOiAiT3JkZW0gZGUgVGFidWxhw6fDo286IiwKKyAgICAiVGFyZ2V0IEZyYW1lOiI6ICJGcmFtZSBkZSBkZXN0aW5vOiIsCisgICAgIlRleHQ6IjogIlRleHRvOiIsCisgICAgIlVSTCBvZiBpbWFnZSI6ICJVUkwgZGEgaW1hZ2VtIiwKKyAgICAiVmFsdWUgb2YgdGhlIGZvcm0gaW5wdXQiOiAiVmFsb3IgZG8gZm9ybXVsw6FyaW8gZGUgZW50cmFkYSIsCisgICAgIlZhbHVlOiI6ICJWYWxvcjoiLAorICAgICJWaXJ0dWFsIjogIlZpcnR1YWwiLAorICAgICJXaWR0aCBpbiBudW1iZXIgb2YgY2hhcmFjdGVycyI6ICJMYXJndXJhIGVtIG7Dum1lcm8gZGUgY2FyYWN0ZXJlcyIsCisgICAgIldyYXAgTW9kZToiOiAiTW9kbyBkZSBxdWVicmFzOiIsCisgICAgIllvdSBtdXN0IGVudGVyIGEgTmFtZSI6ICJWb2PDqiBwcmVjaXNhIGVudHJhciBjb20gdW0gTm9tZSIsCisgICAgIm11bHRpcGFydCBGb3JtIERhdGEgKEZpbGUtVXBsb2FkKSI6ICJGb3JtdWzDoXJpbyBkZSBkYWRvcyBtdWx0aXBhcnQgKEVudmlhciBhcnF1aXZvKSIsCisgICAgIm5hbWUgb2YgdGhlIHRleHRhcmVhIjogIm5vbWUgZGEgw6FyZWEgZGUgdGV4dG8iLAorICAgICJub3JtYWwiOiAibm9ybWFsIiwKKyAgICAibm93cmFwIjogInNlbSBxdWVicmFzIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvcm8uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvcm8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAxM2RkYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9yby5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJvIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiLAorICAgICJJbWFnZSBVUkw6IjogIlVSTC11bCBpbWFnaW5paSIsCisgICAgIk9LIjogIkFjY2VwdMSDIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvcnUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdiZTNjMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9ydS5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJ1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLQntGC0LzQtdC90LAiLAorICAgICJJbWFnZSBVUkw6IjogIlVSTCDQuNC30L7QsdGA0LDQttC10L3QuNGPIiwKKyAgICAiT0siOiAiT0siLAorICAgICJPcHRpb25zIjogItCe0L/RhtC40LgiLAorICAgICJSb3dzOiI6ICLQodGC0YDQvtC60LgiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9zaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9zaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWVjZTk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL3NoLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJVUkwgc2xpa2UiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlJvd3M6IjogIlJlZG92aSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL3NpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL3NpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NzQ4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvc2kuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUHJla2xpxI1pIiwKKyAgICAiT0siOiAiViByZWR1IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvc3IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvc3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBjNTBiZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy9zci5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIsCisgICAgIkltYWdlIFVSTDoiOiAi0KPQoNCbINGB0LvQuNC60LUiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlJvd3M6IjogItCg0LXQtNC+0LLQuCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL3N2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL3N2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMjJiNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvc3YuanMKQEAgLTAsMCArMSwxOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJCaWxkZW5zIFVSTDoiLAorICAgICJPSyI6ICJPSyIsCisgICAgIk9wdGlvbnMiOiAiVsOkbGoiLAorICAgICJSb3dzOiI6ICJSYWRlcjoiLAorICAgICJTaXplOiI6ICJTdG9ybGVrIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvdGguanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvdGguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRhOWM4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy90aC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLguKLguIHguYDguKXguLTguIEiLAorICAgICJPSyI6ICLguJXguIHguKXguIciCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy90ci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvbGFuZy90ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWRkMTg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgIkltYWdlIFVSTDoiOiAiUmVzaW0gVVJMJ3NpOiIsCisgICAgIk9LIjogIlRhbWFtIiwKKyAgICAiUm93czoiOiAiU2F0xLFyOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL3ZuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9sYW5nL3ZuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODJlMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL2xhbmcvdm4uanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ2biIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiSOG7p3kiLAorICAgICJPSyI6ICLEkOG7k25nIMO9IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL3BvcHVwcy9maWVsZHNldC5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9wb3B1cHMvZmllbGRzZXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjM4ZDRkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9wb3B1cHMvZmllbGRzZXQuaHRtbApAQCAtMCwwICsxLDQ1IEBACis8aHRtbD4KKworPGhlYWQ+CisgIDx0aXRsZT5JbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgRklFTERTRVQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi8uLi8uLi9wb3B1cHMvcG9wdXAuY3NzIiAvPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi9wb3B1cHMvcG9wdXAuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBJbml0KCkgeworICBfX2RsZ190cmFuc2xhdGUoIkZvcm1zIik7CisgIF9fZGxnX2luaXQobnVsbCx7d2lkdGg6MjYwLCBoZWlnaHQ6MTUwfSk7CisgIHZhciBwYXJhbSA9IHdpbmRvdy5kaWFsb2dBcmd1bWVudHM7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3RleHQiKS52YWx1ZSA9IHBhcmFtWyJmX3RleHQiXTsKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfdGV4dCIpLmZvY3VzKCk7Cit9CisKK2Z1bmN0aW9uIG9uT0soKSB7CisgIC8vIHBhc3MgZGF0YSBiYWNrIHRvIHRoZSBjYWxsaW5nIHdpbmRvdworICB2YXIgcGFyYW0gPSBuZXcgT2JqZWN0KCk7CisgIHBhcmFtWyJmX3RleHQiXSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3RleHQiKS52YWx1ZTsKKyAgX19kbGdfY2xvc2UocGFyYW0pOworICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIG9uQ2FuY2VsKCkgeworICBfX2RsZ19jbG9zZShudWxsKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgY2xhc3M9ImRpYWxvZyIgb25sb2FkPSJJbml0KCkiPgorICA8ZGl2IGlkPSJmX3R5cGUiIGNsYXNzPSJ0aXRsZSI+Rm9ybSBFbGVtZW50OiBGSUVMRFNFVDwvZGl2PgorICA8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJnZXQiPgorICAgIDxkaXYgY2xhc3M9ImZyIj5MZWdlbmQ6PC9kaXY+CisgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InRleHQiIGlkPSJmX3RleHQiIC8+CisgICAgPHAgLz4KKyAgICA8ZGl2IGlkPSJidXR0b25zIj4KKyAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBuYW1lPSJvayIgb25jbGljaz0icmV0dXJuIG9uT0soKTsiPk9LPC9idXR0b24+CisgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbmFtZT0iY2FuY2VsIiBvbmNsaWNrPSJyZXR1cm4gb25DYW5jZWwoKTsiPkNhbmNlbDwvYnV0dG9uPgorICAgIDwvZGl2PgorICA8L2Zvcm0+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9wb3B1cHMvZm9ybS5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9wb3B1cHMvZm9ybS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZjM3N2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL3BvcHVwcy9mb3JtLmh0bWwKQEAgLTAsMCArMSw4OSBAQAorPGh0bWw+CisKKzxoZWFkPgorICA8dGl0bGU+SW5zZXJ0L0VkaXQgRm9ybTwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uLy4uLy4uL3BvcHVwcy9wb3B1cC5jc3MiIC8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uLy4uL3BvcHVwcy9wb3B1cC5qcyI+PC9zY3JpcHQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKwordmFyIGZpZWxkcyA9IFsiZl9uYW1lIiwgImZfYWN0aW9uIiwgImZfbWV0aG9kIiwgImZfZW5jdHlwZSIsICJmX3RhcmdldCJdOworCitmdW5jdGlvbiBJbml0KCkgeworICBfX2RsZ190cmFuc2xhdGUoIkZvcm1zIik7CisgIF9fZGxnX2luaXQobnVsbCx7d2lkdGg6MzYwLCBoZWlnaHQ6MjgwfSk7CisgIHZhciBwYXJhbSA9IHdpbmRvdy5kaWFsb2dBcmd1bWVudHM7CisgIGZvciAodmFyIGkgaW4gZmllbGRzKSB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmllbGRzW2ldKS52YWx1ZSA9IHBhcmFtW2ZpZWxkc1tpXV07CisgIH0KKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfbmFtZSIpLmZvY3VzKCk7Cit9CisKK2Z1bmN0aW9uIG9uT0soKSB7CisgIHZhciByZXF1aXJlZCA9IHsKKyAgICAiZl9uYW1lIjogIllvdSBtdXN0IGVudGVyIHRoZSBmb3JtIG5hbWUiCisgIH07CisgIGZvciAodmFyIGkgaW4gcmVxdWlyZWQpIHsKKyAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpKTsKKyAgICBpZiAoIWVsLnZhbHVlKSB7CisgICAgICBhbGVydChYaW5oYS5fbGMocmVxdWlyZWRbaV0sIkZvcm1zIikpOworICAgICAgZWwuZm9jdXMoKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKyAgLy8gcGFzcyBkYXRhIGJhY2sgdG8gdGhlIGNhbGxpbmcgd2luZG93CisgIHZhciBwYXJhbSA9IG5ldyBPYmplY3QoKTsKKyAgZm9yICh2YXIgaSBpbiBmaWVsZHMpIHsKKyAgICBwYXJhbVtmaWVsZHNbaV1dID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmllbGRzW2ldKS52YWx1ZTsKKyAgfQorICBfX2RsZ19jbG9zZShwYXJhbSk7CisgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gb25DYW5jZWwoKSB7CisgIF9fZGxnX2Nsb3NlKG51bGwpOworICByZXR1cm4gZmFsc2U7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgY2xhc3M9ImRpYWxvZyIgb25sb2FkPSJJbml0KCkiPgorPGRpdiBjbGFzcz0idGl0bGUiPkZvcm08L2Rpdj4KKzxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9ImdldCI+CisgIDxkaXYgY2xhc3M9ImZyIj5Gb3JtIE5hbWU6PC9kaXY+CisgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuYW1lIiBpZD0iZl9uYW1lIiBzaXplPSIyMCIgdGl0bGU9Ik5hbWUiIC8+CisgIDxwIC8+CisKKyAgPGZpZWxkc2V0PgorICA8bGVnZW5kPkZvcm0gaGFuZGxlciBzY3JpcHQ8L2xlZ2VuZD4KKyAgPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgorICA8ZGl2IGNsYXNzPSJmciI+QWN0aW9uIFVSTDo8L2Rpdj4KKyAgPGlucHV0IG5hbWU9ImFjdGlvbiIgaWQ9ImZfYWN0aW9uIiB0eXBlPSJ0ZXh0IiBzaXplPSIzMCI+CisgIDxwIC8+CisgIDxkaXYgY2xhc3M9ImZyIj5NZXRob2Q6PC9kaXY+CisgIDxzZWxlY3QgbmFtZT0iZl9tZXRob2QiIGlkPSJmX21ldGhvZCI+CisgICAgPG9wdGlvbiB2YWx1ZT0iIj48L29wdGlvbj4KKyAgICA8b3B0aW9uIHZhbHVlPSJwb3N0Ij5Qb3N0PC9vcHRpb24+CisgICAgPG9wdGlvbiB2YWx1ZT0iZ2V0Ij5HZXQ8L29wdGlvbj4KKyAgPC9zZWxlY3Q+CisgIDxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KKyAgPGRpdiBjbGFzcz0iZnIiPkVuY29kaW5nOjwvZGl2PgorICA8c2VsZWN0IG5hbWU9ImVuY3R5cGUiIGlkPSJmX2VuY3R5cGUiPgorICAgIDxvcHRpb24gdmFsdWU9IiI+PC9vcHRpb24+CisgICAgPG9wdGlvbiB2YWx1ZT0iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIj5IVE1MLUZvcm0gdG8gQ0dJIChkZWZhdWx0KTwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9Im11bHRpcGFydC9mb3JtLWRhdGEiPm11bHRpcGFydCBGb3JtIERhdGEgKEZpbGUtVXBsb2FkKTwvb3B0aW9uPgorICA8L3NlbGVjdD4KKyAgPHAgLz4KKyAgPGRpdiBjbGFzcz0iZnIiPlRhcmdldCBGcmFtZTo8L2Rpdj4KKyAgPGlucHV0IG5hbWU9InRhcmdldCIgaWQ9ImZfdGFyZ2V0IiB0eXBlPSJ0ZXh0IiBzaXplPSIzMCI+CisgIDxwIC8+CisgIDwvZmllbGRzZXQ+CisKKzxkaXYgaWQ9ImJ1dHRvbnMiPgorICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbmFtZT0ib2siIG9uY2xpY2s9InJldHVybiBvbk9LKCk7Ij5PSzwvYnV0dG9uPgorICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbmFtZT0iY2FuY2VsIiBvbmNsaWNrPSJyZXR1cm4gb25DYW5jZWwoKTsiPkNhbmNlbDwvYnV0dG9uPgorPC9kaXY+Cis8L2Zvcm0+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvcG9wdXBzL2lucHV0Lmh0bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL3BvcHVwcy9pbnB1dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYjQ1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL3BvcHVwcy9pbnB1dC5odG1sCkBAIC0wLDAgKzEsMTc5IEBACis8aHRtbD4KKworPGhlYWQ+CisgIDx0aXRsZT5JbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgSU5QVVQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi8uLi8uLi9wb3B1cHMvcG9wdXAuY3NzIiAvPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi9wb3B1cHMvcG9wdXAuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cit2YXIgZmllbGRzID0gbnVsbDsKK3ZhciB0eXBlOworZnVuY3Rpb24gSW5pdCgpIHsKKyAgX19kbGdfdHJhbnNsYXRlKCJGb3JtcyIpOworICBfX2RsZ19pbml0KCk7CisgIHZhciBwYXJhbSA9IHdpbmRvdy5kaWFsb2dBcmd1bWVudHM7CisgIHR5cGUgPSBwYXJhbS5mX3R5cGU7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3R5cGUiKS5pbm5lckhUTUwgPSBYaW5oYS5fbGMoJ0Zvcm0gRWxlbWVudDogSU5QVVQnLCAiRm9ybXMiKSArICcoJyArIHR5cGUgKyAnKSc7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0eHQiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hrIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ0biIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbWciKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlICJ0ZXh0IjoKKyAgICBjYXNlICJwYXNzd29yZCI6CisgICAgICBmaWVsZHMgPSBbImZfbmFtZSIsICJmX3ZhbHVlIiwgImZfcmVhZE9ubHkiLCAiZl9kaXNhYmxlZCIsICJmX3RhYmluZGV4IiwgImZfYWNjZXNza2V5IiwgImZfc2l6ZSIsICJmX21heExlbmd0aCJdOworICAgICAgaGVpZ2h0ID0gMzUwOworICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInR4dCIpLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICAgICAgYnJlYWs7CisgICAgY2FzZSAiY2hlY2tib3giOgorICAgIGNhc2UgInJhZGlvIjoKKyAgICAgIGZpZWxkcyA9IFsiZl9uYW1lIiwgImZfdmFsdWUiLCAiZl9jaGVja2VkIiwgImZfZGlzYWJsZWQiLCAiZl90YWJpbmRleCIsICJmX2FjY2Vzc2tleSJdOworICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoayIpLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICAgICAgaGVpZ2h0ID0gMjgwOworICAgICAgYnJlYWs7CisgICAgY2FzZSAiYnV0dG9uIjoKKyAgICAgIGZpZWxkcyA9IFsiZl9uYW1lIiwgImZfdmFsdWUiLCAiZl9kaXNhYmxlZCIsICJmX29uY2xpY2siLCAiZl90YWJpbmRleCIsICJmX2FjY2Vzc2tleSJdOworICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ0biIpLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICAgICAgaGVpZ2h0ID0gMzAwOworICAgICAgYnJlYWs7CisgICAgY2FzZSAiZmlsZSI6CisgICAgICBmaWVsZHMgPSBbImZfbmFtZSIsICJmX2Rpc2FibGVkIiwgImZfdGFiaW5kZXgiLCAiZl9hY2Nlc3NrZXkiXTsKKyAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3ZhbHVlIikuZGlzYWJsZWQgPSB0cnVlOworICAgICAgaGVpZ2h0ID0gMjgwOworICAgICAgYnJlYWs7CisgICAgY2FzZSAiaW1hZ2UiOgorICAgICAgZmllbGRzID0gWyJmX25hbWUiLCAiZl9kaXNhYmxlZCIsICJmX3RhYmluZGV4IiwgImZfYWNjZXNza2V5IiwgImZfc3JjIl07CisgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW1nIikuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl92YWx1ZSIpLmRpc2FibGVkID0gdHJ1ZTsKKyAgICAgIGhlaWdodCA9IDMwMDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgInJlc2V0IjoKKyAgICBjYXNlICJzdWJtaXQiOgorICAgICAgZmllbGRzID0gWyJmX25hbWUiLCAiZl92YWx1ZSIsICJmX2Rpc2FibGVkIiwgImZfdGFiaW5kZXgiLCAiZl9hY2Nlc3NrZXkiXTsKKyAgICAgIGhlaWdodCA9MjYwOworICAgICAgYnJlYWs7CisgICAgY2FzZSAiaGlkZGVuIjoKKyAgICAgIGZpZWxkcyA9IFsiZl9uYW1lIiwgImZfdmFsdWUiXTsKKyAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2Rpc2FibGVkIikuZGlzYWJsZWQgPSB0cnVlOworICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfdGFiaW5kZXgiKS5kaXNhYmxlZCA9IHRydWU7CisgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9hY2Nlc3NrZXkiKS5kaXNhYmxlZCA9IHRydWU7CisgICAgICBoZWlnaHQgPTI2MDsKKyAgICAgIGJyZWFrOworICB9CisgIGZvciAodmFyIGkgaW4gZmllbGRzKSB7CisgICAgc3dpdGNoIChmaWVsZHNbaV0pIHsKKyAgICBjYXNlICJmX3JlYWRPbmx5IjoKKyAgICBjYXNlICJmX2Rpc2FibGVkIjoKKyAgICBjYXNlICJmX2NoZWNrZWQiOgorICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmllbGRzW2ldKS5jaGVja2VkID0gKHBhcmFtW2ZpZWxkc1tpXV09PWZpZWxkc1tpXS5zdWJzdHJpbmcoMiwyMCkpIHx8IChwYXJhbVtmaWVsZHNbaV1dID09IHRydWUpOyBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmllbGRzW2ldKS52YWx1ZSA9IHBhcmFtW2ZpZWxkc1tpXV07IGJyZWFrOworICAgIH0KKyAgfQorICB3aW5kb3cucmVzaXplVG8oMzIwLGhlaWdodCk7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX25hbWUiKS5mb2N1cygpOworfQorCitmdW5jdGlvbiBvbk9LKCkgeworICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9uYW1lIik7CisgIGlmICghZWwudmFsdWUpIHsKKyAgICBhbGVydChYaW5oYS5fbGMoIllvdSBtdXN0IGVudGVyIGEgTmFtZSIsIkZvcm1zIikpOworICAgIGVsLmZvY3VzKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIC8vIHBhc3MgZGF0YSBiYWNrIHRvIHRoZSBjYWxsaW5nIHdpbmRvdworICB2YXIgcGFyYW0gPSBuZXcgT2JqZWN0KCk7CisgIGZvciAodmFyIGkgaW4gZmllbGRzKSB7CisgICAgc3dpdGNoIChmaWVsZHNbaV0pIHsKKyAgICBjYXNlICJmX3JlYWRPbmx5IjoKKyAgICBjYXNlICJmX2Rpc2FibGVkIjoKKyAgICBjYXNlICJmX2NoZWNrZWQiOgorICAgICAgaWYoWGluaGEuaXNfaWUpCisgICAgICAgIHBhcmFtW2ZpZWxkc1tpXV0gPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmllbGRzW2ldKS5jaGVja2VkKT90cnVlOiIiOworICAgICAgZWxzZQorICAgICAgICBwYXJhbVtmaWVsZHNbaV1dID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpZWxkc1tpXSkuY2hlY2tlZCk/ZmllbGRzW2ldLnN1YnN0cmluZygyLDIwKToiIjsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBwYXJhbVtmaWVsZHNbaV1dID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmllbGRzW2ldKS52YWx1ZTsgYnJlYWs7CisgICAgfQorICB9CisgIF9fZGxnX2Nsb3NlKHBhcmFtKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBvbkNhbmNlbCgpIHsKKyAgX19kbGdfY2xvc2UobnVsbCk7CisgIHJldHVybiBmYWxzZTsKK30KKzwvc2NyaXB0PgorCis8L2hlYWQ+CisKKzxib2R5IGNsYXNzPSJkaWFsb2ciIG9ubG9hZD0iSW5pdCgpIj4KKyAgPGRpdiBpZD0iZl90eXBlIiBjbGFzcz0idGl0bGUiPjwvZGl2PgorICA8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJnZXQiPgorICAgIDxkaXYgY2xhc3M9ImZyIj5OYW1lL0lEOjwvZGl2PgorICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuYW1lIiBpZD0iZl9uYW1lIiB0aXRsZT0iTmFtZSBvZiB0aGUgZm9ybSBpbnB1dCIgLz4KKyAgICA8cCAvPgorICAgIDxkaXYgY2xhc3M9ImZyIj5WYWx1ZTo8L2Rpdj4KKyAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idmFsdWUiIGlkPSJmX3ZhbHVlIiB0aXRsZT0iVmFsdWUgb2YgdGhlIGZvcm0gaW5wdXQiIC8+CisgICAgPHAgLz4KKyAgICA8ZGl2IGNsYXNzPSJmciI+RGlzYWJsZWQ8L2Rpdj4KKyAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImRpc2FibGVkIiBpZD0iZl9kaXNhYmxlZCIgdmFsdWU9ImRpc2FibGVkIiAvPgorICAgIDxwIC8+CisKKyAgPGRpdiBpZD0iY2hrIj4KKyAgICA8ZGl2IGNsYXNzPSJmciI+Q2hlY2tlZDwvZGl2PgorICAgICAgPGlucHV0IG5hbWU9ImNoZWNrZWQiIGlkPSJmX2NoZWNrZWQiIHR5cGU9ImNoZWNrYm94IiB2YWx1ZT0ib24iIC8+CisgICAgPHAgLz4KKyAgPC9kaXY+CisKKyAgICA8ZGl2IGNsYXNzPSJmciI+VGFiIEluZGV4OjwvZGl2PgorICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0YWJpbmRleCIgaWQ9ImZfdGFiaW5kZXgiIC8+CisgICAgPHAgLz4KKyAgICA8ZGl2IGNsYXNzPSJmciI+QWNjZXNzIEtleTo8L2Rpdj4KKyAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYWNjZXNza2V5IiBpZD0iZl9hY2Nlc3NrZXkiIC8+CisgICAgPHAgLz4KKworICA8ZGl2IGlkPSJ0eHQiPgorICAgIDxkaXYgY2xhc3M9ImZyIj5SZWFkIE9ubHk8L2Rpdj4KKyAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InJlYWRPbmx5IiBpZD0iZl9yZWFkT25seSIgdmFsdWU9InJlYWRPbmx5IiAvPgorICAgIDxwIC8+CisKKyAgICA8ZmllbGRzZXQ+CisgICAgPGxlZ2VuZD5EaW1lbnNpb25zPC9sZWdlbmQ+CisgICAgICA8ZGl2IGNsYXNzPSJzcGFjZSI+PC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJmciI+U2l6ZTo8L2Rpdj4KKyAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXplIiBpZD0iZl9zaXplIiBzaXplPSI1IiB0aXRsZT0iU2l6ZSBvZiB0ZXh0IGJveCBpbiBjaGFyYWN0ZXJzIiAvPgorICAgICAgPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0iZnIiPk1heCBsZW5ndGg6PC9kaXY+CisgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibWF4TGVuZ3RoIiBpZD0iZl9tYXhMZW5ndGgiIHNpemU9IjUiCXRpdGxlPSJNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjY2VwdGVkIiAvPgorICAgICAgPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgorICAgIDwvZmllbGRzZXQ+CisgIDwvZGl2PgorICA8ZGl2IGlkPSJidG4iPgorICAgIDxmaWVsZHNldD4KKyAgICA8bGVnZW5kPiBCdXR0b24gU2NyaXB0PC9sZWdlbmQ+CisgICAgICA8ZGl2IGNsYXNzPSJzcGFjZSI+PC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJmciI+J29uQ2xpY2snPTwvZGl2PgorICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im9uQ2xpY2siIGlkPSJmX29uY2xpY2siIHRpdGxlPSJKYXZhc2NyaXB0IGZvciBidXR0b24gY2xpY2siIC8+CisgICAgICA8ZGl2IGNsYXNzPSJzcGFjZSI+PC9kaXY+CisgICAgPC9maWVsZHNldD4KKyAgPC9kaXY+CisgIDxkaXYgaWQ9ImltZyI+CisgICAgPGZpZWxkc2V0PgorICAgIDxsZWdlbmQ+SW1hZ2Ugc291cmNlPC9sZWdlbmQ+CisgICAgICA8ZGl2IGNsYXNzPSJzcGFjZSI+PC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJmciI+SW1hZ2UgVVJMOjwvZGl2PgorICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNyYyIgaWQ9ImZfc3JjIiB0aXRsZT0iVVJMIG9mIGltYWdlIiAvPgorICAgICAgPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgorICAgIDwvZmllbGRzZXQ+CisgIDwvZGl2PgorICA8ZGl2IGlkPSJidXR0b25zIj4KKyAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbmFtZT0ib2siIG9uY2xpY2s9InJldHVybiBvbk9LKCk7Ij5PSzwvYnV0dG9uPgorICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBuYW1lPSJjYW5jZWwiIG9uY2xpY2s9InJldHVybiBvbkNhbmNlbCgpOyI+Q2FuY2VsPC9idXR0b24+CisgIDwvZGl2PgorPC9mb3JtPgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Zvcm1zL3BvcHVwcy9sYWJlbC5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9wb3B1cHMvbGFiZWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGExZThlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9wb3B1cHMvbGFiZWwuaHRtbApAQCAtMCwwICsxLDU4IEBACis8aHRtbD4KKworPGhlYWQ+CisgIDx0aXRsZT5JbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgTEFCRUw8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi8uLi8uLi9wb3B1cHMvcG9wdXAuY3NzIiAvPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi9wb3B1cHMvcG9wdXAuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cit2YXIgZmllbGRzID0gWyJmX3RleHQiLCJmX2ZvciIsImZfYWNjZXNza2V5Il07CisKK2Z1bmN0aW9uIEluaXQoKSB7CisgIF9fZGxnX3RyYW5zbGF0ZSgiRm9ybXMiKTsKKyAgX19kbGdfaW5pdChudWxsLHt3aWR0aDoyNjAsIGhlaWdodDoyMjB9KTsKKyAgdmFyIHBhcmFtID0gd2luZG93LmRpYWxvZ0FyZ3VtZW50czsKKyAgZm9yICh2YXIgaSBpbiBmaWVsZHMpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaWVsZHNbaV0pLnZhbHVlID0gcGFyYW1bZmllbGRzW2ldXTsKKyAgfQorICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl90ZXh0IikuZm9jdXMoKTsKK30KKworZnVuY3Rpb24gb25PSygpIHsKKyAgLy8gcGFzcyBkYXRhIGJhY2sgdG8gdGhlIGNhbGxpbmcgd2luZG93CisgICAgLy8gcGFzcyBkYXRhIGJhY2sgdG8gdGhlIGNhbGxpbmcgd2luZG93CisgIHZhciBwYXJhbSA9IG5ldyBPYmplY3QoKTsKKyAgZm9yICh2YXIgaSBpbiBmaWVsZHMpIHsKKyAgICBwYXJhbVtmaWVsZHNbaV1dID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmllbGRzW2ldKS52YWx1ZTsKKyAgfQorICBfX2RsZ19jbG9zZShwYXJhbSk7CisgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gb25DYW5jZWwoKSB7CisgIF9fZGxnX2Nsb3NlKG51bGwpOworICByZXR1cm4gZmFsc2U7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBjbGFzcz0iZGlhbG9nIiBvbmxvYWQ9IkluaXQoKSI+CisgIDxkaXYgaWQ9ImZfdHlwZSIgY2xhc3M9InRpdGxlIj5Gb3JtIEVsZW1lbnQ6IExBQkVMPC9kaXY+CisgIDxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9ImdldCI+CisgICAgPGRpdiBjbGFzcz0iZnIiPlRleHQ6PC9kaXY+CisgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InRleHQiIGlkPSJmX3RleHQiIC8+CisgICAgPHAgLz4KKyAgICA8ZGl2IGNsYXNzPSJmciI+Rm9yIENvbnRyb2w6PC9kaXY+CisgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZvciIgaWQ9ImZfZm9yIiAvPgorICAgIDxwIC8+CisgICAgPGRpdiBjbGFzcz0iZnIiPkFjY2VzcyBLZXk6PC9kaXY+CisgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImFjY2Vzc2tleSIgaWQ9ImZfYWNjZXNza2V5IiAvPgorICAgIDxwIC8+CisgICAgPGRpdiBpZD0iYnV0dG9ucyI+CisgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbmFtZT0ib2siIG9uY2xpY2s9InJldHVybiBvbk9LKCk7Ij5PSzwvYnV0dG9uPgorICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG5hbWU9ImNhbmNlbCIgb25jbGljaz0icmV0dXJuIG9uQ2FuY2VsKCk7Ij5DYW5jZWw8L2J1dHRvbj4KKyAgICA8L2Rpdj4KKyAgPC9mb3JtPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvcG9wdXBzL3NlbGVjdC5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9wb3B1cHMvc2VsZWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIzNDVkMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvcG9wdXBzL3NlbGVjdC5odG1sCkBAIC0wLDAgKzEsMjA4IEBACis8aHRtbD4KKworPGhlYWQ+CisgIDx0aXRsZT5JbnNlcnQvRWRpdCBGb3JtIEVsZW1lbnQgU0VMRUNUPC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vLi4vLi4vcG9wdXBzL3BvcHVwLmNzcyIgLz4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vLi4vcG9wdXBzL3BvcHVwLmpzIj48L3NjcmlwdD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgordmFyIGZpZWxkcyA9IFsiZl9uYW1lIiwgImZfc2l6ZSIsICJmX3RhYmluZGV4IiwgImZfbXVsdGlwbGUiLCAiZl9kaXNhYmxlZCJdOworCitmdW5jdGlvbiBJbml0KCkgeworICBfX2RsZ190cmFuc2xhdGUoIkZvcm1zIik7CisgIF9fZGxnX2luaXQobnVsbCx7d2lkdGg6MzYwLCBoZWlnaHQ6NDAwfSk7CisgIHZhciBwYXJhbSA9IHdpbmRvdy5kaWFsb2dBcmd1bWVudHM7CisgIGZvciAodmFyIGkgaW4gZmllbGRzKSB7CisgICAgc3dpdGNoIChmaWVsZHNbaV0pIHsKKyAgICBjYXNlICJmX211bHRpcGxlIjoKKyAgICBjYXNlICJmX2Rpc2FibGVkIjoKKyAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpZWxkc1tpXSkuY2hlY2tlZCA9IChwYXJhbVtmaWVsZHNbaV1dPT1maWVsZHNbaV0uc3Vic3RyaW5nKDIsMjApKSB8fCAocGFyYW1bZmllbGRzW2ldXSA9PSB0cnVlKTsgYnJlYWs7CisgICAgY2FzZSAiZl9zaXplIjoKKyAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpZWxkc1tpXSkudmFsdWUgPSAocGFyYW1bZmllbGRzW2ldXTw9MCk/IiI6cGFyYW1bZmllbGRzW2ldXTsgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpZWxkc1tpXSkudmFsdWUgPSBwYXJhbVtmaWVsZHNbaV1dOyBicmVhazsKKyAgICB9CisgIH0KKyAgZm9yICh2YXIgaT0wOyBpPD1wYXJhbS5mX29wdGlvbnMubGVuZ3RoLTE7IGkrKykgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3NlbGVjdCIpLm9wdGlvbnNbaV0gPSBuZXcgT3B0aW9uKHBhcmFtLmZfb3B0aW9uc1tpXS50ZXh0LCBwYXJhbS5mX29wdGlvbnNbaV0udmFsdWUpOworICB9CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX25hbWUiKS5mb2N1cygpOworfQorCitmdW5jdGlvbiBvbk9LKCkgeworICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9uYW1lIik7CisgIGlmICghZWwudmFsdWUpIHsKKyAgICBhbGVydChYaW5oYS5fbGMoIllvdSBtdXN0IGVudGVyIGEgTmFtZSIsIkZvcm1zIikpOworICAgIGVsLmZvY3VzKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIC8vIHBhc3MgZGF0YSBiYWNrIHRvIHRoZSBjYWxsaW5nIHdpbmRvdworICB2YXIgcGFyYW0gPSBuZXcgT2JqZWN0KCk7CisgIGZvciAodmFyIGkgaW4gZmllbGRzKSB7CisgICAgc3dpdGNoIChmaWVsZHNbaV0pIHsKKyAgICBjYXNlICJmX211bHRpcGxlIjoKKyAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9zaXplIikudmFsdWU9PSIxIikKKyAgICAgICAgcGFyYW1bImZfbXVsdGlwbGUiXSA9ICIiOworICAgICAgZWxzZQorICAgICAgICBwYXJhbVsiZl9tdWx0aXBsZSJdID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpZWxkc1tpXSkuY2hlY2tlZCk/Im11bHRpcGxlIjoiIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgImZfZGlzYWJsZWQiOgorICAgICAgcGFyYW1bZmllbGRzW2ldXSA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaWVsZHNbaV0pLmNoZWNrZWQpPyJkaXNhYmxlZCI6IiI7IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBwYXJhbVtmaWVsZHNbaV1dID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmllbGRzW2ldKS52YWx1ZTsgYnJlYWs7CisgICAgfQorICB9CisgIGZ1bmN0aW9uIG9wdGlvblZhbHVlcyh0ZXh0LHZhbHVlKSB7CisgICAgdGhpcy50ZXh0ID0gdGV4dDsKKyAgICB0aGlzLnZhbHVlID0gdmFsdWU7CisgIH0KKyAgb3B0aW9uTm9kZXMgPSBuZXcgQXJyYXkoKTsgLy8gZm9yIG9wdGlvbiB0ZXh0L3ZhbHVlIHBhaXJzCisgIGZvciAodmFyIGk9MDsgaTw9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3NlbGVjdCIpLm9wdGlvbnMubGVuZ3RoLTE7IGkrKykgeworICAgIG9wdGlvbk5vZGVzW2ldID0gbmV3IG9wdGlvblZhbHVlcyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9zZWxlY3QiKS5vcHRpb25zW2ldLnRleHQsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3NlbGVjdCIpLm9wdGlvbnNbaV0udmFsdWUpOworICB9CisgIHBhcmFtWyJmX29wdGlvbnMiXSA9IG9wdGlvbk5vZGVzOworICBfX2RsZ19jbG9zZShwYXJhbSk7CisgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gb25DYW5jZWwoKSB7CisgIF9fZGxnX2Nsb3NlKG51bGwpOworICByZXR1cm4gZmFsc2U7Cit9CisKKworLy9mdW5jdGlvbnMgdG8gYnVpbGQgc2VsZWN0IG9wdGlvbnMgbGlzdAorLy9Qb3B1bGF0ZXMgTGFiZWwgYW5kIFZhbHVlIGZpZWxkcyB3aXRoIHNlbGVjdGVkIG9wdGlvbiB2YWx1ZXMKK2Z1bmN0aW9uIGdldFZhbHVlcygpeworICB2YXIgZCA9IGRvY3VtZW50OworICBkLmdldEVsZW1lbnRCeUlkKCJmX29wdGlvbnZhbHVlIikudmFsdWUgPSBkLmdldEVsZW1lbnRCeUlkKCJmX3NlbGVjdCIpLm9wdGlvbnNbZC5nZXRFbGVtZW50QnlJZCgiZl9zZWxlY3QiKS5zZWxlY3RlZEluZGV4XS52YWx1ZTsKKyAgZC5nZXRFbGVtZW50QnlJZCgiZl9vcHRpb250ZXh0IikudmFsdWUgPSBkLmdldEVsZW1lbnRCeUlkKCJmX3NlbGVjdCIpLm9wdGlvbnNbZC5nZXRFbGVtZW50QnlJZCgiZl9zZWxlY3QiKS5zZWxlY3RlZEluZGV4XS50ZXh0OworICBkLmdldEVsZW1lbnRCeUlkKCJmX3VwZGF0ZSIpLnZhbHVlID0iVXBkYXRlIE9wdGlvbiI7Cit9CisKKy8vQWRkIG9yIHVwZGF0ZSBvcHRpb25zIHRvIHRoZSBzZWxlY3QgYm94CitmdW5jdGlvbiBhZGRJdGVtKGl0ZW0pIHsKKyAgdmFyIGQgPSBkb2N1bWVudDsKKyAgaWYgKGl0ZW0uZl9vcHRpb250ZXh0LnZhbHVlID09IiIpIHthbGVydChYaW5oYS5fbGMoIlBsZWFzZSBlbnRlciBhIExhYmVsIiwiRm9ybXMiKSk7fQorICBlbHNlIHsKKyAgICBpZiAoZC5nZXRFbGVtZW50QnlJZCgiZl9zZWxlY3QiKS5vcHRpb25zLnNlbGVjdGVkSW5kZXggIT0gLTEpIHsgLy91cGRhdGUgaXRlbQorICAgICAgdmFyIGluZHggPSBkLmdldEVsZW1lbnRCeUlkKCJmX3NlbGVjdCIpLm9wdGlvbnMuc2VsZWN0ZWRJbmRleDsKKyAgICAgIGQuZ2V0RWxlbWVudEJ5SWQoImZfc2VsZWN0Iikub3B0aW9uc1tpbmR4XS50ZXh0PWQuZ2V0RWxlbWVudEJ5SWQoImZfb3B0aW9udGV4dCIpLnZhbHVlOworICAgICAgZC5nZXRFbGVtZW50QnlJZCgiZl9zZWxlY3QiKS5vcHRpb25zW2luZHhdLnZhbHVlPWQuZ2V0RWxlbWVudEJ5SWQoImZfb3B0aW9udmFsdWUiKS52YWx1ZTsKKyAgICB9IGVsc2UgeyAvL2FkZCBuZXcgaXRlbQorICAgICAgdmFyIG5ld0l0ZW0gPSBkLmdldEVsZW1lbnRCeUlkKCJmX3NlbGVjdCIpLm9wdGlvbnMubGVuZ3RoKys7CisgICAgICBkLmdldEVsZW1lbnRCeUlkKCJmX3NlbGVjdCIpLm9wdGlvbnNbbmV3SXRlbV0udGV4dD1kLmdldEVsZW1lbnRCeUlkKCJmX29wdGlvbnRleHQiKS52YWx1ZTsKKyAgICAgIGQuZ2V0RWxlbWVudEJ5SWQoImZfc2VsZWN0Iikub3B0aW9uc1tuZXdJdGVtXS52YWx1ZT1kLmdldEVsZW1lbnRCeUlkKCJmX29wdGlvbnZhbHVlIikudmFsdWU7CisgICAgfQorICAgIGQuZ2V0RWxlbWVudEJ5SWQoImZfc2VsZWN0Iikuc2VsZWN0ZWRJbmRleCA9IC0xOyAvL2Rlc2VsZWN0CisgICAgZC5nZXRFbGVtZW50QnlJZCgiZl9vcHRpb250ZXh0IikudmFsdWU9IiI7Ly9jbGVhbiB1cAorICAgIGQuZ2V0RWxlbWVudEJ5SWQoImZfb3B0aW9udmFsdWUiKS52YWx1ZT0iIjsKKyAgICBkLmdldEVsZW1lbnRCeUlkKCJmX3VwZGF0ZSIpLnZhbHVlID0iQWRkIE9wdGlvbiI7CisgICAgZC5nZXRFbGVtZW50QnlJZCgiZl9vcHRpb250ZXh0IikuZm9jdXMoKTsKKyAgfQorfQorLy9DbGVhcnMgc2VsZWN0ZWQgb3B0aW9uCitmdW5jdGlvbiBkZWxldGVJdGVtKCkgeworICB2YXIgZCA9IGRvY3VtZW50OworICBmb3IgKHZhciBpID0gZC5nZXRFbGVtZW50QnlJZCgiZl9zZWxlY3QiKS5vcHRpb25zLmxlbmd0aCAtIDE7IGk+PTA7IGktLSkgeworICAgIHZhciBvcHQgPSBkLmdldEVsZW1lbnRCeUlkKCJmX3NlbGVjdCIpLm9wdGlvbnNbaV07CisgICAgaWYgKG9wdC5zZWxlY3RlZCkgeworICAgICAgZC5nZXRFbGVtZW50QnlJZCgiZl9zZWxlY3QiKS5vcHRpb25zW2ldID0gbnVsbDsKKyAgICB9CisgIH0KKyAgZC5nZXRFbGVtZW50QnlJZCgiZl9zZWxlY3QiKS5zZWxlY3RlZEluZGV4ID0gLTE7CisgIGQuZ2V0RWxlbWVudEJ5SWQoImZfb3B0aW9udGV4dCIpLnZhbHVlPSIiOworICBkLmdldEVsZW1lbnRCeUlkKCJmX29wdGlvbnZhbHVlIikudmFsdWU9IiI7CisgIGQuZ2V0RWxlbWVudEJ5SWQoImZfb3B0aW9udGV4dCIpLmZvY3VzKCk7Cit9CisvL01vdmVzIHNlbGVjdGVkIG9wdGlvbiB1cAorZnVuY3Rpb24gbW92ZU9wdGlvblVwKCkgeworICB2YXIgZCA9IGRvY3VtZW50OworICBmb3IgKGk9MDsgaTxkLmdldEVsZW1lbnRCeUlkKCJmX3NlbGVjdCIpLm9wdGlvbnMubGVuZ3RoOyBpKyspIHsKKyAgICBpZiAoZC5nZXRFbGVtZW50QnlJZCgiZl9zZWxlY3QiKS5vcHRpb25zW2ldLnNlbGVjdGVkKSB7CisgICAgICBpZiAoaSAhPSAwICYmICFkLmdldEVsZW1lbnRCeUlkKCJmX3NlbGVjdCIpLm9wdGlvbnNbaS0xXS5zZWxlY3RlZCkgeworICAgICAgICBzd2FwT3B0aW9ucyhkLmdldEVsZW1lbnRCeUlkKCJmX3NlbGVjdCIpLGksaS0xKTsKKyAgICAgICAgZC5nZXRFbGVtZW50QnlJZCgiZl9zZWxlY3QiKS5vcHRpb25zW2ktMV0uc2VsZWN0ZWQgPSB0cnVlOworICAgICAgfQorICAgIH0KKyAgfQorfQorLy9Nb3ZlcyBzZWxlY3RlZCBvcHRpb24gZG93bgorZnVuY3Rpb24gbW92ZU9wdGlvbkRvd24oKSB7CisgIHZhciBkID0gZG9jdW1lbnQ7CisgIGZvciAoaT1kLmdldEVsZW1lbnRCeUlkKCJmX3NlbGVjdCIpLm9wdGlvbnMubGVuZ3RoLTE7IGk+PTA7IGktLSkgeworICAgIGlmIChkLmdldEVsZW1lbnRCeUlkKCJmX3NlbGVjdCIpLm9wdGlvbnNbaV0uc2VsZWN0ZWQpIHsKKyAgICAgIGlmIChpICE9IChkLmdldEVsZW1lbnRCeUlkKCJmX3NlbGVjdCIpLm9wdGlvbnMubGVuZ3RoLTEpICYmICEgZC5nZXRFbGVtZW50QnlJZCgiZl9zZWxlY3QiKS5vcHRpb25zW2krMV0uc2VsZWN0ZWQpIHsKKyAgICAgICAgc3dhcE9wdGlvbnMoZC5nZXRFbGVtZW50QnlJZCgiZl9zZWxlY3QiKSxpLGkrMSk7CisgICAgICAgIGQuZ2V0RWxlbWVudEJ5SWQoImZfc2VsZWN0Iikub3B0aW9uc1tpKzFdLnNlbGVjdGVkID0gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworZnVuY3Rpb24gc3dhcE9wdGlvbnMob2JqLGksaikgeworICB2YXIgbyA9IG9iai5vcHRpb25zOworICB2YXIgaV9zZWxlY3RlZCA9IG9baV0uc2VsZWN0ZWQ7CisgIHZhciBqX3NlbGVjdGVkID0gb1tqXS5zZWxlY3RlZDsKKyAgdmFyIHRlbXAgPSBuZXcgT3B0aW9uKG9baV0udGV4dCwgb1tpXS52YWx1ZSk7CisgIHZhciB0ZW1wMj0gbmV3IE9wdGlvbihvW2pdLnRleHQsIG9bal0udmFsdWUpOworICBvW2ldID0gdGVtcDI7CisgIG9bal0gPSB0ZW1wOworICBvW2ldLnNlbGVjdGVkID0gal9zZWxlY3RlZDsKKyAgb1tqXS5zZWxlY3RlZCA9IGlfc2VsZWN0ZWQ7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgY2xhc3M9ImRpYWxvZyIgb25sb2FkPSJJbml0KCkiPgorICA8ZGl2IGlkPSJmX3R5cGUiIGNsYXNzPSJ0aXRsZSI+Rm9ybSBFbGVtZW50OiBTRUxFQ1Q8L2Rpdj4KKyAgPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0iZ2V0Ij4KKyAgICA8ZGl2IGNsYXNzPSJmciI+TmFtZS9JRDo8L2Rpdj4KKyAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmFtZSIgaWQ9ImZfbmFtZSIgdGl0bGU9Ik5hbWUgb2YgdGhlIGZvcm0gc2VsZWN0IiAvPgorICAgIDxwIC8+CisgICAgPGRpdiBjbGFzcz0iZnIiPlNpemU6PC9kaXY+CisgICAgPGlucHV0IG5hbWU9InNpemUiIGlkPSJmX3NpemUiIHR5cGU9InRleHQiIHZhbHVlPSIiIHNpemU9IjE1IiAvPgorICAgIDxwIC8+CisgICAgPGRpdiBjbGFzcz0iZnIiPjxub2JyPk11bHRpcGxlIFNlbGVjdDwvbm9icj48L2Rpdj4KKyAgICA8aW5wdXQgbmFtZT0ibXVsdGlwbGUiIGlkPSJmX211bHRpcGxlIiB0eXBlPSJjaGVja2JveCIgdmFsdWU9Im11bHRpcGxlIiB2YWx1ZT0ib24iIC8+CisgICAgPHAgLz4KKyAgICA8ZGl2IGNsYXNzPSJmciI+RGlzYWJsZWQ8L2Rpdj4KKyAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImRpc2FibGVkIiBpZD0iZl9kaXNhYmxlZCIgdmFsdWU9ImRpc2FibGVkIiAvPgorICAgIDxwIC8+CisgICAgPGRpdiBjbGFzcz0iZnIiPlRhYiBJbmRleDo8L2Rpdj4KKyAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGFiaW5kZXgiIGlkPSJmX3RhYmluZGV4IiAvPgorICAgIDxwIC8+CisgICAgPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgorICAgIDxmaWVsZHNldCBpZD0iZmxkTGF5b3V0Ij4KKyAgICA8bGVnZW5kPk9wdGlvbnM8L2xlZ2VuZD4KKyAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIj4KKyAgICAgIDx0cj4KKyAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij4KKyAgICAgICAgPHNlbGVjdCBuYW1lPSJzZWxlY3QiIGlkPSJmX3NlbGVjdCIgU2l6ZT0iNiIgb25jaGFuZ2U9ImdldFZhbHVlcygpOyIgIHN0eWxlPSJ3aWR0aDoxNmVtIj4KKyAgICAgICAgPC9zZWxlY3Q+CisgICAgICA8L3RkPgorICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij4KKyAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgbmFtZT0idXAiIHZhbHVlPSJNb3ZlIFVwIiBzdHlsZT0id2lkdGg6NmVtIiBvbkNsaWNrPSJtb3ZlT3B0aW9uVXAoKSI+PGJyIC8+CisgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIG5hbWU9ImRvd24iIHZhbHVlPSJNb3ZlIERvd24iIHN0eWxlPSJ3aWR0aDo2ZW0iIG9uQ2xpY2s9Im1vdmVPcHRpb25Eb3duKCkiPjxiciAvPgorICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBuYW1lPSJkZWxldGUiIHZhbHVlPSJEZWxldGUiIHN0eWxlPSJ3aWR0aDo2ZW0iIG9uQ2xpY2s9ImRlbGV0ZUl0ZW0oKTsiPgorICAgICAgPC90ZD4KKyAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgorICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiPgorICAgICAgPHRyPgorICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+TGFiZWw6PC90ZD4KKyAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZl9vcHRpb250ZXh0IiBuYW1lPSJvcHRpb25UZXh0IiB2YWx1ZT0iIiBzaXplPSIxNSI+PC90ZD4KKyAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPlZhbHVlOjwvdGQ+CisgICAgICAgIDx0ZD48aW5wdXQgbmFtZT0ib3B0aW9uVmFsdWUiIGlkPSJmX29wdGlvbnZhbHVlIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0iIiBzaXplPSIxNSI+PC90ZD4KKyAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSJidXR0b24iIG5hbWU9InVwZGF0ZSIgaWQ9ImZfdXBkYXRlIiB2YWx1ZT0iQWRkIiBvbmNsaWNrPSJhZGRJdGVtKGRvY3VtZW50LmZvcm1zWzBdKSI+PC90ZD4KKyAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgIDwvZmllbGRzZXQ+CisgICAgPGRpdiBpZD0iYnV0dG9ucyI+CisgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbmFtZT0ib2siIG9uY2xpY2s9InJldHVybiBvbk9LKCk7Ij5PSzwvYnV0dG9uPgorICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG5hbWU9ImNhbmNlbCIgb25jbGljaz0icmV0dXJuIG9uQ2FuY2VsKCk7Ij5DYW5jZWw8L2J1dHRvbj4KKyAgICA8L2Rpdj4KKyAgPC9mb3JtPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Gb3Jtcy9wb3B1cHMvdGV4dGFyZWEuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvcG9wdXBzL3RleHRhcmVhLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU5MTI1MQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRm9ybXMvcG9wdXBzL3RleHRhcmVhLmh0bWwKQEAgLTAsMCArMSwxMTIgQEAKKzxodG1sPgorCis8aGVhZD4KKyAgPHRpdGxlPkluc2VydC9FZGl0IEZvcm0gRWxlbWVudCBURVhUQVJFQTwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uLy4uLy4uL3BvcHVwcy9wb3B1cC5jc3MiIC8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uLy4uL3BvcHVwcy9wb3B1cC5qcyI+PC9zY3JpcHQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKwordmFyIGZpZWxkcyA9IFsiZl9uYW1lIiwgImZfdGV4dCIsICJmX2NvbHMiLCAiZl9yb3dzIiwgImZfd3JhcCIsICJmX3RhYmluZGV4IiwgImZfYWNjZXNza2V5IiwgImZfcmVhZE9ubHkiLCAiZl9kaXNhYmxlZCJdOworCitmdW5jdGlvbiBJbml0KCkgeworICBfX2RsZ190cmFuc2xhdGUoIkZvcm1zIik7CisgIF9fZGxnX2luaXQobnVsbCx7d2lkdGg6MjYwLCBoZWlnaHQ6MzgwfSk7CisgIHZhciBwYXJhbSA9IHdpbmRvdy5kaWFsb2dBcmd1bWVudHM7CisgIGZvciAodmFyIGkgaW4gZmllbGRzKSB7CisgICAgc3dpdGNoIChmaWVsZHNbaV0pIHsKKyAgICBjYXNlICJmX3JlYWRPbmx5IjoKKyAgICBjYXNlICJmX2Rpc2FibGVkIjoKKyAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpZWxkc1tpXSkuY2hlY2tlZCA9IChwYXJhbVtmaWVsZHNbaV1dPT1maWVsZHNbaV0uc3Vic3RyaW5nKDIsMjApKSB8fCAocGFyYW1bZmllbGRzW2ldXSA9PSB0cnVlKTsgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaWVsZHNbaV0pLnZhbHVlID0gcGFyYW1bZmllbGRzW2ldXTsgYnJlYWs7CisgICAgfQorICB9CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX25hbWUiKS5mb2N1cygpOworfQorCitmdW5jdGlvbiBvbk9LKCkgeworICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9uYW1lIik7CisgIGlmICghZWwudmFsdWUpIHsKKyAgICBhbGVydChYaW5oYS5fbGMoIllvdSBtdXN0IGVudGVyIGEgTmFtZSIsIkZvcm1zIikpOworICAgIGVsLmZvY3VzKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIC8vIHBhc3MgZGF0YSBiYWNrIHRvIHRoZSBjYWxsaW5nIHdpbmRvdworICB2YXIgcGFyYW0gPSBuZXcgT2JqZWN0KCk7CisgIGZvciAodmFyIGkgaW4gZmllbGRzKSB7CisgICAgc3dpdGNoIChmaWVsZHNbaV0pIHsKKyAgICBjYXNlICJmX3JlYWRPbmx5IjoKKyAgICBjYXNlICJmX2Rpc2FibGVkIjoKKyAgICAgIGlmKFhpbmhhLmlzX2llKQorICAgICAgICBwYXJhbVtmaWVsZHNbaV1dID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpZWxkc1tpXSkuY2hlY2tlZCk/dHJ1ZToiIjsKKyAgICAgIGVsc2UKKyAgICAgICAgcGFyYW1bZmllbGRzW2ldXSA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaWVsZHNbaV0pLmNoZWNrZWQpP2ZpZWxkc1tpXS5zdWJzdHJpbmcoMiwyMCk6IiI7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgcGFyYW1bZmllbGRzW2ldXSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpZWxkc1tpXSkudmFsdWU7IGJyZWFrOworICAgIH0KKyAgfQorICBfX2RsZ19jbG9zZShwYXJhbSk7CisgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gb25DYW5jZWwoKSB7CisgIF9fZGxnX2Nsb3NlKG51bGwpOworICByZXR1cm4gZmFsc2U7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgY2xhc3M9ImRpYWxvZyIgb25sb2FkPSJJbml0KCkiPgorPGRpdiBpZD0iZl90eXBlIiBjbGFzcz0idGl0bGUiPkZvcm0gRWxlbWVudDogVEVYVEFSRUE8L2Rpdj4KKzxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9ImdldCI+CisgIDxkaXYgY2xhc3M9ImZyIj5OYW1lL0lEOjwvZGl2PgorICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmFtZSIgaWQ9ImZfbmFtZSIgdGl0bGU9Im5hbWUgb2YgdGhlIHRleHRhcmVhIiAvPgorICA8cCAvPgorICA8ZmllbGRzZXQ+CisgIDxsZWdlbmQ+RGltZW5zaW9uczwvbGVnZW5kPgorICAgIDxkaXYgY2xhc3M9ImZyIj5Db2x1bW5zOjwvZGl2PgorICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjb2xzIiBpZD0iZl9jb2xzIiBzaXplPSI1IiB0aXRsZT0iV2lkdGggaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMiIC8+CisgICAgPHAgLz4KKyAgICA8ZGl2IGNsYXNzPSJmciI+Um93czo8L2Rpdj4KKyAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icm93cyIgaWQ9ImZfcm93cyIgc2l6ZT0iNSIgdGl0bGU9IkhlaWdodCBpbiBudW1iZXIgb2Ygcm93cyIgLz4KKyAgICA8cCAvPgorICA8L2ZpZWxkc2V0PgorICA8ZGl2IGNsYXNzPSJzcGFjZSI+PC9kaXY+CisgIDxkaXYgY2xhc3M9ImZyIj5XcmFwIE1vZGU6PC9kaXY+CisgIDxzZWxlY3QgbmFtZT0id3JhcCIgaWQ9ImZfd3JhcCI+CisgICAgPG9wdGlvbiB2YWx1ZT0iIj48L29wdGlvbj4KKyAgICA8b3B0aW9uIHZhbHVlPSJvZmYiPk9mZjwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9InNvZnQiPlNvZnQ8L29wdGlvbj4KKyAgICA8b3B0aW9uIHZhbHVlPSJoYXJkIj5IYXJkPC9vcHRpb24+CisgICAgPG9wdGlvbiB2YWx1ZT0icGh5c2ljYWwiPlBoeXNpY2FsPC9vcHRpb24+CisgICAgPG9wdGlvbiB2YWx1ZT0idmlydHVhbCI+VmlydHVhbDwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9Im5vcm1hbCI+bm9ybWFsPC9vcHRpb24+CisgICAgPG9wdGlvbiB2YWx1ZT0ibm93cmFwIj5ub3dyYXA8L29wdGlvbj4KKyAgICA8b3B0aW9uIHZhbHVlPSJwcmUiPnByZTwvb3B0aW9uPgorICA8L3NlbGVjdD4KKyAgPHAgLz4KKyAgPGRpdiBjbGFzcz0iZnIiPlJlYWQgT25seTwvZGl2PgorICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InJlYWRPbmx5IiBpZD0iZl9yZWFkT25seSIgdmFsdWU9InJlYWRPbmx5IiAvPgorICA8cCAvPgorICA8ZGl2IGNsYXNzPSJmciI+RGlzYWJsZWQ8L2Rpdj4KKyAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkaXNhYmxlZCIgaWQ9ImZfZGlzYWJsZWQiIHZhbHVlPSJkaXNhYmxlZCIgLz4KKyAgPHAgLz4KKyAgPGRpdiBjbGFzcz0iZnIiPlRhYiBJbmRleDo8L2Rpdj4KKyAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InRhYmluZGV4IiBpZD0iZl90YWJpbmRleCIgLz4KKyAgPHAgLz4KKyAgPGRpdiBjbGFzcz0iZnIiPkFjY2VzcyBLZXk6PC9kaXY+CisgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJhY2Nlc3NrZXkiIGlkPSJmX2FjY2Vzc2tleSIgLz4KKyAgPHAgLz4KKworICA8ZGl2IGNsYXNzPSJmciI+SW5pdGlhbCBUZXh0OjwvZGl2PgorICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGV4dCIgaWQ9ImZfdGV4dCIgdGl0bGU9IkRlZmF1bHQgdGV4dCAob3B0aW9uYWwpIiAvPgorICA8ZGl2IGlkPSJidXR0b25zIj4KKyAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbmFtZT0ib2siIG9uY2xpY2s9InJldHVybiBvbk9LKCk7Ij5PSzwvYnV0dG9uPgorICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBuYW1lPSJjYW5jZWwiIG9uY2xpY2s9InJldHVybiBvbkNhbmNlbCgpOyI+Q2FuY2VsPC9idXR0b24+CisgIDwvZGl2PgorPC9mb3JtPgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL0Z1bGxQYWdlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9GdWxsUGFnZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmE3ZjdjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9GdWxsUGFnZS5qcwpAQCAtMCwwICsxLDIwOSBAQAorLy8gRnVsbFBhZ2UgUGx1Z2luIGZvciBIVE1MQXJlYS0zLjAKKy8vIEltcGxlbWVudGF0aW9uIGJ5IE1paGFpIEJhem9uLiAgU3BvbnNvcmVkIGJ5IGh0dHA6Ly90aHljb3RpYy5jb20KKy8vCisvLyBodG1sQXJlYSB2My4wIC0gQ29weXJpZ2h0IChjKSAyMDAyIGludGVyYWN0aXZldG9vbHMuY29tLCBpbmMuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gQSBmcmVlIFdZU0lXWUcgZWRpdG9yIHJlcGxhY2VtZW50IGZvciA8dGV4dGFyZWE+IGZpZWxkcy4KKy8vIEZvciBmdWxsIHNvdXJjZSBjb2RlIGFuZCBkb2NzLCB2aXNpdCBodHRwOi8vd3d3LmludGVyYWN0aXZldG9vbHMuY29tLworLy8KKy8vIFZlcnNpb24gMy4wIGRldmVsb3BlZCBieSBNaWhhaSBCYXpvbiBmb3IgSW50ZXJhY3RpdmVUb29scy4KKy8vICAgaHR0cDovL2R5bmFyY2guY29tL21pc2hvbworLy8KKy8vICRJZDpmdWxsLXBhZ2UuanMgODU2IDIwMDctMDYtMTMgMTg6MzQ6MzRaIHd5bXN5ICQKKworZnVuY3Rpb24gRnVsbFBhZ2UoZWRpdG9yKSB7CisJdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisKKwl2YXIgY2ZnID0gZWRpdG9yLmNvbmZpZzsKKwljZmcuZnVsbFBhZ2UgPSB0cnVlOworCXZhciBzZWxmID0gdGhpczsKKworCWNmZy5yZWdpc3RlckJ1dHRvbigiRlAtZG9jcHJvcCIsIHRoaXMuX2xjKCJEb2N1bWVudCBwcm9wZXJ0aWVzIiksIGVkaXRvci5pbWdVUkwoImRvY3Byb3AuZ2lmIiwgIkZ1bGxQYWdlIiksIGZhbHNlLAorCQkJICAgZnVuY3Rpb24oZWRpdG9yLCBpZCkgeworCQkJCSAgIHNlbGYuYnV0dG9uUHJlc3MoZWRpdG9yLCBpZCk7CisJCQkgICB9KTsKKworCS8vIGFkZCBhIG5ldyBsaW5lIGluIHRoZSB0b29sYmFyCisJY2ZnLmFkZFRvb2xiYXJFbGVtZW50KFsic2VwYXJhdG9yIiwiRlAtZG9jcHJvcCJdLCJzZXBhcmF0b3IiLC0xKTsKK30KKworRnVsbFBhZ2UuX3BsdWdpbkluZm8gPSB7CisJbmFtZSAgICAgICAgICA6ICJGdWxsUGFnZSIsCisJdmVyc2lvbiAgICAgICA6ICIxLjAiLAorCWRldmVsb3BlciAgICAgOiAiTWloYWkgQmF6b24iLAorCWRldmVsb3Blcl91cmwgOiAiaHR0cDovL2R5bmFyY2guY29tL21pc2hvby8iLAorCWNfb3duZXIgICAgICAgOiAiTWloYWkgQmF6b24iLAorCXNwb25zb3IgICAgICAgOiAiVGh5Y290aWMgU29mdHdhcmUgTHRkLiIsCisJc3BvbnNvcl91cmwgICA6ICJodHRwOi8vdGh5Y290aWMuY29tIiwKKwlsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIgorfTsKKworRnVsbFBhZ2UucHJvdG90eXBlLl9sYyA9IGZ1bmN0aW9uKHN0cmluZykgeworICAgIHJldHVybiBYaW5oYS5fbGMoc3RyaW5nLCAnRnVsbFBhZ2UnKTsKK307CisKK0Z1bGxQYWdlLnByb3RvdHlwZS5idXR0b25QcmVzcyA9IGZ1bmN0aW9uKGVkaXRvciwgaWQpIHsKKwl2YXIgc2VsZiA9IHRoaXM7CisJc3dpdGNoIChpZCkgeworCSAgICBjYXNlICJGUC1kb2Nwcm9wIjoKKwkJdmFyIGRvYyA9IGVkaXRvci5fZG9jOworCQl2YXIgbGlua3MgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKTsKKwkJdmFyIHN0eWxlMSA9ICcnOworCQl2YXIgc3R5bGUyID0gJyc7CisJCXZhciBrZXl3b3JkcyA9ICcnOworCQl2YXIgZGVzY3JpcHRpb24gPSAnJzsKKwkJdmFyIGNoYXJzZXQgPSAnJzsKKwkJZm9yICh2YXIgaSA9IGxpbmtzLmxlbmd0aDsgLS1pID49IDA7KSB7CisJCQl2YXIgbGluayA9IGxpbmtzW2ldOworCQkJaWYgKC9zdHlsZXNoZWV0L2kudGVzdChsaW5rLnJlbCkpIHsKKwkJCQlpZiAoL2FsdGVybmF0ZS9pLnRlc3QobGluay5yZWwpKQorCQkJCQlzdHlsZTIgPSBsaW5rLmhyZWY7CisJCQkJZWxzZQorCQkJCQlzdHlsZTEgPSBsaW5rLmhyZWY7CisJCQl9CisJCX0KKwkJdmFyIG1ldGFzID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJtZXRhIik7CisJCWZvciAodmFyIGkgPSBtZXRhcy5sZW5ndGg7IC0taSA+PSAwOykgeworCQkJdmFyIG1ldGEgPSBtZXRhc1tpXTsKKwkJCWlmICgvY29udGVudC10eXBlL2kudGVzdChtZXRhLmh0dHBFcXVpdikpIHsKKwkJCQlyID0gL150ZXh0XC9odG1sOyAqY2hhcnNldD0oLiopJC9pLmV4ZWMobWV0YS5jb250ZW50KTsKKwkJCQljaGFyc2V0ID0gclsxXTsKKwkJCX0gZWxzZSBpZiAoKC9rZXl3b3Jkcy9pLnRlc3QobWV0YS5uYW1lKSkgfHwgKC9rZXl3b3Jkcy9pLnRlc3QobWV0YS5pZCkpKSB7CisJCQkJa2V5d29yZHMgPSBtZXRhLmNvbnRlbnQ7CisJCQl9CWVsc2UgaWYgKCgvZGVzY3JpcHRpb24vaS50ZXN0KG1ldGEubmFtZSkpIHx8ICgvZGVzY3JpcHRpb24vaS50ZXN0KG1ldGEuaWQpKSkgeworCQkJCWRlc2NyaXB0aW9uID0gbWV0YS5jb250ZW50OworCQkJfQorCQl9CisJCXZhciB0aXRsZSA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGl0bGUiKVswXTsKKwkJdGl0bGUgPSB0aXRsZSA/IHRpdGxlLmlubmVySFRNTCA6ICcnOworCQl2YXIgaW5pdCA9IHsKKwkJCWZfZG9jdHlwZSAgICAgIDogZWRpdG9yLmRvY3R5cGUsCisJCQlmX3RpdGxlICAgICAgICA6IHRpdGxlLAorCQkJZl9ib2R5X2JnY29sb3IgOiBYaW5oYS5fY29sb3JUb1JnYihkb2MuYm9keS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IpLAorCQkJZl9ib2R5X2ZnY29sb3IgOiBYaW5oYS5fY29sb3JUb1JnYihkb2MuYm9keS5zdHlsZS5jb2xvciksCisJCQlmX2Jhc2Vfc3R5bGUgICA6IHN0eWxlMSwKKwkJCWZfYWx0X3N0eWxlICAgIDogc3R5bGUyLAorCQkJZl9jaGFyc2V0ICAgICAgOiBjaGFyc2V0LAorCQkJZl9rZXl3b3JkcyAgICAgOiBrZXl3b3JkcywKKwkJCWZfZGVzY3JpcHRpb24gIDogZGVzY3JpcHRpb24sCisJCQllZGl0b3IgICAgICAgICA6IGVkaXRvcgorCQl9OworCQllZGl0b3IuX3BvcHVwRGlhbG9nKCJwbHVnaW46Ly9GdWxsUGFnZS9kb2Nwcm9wIiwgZnVuY3Rpb24ocGFyYW1zKSB7CisJCQlzZWxmLnNldERvY1Byb3AocGFyYW1zKTsKKwkJfSwgaW5pdCk7CisJCWJyZWFrOworCX0KK307CisKK0Z1bGxQYWdlLnByb3RvdHlwZS5zZXREb2NQcm9wID0gZnVuY3Rpb24ocGFyYW1zKSB7CisJdmFyIHR4dCA9ICIiOworCXZhciBkb2MgPSB0aGlzLmVkaXRvci5fZG9jOworCXZhciBoZWFkID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07CisJdmFyIGxpbmtzID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5rIik7CisJdmFyIG1ldGFzID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJtZXRhIik7CisJdmFyIHN0eWxlMSA9IG51bGw7CisJdmFyIHN0eWxlMiA9IG51bGw7CisJdmFyIGNoYXJzZXQgPSBudWxsOworCXZhciBjaGFyc2V0X21ldGEgPSBudWxsOworCXZhciBrZXl3b3JkcyA9IG51bGw7CisJdmFyIGRlc2NyaXB0aW9uID0gbnVsbDsKKwlmb3IgKHZhciBpID0gbGlua3MubGVuZ3RoOyAtLWkgPj0gMDspIHsKKwkJdmFyIGxpbmsgPSBsaW5rc1tpXTsKKwkJaWYgKC9zdHlsZXNoZWV0L2kudGVzdChsaW5rLnJlbCkpIHsKKwkJCWlmICgvYWx0ZXJuYXRlL2kudGVzdChsaW5rLnJlbCkpCisJCQkJc3R5bGUyID0gbGluazsKKwkJCWVsc2UKKwkJCQlzdHlsZTEgPSBsaW5rOworCQl9CisJfQorCWZvciAodmFyIGkgPSBtZXRhcy5sZW5ndGg7IC0taSA+PSAwOykgeworCQl2YXIgbWV0YSA9IG1ldGFzW2ldOworCQlpZiAoL2NvbnRlbnQtdHlwZS9pLnRlc3QobWV0YS5odHRwRXF1aXYpKSB7CisJCQlyID0gL150ZXh0XC9odG1sOyAqY2hhcnNldD0oLiopJC9pLmV4ZWMobWV0YS5jb250ZW50KTsKKwkJCWNoYXJzZXQgPSByWzFdOworCQkJY2hhcnNldF9tZXRhID0gbWV0YTsKKwkJfSBlbHNlIGlmICgoL2tleXdvcmRzL2kudGVzdChtZXRhLm5hbWUpKSB8fCAoL2tleXdvcmRzL2kudGVzdChtZXRhLmlkKSkpIHsKKwkJCWtleXdvcmRzID0gbWV0YTsKKwkJfQllbHNlIGlmICgoL2Rlc2NyaXB0aW9uL2kudGVzdChtZXRhLm5hbWUpKSB8fCAoL2Rlc2NyaXB0aW9uL2kudGVzdChtZXRhLmlkKSkpIHsKKwkJCWRlc2NyaXB0aW9uID0gbWV0YTsKKwkJfQorCX0KKwlmdW5jdGlvbiBjcmVhdGVMaW5rKGFsdCkgeworCQl2YXIgbGluayA9IGRvYy5jcmVhdGVFbGVtZW50KCJsaW5rIik7CisJCWxpbmsucmVsID0gYWx0ID8gImFsdGVybmF0ZSBzdHlsZXNoZWV0IiA6ICJzdHlsZXNoZWV0IjsKKwkJaGVhZC5hcHBlbmRDaGlsZChsaW5rKTsKKwkJcmV0dXJuIGxpbms7CisJfQorCWZ1bmN0aW9uIGNyZWF0ZU1ldGEoaHR0cEVxdWl2LCBuYW1lLCBjb250ZW50KSB7CisJCXZhciBtZXRhID0gZG9jLmNyZWF0ZUVsZW1lbnQoIm1ldGEiKTsKKwkJaWYgKGh0dHBFcXVpdiE9IiIpIG1ldGEuaHR0cEVxdWl2ID0gaHR0cEVxdWl2OworCQlpZiAobmFtZSE9IiIpIG1ldGEubmFtZSA9IG5hbWU7CisJCWlmIChuYW1lIT0iIikgbWV0YS5pZCA9IG5hbWU7CisJCW1ldGEuY29udGVudCA9IGNvbnRlbnQ7CisJCWhlYWQuYXBwZW5kQ2hpbGQobWV0YSk7CisJCXJldHVybiBtZXRhOworCX0KKworCWlmICghc3R5bGUxICYmIHBhcmFtcy5mX2Jhc2Vfc3R5bGUpCisJCXN0eWxlMSA9IGNyZWF0ZUxpbmsoZmFsc2UpOworCWlmIChwYXJhbXMuZl9iYXNlX3N0eWxlKQorCQlzdHlsZTEuaHJlZiA9IHBhcmFtcy5mX2Jhc2Vfc3R5bGU7CisJZWxzZSBpZiAoc3R5bGUxKQorCQloZWFkLnJlbW92ZUNoaWxkKHN0eWxlMSk7CisKKwlpZiAoIXN0eWxlMiAmJiBwYXJhbXMuZl9hbHRfc3R5bGUpCisJCXN0eWxlMiA9IGNyZWF0ZUxpbmsodHJ1ZSk7CisJaWYgKHBhcmFtcy5mX2FsdF9zdHlsZSkKKwkJc3R5bGUyLmhyZWYgPSBwYXJhbXMuZl9hbHRfc3R5bGU7CisJZWxzZSBpZiAoc3R5bGUyKQorCQloZWFkLnJlbW92ZUNoaWxkKHN0eWxlMik7CisKKwlpZiAoY2hhcnNldF9tZXRhKSB7CisJCWhlYWQucmVtb3ZlQ2hpbGQoY2hhcnNldF9tZXRhKTsKKwkJY2hhcnNldF9tZXRhID0gbnVsbDsKKwl9CisJaWYgKCFjaGFyc2V0X21ldGEgJiYgcGFyYW1zLmZfY2hhcnNldCkKKwkJY2hhcnNldF9tZXRhID0gY3JlYXRlTWV0YSgiQ29udGVudC1UeXBlIiwiIiwgInRleHQvaHRtbDsgY2hhcnNldD0iK3BhcmFtcy5mX2NoYXJzZXQpOworCisJaWYgKCFrZXl3b3JkcyAmJiBwYXJhbXMuZl9rZXl3b3JkcykKKwkJa2V5d29yZHMgPSBjcmVhdGVNZXRhKCIiLCJrZXl3b3JkcyIsIHBhcmFtcy5mX2tleXdvcmRzKTsKKwllbHNlIGlmIChwYXJhbXMuZl9rZXl3b3JkcykKKwkJa2V5d29yZHMuY29udGVudCA9IHBhcmFtcy5mX2tleXdvcmRzOworCWVsc2UgaWYgKGtleXdvcmRzKQorCQloZWFkLnJlbW92ZUNoaWxkKGtleXdvcmRzKTsKKworCWlmICghZGVzY3JpcHRpb24gJiYgcGFyYW1zLmZfZGVzY3JpcHRpb24pCisJCWRlc2NyaXB0aW9uID0gY3JlYXRlTWV0YSgiIiwiZGVzY3JpcHRpb24iLCBwYXJhbXMuZl9kZXNjcmlwdGlvbik7CisJZWxzZSBpZiAocGFyYW1zLmZfZGVzY3JpcHRpb24pCisJCWRlc2NyaXB0aW9uLmNvbnRlbnQgPSBwYXJhbXMuZl9kZXNjcmlwdGlvbjsKKwllbHNlIGlmIChkZXNjcmlwdGlvbikKKwkJaGVhZC5yZW1vdmVDaGlsZChkZXNjcmlwdGlvbik7CisKKyAgCWZvciAodmFyIGkgaW4gcGFyYW1zKSB7CisJCXZhciB2YWwgPSBwYXJhbXNbaV07CisJCXN3aXRjaCAoaSkgeworCQkgICAgY2FzZSAiZl90aXRsZSI6CisJCQl2YXIgdGl0bGUgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRpdGxlIilbMF07CisJCQlpZiAoIXRpdGxlKSB7CisJCQkJdGl0bGUgPSBkb2MuY3JlYXRlRWxlbWVudCgidGl0bGUiKTsKKwkJCQloZWFkLmFwcGVuZENoaWxkKHRpdGxlKTsKKwkJCX0gZWxzZSB3aGlsZSAobm9kZSA9IHRpdGxlLmxhc3RDaGlsZCkKKwkJCQl0aXRsZS5yZW1vdmVDaGlsZChub2RlKTsKKwkJCWlmICghWGluaGEuaXNfaWUpCisJCQkJdGl0bGUuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKHZhbCkpOworCQkJZWxzZQorCQkJCWRvYy50aXRsZSA9IHZhbDsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAiZl9kb2N0eXBlIjoKKwkJCXRoaXMuZWRpdG9yLnNldERvY3R5cGUodmFsKTsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAiZl9ib2R5X2JnY29sb3IiOgorCQkJZG9jLmJvZHkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdmFsOworCQkJYnJlYWs7CisJCSAgICBjYXNlICJmX2JvZHlfZmdjb2xvciI6CisJCQlkb2MuYm9keS5zdHlsZS5jb2xvciA9IHZhbDsKKwkJCWJyZWFrOworCQl9CisJfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2ltZy9kb2Nwcm9wLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvaW1nL2RvY3Byb3AuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMDA4ODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2ltZy9kb2Nwcm9wLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvY2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvY2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ3OGU0NAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9jaC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLlj5bmtogiLAorICAgICJPSyI6ICLlpb0iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9jei5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9jei5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTMzN2U1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2N6LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY3oiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlpydcWhaXQiLAorICAgICJEZXNjcmlwdGlvbjoiOiAiUG9waXMiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2RhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlN2YzZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvZGEuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICJEZXNjcmlwdGlvbjoiOiAiQmVza3JpdmVsc2U6IiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzA5ZDg2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsMjUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWx0ZXJuYXRlIHN0eWxlLXNoZWV0OiI6ICJBbHRlcm5hdGl2ZXIgU3R5bGVzaGVldDoiLAorICAgICJCYWNrZ3JvdW5kIGNvbG9yOiI6ICJIaW50ZXJncnVuZGZhcmJlOiIsCisgICAgIkNhbmNlbCI6ICJBYmJyZWNoZW4iLAorICAgICJDaGFyYWN0ZXIgc2V0OiI6ICJaZWljaGVuc2F0eiIsCisgICAgIkRPQ1RZUEU6IjogIkRPQ1RZUEU6IiwKKyAgICAiRGVzY3JpcHRpb246IjogIkJlc2NocmVpYnVuZyIsCisgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAiRG9rdW1lbnRlaWdlbnNjaGFmdGVuIiwKKyAgICAiRG9jdW1lbnQgdGl0bGU6IjogIkRva3VtZW50dGl0ZWw6IiwKKyAgICAiS2V5d29yZHM6IjogIlNjaGzDvHNzZWx3b3J0ZSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUHJpbWFyeSBzdHlsZS1zaGVldDoiOiAiU3R5bGVzaGVldDoiLAorICAgICJUZXh0IGNvbG9yOiI6ICJUZXh0ZmFyYmU6IiwKKyAgICAiVVRGLTggKHJlY29tbWVuZGVkKSI6ICJVVEYtOCAoZW1wZm9obGVuKSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2VlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2VlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOTE2ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvZWUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTG9vYnUiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2VsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2VsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYmEyZjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvZWwuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciLAorICAgICJEZXNjcmlwdGlvbjoiOiAizqDOtc+BzrnOs8+BzrHPhs6uIiwKKyAgICAiT0siOiAizpXOvc+EzqzOvs61zrkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWVmOTI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2VzLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXMiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiRGVzY3JpcHRpb246IjogIkRlc2NyaXBjacOzbjoiLAorICAgICJPSyI6ICJBY2VwdGFyIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvZXUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvZXUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JjOWRiYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9ldS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImV1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJVdHppIiwKKyAgICAiT0siOiAiQWRvcyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2ZhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZTdmN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvZmEuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi2KfZhti12LHYp9mBIiwKKyAgICAiT0siOiAi2KjZhNmHIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvZmkuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvZmkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYzMmVhZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9maS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIiwKKyAgICAiRGVzY3JpcHRpb246IjogIkt1dmF1cyIsCisgICAgIk9LIjogIkh5dsOka3N5IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvZnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcyYmE0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9mci5qcwpAQCAtMCwwICsxLDI1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsdGVybmF0ZSBzdHlsZS1zaGVldDoiOiAiRmV1aWxsZSBDU1MgYWx0ZXJuYXRpdmUiLAorICAgICJCYWNrZ3JvdW5kIGNvbG9yOiI6ICJDb3VsZXVyIGQnYXJyacOocmUgcGxhbiIsCisgICAgIkNhbmNlbCI6ICJBbm51bGVyIiwKKyAgICAiQ2hhcmFjdGVyIHNldDoiOiAiSmV1IGRlIGNhcmFjdMOocmVzIiwKKyAgICAiRE9DVFlQRToiOiAiRE9DVFlQRSIsCisgICAgIkRlc2NyaXB0aW9uOiI6ICJEZXNjcmlwdGlvbiIsCisgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAiUHJvcHJpw6l0w6lzIGR1IGRvY3VtZW50IiwKKyAgICAiRG9jdW1lbnQgdGl0bGU6IjogIlRpdHJlIGR1IGRvY3VtZW50IiwKKyAgICAiS2V5d29yZHM6IjogIk1vdHMgY2zDqXMiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlByaW1hcnkgc3R5bGUtc2hlZXQ6IjogIkZldWlsbGUgQ1NTIHByaW1haXJlIiwKKyAgICAiVGV4dCBjb2xvcjoiOiAiQ291bGV1ciBkZSB0ZXh0ZSIsCisgICAgIlVURi04IChyZWNvbW1lbmRlZCkiOiAiVVRGLTggKHJlY29tbWFuZMOpKSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2hlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZjI3YzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvaGUuanMKQEAgLTAsMCArMSwyMiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJoZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbHRlcm5hdGUgc3R5bGUtc2hlZXQ6IjogIteS15nXnNeZ15XXnyDXodeS16DXldefINeQ15fXqDoiLAorICAgICJCYWNrZ3JvdW5kIGNvbG9yOiI6ICLXpteR16Ig16jXp9eiOiIsCisgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKKyAgICAiRE9DVFlQRToiOiAiRE9DVFlQRToiLAorICAgICJEZXNjcmlwdGlvbjoiOiAi16rXmdeQ15XXqCIsCisgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAi157XkNek15nXmdeg15kg157Xodee15oiLAorICAgICJEb2N1bWVudCB0aXRsZToiOiAi15vXldeq16jXqiDXnteh157XmjoiLAorICAgICJPSyI6ICLXkNeZ16nXldeoIiwKKyAgICAiUHJpbWFyeSBzdHlsZS1zaGVldDoiOiAi15LXmdec15nXldefINeh15LXoNeV158g16jXkNep15k6IiwKKyAgICAiVGV4dCBjb2xvcjoiOiAi16bXkdeiINeY16fXodeYOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2h1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2h1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzODUyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvaHUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJodSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIsCisgICAgIk9LIjogIlJlbmRiZW4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9pdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9pdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTA5NzgzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2l0LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaXQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGFtZW50byIsCisgICAgIkRlc2NyaXB0aW9uOiI6ICJEZXNjcml6aW9uZSIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA1OTZiNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9qYS5qcwpAQCAtMCwwICsxLDI1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsdGVybmF0ZSBzdHlsZS1zaGVldDoiOiAi5Luj5pu/44K544K/44Kk44Or44K344O844OIOiIsCisgICAgIkJhY2tncm91bmQgY29sb3I6IjogIuiDjOaZr+iJsjoiLAorICAgICJDYW5jZWwiOiAi5Lit5q2iIiwKKyAgICAiQ2hhcmFjdGVyIHNldDoiOiAi5paH5a2X44K744OD44OIOiIsCisgICAgIkRPQ1RZUEU6IjogIkRPQ1RZUEU6IiwKKyAgICAiRGVzY3JpcHRpb246IjogIuiqrOaYjjoiLAorICAgICJEb2N1bWVudCBwcm9wZXJ0aWVzIjogIuaWh+abuOOBruODl+ODreODkeODhuOCoyIsCisgICAgIkRvY3VtZW50IHRpdGxlOiI6ICLmlofmm7jjga7ooajpoYw6IiwKKyAgICAiS2V5d29yZHM6IjogIuOCreODvOODr+ODvOODiToiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlByaW1hcnkgc3R5bGUtc2hlZXQ6IjogIuWEquWFiOOCueOCv+OCpOODq+OCt+ODvOODiDoiLAorICAgICJUZXh0IGNvbG9yOiI6ICLmloflrZfoibI6IiwKKyAgICAiVVRGLTggKHJlY29tbWVuZGVkKSI6ICJVVEYtOCAo5o6o5aWoKSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2xjX2Jhc2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvbGNfYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWI1ZTgxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSw0MiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICIuLi4iOiAiIiwKKyAgICAiQWx0ZXJuYXRlIHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICJCYWNrZ3JvdW5kIGNvbG9yOiI6ICIiLAorICAgICJDYW5jZWwiOiAiIiwKKyAgICAiQ2hhcmFjdGVyIHNldDoiOiAiIiwKKyAgICAiRE9DVFlQRToiOiAiIiwKKyAgICAiRGVzY3JpcHRpb246IjogIiIsCisgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAiIiwKKyAgICAiRG9jdW1lbnQgdGl0bGU6IjogIiIsCisgICAgIktleXdvcmRzOiI6ICIiLAorICAgICJPSyI6ICIiLAorICAgICJQcmltYXJ5IHN0eWxlLXNoZWV0OiI6ICIiLAorICAgICJUZXh0IGNvbG9yOiI6ICIiLAorICAgICJVVEYtOCAocmVjb21tZW5kZWQpIjogIiIsCisgICAgImN5cmlsbGljIChJU08tODg1OS01KSI6ICIiLAorICAgICJjeXJpbGxpYyAoS09JOC1SKSI6ICIiLAorICAgICJjeXJpbGxpYyAoV0lORE9XUy0xMjUxKSI6ICIiLAorICAgICJ3ZXN0ZXJuIChJU08tODg1OS0xKSI6ICIiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2x0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMTg5MDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvbHQuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9sdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9sdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODNkNWQzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL2x2LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHYiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0Y2VsdCIsCisgICAgIk9LIjogIkxhYmkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9uYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9uYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTM1N2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL25iLmpzCkBAIC0wLDAgKzEsMjQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWx0ZXJuYXRlIHN0eWxlLXNoZWV0OiI6ICJBbHRlcm5hdGl2dCBzdGlsc2V0dDoiLAorICAgICJCYWNrZ3JvdW5kIGNvbG9yOiI6ICJCYWtncnVubnNmYXJnZToiLAorICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAiQ2hhcmFjdGVyIHNldDoiOiAiVGVnbnNldHQiLAorICAgICJET0NUWVBFOiI6ICJET0NUWVBFOiIsCisgICAgIkRlc2NyaXB0aW9uOiI6ICJCZXNrcml2ZWxzZSIsCisgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAiRWdlbnNrYXBlciBmb3IgZG9rdW1lbnQiLAorICAgICJEb2N1bWVudCB0aXRsZToiOiAiVGl0dGVsIHDDpSBkb2t1bWVudDoiLAorICAgICJLZXl3b3JkczoiOiAiTsO4a2tlbG9yZCIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUHJpbWFyeSBzdHlsZS1zaGVldDoiOiAiU3RpbHNldHQ6IiwKKyAgICAiVGV4dCBjb2xvcjoiOiAiVGVrc3RmYXJnZToiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9ubC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmIxMzcwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL25sLmpzCkBAIC0wLDAgKzEsMjIgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWx0ZXJuYXRlIHN0eWxlLXNoZWV0OiI6ICJXaXNzZWxlbiB2YW4gc3R5bGUtc2hlZXQ6IiwKKyAgICAiQmFja2dyb3VuZCBjb2xvcjoiOiAiQWNodGVyZ3JvbmRrbGV1cjoiLAorICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAiRE9DVFlQRToiOiAiRE9DVFlQRToiLAorICAgICJEZXNjcmlwdGlvbjoiOiAiQmVzY2hyaWp2aW5nOiIsCisgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAiRG9jdW1lbnRlaWdlbnNjaGFwcGVuIiwKKyAgICAiRG9jdW1lbnQgdGl0bGU6IjogIkRvY3VtZW50dGl0ZWw6IiwKKyAgICAiT0siOiAiT0siLAorICAgICJQcmltYXJ5IHN0eWxlLXNoZWV0OiI6ICJQcmltYWlyZSBzdHlsZS1zaGVldDoiLAorICAgICJUZXh0IGNvbG9yOiI6ICJUZWtzdGtsZXVyOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL3BsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL3BsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNGJlMjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvcGwuanMKQEAgLTAsMCArMSwyNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbHRlcm5hdGUgc3R5bGUtc2hlZXQ6IjogIkFsdGVybmF0eXdueSBhcmt1c3ogc3R5bMOzdzoiLAorICAgICJCYWNrZ3JvdW5kIGNvbG9yOiI6ICJLb2xvciB0xYJhOiIsCisgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICJDaGFyYWN0ZXIgc2V0OiI6ICJaZXN0YXcgem5ha8OzdyIsCisgICAgIkRPQ1RZUEU6IjogIkRPQ1RZUEU6IiwKKyAgICAiRGVzY3JpcHRpb246IjogIk9waXMiLAorICAgICJEb2N1bWVudCBwcm9wZXJ0aWVzIjogIlfFgmHFm2Npd2/Fm2NpIGRva3VtZW50dSIsCisgICAgIkRvY3VtZW50IHRpdGxlOiI6ICJUeXR1xYIgZG9rdW1lbnR1OiIsCisgICAgIktleXdvcmRzOiI6ICJTxYJvd2Ega2x1Y3pvd2UiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlByaW1hcnkgc3R5bGUtc2hlZXQ6IjogIkFya3VzeiBzdHlsw7N3OiIsCisgICAgIlRleHQgY29sb3I6IjogIktvbG9yIHRla3N0dToiLAorICAgICJVVEYtOCAocmVjb21tZW5kZWQpIjogIlVURi04ICh6YWxlY2FueSkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9wdF9ici5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9wdF9ici5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmMwMzBhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMzIgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWx0ZXJuYXRlIHN0eWxlLXNoZWV0OiI6ICJFc3RpbG8gYWx0ZXJuYXRpdm86IiwKKyAgICAiQmFja2dyb3VuZCBjb2xvcjoiOiAiQ8O0ciBkZSBGdW5kbzoiLAorICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICJDaGFyYWN0ZXIgc2V0OiI6ICJDb25qdW50byBkZSBDYXJhY3RlcmVzOiIsCisgICAgIkRPQ1RZUEU6IjogIkRPQ1RZUEU6IiwKKyAgICAiRGVzY3JpcHRpb246IjogIkRlc2NyacOnw6NvOiIsCisgICAgIkRvY3VtZW50IHByb3BlcnRpZXMiOiAiUHJvcHJpZWRhZGVzIGRvIERvY3VtZW50byIsCisgICAgIkRvY3VtZW50IHRpdGxlOiI6ICJUw610dWxvIGRvIERvY3VtZW50bzoiLAorICAgICJLZXl3b3JkczoiOiAiUGFsYXZyYXMgY2hhdmU6IiwKKyAgICAiT0siOiAiT0siLAorICAgICJQcmltYXJ5IHN0eWxlLXNoZWV0OiI6ICJFc3RpbG8gUHJpbcOhcmlvOiIsCisgICAgIlRleHQgY29sb3I6IjogIkPDtHIgZG8gVGV4dG86IiwKKyAgICAiVVRGLTggKHJlY29tbWVuZGVkKSI6ICJVVEYtOCAocmVjb21lbmRhZG8pIiwKKyAgICAiY3lyaWxsaWMgKElTTy04ODU5LTUpIjogIkNpcsOtbGljbyAoSVNPLTg4NTktNSkiLAorICAgICJjeXJpbGxpYyAoS09JOC1SKSI6ICJDaXLDrWxpY28gKEtPSTgtUikiLAorICAgICJjeXJpbGxpYyAoV0lORE9XUy0xMjUxKSI6ICJDw61yaWxpY28gKFdJTkRPV1MtMTI1MSkiLAorICAgICJ3ZXN0ZXJuIChJU08tODg1OS0xKSI6ICJPY2lkZW50YWwgKElTTy04ODU5LTEpIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiVGVzdCBvZiBGdWxsUGFnZSBwbHVnaW4iOiAiVGVzdGUgZG8gUGx1Z2luIEZ1bGxQYWdlIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL3JvLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL3JvLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZmQ0YzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvcm8uanMKQEAgLTAsMCArMSwyMiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJybyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbHRlcm5hdGUgc3R5bGUtc2hlZXQ6IjogIlRlbXBsYXRlIENTUyBhbHRlcm5hdGl2OiIsCisgICAgIkJhY2tncm91bmQgY29sb3I6IjogIkN1bG9hcmUgZGUgZnVuZGFsOiIsCisgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiLAorICAgICJET0NUWVBFOiI6ICJET0NUWVBFOiIsCisgICAgIkRlc2NyaXB0aW9uOiI6ICJEZXNjcmllcmUiLAorICAgICJEb2N1bWVudCBwcm9wZXJ0aWVzIjogIlByb3ByaWV0xIPFo2lsZSBkb2N1bWVudHVsdWkiLAorICAgICJEb2N1bWVudCB0aXRsZToiOiAiVGl0bHVsIGRvY3VtZW50dWx1aToiLAorICAgICJPSyI6ICJBY2NlcHTEgyIsCisgICAgIlByaW1hcnkgc3R5bGUtc2hlZXQ6IjogIlRlbXBsYXRlIENTUyBwcmluY2lwYWw6IiwKKyAgICAiVGV4dCBjb2xvcjoiOiAiQ3Vsb2FyZSB0ZXh0OiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL3J1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YjUxYmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvcnUuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIiwKKyAgICAiRGVzY3JpcHRpb246IjogItCe0L/QuNGB0LDQvdC40LUiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL3NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL3NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZTc2ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvc2guanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUG9uacWhdGkiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL3NpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL3NpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NzQ4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvc2kuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUHJla2xpxI1pIiwKKyAgICAiT0siOiAiViByZWR1IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvc3IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvc3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlZTZmNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9zci5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvc3YuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ1NWYxOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy9zdi5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInN2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICJEZXNjcmlwdGlvbjoiOiAiQmVza3Jpdm5pbmciLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL3RoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL3RoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYTljOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvdGguanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0aCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwKKyAgICAiT0siOiAi4LiV4LiB4Lil4LiHIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvdHIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL2xhbmcvdHIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJjYzIxOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy90ci5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLEsHB0YWwiLAorICAgICJEZXNjcmlwdGlvbjoiOiAiVGFuxLFtIiwKKyAgICAiT0siOiAiVGFtYW0iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy92bi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvRnVsbFBhZ2UvbGFuZy92bi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDgyZTAyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9sYW5nL3ZuLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidm4iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkjhu6d5IiwKKyAgICAiT0siOiAixJDhu5NuZyDDvSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9wb3B1cHMvZG9jcHJvcC5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9GdWxsUGFnZS9wb3B1cHMvZG9jcHJvcC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMTMxZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0Z1bGxQYWdlL3BvcHVwcy9kb2Nwcm9wLmh0bWwKQEAgLTAsMCArMSwxNDIgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+RG9jdW1lbnQgcHJvcGVydGllczwvdGl0bGU+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi9wb3B1cHMvcG9wdXAuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vLi4vbW9kdWxlcy9Db2xvclBpY2tlci9Db2xvclBpY2tlci5qcyI+PC9zY3JpcHQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi8uLi8uLi9wb3B1cHMvcG9wdXAuY3NzIiAvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorRnVsbFBhZ2UgPSB3aW5kb3cub3BlbmVyLkZ1bGxQYWdlOyAvLyBsb2FkIHRoZSBGdWxsUGFnZSBwbHVnaW4gYW5kIGxhbmcgZmlsZSA7LSkKK3dpbmRvdy5yZXNpemVUbyg0MDAsIDEzMCk7Cit2YXIgYWNjZXB0ZWQgPSB7CisgIGZfZG9jdHlwZSAgICAgICA6IHRydWUsCisgIGZfdGl0bGUgICAgICAgICA6IHRydWUsCisgIGZfYm9keV9iZ2NvbG9yICA6IHRydWUsCisgIGZfYm9keV9mZ2NvbG9yICA6IHRydWUsCisgIGZfYmFzZV9zdHlsZSAgICA6IHRydWUsCisgIGZfYWx0X3N0eWxlICAgICA6IHRydWUsCisgIGZfY2hhcnNldCAgICAgICA6IHRydWUsCisgIGZfa2V5d29yZHMgICAgICA6IHRydWUsCisgIGZfZGVzY3JpcHRpb24gICA6IHRydWUKK307CisKK3ZhciBlZGl0b3IgPSBudWxsOworZnVuY3Rpb24gSW5pdCgpIHsKKyAgX19kbGdfdHJhbnNsYXRlKCdGdWxsUGFnZScpOworICBfX2RsZ19pbml0KCk7CisgIHZhciBwYXJhbXMgPSB3aW5kb3cuZGlhbG9nQXJndW1lbnRzOworICBmb3IgKHZhciBpIGluIHBhcmFtcykgeworICAgIGlmIChpIGluIGFjY2VwdGVkKSB7CisgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpKTsKKyAgICAgIGVsLnZhbHVlID0gcGFyYW1zW2ldOworICAgIH0KKyAgfQorICBlZGl0b3IgPSBwYXJhbXMuZWRpdG9yOworCisgIHZhciBiZ0NvbF9waWNrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JnQ29sX3BpY2snKTsKKyAgdmFyIGZfYm9keV9iZ2NvbG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZfYm9keV9iZ2NvbG9yJyk7CisgIHZhciBiZ0NvbFBpY2tlciA9IG5ldyBYaW5oYS5jb2xvclBpY2tlcih7Y2VsbHNpemU6JzVweCcsY2FsbGJhY2s6ZnVuY3Rpb24oY29sb3Ipe2ZfYm9keV9iZ2NvbG9yLnZhbHVlPWNvbG9yO319KTsKKyAgYmdDb2xfcGljay5vbmNsaWNrID0gZnVuY3Rpb24oKSB7IGJnQ29sUGlja2VyLm9wZW4oJ3RvcCxyaWdodCcsIGZfYm9keV9iZ2NvbG9yICk7IH0KKworICB2YXIgZmdDb2xfcGljayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmZ0NvbF9waWNrJyk7CisgIHZhciBmX2JvZHlfZmdjb2xvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX2JvZHlfZmdjb2xvcicpOworICB2YXIgZmdDb2xQaWNrZXIgPSBuZXcgWGluaGEuY29sb3JQaWNrZXIoe2NlbGxzaXplOic1cHgnLGNhbGxiYWNrOmZ1bmN0aW9uKGNvbG9yKXtmX2JvZHlfZmdjb2xvci52YWx1ZT1jb2xvcjt9fSk7CisgIGZnQ29sX3BpY2sub25jbGljayA9IGZ1bmN0aW9uKCkgeyBmZ0NvbFBpY2tlci5vcGVuKCd0b3AscmlnaHQnLCBmX2JvZHlfZmdjb2xvciApOyB9CisKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfdGl0bGUiKS5mb2N1cygpOworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl90aXRsZSIpLnNlbGVjdCgpOworfQorCitmdW5jdGlvbiBvbk9LKCkgeworICB2YXIgcmVxdWlyZWQgPSB7CisgIH07CisgIGZvciAodmFyIGkgaW4gcmVxdWlyZWQpIHsKKyAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpKTsKKyAgICBpZiAoIWVsLnZhbHVlKSB7CisgICAgICBhbGVydChyZXF1aXJlZFtpXSk7CisgICAgICBlbC5mb2N1cygpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIHZhciBwYXJhbSA9IHt9OworICBmb3IgKHZhciBpIGluIGFjY2VwdGVkKSB7CisgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaSk7CisgICAgcGFyYW1baV0gPSBlbC52YWx1ZTsKKyAgfQorICBfX2RsZ19jbG9zZShwYXJhbSk7CisgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gb25DYW5jZWwoKSB7CisgIF9fZGxnX2Nsb3NlKG51bGwpOworICByZXR1cm4gZmFsc2U7Cit9Cis8L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisuZnIgeyB3aWR0aDogMTFlbTsgZmxvYXQ6IGxlZnQ7IHBhZGRpbmc6IDJweCA1cHg7IHRleHQtYWxpZ246IHJpZ2h0OyB9CisudHh0IHsgd2lkdGg6MjAwcHg7IH0KK2RpdiB7IGNsZWFyOmJvdGg7IH0KKy5waWNrZXIgeyB3aWR0aDozMHB4OyB9Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBjbGFzcz0iZGlhbG9nIiBvbmxvYWQ9IkluaXQoKSI+CisKKzxkaXYgY2xhc3M9InRpdGxlIj5Eb2N1bWVudCBwcm9wZXJ0aWVzPC9kaXY+CisKKzxkaXY+CisgIDxsYWJlbCBjbGFzcz0iZnIiIGZvcj0iZl90aXRsZSI+RG9jdW1lbnQgdGl0bGU6PC9sYWJlbD4KKyAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJmX3RpdGxlIiBjbGFzcz0idHh0IiAvPgorPC9kaXY+Cis8ZGl2PgorICA8bGFiZWwgY2xhc3M9ImZyIiBmb3I9ImZfZG9jdHlwZSI+RE9DVFlQRTo8L2xhYmVsPgorICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImZfZG9jdHlwZSIgY2xhc3M9InR4dCIgLz4KKzwvZGl2PgorPGRpdj4KKyAgPGxhYmVsIGNsYXNzPSJmciIgZm9yPSJmX2tleXdvcmRzIj5LZXl3b3Jkczo8L2xhYmVsPgorCisgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZl9rZXl3b3JkcyIgY2xhc3M9InR4dCIgLz4KKzwvZGl2PgorPGRpdj4KKyAgPGxhYmVsIGNsYXNzPSJmciIgZm9yPSJmX2Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2xhYmVsPgorICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImZfZGVzY3JpcHRpb24iIGNsYXNzPSJ0eHQiIC8+Cis8L2Rpdj4KKzxkaXY+CisgIDxsYWJlbCBjbGFzcz0iZnIiIGZvcj0iZl9jaGFyc2V0Ij5DaGFyYWN0ZXIgc2V0OjwvbGFiZWw+CisgIDxzZWxlY3QgaWQ9ImZfY2hhcnNldCIgY2xhc3M9InR4dCI+CisgICAgPG9wdGlvbiB2YWx1ZT0iIj48L29wdGlvbj4KKyAgICA8b3B0aW9uIHZhbHVlPSJ1dGYtOCI+VVRGLTggKHJlY29tbWVuZGVkKTwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IndpbmRvd3MtMTI1MSI+Y3lyaWxsaWMgKFdJTkRPV1MtMTI1MSk8L29wdGlvbj4KKworICAgIDxvcHRpb24gdmFsdWU9ImtvaTgtciI+Y3lyaWxsaWMgKEtPSTgtUik8L29wdGlvbj4KKyAgICA8b3B0aW9uIHZhbHVlPSJpc28tODg1OS01Ij5jeXJpbGxpYyAoSVNPLTg4NTktNSk8L29wdGlvbj4KKyAgICA8b3B0aW9uIHZhbHVlPSJpc28tODg1OS0xIj53ZXN0ZXJuIChJU08tODg1OS0xKTwvb3B0aW9uPgorICA8L3NlbGVjdD4KKzwvZGl2PgorPGRpdj4KKyAgPGxhYmVsIGNsYXNzPSJmciIgZm9yPSJmX2Jhc2Vfc3R5bGUiPlByaW1hcnkgc3R5bGUtc2hlZXQ6PC9sYWJlbD4KKyAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJmX2Jhc2Vfc3R5bGUiIGNsYXNzPSJ0eHQiIC8+Cis8L2Rpdj4KKzxkaXY+CisgIDxsYWJlbCBjbGFzcz0iZnIiIGZvcj0iZl9hbHRfc3R5bGUiPkFsdGVybmF0ZSBzdHlsZS1zaGVldDo8L2xhYmVsPgorICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImZfYWx0X3N0eWxlIiBjbGFzcz0idHh0IiAvPgorPC9kaXY+Cis8ZGl2PgorICA8bGFiZWwgY2xhc3M9ImZyIiBmb3I9ImZfYm9keV9iZ2NvbG9yIj5CYWNrZ3JvdW5kIGNvbG9yOjwvbGFiZWw+CisgIDxpbnB1dCBuYW1lPSJmX2JvZHlfYmdjb2xvciIgdHlwZT0idGV4dCIgaWQ9ImZfYm9keV9iZ2NvbG9yIiBzaXplPSI3IiAvPgorICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9ImJnQ29sX3BpY2siIGNsYXNzPSJwaWNrZXIiPi4uLjwvYnV0dG9uPgorPC9kaXY+Cis8ZGl2PgorICA8bGFiZWwgY2xhc3M9ImZyIiBmb3I9ImZfYm9keV9mZ2NvbG9yIj5UZXh0IGNvbG9yOjwvbGFiZWw+CisgIDxpbnB1dCBuYW1lPSJmX2JvZHlfZmdjb2xvciIgdHlwZT0idGV4dCIgaWQ9ImZfYm9keV9mZ2NvbG9yIiBzaXplPSI3IiAvPgorICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9ImZnQ29sX3BpY2siIGNsYXNzPSJwaWNrZXIiPi4uLjwvYnV0dG9uPgorPC9kaXY+CisKKzxkaXYgaWQ9ImJ1dHRvbnMiPgorICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbmFtZT0ib2siIG9uY2xpY2s9InJldHVybiBvbk9LKCk7Ij48c3Bhbj5PSzwvc3Bhbj48L2J1dHRvbj4KKworICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbmFtZT0iY2FuY2VsIiBvbmNsaWNrPSJyZXR1cm4gb25DYW5jZWwoKTsiPjxzcGFuPkNhbmNlbDwvc3Bhbj48L2J1dHRvbj4KKzwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9HZW5lcmljUGx1Z2luL0dlbmVyaWNQbHVnaW4uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0dlbmVyaWNQbHVnaW4vR2VuZXJpY1BsdWdpbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjVkZjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9HZW5lcmljUGx1Z2luL0dlbmVyaWNQbHVnaW4uanMKQEAgLTAsMCArMSwxMTcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKKyBHZW5lcmljUGx1Z2luIGZvciBYaW5oYQorIF9fX19fX19fX19fX19fX19fX19fX19fCisgICAgIAorIERlbW9jYXNlIGZvciBwbHVnaW4gZXZlbnQgaGFuZGxlcnMKK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworR2VuZXJpY1BsdWdpbi5fcGx1Z2luSW5mbyA9IHsKKyAgbmFtZSAgICAgICAgICA6ICJHZW5lcmljUGx1Z2luIiwKKyAgdmVyc2lvbiAgICAgICA6ICIxLjAiLAorICBkZXZlbG9wZXIgICAgIDogIlhpbmhhIERldmVsb3BlciBUZWFtIiwKKyAgZGV2ZWxvcGVyX3VybCA6ICJodHRwOi8veGluaGEub3JnIiwKKyAgc3BvbnNvciAgICAgICA6ICIiLAorICBzcG9uc29yX3VybCAgIDogIiIsCisgIGxpY2Vuc2UgICAgICAgOiAiaHRtbEFyZWEiCit9CitmdW5jdGlvbiBHZW5lcmljUGx1Z2luKGVkaXRvcikKK3sKKwl0aGlzLmVkaXRvciA9IGVkaXRvcjsKK30KKworR2VuZXJpY1BsdWdpbi5wcm90b3R5cGUub25HZW5lcmF0ZSA9IGZ1bmN0aW9uICgpCit7CisKK30KK0dlbmVyaWNQbHVnaW4ucHJvdG90eXBlLm9uR2VuZXJhdGVPbmNlID0gZnVuY3Rpb24gKCkKK3sKKworfQorR2VuZXJpY1BsdWdpbi5wcm90b3R5cGUuaW53YXJkSHRtbCA9IGZ1bmN0aW9uKGh0bWwpCit7CisJcmV0dXJuIGh0bWw7Cit9CitHZW5lcmljUGx1Z2luLnByb3RvdHlwZS5vdXR3YXJkSHRtbCA9IGZ1bmN0aW9uKGh0bWwpCit7CisJcmV0dXJuIGh0bWw7Cit9CitHZW5lcmljUGx1Z2luLnByb3RvdHlwZS5vblVwZGF0ZVRvb2xiYXIgPSBmdW5jdGlvbiAoKQoreworCXJldHVybiBmYWxzZTsKK30KKworR2VuZXJpY1BsdWdpbi5wcm90b3R5cGUub25FeGVjQ29tbWFuZCA9IGZ1bmN0aW9uICggY21kSUQsIFVJLCBwYXJhbSApCit7CisJcmV0dXJuIGZhbHNlOworfQorCitHZW5lcmljUGx1Z2luLnByb3RvdHlwZS5vbktleURvd24gPSBmdW5jdGlvbiAoIGV2ZW50ICkKK3sKKyAgcmV0dXJuIGZhbHNlOworfQorCitHZW5lcmljUGx1Z2luLnByb3RvdHlwZS5vbktleVByZXNzID0gZnVuY3Rpb24gKCBldmVudCApCit7CisJcmV0dXJuIGZhbHNlOworfQorCitHZW5lcmljUGx1Z2luLnByb3RvdHlwZS5vbk9uU2hvcnRDdXQgPSBmdW5jdGlvbiAoIGV2ZW50ICwgc2hvcnRDdXQgKQoreworICAvLyBXaGVyZSBzaG9ydEN1dCBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIsIGVnIGlmIHlvdSBwcmVzcyBjdHJsLWEsIHRoZW4KKyAgLy8gIHNob3J0Q3V0ID09ICdhJworICByZXR1cm4gZmFsc2U7Cit9CisKK0dlbmVyaWNQbHVnaW4ucHJvdG90eXBlLm9uS2V5VXAgPSBmdW5jdGlvbiAoIGV2ZW50ICkKK3sKKyAgcmV0dXJuIGZhbHNlOworfQorCitHZW5lcmljUGx1Z2luLnByb3RvdHlwZS5vbk1vdXNlRG93biA9IGZ1bmN0aW9uICggZXZlbnQgKQoreworCXJldHVybiBmYWxzZTsKK30KKworR2VuZXJpY1BsdWdpbi5wcm90b3R5cGUub25CZWZvcmVTdWJtaXQgPSBmdW5jdGlvbiAoKQoreworCXJldHVybiBmYWxzZTsKK30KKworR2VuZXJpY1BsdWdpbi5wcm90b3R5cGUub25CZWZvcmVVbmxvYWQgPSBmdW5jdGlvbiAoKQoreworCXJldHVybiBmYWxzZTsKK30KKworR2VuZXJpY1BsdWdpbi5wcm90b3R5cGUub25CZWZvcmVSZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CitHZW5lcmljUGx1Z2luLnByb3RvdHlwZS5vblJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KQoreworCXJldHVybiBmYWxzZTsKK30KKy8qKgorICogCisgKiBAcGFyYW0ge1N0cmluZ30gYWN0aW9uIG9uZSBvZiAnYWRkJywgJ3JlbW92ZScsICdoaWRlJywgJ3Nob3cnLCAnbXVsdGlfaGlkZScsICdtdWx0aV9zaG93JworICogQHBhcmFtIHtET01Ob2RlfEFycmF5fSBwYW5lbCBlaXRoZXIgdGhlIHBhbmVsIGl0c2VsZiBvciBhbiBhcnJheSBsaWtlIFsnbGVmdCcsJ3JpZ2h0JywndG9wJywnYm90dG9tJ10KKyAqLworR2VuZXJpY1BsdWdpbi5wcm90b3R5cGUub25QYW5lbENoYW5nZSA9IGZ1bmN0aW9uIChhY3Rpb24sIHBhbmVsKQoreworCXJldHVybiBmYWxzZTsKK30KKy8qKgorICogCisgKiBAcGFyYW0ge1N0cmluZ30gbW9kZSBlaXRoZXIgJ3RleHRtb2RlJyBvciAnd3lzaXd5ZycKKyAqLworR2VuZXJpY1BsdWdpbi5wcm90b3R5cGUub25Nb2RlID0gZnVuY3Rpb24gKG1vZGUpCit7CisJcmV0dXJuIGZhbHNlOworfQorLyoqCisgKiAKKyAqIEBwYXJhbSB7U3RyaW5nfSBtb2RlIGVpdGhlciAndGV4dG1vZGUnIG9yICd3eXNpd3lnJworICovCitHZW5lcmljUGx1Z2luLnByb3RvdHlwZS5vbkJlZm9yZU1vZGUgPSBmdW5jdGlvbiAobW9kZSkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0dldEh0bWwvR2V0SHRtbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvR2V0SHRtbC9HZXRIdG1sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MThmODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0dldEh0bWwvR2V0SHRtbC5qcwpAQCAtMCwwICsxLDE3IEBACisvKioKKyBJbXBsZW1lbnRlZCBub3cgYXMgR2V0SHRtbEltcGxlbWVudGF0aW9uIHBsdWdpbiBpbiBtb2R1bGVzL0dldEh0bWwvVHJhbnNmb3JtSW5uZXJIVE1MLmpzCisgICovCisgIAorZnVuY3Rpb24gR2V0SHRtbChlZGl0b3IpIHsKKyAgICBlZGl0b3IuY29uZmlnLmdldEh0bWxNZXRob2QgPSAiVHJhbnNmb3JtSW5uZXJIVE1MIjsKK30KKworR2V0SHRtbC5fcGx1Z2luSW5mbyA9IHsKKwluYW1lICAgICAgICAgIDogIkdldEh0bWwiLAorCXZlcnNpb24gICAgICAgOiAiMS4wIiwKKwlkZXZlbG9wZXIgICAgIDogIk5lbHNvbiBCcmlnaHQiLAorCWRldmVsb3Blcl91cmwgOiAiaHR0cDovL3d3dy5icmlnaHR3b3Jrd2ViLmNvbS8iLAorCXNwb25zb3IgICAgICAgOiAiIiwKKyAgICBzcG9uc29yX3VybCAgIDogIiIsCisJbGljZW5zZSAgICAgICA6ICJodG1sQXJlYSIKK307CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL0hvcml6b250YWxSdWxlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9Ib3Jpem9udGFsUnVsZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTljYTA4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9Ib3Jpem9udGFsUnVsZS5qcwpAQCAtMCwwICsxLDE2MyBAQAorCitIb3Jpem9udGFsUnVsZS5fcGx1Z2luSW5mbyA9IHsKKwluYW1lICAgICAgICAgIDogIkhvcml6b250YWxSdWxlIiwKKwl2ZXJzaW9uICAgICAgIDogIjEuMCIsCisJZGV2ZWxvcGVyICAgICA6ICJOZWxzb24gQnJpZ2h0IiwKKwlkZXZlbG9wZXJfdXJsIDogImh0dHA6Ly93d3cuYnJpZ2h0d29ya3dlYi5jb20vIiwKKwljX293bmVyICAgICAgIDogIk5lbHNvbiBCcmlnaHQiLAorCXNwb25zb3IgICAgICAgOiAiQnJpZ2h0V29yaywgSW5jLiIsCisJc3BvbnNvcl91cmwgICA6ICJodHRwOi8vd3d3LmJyaWdodHdvcmt3ZWIuY29tLyIsCisJbGljZW5zZSAgICAgICA6ICJodG1sQXJlYSIKK307CisKK2Z1bmN0aW9uIEhvcml6b250YWxSdWxlKGVkaXRvcikgeworICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yOworCisgICAgdmFyIGNmZyA9IGVkaXRvci5jb25maWc7CisJdmFyIHRvb2xiYXIgPSBjZmcudG9vbGJhcjsKKwl2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIAorCWNmZy5yZWdpc3RlckJ1dHRvbih7CisJCWlkICAgICAgIDogImVkaXRob3Jpem9udGFscnVsZSIsCisJCXRvb2x0aXAgIDogdGhpcy5fbGMoIkluc2VydC9lZGl0IGhvcml6b250YWwgcnVsZSIpLAorCS8vCWltYWdlICAgIDogZWRpdG9yLmltZ1VSTCgiZWRfaHIuZ2lmIiwgIkhvcml6b250YWxSdWxlIiksCisJCWltYWdlICAgIDogW19lZGl0b3JfdXJsICsgImltYWdlcy9lZF9idXR0b25zX21haW4uZ2lmIiw2LDBdLAorCQl0ZXh0TW9kZSA6IGZhbHNlLAorCQlhY3Rpb24gICA6IGZ1bmN0aW9uKGVkaXRvcikgeworCQkJCQkJc2VsZi5idXR0b25QcmVzcyhlZGl0b3IpOworCQkJCSAgIH0KKwl9KTsKKworCWNmZy5hZGRUb29sYmFyRWxlbWVudCgiZWRpdGhvcml6b250YWxydWxlIiwiaW5zZXJ0aG9yaXpvbnRhbHJ1bGUiLDApOworfQorCitIb3Jpem9udGFsUnVsZS5wcm90b3R5cGUuX2xjID0gZnVuY3Rpb24oc3RyaW5nKSB7CisgICAgcmV0dXJuICBYaW5oYS5fbGMoc3RyaW5nLCAnSG9yaXpvbnRhbFJ1bGUnKTsKK307CisKK0hvcml6b250YWxSdWxlLnByb3RvdHlwZS5idXR0b25QcmVzcyA9IGZ1bmN0aW9uKGVkaXRvcikgeworCXRoaXMuZWRpdG9yID0gZWRpdG9yOworCXRoaXMuX2VkaXRIb3Jpem9udGFsUnVsZSgpOworfTsKKworSG9yaXpvbnRhbFJ1bGUucHJvdG90eXBlLl9lZGl0SG9yaXpvbnRhbFJ1bGUgPSBmdW5jdGlvbihydWxlKSB7CisJZWRpdG9yID0gdGhpcy5lZGl0b3I7CisJdmFyIHNlbCA9IGVkaXRvci5fZ2V0U2VsZWN0aW9uKCk7CisJdmFyIHJhbmdlID0gZWRpdG9yLl9jcmVhdGVSYW5nZShzZWwpOworCXZhciBvdXRwYXJhbSA9IG51bGw7CisJaWYgKHR5cGVvZiBydWxlID09ICJ1bmRlZmluZWQiKSB7CisJCXJ1bGUgPSBlZGl0b3IuZ2V0UGFyZW50RWxlbWVudCgpOworCQlpZiAocnVsZSAmJiAhL15ociQvaS50ZXN0KHJ1bGUudGFnTmFtZSkpCisJCQlydWxlID0gbnVsbDsKKwl9CisJaWYgKHJ1bGUpIHsKKwkJdmFyIGZfd2lkdGhWYWx1ZSAgICA9IHJ1bGUuc3R5bGUud2lkdGggfHwgcnVsZS53aWR0aDsKKwkJb3V0cGFyYW0gPSB7CisJCQlmX3NpemUgICAgICA6IHBhcnNlSW50KHJ1bGUuc3R5bGUuaGVpZ2h0LDEwKSB8fCBydWxlLnNpemUsCisJCQlmX3dpZHRoVW5pdCA6ICgvKCV8cHgpJC8udGVzdChmX3dpZHRoVmFsdWUpKSA/IFJlZ0V4cC4kMSA6ICdweCcsCisJCQlmX3dpZHRoICAgICA6IHBhcnNlSW50IChmX3dpZHRoVmFsdWUsMTApLAorCQkJZl9jb2xvciAgICAgOiBYaW5oYS5fY29sb3JUb1JnYihydWxlLnN0eWxlLmJhY2tncm91bmRDb2xvcikgfHwgcnVsZS5jb2xvciwKKwkJCWZfYWxpZ24gICAgIDogcnVsZS5zdHlsZS50ZXh0QWxpZ24gfHwgcnVsZS5hbGlnbiwKKwkJCWZfbm9zaGFkZSAgIDogKHBhcnNlSW50KHJ1bGUuc3R5bGUuYm9yZGVyV2lkdGgsMTApID09IDApIHx8IHJ1bGUubm9TaGFkZQorCQl9OworCX0KKwllZGl0b3IuX3BvcHVwRGlhbG9nKCJwbHVnaW46Ly9Ib3Jpem9udGFsUnVsZS9lZGl0X2hvcml6b250YWxfcnVsZS5odG1sIiwgZnVuY3Rpb24ocGFyYW0pIHsKKwkJaWYgKCFwYXJhbSkgewkvLyB1c2VyIHByZXNzZWQgQ2FuY2VsCisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJdmFyIGhyID0gcnVsZTsKKwkJaWYgKCFocikgeworCQkJdmFyIGhydWxlID0gZWRpdG9yLl9kb2MuY3JlYXRlRWxlbWVudCgiaHIiKTsKKwkJCWZvciAodmFyIGZpZWxkIGluIHBhcmFtKSB7CisJCQkJdmFyIHZhbHVlID0gcGFyYW1bZmllbGRdOworCQkJCWlmKHZhbHVlID09ICIiKSBjb250aW51ZTsKKwkJCQlzd2l0Y2ggKGZpZWxkKSB7IAorCQkJCWNhc2UgImZfd2lkdGgiIDoKKwkJCQkJaWYocGFyYW1bImZfd2lkdGhVbml0Il09PSIlIikKKwkJCQkJeworCQkJCQkJaHJ1bGUuc3R5bGUud2lkdGggPSB2YWx1ZSArICIlIjsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCWhydWxlLnN0eWxlLndpZHRoID0gdmFsdWUgKyAicHgiOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJY2FzZSAiZl9zaXplIiA6CisJCQkJCWhydWxlLnN0eWxlLmhlaWdodCA9IHZhbHVlICsgInB4IjsgCisJCQkJYnJlYWs7CisJCQkJY2FzZSAiZl9hbGlnbiIgOiAvLyBHZWNrbyBuZWVkcyB0aGUgbWFyZ2lucyBmb3IgYWxpZ25tZW50CisJCQkJCWhydWxlLnN0eWxlLnRleHRBbGlnbiA9IHZhbHVlOworCQkJCQlzd2l0Y2ggKHZhbHVlKSB7CisJCQkJCQljYXNlICdsZWZ0JzoKKwkJCQkJCQlocnVsZS5zdHlsZS5tYXJnaW5MZWZ0ID0gIjAiOworCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlICdyaWdodCc6CisJCQkJCQkJaHJ1bGUuc3R5bGUubWFyZ2luUmlnaHQgPSAiMCI7CisJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgJ2NlbnRlcic6CisJCQkJCQkJaHJ1bGUuc3R5bGUubWFyZ2luTGVmdCA9ICJhdXRvIjsKKwkJCQkJCQlocnVsZS5zdHlsZS5tYXJnaW5SaWdodCA9ICJhdXRvIjsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJY2FzZSAiZl9jb2xvciIgOgorCQkJCQlocnVsZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB2YWx1ZTsgCisJCQkJYnJlYWs7CisJCQkJY2FzZSAiZl9ub3NoYWRlIiA6CisJCQkJCWhydWxlLnN0eWxlLmJvcmRlciA9ICIwIjsgCisJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKCBYaW5oYS5pc19nZWNrbyApCisJCQl7ICAgLy8gSWYgSSB1c2UgZWRpdG9yLmluc2VydE5vZGVBdFNlbGVjdGlvbihocnVsZSkgaGVyZSBJIGdldCBnZXQgYSA8L2hyPiBjbG9zaW5nIHRhZworCQkJCWVkaXRvci5leGVjQ29tbWFuZCgiaW5zZXJ0aHRtbCIsZmFsc2UsWGluaGEuZ2V0T3V0ZXJIVE1MKGhydWxlKSk7CisJCQl9CisJCQllbHNlIGVkaXRvci5pbnNlcnROb2RlQXRTZWxlY3Rpb24oaHJ1bGUpOworCQkJCisJCX0gZWxzZSB7CisJCQlmb3IgKHZhciBmaWVsZCBpbiBwYXJhbSkgeworCQkJICB2YXIgdmFsdWUgPSBwYXJhbVtmaWVsZF07CisJCQkgIHN3aXRjaCAoZmllbGQpIHsKKwkJCQljYXNlICJmX3dpZHRoIiA6CisJCQkJCWlmKHBhcmFtWyJmX3dpZHRoVW5pdCJdPT0iJSIpCisJCQkJCXsKKwkJCQkJCWhyLnN0eWxlLndpZHRoID0gdmFsdWUgKyAiJSI7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQloci5zdHlsZS53aWR0aCA9IHZhbHVlICsgInB4IjsKKwkJCQkJfQorCQkJCWJyZWFrOworCQkJCWNhc2UgImZfc2l6ZSIgOgorCQkJCQloci5zdHlsZS5oZWlnaHQgPSB2YWx1ZSArICJweCI7IAorCQkJCWJyZWFrOworCQkJCWNhc2UgImZfYWxpZ24iIDoKKwkJCQkJaHIuc3R5bGUudGV4dEFsaWduID0gdmFsdWU7CisJCQkJCXN3aXRjaCAodmFsdWUpIHsKKwkJCQkJCWNhc2UgJ2xlZnQnOgorCQkJCQkJCWhyLnN0eWxlLm1hcmdpbkxlZnQgPSAiMCI7CisJCQkJCQkJaHIuc3R5bGUubWFyZ2luUmlnaHQgPSBudWxsOworCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlICdyaWdodCc6CisJCQkJCQkJaHIuc3R5bGUubWFyZ2luUmlnaHQgPSAiMCI7CisJCQkJCQkJaHIuc3R5bGUubWFyZ2luTGVmdCA9IG51bGw7CisJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgJ2NlbnRlcic6CisJCQkJCQkJaHIuc3R5bGUubWFyZ2luTGVmdCA9ICJhdXRvIjsKKwkJCQkJCQloci5zdHlsZS5tYXJnaW5SaWdodCA9ICJhdXRvIjsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJY2FzZSAiZl9jb2xvciIgOgorCQkJCQloci5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB2YWx1ZTsgCisJCQkJYnJlYWs7CisJCQkJY2FzZSAiZl9ub3NoYWRlIiA6CisJCQkJCQorCQkJCWJyZWFrOworCQkJICB9CisJCQkgIGhyLnN0eWxlLmJvcmRlciA9IChwYXJhbVsiZl9ub3NoYWRlIl0pID8gIjAiIDogbnVsbDsgCisJCQl9CisJCX0KKwl9LCBvdXRwYXJhbSk7Cit9OworCQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9iNS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9iNS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTdjMThkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2I1LmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiYjUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogIuawtOW5s+e3miIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NDhhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvY2guanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi5Y+W5raIIiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogIuawtOW5s+e3miIsCisgICAgIk9LIjogIuWlvSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2N6LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2N6LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNTcyMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvY3ouanMKQEAgLTAsMCArMSwyNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjeiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgIkNlbnRlciI6ICJOYSBzdMWZZWQiLAorICAgICJDb2xvcjoiOiAiQmFydmEiLAorICAgICJIZWlnaHQ6IjogIlbDvcWha2EiLAorICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiVm9kb3Jvdm7DoSDEjcOhcmEiLAorICAgICJMYXlvdXQiOiAiUm96bG/FvmVuw60iLAorICAgICJMZWZ0IjogIlZsZXZvIiwKKyAgICAiT0siOiAiT0siLAorICAgICJSaWdodCI6ICJWcHJhdm8iLAorICAgICJXaWR0aDoiOiAixaDDrcWZa2EiLAorICAgICJwZXJjZW50IjogInByb2NlbnQiLAorICAgICJwaXhlbHMiOiAicGl4ZWzFryIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2RhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNjU4NjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvZGEuanMKQEAgLTAsMCArMSwyNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGlnbm1lbnQ6IjogIkp1c3RlcmluZzoiLAorICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICJDZW50ZXIiOiAiQ2VudHJlciIsCisgICAgIkNvbG9yOiI6ICJGYXJ2ZSIsCisgICAgIkhlaWdodDoiOiAiSMO4amRlOiIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICJWYW5kcmV0IHN0cmVnIiwKKyAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgIkxlZnQiOiAiVmVuc3RyZSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUmlnaHQiOiAiSMO4anJlIiwKKyAgICAiV2lkdGg6IjogIkJyZWRkZToiLAorICAgICJwZXJjZW50IjogInByb2NlbnQiLAorICAgICJwaXhlbHMiOiAicGl4ZWwiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTMzMGQzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsMzIgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxpZ25tZW50OiI6ICJBdXNyaWNodHVuZzoiLAorICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAiQ2VudGVyIjogInplbnRyaWVydCIsCisgICAgIkNvbG9yOiI6ICJGYXJiZSIsCisgICAgIkhlaWdodDoiOiAiSMO2aGU6IiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogIkhvcml6b250YWxlIExpbmllIiwKKyAgICAiSW5zZXJ0L2VkaXQgaG9yaXpvbnRhbCBydWxlIjogImhvcml6b250YWxlIExpbmllIGVpbmbDvGdlbi9iZWFyYmVpdGVuIiwKKyAgICAiTGF5b3V0IjogIkdlc3RhbHR1bmciLAorICAgICJMZWZ0IjogImxpbmtzIiwKKyAgICAiTm8gc2hhZGluZyI6ICJrZWluZSBTY2hhdHRpZXJ1bmciLAorICAgICJPSyI6ICJPSyIsCisgICAgIlJpZ2h0IjogInJlY2h0cyIsCisgICAgIlN0eWxlIjogIlN0aWwiLAorICAgICJXaWR0aDoiOiAiQnJlaXRlOiIsCisgICAgInBlcmNlbnQiOiAiUHJvemVudCIsCisgICAgInBpeGVscyI6ICJQaXhlbCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIk5vdGU6IjogIkFubWVya3VuZyIsCisgICAgICAgICJUbyBzZWxlY3QgYW4gZXhpc3RpbmcgaG9yaXpvbnRhbCBydWxlLCBhIGRvdWJsZS1jbGljayBtYXkgYmUgbmVlZGVkLiI6ICJVbSBlaW5lIGhvcml6b250YWxlIExpbmllIGF1c3p1d8OkaGxlbiBrYW5uIGVpbiBEb3BwZWxrbGljayBlcmZvcmRlcmxpY2ggc2Vpbi4iCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvZWUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvZWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNlODI0NgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9lZS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJMb29idSIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICJIb3Jpc29udGFhbGpvb24iLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2VsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2VsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMTA2YTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvZWwuanMKQEAgLTAsMCArMSwyNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciLAorICAgICJDZW50ZXIiOiAizprOrc69z4TPgc6/IiwKKyAgICAiQ29sb3I6IjogIs6nz4HPjs68zrEiLAorICAgICJIZWlnaHQ6IjogIs6Oz4jOv8+CIiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogIs6fz4HOuc62z4zOvc+EzrnOsSDOk8+BzrHOvM68zq4iLAorICAgICJMYXlvdXQiOiAizpTOuc6sz4TOsc6+zrciLAorICAgICJMZWZ0IjogIs6Rz4HOuc+Dz4TOtc+BzqwiLAorICAgICJPSyI6ICLOlc69z4TOrM6+zrXOuSIsCisgICAgIlJpZ2h0IjogIs6UzrXOvs65zqwiLAorICAgICJXaWR0aDoiOiAizqDOu86sz4TOv8+CIiwKKyAgICAicGVyY2VudCI6ICLPhM6/zrnPgiDOtc66zrHPhM+Mzr0iLAorICAgICJwaXhlbHMiOiAicGl4ZWxzIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhlZjZlYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9lcy5qcwpAQCAtMCwwICsxLDI1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVzIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsaWdubWVudDoiOiAiQWxpbmVhY2nDs246IiwKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiQ2VudGVyIjogIkNlbnRyYXIiLAorICAgICJDb2xvcjoiOiAiQ29sb3I6IiwKKyAgICAiSGVpZ2h0OiI6ICJBbHRvOiIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICJSZWdsYSBob3Jpem9udGFsIiwKKyAgICAiTGF5b3V0IjogIkRpc3RyaWJ1Y2nDs24iLAorICAgICJMZWZ0IjogIkl6cXVpZXJkYSIsCisgICAgIk9LIjogIkFjZXB0YXIiLAorICAgICJSaWdodCI6ICJEZXJlY2hhIiwKKyAgICAiV2lkdGg6IjogIkFuY2hvOiIsCisgICAgInBlcmNlbnQiOiAicG9yIGNpZW50byIsCisgICAgInBpeGVscyI6ICJww614ZWxlcyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2V1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2V1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNTUxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvZXUuanMKQEAgLTAsMCArMSwyMCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJldSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGlnbm1lbnQ6IjogIkxlcnJva2F0emVhOiIsCisgICAgIkNhbmNlbCI6ICJVdHppIiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogIk1hcnJhIGhvcml6b250YWxhIiwKKyAgICAiTGF5b3V0IjogIkRpc2VpbnVhIiwKKyAgICAiTGVmdCI6ICJFemtlcnJldGFyYSIsCisgICAgIk9LIjogIkFkb3MiLAorICAgICJSaWdodCI6ICJFc2t1aW5ldGFyYSIsCisgICAgIldpZHRoOiI6ICJaYWJhbGVyYToiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9mYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9mYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzIxNjZkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2ZhLmpzCkBAIC0wLDAgKzEsMjAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxpZ25tZW50OiI6ICLYqtix2KfYsiDYqNmG2K/bjCIsCisgICAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiLAorICAgICJIb3Jpem9udGFsIFJ1bGUiOiAi2K7YtyDYp9mB2YLbjCIsCisgICAgIkxheW91dCI6ICLZhNin24zZhyIsCisgICAgIkxlZnQiOiAi2obZviIsCisgICAgIk9LIjogItio2YTZhyIsCisgICAgIlJpZ2h0IjogItix2KfYs9iqIiwKKyAgICAiV2lkdGg6IjogIti32YjZhCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2ZpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2ZpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYjRjOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvZmkuanMKQEAgLTAsMCArMSwyMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUGVydXV0YSIsCisgICAgIkNlbnRlciI6ICJLZXNrZWxsZSIsCisgICAgIkNvbG9yOiI6ICJWw6RyaSIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICJWYWFrYXZpaXZhIiwKKyAgICAiTGF5b3V0IjogIlNvbW1pdHRlbHUiLAorICAgICJMZWZ0IjogIlZhc2VuIiwKKyAgICAiT0siOiAiSHl2w6Rrc3kiLAorICAgICJSaWdodCI6ICJPaWtlYSIsCisgICAgIldpZHRoOiI6ICJMZXZleXMiLAorICAgICJwZXJjZW50IjogInByb3NlbnR0aWEiLAorICAgICJwaXhlbHMiOiAicGlrc2VsacOkIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvZnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM5MTk5OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9mci5qcwpAQCAtMCwwICsxLDMyIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsaWdubWVudDoiOiAiQWxpZ25lbWVudCIsCisgICAgIkNhbmNlbCI6ICJBbm51bGVyIiwKKyAgICAiQ2VudGVyIjogIkNlbnRyZSIsCisgICAgIkNvbG9yOiI6ICJDb3VsZXVyIiwKKyAgICAiSGVpZ2h0OiI6ICJIYXV0ZXVyIiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogIlLDqGdsZSBob3Jpem9udGFsZSIsCisgICAgIkluc2VydC9lZGl0IGhvcml6b250YWwgcnVsZSI6ICJJbnPDqXJlciB1bmUgcsOoZ2xlIGhvcml6b250YWxlIiwKKyAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgIkxlZnQiOiAiR2F1Y2hlIiwKKyAgICAiTm8gc2hhZGluZyI6ICJQYXMgZCdvbWJyZSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUmlnaHQiOiAiRHJvaXRlIiwKKyAgICAiU3R5bGUiOiAiU3R5bGUiLAorICAgICJXaWR0aDoiOiAiTGFyZ2V1ciIsCisgICAgInBlcmNlbnQiOiAicG91cmNlbnQiLAorICAgICJwaXhlbHMiOiAicGl4ZWxzIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiTm90ZToiOiAiTm90ZSIsCisgICAgICAgICJUbyBzZWxlY3QgYW4gZXhpc3RpbmcgaG9yaXpvbnRhbCBydWxlLCBhIGRvdWJsZS1jbGljayBtYXkgYmUgbmVlZGVkLiI6ICJQb3VyIHPDqWxlY3Rpb25uZXIgdW5lIHLDqGdsZSBob3Jpem9udGFsZSwgdW4gZG91YmxlLWNsaWMgcGV1dCDDqnRyZSBuw6ljZXNzYWlyZS4iCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvaGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvaGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYwOTNiOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9oZS5qcwpAQCAtMCwwICsxLDI0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImhlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKKyAgICAiQ2VudGVyIjogItee16jXm9eWIiwKKyAgICAiQ29sb3I6IjogItem15HXoiIsCisgICAgIkhlaWdodDoiOiAi15LXldeR15QiLAorICAgICJIb3Jpem9udGFsIFJ1bGUiOiAi16fXlSDXkNeg15vXmSIsCisgICAgIkxheW91dCI6ICLXpNeo15nXodeUIiwKKyAgICAiTGVmdCI6ICLXqdee15DXnCIsCisgICAgIk9LIjogIteQ15nXqdeV16giLAorICAgICJSaWdodCI6ICLXmdee15nXnyIsCisgICAgIldpZHRoOiI6ICLXqNeV15fXkSIsCisgICAgInBlcmNlbnQiOiAi15DXl9eV15YiLAorICAgICJwaXhlbHMiOiAi16TXmden16HXnNeZ150iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9odS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9odS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWY2NmY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2h1LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaHUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIk3DqWdzZW0iLAorICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiRWx2w6FsYXN6dMOzIHZvbmFsIiwKKyAgICAiT0siOiAiUmVuZGJlbiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2l0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNjRmM2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvaXQuanMKQEAgLTAsMCArMSwyNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJpdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIiwKKyAgICAiQ2VudGVyIjogIkNlbnRyYSIsCisgICAgIkNvbG9yOiI6ICJDb2xvcmUiLAorICAgICJIZWlnaHQ6IjogIkFsdGV6emEiLAorICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiUmlnaGVsbG8gb3JpenpvbnRhbGUiLAorICAgICJMYXlvdXQiOiAiTGF5b3V0IiwKKyAgICAiTGVmdCI6ICJTaW5pc3RyYSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUmlnaHQiOiAiRGVzdHJhIiwKKyAgICAiV2lkdGg6IjogIkxhcmdoZXp6YSIsCisgICAgInBlcmNlbnQiOiAicGVyY2VudG8iLAorICAgICJwaXhlbHMiOiAicGl4ZWxzIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzMGU4OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9qYS5qcwpAQCAtMCwwICsxLDMyIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsaWdubWVudDoiOiAi6KGM5o+D44GIOiIsCisgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICJDZW50ZXIiOiAi5Lit5aSuIiwKKyAgICAiQ29sb3I6IjogIuiJsjoiLAorICAgICJIZWlnaHQ6IjogIumrmOOBlToiLAorICAgICJIb3Jpem9udGFsIFJ1bGUiOiAi5rC05bmz57eaIiwKKyAgICAiSW5zZXJ0L2VkaXQgaG9yaXpvbnRhbCBydWxlIjogIuawtOW5s+e3muOBruaMv+WFpS/kv67mraMiLAorICAgICJMYXlvdXQiOiAi44Os44Kk44Ki44Km44OIIiwKKyAgICAiTGVmdCI6ICLlt6YiLAorICAgICJObyBzaGFkaW5nIjogIuW9seS7mOOBkeOBquOBlyIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUmlnaHQiOiAi5Y+zIiwKKyAgICAiU3R5bGUiOiAi44K544K/44Kk44OrIiwKKyAgICAiV2lkdGg6IjogIuW5hToiLAorICAgICJwZXJjZW50IjogIuODkeODvOOCu+ODs+ODiCIsCisgICAgInBpeGVscyI6ICLjg5Tjgq/jgrvjg6siLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJOb3RlOiI6ICLlgpnogIMiLAorICAgICAgICAiVG8gc2VsZWN0IGFuIGV4aXN0aW5nIGhvcml6b250YWwgcnVsZSwgYSBkb3VibGUtY2xpY2sgbWF5IGJlIG5lZWRlZC4iOiAi5pei5a2Y44Gu5rC05bmz57ea44KS6YG45oqe44GZ44KL44Gr44GvRG91YmxlQ2xpY2vjgYzlv4XopoHjgIIiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYjQxZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDQzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgIiYjeDAwZDc7IjogIiIsCisgICAgIiZuYnNwOyI6ICIiLAorICAgICJBbGlnbm1lbnQ6IjogIiIsCisgICAgIkNhbmNlbCI6ICIiLAorICAgICJDZW50ZXIiOiAiIiwKKyAgICAiQ29sb3I6IjogIiIsCisgICAgIkhlaWdodDoiOiAiIiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogIiIsCisgICAgIkluc2VydC9FZGl0IEhvcml6b250YWwgUnVsZSI6ICIiLAorICAgICJJbnNlcnQvZWRpdCBob3Jpem9udGFsIHJ1bGUiOiAiIiwKKyAgICAiTGF5b3V0IjogIiIsCisgICAgIkxlZnQiOiAiIiwKKyAgICAiTm8gc2hhZGluZyI6ICIiLAorICAgICJPSyI6ICIiLAorICAgICJSaWdodCI6ICIiLAorICAgICJTdHlsZSI6ICIiLAorICAgICJXaWR0aDoiOiAiIiwKKyAgICAicGVyY2VudCI6ICIiLAorICAgICJwaXhlbHMiOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9sdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9sdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjdmMmY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2x0LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICJIb3Jpem9udGFsaSBsaW5pamEiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2x2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL2x2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MDMyNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvbHYuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXRjZWx0IiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogIkhvcml6b250w6JsYSBhdGRhbMOudMOianN2w650cmEiLAorICAgICJPSyI6ICJMYWJpIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvbmIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEwNzE4OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDMyIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsaWdubWVudDoiOiAiSnVzdGVyaW5nOiIsCisgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICJDZW50ZXIiOiAiU2VudHJlcnQiLAorICAgICJDb2xvcjoiOiAiRmFyZ2UiLAorICAgICJIZWlnaHQ6IjogIkjDuHlkZToiLAorICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiSG9yaXNvbnRhbCBsaW5qZSIsCisgICAgIkluc2VydC9lZGl0IGhvcml6b250YWwgcnVsZSI6ICJTZXR0IGlubi8gcmVkaWdlciBob3Jpc29udGFsIGxpbmplIiwKKyAgICAiTGF5b3V0IjogIk9wcHNldHQiLAorICAgICJMZWZ0IjogIlZlbnN0cmUiLAorICAgICJObyBzaGFkaW5nIjogIkluZ2VuIHNreWdnZSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUmlnaHQiOiAiSMO4eXJlIiwKKyAgICAiU3R5bGUiOiAiU3RpbCIsCisgICAgIldpZHRoOiI6ICJCcmVkZGU6IiwKKyAgICAicGVyY2VudCI6ICJwcm9zZW50IiwKKyAgICAicGl4ZWxzIjogIlBpa3NlbCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIk5vdGU6IjogIk5vdGF0IiwKKyAgICAgICAgIlRvIHNlbGVjdCBhbiBleGlzdGluZyBob3Jpem9udGFsIHJ1bGUsIGEgZG91YmxlLWNsaWNrIG1heSBiZSBuZWVkZWQuIjogIkZvciDDpSB2ZWxnZSBlbiBob3Jpc29udGFsIGxpbmplIGthbiBkZXQgaGVuZGUgZHUgbcOlIGRvYmJlbHRrbGlra2UuIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZjgzZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvbmwuanMKQEAgLTAsMCArMSwzMiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJubCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGlnbm1lbnQ6IjogIlVpdHZ1bGxpbmc6IiwKKyAgICAiQ2FuY2VsIjogIkFubnVsZXJlbiIsCisgICAgIkNlbnRlciI6ICJNaWRkZW4iLAorICAgICJDb2xvcjoiOiAia2xldXIiLAorICAgICJIZWlnaHQ6IjogIkhvb2d0ZToiLAorICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiSG9yaXpvbnRhbGUgbGlqbiIsCisgICAgIkluc2VydC9lZGl0IGhvcml6b250YWwgcnVsZSI6ICJIb3Jpem9udGFsZSBsaWpuIGludm9lZ2VuL2Jld2Vya2VuIiwKKyAgICAiTGF5b3V0IjogIldlZXJnYXZlIiwKKyAgICAiTGVmdCI6ICJMaW5rcyIsCisgICAgIk5vIHNoYWRpbmciOiAiR2VlbiBzY2hhZHV3IiwKKyAgICAiT0siOiAiT0siLAorICAgICJSaWdodCI6ICJSZWNodHMiLAorICAgICJTdHlsZSI6ICJTdHlsZSIsCisgICAgIldpZHRoOiI6ICJCcmVlZHRlOiIsCisgICAgInBlcmNlbnQiOiAicHJvY2VudCIsCisgICAgInBpeGVscyI6ICJwaXhlbHMiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJOb3RlOiI6ICJOb3RpdGllIiwKKyAgICAgICAgIlRvIHNlbGVjdCBhbiBleGlzdGluZyBob3Jpem9udGFsIHJ1bGUsIGEgZG91YmxlLWNsaWNrIG1heSBiZSBuZWVkZWQuIjogIk9tIGVlbiBiZXN0YWFuZGUgaG9yaXpvbnRhbGUgbGlqbiB0ZSBzZWxlY3RlcmVuIG1vZXQgamUgbW9nZWxpamsgZHViYmVsIGtsaWtrZW4uIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL3BsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL3BsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OGUzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvcGwuanMKQEAgLTAsMCArMSwyNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGlnbm1lbnQ6IjogIld5csOzd25hbmllOiIsCisgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICJDZW50ZXIiOiAixZpyb2RlayIsCisgICAgIkNvbG9yOiI6ICJLb2xvcjoiLAorICAgICJIZWlnaHQ6IjogIld5c29rb8WbxIc6IiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogIkxpbmlhIHBvemlvbWEiLAorICAgICJMYXlvdXQiOiAiTGF5b3V0IiwKKyAgICAiTGVmdCI6ICJEbyBsZXdlaiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUmlnaHQiOiAiRG8gcHJhd2VqIiwKKyAgICAiV2lkdGg6IjogIlN6ZXJva2/Fm8SHOiIsCisgICAgInBlcmNlbnQiOiAiJSIsCisgICAgInBpeGVscyI6ICJwaWtzZWxpIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvcHRfYnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQyODJhZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9wdF9ici5qcwpAQCAtMCwwICsxLDI5IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsaWdubWVudDoiOiAiQWxpbmhhbWVudG86IiwKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiQ2VudGVyIjogIkNlbnRyYWxpemFyIiwKKyAgICAiQ29sb3I6IjogIkPDtHI6IiwKKyAgICAiSGVpZ2h0OiI6ICJBbHR1cmFyOiIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICJMaW5oYSBIb3Jpem9udGFsIiwKKyAgICAiSW5zZXJ0L0VkaXQgSG9yaXpvbnRhbCBSdWxlIjogIkluc2VyaXIvRWRpdGFyIExpbmhhIEhvcml6b250YWwiLAorICAgICJJbnNlcnQvZWRpdCBob3Jpem9udGFsIHJ1bGUiOiAiSW5zZXJpci9lZGl0YXIgbGluaGEgaG9yaXpvbnRhbCIsCisgICAgIkxheW91dCI6ICJFc3F1ZW1hIiwKKyAgICAiTGVmdCI6ICJFc3F1ZXJkYSIsCisgICAgIk5vIHNoYWRpbmciOiAiU2VtIHNvbWJyYSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUmlnaHQiOiAiRGlyZWl0YSIsCisgICAgIlN0eWxlIjogIkVzdGlsbyIsCisgICAgIldpZHRoOiI6ICJMYXJndXJhOiIsCisgICAgInBlcmNlbnQiOiAicG9yY2VudGFnZW0iLAorICAgICJwaXhlbHMiOiAicGl4ZWxzIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvcm8uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvcm8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk2YWU0MQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9yby5qcwpAQCAtMCwwICsxLDI0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJvIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiLAorICAgICJDZW50ZXIiOiAiQ2VudHJ1IiwKKyAgICAiQ29sb3I6IjogIkN1bG9hcmUiLAorICAgICJIZWlnaHQ6IjogIsOObsSDbMWjaW1lYSIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICJMaW5pZSBvcml6b250YWzEgyIsCisgICAgIkxheW91dCI6ICJBcmFuamFtZW50IiwKKyAgICAiTGVmdCI6ICJTdMOibmdhIiwKKyAgICAiT0siOiAiQWNjZXB0xIMiLAorICAgICJSaWdodCI6ICJEcmVhcHRhIiwKKyAgICAiV2lkdGg6IjogIkzEg8WjaW1lIiwKKyAgICAicGVyY2VudCI6ICJwcm9jZW50ZSIsCisgICAgInBpeGVscyI6ICJwaXhlbGkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9ydS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9ydS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjJhYTQyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL3J1LmpzCkBAIC0wLDAgKzEsMjUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicnUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxpZ25tZW50OiI6ICLQktGL0YDQsNCy0L3QuNCy0LDQvdC40LUiLAorICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIiwKKyAgICAiQ2VudGVyIjogItCm0LXQvdGC0YAiLAorICAgICJDb2xvcjoiOiAi0KbQstC10YIiLAorICAgICJIZWlnaHQ6IjogItCS0YvRgdC+0YLQsCIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICLQk9C+0YDQuNC30L7QvdGC0LDQu9GM0L3Ri9C5INGA0LDQt9C00LXQu9C40YLQtdC70YwiLAorICAgICJMYXlvdXQiOiAi0KDQsNGB0L/QvtC70L7QttC10L3QuNC1IiwKKyAgICAiTGVmdCI6ICLQn9C+INC70LXQstC+0LzRgyDQutGA0LDRjiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUmlnaHQiOiAi0J/QviDQv9GA0LDQstC+0LzRgyDQutGA0LDRjiIsCisgICAgIldpZHRoOiI6ICLQqNC40YDQuNC90LAiLAorICAgICJwZXJjZW50IjogItC/0YDQvtGG0LXQvdGC0L7QsiIsCisgICAgInBpeGVscyI6ICLQv9C40LrRgdC10LvQtdC5IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvc2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvc2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWViZDBkNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9zaC5qcwpAQCAtMCwwICsxLDIwIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsaWdubWVudDoiOiAiUmF2bmFuamUiLAorICAgICJDYW5jZWwiOiAiUG9uacWhdGkiLAorICAgICJIb3Jpem9udGFsIFJ1bGUiOiAiSG9yaXpvbnRhbG5hIGxpbmlqYSIsCisgICAgIkxheW91dCI6ICJQcmVsb20iLAorICAgICJMZWZ0IjogIkxldm8iLAorICAgICJPSyI6ICJPSyIsCisgICAgIlJpZ2h0IjogIkRlc25vIiwKKyAgICAiV2lkdGg6IjogIsWgaXJpbmEiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9zaS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9zaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzEzMDFmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL3NpLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2kiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICJWb2RvcmF2bmEgxI1ydGEiLAorICAgICJPSyI6ICJWIHJlZHUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9zci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9zci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTVhNzYyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL3NyLmpzCkBAIC0wLDAgKzEsMjAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxpZ25tZW50OiI6ICLQoNCw0LLQvdCw0ZrQtSIsCisgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICLQpdC+0YDQuNC30L7QvdGC0LDQu9C90LAg0LvQuNC90LjRmNCwIiwKKyAgICAiTGF5b3V0IjogItCf0YDQtdC70L7QvCIsCisgICAgIkxlZnQiOiAi0JvQtdCy0L4iLAorICAgICJPSyI6ICJPSyIsCisgICAgIlJpZ2h0IjogItCU0LXRgdC90L4iLAorICAgICJXaWR0aDoiOiAi0KjQuNGA0LjQvdCwIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvc3YuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIwZDZhNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy9zdi5qcwpAQCAtMCwwICsxLDI1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInN2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsaWdubWVudDoiOiAiUGxhY2VyaW5nOiIsCisgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICJDZW50ZXIiOiAiQ2VudHJlcmEiLAorICAgICJDb2xvcjoiOiAiRsOkcmciLAorICAgICJIZWlnaHQ6IjogIkjDtmpkOiIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICJWw6VncsOkdCBsaW5qZSIsCisgICAgIkxheW91dCI6ICJMYXlvdXQiLAorICAgICJMZWZ0IjogIlZlbnN0ZXIiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlJpZ2h0IjogIkjDtmdlciIsCisgICAgIldpZHRoOiI6ICJCcmVkZDoiLAorICAgICJwZXJjZW50IjogInByb2NlbnQiLAorICAgICJwaXhlbHMiOiAiYmlsZHB1bmt0ZXIiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy90aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWFjMTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL3RoLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidGgiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICLguYDguKrguYnguJnguIHguLbguYjguIfguIHguKXguLLguIciLAorICAgICJPSyI6ICLguJXguIHguKXguIciCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy90ci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy90ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTI1M2RjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsMjUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxpZ25tZW50OiI6ICJIaXphbGFtYToiLAorICAgICJDYW5jZWwiOiAixLBwdGFsIiwKKyAgICAiQ2VudGVyIjogIk9ydGFsYSIsCisgICAgIkNvbG9yOiI6ICJSZW5rIiwKKyAgICAiSGVpZ2h0OiI6ICJZw7xrc2VrbGlrIiwKKyAgICAiSG9yaXpvbnRhbCBSdWxlIjogIllhdGF5IGNldHZlbCIsCisgICAgIkxheW91dCI6ICJEw7x6ZW4iLAorICAgICJMZWZ0IjogIlNvbGEiLAorICAgICJPSyI6ICJUYW1hbSIsCisgICAgIlJpZ2h0IjogIlNhxJ9hIiwKKyAgICAiV2lkdGg6IjogIkdlbmnFn2xpazoiLAorICAgICJwZXJjZW50IjogIiUiLAorICAgICJwaXhlbHMiOiAiUGlrc2VsIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvdm4uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvdm4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyZWJlMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSG9yaXpvbnRhbFJ1bGUvbGFuZy92bi5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInZuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJI4buneSIsCisgICAgIkhvcml6b250YWwgUnVsZSI6ICJEw7JuZyBL4bq7IE5nYW5nIiwKKyAgICAiT0siOiAixJDhu5NuZyDDvSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL3poX2NuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9sYW5nL3poX2NuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NzhmYTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL2xhbmcvemhfY24uanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ6aF9jbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJIb3Jpem9udGFsIFJ1bGUiOiAi5rC05bmz57q/IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0hvcml6b250YWxSdWxlL3BvcHVwcy9lZGl0X2hvcml6b250YWxfcnVsZS5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9wb3B1cHMvZWRpdF9ob3Jpem9udGFsX3J1bGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWQ3MzAyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Ib3Jpem9udGFsUnVsZS9wb3B1cHMvZWRpdF9ob3Jpem9udGFsX3J1bGUuaHRtbApAQCAtMCwwICsxLDE0MSBAQAorPCFET0NUWVBFIGh0bWwKKyAgICAgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIKKyAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CisKKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KKzxoZWFkPgorICA8dGl0bGU+SW5zZXJ0L0VkaXQgSG9yaXpvbnRhbCBSdWxlPC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vLi4vLi4vcG9wdXBzL3BvcHVwLmNzcyIgLz4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vLi4vcG9wdXBzL3BvcHVwLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vLi4vbW9kdWxlcy9Db2xvclBpY2tlci9Db2xvclBpY2tlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitlZGl0b3IgPSB3aW5kb3cub3BlbmVyLmVkaXRvcjsKKworZnVuY3Rpb24gSW5pdCgpIHsKKwlfX2RsZ190cmFuc2xhdGUoIkhvcml6b250YWxSdWxlIik7CisJX19kbGdfaW5pdChudWxsLHt3aWR0aDozMjAsaGVpZ2h0OjI5MH0pOworCXZhciBwYXJhbXMgPSB3aW5kb3cuZGlhbG9nQXJndW1lbnRzOworCWlmKHBhcmFtcykgeworCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9zaXplIikudmFsdWUgPSBwYXJhbXMuZl9zaXplOworCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl93aWR0aCIpLnZhbHVlID0gcGFyYW1zLmZfd2lkdGg7CisJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3dpZHRoVW5pdCIpLnZhbHVlID0gcGFyYW1zLmZfd2lkdGhVbml0OworCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9hbGlnbiIpLnZhbHVlID0gcGFyYW1zLmZfYWxpZ247CisJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2NvbG9yIikudmFsdWUgPSBwYXJhbXMuZl9jb2xvcjsKKwkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhycHYiKS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBwYXJhbXMuZl9jb2xvcjsKKwkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfbm9zaGFkZSIpLmNoZWNrZWQgPSBwYXJhbXMuZl9ub3NoYWRlOworCX0KKwkKKwl2YXIgY29scGljayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdocnB2Jyk7CisJdmFyIGZfY29sb3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl9jb2xvcicpOworCXZhciBjb2xQaWNrZXIgPSBuZXcgWGluaGEuY29sb3JQaWNrZXIoe2NlbGxzaXplOic1cHgnLGNhbGxiYWNrOnNlbGVjdENvbG9yfSk7CisJY29scGljay5vbmNsaWNrID0gZnVuY3Rpb24oKSB7IGNvbFBpY2tlci5vcGVuKCd0b3AsbGVmdCcsY29scGljaywgZl9jb2xvci52YWx1ZSApOyB9CisJCisJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfd2lkdGgiKS5mb2N1cygpOworfQorCitmdW5jdGlvbiBvbk9LKCkgeworICB2YXIgZmllbGRzID0gWyJmX3NpemUiLCAiZl93aWR0aCIsICJmX3dpZHRoVW5pdCIsICJmX2FsaWduIiwgImZfY29sb3IiLCAiZl9ub3NoYWRlIl07CisgIHZhciBwYXJhbSA9IHt9OworICBmb3IgKHZhciBpIGluIGZpZWxkcykgeworICAgIHZhciBpZCA9IGZpZWxkc1tpXTsKKwl2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgcGFyYW1baWRdID0gKGVsLnR5cGUgPT0gImNoZWNrYm94IikgPyBlbC5jaGVja2VkIDogZWwudmFsdWU7CisgIH0KKyAgX19kbGdfY2xvc2UocGFyYW0pOworICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIG9uQ2FuY2VsKCkgeworICBfX2RsZ19jbG9zZShudWxsKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBzZWxlY3RDb2xvcihjb2xvcikgeworCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdocnB2Jykuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3I7CisJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZfY29sb3InKS52YWx1ZSA9IGNvbG9yOworfQord2luZG93Lm9ubG9hZCA9IEluaXQ7Cis8L3NjcmlwdD4KKworPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKy5idXR0b25Db2xvciB7CisgIHBhZGRpbmc6IDFweDsKKyAgY3Vyc29yOiBkZWZhdWx0OworICBib3JkZXI6IDFweCBzb2xpZDsKKyAgYm9yZGVyLWNvbG9yOiBCdXR0b25IaWdobGlnaHQgQnV0dG9uU2hhZG93IEJ1dHRvblNoYWRvdyBCdXR0b25IaWdobGlnaHQ7Cit9CisKKy5idXR0b25Db2xvci1oaWxpdGUgeworICBib3JkZXItY29sb3I6ICMwMDA7Cit9CisKKy5idXR0b25Db2xvciAuY2hvb3NlciB7CisgIGhlaWdodDogMC42ZW07CisgIGJvcmRlcjogMXB4IHNvbGlkOworICBwYWRkaW5nOiAwcHggMWVtOworICBib3JkZXItY29sb3I6IEJ1dHRvblNoYWRvdyBCdXR0b25IaWdobGlnaHQgQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvblNoYWRvdzsKK30KKworLmJ1dHRvbkNvbG9yIC5ub2NvbG9yIHsKKyAgcGFkZGluZzogMHB4OworICBoZWlnaHQ6IDAuNmVtOworICBib3JkZXI6IDFweCBzb2xpZDsKKyAgYm9yZGVyLWNvbG9yOiBCdXR0b25TaGFkb3cgQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25TaGFkb3c7Cit9CisuYnV0dG9uQ29sb3IgLm5vY29sb3ItaGlsaXRlIHsgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgY29sb3I6ICNmMDA7IH0KKzwvc3R5bGU+CisKKzwvaGVhZD4KKworPGJvZHkgY2xhc3M9ImRpYWxvZyI+Cis8ZGl2IGNsYXNzPSJ0aXRsZSI+SG9yaXpvbnRhbCBSdWxlPC9kaXY+Cis8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJnZXQiPgorICA8ZmllbGRzZXQ+CisgIDxsZWdlbmQ+TGF5b3V0PC9sZWdlbmQ+CisgICAgPGRpdiBjbGFzcz0iZnIiPldpZHRoOjwvZGl2PgorICAgIDxpbnB1dCBzdHlsZT0ibWFyZ2luLXJpZ2h0OiAwLjVlbTsiIG5hbWU9ImZfd2lkdGgiIGlkPSJmX3dpZHRoIiBzaXplPSI1IiB0eXBlPSJ0ZXh0IiAvPgorICAgIDxzZWxlY3Qgc3R5bGU9Im1hcmdpbi1yaWdodDogMC41ZW07IiBuYW1lPSJmX3dpZHRoVW5pdCIgaWQ9ImZfd2lkdGhVbml0Ij4KKyAgICAgIDxvcHRpb24gdmFsdWU9IiUiPnBlcmNlbnQ8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9InB4Ij5waXhlbHM8L29wdGlvbj4KKyAgICA8L3NlbGVjdD4KKwk8YnIgLz4KKyAgICA8ZGl2IGNsYXNzPSJmciI+SGVpZ2h0OjwvZGl2PgorICAgIDxpbnB1dCBzdHlsZT0ibWFyZ2luLXJpZ2h0OiAwLjVlbTsiIG5hbWU9ImZfc2l6ZSIgaWQ9ImZfc2l6ZSIgc2l6ZT0iNSIgdHlwZT0idGV4dCIgLz4gPHNwYW4+cGl4ZWxzPC9zcGFuPgorCTxiciAvPgorICAgIDxkaXYgY2xhc3M9ImZyIj5BbGlnbm1lbnQ6PC9kaXY+CisgICAgPHNlbGVjdCBuYW1lPSJmX2FsaWduIiBpZD0iZl9hbGlnbiI+CisgICAgICA8b3B0aW9uIHZhbHVlPSJsZWZ0Ij5MZWZ0PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjZW50ZXIiPkNlbnRlcjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0icmlnaHQiPlJpZ2h0PC9vcHRpb24+CisgICAgPC9zZWxlY3Q+CisKKyAgPC9maWVsZHNldD4KKyAgPGZpZWxkc2V0PgorICA8bGVnZW5kPlN0eWxlPC9sZWdlbmQ+CisgICAgPGRpdiBjbGFzcz0iZnIiPkNvbG9yOjwvZGl2PgorICAgIDx0YWJsZSBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjAiIGlkPSJocmJ0biIgY2xhc3M9ImJ1dHRvbkNvbG9yIj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNob29zZXIiIGlkPSJocnB2IgorICAgICAgICAgIG9ubW91c2VvdmVyPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaHJidG4nKS5zdHlsZS5ib3JkZXJDb2xvcj0nYmxhY2snIgorICAgICAgICAgIG9ubW91c2VvdXQ9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdocmJ0bicpLnN0eWxlLmJvcmRlckNvbG9yPSdCdXR0b25IaWdobGlnaHQgQnV0dG9uU2hhZG93IEJ1dHRvblNoYWRvdyBCdXR0b25IaWdobGlnaHQnIgorICAgICAgICAgID4mbmJzcDs8L3RkPgorICAgICAgPHRkIGNsYXNzPSJub2NvbG9yIiBpZD0iaHJjbHIiCisgICAgICAgICAgb25tb3VzZW92ZXI9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdocmNscicpLnN0eWxlLmNvbG9yPScjZjAwJyIKKyAgICAgICAgICBvbm1vdXNlb3V0PSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaHJjbHInKS5zdHlsZS5jb2xvcj0nIzAwMCciCisgICAgICAgICAgb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZfY29sb3InKS52YWx1ZT0nJzsJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hycHYnKS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9JyciPiYjeDAwZDc7PC90ZD4KKyAgICA8L3RyPgorICAgIDwvdGFibGU+CisgICAgPGJyIC8+CisgICAgPGRpdiBjbGFzcz0iZnIiPiA8L2Rpdj4KKyAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmX2NvbG9yIiBpZD0iZl9jb2xvciIgLz4KKyAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImZfbm9zaGFkZSIgaWQ9ImZfbm9zaGFkZSIgdmFsdWU9Im5vc2hhZGUiIC8+CisgICAgPHNwYW4+Tm8gc2hhZGluZzwvc3Bhbj4KKyAgICA8YnIgLz4KKyAgPC9maWVsZHNldD4KKzxkaXYgaWQ9ImJ1dHRvbnMiPgorICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0ib2siIG9uY2xpY2s9InJldHVybiBvbk9LKCk7Ij5PSzwvYnV0dG9uPgorICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbmFtZT0iY2FuY2VsIiBvbmNsaWNrPSJyZXR1cm4gb25DYW5jZWwoKTsiPkNhbmNlbDwvYnV0dG9uPgorPC9kaXY+Cis8L2Zvcm0+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9IdG1sRW50aXRpZXMvRW50aXRpZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0h0bWxFbnRpdGllcy9FbnRpdGllcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWU2YjlhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9IdG1sRW50aXRpZXMvRW50aXRpZXMuanMKQEAgLTAsMCArMSwyMDQgQEAKK3sKKyImaWV4Y2w7IiA6ICLCoSIsCisiJmNlbnQ7IiA6ICLCoiIsCisiJnBvdW5kOyIgOiAiwqMiLAorIiZjdXJyZW47IiA6ICLCpCIsCisiJnllbjsiIDogIsKlIiwKKyImYnJ2YmFyOyIgOiAiwqYiLAorIiZzZWN0OyIgOiAiwqciLAorIiZ1bWw7IiA6ICLCqCIsCisiJmNvcHk7IiA6ICLCqSIsCisiJm9yZGY7IiA6ICLCqiIsCisiJmxhcXVvOyIgOiAiwqsiLAorIiZub3Q7IiA6ICLCrCIsCisiJnJlZzsiIDogIsKuIiwKKyImbWFjcjsiIDogIsKvIiwKKyImZGVnOyIgOiAiwrAiLAorIiZwbHVzbW47IiA6ICLCsSIsCisiJnN1cDI7IiA6ICLCsiIsCisiJnN1cDM7IiA6ICLCsyIsCisiJmFjdXRlOyIgOiAiwrQiLAorIiZtaWNybzsiIDogIsK1IiwKKyImcGFyYTsiIDogIsK2IiwKKyImbWlkZG90OyIgOiAiwrciLAorIiZjZWRpbDsiIDogIsK4IiwKKyImc3VwMTsiIDogIsK5IiwKKyImb3JkbTsiIDogIsK6IiwKKyImcmFxdW87IiA6ICLCuyIsCisiJmZyYWMxNDsiIDogIsK8IiwKKyImZnJhYzEyOyIgOiAiwr0iLAorIiZmcmFjMzQ7IiA6ICLCviIsCisiJmlxdWVzdDsiIDogIsK/IiwKKyImQWdyYXZlOyIgOiAiw4AiLAorIiZBYWN1dGU7IiA6ICLDgSIsCisiJkFjaXJjOyIgOiAiw4IiLAorIiZBdGlsZGU7IiA6ICLDgyIsCisiJkF1bWw7IiA6ICLDhCIsCisiJkFyaW5nOyIgOiAiw4UiLAorIiZBRWxpZzsiIDogIsOGIiwKKyImQ2NlZGlsOyIgOiAiw4ciLAorIiZFZ3JhdmU7IiA6ICLDiCIsCisiJkVhY3V0ZTsiIDogIsOJIiwKKyImRWNpcmM7IiA6ICLDiiIsCisiJkV1bWw7IiA6ICLDiyIsCisiJklncmF2ZTsiIDogIsOMIiwKKyImSWFjdXRlOyIgOiAiw40iLAorIiZJY2lyYzsiIDogIsOOIiwKKyImSXVtbDsiIDogIsOPIiwKKyImRVRIOyIgOiAiw5AiLAorIiZOdGlsZGU7IiA6ICLDkSIsCisiJk9ncmF2ZTsiIDogIsOSIiwKKyImT2FjdXRlOyIgOiAiw5MiLAorIiZPY2lyYzsiIDogIsOUIiwKKyImT3RpbGRlOyIgOiAiw5UiLAorIiZPdW1sOyIgOiAiw5YiLAorIiZ0aW1lczsiIDogIsOXIiwKKyImT3NsYXNoOyIgOiAiw5giLAorIiZVZ3JhdmU7IiA6ICLDmSIsCisiJlVhY3V0ZTsiIDogIsOaIiwKKyImVWNpcmM7IiA6ICLDmyIsCisiJlV1bWw7IiA6ICLDnCIsCisiJllhY3V0ZTsiIDogIsOdIiwKKyImVEhPUk47IiA6ICLDniIsCisiJnN6bGlnOyIgOiAiw58iLAorIiZhZ3JhdmU7IiA6ICLDoCIsCisiJmFhY3V0ZTsiIDogIsOhIiwKKyImYWNpcmM7IiA6ICLDoiIsCisiJmF0aWxkZTsiIDogIsOjIiwKKyImYXVtbDsiIDogIsOkIiwKKyImYXJpbmc7IiA6ICLDpSIsCisiJmFlbGlnOyIgOiAiw6YiLAorIiZjY2VkaWw7IiA6ICLDpyIsCisiJmVncmF2ZTsiIDogIsOoIiwKKyImZWFjdXRlOyIgOiAiw6kiLAorIiZlY2lyYzsiIDogIsOqIiwKKyImZXVtbDsiIDogIsOrIiwKKyImaWdyYXZlOyIgOiAiw6wiLAorIiZpYWN1dGU7IiA6ICLDrSIsCisiJmljaXJjOyIgOiAiw64iLAorIiZpdW1sOyIgOiAiw68iLAorIiZldGg7IiA6ICLDsCIsCisiJm50aWxkZTsiIDogIsOxIiwKKyImb2dyYXZlOyIgOiAiw7IiLAorIiZvYWN1dGU7IiA6ICLDsyIsCisiJm9hY3V0ZTsiIDogIsOzIiwKKyImb2NpcmM7IiA6ICLDtCIsCisiJm90aWxkZTsiIDogIsO1IiwKKyImb3VtbDsiIDogIsO2IiwKKyImZGl2aWRlOyIgOiAiw7ciLAorIiZvc2xhc2g7IiA6ICLDuCIsCisiJnVncmF2ZTsiIDogIsO5IiwKKyImdWFjdXRlOyIgOiAiw7oiLAorIiZ1Y2lyYzsiIDogIsO7IiwKKyImdXVtbDsiIDogIsO8IiwKKyImeWFjdXRlOyIgOiAiw70iLAorIiZ0aG9ybjsiIDogIsO+IiwKKyImeXVtbDsiIDogIsO/IiwKKyImZm5vZjsiIDogIsaSIiwKKyImQWxwaGE7IiA6ICLOkSIsCisiJkJldGE7IiA6ICLOkiIsCisiJkdhbW1hOyIgOiAizpMiLAorIiZEZWx0YTsiIDogIs6UIiwKKyImRXBzaWxvbjsiIDogIs6VIiwKKyImWmV0YTsiIDogIs6WIiwKKyImRXRhOyIgOiAizpciLAorIiZUaGV0YTsiIDogIs6YIiwKKyImSW90YTsiIDogIs6ZIiwKKyImS2FwcGE7IiA6ICLOmiIsCisiJkxhbWJkYTsiIDogIs6bIiwKKyImTXU7IiA6ICLOnCIsCisiJk51OyIgOiAizp0iLAorIiZYaTsiIDogIs6eIiwKKyImT21pY3JvbjsiIDogIs6fICIsCisiJlBpOyIgOiAizqAiLAorIiZSaG87IiA6ICLOoSIsCisiJlNpZ21hOyIgOiAizqMiLAorIiZUYXU7IiA6ICLOpCIsCisiJlVwc2lsb247IiA6ICLOpSIsCisiJlBoaTsiIDogIs6mIiwKKyImQ2hpOyIgOiAizqciLAorIiZQc2k7IiA6ICLOqCIsCisiJk9tZWdhOyIgOiAizqkiLAorIiZhbHBoYTsiIDogIs6xIiwKKyImYmV0YTsiIDogIs6yIiwKKyImZ2FtbWE7IiA6ICLOsyIsCisiJmRlbHRhOyIgOiAizrQiLAorIiZlcHNpbG9uOyIgOiAizrUiLAorIiZ6ZXRhOyIgOiAizrYiLAorIiZldGE7IiA6ICLOtyIsCisiJnRoZXRhOyIgOiAizrgiLAorIiZpb3RhOyIgOiAizrkiLAorIiZrYXBwYTsiIDogIs66IiwKKyImbGFtYmRhOyIgOiAizrsiLAorIiZtdTsiIDogIs68IiwKKyImbnU7IiA6ICLOvSIsCisiJnhpOyIgOiAizr4iLAorIiZvbWljcm9uOyIgOiAizr8iLAorIiZwaTsiIDogIs+AIiwKKyImcmhvOyIgOiAiz4EiLAorIiZzaWdtYWY7IiA6ICLPgiIsCisiJnNpZ21hOyIgOiAiz4MiLAorIiZ0YXU7IiA6ICLPhCIsCisiJnVwc2lsb247IiA6ICLPhSIsCisiJnBoaTsiIDogIs+GIiwKKyImb21lZ2E7IiA6ICLPiSIsCisiJmJ1bGw7IiA6ICLigKIiLAorIiZoZWxsaXA7IiA6ICLigKYiLAorIiZwcmltZTsiIDogIuKAsiIsCisiJlByaW1lOyIgOiAi4oCzIiwKKyImb2xpbmU7IiA6ICLigL4iLAorIiZmcmFzbDsiIDogIuKBhCIsCisiJnRyYWRlOyIgOiAi4oSiIiwKKyImbGFycjsiIDogIuKGkCIsCisiJnVhcnI7IiA6ICLihpEiLAorIiZyYXJyOyIgOiAi4oaSIiwKKyImZGFycjsiIDogIuKGkyIsCisiJmhhcnI7IiA6ICLihpQiLAorIiZyQXJyOyIgOiAi4oeSIiwKKyImcGFydDsiIDogIuKIgiIsCisiJnByb2Q7IiA6ICLiiI8iLAorIiZzdW07IiA6ICLiiJEiLAorIiZtaW51czsiIDogIuKIkiIsCisiJnJhZGljOyIgOiAi4oiaIiwKKyImaW5maW47IiA6ICLiiJ4iLAorIiZjYXA7IiA6ICLiiKkiLAorIiZpbnQ7IiA6ICLiiKsiLAorIiZhc3ltcDsiIDogIuKJiCIsCisiJm5lOyIgOiAi4omgIiwKKyImZXF1aXY7IiA6ICLiiaEiLAorIiZsZTsiIDogIuKJpCIsCisiJmdlOyIgOiAi4omlIiwKKyImbG96OyIgOiAi4peKIiwKKyImc3BhZGVzOyIgOiAi4pmgIiwKKyImY2x1YnM7IiA6ICLimaMiLAorIiZoZWFydHM7IiA6ICLimaUiLAorIiZkaWFtczsiIDogIuKZpiIsCisiJk9FbGlnOyIgOiAixZIiLAorIiZvZWxpZzsiIDogIsWTIiwKKyImU2Nhcm9uOyIgOiAixaAiLAorIiZzY2Fyb247IiA6ICLFoSIsCisiJll1bWw7IiA6ICLFuCIsCisiJmNpcmM7IiA6ICLLhiIsCisiJnRpbGRlOyIgOiAiy5wiLAorIiZuZGFzaDsiIDogIuKAkyIsCisiJm1kYXNoOyIgOiAi4oCUIiwKKyImbHNxdW87IiA6ICLigJgiLAorIiZyc3F1bzsiIDogIuKAmSIsCisiJnNicXVvOyIgOiAi4oCaIiwKKyImbGRxdW87IiA6ICLigJwiLAorIiZyZHF1bzsiIDogIuKAnSIsCisiJmJkcXVvOyIgOiAi4oCeIiwKKyImZGFnZ2VyOyIgOiAi4oCgIiwKKyImRGFnZ2VyOyIgOiAi4oChIiwKKyImcGVybWlsOyIgOiAi4oCwIiwKKyImbHNhcXVvOyIgOiAi4oC5IiwKKyImcnNhcXVvOyIgOiAi4oC6IiwKKyImZXVybzsiIDogIuKCrCIsCisKKwkvLyBceDIyIG1lYW5zICciJyAtLSB3ZSB1c2UgaGV4IHJlcHJlemVudGF0aW9uIHNvIHRoYXQgd2UgZG9uJ3QgZGlzdHVyYgorCS8vIEpTIGNvbXByZXNzb3JzICh3ZWxsLCBhdCBsZWFzdCBtaW5lIGZhaWxzLi4gOykKKwkKKwkiJm5ic3A7IiA6ICJceEEwIiwKKwkiJiM4ODA0OyIgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MjI2NCksIAorCSImIzg4MDU7IiA6IFN0cmluZy5mcm9tQ2hhckNvZGUoMHgyMjY1KQorfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9IdG1sRW50aXRpZXMvSHRtbEVudGl0aWVzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9IdG1sRW50aXRpZXMvSHRtbEVudGl0aWVzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NDUzNmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0h0bWxFbnRpdGllcy9IdG1sRW50aXRpZXMuanMKQEAgLTAsMCArMSw1MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorSHRtbEVudGl0aWVzIGZvciBYaW5oYQorX19fX19fX19fX19fX19fX19fX18KKworSW50ZW5kZWQgdG8gZmFjaWxpYXRlIHRoZSB1c2Ugb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIHdpdGggSVNPIDggYml0IGVuY29kaW5ncy4KKworVXNpbmcgdGhlIGNvbnZlcnNpb24gbWFwIHByb3ZpZGVkIGJ5IG1oYXJyaXNvbmxpbmUgaW4gdGlja2V0ICMxMjcKKworSWYgeW91IHdhbnQgdG8gYWRqdXN0IHRoZSBsaXN0LCBlLmcuIHRvIGV4Y2VwdCB0aGUgY2hhcmFjdGVycyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gdGhlIHVzZWQgY2hhcnNldCwKK2VkaXQgRW50aXRpZXMuanMuIAorWW91IG1heSBzYXZlIGl0IHVuZGVyIGEgZGlmZmVyZW50IG5hbWUgdXNpbmcgdGhlIHhpbmhhX2NvbmZpZy5IdG1sRW50aXRpZXMuRW50aXRpZXNGaWxlIHZhcmlhYmxlCisKK0lTTy04ODU5LTEgcHJlc2V0IGlzIGRlZmF1bHQsIHNldAorICAKKyAgeGluaGFfY29uZmlnLkh0bWxFbnRpdGllcy5FbmNvZGluZyA9IG51bGw7CisKK2lmIHlvdSB3YW50IGFsbCBzcGVjaWFsIGNoYXJhY3RlcnMgdG8gYmUgY29udmVydGVkIG9yIHdhbnQgdG8gbG9hZCBhIGN1c3RvbSBmaWxlIAorXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitmdW5jdGlvbiBIdG1sRW50aXRpZXMoZWRpdG9yKSB7CisJdGhpcy5lZGl0b3IgPSBlZGl0b3I7Cit9CisKK0h0bWxFbnRpdGllcy5fcGx1Z2luSW5mbyA9IHsKKyAgbmFtZSAgICAgICAgICA6ICJIdG1sRW50aXRpZXMiLAorICB2ZXJzaW9uICAgICAgIDogIjEuMCIsCisgIGRldmVsb3BlciAgICAgOiAiUmFpbXVuZCBNZXllciIsCisgIGRldmVsb3Blcl91cmwgOiAiaHR0cDovL3gtd2Vic2VydmljZS5uZXQiLAorICBjX293bmVyICAgICAgIDogIlhpbmhhIGNvbW11bml0eSIsCisgIHNwb25zb3IgICAgICAgOiAiIiwKKyAgc3BvbnNvcl91cmwgICA6ICIiLAorICBsaWNlbnNlICAgICAgIDogIkhUTUxBcmVhIgorfQorWGluaGEuQ29uZmlnLnByb3RvdHlwZS5IdG1sRW50aXRpZXMgPQoreworCUVuY29kaW5nICAgICA6ICdpc28tODg1OS0xJywKKwlFbnRpdGllc0ZpbGUgOiBYaW5oYS5nZXRQbHVnaW5EaXIoIkh0bWxFbnRpdGllcyIpICsgIi9FbnRpdGllcy5qcyIKK30KK0h0bWxFbnRpdGllcy5wcm90b3R5cGUub25HZW5lcmF0ZSA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBlID0gdGhpcy5lZGl0b3I7CisgICAgdmFyIHVybCA9IChlLmNvbmZpZy5IdG1sRW50aXRpZXMuRW5jb2RpbmcpID8gIFhpbmhhLmdldFBsdWdpbkRpcigiSHRtbEVudGl0aWVzIikgKyAiLyIrZS5jb25maWcuSHRtbEVudGl0aWVzLkVuY29kaW5nKyIuanMiIDogZS5jb25maWcuSHRtbEVudGl0aWVzLkVudGl0aWVzRmlsZTsKKyAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbiAoZ2V0YmFjaykgeworICAgIAl2YXIgc3BlY2lhbFJlcGxhY2VtZW50cyA9IGUuY29uZmlnLnNwZWNpYWxSZXBsYWNlbWVudHM7CisgICAgCWV2YWwoInZhciByZXBsYWNlbWVudHMgPSIgKyBnZXRiYWNrKTsKKyAgICAJZm9yICh2YXIgaSBpbiAgcmVwbGFjZW1lbnRzKQorCQl7CisJCQlzcGVjaWFsUmVwbGFjZW1lbnRzW2ldID0gIHJlcGxhY2VtZW50c1tpXTsJCisJCX0KKyAgICB9CisgICAgWGluaGEuX2dldGJhY2sodXJsLGNhbGxiYWNrKTsKK30KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSHRtbEVudGl0aWVzL2lzby04ODU5LTEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0h0bWxFbnRpdGllcy9pc28tODg1OS0xLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYzVhYWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0h0bWxFbnRpdGllcy9pc28tODg1OS0xLmpzCkBAIC0wLDAgKzEsMTA5IEBACit7CisiJmZub2Y7IiA6ICLGkiIsCisiJkFscGhhOyIgOiAizpEiLAorIiZCZXRhOyIgOiAizpIiLAorIiZHYW1tYTsiIDogIs6TIiwKKyImRGVsdGE7IiA6ICLOlCIsCisiJkVwc2lsb247IiA6ICLOlSIsCisiJlpldGE7IiA6ICLOliIsCisiJkV0YTsiIDogIs6XIiwKKyImVGhldGE7IiA6ICLOmCIsCisiJklvdGE7IiA6ICLOmSIsCisiJkthcHBhOyIgOiAizpoiLAorIiZMYW1iZGE7IiA6ICLOmyIsCisiJk11OyIgOiAizpwiLAorIiZOdTsiIDogIs6dIiwKKyImWGk7IiA6ICLOniIsCisiJk9taWNyb247IiA6ICLOnyAiLAorIiZQaTsiIDogIs6gIiwKKyImUmhvOyIgOiAizqEiLAorIiZTaWdtYTsiIDogIs6jIiwKKyImVGF1OyIgOiAizqQiLAorIiZVcHNpbG9uOyIgOiAizqUiLAorIiZQaGk7IiA6ICLOpiIsCisiJkNoaTsiIDogIs6nIiwKKyImUHNpOyIgOiAizqgiLAorIiZPbWVnYTsiIDogIs6pIiwKKyImYWxwaGE7IiA6ICLOsSIsCisiJmJldGE7IiA6ICLOsiIsCisiJmdhbW1hOyIgOiAizrMiLAorIiZkZWx0YTsiIDogIs60IiwKKyImZXBzaWxvbjsiIDogIs61IiwKKyImemV0YTsiIDogIs62IiwKKyImZXRhOyIgOiAizrciLAorIiZ0aGV0YTsiIDogIs64IiwKKyImaW90YTsiIDogIs65IiwKKyIma2FwcGE7IiA6ICLOuiIsCisiJmxhbWJkYTsiIDogIs67IiwKKyImbXU7IiA6ICLOvCIsCisiJm51OyIgOiAizr0iLAorIiZ4aTsiIDogIs6+IiwKKyImb21pY3JvbjsiIDogIs6/IiwKKyImcGk7IiA6ICLPgCIsCisiJnJobzsiIDogIs+BIiwKKyImc2lnbWFmOyIgOiAiz4IiLAorIiZzaWdtYTsiIDogIs+DIiwKKyImdGF1OyIgOiAiz4QiLAorIiZ1cHNpbG9uOyIgOiAiz4UiLAorIiZwaGk7IiA6ICLPhiIsCisiJm9tZWdhOyIgOiAiz4kiLAorIiZidWxsOyIgOiAi4oCiIiwKKyImaGVsbGlwOyIgOiAi4oCmIiwKKyImcHJpbWU7IiA6ICLigLIiLAorIiZQcmltZTsiIDogIuKAsyIsCisiJm9saW5lOyIgOiAi4oC+IiwKKyImZnJhc2w7IiA6ICLigYQiLAorIiZ0cmFkZTsiIDogIuKEoiIsCisiJmxhcnI7IiA6ICLihpAiLAorIiZ1YXJyOyIgOiAi4oaRIiwKKyImcmFycjsiIDogIuKGkiIsCisiJmRhcnI7IiA6ICLihpMiLAorIiZoYXJyOyIgOiAi4oaUIiwKKyImckFycjsiIDogIuKHkiIsCisiJnBhcnQ7IiA6ICLiiIIiLAorIiZwcm9kOyIgOiAi4oiPIiwKKyImc3VtOyIgOiAi4oiRIiwKKyImbWludXM7IiA6ICLiiJIiLAorIiZyYWRpYzsiIDogIuKImiIsCisiJmluZmluOyIgOiAi4oieIiwKKyImY2FwOyIgOiAi4oipIiwKKyImaW50OyIgOiAi4oirIiwKKyImYXN5bXA7IiA6ICLiiYgiLAorIiZuZTsiIDogIuKJoCIsCisiJmVxdWl2OyIgOiAi4omhIiwKKyImbGU7IiA6ICLiiaQiLAorIiZnZTsiIDogIuKJpSIsCisiJmxvejsiIDogIuKXiiIsCisiJnNwYWRlczsiIDogIuKZoCIsCisiJmNsdWJzOyIgOiAi4pmjIiwKKyImaGVhcnRzOyIgOiAi4pmlIiwKKyImZGlhbXM7IiA6ICLimaYiLAorIiZPRWxpZzsiIDogIsWSIiwKKyImb2VsaWc7IiA6ICLFkyIsCisiJlNjYXJvbjsiIDogIsWgIiwKKyImc2Nhcm9uOyIgOiAixaEiLAorIiZZdW1sOyIgOiAixbgiLAorIiZjaXJjOyIgOiAiy4YiLAorIiZ0aWxkZTsiIDogIsucIiwKKyImbmRhc2g7IiA6ICLigJMiLAorIiZtZGFzaDsiIDogIuKAlCIsCisiJmxzcXVvOyIgOiAi4oCYIiwKKyImcnNxdW87IiA6ICLigJkiLAorIiZzYnF1bzsiIDogIuKAmiIsCisiJmxkcXVvOyIgOiAi4oCcIiwKKyImcmRxdW87IiA6ICLigJ0iLAorIiZiZHF1bzsiIDogIuKAniIsCisiJmRhZ2dlcjsiIDogIuKAoCIsCisiJkRhZ2dlcjsiIDogIuKAoSIsCisiJnBlcm1pbDsiIDogIuKAsCIsCisiJmxzYXF1bzsiIDogIuKAuSIsCisiJnJzYXF1bzsiIDogIuKAuiIsCisiJmV1cm87IiA6ICLigqwiLAorCisJLy8gXHgyMiBtZWFucyAnIicgLS0gd2UgdXNlIGhleCByZXByZXplbnRhdGlvbiBzbyB0aGF0IHdlIGRvbid0IGRpc3R1cmIKKwkvLyBKUyBjb21wcmVzc29ycyAod2VsbCwgYXQgbGVhc3QgbWluZSBmYWlscy4uIDspCisJCisJIiZuYnNwOyIgOiAiXHhBMCIsCisJIiYjODgwNDsiIDogU3RyaW5nLmZyb21DaGFyQ29kZSgweDIyNjQpLCAKKwkiJiM4ODA1OyIgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MjI2NSkKK30KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL0luc2VydEFuY2hvci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL0luc2VydEFuY2hvci5qcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZTFmNDAzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvSW5zZXJ0QW5jaG9yLmpzCkBAIC0wLDAgKzEsMTY2IEBACitmdW5jdGlvbiBJbnNlcnRBbmNob3IoZWRpdG9yKSB7DQorICB0aGlzLmVkaXRvciA9IGVkaXRvcjsNCisgIHZhciBjZmcgPSBlZGl0b3IuY29uZmlnOw0KKyAgdmFyIHNlbGYgPSB0aGlzOw0KKyAgDQorICB0aGlzLnBsYWNlaG9sZGVySW1nID0gJzxpbWcgY2xhc3M9IklBX3BsYWNlaG9sZGVyIiBzcmM9IicrWGluaGEuZ2V0UGx1Z2luRGlyKCJJbnNlcnRBbmNob3IiKSsnL2ltZy9pbnNlcnQtYW5jaG9yLmdpZiIgLz4nOw0KKyAgDQorICAvLyByZWdpc3RlciB0aGUgdG9vbGJhciBidXR0b25zIHByb3ZpZGVkIGJ5IHRoaXMgcGx1Z2luDQorICBjZmcucmVnaXN0ZXJCdXR0b24oew0KKyAgaWQgICAgICAgOiAiaW5zZXJ0LWFuY2hvciIsIA0KKyAgdG9vbHRpcCAgOiB0aGlzLl9sYygiSW5zZXJ0IEFuY2hvciIpLCANCisgIGltYWdlICAgIDogZWRpdG9yLmltZ1VSTCgiaW5zZXJ0LWFuY2hvci5naWYiLCAiSW5zZXJ0QW5jaG9yIiksDQorICB0ZXh0TW9kZSA6IGZhbHNlLA0KKyAgYWN0aW9uICAgOiBmdW5jdGlvbigpIHsNCisgICAgICAgICAgICAgICBzZWxmLnNob3coKTsNCisgICAgICAgICAgICAgfQ0KKyAgfSk7DQorICBjZmcuYWRkVG9vbGJhckVsZW1lbnQoImluc2VydC1hbmNob3IiLCAiY3JlYXRlbGluayIsIDEpOw0KK30NCisNCitJbnNlcnRBbmNob3IuX3BsdWdpbkluZm8gPSB7DQorICBuYW1lICAgICAgICAgIDogIkluc2VydEFuY2hvciIsDQorICBvcmlnaW4gICAgICAgIDogInZlcnNpb246IDEuMCwgYnkgQW5kcmUgUmFib2xkLCBNUiBQcmludHdhcmUgR21iSCwgaHR0cDovL3d3dy5tci1wcmludHdhcmUuZGUiLA0KKyAgdmVyc2lvbiAgICAgICA6ICIyLjAiLA0KKyAgZGV2ZWxvcGVyICAgICA6ICJVZG8gU2NobWFsIiwNCisgIGRldmVsb3Blcl91cmwgOiAiaHR0cDovL3d3dy5zY2hhZmZyYXRoLW5ldWVtZWRpZW4uZGUiLA0KKyAgY19vd25lciAgICAgICA6ICJVZG8gU2NobWFsIiwNCisgIHNwb25zb3IgICAgICAgOiAiTC5OLlNjaGFmZnJhdGggTmV1ZU1lZGllbiIsDQorICBzcG9uc29yX3VybCAgIDogImh0dHA6Ly93d3cuc2NoYWZmcmF0aC1uZXVlbWVkaWVuLmRlIiwNCisgIGxpY2Vuc2UgICAgICAgOiAiaHRtbEFyZWEiDQorfTsNCisNCitJbnNlcnRBbmNob3IucHJvdG90eXBlLl9sYyA9IGZ1bmN0aW9uKHN0cmluZykgew0KKyAgICByZXR1cm4gWGluaGEuX2xjKHN0cmluZywgJ0luc2VydEFuY2hvcicpOw0KK307DQorDQorSW5zZXJ0QW5jaG9yLnByb3RvdHlwZS5vbkdlbmVyYXRlID0gZnVuY3Rpb24oKSB7DQorICB0aGlzLmVkaXRvci5hZGRFZGl0b3JTdHlsZXNoZWV0KFhpbmhhLmdldFBsdWdpbkRpcigiSW5zZXJ0QW5jaG9yIikgKyAnL2luc2VydC1hbmNob3IuY3NzJyk7DQorICANCit9Ow0KKw0KK0luc2VydEFuY2hvci5wcm90b3R5cGUuaW53YXJkSHRtbCA9IGZ1bmN0aW9uKGh0bWwpDQorew0KKwlodG1sPSBodG1sLnJlcGxhY2UoLyg8YVtePl0qY2xhc3M9ImFuY2hvciJbXj5dKj4pL2csIiQxIit0aGlzLnBsYWNlaG9sZGVySW1nKTsNCisJcmV0dXJuIGh0bWw7DQorfQ0KK0luc2VydEFuY2hvci5wcm90b3R5cGUub3V0d2FyZEh0bWwgPSBmdW5jdGlvbihodG1sKQ0KK3sNCisJaHRtbD0gaHRtbC5yZXBsYWNlKC8oPGltZ1tePl0qY2xhc3M9Ij9JQV9wbGFjZWhvbGRlciI/W14+XSo+KS9pZywiIik7DQorCXJldHVybiBodG1sOw0KK30NCitJbnNlcnRBbmNob3IucHJvdG90eXBlLm9uR2VuZXJhdGVPbmNlID0gZnVuY3Rpb24oKQ0KK3sNCisJdGhpcy5fcHJlcGFyZURpYWxvZygpOw0KK307DQorSW5zZXJ0QW5jaG9yLnByb3RvdHlwZS5fcHJlcGFyZURpYWxvZyA9IGZ1bmN0aW9uKCkNCit7DQorICB2YXIgc2VsZiA9IHRoaXM7DQorICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7DQorDQorICBpZighdGhpcy5odG1sKQ0KKyAgew0KKyAgICBYaW5oYS5fZ2V0YmFjayhYaW5oYS5nZXRQbHVnaW5EaXIoIkluc2VydEFuY2hvciIpICsgJy9kaWFsb2cuaHRtbCcsIGZ1bmN0aW9uKGdldGJhY2spIHsgc2VsZi5odG1sID0gZ2V0YmFjazsgc2VsZi5fcHJlcGFyZURpYWxvZygpOyB9KTsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKyAgDQorICAvLyBOb3cgd2UgaGF2ZSBldmVyeXRoaW5nIHdlIG5lZWQsIHNvIHdlIGNhbiBidWlsZCB0aGUgZGlhbG9nLg0KKyAgdGhpcy5kaWFsb2cgPSBuZXcgWGluaGEuRGlhbG9nKGVkaXRvciwgdGhpcy5odG1sLCAnSW5zZXJ0QW5jaG9yJyx7d2lkdGg6NDAwfSk7DQorICANCisgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdvaycpLm9uY2xpY2sgPSBmdW5jdGlvbigpIHtzZWxmLmFwcGx5KCk7fQ0KKw0KKwl0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgnY2FuY2VsJykub25jbGljayA9IGZ1bmN0aW9uKCkgeyBzZWxmLmRpYWxvZy5oaWRlKCl9Ow0KKwkNCisgIHRoaXMucmVhZHkgPSB0cnVlOw0KK307DQorDQorSW5zZXJ0QW5jaG9yLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24oKQ0KK3sNCisJaWYoIXRoaXMucmVhZHkpIC8vIGlmIHRoZSB1c2VyIGlzIHRvbyBmYXN0IGNsaWNraW5nIHRoZSwgd2UgaGF2ZSB0byBtYWtlIHRoZW0gd2FpdA0KKwl7DQorICB2YXIgc2VsZiA9IHRoaXM7DQorCQl3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHtzZWxmLnNob3coKTt9LDEwMCk7DQorCQlyZXR1cm47DQorICB9DQorICANCisJdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOw0KKwl0aGlzLnNlbGVjdGVkSFRNTCA9IGVkaXRvci5nZXRTZWxlY3RlZEhUTUwoKTsNCisJdmFyIHNlbCAgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7DQorICB0aGlzLnJhbmdlICA9IGVkaXRvci5jcmVhdGVSYW5nZShzZWwpOw0KKyAgdGhpcy5hID0gZWRpdG9yLmFjdGl2ZUVsZW1lbnQoc2VsKTsNCisgIA0KKyAgaWYoISh0aGlzLmEgIT0gbnVsbCAmJiB0aGlzLmEudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdhJykpDQorICB7DQorICAgIHRoaXMuYSA9IGVkaXRvci5fZ2V0Rmlyc3RBbmNlc3RvcihzZWwsICdhJyk7IA0KKyAgfQ0KKyAgDQorICB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgnd2FybmluZycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQorICANCisgIGlmICh0aGlzLmEgIT0gbnVsbCAmJiB0aGlzLmEudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdhJykNCisgIHsNCisgICAgaW5wdXRzID0geyBuYW1lIDogdGhpcy5hLmlkIH07DQorICB9DQorICBlbHNlDQorICB7DQorICAgIGlmKCF0aGlzLmVkaXRvci5zZWxlY3Rpb25FbXB0eShzZWwpKQ0KKyAgICB7DQorICAgICAgdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ3dhcm5pbmcnKS5zdHlsZS5kaXNwbGF5ID0gJyc7DQorICAgIH0NCisgICAgaW5wdXRzID0geyBuYW1lIDogJycgfTsNCisgIH0gDQorDQorCXRoaXMuZGlhbG9nLnNob3coaW5wdXRzKTsNCisNCisJdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoIm5hbWUiKS5mb2N1cygpOw0KK307DQorDQorSW5zZXJ0QW5jaG9yLnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uICgpDQorew0KKwl2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7DQorCXZhciBwYXJhbSA9IHRoaXMuZGlhbG9nLmhpZGUoKTsNCisJdmFyIGFuY2hvciA9IHBhcmFtWyduYW1lJ107DQorCXZhciBhID0gdGhpcy5hOw0KKwl2YXIgc2VsZiA9IHRoaXM7DQorCWlmIChhbmNob3IgPT0gIiIgfHwgYW5jaG9yID09IG51bGwpDQorCXsNCisJCWlmIChhKSANCisJCXsNCisgICAgICAgICAgdmFyIGNoaWxkID0gc2VsZi5vdXR3YXJkSHRtbChhLmlubmVySFRNTCk7DQorICAgICAgICAgIGEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhKTsNCisgICAgICAgICAgZWRpdG9yLmluc2VydEhUTUwoY2hpbGQpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgcmV0dXJuOw0KKwl9DQorCXRyeSANCisJew0KKyAgICAgICAgdmFyIGRvYyA9IGVkaXRvci5fZG9jOw0KKwkJaWYgKCFhKQ0KKwkJew0KKyAgICAgICAgICBhID0gZG9jLmNyZWF0ZUVsZW1lbnQoImEiKTsNCisgICAgICAgICAgYS5pZCA9IGFuY2hvcjsNCisgICAgICAgICAgYS5uYW1lID0gYW5jaG9yOw0KKyAgICAgICAgICBhLnRpdGxlID0gYW5jaG9yOw0KKyAgICAgICAgICBhLmNsYXNzTmFtZSA9ICJhbmNob3IiOw0KKyAgICAgICAgICBhLmlubmVySFRNTCA9IHNlbGYucGxhY2Vob2xkZXJJbWc7DQorCQkvLwl2YXIgaHRtbCA9IGVkaXRvci5nZXRTZWxlY3RlZEhUTUwoKTsNCisJCS8vICBpZiAoaHRtbCkgYS5pbm5lckhUTUwgKz0gaHRtbDsNCisJCQlpZiAoWGluaGEuaXNfaWUpIA0KKwkJCXsNCisgICAgICAgICAgICB0aGlzLnJhbmdlLnBhc3RlSFRNTChhLm91dGVySFRNTCk7DQorICAgICAgICAgIAl9DQorCQkJZWxzZSANCisJCQl7DQorICAgICAgICAgICAgZWRpdG9yLmluc2VydE5vZGVBdFNlbGVjdGlvbihhKTsNCisgICAgICAgICAgfQ0KKwkJfQ0KKwkJZWxzZSANCisJCXsNCisgICAgICAgICAgYS5pZCA9IGFuY2hvcjsNCisgICAgICAgICAgYS5uYW1lID0gYW5jaG9yOw0KKyAgICAgICAgICBhLnRpdGxlID0gYW5jaG9yOw0KKyAgICAgICAgICBhLmNsYXNzTmFtZSA9ICJhbmNob3IiOw0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisgICAgICBjYXRjaCAoZSkgeyB9DQorDQorICAgIH0NCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9kaWFsb2cuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2RpYWxvZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMmZkOGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9kaWFsb2cuaHRtbApAQCAtMCwwICsxLDE5IEBACis8aDEgaWQ9IltoMV0iPjxsMTBuPkluc2VydCBBbmNob3I8L2wxMG4+PC9oMT4KKzxkaXYgc3R5bGU9Im1hcmdpbjogMTBweDsiPgorPHRhYmxlIGJvcmRlcj0iMCIgc3R5bGU9IndpZHRoOiAxMDAlOyI+CisgIDx0cj4KKyAgICA8dGQgY2xhc3M9ImxhYmVsIj48bDEwbj5BbmNob3IgbmFtZTwvbDEwbj48L3RkPgorICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9IltuYW1lXSIgbmFtZT0iW25hbWVdIiBzdHlsZT0id2lkdGg6IDgwJSIgLz48L3RkPgorICA8L3RyPgorPC90YWJsZT4KKworPC9kaXY+CisKKzxkaXYgc3R5bGU9Im1hcmdpbjogMTBweDsiIGlkPSJbd2FybmluZ10iPgorICA8c3Ryb25nPlNlbGVjdGVkIGNvbnRlbnQgbWF5IGJlIHJlcGxhY2VkIGJ5IHRoZSBuZXcgYW5jaG9yLiBJbnNlcnRpbmcgYW4gYW5jaG9yIGlzIGxpa2UgaW5zZXJ0aW5nIGFuIGltYWdlLCB5b3UgZG9uJ3QgbmVlZCB0byBzZWxlY3QgYW55dGhpbmcuPC9zdHJvbmc+Cis8L2Rpdj4KKworPGRpdiBjbGFzcz0iYnV0dG9ucyI+CisgIDxpbnB1dCB0eXBlPSJidXR0b24iIGlkPSJbb2tdIiAgICAgdmFsdWU9Il8oT0spIiAgICAgLz4KKyAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9IltjYW5jZWxdIiB2YWx1ZT0iXyhDYW5jZWwpIiAvPgorPC9kaXY+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvaW1nL2luc2VydC1hbmNob3IuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvaW1nL2luc2VydC1hbmNob3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlkYTg5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9pbWcvaW5zZXJ0LWFuY2hvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvaW1nL3BsYWNlaG9sZGVyLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2ltZy9wbGFjZWhvbGRlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmMzNDI3NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2ltZy9wbGFjZWhvbGRlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvaW5zZXJ0LWFuY2hvci5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9pbnNlcnQtYW5jaG9yLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYTZiMmRlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvaW5zZXJ0LWFuY2hvci5jc3MKQEAgLTAsMCArMSwxMCBAQAorYS5hbmNob3IgeworICB3aWR0aDogMThweDsKKyAgaGVpZ2h0OiAxOHB4OworICAvKgorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1nL2luc2VydC1hbmNob3IuZ2lmKTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7CisgIGJvcmRlcjogMXB4IGRvdHRlZCBibHVlOworICAqLworfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9jaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvY2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ3OGU0NAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvY2guanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi5Y+W5raIIiwKKyAgICAiT0siOiAi5aW9IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL2N6LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9jei5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmI5OTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9jei5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImN6IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJacnXFoWl0IiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvZGEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZmMwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL2RhLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGVyIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL2RlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEwMDE4NDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQW5jaG9yIG5hbWUiOiAiTmFtZSAoSUQpIiwKKyAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgIkRlbGV0ZSI6ICJMw7ZzY2hlbiIsCisgICAgIkluc2VydCBBbmNob3IiOiAiQW5rZXIgZWluZsO8Z2VuIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvZWUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL2VlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOTE2ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL2VlLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvZWwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL2VsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZTAwNmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL2VsLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAiT0siOiAizpXOvc+EzqzOvs61zrkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZmQ4Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL2VzLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXMiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiRGVsZXRlIjogIlN1cHJpbWlyIiwKKyAgICAiT0siOiAiQWNlcHRhciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9ldS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvZXUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JjOWRiYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvZXUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJldSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiVXR6aSIsCisgICAgIk9LIjogIkFkb3MiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvZmEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL2ZhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZTdmN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL2ZhLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIsCisgICAgIk9LIjogItio2YTZhyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9maS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvZmkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI1NTJiOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvZmkuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUGVydXV0YSIsCisgICAgIk9LIjogIkh5dsOka3N5IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9mci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTgyNzI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9mci5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFuY2hvciBuYW1lIjogIk5vbSBkZSBsJ2FuY3JlIiwKKyAgICAiQ2FuY2VsIjogIkFubnVsZXIiLAorICAgICJEZWxldGUiOiAiU3VwcHJpbWVyIiwKKyAgICAiSW5zZXJ0IEFuY2hvciI6ICJJbnPDqXJlciB1bmUgYW5jcmUiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9oZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvaGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYwMmY3YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvaGUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJoZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgIk9LIjogIteQ15nXqdeV16giCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL2h1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzODUyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL2h1LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaHUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIk3DqWdzZW0iLAorICAgICJPSyI6ICJSZW5kYmVuIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9pdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGFjYjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9pdC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIml0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9qYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VmMTFhNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvamEuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbmNob3IgbmFtZSI6ICLjgqLjg7Pjgqvjg7zjga7lkI3liY0iLAorICAgICJDYW5jZWwiOiAi5Lit5q2iIiwKKyAgICAiRGVsZXRlIjogIuWJiumZpCIsCisgICAgIkluc2VydCBBbmNob3IiOiAi44Ki44Oz44Kr44O844Gu5oy/5YWlIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvbGNfYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTBhZTIwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9sY19iYXNlLmpzCkBAIC0wLDAgKzEsMjkgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLworLy8gTEFORzogImVuIiwgRU5DT0RJTkc6IFVURi04CisvLyBBdXRob3I6IFRyYW5zbGF0b3ItTmFtZSwgPGVtYWlsQGV4YW1wbGUuY29tPgorLy8KKy8vIExhc3QgcmV2aXNpb246IDIwMTgtMDQtMTIKKy8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KKy8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyAoUGxlYXNlLCByZW1vdmUgaW5mb3JtYXRpb24gYmVsb3cpCisvLyBGT1IgVFJBTlNMQVRPUlM6CisvLworLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCisvLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCisvLworLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7CisvLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50CisvLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCisKK3sKKyAgICAiQW5jaG9yIG5hbWUiOiAiIiwKKyAgICAiQ2FuY2VsIjogIiIsCisgICAgIkRlbGV0ZSI6ICIiLAorICAgICJJbnNlcnQgQW5jaG9yIjogIiIsCisgICAgIk9LIjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9sdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTE4OTA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9sdC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdMWhYXVrdGkiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9sdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvbHYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzZDVkMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvbHYuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXRjZWx0IiwKKyAgICAiT0siOiAiTGFiaSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9uYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VmMjc4MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvbmIuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJuYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbmNob3IgbmFtZSI6ICJBbmtlcm5hdm4gKElEKSIsCisgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICJEZWxldGUiOiAiRmplcm5lIiwKKyAgICAiSW5zZXJ0IEFuY2hvciI6ICJTZXR0IGlubiBhbmtlciIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzVhYjIwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9ubC5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFuY2hvciBuYW1lIjogIk5hYW0gKElEKSIsCisgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iLAorICAgICJEZWxldGUiOiAiVmVyd2lqZGVyZW4iLAorICAgICJJbnNlcnQgQW5jaG9yIjogIkFua2VyIGludm9lZ2VuIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvcGwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL3BsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NjA4YWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL3BsLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicGwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQW5jaG9yIG5hbWUiOiAiTmF6d2Ega290d2ljeSIsCisgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICJEZWxldGUiOiAiVXN1xYQiLAorICAgICJJbnNlcnQgQW5jaG9yIjogIldzdGF3IGtvdHdpY8SZIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MDk3YjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQW5jaG9yIG5hbWUiOiAiTm9tZSBkYSDDom5jb3JhIiwKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiRGVsZXRlIjogIkRlbGV0YXIiLAorICAgICJJbnNlcnQgQW5jaG9yIjogIkluc2VyaXIgw4JuY29yYSIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL3JvLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9yby5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDZlMWMzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9yby5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJvIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiLAorICAgICJPSyI6ICJBY2NlcHTEgyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9ydS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFkNTlmMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvcnUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvc2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL3NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZTc2ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL3NoLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvc2kuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL3NpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NzQ4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL3NpLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2kiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIsCisgICAgIk9LIjogIlYgcmVkdSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9zci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvc3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlZTZmNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvc3IuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy9zdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgzMzZkOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvc3YuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvdGguanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL3RoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYTljOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL3RoLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidGgiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIsCisgICAgIk9LIjogIuC4leC4geC4peC4hyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy90ci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvdHIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyYzhiOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL2xhbmcvdHIuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0ciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAixLBwdGFsIiwKKyAgICAiRGVsZXRlIjogIlNpbCIsCisgICAgIk9LIjogIlRhbWFtIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9sYW5nL3ZuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy92bi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDgyZTAyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRBbmNob3IvbGFuZy92bi5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInZuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJI4buneSIsCisgICAgIk9LIjogIsSQ4buTbmcgw70iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0QW5jaG9yL3BvcHVwcy9pbnNlcnRfYW5jaG9yLmh0bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9wb3B1cHMvaW5zZXJ0X2FuY2hvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZTVmNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydEFuY2hvci9wb3B1cHMvaW5zZXJ0X2FuY2hvci5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzxodG1sPgorPGhlYWQ+CisgIDx0aXRsZT5JbnNlcnQgQW5jaG9yPC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vLi4vLi4vcG9wdXBzL3BvcHVwLmNzcyIgLz4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vLi4vcG9wdXBzL3BvcHVwLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICB3aW5kb3cucmVzaXplVG8oNDAwLCAxNTApOworZnVuY3Rpb24gSW5pdCgpIHsKKyAgX19kbGdfdHJhbnNsYXRlKCJJbnNlcnRBbmNob3IiKTsKKyAgX19kbGdfaW5pdCgpOworCisgIHZhciBwYXJhbSA9IHdpbmRvdy5kaWFsb2dBcmd1bWVudHM7CisgIGlmIChwYXJhbSkgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYW1lIikudmFsdWUgPSBwYXJhbVsibmFtZSJdOworICB9CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYW1lIikuZm9jdXMoKTsKK30KKworZnVuY3Rpb24gb25PSygpIHsKKyAgLy8gcGFzcyBkYXRhIGJhY2sgdG8gdGhlIGNhbGxpbmcgd2luZG93CisgIHZhciBwYXJhbSA9IG5ldyBPYmplY3QoKTsKKyAgcGFyYW1bIm5hbWUiXSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYW1lIikudmFsdWU7CisgIF9fZGxnX2Nsb3NlKHBhcmFtKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBvbkRlbGV0ZSgpIHsKKyAgLy8gcGFzcyBkYXRhIGJhY2sgdG8gdGhlIGNhbGxpbmcgd2luZG93CisgIHZhciBwYXJhbSA9IG5ldyBPYmplY3QoKTsKKyAgcGFyYW1bIm5hbWUiXSA9ICIiOworICBfX2RsZ19jbG9zZShwYXJhbSk7CisgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gb25DYW5jZWwoKSB7CisgIF9fZGxnX2Nsb3NlKG51bGwpOworICByZXR1cm4gZmFsc2U7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgY2xhc3M9ImRpYWxvZyIgb25sb2FkPSJJbml0KCkiPgorPGRpdiBjbGFzcz0idGl0bGUiPkluc2VydCBBbmNob3I8L2Rpdj4KKzxmb3JtPgorPHRhYmxlIGJvcmRlcj0iMCIgc3R5bGU9IndpZHRoOiAxMDAlOyI+CisgIDx0cj4KKyAgICA8dGQgY2xhc3M9ImxhYmVsIj5BbmNob3IgbmFtZTwvdGQ+CisgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ibmFtZSIgc3R5bGU9IndpZHRoOiAxMDAlIiAvPjwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorCis8ZGl2IGlkPSJidXR0b25zIj4KKyAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9Im9rIiBvbmNsaWNrPSJyZXR1cm4gb25PSygpOyI+T0s8L2J1dHRvbj4KKyAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG5hbWU9ImRlbGV0ZSIgb25jbGljaz0icmV0dXJuIG9uRGVsZXRlKCk7Ij5EZWxldGU8L2J1dHRvbj4KKyAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG5hbWU9ImNhbmNlbCIgb25jbGljaz0icmV0dXJuIG9uQ2FuY2VsKCk7Ij5DYW5jZWw8L2J1dHRvbj4KKzwvZGl2PgorPC9mb3JtPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9JbnNlcnROb3RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL0luc2VydE5vdGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZhOTY5NQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9JbnNlcnROb3RlLmpzCkBAIC0wLDAgKzEsNjAxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCitJbnNlcnROb3RlIHBsdWdpbiBmb3IgWGluaGEKK19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgICAKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAoreW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwpIAorZm9yIG1vcmUgZGV0YWlscy4KKworSW5zZXJ0Tm90ZQorLS0tLS0tLS0tLQorQWxsb3dzIGZvciB0aGUgaW5zZXJ0aW9uIG9mIGZvb3Rub3Rlcy9lbmRub3Rlcy4gU3VwcG9ydHM6CisgICogQXV0b21hdGljIG51bWJlcmluZworICAqIEF1dG9tYXRpYyBsaW5raW5nIHRvIGFuY2hvcnMKKyAgKiBMaW5rcyBiYWNrIHRvIGVhY2ggc3BlY2lmaWMgY2l0YXRpb24KKyAgKiBTYXZlcyBwcmV2aW91c2x5IHJlZmVyZW5jZWQgbm90ZXMgZm9yIGVhc3kgcmV1c2UKKyAgKiBDbGVhbnVwIG9mIHVucmVmZXJlbmNlZCBub3RlcyAob3IgcmVmZXJlbmNlcyB0byBub24tZXhpc3RlbnQgbm90ZXMpCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2Z1bmN0aW9uIEluc2VydE5vdGUoZWRpdG9yKQoreworICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKKyAgdmFyIGNmZyA9IGVkaXRvci5jb25maWc7CisgIHZhciBzZWxmID0gdGhpczsKKworICBjZmcucmVnaXN0ZXJCdXR0b24oeworICAgIGlkICAgICAgIDogImluc2VydC1ub3RlIiwKKyAgICB0b29sdGlwICA6IHRoaXMuX2xjKCJJbnNlcnQgZm9vdG5vdGUiKSwKKyAgICBpbWFnZSAgICA6IGVkaXRvci5pbWdVUkwoImluc2VydC1ub3RlLmdpZiIsICJJbnNlcnROb3RlIiksCisgICAgdGV4dE1vZGUgOiBmYWxzZSwKKyAgICBhY3Rpb24gICA6IGZ1bmN0aW9uKCkgeworICAgICAgc2VsZi5zaG93KCk7CisgICAgfQorICB9KTsKKyAgY2ZnLmFkZFRvb2xiYXJFbGVtZW50KCJpbnNlcnQtbm90ZSIsICJjcmVhdGVsaW5rIiwgMSk7Cit9OworCitJbnNlcnROb3RlLl9wbHVnaW5JbmZvID0geworICBuYW1lICAgICAgICAgIDogIkluc2VydE5vdGUiLAorICB2ZXJzaW9uICAgICAgIDogIjAuNCIsCisgIGRldmVsb3BlciAgICAgOiAiTmljaG9sYXMgQmVyZ3Nvbi1TaGlsY29jayIsCisgIGRldmVsb3Blcl91cmwgOiAiaHR0cDovL3d3dy5uaWNob2xhc2JzLmNvbSIsCisgIGNfb3duZXIgICAgICAgOiAiTmljaG9sYXMgQmVyZ3Nvbi1TaGlsY29jayIsCisgIHNwb25zb3IgICAgICAgOiAiVGhlIE9wZW4gUGxhbm5pbmcgUHJvamVjdCIsCisgIHNwb25zb3JfdXJsICAgOiAiaHR0cDovL3RvcHAub3BlbnBsYW5zLm9yZyIsCisgIGxpY2Vuc2UgICAgICAgOiAiTEdQTCIKK307CisKK0luc2VydE5vdGUucHJvdG90eXBlLm9uR2VuZXJhdGVPbmNlID0gZnVuY3Rpb24gKCkKK3sKKyAgdGhpcy5ub3RlcyA9IHt9OworICB0aGlzLm5vdGVOdW1zID0ge307CisgIHRoaXMuSURfUFJFRklYID0gIkluc2VydE5vdGVJRF8iOyAvLyBUaGlzIHNob3VsZCBzdWZmaWNlIHRvIGJlIHVuaXF1ZS4uLgorICB0aGlzLk1BUktFUl9TVUZGSVggPSAiX21hcmtlciI7CisgIHRoaXMuTUFSS0VSX0NMQVNTID0gIkluc2VydE5vdGVNYXJrZXIiOworICB0aGlzLkxJTktfQkFDS19TVUZGSVggPSAiX0xpbmtCYWNrcyI7CisgIHRoaXMuTk9URV9MSVNUX0lEID0gIkluc2VydE5vdGVfTm90ZUxpc3QiOworCisgIHRoaXMuX3ByZXBhcmVEaWFsb2coKTsKK307CisKK0luc2VydE5vdGUucHJvdG90eXBlLl9wcmVwYXJlRGlhbG9nID0gZnVuY3Rpb24oKQoreworICB2YXIgc2VsZiA9IHRoaXM7CisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKworICBpZiAoIXRoaXMuaHRtbCkKKyAgeworICAgIFhpbmhhLl9nZXRiYWNrKFhpbmhhLmdldFBsdWdpbkRpcigiSW5zZXJ0Tm90ZSIpICsgIi9kaWFsb2cuaHRtbCIsCisgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oZ2V0YmFjaykgeyAKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuaHRtbCA9IGdldGJhY2s7CisgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wcmVwYXJlRGlhbG9nKCk7CisgICAgICAgICAgICAgICAgICAgfSk7CisgICAgcmV0dXJuOworICB9CisKKyAgdGhpcy5kaWFsb2cgPSBuZXcgWGluaGEuRGlhbG9nKGVkaXRvciwgdGhpcy5odG1sLCAiSW5zZXJ0Tm90ZSIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3dpZHRoOiA0MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VPbkVzY2FwZTogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemFibGU6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlcmVkOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsOiB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKworICB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgib2siKS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7c2VsZi5hcHBseSgpO307CisgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJjYW5jZWwiKS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7c2VsZi5kaWFsb2cuaGlkZSgpO307CisgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJub3RlTWVudSIpLm9uY2hhbmdlID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIG5vdGVJZCA9IHRoaXMub3B0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdLnZhbHVlOworICAgIHZhciB0ZXh0ID0gc2VsZi5ub3Rlc1tub3RlSWRdIHx8ICIiOworICAgIHZhciB0ZXh0QXJlYSA9IHNlbGYuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJub3RlQ29udGVudCIpCisgICAgdGV4dEFyZWEudmFsdWUgPSB0ZXh0OworICAgIGlmICh0ZXh0KSB7CisgICAgICB0ZXh0QXJlYS5kaXNhYmxlZCA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgIHRleHRBcmVhLmRpc2FibGVkID0gZmFsc2U7CisgICAgICB0ZXh0QXJlYS5mb2N1cygpOworICAgIH0KKyAgfTsKKworICB0aGlzLnJlYWR5ID0gdHJ1ZTsKK307CisKK0luc2VydE5vdGUucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbigpCit7CisgIGlmICghdGhpcy5yZWFkeSkKKyAgeworICAgIHZhciBzZWxmID0gdGhpczsKKyAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHtzZWxmLnNob3coKTt9LCA4MCk7CisgICAgcmV0dXJuOworICB9CisgIAorICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisKKyAgLy8gQWxsIG9mIHRoZSBYaW5oYSBkaWFsb2dzIGFyZSBwYXJ0IG9mIHRoZSBtYWluIGRvY3VtZW50LCBub3QgdGhlIGVkaXRvcgorICAvLyBkb2N1bWVudCwgc28gd2UgaGF2ZSB0byB1c2UgdGhlIGNvcnJlY3QgZG9jdW1lbnQgcmVmZXJlbmNlIHRvIG1vZGlmeSB0aGVtLgorICB2YXIgZG9jID0gZG9jdW1lbnQ7CisKKyAgdGhpcy5yZXBhaXJOb3RlcygpOworICAKKyAgLy8gQ2FuJ3QgaW5zZXJ0IGZvb3Rub3RlcyBpbnNpZGUgb2Ygb3RoZXIgZm9vdG5vdGVzLi4uCisgIGlmICh0aGlzLmN1cnNvckluRm9vdG5vdGUoKSkgCisgIHsKKyAgICBhbGVydCgiRm9vdG5vdGVzIGNhbm5vdCBiZSBpbnNlcnRlZCBpbnNpZGUgb2Ygb3RoZXIgZm9vdG5vdGVzLiIpOworICAgIHJldHVybgorICB9CisKKyAgdGhpcy5kaWFsb2cuc2hvdygpOworCisgIHZhciBwb3B1cE1lbnUgPSB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgibm90ZU1lbnUiKTsKKyAgd2hpbGUgKHBvcHVwTWVudS5sYXN0Q2hpbGQudmFsdWUgIT0gIm5ldyIpCisgIHsKKyAgICAvLyBSZW1vdmUgYWxsIG1lbnUgb3B0aW9ucyBleGNlcHQgIk5ldyBub3RlIgorICAgIHBvcHVwTWVudS5yZW1vdmVDaGlsZChwb3B1cE1lbnUubGFzdENoaWxkKTsKKyAgfQorICB2YXIgdGVtcCwgZGlzcGxheU5hbWUsIG47CisgIHZhciBvcmRlcmVkSWRzID0gdGhpcy5fZ2V0T3JkZXJlZE5vdGVJZHMoKTsKKyAgZm9yICh2YXIgaT0wOyBpPG9yZGVyZWRJZHMubGVuZ3RoOyBpKyspCisgIHsKKyAgICBuID0gb3JkZXJlZElkc1tpXTsKKyAgICB0ZW1wID0gZG9jLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpOworICAgIHRlbXAuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIG4pOworICAgIGRpc3BsYXlOYW1lID0gdGhpcy5ub3Rlc1tuXTsKKyAgICBkaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lLnJlcGxhY2UoLzxbXj5dKj4vZ2ksICIiKTsgLy8gWFhYIFRPRE86IFN0cmlwIEhUTUwgbGVzcyBuYWl2ZWx5LgorICAgIGlmIChkaXNwbGF5TmFtZS5sZW5ndGggPiA1MCkgLy8gVHJ1bmNhdGUgcHJldmlldyB0ZXh0IHRvIDUwIGNoYXJzCisgICAgeworICAgICAgZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZS5zdWJzdHIoMCw1MCkgKyAiLi4uIjsKKyAgICB9CisgICAgZGlzcGxheU5hbWUgPSB0aGlzLl9nZXROdW1Gcm9tTm90ZUlkKG4pICsgIi4gIiArIGRpc3BsYXlOYW1lOworICAgIHRlbXAuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKGRpc3BsYXlOYW1lKSk7CisgICAgcG9wdXBNZW51LmFwcGVuZENoaWxkKHRlbXApOworICB9CisKKyAgdmFyIHRleHRBcmVhID0gdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoIm5vdGVDb250ZW50Iik7CisgIHRleHRBcmVhLmRpc2FibGVkID0gZmFsc2U7CisgIHRleHRBcmVhLmZvY3VzKCk7CisgIHRleHRBcmVhLnZhbHVlID0gIiI7Cit9OworCisvLyBDaGVja3MgdG8gc2VlIHdoZXRoZXIgb3Igbm90IHRoZSBjdXJzb3IgaXMgcGxhY2VkIGluc2lkZSBvZiBhIGZvb3Rub3RlCitJbnNlcnROb3RlLnByb3RvdHlwZS5jdXJzb3JJbkZvb3Rub3RlID0gZnVuY3Rpb24oaWdub3JlTWFya2VycykKK3sKKyAgdmFyIGFuY2VzdG9ycyA9IHRoaXMuZWRpdG9yLmdldEFsbEFuY2VzdG9ycygpOworICBmb3IgKHZhciBpPTA7IGk8YW5jZXN0b3JzLmxlbmd0aDsgaSsrKSAKKyAgeworICAgIGlmIChhbmNlc3RvcnNbaV0uaWQgPT0gdGhpcy5OT1RFX0xJU1RfSUQpCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoYW5jZXN0b3JzW2ldLmNsYXNzTmFtZSA9PSB0aGlzLk1BUktFUl9DTEFTUyAmJiAhaWdub3JlTWFya2VycykKKyAgICAgIHJldHVybiB0cnVlOworICB9CisgIAorICByZXR1cm4gZmFsc2U7Cit9CisKKy8qICBUaGlzIGZ1bmN0aW9uIG1ha2VzIHN1cmUgYWxsIG9mIHRoZSBub3RlcyBhcmUgY29uc2lzdGVudC4KKyAgICBTcGVjaWZpY2FsbHk6CisgICAgICAgKiBJZiBhIG5vdGUgZXhpc3RzIGJ1dCBpcyBuZXZlciByZWZlcnJlZCB0bywgdGhhdCBub3RlIGlzIHJlbW92ZWQKKyAgICAgICAqIENvbnZlcnNlbHksIGlmIGEgbm90ZSBpcyByZWZlcnJlZCB0byBidXQgZG9lcyBub3QgZXhpc3QsIHRoZSAKKyAgICAgICAgIHJlZmVyZW5jZXMgYXJlIHJlbW92ZWQKKyAgICAgICAqIElmIHRoZSBtYXJrdXAgZm9yIGEgbm90ZSBtYXJrZXIgZXhpc3RzIGJ1dCBjb250YWlucyBubyB2aXNpYmxlCisgICAgICAgICB0ZXh0LCB0aGUgbWFya3VwIGlzIHJlbW92ZWQKKyAgICAgICAqIEFsbCBudW1iZXJpbmcgaXMgdXBkYXRlZCBhcyBmb2xsb3dzOgorICAgICAgICAgIC0gdGhlIGZpcnN0IG5vdGUgaXMgbnVtYmVyZWQgMQorICAgICAgICAgIC0gZWFjaCBub3RlIHRoZXJlYWZ0ZXIgaXMgbnVtYmVyZWQgc2VxdWVudGlhbGx5LCB1bmxlc3MgaXQgaGFzCisgICAgICAgICAgICBhbHJlYWR5IGJlZW4gcmVmZXJlbmNlZCwgaW4gd2hpY2ggY2FzZSBpdCdzIGdpdmVuIHRoZSBzYW1lCisgICAgICAgICAgICBudW1iZXIgYXMgaXQgd2FzIHRoZSBmaXJzdCB0aW1lIGl0IHdhcyByZWZlcmVuY2VkLgorICAgICAgICogVGhlIG5vdGUgdGV4dCBzdG9yZWQgaW4gdGhlIHRoaXMubm90ZXMgaGFzaCBpcyB1cGRhdGVkIHRvIHJlZmxlY3QKKyAgICAgICAgIGFueSBjaGFuZ2VzIG1hZGUgYnkgdGhlIHVzZXIgKHNvIGlmIHRoZSB1c2VyIGNoYW5nZXMgdGhlIAorICAgICAgICAgY2l0YXRpb24gYm9keSBpbiBYaW5oYSB3ZSBkb24ndCBvdmVyd3JpdGUgdGhlc2UgY2hhbmdlcyBuZXh0CisgICAgICAgICB0aW1lIHdlIHVwZGF0ZSB0aGluZ3MpCisgICAgICAgKiBUaGUgbm90ZU51bXMgYXJyYXkgaXMgcmVnZW5lcmF0ZWQgc28gYXMgdG8gYmUgdXAgdG8gZGF0ZQorCisqLworSW5zZXJ0Tm90ZS5wcm90b3R5cGUucmVwYWlyTm90ZXMgPSBmdW5jdGlvbigpIAoreworICB2YXIgc2VsZiA9IHRoaXM7CisgIHZhciBub3RlOworICB2YXIgbWFya2VyczsKKyAgdmFyIG1hcmtlcjsKKyAgdmFyIGlzRW1wdHk7CisgIHZhciB0ZW1wOworICB2YXIgZG9jID0gdGhpcy5lZGl0b3IuX2RvYzsKKworICB0aGlzLnJlcGFpclNjaGVkdWxlZCA9IGZhbHNlOworCisgIC8vIEZpcnN0LCB3ZSByZW1vdmUgYW55IG1hcmtlcnMgaWYgdGhleSByZWZlcmVuY2UgYSBub3RlIHRoYXQgZG9lc24ndCBleGlzdC4KKyAgLy8gSWYgdGhlIG5vdGUgZG9lcyBleGlzdCwgd2UgbWFrZSBzdXJlIHdlIGhhdmUgYSByZWZlcmVuY2UgdG8gaXQgYnkKKyAgLy8gY2FsbGluZyB0aGlzLl9zYXZlTm90ZSgpCisgIG1hcmtlcnMgPSB0aGlzLl9nZXRNYXJrZXJzKCk7CisgIGZvciAodmFyIGk9MDsgaTxtYXJrZXJzLmxlbmd0aDsgaSsrKQorICB7CisgICAgbWFya2VyID0gbWFya2Vyc1tpXTsKKworICAgIC8vIFJlbW92ZSBlbXB0eSBtYXJrZXJzCisgICAgaXNFbXB0eSA9IGZhbHNlOworICAgIGlmIChtYXJrZXIpIC8vIGNoZWNrIGlmIGFuY2hvciBpcyBlbXB0eQorICAgICAgaXNFbXB0eSA9IG1hcmtlci5pbm5lckhUTUwubWF0Y2goL14oPHNwYW5bXj5dKj4pPyg8c3VwPik/KDxhW14+XSo+KT9bXHNdKig8XC9hPik/KDxcL3N1cD4pPyg8XC9zcGFuPik/JC9tKTsKKyAgICBpZiAoaXNFbXB0eSkKKyAgICAgIG1hcmtlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG1hcmtlcik7CisKKworICAgIHZhciBub3RlSWQgPSB0aGlzLl9nZXRJZEZyb21NYXJrZXJJZChtYXJrZXIuaWQpOworICAgIGlmICghdGhpcy5ub3Rlc1tub3RlSWRdKSAKKyAgICB7CisgICAgICAvLyBXZSBkb24ndCBoYXZlIHRoaXMgbm90ZSBzdG9yZWQsIGxldCdzIHNlZSBpZiAKKyAgICAgIC8vIGl0IGFjdHVhbGx5IGV4aXN0cy4uLgorICAgICAgbm90ZSA9IGRvYy5nZXRFbGVtZW50QnlJZChub3RlSWQpOworICAgICAgaWYgKG5vdGUpCisgICAgICB7CisgICAgICAgIHRoaXMuX3NhdmVOb3RlKG5vdGUpOworICAgICAgfSBlbHNlCisgICAgICB7CisgICAgICAgIGlmIChtYXJrZXIpCisgICAgICAgICAgbWFya2VyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobWFya2VyKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAvLyBOb3cgd2UgaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgbm90ZSBpZHMgd2UgaGF2ZSBzdG9yZWQuLi4KKyAgZm9yICh2YXIgaWQgaW4gdGhpcy5ub3RlcykKKyAgeworICAgIC8vIEdldCByZWZlcmVuY2UgdG8gbm90ZQorICAgIG5vdGUgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAgIAorICAgIG1hcmtlcnMgPSB0aGlzLl9nZXRNYXJrZXJzKGlkKTsKKyAgICBpZiAobm90ZSkKKyAgICB7CisgICAgICBpZiAobWFya2Vycy5sZW5ndGggPT0gMCkgLy8gUmVtb3ZlIG5vdGUgaWYgaXQncyBub3QgcmVmZXJlbmNlZCBhbnl3aGVyZQorICAgICAgeworICAgICAgICAvLyByZW1vdmUgdGhlIG5vdGUKKyAgICAgICAgbm90ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vdGUpOworICAgICAgICBkZWxldGUgdGhpcy5ub3Rlc1tpZF07CisgICAgICB9IGVsc2UgCisgICAgICB7CisgICAgICAgIC8vIFRoZSBub3RlIGV4aXN0cyBhbmQgKmlzKiByZWZlcmVuY2VkLCBzbyB3ZSBzYXZlIGl0cyBjb250ZW50cworICAgICAgICB0aGlzLl9zYXZlTm90ZShub3RlKTsKKyAgICAgIH0KKyAgICB9IGVsc2UKKyAgICB7CisgICAgICAvLyBOb3RlIG5vIGxvbmdlciBleGlzdHMuIFJlbW92ZSBhbnkgcmVmZXJlbmNlcyB0byBpdC4KKyAgICAgIGZvciAodmFyIGk9MDsgaTxtYXJrZXJzLmxlbmd0aDsgaSsrKQorICAgICAgeworICAgICAgICBtYXJrZXJzW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobWFya2Vyc1tpXSk7CisgICAgICB9CisgICAgICBkZWxldGUgdGhpcy5ub3Rlc1tpZF07CisgICAgfQorICB9CisKKyAgLy8gQ29ycmVjdCBtYXJrZXIgbnVtYmVyaW5nCisgIHRoaXMuX3VwZGF0ZVJlZk51bXMoKTsKKworICAvLyBBdCB0aGlzIHBvaW50IHdlIG5vdyBoYXZlIGFsbCBvZiB0aGUgbm90ZSBtYXJrZXJzIGNvcnJlY3RseQorICAvLyBudW1iZXJlZCwgYW4gdXAtdG8tZGF0ZSBoYXNoICh0aGlzLm5vdGVOdW1zKSBvZiBub3RlIG51bWJlcnMgCisgIC8vIGtleWVkIHRvIG5vdGUgaWRzLCBhbmQgbm8gc3RyYXkgbWFya2VycyBvciB1bnJlZmVyZW5jZWQgbm90ZXMuCisKKyAgLy8gRmluYWwgc3RlcDogQ29ycmVjdCB0aGUgbnVtYmVyaW5nL29yZGVyIG9mIHRoZSBhY3R1YWwgbm90ZXMKKyAgdmFyIG5vdGVMaXN0ID0gZG9jLmdldEVsZW1lbnRCeUlkKHRoaXMuTk9URV9MSVNUX0lEKTsKKyAgdmFyIG5ld05vdGVMaXN0ID0gdGhpcy5fY3JlYXRlTm90ZUxpc3QoKTsKKyAgaWYgKG5ld05vdGVMaXN0KQorICB7CisgICAgbm90ZUxpc3QucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3Tm90ZUxpc3QsIG5vdGVMaXN0KTsKKyAgfSBlbHNlCisgIHsKKyAgICBpZiAobm90ZUxpc3QpCisgICAgICBub3RlTGlzdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vdGVMaXN0KTsKKyAgfQorfTsKKworSW5zZXJ0Tm90ZS5wcm90b3R5cGUuX3NhdmVOb3RlID0gZnVuY3Rpb24obm90ZSkKK3sKKyAgdmFyIGRvYyA9IHRoaXMuZWRpdG9yLl9kb2M7CisgIC8vIEJlZm9yZSBzYXZpbmcgYSBub3RlJ3MgY29udGVudHMsIHdlIGRvIHR3byB0aGluZ3M6CisgIC8vIDEpIHdlIHJlbW92ZSB0aGUgbWFya3VwIHdlIGluc2VydGVkIHNvIHdlIGRvbid0IGVuZCB1cCB3aXRoIGR1cGxpY2F0ZSBsaW5rcworICAvLyAyKSBjaGVjayB0byBzZWUgaWYgdGhlIG5vdGUgaXMgZW1wdHksIGFuZCBpZiBzbywgd2UgcmVtb3ZlIGl0CisgIHZhciB0ZW1wID0gZG9jLmdldEVsZW1lbnRCeUlkKHRoaXMuX2dldExpbmtCYWNrU3BhbklkKG5vdGUuaWQpKTsKKyAgaWYgKHRlbXApCisgICAgdGVtcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRlbXApOworICBpZiAobm90ZS5pbm5lckhUTUwpCisgIHsKKyAgICB0aGlzLm5vdGVzW25vdGUuaWRdID0gbm90ZS5pbm5lckhUTUw7CisgIH0gZWxzZQorICB7CisgICAgLy8gSWYgd2UncmUgaGVyZSB0aGVuIHRoZSBub3RlIGlzIGVtcHR5LAorICAgIC8vIHNvIHdlIGRlbGV0ZSBpdCBhbmQgYW55IG1hcmtlcnMgZm9yIGl0LgorICAgIGRlbGV0ZSB0aGlzLm5vdGVzW25vdGUuaWRdOworICAgIG1hcmtlcnMgPSB0aGlzLl9nZXRNYXJrZXJzKG5vdGUuaWQpOworICAgIGZvciAodmFyIGk9MDsgaTxtYXJrZXJzLmxlbmd0aDsgaSsrKQorICAgICAgbWFya2Vyc1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG1hcmtlcnNbaV0pOworICB9Cit9OworCitJbnNlcnROb3RlLnByb3RvdHlwZS5fdXBkYXRlUmVmTnVtcyA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIHJ1bm5pbmdDb3VudCA9IDE7IC8vIGZpcnN0IHJlZmVyZW5jZSBpcyAxCisgIHZhciBudW07CisgIHZhciBtYXJrZXI7CisgIHZhciBub3RlSWQ7CisKKyAgLy8gUmVzZXQgYWxsIG5vdGUgbnVtYmVyaW5nLi4uCisgIHRoaXMubm90ZU51bXMgPSB7fTsKKyAgCisgIHZhciBtYXJrZXJzID0gdGhpcy5fZ2V0TWFya2VycygpOworCisgIGZvciAodmFyIGk9MDsgaTxtYXJrZXJzLmxlbmd0aDsgaSsrKQorICB7CisgICAgbWFya2VyID0gbWFya2Vyc1tpXTsKKyAgICBub3RlSWQgPSB0aGlzLl9nZXRJZEZyb21NYXJrZXJJZChtYXJrZXIuaWQpOworICAgIGlmICh0aGlzLm5vdGVOdW1zW25vdGVJZF0pCisgICAgeworICAgICAgbnVtID0gdGhpcy5ub3RlTnVtc1tub3RlSWRdOworICAgIH0gZWxzZQorICAgIHsKKyAgICAgIHRoaXMubm90ZU51bXNbbm90ZUlkXSA9IHJ1bm5pbmdDb3VudDsKKyAgICAgIG51bSA9IHJ1bm5pbmdDb3VudCsrOworICAgIH0KKyAgICAvLyBzcGFuIC0+IHN1cCAtPiBhbmNob3IKKyAgICBtYXJrZXIuZmlyc3RDaGlsZC5maXJzdENoaWxkLmlubmVySFRNTCA9IG51bTsKKyAgICAvLyBYWFggVE9ETzogZG9uJ3QgdXNlIGZpcnN0Q2hpbGQuZmlyc3RDaGlsZD8KKyAgfQorfTsKKworSW5zZXJ0Tm90ZS5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbigpCit7CisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgdmFyIHBhcmFtID0gdGhpcy5kaWFsb2cuaGlkZSgpOworICB2YXIgbm90ZUlkID0gcGFyYW1bJ25vdGVNZW51J10udmFsdWU7CisgIHZhciBuZXdOb3RlID0gKG5vdGVJZCA9PSAibmV3Iik7CisgIHZhciBub3RlQ29udGVudCA9IHBhcmFtWydub3RlQ29udGVudCddOworICB2YXIgZG9jID0gZWRpdG9yLl9kb2M7CisKKyAgaWYgKG5ld05vdGUpIC8vIEluc2VydGluZyBhIG5ldyBub3RlCisgICAgbm90ZUlkID0gdGhpcy5fZ2V0TmV4dElkKHRoaXMuSURfUFJFRklYKTsKKworICB0aGlzLm5vdGVzW25vdGVJZF0gPSBub3RlQ29udGVudDsKKworICB2YXIgbWFya2VyVGVtcGxhdGUgPSB0aGlzLl9jcmVhdGVOb3RlTWFya2VyKG5vdGVJZCkKKyAgZWRpdG9yLmluc2VydE5vZGVBdFNlbGVjdGlvbihtYXJrZXJUZW1wbGF0ZSk7CisgIHZhciBtYXJrZXIgPSBkb2MuZ2V0RWxlbWVudEJ5SWQobWFya2VyVGVtcGxhdGUuaWQpOworICAKKyAgdmFyIGN1cnJlbnROb3RlTGlzdCA9IGRvYy5nZXRFbGVtZW50QnlJZCh0aGlzLk5PVEVfTElTVF9JRCk7CisgIHZhciBuZXdOb3RlTGlzdCA9IHRoaXMuX2NyZWF0ZU5vdGVMaXN0KCk7CisgIHZhciBib2R5ID0gZG9jLmJvZHk7CisgIGlmIChjdXJyZW50Tm90ZUxpc3QpCisgIHsKKyAgICBib2R5LnJlcGxhY2VDaGlsZChuZXdOb3RlTGlzdCwgY3VycmVudE5vdGVMaXN0KTsKKyAgfSBlbHNlCisgIHsKKyAgICBib2R5LmFwcGVuZENoaWxkKG5ld05vdGVMaXN0KTsKKyAgfQorCisgIHZhciBuZXdlbCA9IGRvYy5jcmVhdGVUZXh0Tm9kZSgnXHUwMGEwJyk7CisgIGlmIChtYXJrZXIubmV4dFNpYmxpbmcpCisgIHsKKyAgICBuZXdlbCA9IG1hcmtlci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdlbCwgbWFya2VyLm5leHRTaWJsaW5nKTsKKyAgfSBlbHNlCisgIHsKKyAgICBuZXdlbCA9IG1hcmtlci5wYXJlbnROb2RlLmFwcGVuZENoaWxkKG5ld2VsKTsKKyAgfQorICB0aGlzLnJlcGFpck5vdGVzKCk7CisgIGVkaXRvci5zZWxlY3ROb2RlQ29udGVudHMobmV3ZWwsZmFsc2UpOworfTsKKworSW5zZXJ0Tm90ZS5wcm90b3R5cGUuX2NyZWF0ZU5vdGVMaXN0ID0gZnVuY3Rpb24oKQoreworICB2YXIgZG9jID0gdGhpcy5lZGl0b3IuX2RvYzsKKyAgdmFyIG5vdGVMaXN0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoIm9sIik7CisgIG5vdGVMaXN0LmlkID0gdGhpcy5OT1RFX0xJU1RfSUQ7CisgIHZhciBvcmRlcmVkSWRzID0gdGhpcy5fZ2V0T3JkZXJlZE5vdGVJZHMoKTsKKyAgaWYgKG9yZGVyZWRJZHMubGVuZ3RoID09IDApCisgICAgcmV0dXJuIG51bGw7CisgIHZhciBub3RlLCBpZDsKKyAgZm9yICh2YXIgaT0wOyBpPG9yZGVyZWRJZHMubGVuZ3RoOyBpKyspCisgIHsKKyAgICBpZCA9IG9yZGVyZWRJZHNbaV07CisgICAgbm90ZSA9IHRoaXMuX2NyZWF0ZU5vdGVOb2RlKGlkLCB0aGlzLm5vdGVzW2lkXSk7CisgICAgbm90ZUxpc3QuYXBwZW5kQ2hpbGQobm90ZSk7CisgIH0KKyAgcmV0dXJuIG5vdGVMaXN0OworfTsKKworSW5zZXJ0Tm90ZS5wcm90b3R5cGUuX2NyZWF0ZU5vdGVNYXJrZXIgPSBmdW5jdGlvbihub3RlSWQpCit7CisgIC8vIENyZWF0ZSB0aGUgbm90ZSBtYXJrZXIsIGkuZS4sIHRoZSAjIHN1cGVyc2NyaXB0CisgIHZhciBkb2MgPSB0aGlzLmVkaXRvci5fZG9jOworICB2YXIgbm90ZU51bSA9IHRoaXMuX2dldE51bUZyb21Ob3RlSWQobm90ZUlkKTsKKworICB2YXIgbGluayA9IGRvYy5jcmVhdGVFbGVtZW50KCJhIik7CisgIGxpbmsuaHJlZiA9ICIjIiArIG5vdGVJZDsKKyAgbGluay5pbm5lckhUTUwgPSBub3RlTnVtOworICAKKyAgdmFyIHN1cGVyc2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoInN1cCIpOworICBzdXBlcnNjcmlwdC5hcHBlbmRDaGlsZChsaW5rKTsKKworICB2YXIgc3BhbiA9IGRvYy5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgIHNwYW4uaWQgPSB0aGlzLl9nZXROZXh0TWFya2VySWQobm90ZUlkKTsKKyAgc3Bhbi5jbGFzc05hbWUgPSB0aGlzLk1BUktFUl9DTEFTUzsKKyAgc3Bhbi5hcHBlbmRDaGlsZChzdXBlcnNjcmlwdCk7CisKKyAgcmV0dXJuIHNwYW4KK307CisKK0luc2VydE5vdGUucHJvdG90eXBlLl9jcmVhdGVOb3RlTm9kZSA9IGZ1bmN0aW9uKG5vdGVJZCwgbm90ZUNvbnRlbnQpCit7CisgIHZhciBkb2MgPSB0aGlzLmVkaXRvci5fZG9jOworCisgIHZhciBhbmNob3I7CisgIHZhciBzdXBlcnNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KCJzdXAiKTsKKyAgdmFyIG1hcmtlcnMgPSB0aGlzLl9nZXRNYXJrZXJzKG5vdGVJZCk7CisgIHZhciB0ZW1wOworICBmb3IgKHZhciBpPTA7IGk8bWFya2Vycy5sZW5ndGg7IGkrKykKKyAgeworICAgIGFuY2hvciA9IGRvYy5jcmVhdGVFbGVtZW50KCJhIik7ICAgIAorICAgIGlmIChtYXJrZXJzLmxlbmd0aCA9PSAxKQorICAgIHsKKyAgICAgIGFuY2hvci5pbm5lckhUTUwgPSAiXiI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBhbmNob3IuaW5uZXJIVE1MID0gdGhpcy5fbGV0dGVyTnVtKGkpOworICAgIH0KKyAgICBhbmNob3IuaHJlZiA9ICIjIiArIG1hcmtlcnNbaV0uaWQ7CisgICAgc3VwZXJzY3JpcHQuYXBwZW5kQ2hpbGQoYW5jaG9yKTsKKyAgICBpZiAoaSA8IG1hcmtlcnMubGVuZ3RoLTEpCisgICAgeworICAgICAgdGVtcCA9IGRvYy5jcmVhdGVUZXh0Tm9kZSgiLCAiKTsKKyAgICAgIHN1cGVyc2NyaXB0LmFwcGVuZENoaWxkKHRlbXApOworICAgIH0KKyAgfQorCisgIHZhciBzcGFuID0gZG9jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgc3Bhbi5pZCA9IHRoaXMuX2dldExpbmtCYWNrU3BhbklkKG5vdGVJZCk7CisgIHNwYW4uYXBwZW5kQ2hpbGQoc3VwZXJzY3JpcHQpOworCisgIHZhciBsaSA9IGRvYy5jcmVhdGVFbGVtZW50KCJsaSIpOworICBsaS5pZCA9IG5vdGVJZDsKKyAgbGkuaW5uZXJIVE1MID0gbm90ZUNvbnRlbnQ7CisgIGxpLmFwcGVuZENoaWxkKHNwYW4pOworCisgIHJldHVybiBsaTsKK307CisKK0luc2VydE5vdGUucHJvdG90eXBlLl9nZXROZXh0SWQgPSBmdW5jdGlvbihwcmVmaXgpCit7CisgIC8vIFdlIGNhbid0IGp1c3QgdXNlIFhpbmhhLnVuaXEgaGVyZSBiZWNhdXNlIGl0IGRvZXNuJ3QKKyAgLy8gd29yayBhY3Jvc3MgZWRpdGluZyBzZXNzaW9ucy4gRS5nLiwgaXQgd2lsbCBicmVhayBpZiAKKyAgLy8gdGhlIHVzZXIgY29waWVzIHRoZSBodG1sIGZyb20gb25lIGVkaXRvciB0byBhbm90aGVyLgorICB2YXIgaWQgPSBYaW5oYS51bmlxKHByZWZpeCk7CisgIHdoaWxlICh0aGlzLmVkaXRvci5fZG9jLmdldEVsZW1lbnRCeUlkKGlkKSkKKyAgICBpZCA9IFhpbmhhLnVuaXEocHJlZml4KTsKKyAgcmV0dXJuIGlkOworfTsKKworSW5zZXJ0Tm90ZS5wcm90b3R5cGUuX2dldE9yZGVyZWROb3RlSWRzID0gZnVuY3Rpb24oKQoreworICB2YXIgc2VsZiA9IHRoaXM7CisgIHZhciBvcmRlcmVkSWRzID0gbmV3IEFycmF5KCk7CisgIGZvciAodmFyIGlkIGluIHRoaXMubm90ZXMpCisgICAgb3JkZXJlZElkcy5wdXNoKGlkKTsKKyAgCisgIG9yZGVyZWRJZHMuc29ydChmdW5jdGlvbihhLGIpIHsKKyAgICB2YXIgbjEgPSBzZWxmLl9nZXROdW1Gcm9tTm90ZUlkKGEpOworICAgIHZhciBuMiA9IHNlbGYuX2dldE51bUZyb21Ob3RlSWQoYik7CisKKyAgICByZXR1cm4gKG4xIC0gbjIpOworICB9KTsKKworICByZXR1cm4gb3JkZXJlZElkczsKK307CisKK0luc2VydE5vdGUucHJvdG90eXBlLl9nZXROdW1Gcm9tTm90ZUlkID0gZnVuY3Rpb24obm90ZUlkKQoreworICBpZiAoIXRoaXMubm90ZU51bXNbbm90ZUlkXSkKKyAgICByZXR1cm4gMDsKKyAgcmV0dXJuIHRoaXMubm90ZU51bXNbbm90ZUlkXTsKK307CisKKworLy8gUmV0dXJuIGFycmF5IG9mIGFsbCBtYXJrZXJzIHRoYXQgcmVmZXJlbmNlIHRoZSBzcGVjaWZpZWQgbm90ZS4KKy8vIElmIG5vdGVJZCBpcyBub3Qgc3VwcGxpZWQsICphbGwqIG1hcmtlcnMgYXJlIHJldHVybmVkLgorSW5zZXJ0Tm90ZS5wcm90b3R5cGUuX2dldE1hcmtlcnMgPSBmdW5jdGlvbihub3RlSWQpCit7CisgIHZhciBkb2MgPSB0aGlzLmVkaXRvci5fZG9jOworICB2YXIgbWFya2VycyA9IFhpbmhhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZG9jLCB0aGlzLk1BUktFUl9DTEFTUyk7CisgIAorICBpZiAoIW5vdGVJZCkKKyAgICByZXR1cm4gbWFya2VyczsKKyAgCisgIHZhciBlbHMgPSBuZXcgQXJyYXkoKTsKKyAgZm9yICh2YXIgaT0wOyBpPG1hcmtlcnMubGVuZ3RoOyBpKyspCisgIHsKKyAgICBpZiAodGhpcy5fZ2V0SWRGcm9tTWFya2VySWQobWFya2Vyc1tpXS5pZCkgPT0gbm90ZUlkKQorICAgIHsKKyAgICAgIGVscy5wdXNoKG1hcmtlcnNbaV0pOworICAgIH0KKyAgfQorICByZXR1cm4gZWxzOworfTsKKworSW5zZXJ0Tm90ZS5wcm90b3R5cGUuX2dldE5leHRNYXJrZXJJZCA9IGZ1bmN0aW9uKG5vdGVJZCkKK3sKKyAgcmV0dXJuIHRoaXMuX2dldE5leHRJZChub3RlSWQgKyB0aGlzLk1BUktFUl9TVUZGSVgpOworfTsKKworSW5zZXJ0Tm90ZS5wcm90b3R5cGUuX2dldElkRnJvbU1hcmtlcklkID0gZnVuY3Rpb24obWFya2VySWQpCit7CisgIHJldHVybiBtYXJrZXJJZC5zdWJzdHIoMCwgbWFya2VySWQuc2VhcmNoKHRoaXMuTUFSS0VSX1NVRkZJWCkpOworfTsKKworSW5zZXJ0Tm90ZS5wcm90b3R5cGUuX2dldExpbmtCYWNrU3BhbklkID0gZnVuY3Rpb24obm90ZUlkKQoreworICByZXR1cm4gbm90ZUlkICsgdGhpcy5MSU5LX0JBQ0tfU1VGRklYOworfTsKKworSW5zZXJ0Tm90ZS5wcm90b3R5cGUuX2xjID0gZnVuY3Rpb24oc3RyaW5nKQoreworICByZXR1cm4gWGluaGEuX2xjKHN0cmluZywgIkluc2VydE5vdGUiKTsKK307CisKKy8vIFByb2JhYmx5IG92ZXJraWxsLCBidXQgaXQgZG9lcyB0aGUgam9iCitJbnNlcnROb3RlLnByb3RvdHlwZS5fbGV0dGVyTnVtID0gZnVuY3Rpb24obnVtKQoreworICB2YXIgbGV0dGVycyA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CisgIHZhciBsZW4gPSBNYXRoLmZsb29yKG51bS9sZXR0ZXJzLmxlbmd0aCkgKyAxOworICB2YXIgcyA9ICIiOworICBmb3IgKHZhciBpPTA7IGk8bGVuOyBpKyspCisgICAgcyArPSBsZXR0ZXJzLnN1YnN0cihudW0gJSBsZXR0ZXJzLmxlbmd0aCwxKTsKKyAgcmV0dXJuIHM7Cit9OworCitJbnNlcnROb3RlLnByb3RvdHlwZS5pbndhcmRIdG1sID0gZnVuY3Rpb24oaHRtbCkKK3sKKyAgcmV0dXJuIGh0bWw7Cit9OworCitJbnNlcnROb3RlLnByb3RvdHlwZS5vdXR3YXJkSHRtbCA9IGZ1bmN0aW9uKGh0bWwpCit7CisgIHRoaXMucmVwYWlyTm90ZXMoKTsKKyAgcmV0dXJuIHRoaXMuZWRpdG9yLmdldEhUTUwoKTsKK307CisKK0luc2VydE5vdGUucHJvdG90eXBlLm9uS2V5UHJlc3MgPSBmdW5jdGlvbiAoZXZlbnQpCit7CisgIC8vIFRoaXMgc2VlbXMgYSBiaXQgaGFja3ksIGJ1dCBJIGRvbid0IHByZXNlbnRseSBzZWUKKyAgLy8gYSBiZXR0ZXIgd2F5LgorICAvL0BOT1RFOiA4ID0gQmFja3NwYWNlLCA0NiA9IERlbGV0ZTsgdGhpcyB1bmRvY3VtZW50ZWQKKyAgLy8gIGZ1bmN0aW9uIGFwZWFycyB0byBiZSBmb3IgaGFuZGxpbmcgZGVsZXRlIG5vdGUgcmVmZXJlbmNlcworICAvLyAgdG8gaGF2ZSB0aGUgbm90ZSBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQgYWxzbworICBpZiAoZXZlbnQua2V5Q29kZSA9PSA4IHx8IGV2ZW50LmtleUNvZGUgPT0gNDYpCisgIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgaWYgKCF0aGlzLnJlcGFpclNjaGVkdWxlZCAmJiAhdGhpcy5jdXJzb3JJbkZvb3Rub3RlKHRydWUpKSAvLyBpZ25vcmUgaWYgaW4gYSBmb290bm90ZQorICAgIHsKKyAgICAgIHRoaXMucmVwYWlyU2NoZWR1bGVkID0gdHJ1ZTsKKyAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBzZWxmLnJlcGFpck5vdGVzKCk7IH0sIDEwMDApOworICAgIH0KKyAgfQorICByZXR1cm4gZmFsc2U7Cit9OworCisvKioKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IG1vZGUgZWl0aGVyICd0ZXh0bW9kZScgb3IgJ3d5c2l3eWcnCisgKi8KK0luc2VydE5vdGUucHJvdG90eXBlLm9uTW9kZSA9IGZ1bmN0aW9uIChtb2RlKQoreworICByZXR1cm4gZmFsc2U7Cit9OworCisvKioKKyAqIAorICogQHBhcmFtIHtTdHJpbmd9IG1vZGUgZWl0aGVyICd0ZXh0bW9kZScgb3IgJ3d5c2l3eWcnCisgKi8KK0luc2VydE5vdGUucHJvdG90eXBlLm9uQmVmb3JlTW9kZSA9IGZ1bmN0aW9uIChtb2RlKQoreworICByZXR1cm4gZmFsc2U7Cit9OwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2RpYWxvZy5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2RpYWxvZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZmE3MWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvZGlhbG9nLmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPGgxIGlkPSJbaDFdIj48bDEwbj5JbnNlcnQgTm90ZTwvbDEwbj48L2gxPgorPGRpdiBzdHlsZT0ibWFyZ2luOiAxMHB4IDEwcHggMHB4IDEwcHg7Ij4KKyAgPGxhYmVsPjxsMTBuPkluc2VydDwvbDEwbj48L2xhYmVsPgorICA8c2VsZWN0IGlkPSJbbm90ZU1lbnVdIiBuYW1lPSJbbm90ZU1lbnVdIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTogNnB4OyB3aWR0aDogMjAwcHg7Ij4KKyAgICA8b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSJuZXciIGlkPSJbbmV3Tm90ZU9wdGlvbl0iPk5ldyBmb290bm90ZTwvb3B0aW9uPgorICA8L3NlbGVjdD4KKyAgPHRleHRhcmVhIGlkPSJbbm90ZUNvbnRlbnRdIiBuYW1lPSJbbm90ZUNvbnRlbnRdIiBzdHlsZT0id2lkdGg6IDM3NXB4OyIgcm93cz0iNiI+PC90ZXh0YXJlYT4KKzwvZGl2PgorPGRpdiBjbGFzcz0iYnV0dG9ucyI+CisgIDxpbnB1dCB0eXBlPSJidXR0b24iIGlkPSJbb2tdIiB2YWx1ZT0iXyhJbnNlcnQpIiAvPgorICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0iW2NhbmNlbF0iIHZhbHVlPSJfKENhbmNlbCkiIC8+Cis8L2Rpdj4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9pbWcvaW5zZXJ0LW5vdGUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2ltZy9pbnNlcnQtbm90ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U5ZGQxYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9pbWcvaW5zZXJ0LW5vdGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL2NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvY2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJlNWJkNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL2NoLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuWPlua2iCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvY3ouanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9jei5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjZhNDhiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvY3ouanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjeiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvZGEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9kYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjg1NDAxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvZGEuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxsZXIiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUxODg4NQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvZWUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9lZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWNkODQwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvZWUuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTG9vYnUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL2VsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I0Njk1ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL2VsLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExM2VhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9lcy5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVzIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvZXUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9ldS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDIxYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvZXUuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJldSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiVXR6aSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvZmEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9mYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDU3MTg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvZmEuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi2KfZhti12LHYp9mBIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9maS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL2ZpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMzNhYzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9maS5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9mci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NGMyNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9mci5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGVyIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9oZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NWRkYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9oZS5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImhlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9odS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL2h1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZDU2NjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9odS5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImh1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJNw6lnc2VtIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9pdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL2l0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYmE0M2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9pdC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIml0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMzODliOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL2phLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiamEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuS4reatoiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgyMWQ2NgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSwyOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICJDYW5jZWwiOiAiIiwKKyAgICAiSW5zZXJ0IjogIiIsCisgICAgIkluc2VydCBOb3RlIjogIiIsCisgICAgIkluc2VydCBmb290bm90ZSI6ICIiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvbHQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9sdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmJjNjc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvbHQuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9sdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL2x2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYzY4ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9sdi5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdGNlbHQiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk2MjRhMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL25iLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGRiMTIzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvbmwuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJubCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL3BsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMzI5MzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9wbC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInBsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbnVsdWoiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvcHRfYnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZlOWRjNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiSW5zZXJ0IjogIkluc2VyaXIiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL3JvLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvcm8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM0ZTE5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL3JvLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicm8iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlJlbnVuxaPEgyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvcnUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9ydS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTY5Y2ZkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvcnUuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9zaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL3NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwM2IwYzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9zaC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvc2kuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9zaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDNkMTYwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvc2kuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUHJla2xpxI1pIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9zci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL3NyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOTY2ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9zci5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvc3YuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy9zdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGI2Mzk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvc3YuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXZicnl0IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL3RoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMzZiODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy90aC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLguKLguIHguYDguKXguLTguIEiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL3RyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvdHIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzNjIzZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0Tm90ZS9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIsSwcHRhbCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvdm4uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydE5vdGUvbGFuZy92bi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzJkNzc5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnROb3RlL2xhbmcvdm4uanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ2biIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiSOG7p3kiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0UGFnZWJyZWFrL0luc2VydFBhZ2VicmVhay5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0UGFnZWJyZWFrL0luc2VydFBhZ2VicmVhay5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzM2ZWUxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRQYWdlYnJlYWsvSW5zZXJ0UGFnZWJyZWFrLmpzCkBAIC0wLDAgKzEsNDMgQEAKKy8vIEluc2VydFBhZ2VicmVhayBwbHVnaW4gZm9yIEhUTUxBcmVhL1hpbmhhDQorLy8gSW1wbGVtZW50YXRpb24gYnkgVWRvIFNjaG1hbCAmIFNjaGFmZnJhdGggTmV1ZU1lZGllbg0KKy8vIE9yaWdpbmFsIEF1dGhvciAtIFVkbyBTY2htYWwNCisvLw0KKy8vIChjKSBVZG8gU2NobWFsICYgU2NoYWZmcmF0aCBOZXVlTWVkaWVuIDIwMDQNCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuDQorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLg0KKw0KK2Z1bmN0aW9uIEluc2VydFBhZ2VicmVhayhlZGl0b3IsIGFyZ3MpIHsNCisJdGhpcy5lZGl0b3IgPSBlZGl0b3I7DQorCXZhciBjZmcgPSBlZGl0b3IuY29uZmlnOw0KKwl2YXIgc2VsZiA9IHRoaXM7DQorDQorCWNmZy5yZWdpc3RlckJ1dHRvbih7DQorCWlkICAgICAgIDogInBhZ2VicmVhayIsDQorCXRvb2x0aXAgIDogdGhpcy5fbGMoIlBhZ2UgYnJlYWsiKSwNCisJaW1hZ2UgICAgOiBlZGl0b3IuaW1nVVJMKCJwYWdlYnJlYWsuZ2lmIiwgIkluc2VydFBhZ2VicmVhayIpLA0KKwl0ZXh0TW9kZSA6IGZhbHNlLA0KKwlhY3Rpb24gICA6IGZ1bmN0aW9uKGVkaXRvcikgew0KKwkJCXNlbGYuYnV0dG9uUHJlc3MoZWRpdG9yKTsNCisJCX0NCisJfSk7DQorICBjZmcuYWRkVG9vbGJhckVsZW1lbnQoInBhZ2VicmVhayIsICJpbnNlcnRob3Jpem9udGFscnVsZSIsIDEpOw0KK30NCisNCitJbnNlcnRQYWdlYnJlYWsuX3BsdWdpbkluZm8gPSB7DQorCW5hbWUgICAgICAgICAgOiAiSW5zZXJ0UGFnZWJyZWFrIiwNCisJdmVyc2lvbiAgICAgICA6ICIxLjAiLA0KKwlkZXZlbG9wZXIgICAgIDogIlVkbyBTY2htYWwiLA0KKwlkZXZlbG9wZXJfdXJsIDogIiIsDQorCXNwb25zb3IgICAgICAgOiAiTC5OLlNjaGFmZnJhdGggTmV1ZU1lZGllbiIsDQorCXNwb25zb3JfdXJsICAgOiAiaHR0cDovL3d3dy5zY2hhZmZyYXRoLW5ldWVtZWRpZW4uZGUvIiwNCisJY19vd25lciAgICAgICA6ICJVZG8gU2NobWFsICYgU2NoYWZmcmF0aCBOZXVlTWVkaWVuIiwNCisJbGljZW5zZSAgICAgICA6ICJodG1sQXJlYSINCit9Ow0KKw0KK0luc2VydFBhZ2VicmVhay5wcm90b3R5cGUuX2xjID0gZnVuY3Rpb24oc3RyaW5nKSB7DQorICAgIHJldHVybiBYaW5oYS5fbGMoc3RyaW5nLCAnSW5zZXJ0UGFnZWJyZWFrJyk7DQorfTsNCisNCitJbnNlcnRQYWdlYnJlYWsucHJvdG90eXBlLmJ1dHRvblByZXNzID0gZnVuY3Rpb24oZWRpdG9yLCBjb250ZXh0LCB1cGRhdGVjb250ZXh0Y2xhc3MpIHsNCisJZWRpdG9yLmluc2VydEhUTUwoJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBwYWdlLWJyZWFrLWFmdGVyOiBhbHdheXM7IGhlaWdodDogMXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTkyLCAxOTIsIDE5Mik7IiBjb250ZW50ZWRpdGFibGU9ImZhbHNlIiB0aXRsZT0iUGFnZSBCcmVhayI+Jyk7DQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFBhZ2VicmVhay9pbWcvcGFnZWJyZWFrLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0UGFnZWJyZWFrL2ltZy9wYWdlYnJlYWsuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNDI3MzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFBhZ2VicmVhay9pbWcvcGFnZWJyZWFrLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFBhZ2VicmVhay9sYW5nL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRQYWdlYnJlYWsvbGFuZy9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjI0MTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRQYWdlYnJlYWsvbGFuZy9kZS5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIlBhZ2UgYnJlYWsiOiAiTmV1ZSBTZWl0ZSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRQYWdlYnJlYWsvbGFuZy9mci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0UGFnZWJyZWFrL2xhbmcvZnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQxYmVhOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0UGFnZWJyZWFrL2xhbmcvZnIuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJQYWdlIGJyZWFrIjogIlPDqXBhcmF0ZXVyIGRlIHBhZ2UiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0UGFnZWJyZWFrL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFBhZ2VicmVhay9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NWI0MjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFBhZ2VicmVhay9sYW5nL2phLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiamEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiUGFnZSBicmVhayI6ICLmlLnjg5rjg7zjgrgiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0UGFnZWJyZWFrL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0UGFnZWJyZWFrL2xhbmcvbGNfYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTdkYTcxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRQYWdlYnJlYWsvbGFuZy9sY19iYXNlLmpzCkBAIC0wLDAgKzEsMjYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLworLy8gTEFORzogImVuIiwgRU5DT0RJTkc6IFVURi04CisvLyBBdXRob3I6IFRyYW5zbGF0b3ItTmFtZSwgPGVtYWlsQGV4YW1wbGUuY29tPgorLy8KKy8vIExhc3QgcmV2aXNpb246IDIwMTgtMDQtMTIKKy8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KKy8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyAoUGxlYXNlLCByZW1vdmUgaW5mb3JtYXRpb24gYmVsb3cpCisvLyBGT1IgVFJBTlNMQVRPUlM6CisvLworLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCisvLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCisvLworLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7CisvLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50CisvLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCisKK3sKKyAgICAiUGFnZSBCcmVhayI6ICIiLAorICAgICJQYWdlIGJyZWFrIjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFBhZ2VicmVhay9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRQYWdlYnJlYWsvbGFuZy9uYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjQ2MjIzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRQYWdlYnJlYWsvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIlBhZ2UgYnJlYWsiOiAiU2V0dCBpbm4gc2lkZXNraWZ0IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFBhZ2VicmVhay9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRQYWdlYnJlYWsvbGFuZy9ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDhkZDMxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRQYWdlYnJlYWsvbGFuZy9ubC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIlBhZ2UgYnJlYWsiOiAiUGFnaW5hIGVpbmRlIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFBhZ2VicmVhay9sYW5nL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRQYWdlYnJlYWsvbGFuZy9wdF9ici5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGE5ODRiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRQYWdlYnJlYWsvbGFuZy9wdF9ici5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIlBhZ2UgYnJlYWsiOiAiUXVlYnJhIGRlIHDDoWdpbmEiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L0luc2VydFNtaWxleS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L0luc2VydFNtaWxleS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTExNGY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbWlsZXkvSW5zZXJ0U21pbGV5LmpzCkBAIC0wLDAgKzEsMTkxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcDQorIEluc2VydCBTbWlsZXkgUGx1Z2luIGZvciBYaW5oYQ0KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyBvcmlnaW5hbCBhdXRob3I6IEtpIE1hc3RlciBHZW9yZ2UgKGtpbWFzdGVyZ2VvcmdlQGdtYWlsLmNvbSkNCisgcmV3cml0dGVuOiBKYW1lcyBTbGVlbWFuIChqYW1lc0Bnb2dvLmNvLm56KQ0KK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitJbnNlcnRTbWlsZXkuX3BsdWdpbkluZm8gPSB7DQorICBuYW1lICAgICAgICAgIDogIkluc2VydFNtaWxleSIsDQorICB2ZXJzaW9uICAgICAgIDogIjIuMCIsDQorICBkZXZlbG9wZXIgICAgIDogIlYgMS4wIEtpIE1hc3RlciBHZW9yZ2UsIFYyLjAgSmFtZXMgU2xlZW1hbiIsDQorICBkZXZlbG9wZXJfdXJsIDogImh0dHA6Ly93d3cuZ29nby5jby5uei8iLA0KKyAgY19vd25lciAgICAgICA6ICJLaSBNYXN0ZXIgR2VvcmdlLCBKYW1lcyBTbGVlbWFuIiwNCisgIHNwb25zb3IgICAgICAgOiAiR29nbyBJbnRlcm5ldCBTZXJ2aWNlcyIsDQorICBzcG9uc29yX3VybCAgIDogImh0dHA6Ly93d3cuZ29nby5jby5uei8iLA0KKyAgbGljZW5zZSAgICAgICA6ICJodG1sQXJlYSINCit9Ow0KKw0KKy8qKiBUbyBjb25maWd1cmUgdGhlIEluc2VydFNtaWxleSBwbHVnaW4uDQorICoNCisgKiBTZXQgeGluaGFfY29uZmlnLkluc2VydFNtaWxleS5zbWlsZXlzIHRvIEVJVEhFUg0KKyAqDQorICogICogQSBVUkwgdG8gYSBmaWxlIGNhbGxlZCBzbWlsZXlzLmpzLCB3aGljaCBmb2xsb3dzIHRoZSBmb3JtYXQNCisgKiAgICB5b3UgY2FuIHZpZXcgaW4gc21pbGV5cy9zbWlsZXlzLmpzDQorICoNCisgKiAgKiBBIFVSTCB0byBhIGZpbGUgY2FsbGVkIHNtaWxleXMucGhwIChvciB3aGF0ZXZlciBvdGhlciBsYW5ndWFnZSkNCisgKiAgICB3aGljaCBvdXRwdXRzIGEgZmlsZSBpbiB0aGUgc2FtZSB3YXkgYXMgc21pbGV5cy9zbWlsZXlzLnBocA0KKyAqDQorICogICogQSBqYXZhc2NyaXB0IHRoZSBzYW1lIGFzIHlvdSB3aWxsIGZpbmQgaW4gc21pbGV5cy9zbWlsZXlzLmpzDQorICoNCisgKiAgQnkgZGVmYXV0IHRoZSBzdGF0aWMgc21pbGV5cy9zbWlsZXlzLmpzIGZpbGUgaXMgdXNlZCwgeW91IG1heSANCisgKiAgd2lzaCB0byBzZXQgdGhpcyBsaWtlIHNvDQorICoNCisgKiAgeGluaGFfY29uZmlnLkluc2VydFNtaWxleS5zbWlsZXlzID0gX2VkaXRvcl91cmwrJy9wbHVnaW5zL0luc2VydFNtaWxleS9zbWlsZXlzL3NtaWxleXMucGhwJzsNCisgKiANCisgKiAgQW5kIHRoZW4geW91IGNhbiBhZGQgbmV3IHNtaWxleXMganVzdCBieSBkdW1waW5nIGFsbCB0aGUgaW1hZ2VzIGludG8gdGhlDQorICogICAgICAveGluaGEvcGx1Z2lucy9JbnNlcnRTbWlsZXkvc21pbGV5cy8NCisgKiAgZm9sZGVyIGFuZCB0aGV5IHdpbGwgYXV0b21hdGljYWxseSBiZSBtYWRlIGF2YWlsYWJsZS4NCisgKiANCisgKi8NCisgDQorWGluaGEuQ29uZmlnLnByb3RvdHlwZS5JbnNlcnRTbWlsZXk9ICB7DQorICBzbWlsZXlzIDogJycgDQorfTsNCisNCitYaW5oYS5sb2FkU3R5bGUoJ2RpYWxvZy5jc3MnLCAnSW5zZXJ0U21pbGV5Jyk7DQorDQorZnVuY3Rpb24gSW5zZXJ0U21pbGV5KGVkaXRvcikgew0KKyAgdGhpcy5lZGl0b3IgID0gZWRpdG9yOw0KKyAgdGhpcy5zbWlsZXlzID0gZmFsc2U7DQorICB0aGlzLmRpYWxvZyAgPSBmYWxzZTsNCisgICANCisgIHZhciBjZmcgPSBlZGl0b3IuY29uZmlnOw0KKyAgdmFyIHNlbGYgPSB0aGlzOyAgDQorICANCisgIC8vIHJlZ2lzdGVyIHRoZSB0b29sYmFyIGJ1dHRvbnMgcHJvdmlkZWQgYnkgdGhpcyBwbHVnaW4NCisgIGNmZy5yZWdpc3RlckJ1dHRvbih7DQorICAgIGlkICAgICAgIDogImluc2VydHNtaWxleSIsDQorICAgIHRvb2x0aXAgIDogdGhpcy5fbGMoIkluc2VydCBTbWlsZXkiKSwNCisgICAgaW1hZ2UgICAgOiBlZGl0b3IuaW1nVVJMKCJlZF9zbWlsZXkuZ2lmIiwgIkluc2VydFNtaWxleSIpLA0KKyAgICB0ZXh0TW9kZSA6IGZhbHNlLA0KKyAgICBhY3Rpb24gICA6IGZ1bmN0aW9uKGVkaXRvcikgew0KKyAgICAgICAgICAgICAgICAgc2VsZi5idXR0b25QcmVzcyhlZGl0b3IpOw0KKyAgICAgICAgICAgICAgIH0NCisgIH0pOw0KKyAgDQorICBjZmcuYWRkVG9vbGJhckVsZW1lbnQoImluc2VydHNtaWxleSIsICJpbnNlcnRob3Jpem9udGFscnVsZSIsIDEpOw0KK30NCisNCitJbnNlcnRTbWlsZXkucHJvdG90eXBlLm9uR2VuZXJhdGVPbmNlID0gZnVuY3Rpb24oKQ0KK3sNCisgIC8vIEJhY2sgY29tcGF0IGZvciByYXkncyBzbWlsZXkgY29uZmlnIGluIGNoYW5nZXNldDo5MDQgKCB0aWNrZXQ6MTA5MyApDQorICBpZih0aGlzLmVkaXRvci5jb25maWcuSW5zZXJ0U21pbGV5LnNtaWxleVVSTCkNCisgIHsNCisgICAgdmFyIHNtaWxleXMgPSBbIF07DQorICAgIHZhciBzbWlsZXlsaXN0ID0gWGluaGEuX2dldHVybGNvbnRlbnQoWGluaGEuZ2V0UGx1Z2luRGlyKCJJbnNlcnRTbWlsZXkiKSArICcvc21pbGV5cy50eHQnKTsNCisgICAgdmFyIHNtaWxleVVSTCA9IHRoaXMuZWRpdG9yLmNvbmZpZy5JbnNlcnRTbWlsZXkuc21pbGV5VVJMOw0KKyAgICANCisgICAgc21pbGV5bGlzdCA9IHNtaWxleWxpc3QubWF0Y2goL14uKyQvbWcpOw0KKyAgICBmb3IodmFyIGkgPSAwOyBpIDwgc21pbGV5bGlzdC5sZW5ndGg7IGkrKykNCisgICAgew0KKyAgICAgIHNtaWxleXNbc21pbGV5cy5sZW5ndGhdID0geyB0aXRsZTogc21pbGV5bGlzdFtpXSwgIHNyYzogICBzbWlsZXlVUkwgKyBlbmNvZGVVUklDb21wb25lbnQoc21pbGV5bGlzdFtpXSkgfTsgICAgICAgICAgICAgICAgICAgDQorICAgIH0NCisgICAgdGhpcy5lZGl0b3IuY29uZmlnLkluc2VydFNtaWxleS5zbWlsZXlzID0gc21pbGV5czsNCisgIH0NCisgIA0KKyAgDQorICB0aGlzLmxvYWRBc3NldHMoKTsNCit9Ow0KKw0KK0luc2VydFNtaWxleS5wcm90b3R5cGUuX2xjID0gZnVuY3Rpb24oc3RyaW5nKSB7DQorICByZXR1cm4gWGluaGEuX2xjKHN0cmluZywgJ0luc2VydFNtaWxleScpOw0KK307DQorDQorLyoqIExvYWQgdGhlIGRpYWxvZyBhbmQganMgZmlsZXMuDQorICogDQorICovDQorIA0KK0luc2VydFNtaWxleS5wcm90b3R5cGUubG9hZEFzc2V0cyA9IGZ1bmN0aW9uKCkNCit7DQorICB2YXIgc2VsZiA9IHRoaXM7DQorICBpZiAoc2VsZi5sb2FkaW5nKSByZXR1cm47DQorICANCisgIGlmKHR5cGVvZiB0aGlzLmVkaXRvci5jb25maWcuSW5zZXJ0U21pbGV5LnNtaWxleXMgIT0gJ3N0cmluZycpDQorICB7DQorICAgIC8vIE11c3QgYmUgYSBzbWlsZXkgZGVmaW5pdGlvbiBpdHNlbGYNCisgICAgdGhpcy5zbWlsZXlzICAgICA9IHRoaXMuZWRpdG9yLmNvbmZpZy5JbnNlcnRTbWlsZXkuc21pbGV5czsNCisgICAgdGhpcy5zbWlsZXlfYmFzZSA9IF9lZGl0b3JfdXJsOyAvLyBEb2Vzbid0IG1ha2UgYSBsb3Qgb2Ygc2Vuc2UsIHdlIGFzc3VtZSB0aGUgc21pbGV5cyB3aWxsIGhhdmUgYWJzb2x1dGUgcGF0aHMgYW55d2F5DQorICB9DQorICBlbHNlDQorICB7DQorICAgIHZhciBzbWlsZXlzX2RlZiA9IA0KKyAgICAgIHRoaXMuZWRpdG9yLmNvbmZpZy5JbnNlcnRTbWlsZXkuc21pbGV5cyANCisgICAgICAgID8gdGhpcy5lZGl0b3IuY29uZmlnLkluc2VydFNtaWxleS5zbWlsZXlzIC8vIFVSTCB0byB0aGUgc21pbGV5cy5qcyBmaWxlLCBvciBzb21ldGhpZ24gdGhhdCBjcmVhdGVzIGl0DQorICAgICAgICA6IChYaW5oYS5nZXRQbHVnaW5EaXIoIkluc2VydFNtaWxleSIpICsgJy9zbWlsZXlzL3NtaWxleXMuanMnKTsgLy8gb3VyIG93biBkZWZhdWx0IG9uZQ0KKyAgICAgICAgDQorICAgIFhpbmhhLl9nZXRiYWNrKCANCisgICAgICBzbWlsZXlzX2RlZiwgDQorICAgICAgZnVuY3Rpb24oc20pIHsgc2VsZi5zbWlsZXlzID0gZXZhbChzbSk7IHNlbGYuc21pbGV5c19iYXNlID0gc21pbGV5c19kZWYucmVwbGFjZSgvXC9bXlwvXSsoXD8uKik/JC8sICcvJyk7IH0gDQorICAgICk7ICAgIA0KKyAgfQ0KKyAgICANCisgIFhpbmhhLl9nZXRiYWNrKCBYaW5oYS5nZXRQbHVnaW5EaXIoIkluc2VydFNtaWxleSIpICsgJy9kaWFsb2cuaHRtbCcsIGZ1bmN0aW9uKGh0bWwpIHsgc2VsZi5tYWtlRGlhbG9nKGh0bWwpOyB9ICk7DQorfQ0KKw0KKy8qKiBNYWtlIHRoZSBkaWFsb2cNCisgKg0KKyAqICBAbm90ZSBJdCBpcyByZWFsbHkgaW1wb3J0YW50IHRoYXQgdGhpcyBoYXBwZW5zIHRocm91aCB0aGUgb25HZW5lcmF0ZU9uY2UgZXZlbnQNCisgKiAgIChpbiB0aGlzIGNhc2UgaXQgZ29lcyBvbkdlbmVyYXRlT25jZSAtPiBsb2FkQXNzZXRzIC0+IG1ha2VEaWFsb2cpDQorICogIGJlY2F1c2Ugb3RoZXJ3aXNlIGNyZWF0aW5nIHRoZSBkaWFsb2cgY2FuIGZhaWwgaW4gbXlzdGVyaW91cyB3YXlzIChzaWxlbnQgDQorICogIGphdmFzY3JpcHQgZXhjZXB0aW9ucyBpbiBHZWNrbyBldGMpLg0KKyAqLw0KKyANCitJbnNlcnRTbWlsZXkucHJvdG90eXBlLm1ha2VEaWFsb2cgPSBmdW5jdGlvbihodG1sKQ0KK3sNCisgIHZhciBzZWxmID0gdGhpczsNCisgIA0KKyAgLy8gV2UgY2FuIG5vdCBtYWtlIHRoZSBkaWFsb2cgdW50aWwgdGhlIHNtaWxleXMgYXJlIGxvYWRlZCwgc28gd2FpdCBhIGJpdC4NCisgIGlmKCF0aGlzLnNtaWxleXMpIA0KKyAgeyAgDQorICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBzZWxmLm1ha2VEaWFsb2coaHRtbCk7IH0sIDEwMDApOyANCisgICAgcmV0dXJuOyANCisgIH0NCisgIA0KKyAgdmFyIGRpYWxvZyA9IG5ldyBYaW5oYS5EaWFsb2codGhpcy5lZGl0b3IsIGh0bWwsICdJbnNlcnRTbWlsZXknLCB7d2lkdGg6MTU1LCBoZWlnaHQ6MTAwfSwge21vZGFsOmZhbHNlfSk7DQorICAgIA0KKyAgdmFyIHNyYzsNCisgIHZhciBzOw0KKyAgdmFyIGE7DQorICANCisgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnNtaWxleXMubGVuZ3RoOyBpKyspDQorICB7DQorICAgIHNyYyA9IHRoaXMuc21pbGV5c1tpXS5zcmMubWF0Y2goL14oKFthLXpBLVpdKzpcL1wvKXxcLykvKSA/IA0KKyAgICAgICAgICB0aGlzLnNtaWxleXNbaV0uc3JjIDogdGhpcy5zbWlsZXlzX2Jhc2UgKyB0aGlzLnNtaWxleXNbaV0uc3JjOw0KKyAgICBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7DQorICAgIHMuc3JjID0gc3JjOw0KKyAgICBzLmFsdCA9IGRpYWxvZy5fbGModGhpcy5zbWlsZXlzW2ldLnRpdGxlKTsgDQorICAgIHMuc3R5bGUuYm9yZGVyID0gJ25vbmUnOw0KKyAgICANCisgICAgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsNCisgICAgYS5ocmVmPSAnamF2YXNjcmlwdDp2b2lkKDApOyc7DQorICAgIGEuc21pbGV5X3NyYyA9IHNyYzsNCisgICAgYS50aXRsZSA9IGRpYWxvZy5fbGModGhpcy5zbWlsZXlzW2ldLnRpdGxlKTsNCisgICAgDQorICAgIC8vIFRoaXMgaXMgd2hlcmUgd2UgaW5zZXJ0IHRoZSBzbWlsZXkgaW50byB0aGUgSFRNTA0KKyAgICBYaW5oYS5hZGREb20wRXZlbnQoYSwgJ2NsaWNrJywgZnVuY3Rpb24oZXYpIHsgc2VsZi5lZGl0b3IuaW5zZXJ0SFRNTCgnPGltZyBzcmM9IicrdGhpcy5zbWlsZXlfc3JjKyciIGFsdD0iJyt0aGlzLnRpdGxlKyciIC8+Jyk7IFhpbmhhLl9zdG9wRXZlbnQod2luZG93LmV2ZW50ID8gZXZlbnQgOiBldik7IHJldHVybiBmYWxzZTsgfSk7DQorICAgIA0KKyAgICBhLmFwcGVuZENoaWxkKHMpOw0KKyAgICBkaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ3NtaWxleXMnKS5hcHBlbmRDaGlsZChhKTsNCisgICAgDQorICAgIGEgPSBudWxsOyBzID0gbnVsbDsgc3JjID0gbnVsbDsNCisgIH0NCisgIA0KKyAgdGhpcy5kaWFsb2cgPSBkaWFsb2c7DQorICByZXR1cm4gdHJ1ZTsNCit9DQorDQorLyoqIFNob3cgdGhlIGRpYWxvZy4NCisgKi8NCisgDQorSW5zZXJ0U21pbGV5LnByb3RvdHlwZS5idXR0b25QcmVzcyA9IGZ1bmN0aW9uKGVkaXRvcikgew0KKyAgaWYodGhpcy5kaWFsb2cpIA0KKyAgew0KKyAgICB0aGlzLmRpYWxvZy5zaG93KCk7ICAgIA0KKyAgfQ0KKyAgZWxzZQ0KKyAgeyANCisgICAgLy8gU2hvdWxkIHB1dCBzb21ldGhpbmcgaGVyZSENCisgIH0NCisgIHJldHVybjsNCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L1JFQURNRS50eHQgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNjMxNTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9SRUFETUUudHh0CkBAIC0wLDAgKzEsMTMgQEAKK0Egc21hbGwgbnVtYmVyIG9mIHNtaWxleXMgYXJlIGluY2x1ZGVkIGluIHRoaXMgcmVsZWFzZS4KKworVG8gYWRkIG1vcmUgc21pbGV5cywgCisKKyAgMS4gRHVtcCBhcyBtYW55IGFzIHlvdSB3b3VsZCBsaWtlIGFzIGltYWdlIGZpbGVzIGludG8gdGhlIHNtaWxleXMgZm9sZGVyIChnaWYsIGpwZywgcG5nKS4KKyAgMi4gRUlUSEVSOgorICAgIGEuIEVkaXQgc21pbGV5cy9zbWlsZXlzLmpzIGFzIGFwcHJvcHJpYXRlLCBvcjsKKyAgICBiLiBTZXQgdGhpcyBYaW5oYSBjb25maWd1cmF0aW9uIChpZiB5b3VyIHNlcnZlciBoYW5kbGVzIFBIUCBvaykKKyAgICAgICAKKyAgICAgICAgeGluaGFfY29uZmlnLkluc2VydFNtaWxleS5zbWlsZXlzID0gX2VkaXRvcl91cmwrJy9wbHVnaW5zL0luc2VydFNtaWxleS9zbWlsZXlzL3NtaWxleXMucGhwJzsKKyAgICAgICAKKyAgICAgICBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgcGlja3VwIHRoZSBuZXcgc21pbGV5cyB3aXRob3V0IHlvdSBuZWVkaW5nIHRvIGVkaXQgdGhlIGpzIGZpbGUuCisgICAgICAKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L2RpYWxvZy5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9kaWFsb2cuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZjQ2MmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9kaWFsb2cuY3NzCkBAIC0wLDAgKzEsMyBAQAorLmluc2VydC1zbWlsZXkgYSB7CisgIGRpc3BsYXk6YmxvY2s7IGZsb2F0OmxlZnQ7IG1hcmdpbjoycHg7IGJvcmRlcjpub25lICFpbXBvcnRhbnQ7IHRleHQtZGVjb3JhdGlvbjpub25lICFpbXBvcnRhbnQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbWlsZXkvZGlhbG9nLmh0bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9kaWFsb2cuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTQ2NDk4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbWlsZXkvZGlhbG9nLmh0bWwKQEAgLTAsMCArMSw0IEBACis8aDEgaWQ9IltoMV0iPjxsMTBuPkluc2VydCBTbWlsZXk8L2wxMG4+PC9oMT4KKzxkaXYgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyIgaWQ9IltzbWlsZXlzXSIgY2xhc3M9Imluc2VydC1zbWlsZXkiPgorICAKKzwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L2ltZy9lZF9zbWlsZXkuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbWlsZXkvaW1nL2VkX3NtaWxleS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZlZTdmNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L2ltZy9lZF9zbWlsZXkuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L2xhbmcvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9sYW5nL2RlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZGM3YzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSW5zZXJ0IFNtaWxleSI6ICJTbWlsZXkgZWluZsO8Z2VuIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgICAgICJTbWlsZXkiOiAiU21pbGV5IgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbWlsZXkvbGFuZy9mci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L2xhbmcvZnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UzOGEzYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L2xhbmcvZnIuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJJbnNlcnQgU21pbGV5IjogIkluc8OpcmVyIHVuIHNtaWxleSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyIiwKKyAgICAgICAgIlNtaWxleSI6ICJTbWlsZXkiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9sYW5nL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbWlsZXkvbGFuZy9qYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDEzYmUxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbWlsZXkvbGFuZy9qYS5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkluc2VydCBTbWlsZXkiOiAi44K544Oe44Kk44Oq44O844Gu5oy/5YWlIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQ2FuY2VsIjogIuS4reatoiIsCisgICAgICAgICJTbWlsZXkiOiAi44K544Oe44Kk44Oq44O8IgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbWlsZXkvbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbWlsZXkvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZjZmYjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSwyNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICJJbnNlcnQgU21pbGV5IjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbWlsZXkvbGFuZy9uYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTYzZDVjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbWlsZXkvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkluc2VydCBTbWlsZXkiOiAiU2V0dCBpbm4gc21pbGV5IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgICAgICJTbWlsZXkiOiAiU21pbGV5IgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbWlsZXkvbGFuZy9ubC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L2xhbmcvbmwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE0M2QzOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L2xhbmcvbmwuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJubCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJJbnNlcnQgU21pbGV5IjogIlNtaWxleSBpbnZvZWdlbiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iLAorICAgICAgICAiU21pbGV5IjogIlNtaWxleSIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNzZiNzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSW5zZXJ0IFNtaWxleSI6ICJJbnNlcmlyIFNtaWxleSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L2xhbmcvdHIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9sYW5nL3RyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNTFhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSW5zZXJ0IFNtaWxleSI6ICJHw7xsZW4gecO8eiBla2xlIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgICAgICJTbWlsZXkiOiAiR8O8bGVuIHnDvHoiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9zbWlsZXlzLnR4dCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L3NtaWxleXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZGYyMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9zbWlsZXlzLnR4dApAQCAtMCwwICsxLDU4MCBAQAorMDAwMS5naWYKKzAwMDIuZ2lmCiswMDAzLmdpZgorMDAwNC5naWYKKzAwMDUuZ2lmCiswMDA2LmdpZgorMDAwNy5naWYKKzAwMDguZ2lmCiswMDA5LmdpZgorMDAxMC5naWYKKzAwMTEuZ2lmCiswMDEyLmdpZgorMDAxMy5naWYKKzAwMTQuZ2lmCiswMDE1LmdpZgorMDAxNi5naWYKKzAwMTcuZ2lmCiswMDE4LmdpZgorMDAxOS5naWYKKzAwMjAuZ2lmCiswMDIxLmdpZgorMDAyMi5naWYKKzAwMjMuZ2lmCiswMDI0LmdpZgorMDAyNS5naWYKKzAwMjYuZ2lmCiswMDI3LmdpZgorMDAyOC5naWYKKzAwMjkuZ2lmCiswMDMwLmdpZgorMDAzMS5naWYKKzAwMzIuZ2lmCiswMDMzLmdpZgorMDAzNC5naWYKKzAwMzUuZ2lmCiswMDM2LmdpZgorMDAzNy5naWYKKzAwMzguZ2lmCiswMDM5LmdpZgorMDA0MC5naWYKKzAwNDEuZ2lmCiswMDQyLmdpZgorMDA0My5naWYKKzAwNDQuZ2lmCiswMDQ1LmdpZgorMDA0Ni5naWYKKzAwNDcuZ2lmCiswMDQ4LmdpZgorMDA0OS5naWYKKzAwNTAuZ2lmCiswMDUxLmdpZgorMDA1Mi5naWYKKzAwNTMuZ2lmCiswMDU0LmdpZgorMDA1NS5naWYKKzAwNTYuZ2lmCiswMDU3LmdpZgorMDA1OC5naWYKKzAwNTkuZ2lmCiswMDYwLmdpZgorMDA2MS5naWYKKzAwNjIuZ2lmCiswMDYzLmdpZgorMDA2NC5naWYKKzAwNjUuZ2lmCiswMDY2LmdpZgorMDA2Ny5naWYKKzAwNjguZ2lmCiswMDY5LmdpZgorMDA3MC5naWYKKzAwNzEuZ2lmCiswMDcyLmdpZgorMDA3My5naWYKKzAwNzQuZ2lmCiswMDc1LmdpZgorMDA3Ni5naWYKKzAwNzcuZ2lmCiswMDc4LmdpZgorMDA3OS5naWYKKzAwODAuZ2lmCiswMDgxLmdpZgorMDA4Mi5naWYKKzAwODMuZ2lmCiswMDg0LmdpZgorMDA4NS5naWYKKzAwODYuZ2lmCiswMDg3LmdpZgorMDA4OC5naWYKKzAwODkuZ2lmCiswMDkwLmdpZgorMDA5MS5naWYKKzAwOTIuZ2lmCiswMDkzLmdpZgorMDA5NC5naWYKKzAwOTUuZ2lmCiswMDk2LmdpZgorMDA5Ny5naWYKKzAwOTguZ2lmCiswMDk5LmdpZgorMDEwMC5naWYKKzAxMDEuZ2lmCiswMTAyLmdpZgorMDEwMy5naWYKKzAxMDQuZ2lmCiswMTA1LmdpZgorMDEwNi5naWYKKzAxMDcuZ2lmCiswMTA4LmdpZgorMDEwOS5naWYKKzAxMTAuZ2lmCiswMTExLmdpZgorMDExMi5naWYKKzAxMTMuZ2lmCiswMTE0LmdpZgorMDExNS5naWYKKzAxMTYuZ2lmCiswMTE3LmdpZgorMDExOC5naWYKKzAxMTkuZ2lmCiswMTIwLmdpZgorMDEyMS5naWYKKzAxMjIuZ2lmCiswMTIzLmdpZgorMDEyNC5naWYKKzAxMjUuZ2lmCiswMTI2LmdpZgorMDEyNy5naWYKKzAxMjguZ2lmCiswMTI5LmdpZgorMDEzMC5naWYKKzAxMzEuZ2lmCiswMTMyLmdpZgorMDEzMy5naWYKKzAxMzQuZ2lmCiswMTM1LmdpZgorMDEzNi5naWYKKzAxMzcuZ2lmCiswMTM4LmdpZgorMDEzOS5naWYKKzAxNDAuZ2lmCiswMTQxLmdpZgorMDE0Mi5naWYKKzAxNDMuZ2lmCiswMTQ0LmdpZgorMDE0NS5naWYKKzAxNDYuZ2lmCiswMTQ3LmdpZgorMDE0OC5naWYKKzAxNDkuZ2lmCiswMTUwLmdpZgorMDE1MS5naWYKKzAxNTIuZ2lmCiswMTUzLmdpZgorMDE1NC5naWYKKzAxNTUuZ2lmCiswMTU2LmdpZgorMDE1Ny5naWYKKzAxNTguZ2lmCiswMTU5LmdpZgorMDE2MC5naWYKKzAxNjEuZ2lmCiswMTYyLmdpZgorMDE2My5naWYKKzAxNjQuZ2lmCiswMTY1LmdpZgorMDE2Ni5naWYKKzAxNjcuZ2lmCiswMTY4LmdpZgorMDE2OS5naWYKKzAxNzAuZ2lmCiswMTcxLmdpZgorMDE3Mi5naWYKKzAxNzMuZ2lmCiswMTc0LmdpZgorMDE3NS5naWYKKzAxNzYuZ2lmCiswMTc3LmdpZgorMDE3OC5naWYKKzAxNzkuZ2lmCiswMTgwLmdpZgorMDE4MS5naWYKKzAxODIuZ2lmCiswMTgzLmdpZgorMDE4NC5naWYKKzAxODUuZ2lmCiswMTg2LmdpZgorMDE4Ny5naWYKKzAxODguZ2lmCiswMTg5LmdpZgorMDE5MC5naWYKKzAxOTEuZ2lmCiswMTkyLmdpZgorMDE5My5naWYKKzAxOTQuZ2lmCiswMTk1LmdpZgorMDE5Ni5naWYKKzAxOTcuZ2lmCiswMTk4LmdpZgorMDE5OS5naWYKKzAyMDAuZ2lmCiswMjAxLmdpZgorMDIwMi5naWYKKzAyMDMuZ2lmCiswMjA0LmdpZgorMDIwNS5naWYKKzAyMDYuZ2lmCiswMjA3LmdpZgorMDIwOC5naWYKKzAyMDkuZ2lmCiswMjEwLmdpZgorMDIxMS5naWYKKzAyMTIuZ2lmCiswMjEzLmdpZgorMDIxNC5naWYKKzAyMTUuZ2lmCiswMjE2LmdpZgorMDIxNy5naWYKKzAyMTguZ2lmCiswMjE5LmdpZgorMDIyMC5naWYKKzAyMjEuZ2lmCiswMjIyLmdpZgorMDIyMy5naWYKKzAyMjQuZ2lmCiswMjI1LmdpZgorMDIyNi5naWYKKzAyMjcuZ2lmCiswMjI4LmdpZgorMDIyOS5naWYKKzAyMzAuZ2lmCiswMjMxLmdpZgorMDIzMi5naWYKKzAyMzMuZ2lmCiswMjM0LmdpZgorMDIzNS5naWYKKzAyMzYuZ2lmCiswMjM3LmdpZgorMDIzOC5naWYKKzAyMzkuZ2lmCiswMjQwLmdpZgorMDI0MS5naWYKKzAyNDIuZ2lmCiswMjQzLmdpZgorMDI0NC5naWYKKzAyNDUuZ2lmCiswMjQ2LmdpZgorMDI0Ny5naWYKKzAyNDguZ2lmCiswMjQ5LmdpZgorMDI1MC5naWYKKzAyNTEuZ2lmCiswMjUyLmdpZgorMDI1My5naWYKKzAyNTQuZ2lmCiswMjU1LmdpZgorMDI1Ni5naWYKKzAyNTcuZ2lmCiswMjU4LmdpZgorMDI1OS5naWYKKzAyNjAuZ2lmCiswMjYxLmdpZgorMDI2Mi5naWYKKzAyNjMuZ2lmCiswMjY0LmdpZgorMDI2NS5naWYKKzAyNjYuZ2lmCiswMjY3LmdpZgorMDI2OC5naWYKKzAyNjkuZ2lmCiswMjcwLmdpZgorMDI3MS5naWYKKzAyNzIuZ2lmCiswMjczLmdpZgorMDI3NC5naWYKKzAyNzUuZ2lmCiswMjc2LmdpZgorMDI3Ny5naWYKKzAyNzguZ2lmCiswMjc5LmdpZgorMDI4MC5naWYKKzAyODEuZ2lmCiswMjgyLmdpZgorMDI4My5naWYKKzAyODQuZ2lmCiswMjg1LmdpZgorMDI4Ni5naWYKKzAyODcuZ2lmCiswMjg4LmdpZgorMDI4OS5naWYKKzAyOTAuZ2lmCiswMjkxLmdpZgorMDI5Mi5naWYKKzAyOTMuZ2lmCiswMjk0LmdpZgorMDI5NS5naWYKKzAyOTYuZ2lmCiswMjk3LmdpZgorMDI5OC5naWYKKzAyOTkuZ2lmCiswMzAwLmdpZgorMDMwMS5naWYKKzAzMDIuZ2lmCiswMzAzLmdpZgorMDMwNC5naWYKKzAzMDUuZ2lmCiswMzA2LmdpZgorMDMwNy5naWYKKzAzMDguZ2lmCiswMzA5LmdpZgorMDMxMC5naWYKKzAzMTEuZ2lmCiswMzEyLmdpZgorMDMxMy5naWYKKzAzMTQuZ2lmCiswMzE1LmdpZgorMDMxNi5naWYKKzAzMTcuZ2lmCiswMzE4LmdpZgorMDMxOS5naWYKKzAzMjAuZ2lmCiswMzIxLmdpZgorMDMyMi5naWYKKzAzMjMuZ2lmCiswMzI0LmdpZgorMDMyNS5naWYKKzAzMjYuZ2lmCiswMzI3LmdpZgorMDMyOC5naWYKKzAzMjkuZ2lmCiswMzMwLmdpZgorMDMzMS5naWYKKzAzMzIuZ2lmCiswMzMzLmdpZgorMDMzNC5naWYKKzAzMzUuZ2lmCiswMzM2LmdpZgorMDMzNy5naWYKKzAzMzguZ2lmCiswMzM5LmdpZgorMDM0MC5naWYKKzAzNDEuZ2lmCiswMzQyLmdpZgorMDM0My5naWYKKzAzNDQuZ2lmCiswMzQ1LmdpZgorMDM0Ni5naWYKKzAzNDcuZ2lmCiswMzQ4LmdpZgorMDM0OS5naWYKKzAzNTAuZ2lmCiswMzUxLmdpZgorMDM1Mi5naWYKKzAzNTMuZ2lmCiswMzU0LmdpZgorMDM1NS5naWYKKzAzNTYuZ2lmCiswMzU3LmdpZgorMDM1OC5naWYKKzAzNTkuZ2lmCiswMzYwLmdpZgorMDM2MS5naWYKKzAzNjIuZ2lmCiswMzYzLmdpZgorMDM2NC5naWYKKzAzNjUuZ2lmCiswMzY2LmdpZgorMDM2Ny5naWYKKzAzNjguZ2lmCiswMzY5LmdpZgorMDM3MC5naWYKKzAzNzEuZ2lmCiswMzcyLmdpZgorMDM3My5naWYKKzAzNzQuZ2lmCiswMzc1LmdpZgorMDM3Ni5naWYKKzAzNzcuZ2lmCiswMzc4LmdpZgorMDM3OS5naWYKKzAzODAuZ2lmCiswMzgxLmdpZgorMDM4Mi5naWYKKzAzODMuZ2lmCiswMzg0LmdpZgorMDM4NS5naWYKKzAzODYuZ2lmCiswMzg3LmdpZgorMDM4OC5naWYKKzAzODkuZ2lmCiswMzkwLmdpZgorMDM5MS5naWYKKzAzOTIuZ2lmCiswMzkzLmdpZgorMDM5NC5naWYKKzAzOTUuZ2lmCiswMzk2LmdpZgorMDM5Ny5naWYKKzAzOTguZ2lmCiswMzk5LmdpZgorMDQwMC5naWYKKzA0MDEuZ2lmCiswNDAyLmdpZgorMDQwMy5naWYKKzA0MDQuZ2lmCiswNDA1LmdpZgorMDQwNi5naWYKKzA0MDcuZ2lmCiswNDA4LmdpZgorMDQwOS5naWYKKzA0MTAuZ2lmCiswNDExLmdpZgorMDQxMi5naWYKKzA0MTMuZ2lmCiswNDE0LmdpZgorMDQxNS5naWYKKzA0MTYuZ2lmCiswNDE3LmdpZgorMDQxOC5naWYKKzA0MTkuZ2lmCiswNDIwLmdpZgorMDQyMS5naWYKKzA0MjIuZ2lmCiswNDIzLmdpZgorMDQyNC5naWYKKzA0MjUuZ2lmCiswNDI2LmdpZgorMDQyNy5naWYKKzA0MjguZ2lmCiswNDI5LmdpZgorMDQzMC5naWYKKzA0MzEuZ2lmCiswNDMyLmdpZgorMDQzMy5naWYKKzA0MzQuZ2lmCiswNDM1LmdpZgorMDQzNi5naWYKKzA0MzcuZ2lmCiswNDM4LmdpZgorMDQzOS5naWYKKzA0NDAuZ2lmCiswNDQxLmdpZgorMDQ0Mi5naWYKKzA0NDMuZ2lmCiswNDQ0LmdpZgorMDQ0NS5naWYKKzA0NDYuZ2lmCiswNDQ3LmdpZgorMDQ0OC5naWYKKzA0NDkuZ2lmCiswNDUwLmdpZgorMDQ1MS5naWYKKzA0NTIuZ2lmCiswNDUzLmdpZgorMDQ1NC5naWYKKzA0NTUuZ2lmCiswNDU2LmdpZgorMDQ1Ny5naWYKKzA0NTguZ2lmCiswNDU5LmdpZgorMDQ2MC5naWYKKzA0NjEuZ2lmCiswNDYyLmdpZgorMDQ2My5naWYKKzA0NjQuZ2lmCiswNDY1LmdpZgorMDQ2Ni5naWYKKzA0NjcuZ2lmCiswNDY4LmdpZgorMDQ2OS5naWYKKzA0NzAuZ2lmCiswNDcxLmdpZgorMDQ3Mi5naWYKKzA0NzMuZ2lmCiswNDc0LmdpZgorMDQ3NS5naWYKKzA0NzYuZ2lmCiswNDc3LmdpZgorMDQ3OC5naWYKKzA0NzkuZ2lmCiswNDgwLmdpZgorMDQ4MS5naWYKKzA0ODIuZ2lmCiswNDgzLmdpZgorMDQ4NC5naWYKKzA0ODUuZ2lmCiswNDg2LmdpZgorMDQ4Ny5naWYKKzA0ODguZ2lmCiswNDg5LmdpZgorMDQ5MC5naWYKKzA0OTEuZ2lmCiswNDkyLmdpZgorMDQ5My5naWYKKzA0OTQuZ2lmCiswNDk1LmdpZgorMDQ5Ni5naWYKKzA0OTcuZ2lmCiswNDk4LmdpZgorMDQ5OS5naWYKKzA1MDAuZ2lmCiswNTAxLmdpZgorMDUwMi5naWYKKzA1MDMuZ2lmCiswNTA0LmdpZgorMDUwNS5naWYKKzA1MDYuZ2lmCiswNTA3LmdpZgorMDUwOC5naWYKKzA1MDkuZ2lmCiswNTEwLmdpZgorMDUxMS5naWYKKzA1MTIuZ2lmCiswNTEzLmdpZgorMDUxNC5naWYKKzA1MTUuZ2lmCiswNTE2LmdpZgorMDUxNy5naWYKKzA1MTguZ2lmCiswNTE5LmdpZgorMDUyMC5naWYKKzA1MjEuZ2lmCiswNTIyLmdpZgorMDUyMy5naWYKKzA1MjQuZ2lmCiswNTI1LmdpZgorMDUyNi5naWYKKzA1MjcuZ2lmCiswNTI4LmdpZgorMDUyOS5naWYKKzA1MzAuZ2lmCiswNTMxLmdpZgorMDUzMi5naWYKKzA1MzMuZ2lmCiswNTM0LmdpZgorMDUzNS5naWYKKzA1MzYuZ2lmCiswNTM3LmdpZgorMDUzOC5naWYKKzA1MzkuZ2lmCiswNTQwLmdpZgorMDU0MS5naWYKKzA1NDIuZ2lmCiswNTQzLmdpZgorMDU0NC5naWYKKzA1NDUuZ2lmCiswNTQ2LmdpZgorMDU0Ny5naWYKKzA1NDguZ2lmCiswNTQ5LmdpZgorMDU1MC5naWYKKzA1NTEuZ2lmCiswNTUyLmdpZgorMDU1My5naWYKKzA1NTQuZ2lmCiswNTU1LmdpZgorMDU1Ni5naWYKKzA1NTcuZ2lmCiswNTU4LmdpZgorMDU1OS5naWYKKzA1NjAuZ2lmCiswNTYxLmdpZgorMDU2Mi5naWYKKzA1NjMuZ2lmCiswNTY0LmdpZgorMDU2NS5naWYKKzA1NjYuZ2lmCiswNTY3LmdpZgorMDU2OC5naWYKKzA1NjkuZ2lmCiswNTcwLmdpZgorMDU3MS5naWYKKzA1NzIuZ2lmCiswNTczLmdpZgorMDU3NC5naWYKKzA1NzUuZ2lmCiswNTc2LmdpZgorMDU3Ny5naWYKKzA1NzguZ2lmCiswNTc5LmdpZgorMDU4MC5naWYKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L3NtaWxleXMvQW5ncnkuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbWlsZXkvc21pbGV5cy9BbmdyeS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGExZWZiNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L3NtaWxleXMvQW5ncnkuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L3NtaWxleXMvQ29vbC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9zbWlsZXlzL0Nvb2wuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYWExZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9zbWlsZXlzL0Nvb2wuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L3NtaWxleXMvRXhjaXRlZC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9zbWlsZXlzL0V4Y2l0ZWQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MzZlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9zbWlsZXlzL0V4Y2l0ZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L3NtaWxleXMvR3Jpbi5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9zbWlsZXlzL0dyaW4uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOGE1NzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9zbWlsZXlzL0dyaW4uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L3NtaWxleXMvUGxlYXNlZC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9zbWlsZXlzL1BsZWFzZWQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYzA2OGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9zbWlsZXlzL1BsZWFzZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L3NtaWxleXMvU2FkLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L3NtaWxleXMvU2FkLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzJlN2YwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbWlsZXkvc21pbGV5cy9TYWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L3NtaWxleXMvU3VycHJpc2VkLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L3NtaWxleXMvU3VycHJpc2VkLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODQxMTFiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbWlsZXkvc21pbGV5cy9TdXJwcmlzZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L3NtaWxleXMvV2luay5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9zbWlsZXlzL1dpbmsuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YzY5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNtaWxleS9zbWlsZXlzL1dpbmsuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L3NtaWxleXMvc21pbGV5cy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L3NtaWxleXMvc21pbGV5cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2UxOGQyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbWlsZXkvc21pbGV5cy9zbWlsZXlzLmpzCkBAIC0wLDAgKzEsMTAgQEAKK1sKKyAgeyB0aXRsZTogJ0dyaW4nLCAgICAgIHNyYzogJ0dyaW4uZ2lmJyAgICAgIH0sCisgIHsgdGl0bGU6ICdBbmdyeScsICAgICBzcmM6ICdBbmdyeS5naWYnICAgICB9LAorICB7IHRpdGxlOiAnRXhjaXRlZCcsICAgc3JjOiAnRXhjaXRlZC5naWYnICAgfSwKKyAgeyB0aXRsZTogJ0Nvb2wnLCAgICAgIHNyYzogJ0Nvb2wuZ2lmJyAgICAgIH0sCisgIHsgdGl0bGU6ICdXaW5rJywgICAgICBzcmM6ICdXaW5rLmdpZicgICAgICB9LAorICB7IHRpdGxlOiAnU3VycHJpc2VkJywgc3JjOiAnU3VycHJpc2VkLmdpZicgfSwKKyAgeyB0aXRsZTogJ1NhZCcsICAgICAgIHNyYzogJ1NhZC5naWYnICAgICAgIH0sCisgIHsgdGl0bGU6ICdQbGVhc2VkJywgICBzcmM6ICdQbGVhc2VkLmdpZicgICB9CitdClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbWlsZXkvc21pbGV5cy9zbWlsZXlzLnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L3NtaWxleXMvc21pbGV5cy5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU5YjNjYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U21pbGV5L3NtaWxleXMvc21pbGV5cy5waHAKQEAgLTAsMCArMSwzNCBAQAorPD9waHAKKyAgLyoqIFRoaXMgc2NyaXB0IGNhbiBiZSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgb3V0cHV0IGFsbCBzbWlsZXkgaW1hZ2VzIHlvdQorICAgKiAgZHVtcCBpbnRvIHRoaXMgZm9sZGVyLCBhcyBsb25nIGFzIHRoZXkgYXJlIGdpZiwganBnIG9yIHBuZy4KKyAgICogCisgICAqICBTaW1wbHkgc2V0IHlvdXIgCisgICAqCisgICAqICAgeGluaGFfY29uZmlnLkluc2VydFNtaWxleS5zbWlsZXlzID0gCisgICAqICAgICAgX2VkaXRvcl91cmwrJy9wbHVnaW5zL0luc2VydFNtaWxleS9zbWlsaWVzLnBocCc7CisgICAqCisgICAqIChvciBiZXR0ZXIsIG1ha2UgYSBuZXcgc21pbGV5cyBmb2xkZXIgb3V0c2lkZSBvZiBYaW5oYSAKKyAgICogIGFuZCBjb3B5IHRoaXMgZmlsZSB0byBpdCBhbmQgY2hhbmdlIHRoZSBsaW5lIGFib3ZlCisgICAqICBhcHByb3ByaWF0ZWx5KS4KKyAgICoKKyAgICovCisgIAorICAvLyBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIGNoYW5nZSB0aGlzIGlmIHlvdSBjb3B5IHRoaXMgZmlsZSBlbHNld2hlcmUhCisgIHJlcXVpcmVfb25jZShyZWFscGF0aChkaXJuYW1lKF9fRklMRV9fKSAuICcvLi4vLi4vLi4vY29udHJpYi9waHAteGluaGEucGhwJykpOworICAKKyAgJGRoID0gb3BlbmRpcihkaXJuYW1lKF9fRklMRV9fKSk7IAorICAkc21pbGV5cyA9IGFycmF5KCk7ICAKKyAgd2hpbGUoJGYgPSByZWFkZGlyKCRkaCkpCisgIHsKKyAgICAkTSA9IGFycmF5KCk7CisgICAgaWYocHJlZ19tYXRjaCgnL14oLiopXC4oZ2lmfGpwZ3xwbmcpJC9pJywgJGYsICRNKSkKKyAgICB7CisgICAgICAkc21pbGV5c1tdID0gYXJyYXkoJ3RpdGxlJyA9PiAkTVsxXSwgJ3NyYyc9PiAkZik7CisgICAgfQorICB9CisgIGNsb3NlZGlyKCRkaCk7CisgIAorICAKKyAgZWNobyB4aW5oYV90b19qcygkc21pbGV5cyk7CisgIAorPz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvSW5zZXJ0U25pcHBldC5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvSW5zZXJ0U25pcHBldC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIzZWFhOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9JbnNlcnRTbmlwcGV0LmNzcwpAQCAtMCwwICsxLDkzIEBACisubmF2aV9saW5rcyB7CisJd2lkdGg6IDE3N3B4OworCW1hcmdpbjogMDsKKwlwYWRkaW5nOiAwcHg7CisJbGlzdC1zdHlsZTpub25lOworCWJvcmRlcjogbm9uZTsKK30KKworLm5hdmlfbGlua3MgbGkgeworCW1hcmdpbjowIDAgM3B4IDA7Cit9CisKKy5uYXZpX2xpbmtzIGxpIGEgeworCWZvbnQtc2l6ZTogMTNweDsKKwlsaW5lLWhlaWdodDogMTZweDsKKwloZWlnaHQ6IDE2cHg7CisJZGlzcGxheTpibG9jazsKKwljb2xvcjojMDAwOworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKKwlmb250LXdlaWdodDogYm9sZDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworCWN1cnNvcjogcG9pbnRlcjsKKwlib3JkZXI6IDJweCBzb2xpZCB3aGl0ZTsKKwkKK30KKworLkxpbmsxIHsKK2JhY2tncm91bmQtY29sb3I6ICNERjFEMUYgIWltcG9ydGFudDsKKworfQorCisuTGluazIgeworYmFja2dyb3VuZC1jb2xvcjogI0Y5QTQxMyAhaW1wb3J0YW50OworCit9CisKKy5MaW5rMyB7CitiYWNrZ3JvdW5kLWNvbG9yOiAjMTY3NzMwICFpbXBvcnRhbnQ7Cit9CisKKy5MaW5rNCB7CitiYWNrZ3JvdW5kLWNvbG9yOiAjMjMzMzUwICFpbXBvcnRhbnQ7Cit9CisKKy5MaW5rNSB7CitiYWNrZ3JvdW5kLWNvbG9yOiAjNzA2ODVCICFpbXBvcnRhbnQ7Cit9CisKK2EuTGluazE6aG92ZXIgc3BhbnsKK2JhY2tncm91bmQtY29sb3I6ICNERjFEMUYgIWltcG9ydGFudDsKK30KKworYS5MaW5rMjpob3ZlciBzcGFuIHsKK2JhY2tncm91bmQtY29sb3I6ICNGOUE0MTMgIWltcG9ydGFudDsKKworfQorCisuTGluazM6aG92ZXIgc3BhbiB7CitiYWNrZ3JvdW5kLWNvbG9yOiAjMTY3NzMwICFpbXBvcnRhbnQ7Citjb2xvcjp3aGl0ZTsKK30KKworLkxpbms0OmhvdmVyIHNwYW4geworYmFja2dyb3VuZC1jb2xvcjogIzIzMzM1MCAhaW1wb3J0YW50OworY29sb3I6d2hpdGU7Cit9CisKKy5MaW5rNTpob3ZlciBzcGFuIHsKK2JhY2tncm91bmQtY29sb3I6ICM3MDY4NUIgIWltcG9ydGFudDsKK2NvbG9yOndoaXRlOworfQorCisubmF2aV9saW5rcyBsaSBhIHNwYW4geworCWhlaWdodDogMTZweDsKKwl0ZXh0LWluZGVudDogNHB4OworCWRpc3BsYXk6YmxvY2s7CisJbWFyZ2luLWxlZnQ6IDE1cHg7CisJYmFja2dyb3VuZC1jb2xvcjogI0ZGRjsKK30KKworZGl2Lm1lc3NhZ2VfYm94IHsKK2JvcmRlcjogZG90dGVkIDFweCBibGFjazsKK21hcmdpbjogMWVtOworcGFkZGluZzoxZW07Cit9CisKKy5yZWQgeworY29sb3I6cmVkOworfQorCisuZ3JlZW4geworY29sb3I6Z3JlZW47Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L0luc2VydFNuaXBwZXQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvSW5zZXJ0U25pcHBldC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTk0OGVlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L0luc2VydFNuaXBwZXQuanMKQEAgLTAsMCArMSw5MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXA0KKyBJbnNlcnRTbmlwcGV0IGZvciBYaW5oYQ0KKyBfX19fX19fX19fX19fX19fX19fX19fXw0KKyANCisgSW5zZXJ0IEhUTUwgZnJhZ21lbnRzIG9yIHRlbXBsYXRlIHZhcmlhYmxlcw0KKyANCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorZnVuY3Rpb24gSW5zZXJ0U25pcHBldChlZGl0b3IpIHsNCisJdGhpcy5lZGl0b3IgPSBlZGl0b3I7DQorDQorCXZhciBjZmcgPSBlZGl0b3IuY29uZmlnOw0KKwl2YXIgc2VsZiA9IHRoaXM7DQorCQ0KKw0KKwljZmcucmVnaXN0ZXJCdXR0b24oew0KKwlpZCAgICAgICA6ICJpbnNlcnRzbmlwcGV0IiwNCisJdG9vbHRpcCAgOiB0aGlzLl9sYygiSW5zZXJ0IFNuaXBwZXQiKSwNCisJaW1hZ2UgICAgOiBlZGl0b3IuaW1nVVJMKCJlZF9zbmlwcGV0LmdpZiIsICJJbnNlcnRTbmlwcGV0IiksDQorCXRleHRNb2RlIDogZmFsc2UsDQorCWFjdGlvbiAgIDogZnVuY3Rpb24oZWRpdG9yKSB7DQorCQkJc2VsZi5idXR0b25QcmVzcyhlZGl0b3IpOw0KKwkJfQ0KKwl9KTsNCisJY2ZnLmFkZFRvb2xiYXJFbGVtZW50KCJpbnNlcnRzbmlwcGV0IiwgImluc2VydGltYWdlIiwgLTEpOw0KKwl0aGlzLnNuaXBwZXRzID0gbnVsbDsNCisJdmFyIGJhY2tlbmQgPSBjZmcuSW5zZXJ0U25pcHBldC5zbmlwcGV0cyArICc/JzsNCisJDQorCWlmKGNmZy5JbnNlcnRTbmlwcGV0LmJhY2tlbmRfZGF0YSAhPSBudWxsKQ0KKyAgICB7DQorICAgIAlmb3IgKCB2YXIgaSBpbiBjZmcuSW5zZXJ0U25pcHBldC5iYWNrZW5kX2RhdGEgKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJhY2tlbmQgKz0gJyYnICsgaSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChjZmcuSW5zZXJ0U25pcHBldC5iYWNrZW5kX2RhdGFbaV0pOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIFhpbmhhLl9nZXRiYWNrKGJhY2tlbmQsZnVuY3Rpb24gKGdldGJhY2spIHtldmFsKGdldGJhY2spOyBzZWxmLnNuaXBwZXRzID0gc25pcHBldHM7fSk7DQorfQ0KKw0KK0luc2VydFNuaXBwZXQucHJvdG90eXBlLm9uVXBkYXRlVG9vbGJhciA9IGZ1bmN0aW9uKCkgew0KKwlpZiAoIXRoaXMuc25pcHBldHMpew0KKwkJdGhpcy5lZGl0b3IuX3Rvb2xiYXJPYmplY3RzLmluc2VydHNuaXBwZXQuc3RhdGUoImVuYWJsZWQiLCBmYWxzZSk7DQorCX0NCisJZWxzZSBJbnNlcnRTbmlwcGV0LnByb3RvdHlwZS5vblVwZGF0ZVRvb2xiYXIgPSBudWxsOw0KK30NCisNCitJbnNlcnRTbmlwcGV0Ll9wbHVnaW5JbmZvID0gew0KKyAgbmFtZSAgICAgICAgICA6ICJJbnNlcnRTbmlwcGV0IiwNCisgIHZlcnNpb24gICAgICAgOiAiMS4yIiwNCisgIGRldmVsb3BlciAgICAgOiAiUmFpbXVuZCBNZXllciIsDQorICBkZXZlbG9wZXJfdXJsIDogImh0dHA6Ly94LXdlYnNlcnZpY2UubmV0IiwNCisgIGNfb3duZXIgICAgICAgOiAiUmFpbXVuZCBNZXllciIsDQorICBzcG9uc29yICAgICAgIDogIiIsDQorICBzcG9uc29yX3VybCAgIDogIiIsDQorICBsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIg0KK307DQorDQorSW5zZXJ0U25pcHBldC5wcm90b3R5cGUuX2xjID0gZnVuY3Rpb24oc3RyaW5nKSB7DQorICAgIHJldHVybiBYaW5oYS5fbGMoc3RyaW5nLCAnSW5zZXJ0U25pcHBldCcpOw0KK307DQorDQorSW5zZXJ0U25pcHBldC5wcm90b3R5cGUub25HZW5lcmF0ZSA9IGZ1bmN0aW9uKCkgew0KKyAgdGhpcy5lZGl0b3IuYWRkRWRpdG9yU3R5bGVzaGVldChYaW5oYS5nZXRQbHVnaW5EaXIoIkluc2VydFNuaXBwZXQiKSArICcvSW5zZXJ0U25pcHBldC5jc3MnKTsNCit9Ow0KKw0KK1hpbmhhLkNvbmZpZy5wcm90b3R5cGUuSW5zZXJ0U25pcHBldCA9DQorew0KKyAgJ3NuaXBwZXRzJyA6IFhpbmhhLmdldFBsdWdpbkRpcigiSW5zZXJ0U25pcHBldCIpKyIvZGVtb3NuaXBwZXRzLmpzIiwgLy8gcHVyZWx5IGRlbW8gcHVycG9zZXMsIHlvdSBzaG91bGQgY2hhbmdlIHRoaXMNCisgICdjc3MnIDogWycuLi9JbnNlcnRTbmlwcGV0LmNzcyddLCAvL2RlcHJlY2F0ZWQsIENTUyBpcyBub3cgcHVsbGVkIGZyb20geGluaGFfY29uZmlnDQorICAnc2hvd0luc2VydFZhcmlhYmxlJzogZmFsc2UsDQorICAnYmFja2VuZF9kYXRhJyA6IG51bGwNCit9Ow0KKwkNCitJbnNlcnRTbmlwcGV0LnByb3RvdHlwZS5idXR0b25QcmVzcyA9IGZ1bmN0aW9uKGVkaXRvcikgew0KKwkJdmFyIGFyZ3MgPSBlZGl0b3IuY29uZmlnOw0KKwkJCWFyZ3Muc25pcHBldHMgPSB0aGlzLnNuaXBwZXRzOw0KKwkJdmFyIHNlbGYgPSB0aGlzOw0KKwkJZWRpdG9yLl9wb3B1cERpYWxvZyggInBsdWdpbjovL0luc2VydFNuaXBwZXQvaW5zZXJ0c25pcHBldCIsIGZ1bmN0aW9uKCBwYXJhbSApIHsNCisJDQorCQlpZiAoICFwYXJhbSApIHsgDQorCSAgICAgIHJldHVybiBmYWxzZTsNCisJICAgIH0NCisJCQkJICAgCSAgIA0KKwkJDQorCQllZGl0b3IuZm9jdXNFZGl0b3IoKTsNCisJCWlmIChwYXJhbVsnaG93J10gPT0gJ3ZhcmlhYmxlJykgew0KKwkJCWVkaXRvci5pbnNlcnRIVE1MKCd7JytzZWxmLnNuaXBwZXRzW3BhcmFtWyJzbmlwcGV0bnVtIl1dLmlkKyd9Jyk7DQorCQl9IGVsc2Ugew0KKwkJCWVkaXRvci5pbnNlcnRIVE1MKHNlbGYuc25pcHBldHNbcGFyYW1bInNuaXBwZXRudW0iXV0uSFRNTCk7DQorCSAgIAl9DQorICANCisgICAgfSwgYXJncyk7DQorICB9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9kZW1vc25pcHBldHMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvZGVtb3NuaXBwZXRzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNDM2MzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvZGVtb3NuaXBwZXRzLmpzCkBAIC0wLDAgKzEsMTUgQEAKK3ZhciBzbmlwcGV0cyA9IFtdOwordmFyIGkgPSAwOworc25pcHBldHNbaV0gPSB7fTsKK3NuaXBwZXRzW2ldWydpZCddID0gJ0JveCAxJzsKK3NuaXBwZXRzW2ldWydIVE1MJ10gPSAnPGRpdiBjbGFzcz0ibWVzc2FnZV9ib3ggcmVkIj5cbiAgVmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly94aW5oYS5vcmciPlhpbmhhIHdlYnNpdGU8L2E+PC9kaXY+JzsKKworaSsrOworc25pcHBldHNbaV0gPSB7fTsKK3NuaXBwZXRzW2ldWydpZCddID0gJ0lORk9STUFUSU9OIEFCT1VUIFNPTUVUSElORyc7CitzbmlwcGV0c1tpXVsnSFRNTCddID0gJzxkaXYgY2xhc3M9Im1lc3NhZ2VfYm94IGdyZWVuIj5cbiAgVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmdcbjwvZGl2Pic7CisKK2krKzsKK3NuaXBwZXRzW2ldID0ge307CitzbmlwcGV0c1tpXVsnaWQnXSA9ICdNZW51JzsKK3NuaXBwZXRzW2ldWydIVE1MJ10gPSAnPHVsIGNsYXNzPSJuYXZpX2xpbmtzIj5cbgk8bGkgY2xhc3M9Im5hdmkiPlxuCQk8YSBocmVmPSJMaW5rMSIgY2xhc3M9IkxpbmsxIiB0YWJpbmRleD0iMSI+PHNwYW4gY2xhc3M9InNwYW5fY2xhc3MiPkxpbmsxPC9zcGFuPjwvYT5cbiAgICA8L2xpPlxuCVxuCTxsaSBjbGFzcz0ibmF2aSI+XG4JCTxhIGhyZWY9IkxpbmsyIiBjbGFzcz0iTGluazIiIHRhYmluZGV4PSIyIj48c3BhbiBjbGFzcz0ic3Bhbl9jbGFzcyI+TGluazI8L3NwYW4+PC9hPlxuICAgIDwvbGk+XG5cbglcbgk8bGkgY2xhc3M9Im5hdmkiPlxuCQk8YSBocmVmPSJMaW5rMyIgY2xhc3M9IkxpbmszIiB0YWJpbmRleD0iMyI+PHNwYW4gY2xhc3M9InNwYW5fY2xhc3MiPkxpbmszPC9zcGFuPjwvYT5cbiAgICA8L2xpPlxuCVxuCTxsaSBjbGFzcz0ibmF2aSI+XG4JCTxhIGhyZWY9Ikxpbms0IiBjbGFzcz0iTGluazQiIHRhYmluZGV4PSI0Ij48c3BhbiBjbGFzcz0ic3Bhbl9jbGFzcyI+TGluazQ8L3NwYW4+PC9hPlxuICAgIDwvbGk+XG4JXG4JPGxpIGNsYXNzPSJuYXZpIj5cbgkJPGEgaHJlZj0iTGluazUiIGNsYXNzPSJMaW5rNSIgdGFiaW5kZXg9IjUiPjxzcGFuIGNsYXNzPSJzcGFuX2NsYXNzIj5MaW5rNTwvc3Bhbj48L2E+XG5cbiAgICA8L2xpPlxuXG48L3VsPic7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2ltZy9lZF9zbmlwcGV0LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9pbWcvZWRfc25pcHBldC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI2ODRmOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9pbWcvZWRfc25pcHBldC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvY2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9jaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmU1YmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvY2guanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi5Y+W5raIIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9jei5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL2N6LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNmE0OGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9jei5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImN6IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJacnXFoWl0IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9kYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmODU0MDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9kYS5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGxlciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWJhNTljCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvZGUuanMKQEAgLTAsMCArMSwxOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAiSGlkZSBwcmV2aWV3IjogIlZvcnNjaGF1IHZlcmJlcmdlbiIsCisgICAgIkluc2VydCBTbmlwcGV0IjogIlNuaXBwZXQgZWluZsO8Z2VuIiwKKyAgICAiSW5zZXJ0IGFzIjogIkVpbmbDvGdlbiBhbHMiLAorICAgICJTaG93IHByZXZpZXciOiAiVm9yc2NoYXUgemVpZ2VuIiwKKyAgICAiVmFyaWFibGUiOiAiVmFyaWFibGUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL2VlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvZWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFjZDg0MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL2VlLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkxvb2J1IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9lbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL2VsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNDY5NWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9lbC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLOkc66z43Pgc+Jz4POtyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTNlYTllCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvZXMuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlcyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL2V1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvZXUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAyMWJmNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL2V1LmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlV0emkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvZmEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ1NzE4OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL2ZhLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvZmkuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9maS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjMzYWMwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvZmkuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUGVydXV0YSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9mci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjRjMjYzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvZnIuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxlciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvaGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9oZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjVkZGM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvaGUuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJoZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9odS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGQ1NjY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvaHUuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJodSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvaXQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9pdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWJhNDNhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvaXQuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJpdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9qYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYTM1MzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9qYS5qcwpAQCAtMCwwICsxLDE4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICJIaWRlIHByZXZpZXciOiAi44OX44Os44OT44Ol44O86Z2e6KGo56S6IiwKKyAgICAiSW5zZXJ0IFNuaXBwZXQiOiAi44K544OL44Oa44OD44OI44Gu5oy/5YWlIiwKKyAgICAiSW5zZXJ0IGFzIjogIuW9ouW8j+OCkumBuOOCk+OBp+aMv+WFpSIsCisgICAgIlNob3cgcHJldmlldyI6ICLjg5fjg6zjg5Pjg6Xjg7zooajnpLoiLAorICAgICJWYXJpYWJsZSI6ICLlpInmlbAiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL2xjX2Jhc2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxN2RmZDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9sY19iYXNlLmpzCkBAIC0wLDAgKzEsMzggQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLworLy8gTEFORzogImVuIiwgRU5DT0RJTkc6IFVURi04CisvLyBBdXRob3I6IFRyYW5zbGF0b3ItTmFtZSwgPGVtYWlsQGV4YW1wbGUuY29tPgorLy8KKy8vIExhc3QgcmV2aXNpb246IDIwMTgtMDQtMTIKKy8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KKy8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyAoUGxlYXNlLCByZW1vdmUgaW5mb3JtYXRpb24gYmVsb3cpCisvLyBGT1IgVFJBTlNMQVRPUlM6CisvLworLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCisvLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCisvLworLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7CisvLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50CisvLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCisKK3sKKyAgICAiQ2FuY2VsIjogIiIsCisgICAgIkhpZGUgcHJldmlldyI6ICIiLAorICAgICJJbnNlcnQgU25pcHBldCI6ICIiLAorICAgICJJbnNlcnQgYXMiOiAiIiwKKyAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiIiwKKyAgICAiTGluazEiOiAiIiwKKyAgICAiTGluazIiOiAiIiwKKyAgICAiTGluazMiOiAiIiwKKyAgICAiTGluazQiOiAiIiwKKyAgICAiTGluazUiOiAiIiwKKyAgICAiU2hvdyBwcmV2aWV3IjogIiIsCisgICAgIlRoaXMgaXMgYW4gaW5mb3JtYXRpb24gYWJvdXQgc29tZXRoaW5nIjogIiIsCisgICAgIlZhcmlhYmxlIjogIiIsCisgICAgIlxcbiAgVGhpcyBpcyBhbiBpbmZvcm1hdGlvbiBhYm91dCBzb21ldGhpbmdcXG4iOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvbHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJiYzY3NAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL2x0LmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvbHYuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9sdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmM2OGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvbHYuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXRjZWx0IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9uYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL25iLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZGIxYTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDE4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICJIaWRlIHByZXZpZXciOiAiU2tqdWwgZm9yaMOlbmRzdmlzbmluZyIsCisgICAgIkluc2VydCBTbmlwcGV0IjogIlNldHQgaW5uIHNudXR0IiwKKyAgICAiSW5zZXJ0IGFzIjogIlNldHQgaW5uIHNvbSIsCisgICAgIlNob3cgcHJldmlldyI6ICJWaXMgZm9yaMOlbmRzdmlzbmluZyIsCisgICAgIlZhcmlhYmxlIjogIlZhcmlhYmVsIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9ubC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZGUwZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9ubC5qcwpAQCAtMCwwICsxLDE4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iLAorICAgICJIaWRlIHByZXZpZXciOiAiVmVyYmVyZyB2b29yYmVlbGQiLAorICAgICJJbnNlcnQgU25pcHBldCI6ICJTbmlwcGV0IGludm9lZ2VuIiwKKyAgICAiSW5zZXJ0IGFzIjogIkludm9lZ2VuIGFscyIsCisgICAgIlNob3cgcHJldmlldyI6ICJMYWF0IHZvb3JiZWVsZCB6aWVuIiwKKyAgICAiVmFyaWFibGUiOiAiVmFyaWFiZWxlIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL3BsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMzI5MzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9wbC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInBsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbnVsdWoiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvcHRfYnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ1Mzk0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMjAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiSGlkZSBwcmV2aWV3IjogIkVzY29uZGVyIFZpc3VhbGl6YcOnw6NvIiwKKyAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiSW5zZXJpciBGcmFnbWVudG8gZGUgQ8OzZGlnbyIsCisgICAgIkluc2VydCBhcyI6ICJJbnNlcmlyIGNvbW8iLAorICAgICJJbnNlcnRTbmlwcGV0IGZvciBYaW5oYSI6ICJGcmFnbWVudG8gZGUgQ8OzZGlnb3MgcGFyYSBvIFhpbmhhIiwKKyAgICAiU2hvdyBwcmV2aWV3IjogIk1vc3RyYXIgVmlzdWFsaXphw6fDo28iLAorICAgICJUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZyI6ICJJc3RvIMOpIHVtYSBpbmZvcm1hw6fDo28gc29icmUgYWxndW1hIGNvaXNhIiwKKyAgICAiVmFyaWFibGUiOiAiVmFyacOhdmVsIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9yby5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL3JvLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNGUxOWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9yby5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJvIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU2OWNmZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL3J1LmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicnUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvc2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9zaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDNiMGM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvc2guanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUG9uacWhdGkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL3NpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvc2kuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAzZDE2MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL3NpLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2kiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvc3IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy9zci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk2NmU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvc3IuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL3N2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThiNjM5NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL3N2LmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3YiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvdGguanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy90aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDM2Yjg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvdGguanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0aCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy90ci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL3RyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MzYyM2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvbGFuZy90ci5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLEsHB0YWwiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL3ZuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L2xhbmcvdm4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMyZDc3OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9sYW5nL3ZuLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidm4iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkjhu6d5IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvcG9wdXBzL2luc2VydHNuaXBwZXQuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9wb3B1cHMvaW5zZXJ0c25pcHBldC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NTgzNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvcG9wdXBzL2luc2VydHNuaXBwZXQuaHRtbApAQCAtMCwwICsxLDEzMyBAQAorPCFET0NUWVBFIGh0bWwKKwkJIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iCisJCSJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKworPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW5zZXJ0IFNuaXBwZXQ8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vLi4vLi4vcG9wdXBzL3BvcHVwLmNzcyIgLz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL0luc2VydFNuaXBwZXQuY3NzIiAvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vLi4vcG9wdXBzL3BvcHVwLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKwordmFyIEluc2VydFNuaXBwZXQgPSB3aW5kb3cub3BlbmVyLkluc2VydFNuaXBwZXQ7Cit2YXIgZWRpdG9yID0gbnVsbDsKKworCitmdW5jdGlvbiBJbml0KCkgeworCV9fZGxnX3RyYW5zbGF0ZSgiSW5zZXJ0U25pcHBldCIpOworCV9fZGxnX2luaXQobnVsbCwge3dpZHRoOjgwMCxoZWlnaHQ6NjAwfSk7CisKKwl2YXIgY29uZmlnID0gd2luZG93LmRpYWxvZ0FyZ3VtZW50czsKKyAKKwl2YXIgc25pcHBldHMgPSBjb25maWcuc25pcHBldHM7CisJCisJaWYgKCBjb25maWcucGFnZVN0eWxlICYmICFYaW5oYS5pc19pZSkKKyAgICB7CisJCXZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CisJCXN0eWxlLnR5cGUgPSAidGV4dC9jc3MiOworCQlzdHlsZS5pbm5lckhUTUwgPSBjb25maWcucGFnZVN0eWxlOworCQlkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiSEVBRCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlKTsKKyAgICB9CisgICAgCisJaWYgKCB0eXBlb2YgY29uZmlnLnBhZ2VTdHlsZVNoZWV0cyAhPT0gJ3VuZGVmaW5lZCcgKQorCXsKKwkJZm9yICggdmFyIGkgPSAwOyBpIDwgY29uZmlnLnBhZ2VTdHlsZVNoZWV0cy5sZW5ndGg7IGkrKyApCisJCXsKKwkJCXZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTsKKwkJCXN0eWxlLnR5cGUgPSAidGV4dC9jc3MiOworCQkJc3R5bGUucmVsID0gJ3N0eWxlc2hlZXQnOworCQkJc3R5bGUuaHJlZiA9CWNvbmZpZy5wYWdlU3R5bGVTaGVldHNbaV07CisJCQlkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiSEVBRCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlKTsKKwkJfQorCX0KKwkJCisJdmFyIHRib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNuaXBwZXR0YWJsZSIpOworCXZhciBzbmlwcGV0X2h0bWw7CisJdmFyIHNuaXBwZXRfbmFtZTsKKwl2YXIgdHJvdzsKKwlmb3IodmFyIGkgPSAwOyBpIDwgc25pcHBldHMubGVuZ3RoOyBpKyspIAorCXsKKwkJdHJvdyA9IHRib2R5Lmluc2VydFJvdyhpKTsKKwkJc25pcHBldF9odG1sID0gc25pcHBldHNbaV1bJ0hUTUwnXTsKKwkJc25pcHBldF9uYW1lID0gc25pcHBldHNbaV1bJ2lkJ107CisJIAorCQl2YXIgaW5zZXJ0QXNWYXJpYWJsZSA9ICcnOworCQlpZiAoY29uZmlnLkluc2VydFNuaXBwZXQuc2hvd0luc2VydFZhcmlhYmxlKQorCQl7CisJCQlpbnNlcnRBc1ZhcmlhYmxlID0gJyB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6b25PSygnK2krJywnKydcJ3ZhcmlhYmxlXCcnKycpIj4nK1hpbmhhLl9sYygiVmFyaWFibGUiLCJJbnNlcnRTbmlwcGV0IikrJzwvYT4nOworCQl9CisJCXZhciBuZXdfY2VsbCA9IHRyb3cuaW5zZXJ0Q2VsbCgwKTsKKwkJbmV3X2NlbGwuaW5uZXJIVE1MID0gc25pcHBldF9uYW1lICsnOiAnK1hpbmhhLl9sYygiSW5zZXJ0IGFzIiwiSW5zZXJ0U25pcHBldCIpKycgPGEgaHJlZj0iamF2YXNjcmlwdDpvbk9LKCcraSsnLCcrJ1wnaHRtbFwnJysnKSI+SFRNTDwvYT4nK2luc2VydEFzVmFyaWFibGUgKyAnICg8YSBpZD0ic2hvd19wcmV2aWV3JytpKyciIGhyZWY9ImphdmFzY3JpcHQ6cHJldmlldyhcJ3Nob3dcJywnK2krJykiPicrWGluaGEuX2xjKCJTaG93IHByZXZpZXciLCJJbnNlcnRTbmlwcGV0IikrJzwvYT4pPCcrLypzdG9wIGxjX3BhcnNlX3N0cmluZ3MqLysnZGl2IGlkPSJwcmV2aWV3JytpKyciIHN0eWxlPSJkaXNwbGF5Om5vbmUiPicrc25pcHBldHNbaV1bJ0hUTUwnXSsnPC9kaXY+JzsgCisJCW5ld19jZWxsLmlkID0gJ2NlbGwnICsgaTsKKwkJCQorCX0KKworCWRvY3VtZW50LmJvZHkub25rZXlwcmVzcyA9IF9fZGxnX2tleV9wcmVzczsKK30KKworZnVuY3Rpb24gcHJldmlldyhhY3Rpb24saSkgeworCXZhciBzaG93X3ByZXZpZXdfbGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaG93X3ByZXZpZXcnK2kpOyAKKwlzd2l0Y2goYWN0aW9uKQorCXsKKwkJY2FzZSAnc2hvdyc6CisJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJldmlldycraSkuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CisJCQlzaG93X3ByZXZpZXdfbGluay5pbm5lckhUTUwgPSBYaW5oYS5fbGMoIkhpZGUgcHJldmlldyIsIkluc2VydFNuaXBwZXQiKTsKKwkJCXNob3dfcHJldmlld19saW5rLmhyZWYgPSAiamF2YXNjcmlwdDpwcmV2aWV3KCdoaWRlJywnIitpKyInKTsiOworCQkJCisJCWJyZWFrOworCQljYXNlICdoaWRlJzoKKwkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmV2aWV3JytpKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworCQkJc2hvd19wcmV2aWV3X2xpbmsuaW5uZXJIVE1MID0gWGluaGEuX2xjKCJTaG93IHByZXZpZXciLCJJbnNlcnRTbmlwcGV0Iik7CisJCQlzaG93X3ByZXZpZXdfbGluay5ocmVmID0gImphdmFzY3JpcHQ6cHJldmlldygnc2hvdycsJyIraSsiJyk7IjsKKwkJYnJlYWs7CisJfQorfQorZnVuY3Rpb24gb25DYW5jZWwoKSB7CisJX19kbGdfY2xvc2UobnVsbCk7CisJcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBvbk9LKHNuaXBwZXRudW0saG93KSB7CisJdmFyIHBhcmFtcyA9IG5ldyBPYmplY3QoKTsKKwlwYXJhbXNbInNuaXBwZXRudW0iXSA9IHNuaXBwZXRudW07CisJcGFyYW1zWyJob3ciXSA9IGhvdzsKKwlfX2RsZ19jbG9zZShwYXJhbXMpOworCXJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gX19kbGdfa2V5X3ByZXNzKGV2KSB7CisJZXYgfHwgKGV2ID0gd2luZG93LmV2ZW50KTsKKwlzd2l0Y2goZXYua2V5Q29kZSkgeworCQljYXNlIDEzOgorCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRfb2snKS5jbGljaygpOworCQkJYnJlYWs7CisJCWNhc2UgMjc6CisJCV9fZGxnX2Nsb3NlKCk7CisJCXJldHVybiBmYWxzZTsKKwl9CityZXR1cm4gdHJ1ZTsKK30KKzwvc2NyaXB0PgorCis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorYm9keSB7bWFyZ2luOjAgIUlNUE9SVEFOVDtwYWRkaW5nOjAgIUlNUE9SVEFOVDt9CisuYnV0dG9ucyB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6IDVweDsgdGV4dC1hbGlnbjogcmlnaHQ7IGhlaWdodDogMjBweDsgfQordGQge2JhY2tncm91bmQ6d2hpdGU7cGFkZGluZzo1cHg7Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItY29sb3I6IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25TaGFkb3cgQnV0dG9uU2hhZG93IEJ1dHRvbkhpZ2hsaWdodDt9CisucHJldmlldyB7fQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IGNsYXNzPSJkaWFsb2ciIG9ubG9hZD0iSW5pdCgpIj4KKzxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9ImdldCI+CisgIDxkaXYgY2xhc3M9InRpdGxlIiA+SW5zZXJ0IFNuaXBwZXQ8L2Rpdj4KKyAgPGRpdiBzdHlsZT0iaGVpZ2h0OjQ3MHB4O292ZXJmbG93OmF1dG87Ij4KKyAgPHRhYmxlIHN0eWxlPSJib3JkZXI6IDA7IHdpZHRoOiAxMDAlOyIgaWQ9InNuaXBwZXR0YWJsZSI+CisgIDwvdGFibGU+CisgIDwvZGl2PgorPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgorPGRpdiBjbGFzcz0iYnV0dG9ucyI+Cis8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgb25jbGljaz0icmV0dXJuIG9uQ2FuY2VsKCk7Ij5DYW5jZWw8L2J1dHRvbj4KKzwvZGl2PgorPC9mb3JtPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9yZWFkbWUuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9yZWFkbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGE5MDVhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L3JlYWRtZS5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzwhRE9DVFlQRSBodG1sCisgICAgIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iCisgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorCis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Cis8aGVhZD4KKyAgPHRpdGxlPkluc2VydFNuaXBwZXQgZm9yIFhpbmhhPC90aXRsZT4KKyAgCis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBib2R5IHsgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IH0KKyAgcHJlIHtib3JkZXI6IGRvdHRlZCBncmV5IHRoaW47IGJhY2tncm91bmQtY29sb3I6TGlnaHRZZWxsb3c7cGFkZGluZzoxMHB4IH0KKyAgcCB7IHdpZHRoOjUwMHB4IH0KKyAgPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgPgorPGgxPkluc2VydFNuaXBwZXQgZm9yIFhpbmhhPC9oMT4KKzxwPkluc2VydCBIVE1MIGZyYWdtZW50cyBpbiB5b3VyIGRvY3VtZW50LgorCis8L3A+Cis8aDI+VXNhZ2U8L2gyPgorPHA+CitJbiBvcmRlciB0byB1c2UgeW91ciBvd24gc25pcHBldHMgeW91IGhhdmUgdG8gYWRkIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgdG8geW91ciB4aW5oYV9jb25maWc6Cis8L3A+Cis8cHJlPgoreGluaGFfY29uZmlnLkluc2VydFNuaXBwZXQuc25pcHBldHMgPSBYaW5oYS5nZXRQbHVnaW5EaXIoJ0luc2VydFNuaXBwZXQnKSArICIvc25pcHBldHMucGhwIjsKKzwvcHJlPgorPHA+CitUaGUgcGF0aCBhYm92ZSBpbmRpY2F0ZXMgdGhlIHVzZSBvZiB0aGUgcHJvdmlkZWQgYmFja2VuZC4gVGhpcyBwYXJzZXMgYSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIHNuaXBwZXRzIGFuZCAKK3Nob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorPC9wPgorPHByZT4KKyZsdDshLS1TbmlwcGV0IElELS0mZ3Q7CitTbmlwcGV0IGNvbnRlbnQKKyZsdDshLS0vU25pcHBldCBJRC0tJmd0OworLi4uYW5kIHNvIG9uCis8L3ByZT4KKzxwPgorWW91IGNhbiB1c2UgdGhlIHNuaXBwZXRzLmh0bWwgaW4gdGhlIHBsdWdpbiBmb2xkZXIgb3IgdGVsbCB0aGUgYmFja2VuZCB3aGVyZSB0byBmaW5kIHRoZSBmaWxlIGxpa2UgdGhpcworPC9wPgorPHByZT4KK3dpdGggKHhpbmhhX2NvbmZpZy5JbnNlcnRTbmlwcGV0KQoreworCSZsdDs/cGhwCisKKwkvLyBkZWZpbmUgYmFja2VuZCBjb25maWd1cmF0aW9uIGZvciB0aGUgcGx1Z2luCisJJGJhY2tlbmRfZGF0YVsnc25pcHBldHNfZmlsZSddID0gJy9maWxlL2NvbnRhaW5pbmcvc25pcHBldHMuaHRtbCc7CisJcmVxdWlyZV9vbmNlICcuLi9jb250cmliL3BocC14aW5oYS5waHAnOworCXhpbmhhX3Bhc3NfdG9fcGhwX2JhY2tlbmQoJGJhY2tlbmRfZGF0YSk7CisgICAgCisJPyZndDsKK30KKzwvcHJlPgorCis8cCBzdHlsZT0iZm9udC1zaXplOjgwJSI+UmFpbXVuZCBNZXllciAoeGluaGFAcmFpbXVuZG1leWVyLmRlKTwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9zbmlwcGV0cy5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0L3NuaXBwZXRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E4ZGFkMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9zbmlwcGV0cy5odG1sCkBAIC0wLDAgKzEsMjkgQEAKKzwhLS1Cb3ggMS0tPgorPGRpdiBjbGFzcz0ibWVzc2FnZV9ib3ggcmVkIj4KKyAgIFZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8veGluaGEub3JnIj5YaW5oYSB3ZWJzaXRlPC9hPgorPC9kaXY+Cis8IS0tL0JveCAxLS0+Cis8IS0tSU5GT1JNQVRJT04gQUJPVVQgU09NRVRISU5HLS0+Cis8ZGl2IGNsYXNzPSJtZXNzYWdlX2JveCBncmVlbiI+CisgICBUaGlzIGlzIGFuIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZworPC9kaXY+Cis8IS0tL0lORk9STUFUSU9OIEFCT1VUIFNPTUVUSElORy0tPgorPCEtLU1lbnUtLT4KKzx1bCBjbGFzcz0ibmF2aV9saW5rcyI+CisgICA8bGkgY2xhc3M9Im5hdmkiPgorICAgICAgICA8YSBocmVmPSJMaW5rMSIgY2xhc3M9IkxpbmsxIiB0YWJpbmRleD0iMSI+PHNwYW4gY2xhc3M9InNwYW5fY2xhc3MiPiBMaW5rMSA8L3NwYW4+PC9hPgorICAgPC9saT4KKyAgIDxsaSBjbGFzcz0ibmF2aSI+CisgICAgICAgIDxhIGhyZWY9IkxpbmsyIiBjbGFzcz0iTGluazIiIHRhYmluZGV4PSIyIj48c3BhbiBjbGFzcz0ic3Bhbl9jbGFzcyI+IExpbmsyIDwvc3Bhbj48L2E+CisgICA8L2xpPgorICAgPGxpIGNsYXNzPSJuYXZpIj4KKyAgICAgICAgPGEgaHJlZj0iTGluazMiIGNsYXNzPSJMaW5rMyIgdGFiaW5kZXg9IjMiPjxzcGFuIGNsYXNzPSJzcGFuX2NsYXNzIj4gTGluazMgPC9zcGFuPjwvYT4KKyAgIDwvbGk+CisgICA8bGkgY2xhc3M9Im5hdmkiPgorICAgICAgICA8YSBocmVmPSJMaW5rNCIgY2xhc3M9Ikxpbms0IiB0YWJpbmRleD0iNCI+PHNwYW4gY2xhc3M9InNwYW5fY2xhc3MiPiBMaW5rNCA8L3NwYW4+PC9hPgorICAgPC9saT4KKyAgIDxsaSBjbGFzcz0ibmF2aSI+CisgICAgICAgIDxhIGhyZWY9Ikxpbms1IiBjbGFzcz0iTGluazUiIHRhYmluZGV4PSI1Ij48c3BhbiBjbGFzcz0ic3Bhbl9jbGFzcyI+IExpbms1IDwvc3Bhbj48L2E+CisgICA8L2xpPgorPC91bD4KKzwhLS0vTWVudS0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldC9zbmlwcGV0cy5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvc25pcHBldHMucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNTlkYjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQvc25pcHBldHMucGhwCkBAIC0wLDAgKzEsMjIgQEAKKzw/cGhwDQorJHNuaXBwZXRzX2ZpbGUgPSAnc25pcHBldHMuaHRtbCc7DQorDQoraW5jbHVkZV9vbmNlKCcuLi8uLi9jb250cmliL3BocC14aW5oYS5waHAnKTsNCisNCitpZigkcGFzc2VkX2RhdGEgPSB4aW5oYV9yZWFkX3Bhc3NlZF9kYXRhKCkpDQorew0KKwlleHRyYWN0KCRwYXNzZWRfZGF0YSk7ICAgICAgDQorfQ0KKyRzbmlwcGV0cyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRzbmlwcGV0c19maWxlKTsNCitwcmVnX21hdGNoX2FsbCgnLzwhLS0oLio/KS0tPiguKj8pPCEtLVwvLio/LS0+L3MnLCRzbmlwcGV0cywkbWF0Y2hlcyk7DQorCQ0KKyRhcnJheT1hcnJheSgpOw0KK2ZvciAoJGk9MDskaTxjb3VudCgkbWF0Y2hlc1sxXSk7JGkrKykNCit7DQorCSRpZCA9ICRtYXRjaGVzWzFdWyRpXTsNCisJJGh0bWwgPSAkbWF0Y2hlc1syXVskaV07DQorCSRhcnJheVtdID0gYXJyYXkoJ2lkJz0+JGlkLCdIVE1MJz0+JGh0bWwpOw0KK30NCitwcmludCAidmFyIHNuaXBwZXRzID0gIiAuIHhpbmhhX3RvX2pzKCRhcnJheSk7DQorDQorPz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL0luc2VydFNuaXBwZXQuY3NzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9JbnNlcnRTbmlwcGV0LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzkxZTdmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9JbnNlcnRTbmlwcGV0LmNzcwpAQCAtMCwwICsxLDkyIEBACitodG1sID4gYm9keSAuSVNzbmlwcGV0dGFibGUgYnV0dG9uIHsgbWluLXdpZHRoOjcwcHg7d2hpdGUtc3BhY2U6bm93cmFwO30KKworLklTc25pcHBldHRhYmxlIHRkIHsKKyAKKwliYWNrZ3JvdW5kOndoaXRlOworCXZlcnRpY2FsLWFsaWduOnRvcDsKK30KKworLklTc25pcHBldHRhYmxlIHRkIHsKKwlwYWRkaW5nOjVweDsKKwlib3JkZXI6MXB4IHNvbGlkOworCWJvcmRlci1jb2xvcjogQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvblNoYWRvdyBCdXR0b25TaGFkb3cgQnV0dG9uSGlnaGxpZ2h0OworfQorLklTc25pcHBldHRhYmxlIGJ1dHRvbiB7dGV4dC1hbGlnbjpjZW50ZXI7fQorLklTc25pcHBldHRhYmxlIGEuYnV0dG9uIHsvKmJhY2tncm91bmQ6QnV0dG9uRmFjZTsqL3BhZGRpbmc6MXB4IDVweCAxcHggNXB4O2NvbG9yOmJsYWNrO3RleHQtZGVjb3JhdGlvbjpub25lfQorLklTcHJldmlldyB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgcGFkZGluZzogNXB4OworCWRpc3BsYXkgOiBub25lOworCXBvc2l0aW9uIDogYWJzb2x1dGU7CisJdG9wIDogMTJweDsKKwlsZWZ0IDoxMDBweDsKKwlib3JkZXIgOiAxcHggZG90dGVkIGJsYWNrOworCXotaW5kZXg6MTAwOworfQorLklTY2F0dGFicyB7bGluZS1oZWlnaHQ6MThweDsgfQorLklTY2F0dGFicyBhIHsKKwl3aGl0ZS1zcGFjZTpub3dyYXA7CisJYm9yZGVyLXdpZHRoOjFweCAxcHggMHB4IDFweDsKKwlib3JkZXItY29sb3I6IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25TaGFkb3cgQnV0dG9uU2hhZG93IEJ1dHRvbkhpZ2hsaWdodDsKKwlib3JkZXItc3R5bGU6c29saWQ7CisJcGFkZGluZzo0cHg7CisJbWFyZ2luLWxlZnQ6MXB4OworCXRleHQtZGVjb3JhdGlvbjpub25lOworCWNvbG9yOmJsYWNrOworCS1tb3otYm9yZGVyLXJhZGl1czoxMHB4IDEwcHggMHB4IDBweDsKKwloZWlnaHQ6MTJweDsKKwliYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDsKK30KKworLklTY2F0dGFicyAudGFiMSB7CisJYmFja2dyb3VuZC1pbWFnZTp1cmwoaW1nLzEuUE5HKTsKK30KKy5JU2NhdHRhYnMgLnRhYjIgeworCWJhY2tncm91bmQtaW1hZ2U6dXJsKGltZy8yLlBORyk7Cit9CisuSVNjYXR0YWJzIC50YWIzIHsKKwliYWNrZ3JvdW5kLWltYWdlOnVybChpbWcvMy5QTkcpOworfQorLklTY2F0dGFicyAudGFiNCB7CisJYmFja2dyb3VuZC1pbWFnZTp1cmwoaW1nLzQuUE5HKTsKK30KKy5JU2NhdHRhYnMgLnRhYjUgeworCWJhY2tncm91bmQtaW1hZ2U6dXJsKGltZy81LlBORyk7Cit9CisuSVNjYXR0YWJzIC50YWI2IHsKKwliYWNrZ3JvdW5kLWltYWdlOnVybChpbWcvNi5QTkcpOworfQorLklTY2F0dGFicyAudGFiNyB7CisJYmFja2dyb3VuZC1pbWFnZTp1cmwoaW1nLzcuUE5HKTsKK30KKy5JU2NhdHRhYnMgLnRhYjggeworCWJhY2tncm91bmQtaW1hZ2U6dXJsKGltZy84LlBORyk7Cit9CisuSVNjYXR0YWJzIC50YWI5IHsKKwliYWNrZ3JvdW5kLWltYWdlOnVybChpbWcvOS5QTkcpOworfQorLklTY2F0dGFicyAudGFiMTAgeworCWJhY2tncm91bmQtaW1hZ2U6dXJsKGltZy8xMC5QTkcpOworfQorLklTY2F0dGFicyAudGFiMTEgeworCWJhY2tncm91bmQtaW1hZ2U6dXJsKGltZy8xMS5QTkcpOworfQorLklTY2F0dGFicyAudGFiMTIgeworCWJhY2tncm91bmQtaW1hZ2U6dXJsKGltZy8xMi5QTkcpOworfQorLklTY2F0dGFicyAudGFiMTMgeworCWJhY2tncm91bmQtaW1hZ2U6dXJsKGltZy8xMy5QTkcpOworfQorLklTY2F0dGFicyAudGFiMTQgeworCWJhY2tncm91bmQtaW1hZ2U6dXJsKGltZy8xNC5QTkcpOworfQorLklTY2F0dGFicyAudGFiMTUgeworCWJhY2tncm91bmQtaW1hZ2U6dXJsKGltZy8xNS5QTkcpOworfQorLklTY2F0dGFicyAudGFiMTYgeworCWJhY2tncm91bmQtaW1hZ2U6dXJsKGltZy8xNi5QTkcpOworfQorLklTY2F0dGFicyBhLmFjdGl2ZSB7CisJZm9udC13ZWlnaHQ6Ym9sZDsKKwlib3JkZXItd2lkdGg6MXB4IDJweCAwcHggMnB4Cit9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL0luc2VydFNuaXBwZXQyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9JbnNlcnRTbmlwcGV0Mi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODI0MzAwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9JbnNlcnRTbmlwcGV0Mi5qcwpAQCAtMCwwICsxLDM5NiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorIEluc2VydFNuaXBwZXQyIGZvciBYaW5oYQorIF9fX19fX19fX19fX19fX19fX19fX19fCisgCisgSW5zZXJ0IEhUTUwgZnJhZ21lbnRzIG9yIHRlbXBsYXRlIHZhcmlhYmxlcworIAorXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitmdW5jdGlvbiBJbnNlcnRTbmlwcGV0MihlZGl0b3IpIHsKKyAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisKKyAgdmFyIGNmZyA9IGVkaXRvci5jb25maWc7CisgIHZhciBzZWxmID0gdGhpczsKKyAgCisKKyAgY2ZnLnJlZ2lzdGVyQnV0dG9uKHsKKyAgaWQgICAgICAgOiAiSW5zZXJ0U25pcHBldDIiLAorICB0b29sdGlwICA6IHRoaXMuX2xjKCJJbnNlcnQgU25pcHBldCIpLAorICBpbWFnZSAgICA6IGVkaXRvci5pbWdVUkwoImVkX3NuaXBwZXQuZ2lmIiwgIkluc2VydFNuaXBwZXQyIiksCisgIHRleHRNb2RlIDogZmFsc2UsCisgIGFjdGlvbiAgIDogZnVuY3Rpb24oZWRpdG9yKSB7CisgICAgICAgICAgc2VsZi5idXR0b25QcmVzcyhlZGl0b3IpOworICAgICAgfQorICB9KTsKKyAgY2ZnLmFkZFRvb2xiYXJFbGVtZW50KCJJbnNlcnRTbmlwcGV0MiIsICJpbnNlcnRpbWFnZSIsIC0xKTsKKyAgdGhpcy5zbmlwcGV0cyA9IG51bGw7CisgIHRoaXMuY2F0ZWdvcmllcyA9IG51bGw7CisgIHRoaXMuaHRtbCA9bnVsbDsKKyAgICAgIAorICBYaW5oYS5fZ2V0YmFjayhjZmcuSW5zZXJ0U25pcHBldDIuc25pcHBldHMsZnVuY3Rpb24gKHR4dCxyZXEpIHsKKyAgICAgICAgICAgICAgICAgIHZhciB4bWw9cmVxLnJlc3BvbnNlWE1MOworICAgICAgICAgICAgICAgICAgdmFyIGMgPSB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2MnKTsKKyAgICAgICAgICAgICAgICAgIHNlbGYuY2F0ZWdvcmllcyA9IFtdOworICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaT0wO2k8Yy5sZW5ndGg7aSsrKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2F0ZWdvcmllcy5wdXNoKGNbaV0uZ2V0QXR0cmlidXRlKCduJykpOwkKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIHZhciBzID0geG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzJyk7CisgICAgICAgICAgICAgICAgICBzZWxmLnNuaXBwZXRzID0gW107CisgICAgICAgICAgICAgICAgICB2YXIgdGV4dENvbnRlbnQsaXRlbTsKKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaT0wO2k8cy5sZW5ndGg7aSsrKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqPTA7ajxzW2ldLmF0dHJpYnV0ZXMubGVuZ3RoO2orKykKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1bc1tpXS5hdHRyaWJ1dGVzW2pdLm5vZGVOYW1lXSA9IHNbaV0uYXR0cmlidXRlc1tqXS5ub2RlVmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uaHRtbCA9IHNbaV0udGV4dCB8fCBzW2ldLnRleHRDb250ZW50OworICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc25pcHBldHMucHVzaChpdGVtKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgfSk7CisgIFhpbmhhLmxvYWRTdHlsZSgnSW5zZXJ0U25pcHBldC5jc3MnLCdJbnNlcnRTbmlwcGV0MicsJ0lTY3NzJyk7Cit9CisKK0luc2VydFNuaXBwZXQyLnByb3RvdHlwZS5vblVwZGF0ZVRvb2xiYXIgPSBmdW5jdGlvbigpIAoreworICBpZiAoIXRoaXMuc25pcHBldHMpCisgIHsKKyAgICAgIHRoaXMuZWRpdG9yLl90b29sYmFyT2JqZWN0cy5JbnNlcnRTbmlwcGV0Mi5zdGF0ZSgiZW5hYmxlZCIsIGZhbHNlKTsKKyAgfQorICBlbHNlIEluc2VydFNuaXBwZXQyLnByb3RvdHlwZS5vblVwZGF0ZVRvb2xiYXIgPSBudWxsOworfQorCitJbnNlcnRTbmlwcGV0Mi5fcGx1Z2luSW5mbyA9IHsKKyAgbmFtZSAgICAgICAgICA6ICJJbnNlcnRTbmlwcGV0MiIsCisgIHZlcnNpb24gICAgICAgOiAiMS4yIiwKKyAgZGV2ZWxvcGVyICAgICA6ICJSYWltdW5kIE1leWVyIiwKKyAgZGV2ZWxvcGVyX3VybCA6ICJodHRwOi8veC13ZWJzZXJ2aWNlLm5ldCIsCisgIGNfb3duZXIgICAgICAgOiAiUmFpbXVuZCBNZXllciIsCisgIHNwb25zb3IgICAgICAgOiAiIiwKKyAgc3BvbnNvcl91cmwgICA6ICIiLAorICBsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIgorfTsKKworWGluaGEuQ29uZmlnLnByb3RvdHlwZS5JbnNlcnRTbmlwcGV0MiA9Cit7CisgICdzbmlwcGV0cycgOiBYaW5oYS5nZXRQbHVnaW5EaXIoJ0luc2VydFNuaXBwZXQyJykrJy9zbmlwcGV0cy54bWwnCit9OworICAgIAorSW5zZXJ0U25pcHBldDIucHJvdG90eXBlLl9sYyA9IGZ1bmN0aW9uKHN0cmluZykgeworICAgIHJldHVybiBYaW5oYS5fbGMoc3RyaW5nLCAnSW5zZXJ0U25pcHBldDInKTsKK307CisKK0luc2VydFNuaXBwZXQyLnByb3RvdHlwZS5vbkdlbmVyYXRlT25jZSA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLl9wcmVwYXJlRGlhbG9nKCk7Cit9OworSW5zZXJ0U25pcHBldDIucHJvdG90eXBlLl9wcmVwYXJlRGlhbG9nID0gZnVuY3Rpb24oKQoreworICB2YXIgc2VsZiA9IHRoaXM7CisgIGlmKCF0aGlzLmh0bWwpIC8vIHJldHJpZXZlIHRoZSByYXcgZGlhbG9nIGNvbnRlbnRzCisgIHsKKyAgICBYaW5oYS5fZ2V0YmFjayhYaW5oYS5nZXRQbHVnaW5EaXIoJ0luc2VydFNuaXBwZXQyJykrJy9kaWFsb2cuaHRtbCcsIGZ1bmN0aW9uKGdldGJhY2spIHsgc2VsZi5odG1sID0gZ2V0YmFjazsgc2VsZi5fcHJlcGFyZURpYWxvZygpOyB9KTsKKyAgICByZXR1cm47CisgIH0KKyAgaWYgKCF0aGlzLnNuaXBwZXRzKQorICB7CisgICAgc2V0VGltZW91dChmdW5jdGlvbigpe3NlbGYuX3ByZXBhcmVEaWFsb2coKX0sNTApOworICAgIHJldHVybjsKKyAgfQorICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisgIHZhciBJbnNlcnRTbmlwcGV0MiA9IHRoaXM7CisgIAorICB0aGlzLmRpYWxvZyA9IG5ldyBYaW5oYS5EaWFsb2coZWRpdG9yLCB0aGlzLmh0bWwsICdJbnNlcnRTbmlwcGV0Micse3dpZHRoOjgwMCxoZWlnaHQ6NDAwfSx7bW9kYWw6dHJ1ZX0pOworICBYaW5oYS5fYWRkQ2xhc3MoIHRoaXMuZGlhbG9nLnJvb3RFbGVtLCAnSW5zZXJ0U25pcHBldDInICk7CisgIAorICB2YXIgZGlhbG9nID0gdGhpcy5kaWFsb2c7CisgIHZhciBtYWluID0gdGhpcy5kaWFsb2cubWFpbjsKKyAgdmFyIGNhcHRpb24gPSB0aGlzLmRpYWxvZy5jYXB0aW9uQmFyOworICAKKyAgdGhpcy5zbmlwcGV0VGFibGUgPSBkaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ3NuaXBwZXR0YWJsZScpOworICAKKyAgdGhpcy5kcmF3Q2F0VGFicygpOworICB0aGlzLmRyYXdTbmlwcGV0VGFibGUoKTsKKyAgdGhpcy5wcmVwYXJlUHJldmlldygpOworICAKKyAgZGlhbG9nLm9ucmVzaXplID0gZnVuY3Rpb24oKSB7c2VsZi5yZXNpemUoKTsgfSAKKyAgCisgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdzZWFyY2gnKS5vbmtleXVwID0gZnVuY3Rpb24oKSB7IHNlbGYuc2VhcmNoICgpfTsKKyAgdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ3dvcmRiZWdpbicpLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsgc2VsZi5zZWFyY2ggKCl9OworICB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgnY2FuY2VsJykub25jbGljayA9IGZ1bmN0aW9uKCkgeyBzZWxmLmRpYWxvZy5oaWRlICgpfTsKKyAgCit9CisKK0luc2VydFNuaXBwZXQyLnByb3RvdHlwZS5kcmF3U25pcHBldFRhYmxlID0gZnVuY3Rpb24oKQoreworICBpZiAoIXRoaXMuc25pcHBldHMubGVuZ3RoKSByZXR1cm47CisgIHZhciBzZWxmID0gdGhpczsKKyAgdmFyIHRib2R5ID0gdGhpcy5zbmlwcGV0VGFibGU7CisgIHZhciBzbmlwcGV0cyA9IHRoaXMuc25pcHBldHM7CisKKyAgd2hpbGUgKHRib2R5Lmhhc0NoaWxkTm9kZXMoKSkKKyAgeworICAgIHRib2R5LnJlbW92ZUNoaWxkKHRib2R5Lmxhc3RDaGlsZCk7CisgIH0KKyAgdmFyIGlkLHNuaXBwZXRfbmFtZSwgc25pcHBldF9odG1sLCBzbmlwcGV0X2NhdCwgc25pcHBldF92YXJuYW1lLCB0cm93LCBuZXdDZWxsLCBjZWxsTm8sIGJ0bjsKKworICBmb3IodmFyIGkgPSAwLHRyb3dObz0wOyBpIDwgc25pcHBldHMubGVuZ3RoOyBpKyspIAorICB7CisgICAgaWQgPSBpOworICAgIHNuaXBwZXRfbmFtZSA9IHNuaXBwZXRzW2ldWyduJ107CisgICAgc25pcHBldF9jYXQgPSBzbmlwcGV0c1tpXVsnYyddOworICAgIHNuaXBwZXRfdmFybmFtZSA9IHNuaXBwZXRzW2ldWyd2J10KKyAgICBzbmlwcGV0X2h0bWwgPSBzbmlwcGV0c1tpXVsnaHRtbCddOworICAgIAorICAgIGlmICh0aGlzLmNhdGVnb3J5RmlsdGVyICYmIHNuaXBwZXRfY2F0ICE9IHRoaXMuY2F0ZWdvcnlGaWx0ZXIgJiYgdGhpcy5jYXRlZ29yeUZpbHRlciAhPSAnYWxsJykgY29udGludWU7CisKKyAgICB0cm93ID0gdGJvZHkuaW5zZXJ0Um93KHRyb3dObyk7CisgICAgdHJvd05vKys7CisKKyAgICBjZWxsTm8gPSAwOworICAgIG5ld0NlbGwgPSB0cm93Lmluc2VydENlbGwoY2VsbE5vKTsKKworICAgIG5ld0NlbGwub25tb3VzZW92ZXIgPSBmdW5jdGlvbihldmVudCkge3JldHVybiBzZWxmLnByZXZpZXcoZXZlbnQgfHwgd2luZG93LmV2ZW50KX07CisgICAgbmV3Q2VsbC5vbm1vdXNlb3V0ICA9IGZ1bmN0aW9uKCkge3JldHVybiBzZWxmLnByZXZpZXcoKX07CisgICAgbmV3Q2VsbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzbmlwcGV0X25hbWUpKTsKKyAgICBuZXdDZWxsLnNuSUQgPSBpZDsKKyAgICAKKyAgICBuZXdDZWxsLmlkID0gJ2NlbGwnICsgaWQ7CisgICAgY2VsbE5vKys7CisKKyAgICBuZXdDZWxsID0gdHJvdy5pbnNlcnRDZWxsKGNlbGxObyk7CisgICAgCisgICAgbmV3Q2VsbC5zdHlsZS53aGl0ZVNwYWNlID0gJ25vd3JhcCc7CisgICAgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CisgICAgYnRuLnNuSUQgPSBpZDsKKyAgICBidG4uX2luc0FzID0gJ2h0bWwnOworICAgIGJ0bi5vbmNsaWNrID0gZnVuY3Rpb24oZXZlbnQpIHtzZWxmLmRvSW5zZXJ0KGV2ZW50IHx8IHdpbmRvdy5ldmVudCk7IHJldHVybiBmYWxzZX07CisgICAgYnRuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuX2xjKCJIVE1MIikpKTsKKyAgICBidG4udGl0bGUgPSB0aGlzLl9sYygiSW5zZXJ0IGFzIEhUTUwiKTsKKyAgICBuZXdDZWxsLmFwcGVuZENoaWxkKGJ0bik7CisgICAgCisgICAgaWYgKHNuaXBwZXRfdmFybmFtZSkKKyAgICB7CisgICAgICBuZXdDZWxsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgJykpOworICAgICAgdmFyIGJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOworICAgICAgICAgIGJ0bi5zbklEID0gaWQ7CisgICAgICAgICAgYnRuLl9pbnNBcyA9ICd2YXJpYWJsZSc7CisgICAgICAgICAgYnRuLm9uY2xpY2sgPSBmdW5jdGlvbihldmVudCkge3NlbGYuZG9JbnNlcnQoZXZlbnQgfHwgd2luZG93LmV2ZW50KTsgcmV0dXJuIGZhbHNlfTsKKyAgICAgICAgICBidG4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy5fbGMoIlZhcmlhYmxlIikpKTsKKyAgICAgICAgICBidG4udGl0bGUgPSB0aGlzLl9sYygiSW5zZXJ0IGFzIHRlbXBsYXRlIHZhcmlhYmxlIik7CisKKyAgICAgIG5ld0NlbGwuYXBwZW5kQ2hpbGQoYnRuKTsKKyAgICB9CisKKyAgICBjZWxsTm8rKzsKKyAgfQorfQorSW5zZXJ0U25pcHBldDIucHJvdG90eXBlLmRyYXdDYXRUYWJzID0gZnVuY3Rpb24oKQoreworICBpZiAoIXRoaXMuY2F0ZWdvcmllcy5sZW5ndGgpIHJldHVybjsKKyAgdmFyIHNlbGYgPSB0aGlzOworICB2YXIgdGFic2RpdiA9IHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJjYXR0YWJzIik7CisgIAorICB3aGlsZSAodGFic2Rpdi5oYXNDaGlsZE5vZGVzKCkpCisgIHsKKyAgICB0YWJzZGl2LnJlbW92ZUNoaWxkKHRhYnNkaXYubGFzdENoaWxkKTsKKyAgfQorICB2YXIgdGFic19pID0gMTsKKyAgdmFyIHRhYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKKyAgICAgIHRhYi5ocmVmID0gImphdmFzY3JpcHQ6dm9pZCgwKTsiOworICAgICAgdGFiLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuX2xjKCJBbGwgQ2F0ZWdvcmllcyIpKSk7CisgICAgICB0YWIuY2F0ID0gJ2FsbCc7CisgICAgICB0YWIuY2xhc3NOYW1lID0gInRhYiIrdGFic19pOworICAgICAgdGFiLm9uY2xpY2sgPSBmdW5jdGlvbigpIHtzZWxmLmNhdGVnb3J5RmlsdGVyID0gc2VsZi5jYXQ7IHNlbGYuZHJhd0NhdFRhYnMoKTtzZWxmLmRyYXdTbmlwcGV0VGFibGUoKTsgc2VsZi5zZWFyY2ggKCl9IAorICAgICAgaWYgKCF0aGlzLmNhdGVnb3J5RmlsdGVyIHx8IHRoaXMuY2F0ZWdvcnlGaWx0ZXIgPT0gJ2FsbCcpCisgICAgICB7CisgICAgICAgIFhpbmhhLl9hZGRDbGFzcyh0YWIsJ2FjdGl2ZScpOworICAgICAgICB0YWIub25jbGljayA9IG51bGw7CisgICAgICB9CisgIHRhYnNkaXYuYXBwZW5kQ2hpbGQodGFiKTsKKyAgdGFic19pKys7CisKKyAgZm9yICh2YXIgaSA9IDA7aSA8IHRoaXMuY2F0ZWdvcmllcy5sZW5ndGg7aSsrKQorICB7CisgICAgdmFyIG5hbWUgPSB0aGlzLmNhdGVnb3JpZXNbaV07CisgICAgdmFyIHRhYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKKyAgICAgICAgdGFiLmhyZWYgPSAiamF2YXNjcmlwdDp2b2lkKDApOyI7CisgICAgICAgIHRhYi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuYW1lKSk7CisgICAgICAgIHRhYi5jYXQgPSBuYW1lOworICAgICAgICB0YWIuY2xhc3NOYW1lID0gInRhYiIrdGFic19pOworICAgICAgICB0YWIub25jbGljayA9IGZ1bmN0aW9uKCkge3NlbGYuY2F0ZWdvcnlGaWx0ZXIgPSB0aGlzLmNhdDsgc2VsZi5kcmF3Q2F0VGFicygpO3NlbGYuZHJhd1NuaXBwZXRUYWJsZSgpOyBzZWxmLnNlYXJjaCAoKX0gCisgICAgICAgIGlmIChuYW1lID09IHRoaXMuY2F0ZWdvcnlGaWx0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIFhpbmhhLl9hZGRDbGFzcyh0YWIsJ2FjdGl2ZScpOworICAgICAgICAgICAgdGFiLm9uY2xpY2sgPSBudWxsOworICAgICAgICB9CisgICAgdGFic2Rpdi5hcHBlbmRDaGlsZCh0YWIpOworICAgIGlmIChYaW5oYS5pc19nZWNrbykgdGFic2Rpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcuZnJvbUNoYXJDb2RlKDgyMDMpKSk7CisgICAgdGFic19pID0gKHRhYnNfaTwxNikgPyB0YWJzX2kgKzEgOiAxOworICB9CisKKyAgaWYgKCF0aGlzLmNhdFRhYnNIKQorICB7CisgICAgdGhpcy5jYXRUYWJzSCA9IHRhYnNkaXYub2Zmc2V0SGVpZ2h0OworICB9Cit9CitJbnNlcnRTbmlwcGV0Mi5wcm90b3R5cGUuc2VhcmNoID0gZnVuY3Rpb24gKCkKK3sKKyAgdmFyIHRib2R5ID0gdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoInNuaXBwZXR0YWJsZSIpOworICB2YXIgc2VhcmNoRmllbGQgPXRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdzZWFyY2gnKTsKKyAgaWYgKHNlYXJjaEZpZWxkLnZhbHVlKQorICB7CisgICAgdmFyIHZhbCA9ICBzZWFyY2hGaWVsZC52YWx1ZTsKKworICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSgvXC4/KFsqPytdKS9nLCcuJDEnKTsKKworICAgIHZhciB3b3Jkc3RhcnQgPSAodGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ3dvcmRiZWdpbicpLmNoZWNrZWQpID8gJ14nIDogJyc7CisgICAgdHJ5IHsgdmFyIHJlID0gbmV3IFJlZ0V4cCAod29yZHN0YXJ0K3ZhbCwnaScpOyB9IGNhdGNoIChlKSB7dmFyIHJlID0gbnVsbH07CisgIH0KKyAgZWxzZSB2YXIgcmUgPSBudWxsOworCisgIGZvciAodmFyIGk9MDtpPHRib2R5LmNoaWxkTm9kZXMubGVuZ3RoO2krKykKKyAgeworICAgIHZhciB0ciA9IHRib2R5LmNoaWxkTm9kZXNbaV07IAorICAgIHZhciBuYW1lID0gdHIuZmlyc3RDaGlsZC5maXJzdENoaWxkLmRhdGE7CisgICAgaWYgKHJlICYmICFuYW1lLm1hdGNoKHJlKSkKKyAgICB7CisgICAgICB0ci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgIH0KKyAgICBlbHNlIAorICAgIHsKKyAgICAgIHRyLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgICB9CisgIH0KK30KK0luc2VydFNuaXBwZXQyLnByb3RvdHlwZS5wcmV2aWV3ID0gZnVuY3Rpb24oZXZlbnQpCit7CisgIGlmICghZXZlbnQpCisgIHsKKyAgICB0aGlzLnByZXZpZXdCb2R5LmlubmVySFRNTCA9ICcnOworICAgIHJldHVybjsKKyAgfQorICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7CisgIHZhciBzbklEID0gdGFyZ2V0LnNuSUQ7CisgIGlmICghdGhpcy5wcmV2aWV3Qm9keSkKKyAgeworICAgIHRoaXMucHJlcGFyZVByZXZpZXcoKTsKKyAgICByZXR1cm47CisgIH0KKyAgaWYgKHRoaXMucHJldmlld0lmcmFtZS5zdHlsZS5kaXNwbGF5ID09ICdub25lJykKKyAgeworICAgIHRoaXMucHJldmlld0lmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKKyAgfQorICB0aGlzLnByZXZpZXdCb2R5LmlubmVySFRNTCA9IHRoaXMuc25pcHBldHNbc25JRF0uaHRtbDsKK30KK0luc2VydFNuaXBwZXQyLnByb3RvdHlwZS5wcmVwYXJlUHJldmlldyA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworICB2YXIgc2VsZiA9IHRoaXM7CisgIHZhciBwcmV2aWV3X2lmcmFtZSA9IHRoaXMucHJldmlld0lmcmFtZSA9IHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdwcmV2aWV3X2lmcmFtZScpOworCisgIHZhciBkb2MgPSBudWxsOworICAKKyAgdHJ5CisgIHsKKyAgICBpZiAoIHByZXZpZXdfaWZyYW1lLmNvbnRlbnREb2N1bWVudCApCisgICAgeworICAgICAgZG9jID0gcHJldmlld19pZnJhbWUuY29udGVudERvY3VtZW50OyAgICAgICAgCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBkb2MgPSBwcmV2aWV3X2lmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50OworICAgIH0KKyAgICAvLyB0cnkgbGF0ZXIKKyAgICBpZiAoICFkb2MgKQorICAgIHsKKyAgICAgIGlmICggWGluaGEuaXNfZ2Vja28gKQorICAgICAgeworICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBzZWxmLnByZXBhcmVQcmV2aWV3KHNuSUQpOyB9LCA1MCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgdGhyb3coIkVSUk9SOiBJRlJBTUUgY2FuJ3QgYmUgaW5pdGlhbGl6ZWQuIik7CisgICAgICB9CisgICAgfQorICB9CisgIGNhdGNoKGV4KQorICB7IC8vIHRyeSBsYXRlcgorICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHNlbGYucHJlcGFyZVByZXZpZXcoc25JRCk7ICB9LCA1MCk7CisgIH0KKyAgZG9jLm9wZW4oInRleHQvaHRtbCIsInJlcGxhY2UiKTsKKworICB2YXIgaHRtbCA9ICc8aHRtbD48aGVhZD48dGl0bGU+PC90aXRsZT4nOworICBodG1sICs9ICI8bWV0YSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD0iICsgZWRpdG9yLmNvbmZpZy5jaGFyU2V0ICsgIlwiPlxuIjsKKyAgaHRtbCArPSAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj5ib2R5IHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9IDwvc3R5bGU+JzsKKyAgaWYgKCB0eXBlb2YgZWRpdG9yLmNvbmZpZy5iYXNlSHJlZiAhPSAndW5kZWZpbmVkJyAmJiBlZGl0b3IuY29uZmlnLmJhc2VIcmVmICE9PSBudWxsICkKKyAgeworICAgIGh0bWwgKz0gIjxiYXNlIGhyZWY9XCIiICsgZWRpdG9yLmNvbmZpZy5iYXNlSHJlZiArICJcIi8+XG4iOworICB9CisgIAorICBpZiAoIGVkaXRvci5jb25maWcucGFnZVN0eWxlICkKKyAgeworICAgIGh0bWwgKz0gIjxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj5cbiIgKyBlZGl0b3IuY29uZmlnLnBhZ2VTdHlsZSArICJcbjwvc3R5bGU+IjsKKyAgfQorCisgIGlmICggdHlwZW9mIGVkaXRvci5jb25maWcucGFnZVN0eWxlU2hlZXRzICE9PSAndW5kZWZpbmVkJyApCisgIHsKKyAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBlZGl0b3IuY29uZmlnLnBhZ2VTdHlsZVNoZWV0cy5sZW5ndGg7IGkrKyApCisgICAgeworICAgICAgaWYgKCBlZGl0b3IuY29uZmlnLnBhZ2VTdHlsZVNoZWV0c1tpXS5sZW5ndGggPiAwICkKKyAgICAgIHsKKyAgICAgICAgaHRtbCArPSAiPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIHR5cGU9XCJ0ZXh0L2Nzc1wiIGhyZWY9XCIiICsgZWRpdG9yLmNvbmZpZy5wYWdlU3R5bGVTaGVldHNbaV0gKyAiXCI+IjsKKyAgICAgICAgLy9odG1sICs9ICI8c3R5bGU+IEBpbXBvcnQgdXJsKCciICsgZWRpdG9yLmNvbmZpZy5wYWdlU3R5bGVTaGVldHNbaV0gKyAiJyk7IDwvc3R5bGU+XG4iOworICAgICAgfQorICAgIH0KKyAgfQorICBodG1sICs9ICI8L2hlYWQ+XG4iOworICBodG1sICs9ICI8Ym9keT5cbiI7CisgIGh0bWwgKz0gIjwvYm9keT5cbiI7CisgIGh0bWwgKz0gIjwvaHRtbD4iOworCisgIGRvYy53cml0ZShodG1sKTsKKyAgZG9jLmNsb3NlKCk7CisgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgc2VsZi5wcmV2aWV3Qm9keSA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdOworICB9LDEwMCk7Cit9CisKK0luc2VydFNuaXBwZXQyLnByb3RvdHlwZS5idXR0b25QcmVzcyA9IGZ1bmN0aW9uKGVkaXRvcikKK3sKKyAgdGhpcy5kaWFsb2cudG9nZ2xlKCk7Cit9CisKK0luc2VydFNuaXBwZXQyLnByb3RvdHlwZS5kb0luc2VydCA9IGZ1bmN0aW9uKGV2ZW50KQoreworICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7CisgIHZhciBzbiAgPSB0aGlzLnNuaXBwZXRzW3RhcmdldC5zbklEXTsKKyAgdGhpcy5kaWFsb2cuaGlkZSgpOworICB2YXIgY2ZnID0gdGhpcy5lZGl0b3IuY29uZmlnLkluc2VydFNuaXBwZXQyOworICBpZiAodGFyZ2V0Ll9pbnNBcyA9PSAndmFyaWFibGUnKSAKKyAgeworICAgICAgdGhpcy5lZGl0b3IuaW5zZXJ0SFRNTChzbi52KTsKKyAgfSAKKyAgZWxzZSAKKyAgeworICAgICAgdGhpcy5lZGl0b3IuaW5zZXJ0SFRNTChzbi5odG1sKTsKKyAgfQkKK30KKworSW5zZXJ0U25pcHBldDIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICgpCit7CisgIHZhciBpbnNlcnREaXYgPSB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgnaW5zZXJ0X2RpdicpOworICB2YXIgcHJldmlld19pZnJhbWUgPSB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgncHJldmlld19pZnJhbWUnKTsKKyAgdmFyIHdpbiA9IHtoOnRoaXMuZGlhbG9nLmhlaWdodCx3OnRoaXMuZGlhbG9nLndpZHRofTsKKworICB2YXIgaCA9IHdpbi5oIC0gOTA7CisgIGlmICh0aGlzLmNhdGVnb3JpZXMubGVuZ3RoKSBoIC09IHRoaXMuY2F0VGFic0g7CisgIGluc2VydERpdi5zdHlsZS5oZWlnaHQgPSBwcmV2aWV3X2lmcmFtZS5zdHlsZS5oZWlnaHQgPSAgaCArICdweCc7CisgIAorICAvL2luc2VydERpdi5zdHlsZS53aWR0aCA9ICB3aW4udyArICdweCc7CisKKyAgcmV0dXJuIHRydWU7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9kaWFsb2cuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvZGlhbG9nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI4MTg3MgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvZGlhbG9nLmh0bWwKQEAgLTAsMCArMSwyMCBAQAorPGgxIGNsYXNzPSJ0aXRsZSIgPjxsMTBuPkluc2VydCBTbmlwcGV0PC9sMTBuPjwvaDE+CisgIDxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9ImdldCI+CisKKyAgICA8ZGl2IGNsYXNzPSJJU2NhdHRhYnMiIGlkPSJbY2F0dGFic10iPjwvZGl2PgorICAgIDxkaXYgaWQ9IltpbnNlcnRfZGl2XSIgc3R5bGU9Im92ZXJmbG93OmF1dG87aGVpZ2h0OjMzMHB4O2Zsb2F0OiBsZWZ0O3dpZHRoOjUwJSI+CisgICAgIDx0YWJsZSBzdHlsZT0iYm9yZGVyOiAwO3dpZHRoOjEwMCUiPgorICAgICA8dGJvZHkgaWQ9IltzbmlwcGV0dGFibGVdIiBjbGFzcz0iSVNzbmlwcGV0dGFibGUiPjwvdGJvZHk+CisgICAgIDwvdGFibGU+CisKKyAgICA8L2Rpdj4KKyAgICA8ZGl2PjxpZnJhbWUgc3JjPSJhYm91dDpibGFuayIgc3R5bGU9ImZsb2F0OmxlZnQ7IGJvcmRlcjpub25lO3dpZHRoOiA1MCU7aGVpZ2h0OiAzMzBweCIgaWQ9IltwcmV2aWV3X2lmcmFtZV0iPjwvaWZyYW1lPgorICAgIDxkaXYgY2xhc3M9InNwYWNlIiBzdHlsZT0iY2xlYXI6IGxlZnQ7Ij48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJidXR0b25zIj4KKyAgICAgPGRpdiBzdHlsZT0iZmxvYXQ6bGVmdCI+CisJICAgPGxhYmVsIGZvcj0iW3NlYXJjaF0iPjxsMTBuPkZpbHRlcjwvbDEwbj48L2xhYmVsPiA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IltzZWFyY2hdIiAvPgorCSAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9Ilt3b3JkYmVnaW5dIiBjaGVja2VkPSJjaGVja2VkIiB2YWx1ZT0ib24iIC8+PGxhYmVsIGZvcj0iW3dvcmRiZWdpbl0iPjxsMTBuPk9ubHkgc2VhcmNoIHdvcmQgYmVnaW5uaW5nPC9sMTBuPjwvbGFiZWw+CisgICAgIDwvZGl2PgorICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9IltjYW5jZWxdIiBzdHlsZT0iZmxvYXQ6IHJpZ2h0OyI+PGwxMG4+Q2FuY2VsPC9sMTBuPjwvYnV0dG9uPgorICAgIDwvZGl2PgorICA8L2Zvcm0+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8xLlBORyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvaW1nLzEuUE5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5Y2M5NWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8xLlBORwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8xMC5QTkcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8xMC5QTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlNGY1NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvaW1nLzEwLlBORwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8xMS5QTkcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8xMS5QTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU2OTgyZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvaW1nLzExLlBORwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8xMi5QTkcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8xMi5QTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4NWExYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvaW1nLzEyLlBORwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8xMy5QTkcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8xMy5QTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJiZjI1MgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvaW1nLzEzLlBORwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8xNC5QTkcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8xNC5QTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc5OTU3NgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvaW1nLzE0LlBORwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8xNS5QTkcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8xNS5QTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMyMmI5NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvaW1nLzE1LlBORwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8xNi5QTkcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8xNi5QTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE1NzdhZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvaW1nLzE2LlBORwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8yLlBORyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvaW1nLzIuUE5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZWM3OTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8yLlBORwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8zLlBORyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvaW1nLzMuUE5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMjY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy8zLlBORwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy80LlBORyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvaW1nLzQuUE5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNWVhOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy80LlBORwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy81LlBORyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvaW1nLzUuUE5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYWE2NzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy81LlBORwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy82LlBORyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvaW1nLzYuUE5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYWVmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy82LlBORwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy83LlBORyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvaW1nLzcuUE5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0Zjk3NDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy83LlBORwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy84LlBORyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvaW1nLzguUE5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNjRmN2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy84LlBORwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy85LlBORyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvaW1nLzkuUE5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YzUzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy85LlBORwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy9lZF9zbmlwcGV0LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvaW1nL2VkX3NuaXBwZXQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNjg0ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2ltZy9lZF9zbmlwcGV0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvY2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvY2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJlNWJkNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9jaC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLlj5bmtogiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9jei5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9jei5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjZhNDhiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2N6LmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY3oiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlpydcWhaXQiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9kYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9kYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjg1NDAxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2RhLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGVyIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZmN2UyMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9kZS5qcwpAQCAtMCwwICsxLDIxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsbCBDYXRlZ29yaWVzIjogIkFsbGUgS2F0ZWdvcmllbiIsCisgICAgIkNhbmNlbCI6ICJBYmJyZWNoZW4iLAorICAgICJGaWx0ZXIiOiAiRmlsdGVyIiwKKyAgICAiSFRNTCI6ICJIVE1MIiwKKyAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiU25pcHBldCBlaW5mw7xnZW4iLAorICAgICJJbnNlcnQgYXMgSFRNTCI6ICJBbHMgSFRNTCBlaW5mw7xnZW4iLAorICAgICJJbnNlcnQgYXMgdGVtcGxhdGUgdmFyaWFibGUiOiAiQWxzIFRlbXBsYXRlLVZhcmlhYmxlIGVpbmbDvGdlbiIsCisgICAgIk9ubHkgc2VhcmNoIHdvcmQgYmVnaW5uaW5nIjogIk51ciBuYWNoIFdvcnRhbmZhbmcgc3VjaGVuIiwKKyAgICAiVmFyaWFibGUiOiAiVmFyaWFibGUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9lZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9lZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWNkODQwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2VlLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkxvb2J1IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvZWwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I0Njk1ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9lbC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLOkc66z43Pgc+Jz4POtyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2VzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExM2VhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvZXMuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlcyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9ldS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9ldS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDIxYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2V1LmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlV0emkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9mYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9mYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDU3MTg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2ZhLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2ZpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2ZpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMzNhYzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvZmkuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUGVydXV0YSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NGMyNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvZnIuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxlciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2hlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NWRkYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvaGUuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJoZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2h1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2h1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZDU2NjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvaHUuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJodSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2l0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYmE0M2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvaXQuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJpdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmZTU5NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9qYS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICJGaWx0ZXIiOiAi44OV44Kj44Or44K/44O8IiwKKyAgICAiSW5zZXJ0IFNuaXBwZXQiOiAi44K544OL44Oa44OD44OI44Gu5oy/5YWlIiwKKyAgICAiVmFyaWFibGUiOiAi5aSJ5pWwIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMjZlNmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDM0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgIkFsbCBDYXRlZ29yaWVzIjogIiIsCisgICAgIkNhbmNlbCI6ICIiLAorICAgICJGaWx0ZXIiOiAiIiwKKyAgICAiSFRNTCI6ICIiLAorICAgICJJbnNlcnQgU25pcHBldCI6ICIiLAorICAgICJJbnNlcnQgYXMgSFRNTCI6ICIiLAorICAgICJJbnNlcnQgYXMgdGVtcGxhdGUgdmFyaWFibGUiOiAiIiwKKyAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiIiwKKyAgICAiT25seSBzZWFyY2ggd29yZCBiZWdpbm5pbmciOiAiIiwKKyAgICAiVmFyaWFibGUiOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9sdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9sdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmJjNjc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2x0LmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2x2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL2x2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYzY4ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvbHYuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXRjZWx0IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvbmIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IzYTU4NgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICJJbnNlcnQgU25pcHBldCI6ICJTZXR0IGlubiBzbnV0dCIsCisgICAgIlZhcmlhYmxlIjogIlZhcmlhYmVsIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvbmwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZhOTAxYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9ubC5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iLAorICAgICJGaWx0ZXIiOiAiRmlsdGVyIiwKKyAgICAiSW5zZXJ0IFNuaXBwZXQiOiAiU25pcHBldCBpbnZvZWdlbiIsCisgICAgIlZhcmlhYmxlIjogIlZhcmlhYmVsZSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL3BsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL3BsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMzI5MzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvcGwuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW51bHVqIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvcHRfYnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE1N2FjNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9wdF9ici5qcwpAQCAtMCwwICsxLDE4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCisgICAgIkZpbHRlciI6ICJGaWx0cm8iLAorICAgICJIVE1MIjogIkhUTUwiLAorICAgICJJbnNlcnQgU25pcHBldCI6ICJJbnNlcmlyIEZyYWdtZW50byBkZSBDw7NkaWdvIiwKKyAgICAiSW5zZXJ0U25pcHBldCBmb3IgWGluaGEiOiAiRnJhZ21lbnRvIGRlIEPDs2RpZ29zIHBhcmEgbyBYaW5oYSIsCisgICAgIlZhcmlhYmxlIjogIlZhcmnDoXZlbCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL3JvLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL3JvLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNGUxOWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvcm8uanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJybyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvcnUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU2OWNmZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9ydS5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJ1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLQntGC0LzQtdC90LAiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9zaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9zaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDNiMGM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL3NoLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvc2kuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvc2kuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAzZDE2MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9zaS5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9zci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9zci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk2NmU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL3NyLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvc3YuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThiNjM5NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy9zdi5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInN2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdmJyeXQiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy90aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDM2Yjg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL3RoLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidGgiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL3RyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9sYW5nL3RyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MzYyM2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvdHIuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0ciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAixLBwdGFsIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvdm4uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL2xhbmcvdm4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMyZDc3OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvbGFuZy92bi5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInZuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJI4buneSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9yZWFkbWUuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvcmVhZG1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE2MWE0YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvcmVhZG1lLmh0bWwKQEAgLTAsMCArMSw1MSBAQAorPCFET0NUWVBFIGh0bWwKKyAgICAgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIKKyAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbD48aGVhZD4gIDx0aXRsZT5JbnNlcnRTbmlwcGV0IGZvciBYaW5oYTwvdGl0bGU+IDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgIGJvZHkgeyBmb250LWZhbWlseTogc2Fucy1zZXJpZjsgfQorICBwcmUge2JvcmRlcjogZG90dGVkIGdyZXkgdGhpbjsgYmFja2dyb3VuZC1jb2xvcjpMaWdodFllbGxvdztwYWRkaW5nOjEwcHggfQorICBwIHsgd2lkdGg6NTAwcHggfQorICA8L3N0eWxlPiAKKyAgPC9oZWFkPgorICA8Ym9keT4gCisgICAgPGgxPkluc2VydFNuaXBwZXQyIGZvciBYaW5oYTwvaDE+IAorICAgIDxwPkluc2VydCBIVE1MIGZyYWdtZW50cyBvciB0ZW1wbGF0ZSB2YXJpYWJsZXMgaW4geW91ciBkb2N1bWVudC48L3A+IAorICAgIDxoMj5GZWF0dXJlczwvaDI+IAorICAgIDx1bD4gCisgICAgICA8bGk+Q2F0ZWdvcml6YXRpb24gdG8gb3JnYW5pemUgeW91ciBzbmlwcGV0cyBpZiB5b3UgaGF2ZSBhIGxvdCAgKG9wdGlvbmFsKTwvbGk+IAorICAgICAgPGxpPlNlYXJjaCBmb3IgbmFtZTwvbGk+IAorICAgICAgPGxpPkluc2VydCBhcyBsaXRlcmFsIHRleHQvaHRtbCBvciB2YXJpYWJsZSAob3B0aW9uYWwpJm5ic3A7PC9saT4gCisgICAgICA8bGk+WE1MIGRhdGEgZm9ybWF0PGJyIC8+PC9saT4gCisgICAgPC91bD4gCisgICAgPGgyPlVzYWdlPC9oMj4gCisgICAgPHA+CitJbiBvcmRlciB0byB1c2UgeW91ciBvd24gc25pcHBldHMgeW91IGhhdmUgdG8gYWRkIGEgcGFyYW1ldGVyIHRvIHlvdXIgeGluaGFfY29uZmlnOgorPC9wPiAKKyAgICA8cHJlPnhpbmhhX2NvbmZpZy5JbnNlcnRTbmlwcGV0Mi5zbmlwcGV0cyA9ICIvcGF0aC90by95b3VyL3NuaXBwZXRzLnhtbCI7Cis8L3ByZT4gCisgICAgPHA+VGhpcyBwYXRoIHNob3VsZCBwb2ludCB0byBhIFhNTCBmaWxlIHRoYXQgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OjwvcD4gCisgICAgPHByZT4mbHQ7c25YTUwmZ3Q7CisgJmx0O2NhdGVnb3JpZXMmZ3Q7CisgICAgJmx0O2Mgbj0idGhlIG5hbWUiIC8mZ3Q7CisgICZsdDsvY2F0ZWdvcmllcyZndDsKKyAgJmx0O3NuaXBwZXRzJmd0OworICAgICAgICAmbHQ7cyBuPSJ0aGUgbmFtZSIgdj0ib3B0aW9uYWwgdmFyaWFibGUgbmFtZSB0byBiZSBpbnNlcnRlZCIgYz0idGhlIGNhdGVnb3J5IiZndDsKKyAgICAgICAgICAgICZhbXA7bHQ7cCZhbXA7Z3Q7c29tZSB0ZXh0IG9yIEhUTUwsIHBsZWFzZSBlbnRpemUgSFRNTCB0YWdzJmFtcDtsdDsvcCZhbXA7Z3Q7CisgICAgICAgICZsdDsvcyZndDsKKyAgICAgICAgJmx0O3Mgbj0iYW5vdGhlciImZ3Q7CisgICAgICAgICAgICAmbHQ7IVtDREFUQVsKKyAgICAgICAgICAgICAgICZsdDtwJmd0O29yIHB1dCBIVE1MIGluIGEgQ0RBVEEgc2VjdGlvbiZsdDsvcCZndDsKKyAgICAgICAgICAgIF1dJmd0OworICAgICAgICAmbHQ7L3MmZ3Q7CisgICZsdDsvc25pcHB0ZXMmZ3Q7CismbHQ7L3NuWE1MJmd0OworPC9wcmU+IAorICAgIDxwPiA8L3A+IAorICAgIDxoMz4mbmJzcDtUYWdzPC9oMz4gCisgICAgPGRsPjxkdD4mbHQ7c25YTUwmZ3Q7Jmx0Oy9zblhNTCZndDs8L2R0PjxkZD4mbmJzcDtUaGUgcm9vdCB0YWc8L2RkPjxkdD4mbHQ7Y2F0ZWdvcmllcyZndDsmbHQ7L2NhdGVnb3JpZXMmZ3Q7PGJyIC8+PC9kdD48ZGQ+Jm5ic3A7VGhpcyB0YWcgY29udGFpbnMgdGhlIGNhdGVnb3JpZXMgKG9wdGlvbmFsKTxiciAvPjwvZGQ+PGR0PiZuYnNwOyZsdDtjIC8mZ3Q7PC9kdD48ZGQ+Jm5ic3A7RWFjaCBjYXRlZ29yeSA8YnIgLz48L2RkPjxkdD4mbmJzcDsmbHQ7c25pcHBldHMmZ3Q7Jmx0Oy9zbmlwcGV0cyZndDs8L2R0PjxkZD4gVGhpcyB0YWcgY29udGFpbnMgdGhlIGFjdHVhbCBzbmlwcGV0LiBBcyB0aGlzIGlzIFhNTCwgeW91IGNhbm5vdCBwdXQgSFRNTCBoZXJlIGxpdGVyYWxseS4gWW91IGhhdmUgdG8gZWl0aGVyIGVudGl6ZSB0aGUgJmx0OywmZ3Q7LCBhbmQgJmFtcDsgY2hhcmFjdGVycyBvciB3cmFwIHRoZSBjb250ZW50cyBpbiBhIENEQVRBIHNlY3Rpb248YnIgLz48L2RkPjwvZGw+IAorICAgIDxoMz5BdHRyaWJ1dGVzPC9oMz4gCisgICAgPGRsPjxkdD4mbmJzcDtuPC9kdD48ZGQ+Jm5ic3A7VGhlIG5hbWUgb2Ygb25lIHNuaXBwZXQgb3IgY2F0ZWdvcnkuIEl0IGlzIG9ibGlnYXRvcnkgZm9yIGJvdGguPGJyIC8+PC9kZD48ZHQ+Jm5ic3A7djwvZHQ+PGRkPiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBwcmVzZW50IGluIGEgc25pcHBldCB0YWcsIHRoZXJlIGlzIGEgYnV0dG9uIGluIHRoZSBVSSB0aGF0IGFsbG93cyB0byBpbnNlcnQgdGhpcyB2YXJpYWJsZSBpbnN0ZWFkIG9mIHRoZSB0ZXh0dWFsIGNvbnRlbnQgb2YgdGhlIHNuaXBwZXQuIDxiciAvPjwvZGQ+PGR0PiBjPGJyIC8+PC9kdD48ZGQ+Jm5ic3A7VGhlIGNhdGVnb3J5PGJyIC8+PC9kZD48L2RsPiAKKyAgICA8cD5JbnNpZGUgdGhlIHBsdWdpbidzIGRpcmVjdG9yeSwgdGhlcmUgaXMgYSBzYW1wbGUgWE1MIGZpbGUgYW5kIFBIUCBzY3JpcHQgdGhhdCBzaG93cyBob3cgdG8gY3JlYXRlIHRoZSBYTUwgZHluYW1pY2FsbHkuPGJyIC8+PC9wPiAKKyAgICA8cCBzdHlsZT0iZm9udC1zaXplOiA4MCU7Ij4zIE9jdG9iZXIgMjAwOCBSYWltdW5kIE1leWVyICh4aW5oYUByYWltdW5kbWV5ZXIuZGUpPC9wPiAKKyAgPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvc25pcHBldHMucGhwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9JbnNlcnRTbmlwcGV0Mi9zbmlwcGV0cy5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIyMjZhZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvc25pcHBldHMucGhwCkBAIC0wLDAgKzEsMzcgQEAKKzw/cGhwCisvKioKKyAqIFRoaXMgaXMgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgaG93IHRvIGdldCB5b3VyIHNuaXBwZXRzIGR5bmFtaWNhbGx5IGZyb20gYSBQSFAgZGF0YSBzdHJ1Y3R1cmUgaW50byBJbnNlcnRTbmlwcGV0MidzIFhNTCBmb3JtYXQuCisgKiA8P3BocAorICogICAkY2F0ZWdvcmllcyA9IGFycmF5KCdjYXQxJywnZXRjLi4uJyk7IC8vY2F0ZWdvcmllcyBhcmUgb3B0aW9uYWwKKyAqICAgJHNuaXBwZXRzID0gYXJyYXkoCisgKiAgICAgYXJyYXkoJ25hbWUnPSAnc25pcHBldDEnLCd0ZXh0Jz0+J3NvbWUgdGV4dCcpLAorICogICAgIGFycmF5KCduYW1lJz0gJ3NuaXBwZXQyJywndGV4dCc9Pic8cD5zb21lIEhUTUw8L3A+JywgJ3Zhcm5hbWUnPT4neyR2YXJ9JywnY2F0ZWdvcnknPT4nY2F0MScpIC8vdmFybmFtZSBhbmQgY2F0ZWdvcnkgYXJlIG9wdGlvbmFsCisgKiAgICkKKyAqIAorICogPz4KKyAqLworaGVhZGVyKCJDb250ZW50LXR5cGU6IHRleHQveG1sIik7CitwcmludCAnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBzblhNTCBQVUJMSUMgIlhpbmhhIEluc2VydFNuaXBwZXQgRGF0YSBGaWxlIiAiaHR0cDovL3gtd2Vic2VydmljZS5uZXQvcmVzL3NuWE1MLmR0ZCI+JzsKKz8+Cis8c25YTUw+Cis8Y2F0ZWdvcmllcz4KKzw/cGhwCitmb3JlYWNoICgoYXJyYXkpJGNhdGVnb3JpZXMgYXMgJGMpIHsKKwlwcmludCAnPGMgbj0iJy4kYy4nIiAvPicuIlxuIjsgCit9CisKKz8+Cis8L2NhdGVnb3JpZXM+Cis8c25pcHBldHM+Cis8P3BocAorZm9yZWFjaCAoKGFycmF5KSRzbmlwcGV0cyBhcyAkcykgeworCXByaW50ICc8cyBuPSInLiRzWyduYW1lJ10uJyIgdj0iJy4kc1sndmFybmFtZSddLiciIGM9IicuJHNbJ2NhdGVnb3J5J10uJyI+Cis8IVtDREFUQVsKKwknLiRzWyd0ZXh0J10uJworXV0+Cis8L3M+Jy4iXG4iOyAKK30KKz8+Cis8L3NuaXBwZXRzPgorPC9zblhNTD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL3NuaXBwZXRzLnhtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0U25pcHBldDIvc25pcHBldHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNjEwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFNuaXBwZXQyL3NuaXBwZXRzLnhtbApAQCAtMCwwICsxLDQyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHNuWE1MIFBVQkxJQyAiWGluaGEgSW5zZXJ0U25pcHBldCBEYXRhIEZpbGUiICJodHRwOi8veC13ZWJzZXJ2aWNlLm5ldC9yZXMvc25YTUwuZHRkIj4KKzxzblhNTD4KKyAgICA8Y2F0ZWdvcmllcz4KKyAgICAgICAgPGMgbj0iVGVzdCBDYXRlZ29yeSAxIi8+CisgICAgICAgIDxjIG49IlRlc3QgQ2F0ZWdvcnkgMiIvPgorICAgICAgICA8YyBuPSJUZXN0IENhdGVnb3J5IDMiLz4KKyAgICA8L2NhdGVnb3JpZXM+CisgICAgPHNuaXBwZXRzPgorICAgICAgICA8cyBuPSJCb3ggMSIgdj0ieyRTbmlwcGV0X1Rlc3RfMH0iIGM9IlRlc3QgQ2F0ZWdvcnkgMSI+CisgICAgICAgICAgICA8IVtDREFUQVsKKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWVzc2FnZV9ib3ggcmVkIj4KKyAgICAgICAgICAgICAgICAgVmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly94aW5oYS5vcmciPlhpbmhhIHdlYnNpdGU8L2E+CisgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgIDwvbGk+PGxpPiBOdWxsYSBwbGFjZXJhdCBudW5jIHV0IHBlZGUuICAgICAgICAgICAgICAgICA8L2xpPjxsaT4gVml2YW11cyB1bHRyaWNlcyBtaSBzaXQgYW1ldCB1cm5hLiAgICAgICAgICAgPC9saT48bGk+IFF1aXNxdWUgc2VkIGF1Z3VlIHF1aXMgbnVuYyBsYW9yZWV0IHZvbHV0cGF0LjwvbGk+PGxpPiBOdW5jIHNpdCBhbWV0IG1ldHVzIGluIHRvcnRvciBzZW1wZXIgbWF0dGlzLiA8L2xpPjwvdWw+CisgICAgICAgICAgICBdXT4KKyAgICAgICAgPC9zPgorICAgICAgICA8cyBuPSJJTkZPUk1BVElPTiBBQk9VVCBTT01FVEhJTkciIHY9InskU25pcHBldF9UZXN0XzF9IiBjPSJUZXN0IENhdGVnb3J5IDMiPgorICAgICAgICAgICAgICAgJmx0O3AmZ3Q7VGhpcyBpcyBzb21lIGluZm9ybWF0aW9uIGFib3V0IHNvbWV0aGluZyZsdDsvcCZndDsKKyAgICAgICAgPC9zPgorICAgICAgICA8cyBuPSJNZW51IiBjPSJUZXN0IENhdGVnb3J5IDIiPgorICAgICAgICAgICAgPCFbQ0RBVEFbCisgICAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2aV9saW5rcyI+CisgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibmF2aSI+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iTGluazEiIGNsYXNzPSJMaW5rMSIgdGFiaW5kZXg9IjEiPjxzcGFuIGNsYXNzPSJzcGFuX2NsYXNzIj4gTGluazEgPC9zcGFuPjwvYT4KKyAgICAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJuYXZpIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJMaW5rMiIgY2xhc3M9IkxpbmsyIiB0YWJpbmRleD0iMiI+PHNwYW4gY2xhc3M9InNwYW5fY2xhc3MiPiBMaW5rMiA8L3NwYW4+PC9hPgorICAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Im5hdmkiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IkxpbmszIiBjbGFzcz0iTGluazMiIHRhYmluZGV4PSIzIj48c3BhbiBjbGFzcz0ic3Bhbl9jbGFzcyI+IExpbmszIDwvc3Bhbj48L2E+CisgICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibmF2aSI+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iTGluazQiIGNsYXNzPSJMaW5rNCIgdGFiaW5kZXg9IjQiPjxzcGFuIGNsYXNzPSJzcGFuX2NsYXNzIj4gTGluazQgPC9zcGFuPjwvYT4KKyAgICAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJuYXZpIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJMaW5rNSIgY2xhc3M9Ikxpbms1IiB0YWJpbmRleD0iNSI+PHNwYW4gY2xhc3M9InNwYW5fY2xhc3MiPiBMaW5rNSA8L3NwYW4+PC9hPgorICAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgXV0+CisgICAgICAgIDwvcz4KKyAgICA8L3NuaXBwZXRzPgorPC9zblhNTD4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvSW5zZXJ0V29yZHMvSW5zZXJ0V29yZHMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFdvcmRzL0luc2VydFdvcmRzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkwN2ZjNTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0luc2VydFdvcmRzL0luc2VydFdvcmRzLmpzCkBAIC0wLDAgKzEsNzAgQEAKKy8vIFBsdWdpbiBmb3IgaHRtbEFyZWEgdG8gaW5zZXJ0IGtleXdvcmRzLCB3aGVuIGEgdHlwZSBvZgorLy8ga2V5d29yZCBpcyBzZWxlY3RlZCBmcm9tIGEgZHJvcGRvd24gbGlzdAorLy8gQnkgQWRhbSBXcmlnaHQsIGZvciBUaGUgVW5pdmVyc2l0eSBvZiBXZXN0ZXJuIEF1c3RyYWxpYQorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKworZnVuY3Rpb24gSW5zZXJ0V29yZHMoZWRpdG9yLCBwYXJhbXMpIHsKKwl0aGlzLmVkaXRvciA9IGVkaXRvcjsKKwl2YXIgY2ZnID0gZWRpdG9yLmNvbmZpZzsKKwl2YXIgc2VsZiA9IHRoaXM7CisKKyAgICBpZihwYXJhbXNbMF0gJiYgcGFyYW1zWzBdLmNvbWJvcykgeworICAgICAgLy9pZiBhcmd1bWVudHMgd2hlcmUgcGFzc2VkIHdpdGggcmVnaXN0ZXJQbHVnaW4gdXNlIHRoZXNlCisJICB2YXIgY29tYm9zID0gcGFyYW1zWzBdLmNvbWJvczsKKyAgICB9IGVsc2UgaWYgKGNmZy5JbnNlcnRXb3JkcyAmJiBjZmcuSW5zZXJ0V29yZHMuY29tYm9zKSB7CisgICAgICAvL2lmIGNvbWJvcyBpcyBmb3VuZCBpbiBjb25maWcgdXNlIHRoZXNlCisgICAgICB2YXIgY29tYm9zID0gY2ZnLkluc2VydFdvcmRzLmNvbWJvczsKKyAgICB9IGVsc2UgeworICAgICAgLy9ubyBjb21ib3MgZm91bmQKKyAgICAgIHZhciBjb21ib3MgPSBbXTsKKyAgICB9CisKKwkvLyByZWdpc3RlciB0aGUgdG9vbGJhciB3aXRoIHRoZSBrZXl3b3JkcyBkcm9wZG93bgorICAgIHZhciBmaXJzdCA9IHRydWU7CisgICAgdmFyIHRvb2xiYXIgPSBbXTsKKworCWZvciAodmFyIGkgPSBjb21ib3MubGVuZ3RoOyAtLWkgPj0gMDspIHsKKwkJdmFyIGNvbWJvID0gY29tYm9zW2ldOworCQl2YXIgaWQgPSAiSVctaWQiICsgaTsKKwkJdmFyIGl3X2NsYXNzID0geworCQkJaWQJOiBpZCwKKwkJCW9wdGlvbnMJOiBjb21iby5vcHRpb25zLAorCQkJYWN0aW9uCTogZnVuY3Rpb24gKGVkaXRvcikgeyBzZWxmLm9uU2VsZWN0KGVkaXRvciwgdGhpcywgY29tYm8uY29udGV4dCk7IH0sCisJCQlyZWZyZXNoCTogZnVuY3Rpb24gKGVkaXRvcikgeyB9LAorCQkJY29udGV4dCA6IGNvbWJvLmNvbnRleHQKKwkJfTsKKyAgICAgICAgY2ZnLnJlZ2lzdGVyRHJvcGRvd24oaXdfY2xhc3MpOworCisgICAgICAgIGlmIChjb21iby5sYWJlbCkKKyAgICAgICAgICAgIHRvb2xiYXIucHVzaCgiVFsiICsgY29tYm8ubGFiZWwgKyAiXSIpOworICAgICAgICB0b29sYmFyLnB1c2goaWQpOworICAgICAgICB0b29sYmFyLnB1c2goZmlyc3QgPyAic2VwYXJhdG9yIiA6ICJzcGFjZSIpOworCX0KKworICAgIGNmZy5hZGRUb29sYmFyRWxlbWVudCh0b29sYmFyLCAibGluZWJyZWFrIiwgMSk7CisKK30KKworSW5zZXJ0V29yZHMuX3BsdWdpbkluZm8gPSB7CisJbmFtZSAgICAgICAgICA6ICJJbnNlcnRXb3JkcyIsCisJdmVyc2lvbiAgICAgICA6ICIxLjAiLAorCWRldmVsb3BlciAgICAgOiAiQWRhbSBXcmlnaHQiLAorCWRldmVsb3Blcl91cmwgOiAiaHR0cDovL2Jsb2cuaGlwaWthdC5vcmcvIiwKKwlzcG9uc29yICAgICAgIDogIlRoZSBVbml2ZXJzaXR5IG9mIFdlc3Rlcm4gQXVzdHJhbGlhIiwKKwlzcG9uc29yX3VybCAgIDogImh0dHA6Ly93d3cudXdhLmVkdS5hdS8iLAorCWxpY2Vuc2UgICAgICAgOiAiaHRtbEFyZWEiCit9OworCitJbnNlcnRXb3Jkcy5wcm90b3R5cGUub25TZWxlY3QgPSBmdW5jdGlvbihlZGl0b3IsIG9iaiwgY29udGV4dCkgeworCisJLy8gR2V0IHRoZSB0b29sYmFyIG9iamVjdCBlbGVtZW50CisJdmFyIGVsZW0gPSBlZGl0b3IuX3Rvb2xiYXJPYmplY3RzW29iai5pZF0uZWxlbWVudDsKKworCS8vIEluc2VydCB0aGUga2V5d29yZCB2YWx1ZSBibGluZGx5IGF0IHRoZSBzZWxlY3Rpb24KKwllZGl0b3IuaW5zZXJ0SFRNTChlbGVtLnZhbHVlKTsKKworCS8vIFJlc2V0IHRoZSBkcm9wZG93biB0byBpdCdzIGxhYmVsCisJZWxlbS5zZWxlY3RlZEluZGV4ID0gMDsKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MYW5nTWFya3MvTGFuZ01hcmtzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MYW5nTWFya3MvTGFuZ01hcmtzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYTcwYmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xhbmdNYXJrcy9MYW5nTWFya3MuanMKQEAgLTAsMCArMSwxNzkgQEAKKy8vIE1hc2sgTGFuZ3VhZ2UgcGx1Z2luIGZvciBYaW5oYQorLy8gSW1wbGVtZW50YXRpb24gYnkgVWRvIFNjaG1hbAorLy8KKy8vIChjKSBVZG8gU2NobWFsICYgU2NoYWZmcmF0aCBOZXVlTWVkaWVuIDIwMDQKKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKworZnVuY3Rpb24gTGFuZ01hcmtzKGVkaXRvciwgYXJncykgeworICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKKyAgdmFyIGNmZyA9IGVkaXRvci5jb25maWc7CisgIHZhciBzZWxmID0gdGhpczsKKyAgdmFyIG9wdGlvbnMgPSB7fTsKKyAgb3B0aW9uc1t0aGlzLl9sYygiJm1kYXNoOyBsYW5ndWFnZSAmbWRhc2g7IildID0gJyc7CisgIAorICAvLyBPbGQgY29uZmlndXJhdGlvbiB0eXBlCisgIGlmKCFjZmcuTGFuZ01hcmtzLmxhbmd1YWdlcykKKyAgeworICAgIFhpbmhhLmRlYnVnTXNnKCdXYXJuaW5nOiBPbGQgc3R5bGUgTGFuZ01hcmtzIGNvbmZpZ3VyYXRpb24gZGV0ZWN0ZWQsIHBsZWFzZSB1cGRhdGUgeW91ciBMYW5nTWFya3MgY29uZmlndXJhdGlvbi4nKTsKKyAgICB2YXIgbmV3Q29uZmlnID0geworICAgICAgbGFuZ3VhZ2VzOiAgW10sCisgICAgICBhdHRyaWJ1dGVzOiBYaW5oYS5Db25maWcucHJvdG90eXBlLmF0dHJpYnV0ZXMgICAgICAKKyAgICB9OworICAgIAorICAgIGZvciAodmFyIGkgaW4gY2ZnLkxhbmdNYXJrcykKKyAgICB7CisgICAgICBpZiAodHlwZW9mIGkgIT0gJ3N0cmluZycpIGNvbnRpbnVlOworICAgICAgbmV3Q29uZmlnLmxhbmd1YWdlcy5wdXNoKCB7IG5hbWU6IGksIGNvZGU6IGNmZy5MYW5nTWFya3NbaV0gfSApOyAgICAgIAorICAgIH0KKyAgICAKKyAgICBjZmcuTGFuZ01hcmtzID0gbmV3Q29uZmlnOworICB9CisgIAorCWZvciAodmFyIGkgPSAwOyBpIDwgY2ZnLkxhbmdNYXJrcy5sYW5ndWFnZXMubGVuZ3RoOyBpKyspCisJewkJCisJCW9wdGlvbnNbdGhpcy5fbGMoY2ZnLkxhbmdNYXJrcy5sYW5ndWFnZXNbaV0ubmFtZSldID0gY2ZnLkxhbmdNYXJrcy5sYW5ndWFnZXNbaV0uY29kZTsKKwl9CisgIAorCisgIGNmZy5yZWdpc3RlckRyb3Bkb3duKHsKKyAgICBpZAk6ICJsYW5nbWFya3MiLAorICAgIHRvb2x0aXAJOiB0aGlzLl9sYygibGFuZ3VhZ2Ugc2VsZWN0IiksCisgICAgb3B0aW9ucwk6IG9wdGlvbnMsCisgICAgYWN0aW9uCTogZnVuY3Rpb24oZWRpdG9yKSB7IHNlbGYub25TZWxlY3QoZWRpdG9yLCB0aGlzKTsgfSwKKyAgICByZWZyZXNoCTogZnVuY3Rpb24oZWRpdG9yKSB7IHNlbGYudXBkYXRlVmFsdWUoZWRpdG9yLCB0aGlzKTsgfQorICB9KTsKKyAgY2ZnLmFkZFRvb2xiYXJFbGVtZW50KCJsYW5nbWFya3MiLCAiaW5zZXJ0aG9yaXpvbnRhbHJ1bGUiLCAxKTsKK30KKworTGFuZ01hcmtzLl9wbHVnaW5JbmZvID0geworICBuYW1lICAgICAgICAgIDogIkxhbmdNYXJrcyIsCisgIHZlcnNpb24gICAgICAgOiAiMS4wIiwKKyAgZGV2ZWxvcGVyICAgICA6ICJVZG8gU2NobWFsIiwKKyAgZGV2ZWxvcGVyX3VybCA6ICIiLAorICBzcG9uc29yICAgICAgIDogIkwuTi5TY2hhZmZyYXRoIE5ldWVNZWRpZW4iLAorICBzcG9uc29yX3VybCAgIDogImh0dHA6Ly93d3cuc2NoYWZmcmF0aC1uZXVlbWVkaWVuLmRlLyIsCisgIGNfb3duZXIgICAgICAgOiAiVWRvIFNjaG1hbCAmIFNjaGFmZnJhdGggTmV1ZU1lZGllbiIsCisgIGxpY2Vuc2UgICAgICAgOiAiaHRtbEFyZWEiCit9OworCitYaW5oYS5Db25maWcucHJvdG90eXBlLkxhbmdNYXJrcyA9IHsKKyAgJ2xhbmd1YWdlcyc6IFsgICAgICAgICAgICAgICAgICAgICAvLyBCZWxvdyBhcmUgc28gbGNfcGFyc2Vfc3RyaW5ncy5waHAgZmluZHMgdGhlbQorICAgIHsgbmFtZToiR3JlZWsiLCAgIGNvZGU6ICJlbCIgfSAsIC8vIFhpbmhhLl9sYygnR3JlZWsnLCAnTGFuZ01hcmtzJykKKyAgICB7IG5hbWU6IkVuZ2xpc2giLCBjb2RlOiAiZW4iIH0sICAvLyBYaW5oYS5fbGMoJ0VuZ2xpc2gnLCAnTGFuZ01hcmtzJykKKyAgICB7IG5hbWU6IkZyZW5jaCIsICBjb2RlOiAiZnIiIH0gLCAvLyBYaW5oYS5fbGMoJ0ZyZW5jaCcsICdMYW5nTWFya3MnKQorICAgIHsgbmFtZToiTGF0aW4iICwgIGNvZGU6ICJsYSIgfSAgIC8vIFhpbmhhLl9sYygnTGF0aW4nLCAnTGFuZ01hcmtzJykKKyAgXSwKKyAgCisgICdhdHRyaWJ1dGVzJzogWworICAgICdsYW5nJywKKyAgICAneG1sOmxhbmcnICAgIAorICBdCit9OworCitMYW5nTWFya3MucHJvdG90eXBlLl9sYyA9IGZ1bmN0aW9uKHN0cmluZykgeworICByZXR1cm4gWGluaGEuX2xjKHN0cmluZywgJ0xhbmdNYXJrcycpOworfTsKKworTGFuZ01hcmtzLnByb3RvdHlwZS5vbkdlbmVyYXRlID0gZnVuY3Rpb24oKSB7CisJIHRoaXMuZWRpdG9yLmFkZEVkaXRvclN0eWxlc2hlZXQoWGluaGEuZ2V0UGx1Z2luRGlyKCJMYW5nTWFya3MiKSArICcvbGFuZy1tYXJrcy5jc3MnKTsKK307CisKK0xhbmdNYXJrcy5wcm90b3R5cGUub25TZWxlY3QgPSBmdW5jdGlvbihlZGl0b3IsIG9iaiwgY29udGV4dCwgdXBkYXRlY29udGV4dGNsYXNzKSB7CisgIHZhciB0Ym9iaiA9IGVkaXRvci5fdG9vbGJhck9iamVjdHNbb2JqLmlkXTsKKyAgdmFyIGluZGV4ID0gdGJvYmouZWxlbWVudC5zZWxlY3RlZEluZGV4OworICB2YXIgbGFuZ3VhZ2UgPSB0Ym9iai5lbGVtZW50LnZhbHVlOworCisgIC8vIHJldHJpZXZlIHBhcmVudCBlbGVtZW50IG9mIHRoZSBzZWxlY3Rpb24KKyAgdmFyIHBhcmVudCA9IGVkaXRvci5nZXRQYXJlbnRFbGVtZW50KCk7CisgIHZhciBzdXJyb3VuZCA9IHRydWU7CisKKyAgdmFyIGlzX3NwYW4gPSAocGFyZW50ICYmIHBhcmVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gInNwYW4iKTsKKyAgdmFyIHVwZGF0ZV9wYXJlbnQgPSAoY29udGV4dCAmJiB1cGRhdGVjb250ZXh0Y2xhc3MgJiYgcGFyZW50ICYmIHBhcmVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gY29udGV4dCk7CisKKyAgaWYgKHVwZGF0ZV9wYXJlbnQpIHsKKyAgICBwYXJlbnQuY2xhc3NOYW1lID0gImhhc2xhbmciOworICAgIHBhcmVudC5sYW5nID0gbGFuZ3VhZ2U7ICAgIAorICAgIAorICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmVkaXRvci5jb25maWcuTGFuZ01hcmtzLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspCisgICAgeworICAgICAgcGFyZW50LnNldEF0dHJpYnV0ZSh0aGlzLmVkaXRvci5jb25maWcuTGFuZ01hcmtzLmF0dHJpYnV0ZXNbaV0sIGxhbmd1YWdlKTsKKyAgICB9CisgICAgCisgICAgZWRpdG9yLnVwZGF0ZVRvb2xiYXIoKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAoaXNfc3BhbiAmJiBpbmRleCA9PSAwICYmICEvXFMvLnRlc3QocGFyZW50LnN0eWxlLmNzc1RleHQpKSB7CisgICAgd2hpbGUgKHBhcmVudC5maXJzdENoaWxkKSB7CisgICAgICBwYXJlbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocGFyZW50LmZpcnN0Q2hpbGQsIHBhcmVudCk7CisgICAgfQorICAgIHBhcmVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHBhcmVudCk7CisgICAgZWRpdG9yLnVwZGF0ZVRvb2xiYXIoKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAoaXNfc3BhbikgeworICAgIC8vIG1heWJlIHdlIGNvdWxkIHNpbXBseSBjaGFuZ2UgdGhlIGNsYXNzIG9mIHRoZSBwYXJlbnQgbm9kZT8KKyAgICBpZiAocGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09IDEpIHsKKyAgICAgIHBhcmVudC5jbGFzc05hbWUgPSAiaGFzbGFuZyI7CisgICAgICBwYXJlbnQubGFuZyA9IGxhbmd1YWdlOworICAgICAgCisgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5lZGl0b3IuY29uZmlnLkxhbmdNYXJrcy5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKQorICAgICAgeworICAgICAgICBwYXJlbnQuc2V0QXR0cmlidXRlKHRoaXMuZWRpdG9yLmNvbmZpZy5MYW5nTWFya3MuYXR0cmlidXRlc1tpXSwgbGFuZ3VhZ2UpOworICAgICAgfQorICAgICAgICAgICAgCisgICAgICBzdXJyb3VuZCA9IGZhbHNlOworICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlIHNob3VsZCBoYW5kbGUgdGhlIHRvb2xiYXIgdXBkYXRpb24KKyAgICAgIC8vIG91cnNlbHZlcy4KKyAgICAgIGVkaXRvci51cGRhdGVUb29sYmFyKCk7CisgICAgfQorICB9CisKKyAgLy8gT3RoZXIgcG9zc2liaWxpdGllcyBjb3VsZCBiZSBjaGVja2VkIGJ1dCByZXF1aXJlIGEgbG90IG9mIGNvZGUuICBXZQorICAvLyBjYW4ndCBhZmZvcmQgdG8gZG8gdGhhdCBub3cuCisgIGlmIChzdXJyb3VuZCkgeworICAgIC8vIHNoaXQgaGFwcGVucyA7LSkgbW9zdCBvZiB0aGUgdGltZS4gIHRoaXMgbWV0aG9kIHdvcmtzLCBidXQKKyAgICAvLyBpdCdzIGRhbmdlcm91cyB3aGVuIHNlbGVjdGlvbiBzcGFucyBtdWx0aXBsZSBibG9jay1sZXZlbAorICAgIC8vIGVsZW1lbnRzLgorICAgIHZhciBodG1sID0gJyc7CisgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuZWRpdG9yLmNvbmZpZy5MYW5nTWFya3MuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykKKyAgICB7CisgICAgICBodG1sICs9ICcgJyArdGhpcy5lZGl0b3IuY29uZmlnLkxhbmdNYXJrcy5hdHRyaWJ1dGVzW2ldICsgJz0iJytsYW5ndWFnZSsnIic7CisgICAgfQorICAgIAorICAgIGVkaXRvci5zdXJyb3VuZEhUTUwoJzxzcGFuJytodG1sKycgY2xhc3M9Imhhc2xhbmciPicsICc8L3NwYW4+Jyk7CisgIH0KK307CisKK0xhbmdNYXJrcy5wcm90b3R5cGUudXBkYXRlVmFsdWUgPSBmdW5jdGlvbihlZGl0b3IsIG9iaikgeworICB2YXIgc2VsZWN0ID0gZWRpdG9yLl90b29sYmFyT2JqZWN0c1tvYmouaWRdLmVsZW1lbnQ7CisgIHZhciBwYXJlbnRzID0gZWRpdG9yLmdldEFsbEFuY2VzdG9ycygpOworICB2YXIgcGFyZW50OworICB2YXIgbGFuZzsKKwlmb3IgKHZhciBpPTA7aTxwYXJlbnRzLmxlbmd0aDtpKyspCisJeworICAgIGZvcih2YXIgaiA9IDA7IGogPCBlZGl0b3IuY29uZmlnLkxhbmdNYXJrcy5hdHRyaWJ1dGVzLmxlbmd0aDsgaisrKQorICAgIHsgICAgICAKKyAgICAgIGlmKHBhcmVudHNbaV0uZ2V0QXR0cmlidXRlKHRoaXMuZWRpdG9yLmNvbmZpZy5MYW5nTWFya3MuYXR0cmlidXRlc1tqXSkpCisgICAgICB7CisgICAgICAgICBwYXJlbnQgPSBwYXJlbnRzW2ldOyAgICAgIAorICAgICAgICAgbGFuZyA9IHBhcmVudHNbaV0uZ2V0QXR0cmlidXRlKHRoaXMuZWRpdG9yLmNvbmZpZy5MYW5nTWFya3MuYXR0cmlidXRlc1tqXSk7ICAgICAgICAgICAgICAgIAorICAgICAgfQorICAgIH0JCQorCX0KKwlpZiAocGFyZW50KSB7CisgICAgdmFyIG9wdGlvbnMgPSBzZWxlY3Qub3B0aW9uczsKKyAgICB2YXIgdmFsdWUgPSBsYW5nOworICAgIGZvciAodmFyIGkgPSBvcHRpb25zLmxlbmd0aDsgLS1pID49IDA7KSB7CisgICAgICB2YXIgb3B0aW9uID0gb3B0aW9uc1tpXTsKKyAgICAgIGlmICh2YWx1ZSA9PSBvcHRpb24udmFsdWUpIHsKKyAgICAgICAgc2VsZWN0LnNlbGVjdGVkSW5kZXggPSBpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorICB9CisgIGVsc2Ugc2VsZWN0LnNlbGVjdGVkSW5kZXggPSAwOworCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGFuZ01hcmtzL2xhbmctbWFya3MuY3NzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MYW5nTWFya3MvbGFuZy1tYXJrcy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVlNjAxZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGFuZ01hcmtzL2xhbmctbWFya3MuY3NzCkBAIC0wLDAgKzEsNDAgQEAKK3NwYW4uaGFzbGFuZyB7CisJYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAjYWFhOworCXdoaXRlLXNwYWNlIDogbm93cmFwOworfQorCisKKworc3BhbltsYW5nXTo6YWZ0ZXIgeworCWNvbnRlbnQ6IGF0dHIobGFuZyk7CisJdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKKwlmb250LWZhbWlseTogc2Fucy1zZXJpZjsKKwljb2xvcjogd2hpdGU7CisJYmFja2dyb3VuZDogcmVkOworCWJvcmRlcjogMXB4IHNvbGlkIHJlZDsKKwlmb250LXNpemU6IHgtc21hbGw7CisJZm9udC13ZWlnaHQ6IG5vcm1hbDsKKwl2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCisvKgorICogTk9URTogVGhlICJwcm9wZXIiIHdheSB0byBkbyB0aGlzIGlzIHdpdGggYSBDU1MgbmFtZXNwYWNlCisgKiBAbmFtZXNwYWNlIHhtbCAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIjsKKyAqIGFuZCBwdXR0aW5nIHhtbG5zOnhtbD0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgorICogb24gdGhlIHJvb3QgPGh0bWw+IGVsZW1lbnQgb3IgdGhlIDxzcGFuPiBpdHNlbGYsIHRoZW4gdXNpbmcgCisgKiBzcGFuW3htbHxsYW5nXSBhcyB0aGUgc2VsZWN0b3IsIGJ1dCB0aGlzIHNpbXBseSBkb2Vzbid0IHdvcmsgCisgKiBpbiBtb3N0IGJyb3dzZXJzLiAgV2hpY2ggc3Vja3MuCisgKi8KKworc3Bhblt4bWxcOmxhbmddOjphZnRlciB7CisgIGNvbnRlbnQ6IGF0dHIoeG1sXDpsYW5nKTsKKyAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKKyAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CisgIGNvbG9yOiB3aGl0ZTsKKyAgYmFja2dyb3VuZDogcmVkOworICBib3JkZXI6IDFweCBzb2xpZCByZWQ7CisgIGZvbnQtc2l6ZTogeC1zbWFsbDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MYW5nTWFya3MvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGFuZ01hcmtzL2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEyNjg1YQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGFuZ01hcmtzL2xhbmcvZGUuanMKQEAgLTAsMCArMSwxOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICImbWRhc2g7IGxhbmd1YWdlICZtZGFzaDsiOiAiJm1kYXNoOyBTcHJhY2hlICZtZGFzaDsiLAorICAgICJFbmdsaXNoIjogImVuZ2xpc2NoIiwKKyAgICAiRnJlbmNoIjogImZyYW56w7ZzaXNjaCIsCisgICAgIkdyZWVrIjogImdyaWVjaGlzY2giLAorICAgICJMYXRpbiI6ICJsYXRlaW5pc2NoIiwKKyAgICAibGFuZ3VhZ2Ugc2VsZWN0IjogIlNwcmFjaGF1c3dhaGwiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGFuZ01hcmtzL2xhbmcvZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xhbmdNYXJrcy9sYW5nL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMzEyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xhbmdNYXJrcy9sYW5nL2VzLmpzCkBAIC0wLDAgKzEsMTggQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXMiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiJm1kYXNoOyBsYW5ndWFnZSAmbWRhc2g7IjogIiZtZGFzaDsgaWRpb21hICZtZGFzaDsiLAorICAgICJFbmdsaXNoIjogIkluZ2zDqXMiLAorICAgICJGcmVuY2giOiAiRnJhbmPDqXMiLAorICAgICJHcmVlayI6ICJHcmllZ28iLAorICAgICJMYXRpbiI6ICJMYXTDrW4iLAorICAgICJsYW5ndWFnZSBzZWxlY3QiOiAic2VsZWNjaW9uYXIgaWRpb21hIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xhbmdNYXJrcy9sYW5nL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MYW5nTWFya3MvbGFuZy9mci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTdhMjhhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MYW5nTWFya3MvbGFuZy9mci5qcwpAQCAtMCwwICsxLDE4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIiZtZGFzaDsgbGFuZ3VhZ2UgJm1kYXNoOyI6ICImbWRhc2g7IExhbmd1ZSAmbWRhc2g7IiwKKyAgICAiRW5nbGlzaCI6ICJhbmdsYWlzIiwKKyAgICAiRnJlbmNoIjogImZyYW7Dp2FpcyIsCisgICAgIkdyZWVrIjogImdyZWMiLAorICAgICJMYXRpbiI6ICJsYXRpbiIsCisgICAgImxhbmd1YWdlIHNlbGVjdCI6ICJTw6lsZWN0aW9uIGRlIGxhIGxhbmd1ZSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MYW5nTWFya3MvbGFuZy9qYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGFuZ01hcmtzL2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEyY2VjYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGFuZ01hcmtzL2xhbmcvamEuanMKQEAgLTAsMCArMSwxOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICImbWRhc2g7IGxhbmd1YWdlICZtZGFzaDsiOiAiJm1kYXNoOyDoqIDoqp4gJm1kYXNoOyIsCisgICAgIkVuZ2xpc2giOiAi6Iux6KqeIiwKKyAgICAiRnJlbmNoIjogIuODleODqeODs+OCueiqniIsCisgICAgIkdyZWVrIjogIuOCruODquOCt+ODo+iqniIsCisgICAgIkxhdGluIjogIuODqeODhuODs+iqniIsCisgICAgImxhbmd1YWdlIHNlbGVjdCI6ICLoqIDoqp7jga7pgbjmip4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGFuZ01hcmtzL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGFuZ01hcmtzL2xhbmcvbGNfYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzkyZWExCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MYW5nTWFya3MvbGFuZy9sY19iYXNlLmpzCkBAIC0wLDAgKzEsMzEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLworLy8gTEFORzogImVuIiwgRU5DT0RJTkc6IFVURi04CisvLyBBdXRob3I6IFRyYW5zbGF0b3ItTmFtZSwgPGVtYWlsQGV4YW1wbGUuY29tPgorLy8KKy8vIExhc3QgcmV2aXNpb246IDIwMTgtMDQtMTIKKy8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KKy8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyAoUGxlYXNlLCByZW1vdmUgaW5mb3JtYXRpb24gYmVsb3cpCisvLyBGT1IgVFJBTlNMQVRPUlM6CisvLworLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCisvLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCisvLworLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7CisvLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50CisvLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCisKK3sKKyAgICAiJm1kYXNoOyBsYW5ndWFnZSAmbWRhc2g7IjogIiIsCisgICAgIicsICciOiAiIiwKKyAgICAiRW5nbGlzaCI6ICIiLAorICAgICJGcmVuY2giOiAiIiwKKyAgICAiR3JlZWsiOiAiIiwKKyAgICAiTGF0aW4iOiAiIiwKKyAgICAibGFuZ3VhZ2Ugc2VsZWN0IjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xhbmdNYXJrcy9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MYW5nTWFya3MvbGFuZy9uYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTdlZmFmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MYW5nTWFya3MvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDE4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIiZtZGFzaDsgbGFuZ3VhZ2UgJm1kYXNoOyI6ICImbWRhc2g7IFNwcsOlayAmbWRhc2g7IiwKKyAgICAiRW5nbGlzaCI6ICJlbmdlbHNrIiwKKyAgICAiRnJlbmNoIjogImZyYW5zayIsCisgICAgIkdyZWVrIjogImdyZWtpc2siLAorICAgICJMYXRpbiI6ICJsYXRpbiIsCisgICAgImxhbmd1YWdlIHNlbGVjdCI6ICJTcHLDpWt2YWxnIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xhbmdNYXJrcy9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MYW5nTWFya3MvbGFuZy9ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzE3NThlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MYW5nTWFya3MvbGFuZy9ubC5qcwpAQCAtMCwwICsxLDE4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIiZtZGFzaDsgbGFuZ3VhZ2UgJm1kYXNoOyI6ICImbWRhc2g7IHRhYWwgJm1kYXNoOyIsCisgICAgIkVuZ2xpc2giOiAiRW5nZWxzIiwKKyAgICAiRnJlbmNoIjogIkZyYW5zIiwKKyAgICAiR3JlZWsiOiAiR3JpZWtzIiwKKyAgICAiTGF0aW4iOiAiTGF0aWpuIiwKKyAgICAibGFuZ3VhZ2Ugc2VsZWN0IjogIlRhYWxrZXV6ZSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MYW5nTWFya3MvbGFuZy9wdF9ici5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGFuZ01hcmtzL2xhbmcvcHRfYnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY5OGViNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGFuZ01hcmtzL2xhbmcvcHRfYnIuanMKQEAgLTAsMCArMSwxOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwdF9iciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICImbWRhc2g7IGxhbmd1YWdlICZtZGFzaDsiOiAiJm1kYXNoOyBJZGlvbWEgJm1kYXNoOyIsCisgICAgIkVuZ2xpc2giOiAiSW5nbMOqcyIsCisgICAgIkZyZW5jaCI6ICJGcmFuY8OqcyIsCisgICAgIkdyZWVrIjogIkdyZWdvIiwKKyAgICAiTGF0aW4iOiAiTGF0aW0iLAorICAgICJsYW5ndWFnZSBzZWxlY3QiOiAiU2VsZWNpb25hciBpZGlvbWEiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL0xpbmtlci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL0xpbmtlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjNlM2E0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvTGlua2VyLmpzCkBAIC0wLDAgKzEsMTA2IEBACisvKiogaHRtbEFyZWEgLSBKYW1lcycgRm9yayAtIExpbmtlciBQbHVnaW4gKiovCitMaW5rZXIuX3BsdWdpbkluZm8gPQoreworICBuYW1lICAgICA6ICJMaW5rZXIiLAorICB2ZXJzaW9uICA6ICIxLjAiLAorICBkZXZlbG9wZXI6ICJKYW1lcyBTbGVlbWFuIiwKKyAgZGV2ZWxvcGVyX3VybDogImh0dHA6Ly93d3cuZ29nby5jby5uei8iLAorICBjX293bmVyICAgICAgOiAiR29nbyBJbnRlcm5ldCBTZXJ2aWNlcyIsCisgIGxpY2Vuc2UgICAgICA6ICJodG1sQXJlYSIsCisgIHNwb25zb3IgICAgICA6ICJHb2dvIEludGVybmV0IFNlcnZpY2VzIiwKKyAgc3BvbnNvcl91cmwgIDogImh0dHA6Ly93d3cuZ29nby5jby5uei8iCit9OworCitYaW5oYS5sb2FkU3R5bGUoJ2RUcmVlL2R0cmVlLmNzcycsICdMaW5rZXInKTsKKworWGluaGEuQ29uZmlnLnByb3RvdHlwZS5MaW5rZXIgPQoreworICAndHJlZUNhcHRpb24nIDogZG9jdW1lbnQubG9jYXRpb24uaG9zdCwKKyAgJ2JhY2tlbmQnIDogWGluaGEuZ2V0UGx1Z2luRGlyKCJMaW5rZXIiKSArICcvc2Nhbi5waHAnLAorICAnYmFja2VuZF9kYXRhJyA6IG51bGwsCisgICdmaWxlcycgOiBudWxsLCAKKyAgJ2RpYWxvZyc6IG51bGwsCisgICdjYW5TZXRUYXJnZXQnOiB0cnVlLAorICAnY2FuUmVtb3ZlTGluayc6IHRydWUKK307CisKKworZnVuY3Rpb24gTGlua2VyKGVkaXRvciwgYXJncykKK3sKKyAgdGhpcy5lZGl0b3IgID0gZWRpdG9yOworICB0aGlzLmxDb25maWcgPSBlZGl0b3IuY29uZmlnLkxpbmtlcjsKKworICB2YXIgbGlua2VyID0gdGhpczsKKyAgaWYodHlwZW9mIGVkaXRvci5fY3JlYXRlTGluayA9PSAndW5kZWZpbmVkJykgeworICAgICAgZWRpdG9yLl9jcmVhdGVMaW5rID0gZnVuY3Rpb24odGFyZ2V0KSB7CisJICBpZighdGFyZ2V0KSB0YXJnZXQgPSBsaW5rZXIuX2dldFNlbGVjdGVkQW5jaG9yKCk7CisJICBsaW5rZXIuX2NyZWF0ZUxpbmsodGFyZ2V0KTsKKyAgICAgIH0KKyAgfQorICBpZighZWRpdG9yLmNvbmZpZy5idG5MaXN0LmNyZWF0ZWxpbmspCisgIHsKKyAgICBlZGl0b3IuY29uZmlnLnJlZ2lzdGVyQnV0dG9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NyZWF0ZWxpbmsnLCAnSW5zZXJ0L01vZGlmeSBIeXBlcmxpbmsnLCBbX2VkaXRvcl91cmwgKyAiaW1hZ2VzL2VkX2J1dHRvbnNfbWFpbi5naWYiLDYsMV0sIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oZSwgb2JqbmFtZSwgb2JqKSB7IGVkaXRvci5leGVjQ29tbWFuZCgiY3JlYXRlbGluayIpOyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICB9CisKKyAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kICdjcmVhdGVsaW5rJworIGVkaXRvci5jb25maWcuYWRkVG9vbGJhckVsZW1lbnQoImNyZWF0ZWxpbmsiLCAiY3JlYXRlbGluayIsIDApOworfQorCitMaW5rZXIucHJvdG90eXBlLl9sYyA9IGZ1bmN0aW9uKHN0cmluZykKK3sKKyAgcmV0dXJuIFhpbmhhLl9sYyhzdHJpbmcsICdMaW5rZXInKTsKK307CisKKworTGlua2VyLnByb3RvdHlwZS5vbkdlbmVyYXRlT25jZSA9IGZ1bmN0aW9uKCkKK3sKKyAgTGlua2VyLmxvYWRBc3NldHMoKTsKKyAgdGhpcy5sb2FkRmlsZXMoKTsKK307CisKK0xpbmtlci5wcm90b3R5cGUub25VcGRhdGVUb29sYmFyID0gZnVuY3Rpb24oKQoreyAKKyAgaWYgKHR5cGVvZiBkVHJlZSA9PSAndW5kZWZpbmVkJyB8fCAhTGlua2VyLm1ldGhvZHNSZWFkeSB8fCAhTGlua2VyLmh0bWwgfHwgIXRoaXMuZmlsZXMpCisgIHsKKyAgICB0aGlzLmVkaXRvci5fdG9vbGJhck9iamVjdHMuY3JlYXRlbGluay5zdGF0ZSgiZW5hYmxlZCIsIGZhbHNlKTsKKyAgfQorICBlbHNlIHRoaXMub25VcGRhdGVUb29sYmFyID0gbnVsbDsKK307CisKK0xpbmtlci5EaWFsb2dfZFRyZWVzID0gWyBdOworCitMaW5rZXIubG9hZEFzc2V0cyA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIHNlbGYgPSBMaW5rZXI7CisgIGlmIChzZWxmLmxvYWRpbmcpIHJldHVybjsKKyAgc2VsZi5sb2FkaW5nID0gdHJ1ZTsKKyAgWGluaGEuX2dldGJhY2soWGluaGEuZ2V0UGx1Z2luRGlyKCJMaW5rZXIiKSArICcvcGx1Z2luTWV0aG9kcy5qcycsIGZ1bmN0aW9uKGdldGJhY2spIHsgZXZhbChnZXRiYWNrKTsgc2VsZi5tZXRob2RzUmVhZHkgPSB0cnVlOyB9KTsKKyAgWGluaGEuX2xvYWRiYWNrKCBYaW5oYS5nZXRQbHVnaW5EaXIoIkxpbmtlciIpICsgJy9kVHJlZS9kdHJlZS5qcycsIGZ1bmN0aW9uKCkge0xpbmtlci5kVHJlZVJlYWR5ID0gdHJ1ZTsgfSApOworICBYaW5oYS5fZ2V0YmFjayggWGluaGEuZ2V0UGx1Z2luRGlyKCJMaW5rZXIiKSArICcvZGlhbG9nLmh0bWwnLCBmdW5jdGlvbihnZXRiYWNrKSB7IHNlbGYuaHRtbCA9IGdldGJhY2s7IH0gKTsKK30KKworTGlua2VyLnByb3RvdHlwZS5sb2FkRmlsZXMgPSBmdW5jdGlvbigpCit7CisgICAgdmFyIGxpbmtlciA9IHRoaXM7CisgICAgaWYobGlua2VyLmxDb25maWcuYmFja2VuZCkKKyAgICB7CisgICAgICAgIC8vZ2V0IGZpbGVzIGZyb20gYmFja2VuZAorICAgICAgICBYaW5oYS5fcG9zdGJhY2sobGlua2VyLmxDb25maWcuYmFja2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VyLmxDb25maWcuYmFja2VuZF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih0eHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXIuZmlsZXMgPSBldmFsKHR4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChFcnJvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXIuZmlsZXMgPSBbIHt1cmw6JycsdGl0bGU6RXJyb3IudG9TdHJpbmcoKX0gXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgfQorICAgIGVsc2UgaWYobGlua2VyLmxDb25maWcuZmlsZXMgIT0gbnVsbCkKKyAgICB7CisgICAgICAgIC8vZ2V0IGZpbGVzIGZyb20gcGx1Z2luLWNvbmZpZworICAgICAgICBsaW5rZXIuZmlsZXMgPSBsaW5rZXIubENvbmZpZy5maWxlczsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9hcGkuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2FwaS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ODZhODAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9hcGkuaHRtbApAQCAtMCwwICsxLDI1MiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorCis8aHRtbD4KKworPGhlYWQ+CisJPHRpdGxlPkRlc3Ryb3lkcm9wICZyYXF1bzsgSmF2YXNjcmlwdHMgJnJhcXVvOyBUcmVlICZyYXF1bzsgQXBpPC90aXRsZT4KKworCTxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sO2NoYXJzZXQ9aXNvLTg4NTktMSIgLz4KKwk8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9kZC5jc3MiIHR5cGU9InRleHQvY3NzIiAvPgorCTxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iL2Zhdmljb24uaWNvIiAvPgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBpZD0ic2hhZG93Ij4KKworCTxkaXYgaWQ9ImNvbnRlbnQiPgorCisJCTxkaXYgaWQ9ImxvY2F0aW9uIj4KKwkJCTxoMT48YSBocmVmPSIvIj5EZXN0cm95ZHJvcDwvYT4gJnJhcXVvOyA8YSBocmVmPSIvamF2YXNjcmlwdHMvIj5KYXZhc2NyaXB0czwvYT4gJnJhcXVvOyA8YSBocmVmPSIvamF2YXNjcmlwdHMvdHJlZS8iPlRyZWU8L2E+ICZyYXF1bzsgPGEgaHJlZj0iL2phdmFzY3JpcHRzL3RyZWUvYXBpLyI+QXBpPC9hPjwvaDE+CisJCTwvZGl2PgorCisKKwkJPGRpdiBjbGFzcz0ibGluZSI+PC9kaXY+CisKKwkJPGRpdiBpZD0iZmlsZXMiPgorCisKKzxoMz5PdmVydmlldzwvaDM+Cis8ZGl2IGNsYXNzPSJsaW5lIj48L2Rpdj4KKzxkaXYgY2xhc3M9Iml0ZW0iPgorCisJPHVsIGNsYXNzPSJhcnJvdyI+CisJCTxsaT48YSBocmVmPSIjZnVuY3Rpb25zIj5GdW5jdGlvbnM8L2E+CisJCQk8dWwgY2xhc3M9ImFycm93Ij4KKwkJCQk8bGk+PGEgaHJlZj0iI2FkZCI+YWRkPC9hPjwvbGk+CisJCQkJPGxpPjxhIGhyZWY9IiNvcGVuYWxsIj5vcGVuQWxsPC9hPjwvbGk+CisJCQkJPGxpPjxhIGhyZWY9IiNjbG9zZWFsbCI+Y2xvc2VBbGw8L2E+PC9saT4KKwkJCQk8bGk+PGEgaHJlZj0iI29wZW50byI+b3BlblRvPC9hPjwvbGk+CisJCQk8L3VsPgorCQk8L2xpPgorCQk8bGk+PGEgaHJlZj0iI2NvbmZpZ3VyYXRpb24iPkNvbmZpZ3VyYXRpb248L2E+PC9saT4KKwk8L3VsPgorCis8L2Rpdj4KKworPGEgbmFtZT0iZnVuY3Rpb25zIj48L2E+Cis8aDM+RnVuY3Rpb25zPC9oMz4KKzxkaXYgY2xhc3M9ImxpbmUiPjwvZGl2PgorPGRpdiBjbGFzcz0iaXRlbSI+CisKKwk8YSBuYW1lPSJhZGQiPjwvYT4KKwk8aDQgY2xhc3M9ImZ1bmMiPmFkZCgpPC9oND4KKwk8cD5BZGRzIGEgbm9kZSB0byB0aGUgdHJlZS48YnIgLz5DYW4gb25seSBiZSBjYWxsZWQgYmVmb3JlIHRoZSB0cmVlIGlzIGRyYXduLjwvcD4KKwk8cD5pZCwgcGlkIGFuZCBuYW1lIGFyZSByZXF1aXJlZC48L3A+CisKKwk8aDQ+UGFyYW1ldGVyczwvaDQ+CisJPHRhYmxlIGNsYXNzPSJmaWxlcyI+CisJPHRyPgorCQk8dGg+TmFtZTwvdGg+CisJCTx0aD5UeXBlPC90aD4KKwkJPHRoPkRlc2NyaXB0aW9uPC90aD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPmlkPC90ZD4KKwkJPHRkPk51bWJlcjwvdGQ+CisJCTx0ZD5VbmlxdWUgaWRlbnRpdHkgbnVtYmVyLjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZD5waWQ8L3RkPgorCQk8dGQ+TnVtYmVyPC90ZD4KKwkJPHRkPk51bWJlciByZWZlcmluZyB0byB0aGUgcGFyZW50IG5vZGUuIFRoZSB2YWx1ZSBmb3IgdGhlIHJvb3Qgbm9kZSBoYXMgdG8gYmUgLTEuPC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPm5hbWU8L3RkPgorCQk8dGQ+U3RyaW5nPC90ZD4KKwkJPHRkPlRleHQgbGFiZWwgZm9yIHRoZSBub2RlLjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZD51cmw8L3RkPgorCQk8dGQ+U3RyaW5nPC90ZD4KKwkJPHRkPlVybCBmb3IgdGhlIG5vZGUuPC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPnRpdGxlPC90ZD4KKwkJPHRkPlN0cmluZzwvdGQ+CisJCTx0ZD5UaXRsZSBmb3IgdGhlIG5vZGUuPC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPnRhcmdldDwvdGQ+CisJCTx0ZD5TdHJpbmc8L3RkPgorCQk8dGQ+VGFyZ2V0IGZvciB0aGUgbm9kZS48L3RkPgorCTwvdHI+CisJPHRyPgorCQk8dGQ+aWNvbjwvdGQ+CisJCTx0ZD5TdHJpbmc8L3RkPgorCQk8dGQ+SW1hZ2UgZmlsZSB0byB1c2UgYXMgdGhlIGljb24uIFVzZXMgZGVmYXVsdCBpZiBub3Qgc3BlY2lmaWVkLjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZD5pY29uT3BlbjwvdGQ+CisJCTx0ZD5TdHJpbmc8L3RkPgorCQk8dGQ+SW1hZ2UgZmlsZSB0byB1c2UgYXMgdGhlIG9wZW4gaWNvbi4gVXNlcyBkZWZhdWx0IGlmIG5vdCBzcGVjaWZpZWQuPC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPm9wZW48L3RkPgorCQk8dGQ+Qm9vbGVhbjwvdGQ+CisJCTx0ZD5JcyB0aGUgbm9kZSBvcGVuLjwvdGQ+CisJPC90cj4KKwk8L3RhYmxlPgorCTxiciAvPgorCisKKwk8aDQ+RXhhbXBsZTwvaDQ+CisJPHA+PGNvZGU+bXl0cmVlLmFkZCgxLCAwLCAnTXkgbm9kZScsICdub2RlLmh0bWwnLCAnbm9kZSB0aXRsZScsICdtYWluZnJhbWUnLCAnaW1nL211c2ljZm9sZGVyLmdpZicpOzwvY29kZT48L3A+CisJPGJyIC8+CisKKwk8YSBuYW1lPSJvcGVuYWxsIj48L2E+CisJPGg0IGNsYXNzPSJmdW5jIj5vcGVuQWxsKCk8L2g0PgorCTxwPk9wZW5zIGFsbCB0aGUgbm9kZXMuPGJyIC8+Q2FuIGJlIGNhbGxlZCBiZWZvcmUgYW5kIGFmdGVyIHRoZSB0cmVlIGlzIGRyYXduLjwvcD4KKwk8aDQ+RXhhbXBsZTwvaDQ+CisJPHA+PGNvZGU+bXl0cmVlLm9wZW5BbGwoKTs8L2NvZGU+PC9wPgorCTxiciAvPgorCisKKwk8YSBuYW1lPSJjbG9zZWFsbCI+PC9hPgorCTxoNCBjbGFzcz0iZnVuYyI+Y2xvc2VBbGwoKTwvaDQ+CisJPHA+Q2xvc2VzIGFsbCB0aGUgbm9kZXMuPGJyIC8+Q2FuIGJlIGNhbGxlZCBiZWZvcmUgYW5kIGFmdGVyIHRoZSB0cmVlIGlzIGRyYXduLjwvcD4KKwk8aDQ+RXhhbXBsZTwvaDQ+CisJPHA+PGNvZGU+bXl0cmVlLmNsb3NlQWxsKCk7PC9jb2RlPjwvcD4KKwk8YnIgLz4KKworCisJPGEgbmFtZT0ib3BlbnRvIj48L2E+CisJPGg0IGNsYXNzPSJmdW5jIj5vcGVuVG8oKTwvaDQ+CisJPHA+T3BlbnMgdGhlIHRyZWUgdG8gYSBjZXJ0YWluIG5vZGUgYW5kIGNhbiBhbHNvIHNlbGVjdCB0aGUgbm9kZS48YnIgLz4KKwlDYW4gb25seSBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHRyZWUgaXMgZHJhd24uPC9wPgorCisJPGg0PlBhcmFtZXRlcnM8L2g0PgorCTx0YWJsZSBjbGFzcz0iZmlsZXMiPgorCTx0cj4KKwkJPHRoPk5hbWU8L3RoPgorCQk8dGg+VHlwZTwvdGg+CisJCTx0aD5EZXNjcmlwdGlvbjwvdGg+CisJPC90cj4KKwk8dHI+CisJCTx0ZD5pZDwvdGQ+CisJCTx0ZD5OdW1iZXI8L3RkPgorCQk8dGQ+SWRlbnRpdHkgbnVtYmVyIGZvciB0aGUgbm9kZS48L3RkPgorCTwvdHI+CisJPHRyPgorCQk8dGQ+c2VsZWN0PC90ZD4KKwkJPHRkPkJvb2xlYW48L3RkPgorCQk8dGQ+U2hvdWxkIHRoZSBub2RlIGJlIHNlbGVjdGVkLjwvdGQ+CisJPC90cj4KKwk8L3RhYmxlPgorCisJPGg0PkV4YW1wbGU8L2g0PgorCTxwPjxjb2RlPm15dHJlZS5vcGVuVG8oNCwgdHJ1ZSk7PC9jb2RlPjwvcD4KKworPC9kaXY+CisKKzxhIG5hbWU9ImNvbmZpZ3VyYXRpb24iPjwvYT4KKzxoMz5Db25maWd1cmF0aW9uPC9oMz4KKzxkaXYgY2xhc3M9ImxpbmUiPjwvZGl2PgorPGRpdiBjbGFzcz0iaXRlbSI+CisKKwk8dGFibGUgY2xhc3M9ImZpbGVzIj4KKwk8dHI+CisJCTx0aD5WYXJpYWJsZTwvdGg+CisJCTx0aD5UeXBlPC90aD4KKwkJPHRoPkRlZmF1bHQ8L3RoPgorCQk8dGg+RGVzY3JpcHRpb248L3RoPgorCTwvdHI+CisJPHRyPgorCQk8dGQ+dGFyZ2V0PC90ZD4KKwkJPHRkPlN0cmluZzwvdGQ+CisJCTx0ZD50cnVlPC90ZD4KKwkJPHRkPlRhcmdldCBmb3IgYWxsIHRoZSBub2Rlcy48L3RkPgorCTwvdHI+CisJPHRyPgorCQk8dGQ+Zm9sZGVyTGlua3M8L3RkPgorCQk8dGQ+Qm9vbGVhbjwvdGQ+CisJCTx0ZD50cnVlPC90ZD4KKwkJPHRkPlNob3VsZCBmb2xkZXJzIGJlIGxpbmtzLjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZD51c2VTZWxlY3Rpb248L3RkPgorCQk8dGQ+Qm9vbGVhbjwvdGQ+CisJCTx0ZD50cnVlPC90ZD4KKwkJPHRkPk5vZGVzIGNhbiBiZSBzZWxlY3RlZChoaWdobGlnaHRlZCkuPC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPnVzZUNvb2tpZXM8L3RkPgorCQk8dGQ+Qm9vbGVhbjwvdGQ+CisJCTx0ZD50cnVlPC90ZD4KKwkJPHRkPlRoZSB0cmVlIHVzZXMgY29va2llcyB0byByZW1iZXIgaXQncyBzdGF0ZS48L3RkPgorCTwvdHI+CisJPHRyPgorCQk8dGQ+dXNlTGluZXM8L3RkPgorCQk8dGQ+Qm9vbGVhbjwvdGQ+CisJCTx0ZD50cnVlPC90ZD4KKwkJPHRkPlRyZWUgaXMgZHJhd24gd2l0aCBsaW5lcy48L3RkPgorCTwvdHI+CisJPHRyPgorCQk8dGQ+dXNlSWNvbnM8L3RkPgorCQk8dGQ+Qm9vbGVhbjwvdGQ+CisJCTx0ZD50cnVlPC90ZD4KKwkJPHRkPlRyZWUgaXMgZHJhd24gd2l0aCBpY29ucy48L3RkPgorCTwvdHI+CisJPHRyPgorCQk8dGQ+dXNlU3RhdHVzVGV4dDwvdGQ+CisJCTx0ZD5Cb29sZWFuPC90ZD4KKwkJPHRkPmZhbHNlPC90ZD4KKwkJPHRkPkRpc3BsYXlzIG5vZGUgbmFtZXMgaW4gdGhlIHN0YXR1c2JhciBpbnN0ZWFkIG9mIHRoZSB1cmwuPC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPmNsb3NlU2FtZUxldmVsPC90ZD4KKwkJPHRkPkJvb2xlYW48L3RkPgorCQk8dGQ+ZmFsc2U8L3RkPgorCQk8dGQ+T25seSBvbmUgbm9kZSB3aXRoaW4gYSBwYXJlbnQgY2FuIGJlIGV4cGFuZGVkIGF0IHRoZSBzYW1lIHRpbWUuICBvcGVuQWxsKCkgYW5kIGNsb3NlQWxsKCkgZnVuY3Rpb25zIGRvIG5vdCB3b3JrIHdoZW4gdGhpcyBpcyBlbmFibGVkLjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZD5pbk9yZGVyPC90ZD4KKwkJPHRkPkJvb2xlYW48L3RkPgorCQk8dGQ+ZmFsc2U8L3RkPgorCQk8dGQ+SWYgcGFyZW50IG5vZGVzIGFyZSBhbHdheXMgYWRkZWQgYmVmb3JlIGNoaWxkcmVuLCBzZXR0aW5nIHRoaXMgdG8gdHJ1ZSBzcGVlZHMgdXAgdGhlIHRyZWUuPC90ZD4KKwk8L3RyPgorCTwvdGFibGU+CisKKwk8aDQ+RXhhbXBsZTwvaDQ+CisJPHA+PGNvZGU+bXl0cmVlLmNvbmZpZy50YXJnZXQgPSAibXl0YXJnZXQiOzwvY29kZT48L3A+CisKKzwvZGl2PgorCisJCTwvZGl2PgorCisJCTxkaXYgY2xhc3M9ImxpbmUiPjwvZGl2PgorCisKKwkJPGRpdiBpZD0iY29weSI+CisJCQk8cCBjbGFzcz0icmlnaHQiPjxhIGhyZWY9Imh0dHA6Ly92YWxpZGF0b3IudzMub3JnL2NoZWNrL3JlZmVyZXIiPlhIVE1MPC9hPiwgPGEgaHJlZj0iaHR0cDovL2ppZ3Nhdy53My5vcmcvY3NzLXZhbGlkYXRvci9jaGVjay9yZWZlcmVyIj5DU1M8L2E+PC9wPgorCQkJPHA+PGEgaHJlZj0ibWFpbHRvJiM1ODtkcm9wJiM2NDtkZXN0cm95ZHJvcCYjNDY7Y29tIj4mY29weTsyMDAyLTIwMDMgR2VpciBMYW5kciZvdW1sOzwvYT48L3A+CisJCTwvZGl2PgorCisJPC9kaXY+CisKKzwvZGl2PgorCisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2R0cmVlLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2R0cmVlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmY3NTU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvZFRyZWUvZHRyZWUuY3NzCkBAIC0wLDAgKzEsNDEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQorfCBkVHJlZSAyLjA1IHwgd3d3LmRlc3Ryb3lkcm9wLmNvbS9qYXZhc2NyaXB0L3RyZWUvIHwNCit8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KK3wgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgR2VpciBMYW5kcj8gICAgICAgICAgICAgICB8DQorfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisuZHRyZWUgew0KKyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsNCisgIGZvbnQtc2l6ZTogMTFweDsNCisgIGNvbG9yOiAjNjY2Ow0KKyAgd2hpdGUtc3BhY2U6IG5vd3JhcDsNCit9DQorLmR0cmVlIGltZyB7DQorICBib3JkZXI6IDBweCAhaW1wb3J0YW50Ow0KKyAgbWFyZ2luOjBweCAgIWltcG9ydGFudDsNCisgIGRpc3BsYXk6aW5saW5lICFpbXBvcnRhbnQ7DQorICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlICFpbXBvcnRhbnQ7DQorfQ0KKy5kdHJlZSBhLC5kdHJlZSBhOnZpc2l0ZWQgew0KKyAgY29sb3I6ICMzMzM7DQorICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQorfQ0KKy5kdHJlZSBhLm5vZGUsIC5kdHJlZSBhLm5vZGVTZWwgew0KKyAgd2hpdGUtc3BhY2U6IG5vd3JhcDsNCisgIHBhZGRpbmc6IDFweCAycHggMXB4IDJweDsNCisgIC8qcGFkZGluZzogMHB4IDFweCAwcHggMXB4OyovDQorfQ0KKy5kdHJlZSBhLm5vZGU6aG92ZXIsIC5kdHJlZSBhLm5vZGVTZWw6aG92ZXIgew0KKyAgY29sb3I6ICMzMzM7DQorICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCit9DQorLmR0cmVlIGEubm9kZVNlbCB7DQorICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzBkMmVjOw0KKyAgLyoNCisgIC1tb3otYm9yZGVyLXJhZGl1cyA6IDRweDsNCisgIGJvcmRlcjoxcHggZG90dGVkICMzMzM7DQorICAqLw0KK30NCisuZHRyZWUgLmNsaXAgew0KKyAgb3ZlcmZsb3c6IGhpZGRlbjsNCit9DQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvZFRyZWUvZHRyZWUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9kdHJlZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjk5NjI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvZFRyZWUvZHRyZWUuanMKQEAgLTAsMCArMSw3MjUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisKK3wgZFRyZWUgMi4wNSB8IHd3dy5kZXN0cm95ZHJvcC5jb20vamF2YXNjcmlwdC90cmVlLyB8CisKK3wtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisKK3wgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgR2VpciBMYW5kcj8gICAgICAgICAgICAgICB8CisKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisKK3wgVGhpcyBzY3JpcHQgY2FuIGJlIHVzZWQgZnJlZWx5IGFzIGxvbmcgYXMgYWxsICAgICB8CisKK3wgY29weXJpZ2h0IG1lc3NhZ2VzIGFyZSBpbnRhY3QuICAgICAgICAgICAgICAgICAgICB8CisKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisKK3wgVXBkYXRlZDogMTcuMDQuMjAwMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisKK3wtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworCisvLyBOb2RlIG9iamVjdAorCitmdW5jdGlvbiBkVHJlZU5vZGUoaWQsIHBpZCwgbmFtZSwgdXJsLCB0aXRsZSwgdGFyZ2V0LCBpY29uLCBpY29uT3Blbiwgb3BlbikgeworCisgIHRoaXMuaWQgPSBpZDsKKworICB0aGlzLnBpZCA9IHBpZDsKKworICB0aGlzLm5hbWUgPSBuYW1lOworCisgIHRoaXMudXJsID0gdXJsOworCisgIHRoaXMudGl0bGUgPSB0aXRsZTsKKworICB0aGlzLnRhcmdldCA9IHRhcmdldDsKKworICB0aGlzLmljb24gPSBpY29uOworCisgIHRoaXMuaWNvbk9wZW4gPSBpY29uT3BlbjsKKworICB0aGlzLl9pbyA9IG9wZW4gfHwgZmFsc2U7CisKKyAgdGhpcy5faXMgPSBmYWxzZTsKKworICB0aGlzLl9scyA9IGZhbHNlOworCisgIHRoaXMuX2hjID0gZmFsc2U7CisKKyAgdGhpcy5fYWkgPSAwOworCisgIHRoaXMuX3A7CisKK30KKworCisKKy8vIFRyZWUgb2JqZWN0CisKK2Z1bmN0aW9uIGRUcmVlKG9iak5hbWUsIGJhc2VEaXIpIHsKKworICB0aGlzLmNvbmZpZyA9IHsKKworICAgIHRhcmdldAkJCQkJOiBudWxsLAorCisgICAgZm9sZGVyTGlua3MJCQk6IHRydWUsCisKKyAgICB1c2VTZWxlY3Rpb24JCTogdHJ1ZSwKKworICAgIHVzZUNvb2tpZXMJCQk6IHRydWUsCisKKyAgICB1c2VMaW5lcwkJCQk6IHRydWUsCisKKyAgICB1c2VJY29ucwkJCQk6IHRydWUsCisKKyAgICB1c2VTdGF0dXNUZXh0CQk6IGZhbHNlLAorCisgICAgY2xvc2VTYW1lTGV2ZWwJOiBmYWxzZSwKKworICAgIGluT3JkZXIJCQkJCTogZmFsc2UKKworICB9OworCisgIHRoaXMuaWNvbiA9IHsKKworICAgIHJvb3QJCQkJOiBiYXNlRGlyICsgJ2ltZy9iYXNlLmdpZicsCisKKyAgICBmb2xkZXIJCQk6IGJhc2VEaXIgKyAnaW1nL2ZvbGRlci5naWYnLAorCisgICAgZm9sZGVyT3Blbgk6IGJhc2VEaXIgKyAnaW1nL2ZvbGRlcm9wZW4uZ2lmJywKKworICAgIG5vZGUJCQkJOiBiYXNlRGlyICsgJ2ltZy9wYWdlLmdpZicsCisKKyAgICBlbXB0eQkJCQk6IGJhc2VEaXIgKyAnaW1nL2VtcHR5LmdpZicsCisKKyAgICBsaW5lCQkJCTogYmFzZURpciArICdpbWcvbGluZS5naWYnLAorCisgICAgam9pbgkJCQk6IGJhc2VEaXIgKyAnaW1nL2pvaW4uZ2lmJywKKworICAgIGpvaW5Cb3R0b20JOiBiYXNlRGlyICsgJ2ltZy9qb2luYm90dG9tLmdpZicsCisKKyAgICBwbHVzCQkJCTogYmFzZURpciArICdpbWcvcGx1cy5naWYnLAorCisgICAgcGx1c0JvdHRvbQk6IGJhc2VEaXIgKyAnaW1nL3BsdXNib3R0b20uZ2lmJywKKworICAgIG1pbnVzCQkJCTogYmFzZURpciArICdpbWcvbWludXMuZ2lmJywKKworICAgIG1pbnVzQm90dG9tCTogYmFzZURpciArICdpbWcvbWludXNib3R0b20uZ2lmJywKKworICAgIG5sUGx1cwkJCTogYmFzZURpciArICdpbWcvbm9saW5lc19wbHVzLmdpZicsCisKKyAgICBubE1pbnVzCQkJOiBiYXNlRGlyICsgJ2ltZy9ub2xpbmVzX21pbnVzLmdpZicKKworICB9OworCisgIHRoaXMub2JqID0gb2JqTmFtZTsKKworICB0aGlzLmFOb2RlcyA9IFtdOworCisgIHRoaXMuYUluZGVudCA9IFtdOworCisgIHRoaXMucm9vdCA9IG5ldyBkVHJlZU5vZGUoLTEpOworCisgIHRoaXMuc2VsZWN0ZWROb2RlID0gbnVsbDsKKworICB0aGlzLnNlbGVjdGVkRm91bmQgPSBmYWxzZTsKKworICB0aGlzLmNvbXBsZXRlZCA9IGZhbHNlOworCit9CisKKworCisvLyBBZGRzIGEgbmV3IG5vZGUgdG8gdGhlIG5vZGUgYXJyYXkKKworZFRyZWUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKGlkLCBwaWQsIG5hbWUsIHVybCwgdGl0bGUsIHRhcmdldCwgaWNvbiwgaWNvbk9wZW4sIG9wZW4pIHsKKworICB0aGlzLmFOb2Rlc1t0aGlzLmFOb2Rlcy5sZW5ndGhdID0gbmV3IGRUcmVlTm9kZShpZCwgcGlkLCBuYW1lLCB1cmwsIHRpdGxlLCB0YXJnZXQsIGljb24sIGljb25PcGVuLCBvcGVuKTsKKworfTsKKworCisKKy8vIE9wZW4vY2xvc2UgYWxsIG5vZGVzCisKK2RUcmVlLnByb3RvdHlwZS5vcGVuQWxsID0gZnVuY3Rpb24oKSB7CisKKyAgdGhpcy5vQWxsKHRydWUpOworCit9OworCitkVHJlZS5wcm90b3R5cGUuY2xvc2VBbGwgPSBmdW5jdGlvbigpIHsKKworICB0aGlzLm9BbGwoZmFsc2UpOworCit9OworCisKKworLy8gT3V0cHV0cyB0aGUgdHJlZSB0byB0aGUgcGFnZQorCitkVHJlZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5zZXRDU19BbGwoKTsKKyAgdmFyIHN0ciA9ICc8ZGl2IGNsYXNzPSJkdHJlZSI+XG4nOworCisgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCkgeworCisgICAgaWYgKHRoaXMuY29uZmlnLnVzZUNvb2tpZXMpIHRoaXMuc2VsZWN0ZWROb2RlID0gdGhpcy5nZXRTZWxlY3RlZCgpOworCisgICAgc3RyICs9IHRoaXMuYWRkTm9kZSh0aGlzLnJvb3QpOworCisgIH0gZWxzZSBzdHIgKz0gJ0Jyb3dzZXIgbm90IHN1cHBvcnRlZC4nOworCisgIHN0ciArPSAnPC9kaXY+JzsKKworICBpZiAoIXRoaXMuc2VsZWN0ZWRGb3VuZCkgdGhpcy5zZWxlY3RlZE5vZGUgPSBudWxsOworCisgIHRoaXMuY29tcGxldGVkID0gdHJ1ZTsKKworICByZXR1cm4gc3RyOworCit9OworCisKKworLy8gQ3JlYXRlcyB0aGUgdHJlZSBzdHJ1Y3R1cmUKKworZFRyZWUucHJvdG90eXBlLmFkZE5vZGUgPSBmdW5jdGlvbihwTm9kZSkgeworCisgIHZhciBzdHIgPSAnJzsKKworICB2YXIgbj0wOworCisgIGlmICh0aGlzLmNvbmZpZy5pbk9yZGVyKSBuID0gcE5vZGUuX2FpOworCisgIGZvciAobjsgbjx0aGlzLmFOb2Rlcy5sZW5ndGg7IG4rKykgeworCisgICAgaWYgKHRoaXMuYU5vZGVzW25dLnBpZCA9PSBwTm9kZS5pZCkgeworCisgICAgICB2YXIgY24gPSB0aGlzLmFOb2Rlc1tuXTsKKworICAgICAgY24uX3AgPSBwTm9kZTsKKworICAgICAgY24uX2FpID0gbjsKKworICAgICAgLy8gdGhpcy5zZXRDUyhjbik7CisKKyAgICAgIGlmICghY24udGFyZ2V0ICYmIHRoaXMuY29uZmlnLnRhcmdldCkgY24udGFyZ2V0ID0gdGhpcy5jb25maWcudGFyZ2V0OworCisgICAgICBpZiAoY24uX2hjICYmICFjbi5faW8gJiYgdGhpcy5jb25maWcudXNlQ29va2llcykgY24uX2lvID0gdGhpcy5pc09wZW4oY24uaWQpOworCisgICAgICBpZiAoIXRoaXMuY29uZmlnLmZvbGRlckxpbmtzICYmIGNuLl9oYykgY24udXJsID0gbnVsbDsKKworICAgICAgaWYgKHRoaXMuY29uZmlnLnVzZVNlbGVjdGlvbiAmJiBjbi5pZCA9PSB0aGlzLnNlbGVjdGVkTm9kZSAmJiAhdGhpcy5zZWxlY3RlZEZvdW5kKSB7CisKKyAgICAgICAgICBjbi5faXMgPSB0cnVlOworCisgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBuOworCisgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvdW5kID0gdHJ1ZTsKKworICAgICAgfQorCisgICAgICBzdHIgKz0gdGhpcy5ub2RlKGNuLCBuKTsKKworICAgICAgaWYgKGNuLl9scykgYnJlYWs7CisKKyAgICB9CisKKyAgfQorCisgIHJldHVybiBzdHI7CisKK307CisKKworCisvLyBDcmVhdGVzIHRoZSBub2RlIGljb24sIHVybCBhbmQgdGV4dAorCitkVHJlZS5wcm90b3R5cGUubm9kZSA9IGZ1bmN0aW9uKG5vZGUsIG5vZGVJZCkgeworCisgIHZhciBzdHIgPSAnPGRpdiBjbGFzcz0iZFRyZWVOb2RlIj4nICsgdGhpcy5pbmRlbnQobm9kZSwgbm9kZUlkKTsKKworICBpZiAodGhpcy5jb25maWcudXNlSWNvbnMpIHsKKworICAgIGlmICghbm9kZS5pY29uKSBub2RlLmljb24gPSAodGhpcy5yb290LmlkID09IG5vZGUucGlkKSA/IHRoaXMuaWNvbi5yb290IDogKChub2RlLl9oYykgPyB0aGlzLmljb24uZm9sZGVyIDogdGhpcy5pY29uLm5vZGUpOworCisgICAgaWYgKCFub2RlLmljb25PcGVuKSBub2RlLmljb25PcGVuID0gKG5vZGUuX2hjKSA/IHRoaXMuaWNvbi5mb2xkZXJPcGVuIDogdGhpcy5pY29uLm5vZGU7CisKKyAgICBpZiAodGhpcy5yb290LmlkID09IG5vZGUucGlkKSB7CisKKyAgICAgIG5vZGUuaWNvbiA9IHRoaXMuaWNvbi5yb290OworCisgICAgICBub2RlLmljb25PcGVuID0gdGhpcy5pY29uLnJvb3Q7CisKKyAgICB9CisKKyAgICBzdHIgKz0gJzxpbWcgaWQ9ImknICsgdGhpcy5vYmogKyBub2RlSWQgKyAnIiBzcmM9IicgKyAoKG5vZGUuX2lvKSA/IG5vZGUuaWNvbk9wZW4gOiBub2RlLmljb24pICsgJyIgYWx0PSIiIC8+JzsKKworICB9CisKKyAgaWYgKG5vZGUudXJsKSB7CisKKyAgICBzdHIgKz0gJzxhIGlkPSJzJyArIHRoaXMub2JqICsgbm9kZUlkICsgJyIgY2xhc3M9IicgKyAoKHRoaXMuY29uZmlnLnVzZVNlbGVjdGlvbikgPyAoKG5vZGUuX2lzID8gJ25vZGVTZWwnIDogJ25vZGUnKSkgOiAnbm9kZScpICsgJyIgaHJlZj0iJyArIG5vZGUudXJsICsgJyInOworCisgICAgaWYgKG5vZGUudGl0bGUpIHN0ciArPSAnIHRpdGxlPSInICsgbm9kZS50aXRsZSArICciJzsKKworICAgIGlmIChub2RlLnRhcmdldCkgc3RyICs9ICcgdGFyZ2V0PSInICsgbm9kZS50YXJnZXQgKyAnIic7CisKKyAgICBpZiAodGhpcy5jb25maWcudXNlU3RhdHVzVGV4dCkgc3RyICs9ICcgb25tb3VzZW92ZXI9IndpbmRvdy5zdGF0dXM9XCcnICsgbm9kZS5uYW1lICsgJ1wnO3JldHVybiB0cnVlOyIgb25tb3VzZW91dD0id2luZG93LnN0YXR1cz1cJ1wnO3JldHVybiB0cnVlOyIgJzsKKworICAgIGlmICh0aGlzLmNvbmZpZy51c2VTZWxlY3Rpb24gJiYgKChub2RlLl9oYyAmJiB0aGlzLmNvbmZpZy5mb2xkZXJMaW5rcykgfHwgIW5vZGUuX2hjKSkKKworICAgICAgc3RyICs9ICcgb25jbGljaz0iamF2YXNjcmlwdDogJyArIHRoaXMub2JqICsgJy5zKCcgKyBub2RlSWQgKyAnKTsiJzsKKworICAgIHN0ciArPSAnPic7CisKKyAgfQorCisgIGVsc2UgaWYgKCghdGhpcy5jb25maWcuZm9sZGVyTGlua3MgfHwgIW5vZGUudXJsKSAmJiBub2RlLl9oYyAmJiBub2RlLnBpZCAhPSB0aGlzLnJvb3QuaWQpCisKKyAgICBzdHIgKz0gJzxhIGhyZWY9ImphdmFzY3JpcHQ6ICcgKyB0aGlzLm9iaiArICcubygnICsgbm9kZUlkICsgJyk7IiBjbGFzcz0ibm9kZSI+JzsKKworICBzdHIgKz0gbm9kZS5uYW1lOworCisgIGlmIChub2RlLnVybCB8fCAoKCF0aGlzLmNvbmZpZy5mb2xkZXJMaW5rcyB8fCAhbm9kZS51cmwpICYmIG5vZGUuX2hjKSkgc3RyICs9ICc8L2E+JzsKKworICBzdHIgKz0gJzwvZGl2Pic7CisKKyAgaWYgKG5vZGUuX2hjKSB7CisKKyAgICBzdHIgKz0gJzxkaXYgaWQ9ImQnICsgdGhpcy5vYmogKyBub2RlSWQgKyAnIiBjbGFzcz0iY2xpcCIgc3R5bGU9ImRpc3BsYXk6JyArICgodGhpcy5yb290LmlkID09IG5vZGUucGlkIHx8IG5vZGUuX2lvKSA/ICdibG9jaycgOiAnbm9uZScpICsgJzsiPic7CisKKyAgICBzdHIgKz0gdGhpcy5hZGROb2RlKG5vZGUpOworCisgICAgc3RyICs9ICc8L2Rpdj4nOworCisgIH0KKworICB0aGlzLmFJbmRlbnQucG9wKCk7CisKKyAgcmV0dXJuIHN0cjsKKworfTsKKworCisKKy8vIEFkZHMgdGhlIGVtcHR5IGFuZCBsaW5lIGljb25zCisKK2RUcmVlLnByb3RvdHlwZS5pbmRlbnQgPSBmdW5jdGlvbihub2RlLCBub2RlSWQpIHsKKworICB2YXIgc3RyID0gJyc7CisKKyAgaWYgKHRoaXMucm9vdC5pZCAhPSBub2RlLnBpZCkgeworCisgICAgZm9yICh2YXIgbj0wOyBuPHRoaXMuYUluZGVudC5sZW5ndGg7IG4rKykKKworICAgICAgc3RyICs9ICc8aW1nIHNyYz0iJyArICggKHRoaXMuYUluZGVudFtuXSA9PSAxICYmIHRoaXMuY29uZmlnLnVzZUxpbmVzKSA/IHRoaXMuaWNvbi5saW5lIDogdGhpcy5pY29uLmVtcHR5ICkgKyAnIiBhbHQ9IiIgLz4nOworCisgICAgKG5vZGUuX2xzKSA/IHRoaXMuYUluZGVudC5wdXNoKDApIDogdGhpcy5hSW5kZW50LnB1c2goMSk7CisKKyAgICBpZiAobm9kZS5faGMpIHsKKworICAgICAgc3RyICs9ICc8YSBocmVmPSJqYXZhc2NyaXB0OiAnICsgdGhpcy5vYmogKyAnLm8oJyArIG5vZGVJZCArICcpOyI+PGltZyBpZD0iaicgKyB0aGlzLm9iaiArIG5vZGVJZCArICciIHNyYz0iJzsKKworICAgICAgaWYgKCF0aGlzLmNvbmZpZy51c2VMaW5lcykgc3RyICs9IChub2RlLl9pbykgPyB0aGlzLmljb24ubmxNaW51cyA6IHRoaXMuaWNvbi5ubFBsdXM7CisKKyAgICAgIGVsc2Ugc3RyICs9ICggKG5vZGUuX2lvKSA/ICgobm9kZS5fbHMgJiYgdGhpcy5jb25maWcudXNlTGluZXMpID8gdGhpcy5pY29uLm1pbnVzQm90dG9tIDogdGhpcy5pY29uLm1pbnVzKSA6ICgobm9kZS5fbHMgJiYgdGhpcy5jb25maWcudXNlTGluZXMpID8gdGhpcy5pY29uLnBsdXNCb3R0b20gOiB0aGlzLmljb24ucGx1cyApICk7CisKKyAgICAgIHN0ciArPSAnIiBhbHQ9IiIgLz48L2E+JzsKKworICAgIH0gZWxzZSBzdHIgKz0gJzxpbWcgc3JjPSInICsgKCAodGhpcy5jb25maWcudXNlTGluZXMpID8gKChub2RlLl9scykgPyB0aGlzLmljb24uam9pbkJvdHRvbSA6IHRoaXMuaWNvbi5qb2luICkgOiB0aGlzLmljb24uZW1wdHkpICsgJyIgYWx0PSIiIC8+JzsKKworICB9CisKKyAgcmV0dXJuIHN0cjsKKworfTsKKworCisKKy8vIENoZWNrcyBpZiBhIG5vZGUgaGFzIGFueSBjaGlsZHJlbiBhbmQgaWYgaXQgaXMgdGhlIGxhc3Qgc2libGluZworCitkVHJlZS5wcm90b3R5cGUuc2V0Q1MgPSBmdW5jdGlvbihub2RlKSB7CisKKyAgdmFyIGxhc3RJZDsKKworICBmb3IgKHZhciBuPTA7IG48dGhpcy5hTm9kZXMubGVuZ3RoOyBuKyspIHsKKworICAgIGlmICh0aGlzLmFOb2Rlc1tuXS5waWQgPT0gbm9kZS5pZCkgbm9kZS5faGMgPSB0cnVlOworCisgICAgaWYgKHRoaXMuYU5vZGVzW25dLnBpZCA9PSBub2RlLnBpZCkgbGFzdElkID0gdGhpcy5hTm9kZXNbbl0uaWQ7CisKKyAgfQorCisgIGlmIChsYXN0SWQ9PW5vZGUuaWQpIG5vZGUuX2xzID0gdHJ1ZTsKKworfTsKKworZFRyZWUucHJvdG90eXBlLnNldENTX0FsbCA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIGlkcyA9IHsgfTsgLy8gSUQgPT4geyBfaGM6IGhhc2NoaWxkcmVuLCBfbHNfaXM6IGxhc3RzaWJsaW5nfQorCisgIGZvcih2YXIgbiA9IDA7IG4gPCB0aGlzLmFOb2Rlcy5sZW5ndGg7IG4rKykKKyAgeworICAgIHZhciBub2RlID0gdGhpcy5hTm9kZXNbbl07CisgICAgaWYoIWlkc1tub2RlLnBpZF0pCisgICAgeworICAgICAgaWRzW25vZGUucGlkXSA9IHsgX2hjOiB0cnVlLCBfbHNfaXM6IG5vZGUuaWQgfTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGlkc1tub2RlLnBpZF0uX2hjICAgID0gdHJ1ZTsKKyAgICAgIGlkc1tub2RlLnBpZF0uX2xzX2lzID0gbm9kZS5pZDsKKyAgICB9CisKKyAgICBpZighaWRzW25vZGUuaWRdKQorICAgIHsKKyAgICAgIGlkc1tub2RlLmlkXSA9IHsgX2hjOiBmYWxzZSwgX2xzX2lzOiBudWxsIH0KKyAgICB9CisgIH0KKworICBmb3IodmFyIG4gPSAwOyBuIDwgdGhpcy5hTm9kZXMubGVuZ3RoOyBuKyspCisgIHsKKyAgICB2YXIgbm9kZSA9IHRoaXMuYU5vZGVzW25dOworICAgIG5vZGUuX2xzID0gaWRzW25vZGUucGlkXS5fbHNfaXMgPT0gbm9kZS5pZCA/IHRydWUgOiBmYWxzZTsKKyAgICBpZihpZHNbbm9kZS5pZF0pIAorICAgIHsKKyAgICAgIG5vZGUuX2hjID0gaWRzW25vZGUuaWRdLl9oYzsKKyAgICB9CisgIH0KK307CisKKy8vIFJldHVybnMgdGhlIHNlbGVjdGVkIG5vZGUKKworZFRyZWUucHJvdG90eXBlLmdldFNlbGVjdGVkID0gZnVuY3Rpb24oKSB7CisKKyAgdmFyIHNuID0gdGhpcy5nZXRDb29raWUoJ2NzJyArIHRoaXMub2JqKTsKKworICByZXR1cm4gKHNuKSA/IHNuIDogbnVsbDsKKworfTsKKworCisKKy8vIEhpZ2hsaWdodHMgdGhlIHNlbGVjdGVkIG5vZGUKKworZFRyZWUucHJvdG90eXBlLnMgPSBmdW5jdGlvbihpZCkgeworCisgIGlmICghdGhpcy5jb25maWcudXNlU2VsZWN0aW9uKSByZXR1cm47CisKKyAgdmFyIGNuID0gdGhpcy5hTm9kZXNbaWRdOworCisgIGlmIChjbi5faGMgJiYgIXRoaXMuY29uZmlnLmZvbGRlckxpbmtzKSByZXR1cm47CisKKyAgaWYgKHRoaXMuc2VsZWN0ZWROb2RlICE9IGlkKSB7CisKKyAgICBpZiAodGhpcy5zZWxlY3RlZE5vZGUgfHwgdGhpcy5zZWxlY3RlZE5vZGU9PTApIHsKKworICAgICAgZU9sZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzIiArIHRoaXMub2JqICsgdGhpcy5zZWxlY3RlZE5vZGUpOworCisgICAgICBlT2xkLmNsYXNzTmFtZSA9ICJub2RlIjsKKworICAgIH0KKworICAgIGVOZXcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicyIgKyB0aGlzLm9iaiArIGlkKTsKKworICAgIGVOZXcuY2xhc3NOYW1lID0gIm5vZGVTZWwiOworCisgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBpZDsKKworICAgIGlmICh0aGlzLmNvbmZpZy51c2VDb29raWVzKSB0aGlzLnNldENvb2tpZSgnY3MnICsgdGhpcy5vYmosIGNuLmlkKTsKKworICB9CisKK307CisKKworCisvLyBUb2dnbGUgT3BlbiBvciBjbG9zZQorCitkVHJlZS5wcm90b3R5cGUubyA9IGZ1bmN0aW9uKGlkKSB7CisKKyAgdmFyIGNuID0gdGhpcy5hTm9kZXNbaWRdOworCisgIHRoaXMubm9kZVN0YXR1cyghY24uX2lvLCBpZCwgY24uX2xzKTsKKworICBjbi5faW8gPSAhY24uX2lvOworCisgIGlmICh0aGlzLmNvbmZpZy5jbG9zZVNhbWVMZXZlbCkgdGhpcy5jbG9zZUxldmVsKGNuKTsKKworICBpZiAodGhpcy5jb25maWcudXNlQ29va2llcykgdGhpcy51cGRhdGVDb29raWUoKTsKKworfTsKKworCisKKy8vIE9wZW4gb3IgY2xvc2UgYWxsIG5vZGVzCisKK2RUcmVlLnByb3RvdHlwZS5vQWxsID0gZnVuY3Rpb24oc3RhdHVzKSB7CisKKyAgZm9yICh2YXIgbj0wOyBuPHRoaXMuYU5vZGVzLmxlbmd0aDsgbisrKSB7CisKKyAgICBpZiAodGhpcy5hTm9kZXNbbl0uX2hjICYmIHRoaXMuYU5vZGVzW25dLnBpZCAhPSB0aGlzLnJvb3QuaWQpIHsKKworICAgICAgdGhpcy5ub2RlU3RhdHVzKHN0YXR1cywgbiwgdGhpcy5hTm9kZXNbbl0uX2xzKQorCisgICAgICB0aGlzLmFOb2Rlc1tuXS5faW8gPSBzdGF0dXM7CisKKyAgICB9CisKKyAgfQorCisgIGlmICh0aGlzLmNvbmZpZy51c2VDb29raWVzKSB0aGlzLnVwZGF0ZUNvb2tpZSgpOworCit9OworCisKKworLy8gT3BlbnMgdGhlIHRyZWUgdG8gYSBzcGVjaWZpYyBub2RlCisKK2RUcmVlLnByb3RvdHlwZS5vcGVuVG8gPSBmdW5jdGlvbihuSWQsIGJTZWxlY3QsIGJGaXJzdCkgeworCisgIGlmICghYkZpcnN0KSB7CisKKyAgICBmb3IgKHZhciBuPTA7IG48dGhpcy5hTm9kZXMubGVuZ3RoOyBuKyspIHsKKworICAgICAgaWYgKHRoaXMuYU5vZGVzW25dLmlkID09IG5JZCkgeworCisgICAgICAgIG5JZD1uOworCisgICAgICAgIGJyZWFrOworCisgICAgICB9CisKKyAgICB9CisKKyAgfQorCisgIHZhciBjbj10aGlzLmFOb2Rlc1tuSWRdOworCisgIGlmIChjbi5waWQ9PXRoaXMucm9vdC5pZCB8fCAhY24uX3ApIHJldHVybjsKKworICBjbi5faW8gPSB0cnVlOworCisgIGNuLl9pcyA9IGJTZWxlY3Q7CisKKyAgaWYgKHRoaXMuY29tcGxldGVkICYmIGNuLl9oYykgdGhpcy5ub2RlU3RhdHVzKHRydWUsIGNuLl9haSwgY24uX2xzKTsKKworICBpZiAodGhpcy5jb21wbGV0ZWQgJiYgYlNlbGVjdCkgdGhpcy5zKGNuLl9haSk7CisKKyAgZWxzZSBpZiAoYlNlbGVjdCkgdGhpcy5fc249Y24uX2FpOworCisgIHRoaXMub3BlblRvKGNuLl9wLl9haSwgZmFsc2UsIHRydWUpOworCit9OworCisKKworLy8gQ2xvc2VzIGFsbCBub2RlcyBvbiB0aGUgc2FtZSBsZXZlbCBhcyBjZXJ0YWluIG5vZGUKKworZFRyZWUucHJvdG90eXBlLmNsb3NlTGV2ZWwgPSBmdW5jdGlvbihub2RlKSB7CisKKyAgZm9yICh2YXIgbj0wOyBuPHRoaXMuYU5vZGVzLmxlbmd0aDsgbisrKSB7CisKKyAgICBpZiAodGhpcy5hTm9kZXNbbl0ucGlkID09IG5vZGUucGlkICYmIHRoaXMuYU5vZGVzW25dLmlkICE9IG5vZGUuaWQgJiYgdGhpcy5hTm9kZXNbbl0uX2hjKSB7CisKKyAgICAgIHRoaXMubm9kZVN0YXR1cyhmYWxzZSwgbiwgdGhpcy5hTm9kZXNbbl0uX2xzKTsKKworICAgICAgdGhpcy5hTm9kZXNbbl0uX2lvID0gZmFsc2U7CisKKyAgICAgIHRoaXMuY2xvc2VBbGxDaGlsZHJlbih0aGlzLmFOb2Rlc1tuXSk7CisKKyAgICB9CisKKyAgfQorCit9CisKKworCisvLyBDbG9zZXMgYWxsIGNoaWxkcmVuIG9mIGEgbm9kZQorCitkVHJlZS5wcm90b3R5cGUuY2xvc2VBbGxDaGlsZHJlbiA9IGZ1bmN0aW9uKG5vZGUpIHsKKworICBmb3IgKHZhciBuPTA7IG48dGhpcy5hTm9kZXMubGVuZ3RoOyBuKyspIHsKKworICAgIGlmICh0aGlzLmFOb2Rlc1tuXS5waWQgPT0gbm9kZS5pZCAmJiB0aGlzLmFOb2Rlc1tuXS5faGMpIHsKKworICAgICAgaWYgKHRoaXMuYU5vZGVzW25dLl9pbykgdGhpcy5ub2RlU3RhdHVzKGZhbHNlLCBuLCB0aGlzLmFOb2Rlc1tuXS5fbHMpOworCisgICAgICB0aGlzLmFOb2Rlc1tuXS5faW8gPSBmYWxzZTsKKworICAgICAgdGhpcy5jbG9zZUFsbENoaWxkcmVuKHRoaXMuYU5vZGVzW25dKTsKKworICAgIH0KKworICB9CisKK30KKworCisKKy8vIENoYW5nZSB0aGUgc3RhdHVzIG9mIGEgbm9kZShvcGVuIG9yIGNsb3NlZCkKKworZFRyZWUucHJvdG90eXBlLm5vZGVTdGF0dXMgPSBmdW5jdGlvbihzdGF0dXMsIGlkLCBib3R0b20pIHsKKworICBlRGl2CT0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2QnICsgdGhpcy5vYmogKyBpZCk7CisKKyAgZUpvaW4JPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaicgKyB0aGlzLm9iaiArIGlkKTsKKworICBpZiAodGhpcy5jb25maWcudXNlSWNvbnMpIHsKKworICAgIGVJY29uCT0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2knICsgdGhpcy5vYmogKyBpZCk7CisKKyAgICBlSWNvbi5zcmMgPSAoc3RhdHVzKSA/IHRoaXMuYU5vZGVzW2lkXS5pY29uT3BlbiA6IHRoaXMuYU5vZGVzW2lkXS5pY29uOworCisgIH0KKworICBlSm9pbi5zcmMgPSAodGhpcy5jb25maWcudXNlTGluZXMpPworCisgICgoc3RhdHVzKT8oKGJvdHRvbSk/dGhpcy5pY29uLm1pbnVzQm90dG9tOnRoaXMuaWNvbi5taW51cyk6KChib3R0b20pP3RoaXMuaWNvbi5wbHVzQm90dG9tOnRoaXMuaWNvbi5wbHVzKSk6CisKKyAgKChzdGF0dXMpP3RoaXMuaWNvbi5ubE1pbnVzOnRoaXMuaWNvbi5ubFBsdXMpOworCisgIGVEaXYuc3R5bGUuZGlzcGxheSA9IChzdGF0dXMpID8gJ2Jsb2NrJzogJ25vbmUnOworCit9OworCisKKworCisKKy8vIFtDb29raWVdIENsZWFycyBhIGNvb2tpZQorCitkVHJlZS5wcm90b3R5cGUuY2xlYXJDb29raWUgPSBmdW5jdGlvbigpIHsKKworICB2YXIgbm93ID0gbmV3IERhdGUoKTsKKworICB2YXIgeWVzdGVyZGF5ID0gbmV3IERhdGUobm93LmdldFRpbWUoKSAtIDEwMDAgKiA2MCAqIDYwICogMjQpOworCisgIHRoaXMuc2V0Q29va2llKCdjbycrdGhpcy5vYmosICdjb29raWVWYWx1ZScsIHllc3RlcmRheSk7CisKKyAgdGhpcy5zZXRDb29raWUoJ2NzJyt0aGlzLm9iaiwgJ2Nvb2tpZVZhbHVlJywgeWVzdGVyZGF5KTsKKworfTsKKworCisKKy8vIFtDb29raWVdIFNldHMgdmFsdWUgaW4gYSBjb29raWUKKworZFRyZWUucHJvdG90eXBlLnNldENvb2tpZSA9IGZ1bmN0aW9uKGNvb2tpZU5hbWUsIGNvb2tpZVZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkgeworCisgIGRvY3VtZW50LmNvb2tpZSA9CisKKyAgICBlc2NhcGUoY29va2llTmFtZSkgKyAnPScgKyBlc2NhcGUoY29va2llVmFsdWUpCisKKyAgICArIChleHBpcmVzID8gJzsgZXhwaXJlcz0nICsgZXhwaXJlcy50b0dNVFN0cmluZygpIDogJycpCisKKyAgICArIChwYXRoID8gJzsgcGF0aD0nICsgcGF0aCA6ICcnKQorCisgICAgKyAoZG9tYWluID8gJzsgZG9tYWluPScgKyBkb21haW4gOiAnJykKKworICAgICsgKHNlY3VyZSA/ICc7IHNlY3VyZScgOiAnJyk7CisKK307CisKKworCisvLyBbQ29va2llXSBHZXRzIGEgdmFsdWUgZnJvbSBhIGNvb2tpZQorCitkVHJlZS5wcm90b3R5cGUuZ2V0Q29va2llID0gZnVuY3Rpb24oY29va2llTmFtZSkgeworCisgIHZhciBjb29raWVWYWx1ZSA9ICcnOworCisgIHZhciBwb3NOYW1lID0gZG9jdW1lbnQuY29va2llLmluZGV4T2YoZXNjYXBlKGNvb2tpZU5hbWUpICsgJz0nKTsKKworICBpZiAocG9zTmFtZSAhPSAtMSkgeworCisgICAgdmFyIHBvc1ZhbHVlID0gcG9zTmFtZSArIChlc2NhcGUoY29va2llTmFtZSkgKyAnPScpLmxlbmd0aDsKKworICAgIHZhciBlbmRQb3MgPSBkb2N1bWVudC5jb29raWUuaW5kZXhPZignOycsIHBvc1ZhbHVlKTsKKworICAgIGlmIChlbmRQb3MgIT0gLTEpIGNvb2tpZVZhbHVlID0gdW5lc2NhcGUoZG9jdW1lbnQuY29va2llLnN1YnN0cmluZyhwb3NWYWx1ZSwgZW5kUG9zKSk7CisKKyAgICBlbHNlIGNvb2tpZVZhbHVlID0gdW5lc2NhcGUoZG9jdW1lbnQuY29va2llLnN1YnN0cmluZyhwb3NWYWx1ZSkpOworCisgIH0KKworICByZXR1cm4gKGNvb2tpZVZhbHVlKTsKKworfTsKKworCisKKy8vIFtDb29raWVdIFJldHVybnMgaWRzIG9mIG9wZW4gbm9kZXMgYXMgYSBzdHJpbmcKKworZFRyZWUucHJvdG90eXBlLnVwZGF0ZUNvb2tpZSA9IGZ1bmN0aW9uKCkgeworCisgIHZhciBzdHIgPSAnJzsKKworICBmb3IgKHZhciBuPTA7IG48dGhpcy5hTm9kZXMubGVuZ3RoOyBuKyspIHsKKworICAgIGlmICh0aGlzLmFOb2Rlc1tuXS5faW8gJiYgdGhpcy5hTm9kZXNbbl0ucGlkICE9IHRoaXMucm9vdC5pZCkgeworCisgICAgICBpZiAoc3RyKSBzdHIgKz0gJy4nOworCisgICAgICBzdHIgKz0gdGhpcy5hTm9kZXNbbl0uaWQ7CisKKyAgICB9CisKKyAgfQorCisgIHRoaXMuc2V0Q29va2llKCdjbycgKyB0aGlzLm9iaiwgc3RyKTsKKworfTsKKworCisKKy8vIFtDb29raWVdIENoZWNrcyBpZiBhIG5vZGUgaWQgaXMgaW4gYSBjb29raWUKKworZFRyZWUucHJvdG90eXBlLmlzT3BlbiA9IGZ1bmN0aW9uKGlkKSB7CisKKyAgdmFyIGFPcGVuID0gdGhpcy5nZXRDb29raWUoJ2NvJyArIHRoaXMub2JqKS5zcGxpdCgnLicpOworCisgIGZvciAodmFyIG49MDsgbjxhT3Blbi5sZW5ndGg7IG4rKykKKworICAgIGlmIChhT3BlbltuXSA9PSBpZCkgcmV0dXJuIHRydWU7CisKKyAgcmV0dXJuIGZhbHNlOworCit9OworCisKKworLy8gSWYgUHVzaCBhbmQgcG9wIGlzIG5vdCBpbXBsZW1lbnRlZCBieSB0aGUgYnJvd3NlcgorCitpZiAoIUFycmF5LnByb3RvdHlwZS5wdXNoKSB7CisKKyAgQXJyYXkucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBhcnJheV9wdXNoKCkgeworCisgICAgZm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKykKKworICAgICAgdGhpc1t0aGlzLmxlbmd0aF09YXJndW1lbnRzW2ldOworCisgICAgcmV0dXJuIHRoaXMubGVuZ3RoOworCisgIH07CisKK30KKworaWYgKCFBcnJheS5wcm90b3R5cGUucG9wKSB7CisKKyAgQXJyYXkucHJvdG90eXBlLnBvcCA9IGZ1bmN0aW9uIGFycmF5X3BvcCgpIHsKKworICAgIGxhc3RFbGVtZW50ID0gdGhpc1t0aGlzLmxlbmd0aC0xXTsKKworICAgIHRoaXMubGVuZ3RoID0gTWF0aC5tYXgodGhpcy5sZW5ndGgtMSwwKTsKKworICAgIHJldHVybiBsYXN0RWxlbWVudDsKKworICB9OworCit9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9leGFtcGxlMDEuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2V4YW1wbGUwMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZDQ3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9leGFtcGxlMDEuaHRtbApAQCAtMCwwICsxLDUzIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CisKKzxodG1sPgorCis8aGVhZD4KKwk8dGl0bGU+RGVzdHJveWRyb3AgJnJhcXVvOyBKYXZhc2NyaXB0cyAmcmFxdW87IFRyZWU8L3RpdGxlPgorCisJPGxpbmsgcmVsPSJTdHlsZVNoZWV0IiBocmVmPSJkdHJlZS5jc3MiIHR5cGU9InRleHQvY3NzIiAvPgorCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImR0cmVlLmpzIj48L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keT4KKworPGgxPjxhIGhyZWY9Ii8iPkRlc3Ryb3lkcm9wPC9hPiAmcmFxdW87IDxhIGhyZWY9Ii9qYXZhc2NyaXB0cy8iPkphdmFzY3JpcHRzPC9hPiAmcmFxdW87IDxhIGhyZWY9Ii9qYXZhc2NyaXB0cy90cmVlLyI+VHJlZTwvYT48L2gxPgorCis8aDI+RXhhbXBsZTwvaDI+CisKKzxkaXYgY2xhc3M9ImR0cmVlIj4KKworCTxwPjxhIGhyZWY9ImphdmFzY3JpcHQ6IGQub3BlbkFsbCgpOyI+b3BlbiBhbGw8L2E+IHwgPGEgaHJlZj0iamF2YXNjcmlwdDogZC5jbG9zZUFsbCgpOyI+Y2xvc2UgYWxsPC9hPjwvcD4KKworCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKwkJPCEtLQorCisJCWQgPSBuZXcgZFRyZWUoJ2QnKTsKKworCQlkLmFkZCgwLC0xLCdNeSBleGFtcGxlIHRyZWUnKTsKKwkJZC5hZGQoMSwwLCdOb2RlIDEnLCdleGFtcGxlMDEuaHRtbCcpOworCQlkLmFkZCgyLDAsJ05vZGUgMicsJ2V4YW1wbGUwMS5odG1sJyk7CisJCWQuYWRkKDMsMSwnTm9kZSAxLjEnLCdleGFtcGxlMDEuaHRtbCcpOworCQlkLmFkZCg0LDAsJ05vZGUgMycsJ2V4YW1wbGUwMS5odG1sJyk7CisJCWQuYWRkKDUsMywnTm9kZSAxLjEuMScsJ2V4YW1wbGUwMS5odG1sJyk7CisJCWQuYWRkKDYsNSwnTm9kZSAxLjEuMS4xJywnZXhhbXBsZTAxLmh0bWwnKTsKKwkJZC5hZGQoNywwLCdOb2RlIDQnLCdleGFtcGxlMDEuaHRtbCcpOworCQlkLmFkZCg4LDEsJ05vZGUgMS4yJywnZXhhbXBsZTAxLmh0bWwnKTsKKwkJZC5hZGQoOSwwLCdNeSBQaWN0dXJlcycsJ2V4YW1wbGUwMS5odG1sJywnUGljdHVyZXMgSVwndmUgdGFrZW4gb3ZlciB0aGUgeWVhcnMnLCcnLCcnLCdpbWcvaW1nZm9sZGVyLmdpZicpOworCQlkLmFkZCgxMCw5LCdUaGUgdHJpcCB0byBJY2VsYW5kJywnZXhhbXBsZTAxLmh0bWwnLCdQaWN0dXJlcyBvZiBHdWxsZm9zcyBhbmQgR2V5c2lyJyk7CisJCWQuYWRkKDExLDksJ01vbVwncyBiaXJ0aGRheScsJ2V4YW1wbGUwMS5odG1sJyk7CisJCWQuYWRkKDEyLDAsJ1JlY3ljbGUgQmluJywnZXhhbXBsZTAxLmh0bWwnLCcnLCcnLCdpbWcvdHJhc2guZ2lmJyk7CisKKwkJZG9jdW1lbnQud3JpdGUoZCk7CisKKwkJLy8tLT4KKwk8L3NjcmlwdD4KKworPC9kaXY+CisKKzxwPjxhIGhyZWY9Im1haWx0byYjNTg7ZHJvcCYjNjQ7ZGVzdHJveWRyb3AmIzQ2O2NvbSI+JmNvcHk7MjAwMi0yMDAzIEdlaXIgTGFuZHImb3VtbDs8L2E+PC9wPgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvYmFzZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvYmFzZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFhNTM4YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2ltZy9iYXNlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvY2QuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvZFRyZWUvaW1nL2NkLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGZkNjhlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvZFRyZWUvaW1nL2NkLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvY29weS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvY29weS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMwNzcxYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2ltZy9jb3B5LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvZW1wdHkuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvZFRyZWUvaW1nL2VtcHR5LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWNmNTIzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvZFRyZWUvaW1nL2VtcHR5LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvZm9sZGVyLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2ltZy9mb2xkZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZTJmMjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvZm9sZGVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvZm9sZGVyb3Blbi5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvZm9sZGVyb3Blbi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc0NjQ5YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2ltZy9mb2xkZXJvcGVuLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvZ2xvYmUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvZFRyZWUvaW1nL2dsb2JlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDBlZjAwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvZFRyZWUvaW1nL2dsb2JlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvaW1nZm9sZGVyLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2ltZy9pbWdmb2xkZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MDYyMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvaW1nZm9sZGVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvam9pbi5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvam9pbi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVlMmY2YQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2ltZy9qb2luLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvam9pbmJvdHRvbS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvam9pbmJvdHRvbS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ4M2IxOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2ltZy9qb2luYm90dG9tLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvbGluZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvbGluZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRjZGViZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2ltZy9saW5lLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvbWludXMuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvZFRyZWUvaW1nL21pbnVzLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWI0NGI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvZFRyZWUvaW1nL21pbnVzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvbWludXNib3R0b20uZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvZFRyZWUvaW1nL21pbnVzYm90dG9tLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzgwZDcyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvZFRyZWUvaW1nL21pbnVzYm90dG9tLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvbW92ZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvbW92ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFhMWVhYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2ltZy9tb3ZlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvbXVzaWNmb2xkZXIuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvZFRyZWUvaW1nL211c2ljZm9sZGVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzYxYTQwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvZFRyZWUvaW1nL211c2ljZm9sZGVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvbm9saW5lc19taW51cy5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvbm9saW5lc19taW51cy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFhOGMyMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2ltZy9ub2xpbmVzX21pbnVzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvbm9saW5lc19wbHVzLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2ltZy9ub2xpbmVzX3BsdXMuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMjhhN2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvbm9saW5lc19wbHVzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvb2ZmbGluZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvb2ZmbGluZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxNjNhNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2ltZy9vZmZsaW5lLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvb2ZmbGluZS5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvb2ZmbGluZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI4NjI3MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2ltZy9vZmZsaW5lLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvcGFnZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvcGFnZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MxY2VhNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2ltZy9wYWdlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvcGx1cy5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvcGx1cy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZjOWExMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2ltZy9wbHVzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvcGx1c2JvdHRvbS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvcGx1c2JvdHRvbS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU2YWQ5MwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RUcmVlL2ltZy9wbHVzYm90dG9tLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvcXVlc3Rpb24uZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvZFRyZWUvaW1nL3F1ZXN0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTM2ZjAwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvZFRyZWUvaW1nL3F1ZXN0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kVHJlZS9pbWcvdHJhc2guZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvZFRyZWUvaW1nL3RyYXNoLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDJmYjcyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvZFRyZWUvaW1nL3RyYXNoLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kaWFsb2cuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2RpYWxvZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOWZiYjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9kaWFsb2cuaHRtbApAQCAtMCwwICsxLDEwNyBAQAorPGgxIGlkPSJbaDFdIj48bDEwbj5JbnNlcnQvTW9kaWZ5IExpbms8L2wxMG4+PC9oMT4KKzxkaXYgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlIj4KKzxkaXYgaWQ9IltkVHJlZV0iPih0aGUgZFRyZWUgZ29lcyBpbiBoZXJlKTwvZGl2PgorPGRpdiBpZD0iW29wdGlvbnNdIiA+CisgIDxmaWVsZHNldD4KKyAgICA8bGVnZW5kPjxsYWJlbD48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9Ilt0eXBlXSIgaWQ9Ilt0eXBlX3VybF0iIHZhbHVlPSJ1cmwiIGNoZWNrZWQ9ImNoZWNrZWQiIC8+CisgICAgICAgIDxsMTBuPlVSTCBMaW5rPC9sMTBuPgorICAgIDwvbGFiZWw+PC9sZWdlbmQ+CisgICAgPHRhYmxlIGlkPSJbdXJsdGFibGVdIiB3aWR0aD0iMTAwJSI+CisgICAgICA8dHI+CisgICAgICAgIDx0aD48bGFiZWwgZm9yPSJbaHJlZl0iPjxsMTBuPlVSTDo8L2wxMG4+IDwvbGFiZWw+PC90aD4KKyAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbaHJlZl0iIGlkPSJbaHJlZl0iIHN0eWxlPSJ3aWR0aDoxMDAlIiB2YWx1ZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iIG9uZm9jdXM9ImlmICh0aGlzLnZhbHVlID09ICdodHRwOi8vd3d3LmV4YW1wbGUuY29tLycpIHRoaXMudmFsdWUgPSAnJzsiIC8+PC90ZD4KKyAgICAgIDwvdHI+CisgICAgICA8dHI+CisgICAgICAgIDx0aD48bGFiZWwgZm9yPSJbdGl0bGVdIj48bDEwbj5UaXRsZTo8L2wxMG4+IDwvbGFiZWw+PC90aD4KKyAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbdGl0bGVdIiBpZD0iW3RpdGxlXSIgc3R5bGU9IndpZHRoOjEwMCUiIHZhbHVlPSJfKFNob3dzIE9uIEhvdmVyKSIgZGVmYXVsdF92YWx1ZT0iXyhTaG93cyBPbiBIb3ZlcikiIG9uZm9jdXM9ImlmICh0aGlzLnZhbHVlID09IHRoaXMuZ2V0QXR0cmlidXRlKCdkZWZhdWx0X3ZhbHVlJykpIHRoaXMudmFsdWUgPSAnJzsiIC8+PC90ZD4KKyAgICAgIDwvdHI+CisgICAgICA8dHIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IiBpZD0iW3RhcmdldF9vcHRpb25zXSI+CisgICAgICAgIDx0aD48bDEwbj5UYXJnZXQ6PC9sMTBuPjwvdGg+CisgICAgICAgIDx0ZD4KKyAgICAgICAgICA8ZGl2IGlkPSJbbm9UYXJnZXRdIj48bGFiZWw+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJbdGFyZ2V0XSIgaWQ9Iltub1RhcmdldFJhZGlvXSIgdmFsdWU9IiIgLz4gPGwxMG4+T3JkaW5hcnkgTGluazwvbDEwbj48L2xhYmVsPjwvZGl2PgorICAgICAgICAgIDxkaXYgaWQ9IltzYW1lV2luZG93XSI+PGxhYmVsPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iW3RhcmdldF0iIGlkPSJbc2FtZVdpbmRvd1JhZGlvXSIgdmFsdWU9Il90b3AiIC8+IDxsMTBuPlNhbWUgV2luZG93IChqdW1wIG91dCBvZiBmcmFtZXMpPC9sMTBuPjwvbGFiZWw+PC9kaXY+CisgICAgICAgICAgPGRpdiBpZD0iW25ld1dpbmRvd10iPjxsYWJlbD48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9Ilt0YXJnZXRdIiBpZD0iW25ld1dpbmRvd1JhZGlvXSIgdmFsdWU9Il9ibGFuayIgLz4gPGwxMG4+TmV3IFdpbmRvdzwvbDEwbj4gPC9sYWJlbD48L2Rpdj4KKyAgICAgICAgICA8ZGl2IGlkPSJbcG9wdXBXaW5kb3ddIj4KKyAgICAgICAgICAgIDxsYWJlbD48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9Ilt0YXJnZXRdIiBpZD0iW3BvcHVwV2luZG93UmFkaW9dIiB2YWx1ZT0icG9wdXAiIC8+IDxsMTBuPlBvcHVwIFdpbmRvdzwvbDEwbj4gPC9sYWJlbD4KKyAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweCI+CisgICAgICAgICAgICAgIDx0YWJsZSBpZD0iW3BvcHVwdGFibGVdIj4KKyAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij48bDEwbj5TaXplOjwvbDEwbj48L3RoPgorICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbcF93aWR0aF0iIHNpemU9IjQiIC8+eDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbcF9oZWlnaHRdIiBzaXplPSI0IiAvPiA8bDEwbj4ocHgpPC9sMTBuPjwvdGQ+CisgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij48bDEwbj5OYW1lOjwvbDEwbj48L3RoPgorICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbcF9uYW1lXSIgc3R5bGU9IndpZHRoOjEwMCUiIHZhbHVlPSJfKFBvcHVwV2luZG93KSIgLz48L3RkPgorICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+PGwxMG4+TWVudSBCYXI6PC9sMTBuPjwvdGg+CisgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJbcF9vcHRpb25zXSIgdmFsdWU9Im1lbnViYXI9eWVzIiAvPjwvdGQ+CisKKyAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPjxsMTBuPlRvb2xiYXI6PC9sMTBuPjwvdGg+CisgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJbcF9vcHRpb25zXSIgdmFsdWU9InRvb2xiYXI9eWVzIiBjaGVja2VkPSJjaGVja2VkIiAvPjwvdGQ+CisgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij48bDEwbj5Mb2NhdGlvbiBCYXI6PC9sMTBuPjwvdGg+CisgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJbcF9vcHRpb25zXSIgdmFsdWU9ImxvY2F0aW9uPXllcyIgLz48L3RkPgorCisgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij48bDEwbj5TdGF0dXMgQmFyOjwvbDEwbj48L3RoPgorICAgICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iW3Bfb3B0aW9uc10iIHZhbHVlPSJzdGF0dXM9eWVzIiAgIC8+PC90ZD4KKyAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPjxsMTBuPlNjcm9sbGJhcnM6PC9sMTBuPjwvdGg+CisgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJbcF9vcHRpb25zXSIgdmFsdWU9InNjcm9sbGJhcnM9eWVzIiBjaGVja2VkPSJjaGVja2VkIiAvPjwvdGQ+CisKKyAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPjxsMTBuPlJlc2l6ZWFibGU6PC9sMTBuPjwvdGg+CisgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJbcF9vcHRpb25zXSIgdmFsdWU9InJlc2l6ZWFibGU9eWVzIiBjaGVja2VkPSJjaGVja2VkIiAvPjwvdGQ+CisgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L3RkPgorICAgICAgPC90cj4KKyAgICA8L3RhYmxlPgorICA8L2ZpZWxkc2V0PgorICA8ZmllbGRzZXQgaWQ9IlttYWlsdG9maWVsZHNldF0iPgorICAgIDxsZWdlbmQ+PGxhYmVsPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iW3R5cGVdIiBpZD0iW3R5cGVfbWFpbHRvXSIgdmFsdWU9Im1haWx0byIvPgorICAgICAgICA8bDEwbj5FbWFpbCBMaW5rPC9sMTBuPgorICAgIDwvbGFiZWw+PC9sZWdlbmQ+CisgICAgPHRhYmxlIGlkPSJbbWFpbHRhYmxlXSIgd2lkdGg9IjEwMCUiPgorICAgICAgPHRyPgorICAgICAgICA8dGg+PGxhYmVsIGZvcj0iW3RvXSI+PGwxMG4+RW1haWwgQWRkcmVzczo8L2wxMG4+IDwvbGFiZWw+PC90aD4KKyAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbdG9dIiBpZD0iW3RvXSIgc3R5bGU9IndpZHRoOjEwMCUiIHZhbHVlPSJhbGljZUBleGFtcGxlLmNvbSIgb25mb2N1cz0iaWYgKHRoaXMudmFsdWUgPT0gJ2FsaWNlQGV4YW1wbGUuY29tJykgdGhpcy52YWx1ZSA9ICcnOyIgLz48L3RkPgorICAgICAgPC90cj4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRoPjxsYWJlbCBmb3I9IltzdWJqZWN0XSI+PGwxMG4+U3ViamVjdDo8L2wxMG4+IDwvbGFiZWw+PC90aD4KKyAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbc3ViamVjdF0iIHN0eWxlPSJ3aWR0aDoxMDAlIiB2YWx1ZT0iIiAvPjwvdGQ+CisgICAgICA8L3RyPgorICAgICAgPHRyPgorICAgICAgICA8dGg+PGxhYmVsIGZvcj0iW2JvZHldIj48bDEwbj5NZXNzYWdlIFRlbXBsYXRlOjwvbDEwbj4gPC9sYWJlbD48L3RoPgorICAgICAgICA8dGQ+PHRleHRhcmVhIG5hbWU9Iltib2R5XSIgc3R5bGU9IndpZHRoOjEwMCUiIHJvd3M9IjUiPjwvdGV4dGFyZWE+PC90ZD4KKyAgICAgIDwvdHI+CisgICAgPC90YWJsZT4KKyAgPC9maWVsZHNldD4KKworICA8ZmllbGRzZXQgaWQ9IlthbmNob3JmaWVsZHNldF0iPgorICAgIDxsZWdlbmQ+PGxhYmVsPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iW3R5cGVdIiBpZD0iW3R5cGVfYW5jaG9yXSIgdmFsdWU9ImFuY2hvciIvPgorICAgICAgICA8bDEwbj5BbmNob3ItTGluazwvbDEwbj4KKyAgICA8L2xhYmVsPjwvbGVnZW5kPgorICAgIDx0YWJsZSBpZD0iW2FuY2hvcnRhYmxlXSIgd2lkdGg9IjEwMCUiPgorICAgICAgPHRyPgorICAgICAgICA8dGg+PGxhYmVsIGZvcj0iW2FuY2hvcl0iPjxsMTBuPkFuY2hvcjo8L2wxMG4+IDwvbGFiZWw+PC90aD4KKyAgICAgICAgPHRkPgorICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJbYW5jaG9yXSIgaWQ9IlthbmNob3JdIj4KKyAgICAgICAgICAgIDwvc2VsZWN0PgorICAgICAgICA8L3RkPgorICAgICAgPC90cj4KKyAgICA8L3RhYmxlPgorICA8L2ZpZWxkc2V0PgorCisgIDxkaXYgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPgorICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIGlkPSJbb2tdIiAgICAgdmFsdWU9Il8oT0spIiAgICAgLz4KKyAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0iW2NsZWFyXSIgIHZhbHVlPSJfKFJlbW92ZSBMaW5rKSIgLz4KKyAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0iW2NhbmNlbF0iIHZhbHVlPSJfKENhbmNlbCkiIC8+CisgIDwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKworCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL2NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9jaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTYwMmI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9jaC5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLlj5bmtogiLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAi5o+S5YWlL+aUueWvq+mAo+e1kCIsCisgICAgIk9LIjogIuWlvSIsCisgICAgIlRhcmdldDoiOiAi55uu5qiZ5YyhOiIsCisgICAgIlVSTDoiOiAi57ay5Z2AOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9jei5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvY3ouanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZiOTkyOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvY3ouanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjeiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL2RhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9kYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWU0MTFkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9kYS5qcwpAQCAtMCwwICsxLDIwIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGxlciIsCisgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJJbmRzw6Z0L3JlZGlnZXIgaHlwZXJsaW5rIiwKKyAgICAiTmFtZToiOiAiTmF2biIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiU2l6ZToiOiAiU3TDuHJyZWxzZSIsCisgICAgIlRhcmdldDoiOiAiUGxhY2VyaW5nOiIsCisgICAgIlVSTDoiOiAiVVJMOiIsCisgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICJWw6ZsZyB2ZW5saWdzdCBub2dldCB0ZWtzdCBmw7hyIGR1IGxhdmVyIGV0IG55dCBsaW5rLiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRhOWI2NQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvZGUuanMKQEAgLTAsMCArMSwzMSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiV29sbGVuIFNpZSBkaWVzZW4gTGluayB3aXJrbGljaCBlbnRmZXJuZW4/IiwKKyAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgIkVtYWlsIEFkZHJlc3M6IjogIkVtYWlsIEFkcmVzc2UiLAorICAgICJFbWFpbCBMaW5rIjogIkVtYWlsIExpbmsiLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiVmVya27DvHBmdW5nIGhpbnp1ZsO8Z2VuL8OkbmRlcm4iLAorICAgICJNZXNzYWdlIFRlbXBsYXRlOiI6ICJOYWNocmljaHRlbiBWb3JsYWdlOiIsCisgICAgIk5hbWU6IjogIk5hbWU6IiwKKyAgICAiTmV3IFdpbmRvdyI6ICJOZXVlcyBGZW5zdGVyIiwKKyAgICAiT0siOiAiT0siLAorICAgICJPcmRpbmFyeSBMaW5rIjogIlN0YW5kYXJkIExpbmsiLAorICAgICJQb3B1cCBXaW5kb3ciOiAiUG9wLVVwIEZlbnN0ZXIiLAorICAgICJSZW1vdmUgTGluayI6ICJMaW5rIGVudGZlcm5lbiIsCisgICAgIlNhbWUgV2luZG93IChqdW1wIG91dCBvZiBmcmFtZXMpIjogIlNlbGJlcyBGZW5zdGVyIChnYW56ZXIgQmVyZWljaCkiLAorICAgICJTaXplOiI6ICJHcsO2w59lOiIsCisgICAgIlN1YmplY3Q6IjogIkJldHJlZmY6IiwKKyAgICAiVGFyZ2V0OiI6ICJaaWVsOiIsCisgICAgIlVSTCBMaW5rIjogIlVSTCBBZHJlc3NlIiwKKyAgICAiVVJMOiI6ICJVUkw6IiwKKyAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIlNpZSBtw7xzc2VuIGVpbmVuIFRleHQgbWFya2llcmVuIHVtIGVpbmVuIExpbmsgenUgZXJzdGVsbGVuIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL2VlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9lZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTkxNmU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9lZS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJMb29idSIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL2VsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9lbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTUyZmM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9lbC5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLOkc66z43Pgc+Jz4POtyIsCisgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICLOlc65z4POsc6zz4nOs86uL86kz4HOv8+Azr/PgM6/zq/Ot8+Dzrcgz4PPjc69zrTOtc+DzrzOv8+FIiwKKyAgICAiT0siOiAizpXOvc+EzqzOvs61zrkiLAorICAgICJUYXJnZXQ6IjogIlRhcmdldDoiLAorICAgICJVUkw6IjogIlVSTDoiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MTE4MWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL2VzLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXMiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIkluc2VydGFyL01vZGlmaWNhciB1biBlbmxhY2UiLAorICAgICJPSyI6ICJBY2VwdGFyIiwKKyAgICAiVGFyZ2V0OiI6ICJEZXN0aW5vOiIsCisgICAgIlVSTDoiOiAiVVJMOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9ldS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvZXUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRhYTMwMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvZXUuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJldSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiVXR6aSIsCisgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJMb3R1cmEgdHhlcnRhdHUvYWxkYXR1IiwKKyAgICAiT0siOiAiQWRvcyIsCisgICAgIlRhcmdldDoiOiAiSGVsYnVydWE6IiwKKyAgICAiVVJMOiI6ICJVUkwtYToiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvZmEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL2ZhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNzQ4OGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL2ZhLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIsCisgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICLYp9mB2LLZiNiv2YYgLyDZiNuM2LHYp9uM2LQg2YTbjNmG2qkiLAorICAgICJPSyI6ICLYqNmE2YciLAorICAgICJUYXJnZXQ6IjogItmH2K/ZgSIsCisgICAgIlVSTDoiOiAiVVJMOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9maS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvZmkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI1NTJiOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvZmkuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUGVydXV0YSIsCisgICAgIk9LIjogIkh5dsOka3N5IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9mci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTE5OGZmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9mci5qcwpAQCAtMCwwICsxLDMxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICJDb25maXJtZXotdm91cyBsYSBzdXBwcmVzc2lvbiBkZSBjZSBsaWVuID8iLAorICAgICJDYW5jZWwiOiAiQW5udWxlciIsCisgICAgIkVtYWlsIEFkZHJlc3M6IjogIkFkcmVzc2UgZW1haWwiLAorICAgICJFbWFpbCBMaW5rIjogIkxpZW4gZW1haWwiLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSW5zw6lyZXIgLyBNb2RpZmllciB1biBsaWVuIiwKKyAgICAiTWVzc2FnZSBUZW1wbGF0ZToiOiAiTWVzc2FnZSIsCisgICAgIk5hbWU6IjogIk5vbSIsCisgICAgIk5ldyBXaW5kb3ciOiAiTm91dmVsbGUgZmVuw6p0cmUiLAorICAgICJPSyI6ICJPSyIsCisgICAgIk9yZGluYXJ5IExpbmsiOiAiTGllbiBzdGFuZGFyZCIsCisgICAgIlBvcHVwIFdpbmRvdyI6ICJGZW7DqnRyZSBwb3B1cCIsCisgICAgIlJlbW92ZSBMaW5rIjogIlN1cHByaW1lciIsCisgICAgIlNhbWUgV2luZG93IChqdW1wIG91dCBvZiBmcmFtZXMpIjogIk3Dqm1lIGZlbsOqdHJlIChzb3J0IGRlcyBmcmFtZXMpIiwKKyAgICAiU2l6ZToiOiAiVGFpbGxlIiwKKyAgICAiU3ViamVjdDoiOiAiU3VqZXQiLAorICAgICJUYXJnZXQ6IjogIkNpYmxlIiwKKyAgICAiVVJMIExpbmsiOiAiTGllbiBVUkwiLAorICAgICJVUkw6IjogIlVSTDoiLAorICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiVm91cyBkZXZleiBzw6lsZWN0aW9ubmVyIHVuIHRleHRlIGF2YW50IGRlIGNyw6llciB1biBub3V2ZWF1IGxpZW4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvaGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzN2I1NzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL2hlLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIteR15nXmNeV15wiLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAi15TXldeh16Mv16nXoNeUINen15nXqdeV16giLAorICAgICJPSyI6ICLXkNeZ16nXldeoIiwKKyAgICAiVGFyZ2V0OiI6ICLXmdei15M6IiwKKyAgICAiVVJMOiI6ICJVUkw6IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL2h1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9odS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWU0OTczCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9odS5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImh1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJNw6lnc2VtIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIkhpdmF0a296w6FzIEJlc3rDunLDoXNhL03Ds2Rvc8OtdMOhc2EiLAorICAgICJPSyI6ICJSZW5kYmVuIiwKKyAgICAiVGFyZ2V0OiI6ICJDw6lsOiIsCisgICAgIlVSTDoiOiAiVVJMOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9pdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvaXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUyNWFjZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvaXQuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJpdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIkluc2VyaXNjaS9tb2RpZmljYSBsaW5rIiwKKyAgICAiT0siOiAiT0siLAorICAgICJUYXJnZXQ6IjogIlRhcmdldDoiLAorICAgICJVUkw6IjogIlVSTDoiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYmZjNzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL2phLmpzCkBAIC0wLDAgKzEsMzcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiamEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIuacrOW9k+OBq+OBk+OBruODquODs+OCr+OCkuWJiumZpOOBl+OBvuOBmeOBiz8iLAorICAgICJDYW5jZWwiOiAi5Lit5q2iIiwKKyAgICAiRW1haWwgQWRkcmVzczoiOiAi44Ki44OJ44Os44K5OiIsCisgICAgIkVtYWlsIExpbmsiOiAiReODoeODvOODq+ODquODs+OCryIsCisgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICLjg6rjg7Pjgq/jga7mjL/lhaUv5L+u5q2jIiwKKyAgICAiTG9jYXRpb24gQmFyOiI6ICLjgqLjg4njg6zjgrnjg5Djg7wiLAorICAgICJNZW51IEJhcjoiOiAi44Oh44OL44Ol44O8IiwKKyAgICAiTWVzc2FnZSBUZW1wbGF0ZToiOiAi5pys5paH6Zub5b2iOiIsCisgICAgIk5hbWU6IjogIuWQjeWJjToiLAorICAgICJOZXcgV2luZG93IjogIuaWsOOBl+OBhOOCpuOCo+ODs+ODieOCpiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiT3JkaW5hcnkgTGluayI6ICLmqJnmupbjg6rjg7Pjgq8iLAorICAgICJQb3B1cCBXaW5kb3ciOiAi44Od44OD44OX44Ki44OD44OX44Km44Kj44Oz44OJ44KmIiwKKyAgICAiUmVtb3ZlIExpbmsiOiAi44Oq44Oz44Kv5YmK6ZmkIiwKKyAgICAiUmVzaXplYWJsZToiOiAi44Oq44K144Kk44K6IiwKKyAgICAiU2FtZSBXaW5kb3cgKGp1bXAgb3V0IG9mIGZyYW1lcykiOiAi5ZCM5LiA44Km44Kj44Oz44OJ44KmICjjg5Xjg6zjg7zjg6DmnIDkuIrkvY0pIiwKKyAgICAiU2Nyb2xsYmFyczoiOiAi44K544Kv44Ot44O844OrIiwKKyAgICAiU2l6ZToiOiAi44K144Kk44K6OiIsCisgICAgIlN0YXR1cyBCYXI6IjogIuOCueODhuODvOOCv+OCueODkOODvCIsCisgICAgIlN1YmplY3Q6IjogIuS7tuWQjToiLAorICAgICJUYXJnZXQ6IjogIuOCv+ODvOOCsuODg+ODiDoiLAorICAgICJUb29sYmFyOiI6ICLjg4Tjg7zjg6vjg5Djg7wiLAorICAgICJVUkwgTGluayI6ICJVUkzjg6rjg7Pjgq8iLAorICAgICJVUkw6IjogIlVSTDoiLAorICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAi44Oq44Oz44Kv44KS5L2c5oiQ44GZ44KL44Gr44Gv44OG44Kt44K544OI44KS6YG45oqe44GZ44KL5b+F6KaB44GM44GC44KK44G+44GZIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL2xjX2Jhc2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZiNzMxNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDU1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgIihweCkiOiAiIiwKKyAgICAiQW5jaG9yLUxpbmsiOiAiIiwKKyAgICAiQW5jaG9yOiI6ICIiLAorICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiIiwKKyAgICAiQ2FuY2VsIjogIiIsCisgICAgIkVtYWlsIEFkZHJlc3M6IjogIiIsCisgICAgIkVtYWlsIExpbmsiOiAiIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIiIsCisgICAgIkxvY2F0aW9uIEJhcjoiOiAiIiwKKyAgICAiTWVudSBCYXI6IjogIiIsCisgICAgIk1lc3NhZ2UgVGVtcGxhdGU6IjogIiIsCisgICAgIk5hbWU6IjogIiIsCisgICAgIk5ldyBXaW5kb3ciOiAiIiwKKyAgICAiT0siOiAiIiwKKyAgICAiT3JkaW5hcnkgTGluayI6ICIiLAorICAgICJQb3B1cCBXaW5kb3ciOiAiIiwKKyAgICAiUG9wdXBXaW5kb3ciOiAiIiwKKyAgICAiUmVtb3ZlIExpbmsiOiAiIiwKKyAgICAiUmVzaXplYWJsZToiOiAiIiwKKyAgICAiU2FtZSBXaW5kb3cgKGp1bXAgb3V0IG9mIGZyYW1lcykiOiAiIiwKKyAgICAiU2Nyb2xsYmFyczoiOiAiIiwKKyAgICAiU2hvd3MgT24gSG92ZXIiOiAiIiwKKyAgICAiU2l6ZToiOiAiIiwKKyAgICAiU3RhdHVzIEJhcjoiOiAiIiwKKyAgICAiU3ViamVjdDoiOiAiIiwKKyAgICAiVGFyZ2V0OiI6ICIiLAorICAgICJUaXRsZToiOiAiIiwKKyAgICAiVG9vbGJhcjoiOiAiIiwKKyAgICAiVVJMIExpbmsiOiAiIiwKKyAgICAiVVJMOiI6ICIiLAorICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvbHQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL2x0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYjE0NmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL2x0LmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIsCisgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJJZMSXdGkvTW9kaWZpa3VvdGkiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlRhcmdldDoiOiAiVGFyZ2V0OiIsCisgICAgIlVSTDoiOiAiVVJMOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9sdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvbHYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzZDVkMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvbHYuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXRjZWx0IiwKKyAgICAiT0siOiAiTGFiaSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9uYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3ZmMwZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvbmIuanMKQEAgLTAsMCArMSwyMSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJuYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8iOiAiRXIgZHUgc2lra2VyIHDDpSBhdCBkdSB2aWwgZmplcm5lIGxlbmtlbj8iLAorICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIlJlZGlnZXIgbGVua2UiLAorICAgICJOYW1lOiI6ICJOYXZuIiwKKyAgICAiT0siOiAiT0siLAorICAgICJTaXplOiI6ICJTdMO4cnJlbHNlIiwKKyAgICAiVGFyZ2V0OiI6ICJNw6VsOiIsCisgICAgIlVSTDoiOiAiQWRyZXNzZToiLAorICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiRHUgbcOlIG1hcmtlcmUgdGVrc3QgZWxsZXIgZXQgYmlsZGUgZsO4ciBkdSBrYW4gbGFnZSBlbiBsZW5rZS4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YjhmODIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL25sLmpzCkBAIC0wLDAgKzEsMjEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlbW92ZSB0aGlzIGxpbms/IjogIldpbHQgdSBkZXplIGxpbmsgd2Vya2VsaWprIHZlcndpamRlcmVuPyIsCisgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSHlwZXJsaW5rIGludm9lZ2VuL2FhbnBhc3NlbiIsCisgICAgIk5hbWU6IjogIk5hYW1lIiwKKyAgICAiT0siOiAiT0siLAorICAgICJTaXplOiI6ICJHcm9vdHRlOiIsCisgICAgIlRhcmdldDoiOiAiRG9lbDoiLAorICAgICJVUkw6IjogIlVSTDoiLAorICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiU2VsZWN0ZWVyIGRlIHRla3N0IHdlbGtlIGdlbGlua3QgbW9ldCB3b3JkZW4uIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL3BsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9wbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2JmZGFiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9wbC5qcwpAQCAtMCwwICsxLDMxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInBsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICJOYSBwZXdubyBjaGNlc3ogdXN1bsSFxIcgb2Rub8WbbmlrPyIsCisgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICJFbWFpbCBBZGRyZXNzOiI6ICJBZHJlcyBlLW1haWwiLAorICAgICJFbWFpbCBMaW5rIjogIkxpbmsgZG8gZS1tYWlsYSIsCisgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJXc3Rhdy9lZHl0dWogb2Rub8WbbmlrIiwKKyAgICAiTWVzc2FnZSBUZW1wbGF0ZToiOiAiU3phYmxvbiB3aWFkbW/Fm2NpOiIsCisgICAgIk5hbWU6IjogIk5hendhOiIsCisgICAgIk5ldyBXaW5kb3ciOiAiTm93ZSBva25vIiwKKyAgICAiT0siOiAiT0siLAorICAgICJPcmRpbmFyeSBMaW5rIjogIlp3eWvFgnkgb2Rub8WbbmlrIiwKKyAgICAiUG9wdXAgV2luZG93IjogIk9raWVua28gcG9wLXVwIiwKKyAgICAiUmVtb3ZlIExpbmsiOiAiVVNVxYMgT0ROT8WaTklLIiwKKyAgICAiU2FtZSBXaW5kb3cgKGp1bXAgb3V0IG9mIGZyYW1lcykiOiAiVG8gc2FtbyBva25vICh3eXNrb2N6IHogcmFtZWspIiwKKyAgICAiU2l6ZToiOiAiUm96bWlhcjoiLAorICAgICJTdWJqZWN0OiI6ICJUZW1hdDoiLAorICAgICJUYXJnZXQ6IjogIk9rbm8gZG9jZWxvd2U6IiwKKyAgICAiVVJMIExpbmsiOiAiQWRyZXMgVVJMIiwKKyAgICAiVVJMOiI6ICJVUkw6IiwKKyAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIlphem5hY3ogdGVrc3QgcHJ6ZWQgZG9kYW5pZW0gb2Rub8WbbmlrYS4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZGM1YmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMzkgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQW5jaG9yLUxpbmsiOiAiTGluay3Dgm5jb3JhIiwKKyAgICAiQW5jaG9yOiI6ICLDgm5jb3JhOiIsCisgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyI6ICJWb2PDqiB0ZW0gY2VydGV6YSBxdWUgZGVzZWphIHJlbW92ZXIgZXN0ZSBsaW5rPyIsCisgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCisgICAgIkVtYWlsIEFkZHJlc3M6IjogIkVuZGVyZcOnbyBkZSBFLW1haWw6IiwKKyAgICAiRW1haWwgTGluayI6ICJMaW5rIGRlIEUtbWFpbCIsCisgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJJbnNlcmlyL01vZGlmaWNhciBMaW5rIiwKKyAgICAiTG9jYXRpb24gQmFyOiI6ICJCYXJyYSBkZSBMb2NhbGl6YcOnw6NvOiIsCisgICAgIk1lbnUgQmFyOiI6ICJCYXJyYSBkZSBNZW51OiIsCisgICAgIk1lc3NhZ2UgVGVtcGxhdGU6IjogIk1vZGVsbyBkZSBNZW5zYWdlbToiLAorICAgICJOYW1lOiI6ICJOb21lOiIsCisgICAgIk5ldyBXaW5kb3ciOiAiTm92YSBKYW5lbGEiLAorICAgICJPSyI6ICJPSyIsCisgICAgIk9yZGluYXJ5IExpbmsiOiAiTGluayBDb211bSIsCisgICAgIlBvcHVwIFdpbmRvdyI6ICJKYW5lbGEgUG9wLXVwIiwKKyAgICAiUmVtb3ZlIExpbmsiOiAiUmVtb3ZlciBMaW5rIiwKKyAgICAiUmVzaXplYWJsZToiOiAiUmVkaW1lbnNpb27DoXZlbCIsCisgICAgIlNhbWUgV2luZG93IChqdW1wIG91dCBvZiBmcmFtZXMpIjogIk1lc21hIEphbmVsYSAoU2FpciBmb3JhIGRvcyBmcmFtZXMpIiwKKyAgICAiU2Nyb2xsYmFyczoiOiAiQmFycmEgZGUgUm9sYWdlbToiLAorICAgICJTaXplOiI6ICJUYW1hbmhvOiIsCisgICAgIlN0YXR1cyBCYXI6IjogIkJhcnJhIGRlIEluZm9ybWHDp8O1ZXM6IiwKKyAgICAiU3ViamVjdDoiOiAiQXNzdW50bzoiLAorICAgICJUYXJnZXQ6IjogIkRlc3Rpbm86IiwKKyAgICAiVG9vbGJhcjoiOiAiQmFycmEgZGUgRmVycmFtZW50YXM6IiwKKyAgICAiVVJMIExpbmsiOiAiVVJMIGRvIExpbmsiLAorICAgICJVUkw6IjogIlVSTDoiLAorICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiVm9jw6ogcHJlY2lzYSBzZWxlY2lvbmFyIGFsZ3VtIHRleHRvIGFudGVzIGRlIGNyaWFyIHVtIG5vdm8gbGluay4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvcm8uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL3JvLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzODJhNjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL3JvLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicm8iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlJlbnVuxaPEgyIsCisgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJJbnNlcmVhesSDL21vZGlmY8SDIGxpbmsiLAorICAgICJPSyI6ICJBY2NlcHTEgyIsCisgICAgIlRhcmdldDoiOiAixaJpbnRhOiIsCisgICAgIlVSTDoiOiAiVVJMOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9ydS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY4ODNhZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvcnUuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIiwKKyAgICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogItCS0YHRgtCw0LLQutCwL9C40LfQvNC10L3QtdC90LjQtSDRgdGB0YvQu9C60LgiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlRhcmdldDoiOiAi0J7RgtC60YDRi9Cy0LDRgtGMINCyINC+0LrQvdC1OiIsCisgICAgIlVSTDoiOiAiVVJMOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9zaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvc2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI1ZDMyMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvc2guanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUG9uacWhdGkiLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiRG9kYWovcHJvbWVuaSBMaW5rIiwKKyAgICAiT0siOiAiT0siLAorICAgICJUYXJnZXQ6IjogIk90dm9yaSB1OiIsCisgICAgIlVSTDoiOiAiVVJMOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9zaS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvc2kuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY3NDg5MgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvc2kuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUHJla2xpxI1pIiwKKyAgICAiT0siOiAiViByZWR1IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL3NyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9zci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDY2MGJiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy9zci5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIsCisgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICLQtNC+0LTQsNGYL9C/0YDQvtC80LXQvdC4INC70LjQvdC6IiwKKyAgICAiT0siOiAiT0siLAorICAgICJUYXJnZXQ6IjogItCe0YLQstC+0YDQuCDRgzoiLAorICAgICJVUkw6IjogItCj0KDQmzoiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvc3YuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL3N2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMTNlNjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL3N2LmpzCkBAIC0wLDAgKzEsMTggQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3YiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJSZWRpZ2VyYSBsw6RuayIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiU2l6ZToiOiAiU3RvcmxlayIsCisgICAgIlRhcmdldDoiOiAiTcOlbDoiLAorICAgICJVUkw6IjogIlPDtmt2w6RnOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvdGguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRhOWM4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL2xhbmcvdGguanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0aCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwKKyAgICAiT0siOiAi4LiV4LiB4Lil4LiHIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL3RyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy90ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmMyZmQyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy90ci5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLEsHB0YWwiLAorICAgICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiQmHEn2xhbnTEsSBla2xlL2RlxJ9pxZ90aXIiLAorICAgICJPSyI6ICJUYW1hbSIsCisgICAgIlRhcmdldDoiOiAiSGVkZWY6IiwKKyAgICAiVVJMOiI6ICJVUkw6IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9sYW5nL3ZuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy92bi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTA4YmUzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGFuZy92bi5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInZuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJI4buneSIsCisgICAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJUaMOqbS9DaOG7iW5oIHPhu61hIMSRxrDhu51uZyBk4bqrbiIsCisgICAgIk9LIjogIsSQ4buTbmcgw70iLAorICAgICJUYXJnZXQ6IjogIk7GoWkgaGnhu4duIHRo4buLOiIsCisgICAgIlVSTDoiOiAiVVJMOiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGluay1waWNrZXIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9saW5rLXBpY2tlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDJiZDFmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvbGluay1waWNrZXIuanMKQEAgLTAsMCArMSwxMzggQEAKKworICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOm5vVGFicz10cnVlOnRhYlNpemU9MjppbmRlbnRTaXplPTI6LS0KKyAgICAtLSAgWGluaGEgKGlzIG5vdCBodG1sQXJlYSkgLSBodHRwOi8veGluaGEuZ29nby5jby5uei8KKyAgICAtLQorICAgIC0tICBVc2Ugb2YgWGluaGEgaXMgZ3JhbnRlZCBieSB0aGUgdGVybXMgb2YgdGhlIGh0bWxBcmVhIExpY2Vuc2UgKGJhc2VkIG9uCisgICAgLS0gIEJTRCBsaWNlbnNlKSAgcGxlYXNlIHJlYWQgbGljZW5zZS50eHQgaW4gdGhpcyBwYWNrYWdlIGZvciBkZXRhaWxzLgorICAgIC0tCisgICAgLS0gIFhpbmhhIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIHdvcmsgYnkgTWloYWkgQmF6b24gd2hpY2ggaXM6CisgICAgLS0gICAgICBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNCBkeW5hcmNoLmNvbS4KKyAgICAtLSAgICAgIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIGludGVyYWN0aXZldG9vbHMuY29tLCBpbmMuCisgICAgLS0gICAgICBUaGlzIGNvcHlyaWdodCBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlLgorICAgIC0tCisgICAgLS0gICRIZWFkVVJMOiBodHRwOi8vc3ZuLnhpbmhhLndlYmZhY3Rpb25hbC5jb20vdHJ1bmsvbW9kdWxlcy9EaWFsb2dzL2lubGluZS1kaWFsb2cuanMgJAorICAgIC0tICAkTGFzdENoYW5nZWREYXRlOiAyMDA3LTAxLTI0IDAzOjI2OjA0ICsxMzAwIChXZWQsIDI0IEphbiAyMDA3KSAkCisgICAgLS0gICRMYXN0Q2hhbmdlZFJldmlzaW9uOiA2OTQgJAorICAgIC0tICAkTGFzdENoYW5nZWRCeTogZ29nbyAkCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorICAgIAorLyoqIFRoZSBMaW5rIFBpY2tlciBpcyBhIHNlbWktc3RhbmRhbG9uZSBpbnN0YW5jZSBvZiB0aGUgTGlua2VyIHBsdWdpbiB3aGljaCBjYW4gYmUgdXNlZAorICogIGZvciBwcm92aWRpbmcgYSBMaW5rZXIgc3R5bGUgYnJvd3NlIGRpYWxvZyBmb3Igc2VsZWN0aW5nIHVybHMgd2hpY2ggYXJlIHRoZW4gCisgKiAgcmV0dXJuZWQgaW50byBhIHN0YW5kYXJkIGZvcm0gZmllbGQuCisgKgorICogIFVzYWdlOiAKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIHt7eworIAorICAgIDwhLS0gSWYgeW91IGFyZSBhbHJlYWR5IHVzaW5nIFhpbmhhIG9uIHRoZSBwYWdlIHlvdSBzaG91bGQgYWxyZWFkeSBoYXZlIHRoaXMgc3R1ZmYuLi4gLS0+CisgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+CisgICAgICBfZWRpdG9yX3VybCA9ICcvdXJsL3RvL3hpbmhhJzsKKyAgICAgIF9lZGl0b3JfbGFuZyA9ICJlbiI7IAorICAgIDwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii91cmwvdG8veGluaGEvWGluaGFDb3JlLmpzIj48L3NjcmlwdD4gICAgCisgICAgCisgICAgPCEtLSBUaGVyZSBhcmUgZm91ciBmaWxlcyByZXF1aXJlZCBmb3IgbGluayBwaWNrZXIsIGluIHRoaXMgb3JkZXIuIC0tPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii91cmwvdG8veGluaGEvbW9kdWxlcy9EaWFsb2cvWGluaGFEaWFsb2cuanMiPjwvc2NyaXB0PiAgICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3VybC90by94aW5oYS9tb2R1bGVzL0RpYWxvZy9EZXRhY2hlZERpYWxvZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3VybC90by94aW5oYS9wbHVnaW5zL0xpbmtlci9MaW5rZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii91cmwvdG8veGluaGEvcGx1Z2lucy9MaW5rZXIvbGluay1waWNrZXIuanMiPjwvc2NyaXB0PgorICAgIAorICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgorICAgICAgd2l0aChMaW5rUGlja2VyLkNvbmZpZy5wcm90b3R5cGUpCisgICAgICB7CisgICAgICAgICA8P3BocAorICAgICAgICAgIC8vIFNlZSBMaW5rZXIgZm9yIG1vcmUgcG9zc2libGUgY29uZmlnIGl0ZW1zCisgICAgICAgICAgJG15Q29uZmlnID0gYXJyYXkKKyAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgJ2RpcicgICAgICAgID0+ICcvcGF0aC90by9iYXNlJyAsIAorICAgICAgICAgICAgICAndXJsJyAgICAgICAgPT4gJy91cmwvdG8vYmFzZScgLCAgICAgICAgICAgICAgCisgICAgICAgICAgICApOworICAgICAgICAgICB4aW5oYV9wYXNzX3RvX3BocF9iYWNrZW5kKCRteUNvbmZpZyk7CisgICAgICAgICAgPz4KKyAgICAgIH0KKyAgICAKKyAgICAgIFhpbmhhLl9hZGRFdmVudCh3aW5kb3csICdsb2FkJywgZnVuY3Rpb24oKQorICAgICAgICB7IAorICAgICAgICAgIG5ldyBMaW5rUGlja2VyKAorICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXJsJyksICAvLyB0aGlzIGlzIHRoZSBmaWVsZCB0aGF0IHlvdSB3YW50IHRvIHBpY2sgbGlua3MgZm9yLCBpdCBnZXRzIGEgQnJvd3NlIGJ1dHRvbgorICAgICAgICAgICBuZXcgTGlua1BpY2tlci5Db25maWcoKSAgICAgICAgICAKKyAgICAgICAgICApOworICAgICAgICB9KTsKKyAgICA8L3NjcmlwdD4KKyAgICAKKyAgICA8Zm9ybT4KKyAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0idXJsIiAvPgorICAgICAgPGRpdiBpZD0iZGlhbG9nSGVyZSIgc3R5bGU9IndpZHRoOjY0MHB4OyBoZWlnaHQ6NDgwcHg7Ij48L2Rpdj4KKyAgICA8L2Zvcm0+CisgICAgCisgKiAgfX19CisgKiAgIAorICovCisgCitmdW5jdGlvbiBMaW5rUGlja2VyKGZpZWxkLCBjb25maWcpCit7CisgIHRoaXMuZmllbGQgPSBmaWVsZDsKKyAgCisgIHZhciBsaW5rUGlja2VyID0gdGhpczsKKyAgCisgIC8vIFdlIHVzZSBhIHRlbXBvYXJ5IGFuY2hvciB0YWcgdG8gcGFzcyB0byB0aGUgTGlua2VyIHBsdWdpbgorICB0aGlzLnRtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsgIAorICAKKyAgLy8gV2Ugd2lsbCB1c2UgdGhlIGRldGFjaGVkIGRpYWxvZyBhbHdheXMKKyAgY29uZmlnLmRpYWxvZyA9IExpbmtQaWNrZXIuRGlhbG9nOworICBjb25maWcuY2FuU2V0VGFyZ2V0ID0gZmFsc2U7IAorICBjb25maWcuY2FuUmVtb3ZlTGluayA9IGZhbHNlOworICAKKyAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgZHVtbXkgdmVyc2lvbnMgb2Ygc3R1ZmYgdGhhdCB3b3VsZCBub3JtYWxseSBiZSBpbiBhIFhpbmhhIG9iamVjdAorICB0aGlzLnNlbGVjdGlvbkVtcHR5ID0gZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9OworICB0aGlzLmdldFNlbGVjdGlvbiAgID0gZnVuY3Rpb24oKSB7IHJldHVybiBudWxsOyB9OyAgCisgIHRoaXMuc2VsZWN0Tm9kZUNvbnRlbnRzID0gZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9OyAgCisgIHRoaXMuZ2V0SFRNTCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gJyc7IH0KKyAgdGhpcy5kaXNhYmxlVG9vbGJhciA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfQorICB0aGlzLmVuYWJsZVRvb2xiYXIgID0gZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9CisgIHRoaXMuX2RvYyA9IHsKKyAgICBleGVjQ29tbWFuZDogZnVuY3Rpb24oKSB7IHJldHVybiBmYWxzZTsgfSwKKyAgICBnZXRFbGVtZW50c0J5VGFnTmFtZTogZnVuY3Rpb24oKSB7IHJldHVybiBbIF07IH0KKyAgfSAgCisgIHRoaXMuY29uZmlnID0geyAKKyAgICBMaW5rZXI6IGNvbmZpZywgCisgICAgYnRuTGlzdDogeyB9LCAKKyAgICByZWdpc3RlckJ1dHRvbjogZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9LCAKKyAgICBhZGRUb29sYmFyRWxlbWVudDogZnVuY3Rpb24oKSB7IH0KKyAgfQorICAKKyAgLy8gQWRkIGEgYnV0dG9uIG5leHQgdG8gdGhlIGZpZWxkCisgIHZhciBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOyBidXR0b24udHlwZT0nYnV0dG9uJzsKKyAgYnV0dG9uLnZhbHVlID0gJ0Jyb3dzZSc7CisgIGJ1dHRvbi5vbmNsaWNrID0gZnVuY3Rpb24oKSB7IGxpbmtQaWNrZXIuZWRpdExpbmsoKTsgcmV0dXJuIGZhbHNlOyB9IAorICBmaWVsZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShidXR0b24sZmllbGQubmV4dFNpYmxpbmcpOyAgCisgICAgCisgIC8vIFdlIGNvLW9wdCB1cGRhdGVUb29sYmFyIGFzIHRoZSBwb2ludCBhdCB3aGljaCB3ZSBjb3B5IHRoZSB0ZW1wb3JhcnkgYW5jaG9yIGFjcm9zcyB0byB0aGUgZmllbGQKKyAgLy8gTGlua2VyIGNhbGxzIHRoaXMgYXMgdGhlIGxhc3Qgc3RlcCwgc28gcGVyZmVjdC4KKyAgdGhpcy51cGRhdGVUb29sYmFyICA9IGZ1bmN0aW9uKCkgeyBsaW5rUGlja2VyLmZpZWxkLnZhbHVlID0gdGhpcy5maXhSZWxhdGl2ZUxpbmtzKGxpbmtQaWNrZXIudG1wQW5jaG9yLmhyZWYpOyB9OworICAgIAorICB0aGlzLmxpbmtlciA9IG5ldyBMaW5rZXIodGhpcyk7ICAKKyAgdGhpcy5saW5rZXIub25HZW5lcmF0ZU9uY2UoKTsKK30KKworTGlua1BpY2tlci5wcm90b3R5cGUuZWRpdExpbmsgPSBmdW5jdGlvbigpCit7CisgIHRoaXMudG1wQW5jaG9yLmhyZWYgPSB0aGlzLmZpZWxkLnZhbHVlOworICB0aGlzLmxpbmtlci5fY3JlYXRlTGluayh0aGlzLnRtcEFuY2hvcik7Cit9CisKK0xpbmtQaWNrZXIucHJvdG90eXBlLmZpeFJlbGF0aXZlTGlua3MgPSBmdW5jdGlvbihocmVmKSAKK3sgIAorICByZXR1cm4gaHJlZi5yZXBsYWNlKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYucmVwbGFjZSggL14oaHR0cHM/OlwvXC9bXlwvXSopKC4qKSQvaSwgJyQxJyApLCAnJyk7Cit9CisKK0xpbmtQaWNrZXIuRGlhbG9nID0gZnVuY3Rpb24obGlua1BpY2tlciwgaHRtbCwgbG9jYWxpemVyLCBzaXplLCBvcHRpb25zKSAKK3sgCisgIExpbmtQaWNrZXIuRGlhbG9nLnBhcmVudENvbnN0cnVjdG9yLmNhbGwodGhpcywgaHRtbCwgbG9jYWxpemVyLCBzaXplLCBvcHRpb25zKTsgCit9CisKK1hpbmhhLmV4dGVuZChMaW5rUGlja2VyLkRpYWxvZywgWGluaGEuRGV0YWNoZWREaWFsb2cpOworCitMaW5rUGlja2VyLkNvbmZpZyA9IGZ1bmN0aW9uKCkgeyB9CitMaW5rUGlja2VyLkNvbmZpZy5wcm90b3R5cGUgPSBYaW5oYS5Db25maWcucHJvdG90eXBlLkxpbmtlcjsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9wbHVnaW5NZXRob2RzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvcGx1Z2luTWV0aG9kcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWViNTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaW5rZXIvcGx1Z2luTWV0aG9kcy5qcwpAQCAtMCwwICsxLDY0MiBAQAorTGlua2VyLnByb3RvdHlwZS5fY3JlYXRlTGluayA9IGZ1bmN0aW9uKGEpCit7CisgIGlmICghdGhpcy5fZGlhbG9nKQorICB7CisgICAgdGhpcy5fZGlhbG9nID0gbmV3IExpbmtlci5EaWFsb2codGhpcyk7CisgIH0KKyAgCisgIGlmKCFhICYmIHRoaXMuZWRpdG9yLnNlbGVjdGlvbkVtcHR5KHRoaXMuZWRpdG9yLmdldFNlbGVjdGlvbigpKSkKKyAgeyAgICAgICAKKyAgICBhbGVydCh0aGlzLl9sYygiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIikpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHZhciBpbnB1dHMgPQorICB7CisgICAgdHlwZTogICAgICd1cmwnLAorICAgIGhyZWY6ICAgICAnaHR0cDovL3d3dy5leGFtcGxlLmNvbS8nLAorICAgIHRpdGxlOiAgICB0aGlzLl9sYygnU2hvd3MgT24gSG92ZXInKSwKKyAgICB0YXJnZXQ6ICAgJycsCisgICAgcF93aWR0aDogICcnLAorICAgIHBfaGVpZ2h0OiAnJywKKyAgICBwX29wdGlvbnM6IFsnbWVudWJhcj1ubycsJ3Rvb2xiYXI9eWVzJywnbG9jYXRpb249bm8nLCdzdGF0dXM9bm8nLCdzY3JvbGxiYXJzPXllcycsJ3Jlc2l6ZWFibGU9eWVzJ10sCisgICAgdG86ICAgICAgICdhbGljZUBleGFtcGxlLmNvbScsCisgICAgc3ViamVjdDogICcnLAorICAgIGJvZHk6ICAgICAnJywKKyAgICBhbmNob3I6ICAgJycKKyAgfTsKKyAgCisgIGlmKGEgJiYgYS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2EnKQorICB7CisgICAgdmFyIGhyZWYgPXRoaXMuZWRpdG9yLmZpeFJlbGF0aXZlTGlua3MoYS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSk7CisgICAgdmFyIG0gPSBocmVmLm1hdGNoKC9ebWFpbHRvOiguKkBbXj8mXSopKFw/KC4qKSk/JC8pOworICAgIHZhciBhbmNob3IgPSBocmVmLm1hdGNoKC9eIyguKikkLyk7CisgICAgdmFyIHRpdGxlID0gYS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJyk7CisgICAgCisgICAgaWYobSkKKyAgICB7CisgICAgICAvLyBNYWlsdG8KKyAgICAgIGlucHV0cy50eXBlID0gJ21haWx0byc7CisgICAgICBpbnB1dHMudG8gPSBtWzFdOworICAgICAgaWYobVszXSkKKyAgICAgIHsKKyAgICAgICAgdmFyIGFyZ3MgID0gbVszXS5zcGxpdCgnJicpOworICAgICAgICBmb3IodmFyIHggPSAwOyB4PGFyZ3MubGVuZ3RoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICB2YXIgaiA9IGFyZ3NbeF0ubWF0Y2goLyhzdWJqZWN0fGJvZHkpPSguKikvKTsKKyAgICAgICAgICBpZihqKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlucHV0c1tqWzFdXSA9IGRlY29kZVVSSUNvbXBvbmVudChqWzJdKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYW5jaG9yKQorICAgIHsKKyAgICAgIC8vQW5jaG9yLUxpbmsKKyAgICAgIGlucHV0cy50eXBlID0gJ2FuY2hvcic7CisgICAgICBpbnB1dHMuYW5jaG9yID0gYW5jaG9yWzFdOworICAgICAgCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBpZihhLmdldEF0dHJpYnV0ZSgnb25jbGljaycpICYmIFN0cmluZyhhLmdldEF0dHJpYnV0ZSgnb25jbGljaycpKS5sZW5ndGgpCisgICAgICB7CisgICAgICAgIHZhciBtID0gYS5nZXRBdHRyaWJ1dGUoJ29uY2xpY2snKS5tYXRjaCgvd2luZG93XC5vcGVuXChccyp0aGlzXC5ocmVmXHMqLFxzKicoW2EtejAtOV9dKiknXHMqLFxzKicoW2EtejAtOV89LF0qKSdccypcKS9pKTsKKworICAgICAgICAvLyBQb3B1cCBXaW5kb3cKKyAgICAgICAgaW5wdXRzLmhyZWYgICA9IGhyZWYgPyBocmVmIDogJyc7CisgICAgICAgIGlucHV0cy50aXRsZSA9IHRpdGxlOworICAgICAgICBpbnB1dHMudGFyZ2V0ID0gJ3BvcHVwJzsKKyAgICAgICAgaW5wdXRzLnBfbmFtZSA9IG1bMV07CisgICAgICAgIGlucHV0cy5wX29wdGlvbnMgPSBbIF07CisKKworICAgICAgICB2YXIgYXJncyA9IG1bMl0uc3BsaXQoJywnKTsKKyAgICAgICAgZm9yKHZhciB4ID0gMDsgeCA8IGFyZ3MubGVuZ3RoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICB2YXIgaSA9IGFyZ3NbeF0ubWF0Y2goLyh3aWR0aHxoZWlnaHQpPShbMC05XSspLyk7CisgICAgICAgICAgaWYoaSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpbnB1dHNbJ3BfJyArIGlbMV1dID0gcGFyc2VJbnQoaVsyXSk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBpbnB1dHMucF9vcHRpb25zLnB1c2goYXJnc1t4XSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8vIE5vcm1hbAorICAgICAgICBpbnB1dHMuaHJlZiAgID0gaHJlZjsKKyAgICAgICAgaW5wdXRzLnRhcmdldCA9IGEudGFyZ2V0OworICAgICAgICBpbnB1dHMudGl0bGUgPSB0aXRsZTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICB2YXIgbGlua2VyID0gdGhpczsKKworICAvLyBJZiB3ZSBhcmUgbm90IGVkaXRpbmcgYSBsaW5rLCB0aGVuIHdlIG5lZWQgdG8gaW5zZXJ0IGxpbmtzIG5vdyB1c2luZyBleGVjQ29tbWFuZAorICAvLyBiZWNhdXNlIGZvciBzb21lIHJlYXNvbiBJRSBpcyBsb3NpbmcgdGhlIHNlbGVjdGlvbiBiZXR3ZWVuIG5vdyBhbmQgd2hlbiBkb09LIGlzCisgIC8vIGNvbXBsZXRlLiAgSSBndWVzcyBiZWNhdXNlIHdlIGFyZSBkZWZvY3VzaW5nIHRoZSBpZnJhbWUgd2hlbiB3ZSBjbGljayBzdHVmZiBpbiB0aGUKKyAgLy8gbGlua2VyIGRpYWxvZy4KKworICB0aGlzLmEgPSBhOyAvLyBXaHkgZG9lc24ndCBhIGdldCBpbnRvIHRoZSBjbG9zdXJlIGJlbG93LCBidXQgaWYgSSBzZXQgaXQgYXMgYSBwcm9wZXJ0eSB0aGVuIGl0J3MgZmluZT8KKworICB2YXIgZG9PSyA9IGZ1bmN0aW9uKCkKKyAgeworICAgIC8vaWYobGlua2VyLmEpIGFsZXJ0KGxpbmtlci5hLnRhZ05hbWUpOworICAgIHZhciBhID0gbGlua2VyLmE7CisKKyAgICB2YXIgdmFsdWVzID0gbGlua2VyLl9kaWFsb2cuaGlkZSgpOworICAgIHZhciBhdHIgPQorICAgIHsKKyAgICAgIGhyZWY6ICcnLAorICAgICAgdGFyZ2V0OicnLAorICAgICAgdGl0bGU6JycsCisgICAgICBvbmNsaWNrOicnCisgICAgfTsKKyAgICAKKyAgICBpZih2YWx1ZXMudGl0bGUgPT0gbGlua2VyLl9sYygnU2hvd3MgT24gSG92ZXInKSkgCisgICAgeworICAgICAgdmFsdWVzLnRpdGxlID0gJyc7CisgICAgfQorICAgIAorICAgIGlmKHZhbHVlcy50eXBlID09ICd1cmwnKQorICAgIHsKKyAgICAgaWYodmFsdWVzLmhyZWYpCisgICAgIHsKKyAgICAgICBhdHIuaHJlZiA9IHZhbHVlcy5ocmVmLnRyaW0oKTsKKyAgICAgICBhdHIudGFyZ2V0ID0gdmFsdWVzLnRhcmdldDsKKyAgICAgICBhdHIudGl0bGUgPSB2YWx1ZXMudGl0bGU7CisgICAgICAgaWYodmFsdWVzLnRhcmdldCA9PSAncG9wdXAnKQorICAgICAgIHsKKworICAgICAgICAgaWYodmFsdWVzLnBfd2lkdGgpCisgICAgICAgICB7CisgICAgICAgICAgIHZhbHVlcy5wX29wdGlvbnMucHVzaCgnd2lkdGg9JyArIHZhbHVlcy5wX3dpZHRoKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmKHZhbHVlcy5wX2hlaWdodCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgdmFsdWVzLnBfb3B0aW9ucy5wdXNoKCdoZWlnaHQ9JyArIHZhbHVlcy5wX2hlaWdodCk7CisgICAgICAgICB9CisgICAgICAgICBhdHIub25jbGljayA9ICdpZih3aW5kb3cucGFyZW50ICYmIHdpbmRvdy5wYXJlbnQuWGluaGEpe3JldHVybiBmYWxzZX13aW5kb3cub3Blbih0aGlzLmhyZWYsIFwnJyArICh2YWx1ZXMucF9uYW1lLnJlcGxhY2UoL1teYS16MC05X10vaSwgJ18nKSkgKyAnXCcsIFwnJyArIHZhbHVlcy5wX29wdGlvbnMuam9pbignLCcpICsgJ1wnKTtyZXR1cm4gZmFsc2U7JzsKKyAgICAgICB9CisgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZih2YWx1ZXMudHlwZSA9PSAnYW5jaG9yJykKKyAgICB7CisgICAgICBpZih2YWx1ZXMuYW5jaG9yKQorICAgICAgeworICAgICAgICBhdHIuaHJlZiA9IHZhbHVlcy5hbmNob3IudmFsdWU7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBpZih2YWx1ZXMudG8pCisgICAgICB7CisgICAgICAgIGF0ci5ocmVmID0gJ21haWx0bzonICsgdmFsdWVzLnRvOworICAgICAgICBpZih2YWx1ZXMuc3ViamVjdCkgYXRyLmhyZWYgKz0gJz9zdWJqZWN0PScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWVzLnN1YmplY3QpOworICAgICAgICBpZih2YWx1ZXMuYm9keSkgICAgYXRyLmhyZWYgKz0gKHZhbHVlcy5zdWJqZWN0ID8gJyYnIDogJz8nKSArICdib2R5PScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWVzLmJvZHkpOworICAgICAgfQorICAgIH0KKworICAgIGlmIChhdHIuaHJlZikgYXRyLmhyZWYgPSBhdHIuaHJlZi50cmltKCk7CisKKyAgICBpZihhICYmIGEudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdhJykKKyAgICB7CisgICAgICBpZighYXRyLmhyZWYpCisgICAgICB7CisgICAgICAgIGlmKGNvbmZpcm0obGlua2VyLl9kaWFsb2cuX2xjKCdBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gcmVtb3ZlIHRoaXMgbGluaz8nKSkpCisgICAgICAgIHsKKyAgICAgICAgICB2YXIgcCA9IGEucGFyZW50Tm9kZTsKKyAgICAgICAgICB3aGlsZShhLmhhc0NoaWxkTm9kZXMoKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBwLmluc2VydEJlZm9yZShhLnJlbW92ZUNoaWxkKGEuY2hpbGROb2Rlc1swXSksIGEpOworICAgICAgICAgIH0KKyAgICAgICAgICBwLnJlbW92ZUNoaWxkKGEpOworICAgICAgICAgIGxpbmtlci5lZGl0b3IudXBkYXRlVG9vbGJhcigpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvLyBVcGRhdGUgdGhlIGxpbmsKKyAgICAgICAgZm9yKHZhciBpIGluIGF0cikKKyAgICAgICAgeworICAgICAgICAgIGlmKFN0cmluZyhhdHJbaV0pLmxlbmd0aCA+IDApCisgICAgICAgICAgeworICAgICAgICAgICAgYS5zZXRBdHRyaWJ1dGUoaSwgYXRyW2ldKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGEucmVtb3ZlQXR0cmlidXRlKGkpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gSWYgd2UgY2hhbmdlIGEgbWFpbHRvIGxpbmsgaW4gSUUgZm9yIHNvbWUgaGl0aGVydG8gdW5rbm93bgorICAgICAgICAvLyByZWFzb24gaXQgc2V0cyB0aGUgaW5uZXJIVE1MIG9mIHRoZSBsaW5rIHRvIGJlIHRoZSAKKyAgICAgICAgLy8gaHJlZiBvZiB0aGUgbGluay4gIFN0dXBpZCBJRS4KKyAgICAgICAgaWYoWGluaGEuaXNfaWUpCisgICAgICAgIHsKKyAgICAgICAgICBpZigvbWFpbHRvOihbXj88Pl0qKShcP1tePF0qKT8kL2kudGVzdChhLmlubmVySFRNTCkpCisgICAgICAgICAgeworICAgICAgICAgICAgYS5pbm5lckhUTUwgPSBSZWdFeHAuJDE7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBpZighYXRyLmhyZWYpIHJldHVybiB0cnVlOworCisgICAgICAvLyBJbnNlcnQgYSBsaW5rLCB3ZSBsZXQgdGhlIGJyb3dzZXIgZG8gdGhpcywgd2UgZmlndXJlIGl0IGtub3dzIGJlc3QKKyAgICAgIHZhciB0bXAgPSBYaW5oYS51bmlxKCdodHRwOi8vd3d3LmV4YW1wbGUuY29tL0xpbmsnKTsKKyAgICAgIGxpbmtlci5lZGl0b3IuX2RvYy5leGVjQ29tbWFuZCgnY3JlYXRlbGluaycsIGZhbHNlLCB0bXApOworCisgICAgICAvLyBGaXggdGhlbSB1cAorICAgICAgdmFyIGFuY2hvcnMgPSBsaW5rZXIuZWRpdG9yLl9kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2EnKTsKKyAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhbmNob3JzLmxlbmd0aDsgaSsrKQorICAgICAgeworICAgICAgICB2YXIgYW5jaG9yID0gYW5jaG9yc1tpXTsKKyAgICAgICAgaWYoYW5jaG9yLmhyZWYgPT0gdG1wKQorICAgICAgICB7CisgICAgICAgICAgLy8gRm91bmQgb25lLgorICAgICAgICAgIGlmICghYSkgYSA9IGFuY2hvcjsKKyAgICAgICAgICBmb3IodmFyIGogaW4gYXRyKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmKFN0cmluZyhhdHJbal0pLmxlbmd0aCA+IDApCisgICAgICAgICAgICAgIGFuY2hvci5zZXRBdHRyaWJ1dGUoaiwgYXRyW2pdKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgbGlua2VyLmVkaXRvci5zZWxlY3ROb2RlQ29udGVudHMoYSk7CisgICAgbGlua2VyLmVkaXRvci51cGRhdGVUb29sYmFyKCk7CisgIH07CisKKyAgdGhpcy5fZGlhbG9nLnNob3coaW5wdXRzLCBkb09LKTsKKworfTsKKworTGlua2VyLnByb3RvdHlwZS5fZ2V0U2VsZWN0ZWRBbmNob3IgPSBmdW5jdGlvbigpCit7CisgIHZhciBzZWwgID0gdGhpcy5lZGl0b3IuZ2V0U2VsZWN0aW9uKCk7CisgIHZhciBybmcgID0gdGhpcy5lZGl0b3IuY3JlYXRlUmFuZ2Uoc2VsKTsKKyAgdmFyIGEgICAgPSB0aGlzLmVkaXRvci5hY3RpdmVFbGVtZW50KHNlbCk7CisgIGlmKGEgIT0gbnVsbCAmJiBhLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnYScpCisgIHsKKyAgICByZXR1cm4gYTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBhID0gdGhpcy5lZGl0b3IuX2dldEZpcnN0QW5jZXN0b3Ioc2VsLCAnYScpOworICAgIGlmKGEgIT0gbnVsbCkKKyAgICB7CisgICAgICByZXR1cm4gYTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIG51bGw7Cit9OworCitMaW5rZXIuRGlhbG9nX2RUcmVlcyA9IFsgXTsKKworTGlua2VyLkRpYWxvZyA9IGZ1bmN0aW9uIChsaW5rZXIpCit7CisgIHZhciAgbERpYWxvZyA9IHRoaXM7CisgIHRoaXMuRGlhbG9nX254dGlkID0gMDsKKyAgdGhpcy5saW5rZXIgPSBsaW5rZXI7CisgIHRoaXMuaWQgPSB7IH07IC8vIFRoaXMgd2lsbCBiZSBmaWxsZWQgYmVsb3cgd2l0aCBhIHJlcGxhY2UsIG5pZnR5CisKKyAgdGhpcy5yZWFkeSA9IGZhbHNlOworCisgIHRoaXMuZGlhbG9nID0gZmFsc2U7CisKKyAgLy8gbG9hZCB0aGUgZFRyZWUgc2NyaXB0CisgIHRoaXMuX3ByZXBhcmVEaWFsb2coKTsKKworfTsKKworTGlua2VyLkRpYWxvZy5wcm90b3R5cGUuX3ByZXBhcmVEaWFsb2cgPSBmdW5jdGlvbigpCit7CisgIHZhciBsRGlhbG9nID0gdGhpczsKKyAgdmFyIGxpbmtlciA9IHRoaXMubGlua2VyOworCisgIHZhciBmaWxlcyA9IHRoaXMubGlua2VyLmZpbGVzOworCisgIC8vIE5vdyB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZCwgc28gd2UgY2FuIGJ1aWxkIHRoZSBkaWFsb2cuCisgIGlmKCFsaW5rZXIubENvbmZpZy5kaWFsb2cgJiYgWGluaGEuRGlhbG9nKSBsaW5rZXIubENvbmZpZy5kaWFsb2cgPSBYaW5oYS5EaWFsb2c7CisgIAorICB2YXIgZGlhbG9nID0gdGhpcy5kaWFsb2cgPSBuZXcgbGlua2VyLmxDb25maWcuZGlhbG9nKGxpbmtlci5lZGl0b3IsIExpbmtlci5odG1sLCAnTGlua2VyJyx7d2lkdGg6NjAwLGhlaWdodDo0MDB9KTsKKyAgdmFyIGRUcmVlTmFtZSA9IFhpbmhhLnVuaXEoJ2RUcmVlXycpOworCisgIHRoaXMuZFRyZWUgPSBuZXcgZFRyZWUoZFRyZWVOYW1lLCBYaW5oYS5nZXRQbHVnaW5EaXIoIkxpbmtlciIpICsgJy9kVHJlZS8nKTsKKyAgZXZhbChkVHJlZU5hbWUgKyAnID0gdGhpcy5kVHJlZScpOworCisgIHRoaXMuZFRyZWUuYWRkKHRoaXMuRGlhbG9nX254dGlkKyssIC0xLCBsaW5rZXIubENvbmZpZy50cmVlQ2FwdGlvbiAsIG51bGwsIGxpbmtlci5sQ29uZmlnLnRyZWVDYXB0aW9uKTsKKyAgdGhpcy5tYWtlTm9kZXMoZmlsZXMsIDApOworCisgIC8vIFB1dCBpdCBpbgorICB2YXIgZGRUcmVlID0gdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ2RUcmVlJyk7CisgIC8vZGRUcmVlLmlubmVySFRNTCA9IHRoaXMuZFRyZWUudG9TdHJpbmcoKTsKKyAgZGRUcmVlLmlubmVySFRNTCA9ICcnOworLy8gIGRkVHJlZS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7CisvLyAgZGRUcmVlLnN0eWxlLmxlZnQgPSAxICsgJ3B4JzsKKyAvLyBkZFRyZWUuc3R5bGUudG9wID0gIDAgKyAncHgnOworICBkZFRyZWUuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7CisgIGRkVHJlZS5zdHlsZS5oZWlnaHQgPSAnMzAwcHgnOworICBpZiAoIFhpbmhhLmlzX2llICkKKyAgeworICAgIGRkVHJlZS5zdHlsZS5zdHlsZUZsb2F0ID0gImxlZnQiOworICB9CisgIGVsc2UKKyAgeworICAgIGRkVHJlZS5zdHlsZS5jc3NGbG9hdCA9ICJsZWZ0IjsKKyAgfQorICBkZFRyZWUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3doaXRlJzsKKyAgdGhpcy5kZFRyZWUgPSBkZFRyZWU7CisgIAorICB0aGlzLmRUcmVlLl9saW5rZXJfcHJlbWFkZSA9IHRoaXMuZFRyZWUudG9TdHJpbmcoKTsKKworICB2YXIgb3B0aW9ucyA9IHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdvcHRpb25zJyk7CisgIC8vb3B0aW9ucy5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7CisgIC8vb3B0aW9ucy5zdHlsZS50b3AgICAgICA9IDAgICArICdweCc7CisgIC8vb3B0aW9ucy5zdHlsZS5yaWdodCAgICA9IDAgICArICdweCc7CisgIG9wdGlvbnMuc3R5bGUud2lkdGggICAgPSAzMjAgKyAncHgnOworICBvcHRpb25zLnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nOworCisgIC8vIEhvb2t1cCB0aGUgcmVzaXplcgorICB0aGlzLmRpYWxvZy5yb290RWxlbS5zdHlsZS5wYWRkaW5nQm90dG9tID0iMCI7CisgIHRoaXMuZGlhbG9nLm9ucmVzaXplID0gZnVuY3Rpb24oKQorICAgIHsKKyAgICAgIHZhciBoID0gcGFyc2VJbnQoZGlhbG9nLmhlaWdodCkgLSBkaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ2gxJykub2Zmc2V0SGVpZ2h0OworICAgICAgdmFyIHcgPSBwYXJzZUludChkaWFsb2cud2lkdGgpICAtIDMzMCA7CisKKyAgICAgIC8vIEFuIGVycm9yIGlzIHRocm93biB3aXRoIElFIHdoZW4gdHJ5aW5nIHRvIHNldCBhIG5lZ2F0aXZlIHdpZHRoIG9yIGEgbmVnYXRpdmUgaGVpZ2h0CisgICAgICAvLyBCdXQgcGVyaGFwcyBhIHdpZHRoIC8gaGVpZ2h0IG9mIDAgaXMgbm90IHRoZSBtaW5pbXVtIHJlcXVpcmVkIHdlIG5lZWQgdG8gc2V0CisgICAgICBpZiAodzwwKSB3ID0gMDsKKyAgICAgIGlmIChoPDApIGggPSAwOworICAgICAgLy9vcHRpb25zLnN0eWxlLmhlaWdodCA9CisgICAgICBsRGlhbG9nLmRkVHJlZS5zdHlsZS5oZWlnaHQgPSBoICsgJ3B4JzsKKyAgICAgIGxEaWFsb2cuZGRUcmVlLnN0eWxlLndpZHRoICA9IHcgKyAncHgnOworICAgIH0KKworICAvLyBTZXQgdGhlIG9uY2xpY2sgaGFuZGxlcnMgZm9yIHRoZSBsaW5rIHR5cGUgcmFkaW8gYnV0dG9ucworICB2YXIgc2VsZiA9IHRoaXM7CisgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCd0eXBlX3VybCcpLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKKyAgICBzZWxmLnNob3dPcHRpb25zRm9yVHlwZSgndXJsJyk7CisgIH07CisgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCd0eXBlX21haWx0bycpLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKKyAgICBzZWxmLnNob3dPcHRpb25zRm9yVHlwZSgnbWFpbHRvJyk7CisgIH07CisgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCd0eXBlX2FuY2hvcicpLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKKyAgICBzZWxmLnNob3dPcHRpb25zRm9yVHlwZSgnYW5jaG9yJyk7CisgIH07CisKKyAgdmFyIGhpZGVQb3B1cE9wdGlvbnMgPSBmdW5jdGlvbigpIHsKKyAgICBzZWxmLnNob3dPcHRpb25zRm9yVGFyZ2V0KCdub25lJykKKyAgfTsKKyAgdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ25vVGFyZ2V0UmFkaW8nKS5vbmNsaWNrID0gaGlkZVBvcHVwT3B0aW9uczsKKyAgdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ3NhbWVXaW5kb3dSYWRpbycpLm9uY2xpY2sgPSBoaWRlUG9wdXBPcHRpb25zOworICB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgnbmV3V2luZG93UmFkaW8nKS5vbmNsaWNrID0gaGlkZVBvcHVwT3B0aW9uczsKKyAgdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ3BvcHVwV2luZG93UmFkaW8nKS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7CisgICAgc2VsZi5zaG93T3B0aW9uc0ZvclRhcmdldCgncG9wdXAnKTsKKyAgfTsKKworICB0aGlzLnJlYWR5ID0gdHJ1ZTsKKyAgZGRUcmVlID0gbnVsbDsKKyAgWGluaGEuZnJlZUxhdGVyKGxEaWFsb2csICdkZFRyZWUnKTsKKyAgb3B0aW9ucyA9IG51bGw7Cit9OworCitMaW5rZXIuRGlhbG9nLnByb3RvdHlwZS5tYWtlTm9kZXMgPSBmdW5jdGlvbihmaWxlcywgcGFyZW50KQoreyAKKyAgZm9yKHZhciBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKQorICB7CisgICAgaWYodHlwZW9mIGZpbGVzW2ldID09ICdzdHJpbmcnKQorICAgIHsKKyAgICAgIHRoaXMuZFRyZWUuYWRkKHRoaXMuRGlhbG9nX254dGlkKyssIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgIGZpbGVzW2ldLnJlcGxhY2UoL14uKlwvLywgJycpLAorICAgICAgICAgICAgICAgICAgICAgJ2phdmFzY3JpcHQ6ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCcnICsgdGhpcy5kaWFsb2cuaWQuaHJlZiArICdcJylbMF0udmFsdWU9ZGVjb2RlVVJJQ29tcG9uZW50KFwnJyArIGVuY29kZVVSSUNvbXBvbmVudChmaWxlc1tpXSkgKyAnXCcpO2RvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwnJyArIHRoaXMuZGlhbG9nLmlkLnR5cGUgKyAnXCcpWzBdLmNsaWNrKCk7ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCcnICsgdGhpcy5kaWFsb2cuaWQuaHJlZiArICdcJylbMF0uZm9jdXMoKTt2b2lkKDApOycsCisgICAgICAgICAgICAgICAgICAgICBmaWxlc1tpXSk7CisgICAgfQorICAgIGVsc2UgaWYodHlwZW9mIGZpbGVzW2ldPT0ib2JqZWN0IiAmJiBmaWxlc1tpXSAmJiB0eXBlb2YgZmlsZXNbaV0ubGVuZ3RoPT09Im51bWJlciIpIC8vIHRoZXJlIHNlZW1zIHRvIGJlIGEgc3RyYW5nZSBidWcgaW4gSUUgdGhhdCByZXF1aXJlcyB0aGlzIGNvbXBsaWNhdGVkIGNoZWNrLCBzZWUgIzExOTcKKyAgICB7CisgICAgICB2YXIgaWQgPSB0aGlzLkRpYWxvZ19ueHRpZCsrOworICAgICAgdGhpcy5kVHJlZS5hZGQoaWQsIHBhcmVudCwgZmlsZXNbaV1bMF0ucmVwbGFjZSgvXi4qXC8vLCAnJyksIG51bGwsIGZpbGVzW2ldWzBdKTsKKyAgICAgIHRoaXMubWFrZU5vZGVzKGZpbGVzW2ldWzFdLCBpZCk7CisgICAgfQorICAgIGVsc2UgaWYodHlwZW9mIGZpbGVzW2ldID09ICdvYmplY3QnKQorICAgIHsKKyAgICAgIHZhciBpZCA9IHRoaXMuRGlhbG9nX254dGlkKys7ICAgICAKKyAgICAgIGlmKGZpbGVzW2ldLnRpdGxlKSB2YXIgdGl0bGUgPSBmaWxlc1tpXS50aXRsZTsKKyAgICAgIGVsc2UgaWYoZmlsZXNbaV0udXJsKSB2YXIgdGl0bGUgPSBmaWxlc1tpXS51cmwucmVwbGFjZSgvXi4qXC8vLCAnJyk7CisgICAgICBlbHNlIHZhciB0aXRsZSA9ICJubyB0aXRsZSBkZWZpbmVkIjsKKyAgICAgIGlmKGZpbGVzW2ldLnVybCkgdmFyIGxpbmsgPSAnamF2YXNjcmlwdDpkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcJycgKyB0aGlzLmRpYWxvZy5pZC5ocmVmICsgJ1wnKVswXS52YWx1ZT1kZWNvZGVVUklDb21wb25lbnQoXCcnICsgZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVzW2ldLnVybCkgKyAnXCcpO2RvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKFwnJyArIHRoaXMuZGlhbG9nLmlkLnR5cGUgKyAnXCcpWzBdLmNsaWNrKCk7ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoXCcnICsgdGhpcy5kaWFsb2cuaWQuaHJlZiArICdcJylbMF0uZm9jdXMoKTt2b2lkKDApOyc7CisgICAgICBlbHNlIHZhciBsaW5rID0gJyc7CisgICAgICAKKyAgICAgIHRoaXMuZFRyZWUuYWRkKGlkLCBwYXJlbnQsIHRpdGxlLCBsaW5rLCB0aXRsZSk7CisgICAgICBpZihmaWxlc1tpXS5jaGlsZHJlbikgeworICAgICAgICB0aGlzLm1ha2VOb2RlcyhmaWxlc1tpXS5jaGlsZHJlbiwgaWQpOworICAgICAgfQorICAgIH0KKyAgfQorfTsKKworTGlua2VyLkRpYWxvZy5wcm90b3R5cGUuX2xjID0gTGlua2VyLnByb3RvdHlwZS5fbGM7CisKK0xpbmtlci5EaWFsb2cucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbihpbnB1dHMsIG9rLCBjYW5jZWwpCit7CisgIGlmKCF0aGlzLnJlYWR5KQorICB7CisgICAgdmFyIGxEaWFsb2cgPSB0aGlzOworICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge2xEaWFsb2cuc2hvdyhpbnB1dHMsb2ssY2FuY2VsKTt9LDEwMCk7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYodGhpcy5kZFRyZWUuaW5uZXJIVE1MID09ICcnKQorICB7CisgICAgdGhpcy5kZFRyZWUuaW5uZXJIVE1MID0gdGhpcy5kVHJlZS5fbGlua2VyX3ByZW1hZGU7CisgIH0KKyAgCisgIGlmKCF0aGlzLmxpbmtlci5sQ29uZmlnLmNhblNldFRhcmdldCkKKyAgeworICAgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCd0YXJnZXRfb3B0aW9ucycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7ICAgIAorICB9CisgIAorICB0aGlzLnNob3dPcHRpb25zRm9yVHlwZShpbnB1dHMudHlwZSk7CisgIHRoaXMuc2hvd09wdGlvbnNGb3JUYXJnZXQoaW5wdXRzLnRhcmdldCk7CisgIAorICB2YXIgYW5jaG9yID0gdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ2FuY2hvcicpOworICBmb3IodmFyIGk9YW5jaG9yLmxlbmd0aDtpPj0wO2ktLSkgeworICAgIGFuY2hvcltpXSA9IG51bGw7CisgIH0KKworICB2YXIgaHRtbCA9IHRoaXMubGlua2VyLmVkaXRvci5nZXRIVE1MKCk7ICAKKyAgdmFyIGFuY2hvcnMgPSBuZXcgQXJyYXkoKTsKKworICB2YXIgbSA9IGh0bWwubWF0Y2goLzxhW14+XStuYW1lPSIoW14iXSspIi9naSk7CisgIGlmKG0pCisgIHsKKyAgICBmb3IoaT0wO2k8bS5sZW5ndGg7aSsrKQorICAgIHsKKyAgICAgICAgdmFyIG4gPSBtW2ldLm1hdGNoKC9uYW1lPSIoW14iXSspIi9pKTsKKyAgICAgICAgaWYoIWFuY2hvcnMuY29udGFpbnMoblsxXSkpIGFuY2hvcnMucHVzaChuWzFdKTsKKyAgICB9CisgIH0KKyAgbSA9IGh0bWwubWF0Y2goL2lkPSIoW14iXSspIi9naSk7CisgIGlmKG0pCisgIHsKKyAgICBmb3IoaT0wO2k8bS5sZW5ndGg7aSsrKQorICAgIHsKKyAgICAgICAgbiA9IG1baV0ubWF0Y2goL2lkPSIoW14iXSspIi9pKTsKKyAgICAgICAgaWYoIWFuY2hvcnMuY29udGFpbnMoblsxXSkpIGFuY2hvcnMucHVzaChuWzFdKTsKKyAgICB9CisgIH0KKyAgCisgIGZvcihpPTA7aTxhbmNob3JzLmxlbmd0aDtpKyspCisgIHsKKyAgICB2YXIgb3B0ID0gbmV3IE9wdGlvbihhbmNob3JzW2ldLCcjJythbmNob3JzW2ldLGZhbHNlLChpbnB1dHMuYW5jaG9yID09IGFuY2hvcnNbaV0pKTsKKyAgICBhbmNob3JbYW5jaG9yLmxlbmd0aF0gPSBvcHQ7CisgIH0KKworICAvLyBDb25maWd1cmF0aW9uIGZvciBkaXNhYmxpbmcgdGhlIG1haWwgbGluayBmdW5jdGlvbmFsaXR5LgorICBpZih0aGlzLmxpbmtlci5sQ29uZmlnLmRpc2FibGVNYWlsdG8pCisgIHsKKyAgICB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgnbWFpbHRvZmllbGRzZXQnKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICB9CisKKyAgLy8gQ29uZmlndXJhdGlvbiBmb3IgaGlkaW5nIHRoZSBhbmNob3IgZnVuY3Rpb25hbGl0eS4gIEFsc28sIG5vIG5lZWQgdG8gc2hvdworICAvLyB0aGUgVUkgaWYgdGhlcmUgYXJlIG5vIGFuY2hvcnMgcHJlc2VudCBpbiB0aGUgZG9jdW1lbnQuCisgIGlmKGFuY2hvci5sZW5ndGg9PTAgfHwgdGhpcy5saW5rZXIubENvbmZpZy5kaXNhYmxlQW5jaG9ycykKKyAgeworICAgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdhbmNob3JmaWVsZHNldCcpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisKKyAgICAvLyBJZiB3ZSBkaXNhYmxlIHRoZSBvdGhlciB0d28gZmllbGRzZXRzLCB3ZSdsbCBoaWRlIHRoZSAobm93KSB1bm5lY2Vzc2FyeQorICAgIC8vIHJhZGlvIGJ1dHRvbi4KKyAgICBpZiAodGhpcy5saW5rZXIubENvbmZpZy5kaXNhYmxlTWFpbHRvKQorICAgIHsKKyAgICAgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCd0eXBlJykuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICB9CisgIH0KKworICAvLyBEaXNhYmxlIGxpbmsgdGFyZ2V0cyAoYWxsIHRhcmdldHMgYXZhaWxhYmxlIGJ5IGRlZmF1bHQpCisgIHZhciBkaXNhYmxlZFRhcmdldHMgPSB0aGlzLmxpbmtlci5sQ29uZmlnLmRpc2FibGVUYXJnZXRUeXBlczsgCisgIGlmICh0eXBlb2YgZGlzYWJsZWRUYXJnZXRzID09ICd1bmRlZmluZWQnKQorICB7CisgICAgZGlzYWJsZWRUYXJnZXRzID0gW107CisgIH0gCisgIGVsc2UgaWYgKHR5cGVvZiBkaXNhYmxlZFRhcmdldHMgPT0gJ3N0cmluZycpCisgIHsKKyAgICBkaXNhYmxlZFRhcmdldHMgPSBbZGlzYWJsZWRUYXJnZXRzXTsKKyAgfQorICBmb3IgKHZhciBpPTA7IGk8ZGlzYWJsZWRUYXJnZXRzLmxlbmd0aDsgaSsrKQorICB7CisgICAgdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoZGlzYWJsZWRUYXJnZXRzW2ldKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICB9CisgIGlmIChkaXNhYmxlZFRhcmdldHMubGVuZ3RoID09IDMpIC8vIG9ubHkgb25lIHRhcmdldCBvcHRpb24gaXMgdmlzaWJsZQorICB7CisgICAgaWYgKGRpc2FibGVkVGFyZ2V0cy5jb250YWlucygncG9wdXBXaW5kb3cnKSkKKyAgICB7CisgICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gc2hvdyBhbnl0aGluZywgc28gaGlkZSB0aGUgZW50aXJlIGRpdgorICAgICAgdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ3RhcmdldF9vcHRpb25zJykuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8vIE9ubHkgcG9wdXBzIGFyZSBhbGxvd2VkLCBoaWRlIHRoZSByYWRpbyBidXR0b24KKyAgICAgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdwb3B1cFdpbmRvd1JhZGlvJykuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICAgIHRoaXMuc2hvd09wdGlvbnNGb3JUYXJnZXQoJ3BvcHVwJyk7CisgICAgfQorICB9CisKKyAgdmFyIGVuYWJsZWRUYXJnZXRzID0gbmV3IEFycmF5KCk7CisgIGlmICghZGlzYWJsZWRUYXJnZXRzLmNvbnRhaW5zKCdub1RhcmdldCcpKQorICB7CisgICAgZW5hYmxlZFRhcmdldHMucHVzaCgnbm9UYXJnZXRSYWRpbycpOworICB9CisgIGlmICghZGlzYWJsZWRUYXJnZXRzLmNvbnRhaW5zKCdzYW1lV2luZG93JykpCisgIHsKKyAgICBlbmFibGVkVGFyZ2V0cy5wdXNoKCdzYW1lV2luZG93UmFkaW8nKTsKKyAgfQorICBpZiAoIWRpc2FibGVkVGFyZ2V0cy5jb250YWlucygnbmV3V2luZG93JykpCisgIHsKKyAgICBlbmFibGVkVGFyZ2V0cy5wdXNoKCduZXdXaW5kb3dSYWRpbycpOworICB9CisgIGlmICghZGlzYWJsZWRUYXJnZXRzLmNvbnRhaW5zKCdwb3B1cFdpbmRvdycpKQorICB7CisgICAgZW5hYmxlZFRhcmdldHMucHVzaCgncG9wdXBXaW5kb3dSYWRpbycpOworICB9CisKKyAgLy8gaWYgd2UncmUgbm90IGVkaXRpbmcgYW4gZXhpc3RpbmcgbGluaywgaGlkZSB0aGUgcmVtb3ZlIGxpbmsgYnV0dG9uCisgIGlmIChpbnB1dHMuaHJlZiA9PSAnaHR0cDovL3d3dy5leGFtcGxlLmNvbS8nICYmIGlucHV0cy50byA9PSAnYWxpY2VAZXhhbXBsZS5jb20nKSB7IAorICAgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdjbGVhcicpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgIH0KKyAgZWxzZSB7IC8vIAorICAgIHZhciBjbGVhckJ0biA9IHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdjbGVhcicpOworICAgIGNsZWFyQnRuLnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICBpZiAob2spCisgICAgeworICAgICAgY2xlYXJCdG4ub25jbGljayA9IGZ1bmN0aW9uKCkgeyBsRGlhbG9nLnJlbW92ZUxpbmsob2spOyB9OworICAgIH0KKyAgfQorICAKKyAgLy8gSXQgY291bGQgYmUgZm9yY2VkIG5vdCBiZSBhYmxlIHRvIGJlIHJlbW92ZWQsIGFzIGlzIHRoZSBjYXNlIHdpdGggbGluay1waWNrZXIuanMKKyAgaWYoIXRoaXMubGlua2VyLmxDb25maWcuY2FuUmVtb3ZlTGluaykKKyAgeworICAgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdjbGVhcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgIH0KKyAgCisgIC8vIENvbm5lY3QgdGhlIE9LIGFuZCBDYW5jZWwgYnV0dG9ucworICB2YXIgZGlhbG9nID0gdGhpcy5kaWFsb2c7CisgIHZhciBsRGlhbG9nID0gdGhpczsKKyAgaWYob2spCisgIHsKKyAgICB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgnb2snKS5vbmNsaWNrID0gb2s7CisgIH0KKyAgZWxzZQorICB7CisgICAgdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ29rJykub25jbGljayA9IGZ1bmN0aW9uKCkge2xEaWFsb2cuaGlkZSgpO307CisgIH0KKworICBpZihjYW5jZWwpCisgIHsKKyAgICB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgnY2FuY2VsJykub25jbGljayA9IGNhbmNlbDsKKyAgfQorICBlbHNlCisgIHsKKyAgICB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgnY2FuY2VsJykub25jbGljayA9IGZ1bmN0aW9uKCkgeyBsRGlhbG9nLmhpZGUoKX07CisgIH0KKworICAvLyBTaG93IHRoZSBkaWFsb2cKKyAgdGhpcy5saW5rZXIuZWRpdG9yLmRpc2FibGVUb29sYmFyKFsnZnVsbHNjcmVlbicsJ2xpbmtlciddKTsKKworICB0aGlzLmRpYWxvZy5zaG93KGlucHV0cyk7CisKKyAgLy8gSWYgd2Ugc2V0IHRoZSBkZWZhdWx0IHJhZGlvIGJ1dHRvbiAqYmVmb3JlKiB3ZSBjYWxsIGRpYWxvZy5zaG93KCkKKyAgLy8gaXQgZG9lc24nIHdvcmsuLi4KKyAgdmFyIHRhcmdldFNlbGVjdGVkID0gZmFsc2U7CisgIGZvciAodmFyIGk9MDsgaTxlbmFibGVkVGFyZ2V0cy5sZW5ndGg7IGkrKykKKyAgeworICAgIGlmICh0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZChlbmFibGVkVGFyZ2V0c1tpXSkuY2hlY2tlZCA9PSB0cnVlKQorICAgIHsKKyAgICAgIHRhcmdldFNlbGVjdGVkID0gdHJ1ZTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICAvLyBJZiBubyB0YXJnZXQgaXMgc2VsZWN0ZWQsIHNlbGVjdCB0aGUgZmlyc3Qgb25lIGJ5IGRlZmF1bHQKKyAgaWYgKCF0YXJnZXRTZWxlY3RlZCAmJiBlbmFibGVkVGFyZ2V0cy5sZW5ndGggPiAwKQorICB7CisgICAgdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoZW5hYmxlZFRhcmdldHNbMF0pLmNoZWNrZWQgPSB0cnVlOworICB9CisKKyAgLy8gSW5pdCB0aGUgc2l6ZXMKKyAgdGhpcy5kaWFsb2cub25yZXNpemUoKTsKK307CisKK0xpbmtlci5EaWFsb2cucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbigpCit7CisgIHRoaXMubGlua2VyLmVkaXRvci5lbmFibGVUb29sYmFyKCk7CisgIHJldHVybiB0aGlzLmRpYWxvZy5oaWRlKCk7Cit9OworCitMaW5rZXIuRGlhbG9nLnByb3RvdHlwZS5yZW1vdmVMaW5rID0gZnVuY3Rpb24oYXBwbHlGdW5jKQoreworICB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgnaHJlZicpLnZhbHVlID0gIiI7CisgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCd0bycpLnZhbHVlID0gIiI7CisKKyAgcmV0dXJuIGFwcGx5RnVuYygpOworfTsKKworTGlua2VyLkRpYWxvZy5wcm90b3R5cGUuc2hvd09wdGlvbnNGb3JUeXBlID0gZnVuY3Rpb24odHlwZSkKK3sKKyAgdmFyIHVybE9wdGlvbnMgPSB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgndXJsdGFibGUnKTsKKyAgdmFyIG1haWx0b09wdGlvbnMgPSB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgnbWFpbHRhYmxlJyk7CisgIHZhciBhbmNob3JPcHRpb25zID0gdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ2FuY2hvcnRhYmxlJyk7CisKKyAgaWYgKHR5cGUgPT0gJ2FuY2hvcicpCisgIHsKKyAgICBhbmNob3JPcHRpb25zLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgICB1cmxPcHRpb25zLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgbWFpbHRvT3B0aW9ucy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICB9CisgIGVsc2UgaWYgKHR5cGUgPT0gJ21haWx0bycpCisgIHsKKyAgICBtYWlsdG9PcHRpb25zLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgICB1cmxPcHRpb25zLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgYW5jaG9yT3B0aW9ucy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICB9CisgIGVsc2UgCisgIHsKKyAgICB1cmxPcHRpb25zLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgICBtYWlsdG9PcHRpb25zLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgYW5jaG9yT3B0aW9ucy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICB9Cit9OworCitMaW5rZXIuRGlhbG9nLnByb3RvdHlwZS5zaG93T3B0aW9uc0ZvclRhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCkKK3sKKyAgdmFyIHBvcHVwT3B0aW9ucyA9IHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdwb3B1cHRhYmxlJyk7CisgIHBvcHVwT3B0aW9ucy5zdHlsZS5kaXNwbGF5ID0gdGFyZ2V0ID09ICdwb3B1cCcgPyAnJyA6ICdub25lJzsKK307CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9zY2FuLnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlua2VyL3NjYW4ucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MWIwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpbmtlci9zY2FuLnBocApAQCAtMCwwICsxLDExNCBAQAorPD9waHAKKyAgICAvLyAvaG9tZS91c2VybmFtZS9mb28vcHVibGljX2h0bWwvYmFyCisgICAgJGRpciAgICAgICAgICA9IGRpcm5hbWUoX19GSUxFX18pLiIvLi4vLi4iOworICAgIAorICAgIC8vIGh0dHA6Ly9leGFtcGxlLmNvbS9iYXIgKG9yIHJlbGF0aXZlIHVybCwgb3Igc2VtaSBhYnNvbHV0ZSkKKyAgICAkdXJsICAgICAgID0gJyc7CisgICAgCisgICAgJGluY2x1ZGUgICAgICA9ICcvXC4ocGhwfHNodG1sfGh0bWx8aHRtfHNodG18Y2dpfHR4dHxkb2N8cGRmfHJ0Znx4bHN8Y3N2KSQvJzsKKyAgICAkZXhjbHVkZSAgICAgID0gJyc7CisgICAgJGRpcmluY2x1ZGUgICA9ICcnOworICAgICRkaXJleGNsdWRlICAgPSAnLyhefFwvKVsuX118aHRtbGFyZWEvJzsgLy8gRXhjbHVkZSB0aGUgaHRtbGFyZWEgdHJlZSBieSBkZWZhdWx0CisKKyAgICAvLyBOZXcgYmFja2VuZCBjb25maWcgZGF0YSBwYXNzaW5nCisgICAgLy8gIGlmIGRhdGEgd2FzIHBhc3NlZCB1c2luZyB4aW5oYV9wYXNzX3RvX2JhY2tlbmQoKSB3ZSBleHRyYWN0IGFuZCB1c2UgaXQKKyAgICAvLyAgYXMgdGhlIGl0ZW1zIGFib3ZlICAgIAorICAgIHJlcXVpcmVfb25jZShyZWFscGF0aChkaXJuYW1lKF9fRklMRV9fKSAuICcvLi4vLi4vY29udHJpYi9waHAteGluaGEucGhwJykpOworICAgIGlmKCRwYXNzZWRfZGF0YSA9IHhpbmhhX3JlYWRfcGFzc2VkX2RhdGEoKSkKKyAgICB7CisgICAgICBleHRyYWN0KCRwYXNzZWRfZGF0YSk7ICAgICAgCisgICAgfQorCisgICAgLy8gT2xkIGRlcHJlY2F0ZWQgYmFja2VuZCBjb25maWcgZGF0YSBwYXNzaW5nCisgICAgLy8gIG5vdCBkZXNjcmliZWQgYmVjYXVzZSB5b3Ugc2hvdWxkbid0IHVzZSBpdC4KKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAKKyAgICAkaGFzaCA9ICcnOworICAgIGZvcmVhY2goZXhwbG9kZSgnLCcsICdkaXIsaW5jbHVkZSxleGNsdWRlLGRpcmluY2x1ZGUsZGlyZXhjbHVkZScpIGFzICRrKQorICAgIHsKKyAgICAgIGlmKGlzc2V0KCRfUkVRVUVTVFska10pKQorICAgICAgeworICAgICAgICBpZihnZXRfbWFnaWNfcXVvdGVzX2dwYygpKQorICAgICAgICB7CisgICAgICAgICAgJF9SRVFVRVNUWyRrXSA9IHN0cmlwc2xhc2hlcygkX1JFUVVFU1RbJGtdKTsKKyAgICAgICAgfQorICAgICAgICAkaGFzaCAuPSAkayAuICc9JyAuICRfUkVRVUVTVFska107CisgICAgICAgICQkayA9ICRfUkVRVUVTVFska107CisgICAgICB9CisgICAgfQorCisgICAgaWYoJGhhc2gpCisgICAgeworICAgICAgc2Vzc2lvbl9zdGFydCgpOworICAgICAgaWYoIWlzc2V0KCRfU0VTU0lPTltzaGExKCRoYXNoKV0pKQorICAgICAgeworICAgICAgICA/PgorICAgICAgICBbIF07CisgICAgICAgIDw/cGhwCisgICAgICAgIGV4aXQ7CisgICAgICB9CisgICAgfQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBOZWl0aGVyIGRpciBub3IgdXJsIHNob3VsZCBoYXZlIHRyYWlsaW5nIHNsYXNoCisgICAgJGRpciA9IHByZWdfcmVwbGFjZSgnL1wvJC8nLCAnJywgJGRpcik7CisgICAgJHVybCA9IHByZWdfcmVwbGFjZSgnL1wvJC8nLCAnJywgJHVybCk7CisgICAgCisgICAgZnVuY3Rpb24gc2NhbigkZGlyLCAkZHVybCA9ICcnKQorICAgIHsKKyAgICAgIGdsb2JhbCAkaW5jbHVkZSwgJGV4Y2x1ZGUsICRkaXJpbmNsdWRlLCAkZGlyZXhjbHVkZTsKKyAgICAgIHN0YXRpYyAkc2VlbiA9IGFycmF5KCk7CisKKyAgICAgICRmaWxlcyA9IGFycmF5KCk7CisKKyAgICAgICRkaXIgPSByZWFscGF0aCgkZGlyKTsKKyAgICAgIGlmKGlzc2V0KCRzZWVuWyRkaXJdKSkKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuICRmaWxlczsKKyAgICAgIH0KKyAgICAgICRzZWVuWyRkaXJdID0gVFJVRTsKKyAgICAgICRkaCA9IEBvcGVuZGlyKCRkaXIpOworCisKKyAgICAgIHdoaWxlKCRkaCAmJiAoJGZpbGUgPSByZWFkZGlyKCRkaCkpKQorICAgICAgeworICAgICAgICBpZigkZmlsZVswXSAhPT0gJy4nKQorICAgICAgICB7CisgICAgICAgICAgJHBhdGggPSByZWFscGF0aCgkZGlyIC4gJy8nIC4gJGZpbGUpOworICAgICAgICAgICR1cmwgID0gJGR1cmwgLiAnLycgLiAkZmlsZTsKKworICAgICAgICAgIGlmKCgkZGlyaW5jbHVkZSAmJiAhcHJlZ19tYXRjaCgkZGlyaW5jbHVkZSwgJHVybCkpIHx8ICgkZGlyZXhjbHVkZSAmJiBwcmVnX21hdGNoKCRkaXJleGNsdWRlLCAkdXJsKSkpIGNvbnRpbnVlOworICAgICAgICAgIGlmKGlzX2RpcigkcGF0aCkpCisgICAgICAgICAgeworICAgICAgICAgICAgaWYoJHN1YmRpciA9IHNjYW4oJHBhdGgsICR1cmwpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAkZmlsZXNbXSA9IGFycmF5KCd1cmwnPT4kdXJsLCAnY2hpbGRyZW4nPT4kc3ViZGlyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZWlmKGlzX2ZpbGUoJHBhdGgpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCgkaW5jbHVkZSAmJiAhcHJlZ19tYXRjaCgkaW5jbHVkZSwgJHVybCkpIHx8ICgkZXhjbHVkZSAmJiBwcmVnX21hdGNoKCRleGNsdWRlLCAkdXJsKSkpIGNvbnRpbnVlOworICAgICAgICAgICAgJGZpbGVzW10gPSBhcnJheSgndXJsJz0+JHVybCk7CisgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIEBjbG9zZWRpcigkZGgpOworICAgICAgcmV0dXJuIGRpcnNvcnQoJGZpbGVzKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkaXJzb3J0KCRmaWxlcykKKyAgICB7CisgICAgICB1c29ydCgkZmlsZXMsICdkaXJjb21wJyk7CisgICAgICByZXR1cm4gJGZpbGVzOworICAgIH0KKworICAgIGZ1bmN0aW9uIGRpcmNvbXAoJGEsICRiKQorICAgIHsKKyAgICAgIGlmKGlzc2V0KCRhWydjaGlsZHJlbiddKSAmJiAhaXNzZXQoJGJbJ2NoaWxkcmVuJ10pKSByZXR1cm4gLTE7CisgICAgICBpZihpc3NldCgkYlsnY2hpbGRyZW4nXSkgJiYgIWlzc2V0KCRhWydjaGlsZHJlbiddKSkgcmV0dXJuIDE7CisgICAgICAKKyAgICAgIHJldHVybiBzdHJjbXAoc3RydG9sb3dlcigkYVsndXJsJ10pLCBzdHJ0b2xvd2VyKCRiWyd1cmwnXSkpOworICAgIH0KKyAgIAorICAgIGVjaG8geGluaGFfdG9fanMoc2NhbigkZGlyLCR1cmwpKTsKKz8+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RPcGVyYXRpb25zL0xpc3RPcGVyYXRpb25zLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaXN0T3BlcmF0aW9ucy9MaXN0T3BlcmF0aW9ucy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDQwMjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaXN0T3BlcmF0aW9ucy9MaXN0T3BlcmF0aW9ucy5qcwpAQCAtMCwwICsxLDkwIEBACisvKiogCisgTGlzdE9wZXJhdGlvbnMgZm9yIFhpbmhhCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIAorIFByb3ZpZGVzIHNvbWUgYWRkaXRpb25hbCBmZWF0dXJlcyBmb3Igd29ya2luZyB3aXRoIGxpc3RzIGluIFhpbmhhLgorIAorIEF0IHByZXNlbnQgdGhlIG9ubHkgZmVhdHVyZSBpcworIAorIHt7eworICAgeGluaGFfY29uZmlnLkxpc3RPcGVyYXRpb25zLnRhYlRvSW5kZW50ID0gW3RydWUgfCAnYXRzdGFydCcgfCBmYWxzZV07CisgfX19CisgCisgd2hpY2ggY2F1c2VzIHByZXNzaWcgdGFiIGluYSBsaXN0IHRvIGluZGVudCAob3Igc2hpZnQtdGFiIHRvIGRldGVudCkgdG8gCisgYSBuZXcgbGlzdCBsZXZlbAorIAorIE5vdGUgdGhhdCB0aGUgSFRNTCBzdHJ1Y3R1cmUgb2YgdGhpcyBsaXN0IG1heSBiZSwgZm9yIGV4YW1wbGUKKyB7e3sKKyAgIDx1bD4KKyAgICAgPGxpPkl0ZW0gMTwvbGk+CisgICAgIDx1bD4KKyAgICAgICA8bGk+SXRlbSAxLjE8L2xpPgorICAgICA8L3VsPgorICAgICA8bGk+SXRlbSAyPC9saT4KKyAgIDwvdWw+CisgfX19CisgCitTZWUgdGlja2V0OjE2MTQKKyovCisKK0xpc3RPcGVyYXRpb25zLl9wbHVnaW5JbmZvID0geworICBuYW1lICAgICAgICAgIDogIkxpc3RPcGVyYXRpb25zIiwKKyAgdmVyc2lvbiAgICAgICA6ICIxLjAiLAorICBkZXZlbG9wZXIgICAgIDogIlRoZSBYaW5oYSBDb3JlIERldmVsb3BlciBUZWFtIiwKKyAgZGV2ZWxvcGVyX3VybCA6ICJodHRwOi8vdHJhYy54aW5oYS5vcmcvdGlja2V0LzE2MTQiLAorICBzcG9uc29yICAgICAgIDogIiIsCisgIHNwb25zb3JfdXJsICAgOiAiIiwKKyAgbGljZW5zZSAgICAgICA6ICJodG1sQXJlYSIKK30KKworWGluaGEuQ29uZmlnLnByb3RvdHlwZS5MaXN0T3BlcmF0aW9ucyA9IAoreyAKKyAgLy8gT25lIG9mIHRydWUsIGZhbHNlLCAnYXRzdGFydCcKKyAgLy8gIHdoZXJlICdhdHN0YXJ0JyB3aWxsIGluZGVudCBvbmx5IGF0IHRoZSBzdGFydCBvZiBhIGxpc3QgaXRlbSAoY2FuIGJlIGEgYml0IHdvbmt5IGlmIHRoZXJlIGlzIGEgbGVhZGluZyBzcGFjZSkKKyAgdGFiVG9JbmRlbnQ6IHRydWUgCit9CisKK2Z1bmN0aW9uIExpc3RPcGVyYXRpb25zKGVkaXRvcikKK3sKKyAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7Cit9CisKK0xpc3RPcGVyYXRpb25zLnByb3RvdHlwZS5vbktleVByZXNzID0gZnVuY3Rpb24oZXYpCit7CisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAKKyAgLy8gTm90IGVuYWJsZWQsIGRyb3Agb3V0CisgIGlmKCFlZGl0b3IuY29uZmlnLkxpc3RPcGVyYXRpb25zLnRhYlRvSW5kZW50KSByZXR1cm4gZmFsc2U7CisgIAorICBpZiggZXYua2V5Q29kZSAhPT0gOSApIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgdmFyIHNlbCA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKSwKKyAgICAgIHJuZyA9IGVkaXRvci5jcmVhdGVSYW5nZShzZWwpLAorICAgICAgY29udGFpbmluZ19saXN0ID0gZWRpdG9yLl9nZXRGaXJzdEFuY2VzdG9yQW5kV2h5KHNlbCwgWyJvbCIsICJ1bCJdKTsKKworICBpZiggY29udGFpbmluZ19saXN0WzBdID09PSBudWxsICkgeworICAgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgY29udGFpbmluZ19saXN0X3R5cGUgPSBbIm9sIiwgInVsIl1bY29udGFpbmluZ19saXN0WzFdXTsKKyAgY29udGFpbmluZ19saXN0ID0gY29udGFpbmluZ19saXN0WzBdOworCisgIGlmKCFlZGl0b3IuY29uZmlnLkxpc3RPcGVyYXRpb25zLnRhYlRvSW5kZW50ID09ICdhdHN0YXJ0JykKKyAgeworICAgIGlmKCBybmcuc3RhcnRPZmZzZXQgIT09IDAgKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisKKyAgWGluaGEuX3N0b3BFdmVudChldik7CisKKyAgaWYoIGV2LnNoaWZ0S2V5ICkgeworICAgIGlmKCBlZGl0b3IuX2dldEZpcnN0QW5jZXN0b3JGb3JOb2RlQW5kV2h5KGNvbnRhaW5pbmdfbGlzdCwgWyJvbCIsICJ1bCJdKVswXSAhPT0gbnVsbCApIHsKKyAgICAgIGVkaXRvci5leGVjQ29tbWFuZCgib3V0ZGVudCIpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBlZGl0b3IuZXhlY0NvbW1hbmQoImluZGVudCIpOworICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL0xpc3RUeXBlLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvTGlzdFR5cGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZDg0YjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL0xpc3RUeXBlLmNzcwpAQCAtMCwwICsxLDQzIEBACisuTGlzdFR5cGUgeyB9DQorLkxpc3RUeXBlIGEgew0KKyAgZGlzcGxheTpibG9jazsNCisgIGZsb2F0OmxlZnQ7DQorICBtYXJnaW46MnB4IDAgMCA1cHg7DQorICBwYWRkaW5nOjA7DQorICB3aWR0aDo1MHB4Ow0KKyAgaGVpZ2h0OjQwcHg7DQorICBib3JkZXI6MXB4IHNvbGlkICM5Yzk2YTU7DQorfQ0KKy5MaXN0VHlwZSBhOmhvdmVyIHsNCisgIGJvcmRlcjoxcHggc29saWQgI2ZmZDc2MDsNCit9DQorLkxpc3RUeXBlIGEuYWN0aXZlIHsNCisgIGJvcmRlcjoxcHggc29saWQgIzAwMDA4NDsNCit9DQorLkxpc3RUeXBlIGEuY2lyY2xlIHsNCisgIGJhY2tncm91bmQ6dXJsKGltZy9jaXJjbGUucG5nKTsNCit9DQorLkxpc3RUeXBlIGEuZGlzYyB7DQorICBiYWNrZ3JvdW5kOnVybChpbWcvZGlzYy5wbmcpOw0KK30NCisuTGlzdFR5cGUgYS5zcXVhcmUgew0KKyAgYmFja2dyb3VuZDp1cmwoaW1nL3NxdWFyZS5wbmcpOw0KK30NCisuTGlzdFR5cGUgYS5kZWNpbWFsIHsNCisgIGJhY2tncm91bmQ6dXJsKGltZy9kZWNpbWFsLnBuZyk7DQorfQ0KKy5MaXN0VHlwZSBhLmxvd2VyLWFscGhhIHsNCisgIGJhY2tncm91bmQ6dXJsKGltZy9sb3dlci1hbHBoYS5wbmcpOw0KK30NCisuTGlzdFR5cGUgYS51cHBlci1hbHBoYSB7DQorICBiYWNrZ3JvdW5kOnVybChpbWcvdXBwZXItYWxwaGEucG5nKTsNCit9DQorLkxpc3RUeXBlIGEubG93ZXItcm9tYW4gew0KKyAgYmFja2dyb3VuZDp1cmwoaW1nL2xvd2VyLXJvbWFuLnBuZyk7DQorfQ0KKy5MaXN0VHlwZSBhLnVwcGVyLXJvbWFuIHsNCisgIGJhY2tncm91bmQ6dXJsKGltZy91cHBlci1yb21hbi5wbmcpOw0KK30NCisuTGlzdFR5cGUgYS5ub25lIHsNCisgIGJhY2tncm91bmQ6dXJsKGltZy9ub25lLnBuZyk7DQorfQ0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvTGlzdFR5cGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL0xpc3RUeXBlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NTRlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL0xpc3RUeXBlLmpzCkBAIC0wLDAgKzEsMTkxIEBACisvLyBMaXN0VHlwZSBQbHVnaW4gZm9yIFhpbmhhCisvLyBUb29sYmFyIEltcGxlbWVudGF0aW9uIGJ5IE1paGFpIEJhem9uLCBodHRwOi8vZHluYXJjaC5jb20vbWlzaG9vLworWGluaGEubG9hZFN0eWxlKCAnTGlzdFR5cGUuY3NzJywgJ0xpc3RUeXBlJyApOworCitmdW5jdGlvbiBMaXN0VHlwZSggZWRpdG9yICkKK3sKKyAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisgIHZhciBjZmcgPSBlZGl0b3IuY29uZmlnOworICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgaWYgKCBjZmcuTGlzdFR5cGUubW9kZSA9PSAndG9vbGJhcicgKQorICB7CisgIHZhciBvcHRpb25zID0ge307CisgICAgb3B0aW9uc1tYaW5oYS5fbGMoICJEZWNpbWFsIG51bWJlcnMiLCAiTGlzdFR5cGUiICldID0gImRlY2ltYWwiOworICAgIG9wdGlvbnNbWGluaGEuX2xjKCAiTG93ZXIgcm9tYW4gbnVtYmVycyIsICJMaXN0VHlwZSIgKV0gPSAibG93ZXItcm9tYW4iOworICAgIG9wdGlvbnNbWGluaGEuX2xjKCAiVXBwZXIgcm9tYW4gbnVtYmVycyIsICJMaXN0VHlwZSIgKV0gPSAidXBwZXItcm9tYW4iOworICAgIG9wdGlvbnNbWGluaGEuX2xjKCAiTG93ZXIgbGF0aW4gbGV0dGVycyIsICJMaXN0VHlwZSIgKV0gPSAibG93ZXItYWxwaGEiOworICAgIG9wdGlvbnNbWGluaGEuX2xjKCAiVXBwZXIgbGF0aW4gbGV0dGVycyIsICJMaXN0VHlwZSIgKV0gPSAidXBwZXItYWxwaGEiOworICAgIGlmICghWGluaGEuaXNfaWUpCisgICAgICAvLyBJRSBkb2Vzbid0IHN1cHBvcnQgdGhpcyBwcm9wZXJ0eTsgZXZlbiB3b3JzZSwgaXQgY29tcGxhaW5zCisgICAgICAvLyB3aXRoIGEgZ3Jvc3MgZXJyb3IgbWVzc2FnZSB3aGVuIHdlIHRyaWVkIHRvIHNlbGVjdCBpdCwKKyAgICAgIC8vIHRoZXJlZm9yZSBsZXQncyBoaWRlIGl0IGZyb20gdGhlIGRhbW4gImJyb3dzZXIiLgorICAgICAgb3B0aW9uc1tYaW5oYS5fbGMoICJMb3dlciBncmVlayBsZXR0ZXJzIiwgIkxpc3RUeXBlIiApXSA9ICJsb3dlci1ncmVlayI7CisgICAgdmFyIG9iaiA9CisgICAgeworICAgICAgaWQgICAgICAgICAgICA6ICJsaXN0dHlwZSIsCisgICAgICB0b29sdGlwICAgICAgIDogWGluaGEuX2xjKCAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIiwgIkxpc3RUeXBlIiApLAorICAgICAgb3B0aW9ucyAgICAgICA6IG9wdGlvbnMsCisgICAgICBhY3Rpb24gICAgICAgIDogZnVuY3Rpb24oIGVkaXRvciApIHsgc2VsZi5vblNlbGVjdCggZWRpdG9yLCB0aGlzICk7IH0sCisgICAgICByZWZyZXNoICAgICAgIDogZnVuY3Rpb24oIGVkaXRvciApIHsgc2VsZi51cGRhdGVWYWx1ZSggZWRpdG9yLCB0aGlzICk7IH0sCisgICAgICBjb250ZXh0ICAgICAgIDogIm9sIgorICAgIH07CisgICAgY2ZnLnJlZ2lzdGVyRHJvcGRvd24oIG9iaiApOworICAgIGNmZy5hZGRUb29sYmFyRWxlbWVudCggImxpc3R0eXBlIiwgWyJpbnNlcnRvcmRlcmVkbGlzdCIsIm9yZGVyZWRsaXN0Il0sIDEgKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBlZGl0b3IuX0xpc3RUeXBlID0gZWRpdG9yLmFkZFBhbmVsKCAncmlnaHQnICk7CisgICAgWGluaGEuZnJlZUxhdGVyKCBlZGl0b3IsICdfTGlzdFR5cGUnICk7CisgICAgWGluaGEuYWRkQ2xhc3MoIGVkaXRvci5fTGlzdFR5cGUsICdMaXN0VHlwZScgKTsKKyAgICAvLyBodXJtLCBvayBpdCdzIHByZXR0eSB0byB1c2UgdGhlIGJhY2tncm91bmQgY29sb3IgZm9yIHRoZSB3aG9sZSBwYW5lbCwKKyAgICAvLyBidXQgc2hvdWxkIG5vdCBpdCBiZSBzZXQgYnkgZGVmYXVsdCB3aGVuIGNyZWF0aW5nIHRoZSBwYW5lbCA/CisgICAgWGluaGEuYWRkQ2xhc3MoIGVkaXRvci5fTGlzdFR5cGUucGFyZW50Tm9kZSwgJ2RpYWxvZycgKTsKKworICAgIGVkaXRvci5ub3RpZnlPbiggJ21vZGVjaGFuZ2UnLAorICAgICAgZnVuY3Rpb24oZSxhcmdzKQorICAgICAgeworICAgICAgICBpZiAoIGFyZ3MubW9kZSA9PSAndGV4dCcgKSBlZGl0b3IuaGlkZVBhbmVsKCBlZGl0b3IuX0xpc3RUeXBlICk7CisgICAgICB9CisgICAgKTsKKworICAgIHZhciBlbHRzX3VsID0gWydkaXNjJywgJ2NpcmNsZScsICdzcXVhcmUnLCAnbm9uZSddOworICAgIHZhciBlbHRzX29sID0gWydkZWNpbWFsJywgJ2xvd2VyLWFscGhhJywgJ3VwcGVyLWFscGhhJywgJ2xvd2VyLXJvbWFuJywgJ3VwcGVyLXJvbWFuJywgJ25vbmUnXTsKKyAgICB2YXIgZGl2Z2xvYmFsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTsKKyAgICBkaXZnbG9iYWwuc3R5bGUuaGVpZ2h0ID0gJzkwcHgnOworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApOworICAgIHRoaXMuZGl2VUwgPSBkaXY7CisgICAgZGl2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgZm9yICggdmFyIGk9MDsgaTxlbHRzX3VsLmxlbmd0aDsgaSsrICkKKyAgICB7CisgICAgICBkaXYuYXBwZW5kQ2hpbGQoIHRoaXMuY3JlYXRlSW1hZ2UoIGVsdHNfdWxbaV0gKSApOworICAgIH0KKyAgICBkaXZnbG9iYWwuYXBwZW5kQ2hpbGQoIGRpdiApOworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApOworICAgIHRoaXMuZGl2T0wgPSBkaXY7CisgICAgZGl2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgZm9yICggdmFyIGk9MDsgaTxlbHRzX29sLmxlbmd0aDsgaSsrICkKKyAgICB7CisgICAgICBkaXYuYXBwZW5kQ2hpbGQoIHRoaXMuY3JlYXRlSW1hZ2UoIGVsdHNfb2xbaV0gKSApOworICAgIH0KKyAgICBkaXZnbG9iYWwuYXBwZW5kQ2hpbGQoIGRpdiApOworCisgICAgZWRpdG9yLl9MaXN0VHlwZS5hcHBlbmRDaGlsZCggZGl2Z2xvYmFsICk7CisKKyAgICBlZGl0b3IuaGlkZVBhbmVsKCBlZGl0b3IuX0xpc3RUeXBlICk7CisgIH0KK30KKworWGluaGEuQ29uZmlnLnByb3RvdHlwZS5MaXN0VHlwZSA9Cit7CisgICdtb2RlJzogJ3Rvb2xiYXInIC8vIGNvbmZpZ3VyYXRpb24gbW9kZSA6IHRvb2xiYXIgb3IgcGFuZWwKK307CisKK0xpc3RUeXBlLl9wbHVnaW5JbmZvID0KK3sKKyAgbmFtZSAgICAgICAgICA6ICJMaXN0VHlwZSIsCisgIHZlcnNpb24gICAgICAgOiAiMi4xIiwKKyAgZGV2ZWxvcGVyICAgICA6ICJMYXVyZW50IFZpbGRheSIsCisgIGRldmVsb3Blcl91cmwgOiAiaHR0cDovL3d3dy5tb2toZXQuY29tLyIsCisgIGNfb3duZXIgICAgICAgOiAiWGluaGEgY29tbXVuaXR5IiwKKyAgc3BvbnNvciAgICAgICA6ICIiLAorICBzcG9uc29yX3VybCAgIDogIiIsCisgIGxpY2Vuc2UgICAgICAgOiAiSFRNTEFyZWEiCit9OworCitMaXN0VHlwZS5wcm90b3R5cGUub25TZWxlY3QgPSBmdW5jdGlvbiggZWRpdG9yLCBjb21ibyApCit7CisgIHZhciB0Ym9iaiA9IGVkaXRvci5fdG9vbGJhck9iamVjdHNbIGNvbWJvLmlkIF0uZWxlbWVudDsKKyAgdmFyIHBhcmVudCA9IGVkaXRvci5nZXRQYXJlbnRFbGVtZW50KCk7CisgIHdoaWxlICghL15vbCQvaS50ZXN0KCBwYXJlbnQudGFnTmFtZSApKQorICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlOworICBwYXJlbnQuc3R5bGUubGlzdFN0eWxlVHlwZSA9IHRib2JqLnZhbHVlOworfTsKKworTGlzdFR5cGUucHJvdG90eXBlLnVwZGF0ZVZhbHVlID0gZnVuY3Rpb24oIGVkaXRvciwgY29tYm8gKQoreworICB2YXIgdGJvYmogPSBlZGl0b3IuX3Rvb2xiYXJPYmplY3RzWyBjb21iby5pZCBdLmVsZW1lbnQ7CisgIHZhciBwYXJlbnQgPSBlZGl0b3IuZ2V0UGFyZW50RWxlbWVudCgpOworICB3aGlsZSAoIHBhcmVudCAmJiAhL15vbCQvaS50ZXN0KCBwYXJlbnQudGFnTmFtZSApICkKKyAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTsKKyAgaWYgKCFwYXJlbnQpCisgIHsKKyAgICB0Ym9iai5zZWxlY3RlZEluZGV4ID0gMDsKKyAgICByZXR1cm47CisgIH0KKyAgdmFyIHR5cGUgPSBwYXJlbnQuc3R5bGUubGlzdFN0eWxlVHlwZTsKKyAgaWYgKCF0eXBlKQorICB7CisgICAgdGJvYmouc2VsZWN0ZWRJbmRleCA9IDA7CisgIH0KKyAgZWxzZQorICB7CisgICAgZm9yICggdmFyIGkgPSB0Ym9iai5maXJzdENoaWxkOyBpOyBpID0gaS5uZXh0U2libGluZyApCisgICAgeworICAgICAgaS5zZWxlY3RlZCA9ICh0eXBlLmluZGV4T2YoaS52YWx1ZSkgIT0gLTEpOworICAgIH0KKyAgfQorfTsKKworTGlzdFR5cGUucHJvdG90eXBlLm9uVXBkYXRlVG9vbGJhciA9IGZ1bmN0aW9uKCkKK3sKKyAgaWYgKCB0aGlzLmVkaXRvci5jb25maWcuTGlzdFR5cGUubW9kZSA9PSAndG9vbGJhcicgKSByZXR1cm4gOworICB2YXIgcGFyZW50ID0gdGhpcy5lZGl0b3IuZ2V0UGFyZW50RWxlbWVudCgpOworICB3aGlsZSAoIHBhcmVudCAmJiAhL15bb3x1XWwkL2kudGVzdCggcGFyZW50LnRhZ05hbWUgKSApCisgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7CisgIGlmIChwYXJlbnQgJiYgL15bb3x1XWwkL2kudGVzdCggcGFyZW50LnRhZ05hbWUgKSApCisgIHsKKyAgICB0aGlzLnNob3dQYW5lbCggcGFyZW50ICk7CisgIH0KKyAgZWxzZSBpZiAodGhpcy5lZGl0b3IuX0xpc3RUeXBlLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnKQorICB7CisgICAgdGhpcy5lZGl0b3IuaGlkZVBhbmVsKCB0aGlzLmVkaXRvci5fTGlzdFR5cGUgKTsKKyAgfQorfTsKKworTGlzdFR5cGUucHJvdG90eXBlLmNyZWF0ZUltYWdlID0gZnVuY3Rpb24oIGxpc3RTdHlsZVR5cGUgKQoreworICB2YXIgc2VsZiA9IHRoaXM7CisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnYScgKTsKKyAgYS5ocmVmID0gJ2phdmFzY3JpcHQ6dm9pZCgwKSc7CisgIFhpbmhhLl9hZGRDbGFzcyggYSwgbGlzdFN0eWxlVHlwZSApOworICBYaW5oYS5fYWRkRXZlbnQoIGEsICJjbGljayIsIGZ1bmN0aW9uICgpCisgICAgeworICAgICAgdmFyIHBhcmVudCA9IGVkaXRvci5fTGlzdFR5cGUuY3VycmVudExpc3RUeXBlUGFyZW50OworICAgICAgcGFyZW50LnN0eWxlLmxpc3RTdHlsZVR5cGUgPSBsaXN0U3R5bGVUeXBlOworICAgICAgc2VsZi5zaG93QWN0aXZlKCBwYXJlbnQgKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICk7CisgIHJldHVybiBhOworfTsKKworTGlzdFR5cGUucHJvdG90eXBlLnNob3dBY3RpdmUgPSBmdW5jdGlvbiggcGFyZW50ICkKK3sKKyAgdmFyIGFjdGl2ZURpdiA9ICggcGFyZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAndWwnICkgPyB0aGlzLmRpdlVMIDogdGhpcy5kaXZPTDsKKyAgdGhpcy5kaXZVTC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICB0aGlzLmRpdk9MLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgIGFjdGl2ZURpdi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKKyAgdmFyIGRlZmF1bHRUeXBlID0gcGFyZW50LnN0eWxlLmxpc3RTdHlsZVR5cGU7CisgIGlmICggJycgPT0gZGVmYXVsdFR5cGUgKSBkZWZhdWx0VHlwZSA9ICggcGFyZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAndWwnICk/ICdkaXNjJzonZGVjaW1hbCc7CisgIGZvciAoIHZhciBpPTA7IGk8YWN0aXZlRGl2LmNoaWxkTm9kZXMubGVuZ3RoOyBpKysgKQorICB7CisgICAgdmFyIGVsdCA9IGFjdGl2ZURpdi5jaGlsZE5vZGVzW2ldOworICAgIGlmICggWGluaGEuX2hhc0NsYXNzKCBlbHQsIGRlZmF1bHRUeXBlICkgKQorICAgIHsKKyAgICAgIFhpbmhhLl9hZGRDbGFzcyggZWx0LCAnYWN0aXZlJyApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgWGluaGEuX3JlbW92ZUNsYXNzKCBlbHQsICdhY3RpdmUnICk7CisgICAgfQorICB9Cit9OworCitMaXN0VHlwZS5wcm90b3R5cGUuc2hvd1BhbmVsID0gZnVuY3Rpb24oIHBhcmVudCApCit7CisgIHRoaXMuZWRpdG9yLl9MaXN0VHlwZS5jdXJyZW50TGlzdFR5cGVQYXJlbnQgPSBwYXJlbnQ7CisgIHRoaXMuc2hvd0FjdGl2ZShwYXJlbnQpOworICB0aGlzLmVkaXRvci5zaG93UGFuZWwoIHRoaXMuZWRpdG9yLl9MaXN0VHlwZSApOworfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2ltZy9jaXJjbGUucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaXN0VHlwZS9pbWcvY2lyY2xlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGZkMGI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaXN0VHlwZS9pbWcvY2lyY2xlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2ltZy9kZWNpbWFsLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvaW1nL2RlY2ltYWwucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYTc1MTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2ltZy9kZWNpbWFsLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2ltZy9kaXNjLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvaW1nL2Rpc2MucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZDdiNjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2ltZy9kaXNjLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2ltZy9sb3dlci1hbHBoYS5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2ltZy9sb3dlci1hbHBoYS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxNGI3MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvaW1nL2xvd2VyLWFscGhhLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2ltZy9sb3dlci1yb21hbi5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2ltZy9sb3dlci1yb21hbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M5MzRmZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvaW1nL2xvd2VyLXJvbWFuLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2ltZy9ub25lLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvaW1nL25vbmUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNDNmM2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2ltZy9ub25lLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2ltZy9zcXVhcmUucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaXN0VHlwZS9pbWcvc3F1YXJlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODRmZmZjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaXN0VHlwZS9pbWcvc3F1YXJlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2ltZy91cHBlci1hbHBoYS5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2ltZy91cHBlci1hbHBoYS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1NDUwOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvaW1nL3VwcGVyLWFscGhhLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2ltZy91cHBlci1yb21hbi5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2ltZy91cHBlci1yb21hbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQwOGNlNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvaW1nL3VwcGVyLXJvbWFuLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2xhbmcvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVlNDY1MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvbGFuZy9kZS5qcwpAQCAtMCwwICsxLDE5IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNob29zZSBsaXN0IHN0eWxlIHR5cGUgKGZvciBvcmRlcmVkIGxpc3RzKSI6ICJXw6RobGVuIFNpZSBlaW5lbiBUeXAgZsO8ciBkaWUgTnVtbWVyaWVydW5nIGF1cyIsCisgICAgIkRlY2ltYWwgbnVtYmVycyI6ICJaYWhsZW4iLAorICAgICJMb3dlciBncmVlayBsZXR0ZXJzIjogIkdyaWVjaGlzY2giLAorICAgICJMb3dlciBsYXRpbiBsZXR0ZXJzIjogIlplaWNoZW4ga2xlaW4iLAorICAgICJMb3dlciByb21hbiBudW1iZXJzIjogIlLDtm1pc2NoIGtsZWluIiwKKyAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICJaZWljaGVuIGdyb8OfIiwKKyAgICAiVXBwZXIgcm9tYW4gbnVtYmVycyI6ICJSw7ZtaXNjaCBncm/DnyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaXN0VHlwZS9sYW5nL2VzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaXN0VHlwZS9sYW5nL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMWU3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2xhbmcvZXMuanMKQEAgLTAsMCArMSwxOSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlcyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDaG9vc2UgbGlzdCBzdHlsZSB0eXBlIChmb3Igb3JkZXJlZCBsaXN0cykiOiAiU2VsZWNjaW9uYXIgZXN0aWxvIGRlIGxpc3RhIChwYXJhIGxpc3RhcyBvcmRlbmFkYXMpIiwKKyAgICAiRGVjaW1hbCBudW1iZXJzIjogIk7Dum1lcm9zIiwKKyAgICAiTG93ZXIgZ3JlZWsgbGV0dGVycyI6ICJMZXRyYXMgZ3JpZWdhcyBtaW7DunNjdWxhcyIsCisgICAgIkxvd2VyIGxhdGluIGxldHRlcnMiOiAiTGV0cmFzIG1pbsO6c2N1bGFzIiwKKyAgICAiTG93ZXIgcm9tYW4gbnVtYmVycyI6ICJOw7ptZXJvcyByb21hbm9zIGVuIG1pbsO6c2N1bGFzIiwKKyAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICJMZXRyYXMgbWF5w7pzY3VsYXMiLAorICAgICJVcHBlciByb21hbiBudW1iZXJzIjogIk7Dum1lcm9zIHJvbWFub3MgZW4gbWF5w7pzY3VsYXMiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvbGFuZy9mci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvbGFuZy9mci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjNmNjQyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaXN0VHlwZS9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsMTkgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogIkNob2lzaXNzZXogbGUgc3R5bGUgZGUgbGlzdGUgKHBvdXIgbGVzIGxpc3RlcyBvcmRvbm7DqWVzKSIsCisgICAgIkRlY2ltYWwgbnVtYmVycyI6ICJOb21icmVzIGTDqWNpbWF1eCIsCisgICAgIkxvd2VyIGdyZWVrIGxldHRlcnMiOiAiTGV0dHJlcyBncmVjcXVlcyBtaW51c2N1bGUiLAorICAgICJMb3dlciBsYXRpbiBsZXR0ZXJzIjogIkxldHRyZXMgbGF0aW5lcyBtaW51c2N1bGUiLAorICAgICJMb3dlciByb21hbiBudW1iZXJzIjogIk5vbWJyZXMgcm9tYWlucyBtaW51c2N1bGUiLAorICAgICJVcHBlciBsYXRpbiBsZXR0ZXJzIjogIkxldHRyZXMgbGF0aW5lcyBtYWp1c2N1bGUiLAorICAgICJVcHBlciByb21hbiBudW1iZXJzIjogIk5vbWJyZXMgcm9tYWlucyBtYWp1c2N1bGUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvbGFuZy9qYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvbGFuZy9qYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTIzNTRkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaXN0VHlwZS9sYW5nL2phLmpzCkBAIC0wLDAgKzEsMTkgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiamEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogIuODquOCueODiOW9ouW8j+OBrumBuOaKnijpoIbluo/ku5jjgZHjg6rjgrnjg4jnlKgpIiwKKyAgICAiRGVjaW1hbCBudW1iZXJzIjogIjEw6YCy5pWwIiwKKyAgICAiTG93ZXIgZ3JlZWsgbGV0dGVycyI6ICLjgq7jg6rjgrfjg6PmloflrZco5bCP5paH5a2XKSIsCisgICAgIkxvd2VyIGxhdGluIGxldHRlcnMiOiAi44Ki44Or44OV44Kh44OZ44OD44OIKOWwj+aWh+WtlykiLAorICAgICJMb3dlciByb21hbiBudW1iZXJzIjogIuODreODvOODnuaVsOWtlyjlsI/mloflrZcpIiwKKyAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICLjgqLjg6vjg5XjgqHjg5njg4Pjg4go5aSn5paH5a2XKSIsCisgICAgIlVwcGVyIHJvbWFuIG51bWJlcnMiOiAi44Ot44O844Oe5pWw5a2XKOWkp+aWh+WtlykiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaXN0VHlwZS9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ4MDE4OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvbGFuZy9sY19iYXNlLmpzCkBAIC0wLDAgKzEsMzEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLworLy8gTEFORzogImVuIiwgRU5DT0RJTkc6IFVURi04CisvLyBBdXRob3I6IFRyYW5zbGF0b3ItTmFtZSwgPGVtYWlsQGV4YW1wbGUuY29tPgorLy8KKy8vIExhc3QgcmV2aXNpb246IDIwMTgtMDQtMTIKKy8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KKy8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyAoUGxlYXNlLCByZW1vdmUgaW5mb3JtYXRpb24gYmVsb3cpCisvLyBGT1IgVFJBTlNMQVRPUlM6CisvLworLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCisvLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCisvLworLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7CisvLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50CisvLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCisKK3sKKyAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogIiIsCisgICAgIkRlY2ltYWwgbnVtYmVycyI6ICIiLAorICAgICJMb3dlciBncmVlayBsZXR0ZXJzIjogIiIsCisgICAgIkxvd2VyIGxhdGluIGxldHRlcnMiOiAiIiwKKyAgICAiTG93ZXIgcm9tYW4gbnVtYmVycyI6ICIiLAorICAgICJVcHBlciBsYXRpbiBsZXR0ZXJzIjogIiIsCisgICAgIlVwcGVyIHJvbWFuIG51bWJlcnMiOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvbGFuZy9uYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvbGFuZy9uYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjA3M2E3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaXN0VHlwZS9sYW5nL25iLmpzCkBAIC0wLDAgKzEsMTkgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogIlZlbGcgbGlzdGV0eXBlIChmb3IgbnVtbWVyZXJ0ZSBsaXN0ZXIpIiwKKyAgICAiRGVjaW1hbCBudW1iZXJzIjogIkRlc2ltYWx0YWxsIiwKKyAgICAiTG93ZXIgZ3JlZWsgbGV0dGVycyI6ICJMb3dlciBncmVlayBsZXR0ZXJzIiwKKyAgICAiTG93ZXIgbGF0aW4gbGV0dGVycyI6ICJMb3dlciBsYXRpbiBsZXR0ZXJzIiwKKyAgICAiTG93ZXIgcm9tYW4gbnVtYmVycyI6ICJMb3dlciByb21hbiBudW1iZXJzIiwKKyAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICJVcHBlciBsYXRpbiBsZXR0ZXJzIiwKKyAgICAiVXBwZXIgcm9tYW4gbnVtYmVycyI6ICJVcHBlciByb21hbiBudW1iZXJzIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2xhbmcvbmwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM1YWI2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvbGFuZy9ubC5qcwpAQCAtMCwwICsxLDE5IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNob29zZSBsaXN0IHN0eWxlIHR5cGUgKGZvciBvcmRlcmVkIGxpc3RzKSI6ICJLaWVzIHN0aWpsIHR5cGUgKHZvb3Igb3JkZXJlZCBsaXN0cykiLAorICAgICJEZWNpbWFsIG51bWJlcnMiOiAiRGVjaW1hbGUgbnVtbWVycyIsCisgICAgIkxvd2VyIGdyZWVrIGxldHRlcnMiOiAiR3JpZWtzZSBsZXR0ZXJzIiwKKyAgICAiTG93ZXIgbGF0aW4gbGV0dGVycyI6ICJMYXRpam5zZSBsZXR0ZXJzIGtsZWluIiwKKyAgICAiTG93ZXIgcm9tYW4gbnVtYmVycyI6ICJSb21laW5zZSBudW1tZXJzIGtsZWluIiwKKyAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICJMYXRpam5zZSBsZXR0ZXJzIGdyb290IiwKKyAgICAiVXBwZXIgcm9tYW4gbnVtYmVycyI6ICJSb21laW5zZSBudW1tZXJzIGdyb290IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2xhbmcvcGwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2xhbmcvcGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZiMGEwZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvbGFuZy9wbC5qcwpAQCAtMCwwICsxLDE5IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInBsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNob29zZSBsaXN0IHN0eWxlIHR5cGUgKGZvciBvcmRlcmVkIGxpc3RzKSI6ICJXeWJpZXJ6IHR5cCBsaXN0eSBudW1lcm93YW5laiIsCisgICAgIkRlY2ltYWwgbnVtYmVycyI6ICJDeWZyeSBhcmFic2tpZSIsCisgICAgIkxvd2VyIGdyZWVrIGxldHRlcnMiOiAiTWHFgmUgbGl0ZXJ5IGdyZWNraWUiLAorICAgICJMb3dlciBsYXRpbiBsZXR0ZXJzIjogIk1hxYJlIGxpdGVyeSIsCisgICAgIkxvd2VyIHJvbWFuIG51bWJlcnMiOiAiTWHFgmUgcnp5bXNraWUiLAorICAgICJVcHBlciBsYXRpbiBsZXR0ZXJzIjogIkR1xbxlIGxpdGVyeSIsCisgICAgIlVwcGVyIHJvbWFuIG51bWJlcnMiOiAiRHXFvGUgcnp5bXNraWUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvbGFuZy9wdF9ici5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvbGFuZy9wdF9ici5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTMzZDJkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaXN0VHlwZS9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTkgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogIkVzY29saGEgdW0gdGlwbyBkZSBsaXN0YSAocGFyYSBsaXN0YSBvcmRlbmFkYSkiLAorICAgICJEZWNpbWFsIG51bWJlcnMiOiAiTsO6bWVyb3MgZGVjaW1haXMiLAorICAgICJMb3dlciBncmVlayBsZXR0ZXJzIjogIkxldHJhcyBncmVnYXMgaW5mZXJpb3JlcyIsCisgICAgIkxvd2VyIGxhdGluIGxldHRlcnMiOiAiTGV0cmFzIGxhdGluYXMgaW5mZXJpb3JlcyIsCisgICAgIkxvd2VyIHJvbWFuIG51bWJlcnMiOiAiTsO6bWVyb3Mgcm9tYW5vcyBpbmZlcmlvcmVzIiwKKyAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICJMZXRyYXMgbGF0aW5hcyBzdXBlcmlvcmVzIiwKKyAgICAiVXBwZXIgcm9tYW4gbnVtYmVycyI6ICJOw7ptZXJvcyByb21hbm9zIHN1cGVyaW9yZXMiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvbGFuZy9ydS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTGlzdFR5cGUvbGFuZy9ydS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDExM2NmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaXN0VHlwZS9sYW5nL3J1LmpzCkBAIC0wLDAgKzEsMTkgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicnUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2hvb3NlIGxpc3Qgc3R5bGUgdHlwZSAoZm9yIG9yZGVyZWQgbGlzdHMpIjogItCS0YvQsdC10YDQuNGC0LUg0YHRgtC40LvRjCDRgdC/0LjRgdC60L7QsiAo0LTQu9GPINGD0L/QvtGA0Y/QtNC+0YfQtdC90L3Ri9GFINGB0L/QuNGB0LrQvtCyKSIsCisgICAgIkRlY2ltYWwgbnVtYmVycyI6ICLQlNC10YHRj9GC0LjRh9C90YvQtSDRh9C40YHQu9CwIiwKKyAgICAiTG93ZXIgZ3JlZWsgbGV0dGVycyI6ICLQodGC0YDQvtGH0L3Ri9C1INCz0YDQtdGH0LXRgdC60LjQtSDRgdC40LzQstC+0LvRiyIsCisgICAgIkxvd2VyIGxhdGluIGxldHRlcnMiOiAi0KHRgtGA0L7Rh9C90YvQtSDQu9Cw0YLQuNC90YHQutC40LUg0YHQuNC80LLQvtC70YsiLAorICAgICJMb3dlciByb21hbiBudW1iZXJzIjogItCh0YLRgNC+0YfQvdGL0LUg0YDQvtC80LDQvdGB0LrQuNC1INGH0LjRgdC70LAiLAorICAgICJVcHBlciBsYXRpbiBsZXR0ZXJzIjogItCX0LDQs9C70LDQstC90YvQtSDQu9Cw0YLQuNC90YHQutC40LUg0YHQuNC80LLQvtC70YsiLAorICAgICJVcHBlciByb21hbiBudW1iZXJzIjogItCX0LDQs9C70LDQstC90YvQtSDRgNC+0LzQsNC90YHQutC40LUg0YfQuNGB0LvQsCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaXN0VHlwZS9sYW5nL3N2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9MaXN0VHlwZS9sYW5nL3N2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3YTg0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL0xpc3RUeXBlL2xhbmcvc3YuanMKQEAgLTAsMCArMSwxOSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDaG9vc2UgbGlzdCBzdHlsZSB0eXBlIChmb3Igb3JkZXJlZCBsaXN0cykiOiAiVsOkbGogbGlzdHR5cCAoZsO2ciBudW1yZXJhZGUgbGlzdG9yKSIsCisgICAgIkRlY2ltYWwgbnVtYmVycyI6ICJEZXNpbWFsdGFsIiwKKyAgICAiTG93ZXIgZ3JlZWsgbGV0dGVycyI6ICJTbcOlIGdyZWtpc2thIGJva3N0w6R2ZXIiLAorICAgICJMb3dlciBsYXRpbiBsZXR0ZXJzIjogIlNtw6UgbGF0aW5za2EgYm9rc3TDpHZlciIsCisgICAgIkxvd2VyIHJvbWFuIG51bWJlcnMiOiAiU23DpSByb21lcnNrYSBzaWZmcm9yIiwKKyAgICAiVXBwZXIgbGF0aW4gbGV0dGVycyI6ICJTdG9yYSBsYXRpbnNrYSBib2tzdMOkdmVyIiwKKyAgICAiVXBwZXIgcm9tYW4gbnVtYmVycyI6ICJTdG9yYSByb21lcnNrYSBzaWZmcm9yIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvTW9vdG9vbHNGaWxlTWFuYWdlci5GaWxlTWFuYWdlci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9Nb290b29sc0ZpbGVNYW5hZ2VyLkZpbGVNYW5hZ2VyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZTRiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvTW9vdG9vbHNGaWxlTWFuYWdlci5GaWxlTWFuYWdlci5qcwpAQCAtMCwwICsxLDQwNSBAQAorLyoqCisgID0gTW9vdG9vbHMgRmlsZSBNYW5hZ2VyID0KKyAgPT0gRmlsZSBNYW5hZ2VyID09CisgIAorICBUaGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBleHRlbmQgdGhlIE1vb3Rvb2xzRmlsZU1hbmFnZXIgcGx1Z2luIHdpdGggc3VwcG9ydAorICBmb3IgbWFuYWdpbmcgZmlsZXMgKGluc2VydGluZyBhIGxpbmsgdG8gYSBmaWxlKS4gIFRoaXMgZmlsZSBpcyBsb2FkZWQgYXV0b21hdGljYWxseS4KKyAgICAgCisgKiBAYXV0aG9yICRBdXRob3IkCisgKiBAdmVyc2lvbiAkSWQkCisgKiBAcGFja2FnZSBNb290b29sc0ZpbGVNYW5hZ2VyCisgKi8KKworCisvLyBPcGVuIGEgImZpbGVzIiBtb2RlIG9mIHRoZSBwbHVnaW4gdG8gYWxsb3cgdG8gc2VsZWN0IGEgZmlsZSB0bworLy8gY3JlYXRlIGEgbGluayB0by4KK01vb3Rvb2xzRmlsZU1hbmFnZXIucHJvdG90eXBlLk9wZW5GaWxlTWFuYWdlciA9IGZ1bmN0aW9uKGxpbmspIAoreworICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgICB2YXIgb3V0cGFyYW0gPSBudWxsOworICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAKKyAgICBpZiAodHlwZW9mIGxpbmsgPT0gInVuZGVmaW5lZCIpIAorICAgIHsKKyAgICAgIGxpbmsgPSB0aGlzLmVkaXRvci5nZXRQYXJlbnRFbGVtZW50KCk7CisgICAgICBpZiAobGluaykgCisgICAgICB7CisgICAgICAgIGlmICgvXmltZyQvaS50ZXN0KGxpbmsudGFnTmFtZSkpCisgICAgICAgICAgICBsaW5rID0gbGluay5wYXJlbnROb2RlOworICAgICAgICBpZiAoIS9eYSQvaS50ZXN0KGxpbmsudGFnTmFtZSkpCisgICAgICAgICAgICBsaW5rID0gbnVsbDsKKyAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gSWYgdGhlIGxpbmsgd2Fzbid0IHByb3ZpZGVkLCBhbmQgbm8gbGluayBpcyBjdXJyZW50bHkgaW4gZm9jdXMsCisgICAgLy8gbWFrZSBvbmUgZnJvbSB0aGUgc2VsZWN0aW9uLgorICAgIGlmICghbGluaykgCisgICAgeworICAgICAgdmFyIHNlbCA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTsKKyAgICAgIHZhciByYW5nZSA9IGVkaXRvci5jcmVhdGVSYW5nZShzZWwpOworICAgICAgdmFyIGNvbXBhcmUgPSAwOworICAgICAgCisgICAgICBpZiAoWGluaGEuaXNfaWUpIAorICAgICAgeworICAgICAgICBpZiAoIHNlbC50eXBlID09ICJDb250cm9sIiApCisgICAgICAgIHsKKyAgICAgICAgICBjb21wYXJlID0gcmFuZ2UubGVuZ3RoOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGNvbXBhcmUgPSByYW5nZS5jb21wYXJlRW5kUG9pbnRzKCJTdGFydFRvRW5kIiwgcmFuZ2UpOworICAgICAgICB9CisgICAgICB9IAorICAgICAgZWxzZSAKKyAgICAgIHsKKyAgICAgICAgY29tcGFyZSA9IHJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhyYW5nZS5TVEFSVF9UT19FTkQsIHJhbmdlKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYgKGNvbXBhcmUgPT0gMCkgCisgICAgICB7CisgICAgICAgIGFsZXJ0KFhpbmhhLl9sYygiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIiwgJ01vb3Rvb2xzRmlsZU1hbmFnZXInKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIG91dHBhcmFtID0geworICAgICAgICAgIGZfaHJlZiA6ICcnLAorICAgICAgICAgIGZfdGl0bGUgOiAnJywKKyAgICAgICAgICBmX3RhcmdldCA6ICcnLCAgICAgICAgICAKKyAgICAgICAgICBmX3R5cGU6ICcnLAorICAgICAgICAgIGJhc2VIcmVmOiBlZGl0b3IuY29uZmlnLmJhc2VIcmVmCisgICAgICB9OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgb3V0cGFyYW0gPSB7CisgICAgICAgICAgZl9ocmVmICAgOiBYaW5oYS5pc19pZSA/IGxpbmsuaHJlZiA6IGxpbmsuZ2V0QXR0cmlidXRlKCJocmVmIiksCisgICAgICAgICAgZl90aXRsZSAgOiBsaW5rLnRpdGxlLAorICAgICAgICAgIGZfdGFyZ2V0IDogbGluay50YXJnZXQsICAgICAgICAgIAorICAgICAgICAgIGZfdHlwZSAgIDogbGluay50eXBlID8gbGluay50eXBlIDogJycsCisgICAgICAgICAgYmFzZUhyZWY6IGVkaXRvci5jb25maWcuYmFzZUhyZWYKKyAgICAgIH07CisgICAgfQorICAgIAorICAgIHRoaXMuY3VycmVudF9saW5rID0gbGluazsKKyAgICB0aGlzLmN1cnJlbnRfYXR0cmlidXRlcyA9IG91dHBhcmFtOworICAgIAorICAgIGlmKCF0aGlzLkZpbGVNYW5hZ2VyV2lkZ2V0KQorICAgIHsgICAgCisgICAgICB0aGlzLkZpbGVNYW5hZ2VyV2lkZ2V0ID0gbmV3IEZpbGVNYW5hZ2VyKHsKKyAgICAgICAgdXJsOiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmNvbmZpZy5Nb290b29sc0ZpbGVNYW5hZ2VyLmJhY2tlbmQsCisgICAgICAgIGFzc2V0QmFzZVBhdGg6ICBYaW5oYS5nZXRQbHVnaW5EaXIoJ01vb3Rvb2xzRmlsZU1hbmFnZXInKSsnL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cycsCisgICAgICAgIGxhbmd1YWdlOiAgICAgICBfZWRpdG9yX2xhbmcsCisgICAgICAgIHNlbGVjdGFibGU6ICAgICB0cnVlLAorICAgICAgICB1cGxvYWQ6ICAgICAgICAgdGhpcy5waHBjZmcuZmlsZXNfYWxsb3dfdXBsb2FkLAorICAgICAgICBkZXN0cm95OiAgICAgICAgdGhpcy5waHBjZmcuZmlsZXNfYWxsb3dfZGVsZXRlLAorICAgICAgICBjcmVhdGVGb2xkZXJzOiAgdGhpcy5waHBjZmcuZmlsZXNfYWxsb3dfY3JlYXRlX2RpciwgICAKKyAgICAgICAgcmVuYW1lOiAgICAgICAgIHRoaXMucGhwY2ZnLmZpbGVzX2FsbG93X21vdmUsCisgICAgICAgIG1vdmVfb3JfY29weTogICB0aGlzLnBocGNmZy5maWxlc19hbGxvd19tb3ZlLAorICAgICAgICBkb3dubG9hZDogICAgICAgdGhpcy5waHBjZmcuZmlsZXNfYWxsb3dfZG93bmxvYWQsICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBwcm9wYWdhdGVEYXRhOiAgT2JqZWN0Lm1lcmdlKHsnX19mdW5jdGlvbic6ICdmaWxlLW1hbmFnZXInfSwgdGhpcy5lZGl0b3IuY29uZmlnLk1vb3Rvb2xzRmlsZU1hbmFnZXIuYmFja2VuZF9kYXRhKSwKKyAgICAgICAgcHJvcGFnYXRlVHlwZTogICdQT1NUJywKKyAgICAgIAorICAgICAgICB1cGxvYWRBdXRoRGF0YTogT2JqZWN0Lm1lcmdlKHsnX19mdW5jdGlvbic6ICdmaWxlLW1hbmFnZXInfSwgdGhpcy5lZGl0b3IuY29uZmlnLk1vb3Rvb2xzRmlsZU1hbmFnZXIuYmFja2VuZF9kYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIG9uQ29tcGxldGU6ICAgICBmdW5jdGlvbihwYXRoLCBmaWxlLCBtZ3IpIHsgc2VsZi5GaWxlTWFuYWdlclJldHVybihwYXRoLGZpbGUpOyB9LAorICAgICAgICBvbkhpZGU6ICAgICAgICAgZnVuY3Rpb24oKSB7IGlmKHRoaXMuc3dmICYmIHRoaXMuc3dmLmJveCkgdGhpcy5zd2YuYm94LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7IH0sCisgICAgICAgIG9uU2hvdzogICAgICAgICBmdW5jdGlvbigpIHsgaWYodGhpcy5zd2YgJiYgdGhpcy5zd2YuYm94KSB0aGlzLnN3Zi5ib3guc3R5bGUuZGlzcGxheSA9ICcnOyB9LAorICAgICAgICBvbkRldGFpbHM6ICAgICAgZnVuY3Rpb24oZGV0YWlscykgCisgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZm8uYWRvcHQoc2VsZi5GaWxlTWFuYWdlckF0dHJpYnV0ZXMoZGV0YWlscykpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICBvbkhpZGVQcmV2aWV3OiAgZnVuY3Rpb24oKQorICAgICAgICAgICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5pZChzZWxmLkZpbGVNYW5hZ2VyQXR0cmlidXRlcygpLnRhYmxlKS5kaXNwb3NlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBzaG93RGlyR2FsbGVyeTogZmFsc2UsCisgICAgICAgIGtleWJvYXJkTmF2aWdhdGlvbjogZmFsc2UsCisgICAgICAgIGxpc3RUeXBlOiAgICAgICAgICAgdGhpcy5waHBjZmcuZmlsZXNfbGlzdF90eXBlLAorICAgICAgICBsaXN0UGFnaW5hdGlvblNpemU6IHRoaXMucGhwY2ZnLmZpbGVzX3BhZ2luYXRpb25fc2l6ZSwKKyAgICAgICAgbGlzdE1heFN1Z2dlc3RlZERpclNpemVGb3JUaHVtYm5haWxzOiB0aGlzLnBocGNmZy5maWxlc19saXN0X21vZGVfb3ZlciwKKyAgICAgICAgZGlyZWN0b3J5OiAgICAgICAgICB0aGlzLnBocGNmZy5maWxlc19saXN0X3N0YXJ0X2luCisgICAgICB9KTsgICAgICAgCisgICAgfQorCisgICAgLy8gSUUxMSB3aGljaCBwcmV0ZW5kcyBpdCBpcyAiZ2Vja28iIGlzIHBhcnRpY3VsYXJseSBmaW5pY2t5IAorICAgIC8vICBhYm91dCBsb3Npbmcgc2VsZWN0aW9uIG90aGVyIGJyb3dzZXJzIG5vdCBzbyBtdWNoLCBidXQgdGhleQorICAgIC8vICAgZG9uJ3Qgc2VlbSB0byBtaW5kIHNhdmluZyBhbmQgcmVzdG9yaW5nIGl0IGFueXdheSwgc28gd2UgCisgICAgLy8gICB3aWxsIGRvIHRoYXQgZm9yIGV2ZXJ5Ym9keQorICAgIGlmKDF8fFhpbmhhLmlzX2llKSB0aGlzLmN1cnJlbnRfc2VsZWN0aW9uID0gdGhpcy5lZGl0b3Iuc2F2ZVNlbGVjdGlvbigpOworICAgIGlmKGxpbmspCisgICAgeyAgICAgIAorICAgICAgICB2YXIgc3JjICA9IFhpbmhhLmlzX2llID8gbGluay5ocmVmIDogbGluay5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKKyAgICAgICAgaWYoIXNyYy5tYXRjaCgvXigoW2Etel0rOil8XC8pL2kpKQorICAgICAgICB7CisgICAgICAgICAgICBzcmMgPSBzZWxmLmVkaXRvci5jb25maWcuYmFzZUhyZWYucmVwbGFjZSgvXC9bXlwvXSokLywgJycpICsgJy8nICsgc3JjOworICAgICAgICAgICAgaWYoc3JjLm1hdGNoKC9eW2Etel0rOi9pKSAmJiAhc2VsZi5waHBjZmcuZmlsZXNfdXJsLm1hdGNoKC9eW2Etel06L2kpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzcmMgPSBzcmMucmVwbGFjZSgvXlthLXpdKzooXC9cLz8pW14vXSovaSwgJycpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBHZXQgZXhwbG9kZWQgcGF0aCB3aXRob3V0IHRoZSBiYXNlIHVybAorICAgICAgICB2YXIgcGF0aCA9IHNyYy5yZXBsYWNlKHNlbGYucGhwY2ZnLmZpbGVzX3VybCsnLycsICcnKS5zcGxpdCgnLycpOworICAgICAgICAKKyAgICAgICAgLy8gUHVsbCBvZmYgdGhlIGZpbGUKKyAgICAgICAgdmFyIGJhc2UgPSBwYXRoLnBvcCgpOyAgICAgIAorICAgICAgICAKKyAgICAgICAgLy8gSm9pbiB0aGUgcGF0aCBiYWNrIHRvZ2V0aG9yIChubyBiYXNlIHVybCwgdHJhaWxpbmcgc2xhc2ggaWYgdGhlIHBhdGggaGFzIGFueSBsZW5ndGgpCisgICAgICAgIHBhdGggPSBwYXRoLmxlbmd0aCA/IChwYXRoLmpvaW4oJy8nKSArICcvJykgOiAnJzsKKyAgICAgICAgCisgICAgICAgIC8vIGZlZWQgdG8gd2lkZ2V0CisgICAgICAgIHRoaXMuRmlsZU1hbmFnZXJXaWRnZXQuc2hvdyhudWxsLCBwYXRoLCBiYXNlKTsgICAgICAgICAgCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB0aGlzLkZpbGVNYW5hZ2VyV2lkZ2V0LnNob3coKTsgICAgCisgICAgfSAgICAKK307CisKKy8vIFRha2UgdGhlIHZhbHVlcyBmcm9tIHRoZSBmaWxlIHNlbGVjdGlvbiBhbmQgbWFrZSBpdCAob3IgdXBkYXRlKSBhIGxpbmsKK01vb3Rvb2xzRmlsZU1hbmFnZXIucHJvdG90eXBlLkZpbGVNYW5hZ2VyUmV0dXJuID0gZnVuY3Rpb24ocGF0aCwgZmlsZSkKK3sKKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworICB2YXIgYSAgICAgID0gdGhpcy5jdXJyZW50X2xpbms7CisgIAorICB2YXIgcGFyYW0gPSB0aGlzLkZpbGVNYW5hZ2VyQXR0cmlidXRlcygpOyAgCisgIHBhcmFtLmZfaHJlZiA9IHBhdGg7CisKKyAgLy8gSUUxMSB3aGljaCBwcmV0ZW5kcyBpdCBpcyAiZ2Vja28iIGlzIHBhcnRpY3VsYXJseSBmaW5pY2t5IAorICAvLyAgYWJvdXQgbG9zaW5nIHNlbGVjdGlvbiBvdGhlciBicm93c2VycyBub3Qgc28gbXVjaCwgYnV0IHRoZXkKKyAgLy8gICBkb24ndCBzZWVtIHRvIG1pbmQgc2F2aW5nIGFuZCByZXN0b3JpbmcgaXQgYW55d2F5LCBzbyB3ZSAKKyAgLy8gICB3aWxsIGRvIHRoYXQgZm9yIGV2ZXJ5Ym9keQorICBpZigxfHxYaW5oYS5pc19pZSkgdGhpcy5lZGl0b3IucmVzdG9yZVNlbGVjdGlvbih0aGlzLmN1cnJlbnRfc2VsZWN0aW9uKTsgIAorICBpZiAoIWEpCisgIHsKKyAgICB0cnkgCisgICAgeworICAgICAgZWRpdG9yLl9kb2MuZXhlY0NvbW1hbmQoImNyZWF0ZWxpbmsiLCBmYWxzZSwgcGFyYW0uZl9ocmVmKTsKKyAgICAgIGEgPSBlZGl0b3IuZ2V0UGFyZW50RWxlbWVudCgpOworICAgICAgdmFyIHNlbCA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTsKKyAgICAgIHZhciByYW5nZSA9IGVkaXRvci5jcmVhdGVSYW5nZShzZWwpOworICAgICAgaWYgKCFYaW5oYS5pc19pZSkgCisgICAgICB7CisgICAgICAgIGEgPSByYW5nZS5zdGFydENvbnRhaW5lcjsKKyAgICAgICAgaWYgKCEvXmEkL2kudGVzdChhLnRhZ05hbWUpKSAKKyAgICAgICAgeworICAgICAgICAgIGEgPSBhLm5leHRTaWJsaW5nOworICAgICAgICAgIGlmIChhID09IG51bGwpCisgICAgICAgICAgeworICAgICAgICAgICAgYSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfSBjYXRjaChlKSB7fQorICB9CisgIGVsc2UgCisgIHsKKyAgICB2YXIgaHJlZiA9IHBhcmFtLmZfaHJlZi50cmltKCk7CisgICAgZWRpdG9yLnNlbGVjdE5vZGVDb250ZW50cyhhKTsKKyAgICBpZiAoaHJlZiA9PSAiIikgCisgICAgeworICAgICAgZWRpdG9yLl9kb2MuZXhlY0NvbW1hbmQoInVubGluayIsIGZhbHNlLCBudWxsKTsKKyAgICAgIGVkaXRvci51cGRhdGVUb29sYmFyKCk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAgYS5ocmVmID0gaHJlZjsKKyAgICB9CisgIH0KKyAgCisgIGlmICghKGEgJiYgL15hJC9pLnRlc3QoYS50YWdOYW1lKSkpCisgIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgCisgIGEudHlwZSA9IHBhcmFtLmZfdHlwZS50cmltKCk7CisgIGEudGFyZ2V0ID0gcGFyYW0uZl90YXJnZXQudHJpbSgpOworICBhLnRpdGxlID0gcGFyYW0uZl90aXRsZS50cmltKCk7CisgIGVkaXRvci5zZWxlY3ROb2RlQ29udGVudHMoYSk7CisgIGVkaXRvci51cGRhdGVUb29sYmFyKCk7Cit9OworCisvKiogUmV0dXJuIGEgRE9NIGZyYWdtZW50IHdoaWNoIGhhcyBhbGwgdGhlIGZpZWxkcyBuZWVkZWQgdG8gc2V0IHRoZQorICogIGF0dHJpYnV0ZXMgZm9yIGEgbGluayBnaXZlbiBhIHN0cnVjdHVyZSBvZiBpbml0aWFsIHZhbHVlcy4KKyAqIAorICogIE9SIHJldHVybiBhIHN0cnVjdHVyZSBvZiB2YWx1ZXMgdGFrZW4gZnJvbSB0aGUgY3VycmVudGx5IHRhYmxlLgorICovCisgCitNb290b29sc0ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5GaWxlTWFuYWdlckF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoZGV0YWlscykKK3sKKworICB2YXIgc2VsZiA9IHRoaXM7CisgIHNlbGYuX0xhc3RGaWxlRGV0YWlscyA9IGRldGFpbHM7CisgIAorICBmdW5jdGlvbiBmKG5hbWUpCisgIHsKKyAgICB2YXIgZSA9IHNlbGYuX0ZpbGVNYW5hZ2VyQXR0cmlidXRlc1RhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOworICAgIGZvcih2YXIgaSA9IDA7IGkgPCBlLmxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgIGlmKGVbaV0ubmFtZSA9PSBuYW1lKSByZXR1cm4gZVtpXTsKKyAgICB9CisgICAgCisgICAgdmFyIGUgPSBzZWxmLl9GaWxlTWFuYWdlckF0dHJpYnV0ZXNUYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2VsZWN0Jyk7CisgICAgZm9yKHZhciBpID0gMDsgaSA8IGUubGVuZ3RoOyBpKyspCisgICAgeworICAgICAgaWYoZVtpXS5uYW1lID09IG5hbWUpIHJldHVybiBlW2ldOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbnVsbDsgICAgCisgIH0KKyAgCisgIGZ1bmN0aW9uIHMobmFtZSwgdmFsdWUpCisgIHsKKyAgICBmb3IodmFyIGkgPSAwOyBpIDwgZihuYW1lKS5vcHRpb25zLmxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgIGlmKGYobmFtZSkub3B0aW9uc1tpXS52YWx1ZSA9PSB2YWx1ZSkgCisgICAgICB7CisgICAgICAgLy8gZihuYW1lKS5vcHRpb25zW2ldLnNlbGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgZihuYW1lKS5zZWxlY3RlZEluZGV4ID0gaTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfQorICAKKyAgaWYoIXRoaXMuX0ZpbGVNYW5hZ2VyQXR0cmlidXRlc1RhYmxlKQorICB7CisgICAgdGhpcy5fRmlsZU1hbmFnZXJBdHRyaWJ1dGVzVGFibGUgPSAoZnVuY3Rpb24oKSB7CisgICAgICB2YXIgZGl2ICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgCisgICAgICB2YXIgaDIgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDInKTsKKyAgICAgIGgyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdMaW5rIEF0dHJpYnV0ZXMnKSk7ICAgICAgICAgICAgCisgICAgICBkaXYuYXBwZW5kQ2hpbGQoaDIpOworICAgICAgICAgICAgCisgICAgICB2YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpOworICAgICAgZGl2LmFwcGVuZENoaWxkKHRhYmxlKTsKKyAgICAgIAorICAgICAgdGFibGUuY2xhc3NOYW1lID0gJ2ZpbGVtYW5hZ2VyLWV4dGVuZGVkLW9wdGlvbnMnOworICAgICAgdmFyIHRib2R5ID0gdGFibGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGJvZHknKSk7CisgICAgICAKKyAgICAgIHsgLy8gVGl0bGUKKyAgICAgICAgdmFyIHRyICAgID0gdGJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKSk7CisgICAgICAgIHZhciB0aCAgICA9IHRyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJykpOworICAgICAgICB2YXIgbGFiZWwgPSB0aC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnVGl0bGU6JykpOworICAgICAgICAKKyAgICAgICAgdmFyIHRkICAgID0gdHIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKSk7CisgICAgICAgIHZhciBpbnB1dCA9IHRkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpOworICAgICAgICAKKyAgICAgICAgdGQuY29sU3BhbiAgID0gNjsKKyAgICAgICAgaW5wdXQubmFtZSAgID0gJ2ZfdGl0bGUnOworICAgICAgICBpbnB1dC50eXBlID0gJ3RleHQnOworICAgICAgICB0aC5jbGFzc05hbWUgPSB0ZC5jbGFzc05hbWUgPSAnZmlsZW1hbmFnZXItZl90aXRsZSc7ICAgICAgCisgICAgICB9CisgICAgICAKKyAgICAgIHsgLy8gQ29udGVudCBUeXBlCisgICAgICAgIHZhciB0ciAgICA9IHRib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJykpOworICAgICAgICB2YXIgdGggICAgPSB0ci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpKTsKKyAgICAgICAgdmFyIGxhYmVsID0gdGguYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1R5cGU6JykpOworICAgICAgICAKKyAgICAgICAgdmFyIHRkICAgID0gdHIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKSk7CisgICAgICAgIHZhciBpbnB1dCA9IHRkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpOworICAgICAgICAKKyAgICAgICAgdGQuY29sU3BhbiAgID0gNjsKKyAgICAgICAgaW5wdXQubmFtZSAgID0gJ2ZfdHlwZSc7CisgICAgICAgIGlucHV0LnR5cGUgPSAndGV4dCc7CisgICAgICAgIHRoLmNsYXNzTmFtZSA9IHRkLmNsYXNzTmFtZSA9ICdmaWxlbWFuYWdlci1mX3R5cGUnOyAgICAgIAorICAgICAgfQorICAgICAgICAgICAKKyAgICAgIHsgLy8gVGFyZ2V0CisgICAgICAgIHZhciB0ciAgICA9IHRib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJykpOworICAgICAgICAKKyAgICAgICAgeyAvLyBUYXJnZXQKKyAgICAgICAgICB2YXIgdGggICAgPSB0ci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpKTsKKyAgICAgICAgICB2YXIgbGFiZWwgPSB0aC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnT3BlbiBJbjonKSk7CisgICAgICAgICAgCisgICAgICAgICAgdmFyIHRkICAgID0gdHIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKSk7CisgICAgICAgICAgdGQuY29sU3BhbiA9IDI7CisgICAgICAgICAgdmFyIGlucHV0ID0gdGQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0JykpOworICAgICAgICAgIAorICAgICAgICAgIGlucHV0Lm5hbWUgICA9ICdmX3RhcmdldCc7ICAgICAgICAgIAorICAgICAgICAgIGlucHV0Lm9wdGlvbnNbMF0gPSBuZXcgT3B0aW9uKCcnKTsKKyAgICAgICAgICBpbnB1dC5vcHRpb25zWzFdID0gbmV3IE9wdGlvbignTmV3IFdpbmRvdycsICdfYmxhbmsnKTsKKyAgICAgICAgICBpbnB1dC5vcHRpb25zWzJdID0gbmV3IE9wdGlvbignVG9wIEZyYW1lJywgJ190b3AnKTsKKyAgICAgICAgICBpbnB1dC5vcHRpb25zWzNdID0gbmV3IE9wdGlvbignT3RoZXIgRnJhbWU6JywgJycpOworICAgICAgICAgIAorICAgICAgICAgIFhpbmhhLl9hZGRFdmVudChpbnB1dCwgJ2NoYW5nZScsIGZ1bmN0aW9uKCkKKyAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmKGYoJ2ZfdGFyZ2V0Jykuc2VsZWN0ZWRJbmRleCA9PSAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmKCdmX290aGVyVGFyZ2V0Jykuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZignZl9vdGhlclRhcmdldCcpLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAgICAgICAKKyAgICAgICAgICB2YXIgaW5wdXQgPSB0ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTsKKyAgICAgICAgICBpbnB1dC5uYW1lICAgPSAnZl9vdGhlclRhcmdldCc7CisgICAgICAgICAgaW5wdXQuc2l6ZSA9IDc7ICAgIAorICAgICAgICAgIGlucHV0LnR5cGUgPSAndGV4dCc7ICAgICAKKyAgICAgICAgICBpbnB1dC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7CisgICAgICAgICAgCisgICAgICAgICAgdGguY2xhc3NOYW1lID0gdGQuY2xhc3NOYW1lID0gJ2ZpbGVtYW5hZ2VyLWZfdGFyZ2V0JzsgICAgICAgICAgICAgIAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgfQorICAgICAgICAgICAgCisgICAgICByZXR1cm4gZGl2OworICAgIH0pKCk7ICAgICAgICAKKyAgfQorICAKKyAgaWYodGhpcy5jdXJyZW50X2F0dHJpYnV0ZXMpCisgIHsKKyAgICBmKCdmX3RpdGxlJykudmFsdWUgICAgPSB0aGlzLmN1cnJlbnRfYXR0cmlidXRlcy5mX3RpdGxlOworICAgIGYoJ2ZfdHlwZScpLnZhbHVlICAgICA9IHRoaXMuY3VycmVudF9hdHRyaWJ1dGVzLmZfdHlwZTsKKyAgICAKKyAgICBpZih0aGlzLmN1cnJlbnRfYXR0cmlidXRlcy5mX3RhcmdldCkKKyAgICB7CisgICAgICBpZighcygnZl90YXJnZXQnLCB0aGlzLmN1cnJlbnRfYXR0cmlidXRlcy5mX3RhcmdldCkpCisgICAgICB7CisgICAgICAgIGYoJ2ZfdGFyZ2V0Jykuc2VsZWN0ZWRJbmRleCA9IDM7CisgICAgICAgIGYoJ2Zfb3RoZXJUYXJnZXQnKS52YWx1ZSA9IHRoaXMuY3VycmVudF9hdHRyaWJ1dGVzLmZfdGFyZ2V0OworICAgICAgfSAgICAgCisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGYoJ2Zfb3RoZXJUYXJnZXQnKS52YWx1ZSA9ICcnOworICAgICAgfQorICAgIH0KKyAgICAKKyAgICB0aGlzLmN1cnJlbnRfYXR0cmlidXRlcyA9IG51bGw7CisgIH0KKyAgCisgIC8vIElmIG5vIGRldGFpbHMgd2VyZSBzdXBwbGllZCwgd2UgcmV0dXJuIHRoZSBjdXJyZW50IG9uZXMKKyAgaWYoIWRldGFpbHMpIAorICB7CisgICAgdmFyIGRldGFpbHMgPSB7CisgICAgICBmX3RpdGxlOiAgZignZl90aXRsZScpLnZhbHVlLAorICAgICAgZl90eXBlOiAgZignZl90eXBlJykudmFsdWUsCisgICAgICBmX3RhcmdldDogZignZl90YXJnZXQnKS5zZWxlY3RlZEluZGV4IDwgMyA/IGYoJ2ZfdGFyZ2V0Jykub3B0aW9uc1tmKCdmX3RhcmdldCcpLnNlbGVjdGVkSW5kZXhdLnZhbHVlIDogZignZl9vdGhlclRhcmdldCcpLnZhbHVlLAorICAgICAgCisgICAgICB0YWJsZTogdGhpcy5fRmlsZU1hbmFnZXJBdHRyaWJ1dGVzVGFibGUKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGRldGFpbHM7CisgIH0KKyAgCisgIC8vIElmIGRldGFpbHMgd2VyZSBzdXBwbGllZCwgd2Ugc2V0IHRoZSBhcHByb3ByaWF0ZSBvbmVzLiAgICAKKyAgaWYoZGV0YWlscy5taW1lKSBmKCdmX3R5cGUnKS52YWx1ZSA9IGRldGFpbHMubWltZTsKKyAgCisgIGYoJ2ZfdGFyZ2V0Jykuc3R5bGUudmlzaWJpbGl0eSA9ICcnOyAvLyBFbnN1cmUgdGhhdCB0aGUgc2VsZWN0IGhhc24ndCBiZWVuIGhpZGRlbiBieSBhbiBvdmVybGF5IGFuZCBub3QgcHV0IGJhY2sKKyAgCisgIGlmKGYoJ2ZfdGFyZ2V0Jykuc2VsZWN0ZWRJbmRleCA9PSAzKQorICB7CisgICAgZignZl9vdGhlclRhcmdldCcpLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7CisgIH0KKyAgZWxzZQorICB7CisgICAgZignZl9vdGhlclRhcmdldCcpLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJzsKKyAgfQorICAKKyAgcmV0dXJuIHRoaXMuX0ZpbGVNYW5hZ2VyQXR0cmlidXRlc1RhYmxlOworfTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9Nb290b29sc0ZpbGVNYW5hZ2VyLkltYWdlTWFuYWdlci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9Nb290b29sc0ZpbGVNYW5hZ2VyLkltYWdlTWFuYWdlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODc3ZTkxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL01vb3Rvb2xzRmlsZU1hbmFnZXIuSW1hZ2VNYW5hZ2VyLmpzCkBAIC0wLDAgKzEsNjg1IEBACisvKioKKyAgPSBNb290b29scyBGaWxlIE1hbmFnZXIgPQorICA9PSBJbWFnZSBNYW5hZ2VyID09CisgIAorICBUaGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBleHRlbmQgdGhlIE1vb3Rvb2xzRmlsZU1hbmFnZXIgcGx1Z2luIHdpdGggc3VwcG9ydAorICBmb3IgbWFuYWdpbmcgaW1hZ2VzLiAgVGhpcyBmaWxlIGlzIGxvYWRlZCBhdXRvbWF0aWNhbGx5LgorICAgICAKKyAqIEBhdXRob3IgJEF1dGhvciQKKyAqIEB2ZXJzaW9uICRJZCQKKyAqIEBwYWNrYWdlIE1vb3Rvb2xzRmlsZU1hbmFnZXIKKyAqLworCisKKy8qKiBPcGVuIHRoZSBJbWFnZSBNYW5hZ2VyIHZlcnNpb24gb2YgdGhlIHBsdWdpbi4KKyAqCisgKiAgQ2FsbGVkIGZyb20gdGhlIF9pbnNlcnRJbWFnZSBtZXRob2Qgb2YgdGhlIGVkaXRvciAoc2VlIHRoZSBob29rdXAgaW4gTW9vdG9vbHNGaWxlTWFuYWdlci5qcykKKyAqICBPcHRpb25hbCBpbWFnZSBmb3IgZnV0dXJlIGV4dGVybmFsIHVzZS4KKyAqLworIAorTW9vdG9vbHNGaWxlTWFuYWdlci5wcm90b3R5cGUuT3BlbkltYWdlTWFuYWdlciA9IGZ1bmN0aW9uKGltYWdlKQoreworICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7ICAvLyBmb3IgbmVzdGVkIGZ1bmN0aW9ucworICB2YXIgc2VsZiAgID0gdGhpczsKKyAgdmFyIG91dHBhcmFtID0gbnVsbDsKKyAgCisgIGlmICh0eXBlb2YgaW1hZ2UgPT0gInVuZGVmaW5lZCIpIAorICB7CisgICAgaW1hZ2UgPSBlZGl0b3IuZ2V0UGFyZW50RWxlbWVudCgpOworICAgIGlmIChpbWFnZSAmJiAhL15pbWckL2kudGVzdChpbWFnZS50YWdOYW1lKSkKKyAgICB7CisgICAgICBpbWFnZSA9IG51bGw7CisgICAgfQorICB9CisKKyAgaWYgKCBpbWFnZSApCisgIHsKKyAgICBvdXRwYXJhbSA9CisgICAgICB7CisgICAgICAgIGZfdXJsICAgIDogaW1hZ2UuZ2V0QXR0cmlidXRlKCdzcmMnKSwgLy9YaW5oYS5pc19pZSA/IGltYWdlLnNyYyA6IGltYWdlLnNyYywKKyAgICAgICAgZl9hbHQgICAgOiBpbWFnZS5hbHQsCisgICAgICAgIGZfYm9yZGVyIDogaW1hZ2Uuc3R5bGUuYm9yZGVyV2lkdGggPyBpbWFnZS5zdHlsZS5ib3JkZXJXaWR0aCA6IGltYWdlLmJvcmRlciwKKyAgICAgICAgZl9hbGlnbiAgOiBYaW5oYS5oYXNBdHRyaWJ1dGUoaW1hZ2UsICdhbGlnbicpID8gaW1hZ2UuYWxpZ24gOiBudWxsLAorICAgICAgICBmX3BhZGRpbmc6IGltYWdlLnN0eWxlLnBhZGRpbmcsCisgICAgICAgIGZfbWFyZ2luIDogaW1hZ2Uuc3R5bGUubWFyZ2luLAorICAgICAgICBmX3dpZHRoICA6ICBYaW5oYS5oYXNBdHRyaWJ1dGUoaW1hZ2UsICd3aWR0aCcpID8gaW1hZ2Uud2lkdGggOiBudWxsLAorICAgICAgICBmX2hlaWdodCAgOiBYaW5oYS5oYXNBdHRyaWJ1dGUoaW1hZ2UsICdoZWlnaHQnKSA/IGltYWdlLmhlaWdodCA6IG51bGwsCisgICAgICAgIGZfYmFja2dyb3VuZENvbG9yOiBpbWFnZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IsCisgICAgICAgIGZfYm9yZGVyQ29sb3I6IGltYWdlLnN0eWxlLmJvcmRlckNvbG9yLAorICAgICAgICBmX2hzcGFjZTogIGltYWdlLmhzcGFjZSAmJiBpbWFnZS5oc3BhY2UgIT0gJy0xJyA/IHBhcnNlSW50KGltYWdlLmhzcGFjZSkgOiBudWxsLAorICAgICAgICBmX3ZzcGFjZTogaW1hZ2UudnNwYWNlICYmIGltYWdlLnZzcGFjZSAhPSAnLTEnID8gcGFyc2VJbnQoaW1hZ2UudnNwYWNlKSA6IG51bGwKKyAgICAgIH07CisKKyAgICBvdXRwYXJhbS5mX2JvcmRlciAgPSB0aGlzLnNob3J0U2l6ZShvdXRwYXJhbS5mX2JvcmRlcik7CisgICAgb3V0cGFyYW0uZl9wYWRkaW5nID0gdGhpcy5zaG9ydFNpemUob3V0cGFyYW0uZl9wYWRkaW5nKTsKKyAgICBvdXRwYXJhbS5mX21hcmdpbiAgPSB0aGlzLnNob3J0U2l6ZShvdXRwYXJhbS5mX21hcmdpbik7CisgICAgICAgIAorICAgIG91dHBhcmFtLmZfYmFja2dyb3VuZENvbG9yID0gdGhpcy5jb252ZXJ0VG9IZXgob3V0cGFyYW0uZl9iYWNrZ3JvdW5kQ29sb3IpOworICAgIG91dHBhcmFtLmZfYm9yZGVyQ29sb3IgPSB0aGlzLmNvbnZlcnRUb0hleChvdXRwYXJhbS5mX2JvcmRlckNvbG9yKTsKKyAgfQorICAgCisgIHRoaXMuY3VycmVudF9pbWFnZSAgICAgICAgPSBpbWFnZTsKKyAgdGhpcy5jdXJyZW50X2F0dHJpYnV0ZXMgICA9IG91dHBhcmFtOworICAKKyAgaWYoIXRoaXMuSW1hZ2VNYW5hZ2VyV2lkZ2V0KQorICB7CisgICAgdGhpcy5JbWFnZU1hbmFnZXJXaWRnZXQgPSBuZXcgRmlsZU1hbmFnZXIoeworICAgICAgdXJsOiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmNvbmZpZy5Nb290b29sc0ZpbGVNYW5hZ2VyLmJhY2tlbmQsCisgICAgICBhc3NldEJhc2VQYXRoOiAgWGluaGEuZ2V0UGx1Z2luRGlyKCdNb290b29sc0ZpbGVNYW5hZ2VyJykrJy9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMnLAorICAgICAgbGFuZ3VhZ2U6ICAgICAgIF9lZGl0b3JfbGFuZywKKyAgICAgIHNlbGVjdGFibGU6ICAgICB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgdXBsb2FkOiAgICAgICAgIHRoaXMucGhwY2ZnLmltYWdlc19hbGxvd191cGxvYWQsCisgICAgICBkZXN0cm95OiAgICAgICAgdGhpcy5waHBjZmcuaW1hZ2VzX2FsbG93X2RlbGV0ZSwKKyAgICAgIGNyZWF0ZUZvbGRlcnM6ICB0aGlzLnBocGNmZy5pbWFnZXNfYWxsb3dfY3JlYXRlX2RpciwKKyAgICAgIHJlbmFtZTogICAgICAgICB0aGlzLnBocGNmZy5pbWFnZXNfYWxsb3dfbW92ZSwKKyAgICAgIG1vdmVfb3JfY29weTogICB0aGlzLnBocGNmZy5pbWFnZXNfYWxsb3dfbW92ZSwKKyAgICAgIGRvd25sb2FkOiAgICAgICB0aGlzLnBocGNmZy5pbWFnZXNfYWxsb3dfZG93bmxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgcHJvcGFnYXRlRGF0YTogIE9iamVjdC5tZXJnZSh7J19fZnVuY3Rpb24nOiAnaW1hZ2UtbWFuYWdlcid9LCB0aGlzLmVkaXRvci5jb25maWcuTW9vdG9vbHNGaWxlTWFuYWdlci5iYWNrZW5kX2RhdGEpLAorICAgICAgcHJvcGFnYXRlVHlwZTogICdQT1NUJywKKyAgICAgIAorICAgICAgdXBsb2FkQXV0aERhdGE6IE9iamVjdC5tZXJnZSh7J19fZnVuY3Rpb24nOiAnaW1hZ2UtbWFuYWdlcid9LCB0aGlzLmVkaXRvci5jb25maWcuTW9vdG9vbHNGaWxlTWFuYWdlci5iYWNrZW5kX2RhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgb25Db21wbGV0ZTogICAgIGZ1bmN0aW9uKHBhdGgsIGZpbGUsIG1ncikgeyBzZWxmLkltYWdlTWFuYWdlclJldHVybihwYXRoLGZpbGUpOyB9LAorICAgICAgb25IaWRlOiAgICAgICAgIGZ1bmN0aW9uKCkgeyBpZih0aGlzLnN3ZiAmJiB0aGlzLnN3Zi5ib3gpIHRoaXMuc3dmLmJveC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9LAorICAgICAgb25TaG93OiAgICAgICAgIGZ1bmN0aW9uKCkgeyBpZih0aGlzLnN3ZiAmJiB0aGlzLnN3Zi5ib3gpIHRoaXMuc3dmLmJveC5zdHlsZS5kaXNwbGF5ID0gJyc7ICAgICB9LAorICAgICAgb25EZXRhaWxzOiAgICAgIGZ1bmN0aW9uKGRldGFpbHMpIAorICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZm8uYWRvcHQoc2VsZi5JbWFnZU1hbmFnZXJBdHRyaWJ1dGVzKGRldGFpbHMpKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgc29tZSBtZXRhIGRhdGEgd2UgZG9uJ3QgbmVlZCB0byBzZWUsIG1lc3NlcyB1cCB0aGUgZm9ybWF0dGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuaW5mby5nZXRFbGVtZW50KCcuZmlsZW1hbmFnZXItcHJldmlldyBkbCtwJykpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5mby5nZXRFbGVtZW50KCcuZmlsZW1hbmFnZXItcHJldmlldyBkbCtwJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICBvbkhpZGVQcmV2aWV3OiAgZnVuY3Rpb24oKQorICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmlkKHNlbGYuSW1hZ2VNYW5hZ2VyQXR0cmlidXRlcygpLnRhYmxlKS5kaXNwb3NlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgc2hvd0RpckdhbGxlcnk6IGZhbHNlLAorICAgICAga2V5Ym9hcmROYXZpZ2F0aW9uOiBmYWxzZSwKKyAgICAgIGxpc3RUeXBlOiAgICAgICAgICAgdGhpcy5waHBjZmcuaW1hZ2VzX2xpc3RfdHlwZSwKKyAgICAgIGxpc3RQYWdpbmF0aW9uU2l6ZTogdGhpcy5waHBjZmcuaW1hZ2VzX3BhZ2luYXRpb25fc2l6ZSwKKyAgICAgIGxpc3RNYXhTdWdnZXN0ZWREaXJTaXplRm9yVGh1bWJuYWlsczogdGhpcy5waHBjZmcuaW1hZ2VzX2xpc3RfbW9kZV9vdmVyLAorICAgICAgZGlyZWN0b3J5OiAgICAgICAgICB0aGlzLnBocGNmZy5pbWFnZXNfbGlzdF9zdGFydF9pbgorICAgIH0pOyAgICAgICAgCisgIH0KKyAgCisgIC8vIElFMTEgd2hpY2ggcHJldGVuZHMgaXQgaXMgImdlY2tvIiBpcyBwYXJ0aWN1bGFybHkgZmluaWNreSAKKyAgLy8gIGFib3V0IGxvc2luZyBzZWxlY3Rpb24gb3RoZXIgYnJvd3NlcnMgbm90IHNvIG11Y2gsIGJ1dCB0aGV5CisgIC8vICAgZG9uJ3Qgc2VlbSB0byBtaW5kIHNhdmluZyBhbmQgcmVzdG9yaW5nIGl0IGFueXdheSwgc28gd2UgCisgIC8vICAgd2lsbCBkbyB0aGF0IGZvciBldmVyeWJvZHkKKyAgaWYoMXx8WGluaGEuaXNfaWUpIHRoaXMuY3VycmVudF9zZWxlY3Rpb24gPSB0aGlzLmVkaXRvci5zYXZlU2VsZWN0aW9uKCk7CisgIAorICBpZihzZWxmLmN1cnJlbnRfaW1hZ2UpCisgIHsgICAgICAKKyAgICAgIHZhciBzcmMgID0gc2VsZi5jdXJyZW50X2ltYWdlLmdldEF0dHJpYnV0ZSgnc3JjJyk7CisgICAgICBpZighc3JjLm1hdGNoKC9eKChbYS16XSs6KXxcLykvaSkpCisgICAgICB7CisgICAgICAgICAgc3JjID0gc2VsZi5lZGl0b3IuY29uZmlnLmJhc2VIcmVmLnJlcGxhY2UoL1wvW15cL10qJC8sICcnKSArICcvJyArIHNyYzsKKyAgICAgICAgICBpZihzcmMubWF0Y2goL15bYS16XSs6L2kpICYmICFzZWxmLnBocGNmZy5pbWFnZXNfdXJsLm1hdGNoKC9eW2Etel06L2kpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHNyYyA9IHNyYy5yZXBsYWNlKC9eW2Etel0rOihcL1wvPylbXi9dKi9pLCAnJyk7CisgICAgICAgICAgfQorICAgICAgfQorICAgICAgCisgICAgICAvLyBHZXQgZXhwbG9kZWQgcGF0aCB3aXRob3V0IHRoZSBiYXNlIHVybAorICAgICAgdmFyIHBhdGggPSBzcmMucmVwbGFjZShzZWxmLnBocGNmZy5pbWFnZXNfdXJsKycvJywgJycpLnNwbGl0KCcvJyk7CisgICAgICAKKyAgICAgIC8vIFB1bGwgb2ZmIHRoZSBmaWxlCisgICAgICB2YXIgYmFzZSA9IHBhdGgucG9wKCk7ICAgICAgCisgICAgICAKKyAgICAgIC8vIEpvaW4gdGhlIHBhdGggYmFjayB0b2dldGhvciAobm8gYmFzZSB1cmwsIHRyYWlsaW5nIHNsYXNoIGlmIHRoZSBwYXRoIGhhcyBhbnkgbGVuZ3RoKQorICAgICAgcGF0aCA9IHBhdGgubGVuZ3RoID8gKHBhdGguam9pbignLycpICsgJy8nKSA6ICcnOworICAgICAgCisgICAgICAvLyBmZWVkIHRvIHdpZGdldAorICAgICAgdGhpcy5JbWFnZU1hbmFnZXJXaWRnZXQuc2hvdyhudWxsLCBwYXRoLCBiYXNlKTsgICAgICAgICAgCisgIH0KKyAgZWxzZQorICB7CisgICAgdGhpcy5JbWFnZU1hbmFnZXJXaWRnZXQuc2hvdygpOyAgICAKKyAgfQorfTsKKworLyoqIFJldHVybiBhIERPTSBmcmFnbWVudCB3aGljaCBoYXMgYWxsIHRoZSBmaWVsZHMgbmVlZGVkIHRvIHNldCB0aGUKKyAqICBhdHRyaWJ1dGVzIGZvciBhbiBpbWFnZSBnaXZlbiBhIHN0cnVjdHVyZSBvZiBpbml0aWFsIHZhbHVlcy4KKyAqIAorICogIE9SIHJldHVybiBhIHN0cnVjdHVyZSBvZiB2YWx1ZXMgdGFrZW4gZnJvbSB0aGUgY3VycmVudGx5IHRhYmxlLgorICovCisgCitNb290b29sc0ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5JbWFnZU1hbmFnZXJBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKGRldGFpbHMpCit7CisKKyAgdmFyIHNlbGYgPSB0aGlzOworICBzZWxmLl9MYXN0SW1hZ2VEZXRhaWxzID0gZGV0YWlsczsKKyAgCisgIGZ1bmN0aW9uIGYobmFtZSkKKyAgeworICAgIHZhciBlID0gc2VsZi5fSW1hZ2VNYW5hZ2VyQXR0cmlidXRlc1RhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOworICAgIGZvcih2YXIgaSA9IDA7IGkgPCBlLmxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgIGlmKGVbaV0ubmFtZSA9PSBuYW1lKSByZXR1cm4gZVtpXTsKKyAgICB9CisgICAgCisgICAgdmFyIGUgPSBzZWxmLl9JbWFnZU1hbmFnZXJBdHRyaWJ1dGVzVGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NlbGVjdCcpOworICAgIGZvcih2YXIgaSA9IDA7IGkgPCBlLmxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgIGlmKGVbaV0ubmFtZSA9PSBuYW1lKSByZXR1cm4gZVtpXTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG51bGw7ICAgIAorICB9CisgIAorICBmdW5jdGlvbiBzKG5hbWUsIHZhbHVlKQorICB7CisgICAgZm9yKHZhciBpID0gMDsgaSA8IGYobmFtZSkub3B0aW9ucy5sZW5ndGg7IGkrKykKKyAgICB7CisgICAgICBpZihmKG5hbWUpLm9wdGlvbnNbaV0udmFsdWUgPT0gdmFsdWUpIAorICAgICAgeworICAgICAgIC8vIGYobmFtZSkub3B0aW9uc1tpXS5zZWxlY3RlZCA9IHRydWU7CisgICAgICAgIGYobmFtZSkuc2VsZWN0ZWRJbmRleCA9IGk7CisgICAgICB9CisgICAgfQorICB9CisgIAorICBpZighdGhpcy5fSW1hZ2VNYW5hZ2VyQXR0cmlidXRlc1RhYmxlKQorICB7CisgICAgdGhpcy5fSW1hZ2VNYW5hZ2VyQXR0cmlidXRlc1RhYmxlID0gKGZ1bmN0aW9uKCkgeworICAgICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTsKKyAgICAgIHRhYmxlLmNsYXNzTmFtZSA9ICdmaWxlbWFuYWdlci1leHRlbmRlZC1vcHRpb25zJzsKKyAgICAgIHZhciB0Ym9keSA9IHRhYmxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Rib2R5JykpOworICAgICAgCisgICAgICB7IC8vIERlc2NyaXB0aW9uCisgICAgICAgIHZhciB0ciAgICA9IHRib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJykpOworICAgICAgICB2YXIgdGggICAgPSB0ci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpKTsKKyAgICAgICAgdmFyIGxhYmVsID0gdGguYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0Rlc2NyaXB0aW9uOicpKTsKKyAgICAgICAgCisgICAgICAgIHZhciB0ZCAgICA9IHRyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJykpOworICAgICAgICB2YXIgaW5wdXQgPSB0ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTsKKyAgICAgICAgCisgICAgICAgIHRkLmNvbFNwYW4gICA9IDY7CisgICAgICAgIGlucHV0Lm5hbWUgICA9ICdmX2FsdCc7CisgICAgICAgIGlucHV0LnR5cGUgPSAndGV4dCc7CisgICAgICAgIHRoLmNsYXNzTmFtZSA9IHRkLmNsYXNzTmFtZSA9ICdmaWxlbWFuYWdlci1mX2FsdCc7ICAgICAgCisgICAgICB9CisgICAgICAKKyAgICAgIHsgLy8gV2lkdGgsIENvbnN0cmFpbiwgTWFyZ2luLCAKKyAgICAgICAgdmFyIHRyICAgID0gdGJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKSk7CisgICAgICAgIAorICAgICAgICB7IC8vIFdpZHRoICAgICAgICAKKyAgICAgICAgICB2YXIgdGggICAgPSB0ci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpKTsKKyAgICAgICAgICB2YXIgbGFiZWwgPSB0aC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnV2lkdGg6JykpOworICAgICAgICAgIAorICAgICAgICAgIHZhciB0ZCAgICA9IHRyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJykpOworICAgICAgICAgIHZhciBpbnB1dCA9IHRkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpOworICAgICAgICAgIAorICAgICAgICAgIGlucHV0Lm5hbWUgICA9ICdmX3dpZHRoJzsKKyAgICAgICAgICBpbnB1dC5zaXplID0gNDsgICAgCisgICAgICAgICAgaW5wdXQudHlwZSA9ICd0ZXh0JzsKKyAgICAgICAgICAvLyBAVE9ETyBDb25zdHJhaW4gUmF0aW8KKyAgICAgICAgICB0aC5jbGFzc05hbWUgPSB0ZC5jbGFzc05hbWUgPSAnZmlsZW1hbmFnZXItZl93aWR0aCc7ICAgICAgCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHsgLy8gQ29uc3RyYWluICAgICAgICAKKyAgICAgICAgICAKKyAgICAgICAgICB2YXIgdGQgICAgPSB0ci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpKTsKKyAgICAgICAgICB0ZC5yb3dTcGFuID0gMjsKKyAgICAgICAgICB0ZC5zdHlsZS52ZXJ0aWNhbEFsaWduID0gJ21pZGRsZSc7CisgICAgICAgICAgCisgICAgICAgICAgdmFyIGRpdiAgID0gdGQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7CisgICAgICAgICAgCisgICAgICAgICAgdmFyIGltZyAgID0gZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpKTsKKyAgICAgICAgICBpbWcuc3JjICAgPSAgWGluaGEuZ2V0UGx1Z2luRGlyKCJNb290b29sc0ZpbGVNYW5hZ2VyIikgKyAnL2ltZy9sb2NrZWQuZ2lmJzsKKyAgICAgICAgICBpbWcud2lkdGggPSAyNTsKKyAgICAgICAgICBpbWcuaGVpZ2h0ID0gMzI7CisgICAgICAgICAgaW1nLmFsdCA9ICdDb25zdHJhaW4gUHJvcG9ydGlvbnMnOworICAgICAgICAgIGltZy5zdHlsZS52ZXJ0aWNhbEFsaWduID0gJ21pZGRsZSc7CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOworICAgICAgICAgIGlucHV0LnR5cGUgPSAnY2hlY2tib3gnOworICAgICAgICAgIGlucHV0Lm5hbWUgPSAnZl9jb25zdHJhaW4nOyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgIGlucHV0LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKKyAgICAgICAgICBpbnB1dC5zdHlsZS50b3AgPSAnMTBweCc7CisgICAgICAgICAgaW5wdXQuc3R5bGUubGVmdCA9ICctNHB4JzsKKyAgICAgICAgICBpbnB1dC52YWx1ZSA9ICdvbic7ICAgICAgICAKKyAgICAgICAgICBpbnB1dC5jaGVja2VkID0gdHJ1ZTsKKyAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoaW5wdXQpOyAgICAgICAgCisgICAgICAgICAgCisgICAgICAgICAgdGQuY2xhc3NOYW1lID0gJ2ZpbGVtYW5hZ2VyLWZfY29uc3RyYWluJzsgICAgICAKKyAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYoc2VsZi5waHBjZmcuaW1hZ2VzX3VzZV9oc3BhY2VfdnNwYWNlKSAgICAgIAorICAgICAgICB7IC8vIEhTUEFDRS9WU1BBQ0UgICAgICAgIAorICAgICAgICAgIHZhciB0aCAgICA9IHRyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJykpOworICAgICAgICAgIHZhciBsYWJlbCA9IHRoLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdML1IgTWFyZ2luOicpKTsKKyAgICAgICAgICAKKyAgICAgICAgICB2YXIgdGQgICAgPSB0ci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpKTsKKyAgICAgICAgICB2YXIgaW5wdXQgPSB0ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTsKKyAgICAgICAgICBpbnB1dC5uYW1lICAgPSAnZl9oc3BhY2UnOworICAgICAgICAgIGlucHV0LnNpemUgPSAzOyAgICAKKyAgICAgICAgICBpbnB1dC50eXBlID0gJ3RleHQnOworICAgICAgICAgIHRkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgcHggJykpOyAgICAgICAgICAgICAgIAorICAgICAgICAgIHRoLmNsYXNzTmFtZSA9IHRkLmNsYXNzTmFtZSA9ICdmaWxlbWFuYWdlci1mX2hzcGFjZSc7ICAgICAgCisgICAgICAgICAgCisgICAgICAgICAgdmFyIHRoICAgID0gdHIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGgnKSk7CisgICAgICAgICAgdmFyIGxhYmVsID0gdGguYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1QvQiBNYXJnaW46JykpOworICAgICAgICAgIHZhciB0ZCAgICA9IHRyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJykpOworICAgICAgICAgIHZhciBpbnB1dCA9IHRkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpOworICAgICAgICAgIGlucHV0Lm5hbWUgICA9ICdmX3ZzcGFjZSc7CisgICAgICAgICAgaW5wdXQuc2l6ZSA9IDM7ICAgIAorICAgICAgICAgIGlucHV0LnR5cGUgPSAndGV4dCc7CisgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyBweCAnKSk7ICAgICAgICAgICAgICAgCisgICAgICAgICAgdGguY2xhc3NOYW1lID0gdGQuY2xhc3NOYW1lID0gJ2ZpbGVtYW5hZ2VyLWZfdnNwYWNlJzsgICAgICAKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvLyBNYXJnaW4gICAgICAKKyAgICAgICAgICB2YXIgdGggICAgPSB0ci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpKTsKKyAgICAgICAgICB2YXIgbGFiZWwgPSB0aC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnTWFyZ2luOicpKTsKKyAgICAgICAgICAKKyAgICAgICAgICB2YXIgdGQgICAgPSB0ci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpKTsKKyAgICAgICAgICB2YXIgaW5wdXQgPSB0ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTsKKyAgICAgICAgICBpbnB1dC5uYW1lICAgPSAnZl9tYXJnaW4nOworICAgICAgICAgIGlucHV0LnNpemUgPSAzOyAgICAKKyAgICAgICAgICBpbnB1dC50eXBlID0gJ3RleHQnOworICAgICAgICAgIHRkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgcHggJykpOyAgICAgICAgCisgICAgICAgICAgdGguY2xhc3NOYW1lID0gdGQuY2xhc3NOYW1lID0gJ2ZpbGVtYW5hZ2VyLWZfbWFyZ2luJzsgICAgCisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIAorICAgICAgeyAvLyBIZWlnaHQsIFBhZGRpbmcsIENvbG91ciAgCisgICAgICAgIHZhciB0ciAgICA9IHRib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJykpOworICAgICAgICAKKyAgICAgICAgeyAvLyBIZWlnaHQKKyAgICAgICAgICB2YXIgdGggICAgPSB0ci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpKTsKKyAgICAgICAgICB2YXIgbGFiZWwgPSB0aC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnSGVpZ2h0OicpKTsKKyAgICAgICAgICAKKyAgICAgICAgICB2YXIgdGQgICAgPSB0ci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpKTsKKyAgICAgICAgICB2YXIgaW5wdXQgPSB0ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTsKKyAgICAgICAgICAKKyAgICAgICAgICBpbnB1dC5uYW1lICAgPSAnZl9oZWlnaHQnOworICAgICAgICAgIGlucHV0LnNpemUgPSA0OyAgICAKKyAgICAgICAgICBpbnB1dC50eXBlID0gJ3RleHQnOworICAgICAgICAgIC8vIEBUT0RPIENvbnN0cmFpbiBSYXRpbworICAgICAgICAgIHRoLmNsYXNzTmFtZSA9IHRkLmNsYXNzTmFtZSA9ICdmaWxlbWFuYWdlci1mX3dpZHRoJzsgICAgICAKKyAgICAgICAgfQorICAgICAgICAgICAgICAKKyAgICAgICAgeyAvLyBQYWRkaW5nICAgICAgCisgICAgICAgICAgdmFyIHRoICAgID0gdHIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGgnKSk7CisgICAgICAgICAgdmFyIGxhYmVsID0gdGguYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1BhZGRpbmc6JykpOworICAgICAgICAgIAorICAgICAgICAgIHZhciB0ZCAgICA9IHRyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJykpOworICAgICAgICAgIHZhciBpbnB1dCA9IHRkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpOworICAgICAgICAgIGlucHV0Lm5hbWUgICA9ICdmX3BhZGRpbmcnOworICAgICAgICAgIGlucHV0LnNpemUgPSAzOyAgICAKKyAgICAgICAgICBpbnB1dC50eXBlID0gJ3RleHQnOworICAgICAgICAgIHRkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgcHggJykpOyAgICAgICAgCisgICAgICAgICAgdGguY2xhc3NOYW1lID0gdGQuY2xhc3NOYW1lID0gJ2ZpbGVtYW5hZ2VyLWZfcGFkZGluZyc7ICAgIAorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB7IC8vIFBhZGRpbmcgQ29sb3VyIChCYWNrZ3JvdW5kKSAKKyAgICAgICAgICB2YXIgdGggICAgPSB0ci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpKTsKKyAgICAgICAgICB2YXIgbGFiZWwgPSB0aC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnQ29sb3VyOicpKTsKKyAgICAgICAgICAKKyAgICAgICAgICB2YXIgdGQgICAgPSB0ci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpKTsKKyAgICAgICAgICB2YXIgaW5wdXQgPSB0ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTsKKyAgICAgICAgICBpbnB1dC5uYW1lICAgPSAnZl9iYWNrZ3JvdW5kQ29sb3InOworICAgICAgICAgIGlucHV0LnNpemUgPSA3OyAgICAKKyAgICAgICAgICBpbnB1dC50eXBlID0gJ3RleHQnOyAgICAgICAgCisgICAgICAgICAgbmV3IFhpbmhhLmNvbG9yUGlja2VyLklucHV0QmluZGluZyhpbnB1dCk7CisgICAgICAgICAgdGguY2xhc3NOYW1lID0gdGQuY2xhc3NOYW1lID0gJ2ZpbGVtYW5hZ2VyLWZfYmFja2dyb3VuZENvbG9yJzsgICAgCisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIAorICAgICAgeyAvLyBBbGlnbm1lbnQsIEJvcmRlciwgQ29sb3VyICAKKyAgICAgICAgdmFyIHRyICAgID0gdGJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKSk7CisgICAgICAgIAorICAgICAgICB7IC8vIEFsaWdubWVudAorICAgICAgICAgIHZhciB0aCAgICA9IHRyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJykpOworICAgICAgICAgIHZhciBsYWJlbCA9IHRoLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdBbGlnbm1lbnQ6JykpOworICAgICAgICAgIAorICAgICAgICAgIHZhciB0ZCAgICA9IHRyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJykpOworICAgICAgICAgIHRkLmNvbFNwYW4gPSAyOworICAgICAgICAgIHZhciBpbnB1dCA9IHRkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpKTsKKyAgICAgICAgICAKKyAgICAgICAgICBpbnB1dC5uYW1lICAgPSAnZl9hbGlnbic7CisgICAgICAgICAgaW5wdXQudGl0bGUgPSAnUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSc7CisgICAgICAgICAgaW5wdXQub3B0aW9uc1swXSA9IG5ldyBPcHRpb24oJycsIHRydWUsIHRydWUpOworICAgICAgICAgIGlucHV0Lm9wdGlvbnNbMV0gPSBuZXcgT3B0aW9uKCdMZWZ0JywgJ2xlZnQnKTsKKyAgICAgICAgICBpbnB1dC5vcHRpb25zWzJdID0gbmV3IE9wdGlvbignUmlnaHQnLCAncmlnaHQnKTsKKyAgICAgICAgICBpbnB1dC5vcHRpb25zWzNdID0gbmV3IE9wdGlvbignVG9wJywgJ3RvcCcpOworICAgICAgICAgIGlucHV0Lm9wdGlvbnNbNF0gPSBuZXcgT3B0aW9uKCdNaWRkbGUnLCAnbWlkZGxlJyk7CisgICAgICAgICAgaW5wdXQub3B0aW9uc1s1XSA9IG5ldyBPcHRpb24oJ0JvdHRvbScsICdib3R0b20nKTsKKyAgICAgICAgICAKKyAgICAgICAgICAvLyBAVE9ETyBDb25zdHJhaW4gUmF0aW8KKyAgICAgICAgICB0aC5jbGFzc05hbWUgPSB0ZC5jbGFzc05hbWUgPSAnZmlsZW1hbmFnZXItZl9hbGlnbic7ICAgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICAgICAgICAKKyAgICAgICAgeyAvLyBCb3JkZXIgICAgICAKKyAgICAgICAgICB2YXIgdGggICAgPSB0ci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpKTsKKyAgICAgICAgICB2YXIgbGFiZWwgPSB0aC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnQm9yZGVyOicpKTsKKyAgICAgICAgICAKKyAgICAgICAgICB2YXIgdGQgICAgPSB0ci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpKTsKKyAgICAgICAgICB2YXIgaW5wdXQgPSB0ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTsKKyAgICAgICAgICBpbnB1dC5uYW1lICAgPSAnZl9ib3JkZXInOworICAgICAgICAgIGlucHV0LnNpemUgPSAzOyAgICAKKyAgICAgICAgICBpbnB1dC50eXBlID0gJ3RleHQnOworICAgICAgICAgIHRkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgcHggJykpOyAgICAgICAgCisgICAgICAgICAgdGguY2xhc3NOYW1lID0gdGQuY2xhc3NOYW1lID0gJ2ZpbGVtYW5hZ2VyLWZfYm9yZGVyJzsgICAgCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHsgLy8gQm9yZGVyIENvbG91cgorICAgICAgICAgIHZhciB0aCAgICA9IHRyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJykpOworICAgICAgICAgIHZhciBsYWJlbCA9IHRoLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdDb2xvdXI6JykpOworICAgICAgICAgIAorICAgICAgICAgIHZhciB0ZCAgICA9IHRyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJykpOworICAgICAgICAgIHZhciBpbnB1dCA9IHRkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpOworICAgICAgICAgIGlucHV0Lm5hbWUgICA9ICdmX2JvcmRlckNvbG9yJzsKKyAgICAgICAgICBpbnB1dC5zaXplID0gNzsgICAgCisgICAgICAgICAgaW5wdXQudHlwZSA9ICd0ZXh0JzsgICAgICAgICAgICAgICAKKyAgICAgICAgICBuZXcgWGluaGEuY29sb3JQaWNrZXIuSW5wdXRCaW5kaW5nKGlucHV0KTsKKyAgICAgICAgICB0aC5jbGFzc05hbWUgPSB0ZC5jbGFzc05hbWUgPSAnZmlsZW1hbmFnZXItZl9ib3JkZXJDb2xvcic7ICAgIAorICAgICAgICB9CisgICAgICB9CisgICAgICAKKyAgICAgIHsgLy8gU2l6ZSBXYXJuaW5nCisgICAgICAgICB2YXIgdHIgICAgPSB0Ym9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgIHZhciB0ZCAgICA9IHRyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJykpOworICAgICAgICAgdGQuY29sU3BhbiA9IDc7CisgICAgICAgICB0ZC5jbGFzc05hbWUgPSAnZmlsZW1hbmFnZXItaW1nLXNpemUtbm90aWNlJzsgICAgICAgIAorICAgICAgfQorICAgICAgCisgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICB2YXIgaDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoMicpOworICAgICAgaDIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0ltYWdlIEF0dHJpYnV0ZXMnKSk7CisgICAgICBkaXYuYXBwZW5kQ2hpbGQoaDIpOworICAgICAgZGl2LmFwcGVuZENoaWxkKHRhYmxlKTsKKyAgICAgIHJldHVybiBkaXY7CisgICAgfSkoKTsKKyAgICAKKyAgICAKKyAgICBmKCdmX3dpZHRoJykub25rZXl1cCA9IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICBpZighZignZl9jb25zdHJhaW4nKS5jaGVja2VkKSByZXR1cm4gdHJ1ZTsKKyAgICAgIGlmKCFmKCdmX3dpZHRoJykudmFsdWUpIAorICAgICAgeworICAgICAgICBmKCdmX3dpZHRoJykudmFsdWUgPSAnJzsKKyAgICAgICAgZignZl9oZWlnaHQnKS52YWx1ZSA9ICcnOworICAgICAgfQorICAgICAgZWxzZSBpZihmKCdmX2hlaWdodCcpLnZhbHVlICYmIHNlbGYuX0xhc3RJbWFnZURldGFpbHMpCisgICAgICB7CisgICAgICAgIGYoJ2ZfaGVpZ2h0JykudmFsdWUgPSBzZWxmLlNjYWxlSW1hZ2Uoc2VsZi5fTGFzdEltYWdlRGV0YWlscywgeyB3aWR0aDogZignZl93aWR0aCcpLnZhbHVlLCBoZWlnaHQ6IG51bGwgfSkuaGVpZ2h0OworICAgICAgfSAgICAgICAgICAgICAgICAKKyAgICAgIGVsc2UgaWYoIXNlbGYuX0xhc3RJbWFnZURldGFpbHMpCisgICAgICB7CisgICAgICAgIGYoJ2ZfaGVpZ2h0JykudmFsdWUgPSAnJzsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBmKCdmX2hlaWdodCcpLm9ua2V5dXAgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgaWYoIWYoJ2ZfY29uc3RyYWluJykuY2hlY2tlZCkgcmV0dXJuIHRydWU7CisgICAgICBpZighZignZl9oZWlnaHQnKS52YWx1ZSkgCisgICAgICB7CisgICAgICAgIGYoJ2Zfd2lkdGgnKS52YWx1ZSA9ICcnOworICAgICAgICBmKCdmX2hlaWdodCcpLnZhbHVlID0gJyc7CisgICAgICB9CisgICAgICBlbHNlIGlmKGYoJ2Zfd2lkdGgnKS52YWx1ZSAmJiBzZWxmLl9MYXN0SW1hZ2VEZXRhaWxzKQorICAgICAgeworICAgICAgICBmKCdmX3dpZHRoJykudmFsdWUgPSBzZWxmLlNjYWxlSW1hZ2Uoc2VsZi5fTGFzdEltYWdlRGV0YWlscywgeyB3aWR0aDogbnVsbCwgaGVpZ2h0OiBmKCdmX2hlaWdodCcpLnZhbHVlIH0pLndpZHRoOworICAgICAgfSAgICAgICAgICAgICAgICAKKyAgICAgIGVsc2UgaWYoIXNlbGYuX0xhc3RJbWFnZURldGFpbHMpCisgICAgICB7CisgICAgICAgIGYoJ2Zfd2lkdGgnKS52YWx1ZSA9ICcnOworICAgICAgfQorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGYoJ2ZfY29uc3RyYWluJykub25jbGljayA9IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICBpZih0aGlzLmNoZWNrZWQgJiYgZignZl93aWR0aCcpLnZhbHVlICYmIGYoJ2ZfaGVpZ2h0JykudmFsdWUpCisgICAgICB7CisgICAgICAgIHZhciBuZXdfZGltID0gc2VsZi5TY2FsZUltYWdlKHNlbGYuX0xhc3RJbWFnZURldGFpbHMsIHsgd2lkdGg6ZignZl93aWR0aCcpLnZhbHVlLCBoZWlnaHQ6ZignZl9oZWlnaHQnKS52YWx1ZSB9KTsKKyAgICAgICAgZignZl93aWR0aCcpLnZhbHVlID0gbmV3X2RpbS53aWR0aDsKKyAgICAgICAgZignZl9oZWlnaHQnKS52YWx1ZSA9IG5ld19kaW0uaGVpZ2h0OworICAgICAgfSAgICAgICAgCisgICAgfQorICB9CisgIAorICBpZih0aGlzLmN1cnJlbnRfYXR0cmlidXRlcykKKyAgeworICAgIGYoJ2ZfYWx0JykudmFsdWUgICAgPSB0aGlzLmN1cnJlbnRfYXR0cmlidXRlcy5mX2FsdDsKKyAgICBmKCdmX2JvcmRlcicpLnZhbHVlID0gdGhpcy5jdXJyZW50X2F0dHJpYnV0ZXMuZl9ib3JkZXI7CisgICAgcygnZl9hbGlnbicsIHRoaXMuY3VycmVudF9hdHRyaWJ1dGVzLmZfYWxpZ24pOworICAgIGYoJ2ZfcGFkZGluZycpLnZhbHVlID0gdGhpcy5jdXJyZW50X2F0dHJpYnV0ZXMuZl9wYWRkaW5nOworICAgIGlmKGYoJ2ZfbWFyZ2luJykpIGYoJ2ZfbWFyZ2luJykudmFsdWUgPSB0aGlzLmN1cnJlbnRfYXR0cmlidXRlcy5mX21hcmdpbjsKKyAgICBmKCdmX2JhY2tncm91bmRDb2xvcicpLnZhbHVlID0gdGhpcy5jdXJyZW50X2F0dHJpYnV0ZXMuZl9iYWNrZ3JvdW5kQ29sb3I7CisgICAgZignZl9ib3JkZXJDb2xvcicpLnZhbHVlID0gdGhpcy5jdXJyZW50X2F0dHJpYnV0ZXMuZl9ib3JkZXJDb2xvcjsgICAgCisgICAgaWYoZignZl9oc3BhY2UnKSkgZignZl9oc3BhY2UnKS52YWx1ZSAgPSB0aGlzLmN1cnJlbnRfYXR0cmlidXRlcy5mX2hzcGFjZTsKKyAgICBpZihmKCdmX3ZzcGFjZScpKSBmKCdmX3ZzcGFjZScpLnZhbHVlID0gdGhpcy5jdXJyZW50X2F0dHJpYnV0ZXMuZl92c3BhY2U7ICAgIAorICAgIGYoJ2Zfd2lkdGgnKS52YWx1ZSAgPSB0aGlzLmN1cnJlbnRfYXR0cmlidXRlcy5mX3dpZHRoID8gdGhpcy5jdXJyZW50X2F0dHJpYnV0ZXMuZl93aWR0aCA6ICcnOworICAgIGYoJ2ZfaGVpZ2h0JykudmFsdWUgPSB0aGlzLmN1cnJlbnRfYXR0cmlidXRlcy5mX2hlaWdodCA/IHRoaXMuY3VycmVudF9hdHRyaWJ1dGVzLmZfaGVpZ2h0IDogJyc7CisgICAgCisgICAgdGhpcy5jdXJyZW50X2F0dHJpYnV0ZXMgPSBudWxsOworICB9CisgIAorICAvLyBJZiBubyBkZXRhaWxzIHdlcmUgc3VwcGxpZWQsIHdlIHJldHVybiB0aGUgY3VycmVudCBvbmVzCisgIGlmKCFkZXRhaWxzKSAKKyAgeworICAgIHZhciBkZXRhaWxzID0geworICAgICAgZl9hbHQ6ICAgIGYoJ2ZfYWx0JykudmFsdWUsCisgICAgICBmX2JvcmRlcjogZignZl9ib3JkZXInKS52YWx1ZSwKKyAgICAgIGZfYWxpZ246ICBmKCdmX2FsaWduJykub3B0aW9uc1tmKCdmX2FsaWduJykuc2VsZWN0ZWRJbmRleF0udmFsdWUsCisgICAgICBmX3BhZGRpbmc6IGYoJ2ZfcGFkZGluZycpLnZhbHVlLAorICAgICAgZl9tYXJnaW46ICBmKCdmX21hcmdpbicpID8gZignZl9tYXJnaW4nKS52YWx1ZSA6IG51bGwsCisgICAgICBmX2JhY2tncm91bmRDb2xvcjogZignZl9iYWNrZ3JvdW5kQ29sb3InKS52YWx1ZSwKKyAgICAgIGZfYm9yZGVyQ29sb3I6IGYoJ2ZfYm9yZGVyQ29sb3InKS52YWx1ZSwKKyAgICAgIGZfaHNwYWNlOiBmKCdmX2hzcGFjZScpID8gZignZl9oc3BhY2UnKS52YWx1ZSA6IG51bGwsCisgICAgICBmX3ZzcGFjZTogZignZl92c3BhY2UnKSA/IGYoJ2ZfdnNwYWNlJykudmFsdWUgOiBudWxsLAorICAgICAgZl93aWR0aDogIGYoJ2Zfd2lkdGgnKS52YWx1ZSwKKyAgICAgIGZfaGVpZ2h0OiBmKCdmX2hlaWdodCcpLnZhbHVlLAorICAgICAgCisgICAgICB0YWJsZTogdGhpcy5fSW1hZ2VNYW5hZ2VyQXR0cmlidXRlc1RhYmxlCisgICAgfSAKKyAgICByZXR1cm4gZGV0YWlsczsKKyAgfQorICAKKyAgaWYoZGV0YWlscy53aWR0aCAmJiAhaXNOYU4ocGFyc2VJbnQoZGV0YWlscy53aWR0aCkpICYmIHBhcnNlSW50KGRldGFpbHMud2lkdGgpID4gNDAwKQorICB7CisgICAgdGhpcy5fSW1hZ2VNYW5hZ2VyQXR0cmlidXRlc1RhYmxlLmdldEVsZW1lbnQoJy5maWxlbWFuYWdlci1pbWctc2l6ZS1ub3RpY2UnKS5zZXQoJ2h0bWwnLCAnPHAgY2xhc3M9InRpcCIgc3R5bGU9Im1hcmdpbi10b3A6NHB4OyI+VGhpcyBvcmlnaW5hbCBpbWFnZSBpcyAnICsgKGRldGFpbHMud2lkdGgpICsgJyBwaXhlbHMgd2lkZSwgeW91IG1heSB3aXNoIHRvIHJlZHVjZSB0aGUgc2l6ZSBieSBwdXR0aW5nIGEgbGVzc2VyIG51bWJlciBpbiB0aGUgIldpZHRoIiBmaWVsZCBhYm92ZS4gIEl0IGlzIG5vdCB1c3VhbGx5IGRlc2lyYWJsZSB0byBleGNlZWQgNDAwIHBpeGVscyBpbiB3aWR0aCBvbiBtb3N0IG5vcm1hbCBwYWdlcy48L3A+Jyk7CisgIH0KKyAgZWxzZQorICB7CisgICAgICB0aGlzLl9JbWFnZU1hbmFnZXJBdHRyaWJ1dGVzVGFibGUuZ2V0RWxlbWVudCgnLmZpbGVtYW5hZ2VyLWltZy1zaXplLW5vdGljZScpLnNldCgndGV4dCcsICcnKTsKKyAgfQorICAKKyAgLy8gSWYgZGV0YWlscyB3ZXJlIHN1cHBsaWVkLCB3ZSBzZXQgdGhlIGFwcHJvcHJpYXRlIG9uZXMuICAKKyAgaWYoCisgICAoICAgKGYoJ2Zfd2lkdGgnKS52YWx1ZSAgJiYgZignZl93aWR0aCcpLnZhbHVlICAhPSBkZXRhaWxzLndpZHRoKSAgIAorICAgIHx8IChmKCdmX2hlaWdodCcpLnZhbHVlICYmIGYoJ2ZfaGVpZ2h0JykudmFsdWUgIT0gZGV0YWlscy5oZWlnaHQpICApCisgICAmJiAKKyAgICAoIWRldGFpbHMudXJsIHx8ICF0aGlzLmN1cnJlbnRfaW1hZ2UgfHwgdGhpcy5jdXJyZW50X2ltYWdlLmdldEF0dHJpYnV0ZSgnc3JjJykgIT0gZGV0YWlscy51cmwpCisgICkKKyAgeworICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgdGhlIHNhbWUgaW1hZ2UKKyAgICB2YXIgd2FybiA9IGZ1bmN0aW9uKCkgeyAgICAgIAorICAgICAgbmV3IEZpbGVNYW5hZ2VyLkRpYWxvZygnVGhpcyBpbWFnZSBpcyBhIGRpZmZlcmVudCBzaXplLCB3b3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIG5ldyBzaXplPycsIHsKKyAgICAgICAgbGFuZ3VhZ2U6IHsgICAgICAgIAorICAgICAgICAgIGNvbmZpcm06ICdTaHJpbmsvR3JvdyBUbyBGaXQnLCAgICAgICAgCisgICAgICAgICAgZGVjbGluZTogJ0Z1bGxzaXplJworICAgICAgICB9LAorICAgICAgICAgIAorICAgICAgICBidXR0b25zOiBbCisgICAgICAgICAgJ2NvbmZpcm0nLAorICAgICAgICAgICdkZWNsaW5lJworICAgICAgICBdLAorICAgICAgICAKKyAgICAgICAgb25Db25maXJtOiBmdW5jdGlvbigpeworICAgICAgICAgIGlmKGYoJ2ZfY29uc3RyYWluJykuY2hlY2tlZCkKKyAgICAgICAgICB7CisgICAgICAgICAgICB2YXIgbmV3X3NpemUgPSBzZWxmLlNjYWxlSW1hZ2UoZGV0YWlscywge3dpZHRoOiBmKCdmX3dpZHRoJykudmFsdWUsIGhlaWdodDogZignZl9oZWlnaHQnKS52YWx1ZX0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBmKCdmX3dpZHRoJykudmFsdWUgPSBmKCdmX3dpZHRoJykudmFsdWUgICA/IG5ld19zaXplLndpZHRoIDogJyc7CisgICAgICAgICAgICBmKCdmX2hlaWdodCcpLnZhbHVlID0gZignZl9oZWlnaHQnKS52YWx1ZSA/IG5ld19zaXplLmhlaWdodCA6ICcnOworICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgCisgICAgICAgIG9uRGVjbGluZTogZnVuY3Rpb24oKXsKKyAgICAgICAgICBmKCdmX3dpZHRoJykudmFsdWUgPSAnJzsKKyAgICAgICAgICBmKCdmX2hlaWdodCcpLnZhbHVlID0gJyc7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKyAgICAgIAorICAgICAgaWYoIWRldGFpbHMucGF0aCkgd2FybigpOworICAgICAgZWxzZSBpZighdGhpcy5jdXJyZW50X2ltYWdlKSB3YXJuKCk7CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgICAgdmFyIHNyYyAgPSBzZWxmLmN1cnJlbnRfaW1hZ2UuZ2V0QXR0cmlidXRlKCdzcmMnKTsKKyAgICAgICAgICBpZighc3JjLm1hdGNoKC9eKChbYS16XSs6KXxcLykvaSkpCisgICAgICAgICAgeworICAgICAgICAgICAgICBzcmMgPSBzZWxmLmVkaXRvci5jb25maWcuYmFzZUhyZWYucmVwbGFjZSgvXC9bXlwvXSokLywgJycpICsgJy8nICsgc3JjOworICAgICAgICAgICAgICBpZihzcmMubWF0Y2goL15bYS16XSs6L2kpICYmICFzZWxmLnBocGNmZy5pbWFnZXNfdXJsLm1hdGNoKC9eW2Etel06L2kpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3JjID0gc3JjLnJlcGxhY2UoL15bYS16XSs6KFwvXC8/KVteL10qL2ksICcnKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBpZihkZXRhaWxzLnBhdGggIT0gc3JjKSB3YXJuKCk7CisgICAgICB9CisgICAgCisgIH0KKyAgCisgIGYoJ2ZfYWxpZ24nKS5zdHlsZS52aXNpYmlsaXR5ID0gJyc7IC8vIEVuc3VyZSB0aGF0IHRoZSBzZWxlY3QgaGFzbid0IGJlZW4gaGlkZGVuIGJ5IGFuIG92ZXJsYXkgYW5kIG5vdCBwdXQgYmFjaworICAKKyAgcmV0dXJuIHRoaXMuX0ltYWdlTWFuYWdlckF0dHJpYnV0ZXNUYWJsZTsKK307CisKKy8qKiBIYW5kbGUgdGhlICJTZWxlY3QiIHJldHVybiBmcm9tIHRoZSBGaWxlIE1hbmFnZXIsIGluc2VydGluZyBvciB1cGRhdGluZyBhbiAKKyAqIGltYWdlIGFzIGFwcHJvcHJpYXRlLiAgQ2FsbGVzIEltYWdlTWFuYWdlckF0dHJpYnV0ZXMoKSB3aXRoICBubyBhcmd1bWVudHMKKyAqIHRvIGZpbmQgb3V0IHRoZSBhdHRyaWJ1dGVzIHRvIHNldC4KKyAqLworIAorTW9vdG9vbHNGaWxlTWFuYWdlci5wcm90b3R5cGUuSW1hZ2VNYW5hZ2VyUmV0dXJuID0gZnVuY3Rpb24ocGF0aCwgZmlsZSkKK3sKKyAgCisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgdmFyIHNlbGYgICA9IHRoaXM7CisgIHZhciBpbWFnZSAgPSB0aGlzLmN1cnJlbnRfaW1hZ2U7CisgIAorICB2YXIgcGFyYW0gPSBzZWxmLkltYWdlTWFuYWdlckF0dHJpYnV0ZXMoKTsgIAorICBwYXJhbS5mX3VybCA9IHBhdGg7CisgIAorICAvLyBJRTExIHdoaWNoIHByZXRlbmRzIGl0IGlzICJnZWNrbyIgaXMgcGFydGljdWxhcmx5IGZpbmlja3kgCisgIC8vICBhYm91dCBsb3Npbmcgc2VsZWN0aW9uIG90aGVyIGJyb3dzZXJzIG5vdCBzbyBtdWNoLCBidXQgdGhleQorICAvLyAgIGRvbid0IHNlZW0gdG8gbWluZCBzYXZpbmcgYW5kIHJlc3RvcmluZyBpdCBhbnl3YXksIHNvIHdlIAorICAvLyAgIHdpbGwgZG8gdGhhdCBmb3IgZXZlcnlib2R5CisgIGlmKDF8fFhpbmhhLmlzX2llKSB0aGlzLmVkaXRvci5yZXN0b3JlU2VsZWN0aW9uKHRoaXMuY3VycmVudF9zZWxlY3Rpb24pOworICB2YXIgaW1nID0gaW1hZ2U7CisgIGlmICghaW1nKSB7CisgICAgaWYgKDAgJiYgWGluaGEuaXNfaWUpIHsgIC8vIE1heWJlIElFNyBOZWVkcyB0aGlzLCA5IHNlZW1zIHRvIGJlIG9rLCBJIHRoaW5rIDggdG9vCisgICAgICB2YXIgc2VsID0gZWRpdG9yLl9nZXRTZWxlY3Rpb24oKTsKKyAgICAgIHZhciByYW5nZSA9IGVkaXRvci5fY3JlYXRlUmFuZ2Uoc2VsKTsKKyAgICAgIGVkaXRvci5fZG9jLmV4ZWNDb21tYW5kKCJpbnNlcnRpbWFnZSIsIGZhbHNlLCBwYXJhbS5mX3VybCk7CisgICAgICBpbWcgPSByYW5nZS5wYXJlbnRFbGVtZW50KCk7CisgICAgICAgICAgICAKKyAgICAgIC8vIHdvbmRlciBpZiB0aGlzIHdvcmtzLi4uCisgICAgICBpZiAoaW1nLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPSAiaW1nIikgeworICAgICAgICBpbWcgPSBpbWcucHJldmlvdXNTaWJsaW5nOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsKKyAgICAgIGltZy5zcmMgPSBwYXJhbS5mX3VybDsKKyAgICAgIGVkaXRvci5pbnNlcnROb2RlQXRTZWxlY3Rpb24oaW1nKTsKKyAgICB9CisgIH0gZWxzZSB7ICAgICAgCisgICAgaW1nLnNyYyA9IHBhcmFtLmZfdXJsOworICB9CisKKyAgZm9yIChmaWVsZCBpbiBwYXJhbSkgeworICAgIHZhciB2YWx1ZSA9IHBhcmFtW2ZpZWxkXTsKKyAgICAvLyBAVE9ETzogQWRkIGFiaWxpdHkgdG8gbWZtIGZvciB0aGlzIHRvIGJlIHBvc3NpYmxlLgorICAgIHN3aXRjaCAoZmllbGQpIHsKKyAgICAgICAgY2FzZSAiZl9hbHQiICAgIDogaW1nLmFsdCAgPSB2YWx1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgImZfYm9yZGVyIiA6CisgICAgICAgIGlmKHZhbHVlLmxlbmd0aCkKKyAgICAgICAgeyAgICAgICAgICAgCisgICAgICAgICAgaW1nLnN0eWxlLmJvcmRlcldpZHRoID0gL1teMC05XS8udGVzdCh2YWx1ZSkgPyB2YWx1ZSA6ICAocGFyc2VJbnQodmFsdWUpICsgJ3B4Jyk7CisgICAgICAgICAgaWYoaW1nLnN0eWxlLmJvcmRlcldpZHRoICYmICFpbWcuc3R5bGUuYm9yZGVyU3R5bGUpCisgICAgICAgICAgeworICAgICAgICAgICAgaW1nLnN0eWxlLmJvcmRlclN0eWxlID0gJ3NvbGlkJzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgaW1nLnN0eWxlLmJvcmRlcldpZHRoID0gJyc7CisgICAgICAgICAgaW1nLnN0eWxlLmJvcmRlclN0eWxlID0gJyc7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlICJmX2JvcmRlckNvbG9yIjogaW1nLnN0eWxlLmJvcmRlckNvbG9yID0gdmFsdWU7IGJyZWFrOworICAgICAgICBjYXNlICJmX2JhY2tncm91bmRDb2xvciI6IGltZy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB2YWx1ZTsgYnJlYWs7CisgICAgICAgICAgCisgICAgICAgIGNhc2UgImZfcGFkZGluZyI6IAorICAgICAgICB7CisgICAgICAgICAgaWYodmFsdWUubGVuZ3RoKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGltZy5zdHlsZS5wYWRkaW5nID0gL1teMC05XS8udGVzdCh2YWx1ZSkgPyB2YWx1ZSA6ICAocGFyc2VJbnQodmFsdWUpICsgJ3B4Jyk7IAorICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgaW1nLnN0eWxlLnBhZGRpbmcgPSAnJzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlICJmX21hcmdpbiI6IAorICAgICAgICB7CisgICAgICAgICAgaWYodmFsdWUgJiYgdmFsdWUubGVuZ3RoKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGltZy5zdHlsZS5tYXJnaW4gPSAvW14wLTldLy50ZXN0KHZhbHVlKSA/IHZhbHVlIDogIChwYXJzZUludCh2YWx1ZSkgKyAncHgnKTsgCisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBpbWcuc3R5bGUubWFyZ2luID0gJyc7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSAiZl9hbGlnbiIgIDogaWYodmFsdWUgJiYgdmFsdWUgIT09IHRydWUgJiYgdmFsdWUgIT09ICd0cnVlJykgeyBpbWcuYWxpZ24gID0gdmFsdWU7IH0gZWxzZSB7IGltZy5yZW1vdmVBdHRyaWJ1dGUoJ2FsaWduJyk7IH0gYnJlYWs7CisgICAgICAgICAgCisgICAgICAgIGNhc2UgImZfd2lkdGgiIDogCisgICAgICAgIHsKKyAgICAgICAgICBpZighaXNOYU4ocGFyc2VJbnQodmFsdWUpKSkgeyBpbWcud2lkdGggID0gcGFyc2VJbnQodmFsdWUpOyB9IGVsc2UgeyBpbWcucmVtb3ZlQXR0cmlidXRlKCd3aWR0aCcpOyB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlICJmX2hlaWdodCI6CisgICAgICAgIHsKKyAgICAgICAgICBpZighaXNOYU4ocGFyc2VJbnQodmFsdWUpKSkgeyBpbWcuaGVpZ2h0ID0gcGFyc2VJbnQodmFsdWUpOyB9IGVsc2UgeyBpbWcucmVtb3ZlQXR0cmlidXRlKCdoZWlnaHQnKTsgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSAiZl9oc3BhY2UiIDogCisgICAgICAgIHsKKyAgICAgICAgICBpZighaXNOYU4ocGFyc2VJbnQodmFsdWUpKSkgeyBpbWcuaHNwYWNlICA9IHBhcnNlSW50KHZhbHVlKTsgfSBlbHNlIHsgaW1nLnJlbW92ZUF0dHJpYnV0ZSgnaHNwYWNlJyk7IH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGNhc2UgImZfdnNwYWNlIiA6IAorICAgICAgICB7CisgICAgICAgICAgaWYoIWlzTmFOKHBhcnNlSW50KHZhbHVlKSkpIHsgaW1nLnZzcGFjZSAgPSBwYXJzZUludCh2YWx1ZSk7IH0gZWxzZSB7IGltZy5yZW1vdmVBdHRyaWJ1dGUoJ3ZzcGFjZScpOyB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9Cit9OworCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvTW9vdG9vbHNGaWxlTWFuYWdlci5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvTW9vdG9vbHNGaWxlTWFuYWdlci5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIzM2ZjYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9Nb290b29sc0ZpbGVNYW5hZ2VyLmNzcwpAQCAtMCwwICsxLDYxIEBACisuZmlsZW1hbmFnZXItY29udGFpbmVyIC5maWxlbWFuYWdlciB7IG92ZXJmbG93OnZpc2libGU7IH0KKworZGl2LmZpbGVtYW5hZ2VyLWluZm8tYXJlYSBkdCwgZGl2LmZpbGVtYW5hZ2VyLXByZXZpZXctYXJlYSBkdCB7IHdpZHRoOiAxMDBweDsgbWFyZ2luLWxlZnQ6NXB4OyB9CitkaXYuZmlsZW1hbmFnZXItaW5mby1hcmVhIGRkLCBkaXYuZmlsZW1hbmFnZXItcHJldmlldy1hcmVhIGRkIHsgd2lkdGg6YXV0bzsgfQorZGl2LmZpbGVtYW5hZ2VyIGRpdi5maWxlbWFuYWdlci1wcmV2aWV3LWNvbnRlbnQge2NsZWFyOm5vbmU7IH0KKworZGl2LmZpbGVtYW5hZ2VyLXByZXZpZXctYXJlYSBkdCB7IGZsb2F0OmxlZnQ7IH0KK2Rpdi5maWxlbWFuYWdlci1wcmV2aWV3LWFyZWEgaDIgeyBkaXNwbGF5Om5vbmU7IH0KK2Rpdi5maWxlbWFuYWdlci1wcmV2aWV3LWFyZWEgaW1nLnByZXZpZXcgeyBtYXJnaW4tbGVmdDo1cHg7IG1hcmdpbi1yaWdodDo1cHg7IG1hcmdpbi10b3A6MHB4OyBmbG9hdDpyaWdodDsgY2xlYXI6cmlnaHQ7IC8qbWF4LXdpZHRoOjE0MHB4OyovIH0KK2Rpdi5maWxlbWFuYWdlci1wcmV2aWV3LWFyZWEgZGwgeyBmbG9hdDpsZWZ0OyBjbGVhcjpsZWZ0OyB3aWR0aDphdXRvOyB9CitkaXYuZmlsZW1hbmFnZXItcHJldmlldyBkaXYub2JqZWN0IHsgbWFyZ2luLWxlZnQ6MTUlOyBtYXJnaW4tcmlnaHQ6MTUlOyBtYXJnaW4tdG9wOjBweDsgZmxvYXQ6cmlnaHQ7IGNsZWFyOnJpZ2h0OyB9CisKK2Rpdi5maWxlbWFuYWdlciB0ZCwgZGl2LmZpbGVtYW5hZ2VyIHRoLCBkaXYuZmlsZW1hbmFnZXIgaW5wdXRbdHlwZT10ZXh0XSB7ICAKKyAgbGluZS1oZWlnaHQ6IDIwcHg7CisgIGZvbnQtc2l6ZTogMTFweDsKK30KKworZGl2LmZpbGVtYW5hZ2VyIHRoCit7CisgIGZvbnQtd2VpZ2h0OmJvbGQ7CisgIHRleHQtYWxpZ246bGVmdDsKKyAgcGFkZGluZy1sZWZ0OjBweDsKK30KKworZGl2LmZpbGVtYW5hZ2VyIHRkLmZpbGVtYW5hZ2VyLWZfYWx0IGlucHV0IHt3aWR0aDoxMDAlO30KKworZGl2LmZpbGVtYW5hZ2VyIHRhYmxlLmZpbGVtYW5hZ2VyLWV4dGVuZGVkLW9wdGlvbnMgeyB3aWR0aDo1NTBweDsgbWFyZ2luLWxlZnQ6NXB4OyBtYXJnaW4tcmlnaHQ6NXB4OyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7IH0KKworCit0YWJsZS5maWxlbWFuYWdlci1leHRlbmRlZC1vcHRpb25zIC5idXR0b25Db2xvciB7CisgIHdpZHRoIDoxZW07CisgIG1hcmdpbi1sZWZ0OiAycHg7CisgIGN1cnNvcjogZGVmYXVsdDsKK30KKwordGFibGUuZmlsZW1hbmFnZXItZXh0ZW5kZWQtb3B0aW9ucyAuYnV0dG9uQ29sb3IgLmNob29zZXIsIHRhYmxlLmZpbGVtYW5hZ2VyLWV4dGVuZGVkLW9wdGlvbnMgLmJ1dHRvbkNvbG9yIC5ub2NvbG9yIHsKKyAgaGVpZ2h0OiAwLjZlbTsKKyAgYm9yZGVyOiAxcHggc29saWQ7CisgIHBhZGRpbmc6IDBweCAxZW07CisgIGJvcmRlci1jb2xvcjogQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvblNoYWRvdyBCdXR0b25TaGFkb3cgQnV0dG9uSGlnaGxpZ2h0OworfQorCit0YWJsZS5maWxlbWFuYWdlci1leHRlbmRlZC1vcHRpb25zIC5idXR0b25Db2xvciAuYnV0dG9uQ2xpY2sgeworICBib3JkZXItY29sb3I6IEJ1dHRvblNoYWRvdyBCdXR0b25IaWdobGlnaHQgQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvblNoYWRvdzsKK30KK3RhYmxlLmZpbGVtYW5hZ2VyLWV4dGVuZGVkLW9wdGlvbnMgLmJ1dHRvbkNvbG9yIC5idXR0b25Db2xvci1oaWxpdGUgeworICBib3JkZXItY29sb3I6IEJ1dHRvblNoYWRvdyBCdXR0b25IaWdobGlnaHQgQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvblNoYWRvdzsKK30KKwordGFibGUuZmlsZW1hbmFnZXItZXh0ZW5kZWQtb3B0aW9ucyAuYnV0dG9uQ29sb3IgLm5vY29sb3IgeyBwYWRkaW5nOiAwcHg7IH0KK3RhYmxlLmZpbGVtYW5hZ2VyLWV4dGVuZGVkLW9wdGlvbnMgLmJ1dHRvbkNvbG9yIC5ub2NvbG9yLWhpbGl0ZSB7IGJhY2tncm91bmQtY29sb3I6ICNmZmY7IGNvbG9yOiAjZjAwOyB9CisKK2Rpdi5maWxlbWFuYWdlci11cGxvYWRlci1hcmVhIHsgY2xlYXI6Ym90aDsgfQorZGl2LmZpbGVtYW5hZ2VyLXByZXZpZXcgcC50ZWNoX2luZm8geworICBjbGVhcjogYm90aDsKK30KKworZGl2LmZpbGVtYW5hZ2VyLXByZXZpZXcgcC5lcnJfaW5mbyB7CisgIGNsZWFyOiBib3RoOworfQorCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvTW9vdG9vbHNGaWxlTWFuYWdlci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9Nb290b29sc0ZpbGVNYW5hZ2VyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMWE5YjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvTW9vdG9vbHNGaWxlTWFuYWdlci5qcwpAQCAtMCwwICsxLDI2MiBAQAorLyoqCisgID0gTW9vdG9vbHMgRmlsZSBNYW5hZ2VyID0KKyAgVGhlIE1vb3Rvb2xzRmlsZU1hbmFnZXIgcGx1Z2luIGFsbG93cyBmb3IgdGhlIG1hbmFnZW1lbnQsIHNlbGVjdGlvbiBhbmQgCisgIGluc2VydGlvbiBvZiBsaW5rcyB0byBmaWxlcyBhbmQgaW5saW5lIGltYWdlcyB0byB0aGUgZWRpdGVkIEhUTUwuCisgICAKKyAgSXQgcmVxdWlyZXMgdGhlIHVzZSBvZiBNb290b29scy4gIElmIHlvdSBkbyBub3QgdXNlIG1vb3Rvb2xzIHBsdWdpbnMsCisgIHRoZW4gbW9vdG9vbHMgaXMgbm90IGxvYWRlZC4gIElmIG1vb3Rvb2xzIGlzIGFscmVhZHkgbG9hZGVkLCBpdCB3aWxsCisgIG5vdCBiZSByZWxvYWRlZCAoc28gaWYgeW91IHdhbnQgdG8gdXNlIHlvdXIgb3duIHZlcnNpb24gb2YgTW9vdG9vbHMgCisgIHRoZW4gbG9hZCBpdCBmaXJzdCkuCisgCisgID09IFVzYWdlID09CisgIEluc3RydWN0IFhpbmhhIHRvIGxvYWQgdGhlIE1vb3Rvb2xzRmlsZU1hbmFnZXIgcGx1Z2luIChmb2xsb3cgdGhlIE5ld2JpZUd1aWRlKS4KKyAKKyAgQ29uZmlndXJlIHRoZSBwbHVnaW4gYXMgcGVyIHRoZSBkaXJlY3Rpb25zIGluIHRoZSBjb25maWcucGhwIGZpbGUuCisgICAKKyAqIEBhdXRob3IgJEF1dGhvciQKKyAqIEB2ZXJzaW9uICRJZCQKKyAqIEBwYWNrYWdlIE1vb3Rvb2xzRmlsZU1hbmFnZXIKKyAqLworCisKK01vb3Rvb2xzRmlsZU1hbmFnZXIuX3BsdWdpbkluZm8gPSB7CisgIG5hbWUgICAgICAgICAgOiAiTW9vdG9scyBGaWxlIE1hbmFnZXIiLAorICB2ZXJzaW9uICAgICAgIDogIjEuNSIsCisgIGRldmVsb3BlciAgICAgOiAiSmFtZXMgU2xlZW1hbiAoWGluaGEpLCBDaHJpc3RvcGggUG9qZXIgKEZpbGVNYW5hZ2VyKSIsICAKKyAgbGljZW5zZSAgICAgICA6ICJNSVQiCit9OworCisvLyBBbGwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSB0aHJvdWdoIFBIUCwgcGxlYXNlIHJlYWQgY29uZmlnLnBocCB0byBsZWFybiBob3cgKG9yIGlmIHlvdSdyZSBpbiBhIHJlYWwgCisvLyBodXJyeSwganVzdCBlZGl0IGNvbmZpZy5waHApCitYaW5oYS5Db25maWcucHJvdG90eXBlLk1vb3Rvb2xzRmlsZU1hbmFnZXIgPQoreworICAnYmFja2VuZCcgICAgICA6IFhpbmhhLmdldFBsdWdpbkRpcigiTW9vdG9vbHNGaWxlTWFuYWdlciIpICsgJy9iYWNrZW5kLnBocD9fX3BsdWdpbj1Nb290b29sc0ZpbGVNYW5hZ2VyJicsCisgICdiYWNrZW5kX2RhdGEnIDogeyB9Cit9OworCisvLyBJbiBjYXNlIHlvdSB3YW50IHRvIHVzZSB5b3VyIG93biB2ZXJzaW9uIG9mIE1vb3Rvb2xzLCB5b3UgY2FuIGxvYWQgaXQgZmlyc3QuCitNb290b29sc0ZpbGVNYW5hZ2VyLkFzc2V0TG9hZGVyID0gWGluaGEubG9hZExpYnJhcnkoJ01vb1Rvb2xzJyk7CisKKy8vIEluIGNhc2UgeW91IHdhbnQgdG8gdXNlIHlvdXIgb3duIHZlcnNpb24gb2YgRmlsZU1hbmFnZXIsIHlvdSBjYW4gbG9hZCBpdCBmaXJzdC4KKy8vIFlvdSBiZXR0ZXIgbG9vayBhdCB0aGUgY2hhbmdlcyB3ZSBoYWQgdG8gZG8gdG8gdGhlIHN0YW5kYXJkIG9uZSB0aG91Z2guCitpZih0eXBlb2YgRmlsZU1hbmFnZXIgPT0gJ3VuZGVmaW5lZCcpCit7CisgIGlmKHR5cGVvZiBfX01GTV9BU1NFVFNfRElSX18gPT0gJ3VuZGVmaW5lZCcpCisgIHsKKyAgICBfX01GTV9BU1NFVFNfRElSX18gPSBYaW5oYS5nZXRQbHVnaW5EaXIoJ01vb3Rvb2xzRmlsZU1hbmFnZXInKSsnL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cycKKyAgfQorICAKKyAgaWYodHlwZW9mIF9fTUZNX1VTRV9GTEFTSF9fID09ICd1bmRlZmluZWQnKQorICB7CisgICAgLy8gRmxhc2ggaXMgbm93IGRpc2FibGVkIGJ5IGRlZmF1bHQsIHRoZXJlIGlzIG5vIGdvb2QgcmVhc29uIHRvIHVzZSBpdAorICAgIC8vIGFzIHRoZSBOb0ZsYXNoIHVwbG9hZGVyIHdvcmtzIGV4YWN0bHkgdGhlIHNhbWUgb24gbW9kZXJuIGJyb3dzZXJzCisgICAgLy8gKGFsbG93cyBtdWx0aXBsZSBmaWxlIHVwbG9hZHMsIHByb2dyZXNzIGJhcnMgYW5kIHNvIGZvcnRoKQorICAgIF9fTUZNX1VTRV9GTEFTSF9fID0gZmFsc2U7CisgICAgCisgICAgLyoKKyAgICAgIF9fTUZNX1VTRV9GTEFTSF9fID0gQnJvd3Nlci5QbHVnaW5zLkZsYXNoLnZlcnNpb24gPyB0cnVlIDogZmFsc2U7CisgICAgICBpZihCcm93c2VyLlBsYXRmb3JtLm1hYyAmJiBCcm93c2VyLmZpcmVmb3gzKSBfX01GTV9VU0VfRkxBU0hfXyA9IGZhbHNlOworICAgICovCisgIH0KKyAgCisgIGlmKHR5cGVvZiBfX01GTV9VU0VfQkFDS19CVVRUT05fTkFWSUdBVElPTl9fID09ICd1bmRlZmluZWQnKQorICB7CisgICAgX19NRk1fVVNFX0JBQ0tfQlVUVE9OX05BVklHQVRJT05fXyA9IGZhbHNlOworICB9CisgIAorICAvLyBCZWNhdXNlIGRvbSBpcyBwcm9iYWJseSBhbHJlYWR5IHJlYWR5IGZvciB1cywgd2UgY2FuJ3QgdXNlIHRoZSBhdXRvaW5pdCwgd2UgZG8gaXQgbWFudWFsbHkKKyAgX19NSUxLQk9YX05PX0FVVE9JTklUX18gPSB0cnVlOworICAKKyAgTW9vdG9vbHNGaWxlTWFuYWdlci5Bc3NldExvYWRlcgorICAgIC8vIFRoZXNlIGFyZSBub3cgbG9hZGVkIGJ5IEZpbGVNYW5hZ2VyLmpzIGF1dG9tYXRpY2FsbHkKKyAgICAvLy5sb2FkU3R5bGUoJ21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9Dc3MvRmlsZU1hbmFnZXIuY3NzJywgJ01vb3Rvb2xzRmlsZU1hbmFnZXInKQorICAgIC8vLmxvYWRTdHlsZSgnbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0Nzcy9BZGRpdGlvbnMuY3NzJywgJ01vb3Rvb2xzRmlsZU1hbmFnZXInKQorICAgIC8vLmxvYWRTY3JpcHQoJ21vb3Rvb2xzLWZpbGVtYW5hZ2VyL1NvdXJjZS9BZGRpdGlvbnMuanMnLCAnTW9vdG9vbHNGaWxlTWFuYWdlcicpICAgICAgICAKKyAgICAubG9hZFNjcmlwdCgnbW9vdG9vbHMtZmlsZW1hbmFnZXIvU291cmNlL0ZpbGVNYW5hZ2VyLmpzJywgJ01vb3Rvb2xzRmlsZU1hbmFnZXInKQorICAgIC5sb2FkU2NyaXB0KCdtb290b29scy1maWxlbWFuYWdlci9MYW5ndWFnZS9MYW5ndWFnZS5lbi5qcycsICdNb290b29sc0ZpbGVNYW5hZ2VyJykKKyAgICAud2hlblJlYWR5KGZ1bmN0aW9uKCkgeworICAgICAgd2luZG93Lm1pbGtib3ggPSAgbmV3IE1pbGtib3goeworICAgICAgICBjZW50ZXJlZDpmYWxzZQorICAgICAgfSk7CisgICAgfSk7CisgICAgCisgaWYoX19NRk1fVVNFX0ZMQVNIX18pCisgeworICAgTW9vdG9vbHNGaWxlTWFuYWdlci5Bc3NldExvYWRlcgorICAgICAubG9hZFNjcmlwdCgnbW9vdG9vbHMtZmlsZW1hbmFnZXIvU291cmNlL1VwbG9hZGVyL1N3aWZmLlVwbG9hZGVyLmpzJywgJ01vb3Rvb2xzRmlsZU1hbmFnZXInKQorICAgICAubG9hZFNjcmlwdCgnbW9vdG9vbHMtZmlsZW1hbmFnZXIvU291cmNlL1VwbG9hZGVyL0Z4LlByb2dyZXNzQmFyLmpzJywgJ01vb3Rvb2xzRmlsZU1hbmFnZXInKQorICAgICAubG9hZFNjcmlwdCgnbW9vdG9vbHMtZmlsZW1hbmFnZXIvU291cmNlL1VwbG9hZGVyLmpzJywgJ01vb3Rvb2xzRmlsZU1hbmFnZXInKTsKKyB9CisgZWxzZQorIHsKKyAgIE1vb3Rvb2xzRmlsZU1hbmFnZXIuQXNzZXRMb2FkZXIKKyAgICAgIC5sb2FkU2NyaXB0KCdtb290b29scy1maWxlbWFuYWdlci9Tb3VyY2UvTm9GbGFzaC5VcGxvYWRlci5qcycsICdNb290b29sc0ZpbGVNYW5hZ2VyJyk7CisgfSAgICAKK30KK01vb3Rvb2xzRmlsZU1hbmFnZXIuQXNzZXRMb2FkZXIubG9hZFN0eWxlKCdNb290b29sc0ZpbGVNYW5hZ2VyLmNzcycsICdNb290b29sc0ZpbGVNYW5hZ2VyJyk7CisKK2Z1bmN0aW9uIE1vb3Rvb2xzRmlsZU1hbmFnZXIoZWRpdG9yKQoreyAgCisgIHRoaXMuZWRpdG9yID0gZWRpdG9yOworICB2YXIgc2VsZiA9IHRoaXM7CisgIHZhciBjZmcgPSBlZGl0b3IuY29uZmlnOworICAgIAorICAvLyBEbyBhIGNhbGxiYWNrIHRvIHRoZSBQSFAgYmFja2VuZCBhbmQgZ2V0IGl0IHRvICJkZWNvZGUiIHRoZSBjb25maWd1cmF0aW9uIGZvciB1cyBpbnRvIGEgCisgIC8vIGphdmFzY3JpcHQgb2JqZWN0LiAgCisgIAorICAvLyBJTVBPUlRBTlQ6IHdlIG5lZWQgdG8gZG8gdGhpcyBzeW5jaHJvbm91c2x5IHRvIGVuc3VyZSB0aGF0IHRoZSBidXR0b25zIGFyZSBhZGRlZCB0byB0aGUgdG9vbGJhcgorICAvLyAgYmVmb3JlIHRoZSB0b29sYmFyIGlzIGRyYXduLgorICAKKyAgdmFyIHBocGNmZyA9IFhpbmhhLl9wb3N0dXJsY29udGVudChlZGl0b3IuY29uZmlnLk1vb3Rvb2xzRmlsZU1hbmFnZXIuYmFja2VuZCsnX19mdW5jdGlvbj1yZWFkLWNvbmZpZycsIGVkaXRvci5jb25maWcuTW9vdG9vbHNGaWxlTWFuYWdlci5iYWNrZW5kX2RhdGEpOworCisgIGV2YWwgKCd2YXIgZiA9ICcrcGhwY2ZnKyc7Jyk7IAorICBzZWxmLnBocGNmZyA9IGY7IAorICBzZWxmLmhvb2tVcEJ1dHRvbnMoKTsgCisgICAgCisgIHJldHVybjsgIAorfTsKKworLyoqIENvbm5lY3QgdXAvaW5zZXJ0IHRoZSBhcHByb3ByaWF0ZSBidXR0b25zIGFuZCBsb2FkIGluIHRoZSBhdXhpbGxhcnkgZmlsZXMuCisgKgorICogIFRoZSBkaWZmZXJlbnQgIm1vZGVzIiBvZiB0aGlzIHBsdWdpbiBoYXZlIGJlZW4gc3BsaXQgaW50byBzZXZlcmFsIGF1eGlsbGlhcnkgZmlsZXMKKyAqICBhcyBpdCdzIGxpa2VseSB5b3UgbWF5IG5vdCB3YW50IHRoZW0gYWxsIChlc3AgaWYgd2UgYWRkIG1vcmUgbW9kZXMgbGF0ZXIpLgorICoKKyAqICBFYWNoIG1vZGUncyAiaW5jbHVkZSIgaXMgbG9hZGVkIGFzIHNvb24gYXMgd2Uga25vdyBpdCBjb3VsZCBiZSBuZWVkZWQgYnkgdGhlCisgKiAgZWRpdG9yLCB3ZSBkb24ndCB3YWl0IHVudGlsIHRoZSBidXR0b24gaXMgcHJlc3NlZCBhcyB0aGF0IHdvdWxkIGJlIHNsb3cgZm9yCisgKiAgdGhlIHVzZXIgdG8gcmVzcG9uZC4KKyAqIAorICovCisgCitNb290b29sc0ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5ob29rVXBCdXR0b25zID0gZnVuY3Rpb24oKSAKK3sKKyAgdmFyIHNlbGYgPSB0aGlzOyAgCisgIHZhciBwaHBjZmcgPSBzZWxmLnBocGNmZzsgICAgCisgIAorICBpZiAocGhwY2ZnLmZpbGVzX2RpcikgCisgIHsKKyAgICBNb290b29sc0ZpbGVNYW5hZ2VyLkFzc2V0TG9hZGVyLmxvYWRTY3JpcHQoJ01vb3Rvb2xzRmlsZU1hbmFnZXIuRmlsZU1hbmFnZXIuanMnLCAnTW9vdG9vbHNGaWxlTWFuYWdlcicpOworICAgIAorICAgIHRoaXMuZWRpdG9yLmNvbmZpZy5yZWdpc3RlckJ1dHRvbih7CisgICAgICAgIGlkICAgICAgICA6ICJsaW5rZmlsZSIsCisgICAgICAgIHRvb2x0aXAgICA6IFhpbmhhLl9sYygiSW5zZXJ0IEZpbGUgTGluayIsJ01vb3Rvb2xzRmlsZU1hbmFnZXInKSwKKyAgICAgICAgaW1hZ2UgICAgIDogWGluaGEuZ2V0UGx1Z2luRGlyKCdNb290b29sc0ZpbGVNYW5hZ2VyJykgKyAnL2ltZy9lZF9saW5rZmlsZS5naWYnLAorICAgICAgICB0ZXh0TW9kZSAgOiBmYWxzZSwKKyAgICAgICAgYWN0aW9uICAgIDogZnVuY3Rpb24oZWRpdG9yKSB7IE1vb3Rvb2xzRmlsZU1hbmFnZXIuQXNzZXRMb2FkZXIud2hlblJlYWR5KGZ1bmN0aW9uKCkgeyBzZWxmLk9wZW5GaWxlTWFuYWdlcigpOyB9KTsgfQorICAgICAgICB9KTsKKyAgICAgICAgCisgICAgdGhpcy5lZGl0b3IuY29uZmlnLmFkZFRvb2xiYXJFbGVtZW50KCJsaW5rZmlsZSIsICJjcmVhdGVsaW5rIiwgMSk7ICAgICAgICAgICAgCisgIH07CisgIAorICBpZihwaHBjZmcuaW1hZ2VzX2RpcikKKyAgeyAgICAgCisgICAgTW9vdG9vbHNGaWxlTWFuYWdlci5Bc3NldExvYWRlci5sb2FkU2NyaXB0KCdNb290b29sc0ZpbGVNYW5hZ2VyLkltYWdlTWFuYWdlci5qcycsICdNb290b29sc0ZpbGVNYW5hZ2VyJyk7CisgICAgCisgICAgLy8gT3ZlcnJpZGUgb3VyIEVkaXRvcnMgaW5zZXJ0IGltYWdlIGJ1dHRvbiBhY3Rpb24uICAKKyAgICBzZWxmLmVkaXRvci5faW5zZXJ0SW1hZ2UgPSBmdW5jdGlvbihpbWFnZSkKKyAgICB7CisgICAgICBNb290b29sc0ZpbGVNYW5hZ2VyLkFzc2V0TG9hZGVyLndoZW5SZWFkeShmdW5jdGlvbigpIHsgc2VsZi5PcGVuSW1hZ2VNYW5hZ2VyKGltYWdlKTsgfSk7CisgICAgfSAgICAgICAgICAgICAgCisgIH0gCit9OworCisvKiogSGVscGVyIG1ldGhvZCB0byBzY2FsZSAoYW4gaW1hZ2UgdHlwaWNhbGx5KSB0byBhIG5ldyBjb25zdHJhaW50LgorICoKKyAqIEBwYXJhbSBvcmlnZGltIG9iamVjdCB7IHdpZHRoOiAxMjMsaGVpZ2h0OiA0NTYgfSBUaGUgb3JpZ2luYWwgZGltZW5zaW9ucy4KKyAqIEBwYXJhbSBuZXdkaW0gIG9iamVjdCB7IHdpZHRoOiA0NTYsIGhlaWdodDogMTIzIH0gVGhlIG5ldyAobWF4aW11bSkgZGltZW5zaW9ucy4KKyAqIEBwYXJhbSBmbGV4c2lkZSAnd2lkdGgnfCdoZWlnaHQnIChvcHRpb25hbCkgdGhlIHNpZGUgd2hpY2ggY2FuIGJlICJmbGV4aWJsZSIgCisgKiAgIERlZmF1bHRzIHRvIHRoZSAic2hvcnQiIHNpZGUuCisgKiBAcmV0dXJuIHsgd2lkdGg6IDc4OSwgaGVpZ2h0OiA5ODcgfSBUaGUgc2NhbGVkIGRpbWVuc2lvbnMgd2hpY2ggc2hvdWxkIGJlIHVzZWQuIAorICovCisgCitNb290b29sc0ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5TY2FsZUltYWdlID0gZnVuY3Rpb24oIG9yaWdkaW0sIG5ld2RpbSwgZmxleHNpZGUgKQoreworICBpZighb3JpZ2RpbS5oZWlnaHQgfHwgIW9yaWdkaW0ud2lkdGgpIHJldHVybiBuZXdkaW07IC8vIE5vIG9sZCBzaXplLCBzdGF5cyBuZXcuCisgIGlmKCFuZXdkaW0uaGVpZ2h0ICYmICFuZXdkaW0ud2lkdGgpIHJldHVybiBvcmlnZGltOyAvLyBObyBuZXcgc2l6ZSwgc3RheXMgdGhlIHNhbWUuCisgICAgCisgIGlmKCFmbGV4c2lkZSkKKyAgeworICAgIGlmKG9yaWdkaW0ud2lkdGggPiBvcmlnZGltLmhlaWdodCkKKyAgICB7CisgICAgICBmbGV4c2lkZSA9ICdoZWlnaHQnOyAvLyBMYW5kc2NhcGUgaW1hZ2UsIGFsbG93IHRoZSBoZWlnaHQgdG8gZmxleC4KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGZsZXhzaWRlID0gJ3dpZHRoJzsgLy8gUG9ydHJhaXQgaW1hZ2UsIGFsbG93IHRoZSB3aWR0aCB0byBmbGV4CisgICAgfQorICB9CisgIAorICB2YXIga25vd25zaWRlID0gbnVsbDsKKyAgc3dpdGNoKGZsZXhzaWRlKQorICB7CisgICAgY2FzZSAnaGVpZ2h0Jzoga25vd25zaWRlID0gJ3dpZHRoJzsgYnJlYWs7CisgICAgY2FzZSAnd2lkdGgnIDoga25vd25zaWRlID0gJ2hlaWdodCc7IGJyZWFrOworICB9CisgIAorICAvLyBJZiB3ZSBET04nVCBrbm93IHRoZSBrbm93biBzaWRlLCB3ZSBuZWVkIHRvIGZsaXAgaXQuCisgIGlmKCFuZXdkaW1ba25vd25zaWRlXSkKKyAgeworICAgIHZhciB0ID0ga25vd25zaWRlOworICAgIGtub3duc2lkZSA9IGZsZXhzaWRlOworICAgIGZsZXhzaWRlID0gdDsKKyAgfQorICAKKyAgdmFyIHJhdGlvID0gMDsKKyAgc3dpdGNoKGZsZXhzaWRlKQorICB7CisgICAgY2FzZSAnd2lkdGgnOiAgcmF0aW8gPSBvcmlnZGltLndpZHRoIC8gb3JpZ2RpbS5oZWlnaHQ7IGJyZWFrOworICAgIGNhc2UgJ2hlaWdodCc6IHJhdGlvID0gb3JpZ2RpbS5oZWlnaHQgLyBvcmlnZGltLndpZHRoOyBicmVhazsKKyAgfQorICAKKyAgdmFyIHJkaW0gPSB7fTsKKyAgcmRpbVtrbm93bnNpZGVdID0gbmV3ZGltW2tub3duc2lkZV07CisgIHJkaW1bZmxleHNpZGVdICA9IE1hdGguZmxvb3IobmV3ZGltW2tub3duc2lkZV0gKiByYXRpbyk7CisgIGlmKGlzTmFOKHJkaW1ba25vd25zaWRlXSkpIHJkaW1ba25vd25zaWRlXSA9IG51bGw7CisgIGlmKGlzTmFOKHJkaW1bZmxleHNpZGVdKSkgIHJkaW1bZmxleHNpZGVdICA9IG51bGw7CisgIHJldHVybiByZGltOworfQorCisvKiogVGFrZSBhIG11bHRpLXBhcnQgQ1NTIHNpemUgc3BlY2lmaWNhdGlvbiAoZWcgc2l6ZXMgZm9yIDQgYm9yZGVycykgYW5kIAorICogc2hyaW5rIGl0IGludG8gb25lIGlmIHBvc3NpYmxlLgorICovCisgCitNb290b29sc0ZpbGVNYW5hZ2VyLnByb3RvdHlwZS5zaG9ydFNpemUgPSBmdW5jdGlvbihjc3NTaXplKQoreworICBpZigvIC8udGVzdChjc3NTaXplKSkKKyAgeworICAgIHZhciBzaXplcyA9IGNzc1NpemUuc3BsaXQoJyAnKTsKKyAgICB2YXIgdXNlRmlyc3RTaXplID0gdHJ1ZTsKKyAgICBmb3IodmFyIGkgPSAxOyBpIDwgc2l6ZXMubGVuZ3RoOyBpKyspCisgICAgeworICAgICAgaWYoc2l6ZXNbMF0gIT0gc2l6ZXNbaV0pCisgICAgICB7CisgICAgICAgIHVzZUZpcnN0U2l6ZSA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgaWYodXNlRmlyc3RTaXplKSBjc3NTaXplID0gc2l6ZXNbMF07CisgIH0KKyAgcmV0dXJuIGNzc1NpemU7Cit9OworCisvKiogVGFrZSBhIGNvbG91ciBpbiByZ2IoYSxiKSBmb3JtYXQgYW5kIGNvbnZlcnQgdG8gSEVYCisgKiBoYW5kbGVzIG11bHRpcGxlIGNvbG91cnMgaW4gc2FtZSBzdHJpbmcgYXMgd2VsbC4KKyAqLworIAorTW9vdG9vbHNGaWxlTWFuYWdlci5wcm90b3R5cGUuY29udmVydFRvSGV4ID0gZnVuY3Rpb24oY29sb3IpIAoreworICBpZiAodHlwZW9mIGNvbG9yID09ICJzdHJpbmciICYmIC8sIC8udGVzdC5jb2xvcikKKyAgY29sb3IgPSBjb2xvci5yZXBsYWNlKC8sIC8sICcsJyk7IC8vIHJnYihhLCBiKSA9PiByZ2IoYSxiKQorCisgIGlmICh0eXBlb2YgY29sb3IgPT0gInN0cmluZyIgJiYgLyAvLnRlc3QuY29sb3IpIHsgLy8gbXVsdGlwbGUgdmFsdWVzCisgICAgdmFyIGNvbG9ycyA9IGNvbG9yLnNwbGl0KCcgJyk7CisgICAgdmFyIGNvbG9yc3RyaW5nID0gJyc7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xvcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgIGNvbG9yc3RyaW5nICs9IFhpbmhhLl9jb2xvclRvUmdiKGNvbG9yc1tpXSk7CisgICAgICBpZiAoaSArIDEgPCBjb2xvcnMubGVuZ3RoKQorICAgICAgY29sb3JzdHJpbmcgKz0gIiAiOworICAgIH0KKyAgICByZXR1cm4gY29sb3JzdHJpbmc7CisgIH0KKworICByZXR1cm4gWGluaGEuX2NvbG9yVG9SZ2IoY29sb3IpOworfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL1JFQURNRS5ERVZFTE9QRVJTIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL1JFQURNRS5ERVZFTE9QRVJTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNDc1YTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvUkVBRE1FLkRFVkVMT1BFUlMKQEAgLTAsMCArMSw1IEBACitUaGUgbW9vdG9vbHMtZmlsZW1hbmFnZXIgZGlyZWN0b3J5IGNvbnRhaW5zIGEgdmVyc2lvbiBvZiBtb290b29scy1maWxlbWFuYWdlciBhcyBleHRyYWN0ZWQgZnJvbSB0aGUgZm9sbG93aW5nIGdpdCByZXBvc2l0b3J5CisKK2h0dHBzOi8vZ2l0aHViLmNvbS9zbGVlbWFuai9tb290b29scy1maWxlbWFuYWdlci8KKworaXQgaGFzIGJlZW4gc3RyaXBwZWQgb2YgdW5uZWNlc3NhcnkgY29kZSBpbmNsdWRpbmcgdGhlICJHZXRJRDMiIGxpYnJhcnkgYXMgdGhpcyBpcyBHUEwgbGljZW5jZWQgcmF0aGVyIHRoYW4gTUlULCBubyBjb2RlIGNoYW5nZXMgYXJlIG5lY2Vzc2FyeSBmcm9tIHRoZSBnaXQgYWJvdmUsIGp1c3Qgc3R1ZmYgZGVsZXRlZC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvWGluaGFGaWxlTWFuYWdlci5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvWGluaGFGaWxlTWFuYWdlci5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQyZWJlZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9YaW5oYUZpbGVNYW5hZ2VyLnBocApAQCAtMCwwICsxLDY5IEBACis8P3BocA0KKy8qDQorICogU2NyaXB0OiBYaW5oYUZpbGVNYW5hZ2VyLnBocA0KKyAqICAgTW9vVG9vbHMgRmlsZU1hbmFnZXIgLSBCYWNrZW5kIGZvciB0aGUgWGluaGEgZWRpdG9yDQorICoNCisgKiAgIERlcml2ZWQgY2xhc3Mgd2hpY2ggaW5jbHVkZXMgc3BlY2lhbCB0d2Vha3MgdG8gbWFrZSBNRk0gd29yayB3aXRoIFhpbmhhLg0KKyAqDQorICogTm90ZTogZGVyaXZlIGZyb20gRmlsZU1hbmFnZXJXaXRoQWxpYXMgaW5zdGVhZCB3aGVuIHlvdSBuZWVkIGFsaWFzaW5nIHN1cHBvcnQ7IHRoaXMgaXMgbGVmdCBhcyBhbiBleGVyY2lzZQ0KKyAqICAgICAgIGZvciB0aGUgcmVhZGVyLiAoQSBub24tdHJpdmlhbCBleGVyY2lzZS4gWW91J2xsIG5lZWQgdG8gYWxpYXMgaW1hZ2VzX2RpciB0byBpbWFnZXNfdXJsDQorICoJICAgICBhbmQgZmlsZXNfZGlyIHRvIGZpbGVzX3VybCwgYXQgbGVhc3QuDQorICoNCisgKiBBdXRob3JzOg0KKyAqICAtIEdlciBIb2JiZWx0IChodHRwOi8vaGViYnV0Lm5ldCkNCisgKg0KKyAqIExpY2Vuc2U6DQorICogICBNSVQtc3R5bGUgbGljZW5zZS4NCisgKg0KKyAqIENvcHlyaWdodDoNCisgKiAgIENvcHlyaWdodCAoYykgMjAxMSBbR2VyIEhvYmJlbHRdKGh0dHA6Ly9ob2JiZWx0LmNvbSkNCisgKg0KKyAqIERlcGVuZGVuY2llczoNCisgKiAgIC0gRmlsZU1hbmFnZXIucGhwDQorICovDQorDQorcmVxdWlyZV9vbmNlKHN0cl9yZXBsYWNlKCdcXCcsICcvJywgZGlybmFtZShfX0ZJTEVfXykpIC4gJy9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvQ29ubmVjdG9yL0ZpbGVNYW5hZ2VyV2l0aEFsaWFzU3VwcG9ydC5waHAnKTsNCisNCisNCitjbGFzcyBYaW5oYUZpbGVNYW5hZ2VyIGV4dGVuZHMgRmlsZU1hbmFnZXJXaXRoQWxpYXNTdXBwb3J0DQorew0KKwlwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG9wdGlvbnMpDQorCXsNCisgICAgaWYoaXNzZXQoJG9wdGlvbnNbJ2ltYWdlc19kaXInXSkgJiYgaXNzZXQoJG9wdGlvbnNbJ2ltYWdlc191cmwnXSkpDQorICAgIHsNCisgICAgICAkb3B0aW9uc1snQWxpYXNlcyddWyRvcHRpb25zWydpbWFnZXNfdXJsJ11dID0gJG9wdGlvbnNbJ2ltYWdlc19kaXInXTsNCisgICAgICAkb3B0aW9uc1snZGlyZWN0b3J5J10gPSAkb3B0aW9uc1snaW1hZ2VzX3VybCddOw0KKyAgICB9DQorICAgIA0KKyAgICBpZihpc3NldCgkb3B0aW9uc1snZmlsZXNfZGlyJ10pICYmIGlzc2V0KCRvcHRpb25zWydmaWxlc191cmwnXSkpDQorICAgIHsNCisgICAgICAkb3B0aW9uc1snQWxpYXNlcyddWyRvcHRpb25zWydmaWxlc191cmwnXV0gPSAkb3B0aW9uc1snZmlsZXNfZGlyJ107DQorICAgICAgJG9wdGlvbnNbJ2RpcmVjdG9yeSddID0gJG9wdGlvbnNbJ2ZpbGVzX3VybCddOw0KKyAgICB9DQorICAgIA0KKyAgICBpZihpc3NldCgkb3B0aW9uc1sndGh1bWJzX2RpciddKSAmJiBpc3NldCgkb3B0aW9uc1sndGh1bWJzX3VybCddKSkNCisgICAgew0KKyAgICAgICRvcHRpb25zWydBbGlhc2VzJ11bJG9wdGlvbnNbJ3RodW1ic191cmwnXV0gPSAkb3B0aW9uc1sndGh1bWJzX2RpciddOw0KKyAgICAgICRvcHRpb25zWyd0aHVtYm5haWxQYXRoJ10gPSAkb3B0aW9uc1sndGh1bWJzX3VybCddOw0KKyAgICB9DQorICAgIA0KKyAgICBpZihpc3NldCgkb3B0aW9uc1snc3VnZ2VzdGVkTWF4SW1hZ2VEaW1lbnNpb24nXSkpDQorICAgIHsNCisgICAgICAkb3B0aW9uc1snbWF4SW1hZ2VEaW1lbnNpb24nXSA9ICRvcHRpb25zWydzdWdnZXN0ZWRNYXhJbWFnZURpbWVuc2lvbiddOw0KKyAgICB9DQorICAgICAgICANCisJCXBhcmVudDo6X19jb25zdHJ1Y3QoJG9wdGlvbnMpOw0KKwl9DQorDQorCS8vIHdoZW4geW91IHdhbnQgaW1nLnByZXZpZXcgc3R5bGUgbWF4LXdpZHRoID0gMTY0cHggKHdhcyBiZWZvcmU6IG1heC13aWR0aDogMTQwcHgpDQorCS8vIA0KKwkvLyBOb3RlIHRoYXQgdGhpcyB3aWxsIGZvcmNlIGFsbCAyNTBweCB0aHVtYm5haWxzIHRvIGEgbWF4aW11bSB3aWR0aCBvZiAxNDBweA0KKwkvKg0KKwlwdWJsaWMgZnVuY3Rpb24gZ2V0VGh1bWIoJG1ldGEsICRwYXRoLCAkd2lkdGgsICRoZWlnaHQsICRvbmx5SWZFeGlzdHNJbkNhY2hlID0gZmFsc2UpDQorCXsNCisJCXJldHVybiBwYXJlbnQ6OmdldFRodW1iKCRtZXRhLCAkcGF0aCwgbWluKDE2NCwgJHdpZHRoKSwgJGhlaWdodCwgJG9ubHlJZkV4aXN0c0luQ2FjaGUpOw0KKwl9DQorCSovDQorfQ0KKw0KKw0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9iYWNrZW5kLnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9iYWNrZW5kLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDUxZGNlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL2JhY2tlbmQucGhwCkBAIC0wLDAgKzEsMTgwIEBACis8P3BocCAKKy8qKgorKiBVbmlmaWVkIGJhY2tlbmQgZm9yIEltYWdlTWFuYWdlciAKKyoKKyogSW1hZ2UgTWFuYWdlciB3YXMgb3JpZ2luYWxseSBkZXZlbG9wZWQgYnk6CisqICAgWGlhbmcgV2VpIFpodW8sIGVtYWlsOiB4aWFuZ3dlaXpodW8oYXQpaG90bWFpbC5jb20gV2VpIFNob3UuCisqCisqIFVuaWZpZWQgYmFja2VuZCBzcG9uc29yZWQgYnkgRFRMaW5rIFNvZnR3YXJlLCBodHRwOi8vd3d3LmR0bGluay5jb20KKyogSW1wbGVtZW50YXRpb24gYnkgWWVybW8gTGFtZXJzLCBodHRwOi8vd3d3LmZvcm12aXN0YS5jb20KKyoKKyogKGMpIERUTGluaywgTExDIDIwMDUuCisqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKyogVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorKgorKiBERVNDUklQVElPTjoKKyoKKyogSW5zdGVhZCBvZiB1c2luZyBzZXBhcmF0ZSBVUkwncyBmb3IgZWFjaCBmdW5jdGlvbiwgSW1hZ2VNYW5hZ2VyIG5vdworKiByb3V0ZXMgYWxsIHJlcXVlc3RzIHRvIHRoZSBzZXJ2ZXIgdGhyb3VnaCB0aGlzIHNpbmdsZSwgcmVwbGFjZWFibGUsCisqIGVudHJ5IHBvaW50LiBiYWNrZW5kLnBocCBleHBlY3RzIGF0IGxlYXN0IHR3byBVUkwgdmFyaWFibGUgcGFyYW1ldGVyczogCisqCisqIF9fcGx1Z2luPUltYWdlTWFuYWdlciAgIGZvciBmdXR1cmUgZXhwYW5zaW9uOyBpZGVudGlmeSB0aGUgcGx1Z2luIGJlaW5nIHJlcXVlc3RlZC4KKyogX19mdW5jdGlvbj10aHVtYnN8aW1hZ2VzfGVkaXRvckZyYW1lfGVkaXRvcnxtYW5hZ2VyICBmdW5jdGlvbiBiZWluZyBjYWxsZWQuCisqCisqIEhhdmluZyBhIHNpbmdsZSBlbnRyeSBwb2ludCB0aGF0IHN0cmljdGx5IGFkaGVyZXMgdG8gYSBkZWZpbmVkIGludGVyZmFjZSB3aWxsIAorKiBtYWtlIHRoZSBiYWNrZW5kIGNvZGUgbXVjaCBlYXNpZXIgdG8gbWFpbnRhaW4gYW5kIGV4cGFuZC4gSXQgd2lsbCBtYWtlIGl0IGVhc2llcgorKiBvbiBpbnRlZ3JhdG9ycywgbm90IHRvIG1lbnRpb24gaXQnbGwgbWFrZSBpdCBlYXNpZXIgdG8gaGF2ZSBzZXBhcmF0ZSAKKyogaW1wbGVtZW50YXRpb25zIG9mIHRoZSBiYWNrZW5kIGluIGRpZmZlcmVudCBsYW5ndWFnZXMgKFBlcmwsIFB5dGhvbiwgQVNQLCBldGMuKSAKKyoKKyogQHNlZSBjb25maWcuaW5jLnBocAorKi8KKworLy8gU3RyaXAgc2xhc2hlcyBpZiBNUUdQQyBpcyBvbgoraWYoZnVuY3Rpb25fZXhpc3RzKCdzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUnKSkgQHNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsKK2lmKGZ1bmN0aW9uX2V4aXN0cygnZ2V0X21hZ2ljX3F1b3Rlc19ncGMnKSAmJiBAZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkKK3sKKyAgJHRvX2NsZWFuID0gYXJyYXkoJiRfR0VULCAmJF9QT1NULCAmJF9SRVFVRVNULCAmJF9DT09LSUUpOworICB3aGlsZShjb3VudCgkdG9fY2xlYW4pKQorICB7CisgICAgJGNsZWFuaW5nID0mICR0b19jbGVhblthcnJheV9wb3AoJGp1bmsgPSBhcnJheV9rZXlzKCR0b19jbGVhbikpXTsKKyAgICB1bnNldCgkdG9fY2xlYW5bYXJyYXlfcG9wKCRqdW5rID0gYXJyYXlfa2V5cygkdG9fY2xlYW4pKV0pOworICAgIGZvcmVhY2goYXJyYXlfa2V5cygkY2xlYW5pbmcpIGFzICRrKQorICAgIHsKKyAgICAgIGlmKGlzX2FycmF5KCRjbGVhbmluZ1ska10pKQorICAgICAgeworICAgICAgICAkdG9fY2xlYW5bXSA9JiAkY2xlYW5pbmdbJGtdOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAkY2xlYW5pbmdbJGtdID0gc3RyaXBzbGFzaGVzKCRjbGVhbmluZ1ska10pOworICAgICAgfQorICAgIH0KKyAgfQorfQorCitpZihpc3NldCgkX1BPU1RbJ2VuY29kZWRfZGF0YSddKSkKK3sKKyAgJEQgPSBqc29uX2RlY29kZShzdHJfcm90MTMoJF9QT1NUWydlbmNvZGVkX2RhdGEnXSkpOworICBmb3JlYWNoKCREIGFzICRrID0+ICR2KSB7ICRfUE9TVFska109JHY7IGlmKCFpc3NldCgkX1JFUVVFU1RbJGtdKSkgJF9SRVFVRVNUWyRrXSA9ICR2OyB9Cit9CisKK2Z1bmN0aW9uIHNpemVfdG9fYnl0ZXMoJHMpCit7CisgIGlmKHByZWdfbWF0Y2goJy8oWzAtOVwuXSkrKFthLXpBLVpdKykvJywgJHMsICRNKSkKKyAgeworICAgIHN3aXRjaChzdHJ0b2xvd2VyKCRNWzJdKSkKKyAgICB7ICAgICAgCisgICAgICBjYXNlICdtJzoKKyAgICAgICAgcmV0dXJuIGZsb29yKGZsb2F0dmFsKCRNWzFdKSAqIDEwMjQgKiAxMDI0KTsKKyAgICAgICAgCisgICAgICBjYXNlICdiJzoKKyAgICAgICAgcmV0dXJuIGludHZhbCgkTVsxXSk7CisgICAgICAgIAorICAgICAgY2FzZSAna2InOgorICAgICAgICByZXR1cm4gZmxvb3IoZmxvYXR2YWwoJE1bMV0pICogMTAyNCk7ICAgICAgCisgICAgfQorICB9CisgIAorICBpZihmbG9hdHZhbCgkcykgPCAxMCkgICByZXR1cm4gZmxvb3IoZmxvYXR2YWwoJHMpICogMTAyNCAqIDEwMjQpOyAKKyAgaWYoZmxvYXR2YWwoJHMpIDwgMTAyNCkgcmV0dXJuIGZsb29yKGZsb2F0dmFsKCRzKSAqIDEwMjQpOyAvLyBLaWxvYnl0ZXMKKyAgcmV0dXJuIGludHZhbCgkcyk7IC8vIEJ5dGVzCit9CisKK2RlZmluZSgnSV9LTk9XX0FCT1VUX1NVSE9TSU4nLCBUUlVFKTsgLy8gL2NvbnRyaWIveGluaGEtcGhwLmpzIGRvZXMgaXQncyBiZXN0IHRvIGF2b2lkIHRoaXMgcHJvYmxlbSBmb3IgdXMKK3JlcXVpcmVfb25jZSgnY29uZmlnLnBocCcpOworCisvLyBFbnN1cmUgdGh1bWJuYWlsIHBhdGggaXMgT0sKK2lmKCFpc3NldCgkSU1Db25maWdbJ2ZpbGVzX2RpciddKSAmJiAhaXNzZXQoJElNQ29uZmlnWydpbWFnZXNfZGlyJ10pKQoreworICB1bnNldCgkSU1Db25maWdbJ3RodW1ic19kaXInXSk7CisgIHVuc2V0KCRJTUNvbmZpZ1sndGh1bWJzX3VybCddKTsKK30KK2Vsc2UKK3sgCisgIGlmKCFmaWxlX2V4aXN0cygkSU1Db25maWdbJ3RodW1ic19kaXInXSkpIEBta2RpcigkSU1Db25maWdbJ3RodW1ic19kaXInXSk7Cit9CisKK3N3aXRjaCAoIEAkX1JFUVVFU1RbICJfX2Z1bmN0aW9uIiBdICkKK3sKKyAgY2FzZSAncmVhZC1jb25maWcnOiAgICAgICAgCisgICAgLy8gVGhpcyBpcyB1c2VkIHNvIHRoYXQgdGhlIGphdmFzY3JpcHQgY2FuIHJlYWQgdGhlIGNvbmZpZyAKKyAgICAvLyBzbyB3ZSBkb24ndCBoYXZlIHRvIGhhdmUgYSBqcyBjb25maWcgYW5kIGEgcGhwIGNvbmZpZyBkdXBsaWNhdGluZworICAgIC8vIHNldHRpbmdzCisgICAgZWNobyB4aW5oYV90b19qcygkSU1Db25maWcpOworICAgIGJyZWFrOworCisgIGNhc2UgJ2ltYWdlLW1hbmFnZXInOgorICAgIGlmKCFAJElNQ29uZmlnWydpbWFnZXNfZGlyJ10pCisgICAgeworICAgICAgLy8gU2Vzc2lvbiB0aW1lIG91dAorICAgICAgZWNobyAneyJzdGF0dXMiIDogMCwgImVycm9yIjogIk5vIGltYWdlc19kaXIsIG1vc3QgbGlrZWx5IHlvdXIgc2Vzc2lvbiBoYXMgdGltZWQgb3V0LCBvciB0aGUgZmlsZSB1cGxvYWQgd2FzIHRvbyBsYXJnZSBmb3IgdGhpcyBzZXJ2ZXIgdG8gaGFuZGxlLCB0cnkgcmVmcmVzaGluZyB5b3VyIGJyb3dzZXIsIG9yIHVwbG9hZGluZyBhIHNtYWxsZXIgZmlsZSBpZiBpdCBzdGlsbCBkb2VzIG5vdCB3b3JrLiIsICJkYXRhIjogJyAuIGpzb25fZW5jb2RlKCRfUkVRVUVTVCkuJ30nO2V4aXQ7CisgICAgfQorICAgIAorICAgIC8vIGluY2x1ZGUoJ21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9Db25uZWN0b3IvRmlsZU1hbmFnZXIucGhwJyk7CisgICAgaW5jbHVkZSgnWGluaGFGaWxlTWFuYWdlci5waHAnKTsKKyAgICAKKyAgICAkYnJvd3NlciA9IG5ldyBYaW5oYUZpbGVNYW5hZ2VyKGFycmF5KAorICAgICAgJ2ltYWdlc19kaXInICAgID0+ICRJTUNvbmZpZ1snaW1hZ2VzX2RpciddLAorICAgICAgJ2ltYWdlc191cmwnICAgID0+ICRJTUNvbmZpZ1snaW1hZ2VzX3VybCddLAorICAgICAgCisgICAgICAndGh1bWJzX2RpcicgICAgPT4gJElNQ29uZmlnWyd0aHVtYnNfZGlyJ10sCisgICAgICAndGh1bWJzX3VybCcgICAgPT4gJElNQ29uZmlnWyd0aHVtYnNfdXJsJ10sCisgICAgICAKKyAgICAgICdhc3NldEJhc2VQYXRoJyA9PiAkSU1Db25maWdbJ2Jhc2VfdXJsJ10gLicvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzJywKKyAgICAgIAorICAgICAgJ3VwbG9hZCcgICAgICAgID0+ICRJTUNvbmZpZ1snaW1hZ2VzX2FsbG93X3VwbG9hZCddLAorICAgICAgJ2Rlc3Ryb3knICAgICAgID0+ICRJTUNvbmZpZ1snaW1hZ2VzX2FsbG93X2RlbGV0ZSddLCAgICAgIAorICAgICAgJ2NyZWF0ZScgICAgICAgID0+ICRJTUNvbmZpZ1snaW1hZ2VzX2FsbG93X2NyZWF0ZV9kaXInXSwKKyAgICAgICdtb3ZlJyAgICAgICAgICA9PiAkSU1Db25maWdbJ2ltYWdlc19hbGxvd19tb3ZlJ10sCisgICAgICAnZG93bmxvYWQnICAgICAgPT4gJElNQ29uZmlnWydpbWFnZXNfYWxsb3dfZG93bmxvYWQnXSwKKyAgICAgIAorICAgICAgCisgICAgICAnbWF4VXBsb2FkU2l6ZScgPT4gc2l6ZV90b19ieXRlcygkSU1Db25maWdbJ2ltYWdlc19tYXhfdXBsb2FkX3NpemUnXSksICAgICAgCisgICAgICAnc3VnZ2VzdGVkTWF4SW1hZ2VEaW1lbnNpb24nID0+ICRJTUNvbmZpZ1snaW1hZ2VzX3N1Z2dlc3RlZF9pbWFnZV9kaW1lbnNpb24nXSwKKyAgICAgICd0aHVtYm5haWxzTXVzdEdvVGhyb3VnaEJhY2tlbmQnID0+IEZBTFNFLCAgICAgICAgICAKKyAgICAgICdmaWx0ZXInICAgICAgICA9PiAnaW1hZ2UvJywgICAgICAgICAgCisgICAgICAKKyAgICAgICd0aHVtYkJpZ1NpemUnICA9PiAxNTAsCisgICAgKSk7CisKKyAgICAkYnJvd3Nlci0+ZmlyZUV2ZW50KCFlbXB0eSgkX1JFUVVFU1RbJ2V2ZW50J10pID8gJF9SRVFVRVNUWydldmVudCddIDogbnVsbCk7CisgICAgYnJlYWs7CisgIAorICBjYXNlICdmaWxlLW1hbmFnZXInOgorICAgIGlmKCFAJElNQ29uZmlnWydmaWxlc19kaXInXSkKKyAgICB7CisgICAgICAvLyBTZXNzaW9uIHRpbWUgb3V0CisgICAgICBlY2hvICd7InN0YXR1cyIgOiAwLCAiZXJyb3IiOiAiTm8gZmlsZXNfZGlyLCBtb3N0IGxpa2VseSB5b3VyIHNlc3Npb24gaGFzIHRpbWVkIG91dC4ifSc7ZXhpdDsKKyAgICB9CisgICAgCisgICAgaW5jbHVkZSgnWGluaGFGaWxlTWFuYWdlci5waHAnKTsKKyAgICAKKyAgICAkYnJvd3NlciA9IG5ldyBYaW5oYUZpbGVNYW5hZ2VyKGFycmF5KAorICAgICAgJ2ZpbGVzX2RpcicgICAgID0+ICRJTUNvbmZpZ1snZmlsZXNfZGlyJ10sCisgICAgICAnZmlsZXNfdXJsJyAgICAgPT4gJElNQ29uZmlnWydmaWxlc191cmwnXSwKKyAgICAgIAorICAgICAgJ3RodW1ic19kaXInICAgID0+ICRJTUNvbmZpZ1sndGh1bWJzX2RpciddLAorICAgICAgJ3RodW1ic191cmwnICAgID0+ICRJTUNvbmZpZ1sndGh1bWJzX3VybCddLAorICAgICAgCisgICAgICAnYXNzZXRCYXNlUGF0aCcgPT4gJElNQ29uZmlnWydiYXNlX3VybCddIC4nL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cycsCisgICAgICAKKyAgICAgICd1cGxvYWQnICAgICAgICA9PiAkSU1Db25maWdbJ2ZpbGVzX2FsbG93X3VwbG9hZCddLAorICAgICAgJ2Rlc3Ryb3knICAgICAgID0+ICRJTUNvbmZpZ1snZmlsZXNfYWxsb3dfZGVsZXRlJ10sCisgICAgICAnY3JlYXRlJyAgICAgICAgPT4gJElNQ29uZmlnWydmaWxlc19hbGxvd19jcmVhdGVfZGlyJ10sCisgICAgICAnbW92ZScgICAgICAgICAgPT4gJElNQ29uZmlnWydmaWxlc19hbGxvd19tb3ZlJ10sCisgICAgICAnZG93bmxvYWQnICAgICAgPT4gJElNQ29uZmlnWydmaWxlc19hbGxvd19kb3dubG9hZCddLAorICAgICAgCisgICAgICAKKyAgICAgICdtYXhVcGxvYWRTaXplJyA9PiBzaXplX3RvX2J5dGVzKCRJTUNvbmZpZ1snZmlsZXNfbWF4X3VwbG9hZF9zaXplJ10pLCAgICAgIAorICAgICAgJ3N1Z2dlc3RlZE1heEltYWdlRGltZW5zaW9uJyA9PiAkSU1Db25maWdbJ2ZpbGVzX3N1Z2dlc3RlZF9pbWFnZV9kaW1lbnNpb24nXSwKKyAgICAgICd0aHVtYm5haWxzTXVzdEdvVGhyb3VnaEJhY2tlbmQnID0+IEZBTFNFLCAgICAgIAorICAgICAvLyAnZmlsdGVyJyAgICAgICAgPT4gJElNQ29uZmlnWydmaWxlc19maWx0ZXInXSwKKyAgICAgICd0aHVtYkJpZ1NpemUnICA9PiAxNTAsCisgICAgICAndXNlR2V0SUQzSWZBdmFpbGFibGUnID0+IGZhbHNlLAorICAgICkpOworCisgICAgJGJyb3dzZXItPmZpcmVFdmVudCghZW1wdHkoJF9SRVFVRVNUWydldmVudCddKSA/ICRfUkVRVUVTVFsnZXZlbnQnXSA6IG51bGwpOworICAgIGJyZWFrOworfQorCis/PgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL2NvbmZpZy5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvY29uZmlnLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2RkZGJjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL2NvbmZpZy5waHAKQEAgLTAsMCArMSwyNDcgQEAKKzw/cGhwCisgIC8qKgorICAgID0gTW9vdG9vbHNGaWxlTWFuYWdlciBDb25maWd1cmF0aW9uIEZpbGUgPQorICAgICAgICAKKyAgICBDb25maWd1cmUgZWl0aGVyIGJ5IGRpcmVjdGx5IGVkaXRpbmcgdGhlIGNvbmZpZy5waHAgZmlsZSAobm90IHJlY29tbWVuZGVkKSBvcgorICAgIGFzIGZvbGxvd3MuLi4KKworICAgIDEuIFlvdSBuZWVkIHRvIGJlIGFibGUgdG8gcHV0IFBIUCBpbiB5b3VyIFhpbmhhQ29uZmlnLmpzLCBzbworICAgICAgeW91IG1heSB3YW50IHRvIGNhbGwgaXQgWGluaGFDb25maWcucGhwIGluc3RlYWQsIG9yIHdoYXRldmVyIG90aGVyCisgICAgICBtZXRob2QgeW91IGNob29zZSAoZWcgcHV0IHRoZSBjb25maWcgYXMgYW4gaW5saW5lIHNjcmlwdCBpbiB5b3VyIAorICAgICAgbWFpbiBwaHAgcGFnZSkuCisgICAgICAKKyAgICAyLiBJbiBzdGVwIDMgb2YgeW91ciBYaW5oYUNvbmZpZyB3cml0ZSBzb21ldGhpbmcgbGlrZS4uLgorICAgICAge3t7CisgICAgICAgIHdpdGggKHhpbmhhX2NvbmZpZy5Nb290b29sc0ZpbGVNYW5hZ2VyKQorICAgICAgICB7IAorICAgICAgICAgIDw/cGhwIAorICAgICAgICAgICAgcmVxdWlyZV9vbmNlKCcvcGF0aC90by94aW5oYS9jb250cmliL3BocC14aW5oYS5waHAnKTsKKyAgICAgICAgICAgIHhpbmhhX3Bhc3NfdG9fcGhwX2JhY2tlbmQKKyAgICAgICAgICAgICggICAgICAgCisgICAgICAgICAgICAgIGFycmF5CisgICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAnaW1hZ2VzX2RpcicgPT4gJy9ob21lL3lvdXIvZGlyZWN0b3J5JywKKyAgICAgICAgICAgICAgICAnaW1hZ2VzX3VybCcgPT4gJy9kaXJlY3RvcnknLAorICAgICAgICAgICAgICAgICdhbGxvd19pbWFnZXNfdXBsb2FkJyA9PiB0cnVlLAorICAgICAgICAgICAgICApCisgICAgICAgICAgICApCisgICAgICAgICAgPz4KKyAgICAgICAgfQorICAgICAgfX19CisKKyAgICBUaGlzIHdpbGwgd29yayBwcm92aWRlZCB5b3UgYXJlIHVzaW5nIG5vcm1hbCBmaWxlLWJhc2VkIFBIUCBzZXNzaW9ucworICAgIChtb3N0IGxpa2VseSksIGlmIG5vdCwgeW91IG1heSBuZWVkIHRvIG1vZGlmeSB0aGUgcGhwLXhpbmhhLnBocAorICAgIGZpbGUgdG8gc3VpdCB5b3VyIHNldHVwLgorICAKKyAgKiBAYXV0aG9yICRBdXRob3IkCisgICogQHZlcnNpb24gJElkJAorICAqIEBwYWNrYWdlIE1vb3Rvb2xzRmlsZU1hbmFnZXIKKyAgKgorICAqLworCisKKyAgLyoqICAgIAorICAgID09IEZpbGUgUGF0aHMgUkVRVUlSRUQgPT0KKyAgICAKKyAgICBUaGlzIHBsdWdpbiBvcGVyYXRlcyAob3B0aW9uYWxseSkgaW4gdHdvIG1vZGVzLgorICAgIAorICAgIDEuIEFzIGEgRmlsZSBNYW5hZ2VyIHdoZXJlIHBlb3BsZSBhcmUgaW5zZXJ0aW5nIGEgbGluayB0byBhIGZpbGUgCisgICAgICAoZWcgYSBkb2Mgb3IgcGRmIGNvbW1vbmx5KSwgd2UgY2FsbCB0aGlzICJmaWxlcyIgbW9kZS4KKyAgICAyLiBBcyBhbiBJbWFnZSBNYW5hZ2VyIHdoZXJlIHBlb3BsZSBhcmUgaW5zZXJ0aW5nIGFuIGlubGluZSBpbWFnZSwKKyAgICAgIHdlIGNhbGwgdGhpcyAiaW1hZ2VzIiBtb2RlLgorICAgIAorICAgIFlvdSBtYXkgcHJvdmlkZSBvbmUgb2YsIG9yIGJvdGggb2YsIGZpbGVzX2RpciBhbmQgaW1hZ2VzX2Rpci4gIElmIHlvdSBkbyBub3QgCisgICAgcHJvdmlkZSBvbmUsIHRoYXQgbW9kZSBvZiBNb290b29sc0ZpbGVNYW5hZ2VyIHdpbGwgYmUgZGlzYWJsZWQuCisgICAgCisgICAgIyBgZmlsZXNfZGlyYCAtLSBEaXJlY3RvcnkgcGF0aCB0byB0aGUgbG9jYXRpb24gd2hlcmUgb3JkaW5hcnkgZmlsZXMgYXJlIHN0b3JlZAorICAgICAgICAgICAgICAgICAgICAgIChlZyAvaG9tZS95b3UvcHVibGljX2h0bWwvZG93bmxvYWRzLyApICAgICAgICAgICAgICAgICAgIAorICAgICMgYGZpbGVzX3VybGAgLS0gVGhlIFVSTCBwYXRoIHRvIHRoZSBmaWxlc19kaXIKKyAgICAgICAgICAgICAgICAgICAgICAoZWcgL2Rvd25sb2Fkcy8pICAKKyAgICAjIGBpbWFnZXNfZGlyYCAtLSBEaXJlY3RvcnkgcGF0aCB0byB0aGUgbG9jYXRpb24gd2hlcmUgaW5saW5lIGltYWdlcyBhcmUgc3RvcmVkCisgICAgICAgICAgICAgICAgICAgICAgKGVnIC9ob21lL3lvdS9wdWJsaWNfaHRtbC9pbWFnZXMvKQorICAgICMgYGltYWdlc191cmxgIC0tIFRoZSBVUkwgcGF0aCB0byB0aGUgaW1hZ2VzX2RpcgorCisgICAgPT09IFNlY3VyaXR5IENhdXRpb24gPT09CisKKyAgICBZb3Ugc2hvdWxkIGVuc3VyZSB0aGF0IHRoZSBwYXRocyB5b3Ugc3BlY2lmeSBhcmUgcHJvdGVjdGVkIGFnYWluc3QgaGF2aW5nIFBIUCBhbmQKKyAgICBvdGhlciBzY3JpcHRzIGZyb20gYmVpbmcgZXhlY3V0ZWQuICBUaGUgZm9sbG93aW5nIC5odGFjY2VzcyBmaWxlIGlzIGEgZ29vZCBpZGVhCisKKyAgICB7e3sKKyAgICAgIDxJZk1vZHVsZSBtb2RfcGhwLmM+CisgICAgICAgIHBocF9mbGFnIGVuZ2luZSBvZmYKKyAgICAgIDwvSWZNb2R1bGU+CisgICAgICBBZGRUeXBlIHRleHQvaHRtbCAuaHRtbCAuaHRtIC5zaHRtbCAucGhwIC5waHAzIC5waHA0IC5waHA1IC5waHA2IC5waHA3IC5waHA4IC5waHRtbCAucGh0bSAucGwgLnB5IC5jZ2kKKyAgICAgIFJlbW92ZUhhbmRsZXIgLnBocAorICAgICAgUmVtb3ZlSGFuZGxlciAucGhwOAorICAgICAgUmVtb3ZlSGFuZGxlciAucGhwNworICAgICAgUmVtb3ZlSGFuZGxlciAucGhwNgorICAgICAgUmVtb3ZlSGFuZGxlciAucGhwNQorICAgICAgUmVtb3ZlSGFuZGxlciAucGhwNAorICAgICAgUmVtb3ZlSGFuZGxlciAucGhwMworICAgIH19fQorICAgIAorICAqLworCisgICRJTUNvbmZpZ1snZmlsZXNfZGlyJ10gID0gRkFMU0U7IC8vIE5vIHRyYWlsaW5nIHNsYXNoIAorICAkSU1Db25maWdbJ2ZpbGVzX3VybCddICA9IEZBTFNFOyAvLyBObyB0cmFpbGluZyBzbGFzaAorCisgICRJTUNvbmZpZ1snaW1hZ2VzX2RpciddID0gRkFMU0U7IC8vIE5vIHRyYWlsaW5nIHNsYXNoCisgICRJTUNvbmZpZ1snaW1hZ2VzX3VybCddID0gRkFMU0U7IC8vIE5vIHRyYWlsaW5nIHNsYXNoCisgIAorICAkSU1Db25maWdbJ3RodW1ic19kaXInXSA9IE5VTEw7ICAvLyBXaWxsIGRlZmF1bHQgdG8gaW1hZ2VzX2Rpci8udGh1bWJzIG9yIGZpbGVzX2Rpci8udGh1bWJzCisgICRJTUNvbmZpZ1sndGh1bWJzX3VybCddID0gTlVMTDsgIC8vIFdpbGwgZGVmYXVsdCB0byBpbWFnZXNfdXJsLy50aHVtYnMgb3IgZmlsZXNfdXJsLy50aHVtYnMKKyAgLyoqCisgICAgPT0gVHVybmluZyBPbiBVcGxvYWRzID09CisgICAgV2UgaGF2ZSB0d28gc2V0cyBvZiBzZXR0aW5ncyBmb3IgdHVybmluZyBvbiB1cGxvYWRzLCBvbmUgY29udHJvbHMgdGhlIGZpbGVzIG1vZGUKKyAgICBvZiB0aGUgcGx1Z2luLCB0aGUgb3RoZXIgaXMgZm9yIGltYWdlcyBtb2RlLgorCisgICAgTm90ZSB0aGF0IGFsbG93aW5nIHVwbG9hZCBhbHNvIHBlcm1pdHMgdGhlIHVzZXIgdG8gY3JlYXRlIHN1YmRpcmVjdG9yaWVzIHRvIGJldHRlcgorICAgIG9yZ2FuaXNlIHRoZSBmaWxlcy4KKyAgICAKKyAgICA9PT0gTWF4aW11bSBGaWxlIFNpemVzID09PQorCisgICAgRWFjaCBtb2RlIGNhbiBoYXZlIGEgZGlmZmVyZW50IG1heGltdW0gZmlsZSBzaXplIHRoYXQgY2FuIGJlIHVwbG9hZGVkLCB0aGlzCisgICAgc2l6ZSBpcyBhIG51bWJlciBmb2xsb3dlZCBieSBvbmUgb2YgTSwgS0Igb3IgQi4KKworICAgID09PSBTdWdnZXN0ZWQgSW1hZ2UgRGltZW5zaW9ucyA9PT0KKworICAgIEVhY2ggbW9kZSBjYW4gaGF2ZSBhIGRpZmZlcmVudCAic3VnZ2VzdGVkIG1heGltdW0gaW1hZ2UgZGltZW5zaW9uIiwgd2hlbiB0aGUKKyAgICB1c2VyIHVzZXMgdGhlIE1vb3Rvb2xzIEZpbGUgTWFuYWdlciB0byB1cGxvYWQgYSBmaWxlLCB0aGV5IGFyZSBhYmxlIHRvIGNob29zZQorICAgIHRvICJyZXNpemUgbGFyZ2UgaW1hZ2VzIiBvbiB1cGxvYWQuICBUaGlzIGRlZmluZXMgd2hhdCAibGFyZ2UiIG1lYW5zLgorICAKKyAgKi8KKworICAkSU1Db25maWdbJ2ZpbGVzX2FsbG93X3VwbG9hZCddICAgICA9IGZhbHNlOworICAkSU1Db25maWdbJ2ZpbGVzX2FsbG93X2RlbGV0ZSddICAgICA9IGZhbHNlOworICAkSU1Db25maWdbJ2ZpbGVzX21heF91cGxvYWRfc2l6ZSddICA9ICczTSc7CisgICRJTUNvbmZpZ1snZmlsZXNfc3VnZ2VzdGVkX2ltYWdlX2RpbWVuc2lvbiddICA9IGFycmF5KCd3aWR0aCcgPT4gMjA0OCwgJ2hlaWdodCcgPT4gMTUzNik7CisKKyAgJElNQ29uZmlnWydpbWFnZXNfYWxsb3dfdXBsb2FkJ10gICAgID0gZmFsc2U7CisgICRJTUNvbmZpZ1snaW1hZ2VzX2FsbG93X2RlbGV0ZSddICAgICA9IGZhbHNlOworICAkSU1Db25maWdbJ2ltYWdlc19tYXhfdXBsb2FkX3NpemUnXSAgPSAnM00nOworICAkSU1Db25maWdbJ2ltYWdlc19zdWdnZXN0ZWRfaW1hZ2VfZGltZW5zaW9uJ10gID0gJElNQ29uZmlnWydmaWxlc19zdWdnZXN0ZWRfaW1hZ2VfZGltZW5zaW9uJ107CisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgICAgICAgT1BUSU9OQUwgU0VUVElOR1MgCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKiBFeHBhbmRlZCBQZXJtaXNzaW9ucyAqLworCiskSU1Db25maWdbJ2ltYWdlc19hbGxvd19jcmVhdGVfZGlyJ10gID0gTlVMTDsgIC8vIERlZmF1bHRzIHRvIGFsbG93X2ltYWdlc191cGxvYWQKKyRJTUNvbmZpZ1snaW1hZ2VzX2FsbG93X21vdmUnXSAgICAgICAgPSBmYWxzZTsgCiskSU1Db25maWdbJ2ltYWdlc19hbGxvd19kb3dubG9hZCddICAgID0gZmFsc2U7IAorICAKKyRJTUNvbmZpZ1snZmlsZXNfYWxsb3dfY3JlYXRlX2RpciddICA9IE5VTEw7IC8vIERlZmF1bHRzIHRvIGFsbG93X2ZpbGVzX3VwbG9hZAorJElNQ29uZmlnWydmaWxlc19hbGxvd19tb3ZlJ10gICAgICAgID0gZmFsc2U7IAorJElNQ29uZmlnWydmaWxlc19hbGxvd19kb3dubG9hZCddICAgID0gZmFsc2U7IAorICAKKy8qKiBMaXN0aW5nIE1vZGUgQ29uZmlndXJhdGlvbiAqLworCiskSU1Db25maWdbJ2ltYWdlc19saXN0X3R5cGUnXSAgICAgICAgPSAnbGlzdCc7IC8vIE9yICd0aHVtYicKKyRJTUNvbmZpZ1snaW1hZ2VzX3BhZ2luYXRpb25fc2l6ZSddICA9IDEwMDAwOyAgLy8gQnkgZGVmYXVsdCwgYSBsYXJnZSBudW1iZXIgdG8gYXZvaWQgcGFnaW5hdGlvbiBzdHJvbmdseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgTUZNIG1heSByZWR1Y2UgdGhpcyBhdXRvbWF0aWNhbGx5IGhvd2V2ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyRJTUNvbmZpZ1snaW1hZ2VzX2xpc3RfbW9kZV9vdmVyJ10gICA9IDMwOyAgICAgLy8gSWYgYSBmb2xkZXIgY29udGFpbnMgbW9yZSB0aGFuIHRoaXMgbWFueSBlbnRyaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IHdpbGwgZmFsbCBiYWNrIHRvICdsaXN0JyBtb2RlIHdoZW4gaW4gJ3RodW1iJyBtb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB1c2VyIGNhbiBzd2l0Y2ggYmFjayB0byAndGh1bWInIGlmIHRoZXkgd2FudC4KKyRJTUNvbmZpZ1snaW1hZ2VzX2xpc3Rfc3RhcnRfaW4nXSAgICA9IE5VTEw7ICAgLy8gWW91IGNhbiBzZXQgdGhpcyB0byBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIGltYWdlc19kaXIKKworCiskSU1Db25maWdbJ2ZpbGVzX2xpc3RfdHlwZSddICAgICAgICA9ICdsaXN0JzsgIC8vIE9yICd0aHVtYicKKyRJTUNvbmZpZ1snZmlsZXNfcGFnaW5hdGlvbl9zaXplJ10gID0gMTAwMDA7ICAgLy8gQnkgZGVmYXVsdCwgYSBsYXJnZSBudW1iZXIgdG8gYXZvaWQgcGFnaW5hdGlvbiBzdHJvbmdseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgTUZNIG1heSByZWR1Y2UgdGhpcyBhdXRvbWF0aWNhbGx5IGhvd2V2ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyRJTUNvbmZpZ1snZmlsZXNfbGlzdF9tb2RlX292ZXInXSAgID0gMzA7ICAgICAgLy8gSWYgYSBmb2xkZXIgY29udGFpbnMgbW9yZSB0aGFuIHRoaXMgbWFueSBlbnRyaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IHdpbGwgZmFsbCBiYWNrIHRvICdsaXN0JyBtb2RlIHdoZW4gaW4gJ3RodW1iJyBtb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB1c2VyIGNhbiBzd2l0Y2ggYmFjayB0byAndGh1bWInIGlmIHRoZXkgd2FudC4KKyRJTUNvbmZpZ1snZmlsZXNfbGlzdF9zdGFydF9pbiddICAgID0gTlVMTDsgICAgLy8gWW91IGNhbiBzZXQgdGhpcyB0byBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIGltYWdlc19kaXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKioKKworPT0gUGx1Z2luIFBhdGggPT0KKyAKKyBGb3IgbW9zdCBwZW9wbGUgdGhlIGRlZmF1bHRzIHdpbGwgd29yayBmaW5lLCBidXQgaWYgeW91IGhhdmUgdHJvdWJsZSwgeW91IGNhbiBzZXQKKyBgYmFzZV9kaXJgIHRvIGJlIHRoZSBkaXJlY3RvcnkgcGF0aCB0byB4aW5oYS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIKKyBgYmFzZV91cmxgIHRvIGJlIHRoZSB1cmwgcGF0aCB0byB4aW5oYS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIKKyovCisKKyRJTUNvbmZpZ1snYmFzZV9kaXInXSA9IGdldGN3ZCgpOworJElNQ29uZmlnWydiYXNlX3VybCddID0gcHJlZ19yZXBsYWNlKCcvXC9iYWNrZW5kXC5waHAuKi8nLCAnJywgJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pOworCisvKioKKworPT0gSFRNTCBDb21wYXRhYmlsaXR5ID09CisKKyBJZiB0aGUgSFRNTCB5b3UgYXJlIGVkaXRpbmcgaW4gWGluaGEgaXMgZGVzdGluZWQgZm9yIGFuIGVtYWlsIHlvdSB3aWxsIHByb2JhYmx5IHdhbnQgdG8gdXNlIGhzcGFjZSBhbmQgdnNwYWNlIGluc3RlYWQgb2YgQ1NTIG1hcmdpbnMgYmVjYXVzZSBvZiBwb29yIEVtYWlsIHN1cHBvcnQgZm9yIENTUy4KKyAKKyovCisKKyRJTUNvbmZpZ1snaW1hZ2VzX3VzZV9oc3BhY2VfdnNwYWNlJ10gPSBUUlVFOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAgICAgPT09PT09PT09PT09PT09PT09IEVORCBPRiBDT05GSUdVUkFUSU9OID09PT09PT09PT09PT09PT09PT09PT09ICAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vIFN0YW5kYXJkIFBIUCBCYWNrZW5kIERhdGEgUGFzc2luZworLy8gIGlmIGRhdGEgd2FzIHBhc3NlZCB1c2luZyB4aW5oYV9wYXNzX3RvX3BocF9iYWNrZW5kKCkgd2UgbWVyZ2UgdGhlIGl0ZW1zCisvLyAgcHJvdmlkZWQgaW50byB0aGUgQ29uZmlnCityZXF1aXJlX29uY2UocmVhbHBhdGgoZGlybmFtZShfX0ZJTEVfXykgLiAnLy4uLy4uL2NvbnRyaWIvcGhwLXhpbmhhLnBocCcpKTsKKworaWYoJHBhc3NlZF9kYXRhID0geGluaGFfcmVhZF9wYXNzZWRfZGF0YSgpKQoreworICAkSU1Db25maWcgPSBhcnJheV9tZXJnZSgkSU1Db25maWcsICRwYXNzZWRfZGF0YSk7Cit9CisKKy8vIEJhY2sgQ29tcGF0LCBTb21lIG9mIG91ciBjb25maWcgb3B0aW9ucyBoYXZlIGJlZW4gcmVuYW1lZCwgCisvLyBpZiB0aGUgb2xkIG5hbWUgaXMgcHJlc2VudCwgdGhhdCB0YWtlcyBwcmVjZW5kZW5jZS4KKyRSZW5hbWVkQ29uZmlnVmFycyA9IGFycmF5KAorICAnVXNlSFNwYWNlVlNwYWNlJyAgICAgICAgPT4gJ2ltYWdlc191c2VfaHNwYWNlX3ZzcGFjZScsCisgIAorICAnYWxsb3dfZmlsZXNfdXBsb2FkJyAgICAgPT4gJ2ZpbGVzX2FsbG93X3VwbG9hZCcsCisgICdhbGxvd19maWxlc19kZWxldGUnICAgICA9PiAnZmlsZXNfYWxsb3dfZGVsZXRlJywKKyAgJ2FsbG93X2ZpbGVzX2NyZWF0ZV9kaXInID0+ICdmaWxlc19hbGxvd19jcmVhdGVfZGlyJywKKyAgJ2FsbG93X2ZpbGVzX21vdmUnICAgICAgID0+ICdmaWxlc19hbGxvd19tb3ZlJywKKyAgJ2FsbG93X2ZpbGVzX2Rvd25sb2FkJyAgID0+ICdmaWxlc19hbGxvd19kb3dubG9hZCcsCisgIAorICAnbWF4X2ZpbGVzX3VwbG9hZF9zaXplJyAgID0+ICdmaWxlc19tYXhfdXBsb2FkX3NpemUnLAorICAnc3VnZ2VzdGVkX2ZpbGVzX2ltYWdlX2RpbWVuc2lvbicgPT4gJ2ZpbGVzX3N1Z2dlc3RlZF9pbWFnZV9kaW1lbnNpb24nLAorICAKKyAgJ2FsbG93X2ltYWdlc191cGxvYWQnICAgICA9PiAnaW1hZ2VzX2FsbG93X3VwbG9hZCcsCisgICdhbGxvd19pbWFnZXNfZGVsZXRlJyAgICAgPT4gJ2ltYWdlc19hbGxvd19kZWxldGUnLAorICAnYWxsb3dfaW1hZ2VzX2NyZWF0ZV9kaXInID0+ICdpbWFnZXNfYWxsb3dfY3JlYXRlX2RpcicsCisgICdhbGxvd19pbWFnZXNfbW92ZScgICAgICAgPT4gJ2ltYWdlc19hbGxvd19tb3ZlJywKKyAgJ2FsbG93X2ltYWdlc19kb3dubG9hZCcgICA9PiAnaW1hZ2VzX2FsbG93X2Rvd25sb2FkJywKKyAgCisgICdtYXhfaW1hZ2VzX3VwbG9hZF9zaXplJyAgPT4gJ2ltYWdlc19tYXhfdXBsb2FkX3NpemUnLAorICAnc3VnZ2VzdGVkX2ltYWdlc19pbWFnZV9kaW1lbnNpb24nID0+ICdpbWFnZXNfc3VnZ2VzdGVkX2ltYWdlX2RpbWVuc2lvbicsICAKKyk7CisKK2ZvcmVhY2goJFJlbmFtZWRDb25maWdWYXJzIGFzICRPbGQgPT4gJE5ldykKK3sKKyAgaWYoaXNzZXQoJElNQ29uZmlnWyRPbGRdKSkKKyAgeworICAgICROZXcgPSAkSU1Db25maWdbJE9sZF07CisgICAgdW5zZXQoJElNQ29uZmlnWyRPbGRdKTsgICAgCisgIH0KK30KKworaWYoIWlzc2V0KCRJTUNvbmZpZ1sndGh1bWJzX2RpciddKSkKK3sKKyAgJElNQ29uZmlnWyd0aHVtYnNfZGlyJ10gPSAoaXNzZXQoJElNQ29uZmlnWydpbWFnZXNfZGlyJ10pID8gJElNQ29uZmlnWydpbWFnZXNfZGlyJ10gOiAkSU1Db25maWdbJ2ZpbGVzX2RpciddKSAuICcvLnRodW1icyc7Cit9CisKK2lmKCFpc3NldCgkSU1Db25maWdbJ3RodW1ic191cmwnXSkpCit7CisgICRJTUNvbmZpZ1sndGh1bWJzX3VybCddID0gKGlzc2V0KCRJTUNvbmZpZ1snaW1hZ2VzX3VybCddKSA/ICRJTUNvbmZpZ1snaW1hZ2VzX3VybCddIDogJElNQ29uZmlnWydmaWxlc191cmwnXSkgLiAnLy50aHVtYnMnOworfQorCitpZighaXNzZXQoJElNQ29uZmlnWydpbWFnZXNfYWxsb3dfY3JlYXRlX2RpciddKSkgCit7CisgICRJTUNvbmZpZ1snaW1hZ2VzX2FsbG93X2NyZWF0ZV9kaXInXSA9ICRJTUNvbmZpZ1snaW1hZ2VzX2FsbG93X3VwbG9hZCddOworfQorCitpZighaXNzZXQoJElNQ29uZmlnWydmaWxlc19hbGxvd19jcmVhdGVfZGlyJ10pKSAKK3sKKyAgJElNQ29uZmlnWydmaWxlc19hbGxvd19jcmVhdGVfZGlyJ10gPSAkSU1Db25maWdbJ2ZpbGVzX2FsbG93X3VwbG9hZCddOworfQorCis/PgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL2ltZy9lZF9saW5rZmlsZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvaW1nL2VkX2xpbmtmaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGFjMjMyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL2ltZy9lZF9saW5rZmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL2ltZy9sb2NrZWQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL2ltZy9sb2NrZWQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNDcyMzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvaW1nL2xvY2tlZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL2xhbmcvZGEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbGFuZy9kYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDYwYWFjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL2xhbmcvZGEuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIkluZHPDpnQgZmlsLWxpbmsiLAorICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiVsOmbGcgdmVubGlnc3Qgbm9nZXQgdGVrc3QgZsO4ciBkdSBsYXZlciBldCBueXQgbGluay4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9sYW5nL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg5NDk0OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICJEYXRlaWxpbmsgZWluZsO8Z2VuIiwKKyAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIlNpZSBtw7xzc2VuIGVpbmVuIFRleHQgbWFya2llcmVuIHVtIGVpbmVuIExpbmsgenUgZXJzdGVsbGVuIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbGFuZy9mci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZDY5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbGFuZy9mci5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkluc2VydCBGaWxlIExpbmsiOiAiSW5zw6lyZXIgdW4gbGllbiB2ZXJzIGZpY2hpZXIiLAorICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiVm91cyBkZXZleiBzw6lsZWN0aW9ubmVyIHVuIHRleHRlIGF2YW50IGRlIGNyw6llciB1biBub3V2ZWF1IGxpZW4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9sYW5nL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJhNzhlNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9sYW5nL2phLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiamEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICLjg5XjgqHjgqTjg6vjgbjjga7jg6rjg7Pjgq/jgpLmjL/lhaUiLAorICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAi44Oq44Oz44Kv44KS5L2c5oiQ44GZ44KL44Gr44Gv44OG44Kt44K544OI44KS6YG45oqe44GZ44KL5b+F6KaB44GM44GC44KK44G+44GZIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL2xhbmcvbGNfYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODAzOTIyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDI2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgIkluc2VydCBGaWxlIExpbmsiOiAiIiwKKyAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbGFuZy9uYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9sYW5nL25iLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YjRkYWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkluc2VydCBGaWxlIExpbmsiOiAiU2V0dCBpbm4gbGVua2UgdGlsIGZpbCIsCisgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICJEdSBtw6UgbWFya2VyZSB0ZWtzdCBlbGxlciBldCBiaWxkZSBmw7hyIGR1IGthbiBsYWdlIGVuIGxlbmtlLiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbGFuZy9ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTEwYjBhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL2xhbmcvbmwuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJubCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIkh5cGVsaW5rIHZhbiBiZXN0YW5kaW52b2VnZW4iLAorICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiU2VsZWN0ZWVyIGRlIHRla3N0IHdlbGtlIGdlbGlua3QgbW9ldCB3b3JkZW4uIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9sYW5nL3BsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NTIyNzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbGFuZy9wbC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInBsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkluc2VydCBGaWxlIExpbmsiOiAiV3N0YXcgb2Rub8WbbmlrIGRvIHBsaWt1IG5hIHNlcndlcnplIiwKKyAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIlphem5hY3ogdGVrc3QgcHJ6ZWQgZG9kYW5pZW0gb2Rub8WbbmlrYS4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9sYW5nL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL2xhbmcvcHRfYnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQyMjk1ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICJJbnNlcmlyIExpbmsgZGUgQXJxdWl2byIsCisgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICJWb2PDqiBwcmVjaXNhIHNlbGVjaW9uYXIgYWxndW0gdGV4dG8gYW50ZXMgZGUgY3JpYXIgdW0gbm92byBsaW5rLiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9Db25uZWN0b3IvRmlsZU1hbmFnZXIucGhwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9Db25uZWN0b3IvRmlsZU1hbmFnZXIucGhwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjllYjQwZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0Nvbm5lY3Rvci9GaWxlTWFuYWdlci5waHAKQEAgLTAsMCArMSw1NDYyIEBACis8P3BocAorLyoKKyAqIFNjcmlwdDogRmlsZU1hbmFnZXIucGhwCisgKiAgIE1vb1Rvb2xzIEZpbGVNYW5hZ2VyIC0gQmFja2VuZCBmb3IgdGhlIEZpbGVNYW5hZ2VyIFNjcmlwdAorICoKKyAqIEF1dGhvcnM6CisgKiAgLSBDaHJpc3RvcGggUG9qZXIgKGh0dHA6Ly9jcG9qZXIubmV0KSAoYXV0aG9yKQorICogIC0gSmFtZXMgRWhseSAoaHR0cDovL3d3dy5kZXZ0cmVuY2guY29tKQorICogIC0gRmFiaWFuIFZvZ2Vsc3RlbGxlciAoaHR0cDovL2Zyb3plbWFuLmRlKQorICogIC0gR2VyIEhvYmJlbHQgKGh0dHA6Ly9oZWJidXQubmV0KQorICogIC0gSmFtZXMgU2xlZW1hbiAoaHR0cDovL2NvZGUuZ29nby5jby5ueikKKyAqCisgKiBMaWNlbnNlOgorICogICBNSVQtc3R5bGUgbGljZW5zZS4KKyAqCisgKiBDb3B5cmlnaHQ6CisgKiAgIENvcHlyaWdodCAoYykgMjAwOS0yMDExIFtDaHJpc3RvcGggUG9qZXJdKGh0dHA6Ly9jcG9qZXIubmV0KQorICogICBCYWNrZW5kOiBGaWxlTWFuYWdlciAmIEZpbGVNYW5hZ2VyV2l0aEFsaWFzU3VwcG9ydCBDb3B5cmlnaHQgKGMpIDIwMTEgW0dlciBIb2JiZWx0XShodHRwOi8vaG9iYmVsdC5jb20pCisgKgorICogRGVwZW5kZW5jaWVzOgorICogICAtIFRvb2xpbmcucGhwCisgKiAgIC0gSW1hZ2UuY2xhc3MucGhwCisgKiAgIC0gZ2V0SWQzIExpYnJhcnkKKyAqCisgKiBPcHRpb25zOgorICogICAtIGRpcmVjdG9yeTogKHN0cmluZykgVGhlIFVSSSBiYXNlIGRpcmVjdG9yeSB0byBiZSB1c2VkIGZvciB0aGUgRmlsZU1hbmFnZXIgKCdVUkkgcGF0aCcgaS5lLiBhbiBhYnNvbHV0ZSBwYXRoIGhlcmUgd291bGQgYmUgcm9vdGVkIGF0IERvY3VtZW50Um9vdDogJy8nID09IERvY3VtZW50Um9vdCkKKyAqICAgLSBhc3NldEJhc2VQYXRoOiAoc3RyaW5nLCBvcHRpb25hbCkgVGhlIFVSSSBwYXRoIHRvIGFsbCBpbWFnZXMgYW5kIHN3ZiBmaWxlcyB1c2VkIGJ5IHRoZSBmaWxlbWFuYWdlcgorICogICAtIHRodW1ibmFpbFBhdGg6IChzdHJpbmcpIFRoZSBVUkkgcGF0aCB3aGVyZSB0aGUgdGh1bWJuYWlscyBvZiB0aGUgcGljdHVyZXMgd2lsbCBiZSBzYXZlZAorICogICAtIHRodW1iU21hbGxTaXplOiAoaW50ZWdlcikgVGhlIChtYXhpbXVtKSB3aWR0aCAvIGhlaWdodCBpbiBwaXhlbHMgb2YgdGhlIHRodW1iNDggJ3NtYWxsJyB0aHVtYm5haWxzIHByb2R1Y2VkIGJ5IHRoaXMgYmFja2VuZAorICogICAtIHRodW1iQmlnU2l6ZTogKGludGVnZXIpIFRoZSAobWF4aW11bSkgd2lkdGggLyBoZWlnaHQgaW4gcGl4ZWxzIG9mIHRoZSB0aHVtYjI1MCAnYmlnJyB0aHVtYm5haWxzIHByb2R1Y2VkIGJ5IHRoaXMgYmFja2VuZAorICogICAtIG1pbWVUeXBlc1BhdGg6IChzdHJpbmcsIG9wdGlvbmFsKSBUaGUgZmlsZXN5c3RlbSBwYXRoIHRvIHRoZSBNaW1lVHlwZXMuaW5pIGZpbGUuIE1heSBleGlzdCBpbiBhIHBsYWNlIG91dHNpZGUgdGhlIERvY3VtZW50Um9vdCB0cmVlLgorICogICAtIGRhdGVGb3JtYXQ6IChzdHJpbmcsIGRlZmF1bHRzIHRvICpqIE0gWSAtIEg6aSopIFRoZSBmb3JtYXQgaW4gd2hpY2ggZGF0ZXMgc2hvdWxkIGJlIGRpc3BsYXllZAorICogICAtIG1heFVwbG9hZFNpemU6IChpbnRlZ2VyLCBkZWZhdWx0cyB0byAqMjAyODAwMDAqIGJ5dGVzKSBUaGUgbWF4aW11bSBmaWxlIHNpemUgZm9yIHVwbG9hZCBpbiBieXRlcworICogICAtIG1heEltYWdlRGltZW5zaW9uOiAoYXJyYXksIGRlZmF1bHRzIHRvICphcnJheSgnd2lkdGgnID0+IDEwMjQsICdoZWlnaHQnID0+IDc2OCkqKSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGl4ZWxzIGluIGhlaWdodCBhbmQgd2lkdGggYW4gaW1hZ2UgY2FuIGhhdmUsIGlmIHRoZSB1c2VyIGVuYWJsZXMgInJlc2l6ZSBvbiB1cGxvYWQiLgorICogICAtIHVwbG9hZDogKGJvb2xlYW4sIGRlZmF1bHRzIHRvICpmYWxzZSopIGFsbG93IHVwbG9hZHMsIHRoaXMgaXMgYWxzbyBzZXQgaW4gdGhlIEZpbGVNYW5hZ2VyLmpzICh0aGlzIGhlcmUgaXMgb25seSBmb3Igc2VjdXJpdHkgcHJvdGVjdGlvbiB3aGVuIHVwbG9hZHMgc2hvdWxkIGJlIGRlYWN0aXZhdGVkKQorICogICAtIGRlc3Ryb3k6IChib29sZWFuLCBkZWZhdWx0cyB0byAqZmFsc2UqKSBhbGxvdyBmaWxlcyB0byBnZXQgZGVsZXRlZCwgdGhpcyBpcyBhbHNvIHNldCBpbiB0aGUgRmlsZU1hbmFnZXIuanMgKHRoaXMgaGVyZSBpcyBvbmx5IGZvciBzZWN1cml0eSBwcm90ZWN0aW9uIHdoZW4gZmlsZS9kaXJlY3RvcnkgZGVsZXRlIG9wZXJhdGlvbnMgc2hvdWxkIGJlIGRlYWN0aXZhdGVkKQorICogICAtIGNyZWF0ZTogKGJvb2xlYW4sIGRlZmF1bHRzIHRvICpmYWxzZSopIGFsbG93IGNyZWF0aW5nIG5ldyBzdWJkaXJlY3RvcmllcywgdGhpcyBpcyBhbHNvIHNldCBpbiB0aGUgRmlsZU1hbmFnZXIuanMgKHRoaXMgaGVyZSBpcyBvbmx5IGZvciBzZWN1cml0eSBwcm90ZWN0aW9uIHdoZW4gZGlyIGNyZWF0ZXMgc2hvdWxkIGJlIGRlYWN0aXZhdGVkKQorICogICAtIG1vdmU6IChib29sZWFuLCBkZWZhdWx0cyB0byAqZmFsc2UqKSBhbGxvdyBmaWxlIGFuZCBkaXJlY3RvcnkgbW92ZS9yZW5hbWUgYW5kIGNvcHksIHRoaXMgaXMgYWxzbyBzZXQgaW4gdGhlIEZpbGVNYW5hZ2VyLmpzICh0aGlzIGhlcmUgaXMgb25seSBmb3Igc2VjdXJpdHkgcHJvdGVjdGlvbiB3aGVuIHJlbmFtZS9tb3ZlL2NvcHkgc2hvdWxkIGJlIGRlYWN0aXZhdGVkKQorICogICAtIGRvd25sb2FkOiAoYm9vbGVhbiwgZGVmYXVsdHMgdG8gKmZhbHNlKikgYWxsb3cgZG93bmxvYWRzLCB0aGlzIGlzIGFsc28gc2V0IGluIHRoZSBGaWxlTWFuYWdlci5qcyAodGhpcyBoZXJlIGlzIG9ubHkgZm9yIHNlY3VyaXR5IHByb3RlY3Rpb24gd2hlbiBkb3dubG9hZHMgc2hvdWxkIGJlIGRlYWN0aXZhdGVkKQorICogICAtIGFsbG93RXh0Q2hhbmdlOiAoYm9vbGVhbiwgZGVmYXVsdHMgdG8gKmZhbHNlKikgYWxsb3cgdGhlIGZpbGUgZXh0ZW5zaW9uIHRvIGJlIGNoYW5nZWQgd2hlbiBwZXJmb3JtaW5nIGEgcmVuYW1lIG9wZXJhdGlvbi4KKyAqICAgLSBzYWZlOiAoYm9vbGVhbiwgZGVmYXVsdHMgdG8gKnRydWUqKSBJZiB0cnVlLCBkaXNhbGxvd3MgJ2V4ZScsICdkbGwnLCAncGhwJywgJ3BocDMnLCAncGhwNCcsICdwaHA1JywgJ3BocHMnIGFuZCBzYXZlcyB0aGVtIGFzICd0eHQnIGluc3RlYWQuCisgKiAgIC0gY2htb2Q6IChpbnRlZ2VyLCBkZWZhdWx0IGlzIDA3NzcpIHRoZSBwZXJtaXNzaW9ucyBzZXQgdG8gdGhlIHVwbG9hZGVkIGZpbGVzIGFuZCBjcmVhdGVkIHRodW1ibmFpbHMgKG11c3QgaGF2ZSBhIGxlYWRpbmcgIjAiLCBlLmcuIDA3NzcpCisgKiAgIC0gZmlsdGVyOiAoc3RyaW5nLCBkZWZhdWx0cyB0byAqbnVsbCopIElmIG5vdCBlbXB0eSwgdGhpcyBpcyBhIGxpc3Qgb2YgYWxsb3dlZCBtaW1ldHlwZXMgKG92ZXJydWxlZCBieSB0aGUgR0VUIHJlcXVlc3QgJ2ZpbHRlcicgcGFyYW1ldGVyOiBzaW5nbGUgcmVxdWVzdHMgY2FuIHRodXMgb3ZlcnJ1bGUgdGhlIGNvbW1vbiBzZXR1cCBpbiB0aGUgY29uc3RydWN0b3IgZm9yIHRoaXMgb3B0aW9uKQorICogICAtIHNob3dIaWRkZW5Gb2xkZXJzQW5kRmlsZXM6IChib29sZWFuLCBkZWZhdWx0cyB0byAqZmFsc2UqKSB3aGV0aGVyIG9yIG5vdCB0byBzaG93ICdkb3R0ZWQnIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyAtLSBzdWNoIGZpbGVzIGFyZSBjb25zaWRlcmVkICdoaWRkZW4nIG9uIFVOSVggZmlsZSBzeXN0ZW1zCisgKiAgIC0gVmlld0lzQXV0aG9yaXplZF9jYiAoZnVuY3Rpb24vcmVmZXJlbmNlLCBkZWZhdWx0IGlzICpudWxsKikgYXV0aGVudGljYXRpb24gKyBhdXRob3JpemF0aW9uIGNhbGxiYWNrIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBnaXZlbiBkaXJlY3RvcnkgbWF5IGJlIHZpZXdlZC4KKyAqICAgICBUaGUgcGFyYW1ldGVyICRhY3Rpb24gPSAndmlldycuCisgKiAgIC0gRGV0YWlsSXNBdXRob3JpemVkX2NiIChmdW5jdGlvbi9yZWZlcmVuY2UsIGRlZmF1bHQgaXMgKm51bGwqKSBhdXRoZW50aWNhdGlvbiArIGF1dGhvcml6YXRpb24gY2FsbGJhY2sgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGUgbWF5IGJlIGluc3BlY3RlZCAoYW5kIHRoZSBkZXRhaWxzIGxpc3RlZCkuCisgKiAgICAgVGhlIHBhcmFtZXRlciAkYWN0aW9uID0gJ2RldGFpbCcuCisgKiAgIC0gVXBsb2FkSXNBdXRob3JpemVkX2NiIChmdW5jdGlvbi9yZWZlcmVuY2UsIGRlZmF1bHQgaXMgKm51bGwqKSBhdXRoZW50aWNhdGlvbiArIGF1dGhvcml6YXRpb24gY2FsbGJhY2sgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGUgbWF5IGJlIHVwbG9hZGVkLgorICogICAgIFRoZSBwYXJhbWV0ZXIgJGFjdGlvbiA9ICd1cGxvYWQnLgorICogICAtIERvd25sb2FkSXNBdXRob3JpemVkX2NiIChmdW5jdGlvbi9yZWZlcmVuY2UsIGRlZmF1bHQgaXMgKm51bGwqKSBhdXRoZW50aWNhdGlvbiArIGF1dGhvcml6YXRpb24gY2FsbGJhY2sgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGUgbWF5IGJlIGRvd25sb2FkZWQuCisgKiAgICAgVGhlIHBhcmFtZXRlciAkYWN0aW9uID0gJ2Rvd25sb2FkJy4KKyAqICAgLSBDcmVhdGVJc0F1dGhvcml6ZWRfY2IgKGZ1bmN0aW9uL3JlZmVyZW5jZSwgZGVmYXVsdCBpcyAqbnVsbCopIGF1dGhlbnRpY2F0aW9uICsgYXV0aG9yaXphdGlvbiBjYWxsYmFjayB3aGljaCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZ2l2ZW4gc3ViZGlyZWN0b3J5IG1heSBiZSBjcmVhdGVkLgorICogICAgIFRoZSBwYXJhbWV0ZXIgJGFjdGlvbiA9ICdjcmVhdGUnLgorICogICAtIERlc3Ryb3lJc0F1dGhvcml6ZWRfY2IgKGZ1bmN0aW9uL3JlZmVyZW5jZSwgZGVmYXVsdCBpcyAqbnVsbCopIGF1dGhlbnRpY2F0aW9uICsgYXV0aG9yaXphdGlvbiBjYWxsYmFjayB3aGljaCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZ2l2ZW4gZmlsZSAvIHN1YmRpcmVjdG9yeSB0cmVlIG1heSBiZSBkZWxldGVkLgorICogICAgIFRoZSBwYXJhbWV0ZXIgJGFjdGlvbiA9ICdkZXN0cm95Jy4KKyAqICAgLSBNb3ZlSXNBdXRob3JpemVkX2NiIChmdW5jdGlvbi9yZWZlcmVuY2UsIGRlZmF1bHQgaXMgKm51bGwqKSBhdXRoZW50aWNhdGlvbiArIGF1dGhvcml6YXRpb24gY2FsbGJhY2sgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGUgLyBzdWJkaXJlY3RvcnkgbWF5IGJlIHJlbmFtZWQsIG1vdmVkIG9yIGNvcGllZC4KKyAqICAgICBOb3RlIHRoYXQgY3VycmVudGx5IHN1cHBvcnQgZm9yIGNvcHlpbmcgc3ViZGlyZWN0b3JpZXMgaXMgbWlzc2luZy4KKyAqICAgICBUaGUgcGFyYW1ldGVyICRhY3Rpb24gPSAnbW92ZScuCisgKiAgICAgVXBsb2FkSXNDb21wbGV0ZV9jYiAoZnVuY3Rpb24vcmVmZXJlbmNlLCBkZWZhdWx0IGlzICpudWxsKikgVXBsb2FkIGNvbXBsZXRlIGNhbGxiYWNrIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHBvc3QgcHJvY2VzcyBhIG5ld2x5IHVwbG9hZCBmaWxlLgorICogICAgIFRoZSBwYXJhbWV0ZXIgJGFjdGlvbiA9ICd1cGxvYWQnLgorICogICAgIERvd25sb2FkSXNDb21wbGV0ZV9jYiAoZnVuY3Rpb24vcmVmZXJlbmNlLCBkZWZhdWx0IGlzICpudWxsKikgRG93bmxvYWQgY29tcGxldGUgY2FsbGJhY2sgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcG9zdCBwcm9jZXNzIGFmdGVyIGEgZmlsZSBoYXMgYmVlbiBkb3dubG9hZGVkIGZpbGUuCisgKiAgICAgVGhlIHBhcmFtZXRlciAkYWN0aW9uID0gJ2Rvd25sb2FkJy4KKyAqICAgICBEZXN0cm95SXNDb21wbGV0ZV9jYiAoZnVuY3Rpb24vcmVmZXJlbmNlLCBkZWZhdWx0IGlzICpudWxsKikgRGVzdHJveSBjb21wbGV0ZSBjYWxsYmFjayB3aGljaCBjYW4gYmUgdXNlZCB0byBjbGVhbnVwIGFmdGVyIGEgbmV3bHkgZGVsZXRlZC9kZXN0cm95ZWQgZmlsZS4KKyAqICAgICBUaGUgcGFyYW1ldGVyICRhY3Rpb24gPSAnZGVzdHJveScuCisgKgorICogT2Jzb2xldGVkIG9wdGlvbnM6CisgKiAgIC0gbWF4SW1hZ2VTaXplOiAoaW50ZWdlciwgZGVmYXVsdCBpcyAxMDI0KSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGl4ZWxzIGluIGJvdGggaGVpZ2h0IGFuZCB3aWR0aCBhbiBpbWFnZSBjYW4gaGF2ZSwgaWYgdGhlIHVzZXIgZW5hYmxlcyAicmVzaXplIG9uIHVwbG9hZCIuIChUaGlzIG9wdGlvbiBpcyBvYnNvbGV0ZWQgYnkgdGhlICdzdWdnZXN0ZWRNYXhJbWFnZURpbWVuc2lvbicgb3B0aW9uLikKKyAqCisgKgorICogQWJvdXQgdGhlIGFjdGlvbiBwZXJtaXNzaW9ucyAodXBsb2FkfGRlc3Ryb3l8Y3JlYXRlfG1vdmV8ZG93bmxvYWQpOgorICoKKyAqICAgICBBbGwgdGhlIG9wdGlvbiAicGVybWlzc2lvbnMiIGFyZSBzZXQgdG8gRkFMU0UgYnkgZGVmYXVsdC4gRGV2ZWxvcGVycyBzaG91bGQgYWx3YXlzIFNQRUNJRklDQUxMWSBlbmFibGUgYSBwZXJtaXNzaW9uIHRvIGhhdmUgdGhhdCBwZXJtaXNzaW9uLCBmb3IgdHdvIHJlYXNvbnM6CisgKgorICogICAgIDEuIERldmVsb3BlcnMgZm9yZ2V0IHRvIGRpc2FibGUgcGVybWlzc2lvbnMsIHRoZXkgZG9uJ3QgZm9yZ2V0IHRvIGVuYWJsZSB0aGVtIChiZWNhdXNlIHRoaW5ncyBkb24ndCB3b3JrISkKKyAqCisgKiAgICAgMi4gSGF2aW5nIG9wZW4gcGVybWlzc2lvbnMgYnkgZGVmYXVsdCBsZWF2ZXMgcG90ZW50aWFsIGZvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgd2hlcmUgdGhvc2Ugb3BlbiBwZXJtaXNzaW9ucyBhcmUgZXhwbG9pdGVkLgorICoKKyAqCisgKiBGb3IgYWxsIGF1dGhvcml6YXRpb24gaG9va3MgKGNhbGxiYWNrIGZ1bmN0aW9ucykgdGhlIGZvbGxvd2luZyBhcHBsaWVzOgorICoKKyAqICAgICBUaGUgY2FsbGJhY2sgc2hvdWxkIHJldHVybiBUUlVFIGZvciB5ZXMgKHBlcm1pc3Npb24gZ3JhbnRlZCksIEZBTFNFIGZvciBubyAocGVybWlzc2lvbiBkZW5pZWQpLgorICogICAgIFBhcmFtZXRlcnMgc2VudCB0byB0aGUgY2FsbGJhY2sgYXJlOgorICogICAgICAgKCR0aGlzLCAkYWN0aW9uLCAkZmlsZWluZm8pCisgKiAgICAgd2hlcmUgJGZpbGVpbmZvIGlzIGFuIGFycmF5IGNvbnRhaW5pbmcgaW5mbyBhYm91dCB0aGUgZmlsZSBiZWluZyB1cGxvYWRlZCwgJGFjdGlvbiBpcyBhIChzdHJpbmcpIGlkZW50aWZ5aW5nIHRoZSBjdXJyZW50IG9wZXJhdGlvbiwgJHRoaXMgaXMgYSByZWZlcmVuY2UgdG8gdGhpcyBGaWxlTWFuYWdlciBpbnN0YW5jZS4KKyAqICAgICAkYWN0aW9uIHdhcyBpbmNsdWRlZCBhcyBhIHJlZHVuZGFudCBwYXJhbWV0ZXIgdG8gZWFjaCBjYWxsYmFjayBhcyBhIHNpbXBsZSBtZWFucyB0byBhbGxvdyB1c2VycyB0byBob29rIGEgc2luZ2xlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFsbCB0aGUgYXV0aG9yaXphdGlvbiBob29rcywgd2l0aG91dCB0aGUgbmVlZCB0byBjcmVhdGUgYSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBlYWNoLgorICoKKyAqICAgICBGb3IgbW9yZSBpbmZvIGFib3V0IHRoZSBob29rIHBhcmFtZXRlciAkZmlsZWluZm8gY29udGVudHMgYW5kIGEgYmFzaWMgaW1wbGVtZW50YXRpb24sIHNlZSBmdXJ0aGVyIGJlbG93IChzZWN0aW9uICdIb29rczogRGV0YWlsZWQgSW50ZXJmYWNlIFNwZWNpZmljYXRpb24nKSBhbmQgdGhlIGV4YW1wbGVzIGluCisgKiAgICAgRGVtb3MvRk0tY29tbW9uLnBocCwgRGVtb3MvbWFuYWdlci5waHAgYW5kIERlbW9zL3NlbGVjdEltYWdlLnBocAorICoKKyAqCisgKiBOb3RlcyBvbiByZWxhdGl2ZSBwYXRocyBhbmQgc2FmZXR5IC8gc2VjdXJpdHk6CisgKgorICogICBJZiBhbnkgb3B0aW9uIGlzIHNwZWNpZnlpbmcgYSByZWxhdGl2ZSBwYXRoLCBlLmcuICcuLi9Bc3NldHMnIG9yICdNZWRpYS9TdHVmZi8nLCB0aGlzIGlzIGFzc3VtZWQgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHJlcXVlc3QgVVJJIHBhdGgsCisgKiAgIGkuZS4gZGlybmFtZSgkX1NFUlZFUlsnU0NSSVBUX05BTUUnXSkuCisgKgorICogICBSZXF1ZXN0cyBtYXkgcG9zdC9zdWJtaXQgcmVsYXRpdmUgcGF0aHMgYXMgYXJndW1lbnRzIHRvIHRoZWlyIEZpbGVNYW5hZ2VyIGV2ZW50cy9hY3Rpb25zIGluICRfR0VULyRfUE9TVCwgYW5kIHRob3NlIHJlbGF0aXZlIHBhdGhzIHdpbGwgYmUKKyAqICAgcmVnYXJkZWQgYXMgcmVsYXRpdmUgdG8gdGhlIHJlcXVlc3QgVVJJIGhhbmRsaW5nIHNjcmlwdCBwYXRoLCBpLmUuIGRpcm5hbWUoJF9TRVJWRVJbJ1NDUklQVF9OQU1FJ10pIHRvIG1ha2UgdGhlIG1vc3QKKyAqICAgc2Vuc2UgZnJvbSBib3RoZXIgc2VydmVyIGFuZCBjbGllbnQgY29kaW5nIHBlcnNwZWN0aXZlLgorICoKKyAqCisgKiAgIFdlIGFsc28gYXNzdW1lIHRoYXQgYW55IG9mIHRoZSBwYXRocyBtYXkgYmUgc3BlY2lmaWVkIGZyb20gdGhlIG91dHNpZGUsIHNvIGVhY2ggcGF0aCBpcyBwcm9jZXNzZWQgYW5kIGZpbHRlcmVkIHRvIHByZXZlbnQgbWFsaWNpb3VzIGludGVudAorICogICBmcm9tIHN1Y2NlZWRpbmcuIChBbiBleGFtcGxlIG9mIHN1Y2ggd291bGQgYmUgYW4gYXR0YWNrZXIgcG9zdGluZyBoaXMgb3duICdkZXN0cm95JyBldmVudCByZXF1ZXN0IHJlcXVlc3RpbmcgdGhlIGRlc3RydWN0aW9uIG9mCisgKiAgICcuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGFzc3dkJyBmb3IgZXhhbXBsZS4gSW4gbW9yZSBjb21wbGV4IHJpZ3MsIHRoZSBhdHRhY2sgbWF5IGJlIGFzc2lzdGVkIHRocm91Z2ggYXR0YWNrcyBhdCB0aGVzZSBvcHRpb25zJyBwYXRocywKKyAqICAgc28gdGhlc2UgYXJlIHN1YmplY3RlZCB0byB0aGUgc2FtZSBzY3J1dGlueSBpbiBoZXJlLikKKyAqCisgKiAgIEFsbCBwYXRocywgYWJzb2x1dGUgb3IgcmVsYXRpdmUsIGFzIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlcnMgKHNlZSB0aGUgb25YWFggbWV0aG9kcyBvZiB0aGlzIGNsYXNzKSBhcmUgRU5GT1JDRUQgVE8gQUJJREUgVEhFIFJVTEUKKyAqICAgJ2V2ZXJ5IHBhdGggcmVzaWRlcyB3aXRoaW4gdGhlIG9wdGlvbnNbJ2RpcmVjdG9yeSddIGEuay5hLiBCQVNFRElSIHJvb3RlZCB0cmVlJyB3aXRob3V0IGV4Y2VwdGlvbi4KKyAqICAgQmVjYXVzZSB3ZSBjYW4gZG8gd2l0aG91dCBleGNlcHRpb25zIHRvIGltcG9ydGFudCBydWxlcy4gOy0pCisgKgorICogICBXaGVuIHBhdGhzIGFwcGFyZW50bHkgZG9uJ3QsIHRoZXkgYXJlIGNvZXJjZWQgaW50byBhZGhlcmVuY2UgdG8gdGhpcyBydWxlOyB3aGVuIHRoaXMgZmFpbHMsIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gaW50ZXJuYWxseSBhbmQgYW4gZXJyb3IKKyAqICAgd2lsbCBiZSByZXBvcnRlZCBhbmQgdGhlIGFjdGlvbiB0ZW1yaW5hdGVkLgorICoKKyAqICAnTEVHQUwgVVJMIHBhdGhzJzoKKyAqCisgKiAgIFBhdGhzIHdoaWNoIGFkaGVyZSB0byB0aGUgYWZvcmVtZW50aW9uZWQgcnVsZSBhcmUgc28tY2FsbGVkIExFR0FMIFVSTCBwYXRoczsgdGhlaXIgJ3Jvb3QnIGVxdWFscyBCQVNFRElSLgorICoKKyAqICAgQkFTRURJUiBlcXVhbHMgdGhlIHBhdGggcG9pbnRlZCBhdCBieSB0aGUgb3B0aW9uc1snZGlyZWN0b3J5J10gc2V0dGluZy4gSXQgaXMgdGhlcmVmb3JlIGltcGVyYXRpdmUgdGhhdCB5b3UgZW5zdXJlIHRoaXMgdmFsdWUgaXMKKyAqICAgY29ycmVjdGx5IHNldCB1cDsgd29yc3QgY2FzZSwgdGhpcyBzZXR0aW5nIHdpbGwgZXF1YWwgRG9jdW1lbnRSb290LgorICogICBJbiBvdGhlciB3b3JkczogeW91J2xsIG5ldmVyIGJlIGFibGUgdG8gcmVhY2ggYW55IGZpbGUgb3IgZGlyZWN0b3J5IG91dHNpZGUgdGhpcyBzaXRlJ3MgRG9jdW1lbnRSb290IGRpcmVjdG9yeSB0cmVlLCBldmVyLgorICoKKyAqCisgKiAgUGF0aCB0cmFuc2Zvcm1hdGlvbnM6CisgKgorICogICBUbyBhbGxvdyBhcmJpdHJhcnkgZGlyZWN0b3J5L3BhdGggbWFwcGluZyBhbGdvcml0aG1zIHRvIGJlIGFwcGxpZWQgKGUuZy4gd2hlbiBpbXBsZW1lbnRpbmcgQWxpYXMgc3VwcG9ydCBzdWNoIGFzIGF2YWlsYWJsZSBpbiB0aGUKKyAqICAgZGVyaXZlZCBjbGFzcyBGaWxlTWFuYWdlcldpdGhBbGlhc1N1cHBvcnQpLCBhbGwgcGF0aHMgYXJlLCBvbiBldmVyeSBjaGFuZ2UvZWRpdCwgdHJhbnNmb3JtZWQgZnJvbSB0aGVpciBMRUdBTCBVUkwgcmVwcmVzZW50YXRpb24gdG8KKyAqICAgdGhlaXIgJ2Fic29sdXRlIFVSSSBwYXRoJyAod2hpY2ggaXMgc3VpdGFibGUgdG8gYmUgdXNlZCBpbiBsaW5rcyBhbmQgcmVmZXJlbmNlcyBpbiBIVE1MIG91dHB1dCkgYW5kICdhYnNvbHV0ZSBwaHlzaWNhbCBmaWxlc3lzdGVtIHBhdGgnCisgKiAgIGVxdWl2YWxlbnRzLgorICogICBCeSBlbmZvcmNpbmcgc3VjaCBhIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybWF0aW9uIHdlIGltcGxpY2l0bHkgc3VwcG9ydCBub24tcmV2ZXJzaWJsZSBhbmQgaGFyZC10by1yZXZlcnNlIHBhdGggYWxpYXNpbmcgbWVjaGFuaXNtcywKKyAqICAgZS5nLiBjb21wbGV4IHJlZ2V4K2NvbnRleHQgYmFzZWQgcGF0aCBtYW5pcHVsYXRpb25zIGluIHRoZSBzZXJ2ZXIuCisgKgorICoKKyAqICAgV2hlbiB5b3UgbmVlZCB5b3VyIHBhdGhzIHRvIGJlIHJlc3RyaWN0ZWQgdG8gdGhlIGJvdW5kcyBvZiB0aGUgb3B0aW9uc1snZGlyZWN0b3J5J10gdHJlZSAod2hpY2ggaXMgYSBzdWJ0cmVlIG9mIHRoZSBEb2N1bWVudFJvb3QgYmFzZWQKKyAqICAgdHJlZSksIHlvdSBtYXkgd2lzaCB0byB1c2UgdGhlICdsZWdhbCcgY2xhc3Mgb2YgcGF0aCB0cmFuc2Zvcm1hdGlvbiBtZW1iZXIgZnVuY3Rpb25zOgorICoKKyAqICAgLSBsZWdhbDJhYnNfdXJsX3BhdGgoKQorICogICAtIHJlbDJhYnNfbGVnYWxfdXJsX3BhdGgoKQorICogICAtIGxlZ2FsX3VybF9wYXRoMmZpbGVfcGF0aCgpCisgKgorICogICBXaGVuIHlvdSBoYXZlIGEgJ2Fic29sdXRlIFVSSSBwYXRoJyBvciBhIHBhdGggcmVsYXRpdmUgaW4gVVJJIHNwYWNlIChpbXBsaWNpdGx5IHJlbGF0aXZlIHRvIGRpcm5hbWUoJF9TRVJWRVJbJ1NDUklQVF9OQU1FJ10pICksIHlvdSBjYW4KKyAqICAgdHJhbnNmb3JtIHN1Y2ggYSBwYXRoIHRvIGVpdGhlciBhIGd1YXJhbnRlZWQtYWJzb2x1dGUgVVJJIHNwYWNlIHBhdGggb3IgYSBmaWxlc3lzdGVtIHBhdGg6CisgKgorICogICAtIHJlbDJhYnNfdXJsX3BhdGgoKQorICogICAtIHVybF9wYXRoMmZpbGVfcGF0aCgpCisgKgorICogICBBbnkgb3RoZXIgcGF0aCB0cmFuc2Zvcm1hdGlvbnMgYXJlIElMTEVHQUwgYW5kIERBTkdFUk9VUy4gVGhlIG9ubHkgb3RoZXIgcG9zc2libHkgbGVnYWwgdHJhbnNmb3JtYXRpb24gaXMgZnJvbSBhYnNvbHV0ZSBVUkkgcGF0aCB0bworICogICBCQVNFRElSLWJhc2VkIExFR0FMIFVSTCBwYXRoLCBhcyB0aGUgVVJJIHBhdGggc3BhY2UgaXMgYXNzdW1lZCB0byBiZSBsaW5lYXIgYW5kIGNvbnRpZ3VvdXMuIEhvd2V2ZXIsIHRoaXMgb3BlcmF0aW9uIGlzIEhJR0hMWSBkaXNjb3VyYWdlZAorICogICBhcyBpdCBpcyBhIHZlcnkgc3Ryb25nIGluZGljYXRvciBvZiBvdGhlciBmYXVsdHkgbG9naWMsIHNvIHdlIGRvIE5PVCBvZmZlciBhIG1ldGhvZCBmb3IgdGhpcy4KKyAqCisgKgorICogSG9va3M6IERldGFpbGVkIEludGVyZmFjZSBTcGVjaWZpY2F0aW9uOgorICoKKyAqICAgQWxsICdhdXRob3JpemF0aW9uJyBjYWxsYmFjayBob29rcyBzaGFyZSBhIGNvbW1vbiBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiAoZnVuY3Rpb24gcGFyYW1ldGVyIHNldCkuIFRoaXMgaXMgYnkgZGVzaWduLCBzbyBvbmUgY2FsbGJhY2sKKyAqICAgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcHJvY2VzcyBhbnkgYW5kIGFsbCBvZiB0aGVzZSBldmVudHM6CisgKgorICogICBGdW5jdGlvbiBwcm90b3R5cGU6CisgKgorICogICAgICAgZnVuY3Rpb24gQ2FsbGJhY2tGdW5jdGlvbigkbWdyLCAkYWN0aW9uLCAmJGluZm8pCisgKgorICogICB3aGVyZQorICoKKyAqICAgICAgICRtc2c6ICAgICAgKG9iamVjdCkgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IEZpbGVNYW5hZ2VyIGNsYXNzIGluc3RhbmNlLiBDYW4gYmUgdXNlZCB0byBpbnZva2UgcHVibGljIEZpbGVNYW5hZ2VyIG1ldGhvZHMgaW5zaWRlCisgKiAgICAgICAgICAgICAgICAgIHRoZSBjYWxsYmFjay4KKyAqCisgKiAgICAgICAkYWN0aW9uOiAgIChzdHJpbmcpIGlkZW50aWZpZXMgdGhlIGV2ZW50IGJlaW5nIHByb2Nlc3NlZC4gQ2FuIGJlIG9uZSBvZiB0aGVzZToKKyAqCisgKiAgICAgICAgICAgICAgICAgICdjcmVhdGUnICAgICAgICAgIGNyZWF0ZSBuZXcgZGlyZWN0b3J5CisgKiAgICAgICAgICAgICAgICAgICdtb3ZlJyAgICAgICAgICAgIG1vdmUgb3IgY29weSBhIGZpbGUgb3IgZGlyZWN0b3J5CisgKiAgICAgICAgICAgICAgICAgICdkZXN0cm95JyAgICAgICAgIGRlbGV0ZSBhIGZpbGUgb3IgZGlyZWN0b3J5CisgKiAgICAgICAgICAgICAgICAgICd1cGxvYWQnICAgICAgICAgIHVwbG9hZCBhIHNpbmdsZSBmaWxlICh3aGVuIHBlcmZvcm1pbmcgYSBidWxrIHVwbG9hZCwgZWFjaCBmaWxlIHdpbGwgYmUgdXBsb2FkZWQgaW5kaXZpZHVhbGx5KQorICogICAgICAgICAgICAgICAgICAnZG93bmxvYWQnICAgICAgICBkb3dubG9hZCBhIGZpbGUKKyAqICAgICAgICAgICAgICAgICAgJ3ZpZXcnICAgICAgICAgICAgc2hvdyBhIGRpcmVjdG9yeSBsaXN0aW5nIChpbiBlaXRoZXIgJ2xpc3QnIG9yICd0aHVtYicgbW9kZSkKKyAqICAgICAgICAgICAgICAgICAgJ2RldGFpbCcgICAgICAgICAgc2hvdyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmlsZSBhbmQsIHdobiBwb3NzaWJsZSwgcHJvdmlkZSBhIGxpbmsgdG8gYSAobGFyZ2lzaCkgdGh1bWJuYWlsCisgKgorICogICAgICAgJGluZm8gICAgICAoYXJyYXkpIGNhcnJpZXMgYWxsIHRoZSBkZXRhaWxzLiBTb21lIG9mIHdoaWNoIGNhbiBldmVuIGJlIG1hbmlwdWxhdGVkIGlmIHlvdXIgY2FsbGJhYyBpcyBtb3JlIHRoYW4ganVzdCBhbgorICogICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbiAvIGF1dGhvcml6YXRpb24gY2hlY2tlci4gOy0pCisgKiAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGRldGFpbCwgc2VlIHRoZSBuZXh0IG1ham9yIHNlY3Rpb24uCisgKgorICogICBUaGUgY2FsbGJhY2sgc2hvdWxkIHJldHVybiBhIGJvb2xlYW4sIHdoZXJlIFRSVUUgbWVhbnMgdGhlIHNlc3Npb24vY2xpZW50IGlzIGF1dGhvcml6ZWQgdG8gZXhlY3V0ZSB0aGUgYWN0aW9uLCB3aGlsZSBGQUxTRQorICogICB3aWxsIGNhdXNlIHRoZSBiYWNrZW5kIHRvIHJlcG9ydCBhbiBhdXRoZW50aWNhdGlvbiBlcnJvciBhbmQgYWJvcnQgdGhlIGFjdGlvbi4KKyAqCisgKiAgRXhjZXB0aW9ucyB0aHJvd2luZyBmcm9tIHRoZSBjYWxsYmFjazoKKyAqCisgKiAgIE5vdGUgdGhhdCB5b3UgbWF5IGNob29zZSB0byB0aHJvdyBleGNlcHRpb25zIGZyb20gaW5zaWRlIHRoZSBjYWxsYmFjazsgdGhvc2Ugd2lsbCBiZSBjYXVnaHQgYW5kIHRyYW5zZm9ybWVkIHRvIHByb3BlciBlcnJvciByZXBvcnRzLgorICoKKyAqICAgWW91IG1heSBlaXRoZXIgdGhyb3cgYW55IGV4Y2VwdGlvbnMgYmFzZWQgb24gZWl0aGVyIHRoZSBGaWxlTWFuYWdlckV4Y2VwdGlvbiBvciBFeGNlcHRpb24gY2xhc3Nlcy4gV2hlbiB5b3UgZm9ybWF0IHRoZSBleGNlcHRpb24KKyAqICAgbWVzc2FnZSBhcyAiWFlaOmRhdGEiLCB3aGVyZSAnWFlaJyBpcyBhIGFscGhhbnVtZXJpYy1vbmx5IHdvcmQsIHRoaXMgd2lsbCBiZSB0cmFuc2Zvcm1lZCB0byBhIGkxOG4tc3VwcG9ydCBzdHJpbmcsIHdoZXJlCisgKiAgICdiYWNrZW5kLlhZWicgbXVzdCBtYXAgdG8gYSB0cmFuc2xhdGlvbiBzdHJpbmcgKGUuZy4gJ2JhY2tlbmQubm9maWxlJywgc2VlIGFsc28gdGhlIExhbmd1YWdlL0xhbmd1YWdlLlhYLmpzIGZpbGVzKSBhbmQgdGhlIG9wdGlvbmFsCisgKiAgICdkYXRhJyB0YWlsIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHRyYW5zbGF0ZWQgbWVzc2FnZS4KKyAqCisgKgorICogJGluZm86IHRoZSBkZXRhaWxzOgorICoKKyAqICAgSGVyZSBpcyB0aGUgbGlzdCBvZiAkaW5mbyBtZW1iZXJzIHBlciAkYWN0aW9uIGV2ZW50IGNvZGU6CisgKgorICogICAndXBsb2FkJzoKKyAqCisgKiAgICAgICAgICAgJGluZm9bXSBjb250YWluczoKKyAqCisgKiAgICAgICAgICAgICAgICdsZWdhbF9kaXJfdXJsJyAgICAgICAgIChzdHJpbmcpIExFR0FMIFVSSSBwYXRoIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGZpbGUgaXMgYmVpbmcgdXBsb2FkZWQuIFlvdSBtYXkgaW52b2tlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlyID0gJG1nci0+bGVnYWxfdXJsX3BhdGgyZmlsZV9wYXRoKCRsZWdhbF9kaXJfdXJsKTsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gb2J0YWluIHRoZSBwaHlzaWNhbCBmaWxlc3lzdGVtIHBhdGggKGFsc28gYXZhaWxhYmxlIGluIHRoZSAnZGlyJyAkaW5mbyBlbnRyeSwgYnkgdGhlIHdheSEpLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpcl91cmwgPSAkbWdyLT5sZWdhbDJhYnNfdXJsX3BhdGgoJGxlZ2FsX2Rpcl91cmwpOworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBvYnRhaW4gdGhlIGFic29sdXRlIFVSSSBwYXRoIGZvciB0aGUgZ2l2ZW4gZGlyZWN0b3J5LgorICoKKyAqICAgICAgICAgICAgICAgJ2RpcicgICAgICAgICAgICAgICAgICAgKHN0cmluZykgcGh5c2ljYWwgZmlsZXN5c3RlbSBwYXRoIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGZpbGUgaXMgYmVpbmcgdXBsb2FkZWQuCisgKgorICogICAgICAgICAgICAgICAncmF3X2ZpbGVuYW1lJyAgICAgICAgICAoc3RyaW5nKSB0aGUgcmF3LCB1bnByb2Nlc3NlZCBmaWxlbmFtZSBvZiB0aGUgZmlsZSBiZWluZyBiZWluZyB1cGxvYWRlZCwgYXMgc3BlY2lmaWVkIGJ5IHRoZSBjbGllbnQuCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQVJOSU5HOiAncmF3X2ZpbGVuYW1lJyBtYXkgY29udGFpbiBhbnl0aGluZyBpbGxlZ2FsLCBzdWNoIGFzIGRpcmVjdG9yeSBwYXRocyBpbnN0ZWFkIG9mIGp1c3QgYSBmaWxlbmFtZSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS1pbGxlZ2FsIGNoYXJhY3RlcnMgYW5kIHdoYXQtbm90LiBVc2UgJ25hbWUnKydleHRlbnNpb24nIGluc3RlYWQgaWYgeW91IHdhbnQgdG8ga25vdworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSB0aGUgdXBsb2FkIHdpbGwgZW5kIHVwLgorICoKKyAqICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJyAgICAgICAgICAgICAgKHN0cmluZykgdGhlIGZpbGVuYW1lLCBwbHVzIGV4dGVuc2lvbiwgb2YgdGhlIGZpbGUgYmVpbmcgdXBsb2FkZWQ7IHRoaXMgZmlsZW5hbWUgaXMgZW5zdXJlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZSBib3RoIGZpbGVzeXN0ZW0tbGVnYWwsIHVuaXF1ZSBhbmQgbm90IHlldCBleGlzdGluZyBpbiB0aGUgZ2l2ZW4gZGlyZWN0b3J5LgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoZSBmaWxlIG5hbWUgZXh0ZW5zaW9uIGhhcyBhbHJlYWR5IGJlZW4gY2xlYW5lZCwgaW5jbHVkaW5nICdzYWZlJyBtb2RlIHByb2Nlc3NpbmcsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkuZS4gYW55IHVwbG9hZGVkIGJpbmFyeSBleGVjdXRhYmxlIHdpbGwgaGF2ZSBiZWVuIGFzc2lnbmVkIHRoZSBleHRlbnNpb24gJy50eHQnIGFscmVhZHksIHdoZW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZU1hbmFnZXIncyBvcHRpb25zWydzYWZlJ10gaXMgZW5hYmxlZC4KKyAqCisgKiAgICAgICAgICAgICAgICd0bXBfZmlsZXBhdGgnICAgICAgICAgIChzdHJpbmcpIGZpbGVzeXN0ZW0gcGF0aCBwb2ludGluZyBhdCB0aGUgdGVtcG9yYXJ5IHN0b3JhZ2UgbG9jYXRpb24gb2YgdGhlIHVwbG9hZGVkIGZpbGU6IHlvdSBjYW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzIHRoZSBmaWxlIGRhdGEgYXZhaWxhYmxlIGhlcmUgdG8gb3B0aW9uYWxseSB2YWxpZGF0ZSB0aGUgdXBsb2FkZWQgY29udGVudC4KKyAqCisgKiAgICAgICAgICAgICAgICdtZXRhX2RhdGEnICAgICAgICAgICAgIChhcnJheSkgdGhlIGNvbnRlbnQgc25pZmZlZCBpbmZvciBhcyBwcm9kdWNlZCBieSBnZXRJRDMKKyAqCisgKiAgICAgICAgICAgICAgICdtaW1lJyAgICAgICAgICAgICAgICAgIChzdHJpbmcpIHRoZSBtaW1lIHR5cGUgYXMgc25pZmZlZCBmcm9tIHRoZSBmaWxlCisgKgorICogICAgICAgICAgICAgICAnbWltZV9maWx0ZXInICAgICAgICAgICAob3B0aW9uYWwsIHN0cmluZykgbWltZSBmaWx0ZXIgYXMgc3BlY2lmaWVkIGJ5IHRoZSBjbGllbnQ6IGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZyBjb250YWluaW5nCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGwgb3IgcGFydGlhbCBtaW1lIHR5cGVzLCB3aGVyZSBhICdwYXJ0aWFsJyBtaW1lIHR5cGVzIGlzIHRoZSBwYXJ0IG9mIGEgbWltZSB0eXBlIGJlZm9yZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgaW5jbHVkaW5nIHRoZSBzbGFzaCwgZS5nLiAnaW1hZ2UvJworICoKKyAqICAgICAgICAgICAgICAgJ21pbWVfZmlsdGVycycgICAgICAgICAgKG9wdGlvbmFsLCBhcnJheSBvZiBzdHJpbmdzKSB0aGUgc2V0IG9mIGFsbG93ZWQgbWltZSB0eXBlcywgZGVyaXZlZCBmcm9tIHRoZSAnbWltZV9maWx0ZXInIHNldHRpbmcuCisgKgorICogICAgICAgICAgICAgICAnc2l6ZScgICAgICAgICAgICAgICAgICAoaW50ZWdlcikgbnVtYmVyIG9mIGJ5dGVzIG9mIHRoZSB1cGxvYWRlZCBmaWxlCisgKgorICogICAgICAgICAgICAgICAnbWF4c2l6ZScgICAgICAgICAgICAgICAoaW50ZWdlcikgdGhlIGNvbmZpZ3VyZWQgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgZm9yIGFueSBzaW5nbGUgdXBsb2FkCisgKgorICogICAgICAgICAgICAgICAnb3ZlcndyaXRlJyAgICAgICAgICAgICAoYm9vbGVhbikgRkFMU0U6IHRoZSB1cGxvYWRlZCBmaWxlIHdpbGwgbm90IG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgZmlsZSwgaXQgd2lsbCBmYWlsIGluc3RlYWQuCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdG8gVFJVRSAoYW5kIGFkanVzdCB0aGUgJ25hbWUnIGFuZCAnZXh0ZW5zaW9uJyBlbnRyaWVzIGFzIHlvdSBkZXNpcmUpIHdoZW4geW91IHdpc2ggdG8gb3ZlcndyaXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGV4aXN0aW5nIGZpbGUuCisgKgorICogICAgICAgICAgICAgICAncmVzaXplJyAgICAgICAgICAgICAgICAoYm9vbGVhbikgVFJVRTogYW55IHVwbG9hZGVkIGltYWdlcyBhcmUgcmVzaXplZCB0byB0aGUgY29uZmlndXJlZCBtYXhpbXVtIGRpbWVuc2lvbnMgYmVmb3JlIHRoZXkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIHN0b3JlZCBvbiBkaXNrLgorICoKKyAqICAgICAgICAgICAgICAgJ2NobW9kJyAgICAgICAgICAgICAgICAgKGludGVnZXIpIFVOSVggYWNjZXNzIHJpZ2h0cyAoZGVmYXVsdDogMDY2NikgZm9yIHRoZSBmaWxlLXRvLWJlLWNyZWF0ZWQgKFJXIGZvciB1c2VyLGdyb3VwLHdvcmxkKS4KKyAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgZVhlY3V0YWJsZSBiaXRzIGhhdmUgYWxyZWFkeSBiZWVuIHN0cmlwcGVkIGJlZm9yZSB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQuCisgKgorICogICAgICAgICAgICAgICAncHJlbGltaW5hcnlfanNvbicgICAgICAoYXJyYXkpIHRoZSBKU09OIGRhdGEgY29sbGVjdGVkIHNvIGZhcjsgd2hlbiBbJ3N0YXR1cyddPT0xLCB0aGVuIHdlJ3JlIHBlcmZvcm1pbmcgYSByZWd1bGFyIHVwbG9hZAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24sIHdoZW4gdGhlIFsnc3RhdHVzJ109PTAsIHdlIGFyZSBwZXJmb3JtaW5nIGEgZGVmZWN0aXZlIHVwbG9hZCBvcGVyYXRpb24uCisgKgorICogICAgICAgICAgICAgICAndmFsaWRhdGlvbl9mYWlsdXJlJyAgICAoc3RyaW5nKSBOVUxMOiBubyB2YWxpZGF0aW9uIGVycm9yIGhhcyBiZWVuIGRldGVjdGVkIGJlZm9yZSB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQ7IG5vbi1OVUxMLCBlLmcuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub2ZpbGUiOiB0aGUgc3RyaW5nIHBhc3NlZCBhcyBtZXNzYWdlIHBhcmFtZXRlciBvZiB0aGUgRmlsZU1hbmFnZXJFeGNlcHRpb24sIHdoaWNoIHdpbGwgYmUgdGhyb3duCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIHRoZSBjYWxsYmFjayBoYXMgcmV0dXJuZWQuIChZb3UgbWF5IGFsdGVyIHRoZSAndmFsaWRhdGlvbl9mYWlsdXJlJyBzdHJpbmcgdmFsdWUgdG8gY2hhbmdlIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlZCBlcnJvciwgb3Igc2V0IGl0IHRvIE5VTEwgdG8gdHVybiBvZmYgdGhlIHZhbGlkYXRpb24gZXJyb3IgcmVwb3J0IGVudGlyZWx5IC0tIHdlIGFzc3VtZSB5b3UKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBoYXZlIGNvcnJlY3RlZCB0aGUgb3RoZXIgZmlsZWluZm9bXSBpdGVtcyBhcyB3ZWxsLCB3aGVuIHJlc2V0dGluZyB0aGUgdmFsaWRhdGlvbiBlcnJvci4KKyAqCisgKgorICogICAgICAgICBOb3RlIHRoYXQgdGhpcyByZXF1ZXN0IG9yaWdpbmF0ZXMgZnJvbSBhIE1hY3JvbWVkaWEgRmxhc2ggY2xpZW50OiBoZW5jZSB5b3UnbGwgbmVlZCB0byB1c2UgdGhlCisgKiAgICAgICAgICRfUE9TVFtzZXNzaW9uX25hbWUoKV0gdmFsdWUgdG8gbWFudWFsbHkgc2V0IHRoZSBQSFAgc2Vzc2lvbl9pZCgpIGJlZm9yZSB5b3Ugc3RhcnQgeW91ciB5b3VyIHNlc3Npb24KKyAqICAgICAgICAgYWdhaW4uCisgKgorICogICAgICAgICBUaGUgZnJvbnRlbmQtc3BlY2lmaWVkIG9wdGlvbnMucHJvcGFnYXRlRGF0YSBpdGVtcyB3aWxsIGJlIGF2YWlsYWJsZSBhcyAkX1BPU1RbXSBpdGVtcy4KKyAqCisgKiAgICAgICAgIFRoZSBmcm9udGVuZC1zcGVjaWZpZWQgb3B0aW9ucy51cGxvYWRBdXRoRGF0YSBpdGVtcyB3aWxsIGJlIGF2YWlsYWJsZSBhcyAkX1BPU1RbXSBpdGVtcy4KKyAqCisgKgorICogICdkb3dubG9hZCc6CisgKgorICogICAgICAgICAgICRpbmZvW10gY29udGFpbnM6CisgKgorICogICAgICAgICAgICAgICAnbGVnYWxfdXJsJyAgICAgICAgICAgICAoc3RyaW5nKSBMRUdBTCBVUkkgcGF0aCB0byB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkLiBZb3UgbWF5IGludm9rZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpciA9ICRtZ3ItPmxlZ2FsX3VybF9wYXRoMmZpbGVfcGF0aCgkbGVnYWxfdXJsKTsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gb2J0YWluIHRoZSBwaHlzaWNhbCBmaWxlc3lzdGVtIHBhdGggKGFsc28gYXZhaWxhYmxlIGluIHRoZSAnZmlsZScgJGluZm8gZW50cnksIGJ5IHRoZSB3YXkhKSwgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1cmwgPSAkbWdyLT5sZWdhbDJhYnNfdXJsX3BhdGgoJGxlZ2FsX3VybCk7CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIG9idGFpbiB0aGUgYWJzb2x1dGUgVVJJIHBhdGggZm9yIHRoZSBnaXZlbiBmaWxlLgorICoKKyAqICAgICAgICAgICAgICAgJ2ZpbGUnICAgICAgICAgICAgICAgICAgKHN0cmluZykgcGh5c2ljYWwgZmlsZXN5c3RlbSBwYXRoIHRvIHRoZSBmaWxlIGJlaW5nIGRvd25sb2FkZWQuCisgKgorICogICAgICAgICAgICAgICAnbWV0YV9kYXRhJyAgICAgICAgICAgICAoYXJyYXkpIHRoZSBjb250ZW50IHNuaWZmZWQgaW5mb3IgYXMgcHJvZHVjZWQgYnkgZ2V0SUQzCisgKgorICogICAgICAgICAgICAgICAnbWltZScgICAgICAgICAgICAgICAgICAoc3RyaW5nKSB0aGUgbWltZSB0eXBlIGFzIHNuaWZmZWQgZnJvbSB0aGUgZmlsZQorICoKKyAqICAgICAgICAgICAgICAgJ21pbWVfZmlsdGVyJyAgICAgICAgICAgKG9wdGlvbmFsLCBzdHJpbmcpIG1pbWUgZmlsdGVyIGFzIHNwZWNpZmllZCBieSB0aGUgY2xpZW50OiBhIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcgY29udGFpbmluZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsIG9yIHBhcnRpYWwgbWltZSB0eXBlcywgd2hlcmUgYSAncGFydGlhbCcgbWltZSB0eXBlcyBpcyB0aGUgcGFydCBvZiBhIG1pbWUgdHlwZSBiZWZvcmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGluY2x1ZGluZyB0aGUgc2xhc2gsIGUuZy4gJ2ltYWdlLycKKyAqCisgKiAgICAgICAgICAgICAgICdtaW1lX2ZpbHRlcnMnICAgICAgICAgIChvcHRpb25hbCwgYXJyYXkgb2Ygc3RyaW5ncykgdGhlIHNldCBvZiBhbGxvd2VkIG1pbWUgdHlwZXMsIGRlcml2ZWQgZnJvbSB0aGUgJ21pbWVfZmlsdGVyJyBzZXR0aW5nLgorICoKKyAqICAgICAgICAgICAgICAgJ3ZhbGlkYXRpb25fZmFpbHVyZScgICAgKHN0cmluZykgTlVMTDogbm8gdmFsaWRhdGlvbiBlcnJvciBoYXMgYmVlbiBkZXRlY3RlZCBiZWZvcmUgdGhlIGNhbGxiYWNrIHdhcyBpbnZva2VkOyBub24tTlVMTCwgZS5nLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm9maWxlIjogdGhlIHN0cmluZyBwYXNzZWQgYXMgbWVzc2FnZSBwYXJhbWV0ZXIgb2YgdGhlIEZpbGVNYW5hZ2VyRXhjZXB0aW9uLCB3aGljaCB3aWxsIGJlIHRocm93bgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGUgY2FsbGJhY2sgaGFzIHJldHVybmVkLiAoWW91IG1heSBhbHRlciB0aGUgJ3ZhbGlkYXRpb25fZmFpbHVyZScgc3RyaW5nIHZhbHVlIHRvIGNoYW5nZSB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZWQgZXJyb3IsIG9yIHNldCBpdCB0byBOVUxMIHRvIHR1cm4gb2ZmIHRoZSB2YWxpZGF0aW9uIGVycm9yIHJlcG9ydCBlbnRpcmVseSAtLSB3ZSBhc3N1bWUgeW91CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgaGF2ZSBjb3JyZWN0ZWQgdGhlIG90aGVyIGZpbGVpbmZvW10gaXRlbXMgYXMgd2VsbCwgd2hlbiByZXNldHRpbmcgdGhlIHZhbGlkYXRpb24gZXJyb3IuCisgKgorICogICAgICAgICBUaGUgZnJvbnRlbmQtc3BlY2lmaWVkIG9wdGlvbnMucHJvcGFnYXRlRGF0YSBpdGVtcyB3aWxsIGJlIGF2YWlsYWJsZSBhcyAkX1BPU1RbXSBpdGVtcy4KKyAqCisgKgorICogICdjcmVhdGUnOiAvLyBjcmVhdGUgZGlyZWN0b3J5CisgKgorICogICAgICAgICAgICRpbmZvW10gY29udGFpbnM6CisgKgorICogICAgICAgICAgICAgICAnbGVnYWxfdXJsJyAgICAgICAgICAgICAoc3RyaW5nKSBMRUdBTCBVUkkgcGF0aCB0byB0aGUgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgZGlyZWN0b3J5IGJlaW5nIGNyZWF0ZWQuIFlvdSBtYXkgaW52b2tlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlyID0gJG1nci0+bGVnYWxfdXJsX3BhdGgyZmlsZV9wYXRoKCRsZWdhbF91cmwpOworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBvYnRhaW4gdGhlIHBoeXNpY2FsIGZpbGVzeXN0ZW0gcGF0aCAoYWxzbyBhdmFpbGFibGUgaW4gdGhlICdkaXInICRpbmZvIGVudHJ5LCBieSB0aGUgd2F5ISksIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXJsID0gJG1nci0+bGVnYWwyYWJzX3VybF9wYXRoKCRsZWdhbF91cmwpOworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBvYnRhaW4gdGhlIGFic29sdXRlIFVSSSBwYXRoIGZvciB0aGlzIHBhcmVudCBkaXJlY3RvcnkuCisgKgorICogICAgICAgICAgICAgICAnZGlyJyAgICAgICAgICAgICAgICAgICAoc3RyaW5nKSBwaHlzaWNhbCBmaWxlc3lzdGVtIHBhdGggdG8gdGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIGRpcmVjdG9yeSBiZWluZyBjcmVhdGVkLgorICoKKyAqICAgICAgICAgICAgICAgJ3Jhd19uYW1lJyAgICAgICAgICAgICAgKHN0cmluZykgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0byBiZSBjcmVhdGVkLCBhcyBzcGVjaWZpZWQgYnkgdGhlIGNsaWVudCAodW5maWx0ZXJlZCEpCisgKgorICogICAgICAgICAgICAgICAndW5pcV9uYW1lJyAgICAgICAgICAgICAoc3RyaW5nKSB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRvIGJlIGNyZWF0ZWQsIGZpbHRlcmVkIGFuZCBlbnN1cmVkIHRvIGJlIGJvdGggdW5pcXVlIGFuZAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QteWV0LWV4aXN0aW5nIGluIHRoZSBmaWxlc3lzdGVtLgorICoKKyAqICAgICAgICAgICAgICAgJ25ld2RpcicgICAgICAgICAgICAgICAgKHN0cmluZykgdGhlIGZpbGVzeXN0ZW0gYWJzb2x1dGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRvIGJlIGNyZWF0ZWQ7IGlkZW50aWNhbCB0bzoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXdkaXIgPSAkbWdyLT5sZWdhbF91cmxfcGF0aDJmaWxlX3BhdGgoJGxlZ2FsX3VybCAuICR1bmlxX25hbWUpOworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlIHRoZSBhYm92ZTogYWxsIHBhdGhzIGFyZSB0cmFuc2Zvcm1lZCBmcm9tIFVSSSBzcGFjZSB0byBwaHlzaWNhbCBkaXNrIGV2ZXJ5IHRpbWUgYSBjaGFuZ2Ugb2NjdXJzOworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGFsbG93cyB1cyB0byBtYXAgZXZlbiBub3QtZXhpc3RpbmcgJ2RpcmVjdG9yaWVzJyB0byBwb3NzaWJseSBkaXNwYXJhdGUgZmlsZXN5c3RlbSBsb2NhdGlvbnMuCisgKgorICogICAgICAgICAgICAgICAnY2htb2QnICAgICAgICAgICAgICAgICAoaW50ZWdlcikgVU5JWCBhY2Nlc3MgcmlnaHRzIChkZWZhdWx0OiAwNzc3KSBmb3IgdGhlIGRpcmVjdG9yeS10by1iZS1jcmVhdGVkIChSV1ggZm9yIHVzZXIsZ3JvdXAsd29ybGQpCisgKgorICogICAgICAgICAgICAgICAncHJlbGltaW5hcnlfanNvbicgICAgICAoYXJyYXkpIHRoZSBKU09OIGRhdGEgY29sbGVjdGVkIHNvIGZhcjsgd2hlbiBbJ3N0YXR1cyddPT0xLCB0aGVuIHdlJ3JlIHBlcmZvcm1pbmcgYSByZWd1bGFyICdjcmVhdGUnCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiwgd2hlbiB0aGUgWydzdGF0dXMnXT09MCwgd2UgYXJlIHBlcmZvcm1pbmcgYSBkZWZlY3RpdmUgJ2NyZWF0ZScgb3BlcmF0aW9uLgorICoKKyAqICAgICAgICAgICAgICAgJ3ZhbGlkYXRpb25fZmFpbHVyZScgICAgKHN0cmluZykgTlVMTDogbm8gdmFsaWRhdGlvbiBlcnJvciBoYXMgYmVlbiBkZXRlY3RlZCBiZWZvcmUgdGhlIGNhbGxiYWNrIHdhcyBpbnZva2VkOyBub24tTlVMTCwgZS5nLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm9maWxlIjogdGhlIHN0cmluZyBwYXNzZWQgYXMgbWVzc2FnZSBwYXJhbWV0ZXIgb2YgdGhlIEZpbGVNYW5hZ2VyRXhjZXB0aW9uLCB3aGljaCB3aWxsIGJlIHRocm93bgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGUgY2FsbGJhY2sgaGFzIHJldHVybmVkLiAoWW91IG1heSBhbHRlciB0aGUgJ3ZhbGlkYXRpb25fZmFpbHVyZScgc3RyaW5nIHZhbHVlIHRvIGNoYW5nZSB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZWQgZXJyb3IsIG9yIHNldCBpdCB0byBOVUxMIHRvIHR1cm4gb2ZmIHRoZSB2YWxpZGF0aW9uIGVycm9yIHJlcG9ydCBlbnRpcmVseSAtLSB3ZSBhc3N1bWUgeW91CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgaGF2ZSBjb3JyZWN0ZWQgdGhlIG90aGVyIGZpbGVpbmZvW10gaXRlbXMgYXMgd2VsbCwgd2hlbiByZXNldHRpbmcgdGhlIHZhbGlkYXRpb24gZXJyb3IuCisgKgorICogICAgICAgICBUaGUgZnJvbnRlbmQtc3BlY2lmaWVkIG9wdGlvbnMucHJvcGFnYXRlRGF0YSBpdGVtcyB3aWxsIGJlIGF2YWlsYWJsZSBhcyAkX1BPU1RbXSBpdGVtcy4KKyAqCisgKgorICogICdkZXN0cm95JzoKKyAqCisgKiAgICAgICAgICAgJGluZm9bXSBjb250YWluczoKKyAqCisgKiAgICAgICAgICAgICAgICdsZWdhbF91cmwnICAgICAgICAgICAgIChzdHJpbmcpIExFR0FMIFVSSSBwYXRoIHRvIHRoZSBmaWxlL2RpcmVjdG9yeSB0byBiZSBkZWxldGVkLiBZb3UgbWF5IGludm9rZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpciA9ICRtZ3ItPmxlZ2FsX3VybF9wYXRoMmZpbGVfcGF0aCgkbGVnYWxfdXJsKTsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gb2J0YWluIHRoZSBwaHlzaWNhbCBmaWxlc3lzdGVtIHBhdGggKGFsc28gYXZhaWxhYmxlIGluIHRoZSAnZmlsZScgJGluZm8gZW50cnksIGJ5IHRoZSB3YXkhKSwgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1cmwgPSAkbWdyLT5sZWdhbDJhYnNfdXJsX3BhdGgoJGxlZ2FsX3VybCk7CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIG9idGFpbiB0aGUgYWJzb2x1dGUgVVJJIHBhdGggZm9yIHRoZSBnaXZlbiBmaWxlL2RpcmVjdG9yeS4KKyAqCisgKiAgICAgICAgICAgICAgICdmaWxlJyAgICAgICAgICAgICAgICAgIChzdHJpbmcpIHBoeXNpY2FsIGZpbGVzeXN0ZW0gcGF0aCB0byB0aGUgZmlsZS9kaXJlY3RvcnkgYmVpbmcgZGVsZXRlZC4KKyAqCisgKiAgICAgICAgICAgICAgICdtZXRhX2RhdGEnICAgICAgICAgICAgIChhcnJheSkgdGhlIGNvbnRlbnQgc25pZmZlZCBpbmZvciBhcyBwcm9kdWNlZCBieSBnZXRJRDMKKyAqCisgKiAgICAgICAgICAgICAgICdtaW1lJyAgICAgICAgICAgICAgICAgIChzdHJpbmcpIHRoZSBtaW1lIHR5cGUgYXMgc25pZmZlZCBmcm9tIHRoZSBmaWxlIC8gZGlyZWN0b3J5IChkaXJlY3RvcmllcyBhcmUgbWltZSB0eXBlOiAndGV4dC9kaXJlY3RvcnknKQorICoKKyAqICAgICAgICAgICAgICAgJ21pbWVfZmlsdGVyJyAgICAgICAgICAgKG9wdGlvbmFsLCBzdHJpbmcpIG1pbWUgZmlsdGVyIGFzIHNwZWNpZmllZCBieSB0aGUgY2xpZW50OiBhIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcgY29udGFpbmluZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsIG9yIHBhcnRpYWwgbWltZSB0eXBlcywgd2hlcmUgYSAncGFydGlhbCcgbWltZSB0eXBlcyBpcyB0aGUgcGFydCBvZiBhIG1pbWUgdHlwZSBiZWZvcmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGluY2x1ZGluZyB0aGUgc2xhc2gsIGUuZy4gJ2ltYWdlLycKKyAqCisgKiAgICAgICAgICAgICAgICdtaW1lX2ZpbHRlcnMnICAgICAgICAgIChvcHRpb25hbCwgYXJyYXkgb2Ygc3RyaW5ncykgdGhlIHNldCBvZiBhbGxvd2VkIG1pbWUgdHlwZXMsIGRlcml2ZWQgZnJvbSB0aGUgJ21pbWVfZmlsdGVyJyBzZXR0aW5nLgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoZSAnbWltZV9maWx0ZXJzJywgaWYgYW55LCBhcmUgYXBwbGllZCB0byB0aGUgJ2RlbGV0ZScgb3BlcmF0aW9uIGluIGEgc3BlY2lhbCB3YXk6IG9ubHkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgbWF0Y2hpbmcgb25lIG9mIHRoZSBtaW1lIHR5cGVzIGluIHRoaXMgbGlzdCB3aWxsIGJlIGRlbGV0ZWQ7IGFueXRoaW5nIGVsc2Ugd2lsbCByZW1haW4gaW50YWN0LgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIHNlbGVjdGl2ZWx5IGNsZWFuIGEgZGlyZWN0b3J5IHRyZWUuCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVzaWduIGlkZWEgYmVoaW5kIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCB5b3UgYXJlIG9ubHkgYWxsb3dlZCB3aGF0IHlvdSBjYW4gc2VlICgndmlldycpLCBzbworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGwgJ3ZpZXcnIHJlc3RyaWN0aW9ucyBzaG91bGQgZXF1YWxseSB0byB0aGUgJ2RlbGV0ZScgb3BlcmF0aW9uLgorICoKKyAqICAgICAgICAgICAgICAgJ3ByZWxpbWluYXJ5X2pzb24nICAgICAgKGFycmF5KSB0aGUgSlNPTiBkYXRhIGNvbGxlY3RlZCBzbyBmYXI7IHdoZW4gWydzdGF0dXMnXT09MSwgdGhlbiB3ZSdyZSBwZXJmb3JtaW5nIGEgcmVndWxhciAnZGVzdHJveScKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLCB3aGVuIHRoZSBbJ3N0YXR1cyddPT0wLCB3ZSBhcmUgcGVyZm9ybWluZyBhIGRlZmVjdGl2ZSAnZGVzdHJveScgb3BlcmF0aW9uLgorICoKKyAqICAgICAgICAgICAgICAgJ3ZhbGlkYXRpb25fZmFpbHVyZScgICAgKHN0cmluZykgTlVMTDogbm8gdmFsaWRhdGlvbiBlcnJvciBoYXMgYmVlbiBkZXRlY3RlZCBiZWZvcmUgdGhlIGNhbGxiYWNrIHdhcyBpbnZva2VkOyBub24tTlVMTCwgZS5nLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm9maWxlIjogdGhlIHN0cmluZyBwYXNzZWQgYXMgbWVzc2FnZSBwYXJhbWV0ZXIgb2YgdGhlIEZpbGVNYW5hZ2VyRXhjZXB0aW9uLCB3aGljaCB3aWxsIGJlIHRocm93bgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGUgY2FsbGJhY2sgaGFzIHJldHVybmVkLiAoWW91IG1heSBhbHRlciB0aGUgJ3ZhbGlkYXRpb25fZmFpbHVyZScgc3RyaW5nIHZhbHVlIHRvIGNoYW5nZSB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZWQgZXJyb3IsIG9yIHNldCBpdCB0byBOVUxMIHRvIHR1cm4gb2ZmIHRoZSB2YWxpZGF0aW9uIGVycm9yIHJlcG9ydCBlbnRpcmVseSAtLSB3ZSBhc3N1bWUgeW91CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgaGF2ZSBjb3JyZWN0ZWQgdGhlIG90aGVyIGZpbGVpbmZvW10gaXRlbXMgYXMgd2VsbCwgd2hlbiByZXNldHRpbmcgdGhlIHZhbGlkYXRpb24gZXJyb3IuCisgKgorICogICAgICAgICBUaGUgZnJvbnRlbmQtc3BlY2lmaWVkIG9wdGlvbnMucHJvcGFnYXRlRGF0YSBpdGVtcyB3aWxsIGJlIGF2YWlsYWJsZSBhcyAkX1BPU1RbXSBpdGVtcy4KKyAqCisgKgorICogICdtb3ZlJzogIC8vIG1vdmUgb3IgY29weSEKKyAqCisgKiAgICAgICAgICAgJGluZm9bXSBjb250YWluczoKKyAqCisgKiAgICAgICAgICAgICAgICdsZWdhbF91cmwnICAgICAgICAgICAgIChzdHJpbmcpIExFR0FMIFVSSSBwYXRoIHRvIHRoZSBzb3VyY2UgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgZmlsZS9kaXJlY3RvcnkgYmVpbmcgbW92ZWQvY29waWVkLiBZb3UgbWF5IGludm9rZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpciA9ICRtZ3ItPmxlZ2FsX3VybF9wYXRoMmZpbGVfcGF0aCgkbGVnYWxfdXJsKTsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gb2J0YWluIHRoZSBwaHlzaWNhbCBmaWxlc3lzdGVtIHBhdGggKGFsc28gYXZhaWxhYmxlIGluIHRoZSAnZGlyJyAkaW5mbyBlbnRyeSwgYnkgdGhlIHdheSEpLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVybCA9ICRtZ3ItPmxlZ2FsMmFic191cmxfcGF0aCgkbGVnYWxfdXJsKTsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gb2J0YWluIHRoZSBhYnNvbHV0ZSBVUkkgcGF0aCBmb3IgdGhlIGdpdmVuIGRpcmVjdG9yeS4KKyAqCisgKiAgICAgICAgICAgICAgICdkaXInICAgICAgICAgICAgICAgICAgIChzdHJpbmcpIHBoeXNpY2FsIGZpbGVzeXN0ZW0gcGF0aCB0byB0aGUgc291cmNlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIGZpbGUvZGlyZWN0b3J5IGJlaW5nIG1vdmVkL2NvcGllZC4KKyAqCisgKiAgICAgICAgICAgICAgICdwYXRoJyAgICAgICAgICAgICAgICAgIChzdHJpbmcpIHBoeXNpY2FsIGZpbGVzeXN0ZW0gcGF0aCB0byB0aGUgZmlsZS9kaXJlY3RvcnkgYmVpbmcgbW92ZWQvY29waWVkIGl0c2VsZjsgdGhpcyBpcyB0aGUgZnVsbCBzb3VyY2UgcGF0aC4KKyAqCisgKiAgICAgICAgICAgICAgICduYW1lJyAgICAgICAgICAgICAgICAgIChzdHJpbmcpIHRoZSBuYW1lIGl0c2VsZiBvZiB0aGUgZmlsZS9kaXJlY3RvcnkgYmVpbmcgbW92ZWQvY29waWVkOyB0aGlzIGlzIHRoZSBzb3VyY2UgbmFtZS4KKyAqCisgKiAgICAgICAgICAgICAgICdsZWdhbF9uZXd1cmwnICAgICAgICAgIChzdHJpbmcpIExFR0FMIFVSSSBwYXRoIHRvIHRoZSB0YXJnZXQgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgZmlsZS9kaXJlY3RvcnkgYmVpbmcgbW92ZWQvY29waWVkLiBZb3UgbWF5IGludm9rZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpciA9ICRtZ3ItPmxlZ2FsX3VybF9wYXRoMmZpbGVfcGF0aCgkbGVnYWxfdXJsKTsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gb2J0YWluIHRoZSBwaHlzaWNhbCBmaWxlc3lzdGVtIHBhdGggKGFsc28gYXZhaWxhYmxlIGluIHRoZSAnZGlyJyAkaW5mbyBlbnRyeSwgYnkgdGhlIHdheSEpLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVybCA9ICRtZ3ItPmxlZ2FsMmFic191cmxfcGF0aCgkbGVnYWxfdXJsKTsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gb2J0YWluIHRoZSBhYnNvbHV0ZSBVUkkgcGF0aCBmb3IgdGhlIGdpdmVuIGRpcmVjdG9yeS4KKyAqCisgKiAgICAgICAgICAgICAgICduZXdkaXInICAgICAgICAgICAgICAgIChzdHJpbmcpIHBoeXNpY2FsIGZpbGVzeXN0ZW0gcGF0aCB0byB0aGUgdGFyZ2V0IHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIGZpbGUvZGlyZWN0b3J5IGJlaW5nIG1vdmVkL2NvcGllZDsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBpcyB0aGUgZnVsbCBwYXRoIG9mIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGZpbGUvZGlyZWN0b3J5IHdpbGwgYmUgbW92ZWQvY29waWVkIHRvLiAoZmlsZXN5c3RlbSBhYnNvbHV0ZSkKKyAqCisgKiAgICAgICAgICAgICAgICduZXdwYXRoJyAgICAgICAgICAgICAgIChzdHJpbmcpIHBoeXNpY2FsIGZpbGVzeXN0ZW0gcGF0aCB0byB0aGUgdGFyZ2V0IGZpbGUvZGlyZWN0b3J5IGJlaW5nIG1vdmVkL2NvcGllZCBpdHNlbGY7IHRoaXMgaXMgdGhlIGZ1bGwgZGVzdGluYXRpb24gcGF0aCwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaS5lLiB0aGUgZnVsbCBwYXRoIG9mIHdoZXJlIHRoZSBmaWxlL2RpcmVjdG9yeSBzaG91bGQgYmUgcmVuYW1lZC9tb3ZlZCB0by4gKGZpbGVzeXN0ZW0gYWJzb2x1dGUpCisgKgorICogICAgICAgICAgICAgICAnbmV3bmFtZScgICAgICAgICAgICAgICAoc3RyaW5nKSB0aGUgdGFyZ2V0IG5hbWUgaXRzZWxmIG9mIHRoZSBmaWxlL2RpcmVjdG9yeSBiZWluZyBtb3ZlZC9jb3BpZWQ7IHRoaXMgaXMgdGhlIGRlc3RpbmF0aW9uIG5hbWUuCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGVuYW1lIGlzIGVuc3VyZWQgdG8gYmUgYm90aCBmaWxlc3lzdGVtLWxlZ2FsLCB1bmlxdWUgYW5kIG5vdCB5ZXQgZXhpc3RpbmcgaW4gdGhlIGdpdmVuIHRhcmdldCBkaXJlY3RvcnkuCisgKgorICogICAgICAgICAgICAgICAncmVuYW1lJyAgICAgICAgICAgICAgICAoYm9vbGVhbikgVFJVRSB3aGVuIGEgZmlsZS9kaXJlY3RvcnkgUkVOQU1FIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQgKG5hbWUgY2hhbmdlLCBzdGF5aW5nIHdpdGhpbiB0aGUgc2FtZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgZGlyZWN0b3J5KS4gRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqICAgICAgICAgICAgICAgJ2lzX2RpcicgICAgICAgICAgICAgICAgKGJvb2xlYW4pIFRSVUUgd2hlbiB0aGUgc3ViamVjdCBpcyBhIGRpcmVjdG9yeSBpdHNlbGYsIEZBTFNFIHdoZW4gaXQgaXMgYSByZWd1bGFyIGZpbGUuCisgKgorICogICAgICAgICAgICAgICAnZnVuY3Rpb24nICAgICAgICAgICAgICAoc3RyaW5nKSBQSFAgY2FsbCB3aGljaCB3aWxsIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi4gKCdyZW5hbWUnIG9yICdjb3B5JykKKyAqCisgKiAgICAgICAgICAgICAgICdwcmVsaW1pbmFyeV9qc29uJyAgICAgIChhcnJheSkgdGhlIEpTT04gZGF0YSBjb2xsZWN0ZWQgc28gZmFyOyB3aGVuIFsnc3RhdHVzJ109PTEsIHRoZW4gd2UncmUgcGVyZm9ybWluZyBhIHJlZ3VsYXIgJ21vdmUnCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiwgd2hlbiB0aGUgWydzdGF0dXMnXT09MCwgd2UgYXJlIHBlcmZvcm1pbmcgYSBkZWZlY3RpdmUgJ21vdmUnIG9wZXJhdGlvbi4KKyAqCisgKiAgICAgICAgICAgICAgICd2YWxpZGF0aW9uX2ZhaWx1cmUnICAgIChzdHJpbmcpIE5VTEw6IG5vIHZhbGlkYXRpb24gZXJyb3IgaGFzIGJlZW4gZGV0ZWN0ZWQgYmVmb3JlIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZDsgbm9uLU5VTEwsIGUuZy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vZmlsZSI6IHRoZSBzdHJpbmcgcGFzc2VkIGFzIG1lc3NhZ2UgcGFyYW1ldGVyIG9mIHRoZSBGaWxlTWFuYWdlckV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBiZSB0aHJvd24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhlIGNhbGxiYWNrIGhhcyByZXR1cm5lZC4gKFlvdSBtYXkgYWx0ZXIgdGhlICd2YWxpZGF0aW9uX2ZhaWx1cmUnIHN0cmluZyB2YWx1ZSB0byBjaGFuZ2UgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVkIGVycm9yLCBvciBzZXQgaXQgdG8gTlVMTCB0byB0dXJuIG9mZiB0aGUgdmFsaWRhdGlvbiBlcnJvciByZXBvcnQgZW50aXJlbHkgLS0gd2UgYXNzdW1lIHlvdQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGhhdmUgY29ycmVjdGVkIHRoZSBvdGhlciBmaWxlaW5mb1tdIGl0ZW1zIGFzIHdlbGwsIHdoZW4gcmVzZXR0aW5nIHRoZSB2YWxpZGF0aW9uIGVycm9yLgorICoKKyAqICAgICAgICAgVGhlIGZyb250ZW5kLXNwZWNpZmllZCBvcHRpb25zLnByb3BhZ2F0ZURhdGEgaXRlbXMgd2lsbCBiZSBhdmFpbGFibGUgYXMgJF9QT1NUW10gaXRlbXMuCisgKgorICoKKyAqICAndmlldyc6CisgKgorICogICAgICAgICAgICRpbmZvW10gY29udGFpbnM6CisgKgorICogICAgICAgICAgICAgICAnbGVnYWxfdXJsJyAgICAgICAgICAgICAoc3RyaW5nKSBMRUdBTCBVUkkgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGJlaW5nIHZpZXdlZC9zY2FubmVkLiBZb3UgbWF5IGludm9rZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpciA9ICRtZ3ItPmxlZ2FsX3VybF9wYXRoMmZpbGVfcGF0aCgkbGVnYWxfdXJsKTsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gb2J0YWluIHRoZSBwaHlzaWNhbCBmaWxlc3lzdGVtIHBhdGggKGFsc28gYXZhaWxhYmxlIGluIHRoZSAnZGlyJyAkaW5mbyBlbnRyeSwgYnkgdGhlIHdheSEpLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVybCA9ICRtZ3ItPmxlZ2FsMmFic191cmxfcGF0aCgkbGVnYWxfdXJsKTsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gb2J0YWluIHRoZSBhYnNvbHV0ZSBVUkkgcGF0aCBmb3IgdGhlIHNjYW5uZWQgZGlyZWN0b3J5LgorICoKKyAqICAgICAgICAgICAgICAgJ2RpcicgICAgICAgICAgICAgICAgICAgKHN0cmluZykgcGh5c2ljYWwgZmlsZXN5c3RlbSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgYmVpbmcgdmlld2VkL3NjYW5uZWQuCisgKgorICogICAgICAgICAgICAgICAnY29sbGVjdGlvbicgICAgICAgICAgICAoZHVhbCBhcnJheSBvZiBzdHJpbmdzKSBhcnJheXMgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIChpbmNsdWRpbmcgJy4uJyBlbnRyeSBhdCB0aGUgdG9wIHdoZW4gdGhpcyBpcyBhCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSBvZiB0aGUgRk0tbWFuYWdlZCB0cmVlKTogb25seSBuYW1lcywgbm90IGZ1bGwgcGF0aHMuIFRoZSBmaWxlcyBhcnJheSBpcyBsb2NhdGVkIGF0IHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2ZpbGVzJ10gaW5kZXgsIHdoaWxlIHRoZSBkaXJlY3RvcmllcyBhcmUgYXZhaWxhYmxlIGF0IHRoZSBbJ2RpcnMnXSBpbmRleC4KKyAqCisgKiAgICAgICAgICAgICAgICdtZXRhX2RhdGEnICAgICAgICAgICAgIChhcnJheSkgdGhlIGNvbnRlbnQgc25pZmZlZCBpbmZvciBhcyBwcm9kdWNlZCBieSBnZXRJRDMKKyAqCisgKiAgICAgICAgICAgICAgICdtaW1lX2ZpbHRlcicgICAgICAgICAgIChvcHRpb25hbCwgc3RyaW5nKSBtaW1lIGZpbHRlciBhcyBzcGVjaWZpZWQgYnkgdGhlIGNsaWVudDogYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nIGNvbnRhaW5pbmcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbCBvciBwYXJ0aWFsIG1pbWUgdHlwZXMsIHdoZXJlIGEgJ3BhcnRpYWwnIG1pbWUgdHlwZXMgaXMgdGhlIHBhcnQgb2YgYSBtaW1lIHR5cGUgYmVmb3JlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBpbmNsdWRpbmcgdGhlIHNsYXNoLCBlLmcuICdpbWFnZS8nCisgKgorICogICAgICAgICAgICAgICAnbWltZV9maWx0ZXJzJyAgICAgICAgICAob3B0aW9uYWwsIGFycmF5IG9mIHN0cmluZ3MpIHRoZSBzZXQgb2YgYWxsb3dlZCBtaW1lIHR5cGVzLCBkZXJpdmVkIGZyb20gdGhlICdtaW1lX2ZpbHRlcicgc2V0dGluZy4KKyAqCisgKiAgICAgICAgICAgICAgICdmaWxlX3ByZXNlbGVjdCcgICAgICAgIChvcHRpb25hbCwgc3RyaW5nKSBmaWxlbmFtZSBvZiBhIGZpbGUgaW4gdGhpcyBkaXJlY3Rvcnkgd2hpY2ggc2hvdWxkIGJlIGxvY2F0ZWQgYW5kIHNlbGVjdGVkLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIGZvdW5kLCB0aGUgYmFja2VuZCB3aWxsIHByb3ZpZGUgYW4gaW5kZXggbnVtYmVyIHBvaW50aW5nIGF0IHRoZSBjb3JyZXNwb25kaW5nIEpTT04gZmlsZXNbXQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeSB0byBhc3Npc3QgdGhlIGZyb250LWVuZCBpbiBqdW1waW5nIHRvIHRoYXQgcGFydGljdWxhciBpdGVtIGluIHRoZSB2aWV3LgorICoKKyAqICAgICAgICAgICAgICAgJ3ByZWxpbWluYXJ5X2pzb24nICAgICAgKGFycmF5KSB0aGUgSlNPTiBkYXRhIGNvbGxlY3RlZCBzbyBmYXI7IHdoZW4gWydzdGF0dXMnXT09MSwgdGhlbiB3ZSdyZSBwZXJmb3JtaW5nIGEgcmVndWxhciB2aWV3CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiAocG9zc2libHkgYXMgdGhlIHNlY29uZCBoYWxmIG9mIGEgY29weS9tb3ZlL2RlbGV0ZSBvcGVyYXRpb24pLCB3aGVuIHRoZSBbJ3N0YXR1cyddPT0wLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZSBhcmUgcGVyZm9ybWluZyBhIHZpZXcgb3BlcmF0aW9uIGFzIHRoZSBzZWNvbmQgcGFydCBvZiBhbm90aGVyIG90aGVyd2lzZSBmYWlsZWQgYWN0aW9uLCBlLmcuIGEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkICdjcmVhdGUgZGlyZWN0b3J5Jy4KKyAqCisgKiAgICAgICAgICAgICAgICd2YWxpZGF0aW9uX2ZhaWx1cmUnICAgIChzdHJpbmcpIE5VTEw6IG5vIHZhbGlkYXRpb24gZXJyb3IgaGFzIGJlZW4gZGV0ZWN0ZWQgYmVmb3JlIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZDsgbm9uLU5VTEwsIGUuZy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vZmlsZSI6IHRoZSBzdHJpbmcgcGFzc2VkIGFzIG1lc3NhZ2UgcGFyYW1ldGVyIG9mIHRoZSBGaWxlTWFuYWdlckV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBiZSB0aHJvd24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhlIGNhbGxiYWNrIGhhcyByZXR1cm5lZC4gKFlvdSBtYXkgYWx0ZXIgdGhlICd2YWxpZGF0aW9uX2ZhaWx1cmUnIHN0cmluZyB2YWx1ZSB0byBjaGFuZ2UgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVkIGVycm9yLCBvciBzZXQgaXQgdG8gTlVMTCB0byB0dXJuIG9mZiB0aGUgdmFsaWRhdGlvbiBlcnJvciByZXBvcnQgZW50aXJlbHkgLS0gd2UgYXNzdW1lIHlvdQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGhhdmUgY29ycmVjdGVkIHRoZSBvdGhlciBmaWxlaW5mb1tdIGl0ZW1zIGFzIHdlbGwsIHdoZW4gcmVzZXR0aW5nIHRoZSB2YWxpZGF0aW9uIGVycm9yLgorICoKKyAqICAgICAgICAgVGhlIGZyb250ZW5kLXNwZWNpZmllZCBvcHRpb25zLnByb3BhZ2F0ZURhdGEgaXRlbXMgd2lsbCBiZSBhdmFpbGFibGUgYXMgJF9QT1NUW10gaXRlbXMuCisgKgorICoKKyAqICAnZGV0YWlsJzoKKyAqCisgKiAgICAgICAgICAgJGluZm9bXSBjb250YWluczoKKyAqCisgKiAgICAgICAgICAgICAgICdsZWdhbF91cmwnICAgICAgICAgICAgIChzdHJpbmcpIExFR0FMIFVSSSBwYXRoIHRvIHRoZSBmaWxlL2RpcmVjdG9yeSBiZWluZyBpbnNwZWN0ZWQuIFlvdSBtYXkgaW52b2tlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlyID0gJG1nci0+bGVnYWxfdXJsX3BhdGgyZmlsZV9wYXRoKCRsZWdhbF91cmwpOworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBvYnRhaW4gdGhlIHBoeXNpY2FsIGZpbGVzeXN0ZW0gcGF0aCAoYWxzbyBhdmFpbGFibGUgaW4gdGhlICdmaWxlJyAkaW5mbyBlbnRyeSwgYnkgdGhlIHdheSEpLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVybCA9ICRtZ3ItPmxlZ2FsMmFic191cmxfcGF0aCgkbGVnYWxfdXJsKTsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gb2J0YWluIHRoZSBhYnNvbHV0ZSBVUkkgcGF0aCBmb3IgdGhlIGdpdmVuIGZpbGUuCisgKgorICogICAgICAgICAgICAgICAnZmlsZScgICAgICAgICAgICAgICAgICAoc3RyaW5nKSBwaHlzaWNhbCBmaWxlc3lzdGVtIHBhdGggdG8gdGhlIGZpbGUgYmVpbmcgaW5zcGVjdGVkLgorICoKKyAqICAgICAgICAgICAgICAgJ21ldGFfZGF0YScgICAgICAgICAgICAgKGFycmF5KSB0aGUgY29udGVudCBzbmlmZmVkIGluZm9yIGFzIHByb2R1Y2VkIGJ5IGdldElEMworICoKKyAqICAgICAgICAgICAgICAgJ21pbWUnICAgICAgICAgICAgICAgICAgKHN0cmluZykgdGhlIG1pbWUgdHlwZSBhcyBzbmlmZmVkIGZyb20gdGhlIGZpbGUKKyAqCisgKiAgICAgICAgICAgICAgICdtaW1lX2ZpbHRlcicgICAgICAgICAgIChvcHRpb25hbCwgc3RyaW5nKSBtaW1lIGZpbHRlciBhcyBzcGVjaWZpZWQgYnkgdGhlIGNsaWVudDogYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nIGNvbnRhaW5pbmcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbCBvciBwYXJ0aWFsIG1pbWUgdHlwZXMsIHdoZXJlIGEgJ3BhcnRpYWwnIG1pbWUgdHlwZXMgaXMgdGhlIHBhcnQgb2YgYSBtaW1lIHR5cGUgYmVmb3JlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBpbmNsdWRpbmcgdGhlIHNsYXNoLCBlLmcuICdpbWFnZS8nCisgKgorICogICAgICAgICAgICAgICAnbWltZV9maWx0ZXJzJyAgICAgICAgICAob3B0aW9uYWwsIGFycmF5IG9mIHN0cmluZ3MpIHRoZSBzZXQgb2YgYWxsb3dlZCBtaW1lIHR5cGVzLCBkZXJpdmVkIGZyb20gdGhlICdtaW1lX2ZpbHRlcicgc2V0dGluZy4KKyAqCisgKiAgICAgICAgICAgICAgICdwcmVsaW1pbmFyeV9qc29uJyAgICAgIChhcnJheSkgdGhlIEpTT04gZGF0YSBjb2xsZWN0ZWQgc28gZmFyOyB3aGVuIFsnc3RhdHVzJ109PTEsIHRoZW4gd2UncmUgcGVyZm9ybWluZyBhIHJlZ3VsYXIgJ2RldGFpbCcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLCB3aGVuIHRoZSBbJ3N0YXR1cyddPT0wLCB3ZSBhcmUgcGVyZm9ybWluZyBhIGRlZmVjdGl2ZSAnZGV0YWlsJyBvcGVyYXRpb24uCisgKgorICogICAgICAgICAgICAgICAndmFsaWRhdGlvbl9mYWlsdXJlJyAgICAoc3RyaW5nKSBOVUxMOiBubyB2YWxpZGF0aW9uIGVycm9yIGhhcyBiZWVuIGRldGVjdGVkIGJlZm9yZSB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQ7IG5vbi1OVUxMLCBlLmcuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub2ZpbGUiOiB0aGUgc3RyaW5nIHBhc3NlZCBhcyBtZXNzYWdlIHBhcmFtZXRlciBvZiB0aGUgRmlsZU1hbmFnZXJFeGNlcHRpb24sIHdoaWNoIHdpbGwgYmUgdGhyb3duCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIHRoZSBjYWxsYmFjayBoYXMgcmV0dXJuZWQuIChZb3UgbWF5IGFsdGVyIHRoZSAndmFsaWRhdGlvbl9mYWlsdXJlJyBzdHJpbmcgdmFsdWUgdG8gY2hhbmdlIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlZCBlcnJvciwgb3Igc2V0IGl0IHRvIE5VTEwgdG8gdHVybiBvZmYgdGhlIHZhbGlkYXRpb24gZXJyb3IgcmVwb3J0IGVudGlyZWx5IC0tIHdlIGFzc3VtZSB5b3UKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBoYXZlIGNvcnJlY3RlZCB0aGUgb3RoZXIgZmlsZWluZm9bXSBpdGVtcyBhcyB3ZWxsLCB3aGVuIHJlc2V0dGluZyB0aGUgdmFsaWRhdGlvbiBlcnJvci4KKyAqCisgKiAgICAgICAgIFRoZSBmcm9udGVuZC1zcGVjaWZpZWQgb3B0aW9ucy5wcm9wYWdhdGVEYXRhIGl0ZW1zIHdpbGwgYmUgYXZhaWxhYmxlIGFzICRfUE9TVFtdIGl0ZW1zLgorICoKKyAqCisgKgorICogRGV2ZWxvcGVyIE5vdGVzOgorICoKKyAqIC0gbWVtYmVyIGZ1bmN0aW9ucyB3aGljaCBoYXZlIGEgY29tbWVudGVkIG91dCAnc3RhdGljJyBrZXl3b3JkIGhhdmUgaXQgcmVtb3ZlZCBieSBkZXNpZ246IGl0IG1ha2VzIGZvciBlYXNpZXIgb3ZlcmxvYWRpbmcgdGhyb3VnaAorICogICBpbmhlcml0YW5jZSB0aGF0IHdheSBhbmQgbWVhbndoaWxlIHRoZXJlJ3Mgbm8gcHJlc3NpbmcgbmVlZCB0byBoYXZlIHRob3NlIChwdWJsaWMpIG1lbWJlciBmdW5jdGlvbnMgYWNjY2Vzc2libGUgZnJvbSB0aGUgb3V0c2lkZSB3b3JsZAorICogICB3aXRob3V0IGhhdmluZyBhbiBpbnN0YW5jZSBvZiB0aGUgRmlsZU1hbmFnZXIgY2xhc3MgaXRzZWxmIHJvdW5kIGF0IHRoZSBzYW1lIHRpbWUuCisgKi8KKworLy8gLS0tLS0tLS0tLS0gY29tcGF0aWJpbGl0eSBjaGVja3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraWYgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzUuMi4wJykgPCAwKQoreworCS8vIGRpZSBob3JyaWJseTogc2VydmVyIGRvZXMgbm90IG1hdGNoIG91ciByZXF1aXJlbWVudHMhCisJaGVhZGVyKCdIVFRQLzEuMCA1MDAgRmlsZU1hbmFnZXIgcmVxdWlyZXMgUEhQIDUuMi4wIG9yIGxhdGVyJywgdHJ1ZSwgNTAwKTsgLy8gSW50ZXJuYWwgc2VydmVyIGVycm9yCisJdGhyb3cgRXhjZXB0aW9uKCdGaWxlTWFuYWdlciByZXF1aXJlcyBQSFAgNS4yLjAgb3IgbGF0ZXInKTsgICAvLyB0aGlzIGV4Y2VwdGlvbiB3aWxsIG1vc3QgcHJvYmFibHkgbm90IGJlIGNhdWdodDsgdGhhdCdzIG91ciBpbnRlbnQhCit9CisKK2lmIChmdW5jdGlvbl9leGlzdHMoJ1VwbG9hZElzQXV0aGVudGljYXRlZCcpKQoreworCS8vIGRpZSBob3JyaWJseTogdXNlciBoYXMgbm90IHVwZ3JhZGVkIGhpcyBjYWxsYmFjayBob29rKHMpIQorCWhlYWRlcignSFRUUC8xLjAgNTAwIEZpbGVNYW5hZ2VyIGNhbGxiYWNrIGhhcyBub3QgYmVlbiB1cGdyYWRlZCEnLCB0cnVlLCA1MDApOyAvLyBJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IKKwl0aHJvdyBFeGNlcHRpb24oJ0ZpbGVNYW5hZ2VyIGNhbGxiYWNrIGhhcyBub3QgYmVlbiB1cGdyYWRlZCEnKTsgICAvLyB0aGlzIGV4Y2VwdGlvbiB3aWxsIG1vc3QgcHJvYmFibHkgbm90IGJlIGNhdWdodDsgdGhhdCdzIG91ciBpbnRlbnQhCit9CisKK2lmKCFkZWZpbmVkKCJJX0tOT1dfQUJPVVRfU1VIT1NJTiIpICYmIGluaV9nZXQoJ3N1aG9zaW4uc2Vzc2lvbi5jcnlwdHVhJykpCit7CisgIGhlYWRlcignSFRUUC8xLjAgNTAwIERldmVsb3BlciBtdXN0IHJlYWQgaHR0cHM6Ly9naXRodWIuY29tL3NsZWVtYW5qL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL3dpa2kvc3Vob3NpbicsIHRydWUsIDUwMCk7IC8vIEludGVybmFsIHNlcnZlciBlcnJvcgorICB0aHJvdyBFeGNlcHRpb24oJ3N1aG9zaW4uc2Vzc2lvbi5jcnlwdHVhOiBodHRwczovL2dpdGh1Yi5jb20vc2xlZW1hbmovbW9vdG9vbHMtZmlsZW1hbmFnZXIvd2lraS9zdWhvc2luIiB9Jyk7ICAgLy8gdGhpcyBleGNlcHRpb24gd2lsbCBtb3N0IHByb2JhYmx5IG5vdCBiZSBjYXVnaHQ7IHRoYXQncyBvdXIgaW50ZW50ISAgCisgIGV4aXQ7Cit9CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaWYgKCFkZWZpbmVkKCdERVZFTE9QTUVOVCcpKSBkZWZpbmUoJ0RFVkVMT1BNRU5UJywgMCk7ICAgLy8gbWFrZSBzdXJlIHRoaXMgI2RlZmluZSBpcyBhbHdheXMga25vd24gdG8gdXMKKworCisKK3JlcXVpcmVfb25jZShzdHJ0cihkaXJuYW1lKF9fRklMRV9fKSwgJ1xcJywgJy8nKSAuICcvVG9vbGluZy5waHAnKTsKK3JlcXVpcmVfb25jZShzdHJ0cihkaXJuYW1lKF9fRklMRV9fKSwgJ1xcJywgJy8nKSAuICcvSW1hZ2UuY2xhc3MucGhwJyk7CisKKworCisvLyB0aGUganBlZyBxdWFsaXR5IGZvciB0aGUgbGFyZ2VzdCB0aHVtYm5haWxzIChzbWFsbGVyIG9uZXMgYXJlIGF1dG9tYXRpY2FsbHkgZG9uZSBhdCBpbmNyZWFzaW5nbHkgaGlnaGVyIHF1YWxpdHkpCitkZWZpbmUoJ01URk1fVEhVTUJOQUlMX0pQRUdfUVVBTElUWScsIDgwKTsKKworLy8gdGhlIG51bWJlciBvZiBkaXJlY3RvcnkgbGV2ZWxzIGluIHRoZSB0aHVtYm5haWwgY2FjaGU7IHNldCB0byAyIHdoZW4geW91IGV4cGVjdCB0byBoYW5kbGUgaHVnZSBpbWFnZSBjb2xsZWN0aW9ucy4KKy8vCisvLyBOb3RlIHRoYXQgZWFjaCBkaXJlY3RvcnkgbGV2ZWwgZGlzdHJpYnV0ZXMgdGhlIGZpbGVzIGV2ZW5seSBhY3Jvc3MgMjU2IGRpcmVjdG9yaWVzOyBoZW5jZSwgeW91IG1heSBzZXQgdGhpcworLy8gbGV2ZWwgY291bnQgdG8gMiB3aGVuIHlvdSBleHBlY3QgdG8gaGFuZGxlIG1vcmUgdGhhbiAzMksgaW1hZ2VzIGluIHRvdGFsIC0tIGFzIGVhY2ggaW1hZ2Ugd2lsbCBoYXZlIHR3byB0aHVtYm5haWxzOgorLy8gYSA0OHB4IHNtYWxsIG9uZSBhbmQgYSAyNTBweCBsYXJnZSBvbmUuCitkZWZpbmUoJ01URk1fTlVNQkVSX09GX0RJUkxFVkVMU19GT1JfQ0FDSEUnLCAxKTsKKworLy8gbWluaW11bSBudW1iZXIgb2YgY2FjaGVkIGdldElEMyByZXN1bHRzOyBjYWNoZSBpcyBhdXRvbWF0aWNhbGx5IHBydW5lZAorZGVmaW5lKCdNVEZNX01JTl9HRVRJRDNfQ0FDSEVTSVpFJywgMTYpOworCisvLyBhbGxvdyBNVEZNIHRvIHVzZSBmaW5mb19vcGVuKCkgdG8gaGVscCB1cyBwcm9kdWNlIG1pbWUgdHlwZXMgZm9yIGZpbGVzLiBUaGlzIGlzIHNsb3dlciB0aGFuIHRoZSBiYXNpYyBmaWxlIGV4dGVuc2lvbiB0byBtaW1ldHlwZSBtYXBwaW5nCitkZWZpbmUoJ01URk1fVVNFX0ZJTkZPX09QRU4nLCBmYWxzZSk7CisKKworCisKKworCisvLyBmbGFncyBmb3IgY2xlYW5fSUQzaW5mb19yZXN1bHRzKCkKK2RlZmluZSgnTVRGTV9DTEVBTl9JRDNfU1RSSVBfRU1CRURERURfSU1BR0VTJywgICAgICAweDAwMDEpOworCisKKworCisKKworLyoqCisgKiBDYWNoZSBlbGVtZW50IGNsYXNzIGN1c3RvbS10YWlsb3JlZCBmb3IgdGhlIE1URk06IGluY2x1ZGVzIHRoZSBjb2RlIHRvIGNvbnN0cnVjdCBhIHVuaXF1ZQorICogKHRodW1ibmFpbCkgY2FjaGUgZmlsZW5hbWUgYW5kIGRlcml2ZSBzdWl0YWJsZSBjYWNoZSBmaWxlbmFtZXMgZnJvbSB0aGUgc2FtZSB0ZW1wbGF0ZSB3aXRoCisgKiBtaW5pbWFsIGVmZm9ydC4KKyAqCisgKiBNYWtlcyBzdXJlIHRoZSBnZW5lcmF0ZWQgKHRodW1icGF0aCkgdGVtcGxhdGUgaXMgdW5pcXVlIGZvciBlYWNoIHNvdXJjZSBmaWxlICgnJGxlZ2FsX3VybCcpLiBXZSBwcmV2ZW50CisgKiByZWR1Y2VkIHBlcmZvcm1hbmNlIGZvciBsYXJnZSBmaWxlIHNldHM6IGFsbCB0aHVtYm5haWxzL3RlbXBsYXRlcyBkZXJpdmVkIGZyb20gYW55IGZpbGVzIGluIHRoZSBlbnRpcmUKKyAqIEZpbGVNYW5hZ2VyLW1hbmFnZWQgZGlyZWN0b3J5IHRyZWUsIHJvb3RlZCBieSBvcHRpb25zWydkaXJlY3RvcnknXSwgY2FuIGJlY29tZSBhIGh1Z2UgY29sbGVjdGlvbiwKKyAqIHNvIHdlIGRpc3RyaWJ1dGUgdGhlbSBhY3Jvc3MgYSAodGh1bWJuYWlsL2NhY2hlKSBkaXJlY3RvcnkgdHJlZSwgd2hpY2ggaXMgY3JlYXRlZCBvbiBkZW1hbmQuCisgKgorICogVGhlIHRodW1ibmFpbHMgY2FjaGUgZGlyZWN0b3J5IHRyZWUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgTUQ1IG9mIHRoZSBmdWxsIHBhdGggdG8gdGhlIHNvdXJjZSBmaWxlICgkbGVnYWxfdXJsKSwKKyAqIHVzaW5nIHRoZSBmaXJzdCB0d28gY2hhcmFjdGVycyBvZiB0aGUgTUQ1LCBtYWtpbmcgZm9yIGEgc3BhbiBvZiAyNTYgKGRpcmVjdG9yaWVzKS4KKyAqCisgKiBOb3RlOiB3aGVuIHlvdSBleHBlY3QgdG8gbWFuYWdlIGEgcmVhbGx5IEhVR0UgZmlsZSBjb2xsZWN0aW9uIGZyb20gRk0sIHlvdSBtYXkgZGlhbCB1cCB0aGUKKyAqICAgICAgIE1URk1fTlVNQkVSX09GX0RJUkxFVkVMU19GT1JfQ0FDSEUgZGVmaW5lIHRvIDIgaGVyZS4KKyAqLworY2xhc3MgTVRGTUNhY2hlSXRlbQoreworCXByb3RlY3RlZCAkc3RvcmU7CisKKwlwcm90ZWN0ZWQgJGxlZ2FsX3VybDsKKwlwcm90ZWN0ZWQgJGZpbGU7CisJcHJvdGVjdGVkICRkaXJ0eTsKKwlwcm90ZWN0ZWQgJHBlcnNpc3RlbnRfZWRpdHM7CisJcHJvdGVjdGVkICRsb2FkZWQ7CisJcHJvdGVjdGVkICRmc3RhdDsKKworCXByb3RlY3RlZCAkY2FjaGVfZGlyOworCXByb3RlY3RlZCAkY2FjaGVfZGlyX21vZGU7ICAvLyBVTklYIGFjY2VzcyBiaXRzOiBVR0E6UldYCisJcHJvdGVjdGVkICRjYWNoZV9kaXJfdXJsOworCXByb3RlY3RlZCAkY2FjaGVfYmFzZTsgICAgICAvLyBjYWNoZSBmaWxlbmFtZSB0ZW1wbGF0ZSBiYXNlCisJcHJvdGVjdGVkICRjYWNoZV90bmV4dDsgICAgIC8vIHRodW1ibmFpbCBleHRlbnNpb24KKworCXByb3RlY3RlZCAkY2FjaGVfZmlsZTsKKworCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZm1fb2JqLCAkbGVnYWxfdXJsLCAkcHJlZmV0Y2ggPSBmYWxzZSwgJHBlcnNpc3RlbnRfZWRpdHMgPSB0cnVlKQorCXsKKwkJJHRoaXMtPmluaXQoJGZtX29iaiwgJGxlZ2FsX3VybCwgJHByZWZldGNoLCAkcGVyc2lzdGVudF9lZGl0cyk7CisJfQorCisJcHVibGljIGZ1bmN0aW9uIGluaXQoJGZtX29iaiwgJGxlZ2FsX3VybCwgJHByZWZldGNoID0gZmFsc2UsICRwZXJzaXN0ZW50X2VkaXRzKQorCXsKKwkJJHRoaXMtPmRpcnR5ID0gZmFsc2U7CisJCSR0aGlzLT5wZXJzaXN0ZW50X2VkaXRzID0gJHBlcnNpc3RlbnRfZWRpdHM7CisJCSR0aGlzLT5sb2FkZWQgPSBmYWxzZTsKKwkJJHRoaXMtPnN0b3JlID0gYXJyYXkoKTsKKworCQkkZm1vcHRzID0gJGZtX29iai0+Z2V0U2V0dGluZ3MoKTsKKworCQkkdGhpcy0+bGVnYWxfdXJsID0gJGxlZ2FsX3VybDsKKwkJJHRoaXMtPmZpbGUgPSAkZm1fb2JqLT5sZWdhbF91cmxfcGF0aDJmaWxlX3BhdGgoJGxlZ2FsX3VybCk7CisJCSR0aGlzLT5mc3RhdCA9IG51bGw7CisKKwkJJGZpID0gcGF0aGluZm8oJGxlZ2FsX3VybCk7CisJCWlmIChpc19kaXIoJHRoaXMtPmZpbGUpKQorCQl7CisJCQkkZmlsZW5hbWUgPSAkZmlbJ2Jhc2VuYW1lJ107CisJCQl1bnNldCgkZmlbJ2V4dGVuc2lvbiddKTsKKwkJCSRleHQgPSAnJzsKKwkJfQorCQllbHNlCisJCXsKKwkJCSRmaWxlbmFtZSA9ICRmaVsnZmlsZW5hbWUnXTsKKwkJCSRleHQgPSBzdHJ0b2xvd2VyKChpc3NldCgkZmlbJ2V4dGVuc2lvbiddKSAmJiBzdHJsZW4oJGZpWydleHRlbnNpb24nXSkgPiAwKSA/ICcuJyAuICRmaVsnZXh0ZW5zaW9uJ10gOiAnJyk7CisJCQlzd2l0Y2ggKCRleHQpCisJCQl7CisJCQljYXNlICcuZ2lmJzoKKwkJCWNhc2UgJy5wbmcnOgorCQkJY2FzZSAnLmpwZyc6CisJCQljYXNlICcuanBlZyc6CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgJy5tcDMnOgorCQkJCS8vIGRlZmF1bHQgdG8gSlBHLCBhcyBlbWJlZGRlZCBpbWFnZXMgZG9uJ3QgY29udGFpbiB0cmFuc3BhcmVuY3kgaW5mbzoKKwkJCQkkZXh0ID0gJy5qcGcnOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCS8vJGV4dCA9IHByZWdfcmVwbGFjZSgnL1teQS1aYS16MC05Ll0rLycsICdfJywgJGV4dCk7CisKKwkJCQkvLyBkZWZhdWx0IHRvIFBORywgYXMgaXQnbGwgaGFuZGxlIHRyYW5zcGFyYW5jeSBhbmQgZnVsbCBjb2xvciBib3RoOgorCQkJCSRleHQgPSAnLnBuZyc7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvLyBhcyB0aGUgY2FjaGUgZmlsZSBpcyBnZW5lcmF0ZWQsIGJ1dCBOT1QgZ3VhcmFudGVlZCBmcm9tIGEgc2FmZSBmaWxlcGF0aCAoRk0gbWF5IGJlIHZpc2l0aW5nIHVuc2FmZQorCQkvLyBpbWFnZSBmaWxlcyB3aGVuIHRoZXkgZXhpc3QgaW4gYSBwcmVsb2FkZWQgZGlyZWN0b3J5IHRyZWUhKSB3ZSBkbyB0aGUgZnVsbCBzYWZlLWZpbGVuYW1lIHRyYW5zZm9ybQorCQkvLyBvbiB0aGUgbmFtZSBpdHNlbGYuCisJCS8vIFRoZSBNRDUgaXMgdGFrZW4gZnJvbSB0aGUgdW50cmFtbWVsZWQgb3JpZ2luYWwsIHRob3VnaDoKKwkJJGRpcmNvZGUgPSBtZDUoJGxlZ2FsX3VybCk7CisKKwkJJGRpciA9ICcnOworCQlmb3IgKCRpID0gMDsgJGkgPCBNVEZNX05VTUJFUl9PRl9ESVJMRVZFTFNfRk9SX0NBQ0hFOyAkaSsrKQorCQl7CisJCQkkZGlyIC49IHN1YnN0cigkZGlyY29kZSwgMCwgMikgLiAnLyc7CisJCQkkZGlyY29kZSA9IHN1YnN0cigkZGlyY29kZSwgMik7CisJCX0KKworCQkkZm4gPSBzdWJzdHIoJGRpcmNvZGUsIDAsIDQpIC4gJ18nIC4gcHJlZ19yZXBsYWNlKCcvW15BLVphLXowLTldKy8nLCAnXycsICRmaWxlbmFtZSk7CisJCSRkaXJjb2RlID0gc3Vic3RyKCRkaXJjb2RlLCA0KTsKKwkJJGZuID0gc3Vic3RyKCRmbiAuICRkaXJjb2RlLCAwLCAzOCk7CisKKwkJJHRoaXMtPmNhY2hlX2Rpcl91cmwgPSAkZm1vcHRzWyd0aHVtYm5haWxQYXRoJ10gLiAkZGlyOworCQkkdGhpcy0+Y2FjaGVfZGlyID0gJGZtb3B0c1sndGh1bWJuYWlsQ2FjaGVEaXInXSAuICRkaXI7CisJCSR0aGlzLT5jYWNoZV9kaXJfbW9kZSA9ICRmbW9wdHNbJ2NobW9kJ107CisJCSR0aGlzLT5jYWNoZV9iYXNlID0gJGZuOworCQkkdGhpcy0+Y2FjaGVfdG5leHQgPSAkZXh0OworCisJCSRjYWNoZV91cmwgPSAkZm4gLiAnLW1ldGEubmZvJzsKKwkJJHRoaXMtPmNhY2hlX2ZpbGUgPSAkdGhpcy0+Y2FjaGVfZGlyIC4gJGNhY2hlX3VybDsKKworCQlpZiAoJHByZWZldGNoKQorCQl7CisJCQkkdGhpcy0+bG9hZCgpOworCQl9CisJfQorCisJcHVibGljIGZ1bmN0aW9uIGxvYWQoKQorCXsKKwkJaWYgKCEkdGhpcy0+bG9hZGVkKQorCQl7CisJCQkkdGhpcy0+bG9hZGVkID0gdHJ1ZTsgLy8gYWx3YXlzIG1hcmsgYXMgbG9hZGVkLCBldmVuIHdoZW4gdGhlIGxvYWQgZmFpbHMKKworCQkJaWYgKCFpc19hcnJheSgkdGhpcy0+ZnN0YXQpICYmIGZpbGVfZXhpc3RzKCR0aGlzLT5maWxlKSkKKwkJCXsKKwkJCQkkdGhpcy0+ZnN0YXQgPSBAc3RhdCgkdGhpcy0+ZmlsZSk7CisJCQl9CisJCQlpZiAoZmlsZV9leGlzdHMoJHRoaXMtPmNhY2hlX2ZpbGUpKQorCQkJeworCQkJCWluY2x1ZGUoJHRoaXMtPmNhY2hlX2ZpbGUpOyAgLy8gdW5zZXJpYWxpemUoKTsKKworCQkJCWlmICggICBpc3NldCgkc3RhdGRhdGEpICYmIGlzc2V0KCRkYXRhKSAmJiBpc19hcnJheSgkZGF0YSkgJiYgaXNfYXJyYXkoJHRoaXMtPmZzdGF0KSAmJiBpc19BcnJheSgkc3RhdGRhdGEpCisJCQkJCSYmICRzdGF0ZGF0YVsxMF0gPT0gJHRoaXMtPmZzdGF0WzEwXSAvLyBjdGltZQorCQkJCQkmJiAkc3RhdGRhdGFbOV0gID09ICR0aGlzLT5mc3RhdFs5XSAgIC8vIG10aW1lCisJCQkJCSYmICRzdGF0ZGF0YVs3XSAgPT0gJHRoaXMtPmZzdGF0WzddICAgLy8gc2l6ZQorCQkJCSAgICkKKwkJCQl7CisJCQkJCWlmICghREVWRUxPUE1FTlQpCisJCQkJCXsKKwkJCQkJCS8vIG1peCBkaXNrIGNhY2hlIGRhdGEgd2l0aCBpdGVtcyBhbHJlYWR5IGV4aXN0aW5nIGluIFJBTSBjYWNoZTogd2UgdXNlIGEgZGVsYXllZC1sb2FkIHNjaGVtZSB3aGljaCBuZWNlc3NpdGF0ZXMgdGhpcy4KKwkJCQkJCSR0aGlzLT5zdG9yZSA9IGFycmF5X21lcmdlKCRkYXRhLCAkdGhpcy0+c3RvcmUpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8vIG51a2UgZGlzayBjYWNoZSEKKwkJCQkJQHVubGluaygkdGhpcy0+Y2FjaGVfZmlsZSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcHVibGljIGZ1bmN0aW9uIGRlbGV0ZSgkZXZlcnlfdGluZ19iYWJ5ID0gZmFsc2UpCisJeworCQkkcnYgPSB0cnVlOworCQkkZGlyID0gJHRoaXMtPmNhY2hlX2RpcjsKKwkJJGRpcl9leGlzdHMgPSBmaWxlX2V4aXN0cygkZGlyKTsKKworCQkvLyBXaGF0IGRvIEkgZ2V0IGZvciB0ZW4gZG9sbGFycz8KKwkJaWYgKCRldmVyeV90aW5nX2JhYnkpCisJCXsKKwkJCWlmICgkZGlyX2V4aXN0cykKKwkJCXsKKwkJCQkkZGlyX2FuZF9tYXNrID0gJGRpciAuICR0aGlzLT5jYWNoZV9iYXNlIC4gJyonOworCQkJCSRjb2xsID0gc2FmZV9nbG9iKCRkaXJfYW5kX21hc2ssIEdMT0JfTk9ET1RTIHwgR0xPQl9OT1NPUlQpOworCisJCQkJaWYgKCRjb2xsICE9PSBmYWxzZSkKKwkJCQl7CisJCQkJCWZvcmVhY2goJGNvbGxbJ2ZpbGVzJ10gYXMgJGZpbGVuYW1lKQorCQkJCQl7CisJCQkJCQkkZmlsZSA9ICRkaXIgLiAkZmlsZW5hbWU7CisJCQkJCQkkcnYgJj0gQHVubGluaygkZmlsZSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoZmlsZV9leGlzdHMoJHRoaXMtPmNhY2hlX2ZpbGUpKQorCQl7CisJCQkvLyBudWtlIGNhY2hlIQorCQkJJHJ2ICY9IEB1bmxpbmsoJHRoaXMtPmNhY2hlX2ZpbGUpOworCQl9CisKKwkJLy8gYXMgdGhlIHRodW1ibmFpbCBzdWJkaXJlY3RvcnkgbWF5IG5vdyBiZSBlbnRpcmVseSBlbXB0eSwgdHJ5IHRvIHJlbW92ZSBpdCBhcyB3ZWxsLAorCQkvLyBidXQgZG8gTk9UIHlhY2sgd2hlbiB3ZSBkb24ndCBzdWNjZWVkOiB0aGVyZSBtYXkgYmUgb3RoZXIgdGh1bWJuYWlscywgZXRjLiBpbiB0aGVyZSBzdGlsbCEKKwkJaWYgKCRkaXJfZXhpc3RzKQorCQl7CisJCQlmb3IgKCRpID0gMDsgJGkgPCBNVEZNX05VTUJFUl9PRl9ESVJMRVZFTFNfRk9SX0NBQ0hFOyAkaSsrKQorCQkJeworCQkJCUBybWRpcigkZGlyKTsKKwkJCQkkZGlyID0gZGlybmFtZSgkZGlyKTsKKwkJCX0KKwkJfQorCisJCS8vIGFsc28gY2xlYXIgdGhlIGRhdGEgY2FjaGVkIGluIFJBTToKKwkJJHRoaXMtPmRpcnR5ID0gZmFsc2U7CisJCSR0aGlzLT5sb2FkZWQgPSB0cnVlOyAgLy8gd2Uga25vdyB0aGUgY2FjaGUgZmlsZSBkb2Vzbid0IGV4aXN0IGFueSBsb25nZXIsIHNvIGRvbid0IGJvdGhlciB0cnlpbmcgdG8gbG9hZCBpdCBhZ2FpbiBsYXRlciBvbiEKKwkJJHRoaXMtPnN0b3JlID0gYXJyYXkoKTsKKworCQlyZXR1cm4gJHJ2OworCX0KKworCXB1YmxpYyBmdW5jdGlvbiBfX2Rlc3RydWN0KCkKKwl7CisJCWlmICgkdGhpcy0+ZGlydHkgJiYgJHRoaXMtPnBlcnNpc3RlbnRfZWRpdHMpCisJCXsKKwkJCS8vIHN0b3JlIGRhdGEgdG8gcGVyc2lzdGVudCBzdG9yYWdlOgorCQkJaWYgKCEkdGhpcy0+bWtDYWNoZURpcigpICYmICEkdGhpcy0+bG9hZGVkKQorCQkJeworCQkJCS8vIGZldGNoIGZyb20gZGlzayBiZWZvcmUgc2F2aW5nIGluIG9yZGVyIHRvIGVuc3VyZSBSQU0gY2FjaGUgaXMgbWl4ZWQgd2l0aCBfZXhpc3RpbmdfIF92YWxpZF8gZGlzayBjYWNoZSAoUkFNIHdpbnMgb24gaW5kaXZpZHVhbCBpdGVtcykuCisJCQkJJHRoaXMtPmxvYWQoKTsKKwkJCX0KKworCQkJaWYgKCFpc19hcnJheSgkdGhpcy0+ZnN0YXQpICYmIGZpbGVfZXhpc3RzKCR0aGlzLT5maWxlKSkKKwkJCXsKKwkJCQkkdGhpcy0+ZnN0YXQgPSBAc3RhdCgkdGhpcy0+ZmlsZSk7CisJCQl9CisKKwkJCSRkYXRhID0gJzw/cGhwCisKKy8vIGxlZ2FsIFVSTDogJyAuICR0aGlzLT5sZWdhbF91cmwgLiAnCisKKyRzdGF0ZGF0YSA9ICcgLiB2YXJfZXhwb3J0KCR0aGlzLT5mc3RhdCwgdHJ1ZSkgLiAnOworCiskZGF0YSA9ICcgLiB2YXJfZXhwb3J0KCR0aGlzLT5zdG9yZSwgdHJ1ZSkgLiAnOycgLiBQSFBfRU9MOworCisJCQlAZmlsZV9wdXRfY29udGVudHMoJHRoaXMtPmNhY2hlX2ZpbGUsICRkYXRhKTsKKwkJfQorCX0KKworCS8qCisJICogQHBhcmFtIGJvb2xlYW4gJHBlcnNpc3RlbnQgICAgKGRlZmF1bHQ6IFRSVUUpIFRSVUUgd2hlbiB3ZSBzaG91bGQgYWxzbyBjaGVjayB0aGUgcGVyc2lzdGVudCBjYWNoZSBzdG9yYWdlIGZvciB0aGlzIGl0ZW0va2V5CisJICovCisJcHVibGljIGZ1bmN0aW9uIGZldGNoKCRrZXksICRwZXJzaXN0ZW50ID0gdHJ1ZSkKKwl7CisJCWlmIChpc3NldCgkdGhpcy0+c3RvcmVbJGtleV0pKQorCQl7CisJCQlyZXR1cm4gJHRoaXMtPnN0b3JlWyRrZXldOworCQl9CisJCWVsc2UgaWYgKCRwZXJzaXN0ZW50ICYmICEkdGhpcy0+bG9hZGVkKQorCQl7CisJCQkvLyBvbmx5IGZldGNoIGZyb20gZGlzayB3aGVuIHdlIGFzayBmb3IgaXRlbXMgd2hpY2ggaGF2ZW4ndCBiZWVuIHN0b3JlZCB5ZXQuCisJCQkkdGhpcy0+bG9hZCgpOworCQkJaWYgKGlzc2V0KCR0aGlzLT5zdG9yZVska2V5XSkpCisJCQl7CisJCQkJcmV0dXJuICR0aGlzLT5zdG9yZVska2V5XTsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qCisJICogQHBhcmFtIGJvb2xlYW4gJHBlcnNpc3RlbnQgICAgKGRlZmF1bHQ6IFRSVUUpIFRSVUUgd2hlbiB3ZSBzaG91bGQgYWxzbyBzdG9yZSB0aGlzIGl0ZW0va2V5IGluIHRoZSBwZXJzaXN0ZW50IGNhY2hlIHN0b3JhZ2UKKwkgKi8KKwlwdWJsaWMgZnVuY3Rpb24gc3RvcmUoJGtleSwgJHZhbHVlLCAkcGVyc2lzdGVudCA9IHRydWUpCisJeworCQlpZiAoaXNzZXQoJHRoaXMtPnN0b3JlWyRrZXldKSkKKwkJeworCQkJJHBlcnNpc3RlbnQgJj0gKCR0aGlzLT5zdG9yZVska2V5XSAhPT0gJHZhbHVlKTsgLy8gb25seSBtYXJrIGNhY2hlIGFzIGRpcnR5IHdoZW4gd2UgYWN0dWxseSBDSEFOR0UgdGhlIHZhbHVlIHN0b3JlZCBpbiBoZXJlIQorCQl9CisJCSR0aGlzLT5kaXJ0eSB8PSAoJHBlcnNpc3RlbnQgJiYgJHRoaXMtPnBlcnNpc3RlbnRfZWRpdHMpOworCQkkdGhpcy0+c3RvcmVbJGtleV0gPSAkdmFsdWU7CisJfQorCisKKwlwdWJsaWMgZnVuY3Rpb24gZ2V0VGh1bWJQYXRoKCRkaW1lbnNpb25zKQorCXsKKwkJYXNzZXJ0KCFlbXB0eSgkZGltZW5zaW9ucykpOworCQlyZXR1cm4gJHRoaXMtPmNhY2hlX2RpciAuICR0aGlzLT5jYWNoZV9iYXNlIC4gJy0nIC4gJGRpbWVuc2lvbnMgLiAkdGhpcy0+Y2FjaGVfdG5leHQ7CisJfQorCisJcHVibGljIGZ1bmN0aW9uIGdldFRodW1iVVJMKCRkaW1lbnNpb25zKQorCXsKKwkJYXNzZXJ0KCFlbXB0eSgkZGltZW5zaW9ucykpOworCQlyZXR1cm4gJHRoaXMtPmNhY2hlX2Rpcl91cmwgLiAkdGhpcy0+Y2FjaGVfYmFzZSAuICctJyAuICRkaW1lbnNpb25zIC4gJHRoaXMtPmNhY2hlX3RuZXh0OworCX0KKworCXB1YmxpYyBmdW5jdGlvbiBta0NhY2hlRGlyKCkKKwl7CisJCWlmICghaXNfZGlyKCR0aGlzLT5jYWNoZV9kaXIpKQorCQl7CisJCQlAbWtkaXIoJHRoaXMtPmNhY2hlX2RpciwgJHRoaXMtPmNhY2hlX2Rpcl9tb2RlLCB0cnVlKTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlwdWJsaWMgZnVuY3Rpb24gZ2V0TWltZVR5cGUoKQorCXsKKwkJaWYgKCFlbXB0eSgkdGhpcy0+c3RvcmVbJ21pbWVfdHlwZSddKSkKKwkJeworCQkJcmV0dXJuICR0aGlzLT5zdG9yZVsnbWltZV90eXBlJ107CisJCX0KKwkJLy8kbWltZSA9ICRmbV9vYmotPmdldE1pbWVGcm9tRXh0KCRmaWxlKTsKKwkJcmV0dXJuIG51bGw7CisJfQorfQorCisKKworCisKKworCitjbGFzcyBNVEZNQ2FjaGUKK3sKKwlwcm90ZWN0ZWQgJHN0b3JlOyAgICAgICAgICAgLy8gYXNzb2MuIGFycmF5OiBzdG9yZXMgY2FjaGVkIGRhdGEKKwlwcm90ZWN0ZWQgJHN0b3JlX3RzOyAgICAgICAgLy8gYXNzb2MuIGFycmF5OiBzdG9yZXMgY29ycmVzcG9uZGluZyAnY2FjaGUgdGltZXN0YW1wcycgZm9yIHVzZSBieSB0aGUgTFJVIGFsZ29yaXRobQorCXByb3RlY3RlZCAkc3RvcmVfbHJ1X3RzOyAgICAvLyBpbnRlZ2VyOiBjdXJyZW50ICdjYWNoZSB0aW1lc3RhbXAnCisJcHJvdGVjdGVkICRtaW5fY2FjaGVfc2l6ZTsgIC8vIGludGVnZXI6IG1pbmltdW0gY2FjaGUgc2l6ZSBsaW1pdCAobWF4aW11bSBpcyBhIHN0YXRpc3RpY2FsIGRlcml2YXRlIG9mIHRoaXMgb25lLCBhYm91dCB0d2ljZSBhcyBsYXJnZSkKKworCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbWluX2NhY2hlX3NpemUpCisJeworCQkkdGhpcy0+c3RvcmUgPSBhcnJheSgpOworCQkkdGhpcy0+c3RvcmVfdHMgPSBhcnJheSgpOworCQkvLyBzdG9yZV9scnVfdHMgc3RvcmVzIGEgJ3RpbWVzdGFtcCcgY291bnRlciB0byB0cmFjayBMUlU6ICd0aW1lc3RhbXBzJyBvbGRlciB0aGFuIHRocmVzaG9sZCBhcmUgZGlzY2FyZGVkIHdoZW4gY2FjaGUgaXMgZnVsbAorCQkkdGhpcy0+c3RvcmVfbHJ1X3RzID0gMDsKKwkJJHRoaXMtPm1pbl9jYWNoZV9zaXplID0gJG1pbl9jYWNoZV9zaXplOworCX0KKworCS8qCisJICogUmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZSBjYWNoZSBzbG90LiBXaGVuIHRoZSBjYWNoZSBzbG90IGRpZCBub3QgZXhpc3QgYmVmb3JlLCBpdCB3aWxsIGJlIGNyZWF0ZWQsIGFuZAorCSAqIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlIHNsb3Qgd2lsbCBiZSBOVUxMLgorCSAqCisJICogWW91IGNhbiBzdG9yZSBhbnkgYXJiaXRyYXJ5IGRhdGEgaW4gYSBjYWNoZSBzbG90OiBpdCBkb2Vzbid0IGhhdmUgdG8gYmUgYSBNVEZNQ2FjaGVJdGVtIGluc3RhbmNlLgorCSAqLworCXB1YmxpYyBmdW5jdGlvbiAmcGljaygka2V5LCAkZm1fb2JqID0gbnVsbCwgJGNyZWF0ZV9pZl9ub3RfZXhpc3QgPSB0cnVlKQorCXsKKwkJYXNzZXJ0KCFlbXB0eSgka2V5KSk7CisKKwkJJGFnZV9saW1pdCA9ICR0aGlzLT5zdG9yZV9scnVfdHMgLSAkdGhpcy0+bWluX2NhY2hlX3NpemU7CisKKwkJaWYgKGlzc2V0KCR0aGlzLT5zdG9yZVska2V5XSkpCisJCXsKKwkJCS8vIG1hcmsgYXMgTFJVIGVudHJ5OyBvbmx5IHVwZGF0ZSB0aGUgdGltZXN0YW1wIHdoZW4gaXQncyByYXRoZXIgb2xkIChhZ2UvMikgdG8gcHJldmVudAorCQkJLy8gY2FjaGUgZmx1c2hpbmcgZHVlIHRvIGhhbW1lcmluZyBvZiBhIGZldyBlbnRyaWVzOgorCQkJaWYgKCR0aGlzLT5zdG9yZV90c1ska2V5XSA8ICRhZ2VfbGltaXQgKyAkdGhpcy0+bWluX2NhY2hlX3NpemUgLyAyKQorCQkJeworCQkJCSR0aGlzLT5zdG9yZV90c1ska2V5XSA9ICR0aGlzLT5zdG9yZV9scnVfdHMrKzsKKwkJCX0KKwkJfQorCQllbHNlIGlmICgkY3JlYXRlX2lmX25vdF9leGlzdCkKKwkJeworCQkJLy8gb25seSBzdGFydCBwcnVuaW5nIHdoZW4gd2UgcnVuIHRoZSByaXNrIG9mIG92ZXJmbG93LiBIZXVyaXN0aWM6IHdoZW4gd2UncmUgYXQgNTAlIGZpbGwgcmF0ZSwgd2UgY2FuIGV4cGVjdCBtb3JlIHJlcXVlc3RzIHRvIGNvbWUgaW4sIHNvIHdlIHN0YXJ0IHBydW5pbmcgYWxyZWFkeQorCQkJaWYgKGNvdW50KCR0aGlzLT5zdG9yZV90cykgPj0gJHRoaXMtPm1pbl9jYWNoZV9zaXplIC8gMikKKwkJCXsKKwkJCQkvKgorCQkJCSAqIENsZWFudXAvY2FjaGUgc2l6ZSByZXN0cmljdGlvbiBhbGdvcml0aG06CisJCQkJICoKKwkJCQkgKiBSYW5kb21seSBwcm9iZSB0aGUgY2FjaGUgYW5kIGNoZWNrIHdoZXRoZXIgdGhlIHByb2JlIGhhcyBhICd0aW1lc3RhbXAnIG9sZGVyIHRoYW4gdGhlIGNvbmZpZ3VyZWQKKwkJCQkgKiBtaW5pbXVtIHJlcXVpcmVkIGxpZmV0aW1lLiBXaGVuIHRoZSBwcm9iZSBpcyBvbGRlciwgaXQgaXMgZGlzY2FyZGVkIGZyb20gdGhlIGNhY2hlLgorCQkJCSAqCisJCQkJICogQXMgdGhlIHByb2JlIGlzIGFzc3VtZWQgdG8gYmUgcGVyZmVjdGx5IHJhbmRvbSwgZnVydGhlciBhc3N1bWluZyB3ZSd2ZSBnb3QgYSBjYWNoZSBzaXplIG9mIE4sCisJCQkJICogdGhlbiB0aGUgY2hhbmNlIHdlIHBpY2sgYSBwcm9iZSBvbGRlciB0aGVuIGFnZSBBIGlzIChOIC0gQSkgLyBOICAtLSBwaWNraW5nIGFueSBhZ2UgWCBoYXMgYQorCQkJCSAqIGNoYW5jZSBvZiAxL04gYXMgcmFuZG9tIGltcGxpZXMgZmxhdCBkaXN0cmlidXRpb24uIEhpdHRpbmcgYW55IG9mIHRoZSBtb3N0IHJlY2VudCBBIGVudHJpZXMKKwkJCQkgKiBpcyBBICogMS9OLCBoZW5jZSBwaWNraW5nIGFueSBvbGRlciBpdGVtIGlzIDEgLSBBL04gPT0gKE4gLSBBKSAvIE4KKwkJCQkgKgorCQkJCSAqIFRoaXMgbWVhbnMgdGhlIGdyb3d0aCBvZiB0aGUgY2FjaGUgYmV5b25kIHRoZSBnaXZlbiBhZ2UgbGltaXQgQSBpcyBhIGxvZ2FyaXRobWljIGN1cnZlLCBidXQKKwkJCQkgKiB3ZSBsaWtlIHRvIGhhdmUgYSBndWFyYW50ZWVkIHVwcGVyIGxpbWl0IHNpZ25pZmljYW50bHkgYmVsb3cgTiA9ICtJbmYsIHNvIHdlIHByb2JlIHRoZSBjYWNoZQorCQkJCSAqIFRXSUNFIGZvciBlYWNoIGFkZGl0aW9uOiBnaXZlbiBhIGNhY2hlIHNpemUgb2YgMk4sIG9uZSBvZiB0aGVzZSBwcm9iZXMgc2hvdWxkLCBvbiBhdmVyYWdlLAorCQkJCSAqIGJlIHN1Y2Nlc3NmdWwsIHRodXMgcmVtb3Zpbmcgb25lIGNhY2hlIGVudHJ5IG9uIGF2ZXJhZ2UgZm9yIGEgY2FjaGUgc2l6ZSBvZiAyTi4gQXMgd2Ugb25seQorCQkJCSAqIGFkZCAxIGl0ZW0gYXQgdGhlIHNhbWUgdGltZSwgdGhlIHN0YXRpc3RpY2FsbHkgZXhwZWN0ZWQgYm91bmQgb2YgdGhlIGNhY2hlIHdpbGwgYmUgMk4uCisJCQkJICogQXMgY2hhbmNlcyBpbmNyZWFzZSBmb3IgYm90aCBwcm9iZXMgdG8gYmUgc3VjY2Vzc2Z1bCB3aGVuIGNhY2hlIHNpemUgaW5jcmVhc2VzLCB0aGUgcmlzaworCQkJCSAqIG9mIGEgKHZlcnkpIGxhcmdlIGNhY2hlIHNpemUgYXQgYW55IHBvaW50IGluIHRpbWUgaXMgZHdpbmRpbmdseSBzbWFsbCwgd2hpbGUgY29zdCBpcyBjb25zdGFudAorCQkJCSAqIHBlciBjYWNoZSB0cmFuc2FjdGlvbiAoaW5zZXJ0ICsgZHVhbCBwcm9iZSkuCisJCQkJICoKKwkJCQkgKiBUaGlzIHNjaGVtZSBpcyBleHBlY3RlZCB0byBiZSBmYXN0ZXIgKHRoYW5rcyB0byBsb2cgZ3Jvd3RoIGN1cnZlIGFuZCBsaW5lYXIgaW5zZXJ0L3BydW5lIGNvc3RzKQorCQkJCSAqIHRoYW4gdGhlIHVzdWFsIHdoZXJlIG9uZSBrZWVwcyBtZXRpY3Vsb3VzIHRyYWNrIG9mIHRoZSBlbnRyaWVzIGFuZCB0aGVpciBhZ2UgYW5kIGVudHJpZXMgYXJlCisJCQkJICogZGlzY2FyZGVkIGluIG9yZGVyLCBvbGRlc3QgZmlyc3QuCisJCQkJICovCisJCQkJJHByb2JlX2luZGV4ID0gYXJyYXlfcmFuZCgkdGhpcy0+c3RvcmVfdHMpOworCQkJCWlmICgkdGhpcy0+c3RvcmVfdHNbJHByb2JlX2luZGV4XSA8ICRhZ2VfbGltaXQpCisJCQkJeworCQkJCQkvLyBkaXNjYXJkIGFudGlxdWF0ZWQgZW50cnk6CisJCQkJCXVuc2V0KCR0aGlzLT5zdG9yZV90c1skcHJvYmVfaW5kZXhdKTsKKwkJCQkJdW5zZXQoJHRoaXMtPnN0b3JlWyRwcm9iZV9pbmRleF0pOworCQkJCX0KKwkJCQkkcHJvYmVfaW5kZXggPSBhcnJheV9yYW5kKCR0aGlzLT5zdG9yZV90cyk7CisJCQkJaWYgKCR0aGlzLT5zdG9yZV90c1skcHJvYmVfaW5kZXhdIDwgJGFnZV9saW1pdCkKKwkJCQl7CisJCQkJCS8vIGRpc2NhcmQgYW50aXF1YXRlZCBlbnRyeToKKwkJCQkJdW5zZXQoJHRoaXMtPnN0b3JlX3RzWyRwcm9iZV9pbmRleF0pOworCQkJCQl1bnNldCgkdGhpcy0+c3RvcmVbJHByb2JlX2luZGV4XSk7CisJCQkJfQorCQkJfQorCisJCQkvKgorCQkJICogYWRkIHRoaXMgc2xvdCAoZW1wdHkgZm9yIG5vdykgdG8gdGhlIGNhY2hlLiBPbmx5IGRvIHRoaXMgQUZURVIgdGhlIHBydW5pbmcsIHNvIGl0IHdvbid0IHJpc2sgYmVpbmcKKwkJCSAqIHBpY2tlZCBieSB0aGUgcmFuZG9tIHByb2Nlc3MgaW4gdGhlcmUuIFdlIF9uZWVkXyB0aGlzIG9uZSByaWdodCBub3cuIDstKQorCQkJICovCisJCQkkdGhpcy0+c3RvcmVbJGtleV0gPSAoIWVtcHR5KCRmbV9vYmopID8gbmV3IE1URk1DYWNoZUl0ZW0oJGZtX29iaiwgJGtleSkgOiBudWxsKTsKKwkJCSR0aGlzLT5zdG9yZV90c1ska2V5XSA9ICR0aGlzLT5zdG9yZV9scnVfdHMrKzsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIGRvIG5vdCBjbHV0dGVyIHRoZSBjYWNoZTsgYWxsIHdlJ3JlIHByb2JhYmx5IGFmdGVyIHRoaXMgdGltZSBpcyB0aGUgYXNzaXN0YW5jZSBvZiBhIE1URk1DYWNoZUl0ZW06CisJCQkvLyBwcm92aWRlIGEgZHVtbXkgY2FjaGUgZW50cnksIG51bGxlZCBhbmQgYWxsOyB3ZSB3b24ndCBiZSBzYXZpbmcgdGhlIHN0b3JlZCBkYXRhLCBpZiBhbnksIGFueWhvdy4KKwkJCWlmIChpc3NldCgkdGhpcy0+c3RvcmVbJyEnXSkgJiYgIWVtcHR5KCRmbV9vYmopKQorCQkJeworCQkJCSR0aGlzLT5zdG9yZVsnISddLT5pbml0KCRmbV9vYmosICRrZXksIGZhbHNlLCBmYWxzZSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJJHRoaXMtPnN0b3JlWychJ10gPSAoIWVtcHR5KCRmbV9vYmopID8gbmV3IE1URk1DYWNoZUl0ZW0oJGZtX29iaiwgJGtleSwgZmFsc2UsIGZhbHNlKSA6IG51bGwpOworCQkJfQorCQkJJHRoaXMtPnN0b3JlX3RzWychJ10gPSAwOworCQkJJGtleSA9ICchJzsKKwkJfQorCisJCXJldHVybiAkdGhpcy0+c3RvcmVbJGtleV07CisJfQorfQorCisKKworCisKKworCitjbGFzcyBGaWxlTWFuYWdlcgoreworCXByb3RlY3RlZCAkb3B0aW9uczsKKwlwcm90ZWN0ZWQgJGdldGlkMzsKKwlwcm90ZWN0ZWQgJGdldGlkM19jYWNoZTsKKwlwcm90ZWN0ZWQgJGljb25fY2FjaGU7ICAgICAgICAgICAgICAvLyBjYWNoZSB0aGUgaWNvbiBwYXRocyBwZXIgc2l6ZSAobGFyZ2Uvc21hbGwpIGFuZCBmaWxlIGV4dGVuc2lvbgorCisJcHJvdGVjdGVkICR0aHVtYm5haWxDYWNoZURpcjsKKwlwcm90ZWN0ZWQgJHRodW1ibmFpbENhY2hlUGFyZW50RGlyOyAgLy8gYXNzaXN0YW50IHByZWNhbGN1bGF0ZWQgdmFsdWUgZm9yIHNjYW5kaXIvdmlldworCXByb3RlY3RlZCAkbWFuYWdlZEJhc2VEaXI7ICAgICAgICAgICAvLyBwcmVjYWxjdWxhdGVkIGZpbGVzeXN0ZW0gcGF0aCBlcXYuIG9mIG9wdGlvbnNbJ2RpcmVjdG9yeSddCisKKwlwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG9wdGlvbnMpCisJeworCQkkdGhpcy0+b3B0aW9ucyA9IGFycmF5X21lcmdlKGFycmF5KAorCQkJLyoKKwkJCSAqIE5vdGUgdGhhdCBhbGwgZGVmYXVsdCBwYXRocyBhcyBsaXN0ZWQgYmVsb3cgYXJlIHRyYW5zZm9ybWVkIHRvIERvY3VtZW50Um9vdC1iYXNlZCBwYXRocworCQkJICogdGhyb3VnaCB0aGUgZ2V0UmVhbFBhdGgoKSBpbnZvY2F0aW9ucyBmdXJ0aGVyIGJlbG93OgorCQkJICovCisJCQknZGlyZWN0b3J5JyA9PiBudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHJvb3Qgb2YgdGhlICdsZWdhbCBVUkknIGRpcmVjdG9yeSB0cmVlLCB0byBiZSBtYW5hZ2VkIGJ5IE1URk0uIE1VU1QgYmUgaW4gdGhlIERvY3VtZW50Um9vdCB0cmVlLgorCQkJJ2Fzc2V0QmFzZVBhdGgnID0+IG51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heSBzaXQgb3V0c2lkZSBvcHRpb25zWydkaXJlY3RvcnknXSBidXQgTVVTVCBiZSBpbiB0aGUgRG9jdW1lbnRSb290IHRyZWUKKwkJCSd0aHVtYm5haWxQYXRoJyA9PiBudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXkgc2l0IG91dHNpZGUgb3B0aW9uc1snZGlyZWN0b3J5J10gYnV0IE1VU1QgYmUgaW4gdGhlIERvY3VtZW50Um9vdCB0cmVlCisJCQkndGh1bWJTbWFsbFNpemUnID0+IDQ4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlZCBmb3IgdGh1bWI0OCBjcmVhdGlvbgorCQkJJ3RodW1iQmlnU2l6ZScgPT4gMjUwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZWQgZm9yIHRodW1iMjUwIGNyZWF0aW9uCisJCQknbWltZVR5cGVzUGF0aCcgPT4gc3RydHIoZGlybmFtZShfX0ZJTEVfXyksICdcXCcsICcvJykgLiAnL01pbWVUeXBlcy5pbmknLCAgLy8gYW4gYWJzb2x1dGUgZmlsZXN5c3RlbSBwYXRoIGFueXdoZXJlOyB3aGVuIHJlbGF0aXZlLCBpdCB3aWxsIGJlIGFzc3VtZWQgdG8gYmUgYWdhaW5zdCBvcHRpb25zWydSZXF1ZXN0U2NyaXB0VVJJJ10KKwkJCSdkb2N1bWVudFJvb3RQYXRoJyA9PiBudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbiBhYnNvbHV0ZSBmaWxlc3lzdGVtIHBhdGggcG9pbnRpbmcgYXQgVVJJIHBhdGggJy8nLiBEZWZhdWx0OiBTRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXQorCQkJJ1JlcXVlc3RTY3JpcHRVUkknID0+IG51bGwsCQkJCQkJCQkJCQkJICAgIC8vIGRlZmF1bHQgaXMgJF9TRVJWRVJbJ1NDUklQVF9OQU1FJ10KKwkJCSdkYXRlRm9ybWF0JyA9PiAnaiBNIFkgLSBIOmknLAorCQkJJ21heFVwbG9hZFNpemUnID0+IDI2MDAgKiAyNjAwICogMywKKwkJCS8vICdtYXhJbWFnZVNpemUnID0+IDk5OTk5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPQlNPTEVURUQsIHJlcGxhY2VkIGJ5ICdzdWdnZXN0ZWRNYXhJbWFnZURpbWVuc2lvbicKKwkJCSdtYXhJbWFnZURpbWVuc2lvbicgPT4gYXJyYXkoJ3dpZHRoJyA9PiAxMDI0LCAnaGVpZ2h0JyA9PiA3NjgpLCAgICAgICAgICAgICAvLyBBbGxvdyB0byBzcGVjaWZ5IHRoZSAiUmVzaXplIExhcmdlIEltYWdlcyIgdG9sZXJhbmNlIGxldmVsLgorCQkJJ3VwbG9hZCcgPT4gZmFsc2UsCisJCQknZGVzdHJveScgPT4gZmFsc2UsCisJCQknY3JlYXRlJyA9PiBmYWxzZSwKKwkJCSdtb3ZlJyA9PiBmYWxzZSwKKwkJCSdkb3dubG9hZCcgPT4gZmFsc2UsCisJCQkvKiBeXl4gdGhpcyBsYXN0IG9uZSBpcyBlYXNpbHkgY2lyY3VtbmF2aWdhdGVkIGlmIGl0J3MgYWJvdXQgaW1hZ2VzOiB3aGVuIHlvdSBjYW4gdmlldyAnZW0sIHlvdSBjYW4gJ2Rvd25sb2FkJyB0aGVtIGFueXdheS4KKwkJCSAqICAgICBIb3dldmVyLCBmb3Igb3RoZXIgbWltZSB0eXBlcyB3aGljaCBhcmUgbm90IHByZXZpZXdhYmxlIC8gdmlld2FibGUgJ2luIHRoZWlyIGZ1bGwgYmx1bnRhbCBudWdpdHknIDstKSAsIHRoaXMgd2lsbAorCQkJICogICAgIGJlIGEgc3Ryb25nIGRldGVyZW50LgorCQkJICoKKwkJCSAqICAgICBUaGluayBTcHJpbmdlciBWZXJsYWcgYW5kIFBERnMsIGZvciBpbnN0YW5jZS4gWW91IGNhbiBoYXZlICdlbSwgYnV0IG9ubHkgL2FmdGVyLyB5b3UndmUgLi4uCisJCQkgKi8KKwkJCSdhbGxvd0V4dENoYW5nZScgPT4gZmFsc2UsCisJCQknc2FmZScgPT4gdHJ1ZSwKKwkJCSdmaWx0ZXInID0+IG51bGwsCisJCQknY2htb2QnID0+IDA3NzcsCisJCQknVmlld0lzQXV0aG9yaXplZF9jYicgPT4gbnVsbCwKKwkJCSdEZXRhaWxJc0F1dGhvcml6ZWRfY2InID0+IG51bGwsCisJCQknVXBsb2FkSXNBdXRob3JpemVkX2NiJyA9PiBudWxsLAorCQkJJ0Rvd25sb2FkSXNBdXRob3JpemVkX2NiJyA9PiBudWxsLAorCQkJJ0NyZWF0ZUlzQXV0aG9yaXplZF9jYicgPT4gbnVsbCwKKwkJCSdEZXN0cm95SXNBdXRob3JpemVkX2NiJyA9PiBudWxsLAorCQkJJ01vdmVJc0F1dGhvcml6ZWRfY2InID0+IG51bGwsCisJCQkKKwkJCSdVcGxvYWRJc0NvbXBsZXRlX2NiJyA9PiBudWxsLAorCQkJJ0Rvd25sb2FkSXNDb21wbGV0ZV9jYicgPT4gbnVsbCwKKwkJCSdEZXN0cm95SXNDb21wbGV0ZV9jYicgPT4gbnVsbCwKKwkJCQorCQkJJ3Nob3dIaWRkZW5Gb2xkZXJzQW5kRmlsZXMnID0+IGZhbHNlLCAgICAgIC8vIEhpZGUgZG90IGRpcnMvZmlsZXMgPworCQkJJ3VzZUdldElEM0lmQXZhaWxhYmxlJyA9PiB0cnVlLAorCQkJJ2VuYWJsZVhTZW5kRmlsZScgPT4gZmFsc2UsCisJCQkncmVhZG1lX2ZpbGUnICAgICAgICAgID0+ICcucmVhZG1lLmh0bWwnLCAvLyBJZiBhIGRpcmVjdG9yeSBjb250YWlucyBhIGZpbGUgb2YgdGhpcyBuYW1lLCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUgYWpheC4gIFRoZSBNRk0gZnJvbnQgZW5kIHdpbGwgZGlzcGxheSB0aGlzIGluIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgdGhlIHByZXZpZXcgYXJlYSwgcHJvdmlkZWQgdGhlcmUgaXMgbm90aGluZyBlbHNlIHRvIGRpc3BsYXkgdGhlcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBVc2VmdWwgZm9yIGRpc3BsYXlpbmcgaGVscCB0ZXh0LiAgVGhlIGZpbGUgc2hvdWxkIG9ubHkgYmUgYW4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBodG1sIHNuaXBwZXQsIG5vdCBhIGNvbXBsZXRlIGh0bWwgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJCSksIChpc19hcnJheSgkb3B0aW9ucykgPyAkb3B0aW9ucyA6IGFycmF5KCkpKTsKKworCQkvLyB0cmFuc2Zvcm0gdGhlIG9ic29sZXRlZC9kZXByZWNhdGVkIG9wdGlvbnM6CisJCWlmICghZW1wdHkoJHRoaXMtPm9wdGlvbnNbJ21heEltYWdlU2l6ZSddKSAmJiAkdGhpcy0+b3B0aW9uc1snbWF4SW1hZ2VTaXplJ10gIT0gMTAyNCAmJiAkdGhpcy0+b3B0aW9uc1snbWF4SW1hZ2VEaW1lbnNpb24nXVsnd2lkdGgnXSA9PSAxMDI0ICYmICR0aGlzLT5vcHRpb25zWydtYXhJbWFnZURpbWVuc2lvbiddWydoZWlnaHQnXSA9PSA3NjgpCisJCXsKKwkJCSR0aGlzLT5vcHRpb25zWydtYXhJbWFnZURpbWVuc2lvbiddID0gYXJyYXkoJ3dpZHRoJyA9PiAkdGhpcy0+b3B0aW9uc1snbWF4SW1hZ2VTaXplJ10sICdoZWlnaHQnID0+ICR0aGlzLT5vcHRpb25zWydtYXhJbWFnZVNpemUnXSk7CisJCX0KKworCQkkZG9jdW1lbnRfcm9vdF9mc3BhdGggPSBudWxsOworCQlpZiAoIWVtcHR5KCR0aGlzLT5vcHRpb25zWydkb2N1bWVudFJvb3RQYXRoJ10pKQorCQl7CisJCQkkZG9jdW1lbnRfcm9vdF9mc3BhdGggPSByZWFscGF0aCgkdGhpcy0+b3B0aW9uc1snZG9jdW1lbnRSb290UGF0aCddKTsKKwkJfQorCQlpZiAoZW1wdHkoJGRvY3VtZW50X3Jvb3RfZnNwYXRoKSkKKwkJeworCQkJJGRvY3VtZW50X3Jvb3RfZnNwYXRoID0gcmVhbHBhdGgoaXNzZXQoJF9TRVJWRVJbJ1JFRElSRUNUX0RPQ1VNRU5UX1JPT1QnXSkgPyAkX1NFUlZFUlsnUkVESVJFQ1RfRE9DVU1FTlRfUk9PVCddIDogJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSk7CisJCX0KKwkJJGRvY3VtZW50X3Jvb3RfZnNwYXRoID0gc3RydHIoJGRvY3VtZW50X3Jvb3RfZnNwYXRoLCAnXFwnLCAnLycpOworCQkkZG9jdW1lbnRfcm9vdF9mc3BhdGggPSBydHJpbSgkZG9jdW1lbnRfcm9vdF9mc3BhdGgsICcvJyk7CisJCSR0aGlzLT5vcHRpb25zWydkb2N1bWVudFJvb3RQYXRoJ10gPSAkZG9jdW1lbnRfcm9vdF9mc3BhdGg7CisKKwkJLy8gYXBwbHkgZGVmYXVsdCB0byBSZXF1ZXN0U2NyaXB0VVJJOgorCQlpZiAoZW1wdHkoJHRoaXMtPm9wdGlvbnNbJ1JlcXVlc3RTY3JpcHRVUkknXSkpCisJCXsKKwkJCSR0aGlzLT5vcHRpb25zWydSZXF1ZXN0U2NyaXB0VVJJJ10gPSAkdGhpcy0+Z2V0UmVxdWVzdFNjcmlwdFVSSSgpOworCQl9CisKKwkJLy8gb25seSBjYWxjdWxhdGUgdGhlIGd1ZXN0aW1hdGVkIGRlZmF1bHRzIHdoZW4gdGhleSBhcmUgaW5kZWVkIHJlcXVpcmVkOgorCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2RpcmVjdG9yeSddID09IG51bGwgfHwgJHRoaXMtPm9wdGlvbnNbJ2Fzc2V0QmFzZVBhdGgnXSA9PSBudWxsIHx8ICR0aGlzLT5vcHRpb25zWyd0aHVtYm5haWxQYXRoJ10gPT0gbnVsbCkKKwkJeworCQkJJG15X3BhdGggPSBAcmVhbHBhdGgoZGlybmFtZShfX0ZJTEVfXykpOworCQkJJG15X3BhdGggPSBzdHJ0cigkbXlfcGF0aCwgJ1xcJywgJy8nKTsKKwkJCSRteV9wYXRoID0gc2VsZjo6ZW5mb3JjZVRyYWlsaW5nU2xhc2goJG15X3BhdGgpOworCQkJCisJCQkvLyB3ZSB0aHJvdyBhbiBFeGNlcHRpb24gaGVyZSBiZWNhdXNlIHdoZW4gdGhlc2UgZG8gbm90IGFwcGx5LCB0aGUgdXNlciBzaG91bGQgaGF2ZSBzcGVjaWZpZWQgYWxsIHRocmVlIHRoZXNlIGVudHJpZXMhCisJCQlpZiAoIUZpbGVNYW5hZ2VyVXRpbGl0eTo6c3RhcnRzV2l0aCgkbXlfcGF0aCwgJGRvY3VtZW50X3Jvb3RfZnNwYXRoKSkKKwkJCXsKKwkJCQl0aHJvdyBuZXcgRmlsZU1hbmFnZXJFeGNlcHRpb24oJ25vZmlsZScpOworCQkJfQorCisJCQkkbXlfdXJsX3BhdGggPSBzdHJfcmVwbGFjZSgkZG9jdW1lbnRfcm9vdF9mc3BhdGgsICcnLCAkbXlfcGF0aCk7CisKKwkJCWlmICgkdGhpcy0+b3B0aW9uc1snZGlyZWN0b3J5J10gPT0gbnVsbCkKKwkJCXsKKwkJCQkkdGhpcy0+b3B0aW9uc1snZGlyZWN0b3J5J10gPSAkbXlfdXJsX3BhdGggLiAnLi4vLi4vRGVtb3MvRmlsZXMvJzsKKwkJCX0KKwkJCWlmICgkdGhpcy0+b3B0aW9uc1snYXNzZXRCYXNlUGF0aCddID09IG51bGwpCisJCQl7CisJCQkJJHRoaXMtPm9wdGlvbnNbJ2Fzc2V0QmFzZVBhdGgnXSA9ICRteV91cmxfcGF0aCAuICcuLi8uLi9Bc3NldHMvJzsKKwkJCX0KKwkJCWlmICgkdGhpcy0+b3B0aW9uc1sndGh1bWJuYWlsUGF0aCddID09IG51bGwpCisJCQl7CisJCQkJJHRoaXMtPm9wdGlvbnNbJ3RodW1ibmFpbFBhdGgnXSA9ICRteV91cmxfcGF0aCAuICcuLi8uLi9Bc3NldHMvVGh1bWJzLyc7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBtYWtlIHN1cmUgd2Ugc3RhcnQgd2l0aCBhIHZlcnkgcHJlZGljdGFibGUgYW5kIExFR0FMIG9wdGlvbnNbJ2RpcmVjdG9yeSddIHNldHRpbmcsIHNvIHRoYXQgdGhlIGNoZWNrcyBhcHBsaWVkIHRvIHRoZQorCQkgKiAocG9zc2libHkpIHVzZXIgc3BlY2lmaWVkIHZhbHVlIGZvciB0aGlzIGJ1Z2dlciBhY3R1YWxseSBjYW4gY2hlY2sgb3V0IG9rYXkgQVMgTE9ORyBBUyBJVCdTIElOU0lERSB0aGUgRG9jdW1lbnRSb290LWJhc2VkCisJCSAqIGRpcmVjdG9yeSB0cmVlOgorCQkgKi8KKwkJJHRoaXMtPm9wdGlvbnNbJ2RpcmVjdG9yeSddID0gJHRoaXMtPnJlbDJhYnNfdXJsX3BhdGgoJHRoaXMtPm9wdGlvbnNbJ2RpcmVjdG9yeSddIC4gJy8nKTsKKworCQkkdGhpcy0+bWFuYWdlZEJhc2VEaXIgPSAkdGhpcy0+dXJsX3BhdGgyZmlsZV9wYXRoKCR0aGlzLT5vcHRpb25zWydkaXJlY3RvcnknXSk7CisKKwkJLy8gbm93IHRoYXQgdGhlIGNvcnJlY3Qgb3B0aW9uc1snZGlyZWN0b3J5J10gaGFzIGJlZW4gc2V0IHVwLCBnbyBhbmQgY2hlY2svY2xlYW4gdGhlIG90aGVyIHBhdGhzIGluIHRoZSBvcHRpb25zW106CisKKwkJJHRoaXMtPm9wdGlvbnNbJ3RodW1ibmFpbFBhdGgnXSA9ICR0aGlzLT5yZWwyYWJzX3VybF9wYXRoKCR0aGlzLT5vcHRpb25zWyd0aHVtYm5haWxQYXRoJ10gLiAnLycpOworCQkkdGhpcy0+dGh1bWJuYWlsQ2FjaGVEaXIgPSAkdGhpcy0+dXJsX3BhdGgyZmlsZV9wYXRoKCR0aGlzLT5vcHRpb25zWyd0aHVtYm5haWxQYXRoJ10pOyAgLy8gcHJlY2FsY3VsYXRlIHRoaXMgdmFsdWU7IHNhZmUgYXMgd2UgY2FuIGFzc3VtZSB0aGUgZW50aXJlIGNhY2hlIGRpcnRyZWUgbWFwcyAxOjEgdG8gZmlsZXN5c3RlbS4KKwkJJHRoaXMtPnRodW1ibmFpbENhY2hlUGFyZW50RGlyID0gJHRoaXMtPnVybF9wYXRoMmZpbGVfcGF0aChzZWxmOjpnZXRQYXJlbnREaXIoJHRoaXMtPm9wdGlvbnNbJ3RodW1ibmFpbFBhdGgnXSkpOyAgICAvLyBwcmVjYWxjdWxhdGUgdGhpcyB2YWx1ZSBhcyB3ZWxsOyB1c2VkIGJ5IHNjYW5kaXIvdmlldworCisJCSR0aGlzLT5vcHRpb25zWydhc3NldEJhc2VQYXRoJ10gPSAkdGhpcy0+cmVsMmFic191cmxfcGF0aCgkdGhpcy0+b3B0aW9uc1snYXNzZXRCYXNlUGF0aCddIC4gJy8nKTsKKworCQkkdGhpcy0+b3B0aW9uc1snbWltZVR5cGVzUGF0aCddID0gQHJlYWxwYXRoKCR0aGlzLT5vcHRpb25zWydtaW1lVHlwZXNQYXRoJ10pOworCQlpZiAoZW1wdHkoJHRoaXMtPm9wdGlvbnNbJ21pbWVUeXBlc1BhdGgnXSkpCisJCXsKKwkJCXRocm93IG5ldyBGaWxlTWFuYWdlckV4Y2VwdGlvbignbm9maWxlJyk7CisJCX0KKwkJJHRoaXMtPm9wdGlvbnNbJ21pbWVUeXBlc1BhdGgnXSA9IHN0cnRyKCR0aGlzLT5vcHRpb25zWydtaW1lVHlwZXNQYXRoJ10sICdcXCcsICcvJyk7CisKKwkJJHRoaXMtPmdldGlkM19jYWNoZSA9IG5ldyBNVEZNQ2FjaGUoTVRGTV9NSU5fR0VUSUQzX0NBQ0hFU0laRSk7CisKKwkJJHRoaXMtPmljb25fY2FjaGUgPSBhcnJheShhcnJheSgpLCBhcnJheSgpKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGFycmF5IHRoZSBGaWxlTWFuYWdlciBvcHRpb25zIGFuZCBzZXR0aW5ncy4KKwkgKi8KKwlwdWJsaWMgZnVuY3Rpb24gZ2V0U2V0dGluZ3MoKQorCXsKKwkJcmV0dXJuIGFycmF5X21lcmdlKGFycmF5KAorCQkJCSd0aHVtYm5haWxDYWNoZURpcicgPT4gJHRoaXMtPnRodW1ibmFpbENhY2hlRGlyLAorCQkJCSd0aHVtYm5haWxDYWNoZVBhcmVudERpcicgPT4gJHRoaXMtPnRodW1ibmFpbENhY2hlUGFyZW50RGlyLAorCQkJCSdtYW5hZ2VkQmFzZURpcicgPT4gJHRoaXMtPm1hbmFnZWRCYXNlRGlyCisJCSksICR0aGlzLT5vcHRpb25zKTsKKwl9CisKKworCisKKwkvKioKKwkgKiBDZW50cmFsIGVudHJ5IHBvaW50IGZvciBhbnkgY2xpZW50IHNpZGUgcmVxdWVzdC4KKwkgKi8KKwlwdWJsaWMgZnVuY3Rpb24gZmlyZUV2ZW50KCRldmVudCA9IG51bGwpCisJeworCQkkZXZlbnQgPSAoIWVtcHR5KCRldmVudCkgPyAnb24nIC4gdWNmaXJzdCgkZXZlbnQpIDogbnVsbCk7CisJCWlmICghJGV2ZW50IHx8ICFtZXRob2RfZXhpc3RzKCR0aGlzLCAkZXZlbnQpKSAkZXZlbnQgPSAnb25WaWV3JzsKKworCQkkdGhpcy0+eyRldmVudH0oKTsKKwl9CisKKworCisKKworCisJLyoqCisJICogR2VuZXJhbGl6ZWQgJ3ZpZXcnIGhhbmRsZXIsIHdoaWNoIHByb2R1Y2VzIGEgZGlyZWN0b3J5IGxpc3RpbmcuCisJICoKKwkgKiBSZXR1cm4gdGhlIGRpcmVjdG9yeSBsaXN0aW5nIGluIGEgbmVzdGVkIGFycmF5LCBzdWl0YWJsZSBmb3IgSlNPTiBlbmNvZGluZy4KKwkgKi8KKwlwcm90ZWN0ZWQgZnVuY3Rpb24gX29uVmlldygkbGVnYWxfdXJsLCAkanNvbiwgJG1pbWVfZmlsdGVyLCAkZmlsZV9wcmVzZWxlY3RfYXJnID0gbnVsbCwgJGZpbGVtYXNrID0gJyonKQorCXsKKwkJJHZfZXhfY29kZSA9ICdub2ZpbGUnOworCisJCSRkaXIgPSAkdGhpcy0+bGVnYWxfdXJsX3BhdGgyZmlsZV9wYXRoKCRsZWdhbF91cmwpOworCQkkZG91YmxlZG90ID0gbnVsbDsKKwkJJGNvbGwgPSBudWxsOworCQlpZiAoaXNfZGlyKCRkaXIpKQorCQl7CisJCQkvKgorCQkJICogQ2FjaGluZyBub3RpY2U6CisJCQkgKgorCQkJICogVGVzdGluZyBvbiBXaW43LzY0IGhhcyByZXZlYWxlZCB0aGF0IGF0IGxlYXN0IG9uIHRoYXQgcGxhdGZvcm0sIGRpcmVjdG9yaWVzJyAnbGFzdCBtb2RpZmllZCcgdGltZXN0YW1wIGRvZXMgTk9UIGNoYW5nZSB3aGVuCisJCQkgKiB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeSBhcmUgYWx0ZXJlZCAoZS5nLiB3aGVuIGEgZmlsZSB3YXMgYWRkZWQpLCBoZW5jZSBmaWxlbXRpbWUoKSBjYW5ub3QgYmUgdXNlZCBmb3IgZGlyZWN0b3JpZXMKKwkJCSAqIHRvIGRldGVjdCBhbnkgY2hhbmdlIGFuZCB0aHVzIHN0ZWVyIHRoZSBjYWNoZSBhY2Nlc3MuCisJCQkgKgorCQkJICogV2hlbiBvbmUgYXNzdW1lcyB0aGF0IGFsbCBmaWxlIGFjY2VzcyBpbiB0aGUgbWFuYWdlZCBkaXJlY3RvcnkgdHJlZSBpcyBwZXJmb3JtZWQgdGhyb3VnaCBhbiBNVEZNIGVudGl0eSwgdGhlbiB3ZSBjYW4gdXNlIGEKKwkJCSAqIGRpZmZlcmVudCB0YWN0aWMgKHdoaWNoLCBkdWUgdG8gdGhpcyByaXNreSBhc3N1bXB0aW9uIGlzIGR1cHBlZCBwYXJ0IG9mIHRoZSBncm91cCBvZiAnYWdncmVzc2l2ZSBjYWNoaW5nJyBhY3Rpb25zKSB3aGVyZQorCQkJICogd2UgY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYSBjYWNoZSBmaWxlIGZvciB0aGUgZ2l2ZW4gZGlyZWN0b3J5OyB3aGVuIGl0IGRvZXMgZXhpc3QsIHdlIGNhbiB1c2UgaXQuCisJCQkgKiBBbHNvLCB3aGVuIGFueSBlZGl0aW5nIGFjdGl2aXR5IG9jY3VycyBpbiBhIGRpcmVjdG9yeSwgd2UgY2FuIGVpdGhlciBjaG9vc2UgdG8gdXBkYXRlIHRoZSBkaXItY2FjaGUgZmlsZSAoY29zdGx5LCB0b3VnaCwKKwkJCSAqIHJhdGhlciBjb21wbGV4KSBvciBzaW1wbHkgZGVsZXRlIHRoZSBkaXItY2FjaGUgZmlsZSB0byBzaWduYWwgdGhlIG5leHQgb2NjdXJyZW5jZSBvZiB0aGUgJ3ZpZXcnIGEgZnJlc2ggZGlyc2NhbiBpcworCQkJICogcmVxdWlyZWQuCisJCQkgKgorCQkJICogQWxzbywgd2UgY2FuIGtlZXAgdHJhY2sgb2YgdGhlIGNvbXBsZXRlZCB0aHVtYm5haWwgZ2VuZXJhdGlvbiBwZXIgZmlsZSBpbiB0aGlzIGRpci1jYWNoZSBmaWxlLiBIb3dldmVyLCB0aGUgYXJndW1lbnQgYWdhaW5zdAorCQkJICogc3VjaCByZWxhdGl2ZSBzb3BoaXRpY2F0aW9uICh0byBwcmV2ZW50IGEgZG91YmxlIHJvdW5kLXRyaXAgcGVyIHRodW1ibmFpbCBpbiAndGh1bWInIGxpc3QgdmlldykgaXMgdGhlIGhlYXZ5IGNvc3Qgb2YKKwkJCSAqIGxvYWRpbmcgKyBzYXZpbmcgdGhlIChlZGl0ZWQpIGRpci1jYWNoZSBmaWxlIGZvciBlYWNoIHRodW1ibmFpbCBwcm9kdWN0aW9uLiBUaGUgcXVlc3Rpb24gaGVyZSBpczogYXJlIHRob3NlIGNvc3RzIHNpZ25pZmljYW50bHkKKwkJCSAqIGxlc3MgdGhlbiB0aGUgY29zdCBvZiBkaXJzY2FuICsgcm91bmQgdHJpcHMgKG9yICdkaXJlY3QnIG1vZGUgdGh1bWJuYWlsIGZpbGUgdGVzdHMpIGZvciBlYWNoICd2aWV3JyByZXF1ZXN0PyBIb3cgbWFueSAndmlldydzCisJCQkgKiBkbyB5b3UgZXhwZWN0IGNvbXBhcmVkIHRvIHRoZSBudW1iZXIgb2YgZGlyZWN0b3J5IGVkaXRzPyAnVXN1YWxseScgdGhhdCByYXRpbyBzaG91bGQgYmUgcmF0aGVyIGhpZ2ggKGZldyBlZGl0cywgbWFueSB2aWV3cyksCisJCQkgKiB0aHVzIHN1Z2dlc3RpbmcgYSBiZW5lZml0IHRvIHRoaXMgYWdncmVzc2l2ZSBjYWNoaW5nIGFuZCBjYWNoZSB1cGRhdGluZyBmb3IgdGh1bWJuYWlsIHByb2R1Y3Rpb24uICAgIFRoZSAnY2hlYXBlciBmb3IgdGhlCisJCQkgKiB0aHVtYm5haWwgcHJvZHVjdGlvbicgYXBwcm9hY2ggd291bGQgYmUgdG8gY29uc2lkZXIgaXQgYSAnZGlyZWN0b3J5IGVkaXQnIGFuZCB0aHVzIG51a2UgdGhlIGRpci1jYWNoZSBmb3IgZXZlcnkgdGh1bWJuYWlsICg0OHB4KQorCQkJICogcHJvZHVjZWQuIFRoaXMgaXMgL3Byb2JhYmx5LyBzbG93ZXIgdGhhbiB0aGUgY2FoY2UgdXBkYXRpbmcsIGFzIHRoZSBsYXR0ZXIgcmVxdWlyZXMgb25seSBhIHNpbmdsZSBmaWxlIGFjY2VzcyBwZXIgJ3ZpZXcnCisJCQkgKiBvcGVyYXRpb247IGFsbCB3ZSBuZWVkIHRvIHN0b3JlIGFyZSBhIGZsYWcgKFkvTikgcGVyIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSwgc28gdGhlIHN0b3JlIHNpemUgd291bGQgYmUgc21hbGwsIGV2ZW4gZm9yIGxhcmdlCisJCQkgKiBkaXJlY3Rvcmllcy4KKwkJCSAqCisJCQkgKiBXaGF0IHRvIGRvPyBXZSBoYXZlbid0IGNvbWUgdG8gYSBkZWNpc2lvbiB5ZXQuCisJCQkgKgorCQkJICogQ29kZTogVE9ETworCQkJICovCisKKwkJCSRjb2xsID0gJHRoaXMtPnNjYW5kaXIoJGRpciwgJGZpbGVtYXNrLCBmYWxzZSwgMCwgKCR0aGlzLT5vcHRpb25zWydzaG93SGlkZGVuRm9sZGVyc0FuZEZpbGVzJ10gPyB+R0xPQl9OT0hJRERFTiA6IH4wKSk7CisJCQlpZiAoJGNvbGwgIT09IGZhbHNlKQorCQkJeworCQkJCS8qCisJCQkJICogVG8gZW5zdXJlICcuLicgZW5kcyB1cCBhdCB0aGUgdmVyeSB0b3Agb2YgdGhlIHZpZXcsIG5vIG1hdHRlciB3aGF0IHRoZSBvdGhlciBlbnRyaWVzIGluICRjb2xsWydkaXJzJ11bXSBhcmUgbWFkZSBvZiwKKwkJCQkgKiB3ZSBwb3AgdGhlIGxhc3QgZWxlbWVudCBvZmYgdGhlIGFycmF5LCBjaGVjayB3aGV0aGVyIGl0J3MgdGhlIGRvdWJsZS1kb3QsIGFuZCBpZiBzbywga2VlcCBpdCBvdXQgd2hpbGUgd2UKKwkJCQkgKiBsZXQgdGhlIHNvcnQgcnVuLgorCQkJCSAqLworCQkJCSRkb3VibGVkb3QgPSBhcnJheV9wb3AoJGNvbGxbJ2RpcnMnXSk7CisJCQkJaWYgKCRkb3VibGVkb3QgIT09IG51bGwgJiYgJGRvdWJsZWRvdCAhPT0gJy4uJykKKwkJCQl7CisJCQkJCSRjb2xsWydkaXJzJ11bXSA9ICRkb3VibGVkb3Q7CisJCQkJCSRkb3VibGVkb3QgPSBudWxsOworCQkJCX0KKwkJCQluYXRjYXNlc29ydCgkY29sbFsnZGlycyddKTsKKwkJCQluYXRjYXNlc29ydCgkY29sbFsnZmlsZXMnXSk7CisKKwkJCQkkdl9leF9jb2RlID0gbnVsbDsKKwkJCX0KKwkJfQorCisJCSRtaW1lX2ZpbHRlcnMgPSAkdGhpcy0+Z2V0QWxsb3dlZE1pbWVUeXBlcygkbWltZV9maWx0ZXIpOworCisJCSRmaWxlaW5mbyA9IGFycmF5KAorCQkJCSdsZWdhbF91cmwnID0+ICRsZWdhbF91cmwsCisJCQkJJ2RpcicgPT4gJGRpciwKKwkJCQknY29sbGVjdGlvbicgPT4gJGNvbGwsCisJCQkJJ21pbWVfZmlsdGVyJyA9PiAkbWltZV9maWx0ZXIsCisJCQkJJ21pbWVfZmlsdGVycycgPT4gJG1pbWVfZmlsdGVycywKKwkJCQknZmlsZV9wcmVzZWxlY3QnID0+ICRmaWxlX3ByZXNlbGVjdF9hcmcsCisJCQkJJ3ByZWxpbWluYXJ5X2pzb24nID0+ICRqc29uLAorCQkJCSd2YWxpZGF0aW9uX2ZhaWx1cmUnID0+ICR2X2V4X2NvZGUKKwkJCSk7CisKKwkJaWYgKCFlbXB0eSgkdGhpcy0+b3B0aW9uc1snVmlld0lzQXV0aG9yaXplZF9jYiddKSAmJiBmdW5jdGlvbl9leGlzdHMoJHRoaXMtPm9wdGlvbnNbJ1ZpZXdJc0F1dGhvcml6ZWRfY2InXSkgJiYgISR0aGlzLT5vcHRpb25zWydWaWV3SXNBdXRob3JpemVkX2NiJ10oJHRoaXMsICd2aWV3JywgJGZpbGVpbmZvKSkKKwkJeworCQkJJHZfZXhfY29kZSA9ICRmaWxlaW5mb1sndmFsaWRhdGlvbl9mYWlsdXJlJ107CisJCQlpZiAoZW1wdHkoJHZfZXhfY29kZSkpICR2X2V4X2NvZGUgPSAnYXV0aG9yaXplZCc7CisJCX0KKwkJaWYgKCFlbXB0eSgkdl9leF9jb2RlKSkKKwkJCXRocm93IG5ldyBGaWxlTWFuYWdlckV4Y2VwdGlvbigkdl9leF9jb2RlKTsKKworCQkkbGVnYWxfdXJsID0gJGZpbGVpbmZvWydsZWdhbF91cmwnXTsKKwkJJGRpciA9ICRmaWxlaW5mb1snZGlyJ107CisJCSRjb2xsID0gJGZpbGVpbmZvWydjb2xsZWN0aW9uJ107CisJCSRtaW1lX2ZpbHRlciA9ICRmaWxlaW5mb1snbWltZV9maWx0ZXInXTsKKwkJJG1pbWVfZmlsdGVycyA9ICRmaWxlaW5mb1snbWltZV9maWx0ZXJzJ107CisJCSRmaWxlX3ByZXNlbGVjdF9hcmcgPSAkZmlsZWluZm9bJ2ZpbGVfcHJlc2VsZWN0J107CisJCSRqc29uID0gJGZpbGVpbmZvWydwcmVsaW1pbmFyeV9qc29uJ107CisKKwkJJGZpbGVfcHJlc2VsZWN0X2luZGV4ID0gLTE7CisJCSRvdXQgPSBhcnJheShhcnJheSgpLCBhcnJheSgpKTsKKworCQkkbWltZSA9ICd0ZXh0L2RpcmVjdG9yeSc7CisJCSRpY29uc3BlYyA9IGZhbHNlOworCisJCWlmICgkZG91YmxlZG90ICE9PSBudWxsKQorCQl7CisJCQkkZmlsZW5hbWUgPSAnLi4nOworCisJCQkkbF91cmwgPSAkbGVnYWxfdXJsIC4gJGZpbGVuYW1lOworCisJCQkvLyBtdXN0IHRyYW5zZm9ybSBoZXJlIHNvIGFsaWFzL2V0Yy4gZXhwYW5zaW9ucyBpbnNpZGUgbGVnYWxfdXJsX3BhdGgyZmlsZV9wYXRoKCkgZ2V0IGEgY2hhbmNlOgorCQkJJGZpbGUgPSAkdGhpcy0+bGVnYWxfdXJsX3BhdGgyZmlsZV9wYXRoKCRsX3VybCk7CisKKwkJCSRpY29uc3BlYyA9ICdpcy5kaXJlY3RvcnlfdXAnOworCisJCQkkaWNvbjQ4ID0gJHRoaXMtPmdldEljb24oJGljb25zcGVjLCBmYWxzZSk7CisJCQkkaWNvbjQ4X2UgPSBGaWxlTWFuYWdlclV0aWxpdHk6OnJhd3VybGVuY29kZV9wYXRoKCRpY29uNDgpOworCisJCQkkaWNvbiA9ICR0aGlzLT5nZXRJY29uKCRpY29uc3BlYywgdHJ1ZSk7CisJCQkkaWNvbl9lID0gRmlsZU1hbmFnZXJVdGlsaXR5OjpyYXd1cmxlbmNvZGVfcGF0aCgkaWNvbik7CisKKwkJCSRvdXRbMV1bXSA9IGFycmF5KAorCQkJCQkncGF0aCcgPT4gJGxfdXJsLAorCQkJCQknbmFtZScgPT4gJGZpbGVuYW1lLAorCQkJCQknbWltZScgPT4gJG1pbWUsCisJCQkJCSdpY29uNDgnID0+ICRpY29uNDhfZSwKKwkJCQkJJ2ljb24nID0+ICRpY29uX2UKKwkJCQkpOworCQl9CisKKwkJLy8gbm93IHByZWNhbGMgdGhlIGRpcmVjdG9yeS1jb21tb24gaXRlbXMgKGEuay5hLiBpbnZhcmlhbnQgY29tcHV0YXRpb24gLyBjb21tb24gc3ViZXhwcmVzc2lvbiBob2lzdGluZykKKwkJJGljb25zcGVjX2QgPSAnaXMuZGlyZWN0b3J5JzsKKworCQkkaWNvbjQ4X2QgPSAkdGhpcy0+Z2V0SWNvbigkaWNvbnNwZWNfZCwgZmFsc2UpOworCQkkaWNvbjQ4X2RlID0gRmlsZU1hbmFnZXJVdGlsaXR5OjpyYXd1cmxlbmNvZGVfcGF0aCgkaWNvbjQ4X2QpOworCisJCSRpY29uX2QgPSAkdGhpcy0+Z2V0SWNvbigkaWNvbnNwZWNfZCwgdHJ1ZSk7CisJCSRpY29uX2RlID0gRmlsZU1hbmFnZXJVdGlsaXR5OjpyYXd1cmxlbmNvZGVfcGF0aCgkaWNvbl9kKTsKKworCQlmb3JlYWNoICgkY29sbFsnZGlycyddIGFzICRmaWxlbmFtZSkKKwkJeworCQkJJGxfdXJsID0gJGxlZ2FsX3VybCAuICRmaWxlbmFtZTsKKworCQkJJG91dFsxXVtdID0gYXJyYXkoCisJCQkJCSdwYXRoJyA9PiAkbF91cmwsCisJCQkJCSduYW1lJyA9PiAkZmlsZW5hbWUsCisJCQkJCSdtaW1lJyA9PiAkbWltZSwKKwkJCQkJJ2ljb240OCcgPT4gJGljb240OF9kZSwKKwkJCQkJJ2ljb24nID0+ICRpY29uX2RlCisJCQkJKTsKKwkJfQorCisJCS8vIGFuZCBub3cgbGlzdCB0aGUgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeQorCQkkaWR4ID0gMDsKKwkJZm9yZWFjaCAoJGNvbGxbJ2ZpbGVzJ10gYXMgJGZpbGVuYW1lKQorCQl7CisJCQkkbF91cmwgPSAkbGVnYWxfdXJsIC4gJGZpbGVuYW1lOworCisJCQkvLyBEbyBub3QgYWxsb3cgdGhlIGdldEZpbGVJbmZvKCkvaW1hZ2VpbmZvKCkgb3ZlcmhlYWQgcGVyIGZpbGUgZm9yIHZlcnkgbGFyZ2UgZGlyZWN0b3JpZXM7IGp1c3QgZ3Vlc3MgdGhlIG1pbWV0eXBlIGZyb20gdGhlIGZpbGVuYW1lIGFsb25lLgorCQkJLy8gVGhlIHJlYWwgbWltZXR5cGUgd2lsbCBzaG93IHVwIGluIHRoZSAnZGV0YWlscycgdmlldyBhbnl3YXkgYXMgd2UnbGwgaGF2ZSBjYWxsZWQgZ2V0RmlsZUluZm8oKSBieSB0aGVuIQorCQkJJG1pbWUgPSAkdGhpcy0+Z2V0TWltZUZyb21FeHQoJGZpbGVuYW1lKTsKKwkJCSRpY29uc3BlYyA9ICRmaWxlbmFtZTsKKworCQkJaWYgKCEkdGhpcy0+SXNBbGxvd2VkTWltZVR5cGUoJG1pbWUsICRtaW1lX2ZpbHRlcnMpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoJGZpbGVuYW1lID09PSAkZmlsZV9wcmVzZWxlY3RfYXJnKQorCQkJeworCQkJCSRmaWxlX3ByZXNlbGVjdF9pbmRleCA9ICRpZHg7CisJCQl9CisKKwkJCS8qCisJCQkgKiBvZmZsb2FkIHRoZSB0aHVtYm5haWxpbmcgcHJvY2VzcyB0byBhbm90aGVyIGV2ZW50ICgnZXZlbnQ9ZGV0YWlsIC8gbW9kZT1kaXJlY3QnKSB0byBiZSBmaXJlZCBieSB0aGUgY2xpZW50CisJCQkgKiB3aGVuIGl0J3MgdGltZSB0byByZW5kZXIgdGhlIHRodW1ibmFpbDogdGhlIG9mZmxvYWRpbmcgaGVscHMgdXMgdHJlbWVuZG91c2x5IGluIGNvcGluZyB3aXRoIGxhcmdlCisJCQkgKiBkaXJlY3RvcmllczoKKwkJCSAqIFdFIHNpbXBseSBhc3N1bWUgdGhlIHRodW1ibmFpbCB3aWxsIGJlIHRoZXJlLCBzbyB3ZSBkb24ndCBldmVuIG5lZWQgdG8gY2hlY2sgZm9yIGl0cyBleGlzdGVuY2UKKwkJCSAqICh3aGljaCBzYXZlcyB1cyBvbmUgbW9yZSBmaWxlX2V4aXN0cygpIHBlciBpdGVtIGF0IHRoZSB2ZXJ5IGxlYXN0KS4gQW5kIHdoZW4gaXQgZG9lc24ndCwgdGhhdCdzCisJCQkgKiBmb3IgdGhlIGV2ZW50PXRodW1ibmFpbCBoYW5kbGVyIHRvIHdvcnJ5IGFib3V0IChjcmVhdGluZyB0aGUgdGh1bWJuYWlsIG9uIGRlbWFuZCBvciBzZXJ2aW5nCisJCQkgKiBhIGdlbmVyaWMgaWNvbiBpbWFnZSBpbnN0ZWFkKS4KKwkJCSAqCisJCQkgKiBGb3Igbm93LCBzaW1wbHkgYXNzaWduIGEgYmFzaWMgaWNvbiB0byBhbnkgYW5kIGFsbDsgdGhlICdkZXRhaWwnIGV2ZW50IHdpbGwgcmVwbGFjZSB0aGlzIGl0ZW0gaW4gdGhlIGZyb250ZW5kCisJCQkgKiB3aGVuIHRoZSB0aW1lIGhhcyBhcnJpdmVzIHdoZW4gdGhhdCAnZGV0YWlsJyByZXF1ZXN0IGhhcyBiZWVuIGFuc3dlcmVkLgorCQkJICovCisJCQkkaWNvbjQ4ID0gJHRoaXMtPmdldEljb24oJGljb25zcGVjLCBmYWxzZSk7CisJCQkkaWNvbjQ4X2UgPSBGaWxlTWFuYWdlclV0aWxpdHk6OnJhd3VybGVuY29kZV9wYXRoKCRpY29uNDgpOworCisJCQkkaWNvbiA9ICR0aGlzLT5nZXRJY29uKCRpY29uc3BlYywgdHJ1ZSk7CisJCQkkaWNvbl9lID0gRmlsZU1hbmFnZXJVdGlsaXR5OjpyYXd1cmxlbmNvZGVfcGF0aCgkaWNvbik7CisKKwkJCSRvdXRbMF1bXSA9IGFycmF5KAorCQkJCQkncGF0aCcgPT4gJGxfdXJsLAorCQkJCQknbmFtZScgPT4gJGZpbGVuYW1lLAorCQkJCQknbWltZScgPT4gJG1pbWUsCisJCQkJCS8vIHdlIGRvbid0IGtub3cgdGhlIHRodW1ibmFpbCBwYXRocyB5ZXQgLS0+IHRoaXMgd2lsbCB0cmlnZ2VyIGRlZmVycmVkIHJlcXVlc3RzOiAoZXZlbnQ9ZGV0YWlsLCBtb2RlPWRpcmVjdCkKKwkJCQkJJ3RodW1ic19kZWZlcnJlZCcgPT4gdHJ1ZSwKKwkJCQkJJ2ljb240OCcgPT4gJGljb240OF9lLAorCQkJCQknaWNvbicgPT4gJGljb25fZQorCQkJCSk7CisJCQkkaWR4Kys7CisJCX0KKworCQlyZXR1cm4gYXJyYXlfbWVyZ2UoKGlzX2FycmF5KCRqc29uKSA/ICRqc29uIDogYXJyYXkoKSksIGFycmF5KAorCQkJCSdyb290JyA9PiBzdWJzdHIoJHRoaXMtPm9wdGlvbnNbJ2RpcmVjdG9yeSddLCAxKSwKKwkJCQkndGhpc19kaXInID0+IGFycmF5KAorCQkJCQkncGF0aCcgPT4gJGxlZ2FsX3VybCwKKwkJCQkJJ25hbWUnID0+IGJhc2VuYW1lKCRsZWdhbF91cmwpLAorCQkJCQknZGF0ZScgPT4gZGF0ZSgkdGhpcy0+b3B0aW9uc1snZGF0ZUZvcm1hdCddLCBAZmlsZW10aW1lKCRkaXIpKSwKKwkJCQkJJ21pbWUnID0+ICd0ZXh0L2RpcmVjdG9yeScsCisJCQkJCSdpY29uNDgnID0+ICRpY29uNDhfZGUsCisJCQkJCSdpY29uJyA9PiAkaWNvbl9kZSwKKwkJCQkJJ3JlYWRtZScgPT4gZmlsZV9leGlzdHMoJGRpciAuICcvJyAuICR0aGlzLT5vcHRpb25zWydyZWFkbWVfZmlsZSddKSAKKyAgICAgICAgICAgICAgICAgID8gZmlsZV9nZXRfY29udGVudHMoJGRpciAuICcvJyAuICR0aGlzLT5vcHRpb25zWydyZWFkbWVfZmlsZSddKSAKKyAgICAgICAgICAgICAgICAgIDogbnVsbCwKKwkJCQkpLAorCQkJCSdwcmVzZWxlY3RfaW5kZXgnID0+ICgkZmlsZV9wcmVzZWxlY3RfaW5kZXggPj0gMCA/ICRmaWxlX3ByZXNlbGVjdF9pbmRleCArIGNvdW50KCRvdXRbMV0pICsgMSA6IDApLAorCQkJCSdwcmVzZWxlY3RfbmFtZScgPT4gKCRmaWxlX3ByZXNlbGVjdF9pbmRleCA+PSAwID8gJGZpbGVfcHJlc2VsZWN0X2FyZyA6IG51bGwpLAorCQkJCSdkaXJzJyA9PiAkb3V0WzFdLAorCQkJCSdmaWxlcycgPT4gJG91dFswXQorCQkJKSk7CisJfQorCisJLyoqCisJICogUHJvY2VzcyB0aGUgJ3ZpZXcnIGV2ZW50IChkZWZhdWx0IGV2ZW50IGZpcmVkIGJ5IGZpcmVFdmVudCgpIG1ldGhvZCkKKwkgKgorCSAqIFJldHVybnMgYSBKU09OIGVuY29kZWQgZGlyZWN0b3J5IHZpZXcgbGlzdC4KKwkgKgorCSAqIEV4cGVjdGVkIHBhcmFtZXRlcnM6CisJICoKKwkgKiAkX1BPU1RbJ2RpcmVjdG9yeSddICAgICBwYXRoIHJlbGF0aXZlIHRvIGJhc2VkaXIgYS5rLmEuIG9wdGlvbnNbJ2RpcmVjdG9yeSddIHJvb3QKKwkgKgorCSAqICRfUE9TVFsnZmlsZV9wcmVzZWxlY3QnXSAgICAgb3B0aW9uYWwgZmlsZW5hbWUgb3IgcGF0aDoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGEgZmlsZW5hbWUsIHRoaXMgaXMgdGhlIGZpbGVuYW1lIG9mIGEgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHNob3VsZCBiZSBsb2NhdGVkIGFuZCBzZWxlY3RlZC4gV2hlbiBmb3VuZCwgdGhlIGJhY2tlbmQgd2lsbAorCSAqICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGUgYW4gaW5kZXggbnVtYmVyIHBvaW50aW5nIGF0IHRoZSBjb3JyZXNwb25kaW5nIEpTT04gZmlsZXNbXQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5IHRvIGFzc2lzdCB0aGUgZnJvbnQtZW5kIGluIGp1bXBpbmcgdG8gdGhhdCBwYXJ0aWN1bGFyIGl0ZW0KKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgdmlldy4KKwkgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYSBwYXRoLCBpdCBpcyBlaXRoZXIgYW4gYWJzb2x1dGUgb3IgYSByZWxhdGl2ZSBwYXRoOgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgIGVpdGhlciBpcyBhc3N1bWVkIHRvIGJlIGEgVVJJIFVSSSBwYXRoLCBpLmUuIHJvb3RlZCBhdAorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRSb290LgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwYXRoIHdpbGwgYmUgdHJhbnNmb3JtZWQgdG8gYSBMRUdBTCBVUkkgcGF0aCBhbmQKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIE9WRVJSSURFIHRoZSAkX1BPU1RbJ2RpcmVjdG9yeSddIHBhdGguCisJICogICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCB0aGlzIG1vZGUgYWN0cyBhcyB3aGVuIG9ubHkgYSBmaWxlbmFtZSB3YXMgc3BlY2lmaWVkIGhlcmUuCisJICogICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtb2RlIGlzIHVzZWZ1bCB0byBoZWxwIGEgZnJvbnRlbmQgdG8gcXVpY2tseSBqdW1wIHRvIGEgZmlsZQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZWQgYXQgYnkgYSBVUkkuCisJICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICBOLkIuOiBUaGlzIGFsc28gdGhlIG9ubHkgZW50cnkgd2hpY2ggYWNjZXB0cyBhYnNvbHV0ZSBVUkkgcGF0aHMgYW5kCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtcyB0aGVtIHRvIExFR0FMIFVSSSBwYXRocy4KKwkgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIHNwZWNpZmllZCBwYXRoIGlzIGlsbGVnYWwsIGkuZS4gZG9lcyBub3QgcmVzaWRlIGluc2lkZSB0aGUKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zWydkaXJlY3RvcnknXS1yb290ZWQgTEVHQUwgVVJJIHN1YnRyZWUsIGl0IHdpbGwgYmUgZGlzY2FyZGVkCisJICogICAgICAgICAgICAgICAgICAgICAgICAgZW50aXJlbHkgKGFzIGFsbCBmaWxlIHBhdGhzLCB3aGV0aGVyIHRoZXkgYXJlIGFic29sdXRlIG9yIHJlbGF0aXZlLAorCSAqICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgZW5kIHVwIGluc2lkZSB0aGUgb3B0aW9uc1snZGlyZWN0b3J5J10tcm9vdGVkIHN1YnRyZWUgdG8gYmUKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zaWRlcmVkIG1hbmFnZWFibGUgZmlsZXMpIGFuZCB0aGUgcHJvY2VzcyB3aWxsIGNvbnRpbnVlIGFzIGlmCisJICogICAgICAgICAgICAgICAgICAgICAgICAgdGhlICRfUE9TVFsnZmlsZV9wcmVzZWxlY3QnXSBlbnRyeSBoYWQgbm90IGJlZW4gc2V0LgorCSAqCisJICogJF9QT1NUWydmaWx0ZXInXSAgICAgICAgb3B0aW9uYWwgbWltZXR5cGUgZmlsdGVyIHN0cmluZywgYW15IGJlIHRoZSBwYXJ0IHVwIHRvIGFuZAorCSAqICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGluZyB0aGUgc2xhc2ggJy8nIG9yIHRoZSBmdWxsIG1pbWV0eXBlLiBPbmx5IGZpbGVzCisJICogICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmcgdGhpcyAoc2V0IG9mKSBtaW1ldHlwZXMgd2lsbCBiZSBsaXN0ZWQuCisJICogICAgICAgICAgICAgICAgICAgICAgICAgRXhhbXBsZXM6ICdpbWFnZS8nIG9yICdhcHBsaWNhdGlvbi96aXAnCisJICoKKwkgKiBFcnJvcnMgd2lsbCBwcm9kdWNlIGEgSlNPTiBlbmNvZGVkIGVycm9yIHJlcG9ydCwgaW5jbHVkaW5nIGF0IGxlYXN0IHR3byBmaWVsZHM6CisJICoKKwkgKiBzdGF0dXMgICAgICAgICAgICAgICAgICAwIGZvciBlcnJvcjsgbm9uemVybyBmb3Igc3VjY2VzcworCSAqCisJICogZXJyb3IgICAgICAgICAgICAgICAgICAgZXJyb3IgbWVzc2FnZQorCSAqCisJICogTmV4dCB0byB0aGVzZSwgdGhlIEpTT04gZW5jb2RlZCBvdXRwdXQgd2lsbCwgd2l0aCBoaWdoIHByb2JhYmlsaXR5LCBpbmNsdWRlIGEKKwkgKiBsaXN0IHZpZXcgb2YgYSB2YWxpZCBwYXJlbnQgb3IgJ2Jhc2VkaXInIGFzIGEgZmFzdCBhbmQgZWFzeSBmYWxsYmFjayBtZWNoYW5pc20gZm9yIGNsaWVudCBzaWRlCisJICogdmlld2luZyBjb2RlLCBqdW1waW5nIGJhY2sgdG8gYSBleGlzdGluZyBkaXJlY3RvcnkuIEhvd2V2ZXIsIHNldmVyZSBhbmQgcmVwZXRpdGl2ZSBlcnJvcnMgbWF5IG5vdCBwcm9kdWNlIHRoaXMKKwkgKiAnZmFsbGJhY2sgdmlldyBsaXN0JyBzbyBwcm9wZXIgY2xpZW50IGNvZGUgc2hvdWxkIGNoZWNrIHRoZSAnc3RhdHVzJyBmaWVsZCBpbiB0aGUKKwkgKiBKU09OIG91dHB1dC4KKwkgKi8KKwlwcm90ZWN0ZWQgZnVuY3Rpb24gb25WaWV3KCkKKwl7CisJCS8vIHRyeSB0byBwcm9kdWNlIHRoZSB2aWV3OyBpZiBpdCBiMHJrcywgcmV0cnkgd2l0aCB0aGUgcGFyZW50LCB1bnRpbCB3ZSd2ZSBhcnJpdmVkIGF0IHRoZSBiYXNlZGlyOgorCQkvLyB0aGVuIHdlIGZhaWwgbW9yZSBzZXZlcmVseS4KKworCQkkZW1zZyA9IG51bGw7CisJCSRqc2VyciA9IGFycmF5KAorCQkJCSdzdGF0dXMnID0+IDEKKwkJCSk7CisKKwkJJG1pbWVfZmlsdGVyID0gJHRoaXMtPmdldFBPU1RwYXJhbSgnZmlsdGVyJywgJHRoaXMtPm9wdGlvbnNbJ2ZpbHRlciddKTsKKwkJJGxlZ2FsX3VybCA9IG51bGw7CisKKwkJdHJ5CisJCXsKKwkJCSRkaXJfYXJnID0gJHRoaXMtPmdldFBPU1RwYXJhbSgnZGlyZWN0b3J5Jyk7CisJCQkkbGVnYWxfdXJsID0gJHRoaXMtPnJlbDJhYnNfbGVnYWxfdXJsX3BhdGgoJGRpcl9hcmcgLiAnLycpOworCisJCQkkZmlsZV9wcmVzZWxlY3RfYXJnID0gJHRoaXMtPmdldFBPU1RwYXJhbSgnZmlsZV9wcmVzZWxlY3QnKTsKKwkJCXRyeQorCQkJeworCQkJCWlmICghZW1wdHkoJGZpbGVfcHJlc2VsZWN0X2FyZykpCisJCQkJeworCQkJCQkvLyBjaGVjayBpZiB0aGlzIGEgcGF0aCBpbnN0ZWFkIG9mIGp1c3QgYSBiYXNlbmFtZSwgdGhlbiBjb252ZXJ0IHRvIGxlZ2FsX3VybCBhbmQgc3BsaXQgYWNyb3NzIGZpbGVuYW1lIGFuZCBkaXJlY3RvcnkuCisJCQkJCWlmIChzdHJwb3MoJGZpbGVfcHJlc2VsZWN0X2FyZywgJy8nKSAhPT0gZmFsc2UpCisJCQkJCXsKKwkJCQkJCS8vIHRoaXMgd2lsbCBhbHNvIGNvbnZlcnQgYSByZWxhdGl2ZSBwYXRoIHRvIGFuIGFic29sdXRlIHBhdGggYmVmb3JlIHRyYW5zZm9ybWluZyBpdCB0byBhIExFR0FMIFVSSSBwYXRoOgorCQkJCQkJJGxlZ2FsX3ByZXNlbCA9ICR0aGlzLT5hYnMybGVnYWxfdXJsX3BhdGgoJGZpbGVfcHJlc2VsZWN0X2FyZyk7CisKKwkJCQkJCSRwcnNlbGkgPSBwYXRoaW5mbygkbGVnYWxfcHJlc2VsKTsKKwkJCQkJCSRmaWxlX3ByZXNlbGVjdF9hcmcgPSAkcHJzZWxpWydiYXNlbmFtZSddOworCQkJCQkJLy8gb3ZlcnJpZGUgdGhlIGRpcmVjdG9yeSEKKwkJCQkJCSRsZWdhbF91cmwgPSAkcHJzZWxpWydkaXJuYW1lJ107CisJCQkJCQkkbGVnYWxfdXJsID0gc2VsZjo6ZW5mb3JjZVRyYWlsaW5nU2xhc2goJGxlZ2FsX3VybCk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkkZmlsZV9wcmVzZWxlY3RfYXJnID0gYmFzZW5hbWUoJGZpbGVfcHJlc2VsZWN0X2FyZyk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQljYXRjaChGaWxlTWFuYWdlckV4Y2VwdGlvbiAkZSkKKwkJCXsKKwkJCQkvLyBkaXNjYXJkIHRoZSBwcmVzZWxlY3QgaW5wdXQgZW50aXJlbHk6CisJCQkJJGZpbGVfcHJlc2VsZWN0X2FyZyA9IG51bGw7CisJCQl9CisJCX0KKwkJY2F0Y2goRmlsZU1hbmFnZXJFeGNlcHRpb24gJGUpCisJCXsKKwkJCSRlbXNnID0gJGUtPmdldE1lc3NhZ2UoKTsKKwkJCSRsZWdhbF91cmwgPSAnLyc7CisJCQkkZmlsZV9wcmVzZWxlY3RfYXJnID0gbnVsbDsKKwkJfQorCQljYXRjaChFeGNlcHRpb24gJGUpCisJCXsKKwkJCS8vIGNhdGNoaW5nIG90aGVyIHNldmVyZSBmYWlsdXJlczsgc2luY2UgdGhpcyBjYW4gYmUgYW55dGhpbmcgaXQgbWF5IG5vdCBiZSBhIHRyYW5zbGF0aW9uIGtleXdvcmQgaW4gdGhlIG1lc3NhZ2UuLi4KKwkJCSRlbXNnID0gJGUtPmdldE1lc3NhZ2UoKTsKKwkJCSRsZWdhbF91cmwgPSAnLyc7CisJCQkkZmlsZV9wcmVzZWxlY3RfYXJnID0gbnVsbDsKKwkJfQorCisJCS8vIGxvb3AgdW50aWwgd2UgZHJvcCBiZWxvdyB0aGUgYm90dG9tZGlyOyBtZWFud2hpbGUgZ2V0RGlyKCkgYWJvdmUgZ3VhcmFudGVlcyB0aGF0ICRkaXIgaXMgYSBzdWJkaXIgb2YgYm90dG9tZGlyLCBoZW5jZSBkaXIgPj0gYm90dG9tZGlyLgorCQkkb3JpZ2luYWxfbGVnYWxfdXJsID0gJGxlZ2FsX3VybDsKKwkJZG8KKwkJeworCQkJdHJ5CisJCQl7CisJCQkJJHJ2ID0gJHRoaXMtPl9vblZpZXcoJGxlZ2FsX3VybCwgJGpzZXJyLCAkbWltZV9maWx0ZXIsICRmaWxlX3ByZXNlbGVjdF9hcmcpOworCisJCQkJJHRoaXMtPnNlbmRIdHRwSGVhZGVycygnQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJyk7CisKKwkJCQllY2hvIGpzb25fZW5jb2RlKCRydik7CisJCQkJcmV0dXJuOworCQkJfQorCQkJY2F0Y2goRmlsZU1hbmFnZXJFeGNlcHRpb24gJGUpCisJCQl7CisJCQkJaWYgKCRlbXNnID09PSBudWxsKQorCQkJCQkkZW1zZyA9ICRlLT5nZXRNZXNzYWdlKCk7CisJCQl9CisJCQljYXRjaChFeGNlcHRpb24gJGUpCisJCQl7CisJCQkJLy8gY2F0Y2hpbmcgb3RoZXIgc2V2ZXJlIGZhaWx1cmVzOyBzaW5jZSB0aGlzIGNhbiBiZSBhbnl0aGluZyBpdCBtYXkgbm90IGJlIGEgdHJhbnNsYXRpb24ga2V5d29yZCBpbiB0aGUgbWVzc2FnZS4uLgorCQkJCWlmICgkZW1zZyA9PT0gbnVsbCkKKwkJCQkJJGVtc2cgPSAkZS0+Z2V0TWVzc2FnZSgpOworCQkJfQorCisJCQkvLyBzdGVwIGRvd24gdG8gdGhlIHBhcmVudCBkaXIgYW5kIHJldHJ5OgorCQkJJGxlZ2FsX3VybCA9IHNlbGY6OmdldFBhcmVudERpcigkbGVnYWxfdXJsKTsKKwkJCSRmaWxlX3ByZXNlbGVjdF9hcmcgPSBudWxsOworCisJCQkkanNlcnJbJ3N0YXR1cyddKys7CisKKwkJfSB3aGlsZSAoJGxlZ2FsX3VybCAhPT0gZmFsc2UpOworCisJCSR0aGlzLT5tb2RpZnlfanNvbjRleGNlcHRpb24oJGpzZXJyLCAkZW1zZywgJ3BhdGggPSAnIC4gJG9yaWdpbmFsX2xlZ2FsX3VybCk7CisKKwkJJHRoaXMtPnNlbmRIdHRwSGVhZGVycygnQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJyk7CisKKwkJLy8gd2hlbiB3ZSBmYWlsIGhlcmUsIGl0J3MgcHJldHR5IGRhcm4gYmFkIGFuZCBub3RoaW5nIHRvIGl0LgorCQkvLyBqdXN0IHB1c2ggdGhlIGVycm9yIEpTT04gYW5kIGdvLgorCQllY2hvIGpzb25fZW5jb2RlKCRqc2Vycik7CisJfQorCisJLyoqCisJICogUHJvY2VzcyB0aGUgJ2RldGFpbCcgZXZlbnQKKwkgKgorCSAqIFJldHVybnMgYSBKU09OIGVuY29kZWQgSFRNTCBjaHVuayBkZXNjcmliaW5nIHRoZSBzcGVjaWZpZWQgZmlsZSAobWV0YWRhdGEgc3VjaAorCSAqIGFzIHNpemUsIGZvcm1hdCBhbmQgcG9zc2libHkgYSB0aHVtYm5haWwgaW1hZ2UgYXMgd2VsbCkKKwkgKgorCSAqIEV4cGVjdGVkIHBhcmFtZXRlcnM6CisJICoKKwkgKiAkX1BPU1RbJ2RpcmVjdG9yeSddICAgICBwYXRoIHJlbGF0aXZlIHRvIGJhc2VkaXIgYS5rLmEuIG9wdGlvbnNbJ2RpcmVjdG9yeSddIHJvb3QKKwkgKgorCSAqICRfUE9TVFsnZmlsZSddICAgICAgICAgIGZpbGVuYW1lIChpbmNsdWRpbmcgZXh0ZW5zaW9uLCBvZiBjb3Vyc2UpIG9mIHRoZSBmaWxlIHRvCisJICogICAgICAgICAgICAgICAgICAgICAgICAgYmUgZGV0YWlsZWQuCisJICoKKwkgKiAkX1BPU1RbJ2ZpbHRlciddICAgICAgICBvcHRpb25hbCBtaW1ldHlwZSBmaWx0ZXIgc3RyaW5nLCBhbXkgYmUgdGhlIHBhcnQgdXAgdG8gYW5kCisJICogICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHRoZSBzbGFzaCAnLycgb3IgdGhlIGZ1bGwgbWltZXR5cGUuIE9ubHkgZmlsZXMKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGluZyB0aGlzIChzZXQgb2YpIG1pbWV0eXBlcyB3aWxsIGJlIGxpc3RlZC4KKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICBFeGFtcGxlczogJ2ltYWdlLycgb3IgJ2FwcGxpY2F0aW9uL3ppcCcKKwkgKgorCSAqICRfUE9TVFsnbW9kZSddICAgICAgICAgICdhdXRvJyBvciAnZGlyZWN0JzogaW4gJ2RpcmVjdCcgbW9kZSwgYWxsIHRodW1ibmFpbHMgYXJlCisJICogICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2libHkgZ2VuZXJhdGVkIF9yaWdodF8gX25vd18gYXMgdGhlIGNsaWVudCwgdXNpbmcgdGhpcworCSAqICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUsIHRlbGxzIHVzIGRlbGF5ZWQgZ2VuZXJhdGluZyBhbmQgbG9hZGluZyBvZiB0aGUKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICB0aHVtYm5haWwgaW1hZ2UocykgaXMgb3V0IG9mIHRoZSBxdWVzdGlvbi4KKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAnYXV0bycgbW9kZSB3aWxsIHNpbXBseSBwcm92aWRlIGRpcmVjdCB0aHVtYm5haWwgaW1hZ2UKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICBVUkxzIHdoZW4gdGhvc2UgYXJlIGF2YWlsYWJsZSBpbiBjYWNoZSwgd2hpbGUgJ2F1dG8nIG1vZGUKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIG5lZ2xlY3QgdG8gcHJvdmlkZSB0aG9zZSwgZXhwZWN0aW5nIHRoZSBmcm9udGVuZCB0bworCSAqICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5LWxvYWQgdGhlbSB0aHJvdWdoIGFub3RoZXIgJ2V2ZW50PWRldGFpbCAvIG1vZGU9ZGlyZWN0JworCSAqICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgbGF0ZXIgb24uCisJICogICAgICAgICAgICAgICAgICAgICAgICAgJ21ldGFIVE1MJzogc2hvdyB0aGUgbWV0YWRhdGEgYXMgZXh0cmEgSFRNTCBjb250ZW50IGluIAorCSAqICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcmV2aWV3IHBhbmUgKHlvdSBjYW4gYWxzbyB0dXJuIHRoYXQgb2ZmIHVzaW5nIENTUzoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmZpbGVtYW5hZ2VyIGRpdi5maWxlbWFuYWdlci1kaWFnLWR1bXAgCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAnbWV0YUpTT04nOiBkZWxpdmVyIHRoZSBleHRyYSBnZXRJRDMgbWV0YWRhdGEgaW4gSlNPTiBmb3JtYXQKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUganNvblsnbWV0YWRhdGEnXSBmaWVsZC4KKwkgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGVzIGNhbiBiZSBtaXhlZCBieSBhZGRpbmcgYSAnKycgYmV0d2VlbiB0aGVtLgorCSAqCisJICogRXJyb3JzIHdpbGwgcHJvZHVjZSBhIEpTT04gZW5jb2RlZCBlcnJvciByZXBvcnQsIGluY2x1ZGluZyBhdCBsZWFzdCB0d28gZmllbGRzOgorCSAqCisJICogc3RhdHVzICAgICAgICAgICAgICAgICAgMCBmb3IgZXJyb3I7IG5vbnplcm8gZm9yIHN1Y2Nlc3MKKwkgKgorCSAqIGVycm9yICAgICAgICAgICAgICAgICAgIGVycm9yIG1lc3NhZ2UKKwkgKi8KKwlwcm90ZWN0ZWQgZnVuY3Rpb24gb25EZXRhaWwoKQorCXsKKwkJJGVtc2cgPSBudWxsOworCQkkbGVnYWxfdXJsID0gbnVsbDsKKwkJJGZpbGVfYXJnID0gbnVsbDsKKwkJJGpzZXJyID0gYXJyYXkoCisJCQkJJ3N0YXR1cycgPT4gMQorCQkJKTsKKworCQl0cnkKKwkJeworCQkJJHZfZXhfY29kZSA9ICdub2ZpbGUnOworCisJCQkkbW9kZSA9ICR0aGlzLT5nZXRQT1NUcGFyYW0oJ21vZGUnKTsKKwkJCSRtb2RlID0gZXhwbG9kZSgnKycsICRtb2RlKTsKKwkJCWlmIChlbXB0eSgkbW9kZSkpCisJCQl7CisJCQkJJG1vZGUgPSBhcnJheSgpOworCQkJfQorCisJCQkkZmlsZV9hcmcgPSAkdGhpcy0+Z2V0UE9TVHBhcmFtKCdmaWxlJyk7CisKKwkJCSRkaXJfYXJnID0gJHRoaXMtPmdldFBPU1RwYXJhbSgnZGlyZWN0b3J5Jyk7CisJCQkkbGVnYWxfdXJsID0gJHRoaXMtPnJlbDJhYnNfbGVnYWxfdXJsX3BhdGgoJGRpcl9hcmcgLiAnLycpOworCisJCQkkbWltZV9maWx0ZXIgPSAkdGhpcy0+Z2V0UE9TVHBhcmFtKCdmaWx0ZXInLCAkdGhpcy0+b3B0aW9uc1snZmlsdGVyJ10pOworCQkJJG1pbWVfZmlsdGVycyA9ICR0aGlzLT5nZXRBbGxvd2VkTWltZVR5cGVzKCRtaW1lX2ZpbHRlcik7CisKKwkJCSRmaWxlbmFtZSA9IG51bGw7CisJCQkkZmlsZSA9IG51bGw7CisJCQkkbWltZSA9IG51bGw7CisJCQkkbWV0YSA9IG51bGw7CisJCQlpZiAoIWVtcHR5KCRmaWxlX2FyZykpCisJCQl7CisJCQkJJGZpbGVuYW1lID0gYmFzZW5hbWUoJGZpbGVfYXJnKTsKKwkJCQkvLyBtdXN0IG5vcm1hbGl6ZSB0aGUgY29tYm8gYXMgdGhlIHVzZXIgQ0FOIGxlZ2l0aW1hbGx5IHJlcXVlc3QgZmlsZW5hbWUgPT0gJy4nIChkaXJlY3RvcnkgZGV0YWlsIHZpZXcpIGZvciB0aGlzIGV2ZW50IQorCQkJCSRwYXRoID0gJHRoaXMtPnJlbDJhYnNfbGVnYWxfdXJsX3BhdGgoJGxlZ2FsX3VybCAuICRmaWxlbmFtZSk7CisJCQkJLy9lY2hvICIgcGF0aCA9ICRwYXRoLCAoJGxlZ2FsX3VybCAuICRmaWxlbmFtZSk7XG4iOworCQkJCSRsZWdhbF91cmwgPSAkcGF0aDsKKwkJCQkvLyBtdXN0IHRyYW5zZm9ybSBoZXJlIHNvIGFsaWFzL2V0Yy4gZXhwYW5zaW9ucyBpbnNpZGUgbGVnYWxfdXJsX3BhdGgyZmlsZV9wYXRoKCkgZ2V0IGEgY2hhbmNlOgorCQkJCSRmaWxlID0gJHRoaXMtPmxlZ2FsX3VybF9wYXRoMmZpbGVfcGF0aCgkbGVnYWxfdXJsKTsKKworCQkJCWlmIChpc19yZWFkYWJsZSgkZmlsZSkpCisJCQkJeworCQkJCQlpZiAoaXNfZmlsZSgkZmlsZSkpCisJCQkJCXsKKwkJCQkJCSRtZXRhID0gJHRoaXMtPmdldEZpbGVJbmZvKCRmaWxlLCAkbGVnYWxfdXJsKTsKKwkJCQkJCSRtaW1lID0gJG1ldGEtPmdldE1pbWVUeXBlKCk7CisJCQkJCQlpZiAoISR0aGlzLT5Jc0FsbG93ZWRNaW1lVHlwZSgkbWltZSwgJG1pbWVfZmlsdGVycykpCisJCQkJCQl7CisJCQkJCQkJJHZfZXhfY29kZSA9ICdleHRlbnNpb24nOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCSR2X2V4X2NvZGUgPSBudWxsOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UgaWYgKGlzX2RpcigkZmlsZSkpCisJCQkJCXsKKwkJCQkJCSRtaW1lID0gJ3RleHQvZGlyZWN0b3J5JzsKKwkJCQkJCSR2X2V4X2NvZGUgPSBudWxsOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQkkZmlsZWluZm8gPSBhcnJheSgKKwkJCQkJJ2xlZ2FsX3VybCcgPT4gJGxlZ2FsX3VybCwKKwkJCQkJJ2ZpbGUnID0+ICRmaWxlLAorCQkJCQknbW9kZScgPT4gJG1vZGUsCisJCQkJCSdtZXRhX2RhdGEnID0+ICRtZXRhLAorCQkJCQknbWltZScgPT4gJG1pbWUsCisJCQkJCSdtaW1lX2ZpbHRlcicgPT4gJG1pbWVfZmlsdGVyLAorCQkJCQknbWltZV9maWx0ZXJzJyA9PiAkbWltZV9maWx0ZXJzLAorCQkJCQkncHJlbGltaW5hcnlfanNvbicgPT4gJGpzZXJyLAorCQkJCQkndmFsaWRhdGlvbl9mYWlsdXJlJyA9PiAkdl9leF9jb2RlCisJCQkJKTsKKworCQkJaWYgKCFlbXB0eSgkdGhpcy0+b3B0aW9uc1snRGV0YWlsSXNBdXRob3JpemVkX2NiJ10pICYmIGZ1bmN0aW9uX2V4aXN0cygkdGhpcy0+b3B0aW9uc1snRGV0YWlsSXNBdXRob3JpemVkX2NiJ10pICYmICEkdGhpcy0+b3B0aW9uc1snRGV0YWlsSXNBdXRob3JpemVkX2NiJ10oJHRoaXMsICdkZXRhaWwnLCAkZmlsZWluZm8pKQorCQkJeworCQkJCSR2X2V4X2NvZGUgPSAkZmlsZWluZm9bJ3ZhbGlkYXRpb25fZmFpbHVyZSddOworCQkJCWlmIChlbXB0eSgkdl9leF9jb2RlKSkgJHZfZXhfY29kZSA9ICdhdXRob3JpemVkJzsKKwkJCX0KKwkJCWlmICghZW1wdHkoJHZfZXhfY29kZSkpCisJCQkJdGhyb3cgbmV3IEZpbGVNYW5hZ2VyRXhjZXB0aW9uKCR2X2V4X2NvZGUpOworCisJCQkkbGVnYWxfdXJsID0gJGZpbGVpbmZvWydsZWdhbF91cmwnXTsKKwkJCS8vJGZpbGUgPSAkZmlsZWluZm9bJ2ZpbGUnXTsKKwkJCSRtb2RlID0gJGZpbGVpbmZvWydtb2RlJ107CisJCQkkbWV0YSA9ICRmaWxlaW5mb1snbWV0YV9kYXRhJ107CisJCQkvLyRtaW1lID0gJGZpbGVpbmZvWydtaW1lJ107CisJCQkkbWltZV9maWx0ZXIgPSAkZmlsZWluZm9bJ21pbWVfZmlsdGVyJ107CisJCQkkbWltZV9maWx0ZXJzID0gJGZpbGVpbmZvWydtaW1lX2ZpbHRlcnMnXTsKKwkJCSRqc2VyciA9ICRmaWxlaW5mb1sncHJlbGltaW5hcnlfanNvbiddOworCisJCQkkanNlcnIgPSAkdGhpcy0+ZXh0cmFjdERldGFpbEluZm8oJGpzZXJyLCAkbGVnYWxfdXJsLCAkbWV0YSwgJG1pbWVfZmlsdGVyLCAkbWltZV9maWx0ZXJzLCAkbW9kZSk7CisKKwkJCSR0aGlzLT5zZW5kSHR0cEhlYWRlcnMoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbicpOworCisJCQllY2hvIGpzb25fZW5jb2RlKCRqc2Vycik7CisJCQlyZXR1cm47CisJCX0KKwkJY2F0Y2goRmlsZU1hbmFnZXJFeGNlcHRpb24gJGUpCisJCXsKKwkJCSRlbXNnID0gJGUtPmdldE1lc3NhZ2UoKTsKKwkJfQorCQljYXRjaChFeGNlcHRpb24gJGUpCisJCXsKKwkJCS8vIGNhdGNoaW5nIG90aGVyIHNldmVyZSBmYWlsdXJlczsgc2luY2UgdGhpcyBjYW4gYmUgYW55dGhpbmcgYW5kIHNob3VsZCBvbmx5IGhhcHBlbiBpbiB0aGUgZGlyZXN0IG9mIGNpcmN1bXN0YW5jZXMsIHdlIGRvbid0IGJvdGhlciB0cmFuc2xhdGluZworCQkJJGVtc2cgPSAkZS0+Z2V0TWVzc2FnZSgpOworCQl9CisKKwkJJHRoaXMtPm1vZGlmeV9qc29uNGV4Y2VwdGlvbigkanNlcnIsICRlbXNnLCAnZmlsZSA9ICcgLiAkZmlsZV9hcmcgLiAnLCBwYXRoID0gJyAuICRsZWdhbF91cmwpOworCisJCSRpY29uNDggPSAkdGhpcy0+Z2V0SWNvbkZvckVycm9yKCRlbXNnLCAnaXMuZGVmYXVsdC1lcnJvcicsIGZhbHNlKTsKKwkJJGljb240OF9lID0gRmlsZU1hbmFnZXJVdGlsaXR5OjpyYXd1cmxlbmNvZGVfcGF0aCgkaWNvbjQ4KTsKKwkJJGljb24gPSAkdGhpcy0+Z2V0SWNvbkZvckVycm9yKCRlbXNnLCAnaXMuZGVmYXVsdC1lcnJvcicsIHRydWUpOworCQkkaWNvbl9lID0gRmlsZU1hbmFnZXJVdGlsaXR5OjpyYXd1cmxlbmNvZGVfcGF0aCgkaWNvbik7CisJCSRqc2VyclsndGh1bWIyNTAnXSA9IG51bGw7CisJCSRqc2VyclsndGh1bWI0OCddID0gbnVsbDsKKwkJJGpzZXJyWydpY29uNDgnXSA9ICRpY29uNDhfZTsKKwkJJGpzZXJyWydpY29uJ10gPSAkaWNvbl9lOworCisJCSRwb3N0ZGlhZ19lcnJfSFRNTCA9ICc8cCBjbGFzcz0iZXJyX2luZm8iPicgLiAkZW1zZyAuICc8L3A+JzsKKwkJJHByZXZpZXdfSFRNTCA9ICcke25vcHJldmlld30nOworCQkkY29udGVudCA9ICcnOworCQkvLyRjb250ZW50IC49ICc8aDM+JHtwcmV2aWV3fTwvaDM+JzsKKwkJJGNvbnRlbnQgLj0gJzxkaXYgY2xhc3M9ImZpbGVtYW5hZ2VyLXByZXZpZXctY29udGVudCI+JyAuICRwcmV2aWV3X0hUTUwgLiAnPC9kaXY+JzsKKwkJLy8kY29udGVudCAuPSAnPGgzPkRpYWdub3N0aWNzPC9oMz4nOworCQkvLyRjb250ZW50IC49ICc8ZGl2IGNsYXNzPSJmaWxlbWFuYWdlci1kZXRhaWwtZGlhZyI+OworCQkkY29udGVudCAuPSAnPGRpdiBjbGFzcz0iZmlsZW1hbmFnZXItZXJyb3JzIj4nIC4gJHBvc3RkaWFnX2Vycl9IVE1MIC4gJzwvZGl2Pic7CisJCS8vJGNvbnRlbnQgLj0gJzwvZGl2Pic7CisKKwkJJGpzb25bJ2NvbnRlbnQnXSA9IHNlbGY6OmNvbXByZXNzSFRNTCgkY29udGVudCk7CisKKwkJJHRoaXMtPnNlbmRIdHRwSGVhZGVycygnQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJyk7CisKKwkJLy8gd2hlbiB3ZSBmYWlsIGhlcmUsIGl0J3MgcHJldHR5IGRhcm4gYmFkIGFuZCBub3RoaW5nIHRvIGl0LgorCQkvLyBqdXN0IHB1c2ggdGhlIGVycm9yIEpTT04gYW5kIGdvLgorCQllY2hvIGpzb25fZW5jb2RlKCRqc2Vycik7CisJfQorCisJLyoqCisJICogUHJvY2VzcyB0aGUgJ2Rlc3Ryb3knIGV2ZW50CisJICoKKwkgKiBEZWxldGUgdGhlIHNwZWNpZmllZCBmaWxlIG9yIGRpcmVjdG9yeSBhbmQgcmV0dXJuIGEgSlNPTiBlbmNvZGVkIHN0YXR1cyBvZiBzdWNjZXNzCisJICogb3IgZmFpbHVyZS4KKwkgKgorCSAqIE5vdGUgdGhhdCB3aGVuIGltYWdlcyBhcmUgZGVsZXRlZCwgc28gYXJlIHRoZWlyIHRodW1ibmFpbHMuCisJICoKKwkgKiBFeHBlY3RlZCBwYXJhbWV0ZXJzOgorCSAqCisJICogJF9QT1NUWydkaXJlY3RvcnknXSAgICAgcGF0aCByZWxhdGl2ZSB0byBiYXNlZGlyIGEuay5hLiBvcHRpb25zWydkaXJlY3RvcnknXSByb290CisJICoKKwkgKiAkX1BPU1RbJ2ZpbGUnXSAgICAgICAgICBmaWxlbmFtZSAoaW5jbHVkaW5nIGV4dGVuc2lvbiwgb2YgY291cnNlKSBvZiB0aGUgZmlsZSB0bworCSAqICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGRldGFpbGVkLgorCSAqCisJICogJF9QT1NUWydmaWx0ZXInXSAgICAgICAgb3B0aW9uYWwgbWltZXR5cGUgZmlsdGVyIHN0cmluZywgYW15IGJlIHRoZSBwYXJ0IHVwIHRvIGFuZAorCSAqICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGluZyB0aGUgc2xhc2ggJy8nIG9yIHRoZSBmdWxsIG1pbWV0eXBlLiBPbmx5IGZpbGVzCisJICogICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmcgdGhpcyAoc2V0IG9mKSBtaW1ldHlwZXMgd2lsbCBiZSBsaXN0ZWQuCisJICogICAgICAgICAgICAgICAgICAgICAgICAgRXhhbXBsZXM6ICdpbWFnZS8nIG9yICdhcHBsaWNhdGlvbi96aXAnCisJICoKKwkgKiBFcnJvcnMgd2lsbCBwcm9kdWNlIGEgSlNPTiBlbmNvZGVkIGVycm9yIHJlcG9ydCwgaW5jbHVkaW5nIGF0IGxlYXN0IHR3byBmaWVsZHM6CisJICoKKwkgKiBzdGF0dXMgICAgICAgICAgICAgICAgICAwIGZvciBlcnJvcjsgbm9uemVybyBmb3Igc3VjY2VzcworCSAqCisJICogZXJyb3IgICAgICAgICAgICAgICAgICAgZXJyb3IgbWVzc2FnZQorCSAqLworCXByb3RlY3RlZCBmdW5jdGlvbiBvbkRlc3Ryb3koKQorCXsKKwkJJGVtc2cgPSBudWxsOworCQkkZmlsZV9hcmcgPSBudWxsOworCQkkbGVnYWxfdXJsID0gbnVsbDsKKwkJJGpzZXJyID0gYXJyYXkoCisJCQkJJ3N0YXR1cycgPT4gMQorCQkJKTsKKworCQl0cnkKKwkJeworCQkJaWYgKCEkdGhpcy0+b3B0aW9uc1snZGVzdHJveSddKQorCQkJCXRocm93IG5ldyBGaWxlTWFuYWdlckV4Y2VwdGlvbignZGlzYWJsZWQ6ZGVzdHJveScpOworCisJCQkkdl9leF9jb2RlID0gJ25vZmlsZSc7CisKKwkJCSRmaWxlX2FyZyA9ICR0aGlzLT5nZXRQT1NUcGFyYW0oJ2ZpbGUnKTsKKworCQkJJGRpcl9hcmcgPSAkdGhpcy0+Z2V0UE9TVHBhcmFtKCdkaXJlY3RvcnknKTsKKwkJCSRsZWdhbF91cmwgPSAkdGhpcy0+cmVsMmFic19sZWdhbF91cmxfcGF0aCgkZGlyX2FyZyAuICcvJyk7CisKKwkJCSRtaW1lX2ZpbHRlciA9ICR0aGlzLT5nZXRQT1NUcGFyYW0oJ2ZpbHRlcicsICR0aGlzLT5vcHRpb25zWydmaWx0ZXInXSk7CisJCQkkbWltZV9maWx0ZXJzID0gJHRoaXMtPmdldEFsbG93ZWRNaW1lVHlwZXMoJG1pbWVfZmlsdGVyKTsKKworCQkJJGZpbGVuYW1lID0gbnVsbDsKKwkJCSRmaWxlID0gbnVsbDsKKwkJCSRtaW1lID0gbnVsbDsKKwkJCSRtZXRhID0gbnVsbDsKKwkJCWlmICghZW1wdHkoJGZpbGVfYXJnKSkKKwkJCXsKKwkJCQkkZmlsZW5hbWUgPSBiYXNlbmFtZSgkZmlsZV9hcmcpOworCQkJCSRsZWdhbF91cmwgLj0gJGZpbGVuYW1lOworCQkJCS8vIG11c3QgdHJhbnNmb3JtIGhlcmUgc28gYWxpYXMvZXRjLiBleHBhbnNpb25zIGluc2lkZSBsZWdhbF91cmxfcGF0aDJmaWxlX3BhdGgoKSBnZXQgYSBjaGFuY2U6CisJCQkJJGZpbGUgPSAkdGhpcy0+bGVnYWxfdXJsX3BhdGgyZmlsZV9wYXRoKCRsZWdhbF91cmwpOworCisJCQkJaWYgKGZpbGVfZXhpc3RzKCRmaWxlKSkKKwkJCQl7CisJCQkJCWlmIChpc19maWxlKCRmaWxlKSkKKwkJCQkJeworCQkJCQkJJG1ldGEgPSAkdGhpcy0+Z2V0RmlsZUluZm8oJGZpbGUsICRsZWdhbF91cmwpOworCQkJCQkJJG1pbWUgPSAkbWV0YS0+Z2V0TWltZVR5cGUoKTsKKwkJCQkJCWlmICghJHRoaXMtPklzQWxsb3dlZE1pbWVUeXBlKCRtaW1lLCAkbWltZV9maWx0ZXJzKSkKKwkJCQkJCXsKKwkJCQkJCQkkdl9leF9jb2RlID0gJ2V4dGVuc2lvbic7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJJHZfZXhfY29kZSA9IG51bGw7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZWxzZSBpZiAoaXNfZGlyKCRmaWxlKSkKKwkJCQkJeworCQkJCQkJJG1pbWUgPSAndGV4dC9kaXJlY3RvcnknOworCQkJCQkJJHZfZXhfY29kZSA9IG51bGw7CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCSRmaWxlaW5mbyA9IGFycmF5KAorCQkJCQknbGVnYWxfdXJsJyA9PiAkbGVnYWxfdXJsLAorCQkJCQknZmlsZScgPT4gJGZpbGUsCisJCQkJCSdtaW1lJyA9PiAkbWltZSwKKwkJCQkJJ21ldGFfZGF0YScgPT4gJG1ldGEsCisJCQkJCSdtaW1lX2ZpbHRlcicgPT4gJG1pbWVfZmlsdGVyLAorCQkJCQknbWltZV9maWx0ZXJzJyA9PiAkbWltZV9maWx0ZXJzLAorCQkJCQkncHJlbGltaW5hcnlfanNvbicgPT4gJGpzZXJyLAorCQkJCQkndmFsaWRhdGlvbl9mYWlsdXJlJyA9PiAkdl9leF9jb2RlCisJCQkJKTsKKworCQkJaWYgKCFlbXB0eSgkdGhpcy0+b3B0aW9uc1snRGVzdHJveUlzQXV0aG9yaXplZF9jYiddKSAmJiBmdW5jdGlvbl9leGlzdHMoJHRoaXMtPm9wdGlvbnNbJ0Rlc3Ryb3lJc0F1dGhvcml6ZWRfY2InXSkgJiYgISR0aGlzLT5vcHRpb25zWydEZXN0cm95SXNBdXRob3JpemVkX2NiJ10oJHRoaXMsICdkZXN0cm95JywgJGZpbGVpbmZvKSkKKwkJCXsKKwkJCQkkdl9leF9jb2RlID0gJGZpbGVpbmZvWyd2YWxpZGF0aW9uX2ZhaWx1cmUnXTsKKwkJCQlpZiAoZW1wdHkoJHZfZXhfY29kZSkpICR2X2V4X2NvZGUgPSAnYXV0aG9yaXplZCc7CisJCQl9CisJCQlpZiAoIWVtcHR5KCR2X2V4X2NvZGUpKQorCQkJCXRocm93IG5ldyBGaWxlTWFuYWdlckV4Y2VwdGlvbigkdl9leF9jb2RlKTsKKworCQkJJGxlZ2FsX3VybCA9ICRmaWxlaW5mb1snbGVnYWxfdXJsJ107CisJCQkkZmlsZSA9ICRmaWxlaW5mb1snZmlsZSddOworCQkJJG1ldGEgPSAkZmlsZWluZm9bJ21ldGFfZGF0YSddOworCQkJJG1pbWUgPSAkZmlsZWluZm9bJ21pbWUnXTsKKwkJCSRtaW1lX2ZpbHRlciA9ICRmaWxlaW5mb1snbWltZV9maWx0ZXInXTsKKwkJCSRtaW1lX2ZpbHRlcnMgPSAkZmlsZWluZm9bJ21pbWVfZmlsdGVycyddOworCQkJJGpzZXJyID0gJGZpbGVpbmZvWydwcmVsaW1pbmFyeV9qc29uJ107CisKKwkJCWlmICghJHRoaXMtPnVubGluaygkbGVnYWxfdXJsLCAkbWltZV9maWx0ZXJzKSkKKwkJCXsKKwkJCQl0aHJvdyBuZXcgRmlsZU1hbmFnZXJFeGNlcHRpb24oJ3VubGlua19mYWlsZWQ6JyAuICRsZWdhbF91cmwpOworCQkJfQorCisJCQkkdGhpcy0+c2VuZEh0dHBIZWFkZXJzKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nKTsKKworCQkJZWNobyBqc29uX2VuY29kZShhcnJheSgKKwkJCQkJJ3N0YXR1cycgPT4gMSwKKwkJCQkJJ2NvbnRlbnQnID0+ICdkZXN0cm95ZWQnCisJCQkJKSk7CisJCQkKKwkJCWlmICghZW1wdHkoJHRoaXMtPm9wdGlvbnNbJ0Rlc3Ryb3lJc0NvbXBsZXRlX2NiJ10pICYmIGZ1bmN0aW9uX2V4aXN0cygkdGhpcy0+b3B0aW9uc1snRGVzdHJveUlzQ29tcGxldGVfY2InXSkpCisJCQkJJHRoaXMtPm9wdGlvbnNbJ0Rlc3Ryb3lJc0NvbXBsZXRlX2NiJ10oJHRoaXMsICdkZXN0cm95JywgJGZpbGVpbmZvKTsJCisJCQkKKwkJCXJldHVybjsKKwkJfQorCQljYXRjaChGaWxlTWFuYWdlckV4Y2VwdGlvbiAkZSkKKwkJeworCQkJJGVtc2cgPSAkZS0+Z2V0TWVzc2FnZSgpOworCQl9CisJCWNhdGNoKEV4Y2VwdGlvbiAkZSkKKwkJeworCQkJLy8gY2F0Y2hpbmcgb3RoZXIgc2V2ZXJlIGZhaWx1cmVzOyBzaW5jZSB0aGlzIGNhbiBiZSBhbnl0aGluZyBhbmQgc2hvdWxkIG9ubHkgaGFwcGVuIGluIHRoZSBkaXJlc3Qgb2YgY2lyY3Vtc3RhbmNlcywgd2UgZG9uJ3QgYm90aGVyIHRyYW5zbGF0aW5nCisJCQkkZW1zZyA9ICRlLT5nZXRNZXNzYWdlKCk7CisJCX0KKworCQkkdGhpcy0+bW9kaWZ5X2pzb240ZXhjZXB0aW9uKCRqc2VyciwgJGVtc2csICdmaWxlID0gJyAuICRmaWxlX2FyZyAuICcsIHBhdGggPSAnIC4gJGxlZ2FsX3VybCk7CisKKwkJJHRoaXMtPnNlbmRIdHRwSGVhZGVycygnQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJyk7CisKKwkJLy8gd2hlbiB3ZSBmYWlsIGhlcmUsIGl0J3MgcHJldHR5IGRhcm4gYmFkIGFuZCBub3RoaW5nIHRvIGl0LgorCQkvLyBqdXN0IHB1c2ggdGhlIGVycm9yIEpTT04gYW5kIGdvLgorCQllY2hvIGpzb25fZW5jb2RlKCRqc2Vycik7CisJfQorCisJLyoqCisJICogUHJvY2VzcyB0aGUgJ2NyZWF0ZScgZXZlbnQKKwkgKgorCSAqIENyZWF0ZSB0aGUgc3BlY2lmaWVkIHN1YmRpcmVjdG9yeSBhbmQgZ2l2ZSBpdCB0aGUgY29uZmlndXJlZCBwZXJtaXNzaW9ucworCSAqIChvcHRpb25zWydjaG1vZCddLCBkZWZhdWx0IDA3NzcpIGFuZCByZXR1cm4gYSBKU09OIGVuY29kZWQgc3RhdHVzIG9mIHN1Y2Nlc3MKKwkgKiBvciBmYWlsdXJlLgorCSAqCisJICogRXhwZWN0ZWQgcGFyYW1ldGVyczoKKwkgKgorCSAqICRfUE9TVFsnZGlyZWN0b3J5J10gICAgIHBhdGggcmVsYXRpdmUgdG8gYmFzZWRpciBhLmsuYS4gb3B0aW9uc1snZGlyZWN0b3J5J10gcm9vdAorCSAqCisJICogJF9QT1NUWydmaWxlJ10gICAgICAgICAgbmFtZSBvZiB0aGUgc3ViZGlyZWN0b3J5IHRvIGJlIGNyZWF0ZWQKKwkgKgorCSAqIEV4dHJhIGlucHV0IHBhcmFtZXRlcnMgY29uc2lkZXJlZCB3aGlsZSBwcm9kdWNpbmcgdGhlIEpTT04gZW5jb2RlZCBkaXJlY3Rvcnkgdmlldy4KKwkgKiBUaGVzZSBtYXkgbm90IHNlZW0gcmVsZXZhbnQgZm9yIGFuIGVtcHR5IGRpcmVjdG9yeSwgYnV0IHRoZXNlIHBhcmFtZXRlcnMgYXJlIGFsc28KKwkgKiBjb25zaWRlcmVkIHdoZW4gcHJvdmlkaW5nIHRoZSBmYWxsYmFjayBkaXJlY3RvcnkgdmlldyBpbiBjYXNlIGFuIGVycm9yIG9jY3VycmVkCisJICogYW5kIHRoZW4gdGhlIGxpc3RlZCBkaXJlY3RvcnkgKGVpdGhlciB0aGUgcGFyZW50IG9yIHRoZSBiYXNlZGlyIGl0c2VsZikgbWF5IHZlcnkKKwkgKiBsaWtlbHkgbm90IGJlIGVtcHR5IQorCSAqCisJICogJF9QT1NUWydmaWx0ZXInXSAgICAgICAgb3B0aW9uYWwgbWltZXR5cGUgZmlsdGVyIHN0cmluZywgYW15IGJlIHRoZSBwYXJ0IHVwIHRvIGFuZAorCSAqICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGluZyB0aGUgc2xhc2ggJy8nIG9yIHRoZSBmdWxsIG1pbWV0eXBlLiBPbmx5IGZpbGVzCisJICogICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmcgdGhpcyAoc2V0IG9mKSBtaW1ldHlwZXMgd2lsbCBiZSBsaXN0ZWQuCisJICogICAgICAgICAgICAgICAgICAgICAgICAgRXhhbXBsZXM6ICdpbWFnZS8nIG9yICdhcHBsaWNhdGlvbi96aXAnCisJICoKKwkgKiBFcnJvcnMgd2lsbCBwcm9kdWNlIGEgSlNPTiBlbmNvZGVkIGVycm9yIHJlcG9ydCwgaW5jbHVkaW5nIGF0IGxlYXN0IHR3byBmaWVsZHM6CisJICoKKwkgKiBzdGF0dXMgICAgICAgICAgICAgICAgICAwIGZvciBlcnJvcjsgbm9uemVybyBmb3Igc3VjY2VzcworCSAqCisJICogZXJyb3IgICAgICAgICAgICAgICAgICAgZXJyb3IgbWVzc2FnZQorCSAqLworCXByb3RlY3RlZCBmdW5jdGlvbiBvbkNyZWF0ZSgpCisJeworCQkkZW1zZyA9IG51bGw7CisJCSRqc2VyciA9IGFycmF5KAorCQkJCSdzdGF0dXMnID0+IDEKKwkJCSk7CisKKwkJJG1pbWVfZmlsdGVyID0gJHRoaXMtPmdldFBPU1RwYXJhbSgnZmlsdGVyJywgJHRoaXMtPm9wdGlvbnNbJ2ZpbHRlciddKTsKKworCQkkZmlsZV9hcmcgPSBudWxsOworCQkkbGVnYWxfdXJsID0gbnVsbDsKKworCQl0cnkKKwkJeworCQkJaWYgKCEkdGhpcy0+b3B0aW9uc1snY3JlYXRlJ10pCisJCQkJdGhyb3cgbmV3IEZpbGVNYW5hZ2VyRXhjZXB0aW9uKCdkaXNhYmxlZDpjcmVhdGUnKTsKKworCQkJJHZfZXhfY29kZSA9ICdub2ZpbGUnOworCisJCQkkZmlsZV9hcmcgPSAkdGhpcy0+Z2V0UE9TVHBhcmFtKCdmaWxlJyk7CisKKwkJCSRkaXJfYXJnID0gJHRoaXMtPmdldFBPU1RwYXJhbSgnZGlyZWN0b3J5Jyk7CisJCQkkbGVnYWxfdXJsID0gJHRoaXMtPnJlbDJhYnNfbGVnYWxfdXJsX3BhdGgoJGRpcl9hcmcgLiAnLycpOworCisJCQkvLyBtdXN0IHRyYW5zZm9ybSBoZXJlIHNvIGFsaWFzL2V0Yy4gZXhwYW5zaW9ucyBpbnNpZGUgbGVnYWxfdXJsX3BhdGgyZmlsZV9wYXRoKCkgZ2V0IGEgY2hhbmNlOgorCQkJJGRpciA9ICR0aGlzLT5sZWdhbF91cmxfcGF0aDJmaWxlX3BhdGgoJGxlZ2FsX3VybCk7CisKKwkJCSRmaWxlbmFtZSA9IG51bGw7CisJCQkkZmlsZSA9IG51bGw7CisJCQkkbmV3ZGlyID0gbnVsbDsKKwkJCWlmICghZW1wdHkoJGZpbGVfYXJnKSkKKwkJCXsKKwkJCQkkZmlsZW5hbWUgPSBiYXNlbmFtZSgkZmlsZV9hcmcpOworCisJCQkJaWYgKCEkdGhpcy0+SXNIaWRkZW5OYW1lQWxsb3dlZCgkZmlsZV9hcmcpKQorCQkJCXsKKwkJCQkJJHZfZXhfY29kZSA9ICdhdXRob3JpemVkJzsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJaWYgKGlzX2RpcigkZGlyKSkKKwkJCQkJeworCQkJCQkJJGZpbGUgPSAkdGhpcy0+Z2V0VW5pcXVlTmFtZShhcnJheSgnZmlsZW5hbWUnID0+ICRmaWxlbmFtZSksICRkaXIpOyAgLy8gYSBkaXJlY3RvcnkgaGFzIG5vICdleHRlbnNpb24nIQorCQkJCQkJaWYgKCRmaWxlICE9PSBudWxsKQorCQkJCQkJeworCQkJCQkJCSRuZXdkaXIgPSAkdGhpcy0+bGVnYWxfdXJsX3BhdGgyZmlsZV9wYXRoKCRsZWdhbF91cmwgLiAkZmlsZSk7CisJCQkJCQkJJHZfZXhfY29kZSA9IG51bGw7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCSRmaWxlaW5mbyA9IGFycmF5KAorCQkJCQknbGVnYWxfdXJsJyA9PiAkbGVnYWxfdXJsLAorCQkJCQknZGlyJyA9PiAkZGlyLAorCQkJCQkncmF3X25hbWUnID0+ICRmaWxlbmFtZSwKKwkJCQkJJ3VuaXFfbmFtZScgPT4gJGZpbGUsCisJCQkJCSduZXdkaXInID0+ICRuZXdkaXIsCisJCQkJCSdjaG1vZCcgPT4gJHRoaXMtPm9wdGlvbnNbJ2NobW9kJ10sCisJCQkJCSdwcmVsaW1pbmFyeV9qc29uJyA9PiAkanNlcnIsCisJCQkJCSd2YWxpZGF0aW9uX2ZhaWx1cmUnID0+ICR2X2V4X2NvZGUKKwkJCQkpOworCQkJaWYgKCFlbXB0eSgkdGhpcy0+b3B0aW9uc1snQ3JlYXRlSXNBdXRob3JpemVkX2NiJ10pICYmIGZ1bmN0aW9uX2V4aXN0cygkdGhpcy0+b3B0aW9uc1snQ3JlYXRlSXNBdXRob3JpemVkX2NiJ10pICYmICEkdGhpcy0+b3B0aW9uc1snQ3JlYXRlSXNBdXRob3JpemVkX2NiJ10oJHRoaXMsICdjcmVhdGUnLCAkZmlsZWluZm8pKQorCQkJeworCQkJCSR2X2V4X2NvZGUgPSAkZmlsZWluZm9bJ3ZhbGlkYXRpb25fZmFpbHVyZSddOworCQkJCWlmIChlbXB0eSgkdl9leF9jb2RlKSkgJHZfZXhfY29kZSA9ICdhdXRob3JpemVkJzsKKwkJCX0KKwkJCWlmICghZW1wdHkoJHZfZXhfY29kZSkpCisJCQkJdGhyb3cgbmV3IEZpbGVNYW5hZ2VyRXhjZXB0aW9uKCR2X2V4X2NvZGUpOworCisJCQkkbGVnYWxfdXJsID0gJGZpbGVpbmZvWydsZWdhbF91cmwnXTsKKwkJCSRkaXIgPSAkZmlsZWluZm9bJ2RpciddOworCQkJJGZpbGVuYW1lID0gJGZpbGVpbmZvWydyYXdfbmFtZSddOworCQkJJGZpbGUgPSAkZmlsZWluZm9bJ3VuaXFfbmFtZSddOworCQkJJG5ld2RpciA9ICRmaWxlaW5mb1snbmV3ZGlyJ107CisJCQkkanNlcnIgPSAkZmlsZWluZm9bJ3ByZWxpbWluYXJ5X2pzb24nXTsKKworCQkJaWYgKCFAbWtkaXIoJG5ld2RpciwgJGZpbGVpbmZvWydjaG1vZCddLCB0cnVlKSkKKwkJCXsKKwkJCQl0aHJvdyBuZXcgRmlsZU1hbmFnZXJFeGNlcHRpb24oJ21rZGlyX2ZhaWxlZDonIC4gJHRoaXMtPmxlZ2FsMmFic191cmxfcGF0aCgkbGVnYWxfdXJsKSAuICRmaWxlKTsKKwkJCX0KKworCQkJJHRoaXMtPnNlbmRIdHRwSGVhZGVycygnQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJyk7CisKKwkJCS8vIHN1Y2Nlc3MsIG5vdyBzaG93IHRoZSBuZXcgZGlyZWN0b3J5IGFzIGEgbGlzdCB2aWV3OgorCQkJJHJ2ID0gJHRoaXMtPl9vblZpZXcoJGxlZ2FsX3VybCAuICRmaWxlIC4gJy8nLCAkanNlcnIsICRtaW1lX2ZpbHRlcik7CisKKwkJCWVjaG8ganNvbl9lbmNvZGUoJHJ2KTsKKwkJCXJldHVybjsKKwkJfQorCQljYXRjaChGaWxlTWFuYWdlckV4Y2VwdGlvbiAkZSkKKwkJeworCQkJJGVtc2cgPSAkZS0+Z2V0TWVzc2FnZSgpOworCisJCQkkanNlcnJbJ3N0YXR1cyddID0gMDsKKworCQkJLy8gYW5kIGZhbGwgYmFjayB0byBzaG93aW5nIHRoZSBQQVJFTlQgZGlyZWN0b3J5CisJCQl0cnkKKwkJCXsKKwkJCQkkanNlcnIgPSAkdGhpcy0+X29uVmlldygkbGVnYWxfdXJsLCAkanNlcnIsICRtaW1lX2ZpbHRlcik7CisJCQl9CisJCQljYXRjaCAoRXhjZXB0aW9uICRlKQorCQkJeworCQkJCS8vIGFuZCBmYWxsIGJhY2sgdG8gc2hvd2luZyB0aGUgQkFTRURJUiBkaXJlY3RvcnkKKwkJCQl0cnkKKwkJCQl7CisJCQkJCSRsZWdhbF91cmwgPSAkdGhpcy0+b3B0aW9uc1snZGlyZWN0b3J5J107CisJCQkJCSRqc2VyciA9ICR0aGlzLT5fb25WaWV3KCRsZWdhbF91cmwsICRqc2VyciwgJG1pbWVfZmlsdGVyKTsKKwkJCQl9CisJCQkJY2F0Y2ggKEV4Y2VwdGlvbiAkZSkKKwkJCQl7CisJCQkJCS8vIHdoZW4gd2UgZmFpbCBoZXJlLCBpdCdzIHByZXR0eSBkYXJuIGJhZCBhbmQgbm90aGluZyB0byBpdC4KKwkJCQkJLy8ganVzdCBwdXNoIHRoZSBlcnJvciBKU09OIGFuZCBnby4KKwkJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2goRXhjZXB0aW9uICRlKQorCQl7CisJCQkvLyBjYXRjaGluZyBvdGhlciBzZXZlcmUgZmFpbHVyZXM7IHNpbmNlIHRoaXMgY2FuIGJlIGFueXRoaW5nIGFuZCBzaG91bGQgb25seSBoYXBwZW4gaW4gdGhlIGRpcmVzdCBvZiBjaXJjdW1zdGFuY2VzLCB3ZSBkb24ndCBib3RoZXIgdHJhbnNsYXRpbmcKKwkJCSRlbXNnID0gJGUtPmdldE1lc3NhZ2UoKTsKKworCQkJJGpzZXJyWydzdGF0dXMnXSA9IDA7CisKKwkJCS8vIGFuZCBmYWxsIGJhY2sgdG8gc2hvd2luZyB0aGUgUEFSRU5UIGRpcmVjdG9yeQorCQkJdHJ5CisJCQl7CisJCQkJJGpzZXJyID0gJHRoaXMtPl9vblZpZXcoJGxlZ2FsX3VybCwgJGpzZXJyLCAkbWltZV9maWx0ZXIpOworCQkJfQorCQkJY2F0Y2ggKEV4Y2VwdGlvbiAkZSkKKwkJCXsKKwkJCQkvLyBhbmQgZmFsbCBiYWNrIHRvIHNob3dpbmcgdGhlIEJBU0VESVIgZGlyZWN0b3J5CisJCQkJdHJ5CisJCQkJeworCQkJCQkkbGVnYWxfdXJsID0gJHRoaXMtPm9wdGlvbnNbJ2RpcmVjdG9yeSddOworCQkJCQkkanNlcnIgPSAkdGhpcy0+X29uVmlldygkbGVnYWxfdXJsLCAkanNlcnIsICRtaW1lX2ZpbHRlcik7CisJCQkJfQorCQkJCWNhdGNoIChFeGNlcHRpb24gJGUpCisJCQkJeworCQkJCQkvLyB3aGVuIHdlIGZhaWwgaGVyZSwgaXQncyBwcmV0dHkgZGFybiBiYWQgYW5kIG5vdGhpbmcgdG8gaXQuCisJCQkJCS8vIGp1c3QgcHVzaCB0aGUgZXJyb3IgSlNPTiBhbmQgZ28uCisJCQkJfQorCQkJfQorCQl9CisKKwkJJHRoaXMtPm1vZGlmeV9qc29uNGV4Y2VwdGlvbigkanNlcnIsICRlbXNnLCAnZGlyZWN0b3J5ID0gJyAuICRmaWxlX2FyZyAuICcsIHBhdGggPSAnIC4gJGxlZ2FsX3VybCk7CisKKwkJJHRoaXMtPnNlbmRIdHRwSGVhZGVycygnQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJyk7CisKKwkJLy8gd2hlbiB3ZSBmYWlsIGhlcmUsIGl0J3MgcHJldHR5IGRhcm4gYmFkIGFuZCBub3RoaW5nIHRvIGl0LgorCQkvLyBqdXN0IHB1c2ggdGhlIGVycm9yIEpTT04gYW5kIGdvLgorCQllY2hvIGpzb25fZW5jb2RlKCRqc2Vycik7CisJfQorCisJLyoqCisJICogUHJvY2VzcyB0aGUgJ2Rvd25sb2FkJyBldmVudAorCSAqCisJICogU2VuZCB0aGUgZmlsZSBjb250ZW50IG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBmb3IgZG93bmxvYWQgYnkgdGhlIGNsaWVudC4KKwkgKiBPbmx5IGZpbGVzIHJlc2lkaW5nIHdpdGhpbiB0aGUgZGlyZWN0b3J5IHRyZWUgcm9vdGVkIGJ5IHRoZQorCSAqICdiYXNlZGlyJyAob3B0aW9uc1snZGlyZWN0b3J5J10pIHdpbGwgYmUgYWxsb3dlZCB0byBiZSBkb3dubG9hZGVkLgorCSAqCisJICogRXhwZWN0ZWQgcGFyYW1ldGVyczoKKwkgKgorCSAqICRfUE9TVFsnZmlsZSddICAgICAgICAgZmlsZXBhdGggb2YgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZAorCSAqCisJICogJF9QT1NUWydmaWx0ZXInXSAgICAgICBvcHRpb25hbCBtaW1ldHlwZSBmaWx0ZXIgc3RyaW5nLCBhbXkgYmUgdGhlIHBhcnQgdXAgdG8gYW5kCisJICogICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgdGhlIHNsYXNoICcvJyBvciB0aGUgZnVsbCBtaW1ldHlwZS4gT25seSBmaWxlcworCSAqICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmcgdGhpcyAoc2V0IG9mKSBtaW1ldHlwZXMgd2lsbCBiZSBsaXN0ZWQuCisJICogICAgICAgICAgICAgICAgICAgICAgICBFeGFtcGxlczogJ2ltYWdlLycgb3IgJ2FwcGxpY2F0aW9uL3ppcCcKKwkgKgorCSAqIE9uIGVycm9ycyBhIEhUVFAgNDAzIGVycm9yIHJlc3BvbnNlIHdpbGwgYmUgc2VudCBpbnN0ZWFkLgorCSAqLworCXByb3RlY3RlZCBmdW5jdGlvbiBvbkRvd25sb2FkKCkKKwl7CisJCSRlbXNnID0gbnVsbDsKKwkJJGZpbGVfYXJnID0gbnVsbDsKKwkJJGZpbGUgPSBudWxsOworCQkkanNlcnIgPSBhcnJheSgKKwkJCQknc3RhdHVzJyA9PiAxCisJCQkpOworCQkKKwkJdHJ5CisJCXsKKwkJCWlmICghJHRoaXMtPm9wdGlvbnNbJ2Rvd25sb2FkJ10pCisJCQkJdGhyb3cgbmV3IEZpbGVNYW5hZ2VyRXhjZXB0aW9uKCdkaXNhYmxlZDpkb3dubG9hZCcpOworCisJCQkkdl9leF9jb2RlID0gJ25vZmlsZSc7CisKKwkJCSRmaWxlX2FyZyA9ICR0aGlzLT5nZXRQT1NUcGFyYW0oJ2ZpbGUnKTsKKworCQkJJG1pbWVfZmlsdGVyID0gJHRoaXMtPmdldFBPU1RwYXJhbSgnZmlsdGVyJywgJHRoaXMtPm9wdGlvbnNbJ2ZpbHRlciddKTsKKwkJCSRtaW1lX2ZpbHRlcnMgPSAkdGhpcy0+Z2V0QWxsb3dlZE1pbWVUeXBlcygkbWltZV9maWx0ZXIpOworCisJCQkkbGVnYWxfdXJsID0gbnVsbDsKKwkJCSRmaWxlID0gbnVsbDsKKwkJCSRtaW1lID0gbnVsbDsKKwkJCSRtZXRhID0gbnVsbDsKKwkJCWlmICghZW1wdHkoJGZpbGVfYXJnKSkKKwkJCXsKKwkJCQkkbGVnYWxfdXJsID0gJHRoaXMtPnJlbDJhYnNfbGVnYWxfdXJsX3BhdGgoJGZpbGVfYXJnKTsKKworCQkJCS8vIG11c3QgdHJhbnNmb3JtIGhlcmUgc28gYWxpYXMvZXRjLiBleHBhbnNpb25zIGluc2lkZSBsZWdhbF91cmxfcGF0aDJmaWxlX3BhdGgoKSBnZXQgYSBjaGFuY2U6CisJCQkJJGZpbGUgPSAkdGhpcy0+bGVnYWxfdXJsX3BhdGgyZmlsZV9wYXRoKCRsZWdhbF91cmwpOworCisJCQkJaWYgKGlzX3JlYWRhYmxlKCRmaWxlKSkKKwkJCQl7CisJCQkJCWlmIChpc19maWxlKCRmaWxlKSkKKwkJCQkJeworCQkJCQkJJG1ldGEgPSAkdGhpcy0+Z2V0RmlsZUluZm8oJGZpbGUsICRsZWdhbF91cmwpOworCQkJCQkJJG1pbWUgPSAkbWV0YS0+Z2V0TWltZVR5cGUoKTsKKwkJCQkJCWlmICghJHRoaXMtPklzQWxsb3dlZE1pbWVUeXBlKCRtaW1lLCAkbWltZV9maWx0ZXJzKSkKKwkJCQkJCXsKKwkJCQkJCQkkdl9leF9jb2RlID0gJ2V4dGVuc2lvbic7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJJHZfZXhfY29kZSA9IG51bGw7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkkbWltZSA9ICd0ZXh0L2RpcmVjdG9yeSc7CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCSRmaWxlaW5mbyA9IGFycmF5KAorCQkJCQknbGVnYWxfdXJsJyA9PiAkbGVnYWxfdXJsLAorCQkJCQknZmlsZScgPT4gJGZpbGUsCisJCQkJCSdtaW1lJyA9PiAkbWltZSwKKwkJCQkJJ21ldGFfZGF0YScgPT4gJG1ldGEsCisJCQkJCSdtaW1lX2ZpbHRlcicgPT4gJG1pbWVfZmlsdGVyLAorCQkJCQknbWltZV9maWx0ZXJzJyA9PiAkbWltZV9maWx0ZXJzLAorCQkJCQkndmFsaWRhdGlvbl9mYWlsdXJlJyA9PiAkdl9leF9jb2RlCisJCQkJKTsKKwkJCWlmICghZW1wdHkoJHRoaXMtPm9wdGlvbnNbJ0Rvd25sb2FkSXNBdXRob3JpemVkX2NiJ10pICYmIGZ1bmN0aW9uX2V4aXN0cygkdGhpcy0+b3B0aW9uc1snRG93bmxvYWRJc0F1dGhvcml6ZWRfY2InXSkgJiYgISR0aGlzLT5vcHRpb25zWydEb3dubG9hZElzQXV0aG9yaXplZF9jYiddKCR0aGlzLCAnZG93bmxvYWQnLCAkZmlsZWluZm8pKQorCQkJeworCQkJCSR2X2V4X2NvZGUgPSAkZmlsZWluZm9bJ3ZhbGlkYXRpb25fZmFpbHVyZSddOworCQkJCWlmIChlbXB0eSgkdl9leF9jb2RlKSkgJHZfZXhfY29kZSA9ICdhdXRob3JpemVkJzsKKwkJCX0KKwkJCWlmICghZW1wdHkoJHZfZXhfY29kZSkpCisJCQkJdGhyb3cgbmV3IEZpbGVNYW5hZ2VyRXhjZXB0aW9uKCR2X2V4X2NvZGUpOworCisJCQkkbGVnYWxfdXJsID0gJGZpbGVpbmZvWydsZWdhbF91cmwnXTsKKwkJCSRmaWxlID0gJGZpbGVpbmZvWydmaWxlJ107CisJCQkkbWV0YSA9ICRmaWxlaW5mb1snbWV0YV9kYXRhJ107CisJCQkkbWltZSA9ICRmaWxlaW5mb1snbWltZSddOworCQkJJG1pbWVfZmlsdGVyID0gJGZpbGVpbmZvWydtaW1lX2ZpbHRlciddOworCQkJJG1pbWVfZmlsdGVycyA9ICRmaWxlaW5mb1snbWltZV9maWx0ZXJzJ107CisKKworCQkJaWYgKCRmZCA9IGZvcGVuKCRmaWxlLCAncmInKSkKKwkJCXsKKwkJCQkkZnNpemUgPSBmaWxlc2l6ZSgkZmlsZSk7CisJCQkJJGZpID0gcGF0aGluZm8oJGxlZ2FsX3VybCk7CisJCQkJCisJCQkJLy8gQmFzZWQgb24gdGhlIGdpc3QgaGVyZTogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vODU0MTY4CisJCQkJLy8gUmVmZXJlbmNlOiBodHRwOi8vY29kZXV0b3BpYS5uZXQvYmxvZy8yMDA5LzAzLzA2L3NlbmRpbmctZmlsZXMtYmV0dGVyLWFwYWNoZS1tb2RfeHNlbmRmaWxlLWFuZC1waHAvCisJCQkJLy8gV2Ugc2hvdWxkOgorCQkJCS8vIDEuIHRyeSB0byB1c2UgQXBhY2hlIG1vZF94c2VuZGZpbGUKKwkJCQkvLyAyLiBUcnkgdG8gY2h1bmsgdGhlIGZpbGUgaW50byBwaWVjZXMKKwkJCQkvLyAzLiBJZiB0aGUgZmlsZSBpcyBzdWZmaWNpZW50bHkgc21hbGwsIHNlbmQgaXQgZGlyZWN0bHkKKworCQkJCSRoZHJzID0gYXJyYXkoKTsKKwkJCQkvLyBzZWUgYWxzbzogaHR0cDovL3d3dy5ib3V0ZWxsLmNvbS9uZXdmYXEvY3JlYXRpbmcvZm9yY2Vkb3dubG9hZC5odG1sCisJCQkJc3dpdGNoICgkbWltZSkKKwkJCQl7CisJCQkJLy8gYWRkIGhlcmUgbW9yZSBtaW1lIHR5cGVzIGZvciBkaWZmZXJlbnQgZmlsZSB0eXBlcyBhbmQgc3BlY2lhbCBoYW5kbGluZyBieSB0aGUgY2xpZW50IG9uIGRvd25sb2FkCisJCQkJY2FzZSAnYXBwbGljYXRpb24vcGRmJzoKKwkJCQkJJGhkcnNbXSA9ICdDb250ZW50LVR5cGU6ICcgLiAkbWltZTsKKwkJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgorCQkJCQkkaGRyc1tdID0gJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCQorCQkJCSRoZHJzW10gPSAnQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IicgLiAkZmlbJ2Jhc2VuYW1lJ10gLiAnIic7IC8vIHVzZSAnYXR0YWNobWVudCcgdG8gZm9yY2UgYSBkb3dubG9hZAorCQkJCQorCQkJCS8vIENvbnRlbnQgbGVuZ3RoIGlzbid0IHJlcXVpZWQgZm9yIG1vZF94c2VuZGZpbGUgKEFwYWNoZSBoYW5kbGVzIHRoaXMgZm9yIHVzKQorCQkJCSRtb2R4ID0gJHRoaXMtPm9wdGlvbnNbJ2VuYWJsZVhTZW5kRmlsZSddICYmIGZ1bmN0aW9uX2V4aXN0cygnYXBhY2hlX2dldF9tb2R1bGVzJykgJiYgaW5fYXJyYXkoJ21vZF94c2VuZGZpbGUnLCBhcGFjaGVfZ2V0X21vZHVsZXMoKSk7CisJCQkJaWYgKCRtb2R4KQorCQkJCXsKKwkJCQkJJGhkcnNbXSA9ICdYLVNlbmRmaWxlOiAnLiRmaWxlOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkkaGRyc1tdID0gJ0NvbnRlbnQtbGVuZ3RoOiAnIC4gJGZzaXplOworCQkJCQkkaGRyc1tdID0gJ0V4cGlyZXM6IDAnOworCQkJCQkkaGRyc1tdID0gJ0NhY2hlLUNvbnRyb2w6IG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCc7CisJCQkJCSRoZHJzW10gPSAnIUNhY2hlLUNvbnRyb2w6IHByaXZhdGUnOyAvLyBmbGFnIGFzIEZPUkNFRCBBUFBFTkQ7IHVzZSB0aGlzIHRvIG9wZW4gZmlsZXMgZGlyZWN0bHkKKwkJCQl9CisKKwkJCQkkdGhpcy0+c2VuZEh0dHBIZWFkZXJzKCRoZHJzKTsKKwkJCQkKKwkJCQlpZiAoISRtb2R4KQorCQkJCXsKKwkJCQkJJGNodW5rc2l6ZSA9IDQqMTAyNDsgLy8gNEtCIGJsb2NrcworCQkJCQlpZiAoJGZzaXplID4gJGNodW5rc2l6ZSkKKwkJCQkJeworCQkJCQkJLy8gVHVybiBvZmYgY29tcHJlc3Npb24gd2hpY2ggcHJldmVudHMgZmlsZXMgZnJvbSBiZWluZyByZS1hc3NlbWJsZWQgcHJvcGVybHkgKGVzcGVjaWFsbHkgemlwIGZpbGVzKQorCQkJCQkJZnVuY3Rpb25fZXhpc3RzKCdhcGFjaGVfc2V0ZW52JykgJiYgQGFwYWNoZV9zZXRlbnYoJ25vLWd6aXAnLCAxKTsKKwkJCQkJCUBpbmlfc2V0KCd6bGliLm91dHB1dF9jb21wcmVzc2lvbicsIDApOworCQkJCQkJCisJCQkJCQkvLyBUdXJuIG9mZiBhbnkgYWRkaXRpb25hbCBidWZmZXJpbmcgYnkgdGhlIHNlcnZlcgorCQkJCQkJQGluaV9zZXQoJ2ltcGxpY2l0X2ZsdXNoJywgMSk7CisJCQkJCQkKKwkJCQkJCS8vIERpc2FibGUgYW55IHRpbWVvdXRzCisJCQkJCQlAc2V0X3RpbWVfbGltaXQoMCk7CisJCQkJCQl3aGlsZSAoIWZlb2YoJGZkKSkKKwkJCQkJCXsKKwkJCQkJCQllY2hvIEBmcmVhZCgkZmQsICRjaHVua3NpemUpOworCQkJCQkJCW9iX2ZsdXNoKCk7CisJCQkJCQkJZmx1c2goKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCWZwYXNzdGhydSgkZmQpOworCQkJCQl9CisJCQkJfQorCisJCQkJZmNsb3NlKCRmZCk7CisJCQkJCisJCQkJaWYgKCFlbXB0eSgkdGhpcy0+b3B0aW9uc1snRG93bmxvYWRJc0NvbXBsZXRlX2NiJ10pICYmIGZ1bmN0aW9uX2V4aXN0cygkdGhpcy0+b3B0aW9uc1snRG93bmxvYWRJc0NvbXBsZXRlX2NiJ10pKQorCSAgICAgICAgICAgICAgIAkJICAkdGhpcy0+b3B0aW9uc1snRG93bmxvYWRJc0NvbXBsZXRlX2NiJ10oJHRoaXMsICdkb3dubG9hZCcsICRmaWxlaW5mbyk7CisJCisJCQkJcmV0dXJuOworCQkJfQorCQkJCisJCQkkZW1zZyA9ICdyZWFkX2Vycm9yJzsKKworCQkJCisJCX0KKwkJY2F0Y2goRmlsZU1hbmFnZXJFeGNlcHRpb24gJGUpCisJCXsKKwkJCSRlbXNnID0gJGUtPmdldE1lc3NhZ2UoKTsKKwkJfQorCQljYXRjaChFeGNlcHRpb24gJGUpCisJCXsKKwkJCS8vIGNhdGNoaW5nIG90aGVyIHNldmVyZSBmYWlsdXJlczsgc2luY2UgdGhpcyBjYW4gYmUgYW55dGhpbmcgYW5kIHNob3VsZCBvbmx5IGhhcHBlbiBpbiB0aGUgZGlyZXN0IG9mIGNpcmN1bXN0YW5jZXMsIHdlIGRvbid0IGJvdGhlciB0cmFuc2xhdGluZworCQkJJGVtc2cgPSAkZS0+Z2V0TWVzc2FnZSgpOworCQl9CisKKwkJLy8gd2UgZG9uJ3QgY2FyZSB3aGV0aGVyIGl0J3MgYSA0MDQsIGEgNDAzIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5OiB3ZSBmZWVkICdlbSBhIDQwMyBhbmQgdGhhdCdzIGZpbmFsIQorCQlzZW5kX3Jlc3BvbnNlX3N0YXR1c19oZWFkZXIoNDAzKTsKKworCQkkdGhpcy0+bW9kaWZ5X2pzb240ZXhjZXB0aW9uKCRqc2VyciwgJGVtc2csICdmaWxlID0gJyAuICR0aGlzLT5ta1NhZmU0RGlzcGxheSgkZmlsZV9hcmcgLiAnLCBkZXN0aW5hdGlvbiBwYXRoID0gJyAuICRmaWxlKSk7CisJCQorCQkkdGhpcy0+c2VuZEh0dHBIZWFkZXJzKCdDb250ZW50LVR5cGU6IHRleHQvcGxhaW4nKTsgICAgICAgIC8vIFNhZmVyIGZvciBpZnJhbWVzOiB0aGUgJ2FwcGxpY2F0aW9uL2pzb24nIG1pbWUgdHlwZSB3b3VsZCBjYXVzZSBGRjMuWCB0byBwb3AgdXAgYSBzYXZlL3ZpZXcgZGlhbG9nIHdoZW4gdHJhbnNtaXR0aW5nIHRoZXNlIGVycm9yIHJlcG9ydHMhCisKKwkJLy8gd2hlbiB3ZSBmYWlsIGhlcmUsIGl0J3MgcHJldHR5IGRhcm4gYmFkIGFuZCBub3RoaW5nIHRvIGl0LgorCQkvLyBqdXN0IHB1c2ggdGhlIGVycm9yIEpTT04gYW5kIGdvLgorCQllY2hvIGpzb25fZW5jb2RlKCRqc2Vycik7CisJfQorCisJLyoqCisJICogUHJvY2VzcyB0aGUgJ3VwbG9hZCcgZXZlbnQKKwkgKgorCSAqIFByb2Nlc3MgYW5kIHN0b3JlIHRoZSB1cGxvYWRlZCBmaWxlIGluIHRoZSBkZXNpZ25hdGVkIGxvY2F0aW9uLgorCSAqIEltYWdlcyB3aWxsIGJlIHJlc2l6ZWQgd2hlbiBwb3NzaWJsZSBhbmQgYXBwbGljYWJsZS4gQSB0aHVtYm5haWwgaW1hZ2Ugd2lsbCBhbHNvCisJICogYmUgcHJlcHJvZHVjZWQgd2hlbiBwb3NzaWJsZS4KKwkgKiBSZXR1cm4gYSBKU09OIGVuY29kZWQgc3RhdHVzIG9mIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4KKwkgKgorCSAqIEV4cGVjdGVkIHBhcmFtZXRlcnM6CisJICoKKwkgKiAkX1BPU1RbJ2RpcmVjdG9yeSddICAgIHBhdGggcmVsYXRpdmUgdG8gYmFzZWRpciBhLmsuYS4gb3B0aW9uc1snZGlyZWN0b3J5J10gcm9vdAorCSAqCisJICogJF9QT1NUWydyZXNpemUnXSAgICAgICBub256ZXJvIHZhbHVlIGluZGljYXRlcyBhbnkgdXBsb2FkZWQgaW1hZ2Ugc2hvdWxkIGJlIHJlc2l6ZWQgdG8gdGhlIGNvbmZpZ3VyZWQKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNbJ21heEltYWdlRGltZW5zaW9uJ10gd2lkdGggYW5kIGhlaWdodCB3aGVuZXZlciBwb3NzaWJsZQorCSAqCisJICogJF9QT1NUWydmaWx0ZXInXSAgICAgICBvcHRpb25hbCBtaW1ldHlwZSBmaWx0ZXIgc3RyaW5nLCBhbXkgYmUgdGhlIHBhcnQgdXAgdG8gYW5kCisJICogICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgdGhlIHNsYXNoICcvJyBvciB0aGUgZnVsbCBtaW1ldHlwZS4gT25seSBmaWxlcworCSAqICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmcgdGhpcyAoc2V0IG9mKSBtaW1ldHlwZXMgd2lsbCBiZSBsaXN0ZWQuCisJICogICAgICAgICAgICAgICAgICAgICAgICBFeGFtcGxlczogJ2ltYWdlLycgb3IgJ2FwcGxpY2F0aW9uL3ppcCcKKwkgKgorCSAqICRfRklMRVNbXSAgICAgICAgICAgICAgdGhlIG1ldGFkYXRhIGZvciB0aGUgdXBsb2FkZWQgZmlsZQorCSAqCisJICogJF9QT1NUWydyZXBvcnRDb250ZW50VHlwZSddCisJICogICAgICAgICAgICAgICAgICAgICAgICBpZiB5b3Ugd2FudCBhIHNwZWNpZmljIGNvbnRlbnQgdHlwZSBoZWFkZXIgc2V0IG9uIG91ciByZXNwb25zZSwgcHV0IGl0IGhlcmUuCisJICogICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIG5lZWRlZCBmb3Igd2hlbiB3ZSBhcmUgcG9zdGluZyBhbiB1cGxvYWQgcmVzcG9uc2UgdG8gYSBoaWRkZW4gaWZyYW1lLCB0aGUKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgYXBwbGljYXRpb24vanNvbiBtaW1ldHlwZSBicmVha3MgZG93biBpbiB0aGF0IGNhc2UgYXQgbGVhc3QgZm9yIEZpcmVmb3ggMy5YCisJICogICAgICAgICAgICAgICAgICAgICAgICBhcyB0aGUgYnJvd3NlciB3aWxsIHBvcCB1cCBhIHNhdmUvdmlldyBkaWFsb2cgYmVmb3JlIEpTIGNhbiBhY2Nlc3MgdGhlIHRyYW5zbWl0dGVkIGRhdGEuCisJICoKKwkgKiBFcnJvcnMgd2lsbCBwcm9kdWNlIGEgSlNPTiBlbmNvZGVkIGVycm9yIHJlcG9ydCwgaW5jbHVkaW5nIGF0IGxlYXN0IHR3byBmaWVsZHM6CisJICoKKwkgKiBzdGF0dXMgICAgICAgICAgICAgICAgIDAgZm9yIGVycm9yOyBub256ZXJvIGZvciBzdWNjZXNzCisJICoKKwkgKiBlcnJvciAgICAgICAgICAgICAgICAgIGVycm9yIG1lc3NhZ2UKKwkgKi8KKwlwcm90ZWN0ZWQgZnVuY3Rpb24gb25VcGxvYWQoKQorCXsKKwkJJGVtc2cgPSBudWxsOworCQkkZmlsZV9hcmcgPSBudWxsOworCQkkZmlsZSA9IG51bGw7CisJCSRsZWdhbF9kaXJfdXJsID0gbnVsbDsKKwkJJGpzZXJyID0gYXJyYXkoCisJCQkJJ3N0YXR1cycgPT4gMQorCQkJKTsKKworCQl0cnkKKwkJeworCQkJaWYgKCEkdGhpcy0+b3B0aW9uc1sndXBsb2FkJ10pCisJCQkJdGhyb3cgbmV3IEZpbGVNYW5hZ2VyRXhjZXB0aW9uKCdkaXNhYmxlZDp1cGxvYWQnKTsKKworCQkJLy8gTUFZIHVwbG9hZCB6ZXJvIGxlbmd0aCBmaWxlcyEKKwkJCWlmICghaXNzZXQoJF9GSUxFUykgfHwgZW1wdHkoJF9GSUxFU1snRmlsZWRhdGEnXSkgfHwgZW1wdHkoJF9GSUxFU1snRmlsZWRhdGEnXVsnbmFtZSddKSkKKwkJCQl0aHJvdyBuZXcgRmlsZU1hbmFnZXJFeGNlcHRpb24oJ25vZmlsZScpOworCisJCQkkdl9leF9jb2RlID0gJ25vZmlsZSc7CisKKwkJCSRmaWxlX3NpemUgPSAoZW1wdHkoJF9GSUxFU1snRmlsZWRhdGEnXVsnc2l6ZSddKSA/IDAgOiAkX0ZJTEVTWydGaWxlZGF0YSddWydzaXplJ10pOworCisJCQkkZmlsZV9hcmcgPSAkX0ZJTEVTWydGaWxlZGF0YSddWyduYW1lJ107CisKKwkJCSRkaXJfYXJnID0gJHRoaXMtPmdldFBPU1RwYXJhbSgnZGlyZWN0b3J5Jyk7CisJCQkkbGVnYWxfZGlyX3VybCA9ICR0aGlzLT5yZWwyYWJzX2xlZ2FsX3VybF9wYXRoKCRkaXJfYXJnIC4gJy8nKTsKKwkJCS8vIG11c3QgdHJhbnNmb3JtIGhlcmUgc28gYWxpYXMvZXRjLiBleHBhbnNpb25zIGluc2lkZSBsZWdhbF91cmxfcGF0aDJmaWxlX3BhdGgoKSBnZXQgYSBjaGFuY2U6CisJCQkkZGlyID0gJHRoaXMtPmxlZ2FsX3VybF9wYXRoMmZpbGVfcGF0aCgkbGVnYWxfZGlyX3VybCk7CisKKwkJCSRtaW1lX2ZpbHRlciA9ICR0aGlzLT5nZXRQT1NUcGFyYW0oJ2ZpbHRlcicsICR0aGlzLT5vcHRpb25zWydmaWx0ZXInXSk7CisJCQkkbWltZV9maWx0ZXJzID0gJHRoaXMtPmdldEFsbG93ZWRNaW1lVHlwZXMoJG1pbWVfZmlsdGVyKTsKKworCQkJJHRtcHBhdGggPSAkX0ZJTEVTWydGaWxlZGF0YSddWyd0bXBfbmFtZSddOworCisJCQkkcmVzaXplX2ltZ3MgPSAkdGhpcy0+Z2V0UE9TVHBhcmFtKCdyZXNpemUnLCAwKTsKKworCQkJJGZpbGVuYW1lID0gbnVsbDsKKwkJCSRmaSA9IGFycmF5KCdmaWxlbmFtZScgPT4gbnVsbCwgJ2V4dGVuc2lvbicgPT4gbnVsbCk7CisJCQkkbWltZSA9IG51bGw7CisJCQkkbWV0YSA9IG51bGw7CisJCQlpZiAoIWVtcHR5KCRmaWxlX2FyZykpCisJCQl7CisJCQkJaWYgKCEkdGhpcy0+SXNIaWRkZW5OYW1lQWxsb3dlZCgkZmlsZV9hcmcpKQorCQkJCXsKKwkJCQkJJHZfZXhfY29kZSA9ICdmbXRfbm90X2FsbG93ZWQnOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgIGlmICgkdGhpcy0+b3B0aW9uc1snc2FmZSddKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICRzYWZlZXh0ICAgICAgPSAkdGhpcy0+Z2V0U2FmZUV4dGVuc2lvbihwcmVnX3JlcGxhY2UoJy9eLipcLi8nLCAnJywgJGZpbGVfYXJnKSk7ICAgICAgICAgICAKKyAgICAgICAgICAgICRmaWxlX2FyZyA9IHByZWdfcmVwbGFjZSgnL1wuLiokLycsICcnLCAkZmlsZV9hcmcpIC4gIi4kc2FmZWV4dCI7CisgICAgICAgICAgfQorICAgICAgICAgIAorCQkJCQkkZmlsZW5hbWUgPSAkdGhpcy0+Z2V0VW5pcXVlTmFtZSgkZmlsZV9hcmcsICRkaXIpOworCQkJCQlpZiAoJGZpbGVuYW1lICE9PSBudWxsKQorCQkJCQl7CisJCQkJCQkvKgorCQkJCQkJICogU2VjdXJpdHk6CisJCQkJCQkgKgorCQkJCQkJICogVXBsb2FkOjptb3ZlKCkgcHJvY2Vzc2VzIHRoZSB1bmZpbHRlcmVkIHZlcnNpb24gb2YgJF9GSUxFU1tdWyduYW1lJ10sIGF0IGxlYXN0IHRvIGdldCB0aGUgZXh0ZW5zaW9uLAorCQkJCQkJICogdW5sZXNzIHdlIEFMV0FZUyBvdmVycmlkZSB0aGUgZmlsZW5hbWUgYW5kIGV4dGVuc2lvbiBpbiB0aGUgb3B0aW9ucyBhcnJheSBiZWxvdy4gVGhhdCdzIHdoeSB3ZQorCQkJCQkJICogY2FsY3VsYXRlIHRoZSBleHRlbnNpb24gYXQgYWxsIHRpbWVzIGhlcmUuCisJCQkJCQkgKi8KKwkJCQkJCWlmICgkdGhpcy0+b3B0aW9uc1snc2FmZSddKQorCQkJCQkJeworCQkJCQkJCSRmaSA9IHBhdGhpbmZvKCRmaWxlbmFtZSk7CisJCQkJCQkJJGZpWydleHRlbnNpb24nXSA9ICR0aGlzLT5nZXRTYWZlRXh0ZW5zaW9uKGlzc2V0KCRmaVsnZXh0ZW5zaW9uJ10pID8gJGZpWydleHRlbnNpb24nXSA6ICcnKTsKKwkJCQkJCQkkZmlsZW5hbWUgPSAkZmlbJ2ZpbGVuYW1lJ10gLiAoKGlzc2V0KCRmaVsnZXh0ZW5zaW9uJ10pICYmIHN0cmxlbigkZmlbJ2V4dGVuc2lvbiddKSA+IDApID8gJy4nIC4gJGZpWydleHRlbnNpb24nXSA6ICcnKTsKKwkJCQkJCX0KKworCQkJCQkJJGxlZ2FsX3VybCA9ICRsZWdhbF9kaXJfdXJsIC4gJGZpbGVuYW1lOworCisJCQkJCQkvLyBVUExPQUQgZGVsaXZlcnMgZmlsZXMgaW4gdGVtcG9yYXJ5IHN0b3JhZ2Ugd2l0aCBleHRlbnNpb25zIE5PVCBtYXRjaGluZyB0aGUgbWltZSB0eXBlLCBzbyB3ZSBkb24ndAorCQkJCQkJLy8gZmlsdGVyIG9uIGV4dGVuc2lvbjsgd2UganVzdCBsZXQgZ2V0SUQzIGdvIGFoZWFkIGFuZCBjb250ZW50LXNuaWZmIHRoZSBtaW1lIHR5cGUuCisJCQkJCQkvLyBTaW5jZSBnZXRJRDM6OmFuYWx5emUoKSBpcyBhIHF1aXRlIGNvc3RseSBvcGVyYXRpb24sIHdlIGxpa2UgdG8gZG8gaXQgb25seSBPTkNFIHBlciBmaWxlLAorCQkJCQkJLy8gc28gd2UgY2FjaGUgdGhlIGxhc3QgZW50cmllcy4KKwkJCQkJCSRtZXRhID0gJHRoaXMtPmdldEZpbGVJbmZvKCR0bXBwYXRoLCAkbGVnYWxfdXJsKTsKKwkJCQkJCSRtaW1lID0gJG1ldGEtPmdldE1pbWVUeXBlKCk7CisJCQkJCQlpZiAoISR0aGlzLT5Jc0FsbG93ZWRNaW1lVHlwZSgkbWltZSwgJG1pbWVfZmlsdGVycykpCisJCQkJCQl7CisJCQkJCQkJJHZfZXhfY29kZSA9ICdleHRlbnNpb24nOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCSR2X2V4X2NvZGUgPSBudWxsOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQkkZmlsZWluZm8gPSBhcnJheSgKKwkJCQknbGVnYWxfZGlyX3VybCcgPT4gJGxlZ2FsX2Rpcl91cmwsCisJCQkJJ2RpcicgPT4gJGRpciwKKwkJCQkncmF3X2ZpbGVuYW1lJyA9PiAkZmlsZV9hcmcsCisJCQkJJ2ZpbGVuYW1lJyA9PiAkZmlsZW5hbWUsCisJCQkJJ21ldGFfZGF0YScgPT4gJG1ldGEsCisJCQkJJ21pbWUnID0+ICRtaW1lLAorCQkJCSdtaW1lX2ZpbHRlcicgPT4gJG1pbWVfZmlsdGVyLAorCQkJCSdtaW1lX2ZpbHRlcnMnID0+ICRtaW1lX2ZpbHRlcnMsCisJCQkJJ3RtcF9maWxlcGF0aCcgPT4gJHRtcHBhdGgsCisJCQkJJ3NpemUnID0+ICRmaWxlX3NpemUsCisJCQkJJ21heHNpemUnID0+ICR0aGlzLT5vcHRpb25zWydtYXhVcGxvYWRTaXplJ10sCisJCQkJJ292ZXJ3cml0ZScgPT4gZmFsc2UsCisJCQkJJ3Jlc2l6ZScgPT4gJHJlc2l6ZV9pbWdzLAorCQkJCSdjaG1vZCcgPT4gJHRoaXMtPm9wdGlvbnNbJ2NobW9kJ10gJiAwNjY2LCAgIC8vIHNlY3VyaXR5OiBuZXZlciBtYWtlIHRob3NlIGZpbGVzICdleGVjdXRhYmxlJyEKKwkJCQkncHJlbGltaW5hcnlfanNvbicgPT4gJGpzZXJyLAorCQkJCSd2YWxpZGF0aW9uX2ZhaWx1cmUnID0+ICR2X2V4X2NvZGUKKwkJCSk7CisJCQlpZiAoIWVtcHR5KCR0aGlzLT5vcHRpb25zWydVcGxvYWRJc0F1dGhvcml6ZWRfY2InXSkgJiYgZnVuY3Rpb25fZXhpc3RzKCR0aGlzLT5vcHRpb25zWydVcGxvYWRJc0F1dGhvcml6ZWRfY2InXSkgJiYgISR0aGlzLT5vcHRpb25zWydVcGxvYWRJc0F1dGhvcml6ZWRfY2InXSgkdGhpcywgJ3VwbG9hZCcsICRmaWxlaW5mbykpCisJCQl7CisJCQkJJHZfZXhfY29kZSA9ICRmaWxlaW5mb1sndmFsaWRhdGlvbl9mYWlsdXJlJ107CisJCQkJaWYgKGVtcHR5KCR2X2V4X2NvZGUpKSAkdl9leF9jb2RlID0gJ2F1dGhvcml6ZWQnOworCQkJfQorCQkJaWYgKCFlbXB0eSgkdl9leF9jb2RlKSkKKwkJCQl0aHJvdyBuZXcgRmlsZU1hbmFnZXJFeGNlcHRpb24oJHZfZXhfY29kZSk7CisKKwkJCSRsZWdhbF9kaXJfdXJsID0gJGZpbGVpbmZvWydsZWdhbF9kaXJfdXJsJ107CisJCQkkZGlyID0gJGZpbGVpbmZvWydkaXInXTsKKwkJCSRmaWxlX2FyZyA9ICRmaWxlaW5mb1sncmF3X2ZpbGVuYW1lJ107CisJCQkkZmlsZW5hbWUgPSAkZmlsZWluZm9bJ2ZpbGVuYW1lJ107CisJCQkkbWV0YSA9ICRmaWxlaW5mb1snbWV0YV9kYXRhJ107CisJCQkkbWltZSA9ICRmaWxlaW5mb1snbWltZSddOworCQkJJG1pbWVfZmlsdGVyID0gJGZpbGVpbmZvWydtaW1lX2ZpbHRlciddOworCQkJJG1pbWVfZmlsdGVycyA9ICRmaWxlaW5mb1snbWltZV9maWx0ZXJzJ107CisJCQkvLyR0bXBwYXRoID0gJGZpbGVpbmZvWyd0bXBfZmlsZXBhdGgnXTsKKwkJCSRyZXNpemVfaW1ncyA9ICRmaWxlaW5mb1sncmVzaXplJ107CisJCQkkanNlcnIgPSAkZmlsZWluZm9bJ3ByZWxpbWluYXJ5X2pzb24nXTsKKworCQkJaWYgKCRmaWxlaW5mb1snbWF4c2l6ZSddICYmICRmaWxlaW5mb1snc2l6ZSddID4gJGZpbGVpbmZvWydtYXhzaXplJ10pCisJCQkJdGhyb3cgbmV3IEZpbGVNYW5hZ2VyRXhjZXB0aW9uKCdzaXplJyk7CisKKwkJCS8vaWYgKCFpc3NldCgkZmlsZWluZm9bJ2V4dGVuc2lvbiddKSkKKwkJCS8vICB0aHJvdyBuZXcgRmlsZU1hbmFnZXJFeGNlcHRpb24oJ2V4dGVuc2lvbicpOworCisJCQkvLyBtdXN0IHRyYW5zZm9ybSBoZXJlIHNvIGFsaWFzL2V0Yy4gZXhwYW5zaW9ucyBpbnNpZGUgbGVnYWxfdXJsX3BhdGgyZmlsZV9wYXRoKCkgZ2V0IGEgY2hhbmNlOgorCQkJJGxlZ2FsX3VybCA9ICRsZWdhbF9kaXJfdXJsIC4gJGZpbGVuYW1lOworCQkJJGZpbGUgPSAkdGhpcy0+bGVnYWxfdXJsX3BhdGgyZmlsZV9wYXRoKCRsZWdhbF91cmwpOworCisJCQlpZiAoISRmaWxlaW5mb1snb3ZlcndyaXRlJ10gJiYgZmlsZV9leGlzdHMoJGZpbGUpKQorCQkJCXRocm93IG5ldyBGaWxlTWFuYWdlckV4Y2VwdGlvbignZXhpc3RzJyk7CisKKwkJCWlmICghQG1vdmVfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydGaWxlZGF0YSddWyd0bXBfbmFtZSddLCAkZmlsZSkpCisJCQl7CisJCQkJJGVtc2cgPSAncGF0aCc7CisJCQkJc3dpdGNoICgkX0ZJTEVTWydGaWxlZGF0YSddWydlcnJvciddKQorCQkJCXsKKwkJCQljYXNlIDE6CisJCQkJY2FzZSAyOgorCQkJCQkkZW1zZyA9ICdzaXplJzsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDM6CisJCQkJCSRlbXNnID0gJ3BhcnRpYWwnOworCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJCQkJCSRkaXIgPSAkdGhpcy0+bGVnYWxfdXJsX3BhdGgyZmlsZV9wYXRoKCRsZWdhbF9kaXJfdXJsKTsKKwkJCQkJaWYgKCFpc19kaXIoJGRpcikpCisJCQkJCXsKKwkJCQkJCSRlbXNnID0gJ3BhdGgnOworCQkJCQl9CisJCQkJCWVsc2UgaWYgKCFpc193cml0YWJsZSgkZGlyKSkKKwkJCQkJeworCQkJCQkJJGVtc2cgPSAncGF0aF9ub3Rfd3JpdGFibGUnOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJJGVtc2cgPSAnZmlsZW5hbWVfbWF5YmVfdG9vX2xhcmdlJzsKKwkJCQkJfQorCisJCQkJCWlmICghZW1wdHkoJF9GSUxFU1snRmlsZWRhdGEnXVsnZXJyb3InXSkpCisJCQkJCXsKKwkJCQkJCSRlbXNnIC49ICc6IGVycm9yIGNvZGUgPSAnIC4gc3RydG9sb3dlcigkX0ZJTEVTWydGaWxlZGF0YSddWydlcnJvciddKSAuICcsICcgLiAkZW1zZ19hZGQ7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXRocm93IG5ldyBGaWxlTWFuYWdlckV4Y2VwdGlvbigkZW1zZyk7CisJCQl9CisKKwkJCUBjaG1vZCgkZmlsZSwgJGZpbGVpbmZvWydjaG1vZCddKTsKKworCQkJLyoKKwkJCSAqIE5PVEU6IHlvdSAvY2FuLyAoYW5kIHNob3VsZCBiZSBhYmxlIHRvLCBJTUhPKSB1cGxvYWQgJ292ZXJseSBsYXJnZScgaW1hZ2UgZmlsZXMgdG8geW91ciBzaXRlLCBidXQgdGhlIHJlc2l6aW5nIHByb2Nlc3Mgc3RlcAorCQkJICogICAgICAgaGFwcGVuaW5nIGhlcmUgd2lsbCBmYWlsOyB3ZSBoYXZlIG1lbW9yeSB1c2FnZSBlc3RpbWF0b3JzIGluIHBsYWNlIHRvIG1ha2UgdGhlIGZhdGFsIGNyYXNoIGEgbm9uLXNpbGVudCBvbmUsIGksZSwgb25lCisJCQkgKiAgICAgICB3aGVyZSB3ZSBzdGlsbCBoYXZlIGEgdmVyeSBoaWdoIHByb2JhYmlsaXR5IG9mIE5PVCBmYXRhbGx5IGNyYXNoaW5nIHRoZSBQSFAgaXVudGVycHJldGVyIGJ1dCBjYXRjaGluZyBhIHN1aXRhYmxlIGV4Y2VwdGlvbgorCQkJICogICAgICAgaW5zdGVhZC4KKwkJCSAqICAgICAgIEhhdmluZyB1cGxvYWRlZCBzdWNoIGh1Z2UgaW1hZ2VzLCBhIGRldmVsb3Blci9zb21lYm9keSBjYW4gYWx3YXlzIGdvIGluIGxhdGVyIGFuZCB1cCB0aGUgbWVtb3J5IGxpbWl0IGlmIHRoZSBzaXRlIGFkbWlucworCQkJICogICAgICAgZmVlbCBpdCBpcyBkZXNlcnZlZC4gVW50aWwgdGhlbiwgbm8gdGh1bWJuYWlscyBvZiBzdWNoIGltYWdlcyAodGhvdWdoIHlvdSAvc2hvdWxkLyBiZSBhYmxlIHRvIG1pbGtib3gtdmlldyB0aGUgcmVhbCB0aGluZyEpCisJCQkgKi8KKwkJCSR0aHVtYjI1MCAgID0gZmFsc2U7CisJCQkkdGh1bWIyNTBfZSA9IGZhbHNlOworCQkJJHRodW1iNDggICAgPSBmYWxzZTsKKwkJCSR0aHVtYjQ4X2UgID0gZmFsc2U7CisJCQlpZiAoRmlsZU1hbmFnZXJVdGlsaXR5OjpzdGFydHNXaXRoKCRtaW1lLCAnaW1hZ2UvJykpCisJCQl7CisJCQkJaWYgKCFlbXB0eSgkcmVzaXplX2ltZ3MpKQorCQkJCXsKKwkJCQkJJGltZyA9IG5ldyBJbWFnZSgkZmlsZSk7CisJCQkJCSRzaXplID0gJGltZy0+Z2V0U2l6ZSgpOworCQkJCQkvLyBJbWFnZTo6cmVzaXplKCkgdGFrZXMgY2FyZSB0byBtYWludGFpbiB0aGUgcHJvcGVyIGFzcGVjdCByYXRpbywgc28gdGhpcyBpcyBlYXN5CisJCQkJCS8vIChkZWZhdWx0IHF1YWxpdHkgaXMgMTAwJSBmb3IgSlBFRyBzbyB3ZSBnZXQgdGhlIGNsZWFuZXN0IHJlc2l6ZWQgaW1hZ2VzIGhlcmUpCisJCQkJCSRpbWctPnJlc2l6ZSgkdGhpcy0+b3B0aW9uc1snbWF4SW1hZ2VEaW1lbnNpb24nXVsnd2lkdGgnXSwgJHRoaXMtPm9wdGlvbnNbJ21heEltYWdlRGltZW5zaW9uJ11bJ2hlaWdodCddKS0+c2F2ZSgpOworCQkJCQl1bnNldCgkaW1nKTsKKwkJCQkJCisJCQkJCS8vIHNvdXJjZSBpbWFnZSBoYXMgY2hhbmdlZDogbnVrZSB0aGUgY2FjaGVkIG1ldGFkYXRhIGFuZCB0aGVuIHJlZmV0Y2ggdGhlIG1ldGFkYXRhID0gZm9yY2VkIHJlZmV0Y2gKKwkJCQkJJG1ldGEgPSAkdGhpcy0+Z2V0RmlsZUluZm8oJGZpbGUsICRsZWdhbF91cmwsIHRydWUpOworCQkJCX0KKwkJCX0KKworCQkJLyoKKwkJCSAqICdhYnVzZScgdGhlIGluZm8gZXh0cmFjdGlvbiBwcm9jZXNzIHRvIGdlbmVyYXRlIHRoZSB0aHVtYm5haWxzLiBCZXNpZGVzLCBkb2luZyBpdCB0aGlzIHdheSB3aWxsIGFsc28gcHJpbWUgdGhlIG1ldGFkYXRhIGNhY2hlIGZvciB0aGlzIGl0ZW0sCisJCQkgKiBzbyB3ZSdsbCBoYXZlIGEgdmVyeSBmYXN0IHBlcmZvcm1hbmNlIHZpZXdpbmcgdGhpcyBmaWxlJ3MgZGV0YWlscyBhbmQgdGh1bWJuYWlscyBib3RoIGZyb20gdGhpcyBwb2ludCBmb3J3YXJkIQorCQkJICovCisJCQkkanNib2d1cyA9IGFycmF5KCdzdGF0dXMnID0+IDEpOworCQkJJGpzYm9ndXMgPSAkdGhpcy0+ZXh0cmFjdERldGFpbEluZm8oJGpzYm9ndXMsICRsZWdhbF91cmwsICRtZXRhLCAkbWltZV9maWx0ZXIsICRtaW1lX2ZpbHRlcnMsIGFycmF5KCdkaXJlY3QnKSk7CisKKwkJCSR0aGlzLT5zZW5kSHR0cEhlYWRlcnMoJ0NvbnRlbnQtVHlwZTogJyAuICR0aGlzLT5nZXRQT1NUcGFyYW0oJ3JlcG9ydENvbnRlbnRUeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKSk7CisKKwkJCWVjaG8ganNvbl9lbmNvZGUoYXJyYXkoCisJCQkJCSdzdGF0dXMnID0+IDEsCisJCQkJCSduYW1lJyA9PiBiYXNlbmFtZSgkZmlsZSkKKwkJCQkpKTsKKwkJCQorCQkJaWYgKCFlbXB0eSgkdGhpcy0+b3B0aW9uc1snVXBsb2FkSXNDb21wbGV0ZV9jYiddKSAmJiBmdW5jdGlvbl9leGlzdHMoJHRoaXMtPm9wdGlvbnNbJ1VwbG9hZElzQ29tcGxldGVfY2InXSkpCisJCQkJJHRoaXMtPm9wdGlvbnNbJ1VwbG9hZElzQ29tcGxldGVfY2InXSgkdGhpcywgJ3VwbG9hZCcsICRmaWxlaW5mbyk7CisJCQkKKwkJCXJldHVybjsKKwkJfQorCQljYXRjaChGaWxlTWFuYWdlckV4Y2VwdGlvbiAkZSkKKwkJeworCQkJJGVtc2cgPSAkZS0+Z2V0TWVzc2FnZSgpOworCQl9CisJCWNhdGNoKEV4Y2VwdGlvbiAkZSkKKwkJeworCQkJLy8gY2F0Y2hpbmcgb3RoZXIgc2V2ZXJlIGZhaWx1cmVzOyBzaW5jZSB0aGlzIGNhbiBiZSBhbnl0aGluZyBhbmQgc2hvdWxkIG9ubHkgaGFwcGVuIGluIHRoZSBkaXJlc3Qgb2YgY2lyY3Vtc3RhbmNlcywgd2UgZG9uJ3QgYm90aGVyIHRyYW5zbGF0aW5nCisJCQkkZW1zZyA9ICRlLT5nZXRNZXNzYWdlKCk7CisJCX0KKworCQkkdGhpcy0+bW9kaWZ5X2pzb240ZXhjZXB0aW9uKCRqc2VyciwgJGVtc2csICdmaWxlID0gJyAuICR0aGlzLT5ta1NhZmU0RGlzcGxheSgkZmlsZV9hcmcgLiAnLCBkZXN0aW5hdGlvbiBwYXRoID0gJyAuICRmaWxlIC4gJywgdGFyZ2V0IGRpcmVjdG9yeSAoVVJJIHBhdGgpID0gJyAuICRsZWdhbF9kaXJfdXJsKSk7CisKKwkJJHRoaXMtPnNlbmRIdHRwSGVhZGVycygnQ29udGVudC1UeXBlOiAnIC4gJHRoaXMtPmdldFBPU1RwYXJhbSgncmVwb3J0Q29udGVudFR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpKTsKKworCQkvLyB3aGVuIHdlIGZhaWwgaGVyZSwgaXQncyBwcmV0dHkgZGFybiBiYWQgYW5kIG5vdGhpbmcgdG8gaXQuCisJCS8vIGp1c3QgcHVzaCB0aGUgZXJyb3IgSlNPTiBhbmQgZ28uCisJCWVjaG8ganNvbl9lbmNvZGUoYXJyYXlfbWVyZ2UoJGpzZXJyLCAkX0ZJTEVTKSk7CisJfQorCisJLyoqCisJICogUHJvY2VzcyB0aGUgJ21vdmUnIGV2ZW50ICh3aXRoIGlzIHVzZWQgYnkgYm90aCBtb3ZlL2NvcHkgYW5kIHJlbmFtZSBjbGllbnQgc2lkZSBhY3Rpb25zKQorCSAqCisJICogQ29weSBvciBtb3ZlL3JlbmFtZSBhIGdpdmVuIGZpbGUgb3IgZGlyZWN0b3J5IGFuZCByZXR1cm4gYSBKU09OIGVuY29kZWQgc3RhdHVzIG9mIHN1Y2Nlc3MKKwkgKiBvciBmYWlsdXJlLgorCSAqCisJICogRXhwZWN0ZWQgcGFyYW1ldGVyczoKKwkgKgorCSAqICAgJF9QT1NUWydjb3B5J10gICAgICAgICAgbm9uemVybyB2YWx1ZSBtZWFucyBjb3B5LCB6ZXJvIG9yIG5pbCBmb3IgbW92ZS9yZW5hbWUKKwkgKgorCSAqIFNvdXJjZSBmaWxlc3BlYzoKKwkgKgorCSAqICAgJF9QT1NUWydkaXJlY3RvcnknXSAgICAgcGF0aCByZWxhdGl2ZSB0byBiYXNlZGlyIGEuay5hLiBvcHRpb25zWydkaXJlY3RvcnknXSByb290CisJICoKKwkgKiAgICRfUE9TVFsnZmlsZSddICAgICAgICAgIG9yaWdpbmFsIG5hbWUgb2YgdGhlIGZpbGUvc3ViZGlyZWN0b3J5IHRvIGJlIHJlbmFtZWQvY29waWVkCisJICoKKwkgKiBEZXN0aW5hdGlvbiBmaWxlc3BlYzoKKwkgKgorCSAqICAgJF9QT1NUWyduZXdEaXJlY3RvcnknXSAgcGF0aCByZWxhdGl2ZSB0byBiYXNlZGlyIGEuay5hLiBvcHRpb25zWydkaXJlY3RvcnknXSByb290OworCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGRpcmVjdG9yeSB3aGVyZSB0aGUgZmlsZSBtdXN0IGJlIG1vdmVkIC8gY29waWVkCisJICoKKwkgKiAgICRfUE9TVFsnbmFtZSddICAgICAgICAgIHRhcmdldCBuYW1lIG9mIHRoZSBmaWxlL3N1YmRpcmVjdG9yeSB0byBiZSByZW5hbWVkCisJICoKKwkgKiBFcnJvcnMgd2lsbCBwcm9kdWNlIGEgSlNPTiBlbmNvZGVkIGVycm9yIHJlcG9ydCwgaW5jbHVkaW5nIGF0IGxlYXN0IHR3byBmaWVsZHM6CisJICoKKwkgKiBzdGF0dXMgICAgICAgICAgICAgICAgICAgIDAgZm9yIGVycm9yOyBub256ZXJvIGZvciBzdWNjZXNzCisJICoKKwkgKiBlcnJvciAgICAgICAgICAgICAgICAgICAgIGVycm9yIG1lc3NhZ2UKKwkgKi8KKwlwcm90ZWN0ZWQgZnVuY3Rpb24gb25Nb3ZlKCkKKwl7CisJCSRlbXNnID0gbnVsbDsKKwkJJGZpbGVfYXJnID0gbnVsbDsKKwkJJGxlZ2FsX3VybCA9IG51bGw7CisJCSRuZXdwYXRoID0gbnVsbDsKKwkJJGpzZXJyID0gYXJyYXkoCisJCQkJJ3N0YXR1cycgPT4gMQorCQkJKTsKKworCQl0cnkKKwkJeworCQkJaWYgKCEkdGhpcy0+b3B0aW9uc1snbW92ZSddKQorCQkJCXRocm93IG5ldyBGaWxlTWFuYWdlckV4Y2VwdGlvbignZGlzYWJsZWQ6cm5fbXZfY3AnKTsKKworCQkJJHZfZXhfY29kZSA9ICdub2ZpbGUnOworCisJCQkkZmlsZV9hcmcgPSAkdGhpcy0+Z2V0UE9TVHBhcmFtKCdmaWxlJyk7CisKKwkJCSRkaXJfYXJnID0gJHRoaXMtPmdldFBPU1RwYXJhbSgnZGlyZWN0b3J5Jyk7CisJCQkkbGVnYWxfdXJsID0gJHRoaXMtPnJlbDJhYnNfbGVnYWxfdXJsX3BhdGgoJGRpcl9hcmcgLiAnLycpOworCisJCQkvLyBtdXN0IHRyYW5zZm9ybSBoZXJlIHNvIGFsaWFzL2V0Yy4gZXhwYW5zaW9ucyBpbnNpZGUgbGVnYWxfdXJsX3BhdGgyZmlsZV9wYXRoKCkgZ2V0IGEgY2hhbmNlOgorCQkJJGRpciA9ICR0aGlzLT5sZWdhbF91cmxfcGF0aDJmaWxlX3BhdGgoJGxlZ2FsX3VybCk7CisKKwkJCSRuZXdkaXJfYXJnID0gJHRoaXMtPmdldFBPU1RwYXJhbSgnbmV3RGlyZWN0b3J5Jyk7CisJCQkkbmV3bmFtZV9hcmcgPSAkdGhpcy0+Z2V0UE9TVHBhcmFtKCduYW1lJyk7CisJCQkkcmVuYW1lID0gKGVtcHR5KCRuZXdkaXJfYXJnKSAmJiAhZW1wdHkoJG5ld25hbWVfYXJnKSk7CisKKwkJCSRpc19jb3B5ID0gISEkdGhpcy0+Z2V0UE9TVHBhcmFtKCdjb3B5Jyk7CisKKwkJCSRmaWxlbmFtZSA9IG51bGw7CisJCQkkcGF0aCA9IG51bGw7CisJCQkkZm4gPSBudWxsOworCQkJJGxlZ2FsX25ld3VybCA9IG51bGw7CisJCQkkbmV3ZGlyID0gbnVsbDsKKwkJCSRuZXduYW1lID0gbnVsbDsKKwkJCSRuZXdwYXRoID0gbnVsbDsKKwkJCSRpc19kaXIgPSBmYWxzZTsKKwkJCWlmICghJHRoaXMtPklzSGlkZGVuUGF0aEFsbG93ZWQoJG5ld2Rpcl9hcmcpIHx8ICEkdGhpcy0+SXNIaWRkZW5OYW1lQWxsb3dlZCgkbmV3bmFtZV9hcmcpKQorCQkJeworCQkJCSR2X2V4X2NvZGUgPSAnYXV0aG9yaXplZCc7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKCFlbXB0eSgkZmlsZV9hcmcpKQorCQkJCXsKKwkJCQkJJGZpbGVuYW1lID0gYmFzZW5hbWUoJGZpbGVfYXJnKTsKKwkJCQkJJHBhdGggPSAkdGhpcy0+bGVnYWxfdXJsX3BhdGgyZmlsZV9wYXRoKCRsZWdhbF91cmwgLiAkZmlsZW5hbWUpOworCisJCQkJCWlmIChmaWxlX2V4aXN0cygkcGF0aCkpCisJCQkJCXsKKwkJCQkJCSRpc19kaXIgPSBpc19kaXIoJHBhdGgpOworCisJCQkJCQkvLyBub3RlOiB3ZSBkbyBub3Qgc3VwcG9ydCBjb3B5aW5nIGVudGlyZSBkaXJlY3RvcmllcywgdGhvdWdoIGRpcmVjdG9yeSByZW5hbWUvbW92ZSBpcyBva2F5CisJCQkJCQlpZiAoJGlzX2NvcHkgJiYgJGlzX2RpcikKKwkJCQkJCXsKKwkJCQkJCQkkdl9leF9jb2RlID0gJ2Rpc2FibGVkOnJuX212X2NwJzsKKwkJCQkJCX0KKwkJCQkJCWVsc2UgaWYgKCRyZW5hbWUpCisJCQkJCQl7CisJCQkJCQkJJGZuID0gJ3JlbmFtZSc7CisJCQkJCQkJJGxlZ2FsX25ld3VybCA9ICRsZWdhbF91cmw7CisJCQkJCQkJJG5ld2RpciA9ICRkaXI7CisKKwkJCQkJCQkkbmV3bmFtZSA9IGJhc2VuYW1lKCRuZXduYW1lX2FyZyk7CisJCQkJCQkJaWYgKCRpc19kaXIpCisJCQkJCQkJCSRuZXduYW1lID0gJHRoaXMtPmdldFVuaXF1ZU5hbWUoYXJyYXkoJ2ZpbGVuYW1lJyA9PiAkbmV3bmFtZSksICRuZXdkaXIpOyAgLy8gYSBkaXJlY3RvcnkgaGFzIG5vICdleHRlbnNpb24nCisJCQkJCQkJZWxzZQorCQkJCQkJCQkkbmV3bmFtZSA9ICR0aGlzLT5nZXRVbmlxdWVOYW1lKCRuZXduYW1lLCAkbmV3ZGlyKTsKKworCQkJCQkJCWlmICgkbmV3bmFtZSA9PT0gbnVsbCkKKwkJCQkJCQl7CisJCQkJCQkJCSR2X2V4X2NvZGUgPSAnbm9uZXdmaWxlJzsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZQorCQkJCQkJCXsKKwkJCQkJCQkJLy8gd2hlbiB0aGUgbmV3IG5hbWUgc2VlbXMgdG8gaGF2ZSBhIGRpZmZlcmVudCBleHRlbnNpb24sIG1ha2Ugc3VyZSB0aGUgZXh0ZW5zaW9uIGRvZXNuJ3QgY2hhbmdlIGFmdGVyIGFsbDoKKwkJCQkJCQkJLy8gTm90ZTogLSBpZiBpdCdzIG9ubHkgJ2Nhc2UnIHdlJ3JlIGNoYW5naW5nIGhlcmUsIHRoZW4gZXhjaGFuZ2UgdGhlIGV4dGVuc2lvbiBpbnN0ZWFkIG9mIGFwcGVuZGluZyBpdC4KKwkJCQkJCQkJLy8gICAgICAgLSBkaXJlY3RvcmllcyBkbyBub3QgaGF2ZSBleHRlbnNpb25zCisJCQkJCQkJCSRleHRPbGQgPSBwYXRoaW5mbygkZmlsZW5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTik7CisJCQkJCQkJCSRleHROZXcgPSBwYXRoaW5mbygkbmV3bmFtZSwgUEFUSElORk9fRVhURU5TSU9OKTsKKwkJCQkJCQkJaWYgKCghJHRoaXMtPm9wdGlvbnNbJ2FsbG93RXh0Q2hhbmdlJ10gfHwgKCEkaXNfZGlyICYmIGVtcHR5KCRleHROZXcpKSkgJiYgIWVtcHR5KCRleHRPbGQpICYmIHN0cnRvbG93ZXIoJGV4dE9sZCkgIT0gc3RydG9sb3dlcigkZXh0TmV3KSkKKwkJCQkJCQkJeworCQkJCQkJCQkJJG5ld25hbWUgLj0gJy4nIC4gJGV4dE9sZDsKKwkJCQkJCQkJfQorCQkJCQkJCQkkdl9leF9jb2RlID0gbnVsbDsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJJGZuID0gKCRpc19jb3B5ID8gJ2NvcHknIDogJ3JlbmFtZScgLyogJ21vdmUnICovKTsKKwkJCQkJCQkkbGVnYWxfbmV3dXJsID0gJHRoaXMtPnJlbDJhYnNfbGVnYWxfdXJsX3BhdGgoJG5ld2Rpcl9hcmcgLiAnLycpOworCQkJCQkJCSRuZXdkaXIgPSAkdGhpcy0+bGVnYWxfdXJsX3BhdGgyZmlsZV9wYXRoKCRsZWdhbF9uZXd1cmwpOworCisJCQkJCQkJaWYgKCRpc19kaXIpCisJCQkJCQkJCSRuZXduYW1lID0gJHRoaXMtPmdldFVuaXF1ZU5hbWUoYXJyYXkoJ2ZpbGVuYW1lJyA9PiAkZmlsZW5hbWUpLCAkbmV3ZGlyKTsgIC8vIGEgZGlyZWN0b3J5IGhhcyBubyAnZXh0ZW5zaW9uJworCQkJCQkJCWVsc2UKKwkJCQkJCQkJJG5ld25hbWUgPSAkdGhpcy0+Z2V0VW5pcXVlTmFtZSgkZmlsZW5hbWUsICRuZXdkaXIpOworCisJCQkJCQkJaWYgKCRuZXduYW1lID09PSBudWxsKQorCQkJCQkJCQkkdl9leF9jb2RlID0gJ25vbmV3ZmlsZSc7CisJCQkJCQkJZWxzZQorCQkJCQkJCQkkdl9leF9jb2RlID0gbnVsbDsKKwkJCQkJCX0KKworCQkJCQkJaWYgKGVtcHR5KCR2X2V4X2NvZGUpKQorCQkJCQkJeworCQkJCQkJCSRuZXdwYXRoID0gJHRoaXMtPmxlZ2FsX3VybF9wYXRoMmZpbGVfcGF0aCgkbGVnYWxfbmV3dXJsIC4gJG5ld25hbWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQkkZmlsZWluZm8gPSBhcnJheSgKKwkJCQkJJ2xlZ2FsX3VybCcgPT4gJGxlZ2FsX3VybCwKKwkJCQkJJ2RpcicgPT4gJGRpciwKKwkJCQkJJ3BhdGgnID0+ICRwYXRoLAorCQkJCQknbmFtZScgPT4gJGZpbGVuYW1lLAorCQkJCQknbGVnYWxfbmV3dXJsJyA9PiAkbGVnYWxfbmV3dXJsLAorCQkJCQknbmV3ZGlyJyA9PiAkbmV3ZGlyLAorCQkJCQknbmV3cGF0aCcgPT4gJG5ld3BhdGgsCisJCQkJCSduZXduYW1lJyA9PiAkbmV3bmFtZSwKKwkJCQkJJ3JlbmFtZScgPT4gJHJlbmFtZSwKKwkJCQkJJ2lzX2RpcicgPT4gJGlzX2RpciwKKwkJCQkJJ2Z1bmN0aW9uJyA9PiAkZm4sCisJCQkJCSdwcmVsaW1pbmFyeV9qc29uJyA9PiAkanNlcnIsCisJCQkJCSd2YWxpZGF0aW9uX2ZhaWx1cmUnID0+ICR2X2V4X2NvZGUKKwkJCQkpOworCisJCQlpZiAoIWVtcHR5KCR0aGlzLT5vcHRpb25zWydNb3ZlSXNBdXRob3JpemVkX2NiJ10pICYmIGZ1bmN0aW9uX2V4aXN0cygkdGhpcy0+b3B0aW9uc1snTW92ZUlzQXV0aG9yaXplZF9jYiddKSAmJiAhJHRoaXMtPm9wdGlvbnNbJ01vdmVJc0F1dGhvcml6ZWRfY2InXSgkdGhpcywgJ21vdmUnLCAkZmlsZWluZm8pKQorCQkJeworCQkJCSR2X2V4X2NvZGUgPSAkZmlsZWluZm9bJ3ZhbGlkYXRpb25fZmFpbHVyZSddOworCQkJCWlmIChlbXB0eSgkdl9leF9jb2RlKSkgJHZfZXhfY29kZSA9ICdhdXRob3JpemVkJzsKKwkJCX0KKwkJCWlmICghZW1wdHkoJHZfZXhfY29kZSkpCisJCQkJdGhyb3cgbmV3IEZpbGVNYW5hZ2VyRXhjZXB0aW9uKCR2X2V4X2NvZGUpOworCisJCQkkbGVnYWxfdXJsID0gJGZpbGVpbmZvWydsZWdhbF91cmwnXTsKKwkJCSRkaXIgPSAkZmlsZWluZm9bJ2RpciddOworCQkJJHBhdGggPSAkZmlsZWluZm9bJ3BhdGgnXTsKKwkJCSRmaWxlbmFtZSA9ICRmaWxlaW5mb1snbmFtZSddOworCQkJJGxlZ2FsX25ld3VybCA9ICRmaWxlaW5mb1snbGVnYWxfbmV3dXJsJ107CisJCQkkbmV3ZGlyID0gJGZpbGVpbmZvWyduZXdkaXInXTsKKwkJCSRuZXdwYXRoID0gJGZpbGVpbmZvWyduZXdwYXRoJ107CisJCQkkbmV3bmFtZSA9ICRmaWxlaW5mb1snbmV3bmFtZSddOworCQkJJHJlbmFtZSA9ICRmaWxlaW5mb1sncmVuYW1lJ107CisJCQkkaXNfZGlyID0gJGZpbGVpbmZvWydpc19kaXInXTsKKwkJCSRmbiA9ICRmaWxlaW5mb1snZnVuY3Rpb24nXTsKKwkJCSRqc2VyciA9ICRmaWxlaW5mb1sncHJlbGltaW5hcnlfanNvbiddOworCisJCQlpZiAoJHJlbmFtZSkKKwkJCXsKKwkJCQkvLyB0cnkgdG8gcmVtb3ZlIHRoZSB0aHVtYm5haWwgJiBvdGhlciBjYWNoZSBlbnRyaWVzIHJlbGF0ZWQgdG8gdGhlIG9yaWdpbmFsIGZpbGU7IGRvbid0IG1pbmQgaWYgaXQgZG9lc24ndCBleGlzdAorCQkJCSRmbHVybCA9ICRsZWdhbF91cmwgLiAkZmlsZW5hbWU7CisJCQkJJG1ldGEgPSAmJHRoaXMtPmdldGlkM19jYWNoZS0+cGljaygkZmx1cmwsICR0aGlzLCBmYWxzZSk7CisJCQkJYXNzZXJ0KCRtZXRhICE9IG51bGwpOworCQkJCWlmICghJG1ldGEtPmRlbGV0ZSh0cnVlKSkKKwkJCQl7CisJCQkJCXRocm93IG5ldyBGaWxlTWFuYWdlckV4Y2VwdGlvbignZGVsZXRlX2NhY2hlX2VudHJpZXNfZmFpbGVkJyk7CisJCQkJfQorCQkJCXVuc2V0KCRtZXRhKTsKKwkJCX0KKworCQkJaWYgKCFmdW5jdGlvbl9leGlzdHMoJGZuKSkKKwkJCQl0aHJvdyBuZXcgRmlsZU1hbmFnZXJFeGNlcHRpb24oKGVtcHR5KCRmbikgPyAncmVuYW1lJyA6ICRmbikgLiAnX2ZhaWxlZCcpOworCQkJaWYgKCFAJGZuKCRwYXRoLCAkbmV3cGF0aCkpCisJCQkJdGhyb3cgbmV3IEZpbGVNYW5hZ2VyRXhjZXB0aW9uKCRmbiAuICdfZmFpbGVkJyk7CisKKwkJCSR0aGlzLT5zZW5kSHR0cEhlYWRlcnMoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbicpOworCisJCQkvLyBqc2Vyclsnc3RhdHVzJ10gPT0gMQorCQkJJGpzZXJyWyduYW1lJ10gPSAkbmV3bmFtZTsKKworCQkJZWNobyBqc29uX2VuY29kZSgkanNlcnIpOworCQkJcmV0dXJuOworCQl9CisJCWNhdGNoKEZpbGVNYW5hZ2VyRXhjZXB0aW9uICRlKQorCQl7CisJCQkkZW1zZyA9ICRlLT5nZXRNZXNzYWdlKCk7CisJCX0KKwkJY2F0Y2goRXhjZXB0aW9uICRlKQorCQl7CisJCQkvLyBjYXRjaGluZyBvdGhlciBzZXZlcmUgZmFpbHVyZXM7IHNpbmNlIHRoaXMgY2FuIGJlIGFueXRoaW5nIGFuZCBzaG91bGQgb25seSBoYXBwZW4gaW4gdGhlIGRpcmVzdCBvZiBjaXJjdW1zdGFuY2VzLCB3ZSBkb24ndCBib3RoZXIgdHJhbnNsYXRpbmcKKwkJCSRlbXNnID0gJGUtPmdldE1lc3NhZ2UoKTsKKwkJfQorCisJCSR0aGlzLT5tb2RpZnlfanNvbjRleGNlcHRpb24oJGpzZXJyLCAkZW1zZywgJ2ZpbGUgPSAnIC4gJGZpbGVfYXJnIC4gJywgcGF0aCA9ICcgLiAkbGVnYWxfdXJsIC4gJywgZGVzdGluYXRpb24gcGF0aCA9ICcgLiAkbmV3cGF0aCk7CisKKwkJJHRoaXMtPnNlbmRIdHRwSGVhZGVycygnQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJyk7CisKKwkJLy8gd2hlbiB3ZSBmYWlsIGhlcmUsIGl0J3MgcHJldHR5IGRhcm4gYmFkIGFuZCBub3RoaW5nIHRvIGl0LgorCQkvLyBqdXN0IHB1c2ggdGhlIGVycm9yIEpTT04gYW5kIGdvLgorCQllY2hvIGpzb25fZW5jb2RlKCRqc2Vycik7CisJfQorCisKKworCisKKworCisKKworCisJLyoqCisJICogU2VuZCB0aGUgbGlzdGVkIGhlYWRlcnMgd2hlbiBwb3NzaWJsZTsgdGhlIGlucHV0IHBhcmFtZXRlciBpcyBhbiBhcnJheSBvZiBoZWFkZXIgc3RyaW5ncyBvciBhIHNpbmdsZSBoZWFkZXIgc3RyaW5nLgorCSAqCisJICogTk9URTogd2hlbiBhIGhlYWRlciBzdHJpbmcgc3RhcnRzIHdpdGggdGhlICchJyBjaGFyYWN0ZXIsIGl0IG1lYW5zIHRoYXQgaGVhZGVyIGlzIHJlcXVpcmVkCisJICogdG8gYmUgYXBwZW5kZWQgdG8gdGhlIGhlYWRlciBvdXRwdXQgc2V0IGFuZCBub3Qgb3ZlcndyaXRlIGFueSBleGlzdGluZyBlcXVhbCBoZWFkZXIuCisJICovCisJcHVibGljIGZ1bmN0aW9uIHNlbmRIdHRwSGVhZGVycygkaGVhZGVycykKKwl7CisJCWlmICghaGVhZGVyc19zZW50KCkpCisJCXsKKwkJCSRoZWFkZXJzID0gYXJyYXlfbWVyZ2UoYXJyYXkoCisJCQkJJ0V4cGlyZXM6IEZyaSwgMDEgSmFuIDE5OTAgMDA6MDA6MDAgR01UJywKKwkJCQknQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUsIG5vLXN0b3JlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZScKKwkJCSksIChpc19hcnJheSgkaGVhZGVycykgPyAkaGVhZGVycyA6IGFycmF5KCRoZWFkZXJzKSkpOworCisJCQlmb3JlYWNoKCRoZWFkZXJzIGFzICRoKQorCQkJeworCQkJCSRhcHBlbmRfZmxhZyA9ICgkaFswXSA9PSAnIScpOworCQkJCSRoID0gbHRyaW0oJGgsICchJyk7CisJCQkJaGVhZGVyKCRoLCAkYXBwZW5kX2ZsYWcpOworCQkJfQorCQl9CisJfQorCisKKworCisJLy8gZGVyaXZlZCBmcm9tICAgaHR0cDovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5maWxlc2l6ZS5waHAjMTAwMDk3CisJcHVibGljIGZ1bmN0aW9uIGZvcm1hdF9ieXRlcygkYnl0ZXMpCisJeworCQlpZiAoJGJ5dGVzIDwgMTAyNCkKKwkJCXJldHVybiAkYnl0ZXMgLiAnIEJ5dGVzJzsKKwkJZWxzZWlmICgkYnl0ZXMgPCAxMDQ4NTc2KQorCQkJcmV0dXJuIHJvdW5kKCRieXRlcyAvIDEwMjQsIDIpIC4gJyBLQiAoJyAuICRieXRlcyAuICcgQnl0ZXMpJzsKKwkJZWxzZWlmICgkYnl0ZXMgPCAxMDczNzQxODI0KQorCQkJcmV0dXJuIHJvdW5kKCRieXRlcyAvIDEwNDg1NzYsIDIpIC4gJyBNQiAoJyAuICRieXRlcyAuICcgQnl0ZXMpJzsKKwkJZWxzZQorCQkJcmV0dXJuIHJvdW5kKCRieXRlcyAvIDEwNzM3NDE4MjQsIDIpIC4gJyBHQiAoJyAuICRieXRlcyAuICcgQnl0ZXMpJzsKKwl9CisKKwkvKioKKwkgKiBQcm9kdWNlIGEgSFRNTCBzbmlwcGV0IGRldGFpbGluZyB0aGUgZ2l2ZW4gZmlsZSBpbiB0aGUgSlNPTiAnY29udGVudCcgZWxlbWVudDsgcGxhY2UgYWRkaXRpb25hbCBpbmZvCisJICogaW4gdGhlIEpTT04gZWxlbWVudHMgJ3RodW1ibmFpbCcsICd0aHVtYjQ4JywgJ3RodW1iMjUwJywgJ3dpZHRoJywgJ2hlaWdodCcsIC4uLgorCSAqCisJICogUmV0dXJuIGFuIGF1Z21lbnRlZCBKU09OIGFycmF5LgorCSAqCisJICogVGhyb3cgYW4gZXhjZXB0aW9uIG9uIGVycm9yLgorCSAqLworCXB1YmxpYyBmdW5jdGlvbiBleHRyYWN0RGV0YWlsSW5mbygkanNvbl9pbiwgJGxlZ2FsX3VybCwgJiRtZXRhLCAkbWltZV9maWx0ZXIsICRtaW1lX2ZpbHRlcnMsICRtb2RlKQorCXsKKwkJJGF1dG9fdGh1bWJfZ2VuX21vZGUgPSAhaW5fYXJyYXkoJ2RpcmVjdCcsICRtb2RlLCB0cnVlKTsKKwkJJG1ldGFIVE1MX21vZGUgPSBpbl9hcnJheSgnbWV0YUhUTUwnLCAkbW9kZSwgdHJ1ZSk7CisJCSRtZXRhSlNPTl9tb2RlID0gaW5fYXJyYXkoJ21ldGFKU09OJywgJG1vZGUsIHRydWUpOworCisJCSR1cmwgPSAkdGhpcy0+bGVnYWwyYWJzX3VybF9wYXRoKCRsZWdhbF91cmwpOworCQkkZmlsZW5hbWUgPSBiYXNlbmFtZSgkdXJsKTsKKworCQkvLyBtdXN0IHRyYW5zZm9ybSBoZXJlIHNvIGFsaWFzL2V0Yy4gZXhwYW5zaW9ucyBpbnNpZGUgdXJsX3BhdGgyZmlsZV9wYXRoKCkgZ2V0IGEgY2hhbmNlOgorCQkkZmlsZSA9ICR0aGlzLT51cmxfcGF0aDJmaWxlX3BhdGgoJHVybCk7CisKKwkJJGlzZGlyID0gIWlzX2ZpbGUoJGZpbGUpOworCQkkYmFkX2V4dCA9IGZhbHNlOworCQkkbWltZSA9IG51bGw7CisJCS8vIG9ubHkgcGVyZm9ybSB0aGUgKGNvc3RseSkgZ2V0SUQzIHNjYW4gd2hlbiBpdCBoYXNuJ3QgYmVlbiBkb25lIGJlZm9yZSwgaS5lLiBjYW4gd2UgcmUtdXNlIHByZXZpb3VzbHkgb2J0YWluZWQgZGF0YSBvciBub3Q/CisJCWlmICghaXNfb2JqZWN0KCRtZXRhKSkKKwkJeworCQkJJG1ldGEgPSAkdGhpcy0+Z2V0RmlsZUluZm8oJGZpbGUsICRsZWdhbF91cmwpOworCQl9CisJCWlmICghJGlzZGlyKQorCQl7CisJCQkkbWltZSA9ICRtZXRhLT5nZXRNaW1lVHlwZSgpOworCisJCQkkbWltZTIgPSAkdGhpcy0+Z2V0TWltZUZyb21FeHQoJGZpbGUpOworCQkJJG1ldGEtPnN0b3JlKCdtaW1lX3R5cGUgZnJvbSBmaWxlIGV4dGVuc2lvbicsICRtaW1lMik7CisKKwkJCSRiYWRfZXh0ID0gKCRtaW1lMiAhPSAkbWltZSk7CisJCQlpZiAoJGJhZF9leHQpCisJCQl7CisJCQkJJGljb25zcGVjID0gJ2lzLicgKyAkdGhpcy0+Z2V0RXh0RnJvbU1pbWUoJG1pbWUpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCSRpY29uc3BlYyA9ICRmaWxlbmFtZTsKKwkJCX0KKworCQkJaWYgKCEkdGhpcy0+SXNBbGxvd2VkTWltZVR5cGUoJG1pbWUsICRtaW1lX2ZpbHRlcnMpKQorCQkJCXRocm93IG5ldyBGaWxlTWFuYWdlckV4Y2VwdGlvbignZXh0ZW5zaW9uJyk7CisJCX0KKwkJZWxzZSBpZiAoaXNfZGlyKCRmaWxlKSkKKwkJeworCQkJJG1pbWUgPSAkbWV0YS0+Z2V0TWltZVR5cGUoKTsKKwkJCS8vICRtaW1lID0gJ3RleHQvZGlyZWN0b3J5JzsKKwkJCSRpY29uc3BlYyA9ICdpcy5kaXJlY3RvcnknOworCQl9CisJCWVsc2UKKwkJeworCQkJLy8gc2ltcGx5IGRvIE5PVCBsaXN0IGFueXRoaW5nIHRoYXQgd2UgY2Fubm90IGNvcGUgd2l0aC4KKwkJCS8vIFRoYXQgaW5jbHVkZXMgY2xlYXJseSBpbmFjY2Vzc2libGUgZmlsZXMgKGFuZCBwYXRocykgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVyczoKKwkJCS8vIFBIUDUgYW5kIGJlbG93IGFyZSBhIHJlYWwgbWVzcyB3aGVuIGl0IGNvbWVzIHRvIGhhbmRsaW5nIFVuaWNvZGUgZmlsZXN5c3RlbXMKKwkJCS8vIChzZWUgdGhlIHBocC5uZXQgc2l0ZSB0b286IHJlYWRkaXIgLyBnbG9iIC8gZXRjLiB1c2VyIGNvbW1lbnRzIGFuZCB0aGUgb2ZmaWNpYWwKKwkJCS8vIG5vdGljZSB0aGF0IFBIUCB3aWxsIHN1cHBvcnQgZmlsZXN5c3RlbSBVVEYtOC9Vbmljb2RlIG9ubHkgd2hlbiBQSFA2IGlzIHJlbGVhc2VkLgorCQkJLy8KKwkJCS8vIEJpZywgZmF0IGJ1bW1lciEKKwkJCXRocm93IG5ldyBGaWxlTWFuYWdlckV4Y2VwdGlvbignbm9maWxlJyk7CisJCX0KKworCQkvLyBhcyBhbGwgdGhlIHdvcmsgYmVsb3cgaXMgcXVpdGUgY29zdGx5LCB3ZSBjaGVjayB3aGV0aGVyIHRoZSBhbHJlYWR5IGxvYWRlZCBjYWNoZSBlbnRyeSBnb3Qgb3VyIG51bWJlcjoKKwkJLy8gc2V2ZXJhbCBjaHVua3Mgb2Ygd29yayBiZWxvdyBtYXkgaGF2ZSBiZWVuIGNhY2hlZCBhbmQgd2hlbiB0aGV5IGhhdmUgYmVlbiwgdXNlIHRoZSBjYWNoZWQgZGF0YS4KKworCQkvLyBpdCdzIGFuIGludGVybmFsIGVycm9yIHdoZW4gdGhpcyBlbnRyeSBkbyBub3QgZXhpc3QgaW4gdGhlIGNhY2hlIHN0b3JlIGJ5IG5vdyEKKwkJJGZpID0gJG1ldGEtPmZldGNoKCdhbmFseXNpcycpOworCQkvL2Fzc2VydCghZW1wdHkoJGZpKSk7CisKKwkJJGljb240OCA9ICR0aGlzLT5nZXRJY29uKCRpY29uc3BlYywgZmFsc2UpOworCQkkaWNvbiA9ICR0aGlzLT5nZXRJY29uKCRpY29uc3BlYywgdHJ1ZSk7CisKKwkJJHRodW1iMjUwID0gJG1ldGEtPmZldGNoKCd0aHVtYjI1MF9kaXJlY3QnKTsKKwkJJHRodW1iNDggPSAkbWV0YS0+ZmV0Y2goJ3RodW1iNDhfZGlyZWN0Jyk7CisJCSR0aHVtYjI1MF9lID0gZmFsc2U7CisJCSR0aHVtYjQ4X2UgID0gZmFsc2U7CisKKwkJJHRzdGFtcF9zdHIgPSBkYXRlKCR0aGlzLT5vcHRpb25zWydkYXRlRm9ybWF0J10sIEBmaWxlbXRpbWUoJGZpbGUpKTsKKwkJJGZzaXplID0gQGZpbGVzaXplKCRmaWxlKTsKKwkJJGZzaXplX3N0ciA9IGVtcHR5KCRmc2l6ZSkgPyAnLScgOiAkdGhpcy0+Zm9ybWF0X2J5dGVzKCRmc2l6ZSk7IC8vIGNvbnZlcnQgdG8gVC9HL00vSy1ieXRlczoKKyAgICAKKwkJJGpzb24gPSBhcnJheV9tZXJnZShhcnJheSgKKwkJCQkvLydzdGF0dXMnID0+IDEsCisJCQkJLy8nbWltZXR5cGUnID0+ICRtaW1lLAorCQkJCSdjb250ZW50JyA9PiBzZWxmOjpjb21wcmVzc0hUTUwoJzxkaXYgY2xhc3M9Im1hcmdpbiI+CisJCQkJCSR7bm9wcmV2aWV3fQorCQkJCTwvZGl2PicpCisJCQkpLAorCQkJYXJyYXkoCisJCQkJJ3BhdGgnID0+ICRsZWdhbF91cmwsCisJCQkJJ3VybCcgID0+ICR1cmwsCisJCQkJJ25hbWUnID0+ICRmaWxlbmFtZSwKKwkJCQknZGF0ZScgPT4gJHRzdGFtcF9zdHIsCisJCQkJJ21pbWUnID0+ICRtaW1lLAorCQkJCSdzaXplJyA9PiAkZnNpemUsCisJCQkJJ21vZGlmaWVkJyA9PiBAZmlsZW10aW1lKCRmaWxlKSwKKwkJCQknc2l6ZV9zdHInID0+ICRmc2l6ZV9zdHIKKwkJCSkpOworCisJCSRjb250ZW50ID0gJzxkbD4KKwkJCQkJCTxkdD4ke21vZGlmaWVkfTwvZHQ+CisJCQkJCQk8ZGQgY2xhc3M9ImZpbGVtYW5hZ2VyLW1vZGlmaWVkIj4nIC4gJHRzdGFtcF9zdHIgLiAnPC9kZD4KKwkJCQkJCTxkdD4ke3R5cGV9PC9kdD4KKwkJCQkJCTxkZCBjbGFzcz0iZmlsZW1hbmFnZXItdHlwZSI+JyAuICRtaW1lIC4gJzwvZGQ+CisJCQkJCQk8ZHQ+JHtzaXplfTwvZHQ+CisJCQkJCQk8ZGQgY2xhc3M9ImZpbGVtYW5hZ2VyLXNpemUiPicgLiAkZnNpemVfc3RyIC4gJzwvZGQ+JzsKKwkJJGNvbnRlbnRfZGxfdGVybSA9IGZhbHNlOworCisJCSRwcmV2aWV3X0hUTUwgPSBudWxsOworCQkkcG9zdGRpYWdfZXJyX0hUTUwgPSAnJzsKKwkJJHBvc3RkaWFnX2R1bXBfSFRNTCA9ICcnOworCQkkdGh1bWJuYWlsc19kb25lX29yX2RlZmVycmVkID0gZmFsc2U7ICAgLy8gVFJVRTogbWFyayBvdXIgdGh1bWJuYWlsIHdvcmsgYXMgJ2RvbmUnOyBhbnkgTlVMTCB0aHVtYm5haWxzIHJlcHJlc2VudCBkZWZlcnJlZCBnZW5lcmF0aW9uIGVudHJpZXMhCisJCSRjaGVja19mb3JfZW1iZWRkZWRfaW1nID0gZmFsc2U7CisKKwkJJG1pbWVfZWxzID0gZXhwbG9kZSgnLycsICRtaW1lKTsKKwkJZm9yKDs7KSAvLyBib2d1cyBsb29wOyBvbmx5IG1lYW50IHRvIGFzc2lzdCB0aGUgW21pbWUgcmVtYXBwaW5nXSBzdGF0ZSBtYWNoaW5lIGluIGhlcmUKKwkJeworCQkJc3dpdGNoICgkbWltZV9lbHNbMF0pCisJCQl7CisJCQljYXNlICdpbWFnZSc6CisJCQkJLyoKKwkJCQkgKiB0aHVtYm5haWxfZ2VuX21vZGUgPT09ICdhdXRvJzoKKwkJCQkgKgorCQkJCSAqIG9mZmxvYWQgdGhlIHRodW1ibmFpbGluZyBwcm9jZXNzIHRvIGFub3RoZXIgZXZlbnQgKCdldmVudD10aHVtYm5haWwnKSB0byBiZSBmaXJlZCBieSB0aGUgY2xpZW50CisJCQkJICogd2hlbiBpdCdzIHRpbWUgdG8gcmVuZGVyIHRoZSB0aHVtYm5haWw6CisJCQkJICogV0Ugc2ltcGx5IGFzc3VtZSB0aGUgdGh1bWJuYWlsIHdpbGwgYmUgdGhlcmUsIGFuZCB3aGVuIGl0IGRvZXNuJ3QsIHRoYXQncworCQkJCSAqIGZvciB0aGUgZXZlbnQ9dGh1bWJuYWlsIGhhbmRsZXIgdG8gd29ycnkgYWJvdXQgKGNyZWF0aW5nIHRoZSB0aHVtYm5haWwgb24gZGVtYW5kIG9yIHNlcnZpbmcKKwkJCQkgKiBhIGdlbmVyaWMgaWNvbiBpbWFnZSBpbnN0ZWFkKS4gTWVhbndoaWxlLCB3ZSBhcmUgYWJsZSB0byBzcGVlZCB1cCB0aGUgcmVzcG9uc2UgcHJvY2VzcyBoZXJlIHF1aXRlCisJCQkJICogYSBiaXQgKHJlbmRlcmluZyB0aHVtYm5haWxzIGZyb20gdmVyeSBsYXJnZSBpbWFnZXMgY2FuIHRha2UgYSBsb3Qgb2YgdGltZSEpCisJCQkJICoKKwkJCQkgKiBUbyBmdXJ0aGVyIGltcHJvdmUgbWF0dGVycywgd2UgZmlyc3QgZ2VuZXJhdGUgdGhlIDI1MHB4IHRodW1ibmFpbCBhbmQgdGhlbiBnZW5lcmF0ZSB0aGUgNDhweAorCQkJCSAqIHRodW1ibmFpbCBmcm9tIHRoYXQgb25lIChpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QpLiBUaGF0IHNhdmVzIHVzIG9uZSBtb3JlIHRpbWUgcHJvY2Vzc2luZworCQkJCSAqIHRoZSAocG9zc2libHkgaHVnZSkgb3JpZ2luYWwgaW1hZ2U7IGRvd25zY2FsaW5nIHRoZSAyNTBweCBmaWxlIGlzIHF1aXRlIGZhc3QsIHJlbGF0aXZlbHkgc3BlYWtpbmcuCisJCQkJICoKKwkJCQkgKiBUaGF0IGJpdCBvZiBjb2RlIEFTU1VNRVMgdGhhdCB0aGUgdGh1bWJuYWlsIHdpbGwgYmUgZ2VuZXJhdGVkIGZyb20gdGhlIGZpbGUgYXJndW1lbnQsIHdoaWxlCisJCQkJICogdGhlIHVybCBhcmd1bWVudCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgdGh1bWJuYWlsIG5hbWUvcGF0aC4KKwkJCQkgKi8KKwkJCQkkZW1zZyA9IG51bGw7CisJCQkJdHJ5CisJCQkJeworCQkJCQlpZiAoZW1wdHkoJHRodW1iMjUwKSkKKwkJCQkJeworCQkJCQkJJHRodW1iMjUwID0gJHRoaXMtPmdldFRodW1iKCRtZXRhLCAkZmlsZSwgJHRoaXMtPm9wdGlvbnNbJ3RodW1iQmlnU2l6ZSddLCAkdGhpcy0+b3B0aW9uc1sndGh1bWJCaWdTaXplJ10sICRhdXRvX3RodW1iX2dlbl9tb2RlKTsKKwkJCQkJfQorCQkJCQlpZiAoIWVtcHR5KCR0aHVtYjI1MCkpCisJCQkJCXsKKwkJCQkJCSR0aHVtYjI1MF9lID0gRmlsZU1hbmFnZXJVdGlsaXR5OjpyYXd1cmxlbmNvZGVfcGF0aCgkdGh1bWIyNTApOworCQkJCQl9CisJCQkJCWlmIChlbXB0eSgkdGh1bWI0OCkpCisJCQkJCXsKKwkJCQkJCSR0aHVtYjQ4ID0gJHRoaXMtPmdldFRodW1iKCRtZXRhLCAoIWVtcHR5KCR0aHVtYjI1MCkgPyAkdGhpcy0+dXJsX3BhdGgyZmlsZV9wYXRoKCR0aHVtYjI1MCkgOiAkZmlsZSksICR0aGlzLT5vcHRpb25zWyd0aHVtYlNtYWxsU2l6ZSddLCAkdGhpcy0+b3B0aW9uc1sndGh1bWJTbWFsbFNpemUnXSwgJGF1dG9fdGh1bWJfZ2VuX21vZGUpOworCQkJCQl9CisJCQkJCWlmICghZW1wdHkoJHRodW1iNDgpKQorCQkJCQl7CisJCQkJCQkkdGh1bWI0OF9lID0gRmlsZU1hbmFnZXJVdGlsaXR5OjpyYXd1cmxlbmNvZGVfcGF0aCgkdGh1bWI0OCk7CisJCQkJCX0KKworCQkJCQlpZiAoZW1wdHkoJHRodW1iNDgpIHx8IGVtcHR5KCR0aHVtYjI1MCkpCisJCQkJCXsKKwkJCQkJCS8qCisJCQkJCQkgKiBkbyBOT1QgZ2VuZXJhdGUgdGhlIHRodW1ibmFpbCBpdHNlbGYgeWV0IChpdCB0YWtlcyB0b28gbXVjaCB0aW1lISkgYnV0IGRvIGNoZWNrIHdoZXRoZXIgaXQgQ0FOIGJlIGdlbmVyYXRlZAorCQkJCQkJICogYXQgYWxsOiBUSEFUIGlzIGEgKHJlbGF0aXZlbHkgc3BlYWtpbmcpIGZhc3Qgb3BlcmF0aW9uIQorCQkJCQkJICovCisJCQkJCQkkaW1naW5mbyA9IEltYWdlOjpjaGVja0ZpbGVGb3JQcm9jZXNzaW5nKCRmaWxlKTsKKwkJCQkJfQorCQkJCQkkdGh1bWJuYWlsc19kb25lX29yX2RlZmVycmVkID0gdHJ1ZTsKKwkJCQl9CisJCQkJY2F0Y2ggKEV4Y2VwdGlvbiAkZSkKKwkJCQl7CisJCQkJCSRlbXNnID0gJGUtPmdldE1lc3NhZ2UoKTsKKwkJCQkJJGljb240OCA9ICR0aGlzLT5nZXRJY29uRm9yRXJyb3IoJGVtc2csICRsZWdhbF91cmwsIGZhbHNlKTsKKwkJCQkJJGljb24gPSAkdGhpcy0+Z2V0SWNvbkZvckVycm9yKCRlbXNnLCAkbGVnYWxfdXJsLCB0cnVlKTsKKwkJCQkJLy8gZXZlbiBjYWNoZSB0aGUgZmFpbDogdGhhdCBtZWFucyBuZXh0IHRpbWUgYXJvdW5kIHdlIGRvbid0IHN1ZmZlciB0aGUgZmFpbHVyZSBidXQgaW1tZWRpYXRlbHkgc2VydmUgdGhlIGVycm9yIGljb24gaW5zdGVhZC4KKwkJCQl9CisKKwkJCQkkd2lkdGggPSByb3VuZCgkdGhpcy0+Z2V0SUQzaW5mb0l0ZW0oJGZpLCAwLCAndmlkZW8nLCAncmVzb2x1dGlvbl94JykpOworCQkJCSRoZWlnaHQgPSByb3VuZCgkdGhpcy0+Z2V0SUQzaW5mb0l0ZW0oJGZpLCAwLCAndmlkZW8nLCAncmVzb2x1dGlvbl95JykpOworCQkJCSRqc29uWyd3aWR0aCddID0gJHdpZHRoOworCQkJCSRqc29uWydoZWlnaHQnXSA9ICRoZWlnaHQ7CisKKwkJCQkkY29udGVudCAuPSAnCisJCQkJCQk8ZHQ+JHt3aWR0aH08L2R0PjxkZD4nIC4gJHdpZHRoIC4gJ3B4PC9kZD4KKwkJCQkJCTxkdD4ke2hlaWdodH08L2R0PjxkZD4nIC4gJGhlaWdodCAuICdweDwvZGQ+CisJCQkJCTwvZGw+JzsKKwkJCQkkY29udGVudF9kbF90ZXJtID0gdHJ1ZTsKKworCQkJCSRzd19tYWtlID0gJHRoaXMtPm1rU2FmZVVURjgoJHRoaXMtPmdldElEM2luZm9JdGVtKCRmaSwgbnVsbCwgJ2pwZycsICdleGlmJywgJ0lGRDAnLCAnU29mdHdhcmUnKSk7CisJCQkJJHRpbWVfbWFrZSA9ICR0aGlzLT5ta1NhZmVVVEY4KCR0aGlzLT5nZXRJRDNpbmZvSXRlbSgkZmksIG51bGwsICdqcGcnLCAnZXhpZicsICdJRkQwJywgJ0RhdGVUaW1lJykpOworCisJCQkJaWYgKCFlbXB0eSgkc3dfbWFrZSkgfHwgIWVtcHR5KCR0aW1lX21ha2UpKQorCQkJCXsKKwkJCQkJJGNvbnRlbnQgLj0gJzxwPk1hZGUgd2l0aCAnIC4gKGVtcHR5KCRzd19tYWtlKSA/ICc/Pz8nIDogJHN3X21ha2UpIC4gJyBAICcgLiAoZW1wdHkoJHRpbWVfbWFrZSkgPyAnPz8/JyA6ICR0aW1lX21ha2UpIC4gJzwvcD4nOworCQkJCX0KKworCQkJCS8vIGFyZSB3ZSBkZWxheWluZyB0aGUgdGh1bWJuYWlsIGdlbmVyYXRpb24/IFdoZW4geWVzLCB0aGVuIHdlIG5lZWQgdG8gaW5mZXIgdGhlIHRodW1ibmFpbCBkaW1lbnNpb25zICphbnl3YXkqIQorCQkJCWlmIChlbXB0eSgkdGh1bWI0OCkgJiYgJHRodW1ibmFpbHNfZG9uZV9vcl9kZWZlcnJlZCkKKwkJCQl7CisJCQkJCSRkaW1zID0gJHRoaXMtPnByZWRpY3RUaHVtYkRpbWVuc2lvbnMoJHdpZHRoLCAkaGVpZ2h0LCAkdGhpcy0+b3B0aW9uc1sndGh1bWJTbWFsbFNpemUnXSwgJHRoaXMtPm9wdGlvbnNbJ3RodW1iU21hbGxTaXplJ10pOworCisJCQkJCSRqc29uWyd0aHVtYjQ4X3dpZHRoJ10gPSAkZGltc1snd2lkdGgnXTsKKwkJCQkJJGpzb25bJ3RodW1iNDhfaGVpZ2h0J10gPSAkZGltc1snaGVpZ2h0J107CisJCQkJfQorCQkJCWlmIChlbXB0eSgkdGh1bWIyNTApKQorCQkJCXsKKwkJCQkJaWYgKCR0aHVtYm5haWxzX2RvbmVfb3JfZGVmZXJyZWQpCisJCQkJCXsKKwkJCQkJCS8vIHRvIHNob3cgdGhlIGxvYWRlci5naWYgaW4gdGhlIHByZXZpZXcgPGltZz4gdGFnLCB3ZSBNVVNUIHNldCBhIHdpZHRoK2hlaWdodCB0aGVyZSwgc28gd2UgZ3Vlc3RpbWF0ZSB0aGUgdGh1bWJuYWlsMjUwIHNpemUgYXMgYWNjdXJhdGVseSBhcyBwb3NzaWJsZQorCQkJCQkJLy8KKwkJCQkJCS8vIGRlcml2ZSBzaXplIGZyb20gb3JpZ2luYWw6CisJCQkJCQkkZGltcyA9ICR0aGlzLT5wcmVkaWN0VGh1bWJEaW1lbnNpb25zKCR3aWR0aCwgJGhlaWdodCwgJHRoaXMtPm9wdGlvbnNbJ3RodW1iQmlnU2l6ZSddLCAkdGhpcy0+b3B0aW9uc1sndGh1bWJCaWdTaXplJ10pOworCisJCQkJCQkkcHJldmlld19IVE1MID0gJzxhIGhyZWY9IicgLiBGaWxlTWFuYWdlclV0aWxpdHk6OnJhd3VybGVuY29kZV9wYXRoKCR1cmwpIC4gJyIgZGF0YS1taWxrYm94PSJzaW5nbGUiIHRpdGxlPSInIC4gaHRtbGVudGl0aWVzKCRmaWxlbmFtZSwgRU5UX1FVT1RFUywgJ1VURi04JykgLiAnIj4KKwkJCQkJCQkJCSAgIDxpbWcgc3JjPSInIC4gJHRoaXMtPm9wdGlvbnNbJ2Fzc2V0QmFzZVBhdGgnXSAuICdJbWFnZXMvdHJhbnNwYXJlbnQuZ2lmIiBjbGFzcz0icHJldmlldyIgYWx0PSJwcmV2aWV3IiBzdHlsZT0id2lkdGg6ICcgLiAkZGltc1snd2lkdGgnXSAuICdweDsgaGVpZ2h0OiAnIC4gJGRpbXNbJ2hlaWdodCddIC4gJ3B4OyIgLz4KKwkJCQkJCQkJCSA8L2E+JzsKKworCQkJCQkJJGpzb25bJ3RodW1iMjUwX3dpZHRoJ10gPSAkZGltc1snd2lkdGgnXTsKKwkJCQkJCSRqc29uWyd0aHVtYjI1MF9oZWlnaHQnXSA9ICRkaW1zWydoZWlnaHQnXTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCS8vIHdoZW4gd2UgZ2V0IGhlcmUsIGEgZmFpbHVyZSBvY2N1cnJlZCBiZWZvcmUsIHNvIHdlIG9ubHkgd2lsbCBoYXZlIHRoZSBpY29ucy4gU28gd2UgdXNlIHRob3NlOgorCQkJCQkJJHByZXZpZXdfSFRNTCA9ICc8YSBocmVmPSInIC4gRmlsZU1hbmFnZXJVdGlsaXR5OjpyYXd1cmxlbmNvZGVfcGF0aCgkdXJsKSAuICciIGRhdGEtbWlsa2JveD0ic2luZ2xlIiB0aXRsZT0iJyAuIGh0bWxlbnRpdGllcygkZmlsZW5hbWUsIEVOVF9RVU9URVMsICdVVEYtOCcpIC4gJyI+CisJCQkJCQkJCQkgICA8aW1nIHNyYz0iJyAuIEZpbGVNYW5hZ2VyVXRpbGl0eTo6cmF3dXJsZW5jb2RlX3BhdGgoJGljb240OCkgLiAnIiBjbGFzcz0icHJldmlldyIgYWx0PSJwcmV2aWV3IiAvPgorCQkJCQkJCQkJIDwvYT4nOworCQkJCQl9CisJCQkJfQorCQkJCS8vIGVsc2U6IGRlZmVyIHRoZSAkcHJldmlld19IVE1MIHByb2R1Y3Rpb24gdW50aWwgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGlzIGFuZCBoYXZlIGZldGNoZWQgdGhlIGFjdHVhbCB0aHVtYm5haWwgZGltZW5zaW9ucworCisJCQkJaWYgKCFlbXB0eSgkZW1zZykpCisJCQkJeworCQkJCQkvLyB1c2UgdGhlIGFiaWxpdGllcyBvZiBtb2RpZnlfanNvbjRleGNlcHRpb24oKSB0byBtdW5nZS9mb3JtYXQgdGhlIGV4Y2VwdGlvbiBtZXNzYWdlOgorCQkJCQkkanNhID0gYXJyYXkoJ2Vycm9yJyA9PiAnJyk7CisJCQkJCSR0aGlzLT5tb2RpZnlfanNvbjRleGNlcHRpb24oJGpzYSwgJGVtc2csICdwYXRoID0gJyAuICR1cmwpOworCQkJCQkkcG9zdGRpYWdfZXJyX0hUTUwgLj0gIlxuIiAuICc8cCBjbGFzcz0iZXJyX2luZm8iPicgLiAkanNhWydlcnJvciddIC4gJzwvcD4nOworCisJCQkJCWlmIChzdHJwb3MoJGVtc2csICdpbWdfd2lsbF9ub3RfZml0JykgIT09IGZhbHNlKQorCQkJCQl7CisJCQkJCQkkZWFyciA9IGV4cGxvZGUoJzonLCAkZW1zZywgMik7CisJCQkJCQkkcG9zdGRpYWdfZXJyX0hUTUwgLj0gIlxuIiAuICc8cCBjbGFzcz0idGVjaF9pbmZvIj5Fc3RpbWF0ZWQgbWluaW11bSBtZW1vcnkgcmVxdWlyZW1lbnRzIHRvIGNyZWF0ZSB0aHVtYm5haWxzIGZvciB0aGlzIGltYWdlOiAnIC4gJGVhcnJbMV0gLiAnPC9wPic7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgJ3RleHQnOgorCQkJCXN3aXRjaCAoJG1pbWVfZWxzWzFdKQorCQkJCXsKKwkJCQljYXNlICdkaXJlY3RvcnknOgorCQkJCQkkcHJldmlld19IVE1MID0gJyc7CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKwkJCQkJLy8gdGV4dCBwcmV2aWV3OgorCQkJCQkkZmlsZWNvbnRlbnQgPSBAZmlsZV9nZXRfY29udGVudHMoJGZpbGUsIGZhbHNlLCBudWxsLCAwKTsKKwkJCQkJaWYgKCRmaWxlY29udGVudCA9PT0gZmFsc2UpCisJCQkJCQl0aHJvdyBuZXcgRmlsZU1hbmFnZXJFeGNlcHRpb24oJ25vZmlsZScpOworCisJCQkJCWlmICghRmlsZU1hbmFnZXJVdGlsaXR5Ojppc0JpbmFyeSgkZmlsZWNvbnRlbnQpKQorCQkJCQl7CisJCQkJCQkkcHJldmlld19IVE1MID0gJzxwcmU+JyAuIHN0cl9yZXBsYWNlKGFycmF5KCckJywgIlx0IiksIGFycmF5KCcmIzM2OycsICcmbmJzcDsmbmJzcDsnKSwgaHRtbGVudGl0aWVzKCRmaWxlY29udGVudCwgRU5UX05PUVVPVEVTLCAnVVRGLTgnKSkgLiAnPC9wcmU+JzsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCS8vIGVsc2U6IGZhbGwgYmFjayB0byAnbm8gcHJldmlldyBhdmFpbGFibGUnIChpZiBnZXRJRDMgZGlkbid0IGRlbGl2ZXIgaW5zdGVhZC4uLikKKwkJCQkJCSRtaW1lX2Vsc1swXSA9ICd1bmtub3duJzsgLy8gcmVtYXAhCisJCQkJCQljb250aW51ZSAzOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSAnYXBwbGljYXRpb24nOgorCQkJCXN3aXRjaCAoJG1pbWVfZWxzWzFdKQorCQkJCXsKKwkJCQljYXNlICd4LWphdmFzY3JpcHQnOgorCQkJCQkkbWltZV9lbHNbMF0gPSAndGV4dCc7IC8vIHJlbWFwIQorCQkJCQljb250aW51ZSAzOworCisJCQkJY2FzZSAnemlwJzoKKwkJCQkJJG91dCA9IGFycmF5KGFycmF5KCksIGFycmF5KCkpOworCQkJCQkkaW5mbyA9ICR0aGlzLT5nZXRJRDNpbmZvSXRlbSgkZmksIG51bGwsICd6aXAnLCAnZmlsZXMnKTsKKwkJCQkJaWYgKGlzX2FycmF5KCRpbmZvKSkKKwkJCQkJeworCQkJCQkJZm9yZWFjaCAoJGluZm8gYXMgJG5hbWUgPT4gJHNpemUpCisJCQkJCQl7CisJCQkJCQkJJG5hbWUgPSAkdGhpcy0+bWtTYWZlVVRGOCgkbmFtZSk7CisJCQkJCQkJJGlzZGlyID0gaXNfYXJyYXkoJHNpemUpOworCQkJCQkJCSRvdXRbJGlzZGlyID8gMCA6IDFdWyRuYW1lXSA9ICc8bGk+PGE+PGltZyBzcmM9IicgLiBGaWxlTWFuYWdlclV0aWxpdHk6OnJhd3VybGVuY29kZV9wYXRoKCR0aGlzLT5nZXRJY29uKCRuYW1lLCB0cnVlKSkgLiAnIiBhbHQ9IiIgLz4gJyAuICRuYW1lIC4gJzwvYT48L2xpPic7CisJCQkJCQl9CisJCQkJCQluYXRjYXNlc29ydCgkb3V0WzBdKTsKKwkJCQkJCW5hdGNhc2Vzb3J0KCRvdXRbMV0pOworCQkJCQkJJHByZXZpZXdfSFRNTCA9ICc8dWw+JyAuIGltcGxvZGUoYXJyYXlfbWVyZ2UoJG91dFswXSwgJG91dFsxXSkpIC4gJzwvdWw+JzsKKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkJCWNhc2UgJ3gtc2hvY2t3YXZlLWZsYXNoJzoKKwkJCQkJJGNoZWNrX2Zvcl9lbWJlZGRlZF9pbWcgPSB0cnVlOworCisJCQkJCSRpbmZvID0gJHRoaXMtPmdldElEM2luZm9JdGVtKCRmaSwgbnVsbCwgJ3N3ZicsICdoZWFkZXInKTsKKwkJCQkJaWYgKGlzX2FycmF5KCRpbmZvKSkKKwkJCQkJeworCQkJCQkJJHdpZHRoID0gcm91bmQoJHRoaXMtPmdldElEM2luZm9JdGVtKCRmaSwgMCwgJ3N3ZicsICdoZWFkZXInLCAnZnJhbWVfd2lkdGgnKSAvIDEwKTsKKwkJCQkJCSRoZWlnaHQgPSByb3VuZCgkdGhpcy0+Z2V0SUQzaW5mb0l0ZW0oJGZpLCAwLCAnc3dmJywgJ2hlYWRlcicsICdmcmFtZV9oZWlnaHQnKSAvIDEwKTsKKwkJCQkJCSRqc29uWyd3aWR0aCddID0gJHdpZHRoOworCQkJCQkJJGpzb25bJ2hlaWdodCddID0gJGhlaWdodDsKKworCQkJCQkJJGNvbnRlbnQgLj0gJworCQkJCQkJCQk8ZHQ+JHt3aWR0aH08L2R0PjxkZD4nIC4gJHdpZHRoIC4gJ3B4PC9kZD4KKwkJCQkJCQkJPGR0PiR7aGVpZ2h0fTwvZHQ+PGRkPicgLiAkaGVpZ2h0IC4gJ3B4PC9kZD4KKwkJCQkJCQkJPGR0PiR7bGVuZ3RofTwvZHQ+PGRkPicgLiByb3VuZCgkdGhpcy0+Z2V0SUQzaW5mb0l0ZW0oJGZpLCAwLCAnc3dmJywgJ2hlYWRlcicsICdsZW5ndGgnKSAvICR0aGlzLT5nZXRJRDNpbmZvSXRlbSgkZmksIDI1LCAnc3dmJywgJ2hlYWRlcicsICdmcmFtZV9jb3VudCcpKSAuICdzPC9kZD4KKwkJCQkJCQk8L2RsPic7CisJCQkJCQkkY29udGVudF9kbF90ZXJtID0gdHJ1ZTsKKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJCQkJCS8vIGVsc2U6IGZhbGwgYmFjayB0byAnbm8gcHJldmlldyBhdmFpbGFibGUnIChpZiBnZXRJRDMgZGlkbid0IGRlbGl2ZXIgaW5zdGVhZC4uLikKKwkJCQkJJG1pbWVfZWxzWzBdID0gJ3Vua25vd24nOyAvLyByZW1hcCEKKwkJCQkJY29udGludWUgMzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgJ2F1ZGlvJzoKKwkJCQkkY2hlY2tfZm9yX2VtYmVkZGVkX2ltZyA9IHRydWU7CisKKwkJCQkkdGl0bGUgPSAkdGhpcy0+bWtTYWZlVVRGOCgkdGhpcy0+Z2V0SUQzaW5mb0l0ZW0oJGZpLCAkdGhpcy0+Z2V0SUQzaW5mb0l0ZW0oJGZpLCAnPz8/JywgJ3RhZ3MnLCAnaWQzdjEnLCAndGl0bGUnLCAwKSwgJ3RhZ3MnLCAnaWQzdjInLCAndGl0bGUnLCAwKSk7CisJCQkJJGFydGlzdCA9ICR0aGlzLT5ta1NhZmVVVEY4KCR0aGlzLT5nZXRJRDNpbmZvSXRlbSgkZmksICR0aGlzLT5nZXRJRDNpbmZvSXRlbSgkZmksICc/Pz8nLCAndGFncycsICdpZDN2MScsICdhcnRpc3QnLCAwKSwgJ3RhZ3MnLCAnaWQzdjInLCAnYXJ0aXN0JywgMCkpOworCQkJCSRhbGJ1bSA9ICR0aGlzLT5ta1NhZmVVVEY4KCR0aGlzLT5nZXRJRDNpbmZvSXRlbSgkZmksICR0aGlzLT5nZXRJRDNpbmZvSXRlbSgkZmksICc/Pz8nLCAndGFncycsICdpZDN2MScsICdhbGJ1bScsIDApLCAndGFncycsICdpZDN2MicsICdhbGJ1bScsIDApKTsKKwkJCQkkbGVuZ3RoID0gICR0aGlzLT5ta1NhZmVVVEY4KCR0aGlzLT5nZXRJRDNpbmZvSXRlbSgkZmksICc/Pz8nLCAncGxheXRpbWVfc3RyaW5nJykpOworCQkJCSRiaXRyYXRlID0gcm91bmQoJHRoaXMtPmdldElEM2luZm9JdGVtKCRmaSwgMCwgJ2JpdHJhdGUnKSAvIDEwMDApOworCQkJCQorICAgICAgICAkanNvbiA9IGFycmF5X21lcmdlKCRqc29uLCBhcnJheSgndGl0bGUnID0+ICR0aXRsZSwgJ2FydGlzdCcgPT4gJGFydGlzdCwgJ2FsYnVtJyA9PiAkYWxidW0sICdsZW5ndGgnID0+ICRsZW5ndGgsICdiaXRyYXRlJyA9PiAkYml0cmF0ZSkpOworICAgICAgICAKKwkJCQkkY29udGVudCAuPSAnCisJCQkJCQk8ZHQ+JHt0aXRsZX08L2R0PjxkZD4nIC4gJHRpdGxlIC4gJzwvZGQ+CisJCQkJCQk8ZHQ+JHthcnRpc3R9PC9kdD48ZGQ+JyAuICRhcnRpc3QgLiAnPC9kZD4KKwkJCQkJCTxkdD4ke2FsYnVtfTwvZHQ+PGRkPicgLiAkYWxidW0gLiAnPC9kZD4KKwkJCQkJCTxkdD4ke2xlbmd0aH08L2R0PjxkZD4nIC4gJGxlbmd0aCAuICc8L2RkPgorCQkJCQkJPGR0PiR7Yml0cmF0ZX08L2R0PjxkZD4nIC4gJGJpdHJhdGUgLiAna2JwczwvZGQ+CisJCQkJCTwvZGw+JzsKKwkJCQkkY29udGVudF9kbF90ZXJtID0gdHJ1ZTsKKwkJCQlicmVhazsKKworCQkJY2FzZSAndmlkZW8nOgorCQkJCSRjaGVja19mb3JfZW1iZWRkZWRfaW1nID0gdHJ1ZTsKKworCQkJCSRhX2ZtdCA9ICR0aGlzLT5ta1NhZmVVVEY4KCR0aGlzLT5nZXRJRDNpbmZvSXRlbSgkZmksICc/Pz8nLCAnYXVkaW8nLCAnZGF0YWZvcm1hdCcpKTsKKwkJCQkkYV9zYW1wbGVyYXRlID0gcm91bmQoJHRoaXMtPmdldElEM2luZm9JdGVtKCRmaSwgMCwgJ2F1ZGlvJywgJ3NhbXBsZV9yYXRlJykgLyAxMDAwLCAxKTsKKwkJCQkkYV9iaXRyYXRlID0gcm91bmQoJHRoaXMtPmdldElEM2luZm9JdGVtKCRmaSwgMCwgJ2F1ZGlvJywgJ2JpdHJhdGUnKSAvIDEwMDAsIDEpOworCQkJCSRhX2JpdHJhdGVfbW9kZSA9ICR0aGlzLT5ta1NhZmVVVEY4KCR0aGlzLT5nZXRJRDNpbmZvSXRlbSgkZmksICc/Pz8nLCAnYXVkaW8nLCAnYml0cmF0ZV9tb2RlJykpOworCQkJCSRhX2NoYW5uZWxzID0gcm91bmQoJHRoaXMtPmdldElEM2luZm9JdGVtKCRmaSwgMCwgJ2F1ZGlvJywgJ2NoYW5uZWxzJykpOworCQkJCSRhX2NvZGVjID0gJHRoaXMtPm1rU2FmZVVURjgoJHRoaXMtPmdldElEM2luZm9JdGVtKCRmaSwgJycsICdhdWRpbycsICdjb2RlYycpKTsKKwkJCQkkYV9zdHJlYW1zID0gJHRoaXMtPmdldElEM2luZm9JdGVtKCRmaSwgJz8/PycsICdhdWRpbycsICdzdHJlYW1zJyk7CisJCQkJJGFfc3RyZWFtY291bnQgPSAoaXNfYXJyYXkoJGFfc3RyZWFtcykgPyBjb3VudCgkYV9zdHJlYW1zKSA6IDApOworCisJCQkJJHZfZm10ID0gJHRoaXMtPm1rU2FmZVVURjgoJHRoaXMtPmdldElEM2luZm9JdGVtKCRmaSwgJz8/PycsICd2aWRlbycsICdkYXRhZm9ybWF0JykpOworCQkJCSR2X2JpdHJhdGUgPSByb3VuZCgkdGhpcy0+Z2V0SUQzaW5mb0l0ZW0oJGZpLCAwLCAndmlkZW8nLCAnYml0cmF0ZScpIC8gMTAwMCwgMSk7CisJCQkJJHZfYml0cmF0ZV9tb2RlID0gJHRoaXMtPm1rU2FmZVVURjgoJHRoaXMtPmdldElEM2luZm9JdGVtKCRmaSwgJz8/PycsICd2aWRlbycsICdiaXRyYXRlX21vZGUnKSk7CisJCQkJJHZfZnJhbWVyYXRlID0gcm91bmQoJHRoaXMtPmdldElEM2luZm9JdGVtKCRmaSwgMCwgJ3ZpZGVvJywgJ2ZyYW1lX3JhdGUnKSwgNSk7CisJCQkJJHZfd2lkdGggPSByb3VuZCgkdGhpcy0+Z2V0SUQzaW5mb0l0ZW0oJGZpLCAnPz8/JywgJ3ZpZGVvJywgJ3Jlc29sdXRpb25feCcpKTsKKwkJCQkkdl9oZWlnaHQgPSByb3VuZCgkdGhpcy0+Z2V0SUQzaW5mb0l0ZW0oJGZpLCAnPz8/JywgJ3ZpZGVvJywgJ3Jlc29sdXRpb25feScpKTsKKwkJCQkkdl9wYXIgPSByb3VuZCgkdGhpcy0+Z2V0SUQzaW5mb0l0ZW0oJGZpLCAxLjAsICd2aWRlbycsICdwaXhlbF9hc3BlY3RfcmF0aW8nKSwgNyk7CisJCQkJJHZfY29kZWMgPSAkdGhpcy0+bWtTYWZlVVRGOCgkdGhpcy0+Z2V0SUQzaW5mb0l0ZW0oJGZpLCAnJywgJ3ZpZGVvJywgJ2NvZGVjJykpOworCisJCQkJJGdfYml0cmF0ZSA9IHJvdW5kKCR0aGlzLT5nZXRJRDNpbmZvSXRlbSgkZmksIDAsICdiaXRyYXRlJykgLyAxMDAwLCAxKTsKKwkJCQkkZ19wbGF5dGltZV9zdHIgPSAkdGhpcy0+bWtTYWZlVVRGOCgkdGhpcy0+Z2V0SUQzaW5mb0l0ZW0oJGZpLCAnPz8/JywgJ3BsYXl0aW1lX3N0cmluZycpKTsKKworCQkJCSRjb250ZW50IC49ICcKKwkJCQkJCTxkdD5BdWRpbzwvZHQ+PGRkPic7CisJCQkJaWYgKCRhX2ZtdCA9PT0gJz8/PycgJiYgJGFfc2FtcGxlcmF0ZSA9PSAwICYmICRhX2JpdHJhdGUgPT0gMCAmJiAkYV9iaXRyYXRlX21vZGUgPT09ICc/Pz8nICYmICRhX2NoYW5uZWxzID09IDAgJiYgZW1wdHkoJGFfY29kZWMpICYmICRhX3N0cmVhbXMgPT09ICc/Pz8nICYmICRhX3N0cmVhbWNvdW50ID09IDApCisJCQkJeworCQkJCQkkY29udGVudCAuPSAnLSc7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCSRjb250ZW50IC49ICRhX2ZtdCAuICghZW1wdHkoJGFfY29kZWMpID8gJyAoJyAuICRhX2NvZGVjIC4gJyknIDogJycpIC4KKwkJCQkJCQkJKCFlbXB0eSgkYV9jaGFubmVscykgPyAoJGFfY2hhbm5lbHMgPT09IDEgPyAnIChtb25vKScgOiAoJGFfY2hhbm5lbHMgPT09IDIgPyAnIChzdGVyZW8pJyA6ICcgKCcgLiAkYV9jaGFubmVscyAuICcgY2hhbm5lbHMpJykpIDogJycpIC4KKwkJCQkJCQkJJzogJyAuICRhX3NhbXBsZXJhdGUgLiAnIGtIeiBAICcgLiAkYV9iaXRyYXRlIC4gJyBrYnBzICgnIC4gc3RydG91cHBlcigkYV9iaXRyYXRlX21vZGUpIC4gJyknIC4KKwkJCQkJCQkJKCRhX3N0cmVhbWNvdW50ID4gMSA/ICcgKCcgLiAkYV9zdHJlYW1jb3VudCAuICcgc3RyZWFtcyknIDogJycpOworCQkJCX0KKwkJCQkkY29udGVudCAuPSAnPC9kZD4KKwkJCQkJCTxkdD5WaWRlbzwvZHQ+PGRkPicgLiAkdl9mbXQgLiAoIWVtcHR5KCR2X2NvZGVjKSA/ICcgKCcgLiAkdl9jb2RlYyAuICcpJyA6ICcnKSAuICAnOiAnIC4gJHZfZnJhbWVyYXRlIC4gJyBmcHMgQCAnIC4gJHZfYml0cmF0ZSAuICcga2JwcyAoJyAuIHN0cnRvdXBwZXIoJHZfYml0cmF0ZV9tb2RlKSAuICcpJyAuCisJCQkJCQkJCQkJCSgkdl9wYXIgIT0gMS4wID8gJywgUEFSOiAnIC4gJHZfcGFyIDogJycpIC4KKwkJCQkJCQkJCSc8L2RkPgorCQkJCQkJPGR0PiR7d2lkdGh9PC9kdD48ZGQ+JyAuICR2X3dpZHRoIC4gJ3B4PC9kZD4KKwkJCQkJCTxkdD4ke2hlaWdodH08L2R0PjxkZD4nIC4gJHZfaGVpZ2h0IC4gJ3B4PC9kZD4KKwkJCQkJCTxkdD4ke2xlbmd0aH08L2R0PjxkZD4nIC4gJGdfcGxheXRpbWVfc3RyIC4gJzwvZGQ+CisJCQkJCQk8ZHQ+JHtiaXRyYXRlfTwvZHQ+PGRkPicgLiAkZ19iaXRyYXRlIC4gJ2ticHM8L2RkPgorCQkJCQk8L2RsPic7CisJCQkJJGNvbnRlbnRfZGxfdGVybSA9IHRydWU7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJLy8gZmFsbCBiYWNrIHRvICdubyBwcmV2aWV3IGF2YWlsYWJsZScgKGlmIGdldElEMyBkaWRuJ3QgZGVsaXZlciBpbnN0ZWFkLi4uKQorCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQlpZiAoISRjb250ZW50X2RsX3Rlcm0pCisJCXsKKwkJCSRjb250ZW50IC49ICc8L2RsPic7CisJCX0KKworCQlpZiAoIWVtcHR5KCRmaVsnZXJyb3InXSkpCisJCXsKKwkJCSRwb3N0ZGlhZ19lcnJfSFRNTCAuPSAnPHAgY2xhc3M9ImVycl9pbmZvIj4nIC4gJHRoaXMtPm1rU2FmZVVURjgoaW1wbG9kZSgnLCAnLCAkZmlbJ2Vycm9yJ10pKSAuICc8L3A+JzsKKwkJfQorCisJCSRlbXNnWCA9IG51bGw7CisJCWlmIChlbXB0eSgkdGh1bWIyNTApKQorCQl7CisJCQlpZiAoISR0aHVtYm5haWxzX2RvbmVfb3JfZGVmZXJyZWQpCisJCQl7CisJCQkJLy8gY2hlY2sgaWYgd2UgaGF2ZSBzdG9yZWQgYSB0aHVtYm5haWwgZm9yIHRoaXMgZmlsZSBhbnlob3c6CisJCQkJJHRodW1iMjUwID0gJHRoaXMtPmdldFRodW1iKCRtZXRhLCAkZmlsZSwgJHRoaXMtPm9wdGlvbnNbJ3RodW1iQmlnU2l6ZSddLCAkdGhpcy0+b3B0aW9uc1sndGh1bWJCaWdTaXplJ10sIHRydWUpOworCQkJCWlmIChlbXB0eSgkdGh1bWIyNTApKQorCQkJCXsKKwkJCQkJaWYgKCFlbXB0eSgkZmkpICYmICRjaGVja19mb3JfZW1iZWRkZWRfaW1nKQorCQkJCQl7CisJCQkJCQkvKgorCQkJCQkJICogTm8gdGh1bWJuYWlsIGF2YWlsYWJsZSB5ZXQsIHNvIGZpbmQgbWUgb25lIQorCQkJCQkJICoKKwkJCQkJCSAqIFdoZW4gd2UgZmluZCBhIHRodW1ibmFpbCBkdXJpbmcgdGhlICdjbGVhbnVwJyBzY2FuLCB3ZSBkb24ndCBrbm93IHVwIGZyb250IGlmIGl0J3Mgc3VpdGFibGUgdG8gYmUgdXNlZCBkaXJlY3RseSwKKwkJCQkJCSAqIHNvIHdlIHRyZWF0IGl0IGFzIGFuIGFsdGVybmF0aXZlICdvcmlnaW5hbCcgZmlsZSBhbmQgZ2VuZXJhdGUgYSAyNTBweC80OHB4IHRodW1ibmFpbCBzZXQgZnJvbSBpdC4KKwkJCQkJCSAqCisJCQkJCQkgKiBXaGVuIHRoZSBlbWJlZGRlZCB0aHVtYm5haWwgaXMgc21hbGwgZW5vdWdoLCB0aGUgdGh1bWJuYWlsIGNyZWF0aW9uIHByb2Nlc3Mgd2lsbCBiZSBzaW1wbHkgYSBjb3B5IGFjdGlvbiwgc28gcmVsYXRpdmVseQorCQkJCQkJICogbG93IGNvc3QuCisJCQkJCQkgKi8KKwkJCQkJCSRlbWJlZCA9ICR0aGlzLT5leHRyYWN0X0lEM2luZm9fZW1iZWRkZWRfaW1hZ2UoJGZpKTsKKwkJCQkJCS8vQGZpbGVfcHV0X2NvbnRlbnRzKGRpcm5hbWUoX19GSUxFX18pIC4gJy9leHRyYWN0X2VtYmVkZGVkX2ltZy5sb2cnLCBwcmludF9yKGFycmF5KCdodG1sJyA9PiAkcHJldmlld19IVE1MLCAnanNvbicgPT4gJGpzb24sICd0aHVtYjI1MF9lJyA9PiAkdGh1bWIyNTBfZSwgJ3RodW1iMjUwJyA9PiAkdGh1bWIyNTAsICdlbWJlZCcgPT4gJGVtYmVkLCAnZmlsZWluZm8nID0+ICRmaSksIHRydWUpKTsKKwkJCQkJCWlmIChpc19vYmplY3QoJGVtYmVkKSkKKwkJCQkJCXsKKwkJCQkJCQkkdGh1bWJYID0gJG1ldGEtPmdldFRodW1iVVJMKCdlbWJlZCcpOworCQkJCQkJCSR0ZmkgPSBwYXRoaW5mbygkdGh1bWJYKTsKKwkJCQkJCQkkdGZpWydleHRlbnNpb24nXSA9IGltYWdlX3R5cGVfdG9fZXh0ZW5zaW9uKCRlbWJlZC0+bWV0YWRhdGFbMl0pOworCQkJCQkJCSR0aHVtYlggPSAkdGZpWydkaXJuYW1lJ10gLiAnLycgLiAkdGZpWydmaWxlbmFtZSddIC4gJy4nIC4gJHRmaVsnZXh0ZW5zaW9uJ107CisJCQkJCQkJJHRodW1iWCA9ICR0aGlzLT5ub3JtYWxpemUoJHRodW1iWCk7CisJCQkJCQkJJHRodW1iWF9mID0gJHRoaXMtPnVybF9wYXRoMmZpbGVfcGF0aCgkdGh1bWJYKTsKKwkJCQkJCQkvLyBhcyB3ZSd2ZSBzcGVudCBzb21lIGVmZm9ydCB0byBkaWcgb3V0IHRoZSBlbWJlZGRlZCB0aHVtYm5haWwsIGFuZCAna25vd2luZycgKGFzc3VtaW5nKSB0aGF0IGdlbmVyYWxseQorCQkJCQkJCS8vIGVtYmVkZGVkIHRodW1ibmFpbHMgYXJlIG5vdCB0b28gbGFyZ2UsIHdlIGRvbid0IGNvbmNlcm4gb3Vyc2VsdmVzIHdpdGggZGVsYXlpbmcgdGhlIHRodW1ibmFpbCBnZW5lcmF0aW9uICh0aGUKKwkJCQkJCQkvLyBzb3VyY2UgZmlsZSBtYXBwaW5nIGlzIG5vdCBiaWRpcmVjdGlvbmFsLCBlaXRoZXIhKSBhbmQgZ28gc3RyYWlnaHQgYWhlYWQgYW5kIHByb2R1Y2UgdGhlIDI1MHB4IHRodW1ibmFpbCBhdCBsZWFzdC4KKwkJCQkJCQkkdGh1bWIyNTAgICA9IGZhbHNlOworCQkJCQkJCSR0aHVtYjI1MF9lID0gZmFsc2U7CisJCQkJCQkJJHRodW1iNDggICAgPSBmYWxzZTsKKwkJCQkJCQkkdGh1bWI0OF9lICA9IGZhbHNlOworCQkJCQkJCSRtZXRhLT5ta0NhY2hlRGlyKCk7CisJCQkJCQkJaWYgKGZhbHNlID09PSBmaWxlX3B1dF9jb250ZW50cygkdGh1bWJYX2YsICRlbWJlZC0+aW1hZ2VkYXRhKSkKKwkJCQkJCQl7CisJCQkJCQkJCUB1bmxpbmsoJHRodW1iWF9mKTsKKwkJCQkJCQkJJGVtc2dYID0gJ0Nhbm5vdCBzYXZlIGVtYmVkZGVkIGltYWdlIGRhdGEgdG8gY2FjaGUuJzsKKwkJCQkJCQkJJGljb240OCA9ICR0aGlzLT5nZXRJY29uKCdpcy5kZWZhdWx0LWVycm9yJywgZmFsc2UpOworCQkJCQkJCQkkaWNvbiA9ICR0aGlzLT5nZXRJY29uKCdpcy5kZWZhdWx0LWVycm9yJywgdHJ1ZSk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UKKwkJCQkJCQl7CisJCQkJCQkJCXRyeQorCQkJCQkJCQl7CisJCQkJCQkJCQkkdGh1bWIyNTAgPSAkdGhpcy0+Z2V0VGh1bWIoJG1ldGEsICR0aHVtYlhfZiwgJHRoaXMtPm9wdGlvbnNbJ3RodW1iQmlnU2l6ZSddLCAkdGhpcy0+b3B0aW9uc1sndGh1bWJCaWdTaXplJ10sIGZhbHNlKTsKKwkJCQkJCQkJCWlmICghZW1wdHkoJHRodW1iMjUwKSkKKwkJCQkJCQkJCXsKKwkJCQkJCQkJCQkkdGh1bWIyNTBfZSA9IEZpbGVNYW5hZ2VyVXRpbGl0eTo6cmF3dXJsZW5jb2RlX3BhdGgoJHRodW1iMjUwKTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJCSR0aHVtYjQ4ID0gJHRoaXMtPmdldFRodW1iKCRtZXRhLCAoIWVtcHR5KCR0aHVtYjI1MCkgPyAkdGhpcy0+dXJsX3BhdGgyZmlsZV9wYXRoKCR0aHVtYjI1MCkgOiAkdGh1bWJYX2YpLCAkdGhpcy0+b3B0aW9uc1sndGh1bWJTbWFsbFNpemUnXSwgJHRoaXMtPm9wdGlvbnNbJ3RodW1iU21hbGxTaXplJ10sIGZhbHNlKTsKKwkJCQkJCQkJCWlmICghZW1wdHkoJHRodW1iNDgpKQorCQkJCQkJCQkJeworCQkJCQkJCQkJCSR0aHVtYjQ4X2UgPSBGaWxlTWFuYWdlclV0aWxpdHk6OnJhd3VybGVuY29kZV9wYXRoKCR0aHVtYjQ4KTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCQljYXRjaCAoRXhjZXB0aW9uICRlKQorCQkJCQkJCQl7CisJCQkJCQkJCQkkZW1zZ1ggPSAkZS0+Z2V0TWVzc2FnZSgpOworCQkJCQkJCQkJJGljb240OCA9ICR0aGlzLT5nZXRJY29uRm9yRXJyb3IoJGVtc2dYLCAkbGVnYWxfdXJsLCBmYWxzZSk7CisJCQkJCQkJCQkkaWNvbiA9ICR0aGlzLT5nZXRJY29uRm9yRXJyb3IoJGVtc2dYLCAkbGVnYWxfdXJsLCB0cnVlKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvLyAhZW1wdHkoJHRodW1iMjUwKQorCQkJCQkkdGh1bWIyNTBfZSA9IEZpbGVNYW5hZ2VyVXRpbGl0eTo6cmF3dXJsZW5jb2RlX3BhdGgoJHRodW1iMjUwKTsKKwkJCQkJdHJ5CisJCQkJCXsKKwkJCQkJCSR0aHVtYjQ4ID0gJHRoaXMtPmdldFRodW1iKCRtZXRhLCAkdGhpcy0+dXJsX3BhdGgyZmlsZV9wYXRoKCR0aHVtYjI1MCksICR0aGlzLT5vcHRpb25zWyd0aHVtYlNtYWxsU2l6ZSddLCAkdGhpcy0+b3B0aW9uc1sndGh1bWJTbWFsbFNpemUnXSwgZmFsc2UpOworCQkJCQkJYXNzZXJ0KCFlbXB0eSgkdGh1bWI0OCkpOworCQkJCQkJJHRodW1iNDhfZSA9IEZpbGVNYW5hZ2VyVXRpbGl0eTo6cmF3dXJsZW5jb2RlX3BhdGgoJHRodW1iNDgpOworCQkJCQl9CisJCQkJCWNhdGNoIChFeGNlcHRpb24gJGUpCisJCQkJCXsKKwkJCQkJCSRlbXNnWCA9ICRlLT5nZXRNZXNzYWdlKCk7CisJCQkJCQkkaWNvbjQ4ID0gJHRoaXMtPmdldEljb25Gb3JFcnJvcigkZW1zZ1gsICRsZWdhbF91cmwsIGZhbHNlKTsKKwkJCQkJCSRpY29uID0gJHRoaXMtPmdldEljb25Gb3JFcnJvcigkZW1zZ1gsICRsZWdhbF91cmwsIHRydWUpOworCQkJCQkJJHRodW1iNDggPSBmYWxzZTsKKwkJCQkJCSR0aHVtYjQ4X2UgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIC8vIGlmICghZW1wdHkoJHRodW1iMjUwKSkKKwkJeworCQkJaWYgKGVtcHR5KCR0aHVtYjI1MF9lKSkKKwkJCXsKKwkJCQkkdGh1bWIyNTBfZSA9IEZpbGVNYW5hZ2VyVXRpbGl0eTo6cmF3dXJsZW5jb2RlX3BhdGgoJHRodW1iMjUwKTsKKwkJCX0KKwkJCWlmIChlbXB0eSgkdGh1bWI0OCkpCisJCQl7CisJCQkJdHJ5CisJCQkJeworCQkJCQkkdGh1bWI0OCA9ICR0aGlzLT5nZXRUaHVtYigkbWV0YSwgJHRoaXMtPnVybF9wYXRoMmZpbGVfcGF0aCgkdGh1bWIyNTApLCAkdGhpcy0+b3B0aW9uc1sndGh1bWJTbWFsbFNpemUnXSwgJHRoaXMtPm9wdGlvbnNbJ3RodW1iU21hbGxTaXplJ10sIGZhbHNlKTsKKwkJCQkJYXNzZXJ0KCFlbXB0eSgkdGh1bWI0OCkpOworCQkJCQkkdGh1bWI0OF9lID0gRmlsZU1hbmFnZXJVdGlsaXR5OjpyYXd1cmxlbmNvZGVfcGF0aCgkdGh1bWI0OCk7CisJCQkJfQorCQkJCWNhdGNoIChFeGNlcHRpb24gJGUpCisJCQkJeworCQkJCQkkZW1zZ1ggPSAkZS0+Z2V0TWVzc2FnZSgpOworCQkJCQkkaWNvbjQ4ID0gJHRoaXMtPmdldEljb25Gb3JFcnJvcigkZW1zZ1gsICRsZWdhbF91cmwsIGZhbHNlKTsKKwkJCQkJJGljb24gPSAkdGhpcy0+Z2V0SWNvbkZvckVycm9yKCRlbXNnWCwgJGxlZ2FsX3VybCwgdHJ1ZSk7CisJCQkJCSR0aHVtYjQ4ID0gZmFsc2U7CisJCQkJCSR0aHVtYjQ4X2UgPSBmYWxzZTsKKwkJCQl9CisJCQl9CisJCQlpZiAoZW1wdHkoJHRodW1iNDhfZSkpCisJCQl7CisJCQkJJHRodW1iNDhfZSA9IEZpbGVNYW5hZ2VyVXRpbGl0eTo6cmF3dXJsZW5jb2RlX3BhdGgoJHRodW1iNDgpOworCQkJfQorCQl9CisKKwkJLy8gYWxzbyBwcm92aWRlIFgvWSBzaXplIGluZm8gd2l0aCBlYWNoIGRpcmVjdC1hY2Nlc3MgdGh1bWJuYWlsIGZpbGU6CisJCWlmICghZW1wdHkoJHRodW1iMjUwKSkKKwkJeworCQkJJGpzb25bJ3RodW1iMjUwJ10gPSAkdGh1bWIyNTBfZTsKKwkJCSRtZXRhLT5zdG9yZSgndGh1bWIyNTBfZGlyZWN0JywgJHRodW1iMjUwKTsKKworCQkJJHRuc2l6ZSA9ICRtZXRhLT5mZXRjaCgndGh1bWIyNTBfaW5mbycpOworCQkJaWYgKGVtcHR5KCR0bnNpemUpKQorCQkJeworCQkJCSR0bnNpemUgPSBnZXRpbWFnZXNpemUoJHRoaXMtPnVybF9wYXRoMmZpbGVfcGF0aCgkdGh1bWIyNTApKTsKKwkJCQkkbWV0YS0+c3RvcmUoJ3RodW1iMjUwX2luZm8nLCAkdG5zaXplKTsKKwkJCX0KKwkJCWlmIChpc19hcnJheSgkdG5zaXplKSkKKwkJCXsKKwkJCQkkanNvblsndGh1bWIyNTBfd2lkdGgnXSA9ICR0bnNpemVbMF07CisJCQkJJGpzb25bJ3RodW1iMjUwX2hlaWdodCddID0gJHRuc2l6ZVsxXTsKKworCQkJCWlmIChlbXB0eSgkcHJldmlld19IVE1MKSkKKwkJCQl7CisJCQkJCSRwcmV2aWV3X0hUTUwgPSAnPGEgaHJlZj0iJyAuIEZpbGVNYW5hZ2VyVXRpbGl0eTo6cmF3dXJsZW5jb2RlX3BhdGgoJHVybCkgLiAnIiBkYXRhLW1pbGtib3g9InNpbmdsZSIgdGl0bGU9IicgLiBodG1sZW50aXRpZXMoJGZpbGVuYW1lLCBFTlRfUVVPVEVTLCAnVVRGLTgnKSAuICciPgorCQkJCQkJCQkJICAgPGltZyBzcmM9IicgLiAkdGh1bWIyNTBfZSAuICciIGNsYXNzPSJwcmV2aWV3IiBhbHQ9IicgLiAoIWVtcHR5KCRlbXNnWCkgPyAkdGhpcy0+bWtTYWZlNEhUTUxhdHRyKCRlbXNnWCkgOiAncHJldmlldycpIC4gJyIKKwkJCQkJCQkJCQkJc3R5bGU9IndpZHRoOiAnIC4gJHRuc2l6ZVswXSAuICdweDsgaGVpZ2h0OiAnIC4gJHRuc2l6ZVsxXSAuICdweDsiIC8+CisJCQkJCQkJCQkgPC9hPic7CisJCQkJfQorCQkJfQorCQl9CisJCWlmICghZW1wdHkoJHRodW1iNDgpKQorCQl7CisJCQkkanNvblsndGh1bWI0OCddID0gJHRodW1iNDhfZTsKKwkJCSRtZXRhLT5zdG9yZSgndGh1bWI0OF9kaXJlY3QnLCAkdGh1bWI0OCk7CisKKwkJCSR0bnNpemUgPSAkbWV0YS0+ZmV0Y2goJ3RodW1iNDhfaW5mbycpOworCQkJaWYgKGVtcHR5KCR0bnNpemUpKQorCQkJeworCQkJCSR0bnNpemUgPSBnZXRpbWFnZXNpemUoJHRoaXMtPnVybF9wYXRoMmZpbGVfcGF0aCgkdGh1bWI0OCkpOworCQkJCSRtZXRhLT5zdG9yZSgndGh1bWI0OF9pbmZvJywgJHRuc2l6ZSk7CisJCQl9CisJCQlpZiAoaXNfYXJyYXkoJHRuc2l6ZSkpCisJCQl7CisJCQkJJGpzb25bJ3RodW1iNDhfd2lkdGgnXSA9ICR0bnNpemVbMF07CisJCQkJJGpzb25bJ3RodW1iNDhfaGVpZ2h0J10gPSAkdG5zaXplWzFdOworCQkJfQorCQl9CisJCWlmICgkdGh1bWJuYWlsc19kb25lX29yX2RlZmVycmVkICYmIChlbXB0eSgkdGh1bWJzMjUwKSB8fCBlbXB0eSgkdGh1bWJzNDgpKSkKKwkJeworCQkJJGpzb25bJ3RodW1ic19kZWZlcnJlZCddID0gdHJ1ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCSRqc29uWyd0aHVtYnNfZGVmZXJyZWQnXSA9IGZhbHNlOworCQl9CisKKwkJaWYgKCFlbXB0eSgkaWNvbjQ4KSkKKwkJeworCQkJJGljb240OF9lID0gRmlsZU1hbmFnZXJVdGlsaXR5OjpyYXd1cmxlbmNvZGVfcGF0aCgkaWNvbjQ4KTsKKwkJCSRqc29uWydpY29uNDgnXSA9ICRpY29uNDhfZTsKKwkJfQorCQlpZiAoIWVtcHR5KCRpY29uKSkKKwkJeworCQkJJGljb25fZSA9IEZpbGVNYW5hZ2VyVXRpbGl0eTo6cmF3dXJsZW5jb2RlX3BhdGgoJGljb24pOworCQkJJGpzb25bJ2ljb24nXSA9ICRpY29uX2U7CisJCX0KKworCQkkZmk0ZHVtcCA9IG51bGw7CisJCWlmICghZW1wdHkoJGZpKSkKKwkJeworCQkJdHJ5CisJCQl7CisJCQkJJGZpNGR1bXAgPSAkbWV0YS0+ZmV0Y2goJ2ZpbGVfaW5mb19kdW1wJyk7CisJCQkJaWYgKGVtcHR5KCRmaTRkdW1wKSkKKwkJCQl7CisJCQkJCSRmaTRkdW1wID0gYXJyYXlfbWVyZ2UoYXJyYXkoKSwgJGZpKTsgLy8gY2xvbmUgJGZpCisJCQkJCSR0aGlzLT5jbGVhbl9JRDNpbmZvX3Jlc3VsdHMoJGZpNGR1bXApOworCQkJCQkkbWV0YS0+c3RvcmUoJ2ZpbGVfaW5mb19kdW1wJywgJGZpNGR1bXApOworCQkJCX0KKworCQkJCSRkdW1wID0gRmlsZU1hbmFnZXJVdGlsaXR5Ojp0YWJsZV92YXJfZHVtcCgkZmk0ZHVtcCwgZmFsc2UpOworCisJCQkJJHBvc3RkaWFnX2R1bXBfSFRNTCAuPSAiXG4iIC4gJGR1bXAgLiAiXG4iOworCQkJCS8vQGZpbGVfcHV0X2NvbnRlbnRzKGRpcm5hbWUoX19GSUxFX18pIC4gJy9nZXRpZDMubG9nJywgcHJpbnRfcihhcnJheSgnaHRtbCcgPT4gJHByZXZpZXdfSFRNTCwgJ2pzb24nID0+ICRqc29uLCAndGh1bWIyNTBfZScgPT4gJHRodW1iMjUwX2UsICd0aHVtYjI1MCcgPT4gJHRodW1iMjUwLCAnZW1iZWQnID0+ICRlbWJlZCwgJ2ZpbGVpbmZvJyA9PiAkZmkpLCB0cnVlKSk7CisJCQl9CisJCQljYXRjaChFeGNlcHRpb24gJGUpCisJCQl7CisJCQkJJHBvc3RkaWFnX2Vycl9IVE1MIC49ICc8cCBjbGFzcz0iZXJyX2luZm8iPicgLiAkZS0+Z2V0TWVzc2FnZSgpIC4gJzwvcD4nOworCQkJfQorCQl9CisKKwkJaWYgKCRwcmV2aWV3X0hUTUwgPT09IG51bGwpCisJCXsKKwkJCSRwcmV2aWV3X0hUTUwgPSAnJHtub3ByZXZpZXd9JzsKKwkJfQorCisJCWlmICghZW1wdHkoJHByZXZpZXdfSFRNTCkpCisJCXsKKwkJCS8vJGNvbnRlbnQgLj0gJzxoMz4ke3ByZXZpZXd9PC9oMz4nOworCQkJJGNvbnRlbnQgLj0gJzxkaXYgY2xhc3M9ImZpbGVtYW5hZ2VyLXByZXZpZXctY29udGVudCI+JyAuICRwcmV2aWV3X0hUTUwgLiAnPC9kaXY+JzsKKwkJfQorCQlpZiAoIWVtcHR5KCRwb3N0ZGlhZ19lcnJfSFRNTCkpCisJCXsKKwkJCSRjb250ZW50IC49ICc8ZGl2IGNsYXNzPSJmaWxlbWFuYWdlci1lcnJvcnMiPicgLiAkcG9zdGRpYWdfZXJyX0hUTUwgLiAnPC9kaXY+JzsKKwkJfQorCQlpZiAoIWVtcHR5KCRwb3N0ZGlhZ19kdW1wX0hUTUwpICYmICRtZXRhSFRNTF9tb2RlKQorCQl7CisJCQkkY29udGVudCAuPSAnPGRpdiBjbGFzcz0iZmlsZW1hbmFnZXItZGlhZy1kdW1wIj4nIC4gJHBvc3RkaWFnX2R1bXBfSFRNTCAuICc8L2Rpdj4nOworCQl9CisKKwkJJGpzb25bJ2NvbnRlbnQnXSA9IHNlbGY6OmNvbXByZXNzSFRNTCgkY29udGVudCk7CisJCSRqc29uWydtZXRhZGF0YSddID0gKCRtZXRhSlNPTl9tb2RlID8gJGZpNGR1bXAgOiBudWxsKTsKKworCQlyZXR1cm4gYXJyYXlfbWVyZ2UoKGlzX2FycmF5KCRqc29uX2luKSA/ICRqc29uX2luIDogYXJyYXkoKSksICRqc29uKTsKKwl9CisKKwkvKioKKwkgKiBUcmF2ZXJzZSB0aGUgZ2V0SUQzIGluZm9bXSBhcnJheSB0cmVlIGFuZCBmZXRjaCB0aGUgaXRlbSBwb2ludGVkIGF0IGJ5IHRoZSB2YXJpYWJsZSBudW1iZXIgb2YgaW5kaWNlcyBzcGVjaWZpZWQKKwkgKiBhcyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgdG8gdGhpcyBmdW5jdGlvbi4KKwkgKgorCSAqIFJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZSB3aGVuIHRoZSBpbmRpY2F0ZWQgZWxlbWVudCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgaW5mb1tdIHNldDsgb3RoZXJ3aXNlIHJldHVybiB0aGUgbG9jYXRlZCBpdGVtLgorCSAqCisJICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gYWN0IGFzIGEgc2FmZSBnby1pbi1iZXR3ZWVuIGZvciB0aGUgZmlsZU1hbmFnZXIgdG8gY29sbGVjdCBhcmJpdHJhcnkgZ2V0SUQzIGRhdGEgYW5kCisJICogbm90IGdldCBhIFBIUCBlcnJvciB3aGVuIHNvbWUgaXRlbSBpbiB0aGVyZSBkb2VzIG5vdCBleGlzdC4KKwkgKi8KKwlwdWJsaWMgLyogc3RhdGljICovIGZ1bmN0aW9uIGdldElEM2luZm9JdGVtKCRnZXRpZDNfaW5mb19vYmosICRkZWZhdWx0X3ZhbHVlIC8qICwgLi4uICovICkKKwl7CisJCSRydiA9IGZhbHNlOworCQkkYXJnYyA9IGZ1bmNfbnVtX2FyZ3MoKTsKKworCQlmb3IgKCRpID0gMjsgJGkgPCAkYXJnYzsgJGkrKykKKwkJeworICAgICAgJGluZGV4ID0gZnVuY19nZXRfYXJnKCRpKTsKKwkJCWlmICghaXNfYXJyYXkoJGdldGlkM19pbmZvX29iaikpCisJCQl7CisgICAgICAgIC8vIHRoZSBnZXRJRDMgbGlicmFyeSBzZWVtcyB0byByZXR1cm4gYW4gYXJyYXkgZm9yIGlkMyB0YWdzLCB0aGUgZmFsbCBiYWNrIGRvZXMgbm90LCB3ZQorICAgICAgICAvLyB3aWxsIGp1c3Qgc2hvcnQgY2lyY3VpdCB0aGlzLCBpdCdsbCBiZSBmaW5lLgorICAgICAgICBpZigkaSA9PSAkYXJnYy0xICYmICRpbmRleCA9PT0gMCkgcmV0dXJuICRnZXRpZDNfaW5mb19vYmo7CisgICAgICAgIAorCQkJCXJldHVybiAkZGVmYXVsdF92YWx1ZTsKKwkJCX0KKworCQkJaWYgKGFycmF5X2tleV9leGlzdHMoJGluZGV4LCAkZ2V0aWQzX2luZm9fb2JqKSkKKwkJCXsKKwkJCQkkZ2V0aWQzX2luZm9fb2JqID0gJGdldGlkM19pbmZvX29ialskaW5kZXhdOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXJldHVybiAkZGVmYXVsdF92YWx1ZTsKKwkJCX0KKwkJfQorCQkvLyBXQVJOSU5HOiBjb252ZXJ0ICckJyB0byB0aGUgSFRNTCBlbnRpdHkgdG8gcHJldmVudCB0aGUgSlMvY2xpZW50IHNpZGUgZnJvbSAnc2VlaW5nJyB0aGUgJCBhbmQgc3RhcnQgJHt4eXp9IHRlbXBsYXRlIHZhcmlhYmxlIHJlcGxhY2VtZW50IGVycm9uZW91c2x5CisJCXJldHVybiBzdHJfcmVwbGFjZSgnJCcsICcmIzM2OycsICRnZXRpZDNfaW5mb19vYmopOworCX0KKworICAvKiogUmV0dXJuIGFuIGFycmF5IG9mIGluZm9ybWF0aW9uIGFib3V0IGEgZmlsZS4KKyAgICoKKyAgICogICAgSUZGIHRoZSBnZXRJRDMgbGlicmFyeSAoR1BMKSBpcyBhdmFpbGFibGUsIGl0IHdpbGwgYmUgdXNlZC4KKyAgICogICAgRUxTRSBJRiBGaWxlSW5mbyBleHRlbnRpb24gaXMgYXZhaWxhYmxlLCB3ZSB3aWxsIHRyeSB0aGF0IGZvciBnZXR0aW5nIG1pbWV0eXBlCisgICAqICAgIEVMU0UgZG8gaXQgbWFudWFsbHkKKyAgICoKKyAgICogID09IEFsbCBGaWxlcyA9PQorICAgKiAgbWltZV90eXBlCisgICAqCisgICAqICA9PSBJbWFnZXMgPT0gICAKKyAgICogIHZpZGVvOltyZXNvbHV0aW9uX3gsIHJlc29sdXRpb25feV0gCisgICAqICBqcGc6ZXhpZjpJRkQwOltTb2Z0d2FyZSwgRGF0ZVRpbWVdCisgICAqCisgICAqICA9PSBaaXAgRmlsZXMgPT0KKyAgICogIHppcDpmaWxlcyAoYW4gYXJyYXkgKG5hbWUgPT4gc2l6ZXxmaWxlcykpCisgICAqCisgICAqICA9PSBGbGFzaCBGaWxlcyA9PQorICAgKiAgc3dmOmhlYWRlcjpbZnJhbWVfd2lkdGgsIGZyYW1lX2hlaWdodCwgZnJhbWVfY291bnQsIGxlbmd0aF0KKyAgICoKKyAgICogID09IEF1ZGlvIEZpbGVzID09CisgICAqICB0YWdzOmlkM3YxOlt0aXRsZSxhcnRpc3QsYWxidW1dICAgIAorICAgKiAgcGxheXRpbWVfc3RyaW5nCisgICAqICBiaXRyYXRlCisgICAqCisgICAqICA9PSBWaWRlbyBGaWxlcyA9PQorICAgKiAgYXVkaW86W2RhdGFmb3JtYXQsc2FtcGxlX3JhdGUsYml0cmF0ZSxiaXRyYXRlX21vZGUsY2hhbm5lbHMsY29kZWMsc3RyZWFtc10KKyAgICogIHZpZGVvOltkYXRhZm9ybWF0LGJpdHJhdGUsYml0cmF0ZV9tb2RlLGZyYW1lX3JhdGUscmVzb2x1dGlvbl94LHJlc29sdXRpb25feSxwaXhlbF9hc3BlY3RfcmF0aW8sY29kZWNdCisgICAqICBiaXRyYXRlCisgICAqICBwbGF5dGltZV9zdHJpbmcKKyAgICovCisgICAKKyAgcHVibGljIGZ1bmN0aW9uIGFuYWx5emVfZmlsZSgkZmlsZSwgJGxlZ2FsX3VybCkKKyAgeworICAgIGlmKCR0aGlzLT5vcHRpb25zWyd1c2VHZXRJRDNJZkF2YWlsYWJsZSddICYmIChjbGFzc19leGlzdHMoJ2dldElEMycpIHx8IGZpbGVfZXhpc3RzKHN0cnRyKGRpcm5hbWUoX19GSUxFX18pLCAnXFwnLCAnLycpIC4gJy9Bc3NldHMvZ2V0aWQzL2dldGlkMy5waHAnKSkpCisgICAgeworICAgICAgLy8gTm90ZSBkZWxheWluZyByZXF1aXJpbmcgZ2V0aUQzIHVudGlsIG5vdywgYmVjYXVzZSBpdCBpcyBiaWcgYW5kIHdlIGRvbid0IG5lZWQgaXQgaWYgdGhlIGRhdGEgaXMgY2FjaGVkIGFscmVhZHkuCisgICAgICBpZighY2xhc3NfZXhpc3RzKCdHZXRJZDMnKSkKKyAgICAgIHsKKyAgICAgICAgcmVxdWlyZShzdHJ0cihkaXJuYW1lKF9fRklMRV9fKSwgJ1xcJywgJy8nKSAuICcvQXNzZXRzL2dldGlkMy9nZXRpZDMucGhwJyk7CisgICAgICB9CisKKyAgICAgICRpZDMgPSBuZXcgZ2V0SUQzKCk7CisgICAgICAkaWQzLT5zZXRPcHRpb24oYXJyYXkoJ2VuY29kaW5nJyA9PiAnVVRGLTgnKSk7CisgICAgICAkaWQzLT5hbmFseXplKCRmaWxlKTsgICAgICAKKyAgICAgICRydiA9ICRpZDMtPmluZm87CisgICAgICBpZiAoZW1wdHkoJHJ2WydtaW1lX3R5cGUnXSkpCisgICAgICB7CisgICAgICAgIC8vIGd1YXJhbnRlZSB0byBwcm9kdWNlIGEgbWltZSB0eXBlLCBhdCBsZWFzdCEKKyAgICAgICAgJHJ2WydtaW1lX3R5cGUnXSA9ICR0aGlzLT5nZXRNaW1lRnJvbUV4dCgkbGVnYWxfdXJsKTsgICAgIC8vIGd1ZXN0aW1hdGUgbWltZXR5cGUgd2hlbiBjb250ZW50IHNuaWZmaW5nIGRpZG4ndCB3b3JrCisgICAgICB9CisgICAgICAKKyAgICAgIHJldHVybiAkcnY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAkcnYgPSBhcnJheSgpOworICAgICAgCisgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJ2ZpbmZvX29wZW4nKSAmJiBkZWZpbmVkKCdGSUxFSU5GT19NSU1FX1RZUEUnKSkKKyAgICAgIHsKKyAgICAgICAgaWYoIWlzc2V0KCR0aGlzLT5fZmluZm8pKSAkdGhpcy0+X2ZpbmZvID0gZmluZm9fb3BlbihGSUxFSU5GT19NSU1FX1RZUEUpOworICAgICAgICAkcnZbJ21pbWVfdHlwZSddID0gZmluZm9fZmlsZSgkdGhpcy0+X2ZpbmZvLCAkZmlsZSk7ICAgICAgICAKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYoIUAkcnZbJ21pbWVfdHlwZSddKQorICAgICAgeworICAgICAgICAkcnZbJ21pbWVfdHlwZSddID0gJHRoaXMtPmdldE1pbWVGcm9tRXh0KCRsZWdhbF91cmwpOyAgICAgLy8gZ3Vlc3RpbWF0ZSBtaW1ldHlwZSB3aGVuIGNvbnRlbnQgc25pZmZpbmcgZGlkbid0IHdvcmsKKyAgICAgIH0KKyAgICAgICAgICAgICAgICAgIAorICAgICAgc3dpdGNoKHByZWdfcmVwbGFjZSgnL1wvLiokLycsICcnLCAkcnZbJ21pbWVfdHlwZSddKSkKKyAgICAgIHsKKyAgICAgICAgY2FzZSAnaW1hZ2UnOgorICAgICAgICB7CisgICAgICAgICAgJHNpemUgPSBnZXRpbWFnZXNpemUoJGZpbGUpOworICAgICAgICAgIGlmKCRzaXplICE9PSBGQUxTRSkKKyAgICAgICAgICB7CisgICAgICAgICAgICAkcnZbJ3ZpZGVvJ11bJ3Jlc29sdXRpb25feCddID0gJHNpemVbMF07CisgICAgICAgICAgICAkcnZbJ3ZpZGVvJ11bJ3Jlc29sdXRpb25feSddID0gJHNpemVbMV07ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgfQorICAgICAgICAgIAorICAgICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnZXhpZl9pbWFnZXR5cGUnKSAmJiBleGlmX2ltYWdldHlwZSgkZmlsZSkgIT09IEZBTFNFKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICRydlsnZXhpZiddID0gQGV4aWZfcmVhZF9kYXRhKCRmaWxlLCAwLCB0cnVlKTsgICAgCisgICAgICAgICAgICAkcnZbJ2pwZyddWydleGlmJ10gPSAkcnZbJ2V4aWYnXTsgLy8gTm90IHN0cmljdGx5IHRydWUhCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSAnYXVkaW8nOgorICAgICAgICB7CisgICAgICAgICAgc3dpdGNoKCRydlsnbWltZV90eXBlJ10pCisgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSAnYXVkaW8vbXBlZyc6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHJlcXVpcmVfb25jZShzdHJ0cihkaXJuYW1lKF9fRklMRV9fKSwgJ1xcJywgJy8nKSAuICcvSUQzLmNsYXNzLnBocCcpOworICAgICAgICAgICAgICAkSUQzID0gbmV3IGlkM1BhcnNlcigpOworICAgICAgICAgICAgICAkdGFncyA9ICRJRDMtPnJlYWQoJGZpbGUpOworICAgICAgICAgICAgICBzd2l0Y2goJHRhZ3NbJ2lkMyddKQorICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgMTogJHJ2Wyd0YWdzJ11bJ2lkM3YxJ10gPSAkdGFnczsgCisgICAgICAgICAgICAgICAgZGVmYXVsdDogJHJ2Wyd0YWdzJ11bJ2lkM3YyJ10gPSAkdGFnczsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIAorICAgICAgcmV0dXJuICRydjsKKyAgICB9CisgIH0KKworCisKKwkvKioKKwkgKiBFeHRyYWN0IGFuIGVtYmVkZGVkIGltYWdlIGZyb20gdGhlIGdldElEMyBpbmZvIGRhdGEuCisJICoKKwkgKiBSZXR1cm4gRkFMU0Ugd2hlbiBubyBlbWJlZGRlZCBpbWFnZSB3YXMgZm91bmQsIG90aGVyd2lzZSByZXR1cm4gYW4gYXJyYXkgb2YgdGhlIG1ldGFkYXRhIGFuZCB0aGUgYmluYXJ5IGltYWdlIGRhdGEgaXRzZWxmLgorCSAqLworCXByb3RlY3RlZCBmdW5jdGlvbiBleHRyYWN0X0lEM2luZm9fZW1iZWRkZWRfaW1hZ2UoJiRhcnIpCisJeworCQlpZiAoaXNfYXJyYXkoJGFycikpCisJCXsKKwkJCWZvcmVhY2ggKCRhcnIgYXMgJGtleSA9PiAmJHZhbHVlKQorCQkJeworCQkJCWlmICgka2V5ID09PSAnZGF0YScgJiYgaXNzZXQoJGFyclsnaW1hZ2VfbWltZSddKSkKKwkJCQl7CisJCQkJCS8vIGZpcnN0IG1ha2Ugc3VyZSB0aGlzIGlzIGEgdmFsaWQgaW1hZ2UKKwkJCQkJJGltYWdlaW5mbyA9IGFycmF5KCk7CisJCQkJCSRpbWFnZWNodW5rY2hlY2sgPSBnZXRpZDNfbGliOjpHZXREYXRhSW1hZ2VTaXplKCR2YWx1ZSwgJGltYWdlaW5mbyk7CisJCQkJCWlmIChpc19hcnJheSgkaW1hZ2VjaHVua2NoZWNrKSAmJiBpc3NldCgkaW1hZ2VjaHVua2NoZWNrWzJdKSAmJiBpbl9hcnJheSgkaW1hZ2VjaHVua2NoZWNrWzJdLCBhcnJheShJTUFHRVRZUEVfR0lGLCBJTUFHRVRZUEVfSlBFRywgSU1BR0VUWVBFX1BORykpKQorCQkJCQl7CisJCQkJCQlyZXR1cm4gbmV3IEVtYmVkZGVkSW1hZ2VDb250YWluZXIoJGltYWdlY2h1bmtjaGVjaywgJHZhbHVlKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChpc19hcnJheSgkdmFsdWUpKQorCQkJCXsKKwkJCQkJJHJ2ID0gJHRoaXMtPmV4dHJhY3RfSUQzaW5mb19lbWJlZGRlZF9pbWFnZSgkdmFsdWUpOworCQkJCQlpZiAoJHJ2ICE9PSBmYWxzZSkKKwkJCQkJCXJldHVybiAkcnY7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlwcm90ZWN0ZWQgZnVuY3Rpb24gZm9sZF9xdWlja3RpbWVfc3ViYXRvbXMoJiRhcnIsICYkaW5qZWN0LCAka2V5X3ByZWZpeCkKKwl7CisJCSRzYXRtcyA9IGZhbHNlOworCQlpZiAoIWVtcHR5KCRhcnJbJ3N1YmF0b21zJ10pICYmIGlzX2FycmF5KCRhcnJbJ3N1YmF0b21zJ10pICYmICFlbXB0eSgkYXJyWydoaWVyYXJjaHknXSkgJiYgIWVtcHR5KCRhcnJbJ25hbWUnXSkgJiYgJGFyclsnaGllcmFyY2h5J10gPT0gJGFyclsnbmFtZSddKQorCQl7CisJCQkvLyBmb2xkIHRoZXNlIHVwIGFsbCB0aGUgd2F5IHRvIHRoZSByb290OgorCQkJJGtleV9wcmVmaXggLj0gJy4nIC4gJGFyclsnaGllcmFyY2h5J107CisKKwkJCSRzYXRtcyA9ICRhcnJbJ3N1YmF0b21zJ107CisJCQl1bnNldCgkYXJyWydzdWJhdG9tcyddKTsKKwkJCSRpbmplY3RbJGtleV9wcmVmaXhdID0gJHNhdG1zOworCQl9CisKKwkJZm9yZWFjaCAoJGFyciBhcyAka2V5ID0+ICYkdmFsdWUpCisJCXsKKwkJCWlmIChpc19hcnJheSgkdmFsdWUpKQorCQkJeworCQkJCSR0aGlzLT5mb2xkX3F1aWNrdGltZV9zdWJhdG9tcygkdmFsdWUsICRpbmplY3QsICRrZXlfcHJlZml4KTsKKwkJCX0KKwkJfQorCisJCWlmICgkc2F0bXMgIT09IGZhbHNlKQorCQl7CisJCQkkdGhpcy0+Zm9sZF9xdWlja3RpbWVfc3ViYXRvbXMoJGluamVjdFska2V5X3ByZWZpeF0sICRpbmplY3QsICRrZXlfcHJlZml4KTsKKwkJfQorCX0KKworCS8vIGFzc3VtZXMgYW4gaW5wdXQgYXJyYXkgd2l0aCB0aGUga2V5cyBpbiBDYW1lbENhc2Ugc2VtaS1IdW5nYXJpYW4gTm90YXRpb24uIENvbnZlcnQgdGhvc2Uga2V5cyB0byBzb21ldGhpbmcgaHVtYW5seSBncm9ra2FibGUgYWZ0ZXIgaXQgaXMgcHJvY2Vzc2VkIGJ5IHRhYmxlX3Zhcl9kdW1wKCkuCisJcHJvdGVjdGVkIGZ1bmN0aW9uIGNsZWFuX0FWSV9IdW5nYXJpYW4oJiRhcnIpCisJeworCQkkZHN0ID0gYXJyYXkoKTsKKwkJZm9yZWFjaCgkYXJyIGFzICRrZXkgPT4gJiR2YWx1ZSkKKwkJeworCQkJJG5rID0gZXhwbG9kZSgnXycsIHByZWdfcmVwbGFjZSgnLyhbQS1aXSkvJywgJ19cXDEnLCAka2V5KSk7CisJCQlzd2l0Y2ggKCRua1swXSkKKwkJCXsKKwkJCWNhc2UgJ2R3JzoKKwkJCWNhc2UgJ24nOgorCQkJY2FzZSAndyc6CisJCQljYXNlICdiaSc6CisJCQkJdW5zZXQoJG5rWzBdKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCSRkc3Rbc3RydG9sb3dlcihpbXBsb2RlKCdfJywgJG5rKSldID0gJHZhbHVlOworCQl9CisJCSRhcnIgPSAkZHN0OworCX0KKworCS8vIGFub3RoZXIgcm91bmQgb2Ygc2Nhbm5pbmcgdG8gcmV3cml0ZSB0aGUga2V5cyB0byBodW1hbiBsZWdpYmlsaXR5OiBhcyB0aGlzIGNoYW5nZXMgdGhlIGtleXMsIHdlJ2xsIG5lZWQgdG8gcmV3cml0ZSBhbGwgZW50cmllcyB0byBrZWVwIG9yZGVyIGludGFjdAorCXByb3RlY3RlZCBmdW5jdGlvbiBjbGVhbl9JRDNpbmZvX2tleXMoJiRhcnIpCisJeworCQkkZHN0ID0gYXJyYXkoKTsKKwkJZm9yZWFjaCgkYXJyIGFzICRrZXkgPT4gJiR2YWx1ZSkKKwkJeworCQkJJGtleSA9IHN0cnRyKCRrZXksICJfXHgwMCIsICcgICcpOworCisJCQkvLyBjdXN0b20gdHJhbnNmb3JtYXRpb25zOiAoaG9wZWZ1bGx5IHN3aXRjaC9jYXNlL2Nhc2UvLi4uIGlzIGZhc3RlciB0aGFuIHN0cl9yZXBsYWNlL3N0cnRyIGhlcmUpCisJCQlzd2l0Y2ggKChzdHJpbmcpJGtleSkKKwkJCXsKKwkJCWRlZmF1bHQ6CisJCQkJLy8ka2V5ID0gJHRoaXMtPm1rU2FmZVVURjgoJGtleSk7CisJCQkJaWYgKHByZWdfbWF0Y2goJy9bXiAtfl0vJywgJGtleSkpCisJCQkJeworCQkJCQkvLyBub24tQVNDSUkgdmFsdWVzIGluIHRoZSBrZXk6IGhleGR1bXAgdGhvc2UgY2hhcmFjdGVycyEKKwkJCQkJJGtsZW4gPSBzdHJsZW4oJGtleSk7CisJCQkJCSRuayA9ICcnOworCQkJCQlmb3IgKCRpID0gMDsgJGkgPCAka2xlbjsgKyskaSkKKwkJCQkJeworCQkJCQkJJGMgPSBvcmQoJGtleVskaV0pOworCisJCQkJCQlpZiAoJGMgPj0gMzIgJiYgJGMgPD0gMTI3KQorCQkJCQkJeworCQkJCQkJCSRuayAuPSBjaHIoJGMpOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCSRuayAuPSBzcHJpbnRmKCckJTAyeCcsICRjKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQkka2V5ID0gJG5rOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSAnYXZkYXRhZW5kJzoKKwkJCQkka2V5ID0gJ0FWIGRhdGEgZW5kJzsKKwkJCQlicmVhazsKKworCQkJY2FzZSAnYXZkYXRhb2Zmc2V0JzoKKwkJCQkka2V5ID0gJ0FWIGRhdGEgb2Zmc2V0JzsKKwkJCQlicmVhazsKKworCQkJY2FzZSAnY2hhbm5lbG1vZGUnOgorCQkJCSRrZXkgPSAnY2hhbm5lbCBtb2RlJzsKKwkJCQlicmVhazsKKworCQkJY2FzZSAnZGF0YWZvcm1hdCc6CisJCQkJJGtleSA9ICdkYXRhIGZvcm1hdCc7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgJ2ZpbGVmb3JtYXQnOgorCQkJCSRrZXkgPSAnZmlsZSBmb3JtYXQnOworCQkJCWJyZWFrOworCisJCQljYXNlICdtb2RlZXh0ZW5zaW9uJzoKKwkJCQkka2V5ID0gJ21vZGUgZXh0ZW5zaW9uJzsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJJGRzdFska2V5XSA9ICR2YWx1ZTsKKwkJCWlmIChpc19hcnJheSgkdmFsdWUpKQorCQkJeworCQkJCSR0aGlzLT5jbGVhbl9JRDNpbmZvX2tleXMoJGRzdFska2V5XSk7CisJCQl9CisJCX0KKwkJJGFyciA9ICRkc3Q7CisJfQorCisJcHJvdGVjdGVkIGZ1bmN0aW9uIGNsZWFuX0lEM2luZm9fcmVzdWx0c19yKCYkYXJyLCAkZmxhZ3MpCisJeworCQlpZiAoaXNfYXJyYXkoJGFycikpCisJCXsKKwkJCS8vIGhldXJpc3RpYyAjMTogZm9sZCBhbGwgdGhlIHF1aWNrYXRvbXMgc3ViYXRvbXMgdXNpbmcgdGhlaXIgaGllcmFyY2h5IGFuZCBuYW1lIGZpZWxkczsgdGhpcyBpcyBhIHRyZWUgcmV3cml0ZQorCQkJaWYgKGFycmF5X2tleV9leGlzdHMoJ3F1aWNrdGltZScsICRhcnIpICYmIGlzX2FycmF5KCRhcnJbJ3F1aWNrdGltZSddKSkKKwkJCXsKKwkJCQkkaW5qZWN0ID0gYXJyYXkoKTsKKwkJCQkkdGhpcy0+Zm9sZF9xdWlja3RpbWVfc3ViYXRvbXMoJGFyclsncXVpY2t0aW1lJ10sICRpbmplY3QsICdxdWlja3RpbWUnKTsKKworCQkJCS8vIGNhbid0IHVzZSBhcnJheV9zcGxpY2Ugb24gYXNzb2NpYXRpdmUgYXJyYXlzLCBzbyB3ZSByZXdyaXRlICRhcnIgbm93OgorCQkJCSRuZXdhcnIgPSBhcnJheSgpOworCQkJCWZvcmVhY2ggKCRhcnIgYXMgJGtleSA9PiAmJHZhbHVlKQorCQkJCXsKKwkJCQkJJG5ld2Fyclska2V5XSA9ICR2YWx1ZTsKKwkJCQkJaWYgKCRrZXkgPT09ICdxdWlja3RpbWUnKQorCQkJCQl7CisJCQkJCQlmb3JlYWNoICgkaW5qZWN0IGFzICRpayA9PiAmJGl2KQorCQkJCQkJeworCQkJCQkJCSRuZXdhcnJbJGlrXSA9ICRpdjsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQkkYXJyID0gJG5ld2FycjsKKwkJCQl1bnNldCgkaW5qZWN0KTsKKwkJCQl1bnNldCgkbmV3YXJyKTsKKwkJCX0KKworCQkJJGFjdGl2aXR5ID0gdHJ1ZTsKKwkJCXdoaWxlICgkYWN0aXZpdHkpCisJCQl7CisJCQkJJGFjdGl2aXR5ID0gZmFsc2U7IC8vIGFzc3VtZSB0aGVyZSdzIG5vdGhpbmcgdG8gZG8gYW55bW9yZS4gUHJvdmUgdXMgd3Jvbmcgbm93Li4uCisKKwkJCQkvLyBoZXVyaXN0aWMgIzI6IHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgYXJyYXkgd2hpY2ggYXJlIHRoZW1zZWx2ZXMgYXJyYXlzIGlzIDgwJSwgY29udHJhY3QgdGhlIHNldAorCQkJCSR0b2RvID0gYXJyYXkoKTsKKwkJCQlmb3JlYWNoICgkYXJyIGFzICRrZXkgPT4gJiR2YWx1ZSkKKwkJCQl7CisJCQkJCWlmIChpc19hcnJheSgkdmFsdWUpKQorCQkJCQl7CisJCQkJCQkkYWNudCA9IDA7CisJCQkJCQlmb3JlYWNoICgkdmFsdWUgYXMgJHNrID0+ICYkc3YpCisJCQkJCQl7CisJCQkJCQkJaWYgKGlzX2FycmF5KCRzdikpCisJCQkJCQkJeworCQkJCQkJCQkkYWNudCsrOworCQkJCQkJCX0KKwkJCQkJCX0KKworCQkJCQkJLy8gdGhlIGZsb29yKCkgaGVyZSBoZWxwcyB0byBmb2xkIHNpbmdsZS1lbGVtZW50IGFycmF5cyBhbG9uZ3NpZGUhIDotKQorCQkJCQkJaWYgKGZsb29yKDAuNSAqIGNvdW50KCR2YWx1ZSkpIDw9ICRhY250KQorCQkJCQkJeworCQkJCQkJCSR0b2RvW10gPSAka2V5OworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWlmIChjb3VudCgkdG9kbykgPiAwKQorCQkJCXsKKwkJCQkJJGluamVjdCA9IGFycmF5KCk7CisJCQkJCWZvcmVhY2ggKCRhcnIgYXMgJGtleSA9PiAmJHZhbHVlKQorCQkJCQl7CisJCQkJCQlpZiAoaXNfYXJyYXkoJHZhbHVlKSAmJiBpbl9hcnJheSgka2V5LCAkdG9kbykpCisJCQkJCQl7CisJCQkJCQkJdW5zZXQoJHRvZG9bJGtleV0pOworCisJCQkJCQkJZm9yZWFjaCAoJHZhbHVlIGFzICRzayA9PiAmJHN2KQorCQkJCQkJCXsKKwkJCQkJCQkJJG5rID0gJGtleSAuICcuJyAuICRzazsKKworCQkJCQkJCQkvLyBwdWxsIHVwIHNpbmdsZSBlbnRyeSBzdWJzdWJhcnJheXMgYXQgdGhlIHNhbWUgdGltZSEKKwkJCQkJCQkJaWYgKGlzX2FycmF5KCRzdikgJiYgY291bnQoJHN2KSA9PSAxKQorCQkJCQkJCQl7CisJCQkJCQkJCQlmb3JlYWNoICgkc3YgYXMgJHNrMiA9PiAmJHN2MikKKwkJCQkJCQkJCXsKKwkJCQkJCQkJCQkkbmsgLj0gJy4nIC4gJHNrMjsKKwkJCQkJCQkJCQkkaW5qZWN0WyRua10gPSAkc3YyOworCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJCWVsc2UKKwkJCQkJCQkJeworCQkJCQkJCQkJJGluamVjdFskbmtdID0gJHN2OworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCSRpbmplY3RbJGtleV0gPSAkdmFsdWU7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJJGFyciA9ICRpbmplY3Q7CisJCQkJCSRhY3Rpdml0eSA9IHRydWU7CisJCQkJfQorCQkJfQorCisJCQlmb3JlYWNoICgkYXJyIGFzICRrZXkgPT4gJiR2YWx1ZSkKKwkJCXsKKwkJCQlpZiAoJGtleSA9PT0gJ2RhdGEnICYmIGlzc2V0KCRhcnJbJ2ltYWdlX21pbWUnXSkpCisJCQkJeworCQkJCQkvLyB3aGVuIHRoaXMgaXMgYSB2YWxpZCBpbWFnZSwgaXQncyBhbHJlYWR5IGF2YWlsYWJsZSBhcyBhIHRodW1ibmFpbCwgbW9zdCBwcm9iYWJseQorCQkJCQkkaW1hZ2VpbmZvID0gYXJyYXkoKTsKKwkJCQkJJGltYWdlY2h1bmtjaGVjayA9IGdldGlkM19saWI6OkdldERhdGFJbWFnZVNpemUoJHZhbHVlLCAkaW1hZ2VpbmZvKTsKKwkJCQkJaWYgKGlzX2FycmF5KCRpbWFnZWNodW5rY2hlY2spICYmIGlzc2V0KCRpbWFnZWNodW5rY2hlY2tbMl0pICYmIGluX2FycmF5KCRpbWFnZWNodW5rY2hlY2tbMl0sIGFycmF5KElNQUdFVFlQRV9HSUYsIElNQUdFVFlQRV9KUEVHLCBJTUFHRVRZUEVfUE5HKSkpCisJCQkJCXsKKwkJCQkJCWlmICgkZmxhZ3MgJiBNVEZNX0NMRUFOX0lEM19TVFJJUF9FTUJFRERFRF9JTUFHRVMpCisJCQkJCQl7CisJCQkJCQkJJHZhbHVlID0gbmV3IEJpbmFyeURhdGFDb250YWluZXIoJyhlbWJlZGRlZCBpbWFnZSAnIC4gaW1hZ2VfdHlwZV90b19leHRlbnNpb24oJGltYWdlY2h1bmtjaGVja1syXSkgLiAnIGRhdGEuLi4pJyk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJJHZhbHVlID0gbmV3IEVtYmVkZGVkSW1hZ2VDb250YWluZXIoJGltYWdlY2h1bmtjaGVjaywgJHZhbHVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCWlmICgkZmxhZ3MgJiBNVEZNX0NMRUFOX0lEM19TVFJJUF9FTUJFRERFRF9JTUFHRVMpCisJCQkJCQl7CisJCQkJCQkJJHZhbHVlID0gbmV3IEJpbmFyeURhdGFDb250YWluZXIoJyh1bmlkZW50aWZpZWQgaW1hZ2UgZGF0YSAuLi4gJyAuIChpc19zdHJpbmcoJHZhbHVlKSA/ICdsZW5ndGggPSAnIC4gc3RybGVuKCR2YWx1ZSkgOiAnJykgLiAnIC0tICcgLiBwcmludF9yKCRpbWFnZWNodW5rY2hlY2spIC4gJyknKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQkkdGhpcy0+Y2xlYW5fSUQzaW5mb19yZXN1bHRzX3IoJHZhbHVlLCAkZmxhZ3MpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKGlzc2V0KCRhcnJbJGtleSAuICdfZ3VpZCddKSkKKwkJCQl7CisJCQkJCS8vIGNvbnZlcnQgZ3VpZCByYXcgYmluYXJ5IGRhdGEgdG8gaGV4OgorCQkJCQkkdGVtcCA9IHVucGFjaygnSConLCAkdmFsdWUpOworCQkJCQkkdmFsdWUgPSBuZXcgQmluYXJ5RGF0YUNvbnRhaW5lcigkdGVtcFsxXSk7CisJCQkJfQorCQkJCWVsc2UgaWYgKCAgJGtleSA9PT0gJ25vbl9pbnRyYV9xdWFudCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1QRUcgcXVhbnRpemF0aW9uIG1hdHJpeAorCQkJCQkJfHwgJGtleSA9PT0gJ2Vycm9yX2NvcnJlY3RfdHlwZScKKwkJCQkJCSkKKwkJCQl7CisJCQkJCS8vIGNvbnZlcnQgcmF3IGJpbmFyeSBkYXRhIHRvIGhleCBpbiAzMiBiaXQgY2h1bmtzOgorCQkJCQkkdGVtcCA9IHVucGFjaygnSConLCAkdmFsdWUpOworCQkJCQkkdGVtcCA9IHN0cl9zcGxpdCgkdGVtcFsxXSwgOCk7CisJCQkJCSR2YWx1ZSA9IG5ldyBCaW5hcnlEYXRhQ29udGFpbmVyKGltcGxvZGUoJyAnLCAkdGVtcCkpOworCQkJCX0KKwkJCQllbHNlIGlmICgka2V5ID09PSAnZGF0YScgJiYgaXNfc3RyaW5nKCR2YWx1ZSkgJiYgaXNzZXQoJGFyclsnZnJhbWVfbmFtZSddKSAmJiBpc3NldCgkYXJyWydlbmNvZGluZyddKSAmJiBpc3NldCgkYXJyWydkYXRhbGVuZ3RoJ10pKSAvLyBNUDMgdGFnIGNodW5rCisJCQkJeworCQkJCQkkc3RyID0gJHRoaXMtPm1rU2FmZVVURjgodHJpbShzdHJ0cihnZXRpZDNfbGliOjppY29udl9mYWxsYmFjaygkYXJyWydlbmNvZGluZyddLCAnVVRGLTgnLCAkdmFsdWUpLCAiXHgwMCIsICcgJykpKTsKKwkJCQkJJHRlbXAgPSB1bnBhY2soJ0gqJywgJHZhbHVlKTsKKwkJCQkJJHRlbXAgPSBzdHJfc3BsaXQoJHRlbXBbMV0sIDgpOworCQkJCQkkdmFsdWUgPSBuZXcgQmluYXJ5RGF0YUNvbnRhaW5lcihpbXBsb2RlKCcgJywgJHRlbXApIC4gKCFlbXB0eSgkc3RyKSA/ICcgKCcgLiAkc3RyIC4gJyknIDogJycpKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoICAoJGtleSA9PT0gJ2RhdGEnICYmIGlzX3N0cmluZygkdmFsdWUpICYmIGlzc2V0KCRhcnJbJ29mZnNldCddKSAmJiBpc3NldCgkYXJyWydzaXplJ10pKSAgICAgICAgICAgLy8gQVZJIG9mZnNldC9zaXplL2RhdGEgaXRlbXM6IGRhdGEgPSBiaW5hcnkKKwkJCQkJCXx8ICgka2V5ID09PSAndHlwZV9zcGVjaWZpY19kYXRhJyAmJiBpc19zdHJpbmcoJHZhbHVlKSAvKiAmJiBpc3NldCgkYXJyWyd0eXBlX3NwZWNpZmljX2xlbiddKSAqLyApICAvLyBtdW5jaCBXTVYvUk0gJ3R5cGUgc3BlY2lmaWMgZGF0YSc6IGJpbmFyeSAgICgndHlwZSBzcGVjaWZpYyBsZW4nIHdpbGwgb2NjdXIgYWxvbmdzaWRlLCBidXQgbm90IGluIFdNVikKKwkJCQkJCSkKKwkJCQl7CisJCQkJCS8vIGEgYml0IGxpa2UgVU5JWCBzdHJpbmdzIHRvb2w6IHN0cmlwIG91dCBhbnl0aGluZyB3aGljaCBpc24ndCBhdCBsZWFzdCBwb3NzaWJseSBsZWdpYmxlCisJCQkJCSRzdHIgPSAnICcgLiBwcmVnX3JlcGxhY2UoJy9bXiAhIy1+XS8nLCAnICcsIHN0cnRyKCR2YWx1ZSwgIlx4MDAiLCAnICcpKSAuICcgJzsgICAgIC8vIGNvbnZlcnQgbm9uLUFTQ0lJIGFuZCBkb3VibGUgcXVvdGUgIiB0byBzcGFjZQorCQkJCQlkbworCQkJCQl7CisJCQkJCQkkcmVwbF9jb3VudCA9IDA7CisJCQkJCQkkc3RyID0gcHJlZ19yZXBsYWNlKGFycmF5KCcvIFteIF0gLycsCisJCQkJCQkJCQkJCQkgICcvIFteQS1aYS16MC05XFwoLl0vJywKKwkJCQkJCQkJCQkJCSAgJy8gW0EtWmEtejAtOV1bXkEtWmEtejAtOVxcKC4gXSAvJworCQkJCQkJCQkJCQkJICksICcgJywgJHN0ciwgLTEsICRyZXBsX2NvdW50KTsKKwkJCQkJfSB3aGlsZSAoJHJlcGxfY291bnQgPiAwKTsKKwkJCQkJJHN0ciA9IHRyaW0oJHN0cik7CisKKwkJCQkJaWYgKHN0cmxlbigkdmFsdWUpIDw9IDI1NikKKwkJCQkJeworCQkJCQkJJHRlbXAgPSB1bnBhY2soJ0gqJywgJHZhbHVlKTsKKwkJCQkJCSR0ZW1wID0gc3RyX3NwbGl0KCR0ZW1wWzFdLCA4KTsKKwkJCQkJCSR0ZW1wID0gaW1wbG9kZSgnICcsICR0ZW1wKTsKKwkJCQkJCSR2YWx1ZSA9IG5ldyBCaW5hcnlEYXRhQ29udGFpbmVyKCR0ZW1wIC4gKCFlbXB0eSgkc3RyKSA+IDAgPyAnICgnIC4gJHN0ciAuICcpJyA6ICcnKSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkkdmFsdWUgPSBuZXcgQmluYXJ5RGF0YUNvbnRhaW5lcignYmluYXJ5IGRhdGEuLi4gKGxlbmd0aCA9ICcgLiBzdHJsZW4oJHZhbHVlKSAuICcgYnl0ZXMpJyk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAoaXNfc2NhbGFyKCR2YWx1ZSkgJiYgcHJlZ19tYXRjaCgnL14oZHdbQS1aXXxuW0EtWl18d1tBLVpdfGJpW0EtWl0pW2EtekEtWl0rJC8nLCAka2V5KSkKKwkJCQl7CisJCQkJCS8vIEFWSSBzZWN0aW9ucyB3aGljaCB1c2UgSHVuZ2FyaWFuIG5vdGF0aW9uLCBhdCBsZWFzdCBwYXJ0aWFsbHkKKwkJCQkJJHRoaXMtPmNsZWFuX0FWSV9IdW5nYXJpYW4oJGFycik7CisJCQkJCS8vIGFuZCByZXNjYW4gdGhlIHRyYW5zZm9ybWVkIGtleSBzZXQuLi4KKwkJCQkJJHRoaXMtPmNsZWFuX0lEM2luZm9fcmVzdWx0cygkYXJyKTsKKwkJCQkJYnJlYWs7IC8vIGV4aXQgdGhpcyBsb29wCisJCQkJfQorCQkJCWVsc2UgaWYgKGlzX2FycmF5KCR2YWx1ZSkpCisJCQkJeworCQkJCQkvLyBoZXVyaXN0aWMgIzM6IHdoZW4gdGhlIHZhbHVlIGlzIGFuIGFycmF5IG9mIGludGVnZXJzLCBpbXBsb2RlIHRoZW0gdG8gYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCAoc3RyaW5nKSBpbnN0ZWFkOgorCQkJCQkkaXNfYWxsX2ludHMgPSB0cnVlOworCQkJCQlmb3IgKCRzayA9IGNvdW50KCR2YWx1ZSkgLSAxOyAkc2sgPj0gMDsgLS0kc2spCisJCQkJCXsKKwkJCQkJCWlmICghYXJyYXlfa2V5X2V4aXN0cygkc2ssICR2YWx1ZSkgfHwgIWlzX2ludCgkdmFsdWVbJHNrXSkpCisJCQkJCQl7CisJCQkJCQkJJGlzX2FsbF9pbnRzID0gZmFsc2U7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJaWYgKCRpc19hbGxfaW50cykKKwkJCQkJeworCQkJCQkJJHMgPSBpbXBsb2RlKCcsICcsICR2YWx1ZSk7CisJCQkJCQkkdmFsdWUgPSAkczsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCSR0aGlzLT5jbGVhbl9JRDNpbmZvX3Jlc3VsdHNfcigkdmFsdWUsICRmbGFncyk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJJHRoaXMtPmNsZWFuX0lEM2luZm9fcmVzdWx0c19yKCR2YWx1ZSwgJGZsYWdzKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoaXNfc3RyaW5nKCRhcnIpKQorCQl7CisJCQkvLyBpcyB0aGlzIGEgY2xlYW5lZCB1cCBpdGVtPyBZZXMsIHRoZW4gdGhlcmUncyBhIGZ1bGwtQVNDSUkgc3RyaW5nIGhlcmUsIHNhbnMgbmV3bGluZXMsIGV0Yy4KKwkJCSRsZW4gPSBzdHJsZW4oJGFycik7CisJCQkkdmFsdWUgPSBydHJpbSgkYXJyLCAiXHgwMCIpOworCQkJJHZhbHVlID0gc3RydHIoJHZhbHVlLCAiXHgwMCIsICcgJyk7ICAgIC8vIGJlY2F1c2UgcHJlZ19tYXRjaCgpIGRvZXNuJ3QgJ3NlZScgTlVMIGJ5dGVzLi4uCisJCQlpZiAocHJlZ19tYXRjaCgiL1teIC1+XG5cclx0XS8iLCAkdmFsdWUpKQorCQkJeworCQkJCWlmICgkbGVuID4gMCAmJiAkbGVuIDwgMjU2KQorCQkJCXsKKwkJCQkJLy8gY2hlY2sgaWYgd2UgY2FuIHR1cm4gaXQgaW50byBzb21ldGhpbmcgVVRGOC1MRUdBTDsgd2hlbiBub3QsIHdlIGhleGR1bXAhCisJCQkJCSRpbSA9IHN0cl9yZXBsYWNlKCc/JywgJyZRTWFSSzsnLCAkdmFsdWUpOworCQkJCQkkZHN0ID0gJHRoaXMtPm1rU2FmZVVURjgoJGltKTsKKwkJCQkJaWYgKHN0cnBvcygkZHN0LCAnPycpID09PSBmYWxzZSkKKwkJCQkJeworCQkJCQkJLy8gaXQncyBhIFVURi04IGxlZ2FsIHN0cmluZyBub3chCisJCQkJCQkkYXJyID0gc3RyX3JlcGxhY2UoJyZRTWFSSzsnLCAnPycsICRkc3QpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLy8gY29udmVydCByYXcgYmluYXJ5IGRhdGEgdG8gaGV4IGluIDMyIGJpdCBjaHVua3M6CisJCQkJCQkkdGVtcCA9IHVucGFjaygnSConLCAkYXJyKTsKKwkJCQkJCSR0ZW1wID0gc3RyX3NwbGl0KCR0ZW1wWzFdLCA4KTsKKwkJCQkJCSRhcnIgPSBuZXcgQmluYXJ5RGF0YUNvbnRhaW5lcihpbXBsb2RlKCcgJywgJHRlbXApKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkkYXJyID0gbmV3IEJpbmFyeURhdGFDb250YWluZXIoJyh1bmlkZW50aWZpZWQgYmluYXJ5IGRhdGEgLi4uIGxlbmd0aCA9ICcgLiBzdHJsZW4oJGFycikgLiAnKScpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkkYXJyID0gJHZhbHVlOyAgIC8vIGRvbid0IHN0b3JlIGFzIGEgJ3Byb2Nlc3NlZCcgaXRlbSAoc2hvcnRjdXQpCisJCQl9CisJCX0KKwkJZWxzZSBpZiAoaXNfYm9vbCgkYXJyKSB8fAorCQkJCSBpc19pbnQoJGFycikgfHwKKwkJCQkgaXNfZmxvYXQoJGFycikgfHwKKwkJCQkgaXNfbnVsbCgkYXJyKSkKKwkJeworCQl9CisJCWVsc2UgaWYgKGlzX29iamVjdCgkYXJyKSAmJiAhaXNzZXQoJGFyci0+aWQzX3Byb2NzdXBwb3J0X29iaikpCisJCXsKKwkJCSRhcnIgPSBuZXcgQmluYXJ5RGF0YUNvbnRhaW5lcignKG9iamVjdCkgJyAuICR0aGlzLT5ta1NhZmVVVEY4KHByaW50X3IoJGFyciwgdHJ1ZSkpKTsKKwkJfQorCQllbHNlIGlmIChpc19yZXNvdXJjZSgkYXJyKSkKKwkJeworCQkJJGFyciA9IG5ldyBCaW5hcnlEYXRhQ29udGFpbmVyKCcocmVzb3VyY2UpICcgLiAkdGhpcy0+bWtTYWZlVVRGOChwcmludF9yKCRhcnIsIHRydWUpKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkkYXJyID0gbmV3IEJpbmFyeURhdGFDb250YWluZXIoJyh1bmlkZW50aWZpZWQgdHlwZTogJyAuIGdldHR5cGUoJGFycikgLiAnKSAnIC4gJHRoaXMtPm1rU2FmZVVURjgocHJpbnRfcigkYXJyLCB0cnVlKSkpOworCQl9CisJfQorCisJcHJvdGVjdGVkIGZ1bmN0aW9uIGNsZWFuX0lEM2luZm9fcmVzdWx0cygmJGFyciwgJGZsYWdzID0gMCkKKwl7CisJCXVuc2V0KCRhcnJbJ0dFVElEM19WRVJTSU9OJ10pOworCQl1bnNldCgkYXJyWydmaWxlcGF0aCddKTsKKwkJdW5zZXQoJGFyclsnZmlsZW5hbWUnXSk7CisJCXVuc2V0KCRhcnJbJ2ZpbGVuYW1lcGF0aCddKTsKKwkJdW5zZXQoJGFyclsnY2FjaGVfaGFzaCddKTsKKwkJdW5zZXQoJGFyclsnY2FjaGVfZmlsZSddKTsKKworCQkkdGhpcy0+Y2xlYW5fSUQzaW5mb19yZXN1bHRzX3IoJGFyciwgJGZsYWdzKTsKKworCQkvLyBoZXVyaXN0aWMgIzQ6IGNvbnZlcnQga2V5cyB0byBzb21ldGhpbmcgbGVnaWJsZToKKwkJaWYgKGlzX2FycmF5KCRhcnIpKQorCQl7CisJCQkkdGhpcy0+Y2xlYW5fSUQzaW5mb19rZXlzKCRhcnIpOworCQl9CisJfQorCisKKworCisKKworCisKKwkvKioKKwkgKiBEZWxldGUgYSBmaWxlIG9yIGRpcmVjdG9yeSwgaW5jbHVzaW5nIHN1YmRpcmVjdG9yaWVzIGFuZCBmaWxlcy4KKwkgKgorCSAqIFJldHVybiBUUlVFIG9uIHN1Y2Nlc3MsIEZBTFNFIHdoZW4gYW4gZXJyb3Igb2NjdXJyZWQuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhlIHJvdXRpbmUgd2lsbCB0cnkgdG8gcGVyc2V2ZXJlIGFuZCBrZWVwIGRlbGV0aW5nIG90aGVyIHN1YmRpcmVjdG9yaWVzCisJICogYW5kIGZpbGVzLCBldmVuIHdoZW4gYW4gZXJyb3Igb2NjdXJyZWQgZm9yIG9uZSBvciBtb3JlIG9mIHRoZSBzdWJpdGVtczogdGhpcyBpcworCSAqIGEgYmVzdCBlZmZvcnQgcG9saWN5LgorCSAqLworCXByb3RlY3RlZCBmdW5jdGlvbiB1bmxpbmsoJGxlZ2FsX3VybCwgJG1pbWVfZmlsdGVycykKKwl7CisJCSRydiA9IHRydWU7CisKKwkJLy8gbXVzdCB0cmFuc2Zvcm0gaGVyZSBzbyBhbGlhcy9ldGMuIGV4cGFuc2lvbnMgaW5zaWRlIGxlZ2FsX3VybF9wYXRoMmZpbGVfcGF0aCgpIGdldCBhIGNoYW5jZToKKwkJJGZpbGUgPSAkdGhpcy0+bGVnYWxfdXJsX3BhdGgyZmlsZV9wYXRoKCRsZWdhbF91cmwpOworCisJCWlmIChpc19kaXIoJGZpbGUpKQorCQl7CisJCQkkZGlyID0gc2VsZjo6ZW5mb3JjZVRyYWlsaW5nU2xhc2goJGZpbGUpOworCQkJJHVybCA9IHNlbGY6OmVuZm9yY2VUcmFpbGluZ1NsYXNoKCRsZWdhbF91cmwpOworCQkJJGNvbGwgPSAkdGhpcy0+c2NhbmRpcigkZGlyLCAnKicsIGZhbHNlLCAwLCB+R0xPQl9OT0hJRERFTik7CisJCQlpZiAoJGNvbGwgIT09IGZhbHNlKQorCQkJeworCQkJCWZvcmVhY2ggKCRjb2xsWydkaXJzJ10gYXMgJGYpCisJCQkJeworCQkJCQlpZiAoJGYgPT09ICcuJyB8fCAkZiA9PT0gJy4uJykKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCSRydiAmPSAkdGhpcy0+dW5saW5rKCR1cmwgLiAkZiwgJG1pbWVfZmlsdGVycyk7CisJCQkJfQorCQkJCWZvcmVhY2ggKCRjb2xsWydmaWxlcyddIGFzICRmKQorCQkJCXsKKwkJCQkJJHJ2ICY9ICR0aGlzLT51bmxpbmsoJHVybCAuICRmLCAkbWltZV9maWx0ZXJzKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJJHJ2ID0gZmFsc2U7CisJCQl9CisKKwkJCSRydiAmPSBAcm1kaXIoJGZpbGUpOworCQl9CisJCWVsc2UgaWYgKGZpbGVfZXhpc3RzKCRmaWxlKSkKKwkJeworCQkJaWYgKGlzX2ZpbGUoJGZpbGUpKQorCQkJeworCQkJCSRtaW1lID0gJHRoaXMtPmdldE1pbWVGcm9tRXh0KCRmaWxlKTsgICAvLyB0YWtlIHRoZSBmYXN0IHRyYWNrIHRvIG1pbWUgdHlwZSBzbmlmZmluZzsgd2UnbGwgbGl2ZSB3aXRoIHRoZSAocmF0aGVyIGxvdykgcmlzayBvZiBiZWluZyBpbmFjdXJhdGUgZHVlIHRvIGFjY2lkZW50YWwvaW50ZW50aW9uYWwgbWlzbmFtaW5nIG9mIHRoZSBmaWxlcworCQkJCWlmICghJHRoaXMtPklzQWxsb3dlZE1pbWVUeXBlKCRtaW1lLCAkbWltZV9maWx0ZXJzKSkKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQkkbWV0YSA9ICYkdGhpcy0+Z2V0aWQzX2NhY2hlLT5waWNrKCRsZWdhbF91cmwsICR0aGlzLCBmYWxzZSk7CisJCQlhc3NlcnQoJG1ldGEgIT0gbnVsbCk7CisKKwkJCSRydiAmPSBAdW5saW5rKCRmaWxlKTsKKwkJCSRydiAmPSAkbWV0YS0+ZGVsZXRlKHRydWUpOworCisJCQl1bnNldCgkbWV0YSk7CisJCX0KKwkJcmV0dXJuICRydjsKKwl9CisKKwkvKioKKwkgKiBnbG9iKCkgd3JhcHBlcjogYWNjZXB0cyB0aGUgc2FtZSBvcHRpb25zIGFzIFRvb2xpbmcucGhwOjpzYWZlX2dsb2IoKQorCSAqCisJICogSG93ZXZlciwgdGhpcyBtZXRob2Qgd2lsbCBhbHNvIGVuc3VyZSB0aGUgJy4uJyBkaXJlY3RvcnkgZW50cnkgaXMgb25seSByZXR1cm5lZCwKKwkgKiBldmVuIHdoaWxlIGFza2VkIGZvciwgd2hlbiB0aGUgcGFyZW50IGRpcmVjdG9yeSBjYW4gYmUgbGVnYWxseSB0cmF2ZXJzZWQgYnkgdGhlIEZpbGVNYW5hZ2VyLgorCSAqCisJICogUmV0dXJuIGEgZHVhbCBhcnJheSAocG9zc2libHkgZW1wdHkpIG9mIGRpcmVjdG9yaWVzIGFuZCBmaWxlcywgb3IgRkFMU0Ugb24gZXJyb3IuCisJICoKKwkgKiBJTVBPUlRBTlQ6IHRoaXMgZnVuY3Rpb24gR1VBUkFOVEVFUyB0aGF0LCB3aGVuIHByZXNlbnQgYXQgYWxsLCB0aGUgZG91YmxlLWRvdCAnLi4nCisJICogICAgICAgICAgICBlbnRyeSBpcyB0aGUgdmVyeSBsYXN0IGVudHJ5IGluIHRoZSBhcnJheS4KKwkgKiAgICAgICAgICAgIFRoaXMgZ3VhcmFudGVlIGlzIGltcG9ydGFudCBhcyBvblZpZXcoKSBldCBhbCBkZXBlbmQgb24gaXQuCisJICovCisJcHVibGljIGZ1bmN0aW9uIHNjYW5kaXIoJGRpciwgJGZpbGVtYXNrLCAkc2VlX3RodW1ibmFpbF9kaXIsICRnbG9iX2ZsYWdzX29yLCAkZ2xvYl9mbGFnc19hbmQpCisJeworCQkvLyBsaXN0IGZpbGVzLCBleGNlcHQgdGhlIHRodW1ibmFpbCBmb2xkZXIgaXRzZWxmIG9yIGFueSBmaWxlIGluIGl0OgorCQkkZGlyID0gc2VsZjo6ZW5mb3JjZVRyYWlsaW5nU2xhc2goJGRpcik7CisKKwkJJGp1c3RfYmVsb3dfdGh1bWJuYWlsX2RpciA9IGZhbHNlOworCQlpZiAoISRzZWVfdGh1bWJuYWlsX2RpcikKKwkJeworCQkJJHRucGF0aCA9ICR0aGlzLT50aHVtYm5haWxDYWNoZURpcjsKKwkJCWlmIChGaWxlTWFuYWdlclV0aWxpdHk6OnN0YXJ0c3dpdGgoJGRpciwgJHRucGF0aCkpCisJCQkJcmV0dXJuIGZhbHNlOworCisJCQkkdG5wYXJlbnQgPSAkdGhpcy0+dGh1bWJuYWlsQ2FjaGVQYXJlbnREaXI7CisJCQkkanVzdF9iZWxvd190aHVtYm5haWxfZGlyID0gKCRkaXIgPT0gJHRucGFyZW50KTsKKworCQkJJHRuZGlyID0gYmFzZW5hbWUoc3Vic3RyKCR0aGlzLT5vcHRpb25zWyd0aHVtYm5haWxQYXRoJ10sIDAsIC0xKSk7CisJCX0KKworCQkkYXRfYmFzZWRpciA9ICgkdGhpcy0+bWFuYWdlZEJhc2VEaXIgPT0gJGRpcik7CisKKwkJJGZsYWdzID0gR0xPQl9OT0RPVFMgfCBHTE9CX05PSElEREVOIHwgR0xPQl9OT1NPUlQ7CisJCSRmbGFncyAmPSAkZ2xvYl9mbGFnc19hbmQ7CisJCSRmbGFncyB8PSAkZ2xvYl9mbGFnc19vcjsKKwkJJGNvbGwgPSBzYWZlX2dsb2IoJGRpciAuICRmaWxlbWFzaywgJGZsYWdzKTsKKworCQlpZiAoJGNvbGwgIT09IGZhbHNlKQorCQl7CisJCQlpZiAoJGp1c3RfYmVsb3dfdGh1bWJuYWlsX2RpcikKKwkJCXsKKwkJCQlmb3JlYWNoKCRjb2xsWydkaXJzJ10gYXMgJGsgPT4gJGRpcikKKwkJCQl7CisJCQkJCWlmICgkZGlyID09PSAkdG5kaXIpCisJCQkJCXsKKwkJCQkJCXVuc2V0KCRjb2xsWydkaXJzJ11bJGtdKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoISRhdF9iYXNlZGlyKQorCQkJeworCQkJCSRjb2xsWydkaXJzJ11bXSA9ICcuLic7CisJCQl9CisJCX0KKworCQlyZXR1cm4gJGNvbGw7CisJfQorCisKKworCS8qKgorCSAqIENoZWNrIHRoZSAkZXh0ZW5zaW9uIGFyZ3VtZW50IGFuZCByZXBsYWNlIGl0IHdpdGggYSBzdWl0YWJsZSAnc2FmZScgZXh0ZW5zaW9uLgorCSAqLworCXB1YmxpYyBmdW5jdGlvbiBnZXRTYWZlRXh0ZW5zaW9uKCRleHRlbnNpb24sICRzYWZlX2V4dGVuc2lvbiA9ICd0eHQnLCAkbWFuZGF0b3J5X2V4dGVuc2lvbiA9ICd0eHQnKQorCXsKKwkJaWYgKCFpc19zdHJpbmcoJGV4dGVuc2lvbikgfHwgJGV4dGVuc2lvbiA9PT0gJycpIC8vIGNhbid0IHVzZSAnZW1wdHkoJGV4dGVuc2lvbiknIGFzICIwIiBpcyBhIHZhbGlkIGV4dGVuc2lvbiBpdHNlbGYuCisJCXsKKwkJCS8vZW5mb3JjZSBhIG1hbmRhdG9yeSBleHRlbnNpb24sIGV2ZW4gd2hlbiB0aGVyZSBpc24ndCBvbmUgKGR1ZSB0byBmaWx0ZXJpbmcgb3Igb3JpZ2luYWwgaW5wdXQgcHJvZHVjaW5nIG5vbmUpCisJCQlyZXR1cm4gKCFlbXB0eSgkbWFuZGF0b3J5X2V4dGVuc2lvbikgPyAkbWFuZGF0b3J5X2V4dGVuc2lvbiA6ICghZW1wdHkoJHNhZmVfZXh0ZW5zaW9uKSA/ICRzYWZlX2V4dGVuc2lvbiA6ICRleHRlbnNpb24pKTsKKwkJfQorCQkkZXh0ZW5zaW9uID0gc3RydG9sb3dlcigkZXh0ZW5zaW9uKTsKKwkJc3dpdGNoICgkZXh0ZW5zaW9uKQorCQl7CisJCWNhc2UgJ2V4ZSc6CisJCWNhc2UgJ2RsbCc6CisJCWNhc2UgJ2NvbSc6CisJCWNhc2UgJ3N5cyc6CisJCWNhc2UgJ2JhdCc6CisJCWNhc2UgJ3BsJzoKKwkJY2FzZSAnc2gnOgorCQljYXNlICdwaHAnOgorCQljYXNlICdwaHAzJzoKKwkJY2FzZSAncGhwNCc6CisJCWNhc2UgJ3BocDUnOgorCQljYXNlICdwaHA2JzoKKwkJY2FzZSAncGhwNyc6CisJCWNhc2UgJ3BocDgnOgorCQljYXNlICdwaHBzJzoKKwkJCXJldHVybiAoIWVtcHR5KCRzYWZlX2V4dGVuc2lvbikgPyAkc2FmZV9leHRlbnNpb24gOiAkZXh0ZW5zaW9uKTsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuICRleHRlbnNpb247CisJCX0KKwl9CisKKwkvKioKKwkgKiBPbmx5IGFsbG93IGEgJ2RvdHRlZCcsIGkuZS4gVU5JWCBoaWRkZW4gZmlsZW5hbWUgd2hlbiBvcHRpb25zWydzYWZlJ10gPT0gRkFMU0UKKwkgKi8KKwlwdWJsaWMgZnVuY3Rpb24gSXNIaWRkZW5OYW1lQWxsb3dlZCgkZmlsZSkKKwl7CisJCWlmICgkdGhpcy0+b3B0aW9uc1snc2FmZSddICYmICFlbXB0eSgkZmlsZSkpCisJCXsKKwkJCWlmICgkZmlsZSAhPT0gJy4nICYmICRmaWxlICE9PSAnLi4nICYmICRmaWxlWzBdID09PSAnLicpCisJCQl7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisJCXJldHVybiB0cnVlOworCX0KKworCXB1YmxpYyBmdW5jdGlvbiBJc0hpZGRlblBhdGhBbGxvd2VkKCRwYXRoKQorCXsKKwkJaWYgKCR0aGlzLT5vcHRpb25zWydzYWZlJ10gJiYgIWVtcHR5KCRwYXRoKSkKKwkJeworCQkJJHBhdGggPSBzdHJ0cigkcGF0aCwgJ1xcJywgJy8nKTsKKwkJCSRzZWdzID0gZXhwbG9kZSgnLycsICRwYXRoKTsKKwkJCWZvcmVhY2goJHNlZ3MgYXMgJGZpbGUpCisJCQl7CisJCQkJaWYgKCEkdGhpcy0+SXNIaWRkZW5OYW1lQWxsb3dlZCgkZmlsZSkpCisJCQkJeworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiB0cnVlOworCX0KKworCisJLyoqCisJICogTWFrZSBhIGNsZWFuZWQtdXAsIHVuaXF1ZSBmaWxlbmFtZQorCSAqCisJICogUmV0dXJuIHRoZSBmaWxlIChkaXIgKyBuYW1lICsgZXh0KSwgb3IgYSB1bmlxdWUsIHlldCBub24tZXhpc3RpbmcsIHZhcmlhbnQgdGhlcmVvZiwgd2hlcmUgdGhlIGZpbGVuYW1lCisJICogaXMgYXBwZW5kZWQgd2l0aCBhICdfJyBhbmQgYSBudW1iZXIsIGUuZy4gJ18xJywgd2hlbiB0aGUgZmlsZSBpdHNlbGYgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGdpdmVuCisJICogZGlyZWN0b3J5LiBUaGUgZGlyZWN0b3J5IHBhcnQgb2YgdGhlIHJldHVybmVkIHZhbHVlIGVxdWFscyAkZGlyLgorCSAqCisJICogUmV0dXJuIE5VTEwgd2hlbiAkZmlsZSBpcyBlbXB0eSBvciB3aGVuIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGRvZXMgbm90IHJlc2lkZSB3aXRoaW4gdGhlCisJICogZGlyZWN0b3J5IHRyZWUgcm9vdGVkIGJ5IG9wdGlvbnNbJ2RpcmVjdG9yeSddCisJICoKKwkgKiBOb3RlIHRoYXQgdGhlIGdpdmVuIGZpbGVuYW1lIHdpbGwgYmUgY29udmVydGVkIHRvIGEgbGVnYWwgZmlsZW5hbWUsIGNvbnRhaW5pbmcgYSBmaWxlc3lzdGVtLWxlZ2FsCisJICogc3Vic2V0IG9mIEFTQ0lJIGNoYXJhY3RlcnMgb25seSwgYmVmb3JlIGJlaW5nIHVzZWQgYW5kIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24uCisJICoKKwkgKiBAcGFyYW0gbWl4ZWQgJGZpbGVpbmZvICAgICBlaXRoZXIgYSBzdHJpbmcgY29udGFpbmluZyBhIGZpbGVuYW1lK2V4dCBvciBhbiBhcnJheSBhcyBwcm9kdWNlZCBieSBwYXRoaW5mbygpLgorCSAqIEBkYXJhbSBzdHJpbmcgJGRpciAgICAgICAgIHBhdGggcG9pbnRpbmcgYXQgd2hlcmUgdGhlIGdpdmVuIGZpbGUgbWF5IGV4aXN0LgorCSAqCisJICogQHJldHVybiBhIGZpbGVwYXRoIGNvbnNpc3Rpbmcgb2YgJGRpciBhbmQgdGhlIGNsZWFuZWQgdXAgYW5kIHBvc3NpYmx5IHNlcXVlbmNlZCBmaWxlbmFtZSBhbmQgZmlsZSBleHRlbnNpb24KKwkgKiAgICAgICAgIGFzIHByb3ZpZGVkIGJ5ICRmaWxlaW5mbywgb3IgTlVMTCBvbiBlcnJvci4KKwkgKi8KKwlwdWJsaWMgZnVuY3Rpb24gZ2V0VW5pcXVlTmFtZSgkZmlsZWluZm8sICRkaXIpCisJeworCQkkZGlyID0gc2VsZjo6ZW5mb3JjZVRyYWlsaW5nU2xhc2goJGRpcik7CisKKwkJaWYgKGlzX3N0cmluZygkZmlsZWluZm8pKQorCQl7CisJCQkkZmlsZWluZm8gPSBwYXRoaW5mbygkZmlsZWluZm8pOworCQl9CisKKwkJaWYgKCFpc19hcnJheSgkZmlsZWluZm8pKQorCQl7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCQkkZG90ZmlsZSA9IChzdHJsZW4oJGZpbGVpbmZvWydmaWxlbmFtZSddKSA9PSAwKTsKKworCQkvKgorCQkgKiBzaW5jZSAncGFnZXRpdGxlKCknIGlzIHVzZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSwgbm9uLWV4aXN0aW5nIGZpbGVuYW1lLCB3ZSBjYW4gZm9yZWdvIHRoZSBkaXJzY2FuCisJCSAqIGFuZCBzaW1wbHkgY2hlY2sgd2hldGhlciB0aGUgY29uc3RydWN0ZWQgZmlsZW5hbWUvcGF0aCBleGlzdHMgb3Igbm90IGFuZCBidW1wIHRoZSBzdWZmaXggbnVtYmVyCisJCSAqIGJ5IDEgdW50aWwgaXQgZG9lcyBub3QsIHRodXMgcXVpY2tseSBwcm9kdWNpbmcgYSB1bmlxdWUgZmlsZW5hbWUuCisJCSAqCisJCSAqIFRoaXMgaXMgZmFzdGVyIHRoYW4gdXNpbmcgYSBkaXJzY2FuIHRvIGNvbGxlY3QgYSBzZXQgb2YgZXhpc3RpbmcgZmlsZW5hbWVzIGFuZCBmZWVkaW5nIHRoZW0gYXMKKwkJICogYW4gb3B0aW9uIGFycmF5IHRvIHBhZ2V0aXRsZSgpLCBwYXJ0aWN1bGFybHkgZm9yIGxhcmdlIGRpcmVjdG9yaWVzLgorCQkgKi8KKwkJJGZpbGVuYW1lID0gRmlsZU1hbmFnZXJVdGlsaXR5OjpwYWdldGl0bGUoJGZpbGVpbmZvWydmaWxlbmFtZSddLCBudWxsLCAnLV8uLFtdKCl+IUArJyAvKiAuICcjJicgKi8sICctXyx+QCsjJicpOworCQlpZiAoISRmaWxlbmFtZSAmJiAhJGRvdGZpbGUpCisJCQlyZXR1cm4gbnVsbDsKKworCQkvLyBhbHNvIGNsZWFuIHVwIHRoZSBleHRlbnNpb246IG9ubHkgYWxsb3cgYWxwaGFudW1lcmljcyBpbiB0aGVyZSEKKwkJJGV4dCA9IEZpbGVNYW5hZ2VyVXRpbGl0eTo6cGFnZXRpdGxlKGlzc2V0KCRmaWxlaW5mb1snZXh0ZW5zaW9uJ10pID8gJGZpbGVpbmZvWydleHRlbnNpb24nXSA6IG51bGwpOworCQkkZXh0ID0gKHN0cmxlbigkZXh0KSA+IDAgPyAnLicgLiAkZXh0IDogbnVsbCk7CisJCS8vIG1ha2Ugc3VyZSB0aGUgZ2VuZXJhdGVkIGZpbGVuYW1lIGlzIFNBRkU6CisJCSRmbmFtZSA9ICRmaWxlbmFtZSAuICRleHQ7CisJCSRmaWxlID0gJGRpciAuICRmbmFtZTsKKwkJaWYgKGZpbGVfZXhpc3RzKCRmaWxlKSkKKwkJeworCQkJaWYgKCRkb3RmaWxlKQorCQkJeworCQkJCSRmaWxlbmFtZSA9ICRmbmFtZTsKKwkJCQkkZXh0ID0gJyc7CisJCQl9CisKKwkJCS8qCisJCQkgKiBtYWtlIGEgdW5pcXVlIG5hbWUuIERvIHRoaXMgYnkgcG9zdGZpeGluZyB0aGUgZmlsZW5hbWUgd2l0aCAnX1gnIHdoZXJlIFggaXMgYSBzZXF1ZW50aWFsIG51bWJlci4KKwkJCSAqCisJCQkgKiBOb3RlIHRoYXQgd2hlbiB0aGUgaW5wdXQgbmFtZSBpcyBhbHJlYWR5IHN1Y2ggYSAnc2VxdWVuY2VkJyBuYW1lLCB0aGUgc2VxdWVuY2UgbnVtYmVyIGlzCisJCQkgKiBleHRyYWN0ZWQgZnJvbSBpdCBhbmQgc2VxdWVuY2luZyBjb250aW51ZXMgZnJvbSB0aGVyZSwgaGVuY2UgaW5wdXQgJ2ZpbGVfNScgd291bGQsIGlmIGl0IGFscmVhZHkKKwkJCSAqIGV4aXN0ZWQsIHRodXMgYmUgYnVtcGVkIHVwIHRvIGJlY29tZSAnZmlsZV82JyBhbmQgc28gb24sIHVudGlsIGEgZmlsZW5hbWUgaXMgZm91bmQgd2hpY2gKKwkJCSAqIGRvZXMgbm90IHlldCBleGlzdCBpbiB0aGUgZGVzaWduYXRlZCBkaXJlY3RvcnkuCisJCQkgKi8KKwkJCSRpID0gMTsKKwkJCWlmIChwcmVnX21hdGNoKCcvXiguKilfKFsxLTldWzAtOV0qKSQvJywgJGZpbGVuYW1lLCAkbWF0Y2hlcykpCisJCQl7CisJCQkJJGkgPSBpbnR2YWwoJG1hdGNoZXNbMl0pOworCQkJCWlmICgnUCcuJGkgIT09ICdQJy4kbWF0Y2hlc1syXSB8fCAkaSA+IDEwMDAwMCkKKwkJCQl7CisJCQkJCS8vIHZlcnkgbGFyZ2UgbnVtYmVyOiBub3QgYSBzZXF1ZW5jZSBudW1iZXIhCisJCQkJCSRpID0gMTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJJGZpbGVuYW1lID0gJG1hdGNoZXNbMV07CisJCQkJfQorCQkJfQorCQkJZG8KKwkJCXsKKwkJCQkkZm5hbWUgPSAkZmlsZW5hbWUgLiAoJGkgPyAnXycgLiAkaSA6ICcnKSAuICRleHQ7CisJCQkJJGZpbGUgPSAkZGlyIC4gJGZuYW1lOworCQkJCSRpKys7CisJCQl9IHdoaWxlIChmaWxlX2V4aXN0cygkZmlsZSkpOworCQl9CisKKwkJLy8gJGZuYW1lIGlzIG5vdyBndWFyYW50ZWVkIHRvIE5PVCBleGlzdCBpbiB0aGUgZ2l2ZW4gZGlyZWN0b3J5CisJCXJldHVybiAkZm5hbWU7CisJfQorCisKKworCS8qKgorCSAqIFByZWRpY3QgdGhlIGFjdHVhbCB3aWR0aC9oZWlnaHQgZGltZW5zaW9ucyBvZiB0aGUgdGh1bWJuYWlsLCBnaXZlbiB0aGUgb3JpZ2luYWwgaW1hZ2UncyBkaW1lbnNpb25zIGFuZCB0aGUgZ2l2ZW4gc2l6ZSBsaW1pdHMuCisJICoKKwkgKiBOb3RlOiBleGlzdHMgYXMgYSBtZXRob2QgaW4gdGhpcyBjbGFzcywgc28geW91IGNhbiBvdmVycmlkZSBpdCB3aGVuIHlvdSBvdmVycmlkZSBnZXRUaHVtYigpLgorCSAqLworCXB1YmxpYyBmdW5jdGlvbiBwcmVkaWN0VGh1bWJEaW1lbnNpb25zKCRvcmlnX3gsICRvcmlnX3ksICRtYXhfeCA9IG51bGwsICRtYXhfeSA9IG51bGwsICRyYXRpbyA9IHRydWUsICRyZXNpemVXaGVuU21hbGxlciA9IGZhbHNlKQorCXsKKwkJcmV0dXJuIEltYWdlOjpjYWxjdWxhdGVfcmVzaXplX2RpbWVuc2lvbnMoJG9yaWdfeCwgJG9yaWdfeSwgJG1heF94LCAkbWF4X3ksICRyYXRpbywgJHJlc2l6ZVdoZW5TbWFsbGVyKTsKKwl9CisKKworCS8qKgorCSAqIFJldHVybnMgdGhlIFVSSSBwYXRoIHRvIHRoZSBhcHJvcHJpYXRlIGljb24gaW1hZ2UgZm9yIHRoZSBnaXZlbiBmaWxlIC8gZGlyZWN0b3J5LgorCSAqCisJICogTk9URVM6CisJICoKKwkgKiAxKSBhbnkgJHBhdGggd2l0aCBhbiAnZXh0ZW5zaW9uJyBvZiAnLmRpcmVjdG9yeScgaXMgYXNzdW1lZCB0byBiZSBhIGRpcmVjdG9yeS4KKwkgKgorCSAqIDIpIFRoaXMgbWV0aG9kIHNwZWNpZmljYWxseSBkb2VzIE5PVCBjaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBwYXRoIGV4aXN0cyBvciBub3Q6IGl0IGp1c3QgbG9va3MgYXQKKwkgKiAgICB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uIHBhc3NlZCB0byBpdCwgdGhhdCdzIGFsbC4KKwkgKgorCSAqIE5vdGUgIzIgaXMgaW1wb3J0YW50IGFzIHRoaXMgZW5hYmxlcyB0aGlzIGZ1bmN0aW9uIHRvIGFsc28gc2VydmUgYXMgaWNvbiBmZXRjaGVyIGZvciBaSVAgY29udGVudCB2aWV3ZXIsIGV0Yy46CisJICogYWZ0ZXIgYWxsLCB0aG9zZSBmaWxlcyBkbyBub3QgZXhpc3QgcGh5c2ljYWxseSBvbiBkaXNrIHRoZW1zZWx2ZXMhCisJICovCisJcHVibGljIGZ1bmN0aW9uIGdldEljb24oJGZpbGUsICRzbWFsbEljb24pCisJeworCQkkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZSwgUEFUSElORk9fRVhURU5TSU9OKSk7CisKKwkJaWYgKGFycmF5X2tleV9leGlzdHMoJGV4dCwgJHRoaXMtPmljb25fY2FjaGVbISRzbWFsbEljb25dKSkKKwkJeworCQkJcmV0dXJuICR0aGlzLT5pY29uX2NhY2hlWyEkc21hbGxJY29uXVskZXh0XTsKKwkJfQorCisJCSRsYXJnZURpciA9ICghJHNtYWxsSWNvbiA/ICdMYXJnZS8nIDogJycpOworCQkkdXJsX3BhdGggPSAkdGhpcy0+b3B0aW9uc1snYXNzZXRCYXNlUGF0aCddIC4gJ0ltYWdlcy9JY29ucy8nIC4gJGxhcmdlRGlyIC4gJGV4dCAuICcucG5nJzsKKwkJJHBhdGggPSAoaXNfZmlsZSgkdGhpcy0+dXJsX3BhdGgyZmlsZV9wYXRoKCR1cmxfcGF0aCkpKQorCQkJPyAkdXJsX3BhdGgKKwkJCTogJHRoaXMtPm9wdGlvbnNbJ2Fzc2V0QmFzZVBhdGgnXSAuICdJbWFnZXMvSWNvbnMvJyAuICRsYXJnZURpciAuICdkZWZhdWx0LnBuZyc7CisKKwkJJHRoaXMtPmljb25fY2FjaGVbISRzbWFsbEljb25dWyRleHRdID0gJHBhdGg7CisKKwkJcmV0dXJuICRwYXRoOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcGF0aCB0byB0aGUgdGh1bWJuYWlsIG9mIHRoZSBzcGVjaWZpZWQgaW1hZ2UsIHRoZSB0aHVtYm5haWwgaGF2aW5nIGl0cworCSAqIHdpZHRoIGFuZCBoZWlnaHQgbGltaXRlZCB0byAkd2lkdGggcGl4ZWxzLgorCSAqCisJICogV2hlbiB0aGUgdGh1bWJuYWlsIGltYWdlIGRvZXMgbm90IGV4aXN0IHlldCwgaXQgd2lsbCBjcmVhdGVkIG9uIHRoZSBmbHkuCisJICoKKwkgKiBAcGFyYW0gb2JqZWN0ICRtZXRhCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjYWNoZSByZWNvcmQgaW5zdGFuY2UgcmVsYXRlZCB0byB0aGUgb3JpZ2luYWwgaW1hZ2UuIElzIHVzZWQKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYWNjZXNzIHRoZSBjYWNoZSBhbmQgZ2VuZXJhdGUgYSBzdWl0YWJsZSB0aHVtYm5haWwgZmlsZW5hbWUuCisJICoKKwkgKiBAcGFyYW0gc3RyaW5nICRwYXRoICAgICAgICAgZmlsZXN5c3RlbSBwYXRoIHRvIHRoZSBvcmlnaW5hbCBpbWFnZS4gSXMgdXNlZCB0byBkZXJpdmUKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRodW1ibmFpbCBjb250ZW50IGZyb20uCisJICoKKwkgKiBAcGFyYW0gaW50ZWdlciAkd2lkdGggICAgICAgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBpeGVscyBmb3Igd2lkdGggb2YgdGhlCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRodW1ibmFpbC4KKwkgKgorCSAqIEBwYXJhbSBpbnRlZ2VyICRoZWlnaHQgICAgICB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGl4ZWxzIGZvciBoZWlnaHQgb2YgdGhlCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRodW1ibmFpbC4KKwkgKi8KKwlwdWJsaWMgZnVuY3Rpb24gZ2V0VGh1bWIoJG1ldGEsICRwYXRoLCAkd2lkdGgsICRoZWlnaHQsICRvbmx5SWZFeGlzdHNJbkNhY2hlID0gZmFsc2UpCisJeworCQkkdGh1bWJQYXRoID0gJG1ldGEtPmdldFRodW1iUGF0aCgkd2lkdGggLiAneCcgLiAkaGVpZ2h0KTsKKwkJaWYgKCFpc19maWxlKCR0aHVtYlBhdGgpKQorCQl7CisJCQlpZiAoJG9ubHlJZkV4aXN0c0luQ2FjaGUpCisJCQkJcmV0dXJuIGZhbHNlOworCisJCQkvLyBtYWtlIHN1cmUgdGhlIGNhY2hlIHN1YmRpcmVjdG9yeSBleGlzdHMgd2hlcmUgd2UgYXJlIGdvaW5nIHRvIHN0b3JlIHRoZSB0aHVtYm5haWw6CisJCQkkbWV0YS0+bWtDYWNoZURpcigpOworCisJCQkkaW1nID0gbmV3IEltYWdlKCRwYXRoKTsKKwkJCS8vIGdlbmVyYWxseSBzYXZlIGFzIGxvc3N5IC8gbG93ZXItUSBqcGVnIHRvIHJlZHVjZSBmaWxlc2l6ZSwgdW5sZXNzIG9yaWcgaXMgUE5HL0dJRiwgaGlnaGVyIHF1YWxpdHkgZm9yIHNtYWxsZXIgdGh1bWJuYWlsczoKKwkJCSRpbWctPnJlc2l6ZSgkd2lkdGgsICRoZWlnaHQpLT5zYXZlKCR0aHVtYlBhdGgsIG1pbig5OCwgbWF4KE1URk1fVEhVTUJOQUlMX0pQRUdfUVVBTElUWSwgTVRGTV9USFVNQk5BSUxfSlBFR19RVUFMSVRZICsgMC4xNSAqICgyNTAgLSBtaW4oJHdpZHRoLCAkaGVpZ2h0KSkpKSwgdHJ1ZSk7CisKKwkJCWlmIChERVZFTE9QTUVOVCkKKwkJCXsKKwkJCQkkaW1naW5mbyA9ICRpbWctPmdldE1ldGFJbmZvKCk7CisJCQkJJG1ldGEtPnN0b3JlKCdpbWdfaW5mbycsICRpbWdpbmZvKTsKKworCQkJCSRtZXRhLT5zdG9yZSgnbWVtb3J5IHVzZWQnLCBudW1iZXJfZm9ybWF0KG1lbW9yeV9nZXRfcGVha191c2FnZSgpIC8gMUU2LCAxKSAuICcgTUInKTsKKwkJCQkkbWV0YS0+c3RvcmUoJ21lbW9yeSBlc3RpbWF0ZWQnLCBudW1iZXJfZm9ybWF0KEAkaW1naW5mb1snZmlsZWluZm8nXVsndXNhZ2VfZ3Vlc3RpbWF0ZSddIC8gMUU2LCAxKSAuICcgTUInKTsKKwkJCQkkbWV0YS0+c3RvcmUoJ21lbW9yeSBzdWdnZXN0ZWQnLCBudW1iZXJfZm9ybWF0KEAkaW1naW5mb1snZmlsZWluZm8nXVsndXNhZ2VfbWluX2FkdmlzZWQnXSAvIDFFNiwgMSkgLiAnIE1CJyk7CisJCQl9CisKKwkJCXVuc2V0KCRpbWcpOworCQl9CisJCXJldHVybiAkbWV0YS0+Z2V0VGh1bWJVUkwoJHdpZHRoIC4gJ3gnIC4gJGhlaWdodCk7CisJfQorCisJLyoqCisJICogQXNzaXN0YW50IGZ1bmN0aW9uIHdoaWNoIHByb2R1Y2VzIHRoZSBiZXN0IHBvc3NpYmxlIGljb24gaW1hZ2UgcGF0aCBmb3IgdGhlIGdpdmVuIGVycm9yL2V4Y2VwdGlvbiBtZXNzYWdlLgorCSAqLworCXB1YmxpYyBmdW5jdGlvbiBnZXRJY29uRm9yRXJyb3IoJGVtc2csICRvcmlnaW5hbF9maWxlbmFtZSwgJHNtYWxsX2ljb24pCisJeworCQlpZiAoZW1wdHkoJGVtc2cpKQorCQl7CisJCQkvLyBqdXN0IGdvIGFuZCBwaWNrIHRoZSBleHRlbnNpb24tcmVsYXRlZCBpY29uIGZvciB0aGlzIG9uZTsgbm90aGluZyBpcyB3cm9uZyB0b2RheSwgaXQgc2VlbXMuCisJCQkkdGh1bWJfcGF0aCA9ICghZW1wdHkoJG9yaWdpbmFsX2ZpbGVuYW1lKSA/ICRvcmlnaW5hbF9maWxlbmFtZSA6ICdpcy5kZWZhdWx0LW1pc3NpbmcnKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCSR0aHVtYl9wYXRoID0gJ2lzLmRlZmF1bHQtZXJyb3InOworCisJCQlpZiAoc3RycG9zKCRlbXNnLCAnaW1nX3dpbGxfbm90X2ZpdCcpICE9PSBmYWxzZSkKKwkJCXsKKwkJCQkkdGh1bWJfcGF0aCA9ICdpcy5vdmVyc2l6ZWRfaW1nJzsKKwkJCX0KKwkJCWVsc2UgaWYgKHN0cnBvcygkZW1zZywgJ25vZmlsZScpICE9PSBmYWxzZSkKKwkJCXsKKwkJCQkkdGh1bWJfcGF0aCA9ICdpcy5kZWZhdWx0LW1pc3NpbmcnOworCQkJfQorCQkJZWxzZSBpZiAoc3RycG9zKCRlbXNnLCAndW5zdXBwb3J0ZWRfaW1nZm10JykgIT09IGZhbHNlKQorCQkJeworCQkJCS8vIGp1c3QgZ28gYW5kIHBpY2sgdGhlIGV4dGVuc2lvbi1yZWxhdGVkIGljb24gZm9yIHRoaXMgb25lOyBub3RoaW5nIHNlcmlvdXNseSB3cm9uZyBoZXJlLgorCQkJCSR0aHVtYl9wYXRoID0gKCFlbXB0eSgkb3JpZ2luYWxfZmlsZW5hbWUpID8gJG9yaWdpbmFsX2ZpbGVuYW1lIDogJHRodW1iX3BhdGgpOworCQkJfQorCQkJZWxzZSBpZiAoc3RycG9zKCRlbXNnLCAnaW1hZ2UnKSAhPT0gZmFsc2UpCisJCQl7CisJCQkJJHRodW1iX3BhdGggPSAnYmFkbHkuYnJva2VuX2ltZyc7CisJCQl9CisJCX0KKworCQkkaW1nX2ZpbGVwYXRoID0gJHRoaXMtPmdldEljb24oJHRodW1iX3BhdGgsICRzbWFsbF9pY29uKTsKKworCQlyZXR1cm4gJGltZ19maWxlcGF0aDsKKwl9CisKKworCisKKworCisKKworCisJLyoqCisJICogQ29udmVydCB0aGUgZ2l2ZW4gY29udGVudCB0byBzb21ldGhpbmcgdGhhdCBpcyBzYWZlIHRvIGNvcHkgc3RyYWlnaHQgdG8gSFRNTAorCSAqLworCXB1YmxpYyBmdW5jdGlvbiBta1NhZmU0RGlzcGxheSgkc3RyKQorCXsKKwkJLy8gb25seSBhbGxvdyBBU0NJSSB0byBwYXNzOgorCQkkc3RyID0gcHJlZ19yZXBsYWNlKCIvW14gLX5cdFxyXG5dLyIsICc/JywgJHN0cik7CisJCSRzdHIgPSBzdHJfcmVwbGFjZSgnJTNDJywgJz8nLCAkc3RyKTsgICAgICAgICAgICAgLy8gaW4gY2FzZSBzb21lb25lIHdhbnQncyB0byBnZXQgcmVhbGx5IGZhbmN5OiBudWtlIHRoZSBVUkxlbmNvZGVkICc8JworCisJCS8vIGFueXRoaW5nIHRoYXQncyBtb3JlIGNvbXBsZXggdGhhbiBhIHNpbXBsZSA8VEFHPiBpcyBudWtlZDoKKwkJJHN0ciA9IHByZWdfcmVwbGFjZSgnLzwoW1wvXT9zY3JpcHRccypbXC9dPyk+LycsICc/JywgJHN0cik7ICAgICAgICAgICAgICAgLy8gYnV0IGZpcnN0IG1ha2Ugc3VyZSAnPHNjcmlwdD4nIGRvZXNuJ3QgbWFrZSBpdCB0aHJvdWdoIHRoZSBuZXh0IHJlZ2V4IQorCQkkc3RyID0gcHJlZ19yZXBsYWNlKCcvPChbXC9dP1thLXpBLVpdK1xzKltcL10/KT4vJywgIlx4MDRcXDFceDA1IiwgJHN0cik7CisJCSRzdHIgPSBzdHJpcF90YWdzKCRzdHIpOworCQkkc3RyID0gc3RydHIoJHN0ciwgIlx4MDQiLCAnPCcpOworCQkkc3RyID0gc3RydHIoJHN0ciwgIlx4MDUiLCAnPicpOworCQlyZXR1cm4gJHN0cjsKKwl9CisKKworCS8qKgorCSAqIE1ha2UgZGF0YSBzdWl0YWJsZSBmb3IgaW5jbHVzaW9uIGluIGEgSFRNTCB0YWcgYXR0cmlidXRlIHZhbHVlOiBzdHJpcCBhbGwgdGFncyBhbmQgZW5jb2RlIHF1b3RlcyEKKwkgKi8KKwlwdWJsaWMgZnVuY3Rpb24gbWtTYWZlNEhUTUxhdHRyKCRzdHIpCisJeworCQkkc3RyID0gc3RyX3JlcGxhY2UoJyUzQycsICc/JywgJHN0cik7ICAgICAgICAgICAgIC8vIGluIGNhc2Ugc29tZW9uZSB3YW50J3MgdG8gZ2V0IHJlYWxseSBmYW5jeTogbnVrZSB0aGUgVVJMZW5jb2RlZCAnPCcKKwkJJHN0ciA9IHN0cmlwX3RhZ3MoJHN0cik7CisJCXJldHVybiBodG1sc3BlY2lhbGNoYXJzKCRzdHIsIEVOVF9RVU9URVMsICdVVEYtOCcpOworCX0KKworCS8qKgorCSAqIGluc3BpcmVkIGJ5IGh0dHA6Ly9ubDMucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udXRmOC1lbmNvZGUucGhwIzEwMjM4MjsgbWl4ICYgbWFzaCB0byBtYWtlIHN1cmUgdGhlIHJlc3VsdCBpcyBMRUdBTCBVVEYtOAorCSAqCisJICogSW50cm9kdWNlZCBhZnRlciB0aGUgSlNPTiBlbmNvZGVyIGtlcHQgc3BpdHRpbmcgb3V0ICdudWxsJyBpbnN0ZWFkIG9mIGEgc3RyaW5nIHZhbHVlIGZvciBhIGZldyBjaG9pY2UgRnJlbmNoIEpQRUdzIHdpdGggdmVyeSBub24tVVRGIEVYSUYgY29udGVudC4gOi0oCisJICovCisJcHVibGljIGZ1bmN0aW9uIG1rU2FmZVVURjgoJHN0cikKKwl7CisJCS8vIGtpbGwgTlVMIGJ5dGVzOiB0aGV5IGRvbid0IGJlbG9uZyBpbiBoZXJlIQorCQkkc3RyID0gc3RydHIoJHN0ciwgIlx4MDAiLCAnICcpOworCisJCWlmICghbWJfY2hlY2tfZW5jb2RpbmcoJHN0ciwgJ1VURi04JykgfHwgJHN0ciAhPT0gbWJfY29udmVydF9lbmNvZGluZyhtYl9jb252ZXJ0X2VuY29kaW5nKCRzdHIsICdVVEYtMzInLCAnVVRGLTgnKSwgJ1VURi04JywgJ1VURi0zMicpKQorCQl7CisJCQkkZW5jb2RpbmcgPSBtYl9kZXRlY3RfZW5jb2RpbmcoJHN0ciwgJ2F1dG8sIElTTy04ODU5LTEnLCB0cnVlKTsKKwkJCSRpbSA9IHN0cl9yZXBsYWNlKCc/JywgJyZxbWFyazsnLCAkc3RyKTsKKwkJCWlmICgkZW5jb2RpbmcgIT09IGZhbHNlKQorCQkJeworCQkJCSRkc3QgPSBtYl9jb252ZXJ0X2VuY29kaW5nKCRpbSwgJ1VURi04JywgJGVuY29kaW5nKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkkZHN0ID0gbWJfY29udmVydF9lbmNvZGluZygkaW0sICdVVEYtOCcpOworCQkJfQorCQkJLy8kZHN0ID0gdXRmOF9lbmNvZGUoJGltKTsKKwkJCS8vJGRzdCA9IGdldGlkM19saWI6Omljb252X2ZhbGxiYWNrKCdJU08tODg1OS0xJywgJ1VURi04JywgJGltKTsKKworCQkJaWYgKCFtYl9jaGVja19lbmNvZGluZygkZHN0LCAnVVRGLTgnKSB8fCAkZHN0ICE9PSBtYl9jb252ZXJ0X2VuY29kaW5nKG1iX2NvbnZlcnRfZW5jb2RpbmcoJGRzdCwgJ1VURi0zMicsICdVVEYtOCcpLCAnVVRGLTgnLCAnVVRGLTMyJykgfHwgc3RycG9zKCRkc3QsICc/JykgIT09IGZhbHNlKQorCQkJeworCQkJCS8vIG5vdCBVVEY4IHlldC4uLiB0cnkgdGhlbSBhbGwKKwkJCQkkZW5jcyA9IG1iX2xpc3RfZW5jb2RpbmdzKCk7CisJCQkJZm9yZWFjaCAoJGVuY3MgYXMgJGVuY29kaW5nKQorCQkJCXsKKwkJCQkJJGRzdCA9IG1iX2NvbnZlcnRfZW5jb2RpbmcoJGltLCAnVVRGLTgnLCAkZW5jb2RpbmcpOworCQkJCQlpZiAobWJfY2hlY2tfZW5jb2RpbmcoJGRzdCwgJ1VURi04JykgJiYgJGRzdCA9PT0gbWJfY29udmVydF9lbmNvZGluZyhtYl9jb252ZXJ0X2VuY29kaW5nKCRkc3QsICdVVEYtMzInLCAnVVRGLTgnKSwgJ1VURi04JywgJ1VURi0zMicpICYmIHN0cnBvcygkZHN0LCAnPycpID09PSBmYWxzZSkKKwkJCQkJeworCQkJCQkJcmV0dXJuIHN0cl9yZXBsYWNlKCcmcW1hcms7JywgJz8nLCAkZHN0KTsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8vIHdoZW4gd2UgZ2V0IGhlcmUsIGl0J3MgcHJldHR5IGhvcGVsZXNzLiBTdHJpcCBBTllUSElORyB0aGF0J3Mgbm9uLUFTQ0lJOgorCQkJCXJldHVybiBwcmVnX3JlcGxhY2UoIi9bXiAtflx0XHJcbl0vIiwgJz8nLCAkc3RyKTsKKwkJCX0KKworCQkJLy8gVVRGOCBjYW5ub3QgY29udGFpbiBsb3ctQVNDSUkgdmFsdWVzOyBhdCBsZWFzdCBXRSBkbyBub3QgYWxsb3cgdGhhdCEKKwkJCWlmIChwcmVnX21hdGNoKCIvW14gLVx4RkZcblxyXHRdLyIsICRkc3QpKQorCQkJeworCQkJCS8vIHdlaXJkIG91dHB1dCB0aGF0J3Mgbm90IGxlZ2libGUgYW55aG93LCBzbyBzdHJpcCBBTllUSElORyB0aGF0J3Mgbm9uLUFTQ0lJOgorCQkJCXJldHVybiBwcmVnX3JlcGxhY2UoIi9bXiAtflx0XHJcbl0vIiwgJz8nLCAkc3RyKTsKKwkJCX0KKwkJCXJldHVybiBzdHJfcmVwbGFjZSgnJnFtYXJrOycsICc/JywgJGRzdCk7CisJCX0KKwkJcmV0dXJuICRzdHI7CisJfQorCisKKworCS8qKgorCSAqIFNhZmUgcmVwbGFjZW1lbnQgb2YgZGlybmFtZSgpOyBkb2VzIG5vdCBjYXJlIHdoZXRoZXIgdGhlIGlucHV0IGhhcyBhIHRyYWlsaW5nIHNsYXNoIG9yIG5vdC4KKwkgKgorCSAqIFJldHVybiBGQUxTRSB3aGVuIHRoZSBwYXRoIGlzIGF0dGVtcHRpbmcgdG8gZ2V0IHRoZSBwYXJlbnQgb2YgJy8nCisJICovCisJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQYXJlbnREaXIoJHBhdGgpCisJeworCQkvKgorCQkgKiBvbiBXaW5kb3dzLCB5b3UgZ2V0OgorCQkgKgorCQkgKiBkaXJuYW1lKCIvIikgPSAiXCIKKwkJICogZGlybmFtZSgieS8iKSA9ICIuIgorCQkgKiBkaXJuYW1lKCIveCIpID0gIlwiCisJCSAqCisJCSAqIHNvIHdlJ2QgcmF0aGVyIG5vdCB1c2UgZGlybmFtZSgpICAgOi0oCisJCSAqLworCQlpZiAoIWlzX3N0cmluZygkcGF0aCkpCisJCQlyZXR1cm4gZmFsc2U7CisJCSRwYXRoID0gcnRyaW0oJHBhdGgsICcvJyk7CisJCS8vIGVtcHR5IGRpcmVjdG9yeSBvciBhIHBhdGggd2l0aCBvbmx5IDEgY2hhcmFjdGVyIGluIGl0IGNhbm5vdCBiZSBhIHBhcmVudCtjaGlsZDogdGhhdCB3b3VsZCBiZSAyIGF0IHRoZSB2ZXJ5IGxlYXN0IHdoZW4gaXQncyAnL2EnOiBwYXJlbnQgaXMgcm9vdCAnLycgdGhlbjoKKwkJaWYgKHN0cmxlbigkcGF0aCkgPD0gMSkKKwkJCXJldHVybiBmYWxzZTsKKworCQkkcDIgPSBzdHJycG9zKCRwYXRoLCAnLycgLyogLCAtMSAqLyApOyAgLy8gLTEgYXMgZXh0cmEgb2Zmc2V0IGlzIG5vdCBnb29kIGVub3VnaD8gTm9wZS4gQXQgbGVhc3Qgbm90IGZvciBteSBXaW4zMiBQSFAgNS4zLjEuIFllYWgsIHNvdW5kcyBsaWtlIGEgUEhQIGJ1ZyB0byBtZS4gU28gd2UgcnRyaW0oKSBub3cuLi4KKwkJaWYgKCRwMiA9PT0gZmFsc2UpCisJCXsKKwkJCXJldHVybiBmYWxzZTsgLy8gdGFtcGVyaW5nIQorCQl9CisJCSRwcmV2ID0gc3Vic3RyKCRwYXRoLCAwLCAkcDIgKyAxKTsKKwkJcmV0dXJuICRwcmV2OworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgVVJJIGFic29sdXRlIHBhdGggdG8gdGhlIHNjcmlwdCBwb2ludGVkIGF0IGJ5IHRoZSBjdXJyZW50IFVSSSByZXF1ZXN0LgorCSAqIEZvciBleGFtcGxlLCBpZiB0aGUgcmVxdWVzdCB3YXMgJ2h0dHA6Ly9zaXRlLm9yZy9kaXIxL2RpcjIvc2NyaXB0LnBocCcsIHRoZW4gdGhpcyBtZXRob2Qgd2lsbAorCSAqIHJldHVybiAnL2RpcjEvZGlyMi9zY3JpcHQucGhwJy4KKwkgKgorCSAqIEJ5IGRlZmF1bHQsIHRoaXMgaXMgZXF1aXZhbGVudCB0byAkX1NFUlZFUlsnU0NSSVBUX05BTUUnXS4KKwkgKgorCSAqIFRoaXMgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzcGVjaWZ5aW5nIHRoZSBvcHRpb25zWydSZXF1ZXN0U2NyaXB0VVJJJ10gd2hlbiBpbnZva2luZyB0aGUgY29uc3RydWN0b3IuCisJICovCisJcHVibGljIC8qIHN0YXRpYyAqLyBmdW5jdGlvbiBnZXRSZXF1ZXN0U2NyaXB0VVJJKCkKKwl7CisJCWlmICghZW1wdHkoJHRoaXMtPm9wdGlvbnNbJ1JlcXVlc3RTY3JpcHRVUkknXSkpCisJCXsKKwkJCXJldHVybiAkdGhpcy0+b3B0aW9uc1snUmVxdWVzdFNjcmlwdFVSSSddOworCQl9CisJCQorCQkvLyBzZWUgYWxzbzogaHR0cDovL3BocC5hYm91dC5jb20vb2QvbGVhcm5waHAvcXQvX1NFUlZFUl9QSFAuaHRtCisJCSRwYXRoID0gc3RydHIoJF9TRVJWRVJbJ1NDUklQVF9OQU1FJ10sICdcXCcsICcvJyk7CisKKwkJcmV0dXJuICRwYXRoOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgVVJJIGFic29sdXRlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBwb2ludGVkIGF0IGJ5IHRoZSBjdXJyZW50IFVSSSByZXF1ZXN0LgorCSAqIEZvciBleGFtcGxlLCBpZiB0aGUgcmVxdWVzdCB3YXMgJ2h0dHA6Ly9zaXRlLm9yZy9kaXIxL2RpcjIvc2NyaXB0JywgdGhlbiB0aGlzIG1ldGhvZCB3aWxsCisJICogcmV0dXJuICcvZGlyMS9kaXIyLycuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhlIHBhdGggaXMgcmV0dXJuZWQgV0lUSCBhIHRyYWlsaW5nIHNsYXNoICcvJy4KKwkgKi8KKwlwdWJsaWMgLyogc3RhdGljICovIGZ1bmN0aW9uIGdldFJlcXVlc3RQYXRoKCkKKwl7CisJCSRwYXRoID0gc2VsZjo6Z2V0UGFyZW50RGlyKCR0aGlzLT5nZXRSZXF1ZXN0U2NyaXB0VVJJKCkpOworCQkkcGF0aCA9IHNlbGY6OmVuZm9yY2VUcmFpbGluZ1NsYXNoKCRwYXRoKTsKKworCQlyZXR1cm4gJHBhdGg7CisJfQorCisJLyoqCisJICogTm9ybWFsaXplIGFuIGFic29sdXRlIHBhdGggYnkgY29udmVydGluZyBhbGwgc2xhc2hlcyAnLycgYW5kL29yIGJhY2tzbGFzaGVzICdcJyBhbmQgYW55IG1peCB0aGVyZW9mIGluIHRoZQorCSAqIHNwZWNpZmllZCBwYXRoIHRvIFVOSVgvTUFDL1dpbiBjb21wYXRpYmxlIHNpbmdsZSBmb3J3YXJkIHNsYXNoZXMgJy8nLgorCSAqCisJICogQWxzbyByb2xsIHVwIGFueSAuLyBhbmQgLi4vIGRpcmVjdG9yeSBlbGVtZW50cyBpbiB0aGVyZS4KKwkgKgorCSAqIFRocm93IGFuIGV4Y2VwdGlvbiB3aGVuIHRoZSBvcGVyYXRpb24gZmFpbGVkIHRvIHByb2R1Y2UgYSBsZWdhbCBwYXRoLgorCSAqLworCXB1YmxpYyAvKiBzdGF0aWMgKi8gZnVuY3Rpb24gbm9ybWFsaXplKCRwYXRoKQorCXsKKwkJJHBhdGggPSBwcmVnX3JlcGxhY2UoJy8oXFxcfFwvKSsvJywgJy8nLCAkcGF0aCk7CisKKwkJLyoKKwkJICogZm9sZCAnLi4vJyBkaXJlY3RvcnkgcGFydHMgdG8gcHJldmVudCBtYWxpY2lvdXMgcGF0aHMgc3VjaCBhcyAnYS8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvJworCQkgKiBmcm9tIHN1Y2NlZWRpbmcKKwkJICoKKwkJICogdG8gcHJldmVudCBzY3Jld3VwcyBpbiB0aGUgZm9sZGluZyBjb2RlLCB3ZSBGSVJTVCBjbGVhbiBvdXQgdGhlICcuLycgZGlyZWN0b3JpZXMsIHRvIHByZXZlbnQKKwkJICogJ2EvLi8uLi8uLy4uLy4vLi4vLi8uLi8uLy4uLy4vLi4vLi8uLi8uLy4uLy4vLi4vZXRjLycgZnJvbSBzdWNjZWVkaW5nOgorCQkgKi8KKwkJJHBhdGggPSBwcmVnX3JlcGxhY2UoJyMvKFwuLykrIycsICcvJywgJHBhdGgpOworCQkvLyBzcGVjaWFsIGZpeDogbm93IHN0cmlwIHRyYWlsaW5nICcvLicgc2VjdGlvbjsgTVVTVCByZXBsYWNlIGJ5ICcvJyAodHJhaWxpbmcpIG9yIHBhdGggd29uJ3QgYmUgYWNjZXB0ZWQgYXMgbGVnYWwgd2hlbiB0aGlzIGlzIHRoZSAnLicgcmVxdWVzdGVkIGZvciByb290ICcvJworCQkkcGF0aCA9IHByZWdfcmVwbGFjZSgnIy9cLiQjJywgJy8nLCAkcGF0aCk7CisKKwkJLy8gbm93IHRlbXBvcmFyaWx5IHN0cmlwIG9mZiB0aGUgbGVhZGluZyBwYXJ0IHVwIHRvIHRoZSBjb2xvbiB0byBwcmV2ZW50IGVudHJpZXMgbGlrZSAnLi4vZDovZGlyJyB0byBzdWNjZWVkIHdoZW4gdGhlIHNpdGUgcm9vdCBpcyAnYzovJywgZm9yIGV4YW1wbGU6CisJCSRsZWFkID0gJyc7CisJCS8vIHRoZSBsZWFkaW5nIHBhcnQgbWF5IE5PVCBjb250YWluIGFueSBkaXJlY3Rvcnkgc2VwYXJhdG9ycywgYXMgaXQncyBmb3IgZHJpdmUgbGV0dGVycyBvbmx5LgorCQkvLyBTbyB3ZSBtdXN0IGNoZWNrIGluIG9yZGVyIHRvIHByZXZlbnQgbWFsaWNlIGxpa2UgLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2M6L2RpciBmcm9tIG1ha2luZyBpdCB0aHJvdWdoLgorCQlpZiAocHJlZ19tYXRjaCgnI14oW0EtWmEtel06KT8vKC4qKSQjJywgJHBhdGgsICRtYXRjaGVzKSkKKwkJeworCQkJJGxlYWQgPSAkbWF0Y2hlc1sxXTsKKwkJCSRwYXRoID0gJy8nIC4gJG1hdGNoZXNbMl07CisJCX0KKworCQl3aGlsZSAoKCRwb3MgPSBzdHJwb3MoJHBhdGgsICcvLi4nKSkgIT09IGZhbHNlKQorCQl7CisJCQkkcHJldiA9IHN1YnN0cigkcGF0aCwgMCwgJHBvcyk7CisJCQkvKgorCQkJICogb24gV2luZG93cywgeW91IGdldDoKKwkJCSAqCisJCQkgKiBkaXJuYW1lKCIvIikgPSAiXCIKKwkJCSAqIGRpcm5hbWUoInkvIikgPSAiLiIKKwkJCSAqIGRpcm5hbWUoIi94IikgPSAiXCIKKwkJCSAqCisJCQkgKiBzbyB3ZSdkIHJhdGhlciBub3QgdXNlIGRpcm5hbWUoKSAgIDotKAorCQkJICovCisJCQkkcDIgPSBzdHJycG9zKCRwcmV2LCAnLycpOworCQkJaWYgKCRwMiA9PT0gZmFsc2UpCisJCQl7CisJCQkJdGhyb3cgbmV3IEZpbGVNYW5hZ2VyRXhjZXB0aW9uKCdwYXRoX3RhbXBlcmluZzonIC4gJHBhdGgpOworCQkJfQorCQkJJHByZXYgPSBzdWJzdHIoJHByZXYsIDAsICRwMik7CisJCQkkbmV4dCA9IHN1YnN0cigkcGF0aCwgJHBvcyArIDMpOworCQkJaWYgKCRuZXh0ICYmICRuZXh0WzBdICE9PSAnLycpCisJCQl7CisJCQkJdGhyb3cgbmV3IEZpbGVNYW5hZ2VyRXhjZXB0aW9uKCdwYXRoX3RhbXBlcmluZzonIC4gJHBhdGgpOworCQkJfQorCQkJJHBhdGggPSAkcHJldiAuICRuZXh0OworCQl9CisKKwkJJHBhdGggPSAkbGVhZCAuICRwYXRoOworCisJCS8qCisJCSAqIGlmZiB0aGVyZSB3YXMgc3VjaCBhICcuLi8uLi8uLi9ldGMvJyBhdHRlbXB0LCB3ZSdsbCBrbm93IGJlY2F1c2UgdGhlcmUnZCBiZSBhbiBleGNlcHRpb24gdGhyb3duIGluIHRoZSBsb29wIGFib3ZlLgorCQkgKi8KKworCQlyZXR1cm4gJHBhdGg7CisJfQorCisKKwkvKioKKwkgKiBBY2NlcHQgYSBVUkkgcmVsYXRpdmUgb3IgYWJzb2x1dGUgcGF0aCBhbmQgdHJhbnNmb3JtIGl0IHRvIGFuIGFic29sdXRlIFVSSSBwYXRoLCBpLmUuIHJvb3RlZCBhZ2FpbnN0IERvY3VtZW50Um9vdC4KKwkgKgorCSAqIFJlbGF0aXZlIHBhdGhzIGFyZSBhc3N1bWVkIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHJlcXVlc3QgcGF0aCwgaS5lLiB0aGUgZ2V0UmVxdWVzdFBhdGgoKSBwcm9kdWNlZCBwYXRoLgorCSAqCisJICogTm90ZTogYXMgaXQgdXNlcyBub3JtYWxpemUoKSwgYW55IGlsbGVnYWwgcGF0aCB3aWxsIHRocm93IGFuIEZpbGVNYW5hZ2VyRXhjZXB0aW9uCisJICoKKwkgKiBSZXR1cm5zIGEgZnVsbHkgbm9ybWFsaXplZCBVUkkgYWJzb2x1dGUgcGF0aC4KKwkgKi8KKwlwdWJsaWMgZnVuY3Rpb24gcmVsMmFic191cmxfcGF0aCgkcGF0aCkKKwl7CisJCSRwYXRoID0gc3RydHIoJHBhdGgsICdcXCcsICcvJyk7CisJCWlmICghRmlsZU1hbmFnZXJVdGlsaXR5OjpzdGFydHNXaXRoKCRwYXRoLCAnLycpKQorCQl7CisJCQkkYmFzZWQgPSAkdGhpcy0+Z2V0UmVxdWVzdFBhdGgoKTsKKwkJCSRwYXRoID0gJGJhc2VkIC4gJHBhdGg7CisJCX0KKwkJcmV0dXJuICR0aGlzLT5ub3JtYWxpemUoJHBhdGgpOworCX0KKworCS8qKgorCSAqIEFjY2VwdCBhbiBhYnNvbHV0ZSBVUkkgcGF0aCwgaS5lLiByb290ZWQgYWdhaW5zdCBEb2N1bWVudFJvb3QsIGFuZCB0cmFuc2Zvcm0gaXQgdG8gYSBMRUdBTCBVUkkgYWJzb2x1dGUgcGF0aCwgaS5lLiByb290ZWQgYWdhaW5zdCBvcHRpb25zWydkaXJlY3RvcnknXS4KKwkgKgorCSAqIFJlbGF0aXZlIHBhdGhzIGFyZSBhc3N1bWVkIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHJlcXVlc3QgcGF0aCwgaS5lLiB0aGUgZ2V0UmVxdWVzdFBhdGgoKSBwcm9kdWNlZCBwYXRoLgorCSAqCisJICogTm90ZTogYXMgaXQgdXNlcyBub3JtYWxpemUoKSwgYW55IGlsbGVnYWwgcGF0aCB3aWxsIHRocm93IGEgRmlsZU1hbmFnZXJFeGNlcHRpb24KKwkgKgorCSAqIFJldHVybnMgYSBmdWxseSBub3JtYWxpemVkIExFR0FMIFVSSSBwYXRoLgorCSAqCisJICogVGhyb3dzIGEgRmlsZU1hbmFnZXJFeGNlcHRpb24gd2hlbiB0aGUgZ2l2ZW4gcGF0aCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgTEVHQUwgVVJMLCBpLmUuIHdoZW4gaXQgcmVzaWRlcyBvdXRzaWRlIHRoZSBvcHRpb25zWydkaXJlY3RvcnknXSBzdWJ0cmVlLgorCSAqLworCXB1YmxpYyBmdW5jdGlvbiBhYnMybGVnYWxfdXJsX3BhdGgoJHBhdGgpCisJeworCQkkcm9vdCA9ICR0aGlzLT5vcHRpb25zWydkaXJlY3RvcnknXTsKKworCQkkcGF0aCA9ICR0aGlzLT5yZWwyYWJzX3VybF9wYXRoKCRwYXRoKTsKKworCQkvLyBidXQgd2UgTVVTVCBtYWtlIHN1cmUgdGhlIHBhdGggaXMgc3RpbGwgYSBMRUdBTCBVUkksIGkuZS4gc2l0dGluZyBpbnNpZGUgb3B0aW9uc1snZGlyZWN0b3J5J106CisJCWlmIChzdHJsZW4oJHBhdGgpIDwgc3RybGVuKCRyb290KSkKKwkJCSRwYXRoID0gc2VsZjo6ZW5mb3JjZVRyYWlsaW5nU2xhc2goJHBhdGgpOworCisJCWlmICghRmlsZU1hbmFnZXJVdGlsaXR5OjpzdGFydHNXaXRoKCRwYXRoLCAkcm9vdCkpCisJCXsKKwkJCXRocm93IG5ldyBGaWxlTWFuYWdlckV4Y2VwdGlvbigncGF0aF90YW1wZXJpbmc6JyAuICRwYXRoKTsKKwkJfQorCisJCSRwYXRoID0gc3RyX3JlcGxhY2UoJHJvb3QsICcvJywgJHBhdGgpOworCisJCXJldHVybiAkcGF0aDsKKwl9CisKKwkvKioKKwkgKiBBY2NlcHQgYSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBMRUdBTCBVUkkgcGF0aCBhbmQgdHJhbnNmb3JtIGl0IHRvIGFuIGFic29sdXRlIFVSSSBwYXRoLCBpLmUuIHJvb3RlZCBhZ2FpbnN0IERvY3VtZW50Um9vdC4KKwkgKgorCSAqIFJlbGF0aXZlIHBhdGhzIGFyZSBhc3N1bWVkIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBvcHRpb25zWydkaXJlY3RvcnknXSBkaXJlY3RvcnkuIFRoaXMgbWFrZXMgdGhlbSBlcXVpdmFsZW50IHRvIGFic29sdXRlIHBhdGhzIHdpdGhpbgorCSAqIHRoZSBMRUdBTCBVUkkgdHJlZSBhbmQgdGhpcyBmYWN0IG1heSBzZWVtIG9kZC4gQWxhcywgdGhlIEZNIGZyb250ZW5kIHNlbmRzIHJlcXVlc3RzIHdpdGhvdXQgdGhlIGxlYWRpbmcgc2xhc2ggYW5kIGl0J3MgdGhvc2UgdGhhdAorCSAqIHdlIHdpc2ggdG8gcmVzb2x2ZSBoZXJlLCBhZnRlciBhbGwuIFNvLCB5ZXMsIHRoaXMgZGV2aWF0ZXMgZnJvbSB0aGUgZ2VuZXJhbCBwcmluY2lwbGUgYXBwbGllZCBlbGVzZXdoZXJlIGluIHRoZSBjb2RlLiA6LSgKKwkgKiBOZXZlcnRoZWxlc3MsIGl0J3MgZWFzaWVyIHRoYW4gc2Nhbm5pbmcgYW5kIHR3ZWFraW5nIHRoZSBGTSBmcm9udGVuZCBldmVyeXdoZXJlLgorCSAqCisJICogTm90ZTogYXMgaXQgdXNlcyBub3JtYWxpemUoKSwgYW55IGlsbGVnYWwgcGF0aCB3aWxsIHRocm93IGEgRmlsZU1hbmFnZXJFeGNlcHRpb24KKwkgKgorCSAqIFJldHVybnMgYSBmdWxseSBub3JtYWxpemVkIFVSSSBhYnNvbHV0ZSBwYXRoLgorCSAqLworCXB1YmxpYyBmdW5jdGlvbiBsZWdhbDJhYnNfdXJsX3BhdGgoJHBhdGgpCisJeworCQkkcGF0aCA9ICR0aGlzLT5yZWwyYWJzX2xlZ2FsX3VybF9wYXRoKCRwYXRoKTsKKwkJCisJCSRyb290ID0gJHRoaXMtPm9wdGlvbnNbJ2RpcmVjdG9yeSddOworCisJCS8vIGNsaXAgdGhlIHRyYWlsaW5nICcvJyBvZmYgdGhlICRyb290IHBhdGggYXMgJHBhdGggaGFzIGEgbGVhZGluZyAnLycgYWxyZWFkeToKKwkJJHBhdGggPSBzdWJzdHIoJHJvb3QsIDAsIC0xKSAuICRwYXRoOworCisJCXJldHVybiAkcGF0aDsKKwl9CisKKwkvKioKKwkgKiBBY2NlcHQgYSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBMRUdBTCBVUkkgcGF0aCBhbmQgdHJhbnNmb3JtIGl0IHRvIGFuIGFic29sdXRlIExFR0FMIFVSSSBwYXRoLCBpLmUuIHJvb3RlZCBhZ2FpbnN0IG9wdGlvbnNbJ2RpcmVjdG9yeSddLgorCSAqCisJICogUmVsYXRpdmUgcGF0aHMgYXJlIGFzc3VtZWQgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIG9wdGlvbnNbJ2RpcmVjdG9yeSddIGRpcmVjdG9yeS4gVGhpcyBtYWtlcyB0aGVtIGVxdWl2YWxlbnQgdG8gYWJzb2x1dGUgcGF0aHMgd2l0aGluCisJICogdGhlIExFR0FMIFVSSSB0cmVlIGFuZCB0aGlzIGZhY3QgbWF5IHNlZW0gb2RkLiBBbGFzLCB0aGUgRk0gZnJvbnRlbmQgc2VuZHMgcmVxdWVzdHMgd2l0aG91dCB0aGUgbGVhZGluZyBzbGFzaCBhbmQgaXQncyB0aG9zZSB0aGF0CisJICogd2Ugd2lzaCB0byByZXNvbHZlIGhlcmUsIGFmdGVyIGFsbC4gU28sIHllcywgdGhpcyBkZXZpYXRlcyBmcm9tIHRoZSBnZW5lcmFsIHByaW5jaXBsZSBhcHBsaWVkIGVsZXNld2hlcmUgaW4gdGhlIGNvZGUuIDotKAorCSAqIE5ldmVydGhlbGVzcywgaXQncyBlYXNpZXIgdGhhbiBzY2FubmluZyBhbmQgdHdlYWtpbmcgdGhlIEZNIGZyb250ZW5kIGV2ZXJ5d2hlcmUuCisJICoKKwkgKiBOb3RlOiBhcyBpdCB1c2VzIG5vcm1hbGl6ZSgpLCBhbnkgaWxsZWdhbCBwYXRoIHdpbGwgdGhyb3cgYW4gRmlsZU1hbmFnZXJFeGNlcHRpb24KKwkgKgorCSAqIFJldHVybnMgYSBmdWxseSBub3JtYWxpemVkIExFR0FMIFVSSSBhYnNvbHV0ZSBwYXRoLgorCSAqLworCXB1YmxpYyBmdW5jdGlvbiByZWwyYWJzX2xlZ2FsX3VybF9wYXRoKCRwYXRoKQorCXsKKwkJJHBhdGggPSBzdHJ0cigkcGF0aCwgJ1xcJywgJy8nKTsKKwkJaWYgKCFGaWxlTWFuYWdlclV0aWxpdHk6OnN0YXJ0c1dpdGgoJHBhdGgsICcvJykpCisJCXsKKwkJCSRwYXRoID0gJy8nIC4gJHBhdGg7CisJCX0KKworCQkkcGF0aCA9ICR0aGlzLT5ub3JtYWxpemUoJHBhdGgpOworCisJCXJldHVybiAkcGF0aDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIGZpbGVzeXN0ZW0gYWJzb2x1dGUgcGF0aCBmb3IgdGhlIHJlbGF0aXZlIG9yIGFic29sdXRlIFVSSSBwYXRoLgorCSAqCisJICogTm90ZTogYXMgaXQgdXNlcyBub3JtYWxpemUoKSwgYW55IGlsbGVnYWwgcGF0aCB3aWxsIHRocm93IGFuIEZpbGVNYW5hZ2VyRXhjZXB0aW9uCisJICoKKwkgKiBSZXR1cm5zIGEgZnVsbHkgbm9ybWFsaXplZCBmaWxlc3lzdGVtIGFic29sdXRlIHBhdGguCisJICovCisJcHVibGljIGZ1bmN0aW9uIHVybF9wYXRoMmZpbGVfcGF0aCgkdXJsX3BhdGgpCisJeworCQkkdXJsX3BhdGggPSAkdGhpcy0+cmVsMmFic191cmxfcGF0aCgkdXJsX3BhdGgpOworCisJCSRwYXRoID0gJHRoaXMtPm9wdGlvbnNbJ2RvY3VtZW50Um9vdFBhdGgnXSAuICR1cmxfcGF0aDsKKworCQlyZXR1cm4gJHBhdGg7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSBmaWxlc3lzdGVtIGFic29sdXRlIHBhdGggZm9yIHRoZSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBMRUdBTCBVUkkgcGF0aC4KKwkgKgorCSAqIE5vdGU6IGFzIGl0IHVzZXMgbm9ybWFsaXplKCksIGFueSBpbGxlZ2FsIHBhdGggd2lsbCB0aHJvdyBhbiBGaWxlTWFuYWdlckV4Y2VwdGlvbgorCSAqCisJICogUmV0dXJucyBhIGZ1bGx5IG5vcm1hbGl6ZWQgZmlsZXN5c3RlbSBhYnNvbHV0ZSBwYXRoLgorCSAqLworCXB1YmxpYyBmdW5jdGlvbiBsZWdhbF91cmxfcGF0aDJmaWxlX3BhdGgoJHVybF9wYXRoKQorCXsKKwkJJHBhdGggPSAkdGhpcy0+cmVsMmFic19sZWdhbF91cmxfcGF0aCgkdXJsX3BhdGgpOworCisJCSRwYXRoID0gc3Vic3RyKCR0aGlzLT5tYW5hZ2VkQmFzZURpciwgMCwgLTEpIC4gJHBhdGg7CisKKwkJcmV0dXJuICRwYXRoOworCX0KKworCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZW5mb3JjZVRyYWlsaW5nU2xhc2goJHN0cmluZykKKwl7CisJCXJldHVybiAoc3RycnBvcygkc3RyaW5nLCAnLycpID09PSBzdHJsZW4oJHN0cmluZykgLSAxID8gJHN0cmluZyA6ICRzdHJpbmcgLiAnLycpOworCX0KKworCisKKworCisJLyoqCisJICogUHJvZHVjZSBtaW5pbWl6ZWQgSFRNTCBvdXRwdXQ7IHVzZWQgdG8gY3V0IGRvbid0IG9uIHRoZSBjb250ZW50IGZlZAorCSAqIHRvIEpTT05fZW5jb2RlKCkgYW5kIG1ha2UgaXQgbW9yZSByZWFkYWJsZSBpbiByYXcgZGVidWcgdmlldy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbXByZXNzSFRNTCgkc3RyKQorCXsKKwkJLy8gYnJ1dGUgZm9yY2U6IHJlcGxhY2UgdGFicyBieSBzcGFjZXMgYW5kIHJlZHVjZSB3aGl0ZXNwYWNlIHNlcmllcyB0byBhIHNpbmdsZSBzcGFjZS4KKwkJLy8kc3RyID0gcHJlZ19yZXBsYWNlKCcvXHMrLycsICcgJywgJHN0cik7CisKKwkJcmV0dXJuICRzdHI7CisJfQorCisKKwlwcm90ZWN0ZWQgLyogc3RhdGljICovIGZ1bmN0aW9uIG1vZGlmeV9qc29uNGV4Y2VwdGlvbigmJGpzZXJyLCAkZW1zZywgJHRhcmdldF9pbmZvID0gbnVsbCkKKwl7CisJCWlmIChlbXB0eSgkZW1zZykpCisJCQlyZXR1cm47CisKKwkJLy8gb25seSBzZXQgdXAgdGhlIG5ldyBqc29uIGVycm9yIHJlcG9ydCBhcnJheSB3aGVuIHRoaXMgaXMgdGhlIGZpcnN0IGV4Y2VwdGlvbiB3ZSBnb3Q6CisJCWlmIChlbXB0eSgkanNlcnJbJ2Vycm9yJ10pKQorCQl7CisJCQkvLyBjaGVjayB0aGUgZXJyb3IgbWVzc2FnZSBhbmQgc2VlIGlmIGl0IGlzIGEgdHJhbnNsYXRpb24gY29kZSB3b3JkICh3aXRoIG9yIHdpdGhvdXQgcGFyYW1ldGVycykgb3IganVzdCBhIGdlbmVyaWMgZXJyb3IgcmVwb3J0IHN0cmluZworCQkJJGUgPSBleHBsb2RlKCc6JywgJGVtc2csIDIpOworCQkJaWYgKHByZWdfbWF0Y2goJy9bXkEtWmEtejAtOV8tXS8nLCAkZVswXSkpCisJCQl7CisJCQkJLy8gZ2VuZXJpYyBtZXNzYWdlLiBvdWNoLgorCQkJCSRqc2VyclsnZXJyb3InXSA9ICRlbXNnOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCSRleHRyYTEgPSAoIWVtcHR5KCRlWzFdKSA/ICR0aGlzLT5ta1NhZmU0RGlzcGxheSgkZVsxXSkgOiAnJyk7CisJCQkJJGV4dHJhMiA9ICghZW1wdHkoJHRhcmdldF9pbmZvKSA/ICcgKCcgLiAkdGhpcy0+bWtTYWZlNERpc3BsYXkoJHRhcmdldF9pbmZvKSAuICcpJyA6ICcnKTsKKwkJCQkkanNlcnJbJ2Vycm9yJ10gPSAkZW1zZyA9ICcke2JhY2tlbmQuJyAuICRlWzBdIC4gJ30nOworCQkJCWlmICgkZVswXSAhPSAnZGlzYWJsZWQnKQorCQkJCXsKKwkJCQkJLy8gb25seSBhcHBlbmQgdGhlIGV4dHJhIGRhdGEgd2hlbiBpdCdzIE5PVCB0aGUgJ2Rpc2FibGVkIG9uIHRoaXMgc2VydmVyJyBtZXNzYWdlIQorCQkJCQkkanNlcnJbJ2Vycm9yJ10gLj0gICRleHRyYTEgLiAkZXh0cmEyOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkkanNlcnJbJ2Vycm9yJ10gLj0gICcgKCR7JyAuICRleHRyYTEgLiAnfSknOworCQkJCX0KKwkJCX0KKwkJCSRqc2Vyclsnc3RhdHVzJ10gPSAwOworCQl9CisJfQorCisKKworCisKKworCXB1YmxpYyBmdW5jdGlvbiBnZXRBbGxvd2VkTWltZVR5cGVzKCRtaW1lX2ZpbHRlciA9IG51bGwpCisJeworCQkkbWltZVR5cGVzID0gYXJyYXkoKTsKKworCQlpZiAoZW1wdHkoJG1pbWVfZmlsdGVyKSkgcmV0dXJuIG51bGw7CisJCSRtc2V0ID0gZXhwbG9kZSgnLCcsICRtaW1lX2ZpbHRlcik7CisJCWZvcigkaSA9IGNvdW50KCRtc2V0KSAtIDE7ICRpID49IDA7ICRpLS0pCisJCXsKKwkJCWlmIChzdHJwb3MoJG1zZXRbJGldLCAnLycpID09PSBmYWxzZSkKKwkJCQkkbXNldFskaV0gLj0gJy8nOworCQl9CisKKwkJJG1pbWVzID0gJHRoaXMtPmdldE1pbWVUeXBlRGVmaW5pdGlvbnMoKTsKKworCQlmb3JlYWNoICgkbWltZXMgYXMgJGsgPT4gJG1pbWUpCisJCXsKKwkJCWlmICgkayA9PT0gJy4nKQorCQkJCWNvbnRpbnVlOworCisJCQlmb3JlYWNoKCRtc2V0IGFzICRmaWx0ZXIpCisJCQl7CisJCQkJaWYgKEZpbGVNYW5hZ2VyVXRpbGl0eTo6c3RhcnRzV2l0aCgkbWltZSwgJGZpbHRlcikpCisJCQkJCSRtaW1lVHlwZXNbXSA9ICRtaW1lOworCQkJfQorCQl9CisKKwkJcmV0dXJuICRtaW1lVHlwZXM7CisJfQorCisJcHVibGljIGZ1bmN0aW9uIGdldE1pbWVUeXBlRGVmaW5pdGlvbnMoKQorCXsKKwkJc3RhdGljICRtaW1lczsKKworCQkkcHJlZl9leHQgPSBhcnJheSgpOworCisJCWlmICghJG1pbWVzKQorCQl7CisJCQkkbWltZXMgPSBwYXJzZV9pbmlfZmlsZSgkdGhpcy0+b3B0aW9uc1snbWltZVR5cGVzUGF0aCddKTsKKworCQkJaWYgKGlzX2FycmF5KCRtaW1lcykpCisJCQl7CisJCQkJZm9yZWFjaCgkbWltZXMgYXMgJGsgPT4gJHYpCisJCQkJeworCQkJCQkkbSA9IGV4cGxvZGUoJywnLCAoc3RyaW5nKSR2KTsKKwkJCQkJJG1pbWVzWyRrXSA9ICRtWzBdOworCQkJCQkkcCA9IG51bGw7CisJCQkJCWlmICghZW1wdHkoJG1bMV0pKQorCQkJCQl7CisJCQkJCQkkcCA9IHRyaW0oJG1bMV0pOworCQkJCQl9CisJCQkJCS8vIGlzIHRoaXMgdGhlIHByZWZlcnJlZCBleHRlbnNpb24gZm9yIHRoaXMgbWltZSB0eXBlPyBPciBpcyB0aGlzIHRoZSBmaXJzdCBrbm93biBleHRlbnNpb24gZm9yIHRoZSBnaXZlbiBtaW1lIHR5cGU/CisJCQkJCWlmICgkcCA9PT0gJyonIHx8ICFhcnJheV9rZXlfZXhpc3RzKCRtWzBdLCAkcHJlZl9leHQpKQorCQkJCQl7CisJCQkJCQkkcHJlZl9leHRbJG1bMF1dID0gJGs7CisJCQkJCX0KKwkJCQl9CisKKwkJCQkvLyBzdGljayB0aGUgbWltZS10by1leHRlbnNpb24gbWFwIGludG8gYW4gJ2lsbGVnYWwnIGluZGV4OgorCQkJCSRtaW1lc1snLiddID0gJHByZWZfZXh0OworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCSRtaW1lcyA9IGZhbHNlOworCQkJfQorCQl9CisKKwkJaWYgKCFpc19hcnJheSgkbWltZXMpKSAkbWltZXMgPSBhcnJheSgpOyAvLyBwcmV2ZW50IGZhdWx0eSBtaW1ldHlwZSBpbmkgZmlsZSBmcm9tIGIwcmtpbmcgb3RoZXIgY29kZSBzZWN0aW9ucy4KKworCQlyZXR1cm4gJG1pbWVzOworCX0KKworCXB1YmxpYyBmdW5jdGlvbiBJc0FsbG93ZWRNaW1lVHlwZSgkbWltZV90eXBlLCAkbWltZV9maWx0ZXJzKQorCXsKKwkJaWYgKGVtcHR5KCRtaW1lX3R5cGUpKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoIWlzX2FycmF5KCRtaW1lX2ZpbHRlcnMpKQorCQkJcmV0dXJuIHRydWU7CisKKwkJcmV0dXJuIGluX2FycmF5KCRtaW1lX3R5cGUsICRtaW1lX2ZpbHRlcnMpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgKGlmIHBvc3NpYmxlKSB0aGUgbWltZXR5cGUgb2YgdGhlIGdpdmVuIGZpbGUKKwkgKgorCSAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgICAgICAgIHBoeXNpY2FsIGZpbGVzeXN0ZW0gcGF0aCBvZiB0aGUgZmlsZSBmb3Igd2hpY2ggd2Ugd2lzaCB0byBrbm93IHRoZSBtaW1lIHR5cGUuCisJICovCisJcHVibGljIGZ1bmN0aW9uIGdldE1pbWVGcm9tRXh0KCRmaWxlKQorCXsKKwkJJGV4dCA9IHN0cnRvbG93ZXIocGF0aGluZm8oJGZpbGUsIFBBVEhJTkZPX0VYVEVOU0lPTikpOworCisJCSRtaW1lID0gbnVsbDsKKwkJaWYgKE1URk1fVVNFX0ZJTkZPX09QRU4pCisJCXsKKwkJCSRpbmkgPSBlcnJvcl9yZXBvcnRpbmcoMCk7CisJCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdmaW5mb19vcGVuJykgJiYgJGYgPSBmaW5mb19vcGVuKEZJTEVJTkZPX01JTUUsIGdldGVudignTUFHSUMnKSkpCisJCQl7CisJCQkJJG1pbWUgPSBmaW5mb19maWxlKCRmLCAkZmlsZSk7CisJCQkJLy8gc29tZSBzeXN0ZW1zIGFsc28gcHJvZHVjZSB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIHdpdGggdGhlIG1pbWUgdHlwZTsgc3RyaXAgaWYgb2ZmOgorCQkJCSRtYSA9IGV4cGxvZGUoJzsnLCAkbWltZSk7CisJCQkJJG1pbWUgPSAkbWFbMF07CisJCQkJZmluZm9fY2xvc2UoJGYpOworCQkJfQorCQkJZXJyb3JfcmVwb3J0aW5nKCRpbmkpOworCQl9CisKKwkJaWYgKChlbXB0eSgkbWltZSkgfHwgJG1pbWUgPT09ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKSAmJiBzdHJsZW4oJGV4dCkgPiAwKQorCQl7CisJCQkkZXh0Mm1pbWV0eXBlX2FyciA9ICR0aGlzLT5nZXRNaW1lVHlwZURlZmluaXRpb25zKCk7CisKKwkJCWlmIChhcnJheV9rZXlfZXhpc3RzKCRleHQsICRleHQybWltZXR5cGVfYXJyKSkKKwkJCQkkbWltZSA9ICRleHQybWltZXR5cGVfYXJyWyRleHRdOworCQl9CisKKwkJaWYgKGVtcHR5KCRtaW1lKSkKKwkJeworCQkJJG1pbWUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzsKKwkJfQorCisJCXJldHVybiAkbWltZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIGZpcnN0IGtub3duIGV4dGVuc2lvbiBmb3IgdGhlIGdpdmVuIG1pbWUgdHlwZS4KKwkgKgorCSAqIFJldHVybiBOVUxMIHdoZW4gbm8ga25vd24gZXh0ZW5zaW9uIGlzIGZvdW5kLgorCSAqLworCXB1YmxpYyBmdW5jdGlvbiBnZXRFeHRGcm9tTWltZSgkbWltZSkKKwl7CisJCSRleHQybWltZXR5cGVfYXJyID0gJHRoaXMtPmdldE1pbWVUeXBlRGVmaW5pdGlvbnMoKTsKKwkJJG1pbWUyZXh0X2FyciA9ICRleHQybWltZXR5cGVfYXJyWycuJ107CisKKwkJaWYgKGFycmF5X2tleV9leGlzdHMoJG1pbWUsICRtaW1lMmV4dF9hcnIpKQorCQkJcmV0dXJuICRtaW1lMmV4dF9hcnJbJG1pbWVdOworCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgKGlmIHBvc3NpYmxlKSBhbGwgaW5mbyBhYm91dCB0aGUgZ2l2ZW4gZmlsZSwgbWltZXR5cGUsIGRpbWVuc2lvbnMsIHRoZSB3b3JrcworCSAqCisJICogQHBhcmFtIHN0cmluZyAkZmlsZSAgICAgICBwaHlzaWNhbCBmaWxlc3lzdGVtIHBhdGggdG8gdGhlIGZpbGUgd2Ugd2FudCB0byBrbm93IGFsbCBhYm91dAorCSAqCisJICogQHBhcmFtIHN0cmluZyAkbGVnYWxfdXJsCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAnbGVnYWwgVVJMIHBhdGgnIHRvIHRoZSBmaWxlOyB1c2VkIGFzIHRoZSBrZXkgdG8gdGhlIGNvcnJlc3BvbmRpbmcKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlIHN0b3JhZ2UgcmVjb3JkOiBnZXRGaWxlSW5mbygpIHdpbGwgY2FjaGUgdGhlCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWQgaW5mbyBhbG9uZ3NpZGUgdGhlIHRodW1ibmFpbHMgaW4gYSBjYWNoZSBmaWxlIHdpdGgKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICcubmZvJyBleHRlbnNpb24uCisJICoKKwkgKiBAcmV0dXJuIHRoZSBpbmZvIGFycmF5IGFzIHByb2R1Y2VkIGJ5IGdldElEMzo6YW5hbHl6ZSgpLCBhcyBwYXJ0IG9mIGEgTVRGTUNhY2hlRW50cnkgcmVmZXJlbmNlCisJICovCisJcHVibGljIGZ1bmN0aW9uIGdldEZpbGVJbmZvKCRmaWxlLCAkbGVnYWxfdXJsLCAkZm9yY2VfcmVjaGVjayA9IGZhbHNlKQorCXsKKwkJLy8gd2hlbiBoYXNoIGV4aXN0cyBpbiBjYWNoZSwgcmV0dXJuIHRoYXQgb25lOgorCQkkbWV0YSA9ICYkdGhpcy0+Z2V0aWQzX2NhY2hlLT5waWNrKCRsZWdhbF91cmwsICR0aGlzKTsKKwkJYXNzZXJ0KCRtZXRhICE9IG51bGwpOworCQkkbWltZV9jaGVjayA9ICRtZXRhLT5mZXRjaCgnbWltZV90eXBlJyk7CisJCWlmIChlbXB0eSgkbWltZV9jaGVjaykgfHwgJGZvcmNlX3JlY2hlY2spCisJCXsKKwkJCS8vIGNhY2hlIGVudHJ5IGlzIG5vdCB5ZXQgZmlsbGVkOiB3ZSdsbCBoYXZlIHRvIGRvIHRoZSBoYXJkIHdvcmsgbm93IGFuZCBzdG9yZSBpdC4KKwkJCWlmIChpc19kaXIoJGZpbGUpKQorCQkJeworCQkJCSRtZXRhLT5zdG9yZSgnbWltZV90eXBlJywgJ3RleHQvZGlyZWN0b3J5JywgZmFsc2UpOworCQkJCSRtZXRhLT5zdG9yZSgnYW5hbHlzaXMnLCBudWxsLCBmYWxzZSk7CisJCQl9CisJCQllbHNlCisJCQl7CisgICAgICAgICRydiA9ICR0aGlzLT5hbmFseXplX2ZpbGUoJGZpbGUsICRsZWdhbF91cmwpOworICAgICAgICAkbWV0YS0+c3RvcmUoJ21pbWVfdHlwZScsICRydlsnbWltZV90eXBlJ10pOyAgICAgICAgCisJCQkJJG1ldGEtPnN0b3JlKCdhbmFseXNpcycsICRydik7CisJCQl9CisJCX0KKworCQlyZXR1cm4gJG1ldGE7CisJfQorCisKKworCisKKwlwcm90ZWN0ZWQgLyogc3RhdGljICovIGZ1bmN0aW9uIGdldEdFVHBhcmFtKCRuYW1lLCAkZGVmYXVsdF92YWx1ZSA9IG51bGwpCisJeworCQlpZiAoaXNfYXJyYXkoJF9HRVQpICYmICFlbXB0eSgkX0dFVFskbmFtZV0pKQorCQl7CisJCQkkcnYgPSAkX0dFVFskbmFtZV07CisKKwkJCS8vIHNlZSBpZiB0aGVyZSdzIGFueSBzdHVmZiBpbiB0aGVyZSB3aGljaCB3ZSBkb24ndCBsaWtlCisJCQlpZiAoIXByZWdfbWF0Y2goJy9bXkEtWmEtejAtOVwvfiFAIyQlXiYqKClfK3t9W11cJyIsLj9dLycsICRydikpCisJCQl7CisJCQkJcmV0dXJuICRydjsKKwkJCX0KKwkJfQorCQlyZXR1cm4gJGRlZmF1bHRfdmFsdWU7CisJfQorCisJcHJvdGVjdGVkIC8qIHN0YXRpYyAqLyBmdW5jdGlvbiBnZXRQT1NUcGFyYW0oJG5hbWUsICRkZWZhdWx0X3ZhbHVlID0gbnVsbCkKKwl7CisJCWlmIChpc19hcnJheSgkX1BPU1QpICYmICFlbXB0eSgkX1BPU1RbJG5hbWVdKSkKKwkJeworCQkJJHJ2ID0gJF9QT1NUWyRuYW1lXTsKKworCQkJLy8gc2VlIGlmIHRoZXJlJ3MgYW55IHN0dWZmIGluIHRoZXJlIHdoaWNoIHdlIGRvbid0IGxpa2UKKwkJCWlmICghcHJlZ19tYXRjaCgnL1teQS1aYS16MC05XC9+IUAjJCVeJiooKV8re31bXVwnIiwuP10vJywgJHJ2KSkKKwkJCXsKKwkJCQlyZXR1cm4gJHJ2OworCQkJfQorCQl9CisJCXJldHVybiAkZGVmYXVsdF92YWx1ZTsKKwl9Cit9CisKKworCisKKworCitjbGFzcyBGaWxlTWFuYWdlckV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7fQorCisKKworCisKKy8qIFN0cmlwcGVkLWRvd24gdmVyc2lvbiBvZiBzb21lIFN0eXggUEhQIEZyYW1ld29yay1GdW5jdGlvbmFsaXR5IGJ1bmRsZWQgd2l0aCB0aGlzIEZpbGVCcm93c2VyLiBTdHl4IGlzIGxvY2F0ZWQgYXQ6IGh0dHA6Ly9zdHl4Lm9nNS5uZXQgKi8KK2NsYXNzIEZpbGVNYW5hZ2VyVXRpbGl0eQoreworCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZW5kc1dpdGgoJHN0cmluZywgJGxvb2spCisJeworCQlyZXR1cm4gc3RycnBvcygkc3RyaW5nLCAkbG9vaykgPT09IHN0cmxlbigkc3RyaW5nKSAtIHN0cmxlbigkbG9vayk7CisJfQorCisJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdGFydHNXaXRoKCRzdHJpbmcsICRsb29rKQorCXsKKwkJcmV0dXJuIHN0cnBvcygkc3RyaW5nLCAkbG9vaykgPT09IDA7CisJfQorCisKKwkvKioKKwkgKiBDbGVhbnVwIGFuZCBjaGVjayBhZ2FpbnN0ICdhbHJlYWR5IGtub3duIG5hbWVzJyBpbiBvcHRpb25hbCAkb3B0aW9ucyBhcnJheS4KKwkgKiBSZXR1cm4gYSB1bmlxdWlmaWVkIG5hbWUgZXF1YWwgdG8gb3IgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCAoJGRhdGEpLgorCSAqCisJICogRmlyc3QgY2xlYW4gdXAgdGhlIGdpdmVuIG5hbWUgKCRkYXRhKTogYnkgZGVmYXVsdCBhbGwgY2hhcmFjdGVycyBub3QgcGFydCBvZiB0aGUKKwkgKiBzZXQgW0EtWmEtejAtOV9dIGFyZSBjb252ZXJ0ZWQgdG8gYW4gdW5kZXJzY29yZSAnXyc7IHNlcmllcyBvZiB0aGVzZSB1bmRlcnNjb3JlcworCSAqIGFyZSByZWR1Y2VkIHRvIGEgc2luZ2xlIG9uZSwgYW5kIGNoYXJhY3RlcnMgaW4gdGhlIHNldCBbXy4sJisgXSBhcmUgc3RyaXBwZWQgZnJvbQorCSAqIHRoZSBsZWFkIGFuZCB0YWlsIG9mIHRoZSBnaXZlbiBuYW1lLCBlLmcuICdfX25hbWUnIHdvdWxkIHRoZXJlZm9yIGJlIHJlZHVjZWQgdG8KKwkgKiAnbmFtZScuCisJICoKKwkgKiBOZXh0LCBjaGVjayB0aGUgbm93IGNsZWFuZWQtdXAgbmFtZSAkZGF0YSBhZ2FpbnN0IGFuIG9wdGlvbmFsIHNldCBvZiBuYW1lcyAoJG9wdGlvbnMgYXJyYXkpCisJICogYW5kIHJldHVybiB0aGUgbmFtZSBpdHNlbGYgd2hlbiBpdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgc2V0LAorCSAqIG90aGVyd2lzZSByZXR1cm4gYW4gYXVnbWVudGVkIG5hbWUgc3VjaCB0aGF0IGl0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBzZXQKKwkgKiB3aGlsZSBoYXZpbmcgYmVlbiBjb25zdHJ1Y3RlZCBhcyBuYW1lIHBsdXMgJ18nIHBsdXMgYW4gaW50ZWdlciBudW1iZXIsCisJICogc3RhcnRpbmcgYXQgMS4KKwkgKgorCSAqIEV4YW1wbGU6CisJICogSWYgdGhlIHNldCBpcyB7J2ZpbGUnLCAnZmlsZV8xJywgJ2ZpbGVfMyd9IHRoZW4gJGRhdGEgPSAnZmlsZScgd2lsbCByZXR1cm4KKwkgKiB0aGUgc3RyaW5nICdmaWxlXzInIGluc3RlYWQsIHdoaWxlICRkYXRhID0gJ2ZpbGVYJyB3aWxsIHJldHVybiB0aGF0IHNhbWUKKwkgKiB2YWx1ZTogJ2ZpbGVYJy4KKwkgKgorCSAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgICAgIHRoZSBuYW1lIHRvIGJlIGNsZWFuZWQgYW5kIGNoZWNrZWQvdW5pcXVpZmllZAorCSAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyAgIGFuIG9wdGlvbmFsIGFycmF5IG9mIHN0cmluZ3MgdG8gY2hlY2sgdGhlIGdpdmVuIG5hbWUgJGRhdGEgYWdhaW5zdAorCSAqIEBwYXJhbSBzdHJpbmcgJGV4dHJhX2FsbG93ZWRfY2hhcnMgICAgIG9wdGlvbmFsIHNldCBvZiBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgd2hpY2ggc2hvdWxkIHBhc3MKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmFsdGVyZWQgdGhyb3VnaCB0aGUgY2xlYW51cCBzdGFnZS4gYSBkYXNoICctJyBjYW4gYmUKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIGRlbm90ZSBhIGNoYXJhY3RlciByYW5nZSwgd2hpbGUgdGhlIGxpdGVyYWwKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXNoICctJyBpdHNlbGYsIHdoZW4gaW5jbHVkZWQsIHNob3VsZCBiZSBwb3NpdGlvbmVkCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgdGhlIHZlcnkgc3RhcnQgb3IgZW5kIG9mIHRoZSBzdHJpbmcuCisJICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgXSBtdXN0IE5PVCBuZWVkIHRvIGJlIGVzY2FwZWQ7IHdlIGRvIHRoaXMKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXJzZWx2ZXMuCisJICogQHBhcmFtIHN0cmluZyAkdHJpbV9jaGFycyAgICAgICAgICAgICAgb3B0aW9uYWwgc2V0IG9mIGFkZGl0aW9uYWwgY2hhcmFjdGVycyB3aGljaCBhcmUgdHJpbW1lZCBvZmYgdGhlCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgYW5kIGVuZCBvZiB0aGUgbmFtZSAoJGRhdGEpOyBub3RlIHRoYXQgZGUgZGFzaAorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctJyBpcyBhbHdheXMgdHJlYXRlZCBhcyBhIGxpdGVyYWwgZGFzaCBoZXJlOyBubworCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlIGZlYXR1cmUhCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2ljIHNldCBvZiBjaGFyYWN0ZXJzIHRyaW1tZWQgb2ZmIHRoZSBuYW1lIGlzCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy4gXTsgdGhpcyBzZXQgY2Fubm90IGJlIHJlZHVjZWQsIG9ubHkgZXh0ZW5kZWQuCisJICoKKwkgKiBAcmV0dXJuIGNsZWFuZWQtdXAgYW5kIHVuaXF1aWZpZWQgbmFtZSBkZXJpdmVkIGZyb20gKCRkYXRhKS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhZ2V0aXRsZSgkZGF0YSwgJG9wdGlvbnMgPSBudWxsLCAkZXh0cmFfYWxsb3dlZF9jaGFycyA9IG51bGwsICR0cmltX2NoYXJzID0gbnVsbCkKKwl7CisJCXN0YXRpYyAkcmVnZXg7CisJCWlmICghJHJlZ2V4KXsKKwkJCSRyZWdleCA9IGFycmF5KAorCQkJCWV4cGxvZGUoJyAnLCAnw4Ygw6YgxZIgxZMgw58gw5wgw7wgw5Ygw7Ygw4Qgw6Qgw4Agw4Egw4Igw4Mgw4Qgw4UgJiMyNjA7ICYjMjU4OyDDhyAmIzI2MjsgJiMyNjg7ICYjMjcwOyAmIzI3Mjsgw5Agw4ggw4kgw4ogw4sgJiMyODA7ICYjMjgyOyAmIzI4Njsgw4wgw40gw44gw48gJiMzMDQ7ICYjMzIxOyAmIzMxNzsgJiMzMTM7IMORICYjMzIzOyAmIzMyNzsgw5Igw5Mgw5Qgw5Ugw5Ygw5ggJiMzMzY7ICYjMzQwOyAmIzM0NDsgxaAgJiMzNDY7ICYjMzUwOyAmIzM1NjsgJiMzNTQ7IMOZIMOaIMObIMOcICYjMzY2OyAmIzM2ODsgw50gxb0gJiMzNzc7ICYjMzc5OyDDoCDDoSDDoiDDoyDDpCDDpSAmIzI2MTsgJiMyNTk7IMOnICYjMjYzOyAmIzI2OTsgJiMyNzE7ICYjMjczOyDDqCDDqSDDqiDDqyAmIzI4MTsgJiMyODM7ICYjMjg3OyDDrCDDrSDDriDDryAmIzMwNTsgJiMzMjI7ICYjMzE4OyAmIzMxNDsgw7EgJiMzMjQ7ICYjMzI4OyDDsCDDsiDDsyDDtCDDtSDDtiDDuCAmIzMzNzsgJiMzNDE7ICYjMzQ1OyAmIzM0NzsgxaEgJiMzNTE7ICYjMzU3OyAmIzM1NTsgw7kgw7ogw7sgw7wgJiMzNjc7ICYjMzY5OyDDvSDDvyDFviAmIzM3ODsgJiMzODA7JyksCisJCQkJZXhwbG9kZSgnICcsICdBZSBhZSBPZSBvZSBzcyBVZSB1ZSBPZSBvZSBBZSBhZSBBIEEgQSBBIEEgQSBBIEEgQyBDIEMgRCBEIEQgRSBFIEUgRSBFIEUgRyBJIEkgSSBJIEkgTCBMIEwgTiBOIE4gTyBPIE8gTyBPIE8gTyBSIFIgUyBTIFMgVCBUIFUgVSBVIFUgVSBVIFkgWiBaIFogYSBhIGEgYSBhIGEgYSBhIGMgYyBjIGQgZCBlIGUgZSBlIGUgZSBnIGkgaSBpIGkgaSBsIGwgbCBuIG4gbiBvIG8gbyBvIG8gbyBvIG8gciByIHMgcyBzIHQgdCB1IHUgdSB1IHUgdSB5IHkgeiB6IHonKSwKKwkJCSk7CisJCX0KKworCQlpZiAoZW1wdHkoJGRhdGEpKQorCQl7CisJCQlyZXR1cm4gKHN0cmluZykkZGF0YTsKKwkJfQorCisJCS8vIGZpeHVwICRleHRyYV9hbGxvd2VkX2NoYXJzIHRvIGVuc3VyZSBpdCdzIHN1aXRhYmxlIGFzIGEgY2hhcmFjdGVyIHNlcXVlbmNlIGZvciBhIHNldCBpbiBhIHJlZ2V4OgorCQkvLworCQkvLyBOb3RlOgorCQkvLyAgIGNhbGxlciBtdXN0IGVuc3VyZSBhIGRhc2ggJy0nLCB3aGVuIHRvIGJlIHRyZWF0ZWQgYXMgYSBzZXBhcmF0ZSBjaGFyYWN0ZXIsIGlzIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgc3RyaW5nCisJCWlmIChpc19zdHJpbmcoJGV4dHJhX2FsbG93ZWRfY2hhcnMpKQorCQl7CisJCQkkZXh0cmFfYWxsb3dlZF9jaGFycyA9IHN0cl9yZXBsYWNlKCddJywgJ1xdJywgJGV4dHJhX2FsbG93ZWRfY2hhcnMpOworCQkJaWYgKHN0cnBvcygkZXh0cmFfYWxsb3dlZF9jaGFycywgJy0nKSA9PT0gMCkKKwkJCXsKKwkJCQkkZXh0cmFfYWxsb3dlZF9jaGFycyA9IHN1YnN0cigkZXh0cmFfYWxsb3dlZF9jaGFycywgMSkgLiAoc3RycG9zKCRleHRyYV9hbGxvd2VkX2NoYXJzLCAnLScpICE9IHN0cmxlbigkZXh0cmFfYWxsb3dlZF9jaGFycykgLSAxID8gJy0nIDogJycpOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJJGV4dHJhX2FsbG93ZWRfY2hhcnMgPSAnJzsKKwkJfQorCQkvLyBhY2NlcHRzIGRvdHMgYW5kIHNldmVyYWwgb3RoZXIgY2hhcmFjdGVycywgYnV0IGRvIE5PVCB0b2xlcmF0ZSBkb3RzIG9yIHVuZGVyc2NvcmVzIGF0IHRoZSBzdGFydCBvciBlbmQsIGkuZS4gbm8gJ2hpZGRlbiBmaWxlIG5hbWVzJyBhY2NlcHRlZCwgZm9yIGV4YW1wbGUhCisJCSRkYXRhID0gcHJlZ19yZXBsYWNlKCcvW15BLVphLXowLTknIC4gJGV4dHJhX2FsbG93ZWRfY2hhcnMgLiAnXSsvJywgJ18nLCBzdHJfcmVwbGFjZSgkcmVnZXhbMF0sICRyZWdleFsxXSwgJGRhdGEpKTsKKwkJJGRhdGEgPSB0cmltKCRkYXRhLCAnXy4gJyAuICR0cmltX2NoYXJzKTsKKworCQkvLyRkYXRhID0gdHJpbShzdWJzdHIocHJlZ19yZXBsYWNlKCcvKD86W15BLXowLTldfF98XF4pKy9pJywgJ18nLCBzdHJfcmVwbGFjZSgkcmVnZXhbMF0sICRyZWdleFsxXSwgJGRhdGEpKSwgMCwgNjQpLCAnXycpOworCQlyZXR1cm4gIWVtcHR5KCRvcHRpb25zKSA/IHNlbGY6OmNoZWNrVGl0bGUoJGRhdGEsICRvcHRpb25zKSA6ICRkYXRhOworCX0KKworCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gY2hlY2tUaXRsZSgkZGF0YSwgJG9wdGlvbnMgPSBhcnJheSgpLCAkaSA9IDApCisJeworCQlpZiAoIWlzX2FycmF5KCRvcHRpb25zKSkgcmV0dXJuICRkYXRhOworCisJCSRsd3JfZGF0YSA9IHN0cnRvbG93ZXIoJGRhdGEpOworCisJCWZvcmVhY2ggKCRvcHRpb25zIGFzICRjb250ZW50KQorCQkJaWYgKCRjb250ZW50ICYmIHN0cnRvbG93ZXIoJGNvbnRlbnQpID09ICRsd3JfZGF0YSAuICgkaSA/ICdfJyAuICRpIDogJycpKQorCQkJCXJldHVybiBzZWxmOjpjaGVja1RpdGxlKCRkYXRhLCAkb3B0aW9ucywgKyskaSk7CisKKwkJcmV0dXJuICRkYXRhLigkaSA/ICdfJyAuICRpIDogJycpOworCX0KKworCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNCaW5hcnkoJHN0cikKKwl7CisJCWZvcigkaSA9IDA7ICRpIDwgc3RybGVuKCRzdHIpOyAkaSsrKQorCQl7CisJCQkkYyA9IG9yZCgkc3RyWyRpXSk7CisJCQkvLyBkbyBub3QgYWNjZXB0IEFOWSBjb2RlcyBiZWxvdyBTUEFDRSwgZXhjZXB0IFRBQiwgQ1IgYW5kIExGLgorCQkJaWYgKCRjID09IDI1NSB8fCAoJGMgPCAzMiAvKiBTUEFDRSAqLyAmJiAkYyAhPSA5ICYmICRjICE9IDEwICYmICRjICE9IDEzKSkgcmV0dXJuIHRydWU7CisJCX0KKworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogQXBwbHkgcmF3dXJsZW5jb2RlKCkgdG8gZWFjaCBvZiB0aGUgZWxlbWVudHMgb2YgdGhlIGdpdmVuIHBhdGgKKwkgKgorCSAqIEBub3RlCisJICogICB0aGlzIG1ldGhvZCBpcyBwcm92aWRlZCBhcyByYXd1cmxlbmNvZGUoKSBpdHNlbGYgYWxzbyBlbmNvZGVzIHRoZSAnLycgc2VwYXJhdG9ycyBpbiBhIHBhdGgvc3RyaW5nCisJICogICBhbmQgd2UgZG8gTk9UIHdhbnQgdG8gJ3JldmVydCcgc3VjaCBjaGFuZ2Ugd2l0aCB0aGUgcmlzayBvZiBhbHNvIHBpY2tpbmcgdXAgb3RoZXIgJTJGIGJpdHMgaW4KKwkgKiAgIHRoZSBzdHJpbmcgKHRoaXMgYXNzdW1lcyBjcmFmdGVkIHBhdGhzIGNhbiBiZSBmZWQgdG8gdXMpLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmF3dXJsZW5jb2RlX3BhdGgoJHBhdGgpCisJeworCQlyZXR1cm4gc3RyX3JlcGxhY2UoJyUyRicsICcvJywgcmF3dXJsZW5jb2RlKCRwYXRoKSk7CisJfQorCisJLyoqCisJICogQ29udmVydCBhIG51bWJlciAocmVwcmVzZW50aW5nIG51bWJlciBvZiBieXRlcykgdG8gYSBmb3JtYXR0ZWQgc3RyaW5nIHJlcHJlc2VudGluZyBHQiAuLiBieXRlcywKKwkgKiBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIHZhbHVlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZm10X2J5dGVjb3VudCgkdmFsLCAkcHJlY2lzaW9uID0gMSkKKwl7CisJCSR1bml0ID0gYXJyYXkoJ1RCJywgJ0dCJywgJ01CJywgJ0tCJywgJ2J5dGVzJyk7CisJCWZvciAoJHggPSBjb3VudCgkdW5pdCkgLSAxOyAkdmFsID49IDEwMjQgJiYgJHggPiAwOyAkeC0tKQorCQl7CisJCQkkdmFsIC89IDEwMjQuMDsKKwkJfQorCQkkdmFsID0gcm91bmQoJHZhbCwgKCR4ID4gMCA/ICRwcmVjaXNpb24gOiAwKSk7CisJCXJldHVybiAkdmFsIC4gJyYjMTYwOycgLiAkdW5pdFskeF07CisJfQorCisKKworCisJLyoKKwkgKiBEZXJpdmVkIGZyb20gZ2V0SUQzIGRlbW9fYnJvd3NlLnBocCBzYW1wbGUgY29kZS4KKwkgKgorCSAqIEF0dGVtcHRzIHNvbWUgJ2ludGVsbGlnZW50JyBjb252ZXJzaW9ucyBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5IGFuZCBpbmZvcm1hdGlvbiBjb21wYWN0aW5nLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdGFibGVfdmFyX2R1bXAoJiR2YXJpYWJsZSwgJHdyYXBfaW5fdGQgPSBmYWxzZSwgJHNob3dfdHlwZXMgPSBmYWxzZSwgJGxldmVsID0gMCkKKwl7CisJCSRyZXR1cm5zdHJpbmcgPSAnJzsKKwkJaWYgKGlzX2FycmF5KCR2YXJpYWJsZSkpCisJCXsKKwkJCSRyZXR1cm5zdHJpbmcgLj0gKCR3cmFwX2luX3RkID8gJycgOiAnJyk7CisJCQkkcmV0dXJuc3RyaW5nIC49ICc8dWwgY2xhc3M9ImR1bXBfYXJyYXkgZHVtcF9sZXZlbF8nIC4gc3ByaW50ZignJTAydScsICRsZXZlbCkgLiAnIj4nOworCQkJZm9yZWFjaCAoJHZhcmlhYmxlIGFzICRrZXkgPT4gJiR2YWx1ZSkKKwkJCXsKKwkJCQkvLyBBc3NpZ24gYW4gZXh0cmEgY2xhc3MgcmVwcmVzZW50aW5nIHRoZSAocm91bmRlZCkgd2lkdGggaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMgJ29yIG1vcmUnOgorCQkJCS8vIFlvdSBjYW4gdXNlIHRoaXMgYXMgYSB3aWR0aCBhcHByb3hpbWF0aW9uIGluIHBpeGVscyB0byBzdHlsZSAodmVyeSkgd2lkZSBpdGVtcy4gSXQgc2F2ZXMKKwkJCQkvLyBhIGxvbmcgcnVuIHRocm91Z2ggYWxsIHRoZSBub2RlcyBpbiBKUywganVzdCB0byBtZWFzdXJlIHRoZSBhY3R1YWwgd2lkdGggYW5kIGNvcnJlY3QgYW55CisJCQkJLy8gb3ZlcmxhcCBvY2N1cnJpbmcgaW4gdGhlcmUuCisJCQkJJGtleWxlbiA9IHN0cmxlbigka2V5KTsKKwkJCQkkdGhyZXNob2xkID0gMTA7CisJCQkJJG92ZXJsYXJnZV9rZXlfY2xhc3MgPSAnJzsKKwkJCQl3aGlsZSAoJGtleWxlbiA+PSAkdGhyZXNob2xkKQorCQkJCXsKKwkJCQkJJG92ZXJsYXJnZV9rZXlfY2xhc3MgLj0gJyBvdmVybGFyZ2VyJyAuIHNwcmludGYoJyUwNGQnLCAkdGhyZXNob2xkKTsKKwkJCQkJJHRocmVzaG9sZCAqPSAxLjY7CisJCQkJfQorCisJCQkJJHJldHVybnN0cmluZyAuPSAnPGxpPjxzcGFuIGNsYXNzPSJrZXknIC4gJG92ZXJsYXJnZV9rZXlfY2xhc3MgLiAnIj4nIC4gJGtleSAuICc8L3NwYW4+JzsKKwkJCQkkdHN0cmluZyA9ICcnOworCQkJCWlmICgkc2hvd190eXBlcykKKwkJCQl7CisJCQkJCSR0c3RyaW5nID0gJzxzcGFuIGNsYXNzPSJ0eXBlIj4nLmdldHR5cGUoJHZhbHVlKTsKKwkJCQkJaWYgKGlzX2FycmF5KCR2YWx1ZSkpCisJCQkJCXsKKwkJCQkJCSR0c3RyaW5nIC49ICcmbmJzcDsoJy5jb3VudCgkdmFsdWUpLicpJzsKKwkJCQkJfQorCQkJCQllbHNlaWYgKGlzX3N0cmluZygkdmFsdWUpKQorCQkJCQl7CisJCQkJCQkkdHN0cmluZyAuPSAnJm5ic3A7KCcuc3RybGVuKCR2YWx1ZSkuJyknOworCQkJCQl9CisJCQkJCSR0c3RyaW5nID0gJzwvc3Bhbj4nOworCQkJCX0KKworCQkJCXN3aXRjaCAoKHN0cmluZykka2V5KQorCQkJCXsKKwkJCQljYXNlICdmaWxlc2l6ZSc6CisJCQkJCSRyZXR1cm5zdHJpbmcgLj0gJzxzcGFuIGNsYXNzPSJkdW1wX3NlY29uZHMiPicgLiAkdHN0cmluZyAuIHNlbGY6OmZtdF9ieXRlY291bnQoJHZhbHVlKSAuICgkdmFsdWUgPj0gMTAyNCA/ICcgKCcgLiAkdmFsdWUgLiAnIGJ5dGVzKScgOiAnJykgLiAnPC9zcGFuPjwvbGk+JzsKKwkJCQkJY29udGludWUgMjsKKworCQkJCWNhc2UgJ3BsYXl0aW1lIHNlY29uZHMnOgorCQkJCQkkcmV0dXJuc3RyaW5nIC49ICc8c3BhbiBjbGFzcz0iZHVtcF9zZWNvbmRzIj4nIC4gJHRzdHJpbmcgLiBudW1iZXJfZm9ybWF0KCR2YWx1ZSwgMSkgLiAnIHM8L3NwYW4+PC9saT4nOworCQkJCQljb250aW51ZSAyOworCisJCQkJY2FzZSAnY29tcHJlc3Npb24gcmF0aW8nOgorCQkJCQkkcmV0dXJuc3RyaW5nIC49ICc8c3BhbiBjbGFzcz0iZHVtcF9jb21wcmVzc2lvbl9yYXRpbyI+JyAuICR0c3RyaW5nIC4gbnVtYmVyX2Zvcm1hdCgkdmFsdWUgKiAxMDAsIDEpIC4gJyU8L3NwYW4+PC9saT4nOworCQkJCQljb250aW51ZSAyOworCisJCQkJY2FzZSAnYml0cmF0ZSc6CisJCQkJY2FzZSAnYml0IHJhdGUnOgorCQkJCWNhc2UgJ2F2ZyBiaXQgcmF0ZSc6CisJCQkJY2FzZSAnbWF4IGJpdCByYXRlJzoKKwkJCQljYXNlICdtYXggYml0cmF0ZSc6CisJCQkJY2FzZSAnc2FtcGxlIHJhdGUnOgorCQkJCWNhc2UgJ3NhbXBsZSByYXRlMic6CisJCQkJY2FzZSAnc2FtcGxlcyBwZXIgc2VjJzoKKwkJCQljYXNlICdhdmcgYnl0ZXMgcGVyIHNlYyc6CisJCQkJCSRyZXR1cm5zdHJpbmcgLj0gJzxzcGFuIGNsYXNzPSJkdW1wX3JhdGUiPicgLiAkdHN0cmluZyAuIHNlbGY6OmZtdF9ieXRlY291bnQoJHZhbHVlKSAuICcvczwvc3Bhbj48L2xpPic7CisJCQkJCWNvbnRpbnVlIDI7CisKKwkJCQljYXNlICdieXRlcyBwZXIgbWludXRlJzoKKwkJCQkJJHJldHVybnN0cmluZyAuPSAnPHNwYW4gY2xhc3M9ImR1bXBfcmF0ZSI+JyAuICR0c3RyaW5nIC4gc2VsZjo6Zm10X2J5dGVjb3VudCgkdmFsdWUpIC4gJy9taW48L3NwYW4+PC9saT4nOworCQkJCQljb250aW51ZSAyOworCQkJCX0KKwkJCQkkcmV0dXJuc3RyaW5nIC49IEZpbGVNYW5hZ2VyVXRpbGl0eTo6dGFibGVfdmFyX2R1bXAoJHZhbHVlLCB0cnVlLCAkc2hvd190eXBlcywgJGxldmVsICsgMSkgLiAnPC9saT4nOworCQkJfQorCQkJJHJldHVybnN0cmluZyAuPSAnPC91bD4nOworCQkJJHJldHVybnN0cmluZyAuPSAoJHdyYXBfaW5fdGQgPyAnJyA6ICcnKTsKKwkJfQorCQllbHNlIGlmIChpc19ib29sKCR2YXJpYWJsZSkpCisJCXsKKwkJCSRyZXR1cm5zdHJpbmcgLj0gKCR3cmFwX2luX3RkID8gJzxzcGFuIGNsYXNzPSJkdW1wX2Jvb2xlYW4iPicgOiAnJykuKCR2YXJpYWJsZSA/ICdUUlVFJyA6ICdGQUxTRScpLigkd3JhcF9pbl90ZCA/ICc8L3NwYW4+JyA6ICcnKTsKKwkJfQorCQllbHNlIGlmIChpc19pbnQoJHZhcmlhYmxlKSkKKwkJeworCQkJJHJldHVybnN0cmluZyAuPSAoJHdyYXBfaW5fdGQgPyAnPHNwYW4gY2xhc3M9ImR1bXBfaW50ZWdlciI+JyA6ICcnKS4kdmFyaWFibGUuKCR3cmFwX2luX3RkID8gJzwvc3Bhbj4nIDogJycpOworCQl9CisJCWVsc2UgaWYgKGlzX2Zsb2F0KCR2YXJpYWJsZSkpCisJCXsKKwkJCSRyZXR1cm5zdHJpbmcgLj0gKCR3cmFwX2luX3RkID8gJzxzcGFuIGNsYXNzPSJkdW1wX2RvdWJsZSI+JyA6ICcnKS4kdmFyaWFibGUuKCR3cmFwX2luX3RkID8gJzwvc3Bhbj4nIDogJycpOworCQl9CisJCWVsc2UgaWYgKGlzX29iamVjdCgkdmFyaWFibGUpICYmIGlzc2V0KCR2YXJpYWJsZS0+aWQzX3Byb2NzdXBwb3J0X29iaikpCisJCXsKKwkJCWlmIChpc3NldCgkdmFyaWFibGUtPm1ldGFkYXRhKSAmJiBpc3NldCgkdmFyaWFibGUtPmltYWdlZGF0YSkpCisJCQl7CisJCQkJLy8gYW4gZW1iZWRkZWQgaW1hZ2UgKE1QMyBldCBhbCkKKwkJCQkkcmV0dXJuc3RyaW5nIC49ICgkd3JhcF9pbl90ZCA/ICc8ZGl2IGNsYXNzPSJkdW1wX2VtYmVkZGVkX2ltYWdlIj4nIDogJycpOworCQkJCSRyZXR1cm5zdHJpbmcgLj0gJzx0YWJsZSBjbGFzcz0iZHVtcF9pbWFnZSI+JzsKKwkJCQkkcmV0dXJuc3RyaW5nIC49ICc8dHI+PHRkPjxiPnR5cGU8L2I+PC90ZD48dGQ+Jy5nZXRpZDNfbGliOjpJbWFnZVR5cGVzTG9va3VwKCR2YXJpYWJsZS0+bWV0YWRhdGFbMl0pLic8L3RkPjwvdHI+JzsKKwkJCQkkcmV0dXJuc3RyaW5nIC49ICc8dHI+PHRkPjxiPndpZHRoPC9iPjwvdGQ+PHRkPicubnVtYmVyX2Zvcm1hdCgkdmFyaWFibGUtPm1ldGFkYXRhWzBdKS4nIHB4PC90ZD48L3RyPic7CisJCQkJJHJldHVybnN0cmluZyAuPSAnPHRyPjx0ZD48Yj5oZWlnaHQ8L2I+PC90ZD48dGQ+Jy5udW1iZXJfZm9ybWF0KCR2YXJpYWJsZS0+bWV0YWRhdGFbMV0pLicgcHg8L3RkPjwvdHI+JzsKKwkJCQkkcmV0dXJuc3RyaW5nIC49ICc8dHI+PHRkPjxiPnNpemU8L2I+PC90ZD48dGQ+Jy5udW1iZXJfZm9ybWF0KHN0cmxlbigkdmFyaWFibGUtPmltYWdlZGF0YSkpLicgYnl0ZXM8L3RkPjwvdHI+PC90YWJsZT4nOworCQkJCSRyZXR1cm5zdHJpbmcgLj0gJzxpbWcgc3JjPSJkYXRhOicuJHZhcmlhYmxlLT5tZXRhZGF0YVsnbWltZSddLic7YmFzZTY0LCcuYmFzZTY0X2VuY29kZSgkdmFyaWFibGUtPmltYWdlZGF0YSkuJyIgd2lkdGg9IicuJHZhcmlhYmxlLT5tZXRhZGF0YVswXS4nIiBoZWlnaHQ9IicuJHZhcmlhYmxlLT5tZXRhZGF0YVsxXS4nIj4nOworCQkJCSRyZXR1cm5zdHJpbmcgLj0gKCR3cmFwX2luX3RkID8gJzwvZGl2PicgOiAnJyk7CisJCQl9CisJCQllbHNlIGlmIChpc3NldCgkdmFyaWFibGUtPmJpbmFyeWRhdGFfbW9kZSkpCisJCQl7CisJCQkJJHJldHVybnN0cmluZyAuPSAoJHdyYXBfaW5fdGQgPyAnPHNwYW4gY2xhc3M9ImR1bXBfYmluYXJ5X2RhdGEiPicgOiAnJyk7CisJCQkJaWYgKCR2YXJpYWJsZS0+YmluYXJ5ZGF0YV9tb2RlID09ICdwcm9jZCcpCisJCQkJeworCQkJCQkkcmV0dXJuc3RyaW5nIC49ICc8aT4nIC4gc2VsZjo6dGFibGVfdmFyX2R1bXAoJHZhcmlhYmxlLT5iaW5hcnlkYXRhLCBmYWxzZSwgZmFsc2UsICRsZXZlbCArIDEpIC4gJzwvaT4nOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkkdGVtcCA9IHVucGFjaygnSConLCAkdmFyaWFibGUtPmJpbmFyeWRhdGEpOworCQkJCQkkdGVtcCA9IHN0cl9zcGxpdCgkdGVtcFsxXSwgOCk7CisJCQkJCSRyZXR1cm5zdHJpbmcgLj0gJzxpPicgLiBzZWxmOjp0YWJsZV92YXJfZHVtcChpbXBsb2RlKCcgJywgJHRlbXApLCBmYWxzZSwgZmFsc2UsICRsZXZlbCArIDEpIC4gJzwvaT4nOworCQkJCX0KKwkJCQkkcmV0dXJuc3RyaW5nIC49ICgkd3JhcF9pbl90ZCA/ICc8L3NwYW4+JyA6ICcnKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkkcmV0dXJuc3RyaW5nIC49ICgkd3JhcF9pbl90ZCA/ICc8c3BhbiBjbGFzcz0iZHVtcF9vYmplY3QiPicgOiAnJykucHJpbnRfcigkdmFyaWFibGUsIHRydWUpLigkd3JhcF9pbl90ZCA/ICc8L3NwYW4+JyA6ICcnKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmIChpc19vYmplY3QoJHZhcmlhYmxlKSkKKwkJeworCQkJJHJldHVybnN0cmluZyAuPSAoJHdyYXBfaW5fdGQgPyAnPHNwYW4gY2xhc3M9ImR1bXBfb2JqZWN0Ij4nIDogJycpLnByaW50X3IoJHZhcmlhYmxlLCB0cnVlKS4oJHdyYXBfaW5fdGQgPyAnPC9zcGFuPicgOiAnJyk7CisJCX0KKwkJZWxzZSBpZiAoaXNfbnVsbCgkdmFyaWFibGUpKQorCQl7CisJCQkkcmV0dXJuc3RyaW5nIC49ICgkd3JhcF9pbl90ZCA/ICc8c3BhbiBjbGFzcz0iZHVtcF9udWxsIj4nIDogJycpLicobnVsbCknLigkd3JhcF9pbl90ZCA/ICc8L3NwYW4+JyA6ICcnKTsKKwkJfQorCQllbHNlIGlmIChpc19zdHJpbmcoJHZhcmlhYmxlKSkKKwkJeworCQkJJHZhcmlhYmxlID0gc3RydHIoJHZhcmlhYmxlLCAiXHgwMCIsICcgJyk7CisJCQkkdmFybGVuID0gc3RybGVuKCR2YXJpYWJsZSk7CisJCQlmb3IgKCRpID0gMDsgJGkgPCAkdmFybGVuOyAkaSsrKQorCQkJeworCQkJCSRyZXR1cm5zdHJpbmcgLj0gaHRtbGVudGl0aWVzKCR2YXJpYWJsZXskaX0sIEVOVF9RVU9URVMsICdVVEYtOCcpOworCQkJfQorCQkJJHJldHVybnN0cmluZyA9ICgkd3JhcF9pbl90ZCA/ICc8c3BhbiBjbGFzcz0iZHVtcF9zdHJpbmciPicgOiAnJykubmwyYnIoJHJldHVybnN0cmluZykuKCR3cmFwX2luX3RkID8gJzwvc3Bhbj4nIDogJycpOworCQl9CisJCWVsc2UKKwkJeworCQkJJHJldHVybnN0cmluZyAuPSAoJHdyYXBfaW5fdGQgPyAnPHNwYW4gY2xhc3M9ImR1bXBfb3RoZXIiPicgOiAnJykubmwyYnIoaHRtbHNwZWNpYWxjaGFycyhzdHJ0cigkdmFyaWFibGUsICJceDAwIiwgJyAnKSkpLigkd3JhcF9pbl90ZCA/ICc8L3NwYW4+JyA6ICcnKTsKKwkJfQorCQlyZXR1cm4gJHJldHVybnN0cmluZzsKKwl9Cit9CisKKworCisvLyBzdXBwb3J0IGNsYXNzIGZvciB0aGUgZ2V0SUQzIGluZm8gYW5kIGVtYmVkZGVkIGltYWdlIGV4dHJhY3Rpb246CitjbGFzcyBFbWJlZGRlZEltYWdlQ29udGFpbmVyCit7CisJcHVibGljICRtZXRhZGF0YTsKKwlwdWJsaWMgJGltYWdlZGF0YTsKKwlwdWJsaWMgJGlkM19wcm9jc3VwcG9ydF9vYmo7CisKKwlwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1ldGEsICRpbWcpCisJeworCQkkdGhpcy0+bWV0YWRhdGEgPSAkbWV0YTsKKwkJJHRoaXMtPmltYWdlZGF0YSA9ICRpbWc7CisJCSR0aGlzLT5pZDNfcHJvY3N1cHBvcnRfb2JqID0gdHJ1ZTsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9fc2V0X3N0YXRlKCRhcnIpCisJeworCQkkb2JqID0gbmV3IEVtYmVkZGVkSW1hZ2VDb250YWluZXIoJGFyclsnbWV0YWRhdGEnXSwgJGFyclsnaW1hZ2VkYXRhJ10pOworCQlyZXR1cm4gJG9iajsKKwl9Cit9CisKK2NsYXNzIEJpbmFyeURhdGFDb250YWluZXIKK3sKKwlwdWJsaWMgJGJpbmFyeWRhdGE7CisJcHVibGljICRiaW5hcnlkYXRhX21vZGU7CisJcHVibGljICRpZDNfcHJvY3N1cHBvcnRfb2JqOworCisJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRkYXRhLCAkbW9kZSA9ICdwcm9jZCcpCisJeworCQkkdGhpcy0+YmluYXJ5ZGF0YV9tb2RlID0gJG1vZGU7CisJCSR0aGlzLT5iaW5hcnlkYXRhID0gJGRhdGE7CisJCSR0aGlzLT5pZDNfcHJvY3N1cHBvcnRfb2JqID0gdHJ1ZTsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9fc2V0X3N0YXRlKCRhcnIpCisJeworCQkkb2JqID0gbmV3IEJpbmFyeURhdGFDb250YWluZXIoJGFyclsnYmluYXJ5ZGF0YSddLCAkYXJyWydiaW5hcnlkYXRhX21vZGUnXSk7CisJCXJldHVybiAkb2JqOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9Db25uZWN0b3IvRmlsZU1hbmFnZXJXaXRoQWxpYXNTdXBwb3J0LnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvQ29ubmVjdG9yL0ZpbGVNYW5hZ2VyV2l0aEFsaWFzU3VwcG9ydC5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFhOWNmZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvQ29ubmVjdG9yL0ZpbGVNYW5hZ2VyV2l0aEFsaWFzU3VwcG9ydC5waHAKQEAgLTAsMCArMSwyNDIgQEAKKzw/cGhwCisvKgorICogU2NyaXB0OiBGaWxlTWFuYWdlcldpdGhBbGlhc1N1cHBvcnQucGhwCisgKiAgIE1vb1Rvb2xzIEZpbGVNYW5hZ2VyIC0gQmFja2VuZCBmb3IgdGhlIEZpbGVNYW5hZ2VyIFNjcmlwdCAod2l0aCBBbGlhcyBwYXRoIG1hcHBpbmcgc3VwcG9ydCkKKyAqCisgKiBBdXRob3JzOgorICogIC0gQ2hyaXN0b3BoIFBvamVyIChodHRwOi8vY3BvamVyLm5ldCkgKGF1dGhvcikKKyAqICAtIEphbWVzIEVobHkgKGh0dHA6Ly93d3cuZGV2dHJlbmNoLmNvbSkKKyAqICAtIEZhYmlhbiBWb2dlbHN0ZWxsZXIgKGh0dHA6Ly9mcm96ZW1hbi5kZSkKKyAqICAtIEdlciBIb2JiZWx0IChodHRwOi8vaGViYnV0Lm5ldCkKKyAqCisgKiBMaWNlbnNlOgorICogICBNSVQtc3R5bGUgbGljZW5zZS4KKyAqCisgKiBDb3B5cmlnaHQ6CisgKiAgIEZpbGVNYW5hZ2VyIENvcHlyaWdodCAoYykgMjAwOS0yMDExIFtDaHJpc3RvcGggUG9qZXJdKGh0dHA6Ly9jcG9qZXIubmV0KQorICogICBCYWNrZW5kOiBGaWxlTWFuYWdlciAmIEZpbGVNYW5hZ2VyV2l0aEFsaWFzU3VwcG9ydCBDb3B5cmlnaHQgKGMpIDIwMTEgW0dlciBIb2JiZWx0XShodHRwOi8vaG9iYmVsdC5jb20pCisgKgorICogRGVwZW5kZW5jaWVzOgorICogICAtIFRvb2xpbmcucGhwCisgKiAgIC0gSW1hZ2UuY2xhc3MucGhwCisgKiAgIC0gZ2V0SWQzIExpYnJhcnkKKyAqICAgLSBGaWxlTWFuYWdlci5waHAKKyAqLworCityZXF1aXJlKHN0cnRyKGRpcm5hbWUoX19GSUxFX18pLCAnXFwnLCAnLycpIC4gJy9GaWxlTWFuYWdlci5waHAnKTsKKworCisvKioKKyAqIERlcml2ZWQgY2xhc3MgZm9yIEZpbGVNYW5hZ2VyIHdoaWNoIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgQWxpYXNlcyBhcyBzZXJ2ZWQgdGhyb3VnaCBBcGFjaGUncyBtb2RfYWxpYXMgb3IKKyAqIG1vZF92aG9zdF9hbGlhcywgUFJPVklERUQgeW91IGhhdmUgc2V0IHVwIHRoZSBBbGlhcyB0cmFuc2xhdGlvbiB0YWJsZSBpbiB0aGUgY29uc3RydWN0b3I6IHlvdSBtdXN0IHBhc3MgdGhpcyB0YWJsZSBpbiB0aGUKKyAqICRvcHRpb25zIGFycmF5IGFzIGEgbWFwcGluZyBhcnJheSBpbiB0aGUgY29uc3RydWN0b3IuCisgKgorICogT3B0aW9uczoKKyAqICAgLShhbGwgb2YgdGhlIG9wdGlvbnMgb2YgdGhlIEZpbGVNYW5hZ2VyIGNsYXNzKQorICogICAtQWxpYXNlczogKGFzc29jaWF0aXZlIGFycmF5IG9mIHN0cmluZ3MsIHdoZXJlIHRoZSAna2V5JyBVUkkgcGF0aCBpcyB0byBiZSB0cmFuc2Zvcm1lZCB0byB0aGUgJ3ZhbHVlJyBwaHlzaWNhbCBmaWxlc3lzdGVtIHBhdGguCisgKgorICogU2VlIERlbW9zL0ZNLWNvbW1vbi5waHA6Om1rTmV3RmlsZU1hbmFnZXIoKSBmb3IgYW4gZXhhbXBsZSBvZiBhbiAnQWxpYXNlcycgcGF0aCBtYXBwaW5nIHNldC4KKyAqLworY2xhc3MgRmlsZU1hbmFnZXJXaXRoQWxpYXNTdXBwb3J0IGV4dGVuZHMgRmlsZU1hbmFnZXIKK3sKKwlwcm90ZWN0ZWQgJHNjYW5kaXJfYWxpYXNfbHVfYXJyOworCisJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRvcHRpb25zKQorCXsKKwkJJHRoaXMtPnNjYW5kaXJfYWxpYXNfbHVfYXJyID0gbnVsbDsKKworCQkkb3B0aW9ucyA9IGFycmF5X21lcmdlKGFycmF5KAorCQkJJ0FsaWFzZXMnID0+IG51bGwgICAgICAgICAgICAgLy8gZGVmYXVsdCBpcyBhbiBlbXB0eSBBbGlhcyBsaXN0LgorCQkpLCAoaXNfYXJyYXkoJG9wdGlvbnMpID8gJG9wdGlvbnMgOiBhcnJheSgpKSk7CisKKwkJcGFyZW50OjpfX2NvbnN0cnVjdCgkb3B0aW9ucyk7CisKKwkJLyoKKwkJICogTm93IHByb2Nlc3MgdGhlIEFsaWFzZXMgYXJyYXk6CisJCSAqIGl0IHdvcmtzIGFzLWlzIGZvciB0cmFuc2Zvcm1pbmcgVVJJIHRvIEZJTEUgcGF0aCwgYnV0IHdlIG5lZWQKKwkJICogdG8gbXVuY2ggdGhlIGxpc3QgZm9yIHNjYW5kaXIoKSB0byBoYXZlIGZhc3QgYWNjZXNzIGF0IHRoZSBzYW1lIGluZm86CisJCSAqCisJCSAqIGhlcmUgdGhlIGdvYWwgaXMgZm9yIHNjYW5kaXIoKSB0byBzaG93IHRoZSBhbGlhc2VzIGFzIChmYWtlKSBkaXJlY3RvcnkKKwkJICogZW50cmllcywgaGVuY2Ugd2UgbmVlZCB0byBjb2xsZWN0IHRoZSBhbGlhc2VzIHBlciBwYXJlbnQgZGlyZWN0b3J5OgorCQkgKi8KKwkJaWYgKGlzX2FycmF5KCR0aGlzLT5vcHRpb25zWydBbGlhc2VzJ10pKQorCQl7CisJCQkkYWxpYXNfYXJyID0gJHRoaXMtPm9wdGlvbnNbJ0FsaWFzZXMnXTsKKworCQkJLy8gY29sbGVjdCB0aGUgc2V0IG9mIGFsaWFzZXMgcGVyIHBhcmVudCBkaXJlY3Rvcnk6IHdlIG5lZWQgYSBmdWxseSBzZXQgdXAgb3B0aW9uc1snZGlyZWN0b3J5J10gZm9yIHRoaXMgbm93CisJCQkkc2NhbmRpcl9sb29rdXBfYXJyID0gYXJyYXkoKTsKKworCQkJLy8gTk9URTogd2UgY2FuIHVzZSBhbnkgb2YgdGhlIHVybDJmaWxlX3BhdGggbWV0aG9kcyBoZXJlIGFzIHRob3NlIG9ubHkgdXNlIHRoZSByYXcgW0FsaWFzZXNdIGFycmF5CisKKwkJCWZvcmVhY2goJGFsaWFzX2FyciBhcyAkdXJpID0+ICRmaWxlKQorCQkJeworCQkJCSRpc2RpciA9ICFpc19maWxlKCRmaWxlKTsKKworCQkJCSRwX3VyaSA9IHBhcmVudDo6Z2V0UGFyZW50RGlyKCR1cmkpOworCQkJCSRhX25hbWUgPSBiYXNlbmFtZSgkdXJpKTsKKworCQkJCS8vIGFzIHNjYW5kaXIgd29ya3Mgd2l0aCBmaWxlc3lzdGVtIHBhdGhzLCBjb252ZXJ0IHRoaXMgVVJJIHBhdGggdG8gYSBmaWxlc3lzdGVtIHBhdGg6CisJCQkJJHBfZGlyID0gJHRoaXMtPnVybF9wYXRoMmZpbGVfcGF0aCgkcF91cmkpOworCQkJCSRwX2RpciA9IHNlbGY6OmVuZm9yY2VUcmFpbGluZ1NsYXNoKCRwX2Rpcik7CisKKwkJCQlpZiAoIWlzc2V0KCRzY2FuZGlyX2xvb2t1cF9hcnJbJHBfZGlyXSkpCisJCQkJeworCQkJCQkkc2NhbmRpcl9sb29rdXBfYXJyWyRwX2Rpcl0gPSBhcnJheShhcnJheSgpLCBhcnJheSgpKTsKKwkJCQl9CisJCQkJJHNjYW5kaXJfbG9va3VwX2FyclskcF9kaXJdWyEkaXNkaXJdW10gPSAvKiAnYWxpYXMnID0+ICovICRhX25hbWU7CisJCQl9CisKKwkJCSR0aGlzLT5zY2FuZGlyX2FsaWFzX2x1X2FyciA9ICRzY2FuZGlyX2xvb2t1cF9hcnI7CisJCX0KKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGFycmF5IHRoZSBGaWxlTWFuYWdlciBvcHRpb25zIGFuZCBzZXR0aW5ncy4KKwkgKi8KKwlwdWJsaWMgZnVuY3Rpb24gZ2V0U2V0dGluZ3MoKQorCXsKKwkJcmV0dXJuIGFycmF5X21lcmdlKGFycmF5KAorCQkJJ3NjYW5kaXJfYWxpYXNfbHVfYXJyJyA9PiAkdGhpcy0+c2NhbmRpcl9hbGlhc19sdV9hcnIKKwkJKSwgcGFyZW50OjpnZXRTZXR0aW5ncygpKTsKKwl9CisKKwkvKioKKwkgKiBBbiBhdWdtZW50ZWQgc2NhbmRpcigpIHdoaWNoIHdpbGwgZW5zdXJlIGFueSBBbGlhc2VzIGFyZSBpbmNsdWRlZCBpbiB0aGUgcmVsZXZhbnQKKwkgKiBkaXJlY3Rvcnkgc2NhbnM7IHRoaXMgbWFrZXMgdGhlIEFsaWFzZXMgYmVoYXZlIHZlcnkgc2ltaWxhcmx5IHRvIGFjdHVhbCBkaXJlY3Rvcmllcy4KKwkgKi8KKwlwdWJsaWMgZnVuY3Rpb24gc2NhbmRpcigkZGlyLCAkZmlsZW1hc2ssICRzZWVfdGh1bWJuYWlsX2RpciwgJGdsb2JfZmxhZ3Nfb3IsICRnbG9iX2ZsYWdzX2FuZCkKKwl7CisJCSRkaXIgPSBzZWxmOjplbmZvcmNlVHJhaWxpbmdTbGFzaCgkZGlyKTsKKworCQkvLyBjb2xsZWN0IHRoZSByZWFsIGl0ZW1zIGZpcnN0OgorCQkkY29sbCA9IHBhcmVudDo6c2NhbmRpcigkZGlyLCAkZmlsZW1hc2ssICRzZWVfdGh1bWJuYWlsX2RpciwgJGdsb2JfZmxhZ3Nfb3IsICRnbG9iX2ZsYWdzX2FuZCk7CisJCWlmICgkY29sbCA9PT0gZmFsc2UpCisJCQlyZXR1cm4gJGNvbGw7CisKKwkJJGZsYWdzID0gR0xPQl9OT0RPVFMgfCBHTE9CX05PSElEREVOIHwgR0xPQl9OT1NPUlQ7CisJCSRmbGFncyAmPSAkZ2xvYl9mbGFnc19hbmQ7CisJCSRmbGFncyB8PSAkZ2xvYl9mbGFnc19vcjsKKworCQkvLyBtYWtlIHN1cmUgd2Uga2VlcCB0aGUgZ3VhcmFudGVlIHRoYXQgdGhlICcuLicgZW50cnksIHdoZW4gcHJlc2VudCwgaXMgdGhlIHZlcnkgbGFzdCBvbmUsIGludGFjdDoKKwkJJGRvdWJsZWRvdCA9IGFycmF5X3BvcCgkY29sbFsnZGlycyddKTsKKwkJaWYgKCRkb3VibGVkb3QgIT09IG51bGwgJiYgJGRvdWJsZWRvdCAhPT0gJy4uJykKKwkJeworCQkJJGNvbGxbJ2RpcnMnXVtdID0gJGRvdWJsZWRvdDsKKwkJCSRkb3VibGVkb3QgPSBudWxsOworCQl9CisKKworCQkvLyB3ZSBtdXN0IGNoZWNrIGFnYWluc3QgdGh1bWJuYWlsIHBhdGggYWdhaW4sIGFzIGl0IE1BWSBiZSBhbiBhbGlhcywgaXRzZWxmIQorCQkkdG5kaXIgPSBudWxsOworCQlpZiAoISRzZWVfdGh1bWJuYWlsX2RpcikKKwkJeworCQkJJHRuX3VyaSA9ICR0aGlzLT5vcHRpb25zWyd0aHVtYm5haWxQYXRoJ107CisJCQkkdG5wYXRoID0gJHRoaXMtPnVybF9wYXRoMmZpbGVfcGF0aCgkdG5fdXJpKTsKKwkJCS8vaWYgKEZpbGVNYW5hZ2VyVXRpbGl0eTo6c3RhcnRzd2l0aCgkZGlyLCAkdG5wYXRoKSkKKwkJCS8vICByZXR1cm4gZmFsc2U7CisKKwkJCSR0bnBhcmVudCA9IHNlbGY6OmdldFBhcmVudERpcigkdG5wYXRoKTsKKwkJCSRqdXN0X2JlbG93X3RodW1ibmFpbF9kaXIgPSBGaWxlTWFuYWdlclV0aWxpdHk6OnN0YXJ0c3dpdGgoJGRpciwgJHRucGFyZW50KTsKKworCQkJaWYgKCRqdXN0X2JlbG93X3RodW1ibmFpbF9kaXIpCisJCQl7CisJCQkJJHRuZGlyID0gYmFzZW5hbWUoc3Vic3RyKCR0bl91cmksIDAsIC0xKSk7CisJCQl9CisJCX0KKworCisJCS8vIG5vdyBzZWUgaWYgd2UgbmVlZCB0byBhZGQgYW55IGFsaWFzZXMgYXMgZWxlbWVudHM6CisJCWlmIChpc3NldCgkdGhpcy0+c2NhbmRpcl9hbGlhc19sdV9hcnIpICYmICFlbXB0eSgkdGhpcy0+c2NhbmRpcl9hbGlhc19sdV9hcnJbJGRpcl0pKQorCQl7CisJCQkkYV9iYXNlID0gJHRoaXMtPnNjYW5kaXJfYWxpYXNfbHVfYXJyWyRkaXJdOworCQkJJGQgPSAkY29sbFsnZGlycyddOworCQkJJGYgPSAkY29sbFsnZmlsZXMnXTsKKwkJCWZvcmVhY2goJGFfYmFzZVtmYWxzZV0gYXMgJGFfZWxlbSkKKwkJCXsKKwkJCQlpZiAoIWluX2FycmF5KCRhX2VsZW0sICRkLCB0cnVlKSAmJiAkdG5kaXIgIT09ICRhX2VsZW0KKwkJCQkJJiYgKCEoJGZsYWdzICYgR0xPQl9OT0hJRERFTikgfHwgJGFfZWxlbVswXSAhPSAnLicpICkKKwkJCQl7CisJCQkJCS8vJGNvbGxbJ3NwZWNpYWxfaW5kaXJfbWFwcGluZ3MnXVsxXVtdID0gYXJyYXlfcHVzaCgkY29sbFsnZGlycyddLCAkYV9lbGVtKSAtIDE7CisJCQkJCSRjb2xsWydkaXJzJ11bXSA9ICRhX2VsZW07CisJCQkJfQorCQkJfQorCQkJZm9yZWFjaCgkYV9iYXNlW3RydWVdIGFzICRhX2VsZW0pCisJCQl7CisJCQkJaWYgKCFpbl9hcnJheSgkYV9lbGVtLCAkZiwgdHJ1ZSkKKwkJCQkJJiYgKCEoJGZsYWdzICYgR0xPQl9OT0hJRERFTikgfHwgJGFfZWxlbVswXSAhPSAnLicpICkKKwkJCQl7CisJCQkJCS8vJGNvbGxbJ3NwZWNpYWxfaW5kaXJfbWFwcGluZ3MnXVswXVtdID0gYXJyYXlfcHVzaCgkY29sbFsnZmlsZXMnXSwgJGFfZWxlbSkgLSAxOworCQkJCQkkY29sbFsnZmlsZXMnXVtdID0gJGFfZWxlbTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvLyBtYWtlIHN1cmUgd2Uga2VlcCB0aGUgZ3VhcmFudGVlIHRoYXQgdGhlICcuLicgZW50cnksIHdoZW4gcHJlc2VudCwgaXMgdGhlIHZlcnkgbGFzdCBvbmUsIGludGFjdDoKKwkJaWYgKCRkb3VibGVkb3QgIT09IG51bGwpCisJCXsKKwkJCSRjb2xsWydkaXJzJ11bXSA9ICRkb3VibGVkb3Q7CisJCX0KKworCQlyZXR1cm4gJGNvbGw7CisJfQorCisKKworCisJLyoqCisJICogUmV0dXJuIHRoZSBmaWxlc3lzdGVtIGFic29sdXRlIHBhdGggZm9yIHRoZSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBVUkkgcGF0aC4KKwkgKgorCSAqIFRha2VzIHRoZSBbJ0FsaWFzZXMnXSBtYXBwaW5nIGFycmF5IGludG8gYWNjb3VudDsgaXQgaXMgcHJvY2Vzc2VkIGZyb20gdG9wIHRvIGJvdHRvbSBhIGxhIG1vZF9hbGlhcy4KKwkgKgorCSAqIE5vdGU6IGFzIGl0IHVzZXMgbm9ybWFsaXplKCksIGFueSBpbGxlZ2FsIHBhdGggd2lsbCB0aHJvdyBhbiBGaWxlTWFuYWdlckV4Y2VwdGlvbgorCSAqCisJICogUmV0dXJucyBhIGZ1bGx5IG5vcm1hbGl6ZWQgZmlsZXN5c3RlbSBhYnNvbHV0ZSBwYXRoLgorCSAqLworCXB1YmxpYyBmdW5jdGlvbiB1cmxfcGF0aDJmaWxlX3BhdGgoJHVybF9wYXRoKQorCXsKKwkJJHVybF9wYXRoID0gJHRoaXMtPnJlbDJhYnNfdXJsX3BhdGgoJHVybF9wYXRoKTsKKworCQkkcmVwbGFjZWRfc29tZSA9IGZhbHNlOworCQlpZiAoaXNfYXJyYXkoJHRoaXMtPm9wdGlvbnNbJ0FsaWFzZXMnXSkpCisJCXsKKwkJCSRhbGlhc19hcnIgPSAkdGhpcy0+b3B0aW9uc1snQWxpYXNlcyddOworCisJCQlmb3JlYWNoKCRhbGlhc19hcnIgYXMgJGFfdXJsID0+ICRhX3BhdGgpCisJCQl7CisJCQkJLy8gaWYgdGhlIHVyaSBwYXRoIG1hdGNoZXMgdXMgKG9yIGF0IGxlYXN0IG91ciBzdGFydCksIHRoZW4gYXBwbHkgdGhlIG1hcHBpbmcuCisJCQkJLy8gTWFrZSBzdXJlIHRvIG9ubHkgbWF0Y2ggZW50aXJlIHBhdGggZWxlbWVudHM6CisJCQkJaWYgKEZpbGVNYW5hZ2VyVXRpbGl0eTo6c3RhcnRzV2l0aCgkdXJsX3BhdGggLiAnLycsICRhX3VybCAuICcvJykpCisJCQkJeworCQkJCQkkdXJsX3BhdGggPSAkYV9wYXRoIC4gc3Vic3RyKCR1cmxfcGF0aCwgc3RybGVuKCRhX3VybCkpOworCQkJCQkkcmVwbGFjZWRfc29tZSA9IHRydWU7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKCEkcmVwbGFjZWRfc29tZSkKKwkJeworCQkJJHVybF9wYXRoID0gcGFyZW50Ojp1cmxfcGF0aDJmaWxlX3BhdGgoJHVybF9wYXRoKTsKKwkJfQorCisJCXJldHVybiAkdXJsX3BhdGg7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSBmaWxlc3lzdGVtIGFic29sdXRlIHBhdGggZm9yIHRoZSByZWxhdGl2ZSBVUkkgcGF0aCBvciBhYnNvbHV0ZSBMRUdBTCBVUkkgcGF0aC4KKwkgKgorCSAqIE5vdGU6IGFzIGl0IHVzZXMgbm9ybWFsaXplKCksIGFueSBpbGxlZ2FsIHBhdGggd2lsbCB0aHJvdyBhbiBGaWxlTWFuYWdlckV4Y2VwdGlvbgorCSAqCisJICogUmV0dXJucyBhIGZ1bGx5IG5vcm1hbGl6ZWQgZmlsZXN5c3RlbSBhYnNvbHV0ZSBwYXRoLgorCSAqLworCXB1YmxpYyBmdW5jdGlvbiBsZWdhbF91cmxfcGF0aDJmaWxlX3BhdGgoJHVybF9wYXRoKQorCXsKKwkJJHVybF9wYXRoID0gJHRoaXMtPnJlbDJhYnNfbGVnYWxfdXJsX3BhdGgoJHVybF9wYXRoKTsKKworCQkkdXJsX3BhdGggPSBzdWJzdHIoJHRoaXMtPm9wdGlvbnNbJ2RpcmVjdG9yeSddLCAwLCAtMSkgLiAkdXJsX3BhdGg7CisKKwkJJHBhdGggPSAkdGhpcy0+dXJsX3BhdGgyZmlsZV9wYXRoKCR1cmxfcGF0aCk7CisKKwkJcmV0dXJuICRwYXRoOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9Db25uZWN0b3IvSUQzLmNsYXNzLnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvQ29ubmVjdG9yL0lEMy5jbGFzcy5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExNTM5MwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvQ29ubmVjdG9yL0lEMy5jbGFzcy5waHAKQEAgLTAsMCArMSw2MzIgQEAKKzw/cGhwDQorDQorLyoqIA0KKyAqICBPYnRhaW4gaWQzIGluZm9ybWF0aW9uIGZyb20gbXAzIGZpbGVzLg0KKyAqDQorICogIEBhdXRob3IgSmFtZXMgU2xlZW1hbiAoamFtZXNAZ29nby5jby5ueikNCisgKiAgQHdlYnNpdGUgaHR0cDovL3d3dy5nb2dvLmNvLm56DQorICogIEBsaWNlbnNlIE1JVCAgKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UpDQorICogDQorICogIFdpdGggdGhhbmtzIGZvciBpbnNwaXJhdGlvbiBhbmQgYSBzbWFsbCBhbW91bnQgb2YgY29kZSB0bzoNCisgKiAgQXV0aG9yICAgIDogZGU3Nw0KKyAqICBXZWJzaXRlICAgOiB3d3cuZGU3Ny5jb20NCisgKiAgQ2xhc3MgZGVzYyAgOiBodHRwOi8vZGU3Ny5jb20vcGhwL3BocC1jbGFzcy1ob3ctdG8tcmVhZC1pZDN2Mi10YWdzLWZyb20tbXAzLWZpbGVzDQorICogIENsYXNzIGRlc2MgIDogaHR0cDovL2RlNzcuY29tL3BocC9waHAtY2xhc3MtaG93LXRvLXJlYWQtaWQzLXYxLXRhZy1mcm9tLW1wMy1maWxlcw0KKyAqDQorICogIEFja25vd2xlZGdlbWVudCB0bzogaHR0cDovL3d3dy5hdXRpc3RpY2kub3JnL2VybWVzL2luZGV4LnBocD9wYWc9MSZwb3N0PTE1DQorICogIHdoaWNoIEkgd2FzIGdvaW5nIHRvIHVzZSwgYnV0IGxvb2tlZCB0byBiZSBhIGJpdCBmcmFnaWxlDQorICovDQorIA0KK2NsYXNzIGlkM1BhcnNlcg0KK3sgDQorICBwdWJsaWMgJGVycm9yOw0KKyAgDQorICANCisgIHByaXZhdGUgJHRhZ3MgPSBhcnJheSgNCisgICAgLy8gVjIuMy80DQorICAgICdUQUxCJyA9PiAnYWxidW0nLA0KKyAgICAnVENPTicgPT4gJ2dlbnJlJywNCisgICAgJ1RFTkMnID0+ICdlbmNvZGVyJywNCisgICAgJ1RJVDInID0+ICd0aXRsZScsDQorICAgICdUUEUxJyA9PiAnYXJ0aXN0JywNCisgICAgJ1RQRTInID0+ICdlbnNlbWJsZScsDQorICAgICdUWUVSJyA9PiAneWVhcicsDQorICAgICdUQ09NJyA9PiAnY29tcG9zZXInLA0KKyAgICAnVENPUCcgPT4gJ2NvcHlyaWdodCcsDQorICAgICdUUkNLJyA9PiAndHJhY2snLA0KKyAgICAnV1hYWCcgPT4gJ3VybCcsDQorICAgICdDT01NJyA9PiAnY29tbWVudCcsDQorICAgIA0KKyAgICAvLyBWMi4yICAgICANCisgICAgJ1RBTCcgPT4gJ2FsYnVtJywgICAgIA0KKyAgICAnVENPJyA9PiAnZ2VucmUnLCAgICAgDQorICAgICdURU4nID0+ICdlbmNvZGVyJywNCisgICAgJ1RUMicgPT4gJ3RpdGxlJywgICAgIA0KKyAgICAnVFAxJyA9PiAnYXJ0aXN0JywNCisgICAgJ1RQMicgPT4gJ2Vuc2VtYmxlJywNCisgICAgJ1RZRScgPT4gJ3llYXInLA0KKyAgICAnVENNJyA9PiAnY29tcG9zZXInLA0KKyAgICAnVENSJyA9PiAnY29weXJpZ2h0JywNCisgICAgJ1RSSycgPT4gJ3RyYWNrJywNCisgICAgJ1dYWCcgPT4gJ3VybCcsDQorICAgICdDT00nID0+ICdjb21tZW50Jw0KKyAgKTsNCisgIA0KKyAgLy8gSUQzdjEgR2VucmUgTWFwcGluZw0KKyAgcHJpdmF0ZSAkZ2VucmVzID0gYXJyYXkoDQorICAgICdCbHVlcycsDQorICAgICdDbGFzc2ljIFJvY2snLA0KKyAgICAnQ291bnRyeScsDQorICAgICdEYW5jZScsDQorICAgICdEaXNjbycsDQorICAgICdGdW5rJywNCisgICAgJ0dydW5nZScsDQorICAgICdIaXAtSG9wJywNCisgICAgJ0phenonLA0KKyAgICAnTWV0YWwnLA0KKyAgICAnTmV3IEFnZScsDQorICAgICdPbGRpZXMnLA0KKyAgICAnT3RoZXInLA0KKyAgICAnUG9wJywNCisgICAgJ1ImQicsDQorICAgICdSYXAnLA0KKyAgICAnUmVnZ2FlJywNCisgICAgJ1JvY2snLA0KKyAgICAnVGVjaG5vJywNCisgICAgJ0luZHVzdHJpYWwnLA0KKyAgICAnQWx0ZXJuYXRpdmUnLA0KKyAgICAnU2thJywNCisgICAgJ0RlYXRoIE1ldGFsJywNCisgICAgJ1ByYW5rcycsDQorICAgICdTb3VuZHRyYWNrJywNCisgICAgJ0V1cm8tVGVjaG5vJywNCisgICAgJ0FtYmllbnQnLA0KKyAgICAnVHJpcC1Ib3AnLA0KKyAgICAnVm9jYWwnLA0KKyAgICAnSmF6eitGdW5rJywNCisgICAgJ0Z1c2lvbicsDQorICAgICdUcmFuY2UnLA0KKyAgICAnQ2xhc3NpY2FsJywNCisgICAgJ0luc3RydW1lbnRhbCcsDQorICAgICdBY2lkJywNCisgICAgJ0hvdXNlJywNCisgICAgJ0dhbWUnLA0KKyAgICAnU291bmQgQ2xpcCcsDQorICAgICdHb3NwZWwnLA0KKyAgICAnTm9pc2UnLA0KKyAgICAnQWx0ZXJuUm9jaycsDQorICAgICdCYXNzJywNCisgICAgJ1NvdWwnLA0KKyAgICAnUHVuaycsDQorICAgICdTcGFjZScsDQorICAgICdNZWRpdGF0aXZlJywNCisgICAgJ0luc3RydW1lbnRhbCBQb3AnLA0KKyAgICAnSW5zdHJ1bWVudGFsIFJvY2snLA0KKyAgICAnRXRobmljJywNCisgICAgJ0dvdGhpYycsDQorICAgICdEYXJrd2F2ZScsDQorICAgICdUZWNobm8tSW5kdXN0cmlhbCcsDQorICAgICdFbGVjdHJvbmljJywNCisgICAgJ1BvcC1Gb2xrJywNCisgICAgJ0V1cm9kYW5jZScsDQorICAgICdEcmVhbScsDQorICAgICdTb3V0aGVybiBSb2NrJywNCisgICAgJ0NvbWVkeScsDQorICAgICdDdWx0JywNCisgICAgJ0dhbmdzdGEnLA0KKyAgICAnVG9wIDQwJywNCisgICAgJ0NocmlzdGlhbiBSYXAnLA0KKyAgICAnUG9wL0Z1bmsnLA0KKyAgICAnSnVuZ2xlJywNCisgICAgJ05hdGl2ZSBBbWVyaWNhbicsDQorICAgICdDYWJhcmV0JywNCisgICAgJ05ldyBXYXZlJywNCisgICAgJ1BzeWNoYWRlbGljJywNCisgICAgJ1JhdmUnLA0KKyAgICAnU2hvd3R1bmVzJywNCisgICAgJ1RyYWlsZXInLA0KKyAgICAnTG8tRmknLA0KKyAgICAnVHJpYmFsJywNCisgICAgJ0FjaWQgUHVuaycsDQorICAgICdBY2lkIEphenonLA0KKyAgICAnUG9sa2EnLA0KKyAgICAnUmV0cm8nLA0KKyAgICAnTXVzaWNhbCcsDQorICAgICdSb2NrICYgUm9sbCcsDQorICAgICdIYXJkIFJvY2snLA0KKyAgICAnRm9saycsDQorICAgICdGb2xrLVJvY2snLA0KKyAgICAnTmF0aW9uYWwgRm9saycsDQorICAgICdTd2luZycsDQorICAgICdGYXN0IEZ1c2lvbicsDQorICAgICdCZWJvYicsDQorICAgICdMYXRpbicsDQorICAgICdSZXZpdmFsJywNCisgICAgJ0NlbHRpYycsDQorICAgICdCbHVlZ3Jhc3MnLA0KKyAgICAnQXZhbnRnYXJkZScsDQorICAgICdHb3RoaWMgUm9jaycsDQorICAgICdQcm9ncmVzc2l2ZSBSb2NrJywNCisgICAgJ1BzeWNoZWRlbGljIFJvY2snLA0KKyAgICAnU3ltcGhvbmljIFJvY2snLA0KKyAgICAnU2xvdyBSb2NrJywNCisgICAgJ0JpZyBCYW5kJywNCisgICAgJ0Nob3J1cycsDQorICAgICdFYXN5IExpc3RlbmluZycsDQorICAgICdBY291c3RpYycsDQorICAgICdIdW1vdXInLA0KKyAgICAnU3BlZWNoJywNCisgICAgJ0NoYW5zb24nLA0KKyAgICAnT3BlcmEnLA0KKyAgICAnQ2hhbWJlciBNdXNpYycsDQorICAgICdTb25hdGEnLA0KKyAgICAnU3ltcGhvbnknLA0KKyAgICAnQm9vdHkgQmFzcycsDQorICAgICdQcmltdXMnLA0KKyAgICAnUG9ybiBHcm9vdmUnLA0KKyAgICAnU2F0aXJlJywNCisgICAgJ1Nsb3cgSmFtJywNCisgICAgJ0NsdWInLA0KKyAgICAnVGFuZ28nLA0KKyAgICAnU2FtYmEnLA0KKyAgICAnRm9sa2xvcmUnLA0KKyAgICAnQmFsbGFkJywNCisgICAgJ1Bvd2VyIEJhbGxhZCcsDQorICAgICdSaHl0aG1pYyBTb3VsJywNCisgICAgJ0ZyZWVzdHlsZScsDQorICAgICdEdWV0JywNCisgICAgJ1B1bmsgUm9jaycsDQorICAgICdEcnVtIFNvbG8nLA0KKyAgICAnQWNhcGVsbGEnLA0KKyAgICAnRXVyby1Ib3VzZScsDQorICAgICdEYW5jZSBIYWxsJw0KKyAgICApOyAgIA0KKyAgDQorICAvKiogR2l2ZW4gYSBwYXRoIHRvIGFuIG1wMyBmaWxlLCBpbnRlcnJvZ2F0ZSB0aGUgZmlsZSB0byBmaW5kIGFueSBpZDMgdGFncyBpbiBpdC4NCisgICAqICByZXR1cm4gYW4gYXNzb2NpYXRpdmUgYXJyYXkNCisgICAqICBjYW4gaGFuZGxlIGlkM3YxLCB2Mi4yLCB2Mi4zIGFuZCB2Mi40LCBob3dldmVyIGl0IGlzIG5vdCBhIGNvbXBsZXRlIHBhcnNlciwganVzdCBnb29kLWVub3VnaA0KKyAgICogIGNvbXByZXNzZWQgYW5kIGVuY3J5cHRlZCBmcmFtZXMgYXJlIHNraXBwZWQsIG9ubHkgKFQpZXh0IGFuZCAoVyl3dyBmcmFtZXMgYXJlIHR5cGljYWxseSByZXR1cm5lZA0KKyAgICoNCisgICAqLw0KKyAgDQorICBwdWJsaWMgZnVuY3Rpb24gcmVhZCgkZmlsZSkNCisgIHsNCisgICAgJGYgPSBmb3BlbigkZmlsZSwgJ3InKTsNCisgICAgJHJlc3VsdCA9IGFycmF5KCk7DQorICAgIGlmKCBmcmVhZCgkZiwgMykgPT0gJ0lEMycpDQorICAgIHsNCisgICAgICAvLyBJRDN2MiB0YWcgYXQgc3RhcnQgb2YgZmlsZSwgdXNlIHRoYXQNCisgICAgICByZXdpbmQoJGYpOw0KKyAgICAgICRyZXN1bHQgPSBhcnJheV9tZXJnZSgkcmVzdWx0LCAkdGhpcy0+cmVhZF92MigkZikpOw0KKyAgICB9DQorICAgIA0KKyAgICBpZighY291bnQoJHJlc3VsdCkpDQorICAgIHsNCisgICAgICBmc2VlaygkZiwgLTEwLCBTRUVLX0VORCk7DQorICAgICAgaWYoIGZyZWFkKCRmLCAzKSA9PSAnM0RJJyApDQorICAgICAgew0KKyAgICAgICAgLy8gTG9va2luZyBhdCBhIGZvb3RlciBvZiBhbiBJRDN2MiwgZmluZCB0aGUgbGVuZ3RoIGFuZCBzZWVrIGJhY2t3YXJkcyB0byB0aGUgc3RhcnQNCisgICAgICAgIGZzZWVrKCRmLCAtMTAsIFNFRUtfRU5EKTsNCisgICAgICAgICRyZXN1bHQgPSBhcnJheV9tZXJnZSgkcmVzdWx0LCAkdGhpcy0+cmVhZF92MigkZikpOw0KKyAgICAgIH0NCisgICAgfQ0KKyAgICANCisgICAgaWYoIWNvdW50KCRyZXN1bHQpKQ0KKyAgICB7DQorICAgICAgZnNlZWsoJGYsIC0xMjgsIFNFRUtfRU5EKTsNCisgICAgICBpZiggZnJlYWQoJGYsIDMpID09ICdUQUcnICkNCisgICAgICB7DQorICAgICAgICAvLyB2MSB0YWcgICAgICAgIA0KKyAgICAgICAgZnNlZWsoJGYsIC0xMjgsIFNFRUtfRU5EKTsNCisgICAgICAgICRyZXN1bHQgPSBhcnJheV9tZXJnZSgkcmVzdWx0LCAkdGhpcy0+cmVhZF92MSgkZikpOw0KKyAgICAgIH0NCisgICAgfQ0KKyAgICANCisgICAgaWYoIWNvdW50KCRyZXN1bHQpKQ0KKyAgICB7DQorICAgICAgLy8gU3RpbGwgbm90aGluZywgbGV0J3MgbWFrZSBhIHRpdGxlIGFueXdheQ0KKyAgICAgICRyZXN1bHRbJ3RpdGxlJ10gPSB0cmltKHByZWdfcmVwbGFjZSgnLyhcLm1wM3wlMjB8W18rIC1dfCheWzAtOV0rXC4/KSkrL2knLCAnICcsIGJhc2VuYW1lKCRmaWxlKSkpOw0KKyAgICAgICRyZXN1bHRbJ2lkMyddICAgPSAnMCc7DQorICAgIH0NCisgICAgDQorICAgIHJldHVybiAkcmVzdWx0Ow0KKyAgIC8vIGVjaG8gKCJOTyBJRDMgKCRmaWxlKVxuIik7DQorICB9DQorICANCisgIC8qKiBEZWNvZGUgdGhlIHZhbHVlIG9mIGEgdGV4dCBmcmFtZSwgcmV0dXJucyBpbiBVVEYtOCBhbHdheXMgKi8NCisgIA0KKyAgcHJpdmF0ZSBmdW5jdGlvbiBkZWNvZGVfdjIzX3RleHRfdmFsdWUoJHRhZykNCisgIHsNCisgICAgLy9tYl9jb252ZXJ0X2VuY29kaW5nIGlzIGNvcnJ1cHRlZCBpbiBzb21lIHZlcnNpb25zIG9mIFBIUCBzbyBJIHVzZSBpY29udg0KKyAgICBzd2l0Y2ggKG9yZCgkdGFnWzBdKSkNCisgICAgew0KKyAgICAgIGNhc2UgMDogLy9JU08tODg1OS0xICAgICAgICANCisgICAgICAgICAgcmV0dXJuIEBpY29udignSVNPLTg4NTktMScsICdVVEYtOCcsIHN1YnN0cigkdGFnLCAxKSk7DQorICAgICAgY2FzZSAxOiAvL1VURi0xNiBCT00gICAgICANCisgICAgICAgICAgcmV0dXJuIEBpY29udignVVRGLTE2TEUnLCAnVVRGLTgvL0lHTk9SRScsICBzdWJzdHIoJHRhZy5jaHIoMHgwMCksIDMpKTsNCisgICAgICBjYXNlIDI6IC8vVVRGLTE2QkUNCisgICAgICAgICAgcmV0dXJuIEBpY29udignVVRGLTE2QkUnLCAnVVRGLTgnLCBzdWJzdHIoJHRhZy5jaHIoMHgwMCksIDMpKTsNCisgICAgICBjYXNlIDM6IC8vVVRGLTgNCisgICAgICAgICAgcmV0dXJuIHN1YnN0cigkdGFnLCAxKTsNCisgICAgfQ0KKyAgICByZXR1cm4gZmFsc2U7DQorICB9DQorICAgICAgICAgIA0KKyAgLyoqIFNvbWUgc2l6ZSBmaWVsZHMgaW4gMi4zKyBoZWFkZXJzIGFyZSAic3luYyBzYWZlIiwgd2UgbmVlZCB0byBzdHJpcCBvdXQgY2VydGFpbiBiaXRzIGFuZCByZWJ1aWxkIHRoZSBzaXplIGludGVnZXIsIGJpdHdpc2UuDQorICAgKi8NCisNCisgIHByaXZhdGUgZnVuY3Rpb24gZGVzeW5jX3NpemUoJGhlYWRlcnNpemUpDQorICB7DQorICAgIC8vIFRoZSBoZWFkZXIgc2l6ZSBuZWVkcyBmaXhpbmcgYnkgc3RyaXBwaW5nIG91dCBjZXJ0YWluIGJpdHMgKDFzdCwgOXRoLCAxN3RoLCAyNXRoKQ0KKyAgICAvLyAwMTExMTExMTEgPT09IDB4N0YNCisgICAgJHNpemUgPSAgICAkaGVhZGVyc2l6ZSAmIDB4N0Y7IC8vIEdyYWIgbGVhc3Qgc2lnIDcgYml0cw0KKyAgICAgICAgICAgICAgICRoZWFkZXJzaXplID0gJGhlYWRlcnNpemUgPj4gODsgICAvLyBzaGlmdCBvdXQgOCBiaXRzDQorICAgIA0KKyAgICAkc2l6ZSA9ICAgICgoJGhlYWRlcnNpemUgJiAweDdGKTw8Nyl8JHNpemU7IC8vIGdyYWIgbGVhc3Qgc2lnIDcgYml0cyBhbmQgc2hpZnQgNyB0byB0aGUgbGVmdCB0aGVuIGFkZCB0byBzaXplDQorICAgICAgICAgICAgICAgJGhlYWRlcnNpemUgPSAkaGVhZGVyc2l6ZSA+PiA4OyAgIC8vIHNoaWZ0IG91dCA4IGJpdHMNCisgICAgDQorICAgICRzaXplID0gICAgKCgkaGVhZGVyc2l6ZSAmIDB4N0YpPDwxNCl8JHNpemU7IC8vIGdyYWIgbGVhc3Qgc2lnIDcgYml0cyBhbmQgc2hpZnQgMTQgdG8gdGhlIGxlZnQgdGhlbiBhZGQgdG8gc2l6ZQ0KKyAgICAgICAgICAgICAgICRoZWFkZXJzaXplID0gJGhlYWRlcnNpemUgPj4gODsgICAvLyBzaGlmdCBvdXQgOCBiaXRzDQorICAgIA0KKyAgICAkc2l6ZSA9ICAgICgoJGhlYWRlcnNpemUgJiAweDdGKTw8MjEpfCRzaXplOyAvLyBncmFiIGxlYXN0IHNpZyA3IGJpdHMgYW5kIHNoaWZ0IDIxIHRvIHRoZSBsZWZ0IHRoZW4gYWRkIHRvIHNpemUNCisgICAgICAgICAgICAgICAkaGVhZGVyc2l6ZSA9ICRoZWFkZXJzaXplID4+IDg7ICAgLy8gc2hpZnQgb3V0IDggYml0cyAgICANCisgICAgDQorICAgIHJldHVybiAkc2l6ZTsNCisgIH0NCisNCisgIC8qKiBSZWFkIGEgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSBzdHJlYW0gY291bnRlZCBBRlRFUiByZS1zeW5jaG9uaXNhdGlvbiAoaWYgbmVjZXNzYXJ5KS4NCisgICAqICBUaGUgc3BlYyBpc24ndCB2ZXJ5IGNsZWFyLCBidXQgSSBiZWxpZXZlIHRoYXQgaW4gYSAyLjIvMyBpZiB0aGUgdW5zeW5jaHJvbmlzZWQgZmxhZyBpcyBvbiwgDQorICAgKiAgdGhlbiB0aGUgZnJhbWUgaGVhZGVycyBhcmUgdW5zeW5jaHJvbmlzZWQgYWxzbywgd2hpY2ggbWVhbnMgaWYgdGhleSBoYXBwZW4gdG8gaW5jbHVkZSBhbiBGRjAwDQorICAgKiAgc2ltcGx5IHJlYWRpbmcgMTAgcmF3IGJ5dGVzIHdvdWxkIG5vdCBnZXQgYSBwcm9wZXIgZnJhbWUgaGVhZGVyLg0KKyAgICogIFdlIGhhdmUgdG8gdW5zeW5jaHJvbmlzZSBhcyB3ZSBnbyBhbmQgbWF5YmUgcmVhZHkgbW9yZSBieXRlcy4NCisgICAqDQorICAgKiAgSW4gY29udHJhc3QsIG9uY2Ugd2UgSEFWRSB0aGF0IGZyYW1lIGhlYWRlciwgdGhlIHNpemUgc3BlY2lmaWVkIGluIHRoYXQgaGVhZGVyIGlzIHRoZSB1bnN5bmNocm9uaXNlZCBzaXplDQorICAgKiAgb2YgdGhlIGZyYW1lIHdpdGhvdXQgaGVhZGVyLCBzbyB3ZSBzaG91bGQgZ2V0IHRoYXQgc3BlY2lmaWMgIyBvZiBieXRlcyBpbiB0aGF0IGNhc2UuDQorICAgKi8NCisgICANCisgIHByaXZhdGUgZnVuY3Rpb24gZnJlYWRfaWQzX3N5bmNocm9uaXNlZF9sZW5ndGgoJGYsICRudW0sICRJc1Vuc3luY2hyb25pc2VkLCAmJExlZnRUb1JlYWQpDQorICB7DQorICAgICRmcmFtZSA9ICcnOw0KKyAgICAkdG90YWxyZWFkID0gMDsNCisgICAgDQorICAgIHdoaWxlKChzdHJsZW4oJGZyYW1lKSA8ICRudW0pICYmICRMZWZ0VG9SZWFkICYmICFmZW9mKCRmKSkNCisgICAgew0KKyAgICAgICRMZWZ0VG9SZWFkIC09ICRudW0tc3RybGVuKCRmcmFtZSk7DQorICAgICAgJGZyYW1lIC49IGZyZWFkKCRmLCAkbnVtLXN0cmxlbigkZnJhbWUpKTsgICAgICAgICAgDQorICAgICAgaWYoJElzVW5zeW5jaHJvbmlzZWQpIA0KKyAgICAgIHsNCisgICAgICAgICRmcmFtZSA9IHN0cl9yZXBsYWNlKGNocigweGZmKS5jaHIoMHgwMCksIGNocigweGZmKSwgJGZyYW1lKTsgICAgICAgICAgDQorICAgICAgfQ0KKyAgICAgIA0KKyAgICAgIHdoaWxlKHN0cmxlbigkZnJhbWUpICYmIChvcmQoJGZyYW1lWzBdKSA9PSAwKSkNCisgICAgICB7DQorICAgICAgICAvLyBXZSBoYXZlIHBpY2tlZCB1cCBhIE5VTCBwYWRkaW5nPyAgICAgICAgDQorICAgICAgICAkZnJhbWUgPSBzdWJzdHIoJGZyYW1lLDEpOw0KKyAgICAgIH0NCisgICAgfQ0KKyAgICANCisgICAgcmV0dXJuICRmcmFtZTsNCisgIH0NCisgIA0KKyAgLyoqIEdpdmVuIGEgZmlsZSBoYW5kbGUgc2Vla2VkIHRvIHRoZSBmaXJzdCBieXRlIG9mIGFuIGlkM3YyLlggaGVhZGVyLCANCisgICAqICByZXR1cm4gYW4gYXJyYXkgb2YgUHJvcGVydHkgPT4gVmFsdWUgZm9yIHRoZSBpZDMgcHJvcGVydGllcyB3ZSBjYW4gaGFuZGxlIChjdXJyZW50bHkgVCBhbmQgVyBwcmVmaXhlcykNCisgICAqICBpZiBhIHByb3BlcnR5IGhhcyBhIGdpdmVuIG5hbWUgaW4gaWQzUGFyc2VyRGU3Nzo6JHRhZ3MsIHRoZW4gdGhpcyB3aWxsIGJlIHNldCBhbHNvIChhcyBhIHJlZmVyZW5jZSkuDQorICAgKi8NCisgICANCisgIHByaXZhdGUgZnVuY3Rpb24gcmVhZF92MigkZikNCisgIHsgICANCisgICAgJGhlYWRlciA9IGZyZWFkKCRmLCAxMCk7DQorICAgICRoZWFkZXIgPSBAdW5wYWNrKCJhM3NpZ25hdHVyZS9DMXZlcnNpb25fbWFqb3IvQzF2ZXJzaW9uX21pbm9yL0MxZmxhZ3MvTnNpemUiLCAkaGVhZGVyKTsNCisgICAgJGhlYWRlclsnc2l6ZSddID0gJHRoaXMtPmRlc3luY19zaXplKCRoZWFkZXJbJ3NpemUnXSk7DQorICAgIA0KKyAgICBpZigkaGVhZGVyWydzaWduYXR1cmUnXSA9PSAnM0RJJykNCisgICAgew0KKyAgICAgIC8vIFRoaXMgaXMgYSBmb290ZXIgZm9yIGEgdjQsIHNlZWsgdXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBkYXRhIGFmdGVyIHRoZSBoZWFkZXINCisgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJlYWQgdGhlIGhlYWRlciwgaXQncyB0aGUgc2FtZSBhcyB0aGUgZm9vdGVyICAgICAgDQorICAgICAgZnNlZWsoJGYsIDAtJGhlYWRlclsnc2l6ZSddLTEwLCBTRUVLX0NVUik7IA0KKyAgICB9DQorICAgIA0KKyAgICAkaGVhZGVyWyd2ZXJzaW9uX21ham9yJ10gPSBoZXhkZWMoJGhlYWRlclsndmVyc2lvbl9tYWpvciddKTsNCisgICAgJGhlYWRlclsndmVyc2lvbl9taW5vciddID0gaGV4ZGVjKCRoZWFkZXJbJ3ZlcnNpb25fbWlub3InXSk7DQorICAgIA0KKyAgICBzd2l0Y2goJGhlYWRlclsndmVyc2lvbl9tYWpvciddKQ0KKyAgICB7DQorICAgICAgY2FzZSA0Og0KKyAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5yZWFkX3YyNCgkZiwgJGhlYWRlcik7ICAgICAgIA0KKyAgICAgICAgYnJlYWs7DQorICAgICAgICANCisgICAgICBjYXNlIDM6DQorICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnJlYWRfdjIzKCRmLCAkaGVhZGVyKTsgICAgICAgIA0KKyAgICAgICAgYnJlYWs7DQorICAgICAgICANCisgICAgICBjYXNlIDI6DQorICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnJlYWRfdjIyKCRmLCAkaGVhZGVyKTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgICAgDQorICAgICAgZGVmYXVsdDogICAgICAgIA0KKyAgICAgICAgJHJlc3VsdCA9IGFycmF5KCk7DQorICAgICAgICBicmVhazsNCisgICAgfQ0KKyAgICANCisgICAgaWYoY291bnQoJHJlc3VsdCkpICRyZXN1bHRbJ2lkMyddID0gJzIuJy4kaGVhZGVyWyd2ZXJzaW9uX21ham9yJ10uJy4nLiRoZWFkZXJbJ3ZlcnNpb25fbWlub3InXTsNCisgICAgIA0KKyAgICByZXR1cm4gJHJlc3VsdDsgDQorICB9IA0KKyAgDQorICBwcml2YXRlIGZ1bmN0aW9uIHJlYWRfdjIyKCRmLCAkaGVhZGVyKQ0KKyAgeyAgICANCisgICAgJExlZnRUb1JlYWQgPSAkaGVhZGVyWydzaXplJ107DQorICAgICRJc1Vuc3luY2hyb25pc2VkICA9ICRoZWFkZXJbJ2ZsYWdzJ10gJiAoMTw8Nyk7DQorICAgICRJc0NvbXByZXNzZWQgICAgICA9ICRoZWFkZXJbJ2ZsYWdzJ10gJiAoMTw8Nik7DQorICAgIA0KKyAgICBpZigkSXNDb21wcmVzc2VkKSB7IHJldHVybiBhcnJheSgpOyB9DQorICAgIA0KKyAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHNob3VsZCBiZSBsb29raW5nIGF0IGEgZnJhbWUgaGVhZGVyIG9uIHRoZSBzdHJlYW0gICANCisgICAgJHJlc3VsdCA9IGFycmF5KCk7DQorICAgIHdoaWxlKCgkTGVmdFRvUmVhZCA+IDYpICYmICFmZW9mKCRmKSkNCisgICAgeyAgICANCisgICAgICAkZnJhbWUgPSBmcmVhZCgkZiwgNik7Ly8kdGhpcy0+ZnJlYWRfaWQzX3N5bmNocm9uaXNlZF9sZW5ndGgoJGYsIDYsICRJc1Vuc3luY2hyb25pc2VkLCAkTGVmdFRvUmVhZCk7DQorICAgICAgICAgICAgDQorICAgICAgaWYoc3RybGVuKCRmcmFtZSkgPCA2KSBjb250aW51ZTsgLy8gQmFkIGZyYW1lDQorICAgICAgJGZyYW1lID0gdW5wYWNrKCdhM2lkL0Mzc2l6ZScsICRmcmFtZSApOyAgDQorICAgICAgJGZyYW1lWydzaXplJ10gPSAoJGZyYW1lWydzaXplMSddPDwxNCl8KCRmcmFtZVsnc2l6ZTInXTw8Nyl8KCRmcmFtZVsnc2l6ZTMnXSk7DQorICAgICAgDQorICAgICAgaWYoJGZyYW1lWydzaXplJ10gPT0gMCkgYnJlYWs7IC8vIFdlIGFyZSBub3cgaW50byBwYWRkaW5nIGFyZWEuICAgICAgDQorICAgICAgaWYoJGZyYW1lWydzaXplJ10gPiAoMTAyNCoxMDI0KSkgeyBmc2VlaygkZiwgJGZyYW1lWydzaXplJ10sIFNFRUtfQ1VSKTsgJExlZnRUb1JlYWQgLT0gJGZyYW1lWydzaXplJ107IGNvbnRpbnVlOyB9DQorDQorICAgICAgLy8gUmVhZCB0aGUgdmFsdWUgb2YgdGhlIGZyYW1lICAgICAgICANCisgICAgICAkdmFsdWUgPSBmcmVhZCgkZiwgJGZyYW1lWydzaXplJ10pOw0KKyAgICAgICRMZWZ0VG9SZWFkIC09ICRmcmFtZVsnc2l6ZSddOw0KKyAgICAgICRmcmFtZVsndmFsdWUnXSA9ICR2YWx1ZTsNCisgICAgICANCisgICAgICBpZigkSXNVbnN5bmNocm9uaXNlZCkgDQorICAgICAgeyANCisgICAgICAgICR2YWx1ZSA9IHN0cl9yZXBsYWNlKGNocigweGZmKS5jaHIoMHgwMCksIGNocigweGZmKSwgJHZhbHVlKTsgDQorICAgICAgfQ0KKyAgICAgICAgICANCisgICAgICBzd2l0Y2goJGZyYW1lWydpZCddWzBdKQ0KKyAgICAgIHsNCisgICAgICAgIGNhc2UgJ1QnOg0KKyAgICAgICAgICAkdmFsdWUgPSAkdGhpcy0+ZGVjb2RlX3YyM190ZXh0X3ZhbHVlKCR2YWx1ZSk7DQorICAgICAgICAgIC8vIFRoZSBvbGQgaWQzdjEgZ2VucmUgY2FuIGJlIGluY2x1ZGVkIGluIHRoaXMgdGV4dHVhbCBpbmZvcm1hdGlvbg0KKyAgICAgICAgICBpZigkZnJhbWVbJ2lkJ10gPT0gJ1RDTycgJiYgcHJlZ19tYXRjaCgnL1woKFswLTldKylcKS8nLCAkdmFsdWUsICRNKSkNCisgICAgICAgICAgew0KKyAgICAgICAgICAgIGlmKGlzc2V0KCR0aGlzLT5nZW5yZXNbJE1bMV1dKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAkdmFsdWUgPSAkdGhpcy0+Z2VucmVzWyRNWzFdXTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgIH0NCisgICAgICAgICAgJHJlc3VsdFskZnJhbWVbJ2lkJ11dID0gJHZhbHVlOw0KKyAgICAgICAgICBpZihpc3NldCgkdGhpcy0+dGFnc1skZnJhbWVbJ2lkJ11dKSkgDQorICAgICAgICAgIHsNCisgICAgICAgICAgICAkcmVzdWx0WyR0aGlzLT50YWdzWyRmcmFtZVsnaWQnXV1dID0mICRyZXN1bHRbJGZyYW1lWydpZCddXTsNCisgICAgICAgICAgfQ0KKyAgICAgICAgICBicmVhazsNCisgICAgICAgICAgDQorICAgICAgICBjYXNlICdXJzoNCisgICAgICAgICAgJHJlc3VsdFskZnJhbWVbJ2lkJ11dID0gJHZhbHVlOw0KKyAgICAgICAgICBpZihpc3NldCgkdGhpcy0+dGFnc1skZnJhbWVbJ2lkJ11dKSkgDQorICAgICAgICAgIHsNCisgICAgICAgICAgICAkcmVzdWx0WyR0aGlzLT50YWdzWyRmcmFtZVsnaWQnXV1dID0mICRyZXN1bHRbJGZyYW1lWydpZCddXTsNCisgICAgICAgICAgfSAgICAgICAgICANCisgICAgICAgIGJyZWFrOw0KKyAgICAgIH0NCisgICAgfQ0KKyAgICAgICAgDQorICAgIHJldHVybiAkcmVzdWx0Ow0KKyAgDQorICB9DQorICANCisgIHByaXZhdGUgZnVuY3Rpb24gcmVhZF92MjQoJGYsICRoZWFkZXIpDQorICB7ICAgICAgICANCisgICAgJElzVW5zeW5jaHJvbmlzZWQgID0gJGhlYWRlclsnZmxhZ3MnXSAmICgxPDw3KTsNCisgICAgJEhhc0V4dGVuZGVkSGVhZGVyID0gJGhlYWRlclsnZmxhZ3MnXSAmICgxPDw2KTsNCisgICAgJElzRXhwZXJpbWVudGFsICAgID0gJGhlYWRlclsnZmxhZ3MnXSAmICgxPDw1KTsNCisgICAgICAgICAgIA0KKyAgICAkTGVmdFRvUmVhZCA9ICRoZWFkZXJbJ3NpemUnXTsNCisgICAgaWYoJEhhc0V4dGVuZGVkSGVhZGVyKQ0KKyAgICB7ICAgIA0KKyAgICAgICRleEhlYWRlciA9IHVucGFjaygnTnNpemUnLCBmcmVhZCgkZiwgNCkpOw0KKyAgICAgICRleEhlYWRlclsnc2l6ZSddID0gJHRoaXMtPmRlc3luY19zaXplKCRleEhlYWRlclsnc2l6ZSddKTsNCisgICAgICANCisgICAgICBmcmVhZCgkZiwgJGV4SGVhZGVyWydzaXplJ10tNCk7IC8vIERvbnQnIGNhcmUgYWJvdXQgdGhpcyB3ZSBhcmUganVzdCBnZXR0aW5nIHJpZCBvZiBpdC4NCisgICAgICAkTGVmdFRvUmVhZCAtPSAkZXhIZWFkZXJbJ3NpemUnXTsNCisgICAgfQ0KKyAgICANCisgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBzaG91bGQgYmUgbG9va2luZyBhdCBhIGZyYW1lIGhlYWRlciBvbiB0aGUgc3RyZWFtDQorICAgDQorICAgICRyZXN1bHQgPSBhcnJheSgpOw0KKyAgICB3aGlsZSgoJExlZnRUb1JlYWQgPiAxMCkgJiYgIWZlb2YoJGYpKQ0KKyAgICB7ICAgIA0KKyAgICAgICRmcmFtZSA9ICR0aGlzLT5mcmVhZF9pZDNfc3luY2hyb25pc2VkX2xlbmd0aCgkZiwgMTAsICRJc1Vuc3luY2hyb25pc2VkLCAkTGVmdFRvUmVhZCk7DQorDQorICAgICAgaWYoc3RybGVuKCRmcmFtZSkgPCAxMCkgY29udGludWU7IC8vIEJhZCBmcmFtZQ0KKyAgICAgICRmcmFtZSA9IHVucGFjaygnYTRpZC9Oc2l6ZS9DMmZsYWdzJywgJGZyYW1lICk7ICAgICAgICANCisgICAgICAkZnJhbWVbJ3NpemUnXSA9ICR0aGlzLT5kZXN5bmNfc2l6ZSgkZnJhbWVbJ3NpemUnXSk7DQorICAgICAgDQorICAgICAgaWYoJGZyYW1lWydzaXplJ10gPT0gMCkgYnJlYWs7IC8vIFdlIGFyZSBub3cgaW50byBwYWRkaW5nIGFyZWEuDQorICAgICAgDQorICAgICAgaWYoICRmcmFtZVsnZmxhZ3MyJ10gJiAoMTw8NykgLy8gQ29tcHJlc3NlZA0KKyAgICAgIHx8ICAkZnJhbWVbJ2ZsYWdzMiddICYgKDE8PDYpIC8vIEVuY3J5cHRlZA0KKyAgICAgICkNCisgICAgICB7ICAgICAgICAgDQorICAgICAgICAvLyBDYW4ndCB3b3JrIHdpdGggdGhlc2UNCisgICAgICAgIGZzZWVrKCRmLCAkZnJhbWVbJ3NpemUnXSwgU0VFS19DVVIpOyAvLyBEb250JyBjYXJlIGFib3V0IHRoaXMgd2UgYXJlIGp1c3QgZ2V0dGluZyByaWQgb2YgaXQuDQorICAgICAgICAkTGVmdFRvUmVhZCAtPSAkZnJhbWVbJ3NpemUnXTsNCisgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgIH0NCisgICAgICANCisgICAgICBpZigkZnJhbWVbJ2ZsYWdzMiddICYgKDE8PDUpKSAvLyBHcm91cGluZw0KKyAgICAgIHsNCisgICAgICAgIGZyZWFkKCRmLDEpOyAvLyBHZXQgcmlkIG9mIHRoZSBncm91cCBieXRlICAgICAgICANCisgICAgICAgICRMZWZ0VG9SZWFkIC09IDE7DQorICAgICAgICAkZnJhbWVbJ3NpemUnXS0tOyAvLyBpdCBpcyBpbmNsdWRlZCBpbiB0aGUgZnJhbWUgc2l6ZT8NCisgICAgICB9DQorICAgICAgDQorICAgICAgaWYoJGZyYW1lWydmbGFnczInXSAmIDEpIC8vIERhdGEgbGVuZ3RoDQorICAgICAgew0KKyAgICAgICAgZnJlYWQoJGYsNCk7IC8vIEdldCByaWQgb2YgdGhlIGdyb3VwIGJ5dGUgICAgICAgIA0KKyAgICAgICAgJExlZnRUb1JlYWQgLT0gNDsNCisgICAgICAgICRmcmFtZVsnc2l6ZSddIC09IDQ7IC8vIGl0IGlzIGluY2x1ZGVkIGluIHRoZSBmcmFtZSBzaXplPw0KKyAgICAgIH0NCisgICAgICANCisgICAgICBpZigkZnJhbWVbJ3NpemUnXSA+ICgxMDI0KjEwMjQpKSB7IGZzZWVrKCRmLCAkZnJhbWVbJ3NpemUnXSwgU0VFS19DVVIpOyAkTGVmdFRvUmVhZCAtPSAkZnJhbWVbJ3NpemUnXTsgY29udGludWU7IH0NCisNCisgICAgICAvLyBSZWFkIHRoZSB2YWx1ZSBvZiB0aGUgZnJhbWUgICAgICANCisgICAgICAkdmFsdWUgPSBmcmVhZCgkZiwgJGZyYW1lWydzaXplJ10pOw0KKyAgICAgICRMZWZ0VG9SZWFkIC09ICRmcmFtZVsnc2l6ZSddOw0KKyAgICAgICRmcmFtZVsndmFsdWUnXSA9ICR2YWx1ZTsNCisgICAgICANCisgICAgICBpZigkSXNVbnN5bmNocm9uaXNlZCkgDQorICAgICAgeyANCisgICAgICAgICR2YWx1ZSA9IHN0cl9yZXBsYWNlKGNocigweGZmKS5jaHIoMHgwMCksIGNocigweGZmKSwgJHZhbHVlKTsgDQorICAgICAgfQ0KKyAgICAgICAgICANCisgICAgICBzd2l0Y2goJGZyYW1lWydpZCddWzBdKQ0KKyAgICAgIHsNCisgICAgICAgIGNhc2UgJ1QnOg0KKyAgICAgICAgICAkdmFsdWUgPSAkdGhpcy0+ZGVjb2RlX3YyM190ZXh0X3ZhbHVlKCR2YWx1ZSk7DQorICAgICAgICAgIC8vIFRoZSBvbGQgaWQzdjEgZ2VucmUgY2FuIGJlIGluY2x1ZGVkIGluIHRoaXMgdGV4dHVhbCBpbmZvcm1hdGlvbg0KKyAgICAgICAgICBpZigkZnJhbWVbJ2lkJ10gPT0gJ1RDT04nICYmIHByZWdfbWF0Y2goJy9cKChbMC05XSspXCkvJywgJHZhbHVlLCAkTSkpDQorICAgICAgICAgIHsNCisgICAgICAgICAgICBpZihpc3NldCgkdGhpcy0+Z2VucmVzWyRNWzFdXSkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgJHZhbHVlID0gJHRoaXMtPmdlbnJlc1skTVsxXV07DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICB9DQorICAgICAgICAgICRyZXN1bHRbJGZyYW1lWydpZCddXSA9ICR2YWx1ZTsNCisgICAgICAgICAgaWYoaXNzZXQoJHRoaXMtPnRhZ3NbJGZyYW1lWydpZCddXSkpIA0KKyAgICAgICAgICB7DQorICAgICAgICAgICAgJHJlc3VsdFskdGhpcy0+dGFnc1skZnJhbWVbJ2lkJ11dXSA9JiAkcmVzdWx0WyRmcmFtZVsnaWQnXV07DQorICAgICAgICAgIH0NCisgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIA0KKyAgICAgICAgY2FzZSAnVyc6DQorICAgICAgICAgICRyZXN1bHRbJGZyYW1lWydpZCddXSA9ICR2YWx1ZTsNCisgICAgICAgICAgaWYoaXNzZXQoJHRoaXMtPnRhZ3NbJGZyYW1lWydpZCddXSkpIA0KKyAgICAgICAgICB7DQorICAgICAgICAgICAgJHJlc3VsdFskdGhpcy0+dGFnc1skZnJhbWVbJ2lkJ11dXSA9JiAkcmVzdWx0WyRmcmFtZVsnaWQnXV07DQorICAgICAgICAgIH0gICAgICAgICAgDQorICAgICAgICBicmVhazsNCisgICAgICB9DQorICAgIH0NCisgICAgLy8gZWNobyAiVkVSU0lPTiA0XG4iOyAgIA0KKyAgICByZXR1cm4gJHJlc3VsdDsNCisgIH0NCisNCisgIC8qKiBHaXZlbiBhIGZpbGUgaGFuZGxlIHNlZWtlZCB0byB0aGUgZmlyc3QgYnl0ZSBhZnRlciB0aGUgaGVhZGVyLCBhbmQgdGhlIGhlYWRlciBkZWNvZGVkIGluIGFuIGFycmF5LCANCisgICAqICByZXR1cm4gYW4gYXJyYXkgb2YgUHJvcGVydHkgPT4gVmFsdWUgZm9yIHRoZSBpZDMgcHJvcGVydGllcyB3ZSBjYW4gaGFuZGxlIChjdXJyZW50bHkgVCBhbmQgVyBwcmVmaXhlcykNCisgICAqICBpZiBhIHByb3BlcnR5IGhhcyBhIGdpdmVuIG5hbWUgaW4gaWQzUGFyc2VyRGU3Nzo6JHRhZ3MsIHRoZW4gdGhpcyB3aWxsIGJlIHNldCBhbHNvIChhcyBhIHJlZmVyZW5jZSkuDQorICAgKi8NCisgICANCisgIHByaXZhdGUgZnVuY3Rpb24gcmVhZF92MjMoJGYsICRoZWFkZXIpDQorICB7ICAgICAgICANCisgICAgJElzVW5zeW5jaHJvbmlzZWQgID0gJGhlYWRlclsnZmxhZ3MnXSAmICgxPDw3KTsNCisgICAgJEhhc0V4dGVuZGVkSGVhZGVyID0gJGhlYWRlclsnZmxhZ3MnXSAmICgxPDw2KTsNCisgICAgJElzRXhwZXJpbWVudGFsICAgID0gJGhlYWRlclsnZmxhZ3MnXSAmICgxPDw1KTsNCisgICAgICAgIA0KKyAgIA0KKyAgICAkTGVmdFRvUmVhZCA9ICRoZWFkZXJbJ3NpemUnXTsNCisgICAgaWYoJEhhc0V4dGVuZGVkSGVhZGVyKQ0KKyAgICB7ICAgIA0KKyAgICAgICRleEhlYWRlciA9IHVucGFjaygnTnNpemUnLCBmcmVhZCgkZiwgNCkpOw0KKyAgICAgIGZyZWFkKCRmLCAkZXhIZWFkZXJbJ3NpemUnXSk7IC8vIERvbnQnIGNhcmUgYWJvdXQgdGhpcyB3ZSBhcmUganVzdCBnZXR0aW5nIHJpZCBvZiBpdC4NCisgICAgICAkTGVmdFRvUmVhZCAtPSA0ICsgJGV4SGVhZGVyWydzaXplJ107DQorICAgIH0NCisgICAgDQorICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ugc2hvdWxkIGJlIGxvb2tpbmcgYXQgYSBmcmFtZSBoZWFkZXIgb24gdGhlIHN0cmVhbQ0KKyAgIA0KKyAgICAkcmVzdWx0ID0gYXJyYXkoKTsNCisgICAgd2hpbGUoKCRMZWZ0VG9SZWFkID4gMTApICYmICFmZW9mKCRmKSkNCisgICAgeyAgICANCisgICAgICAkZnJhbWUgPSAkdGhpcy0+ZnJlYWRfaWQzX3N5bmNocm9uaXNlZF9sZW5ndGgoJGYsIDEwLCAkSXNVbnN5bmNocm9uaXNlZCwgJExlZnRUb1JlYWQpOw0KKw0KKyAgICAgIGlmKHN0cmxlbigkZnJhbWUpIDwgMTApIGNvbnRpbnVlOyAvLyBCYWQgZnJhbWUNCisgICAgICAkZnJhbWUgPSB1bnBhY2soJ2E0aWQvTnNpemUvQzJmbGFncycsICRmcmFtZSApOyAgICAgICAgICAgIA0KKyAgICAgIGlmKCRmcmFtZVsnc2l6ZSddID09IDApIGJyZWFrOyAvLyBXZSBhcmUgbm93IGludG8gcGFkZGluZyBhcmVhLg0KKyAgICAgIA0KKyAgICAgIGlmKCAkZnJhbWVbJ2ZsYWdzMiddICYgKDE8PDcpIC8vIENvbXByZXNzZWQNCisgICAgICB8fCAgJGZyYW1lWydmbGFnczInXSAmICgxPDw2KSAvLyBFbmNyeXB0ZWQNCisgICAgICApDQorICAgICAgeyAgICAgICAgIA0KKyAgICAgICAgLy8gQ2FuJ3Qgd29yayB3aXRoIHRoZXNlDQorICAgICAgICBmc2VlaygkZiwgJGZyYW1lWydzaXplJ10sIFNFRUtfQ1VSKTsgLy8gRG9udCcgY2FyZSBhYm91dCB0aGlzIHdlIGFyZSBqdXN0IGdldHRpbmcgcmlkIG9mIGl0Lg0KKyAgICAgICAgJExlZnRUb1JlYWQgLT0gJGZyYW1lWydzaXplJ107DQorICAgICAgICBjb250aW51ZTsNCisgICAgICB9DQorICAgICAgDQorICAgICAgaWYoJGZyYW1lWydmbGFnczInXSAmICgxPDw1KSkgLy8gR3JvdXBpbmcNCisgICAgICB7DQorICAgICAgICBmcmVhZCgkZiwxKTsgLy8gR2V0IHJpZCBvZiB0aGUgZ3JvdXAgYnl0ZSAgICAgICAgDQorICAgICAgICAkTGVmdFRvUmVhZCAtPSAxOw0KKyAgICAgICAgJGZyYW1lWydzaXplJ10tLTsgLy8gaXQgaXMgaW5jbHVkZWQgaW4gdGhlIGZyYW1lIHNpemUNCisgICAgICB9DQorICAgICAgDQorICAgICAgaWYoJGZyYW1lWydzaXplJ10gPiAoMTAyNCoxMDI0KSkgeyBmc2VlaygkZiwgJGZyYW1lWydzaXplJ10sIFNFRUtfQ1VSKTsgJExlZnRUb1JlYWQgLT0gJGZyYW1lWydzaXplJ107IGNvbnRpbnVlOyB9DQorDQorICAgICAgLy8gUmVhZCB0aGUgdmFsdWUgb2YgdGhlIGZyYW1lICAgICAgICANCisgICAgICAkdmFsdWUgPSBmcmVhZCgkZiwgJGZyYW1lWydzaXplJ10pOw0KKyAgICAgICRMZWZ0VG9SZWFkIC09ICRmcmFtZVsnc2l6ZSddOw0KKyAgICAgICRmcmFtZVsndmFsdWUnXSA9ICR2YWx1ZTsNCisgICAgICANCisgICAgICBpZigkSXNVbnN5bmNocm9uaXNlZCkgDQorICAgICAgeyANCisgICAgICAgICR2YWx1ZSA9IHN0cl9yZXBsYWNlKGNocigweGZmKS5jaHIoMHgwMCksIGNocigweGZmKSwgJHZhbHVlKTsgDQorICAgICAgfQ0KKyAgICAgICAgICANCisgICAgICBzd2l0Y2goJGZyYW1lWydpZCddWzBdKQ0KKyAgICAgIHsNCisgICAgICAgIGNhc2UgJ1QnOg0KKyAgICAgICAgICAkdmFsdWUgPSAkdGhpcy0+ZGVjb2RlX3YyM190ZXh0X3ZhbHVlKCR2YWx1ZSk7DQorICAgICAgICAgIC8vIFRoZSBvbGQgaWQzdjEgZ2VucmUgY2FuIGJlIGluY2x1ZGVkIGluIHRoaXMgdGV4dHVhbCBpbmZvcm1hdGlvbg0KKyAgICAgICAgICBpZigkZnJhbWVbJ2lkJ10gPT0gJ1RDT04nICYmIHByZWdfbWF0Y2goJy9cKChbMC05XSspXCkvJywgJHZhbHVlLCAkTSkpDQorICAgICAgICAgIHsNCisgICAgICAgICAgICBpZihpc3NldCgkdGhpcy0+Z2VucmVzWyRNWzFdXSkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgJHZhbHVlID0gJHRoaXMtPmdlbnJlc1skTVsxXV07DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICB9DQorICAgICAgICAgICRyZXN1bHRbJGZyYW1lWydpZCddXSA9ICR2YWx1ZTsNCisgICAgICAgICAgaWYoaXNzZXQoJHRoaXMtPnRhZ3NbJGZyYW1lWydpZCddXSkpIA0KKyAgICAgICAgICB7DQorICAgICAgICAgICAgJHJlc3VsdFskdGhpcy0+dGFnc1skZnJhbWVbJ2lkJ11dXSA9JiAkcmVzdWx0WyRmcmFtZVsnaWQnXV07DQorICAgICAgICAgIH0NCisgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIA0KKyAgICAgICAgY2FzZSAnVyc6DQorICAgICAgICAgICRyZXN1bHRbJGZyYW1lWydpZCddXSA9ICR2YWx1ZTsNCisgICAgICAgICAgaWYoaXNzZXQoJHRoaXMtPnRhZ3NbJGZyYW1lWydpZCddXSkpIA0KKyAgICAgICAgICB7DQorICAgICAgICAgICAgJHJlc3VsdFskdGhpcy0+dGFnc1skZnJhbWVbJ2lkJ11dXSA9JiAkcmVzdWx0WyRmcmFtZVsnaWQnXV07DQorICAgICAgICAgIH0gICAgICAgICAgDQorICAgICAgICBicmVhazsNCisgICAgICB9DQorICAgIH0NCisgICAgICAgIA0KKyAgICByZXR1cm4gJHJlc3VsdDsNCisgIH0NCisNCisgIC8qKiBHaXZlbiBhIGZpbGUgaGFuZGxlIHNlZWtlZCB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgaGVhZGVyDQorICAgKiAgcmV0dXJuIGFuIGFycmF5IG9mIFByb3BlcnR5ID0+IFZhbHVlIGZvciB0aGUgaWQzIHByb3BlcnRpZXMgd2UgY2FuIGhhbmRsZSANCisgICAqICB2MSBwcm9wZXJ0aWVzIGFyZSBvbmx5IHRpdGxlLCBhcnRpc3QsIGFsYnVtLCB5ZWFyLCBjb21tZW50IGFuZCBnZW5yZQ0KKyAgICovDQorICAgDQorICBwdWJsaWMgZnVuY3Rpb24gcmVhZF92MSgkZikNCisgIHsgICAgDQorICAgIGZzZWVrKCRmLCAtMTI4LCBTRUVLX0VORCk7DQorICAgICRpZDMgPSBmcmVhZCgkZiwgMTI4KTsNCisgICAgDQorICAgICRpZDMgPSBAdW5wYWNrKCJhM3NpZ25hdHVyZS9hMzB0aXRsZS9hMzBhcnRpc3QvYTMwYWxidW0vYTR5ZWFyL2EzMGNvbW1lbnQvYzFnZW5yZSIsICRpZDMpOw0KKyAgICAkaWQzWydnZW5yZSddID0gQCR0aGlzLT5nZW5yZXNbJGlkM1snZ2VucmUnXV07DQorICAgIA0KKyAgICBpZiAoISRpZDNbJ3NpZ25hdHVyZSddID09ICdUQUcnKQ0KKyAgICB7DQorICAgICAgJHRoaXMtPmVycm9yID0gJ1RoaXMgZmlsZSBkb2VzIG5vdCBjb250YWluIElEMyB2MSB0YWcnOyAgIA0KKyAgICAgIHJldHVybiBmYWxzZTsgICANCisgICAgfQ0KKyAgICANCisgICAgdW5zZXQoJGlkM1snc2lnbmF0dXJlJ10pOw0KKyAgICAkaWQzWydpZDMnXSA9IDE7ICAgIA0KKyAgICByZXR1cm4gJGlkMzsgIA0KKyAgfQ0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0Nvbm5lY3Rvci9JbWFnZS5jbGFzcy5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0Nvbm5lY3Rvci9JbWFnZS5jbGFzcy5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgzNTA3OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvQ29ubmVjdG9yL0ltYWdlLmNsYXNzLnBocApAQCAtMCwwICsxLDc5OSBAQAorPD9waHAKKy8qKgorICogSW1hZ2UgLSBQcm92aWRlcyBhbiBJbnRlcmZhY2UgdG8gdGhlIEdELUxpYnJhcnkgZm9yIGltYWdlIG1hbmlwdWxhdGlvbgorICoKKyAqCisgKiBAbGljZW5zZSBNSVQtc3R5bGUgTGljZW5zZQorICogQGF1dGhvciBDaHJpc3RvcGggUG9qZXIgPGNocmlzdG9waC5wb2plckBnbWFpbC5jb20+CisgKiBAYXV0aG9yIEFkZGl0aW9uczogRmFiaWFuIFZvZ2Vsc3RlbGxlciA8ZmFiaWFuLnZvZ2Vsc3RlbGxlckBnbWFpbC5jb20+CisgKiBAYXV0aG9yIEFkZGl0aW9uczogR2VyIEhvYmJlbHQgPGdlckBob2JiZWx0LmNvbT4KKyAqCisgKiBAbGluayBodHRwOi8vd3d3LmJpbi1jby5jb20vcGhwL3NjcmlwdHMvY2xhc3Nlcy9nZF9pbWFnZS8gQmFzZWQgb24gd29yayBieSAiQmlubnkgViBBIgorICoKKyAqIEB2ZXJzaW9uIDEuMTIKKyAqIENoYW5nZWxvZworICogICAgLSAxLjEyIGFkZGVkIG1lbW9yeSB1c2FnZSBndWVzdGltYXRvciB0byB3YXJuIHlvdSB3aGVuIGF0dGVtcHRpbmcgdG8gcHJvY2VzcyBvdmVybGFyZ2UgaW1hZ2VzIHdoaWNoIHdpbGwgc2lsZW50bHkgYnV0IGZhdGFseSBjcmFzaCBQSFAKKyAqICAgIC0gMS4xMSBmaXhlZCAkcmF0aW8gaW4gcmVzaXplIHdoZW4gYm90aCB2YWx1ZXMgYXJlIGdpdmVuCisgKiAgICAtIDEuMSBhZGQgcmVhbCByZXNpemluZywgd2l0aCBjb21wYXJpc29uIG9mIHJhdGlvCisgKiAgICAtIDEuMDEgc21hbGwgZml4ZXMgaW4gcHJvY2VzcyBtZXRob2QgYW5kIGFkZCBzZXQgbWVtb3J5IGxpbWl0IHRvIGEgaGlnaGVyIHZhbHVlCisgKi8KKworCitkZWZpbmUoJ0lNQUdFX1BST0NFU1NJTkdfTUVNT1JZX01BWF9VU0FHRScsIDE2MCk7IC8vIG1lbW9yeV9saW1pdCBzZXR0aW5nLCBpbiBNZWdhYnl0ZXM7IGluY3JlYXNlIHdoZW4gSW1hZ2UgY2xhc3MgcmVwb3J0cyB0b28gb2Z0ZW4gdGhlIGltYWdlcyBkb24ndCBmaXQgaW4gbWVtb3J5LgorCitjbGFzcyBJbWFnZSB7CisJLyoqCisJICogVGhlIHBhdGggdG8gdGhlIGltYWdlIGZpbGUKKwkgKgorCSAqIEB2YXIgc3RyaW5nCisJICovCisJcHJpdmF0ZSAkZmlsZTsKKwkvKioKKwkgKiBUaGUgaW1hZ2UgcmVzb3VyY2UKKwkgKgorCSAqIEB2YXIgcmVzb3VyY2UKKwkgKi8KKwlwcml2YXRlICRpbWFnZTsKKwkvKioKKwkgKiBNZXRhZGF0YSByZWdhcmRpbmcgdGhlIGltYWdlCisJICoKKwkgKiBAdmFyIGFycmF5CisJICovCisJcHJpdmF0ZSAkbWV0YTsKKwkvKioKKwkgKiBGbGFncyB3aGV0aGVyIHRoZSBpbWFnZSBoYXMgYmVlbiBtYW5pcHVsYXRlZCBieSB0aGlzIGluc3RhbmNlIGluIGFueSB3YXkgYW5kIGhhcyBub3QgeWV0IGJlZW4gc2F2ZWQgdG8gZGlzay4KKwkgKi8KKwlwcml2YXRlICRkaXJ0eTsKKworCS8qKgorCSAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgVGhlIHBhdGggdG8gdGhlIGltYWdlIGZpbGUKKwkgKi8KKwlwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGZpbGUpCisJeworCQkkdGhpcy0+ZGlydHkgPSBmYWxzZTsKKworCQkkdGhpcy0+bWV0YSA9IHNlbGY6OmNoZWNrRmlsZUZvclByb2Nlc3NpbmcoJGZpbGUpOworCisJCS8vIG9ubHkgc2V0IHRoZSBuZXcgbWVtb3J5IGxpbWl0IG9mIElNQUdFX1BST0NFU1NJTkdfTUVNT1JZX01BWF9VU0FHRSBNQiB3aGVuIHRoZSBjb25maWd1cmVkIG9uZSBpcyBzbWFsbGVyOgorCQlpZiAoJHRoaXMtPm1ldGFbJ2ZpbGVpbmZvJ11bJ21lbW9yeV9saW1pdCddIDwgSU1BR0VfUFJPQ0VTU0lOR19NRU1PUllfTUFYX1VTQUdFICogMTAyNCAqIDEwMjQpCisJCXsKKwkJCWluaV9zZXQoJ21lbW9yeV9saW1pdCcsIElNQUdFX1BST0NFU1NJTkdfTUVNT1JZX01BWF9VU0FHRSAuICdNJyk7IC8vICBoYW5kbGUgbGFyZ2UgaW1hZ2VzCisJCX0KKworCQkkdGhpcy0+ZmlsZSA9ICRmaWxlOworCisJCWlmKCR0aGlzLT5tZXRhWydleHQnXSAhPSAnanBlZycpCisJCXsKKwkJCSR0aGlzLT5pbWFnZSA9ICR0aGlzLT5jcmVhdGUoKTsKKworCQkJJGZuID0gJ2ltYWdlY3JlYXRlZnJvbScuJHRoaXMtPm1ldGFbJ2V4dCddOworCQkJJG9yaWdpbmFsID0gZmFsc2U7CisJCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCRmbikpCisJCQl7CisJCQkJJG9yaWdpbmFsID0gQCRmbigkZmlsZSk7CisJCQl9CisJCQlpZiAoISRvcmlnaW5hbCkgdGhyb3cgbmV3IEV4Y2VwdGlvbignaW1hZ2VjcmVhdGVfZmFpbGVkOicgLiAkZm4pOworCisJCQlpZiAoIUBpbWFnZWNvcHlyZXNhbXBsZWQoJHRoaXMtPmltYWdlLCAkb3JpZ2luYWwsIDAsIDAsIDAsIDAsICR0aGlzLT5tZXRhWyd3aWR0aCddLCAkdGhpcy0+bWV0YVsnaGVpZ2h0J10sICR0aGlzLT5tZXRhWyd3aWR0aCddLCAkdGhpcy0+bWV0YVsnaGVpZ2h0J10pKQorCQkJCXRocm93IG5ldyBFeGNlcHRpb24oJ2N2dDJ0cnVlY29sb3JfZmFpbGVkOicgLiAkdGhpcy0+bWV0YVsnd2lkdGgnXSAuICcgeCAnIC4gJHRoaXMtPm1ldGFbJ2hlaWdodCddKTsKKwkJCWltYWdlZGVzdHJveSgkb3JpZ2luYWwpOworCQkJdW5zZXQoJG9yaWdpbmFsKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCSR0aGlzLT5pbWFnZSA9IEBpbWFnZWNyZWF0ZWZyb21qcGVnKCRmaWxlKTsKKwkJCWlmICghJHRoaXMtPmltYWdlKSB0aHJvdyBuZXcgRXhjZXB0aW9uKCdpbWFnZWNyZWF0ZV9mYWlsZWQ6aW1hZ2VjcmVhdGVmcm9tanBlZycpOworCQl9CisJfQorCisJcHVibGljIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoKXsKKwkJaWYoIWVtcHR5KCR0aGlzLT5pbWFnZSkpIGltYWdlZGVzdHJveSgkdGhpcy0+aW1hZ2UpOworCQl1bnNldCgkdGhpcy0+aW1hZ2UpOworCX0KKworCS8qKgorCSAqIFJldHVybiBhbiBhcnJheSBvZiBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyAocmF0aGVyOiB0aGUgc2Vjb25kIHBhcnRzIG9mIHRoZSBtaW1lIHR5cGVzISkKKwkgKgorCSAqIEEgdHlwZSBpcyBsaXN0ZWQgYXMgJ3N1cHBvcnRlZCcgd2hlbiBpdCBjYW4gYmUgUkVBRC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFN1cHBvcnRlZFR5cGVzKCkKKwl7CisJCXN0YXRpYyAkc3VwcG9ydGVkX3R5cGVzOworCisJCWlmIChlbXB0eSgkc3VwcG9ydGVkX3R5cGVzKSkKKwkJeworCQkJJGdkaSA9IGdkX2luZm8oKTsKKworCQkJJHN1cHBvcnRlZF90eXBlcyA9IGFycmF5KCk7CisJCQlpZiAoIWVtcHR5KCRnZGlbJ0dJRiBSZWFkIFN1cHBvcnQnXSkpCisJCQkJJHN1cHBvcnRlZF90eXBlc1tdID0gJ2dpZic7CisJCQlpZiAoIWVtcHR5KCRnZGlbJ1BORyBTdXBwb3J0J10pKQorCQkJCSRzdXBwb3J0ZWRfdHlwZXNbXSA9ICdwbmcnOworCQkJaWYgKCFlbXB0eSgkZ2RpWydKUEVHIFN1cHBvcnQnXSkgfHwgIWVtcHR5KCRnZGlbJ0pQRyBTdXBwb3J0J10pIC8qIHByZSA1LjMuMCAqLyApCisJCQkJJHN1cHBvcnRlZF90eXBlc1tdID0gJ2pwZWcnOworCQkJaWYgKCFlbXB0eSgkZ2RpWydXQk1QIFN1cHBvcnQnXSkpCisJCQkJJHN1cHBvcnRlZF90eXBlc1tdID0gJ3dibXAnOworCQkJaWYgKCFlbXB0eSgkZ2RpWydYUE0gU3VwcG9ydCddKSkKKwkJCQkkc3VwcG9ydGVkX3R5cGVzW10gPSAneHBtJzsKKwkJCWlmICghZW1wdHkoJGdkaVsnWEJNIFN1cHBvcnQnXSkpCisJCQkJJHN1cHBvcnRlZF90eXBlc1tdID0gJ3hibSc7CisJCQkkc3VwcG9ydGVkX3R5cGVzW10gPSAnYm1wJzsKKwkJfQorCQlyZXR1cm4gJHN1cHBvcnRlZF90eXBlczsKKwl9CisKKwkvKioKKwkgKiBHdWVzdGltYXRlcyBob3cgbXVjaCBSQU0gbWVtb3J5IG11c3QgYmUgYXZhaWxhYmxlIHRvIGJlIGFibGUgdG8gcHJvY2VzcyB0aGUgZ2l2ZW4gaW1hZ2UgZmlsZS4KKwkgKgorCSAqIEByZXR1cm4gYW4gYXJyYXkgd2l0aCBrZXksdmFsdWUgcGFpcnM6ICduZWVkZWQnIHNwZWNpZmllcyB0aGUgZ3Vlc3RpbWF0ZWQgbWluaW11bSBhbW91bnQgb2YgZnJlZQorCSAqICAgICAgICAgbWVtb3J5IHJlcXVpcmVkIGZvciB0aGUgZ2l2ZW4gZmlsZSwgJ21lbW9yeV9saW1pdCcgaXMgYW4gaW50ZWdlciB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIHRvdGFsCisJICogICAgICAgICBhbW91bnQgb2YgYnl0ZXMgcmVzZXJ2ZWQgZm9yIFBIUCBzY3JpcHQsIHdoaWxlICd3aWxsX2ZpdCcgaXMgYSBib29sZWFuIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyCisJICogICAgICAgICB0aGUgZ2l2ZW4gaW1hZ2UgZmlsZSBjb3VsZCBwb3RlbnRpYWxseSBiZSBsb2FkZWQgYW5kIHByb2Nlc3NlZCB3aXRob3V0IGNhdXNpbmcgZmF0YWwgb3V0LW9mLW1lbW9yeQorCSAqICAgICAgICAgZXJyb3JzLgorCSAqICAgICAgICAgVGhlIGRpcmVjdG9yeSBzZXBhcmF0b3IgYW5kIHBhdGgtY29ycmVjdGVkIGZpbGVzcGVjIGlzIHJldHVybmVkIGluIHRoZSAncGF0aCcgdmFsdWUuCisJICoKKwkgKiBAbm90ZSBUaGUgZ2l2ZW4gaW1hZ2UgZmlsZSBtdXN0IGV4aXN0IG9uIGRpc2s7IGlmIGl0IGRvZXMgbm90LCAnbmVlZGVkJyBhbmQgJ3dpbGxfZml0JyBrZXlzIHdpbGwgbm90CisJICogICAgICAgYmUgcHJlc2VudCBpbiB0aGUgcmV0dXJuZWQgYXJyYXkuCisJICovCisJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBndWVzdGltYXRlUmVxdWlyZWRNZW1vcnlTcGFjZSgkZmlsZSkKKwl7CisJCSR2YWwgPSB0cmltKGluaV9nZXQoJ21lbW9yeV9saW1pdCcpKTsKKwkJJGxhc3QgPSBzdHJ0b3VwcGVyKHN1YnN0cigkdmFsLCAtMSwgMSkpOworCQkkdmFsID0gZmxvYXR2YWwoJHZhbCk7IC8vIGRpc2NhcmRzIHRoZSBLTUcgcG9zdGZpeCwgYWxsb3cgJHZhbCB0byBjYXJyeSB2YWx1ZXMgYmV5b25kIDIuLjRHCisJCXN3aXRjaCgkbGFzdCkKKwkJeworCQkvLyBUaGUgJ0cnIG1vZGlmaWVyIGlzIGF2YWlsYWJsZSBzaW5jZSBQSFAgNS4xLjAKKwkJY2FzZSAnRyc6CisJCQkkdmFsICo9IDEwMjQuMDsKKwkJY2FzZSAnTSc6CisJCQkkdmFsICo9IDEwMjQuMDsKKwkJY2FzZSAnSyc6CisJCQkkdmFsICo9IDEwMjQuMDsKKwkJCWJyZWFrOworCQl9CisJCSRsaW1pdCA9ICR2YWw7CisKKwkJJGluX3VzZSA9IChmdW5jdGlvbl9leGlzdHMoJ21lbW9yeV9nZXRfdXNhZ2UnKSA/IG1lbW9yeV9nZXRfdXNhZ2UoKSA6IDEwMDAwMDAgLyogdGFrZSBhIHdpbGQgZ3Vlc3MsIGVyLCBleGN1c2UgbWUsICdhcHBseSBhIGhldXJpc3RpYycgKi8gKTsKKworCQkkcnYgPSBhcnJheSgKKwkJCSdtZW1vcnlfbGltaXQnID0+ICRsaW1pdCwKKwkJCSdtZW1faW5fdXNlJyA9PiAkaW5fdXNlLAorCQkJJ3BhdGgnID0+ICRmaWxlCisJCQkpOworCisJCWlmKGZpbGVfZXhpc3RzKCRmaWxlKSkKKwkJeworCQkJJHJhd19zaXplID0gQGZpbGVzaXplKCRmaWxlKTsKKwkJCSRydlsnZmlsZXNpemUnXSA9ICRyYXdfc2l6ZTsKKworCQkJJGltZyA9IEBnZXRpbWFnZXNpemUoJGZpbGUsICRpbmZvX2V4KTsKKwkJCWlmICgkaW1nKQorCQkJeworCQkJCSR3aWR0aCA9ICRpbWdbMF07CisJCQkJJGhlaWdodCA9ICRpbWdbMV07CisJCQkJJHJ2WydpbWFnZWluZm8nXSA9ICRpbWc7CisJCQkJJHJ2WydpbWFnZWluZm9fZXh0cmEnXSA9ICRpbmZvX2V4OworCisJCQkJLy8gYXNzdW1lIFJHQkE4LCBpLmUuIDQgYnl0ZXMgcGVyIHBpeGVsCisJCQkJLy8gLi4uIGhhdmluZyBoYWQgYSBnb29kIGxvb2sgd2l0aCBtZW1vcnlfZ2V0X3VzYWdlKCkgYW5kIG1lbW9yeV9nZXRfcGVha191c2FnZSgpLCBpdCB0dXJucyBvdXQgd2UgbmVlZAorCQkJCS8vIGEgJ2Z1ZGdlIGZhY3RvcicgYS5rLmEuIGhldXJpc3RpYyBhcyB0aGUgJzQgYnl0ZXMgcGVyIHBpeGVsJyBlc3RpbWF0ZSBpcyBvZmYgYnkgcXVpdGUgYSBiaXQgKGlmIHdlIGhhdmUKKwkJCQkvLyB0byBiZWxpZXZlIHRoZSBudW1iZXJzIGZvbGxvd2luZyBhIHNpbmdsZSBHRCBpbWFnZSBsb2FkIG9wZXJhdGlvbik6CisJCQkJJG5lZWRlZCA9IDQuMCAqICR3aWR0aCAqICRoZWlnaHQ7CisJCQkJJG5lZWRlZCAqPSAzNC4wIC8gMjcuMDsKKwkJCQkkcnZbJ25lZWRlZCddID0gJG5lZWRlZDsKKworCQkJCS8vIHNpbmNlIG1hbnkgb3BlcmF0aW9ucyByZXF1aXJlIGEgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBidWZmZXIsIHRoYXQnbGwgYmUgMiBvZiB0aGVtIGJ1ZmZlcnMsIHRoYW5rIHlvdSB2ZXJ5IG11Y2g6CisJCQkJLy8gLi4uIGhvd2V2ZXIsIGhhdmluZyBoYWQgYSBnb29kIGxvb2sgd2l0aCBtZW1vcnlfZ2V0X3VzYWdlKCkgYW5kIG1lbW9yeV9nZXRfcGVha191c2FnZSgpLCBpdCB0dXJucyBvdXQKKwkJCQkvLyB3ZSBuZWVkIGFib3V0IHRyaXBsZSEKKwkJCQkkd2lsbF9lYXQgPSAkbmVlZGVkICogMi44OworCQkJCS8vIF5eXiBmYWN0b3IgPSAyLjggOiBmb3IgdmVyeSBsYXJnZSBpbWFnZXMgdGhlIGVzdGltYXRpb24gZXJyb3IgaXMgbm93IH4gKzEuLjglIHRvbyBwZXNzaW1pc3RpYy4gU29pdCEKKwkJCQkvLyAgICAgKHRlc3RlZCB3aXRoIFBORyBpbWFnZXMgd2hpY2ggY29uc3VtZWQgdXAgdG8gNDc1TUIgUkFNIHRvIGhhdmUgdGhlaXIgdGh1bWJuYWlsIGNyZWF0ZWQuIFRoaXMgdG9vayBhIGZldworCQkJCS8vICAgICAgc2Vjb25kcyBwZXIgaW1hZ2UsIHNvIHlvdSBtaWdodCBhc2sgeW91cnNlbGYgaWYgYmVpbmcgYWJsZSB0byBzZXJ2ZSBzdWNoIG1lbW9yeSBtZWdhbG9kb25zIHdvdWxkIGJlLAorCQkJCS8vICAgICAgYWgsIGRlc2lyYWJsZSwgd2hlbiBjb25zaWRlcmVkIGZyb20gdGhpcyBwZXJzcGVjdGl2ZS4pCisKKwkJCQkvLyBhbmQgJ3dvcnN0IGNhc2UnIChhaGVtKSB3ZSd2ZSBnb3QgdGhlIGZpbGUgaXRzZWxmIGxvYWRlZCBpbiBtZW1vcnkgYXMgd2VsbCAob24gaW5pdGlhbCBsb2FkIGFuZCBsYXRlciBzYXZlKToKKwkJCQkvLyAuLi4gYnV0IHRoaXMgaXMgbW9yZSB0aGFuIGNvdmVyZWQgYnkgdGhlICd0cmlwbGUgY2hhcmdlJyBhbHJlYWR5LCBzbyB3ZSBkaXRjaCB0aGlzIG9uZSBmcm9tIHRoZSBoZXVyaXN0aWNzLgorCQkJCWlmICgwKSAkd2lsbF9lYXQgKz0gJHJhd19zaXplOworCisJCQkJLy8gaW50ZXJlc3RpbmdseSwgSlBFRyBmaWxlcyBvbmx5IGFwcGVhciB0byByZXF1aXJlIGFib3V0IGhhbGYgdGhhdCBzcGFjZSByZXF1aXJlZCBieSBQTkcgcmVzaXplIHByb2Nlc3Nlcy4uLgorCQkJCWlmICghZW1wdHkoJGltZ1snbWltZSddKSAmJiAkaW1nWydtaW1lJ10gPT0gJ2ltYWdlL2pwZWcnKQorCQkJCXsKKwkJCQkJJHdpbGxfZWF0IC89IDIuMDsKKwkJCQl9CisKKwkJCQkkcnZbJ3VzYWdlX2d1ZXN0aW1hdGUnXSA9ICR3aWxsX2VhdDsKKworCQkJCS8vIG5vdyB3ZSBrbm93IHdoYXQgd2UgYWJvdXQgbmVlZCBmb3IgdGhpcyBidWdnZXIsIHNlZSBpZiB3ZSBnb3QgZW5vdWdoOgorCQkJCSRkb2VzX2ZpdCA9ICgkbGltaXQgLSAkaW5fdXNlID4gJHdpbGxfZWF0KTsKKwkJCQkkcnZbJ3VzYWdlX21pbl9hZHZpc2VkJ10gPSAkd2lsbF9lYXQgKyAkaW5fdXNlOworCQkJCSRydlsnd2lsbF9maXQnXSA9ICRkb2VzX2ZpdDsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvLyBlbHNlOiB0aGlzIGlzIG5vdCBhIHZhbGlkIGltYWdlIGZpbGUhCisJCQkJJHJ2Wydub3RfYW5faW1hZ2VfZmlsZSddID0gdHJ1ZTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIGVsc2U6IHRoaXMgZmlsZSBkb2VzIG5vdCBleGlzdCEKKwkJCSRydlsnbm90X2FuX2ltYWdlX2ZpbGUnXSA9IHRydWU7CisJCX0KKwkJcmV0dXJuICRydjsKKwl9CisKKwkvKioKKwkgKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlIGlzIHJlYWxseSBhbiBpbWFnZSBmaWxlIGFuZCB3aGV0aGVyIGl0IGNhbiBiZSBwcm9jZXNzZWQgYnkgb3VyIEltYWdlIGNsYXNzLCBnaXZlbiB0aGUgUEhQCisJICogbWVtb3J5IHJlc3RyaWN0aW9ucy4KKwkgKgorCSAqIFJldHVybiB0aGUgbWV0YSBkYXRhIGFycmF5IHdoZW4gdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlIGdpdmVuIGZpbGUgY2FuIGJlIHByb2Nlc3NlZDsgdGhyb3cgYW4gZXhjZXB0aW9uIG90aGVyd2lzZS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrRmlsZUZvclByb2Nlc3NpbmcoJGZpbGUpCisJeworCQkkZmluZm8gPSBzZWxmOjpndWVzdGltYXRlUmVxdWlyZWRNZW1vcnlTcGFjZSgkZmlsZSk7CisJCWlmICghZW1wdHkoJGZpbmZvWydub3RfYW5faW1hZ2VfZmlsZSddKSkKKwkJCXRocm93IG5ldyBFeGNlcHRpb24oJ25vX2ltYWdlaW5mbycpOworCisJCS8vIGlzIGl0IGEgdmFsaWQgZmlsZSBleGlzdGluZyBvbiBkaXNrPworCQlpZiAoIWlzc2V0KCRmaW5mb1snaW1hZ2VpbmZvJ10pKQorCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbignbm9faW1hZ2VpbmZvJyk7CisKKwkJJGZpbGUgPSAkZmluZm9bJ3BhdGgnXTsKKworCQkvLyBvbmx5IHNldCB0aGUgbmV3IG1lbW9yeSBsaW1pdCBvZiBJTUFHRV9QUk9DRVNTSU5HX01FTU9SWV9NQVhfVVNBR0UgTUIgd2hlbiB0aGUgY29uZmlndXJlZCBvbmUgaXMgc21hbGxlcjoKKwkJaWYgKCRmaW5mb1snbWVtb3J5X2xpbWl0J10gPCBJTUFHRV9QUk9DRVNTSU5HX01FTU9SWV9NQVhfVVNBR0UgKiAxMDI0ICogMTAyNCkKKwkJeworCQkJLy8gcmVjYWxjIHRoZSAnd2lsbF9maXQnIGluZGljYXRvciBub3c6CisJCQkkZmluZm9bJ3dpbGxfZml0J10gPSAoJGZpbmZvWyd1c2FnZV9taW5fYWR2aXNlZCddIDwgSU1BR0VfUFJPQ0VTU0lOR19NRU1PUllfTUFYX1VTQUdFICogMTAyNCAqIDEwMjQpOworCQl9CisKKwkJJGltZyA9ICRmaW5mb1snaW1hZ2VpbmZvJ107CisKKwkJLy8gYW5kIHdpbGwgaXQgZml0IGluIGF2YWlsYWJsZSBtZW1vcnkgaWYgd2UgZ28gYW5kIGxvYWQgdGhlIGJ1Z2dlcj8KKwkJaWYgKCEkZmluZm9bJ3dpbGxfZml0J10pCisJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCdpbWdfd2lsbF9ub3RfZml0OicgLiBjZWlsKCRmaW5mb1sndXNhZ2VfbWluX2FkdmlzZWQnXSAvIDFFNikgLiAnIE1CeXRlJyk7CisKKwkJJGV4cGxhcnIgPSBleHBsb2RlKCcvJywgJGltZ1snbWltZSddKTsgLy8gbWFrZSBzdXJlIHRoZSBlbmQoKSBjYWxsIGRvZXNuJ3QgdGhyb3cgYW4gZXJyb3IgbmV4dCBpbiBFX1NUUklDVCBtb2RlOgorCQkkZXh0X2Zyb21fbWltZSA9IGVuZCgkZXhwbGFycik7CisJCSRtZXRhID0gYXJyYXkoCisJCQknd2lkdGgnID0+ICRpbWdbMF0sCisJCQknaGVpZ2h0JyA9PiAkaW1nWzFdLAorCQkJJ21pbWUnID0+ICRpbWdbJ21pbWUnXSwKKwkJCSdleHQnID0+ICRleHRfZnJvbV9taW1lLAorCQkJJ2ZpbGVpbmZvJyA9PiAkZmluZm8KKwkJKTsKKworCQlpZigkbWV0YVsnZXh0J10gPT0gJ2pwZycpCisJCQkkbWV0YVsnZXh0J10gPSAnanBlZyc7CisJCWVsc2UgaWYoJG1ldGFbJ2V4dCddID09ICdibXAnKQorCQkJJG1ldGFbJ2V4dCddID0gJ2JtcCc7CisJCWVsc2UgaWYoJG1ldGFbJ2V4dCddID09ICd4LW1zLWJtcCcpCisJCQkkbWV0YVsnZXh0J10gPSAnYm1wJzsKKwkJaWYoIWluX2FycmF5KCRtZXRhWydleHQnXSwgc2VsZjo6Z2V0U3VwcG9ydGVkVHlwZXMoKSkpCisJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCd1bnN1cHBvcnRlZF9pbWdmbXQ6JyAuICRtZXRhWydleHQnXSk7CisKKwkJcmV0dXJuICRtZXRhOworCX0KKworCS8qKgorCSAqIENhbGN1bGF0ZSB0aGUgcmVzaXplIGRpbWVuc2lvbnMgb2YgYW4gaW1hZ2UsIGdpdmVuIHRoZSBvcmlnaW5hbCBkaW1lbnNpb25zIGFuZCBzaXplIGxpbWl0cworCSAqCisJICogQHBhcmFtIGludCAkb3JpZ194IHRoZSBvcmlnaW5hbCdzIHdpZHRoCisJICogQHBhcmFtIGludCAkb3JpZ195IHRoZSBvcmlnaW5hbCdzIGhlaWdodAorCSAqIEBwYXJhbSBpbnQgJHggdGhlIG1heGltdW0gd2lkdGggYWZ0ZXIgcmVzaXppbmcgaGFzIGJlZW4gZG9uZQorCSAqIEBwYXJhbSBpbnQgJHkgdGhlIG1heGltdW0gaGVpZ2h0IGFmdGVyIHJlc2l6aW5nIGhhcyBiZWVuIGRvbmUKKwkgKiBAcGFyYW0gYm9vbCAkcmF0aW8gc2V0IHRvIEZBTFNFIGlmIHRoZSBpbWFnZSByYXRpbyBpcyBzb2xlbHkgdG8gYmUgZGV0ZXJtaW5lZAorCSAqICAgICAgICAgICAgICAgICAgICBieSB0aGUgJHggYW5kICR5IHBhcmFtZXRlciB2YWx1ZXM7IHdoZW4gVFJVRSAodGhlIGRlZmF1bHQpCisJICogICAgICAgICAgICAgICAgICAgIHRoZSByZXNpemUgb3BlcmF0aW9uIHdpbGwga2VlcCB0aGUgaW1hZ2UgYXNwZWN0IHJhdGlvIGludGFjdAorCSAqIEBwYXJhbSBib29sICRyZXNpemVXaGVuU21hbGxlciBpZiBGQUxTRSB0aGUgaW1hZ2VzIHdpbGwgbm90IGJlIHJlc2l6ZWQgd2hlbgorCSAqICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IHNtYWxsZXIsIGlmIFRSVUUgdGhlIGltYWdlcyB3aWxsIGFsd2F5cyBiZSByZXNpemVkCisJICogQHJldHVybiBhcnJheSB3aXRoICd3aWR0aCcsICdoZWlnaHQnIGFuZCAnbXVzdF9yZXNpemUnIGNvbXBvbmVudCB2YWx1ZXMgb24gc3VjY2VzczsgRkFMU0Ugb24gZXJyb3IKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhbGN1bGF0ZV9yZXNpemVfZGltZW5zaW9ucygkb3JpZ194LCAkb3JpZ195LCAkeCA9IG51bGwsICR5ID0gbnVsbCwgJHJhdGlvID0gdHJ1ZSwgJHJlc2l6ZVdoZW5TbWFsbGVyID0gZmFsc2UpCisJeworCQlpZihlbXB0eSgkb3JpZ194KSB8fCBlbXB0eSgkb3JpZ195KSB8fCAoZW1wdHkoJHgpICYmIGVtcHR5KCR5KSkpIHJldHVybiBmYWxzZTsKKworCQkkeFN0YXJ0ID0gJHg7CisJCSR5U3RhcnQgPSAkeTsKKwkJJHJhdGlvWCA9ICRvcmlnX3ggLyAkb3JpZ195OworCQkkcmF0aW9ZID0gJG9yaWdfeSAvICRvcmlnX3g7CisJCSRyYXRpbyB8PSAoZW1wdHkoJHkpIHx8IGVtcHR5KCR4KSk7IC8vIGtlZXAgcmF0aW8gd2hlbiBvbmx5IHdpZHRoIE9SIGhlaWdodCBpcyBzZXQKKwkJLy9lY2hvICdBTExPV0VEOiA8YnI+Jy4keFN0YXJ0Lid4Jy4iPGJyPiIuJHlTdGFydC4neScuIjxicj4tLS0tLS0tLS0tLS0tLS08YnI+IjsKKwkJLy8gLT4+IGtlZXAgdGhlIFJBVElPCisJCWlmKCRyYXRpbykgeworCQkJLy9lY2hvICdCRUdJTk46IDxicj4nLiRvcmlnX3guJ3gnLiI8YnI+Ii4kb3JpZ195Lid5Jy4iPGJyPjxicj4iOworCQkJLy8gLT4gYWxpZ24gdG8gV0lEVEgKKwkJCWlmKCFlbXB0eSgkeCkgJiYgKCR4IDwgJG9yaWdfeCB8fCAkcmVzaXplV2hlblNtYWxsZXIpKQorCQkJCSR5ID0gJHggLyAkcmF0aW9YOworCQkJLy8gLT4gYWxpZ24gdG8gSEVJR0hUCisJCQllbHNlaWYoIWVtcHR5KCR5KSAmJiAoJHkgPCAkb3JpZ195IHx8ICRyZXNpemVXaGVuU21hbGxlcikpCisJCQkJJHggPSAkeSAvICRyYXRpb1k7CisJCQllbHNlIHsKKwkJCQkkeSA9ICRvcmlnX3k7CisJCQkJJHggPSAkb3JpZ194OworCQkJfQorCQkJLy9lY2hvICdCRVQ6IDxicj4nLiR4Lid4Jy4iPGJyPiIuJHkuJ3knLiI8YnI+PGJyPiI7CisJCQkvLyAtPj4gYWxpZ24gdG8gV0lEVEggQU5EIEhFSUdIVAorCQkJaWYoKCFlbXB0eSgkeVN0YXJ0KSAmJiAkeSA+ICR5U3RhcnQpIHx8ICghZW1wdHkoJHhTdGFydCkgJiYgJHggPiAkeFN0YXJ0KSkgeworCQkJCWlmKCR5ID4gJHlTdGFydCkgeworCQkJCQkkeSA9ICR5U3RhcnQ7CisJCQkJCSR4ID0gJHkgLyAkcmF0aW9ZOworCQkJCX0gZWxzZWlmKCR4ID4gJHhTdGFydCkgeworCQkJCQkkeCA9ICR4U3RhcnQ7CisJCQkJCSR5ID0gJHggLyAkcmF0aW9YOworCQkJCX0KKwkJCX0KKwkJfQorCQkvLyBlbHNlOiAtPj4gRE9OVCBrZWVwIHRoZSBSQVRJTworCisJCSR4ID0gcm91bmQoJHgpOworCQkkeSA9IHJvdW5kKCR5KTsKKworCQkvL2VjaG8gJ0VORDogPGJyPicuJHguJ3gnLiI8YnI+Ii4keS4neScuIjxicj48YnI+IjsKKwkJJHJ2ID0gYXJyYXkoCisJCQknd2lkdGgnID0+ICR4LAorCQkJJ2hlaWdodCcgPT4gJHksCisJCQknbXVzdF9yZXNpemUnID0+IGZhbHNlCisJCSk7CisJCS8vIHNwZWVkdXA/IG9ubHkgZG8gdGhlIHJlc2l6ZSBvcGVyYXRpb24gd2hlbiBpdCBtdXN0IGhhcHBlbjoKKwkJaWYgKCR4ICE9ICRvcmlnX3ggfHwgJHkgIT0gJG9yaWdfeSkKKwkJeworCQkJJHJ2WydtdXN0X3Jlc2l6ZSddID0gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gJHJ2OworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGltYWdlCisJICoKKwkgKiBAcmV0dXJuIGFycmF5CisJICovCisJcHVibGljIGZ1bmN0aW9uIGdldFNpemUoKXsKKwkJcmV0dXJuIGFycmF5KAorCQkJJ3dpZHRoJyA9PiAkdGhpcy0+bWV0YVsnd2lkdGgnXSwKKwkJCSdoZWlnaHQnID0+ICR0aGlzLT5tZXRhWydoZWlnaHQnXSwKKwkJKTsKKwl9CisKKworCS8qKgorCSAqIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtZXRhIGluZm9ybWF0aW9uIG9mIHRoZSBpbWFnZQorCSAqCisJICogQHJldHVybiBhcnJheQorCSAqLworCXB1YmxpYyBmdW5jdGlvbiBnZXRNZXRhSW5mbygpeworCQlyZXR1cm4gYXJyYXlfbWVyZ2UoYXJyYXkoKSwgKGlzX2FycmF5KCR0aGlzLT5tZXRhKSA/ICR0aGlzLT5tZXRhIDogYXJyYXkoKSkpOworCX0KKworCisJLyoqCisJICogUmV0dXJucyBUUlVFIHdoZW4gdGhlIGltYWdlIGRhdGEgaGF2ZSBiZWVuIGFsdGVyZWQgYnkgdGhpcyBpbnN0YW5jZSdzIG9wZXJhdGlvbnMsIEZBTFNFIHdoZW4gdGhlIGNvbnRlbnQgaGFzIG5vdCAoeWV0KSBiZWVuIHRvdWNoZWQuCisJICoKKwkgKiBAcmV0dXJuIGJvb2xlYW4KKwkgKi8KKwlwdWJsaWMgZnVuY3Rpb24gaXNEaXJ0eSgpeworCQlyZXR1cm4gJHRoaXMtPmRpcnR5OworCX0KKworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgaW1hZ2Ugd2l0aCB0aGUgZGVzaXJlZCBzaXplCisJICoKKwkgKiBAcGFyYW0gaW50ICR4CisJICogQHBhcmFtIGludCAkeQorCSAqIEBwYXJhbSBzdHJpbmcgJGV4dAorCSAqIEByZXR1cm4gcmVzb3VyY2UgR0QgaW1hZ2UgaGFuZGxlIG9uIHN1Y2Nlc3M7IHRocm93cyBhbiBleGNlcHRpb24gb24gZmFpbHVyZQorCSAqLworCXByaXZhdGUgZnVuY3Rpb24gY3JlYXRlKCR4ID0gbnVsbCwgJHkgPSBudWxsLCAkZXh0ID0gbnVsbCl7CisJCWlmKCEkeCkgJHggPSAkdGhpcy0+bWV0YVsnd2lkdGgnXTsKKwkJaWYoISR5KSAkeSA9ICR0aGlzLT5tZXRhWydoZWlnaHQnXTsKKworCQkkaW1hZ2UgPSBAaW1hZ2VjcmVhdGV0cnVlY29sb3IoJHgsICR5KTsKKwkJaWYgKCEkaW1hZ2UpIHRocm93IG5ldyBFeGNlcHRpb24oJ2ltYWdlY3JlYXRldHJ1ZWNvbG9yX2ZhaWxlZCcpOworCQlpZighJGV4dCkgJGV4dCA9ICR0aGlzLT5tZXRhWydleHQnXTsKKwkJaWYoJGV4dCA9PSAncG5nJyl7CisJCQlpZiAoIUBpbWFnZWFscGhhYmxlbmRpbmcoJGltYWdlLCBmYWxzZSkpCisJCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbignaW1hZ2VhbHBoYWJsZW5kaW5nX2ZhaWxlZCcpOworCQkJJGFscGhhID0gQGltYWdlY29sb3JhbGxvY2F0ZWFscGhhKCRpbWFnZSwgMCwgMCwgMCwgMTI3KTsKKwkJCWlmICghJGFscGhhKSB0aHJvdyBuZXcgRXhjZXB0aW9uKCdpbWFnZWFsbG9jYWxwaGE1MHBjdGdyZXlfZmFpbGVkJyk7CisJCQlpbWFnZWZpbGxlZHJlY3RhbmdsZSgkaW1hZ2UsIDAsIDAsICR4LCAkeSwgJGFscGhhKTsKKwkJfQorCisJCXJldHVybiAkaW1hZ2U7CisJfQorCisJLyoqCisJICogUmVwbGFjZXMgdGhlIGltYWdlIHJlc291cmNlIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcgorCSAqCisJICogQHBhcmFtIHJlc291cmNlICRuZXcKKwkgKi8KKwlwcml2YXRlIGZ1bmN0aW9uIHNldCgkbmV3KXsKKwkJaWYoIWVtcHR5KCR0aGlzLT5pbWFnZSkpIGltYWdlZGVzdHJveSgkdGhpcy0+aW1hZ2UpOworCQkJJHRoaXMtPmRpcnR5ID0gdHJ1ZTsKKwkJCSR0aGlzLT5pbWFnZSA9ICRuZXc7CisKKwkJCSR0aGlzLT5tZXRhWyd3aWR0aCddID0gaW1hZ2VzeCgkdGhpcy0+aW1hZ2UpOworCQkJJHRoaXMtPm1ldGFbJ2hlaWdodCddID0gaW1hZ2VzeSgkdGhpcy0+aW1hZ2UpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhdGggdG8gdGhlIGltYWdlIGZpbGUKKwkgKgorCSAqIEByZXR1cm4gc3RyaW5nCisJICovCisJcHVibGljIGZ1bmN0aW9uIGdldEltYWdlUGF0aCgpeworCQlyZXR1cm4gJHRoaXMtPmZpbGU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzb3VyY2Ugb2YgdGhlIGltYWdlIGZpbGUKKwkgKgorCSAqIEByZXR1cm4gcmVzb3VyY2UKKwkgKi8KKwlwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzb3VyY2UoKXsKKwkJcmV0dXJuICR0aGlzLT5pbWFnZTsKKwl9CisKKwkvKioKKwkgKiBSb3RhdGVzIHRoZSBpbWFnZSBieSB0aGUgZ2l2ZW4gYW5nbGUKKwkgKgorCSAqIEBwYXJhbSBpbnQgJGFuZ2xlCisJICogQHBhcmFtIGFycmF5ICRiZ2NvbG9yIEFuIGluZGV4ZWQgYXJyYXkgd2l0aCByZWQvZ3JlZW4vYmx1ZS9hbHBoYSB2YWx1ZXMKKwkgKiBAcmV0dXJuIHJlc291cmNlIEltYWdlIHJlc291cmNlIG9uIHN1Y2Nlc3M7IHRocm93cyBhbiBleGNlcHRpb24gb24gZmFpbHVyZQorCSAqLworCXB1YmxpYyBmdW5jdGlvbiByb3RhdGUoJGFuZ2xlLCAkYmdjb2xvciA9IG51bGwpeworCQlpZihlbXB0eSgkdGhpcy0+aW1hZ2UpIHx8ICEkYW5nbGUgfHwgJGFuZ2xlPj0zNjApIHJldHVybiAkdGhpczsKKworCQkkYWxwaGEgPSAoaXNfYXJyYXkoJGJnY29sb3IpID8gQGltYWdlY29sb3JhbGxvY2F0ZWFscGhhKCR0aGlzLT5pbWFnZSwgJGJnY29sb3JbMF0sICRiZ2NvbG9yWzFdLCAkYmdjb2xvclsyXSwgIWVtcHR5KCRiZ2NvbG9yWzNdKSA/ICRiZ2NvbG9yWzNdIDogbnVsbCkgOiAkYmdjb2xvcik7CisJCWlmICghJGFscGhhKSB0aHJvdyBuZXcgRXhjZXB0aW9uKCdpbWFnZWNvbG9yYWxsb2NhdGVhbHBoYV9mYWlsZWQnKTsKKwkJJGltZyA9IEBpbWFnZXJvdGF0ZSgkdGhpcy0+aW1hZ2UsICRhbmdsZSwgJGFscGhhKTsKKwkJaWYgKCEkaW1nKSB0aHJvdyBuZXcgRXhjZXB0aW9uKCdpbWFnZXJvdGF0ZV9mYWlsZWQnKTsKKwkJJHRoaXMtPnNldCgkaW1nKTsKKwkJdW5zZXQoJGltZyk7CisKKwkJcmV0dXJuICR0aGlzOworCX0KKworCS8qKgorCSAqIFJlc2l6ZXMgdGhlIGltYWdlIHRvIHRoZSBnaXZlbiBzaXplLCBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZXMKKwkgKiB0aGUgbmV3IHJhdGlvIGlmIHBhcmFtZXRlciB7QGxpbmsgJHJhdGlvfSBpcyBzZXQgdG8gdHJ1ZQorCSAqCisJICogQHBhcmFtIGludCAkeCB0aGUgbWF4aW11bSB3aWR0aCBhZnRlciByZXNpemluZyBoYXMgYmVlbiBkb25lCisJICogQHBhcmFtIGludCAkeSB0aGUgbWF4aW11bSBoZWlnaHQgYWZ0ZXIgcmVzaXppbmcgaGFzIGJlZW4gZG9uZQorCSAqIEBwYXJhbSBib29sICRyYXRpbyBzZXQgdG8gRkFMU0UgaWYgdGhlIGltYWdlIHJhdGlvIGlzIHNvbGVseSB0byBiZSBkZXRlcm1pbmVkCisJICogICAgICAgICAgICAgICAgICAgIGJ5IHRoZSAkeCBhbmQgJHkgcGFyYW1ldGVyIHZhbHVlczsgd2hlbiBUUlVFICh0aGUgZGVmYXVsdCkKKwkgKiAgICAgICAgICAgICAgICAgICAgdGhlIHJlc2l6ZSBvcGVyYXRpb24gd2lsbCBrZWVwIHRoZSBpbWFnZSBhc3BlY3QgcmF0aW8gaW50YWN0CisJICogQHBhcmFtIGJvb2wgJHJlc2l6ZVdoZW5TbWFsbGVyIGlmIEZBTFNFIHRoZSBpbWFnZXMgd2lsbCBub3QgYmUgcmVzaXplZCB3aGVuCisJICogICAgICAgICAgICAgICAgICAgIGFscmVhZHkgc21hbGxlciwgaWYgVFJVRSB0aGUgaW1hZ2VzIHdpbGwgYWx3YXlzIGJlIHJlc2l6ZWQKKwkgKiBAcmV0dXJuIHJlc291cmNlIEltYWdlIHJlc291cmNlIG9uIHN1Y2Nlc3M7IHRocm93cyBhbiBleGNlcHRpb24gb24gZmFpbHVyZQorCSAqLworCXB1YmxpYyBmdW5jdGlvbiByZXNpemUoJHggPSBudWxsLCAkeSA9IG51bGwsICRyYXRpbyA9IHRydWUsICRyZXNpemVXaGVuU21hbGxlciA9IGZhbHNlKQorCXsKKwkJaWYoZW1wdHkoJHRoaXMtPmltYWdlKSB8fCAoZW1wdHkoJHgpICYmIGVtcHR5KCR5KSkpCisJCXsKKwkJCXRocm93IG5ldyBFeGNlcHRpb24oJ3Jlc2l6ZV9pbmVycicpOworCQl9CisKKwkJJGRpbXMgPSBJbWFnZTo6Y2FsY3VsYXRlX3Jlc2l6ZV9kaW1lbnNpb25zKCR0aGlzLT5tZXRhWyd3aWR0aCddLCAkdGhpcy0+bWV0YVsnaGVpZ2h0J10sICR4LCAkeSwgJHJhdGlvLCAkcmVzaXplV2hlblNtYWxsZXIpOworCQlpZiAoJGRpbXMgPT09IGZhbHNlKQorCQl7CisJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCdyZXNpemVfaW5lcnI6JyAuICR0aGlzLT5tZXRhWyd3aWR0aCddIC4gJyB4ICcgLiAkdGhpcy0+bWV0YVsnaGVpZ2h0J10pOworCQl9CisKKwkJLy8gc3BlZWR1cD8gb25seSBkbyB0aGUgcmVzaXplIG9wZXJhdGlvbiB3aGVuIGl0IG11c3QgaGFwcGVuOgorCQlpZiAoJGRpbXNbJ211c3RfcmVzaXplJ10pCisJCXsKKwkJCSRuZXcgPSAkdGhpcy0+Y3JlYXRlKCRkaW1zWyd3aWR0aCddLCAkZGltc1snaGVpZ2h0J10pOworCQkJaWYoQGltYWdlY29weXJlc2FtcGxlZCgkbmV3LCAkdGhpcy0+aW1hZ2UsIDAsIDAsIDAsIDAsICRkaW1zWyd3aWR0aCddLCAkZGltc1snaGVpZ2h0J10sICR0aGlzLT5tZXRhWyd3aWR0aCddLCAkdGhpcy0+bWV0YVsnaGVpZ2h0J10pKSB7CisJCQkJJHRoaXMtPnNldCgkbmV3KTsKKwkJCQl1bnNldCgkbmV3KTsKKwkJCQlyZXR1cm4gJHRoaXM7CisJCQl9CisJCQl1bnNldCgkbmV3KTsKKwkJCXRocm93IG5ldyBFeGNlcHRpb24oJ2ltYWdlY29weXJlc2FtcGxlZF9mYWlsZWQ6JyAuICR0aGlzLT5tZXRhWyd3aWR0aCddIC4gJyB4ICcgLiAkdGhpcy0+bWV0YVsnaGVpZ2h0J10pOworCQl9CisJCWVsc2UKKwkJeworCQkJcmV0dXJuICR0aGlzOworCQl9CisJfQorCisJLyoqCisJICogQ3JvcHMgdGhlIGltYWdlLiBUaGUgdmFsdWVzIGFyZSBnaXZlbiBsaWtlIG1hcmdpbi9wYWRkaW5nIHZhbHVlcyBpbiBjc3MKKwkgKgorCSAqIDxiPkV4YW1wbGU8L2I+CisJICogPHVsPgorCSAqIDxsaT5jcm9wKDEwKSAtIENyb3BzIGJ5IDEwcHggb24gYWxsIHNpZGVzPC9saT4KKwkgKiA8bGk+Y3JvcCgxMCwgNSkgLSBDcm9wcyBieSAxMHB4IG9uIHRvcCBhbmQgYm90dG9tIGFuZCBieSA1cHggb24gbGVmdCBhbmQgcmlnaHQgc2lkZXM8L2xpPgorCSAqIDxsaT5jcm9wKDEwLCA1LCA1KSAtIENyb3BzIGJ5IDEwcHggb24gdG9wIGFuZCBieSA1cHggb24gbGVmdCwgcmlnaHQgYW5kIGJvdHRvbSBzaWRlczwvbGk+CisJICogPGxpPmNyb3AoMTAsIDUsIDMsIDIpIC0gQ3JvcHMgYnkgMTBweCBvbiB0b3AsIDVweCBieSByaWdodCwgM3B4IGJ5IGJvdHRvbSBhbmQgMnB4IGJ5IGxlZnQgc2lkZXM8L2xpPgorCSAqIDwvdWw+CisJICoKKwkgKiBAcGFyYW0gaW50ICR0b3AKKwkgKiBAcGFyYW0gaW50ICRyaWdodAorCSAqIEBwYXJhbSBpbnQgJGJvdHRvbQorCSAqIEBwYXJhbSBpbnQgJGxlZnQKKwkgKiBAcmV0dXJuIEltYWdlCisJICovCisJcHVibGljIGZ1bmN0aW9uIGNyb3AoJHRvcCwgJHJpZ2h0ID0gbnVsbCwgJGJvdHRvbSA9IG51bGwsICRsZWZ0ID0gbnVsbCl7CisJCWlmKGVtcHR5KCR0aGlzLT5pbWFnZSkpIHJldHVybiAkdGhpczsKKworCQlpZighaXNfbnVtZXJpYygkcmlnaHQpICYmICFpc19udW1lcmljKCRib3R0b20pICYmICFpc19udW1lcmljKCRsZWZ0KSkKKwkJCSRyaWdodCA9ICRib3R0b20gPSAkbGVmdCA9ICR0b3A7CisKKwkJaWYoIWlzX251bWVyaWMoJGJvdHRvbSkgJiYgIWlzX251bWVyaWMoJGxlZnQpKXsKKwkJCSRib3R0b20gPSAkdG9wOworCQkJJGxlZnQgPSAkcmlnaHQ7CisJCX0KKworCQlpZighaXNfbnVtZXJpYygkbGVmdCkpCisJCQkkbGVmdCA9ICRyaWdodDsKKworCQkkeCA9ICR0aGlzLT5tZXRhWyd3aWR0aCddLSRsZWZ0LSRyaWdodDsKKwkJJHkgPSAkdGhpcy0+bWV0YVsnaGVpZ2h0J10tJHRvcC0kYm90dG9tOworCisJCWlmKCR4PDAgfHwgJHk8MCkgcmV0dXJuICR0aGlzOworCisJCSRuZXcgPSAkdGhpcy0+Y3JlYXRlKCR4LCAkeSk7CisJCWlmICghQGltYWdlY29weSgkbmV3LCAkdGhpcy0+aW1hZ2UsIDAsIDAsICRsZWZ0LCAkdG9wLCAkeCwgJHkpKQorCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbignaW1hZ2Vjb3B5X2ZhaWxlZCcpOworCisJCSR0aGlzLT5zZXQoJG5ldyk7CisJCXVuc2V0KCRuZXcpOworCisJCXJldHVybiAkdGhpczsKKwl9CisKKwkvKioKKwkgKiBGbGlwcyB0aGUgaW1hZ2UgaG9yaXpvbnRhbGx5IG9yIHZlcnRpY2FsbHkuIFRvIEZsaXAgYm90aCBjb3B5IG11bHRpcGxlIHNpbmdsZSBwaXhlbCBzdHJpcHMgYXJvdW5kIGluc3RlYWQKKwkgKiBvZiBqdXN0IHVzaW5nIC0+cm90YXRlKDE4MCk6IG5vIGltYWdlIGRpc3RvcnRpb24gdGhpcyB3YXkuCisJICoKKwkgKiBAc2VlIEltYWdlOjpyb3RhdGUoKQorCSAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgRWl0aGVyIGhvcml6b250YWwgb3IgdmVydGljYWwKKwkgKiBAcmV0dXJuIEltYWdlCisJICovCisJcHVibGljIGZ1bmN0aW9uIGZsaXAoJHR5cGUpeworCQlpZihlbXB0eSgkdGhpcy0+aW1hZ2UpIHx8ICFpbl9hcnJheSgkdHlwZSwgYXJyYXkoJ2hvcml6b250YWwnLCAndmVydGljYWwnKSkpIHJldHVybiAkdGhpczsKKworCQkkbmV3ID0gJHRoaXMtPmNyZWF0ZSgpOworCisJCWlmKCR0eXBlPT0naG9yaXpvbnRhbCcpCisJCXsKKwkJCWZvcigkeD0wOyR4PCR0aGlzLT5tZXRhWyd3aWR0aCddOyR4KyspCisJCQl7CisJCQkJaWYgKCFAaW1hZ2Vjb3B5KCRuZXcsICR0aGlzLT5pbWFnZSwgJHRoaXMtPm1ldGFbJ3dpZHRoJ10tJHgtMSwgMCwgJHgsIDAsIDEsICR0aGlzLT5tZXRhWydoZWlnaHQnXSkpCisJCQkJCXRocm93IG5ldyBFeGNlcHRpb24oJ2ltYWdlZmxpcF9mYWlsZWQnKTsKKwkJCX0KKwkJfQorCQllbHNlaWYoJHR5cGU9PSd2ZXJ0aWNhbCcpCisJCXsKKwkJCWZvcigkeT0wOyR5PCR0aGlzLT5tZXRhWydoZWlnaHQnXTskeSsrKQorCQkJeworCQkJCWlmICghQGltYWdlY29weSgkbmV3LCAkdGhpcy0+aW1hZ2UsIDAsICR0aGlzLT5tZXRhWydoZWlnaHQnXS0keS0xLCAwLCAkeSwgJHRoaXMtPm1ldGFbJ3dpZHRoJ10sIDEpKQorCQkJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCdpbWFnZWZsaXBfZmFpbGVkJyk7CisJCQl9CisJCX0KKworCQkkdGhpcy0+c2V0KCRuZXcpOworCQl1bnNldCgkbmV3KTsKKworCQlyZXR1cm4gJHRoaXM7CisJfQorCisJLyoqCisJICogU3RvcmVzIHRoZSBpbWFnZSBpbiB0aGUgZGVzaXJlZCBkaXJlY3Rvcnkgb3Igb3ZlcndyaXRlIHRoZSBvbGQgb25lCisJICoKKwkgKiBAcGFyYW0gc3RyaW5nICRleHQKKwkgKiBAcGFyYW0gc3RyaW5nICRmaWxlCisJICogQHBhcmFtIGludCAkcXVhbGl0eSB0aGUgYW1vdW50IG9mIGxvc3N5IGNvbXByZXNzaW9uIHRvIGFwcGx5IHRvIHRoZSBzYXZlZCBmaWxlCisJICogQHBhcmFtIGJvb2xlYW4gJHN0b3JlX29yaWdpbmFsX2lmX3VuYWx0ZXJlZCAoZGVmYXVsdDogRkFMU0UpIHNldCB0byBUUlVFIGlmIHlvdSB3YW50IHRvIGNvcHkgdGhlCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbCBpbnN0ZWFkIG9mIHNhdmluZyB0aGUgbG9hZGVkIGNvcHkgd2hlbiBubworCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdHMgdG8gdGhlIGltYWdlIGhhdmUgb2NjdXJyZWQuIChzZXQgdG8gVFJVRSB3aGVuCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgbGlrZSB0byBrZWVwIGFuaW1hdGVkIEdJRnMgaW50YWN0IHdoZW4gdGhleSBoYXZlCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgYmVlbiBjcm9wcGVkLCByZXNjYWxlZCwgZXRjLiwgZm9yIGluc3RhbmNlKQorCSAqCisJICogQHJldHVybiBJbWFnZSBvYmplY3QKKwkgKi8KKwlwdWJsaWMgZnVuY3Rpb24gcHJvY2VzcygkZXh0ID0gbnVsbCwgJGZpbGUgPSBudWxsLCAkcXVhbGl0eSA9IDYwLCAkc3RvcmVfb3JpZ2luYWxfaWZfdW5hbHRlcmVkID0gdHJ1ZSl7CisJCWlmKGVtcHR5KCR0aGlzLT5pbWFnZSkpIHJldHVybiAkdGhpczsKKworCQlpZighJGV4dCkgJGV4dCA9ICR0aGlzLT5tZXRhWydleHQnXTsKKwkJJGV4dCA9IHN0cnRvbG93ZXIoJGV4dCk7CisKKwkJaWYoJGV4dD09J2pwZycpICRleHQgPSAnanBlZyc7CisJCWVsc2UgaWYoJGV4dD09J3BuZycpIGltYWdlc2F2ZWFscGhhKCR0aGlzLT5pbWFnZSwgdHJ1ZSk7CisKKwkJaWYoJGZpbGUgPT0gbnVsbCkKKwkJCSRmaWxlID0gJHRoaXMtPmZpbGU7CisJCWlmKCEkZmlsZSkgdGhyb3cgbmV3IEV4Y2VwdGlvbigncHJvY2Vzc19ub2ZpbGUnKTsKKwkJaWYoIWlzX2RpcihkaXJuYW1lKCRmaWxlKSkpIHRocm93IG5ldyBFeGNlcHRpb24oJ3Byb2Nlc3Nfbm9kaXInKTsKKwkJaWYgKCRzdG9yZV9vcmlnaW5hbF9pZl91bmFsdGVyZWQgJiYgISR0aGlzLT5pc0RpcnR5KCkgJiYgJGV4dCA9PSAkdGhpcy0+bWV0YVsnZXh0J10pCisJCXsKKwkJCS8vIGNvcHkgb3JpZ2luYWwgaW5zdGVhZCBvZiBzYXZpbmcgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uOgorCQkJJHJ2ID0gdHJ1ZTsKKwkJCWlmICgkZmlsZSAhPSAkdGhpcy0+ZmlsZSkKKwkJCXsKKwkJCQkkcnYgPSBAY29weSgkdGhpcy0+ZmlsZSwgJGZpbGUpOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJJHJ2ID0gZmFsc2U7CisJCQkkZm4gPSAnaW1hZ2UnLiRleHQ7CisJCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCRmbikpCisJCQl7CisJCQkJaWYoJGV4dCA9PSAnanBlZycpCisJCQkJCSRydiA9IEAkZm4oJHRoaXMtPmltYWdlLCAkZmlsZSwgJHF1YWxpdHkpOworCQkJCWVsc2VpZigkZXh0ID09ICdwbmcnKQorCQkJCQkkcnYgPSBAJGZuKCR0aGlzLT5pbWFnZSwgJGZpbGUsIDkpOyAvLyBQTkcgaXMgbG9zc2xlc3M6IGFsd2F5cyBtYXhpbXVtIGNvbXByZXNzaW9uIQorCQkJCWVsc2UKKwkJCQkJJHJ2ID0gQCRmbigkdGhpcy0+aW1hZ2UsICRmaWxlKTsKKwkJCX0KKwkJfQorCQlpZiAoISRydikKKwkJCXRocm93IG5ldyBFeGNlcHRpb24oJGZuIC4gJ19mYWlsZWQnKTsKKworCQkvLyBJZiB0aGVyZSBpcyBhIG5ldyBmaWxlbmFtZSBjaGFuZ2UgdGhlIGludGVybmFsIG5hbWUgdG9vCisJCSR0aGlzLT5maWxlID0gJGZpbGU7CisKKwkJcmV0dXJuICR0aGlzOworCX0KKworCS8qKgorCSAqIFNhdmVzIHRoZSBpbWFnZSB0byB0aGUgZ2l2ZW4gcGF0aAorCSAqCisJICogQHBhcmFtIHN0cmluZyAkZmlsZSBMZWF2ZSBlbXB0eSB0byByZXBsYWNlIHRoZSBvcmlnaW5hbCBmaWxlCisJICogQHBhcmFtIGludCAkcXVhbGl0eSB0aGUgYW1vdW50IG9mIGxvc3N5IGNvbXByZXNzaW9uIHRvIGFwcGx5IHRvIHRoZSBzYXZlZCBmaWxlCisJICogQHBhcmFtIGJvb2xlYW4gJHN0b3JlX29yaWdpbmFsX2lmX3VuYWx0ZXJlZCAoZGVmYXVsdDogRkFMU0UpIHNldCB0byBUUlVFIGlmIHlvdSB3YW50IHRvIGNvcHkgdGhlCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbCBpbnN0ZWFkIG9mIHNhdmluZyB0aGUgbG9hZGVkIGNvcHkgd2hlbiBubworCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdHMgdG8gdGhlIGltYWdlIGhhdmUgb2NjdXJyZWQuIChzZXQgdG8gVFJVRSB3aGVuCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgbGlrZSB0byBrZWVwIGFuaW1hdGVkIEdJRnMgaW50YWN0IHdoZW4gdGhleSBoYXZlCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgYmVlbiBjcm9wcGVkLCByZXNjYWxlZCwgZXRjLiwgZm9yIGluc3RhbmNlKQorCSAqCisJICogQHJldHVybiBJbWFnZQorCSAqLworCXB1YmxpYyBmdW5jdGlvbiBzYXZlKCRmaWxlID0gbnVsbCwgJHF1YWxpdHkgPSA2MCwgJHN0b3JlX29yaWdpbmFsX2lmX3VuYWx0ZXJlZCA9IHRydWUpeworCQlpZihlbXB0eSgkdGhpcy0+aW1hZ2UpKSByZXR1cm4gJHRoaXM7CisKKwkJaWYoISRmaWxlKSAkZmlsZSA9ICR0aGlzLT5maWxlOworCisJCSRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmaWxlLCBQQVRISU5GT19FWFRFTlNJT04pKTsKKwkJaWYoISRleHQpeworCQkJJGZpbGUgLj0gJy4nLiR0aGlzLT5tZXRhWydleHQnXTsKKwkJCSRleHQgPSAkdGhpcy0+bWV0YVsnZXh0J107CisJCX0KKworCQlpZigkZXh0PT0nanBnJykgJGV4dCA9ICdqcGVnJzsKKworCQlyZXR1cm4gJHRoaXMtPnByb2Nlc3MoJGV4dCwgJGZpbGUsICRxdWFsaXR5LCAkc3RvcmVfb3JpZ2luYWxfaWZfdW5hbHRlcmVkKTsKKwl9CisKKwkvKioKKwkgKiBPdXRwdXRzIHRoZSBtYW5pcHVsYXRlZCBpbWFnZS4gSW1wbGljaXRseSBvdmVyd3JpdGVzIHRoZSBvbGQgb25lIG9uIGRpc2suCisJICoKKwkgKiBAcmV0dXJuIEltYWdlCisJICovCisJcHVibGljIGZ1bmN0aW9uIHNob3coKXsKKwkJaWYoZW1wdHkoJHRoaXMtPmltYWdlKSkgcmV0dXJuICR0aGlzOworCisJCWhlYWRlcignQ29udGVudC10eXBlOiAnLiR0aGlzLT5tZXRhWydtaW1lJ10pOworCQlyZXR1cm4gJHRoaXMtPnByb2Nlc3MoKTsKKwl9Cit9CisKKworCisKKworCitpZiAoIWZ1bmN0aW9uX2V4aXN0cygnaW1hZ2VjcmVhdGVmcm9tYm1wJykpCit7CisJLyoqCisJICogaHR0cDovL25sMy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFnZWNyZWF0ZWZyb213Ym1wLnBocCM4NjIxNAorCSAqLworCWZ1bmN0aW9uIGltYWdlY3JlYXRlZnJvbWJtcCgkZmlsZXBhdGgpCisJeworCQkvLyBMb2FkIHRoZSBpbWFnZSBpbnRvIGEgc3RyaW5nCisJCSRmaWxlc2l6ZSA9IEBmaWxlc2l6ZSgkZmlsZXBhdGgpOworCQlpZiAoJGZpbGVzaXplIDwgMTA4ICsgNCkKKwkJCXJldHVybiBmYWxzZTsKKworCQkkcmVhZCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlcGF0aCk7CisJCWlmICgkZmlsZSA9PT0gZmFsc2UpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJJHRlbXAgPSB1bnBhY2soIkgqIiwkcmVhZCk7CisJCXVuc2V0KCRyZWFkKTsgICAgICAgICAgICAgICAvLyByZWR1Y2UgbWVtb3J5IGNvbnN1bXB0aW9uCisJCSRoZXggPSAkdGVtcFsxXTsKKwkJdW5zZXQoJHRlbXApOworCQkkaGVhZGVyID0gc3Vic3RyKCRoZXgsIDAsIDEwOCk7CisKKwkJLy8gUHJvY2VzcyB0aGUgaGVhZGVyCisJCS8vIFN0cnVjdHVyZTogaHR0cDovL3d3dy5mYXN0Z3JhcGguY29tL2hlbHAvYm1wX2hlYWRlcl9mb3JtYXQuaHRtbAorCQlpZiAoc3Vic3RyKCRoZWFkZXIsIDAsIDQpID09ICc0MjRkJykKKwkJeworCQkJLy8gQ3V0IGl0IGluIHBhcnRzIG9mIDIgYnl0ZXMKKwkJCSRoZWFkZXJfcGFydHMgPSBzdHJfc3BsaXQoJGhlYWRlciwgMik7CisKKwkJCS8vIEdldCB0aGUgd2lkdGggICAgICAgIDQgYnl0ZXMKKwkJCSR3aWR0aCA9IGhleGRlYygkaGVhZGVyX3BhcnRzWzE5XSAuICRoZWFkZXJfcGFydHNbMThdKTsKKworCQkJLy8gR2V0IHRoZSBoZWlnaHQgICAgICAgIDQgYnl0ZXMKKwkJCSRoZWlnaHQgPSBoZXhkZWMoJGhlYWRlcl9wYXJ0c1syM10gLiAkaGVhZGVyX3BhcnRzWzIyXSk7CisKKwkJCS8vIFVuc2V0IHRoZSBoZWFkZXIgcGFyYW1zCisJCQl1bnNldCgkaGVhZGVyX3BhcnRzKTsKKwkJfQorCisJCS8vIERlZmluZSBzdGFydGluZyBYIGFuZCBZCisJCSR4ID0gMDsKKwkJJHkgPSAxOworCisJCS8vIENyZWF0ZSBuZXdpbWFnZQorCQkkaW1hZ2UgPSBpbWFnZWNyZWF0ZXRydWVjb2xvcigkd2lkdGgsICRoZWlnaHQpOworCQlpZiAoJGltYWdlID09PSBmYWxzZSkKKwkJCXJldHVybiAkaW1hZ2U7CisKKwkJLy8gR3JhYiB0aGUgYm9keSBmcm9tIHRoZSBpbWFnZQorCQkkYm9keSA9IHN1YnN0cigkaGV4LCAxMDgpOworCQl1bnNldCgkaGV4KTsKKworCQkvLyBDYWxjdWxhdGUgaWYgcGFkZGluZyBhdCB0aGUgZW5kLWxpbmUgaXMgbmVlZGVkCisJCS8vIERpdmlkZWQgYnkgdHdvIHRvIGtlZXAgb3ZlcnZpZXcuCisJCS8vIDEgYnl0ZSA9IDIgSEVYLWNoYXJzCisJCSRib2R5X3NpemUgPSBzdHJsZW4oJGJvZHkpIC8gMjsKKwkJJGhlYWRlcl9zaXplID0gJHdpZHRoICogJGhlaWdodDsKKworCQkvLyBVc2UgZW5kLWxpbmUgcGFkZGluZz8gT25seSB3aGVuIG5lZWRlZAorCQkkdXNlUGFkZGluZyA9ICgkYm9keV9zaXplID4gJGhlYWRlcl9zaXplICogMyArIDQpOworCisJCS8vIFVzaW5nIGEgZm9yLWxvb3Agd2l0aCBpbmRleC1jYWxjdWxhdGlvbiBpbnN0YWlkIG9mIHN0cl9zcGxpdCB0byBhdm9pZCBsYXJnZSBtZW1vcnkgY29uc3VtcHRpb24KKwkJLy8gQ2FsY3VsYXRlIHRoZSBuZXh0IERXT1JELXBvc2l0aW9uIGluIHRoZSBib2R5CisJCWZvciAoJGkgPSAwOyAkaSA8ICRib2R5X3NpemU7ICRpICs9IDMpCisJCXsKKwkJCS8vIENhbGN1bGF0ZSBsaW5lLWVuZGluZyBhbmQgcGFkZGluZworCQkJaWYgKCR4ID49ICR3aWR0aCkKKwkJCXsKKwkJCQkvLyBJZiBwYWRkaW5nIG5lZWRlZCwgaWdub3JlIGltYWdlLXBhZGRpbmcKKwkJCQkvLyBTaGlmdCBpIHRvIHRoZSBlbmRpbmcgb2YgdGhlIGN1cnJlbnQgMzItYml0LWJsb2NrCisJCQkJaWYgKCR1c2VQYWRkaW5nKQorCQkJCQkkaSArPSAkd2lkdGggJSA0OworCisJCQkJLy8gUmVzZXQgaG9yaXpvbnRhbCBwb3NpdGlvbgorCQkJCSR4ID0gMDsKKworCQkJCS8vIFJhaXNlIHRoZSBoZWlnaHQtcG9zaXRpb24gKGJvdHRvbS11cCkKKwkJCQkkeSsrOworCisJCQkJLy8gUmVhY2hlZCB0aGUgaW1hZ2UtaGVpZ2h0PyBCcmVhayB0aGUgZm9yLWxvb3AKKwkJCQlpZiAoJHkgPiAkaGVpZ2h0KQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJLy8gQ2FsY3VsYXRpb24gb2YgdGhlIFJHQi1waXhlbCAoZGVmaW5lZCBhcyBCR1IgaW4gaW1hZ2UtZGF0YSkKKwkJCS8vIERlZmluZSAkaV9wb3MgYXMgYWJzb2x1dGUgcG9zaXRpb24gaW4gdGhlIGJvZHkKKwkJCSRpX3BvcyA9ICRpICogMjsKKwkJCSRyID0gaGV4ZGVjKCRib2R5WyRpX3Bvcys0XSAuICRib2R5WyRpX3Bvcys1XSk7CisJCQkkZyA9IGhleGRlYygkYm9keVskaV9wb3MrMl0gLiAkYm9keVskaV9wb3MrM10pOworCQkJJGIgPSBoZXhkZWMoJGJvZHlbJGlfcG9zXSAuICRib2R5WyRpX3BvcysxXSk7CisKKwkJCS8vIENhbGN1bGF0ZSBhbmQgZHJhdyB0aGUgcGl4ZWwKKwkJCSRjb2xvciA9IGltYWdlY29sb3JhbGxvY2F0ZSgkaW1hZ2UsICRyLCAkZywgJGIpOworCQkJaWYgKCRjb2xvciA9PT0gZmFsc2UpCisJCQl7CisJCQkJaW1hZ2VkZXN0cm95KCRpbWFnZSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQkJaW1hZ2VzZXRwaXhlbCgkaW1hZ2UsICR4LCAkaGVpZ2h0IC0gJHksICRjb2xvcik7CisKKwkJCS8vIFJhaXNlIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uCisJCQkkeCsrOworCQl9CisKKwkJLy8gVW5zZXQgdGhlIGJvZHkgLyBmcmVlIHRoZSBtZW1vcnkKKwkJdW5zZXQoJGJvZHkpOworCisJCS8vIFJldHVybiBpbWFnZS1vYmplY3QKKwkJcmV0dXJuICRpbWFnZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0Nvbm5lY3Rvci9NaW1lVHlwZXMuaW5pIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9Db25uZWN0b3IvTWltZVR5cGVzLmluaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTk4OTE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9Db25uZWN0b3IvTWltZVR5cGVzLmluaQpAQCAtMCwwICsxLDIyMyBAQAorOyBNaW1ldHlwZXMgY29uZmlndXJhdGlvbiBmaWxlCis7IFRoZSB0eXBlcyBhcmUgc29ydGVkIGJ5IHRoZSBmaWxldHlwZQorOworOyBtaW1ldHlwZXMgcG9zdGZpeGVkIHdpdGggJywgKicgZGVmaW5lIHRoZSBwcmVmZXJyZWQgZmlsZW5hbWUgZXh0ZW5zaW9uIGZvciB0aGF0IG1pbWUgdHlwZQorOyBBbnkgbWltZXR5cGVzIGxhY2tpbmdhICdwcmVmZXJyZWQgZXh0ZW5zaW9uJyB3aWxsIGhhdmUgdGhlIGZpcnN0IG9jY3VyaW5nIGV4dGVuc2lvbiBpbiB0aGlzIGxpc3QgYXNzaWduZWQgdG8gdGhlbSBhcyAncHJlZmVycmVkJyBpbnN0ZWFkLgorCitbYXBwbGljYXRpb25dCithaSA9CWFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQKK2JjcGlvID0JYXBwbGljYXRpb24veC1iY3BpbworYmluID0JYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtLCAqCitjY2FkID0JYXBwbGljYXRpb24vY2xhcmlzY2FkCitjZGYgPQlhcHBsaWNhdGlvbi94LW5ldGNkZgorY2xhc3MgPQlhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KK2NwaW8gPQlhcHBsaWNhdGlvbi94LWNwaW8KK2NwdCA9CWFwcGxpY2F0aW9uL21hYy1jb21wYWN0cHJvCitjc2ggPQlhcHBsaWNhdGlvbi94LWNzaAorZGNyID0JYXBwbGljYXRpb24veC1kaXJlY3RvcgorZGlyID0JYXBwbGljYXRpb24veC1kaXJlY3RvciwgKgorZG1zID0JYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCitkb2MgPQlhcHBsaWNhdGlvbi9tc3dvcmQKK2RydyA9CWFwcGxpY2F0aW9uL2RyYWZ0aW5nCitkdmkgPQlhcHBsaWNhdGlvbi94LWR2aQorZHdnID0JYXBwbGljYXRpb24vYWNhZAorZHhmID0JYXBwbGljYXRpb24vZHhmCitkeHIgPQlhcHBsaWNhdGlvbi94LWRpcmVjdG9yCitlcHMgPQlhcHBsaWNhdGlvbi9wb3N0c2NyaXB0CitleGUgPQlhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KK2V6ID0JYXBwbGljYXRpb24vYW5kcmV3LWluc2V0CitndGFyID0JYXBwbGljYXRpb24veC1ndGFyCitneiA9CWFwcGxpY2F0aW9uL3gtZ3ppcAoraGRmID0JYXBwbGljYXRpb24veC1oZGYKK2hxeCA9CWFwcGxpY2F0aW9uL21hYy1iaW5oZXg0MAoraXBzID0JYXBwbGljYXRpb24veC1pcHNjcmlwdAoraXB4ID0JYXBwbGljYXRpb24veC1pcGl4Citpc28gPQlhcHBsaWNhdGlvbi94LWlzb3ZpZXcKK2pzID0JYXBwbGljYXRpb24veC1qYXZhc2NyaXB0CitsYXRleCA9CWFwcGxpY2F0aW9uL3gtbGF0ZXgKK2xoYSA9CWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorbG5rID0JYXBwbGljYXRpb24veC1tcy1zaG9ydGN1dAorbHNwID0JYXBwbGljYXRpb24veC1saXNwCitsemggPQlhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KK21hbiA9CWFwcGxpY2F0aW9uL3gtdHJvZmYtbWFuCittZSA9CWFwcGxpY2F0aW9uL3gtdHJvZmYtbWUKK21pZiA9CWFwcGxpY2F0aW9uL3ZuZC5taWYKK21zID0JYXBwbGljYXRpb24veC10cm9mZi1tcworbmMgPQlhcHBsaWNhdGlvbi94LW5ldGNkZgorb2RhID0JYXBwbGljYXRpb24vb2RhCitvZHQgPQlhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQKK29kcyA9CWFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQKK29kcCA9CWFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQucHJlc2VudGF0aW9uCitvZGcgPQlhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmdyYXBoaWNzCitvZGMgPQlhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmNoYXJ0CitvZGYgPQlhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmZvcm11bGEKK29kYiA9CWFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZGF0YWJhc2UKK29kaSA9CWFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuaW1hZ2UKK29kbSA9CWFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dC1tYXN0ZXIKK290dCA9CWFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dC10ZW1wbGF0ZQorb3RzID0JYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldC10ZW1wbGF0ZQorb3RwID0JYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5wcmVzZW50YXRpb24tdGVtcGxhdGUKK290ZyA9CWFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZ3JhcGhpY3MtdGVtcGxhdGUKK3BkZiA9CWFwcGxpY2F0aW9uL3BkZgorcGduID0JYXBwbGljYXRpb24veC1jaGVzcy1wZ24KK3BocCA9CWFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwCitwb3QgPQlhcHBsaWNhdGlvbi9tc3Bvd2VycG9pbnQKK3BwcyA9CWFwcGxpY2F0aW9uL21zcG93ZXJwb2ludAorcHB0ID0JYXBwbGljYXRpb24vbXNwb3dlcnBvaW50LCAqCitwcHogPQlhcHBsaWNhdGlvbi9tc3Bvd2VycG9pbnQKK3ByZSA9CWFwcGxpY2F0aW9uL3gtZnJlZWxhbmNlCitwcnQgPQlhcHBsaWNhdGlvbi9wcm9fZW5nCitwcyA9CWFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQsICoKK3JhciA9CWFwcGxpY2F0aW9uL3gtcmFyCityb2ZmID0JYXBwbGljYXRpb24veC10cm9mZgorc2NtID0JYXBwbGljYXRpb24veC1sb3R1c3NjcmVlbmNhbQorc2V0ID0JYXBwbGljYXRpb24vc2V0CitzaCA9CWFwcGxpY2F0aW9uL3gtc2gKK3NoYXIgPQlhcHBsaWNhdGlvbi94LXNoYXIKK3NpdCA9CWFwcGxpY2F0aW9uL3gtc3R1ZmZpdAorc2tkID0JYXBwbGljYXRpb24veC1rb2FuCitza20gPQlhcHBsaWNhdGlvbi94LWtvYW4KK3NrcCA9CWFwcGxpY2F0aW9uL3gta29hbgorc2t0ID0JYXBwbGljYXRpb24veC1rb2FuCitzbWkgPQlhcHBsaWNhdGlvbi9zbWlsCitzbWlsID0JYXBwbGljYXRpb24vc21pbAorc29sID0JYXBwbGljYXRpb24vc29saWRzCitzcGwgPQlhcHBsaWNhdGlvbi94LWZ1dHVyZXNwbGFzaAorc3JjID0JYXBwbGljYXRpb24veC13YWlzLXNvdXJjZQorc3RlcCA9CWFwcGxpY2F0aW9uL1NURVAKK3N0bCA9CWFwcGxpY2F0aW9uL1NMQQorc3RwID0JYXBwbGljYXRpb24vU1RFUAorc3Y0Y3BpbyA9CWFwcGxpY2F0aW9uL3gtc3Y0Y3Bpbworc3Y0Y3JjID0JYXBwbGljYXRpb24veC1zdjRjcmMKK3N3ZiA9CWFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoCit0ID0JCWFwcGxpY2F0aW9uL3gtdHJvZmYKK3RhciA9CWFwcGxpY2F0aW9uL3gtdGFyCit0Y2wgPQlhcHBsaWNhdGlvbi94LXRjbAordGV4ID0JYXBwbGljYXRpb24veC10ZXgKK3RleGkgPQlhcHBsaWNhdGlvbi94LXRleGluZm8KK3RleGluZm8gPQlhcHBsaWNhdGlvbi94LXRleGluZm8KK3RyID0JYXBwbGljYXRpb24veC10cm9mZgordHNwID0JYXBwbGljYXRpb24vZHNwdHlwZQordW52ID0JYXBwbGljYXRpb24vaS1kZWFzCit1c3RhciA9CWFwcGxpY2F0aW9uL3gtdXN0YXIKK3ZjZCA9CWFwcGxpY2F0aW9uL3gtY2RsaW5rCit2ZGEgPQlhcHBsaWNhdGlvbi92ZGEKK3hsYyA9CWFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbAoreGxsID0JYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsCit4bG0gPQlhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwKK3hscyA9CWFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCwgKgoreGx3ID0JYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsCit6aXAgPQlhcHBsaWNhdGlvbi96aXAKKworW2F1ZGlvXQorYWlmID0JYXVkaW8veC1haWZmCithaWZjID0JYXVkaW8veC1haWZmCithaWZmID0JYXVkaW8veC1haWZmLCAqCithdSA9CWF1ZGlvL2Jhc2ljCitrYXIgPQlhdWRpby9taWRpCittaWQgPQlhdWRpby9taWRpLCAqCittaWRpID0JYXVkaW8vbWlkaQorbWthID0JYXVkaW8veC1tYXRyb3NrYQorbXAyID0JYXVkaW8vbXBlZworbXAzID0JYXVkaW8vbXBlZywgKgorbXBnYSA9CWF1ZGlvL21wZWcKK3JhID0JYXVkaW8veC1yZWFsYXVkaW8KK3JhbSA9CWF1ZGlvL3gtcG4tcmVhbGF1ZGlvCitycG0gPQlhdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4KK3NuZCA9CWF1ZGlvL2Jhc2ljCit0c2kgPQlhdWRpby9UU1AtYXVkaW8KK3dhdiA9CWF1ZGlvL3gtd2F2CisKK1t0ZXh0XQorYXMgPQl0ZXh0L3gtYWN0aW9uc2NyaXB0Cithc2MgPQl0ZXh0L3BsYWluCitjID0JCXRleHQvcGxhaW4KK2NjID0JdGV4dC9wbGFpbgorY3NzID0JdGV4dC9jc3MKK2V0eCA9CXRleHQveC1zZXRleHQKK2YgPQkJdGV4dC9wbGFpbgorZjkwID0JdGV4dC9wbGFpbgoraCA9CQl0ZXh0L3BsYWluCitoaCA9CXRleHQvcGxhaW4KK2h0bSA9CXRleHQvaHRtbAoraHRtbCA9CXRleHQvaHRtbCwgKgorbSA9CQl0ZXh0L3BsYWluCittNCA9CXRleHQvcGxhaW4KK3J0ZiA9CXRleHQvcnRmCitydHggPQl0ZXh0L3JpY2h0ZXh0CitzZ20gPQl0ZXh0L3NnbWwKK3NnbWwgPQl0ZXh0L3NnbWwsICoKK3NoID0JdGV4dC9wbGFpbgordHN2ID0JdGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcwordHBsID0JdGV4dC90ZW1wbGF0ZQordHh0ID0JdGV4dC9wbGFpbiwgKgoreG1sID0JdGV4dC94bWwKKworW3ZpZGVvXQorYXZpID0JdmlkZW8vYXZpCitmbGkgPQl2aWRlby94LWZsaQorZmx2ID0JdmlkZW8veC1mbHYKK20xdiA9CXZpZGVvL21wZWcKK20ydiA9CXZpZGVvL21wZWcKK21rdiA9CXZpZGVvL3gtbWF0cm9za2EKK21vdiA9CXZpZGVvL3F1aWNrdGltZQorbW92aWUgPQl2aWRlby94LXNnaS1tb3ZpZQorbXBlID0JdmlkZW8vbXBlZworbXBlZyA9CXZpZGVvL21wZWcKK21wNCA9CXZpZGVvL21wNAorbXBnID0JdmlkZW8vbXBlZywgKgorb2d2ID0JdmlkZW8vb2d2CitxdCA9CXZpZGVvL3F1aWNrdGltZQordml2ID0JdmlkZW8vdm5kLnZpdm8KK3Zpdm8gPQl2aWRlby92bmQudml2bwordm9iID0JdmlkZW8vbXBlZword2VibSA9CXZpZGVvL3dlYm0KK3dtdiA9CXZpZGVvL3gtbXMtd212Cithc2YgPQl2aWRlby94LW1zLWFzZgorcm0gPQl2aWRlby94LXJlYWx2aWRlbworcm12YiA9CXZpZGVvL3gtcmVhbHZpZGVvCisKK1tpbWFnZV0KK2JtcCA9CWltYWdlL2JtcAorZ2lmID0JaW1hZ2UvZ2lmCitpZWYgPQlpbWFnZS9pZWYKK2pwZSA9CWltYWdlL2pwZWcKK2pwZWcgPQlpbWFnZS9qcGVnCitqcGcgPQlpbWFnZS9qcGVnLCAqCitwYm0gPQlpbWFnZS94LXBvcnRhYmxlLWJpdG1hcAorcGdtID0JaW1hZ2UveC1wb3J0YWJsZS1ncmF5bWFwCitwbmcgPQlpbWFnZS9wbmcKK3BubSA9CWltYWdlL3gtcG9ydGFibGUtYW55bWFwCitwcG0gPQlpbWFnZS94LXBvcnRhYmxlLXBpeG1hcAorcHNkID0JaW1hZ2UvcHNkCityYXMgPQlpbWFnZS9jbXUtcmFzdGVyCityZ2IgPQlpbWFnZS94LXJnYgordGlmID0JaW1hZ2UvdGlmZgordGlmZiA9CWltYWdlL3RpZmYKK3hibSA9CWltYWdlL3gteGJpdG1hcAoreHBtID0JaW1hZ2UveC14cGl4bWFwCit4d2QgPQlpbWFnZS94LXh3aW5kb3dkdW1wCisKK1t4LWNvbmZlcmVuY2VdCitpY2UgPQl4LWNvbmZlcmVuY2UveC1jb29sdGFsaworCitbbW9kZWxdCitpZ2VzID0JbW9kZWwvaWdlcworaWdzID0JbW9kZWwvaWdlcworbWVzaCA9CW1vZGVsL21lc2gKK21zaCA9CW1vZGVsL21lc2gKK3NpbG8gPQltb2RlbC9tZXNoCit2cm1sID0JbW9kZWwvdnJtbAord3JsID0JbW9kZWwvdnJtbAorCitbd3d3XQorbWltZSA9CXd3dy9taW1lCisKK1tjaGVtaWNhbF0KK3BkYiA9CWNoZW1pY2FsL3gtcGRiCit4eXogPQljaGVtaWNhbC94LXBkYgorCisKKworCisKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvQ29ubmVjdG9yL1Rvb2xpbmcucGhwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9Db25uZWN0b3IvVG9vbGluZy5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQwNDBjNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvQ29ubmVjdG9yL1Rvb2xpbmcucGhwCkBAIC0wLDAgKzEsNDQxIEBACis8P3BocAorLyoKKyAqIFNjcmlwdDogVG9vbGluZy5waHAKKyAqICAgTW9vVG9vbHMgRmlsZU1hbmFnZXIgLSBCYWNrZW5kIGZvciB0aGUgRmlsZU1hbmFnZXIgU2NyaXB0IC0gU3VwcG9ydCBDb2RlCisgKgorICogQXV0aG9yczoKKyAqICAtIENocmlzdG9waCBQb2plciAoaHR0cDovL2Nwb2plci5uZXQpIChhdXRob3IpCisgKiAgLSBKYW1lcyBFaGx5IChodHRwOi8vd3d3LmRldnRyZW5jaC5jb20pCisgKiAgLSBGYWJpYW4gVm9nZWxzdGVsbGVyIChodHRwOi8vZnJvemVtYW4uZGUpCisgKiAgLSBHZXIgSG9iYmVsdCAoaHR0cDovL2hlYmJ1dC5uZXQpCisgKgorICogTGljZW5zZToKKyAqICAgTUlULXN0eWxlIGxpY2Vuc2UuCisgKgorICogQ29weXJpZ2h0OgorICogICBDb3B5cmlnaHQgKGMpIDIwMTEgW0NocmlzdG9waCBQb2plcl0oaHR0cDovL2Nwb2plci5uZXQpCisgKi8KKworCisKKworaWYgKCFmdW5jdGlvbl9leGlzdHMoJ3NhZmVfZ2xvYicpKQoreworCS8qKiNAKworCSAqIEV4dHJhIEdMT0IgY29uc3RhbnQgZm9yIHNhZmVfZ2xvYigpCisJICovCisJaWYgKCFkZWZpbmVkKCdHTE9CX05PRElSJykpICAgICAgIGRlZmluZSgnR0xPQl9OT0RJUicsMjU2KTsKKwlpZiAoIWRlZmluZWQoJ0dMT0JfUEFUSCcpKSAgICAgICAgZGVmaW5lKCdHTE9CX1BBVEgnLDUxMik7CisJaWYgKCFkZWZpbmVkKCdHTE9CX05PRE9UUycpKSAgICAgIGRlZmluZSgnR0xPQl9OT0RPVFMnLDEwMjQpOworCWlmICghZGVmaW5lZCgnR0xPQl9SRUNVUlNFJykpICAgICBkZWZpbmUoJ0dMT0JfUkVDVVJTRScsMjA0OCk7CisJaWYgKCFkZWZpbmVkKCdHTE9CX05PSElEREVOJykpICAgIGRlZmluZSgnR0xPQl9OT0hJRERFTicsNDA5Nik7CisJLyoqI0AtKi8KKworCisJLyoqCisJICogQSBzYWZlIGVtcG93ZXJlZCBnbG9iKCkuCisJICoKKwkgKiBGdW5jdGlvbiBnbG9iKCkgaXMgcHJvaGliaXRlZCBvbiBzb21lIHNlcnZlciAocHJvYmFibHkgaW4gc2FmZSBtb2RlKQorCSAqIChNZXNzYWdlICJXYXJuaW5nOiBnbG9iKCkgaGFzIGJlZW4gZGlzYWJsZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMgaW4KKwkgKiAoc2NyaXB0KSBvbiBsaW5lIChsaW5lKSIpIGZvciBzZWN1cml0eSByZWFzb25zIGFzIHN0YXRlZCBvbjoKKwkgKiBodHRwOi8vc2VjbGlzdHMub3JnL2Z1bGxkaXNjbG9zdXJlLzIwMDUvU2VwLzAwMDEuaHRtbAorCSAqCisJICogc2FmZV9nbG9iKCkgaW50ZW5kcyB0byByZXBsYWNlIGdsb2IoKSB1c2luZyByZWFkZGlyKCkgJiBmbm1hdGNoKCkgaW5zdGVhZC4KKwkgKiBTdXBwb3J0ZWQgZmxhZ3M6IEdMT0JfTUFSSywgR0xPQl9OT1NPUlQsIEdMT0JfT05MWURJUgorCSAqIEFkZGl0aW9uYWwgZmxhZ3M6IEdMT0JfTk9ESVIsIEdMT0JfUEFUSCwgR0xPQl9OT0RPVFMsIEdMT0JfUkVDVVJTRSwgR0xPQl9OT0hJRERFTgorCSAqIChub3Qgb3JpZ2luYWwgZ2xvYigpIGZsYWdzKQorCSAqCisJICogQGF1dGhvciBCaWd1ZU5pcXVlIEFUIHlhaG9vIERPVCBjYQorCSAqIEB1cGRhdGVzCisJICogLSAwODAzMjQgQWRkZWQgc3VwcG9ydCBmb3IgYWRkaXRpb25hbCBmbGFnczogR0xPQl9OT0RJUiwgR0xPQl9QQVRILAorCSAqICAgR0xPQl9OT0RPVFMsIEdMT0JfUkVDVVJTRQorCSAqIC0gW2lfYV0gQWRkZWQgc3VwcG9ydCBmb3IgR0xPQl9OT0hJRERFTiwgc3BsaXQgb3V0cHV0IGluIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyBzdWJhcnJheXMKKwkgKi8KKwlmdW5jdGlvbiBzYWZlX2dsb2IoJHBhdHRlcm4sICRmbGFncyA9IDApCisJeworCQkkc3BsaXQgPSBleHBsb2RlKCcvJywgc3RydHIoJHBhdHRlcm4sICdcXCcsICcvJykpOworCQkkbWFzayA9IGFycmF5X3BvcCgkc3BsaXQpOworCQkkcGF0aCA9IGltcGxvZGUoJy8nLCAkc3BsaXQpOworCQlpZiAoKCRkaXIgPSBAb3BlbmRpcigkcGF0aCkpICE9PSBmYWxzZSkKKwkJeworCQkJJGRpcnMgPSBhcnJheSgpOworCQkJJGZpbGVzID0gYXJyYXkoKTsKKwkJCXdoaWxlKCgkZmlsZSA9IHJlYWRkaXIoJGRpcikpICE9PSBmYWxzZSkKKwkJCXsKKwkJCQkvLyBIQUNLL1RXRUFLOiBQSFA1IGFuZCBiZWxvdyBhcmUgY29tcGxldGVseSBiMHJrZWQgd2hlbiBpdCBjb21lcyB0byBpbnRlcm5hdGlvbmFsIGZpbGVuYW1lcyAgIDotKAorCQkJCS8vICAgICAgICAgICAgIC0tPiBkbyBub3Qgc2hvdyBzdWNoIGZpbGVzL2RpcmVjdG9yaWVzIGluIHRoZSBsaXN0IGFzIHRoZXkgd29uJ3QgYmUgYWNjZXNzaWJsZSBhbnl3YXkhCisJCQkJLy8KKwkJCQkvLyBUaGUgcmVnZXggY2hhcnNldCBpcyBsaW1pdGVkIGV2ZW4gd2l0aGluIHRoZSBBU0NJSSByYW5nZSwgZHVlIHRvICAgIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlsZW5hbWUjQ29tcGFyaXNvbiU1Rm9mJTVGZmlsZSU1Rm5hbWUlNUZsaW1pdGF0aW9ucworCQkJCS8vIEFsdGhvdWdoIHRoZSBmaWx0ZXJlZCBjaGFyYWN0ZXJzIGhlcmUgYXJlIF9wb3NzaWJsZV8gb24gVU5JWCBmaWxlIHN5c3RlbXMsIHRoZXkncmUgc2V2ZXJlbHkgZnJvd25lZCB1cG9uLgorCQkJCWlmIChwcmVnX21hdGNoKCcvW14gLSkrLS4wLTs9QC1cW1xdLXt9fl0vJywgJGZpbGUpKSAgLy8gZmlsZXN5c3RlbS1pbGxlZ2FsIGNoYXJhY3RlcnMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBzZXQ6ICAgKiA+IDwgPyAvIFwgfAorCQkJCXsKKwkJCQkJLy8gc2ltcGx5IGRvIE5PVCBsaXN0IGFueXRoaW5nIHRoYXQgd2UgY2Fubm90IGNvcGUgd2l0aC4KKwkJCQkJLy8gVGhhdCBpbmNsdWRlcyBjbGVhcmx5IGluYWNjZXNzaWJsZSBmaWxlcyAoYW5kIHBhdGhzKSB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXJzOgorCQkJCQkvLyBQSFA1IGFuZCBiZWxvdyBhcmUgYSByZWFsIG1lc3Mgd2hlbiBpdCBjb21lcyB0byBoYW5kbGluZyBVbmljb2RlIGZpbGVzeXN0ZW1zCisJCQkJCS8vIChzZWUgdGhlIHBocC5uZXQgc2l0ZSB0b286IHJlYWRkaXIgLyBnbG9iIC8gZXRjLiB1c2VyIGNvbW1lbnRzIGFuZCB0aGUgb2ZmaWNpYWwKKwkJCQkJLy8gbm90aWNlIHRoYXQgUEhQIHdpbGwgc3VwcG9ydCBmaWxlc3lzdGVtIFVURi04L1VuaWNvZGUgb25seSB3aGVuIFBIUDYgaXMgcmVsZWFzZWQuCisJCQkJCS8vCisJCQkJCS8vIEJpZywgZmF0IGJ1bW1lciEKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCS8vJHRlbXAgPSB1bnBhY2soIkgqIiwkZmlsZSk7CisJCQkJLy9lY2hvICdoZXhkdW1wIG9mIGZpbGVuYW1lID0gJyAuICR0ZW1wWzFdIC4gJyBmb3IgZmlsZW5hbWUgPSAnIC4gJGZpbGUgLiAiPGJyPlxuIjsKKworCQkJCSRmaWxlcGF0aCA9ICRwYXRoIC4gJy8nIC4gJGZpbGU7CisJCQkJJGlzZGlyID0gaXNfZGlyKCRmaWxlcGF0aCk7CisKKwkJCQkvLyBSZWN1cnNlIHN1YmRpcmVjdG9yaWVzIChHTE9CX1JFQ1VSU0UpOyBzcGVlZHVwOiBubyBuZWVkIHRvIHNvcnQgdGhlIGludGVybWVkaWF0ZSByZXN1bHRzCisJCQkJaWYgKCgkZmxhZ3MgJiBHTE9CX1JFQ1VSU0UpICYmICRpc2RpciAmJiAhKCRmaWxlID09ICcuJyB8fCAkZmlsZSA9PSAnLi4nKSkKKwkJCQl7CisJCQkJCSRzdWJzZWN0ID0gc2FmZV9nbG9iKCRmaWxlcGF0aCAuICcvJyAuICRtYXNrLCAkZmxhZ3MgfCBHTE9CX05PU09SVCk7CisJCQkJCWlmIChpc19hcnJheSgkc3Vic2VjdCkpCisJCQkJCXsKKwkJCQkJCWlmICghKCRmbGFncyAmIEdMT0JfUEFUSCkpCisJCQkJCQl7CisJCQkJCQkJJGRpcnMgPSBhcnJheV9tZXJnZSgkZGlycywgYXJyYXlfcHJlcGVuZCgkc3ViamVjdFsnZGlycyddLCAkZmlsZSAuICcvJykpOworCQkJCQkJCSRmaWxlcyA9IGFycmF5X21lcmdlKCRmaWxlcywgYXJyYXlfcHJlcGVuZCgkc3ViamVjdFsnZmlsZXMnXSwgJGZpbGUgLiAnLycpKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQkvLyBNYXRjaCBmaWxlIG1hc2sKKwkJCQlpZiAoZm5tYXRjaCgkbWFzaywgJGZpbGUpKQorCQkJCXsKKwkJCQkJaWYgKCAoICghKCRmbGFncyAmIEdMT0JfT05MWURJUikpIHx8ICRpc2RpciApCisJCQkJCSAgJiYgKCAoISgkZmxhZ3MgJiBHTE9CX05PRElSKSkgfHwgISRpc2RpciApCisJCQkJCSAgJiYgKCAoISgkZmxhZ3MgJiBHTE9CX05PRE9UUykpIHx8ICEoJGZpbGUgPT0gJy4nIHx8ICRmaWxlID09ICcuLicpICkKKwkJCQkJICAmJiAoICghKCRmbGFncyAmIEdMT0JfTk9ISURERU4pKSB8fCAoJGZpbGVbMF0gIT0gJy4nIHx8ICRmaWxlID09ICcuLicpKSApCisJCQkJCXsKKwkJCQkJCWlmICgkaXNkaXIpCisJCQkJCQl7CisJCQkJCQkJJGRpcnNbXSA9ICgkZmxhZ3MgJiBHTE9CX1BBVEggPyAkcGF0aCAuICcvJyA6ICcnKSAuICRmaWxlIC4gKCgkZmxhZ3MgJiBHTE9CX01BUkspID8gJy8nIDogJycpOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCSRmaWxlc1tdID0gKCRmbGFncyAmIEdMT0JfUEFUSCA/ICRwYXRoIC4gJy8nIDogJycpIC4gJGZpbGU7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQljbG9zZWRpcigkZGlyKTsKKwkJCWlmICghKCRmbGFncyAmIEdMT0JfTk9TT1JUKSkKKwkJCXsKKwkJCQlzb3J0KCRkaXJzKTsKKwkJCQlzb3J0KCRmaWxlcyk7CisJCQl9CisJCQlyZXR1cm4gYXJyYXkoJ2RpcnMnID0+ICRkaXJzLCAnZmlsZXMnID0+ICRmaWxlcyk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9Cit9CisKKworCisKKy8vIGRlcml2ZWQgZnJvbSBodHRwOi8vbmwucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaHR0cC1idWlsZC1xdWVyeS5waHAjOTA0MzgKK2lmICghZnVuY3Rpb25fZXhpc3RzKCdodHRwX2J1aWxkX3F1ZXJ5X2V4JykpCit7CisJaWYgKCFkZWZpbmVkKCdQSFBfUVVFUllfUkZDMTczOCcpKSBkZWZpbmUoJ1BIUF9RVUVSWV9SRkMxNzM4JywgMSk7IC8vIGVuY29kaW5nIGlzIHBlcmZvcm1lZCBwZXIgUkZDIDE3MzggYW5kIHRoZSBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgbWVkaWEgdHlwZSwgd2hpY2ggaW1wbGllcyB0aGF0IHNwYWNlcyBhcmUgZW5jb2RlZCBhcyBwbHVzICgrKSBzaWducy4KKwlpZiAoIWRlZmluZWQoJ1BIUF9RVUVSWV9SRkMzOTg2JykpIGRlZmluZSgnUEhQX1FVRVJZX1JGQzM5ODYnLCAyKTsgLy8gZW5jb2RpbmcgaXMgcGVyZm9ybWVkIGFjY29yZGluZyB0byC7IFJGQyAzOTg2LCBhbmQgc3BhY2VzIHdpbGwgYmUgcGVyY2VudCBlbmNvZGVkICglMjApLgorCisJZnVuY3Rpb24gaHR0cF9idWlsZF9xdWVyeV9leCgkZGF0YSwgJHByZWZpeCA9ICcnLCAkc2VwID0gJycsICRrZXkgPSAnJywgJGVuY190eXBlID0gUEhQX1FVRVJZX1JGQzE3MzgpCisJeworCQkkcmV0ID0gYXJyYXkoKTsKKwkJaWYgKCFpc19hcnJheSgkZGF0YSkgJiYgIWlzX29iamVjdCgkZGF0YSkpCisJCXsKKwkJCWlmICgkZW5jX3R5cGUgPT0gUEhQX1FVRVJZX1JGQzE3MzgpCisJCQl7CisJCQkJJHJldFtdID0gdXJsZW5jb2RlKCRkYXRhKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkkcmV0W10gPSByYXd1cmxlbmNvZGUoJGRhdGEpOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKCFlbXB0eSgkcHJlZml4KSkKKwkJCXsKKwkJCQlpZiAoJGVuY190eXBlID09IFBIUF9RVUVSWV9SRkMxNzM4KQorCQkJCXsKKwkJCQkJJHByZWZpeCA9IHVybGVuY29kZSgkcHJlZml4KTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJJHByZWZpeCA9IHJhd3VybGVuY29kZSgkcHJlZml4KTsKKwkJCQl9CisJCQl9CisJCQlmb3JlYWNoICgkZGF0YSBhcyAkayA9PiAkdikKKwkJCXsKKwkJCQlpZiAoaXNfaW50KCRrKSkKKwkJCQl7CisJCQkJCSRrID0gJHByZWZpeCAuICRrOworCQkJCX0KKwkJCQllbHNlIGlmICgkZW5jX3R5cGUgPT0gUEhQX1FVRVJZX1JGQzE3MzgpCisJCQkJeworCQkJCQkkayA9IHVybGVuY29kZSgkayk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCSRrID0gcmF3dXJsZW5jb2RlKCRrKTsKKwkJCQl9CisJCQkJaWYgKCFlbXB0eSgka2V5KSB8fCAka2V5ID09PSAwKQorCQkJCXsKKwkJCQkJJGsgPSAka2V5IC4gJ1snIC4gJGsgLiAnXSc7CisJCQkJfQorCQkJCWlmIChpc19hcnJheSgkdikgfHwgaXNfb2JqZWN0KCR2KSkKKwkJCQl7CisJCQkJCSRyZXRbXSA9IGh0dHBfYnVpbGRfcXVlcnlfZXgoJHYsICcnLCAkc2VwLCAkaywgJGVuY190eXBlKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJaWYgKCRlbmNfdHlwZSA9PSBQSFBfUVVFUllfUkZDMTczOCkKKwkJCQkJeworCQkJCQkJJHYgPSB1cmxlbmNvZGUoJHYpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJJHYgPSByYXd1cmxlbmNvZGUoJHYpOworCQkJCQl9CisJCQkJCSRyZXRbXSA9ICRrIC4gJz0nIC4gJHY7CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChlbXB0eSgkc2VwKSkgJHNlcCA9IGluaV9nZXQoJ2FyZ19zZXBhcmF0b3Iub3V0cHV0Jyk7CisJCXJldHVybiBpbXBsb2RlKCRzZXAsICRyZXQpOworCX0KK30KKworCisKKy8qKgorICogRGV0ZXJtaW5lIGhvdyB0aGUgUEhQIGludGVycHJldGVyIHdhcyBpbnZva2VkOiBjbGkvY2dpL2Zhc3RjZ2kvc2VydmVyLAorICogd2hlcmUgJ3NlcnZlcicgaW1wbGllcyBQSFAgaXMgcGFydCBvZiBhIHdlYnNlcnZlciBpbiB0aGUgZm9ybSBvZiBhICdtb2R1bGUnIChlLmcuIG1vZF9waHA1KSBvciBzaW1pbGFyLgorICoKKyAqIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGRlY2lkZSB0aGUgY29ycmVjdCB3YXkgdG8gc2VuZCB0aGUgJ3Jlc3Bvc2UgaGVhZGVyIGNvZGUnOgorICogc2VlIHNlbmRfcmVzcG9uc2Vfc3RhdHVzX2hlYWRlcigpLgorICovCitpZiAoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X2ludGVycHJldGVyX2ludm9jYXRpb25fbW9kZScpKQoreworCWZ1bmN0aW9uIGdldF9pbnRlcnByZXRlcl9pbnZvY2F0aW9uX21vZGUoKQorCXsKKwkJZ2xvYmFsICRfRU5WOworCQlnbG9iYWwgJF9TRVJWRVI7CisKKwkJLyoKKwkJICogc2VlCisJCSAqCisJCSAqIGh0dHA6Ly9ubDIucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGhwLXNhcGktbmFtZS5waHAKKwkJICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xOTA3NTkvY2FuLXBocC1kZXRlY3QtaWYtaXRzLXJ1bi1mcm9tLWEtY3Jvbi1qb2Itb3ItZnJvbS10aGUtY29tbWFuZC1saW5lCisJCSAqLworCQkkbW9kZSA9ICJzZXJ2ZXIiOworCQkkbmFtZSA9IHBocF9zYXBpX25hbWUoKTsKKwkJaWYgKHByZWdfbWF0Y2goIi9mY2dpLyIsICRuYW1lKSA9PSAxKQorCQl7CisJCQkkbW9kZSA9ICJmYXN0Y2dpIjsKKwkJfQorCQllbHNlIGlmIChwcmVnX21hdGNoKCIvY2xpLyIsICRuYW1lKSA9PSAxKQorCQl7CisJCQkkbW9kZSA9ICJjbGkiOworCQl9CisJCWVsc2UgaWYgKHByZWdfbWF0Y2goIi9jZ2kvIiwgJG5hbWUpID09IDEpCisJCXsKKwkJCSRtb2RlID0gImNnaSI7CisJCX0KKworCQkvKgorCQkgKiBjaGVjayB3aGV0aGVyIFBPU0lYIGZ1bmN0aW9ucyBoYXZlIGJlZW4gY29tcGlsZWQvZW5hYmxlZDsgeGFtcHAgb24gV2luMzIvNjQgZG9lc24ndCBoYXZlIHRoZSBidWdnZXJzISA6LSgKKwkJICovCisJCWlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2lzYXR0eScpKQorCQl7CisJCQlpZiAocG9zaXhfaXNhdHR5KFNURE9VVCkpCisJCQl7CisJCQkJLyogZXZlbiB3aGVuIHNlZW1pbmdseSBydW4gYXMgY2dpL2Zhc3RjZ2ksIGEgdmFsaWQgc3Rkb3V0IFRUWSBpbXBsaWVzIGFuIGludGVyYWN0aXZlIGNvbW1hbmRsaW5lIHJ1biAqLworCQkJCSRtb2RlID0gJ2NsaSc7CisJCQl9CisJCX0KKworCQlpZiAoIWVtcHR5KCRfRU5WWydURVJNJ10pICYmIGVtcHR5KCRfU0VSVkVSWydSRU1PVEVfQUREUiddKSkKKwkJeworCQkJLyogZXZlbiB3aGVuIHNlZW1pbmdseSBydW4gYXMgY2dpL2Zhc3RjZ2ksIGEgdmFsaWQgc3Rkb3V0IFRUWSBpbXBsaWVzIGFuIGludGVyYWN0aXZlIGNvbW1hbmRsaW5lIHJ1biAqLworCQkJJG1vZGUgPSAnY2xpJzsKKwkJfQorCisJCXJldHVybiAkbW9kZTsKKwl9Cit9CisKKworCisKKworCisvKioKKyAqIFJldHVybiB0aGUgSFRUUCByZXNwb25zZSBjb2RlIHN0cmluZyBmb3IgdGhlIGdpdmVuIHJlc3BvbnNlIGNvZGUKKyAqLworaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9yZXNwb25zZV9jb2RlX3N0cmluZycpKQoreworCWZ1bmN0aW9uIGdldF9yZXNwb25zZV9jb2RlX3N0cmluZygkcmVzcG9uc2VfY29kZSkKKwl7CisJCSRyZXNwb25zZV9jb2RlID0gaW50dmFsKCRyZXNwb25zZV9jb2RlKTsKKwkJc3dpdGNoICgkcmVzcG9uc2VfY29kZSkKKwkJeworCQljYXNlIDEwMDogICByZXR1cm4gIlJGQzI2MTYgU2VjdGlvbiAxMC4xLjE6IENvbnRpbnVlIjsKKwkJY2FzZSAxMDE6ICAgcmV0dXJuICJSRkMyNjE2IFNlY3Rpb24gMTAuMS4yOiBTd2l0Y2hpbmcgUHJvdG9jb2xzIjsKKwkJY2FzZSAyMDA6ICAgcmV0dXJuICJSRkMyNjE2IFNlY3Rpb24gMTAuMi4xOiBPSyI7CisJCWNhc2UgMjAxOiAgIHJldHVybiAiUkZDMjYxNiBTZWN0aW9uIDEwLjIuMjogQ3JlYXRlZCI7CisJCWNhc2UgMjAyOiAgIHJldHVybiAiUkZDMjYxNiBTZWN0aW9uIDEwLjIuMzogQWNjZXB0ZWQiOworCQljYXNlIDIwMzogICByZXR1cm4gIlJGQzI2MTYgU2VjdGlvbiAxMC4yLjQ6IE5vbi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uIjsKKwkJY2FzZSAyMDQ6ICAgcmV0dXJuICJSRkMyNjE2IFNlY3Rpb24gMTAuMi41OiBObyBDb250ZW50IjsKKwkJY2FzZSAyMDU6ICAgcmV0dXJuICJSRkMyNjE2IFNlY3Rpb24gMTAuMi42OiBSZXNldCBDb250ZW50IjsKKwkJY2FzZSAyMDY6ICAgcmV0dXJuICJSRkMyNjE2IFNlY3Rpb24gMTAuMi43OiBQYXJ0aWFsIENvbnRlbnQiOworCQljYXNlIDMwMDogICByZXR1cm4gIlJGQzI2MTYgU2VjdGlvbiAxMC4zLjE6IE11bHRpcGxlIENob2ljZXMiOworCQljYXNlIDMwMTogICByZXR1cm4gIlJGQzI2MTYgU2VjdGlvbiAxMC4zLjI6IE1vdmVkIFBlcm1hbmVudGx5IjsKKwkJY2FzZSAzMDI6ICAgcmV0dXJuICJSRkMyNjE2IFNlY3Rpb24gMTAuMy4zOiBGb3VuZCI7CisJCWNhc2UgMzAzOiAgIHJldHVybiAiUkZDMjYxNiBTZWN0aW9uIDEwLjMuNDogU2VlIE90aGVyIjsKKwkJY2FzZSAzMDQ6ICAgcmV0dXJuICJSRkMyNjE2IFNlY3Rpb24gMTAuMy41OiBOb3QgTW9kaWZpZWQiOworCQljYXNlIDMwNTogICByZXR1cm4gIlJGQzI2MTYgU2VjdGlvbiAxMC4zLjY6IFVzZSBQcm94eSI7CisJCWNhc2UgMzA3OiAgIHJldHVybiAiUkZDMjYxNiBTZWN0aW9uIDEwLjMuODogVGVtcG9yYXJ5IFJlZGlyZWN0IjsKKwkJY2FzZSA0MDA6ICAgcmV0dXJuICJSRkMyNjE2IFNlY3Rpb24gMTAuNC4xOiBCYWQgUmVxdWVzdCI7CisJCWNhc2UgNDAxOiAgIHJldHVybiAiUkZDMjYxNiBTZWN0aW9uIDEwLjQuMjogVW5hdXRob3JpemVkIjsKKwkJY2FzZSA0MDI6ICAgcmV0dXJuICJSRkMyNjE2IFNlY3Rpb24gMTAuNC4zOiBQYXltZW50IFJlcXVpcmVkIjsKKwkJY2FzZSA0MDM6ICAgcmV0dXJuICJSRkMyNjE2IFNlY3Rpb24gMTAuNC40OiBGb3JiaWRkZW4iOworCQljYXNlIDQwNDogICByZXR1cm4gIlJGQzI2MTYgU2VjdGlvbiAxMC40LjU6IE5vdCBGb3VuZCI7CisJCWNhc2UgNDA1OiAgIHJldHVybiAiUkZDMjYxNiBTZWN0aW9uIDEwLjQuNjogTWV0aG9kIE5vdCBBbGxvd2VkIjsKKwkJY2FzZSA0MDY6ICAgcmV0dXJuICJSRkMyNjE2IFNlY3Rpb24gMTAuNC43OiBOb3QgQWNjZXB0YWJsZSI7CisJCWNhc2UgNDA3OiAgIHJldHVybiAiUkZDMjYxNiBTZWN0aW9uIDEwLjQuODogUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWQiOworCQljYXNlIDQwODogICByZXR1cm4gIlJGQzI2MTYgU2VjdGlvbiAxMC40Ljk6IFJlcXVlc3QgVGltZS1vdXQiOworCQljYXNlIDQwOTogICByZXR1cm4gIlJGQzI2MTYgU2VjdGlvbiAxMC40LjEwOiBDb25mbGljdCI7CisJCWNhc2UgNDEwOiAgIHJldHVybiAiUkZDMjYxNiBTZWN0aW9uIDEwLjQuMTE6IEdvbmUiOworCQljYXNlIDQxMTogICByZXR1cm4gIlJGQzI2MTYgU2VjdGlvbiAxMC40LjEyOiBMZW5ndGggUmVxdWlyZWQiOworCQljYXNlIDQxMjogICByZXR1cm4gIlJGQzI2MTYgU2VjdGlvbiAxMC40LjEzOiBQcmVjb25kaXRpb24gRmFpbGVkIjsKKwkJY2FzZSA0MTM6ICAgcmV0dXJuICJSRkMyNjE2IFNlY3Rpb24gMTAuNC4xNDogUmVxdWVzdCBFbnRpdHkgVG9vIExhcmdlIjsKKwkJY2FzZSA0MTQ6ICAgcmV0dXJuICJSRkMyNjE2IFNlY3Rpb24gMTAuNC4xNTogUmVxdWVzdC1VUkkgVG9vIExhcmdlIjsKKwkJY2FzZSA0MTU6ICAgcmV0dXJuICJSRkMyNjE2IFNlY3Rpb24gMTAuNC4xNjogVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZSI7CisJCWNhc2UgNDE2OiAgIHJldHVybiAiUkZDMjYxNiBTZWN0aW9uIDEwLjQuMTc6IFJlcXVlc3RlZCByYW5nZSBub3Qgc2F0aXNmaWFibGUiOworCQljYXNlIDQxNzogICByZXR1cm4gIlJGQzI2MTYgU2VjdGlvbiAxMC40LjE4OiBFeHBlY3RhdGlvbiBGYWlsZWQiOworCQljYXNlIDUwMDogICByZXR1cm4gIlJGQzI2MTYgU2VjdGlvbiAxMC41LjE6IEludGVybmFsIFNlcnZlciBFcnJvciI7CisJCWNhc2UgNTAxOiAgIHJldHVybiAiUkZDMjYxNiBTZWN0aW9uIDEwLjUuMjogTm90IEltcGxlbWVudGVkIjsKKwkJY2FzZSA1MDI6ICAgcmV0dXJuICJSRkMyNjE2IFNlY3Rpb24gMTAuNS4zOiBCYWQgR2F0ZXdheSI7CisJCWNhc2UgNTAzOiAgIHJldHVybiAiUkZDMjYxNiBTZWN0aW9uIDEwLjUuNDogU2VydmljZSBVbmF2YWlsYWJsZSI7CisJCWNhc2UgNTA0OiAgIHJldHVybiAiUkZDMjYxNiBTZWN0aW9uIDEwLjUuNTogR2F0ZXdheSBUaW1lLW91dCI7CisJCWNhc2UgNTA1OiAgIHJldHVybiAiUkZDMjYxNiBTZWN0aW9uIDEwLjUuNjogSFRUUCBWZXJzaW9uIG5vdCBzdXBwb3J0ZWQiOworCS8qCisJCWNhc2UgMTAyOiAgIHJldHVybiAiUHJvY2Vzc2luZyI7ICAvLyBodHRwOi8vd3d3LmFza2FwYWNoZS5jb20vaHRhY2Nlc3MvYXBhY2hlLXN0YXR1cy1jb2RlLWhlYWRlcnMtZXJyb3Jkb2N1bWVudC5odG1sI20wLWFza2FwYWNoZTMKKwkJY2FzZSAyMDc6ICAgcmV0dXJuICJNdWx0aS1TdGF0dXMiOworCQljYXNlIDQxODogICByZXR1cm4gIkknbSBhIHRlYXBvdCI7CisJCWNhc2UgNDE5OiAgIHJldHVybiAidW51c2VkIjsKKwkJY2FzZSA0MjA6ICAgcmV0dXJuICJ1bnVzZWQiOworCQljYXNlIDQyMTogICByZXR1cm4gInVudXNlZCI7CisJCWNhc2UgNDIyOiAgIHJldHVybiAiVW5wcm9jY2Vzc2FibGUgZW50aXR5IjsKKwkJY2FzZSA0MjM6ICAgcmV0dXJuICJMb2NrZWQiOworCQljYXNlIDQyNDogICByZXR1cm4gIkZhaWxlZCBEZXBlbmRlbmN5IjsKKwkJY2FzZSA0MjU6ICAgcmV0dXJuICJOb2RlIGNvZGUiOworCQljYXNlIDQyNjogICByZXR1cm4gIlVwZ3JhZGUgUmVxdWlyZWQiOworCQljYXNlIDUwNjogICByZXR1cm4gIlZhcmlhbnQgQWxzbyBOZWdvdGlhdGVzIjsKKwkJY2FzZSA1MDc6ICAgcmV0dXJuICJJbnN1ZmZpY2llbnQgU3RvcmFnZSI7CisJCWNhc2UgNTA4OiAgIHJldHVybiAidW51c2VkIjsKKwkJY2FzZSA1MDk6ICAgcmV0dXJuICJ1bnVzZWQiOworCQljYXNlIDUxMDogICByZXR1cm4gIk5vdCBFeHRlbmRlZCI7CisJKi8KKwkJZGVmYXVsdDogICByZXR1cm4gcnRyaW0oIlVua25vd24gUmVzcG9uc2UgQ29kZSAiIC4gJHJlc3BvbnNlX2NvZGUpOworCQl9CisJfQorfQorCisKKworLyoqCisgKiBQZXJmb3JtcyB0aGUgY29ycmVjdCB3YXkgb2YgdHJhbnNtaXR0aW5nIHRoZSByZXNwb25zZSBzdGF0dXMgY29kZSBoZWFkZXI6IFBIUCBoZWFkZXIoKSBtdXN0IGJlIGludm9rZWQgaW4gZGlmZmVyZW50IHdheXMKKyAqIGRlcGVuZGVudCBvbiB0aGUgd2F5IHRoZSBQSFAgaW50ZXJwcmV0ZXIgaGFzIGJlZW4gaW52b2tlZC4KKyAqCisgKiBTZWUgYWxzbzoKKyAqCisgKiAgIGh0dHA6Ly9ubDIucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaGVhZGVyLnBocAorICovCitpZiAoIWZ1bmN0aW9uX2V4aXN0cygnc2VuZF9yZXNwb25zZV9zdGF0dXNfaGVhZGVyJykpCit7CisJZnVuY3Rpb24gc2VuZF9yZXNwb25zZV9zdGF0dXNfaGVhZGVyKCRyZXNwb25zZV9jb2RlKQorCXsKKwkJJG1vZGUgPSBnZXRfaW50ZXJwcmV0ZXJfaW52b2NhdGlvbl9tb2RlKCk7CisJCXN3aXRjaCAoJG1vZGUpCisJCXsKKwkJZGVmYXVsdDoKKwkJY2FzZSAnZmNnaSc6CisJCQloZWFkZXIoJ1N0YXR1czogJyAuICRyZXNwb25zZV9jb2RlLCB0cnVlLCAkcmVzcG9uc2VfY29kZSk7CisJCQlicmVhazsKKworCQljYXNlICdzZXJ2ZXInOgorCQkJaGVhZGVyKCdIVFRQLzEuMCAnIC4gJHJlc3BvbnNlX2NvZGUgLiAnICcgLiBnZXRfcmVzcG9uc2VfY29kZV9zdHJpbmcoJHJlc3BvbnNlX2NvZGUpLCB0cnVlLCAkcmVzcG9uc2VfY29kZSk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworCisKKworCisKKy8qCisgKiBodHRwOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYWdlLXR5cGUtdG8tZXh0ZW5zaW9uLnBocCM3NzM1NAorICogLS0+CisgKiBodHRwOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYWdlLXR5cGUtdG8tZXh0ZW5zaW9uLnBocCM3OTY4OAorICovCitpZiAoIWZ1bmN0aW9uX2V4aXN0cygnaW1hZ2VfdHlwZV90b19leHRlbnNpb24nKSkKK3sKKwlmdW5jdGlvbiBpbWFnZV90eXBlX3RvX2V4dGVuc2lvbigkdHlwZSwgJGRvdCA9IHRydWUpCisJeworCQkkZSA9IGFycmF5KDEgPT4gJ2dpZicsICdqcGVnJywgJ3BuZycsICdzd2YnLCAncHNkJywgJ2JtcCcsICd0aWZmJywgJ3RpZmYnLCAnanBjJywgJ2pwMicsICdqcGYnLCAnamIyJywgJ3N3YycsICdhaWZmJywgJ3dibXAnLCAneGJtJyk7CisKKwkJLy8gV2UgYXJlIGV4cGVjdGluZyBhbiBpbnRlZ2VyLgorCQkkdCA9IChpbnQpJHR5cGU7CisJCWlmICghJHQpCisJCXsKKwkJCXRyaWdnZXJfZXJyb3IoJ2ludmFsaWQgSU1BR0VUWVBFX1hYWCgnIC4gJHR5cGUgLiAnKSBwYXNzZWQgdG8gaW1hZ2VfdHlwZV90b19leHRlbnNpb24oKScsIEVfVVNFUl9OT1RJQ0UpOworCQkJcmV0dXJuIG51bGw7CisJCX0KKwkJaWYgKCFpc3NldCgkZVskdF0pKQorCQl7CisJCQl0cmlnZ2VyX2Vycm9yKCd1bmlkZW50aWZpZWQgSU1BR0VUWVBFX1hYWCgnIC4gJHR5cGUgLiAnKSBwYXNzZWQgdG8gaW1hZ2VfdHlwZV90b19leHRlbnNpb24oKScsIEVfVVNFUl9OT1RJQ0UpOworCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQlyZXR1cm4gKCRkb3QgPyAnLicgOiAnJykgLiAkZVskdF07CisJfQorfQorCisKK2lmICghZnVuY3Rpb25fZXhpc3RzKCdpbWFnZV90eXBlX3RvX21pbWVfdHlwZScpKQoreworCWZ1bmN0aW9uIGltYWdlX3R5cGVfdG9fbWltZV90eXBlKCR0eXBlKQorCXsKKwkJJG0gPSBhcnJheSgxID0+ICdpbWFnZS9naWYnLCAnaW1hZ2UvanBlZycsICdpbWFnZS9wbmcnLAorCQkJJ2FwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoJywgJ2ltYWdlL3BzZCcsICdpbWFnZS9ibXAnLAorCQkJJ2ltYWdlL3RpZmYnLCAnaW1hZ2UvdGlmZicsICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAorCQkJJ2ltYWdlL2pwMicsICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKKwkJCSdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCcsICdpbWFnZS9pZmYnLCAnaW1hZ2Uvdm5kLndhcC53Ym1wJywgJ2ltYWdlL3hibScpOworCisJCS8vIFdlIGFyZSBleHBlY3RpbmcgYW4gaW50ZWdlci4KKwkJJHQgPSAoaW50KSR0eXBlOworCQlpZiAoISR0KQorCQl7CisJCQl0cmlnZ2VyX2Vycm9yKCdpbnZhbGlkIElNQUdFVFlQRV9YWFgoJyAuICR0eXBlIC4gJykgcGFzc2VkIHRvIGltYWdlX3R5cGVfdG9fbWltZV90eXBlKCknLCBFX1VTRVJfTk9USUNFKTsKKwkJCXJldHVybiBudWxsOworCQl9CisJCWlmICghaXNzZXQoJG1bJHRdKSkKKwkJeworCQkJdHJpZ2dlcl9lcnJvcigndW5pZGVudGlmaWVkIElNQUdFVFlQRV9YWFgoJyAuICR0eXBlIC4gJykgcGFzc2VkIHRvIGltYWdlX3R5cGVfdG9fbWltZV90eXBlKCknLCBFX1VTRVJfTk9USUNFKTsKKwkJCXJldHVybiBudWxsOworCQl9CisJCXJldHVybiAkbVskdF07CisJfQorfQorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9Dc3MvQWRkaXRpb25zLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvQ3NzL0FkZGl0aW9ucy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWExNGQ4YQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvQ3NzL0FkZGl0aW9ucy5jc3MKQEAgLTAsMCArMSwxNDEgQEAKKy8qIHVwbG9hZCAqLworCisuZmlsZW1hbmFnZXItdXBsb2FkZXIgdWwuZmlsZW1hbmFnZXItdXBsb2FkZXItbGlzdCB7CisJcGFkZGluZzogMnB4IDVweDsKK30KKworLmZpbGVtYW5hZ2VyLXVwbG9hZGVyIGxpLmZpbGUgaW1nLmljb24sIC5maWxlbWFuYWdlci11cGxvYWRlciBsaS5maWxlIGltZy5maWxlLWNhbmNlbCB7CisJcG9zaXRpb246IHJlbGF0aXZlOworCXRvcDogM3B4OworfQorLmZpbGVtYW5hZ2VyLXVwbG9hZGVyIGxpLmZpbGUgaW1nLmljb24geworCXBhZGRpbmctcmlnaHQ6IDRweDsKK30KKworLyogT3ZlcmxheSAqLworZGl2LmZpbGVtYW5hZ2VyLW92ZXJsYXkgeworCXBvc2l0aW9uOiBhYnNvbHV0ZTsKKwlsZWZ0OiAwOworCXRvcDogMDsKKwlkaXNwbGF5OiBub25lOworCisJLyogei1pbmRleDogOTk5OyAqLworCWJhY2tncm91bmQ6ICNhYWE7Cit9CisKKy8qIERpYWxvZyAqLworZGl2LmZpbGVtYW5hZ2VyLW92ZXJsYXktZGlhbG9nIHsKKwkvKiB6LWluZGV4OiAxOTk5OyAqLworCWJhY2tncm91bmQ6ICNmZmY7Cit9CisKK2Rpdi5maWxlbWFuYWdlci1kaWFsb2cgeworCXBvc2l0aW9uOiBhYnNvbHV0ZTsKKwlkaXNwbGF5OiBub25lOworCS8qIHotaW5kZXg6IDIwMDA7ICovCisKKwl3aWR0aDogMjI5cHg7CisJcGFkZGluZy1ib3R0b206IDQwcHg7CisKKwljb2xvcjogI2JlYmViZTsKKwlmb250LWZhbWlseTogVGFob21hLCBzYW5zLXNlcmlmOworCWZvbnQtc2l6ZTogMTJweDsKKwliYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7CisKKwktby1ib3JkZXItcmFkaXVzOiA0cHg7CisJLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7CisJLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7CisJYm9yZGVyLXJhZGl1czogNHB4OworCisJYm94LXNoYWRvdzogcmdiYSgwLCAwLCAwLCAwLjMpIDAgMCAxMHB4OworCS1tb3otYm94LXNoYWRvdzogcmdiYSgwLCAwLCAwLCAwLjMpIDAgMCAxMHB4OworCS13ZWJraXQtYm94LXNoYWRvdzogcmdiYSgwLCAwLCAwLCAwLjMpIDAgMCAxMHB4OworCS1vLWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4zKSAwIDAgMTBweDsKK30KKworZGl2LmZpbGVtYW5hZ2VyLWRpYWxvZy1lbmdpbmUtdHJpZGVudCB7CisJYmFja2dyb3VuZDogIzAwMDsKK30KKworZGl2LmZpbGVtYW5hZ2VyLWRpYWxvZy1lbmdpbmUtdHJpZGVudDQgeworCXdpZHRoOiAyNDlweDsKK30KKworZGl2LmZpbGVtYW5hZ2VyLWRpYWxvZyBhIHsKKwljb2xvcjogI2FhYTsKK30KK2Rpdi5maWxlbWFuYWdlci1kaWFsb2cgYTpob3ZlciB7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorZGl2LmZpbGVtYW5hZ2VyLWRpYWxvZyBkaXYgeworCW1hcmdpbjogMTBweDsKK30KKworZGl2LmZpbGVtYW5hZ2VyLWRpYWxvZyBpbnB1dCwgZGl2LmZpbGVtYW5hZ2VyLWRpYWxvZyBzZWxlY3QgeworCXdpZHRoOiA5NCU7CisJbWFyZ2luOiAyMHB4IDIlOworCXBhZGRpbmc6IDJweCAxJTsKKwlib3JkZXI6IDFweCBzb2xpZCAjYmViZWJlOworCWJhY2tncm91bmQ6ICNmZmY7CisKKwljb2xvcjogIzMzMzsKKwlmb250LWZhbWlseTogVGFob21hLCBzYW5zLXNlcmlmOworCWZvbnQtc2l6ZTogMTJweDsKK30KKworZGl2LmZpbGVtYW5hZ2VyLWRpYWxvZy1lbmdpbmUtdHJpZGVudDQgaW5wdXQsIGRpdi5maWxlbWFuYWdlci1kaWFsb2ctZW5naW5lLXRyaWRlbnQ1IGlucHV0IHsKKwl3aWR0aDogODAlOworfQorCitkaXYuZmlsZW1hbmFnZXItZGlhbG9nIGJ1dHRvbiwgZGl2LmZpbGVtYW5hZ2VyLWRpYWxvZyAuZmlsZW1hbmFnZXItYnV0dG9uIHsKKwlwb3NpdGlvbjogYWJzb2x1dGU7CisJYm90dG9tOiAxNXB4OworCXJpZ2h0OiAxNXB4OworCisJd2lkdGg6IGF1dG87CisJaGVpZ2h0OiAyMnB4OworCXBhZGRpbmc6IDJweDsKKwlib3JkZXI6IDFweCBzb2xpZCAjYmViZWJlOworCisJY3Vyc29yOiBwb2ludGVyOworCWNvbG9yOiAjMzMzOworCXRleHQtc2hhZG93OiAjZWVlIDFweCAxcHggMXB4OworCisJZm9udC1mYW1pbHk6IFRhaG9tYSwgc2Fucy1zZXJpZjsKKwlsZXR0ZXItc3BhY2luZzogMDsKKwlmb250LXNpemU6IDEycHg7CisJZm9udC13ZWlnaHQ6IG5vcm1hbDsKKwltYXJnaW46IDA7CisJYmFja2dyb3VuZDogdXJsKCIuLi9JbWFnZXMvYnV0dG9uLnBuZyIpIHJlcGVhdC14OworCS1tb3otYm9yZGVyLXJhZGl1czogNHB4OworCS13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4OworCWJvcmRlci1yYWRpdXM6IDRweDsKK30KK2Rpdi5maWxlbWFuYWdlci1kaWFsb2ctZW5naW5lLXRyaWRlbnQ0IGJ1dHRvbiwgZGl2LmZpbGVtYW5hZ2VyLWRpYWxvZy1lbmdpbmUtdHJpZGVudDQgLmZpbGVtYW5hZ2VyLWJ1dHRvbiwKK2Rpdi5maWxlbWFuYWdlci1kaWFsb2ctZW5naW5lLXRyaWRlbnQ1IGJ1dHRvbiwgZGl2LmZpbGVtYW5hZ2VyLWRpYWxvZy1lbmdpbmUtdHJpZGVudDUgLmZpbGVtYW5hZ2VyLWJ1dHRvbiB7CisJcGFkZGluZzogMCAuMjVlbTsKKwlvdmVyZmxvdzogdmlzaWJsZTsKK30KKworZGl2LmZpbGVtYW5hZ2VyLWRpYWxvZyBidXR0b24uZmlsZW1hbmFnZXItZGlhbG9nLWRlY2xpbmUsIGRpdi5maWxlbWFuYWdlci1kaWFsb2cgLmZpbGVtYW5hZ2VyLWJ1dHRvbi5maWxlbWFuYWdlci1kaWFsb2ctZGVjbGluZSB7CisJcmlnaHQ6IGF1dG87CisJbGVmdDogMTVweDsKK30KKworLyogTm9GbGFzaC51cGxvYWQgKi8KK2Rpdi5maWxlbWFuYWdlciAjZmlsZW1hbmFnZXJfdXBsb2FkX0ZpbGVkYXRhCit7CisJd2lkdGg6IGF1dG87CisJZm9udC1zaXplOiAxMXB4OworfQorCitkaXYuZmlsZW1hbmFnZXIgbGFiZWwuZmlsZW1hbmFnZXItcmVzaXplCit7CisJd2lkdGg6IGF1dG87Cit9CisKK2Rpdi5maWxlbWFuYWdlciBsYWJlbC5maWxlbWFuYWdlci1yZXNpemUgc3BhbgoreworCXdpZHRoOiAyMCU7CisJb3ZlcmZsb3c6IGhpZGRlbjsKK30KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvQ3NzL0ZpbGVNYW5hZ2VyLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvQ3NzL0ZpbGVNYW5hZ2VyLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMDBhYzhhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9Dc3MvRmlsZU1hbmFnZXIuY3NzCkBAIC0wLDAgKzEsMTE4MCBAQAorZGl2LmZpbGVtYW5hZ2VyLWNvbnRhaW5lciB7CisJZGlzcGxheTogbm9uZTsKK30KK2Rpdi5maWxlbWFuYWdlciAqIHsKKwlvdXRsaW5lOiAwOworfQorZGl2LmZpbGVtYW5hZ2VyIGEgaW1nIHsKKwlib3JkZXI6IDA7Cit9CisKK2Rpdi5maWxlbWFuYWdlci1jb250YWluZXIsCitkaXYuZmlsZW1hbmFnZXIsCitkaXYuZmlsZW1hbmFnZXIgYnV0dG9uLCBkaXYuZmlsZW1hbmFnZXIgLmZpbGVtYW5hZ2VyLWJ1dHRvbiwKK2Rpdi5maWxlbWFuYWdlciBsYWJlbCwKK2Rpdi5maWxlbWFuYWdlciBoMSB7CisJd2lkdGg6IGF1dG87CisJbWFyZ2luOiAwOworCisJZm9udDogbm9ybWFsIDExcHggdmVyZGFuYSwgYXJpYWwsIFRhaG9tYSwgc2Fucy1zZXJpZjsKKwl0ZXh0LXRyYW5zZm9ybTogbm9uZTsKKwlsZXR0ZXItc3BhY2luZzogMDsKK30KKworLyogZmlsZW1hbmFnZXIgKi8KKworZGl2LmZpbGVtYW5hZ2VyIHsKKwliYWNrZ3JvdW5kOiAjRjVGNUY1OworCisJcG9zaXRpb246IGFic29sdXRlOworCS8qIHotaW5kZXg6IDEwMDE7ICovCisJd2lkdGg6IDc1JTsKKwloZWlnaHQ6IDc1JTsKKworCWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4zKSAwIDAgNDBweDsKKwktbW96LWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4zKSAwIDAgNDBweDsKKwktd2Via2l0LWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4zKSAwIDAgNDBweDsKKwktby1ib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMykgMCAwIDQwcHg7CisKKwlib3JkZXItcmFkaXVzOiAwIDAgOHB4IDhweDsKKwktbW96LWJvcmRlci1yYWRpdXM6IDAgMCA4cHggOHB4OworCS13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAwIDhweCA4cHg7CisJLW8tYm9yZGVyLXJhZGl1czogMCAwIDhweCA4cHg7Cit9CisKKy8qIGZpbGVtYW5hZ2VyLWhlYWRlciAqLworZGl2LmZpbGVtYW5hZ2VyLWhlYWRlciB7CisJLyogei1pbmRleDogMzsgKi8KKwlwb3NpdGlvbjogYWJzb2x1dGU7CisJdG9wOiAtMzBweDsKKwlsZWZ0OiAwcHg7CisJd2lkdGg6IDEwMCU7CisJaGVpZ2h0OiAxNHB4OworCXBhZGRpbmc6IDhweCAwcHg7CisJYmFja2dyb3VuZDogdXJsKCIuLi9JbWFnZXMvbWVudS5wbmciKSByZXBlYXQteDsKKworCWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4zKSAwIDAgNXB4OworCS1tb3otYm94LXNoYWRvdzogcmdiYSgwLCAwLCAwLCAwLjMpIDAgMCA1cHg7CisJLXdlYmtpdC1ib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMykgMCAwIDVweDsKKwktby1ib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMykgMCAwIDVweDsKKworCWJvcmRlci1yYWRpdXM6IDhweCA4cHggMCAwOworCS1tb3otYm9yZGVyLXJhZGl1czogOHB4IDhweCAwIDA7CisJLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA4cHggOHB4IDAgMDsKKwktby1ib3JkZXItcmFkaXVzOiA4cHggOHB4IDAgMDsKKworCW92ZXJmbG93OiBoaWRkZW47Cit9CisKKy8qIGZpbGVtYW5hZ2VyLW1lbnUgKi8KKworZGl2LmZpbGVtYW5hZ2VyIGRpdi5maWxlbWFuYWdlci1tZW51IHsKKwkvKiB6LWluZGV4OiAyOyAqLworCXBvc2l0aW9uOiBhYnNvbHV0ZTsKKwloZWlnaHQ6IDMwcHg7CisJbGVmdDogMzUlOworCXdpZHRoOiA2NSU7CisJYm90dG9tOiAwOworCWxpbmUtaGVpZ2h0OiAzMHB4OworCisJYm9yZGVyLXRvcDogMXB4IHNvbGlkICNiZWJlYmU7CisJYmFja2dyb3VuZDogdXJsKCIuLi9JbWFnZXMvbWVudS5wbmciKSByZXBlYXQteDsKKworCWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4zKSAycHggMCA1cHg7CisJLW1vei1ib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMykgMXB4IC0ycHggNXB4IC0ycHg7CisJLXdlYmtpdC1ib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMykgMCAwIDVweDsKKwktby1ib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMykgMCAwIDVweDsKKworCWJvcmRlci1yYWRpdXM6IDAgMCA4cHggMDsKKwktbW96LWJvcmRlci1yYWRpdXM6IDAgMCA4cHggMDsKKwktd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgMCA4cHggMDsKKwktby1ib3JkZXItcmFkaXVzOiAwIDAgOHB4IDA7Cit9CisKK2Rpdi5maWxlbWFuYWdlciBidXR0b24sIGRpdi5maWxlbWFuYWdlciAuZmlsZW1hbmFnZXItYnV0dG9uIHsKKwljdXJzb3I6IHBvaW50ZXI7CisJaGVpZ2h0OiAyMnB4OworCWxpbmUtaGVpZ2h0OiAyMHB4OyAgICAgICAgLyogbGlmdCB0aGUgdGV4dCBpbiB0aGUgYnV0dG9uIGJ5IDEgcHg6IGxpbmUtaGVpZ2h0OiAyMHB4IHZzIGhlaWdodDogMjJweCAqLworCW1hcmdpbjogNHB4IDVweDsKKwlwYWRkaW5nOiAwIDJweDsKKworCWNvbG9yOiAjMzMzOworCXRleHQtc2hhZG93OiAjZWVlIDFweCAxcHggMXB4OworCisJY2xlYXI6IG5vbmU7CisJYmFja2dyb3VuZDogdXJsKCIuLi9JbWFnZXMvYnV0dG9uLnBuZyIpIHJlcGVhdC14OworCWJvcmRlcjogMXB4IHNvbGlkICNhMWFlYjk7CisJLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7CisJLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7CisJLW8tYm9yZGVyLXJhZGl1czogNHB4OworCWJvcmRlci1yYWRpdXM6IDRweDsKK30KK2Rpdi5maWxlbWFuYWdlci1lbmdpbmUtdHJpZGVudDQgYnV0dG9uLCBkaXYuZmlsZW1hbmFnZXItZW5naW5lLXRyaWRlbnQ0IC5maWxlbWFuYWdlci1idXR0b24sCitkaXYuZmlsZW1hbmFnZXItZW5naW5lLXRyaWRlbnQ1IGJ1dHRvbiwgZGl2LmZpbGVtYW5hZ2VyLWVuZ2luZS10cmlkZW50NSAuZmlsZW1hbmFnZXItYnV0dG9uIHsKKwlwYWRkaW5nOiAwIC4yNWVtOworCW92ZXJmbG93OiB2aXNpYmxlOworfQorCitkaXYuZmlsZW1hbmFnZXItbWVudSBidXR0b24sIGRpdi5maWxlbWFuYWdlci1tZW51IC5maWxlbWFuYWdlci1idXR0b24geworCWZsb2F0OiByaWdodDsKK30KKworZGl2LmZpbGVtYW5hZ2VyIGJ1dHRvbjpob3ZlciwgZGl2LmZpbGVtYW5hZ2VyIC5maWxlbWFuYWdlci1idXR0b246aG92ZXIsCitkaXYuZmlsZW1hbmFnZXIgYnV0dG9uLmhvdmVyLCBkaXYuZmlsZW1hbmFnZXIgLmZpbGVtYW5hZ2VyLWJ1dHRvbi5ob3ZlciwKK2Rpdi5maWxlbWFuYWdlciBidXR0b246Zm9jdXMsIGRpdi5maWxlbWFuYWdlciAuZmlsZW1hbmFnZXItYnV0dG9uOmZvY3VzIHsKKwlib3JkZXI6IDFweCBzb2xpZCAjNWY2NzZlOworfQorCitkaXYuZmlsZW1hbmFnZXIgYnV0dG9uLmRpc2FibGVkLCAgICAgICBkaXYuZmlsZW1hbmFnZXIgLmZpbGVtYW5hZ2VyLWJ1dHRvbi5kaXNhYmxlZCwKK2Rpdi5maWxlbWFuYWdlciBidXR0b24uZGlzYWJsZWQ6aG92ZXIsIGRpdi5maWxlbWFuYWdlciAuZmlsZW1hbmFnZXItYnV0dG9uLmRpc2FibGVkOmhvdmVyLAorZGl2LmZpbGVtYW5hZ2VyIGJ1dHRvbi5kaXNhYmxlZDpmb2N1cywgZGl2LmZpbGVtYW5hZ2VyIC5maWxlbWFuYWdlci1idXR0b24uZGlzYWJsZWQ6Zm9jdXMgeworCWN1cnNvcjogZGVmYXVsdDsKKwljb2xvcjogIzY2NjsKKwl0ZXh0LXNoYWRvdzogbm9uZTsKKwliYWNrZ3JvdW5kOiB1cmwoIi4uL0ltYWdlcy9idXR0b25fZGlzYWJsZWQucG5nIikgcmVwZWF0LXg7CisJYm9yZGVyLWNvbG9yOiAjYmFiYWJhOworfQorCitkaXYuZmlsZW1hbmFnZXIgYnV0dG9uLmZpbGVtYW5hZ2VyLW9wZW4sIGRpdi5maWxlbWFuYWdlciAuZmlsZW1hbmFnZXItYnV0dG9uLmZpbGVtYW5hZ2VyLW9wZW4gIHsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKworZGl2LmZpbGVtYW5hZ2VyLW1lbnUgbGFiZWwgeworCWN1cnNvcjogcG9pbnRlcjsKKwlmbG9hdDogcmlnaHQ7CisJd2lkdGg6IGF1dG87CisJaGVpZ2h0OiBhdXRvOworCWxpbmUtaGVpZ2h0OiAzMHB4OworCisJZm9udC1zaXplOiAxMXB4OworfQorCitkaXYubG9hZGVyIHsKKwl3aWR0aDogMTZweDsKKwloZWlnaHQ6IDE2cHg7CisJYmFja2dyb3VuZDogdXJsKCIuLi9JbWFnZXMvbG9hZGVyLmdpZiIpIG5vLXJlcGVhdDsKK30KK2Rpdi5maWxlbWFuYWdlci1oZWFkZXIgZGl2LmxvYWRlciB7CisJcG9zaXRpb246IGFic29sdXRlOworCXRvcDogN3B4OworCXJpZ2h0OiAzMHB4OworfQorZGl2LmZpbGVtYW5hZ2VyLWJyb3dzZXJoZWFkZXIgZGl2LmxvYWRlciB7CisJcG9zaXRpb246IGFic29sdXRlOworCXRvcDogNHB4OworCWxlZnQ6IDVweDsKK30KK2Rpdi5maWxlbWFuYWdlci1wcmV2aWV3IGRpdi5sb2FkZXIgeworCXBvc2l0aW9uOiByZWxhdGl2ZTsKKwlsZWZ0OiA1MCU7CisJcmlnaHQ6IGF1dG87CisJbWFyZ2luLWxlZnQ6IC04cHg7Cit9CisKKy8qIGZpbGVtYW5hZ2VyLWJyb3dzZXJzY3JvbGwgKi8KKworZGl2LmZpbGVtYW5hZ2VyIGRpdi5maWxlbWFuYWdlci1icm93c2Vyc2Nyb2xsIHsKKwltYXJnaW46IDA7CisJcGFkZGluZzogMDsKKwloZWlnaHQ6IDEwMCU7CisJb3ZlcmZsb3cteTogYXV0bzsKKwlvdmVyZmxvdy14OiBoaWRkZW47IC8qIGRvbid0IHNob3cgdGhlIGhvci4gc2Nyb2xsYmFyIGp1c3QgYmVjYXVzZSBhIGZldyBmaWxlbmFtZXMgYXJlIHZlcnkgbG9uZzoganVzdCBjbGlwIHRoZW0hICovCit9CisKKworZGl2LmZpbGVtYW5hZ2VyIGRpdi5maWxlbWFuYWdlci1icm93c2Vyc2Nyb2xsIGxpLmxpc3QgeworCWhlaWdodDogMjFweDsKK30KK2Rpdi5maWxlbWFuYWdlciBkaXYuZmlsZW1hbmFnZXItYnJvd3NlcnNjcm9sbCBsaS50aHVtYiB7CisJaGVpZ2h0OiA1NHB4OworfQorCitkaXYuZmlsZW1hbmFnZXIgdWwgeworCW1hcmdpbjogMDsKKwlwYWRkaW5nOiAwOworCXBvc2l0aW9uOiByZWxhdGl2ZTsKKwlsaW5lLWhlaWdodDogMS44ZW07CisJem9vbTogMTsgICAgICAgICAgICAgICAgICAvKjo6IDwgSUUgOS4wICAgIDo6IE1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciBoYWNrICovCit9CisKK2Rpdi5maWxlbWFuYWdlciB1bCBsaSB7CisJYmFja2dyb3VuZDogbm9uZTsKKwlsaXN0LXN0eWxlLWltYWdlOiBub25lOworCWxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKKwlsaXN0LXN0eWxlOiBub25lOworCWxpbmUtaGVpZ2h0OiAxLjhlbTsKKwltYXJnaW46IDA7CisJcGFkZGluZzogMDsKKwl3aGl0ZS1zcGFjZTogbm93cmFwOworfQorCitkaXYuZmlsZW1hbmFnZXIgZGl2LmZpbGVtYW5hZ2VyLWJyb3dzZXJjb250YWluZXIgeworCWhlaWdodDogMTAwJTsKKwl3aWR0aDogMzUlOworCW1pbi13aWR0aDogMTg5cHg7CisJYm9yZGVyOiAwOworCWJvcmRlci1yaWdodDogMXB4IHNvbGlkICNiZWJlYmU7CisJYmFja2dyb3VuZDogI0RFRTZGMCB1cmwoIi4uL0ltYWdlcy9maWxlbGlzdC5wbmciKSByZXBlYXQteCBib3R0b20gbGVmdDsKKwlvdmVyZmxvdzogaGlkZGVuOworCisJYm94LXNoYWRvdzogcmdiYSgwLCAwLCAwLCAwLjMpIDAgMCA1cHg7CisJLW1vei1ib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMykgMCAwIDVweDsKKwktd2Via2l0LWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4zKSAwIDAgNXB4OworCS1vLWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4zKSAwIDAgNXB4OworCisJYm9yZGVyLXJhZGl1czogMCAwIDAgOHB4OworCS1tb3otYm9yZGVyLXJhZGl1czogMCAwIDAgOHB4OworCS13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAwIDAgOHB4OworCS1vLWJvcmRlci1yYWRpdXM6IDAgMCAwIDhweDsKK30KKworZGl2LmZpbGVtYW5hZ2VyLWJyb3dzZXJjb250YWluZXIgZGl2LmZpbGVtYW5hZ2VyLWJyb3dzZXJoZWFkZXIgeworCWxlZnQ6IDA7CisJdG9wOiAwOworCXdpZHRoOiAxMDAlOworCWhlaWdodDogMjVweDsKKwliYWNrZ3JvdW5kOiAjQzNDREQ5OworCWJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYmViZWJlOworCXRleHQtYWxpZ246IGNlbnRlcjsKK30KKworZGl2LmZpbGVtYW5hZ2VyLWJyb3dzZXJjb250YWluZXIgZGl2LmZpbGVtYW5hZ2VyLWJyb3dzZXJoZWFkZXIgYS5saXN0VHlwZSB7CisJZGlzcGxheTogaW5saW5lLWJsb2NrOworCWZsb2F0OiByaWdodDsKKwl3aWR0aDogMTZweDsKKwloZWlnaHQ6IDE2cHg7CisJbWFyZ2luOiA1cHg7CisJY3Vyc29yOiBwb2ludGVyOworfQorZGl2LmZpbGVtYW5hZ2VyLWJyb3dzZXJjb250YWluZXIgZGl2LmZpbGVtYW5hZ2VyLWJyb3dzZXJoZWFkZXIgYS5saXN0VHlwZSN0b2dnbGVfc2lkZV9saXN0IHsKKwliYWNrZ3JvdW5kOiB1cmwoIi4uL0ltYWdlcy9hcHBsaWNhdGlvbl9zaWRlX2xpc3QucG5nIikgbm8tcmVwZWF0OworfQorZGl2LmZpbGVtYW5hZ2VyLWJyb3dzZXJjb250YWluZXIgZGl2LmZpbGVtYW5hZ2VyLWJyb3dzZXJoZWFkZXIgYS5saXN0VHlwZSN0b2dnbGVfc2lkZV9ib3hlcyB7CisJYmFja2dyb3VuZDogdXJsKCIuLi9JbWFnZXMvYXBwbGljYXRpb25fc2lkZV9ib3hlcy5wbmciKSBuby1yZXBlYXQ7Cit9CitkaXYuZmlsZW1hbmFnZXItYnJvd3NlcmNvbnRhaW5lciBkaXYuZmlsZW1hbmFnZXItYnJvd3NlcmhlYWRlciBhI3Nob3dfZGlyX3RodW1iX2dhbGxlcnkgeworCWJhY2tncm91bmQ6IHVybCgiLi4vSW1hZ2VzL2FwcGxpY2F0aW9uX3NpZGVfdGh1bWJzLnBuZyIpIG5vLXJlcGVhdCB0b3AgbGVmdDsKKwloZWlnaHQ6IDE2cHg7CisJd2lkdGg6IDE2cHg7CisJZGlzcGxheTogaW5saW5lLWJsb2NrOworCWZsb2F0OiByaWdodDsKKwltYXJnaW46IDVweDsKK30KK2Rpdi5maWxlbWFuYWdlci1icm93c2VyY29udGFpbmVyIGRpdi5maWxlbWFuYWdlci1icm93c2VyaGVhZGVyIGEjZHJhZ19uX2Ryb3AgeworCWRpc3BsYXk6IGlubGluZS1ibG9jazsKKwlmbG9hdDogcmlnaHQ7CisJbWFyZ2luOiA1cHggMyUgMCAwOyAgICAgICAgLyogMyU6IGtlZXAgZGlzdGFuY2UgdmFyaWFibGUgd2l0aCB0aGUgdG90YWwgd2lkdGggb2YgdGhlIEZNIHdpbmRvdzogbG9va3MgYmV0dGVyIGZvciB0aWdodCBhbmQgd2lkZSB2aWV3cG9ydHMgKi8KKwljdXJzb3I6IGhlbHA7CisKKwliYWNrZ3JvdW5kLWltYWdlOiB1cmwoIi4uL0ltYWdlcy9kcmFnX25fZHJvcC5wbmciKTsKKwliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworCWhlaWdodDogMTZweDsKKwl3aWR0aDogMTZweDsKKwlvdmVyZmxvdzogaGlkZGVuOworCWJhY2tncm91bmQtcG9zaXRpb246IDBweCAtMTZweDsKK30KKworZGl2LmZpbGVtYW5hZ2VyLWJyb3dzZXJjb250YWluZXIgZGl2LmZpbGVtYW5hZ2VyLWJyb3dzZXJoZWFkZXIgI2ZtX3ZpZXdfcGFnaW5nIHsKKwlkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisJZmxvYXQ6IHJpZ2h0OworCW1hcmdpbjogMXB4IDMlIDAgMDsKKwloZWlnaHQ6IDE5cHg7CisJcGFkZGluZzogNHB4IDVweCAwIDVweDsKKwkvKiBhZGQgc3VidGxlIGxpbmVzIHRvIGluY3JlYXNlIHZpc3VhbCBzZXBhcmF0aW9uIHdpdGggdGhlIG90aGVyIGljb25zIHVwIHRvcCAqLworCWJvcmRlci1sZWZ0OiAxcHggc29saWQgI0JFQkVCRTsKKwlib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjQkVCRUJFOworCit9CisKK2Rpdi5maWxlbWFuYWdlci1icm93c2VyY29udGFpbmVyIGRpdi5maWxlbWFuYWdlci1icm93c2VyaGVhZGVyICNmbV92aWV3X3BhZ2luZyBhIHsKKwlkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisJbWFyZ2luOiAwIDJweDsKK30KKworZGl2LmZpbGVtYW5hZ2VyLWJyb3dzZXJjb250YWluZXIgZGl2LmZpbGVtYW5hZ2VyLWJyb3dzZXJoZWFkZXIgI2ZtX3ZpZXdfcGFnaW5nIGEjcGFnaW5nX2dvdG9fZmlyc3QgeworCWJhY2tncm91bmQtaW1hZ2U6IHVybCgiLi4vSW1hZ2VzL2dvX2ZpcnN0LnBuZyIpOworCWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisJaGVpZ2h0OiAxNnB4OworCXdpZHRoOiAxMHB4OworCW92ZXJmbG93OiBoaWRkZW47CisJYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTsKKworCXBvc2l0aW9uOiByZWxhdGl2ZTsKK30KK2Rpdi5maWxlbWFuYWdlci1icm93c2VyY29udGFpbmVyIGRpdi5maWxlbWFuYWdlci1icm93c2VyaGVhZGVyICNmbV92aWV3X3BhZ2luZyBhI3BhZ2luZ19nb3RvX3ByZXZpb3VzIHsKKwliYWNrZ3JvdW5kLWltYWdlOiB1cmwoIi4uL0ltYWdlcy9nb19wcmV2aW91cy5wbmciKTsKKwliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworCWhlaWdodDogMTZweDsKKwl3aWR0aDogN3B4OworCW92ZXJmbG93OiBoaWRkZW47CisJYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTsKKworCXBvc2l0aW9uOiByZWxhdGl2ZTsKK30KK2Rpdi5maWxlbWFuYWdlci1icm93c2VyY29udGFpbmVyIGRpdi5maWxlbWFuYWdlci1icm93c2VyaGVhZGVyICNmbV92aWV3X3BhZ2luZyBhI3BhZ2luZ19nb3RvX25leHQgeworCWJhY2tncm91bmQtaW1hZ2U6IHVybCgiLi4vSW1hZ2VzL2dvX25leHQucG5nIik7CisJYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKwloZWlnaHQ6IDE2cHg7CisJd2lkdGg6IDdweDsKKwlvdmVyZmxvdzogaGlkZGVuOworCWJhY2tncm91bmQtcG9zaXRpb246IDUwJSA1MCU7CisKKwlwb3NpdGlvbjogcmVsYXRpdmU7Cit9CitkaXYuZmlsZW1hbmFnZXItYnJvd3NlcmNvbnRhaW5lciBkaXYuZmlsZW1hbmFnZXItYnJvd3NlcmhlYWRlciAjZm1fdmlld19wYWdpbmcgYSNwYWdpbmdfZ290b19sYXN0IHsKKwliYWNrZ3JvdW5kLWltYWdlOiB1cmwoIi4uL0ltYWdlcy9nb19sYXN0LnBuZyIpOworCWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisJaGVpZ2h0OiAxNnB4OworCXdpZHRoOiAxMHB4OworCW92ZXJmbG93OiBoaWRkZW47CisJYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTsKKworCXBvc2l0aW9uOiByZWxhdGl2ZTsKK30KK2Rpdi5maWxlbWFuYWdlci1icm93c2VyY29udGFpbmVyIGRpdi5maWxlbWFuYWdlci1icm93c2VyaGVhZGVyICNmbV92aWV3X3BhZ2luZyAjcGFnaW5nX2luZm8geworCW1hcmdpbjogMCAxMHB4OworCS8qCisJICogdG8gaGVscCB0aGUgcGFnZSBudW1iZXIgY2VudGVyIHZlcnRpY2FsbHksIHdlIGhhdmUgdG8gdHdlYWsgdGhlIHNldHRpbmdzIGEgYml0IG9kZGx5OgorCSAqIHdpdGhvdXQgdGhlIHBvc2l0aW9uOnJlbGF0aXZlIGFuZCB0aGUgdG9wOi00cHgsIGl0IHdvdWxkbid0IHdvcmsuIHZlcnRpY2FsLWFsaWduIGlzIG5vIHVzZSBhdCBhbGw6CisJICogJ21pZGRsZScgZG9lcyBub3QgZG8gYW55dGhpbmcgd2hpbGUgJ3RvcCcgZG9lcywgYnV0IGlzIGV4YWN0bHkgd2hhdCB3ZSBkbyBub3Qgd2FudC4KKwkgKiBBbnl3YXksIHJlbGF0aXZlIC00cHggaXQgaXMuCisJICovCisJaGVpZ2h0OiAxNnB4OworCXBvc2l0aW9uOiByZWxhdGl2ZTsKKwl0b3A6IC00cHg7CisJb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworCitkaXYuZmlsZW1hbmFnZXItY29udGFpbmVyIHNwYW4uZmkgeworCWhlaWdodDogMjFweDsKKwlsaW5lLWhlaWdodDogMS44ZW07CisJcGFkZGluZy1sZWZ0OiA1cHg7CisJY29sb3I6ICMwMDA7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworCWRpc3BsYXk6IGJsb2NrOworCXdoaXRlLXNwYWNlOiBub3dyYXA7CisJY3Vyc29yOiBwb2ludGVyOworfQorCitkaXYuZmlsZW1hbmFnZXItY29udGFpbmVyIHNwYW4udGh1bWIgeworCWhlaWdodDogNDhweDsKKwlwYWRkaW5nOiAzcHggMCAzcHggM3B4OworCW1hcmdpbjogMDsKKwlvdmVyZmxvdzogaGlkZGVuOworfQorCitkaXYuZmlsZW1hbmFnZXItY29udGFpbmVyIHNwYW4uZmkuaG92ZXIgeworCWJhY2tncm91bmQ6ICNFMkVCRjY7Cit9CisKK2Rpdi5maWxlbWFuYWdlci1jb250YWluZXIgc3Bhbi5maSBzcGFuLAorZGl2LmZpbGVtYW5hZ2VyLWNvbnRhaW5lciBzcGFuLnRodW1iIHsKKwl3aGl0ZS1zcGFjZTogbm93cmFwOworCWRpc3BsYXk6IGJsb2NrOworCW92ZXJmbG93OiBoaWRkZW47CisJdmVydGljYWwtYWxpZ246IG1pZGRsZTsgICAvKiBwcmV0dHkgdXNlbGVzcywgYnV0IGtlZXAgaXQgaW4/ICovCisJb3ZlcmZsb3c6IHZpc2libGU7CisJLyogXl5eIHNpbmNlIHRoZSBmbG9hdHMgYXJlIGFsbCBpbWFnZXMsIHRoaXMgZG9lcyBhIG5pY2UgZ3JhcGhpYyBlZmZlY3QgZm9yIHZlcnkgbG9uZyBmaWxlbmFtZXM6CisJICogICAgIHRoZSBtYXhpbXVtIHdpZHRoIG9mIHRoZSByb3cgaXMgdXNlZCB0byBkaXNwbGF5IHRoZSBuYW1lIGFuZCB3aGVuIGhvdmVyaW5nIG92ZXIgaXQsIHRoZQorCSAqICAgICBpY29ucyBhcHBlYXIgb24gdG9wLgorCSAqLworfQorCisvKiBmb3JjaW5nIHRoZSB0ZXh0IHRvIGNlbnRlcjogc2VlIGNvbW1lbnQgYmVsb3cgd2hlcmUgd2Ugdi1jZW50ZXIgdGhlIGltYWdlICovCitkaXYuZmlsZW1hbmFnZXItY29udGFpbmVyIHNwYW4udGh1bWIgc3BhbiB7CisJLyogbWFyZ2luLXRvcDogMTRweDsgKi8KKwltYXJnaW4tdG9wOiAxMnB4OyAgLyogaW5zdGVhZCwgd2UgJ3ZlcnRpY2FsIGNlbnRlcicgKGFoZW0hKSB0aGUgdGhpbmcgYnkgcHVzaGluZyBpdCBkb3duLiAqLworCS8qIGRpc3BsYXk6IHRhYmxlLWNlbGw7ICovCit9CisKKy8qCisgKiBIYXZlIHRoZSBpbWFnZSAodGh1bWJuYWlsKSBjZW50ZXJlZCBhcyB3ZWxsOgorICoKKyAqIEFmdGVyIHNldmVyYWwgZmFpbGVkIGF0dGVtcHRzIHRoaXMgd2FzIGRvbmUgd2l0aCA5MCUgc3VjY2VzczoKKyAqICAgIGh0dHA6Ly93d3cuYnJ1bmlsZG8ub3JnL3Rlc3QvaW1nX2NlbnRlci5odG1sCisgKgorICogTm90ZSB0aGF0IHlvdSBjYW5ub3QgbWl4ICdmbG9hdDpsZWZ0JyBhbmQgJ2Rpc3BsYXktdGFibGUtY2VsbCcKKyAqIGluIHRoZSBzYW1lIGVsZW1lbnQuIFRoYXQgaXMgd2h5IHRoZSB0ZXh0IGZvbGxvd2luZyB0aGUgaW1hZ2UKKyAqIE1VU1QgYmUgJ2Rpc3BsYXk6IHRhYmxlLWNlbGwnIGFzIHdlbGwsIGZvciBvdGhlcndpc2UgaXQgd291bGQKKyAqIG5vdCBkaXNwbGF5IG9uIHRoZSBzYW1lIGxpbmUuCisgKiBBbmQgYmVjYXVzZSB0aGUgdGV4dCBpcyBub3cgaXQncyBvd24gJ3RhYmxlLWNlbGwnIGl0IGFsc28gbmVlZHMKKyAqIGl0cyBvd24gJ3ZlcnRpY2FsLWFsaWduOm1pZGRsZScgcmVwbGFjaW5nIHRoZSBicnV0ZS1mb3JjZQorICogbWFyZ2luLXRvcCBkb3duc2hpZnQuCisgKgorICogSE9XRVZFUiB3ZSBub3RlIHRoYXQgbGFzdCAxMCU6IHZlcnkgbG9uZyBmaWxlbmFtZXMsIGkuZS4gc3BhbnMKKyAqIHdpdGggdGV4dCB0aGF0IHdvdWxkIHdyYXAsIHdpbGwgTk9UIGNlbnRlciBjb3JyZWN0bHksIGJ1dCBpbnN0ZWFkCisgKiBudWtlIHRoZSBjb21wbGV0ZSBsYXlvdXQgb2YgdGhhdCBwYXJ0aWN1bGFyIHJvdy4gTm8gbWF0dGVyIHdoYXQgeW91IGRvLgorICoKKyAqIFdlIGNhbid0IGhhdmUgdGhhdCBzbyBmaW5hbGx5IHdlIGdvIGJhY2sgdG8gb3VyIG9sZC10aW1lIGFsbC10aW1lIGZhdm9yaXRlOgorICogYSA8c3Bhbj4gKHdoaWNoIGlzIGFscmVhZHkgaGVyZSBub3cgdGhhdCB3ZSBkaWQgdGhlIHByZXZpb3VzKSBmaWxsZWQKKyAqIHdpdGggYSBfYmFja2dyb3VuZF8gaW1hZ2U6IHNpbmNlIENTUyBjYW4gY2VudGVyIHRob3NlIHZlcnkgd2VsbCwgd2UncmUKKyAqIGdvb2QgdG8gZ28uIEZpbmFsbHkuCisgKi8KK2Rpdi5maWxlbWFuYWdlci1jb250YWluZXIgc3Bhbi50aHVtYiBzcGFuLnRodW1iIHsKKwlmbG9hdDogbGVmdDsgICAvKiAnbGVmdCcgZm9yIHRoZSBzcGFuIHdpdGggYmFja2dyb3VuZCBpbWFnZSB3YXk7ICdub25lJyBmb3IgdGhlIHByZXZpb3VzIG1ldGhvZCAqLworCXdpZHRoOiA0OHB4OworCWhlaWdodDogNDhweDsKKwl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyAgIC8qIHByZXR0eSB1c2VsZXNzLCBidXQga2VlcCBpdCBpbj8gKi8KKwl0ZXh0LWFsaWduOiBjZW50ZXI7CisJLyogZGlzcGxheTogdGFibGUtY2VsbDsgKi8KKwltYXJnaW46IDAgNXB4IDAgMDsgICAgLyogcHJldmlvdXMgbWV0aG9kIG9ubHk6IHN1cGVyZmx1b3VzIGFzIGl0J3MgYSAndGFibGUtY2VsbCcgZGlzcGxheSBub3c6IHRoZSBtYXJnaW4gaXMgbmVnbGVjdGVkLCBzbyB3ZSBtb3ZlIHRoZSByaWdodC1zaWRlIGdhcCB0byB0aGUgcGFkZGluZy4gKi8KKwkvKiBwYWRkaW5nOiAwIDVweCAwIDA7ICovCisJcGFkZGluZzogMDsKKworCWJhY2tncm91bmQtcG9zaXRpb246IDUwJSA1MCU7CisJYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKK30KKy8qCitkaXYuZmlsZW1hbmFnZXItY29udGFpbmVyIHNwYW4udGh1bWIgc3Bhbi50aHVtYiBpbWcsCitkaXYuZmlsZW1hbmFnZXItY29udGFpbmVyIHNwYW4ubGlzdCBzcGFuLmxpc3QgaW1nIHsKKwlmbG9hdDogbm9uZTsKKwl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworCXRleHQtYWxpZ246IGNlbnRlcjsKKwltYXJnaW46IDA7CisJcGFkZGluZzogMDsKK30KKyovCitkaXYuZmlsZW1hbmFnZXItY29udGFpbmVyIHNwYW4ubGlzdCBzcGFuLmxpc3QgeworCWZsb2F0OiBsZWZ0OyAgIC8qICdsZWZ0JyBmb3IgdGhlIHNwYW4gd2l0aCBiYWNrZ3JvdW5kIGltYWdlIHdheTsgJ25vbmUnIGZvciB0aGUgcHJldmlvdXMgbWV0aG9kICovCisJd2lkdGg6IDE2cHg7CisJaGVpZ2h0OiAxNnB4OworCXZlcnRpY2FsLWFsaWduOiBtaWRkbGU7ICAgLyogcHJldHR5IHVzZWxlc3MsIGJ1dCBrZWVwIGl0IGluPyAqLworCXRleHQtYWxpZ246IGNlbnRlcjsKKwkvKiBkaXNwbGF5OiB0YWJsZS1jZWxsOyAqLworCW1hcmdpbjogMCA1cHggMCAwOyAgICAvKiBwcmV2aW91cyBtZXRob2Qgb25seTogc3VwZXJmbHVvdXMgYXMgaXQncyBhICd0YWJsZS1jZWxsJyBkaXNwbGF5IG5vdzogdGhlIG1hcmdpbiBpcyBuZWdsZWN0ZWQsIHNvIHdlIG1vdmUgdGhlIHJpZ2h0LXNpZGUgZ2FwIHRvIHRoZSBwYWRkaW5nLiAqLworCS8qIHBhZGRpbmc6IDAgNXB4IDAgMDsgKi8KKwlwYWRkaW5nOiAwOworCisJYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTsKKwliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworfQorCisKK2Rpdi5maWxlbWFuYWdlci1jb250YWluZXIgc3Bhbi5kcmFnIHNwYW4sCitkaXYuZmlsZW1hbmFnZXItZW5naW5lLXRyaWRlbnQ0IHVsIGxpIHNwYW4uZmkgc3BhbiwKK2Rpdi5maWxlbWFuYWdlci1lbmdpbmUtdHJpZGVudDUgdWwgbGkgc3Bhbi5maSBzcGFuLAorZGl2LmZpbGVtYW5hZ2VyLWVuZ2luZS1wcmVzdG8gICB1bCBsaSBzcGFuLmZpIHNwYW4sCitkaXYuZmlsZW1hbmFnZXIgICAgICAgICAgICAgICAgIHVsIGxpOmhvdmVyIHNwYW4uZmkgc3BhbiB7CisJb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworZGl2LmZpbGVtYW5hZ2VyIHVsIGxpIHNwYW4uZGlyIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKworZGl2LmZpbGVtYW5hZ2VyIHVsIGxpIHNwYW4uZHJvcHBhYmxlLAorZGl2LmZpbGVtYW5hZ2VyLWdhbGxlcnkgdWwuZHJvcHBhYmxlIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjOTliN2U3OworfQorCit1bC5maWxlbWFuYWdlci1icm93c2VyIGEsCit1bC5maWxlbWFuYWdlci1icm93c2VyIHNwYW4geworCXBvc2l0aW9uOiByZWxhdGl2ZTsKK30KKworLyoKK2Rpdi5maWxlbWFuYWdlciB1bCBsaSBhLnNlbGVjdGVkLAorZGl2LmZpbGVtYW5hZ2VyIHVsIGxpIHNwYW4uc2VsZWN0ZWQgeworCWJhY2tncm91bmQ6IHVybCgiLi4vSW1hZ2VzL2ZpbGVsaXN0X3NlbGVjdGVkLnBuZyIpIHJlcGVhdC14OworCWNvbG9yOiAjZWVlOworCW91dGxpbmU6IG5vbmU7Cit9CisqLworCitkaXYuZmlsZW1hbmFnZXIgdWwgbGkgc3Bhbi50aHVtYi5zZWxlY3RlZCwKK2Rpdi5maWxlbWFuYWdlciB1bCBsaSBzcGFuLmZpLnNlbGVjdGVkIHsKKwliYWNrZ3JvdW5kOiAjOEVBQUQ2OworCWNvbG9yOiAjZWVlOworCW91dGxpbmU6IG5vbmU7Cit9CisKK2Rpdi5maWxlbWFuYWdlci1jb250YWluZXIgc3Bhbi5maSBpbWcgeworCWZsb2F0OiBsZWZ0OworCW1hcmdpbjogM3B4IDNweCAwIDA7Cit9CisKKy8qCitvYnNvbGV0ZWQgYnkgdGhlIG5ldyBjZW50ZXJpbmcgY29kZS4gQXQgbGVhc3QgdGhhdCBvbmUgd29ya3MgYnkgY2VudGVyaW5nIHRoZSBpbWFnZSBpbnN0ZWFkIG9mIGNsaXBwaW5nIHRoZW0gd2hpbGUgZm9yY2luZyB3aWR0aD00OHB4LgorCitkaXYuZmlsZW1hbmFnZXItY29udGFpbmVyIHNwYW4udGh1bWIgaW1nIHsKKwlmbG9hdDogbGVmdDsKKwltYXJnaW46IDAgNXB4IDAgMDsKK30KKyovCisKK2Rpdi5maWxlbWFuYWdlci1jb250YWluZXIgc3Bhbi5maWxlIGltZyB7CisJYm9yZGVyOiBub25lOworCW1hcmdpbi10b3A6IDVweDsKK30KKworZGl2LmZpbGVtYW5hZ2VyLWNvbnRhaW5lciBzcGFuLmZpIGltZy5icm93c2VyLWljb24geworCWZsb2F0OiByaWdodDsKKwlib3JkZXI6IG5vbmU7CisJbWFyZ2luLXRvcDogM3B4OyAvKiB2ZXJ0aWNhbGx5IGNlbnRlciB0aGUgbGl0dGxlIGJ1Z2dlcnMgKi8KK30KKworLyogJiBhbmQgY29ycmVjdCBmb3IgdGh1bWIgdmlldzogKi8KK2Rpdi5maWxlbWFuYWdlci1jb250YWluZXIgc3Bhbi50aHVtYiBpbWcuYnJvd3Nlci1pY29uIHsKKwltYXJnaW4tdG9wOiAxNnB4OyAvKiB2ZXJ0aWNhbGx5IGNlbnRlciB0aGUgbGl0dGxlIGJ1Z2dlcnMgKi8KK30KKworCitkaXYuZmlsZW1hbmFnZXItY29udGFpbmVyIHNwYW4ubW92ZSBpbWcuYnJvd3Nlci1pY29uIHsKKwlkaXNwbGF5OiBub25lOworfQorCitkaXYuZmlsZW1hbmFnZXIgc3Bhbi5ub3RpY2UgeworCXBvc2l0aW9uOiBhYnNvbHV0ZTsKKwlib3R0b206IDE2cHg7CisJbGVmdDogMTZweDsKK30KKworZGl2LmZpbGVtYW5hZ2VyIGEuZmlsZW1hbmFnZXItY2xvc2UgeworCS8qIHotaW5kZXg6IDQ7ICovCisJZGlzcGxheTogYmxvY2s7CisJcG9zaXRpb246IGFic29sdXRlOworCXJpZ2h0OiA2cHg7CisJdG9wOiAtMjNweDsKKwloZWlnaHQ6IDE2cHg7CisJd2lkdGg6IDE2cHg7CisJYmFja2dyb3VuZDogdXJsKCIuLi9JbWFnZXMvY2xvc2UucG5nIikgbm8tcmVwZWF0OworCWN1cnNvcjogcG9pbnRlcjsKK30KK2Rpdi5maWxlbWFuYWdlciBhLmZpbGVtYW5hZ2VyLWNsb3NlOmhvdmVyIHsKKwliYWNrZ3JvdW5kLXBvc2l0aW9uOiAwcHggLTE2cHg7Cit9CitkaXYuZmlsZW1hbmFnZXIgZGl2LmZpbGVtYW5hZ2VyLWNsb3NlIGltZyB7CisJcGFkZGluZzogMnB4OworfQorCitkaXYuZmlsZW1hbmFnZXItaW5mb3MgeworCS8qIHotaW5kZXg6IDA7ICovCisJcG9zaXRpb246IGFic29sdXRlOworCWxlZnQ6IDM1JTsKKwl0b3A6IDA7CisJd2lkdGg6IDYzJTsKKwltaW4td2lkdGg6IDI1MHB4OworCWhlaWdodDogOTIlOworCXBhZGRpbmc6IDBweCAxJTsKKwlsaW5lLWhlaWdodDogMS42ZW07CisJb3ZlcmZsb3c6IGF1dG87Cit9CisKK2Rpdi5maWxlbWFuYWdlci1oZWFkIHsKKwloZWlnaHQ6IDMycHg7CisJb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworaW1nLmZpbGVtYW5hZ2VyLWljb24geworCWZsb2F0OiBsZWZ0OworCW1hcmdpbjogMTBweCAxMnB4OworfQorCitkaXYuZmlsZW1hbmFnZXIgaDEgeworCW1hcmdpbjogMDsKKwlwYWRkaW5nOiAwOworCWhlaWdodDogMzJweDsKKwlsaW5lLWhlaWdodDogMzJweDsKKworCWNvbG9yOiAjMzMzOworCWZvbnQtc2l6ZTogMjBweDsKKwlsZXR0ZXItc3BhY2luZzogMXB4OworCW92ZXJmbG93OiBoaWRkZW47CisJd2hpdGUtc3BhY2U6IG5vd3JhcDsKKwliYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKworZGl2LmZpbGVtYW5hZ2VyIGgyLAorZGl2LmZpbGVtYW5hZ2VyIGgzIHsKKwltYXJnaW46IDA7CisJYm9yZGVyLXRvcDogMXB4IHNvbGlkICNiZWJlYmU7CisJZm9udC13ZWlnaHQ6IGJvbGQ7CisJcGFkZGluZzogMnB4IDAgMCA1cHg7CisJY2xlYXI6IGJvdGg7Cit9CisKK2Rpdi5maWxlbWFuYWdlciBkaXYuZmlsZW1hbmFnZXItaW5mby1hcmVhIHsKKwlib3JkZXItdG9wOiAxcHggc29saWQgI2JlYmViZTsKKwlwYWRkaW5nOiAycHggMCAwIDA7CisJY2xlYXI6IGJvdGg7Cit9CitkaXYuZmlsZW1hbmFnZXIgZGl2LmZpbGVtYW5hZ2VyLXByZXZpZXctY29udGVudCB7CisJYm9yZGVyLXRvcDogMXB4IHNvbGlkICNiZWJlYmU7CisJcGFkZGluZzogMnB4IDAgMCAwOworCWNsZWFyOiBib3RoOworfQorZGl2LmZpbGVtYW5hZ2VyIGRpdi5maWxlbWFuYWdlci1lcnJvcnMgeworCWJvcmRlci10b3A6IDFweCBzb2xpZCAjYmViZWJlOworCXBhZGRpbmc6IDJweCAwIDAgMDsKKwljbGVhcjogYm90aDsKK30KK2Rpdi5maWxlbWFuYWdlciBkaXYuZmlsZW1hbmFnZXItZGlhZy1kdW1wIHsKKwlib3JkZXItdG9wOiAxcHggc29saWQgI2JlYmViZTsKKwlwYWRkaW5nOiAycHggMCAwIDA7CisJY2xlYXI6IGJvdGg7Cit9CisKK2Rpdi5maWxlbWFuYWdlciBoMiB7CisJZm9udC1zaXplOiAxNHB4OworfQorCitkaXYuZmlsZW1hbmFnZXIgaDMgeworCWZvbnQtc2l6ZTogMTJweDsKK30KKworZGl2LmZpbGVtYW5hZ2VyIGRsIHsKKwltYXJnaW46IDVweCAwOworCXdpZHRoOiAxMDAlOworCWNsZWFyOiBib3RoOworCW92ZXJmbG93OiBhdXRvOworfQorCitkaXYuZmlsZW1hbmFnZXIgZHQsCitkaXYuZmlsZW1hbmFnZXIgZGQgeworCWZsb2F0OiBsZWZ0OworCWxpbmUtaGVpZ2h0OiAyMHB4OworCWZvbnQtc2l6ZTogMTFweDsKK30KKworZGl2LmZpbGVtYW5hZ2VyIGR0IHsKKwljbGVhcjogYm90aDsKKwl3aWR0aDogMjIlOworCW1hcmdpbi1sZWZ0OiA1JTsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKworZGl2LmZpbGVtYW5hZ2VyIGRkIHsKKwkvKiB3aWR0aDogNjAlOyAgICAtLSBTYWZhcmk0IHJlbmRlcnMgSCBzY3JvbGxiYXIgZm9yIGl0ZW1zIHdoaWNoIGFyZSBhIGxpdHRsZSB0b28gd2lkZSBmb3IgdGhpcywgeWV0IHN0aWxsIGZpdCBvbiB0aGUgbGluZSA6LSggKi8KKwl3aGl0ZS1zcGFjZTogbm93cmFwOworCW92ZXJmbG93OiBhdXRvOworfQorCitkaXYuZmlsZW1hbmFnZXIgZGl2Lm1hcmdpbiB7CisJbWFyZ2luLWxlZnQ6IDE1cHg7Cit9CisKK2Rpdi5maWxlbWFuYWdlciBhLmZpbGVtYW5hZ2VyLWRpci10aXRsZSB7CisJcGFkZGluZy1sZWZ0OiAxMHB4OworCXBhZGRpbmctcmlnaHQ6IDEwcHg7CisJZm9udC13ZWlnaHQ6IGJvbGQ7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworCWNvbG9yOiAjNjY2OworfQorZGl2LmZpbGVtYW5hZ2VyIGEuZmlsZW1hbmFnZXItZGlyLXRpdGxlOmhvdmVyIHsKKwljb2xvcjogIzk5OTsKK30KKworZGl2LmZpbGVtYW5hZ2VyIGlucHV0LmZpbGVtYW5hZ2VyLWRpciB7CisJbWFyZ2luLXRvcDogLTRweDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZmJmYmZiOworCWJhY2tncm91bmQtaW1hZ2U6IG5vbmUgIWltcG9ydGFudDsKKwlib3JkZXI6IDFweCBzb2xpZCAjY2NjOworCXdpZHRoOiA3MCU7CisJcGFkZGluZzogMXB4IDVweDsKKwlmb250LXNpemU6IDE0cHg7Cit9CisKK2Rpdi5maWxlbWFuYWdlciBzcGFuLmZpbGVtYW5hZ2VyLWRpciBhLmljb24geworCWJvcmRlcjogMXB4IHNvbGlkICNiZWJlYmU7CisJcGFkZGluZzogMnB4IDVweCAycHggMjBweDsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7CisJYmFja2dyb3VuZDogI2VlZSB1cmwoIi4uL0ltYWdlcy9JY29ucy9kaXJlY3RvcnkucG5nIikgMnB4IDAgbm8tcmVwZWF0OworCWNvbG9yOiAjMDAwOworCisJLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7CisJLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7CisJLW8tYm9yZGVyLXJhZGl1czogM3B4OworCWJvcmRlci1yYWRpdXM6IDNweDsKK30KKy8qIG5vdCBzZWxlY3RhYmxlIHBhdGggKi8KK2Rpdi5maWxlbWFuYWdlciBzcGFuLmZpbGVtYW5hZ2VyLWRpciBzcGFuLmljb24geworCWJvcmRlcjogbm9uZTsKKwlwYWRkaW5nOiAycHggNXB4IDJweCAyMHB4OworCWJhY2tncm91bmQ6IHVybCgiLi4vSW1hZ2VzL0ljb25zL2RpcmVjdG9yeS5wbmciKSAycHggMCBuby1yZXBlYXQ7CisJY29sb3I6ICM5OTk7Cit9CisKK2Rpdi5maWxlbWFuYWdlciBzcGFuLmZpbGVtYW5hZ2VyLWRpciBhLmljb246aG92ZXIgeworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworfQorCitkaXYuZmlsZW1hbmFnZXIgc3Bhbi5maWxlbWFuYWdlci1kaXIgYS5zZWxlY3RlZCwKK2Rpdi5maWxlbWFuYWdlciBzcGFuLmZpbGVtYW5hZ2VyLWRpciBhLnNlbGVjdGVkOmhvdmVyIHsKKwltYXJnaW46IDAgMXB4OworCWJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworCWJvcmRlcjogbm9uZTsKKwljdXJzb3I6IGF1dG87Cit9CisKK2Rpdi5maWxlbWFuYWdlci1wcmV2aWV3IHsKKwltYXJnaW4tdG9wOiA1cHg7Cit9CisKK2Rpdi5maWxlbWFuYWdlci1wcmV2aWV3IGltZy5wcmV2aWV3IHsKKwltYXJnaW46IDAgYXV0byAxZW07CisJZGlzcGxheTogYmxvY2s7CisJLyogYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7ICovCisJYmFja2dyb3VuZDogdXJsKCIuLi9JbWFnZXMvbG9hZGVyLmdpZiIpIGNlbnRlciBjZW50ZXIgbm8tcmVwZWF0OworCWJvcmRlcjogMXB4IHNvbGlkICNmZmY7Cit9CisKK2Rpdi5maWxlbWFuYWdlci1wcmV2aWV3IGltZy5wcmV2aWV3OmhvdmVyIHsKKwlib3JkZXI6IDFweCBzb2xpZCAjNjY2OworfQorCitkaXYuZmlsZW1hbmFnZXItcHJldmlldyB1bCBsaSBpbWcsCitkaXYuZmlsZW1hbmFnZXItdXBsb2FkZXIgdWwgbGkgaW1nIHsKKwltYXJnaW4tdG9wOiAycHg7CisJbWFyZ2luLXJpZ2h0OiA0cHg7CisJZmxvYXQ6IGxlZnQ7Cit9CisKK2Rpdi5maWxlbWFuYWdlci1wcmV2aWV3IHAudGVjaF9pbmZvIHsKKwlmb250LXNpemU6IDlweDsKKwlsaW5lLWhlaWdodDogMS4yZW07Cit9CisKK2Rpdi5maWxlbWFuYWdlci1wcmV2aWV3IHAuZXJyX2luZm8geworCWNvbG9yOiByZWQ7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2Rpdi5maWxlbWFuYWdlci1wcmV2aWV3IGRpdi5wcmV2aWV3X2Vycl9yZXBvcnQgeworCWJhY2tncm91bmQtY29sb3I6ICNmY2M7Cit9CisKKy8qCitkaXYuZmlsZW1hbmFnZXItZW5naW5lLXRyaWRlbnQ0IGRpdi5maWxlbWFuYWdlci1wcmV2aWV3IGltZy5wcmV2aWV3IHsKKwloZWlnaHQ6IDEwMHB4OworfQorKi8KKworZGl2LmZpbGVtYW5hZ2VyLXByZXZpZXcgdWwsCitkaXYuZmlsZW1hbmFnZXItdXBsb2FkZXIgdWwsCitkaXYuZmlsZW1hbmFnZXItcHJldmlldyBkaXYudGV4dHByZXZpZXcgeworCWJvcmRlcjogMXB4IHNvbGlkICNiZWJlYmU7CisJYmFja2dyb3VuZDogI2ZmZjsKKworCXBhZGRpbmc6IDJweDsKKwltYXJnaW46IDFlbSBhdXRvOworCisJd2lkdGg6IDQ5MHB4OworCWhlaWdodDogMjgwcHg7CisJb3ZlcmZsb3c6IGF1dG87Cit9CisKK2Rpdi5maWxlbWFuYWdlci1wcmV2aWV3IGRpdi50ZXh0cHJldmlldyBwcmUgeworCWZvbnQ6IDEwcHggVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsKK30KKworZGl2LmZpbGVtYW5hZ2VyLXByZXZpZXcgZGl2Lm9iamVjdCB7CisJd2lkdGg6IDEwMCU7CisJdGV4dC1hbGlnbjogY2VudGVyOworCW92ZXJmbG93OiBoaWRkZW47Cit9CisKK2Rpdi5maWxlbWFuYWdlci1jb250YWluZXIgaW1nLmJyb3dzZXItYWRkIHsKKwlwb3NpdGlvbjogYWJzb2x1dGU7CisJd2lkdGg6IDE2cHg7CisJaGVpZ2h0OiAxNnB4OworCS8qIHotaW5kZXg6IDIwMDA7ICovCit9CisKKy8qIFVQTE9BRCAqLworZGl2LmZpbGVtYW5hZ2VyLWNvbnRhaW5lciAuZmlsZSBzcGFuIHsKKwlwYWRkaW5nOiAwIDVweCAwIDA7Cit9CisKK2Rpdi5maWxlbWFuYWdlci1jb250YWluZXIgLmZpbGUgLmZpbGUtc2l6ZSB7CisJY29sb3I6ICM2NjY7Cit9CisKK2Rpdi5maWxlbWFuYWdlci1jb250YWluZXIgLmZpbGUgLmZpbGUtY2FuY2VsIHsKKwljdXJzb3I6IHBvaW50ZXI7CisJcGFkZGluZy1sZWZ0OiA1cHg7CisJZmxvYXQ6IHJpZ2h0OworfQorZGl2LmZpbGVtYW5hZ2VyLWNvbnRhaW5lciAuZmlsZSAuZmlsZS1wcm9ncmVzcyB7CisJbWFyZ2luLXRvcDogNXB4OworCWZsb2F0OiByaWdodDsKKwl3aWR0aDogMTI1cHg7CisJaGVpZ2h0OiAxMnB4OworCWJhY2tncm91bmQtaW1hZ2U6IHVybCgiLi4vSW1hZ2VzL3Byb2dyZXNzLmdpZiIpOworfQorCitkaXYuZmlsZW1hbmFnZXIgZGl2LmNoZWNrYm94IHsKKwlmbG9hdDogbGVmdDsKKwloZWlnaHQ6IDEycHg7CisJd2lkdGg6IDE2cHg7CisJbWFyZ2luOiAxMHB4IDNweCAwOworCWJhY2tncm91bmQ6IHVybCgiLi4vSW1hZ2VzL2NoZWNrYm94LnBuZyIpIG5vLXJlcGVhdDsKK30KKworZGl2LmZpbGVtYW5hZ2VyIGRpdi5jaGVja2JveENoZWNrZWQgeworCWJhY2tncm91bmQtcG9zaXRpb246IDAgLTEycHg7Cit9CisKKy8qIFNFTEVDVEVEIEZJTEUgKi8KK2Rpdi5zZWxlY3RlZC1maWxlIGltZyB7CisJdmVydGljYWwtYWxpZ246IGJvdHRvbTsKKwlwYWRkaW5nOiAwIDNweCAwIDA7Cit9CitkaXYuc2VsZWN0ZWQtZmlsZSBzcGFuIHsKKwlsaW5lLWhlaWdodDogMTZweDsKK30KK2Rpdi5zZWxlY3RlZC1maWxlIC5maWxlLWNhbmNlbCB7CisJY3Vyc29yOiBwb2ludGVyOworCXBhZGRpbmc6IDAgMCAwIDVweDsKK30KKworCisvKiBHQUxMRVJZICovCitkaXYuZmlsZW1hbmFnZXIgYnV0dG9uLmZpbGVtYW5hZ2VyLXNlcmlhbGl6ZSwgZGl2LmZpbGVtYW5hZ2VyIC5maWxlbWFuYWdlci1idXR0b24uZmlsZW1hbmFnZXItc2VyaWFsaXplIHsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKworZGl2LmZpbGVtYW5hZ2VyLWdhbGxlcnkgeworCXBvc2l0aW9uOiBhYnNvbHV0ZTsKKwkvKiB6LWluZGV4OiAxMDAwOyAqLworCXdpZHRoOiA3OThweDsgICAgICAgIC8qIDkgaW1hZ2VzIHdpZGUgKyBvcHRpb25hbCBzY3JvbGxiYXI7IG9sZCA3NTBweCB2YWx1ZSB3YXMgfiA4LjUgc28gcHJldHR5IHVzZWxlc3MgKi8KKwloZWlnaHQ6IDE0NHB4OworCWRpc3BsYXk6IG5vbmU7CisKKwlmb250LWZhbWlseTogVGFob21hLCBzYW5zLXNlcmlmOworCWZvbnQtc2l6ZTogMTJweDsKKworCWJvcmRlcjogMXB4IHNvbGlkICNiZWJlYmU7CisJYm9yZGVyLXRvcDogMDsKKwliYWNrZ3JvdW5kOiAjZWVlOworCisJYm9yZGVyLXJhZGl1czogMCAwIDVweCA1cHg7CisJLW1vei1ib3JkZXItcmFkaXVzOiAwIDAgNXB4IDVweDsKKwktd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgMCA1cHggNXB4OworCS1vLWJvcmRlci1yYWRpdXM6IDAgMCA1cHggNXB4OworCisJYm94LXNoYWRvdzogcmdiYSgwLCAwLCAwLCAwLjMpIDAgMCA0MHB4OworCS1tb3otYm94LXNoYWRvdzogcmdiYSgwLCAwLCAwLCAwLjMpIDAgMCA0MHB4OworCS13ZWJraXQtYm94LXNoYWRvdzogcmdiYSgwLCAwLCAwLCAwLjMpIDAgMCA0MHB4OworCS1vLWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4zKSAwIDAgNDBweDsKK30KKworZGl2LmZpbGVtYW5hZ2VyLWdhbGxlcnkgZGl2Lmhvd3RvIHsKKwlwb3NpdGlvbjogYWJzb2x1dGU7CisJLyogei1pbmRleDogMTAwMjsgKi8KKwlsZWZ0OiA1MHB4OworCXRvcDogNjBweDsKKworCWNvbG9yOiAjNjY2OworCWZvbnQtc2l6ZTogMThweDsKKwlmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2Rpdi5maWxlbWFuYWdlci1nYWxsZXJ5IHVsIHsKKwloZWlnaHQ6IDEyMnB4OyAgICAgLyogMiByb3dzIEAgNjBweCArIHVsIHBhZGRpbmcgKi8KKworCW1hcmdpbjogN3B4IDZweDsKKwlwYWRkaW5nOiA0cHg7CisKKwlvdmVyZmxvdzogYXV0bzsKKwlvdmVyZmxvdy14OiBoaWRkZW47CisJYm9yZGVyOiAxcHggc29saWQgI2JlYmViZTsKKwliYWNrZ3JvdW5kOiAjZjJmMmYyOworfQorCitkaXYuZmlsZW1hbmFnZXItZ2FsbGVyeSB1bCBsaSB7CisJcG9zaXRpb246IHJlbGF0aXZlOworCWRpc3BsYXk6IGlubGluZS1ibG9jazsKKwlmbG9hdDogbGVmdDsKKwltYXJnaW46IDAgMnB4OworCXdpZHRoOiA4MHB4OworCWhlaWdodDogNjBweDsKKwlsaXN0LXN0eWxlOiBub25lOworCWJhY2tncm91bmQ6IHVybCgiLi4vSW1hZ2VzL2xvYWRlci5naWYiKSBjZW50ZXIgY2VudGVyIG5vLXJlcGVhdDsKK30KKworZGl2LmZpbGVtYW5hZ2VyLWdhbGxlcnkgdWwgbGkgZGl2LmdhbGxlcnktaW1hZ2UgeworCXBhZGRpbmc6IDJweDsKKwkvKgorCXdpZHRoOiA3NXB4OworCWhlaWdodDogNTZweDsKKworCS0tIHNlZSBjb21tZW50IGluIEdhbGxlcnkuanM7IHRoZXNlIGFyZSBzZXQgdXAgdGhlcmUgYXMgZ2V0U2l6ZSgpIHdvbid0IGRlbGl2ZXIgdGhlc2UgKGl0IGRlbGl2ZXJzIGFjdHVhbCBzaXplLCBhbmQgdGhhdCdzIGRpZmZlcmVudCBmb3IgdGhpcyBvbmUpCisJKi8KKwljdXJzb3I6IHBvaW50ZXI7Cit9CisKK2Rpdi5maWxlbWFuYWdlci1nYWxsZXJ5IHVsIGxpIGRpdi5nYWxsZXJ5LWltYWdlIGltZyB7CisJcGFkZGluZzogMDsKKwltYXJnaW46IDA7CisJYm9yZGVyOiAwOworfQorCitkaXYuZmlsZW1hbmFnZXItZ2FsbGVyeSB1bCBsaSBpbWcuZmlsZW1hbmFnZXItcmVtb3ZlIHsKKwlwb3NpdGlvbjogYWJzb2x1dGU7CisJcmlnaHQ6IC0ycHg7IC8qIHBsYWNlIHRoZSByZWQgWCBpbnNpZGUgdGhlIGxpIGVudGlyZWx5OyBvdGhlcndpc2UgdGhlIGFkamFjZW50IGltYWdlIG1heSBwYXJ0bHkgb2JzY3VyZSBpdCAqLworCXRvcDogLTFweDsKKwl3aWR0aDogMTZweDsKKwloZWlnaHQ6IDE2cHg7CisJY3Vyc29yOiBwb2ludGVyOworfQorCitkaXYuZmlsZW1hbmFnZXItd3JhcHBlciB7CisJcG9zaXRpb246IGFic29sdXRlOworCS8qIHotaW5kZXg6IDEwMjA7ICovCisJd2lkdGg6IDI3MnB4OworCWhlaWdodDogNDEwcHg7CisKKwlmb250LWZhbWlseTogVGFob21hLCBzYW5zLXNlcmlmOworCWZvbnQtc2l6ZTogMTJweDsKKworCWJvcmRlcjogMXB4IHNvbGlkICNiZWJlYmU7CisJYmFja2dyb3VuZDogI2VlZTsKKworCWJvcmRlci1yYWRpdXM6IDVweDsKKwktbW96LWJvcmRlci1yYWRpdXM6IDVweDsKKwktd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsKKwktby1ib3JkZXItcmFkaXVzOiA1cHg7Cit9CisKK2Rpdi5maWxlbWFuYWdlci13cmFwcGVyIGRpdi5pbWcgeworCXBvc2l0aW9uOiByZWxhdGl2ZTsKKwl3aWR0aDogMjYwcHg7CisJaGVpZ2h0OiAyNjBweDsKKwltYXJnaW46IDVweDsKKworCWJvcmRlcjogMXB4IHNvbGlkICNiZWJlYmU7CisJYmFja2dyb3VuZDogI2ZmZjsKK30KKworZGl2LmZpbGVtYW5hZ2VyLXdyYXBwZXIgc3BhbiB7CisJZGlzcGxheTogYmxvY2s7CisJbWFyZ2luOiAzcHggOHB4IDFweDsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKworZGl2LmZpbGVtYW5hZ2VyLXdyYXBwZXIgdGV4dGFyZWEgeworCXBhZGRpbmc6IDJweDsgICAgICAgICAgICAgLyogYXQgbGVhc3QgU2FmYXJpIGhhZCB0aGlzIGJ5IGRlZmF1bHQ7IGxvb2tzIGJldHRlciB0aGFuIDBweCwgYnV0IHdpZHRoIG11c3QgYmUgY29ycmVjdGVkIGZvciB0aGlzICovCisJd2lkdGg6IDI1NnB4OyAgICAgICAgICAgICAvKiAyNjBweCAtIDIgKiAyIHB4ICovCisJaGVpZ2h0OiA4MHB4OworCW1hcmdpbjogM3B4IDVweCAwOworCisJYm9yZGVyOiAxcHggc29saWQgI2JlYmViZTsKKwliYWNrZ3JvdW5kOiAjZmZmOworICAKKyAgLyogYW5kIHByZXZlbnQgRkYsIENocm9tZSwgU2FmYXJpIGV0IGFsIGZyb20gcmVzaXppbmcgdGhlIHRleHRhcmVhIGFuZCBkZXN0cm95IHRoZSBsYXlvdXQgdGhhdCB3YXk6ICovCisgIHJlc2l6ZTogbm9uZTsKK30KKworZGl2LmZpbGVtYW5hZ2VyLXdyYXBwZXIgYnV0dG9uLCBkaXYuZmlsZW1hbmFnZXItd3JhcHBlciAuZmlsZW1hbmFnZXItYnV0dG9uIHsKKwltYXJnaW46IDNweCA3cHg7Cit9CisKK2ltZy5maWxlbWFuYWdlci1jbG9uZSB7CisJY3Vyc29yOiBwb2ludGVyOworfQorCisvKiBUSVBTICovCisudGlwLWZpbGVicm93c2VyIHsKKwkvKiB6LWluZGV4OiAxMjAxOyAqLworfQorLnRpcC1maWxlYnJvd3NlciAudGlwIHsKKwliYWNrZ3JvdW5kOiAjMDAwOworCS1tb3otYm9yZGVyLXJhZGl1czogNXB4OworCS13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4OworCS1vLWJvcmRlci1yYWRpdXM6IDVweDsKKwlib3JkZXItcmFkaXVzOiA1cHg7CisJYm9yZGVyOiBub25lOworfQorCisudGlwLWZpbGVicm93c2VyIC50aXAtdGl0bGUgeworCWNvbG9yOiAjZmZmOworCWZvbnQ6IG5vcm1hbCA5cHggdmVyZGFuYSwgYXJpYWwsIFRhaG9tYSwgc2Fucy1zZXJpZjsKKwlwYWRkaW5nOiAxcHggNHB4OworCWxpbmUtaGVpZ2h0OiAyMXB4OworCXRleHQtYWxpZ246IGNlbnRlcjsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKworLnRpcC1maWxlYnJvd3NlciAudGlwLXRleHQgeworCWRpc3BsYXk6IG5vbmU7Cit9CisKKy8qIFRIVU1CTkFJTFMgSU4gUFJFVklFVyBMSVNUICovCitkaXYuZmlsZW1hbmFnZXItZGV0YWlscyB7CisJb3ZlcmZsb3c6IGF1dG87CisJaGVpZ2h0OiAxMDAlOworfQorZGl2LmZpbGVtYW5hZ2VyLWZpbGVsaXN0IHsKKwlwYWRkaW5nOiA1cHg7CisJYm9yZGVyLXRvcDogMXB4IHNvbGlkICNiZWJlYmU7Cit9CitkaXYuZmlsZW1hbmFnZXItZmlsZWxpc3QgdWwgeworCWJhY2tncm91bmQ6IG5vbmU7CisJcGFkZGluZzogMDsKKwltYXJnaW46IDA7CisJd2lkdGg6IGF1dG87CisJaGVpZ2h0OiBhdXRvOworCWJvcmRlcjogbm9uZTsKK30KK2Rpdi5maWxlbWFuYWdlci1maWxlbGlzdCBsaSB7CisJZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCitkaXYuZmlsZW1hbmFnZXItZmlsZWxpc3QgLmZpLCBkaXYuZ2FsbGVyeS1pbWFnZSB7CisJcG9zaXRpb246IHJlbGF0aXZlOworCWRpc3BsYXk6IGlubGluZS1ibG9jazsKKwlmbG9hdDogbGVmdDsKKwltYXJnaW46IDNweDsKKwlwYWRkaW5nOiA1cHg7CisKKwlib3JkZXItcmFkaXVzOiA0cHg7CisJLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7CisJLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7CisJLW8tYm9yZGVyLXJhZGl1czogNHB4OworCisJdGV4dC1hbGlnbjogY2VudGVyOworCXdoaXRlLXNwYWNlOiBub3dyYXA7CisJY3Vyc29yOiBwb2ludGVyOworfQorZGl2LmdhbGxlcnktaW1hZ2UgeworCWZsb2F0OiBub25lOworfQorZGl2LmZpbGVtYW5hZ2VyLWZpbGVsaXN0IC5maTpob3ZlciwgZGl2LmdhbGxlcnktaW1hZ2U6aG92ZXIgeworCWJhY2tncm91bmQtY29sb3I6ICNkZWU2ZjA7Cit9CitkaXYuZmlsZW1hbmFnZXItZmlsZWxpc3QgLmZpOmhvdmVyIC5uYW1lIHsKKwljb2xvcjogIzA5OEVEMTsKK30KK2Rpdi5maWxlbWFuYWdlci1maWxlbGlzdCAuZmkgLmRpci1nYWwtdGh1bWItYmcgeworCWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisJYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjsKKwkvKgorCS0tIFNpemUgZGVwZW5kcyBvbiB0aGUgdXNlcidzIGNob2ljZSBmb3IgZ2FsbGVyeSB0aHVtYnMgc2l6ZXMKKwl3aWR0aDogMTAwJTsKKwloZWlnaHQ6IDQ4cHg7CisJKi8KK30KK2Rpdi5maWxlbWFuYWdlci1maWxlbGlzdCAuZmkgLm5hbWUgeworCW92ZXJmbG93OiBoaWRkZW47CisJbWFyZ2luLXRvcDogNXB4OworCWZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKKworLyogRXh0cmEgKFRlY2guKSBJbmZvIC8gRGlhZ25vc3RpY3MgaW4gcHJldmlldyBwYW5lICovCisKKy8qCitkaXYuZmlsZW1hbmFnZXIgZGl2LmZpbGVtYW5hZ2VyLWRpYWctZHVtcCB7CisJZGlzcGxheTogbm9uZTsKK30KKyovCisKK2Rpdi5maWxlbWFuYWdlciBkaXYuZmlsZW1hbmFnZXItZGlhZy1kdW1wIHVsIHsKKwl3aWR0aDogYXV0bzsKKwloZWlnaHQ6IGF1dG87CisJYmFja2dyb3VuZDogaW5oZXJpdDsKKwlib3JkZXItdG9wOiAxcHggc29saWQgI0JFQkVCRTsKKwlib3JkZXItYm90dG9tOiAxcHggc29saWQgI0U3RTdFNzsKKwlib3JkZXItbGVmdDogMDsKKwlib3JkZXItcmlnaHQ6IDA7CisJbWFyZ2luOiA1cHggMCA1cHggMTBweDsKK30KKworZGl2LmZpbGVtYW5hZ2VyIGRpdi5maWxlbWFuYWdlci1kaWFnLWR1bXAgdWwuZHVtcF9sZXZlbF8wMCB7CisJYm9yZGVyOiAwOworfQorCitkaXYuZmlsZW1hbmFnZXIgZGl2LmZpbGVtYW5hZ2VyLWRpYWctZHVtcCBsaSBzcGFuLmtleSB7CisJbWFyZ2luLXJpZ2h0OiAyZW07CisJZGlzcGxheTogaW5saW5lLWJsb2NrOworCXdpZHRoOiAxNTBweDsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKworLyoKKyAqIG92ZXJsYXJnZXIgc2VyaWVzIH4gZ29sZGVuIHJhdGlvOiAwMDEwLCAwMDE2LCAwMDI1LCAwMDQwLCAuLi4KKyAqCisgKiBVc2UgdGhlc2UgY2xhc3NlcyB0byB0d2VhayB0aGUgbG9vayBvZiB0aGUgZGV0YWlsIGluZm8gZHVtcC4KKyAqLworZGl2LmZpbGVtYW5hZ2VyIGRpdi5maWxlbWFuYWdlci1kaWFnLWR1bXAgbGkgc3Bhbi5rZXkub3ZlcmxhcmdlcjAwMTYgeworCXdpZHRoOiBhdXRvOyAgICAvKiBwcmV2ZW50IGtleSB0ZXh0IGZyb20gb3ZlcmxhcHBpbmcgdGhlIGRhdGE7IHRoYXQgbG9va3MgcmVhbGx5IHVnbHkuICovCit9CisKK2Rpdi5maWxlbWFuYWdlciBkaXYuZmlsZW1hbmFnZXItZGlhZy1kdW1wIGxpIHsKKwl3aGl0ZS1zcGFjZTogbm9ybWFsOworfQorCitkaXYuZmlsZW1hbmFnZXIgZGl2LmZpbGVtYW5hZ2VyLWRpYWctZHVtcCBsaSBpbWcgeworCS8qIGVtYmVkZGVkIGltYWdlcyBzaG91bGQgbm90IGZsb2F0IGluIGhlcmUgKi8KKwlmbG9hdDogbm9uZTsKK30KKworCisKKworCisvKiAgdGhlIHRodW1ibmFpbHMgZ2FsbGVyeSBkaXNwbGF5ZWQgaW4gdGhlIHByZXZpZXcvZGV0YWlsIHBhbmUgKi8KKworI2dhbGxlcnktdG4tY29udGFpbmVyCit7CisJbWFyZ2luOiAxNXB4OworCXBhZGRpbmc6IDVweDsKKwlib3JkZXI6IDFweCBzb2xpZCAjYjJhMGEwOworCWJhY2tncm91bmQ6ICNmZmZhZmE7CisJYm94LXNoYWRvdzogcmdiYSgyNTUsIDAsIDAsIDAuMykgMCAwIDEwcHg7CisJLW1vei1ib3gtc2hhZG93OiByZ2JhKDI1NSwgMCwgMCwgMC4zKSAwIDAgMTBweDsKKwktd2Via2l0LWJveC1zaGFkb3c6IHJnYmEoMjU1LCAwLCAwLCAwLjMpIDAgMCAxMHB4OworfQorCisjZ2FsbGVyeS10bi1jb250YWluZXIgZGl2Cit7CisJZmxvYXQ6IGxlZnQ7CisKKwkvKiBib3JkZXI6IGdyZWVuIHNvbGlkIDFweDsgKi8KKwltYXJnaW46IDVweDsKKworfQorCisjZ2FsbGVyeS10bi1jb250YWluZXIgZGl2IGEKK3sKKwlkaXNwbGF5OiBibG9jazsKKwkvKgorCXdpZHRoOiAyNTBweDsKKwloZWlnaHQ6IDI1MHB4OworCisJLS0gVGhlIDxhPiAoYW5kIHRoZSA8aW1nPiB3aXRoaW4hKSBhcmUgJ3NpemVkJyBpbiB0aGUgSlMgY29kZQorCSovCisJYm9yZGVyOiAxcHggc29saWQgI2IyYTBhMDsKKwliYWNrZ3JvdW5kOiAjZWVlMmUyOworCXBhZGRpbmc6IDA7CisJbWFyZ2luOiAwOworCisJLyogaG9yaXpvbnRhbCBjZW50ZXJpbmcgb2YgdGhlIGNvbnRhaW5lZCBpbWFnZSAqLworCXRleHQtYWxpZ246IGNlbnRlcjsKKwltYXJnaW4tbGVmdDogYXV0bzsKKwltYXJnaW4tcmlnaHQ6IGF1dG87Cit9CisKKyNnYWxsZXJ5LXRuLWNvbnRhaW5lciBkaXYgYSBpbWcKK3sKKwlwYWRkaW5nOiAwOworCW1hcmdpbjogMDsKKwlib3JkZXI6IDAgbm9uZTsKK30KKworLyoKKyAqICBodHRwOi8vd3d3LnNtYXNoaW5nbWFnYXppbmUuY29tLzIwMDcvMDUvMDEvY3NzLWZsb2F0LXRoZW9yeS10aGluZ3MteW91LXNob3VsZC1rbm93LworICogLS0+CisgKiAgaHR0cDovL3d3dy5wb3NpdGlvbmlzZXZlcnl0aGluZy5uZXQvZWFzeWNsZWFyaW5nLmh0bWwKKyAqIC0tPgorICogIGh0dHA6Ly9ibG9ncy5zaXRlcG9pbnQuY29tL3NpbXBsZS1jbGVhcmluZy1vZi1mbG9hdHMvCisgKi8KKyNnYWxsZXJ5LXRuLWNvbnRhaW5lcgoreworCW92ZXJmbG93OiBhdXRvOworfQorCisKKwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9Dc3MvRmlsZU1hbmFnZXJfaWU3LmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvQ3NzL0ZpbGVNYW5hZ2VyX2llNy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGI1ZDRhZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvQ3NzL0ZpbGVNYW5hZ2VyX2llNy5jc3MKQEAgLTAsMCArMSwzOSBAQAorZGl2LmZpbGVtYW5hZ2VyIGRpdi5maWxlbWFuYWdlci1icm93c2Vyc2Nyb2xsIHsNCisJcG9zaXRpb246IHJlbGF0aXZlOw0KK30NCisNCitkaXYuZmlsZW1hbmFnZXItaW5mb3Mgew0KKwl3aWR0aDogYXV0bzsNCit9DQorDQorZGl2LmZpbGVtYW5hZ2VyIGRsIHsNCisJbWFyZ2luOiA1cHggMCAxMHB4IDA7DQorCXdpZHRoOiAxMDAlOw0KKwljbGVhcjogYm90aDsNCisJb3ZlcmZsb3c6IGF1dG87DQorCXBvc2l0aW9uOiByZWxhdGl2ZTsNCit9DQorDQorZGl2LmZpbGVtYW5hZ2VyLWRldGFpbHMgew0KKwlwb3NpdGlvbjogcmVsYXRpdmU7DQorCW92ZXJmbG93LXg6IGhpZGRlbjsNCisJaGVpZ2h0OiAxMDAlOw0KK30NCisNCisjbW9vdG9vbHMtZmlsZW1hbmFnZXIgZGl2LmZpbGVtYW5hZ2VyIGRpdi5maWxlbWFuYWdlci1tZW51IHsNCisJd2lkdGg6IDM1MHB4Ow0KKwliYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCit9DQorDQorI21vb3Rvb2xzLWZpbGVtYW5hZ2VyIGRpdi5maWxlbWFuYWdlci1tZW51IGxhYmVsICB7DQorfQ0KKw0KK2Rpdi5maWxlbWFuYWdlciBidXR0b24sIGRpdi5maWxlbWFuYWdlciAuZmlsZW1hbmFnZXItYnV0dG9uLA0KK2Rpdi5maWxlbWFuYWdlci1kaWFsb2cgYnV0dG9uLCBkaXYuZmlsZW1hbmFnZXItZGlhbG9nIC5maWxlbWFuYWdlci1idXR0b257DQorCWRpc3BsYXk6IGlubGluZTsNCisJb3ZlcmZsb3c6IHZpc2libGU7DQorfQ0KKw0KK2Rpdi5maWxlbWFuYWdlci1jb250YWluZXIgc3Bhbi5maSBzcGFuIHsNCisgIG92ZXJmbG93OmhpZGRlbjsNCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvN3oucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvN3oucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhOTU2MGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy83ei5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvN3oucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvN3oucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYzIxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9MYXJnZS83ei5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvYWNlLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2FjZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjllYTcxZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2FjZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvYXMucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvYXMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NjUwN2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9MYXJnZS9hcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvYXZpLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2F2aS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyNmIxMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2F2aS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvYmF0LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2JhdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNiZGQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2JhdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvYm1wLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2JtcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhYTEzOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2JtcC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvYnJva2VuX2ltZy5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9MYXJnZS9icm9rZW5faW1nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mzk3ZTVmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvYnJva2VuX2ltZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvY21kLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2NtZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNiZGQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2NtZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvZGVmYXVsdC1lcnJvci5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9MYXJnZS9kZWZhdWx0LWVycm9yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmJlMDVlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvZGVmYXVsdC1lcnJvci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvZGVmYXVsdC1taXNzaW5nLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2RlZmF1bHQtbWlzc2luZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiZDkzZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2RlZmF1bHQtbWlzc2luZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvZGVmYXVsdC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9MYXJnZS9kZWZhdWx0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDYzZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvZGVmYXVsdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvZGlyZWN0b3J5LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2RpcmVjdG9yeS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcyN2E2YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2RpcmVjdG9yeS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvZGlyZWN0b3J5X3VwLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2RpcmVjdG9yeV91cC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlhMWIxYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2RpcmVjdG9yeV91cC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvZG9jLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2RvYy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRmNTFmOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2RvYy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvZG9jeC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9MYXJnZS9kb2N4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGY1MWY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvZG9jeC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvZXhlLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2V4ZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA4ZTAxYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2V4ZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvZjR2LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2Y0di5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyNmIxMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2Y0di5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvZmx2LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2Zsdi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyNmIxMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2Zsdi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvZ2lmLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2dpZi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhYTEzOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2dpZi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvZ3oucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvZ3oucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYzIxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9MYXJnZS9nei5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvaHRtbC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9MYXJnZS9odG1sLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjVhNzA4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvaHRtbC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvaW5pLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2luaS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFhZjMwMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2luaS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvaW5rLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2luay5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI2OTIwZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2luay5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvaXNvLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2lzby5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QzYjA1YQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2lzby5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvanBlZy5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9MYXJnZS9qcGVnLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmFhMTM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvanBlZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvanBnLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2pwZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhYTEzOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL2pwZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvanMucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvanMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZmE2MDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9MYXJnZS9qcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvbTJ2LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL20ydi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkwZWQxYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL20ydi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvbWt2LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL21rdi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyNmIxMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL21rdi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvbW92LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL21vdi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkwZWQxYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL21vdi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvbXAzLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL21wMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUzYWU0YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL21wMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvbXA0LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL21wNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyNmIxMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL21wNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvbXBlZy5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9MYXJnZS9tcGVnLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTI2YjEzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvbXBlZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvbXBnLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL21wZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyNmIxMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL21wZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2Uvb2RwLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL29kcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGViZDBkOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL29kcC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2Uvb2RzLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL29kcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyYzI3YQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL29kcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2Uvb2R0LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL29kdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRmNTFmOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL29kdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2Uvb2dnLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL29nZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyNmIxMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL29nZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2Uvb3ZlcnNpemVkX2ltZy5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9MYXJnZS9vdmVyc2l6ZWRfaW1nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjdiNzI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2Uvb3ZlcnNpemVkX2ltZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvcGRmLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3BkZi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZjOGM0NgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3BkZi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvcGhwLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3BocC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhmMmFkOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3BocC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvcG5nLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3BuZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhYTEzOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3BuZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvcHB0LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3BwdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGViZDBkOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3BwdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvcmFyLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3Jhci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdlOGQ1NgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3Jhci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvcmIucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvcmIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYThiNzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9MYXJnZS9yYi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2Uvcm0ucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2Uvcm0ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MGVkMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9MYXJnZS9ybS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2Uvc3FsLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3NxbC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM4NGI2YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3NxbC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2Uvc3dmLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3N3Zi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY3ZGFjNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3N3Zi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvdGFyLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3Rhci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgyZDhkOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3Rhci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2Uvd212LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3dtdi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyNmIxMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3dtdi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UveGxzLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3hscy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyYzI3YQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3hscy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UveGxzeC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9MYXJnZS94bHN4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzJjMjdhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UveGxzeC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvTGFyZ2UvemlwLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3ppcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk5MjkwMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL0xhcmdlL3ppcC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvYWNlLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2FjZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE5NTYwYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2FjZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvYXMucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvYXMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1OWIyNDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9hcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvYXZpLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2F2aS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMxMDdiNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2F2aS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvYmF0LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2JhdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVmMDE1YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2JhdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvYm1wLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2JtcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMyMGJhYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2JtcC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvYnJva2VuX2ltZy5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9icm9rZW5faW1nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWIzOWFlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvYnJva2VuX2ltZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvY21kLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2NtZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVmMDE1YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2NtZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvZGVmYXVsdC1lcnJvci5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9kZWZhdWx0LWVycm9yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWY4OTE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvZGVmYXVsdC1lcnJvci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvZGVmYXVsdC1taXNzaW5nLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2RlZmF1bHQtbWlzc2luZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc2ZDRjNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2RlZmF1bHQtbWlzc2luZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvZGVmYXVsdC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9kZWZhdWx0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTNmNzEyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvZGVmYXVsdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvZGlyZWN0b3J5LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2RpcmVjdG9yeS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg0ZThmYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2RpcmVjdG9yeS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvZGlyZWN0b3J5X3VwLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2RpcmVjdG9yeV91cC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiMTY4YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2RpcmVjdG9yeV91cC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvZG9jLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2RvYy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU4ZWNiZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2RvYy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvZG9jeC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9kb2N4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZThlY2JmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvZG9jeC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvZXhlLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2V4ZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRlZTllMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2V4ZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvZjR2LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2Y0di5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI4MWZhZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2Y0di5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvZmx2LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2Zsdi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI4MWZhZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2Zsdi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvZ2lmLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2dpZi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMyMGJhYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2dpZi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvZ3oucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvZ3oucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MDZmZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9nei5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvaHRtbC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9odG1sLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWQyNDkwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvaHRtbC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvaW5pLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2luaS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA2ZjVhYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2luaS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvaW5rLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2luay5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhmYmIzZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2luay5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvaXNvLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2lzby5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY0MzIyMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2lzby5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvanBlZy5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9qcGVnLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzIwYmFiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvanBlZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvanBnLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2pwZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMyMGJhYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL2pwZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvanMucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvanMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNzZiZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9qcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvbTJ2LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL20ydi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM0ZmFjNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL20ydi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvbWt2LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL21rdi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI4MWZhZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL21rdi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvbW92LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL21vdi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM0ZmFjNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL21vdi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvbXAzLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL21wMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUwNjAyNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL21wMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvbXA0LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL21wNC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI4MWZhZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL21wNC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvbXBlZy5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9tcGVnLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjgxZmFkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvbXBlZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvbXBnLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL21wZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI4MWZhZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL21wZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvb2RwLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL29kcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRlZmYwMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL29kcC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvb2RzLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL29kcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk3N2Q3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL29kcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvb2R0LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL29kdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU4ZWNiZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL29kdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvb2dnLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL29nZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI4MWZhZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL29nZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvb3ZlcnNpemVkX2ltZy5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9vdmVyc2l6ZWRfaW1nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWQzYzAxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvb3ZlcnNpemVkX2ltZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvcGRmLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3BkZi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY4MDk1ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3BkZi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvcGhwLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3BocC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg2OGEyNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3BocC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvcG5nLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3BuZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMyMGJhYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3BuZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvcHB0LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3BwdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRlZmYwMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3BwdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvcmFyLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3Jhci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE5NTYwYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3Jhci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvcmIucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvcmIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OWI3YzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9yYi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvcm0ucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvcm0ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNGZhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy9ybS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvc3FsLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3NxbC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRkYmExZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3NxbC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvc3dmLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3N3Zi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc2OTEyMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3N3Zi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvdGFyLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3Rhci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE5NTYwYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3Rhci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvd212LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3dtdi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI4MWZhZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3dtdi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMveGxzLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3hscy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk3N2Q3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3hscy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMveGxzeC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9JY29ucy94bHN4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTc3ZDdlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMveGxzeC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvSWNvbnMvemlwLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3ppcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYwNmZmMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL0ljb25zL3ppcC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvYWRkLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL2FkZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMzMmZlZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL2FkZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvYXBwbGljYXRpb25fc2lkZV9ib3hlcy5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9hcHBsaWNhdGlvbl9zaWRlX2JveGVzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OThiYmNjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvYXBwbGljYXRpb25fc2lkZV9ib3hlcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvYXBwbGljYXRpb25fc2lkZV9saXN0LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL2FwcGxpY2F0aW9uX3NpZGVfbGlzdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjMzdlMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL2FwcGxpY2F0aW9uX3NpZGVfbGlzdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvYXBwbGljYXRpb25fc2lkZV90aHVtYnMucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvYXBwbGljYXRpb25fc2lkZV90aHVtYnMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MmJhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9hcHBsaWNhdGlvbl9zaWRlX3RodW1icy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvYmFyLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL2Jhci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJjNTEzZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL2Jhci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvYnV0dG9uLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL2J1dHRvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiODkzZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL2J1dHRvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvYnV0dG9uX2Rpc2FibGVkLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL2J1dHRvbl9kaXNhYmxlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhNDQ1YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL2J1dHRvbl9kaXNhYmxlZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvY2FuY2VsLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL2NhbmNlbC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZlNmQxOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL2NhbmNlbC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvY2hlY2tib3gucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvY2hlY2tib3gucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1N2VlOTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9jaGVja2JveC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvY2xvc2UucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvY2xvc2UucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMjJhOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9jbG9zZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvZGVzdHJveS5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9kZXN0cm95LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NDA0ZWNjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvZGVzdHJveS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvZG93bmxvYWQucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvZG93bmxvYWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NWVmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9kb3dubG9hZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvZHJhZ19uX2Ryb3AucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvZHJhZ19uX2Ryb3AucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ODg4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9kcmFnX25fZHJvcC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvZmlsZWxpc3QucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvZmlsZWxpc3QucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MzNkMjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9maWxlbGlzdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvZmlsZWxpc3Rfc2VsZWN0ZWQucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvZmlsZWxpc3Rfc2VsZWN0ZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNmY2Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9maWxlbGlzdF9zZWxlY3RlZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvZ29fZmlyc3QucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvZ29fZmlyc3QucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiN2FhZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9nb19maXJzdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvZ29fbGFzdC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9nb19sYXN0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmEzNGQwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvZ29fbGFzdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvZ29fbmV4dC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9nb19uZXh0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWVlMTFjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvZ29fbmV4dC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvZ29fcHJldmlvdXMucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvZ29fcHJldmlvdXMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NTlmYTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9nb19wcmV2aW91cy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvbG9hZGVyLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL2xvYWRlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU5NjlhNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL2xvYWRlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvbWVudS5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9tZW51LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTZhNjE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvbWVudS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvcHJvZ3Jlc3MuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvcHJvZ3Jlc3MuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMGI3NzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy9wcm9ncmVzcy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvcmVuYW1lLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL3JlbmFtZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI5YzdkYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvSW1hZ2VzL3JlbmFtZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvdHJhbnNwYXJlbnQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9JbWFnZXMvdHJhbnNwYXJlbnQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYTUwMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL0ltYWdlcy90cmFuc3BhcmVudC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9Td2lmZi5VcGxvYWRlci5zd2YgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL1N3aWZmLlVwbG9hZGVyLnN3ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTM2N2ZlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9Td2lmZi5VcGxvYWRlci5zd2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9kZXdwbGF5ZXIuc3dmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9kZXdwbGF5ZXIuc3dmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YTcxY2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL2Rld3BsYXllci5zd2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9qcy9SRUFETUUubWQgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL2pzL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzY5NDNiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9qcy9SRUFETUUubWQKQEAgLTAsMCArMSw2MyBAQAoranNHRVQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NvcHlyaWdodCAoQykgRmFiaWFuIFZvZ2Vsc3RlbGxlciBbZnJvemVtYW4uZGVdCitwdWJsaXNoZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMworCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsKK3lvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7Cit3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKK2lmIG5vdCxzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyMjIyBBVVRIT1IKK0ZhYmlhbiBWb2dlbHN0ZWxsZXIgPGh0dHA6Ly9mcm96ZW1hbi5kZT4KKworIyMjIERFU0NSSVBUSU9OCitqc0dFVCBpcyBhIGh0dHAgR0VULVZhcmlhYmxlcyBjbG9uZSBmb3IgamF2YXNjcmlwdCwgdXNpbmcgdGhlIGhhc2ggcGFydCBvZiB0aGUgVVJMIChpbmRleC5odG1sIy4uLikuCitZb3UgY2FuIHNldCBhbmQgZ2V0IHZhcmlhYmxlcywgYW5kIHJ1biBhIGxpc3RlbmVyIHRvIGhhc2ggY2hhbmdlcywgZS5nLiB3aGVuIHRoZSB0aGUgaGlzdG9yeSBiYWNrIGJ1dHRvbiBnZXRzIHByZXNzZWQuCitUaGlzIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgdXNhYmxlIGhpc3RvcnkgbmF2aWdhdGlvbiBpbiB5b3VyIGFqYXggYXBwbGljYXRpb24uIEl0IHNob3VsZCB3b3JrIHdpdGggYWxsIEEtZ3JhZGUgYnJvd3NlcnMuCisKKyMjIyBWRVJTSU9OCiswLjIKKworIyMjIElOU1RBTExBVElPTgorSnVzdCBpbmNsdWRlIHRoZSBqc0dFVC5qcyBpbiB5b3VyIHdlYnNpdGUvd2ViYXBwbGljYXRpb24gYW5kIHVzZSB0aGUganNHRVQgb2JqZWN0IHdpdGggaXRzIG1ldGhvZHMgdG8gc2V0LCBnZXQsIHJlbW92ZSBoaXN0b3J5IGhhc2ggdmFyaWFibGVzLgorU2VlIHRoZSBkZW1vLmh0bWwgZm9yIGV4YW1wbGVzLgorCisjIyMgUHJvcGVydGllcworLSB2YXJzOiAgICAgICAgICAgICAgICAgICAgIChvYmplY3QpIHRoZSBoYXNoIHZhcmlhYmxlcyBvYmplY3QgbG9hZGVkIGJ5IGdldCgpLCBzZXQoKSwgcmVtb3ZlKCksIG9yIGNsZWFyKCkgb3IgbG9hZCgpIHBsdXMgdmFyaW91cyBpbmRpY2F0b3JzIGFuZCB0cmFja2VyczoKKy0gdmFycy5jdXJyZW50OiAgICAgICAgICAgICAob2JqZWN0KSB0aGUgY3VycmVudCB2YXJpYWJsZXMuCistIHZhcnMub2xkOiAgICAgICAgICAgICAgICAgKG9iamVjdCkgdGhlIG9sZCB2YXJpYWJsZXMsIGJlZm9yZSB0aGV5IHdoZXJlIGNoYW5nZWQgd2l0aCBzZXQoKSwgcmVtb3ZlKCksIGNsZWFyKCkgb3IgdGhlIGJyb3dzZXIgaGlzdG9yeSBiYWNrIGJ1dHRvbi4gICAqV0FSTklORyo6IHRoaXMgaXMgb25lIGlzIG9ubHkgdmFsaWQgd2hpbGUgdGhlIGxpc3RlbmVyIGlzIGludm9rZWQuCistIHZhcnMuY2hhbmdlZDogICAgICAgICAgICAgKG9iamVjdCkgdGhlIHZhcmlhYmxlcyB3aGljaCBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY2FsbCBvZiBnZXQoKSwgc2V0KCksIHJlbW92ZSgpLCBjbGVhcigpLCBsb2FkKCkgb3IgdGhlIGJyb3dzZXIgaGlzdG9yeSBiYWNrIGJ1dHRvbi4gICAqV0FSTklORyo6IHRoaXMgaXMgb25lIGlzIHVwZGF0ZWQgYnkgc2V0Q2hhbmdlZFZhcnMoKSBkZXBlbmRpbmcgb24gJ3ZhcnMub2xkJyBhbmQgdXN1YWxseSBpcyBvbmx5IHZhbGlkIHdoaWxlIHRoZSBsaXN0ZW5lciBpcyBpbnZva2VkLgorLSB2YXJzLmNoYW5nZV9jb3VudDogICAgICAgIChpbnRlZ2VyKSBhIG51bWJlciBvZiB2YXJpYWJsZXMgY2hhbmdlZC9hZGRlZC9yZW1vdmVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIGxpc3RlbmVyIHdhcyBpbnZva2VkLiAgICpXQVJOSU5HKjogdGhpcyBpcyBvbmUgaXMgdXBkYXRlZCBieSBzZXRDaGFuZ2VkVmFycygpIGRlcGVuZGluZyBvbiAndmFycy5vbGQnIGFuZCB1c3VhbGx5IGlzIG9ubHkgdmFsaWQgd2hpbGUgdGhlIGxpc3RlbmVyIGlzIGludm9rZWQuCistIHZhcnMubGFzdF9oYXNoX2xvYWRlZDogICAgKHN0cmluZywgaW50ZXJuYWwgdXNlIG9ubHkpIHRoZSByYXcgaGFzaCBzdHJpbmcgd2hpY2ggd2FzIGp1c3QgcHJvY2Vzc2VkOyBpbiB0aGUgbGlzdGVuZXIsIHRoaXMgZXF1YWxzIHRoZSBjdXJyZW50IGhhc2guCistIHZhcnMubGFzdF9oYXNoX3NhdmVkOiAgICAgKHN0cmluZywgaW50ZXJuYWwgdXNlIG9ubHkpIHRoZSBoYXNoIHNlY3Rpb24gc3RyaW5nIHdoaWNoIHdhcyB0aGUgbGFzdCBvbmUgZ2VuZXJhdGVkIGJ5IHNldCgpLCBjbGVhcigpIG9yIHJlbW92ZSgpLgorLSB2YXJzLmZvcmVpZ25faGFzaF9jaGFuZ2U6IChib29sZWFuKSBUUlVFIHdoZW4gdGhlIGhhc2ggd2FzIGNoYW5nZWQgZnJvbSBvdXRzaWRlIG91ciBjb250cm9sLCBlLmcuIHdoZW4gdGhlIHVzZXIgaGl0IHRoZSAnYmFjay9oaXN0b3J5JyBidXR0b24gaW4gdGhlIGJyb3dzZXIsIGFmdGVyIHRoZSBwcmV2aW91cyBpbnZvY2F0aW9uIG9mIHRoZSBsaXN0ZW5lci4KKy0gdmFycy5oYXNoX2NoYW5nZWQ6ICAgICAgICAoYm9vbGVhbikgVFJVRSB3aGVuIHRoZSBoYXNoIGhhcyBjaGFuZ2VkIGFmdGVyIHRoZSBwcmV2aW91cyBpbnZvY2F0aW9uIG9mIHRoZSBsaXN0ZW5lci4KKworIyMjIE1ldGhvZHMKKy0gbG9hZCgpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRzIHRoZSBjdXJyZW50IGhhc2ggdmFyaWFibGVzIGludG8gdGhlIHZhcnMuY3VycmVudCBwcm9wZXJ0eSBhcyBKU09OIG9iamVjdC4gUmV0dXJuIHRoZSB1cGRhdGVkIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMuCistIGNsZWFyKCk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcnMgdGhlIGhhc2ggcGFydCBvZiB0aGUgVVJMLiAoYmVjYXVzZSBpdCdzIG5vdCBjb21wbGV0ZWx5IHBvc3NpYmxlLCBpdCBzZXRzIGl0IHRvICIjXyIpCistIGdldChnZXQpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nKSB0cnkgdG8gZ2V0IGEgaGFzaCB2YXJpYWJsZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorLSBzZXQoc2V0KTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZyxvYmplY3QpIHNldHMgdGhlIGdpdmVuIHBhcmFtZXRlcnMgdG8gdGhlIGhhc2ggdmFyaWFibGVzLiBJZiBpdCdzIGEgc3RyaW5nIGl0IHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OiAia2V5PXZhbHVlIi4gUmV0dXJuIHRoZSB1cGRhdGVkIHNldCBvZiBrZXkvdmFsdWUgcGFpcnMuCistIHJlbW92ZShyZW1vdmUpOiAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLGFycmF5KSB0aGUgdmFyaWFibGUgbmFtZShzKSB3aGljaCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBoYXNoIHZhcmlhYmxlcy4gUmV0dXJuIHRoZSBvbGQgc2V0IG9mIGtleS92YWx1ZSBwYWlycy4KKy0gYWRkTGlzdGVuZXIobGlzdGVuZXIsY2FsbEFsd2F5cyxiaW5kKTogIChsaXN0ZW5lcjogZnVuY3Rpb24sIGNhbGxBbHdheXM6IGJvb2xlYW4sIGJpbmQ6IG9iamVjdCBpbnN0YW5jZSkgY3JlYXRlcyBhIGxpc3RlbmVyIHdoaWNoIGNhbGxzIHRoZSBnaXZlbiBmdW5jdGlvbiB3aGVuIGEgaGFzaCBjaGFuZ2Ugb2NjdXJzLiBUaGUgY2FsbGVkIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSB2YXJzIHByb3BlcnR5ICh2YXJzLmN1cnJlbnQsdmFycy5vbGQsdmFycy5jaGFuZ2VkKSBhbmQgdXNlIHRoZSAiYmluZCIgcGFyYW1ldGVyIGFzICJ0aGlzIiwgd2hlbiBzcGVjaWZpZWQuCisgIFRoZSByZXR1cm4gb2YgdGhlIGFkZExpc3RlbmVyKCkgbWV0aG9kIGlzIGEgc2V0SW50ZXJ2YWwgSUQgYW5kIG11c3QgYmUgcGFzc2VkIHRvIHRoZSByZW1vdmVMaXN0ZW5lcigpIG1ldGhvZCB0byBzdG9wIHRoZSBsaXN0ZW5pbmcuCisgIFdoZW4gY2FsbEFsd2F5cyBpcyBGQUxTRSwgaXQgb25seSBjYWxscyB3aGVuIHRoZSBicm93c2VyIGhpc3RvcnkgYnV0dG9ucyBhcmUgcHJlc3NlZCBhbmQgbm90IHdoZW4gZ2V0KCksIHNldCgpLCByZW1vdmUoKSBvciBjbGVhcigpIGlzIGNhbGxlZC4KKy0gcmVtb3ZlTGlzdGVuZXIobGlzdGVuZXJJRCk6ICAgICAgICAgICAgICh0aGUgc2V0SW50ZXJ2YWwgSWQgcmVjZWl2ZWQgZnJvbSBhIGFkZExpc3RlbmVyKCkgbWV0aG9kKSByZW1vdmVzIGEgbGlzdGVuZXIgc2V0IHdpdGggdGhlIGFkZExpc3RlbmVyKCkgbWV0aG9kLgorLSBzZXRDaGFuZ2VkVmFycygpOiAgICAgICAgICAgICAgICAgICAgICAgKGludGVybmFsIHVzZSkgdXBkYXRlcyB0aGUgdmFycy5jaGFuZ2VkIGNvbGxlY3Rpb24gYW5kIHZhcnMuY2hhbmdlX2NvdW50IHZhbHVlLgorCisjIyMgQVRURU5USU9OIQorRXZlcnl0aW1lIHlvdSBjYWxsIHNldCgpLCByZW1vdmUoKSBvciBjbGVhcigpIGEgbmV3IGhhc2ggc3RyaW5nIHdpbGwgYmUgc2V0LAordGhhdCBtZWFucyB5b3UgYWxzbyBjcmVhdGUgYSBuZXcgaGlzdG9yeSBzdGVwIGluIHRoZSBicm93c2VyIGhpc3RvcnkhCisKK1RoZXNlIGFyZSAnc3BlY2lhbCcgY2hhcmFjdGVycyB0byBqc0dFVCBhbmQgd2lsbCB0aGVyZWZvciBiZSBlbmNvZGVkIHdoZW4gdGhleSBhcmUgcGFydCBvZiBhIGtleSBvciB2YWx1ZToKKworPiAgIyAmID0KKwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9qcy9kZW1vLmh0bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL2pzL2RlbW8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWUwOTdkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9qcy9kZW1vLmh0bWwKQEAgLTAsMCArMSwxMjAgQEAKKzwhZG9jdHlwZSBodG1sPiAgCisKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+CisKKyAgPHRpdGxlPmpzR0VUIGRlbW88L3RpdGxlPgorICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ic2ltcGxlIGRlbW9zLCB3aGljaCBzaG93IHdoYXQgeW91IGNhbiBkbyB3aXRoIGpzR0VUIj4KKyAgPG1ldGEgbmFtZT0iYXV0aG9yIiBjb250ZW50PSJGYWJpYW4gVm9nZWxzdGVsbGVyIj4KKworICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CisgIAorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqc0dFVC5qcyI+PC9zY3JpcHQ+CisgIAorICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBib2R5IHsKKyAgICBmb250LXNpemU6IDEycHg7CisgICAgZm9udC1mYW1pbHk6IHZlcmRhbmEsIHNhbnMtc2VyaWY7CisgICAgYmFja2dyb3VuZC1jb2xvcjojMDAwOworICAgIGNvbG9yOiAjZmZmOworICB9CisgIAorICBhIHsKKyAgICBjb2xvcjogI2ZmZjsKKyAgICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkICNlZWU7CisgIH0KKyAgCisgICNtZW51IGgxIHsKKyAgICBjb2xvcjojZmZmOworICAgIGZvbnQtc2l6ZTogMTVweDsKKyAgfQorICAKKyAgI291dHB1dCB7CisgICAgd2lkdGg6IDIwMHB4OworICAgIGJvcmRlcjogMXB4IHNvbGlkIHdoaXRlOworICAgIHBhZGRpbmc6IDVweDsKKyAgICBjb2xvcjogI2NjYzsKKyAgfQorICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisgIAorICA8ZGl2IGlkPSJtZW51Ij4KKyAgPGgxPk5hdmlnYXRpb248L2gxPgorICA8YSBocmVmPSIjIiBvbmNsaWNrPSJqc0dFVC5zZXQoJ215TmF2aT1maXJzdHBhZ2UnKTtyZXR1cm4gZmFsc2U7Ij5GaXJzdCBwYWdlPC9hPjxiciAvPgorICA8YSBocmVmPSIjIiBvbmNsaWNrPSJqc0dFVC5zZXQoeydteU5hdmknOidzZWNvbmRwYWdlJ30pO3JldHVybiBmYWxzZTsiPlNlY29uZCBwYWdlPC9hPjxiciAvPgorICA8YSBocmVmPSIjIiBvbmNsaWNrPSJqc0dFVC5zZXQoeydteU5hdmknOidsYXN0cGFnZScsJ25ld1Zhcic6J25ld1ZhbHVlJ30pO3JldHVybiBmYWxzZTsiPkxhc3QgcGFnZTwvYT48YnIgLz48YnIgLz4KKyAgPGEgaHJlZj0iIyIgb25jbGljaz0ianNHRVQucmVtb3ZlKCdteU5hdmknKTtyZXR1cm4gZmFsc2U7Ij5SZW1vdmUgIm15TmF2aSIgdmFyPC9hPjxiciAvPgorICA8YSBocmVmPSIjIiBvbmNsaWNrPSJqc0dFVC5jbGVhcigpO3JldHVybiBmYWxzZTsiPkNsZWFyIGFsbDwvYT48YnIgLz4KKyAgPGgyPk1vZGU8L2gyPgorICA8YSBocmVmPSI/bW9kZT1yZWd1bGFyIj5GaXJlIGpzR0VUIGxpc3RlbmVyIChhbmQgdXBkYXRlIG91dHB1dCBib3ggYmVsb3cpIHdpdGggZXZlcnkgY2hhbmdlPC9hPjxiciAvPgorICA8YSBocmVmPSI/bW9kZT1vbmx5LWJyb3dzZXItaGlzdG9yeSI+RmlyZSBqc0dFVCBsaXN0ZW5lciAoYW5kIHVwZGF0ZSBvdXRwdXQgYm94IGJlbG93KSBPTkxZIHdoZW4geW91IGNoYW5nZSB0aGUgVVJMIGJ5IGdvaW5nIGJhY2sgaW4gdGhlIGJyb3dzZXIgaGlzdG9yeSAob3IgYnkgbWFudWFsbHkgZWRpdGluZyB0aGUgaGFzaCBzZWN0aW9uKTwvYT48YnIgLz4KKyAgTGlzdGVuZXIgdGVzdCBmcmVxdWVuY3k6PGJyIC8+CisgIDxhIGhyZWY9Ij9mcmVxPTEwMCI+dmVyeSBmYXN0ICgwLjFzKTwvYT4gfAorICA8YSBocmVmPSI/ZnJlcT0yNTAiPmZhc3QgKDAuMjVzKTwvYT4gfAorICA8YSBocmVmPSI/ZnJlcT01MDAiPnJlZ3VsYXIvZGVmYXVsdCAoMC41cyk8L2E+IHwKKyAgPGEgaHJlZj0iP2ZyZXE9MTAwMCI+c2xvdyAoMXMpPC9hPiB8CisgIDxhIGhyZWY9Ij9mcmVxPTUwMDAiPnZlcnkgc2xvdyAoNXMpPC9hPjxiciAvPgorICA8L2Rpdj4KKyAgPGJyIC8+CisgIDxkaXYgaWQ9Im91dHB1dCI+CisgIDwvZGl2PgorICAKKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorCisgIC8vIHJ1biB0aGUgcHV0SW5PdXRwdUJveCBhbHdheXMgd2hlbiB0aGUgaGFzaCB2YWx1ZSBjaGFuZ2VzCisgIC8vICh3aGVuIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIEZBTFNFLCBpdCBvbmx5IGNhbGxzIHRoZSBmdW5jdGlvbiB3aGVuIHRoZSBicm93c2VyIGhpc3RvcnkgYnV0dG9uIChiYWNrLCBmb3J3YXJkKSBpcyBjbGlja2VkKQorICB2YXIgbmV3TGlzdGVuZXIgPSBqc0dFVC5hZGRMaXN0ZW5lcihwdXRJbk91dHB1dEJveCwgKGdldF91cmlfYXJnKCdtb2RlJykgIT09ICdvbmx5LWJyb3dzZXItaGlzdG9yeScpLCBudWxsLCBwYXJzZUludChnZXRfdXJpX2FyZygnZnJlcScpKSk7IC8vIHRoZSAibmV3TGlzdGVuZXIiIHZhciBnZXQgdGhlIHNldEludGVydmFsbElkIG5lY2Vzc2FyeSBmb3IgcmVtb3ZlTGlzdGVuZXIoKQorICAKKyAgLy8gdGhlIGZ1bmN0aW9uIHdoaWNoIGdldCBjYWxsZWQgYnkgdGhlIGxpc3RlbmVyCisgIGZ1bmN0aW9uIHB1dEluT3V0cHV0Qm94KGhhc2hWYXJzKSB7CisgICAgdmFyIG91dHB1dEJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvdXRwdXQiKTsKKyAgICBvdXRwdXRCb3guaW5uZXJIVE1MID0gJyc7CisgICAgdmFyIG91dHB1dCA9ICcnOworCisgICAgLy8gc2hvdyBjaGFuZ2VkIHZhcnMgaW4gdGhlIG91dHB1dCBib3gKKyAgICBvdXRwdXQgKz0gJzxiPkNoYW5nZWQgdmFyKHMpPC9iPjxiciAvPic7CisgICAgZm9yKHZhciBrZXkgaW4gaGFzaFZhcnMuY2hhbmdlZCkgeworICAgICAgb3V0cHV0ICs9IGtleSsnID0gJytoYXNoVmFycy5jaGFuZ2VkW2tleV0rJzxiciAvPic7CisgICAgfQorICAgIAorICAgIC8vIHNob3cgYWxsIGN1cnJlbnQgdmFycyBpbiB0aGUgb3V0cHV0IGJveAorICAgIG91dHB1dCArPSAnPGJyPjxiPkN1cnJlbnQgdmFyKHMpPC9iPjxiciAvPic7CisgICAgZm9yKHZhciBrZXkgaW4gaGFzaFZhcnMuY3VycmVudCkgeworICAgICAgb3V0cHV0ICs9IGtleSsnID0gJytoYXNoVmFycy5jdXJyZW50W2tleV0rJzxiciAvPic7CisgICAgfQorICAgIAorICAgIC8vIHNob3cgYWxsIGN1cnJlbnQgdmFycyBpbiB0aGUgb3V0cHV0IGJveAorICAgIG91dHB1dCArPSAnPGJyIC8+PGI+T2xkIHZhcihzKTwvYj48YnIgLz4nOworICAgIGZvcih2YXIga2V5IGluIGhhc2hWYXJzLm9sZCkgeworICAgICAgb3V0cHV0ICs9IGtleSsnID0gJytoYXNoVmFycy5vbGRba2V5XSsnPGJyIC8+JzsKKyAgICB9CisgICAgCisgICAgb3V0cHV0ICs9ICc8YnIgLz48YnIgLz48Yj5UaGlzIHVzZXMgdGhlIGdldCgpIG1ldGhvZCwgdG8gZmV0Y2ggdGhlICJteU5hdmkiIHZhcjo8L2I+PGJyIC8+Jytqc0dFVC5nZXQoJ215TmF2aScpOworICAgIAorICAgIG91dHB1dEJveC5pbm5lckhUTUwgPSBvdXRwdXQ7CisJYmxpbmsoMSk7CisJc2V0VGltZW91dChibGluaywgMjUwKTsKKyAgfQorICAKKyAgZnVuY3Rpb24gYmxpbmsodG9nZ2xlKSB7CisgICAgdmFyIG91dHB1dEJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvdXRwdXQiKTsKKwlvdXRwdXRCb3guc3R5bGUuYmFja2dyb3VuZENvbG9yID0gKHRvZ2dsZSA9PSAxID8gJyM4MDAnIDogJycpOworICB9CisJCisJLy8gZGVyaXZlZCBmcm9tICBodHRwOi8vd3d3Lm5ldGxvYm8uY29tL3VybF9xdWVyeV9zdHJpbmdfamF2YXNjcmlwdC5odG1sCisJZnVuY3Rpb24gZ2V0X3VyaV9hcmcobmFtZSkKKwl7CisJICB2YXIgcmUgPSAnWz8mXScgKyBuYW1lICsgJz0oW14mI10qKSc7CisJICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKHJlKTsKKwkgIHZhciByZXN1bHRzID0gcmVnZXguZXhlYyh3aW5kb3cubG9jYXRpb24uaHJlZik7CisJICBpZiAocmVzdWx0cyA9PSBudWxsKQorCQlyZXR1cm4gJyc7CisJICBlbHNlCisJCXJldHVybiByZXN1bHRzWzFdOworCX0gIAorICA8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL2pzL2pzR0VULmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9qcy9qc0dFVC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjA4N2ZkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9qcy9qc0dFVC5qcwpAQCAtMCwwICsxLDI5NCBAQAorLyoqCisqCisqIGpzR0VUCisqCisqIGpzR0VUIGlzIGEgaHR0cCBHRVQtVmFyaWFibGVzIGNsb25lIGZvciBqYXZhc2NyaXB0LCB1c2luZyB0aGUgaGFzaCBwYXJ0IG9mIHRoZSBVUkwgKGluZGV4Lmh0bWwjLi4uKS4KKyogWW91IGNhbiBzZXQgYW5kIGdldCB2YXJpYWJsZXMsIGFuZCBydW4gYSBsaXN0ZW5lciB0byBoYXNoIGNoYW5nZXMsIGUuZy4gd2hlbiB0aGUgdGhlIGhpc3RvcnkgYmFjayBidXR0b24gZ2V0cyBwcmVzc2VkLgorKiBUaGlzIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgdXNhYmxlIGhpc3RvcnkgbmF2aWdhdGlvbiBpbiB5b3VyIGFqYXggYXBwbGljYXRpb24uIEl0IHNob3VsZCB3b3JrIHdpdGggYWxsIEEtZ3JhZGUgYnJvd3NlcnMuCisqCisqIEBhdXRob3IgRmFiaWFuIFZvZ2Vsc3RlbGxlciA8ZmFiaWFuQGZlaW5kdXJhLm9yZz4KKyogQGNvcHlyaWdodCBGYWJpYW4gVm9nZWxzdGVsbGVyCisqIEBsaWNlbnNlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMKKyoKKyogQHZlcnNpb24gMC4yCisqCisqICMjIyBQcm9wZXJ0aWVzCisqIC0gdmFyczogICAgICAgICAgICAgICAgICAgICAob2JqZWN0KSB0aGUgaGFzaCB2YXJpYWJsZXMgb2JqZWN0IGxvYWRlZCBieSBnZXQoKSwgc2V0KCksIHJlbW92ZSgpLCBvciBjbGVhcigpIG9yIGxvYWQoKSBwbHVzIHZhcmlvdXMgaW5kaWNhdG9ycyBhbmQgdHJhY2tlcnM6CisqIC0gdmFycy5jdXJyZW50OiAgICAgICAgICAgICAob2JqZWN0KSB0aGUgY3VycmVudCB2YXJpYWJsZXMuCisqIC0gdmFycy5vbGQ6ICAgICAgICAgICAgICAgICAob2JqZWN0KSB0aGUgb2xkIHZhcmlhYmxlcywgYmVmb3JlIHRoZXkgd2hlcmUgY2hhbmdlZCB3aXRoIHNldCgpLCByZW1vdmUoKSwgY2xlYXIoKSBvciB0aGUgYnJvd3NlciBoaXN0b3J5IGJhY2sgYnV0dG9uLiAgICpXQVJOSU5HKjogdGhpcyBpcyBvbmUgaXMgb25seSB2YWxpZCB3aGlsZSB0aGUgbGlzdGVuZXIgaXMgaW52b2tlZC4KKyogLSB2YXJzLmNoYW5nZWQ6ICAgICAgICAgICAgIChvYmplY3QpIHRoZSB2YXJpYWJsZXMgd2hpY2ggaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGNhbGwgb2YgZ2V0KCksIHNldCgpLCByZW1vdmUoKSwgY2xlYXIoKSwgbG9hZCgpIG9yIHRoZSBicm93c2VyIGhpc3RvcnkgYmFjayBidXR0b24uICAgKldBUk5JTkcqOiB0aGlzIGlzIG9uZSBpcyB1cGRhdGVkIGJ5IHNldENoYW5nZWRWYXJzKCkgZGVwZW5kaW5nIG9uICd2YXJzLm9sZCcgYW5kIHVzdWFsbHkgaXMgb25seSB2YWxpZCB3aGlsZSB0aGUgbGlzdGVuZXIgaXMgaW52b2tlZC4KKyogLSB2YXJzLmNoYW5nZV9jb3VudDogICAgICAgIChpbnRlZ2VyKSBhIG51bWJlciBvZiB2YXJpYWJsZXMgY2hhbmdlZC9hZGRlZC9yZW1vdmVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIGxpc3RlbmVyIHdhcyBpbnZva2VkLiAgICpXQVJOSU5HKjogdGhpcyBpcyBvbmUgaXMgdXBkYXRlZCBieSBzZXRDaGFuZ2VkVmFycygpIGRlcGVuZGluZyBvbiAndmFycy5vbGQnIGFuZCB1c3VhbGx5IGlzIG9ubHkgdmFsaWQgd2hpbGUgdGhlIGxpc3RlbmVyIGlzIGludm9rZWQuCisqIC0gdmFycy5sYXN0X2hhc2hfbG9hZGVkOiAgICAoc3RyaW5nLCBpbnRlcm5hbCB1c2Ugb25seSkgdGhlIHJhdyBoYXNoIHN0cmluZyB3aGljaCB3YXMganVzdCBwcm9jZXNzZWQ7IGluIHRoZSBsaXN0ZW5lciwgdGhpcyBlcXVhbHMgdGhlIGN1cnJlbnQgaGFzaC4KKyogLSB2YXJzLmxhc3RfaGFzaF9zYXZlZDogICAgIChzdHJpbmcsIGludGVybmFsIHVzZSBvbmx5KSB0aGUgaGFzaCBzZWN0aW9uIHN0cmluZyB3aGljaCB3YXMgdGhlIGxhc3Qgb25lIGdlbmVyYXRlZCBieSBzZXQoKSwgY2xlYXIoKSBvciByZW1vdmUoKS4KKyogLSB2YXJzLmZvcmVpZ25faGFzaF9jaGFuZ2U6IChib29sZWFuKSBUUlVFIHdoZW4gdGhlIGhhc2ggd2FzIGNoYW5nZWQgZnJvbSBvdXRzaWRlIG91ciBjb250cm9sLCBlLmcuIHdoZW4gdGhlIHVzZXIgaGl0IHRoZSAnYmFjay9oaXN0b3J5JyBidXR0b24gaW4gdGhlIGJyb3dzZXIsIGFmdGVyIHRoZSBwcmV2aW91cyBpbnZvY2F0aW9uIG9mIHRoZSBsaXN0ZW5lci4KKyogLSB2YXJzLmhhc2hfY2hhbmdlZDogICAgICAgIChib29sZWFuKSBUUlVFIHdoZW4gdGhlIGhhc2ggaGFzIGNoYW5nZWQgYWZ0ZXIgdGhlIHByZXZpb3VzIGludm9jYXRpb24gb2YgdGhlIGxpc3RlbmVyLgorKgorKiAjIyMgTWV0aG9kcworKiAtIGxvYWQoKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkcyB0aGUgY3VycmVudCBoYXNoIHZhcmlhYmxlcyBpbnRvIHRoZSB2YXJzLmN1cnJlbnQgcHJvcGVydHkgYXMgSlNPTiBvYmplY3QuIFJldHVybiB0aGUgdXBkYXRlZCBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzLgorKiAtIGNsZWFyKCk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcnMgdGhlIGhhc2ggcGFydCBvZiB0aGUgVVJMLiAoYmVjYXVzZSBpdCdzIG5vdCBjb21wbGV0ZWx5IHBvc3NpYmxlLCBpdCBzZXRzIGl0IHRvICIjXyIpCisqIC0gZ2V0KGdldCk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmcpIHRyeSB0byBnZXQgYSBoYXNoIHZhcmlhYmxlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisqIC0gc2V0KHNldCk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmcsb2JqZWN0KSBzZXRzIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIHRvIHRoZSBoYXNoIHZhcmlhYmxlcy4gSWYgaXQncyBhIHN0cmluZyBpdCBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDogImtleT12YWx1ZSIuIFJldHVybiB0aGUgdXBkYXRlZCBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzLgorKiAtIHJlbW92ZShyZW1vdmUpOiAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLGFycmF5KSB0aGUgdmFyaWFibGUgbmFtZShzKSB3aGljaCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBoYXNoIHZhcmlhYmxlcy4gUmV0dXJuIHRoZSBvbGQgc2V0IG9mIGtleS92YWx1ZSBwYWlycy4KKyogLSBhZGRMaXN0ZW5lcihsaXN0ZW5lcixjYWxsQWx3YXlzLGJpbmQpOiAgKGxpc3RlbmVyOiBmdW5jdGlvbiwgY2FsbEFsd2F5czogYm9vbGVhbiwgYmluZDogb2JqZWN0IGluc3RhbmNlKSBjcmVhdGVzIGEgbGlzdGVuZXIgd2hpY2ggY2FsbHMgdGhlIGdpdmVuIGZ1bmN0aW9uIHdoZW4gYSBoYXNoIGNoYW5nZSBvY2N1cnMuIFRoZSBjYWxsZWQgZnVuY3Rpb24gd2lsbCBnZXQgdGhlIHZhcnMgcHJvcGVydHkgKHZhcnMuY3VycmVudCx2YXJzLm9sZCx2YXJzLmNoYW5nZWQpIGFuZCB1c2UgdGhlICJiaW5kIiBwYXJhbWV0ZXIgYXMgInRoaXMiLCB3aGVuIHNwZWNpZmllZC4KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJldHVybiBvZiB0aGUgYWRkTGlzdGVuZXIoKSBtZXRob2QgaXMgYSBzZXRJbnRlcnZhbCBJRCBhbmQgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIHJlbW92ZUxpc3RlbmVyKCkgbWV0aG9kIHRvIHN0b3AgdGhlIGxpc3RlbmluZy4KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiBjYWxsQWx3YXlzIGlzIEZBTFNFLCBpdCBvbmx5IGNhbGxzIHdoZW4gdGhlIGJyb3dzZXIgaGlzdG9yeSBidXR0b25zIGFyZSBwcmVzc2VkIGFuZCBub3Qgd2hlbiBnZXQoKSwgc2V0KCksIHJlbW92ZSgpIG9yIGNsZWFyKCkgaXMgY2FsbGVkLgorKiAtIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVySUQpOiAgICAgICAgICAgICAodGhlIHNldEludGVydmFsIElkIHJlY2VpdmVkIGZyb20gYSBhZGRMaXN0ZW5lcigpIG1ldGhvZCkgcmVtb3ZlcyBhIGxpc3RlbmVyIHNldCB3aXRoIHRoZSBhZGRMaXN0ZW5lcigpIG1ldGhvZC4KKyogLSBzZXRDaGFuZ2VkVmFycygpOiAgICAgICAgICAgICAgICAgICAgICAgKGludGVybmFsIHVzZSkgdXBkYXRlcyB0aGUgdmFycy5jaGFuZ2VkIGNvbGxlY3Rpb24gYW5kIHZhcnMuY2hhbmdlX2NvdW50IHZhbHVlLgorKgorKiAjIyMgQVRURU5USU9OIQorKiBFdmVyeXRpbWUgeW91IGNhbGwgc2V0KCksIHJlbW92ZSgpIG9yIGNsZWFyKCkgYSBuZXcgaGFzaCBzdHJpbmcgd2lsbCBiZSBzZXQsCisqIHRoYXQgbWVhbnMgeW91IGFsc28gY3JlYXRlIGEgbmV3IGhpc3Rvcnkgc3RlcCBpbiB0aGUgYnJvd3NlciBoaXN0b3J5IQorKgorKiBUaGVzZSBhcmUgJ3NwZWNpYWwnIGNoYXJhY3RlcnMgdG8ganNHRVQgYW5kIHdpbGwgdGhlcmVmb3IgYmUgZW5jb2RlZCB3aGVuIHRoZXkgYXJlIHBhcnQgb2YgYSBrZXkgb3IgdmFsdWU6CisqICAgIyAmID0KKyovCisKK3ZhciBqc0dFVCA9IHsKKwl2YXJzOiB7CisJCW9sZDoge30sCisJCWN1cnJlbnQ6IHt9LAorCQljaGFuZ2VkOiB7fSwKKwkJY2hhbmdlX2NvdW50OiAwLAorCQlsYXN0X2hhc2hfbG9hZGVkOiAnJywKKwkJbGFzdF9oYXNoX3NhdmVkOiB3aW5kb3cubG9jYXRpb24uaGFzaCwKKwkJZm9yZWlnbl9oYXNoX2NoYW5nZTogZmFsc2UsCisJCWhhc2hfY2hhbmdlZDogZmFsc2UKKwl9LAorCWxvYWQ6IGZ1bmN0aW9uKCkgeworCQkvLyBvbmx5IGxvYWQgaGFzaCB2YXJpYWJsZXMgd2hlbiBhbnl0aGluZyBjaGFuZ2VkIGluIHRoZSBoYXNoIHNpbmNlIGxhc3QgdGltZSB3ZSBsb2FkZWQgdGhlbToKKwkJdmFyIGk7CisJCXZhciBuZXdfaGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoOworCisJCWlmICh0aGlzLnZhcnMubGFzdF9oYXNoX2xvYWRlZCAhPT0gbmV3X2hhc2gpIHsKKwkJCS8vIGRldGVjdCB3aGV0aGVyIHRoZSBoYXNoIHdhcyBjaGFuZ2VkIG91dHNpZGUgb3VyIGNvbnRyb2wsIGUuZy4gd2hlbiB1c2VyIHB1c2hlZCBCQUNLL0hJU1RPUlkgYnV0dG9uIGluIGJyb3dzZXI6CisJCQlpZiAobmV3X2hhc2ggIT09IHRoaXMudmFycy5sYXN0X2hhc2hfc2F2ZWQpIHsKKwkJCQl0aGlzLnZhcnMuZm9yZWlnbl9oYXNoX2NoYW5nZSA9IHRydWU7CisJCQl9CisJCQl0aGlzLnZhcnMuaGFzaF9jaGFuZ2VkID0gdHJ1ZTsKKworCQkJdmFyIGhhc2hWYXJzID0gbmV3X2hhc2guc3BsaXQoJyMnKTsKKwkJCXRoaXMudmFycy5jdXJyZW50ID0ge307CisJCQlpZiAodHlwZW9mIGhhc2hWYXJzWzFdICE9PSAndW5kZWZpbmVkJyAmJiBoYXNoVmFyc1sxXSAmJiBoYXNoVmFyc1sxXSAhPT0gJ18nKSB7CisJCQkJaGFzaFZhcnMgPSBoYXNoVmFyc1sxXS5zcGxpdCgnJicpOworCQkJCWZvcihpID0gMDsgaSA8IGhhc2hWYXJzLmxlbmd0aDsgaSsrKSB7CisJCQkJCXZhciBoYXNoVmFyID0gaGFzaFZhcnNbaV0uc3BsaXQoJz0nKTsKKwkJCQkJdGhpcy52YXJzLmN1cnJlbnRbdGhpcy5kZWNvZGUoaGFzaFZhclswXSldID0gKHR5cGVvZiBoYXNoVmFyWzFdICE9PSAndW5kZWZpbmVkJyA/IHRoaXMuZGVjb2RlKGhhc2hWYXJbMV0pIDogJycpOworCQkJCX0KKwkJCX0KKwkJCXRoaXMudmFycy5sYXN0X2hhc2hfbG9hZGVkID0gbmV3X2hhc2g7CisJCX0KKwkJcmV0dXJuIHRoaXMudmFycy5jdXJyZW50OworCX0sCisJLy8gZW5jb2RlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgaW5wdXQgc3RyaW5nOyB1c2UgZW5jb2RlVVJJQ29tcG9uZW50KCkgdG8gZW5jb2RlIGFzIHRoYXQgb25lIGlzIGZhc3QgYW5kIGVuc3VyZXMgcHJvcGVyIFVuaWNvZGUgaGFuZGxpbmcgYXMgd2VsbDogYm9udXMhCisJZW5jb2RlOiBmdW5jdGlvbihzKSB7CisJCXMgPSBlbmNvZGVVUklDb21wb25lbnQocyk7CisJCS8vIEJVVCEgYnJvd3NlcnMgdGFrZSB0aGluZ3MgbGlrZSAnJTI2JyBpbiB0aGUgVVJMIGFueXdoZXJlIGFuZCB0cmFuc2xhdGUgaXQgdG8gJyYnIGJlZm9yZSB3ZSBnZXQgb3VyIGhhbmRzIG9uIHRoZSBmcmFnbWVudCBwYXJ0LCBzbyB3ZSBuZWVkIHRvIHByZXZlbnQgdGhlIGJyb3dzZXJzIGZyb20gZG9pbmcgdGhpczoKKwkJcyA9IHMucmVwbGFjZSgvJS9nLCAnJCcpOyAvLyB3ZSBjYW4gZG8gdGhpcyBzYWZlbHkgYXMgZW5jb2RlVVJJQ29tcG9uZW50KCkgd2lsbCBoYXZlIGVuY29kZWQgYW55ICckJyBpbiB0aGUgb3JpZ2luYWwgc3RyaW5nIQorCQlyZXR1cm4gczsKKwl9LAorCWRlY29kZTogZnVuY3Rpb24ocykgeworCQlzID0gcy5yZXBsYWNlKC9cJC9nLCAnJScpOworCQlzID0gZGVjb2RlVVJJQ29tcG9uZW50KHMpOworCQlyZXR1cm4gczsKKwl9LAorCWNsZWFyOiBmdW5jdGlvbigpIHsKKwkJdGhpcy52YXJzLmxhc3RfaGFzaF9zYXZlZCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gIiNfIjsKKwkJLy93aW5kb3cubG9jYXRpb24uaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoIC8jLiokLywgIiIpOworCQlyZXR1cm4gZmFsc2U7CisJfSwKKwlnZXQ6IGZ1bmN0aW9uKGtleSkgeworCQl0aGlzLmxvYWQoKTsKKwkJcmV0dXJuICh0aGlzLnZhcnMuY3VycmVudC5oYXNPd25Qcm9wZXJ0eShrZXkpID8gdGhpcy52YXJzLmN1cnJlbnRba2V5XSA6IG51bGwpOworCX0sCisJc2V0OiBmdW5jdGlvbihzZXQpIHsKKwkJdmFyIGtleTsKKworCQkvL2lmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS5sb2cpIGNvbnNvbGUubG9nKCdzYXZlZEhpc3RvcnknKTsKKwkJdGhpcy5sb2FkKCk7CisKKwkJaWYgKHR5cGVvZiBzZXQgIT09ICdvYmplY3QnKSB7CisJCQl2YXIgc2V0U3BsaXQgPSBzZXQuc3BsaXQoJz0nKTsKKwkJCXNldCA9IHt9OworCQkJLy8gYmUgYXdhcmUgdGhhdCB0aGUgX3ZhbHVlXyBvZiB0aGUga2V5LCB2YWx1ZSBwYWlyIGNhbiBoYXZlIGFuIGVtYmVkZGVkICc9JyAob3IgbW9yZSkgaXRzZWxmOgorCQkJa2V5ID0gc2V0U3BsaXQuc2hpZnQoKTsKKwkJCXZhciB2YWx1ZSA9IHNldFNwbGl0LmpvaW4oJz0nKTsKKwkJCXNldFtrZXldID0gdmFsdWU7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBkbyBub3QgZGFtYWdlIHRoZSBzZXQgcGFzc2VkIGluIGFzIGEgcGFyYW1ldGVyCisJCQlzZXQgPSB0aGlzLmhlbHBlcnMuY2xvbmVPYmplY3Qoc2V0KTsKKwkJfQorCisJCS8vIHZhcgorCQl2YXIgaGFzaFN0cmluZyA9ICcnOworCQl2YXIgc2VwID0gJyMnOworCisJCS8vIGNoZWNrIGZvciBjaGFuZ2UgaW4gZXhpc3RpbmcgdmFycworCQlmb3Ioa2V5IGluIHRoaXMudmFycy5jdXJyZW50KSB7CisJCQlpZiAodGhpcy52YXJzLmN1cnJlbnQuaGFzT3duUHJvcGVydHkoa2V5KSkgeworCQkJCWlmIChzZXQuaGFzT3duUHJvcGVydHkoa2V5KSkgeworCQkJCQloYXNoU3RyaW5nICs9IHNlcCt0aGlzLmVuY29kZShrZXkpKyc9Jyt0aGlzLmVuY29kZShzZXRba2V5XSk7CisJCQkJCWRlbGV0ZSBzZXRba2V5XTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCWhhc2hTdHJpbmcgKz0gc2VwK3RoaXMuZW5jb2RlKGtleSkrJz0nK3RoaXMuZW5jb2RlKHRoaXMudmFycy5jdXJyZW50W2tleV0pOworCQkJCX0KKwkJCQlzZXAgPSAnJic7CisJCQl9CisJCX0KKworCQkvLyBhZGQgbmV3IHZhcnMKKwkJZm9yKGtleSBpbiBzZXQpIHsKKwkJCWlmIChzZXQuaGFzT3duUHJvcGVydHkoa2V5KSkgeworCQkJCWhhc2hTdHJpbmcgKz0gc2VwK3RoaXMuZW5jb2RlKGtleSkrJz0nK3RoaXMuZW5jb2RlKHNldFtrZXldKTsKKwkJCQlzZXAgPSAnJic7CisJCQl9CisJCX0KKwkJdGhpcy52YXJzLmxhc3RfaGFzaF9zYXZlZCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gaGFzaFN0cmluZzsKKwkJcmV0dXJuIHRoaXMubG9hZCgpOworCX0sCisJcmVtb3ZlOiBmdW5jdGlvbihyZW1vdmUpIHsKKwkJdmFyIHJlbW92ZXM7CisJCXZhciBpOworCQl2YXIga2V5OworCisJCXRoaXMubG9hZCgpOworCisJCWlmICh0eXBlb2YgcmVtb3ZlICE9PSAnb2JqZWN0JykgeworCQkJcmVtb3ZlcyA9IFtyZW1vdmVdOworCQl9IGVsc2UgeworCQkJcmVtb3ZlcyA9IHJlbW92ZTsKKwkJfQorCisJCS8vIHZhcgorCQl2YXIgaGFzaFN0cmluZyA9ICcnOworCQl2YXIgc2VwID0gJyMnOworCisJCWZvciAoaSA9IDA7IGkgPCByZW1vdmVzLmxlbmd0aDsgaSsrKSB7CisJCQlpZiAodGhpcy52YXJzLmN1cnJlbnQuaGFzT3duUHJvcGVydHkocmVtb3Zlc1tpXSkpIHsKKwkJCQlkZWxldGUgdGhpcy52YXJzLmN1cnJlbnRbcmVtb3Zlc1tpXV07CisJCQl9CisJCX0KKworCQkvLyBjcmVhdGUgbmV3IGhhc2ggc3RyaW5nCisJCWZvcihrZXkgaW4gdGhpcy52YXJzLmN1cnJlbnQpIHsKKwkJCWlmICh0aGlzLnZhcnMuY3VycmVudC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisJCQkJaGFzaFN0cmluZyArPSBzZXArdGhpcy5lbmNvZGUoa2V5KSsnPScrdGhpcy5lbmNvZGUodGhpcy52YXJzLmN1cnJlbnRba2V5XSk7CisJCQkJc2VwID0gJyYnOworCQkJfQorCQl9CisJCXRoaXMudmFycy5sYXN0X2hhc2hfc2F2ZWQgPSB3aW5kb3cubG9jYXRpb24uaGFzaCA9IGhhc2hTdHJpbmc7CisKKwkJdGhpcy5sb2FkKCk7CisJCS8vIGEgYml0IG9kZDogdGhpcyBvbmUgcmV0dXJucyB0aGUgT0xEIHNldCwgd2hpbGUgc2V0KCkgcmV0dXJucyB0aGUgVVBEQVRFRCBzZXQuLi4KKwkJcmV0dXJuIHRoaXMudmFycy5jdXJyZW50OworCX0sCisJc2V0Q2hhbmdlZFZhcnM6IGZ1bmN0aW9uKCkgeworCQl2YXIgY2hhbmdlX2NvdW50OworCQl2YXIga2V5OworCQl2YXIgb2xkVmFycyA9IHRoaXMuaGVscGVycy5jbG9uZU9iamVjdCh0aGlzLnZhcnMub2xkKTsKKwkJdGhpcy52YXJzLmNoYW5nZWQgPSB0aGlzLmhlbHBlcnMuY2xvbmVPYmplY3QodGhpcy52YXJzLmN1cnJlbnQpOworCisJCS8vIGNoZWNrIGZvciBjaGFuZ2VkIHZhcnMKKwkJY2hhbmdlX2NvdW50ID0gMDsKKwkJZm9yIChrZXkgaW4gdGhpcy52YXJzLmNoYW5nZWQpIHsKKwkJCWlmICh0aGlzLnZhcnMuY2hhbmdlZC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisJCQkJaWYgKG9sZFZhcnMuaGFzT3duUHJvcGVydHkoa2V5KSkgeworCQkJCQlpZiAob2xkVmFyc1trZXldID09PSB0aGlzLnZhcnMuY2hhbmdlZFtrZXldKSB7CisJCQkJCQljaGFuZ2VfY291bnQtLTsgICAgICAgICAvLyBmYXN0ZXI/L3NpbXBsZXIgdGhhbiBtdWx0aXBsZSAnZWxzZScgYnJhbmNoZXMganVzdCB0byB0cmFjayBjaGFuZ2VfY291bnQKKwkJCQkJCWRlbGV0ZSB0aGlzLnZhcnMuY2hhbmdlZFtrZXldOworCQkJCQl9CisJCQkJCWRlbGV0ZSBvbGRWYXJzW2tleV07CisJCQkJfQorCQkJCWNoYW5nZV9jb3VudCsrOworCQkJfQorCQl9CisJCS8vIG1lcmdlIHRoZSByZXN0IG9mIHRoaXMudmFycy5vbGQgd2l0aCB0aGUgY2hhbmdlZFZhcnMKKwkJZm9yIChrZXkgaW4gb2xkVmFycykgeworCQkJaWYgKG9sZFZhcnMuaGFzT3duUHJvcGVydHkoa2V5KSAvKiAmJiAhdGhpcy52YXJzLmNoYW5nZWQuaGFzT3duUHJvcGVydHkoa2V5KSAqLyApIHsKKwkJCQl0aGlzLnZhcnMuY2hhbmdlZFtrZXldID0gb2xkVmFyc1trZXldOworCQkJCWNoYW5nZV9jb3VudCsrOworCQkJfQorCQl9CisJCXRoaXMudmFycy5jaGFuZ2VfY291bnQgPSBjaGFuZ2VfY291bnQ7CisJfSwKKwlhZGRMaXN0ZW5lcjogZnVuY3Rpb24obGlzdGVuZXIsIGNhbGxBbHdheXMsIGJpbmQsIGZyZXEpIHsgLy8gdXNlIHRoZSByZXR1cm5lZCBpbnRlcnZhbCBJRCBmb3IgcmVtb3ZlTGlzdGVuZXIKKworCQl0aGlzLmxvYWQoKTsKKwkJdGhpcy52YXJzLmhhc2hfY2hhbmdlZCA9IGZhbHNlOworCQl0aGlzLnZhcnMuZm9yZWlnbl9oYXNoX2NoYW5nZSA9IGZhbHNlOworCQl0aGlzLnZhcnMub2xkID0gdGhpcy5oZWxwZXJzLmNsb25lT2JqZWN0KHRoaXMudmFycy5jdXJyZW50KTsKKworCQl0aGlzLnBvbGxIYXNoID0gZnVuY3Rpb24oKSB7CisJCQl2YXIga2V5OworCisJCQl0aGlzLmxvYWQoKTsgICAgLy8gc2lkZSBlZmZlY3Q6IGFuIGltbWVkaWF0ZSBjaGVjayAob25lIG1vcmUpIHRvIHNlZSB3aGV0aGVyIHRoZSBoYXNoIGhhcyBjaGFuZ2VkIGJ5IHVzIG9yIG90aGVycworCisJCQkvLyBhbmQgbWFrZSBzdXJlIGxpc3RlbmVyIGFsd2F5cyBmaXJlcyB3aG4gY2FsbEFsd2F5cz09RkFMU0UgYW5kIHVzZXIgaXMgZ29pbmcgYmFjayZmb3J0aCBpbiB0aGUgYnJvd3NlciBoaXN0b3J5IChvbmUgb3IgbW9yZSBoaXN0b3J5IGVudHJpZXMgbWF5IG1hdGNoICAgdGhpcy52YXJzLmxhc3RfaGFzaF9zYXZlZCAhKQorCQkJdGhpcy52YXJzLmxhc3RfaGFzaF9zYXZlZCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoOworCisJCQlpZiAodGhpcy52YXJzLmhhc2hfY2hhbmdlZCkgeworCQkJCXRoaXMuc2V0Q2hhbmdlZFZhcnMoKTsKKwkJCQlpZiAoY2FsbEFsd2F5cyB8fCB0aGlzLnZhcnMuZm9yZWlnbl9oYXNoX2NoYW5nZSkgeworCQkJCQkvLyB2YXIKKwkJCQkJLyoKKwkJCQkJaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLmxvZykgY29uc29sZS5sb2coJy0tLS0tJyk7CisJCQkJCWlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS5sb2cpIGNvbnNvbGUubG9nKHRoaXMudmFycy5vbGQpOworCQkJCQlpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUubG9nKSBjb25zb2xlLmxvZyh0aGlzLnZhcnMuY2hhbmdlZCk7CisJCQkJCSovCisJCQkJCS8vIGNhbGwgdGhlIGdpdmVuIGxpc3RlbmVyIGZ1bmN0aW9uCisJCQkJCWlmICh0eXBlb2YgbGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHsKKwkJCQkJCWxpc3RlbmVyLmFwcGx5KGJpbmQsIFt0aGlzLnZhcnNdKTsKKwkJCQkJfQorCisJCQkJCS8vIG9ubHkgcmVzZXQgdGhlICdvbGQnIGFycmF5LCBpLmUuIGVmZmVjdCB0aGUgJy5jaGFuZ2VkJyBzZXQsIHdoZW4gdGhlIGxpc3RlbmVyIHdhcyBhY3R1YWxseSAodG8gYmUpIGludm9rZWQuCisJCQkJCS8vCisJCQkJCS8vIGFsc28gcmVzZXQgdGhlICdjaGFuZ2VkJyBtYXJrZXJzIHNvIGNoYW5nZXMgYXBwbGllZCBpbnNpZGUgdGhlIGxpc3RlbmVyIGRvbid0ICdyZWN1cnNpdmVseScgdHJpZ2dlciB0aGUgbGlzdGVuZXI6CisJCQkJCXRoaXMubG9hZCgpOworCQkJCQl0aGlzLnZhcnMuaGFzaF9jaGFuZ2VkID0gZmFsc2U7CisJCQkJCXRoaXMudmFycy5mb3JlaWduX2hhc2hfY2hhbmdlID0gZmFsc2U7CisKKwkJCQkJLyoKKwkJCQkJaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLmxvZykgY29uc29sZS5sb2coJy0tLS0tJyk7CisJCQkJCWlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS5sb2cpIGNvbnNvbGUubG9nKHRoaXMudmFycy5jdXJyZW50KTsKKwkJCQkJaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLmxvZykgY29uc29sZS5sb2codGhpcy52YXJzLm9sZCk7CisJCQkJCWlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS5sb2cpIGNvbnNvbGUubG9nKHRoaXMudmFycy5jaGFuZ2VkKTsKKwkJCQkJKi8KKwkJCQkJdGhpcy52YXJzLm9sZCA9IG5ldyB0aGlzLnZhcnMuY3VycmVudC5jb25zdHJ1Y3RvcigpOworCQkJCQlmb3IgKGtleSBpbiB0aGlzLnZhcnMuY3VycmVudCkgeworCQkJCQkJaWYgKHRoaXMudmFycy5jdXJyZW50Lmhhc093blByb3BlcnR5KGtleSkpIHsKKwkJCQkJCQl0aGlzLnZhcnMub2xkW2tleV0gPSB0aGlzLnZhcnMuY3VycmVudFtrZXldOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJCXZhciBzZWxmID0gdGhpczsKKwkJcmV0dXJuIHNldEludGVydmFsKGZ1bmN0aW9uKCkgeworCQkJc2VsZi5wb2xsSGFzaCgpOworCQl9LCAoZnJlcSB8fCA1MDApKTsKKwl9LAorCXJlbW92ZUxpc3RlbmVyOiBmdW5jdGlvbihsaXN0ZW5lcklEKSB7IC8vIHVzZSB0aGUgaW50ZXJ2YWwgSUQgcmV0dXJuZWQgYnkgYWRkTGlzdGVuZXIKKwkJZGVsZXRlIHRoaXMucG9sbEhhc2g7CisJCXJldHVybiBjbGVhckludGVydmFsKGxpc3RlbmVySUQpOworCX0sCisJaGVscGVyczoKKwl7CisJCS8vIGVxdi4gb2YgbW9vdG9vbHMgT2JqZWN0LmNsb25lKCk6CisJCWNsb25lT2JqZWN0OiBmdW5jdGlvbihvYmopIHsKKwkJCXZhciBrZXk7CisJCQl2YXIgcnYgPSBuZXcgb2JqLmNvbnN0cnVjdG9yKCk7CisJCQlmb3IgKGtleSBpbiBvYmopIHsKKwkJCQlpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHsKKwkJCQkJcnZba2V5XSA9IG9ialtrZXldOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBydjsKKwkJfQorCX0KK307CisKKworLyogc2V0dGluZ3MgZm9yIGpzTGludDogdW5kZWY6IHRydWUsIGJyb3dzZXI6IHRydWUsIGluZGVudDogNCAqLworCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL2pzL21pbGtib3gvY3NzL2Nsb3NlLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvanMvbWlsa2JveC9jc3MvY2xvc2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNzIwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL2pzL21pbGtib3gvY3NzL2Nsb3NlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL2pzL21pbGtib3gvY3NzL2xvYWRpbmcuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9qcy9taWxrYm94L2Nzcy9sb2FkaW5nLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2RkNTg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9qcy9taWxrYm94L2Nzcy9sb2FkaW5nLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL2pzL21pbGtib3gvY3NzL2xvYWRpbmcub2xkLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvanMvbWlsa2JveC9jc3MvbG9hZGluZy5vbGQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NjRkNWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL2pzL21pbGtib3gvY3NzL2xvYWRpbmcub2xkLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL2pzL21pbGtib3gvY3NzL21pbGtib3guY3NzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9qcy9taWxrYm94L2Nzcy9taWxrYm94LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmI2MzY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9qcy9taWxrYm94L2Nzcy9taWxrYm94LmNzcwpAQCAtMCwwICsxLDEwNiBAQAorLyogTUlMS0JPWCBDU1MgKi8KKworI21ib3gtb3ZlcmxheXsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOyAvKiBzZXQgdGhlIE1pbGtib3ggb3ZlcmxheSBjb2xvciAvLyBvcGFjaXR5OiBzZWUgdGhlIGpzIG9wdGlvbnMgKi8KKwl6LWluZGV4OjUwMDAwOworCWN1cnNvcjogcG9pbnRlcjsKK30KKworLyogTWFpbiBib3ggKi8KKyNtYm94LW1haW5ib3h7CisJLyogRm9yIGRlZmF1bHQgd2lkdGggYW5kIGhlaWdodCwgc2VlIHRoZSBqcyBvcHRpb25zICovCisJdG9wOjEwJTsvKiBvdmVyd3JpdHRlbiBpbiB0aGUganMgb3B0aW9ucyB0byBwcm9wZXJseSBwb3NpdGlvbiB0aGUgbWFpbiBib3ggd2hlbiBhY3RpdmF0ZWQgaW4gYSBzY3JvbGxlZCB3aW5kb3cgKi8KKwliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOy8qIHNldCB0aGUgbWFpbiBib3ggYmFja2dyb3VuZCBjb2xvciAqLworCWJvcmRlcjogNXB4IHNvbGlkICNmZmY7Lyogc2V0IHRoZSBtYWluIGJveCBib3JkZXIgKi8gCisJcGFkZGluZzo1cHg7Lyogc2V0IHRoZSBtYWluIGJveCBwYWRkaW5nICovCit9CisKKy8qIFdoZXJlIHRoZSBmaWxlcyBhY3R1YWxseSBhcmUgaW5qZWN0ZWQgKi8KKyNtYm94LWZpbGVib3h7IG1hcmdpbjowOyBwYWRkaW5nOjA7IGJvcmRlcjpub25lOyBvdmVyZmxvdzpoaWRkZW47IH0KKworI21ib3gtZmlsZWJveCBpbWcsCisjbWJveC1maWxlYm94IGlmcmFtZSwKKyNtYm94LWZpbGVib3ggc3dmeworCWJvcmRlcjpub25lOwkKK30KKworLyp0aGlzIGNsYXNzIGlzIGZvciBzdHlsaW5nIHRoZSBpbm5lciBmaWxlIGJveCovCisvKnRoZXNlIHN0eWxlcyB3aWxsIGJlIHZpc2libGUgYWZ0ZXIgdGhlIGZpcnN0IGlzIGxvYWRlZCAqLworLm1ib3gtZmlsZWJveC1kZWNvcmF0aW9uc3sKKwlib3JkZXI6bm9uZTsKKwlwYWRkaW5nOjA7Cit9CisKKy8qICoqKiBCT1RUT00gKioqICovCisKKy8qIGNvbnRhaW5lciBmb3IgY29udHJvbHMgYW5kIGNhcHRpb24gKi8KKyNtYm94LWJvdHRvbSB7IAorCS8qIHNldCB0ZXh0IG9wdGlvbnMgKi8KKwlmb250LWZhbWlseTogQXJpYWwsIFZlcmRhbmEsIEdlbmV2YSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOworCWZvbnQtc2l6ZTogMTJweDsKKwljb2xvcjogIzY1NjU2NTsKKwlsaW5lLWhlaWdodDogMS40ZW07CisJdGV4dC1hbGlnbjogbGVmdDsKKwlwYWRkaW5nLXRvcDo4cHg7CisJbWFyZ2luOjA7Cit9CisKKy8qIGNvbnRyb2xzL25hdmlnYXRpb24gKi8KKy8qIGJlIGNhcmVmdWwgaWYgeW91IGNoYW5nZSBidXR0b25zIGRpbWVuc2lvbnMgKi8KKworI21ib3gtY29udHJvbHN7CisJLypiYWNrZ3JvdW5kLWNvbG9yOiMwZjA7Ki8KKwlmbG9hdDpyaWdodDsKKwl3aWR0aDoyN3B4OworCXBhZGRpbmctdG9wOjNweDsKKwlib3JkZXItbGVmdDoxcHggc29saWQgIzljOWM5YzsvKiBzZXQgbmF2IGJvcmRlciAqLworfQorCisjbWJveC1jb3VudHsgCisJb3ZlcmZsb3c6aGlkZGVuOworCXBhZGRpbmctdG9wOjFweDsKKwlmbG9hdDpyaWdodDsKKwl0ZXh0LWFsaWduOnJpZ2h0OworCWZvbnQtc2l6ZTo5cHg7IC8qIGNvdW50IGZvbnQgc2l6ZSAqLworfQorCisjbWJveC1jbG9zZSwKKyNtYm94LXByZXYsCisjbWJveC1uZXh0LAorI21ib3gtcGxheXBhdXNleworCWZsb2F0OnJpZ2h0OworCWhlaWdodDoxOXB4OworfQorCisjbWJveC1wcmV2LCNtYm94LW5leHR7IHdpZHRoOjE1cHg7IH0KKyNtYm94LXByZXZ7IGJhY2tncm91bmQ6IHVybChwcmV2LmdpZikgbm8tcmVwZWF0OyB9LyogSU1BR0U6IHByZXYgKi8KKyNtYm94LW5leHR7IGJhY2tncm91bmQ6IHVybChuZXh0LmdpZikgbm8tcmVwZWF0OyB9LyogSU1BR0U6IG5leHQgKi8KKworI21ib3gtcGxheXBhdXNleyB3aWR0aDoxM3B4OyB9CisjbWJveC1wbGF5cGF1c2V7IGJhY2tncm91bmQ6IHVybChwbGF5LXBhdXNlLmdpZikgbm8tcmVwZWF0OyB9LyogSU1BR0U6IHByZXYgKi8KKworI21ib3gtY2xvc2V7CisJd2lkdGg6MTdweDsKKwliYWNrZ3JvdW5kOnVybChjbG9zZS5naWYpIG5vLXJlcGVhdDsvKiBJTUFHRTogY2xvc2UgKi8KK30KKworI21ib3gtcHJldjpob3ZlciwKKyNtYm94LW5leHQ6aG92ZXIsCisjbWJveC1jbG9zZTpob3ZlciwKKyNtYm94LXBsYXlwYXVzZTpob3ZlcnsKKwliYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTIycHg7Cit9CisKKy8qIGRlc2NyaXB0aW9uICovCisjbWJveC1jYXB0aW9ueworCS8qYmFja2dyb3VuZC1jb2xvcjojZjAwOyovCisJbWFyZ2luLXJpZ2h0OjI3cHg7CisJcGFkZGluZzowcHggMTBweCAwIDA7CisJZm9udC13ZWlnaHQ6IG5vcm1hbDsKKwl0ZXh0LWFsaWduOmp1c3RpZnk7CisJb3ZlcmZsb3cteDogaGlkZGVuOyAgLyogbWFrZSBzdXJlIHRoZSBjb250cm9scyBhdCB0aGUgcmlnaHQgcmVtYWluIGFjY2Vzc2libGUsIGV2ZW4gZm9yIHNtYWxsIGltYWdlcyB3aXRoIHZlcnkgbGFyZ2UgZmlsZW5hbWVzOiB0aG9zZSB3b3VsZCBvdGhlcndpc2Ugb3ZlcmxhcCB0aG9zZSBjb250cm9scyBhdCByaWdodCAqLworfQorCisubWJveC1sb2FkaW5neyBiYWNrZ3JvdW5kOnVybChsb2FkaW5nLmdpZikgbm8tcmVwZWF0IGNlbnRlcjsgfS8qIElNQUdFOiBsb2FkaW5nIGdpZiAqLworLm1ib3gtcmVzZXR7IGNsZWFyOmJvdGg7IGhlaWdodDowOyBtYXJnaW46MDsgcGFkZGluZzowOyBmb250LXNpemU6MDsgb3ZlcmZsb3c6aGlkZGVuOyB9CisKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvanMvbWlsa2JveC9jc3MvbmV4dC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL2pzL21pbGtib3gvY3NzL25leHQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NDgzNWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL2pzL21pbGtib3gvY3NzL25leHQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvanMvbWlsa2JveC9jc3MvcGxheS1wYXVzZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL2pzL21pbGtib3gvY3NzL3BsYXktcGF1c2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMDFiNjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL2pzL21pbGtib3gvY3NzL3BsYXktcGF1c2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvanMvbWlsa2JveC9jc3MvcHJldi5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL2pzL21pbGtib3gvY3NzL3ByZXYuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MzExOTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvQXNzZXRzL2pzL21pbGtib3gvY3NzL3ByZXYuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvanMvbWlsa2JveC9taWxrYm94LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0Fzc2V0cy9qcy9taWxrYm94L21pbGtib3guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4Yjk3MwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Bc3NldHMvanMvbWlsa2JveC9taWxrYm94LmpzCkBAIC0wLDAgKzEsMTE4NiBAQAorLyoKKwlNaWxrYm94IHYzLjAuMyAtIHJlcXVpcmVkOiBtb290b29scy5qcyB2MS4zIGNvcmUgKyBtb3JlIChzZWUgdGhlIHJlbGF0aXZlIGpzIGZpbGUgZm9yIGRldGFpbHMgYWJvdXQgdXNlZCBtb2R1bGVzKQorCisJYnkgTHVjYSBSZWdoZWxsaW4gKGh0dHA6Ly93d3cucmVnaGVsbGluLmNvbSkgU2VwdGVtYmVyIDIwMTEsIE1JVC1zdHlsZSBsaWNlbnNlLgorCUluc3BpcmF0aW9uIExva2VzaCBEaGFrYXIgKGh0dHA6Ly93d3cubG9rZXNoZGhha2FyLmNvbS9wcm9qZWN0cy9saWdodGJveDIvKQorCUFORCBPRiBDT1VSU0UsIFNQRUNJQUwgVEhBTktTIFRPIFRIRSBNT09UT09MUyBERVZFTE9QRVJTIEFORCBUSEUgT1RIRVIgREVWRUxPUEVSUyBIRUxQSU5HIEFMTCBBUk9VTkQgVEhFIFdPUkxECisqLworCisKKy8vQ2xhc3M6IE1pbGtib3ggKHNpbmdsZXRvbikKKyhmdW5jdGlvbigpeworCit2YXIgbWlsa2JveF9zaW5nbGV0b24gPSBudWxsOworCit0aGlzLk1pbGtib3ggPSBuZXcgQ2xhc3MoeworCisJSW1wbGVtZW50czpbT3B0aW9ucyxFdmVudHNdLAorCisJb3B0aW9uczp7Ly9zZXQgYWxsIHRoZSBvcHRpb25zIGhlcmUKKwkJb3ZlcmxheU9wYWNpdHk6MC43LAorCQltYXJnaW5Ub3A6NTAsCisJCWluaXRpYWxXaWR0aDoyNTAsCisJCWluaXRpYWxIZWlnaHQ6MjUwLAorCQlmaWxlYm94Qm9yZGVyV2lkdGg6JzBweCcsCisJCWZpbGVib3hCb3JkZXJDb2xvcjonIzAwMDAwMCcsCisJCWZpbGVib3hQYWRkaW5nOicwcHgnLAorCQlyZXNpemVEdXJhdGlvbjouNSwKKwkJcmVzaXplVHJhbnNpdGlvbjonc2luZTppbjpvdXQnLC8qZnVuY3Rpb24gKGV4LiBUcmFuc2l0aW9ucy5TaW5lLmVhc2VJbikgb3Igc3RyaW5nIChleC4gJ2JvdW5jZTpvdXQnKSovCisJCWF1dG9QbGF5OmZhbHNlLAorCQlhdXRvUGxheURlbGF5OjcsCisJCXJlbW92ZVRpdGxlOnRydWUsCisJCWF1dG9TaXplOnRydWUsCisJCWF1dG9TaXplTWF4SGVpZ2h0OjAsLy9vbmx5IGlmIGF1dG9TaXplPT10cnVlCisJCWNlbnRlcmVkOmZhbHNlLAorCQlpbWFnZU9mVGV4dDonb2YnLAorCQlvblhtbEdhbGxlcmllczpmdW5jdGlvbigpe30sCisJCW9uQ2xvc2VkOmZ1bmN0aW9uKCl7fSwKKwkJb25GaWxlUmVhZHk6ZnVuY3Rpb24oKXt9LAorICAgIHpJbmRleDogNTAwMDEsCisJfSwKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpeworCQlpZiAobWlsa2JveF9zaW5nbGV0b24pIHJldHVybiBtaWxrYm94X3NpbmdsZXRvbjsKKwkJbWlsa2JveF9zaW5nbGV0b24gPSB0aGlzOworCisJCXRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTsKKwkJdGhpcy5hdXRvUGxheUJrdXAgPSB7IGF1dG9QbGF5RGVsYXk6dGhpcy5vcHRpb25zLmF1dG9QbGF5RGVsYXksIGF1dG9QbGF5OnRoaXMub3B0aW9ucy5hdXRvUGxheSB9OworCQl0aGlzLmZ1bGxPcHRpb25zQmt1cCA9IHt9OworCQl0aGlzLmdhbGxlcmllcyA9IFtdOworCQl0aGlzLmZvcm1FbGVtZW50cyA9IFtdOworCQl0aGlzLmFjdGl2YXRlZDsKKwkJdGhpcy5idXN5ID0gZmFsc2U7CisJCXRoaXMucGF1c2VkID0gZmFsc2U7CisJCXRoaXMuY2xvc2VkID0gdHJ1ZTsKKwkJdGhpcy5pbnRJZDsKKwkJdGhpcy5sb2FkQ2hlY2tlcklkOworCQl0aGlzLmV4dGVybmFsR2FsbGVyaWVzID0gW107CisJCXRoaXMuc2luZ2xlUGFnZUxpbmtJZCA9IDA7CisJCQorCQl0aGlzLmN1cnJlbnRJbmRleDsKKwkJdGhpcy5jdXJyZW50R2FsbGVyeTsKKwkJdGhpcy5maWxlUmVhZHk7CisJCXRoaXMubG9hZGVkSW1hZ2VzID0gW107CisJCXRoaXMuY3VycmVudEZpbGU7CisJCXRoaXMub3B0aW9uc19ia3VwOworCQkKKwkJdGhpcy5kaXNwbGF5OworCQkKKwkJdGhpcy5nZXRQYWdlR2FsbGVyaWVzKCk7CisJCWlmKHRoaXMuZ2FsbGVyaWVzLmxlbmd0aCAhPSAwKXsgdGhpcy5wcmVwYXJlKHRydWUpOyB9CisJfSwKKwkKKwlwcmVwYXJlOmZ1bmN0aW9uKGNoZWNrRm9ybSl7CisJCWlmKGNoZWNrRm9ybSl7IHRoaXMuY2hlY2tGb3JtRWxlbWVudHMoKTsgfQorCQl0aGlzLnByZXBhcmVIVE1MKCk7CisJCXRoaXMucHJlcGFyZUV2ZW50TGlzdGVuZXJzKCk7CisJCXRoaXMuYWN0aXZhdGVkID0gdHJ1ZTsKKwl9LAorCQorCS8vdXRpbGl0eQorCW9wZW46ZnVuY3Rpb24oZ2FsbGVyeSxpbmRleCl7CisJCXZhciBpOworCQkKKwkJaWYoIXRoaXMuYWN0aXZhdGVkKXsgdGhpcy5wcmVwYXJlKHRydWUpOyB9CisJCQkJCisJCXZhciBnID0gKGluc3RhbmNlT2YoZ2FsbGVyeSxNaWxrYm94R2FsbGVyeSkpID8gZ2FsbGVyeSA6IHRoaXMuZ2V0R2FsbGVyeShnYWxsZXJ5KTsKKwkJaWYoIWcpIHJldHVybiBmYWxzZTsKKyAJCQorIAkJLy8gW2lfYV0gd2hlbiAnaW5kZXgnIGlzIG5vdCBhbiBudW1iZXIsIGl0IG1heSBiZSBhIGVsZW1lbnQgcmVmZXJlbmNlIG9yIHN0cmluZzogcmVzb2x2ZSBzdWNoIGluZGV4ZXMgdG9vCisJCWlmICh0eXBlT2YoaW5kZXgpICE9PSAnbnVtYmVyJykgeworCQkJaSA9IGcuZ2V0X2luZGV4X29mKGluZGV4KTsKKwkJCWlmKGkgIT09IC0xKXsgaW5kZXggPSBpOyB9CisJCX0KKworCQlpID0gcGFyc2VJbnQoaW5kZXgsIDEwKTsKKwkJaWYoaXNOYU4oaSkpeyBpID0gMDsgfQorCisJCXRoaXMuY2xvc2VkID0gZmFsc2U7CisJCXZhciBpdGVtID0gZy5nZXRfaXRlbShpKTsKKwkJaWYoIWl0ZW0pIHJldHVybiBmYWxzZTsKKwkJCisJCXRoaXMuY3VycmVudEdhbGxlcnkgPSBnOworCQl0aGlzLmN1cnJlbnRJbmRleCA9IGk7CisJCQkJCisJCXRoaXMuaGlkZUZvcm1FbGVtZW50cygpOworCQkKKwkJdGhpcy5kaXNwbGF5LnNldF9tb2RlKHRoaXMuY3VycmVudEdhbGxlcnkudHlwZSk7CisJCXRoaXMuZGlzcGxheS5hcHBlYXIoKTsKKwkJCisJCQorCQlpZih0aGlzLm9wdGlvbnMuYXV0b1BsYXkgfHwgZy5vcHRpb25zLmF1dG9wbGF5KXsgdGhpcy5zdGFydEF1dG9QbGF5KHRydWUpOyB9CisKKwkJdGhpcy5sb2FkRmlsZShpdGVtLHRoaXMuZ2V0UHJlbG9hZHMoKSk7CisJCXJldHVybiB0cnVlOworCX0sCisJCisJCisJLy91dGlsaXR5CisJY2xvc2U6ZnVuY3Rpb24oaGlkZURpc3BsYXkpeworCQlpZihoaWRlRGlzcGxheSl7IHRoaXMuZGlzcGxheS5kaXNhcHBlYXIoKTsgfQorCQl0aGlzLnNob3dGb3JtRWxlbWVudHMoKTsKKwkJdGhpcy5wYXVzZUF1dG9QbGF5KCk7CisJCXRoaXMuc3RvcExvYWRpbmdDaGVjaygpOworCQl0aGlzLmN1cnJlbnRHYWxsZXJ5ID0gbnVsbDsKKwkJdGhpcy5jdXJyZW50SW5kZXggPSBudWxsOworCQl0aGlzLmN1cnJlbnRGaWxlID0gbnVsbDsKKwkJdGhpcy5idXN5ID0gZmFsc2U7CisJCXRoaXMucGF1c2VkID0gZmFsc2U7CisJCXRoaXMuZmlsZVJlYWR5ID0gZmFsc2U7CisJCXRoaXMuY2xvc2VkID0gdHJ1ZTsKKwkKKwkJdGhpcy5maXJlRXZlbnQoJ2Nsb3NlZCcpOworCX0sCisKKwlzdGFydEF1dG9QbGF5OmZ1bmN0aW9uKG9wZW5pbmcpeworCQl2YXIgZCA9IHRoaXMuY3VycmVudEdhbGxlcnkub3B0aW9ucy5hdXRvcGxheV9kZWxheSB8fCB0aGlzLm9wdGlvbnMuYXV0b1BsYXlEZWxheTsKKwkJaWYoZCA8IHRoaXMub3B0aW9ucy5yZXNpemVEdXJhdGlvbioyKXsgZCA9IHRoaXMub3B0aW9ucy5yZXNpemVEdXJhdGlvbioyIH07CisKKwkJdmFyIGYgPSBmdW5jdGlvbigpeworCQkJdGhpcy5yZW1vdmVFdmVudCgnZmlsZVJlYWR5JyxmKTsKKwkJCXRoaXMuaW50SWQgPSB0aGlzLm5hdkF1eC5wZXJpb2RpY2FsKGQqMTAwMCx0aGlzLFtudWxsLCduZXh0J10pOworCQl9CisKKwkJaWYob3BlbmluZyl7CisJCQl0aGlzLmFkZEV2ZW50KCdmaWxlUmVhZHknLGYpOworCQl9IGVsc2UgeworCQkJdGhpcy5pbnRJZCA9IHRoaXMubmF2QXV4LnBlcmlvZGljYWwoZCoxMDAwLHRoaXMsW251bGwsJ25leHQnXSk7CisJCX0KKworCQl0aGlzLnBhdXNlZCA9IGZhbHNlOworCX0sCisJCisJcGF1c2VBdXRvUGxheTpmdW5jdGlvbigpeworCQlpZih0aGlzLmludElkKXsgCisJCQljbGVhckludGVydmFsKHRoaXMuaW50SWQpOyAKKwkJCXRoaXMuaW50SWQgPSBudWxsOyAKKwkJfQorCQkKKwkJdGhpcy5wYXVzZWQgPSB0cnVlOworCX0sCisJCisJLy91dGlsaXR5CisJLy9saXN0OkFycmF5IG9mIG9iamVjdHMgb3IgYW4gb2JqZWN0ID4gWyB7IGdhbGxlcnk6J2dhbGwxJywgYXV0b3BsYXk6dHJ1ZSwgZGVsYXk6NiB9IF0KKwkvL3RvIHBlcm1hbmVudGx5IGRlZmluZSBhdXRvcGxheSBvcHRpb25zIGZvciBhbnkgZ2FsbGVyeSAKKwlzZXRBdXRvUGxheTpmdW5jdGlvbihsaXN0KXsKKwkJdmFyIGwgPSAodHlwZU9mKGxpc3QpID09ICdvYmplY3QnKSA/IFtsaXN0XSA6IGxpc3Q7CisJCWwuZWFjaChmdW5jdGlvbihpdGVtKXsKKwkJCXZhciBnID0gdGhpcy5nZXRHYWxsZXJ5KGl0ZW0uZ2FsbGVyeSk7CisJCQlpZighZyl7IHJldHVybjsgfQorCQkJdmFyIGEgPSAoaXRlbS5hdXRvcGxheSA9PSB0cnVlKSA/IGl0ZW0uYXV0b3BsYXkgOiBmYWxzZTsKKwkJCXZhciBkID0gKGl0ZW0uZGVsYXkgJiYgYSkgPyBpdGVtLmRlbGF5IDogdGhpcy5vcHRpb25zLmF1dG9QbGF5RGVsYXk7CisJCQlnLnNldE9wdGlvbnMoeyBhdXRvcGxheTphLCBhdXRvcGxheV9kZWxheTpkIH0pLnJlZnJlc2goKTsKKwkJfSx0aGlzKTsKKwl9LAorCisKKwkvL3V0aWxpdHkJCisJLy97aHJlZjonZmlsZTEuanBnJyxzaXplOid3aWR0aDo5MDAsaGVpZ2h0OjEwMCcsIHRpdGxlOid0ZXh0J30KKwkvL3Nob3cgYSBmaWxlIG9uIHRoZSBmbHkgd2l0aG91dCBnYWxsZXJ5IGZ1bmN0aW9uYWxpdGllcworCW9wZW5XaXRoRmlsZTpmdW5jdGlvbihmaWxlLCBvcHRpb25zKXsKKwkJaWYoIXRoaXMuYWN0aXZhdGVkKXsgdGhpcy5wcmVwYXJlKCk7IH0KKwkKKwkJaWYob3B0aW9ucyl7CisJCQl0aGlzLnJlZnJlc2hEaXNwbGF5KG9wdGlvbnMsdHJ1ZSk7Ly9zZXQgY3VzdG9tIG9wdGlvbnMKKwkJfQorCQkKKwkJdmFyIGcgPSBuZXcgTWlsa2JveEdhbGxlcnkoW2ZpbGVdLHsgcmVtb3ZlX3RpdGxlOnRoaXMub3B0aW9ucy5yZW1vdmVUaXRsZSB9KTsKKwkJdGhpcy5vcGVuKGcsMCk7CisJfSwKKwkKKwlnZXRQcmVsb2FkczpmdW5jdGlvbigpeworCQl2YXIgaXRlbXMgPSB0aGlzLmN1cnJlbnRHYWxsZXJ5Lml0ZW1zOworCQl2YXIgaW5kZXggPSB0aGlzLmN1cnJlbnRJbmRleDsKKwkJaWYoaXRlbXMubGVuZ3RoID09IDEpIHJldHVybiBudWxsOworCQkKKwkJdmFyIG5leHQgPSAoaW5kZXggIT0gaXRlbXMubGVuZ3RoLTEpID8gaXRlbXNbaW5kZXgrMV0gOiBpdGVtc1swXTsKKwkJdmFyIHByZXYgPSAoaW5kZXggIT0gMCkgPyBpdGVtc1tpbmRleC0xXSA6IGl0ZW1zW2l0ZW1zLmxlbmd0aC0xXTsKKwkJdmFyIHByZWxvYWRzID0gKHByZXYgPT0gbmV4dCkgPyBbcHJldl0gOiBbcHJldixuZXh0XTsgLy9pZiBnYWxsZXJ5Lmxlbmd0aCA9PSAyLCB0aGVuIHByZXYgPT0gbmV4dAorCQlyZXR1cm4gcHJlbG9hZHM7CQkJCQkKKwl9LAorCQorCS8vTE9BRElORworCWxvYWRGaWxlOmZ1bmN0aW9uKGZpbGVPYmoscHJlbG9hZHMpeworCisJCXRoaXMuZmlsZVJlYWR5ID0gZmFsc2U7CisJCXRoaXMuZGlzcGxheS5jbGVhcl9jb250ZW50KCk7CisJCXRoaXMuZGlzcGxheS5oaWRlX2JvdHRvbSgpOworCQkKKwkJaWYodGhpcy5jaGVja0ZpbGVUeXBlKGZpbGVPYmosJ3N3ZicpKXsKKwkJCXRoaXMubG9hZFN3ZihmaWxlT2JqKTsKKwkJfSBlbHNlIGlmICh0aGlzLmNoZWNrRmlsZVR5cGUoZmlsZU9iaiwnaHRtbCcpKXsKKwkJCXRoaXMubG9hZEh0bWwoZmlsZU9iaik7CisJCX0gZWxzZSB7Ly9maWxldHlwZTppbWFnZQorCQkJdGhpcy5sb2FkSW1hZ2UoZmlsZU9iaik7CisJCX0KKwkJCisJCWlmKCF0aGlzLmNoZWNrRmlsZVR5cGUoZmlsZU9iaiwnc3dmJykpIHRoaXMuc3RhcnRMb2FkaW5nQ2hlY2soKTsKKwkJaWYocHJlbG9hZHMpeyB0aGlzLnByZWxvYWRGaWxlcyhwcmVsb2Fkcyk7IH0KKwl9LAorCQorCS8vdG8gcHJldmVudCB0aGUgbG9hZGVyIHRvIHNob3cgaWYgdGhlIGZpbGUgaXMgY2FjaGVkCisJc3RhcnRMb2FkaW5nQ2hlY2s6ZnVuY3Rpb24oKXsKKwkJdmFyIHQgPSAwOworCQlpZiAoIXRoaXMubG9hZENoZWNrZXJJZCkgeworCQkgIHRoaXMubG9hZENoZWNrZXJJZCA9IChmdW5jdGlvbigpeworCQkJIHQrPTE7CisJCQkgaWYodCA+IDUpeworCQkJCWlmICh0aGlzLmxvYWRDaGVja2VySWQpIHsKKwkJCQkgIC8vIG9ubHkgc2hvdyB0aGUgbG9hZGVyIHdoZW4gdGhlIHRpbWVyIGhhcyBub3QgYmVlbiBjbGVhcmVkIHlldCEKKwkJCQkgIHRoaXMuZGlzcGxheS5zaG93X2xvYWRlcigpOworCQkJCX0KKwkJCQl0aGlzLnN0b3BMb2FkaW5nQ2hlY2soKTsKKwkJCSB9CisJCSAgfSkucGVyaW9kaWNhbCgxMDAsdGhpcyk7CisJCX0vL2VuZCBpZgorCX0sCisKKwlzdG9wTG9hZGluZ0NoZWNrOmZ1bmN0aW9uKCl7CisJCWNsZWFySW50ZXJ2YWwodGhpcy5sb2FkQ2hlY2tlcklkKTsKKwl9LAorCQorCXByZWxvYWRGaWxlczpmdW5jdGlvbihwcmVsb2Fkcyl7CisJCXByZWxvYWRzLmVhY2goZnVuY3Rpb24oZmlsZU9iaixpbmRleCl7CisJCQlpZighdGhpcy5jaGVja0ZpbGVUeXBlKGZpbGVPYmosInN3ZiIpICYmICF0aGlzLmNoZWNrRmlsZVR5cGUoZmlsZU9iaiwiaHRtbCIpKXsgCisJCQkJdGhpcy5wcmVsb2FkSW1hZ2UoZmlsZU9iai5ocmVmKTsgCisJCQl9CisJCX0sdGhpcyk7CisJfSwKKwkKKwlwcmVsb2FkSW1hZ2U6ZnVuY3Rpb24oZmlsZSl7CisJCWlmKCF0aGlzLmxvYWRlZEltYWdlcy5jb250YWlucyhmaWxlKSl7CisJCQl2YXIgaW1hZ2VBc3NldCA9IG5ldyBBc3NldC5pbWFnZShmaWxlLCB7IAorCQkJCW9uTG9hZDpmdW5jdGlvbigpeworCQkJCQl0aGlzLmxvYWRlZEltYWdlcy5wdXNoKGZpbGUpOworCQkJCX0uYmluZCh0aGlzKQorCQkJfSk7CisJCX0KKwl9LAorCisJbG9hZEltYWdlOmZ1bmN0aW9uKGZpbGVPYmopeworCQl2YXIgZmlsZSA9IGZpbGVPYmouaHJlZjsKKwkJdmFyIGltYWdlQXNzZXQgPSBuZXcgQXNzZXQuaW1hZ2UoZmlsZSwgeyAKKwkJCW9uTG9hZDpmdW5jdGlvbihpbWcpeworCQkJCWlmKCF0aGlzLmxvYWRlZEltYWdlcy5jb250YWlucyhmaWxlKSl7IHRoaXMubG9hZGVkSW1hZ2VzLnB1c2goZmlsZSk7IH07Ly9zZWUgbmV4dC9wcmV2IGV2ZW50cworCQkJCXRoaXMubG9hZENvbXBsZXRlKGltZyxmaWxlT2JqLmNhcHRpb24pOworCQkJfS5iaW5kKHRoaXMpCisJCX0pOworCX0sCisKKwlsb2FkU3dmOmZ1bmN0aW9uKGZpbGVPYmopeworCQl2YXIgc3dmT2JqID0gbmV3IFN3aWZmKGZpbGVPYmouaHJlZix7CisJCQl3aWR0aDpmaWxlT2JqLnNpemUud2lkdGgsCisJCQloZWlnaHQ6ZmlsZU9iai5zaXplLmhlaWdodCwKKwkJCXZhcnM6ZmlsZU9iai52YXJzLAorCQkJcGFyYW1zOnsgd01vZGU6J29wYXF1ZScsIHN3TGl2ZUNvbm5lY3Q6J2ZhbHNlJyB9CisJCX0pOworCQkKKwkJdGhpcy5sb2FkQ29tcGxldGUoZG9jdW1lbnQuaWQoc3dmT2JqKSxmaWxlT2JqLmNhcHRpb24pOworCX0sCisKKwlsb2FkSHRtbDpmdW5jdGlvbihmaWxlT2JqKXsKKwkJCisJCXZhciBxdWVyeSA9IChmaWxlT2JqLnZhcnMgPyAnPycgKyBPYmplY3QudG9RdWVyeVN0cmluZyhmaWxlT2JqLnZhcnMpIDogJycpOworCQl2YXIgZXh0cmFzID0gKGZpbGVPYmouZXh0cmFzID8gZmlsZU9iai5leHRyYXMgOiAnJyk7CisJCQorCQl2YXIgaUZyYW1lID0gbmV3IEVsZW1lbnQoJ2lmcmFtZScseworCQkJJ3NyYyc6ZmlsZU9iai5ocmVmK3F1ZXJ5LAorCQkJJ2ZyYW1lYm9yZGVyJzowLC8vZm9yIElFLi4uCisJCQlzdHlsZXM6eyAKKwkJCQknYm9yZGVyJzonbm9uZScKKwkJCX0KKwkJfSk7CisKKwkJaWYoZmlsZU9iai5zaXplKXsKKwkJCWlGcmFtZS5zZXQoeworCQkJCSd3aWR0aCc6ZmlsZU9iai5zaXplLndpZHRoLAorCQkJCSdoZWlnaHQnOmZpbGVPYmouc2l6ZS5oZWlnaHQKKwkJCX0pOworCQl9CisJCQorCQl0aGlzLmxvYWRDb21wbGV0ZShpRnJhbWUsZmlsZU9iai5jYXB0aW9uKTsKKwl9LC8vbG9hZEh0bWwKKworCisJLy9MT0FEIENPTVBMRVRFICoqKioqKioqLy8KKwlsb2FkQ29tcGxldGU6ZnVuY3Rpb24oZmlsZSxjYXB0aW9uKXsKKwkJCisJCWlmKHRoaXMuY2xvc2VkKSByZXR1cm47Ly9pZiBhbiBvbmxvYWQgZXZlbnQgd2VyZSBzdGlsbCBydW5uaW5nCisJCQorCQl0aGlzLmZpbGVSZWFkeSA9IHRydWU7Ly90aGUgZmlsZSBpcyBsb2FkZWQgYW5kIHJlYWR5IHRvIGJlIHNob3dlZCAoc2VlIG5leHRfcHJldl9hdXgoKSkKKwkJdGhpcy5zdG9wTG9hZGluZ0NoZWNrKCk7CisJCXRoaXMuY3VycmVudEZpbGUgPSBmaWxlOworCQl2YXIgdGltZXI7CisJCXRpbWVyID0gKGZ1bmN0aW9uKCl7CisJCQlpZih0aGlzLmRpc3BsYXkucmVhZHkpeworCQkJCWlmICh0aGlzLmN1cnJlbnRHYWxsZXJ5Lml0ZW1zICE9IG51bGwpIHsKKwkJCQkJdGhpcy5kaXNwbGF5LnNob3dfZmlsZShmaWxlLGNhcHRpb24sdGhpcy5jdXJyZW50SW5kZXgrMSx0aGlzLmN1cnJlbnRHYWxsZXJ5Lml0ZW1zLmxlbmd0aCk7CisJCQkJfQorCQkJCWNsZWFySW50ZXJ2YWwodGltZXIpOworCQkJfS8vZW5kIGlmCisJCX0pLnBlcmlvZGljYWwoMTAwLHRoaXMpOworCQkKKwkJdGhpcy5maXJlRXZlbnQoJ2ZpbGVSZWFkeScpOworCX0sLy9lbmQgbG9hZENvbXBsZXRlCisKKwljaGVja0ZpbGVUeXBlOmZ1bmN0aW9uKGZpbGUsdHlwZSl7CisJCXZhciBocmVmID0gKHR5cGVPZihmaWxlKSAhPSAnc3RyaW5nJykgPyBmaWxlLmhyZWYgOiBmaWxlOworCQl2YXIgc3BsaXR0ZWQgPSBocmVmLnNwbGl0KCc/JylbMF07CisJCXZhciByZWdleHAgPSBuZXcgUmVnRXhwKCJcLigiK3R5cGUrIikkIiwiaSIpOworCQl2YXIgdGVzdCA9IHNwbGl0dGVkLnRlc3QocmVnZXhwKTsKKwkJCisJCWlmKCF0ZXN0ICYmIHR5cGU9PSJodG1sIil7CisJCQl0ZXN0ID0gc3BsaXR0ZWQudGVzdCgvXC9cZCskLyk7CisJCX0KKwkJCisJCXJldHVybiB0ZXN0OworCX0sCisKKwkvL0dBTExFUklFUworCWdldFBhZ2VHYWxsZXJpZXM6ZnVuY3Rpb24oKXsKKwkJdmFyIG5hbWVzID0gW107CisJCXZhciBsaW5rcyA9ICQkKCdhW2RhdGEtbWlsa2JveF0nKTsKKwkJCisJCS8vY2hlY2sgbmFtZXMKKwkJbGlua3MuZWFjaChmdW5jdGlvbihsaW5rKXsKKwkJCXZhciBuYW1lID0gbGluay5nZXQoJ2RhdGEtbWlsa2JveCcpOworCQkJaWYobmFtZSA9PSAnc2luZ2xlJyl7CisJCQkJdGhpcy5nYWxsZXJpZXMucHVzaChuZXcgTWlsa2JveEdhbGxlcnkobGluayx7bmFtZTonc2luZ2xlJyt0aGlzLnNpbmdsZVBhZ2VMaW5rSWQrKywgcmVtb3ZlX3RpdGxlOnRoaXMub3B0aW9ucy5yZW1vdmVUaXRsZSB9KSk7CisJCQl9IGVsc2UgaWYoIW5hbWVzLmNvbnRhaW5zKG5hbWUpKXsKKwkJCQluYW1lcy5wdXNoKG5hbWUpOworCQkJfQorCQl9LHRoaXMpOworCQkJCQorCQluYW1lcy5lYWNoKGZ1bmN0aW9uKG5hbWUpeworCQkJdGhpcy5nYWxsZXJpZXMucHVzaChuZXcgTWlsa2JveEdhbGxlcnkoJCQoJ2FbZGF0YS1taWxrYm94PScrbmFtZSsnXScpLHsgbmFtZTpuYW1lLCByZW1vdmVfdGl0bGU6dGhpcy5vcHRpb25zLnJlbW92ZVRpdGxlIH0pKTsKKwkJfSx0aGlzKTsKKwkJCisJCS8vc2V0IGRlZmF1bHQgYXV0b3BsYXkgLy8gb3ZlcnJpZGUgd2l0aCBzZXRBdXRvUGxheQorCQlpZih0aGlzLm9wdGlvbnMuYXV0b1BsYXkpeworCQkJdGhpcy5nYWxsZXJpZXMuZWFjaChmdW5jdGlvbihnKXsgCisJCQkJZy5zZXRPcHRpb25zKHthdXRvcGxheTp0aGlzLm9wdGlvbnMuYXV0b1BsYXksYXV0b3BsYXlfZGVsYXk6dGhpcy5vcHRpb25zLmF1dG9QbGF5RGVsYXl9KTsKKwkJCQlnLnJlZnJlc2goKTsKKwkJCX0uYmluZCh0aGlzKSk7CisJCX0KKwkJCisJfSwvL2dldFBhZ2VHYWxsZXJpZXMKKworCXJlbG9hZFBhZ2VHYWxsZXJpZXM6ZnVuY3Rpb24oKXsJCQorCQkvL3JlbG9hZCBwYWdlIGdhbGxlcmllcworCQl0aGlzLnJlbW92ZVBhZ2VHYWxsZXJ5RXZlbnRzKCk7CisKKwkJdGhpcy5nYWxsZXJpZXMgPSB0aGlzLmdhbGxlcmllcy5maWx0ZXIoZnVuY3Rpb24oZ2FsbGVyeSl7CisJCQlpZighZ2FsbGVyeS5leHRlcm5hbCkgZ2FsbGVyeS5jbGVhcigpOworCQkJcmV0dXJuIGdhbGxlcnkuZXh0ZXJuYWw7IAorCQl9KTsKKwkJCisJCXRoaXMuZ2V0UGFnZUdhbGxlcmllcygpOworCQl0aGlzLmFkZFBhZ2VHYWxsZXJpZXNFdmVudHMoKTsKKwkJCisJCWlmKCF0aGlzLmFjdGl2YXRlZCl7IHRoaXMucHJlcGFyZSh0cnVlKTsgfQorCX0sLy9lbmQgcmVsb2FkUGFnZUdhbGxlcmllcworCisJLy9saXN0OiBvcHRpb25hbC4gQ2FuIGJlIGEgc2luZ2xlIHN0cmluZy9vYmplY3Qgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy9vYmplY3RzCisJcmVzZXRFeHRlcm5hbEdhbGxlcmllczpmdW5jdGlvbihsaXN0KXsKKwkJdGhpcy5nYWxsZXJpZXMgPSB0aGlzLmdhbGxlcmllcy5maWx0ZXIoZnVuY3Rpb24oZ2FsbGVyeSl7CisJCQlpZihnYWxsZXJ5LmV4dGVybmFsKSBnYWxsZXJ5LmNsZWFyKCk7CisJCQlyZXR1cm4gIWdhbGxlcnkuZXh0ZXJuYWw7CisJCX0pOworCisJCWlmKCFsaXN0KSByZXR1cm47CisJCXZhciBhcnJheSA9ICh0eXBlT2YobGlzdCkgPT0gJ2FycmF5JykgPyBsaXN0IDogW2xpc3RdOworCQlhcnJheS5lYWNoKGZ1bmN0aW9uKGRhdGEpeyB0aGlzLmFkZEdhbGxlcmllcyhkYXRhKTsgfSwgdGhpcyk7CisJfSwKKworCS8vdXRpbGl0eQorCWFkZEdhbGxlcmllczpmdW5jdGlvbihkYXRhKXsKKwkJaWYoIXRoaXMuYWN0aXZhdGVkKXsgdGhpcy5wcmVwYXJlKHRydWUpOyB9CisJCWlmICh0eXBlT2YoZGF0YSkgPT0gJ3N0cmluZycgJiYgZGF0YS5zcGxpdCgnPycpWzBdLnRlc3QoL1wuKHhtbCkkL2kpKSB7CisJCQl0aGlzLmxvYWRYbWwoZGF0YSk7CisJCX0gZWxzZSB7Ly9hcnJheSBvciBvYmplY3QKKwkJCXRoaXMuc2V0T2JqZWN0R2FsbGVyaWVzKGRhdGEpOworCQl9CisJCWlmKCF0aGlzLmFjdGl2YXRlZCl7IHRoaXMucHJlcGFyZSh0cnVlKTsgfQorCX0sCisJCisJbG9hZFhtbDpmdW5jdGlvbih4bWxmaWxlKXsKKwkJdmFyIHIgPSBuZXcgUmVxdWVzdCh7CisJCQltZXRob2Q6J2dldCcsCisJCQlhdXRvQ2FuY2VsOnRydWUsCisJCQl1cmw6eG1sZmlsZSwKKwkJCW9uUmVxdWVzdDpmdW5jdGlvbigpeworCQkJCS8vcGxhY2Vob2xkZXIKKwkJCX0uYmluZCh0aGlzKSwKKwkJCW9uU3VjY2VzczpmdW5jdGlvbih0ZXh0LHhtbCl7CisJCQkJdmFyIHQgPSB0ZXh0LnJlcGxhY2UoLyg8YS4rKVwvPi9naSwiJDE+PC9hPiIpOworCQkJCXRoaXMuc2V0WG1sR2FsbGVyaWVzKG5ldyBFbGVtZW50KCdkaXYnLHsgaHRtbDp0IH0pKTsKKwkJCX0uYmluZCh0aGlzKSwKKwkJCW9uRmFpbHVyZTpmdW5jdGlvbih0cmFuc3BvcnQpeyBhbGVydCgnTWlsa2JveCA6OiBsb2FkWG1sOiBYTUwgZmlsZSBwYXRoIGVycm9yIG9yIGxvY2FsIEFqYXggdGVzdDogcGxlYXNlIHRlc3QgeG1sIGdhbGxlcmllcyBvbi1saW5lJyk7IH0KKwkJfSkuc2VuZCgpOworCX0sCisJCisJc2V0WG1sR2FsbGVyaWVzOmZ1bmN0aW9uKGNvbnRhaW5lcil7CisJCXZhciBjID0gY29udGFpbmVyOworCQl2YXIgeG1sX2dhbGxlcmllcyA9IGMuZ2V0RWxlbWVudHMoJy5nYWxsZXJ5Jyk7CisJCXZhciBsaW5rczsKKwkJdmFyIGFwbGlzdCA9IFtdOworCQl4bWxfZ2FsbGVyaWVzLmVhY2goZnVuY3Rpb24oeG1sX2dhbGxlcnksaSl7CisJCQkJCQkKKwkJCXZhciBvcHRpb25zID0geyAKKwkJCQluYW1lOnhtbF9nYWxsZXJ5LmdldFByb3BlcnR5KCduYW1lJyksIAorCQkJCWF1dG9wbGF5OkJvb2xlYW4oeG1sX2dhbGxlcnkuZ2V0UHJvcGVydHkoJ2F1dG9wbGF5JykpLAorCQkJCWF1dG9wbGF5X2RlbGF5Ok51bWJlcih4bWxfZ2FsbGVyeS5nZXRQcm9wZXJ0eSgnYXV0b3BsYXlfZGVsYXknKSkKKwkJCX0KKwkJCQorCQkJdmFyIGxpbmtzID0geG1sX2dhbGxlcnkuZ2V0Q2hpbGRyZW4oJ2EnKS5tYXAoZnVuY3Rpb24odGFnKXsgCisJCQkJcmV0dXJuIHsgaHJlZjp0YWcuaHJlZiwgc2l6ZTp0YWcuZ2V0KCdkYXRhLW1pbGtib3gtc2l6ZScpLCB0aXRsZTp0YWcuZ2V0KCd0aXRsZScpIH0KKwkJCX0sdGhpcyk7CisJCQkKKwkJCXRoaXMuZ2FsbGVyaWVzLnB1c2gobmV3IE1pbGtib3hHYWxsZXJ5KGxpbmtzLG9wdGlvbnMpKTsKKwkJfSx0aGlzKTsKKwkJCQorCQl0aGlzLmZpcmVFdmVudCgneG1sR2FsbGVyaWVzJyk7CisJfSwvL2VuZCBzZXRYbWxHYWxsZXJpZXMKKwkKKwkvL1t7IG5hbWU6J2dhbGwxJywgYXV0b3BsYXk6dHJ1ZSwgYXV0b3BsYXlfZGVsYXk6NywgZmlsZXM6W3tocmVmOidmaWxlMS5qcGcnLHNpemU6J3dpZHRoOjkwMCxoZWlnaHQ6MTAwJywgdGl0bGU6J3RleHQnfSx7aHJlZjonZmlsZTIuaHRtbCcsc2l6ZTondzo4MDAsaDoyMDAnLCB0aXRsZTondGV4dCd9XSB9LHsuLi59LHsuLi59XQkKKwlzZXRPYmplY3RHYWxsZXJpZXM6ZnVuY3Rpb24oZGF0YSl7CisJCXZhciBhcnJheSA9ICh0eXBlT2YoZGF0YSkgPT0gJ2FycmF5JykgPyBkYXRhIDogW2RhdGFdOworCQlhcnJheS5lYWNoKGZ1bmN0aW9uKG5ld29iail7CisJCQl2YXIgb3B0aW9ucyA9IHsKKwkJCQluYW1lOm5ld29iai5uYW1lLCAKKwkJCQlhdXRvcGxheTpuZXdvYmouYXV0b3BsYXksCisJCQkJYXV0b3BsYXlfZGVsYXk6bmV3b2JqLmF1dG9wbGF5X2RlbGF5CisJCQl9CQkJCisJCQl0aGlzLmdhbGxlcmllcy5wdXNoKG5ldyBNaWxrYm94R2FsbGVyeShuZXdvYmouZmlsZXMsb3B0aW9ucykpOworCQl9LHRoaXMpOworCX0sCisJCisJLy91dGlsaXR5CisJZ2V0R2FsbGVyeTpmdW5jdGlvbihuYW1lKXsKKwkJdmFyIGcgPSB0aGlzLmdhbGxlcmllcy5maWx0ZXIoZnVuY3Rpb24oZ2FsbGVyeSl7IHJldHVybiBnYWxsZXJ5Lm5hbWUgPT0gbmFtZTsgfSx0aGlzKTsKKwkJcmV0dXJuIGdbMF0gfHwgbnVsbDsKKwl9LAorCQorCS8vSFRNTAorCXByZXBhcmVIVE1MOmZ1bmN0aW9uKCl7CisJCXRoaXMuZGlzcGxheSA9IG5ldyBNaWxrYm94RGlzcGxheSh7CisJCQlpbml0aWFsV2lkdGg6dGhpcy5vcHRpb25zLmluaXRpYWxXaWR0aCwKKwkJCWluaXRpYWxIZWlnaHQ6dGhpcy5vcHRpb25zLmluaXRpYWxIZWlnaHQsCisJCQlvdmVybGF5T3BhY2l0eTp0aGlzLm9wdGlvbnMub3ZlcmxheU9wYWNpdHksCisJCQltYXJnaW5Ub3A6dGhpcy5vcHRpb25zLm1hcmdpblRvcCwKKwkJCWZpbGVib3hCb3JkZXJXaWR0aDp0aGlzLm9wdGlvbnMuZmlsZWJveEJvcmRlcldpZHRoLAorCQkJZmlsZWJveEJvcmRlckNvbG9yOnRoaXMub3B0aW9ucy5maWxlYm94Qm9yZGVyQ29sb3IsCisJCQlmaWxlYm94UGFkZGluZzp0aGlzLm9wdGlvbnMuZmlsZWJveFBhZGRpbmcsCisJCQlyZXNpemVEdXJhdGlvbjp0aGlzLm9wdGlvbnMucmVzaXplRHVyYXRpb24sCisJCQlyZXNpemVUcmFuc2l0aW9uOnRoaXMub3B0aW9ucy5yZXNpemVUcmFuc2l0aW9uLAorCQkJY2VudGVyZWQ6dGhpcy5vcHRpb25zLmNlbnRlcmVkLAorCQkJYXV0b1NpemU6dGhpcy5vcHRpb25zLmF1dG9TaXplLAorCQkJYXV0b1NpemVNYXhIZWlnaHQ6dGhpcy5vcHRpb25zLmF1dG9TaXplTWF4SGVpZ2h0LAorCQkJaW1hZ2VPZlRleHQ6dGhpcy5vcHRpb25zLmltYWdlT2ZUZXh0LAorICAgICAgekluZGV4OnRoaXMub3B0aW9ucy56SW5kZXgKKwkJfSk7CisJfSwKKwkKKwlyZWZyZXNoRGlzcGxheTpmdW5jdGlvbihvcHRpb25zLGtlZXBCYWNrdXApeworCQlpZighdGhpcy5hY3RpdmF0ZWQpIHJldHVybjsKKwkKKwkJdmFyIG9wdGlvbnNfYmt1cCA9IHRoaXMuZGlzcGxheS5vcHRpb25zOy8vc2F2ZSBvcmlnaW5hbCBvcHRpb25zCisJCXZhciBuZXdfb3B0aW9ucyA9IE9iamVjdC5tZXJnZSh7fSxvcHRpb25zX2JrdXAsb3B0aW9ucyk7CQorCQlpZih0aGlzLmRpc3BsYXkpeyB0aGlzLmRpc3BsYXkuY2xlYXIoKSB9CisJCXRoaXMuZGlzcGxheSA9IG5ldyBNaWxrYm94RGlzcGxheShuZXdfb3B0aW9ucyk7CisJCXRoaXMuYWRkRGlzcGxheUV2ZW50cygpOworCQkKKwkJaWYoa2VlcEJhY2t1cCl7CisJCQl0aGlzLm9wdGlvbnNfYmt1cCA9IG9wdGlvbnNfYmt1cDsvL3Jlc3RvcmVkIGluIGNsb3NlKCk7CisJCX0gZWxzZSB7CisJCQl0aGlzLm9wdGlvbnNfYmt1cCA9IG51bGw7CisJCX0KKwl9LAorCisJY2hlY2tGb3JtRWxlbWVudHM6ZnVuY3Rpb24oKXsKKwkJdGhpcy5mb3JtRWxlbWVudHMgPSAkJCgnc2VsZWN0LCB0ZXh0YXJlYScpOworCQlpZih0aGlzLmZvcm1FbGVtZW50cy5sZW5ndGggPT0gMCkgcmV0dXJuOworCisJCXRoaXMuZm9ybUVsZW1lbnRzID0gdGhpcy5mb3JtRWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKGVsZW0peyAgIAorICAgICAgdmFyIHZpcyA9IGVsZW0uZ2V0U3R5bGUoJ3Zpc2liaWxpdHknKTsgICAgCisgICAgICB2YXIgZGlzID0gZWxlbS5nZXRTdHlsZSgnZGlzcGxheScpOyAgICAgCisgICAgICByZXR1cm4gKGRpcyAhPT0gJ25vbmUnICYmIHZpcyAhPT0gJ2hpZGRlbicpOyAgICAgCisgICAgfSkubWFwKGZ1bmN0aW9uKGVsZW0peworCQkJZWxlbS5zdG9yZSgndmlzaWJpbGl0eScsZWxlbS5nZXRTdHlsZSgndmlzaWJpbGl0eScpKTsKKwkJCWVsZW0uc3RvcmUoJ2Rpc3BsYXknLGVsZW0uZ2V0U3R5bGUoJ2Rpc3BsYXknKSk7CisJCQlyZXR1cm4gZWxlbTsKKwkJfSk7CisJfSwKKwkKKwloaWRlRm9ybUVsZW1lbnRzOmZ1bmN0aW9uKCl7CisJCWlmKHRoaXMuZm9ybUVsZW1lbnRzLmxlbmd0aCA9PSAwKSByZXR1cm47CisJCXRoaXMuZm9ybUVsZW1lbnRzLmVhY2goZnVuY3Rpb24oZWxlbSl7IGVsZW0uc2V0U3R5bGUoJ2Rpc3BsYXknLCdub25lJyk7IH0pOworCX0sCisJCisJc2hvd0Zvcm1FbGVtZW50czpmdW5jdGlvbigpeworCQlpZih0aGlzLmZvcm1FbGVtZW50cy5sZW5ndGggPT0gMCkgcmV0dXJuOworCQl0aGlzLmZvcm1FbGVtZW50cy5lYWNoKGZ1bmN0aW9uKGVsZW0peworCQkJZWxlbS5zZXRTdHlsZSgndmlzaWJpbGl0eScsZWxlbS5yZXRyaWV2ZSgndmlzaWJpbGl0eScpKTsKKwkJCWVsZW0uc2V0U3R5bGUoJ2Rpc3BsYXknLGVsZW0ucmV0cmlldmUoJ2Rpc3BsYXknKSk7CisJCX0pCisJfSwKKwkKKwkvL0VWRU5UUworCWFkZFBhZ2VHYWxsZXJpZXNFdmVudHM6ZnVuY3Rpb24oKXsKKwkJdmFyIHBhZ2VHYWxsZXJpZXMgPSB0aGlzLmdhbGxlcmllcy5maWx0ZXIoZnVuY3Rpb24oZ2FsbGVyeSl7IHJldHVybiAhZ2FsbGVyeS5leHRlcm5hbCB9KTsKKwkJcGFnZUdhbGxlcmllcy5lYWNoKGZ1bmN0aW9uKGdhbGxlcnkpeworCQkJZ2FsbGVyeS5pdGVtcy5lYWNoKGZ1bmN0aW9uKGl0ZW0peworCQkJCWl0ZW0uZWxlbWVudC5hZGRFdmVudCgnY2xpY2snLGZ1bmN0aW9uKGUpeworCQkJCQllLnByZXZlbnREZWZhdWx0KCk7CisJCQkJCXRoaXMub3BlbihnYWxsZXJ5Lm5hbWUsZ2FsbGVyeS5nZXRfaW5kZXhfb2YoaXRlbSkpOworCQkJCX0uYmluZCh0aGlzKSk7CisJCQl9LHRoaXMpOworCQl9LHRoaXMpOworCX0sCisJCisJcmVtb3ZlUGFnZUdhbGxlcnlFdmVudHM6ZnVuY3Rpb24oKXsKKwkJdmFyIHBhZ2VHYWxsZXJpZXMgPSB0aGlzLmdhbGxlcmllcy5maWx0ZXIoZnVuY3Rpb24oZ2FsbGVyeSl7IHJldHVybiAhZ2FsbGVyeS5leHRlcm5hbCB9KTsKKwkJcGFnZUdhbGxlcmllcy5lYWNoKGZ1bmN0aW9uKGdhbGxlcnkpeworCQkJZ2FsbGVyeS5pdGVtcy5lYWNoKGZ1bmN0aW9uKGl0ZW0peworCQkJCWl0ZW0uZWxlbWVudC5yZW1vdmVFdmVudHMoJ2NsaWNrJyk7CisJCQl9KTsKKwkJfSk7CisJfSwKKwkKKwlhZGREaXNwbGF5RXZlbnRzOmZ1bmN0aW9uKCl7CisJCXRoaXMuZGlzcGxheS5hZGRFdmVudCgnbmV4dENsaWNrJyxmdW5jdGlvbigpeworCQkJdGhpcy5uYXZBdXgodHJ1ZSwnbmV4dCcpOworCQl9LmJpbmQodGhpcykpOworCQkKKwkJdGhpcy5kaXNwbGF5LmFkZEV2ZW50KCdwcmV2Q2xpY2snLGZ1bmN0aW9uKCl7CisJCQl0aGlzLm5hdkF1eCh0cnVlLCdwcmV2Jyk7CisJCX0uYmluZCh0aGlzKSk7CisJCQorCQl0aGlzLmRpc3BsYXkuYWRkRXZlbnQoJ3BsYXlQYXVzZUNsaWNrJyxmdW5jdGlvbigpeworCQkJaWYodGhpcy5wYXVzZWQpeworCQkJCXRoaXMuc3RhcnRBdXRvUGxheSgpOworCQkJfSBlbHNlIHsKKwkJCQl0aGlzLnBhdXNlQXV0b1BsYXkoKTsKKwkJCX0KKwkJCXRoaXMuZGlzcGxheS5zZXRfcGF1c2VkKHRoaXMucGF1c2VkKTsKKwkJfS5iaW5kKHRoaXMpKTsKKwkJCisJCXRoaXMuZGlzcGxheS5hZGRFdmVudCgnZGlzYXBwZWFyJyxmdW5jdGlvbigpeworCQkJaWYodGhpcy5vcHRpb25zX2JrdXApeyB0aGlzLnJlZnJlc2hEaXNwbGF5KHRoaXMub3B0aW9uc19ia3VwKTsgfQorCQkJdGhpcy5jbG9zZShmYWxzZSk7CisJCX0uYmluZCh0aGlzKSk7CisJCQorCQl0aGlzLmRpc3BsYXkuYWRkRXZlbnQoJ3Jlc2l6ZUNvbXBsZXRlJyxmdW5jdGlvbigpeworCQkJdGhpcy5idXN5ID0gZmFsc2U7Ly9zZWUgbmF2QXV4CisJCX0uYmluZCh0aGlzKSk7CisJfSwKKworCXByZXBhcmVFdmVudExpc3RlbmVyczpmdW5jdGlvbigpeworCQkKKwkJdGhpcy5hZGRQYWdlR2FsbGVyaWVzRXZlbnRzKCk7CisJCXRoaXMuYWRkRGlzcGxheUV2ZW50cygpOworCQkKKwkJLy9yZXNldCBvdmVybGF5IGhlaWdodCBhbmQgcG9zaXRpb24gb25SZXNpemUKKwkJd2luZG93LmFkZEV2ZW50KCdyZXNpemUnLGZ1bmN0aW9uKCl7CisJCQlpZih0aGlzLmRpc3BsYXkucmVhZHkpeyB0aGlzLmRpc3BsYXkucmVzZXRPdmVybGF5U2l6ZSgpOyB9CisJCX0uYmluZCh0aGlzKSk7CisJCQorCQkvL2tleWJvYXJkIG5leHQvcHJldi9jbG9zZQorCQl3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnQoJ2tleWRvd24nLGZ1bmN0aW9uKGUpeworCQkJaWYodGhpcy5idXN5ID09IHRydWUgfHwgdGhpcy5jbG9zZWQpeyByZXR1cm47IH0KKwkJCWlmKGUua2V5ID09ICdyaWdodCcgfHwgZS5rZXkgPT0gJ2xlZnQnIHx8IGUua2V5ID09ICdzcGFjZScpeyBlLnByZXZlbnREZWZhdWx0KCk7IH0KKworCQkJaWYodGhpcy5kaXNwbGF5Lm1vZGUgIT0gJ3NpbmdsZScpeworCQkJCWlmKGUua2V5ID09ICdyaWdodCcgfHwgZS5rZXkgPT0gJ3NwYWNlJyl7IHRoaXMubmF2QXV4KGUsJ25leHQnKTsgfQorCQkJCWVsc2UgaWYoZS5rZXkgPT0gJ2xlZnQnKXsgdGhpcy5uYXZBdXgoZSwncHJldicpOyB9CisJCQl9CisJCQkKKwkJCWlmKGUua2V5ID09ICdlc2MnKXsgdGhpcy5kaXNwbGF5LmRpc2FwcGVhcigpOyB9CisJCX0uYmluZCh0aGlzKSk7CisJfSwKKworCW5hdkF1eDpmdW5jdGlvbihlLGRpcmVjdGlvbil7CisJCQkJCisJCWlmKGUpey8vY2FsbGVkIGZyb20gYSBidXR0b24va2V5IGV2ZW50CisJCQl0aGlzLnBhdXNlQXV0b1BsYXkoKTsKKwkJfSBlbHNlIHsvL2NhbGxlZCBmcm9tIGF1dG9wbGF5CisJCQlpZih0aGlzLmJ1c3kgfHwgIXRoaXMuZmlsZVJlYWR5KXsgcmV0dXJuOyB9Ly9wcmV2ZW50IGF1dG9wbGF5KCkKKwkJfQorCisJCXRoaXMuYnVzeSA9IHRydWU7IC8vZm9yIGtleWJvYXJkIGFuZCBhdXRvcGxheQorCQkKKwkJdmFyIGksIF9pOworCisJCWlmKGRpcmVjdGlvbiA9PSAibmV4dCIpeworCQkJaT0gKHRoaXMuY3VycmVudEluZGV4ICE9IHRoaXMuY3VycmVudEdhbGxlcnkuaXRlbXMubGVuZ3RoLTEpID8gdGhpcy5jdXJyZW50SW5kZXggKz0gMSA6IHRoaXMuY3VycmVudEluZGV4ID0gMDsKKwkJCV9pPSAodGhpcy5jdXJyZW50SW5kZXggIT0gdGhpcy5jdXJyZW50R2FsbGVyeS5pdGVtcy5sZW5ndGgtMSkgPyB0aGlzLmN1cnJlbnRJbmRleCArIDEgOiAwOworCQl9IGVsc2UgeworCQkJaT0gKHRoaXMuY3VycmVudEluZGV4ICE9IDApID8gdGhpcy5jdXJyZW50SW5kZXggLT0gMSA6IHRoaXMuY3VycmVudEluZGV4ID0gdGhpcy5jdXJyZW50R2FsbGVyeS5pdGVtcy5sZW5ndGgtMTsKKwkJCV9pPSAodGhpcy5jdXJyZW50SW5kZXggIT0gMCkgPyB0aGlzLmN1cnJlbnRJbmRleCAtIDEgOiB0aGlzLmN1cnJlbnRHYWxsZXJ5Lml0ZW1zLmxlbmd0aC0xOwkJCisJCX07CisKKwkJdGhpcy5sb2FkRmlsZSh0aGlzLmN1cnJlbnRHYWxsZXJ5LmdldF9pdGVtKGkpLFt0aGlzLmN1cnJlbnRHYWxsZXJ5LmdldF9pdGVtKF9pKV0pOworCX0KKworCit9KTsvL0VORCBNSUxLQk9YIENMQVNTIENPREUKKworfSkoKTsvL0VORCBTSU5HTEVUT04gQ09ERQorCisKKworCisKKwordmFyIE1pbGtib3hEaXNwbGF5PSBuZXcgQ2xhc3MoeworCisJSW1wbGVtZW50czpbT3B0aW9ucyxFdmVudHNdLAorCQorCW9wdGlvbnM6eworCQlpbml0aWFsV2lkdGg6MTAwLAorCQlpbml0aWFsSGVpZ2h0OjEwMCwKKwkJb3ZlcmxheU9wYWNpdHk6MSwKKwkJbWFyZ2luVG9wOjAsCisJCWZpbGVib3hCb3JkZXJXaWR0aDonMHB4JywKKwkJZmlsZWJveEJvcmRlckNvbG9yOicjMDAwMDAwJywKKwkJZmlsZWJveFBhZGRpbmc6JzBweCcsCisJCXJlc2l6ZUR1cmF0aW9uOi41LAorCQlyZXNpemVUcmFuc2l0aW9uOidzaW5lOmluOm91dCcsCisJCWNlbnRlcmVkOmZhbHNlLAorCQlhdXRvU2l6ZTpmYWxzZSwKKwkJYXV0b1NpemVNYXhIZWlnaHQ6MCwKKwkJaW1hZ2VPZlRleHQ6J29mJywKKwkJb25OZXh0Q2xpY2s6ZnVuY3Rpb24oKXt9LAorCQlvblByZXZDbGljazpmdW5jdGlvbigpe30sCisJCW9uUGxheVBhdXNlOmZ1bmN0aW9uKCl7fSwKKwkJb25EaXNhcHBlYXI6ZnVuY3Rpb24oKXt9LAorCQlvblJlc2l6ZUNvbXBsZXRlOmZ1bmN0aW9uKCl7fQorCX0sCisJCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7CisJCXRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTsKKwkJCisJCXRoaXMub3ZlcmxheTsKKwkJdGhpcy5tYWluYm94OworCQl0aGlzLmZpbGVib3g7CisJCXRoaXMuYm90dG9tOworCQl0aGlzLmNvbnRyb2xzOworCQl0aGlzLmNhcHRpb247CisJCXRoaXMuY2xvc2U7CisJCXRoaXMubmV4dDsKKwkJdGhpcy5wcmV2OworCQl0aGlzLnBsYXlwYXVzZTsKKwkJdGhpcy5wYXVzZWQgPSBmYWxzZTsKKwkJdGhpcy5jb3VudDsKKwkJCisJCXRoaXMubW9kZSA9ICdzdGFuZGFyZCc7CisJCXRoaXMucmVhZHkgPSBmYWxzZTsvL2FmdGVyIG92ZXJsYXkgYW5kIG1haW5ib3ggYmVjb21lIHZpc2libGUgPT0gdHJ1ZQorCQkKKwkJdGhpcy5vdmVybGF5X3Nob3dfZng7CisJCXRoaXMub3ZlcmxheV9oaWRlX2Z4OworCisJCXRoaXMubWFpbmJveF9zaG93X2Z4OworCQl0aGlzLm1haW5ib3hfaGlkZV9meDsKKwkJdGhpcy5tYWluYm94X3Jlc2l6ZV9meDsKKwkJCisJCXRoaXMuY3VycmVudF9maWxlID0gbnVsbDsKKworCQl0aGlzLmJ1aWxkX2h0bWwoKTsKKwkJdGhpcy5wcmVwYXJlX2VmZmVjdHMoKTsKKwkJdGhpcy5wcmVwYXJlX2V2ZW50cygpOworCisJfSwvL2VuZCBpbml0CisJCisJYnVpbGRfaHRtbDpmdW5jdGlvbigpeworCQl0aGlzLm92ZXJsYXkgPSBuZXcgRWxlbWVudCgnZGl2JywgeyAKKwkJCSdpZCc6J21ib3gtb3ZlcmxheScsCisJCQknc3R5bGVzJzp7CisJCQkJJ3Zpc2liaWxpdHknOid2aXNpYmxlJywKKwkJCQkncG9zaXRpb24nOidmaXhlZCcsCisJCQkJJ2Rpc3BsYXknOidub25lJywKKwkJCQknbGVmdCc6MCwKKwkJCQknd2lkdGgnOicxMDAlJywKKwkJCQknb3BhY2l0eSc6MCwKKwkJCQknaGVpZ2h0JzowLAorCQkJCSdvdmVyZmxvdyc6J2hpZGRlbicsCisJCQkJJ21hcmdpbic6MCwKKwkJCQkncGFkZGluZyc6MAorCQkJfQorCQl9KS5pbmplY3QoZG9jdW1lbnQuaWQoZG9jdW1lbnQuYm9keSkpOworCisJCXRoaXMubWFpbmJveCA9IG5ldyBFbGVtZW50KCdkaXYnLCB7CisJCQknaWQnOidtYm94LW1haW5ib3gnLAorCQkJJ3N0eWxlcyc6IHsKKwkJCQkncG9zaXRpb24nOih0aGlzLm9wdGlvbnMuY2VudGVyZWQpID8gJ2ZpeGVkJyA6ICdhYnNvbHV0ZScsCisJCQkJJ292ZXJmbG93JzonaGlkZGVuJywKKwkJCQknZGlzcGxheSc6J25vbmUnLAorCQkJCSd6LWluZGV4Jzp0aGlzLm9wdGlvbnMuekluZGV4LC8vNTAwMDEsLy9vdmVybGF5IHotaW5kZXggKHNlZSBjc3MpICsgMQorCQkJCSd3aWR0aCc6dGhpcy5vcHRpb25zLmluaXRpYWxXaWR0aCwKKwkJCQknaGVpZ2h0Jzp0aGlzLm9wdGlvbnMuaW5pdGlhbEhlaWdodCwKKwkJCQknb3BhY2l0eSc6MCwKKwkJCQknbWFyZ2luJzowLAorCQkJCSdsZWZ0JzonNTAlJywKKwkJCQknbWFyZ2luTGVmdCc6LSh0aGlzLm9wdGlvbnMuaW5pdGlhbFdpZHRoLzIpLAorCQkJCSdtYXJnaW5Ub3AnOih0aGlzLm9wdGlvbnMuY2VudGVyZWQpID8gLSh0aGlzLm9wdGlvbnMuaW5pdGlhbEhlaWdodC8yKSA6ICcnLAorCQkJCSd0b3AnOih0aGlzLm9wdGlvbnMuY2VudGVyZWQpID8gJzUwJScgOiAnJworCQkJfQorCQl9KS5pbmplY3QoZG9jdW1lbnQuaWQoZG9jdW1lbnQuYm9keSkpOworCQkKKwkJdGhpcy5maWxlYm94ID0gbmV3IEVsZW1lbnQoJ2RpdicseworCQkJJ2lkJzonbWJveC1maWxlYm94JywKKwkJCSdzdHlsZXMnOnsKKwkJCQknYm9yZGVyLXN0eWxlJzonc29saWQnLAorCQkJCSdib3JkZXItd2lkdGgnOnRoaXMub3B0aW9ucy5maWxlYm94Qm9yZGVyV2lkdGgsCisJCQkJJ2JvcmRlci1jb2xvcic6dGhpcy5vcHRpb25zLmZpbGVib3hCb3JkZXJDb2xvciwKKwkJCQkncGFkZGluZyc6dGhpcy5vcHRpb25zLmZpbGVib3hQYWRkaW5nLAorCQkJCSdvcGFjaXR5JzowCisJCQl9CisJCX0pLmluamVjdCh0aGlzLm1haW5ib3gpOworCQkKKwkJdGhpcy5ib3R0b20gPSBuZXcgRWxlbWVudCgnZGl2I21ib3gtYm90dG9tJykuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCdoaWRkZW4nKS5pbmplY3QodGhpcy5tYWluYm94KTsKKwkJdGhpcy5jb250cm9scyA9IG5ldyBFbGVtZW50KCdkaXYjbWJveC1jb250cm9scycpOworCQl0aGlzLmNhcHRpb24gPSBuZXcgRWxlbWVudCgnZGl2I21ib3gtY2FwdGlvbicseydodG1sJzondGVzdCd9KS5zZXRTdHlsZSgnZGlzcGxheScsJ25vbmUnKTsKKworCQl0aGlzLmJvdHRvbS5hZG9wdChuZXcgRWxlbWVudCgnZGl2Lm1ib3gtcmVzZXQnKSx0aGlzLmNvbnRyb2xzLCB0aGlzLmNhcHRpb24sIG5ldyBFbGVtZW50KCdkaXYubWJveC1yZXNldCcpKTsKKwkJCisJCXRoaXMuY2xvc2UgPSBuZXcgRWxlbWVudCgnZGl2I21ib3gtY2xvc2UnKTsKKwkJdGhpcy5uZXh0ID0gbmV3IEVsZW1lbnQoJ2RpdiNtYm94LW5leHQnKTsKKwkJdGhpcy5wcmV2ID0gbmV3IEVsZW1lbnQoJ2RpdiNtYm94LXByZXYnKTsKKwkJdGhpcy5wbGF5cGF1c2UgPSBuZXcgRWxlbWVudCgnZGl2I21ib3gtcGxheXBhdXNlJyk7CisJCXRoaXMuY291bnQgPSBuZXcgRWxlbWVudCgnZGl2I21ib3gtY291bnQnKTsKKwkJCisJCSQkKHRoaXMubmV4dCwgdGhpcy5wcmV2LCB0aGlzLmNsb3NlLCB0aGlzLnBsYXlwYXVzZSkuc2V0U3R5bGVzKHsKKwkJCSdvdXRsaW5lJzonbm9uZScsCisJCQknY3Vyc29yJzoncG9pbnRlcicKKwkJfSk7CisKKwkJdGhpcy5jb250cm9scy5hZG9wdChuZXcgRWxlbWVudCgnZGl2Lm1ib3gtcmVzZXQnKSwgdGhpcy5jbG9zZSwgdGhpcy5uZXh0LCB0aGlzLnByZXYsIHRoaXMucGxheXBhdXNlLCBuZXcgRWxlbWVudCgnZGl2Lm1ib3gtcmVzZXQnKSwgdGhpcy5jb3VudCk7CisJfSwKKwkKKwlwcmVwYXJlX2VmZmVjdHM6ZnVuY3Rpb24oKXsKKwkJdGhpcy5vdmVybGF5X3Nob3dfZnggPSBuZXcgRnguVHdlZW4odGhpcy5vdmVybGF5LHsgCisJCQkJZHVyYXRpb246J3Nob3J0JywKKwkJCQlsaW5rOidjYW5jZWwnLAorCQkJCXByb3BlcnR5OidvcGFjaXR5JywKKwkJCQlvblN0YXJ0OmZ1bmN0aW9uKCl7CisJCQkJCXRoaXMuZWxlbWVudC5zZXRTdHlsZXMoeworCQkJCQkJJ3RvcCc6LXdpbmRvdy5nZXRTY3JvbGwoKS55LAorCQkJCQkJJ2hlaWdodCc6d2luZG93LmdldFNjcm9sbFNpemUoKS55K3dpbmRvdy5nZXRTY3JvbGwoKS55LAorCQkJCQkJJ2Rpc3BsYXknOidibG9jaycKKwkJCQkJfSk7CisJCQkJfSwKKwkJCQlvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7CisJCQkJCXRoaXMubWFpbmJveF9zaG93X2Z4LnN0YXJ0KDEpOworCQkJCX0uYmluZCh0aGlzKQorCQl9KTsKKworCQl0aGlzLm92ZXJsYXlfaGlkZV9meCA9IG5ldyBGeC5Ud2Vlbih0aGlzLm92ZXJsYXkseyAKKwkJCQlkdXJhdGlvbjonc2hvcnQnLAorCQkJCWxpbms6J2NhbmNlbCcsCisJCQkJcHJvcGVydHk6J29wYWNpdHknLAorCQkJCW9uU3RhcnQ6ZnVuY3Rpb24oKXt9LAorCQkJCW9uQ29tcGxldGU6ZnVuY3Rpb24oKXsKKwkJCQkJdGhpcy5vdmVybGF5LnNldFN0eWxlKCdkaXNwbGF5Jywnbm9uZScpOworCQkJCQl0aGlzLmZpcmVFdmVudCgnZGlzYXBwZWFyJyk7CisJCQkJfS5iaW5kKHRoaXMpCisJCX0pOworCQkKKwkJdGhpcy5tYWluYm94X3Nob3dfZnggPSBuZXcgRnguVHdlZW4odGhpcy5tYWluYm94LHsgCisJCQkJZHVyYXRpb246J3Nob3J0JywKKwkJCQlsaW5rOidjYW5jZWwnLAorCQkJCXByb3BlcnR5OidvcGFjaXR5JywKKwkJCQlvblN0YXJ0OmZ1bmN0aW9uKCl7CisJCQkJCXRoaXMubWFpbmJveC5zZXRTdHlsZSgnZGlzcGxheScsJ2Jsb2NrJyk7CisJCQkJfS5iaW5kKHRoaXMpLAorCQkJCW9uQ29tcGxldGU6ZnVuY3Rpb24oKXsKKwkJCQkJdGhpcy5yZWFkeSA9IHRydWU7CisJCQkJfS5iaW5kKHRoaXMpCisJCX0pOworCisJCXRoaXMubWFpbmJveF9oaWRlX2Z4ID0gbmV3IEZ4LlR3ZWVuKHRoaXMubWFpbmJveCx7IAorCQkJCWR1cmF0aW9uOidzaG9ydCcsCisJCQkJbGluazonY2FuY2VsJywKKwkJCQlwcm9wZXJ0eTonb3BhY2l0eScsCisJCQkJb25TdGFydDpmdW5jdGlvbigpeworCQkJCQl0aGlzLnJlYWR5ID0gZmFsc2U7CisJCQkJfS5iaW5kKHRoaXMpLAorCQkJCW9uQ29tcGxldGU6ZnVuY3Rpb24oKXsKKwkJCQkJdGhpcy5vdmVybGF5LnNldFN0eWxlKCdkaXNwbGF5Jywnbm9uZScpOworCQkJCX0uYmluZCh0aGlzKQorCQl9KTsKKwkJCisJCQorCQl0aGlzLm1haW5ib3hfcmVzaXplX2Z4ID0gbmV3IEZ4Lk1vcnBoKHRoaXMubWFpbmJveCx7IAorCQkJCWR1cmF0aW9uOnRoaXMub3B0aW9ucy5yZXNpemVEdXJhdGlvbioxMDAwLAorCQkJCXRyYW5zaXRpb246dGhpcy5vcHRpb25zLnJlc2l6ZVRyYW5zaXRpb24sCisJCQkJbGluazonY2FuY2VsJywKKwkJCQlvblN0YXJ0OmZ1bmN0aW9uKCl7CisJCQkJCXRoaXMuZmlsZWJveC5zZXRTdHlsZSgnb3BhY2l0eScsMCkKKwkJCQl9LmJpbmQodGhpcyksCisJCQkJb25Db21wbGV0ZTpmdW5jdGlvbigpeworCQkJCQl0aGlzLnNob3dfYm90dG9tKCk7CisJCQkJCXRoaXMuZmlsZWJveC5zZXRTdHlsZSgnaGVpZ2h0Jyx0aGlzLmN1cnJlbnRfZmlsZS5oZWlnaHQrJ3B4Jyk7CisJCQkJCXRoaXMuZmlsZWJveC5ncmFiKHRoaXMuY3VycmVudF9maWxlKS50d2Vlbignb3BhY2l0eScsMSk7CisJCQkJCXRoaXMuZmlyZUV2ZW50KCdyZXNpemVDb21wbGV0ZScpOworCQkJCX0uYmluZCh0aGlzKQorCQl9KTsKKwkJCisJCXRoaXMuZmlsZWJveC5zZXQoJ3R3ZWVuJyx7IGR1cmF0aW9uOidzaG9ydCcsIGxpbms6J2NoYWluJyB9KTsKKwl9LC8vZW5kIHByZXBhcmVfZWZmZWN0cworCQorCXByZXBhcmVfZXZlbnRzOmZ1bmN0aW9uKCl7CisJCSQkKHRoaXMub3ZlcmxheSx0aGlzLmNsb3NlKS5hZGRFdmVudCgnY2xpY2snLCBmdW5jdGlvbigpeyB0aGlzLmRpc2FwcGVhcigpOyB9LmJpbmQodGhpcykpOworCQl0aGlzLnByZXYuYWRkRXZlbnQoJ2NsaWNrJyxmdW5jdGlvbigpeyB0aGlzLmZpcmVFdmVudCgncHJldkNsaWNrJykgfS5iaW5kKHRoaXMpKTsKKwkJdGhpcy5uZXh0LmFkZEV2ZW50KCdjbGljaycsZnVuY3Rpb24oKXsgdGhpcy5maXJlRXZlbnQoJ25leHRDbGljaycpIH0uYmluZCh0aGlzKSk7CisJCXRoaXMucGxheXBhdXNlLmFkZEV2ZW50KCdjbGljaycsZnVuY3Rpb24oKXsgdGhpcy5maXJlRXZlbnQoJ3BsYXlQYXVzZUNsaWNrJykgfS5iaW5kKHRoaXMpICk7CisJfSwKKworCXNob3dfZmlsZTpmdW5jdGlvbihmaWxlLGNhcHRpb24saW5kZXgsbGVuZ3RoKXsKKworCQl0aGlzLmhpZGVfbG9hZGVyKCk7CisJCQorCQlpZihmaWxlLm1hdGNoICYmIGZpbGUubWF0Y2goJ2ltZycpICYmICh0aGlzLm9wdGlvbnMuYXV0b1NpemUgfHwgdGhpcy5vcHRpb25zLmNlbnRlcmVkKSl7CisJCQl2YXIgZmlsZSA9IHRoaXMuZ2V0X3Jlc2l6ZWRfaW1hZ2UoZmlsZSk7CisJCX07CisKKwkJdmFyIGZpbGVfc2l6ZSA9IHsgdzpmaWxlLndpZHRoLnRvSW50KCksIGg6ZmlsZS5oZWlnaHQudG9JbnQoKSB9OworCQlpZighZmlsZV9zaXplLncgfHwgIWZpbGVfc2l6ZS5oKXsgYWxlcnQoJ01pbGtib3ggZXJyb3I6IHlvdSBtdXN0IHBhc3Mgc2l6ZSB2YWx1ZXMgaWYgdGhlIGZpbGUgaXMgc3dmIG9yIGh0bWwgb3IgYSBmcmVlIGZpbGUgKG9wZW5XaXRoRmlsZSknKTsgcmV0dXJuOyB9Ly9kYXRhLW1pbGtib3gtc2l6ZSBub3QgcGFzc2VkCisJCWZpbGVfc2l6ZSA9IE9iamVjdC5tYXAoZmlsZV9zaXplLGZ1bmN0aW9uKHZhbHVlKXsgcmV0dXJuIHZhbHVlLnRvSW50KCk7IH0pOworCQkKKwkJdGhpcy5jYXB0aW9uLmlubmVySFRNTCA9IChjYXB0aW9uKSA/IGNhcHRpb24gOiAnJzsKKwkJdGhpcy51cGRhdGVfY291bnQoaW5kZXgsbGVuZ3RoKTsKKwkJCisJCXZhciBmaWxlYm94X2FkZHNpemUgPSB0aGlzLmZpbGVib3guZ2V0U3R5bGUoJ2JvcmRlci13aWR0aCcpLnRvSW50KCkqMit0aGlzLmZpbGVib3guZ2V0U3R5bGUoJ3BhZGRpbmcnKS50b0ludCgpKjI7CisJCQkJCisJCXZhciBmaW5hbF93ID0gZmlsZV9zaXplLncrZmlsZWJveF9hZGRzaXplOworCQkKKwkJLy9zbyBub3cgSSBjYW4gcHJlZGljdCB0aGUgY2FwdGlvbiBoZWlnaHQKKwkJdmFyIGNhcHRpb25fYWRkcyA9IHRoaXMuY2FwdGlvbi5nZXRTdHlsZXMoJ3BhZGRpbmdSaWdodCcsJ21hcmdpblJpZ2h0Jyk7CisJCXRoaXMuY2FwdGlvbi5zZXRTdHlsZSgnd2lkdGgnLGZpbmFsX3ctY2FwdGlvbl9hZGRzLnBhZGRpbmdSaWdodC50b0ludCgpLWNhcHRpb25fYWRkcy5tYXJnaW5SaWdodC50b0ludCgpIC0gMik7CisJCSQkKHRoaXMuYm90dG9tLHRoaXMuY29udHJvbHMpLnNldFN0eWxlKCdoZWlnaHQnLE1hdGgubWF4KHRoaXMuY2FwdGlvbi5nZXREaW1lbnNpb25zKCkuaGVpZ2h0LHRoaXMuY29udHJvbHMuZ2V0Q29tcHV0ZWRTaXplKCkudG90YWxIZWlnaHQpKTsKKwkJdmFyIG1haW5ib3hfc2l6ZSA9IHRoaXMubWFpbmJveC5nZXRDb21wdXRlZFNpemUoKTsKKworCQl2YXIgZmluYWxfaCA9IGZpbGVfc2l6ZS5oK2ZpbGVib3hfYWRkc2l6ZSt0aGlzLmJvdHRvbS5nZXRDb21wdXRlZFNpemUoKS50b3RhbEhlaWdodDsKKwkJCisJCXZhciB0YXJnZXRfc2l6ZSA9IHsgCisJCQl3OmZpbmFsX3csCisJCQloOmZpbmFsX2gsCisJCQl0b3RhbF93OmZpbmFsX3crbWFpbmJveF9zaXplLnRvdGFsV2lkdGgtbWFpbmJveF9zaXplLndpZHRoLAorCQkJdG90YWxfaDpmaW5hbF9oK21haW5ib3hfc2l6ZS50b3RhbEhlaWdodC1tYWluYm94X3NpemUuaGVpZ2h0CisJCX0KKwkJCisJCXRoaXMuY3VycmVudF9maWxlID0gZmlsZTsKKwkJdGhpcy5yZXNpemVfdG8odGFyZ2V0X3NpemUpOworCX0sLy9zaG93X2ZpbGUKKworCS8vaW1hZ2U6PGltZz4sIG1heHNpemU6eyB3LGggfQorCWdldF9yZXNpemVkX2ltYWdlOmZ1bmN0aW9uKGltYWdlKXsKKworCQl2YXIgbWF4X3NpemU7CisJCXZhciByYXRpbzsKKwkJdmFyIGNoZWNrOworCQkKKwkJdmFyIGlfc2l6ZSA9IHsgdzppbWFnZS5nZXQoJ3dpZHRoJykudG9JbnQoKSwgaDppbWFnZS5nZXQoJ2hlaWdodCcpLnRvSW50KCkgfTsKKwkJCisJCS8vY3V0IG91dCBzb21lIHBpeGVscyB0byBtYWtlIGl0IGJldHRlcgorCQl2YXIgd19zaXplID0gd2luZG93LmdldFNpemUoKTsKKwkJdmFyIG1heF9zaXplID0geyAKKwkJCXc6d19zaXplLngtNjAsIAorCQkJaDp3X3NpemUueS02OC10aGlzLm9wdGlvbnMubWFyZ2luVG9wKjIKKwkJfTsKKworCQl2YXIgbWF4X2RpbSA9IE1hdGgubWF4KCBtYXhfc2l6ZS5oLCBtYXhfc2l6ZS53ICk7CisKKwkJaWYobWF4X2RpbSA9PSBtYXhfc2l6ZS53KXsKKwkJCXJhdGlvID0gbWF4X2RpbS9pX3NpemUudzsKKwkJCWNoZWNrID0gJ2gnOworCQl9IGVsc2UgeworCQkJcmF0aW8gPSBtYXhfZGltL2lfc2l6ZS5oOworCQkJY2hlY2sgPSAndyc7CisJCX0KKwkJCisJCXJhdGlvID0gKHJhdGlvIDw9IDEpID8gcmF0aW8gOiAxOworCQkKKwkJaV9zaXplID0gT2JqZWN0Lm1hcChpX3NpemUsZnVuY3Rpb24odmFsdWUpeyByZXR1cm4gTWF0aC5mbG9vcih2YWx1ZSpyYXRpbyk7IH0pOworCQkKKwkJcmF0aW8gPSAobWF4X3NpemVbY2hlY2tdL2lfc2l6ZVtjaGVja10gPD0gMSkgPyBtYXhfc2l6ZVtjaGVja10vaV9zaXplW2NoZWNrXSA6IDE7CisJCWlfc2l6ZSA9IE9iamVjdC5tYXAoaV9zaXplLGZ1bmN0aW9uKHZhbHVlKXsgcmV0dXJuIE1hdGguZmxvb3IodmFsdWUqcmF0aW8pOyB9KTsKKwkJCisJCWlmKHRoaXMub3B0aW9ucy5hdXRvU2l6ZU1heEhlaWdodCA+IDApeworCQkJcmF0aW8gPSAodGhpcy5vcHRpb25zLmF1dG9TaXplTWF4SGVpZ2h0L2lfc2l6ZS5oZWlnaHQgPCAxKSA/IHRoaXMub3B0aW9ucy5hdXRvU2l6ZU1heEhlaWdodC9pX3NpemUuaGVpZ2h0IDogMTsKKwkJCWlfc2l6ZSA9IE9iamVjdC5tYXAoaV9zaXplLGZ1bmN0aW9uKHZhbHVlKXsgcmV0dXJuIE1hdGguZmxvb3IodmFsdWUqcmF0aW8pOyB9KTsKKwkJfQorCisJCWltYWdlLnNldCh7ICd3aWR0aCc6aV9zaXplLncsICdoZWlnaHQnOmlfc2l6ZS5oIH0pOworCQkKKwkJcmV0dXJuIGltYWdlOworCX0sLy9nZXRfcmVzaXplZF9pbWFnZQorCisJcmVzaXplX3RvOmZ1bmN0aW9uKHRhcmdldF9zaXplKXsKKwkJdGhpcy5tYWluYm94X3Jlc2l6ZV9meC5zdGFydCh7CisJCQknd2lkdGgnOnRhcmdldF9zaXplLncsCisJCQknaGVpZ2h0Jzp0YXJnZXRfc2l6ZS5oLAorCQkJJ21hcmdpbkxlZnQnOi0odGFyZ2V0X3NpemUudG90YWxfdy8yKS5yb3VuZCgpLAorCQkJJ21hcmdpblRvcCc6KHRoaXMub3B0aW9ucy5jZW50ZXJlZCkgPyAtKHRhcmdldF9zaXplLnRvdGFsX2gvMikucm91bmQoKSA6ICcnCisJCX0pOworCX0sCisJCisJc2hvd19sb2FkZXI6ZnVuY3Rpb24oKXsKKwkJdGhpcy5tYWluYm94LmFkZENsYXNzKCdtYm94LWxvYWRpbmcnKTsKKwl9LAorCQorCWhpZGVfbG9hZGVyOmZ1bmN0aW9uKCl7CisJCXRoaXMubWFpbmJveC5yZW1vdmVDbGFzcygnbWJveC1sb2FkaW5nJyk7CisJfSwKKworCWNsZWFyX2NvbnRlbnQ6ZnVuY3Rpb24oKXsKKwkJdGhpcy5maWxlYm94LmVtcHR5KCk7CisJCXRoaXMuY2FwdGlvbi5lbXB0eSgpOworCQl0aGlzLmNvdW50LmVtcHR5KCk7CisJCSQkKHRoaXMuYm90dG9tLHRoaXMuY29udHJvbHMpLnNldFN0eWxlKCdoZWlnaHQnLCcnKTsKKwl9LAorCQorCWhpZGVfYm90dG9tOmZ1bmN0aW9uKCl7CisJCXRoaXMuY2FwdGlvbi5zZXRTdHlsZSgnZGlzcGxheScsJ25vbmUnKTsKKwkJdGhpcy5ib3R0b20uc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCdoaWRkZW4nKTsKKwl9LAorCisJc2hvd19ib3R0b206ZnVuY3Rpb24oKXsKKwkJdGhpcy5jYXB0aW9uLnNldFN0eWxlKCdkaXNwbGF5JywnYmxvY2snKTsKKwkJdGhpcy5ib3R0b20uc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCd2aXNpYmxlJyk7CisJfSwKKwkKKwlhcHBlYXI6ZnVuY3Rpb24oKXsKKwkJaWYoIXRoaXMub3B0aW9ucy5jZW50ZXJlZCl7IHRoaXMubWFpbmJveC5zZXRTdHlsZSgndG9wJyx3aW5kb3cuZ2V0U2Nyb2xsKCkueSt0aGlzLm9wdGlvbnMubWFyZ2luVG9wKTsgfQorCQl0aGlzLm92ZXJsYXlfc2hvd19meC5zdGFydCh0aGlzLm9wdGlvbnMub3ZlcmxheU9wYWNpdHkpOworCX0sCisJCisJZGlzYXBwZWFyOmZ1bmN0aW9uKCl7CisJCXRoaXMuY2FuY2VsX2VmZmVjdHMoKTsKKwkJCisJCXRoaXMuY3VycmVudF9maWxlID0gbnVsbDsKKwkJdGhpcy5yZWFkeSA9IGZhbHNlOworCQl0aGlzLm1vZGUgPSAnc3RhbmRhcmQnOworCisJCSQkKHRoaXMucHJldiwgdGhpcy5uZXh0LCB0aGlzLnBsYXlwYXVzZSwgdGhpcy5jb3VudCkuc2V0U3R5bGUoJ2Rpc3BsYXknLCdub25lJyk7CisJCXRoaXMucGxheXBhdXNlLnNldFN0eWxlKCdiYWNrZ3JvdW5kUG9zaXRpb24nLCcwIDAnKTsKKworCQl0aGlzLmNvdW50LmVtcHR5KCk7CisJCXRoaXMuY2FwdGlvbi5zZXRTdHlsZSgnZGlzcGxheScsJ25vbmUnKS5lbXB0eSgpOworCQl0aGlzLmJvdHRvbS5zZXRTdHlsZSgndmlzaWJpbGl0eScsJ2hpZGRlbicpOworCQkKKwkJLy9UT0RPIGFuY2hlIG9wYWNpdHkgYSAwIHNlIHNpIHVzYSB1biB0d2VlbiBwZXIgaWwgZmlsZQorCQl0aGlzLmZpbGVib3guc2V0U3R5bGUoJ2hlaWdodCcsJycpLmVtcHR5KCk7CisJCQorCQl0aGlzLm1haW5ib3guc2V0U3R5bGVzKHsKKwkJCSdvcGFjaXR5JzowLAorCQkJJ2Rpc3BsYXknOidub25lJywKKwkJCSd3aWR0aCc6dGhpcy5vcHRpb25zLmluaXRpYWxXaWR0aCwKKwkJCSdoZWlnaHQnOnRoaXMub3B0aW9ucy5pbml0aWFsSGVpZ2h0LAorCQkJJ21hcmdpbkxlZnQnOi0odGhpcy5vcHRpb25zLmluaXRpYWxXaWR0aC8yKSwKKwkJCSdtYXJnaW5Ub3AnOih0aGlzLm9wdGlvbnMuY2VudGVyZWQpID8gLSh0aGlzLm9wdGlvbnMuaW5pdGlhbEhlaWdodC8yKSA6ICcnLAorCQkJJ3RvcCc6KHRoaXMub3B0aW9ucy5jZW50ZXJlZCkgPyAnNTAlJyA6ICcnCisJCX0pOworCQkKKwkJdGhpcy5maWxlYm94LnNldFN0eWxlKCdvcGFjaXR5JywwKTsKKwkJCisJCXRoaXMub3ZlcmxheV9oaWRlX2Z4LnN0YXJ0KDApOworCQkKKwkJLy90aGlzLmZpcmVFdmVudCgnZGlzYXBwZWFyJyk7CisJfSwvL2VuZCBkaXNhcHBlYXIKKwkKKwljYW5jZWxfZWZmZWN0czpmdW5jdGlvbigpeworCQlbdGhpcy5tYWluYm94X3Jlc2l6ZV9meCwKKwkJdGhpcy5tYWluYm94X2hpZGVfZngsCisJCXRoaXMubWFpbmJveF9zaG93X2Z4LAorCQl0aGlzLm92ZXJsYXlfaGlkZV9meCwKKwkJdGhpcy5vdmVybGF5X3Nob3dfZngKKwkJXS5lYWNoKGZ1bmN0aW9uKGZ4KXsgZnguY2FuY2VsKCk7IH0pOworCX0sCisJCisJc2V0X21vZGU6ZnVuY3Rpb24oZ2FsbGVyeV90eXBlKXsKKyAJCQorCQl0aGlzLm1vZGUgPSBnYWxsZXJ5X3R5cGU7CisJCXZhciBjbG9zZV93ID0gdGhpcy5jbG9zZS5nZXRDb21wdXRlZFNpemUoKS53aWR0aDsKKwkJdmFyIHByZXZfdyA9IHRoaXMucHJldi5nZXRDb21wdXRlZFNpemUoKS53aWR0aDsKKwkJdmFyIG5leHRfdyA9IHRoaXMubmV4dC5nZXRDb21wdXRlZFNpemUoKS53aWR0aDsKKwkJdmFyIHBsYXlwYXVzZV93ID0gdGhpcy5wbGF5cGF1c2UuZ2V0Q29tcHV0ZWRTaXplKCkud2lkdGg7CisJCXZhciBvZmZzZXQgPSB0aGlzLm1haW5ib3guZ2V0U3R5bGUoJ2JvcmRlci1yaWdodC13aWR0aCcpLnRvSW50KCk7Ly9mb3IgZGVzaWduIHB1cnBvc2VzCisJCQorCQlzd2l0Y2goZ2FsbGVyeV90eXBlKXsKKwkJCWNhc2UgJ2F1dG9wbGF5JzoKKwkJCQkkJCh0aGlzLnBsYXlwYXVzZSx0aGlzLmNsb3NlLHRoaXMubmV4dCx0aGlzLnByZXYsdGhpcy5jb3VudCkuc2V0U3R5bGUoJ2Rpc3BsYXknLCdibG9jaycpOworCQkJCXRoaXMuY29udHJvbHMuc2V0U3R5bGUoJ3dpZHRoJyxjbG9zZV93K3ByZXZfdytuZXh0X3crcGxheXBhdXNlX3crb2Zmc2V0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3NpbmdsZSc6CisJCQkJJCQodGhpcy5wbGF5cGF1c2UsdGhpcy5uZXh0LHRoaXMucHJldix0aGlzLmNvdW50KS5zZXRTdHlsZSgnZGlzcGxheScsJ25vbmUnKTsKKwkJCQl0aGlzLmNvbnRyb2xzLnNldFN0eWxlKCd3aWR0aCcsY2xvc2VfdytvZmZzZXQpOworCQkJCWJyZWFrOworCQkJY2FzZSAnc3RhbmRhcmQnOgorCQkJCSQkKHRoaXMuY2xvc2UsdGhpcy5uZXh0LHRoaXMucHJldix0aGlzLmNvdW50KS5zZXRTdHlsZSgnZGlzcGxheScsJ2Jsb2NrJyk7CisJCQkJdGhpcy5wbGF5cGF1c2Uuc2V0U3R5bGUoJ2Rpc3BsYXknLCdub25lJyk7CisJCQkJdGhpcy5jb250cm9scy5zZXRTdHlsZSgnd2lkdGgnLGNsb3NlX3crcHJldl93K25leHRfdytvZmZzZXQpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm47CisJCX0KKwkKKwkJdGhpcy5jYXB0aW9uLnNldFN0eWxlKCdtYXJnaW4tcmlnaHQnLHRoaXMuY29udHJvbHMuZ2V0Q29tcHV0ZWRTaXplKCkudG90YWxXaWR0aCk7CisJfSwvL2VuZCBzZXRfbW9kZQorCQorCXNldF9wYXVzZWQ6ZnVuY3Rpb24ocGF1c2VkKXsKKwkJdGhpcy5wYXVzZWQgPSBwYXVzZWQ7CisJCXZhciBwb3MgPSAodGhpcy5wYXVzZWQpID8gJzAgLTY2cHgnIDogJyc7CisJCXRoaXMucGxheXBhdXNlLnNldFN0eWxlKCdiYWNrZ3JvdW5kLXBvc2l0aW9uJyxwb3MpOworCX0sCisJCisJdXBkYXRlX2NvdW50OmZ1bmN0aW9uKGluZGV4LGxlbmd0aCl7CisJCXRoaXMuY291bnQuc2V0KCd0ZXh0JyxpbmRleCsnICcrdGhpcy5vcHRpb25zLmltYWdlT2ZUZXh0KycgJytsZW5ndGgpOworCX0sCisKKwlyZXNldE92ZXJsYXlTaXplOmZ1bmN0aW9uKCl7CisJCWlmKHRoaXMub3ZlcmxheS5nZXRTdHlsZSgnb3BhY2l0eScpID09IDApeyByZXR1cm47IH07Ly9yZXNpemUgb25seSBpZiB2aXNpYmxlCisJCXZhciBoID0gd2luZG93LmdldFNjcm9sbFNpemUoKS55K3dpbmRvdy5nZXRTY3JvbGwoKS55OworCQl0aGlzLm92ZXJsYXkuc2V0U3R5bGVzKHsgJ2hlaWdodCc6aCwgJ3RvcCc6LXdpbmRvdy5nZXRTY3JvbGwoKS55IH0pOworCX0sCisJCisJY2xlYXI6ZnVuY3Rpb24oKXsKKwkJdGhpcy5vdmVybGF5LmRlc3Ryb3koKTsKKwkJdGhpcy5tYWluYm94LmRlc3Ryb3koKTsKKwl9CisJCit9KTsvL0VORAorCisKKworCisKKy8vQ2xhc3M6IE1pbGtib3hHYWxsZXJ5CisvL2FyZ3M6IHNvdXJjZSxvcHRpb25zIAorLy8JKnNvdXJjZTogZWxlbWVudCwgZWxlbWVudHMsIGFycmF5CisvLwkqb3B0aW9uczogbmFtZSwgYXV0b3BsYXksIGF1dG9wbGF5X2RlbGF5CisKK3ZhciBNaWxrYm94R2FsbGVyeSA9IG5ldyBDbGFzcyh7CisKKwlJbXBsZW1lbnRzOltPcHRpb25zLEV2ZW50c10sCisKKwlvcHRpb25zOnsvL3NldCBhbGwgdGhlIG9wdGlvbnMgaGVyZQorCQluYW1lOm51bGwsCisJCWF1dG9wbGF5Om51bGwsCisJCWF1dG9wbGF5X2RlbGF5Om51bGwsCisJCXJlbW92ZV90aXRsZTp0cnVlCisJfSwKKworCWluaXRpYWxpemU6ZnVuY3Rpb24oc291cmNlLG9wdGlvbnMpeworCQkKKwkJdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpOworCQkKKwkJdGhpcy5zb3VyY2UgPSBzb3VyY2U7CisJCXRoaXMuZXh0ZXJuYWwgPSBmYWxzZTsKKwkJdGhpcy5pdGVtcyA9IG51bGw7CisJCXRoaXMubmFtZSA9IHRoaXMub3B0aW9ucy5uYW1lOworCQl0aGlzLnR5cGUgPSBudWxsOy8vJ2F1dG9wbGF5Jywnc3RhbmRhcmQnLCdzaW5nbGUnCisJCXRoaXMucHJlcGFyZV9nYWxsZXJ5KCk7CisJCXRoaXMucHJlcGFyZV9lbGVtZW50cygpOworCX0sCisKKwlwcmVwYXJlX2dhbGxlcnk6ZnVuY3Rpb24oKXsKKwkJc3dpdGNoKHR5cGVPZih0aGlzLnNvdXJjZSkpeworCQkJY2FzZSAnZWxlbWVudCc6Ly9zaW5nbGUKKwkJCQlpZih0aGlzLmNoZWNrX2V4dGVuc2lvbih0aGlzLnNvdXJjZS5ocmVmKSl7IHRoaXMuaXRlbXMgPSBbdGhpcy5zb3VyY2VdOyB9CisJCQkJZWxzZXsgYWxlcnQoJ1dyb25nIGZpbGUgZXh0ZW5zaW9uOiAnK3RoaXMuc291cmNlLmhyZWYpOyB9CisJCQkJYnJlYWs7CisJCQljYXNlICdlbGVtZW50cyc6Ly9odG1sCisJCQkJdGhpcy5pdGVtcyA9IHRoaXMuc291cmNlLmZpbHRlcihmdW5jdGlvbihsaW5rKXsgcmV0dXJuIHRoaXMuY2hlY2tfZXh0ZW5zaW9uKGxpbmsuaHJlZik7IH0sdGhpcyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdhcnJheSc6Ly94bWwsIGFycmF5CisJCQkJdGhpcy5pdGVtcyA9IHRoaXMuc291cmNlLmZpbHRlcihmdW5jdGlvbihsaW5rKXsgcmV0dXJuIHRoaXMuY2hlY2tfZXh0ZW5zaW9uKGxpbmsuaHJlZik7IH0sdGhpcyk7CisJCQkJdGhpcy5leHRlcm5hbCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJldHVybjsKKwkJfQorCQkKKwkJaWYodGhpcy5pdGVtcy5sZW5ndGggPT0gMCl7IGFsZXJ0KCdXYXJuaW5nOiBnYWxsZXJ5ICcrdGhpcy5uYW1lKycgaXMgZW1wdHknKTsgfQorCX0sCisJCisJLy90dXJucyBldmVyeXRoaW5nIGludG8gYW4gb2JqZWN0CisJcHJlcGFyZV9lbGVtZW50czpmdW5jdGlvbigpeworCQl0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5tYXAoZnVuY3Rpb24oaXRlbSl7CisJCQl2YXIgc3BsaXR0ZWRfdXJsID0gaXRlbS5ocmVmLnNwbGl0KCc/Jyk7CisJCQl2YXIgb3V0cHV0ID0ge307CisJCQlvdXRwdXQuZWxlbWVudCA9ICh0eXBlT2YoaXRlbSkgPT0gJ2VsZW1lbnQnKSA/IGl0ZW0gOiBudWxsOworCQkJb3V0cHV0LmhyZWYgPSBzcGxpdHRlZF91cmxbMF07CisJCQlvdXRwdXQudmFycyA9IChzcGxpdHRlZF91cmxbMV0pID8gc3BsaXR0ZWRfdXJsWzFdLnBhcnNlUXVlcnlTdHJpbmcoKSA6IG51bGw7CisJCQlvdXRwdXQuc2l6ZSA9IG51bGw7CisJCQlvdXRwdXQuY2FwdGlvbiA9IChvdXRwdXQuZWxlbWVudCkgPyBvdXRwdXQuZWxlbWVudC5nZXQoJ3RpdGxlJykgOiBpdGVtLnRpdGxlOworCQkJaWYodGhpcy5vcHRpb25zLnJlbW92ZV90aXRsZSAmJiBvdXRwdXQuZWxlbWVudCl7IG91dHB1dC5lbGVtZW50LnJlbW92ZVByb3BlcnR5KCd0aXRsZScpIH0KKwkJCQorCQkJdmFyIHNpemVfc3RyaW5nID0gKG91dHB1dC5lbGVtZW50KSA/IG91dHB1dC5lbGVtZW50LmdldCgnZGF0YS1taWxrYm94LXNpemUnKSA6IGl0ZW0uc2l6ZTsKKwkJCWlmKHNpemVfc3RyaW5nKXsgb3V0cHV0LnNpemUgPSBPYmplY3QubWFwKHRoaXMuZ2V0X2l0ZW1fcHJvcHMoc2l6ZV9zdHJpbmcpLGZ1bmN0aW9uKHZhbHVlLGtleSl7IHJldHVybiB2YWx1ZS50b0ludCgpOyB9KTsgfQorCQkJCisJCQl2YXIgZXh0cmFzID0gKG91dHB1dC5lbGVtZW50KSA/IG91dHB1dC5lbGVtZW50LmdldCgnZGF0YS1taWxrYm94LWV4dHJhcycpIDogaXRlbS5leHRyYXM7CisJCQlvdXRwdXQuZXh0cmFzID0gKGV4dHJhcykgPyBleHRyYXMgOiAnJzsKKwkJCQorCQkJcmV0dXJuIG91dHB1dDsKKwkJfSx0aGlzKTsKKwkJCisJCWlmKHRoaXMuaXRlbXMubGVuZ3RoID09IDApIHJldHVybjsKKwkJCisJCXRoaXMudHlwZSA9ICh0aGlzLml0ZW1zLmxlbmd0aCA9PSAxKSA/ICdzaW5nbGUnIDogKHRoaXMub3B0aW9ucy5hdXRvcGxheSkgPyAnYXV0b3BsYXknIDogJ3N0YW5kYXJkJzsKKwl9LAorCQorCWNoZWNrX2V4dGVuc2lvbjpmdW5jdGlvbihzdHJpbmcpeworCQl2YXIgc3BsaXR0ZWQsIHJlZ3VsYXJfZmlsZSwgZHluX3VybDsKKwkJCisJCXNwbGl0dGVkICA9IHN0cmluZy5zcGxpdCgnPycpWzBdOworCQkKKwkJcmVndWxhcl9maWxlID0gc3BsaXR0ZWQudGVzdCgvXC4oZ2lmfGpwZ3xqcGVnfHBuZ3xzd2Z8aHRtbCkkL2kpOworCQlpZighcmVndWxhcl9maWxlKXsgZHluX3VybCA9IHNwbGl0dGVkLnRlc3QoL1wvXGQrJC8pOyB9CisJCQorCQl2YXIgcGFzcyA9IChyZWd1bGFyX2ZpbGUgfHwgZHluX3VybCkgPyB0cnVlIDogZmFsc2U7CisJCQorCQlyZXR1cm4gcGFzczsKKwl9LAorCQorCWdldF9pbmRleF9vZjpmdW5jdGlvbihpdGVtKXsKKwkJdmFyIGluZGV4ID0gKHR5cGVPZihpdGVtKSA9PSAnc3RyaW5nJykgPyB0aGlzLml0ZW1zLmluZGV4T2YodGhpcy5pdGVtcy5maWx0ZXIoZnVuY3Rpb24oaSl7IHJldHVybiBpLmhyZWYgPT09IGl0ZW07IH0pWzBdKSA6IHRoaXMuaXRlbXMuaW5kZXhPZihpdGVtKTsKKwkJcmV0dXJuIHRoaXMuaXRlbXMuaW5kZXhPZihpdGVtKTsKKwl9LAorCQorCWdldF9pdGVtOmZ1bmN0aW9uKGluZGV4KXsKKwkJcmV0dXJuIHRoaXMuaXRlbXNbaW5kZXhdOworCX0sCisJCisJZ2V0X2l0ZW1fcHJvcHM6ZnVuY3Rpb24ocHJvcF9zdHJpbmcpeworCQl2YXIgcHJvcHMgPSB7fTsKKwkJdmFyIHMgPSBwcm9wX3N0cmluZy5zcGxpdCgnLCcpLmVhY2goZnVuY3Rpb24ocCxpKXsKKwkJCXZhciBjbGVhbiA9IHAudHJpbSgpLnNwbGl0KCc6Jyk7CisJCQlwcm9wc1tjbGVhblswXS50cmltKCldID0gY2xlYW5bMV0udHJpbSgpOworCQl9LHRoaXMpOworCQlyZXR1cm4gcHJvcHM7CisJfSwKKwkKKwlyZWZyZXNoOmZ1bmN0aW9uKCl7CisJCXRoaXMudHlwZSA9ICh0aGlzLml0ZW1zLmxlbmd0aCA9PSAxKSA/ICdzaW5nbGUnIDogKHRoaXMub3B0aW9ucy5hdXRvcGxheSkgPyAnYXV0b3BsYXknIDogJ3N0YW5kYXJkJzsKKwl9LAorCQorCWNsZWFyOmZ1bmN0aW9uKCl7CisJCXRoaXMuc291cmNlID0gbnVsbDsKKwkJdGhpcy5pdGVtcyA9IG51bGw7CisJfQorCit9KTsvL2VuZCBNaWxrYm94R2FsbGVyeQorCisKKworLy9DcmVhdGluZyBNaWxrYm94IGluc3RhbmNlOiB5b3UgY2FuIGNvbW1lbnQgdGhpcyBjb2RlIGFuZCBpbnN0YW50aWF0ZSBNaWxrYm94IHNvbWV3aGVyZSBlbHNlIGluc3RlYWQuCitpZiggdHlwZW9mIF9fTUlMS0JPWF9OT19BVVRPSU5JVF9fID09ICd1bmRlZmluZWQnIHx8IF9fTUlMS0JPWF9OT19BVVRPSU5JVF9fID09IGZhbHNlKQoreworICB3aW5kb3cuYWRkRXZlbnQoJ2RvbXJlYWR5JywgZnVuY3Rpb24oKXsgCisgICAgLy9taWxrYm94ID0gbmV3IE1pbGtib3goe292ZXJsYXlPcGFjaXR5OjEsIGZpbGVib3hCb3JkZXJXaWR0aDonMTBweCcsIGZpbGVib3hCb3JkZXJDb2xvcjonI2ZmMDAwMCcsIGZpbGVib3hQYWRkaW5nOicyMHB4JywgY2VudGVyZWQ6dHJ1ZX0pOworICAgIG1pbGtib3ggPSBuZXcgTWlsa2JveCh7IAorICAgICAgLy9hdXRvUGxheTp0cnVlCisgICAgfSk7CisgIH0pOworfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xJQ0VOU0UgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDNhZGZlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xJQ0VOU0UKQEAgLTAsMCArMSwyNCBAQAorTW9vVG9vbHMgRmlsZU1hbmFnZXIgLSBNSVQgTGljZW5zZQ0KKw0KK0NvcHlyaWdodCAoYykgMjAxMSBDaHJpc3RvcGggUG9qZXINCisNCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbg0KK29idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uDQorZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dA0KK3Jlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLA0KK2NvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsDQorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlDQorU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcNCitjb25kaXRpb25zOg0KKw0KK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlDQoraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQorDQorVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsDQorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTDQorT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQNCitOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVA0KK0hPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLA0KK1dIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORw0KK0ZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1INCitPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLmJyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLmJyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YmQyZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvTGFuZ3VhZ2UvTGFuZ3VhZ2UuYnIuanMKQEAgLTAsMCArMSwxMjUgQEAKKy8qDQorU2NyaXB0OiBMYW5ndWFnZS5ici5qcw0KKwlNb29Ub29scyBGaWxlTWFuYWdlciAtIExhbmd1YWdlIFN0cmluZ3MgaW4gQnJhemlsaWFuIFBvcnR1Z3Vlc2UNCisNCitUcmFuc2xhdGlvbjoNCisJW0ZhYmlhbmEgUGlyZXNdKGh0dHA6Ly90d2l0dGVyLmNvbS9uZXJ2b3NpbmhhKQ0KKyovDQorDQorRmlsZU1hbmFnZXIuTGFuZ3VhZ2UuYnIgPSB7DQorCW1vcmU6ICdEZXRhbGhlcycsDQorCXdpZHRoOiAnTGFyZ3VyYTonLA0KKwloZWlnaHQ6ICdBbHR1cmE6JywNCisNCisJb2s6ICdPaycsDQorCW9wZW46ICdTZWxlY2lvbmUgbyBhcnF1aXZvJywNCisJdXBsb2FkOiAnVXBsb2FkJywNCisJY3JlYXRlOiAnQ3JpYXIgcGFzdGEnLA0KKwljcmVhdGVkaXI6ICdQb3IgZmF2b3IgZXNwZWNpZmlxdWUgbyBub21lIGRhIHBhc3RhOicsDQorCWNhbmNlbDogJ0NhbmNlbGFyJywNCisJZXJyb3I6ICdFcnJvJywNCisNCisJaW5mb3JtYXRpb246ICdJbmZvcm1h5+NvJywNCisJdHlwZTogJ1RpcG86JywNCisJc2l6ZTogJ1RhbWFuaG86JywNCisJZGlyOiAnQ2FtaW5obzonLA0KKwltb2RpZmllZDogJ9psdGltYSBtb2RpZmljYefjbzonLA0KKwlwcmV2aWV3OiAnUHLpLXZpc3VhbGl6YefjbycsDQorCWNsb3NlOiAnRmVjaGFyJywNCisJZGVzdHJveTogJ0FwYWdhcicsDQorCWRlc3Ryb3lmaWxlOiAnVGVtIGNlcnRlemEgcXVlIGRlc2VqYSBhcGFnYXIgZXN0ZSBhcnF1aXZvPycsDQorDQorCXJlbmFtZTogJ1Jlbm9tZWFyJywNCisJcmVuYW1lZmlsZTogJ1BvciBmYXZvciBlc3BlY2lmaXF1ZSBvIG5vdm8gbm9tZSBkbyBhcnF1aXZvOicsDQorCXJuX212X2NwOiAnUmVuYW1lL01vdmUvQ29weScsDQorDQorCWRvd25sb2FkOiAnRG93bmxvYWQnLA0KKwlub3ByZXZpZXc6ICc8aT5QcuktdmlzdWFsaXph5+NvIGluZGlzcG9u7XZlbDwvaT4nLA0KKw0KKwl0aXRsZTogJ1TtdHVsbzonLA0KKwlhcnRpc3Q6ICdBcnRpc3RhOicsDQorCWFsYnVtOiAnQWxidW06JywNCisJbGVuZ3RoOiAnVGFtYW5obzonLA0KKwliaXRyYXRlOiAnQml0cmF0ZTonLA0KKw0KKwlkZXNlbGVjdDogJ0Rlc2ZhemVyJywNCisNCisJbm9kZXN0cm95OiAnQXBhZ2FyIGFycXVpdm9zIGVzdOEgZGVzYWJpbGl0YWRvIG5lc3RlIHNlcnZpZG9yLicsDQorDQorCXRvZ2dsZV9zaWRlX2JveGVzOiAnVGh1bWJuYWlsIHZpZXcnLA0KKwl0b2dnbGVfc2lkZV9saXN0OiAnTGlzdCB2aWV3JywNCisJc2hvd19kaXJfdGh1bWJfZ2FsbGVyeTogJ1Nob3cgdGh1bWJuYWlscyBvZiB0aGUgZmlsZXMgaW4gdGhlIHByZXZpZXcgcGFuZScsDQorCWRyYWdfbl9kcm9wOiAnRHJhZyAmIGRyb3AgaGFzIGJlZW4gZW5hYmxlZCBmb3IgdGhpcyBkaXJlY3RvcnknLA0KKwlkcmFnX25fZHJvcF9kaXNhYmxlZDogJ0RyYWcgJiBkcm9wIGhhcyBiZWVuIHRlbXBvcmFyaWx5IGRpc2FibGVkIGZvciB0aGlzIGRpcmVjdG9yeScsDQorCWdvdG9fcGFnZTogJ0dvIHRvIHBhZ2UnLA0KKw0KKwknYmFja2VuZC5kaXNhYmxlZCc6ICdO428g6SBwZXJtaXRpZG8gZW52aWFyIGFycXVpdm9zIG5lc3RlIHNlcnZpZG9yLicsDQorCSdiYWNrZW5kLmF1dGhvcml6ZWQnOiAnVm9j6iBu428gZXN04SBhdXRlbnRpY2FkbyBwYXJhIGVudmlhciBhcnF1aXZvcyBuZXN0ZSBzZXJ2aWRvci4nLA0KKwknYmFja2VuZC5wYXRoJzogJ0EgcGFzdGEgZXNwZWNpZmljYWRhIG7jbyBleGlzdGUuIFBvciBmYXZvciBjb250YXRlIG8gYWRtaW5pc3RyYWRvciBkbyBzaXRlLicsDQorCSdiYWNrZW5kLmV4aXN0cyc6ICdBIHBhc3RhIGVzcGVjaWZpY2FkYSBq4SBleGlzdGUuIFBvciBmYXZvciBjb250YXRlIG8gYWRtaW5pc3RyYWRvciBkbyBzaXRlLicsDQorCSdiYWNrZW5kLm1pbWUnOiAnTyB0aXBvIGRlIGFycXVpdm8gZXNwZWNpZmljYWRvIG7jbyDpIHBlcm1pdGlkby4nLA0KKwknYmFja2VuZC5leHRlbnNpb24nOiAnTyBhcnF1aXZvIGVudmlhZG8g6SBkZSB0aXBvIGRlc2NvbmhlY2lkbyBvdSBwcm9pYmlkby4nLA0KKwknYmFja2VuZC5zaXplJzogJ08gdGFtYW5obyBkbyBhcnF1aXZvIGVudmlhZG8g6SBtdWl0byBncmFuZGUgcGFyYSBzZXIgcHJvY2Vzc2FkbyBuZXN0ZSBzZXJ2aWRvci4gUG9yIGZhdm9yLCBlbnZpZSB1bSBhcnF1aXZvIG1lbm9yLicsDQorCSdiYWNrZW5kLnBhcnRpYWwnOiAnTyBhcnF1aXZvIGVudmlhZG8gZm9pIGNvcnJvbXBpZG8sIHBvciBmYXZvciBlbnZpZSBvIGFycXVpdm8gbm92YW1lbnRlLicsDQorCSdiYWNrZW5kLm5vZmlsZSc6ICdO428gZXhpc3RlIGFycXVpdm8gZXNwZWNpZmljYWRvIHBhcmEgc2VyIGVudmlhZG8uJywNCisJJ2JhY2tlbmQuZGVmYXVsdCc6ICdFcnJvIG5vIGVudmlvIGRvIGFycXVpdm8uJywNCisJJ2JhY2tlbmQucGF0aF9ub3Rfd3JpdGFibGUnOiAnWW91IGRvIG5vdCBoYXZlIHdyaXRlL3VwbG9hZCBwZXJtaXNzaW9ucyBmb3IgdGhpcyBkaXJlY3RvcnkuJywNCisJJ2JhY2tlbmQuZmlsZW5hbWVfbWF5YmVfdG9vX2xhcmdlJzogJ1RoZSBmaWxlbmFtZS9wYXRoIGlzIHByb2JhYmx5IHRvbyBsb25nIGZvciB0aGUgc2VydmVyIGZpbGVzeXN0ZW0uIFBsZWFzZSByZXRyeSB3aXRoIGEgc2hvcnRlciBmaWxlIG5hbWUuJywNCisJJ2JhY2tlbmQuZm10X25vdF9hbGxvd2VkJzogJ1lvdSBhcmUgbm90IGFsbG93ZWQgdG8gdXBsb2FkIHRoaXMgZmlsZSBmb3JtYXQvbmFtZS4nLA0KKwknYmFja2VuZC5yZWFkX2Vycm9yJzogJ0Nhbm5vdCByZWFkIC8gZG93bmxvYWQgdGhlIHNwZWNpZmllZCBmaWxlLicsDQorCSdiYWNrZW5kLnVuaWRlbnRpZmllZF9lcnJvcic6ICdBbiB1bmluZGVudGlmaWVkIGVycm9yIG9jY3VycmVkIHdoaWxlIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgYmFja2VuZCAod2ViIHNlcnZlcikuJywNCisNCisJJ2JhY2tlbmQubm9uZXdmaWxlJzogJ0EgbmV3IG5hbWUgZm9yIHRoZSBmaWxlIHRvIGJlIG1vdmVkIC8gY29waWVkIGlzIG1pc3NpbmcuJywNCisJJ2JhY2tlbmQuY29ycnVwdF9pbWcnOiAnVGhpcyBmaWxlIGlzIGEgbm90IGEgaW1hZ2Ugb3IgYSBjb3JydXB0IGZpbGU6ICcsIC8vIHBhdGgNCisJJ2JhY2tlbmQucmVzaXplX2luZXJyJzogJ1RoaXMgZmlsZSBjb3VsZCBub3QgYmUgcmVzaXplZCBkdWUgdG8gYW4gaW50ZXJuYWwgZXJyb3IuJywNCisJJ2JhY2tlbmQuY29weV9mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgY29weWluZyB0aGUgZmlsZSAvIGRpcmVjdG9yeTogJywgLy8gb2xkbG9jYWxwYXRoIDogbmV3bG9jYWxwYXRoDQorCSdiYWNrZW5kLmRlbGV0ZV9jYWNoZV9lbnRyaWVzX2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gZGVsZXRlIHRoZSBpdGVtIGNhY2hlICh0aHVtYm5haWxzLCBtZXRhZGF0YSknLA0KKwknYmFja2VuZC5ta2Rpcl9mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5OiAnLCAvLyBwYXRoDQorCSdiYWNrZW5kLm1vdmVfZmFpbGVkJzogJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIG1vdmluZyAvIHJlbmFtaW5nIHRoZSBmaWxlIC8gZGlyZWN0b3J5OiAnLCAvLyBvbGRsb2NhbHBhdGggOiBuZXdsb2NhbHBhdGgNCisJJ2JhY2tlbmQucGF0aF90YW1wZXJpbmcnOiAnUGF0aCB0YW1wZXJpbmcgZGV0ZWN0ZWQuJywNCisJJ2JhY2tlbmQucmVhbHBhdGhfZmFpbGVkJzogJ0Nhbm5vdCB0cmFuc2xhdGUgdGhlIGdpdmVuIGZpbGUgc3BlY2lmaWNhdGlvbiB0byBhIHZhbGlkIHN0b3JhZ2UgbG9jYXRpb246ICcsIC8vICRwYXRoDQorCSdiYWNrZW5kLnVubGlua19mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGRlbGV0ZSB0aGUgZmlsZSAvIGRpcmVjdG9yeTogJywgIC8vIHBhdGgNCisNCisJLy8gSW1hZ2UuY2xhc3MucGhwOg0KKwknYmFja2VuZC5wcm9jZXNzX25vZmlsZSc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGRpZCBub3QgcmVjZWl2ZSBhIHZhbGlkIGZpbGUgbG9jYXRpb24gdG8gd29yayBvbi4nLA0KKwknYmFja2VuZC5pbWFnZWNyZWF0ZXRydWVjb2xvcl9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlY3JlYXRldHJ1ZWNvbG9yKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmltYWdlYWxwaGFibGVuZGluZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IGNhbm5vdCBwZXJmb3JtIHRoZSByZXF1aXJlZCBpbWFnZSBhbHBoYSBibGVuZGluZy4nLA0KKwknYmFja2VuZC5pbWFnZWFsbG9jYWxwaGE1MHBjdGdyZXlfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBhbHBoYSBjaGFubmVsIGFuZCB0aGUgNTAlIGJhY2tncm91bmQuJywNCisJJ2JhY2tlbmQuaW1hZ2Vjb2xvcmFsbG9jYXRlYWxwaGFfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBhbHBoYSBjaGFubmVsIGZvciB0aGlzIGNvbG9yIGltYWdlLicsDQorCSdiYWNrZW5kLmltYWdlcm90YXRlX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2Vyb3RhdGUoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2Vjb3B5cmVzYW1wbGVkX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2Vjb3B5cmVzYW1wbGVkKCkgZmFpbGVkLiBJbWFnZSByZXNvbHV0aW9uOiAnLCAvKiB4ICogeSAqLw0KKwknYmFja2VuZC5pbWFnZWNvcHlfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNvcHkoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2VmbGlwX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogY2Fubm90IGZsaXAgdGhlIGltYWdlLicsDQorCSdiYWNrZW5kLmltYWdlanBlZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlanBlZygpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5pbWFnZXBuZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlcG5nKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmltYWdlZ2lmX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2VnaWYoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2VjcmVhdGVfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNyZWF0ZSgpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5jdnQydHJ1ZWNvbG9yX2ZhaWxlZCc6ICdjb252ZXJzaW9uIHRvIFRydWUgQ29sb3IgZmFpbGVkLiBJbWFnZSByZXNvbHV0aW9uOiAnLCAvKiB4ICogeSAqLw0KKwknYmFja2VuZC5ub19pbWFnZWluZm8nOiAnQ29ycnVwdCBpbWFnZSBvciBub3QgYW4gaW1hZ2UgZmlsZSBhdCBhbGwuJywNCisJJ2JhY2tlbmQuaW1nX3dpbGxfbm90X2ZpdCc6ICdTZXJ2ZXIgZXJyb3I6IGltYWdlIGRvZXMgbm90IGZpdCBpbiBhdmFpbGFibGUgUkFNOyBtaW5pbXVtIHJlcXVpcmVkIChlc3RpbWF0ZSk6ICcsIC8qIFhYWCBNQnl0ZXMgKi8NCisJJ2JhY2tlbmQudW5zdXBwb3J0ZWRfaW1nZm10JzogJ3Vuc3VwcG9ydGVkIGltYWdlIGZvcm1hdDogJywgICAgLyoganBlZy9wbmcvZ2lmLy4uLiAqLw0KKw0KKwkvKiBGVSAqLw0KKwl1cGxvYWRlcjogew0KKwkJdW5rbm93bjogJ0Vycm8gZGVzY29uaGVjaWRvJywNCisJCXNpemVMaW1pdE1pbjogJ07jbyDpIHBlcm1pdGlkbyBhbmV4YXIgIjxlbT4ke25hbWV9PC9lbT4iICgke3NpemV9KSwgbyB0YW1hbmhvIG3tbmltbyBwYXJhIG8gYXJxdWl2byDpIGRlIDxzdHJvbmc+JHtzaXplX21pbn08L3N0cm9uZz4hJywNCisJCXNpemVMaW1pdE1heDogJ07jbyDpIHBlcm1pdGlkbyBhbmV4YXIgIjxlbT4ke25hbWV9PC9lbT4iICgke3NpemV9KSwgbyB0YW1hbmhvIG3heGltbyBwYXJhIG8gYXJxdWl2byDpIGRlIDxzdHJvbmc+JHtzaXplX21heH08L3N0cm9uZz4hJywNCisJCW1vZF9zZWN1cml0eTogJ05vIHJlc3BvbnNlIHdhcyBnaXZlbiBmcm9tIHRoZSB1cGxvYWRlciwgdGhpcyBtYXkgbWVhbiB0aGF0ICJtb2Rfc2VjdXJpdHkiIGlzIGFjdGl2ZSBvbiB0aGUgc2VydmVyIGFuZCBvbmUgb2YgdGhlIHJ1bGVzIGluIG1vZF9zZWN1cml0eSBoYXMgY2FuY2VsbGVkIHRoaXMgcmVxdWVzdC4gIElmIHlvdSBjYW4gbm90IGRpc2FibGUgbW9kX3NlY3VyaXR5LCB5b3UgbWF5IG5lZWQgdG8gdXNlIHRoZSBOb0ZsYXNoIFVwbG9hZGVyLicNCisJfSwNCisNCisJZmxhc2g6IHsNCisJCWhpZGRlbjogJ1BhcmEgaGFiaWxpdGFyIG8gdXBsb2FkZXIsIGRlc2Jsb3F1ZWllIGEgZnVu5+NvIGVtIHNldSBicm93c2VyIGUgcmVjYXJyZWd1ZSBhIHDhZ2luYSAodmVqYSBBZGJsb2NrKS4nLA0KKwkJZGlzYWJsZWQ6ICdQYXJhIGhhYmlsaXRhciBvIHVwbG9hZGVyLCBoYWJpbGl0ZSBvIGFycXVpdm8gRmxhc2ggZSByZWNhcnJlZ3VlIGEgcOFnaW5hICh2ZWphIEZsYXNoYmxvY2spLicsDQorCQlmbGFzaDogJ1BhcmEgZW52aWFyIGFycXVpdm9zIOkgbmVjZXNz4XJpbyBpbnN0YWxhciBvIDxhIGhyZWY9Imh0dHA6Ly93d3cuYWRvYmUuY29tL3Nob2Nrd2F2ZS9kb3dubG9hZC9kb3dubG9hZC5jZ2k/UDFfUHJvZF9WZXJzaW9uPVNob2Nrd2F2ZUZsYXNoIj5BZG9iZSBGbGFzaCBQbGF5ZXI8L2E+LicNCisJfSwNCisNCisJcmVzaXplSW1hZ2VzOiAnUmVkaW1lbnNpb25hciBpbWFnZW5zIGdyYW5kZXMgYW8gZW52aWFyJywNCisNCisJc2VyaWFsaXplOiAnU2F2ZSBnYWxsZXJ5JywNCisJZ2FsbGVyeTogew0KKwkJdGV4dDogJ0ltYWdlIGNhcHRpb24nLA0KKwkJc2F2ZTogJ1NhdmUnLA0KKwkJcmVtb3ZlOiAnUmVtb3ZlIGZyb20gZ2FsbGVyeScsDQorCQlkcmFnOiAnRHJhZyBpdGVtcyBoZXJlIHRvIGNyZWF0ZSBhIGdhbGxlcnkuLi4nDQorCX0NCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9MYW5ndWFnZS9MYW5ndWFnZS5jcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9MYW5ndWFnZS9MYW5ndWFnZS5jcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjNiMzI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLmNzLmpzCkBAIC0wLDAgKzEsMTI1IEBACisvKg0KK1NjcmlwdDogTGFuZ3VhZ2UuY3MuanMNCisJTW9vVG9vbHMgRmlsZU1hbmFnZXIgLSBMYW5ndWFnZSBTdHJpbmdzIGluIEN6ZWNoDQorDQorVHJhbnNsYXRpb246DQorCVtNYXTEm2ogR3JhYm92c2vDvV0oaHR0cDovL21ncmFib3Zza3kuaXMtZ2FtZS5jb20pDQorKi8NCisNCitGaWxlTWFuYWdlci5MYW5ndWFnZS5jcyA9IHsNCisJbW9yZTogJ1BvZHJvYm5vc3RpJywNCisJd2lkdGg6ICfFoMOtxZlrYTonLA0KKwloZWlnaHQ6ICdWw73FoWthOicsDQorDQorCW9rOiAnT2snLA0KKwlvcGVuOiAnVnlicmF0IHNvdWJvcicsDQorCXVwbG9hZDogJ05haHLDoXQnLA0KKwljcmVhdGU6ICdWeXR2b8WZaXQgc2xvxb5rdScsDQorCWNyZWF0ZWRpcjogJ1Byb3PDrW0gemFkZWp0ZSBuw6F6ZXYgc2xvxb5reTonLA0KKwljYW5jZWw6ICdTdG9ybm8nLA0KKwllcnJvcjogJ0NoeWJhJywNCisNCisJaW5mb3JtYXRpb246ICdJbmZvcm1hY2UnLA0KKwl0eXBlOiAnVHlwOicsDQorCXNpemU6ICdWZWxpa29zdDonLA0KKwlkaXI6ICdDZXN0YTonLA0KKwltb2RpZmllZDogJ05hcG9zbGVkeSB6bcSbbsSbbm86JywNCisJcHJldmlldzogJ07DoWhsZWQnLA0KKwljbG9zZTogJ1phdsWZw610JywNCisJZGVzdHJveTogJ1NtYXphdCcsDQorCWRlc3Ryb3lmaWxlOiAnVXLEjWl0xJsgY2hjZXRlIHNtYXphdCB0ZW50byBzb3Vib3I/JywNCisNCisJcmVuYW1lOiAnUMWZZWptZW5vdmF0JywNCisJcmVuYW1lZmlsZTogJ1Byb3PDrW0gemFkZWp0ZSBuw6F6ZXYgbm92w6lobyBzb3Vib3J1OicsDQorCXJuX212X2NwOiAnUmVuYW1lL01vdmUvQ29weScsDQorDQorCWRvd25sb2FkOiAnU3TDoWhub3V0JywNCisJbm9wcmV2aWV3OiAnPGk+TsOhaGxlZCBuZW7DrSBkb3N0dXBuw708L2k+JywNCisNCisJdGl0bGU6ICdOw6F6ZXY6JywNCisJYXJ0aXN0OiAnVW3Em2xlYzonLA0KKwlhbGJ1bTogJ0FsYnVtOicsDQorCWxlbmd0aDogJ0TDqWxrYTonLA0KKwliaXRyYXRlOiAnUMWZZW5vc292w6EgcnljaGxvc3Q6JywNCisNCisJZGVzZWxlY3Q6ICdPZHN0cmFuaXQgeiB2w71ixJtydScsDQorDQorCW5vZGVzdHJveTogJ01hesOhbsOtIHNvdWJvcsWvIGplIG5hIHRvbXRvIHNlcnZlcnUgemFrw6F6w6Fuby4nLA0KKw0KKwl0b2dnbGVfc2lkZV9ib3hlczogJ1RodW1ibmFpbCB2aWV3JywNCisJdG9nZ2xlX3NpZGVfbGlzdDogJ0xpc3QgdmlldycsDQorCXNob3dfZGlyX3RodW1iX2dhbGxlcnk6ICdTaG93IHRodW1ibmFpbHMgb2YgdGhlIGZpbGVzIGluIHRoZSBwcmV2aWV3IHBhbmUnLA0KKwlkcmFnX25fZHJvcDogJ0RyYWcgJiBkcm9wIGhhcyBiZWVuIGVuYWJsZWQgZm9yIHRoaXMgZGlyZWN0b3J5JywNCisJZHJhZ19uX2Ryb3BfZGlzYWJsZWQ6ICdEcmFnICYgZHJvcCBoYXMgYmVlbiB0ZW1wb3JhcmlseSBkaXNhYmxlZCBmb3IgdGhpcyBkaXJlY3RvcnknLA0KKwlnb3RvX3BhZ2U6ICdHbyB0byBwYWdlJywNCisNCisJJ2JhY2tlbmQuZGlzYWJsZWQnOiAnTmFocsOhdsOhbsOtIHNvdWJvcsWvIGplIG5hIHRvbXRvIHNlcnZlcnUgemFrw6F6w6Fuby4nLA0KKwknYmFja2VuZC5hdXRob3JpemVkJzogJ05lbcOhdGUgcHLDoXZvIG5haHLDoXZhdCBzb3Vib3J5LicsDQorCSdiYWNrZW5kLnBhdGgnOiAnU3BlY2lmaWtvdmFuw6Egc2xvxb5rYSBwcm8gbmFocsOhdsOhbsOtIG5lZXhpc3R1amUuIFByb3PDrW0ga29udGFrdHVqdGUgc3Byw6F2Y2UgdMSbY2h0byBzdHLDoW5lay4nLA0KKwknYmFja2VuZC5leGlzdHMnOiAnU3BlY2lmaWtvdmFuw70gc291Ym9yIGppxb4gZXhpc3R1amUuIFByb3PDrW0ga29udGFrdHVqdGUgc3Byw6F2Y2UgdMSbY2h0byBzdHLDoW5lay4nLA0KKwknYmFja2VuZC5taW1lJzogJ1NwZWNpZmlrb3ZhbsO9IHR5cCBzb3Vib3J1IG5lbsOtIHBvdm9sZW4uJywNCisJJ2JhY2tlbmQuZXh0ZW5zaW9uJzogJ05haHLDoXZhbsO9IHNvdWJvciBtw6EgbmV6bsOhbW91IG5lYm8gemFrw6F6YW5vdSBwxZnDrXBvbnUuJywNCisJJ2JhY2tlbmQuc2l6ZSc6ICdWZWxpa29zdCBuYWhyw6F2YW7DqWhvIHNvdWJvcnUgamUgcMWZw61sw63FoSB2ZWxrw6EuIFByb3PDrW0gbmFocmFqdGUgbWVuxaHDrSBzb3Vib3IuJywNCisJJ2JhY2tlbmQucGFydGlhbCc6ICdOYWhyw6F2YW7DvSBzb3Vib3IgYnlsIG5haHLDoW4gamVuIHrEjcOhc3RpLiBQcm9zw61tIG5haHJhanRlIGhvIHpub3Z1LicsDQorCSdiYWNrZW5kLm5vZmlsZSc6ICdOZWJ5bCB2eWJyw6FuIMW+w6FkbsO9IHNvdWJvciBwcm8gbmFocsOhbsOtLicsDQorCSdiYWNrZW5kLmRlZmF1bHQnOiAnTsSbY28gc2UgbmVwb3ZlZGxvIHDFmWkgbmFocsOhdsOhbsOtIHNvdWJvcnUuJywNCisJJ2JhY2tlbmQucGF0aF9ub3Rfd3JpdGFibGUnOiAnWW91IGRvIG5vdCBoYXZlIHdyaXRlL3VwbG9hZCBwZXJtaXNzaW9ucyBmb3IgdGhpcyBkaXJlY3RvcnkuJywNCisJJ2JhY2tlbmQuZmlsZW5hbWVfbWF5YmVfdG9vX2xhcmdlJzogJ1RoZSBmaWxlbmFtZS9wYXRoIGlzIHByb2JhYmx5IHRvbyBsb25nIGZvciB0aGUgc2VydmVyIGZpbGVzeXN0ZW0uIFBsZWFzZSByZXRyeSB3aXRoIGEgc2hvcnRlciBmaWxlIG5hbWUuJywNCisJJ2JhY2tlbmQuZm10X25vdF9hbGxvd2VkJzogJ1lvdSBhcmUgbm90IGFsbG93ZWQgdG8gdXBsb2FkIHRoaXMgZmlsZSBmb3JtYXQvbmFtZS4nLA0KKwknYmFja2VuZC5yZWFkX2Vycm9yJzogJ0Nhbm5vdCByZWFkIC8gZG93bmxvYWQgdGhlIHNwZWNpZmllZCBmaWxlLicsDQorCSdiYWNrZW5kLnVuaWRlbnRpZmllZF9lcnJvcic6ICdBbiB1bmluZGVudGlmaWVkIGVycm9yIG9jY3VycmVkIHdoaWxlIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgYmFja2VuZCAod2ViIHNlcnZlcikuJywNCisNCisJJ2JhY2tlbmQubm9uZXdmaWxlJzogJ0EgbmV3IG5hbWUgZm9yIHRoZSBmaWxlIHRvIGJlIG1vdmVkIC8gY29waWVkIGlzIG1pc3NpbmcuJywNCisJJ2JhY2tlbmQuY29ycnVwdF9pbWcnOiAnVGhpcyBmaWxlIGlzIGEgbm90IGEgaW1hZ2Ugb3IgYSBjb3JydXB0IGZpbGU6ICcsIC8vIHBhdGgNCisJJ2JhY2tlbmQucmVzaXplX2luZXJyJzogJ1RoaXMgZmlsZSBjb3VsZCBub3QgYmUgcmVzaXplZCBkdWUgdG8gYW4gaW50ZXJuYWwgZXJyb3IuJywNCisJJ2JhY2tlbmQuY29weV9mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgY29weWluZyB0aGUgZmlsZSAvIGRpcmVjdG9yeTogJywgLy8gb2xkbG9jYWxwYXRoIDogbmV3bG9jYWxwYXRoDQorCSdiYWNrZW5kLmRlbGV0ZV9jYWNoZV9lbnRyaWVzX2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gZGVsZXRlIHRoZSBpdGVtIGNhY2hlICh0aHVtYm5haWxzLCBtZXRhZGF0YSknLA0KKwknYmFja2VuZC5ta2Rpcl9mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5OiAnLCAvLyBwYXRoDQorCSdiYWNrZW5kLm1vdmVfZmFpbGVkJzogJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIG1vdmluZyAvIHJlbmFtaW5nIHRoZSBmaWxlIC8gZGlyZWN0b3J5OiAnLCAvLyBvbGRsb2NhbHBhdGggOiBuZXdsb2NhbHBhdGgNCisJJ2JhY2tlbmQucGF0aF90YW1wZXJpbmcnOiAnUGF0aCB0YW1wZXJpbmcgZGV0ZWN0ZWQuJywNCisJJ2JhY2tlbmQucmVhbHBhdGhfZmFpbGVkJzogJ0Nhbm5vdCB0cmFuc2xhdGUgdGhlIGdpdmVuIGZpbGUgc3BlY2lmaWNhdGlvbiB0byBhIHZhbGlkIHN0b3JhZ2UgbG9jYXRpb246ICcsIC8vICRwYXRoDQorCSdiYWNrZW5kLnVubGlua19mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGRlbGV0ZSB0aGUgZmlsZSAvIGRpcmVjdG9yeTogJywgIC8vIHBhdGgNCisNCisJLy8gSW1hZ2UuY2xhc3MucGhwOg0KKwknYmFja2VuZC5wcm9jZXNzX25vZmlsZSc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGRpZCBub3QgcmVjZWl2ZSBhIHZhbGlkIGZpbGUgbG9jYXRpb24gdG8gd29yayBvbi4nLA0KKwknYmFja2VuZC5pbWFnZWNyZWF0ZXRydWVjb2xvcl9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlY3JlYXRldHJ1ZWNvbG9yKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmltYWdlYWxwaGFibGVuZGluZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IGNhbm5vdCBwZXJmb3JtIHRoZSByZXF1aXJlZCBpbWFnZSBhbHBoYSBibGVuZGluZy4nLA0KKwknYmFja2VuZC5pbWFnZWFsbG9jYWxwaGE1MHBjdGdyZXlfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBhbHBoYSBjaGFubmVsIGFuZCB0aGUgNTAlIGJhY2tncm91bmQuJywNCisJJ2JhY2tlbmQuaW1hZ2Vjb2xvcmFsbG9jYXRlYWxwaGFfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBhbHBoYSBjaGFubmVsIGZvciB0aGlzIGNvbG9yIGltYWdlLicsDQorCSdiYWNrZW5kLmltYWdlcm90YXRlX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2Vyb3RhdGUoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2Vjb3B5cmVzYW1wbGVkX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2Vjb3B5cmVzYW1wbGVkKCkgZmFpbGVkLiBJbWFnZSByZXNvbHV0aW9uOiAnLCAvKiB4ICogeSAqLw0KKwknYmFja2VuZC5pbWFnZWNvcHlfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNvcHkoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2VmbGlwX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogY2Fubm90IGZsaXAgdGhlIGltYWdlLicsDQorCSdiYWNrZW5kLmltYWdlanBlZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlanBlZygpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5pbWFnZXBuZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlcG5nKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmltYWdlZ2lmX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2VnaWYoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2VjcmVhdGVfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNyZWF0ZSgpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5jdnQydHJ1ZWNvbG9yX2ZhaWxlZCc6ICdjb252ZXJzaW9uIHRvIFRydWUgQ29sb3IgZmFpbGVkLiBJbWFnZSByZXNvbHV0aW9uOiAnLCAvKiB4ICogeSAqLw0KKwknYmFja2VuZC5ub19pbWFnZWluZm8nOiAnQ29ycnVwdCBpbWFnZSBvciBub3QgYW4gaW1hZ2UgZmlsZSBhdCBhbGwuJywNCisJJ2JhY2tlbmQuaW1nX3dpbGxfbm90X2ZpdCc6ICdTZXJ2ZXIgZXJyb3I6IGltYWdlIGRvZXMgbm90IGZpdCBpbiBhdmFpbGFibGUgUkFNOyBtaW5pbXVtIHJlcXVpcmVkIChlc3RpbWF0ZSk6ICcsIC8qIFhYWCBNQnl0ZXMgKi8NCisJJ2JhY2tlbmQudW5zdXBwb3J0ZWRfaW1nZm10JzogJ3Vuc3VwcG9ydGVkIGltYWdlIGZvcm1hdDogJywgICAgLyoganBlZy9wbmcvZ2lmLy4uLiAqLw0KKw0KKwkvKiBGVSAqLw0KKwl1cGxvYWRlcjogew0KKwkJdW5rbm93bjogJ05lem7DoW3DoSBjaHliYScsDQorCQlzaXplTGltaXRNaW46ICdOZWx6ZSBwxZlpZGF0IHNvdWJvciDigJ48ZW0+JHtuYW1lfTwvZW0+4oCcICgke3NpemV9KSwgbWluaW3DoWxuw60gcG92b2xlbsOhIHZlbGlrb3N0IHNvdWJvcnUgamUgPHN0cm9uZz4ke3NpemVfbWlufTwvc3Ryb25nPiEnLA0KKwkJc2l6ZUxpbWl0TWF4OiAnTmVsemUgcMWZaWRhdCBzb3Vib3Ig4oCePGVtPiR7bmFtZX08L2VtPuKAnCAoJHtzaXplfSksIG1heGltw6FsbsOtIHBvdm9sZW7DoSB2ZWxpa29zdCBzb3Vib3J1IGplIDxzdHJvbmc+JHtzaXplX21heH08L3N0cm9uZz4hJywNCisJCW1vZF9zZWN1cml0eTogJ05vIHJlc3BvbnNlIHdhcyBnaXZlbiBmcm9tIHRoZSB1cGxvYWRlciwgdGhpcyBtYXkgbWVhbiB0aGF0ICJtb2Rfc2VjdXJpdHkiIGlzIGFjdGl2ZSBvbiB0aGUgc2VydmVyIGFuZCBvbmUgb2YgdGhlIHJ1bGVzIGluIG1vZF9zZWN1cml0eSBoYXMgY2FuY2VsbGVkIHRoaXMgcmVxdWVzdC4gIElmIHlvdSBjYW4gbm90IGRpc2FibGUgbW9kX3NlY3VyaXR5LCB5b3UgbWF5IG5lZWQgdG8gdXNlIHRoZSBOb0ZsYXNoIFVwbG9hZGVyLicNCisJfSwNCisNCisJZmxhc2g6IHsNCisJCWhpZGRlbjogbnVsbCwNCisJCWRpc2FibGVkOiBudWxsLA0KKwkJZmxhc2g6ICdQb2t1ZCBjaGNldGUgbmFocsOhdmF0IHNvdWJvcnksIG11c8OtdGUgbcOtdCBuYWluc3RhbG92YW7DvSA8YSBocmVmPSJodHRwOi8vd3d3LmFkb2JlLmNvbS9zaG9ja3dhdmUvZG93bmxvYWQvZG93bmxvYWQuY2dpP1AxX1Byb2RfVmVyc2lvbj1TaG9ja3dhdmVGbGFzaCI+QWRvYmUgRmxhc2g8L2E+Jw0KKwl9LA0KKw0KKwlyZXNpemVJbWFnZXM6ICdabcSbbsWhaXQgdmVsa8OpIG9icsOhemt5IHDFmWkgbmFocsOhdsOhbsOtJywNCisNCisJc2VyaWFsaXplOiAnU2F2ZSBnYWxsZXJ5JywNCisJZ2FsbGVyeTogew0KKwkJdGV4dDogJ0ltYWdlIGNhcHRpb24nLA0KKwkJc2F2ZTogJ1NhdmUnLA0KKwkJcmVtb3ZlOiAnUmVtb3ZlIGZyb20gZ2FsbGVyeScsDQorCQlkcmFnOiAnRHJhZyBpdGVtcyBoZXJlIHRvIGNyZWF0ZSBhIGdhbGxlcnkuLi4nDQorCX0NCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9MYW5ndWFnZS9MYW5ndWFnZS5kYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9MYW5ndWFnZS9MYW5ndWFnZS5kYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDg3M2IwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLmRhLmpzCkBAIC0wLDAgKzEsMTI1IEBACisvKg0KK1NjcmlwdDogTGFuZ3VhZ2UuZGEuanMNCisJTW9vVG9vbHMgRmlsZU1hbmFnZXIgLSBMYW5ndWFnZSBTdHJpbmdzIGluIERhbmlzaA0KKw0KK1RyYW5zbGF0aW9uOg0KKwlKYW4gRWJzZW4NCisqLw0KKw0KK0ZpbGVNYW5hZ2VyLkxhbmd1YWdlLmRhID0gew0KKwltb3JlOiAnRGV0YWxqZXInLA0KKwl3aWR0aDogJ0JyZWRkZTonLA0KKwloZWlnaHQ6ICdIw7hqZGU6JywNCisNCisJb2s6ICdPaycsDQorCW9wZW46ICdWw6ZsZyBmaWwnLA0KKwl1cGxvYWQ6ICdVcGxvYWQnLA0KKwljcmVhdGU6ICdPcHJldCBtYXBwZScsDQorCWNyZWF0ZWRpcjogJ0FuZ2l2IHZlbmxpZ3N0IG1hcHBlIG5hdm46JywNCisJY2FuY2VsOiAnQW51bGxlcicsDQorCWVycm9yOiAnRmVqbCcsDQorDQorCWluZm9ybWF0aW9uOiAnSW5mb3JtYXRpb24nLA0KKwl0eXBlOiAnVHlwZTonLA0KKwlzaXplOiAnU3TDuHJyZWxzZTonLA0KKwlkaXI6ICdTdGk6JywNCisJbW9kaWZpZWQ6ICdTaWRzdCDDpm5kcmV0OicsDQorCXByZXZpZXc6ICdNaW5pYXR1cmUnLA0KKwljbG9zZTogJ0x1aycsDQorCWRlc3Ryb3k6ICdTbGV0JywNCisJZGVzdHJveWZpbGU6ICdFciBkdSBzaWtrZXIgcMOlIGR1IHZpbCBzbGV0dGUgZGVubmUgZmlsPycsDQorDQorCXJlbmFtZTogJ09tZMO4YicsDQorCXJlbmFtZWZpbGU6ICdTa3JpdiBueXQgZmlsbmF2bjonLA0KKwlybl9tdl9jcDogJ1JlbmFtZS9Nb3ZlL0NvcHknLA0KKw0KKwlkb3dubG9hZDogJ0Rvd25sb2FkJywNCisJbm9wcmV2aWV3OiAnPGk+SW5nZW4gbWluaWF0dXJlIHRpbGfDpm5nZWxpZzwvaT4nLA0KKw0KKwl0aXRsZTogJ1RpdGVsOicsDQorCWFydGlzdDogJ0t1bnN0bmVyOicsDQorCWFsYnVtOiAnQWxidW06JywNCisJbGVuZ3RoOiAnTMOmbmdkZTonLA0KKwliaXRyYXRlOiAnQml0cmF0ZTonLA0KKw0KKwlkZXNlbGVjdDogJ0ZyYXbDpmxnJywNCisNCisJbm9kZXN0cm95OiAnRGV0IGVyIGlra2UgbXVsaWd0IGF0IHNsZXR0ZSBmaWxlciBww6Ugc2VydmVyZW4uJywNCisNCisJdG9nZ2xlX3NpZGVfYm94ZXM6ICdUaHVtYm5haWwgdmlldycsDQorCXRvZ2dsZV9zaWRlX2xpc3Q6ICdMaXN0IHZpZXcnLA0KKwlzaG93X2Rpcl90aHVtYl9nYWxsZXJ5OiAnU2hvdyB0aHVtYm5haWxzIG9mIHRoZSBmaWxlcyBpbiB0aGUgcHJldmlldyBwYW5lJywNCisJZHJhZ19uX2Ryb3A6ICdEcmFnICYgZHJvcCBoYXMgYmVlbiBlbmFibGVkIGZvciB0aGlzIGRpcmVjdG9yeScsDQorCWRyYWdfbl9kcm9wX2Rpc2FibGVkOiAnRHJhZyAmIGRyb3AgaGFzIGJlZW4gdGVtcG9yYXJpbHkgZGlzYWJsZWQgZm9yIHRoaXMgZGlyZWN0b3J5JywNCisJZ290b19wYWdlOiAnR28gdG8gcGFnZScsDQorDQorCSdiYWNrZW5kLmRpc2FibGVkJzogJ0RldCBlciBpa2tlIG11bGlndCBhdCB1cGxvYWRlIGZpbGVyIHDDpSBzZXJ2ZXJlbi4nLA0KKwknYmFja2VuZC5hdXRob3JpemVkJzogJ0R1IGhhciBpa2tlIHJldHRpZ2hlZGVyIHRpbCBhdCB1cGxvYWRlIGZpbGVyLicsDQorCSdiYWNrZW5kLnBhdGgnOiAnVXBsb2FkIG1hcHBlbiBmaW5kZXMgaWtrZS4gS29udGFrdCB2ZW5saWdzdCBzaWRlbnMgYWRtaW5pc3RyYXRvci4nLA0KKwknYmFja2VuZC5leGlzdHMnOiAnVXBsb2FkIG1hcHBlbiBmaW5kZXMgYWxsZXJlZGUuIEtvbnRha3QgdmVubGlnc3Qgc2lkZW5zIGFkbWluaXN0cmF0b3IuJywNCisJJ2JhY2tlbmQubWltZSc6ICdGaWwtdHlwZW4gZXIgaWtrZSB0aWxsYWR0LicsDQorCSdiYWNrZW5kLmV4dGVuc2lvbic6ICdGaWxlbiBlciBhZiBlbiB1a2VuZHQsIGVsbGVyIHVsb3ZsaWcgdHlwZS4nLA0KKwknYmFja2VuZC5zaXplJzogJ0ZpbGVuIGVyIGZvciBzdG9yLCB1cGxvYWQgdmVubGlnc3QgZW4gbWluZHJlIGZpbC4nLA0KKwknYmFja2VuZC5wYXJ0aWFsJzogJ0ZpbGVuIGJsZXYga3VuIGRlbHZpc3QgdXBsb2FkZWQsIHByw7h2IHZlbmxpZ3N0IGlnZW4uJywNCisJJ2JhY2tlbmQubm9maWxlJzogJ0RlciBlciBpa2tlIGFuZ2l2ZXQgbm9nZW4gZmlsIHRpbCB1cGxvYWQuJywNCisJJ2JhY2tlbmQuZGVmYXVsdCc6ICdOb2dldCBnaWsgZ2FsdCBtZWQgZmlsLXVwbG9hZGVyZW4uJywNCisJJ2JhY2tlbmQucGF0aF9ub3Rfd3JpdGFibGUnOiAnWW91IGRvIG5vdCBoYXZlIHdyaXRlL3VwbG9hZCBwZXJtaXNzaW9ucyBmb3IgdGhpcyBkaXJlY3RvcnkuJywNCisJJ2JhY2tlbmQuZmlsZW5hbWVfbWF5YmVfdG9vX2xhcmdlJzogJ1RoZSBmaWxlbmFtZS9wYXRoIGlzIHByb2JhYmx5IHRvbyBsb25nIGZvciB0aGUgc2VydmVyIGZpbGVzeXN0ZW0uIFBsZWFzZSByZXRyeSB3aXRoIGEgc2hvcnRlciBmaWxlIG5hbWUuJywNCisJJ2JhY2tlbmQuZm10X25vdF9hbGxvd2VkJzogJ1lvdSBhcmUgbm90IGFsbG93ZWQgdG8gdXBsb2FkIHRoaXMgZmlsZSBmb3JtYXQvbmFtZS4nLA0KKwknYmFja2VuZC5yZWFkX2Vycm9yJzogJ0Nhbm5vdCByZWFkIC8gZG93bmxvYWQgdGhlIHNwZWNpZmllZCBmaWxlLicsDQorCSdiYWNrZW5kLnVuaWRlbnRpZmllZF9lcnJvcic6ICdBbiB1bmluZGVudGlmaWVkIGVycm9yIG9jY3VycmVkIHdoaWxlIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgYmFja2VuZCAod2ViIHNlcnZlcikuJywNCisNCisJJ2JhY2tlbmQubm9uZXdmaWxlJzogJ0EgbmV3IG5hbWUgZm9yIHRoZSBmaWxlIHRvIGJlIG1vdmVkIC8gY29waWVkIGlzIG1pc3NpbmcuJywNCisJJ2JhY2tlbmQuY29ycnVwdF9pbWcnOiAnVGhpcyBmaWxlIGlzIGEgbm90IGEgaW1hZ2Ugb3IgYSBjb3JydXB0IGZpbGU6ICcsIC8vIHBhdGgNCisJJ2JhY2tlbmQucmVzaXplX2luZXJyJzogJ1RoaXMgZmlsZSBjb3VsZCBub3QgYmUgcmVzaXplZCBkdWUgdG8gYW4gaW50ZXJuYWwgZXJyb3IuJywNCisJJ2JhY2tlbmQuY29weV9mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgY29weWluZyB0aGUgZmlsZSAvIGRpcmVjdG9yeTogJywgLy8gb2xkbG9jYWxwYXRoIDogbmV3bG9jYWxwYXRoDQorCSdiYWNrZW5kLmRlbGV0ZV9jYWNoZV9lbnRyaWVzX2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gZGVsZXRlIHRoZSBpdGVtIGNhY2hlICh0aHVtYm5haWxzLCBtZXRhZGF0YSknLA0KKwknYmFja2VuZC5ta2Rpcl9mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5OiAnLCAvLyBwYXRoDQorCSdiYWNrZW5kLm1vdmVfZmFpbGVkJzogJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIG1vdmluZyAvIHJlbmFtaW5nIHRoZSBmaWxlIC8gZGlyZWN0b3J5OiAnLCAvLyBvbGRsb2NhbHBhdGggOiBuZXdsb2NhbHBhdGgNCisJJ2JhY2tlbmQucGF0aF90YW1wZXJpbmcnOiAnUGF0aCB0YW1wZXJpbmcgZGV0ZWN0ZWQuJywNCisJJ2JhY2tlbmQucmVhbHBhdGhfZmFpbGVkJzogJ0Nhbm5vdCB0cmFuc2xhdGUgdGhlIGdpdmVuIGZpbGUgc3BlY2lmaWNhdGlvbiB0byBhIHZhbGlkIHN0b3JhZ2UgbG9jYXRpb246ICcsIC8vICRwYXRoDQorCSdiYWNrZW5kLnVubGlua19mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGRlbGV0ZSB0aGUgZmlsZSAvIGRpcmVjdG9yeTogJywgIC8vIHBhdGgNCisNCisJLy8gSW1hZ2UuY2xhc3MucGhwOg0KKwknYmFja2VuZC5wcm9jZXNzX25vZmlsZSc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGRpZCBub3QgcmVjZWl2ZSBhIHZhbGlkIGZpbGUgbG9jYXRpb24gdG8gd29yayBvbi4nLA0KKwknYmFja2VuZC5pbWFnZWNyZWF0ZXRydWVjb2xvcl9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlY3JlYXRldHJ1ZWNvbG9yKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmltYWdlYWxwaGFibGVuZGluZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IGNhbm5vdCBwZXJmb3JtIHRoZSByZXF1aXJlZCBpbWFnZSBhbHBoYSBibGVuZGluZy4nLA0KKwknYmFja2VuZC5pbWFnZWFsbG9jYWxwaGE1MHBjdGdyZXlfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBhbHBoYSBjaGFubmVsIGFuZCB0aGUgNTAlIGJhY2tncm91bmQuJywNCisJJ2JhY2tlbmQuaW1hZ2Vjb2xvcmFsbG9jYXRlYWxwaGFfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBhbHBoYSBjaGFubmVsIGZvciB0aGlzIGNvbG9yIGltYWdlLicsDQorCSdiYWNrZW5kLmltYWdlcm90YXRlX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2Vyb3RhdGUoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2Vjb3B5cmVzYW1wbGVkX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2Vjb3B5cmVzYW1wbGVkKCkgZmFpbGVkLiBJbWFnZSByZXNvbHV0aW9uOiAnLCAvKiB4ICogeSAqLw0KKwknYmFja2VuZC5pbWFnZWNvcHlfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNvcHkoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2VmbGlwX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogY2Fubm90IGZsaXAgdGhlIGltYWdlLicsDQorCSdiYWNrZW5kLmltYWdlanBlZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlanBlZygpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5pbWFnZXBuZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlcG5nKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmltYWdlZ2lmX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2VnaWYoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2VjcmVhdGVfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNyZWF0ZSgpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5jdnQydHJ1ZWNvbG9yX2ZhaWxlZCc6ICdjb252ZXJzaW9uIHRvIFRydWUgQ29sb3IgZmFpbGVkLiBJbWFnZSByZXNvbHV0aW9uOiAnLCAvKiB4ICogeSAqLw0KKwknYmFja2VuZC5ub19pbWFnZWluZm8nOiAnQ29ycnVwdCBpbWFnZSBvciBub3QgYW4gaW1hZ2UgZmlsZSBhdCBhbGwuJywNCisJJ2JhY2tlbmQuaW1nX3dpbGxfbm90X2ZpdCc6ICdTZXJ2ZXIgZXJyb3I6IGltYWdlIGRvZXMgbm90IGZpdCBpbiBhdmFpbGFibGUgUkFNOyBtaW5pbXVtIHJlcXVpcmVkIChlc3RpbWF0ZSk6ICcsIC8qIFhYWCBNQnl0ZXMgKi8NCisJJ2JhY2tlbmQudW5zdXBwb3J0ZWRfaW1nZm10JzogJ3Vuc3VwcG9ydGVkIGltYWdlIGZvcm1hdDogJywgICAgLyoganBlZy9wbmcvZ2lmLy4uLiAqLw0KKw0KKwkvKiBGVSAqLw0KKwl1cGxvYWRlcjogew0KKwkJdW5rbm93bjogJ1VrZW5kdCBmZWpsJywNCisJCXNpemVMaW1pdE1pbjogJ0R1IGthbiBpa2tlIHRpbGbDuGplICI8ZW0+JHtuYW1lfTwvZW0+IiAoJHtzaXplfSksIG1pbmRzdCB0aWxsYWR0ZSBmaWxzdMO4cnJlbHNlIGVyIDxzdHJvbmc+JHtzaXplX21pbn08L3N0cm9uZz4hJywNCisJCXNpemVMaW1pdE1heDogJ0R1IGthbiBpa2tlIHRpbGbDuGplICI8ZW0+JHtuYW1lfTwvZW0+IiAoJHtzaXplfSksIGjDuGpzdCB0aWxsYWR0ZSBmaWxzdMO4cnJlbHNlIGVyIDxzdHJvbmc+JHtzaXplX21heH08L3N0cm9uZz4hJywNCisJCW1vZF9zZWN1cml0eTogJ05vIHJlc3BvbnNlIHdhcyBnaXZlbiBmcm9tIHRoZSB1cGxvYWRlciwgdGhpcyBtYXkgbWVhbiB0aGF0ICJtb2Rfc2VjdXJpdHkiIGlzIGFjdGl2ZSBvbiB0aGUgc2VydmVyIGFuZCBvbmUgb2YgdGhlIHJ1bGVzIGluIG1vZF9zZWN1cml0eSBoYXMgY2FuY2VsbGVkIHRoaXMgcmVxdWVzdC4gIElmIHlvdSBjYW4gbm90IGRpc2FibGUgbW9kX3NlY3VyaXR5LCB5b3UgbWF5IG5lZWQgdG8gdXNlIHRoZSBOb0ZsYXNoIFVwbG9hZGVyLicNCisJfSwNCisNCisJZmxhc2g6IHsNCisJCWhpZGRlbjogbnVsbCwNCisJCWRpc2FibGVkOiBudWxsLA0KKwkJZmxhc2g6ICdGb3IgYXQgdXBsb2FkZSBmaWxlciBza2FsIGR1IGluc3RhbGxlcmUgPGEgaHJlZj0iaHR0cDovL3d3dy5hZG9iZS5jb20vc2hvY2t3YXZlL2Rvd25sb2FkL2Rvd25sb2FkLmNnaT9QMV9Qcm9kX1ZlcnNpb249U2hvY2t3YXZlRmxhc2giPkFkb2JlIEZsYXNoPC9hPi4nDQorCX0sDQorDQorCXJlc2l6ZUltYWdlczogJ1NjYWxlciBzdG9yZSBiaWxsZWRlciB2ZWQgdXBsb2FkJywNCisNCisJc2VyaWFsaXplOiAnU2F2ZSBnYWxsZXJ5JywNCisJZ2FsbGVyeTogew0KKwkJdGV4dDogJ0ltYWdlIGNhcHRpb24nLA0KKwkJc2F2ZTogJ1NhdmUnLA0KKwkJcmVtb3ZlOiAnUmVtb3ZlIGZyb20gZ2FsbGVyeScsDQorCQlkcmFnOiAnRHJhZyBpdGVtcyBoZXJlIHRvIGNyZWF0ZSBhIGdhbGxlcnkuLi4nDQorCX0NCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9MYW5ndWFnZS9MYW5ndWFnZS5kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9MYW5ndWFnZS9MYW5ndWFnZS5kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDdiZDYxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLmRlLmpzCkBAIC0wLDAgKzEsMTI1IEBACisvKgorU2NyaXB0OiBMYW5ndWFnZS5kZS5qcworCU1vb1Rvb2xzIEZpbGVNYW5hZ2VyIC0gTGFuZ3VhZ2UgU3RyaW5ncyBpbiBHZXJtYW4KKworVHJhbnNsYXRpb246CisJW0NocmlzdG9waCBQb2plcl0oaHR0cDovL2Nwb2plci5uZXQpCisqLworCitGaWxlTWFuYWdlci5MYW5ndWFnZS5kZSA9IHsKKwltb3JlOiAnRGV0YWlscycsCisJd2lkdGg6ICdCcmVpdGU6JywKKwloZWlnaHQ6ICdIw7ZoZTonLAorCisJb2s6ICdPaycsCisJb3BlbjogJ0RhdGVpIHfDpGhsZW4nLAorCXVwbG9hZDogJ0RhdGVpIGhvY2hsYWRlbicsCisJY3JlYXRlOiAnT3JkbmVyIGVyc3RlbGxlbicsCisJY3JlYXRlZGlyOiAnQml0dGUgZ2liIGVpbmVuIE9yZG5lcm5hbWVuIGVpbjonLAorCWNhbmNlbDogJ0FiYnJlY2hlbicsCisJZXJyb3I6ICdGZWhsZXInLAorCisJaW5mb3JtYXRpb246ICdJbmZvcm1hdGlvbicsCisJdHlwZTogJ1R5cDonLAorCXNpemU6ICdHcsO2w59lOicsCisJZGlyOiAnVmVyemVpY2huaXM6JywKKwltb2RpZmllZDogJ1p1bGV0enQgYmVhcmJlaXRldDonLAorCXByZXZpZXc6ICdWb3JzY2hhdScsCisJY2xvc2U6ICdTY2hsaWXDn2VuJywKKwlkZXN0cm95OiAnTMO2c2NoZW4nLAorCWRlc3Ryb3lmaWxlOiAnQmlzdCBkdSBzaWNoZXIsIGRhc3MgZHUgZGllc2UgRGF0ZWkgbMO2c2NoZW4gbcO2Y2h0ZXN0PycsCisKKwlyZW5hbWU6ICdVbWJlbmVubmVuJywKKwlyZW5hbWVmaWxlOiAnR2liIGVpbmVuIG5ldWVuIERhdGVpbmFtZW4gZWluOicsCisJcm5fbXZfY3A6ICdSZW5hbWUvTW92ZS9Db3B5JywKKworCWRvd25sb2FkOiAnRG93bmxvYWQnLAorCW5vcHJldmlldzogJzxpPktlaW5lIFZvcnNjaGF1IHZlcmbDvGdiYXI8L2k+JywKKworCXRpdGxlOiAnVGl0ZWw6JywKKwlhcnRpc3Q6ICdBcnRpc3Q6JywKKwlhbGJ1bTogJ0FsYnVtOicsCisJbGVuZ3RoOiAnTMOkbmdlOicsCisJYml0cmF0ZTogJ0JpdHJhdGU6JywKKworCWRlc2VsZWN0OiAnRW50ZmVybmVuJywKKworCW5vZGVzdHJveTogJ0RhdGVpZW4gbMO2c2NoZW4gd3VyZGUgYXVmIGRpZXNlbSBTZXJ2ZXIgZGVha3RpdmllcnQuJywKKworCXRvZ2dsZV9zaWRlX2JveGVzOiAnVGh1bWJuYWlsIHZpZXcnLAorCXRvZ2dsZV9zaWRlX2xpc3Q6ICdMaXN0IHZpZXcnLAorCXNob3dfZGlyX3RodW1iX2dhbGxlcnk6ICdTaG93IHRodW1ibmFpbHMgb2YgdGhlIGZpbGVzIGluIHRoZSBwcmV2aWV3IHBhbmUnLAorCWRyYWdfbl9kcm9wOiAnRHJhZyAmIGRyb3AgaGFzIGJlZW4gZW5hYmxlZCBmb3IgdGhpcyBkaXJlY3RvcnknLAorCWRyYWdfbl9kcm9wX2Rpc2FibGVkOiAnRHJhZyAmIGRyb3AgaGFzIGJlZW4gdGVtcG9yYXJpbHkgZGlzYWJsZWQgZm9yIHRoaXMgZGlyZWN0b3J5JywKKwlnb3RvX3BhZ2U6ICdHbyB0byBwYWdlJywKKworCSdiYWNrZW5kLmRpc2FibGVkJzogJ0RpZXNlciBGdW5rdGlvbiB3dXJkZSBhdWYgZGllc2VtIFNlcnZlciBkZWFrdGl2aWVydC4nLAorCSdiYWNrZW5kLmF1dGhvcml6ZWQnOiAnQWt0IGZlaGxnZXNjaGxhZ2VuOiBEdSBoYXN0IGtlaW5lIEdlbmVobWlndW5nLicsCisJJ2JhY2tlbmQucGF0aCc6ICdEZXIgYW5nZWdlYmVuZSBPcmRuZXIgb2RlciBEYXRlaSBleGlzdGllcnQgbmljaHQuIEJpdHRlIGtvbnRha3RpZXJlIGRlbiBBZG1pbmlzdHJhdG9yIGRpZXNlciBXZWJzaXRlLicsCisJJ2JhY2tlbmQuZXhpc3RzJzogJ0RlciBhbmdlZ2ViZW5lIFNwZWljaGVyb3J0IGV4aXN0aWVydCBiZXJlaXRzLiBCaXR0ZSBrb250YWt0aWVyZSBkZW4gQWRtaW5pc3RyYXRvciBkaWVzZXIgV2Vic2l0ZS4nLAorCSdiYWNrZW5kLm1pbWUnOiAnRGVyIGFuZ2VnZWJlbmUgRGF0ZWl0eXAgaXN0IG5pY2h0IGVybGF1YnQuJywKKwknYmFja2VuZC5leHRlbnNpb24nOiAnRGllIERhdGVpIGhhdCBlaW5lIHVuYmVrYW5udGUgb2RlciB1bmVybGF1YnRlIERhdGVpLUVyd2VpdGVydW5nLicsCisJJ2JhY2tlbmQuc2l6ZSc6ICdEaWUgRGF0ZWksIGRpZSBkdSBob2NoZ2VsYWRlbiBoYXN0LCBpc3QgenUgZ3Jvw58gdW0gc2llIGF1ZiBkaWVzZW0gU2VydmVyIHp1IHZlcmFyYmVpdGVuLiBCaXR0ZSBsYWRlIGVpbmUga2xlaW5lcmUgRGF0ZWkgaG9jaC4nLAorCSdiYWNrZW5kLnBhcnRpYWwnOiAnRGllIERhdGVpIHd1cmRlIG51ciB0ZWlsd2Vpc2UgaG9jaGdlbGFkZW4uIEJpdHRlIGxhZGUgc2llIGVybmV1dCBob2NoLicsCisJJ2JhY2tlbmQubm9maWxlJzogJ0VzIHd1cmRlIGtlaW5lIERhdGVpIGFuZ2V6ZWlndC9ob2NoZ2VsYWRlbiBvZGVyIGRlciBEYXRlaSBrb25udGUgbmljaHQgZ2VmdW5kZW4gd2VyZGVuLicsCisJJ2JhY2tlbmQuZGVmYXVsdCc6ICdEZXIgRGF0ZWktVXBsb2FkIGlzdCBmZWhsZ2VzY2hsYWdlbi4nLAorCSdiYWNrZW5kLnBhdGhfbm90X3dyaXRhYmxlJzogJ1lvdSBkbyBub3QgaGF2ZSB3cml0ZS91cGxvYWQgcGVybWlzc2lvbnMgZm9yIHRoaXMgZGlyZWN0b3J5LicsCisJJ2JhY2tlbmQuZmlsZW5hbWVfbWF5YmVfdG9vX2xhcmdlJzogJ1RoZSBmaWxlbmFtZS9wYXRoIGlzIHByb2JhYmx5IHRvbyBsb25nIGZvciB0aGUgc2VydmVyIGZpbGVzeXN0ZW0uIFBsZWFzZSByZXRyeSB3aXRoIGEgc2hvcnRlciBmaWxlIG5hbWUuJywKKwknYmFja2VuZC5mbXRfbm90X2FsbG93ZWQnOiAnWW91IGFyZSBub3QgYWxsb3dlZCB0byB1cGxvYWQgdGhpcyBmaWxlIGZvcm1hdC9uYW1lLicsCisJJ2JhY2tlbmQucmVhZF9lcnJvcic6ICdDYW5ub3QgcmVhZCAvIGRvd25sb2FkIHRoZSBzcGVjaWZpZWQgZmlsZS4nLAorCSdiYWNrZW5kLnVuaWRlbnRpZmllZF9lcnJvcic6ICdBbiB1bmluZGVudGlmaWVkIGVycm9yIG9jY3VycmVkIHdoaWxlIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgYmFja2VuZCAod2ViIHNlcnZlcikuJywKKworCSdiYWNrZW5kLm5vbmV3ZmlsZSc6ICdBIG5ldyBuYW1lIGZvciB0aGUgZmlsZSB0byBiZSBtb3ZlZCAvIGNvcGllZCBpcyBtaXNzaW5nLicsCisJJ2JhY2tlbmQuY29ycnVwdF9pbWcnOiAnVGhpcyBmaWxlIGlzIGEgbm90IGEgaW1hZ2Ugb3IgYSBjb3JydXB0IGZpbGU6ICcsIC8vIHBhdGgKKwknYmFja2VuZC5yZXNpemVfaW5lcnInOiAnVGhpcyBmaWxlIGNvdWxkIG5vdCBiZSByZXNpemVkIGR1ZSB0byBhbiBpbnRlcm5hbCBlcnJvci4nLAorCSdiYWNrZW5kLmNvcHlfZmFpbGVkJzogJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGNvcHlpbmcgdGhlIGZpbGUgLyBkaXJlY3Rvcnk6ICcsIC8vIG9sZGxvY2FscGF0aCA6IG5ld2xvY2FscGF0aAorCSdiYWNrZW5kLmRlbGV0ZV9jYWNoZV9lbnRyaWVzX2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gZGVsZXRlIHRoZSBpdGVtIGNhY2hlICh0aHVtYm5haWxzLCBtZXRhZGF0YSknLAorCSdiYWNrZW5kLm1rZGlyX2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gY3JlYXRlIHRoZSBkaXJlY3Rvcnk6ICcsIC8vIHBhdGgKKwknYmFja2VuZC5tb3ZlX2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBtb3ZpbmcgLyByZW5hbWluZyB0aGUgZmlsZSAvIGRpcmVjdG9yeTogJywgLy8gb2xkbG9jYWxwYXRoIDogbmV3bG9jYWxwYXRoCisJJ2JhY2tlbmQucGF0aF90YW1wZXJpbmcnOiAnUGF0aCB0YW1wZXJpbmcgZGV0ZWN0ZWQuJywKKwknYmFja2VuZC5yZWFscGF0aF9mYWlsZWQnOiAnQ2Fubm90IHRyYW5zbGF0ZSB0aGUgZ2l2ZW4gZmlsZSBzcGVjaWZpY2F0aW9uIHRvIGEgdmFsaWQgc3RvcmFnZSBsb2NhdGlvbjogJywgLy8gJHBhdGgKKwknYmFja2VuZC51bmxpbmtfZmFpbGVkJzogJ0FuIGVycm9yIG9jY3VycmVkIHdoZW4gYXR0ZW1wdGluZyB0byBkZWxldGUgdGhlIGZpbGUgLyBkaXJlY3Rvcnk6ICcsICAvLyBwYXRoCisKKwkvLyBJbWFnZS5jbGFzcy5waHA6CisJJ2JhY2tlbmQucHJvY2Vzc19ub2ZpbGUnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBkaWQgbm90IHJlY2VpdmUgYSB2YWxpZCBmaWxlIGxvY2F0aW9uIHRvIHdvcmsgb24uJywKKwknYmFja2VuZC5pbWFnZWNyZWF0ZXRydWVjb2xvcl9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlY3JlYXRldHJ1ZWNvbG9yKCkgZmFpbGVkLicsCisJJ2JhY2tlbmQuaW1hZ2VhbHBoYWJsZW5kaW5nX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogY2Fubm90IHBlcmZvcm0gdGhlIHJlcXVpcmVkIGltYWdlIGFscGhhIGJsZW5kaW5nLicsCisJJ2JhY2tlbmQuaW1hZ2VhbGxvY2FscGhhNTBwY3RncmV5X2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogY2Fubm90IGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgYWxwaGEgY2hhbm5lbCBhbmQgdGhlIDUwJSBiYWNrZ3JvdW5kLicsCisJJ2JhY2tlbmQuaW1hZ2Vjb2xvcmFsbG9jYXRlYWxwaGFfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBhbHBoYSBjaGFubmVsIGZvciB0aGlzIGNvbG9yIGltYWdlLicsCisJJ2JhY2tlbmQuaW1hZ2Vyb3RhdGVfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZXJvdGF0ZSgpIGZhaWxlZC4nLAorCSdiYWNrZW5kLmltYWdlY29weXJlc2FtcGxlZF9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlY29weXJlc2FtcGxlZCgpIGZhaWxlZC4gSW1hZ2UgcmVzb2x1dGlvbjogJywgLyogeCAqIHkgKi8KKwknYmFja2VuZC5pbWFnZWNvcHlfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNvcHkoKSBmYWlsZWQuJywKKwknYmFja2VuZC5pbWFnZWZsaXBfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgZmxpcCB0aGUgaW1hZ2UuJywKKwknYmFja2VuZC5pbWFnZWpwZWdfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWpwZWcoKSBmYWlsZWQuJywKKwknYmFja2VuZC5pbWFnZXBuZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlcG5nKCkgZmFpbGVkLicsCisJJ2JhY2tlbmQuaW1hZ2VnaWZfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWdpZigpIGZhaWxlZC4nLAorCSdiYWNrZW5kLmltYWdlY3JlYXRlX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2VjcmVhdGUoKSBmYWlsZWQuJywKKwknYmFja2VuZC5jdnQydHJ1ZWNvbG9yX2ZhaWxlZCc6ICdjb252ZXJzaW9uIHRvIFRydWUgQ29sb3IgZmFpbGVkLiBJbWFnZSByZXNvbHV0aW9uOiAnLCAvKiB4ICogeSAqLworCSdiYWNrZW5kLm5vX2ltYWdlaW5mbyc6ICdDb3JydXB0IGltYWdlIG9yIG5vdCBhbiBpbWFnZSBmaWxlIGF0IGFsbC4nLAorCSdiYWNrZW5kLmltZ193aWxsX25vdF9maXQnOiAnU2VydmVyIGVycm9yOiBpbWFnZSBkb2VzIG5vdCBmaXQgaW4gYXZhaWxhYmxlIFJBTTsgbWluaW11bSByZXF1aXJlZCAoZXN0aW1hdGUpOiAnLCAvKiBYWFggTUJ5dGVzICovCisJJ2JhY2tlbmQudW5zdXBwb3J0ZWRfaW1nZm10JzogJ3Vuc3VwcG9ydGVkIGltYWdlIGZvcm1hdDogJywgICAgLyoganBlZy9wbmcvZ2lmLy4uLiAqLworCisJLyogRlUgKi8KKwl1cGxvYWRlcjogeworCQl1bmtub3duOiAnVW5iZWthbm50ZXIgRmVobGVyJywKKwkJc2l6ZUxpbWl0TWluOiAnRGllIERhdGVpICI8ZW0+JHtuYW1lfTwvZW0+IiAoJHtzaXplfSksIGlzdCB6dSBrbGVpbi4gTWluaW1hbGRhdGVpZ3LDtsOfZTogPHN0cm9uZz4ke3NpemVfbWlufTwvc3Ryb25nPiEnLAorCQlzaXplTGltaXRNYXg6ICdEaWUgRGF0ZWkgIjxlbT4ke25hbWV9PC9lbT4iICgke3NpemV9KSwgaXN0IHp1IGdyb8OfLiBEYXRlaWdyw7bDn2VuLUxpbWl0OiA8c3Ryb25nPiR7c2l6ZV9tYXh9PC9zdHJvbmc+IScsCisJCW1vZF9zZWN1cml0eTogJ05vIHJlc3BvbnNlIHdhcyBnaXZlbiBmcm9tIHRoZSB1cGxvYWRlciwgdGhpcyBtYXkgbWVhbiB0aGF0ICJtb2Rfc2VjdXJpdHkiIGlzIGFjdGl2ZSBvbiB0aGUgc2VydmVyIGFuZCBvbmUgb2YgdGhlIHJ1bGVzIGluIG1vZF9zZWN1cml0eSBoYXMgY2FuY2VsbGVkIHRoaXMgcmVxdWVzdC4gIElmIHlvdSBjYW4gbm90IGRpc2FibGUgbW9kX3NlY3VyaXR5LCB5b3UgbWF5IG5lZWQgdG8gdXNlIHRoZSBOb0ZsYXNoIFVwbG9hZGVyLicKKwl9LAorCisJZmxhc2g6IHsKKwkJaGlkZGVuOiAnVW0gZGVuIFVwbG9hZGVyIGJlbnV0emVuIHp1IGvDtm5uZW4sIG11c3MgZXIgaW0gQnJvd3NlciBmcmVpZ2VnZWJlbiB3ZXJkZW4gdW5kIGRpZSBTZWl0ZSBtdXNzIG5ldSBnZWxhZGVuIHdlcmRlbiAoQWRibG9jaykuJywKKwkJZGlzYWJsZWQ6ICdVbSBkZW4gVXBsb2FkZXIgYmVudXR6ZW4genUga8O2bm5lbiwgbXVzcyBkaWUgZ2VibG9ja3RlIEZsYXNoIERhdGVpIGZyZWlnZWdlYmVuIHdlcmRlbiB1bmQgZGllIFNlaXRlIG11c3MgbmV1IGdlbGFkZW4gd2VyZGVuIChGbGFzaGJsb2NrKS4nLAorCQlmbGFzaDogJ1VtIERhdGVpZW4gaG9jaHp1bGFkZW4gbXVzcyA8YSBocmVmPSJodHRwOi8vd3d3LmFkb2JlLmNvbS9zaG9ja3dhdmUvZG93bmxvYWQvZG93bmxvYWQuY2dpP1AxX1Byb2RfVmVyc2lvbj1TaG9ja3dhdmVGbGFzaCI+QWRvYmUgRmxhc2g8L2E+IGluc3RhbGxpZXJ0IHdlcmRlbi4nCisJfSwKKworCXJlc2l6ZUltYWdlczogJ0dyb8OfZSBCaWxkZXIgYmVpIFVwbG9hZCB2ZXJrbGVpbmVybicsCisKKwlzZXJpYWxpemU6ICdHYWxlcmllIHNwZWljaGVybicsCisJZ2FsbGVyeTogeworCQl0ZXh0OiAnQmlsZHRleHQnLAorCQlzYXZlOiAnU3BlaWNoZXJuJywKKwkJcmVtb3ZlOiAnRW50ZmVybmVuJywKKwkJZHJhZzogJ1ZlcnNjaGllYmUgQmlsZGVyIGluIGRpZXNlbiBCZXJlaWNoIHVtIGVpbmUgR2FsZXJpZSB6dSBlcnN0ZWxsZW4uLi4nCisJfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvTGFuZ3VhZ2UvTGFuZ3VhZ2UuZW4uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvTGFuZ3VhZ2UvTGFuZ3VhZ2UuZW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg3YTA4NQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9MYW5ndWFnZS9MYW5ndWFnZS5lbi5qcwpAQCAtMCwwICsxLDEyNSBAQAorLyoKK1NjcmlwdDogTGFuZ3VhZ2UuZW4uanMKKwlNb29Ub29scyBGaWxlTWFuYWdlciAtIExhbmd1YWdlIFN0cmluZ3MgaW4gRW5nbGlzaAorCitUcmFuc2xhdGlvbjoKKwlbQ2hyaXN0b3BoIFBvamVyXShodHRwOi8vY3BvamVyLm5ldCkKKyovCisKK0ZpbGVNYW5hZ2VyLkxhbmd1YWdlLmVuID0geworCW1vcmU6ICdEZXRhaWxzJywKKwl3aWR0aDogJ1dpZHRoOicsCisJaGVpZ2h0OiAnSGVpZ2h0OicsCisKKwlvazogJ09rJywKKwlvcGVuOiAnU2VsZWN0IGZpbGUnLAorCXVwbG9hZDogJ1VwbG9hZCcsCisJY3JlYXRlOiAnQ3JlYXRlIGZvbGRlcicsCisJY3JlYXRlZGlyOiAnUGxlYXNlIHNwZWNpZnkgYSBmb2xkZXIgbmFtZTonLAorCWNhbmNlbDogJ0NhbmNlbCcsCisJZXJyb3I6ICdFcnJvcicsCisKKwlpbmZvcm1hdGlvbjogJ0luZm9ybWF0aW9uJywKKwl0eXBlOiAnVHlwZTonLAorCXNpemU6ICdTaXplOicsCisJZGlyOiAnUGF0aDonLAorCW1vZGlmaWVkOiAnTGFzdCBtb2RpZmllZDonLAorCXByZXZpZXc6ICdQcmV2aWV3JywKKwljbG9zZTogJ0Nsb3NlJywKKwlkZXN0cm95OiAnRGVsZXRlJywKKwlkZXN0cm95ZmlsZTogJ0FyZSB5b3Ugc3VyZSB0byBkZWxldGUgdGhpcyBmaWxlPycsCisKKwlyZW5hbWU6ICdSZW5hbWUnLAorCXJlbmFtZWZpbGU6ICdQbGVhc2UgZW50ZXIgYSBuZXcgZmlsZSBuYW1lOicsCisJcm5fbXZfY3A6ICdSZW5hbWUvTW92ZS9Db3B5JywKKworCWRvd25sb2FkOiAnRG93bmxvYWQnLAorCW5vcHJldmlldzogJzxpPk5vIHByZXZpZXcgYXZhaWxhYmxlPC9pPicsCisKKwl0aXRsZTogJ1RpdGxlOicsCisJYXJ0aXN0OiAnQXJ0aXN0OicsCisJYWxidW06ICdBbGJ1bTonLAorCWxlbmd0aDogJ0xlbmd0aDonLAorCWJpdHJhdGU6ICdCaXRyYXRlOicsCisKKwlkZXNlbGVjdDogJ0Rlc2VsZWN0JywKKworCW5vZGVzdHJveTogJ0RlbGV0aW5nIGZpbGVzIGhhcyBiZWVuIGRpc2FibGVkIG9uIHRoaXMgU2VydmVyLicsCisKKwl0b2dnbGVfc2lkZV9ib3hlczogJ1RodW1ibmFpbCB2aWV3JywKKwl0b2dnbGVfc2lkZV9saXN0OiAnTGlzdCB2aWV3JywKKwlzaG93X2Rpcl90aHVtYl9nYWxsZXJ5OiAnU2hvdyB0aHVtYm5haWxzIG9mIHRoZSBmaWxlcyBpbiB0aGUgcHJldmlldyBwYW5lJywKKwlkcmFnX25fZHJvcDogJ0RyYWcgJiBkcm9wIGhhcyBiZWVuIGVuYWJsZWQgZm9yIHRoaXMgZGlyZWN0b3J5JywKKwlkcmFnX25fZHJvcF9kaXNhYmxlZDogJ0RyYWcgJiBkcm9wIGhhcyBiZWVuIHRlbXBvcmFyaWx5IGRpc2FibGVkIGZvciB0aGlzIGRpcmVjdG9yeScsCisJZ290b19wYWdlOiAnR28gdG8gcGFnZScsCisKKwknYmFja2VuZC5kaXNhYmxlZCc6ICdUaGlzIG9wZXJhdGlvbiBoYXMgYmVlbiBkaXNhYmxlZCBvbiB0aGlzIFNlcnZlci4nLAorCSdiYWNrZW5kLmF1dGhvcml6ZWQnOiAnWW91IGFyZSBub3QgYXV0aG9yaXplZCB0byBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uLicsCisJJ2JhY2tlbmQucGF0aCc6ICdUaGUgc3BlY2lmaWVkIEZvbGRlciBkb2VzIG5vdCBleGlzdC4gUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3Igb2YgdGhpcyBXZWJzaXRlLicsCisJJ2JhY2tlbmQuZXhpc3RzJzogJ1RoZSBzcGVjaWZpZWQgTG9jYXRpb24gZG9lcyBhbHJlYWR5IGV4aXN0LiBQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvciBvZiB0aGlzIFdlYnNpdGUuJywKKwknYmFja2VuZC5taW1lJzogJ1RoZSBzcGVjaWZpZWQgZmlsZS10eXBlIGlzIG5vdCBhbGxvd2VkLicsCisJJ2JhY2tlbmQuZXh0ZW5zaW9uJzogJ1RoZSB1cGxvYWRlZCBmaWxlIGhhcyBhbiB1bmtub3duIG9yIGZvcmJpZGRlbiBmaWxlIGV4dGVuc2lvbi4nLAorCSdiYWNrZW5kLnNpemUnOiAnVGhlIHNpemUgb2YgdGhlIGZpbGUgeW91IHVwbG9hZGVkIGlzIHRvbyBiaWcgdG8gYmUgcHJvY2Vzc2VkIG9uIHRoaXMgc2VydmVyLiBQbGVhc2UgdXBsb2FkIGEgc21hbGxlciBmaWxlLicsCisJJ2JhY2tlbmQucGFydGlhbCc6ICdUaGUgZmlsZSB5b3UgdXBsb2FkZWQgd2FzIG9ubHkgcGFydGlhbGx5IHVwbG9hZGVkLCBwbGVhc2UgdXBsb2FkIHRoZSBmaWxlIGFnYWluLicsCisJJ2JhY2tlbmQubm9maWxlJzogJ1RoZXJlIHdhcyBubyBmaWxlIHNwZWNpZmllZCBvciB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdC4nLAorCSdiYWNrZW5kLmRlZmF1bHQnOiAnU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgRmlsZS1VcGxvYWQuJywKKwknYmFja2VuZC5wYXRoX25vdF93cml0YWJsZSc6ICdZb3UgZG8gbm90IGhhdmUgd3JpdGUvdXBsb2FkIHBlcm1pc3Npb25zIGZvciB0aGlzIGRpcmVjdG9yeS4nLAorCSdiYWNrZW5kLmZpbGVuYW1lX21heWJlX3Rvb19sYXJnZSc6ICdUaGUgZmlsZW5hbWUvcGF0aCBpcyBwcm9iYWJseSB0b28gbG9uZyBmb3IgdGhlIHNlcnZlciBmaWxlc3lzdGVtLiBQbGVhc2UgcmV0cnkgd2l0aCBhIHNob3J0ZXIgZmlsZSBuYW1lLicsCisJJ2JhY2tlbmQuZm10X25vdF9hbGxvd2VkJzogJ1lvdSBhcmUgbm90IGFsbG93ZWQgdG8gdXBsb2FkIHRoaXMgZmlsZSBmb3JtYXQvbmFtZS4nLAorCSdiYWNrZW5kLnJlYWRfZXJyb3InOiAnQ2Fubm90IHJlYWQgLyBkb3dubG9hZCB0aGUgc3BlY2lmaWVkIGZpbGUuJywKKwknYmFja2VuZC51bmlkZW50aWZpZWRfZXJyb3InOiAnQW4gdW5pbmRlbnRpZmllZCBlcnJvciBvY2N1cnJlZCB3aGlsZSBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGJhY2tlbmQgKHdlYiBzZXJ2ZXIpLicsCisKKwknYmFja2VuZC5ub25ld2ZpbGUnOiAnQSBuZXcgbmFtZSBmb3IgdGhlIGZpbGUgdG8gYmUgbW92ZWQgLyBjb3BpZWQgaXMgbWlzc2luZy4nLAorCSdiYWNrZW5kLmNvcnJ1cHRfaW1nJzogJ1RoaXMgZmlsZSBpcyBhIG5vdCBhIGltYWdlIG9yIGEgY29ycnVwdCBmaWxlOiAnLCAvLyBwYXRoCisJJ2JhY2tlbmQucmVzaXplX2luZXJyJzogJ1RoaXMgZmlsZSBjb3VsZCBub3QgYmUgcmVzaXplZCBkdWUgdG8gYW4gaW50ZXJuYWwgZXJyb3IuJywKKwknYmFja2VuZC5jb3B5X2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBjb3B5aW5nIHRoZSBmaWxlIC8gZGlyZWN0b3J5OiAnLCAvLyBvbGRsb2NhbHBhdGggOiBuZXdsb2NhbHBhdGgKKwknYmFja2VuZC5kZWxldGVfY2FjaGVfZW50cmllc19mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGRlbGV0ZSB0aGUgaXRlbSBjYWNoZSAodGh1bWJuYWlscywgbWV0YWRhdGEpJywKKwknYmFja2VuZC5ta2Rpcl9mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5OiAnLCAvLyBwYXRoCisJJ2JhY2tlbmQubW92ZV9mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbW92aW5nIC8gcmVuYW1pbmcgdGhlIGZpbGUgLyBkaXJlY3Rvcnk6ICcsIC8vIG9sZGxvY2FscGF0aCA6IG5ld2xvY2FscGF0aAorCSdiYWNrZW5kLnBhdGhfdGFtcGVyaW5nJzogJ1BhdGggdGFtcGVyaW5nIGRldGVjdGVkLicsCisJJ2JhY2tlbmQucmVhbHBhdGhfZmFpbGVkJzogJ0Nhbm5vdCB0cmFuc2xhdGUgdGhlIGdpdmVuIGZpbGUgc3BlY2lmaWNhdGlvbiB0byBhIHZhbGlkIHN0b3JhZ2UgbG9jYXRpb246ICcsIC8vICRwYXRoCisJJ2JhY2tlbmQudW5saW5rX2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gZGVsZXRlIHRoZSBmaWxlIC8gZGlyZWN0b3J5OiAnLCAgLy8gcGF0aAorCisJLy8gSW1hZ2UuY2xhc3MucGhwOgorCSdiYWNrZW5kLnByb2Nlc3Nfbm9maWxlJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZGlkIG5vdCByZWNlaXZlIGEgdmFsaWQgZmlsZSBsb2NhdGlvbiB0byB3b3JrIG9uLicsCisJJ2JhY2tlbmQuaW1hZ2VjcmVhdGV0cnVlY29sb3JfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNyZWF0ZXRydWVjb2xvcigpIGZhaWxlZC4nLAorCSdiYWNrZW5kLmltYWdlYWxwaGFibGVuZGluZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IGNhbm5vdCBwZXJmb3JtIHRoZSByZXF1aXJlZCBpbWFnZSBhbHBoYSBibGVuZGluZy4nLAorCSdiYWNrZW5kLmltYWdlYWxsb2NhbHBoYTUwcGN0Z3JleV9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IGNhbm5vdCBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGFscGhhIGNoYW5uZWwgYW5kIHRoZSA1MCUgYmFja2dyb3VuZC4nLAorCSdiYWNrZW5kLmltYWdlY29sb3JhbGxvY2F0ZWFscGhhX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogY2Fubm90IGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgYWxwaGEgY2hhbm5lbCBmb3IgdGhpcyBjb2xvciBpbWFnZS4nLAorCSdiYWNrZW5kLmltYWdlcm90YXRlX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2Vyb3RhdGUoKSBmYWlsZWQuJywKKwknYmFja2VuZC5pbWFnZWNvcHlyZXNhbXBsZWRfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNvcHlyZXNhbXBsZWQoKSBmYWlsZWQuIEltYWdlIHJlc29sdXRpb246ICcsIC8qIHggKiB5ICovCisJJ2JhY2tlbmQuaW1hZ2Vjb3B5X2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2Vjb3B5KCkgZmFpbGVkLicsCisJJ2JhY2tlbmQuaW1hZ2VmbGlwX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogY2Fubm90IGZsaXAgdGhlIGltYWdlLicsCisJJ2JhY2tlbmQuaW1hZ2VqcGVnX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2VqcGVnKCkgZmFpbGVkLicsCisJJ2JhY2tlbmQuaW1hZ2VwbmdfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZXBuZygpIGZhaWxlZC4nLAorCSdiYWNrZW5kLmltYWdlZ2lmX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2VnaWYoKSBmYWlsZWQuJywKKwknYmFja2VuZC5pbWFnZWNyZWF0ZV9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlY3JlYXRlKCkgZmFpbGVkLicsCisJJ2JhY2tlbmQuY3Z0MnRydWVjb2xvcl9mYWlsZWQnOiAnY29udmVyc2lvbiB0byBUcnVlIENvbG9yIGZhaWxlZC4gSW1hZ2UgcmVzb2x1dGlvbjogJywgLyogeCAqIHkgKi8KKwknYmFja2VuZC5ub19pbWFnZWluZm8nOiAnQ29ycnVwdCBpbWFnZSBvciBub3QgYW4gaW1hZ2UgZmlsZSBhdCBhbGwuJywKKwknYmFja2VuZC5pbWdfd2lsbF9ub3RfZml0JzogJ1NlcnZlciBlcnJvcjogaW1hZ2UgZG9lcyBub3QgZml0IGluIGF2YWlsYWJsZSBSQU07IG1pbmltdW0gcmVxdWlyZWQgKGVzdGltYXRlKTogJywgLyogWFhYIE1CeXRlcyAqLworCSdiYWNrZW5kLnVuc3VwcG9ydGVkX2ltZ2ZtdCc6ICd1bnN1cHBvcnRlZCBpbWFnZSBmb3JtYXQ6ICcsICAgIC8qIGpwZWcvcG5nL2dpZi8uLi4gKi8KKworCS8qIEZVICovCisJdXBsb2FkZXI6IHsKKwkJdW5rbm93bjogJ1Vua25vd24gRXJyb3InLAorCQlzaXplTGltaXRNaW46ICdZb3UgY2FuIG5vdCBhdHRhY2ggIjxlbT4ke25hbWV9PC9lbT4iICgke3NpemV9KSwgdGhlIGZpbGUgc2l6ZSBtaW5pbXVtIGlzIDxzdHJvbmc+JHtzaXplX21pbn08L3N0cm9uZz4hJywKKwkJc2l6ZUxpbWl0TWF4OiAnWW91IGNhbiBub3QgYXR0YWNoICI8ZW0+JHtuYW1lfTwvZW0+IiAoJHtzaXplfSksIHRoZSBmaWxlIHNpemUgbGltaXQgaXMgPHN0cm9uZz4ke3NpemVfbWF4fTwvc3Ryb25nPiEnLAorCQltb2Rfc2VjdXJpdHk6ICdObyByZXNwb25zZSB3YXMgZ2l2ZW4gZnJvbSB0aGUgdXBsb2FkZXIsIHRoaXMgbWF5IG1lYW4gdGhhdCAibW9kX3NlY3VyaXR5IiBpcyBhY3RpdmUgb24gdGhlIHNlcnZlciBhbmQgb25lIG9mIHRoZSBydWxlcyBpbiBtb2Rfc2VjdXJpdHkgaGFzIGNhbmNlbGxlZCB0aGlzIHJlcXVlc3QuICBJZiB5b3UgY2FuIG5vdCBkaXNhYmxlIG1vZF9zZWN1cml0eSwgeW91IG1heSBuZWVkIHRvIHVzZSB0aGUgTm9GbGFzaCBVcGxvYWRlci4nCisJfSwKKworCWZsYXNoOiB7CisJCWhpZGRlbjogJ1RvIGVuYWJsZSB0aGUgZW1iZWRkZWQgdXBsb2FkZXIsIHVuYmxvY2sgaXQgaW4geW91ciBicm93c2VyIGFuZCByZWZyZXNoIChzZWUgQWRibG9jaykuJywKKwkJZGlzYWJsZWQ6ICdUbyBlbmFibGUgdGhlIGVtYmVkZGVkIHVwbG9hZGVyLCBlbmFibGUgdGhlIGJsb2NrZWQgRmxhc2ggbW92aWUgIGFuZCByZWZyZXNoIChzZWUgRmxhc2hibG9jaykuJywKKwkJZmxhc2g6ICdJbiBvcmRlciB0byB1cGxvYWQgZmlsZXMgeW91IG5lZWQgdG8gaW5zdGFsbCA8YSBocmVmPSJodHRwOi8vd3d3LmFkb2JlLmNvbS9zaG9ja3dhdmUvZG93bmxvYWQvZG93bmxvYWQuY2dpP1AxX1Byb2RfVmVyc2lvbj1TaG9ja3dhdmVGbGFzaCI+QWRvYmUgRmxhc2g8L2E+LicKKwl9LAorCisJcmVzaXplSW1hZ2VzOiAnUmVzaXplIGJpZyBpbWFnZXMgb24gdXBsb2FkJywKKworCXNlcmlhbGl6ZTogJ1NhdmUgZ2FsbGVyeScsCisJZ2FsbGVyeTogeworCQl0ZXh0OiAnSW1hZ2UgY2FwdGlvbicsCisJCXNhdmU6ICdTYXZlJywKKwkJcmVtb3ZlOiAnUmVtb3ZlIGZyb20gZ2FsbGVyeScsCisJCWRyYWc6ICdEcmFnIGl0ZW1zIGhlcmUgdG8gY3JlYXRlIGEgZ2FsbGVyeS4uLicKKwl9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9MYW5ndWFnZS9MYW5ndWFnZS5lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9MYW5ndWFnZS9MYW5ndWFnZS5lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDZkNDYyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLmVzLmpzCkBAIC0wLDAgKzEsMTI2IEBACisvKg0KK1NjcmlwdDogTGFuZ3VhZ2UuZXMuanMNCisJTW9vVG9vbHMgRmlsZU1hbmFnZXIgLSBMYW5ndWFnZSBTdHJpbmdzIGluIFNwYW5pc2gNCisNCitUcmFuc2xhdGlvbjoNCisJW1NlcmdpbyBSdWJpb10oaHR0cDovL3J1YmlvanIubmV0Y29yZXgub3JnKQ0KKyovDQorDQorRmlsZU1hbmFnZXIuTGFuZ3VhZ2UuZXMgPSB7DQorCW1vcmU6ICdEZXRhbGxlcycsDQorCXdpZHRoOiAnQW5jaHVyYTonLA0KKwloZWlnaHQ6ICdBbHR1cmE6JywNCisNCisJb2s6ICdPaycsDQorCW9wZW46ICdTZWxlY2Npb25hciBGaWNoZXJvJywNCisJdXBsb2FkOiAnU3ViaXIgZmljaGVyb3MnLA0KKwljcmVhdGU6ICdDcmVhciBjYXJwZXRhJywNCisJY3JlYXRlZGlyOiAnRXNwZWNpZmljYSBlbCBub21icmUgZGUgbGEgY2FycGV0YTonLA0KKwljYW5jZWw6ICdDYW5jZWxhcicsDQorCWVycm9yOiAnRXJyb3InLA0KKw0KKwlpbmZvcm1hdGlvbjogJ0luZm9ybWFjacOzbicsDQorCXR5cGU6ICdUaXBvOicsDQorCXNpemU6ICdUYW1hw7FvOicsDQorCWRpcjogJ1J1dGE6JywNCisJbW9kaWZpZWQ6ICfDmmx0aW1hIG1vZGlmaWNhY2nDs246JywNCisJcHJldmlldzogJ1ByZXZpc3VhbGl6YWNpw7NuJywNCisJY2xvc2U6ICdDZXJyYXInLA0KKwlkZXN0cm95OiAnQm9ycmFyJywNCisJZGVzdHJveWZpbGU6ICfCv1NlZ3VybyBxdWUgZGVzZWFzIGJvcnJhciBlbCBmaWNoZXJvPycsDQorDQorCXJlbmFtZTogJ1Jlbm9tYnJhcicsDQorCXJlbmFtZWZpbGU6ICdFc3BlY2lmaWNhIHVuIG51ZXZvIG5vbWJyZSBwYXJhIGVsIGZpY2hlcm86JywNCisJcm5fbXZfY3A6ICdSZW5hbWUvTW92ZS9Db3B5JywNCisNCisJZG93bmxvYWQ6ICdEZXNjYXJnYXInLA0KKwlub3ByZXZpZXc6ICc8aT5ObyBoYXkgcHJldmlzdWFsaXphY2lvbiBkaXNwb25pYmxlPC9pPicsDQorDQorCXRpdGxlOiAnVMOtdHVsbzonLA0KKwlhcnRpc3Q6ICdBcnRpc3RhOicsDQorCWFsYnVtOiAnQWxidW06JywNCisJbGVuZ3RoOiAnRHVyYWNpw7NuOicsDQorCWJpdHJhdGU6ICdCaXRyYXRlOicsDQorDQorCWRlc2VsZWN0OiAnRGVzbWFyY2FyJywNCisNCisJbm9kZXN0cm95OiAnRWwgYm9ycmFkbyBkZSBmaWNoZXJvcyBoYSBzaWRvIGRlc2hhYmlsaXRhZG8uJywNCisNCisJdG9nZ2xlX3NpZGVfYm94ZXM6ICdUaHVtYm5haWwgdmlldycsDQorCXRvZ2dsZV9zaWRlX2xpc3Q6ICdMaXN0IHZpZXcnLA0KKwlzaG93X2Rpcl90aHVtYl9nYWxsZXJ5OiAnU2hvdyB0aHVtYm5haWxzIG9mIHRoZSBmaWxlcyBpbiB0aGUgcHJldmlldyBwYW5lJywNCisJZHJhZ19uX2Ryb3A6ICdEcmFnICYgZHJvcCBoYXMgYmVlbiBlbmFibGVkIGZvciB0aGlzIGRpcmVjdG9yeScsDQorCWRyYWdfbl9kcm9wX2Rpc2FibGVkOiAnRHJhZyAmIGRyb3AgaGFzIGJlZW4gdGVtcG9yYXJpbHkgZGlzYWJsZWQgZm9yIHRoaXMgZGlyZWN0b3J5JywNCisJZ290b19wYWdlOiAnR28gdG8gcGFnZScsDQorDQorCSdiYWNrZW5kLmRpc2FibGVkJzogJ0xhIGNhcmdhIGRlIGFyY2hpdm9zIGhhIHNpZG8gZGVzaGFiaWxpdGFkYS4nLA0KKwknYmFja2VuZC5hdXRob3JpemVkJzogJ05lY2VzaXRhcyBhdXRvcml6YWNpw7NuIHBhcmEgc3ViaXIgZmljaGVyb3MuJywNCisJJ2JhY2tlbmQucGF0aCc6ICdMYSBjYXJwZXRhIGRlc3Rpbm8gZXNwZWNpZmljYWRhIG5vIGV4aXN0ZS4gQ29udGFjdGEgY29uIGVsIGFkbWluaXN0cmFkb3IgZGVsIHNpdGlvIHdlYi4nLA0KKwknYmFja2VuZC5leGlzdHMnOiAnRWwgbGEgcnV0YSBkZXN0aW5vIHlhIGV4aXN0ZS4gUG9yIGZhdm9yLCBjb250YWN0YSBjb24gZWwgYWRtaW5pc3RyYWRvciBkZWwgc2l0aW8gd2ViLicsDQorCSdiYWNrZW5kLm1pbWUnOiAnTm8gc2UgcGVybWl0ZSBzdWJpciBlbCB0aXBvIGRlIGZpY2hlcm8gZXNwZWNpZmljYWRvLicsDQorCSdiYWNrZW5kLmV4dGVuc2lvbic6ICdFbCBmaWNoZXJvIHN1YmlkbyB0aWVuZW4gdW5hIGV4dGVuc2nDs24gbm8gcGVybWl0aWRhIG8gZGVzY29ub2NpZGEuJywNCisJJ2JhY2tlbmQuc2l6ZSc6ICdFbCB0YW1hw7FvIGRlbCBmaWNoZXJvIHF1ZSBpbnRlbnRhcyBzdWJpciBlcyBkZW1hc2lhZG8gZ3JhbmRlIHBhcmEgc2VyIHByb2Nlc2FkbyBwb3IgZWwgc2Vydmlkb3IuIFBvciBmYXZvciwgc3ViZSB1biBmaWNoZXJvIG1hcyBwZXF1ZcOxby4nLA0KKwknYmFja2VuZC5wYXJ0aWFsJzogJ0VsIGZpY2hlcm8gc2UgaGEgc3ViaWRvIHBhcmNpYWxtZW50ZSwgcG9yIGZhdm9yLCBzdWJlIGVsIGZpY2hlcm8gZGUgbnVldm8uJywNCisJJ2JhY2tlbmQubm9maWxlJzogJ05vIHNlIGVzcGVjaWZpY8OzIGVsIGZpY2hlcm8gYSBzdWJpci4nLA0KKwknYmFja2VuZC5kZWZhdWx0JzogJ0FsZ28gZmFsbMOzIGR1cmFudGUgbGEgY2FyZ2EgZGVsIGZpY2hlcm8uJywNCisJJ2JhY2tlbmQucGF0aF9ub3Rfd3JpdGFibGUnOiAnWW91IGRvIG5vdCBoYXZlIHdyaXRlL3VwbG9hZCBwZXJtaXNzaW9ucyBmb3IgdGhpcyBkaXJlY3RvcnkuJywNCisJJ2JhY2tlbmQuZmlsZW5hbWVfbWF5YmVfdG9vX2xhcmdlJzogJ1RoZSBmaWxlbmFtZS9wYXRoIGlzIHByb2JhYmx5IHRvbyBsb25nIGZvciB0aGUgc2VydmVyIGZpbGVzeXN0ZW0uIFBsZWFzZSByZXRyeSB3aXRoIGEgc2hvcnRlciBmaWxlIG5hbWUuJywNCisJJ2JhY2tlbmQuZm10X25vdF9hbGxvd2VkJzogJ1lvdSBhcmUgbm90IGFsbG93ZWQgdG8gdXBsb2FkIHRoaXMgZmlsZSBmb3JtYXQvbmFtZS4nLA0KKwknYmFja2VuZC5yZWFkX2Vycm9yJzogJ0Nhbm5vdCByZWFkIC8gZG93bmxvYWQgdGhlIHNwZWNpZmllZCBmaWxlLicsDQorCSdiYWNrZW5kLnVuaWRlbnRpZmllZF9lcnJvcic6ICdBbiB1bmluZGVudGlmaWVkIGVycm9yIG9jY3VycmVkIHdoaWxlIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgYmFja2VuZCAod2ViIHNlcnZlcikuJywNCisNCisJJ2JhY2tlbmQubm9uZXdmaWxlJzogJ0EgbmV3IG5hbWUgZm9yIHRoZSBmaWxlIHRvIGJlIG1vdmVkIC8gY29waWVkIGlzIG1pc3NpbmcuJywNCisJJ2JhY2tlbmQuY29ycnVwdF9pbWcnOiAnVGhpcyBmaWxlIGlzIGEgbm90IGEgaW1hZ2Ugb3IgYSBjb3JydXB0IGZpbGU6ICcsIC8vIHBhdGgNCisJJ2JhY2tlbmQucmVzaXplX2luZXJyJzogJ1RoaXMgZmlsZSBjb3VsZCBub3QgYmUgcmVzaXplZCBkdWUgdG8gYW4gaW50ZXJuYWwgZXJyb3IuJywNCisJJ2JhY2tlbmQuY29weV9mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgY29weWluZyB0aGUgZmlsZSAvIGRpcmVjdG9yeTogJywgLy8gb2xkbG9jYWxwYXRoIDogbmV3bG9jYWxwYXRoDQorCSdiYWNrZW5kLmRlbGV0ZV9jYWNoZV9lbnRyaWVzX2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gZGVsZXRlIHRoZSBpdGVtIGNhY2hlICh0aHVtYm5haWxzLCBtZXRhZGF0YSknLA0KKwknYmFja2VuZC5ta2Rpcl9mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5OiAnLCAvLyBwYXRoDQorCSdiYWNrZW5kLm1vdmVfZmFpbGVkJzogJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIG1vdmluZyAvIHJlbmFtaW5nIHRoZSBmaWxlIC8gZGlyZWN0b3J5OiAnLCAvLyBvbGRsb2NhbHBhdGggOiBuZXdsb2NhbHBhdGgNCisJJ2JhY2tlbmQucGF0aF90YW1wZXJpbmcnOiAnUGF0aCB0YW1wZXJpbmcgZGV0ZWN0ZWQuJywNCisJJ2JhY2tlbmQucmVhbHBhdGhfZmFpbGVkJzogJ0Nhbm5vdCB0cmFuc2xhdGUgdGhlIGdpdmVuIGZpbGUgc3BlY2lmaWNhdGlvbiB0byBhIHZhbGlkIHN0b3JhZ2UgbG9jYXRpb246ICcsIC8vICRwYXRoDQorCSdiYWNrZW5kLnVubGlua19mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGRlbGV0ZSB0aGUgZmlsZSAvIGRpcmVjdG9yeTogJywgIC8vIHBhdGgNCisNCisJLy8gSW1hZ2UuY2xhc3MucGhwOg0KKwknYmFja2VuZC5wcm9jZXNzX25vZmlsZSc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGRpZCBub3QgcmVjZWl2ZSBhIHZhbGlkIGZpbGUgbG9jYXRpb24gdG8gd29yayBvbi4nLA0KKwknYmFja2VuZC5pbWFnZWNyZWF0ZXRydWVjb2xvcl9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlY3JlYXRldHJ1ZWNvbG9yKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmltYWdlYWxwaGFibGVuZGluZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IGNhbm5vdCBwZXJmb3JtIHRoZSByZXF1aXJlZCBpbWFnZSBhbHBoYSBibGVuZGluZy4nLA0KKwknYmFja2VuZC5pbWFnZWFsbG9jYWxwaGE1MHBjdGdyZXlfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBhbHBoYSBjaGFubmVsIGFuZCB0aGUgNTAlIGJhY2tncm91bmQuJywNCisJJ2JhY2tlbmQuaW1hZ2Vjb2xvcmFsbG9jYXRlYWxwaGFfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBhbHBoYSBjaGFubmVsIGZvciB0aGlzIGNvbG9yIGltYWdlLicsDQorCSdiYWNrZW5kLmltYWdlcm90YXRlX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2Vyb3RhdGUoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2Vjb3B5cmVzYW1wbGVkX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2Vjb3B5cmVzYW1wbGVkKCkgZmFpbGVkLiBJbWFnZSByZXNvbHV0aW9uOiAnLCAvKiB4ICogeSAqLw0KKwknYmFja2VuZC5pbWFnZWNvcHlfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNvcHkoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2VmbGlwX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogY2Fubm90IGZsaXAgdGhlIGltYWdlLicsDQorCSdiYWNrZW5kLmltYWdlanBlZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlanBlZygpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5pbWFnZXBuZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlcG5nKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmltYWdlZ2lmX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2VnaWYoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2VjcmVhdGVfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNyZWF0ZSgpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5jdnQydHJ1ZWNvbG9yX2ZhaWxlZCc6ICdjb252ZXJzaW9uIHRvIFRydWUgQ29sb3IgZmFpbGVkLiBJbWFnZSByZXNvbHV0aW9uOiAnLCAvKiB4ICogeSAqLw0KKwknYmFja2VuZC5ub19pbWFnZWluZm8nOiAnQ29ycnVwdCBpbWFnZSBvciBub3QgYW4gaW1hZ2UgZmlsZSBhdCBhbGwuJywNCisJJ2JhY2tlbmQuaW1nX3dpbGxfbm90X2ZpdCc6ICdpbWFnZSBkb2VzIG5vdCBmaXQgaW4gYXZhaWxhYmxlIFJBTTsgbWluaW11bSByZXF1aXJlZCAoZXN0aW1hdGUpOiAnLCAvKiBYWFggTUJ5dGVzICovDQorCSdiYWNrZW5kLnVuc3VwcG9ydGVkX2ltZ2ZtdCc6ICd1bnN1cHBvcnRlZCBpbWFnZSBmb3JtYXQ6ICcsICAgIC8qIGpwZWcvcG5nL2dpZi8uLi4gKi8NCisNCisJLyogRlUgKi8NCisJdXBsb2FkZXI6IHsNCisJCXVua25vd246ICdFcnJvciBkZXNjb25vY2lkbycsDQorCQlkdXBsaWNhdGU6ICdObyBzZSBwdWVkZSBzdWJpciAiPGVtPiR7bmFtZX08L2VtPiIgKCR7c2l6ZX0pLCB5YSBoYSBzaWRvIGHDsWFkaWRvIScsDQorCQlzaXplTGltaXRNaW46ICdObyBzZSBwdWVkZSBzdWJpciAiPGVtPiR7bmFtZX08L2VtPiIgKCR7c2l6ZX0pLCBlbCB0YW1hw7FvIG3DrW5pbW8gZGUgZmljaGVybyBlcyA8c3Ryb25nPiR7c2l6ZV9taW59PC9zdHJvbmc+IScsDQorCQlzaXplTGltaXRNYXg6ICdObyBzZSBwdWVkZSBzdWJpciAiPGVtPiR7bmFtZX08L2VtPiIgKCR7c2l6ZX0pLCBlbCB0YW1hw7FvIG3DoXhpbW8gZGUgZmljaGVybyBlcyA8c3Ryb25nPiR7c2l6ZV9tYXh9PC9zdHJvbmc+IScsDQorCQltb2Rfc2VjdXJpdHk6ICdObyByZXNwb25zZSB3YXMgZ2l2ZW4gZnJvbSB0aGUgdXBsb2FkZXIsIHRoaXMgbWF5IG1lYW4gdGhhdCAibW9kX3NlY3VyaXR5IiBpcyBhY3RpdmUgb24gdGhlIHNlcnZlciBhbmQgb25lIG9mIHRoZSBydWxlcyBpbiBtb2Rfc2VjdXJpdHkgaGFzIGNhbmNlbGxlZCB0aGlzIHJlcXVlc3QuICBJZiB5b3UgY2FuIG5vdCBkaXNhYmxlIG1vZF9zZWN1cml0eSwgeW91IG1heSBuZWVkIHRvIHVzZSB0aGUgTm9GbGFzaCBVcGxvYWRlci4nDQorCX0sDQorDQorCWZsYXNoOiB7DQorCQloaWRkZW46IG51bGwsDQorCQlkaXNhYmxlZDogbnVsbCwNCisJCWZsYXNoOiAnUGFyYSBwb2RlciBzdWJpciBmaWNoZXJvcyBuZWNlc2l0YXMgaW5zdGFsYXIgPGEgaHJlZj0iaHR0cDovL3d3dy5hZG9iZS5jb20vc2hvY2t3YXZlL2Rvd25sb2FkL2Rvd25sb2FkLmNnaT9QMV9Qcm9kX1ZlcnNpb249U2hvY2t3YXZlRmxhc2giPkFkb2JlIEZsYXNoPC9hPi4nDQorCX0sDQorDQorCXJlc2l6ZUltYWdlczogJ1JlZGltZW5zaW9uYXIgbGFzIGltw6FnZW5lcyBncmFuZGVzIGFsIHN1YmlybGFzJywNCisNCisJc2VyaWFsaXplOiAnU2F2ZSBnYWxsZXJ5JywNCisJZ2FsbGVyeTogew0KKwkJdGV4dDogJ0ltYWdlIGNhcHRpb24nLA0KKwkJc2F2ZTogJ1NhdmUnLA0KKwkJcmVtb3ZlOiAnUmVtb3ZlIGZyb20gZ2FsbGVyeScsDQorCQlkcmFnOiAnRHJhZyBpdGVtcyBoZXJlIHRvIGNyZWF0ZSBhIGdhbGxlcnkuLi4nDQorCX0NCit9Ow0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9MYW5ndWFnZS9MYW5ndWFnZS5maS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9MYW5ndWFnZS9MYW5ndWFnZS5maS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDMxNmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLmZpLmpzCkBAIC0wLDAgKzEsMTI2IEBACisvKg0KK1NjcmlwdDogTGFuZ3VhZ2UuZmkuanMNCisJTW9vVG9vbHMgRmlsZU1hbmFnZXIgLSBMYW5ndWFnZSBTdHJpbmdzIGluIEZpbm5pc2gNCisNCitUcmFuc2xhdGlvbjoNCisJW0phYmlzIFNldsOzbl0oaHR0cDovL3B1bXBwdW1lZGlhLmNvbSkNCisqLw0KKw0KK0ZpbGVNYW5hZ2VyLkxhbmd1YWdlLmZpID0gew0KKwltb3JlOiAnTGlzw6R0aWVkb3QnLA0KKwl3aWR0aDogJ0xldmV5czonLA0KKwloZWlnaHQ6ICdLb3JrZXVzOicsDQorDQorCW9rOiAnT2snLA0KKwlvcGVuOiAnVmFsaXRzZSB0aWVkb3N0bycsDQorCXVwbG9hZDogJ0zDpGhldMOkJywNCisJY3JlYXRlOiAnTHVvIGthbnNpbycsDQorCWNyZWF0ZWRpcjogJ0thbnNpb24gbmltaTonLA0KKwljYW5jZWw6ICdQZXJ1dXRhJywNCisJZXJyb3I6ICdWaXJoZScsDQorDQorCWluZm9ybWF0aW9uOiAnVGllZG90JywNCisJdHlwZTogJ1R5eXBwaTonLA0KKwlzaXplOiAnS29rbzonLA0KKwlkaXI6ICdQb2xrdTonLA0KKwltb2RpZmllZDogJ1ZpaW1la3NpIG11b2thdHR1OicsDQorCXByZXZpZXc6ICdFc2lrYXRzZWx1JywNCisJY2xvc2U6ICdTdWxqZScsDQorCWRlc3Ryb3k6ICdQb2lzdGEnLA0KKwlkZXN0cm95ZmlsZTogJ0hhbHVhdGtvIHZhcm1hc3RpIHBvaXN0YWEgdGllZG9zdG9uPycsDQorDQorCXJlbmFtZTogJ05pbWXDpCB1dWRlbGxlZW4nLA0KKwlyZW5hbWVmaWxlOiAnU3nDtnTDpCB0aWVkb3N0b24gdXVzaSBuaW1pOicsDQorCXJuX212X2NwOiAnUmVuYW1lL01vdmUvQ29weScsDQorDQorCWRvd25sb2FkOiAnTGF0YWEnLA0KKwlub3ByZXZpZXc6ICc8aT5Fc2lrYXRzZWx1YSBlaSB2b2lkYSBuw6R5dHTDpMOkPC9pPicsDQorDQorCXRpdGxlOiAnS2FwcGFsZWVuIG5pbWk6JywNCisJYXJ0aXN0OiAnQXJ0aXN0aTonLA0KKwlhbGJ1bTogJ0FsYnVtaTonLA0KKwlsZW5ndGg6ICdQaXR1dXM6JywNCisJYml0cmF0ZTogJ0JpdHJhdGU6JywNCisNCisJZGVzZWxlY3Q6ICdQb2lzdGEgdmFsaW50YScsDQorDQorCW5vZGVzdHJveTogJ1RpZWRvc3RvamVuIHBvaXN0byBvdGV0dHUga8OkeXTDtnN0w6QuJywNCisNCisJdG9nZ2xlX3NpZGVfYm94ZXM6ICdUaHVtYm5haWwgdmlldycsDQorCXRvZ2dsZV9zaWRlX2xpc3Q6ICdMaXN0IHZpZXcnLA0KKwlzaG93X2Rpcl90aHVtYl9nYWxsZXJ5OiAnU2hvdyB0aHVtYm5haWxzIG9mIHRoZSBmaWxlcyBpbiB0aGUgcHJldmlldyBwYW5lJywNCisJZHJhZ19uX2Ryb3A6ICdEcmFnICYgZHJvcCBoYXMgYmVlbiBlbmFibGVkIGZvciB0aGlzIGRpcmVjdG9yeScsDQorCWRyYWdfbl9kcm9wX2Rpc2FibGVkOiAnRHJhZyAmIGRyb3AgaGFzIGJlZW4gdGVtcG9yYXJpbHkgZGlzYWJsZWQgZm9yIHRoaXMgZGlyZWN0b3J5JywNCisJZ290b19wYWdlOiAnR28gdG8gcGFnZScsDQorDQorCSdiYWNrZW5kLmRpc2FibGVkJzogJ1RpZWRvc3RvamVuIGzDpGhldHlzIG90ZXR0dSBrw6R5dMO2c3TDpC4nLA0KKwknYmFja2VuZC5hdXRob3JpemVkJzogJ1NpbnVsbGEgZWkgb2xlIG9pa2V1a3NpYSB0aWVkb3N0b2plbiBsw6RoZXR0w6RtaXNlZW4uJywNCisJJ2JhY2tlbmQucGF0aCc6ICdNw6TDpHJpdGV0dHnDpCBrYW5zaW90YSBlaSBsw7Z5ZHkuIE9sZSBoeXbDpCBqYSBvdGEgeWh0ZXl0dMOkIHNpdnVzdG9uIHlsbMOkcGl0w6Rqw6TDpG4uJywNCisJJ2JhY2tlbmQuZXhpc3RzJzogJ1RpZWRvc3RvIG9uIGpvIG9sZW1hc3NhIC0gc2lpcnRvIHBlcnV0dHUuIE9sZSBoeXbDpCBqYSBvdGEgeWh0ZXl0dMOkIHNpdnVzdG9uIHlsbMOkcGl0w6Rqw6TDpG4uJywNCisJJ2JhY2tlbmQubWltZSc6ICdUaWVkb3N0b3R5eXBwaSBlaSBvbGUgc2FsbGl0dHVqZW4gbGlzdGFsbGEgLSBzaWlydG8gcGVydXR0dS4nLA0KKwknYmFja2VuZC5leHRlbnNpb24nOiAnVGllZG9zdG9ww6TDpHRlIHR1bnRlbWF0b24sIHRhaSBlaSBzYWxsaXR0dWplbiBsaXN0YWxsYSAtIHNpaXJ0byBwZXJ1dHR1LicsDQorCSdiYWNrZW5kLnNpemUnOiAnVGllZG9zdG9rb2tvIGxpaWFuIHN1dXJpIHBhbHZlbGltZWxsZS4gT2xlIGh5dsOkIGphIHNpaXJyw6QgcGllbmVtcGnDpCB0aWVkb3N0b2phLicsDQorCSdiYWNrZW5kLnBhcnRpYWwnOiAnVGllZG9uc2lpcnRvIG9ubmlzdHVpIHZhaW4gb3NpdHRhaW4gLSBzaWlydG8gZXDDpG9ubmlzdHVpLiBPbGUgaHl2w6QgamEgc2lpcnLDpCB0aWVkb3N0byB1dWRlc3RhYW4nLA0KKwknYmFja2VuZC5ub2ZpbGUnOiAnVGllZG9zdG9hIGVpIG3DpMOkcml0ZXR0eS4nLA0KKwknYmFja2VuZC5kZWZhdWx0JzogJ1RpZWRvbnNpaXJ0byBlcMOkb25uaXN0dWkgdHVubmlzdGFtYXR0b21hc3RhIHN5eXN0w6QuJywNCisJJ2JhY2tlbmQucGF0aF9ub3Rfd3JpdGFibGUnOiAnWW91IGRvIG5vdCBoYXZlIHdyaXRlL3VwbG9hZCBwZXJtaXNzaW9ucyBmb3IgdGhpcyBkaXJlY3RvcnkuJywNCisJJ2JhY2tlbmQuZmlsZW5hbWVfbWF5YmVfdG9vX2xhcmdlJzogJ1RoZSBmaWxlbmFtZS9wYXRoIGlzIHByb2JhYmx5IHRvbyBsb25nIGZvciB0aGUgc2VydmVyIGZpbGVzeXN0ZW0uIFBsZWFzZSByZXRyeSB3aXRoIGEgc2hvcnRlciBmaWxlIG5hbWUuJywNCisJJ2JhY2tlbmQuZm10X25vdF9hbGxvd2VkJzogJ1lvdSBhcmUgbm90IGFsbG93ZWQgdG8gdXBsb2FkIHRoaXMgZmlsZSBmb3JtYXQvbmFtZS4nLA0KKwknYmFja2VuZC5yZWFkX2Vycm9yJzogJ0Nhbm5vdCByZWFkIC8gZG93bmxvYWQgdGhlIHNwZWNpZmllZCBmaWxlLicsDQorCSdiYWNrZW5kLnVuaWRlbnRpZmllZF9lcnJvcic6ICdBbiB1bmluZGVudGlmaWVkIGVycm9yIG9jY3VycmVkIHdoaWxlIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgYmFja2VuZCAod2ViIHNlcnZlcikuJywNCisNCisJJ2JhY2tlbmQubm9uZXdmaWxlJzogJ0EgbmV3IG5hbWUgZm9yIHRoZSBmaWxlIHRvIGJlIG1vdmVkIC8gY29waWVkIGlzIG1pc3NpbmcuJywNCisJJ2JhY2tlbmQuY29ycnVwdF9pbWcnOiAnVGhpcyBmaWxlIGlzIGEgbm90IGEgaW1hZ2Ugb3IgYSBjb3JydXB0IGZpbGU6ICcsIC8vIHBhdGgNCisJJ2JhY2tlbmQucmVzaXplX2luZXJyJzogJ1RoaXMgZmlsZSBjb3VsZCBub3QgYmUgcmVzaXplZCBkdWUgdG8gYW4gaW50ZXJuYWwgZXJyb3IuJywNCisJJ2JhY2tlbmQuY29weV9mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgY29weWluZyB0aGUgZmlsZSAvIGRpcmVjdG9yeTogJywgLy8gb2xkbG9jYWxwYXRoIDogbmV3bG9jYWxwYXRoDQorCSdiYWNrZW5kLmRlbGV0ZV9jYWNoZV9lbnRyaWVzX2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gZGVsZXRlIHRoZSBpdGVtIGNhY2hlICh0aHVtYm5haWxzLCBtZXRhZGF0YSknLA0KKwknYmFja2VuZC5ta2Rpcl9mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5OiAnLCAvLyBwYXRoDQorCSdiYWNrZW5kLm1vdmVfZmFpbGVkJzogJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIG1vdmluZyAvIHJlbmFtaW5nIHRoZSBmaWxlIC8gZGlyZWN0b3J5OiAnLCAvLyBvbGRsb2NhbHBhdGggOiBuZXdsb2NhbHBhdGgNCisJJ2JhY2tlbmQucGF0aF90YW1wZXJpbmcnOiAnUGF0aCB0YW1wZXJpbmcgZGV0ZWN0ZWQuJywNCisJJ2JhY2tlbmQucmVhbHBhdGhfZmFpbGVkJzogJ0Nhbm5vdCB0cmFuc2xhdGUgdGhlIGdpdmVuIGZpbGUgc3BlY2lmaWNhdGlvbiB0byBhIHZhbGlkIHN0b3JhZ2UgbG9jYXRpb246ICcsIC8vICRwYXRoDQorCSdiYWNrZW5kLnVubGlua19mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGRlbGV0ZSB0aGUgZmlsZSAvIGRpcmVjdG9yeTogJywgIC8vIHBhdGgNCisNCisJLy8gSW1hZ2UuY2xhc3MucGhwOg0KKwknYmFja2VuZC5wcm9jZXNzX25vZmlsZSc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGRpZCBub3QgcmVjZWl2ZSBhIHZhbGlkIGZpbGUgbG9jYXRpb24gdG8gd29yayBvbi4nLA0KKwknYmFja2VuZC5pbWFnZWNyZWF0ZXRydWVjb2xvcl9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlY3JlYXRldHJ1ZWNvbG9yKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmltYWdlYWxwaGFibGVuZGluZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IGNhbm5vdCBwZXJmb3JtIHRoZSByZXF1aXJlZCBpbWFnZSBhbHBoYSBibGVuZGluZy4nLA0KKwknYmFja2VuZC5pbWFnZWFsbG9jYWxwaGE1MHBjdGdyZXlfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBhbHBoYSBjaGFubmVsIGFuZCB0aGUgNTAlIGJhY2tncm91bmQuJywNCisJJ2JhY2tlbmQuaW1hZ2Vjb2xvcmFsbG9jYXRlYWxwaGFfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBhbHBoYSBjaGFubmVsIGZvciB0aGlzIGNvbG9yIGltYWdlLicsDQorCSdiYWNrZW5kLmltYWdlcm90YXRlX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2Vyb3RhdGUoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2Vjb3B5cmVzYW1wbGVkX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2Vjb3B5cmVzYW1wbGVkKCkgZmFpbGVkLiBJbWFnZSByZXNvbHV0aW9uOiAnLCAvKiB4ICogeSAqLw0KKwknYmFja2VuZC5pbWFnZWNvcHlfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNvcHkoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2VmbGlwX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogY2Fubm90IGZsaXAgdGhlIGltYWdlLicsDQorCSdiYWNrZW5kLmltYWdlanBlZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlanBlZygpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5pbWFnZXBuZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlcG5nKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmltYWdlZ2lmX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2VnaWYoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2VjcmVhdGVfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNyZWF0ZSgpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5jdnQydHJ1ZWNvbG9yX2ZhaWxlZCc6ICdjb252ZXJzaW9uIHRvIFRydWUgQ29sb3IgZmFpbGVkLiBJbWFnZSByZXNvbHV0aW9uOiAnLCAvKiB4ICogeSAqLw0KKwknYmFja2VuZC5ub19pbWFnZWluZm8nOiAnQ29ycnVwdCBpbWFnZSBvciBub3QgYW4gaW1hZ2UgZmlsZSBhdCBhbGwuJywNCisJJ2JhY2tlbmQuaW1nX3dpbGxfbm90X2ZpdCc6ICdTZXJ2ZXIgZXJyb3I6IGltYWdlIGRvZXMgbm90IGZpdCBpbiBhdmFpbGFibGUgUkFNOyBtaW5pbXVtIHJlcXVpcmVkIChlc3RpbWF0ZSk6ICcsIC8qIFhYWCBNQnl0ZXMgKi8NCisJJ2JhY2tlbmQudW5zdXBwb3J0ZWRfaW1nZm10JzogJ3Vuc3VwcG9ydGVkIGltYWdlIGZvcm1hdDogJywgICAgLyoganBlZy9wbmcvZ2lmLy4uLiAqLw0KKw0KKwkvKiBGVSAqLw0KKwl1cGxvYWRlcjogew0KKwkJdW5rbm93bjogJ1R1bm5pc3RhbWF0b24gdmlyaGUnLA0KKwkJZHVwbGljYXRlOiAnRXQgdm9pIGxpc8OkdMOkIHNldXJhYXZhYSB0aWVkb3N0b2E6ICI8ZW0+JHtuYW1lfTwvZW0+IiAoJHtzaXplfSksIGtvc2thIHNlIG9uIGpvIHNpaXJ0b2xpc3RhbGxhIScsDQorCQlzaXplTGltaXRNaW46ICdFdCB2b2kgbGlzw6R0w6Qgc2V1cmFhdmFhIHRpZWRvc3RvYTogIjxlbT4ke25hbWV9PC9lbT4iICgke3NpemV9KS4gVGllZG9zdG9qZW4gbWluaW1pa29rbyBvbiA8c3Ryb25nPiR7c2l6ZV9taW59PC9zdHJvbmc+IScsDQorCQlzaXplTGltaXRNYXg6ICdFdCB2b2kgbGlzw6R0w6Qgc2V1cmFhdmFhIHRpZWRvc3RvYTogIjxlbT4ke25hbWV9PC9lbT4iICgke3NpemV9KS4gVGllZG9zdG9qZW4gbWFrc2ltaWtva28gb24gPHN0cm9uZz4ke3NpemVfbWF4fTwvc3Ryb25nPiEnLA0KKwkJbW9kX3NlY3VyaXR5OiAnTm8gcmVzcG9uc2Ugd2FzIGdpdmVuIGZyb20gdGhlIHVwbG9hZGVyLCB0aGlzIG1heSBtZWFuIHRoYXQgIm1vZF9zZWN1cml0eSIgaXMgYWN0aXZlIG9uIHRoZSBzZXJ2ZXIgYW5kIG9uZSBvZiB0aGUgcnVsZXMgaW4gbW9kX3NlY3VyaXR5IGhhcyBjYW5jZWxsZWQgdGhpcyByZXF1ZXN0LiAgSWYgeW91IGNhbiBub3QgZGlzYWJsZSBtb2Rfc2VjdXJpdHksIHlvdSBtYXkgbmVlZCB0byB1c2UgdGhlIE5vRmxhc2ggVXBsb2FkZXIuJw0KKwl9LA0KKw0KKwlmbGFzaDogew0KKwkJaGlkZGVuOiBudWxsLA0KKwkJZGlzYWJsZWQ6IG51bGwsDQorCQlmbGFzaDogJ0vDpHl0dMOkw6Rrc2VzaSBGaWxlTWFuYWdlcmlhLCB0YXJ2aXRzZXQgQWRvYmUgRmxhc2ggUGxheWVyaW4uIDxhIGhyZWY9Imh0dHA6Ly93d3cuYWRvYmUuY29tL3Nob2Nrd2F2ZS9kb3dubG9hZC9kb3dubG9hZC5jZ2k/UDFfUHJvZF9WZXJzaW9uPVNob2Nrd2F2ZUZsYXNoIj5MYXRhYSB0w6RzdMOkPC9hPi4nDQorCX0sDQorDQorCXJlc2l6ZUltYWdlczogJ1BpZW5lbm7DpCBsaWlhbiBzdXVyZXQga3V2YXQgYXV0b21hYXR0aXNlc3RpIHNpaXJyb24geWh0ZXlkZXNzw6QnLA0KKw0KKwlzZXJpYWxpemU6ICdTYXZlIGdhbGxlcnknLA0KKwlnYWxsZXJ5OiB7DQorCQl0ZXh0OiAnSW1hZ2UgY2FwdGlvbicsDQorCQlzYXZlOiAnU2F2ZScsDQorCQlyZW1vdmU6ICdSZW1vdmUgZnJvbSBnYWxsZXJ5JywNCisJCWRyYWc6ICdEcmFnIGl0ZW1zIGhlcmUgdG8gY3JlYXRlIGEgZ2FsbGVyeS4uLicNCisJfQ0KK307DQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLmZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLmZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZjNhZTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvTGFuZ3VhZ2UvTGFuZ3VhZ2UuZnIuanMKQEAgLTAsMCArMSwxMjYgQEAKKy8qDQorU2NyaXB0OiBMYW5ndWFnZS5mci5qcw0KKwlNb29Ub29scyBGaWxlTWFuYWdlciAtIExhbmd1YWdlIFN0cmluZ3MgaW4gRnJlbmNoDQorDQorVHJhbnNsYXRpb246DQorCVtTYW11ZWwgU2FuY2hlel0oaHR0cDovL3d3dy5rcm9tYWNrLmNvbSkNCisqLw0KKw0KK0ZpbGVNYW5hZ2VyLkxhbmd1YWdlLmZyID0gew0KKwltb3JlOiAnRMOpdGFpbHMnLA0KKwl3aWR0aDogJ0xhcmdldXIgOicsDQorCWhlaWdodDogJ0hhdXRldXIgOicsDQorDQorCW9rOiAnT2snLA0KKwlvcGVuOiAnU8OpbGVjdGlvbm5lciB1biBmaWNoaWVyJywNCisJdXBsb2FkOiAnVMOpbMOpdmVyc2VyJywNCisJY3JlYXRlOiAnQ3LDqWVyIHVuIGRvc3NpZXInLA0KKwljcmVhdGVkaXI6ICdNZXJjaSBkZSBzcMOpY2lmaWVyIHVuIG5vbSBkZSBkb3NzaWVyIDonLA0KKwljYW5jZWw6ICdBbm51bGVyJywNCisJZXJyb3I6ICdFcnJldXInLA0KKw0KKwlpbmZvcm1hdGlvbjogJ0luZm9ybWF0aW9ucycsDQorCXR5cGU6ICdUeXBlIDonLA0KKwlzaXplOiAnVGFpbGxlIDonLA0KKwlkaXI6ICdDaGVtaW4gOicsDQorCW1vZGlmaWVkOiAnTW9kaWZpw6kgbGUgOicsDQorCXByZXZpZXc6ICdBcGVyw6d1JywNCisJY2xvc2U6ICdGZXJtZXInLA0KKwlkZXN0cm95OiAnU3VwcHJpbWVyJywNCisJZGVzdHJveWZpbGU6ICdWb3VsZXotdm91cyB2cmFpbWVudCBzdXBwcmltZXIgY2UgZmljaGllciA/JywNCisNCisJcmVuYW1lOiAnUmVub21tZXInLA0KKwlyZW5hbWVmaWxlOiAnTWVyY2kgZGUgc3DDqWNpZmllciB1biBub3V2ZWF1IG5vbSBkZSBmaWNoaWVyIDonLA0KKwlybl9tdl9jcDogJ1JlbmFtZS9Nb3ZlL0NvcHknLA0KKw0KKwlkb3dubG9hZDogJ1TDqWzDqWNoYXJnZXInLA0KKwlub3ByZXZpZXc6ICc8aT5BdWN1biBhcGVyw6d1IGRpc3BvbmlibGU8L2k+JywNCisNCisJdGl0bGU6ICdUaXRyZSA6JywNCisJYXJ0aXN0OiAnQXJ0aXN0ZSA6JywNCisJYWxidW06ICdBbGJ1bSA6JywNCisJbGVuZ3RoOiAnRHVyw6llIDonLA0KKwliaXRyYXRlOiAnRMOpYml0IDonLA0KKw0KKwlkZXNlbGVjdDogJ0TDqXPDqWxlY3Rpb25uZXInLA0KKw0KKwlub2Rlc3Ryb3k6ICdMYSBzdXBwcmVzc2lvbiBkZSBmaWNoaWVyIGEgw6l0w6kgZMOpc2FjdGl2w6llIHN1ciBjZSBzZXJ2ZXVyLicsDQorDQorCXRvZ2dsZV9zaWRlX2JveGVzOiAnVnVlIG1pbmlhdHVyZXMnLA0KKwl0b2dnbGVfc2lkZV9saXN0OiAnVnVlIGxpc3RlJywNCisJc2hvd19kaXJfdGh1bWJfZ2FsbGVyeTogJ1ZvaXIgbGVzIG1pbmlhdHVyZXMgZGFucyBsZSBwYW5uZWF1IGRlIHByw6l2aXN1YWxpc2F0aW9uJywNCisJZHJhZ19uX2Ryb3A6ICdMZSBnbGlzc2VyIC8gZMOpcG9zw6kgZXN0IGFjdGlmIHBvdXIgY2UgZG9zc2llcicsDQorCWRyYWdfbl9kcm9wX2Rpc2FibGVkOiAnTGUgZ2xpc3NlciAvIGTDqXBvc8OpIGVzdCB0ZW1wb3JhaXJlbWVudCBpbmFjdGlmIHBvdXIgY2UgZG9zc2llcicsDQorCWdvdG9fcGFnZTogJ0FsbGVyIMOgIGxhIHBhZ2UnLA0KKw0KKwknYmFja2VuZC5kaXNhYmxlZCc6ICdMXCd1cGxvYWQgZGUgZmljaGllciBhIMOpdMOpIGTDqXNhY3RpdsOpIHN1ciBjZSBzZXJ2ZXVyLicsDQorCSdiYWNrZW5kLmF1dGhvcml6ZWQnOiAnVm91cyBuXCfDqnRlcyBwYXMgYXV0aGVudGlmacOpIGV0IG5lIHBvdXZleiBwYXMgdMOpbMOpdmVyc2VyIGRlIGZpY2hpZXIuJywNCisJJ2JhY2tlbmQucGF0aCc6ICdMZSByw6lwZXJ0b2lyZSBkXCd1cGxvYWQgc3DDqWNpZmnDqSBuXCdleGlzdGUgcGFzLiBNZXJjaSBkZSBjb250YWN0ZXIgbFwnYWRtaW5pc3RyYXRldXIgZGUgY2Ugc2l0ZSBJbnRlcm5ldC4nLA0KKwknYmFja2VuZC5leGlzdHMnOiAnTGUgY2hlbWluIGRlIGRcJ3VwbG9hZCBzcMOpY2lmacOpIGV4aXN0ZSBkw6lqw6AuIE1lcmNpIGRlIGNvbnRhY3RlciBsXCdhZG1pbmlzdHJhdGV1ciBkZSBjZSBzaXRlIEludGVybmV0LicsDQorCSdiYWNrZW5kLm1pbWUnOiAnTGUgdHlwZSBkZSBmaWNoaWVyIHNww6ljaWZpw6kgblwnZXN0IHBhcyBhdXRvcmlzw6kuJywNCisJJ2JhY2tlbmQuZXh0ZW5zaW9uJzogJ0xlIGZpY2hpZXIgdXBsb2Fkw6kgYSB1bmUgZXh0ZW5zaW9uIGluY29ubnVlIG91IGludGVyZGl0ZS4nLA0KKwknYmFja2VuZC5zaXplJzogJ0xhIHRhaWxsZSBkZSB2b3RyZSBmaWNoaWVyIGVzdCB0cm9wIGdyYW5kZSBwb3VyIMOqdHJlIHVwbG9hZMOpZSBzdXIgY2Ugc2VydmV1ci4gTWVyY2kgZGUgc8OpbGVjdGlvbm5lciB1biBmaWNoaWVyIG1vaW5zIGxvdXJkLicsDQorCSdiYWNrZW5kLnBhcnRpYWwnOiAnTGUgZmljaGllciBhIMOpdMOpIHBhcnRpZWxsZW1lbnQgdXBsb2Fkw6ksIG1lcmNpIGRlIHJlY29tbWVuY2VyIGxcJ29ww6lyYXRpb24uJywNCisJJ2JhY2tlbmQubm9maWxlJzogJ0F1Y3VuIGZpY2hpZXIgblwnYSDDqXTDqSBzcMOpY2lmacOpLicsDQorCSdiYWNrZW5kLmRlZmF1bHQnOiAnVW5lIGVycmV1ciBzXCdlc3QgcHJvZHVpdGUuJywNCisJJ2JhY2tlbmQucGF0aF9ub3Rfd3JpdGFibGUnOiAnUHJvYmzDqG1lIGRlIGRyb2l0IGRcJ8OpY3JpdHVyZSBzdXIgbGUgZG9zc2llci4nLA0KKwknYmFja2VuZC5maWxlbmFtZV9tYXliZV90b29fbGFyZ2UnOiAnTGUgY2hlbWluIG91IG5vbSBkZSBmaWNoaWVyIGVzdCBwcm9iYWJsZW1lbnQgdHJvcCBsb25nLiBSw6llc3NheWV6IGF2ZWMgdW4gbm9tIHBsdXMgY291cnQuJywNCisJJ2JhY2tlbmQuZm10X25vdF9hbGxvd2VkJzogJ0xlIGZvcm1hdCBvdSBub20gZGUgZmljaGllciBxdWUgdm91cyBzb3VoYWl0ZXogdXBsb2FkZXIgblwnZXN0IHBhcyBhdXRvcmlzw6kuJywNCisJJ2JhY2tlbmQucmVhZF9lcnJvcic6ICdDYW5ub3QgcmVhZCAvIGRvd25sb2FkIHRoZSBzcGVjaWZpZWQgZmlsZS4nLA0KKwknYmFja2VuZC51bmlkZW50aWZpZWRfZXJyb3InOiAnVW5lIGVycmV1ciBpbmNvbm51ZSBlc3Qgc3VydmVudWUgbG9ycyBkZSBsYSBjb21tdW5pY2F0aW9uIGF2ZWMgbGUgc2VydmV1ci4nLA0KKw0KKwknYmFja2VuZC5ub25ld2ZpbGUnOiAnTGUgbm91dmVhdSBub20gZGUgZmljaGllciBlc3QgbWFucXVhbnQuJywNCisJJ2JhY2tlbmQuY29ycnVwdF9pbWcnOiAnQ2UgZmljaGllciBlc3QgY29ycm9tcHUgb3UgblwnZXN0IHBhcyB1bmUgaW1hZ2UgOiAnLCAvLyBwYXRoDQorCSdiYWNrZW5kLnJlc2l6ZV9pbmVycic6ICdDZSBmaWNoaWVyIG5lIHBldXQgw6p0cmUgcmVkaW1lbnNpb25uw6kgKGVycmV1ciBpbnRlcm5lKS4nLA0KKwknYmFja2VuZC5jb3B5X2ZhaWxlZCc6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZSBsb3JzIGRlIGxhIGNvcGllIGRlIGNlIGZpY2hpZXIgLyBkb3NzaWVyIDogJywgLy8gb2xkbG9jYWxwYXRoIDogbmV3bG9jYWxwYXRoDQorCSdiYWNrZW5kLmRlbGV0ZV9jYWNoZV9lbnRyaWVzX2ZhaWxlZCc6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZSBsb3JzIGRlIGxhIHN1cHByZXNzaW9uIGR1IGNhY2hlICh0aHVtYm5haWxzLCBtZXRhZGF0YSknLA0KKwknYmFja2VuZC5ta2Rpcl9mYWlsZWQnOiAnVW5lIGVycmV1ciBlc3Qgc3VydmVudWUgbG9ycyBkZSBsYSBjcsOpYXRpb24gZHUgZG9zc2llciA6ICcsIC8vIHBhdGgNCisJJ2JhY2tlbmQubW92ZV9mYWlsZWQnOiAnVW5lIGVycmV1ciBlc3Qgc3VydmVudWUgbG9ycyBkdSBkw6lwbGFjZW1lbnQgLyByZW5vbW1hZ2UgZHUgZmljaGllciAvIGRvc3NpZXIgOiAnLCAvLyBvbGRsb2NhbHBhdGggOiBuZXdsb2NhbHBhdGgNCisJJ2JhY2tlbmQucGF0aF90YW1wZXJpbmcnOiAnQWx0w6lyYXRpb24gZGUgY2hlbWluIGTDqXRlY3TDqWUuJywNCisJJ2JhY2tlbmQucmVhbHBhdGhfZmFpbGVkJzogJ0ltcG9zc2libGUgZGUgdHJhZHVpcmUgbGUgY2hlbWluIGRlIGNlIGZpY2hpZXIgZW4gZW1wbGFjZW1lbnQgdmFsaWRlIDogJywgLy8gJHBhdGgNCisJJ2JhY2tlbmQudW5saW5rX2ZhaWxlZCc6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZSBsb3JzIGRlIGxhIHN1cHByZXNzaW9uIGR1IGZpY2hpZXIgLyBkb3NzaWVyIDogJywgIC8vIHBhdGgNCisNCisJLy8gSW1hZ2UuY2xhc3MucGhwOg0KKwknYmFja2VuZC5wcm9jZXNzX25vZmlsZSc6ICdMZSBjaGVtaW4gZHUgZmljaGllciDDoCB0cmFpdGVyIG5cJ2VzdCBwYXMgdmFsaWRlLicsDQorCSdiYWNrZW5kLmltYWdlY3JlYXRldHJ1ZWNvbG9yX2ZhaWxlZCc6ICdMZSB0cmFpdGVtZW50IGRlIGxcJ2ltYWdlIGEgw6ljaG91w6kgOiBHRCBpbWFnZWNyZWF0ZXRydWVjb2xvcigpLicsDQorCSdiYWNrZW5kLmltYWdlYWxwaGFibGVuZGluZ19mYWlsZWQnOiAnTGUgdHJhaXRlbWVudCBkZSBsXCdpbWFnZSBhIMOpY2hvdcOpIDogQmxlbmRpbmcgYWxwaGEgaW1wb3NzaWJsZS4nLA0KKwknYmFja2VuZC5pbWFnZWFsbG9jYWxwaGE1MHBjdGdyZXlfZmFpbGVkJzogJ0xlIHRyYWl0ZW1lbnQgZGUgbFwnaW1hZ2UgYSDDqWNob3XDqSA6IE3DqW1vaXJlIGluc3VmZmlzYW50ZSBwb3VyIGFscGhhIGNoYW5uZWwgZXQgZm9uZCA1MCUuJywNCisJJ2JhY2tlbmQuaW1hZ2Vjb2xvcmFsbG9jYXRlYWxwaGFfZmFpbGVkJzogJ0xlIHRyYWl0ZW1lbnQgZGUgbFwnaW1hZ2UgYSDDqWNob3XDqSA6IE3DqW1vaXJlIGluc3VmZmlzYW50ZSBwb3VyIGFscGhhIGNoYW5uZWwuJywNCisJJ2JhY2tlbmQuaW1hZ2Vyb3RhdGVfZmFpbGVkJzogJ0xlIHRyYWl0ZW1lbnQgZGUgbFwnaW1hZ2UgYSDDqWNob3XDqSA6IEdEIGltYWdlcm90YXRlKCkuJywNCisJJ2JhY2tlbmQuaW1hZ2Vjb3B5cmVzYW1wbGVkX2ZhaWxlZCc6ICdMZSB0cmFpdGVtZW50IGRlIGxcJ2ltYWdlIGEgw6ljaG91w6kgOiBHRCBpbWFnZWNvcHlyZXNhbXBsZWQoKS4gUsOpc29sdXRpb24gaW1hZ2UgOiAnLCAvKiB4ICogeSAqLw0KKwknYmFja2VuZC5pbWFnZWNvcHlfZmFpbGVkJzogJ0xlIHRyYWl0ZW1lbnQgZGUgbFwnaW1hZ2UgYSDDqWNob3XDqSA6IEdEIGltYWdlY29weSgpLicsDQorCSdiYWNrZW5kLmltYWdlZmxpcF9mYWlsZWQnOiAnTGUgdHJhaXRlbWVudCBkZSBsXCdpbWFnZSBhIMOpY2hvdcOpIDogRmxpcCBpbXBvc3NpYmxlLicsDQorCSdiYWNrZW5kLmltYWdlanBlZ19mYWlsZWQnOiAnTGUgdHJhaXRlbWVudCBkZSBsXCdpbWFnZSBhIMOpY2hvdcOpIDogR0QgaW1hZ2VqcGVnKCkuJywNCisJJ2JhY2tlbmQuaW1hZ2VwbmdfZmFpbGVkJzogJ0xlIHRyYWl0ZW1lbnQgZGUgbFwnaW1hZ2UgYSDDqWNob3XDqSA6IEdEIGltYWdlcG5nKCkuJywNCisJJ2JhY2tlbmQuaW1hZ2VnaWZfZmFpbGVkJzogJ0xlIHRyYWl0ZW1lbnQgZGUgbFwnaW1hZ2UgYSDDqWNob3XDqSA6IEdEIGltYWdlZ2lmKCkuJywNCisJJ2JhY2tlbmQuaW1hZ2VjcmVhdGVfZmFpbGVkJzogJ0xlIHRyYWl0ZW1lbnQgZGUgbFwnaW1hZ2UgYSDDqWNob3XDqSA6IEdEIGltYWdlY3JlYXRlKCkuJywNCisJJ2JhY2tlbmQuY3Z0MnRydWVjb2xvcl9mYWlsZWQnOiAnY29udmVyc2lvbiB0byBUcnVlIENvbG9yIGZhaWxlZC4gUsOpc29sdXRpb24gaW1hZ2UgOiAnLCAvKiB4ICogeSAqLw0KKwknYmFja2VuZC5ub19pbWFnZWluZm8nOiAnSW1hZ2UgY29ycm9tcHUgb3UgZmljaGllciBub24gaW1hZ2UuJywNCisJJ2JhY2tlbmQuaW1nX3dpbGxfbm90X2ZpdCc6ICdFcnJldXIgc2VydmV1cjogTcOpbW9pcmUgaW5zdWZmaXNhbnRlOyBNaW5pbXVtIHJlcXVpcyA6ICcsIC8qIFhYWCBNQnl0ZXMgKi8NCisJJ2JhY2tlbmQudW5zdXBwb3J0ZWRfaW1nZm10JzogJ0Zvcm1hdCBub24gc3VwcG9ydMOpIDogJywgICAgLyoganBlZy9wbmcvZ2lmLy4uLiAqLw0KKw0KKwkvKiBGVSAqLw0KKwl1cGxvYWRlcjogew0KKwkJdW5rbm93bjogJ0VycmV1ciBpbmNvbm51ZScsDQorCQlkdXBsaWNhdGU6ICdWb3VzIG5lIHBvdXZleiBwYXMgYWpvdXRlciAiPGVtPiR7bmFtZX08L2VtPiIgKCR7c2l6ZX0pLCBjYXIgbFwnw6lsw6ltZW50IGVzdCBkw6lqw6AgYWpvdXTDqWUgIScsDQorCQlzaXplTGltaXRNaW46ICdWb3VzIG5lIHBvdXZleiBwYXMgYWpvdXRlciAiPGVtPiR7bmFtZX08L2VtPiIgKCR7c2l6ZX0pLCBsYSB0YWlsbGUgbWluaW1hbGUgZGVzIGZpY2hpZXJzIGVzdCBkZSA8c3Ryb25nPiR7c2l6ZV9taW59PC9zdHJvbmc+IScsDQorCQlzaXplTGltaXRNYXg6ICdWb3VzIG5lIHBvdXZleiBwYXMgYWpvdXRlciAiPGVtPiR7bmFtZX08L2VtPiIgKCR7c2l6ZX0pLCBsYSB0YWlsbGUgbWF4aW1hbGUgZGVzIGZpY2hpZXJzIGVzdCBkZSA8c3Ryb25nPiR7c2l6ZV9tYXh9PC9zdHJvbmc+IScsDQorCQltb2Rfc2VjdXJpdHk6ICdBdWN1bmUgcsOpcG9uc2UgZGUgbFwndXBsb2FkZXVyLiAibW9kX3NlY3VyaXR5IiBlc3QgcGV1dC3DqnRyZSBhY3RpZiBzdXIgbGUgc2VydmV1ciBldCB1biBkZXMgcsO0bGVzIGEgYW5udWzDqSBjZXR0ZSByZXF1w6p0ZS4gIFNpIHZvdXMgbmUgcG91dmV6IGTDqXNhY3RpdmVyIG1vZF9zZWN1cml0eSwgaWwgdm91cyBmYXV0IHV0aWxpc2VyIE5vRmxhc2ggVXBsb2FkZXIuJw0KKwl9LA0KKw0KKwlmbGFzaDogew0KKwkJaGlkZGVuOiBudWxsLA0KKwkJZGlzYWJsZWQ6IG51bGwsDQorCQlmbGFzaDogJ0RhbnMgbGUgYnV0IGRcJ3VwbG9hZGVyIGRlcyBmaWNoaWVycywgdm91cyBkZXZleiBpbnN0YWxsZXIgPGEgaHJlZj0iaHR0cDovL3d3dy5hZG9iZS5jb20vc2hvY2t3YXZlL2Rvd25sb2FkL2Rvd25sb2FkLmNnaT9QMV9Qcm9kX1ZlcnNpb249U2hvY2t3YXZlRmxhc2giPkFkb2JlIEZsYXNoPC9hPi4nDQorCX0sDQorDQorCXJlc2l6ZUltYWdlczogJ1JlZGltZW5zaW9ubmVyIHBlbmRhbnQgbFwndXBsb2FkJywNCisNCisJc2VyaWFsaXplOiAnU2F1dmVyIGxhIGdhbGVyaWUnLA0KKwlnYWxsZXJ5OiB7DQorCQl0ZXh0OiAnVGV4dGUgZGUgbFwnaW1hZ2UnLA0KKwkJc2F2ZTogJ1NhdXZlcicsDQorCQlyZW1vdmU6ICdSZXRpcmVyIGRlIGxhIGdhbGVyaWUnLA0KKwkJZHJhZzogJ0dsaXNzZXogZGVzIGltYWdlcyBpY2kgcG91ciBjcsOpZXIgdW5lIGdhbGVyaWUuLi4nDQorCX0NCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9MYW5ndWFnZS9MYW5ndWFnZS5pdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9MYW5ndWFnZS9MYW5ndWFnZS5pdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTFmNmI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLml0LmpzCkBAIC0wLDAgKzEsMTI1IEBACisvKg0KK1NjcmlwdDogTGFuZ3VhZ2UuaXQuanMNCisJTW9vVG9vbHMgRmlsZU1hbmFnZXIgLSBMYW5ndWFnZSBTdHJpbmdzIGluIEVuZ2xpc2gNCisNCitUcmFuc2xhdGlvbjoNCisJTW9yZW5vIE1vbmdhDQorKi8NCisNCitGaWxlTWFuYWdlci5MYW5ndWFnZS5pdCA9IHsNCisJbW9yZTogJ0RldHRhZ2xpJywNCisJd2lkdGg6ICdMYXJnaGV6emE6JywNCisJaGVpZ2h0OiAnQWx0ZXp6YTonLA0KKw0KKwlvazogJ09rJywNCisJb3BlbjogJ1NlbGV6aW9uYSBmaWxlJywNCisJdXBsb2FkOiAnVXBsb2FkJywNCisJY3JlYXRlOiAnQ3JlYSBjYXJ0ZWxsYScsDQorCWNyZWF0ZWRpcjogJ1NwZWNpZmljYSBpbCBub21lIGRlbGxhIGNhcnRlbGxhOicsDQorCWNhbmNlbDogJ0FubnVsbGEnLA0KKwllcnJvcjogJ0Vycm9yZScsDQorDQorCWluZm9ybWF0aW9uOiAnSW5mb3JtYXppb25pJywNCisJdHlwZTogJ1RpcG86JywNCisJc2l6ZTogJ0RpbWVuc2lvbmU6JywNCisJZGlyOiAnUGVyY29yc286JywNCisJbW9kaWZpZWQ6ICdVbHRpbWEgbW9kaWZpY2E6JywNCisJcHJldmlldzogJ0FudGVwcmltYScsDQorCWNsb3NlOiAnQ2hpdWRpJywNCisJZGVzdHJveTogJ0NhbmNlbGxhJywNCisJZGVzdHJveWZpbGU6ICdTZWkgc2ljdXJvIGRpIHZvbGVyIGNhbmNlbGxhcmUgcXVlc3RvIGZpbGU/JywNCisNCisJcmVuYW1lOiAnUmlub21pbmEnLA0KKwlyZW5hbWVmaWxlOiAnU2NyaXZpIHVuIG51b3ZvIG5vbWUgcGVyIGlsIGZpbGU6JywNCisJcm5fbXZfY3A6ICdSZW5hbWUvTW92ZS9Db3B5JywNCisNCisJZG93bmxvYWQ6ICdEb3dubG9hZCcsDQorCW5vcHJldmlldzogJzxpPk5vbiBzb25vIGRpc3BvbmliaWxpIGFudGVwcmltZTwvaT4nLA0KKw0KKwl0aXRsZTogJ1RpdG9sbzonLA0KKwlhcnRpc3Q6ICdBcnRpc3RhOicsDQorCWFsYnVtOiAnQWxidW06JywNCisJbGVuZ3RoOiAnTHVuZ2hlenphOicsDQorCWJpdHJhdGU6ICdCaXRyYXRlOicsDQorDQorCWRlc2VsZWN0OiAnRGVzZWxlemlvbmEnLA0KKw0KKwlub2Rlc3Ryb3k6ICdMYSBjYW5jZWxsYXppb25pIGRlaSBmaWxlIMOoIGRpc2FiaWxpdGF0YS4nLA0KKw0KKwl0b2dnbGVfc2lkZV9ib3hlczogJ1RodW1ibmFpbCB2aWV3JywNCisJdG9nZ2xlX3NpZGVfbGlzdDogJ0xpc3QgdmlldycsDQorCXNob3dfZGlyX3RodW1iX2dhbGxlcnk6ICdTaG93IHRodW1ibmFpbHMgb2YgdGhlIGZpbGVzIGluIHRoZSBwcmV2aWV3IHBhbmUnLA0KKwlkcmFnX25fZHJvcDogJ0RyYWcgJiBkcm9wIGhhcyBiZWVuIGVuYWJsZWQgZm9yIHRoaXMgZGlyZWN0b3J5JywNCisJZHJhZ19uX2Ryb3BfZGlzYWJsZWQ6ICdEcmFnICYgZHJvcCBoYXMgYmVlbiB0ZW1wb3JhcmlseSBkaXNhYmxlZCBmb3IgdGhpcyBkaXJlY3RvcnknLA0KKwlnb3RvX3BhZ2U6ICdHbyB0byBwYWdlJywNCisNCisJJ2JhY2tlbmQuZGlzYWJsZWQnOiAnTCBVcGxvYWQgZGVpIGZpbGUgw6ggZGlzYWJpbGl0YXRvLicsDQorCSdiYWNrZW5kLmF1dGhvcml6ZWQnOiAnTm9uIHNlaSBhdXRvcml6emF0byBhIGZhcmUgbCB1cGxvYWQgZGVpIGZpbGUuJywNCisJJ2JhY2tlbmQucGF0aCc6ICdMYSBjYXJ0ZWxsYSBkZWdsaSB1cGxvYWQgbm9uIGVzaXN0ZS4gQ29udGF0dGFyZSBpbCB3ZWJtYXN0ZXIuJywNCisJJ2JhY2tlbmQuZXhpc3RzJzogJ0xhIGNhcnRlbGxhIHNwZWNpZmljYXRhIHBlciBnbGkgdXBsb2FkIGVzaXN0ZSBnacOgLiBDb250YXR0YXJlIGlsIHdlYm1hc3Rlci4nLA0KKwknYmFja2VuZC5taW1lJzogJ0lsIHRpcG8gZGVsIGZpbGUgc3BlY2lmaWNhdG8gbm9uIMOoIGNvbnNlbnRpdG8uJywNCisJJ2JhY2tlbmQuZXh0ZW5zaW9uJzogJ0lsIHRpcG8gZGkgZmlsZSBjaGUgc2kgdnVvbGUgY2FyaWNhcmUgbm9uIMOoIGNvbnNlbnRpdG8gbyDDqCBzY29ub3NjaXV0by4nLA0KKwknYmFja2VuZC5zaXplJzogJ0xhIGRpbWVuc2lvbmUgZGVsIGZpbGUgw6ggdHJvcHBvIGdyYW5kZSBwZXIgZXNzZXJlIHByb2Nlc3NhdG8uIFJpY2FyaWNhIHVuIGZpbGUgY29uIGRpbWVuc2lvbmkgcmlkb3R0ZS4nLA0KKwknYmFja2VuZC5wYXJ0aWFsJzogJ0lsIGZpbGUgw6ggc3RhdG8gcGFyemlhbG1lbnRlIGNhcmljYXRvLiBQZXIgZmF2b3JlLCBwcm92YSBhIHJpY2FyaWNhcmxvLicsDQorCSdiYWNrZW5kLm5vZmlsZSc6ICdOb24gw6ggc3RhdG8gc3BlY2lmaWNhdG8gYWxjdW4gZmlsZSBkYSBjYXJpY2FyZS4nLA0KKwknYmFja2VuZC5kZWZhdWx0JzogJ01pIHNwaWFjZSwgbCBvcGVyYXppb25lIG5vbiDDqCBhbmRhdGEgYSBidW9uIGZpbmUuJywNCisJJ2JhY2tlbmQucGF0aF9ub3Rfd3JpdGFibGUnOiAnWW91IGRvIG5vdCBoYXZlIHdyaXRlL3VwbG9hZCBwZXJtaXNzaW9ucyBmb3IgdGhpcyBkaXJlY3RvcnkuJywNCisJJ2JhY2tlbmQuZmlsZW5hbWVfbWF5YmVfdG9vX2xhcmdlJzogJ1RoZSBmaWxlbmFtZS9wYXRoIGlzIHByb2JhYmx5IHRvbyBsb25nIGZvciB0aGUgc2VydmVyIGZpbGVzeXN0ZW0uIFBsZWFzZSByZXRyeSB3aXRoIGEgc2hvcnRlciBmaWxlIG5hbWUuJywNCisJJ2JhY2tlbmQuZm10X25vdF9hbGxvd2VkJzogJ1lvdSBhcmUgbm90IGFsbG93ZWQgdG8gdXBsb2FkIHRoaXMgZmlsZSBmb3JtYXQvbmFtZS4nLA0KKwknYmFja2VuZC5yZWFkX2Vycm9yJzogJ0Nhbm5vdCByZWFkIC8gZG93bmxvYWQgdGhlIHNwZWNpZmllZCBmaWxlLicsDQorCSdiYWNrZW5kLnVuaWRlbnRpZmllZF9lcnJvcic6ICdBbiB1bmluZGVudGlmaWVkIGVycm9yIG9jY3VycmVkIHdoaWxlIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgYmFja2VuZCAod2ViIHNlcnZlcikuJywNCisNCisJJ2JhY2tlbmQubm9uZXdmaWxlJzogJ0EgbmV3IG5hbWUgZm9yIHRoZSBmaWxlIHRvIGJlIG1vdmVkIC8gY29waWVkIGlzIG1pc3NpbmcuJywNCisJJ2JhY2tlbmQuY29ycnVwdF9pbWcnOiAnVGhpcyBmaWxlIGlzIGEgbm90IGEgaW1hZ2Ugb3IgYSBjb3JydXB0IGZpbGU6ICcsIC8vIHBhdGgNCisJJ2JhY2tlbmQucmVzaXplX2luZXJyJzogJ1RoaXMgZmlsZSBjb3VsZCBub3QgYmUgcmVzaXplZCBkdWUgdG8gYW4gaW50ZXJuYWwgZXJyb3IuJywNCisJJ2JhY2tlbmQuY29weV9mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgY29weWluZyB0aGUgZmlsZSAvIGRpcmVjdG9yeTogJywgLy8gb2xkbG9jYWxwYXRoIDogbmV3bG9jYWxwYXRoDQorCSdiYWNrZW5kLmRlbGV0ZV9jYWNoZV9lbnRyaWVzX2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gZGVsZXRlIHRoZSBpdGVtIGNhY2hlICh0aHVtYm5haWxzLCBtZXRhZGF0YSknLA0KKwknYmFja2VuZC5ta2Rpcl9mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5OiAnLCAvLyBwYXRoDQorCSdiYWNrZW5kLm1vdmVfZmFpbGVkJzogJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIG1vdmluZyAvIHJlbmFtaW5nIHRoZSBmaWxlIC8gZGlyZWN0b3J5OiAnLCAvLyBvbGRsb2NhbHBhdGggOiBuZXdsb2NhbHBhdGgNCisJJ2JhY2tlbmQucGF0aF90YW1wZXJpbmcnOiAnUGF0aCB0YW1wZXJpbmcgZGV0ZWN0ZWQuJywNCisJJ2JhY2tlbmQucmVhbHBhdGhfZmFpbGVkJzogJ0Nhbm5vdCB0cmFuc2xhdGUgdGhlIGdpdmVuIGZpbGUgc3BlY2lmaWNhdGlvbiB0byBhIHZhbGlkIHN0b3JhZ2UgbG9jYXRpb246ICcsIC8vICRwYXRoDQorCSdiYWNrZW5kLnVubGlua19mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGRlbGV0ZSB0aGUgZmlsZSAvIGRpcmVjdG9yeTogJywgIC8vIHBhdGgNCisNCisJLy8gSW1hZ2UuY2xhc3MucGhwOg0KKwknYmFja2VuZC5wcm9jZXNzX25vZmlsZSc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGRpZCBub3QgcmVjZWl2ZSBhIHZhbGlkIGZpbGUgbG9jYXRpb24gdG8gd29yayBvbi4nLA0KKwknYmFja2VuZC5pbWFnZWNyZWF0ZXRydWVjb2xvcl9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlY3JlYXRldHJ1ZWNvbG9yKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmltYWdlYWxwaGFibGVuZGluZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IGNhbm5vdCBwZXJmb3JtIHRoZSByZXF1aXJlZCBpbWFnZSBhbHBoYSBibGVuZGluZy4nLA0KKwknYmFja2VuZC5pbWFnZWFsbG9jYWxwaGE1MHBjdGdyZXlfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBhbHBoYSBjaGFubmVsIGFuZCB0aGUgNTAlIGJhY2tncm91bmQuJywNCisJJ2JhY2tlbmQuaW1hZ2Vjb2xvcmFsbG9jYXRlYWxwaGFfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBhbHBoYSBjaGFubmVsIGZvciB0aGlzIGNvbG9yIGltYWdlLicsDQorCSdiYWNrZW5kLmltYWdlcm90YXRlX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2Vyb3RhdGUoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2Vjb3B5cmVzYW1wbGVkX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2Vjb3B5cmVzYW1wbGVkKCkgZmFpbGVkLiBJbWFnZSByZXNvbHV0aW9uOiAnLCAvKiB4ICogeSAqLw0KKwknYmFja2VuZC5pbWFnZWNvcHlfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNvcHkoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2VmbGlwX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogY2Fubm90IGZsaXAgdGhlIGltYWdlLicsDQorCSdiYWNrZW5kLmltYWdlanBlZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlanBlZygpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5pbWFnZXBuZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlcG5nKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmltYWdlZ2lmX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2VnaWYoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2VjcmVhdGVfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNyZWF0ZSgpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5jdnQydHJ1ZWNvbG9yX2ZhaWxlZCc6ICdjb252ZXJzaW9uIHRvIFRydWUgQ29sb3IgZmFpbGVkLiBJbWFnZSByZXNvbHV0aW9uOiAnLCAvKiB4ICogeSAqLw0KKwknYmFja2VuZC5ub19pbWFnZWluZm8nOiAnQ29ycnVwdCBpbWFnZSBvciBub3QgYW4gaW1hZ2UgZmlsZSBhdCBhbGwuJywNCisJJ2JhY2tlbmQuaW1nX3dpbGxfbm90X2ZpdCc6ICdTZXJ2ZXIgZXJyb3I6IGltYWdlIGRvZXMgbm90IGZpdCBpbiBhdmFpbGFibGUgUkFNOyBtaW5pbXVtIHJlcXVpcmVkIChlc3RpbWF0ZSk6ICcsIC8qIFhYWCBNQnl0ZXMgKi8NCisJJ2JhY2tlbmQudW5zdXBwb3J0ZWRfaW1nZm10JzogJ3Vuc3VwcG9ydGVkIGltYWdlIGZvcm1hdDogJywgICAgLyoganBlZy9wbmcvZ2lmLy4uLiAqLw0KKw0KKwkvKiBGVSAqLw0KKwl1cGxvYWRlcjogew0KKwkJdW5rbm93bjogJ0Vycm9yZSBzY29ub3NjaXV0bycsDQorCQlzaXplTGltaXRNaW46ICdOb24gcHVvaSBjYXJpY2FyZSAiPGVtPiR7bmFtZX08L2VtPiIgKCR7c2l6ZX0pLCBsYSBkaW1lbnNpb25lIG1pbmltYSBkZWwgZmlsZSDDqCA8c3Ryb25nPiR7c2l6ZV9taW59PC9zdHJvbmc+IScsDQorCQlzaXplTGltaXRNYXg6ICdOb24gcHVvaSBjYXJpY2FyZSAiPGVtPiR7bmFtZX08L2VtPiIgKCR7c2l6ZX0pLCBsYSBkaW1lbnNpb25lIG1hc3NpbWEgZGVsIGZpbGUgw6ggPHN0cm9uZz4ke3NpemVfbWF4fTwvc3Ryb25nPiEnLA0KKwkJbW9kX3NlY3VyaXR5OiAnTm8gcmVzcG9uc2Ugd2FzIGdpdmVuIGZyb20gdGhlIHVwbG9hZGVyLCB0aGlzIG1heSBtZWFuIHRoYXQgIm1vZF9zZWN1cml0eSIgaXMgYWN0aXZlIG9uIHRoZSBzZXJ2ZXIgYW5kIG9uZSBvZiB0aGUgcnVsZXMgaW4gbW9kX3NlY3VyaXR5IGhhcyBjYW5jZWxsZWQgdGhpcyByZXF1ZXN0LiAgSWYgeW91IGNhbiBub3QgZGlzYWJsZSBtb2Rfc2VjdXJpdHksIHlvdSBtYXkgbmVlZCB0byB1c2UgdGhlIE5vRmxhc2ggVXBsb2FkZXIuJw0KKwl9LA0KKw0KKwlmbGFzaDogew0KKwkJaGlkZGVuOiAnVG8gZW5hYmxlIHRoZSBlbWJlZGRlZCB1cGxvYWRlciwgdW5ibG9jayBpdCBpbiB5b3VyIGJyb3dzZXIgYW5kIHJlZnJlc2ggKHNlZSBBZGJsb2NrKS4nLA0KKwkJZGlzYWJsZWQ6ICdUbyBlbmFibGUgdGhlIGVtYmVkZGVkIHVwbG9hZGVyLCBlbmFibGUgdGhlIGJsb2NrZWQgRmxhc2ggbW92aWUgIGFuZCByZWZyZXNoIChzZWUgRmxhc2hibG9jaykuJywNCisJCWZsYXNoOiAnSW4gb3JkZXIgdG8gdXBsb2FkIGZpbGVzIHlvdSBuZWVkIHRvIGluc3RhbGwgPGEgaHJlZj0iaHR0cDovL3d3dy5hZG9iZS5jb20vc2hvY2t3YXZlL2Rvd25sb2FkL2Rvd25sb2FkLmNnaT9QMV9Qcm9kX1ZlcnNpb249U2hvY2t3YXZlRmxhc2giPkFkb2JlIEZsYXNoPC9hPi4nDQorCX0sDQorDQorCXJlc2l6ZUltYWdlczogJ1JpZGltZW5zaW9uYSBpbW1hZ2luaSBncmFuZGknLA0KKw0KKwlzZXJpYWxpemU6ICdTYWx2YSBnYWxsZXJpYScsDQorCWdhbGxlcnk6IHsNCisJCXRleHQ6ICdUaXRvbG8gaW1tYWdpbmUnLA0KKwkJc2F2ZTogJ1NhbHZhJywNCisJCXJlbW92ZTogJ1JpbXVvdmkgZGFsbGEgZ2FsbGVyaWEnLA0KKwkJZHJhZzogJ1Nwb3N0YSBnbGkgb2dnZXR0aSBxdWkgcGVyIGNyZWFyZSB1bmEgZ2FsbGVyaWEuLi4nDQorCX0NCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9MYW5ndWFnZS9MYW5ndWFnZS5ubC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9MYW5ndWFnZS9MYW5ndWFnZS5ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjgwZWI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLm5sLmpzCkBAIC0wLDAgKzEsMTI1IEBACisvKg0KK1NjcmlwdDogTGFuZ3VhZ2UubmwuanMNCisJTW9vVG9vbHMgRmlsZU1hbmFnZXIgLSBMYW5ndWFnZSBTdHJpbmdzIGluIER1dGNoDQorDQorVHJhbnNsYXRpb246DQorCVtEYXZlIERlIFZvc10oaHR0cDovL3duei5iZSkNCisqLw0KKw0KK0ZpbGVNYW5hZ2VyLkxhbmd1YWdlLm5sID0gew0KKwltb3JlOiAnRGV0YWlscycsDQorCXdpZHRoOiAnQnJlZWR0ZTonLA0KKwloZWlnaHQ6ICdIb29ndGU6JywNCisNCisJb2s6ICdPaycsDQorCW9wZW46ICdLaWVzIGJlc3RhbmQnLA0KKwl1cGxvYWQ6ICdVcGxvYWRlbicsDQorCWNyZWF0ZTogJ01hYWsgbWFwJywNCisJY3JlYXRlZGlyOiAnR2VlZiBlZW4gbWFwLW5hYW0gb3A6JywNCisJY2FuY2VsOiAnQW5udWxlcmVuJywNCisJZXJyb3I6ICdGb3V0JywNCisNCisJaW5mb3JtYXRpb246ICdJbmZvcm1hdGllJywNCisJdHlwZTogJ1R5cGU6JywNCisJc2l6ZTogJ0dyb290dGU6JywNCisJZGlyOiAnTG9jYXRpZTonLA0KKwltb2RpZmllZDogJ0xhYXRzdGUgd2lqemlnaW5nOicsDQorCXByZXZpZXc6ICdWb29yYmVlbGQnLA0KKwljbG9zZTogJ1NsdWl0ZW4nLA0KKwlkZXN0cm95OiAnVmVyd2lqZGVyZW4nLA0KKwlkZXN0cm95ZmlsZTogJ0JlbiBqZSB6ZWtlciBkYXQgamUgZGl0IGJlc3RhbmQgd2lsIHZlcndpamRlcmVuPycsDQorDQorCXJlbmFtZTogJ05hYW0gd2lqemlnZW4nLA0KKwlyZW5hbWVmaWxlOiAnR2VlZiBlZW4gbmlldXdlIGJlc3RhbmRzbmFhbSBvcDonLA0KKwlybl9tdl9jcDogJ1JlbmFtZS9Nb3ZlL0NvcHknLA0KKw0KKwlkb3dubG9hZDogJ0Rvd25sb2FkZW4nLA0KKwlub3ByZXZpZXc6ICc8aT5H6eluIHZvb3JiZWVsZCBiZXNjaGlrYmFhcjwvaT4nLA0KKw0KKwl0aXRsZTogJ1RpdGVsOicsDQorCWFydGlzdDogJ0FydGllc3Q6JywNCisJYWxidW06ICdBbGJ1bTonLA0KKwlsZW5ndGg6ICdMZW5ndGU6JywNCisJYml0cmF0ZTogJ0JpdHJhdGU6JywNCisNCisJZGVzZWxlY3Q6ICdEZXNlbGVjdGVyZW4nLA0KKw0KKwlub2Rlc3Ryb3k6ICdIZXQgaXMgbmlldCBtb2dlbGlqayBiZXN0YW5kZW4gdGUgdmVyd2lqZGVyZW4gb3AgZGV6ZSBzZXJ2ZXIuJywNCisNCisJdG9nZ2xlX3NpZGVfYm94ZXM6ICdUaHVtYm5haWwgdmlldycsDQorCXRvZ2dsZV9zaWRlX2xpc3Q6ICdMaXN0IHZpZXcnLA0KKwlzaG93X2Rpcl90aHVtYl9nYWxsZXJ5OiAnU2hvdyB0aHVtYm5haWxzIG9mIHRoZSBmaWxlcyBpbiB0aGUgcHJldmlldyBwYW5lJywNCisJZHJhZ19uX2Ryb3A6ICdEcmFnICYgZHJvcCBoYXMgYmVlbiBlbmFibGVkIGZvciB0aGlzIGRpcmVjdG9yeScsDQorCWRyYWdfbl9kcm9wX2Rpc2FibGVkOiAnRHJhZyAmIGRyb3AgaGFzIGJlZW4gdGVtcG9yYXJpbHkgZGlzYWJsZWQgZm9yIHRoaXMgZGlyZWN0b3J5JywNCisJZ290b19wYWdlOiAnR28gdG8gcGFnZScsDQorDQorCSdiYWNrZW5kLmRpc2FibGVkJzogJ0RlemUgb3BlcmF0aWUgaXMgdWl0Z2VzY2hha2VsZCBvcCBkZXplIHNlcnZlci4nLA0KKwknYmFja2VuZC5hdXRob3JpemVkJzogJ0plIGhlYnQgZ2VlbiB0b2VzdGVtbWluZyBvbSBkZXplIGFrdGllIHVpdCB0ZSB2b2VyZW4uJywNCisJJ2JhY2tlbmQucGF0aCc6ICdEZXplIG1hcCBiZXN0YWF0IG5pZXQuICBDb250YWN0ZWVyIGRlIGJlaGVlcmRlciB2YW4gZGV6ZSB3ZWJzaXRlIHZvb3IgaHVscC4nLA0KKwknYmFja2VuZC5leGlzdHMnOiAnRGV6ZSBsb2NhdGllIGJlc3RhYXQgcmVlZHMuIENvbnRhY3RlZXIgZGUgYmVoZWVyZGVyIHZhbiBkZXplIHdlYnNpdGUgdm9vciBodWxwLicsDQorCSdiYWNrZW5kLm1pbWUnOiAnRGl0IGJlc3RhbmRzdHlwZSBpcyBuaWV0IHRvZWdlbGF0ZW4uJywNCisJJ2JhY2tlbmQuZXh0ZW5zaW9uJzogJ0hldCBiZXN0YW5kIGhlZWZ0IGVlbiBvbmJla2VuZGUgb2YgbmlldC10b2VnZWxhdGVuIGV4dGVuc2llLicsDQorCSdiYWNrZW5kLnNpemUnOiAnSGV0IGJlc3RhbmQgaXMgdGUgZ3Jvb3Qgdm9vciB2ZXJ3ZXJraW5nLiAgUHJvYmVlciBvcG5pZXV3IG1ldCBlZW4ga2xlaW5lciBiZXN0YW5kLicsDQorCSdiYWNrZW5kLnBhcnRpYWwnOiAnSGV0IGJlc3RhbmQgZGF0IGplIHZlcnN0dXVyZGUgd2VyZCBzbGVjaHRzIGdlZGVlbHRlbGlqayBvbnR2YW5nZW4sIHByb2JlZXIgaGV0IGJlc3RhbmQgb3BuaWV1dyB0ZSB2ZXJzdHVyZW4uJywNCisJJ2JhY2tlbmQubm9maWxlJzogJ0VyIHdlcmQgZ+npbiBiZXN0YW5kIHZlcnN0dXVyZCBvZiBoZXQgYmVzdGFuZCAvIGZvbGRlciBrb24gbmlldCB3b3JkZW4gZ2V2b25kZW4uJywNCisJJ2JhY2tlbmQuZGVmYXVsdCc6ICdFciBnaW5nIGlldHMgZm91dCBiaWogaGV0IHVwbG9hZGVuIHZhbiBoZXQgYmVzdGFuZC4nLA0KKwknYmFja2VuZC5wYXRoX25vdF93cml0YWJsZSc6ICdZb3UgZG8gbm90IGhhdmUgd3JpdGUvdXBsb2FkIHBlcm1pc3Npb25zIGZvciB0aGlzIGRpcmVjdG9yeS4nLA0KKwknYmFja2VuZC5maWxlbmFtZV9tYXliZV90b29fbGFyZ2UnOiAnVGhlIGZpbGVuYW1lL3BhdGggaXMgcHJvYmFibHkgdG9vIGxvbmcgZm9yIHRoZSBzZXJ2ZXIgZmlsZXN5c3RlbS4gUGxlYXNlIHJldHJ5IHdpdGggYSBzaG9ydGVyIGZpbGUgbmFtZS4nLA0KKwknYmFja2VuZC5mbXRfbm90X2FsbG93ZWQnOiAnWW91IGFyZSBub3QgYWxsb3dlZCB0byB1cGxvYWQgdGhpcyBmaWxlIGZvcm1hdC9uYW1lLicsDQorCSdiYWNrZW5kLnJlYWRfZXJyb3InOiAnQ2Fubm90IHJlYWQgLyBkb3dubG9hZCB0aGUgc3BlY2lmaWVkIGZpbGUuJywNCisJJ2JhY2tlbmQudW5pZGVudGlmaWVkX2Vycm9yJzogJ0FuIHVuaW5kZW50aWZpZWQgZXJyb3Igb2NjdXJyZWQgd2hpbGUgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBiYWNrZW5kICh3ZWIgc2VydmVyKS4nLA0KKw0KKwknYmFja2VuZC5ub25ld2ZpbGUnOiAnQSBuZXcgbmFtZSBmb3IgdGhlIGZpbGUgdG8gYmUgbW92ZWQgLyBjb3BpZWQgaXMgbWlzc2luZy4nLA0KKwknYmFja2VuZC5jb3JydXB0X2ltZyc6ICdUaGlzIGZpbGUgaXMgYSBub3QgYSBpbWFnZSBvciBhIGNvcnJ1cHQgZmlsZTogJywgLy8gcGF0aA0KKwknYmFja2VuZC5yZXNpemVfaW5lcnInOiAnVGhpcyBmaWxlIGNvdWxkIG5vdCBiZSByZXNpemVkIGR1ZSB0byBhbiBpbnRlcm5hbCBlcnJvci4nLA0KKwknYmFja2VuZC5jb3B5X2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBjb3B5aW5nIHRoZSBmaWxlIC8gZGlyZWN0b3J5OiAnLCAvLyBvbGRsb2NhbHBhdGggOiBuZXdsb2NhbHBhdGgNCisJJ2JhY2tlbmQuZGVsZXRlX2NhY2hlX2VudHJpZXNfZmFpbGVkJzogJ0FuIGVycm9yIG9jY3VycmVkIHdoZW4gYXR0ZW1wdGluZyB0byBkZWxldGUgdGhlIGl0ZW0gY2FjaGUgKHRodW1ibmFpbHMsIG1ldGFkYXRhKScsDQorCSdiYWNrZW5kLm1rZGlyX2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gY3JlYXRlIHRoZSBkaXJlY3Rvcnk6ICcsIC8vIHBhdGgNCisJJ2JhY2tlbmQubW92ZV9mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbW92aW5nIC8gcmVuYW1pbmcgdGhlIGZpbGUgLyBkaXJlY3Rvcnk6ICcsIC8vIG9sZGxvY2FscGF0aCA6IG5ld2xvY2FscGF0aA0KKwknYmFja2VuZC5wYXRoX3RhbXBlcmluZyc6ICdQYXRoIHRhbXBlcmluZyBkZXRlY3RlZC4nLA0KKwknYmFja2VuZC5yZWFscGF0aF9mYWlsZWQnOiAnQ2Fubm90IHRyYW5zbGF0ZSB0aGUgZ2l2ZW4gZmlsZSBzcGVjaWZpY2F0aW9uIHRvIGEgdmFsaWQgc3RvcmFnZSBsb2NhdGlvbjogJywgLy8gJHBhdGgNCisJJ2JhY2tlbmQudW5saW5rX2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gZGVsZXRlIHRoZSBmaWxlIC8gZGlyZWN0b3J5OiAnLCAgLy8gcGF0aA0KKw0KKwkvLyBJbWFnZS5jbGFzcy5waHA6DQorCSdiYWNrZW5kLnByb2Nlc3Nfbm9maWxlJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZGlkIG5vdCByZWNlaXZlIGEgdmFsaWQgZmlsZSBsb2NhdGlvbiB0byB3b3JrIG9uLicsDQorCSdiYWNrZW5kLmltYWdlY3JlYXRldHJ1ZWNvbG9yX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2VjcmVhdGV0cnVlY29sb3IoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2VhbHBoYWJsZW5kaW5nX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogY2Fubm90IHBlcmZvcm0gdGhlIHJlcXVpcmVkIGltYWdlIGFscGhhIGJsZW5kaW5nLicsDQorCSdiYWNrZW5kLmltYWdlYWxsb2NhbHBoYTUwcGN0Z3JleV9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IGNhbm5vdCBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGFscGhhIGNoYW5uZWwgYW5kIHRoZSA1MCUgYmFja2dyb3VuZC4nLA0KKwknYmFja2VuZC5pbWFnZWNvbG9yYWxsb2NhdGVhbHBoYV9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IGNhbm5vdCBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGFscGhhIGNoYW5uZWwgZm9yIHRoaXMgY29sb3IgaW1hZ2UuJywNCisJJ2JhY2tlbmQuaW1hZ2Vyb3RhdGVfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZXJvdGF0ZSgpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5pbWFnZWNvcHlyZXNhbXBsZWRfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNvcHlyZXNhbXBsZWQoKSBmYWlsZWQuIEltYWdlIHJlc29sdXRpb246ICcsIC8qIHggKiB5ICovDQorCSdiYWNrZW5kLmltYWdlY29weV9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlY29weSgpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5pbWFnZWZsaXBfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgZmxpcCB0aGUgaW1hZ2UuJywNCisJJ2JhY2tlbmQuaW1hZ2VqcGVnX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2VqcGVnKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmltYWdlcG5nX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2VwbmcoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2VnaWZfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWdpZigpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5pbWFnZWNyZWF0ZV9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlY3JlYXRlKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmN2dDJ0cnVlY29sb3JfZmFpbGVkJzogJ2NvbnZlcnNpb24gdG8gVHJ1ZSBDb2xvciBmYWlsZWQuIEltYWdlIHJlc29sdXRpb246ICcsIC8qIHggKiB5ICovDQorCSdiYWNrZW5kLm5vX2ltYWdlaW5mbyc6ICdDb3JydXB0IGltYWdlIG9yIG5vdCBhbiBpbWFnZSBmaWxlIGF0IGFsbC4nLA0KKwknYmFja2VuZC5pbWdfd2lsbF9ub3RfZml0JzogJ1NlcnZlciBlcnJvcjogaW1hZ2UgZG9lcyBub3QgZml0IGluIGF2YWlsYWJsZSBSQU07IG1pbmltdW0gcmVxdWlyZWQgKGVzdGltYXRlKTogJywgLyogWFhYIE1CeXRlcyAqLw0KKwknYmFja2VuZC51bnN1cHBvcnRlZF9pbWdmbXQnOiAndW5zdXBwb3J0ZWQgaW1hZ2UgZm9ybWF0OiAnLCAgICAvKiBqcGVnL3BuZy9naWYvLi4uICovDQorDQorCS8qIEZVICovDQorCXVwbG9hZGVyOiB7DQorCQl1bmtub3duOiAnT25iZWtlbmRlIGZvdXQnLA0KKwkJc2l6ZUxpbWl0TWluOiAnSmUga2FuIGhldCBiZXN0YW5kICI8ZW0+JHtuYW1lfTwvZW0+IiAoJHtzaXplfSkgbmlldCB0b2V2b2VnZW4sIGRlIG1pbmltdW0gYmVzdGFuZHNncm9vdHRlIHZvb3IgdXBsb2FkIGlzIDxzdHJvbmc+JHtzaXplX21pbn08L3N0cm9uZz4hJywNCisJCXNpemVMaW1pdE1heDogJ0plIGthbiBoZXQgYmVzdGFuZCAiPGVtPiR7bmFtZX08L2VtPiIgKCR7c2l6ZX0pIG5pZXQgdG9ldm9lZ2VuLCBkZSBtaW5pbXVtIGJlc3RhbmRzZ3Jvb3R0ZSB2b29yIHVwbG9hZCBpcyA8c3Ryb25nPiR7c2l6ZV9tYXh9PC9zdHJvbmc+IScsDQorCQltb2Rfc2VjdXJpdHk6ICdObyByZXNwb25zZSB3YXMgZ2l2ZW4gZnJvbSB0aGUgdXBsb2FkZXIsIHRoaXMgbWF5IG1lYW4gdGhhdCAibW9kX3NlY3VyaXR5IiBpcyBhY3RpdmUgb24gdGhlIHNlcnZlciBhbmQgb25lIG9mIHRoZSBydWxlcyBpbiBtb2Rfc2VjdXJpdHkgaGFzIGNhbmNlbGxlZCB0aGlzIHJlcXVlc3QuICBJZiB5b3UgY2FuIG5vdCBkaXNhYmxlIG1vZF9zZWN1cml0eSwgeW91IG1heSBuZWVkIHRvIHVzZSB0aGUgTm9GbGFzaCBVcGxvYWRlci4nDQorCX0sDQorDQorCWZsYXNoOiB7DQorCQloaWRkZW46ICdPbSBkZSBpbmdlYm91d2RlIHVwbG9hZGVyIGluIHRlIHNjaGFrZWxlbiwgZGVibG9ra2VlciBkZXplIGluIGplIGJyb3dzZXIgZW4gdmVybmlldXcgZGUgcGFnaW5hICh6aWUgQWRibG9jaykuJywNCisJCWRpc2FibGVkOiAnT20gZGUgaW5nZWJvdXdkZSB1cGxvYWRlciBpbiB0ZSBzY2hha2VsZW4sIHNjaGFrZWwgaGV0IGdlYmxva2tlZXJkZSBGbGFzaC1jb21wb25lbnQgaW4gZW4gdmVybmlldXcgZGUgcGFnaW5hICh6aWUgRmxhc2hibG9jaykuJywNCisJCWZsYXNoOiAnT20gYmVzdGFuZGVuIHRlIGt1bm5lbiB1cGxvYWRlbiBkaWVuIGplIDxhIGhyZWY9Imh0dHA6Ly93d3cuYWRvYmUuY29tL3Nob2Nrd2F2ZS9kb3dubG9hZC9kb3dubG9hZC5jZ2k/UDFfUHJvZF9WZXJzaW9uPVNob2Nrd2F2ZUZsYXNoIj5BZG9iZSBGbGFzaDwvYT4gdGUgaW5zdGFsbGVyZW4uJw0KKwl9LA0KKw0KKwlyZXNpemVJbWFnZXM6ICdQYXMgZGUgZGltZW5zaWVzIHZhbiBncm90ZSBhZmJlZWxkaW5nZW4gYWFuJywNCisNCisJc2VyaWFsaXplOiAnU2F2ZSBnYWxsZXJ5JywNCisJZ2FsbGVyeTogew0KKwkJdGV4dDogJ0ltYWdlIGNhcHRpb24nLA0KKwkJc2F2ZTogJ1NhdmUnLA0KKwkJcmVtb3ZlOiAnUmVtb3ZlIGZyb20gZ2FsbGVyeScsDQorCQlkcmFnOiAnRHJhZyBpdGVtcyBoZXJlIHRvIGNyZWF0ZSBhIGdhbGxlcnkuLi4nDQorCX0NCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9MYW5ndWFnZS9MYW5ndWFnZS5uby5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9MYW5ndWFnZS9MYW5ndWFnZS5uby5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2QyYjhkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLm5vLmpzCkBAIC0wLDAgKzEsMTIzIEBACisvKgorU2NyaXB0OiBMYW5ndWFnZS5lbi5qcworCU1vb1Rvb2xzIEZpbGVNYW5hZ2VyIC0gTGFuZ3VhZ2UgU3RyaW5ncyBpbiBOb3J3ZWdpYW4KKworVHJhbnNsYXRpb246CisJW0VpbGVuIEFtdW5kc2fDpXJkXQorKi8KKworRmlsZU1hbmFnZXIuTGFuZ3VhZ2Uubm8gPSB7CisJbW9yZTogJ0RldGFsamVyJywKKwl3aWR0aDogJ0JyZWRkZTonLAorCWhlaWdodDogJ0jDuHlkZTonLAorCisJb2s6ICdPaycsCisJb3BlbjogJ1ZlbGcgZmlsJywKKwl1cGxvYWQ6ICdMYXN0IG9wcCcsCisJY3JlYXRlOiAnT3BwcmV0dCBtYXBwZScsCisJY3JlYXRlZGlyOiAnQW5naSBtYXBwZW5hdm46JywKKwljYW5jZWw6ICdBdmJyeXQnLAorCWVycm9yOiAnRmVpbCcsCisKKwlpbmZvcm1hdGlvbjogJ0luZm9ybWFzam9uJywKKwl0eXBlOiAnVHlwZTonLAorCXNpemU6ICdTdMO4cnJlbHNlOicsCisJZGlyOiAnUGxhc3NlcmluZzonLAorCW1vZGlmaWVkOiAnU2lzdCBlbmRyZXQ6JywKKwlwcmV2aWV3OiAnRm9yaMOlbmRzdmlzbmluZycsCisJY2xvc2U6ICdMdWtrJywKKwlkZXN0cm95OiAnU2xldHQnLAorCWRlc3Ryb3lmaWxlOiAnRXIgZHUgc2lra2VyIHDDpSBhdCBkdSB2aWwgc2xldHRlIGRlbm5lIGZpbGVuPycsCisKKwlyZW5hbWU6ICdFbmRyZSBuYXZuJywKKwlyZW5hbWVmaWxlOiAnQW5naSBldCBueXR0IGZpbG5hdm46JywKKworCWRvd25sb2FkOiAnTGFzdCBuZWQnLAorCW5vcHJldmlldzogJzxpPkluZ2VuIGZvcmjDpW5kc3Zpc25pbmcgdGlsZ2plbmdlbGlnPC9pPicsCisKKwl0aXRsZTogJ1RpdHRlbDonLAorCWFydGlzdDogJ0FydGlzdDonLAorCWFsYnVtOiAnQWxidW06JywKKwlsZW5ndGg6ICdMZW5nZGU6JywKKwliaXRyYXRlOiAnQml0cmF0ZTonLAorCisJZGVzZWxlY3Q6ICdGamVybiBtYXJrZXJpbmcnLAorCisJbm9kZXN0cm95OiAnTXVsaWdoZXRlbiBmb3Igw6Ugc2xldHRlIGZpbGVyIGVyIGRlYWt0aXZlcnQgcMOlIGRlbm5lIHNlcnZlcmVuLicsCisKKwl0b2dnbGVfc2lkZV9ib3hlczogJ1RodW1ibmFpbCB2aXNuaW5nJywKKwl0b2dnbGVfc2lkZV9saXN0OiAnTGlzdGUgdmlzbmluZycsCisJc2hvd19kaXJfdGh1bWJfZ2FsbGVyeTogJ1ZpcyB0aHVtYm5haWxzIGF2IGZpbGVuZSBpIGZvcmjDpW5kc3Zpc25pbmdzcnV0ZW4nLAorCWRyYWdfbl9kcm9wOiAnRHJhZyAmIGRyb3AgZXIgYWt0aXZlcnQgZm9yIGRlbm5lIG1hcHBlbicsCisJZHJhZ19uX2Ryb3BfZGlzYWJsZWQ6ICdEcmFnICYgZHJvcCBlciBtaWRsZXJ0aWRpZyBkZWFrdGl2ZXJ0IGZvciBkZW5uZSBtYXBwZW4nLAorCWdvdG9fcGFnZTogJ0fDpSB0aWwgc2lkZW4nLAorCisJJ2JhY2tlbmQuZGlzYWJsZWQnOiAnT3BwbGFzdGluZyBhdiBmaWxlciBlciBkZWFrdGl2ZXJ0IHDDpSBkZW5uZSBzZXJ2ZXJlbi4nLAorCSdiYWNrZW5kLmF1dGhvcml6ZWQnOiAnRHUgaGFyIGlra2UgcmV0dGlnaGV0ZXIgdGlsIMOlIGxhc3RlIG9wcCBmaWxlci4nLAorCSdiYWNrZW5kLnBhdGgnOiAnRGVuIGFuZ2l0dGUgb3BwbGFzdGluZ3NtYXBwZW4gZWtzaXN0ZXJlciBpa2tlLiBWZW5ubGlnc3Qga29udGFrdCBkZW5uZSBzaWRlbnMgYWRtaW5pc3RyYXRvci4nLAorCSdiYWNrZW5kLmV4aXN0cyc6ICdEZXQgYW5naXR0ZSBvcHBsYXN0aW5nc3BsYXNzZXJpbmdlbiBmaW5uZXMgYWxsZXJlZGUuIFZlbm5saWdzdCBrb250YWt0IGRlbm5lIHNpZGVucyBhZG1pbmlzdHJhdG9yLicsCisJJ2JhY2tlbmQubWltZSc6ICdEZW4gYW5naXR0ZSBmaWx0eXBlbiBlciBpa2tlIGxvdmxpZy4nLAorCSdiYWNrZW5kLmV4dGVuc2lvbic6ICdEZW4gb3BwbGFzdGVkZSBmaWxlbiBlciBhdiBlbiB1a2plbnQgZWxsZXIgdWxvdmxpZyBmaWx0eXBlLicsCisJJ2JhY2tlbmQuc2l6ZSc6ICdTdMO4cnJlbHNlbiBww6UgZGVuIG9wcGxhc3RlZGUgZmlsZW4gZXIgZm9yIHN0b3IgdGlsIMOlIGJsaSBiZWhhbmRsZXQgcMOlIGRlbm5lIHNlcnZlcmVuLiBWZW5ubGlnc3QgbGFzdCBvcHAgZW4gbWluZHJlIGZpbC4nLAorCSdiYWNrZW5kLnBhcnRpYWwnOiAnRmlsZW4gZHUgbGFzdGV0IG9wcCBibGUgYmFyZSBkZWx2aXMgb3BwbGFzdGV0LCB2ZW5ubGlnc3QgcHLDuHYgw6UgbGFzdGUgb3BwIGZpbGVuIHDDpSBueXR0LicsCisJJ2JhY2tlbmQubm9maWxlJzogJ0luZ2VuIGZpbCBibGUgYW5naXR0IGZvciBvcHBsYXN0aW5nLicsCisJJ2JhY2tlbmQuZGVmYXVsdCc6ICdOb2UgZ2lrayBnYWx0IHVuZGVyIG9wcGxhc3RpbmcgYXYgZmlsZW4uJywKKwknYmFja2VuZC5wYXRoX25vdF93cml0YWJsZSc6ICdEdSBoYXIgaWtrZSBza3JpdmUtL29wcGxhc3RpbmdyZXR0aWdoZXRlciBmb3IgZGVubmUgbWFwcGVuLicsCisJJ2JhY2tlbmQuZmlsZW5hbWVfbWF5YmVfdG9vX2xhcmdlJzogJ0ZpbG5hdm5ldC9zdGllbiBlciBzYW5uc3lubGlndmlzIGZvciBsYW5nIGZvciBzZXJ2ZXJlbnMgZmlsc3lzdGVtLiBWZW5ubGlnc3QgZm9yc8O4ayBpZ2plbiBtZWQgZXQga29ydGVyZSBmaWxuYXZuLicsCisJJ2JhY2tlbmQuZm10X25vdF9hbGxvd2VkJzogJ0R1IGhhciBpa2tlIHJldHRpZ2hldGVyIHRpbCDDpSBsYXN0ZSBvcHAgZmlsZXIgYXYgZGVubmUgdHlwZW4gZWxsZXIgbWVkIGRldHRlIG5hdm5ldC4nLAorCSdiYWNrZW5kLnVuaWRlbnRpZmllZF9lcnJvcic6ICdFbiB1aWRlbnRpZmlzZXJiYXIgZmVpbCBvcHBzdG8gdW5kZXIga29udGFrdGVuIG1lZCBiYWNrZW5kICh3ZWJzZXJ2ZXJlbikuJywKKworCSdiYWNrZW5kLm5vbmV3ZmlsZSc6ICdFdCBueXR0IG5hdm4gZm9yIGZpbGVuIHNvbSBza2FsIGZseXR0ZXMgLyBrb3BpZXJlcyBtYW5nbGVyLicsCisJJ2JhY2tlbmQuY29ycnVwdF9pbWcnOiAnRGV0dGUgZXIgZW50ZW4gaWtrZSBlbiBiaWxkZWZpbCBlbGxlciBzw6UgZXIgZGVuIGtvcnJ1cHQ6ICcsIC8vIHBhdGgKKwknYmFja2VuZC5yZXNpemVfaW5lcnInOiAnUMOlIGdydW5uIGF2IGVuIGludGVybiBmZWlsIGthbiBpa2tlIGRlbm5lIGZpbGVuIGVuZHJlIHN0w7hycmVsc2UuJywKKwknYmFja2VuZC5jb3B5X2ZhaWxlZCc6ICdFbiBmZWlsIG9wcHN0b2QgdW5kZXIga29waWVyaW5nIGF2IGZpbGVuL21hcHBlbjogJywgLy8gb2xkbG9jYWxwYXRoIDogbmV3bG9jYWxwYXRoCisJJ2JhY2tlbmQuZGVsZXRlX2NhY2hlX2VudHJpZXNfZmFpbGVkJzogJ0VuIGZlaWwgb3Bwc3RvZCB1bmRlciBldCBmb3Jzw7hrIHDDpSDDpSBzbGV0dGUgb2JqZWt0ZXRzIGNhY2hlICh0aHVtYm5haWxzLCBtZXRhZGF0YSknLAorCSdiYWNrZW5kLm1rZGlyX2ZhaWxlZCc6ICdFbiBmZWlsIG9wcHN0b2QgdW5kZXIgZXQgZm9yc8O4ayBww6Ugw6Ugb3BwcmV0dGUgbWFwcGVuOiAnLCAvLyBwYXRoCisJJ2JhY2tlbmQubW92ZV9mYWlsZWQnOiAnRW4gZmVpbCBvcHBzdG9kIHVuZGVyIGZseXR0aW5nL2VuZHJpbmcgYXYgbmF2biBww6UgZmlsZW4vbWFwcGVuOiAnLCAvLyBvbGRsb2NhbHBhdGggOiBuZXdsb2NhbHBhdGgKKwknYmFja2VuZC5wYXRoX3RhbXBlcmluZyc6ICdGb3Jzw7hrIHDDpSDDpSBlbmRyZSBwbGFzc2VyaW5nIGVyIG9wcGRhZ2V0LicsCisJJ2JhY2tlbmQucmVhbHBhdGhfZmFpbGVkJzogJ0thbiBpa2tlIG92ZXJzZXR0ZSBkZW4gZ2l0dGUgZmlsc3Blc2lmaWthc2pvbmVuIHRpbCBlbiBneWxkaW5nIGxhZ3JpbmdzYWRyZXNzZTogJywgLy8gJHBhdGgKKwknYmFja2VuZC51bmxpbmtfZmFpbGVkJzogJ0VuIGZlaWwgb3Bwc3RvZCB1bmRlciBldCBmb3Jzw7hrIHDDpSDDpSBzbGV0dGUgZmlsZW4vbWFwcGVuOiAnLCAgLy8gcGF0aAorCisJLy8gSW1hZ2UuY2xhc3MucGhwOgorCSdiYWNrZW5kLnByb2Nlc3Nfbm9maWxlJzogJ0VuaGV0ZW4gZm9yIGJpbGRlcHJvc2Vzc2VyaW5nIGZpa2sgaWtrZSBlbiBneWxkaWcgZmlscGxhc3NlcmluZyDDpSBqb2JiZSBww6UuJywKKwknYmFja2VuZC5pbWFnZWNyZWF0ZXRydWVjb2xvcl9mYWlsZWQnOiAnRW5oZXRlbiBmb3IgYmlsZGVwcm9zZXNzZXJpbmcgZmVpbGV0OiBHRCBpbWFnZWNyZWF0ZXRydWVjb2xvcigpIGZlaWxldC4nLAorCSdiYWNrZW5kLmltYWdlYWxwaGFibGVuZGluZ19mYWlsZWQnOiAnRW5oZXRlbiBmb3IgYmlsZGVwcm9zZXNzZXJpbmcgZmVpbGV0OiBrYW4gaWtrZSB1dGbDuHJlIGFscGhhIGJsZW5kaW5nIHDDpSBiaWxkZXQuJywKKwknYmFja2VuZC5pbWFnZWFsbG9jYWxwaGE1MHBjdGdyZXlfZmFpbGVkJzogJ0VuaGV0ZW4gZm9yIGJpbGRlcHJvc2Vzc2VyaW5nIGZlaWxldDoga2FuIGlra2UgYWxsb2tlcmUgcGxhc3MgZm9yIGFscGhhIGthbmFsZW4gb2cgNTAlIGJha2dydW5uLicsCisJJ2JhY2tlbmQuaW1hZ2Vjb2xvcmFsbG9jYXRlYWxwaGFfZmFpbGVkJzogJ0VuaGV0ZW4gZm9yIGJpbGRlcHJvc2Vzc2VyaW5nIGZlaWxldDoga2FuIGlra2UgYWxsb2tlcmUgcGxhc3MgZm9yIGFscGhhIGthbmFsZW4gZm9yIGRlbm5lIGZhcmdlbi4nLAorCSdiYWNrZW5kLmltYWdlcm90YXRlX2ZhaWxlZCc6ICdFbmhldGVuIGZvciBiaWxkZXByb3Nlc3NlcmluZyBmZWlsZXQ6IEdEIGltYWdlcm90YXRlKCkgZmVpbGV0LicsCisJJ2JhY2tlbmQuaW1hZ2Vjb3B5cmVzYW1wbGVkX2ZhaWxlZCc6ICdFbmhldGVuIGZvciBiaWxkZXByb3Nlc3NlcmluZyBmZWlsZXQ6IEdEIGltYWdlY29weXJlc2FtcGxlZCgpIGZlaWxldC4gQmlsZGVvcHBsw7hzbmluZzogJywgLyogeCAqIHkgKi8KKwknYmFja2VuZC5pbWFnZWNvcHlfZmFpbGVkJzogJ0VuaGV0ZW4gZm9yIGJpbGRlcHJvc2Vzc2VyaW5nIGZlaWxldDogR0QgaW1hZ2Vjb3B5KCkgZmVpbGV0LicsCisJJ2JhY2tlbmQuaW1hZ2VmbGlwX2ZhaWxlZCc6ICdFbmhldGVuIGZvciBiaWxkZXByb3Nlc3NlcmluZyBmZWlsZXQ6IGthbiBpa2tlIHJvdGVyZSBiaWxkZXQuJywKKwknYmFja2VuZC5pbWFnZWpwZWdfZmFpbGVkJzogJ0VuaGV0ZW4gZm9yIGJpbGRlcHJvc2Vzc2VyaW5nIGZlaWxldDogR0QgaW1hZ2VqcGVnKCkgZmVpbGV0LicsCisJJ2JhY2tlbmQuaW1hZ2VwbmdfZmFpbGVkJzogJ0VuaGV0ZW4gZm9yIGJpbGRlcHJvc2Vzc2VyaW5nIGZlaWxldDogR0QgaW1hZ2VwbmcoKSBmZWlsZXQuJywKKwknYmFja2VuZC5pbWFnZWdpZl9mYWlsZWQnOiAnRW5oZXRlbiBmb3IgYmlsZGVwcm9zZXNzZXJpbmcgZmVpbGV0OiBHRCBpbWFnZWdpZigpIGZlaWxldC4nLAorCSdiYWNrZW5kLmltYWdlY3JlYXRlX2ZhaWxlZCc6ICdFbmhldGVuIGZvciBiaWxkZXByb3Nlc3NlcmluZyBmZWlsZXQ6IEdEIGltYWdlY3JlYXRlKCkgZmVpbGV0LicsCisJJ2JhY2tlbmQuY3Z0MnRydWVjb2xvcl9mYWlsZWQnOiAna29udmVydGVyaW5nIHRpbCBUcnVlIENvbG9yIGZlaWxldC4gQmlsZGVvcHBsw7hzbmluZzogJywgLyogeCAqIHkgKi8KKwknYmFja2VuZC5ub19pbWFnZWluZm8nOiAnS29ycnVwdCBiaWxkZSBlbGxlciBpa2tlIGVuIGJpbGRlZmlsLicsCisJJ2JhY2tlbmQuaW1nX3dpbGxfbm90X2ZpdCc6ICdTZXJ2ZXIgZmVpbDogYmlsZGV0IGbDpXIgaWtrZSBwbGFzcyBpIHRpbGdqZW5nZWxpZyBSQU07IG1pbmltdW1za3JhdiAoZXN0aW1hdCk6ICcsIC8qIFhYWCBNQnl0ZXMgKi8KKwknYmFja2VuZC51bnN1cHBvcnRlZF9pbWdmbXQnOiAnYmlsZGVmb3JtYXQgaWtrZSBzdMO4dHRldDogJywgICAgLyoganBlZy9wbmcvZ2lmLy4uLiAqLworCisJLyogRlUgKi8KKwl1cGxvYWRlcjogeworCQl1bmtub3duOiAnVWtqZW50IGZlaWwnLAorCQlzaXplTGltaXRNaW46ICdEdSBrYW4gaWtrZSBsYXN0ZSBvcHAgIjxlbT4ke25hbWV9PC9lbT4iICgke3NpemV9KSwgbWluc3RlIHRpbGxhdHRlIHN0w7hycmVsc2UgZXIgPHN0cm9uZz4ke3NpemVfbWlufTwvc3Ryb25nPiEnLAorCQlzaXplTGltaXRNYXg6ICdEdSBrYW4gaWtrZSBsYXN0ZSBvcHAgIjxlbT4ke25hbWV9PC9lbT4iICgke3NpemV9KSwgc3TDuHJzdGUgdGlsbGF0dGUgc3TDuHJyZWxzZSBlciA8c3Ryb25nPiR7c2l6ZV9tYXh9PC9zdHJvbmc+IScsCisJCW1vZF9zZWN1cml0eTogJ0Zpa2sgaWtrZSBzdmFyIGZyYSBvcHBsYXN0ZXJlbiwgZGV0dGUga2FuIGJldHkgYXQgIm1vZF9zZWN1cml0eSIgZXIgYWt0aXZlcnQgcMOlIHNlcnZlcmVuIG9nIGF0IGVuIGF2IHJlZ2xlbmUgaSBtb2Rfc2VjdXJpdHkgaGFyIGF2YnJ1dHQgZGVubmUgZm9yZXNww7hyc2VsZW4uIEh2aXMgZHUgaWtrZSBrYW4gZGVha3RpdmVyZSBtb2Rfc2VjdXJpdHksIGVyIGRldCBtdWxpZyBkdSBtw6UgYnJ1a2UgTm9GbGFzaCBvcHBsYXN0ZXJlbi4nCisJfSwKKworCWZsYXNoOiB7CisJCWhpZGRlbjogJ0ZvciDDpSBha3RpdmVyZSBkZW4gaW5uZWJ5Z2RlIG9wcGxhc3RlcmVuLCBmamVybiBibG9ra2VyaW5nZW4gaSBkaW4gbmV0dGxlc2VyIG9nIG9wcGRhdGVyIHNpZGVuIChzZSBBZGJsb2NrKS4nLAorCQlkaXNhYmxlZDogJ0ZvciDDpSBha3RpdmVyZSBkZW4gaW5uZWJ5Z2RlIG9wcGxhc3RlcmVuLCBha3RpdmVyIGRlbiBibG9ra2VydGUgRmxhc2hmaWxtZW4gb2cgb3BwZGF0ZXIgc2lkZW4gKHNlIEZsYXNoYmxvY2spLicsCisJCWZsYXNoOiAnRm9yIMOlIGt1bm5lIGxhc3RlIG9wcCBmaWxlbmUgZGluZSBtw6UgZHUgaW5zdGFsbGVyZSA8YSBocmVmPSJodHRwOi8vd3d3LmFkb2JlLmNvbS9zaG9ja3dhdmUvZG93bmxvYWQvZG93bmxvYWQuY2dpP1AxX1Byb2RfVmVyc2lvbj1TaG9ja3dhdmVGbGFzaCI+QWRvYmUgRmxhc2g8L2E+LicKKwl9LAorCisJcmVzaXplSW1hZ2VzOiAnSnVzdGVyIHN0w7hycmVsc2UgcMOlIHN0b3JlIGJpbGRlciB1bmRlciBvcHBsYXN0aW5nJywKKworCXNlcmlhbGl6ZTogJ0xhZ3JlIGdhbGxlcmknLAorCWdhbGxlcnk6IHsKKwkJdGV4dDogJ0JpbGRldGl0dGVsJywKKwkJc2F2ZTogJ0xhZ3JlJywKKwkJcmVtb3ZlOiAnRmplcm4gZnJhIGdhbGxlcmknLAorCQlkcmFnOiAnRHJhIGZpbGVyIGhpdCBmb3Igw6UgbGFnZSBldCBnYWxsZXJpLi4uJworCX0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLnBsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLnBsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMjQ2MzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvTGFuZ3VhZ2UvTGFuZ3VhZ2UucGwuanMKQEAgLTAsMCArMSwxMjYgQEAKKy8qDQorU2NyaXB0OiBMYW5ndWFnZS5wbC5qcw0KKwlNb29Ub29scyBGaWxlTWFuYWdlciAtIExhbmd1YWdlIFN0cmluZ3MgaW4gUG9saXNoDQorDQorVHJhbnNsYXRpb246DQorCVtNYXJlayBLYWx1Y2tpXShodHRwOi8vd3d3LndlYmRlY28ucGwpDQorICAgIFtHcnplZ29yeiBOYWtvbmllY3pueV0oaHR0cDovL25ha2kuaW5mby8pDQorKi8NCisNCitGaWxlTWFuYWdlci5MYW5ndWFnZS5wbCA9IHsNCisJbW9yZTogJ1N6Y3plZ8OzxYJ5JywNCisJd2lkdGg6ICdTemVyb2tvxZvEhzonLA0KKwloZWlnaHQ6ICdXeXNva2/Fm8SHOicsDQorDQorCW9rOiAnT2snLA0KKwlvcGVuOiAnV3liaWVyeiBwbGlrJywNCisJdXBsb2FkOiAnV3nFm2xpaicsDQorCWNyZWF0ZTogJ1V0d8OzcnogZm9sZGVyJywNCisJY3JlYXRlZGlyOiAnUG9kYWogbmF6d8SZIGZvbGRlcnU6JywNCisJY2FuY2VsOiAnQW51bHVqJywNCisJZXJyb3I6ICdCxYLEhWQnLA0KKw0KKwlpbmZvcm1hdGlvbjogJ0luZm9ybWFjamUnLA0KKwl0eXBlOiAnVHlwOicsDQorCXNpemU6ICdSb3ptaWFyOicsDQorCWRpcjogJ8WaY2llxbxrYTonLA0KKwltb2RpZmllZDogJ09zdC4gbW9keWZpa2FjamE6JywNCisJcHJldmlldzogJ1BvZGdsxIVkJywNCisJY2xvc2U6ICdaYW1rbmlqJywNCisJZGVzdHJveTogJ1VzdcWEJywNCisJZGVzdHJveWZpbGU6ICdDenkgbmEgcGV3bm8gY2hjZXN6IHVzdW7EhcSHIHRlbiBwbGlrPycsDQorDQorCXJlbmFtZTogJ1ptaWXFhCBuYXp3xJknLA0KKwlyZW5hbWVmaWxlOiAnUG9kYWogbm93xIUgbmF6d8SZIHBsaWt1OicsDQorCXJuX212X2NwOiAnUmVuYW1lL01vdmUvQ29weScsDQorDQorCWRvd25sb2FkOiAnUG9iaWVyeicsDQorCW5vcHJldmlldzogJzxpPlBvZGdsxIVkIG5pZWRvc3TEmXBueTwvaT4nLA0KKw0KKwl0aXRsZTogJ1R5dHXFgjonLA0KKwlhcnRpc3Q6ICdXeWtvbmF3Y2E6JywNCisJYWxidW06ICdQxYJ5dGE6JywNCisJbGVuZ3RoOiAnRMWCdWdvxZvEhzonLA0KKwliaXRyYXRlOiAnUHJ6ZXDFgnl3bm/Fm8SHOicsDQorDQorCWRlc2VsZWN0OiAnT2R6bmFjeicsDQorDQorCW5vZGVzdHJveTogJ1VzdXdhbmllIHBsaWvDs3cgeiBzZXJ3ZXJhIHpvc3RhxYJvIHd5xYLEhWN6b25lLicsDQorDQorCXRvZ2dsZV9zaWRlX2JveGVzOiAnVGh1bWJuYWlsIHZpZXcnLA0KKwl0b2dnbGVfc2lkZV9saXN0OiAnTGlzdCB2aWV3JywNCisJc2hvd19kaXJfdGh1bWJfZ2FsbGVyeTogJ1Nob3cgdGh1bWJuYWlscyBvZiB0aGUgZmlsZXMgaW4gdGhlIHByZXZpZXcgcGFuZScsDQorCWRyYWdfbl9kcm9wOiAnRHJhZyAmIGRyb3AgaGFzIGJlZW4gZW5hYmxlZCBmb3IgdGhpcyBkaXJlY3RvcnknLA0KKwlkcmFnX25fZHJvcF9kaXNhYmxlZDogJ0RyYWcgJiBkcm9wIGhhcyBiZWVuIHRlbXBvcmFyaWx5IGRpc2FibGVkIGZvciB0aGlzIGRpcmVjdG9yeScsDQorCWdvdG9fcGFnZTogJ0dvIHRvIHBhZ2UnLA0KKw0KKwknYmFja2VuZC5kaXNhYmxlZCc6ICdXeXN5xYJhbmllIHBsaWvDs3cgbmEgc2Vyd2VyIHpvc3RhxYJvIHd5xYLEhWN6b25lLicsDQorCSdiYWNrZW5kLmF1dGhvcml6ZWQnOiAnTmllIGplc3RlxZsgdXBvd2HFvG5pb255IGRvIHd5c3nFgmFuaWEgcGxpa8OzdyBuYSBzZXJ3ZXIuJywNCisJJ2JhY2tlbmQucGF0aCc6ICdGb2xkZXIgZG8gd3lzecWCYW5pYSBwbGlrw7N3IG5pZSBpc3RuaWVqZS4gU2tvbnRha3R1aiBzacSZIHogYWRtaW5pc3RyYXRvcmVtLicsDQorCSdiYWNrZW5kLmV4aXN0cyc6ICdGb2xkZXIgZG8gd3lzecWCYW5pYSBwbGlrw7N3IGlzdG5pZWplLiBTa29udGFrdHVqIHNpxJkgeiBhZG1pbmlzdHJhdG9yZW0uJywNCisJJ2JhY2tlbmQubWltZSc6ICdUeXAgd3licmFuZWdvIHBsaWt1IGplc3QgbmllZG96d29sb255LicsDQorCSdiYWNrZW5kLmV4dGVuc2lvbic6ICdXeXN5xYJhbnkgcGxpayBtYSBuaWV6bmFuZSBsdWIgbmllZG96d29sb25lIHJvenN6ZXJ6ZW5pZS4nLA0KKwknYmFja2VuZC5zaXplJzogJ1Jvem1pYXIgd3lzecWCYW5lZ28gcGxpa3UgamVzdCB6Ynl0IGR1xbx5LiBXecWbbGlqIG1uaWVqc3p5IHBsaWsgKGplxZtsaSB3eXN5xYJhc3ogb2JyYXp5LXptbmllanN6IG9icmF6IG5hIHN3b2ltIGtvbXB1dGVyemUgaSBwb27Ds3cgd3lzecWCYW5pZSkuJywNCisJJ2JhY2tlbmQucGFydGlhbCc6ICdQbGlrIG5pZSB6b3N0YcWCIHd5c8WCYW55IHcgY2HFgm/Fm2NpLiBQb27Ds3cgcHLDs2LEmSB3eXN5xYJraSBwbGlrdS4nLA0KKwknYmFja2VuZC5ub2ZpbGUnOiAnTmllIHd5YnJhbm8gcGxpa3UgZG8gd3lzecWCa2kuJywNCisJJ2JhY2tlbmQuZGVmYXVsdCc6ICdXeXN0xIVwacWCIGLFgsSFZCB3IHRyYWtjaWUgd3lzecWCa2kuJywNCisJJ2JhY2tlbmQucGF0aF9ub3Rfd3JpdGFibGUnOiAnWW91IGRvIG5vdCBoYXZlIHdyaXRlL3VwbG9hZCBwZXJtaXNzaW9ucyBmb3IgdGhpcyBkaXJlY3RvcnkuJywNCisJJ2JhY2tlbmQuZmlsZW5hbWVfbWF5YmVfdG9vX2xhcmdlJzogJ1RoZSBmaWxlbmFtZS9wYXRoIGlzIHByb2JhYmx5IHRvbyBsb25nIGZvciB0aGUgc2VydmVyIGZpbGVzeXN0ZW0uIFBsZWFzZSByZXRyeSB3aXRoIGEgc2hvcnRlciBmaWxlIG5hbWUuJywNCisJJ2JhY2tlbmQuZm10X25vdF9hbGxvd2VkJzogJ1lvdSBhcmUgbm90IGFsbG93ZWQgdG8gdXBsb2FkIHRoaXMgZmlsZSBmb3JtYXQvbmFtZS4nLA0KKwknYmFja2VuZC5yZWFkX2Vycm9yJzogJ0Nhbm5vdCByZWFkIC8gZG93bmxvYWQgdGhlIHNwZWNpZmllZCBmaWxlLicsDQorCSdiYWNrZW5kLnVuaWRlbnRpZmllZF9lcnJvcic6ICdBbiB1bmluZGVudGlmaWVkIGVycm9yIG9jY3VycmVkIHdoaWxlIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgYmFja2VuZCAod2ViIHNlcnZlcikuJywNCisNCisJJ2JhY2tlbmQubm9uZXdmaWxlJzogJ0EgbmV3IG5hbWUgZm9yIHRoZSBmaWxlIHRvIGJlIG1vdmVkIC8gY29waWVkIGlzIG1pc3NpbmcuJywNCisJJ2JhY2tlbmQuY29ycnVwdF9pbWcnOiAnVGhpcyBmaWxlIGlzIGEgbm90IGEgaW1hZ2Ugb3IgYSBjb3JydXB0IGZpbGU6ICcsIC8vIHBhdGgNCisJJ2JhY2tlbmQucmVzaXplX2luZXJyJzogJ1RoaXMgZmlsZSBjb3VsZCBub3QgYmUgcmVzaXplZCBkdWUgdG8gYW4gaW50ZXJuYWwgZXJyb3IuJywNCisJJ2JhY2tlbmQuY29weV9mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgY29weWluZyB0aGUgZmlsZSAvIGRpcmVjdG9yeTogJywgLy8gb2xkbG9jYWxwYXRoIDogbmV3bG9jYWxwYXRoDQorCSdiYWNrZW5kLmRlbGV0ZV9jYWNoZV9lbnRyaWVzX2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gZGVsZXRlIHRoZSBpdGVtIGNhY2hlICh0aHVtYm5haWxzLCBtZXRhZGF0YSknLA0KKwknYmFja2VuZC5ta2Rpcl9mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5OiAnLCAvLyBwYXRoDQorCSdiYWNrZW5kLm1vdmVfZmFpbGVkJzogJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIG1vdmluZyAvIHJlbmFtaW5nIHRoZSBmaWxlIC8gZGlyZWN0b3J5OiAnLCAvLyBvbGRsb2NhbHBhdGggOiBuZXdsb2NhbHBhdGgNCisJJ2JhY2tlbmQucGF0aF90YW1wZXJpbmcnOiAnUGF0aCB0YW1wZXJpbmcgZGV0ZWN0ZWQuJywNCisJJ2JhY2tlbmQucmVhbHBhdGhfZmFpbGVkJzogJ0Nhbm5vdCB0cmFuc2xhdGUgdGhlIGdpdmVuIGZpbGUgc3BlY2lmaWNhdGlvbiB0byBhIHZhbGlkIHN0b3JhZ2UgbG9jYXRpb246ICcsIC8vICRwYXRoDQorCSdiYWNrZW5kLnVubGlua19mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGRlbGV0ZSB0aGUgZmlsZSAvIGRpcmVjdG9yeTogJywgIC8vIHBhdGgNCisNCisJLy8gSW1hZ2UuY2xhc3MucGhwOg0KKwknYmFja2VuZC5wcm9jZXNzX25vZmlsZSc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGRpZCBub3QgcmVjZWl2ZSBhIHZhbGlkIGZpbGUgbG9jYXRpb24gdG8gd29yayBvbi4nLA0KKwknYmFja2VuZC5pbWFnZWNyZWF0ZXRydWVjb2xvcl9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlY3JlYXRldHJ1ZWNvbG9yKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmltYWdlYWxwaGFibGVuZGluZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IGNhbm5vdCBwZXJmb3JtIHRoZSByZXF1aXJlZCBpbWFnZSBhbHBoYSBibGVuZGluZy4nLA0KKwknYmFja2VuZC5pbWFnZWFsbG9jYWxwaGE1MHBjdGdyZXlfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBhbHBoYSBjaGFubmVsIGFuZCB0aGUgNTAlIGJhY2tncm91bmQuJywNCisJJ2JhY2tlbmQuaW1hZ2Vjb2xvcmFsbG9jYXRlYWxwaGFfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBhbHBoYSBjaGFubmVsIGZvciB0aGlzIGNvbG9yIGltYWdlLicsDQorCSdiYWNrZW5kLmltYWdlcm90YXRlX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2Vyb3RhdGUoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2Vjb3B5cmVzYW1wbGVkX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2Vjb3B5cmVzYW1wbGVkKCkgZmFpbGVkLiBJbWFnZSByZXNvbHV0aW9uOiAnLCAvKiB4ICogeSAqLw0KKwknYmFja2VuZC5pbWFnZWNvcHlfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNvcHkoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2VmbGlwX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogY2Fubm90IGZsaXAgdGhlIGltYWdlLicsDQorCSdiYWNrZW5kLmltYWdlanBlZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlanBlZygpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5pbWFnZXBuZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlcG5nKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmltYWdlZ2lmX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2VnaWYoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2VjcmVhdGVfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNyZWF0ZSgpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5jdnQydHJ1ZWNvbG9yX2ZhaWxlZCc6ICdjb252ZXJzaW9uIHRvIFRydWUgQ29sb3IgZmFpbGVkLiBJbWFnZSByZXNvbHV0aW9uOiAnLCAvKiB4ICogeSAqLw0KKwknYmFja2VuZC5ub19pbWFnZWluZm8nOiAnQ29ycnVwdCBpbWFnZSBvciBub3QgYW4gaW1hZ2UgZmlsZSBhdCBhbGwuJywNCisJJ2JhY2tlbmQuaW1nX3dpbGxfbm90X2ZpdCc6ICdTZXJ2ZXIgZXJyb3I6IGltYWdlIGRvZXMgbm90IGZpdCBpbiBhdmFpbGFibGUgUkFNOyBtaW5pbXVtIHJlcXVpcmVkIChlc3RpbWF0ZSk6ICcsIC8qIFhYWCBNQnl0ZXMgKi8NCisJJ2JhY2tlbmQudW5zdXBwb3J0ZWRfaW1nZm10JzogJ3Vuc3VwcG9ydGVkIGltYWdlIGZvcm1hdDogJywgICAgLyoganBlZy9wbmcvZ2lmLy4uLiAqLw0KKw0KKwkvKiBGVSAqLw0KKwl1cGxvYWRlcjogew0KKwkJdW5rbm93bjogJ1d5c3TEhXBpxYIgbmllem5hbnkgYsWCxIVkLicsDQorCQlzaXplTGltaXRNaW46ICdOaWUgbW/FvG5hIHd5YnJhxIcgIjxlbT4ke25hbWV9PC9lbT4iICgke3NpemV9KSwgbWluaW1hbG55IHJvem1pYXIgcGxpa3UgdG8gPHN0cm9uZz4ke3NpemVfbWlufTwvc3Ryb25nPiEnLA0KKwkJc2l6ZUxpbWl0TWF4OiAnTmllIG1vxbxuYSB3eWJyYcSHICI8ZW0+JHtuYW1lfTwvZW0+IiAoJHtzaXplfSksIG1ha3N5bWFsbnkgcm96bWlhciBwbGlrdSB0byA8c3Ryb25nPiR7c2l6ZV9tYXh9PC9zdHJvbmc+IScsDQorCQltb2Rfc2VjdXJpdHk6ICdObyByZXNwb25zZSB3YXMgZ2l2ZW4gZnJvbSB0aGUgdXBsb2FkZXIsIHRoaXMgbWF5IG1lYW4gdGhhdCAibW9kX3NlY3VyaXR5IiBpcyBhY3RpdmUgb24gdGhlIHNlcnZlciBhbmQgb25lIG9mIHRoZSBydWxlcyBpbiBtb2Rfc2VjdXJpdHkgaGFzIGNhbmNlbGxlZCB0aGlzIHJlcXVlc3QuICBJZiB5b3UgY2FuIG5vdCBkaXNhYmxlIG1vZF9zZWN1cml0eSwgeW91IG1heSBuZWVkIHRvIHVzZSB0aGUgTm9GbGFzaCBVcGxvYWRlci4nDQorCX0sDQorDQorCWZsYXNoOiB7DQorCQloaWRkZW46ICdBYnkgd8WCxIVjennEhyB3eXN5xYJhbmllIHBsaWvDs3csIG9kYmxva3VqIGdvIHcgc3dvamVqIHByemVnbMSFZGFyY2UgaSBvZMWbd2llxbwgc3Ryb27EmSAocHJhd2RvcG9kb2JuaWUgd3lzecWCYW5pZSBwbGlrw7N3IGplc3QgYmxva293YW5lIHByemV6IHd0eWN6a8SZIEFkYmxvY2spLicsDQorCQlkaXNhYmxlZDogJ0FieSB3xYLEhWN6ecSHIHd5c3nFgmFuaWUgcGxpa8Ozdywgb2RibG9rdWogb2JpZWt0IEZsYXNoIGkgb2TFm3dpZcW8IHN0cm9uxJkgKHByYXdkb3BvZG9ibmllIHd5c3nFgmFuaWUgcGxpa8OzdyBibG9rb3dhbmUgamVzdCBwcnpleiB3dHljemvEmSBGbGFzaGJsb2NrKS4nLA0KKwkJZmxhc2g6ICdBYnkgd3lzecWCYcSHIHBsaWtpIG5hIHNlcndlciwgbmFsZcW8eSB6YWluc3RhbG93YcSHIHcgcHJ6ZWdsxIVkYXJjZSB3dHljemvEmSA8YSBocmVmPSJodHRwOi8vd3d3LmFkb2JlLmNvbS9zaG9ja3dhdmUvZG93bmxvYWQvZG93bmxvYWQuY2dpP1AxX1Byb2RfVmVyc2lvbj1TaG9ja3dhdmVGbGFzaCI+QWRvYmUgRmxhc2g8L2E+LicNCisJfSwNCisNCisJcmVzaXplSW1hZ2VzOiAnWm1uaWVqc3ogZHXFvGUgb2JyYXp5IHcgdHJha2NpZSB3eXN5xYJhbmlhJywNCisNCisgICAgc2VyaWFsaXplOiAnWmFwaXN6IGdhbGVyacSZJywNCisgICAgZ2FsbGVyeTogew0KKyAgICAgICAgdGV4dDogJ1BvZHBpcycsDQorICAgICAgICBzYXZlOiAnWmFwaXN6JywNCisgICAgICAgIHJlbW92ZTogJ1VzdcWEIGVsZW1lbnQgeiBnYWxlcmlpJywNCisgICAgICAgIGRyYWc6ICdQcnplY2nEhWduaWogdHV0YWogZWxlbWVudHkgYWJ5IHV0d29yennEhyBnYWxlcmnEmS4uLicNCisgICAgfQ0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLnB0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLnB0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZWM4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvTGFuZ3VhZ2UvTGFuZ3VhZ2UucHQuanMKQEAgLTAsMCArMSwxMjUgQEAKKy8qCitTY3JpcHQ6IExhbmd1YWdlLnB0LmpzCisJTW9vVG9vbHMgRmlsZU1hbmFnZXIgLSBMYW5ndWFnZSBTdHJpbmdzIGluIEV1cm9wZWFuIFBvcnR1Z3Vlc2UKKworVHJhbnNsYXRpb246CisJW0FsZXhhbmRyZSBSb2NoYV0oaHR0cDovL3R3aXR0ZXIuY29tL3Byb2N5MG4pCisqLworCitGaWxlTWFuYWdlci5MYW5ndWFnZS5wdCA9IHsKKwltb3JlOiAnRGV0YWxoZXMnLAorCXdpZHRoOiAnTGFyZ3VyYTonLAorCWhlaWdodDogJ0FsdHVyYTonLAorCisJb2s6ICdPaycsCisJb3BlbjogJ1NlbGVjY2lvbmFyIGZpY2hlaXJvJywKKwl1cGxvYWQ6ICdFbnZpYXInLAorCWNyZWF0ZTogJ0NyaWFyIHBhc3RhJywKKwljcmVhdGVkaXI6ICdQb3IgZmF2b3IgZXNwZWNpZmlxdWUgbyBub21lIGRhIHBhc3RhOicsCisJY2FuY2VsOiAnQ2FuY2VsYXInLAorCWVycm9yOiAnRXJybycsCisKKwlpbmZvcm1hdGlvbjogJ0luZm9ybWHDp8OjbycsCisJdHlwZTogJ1RpcG86JywKKwlzaXplOiAnVGFtYW5obzonLAorCWRpcjogJ0NhbWluaG86JywKKwltb2RpZmllZDogJ8OabHRpbWEgbW9kaWZpY2HDp8OjbzonLAorCXByZXZpZXc6ICdQcsOpLXZpc3VhbGl6YXInLAorCWNsb3NlOiAnRmVjaGFyJywKKwlkZXN0cm95OiAnQXBhZ2FyJywKKwlkZXN0cm95ZmlsZTogJ1RlbSBhIGNlcnRlemEgcXVlIHF1ZXIgYXBhZ2FyIGVzdGUgZmljaGVpcm8/JywKKworCXJlbmFtZTogJ1Jlbm9tZWFyJywKKwlyZW5hbWVmaWxlOiAnUG9yIGZhdm9yIGludHJvZHV6YSBvIG5vdm8gbm9tZSBkbyBmaWNoZWlybzonLAorCXJuX212X2NwOiAnUmVuYW1lL01vdmUvQ29weScsCisKKwlkb3dubG9hZDogJ0Rlc2NhcnJlZ2FyJywKKwlub3ByZXZpZXc6ICc8aT5QcsOpLXZpc3VhbGl6YcOnw6NvIG7Do28gZGlzcG9uw612ZWw8L2k+JywKKworCXRpdGxlOiAnVMOtdHVsbzonLAorCWFydGlzdDogJ0FydGlzdGE6JywKKwlhbGJ1bTogJ0FsYnVtOicsCisJbGVuZ3RoOiAnRHVyYcOnw6NvOicsCisJYml0cmF0ZTogJ1RheGEgZGUgYml0czonLAorCisJZGVzZWxlY3Q6ICdEZXNmYXplcicsCisKKwlub2Rlc3Ryb3k6ICdBcGFnYW1lbnRvIGRlIGZpY2hlaXJvcyBkZXNhY3RpdmFkbyBuZXN0ZSBzZXJ2aWRvci4nLAorCisJdG9nZ2xlX3NpZGVfYm94ZXM6ICdUaHVtYm5haWwgdmlldycsCisJdG9nZ2xlX3NpZGVfbGlzdDogJ0xpc3QgdmlldycsCisJc2hvd19kaXJfdGh1bWJfZ2FsbGVyeTogJ1Nob3cgdGh1bWJuYWlscyBvZiB0aGUgZmlsZXMgaW4gdGhlIHByZXZpZXcgcGFuZScsCisJZHJhZ19uX2Ryb3A6ICdEcmFnICYgZHJvcCBoYXMgYmVlbiBlbmFibGVkIGZvciB0aGlzIGRpcmVjdG9yeScsCisJZHJhZ19uX2Ryb3BfZGlzYWJsZWQ6ICdEcmFnICYgZHJvcCBoYXMgYmVlbiB0ZW1wb3JhcmlseSBkaXNhYmxlZCBmb3IgdGhpcyBkaXJlY3RvcnknLAorCWdvdG9fcGFnZTogJ0dvIHRvIHBhZ2UnLAorCisJJ2JhY2tlbmQuZGlzYWJsZWQnOiAnRW52aW8gZGUgZmljaGVpcm9zIGRlc2FjdGl2YWRvIG5lc3RlIHNlcnZpZG9yLicsCisJJ2JhY2tlbmQuYXV0aG9yaXplZCc6ICdOw6NvIGVzdMOhIGF1dGVudGljYWRvIHBhcmEgbyBlbnZpbyBkZSBmaWNoZWlyb3MuJywKKwknYmFja2VuZC5wYXRoJzogJ0EgcGFzdGEgZXNwZWNpZmljYWRhIHBhcmEgZW52aW8gZGUgZmljaGVpcm9zIG7Do28gZXhpc3RlLiBQb3IgZmF2b3IgY29udGFjdGUgbyBhZG1pbmlzdHJhZG9yIGRvIHNpdGUuJywKKwknYmFja2VuZC5leGlzdHMnOiAnTyBjYW1pbmhvIGVzcGVjaWZpY2FkbyBqw6EgZXhpc3RlLiBQb3IgZmF2b3IgY29udGFjdGUgbyBhZG1pbmlzdHJhZG9yIGRvIHNpdGUuJywKKwknYmFja2VuZC5taW1lJzogJ1RpcG8gZGUgZmljaGVpcm8gZXNwZWNpZmljYWRvIG7Do28gcGVybWl0aWRvLicsCisJJ2JhY2tlbmQuZXh0ZW5zaW9uJzogJ0V4dGVuc8OjbyBkbyBmaWNoZWlybyBlbnZpYWRvIGRlc2NvbmhlY2lkbyBvdSBuw6NvIHBlcm1pdGlkby4nLAorCSdiYWNrZW5kLnNpemUnOiAnVGFtYW5obyBkbyBmaWNoZWlybyBkZW1hc2lhZG8gZ3JhbmRlIHBhcmEgc2VyIHByb2Nlc3NhZG8gbmVzdGUgc2Vydmlkb3IuIFBvciBmYXZvciBlbnZpZSB1bSBmaWNoZWlybyBtYWlzIHBlcXVlbm8uJywKKwknYmFja2VuZC5wYXJ0aWFsJzogJ0VudmlvIGluY29tcGxldG8gZG8gZmljaGVpcm8sIHBvciBmYXZvciB0ZW50ZSBub3ZhbWVudGUuJywKKwknYmFja2VuZC5ub2ZpbGUnOiAnTmVuaHVtIGZpY2hlaXJvIHNlbGVjY2lvbmFkbyBwYXJhIGVudmlhci4nLAorCSdiYWNrZW5kLmRlZmF1bHQnOiAnRXJybyBubyBlbnZpbyBkbyBmaWNoZWlyby4nLAorCSdiYWNrZW5kLnBhdGhfbm90X3dyaXRhYmxlJzogJ1lvdSBkbyBub3QgaGF2ZSB3cml0ZS91cGxvYWQgcGVybWlzc2lvbnMgZm9yIHRoaXMgZGlyZWN0b3J5LicsCisJJ2JhY2tlbmQuZmlsZW5hbWVfbWF5YmVfdG9vX2xhcmdlJzogJ1RoZSBmaWxlbmFtZS9wYXRoIGlzIHByb2JhYmx5IHRvbyBsb25nIGZvciB0aGUgc2VydmVyIGZpbGVzeXN0ZW0uIFBsZWFzZSByZXRyeSB3aXRoIGEgc2hvcnRlciBmaWxlIG5hbWUuJywKKwknYmFja2VuZC5mbXRfbm90X2FsbG93ZWQnOiAnWW91IGFyZSBub3QgYWxsb3dlZCB0byB1cGxvYWQgdGhpcyBmaWxlIGZvcm1hdC9uYW1lLicsCisJJ2JhY2tlbmQucmVhZF9lcnJvcic6ICdDYW5ub3QgcmVhZCAvIGRvd25sb2FkIHRoZSBzcGVjaWZpZWQgZmlsZS4nLAorCSdiYWNrZW5kLnVuaWRlbnRpZmllZF9lcnJvcic6ICdBbiB1bmluZGVudGlmaWVkIGVycm9yIG9jY3VycmVkIHdoaWxlIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgYmFja2VuZCAod2ViIHNlcnZlcikuJywKKworCSdiYWNrZW5kLm5vbmV3ZmlsZSc6ICdBIG5ldyBuYW1lIGZvciB0aGUgZmlsZSB0byBiZSBtb3ZlZCAvIGNvcGllZCBpcyBtaXNzaW5nLicsCisJJ2JhY2tlbmQuY29ycnVwdF9pbWcnOiAnVGhpcyBmaWxlIGlzIGEgbm90IGEgaW1hZ2Ugb3IgYSBjb3JydXB0IGZpbGU6ICcsIC8vIHBhdGgKKwknYmFja2VuZC5yZXNpemVfaW5lcnInOiAnVGhpcyBmaWxlIGNvdWxkIG5vdCBiZSByZXNpemVkIGR1ZSB0byBhbiBpbnRlcm5hbCBlcnJvci4nLAorCSdiYWNrZW5kLmNvcHlfZmFpbGVkJzogJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGNvcHlpbmcgdGhlIGZpbGUgLyBkaXJlY3Rvcnk6ICcsIC8vIG9sZGxvY2FscGF0aCA6IG5ld2xvY2FscGF0aAorCSdiYWNrZW5kLmRlbGV0ZV9jYWNoZV9lbnRyaWVzX2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gZGVsZXRlIHRoZSBpdGVtIGNhY2hlICh0aHVtYm5haWxzLCBtZXRhZGF0YSknLAorCSdiYWNrZW5kLm1rZGlyX2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gY3JlYXRlIHRoZSBkaXJlY3Rvcnk6ICcsIC8vIHBhdGgKKwknYmFja2VuZC5tb3ZlX2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBtb3ZpbmcgLyByZW5hbWluZyB0aGUgZmlsZSAvIGRpcmVjdG9yeTogJywgLy8gb2xkbG9jYWxwYXRoIDogbmV3bG9jYWxwYXRoCisJJ2JhY2tlbmQucGF0aF90YW1wZXJpbmcnOiAnUGF0aCB0YW1wZXJpbmcgZGV0ZWN0ZWQuJywKKwknYmFja2VuZC5yZWFscGF0aF9mYWlsZWQnOiAnQ2Fubm90IHRyYW5zbGF0ZSB0aGUgZ2l2ZW4gZmlsZSBzcGVjaWZpY2F0aW9uIHRvIGEgdmFsaWQgc3RvcmFnZSBsb2NhdGlvbjogJywgLy8gJHBhdGgKKwknYmFja2VuZC51bmxpbmtfZmFpbGVkJzogJ0FuIGVycm9yIG9jY3VycmVkIHdoZW4gYXR0ZW1wdGluZyB0byBkZWxldGUgdGhlIGZpbGUgLyBkaXJlY3Rvcnk6ICcsICAvLyBwYXRoCisKKwkvLyBJbWFnZS5jbGFzcy5waHA6CisJJ2JhY2tlbmQucHJvY2Vzc19ub2ZpbGUnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBkaWQgbm90IHJlY2VpdmUgYSB2YWxpZCBmaWxlIGxvY2F0aW9uIHRvIHdvcmsgb24uJywKKwknYmFja2VuZC5pbWFnZWNyZWF0ZXRydWVjb2xvcl9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlY3JlYXRldHJ1ZWNvbG9yKCkgZmFpbGVkLicsCisJJ2JhY2tlbmQuaW1hZ2VhbHBoYWJsZW5kaW5nX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogY2Fubm90IHBlcmZvcm0gdGhlIHJlcXVpcmVkIGltYWdlIGFscGhhIGJsZW5kaW5nLicsCisJJ2JhY2tlbmQuaW1hZ2VhbGxvY2FscGhhNTBwY3RncmV5X2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogY2Fubm90IGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgYWxwaGEgY2hhbm5lbCBhbmQgdGhlIDUwJSBiYWNrZ3JvdW5kLicsCisJJ2JhY2tlbmQuaW1hZ2Vjb2xvcmFsbG9jYXRlYWxwaGFfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBhbHBoYSBjaGFubmVsIGZvciB0aGlzIGNvbG9yIGltYWdlLicsCisJJ2JhY2tlbmQuaW1hZ2Vyb3RhdGVfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZXJvdGF0ZSgpIGZhaWxlZC4nLAorCSdiYWNrZW5kLmltYWdlY29weXJlc2FtcGxlZF9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlY29weXJlc2FtcGxlZCgpIGZhaWxlZC4gSW1hZ2UgcmVzb2x1dGlvbjogJywgLyogeCAqIHkgKi8KKwknYmFja2VuZC5pbWFnZWNvcHlfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNvcHkoKSBmYWlsZWQuJywKKwknYmFja2VuZC5pbWFnZWZsaXBfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgZmxpcCB0aGUgaW1hZ2UuJywKKwknYmFja2VuZC5pbWFnZWpwZWdfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWpwZWcoKSBmYWlsZWQuJywKKwknYmFja2VuZC5pbWFnZXBuZ19mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlcG5nKCkgZmFpbGVkLicsCisJJ2JhY2tlbmQuaW1hZ2VnaWZfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWdpZigpIGZhaWxlZC4nLAorCSdiYWNrZW5kLmltYWdlY3JlYXRlX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2VjcmVhdGUoKSBmYWlsZWQuJywKKwknYmFja2VuZC5jdnQydHJ1ZWNvbG9yX2ZhaWxlZCc6ICdjb252ZXJzaW9uIHRvIFRydWUgQ29sb3IgZmFpbGVkLiBJbWFnZSByZXNvbHV0aW9uOiAnLCAvKiB4ICogeSAqLworCSdiYWNrZW5kLm5vX2ltYWdlaW5mbyc6ICdDb3JydXB0IGltYWdlIG9yIG5vdCBhbiBpbWFnZSBmaWxlIGF0IGFsbC4nLAorCSdiYWNrZW5kLmltZ193aWxsX25vdF9maXQnOiAnU2VydmVyIGVycm9yOiBpbWFnZSBkb2VzIG5vdCBmaXQgaW4gYXZhaWxhYmxlIFJBTTsgbWluaW11bSByZXF1aXJlZCAoZXN0aW1hdGUpOiAnLCAvKiBYWFggTUJ5dGVzICovCisJJ2JhY2tlbmQudW5zdXBwb3J0ZWRfaW1nZm10JzogJ3Vuc3VwcG9ydGVkIGltYWdlIGZvcm1hdDogJywgICAgLyoganBlZy9wbmcvZ2lmLy4uLiAqLworCisJLyogRlUgKi8KKwl1cGxvYWRlcjogeworCQl1bmtub3duOiAnRXJybyBkZXNjb25oZWNpZG8nLAorCQlzaXplTGltaXRNaW46ICdOw6NvIMOpIHBlcm1pdGlkbyBhbmV4YXIgIjxlbT4ke25hbWV9PC9lbT4iICgke3NpemV9KSwgbyB0YW1hbmhvIG3DrW5pbW8gZG8gZmljaGVpcm8gw6kgZGU8c3Ryb25nPiR7c2l6ZV9taW59PC9zdHJvbmc+IScsCisJCXNpemVMaW1pdE1heDogJ07Do28gw6kgcGVybWl0aWRvIGFuZXhhciAiPGVtPiR7bmFtZX08L2VtPiIgKCR7c2l6ZX0pLCBvIHRhbWFuaG8gbcOheGltbyBkbyBmaWNoZWlybyDDqSBkZSA8c3Ryb25nPiR7c2l6ZV9tYXh9PC9zdHJvbmc+IScsCisJCW1vZF9zZWN1cml0eTogJ05vIHJlc3BvbnNlIHdhcyBnaXZlbiBmcm9tIHRoZSB1cGxvYWRlciwgdGhpcyBtYXkgbWVhbiB0aGF0ICJtb2Rfc2VjdXJpdHkiIGlzIGFjdGl2ZSBvbiB0aGUgc2VydmVyIGFuZCBvbmUgb2YgdGhlIHJ1bGVzIGluIG1vZF9zZWN1cml0eSBoYXMgY2FuY2VsbGVkIHRoaXMgcmVxdWVzdC4gIElmIHlvdSBjYW4gbm90IGRpc2FibGUgbW9kX3NlY3VyaXR5LCB5b3UgbWF5IG5lZWQgdG8gdXNlIHRoZSBOb0ZsYXNoIFVwbG9hZGVyLicKKwl9LAorCisJZmxhc2g6IHsKKwkJaGlkZGVuOiAnUGFyYSBhY3RpdmFyIG8gZW52aW8sIGRlc2Jsb3F1ZWllLW8gbm8gbmF2ZWdhZG9yIGUgcmVjYXJyZWd1ZSBhIHDDoWdpbmEgKHZlciBBZGJsb2NrKS4nLAorCQlkaXNhYmxlZDogJ1BhcmEgYWN0aXZhciBvIGVudmlvLCBhY3RpdmUgbyBmaWNoZWlybyBGbGFzaCBlIHJlY2FycmVndWUgYSBww6FnaW5hICh2ZXIgRmxhc2hibG9jaykuJywKKwkJZmxhc2g6ICdQYXJhIGVudmlhciBmaWNoZWlyb3MgcHJlY2lzYSBkZSBpbnN0YWxhciA8YSBocmVmPSJodHRwOi8vd3d3LmFkb2JlLmNvbS9zaG9ja3dhdmUvZG93bmxvYWQvZG93bmxvYWQuY2dpP1AxX1Byb2RfVmVyc2lvbj1TaG9ja3dhdmVGbGFzaCI+QWRvYmUgRmxhc2g8L2E+LicKKwl9LAorCisJcmVzaXplSW1hZ2VzOiAnUmVkaW1lbnNpb25hciBpbWFnZW5zIGdyYW5kZXMgYW8gZW52aWFyJywKKworCXNlcmlhbGl6ZTogJ0d1YXJkYXIgZ2FsZXJpYScsCisJZ2FsbGVyeTogeworCQl0ZXh0OiAnTGVnZW5kYSBkYSBpbWFnZW0nLAorCQlzYXZlOiAnR3VhcmRhcicsCisJCXJlbW92ZTogJ1JlbW92ZXIgZGEgZ2FsZXJpYScsCisJCWRyYWc6ICdBcnJhc3RlIG9zIGl0ZW1zIHBhcmEgY3JpYXIgYSBnYWxlcmlhLi4uJworCX0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLnJ1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLnJ1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YmNiZjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvTGFuZ3VhZ2UvTGFuZ3VhZ2UucnUuanMKQEAgLTAsMCArMSwxMjUgQEAKKy8qDQorU2NyaXB0OiBMYW5ndWFnZS5ydS5qcw0KKwlNb29Ub29scyBGaWxlTWFuYWdlciAtIExhbmd1YWdlIFN0cmluZ3MgaW4gUnVzc2lhbg0KKw0KK1RyYW5zbGF0aW9uOg0KKwlbSWx5YSBWLiBHb3J5YWNoZXZdKGh0dHA6Ly9jb2stc3R1ZGlvLnJ1LykNCisqLw0KKw0KK0ZpbGVNYW5hZ2VyLkxhbmd1YWdlLnJ1ID0gew0KKwltb3JlOiAn0J/QvtC00YDQvtCx0L3QtdC1JywNCisJd2lkdGg6ICfQqNC40YDQuNC90LA6JywNCisJaGVpZ2h0OiAn0JLRi9GB0L7RgtCwOicsDQorDQorCW9rOiAnT2snLA0KKwlvcGVuOiAn0JLRi9Cx0YDQsNGC0Ywg0YTQsNC50LsnLA0KKwl1cGxvYWQ6ICfQl9Cw0LPRgNGD0LfQutCwJywNCisJY3JlYXRlOiAn0KHQvtC30LTQsNGC0Ywg0L/QsNC/0LrRgycsDQorCWNyZWF0ZWRpcjogJ9Cf0L7QttCw0LvRg9C50YHRgtCwINGD0LrQsNC20LjRgtC1INC40LzRjyDQv9Cw0L/QutC4OicsDQorCWNhbmNlbDogJ9Ce0YLQvNC10L3QsCcsDQorCWVycm9yOiAn0J7RiNC40LHQutCwJywNCisNCisJaW5mb3JtYXRpb246ICfQmNC90YTQvtGA0LzQsNGG0LjRjycsDQorCXR5cGU6ICfQotC40L86JywNCisJc2l6ZTogJ9Cg0LDQt9C80LXRgDonLA0KKwlkaXI6ICfQn9GD0YLRjDonLA0KKwltb2RpZmllZDogJ9Cf0L7RgdC70LXQtNC90LXQtSDQuNC30LzQtdC90LXQvdC40LU6JywNCisJcHJldmlldzogJ9Cf0YDQtdC00L/RgNC+0YHQvNC+0YLRgCcsDQorCWNsb3NlOiAn0JfQsNC60YDRi9GC0YwnLA0KKwlkZXN0cm95OiAn0KPQtNCw0LvQuNGC0YwnLA0KKwlkZXN0cm95ZmlsZTogJ9Cj0LLQtdGA0LXQvdGLLCDRh9GC0L4g0YXQvtGC0LjRgtC1INGD0LTQsNC70LjRgtGMINGN0YLQvtGCINGE0LDQudC7PycsDQorDQorCXJlbmFtZTogJ9Cf0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMJywNCisJcmVuYW1lZmlsZTogJ9Cf0L7QttCw0LvRg9C50YHRgtCwINGD0LrQsNC20LjRgtC1INC40LzRjyDRhNCw0LnQu9CwOicsDQorCXJuX212X2NwOiAnUmVuYW1lL01vdmUvQ29weScsDQorDQorCWRvd25sb2FkOiAn0KHQutCw0YfQsNGC0YwnLA0KKwlub3ByZXZpZXc6ICc8aT7Qn9GA0LXQtNC/0YDQvtGB0LzQvtGC0YAg0L3QtdC00L7RgdGC0YPQv9C10L08L2k+JywNCisNCisJdGl0bGU6ICfQndCw0LfQstCw0L3QuNC1OicsDQorCWFydGlzdDogJ9CY0YHQv9C+0LvQvdC40YLQtdC70Yw6JywNCisJYWxidW06ICfQkNC70YzQsdC+0Lw6JywNCisJbGVuZ3RoOiAn0J/RgNC+0LTQvtC70LbQuNGC0LXQu9GM0L3QvtGB0YLRjDonLA0KKwliaXRyYXRlOiAn0JHQuNGC0YDRjdC50YI6JywNCisNCisJZGVzZWxlY3Q6ICfQodC90Y/RgtGMINCy0YvQtNC10LvQtdC90LjQtScsDQorDQorCW5vZGVzdHJveTogJ9Cj0LTQsNC70LXQvdC40LUg0YTQsNC50LvQvtCyINC+0YLQutC70Y7Rh9C10L3QviDQvdCwINGB0LXRgNCy0LXRgNC1LicsDQorDQorCXRvZ2dsZV9zaWRlX2JveGVzOiAnVGh1bWJuYWlsIHZpZXcnLA0KKwl0b2dnbGVfc2lkZV9saXN0OiAnTGlzdCB2aWV3JywNCisJc2hvd19kaXJfdGh1bWJfZ2FsbGVyeTogJ1Nob3cgdGh1bWJuYWlscyBvZiB0aGUgZmlsZXMgaW4gdGhlIHByZXZpZXcgcGFuZScsDQorCWRyYWdfbl9kcm9wOiAnRHJhZyAmIGRyb3AgaGFzIGJlZW4gZW5hYmxlZCBmb3IgdGhpcyBkaXJlY3RvcnknLA0KKwlkcmFnX25fZHJvcF9kaXNhYmxlZDogJ0RyYWcgJiBkcm9wIGhhcyBiZWVuIHRlbXBvcmFyaWx5IGRpc2FibGVkIGZvciB0aGlzIGRpcmVjdG9yeScsDQorCWdvdG9fcGFnZTogJ0dvIHRvIHBhZ2UnLA0KKw0KKwknYmFja2VuZC5kaXNhYmxlZCc6ICfQl9Cw0LPRgNGD0LfQutCwINGE0LDQudC70L7QsiDQvtGC0LrQu9GO0YfQtdC90LAg0L3QsCDRgdC10YDQstC10YDQtS4nLA0KKwknYmFja2VuZC5hdXRob3JpemVkJzogJ9CS0LDQvCDQvdC1INGA0LDQt9GA0LXRiNC10L3QviDQt9Cw0LPRgNGD0LbQsNGC0Ywg0YTQsNC50LvRiy4nLA0KKwknYmFja2VuZC5wYXRoJzogJ9Cj0LrQsNC30LDQvdC90LDRjyDQtNC40YDQtdC60YLQvtGA0LjRjyDQtNC70Y8g0LfQsNCz0YDRg9C30LrQuCDRhNCw0LnQu9C+0LIg0L3QtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4g0J/QvtC20LDQu9GD0LnRgdGC0LAg0L7QsdGA0LDRgtC40YLQtdGB0Ywg0Log0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDRgyDRgdCw0LnRgtCwLicsDQorCSdiYWNrZW5kLmV4aXN0cyc6ICfQo9C60LDQt9Cw0L3QvdCw0Y8g0LTQuNGA0LXQutGC0L7RgNC40Y8g0LTQu9GPINC30LDQs9GA0YPQt9C60Lgg0YTQsNC50LvQvtCyINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4g0J/QvtC20LDQu9GD0LnRgdGC0LAg0L7QsdGA0LDRgtC40YLQtdGB0Ywg0Log0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDRgyDRgdCw0LnRgtCwJywNCisJJ2JhY2tlbmQubWltZSc6ICfQotCw0LrQvtC5INGC0LjQvyDRhNCw0LnQu9CwINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGC0YHRjy4nLA0KKwknYmFja2VuZC5leHRlbnNpb24nOiAn0JfQsNCz0YDRg9C20LXQvdC90YvQuSDRhNCw0LnQuyDQvdC1INC+0L/QvtC30L3QsNC9INC40LvQuCDRgtCw0LrQvtC1INGA0LDRgdGI0LjRgNC10L3QuNC1INC90LUg0YDQsNC30YDQtdGI0LXQvdC+LicsDQorCSdiYWNrZW5kLnNpemUnOiAn0KDQsNC30LzQtdGAINC30LDQs9GA0YPQttCw0LXQvNC+0LPQviDRhNCw0LnQu9CwINGB0LvQuNGI0LrQvtC8INCy0LXQu9C40LouINCf0L7QttCw0LvRg9C50YHRgtCwINC30LDQs9GA0YPQt9C40YLQtSDRhNCw0LnQuyDQv9C+0LzQtdC90YzRiNC1LicsDQorCSdiYWNrZW5kLnBhcnRpYWwnOiAn0KTQsNC50Lsg0LHRi9C7INC30LDQs9GA0YPQttC10L0g0YfQsNGB0YLQuNGH0L3Qviwg0L/QvtC20LDQu9GD0LnRgdGC0LAg0LfQsNCz0YDRg9C30LjRgtC1INGN0YLQvtGCINGE0LDQudC7INC10YnQtSDRgNCw0LcuJywNCisJJ2JhY2tlbmQubm9maWxlJzogJ9Cd0LUg0YPQutCw0LfQsNC90Ysg0YTQsNC50LvRiyDQtNC70Y8g0LfQsNCz0YDRg9C30LrQuC4nLA0KKwknYmFja2VuZC5kZWZhdWx0JzogJ9Cf0YDQuCDQt9Cw0LPRgNGD0LfQutC1INGE0LDQudC70L7QsiDRh9GC0L4t0YLQviDQv9C+0YjQu9C+INC90LUg0YLQsNC6LicsDQorCSdiYWNrZW5kLnBhdGhfbm90X3dyaXRhYmxlJzogJ1lvdSBkbyBub3QgaGF2ZSB3cml0ZS91cGxvYWQgcGVybWlzc2lvbnMgZm9yIHRoaXMgZGlyZWN0b3J5LicsDQorCSdiYWNrZW5kLmZpbGVuYW1lX21heWJlX3Rvb19sYXJnZSc6ICdUaGUgZmlsZW5hbWUvcGF0aCBpcyBwcm9iYWJseSB0b28gbG9uZyBmb3IgdGhlIHNlcnZlciBmaWxlc3lzdGVtLiBQbGVhc2UgcmV0cnkgd2l0aCBhIHNob3J0ZXIgZmlsZSBuYW1lLicsDQorCSdiYWNrZW5kLmZtdF9ub3RfYWxsb3dlZCc6ICdZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIHVwbG9hZCB0aGlzIGZpbGUgZm9ybWF0L25hbWUuJywNCisJJ2JhY2tlbmQucmVhZF9lcnJvcic6ICdDYW5ub3QgcmVhZCAvIGRvd25sb2FkIHRoZSBzcGVjaWZpZWQgZmlsZS4nLA0KKwknYmFja2VuZC51bmlkZW50aWZpZWRfZXJyb3InOiAnQW4gdW5pbmRlbnRpZmllZCBlcnJvciBvY2N1cnJlZCB3aGlsZSBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGJhY2tlbmQgKHdlYiBzZXJ2ZXIpLicsDQorDQorCSdiYWNrZW5kLm5vbmV3ZmlsZSc6ICdBIG5ldyBuYW1lIGZvciB0aGUgZmlsZSB0byBiZSBtb3ZlZCAvIGNvcGllZCBpcyBtaXNzaW5nLicsDQorCSdiYWNrZW5kLmNvcnJ1cHRfaW1nJzogJ1RoaXMgZmlsZSBpcyBhIG5vdCBhIGltYWdlIG9yIGEgY29ycnVwdCBmaWxlOiAnLCAvLyBwYXRoDQorCSdiYWNrZW5kLnJlc2l6ZV9pbmVycic6ICdUaGlzIGZpbGUgY291bGQgbm90IGJlIHJlc2l6ZWQgZHVlIHRvIGFuIGludGVybmFsIGVycm9yLicsDQorCSdiYWNrZW5kLmNvcHlfZmFpbGVkJzogJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGNvcHlpbmcgdGhlIGZpbGUgLyBkaXJlY3Rvcnk6ICcsIC8vIG9sZGxvY2FscGF0aCA6IG5ld2xvY2FscGF0aA0KKwknYmFja2VuZC5kZWxldGVfY2FjaGVfZW50cmllc19mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGRlbGV0ZSB0aGUgaXRlbSBjYWNoZSAodGh1bWJuYWlscywgbWV0YWRhdGEpJywNCisJJ2JhY2tlbmQubWtkaXJfZmFpbGVkJzogJ0FuIGVycm9yIG9jY3VycmVkIHdoZW4gYXR0ZW1wdGluZyB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeTogJywgLy8gcGF0aA0KKwknYmFja2VuZC5tb3ZlX2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBtb3ZpbmcgLyByZW5hbWluZyB0aGUgZmlsZSAvIGRpcmVjdG9yeTogJywgLy8gb2xkbG9jYWxwYXRoIDogbmV3bG9jYWxwYXRoDQorCSdiYWNrZW5kLnBhdGhfdGFtcGVyaW5nJzogJ1BhdGggdGFtcGVyaW5nIGRldGVjdGVkLicsDQorCSdiYWNrZW5kLnJlYWxwYXRoX2ZhaWxlZCc6ICdDYW5ub3QgdHJhbnNsYXRlIHRoZSBnaXZlbiBmaWxlIHNwZWNpZmljYXRpb24gdG8gYSB2YWxpZCBzdG9yYWdlIGxvY2F0aW9uOiAnLCAvLyAkcGF0aA0KKwknYmFja2VuZC51bmxpbmtfZmFpbGVkJzogJ0FuIGVycm9yIG9jY3VycmVkIHdoZW4gYXR0ZW1wdGluZyB0byBkZWxldGUgdGhlIGZpbGUgLyBkaXJlY3Rvcnk6ICcsICAvLyBwYXRoDQorDQorCS8vIEltYWdlLmNsYXNzLnBocDoNCisJJ2JhY2tlbmQucHJvY2Vzc19ub2ZpbGUnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBkaWQgbm90IHJlY2VpdmUgYSB2YWxpZCBmaWxlIGxvY2F0aW9uIHRvIHdvcmsgb24uJywNCisJJ2JhY2tlbmQuaW1hZ2VjcmVhdGV0cnVlY29sb3JfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNyZWF0ZXRydWVjb2xvcigpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5pbWFnZWFscGhhYmxlbmRpbmdfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgcGVyZm9ybSB0aGUgcmVxdWlyZWQgaW1hZ2UgYWxwaGEgYmxlbmRpbmcuJywNCisJJ2JhY2tlbmQuaW1hZ2VhbGxvY2FscGhhNTBwY3RncmV5X2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogY2Fubm90IGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgYWxwaGEgY2hhbm5lbCBhbmQgdGhlIDUwJSBiYWNrZ3JvdW5kLicsDQorCSdiYWNrZW5kLmltYWdlY29sb3JhbGxvY2F0ZWFscGhhX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogY2Fubm90IGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgYWxwaGEgY2hhbm5lbCBmb3IgdGhpcyBjb2xvciBpbWFnZS4nLA0KKwknYmFja2VuZC5pbWFnZXJvdGF0ZV9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlcm90YXRlKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmltYWdlY29weXJlc2FtcGxlZF9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlY29weXJlc2FtcGxlZCgpIGZhaWxlZC4gSW1hZ2UgcmVzb2x1dGlvbjogJywgLyogeCAqIHkgKi8NCisJJ2JhY2tlbmQuaW1hZ2Vjb3B5X2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2Vjb3B5KCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmltYWdlZmxpcF9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IGNhbm5vdCBmbGlwIHRoZSBpbWFnZS4nLA0KKwknYmFja2VuZC5pbWFnZWpwZWdfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWpwZWcoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2VwbmdfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZXBuZygpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5pbWFnZWdpZl9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlZ2lmKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmltYWdlY3JlYXRlX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2VjcmVhdGUoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuY3Z0MnRydWVjb2xvcl9mYWlsZWQnOiAnY29udmVyc2lvbiB0byBUcnVlIENvbG9yIGZhaWxlZC4gSW1hZ2UgcmVzb2x1dGlvbjogJywgLyogeCAqIHkgKi8NCisJJ2JhY2tlbmQubm9faW1hZ2VpbmZvJzogJ0NvcnJ1cHQgaW1hZ2Ugb3Igbm90IGFuIGltYWdlIGZpbGUgYXQgYWxsLicsDQorCSdiYWNrZW5kLmltZ193aWxsX25vdF9maXQnOiAnU2VydmVyIGVycm9yOiBpbWFnZSBkb2VzIG5vdCBmaXQgaW4gYXZhaWxhYmxlIFJBTTsgbWluaW11bSByZXF1aXJlZCAoZXN0aW1hdGUpOiAnLCAvKiBYWFggTUJ5dGVzICovDQorCSdiYWNrZW5kLnVuc3VwcG9ydGVkX2ltZ2ZtdCc6ICd1bnN1cHBvcnRlZCBpbWFnZSBmb3JtYXQ6ICcsICAgIC8qIGpwZWcvcG5nL2dpZi8uLi4gKi8NCisNCisJLyogRlUgKi8NCisJdXBsb2FkZXI6IHsNCisJCXVua25vd246ICfQndC10LjQt9Cy0LXRgdGC0L3QsNGPINC+0YjQuNCx0LrQsCcsDQorCQlzaXplTGltaXRNaW46ICfQndC10LLQvtC30LzQvtC20L3QviDQv9GA0LjQutGA0LXQv9C40YLRjCDRhNCw0LnQuyAiPGVtPiR7bmFtZX08L2VtPiIgKCR7c2l6ZX0pLCDQvNC40L3QuNC80LDQu9GM0L3Ri9C5INGA0LDQt9C80LXRgCDRhNCw0LvQsCA8c3Ryb25nPiR7c2l6ZV9taW59PC9zdHJvbmc+IScsDQorCQlzaXplTGltaXRNYXg6ICfQndC10LLQvtC30LzQvtC20L3QviDQv9GA0LjQutGA0LXQv9C40YLRjCDRhNCw0LnQuyAiPGVtPiR7bmFtZX08L2VtPiIgKCR7c2l6ZX0pLCDQvNCw0LrRgdC40LzQsNC70YzQvdGL0Lkg0YDQsNC30LzQtdGAINGE0LDQudC70LAgPHN0cm9uZz4ke3NpemVfbWF4fTwvc3Ryb25nPiEnLA0KKwkJbW9kX3NlY3VyaXR5OiAnTm8gcmVzcG9uc2Ugd2FzIGdpdmVuIGZyb20gdGhlIHVwbG9hZGVyLCB0aGlzIG1heSBtZWFuIHRoYXQgIm1vZF9zZWN1cml0eSIgaXMgYWN0aXZlIG9uIHRoZSBzZXJ2ZXIgYW5kIG9uZSBvZiB0aGUgcnVsZXMgaW4gbW9kX3NlY3VyaXR5IGhhcyBjYW5jZWxsZWQgdGhpcyByZXF1ZXN0LiAgSWYgeW91IGNhbiBub3QgZGlzYWJsZSBtb2Rfc2VjdXJpdHksIHlvdSBtYXkgbmVlZCB0byB1c2UgdGhlIE5vRmxhc2ggVXBsb2FkZXIuJw0KKwl9LA0KKw0KKwlmbGFzaDogew0KKwkJaGlkZGVuOiAn0KfRgtC+0LHRiyDQstC60LvRjtGH0LjRgtGMIGVtYmVkZGVkINC30LDQs9GA0YPQt9GH0LjQuiwg0YDQsNC30LHQu9C+0LrQuNGA0YPQudGC0LUg0L/QvtC00LrQu9GO0YfQsNC10LzRi9C1INGN0LvQtdC80LXQvdGC0Ysg0LIg0LLQsNGI0LXQvCDQsdGA0LDRg9C30LXRgNC1ICjRgdC8LiDQkdC70L7QutC40YDQvtCy0LrRgyDRgNC10LrQu9Cw0LzRiykuJywNCisJCWRpc2FibGVkOiAn0KfRgtC+0LHRiyDQstC60LvRjtGH0LjRgtGMIGVtYmVkZGVkINC30LDQs9GA0YPQt9GH0LjQuiwg0YHQvdC40LzQuNGC0LUg0LHQu9C+0LrQuNGA0L7QstC60YMg0YTQu9C10Ygg0Lgg0L7QsdC90L7QstC40YLQtSDRgdGC0YDQsNC90LjRhtGDICjRgdC8LiDQkdC70L7QutC40YDQvtCy0LrQsCDRhNC70LXRiCkuJywNCisJCWZsYXNoOiAn0KfRgtC+0LHRiyDQt9Cw0LPRgNGD0LbQsNGC0Ywg0YTQsNC50LvRiywg0JLQsNC8INC90LXQvtCx0YXQvtC00LjQvNC+INGD0YHRgtCw0L3QvtCy0LjRgtGMIDxhIGhyZWY9Imh0dHA6Ly93d3cuYWRvYmUuY29tL3Nob2Nrd2F2ZS9kb3dubG9hZC9kb3dubG9hZC5jZ2k/UDFfUHJvZF9WZXJzaW9uPVNob2Nrd2F2ZUZsYXNoIj5BZG9iZSBGbGFzaDwvYT4uJw0KKwl9LA0KKw0KKwlyZXNpemVJbWFnZXM6ICfQnNC10L3Rj9GC0Ywg0YDQsNC30LzQtdGAINCx0L7Qu9GM0YjQuNGFINC40LfQvtCx0YDQsNC20LXQvdC40Lkg0L/RgNC4INC30LDQs9GA0YPQt9C60LUnLA0KKw0KKwlzZXJpYWxpemU6ICdTYXZlIGdhbGxlcnknLA0KKwlnYWxsZXJ5OiB7DQorCQl0ZXh0OiAnSW1hZ2UgY2FwdGlvbicsDQorCQlzYXZlOiAnU2F2ZScsDQorCQlyZW1vdmU6ICdSZW1vdmUgZnJvbSBnYWxsZXJ5JywNCisJCWRyYWc6ICdEcmFnIGl0ZW1zIGhlcmUgdG8gY3JlYXRlIGEgZ2FsbGVyeS4uLicNCisJfQ0KK307DQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLnNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL0xhbmd1YWdlL0xhbmd1YWdlLnNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkN2ZlODMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvTGFuZ3VhZ2UvTGFuZ3VhZ2Uuc2UuanMKQEAgLTAsMCArMSwxMjYgQEAKKy8qDQorU2NyaXB0OiBMYW5ndWFnZS5zZS5qcw0KKwlNb29Ub29scyBGaWxlTWFuYWdlciAtIExhbmd1YWdlIFN0cmluZ3MgaW4gU3dlZGlzaA0KKw0KK1RyYW5zbGF0aW9uOg0KKwlbTWFyY3VzICp4aW50cm9uKiBDYXJsc3Nvbl0oaHR0cDovL3hpbnRyb24uc2UpDQorKi8NCisNCitGaWxlTWFuYWdlci5MYW5ndWFnZS5zZSA9IHsNCisJbW9yZTogJ0RldGFsamVyJywNCisJd2lkdGg6ICdCcmVkZDonLA0KKwloZWlnaHQ6ICdIw7ZqZDonLA0KKw0KKwlvazogJ09rJywNCisJb3BlbjogJ1bDpGxqIGZpbCcsDQorCXVwbG9hZDogJ0xhZGRhIHVwcCcsDQorCWNyZWF0ZTogJ1NrYXBhIG1hcHAnLA0KKwljcmVhdGVkaXI6ICdWw6RubGlnZW4gYW5nZSBldHQgbWFwcC1uYW1uOicsDQorCWNhbmNlbDogJ0F2YnJ5dCcsDQorCWVycm9yOiAnRmVsJywNCisNCisJaW5mb3JtYXRpb246ICdJbmZvcm1hdGlvbicsDQorCXR5cGU6ICdUeXA6JywNCisJc2l6ZTogJ1N0b3JsZWs6JywNCisJZGlyOiAnU8O2a3bDpGc6JywNCisJbW9kaWZpZWQ6ICdTZW5hc3Qgw6RuZGFkOicsDQorCXByZXZpZXc6ICdGw7ZyaGFuZHNncmFuc2thJywNCisJY2xvc2U6ICdTdMOkbmcnLA0KKwlkZXN0cm95OiAnVGEgYm9ydCcsDQorCWRlc3Ryb3lmaWxlOiAnw4RyIGR1IHPDpGtlciBww6UgYXR0IGR1IHZpbGwgdGEgYm9ydCBmaWxlbj8nLA0KKw0KKwlyZW5hbWU6ICdEw7ZwIG9tJywNCisJcmVuYW1lZmlsZTogJ1bDpG5saWdlbiBhbmdlIGV0dCBueXR0IGZpbG5hbW46JywNCisJcm5fbXZfY3A6ICdSZW5hbWUvTW92ZS9Db3B5JywNCisNCisJZG93bmxvYWQ6ICdMYWRkYSBuZXInLA0KKwlub3ByZXZpZXc6ICc8aT5JbmdlbiBmw7ZyaGFuZHNncmFuc2tuaW5nIHRpbGxnw6RuZ2xpZzwvaT4nLA0KKw0KKwl0aXRsZTogJ1RpdGVsOicsDQorCWFydGlzdDogJ0FydGlzdDonLA0KKwlhbGJ1bTogJ0FsYnVtOicsDQorCWxlbmd0aDogJ0zDpG5nZDonLA0KKwliaXRyYXRlOiAnQml0cmF0ZTonLA0KKw0KKwlkZXNlbGVjdDogJ0F2bWFya2VyYScsDQorDQorCW5vZGVzdHJveTogJ0Z1bmt0aW9uZW4gdGEgYm9ydCBmaWxlciDDpHIgYXZzdMOkbmdkIHDDpSBkZW5uYSBzZXJ2ZXIuJywNCisNCisJdG9nZ2xlX3NpZGVfYm94ZXM6ICdUaHVtYm5haWwgdmlldycsDQorCXRvZ2dsZV9zaWRlX2xpc3Q6ICdMaXN0IHZpZXcnLA0KKwlzaG93X2Rpcl90aHVtYl9nYWxsZXJ5OiAnU2hvdyB0aHVtYm5haWxzIG9mIHRoZSBmaWxlcyBpbiB0aGUgcHJldmlldyBwYW5lJywNCisJZHJhZ19uX2Ryb3A6ICdEcmFnICYgZHJvcCBoYXMgYmVlbiBlbmFibGVkIGZvciB0aGlzIGRpcmVjdG9yeScsDQorCWRyYWdfbl9kcm9wX2Rpc2FibGVkOiAnRHJhZyAmIGRyb3AgaGFzIGJlZW4gdGVtcG9yYXJpbHkgZGlzYWJsZWQgZm9yIHRoaXMgZGlyZWN0b3J5JywNCisJZ290b19wYWdlOiAnR28gdG8gcGFnZScsDQorDQorCSdiYWNrZW5kLmRpc2FibGVkJzogJ1VwcGxhZGRuaW5nIMOkciBhdnN0w6RuZ3QgcMOlIGRlbm5hIHNlcnZlci4nLA0KKwknYmFja2VuZC5hdXRob3JpemVkJzogJ0R1IGhhciBpbnRlIGJlaMO2cmlnaGV0IGF0dCBsYWRkYSB1cHAgZmlsZXIuJywNCisJJ2JhY2tlbmQucGF0aCc6ICdEZW4gYW5naXZuYSB1cHBsYWRkbmluZ3MtbWFwcGVuIGV4aXN0ZXJhciBpbnRlLiBWw6RubGlnZW4ga29udGFrdGEgc2VydmVyYWRtaW5pc3RyYXTDtnJlbi4nLA0KKwknYmFja2VuZC5leGlzdHMnOiAnRGVuIGFuZ2l2bmEgdXBwbGFkZG5pbmdzLW1hcHBlbiBleGlzdGVyYXIgcmVkYW4uIFbDpG5saWdlbiBrb250YWt0YSBzZXJ2ZXJhZG1pbmlzdHJhdMO2cmVuLicsDQorCSdiYWNrZW5kLm1pbWUnOiAnRGVubmEgZmlsdHlwIGFjY2VwdGVyYXMgaW50ZSBww6UgZGVubmEgc2VydmVyLicsDQorCSdiYWNrZW5kLmV4dGVuc2lvbic6ICdEZW4gdXBwbGFkZGFkZSBmaWxlbiBoYXIgZW4gb2vDpG5kIGVsbGVyIGbDtnJianVkZW4gZmlsw6RuZGVsc2UuJywNCisJJ2JhY2tlbmQuc2l6ZSc6ICdGaWxlbiDDpHIgZsO2ciBzdG9yIGbDtnIgZGVubmEgc2VydmVyLiBWw6RubGlnZW4gbGFkZGEgdXBwIGVuIG1pbmRyZSBmaWwuJywNCisJJ2JhY2tlbmQucGFydGlhbCc6ICdFdHQgZmVsIHVwcHN0b2Qgb2NoIGhlbGEgZmlsZW4ga3VuZGUgaW50ZSBsYWRkYXMgdXBwLiBWw6RubGlnZW4gZsO2cnPDtmsgaWdlbi4nLA0KKwknYmFja2VuZC5ub2ZpbGUnOiAnRHUgbcOlc3RlIHbDpGxqYSBlbiBmaWwgYXR0IGxhZGRhIHVwcC4nLA0KKwknYmFja2VuZC5kZWZhdWx0JzogJ0V0dCBmZWwgaW50csOkZmZhZGUgdW5kZXIgdXBwbGFkZG5pbmdlbi4nLA0KKwknYmFja2VuZC5wYXRoX25vdF93cml0YWJsZSc6ICdZb3UgZG8gbm90IGhhdmUgd3JpdGUvdXBsb2FkIHBlcm1pc3Npb25zIGZvciB0aGlzIGRpcmVjdG9yeS4nLA0KKwknYmFja2VuZC5maWxlbmFtZV9tYXliZV90b29fbGFyZ2UnOiAnVGhlIGZpbGVuYW1lL3BhdGggaXMgcHJvYmFibHkgdG9vIGxvbmcgZm9yIHRoZSBzZXJ2ZXIgZmlsZXN5c3RlbS4gUGxlYXNlIHJldHJ5IHdpdGggYSBzaG9ydGVyIGZpbGUgbmFtZS4nLA0KKwknYmFja2VuZC5mbXRfbm90X2FsbG93ZWQnOiAnWW91IGFyZSBub3QgYWxsb3dlZCB0byB1cGxvYWQgdGhpcyBmaWxlIGZvcm1hdC9uYW1lLicsDQorCSdiYWNrZW5kLnJlYWRfZXJyb3InOiAnQ2Fubm90IHJlYWQgLyBkb3dubG9hZCB0aGUgc3BlY2lmaWVkIGZpbGUuJywNCisJJ2JhY2tlbmQudW5pZGVudGlmaWVkX2Vycm9yJzogJ0FuIHVuaW5kZW50aWZpZWQgZXJyb3Igb2NjdXJyZWQgd2hpbGUgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBiYWNrZW5kICh3ZWIgc2VydmVyKS4nLA0KKw0KKwknYmFja2VuZC5ub25ld2ZpbGUnOiAnQSBuZXcgbmFtZSBmb3IgdGhlIGZpbGUgdG8gYmUgbW92ZWQgLyBjb3BpZWQgaXMgbWlzc2luZy4nLA0KKwknYmFja2VuZC5jb3JydXB0X2ltZyc6ICdUaGlzIGZpbGUgaXMgYSBub3QgYSBpbWFnZSBvciBhIGNvcnJ1cHQgZmlsZTogJywgLy8gcGF0aA0KKwknYmFja2VuZC5yZXNpemVfaW5lcnInOiAnVGhpcyBmaWxlIGNvdWxkIG5vdCBiZSByZXNpemVkIGR1ZSB0byBhbiBpbnRlcm5hbCBlcnJvci4nLA0KKwknYmFja2VuZC5jb3B5X2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBjb3B5aW5nIHRoZSBmaWxlIC8gZGlyZWN0b3J5OiAnLCAvLyBvbGRsb2NhbHBhdGggOiBuZXdsb2NhbHBhdGgNCisJJ2JhY2tlbmQuZGVsZXRlX2NhY2hlX2VudHJpZXNfZmFpbGVkJzogJ0FuIGVycm9yIG9jY3VycmVkIHdoZW4gYXR0ZW1wdGluZyB0byBkZWxldGUgdGhlIGl0ZW0gY2FjaGUgKHRodW1ibmFpbHMsIG1ldGFkYXRhKScsDQorCSdiYWNrZW5kLm1rZGlyX2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gY3JlYXRlIHRoZSBkaXJlY3Rvcnk6ICcsIC8vIHBhdGgNCisJJ2JhY2tlbmQubW92ZV9mYWlsZWQnOiAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbW92aW5nIC8gcmVuYW1pbmcgdGhlIGZpbGUgLyBkaXJlY3Rvcnk6ICcsIC8vIG9sZGxvY2FscGF0aCA6IG5ld2xvY2FscGF0aA0KKwknYmFja2VuZC5wYXRoX3RhbXBlcmluZyc6ICdQYXRoIHRhbXBlcmluZyBkZXRlY3RlZC4nLA0KKwknYmFja2VuZC5yZWFscGF0aF9mYWlsZWQnOiAnQ2Fubm90IHRyYW5zbGF0ZSB0aGUgZ2l2ZW4gZmlsZSBzcGVjaWZpY2F0aW9uIHRvIGEgdmFsaWQgc3RvcmFnZSBsb2NhdGlvbjogJywgLy8gJHBhdGgNCisJJ2JhY2tlbmQudW5saW5rX2ZhaWxlZCc6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gZGVsZXRlIHRoZSBmaWxlIC8gZGlyZWN0b3J5OiAnLCAgLy8gcGF0aA0KKw0KKwkvLyBJbWFnZS5jbGFzcy5waHA6DQorCSdiYWNrZW5kLnByb2Nlc3Nfbm9maWxlJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZGlkIG5vdCByZWNlaXZlIGEgdmFsaWQgZmlsZSBsb2NhdGlvbiB0byB3b3JrIG9uLicsDQorCSdiYWNrZW5kLmltYWdlY3JlYXRldHJ1ZWNvbG9yX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2VjcmVhdGV0cnVlY29sb3IoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2VhbHBoYWJsZW5kaW5nX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogY2Fubm90IHBlcmZvcm0gdGhlIHJlcXVpcmVkIGltYWdlIGFscGhhIGJsZW5kaW5nLicsDQorCSdiYWNrZW5kLmltYWdlYWxsb2NhbHBoYTUwcGN0Z3JleV9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IGNhbm5vdCBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGFscGhhIGNoYW5uZWwgYW5kIHRoZSA1MCUgYmFja2dyb3VuZC4nLA0KKwknYmFja2VuZC5pbWFnZWNvbG9yYWxsb2NhdGVhbHBoYV9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IGNhbm5vdCBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGFscGhhIGNoYW5uZWwgZm9yIHRoaXMgY29sb3IgaW1hZ2UuJywNCisJJ2JhY2tlbmQuaW1hZ2Vyb3RhdGVfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZXJvdGF0ZSgpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5pbWFnZWNvcHlyZXNhbXBsZWRfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWNvcHlyZXNhbXBsZWQoKSBmYWlsZWQuIEltYWdlIHJlc29sdXRpb246ICcsIC8qIHggKiB5ICovDQorCSdiYWNrZW5kLmltYWdlY29weV9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlY29weSgpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5pbWFnZWZsaXBfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBjYW5ub3QgZmxpcCB0aGUgaW1hZ2UuJywNCisJJ2JhY2tlbmQuaW1hZ2VqcGVnX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2VqcGVnKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmltYWdlcG5nX2ZhaWxlZCc6ICdUaGUgaW1hZ2UgcHJvY2Vzc2luZyB1bml0IGZhaWxlZDogR0QgaW1hZ2VwbmcoKSBmYWlsZWQuJywNCisJJ2JhY2tlbmQuaW1hZ2VnaWZfZmFpbGVkJzogJ1RoZSBpbWFnZSBwcm9jZXNzaW5nIHVuaXQgZmFpbGVkOiBHRCBpbWFnZWdpZigpIGZhaWxlZC4nLA0KKwknYmFja2VuZC5pbWFnZWNyZWF0ZV9mYWlsZWQnOiAnVGhlIGltYWdlIHByb2Nlc3NpbmcgdW5pdCBmYWlsZWQ6IEdEIGltYWdlY3JlYXRlKCkgZmFpbGVkLicsDQorCSdiYWNrZW5kLmN2dDJ0cnVlY29sb3JfZmFpbGVkJzogJ2NvbnZlcnNpb24gdG8gVHJ1ZSBDb2xvciBmYWlsZWQuIEltYWdlIHJlc29sdXRpb246ICcsIC8qIHggKiB5ICovDQorCSdiYWNrZW5kLm5vX2ltYWdlaW5mbyc6ICdDb3JydXB0IGltYWdlIG9yIG5vdCBhbiBpbWFnZSBmaWxlIGF0IGFsbC4nLA0KKwknYmFja2VuZC5pbWdfd2lsbF9ub3RfZml0JzogJ1NlcnZlciBlcnJvcjogaW1hZ2UgZG9lcyBub3QgZml0IGluIGF2YWlsYWJsZSBSQU07IG1pbmltdW0gcmVxdWlyZWQgKGVzdGltYXRlKTogJywgLyogWFhYIE1CeXRlcyAqLw0KKwknYmFja2VuZC51bnN1cHBvcnRlZF9pbWdmbXQnOiAndW5zdXBwb3J0ZWQgaW1hZ2UgZm9ybWF0OiAnLCAgICAvKiBqcGVnL3BuZy9naWYvLi4uICovDQorDQorCS8qIEZVICovDQorCXVwbG9hZGVyOiB7DQorCQl1bmtub3duOiAnT2vDpG50IGZlbCcsDQorCQlkdXBsaWNhdGU6ICdEdSBrYW4gaW50ZSBsYWRkYSB1cHAgIjxlbT4ke25hbWV9PC9lbT4iICgke3NpemV9KSwgZmlsZW4gZXhpc3RlcmFyIHJlZGFuIScsDQorCQlzaXplTGltaXRNaW46ICdEdSBrYW4gaW50ZSBsYWRkYSB1cHAgIjxlbT4ke25hbWV9PC9lbT4iICgke3NpemV9KSwgbWluc3RhIHN0b3JsZWsgc29tIGFjY2VwdGVyYXMgw6RyIDxzdHJvbmc+JHtzaXplX21pbn08L3N0cm9uZz4hJywNCisJCXNpemVMaW1pdE1heDogJ0R1IGthbiBpbnRlIGxhZGRhIHVwcCAiPGVtPiR7bmFtZX08L2VtPiIgKCR7c2l6ZX0pLCBmaWxlbnMgc3RvcmxlayBmw6VyIGludGUgw7Z2ZXJzdGlnYSA8c3Ryb25nPiR7c2l6ZV9tYXh9PC9zdHJvbmc+IScsDQorCQltb2Rfc2VjdXJpdHk6ICdObyByZXNwb25zZSB3YXMgZ2l2ZW4gZnJvbSB0aGUgdXBsb2FkZXIsIHRoaXMgbWF5IG1lYW4gdGhhdCAibW9kX3NlY3VyaXR5IiBpcyBhY3RpdmUgb24gdGhlIHNlcnZlciBhbmQgb25lIG9mIHRoZSBydWxlcyBpbiBtb2Rfc2VjdXJpdHkgaGFzIGNhbmNlbGxlZCB0aGlzIHJlcXVlc3QuICBJZiB5b3UgY2FuIG5vdCBkaXNhYmxlIG1vZF9zZWN1cml0eSwgeW91IG1heSBuZWVkIHRvIHVzZSB0aGUgTm9GbGFzaCBVcGxvYWRlci4nDQorCX0sDQorDQorCWZsYXNoOiB7DQorCQloaWRkZW46IG51bGwsDQorCQlkaXNhYmxlZDogbnVsbCwNCisJCWZsYXNoOiAnRsO2ciBhdHQga3VubmEgbGFkZGEgdXBwIGZpbGVyIGJlaMO2dmVyIGR1IGhhIDxhIGhyZWY9Imh0dHA6Ly93d3cuYWRvYmUuY29tL3Nob2Nrd2F2ZS9kb3dubG9hZC9kb3dubG9hZC5jZ2k/UDFfUHJvZF9WZXJzaW9uPVNob2Nrd2F2ZUZsYXNoIj5BZG9iZSBGbGFzaDwvYT4gaW5zdGFsbGVyYXQuJw0KKwl9LA0KKw0KKwlyZXNpemVJbWFnZXM6ICfDhG5kcmEgc3Rvcmxla2VuIHDDpSBiaWxkZW4gdW5kZXIgdXBwbGFkZG5pbmdlbicsDQorDQorCXNlcmlhbGl6ZTogJ1NhdmUgZ2FsbGVyeScsDQorCWdhbGxlcnk6IHsNCisJCXRleHQ6ICdJbWFnZSBjYXB0aW9uJywNCisJCXNhdmU6ICdTYXZlJywNCisJCXJlbW92ZTogJ1JlbW92ZSBmcm9tIGdhbGxlcnknLA0KKwkJZHJhZzogJ0RyYWcgaXRlbXMgaGVyZSB0byBjcmVhdGUgYSBnYWxsZXJ5Li4uJw0KKwl9DQorfTsNCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvTGFuZ3VhZ2UvbGFuZ3VhZ2UuemguanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvTGFuZ3VhZ2UvbGFuZ3VhZ2UuemguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExYzBjNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9MYW5ndWFnZS9sYW5ndWFnZS56aC5qcwpAQCAtMCwwICsxLDEyMyBAQAorLyoKK1NjcmlwdDogTGFuZ3VhZ2UuZW4uanMKKwlNb29Ub29scyBGaWxlTWFuYWdlciAtIExhbmd1YWdlIFN0cmluZ3MgaW4gU2ltcGxpZmllZCBDaGluZXNlCisKK1RyYW5zbGF0aW9uOgorCVtSb25mZXkgTGldIChlbWFpbDogdGFuZ2Rhb2tlQGdtYWlsLmNvbSkKKyovCisKK0ZpbGVNYW5hZ2VyLkxhbmd1YWdlLnpoID0geworCW1vcmU6ICfor6bnu4YnLAorCXdpZHRoOiAn5a69OicsCisJaGVpZ2h0OiAn6auYOicsCisKKwlvazogJ+WlvScsCisJb3BlbjogJ+mAieaLqeaWh+S7ticsCisJdXBsb2FkOiAn5LiK5LygJywKKwljcmVhdGU6ICfmlrDlu7rmlofku7blpLknLAorCWNyZWF0ZWRpcjogJ+ivt+aMh+WumuS4gOS4quaWh+S7tuWkuTonLAorCWNhbmNlbDogJ+WPlua2iCcsCisJZXJyb3I6ICflh7rplJknLAorCisJaW5mb3JtYXRpb246ICfor6bnu4bkv6Hmga8nLAorCXR5cGU6ICfnsbvliKs6JywKKwlzaXplOiAn5aSn5bCPOicsCisJZGlyOiAn6Lev5b6EOicsCisJbW9kaWZpZWQ6ICfmnIDlkI7mm7TmlLk6JywKKwlwcmV2aWV3OiAn6aKE6KeIJywKKwljbG9zZTogJ+WFs+mXrScsCisJZGVzdHJveTogJ+WIoOmZpCcsCisJZGVzdHJveWZpbGU6ICfnoa7lrprliKDpmaTmraTmlofku7bvvJ8nLAorCisJcmVuYW1lOiAn6YeN5ZG95ZCNJywKKwlyZW5hbWVmaWxlOiAn6K+36L6T5YWl5paw55qE5paH5Lu25ZCNOicsCisKKwlkb3dubG9hZDogJ+S4i+i9vScsCisJbm9wcmV2aWV3OiAnPGk+5LiN6YCC55SoPC9pPicsCisKKwl0aXRsZTogJ+agh+mimDonLAorCWFydGlzdDogJ+iJuuacr+WutjonLAorCWFsYnVtOiAn5LiT6L6ROicsCisJbGVuZ3RoOiAn5pe26Ze0OicsCisJYml0cmF0ZTogJ+avlOeOhzonLAorCisJZGVzZWxlY3Q6ICflj5bmtojpgInmi6knLAorCisJbm9kZXN0cm95OiAn5Yig6Zmk5Y+X6ZmQLicsCisKKwl0b2dnbGVfc2lkZV9ib3hlczogJ+e8qeeVpeWbvuinhuWbvicsCisJdG9nZ2xlX3NpZGVfbGlzdDogJ+WIl+ihqOinhuWbvicsCisJc2hvd19kaXJfdGh1bWJfZ2FsbGVyeTogJ+mihOiniOmdouadv+aYvuekuuaWh+S7tue8qeeVpeWbvicsCisJZHJhZ19uX2Ryb3A6ICfmraTmlofku7blpLnnmoTmi5bmlL7lip/og73lt7LlvIDlkK8nLAorCWRyYWdfbl9kcm9wX2Rpc2FibGVkOiAn5q2k5paH5Lu25aS555qE5ouW5pS+5Yqf6IO95bey5pqC5pe25YWz6ZetJywKKwlnb3RvX3BhZ2U6ICfovazoh7PpobXnoIEnLAorCisJJ2JhY2tlbmQuZGlzYWJsZWQnOiAn5LiK5Lyg5Y+X6ZmQ44CCJywKKwknYmFja2VuZC5hdXRoZW50aWNhdGVkJzogJ+aCqOayoeacieS4iuS8oOeahOadg+mZkOOAgicsCisJJ2JhY2tlbmQucGF0aCc6ICfkuIrkvKDmlofku7blpLnkuI3lrZjlnKjvvIzor7fogZTns7vnvZHnrqHjgIInLAorCSdiYWNrZW5kLmV4aXN0cyc6ICfkuIrkvKDkvY3nva7lt7Lnu4/lrZjlnKjvvIzor7fogZTns7vnvZHnrqHjgIInLAorCSdiYWNrZW5kLm1pbWUnOiAn56aB5q2i55qE5paH5Lu257G75Z6L44CCJywKKwknYmFja2VuZC5leHRlbnNpb24nOiAn5LiK5Lyg5pyq55+l5oiW5piv56aB5q2i55qE5paH5Lu257G75Z6L44CCJywKKwknYmFja2VuZC5zaXplJzogJ+aWh+S7tui/h+Wkp++8jOivt+mHjeaWsOS4iuS8oOWwj+S6m+eahOaWh+S7tuOAgicsCisJJ2JhY2tlbmQucGFydGlhbCc6ICfkuIrkvKDnmoTmlofku7bkuI3lrozlhajvvIzor7fph43mlrDkuIrkvKDjgIInLAorCSdiYWNrZW5kLm5vZmlsZSc6ICfmsqHmnInmjIflrprmlofku7bjgIInLAorCSdiYWNrZW5kLmRlZmF1bHQnOiAn5LiK5Lyg5Ye66ZSZ44CCJywKKwknYmFja2VuZC5wYXRoX25vdF93cml0YWJsZSc6ICfmgqjmsqHmnInmm7TmlLnmiJbkuIrkvKDmraTmlofku7blpLnnmoTmnYPpmZDjgIInLAorCSdiYWNrZW5kLmZpbGVuYW1lX21heWJlX3Rvb19sYXJnZSc6ICfmlofku7blkI3ov4fplb/jgILor7fph43mlrDovpPlhaXnn63kupvnmoTlkI3np7DjgIInLAorCSdiYWNrZW5kLmZtdF9ub3RfYWxsb3dlZCc6ICfmraTmlofku7bnsbvlnovnpoHmraLkuIrkvKDjgIInLAorCSdiYWNrZW5kLnVuaWRlbnRpZmllZF9lcnJvcic6ICfkuI7lkI7lj7DmnI3liqHlmajpgJrorq/lj5HnlJ/mnKrnn6XplJnor6/jgIInLAorCisJJ2JhY2tlbmQubm9uZXdmaWxlJzogJ+aJvuS4jeWIsOW+heaLt+i0neaIluenu+WKqOeahOaWh+S7tueahOaWsOWQjeensC4nLAorCSdiYWNrZW5kLmNvcnJ1cHRfaW1nJzogJ+atpOaWh+S7tuS4jeaYr+WbvuWDj+aIluiAheW3suaNn+Wdj++8miAnLCAvLyBwYXRoCisJJ2JhY2tlbmQucmVzaXplX2luZXJyJzogJ+WHuueOsOWGhemDqOmUmeivr+atpOaWh+S7tuS4jeiDveabtOaUueWkp+Wwjy4nLAorCSdiYWNrZW5kLmNvcHlfZmFpbGVkJzogJ+WkjeWItumUmeivr++8miAnLCAvLyBvbGRsb2NhbHBhdGggOiBuZXdsb2NhbHBhdGgKKwknYmFja2VuZC5kZWxldGVfY2FjaGVfZW50cmllc19mYWlsZWQnOiAn5Yig6Zmk5Zu+5YOP57yT5a2Y77yI57yp55Wl5Zu+77yM5YWD5pWw5o2u77yJ5Ye66ZSZJywKKwknYmFja2VuZC5ta2Rpcl9mYWlsZWQnOiAn5Yib5bu65paH5Lu25aS55Ye66ZSZ77yaJywgLy8gcGF0aAorCSdiYWNrZW5kLm1vdmVfZmFpbGVkJzogJ+enu+WKqC/ph43lkb3lkI3mlofku7bmiJbmlofku7blpLnlh7rplJk6ICcsIC8vIG9sZGxvY2FscGF0aCA6IG5ld2xvY2FscGF0aAorCSdiYWNrZW5kLnBhdGhfdGFtcGVyaW5nJzogJ+ajgOa1i+WIsOi3r+W+hOabtOaUuS4nLAorCSdiYWNrZW5kLnJlYWxwYXRoX2ZhaWxlZCc6ICfkuI3og73kv53lrZjliLDmnInmlYjnmoTot6/lvoQ6ICcsIC8vICRwYXRoCisJJ2JhY2tlbmQudW5saW5rX2ZhaWxlZCc6ICfliKDpmaTmlofku7bmiJbmlofku7blpLnlh7rplJnvvJogJywgIC8vIHBhdGgKKworCS8vIEltYWdlLmNsYXNzLnBocDoKKwknYmFja2VuZC5wcm9jZXNzX25vZmlsZSc6ICflm77lg4/lpITnkIblmajmlLbliLDml6DmlYjnmoTmlofku7bot6/lvoTjgIInLAorCSdiYWNrZW5kLmltYWdlY3JlYXRldHJ1ZWNvbG9yX2ZhaWxlZCc6ICflm77lg4/lpITnkIblmajlh7rplJk6IEdEIGltYWdlY3JlYXRldHJ1ZWNvbG9yKCkg5aSx6LSlLicsCisJJ2JhY2tlbmQuaW1hZ2VhbHBoYWJsZW5kaW5nX2ZhaWxlZCc6ICflm77lg4/lpITnkIblmajlh7rplJk6IOS4jeiDveaJp+ihjOWbvuWDj2FscGhh5re35ZCILicsCisJJ2JhY2tlbmQuaW1hZ2VhbGxvY2FscGhhNTBwY3RncmV5X2ZhaWxlZCc6ICflm77lg4/lpITnkIblmajlh7rplJk6IOS4jeiDveWIhumFjeepuumXtOe7mWFscGhh6YCa6YGT5ZKMNTAl6IOM5pmv44CCJywKKwknYmFja2VuZC5pbWFnZWNvbG9yYWxsb2NhdGVhbHBoYV9mYWlsZWQnOiAn5Zu+5YOP5aSE55CG5Zmo5Ye66ZSZOiDkuI3og73liIbphY3nqbrpl7Tnu5nlvZPliY3lvanoibLlm77lg4/nmoRhbHBoYemAmumBk+OAgicsCisJJ2JhY2tlbmQuaW1hZ2Vyb3RhdGVfZmFpbGVkJzogJ+WbvuWDj+WkhOeQhuWZqOWHuumUmTogR0QgaW1hZ2Vyb3RhdGUoKSDlpLHotKUuJywKKwknYmFja2VuZC5pbWFnZWNvcHlyZXNhbXBsZWRfZmFpbGVkJzogJ+WbvuWDj+WkhOeQhuWZqOWHuumUmTogR0QgaW1hZ2Vjb3B5cmVzYW1wbGVkKCkg5aSx6LSlLiDlm77lg4/liIbovqjnjofvvJogJywgLyogeCAqIHkgKi8KKwknYmFja2VuZC5pbWFnZWNvcHlfZmFpbGVkJzogJ+WbvuWDj+WkhOeQhuWZqOWHuumUmTogR0QgaW1hZ2Vjb3B5KCkg5aSx6LSlLicsCisJJ2JhY2tlbmQuaW1hZ2VmbGlwX2ZhaWxlZCc6ICflm77lg4/lpITnkIblmajlh7rplJk6IOS4jeiDvee/u+i9rOWbvuWDjy4nLAorCSdiYWNrZW5kLmltYWdlanBlZ19mYWlsZWQnOiAn5Zu+5YOP5aSE55CG5Zmo5Ye66ZSZOiBHRCBpbWFnZWpwZWcoKSDlpLHotKUuJywKKwknYmFja2VuZC5pbWFnZXBuZ19mYWlsZWQnOiAn5Zu+5YOP5aSE55CG5Zmo5Ye66ZSZOiBHRCBpbWFnZXBuZygpIOWksei0pS4nLAorCSdiYWNrZW5kLmltYWdlZ2lmX2ZhaWxlZCc6ICflm77lg4/lpITnkIblmajlh7rplJk6IEdEIGltYWdlZ2lmKCkg5aSx6LSlLicsCisJJ2JhY2tlbmQuaW1hZ2VjcmVhdGVfZmFpbGVkJzogJ+WbvuWDj+WkhOeQhuWZqOWHuumUme+8mkdEIGltYWdlY3JlYXRlKCkg5aSx6LSlLicsCisJJ2JhY2tlbmQuY3Z0MnRydWVjb2xvcl9mYWlsZWQnOiAn6L2s5o2i55yf5b2p6Imy5aSx6LSl44CC5Zu+5YOP5YiG6L6o546HOiAnLCAvKiB4ICogeSAqLworCSdiYWNrZW5kLm5vX2ltYWdlaW5mbyc6ICfmjZ/lnY/nmoTlm77lg4/miJbogIXmlofku7bkuI3mmK/lm77lg48uJywKKwknYmFja2VuZC5pbWdfd2lsbF9ub3RfZml0JzogJ+acjeWKoeWZqOWHuumUmTog5YaF5a2Y5LiN5aSf77yb5pyA5L2O6KaB5rGCKOS8sOiuoSk6ICcsIC8qIFhYWCBNQnl0ZXMgKi8KKwknYmFja2VuZC51bnN1cHBvcnRlZF9pbWdmbXQnOiAn5LiN5pSv5oyB55qE5Zu+5YOP5qC85byPOiAnLCAgICAvKiBqcGVnL3BuZy9naWYvLi4uICovCisKKwkvKiBGVSAqLworCXVwbG9hZGVyOiB7CisJCXVua25vd246ICfmnKrnn6XplJnor68nLAorCQlzaXplTGltaXRNaW46ICfmt7vliqAgIjxlbT4ke25hbWV9PC9lbT4iICgke3NpemV9KeWksei0pSwg5paH5Lu25LiN6LazPHN0cm9uZz4ke3NpemVfbWlufTwvc3Ryb25nPiEnLAorCQlzaXplTGltaXRNYXg6ICfmt7vliqAgIjxlbT4ke25hbWV9PC9lbT4iICgke3NpemV9KeWksei0pSwg5paH5Lu26LaF6L+HPHN0cm9uZz4ke3NpemVfbWF4fTwvc3Ryb25nPiEnLAorCQltb2Rfc2VjdXJpdHk6ICfkuIrkvKDlmajmsqHmnInlj43lupTvvIzlvojlj6/og73mmK/lm6DkuLrigJxtb2Rfc2VjdXJpdHnigJ3mmK/lvIDlkK/nmoTlkIzml7blroPnmoTlhbbkuK3kuIDkuKrop4TliJnlj5bmtojkuobkuIrkvKDor7fmsYLjgILlpoLmnpzmgqjkuI3og73op6PpmaTigJxtb2Rfc2VjdXJpdHnigJ3vvIzor7fkvb/nlKjpnZ5mbGFzaOS4iuS8oOWZqOOAgicKKwl9LAorCisJZmxhc2g6IHsKKwkJaGlkZGVuOiAn5Li65LqG5L2/5LiK5Lyg5Zmo55Sf5pWI77yM5Y+W5raI5rWP6KeI5Zmo6Zi75q2i77yM54S25ZCO5Yi35pawICjop4FBZGJsb2NrKS4nLAorCQlkaXNhYmxlZDogJ+S4uuS6huS9v+S4iuS8oOWZqOeUn+aViCwg5Y+W5raI6Zi75q2iRmxhc2jvvIznhLblkI7liLfmlrAgKOingUZsYXNoYmxvY2spLicsCisJCWZsYXNoOiAn5LiK5Lyg5YmN6ZyA5a6J6KOF5aW9PGEgaHJlZj0iaHR0cDovL3d3dy5hZG9iZS5jb20vc2hvY2t3YXZlL2Rvd25sb2FkL2Rvd25sb2FkLmNnaT9QMV9Qcm9kX1ZlcnNpb249U2hvY2t3YXZlRmxhc2giPkFkb2JlIEZsYXNoPC9hPi4nCisJfSwKKworCXJlc2l6ZUltYWdlczogJ+e8qeWwj+Wkp+WwuuWvuOWbvuWDjycsCisKKwlzZXJpYWxpemU6ICfkv53lrZjkuLrnlLvlu4onLAorCWdhbGxlcnk6IHsKKwkJdGV4dDogJ+WbvueJh+aPj+i/sCcsCisJCXNhdmU6ICfkv53lrZgnLAorCQlyZW1vdmU6ICfku47nlLvlu4rnp7vpmaQnLAorCQlkcmFnOiAn5ouW5Yqo6Iez5q2k5Yib5bu655S75buKLi4uJworCX0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL1NvdXJjZS9GaWxlTWFuYWdlci5UaW55TUNFLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL1NvdXJjZS9GaWxlTWFuYWdlci5UaW55TUNFLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOTVlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvU291cmNlL0ZpbGVNYW5hZ2VyLlRpbnlNQ0UuanMKQEAgLTAsMCArMSw2NyBAQAorLyoKKy0tLQorCitkZXNjcmlwdGlvbjogTW9vVG9vbHMgRmlsZU1hbmFnZXIgZm9yIGludGVncmF0aW9uIHdpdGggW1RpbnlNQ0VdKGh0dHA6Ly90aW55bWNlLm1veGllY29kZS5jb20vKQorCithdXRob3JzOiBDaHJpc3RvcGggUG9qZXIgKEBjcG9qZXIpCisKK2xpY2Vuc2U6IE1JVC1zdHlsZSBsaWNlbnNlLgorCityZXF1aXJlczogW0NvcmUvKl0KKworcHJvdmlkZXM6IEZpbGVNYW5hZ2VyLlRpbnlNQ0UKKworVXNhZ2U6CisgIC0gUGFzcyB0aGlzIHRvIHRoZSAiZmlsZV9icm93c2VyX2NhbGxiYWNrIi1vcHRpb24gb2YgVGlueU1DRTogRmlsZU1hbmFnZXIuVGlueU1DRShmdW5jdGlvbigpeyByZXR1cm4ge0ZpbGVNYW5hZ2VyT3B0aW9uc307IH0pOworICAtIFNlZSB0aGUgRGVtbyBmb3IgYW4gZXhhbXBsZS4KKy4uLgorKi8KKworRmlsZU1hbmFnZXIuVGlueU1DRSA9IGZ1bmN0aW9uKG9wdGlvbnMpeworCS8qCisJICogZmllbGQ6IElkIG9mIHRoZSBlbGVtZW50IHRvIHNldCB2YWx1ZSBpbi4KKwkgKiB1cmw6IHZhbHVlIGN1cnJlbnRseSBzdG9yZWQgaW4gdGhlIGluZGljYXRlZCBlbGVtZW50CisJICogdHlwZTogVHlwZSBvZiBicm93c2VyIHRvIG9wZW4gaW1hZ2UvZmlsZS9mbGFzaDogJ2ZpbGUnIH4gcGFnZSBsaW5rcywgJ2ltYWdlJyB+IGluc2VydCBwaWN0dXJlLCAnbWVkaWEnIH4gaW5zZXJ0IG1lZGlhL21vdmllCisJICogd2luOiB3aW5kb3cgb2JqZWN0IHJlZmVyZW5jZQorCSAqLworCXJldHVybiBmdW5jdGlvbihmaWVsZCwgdXJsLCB0eXBlLCB3aW4peworCQl2YXIgbWFuYWdlcjsgICAgICAgICAgICAgICAgLy8ganNMaW50IHdhcm5pbmcgZml4CisJCW1hbmFnZXIgPSBuZXcgRmlsZU1hbmFnZXIoT2JqZWN0LmFwcGVuZCh7CisJCQlvbkNvbXBsZXRlOiBmdW5jdGlvbihwYXRoLCBmaWxlLCBtZ3IpIHsKKwkJCQlpZiAoIXdpbi5kb2N1bWVudCkKKwkJCQkJcmV0dXJuOworCQkJCS8vcGF0aCA9IG1hbmFnZXIuZXNjYXBlUkZDMzk4NihwYXRoKTsKKwkJCQl3aW4uZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmllbGQpLnZhbHVlID0gcGF0aDsKKwkJCQlpZiAod2luLkltYWdlRGlhbG9nKSB7CisJCQkJCXdpbi5JbWFnZURpYWxvZy5zaG93UHJldmlld0ltYWdlKHBhdGgsIDEpOworCQkJCX0KKwkJCQl0aGlzLmNvbnRhaW5lci5kZXN0cm95KCk7CisJCQl9CisJCX0sIG9wdGlvbnModHlwZSksCisJCXsKKwkJCXpJbmRleDogNDAwMDAwLAorCQkJc3R5bGVzOiB7CisJCQkJJ3dpZHRoJzogJzkwJScsCisJCQkJJ2hlaWdodCc6ICc5MCUnCisJCQl9CisJCX0pKTsKKwkJdmFyIHNyYyA9IHdpbi5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaWVsZCkudmFsdWU7CisKKwkJc3JjID0gZGVjb2RlVVJJKHNyYyk7CisKKwkJaWYgKHNyYy5sZW5ndGggPiAwKQorCQl7CisJCQkvL3NyYyA9IHRoaXMuZG9jdW1lbnRCYXNlVVJJLnRvQWJzb2x1dGUoc3JjKTsKKwkJfQorCQlpZiAoc3JjLm1hdGNoKC9eW2Etel0rOi9pKSkKKwkJeworCQkJLy8gc3RyaXAgb2ZmIHNjaGVtZSArIGF1dGhvcml0eSBzZWN0aW9uczoKKwkJCXNyYyA9IHNyYy5yZXBsYWNlKC9eW2Etel0rOihcL1wvPylbXlwvXSovaSwgJycpOworCQl9CisKKwkJLy8gcGFzcyBmdWxsIHBhdGggdG8gJ3ByZXNlbGVjdCc6IGJhY2tlbmQgd2lsbCB0YWtlIGNhcmUgb2YgaXQgZm9yIHVzCisJCW1hbmFnZXIuc2hvdyhudWxsLCBudWxsLCAoc3JjLmxlbmd0aCA+IDAgPyBzcmMgOiBudWxsKSk7CisJCXJldHVybiBtYW5hZ2VyOworCX07Cit9OworCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvU291cmNlL0ZpbGVNYW5hZ2VyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL1NvdXJjZS9GaWxlTWFuYWdlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGU2NzI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL1NvdXJjZS9GaWxlTWFuYWdlci5qcwpAQCAtMCwwICsxLDM5ODYgQEAKKy8qCistLS0KKworZGVzY3JpcHRpb246IEZpbGVNYW5hZ2VyCisKK2F1dGhvcnM6IENocmlzdG9waCBQb2plciAoQGNwb2plciksIEZhYmlhbiBWb2dlbHN0ZWxsZXIgKEBmcm96ZW1hbikKKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UKKworcmVxdWlyZXM6CisgIGNvcmUvMS4zLjI6ICcqJworICBtb3JlLzEuMy4yLjE6IFtSZXF1ZXN0LlF1ZXVlLCBBcnJheS5FeHRyYXMsIFN0cmluZy5RdWVyeVN0cmluZywgSGFzaCwgRWxlbWVudC5EZWxlZ2F0aW9uLCBFbGVtZW50Lk1lYXN1cmUsIEZ4LlNjcm9sbCwgRnguU21vb3RoU2Nyb2xsLCBEcmFnLCBEcmFnLk1vdmUsIEFzc2V0cywgVGlwcywgU2Nyb2xsZXIgXQorCitwcm92aWRlczogRmlsZW1hbmFnZXIKKworLi4uCisqLworCit2YXIgRmlsZU1hbmFnZXIgPSBuZXcgQ2xhc3MoeworCisJSW1wbGVtZW50czogW09wdGlvbnMsIEV2ZW50c10sCisKKwlSZXF1ZXN0OiBudWxsLAorCVJlcXVlc3RRdWV1ZTogbnVsbCwKKwlEaXJlY3Rvcnk6IG51bGwsCisJQ3VycmVudDogbnVsbCwKKwlJRDogbnVsbCwKKworCW9wdGlvbnM6IHsKKwkJLyoKKwkJICogb25Db21wbGV0ZTogZnVuY3Rpb24oICAgICAgICAgICAvLyBGaXJlZCB3aGVuIHRoZSAnU2VsZWN0JyBidXR0b24gaXMgY2xpY2tlZAorCQkgKiAgICAgICAgICAgICAgICAgICAgICBwYXRoLCAgICAgIC8vIFVSTGVuY29kZWQgYWJzb2x1dGUgVVJMIHBhdGggdG8gc2VsZWN0ZWQgZmlsZQorCQkgKiAgICAgICAgICAgICAgICAgICAgICBmaWxlLCAgICAgIC8vIHRoZSBmaWxlIHNwZWNzIG9iamVjdDogLm5hbWUsIC5wYXRoLCAuc2l6ZSwgLmRhdGUsIC5taW1lLCAuaWNvbiwgLmljb240OCwgLnRodW1iNDgsIC50aHVtYjI1MAorCQkgKiAgICAgICAgICAgICAgICAgICAgICBmbW9iaiAgICAgIC8vIHJlZmVyZW5jZSB0byB0aGUgRmlsZU1hbmFnZXIgaW5zdGFuY2Ugd2hpY2ggZmlyZWQgdGhlIGV2ZW50CisJCSAqICAgICAgICAgICAgICAgICAgICAgKQorCQkgKgorCQkgKiBvbk1vZGlmeTogZnVuY3Rpb24oICAgICAgICAgICAgIC8vIEZpcmVkIHdoZW4gZWl0aGVyIHRoZSAnUmVuYW1lJyBvciAnRGVsZXRlJyBpY29ucyBhcmUgY2xpY2tlZCBvciB3aGVuIGEgZmlsZSBpcyBkcmFnJmRyb3BwZWQuCisJCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWQgQUZURVIgdGhlIGFjdGlvbiBpcyBleGVjdXRlZC4KKwkJICogICAgICAgICAgICAgICAgICAgIGZpbGUsICAgICAgICAvLyBhIENMT05FIG9mIHRoZSBmaWxlIHNwZWNzIG9iamVjdDogLm5hbWUsIC5wYXRoLCAuc2l6ZSwgLmRhdGUsIC5taW1lLCAuaWNvbiwgLmljb240OCwgLnRodW1iNDgsIC50aHVtYjI1MAorCQkgKiAgICAgICAgICAgICAgICAgICAganNvbiwgICAgICAgIC8vIFRoZSBKU09OIGRhdGEgYXMgc2VudCBieSB0aGUgc2VydmVyIGZvciB0aGlzICdkZXN0cm95L3JlbmFtZS9tb3ZlL2NvcHknIHJlcXVlc3QKKwkJICogICAgICAgICAgICAgICAgICAgIG1vZGUsICAgICAgICAvLyBzdHJpbmcgc3BlY2lmeWluZyB0aGUgYWN0aW9uOiAnZGVzdHJveScsICdyZW5hbWUnLCAnbW92ZScsICdjb3B5JworCQkgKiAgICAgICAgICAgICAgICAgICAgZm1vYmogICAgICAgIC8vIHJlZmVyZW5jZSB0byB0aGUgRmlsZU1hbmFnZXIgaW5zdGFuY2Ugd2hpY2ggZmlyZWQgdGhlIGV2ZW50CisJCSAqICAgICAgICAgICAgICAgICAgICkKKwkJICoKKwkJICogb25TaG93OiBmdW5jdGlvbiggICAgICAgICAgICAgICAvLyBGaXJlZCBBRlRFUiB0aGUgZmlsZSBtYW5hZ2VyIGlzIHJlbmRlcmVkCisJCSAqICAgICAgICAgICAgICAgICAgZm1vYmogICAgICAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBGaWxlTWFuYWdlciBpbnN0YW5jZSB3aGljaCBmaXJlZCB0aGUgZXZlbnQKKwkJICogICAgICAgICAgICAgICAgICkKKwkJICoKKwkJICogb25IaWRlOiBmdW5jdGlvbiggICAgICAgICAgICAgICAvLyBGaXJlZCBBRlRFUiB0aGUgZmlsZSBtYW5hZ2VyIGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9NCisJCSAqICAgICAgICAgICAgICAgICAgZm1vYmogICAgICAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBGaWxlTWFuYWdlciBpbnN0YW5jZSB3aGljaCBmaXJlZCB0aGUgZXZlbnQKKwkJICogICAgICAgICAgICAgICAgICkKKwkJICoKKwkJICogb25TY3JvbGw6IGZ1bmN0aW9uKCAgICAgICAgICAgICAvLyBDYXNjYWRlIG9mIHRoZSB3aW5kb3cgc2Nyb2xsIGV2ZW50CisJCSAqICAgICAgICAgICAgICAgICAgICBlLCAgICAgICAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBldmVudCBvYmplY3QgKGFyZ3VtZW50IHBhc3NlZCBmcm9tIHRoZSB3aW5kb3cuc2Nyb2xsIGV2ZW50KQorCQkgKiAgICAgICAgICAgICAgICAgICAgZm1vYmogICAgICAgIC8vIHJlZmVyZW5jZSB0byB0aGUgRmlsZU1hbmFnZXIgaW5zdGFuY2Ugd2hpY2ggZmlyZWQgdGhlIGV2ZW50CisJCSAqICAgICAgICAgICAgICAgICAgICkKKwkJICoKKwkJICogb25QcmV2aWV3OiBmdW5jdGlvbiggICAgICAgICAgICAvLyBGaXJlZCB3aGVuIHRoZSBwcmV2aWV3IHRodW1ibmFpbCBpbWFnZSBpcyBjbGlja2VkCisJCSAqICAgICAgICAgICAgICAgICAgICAgc3JjLCAgICAgICAgLy8gdGhpcy5nZXQoJ3NyYycpID8/PworCQkgKiAgICAgICAgICAgICAgICAgICAgIGZtb2JqLCAgICAgIC8vIHJlZmVyZW5jZSB0byB0aGUgRmlsZU1hbmFnZXIgaW5zdGFuY2Ugd2hpY2ggZmlyZWQgdGhlIGV2ZW50CisJCSAqICAgICAgICAgICAgICAgICAgICAgZWwgICAgICAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSAndGhpcycgfiB0aGUgZWxlbWVudCB3aGljaCB3YXMgY2xpY2tlZAorCQkgKiAgICAgICAgICAgICAgICAgICAgKQorCQkgKgorCQkgKiBvbkRldGFpbHM6IGZ1bmN0aW9uKCAgICAgICAgICAgIC8vIEZpcmVkIHdoZW4gYW4gaXRlbSBpcyBwaWNrZWQgZnJvbSB0aGUgZmlsZXMgbGlzdCB0byBiZSBwcmV2aWV3ZWQKKwkJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZCBBRlRFUiB0aGUgc2VydmVyIHJlcXVlc3QgaXMgY29tcGxldGVkIGFuZCBCRUZPUkUgdGhlIHByZXZpZXcgaXMgcmVuZGVyZWQuCisJCSAqICAgICAgICAgICAgICAgICAgICAganNvbiwgICAgICAgLy8gVGhlIEpTT04gZGF0YSBhcyBzZW50IGJ5IHRoZSBzZXJ2ZXIgZm9yIHRoaXMgJ2RldGFpbCcgcmVxdWVzdAorCQkgKiAgICAgICAgICAgICAgICAgICAgIGZtb2JqICAgICAgIC8vIHJlZmVyZW5jZSB0byB0aGUgRmlsZU1hbmFnZXIgaW5zdGFuY2Ugd2hpY2ggZmlyZWQgdGhlIGV2ZW50CisJCSAqICAgICAgICAgICAgICAgICAgICApCisJCSAqCisJCSAqIG9uSGlkZVByZXZpZXc6IGZ1bmN0aW9uKCAgICAgICAgLy8gRmlyZWQgd2hlbiB0aGUgcHJldmlldyBpcyBoaWRkZW4gKGUuZy4gd2hlbiB1cGxvYWRpbmcpCisJCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWQgQkVGT1JFIHRoZSBwcmV2aWV3IGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9NLgorCQkgKiAgICAgICAgICAgICAgICAgICAgICAgICBmbW9iaiAgIC8vIHJlZmVyZW5jZSB0byB0aGUgRmlsZU1hbmFnZXIgaW5zdGFuY2Ugd2hpY2ggZmlyZWQgdGhlIGV2ZW50CisJCSAqICAgICAgICAgICAgICAgICAgICAgICAgKQorCQkgKi8KKwkJZGlyZWN0b3J5OiAnJywgICAgICAgICAgICAgICAgICAgIC8vIChzdHJpbmcpIHRoZSBkaXJlY3RvcnkgKHJlbGF0aXZlIHBhdGgpIHdoaWNoIHNob3VsZCBiZSBsb2FkZWQgb24gc3RhcnR1cCAoc2hvdykuCisJCXVybDogbnVsbCwKKwkJYXNzZXRCYXNlUGF0aDogbnVsbCwKKwkJbGFuZ3VhZ2U6ICdlbicsCisJCXNlbGVjdGFibGU6IGZhbHNlLAorCQlkZXN0cm95OiBmYWxzZSwKKwkJcmVuYW1lOiBmYWxzZSwKKwkJbW92ZV9vcl9jb3B5OiBmYWxzZSwKKwkJZG93bmxvYWQ6IGZhbHNlLAorCQljcmVhdGVGb2xkZXJzOiBmYWxzZSwKKwkJZmlsdGVyOiAnJywKKwkJbGlzdFR5cGU6ICd0aHVtYicsCQkJCQkJCQkvLyB0aGUgc3RhbmRhcmQgbGlzdCB0eXBlIGNhbiBiZSAnbGlzdCcgb3IgJ3RodW1iJworICAgIGtleWJvYXJkTmF2aWdhdGlvbjogdHJ1ZSwgICAgICAgICAvLyBzZXQgdG8gZmFsc2UgdG8gdHVybiBvZmYga2V5Ym9hcmQgbmF2aWdhdGlvbiAodGFiLCB1cC9kbi9wYWdldXAvcGFnZWRuIGV0YykKKwkJZGV0YWlsSW5mb01vZGU6ICcnLCAgICAgICAgICAgICAgIC8vIChzdHJpbmcpIHdoZXRoZXIgeW91IHdhbnQgdG8gcmVjZWl2ZSBleHRyYSBtZXRhZGF0YSBvbiBzZWxlY3QvZXRjLiBhbmQvb3IgdmlldyB0aGlzIG1ldGFkYXRhIGluIHRoZSBwcmV2aWV3IHBhbmUgKG1vZGVzOiAnJywgJyttZXRhSFRNTCcsICcrbWV0YUpTT04nLiBNb2RlcyBtYXkgYmUgY29tYmluZWQpCisgICAgcHJldmlld0hhbmRsZXJzOiB7fSwgICAgICAgICAgICAgIC8vIFtwYXJ0aWFsXSBtaW1ldHlwZTogZnVuY3Rpb24sIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHByZXZpZXdBcmVhIChET00gZWxlbWVudCwgcHV0IHByZXZpZXcgaW4gaGVyZSksIGZpbGVEZXRhaWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVnIHsgJ2F1ZGlvJzogZnVuY3Rpb24ocHJldmlld0FyZWEsZmlsZURldGFpbHMpeyBwcmV2aWV3QXJlYS5hZG9wdChuZXcgRWxlbWVudCgnZGl2Jywge3RleHQ6J0hlbGxvIFdvcmxkJ30pO30gfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkJZGVsaXZlclBhdGhBc0xlZ2FsVVJMOiBmYWxzZSwgICAgIC8vIChib29sZWFuKSBUUlVFOiBkZWxpdmVyICdsZWdhbCBVUkwnIHBhdGhzLCBpLmUuICdkaXJlY3RvcnknLXJvb3RlZCwgRkFMU0U6IGRlbGl2ZXIgYWJzb2x1dGUgVVJJIHBhdGhzLgorCQloaWRlT25DbGljazogZmFsc2UsCisJCWhpZGVDbG9zZTogZmFsc2UsCisJCWhpZGVPdmVybGF5OiBmYWxzZSwKKwkJaGlkZU9uRGVsZXRlOiBmYWxzZSwKKwkJaGlkZU9uU2VsZWN0OiB0cnVlLCAgICAgICAgICAgICAgIC8vIChib29sZWFuKS4gRGVmYXVsdCB0byB0cnVlLiBJZiBzZXQgdG8gZmFsc2UsIGl0IGxlYXZlcnMgdGhlIEZNIG9wZW4gYWZ0ZXIgYSBwaWN0dXJlIHNlbGVjdC4KKyAgICBzaG93RGlyR2FsbGVyeTogdHJ1ZSwKKwkJdGh1bWJTaXplNERpckdhbGxlcnk6IDEyMCwgICAgICAgIC8vIFRvIHNldCB0aGUgdGh1bWIgZ2FsbGVyeSBjb250YWluZXIgc2l6ZSBmb3IgZWFjaCB0aHVtYiAoZGlyLWdhbC10aHVtYi1iZyk7IGRlcGVuZGluZyBvbiBzaXplLCBpdCB3aWxsIHBpY2sgZWl0aGVyIHRoZSBzbWFsbCBvciBsYXJnZSB0aHVtYm5haWwgcHJvdmlkZWQgYnkgdGhlIGJhY2tlbmQgYW5kIHNjYWxlIHRoYXQgb25lCisJCXpJbmRleDogMTAwMCwKKwkJc3R5bGVzOiB7fSwKKwkJbGlzdFBhZ2luYXRpb25TaXplOiAxMDAsICAgICAgICAgIC8vIGFkZCBwYWdpbmF0aW9uIHBlciBOIGl0ZW1zIGZvciBodWdlIGRpcmVjdG9yaWVzIChzcGVlZCB1cCBpbnRlcmFjdGlvbikKKwkJbGlzdFBhZ2luYXRpb25BdmdXYWl0VGltZTogMjAwMCwgIC8vIGFkYXB0aXZlIHBhZ2luYXRpb246IHN0cml2ZSB0bywgb24gYXZlcmFnZSwgbm90IHNwZW5kIG1vcmUgdGhhbiB0aGlzIG9uIHJlbmRlcmluZyBhIGRpcmVjdG9yeSBjaHVuaworICAgIGxpc3RNYXhTdWdnZXN0ZWREaXJTaXplRm9yVGh1bWJuYWlsczogMzAsIC8vIGlmIGEgZGlyZWN0b3J5IGxvYWQgaGFzIG1vcmUgdGhhbiB0aGlzIG1hbnkgaXRlbXMgKGRpcnMrZmlsZXMpLCBhbmQgdGhlIHZpZXcgbW9kZSBpcyBjdXJyZW50bHkgdGh1bWJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQgaXMgZHJvcHBlZCBiYWNrIHRvIHRoZSBsaXN0aW5nIHZpZXcgbW9kZSwgdGhlIHVzZXIgY2FuIHN0aWxsIHN3aXRjaCBiYWNrLCBhdCB0aGVpciBvd24gcmlzayEKKwkJc3RhbmRhbG9uZTogdHJ1ZSwgICAgICAgICAgICAgICAgIC8vIChib29sZWFuKS4gRGVmYXVsdCB0byB0cnVlLiBJZiBzZXQgdG8gZmFsc2UsIHJldHVybnMgdGhlIEZpbGVtYW5hZ2VyIHdpdGhvdXQgZW5jbG9zaW5nIHdpbmRvdyAvIG92ZXJsYXkuCisJCXBhcmVudENvbnRhaW5lcjogbnVsbCwgICAgICAgICAgICAvLyAoc3RyaW5nKS4gSUQgb2YgdGhlIHBhcmVudCBjb250YWluZXIuIElmIG5vdCBzZXQsIEZNIHdpbGwgY29uc2lkZXIgaXRzIGZpcnN0IGNvbnRhaW5lciBwYXJlbnQgZm9yIGZpdFNpemVzKCk7CisJCXByb3BhZ2F0ZURhdGE6IHt9LCAgICAgICAgICAgICAgICAvLyBleHRyYSBxdWVyeSBwYXJhbWV0ZXJzIHNlbnQgd2l0aCBldmVyeSByZXF1ZXN0IHRvIHRoZSBiYWNrZW5kCisJCXZlcmJvc2U6IGZhbHNlLAorCQlta1NlcnZlclJlcXVlc3RVUkw6IG51bGwgICAgICAgICAgLy8gKGZ1bmN0aW9uKSBzcGVjaWZ5IHlvdXIgb3duIGFsdGVybmF0aXZlIFVSTC9QT1NUIGRhdGEgY29uc3RydWN0b3Igd2hlbiB5b3UgdXNlIGEgZnJhbWV3b3JrL3N5c3RlbSB3aGljaCByZXF1aXJlcyBzdWNoLiAgIGZ1bmN0aW9uKFtvYmplY3RdIGZtX29iaiwgW3N0cmluZ10gcmVxdWVzdF9jb2RlLCBbYXNzb2MuYXJyYXldIHBvc3RfZGF0YSkKKwl9LAorCisJLyoKKwkgKiBob29rIGl0ZW1zIGFyZSBvYmplY3RzIChraW5kYSBhc3NvY2lhdGl2ZSBhcnJheXMsIGFzIHRoZXkgYXJlIHVzZWQgaGVyZSksIHdoZXJlIGVhY2gKKwkgKiBrZXkgaXRlbSBpcyBjYWxsZWQgd2hlbiB0aGUgaG9vayBpcyBpbnZva2VkLgorCSAqLworCWhvb2tzOiB7CisJCXNob3c6IHt9LCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnZva2VkIGFmdGVyIHRoZSAnc2hvdycgZXZlbnQKKwkJY2xlYW51cDoge30sICAgICAgICAgICAgICAgICAgICAgIC8vIGludm9rZWQgYmVmb3JlIHRoZSAnaGlkZScgZXZlbnQKKwkJY2xlYW51cFByZXZpZXc6IHt9LCAgICAgICAgICAgICAgIC8vIGludm9rZWQgYmVmb3JlIHRoZSAnaGlkZVByZXZpZXcnIGV2ZW50CisJCWZpbGw6IHt9ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnZva2VkIGFmdGVyIHRoZSBmaWxsIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkCisJfSwKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKwkJdGhpcy5vcHRpb25zLm1rU2VydmVyUmVxdWVzdFVSTCA9IHRoaXMubWtTZXJ2ZXJSZXF1ZXN0VVJMOworCisJCXRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTsKKyAgICAKKyAgICBpZih0eXBlb2YgdGhpcy5vcHRpb25zLnByZXZpZXdIYW5kbGVycy5hdWRpbyA9PT0gJ3VuZGVmaW5lZCcpCisgICAgeworICAgICAgdGhpcy5vcHRpb25zLnByZXZpZXdIYW5kbGVycy5hdWRpbyA9IHRoaXMuYXVkaW9QcmV2aWV3LmJpbmQodGhpcyk7CisgICAgfQorICAgIAorCQl0aGlzLmRpYWcudmVyYm9zZSA9IHRoaXMub3B0aW9ucy52ZXJib3NlOworCQl0aGlzLklEID0gU3RyaW5nLnVuaXF1ZUlEKCk7CisJCXRoaXMuZHJvcHBhYmxlcyA9IFtdOworCQl0aGlzLmFzc2V0QmFzZVBhdGggPSB0aGlzLm9wdGlvbnMuYXNzZXRCYXNlUGF0aC5yZXBsYWNlKC8oXC98XFwpKiQvLCAnLycpOworCQl0aGlzLnJvb3QgPSBudWxsOworCQl0aGlzLkN1cnJlbnREaXIgPSBudWxsOworCQl0aGlzLmxpc3RUeXBlID0gdGhpcy5vcHRpb25zLmxpc3RUeXBlOworCQl0aGlzLmRpYWxvZ09wZW4gPSBmYWxzZTsKKwkJdGhpcy5zdG9yZUhpc3RvcnkgPSBmYWxzZTsKKwkJdGhpcy5mbVNob3duID0gZmFsc2U7CisJCXRoaXMuZHJvcF9wZW5kaW5nID0gMDsgICAgICAgICAgIC8vIHN0YXRlOiAwOiBubyBkcm9wIHBlbmRpbmcsIDE6IGNvcHkgcGVuZGluZywgMjogbW92ZSBwZW5kaW5nCisJCXRoaXMudmlld19maWxsX3RpbWVyID0gbnVsbDsgICAgIC8vIHRpbWVyIHJlZmVyZW5jZSB3aGVuIGZpbGwoKSBpcyB3b3JraW5nIGNodW5rLWJ5LWNodW5rLgorCQl0aGlzLnZpZXdfZmlsbF9zdGFydGluZGV4ID0gMDsgICAvLyBvZmZzZXQgaW50byB0aGUgdmlldyBKU09OIGFycmF5OiB3aGljaCBwYXJ0IG9mIHRoZSBlbnRpcmUgdmlldyBhcmUgd2UgY3VycmVudGx5IHdhdGNoaW5nPworCQl0aGlzLnZpZXdfZmlsbF9qc29uID0gbnVsbDsgICAgICAvLyB0aGUgbGF0ZXN0IEpTT04gYXJyYXkgZGVzY3JpYmluZyB0aGUgZW50aXJlIGxpc3Q7IHVzZWQgd2l0aCBwYWdpbmF0aW9uIHRvIGhvcCB0aHJvdWdoIGh1Z2UgZGlycyB3aXRob3V0IHJlcGVhdGVkbHkgY29uc3VsdGluZyB0aGUgc2VydmVyLgorCQl0aGlzLmxpc3RQYWdpbmF0aW9uTGFzdFNpemUgPSB0aGlzLm9wdGlvbnMubGlzdFBhZ2luYXRpb25TaXplOworCQl0aGlzLlJlcXVlc3QgPSBudWxsOworCQl0aGlzLmRvd25sb2FkSWZyYW1lID0gbnVsbDsKKwkJdGhpcy5kb3dubG9hZEZvcm0gPSBudWxsOworCQl0aGlzLmRyYWdfaXNfYWN0aXZlID0gZmFsc2U7CisJCXRoaXMuY3RybF9rZXlfcHJlc3NlZCA9IGZhbHNlOworCQl0aGlzLnBlbmRpbmdfZXJyb3JfZGlhbG9nID0gbnVsbDsKKwkJLy8gdGltZXIgZm9yIGRpci1nYWxsZXJ5IGNsaWNrIC8gZGJsY2xpY2sgZXZlbnRzOgorCQl0aGlzLmRpcl9nYWxsZXJ5X2NsaWNrX3RpbWVyID0gbnVsbDsKKworCQl2YXIgZGJnX2NudCA9IDA7CisKKwkJdGhpcy5SZXF1ZXN0UXVldWUgPSBuZXcgUmVxdWVzdC5RdWV1ZSh7CisJCQljb25jdXJyZW50OiAzLCAgICAgICAgICAgICAgLy8gMyAtLT4gNzUlIG1heCBsb2FkIG9uIGEgcXVhZCBjb3JlIHNlcnZlcgorCQkJYXV0b0FkdmFuY2U6IHRydWUsCisJCQlzdG9wT25GYWlsdXJlOiBmYWxzZSwKKworCQkJb25SZXF1ZXN0OiAoZnVuY3Rpb24oKXsKKwkJCQkvL3RoaXMuZGlhZy5sb2coJ3JlcXVlc3QgcXVldWU6IG9uUmVxdWVzdDogJywgYXJndW1lbnRzKTsKKwkJCX0pLmJpbmQodGhpcyksCisKKwkJCW9uQ29tcGxldGU6IChmdW5jdGlvbihuYW1lKXsKKwkJCQkvL3RoaXMuZGlhZy5sb2coJ3JlcXVlc3QgcXVldWU6IG9uQ29tcGxldGU6ICcsIGFyZ3VtZW50cyk7CisKKwkJCQkvLyBjbGVhbiBvdXQgdGhlIGl0ZW0gZnJvbSB0aGUgcXVldWU7IGRvZXNuJ3Qgc2VlbSB0byBoYXBwZW4gYXV0b21hdGljYWxseSA6LSgKKwkJCQl2YXIgY250ID0gMDsKKwkJCQlPYmplY3QuZWFjaCh0aGlzLlJlcXVlc3RRdWV1ZS5yZXF1ZXN0cywgZnVuY3Rpb24oKSB7CisJCQkJCWNudCsrOworCQkJCX0pOworCQkJCS8vIGN1dCBkb3duIG9uIHRoZSBudW1iZXIgb2YgcmVwb3J0czoKKwkJCQlpZiAoTWF0aC5hYnMoY250IC0gZGJnX2NudCkgPj0gMjUpCisJCQkJeworCQkJCQl0aGlzLmRpYWcubG9nKCdyZXF1ZXN0IHF1ZXVlOiBuYW1lIGNvdW50czogJywgY250LCAnLCBxdWV1ZSBsZW5ndGg6ICcsIHRoaXMuUmVxdWVzdFF1ZXVlLnF1ZXVlLmxlbmd0aCk7CisJCQkJCWRiZ19jbnQgPSBjbnQ7CisJCQkJfQorCisJCQl9KS5iaW5kKHRoaXMpLAorCisJCQlvbkNhbmNlbDogKGZ1bmN0aW9uKCl7CisJCQkJdGhpcy5kaWFnLmxvZygncmVxdWVzdCBxdWV1ZTogb25DYW5jZWw6ICcsIGFyZ3VtZW50cyk7CisJCQl9KS5iaW5kKHRoaXMpLAorCisJCQlvblN1Y2Nlc3M6IChmdW5jdGlvbigpeworCQkJCS8vdGhpcy5kaWFnLmxvZygncmVxdWVzdCBxdWV1ZTogb25TdWNjZXNzOiAnLCBhcmd1bWVudHMpOworCQkJfSkuYmluZCh0aGlzKSwKKworCQkJb25GYWlsdXJlOiAoZnVuY3Rpb24obmFtZSl7CisJCQkJdGhpcy5kaWFnLmxvZygncmVxdWVzdCBxdWV1ZTogb25GYWlsdXJlOiAnLCBhcmd1bWVudHMpOworCQkJfSkuYmluZCh0aGlzKSwKKworCQkJb25FeGNlcHRpb246IChmdW5jdGlvbihuYW1lKXsKKwkJCQl0aGlzLmRpYWcubG9nKCdyZXF1ZXN0IHF1ZXVlOiBvbkV4Y2VwdGlvbjogJywgYXJndW1lbnRzKTsKKwkJCX0pLmJpbmQodGhpcykKKworCQl9KTsKKworCQkvLyBhZGQgYSBzcGVjaWFsIGN1c3RvbSByb3V0aW5lIHRvIHRoZSBxdWV1ZSBvYmplY3Q6IHdlIHdhbnQgdG8gYmUgYWJsZSB0byBjbGVhciBQQVJUIE9GIHRoZSBxdWV1ZSEKKwkJdGhpcy5SZXF1ZXN0UXVldWUuY2FuY2VsX2J1bGsgPSAoZnVuY3Rpb24obWFya2VyKQorCQl7CisJCQlPYmplY3QuZWFjaCh0aGlzLnJlcXVlc3RzLCBmdW5jdGlvbihxLCBuYW1lKQorCQkJeworCQkJCXZhciBuID0gbmFtZS5zcGxpdCgnOicpOworCQkJCWlmIChuWzBdID09PSBtYXJrZXIpCisJCQkJeworCQkJCQkvLyBtYXRjaCEgcmV2ZXJ0IGJ5IHJlbW92aW5nIHRoZSByZXF1ZXN0IChhbmQgY2FuY2VsbGluZyBpdCEpCisJCQkJCXRoaXMuY2FuY2VsKG5hbWUpOworCQkJCQl0aGlzLnJlbW92ZVJlcXVlc3QobmFtZSk7CisKKwkJCQkJdGhpcy5jbGVhcihuYW1lKTsgICAgICAgICAgIC8vIGVlaywgYSBmdWxsIHRhYmxlIHNjYW4hIHllY2guCisJCQkJCWRlbGV0ZSB0aGlzLnJlcXVlc3RzW25hbWVdOworCQkJCQlkZWxldGUgdGhpcy5yZXFCaW5kZXJzW25hbWVdOworCQkJCX0KKwkJCX0sIHRoaXMpOworCisJCQkvLyBub3cgdGhhdCB3ZSBoYXZlIGNsZWFyZWQgb3V0IGFsbCB0aG9zZSByZXF1ZXN0cywgc29tZSBvZiB3aGljaCBtYXkgaGF2ZSBiZWVuIHJ1bm5pbmcgYXQgdGhlIHRpbWUsIHdlIG5lZWQgdG8gcmVzdW1lIHRoZSBsb2FkaW5nOgorCQkJdGhpcy5yZXN1bWUoKTsKKworCQl9KS5iaW5kKHRoaXMuUmVxdWVzdFF1ZXVlKTsKKworCQl0aGlzLmxhbmd1YWdlID0gT2JqZWN0LmNsb25lKEZpbGVNYW5hZ2VyLkxhbmd1YWdlLmVuKTsKKwkJaWYgKHRoaXMub3B0aW9ucy5sYW5ndWFnZSAhPT0gJ2VuJykgeworCQkJdGhpcy5sYW5ndWFnZSA9IE9iamVjdC5tZXJnZSh0aGlzLmxhbmd1YWdlLCBGaWxlTWFuYWdlci5MYW5ndWFnZVt0aGlzLm9wdGlvbnMubGFuZ3VhZ2VdKTsKKwkJfQorCisvLyBQYXJ0aWt1bGUKKwkJaWYgKCF0aGlzLm9wdGlvbnMuc3RhbmRhbG9uZSkKKwkJeworCQkJdGhpcy5vcHRpb25zLmhpZGVPdmVybGF5ID0gdHJ1ZTsKKwkJCXRoaXMub3B0aW9ucy5oaWRlQ2xvc2UgPSB0cnVlOworCQl9CisvLyAvUGFydGlrdWxlCisKKwkJdGhpcy5jb250YWluZXIgPSBuZXcgRWxlbWVudCgnZGl2JywgeworCQkJJ2NsYXNzJzogJ2ZpbGVtYW5hZ2VyLWNvbnRhaW5lcicgKyAoQnJvd3Nlci5vcGVyYSA/ICcgZmlsZW1hbmFnZXItZW5naW5lLXByZXN0bycgOiAnJykgKyAoQnJvd3Nlci5pZSA/ICcgZmlsZW1hbmFnZXItZW5naW5lLXRyaWRlbnQnIDogJycpICsgKEJyb3dzZXIuaWU4ID8gJzQnIDogJycpICsgKEJyb3dzZXIuaWU5ID8gJzUnIDogJycpLAorCQkJc3R5bGVzOgorCQkJeworCQkJCSd6LWluZGV4JzogdGhpcy5vcHRpb25zLnpJbmRleAorCQkJfQorCQl9KTsKKwkJdGhpcy5maWxlbWFuYWdlciA9IG5ldyBFbGVtZW50KCdkaXYnLCB7CisJCQknY2xhc3MnOiAnZmlsZW1hbmFnZXInLAorCQkJc3R5bGVzOiBPYmplY3QuYXBwZW5kKHt9LAorCQkJdGhpcy5vcHRpb25zLnN0eWxlcywKKwkJCXsKKwkJCQknei1pbmRleCc6IHRoaXMub3B0aW9ucy56SW5kZXggKyAxCisJCQl9KQorCQl9KS5pbmplY3QodGhpcy5jb250YWluZXIpOworCQl0aGlzLmhlYWRlciA9IG5ldyBFbGVtZW50KCdkaXYnLCB7CisJCQknY2xhc3MnOiAnZmlsZW1hbmFnZXItaGVhZGVyJyAvKiAsCisJCQlzdHlsZXM6CisJCQl7CisJCQkJJ3otaW5kZXgnOiB0aGlzLm9wdGlvbnMuekluZGV4ICsgMworCQkJfSAqLworCQl9KS5pbmplY3QodGhpcy5maWxlbWFuYWdlcik7CisJCXRoaXMubWVudSA9IG5ldyBFbGVtZW50KCdkaXYnLCB7CisJCQknY2xhc3MnOiAnZmlsZW1hbmFnZXItbWVudScgLyogLAorCQkJc3R5bGVzOgorCQkJeworCQkJCSd6LWluZGV4JzogdGhpcy5vcHRpb25zLnpJbmRleCArIDIKKwkJCX0gKi8KKwkJfSkuaW5qZWN0KHRoaXMuZmlsZW1hbmFnZXIpOworCQl0aGlzLmxvYWRlciA9IG5ldyBFbGVtZW50KCdkaXYnLCB7J2NsYXNzJzogJ2xvYWRlcicsIG9wYWNpdHk6IDAsIHR3ZWVuOiB7ZHVyYXRpb246ICdzaG9ydCd9fSkuaW5qZWN0KHRoaXMuaGVhZGVyKTsKKwkJdGhpcy5wcmV2aWV3TG9hZGVyID0gbmV3IEVsZW1lbnQoJ2RpdicsIHsnY2xhc3MnOiAnbG9hZGVyJywgb3BhY2l0eTogMCwgdHdlZW46IHtkdXJhdGlvbjogJ3Nob3J0J319KTsKKwkJdGhpcy5icm93c2VyTG9hZGVyID0gbmV3IEVsZW1lbnQoJ2RpdicsIHsnY2xhc3MnOiAnbG9hZGVyJywgb3BhY2l0eTogMCwgdHdlZW46IHtkdXJhdGlvbjogJ3Nob3J0J319KTsKKwkJLy8gc3dpdGNoIHRoZSBwYXRoLCBmcm9tIGNsaWNrYWJsZSB0byBpbnB1dCB0ZXh0CisJCXRoaXMuY2xpY2thYmxlUGF0aCA9IG5ldyBFbGVtZW50KCdzcGFuJywgeydjbGFzcyc6ICdmaWxlbWFuYWdlci1kaXInfSk7CisJCXRoaXMuc2VsZWN0YWJsZVBhdGggPSBuZXcgRWxlbWVudCgnaW5wdXQnLHsndHlwZSc6ICd0ZXh0JywgJ2NsYXNzJzogJ2ZpbGVtYW5hZ2VyLWRpcicsICdyZWFkb25seSc6ICdyZWFkb25seSd9KTsKKwkJdGhpcy5wYXRoVGl0bGUgPSBuZXcgRWxlbWVudCgnYScsIHtocmVmOicjJywnY2xhc3MnOiAnZmlsZW1hbmFnZXItZGlyLXRpdGxlJyx0ZXh0OiB0aGlzLmxhbmd1YWdlLmRpcn0pLmFkZEV2ZW50KCdjbGljaycsKGZ1bmN0aW9uKGUpIHsKKwkJCXRoaXMuZGlhZy5sb2coJ3BhdGhUaXRsZS1jbGljayBldmVudDogJywgZSwgJyBAICcsIGUudGFyZ2V0Lm91dGVySFRNTCk7CisJCQllLnN0b3AoKTsKKwkJCWlmICh0aGlzLmhlYWRlci5nZXRFbGVtZW50KCdzcGFuLmZpbGVtYW5hZ2VyLWRpcicpICE9PSBudWxsKSB7CisJCQkJdGhpcy5zZWxlY3RhYmxlUGF0aC5zZXRTdHlsZSgnd2lkdGgnLCh0aGlzLmhlYWRlci5nZXRTaXplKCkueCAtIHRoaXMucGF0aFRpdGxlLmdldFNpemUoKS54IC0gNTUpKTsKKwkJCQl0aGlzLnNlbGVjdGFibGVQYXRoLnJlcGxhY2VzKHRoaXMuY2xpY2thYmxlUGF0aCk7CisJCQl9CisJCQllbHNlIHsKKwkJCQl0aGlzLmNsaWNrYWJsZVBhdGgucmVwbGFjZXModGhpcy5zZWxlY3RhYmxlUGF0aCk7CisJCQl9CisJCX0pLmJpbmQodGhpcykpOworCQl0aGlzLmhlYWRlci5hZG9wdCh0aGlzLnBhdGhUaXRsZSx0aGlzLmNsaWNrYWJsZVBhdGgpOworCisvLyBQYXJ0aWt1bGUKKy8vIEJlY2F1c2UgdGhlIGhlYWRlciBpcyBwb3NpdGlvbmVkIC0zMHB4IGJlZm9yZSB0aGUgY29udGFpbmVyLCB3ZSBoaWRlIGl0IGZvciB0aGUgbW9tZW50IGlmIHRoZSBGTSBpc24ndCBzdGFuZGFsb25lLgorLy8gTmVlZCB0byB0aGluayBhYm91dCBhIGJldHRlciBpbnRlZ3JhdGlvbgorCQlpZiAoIXRoaXMub3B0aW9ucy5zdGFuZGFsb25lKQorCQl7CisJCQl0aGlzLmhlYWRlci5oaWRlKCk7CisJCQl0aGlzLmZpbGVtYW5hZ2VyLnNldFN0eWxlKCd3aWR0aCcsICcxMDAlJyk7CisJCX0KKy8vIC9QYXJ0aWt1bGUKKworCQl2YXIgc2VsZiA9IHRoaXM7CisKKwkJdGhpcy5icm93c2VyY29udGFpbmVyID0gbmV3IEVsZW1lbnQoJ2RpdicseydjbGFzcyc6ICdmaWxlbWFuYWdlci1icm93c2VyY29udGFpbmVyJ30pLmluamVjdCh0aGlzLmZpbGVtYW5hZ2VyKTsKKwkJdGhpcy5icm93c2VyaGVhZGVyID0gbmV3IEVsZW1lbnQoJ2RpdicseydjbGFzcyc6ICdmaWxlbWFuYWdlci1icm93c2VyaGVhZGVyJ30pLmluamVjdCh0aGlzLmJyb3dzZXJjb250YWluZXIpOworCQl0aGlzLmJyb3dzZXJoZWFkZXIuYWRvcHQodGhpcy5icm93c2VyTG9hZGVyKTsKKwkJdGhpcy5icm93c2VyU2Nyb2xsID0gbmV3IEVsZW1lbnQoJ2RpdicsIHsnY2xhc3MnOiAnZmlsZW1hbmFnZXItYnJvd3NlcnNjcm9sbCd9KS5pbmplY3QodGhpcy5icm93c2VyY29udGFpbmVyKS5hZGRFdmVudHMoeworCQkJJ21vdXNlb3Zlcic6IChmdW5jdGlvbihlKSB7CisJCQkJCS8vdGhpcy5kaWFnLmxvZygnbW91c2VvdmVyOiAnLCBlKTsKKworCQkJCQkvLyBzeW5jIG1vdXNlIGFuZCBrZXlib2FyZC1kcml2ZW4gYnJvd3Npbmc6IHRoZSBrZXlib2FyZCByZXF1aXJlcyB0aGF0IHdlIGtlZXAgdHJhY2sgb2YgdGhlIGhvdmVyZWQgaXRlbSwKKwkJCQkJLy8gc28gd2UgY2Fubm90IHNpbXBseSBsZWF2ZSBpdCB0byBhIDpob3ZlciBDU1Mgc3R5bGUuIEluc3RlYWQsIHdlIGZpbmQgb3V0IHdoaWNoIGVsZW1lbnQgaXMgY3VycmVudGx5CisJCQkJCS8vIGhvdmVyZWQ6CisJCQkJCXZhciByb3cgPSBudWxsOworCQkJCQlpZiAoZS50YXJnZXQpCisJCQkJCXsKKwkJCQkJCXJvdyA9IChlLnRhcmdldC5oYXNDbGFzcygnZmknKSA/IGUudGFyZ2V0IDogZS50YXJnZXQuZ2V0UGFyZW50KCdzcGFuLmZpJykpOworCQkJCQkJaWYgKHJvdykKKwkJCQkJCXsKKwkJCQkJCQlyb3cuYWRkQ2xhc3MoJ2hvdmVyJyk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJdGhpcy5icm93c2VyLmdldEVsZW1lbnRzKCdzcGFuLmZpLmhvdmVyJykuZWFjaChmdW5jdGlvbihzcGFuKSB7CisJCQkJCQkvLyBwcmV2ZW50IHNjcmVlbiBmbGlja2VyOiBvbmx5IHJlbW92ZSB0aGUgY2xhc3MgZm9yIC9vdGhlci8gbm9kZXM6CisJCQkJCQlpZiAoc3BhbiAhPSByb3cpIHsKKwkJCQkJCQlzcGFuLnJlbW92ZUNsYXNzKCdob3ZlcicpOworCQkJCQkJCXZhciByb3dpY29ucyA9IHNwYW4uZ2V0RWxlbWVudHMoJ2ltZy5icm93c2VyLWljb24nKTsKKwkJCQkJCQlpZiAocm93aWNvbnMpCisJCQkJCQkJeworCQkJCQkJCQlyb3dpY29ucy5lYWNoKGZ1bmN0aW9uKGljb24pIHsKKwkJCQkJCQkJCWljb24uc2V0KCd0d2VlbicsIHtkdXJhdGlvbjogJ3Nob3J0J30pLmZhZGUoMCk7CisJCQkJCQkJCX0pOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfSk7CisKKwkJCQkJaWYgIChyb3cpCisJCQkJCXsKKwkJCQkJCXZhciBpY29ucyA9IHJvdy5nZXRFbGVtZW50cygnaW1nLmJyb3dzZXItaWNvbicpOworCQkJCQkJaWYgKGljb25zKQorCQkJCQkJeworCQkJCQkJCWljb25zLmVhY2goZnVuY3Rpb24oaWNvbikgeworCQkJCQkJCQlpZiAoZS50YXJnZXQgPT0gaWNvbikKKwkJCQkJCQkJeworCQkJCQkJCQkJaWNvbi5zZXQoJ3R3ZWVuJywge2R1cmF0aW9uOiAnc2hvcnQnfSkuZmFkZSgxKTsKKwkJCQkJCQkJfQorCQkJCQkJCQllbHNlCisJCQkJCQkJCXsKKwkJCQkJCQkJCWljb24uc2V0KCd0d2VlbicsIHtkdXJhdGlvbjogJ3Nob3J0J30pLmZhZGUoMC41KTsKKwkJCQkJCQkJfQorCQkJCQkJCX0pOworCQkJCQkJfQorCQkJCQl9CisJCQkJfSkuYmluZCh0aGlzKSwKKworCQkJLyogJ21vdXNlb3V0JyAqLworCQkJJ21vdXNlbGVhdmUnOiAoZnVuY3Rpb24oZSkgeworCQkJCQkvL3RoaXMuZGlhZy5sb2coJ21vdXNlb3V0OiAnLCBlKTsKKworCQkJCQkvLyBvbmx5IGJvdGhlciB1cyB3aGVuIHRoZSBtb3VzZSBjdXJzb3IgaGFzIGp1c3QgbGVmdCB0aGUgYnJvd3NlciBhcmVhOyBhbnl0aGluZyBpbnNpZGUgdGhlcmUgaXMgaGFuZGxlZAorCQkJCQkvLyBieSB0aGUgcmVjdXJyaW5nICdtb3VzZW92ZXInIGV2ZW50IGFib3ZlLi4uCisJCQkJCS8vCisJCQkJCS8vIC0gZG8gTk9UIHJlbW92ZSB0aGUgJ2hvdmVyJyBtYXJrZXIgZnJvbSB0aGUgcm93OyBpdCB3aWxsIGJlIHVzZWQgYnkgdGhlIGtleWJvYXJkIQorCQkJCQkvLyAtIERPIGZhZGUgb3V0IHRoZSBhY3Rpb24gaWNvbnMsIHRob3VnaCEKKwkJCQkJdGhpcy5icm93c2VyLmdldEVsZW1lbnRzKCdzcGFuLmZpLmhvdmVyJykuZWFjaChmdW5jdGlvbihzcGFuKSB7CisJCQkJCQl2YXIgcm93aWNvbnMgPSBzcGFuLmdldEVsZW1lbnRzKCdpbWcuYnJvd3Nlci1pY29uJyk7CisJCQkJCQlpZiAocm93aWNvbnMpCisJCQkJCQl7CisJCQkJCQkJcm93aWNvbnMuZWFjaChmdW5jdGlvbihpY29uKSB7CisJCQkJCQkJCWljb24uc2V0KCd0d2VlbicsIHtkdXJhdGlvbjogJ3Nob3J0J30pLmZhZGUoMCk7CisJCQkJCQkJfSk7CisJCQkJCQl9CisJCQkJCX0pOworCisJCQkJfSkuYmluZCh0aGlzKQorCQkJfSk7CisJCXRoaXMuYnJvd3Nlck1lbnVfdGh1bWIgPSBuZXcgRWxlbWVudCgnYScseworCQkJCSdpZCc6J3RvZ2dsZV9zaWRlX2JveGVzJywKKwkJCQknY2xhc3MnOidsaXN0VHlwZScsCisJCQkJJ3N0eWxlJyA6ICdtYXJnaW4tcmlnaHQ6IDEwcHg7JywKKwkJCQkndGl0bGUnOiB0aGlzLmxhbmd1YWdlLnRvZ2dsZV9zaWRlX2JveGVzCisJCQl9KS5zZXRTdHlsZSgnb3BhY2l0eScsMC41KS5hZGRFdmVudHMoeworCQkJCWNsaWNrOiB0aGlzLnRvZ2dsZUxpc3QuYmluZCh0aGlzKQorCQkJfSk7CisJCXRoaXMuYnJvd3Nlck1lbnVfbGlzdCA9IG5ldyBFbGVtZW50KCdhJyx7CisJCQkJJ2lkJzondG9nZ2xlX3NpZGVfbGlzdCcsCisJCQkJJ2NsYXNzJzonbGlzdFR5cGUnLAorCQkJCSd0aXRsZSc6IHRoaXMubGFuZ3VhZ2UudG9nZ2xlX3NpZGVfbGlzdAorCQkJfSkuc2V0U3R5bGUoJ29wYWNpdHknLDEpLmFkZEV2ZW50cyh7CisJCQkJY2xpY2s6IHRoaXMudG9nZ2xlTGlzdC5iaW5kKHRoaXMpCisJCQl9KTsKKworCQlpZih0aGlzLmxpc3RUeXBlID09ICd0aHVtYicpIHsKKwkJCXRoaXMuYnJvd3Nlck1lbnVfdGh1bWIuc2V0U3R5bGUoJ29wYWNpdHknLDEpOworICAgICAgdGhpcy5icm93c2VyTWVudV9saXN0LnNldFN0eWxlKCdvcGFjaXR5JywwLjUpOyAgICAgIAorICAgICAgdGhpcy5icm93c2VyTWVudV90aHVtYi5zdG9yZSgnc2V0JywgdHJ1ZSk7CisJCQl0aGlzLmJyb3dzZXJNZW51X2xpc3Quc3RvcmUoJ3NldCcsIGZhbHNlKTsKKwkJfQorCQllbHNlCisgICAgeworICAgICAgdGhpcy5icm93c2VyTWVudV90aHVtYi5zZXRTdHlsZSgnb3BhY2l0eScsMC41KTsKKyAgICAgIHRoaXMuYnJvd3Nlck1lbnVfbGlzdC5zZXRTdHlsZSgnb3BhY2l0eScsMSk7ICAgICAgCisgICAgICB0aGlzLmJyb3dzZXJNZW51X3RodW1iLnN0b3JlKCdzZXQnLCBmYWxzZSk7CisgICAgICB0aGlzLmJyb3dzZXJNZW51X2xpc3Quc3RvcmUoJ3NldCcsIHRydWUpOworICAgIH0KKworCQkvLyBBZGQgYSBzY3JvbGxlciB0byBzY3JvbGwgdGhlIGJyb3dzZXIgbGlzdCB3aGVuIGRyYWdnaW5nIGEgZmlsZQorCQl0aGlzLnNjcm9sbGVyID0gbmV3IFNjcm9sbGVyKHRoaXMuYnJvd3NlclNjcm9sbCwgeworCQkJb25DaGFuZ2U6IGZ1bmN0aW9uKHgsIHkpCisJCQl7CisJCQkJLy8gcmVzdHJpY3Qgc2Nyb2xsaW5nIHRvIFkgZGlyZWN0aW9uIG9ubHkhCisJCQkJLy90aGlzLmVsZW1lbnQuc2Nyb2xsVG8oeCwgeSk7CisJCQkJdmFyIHNjcm9sbCA9IHRoaXMuZWxlbWVudC5nZXRTY3JvbGwoKTsKKwkJCQl0aGlzLmVsZW1lbnQuc2Nyb2xsVG8oc2Nyb2xsLngsIHkpOworCQkJfQorCQl9KTsKKworICAgIGlmKHRoaXMub3B0aW9ucy5zaG93RGlyR2FsbGVyeSkKKyAgICB7CisvLyBQYXJ0aWt1bGUgOiBUaHVtYnMgbGlzdCBpbiBwcmV2aWV3IHBhbmVsCisJCXRoaXMuYnJvd3Nlck1lbnVfdGh1bWJMaXN0ID0gbmV3IEVsZW1lbnQoJ2EnLHsKKwkJCQknaWQnOiAnc2hvd19kaXJfdGh1bWJfZ2FsbGVyeScsCisJCQkJJ3RpdGxlJzogdGhpcy5sYW5ndWFnZS5zaG93X2Rpcl90aHVtYl9nYWxsZXJ5CisJCQl9KS5hZGRFdmVudCgnY2xpY2snLCBmdW5jdGlvbigpCisJCQl7CisJCQkJLy8gZG8gTk9UIGNoYW5nZSB0aGUganNHRVQgaGlzdG9yeSBjYXJyeWluZyBvdXIgYnJvd3Npbmcgc28gZmFyOyB0aGUgZmFjdCB3ZSB3YW50IHRvIHZpZXcgdGhlIGRpcnRyZWUgc2hvdWxkCisJCQkJLy8gKk5PVCogYmxvdyBhd2F5IHRoZSByZWNhbGwgaW4gd2hpY2ggZGlyZWN0b3J5IHdlIGFyZSAoYW5kIHdoYXQgaXRlbSBpcyBjdXJyZW50bHkgc2VsZWN0ZWQpOgorCisJCQkJLy9pZiAodHlwZW9mIGpzR0VUICE9PSAndW5kZWZpbmVkJykKKwkJCQkvLyAganNHRVQuY2xlYXIoKTsKKworCQkJCS8vIG5vIG5lZWQgdG8gcmVxdWVzdCB0aGUgZGlyc2NhbiBhZ2FpbjogYWZ0ZXIgYWxsLCB3ZSBvbmx5IHdpc2ggdG8gcmVuZGVyIGFub3RoZXIgdmlldyBvZiB0aGUgc2FtZSBkaXJlY3RvcnkuCisJCQkJLy8gKFRoaXMgbWVhbnMsIGhvd2V2ZXIsIHRoYXQgd2UgTUFZIHJlcXVlc3RpbmcgYW55IGRlZmVycmVkIHRodW1ibmFpbHMpCisKKwkJCQkvL3NlbGYubG9hZChzZWxmLm9wdGlvbnMuZGlyZWN0b3J5LCB0cnVlKTsKKwkJCQkvL3JldHVybiBzZWxmLmRlc2VsZWN0KCk7ICAgLy8gbm90aGluZyB0byByZXR1cm4gb24gYSBjbGljayBldmVudCwgYW55d2F5LiBBbmQgZG8gTk9UIGxvb3NlIHRoZSBzZWxlY3Rpb24hCisKKwkJCQkvLyB0aGUgY29kZSB5b3UgbmVlZCBoZXJlIGlzIGlkZW50aWNhbCB0byBjbGlja2luZyBvbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaW4gdGhlIHRvcCBwYXRoIGJhcjoKKwkJCQkvLyBzaG93IHRoZSAnZGlyZWN0b3J5JyBpbmZvIGluIHRoZSBkZXRhaWwgcGFuZSBhZ2FpbiAodGhpcyBpcyBhIHdheSB0byBnZXQgYmFjayBmcm9tIHByZXZpZXdpbmcgc2luZ2xlIGZpbGVzIHRvIHByZXZpZXdpbmcgdGhlIGRpcmVjdG9yeSBhcyBhIGdhbGxlcnkpCisJCQkJdGhpcy5kaWFnLmxvZygnc2hvd19kaXJfVGh1bWJfZ2FsbGVyeSBidXR0b24gY2xpY2s6IGN1cnJlbnQgZGlyZWN0b3J5IScsIHRoaXMuQ3VycmVudERpciwgJywgc3RhcnRkaXI6ICcsIHRoaXMub3B0aW9ucy5kaXJlY3RvcnkpOworCQkJCXRoaXMuZmlsbEluZm8oKTsKKwkJCX0uYmluZCh0aGlzKSk7CisvLyAvUGFydGlrdWxlCisgICAgfQorCisJCXRoaXMuYnJvd3Nlcl9kcmFnbmRyb3BfaW5mbyA9IG5ldyBFbGVtZW50KCdhJyx7CisJCQkJJ2lkJzonZHJhZ19uX2Ryb3AnLAorCQkJCSd0aXRsZSc6IHRoaXMubGFuZ3VhZ2UuZHJhZ19uX2Ryb3BfZGlzYWJsZWQKKwkJCX0pOyAvLyAuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7CisJCXRoaXMuYnJvd3Nlcl9wYWdpbmcgPSBuZXcgRWxlbWVudCgnZGl2Jyx7CisJCQkJJ2lkJzonZm1fdmlld19wYWdpbmcnCisJCQl9KS5zZXRTdHlsZSgnb3BhY2l0eScsIDApOyAvLyAuc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7CisJCXRoaXMuYnJvd3Nlcl9wYWdpbmdfZmlyc3QgPSBuZXcgRWxlbWVudCgnYScseworCQkJCSdpZCc6J3BhZ2luZ19nb3RvX2ZpcnN0JworCQkJfSkuc2V0U3R5bGUoJ29wYWNpdHknLCAxKS5hZGRFdmVudHMoeworCQkJCWNsaWNrOiB0aGlzLnBhZ2luZ19nb3RvX2ZpcnN0LmJpbmQodGhpcykKKwkJCX0pOworCQl0aGlzLmJyb3dzZXJfcGFnaW5nX3ByZXYgPSBuZXcgRWxlbWVudCgnYScseworCQkJCSdpZCc6J3BhZ2luZ19nb3RvX3ByZXZpb3VzJworCQkJfSkuc2V0U3R5bGUoJ29wYWNpdHknLCAxKS5hZGRFdmVudHMoeworCQkJCWNsaWNrOiB0aGlzLnBhZ2luZ19nb3RvX3ByZXYuYmluZCh0aGlzKQorCQkJfSk7CisJCXRoaXMuYnJvd3Nlcl9wYWdpbmdfbmV4dCA9IG5ldyBFbGVtZW50KCdhJyx7CisJCQkJJ2lkJzoncGFnaW5nX2dvdG9fbmV4dCcKKwkJCX0pLnNldFN0eWxlKCdvcGFjaXR5JywgMSkuYWRkRXZlbnRzKHsKKwkJCQljbGljazogdGhpcy5wYWdpbmdfZ290b19uZXh0LmJpbmQodGhpcykKKwkJCX0pOworCQl0aGlzLmJyb3dzZXJfcGFnaW5nX2xhc3QgPSBuZXcgRWxlbWVudCgnYScseworCQkJCSdpZCc6J3BhZ2luZ19nb3RvX2xhc3QnCisJCQl9KS5zZXRTdHlsZSgnb3BhY2l0eScsIDEpLmFkZEV2ZW50cyh7CisJCQkJY2xpY2s6IHRoaXMucGFnaW5nX2dvdG9fbGFzdC5iaW5kKHRoaXMpCisJCQl9KTsKKwkJdGhpcy5icm93c2VyX3BhZ2luZ19pbmZvID0gbmV3IEVsZW1lbnQoJ3NwYW4nLHsKKwkJCQknaWQnOidwYWdpbmdfaW5mbycsCisJCQkJJ3RleHQnOiAnJworCQkJfSk7CisJCXRoaXMuYnJvd3Nlcl9wYWdpbmcuYWRvcHQoW3RoaXMuYnJvd3Nlcl9wYWdpbmdfZmlyc3QsIHRoaXMuYnJvd3Nlcl9wYWdpbmdfcHJldiwgdGhpcy5icm93c2VyX3BhZ2luZ19pbmZvLCB0aGlzLmJyb3dzZXJfcGFnaW5nX25leHQsIHRoaXMuYnJvd3Nlcl9wYWdpbmdfbGFzdF0pOworCisvLyBQYXJ0aWt1bGUgOiBBZGRlZCB0aGUgYnJvd3Nlck1lbnVfdGh1bWJMaXN0IHRvIHRoZSBicm93c2VyaGVhZGVyCisJCXRoaXMuYnJvd3NlcmhlYWRlci5hZG9wdChbdGhpcy5icm93c2VyTWVudV90aHVtYkxpc3QsIHRoaXMuYnJvd3Nlck1lbnVfdGh1bWIsIHRoaXMuYnJvd3Nlck1lbnVfbGlzdCwgdGhpcy5icm93c2VyX2RyYWduZHJvcF9pbmZvLCB0aGlzLmJyb3dzZXJfcGFnaW5nXSk7CisvLyAvUGFydGlrdWxlCisKKwkJdGhpcy5icm93c2VyID0gbmV3IEVsZW1lbnQoJ3VsJywgeydjbGFzcyc6ICdmaWxlbWFuYWdlci1icm93c2VyJ30pLmluamVjdCh0aGlzLmJyb3dzZXJTY3JvbGwpOworCisJCWlmICh0aGlzLm9wdGlvbnMuY3JlYXRlRm9sZGVycykgdGhpcy5hZGRNZW51QnV0dG9uKCdjcmVhdGUnKTsKKwkJaWYgKHRoaXMub3B0aW9ucy5kb3dubG9hZCkgdGhpcy5hZGRNZW51QnV0dG9uKCdkb3dubG9hZCcpOworCQlpZiAodGhpcy5vcHRpb25zLnNlbGVjdGFibGUpIHRoaXMuYWRkTWVudUJ1dHRvbignb3BlbicpOworCisJCXRoaXMuaW5mbyA9IG5ldyBFbGVtZW50KCdkaXYnLCB7J2NsYXNzJzogJ2ZpbGVtYW5hZ2VyLWluZm9zJ30pOworCisJCXRoaXMuaW5mb19oZWFkID0gbmV3IEVsZW1lbnQoJ2RpdicsIHsKKwkJCSdjbGFzcyc6ICdmaWxlbWFuYWdlci1oZWFkJywKKwkJCXN0eWxlczoKKwkJCXsKKwkJCQlvcGFjaXR5OiAwCisJCQl9CisJCX0pLmFkb3B0KFsKKwkJCW5ldyBFbGVtZW50KCdpbWcnLCB7J2NsYXNzJzogJ2ZpbGVtYW5hZ2VyLWljb24nfSksCisJCQluZXcgRWxlbWVudCgnaDEnKQorCQldKTsKKworCQl0aGlzLnByZXZpZXcgPSBuZXcgRWxlbWVudCgnZGl2JywgeydjbGFzcyc6ICdmaWxlbWFuYWdlci1wcmV2aWV3J30pLmFkZEV2ZW50KCdjbGljazpyZWxheShpbWcucHJldmlldyknLCBmdW5jdGlvbigpIHsKKwkJCXNlbGYuZmlyZUV2ZW50KCdwcmV2aWV3JywgW3RoaXMuZ2V0KCdzcmMnKSwgc2VsZiwgdGhpc10pOworCQl9KTsKKworCQkvLyBXZSBuZWVkIHRvIGdyb3VwIHRoZSBoZWFkZXJzIGFuZCBsaXN0cyB0b2dldGhlciBiZWNhdXNlIHdlIG1heQorCQkvLyB1c2Ugc29tZSBDU1MgdG8gcmVvcmdhbmlzZSBpdCBhIGJpdCBpbiB0aGUgY3VzdG9tIGV2ZW50IGhhbmRsZXIuICBTbyB3ZSBjcmVhdGUgImZpbGVtYW5hZ2VyLXByZXZpZXctYXJlYSIgd2hpY2gKKwkJLy8gd2lsbCBjb250YWluIHRoZSBoMiBmb3IgdGhlIHByZXZpZXcgYW5kIGFsc28gdGhlIHByZXZpZXcgY29udGVudCByZXR1cm5lZCBmcm9tCisJCS8vIEJhY2tlbmQvRmlsZU1hbmFnZXIucGhwCisJCXRoaXMucHJldmlld19hcmVhID0gbmV3IEVsZW1lbnQoJ2RpdicsIHsnY2xhc3MnOiAnZmlsZW1hbmFnZXItcHJldmlldy1hcmVhJywKKwkJCXN0eWxlczoKKwkJCXsKKwkJCQlvcGFjaXR5OiAwCisJCQl9CisJCX0pOworCisvLyBQYXJ0aWt1bGUuIFJlbW92ZWQgbmV3IEVsZW1lbnQoJ2gyJywgeydjbGFzcyc6ICdmaWxlbWFuYWdlci1oZWFkbGluZScgOgorLy8gMS4gVG8gZ2FpbiBtb3JlIHZlcnRpY2FsIHNwYWNlIGZvciBwcmV2aWV3CisvLyAyLiBCZWNhdXNlIHRoZSB1c2VyIGtub3dzIHRoaXMgaXMgaW5mbyBhYm91dCB0aGUgZmlsZQorCQl0aGlzLnByZXZpZXdfYXJlYS5hZG9wdChbCisJCQkvL25ldyBFbGVtZW50KCdoMicsIHsnY2xhc3MnOiAnZmlsZW1hbmFnZXItaGVhZGxpbmUnLCB0ZXh0OiB0aGlzLmxhbmd1YWdlLm1vcmV9KSwKKwkJCXRoaXMucHJldmlldworCQldKTsKKworLy8gUGFydGlrdWxlLgorLy8gMS4gVG8gZ2FpbiBtb3JlIHZlcnRpY2FsIHNwYWNlIGZvciBwcmV2aWV3CisvLyAyLiBCZWNhdXNlIHRoZSB1c2VyIGtub3dzIHRoaXMgaXMgaW5mbyBhYm91dCB0aGUgZmlsZQorLy8gMy4gTGVzcyBpcyBtb3JlIDotKQorCQl0aGlzLmluZm8uYWRvcHQoW3RoaXMuaW5mb19oZWFkLCB0aGlzLnByZXZpZXdfYXJlYV0pLmluamVjdCh0aGlzLmZpbGVtYW5hZ2VyKTsKKy8vIC9QYXJ0aWt1bGUKKworLy8gUGFydGlrdWxlCisvLyBBZGQgb2YgdGhlIHRodW1ibmFpbCBsaXN0IGluIHRoZSBwcmV2aWV3IHBhbmVsCisKKy8vIFdlIGZpbGwgdGhpcyBvbmUgd2hpbGUgd2UgcmVuZGVyIHRoZSBkaXJlY3RvcnkgdHJlZSB2aWV3IHRvIGVuc3VyZSB0aGF0IHRoZSBkZWZlcnJlZCB0aHVtYm5haWwgbG9hZGluZyBzeXN0ZW0KKy8vICh1c2luZyAnZGV0YWlsIC8gbW9kZT1kaXJlY3QnIHJlcXVlc3RzIHRvIG9idGFpbiB0aGUgYWN0dWFsIHRodW1ibmFpbCBwYXRocykgZG9lc24ndCBiZWNvbWUgYSBzZXJpb3VzbHkgY29tcGxleAorLy8gbWVzcy4KKy8vIFRoaXMgd2F5LCBhbnkgdXBkYXRlcyBjb21pbmcgZnJvbSB0aGUgc2VydmVyIGFyZSBhdXRvbWF0aWNhbGx5IGVkaXRlZCBpbnRvIHRoaXMgbGlzdDsgd2hldGhlciBpdCBpcyBzaG93biBvcgorLy8gbm90IGRlcGVuZHMgb24gdGhlIGRlY2lzaW9ucyBpbiBmaWxsSW5mbygpCisvLworLy8gVXNhZ2U6CisvLyAtIE9uZSBkb3VibGVjbGljayBvbiBvbmUgdGh1bWIgaW4gdGhpcyBsaXN0IHdpbGwgc2VsZWN0IHRoZSBmaWxlIDogcXVpY2tlciBzZWxlY3QKKy8vIC0gT25lIGNsaWNrIGRpc3BsYXlzIHRoZSBwcmV2aWV3LCBidXQgd2l0aCB0aGUgZmlsZSBpbiBiaWdnZXIgZm9ybWF0IDogbGVzcyBjbGlja3MgdG8gc2VlIHRoZSBwaWN0dXJlIHdpZGVyLgorCisJCS8vIFRodW1icyBsaXN0IGNvbnRhaW5lciAoaW4gcHJldmlldyBwYW5lbCkKKwkJdGhpcy5kaXJfZmlsZWxpc3QgPSBuZXcgRWxlbWVudCgnZGl2JywgeydjbGFzcyc6ICdmaWxlbWFuYWdlci1maWxlbGlzdCd9KTsKKwkJLy8gY3JlYXRlcyBhIGxpc3QsIEhFTFBTIHRvIG1ha2UgdGhlIHRodW1ibGlzdCBEUkFHQUJMRQorCQl0aGlzLmRpcl9maWxlbGlzdF90aHVtYlVsID0gbmV3IEVsZW1lbnQoJ3VsJyk7CisJCXRoaXMuZGlyX2ZpbGVsaXN0X3RodW1iVWwuaW5qZWN0KHRoaXMuZGlyX2ZpbGVsaXN0KTsKKworLy8gL1BhcnRpa3VsZQorCisJCWlmICghdGhpcy5vcHRpb25zLmhpZGVDbG9zZSkgeworCQkJdGhpcy5jbG9zZUljb24gPSBuZXcgRWxlbWVudCgnYScsIHsKKwkJCQknY2xhc3MnOiAnZmlsZW1hbmFnZXItY2xvc2UnLAorCQkJCW9wYWNpdHk6IDAuNSwKKwkJCQl0aXRsZTogdGhpcy5sYW5ndWFnZS5jbG9zZSwKKwkJCQlldmVudHM6IHtjbGljazogdGhpcy5oaWRlLmJpbmQodGhpcyl9CisJCQl9KS5pbmplY3QodGhpcy5maWxlbWFuYWdlcikuYWRkRXZlbnQoJ21vdXNlb3ZlcicsZnVuY3Rpb24oKSB7CisJCQkJCXRoaXMuZmFkZSgxKTsKKwkJCQl9KS5hZGRFdmVudCgnbW91c2VvdXQnLGZ1bmN0aW9uKCkgeworCQkJCQl0aGlzLmZhZGUoMC41KTsKKwkJCQl9KTsKKwkJfQorCisJCXRoaXMudGlwcyA9IG5ldyBUaXBzKHsKKwkJCWNsYXNzTmFtZTogJ3RpcC1maWxlYnJvd3NlcicsCisJCQlvZmZzZXRzOiB7eDogMTUsIHk6IDB9LAorCQkJdGV4dDogbnVsbCwKKwkJCXNob3dEZWxheTogNTAsCisJCQloaWRlRGVsYXk6IDUwLAorCQkJb25TaG93OiBmdW5jdGlvbigpIHsKKwkJCQl0aGlzLnRpcC5zZXRTdHlsZSgnei1pbmRleCcsIHNlbGYub3B0aW9ucy56SW5kZXggKyA1MDEpLnNldCgndHdlZW4nLCB7ZHVyYXRpb246ICdzaG9ydCd9KS5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpLmZhZGUoMSk7CisJCQl9LAorCQkJb25IaWRlOiBmdW5jdGlvbigpIHsKKwkJCQl0aGlzLnRpcC5mYWRlKDApLmdldCgndHdlZW4nKS5jaGFpbihmdW5jdGlvbigpIHsKKwkJCQkJdGhpcy5lbGVtZW50LnNldFN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTsKKwkJCQl9KTsKKwkJCX0KKwkJfSk7CisKKwkJLy8gYWRkIHRvb2xUaXBzCisJCWlmICghdGhpcy5vcHRpb25zLmhpZGVDbG9zZSkgeworCQkJdGhpcy50aXBzLmF0dGFjaCh0aGlzLmNsb3NlSWNvbik7CisJCX0KKwkJdGhpcy50aXBzLmF0dGFjaCh0aGlzLmJyb3dzZXJNZW51X3RodW1iKTsKKwkJdGhpcy50aXBzLmF0dGFjaCh0aGlzLmJyb3dzZXJNZW51X2xpc3QpOworCQl0aGlzLnRpcHMuYXR0YWNoKHRoaXMuYnJvd3Nlck1lbnVfdGh1bWJMaXN0KTsKKworCQl0aGlzLmltYWdlYWRkID0gQXNzZXQuaW1hZ2UodGhpcy5hc3NldEJhc2VQYXRoICsgJ0ltYWdlcy9hZGQucG5nJywgeworCQkJJ2NsYXNzJzogJ2Jyb3dzZXItYWRkJywKKwkJCXN0eWxlczoKKwkJCXsKKwkJCQknei1pbmRleCc6IHRoaXMub3B0aW9ucy56SW5kZXggKyAxNjAwCisJCQl9CisJCX0pLnNldFN0eWxlKCdvcGFjaXR5JywgMCkuc2V0KCd0d2VlbicsIHtkdXJhdGlvbjogJ3Nob3J0J30pLmluamVjdCh0aGlzLmNvbnRhaW5lcik7CisKKwkJaWYgKCF0aGlzLm9wdGlvbnMuaGlkZU92ZXJsYXkpIHsKKwkJCXRoaXMub3ZlcmxheSA9IG5ldyBPdmVybGF5KE9iamVjdC5hcHBlbmQoKHRoaXMub3B0aW9ucy5oaWRlT25DbGljayA/IHsKKwkJCQlldmVudHM6IHsKKwkJCQkJY2xpY2s6IHRoaXMuaGlkZS5iaW5kKHRoaXMpCisJCQkJfQorCQkJfSA6IHt9KSwKKwkJCXsKKwkJCQlzdHlsZXM6CisJCQkJeworCQkJCQknei1pbmRleCc6IHRoaXMub3B0aW9ucy56SW5kZXggLSAxCisJCQkJfQorCQkJfSkpOworCQl9CisKKwkJdGhpcy5ib3VuZCA9IHsKKwkJCWtleWRvd246IChmdW5jdGlvbihlKQorCQkJeworCQkJCS8vIGF0IGxlYXN0IEZGIG9uIFdpbiB3aWxsIHRyaWdnZXIgdGhpcyBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcyB3aGVuIGtleXMgYXJlIGRlcHJlc3NlZCBmb3IgYSBsb25nIHRpbWUuIEhlbmNlIHRpbWUgY29uc3VtaW5nIGFjdGlvbnMgYXJlIGRvbiBpbiAna2V5dXAnIHdoZW5ldmVyIHBvc3NpYmxlLgorCisJCQkJdGhpcy5kaWFnLmxvZygna2V5ZG93bjoga2V5IHByZXNzOiAnLCBlKTsKKwkJCQlpZiAoZS5jb250cm9sIHx8IGUubWV0YSkKKwkJCQl7CisJCQkJCWlmICh0aGlzLmRyYWdfaXNfYWN0aXZlICYmICF0aGlzLmN0cmxfa2V5X3ByZXNzZWQpCisJCQkJCXsKKwkJCQkJCS8vIG9ubHkgaW5pdCB0aGUgZmFkZSB3aGVuIGFjdHVhbGx5IHN3aXRjaGluZyBDT05UUk9MIGtleSBzdGF0ZXMhCisJCQkJCQl0aGlzLmltYWdlYWRkLmZhZGUoMSk7CisJCQkJCX0KKwkJCQkJdGhpcy5jdHJsX2tleV9wcmVzc2VkID0gdHJ1ZTsKKwkJCQl9CisJCQl9KS5iaW5kKHRoaXMpLAorCisJCQlrZXl1cDogKGZ1bmN0aW9uKGUpCisJCQl7CisJCQkJdGhpcy5kaWFnLmxvZygna2V5dXA6IGtleSBwcmVzczogJywgZSk7CisJCQkJaWYgKCFlLmNvbnRyb2wgJiYgIWUubWV0YSkKKwkJCQl7CisJCQkJCWlmICgvKiB0aGlzLmRyYWdfaXNfYWN0aXZlICYmICovIHRoaXMuY3RybF9rZXlfcHJlc3NlZCkKKwkJCQkJeworCQkJCQkJLy8gb25seSBpbml0IHRoZSBmYWRlIHdoZW4gYWN0dWFsbHkgc3dpdGNoaW5nIENPTlRST0wga2V5IHN0YXRlcyEKKwkJCQkJCXRoaXMuaW1hZ2VhZGQuZmFkZSgwKTsKKwkJCQkJfQorCQkJCQl0aGlzLmN0cmxfa2V5X3ByZXNzZWQgPSBmYWxzZTsKKwkJCQl9CisKKwkJCQlpZiAoIXRoaXMuZGlhbG9nT3BlbikKKwkJCQl7CisJCQkJCXN3aXRjaCAoZS5rZXkpCisJCQkJCXsKKyAgICAgICAgICAgIAorCQkJCQljYXNlICd0YWInOgorICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLmtleWJvYXJkTmF2aWdhdGlvbikKKyAgICAgICAgICAgIHsKKwkJCQkJCWUuc3RvcCgpOworCQkJCQkJdGhpcy50b2dnbGVMaXN0KCk7CisgICAgICAgICAgICB9CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlICdlc2MnOgorCQkJCQkJZS5zdG9wKCk7CisJCQkJCQl0aGlzLmhpZGUoKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfSkuYmluZCh0aGlzKSwKKwkJCWtleWJvYXJkSW5wdXQ6IChmdW5jdGlvbihlKQorCQkJeworCQkJCXRoaXMuZGlhZy5sb2coJ2tleWJvYXJkSW5wdXQga2V5IHByZXNzOiAnLCBlKTsKKwkJCQlpZiAodGhpcy5kaWFsb2dPcGVuKSByZXR1cm47CisJCQkJc3dpdGNoIChlLmtleSkKKwkJCQl7CisJCQkJY2FzZSAndXAnOgorCQkJCWNhc2UgJ2Rvd24nOgorCQkJCWNhc2UgJ3BhZ2V1cCc6CisJCQkJY2FzZSAncGFnZWRvd24nOgorCQkJCWNhc2UgJ2hvbWUnOgorCQkJCWNhc2UgJ2VuZCc6CisJCQkJY2FzZSAnZW50ZXInOgorCQkJCWNhc2UgJ2RlbGV0ZSc6CisgICAgICAgICAgaWYodGhpcy5vcHRpb25zLmtleWJvYXJkTmF2aWdhdGlvbikKKyAgICAgICAgICB7CisJCQkJCWUucHJldmVudERlZmF1bHQoKTsKKwkJCQkJdGhpcy5icm93c2VyU2VsZWN0aW9uKGUua2V5KTsKKwkJCQkJYnJlYWs7CisgICAgICAgICAgfQorCQkJCX0KKwkJCX0pLmJpbmQodGhpcyksCisKKwkJCXNjcm9sbDogKGZ1bmN0aW9uKGUpCisJCQl7CisJCQkJdGhpcy5maXJlRXZlbnQoJ3Njcm9sbCcsIFtlLCB0aGlzXSk7CisJCQkJdGhpcy5maXRTaXplcygpOworCQkJfSkuYmluZCh0aGlzKQorCQl9OworCisJCWlmICh0aGlzLm9wdGlvbnMuc3RhbmRhbG9uZSkKKwkJeworCQkJdGhpcy5jb250YWluZXIuaW5qZWN0KGRvY3VtZW50LmJvZHkpOworCisJCQkvLyAtPj4gYXV0b3N0YXJ0IGZpbGVtYW5hZ2VyIHdoZW4gc2V0CisJCQl0aGlzLmluaXRpYWxTaG93KCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQl0aGlzLm9wdGlvbnMuaGlkZU92ZXJsYXkgPSB0cnVlOworCQl9CisJCXJldHVybiB0aGlzOworCX0sCisKKwlpbml0aWFsU2hvd0Jhc2U6IGZ1bmN0aW9uKCkgeworCQlpZiAodHlwZW9mIGpzR0VUICE9PSAndW5kZWZpbmVkJyAmJiBqc0dFVC5nZXQoJ2ZtSUQnKSA9PSB0aGlzLklEKSB7CisJCQl0aGlzLnNob3coKTsKKwkJfQorCQllbHNlIHsKKwkJCXdpbmRvdy5hZGRFdmVudCgnanNHRVRsb2FkZWQnLChmdW5jdGlvbigpIHsKKwkJCQlpZiAodHlwZW9mIGpzR0VUICE9PSAndW5kZWZpbmVkJyAmJiBqc0dFVC5nZXQoJ2ZtSUQnKSA9PSB0aGlzLklEKQorCQkJCQl0aGlzLnNob3coKTsKKwkJCX0pLmJpbmQodGhpcykpOworCQl9CisJfSwKKworCS8vIG92ZXJyaWRhYmxlIG1ldGhvZDoKKwlpbml0aWFsU2hvdzogZnVuY3Rpb24oKSB7CisJCXRoaXMuaW5pdGlhbFNob3dCYXNlKCk7CisJfSwKKworCWFsbG93X0RuRDogZnVuY3Rpb24oaiwgcGFnZXNpemUpCisJeworCQlpZiAoIXRoaXMub3B0aW9ucy5tb3ZlX29yX2NvcHkpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJaWYgKCFqIHx8ICFqLmRpcnMgfHwgIWouZmlsZXMgfHwgIXBhZ2VzaXplKQorCQkJcmV0dXJuIHRydWU7CisKKwkJcmV0dXJuIChqLmRpcnMubGVuZ3RoICsgai5maWxlcy5sZW5ndGggPD0gcGFnZXNpemUgKiA0KTsKKwl9LAorCisJLyoKKwkgKiBkZWZhdWx0IG1ldGhvZCB0byBwcm9kdWNlIGEgc3VpdGFibGUgcmVxdWVzdCBVUkwvUE9TVDsgYXMgc2V2ZXJhbCBmcmFtZXdvcmtzIG91dCB0aGVyZSBlbXBsb3kgdXJsIHJld3JpdGluZywgb25lIHdheSBvciBhbm90aGVyLAorCSAqIHdlIG5vdyBhbGxvdyB1c2VycyB0byBwcm92aWRlIHRoZWlyIG93biBjb25zdHJ1Y3Rpb24gbWV0aG9kIHRvIHJlcGxhY2UgdGhpcyBvbmU6IHNpbXBseSBwcm92aWRlIHlvdXIgb3duIG1ldGhvZCBpbgorCSAqICAgb3B0aW9ucy5ta1NlcnZlclJlcXVlc3RVUkwKKwkgKiBMaWtlIHRoaXMgb25lLCBpdCBNVVNUIHJldHVybiBhbiBvYmplY3QsIGNvbnRhaW5pbmcgdHdvIHByb3BlcnRpZXM6CisJICoKKwkgKiAgIHVybDogIChzdHJpbmcpIGNvbnRhaW5zIHRoZSBVUkwgc2VudCB0byB0aGUgc2VydmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQvcmVxdWVzdCAod2hpY2ggaXMgYWx3YXlzIHRyYW5zbWl0dGVkIGFzIGEgUE9TVCByZXF1ZXN0KQorCSAqICAgZGF0YTogKGFzc29jLiBhcnJheSk6IGV4dHJhIHBhcmFtZXRlcnMgYWRkZWQgdG8gdGhpcyBQT1NULiAoTWFpbmx5IHRoZXJlIGluIGNhc2UgYSBmcmFtZXdvcmsgd2FudHMgdG8gaGF2ZSB0aGUgJ2V2ZW50JyBwYXJhbWV0ZXIKKwkgKiAgICAgICAgIHRyYW5zbWl0dGVkIGFzIGEgUE9TVCBkYXRhIGVsZW1lbnQsIHJhdGhlciB0aGFuIGhhdmluZyBpdCBpbmNsdWRlZCBpbiB0aGUgcmVxdWVzdCBVUkwgaXRzZWxmIGluIHNvbWUgZm9ybS4KKwkgKgorCSAqIFdBUk5JTkc6ICd0aGlzJyBpbiBoZXJlIGlzIGFjdHVhbGx5ICoqTk9UKiogcG9pbnRpbmcgYXQgdGhlIEZNIGluc3RhbmNlOyB1c2UgJ2ZtX29iaicgZm9yIHRoYXQhCisJICoKKwkgKiAgICAgICAgICBJbiBmYWN0LCAndGhpcycgcG9pbnRzIGF0IHRoZSAnZm1fb2JqLm9wdGlvbnMnIG9iamVjdCwgYnV0IGNvbnNpZGVyIHRoYXQgYW4gJ3VuZG9jdW1lbnRlZCBmZWF0dXJlJworCSAqICAgICAgICAgIGFzIGl0IG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSB3aXRob3V0IG5vdGljZSEKKwkgKi8KKwlta1NlcnZlclJlcXVlc3RVUkw6IGZ1bmN0aW9uKGZtX29iaiwgcmVxdWVzdF9jb2RlLCBwb3N0X2RhdGEpCisJeworICAgIC8vIEhBQ0s6IEVuY29kZSB0aGUgcG9zdF9kYXRhIHRvIGdldCBhcm91bmQgbW9kX3NlY3VyaXR5IGlzc3VlcworICAgIGZ1bmN0aW9uIHJvdDEzKHMpCisgICAgeworICAgICAgICByZXR1cm4gKHMgPyBzIDogdGhpcykuc3BsaXQoJycpLm1hcChmdW5jdGlvbihfKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIV8ubWF0Y2goL1tBLVphLXpdLykpIHJldHVybiBfOworICAgICAgICAgICAgYyA9IE1hdGguZmxvb3IoXy5jaGFyQ29kZUF0KDApIC8gOTcpOworICAgICAgICAgICAgayA9IChfLnRvTG93ZXJDYXNlKCkuY2hhckNvZGVBdCgwKSAtIDgzKSAlIDI2IHx8IDI2OworICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoayArICgoYyA9PSAwKSA/IDY0IDogOTYpKTsKKyAgICAgICAgfSkuam9pbignJyk7CisgICAgfQorICAgLy8gY29uc29sZS5sb2cocm90MTMoSlNPTi5lbmNvZGUocG9zdF9kYXRhKSkpOworICAgIAorICAgIHBvc3RfZGF0YSA9IHsgZW5jb2RlZF9kYXRhOiByb3QxMyhKU09OLmVuY29kZShwb3N0X2RhdGEpKSB9OworICAgIAorCQlyZXR1cm4geworCQkJdXJsOiAoZm1fb2JqLm9wdGlvbnMudXJsICsgKGZtX29iai5vcHRpb25zLnVybC5pbmRleE9mKCc/JykgPT0gLTEgPyAnPycgOiAnJicpICsgT2JqZWN0LnRvUXVlcnlTdHJpbmcoeworCQkJCQlldmVudDogcmVxdWVzdF9jb2RlCisJCQkJfSkpLnJlcGxhY2UoLyYmLywgJyYnKSwKKwkJCWRhdGE6IHBvc3RfZGF0YQorCQl9OworCX0sCisKKwlmaXRTaXplczogZnVuY3Rpb24oKQorCXsKKwkJaWYgKHRoaXMub3B0aW9ucy5zdGFuZGFsb25lKQorCQl7CisJCQl0aGlzLmZpbGVtYW5hZ2VyLmNlbnRlcih0aGlzLm9mZnNldHMpOworCQl9CisJCWVsc2UKKwkJeworCQkJdmFyIHBhcmVudCA9ICh0aGlzLm9wdGlvbnMucGFyZW50Q29udGFpbmVyICE9PSBudWxsID8gZG9jdW1lbnQuaWQodGhpcy5vcHRpb25zLnBhcmVudENvbnRhaW5lcikgOiB0aGlzLmNvbnRhaW5lci5nZXRQYXJlbnQoKSk7CisJCQlpZiAocGFyZW50KQorCQkJeworCQkJCXBhcmVudFNpemUgPSBwYXJlbnQuZ2V0U2l6ZSgpOworCQkJCXRoaXMuZmlsZW1hbmFnZXIuc2V0U3R5bGUoJ2hlaWdodCcsIHBhcmVudFNpemUueSk7CisJCQl9CisJCX0KKworCQl2YXIgY29udGFpbmVyU2l6ZSA9IHRoaXMuZmlsZW1hbmFnZXIuZ2V0U2l6ZSgpOworCQl2YXIgaGVhZGVyU2l6ZSA9IHRoaXMuYnJvd3NlcmhlYWRlci5nZXRTaXplKCk7CisJCXZhciBtZW51U2l6ZSA9IHRoaXMubWVudS5nZXRTaXplKCk7CisJCXRoaXMuYnJvd3NlclNjcm9sbC5zZXRTdHlsZSgnaGVpZ2h0Jyxjb250YWluZXJTaXplLnkgLSBoZWFkZXJTaXplLnkpOworCQl0aGlzLmluZm8uc2V0U3R5bGUoJ2hlaWdodCcsY29udGFpbmVyU2l6ZS55IC0gbWVudVNpemUueSk7CisJfSwKKworCS8vIHNlZSBhbHNvOiBodHRwOi8vY2Fzcy1oYWNrcy5jb20vYXJ0aWNsZXMvZGlzY3Vzc2lvbi9qc191cmxfZW5jb2RlX2RlY29kZS8KKwkvLyBhbmQ6IGh0dHA6Ly94a3IudXMvYXJ0aWNsZXMvamF2YXNjcmlwdC9lbmNvZGUtY29tcGFyZS8KKwkvLyBUaGlzIGlzIGEgbXVjaCBzaW1wbGlmaWVkIHZlcnNpb24gYXMgd2UgZG8gbm90IG5lZWQgZXhhY3QgUEhQIHJhd3VybGVuY29kZSBlcXVpdmFsZW5jZS4KKwkvLworCS8vIFdlIGhhdmUgb25lIG1pc3Rha2UgdG8gZml4OiArIGluc3RlYWQgb2YgJTJCLiBXZSBkb24ndCBtaW5kCisJLy8gdGhhdCAqIGFuZCAvIHJlbWFpbiB1bmVuY29kZWQuIE5vdCBleGFjdGx5IFJGQzM5ODYsIGJ1dCB0aGVyZSB5b3UgaGF2ZSBpdC4uLgorCS8vCisJLy8gV0FSTklORzogZ2l2ZW4gdGhlIGFib3ZlLCB3ZSBBU1NVTUUgdGhpcyBmdW5jdGlvbiB3aWxsIE9OTFkgYmUgdXNlZCB0byBlbmNvZGUgdGhlCisJLy8gICAgICAgICAgYSBzaW5nbGUgVVJJICdwYXRoJywgJ3F1ZXJ5JyBvciAnZnJhZ21lbnQnIGNvbXBvbmVudCBhdCBhIHRpbWUhCisJZXNjYXBlUkZDMzk4NjogZnVuY3Rpb24ocykgeworCQlyZXR1cm4gZW5jb2RlVVJJKHMudG9TdHJpbmcoKSkucmVwbGFjZSgvXCsvZywgJyUyQicpLnJlcGxhY2UoLyMvZywgJyUyMycpOworCX0sCisJdW5lc2NhcGVSRkMzOTg2OiBmdW5jdGlvbihzKSB7CisJCXJldHVybiBkZWNvZGVVUkkocy50b1N0cmluZygpLnJlcGxhY2UoLyUyMy9nLCAnIycpLnJlcGxhY2UoLyUyQi9nLCAnKycpKTsKKwl9LAorCisJLy8gLT4gY2F0Y2ggYSBjbGljayBvbiBhbiBlbGVtZW50IGluIHRoZSBmaWxlL2ZvbGRlciBicm93c2VyCisJcmVsYXlDbGljazogZnVuY3Rpb24oZSwgZWwpIHsKKwkJaWYgKGUpIGUuc3RvcCgpOworCisJCS8vIGlmIHRoZSBjbGlja2VkIGVsZWxlbWVudCBpcyBmcm9tIHRoZSBwcmV2aWV3IGdhbGxlcnksIGdldCB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50CisJCWlmKGVsLnJldHJpZXZlKCdlbF9yZWYnKSkKKwkJCQllbCA9IGVsLnJldHJpZXZlKCdlbF9yZWYnKTsKKworCQkvLyBpZ25vcmUgbW91c2UgY2xpY2tzIHdoaWxlIGRyYWcmZHJvcCArIHJlc3VsdGluZyBjb3B5L21vdmUgaXMgcGVuZGluZy4KKwkJLy8KKwkJLy8gVGhlb3JldGljYWxseSBvbmx5IHRoZSBmaXJzdCBjbGljayBvcmlnaW5hdGVzIGZyb20gdGhlIHNhbWUgbW91c2UgZXZlbnQgYXMgdGhlICdkcm9wJyBldmVudCwgc28gd2UKKwkJLy8gQ09VTEQgcmVzZXQgJ2Ryb3BfcGVuZGluZycgYWZ0ZXIgcHJvY2Vzc2luZyB0aGF0IG9uZS4KKwkJaWYgKHRoaXMuZHJvcF9wZW5kaW5nICE9PSAwKQorCQl7CisJCQl0aGlzLmRyb3BfcGVuZGluZyA9IDA7CisJCX0KKwkJZWxzZQorCQl7CisJCQl0aGlzLnN0b3JlSGlzdG9yeSA9IHRydWU7CisKKwkJCXZhciBmaWxlID0gZWwucmV0cmlldmUoJ2ZpbGUnKTsKKwkJCXRoaXMuZGlhZy5sb2coJ29uIHJlbGF5Q2xpY2sgZmlsZSA9ICcsIGZpbGUsICcsIGN1cnJlbnQgZGlyZWN0b3J5OiAnLCB0aGlzLkN1cnJlbnREaXIsICdAIGVsID0gJywgZWwpOworCQkJaWYgKGVsLnJldHJpZXZlKCdlZGl0JykpIHsKKwkJCQllbC5lbGltaW5hdGUoJ2VkaXQnKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlpZiAoZmlsZS5taW1lID09PSAndGV4dC9kaXJlY3RvcnknKQorCQkJeworCQkJCWVsLmFkZENsYXNzKCdzZWxlY3RlZCcpOworCQkJCS8vIHJlc2V0IHRoZSBwYWdpbmcgdG8gcGFnZSAjMCBhcyB3ZSBjbGlja2VkIHRvIGNoYW5nZSBkaXJlY3RvcnkKKwkJCQl0aGlzLnN0b3JlX3ZpZXdfZmlsbF9zdGFydGluZGV4KDApOworCQkJCXRoaXMubG9hZChmaWxlLnBhdGgpOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJLy8gd2hlbiB3ZSdyZSByaWdodCBzbWFjayBpbiB0aGUgbWlkZGxlIG9mIGEgZHJhZyZkcm9wLCB3aGljaCBtYXkgZW5kIHVwIGFzIGEgTU9WRSwgZG8gTk9UIHNlbmQgYSAnZGV0YWlsJyByZXF1ZXN0CisJCQkvLyBhbG9uZ3NpZGUgKHRocm91Z2ggZmlsbEluZm8pIGFzIHRoYXQgbWF5IGxvY2sgdGhlIGZpbGUgYmVpbmcgbW92ZWQsIHNlcnZlci1zaWRlLgorCQkJLy8gSXQncyBnb29kIGVub3VnaCB0byBkaXNhYmxlIHRoZSBkZXRhaWwgdmlldywgaWYgd2Ugd2FudC9uZWVkIHRvLgorCQkJLy8KKwkJCS8vIE5vdGUgdGhhdCB0aGlzLmRyb3BfcGVuZGluZyB0cmFja3MgdGhlIHN0YXRlIG9mIHRoZSBkcmFnJmRyb3Agc3RhdGUgbWFjaGluZSAtLSBtb3JlIGZ1bmN0aW9ucyBtYXkgY2hlY2sgdGhpcyBvbmUhCisJCQlpZiAodGhpcy5DdXJyZW50KSB7CisJCQkJdGhpcy5DdXJyZW50LnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpOworCQkJfQorCQkJLy8gT05MWSBkbyB0aGlzIHdoZW4gd2UncmUgZG9pbmcgYSBDT1BZIG9yIG9uIGEgZmFpbGVkIGF0dGVtcHQuLi4KKwkJCS8vIENPUlJFQ1RJT046IGFzIGV2ZW4gYSBmYWlsZWQgJ2Ryb3AnIGFjdGlvbiB3aWxsIGhhdmUgbW92ZWQgdGhlIGN1cnNvciwgd2UgY2FuJ3Qga2VlcCB0aGlzIG9uZSBzZWxlY3RlZCByaWdodCBub3c6CisJCQl0aGlzLkN1cnJlbnQgPSBlbC5hZGRDbGFzcygnc2VsZWN0ZWQnKTsKKwkJCS8vIFdlIG5lZWQgdG8gaGF2ZSBDdXJyZW50IGFzc2lnbmVkIGJlZm9yZSBmaWxsSW5mbyBiZWNhdXNlIGZpbGxJbmZvIGFkZHMgdG8gaXQKKwkJCXRoaXMuZmlsbEluZm8oZmlsZSk7CisKKwkJCXRoaXMuc3dpdGNoQnV0dG9uNEN1cnJlbnQoKTsKKworCQkJLy8gLy8gLy8gbm93IG1ha2Ugc3VyZSB3ZSBjYW4gc2VlIHRoZSBzZWxlY3RlZCBpdGVtIGluIHRoZSBsZWZ0IHBhbmU6IHNjcm9sbCB0aGVyZToKKwkJCXRoaXMuYnJvd3NlclNlbGVjdGlvbignY3VycmVudCcpOworCQl9CisJfSwKKworLy8gUGFydGlrdWxlCisKKwkvKioKKwkqIENhdGNoZXMgZG91YmxlIGNsaWNrcyBhbmQgb3BlbiB0aGUgZmlsZSBpZiBzZWxlY3RhYmxlIGlzIHRydWUgKi8KKwlyZWxheURibENsaWNrOiBmdW5jdGlvbihlLCBlbCkKKwl7CisJCWlmKHRoaXMub3B0aW9ucy5zZWxlY3RhYmxlID09PSBmYWxzZSkKKwkJCXJldHVybjsKKwkJaWYgKGUpIGUuc3RvcCgpOworCisJCXRoaXMuZGlhZy5sb2coJ29uIHJlbGF5RGJsQ2xpY2sgZmlsZSA9ICcsIGVsLnJldHJpZXZlKCdmaWxlJyksICcsIGN1cnJlbnQgZGlyOiAnLCB0aGlzLkN1cnJlbnREaXIpOworCisJCXRoaXMudGlwcy5oaWRlKCk7CisKKwkJdGhpcy5DdXJyZW50RmlsZSA9IGVsLnJldHJpZXZlKCdmaWxlJyk7CisKKwkJaWYgKHRoaXMuQ3VycmVudEZpbGUubWltZSAhPT0gJ3RleHQvZGlyZWN0b3J5JykKKwkJCXRoaXMub3Blbl9vbl9jbGljayhudWxsKTsKKwl9LAorCisvLyAvUGFydGlrdWxlCisKKwl0b2dnbGVMaXN0OiBmdW5jdGlvbihlKSB7CisJCWlmIChlKSBlLnN0b3AoKTsKKyAgICBpZihlICYmIGUudGFyZ2V0ICYmIGRvY3VtZW50LmlkKGUudGFyZ2V0KS5yZXRyaWV2ZSgnc2V0JywgZmFsc2UpKSByZXR1cm47IC8vIEFscmVhZHkgU2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJCSQkKCcuZmlsZW1hbmFnZXItYnJvd3NlcmhlYWRlciBhLmxpc3RUeXBlJykuc2V0U3R5bGUoJ29wYWNpdHknLDAuNSk7CisJCWlmICghdGhpcy5icm93c2VyTWVudV90aHVtYi5yZXRyaWV2ZSgnc2V0JyxmYWxzZSkpIHsKKwkJCXRoaXMuYnJvd3Nlck1lbnVfbGlzdC5zdG9yZSgnc2V0JyxmYWxzZSk7CisJCQl0aGlzLmJyb3dzZXJNZW51X3RodW1iLnN0b3JlKCdzZXQnLHRydWUpLnNldFN0eWxlKCdvcGFjaXR5JywxKTsKKwkJCXRoaXMubGlzdFR5cGUgPSAndGh1bWInOworCQkJaWYgKHR5cGVvZiBqc0dFVCAhPT0gJ3VuZGVmaW5lZCcpIGpzR0VULnNldCgnZm1MaXN0VHlwZT10aHVtYicpOworCQl9IGVsc2UgeworCQkJdGhpcy5icm93c2VyTWVudV90aHVtYi5zdG9yZSgnc2V0JyxmYWxzZSk7CisJCQl0aGlzLmJyb3dzZXJNZW51X2xpc3Quc3RvcmUoJ3NldCcsdHJ1ZSkuc2V0U3R5bGUoJ29wYWNpdHknLDEpOworCQkJdGhpcy5saXN0VHlwZSA9ICdsaXN0JzsKKwkJCWlmICh0eXBlb2YganNHRVQgIT09ICd1bmRlZmluZWQnKSBqc0dFVC5zZXQoJ2ZtTGlzdFR5cGU9bGlzdCcpOworCQl9CisJCXRoaXMuZGlhZy5sb2coJ29uIHRvZ2dsZUxpc3QgZGlyID0gJywgdGhpcy5DdXJyZW50RGlyLCBlKTsKKworCQkvLyBhYm9ydCBhbnkgc3RpbGwgcnVubmluZyAoJ2FudGlxdWF0ZWQnKSBmaWxsIGNodW5rcyBhbmQgcmVzZXQgdGhlIHN0b3JlIGJlZm9yZSB3ZSBzZXQgdXAgYSBuZXcgb25lOgorCQl0aGlzLlJlcXVlc3RRdWV1ZS5jYW5jZWxfYnVsaygnZmlsbCcpOworCQljbGVhclRpbWVvdXQodGhpcy52aWV3X2ZpbGxfdGltZXIpOworCQl0aGlzLnZpZXdfZmlsbF90aW1lciA9IG51bGw7CisKKwkJdGhpcy5maWxsKG51bGwsIHRoaXMuZ2V0X3ZpZXdfZmlsbF9zdGFydGluZGV4KCksIHRoaXMubGlzdFBhZ2luYXRpb25MYXN0U2l6ZSk7CisJfSwKKworCS8qCisJICogR2V0cyBjYWxsZWQgZnJvbSB0aGUganNHRVQgbGlzdGVuZXIuCisJICoKKwkgKiBJcyBmaXJlZCBmb3IgdHdvIHJlYXNvbnM6CisJICoKKwkgKiAxKSB0aGUgdXNlciBjbGlja2VkIG9uIGEgZmlsZSBvciBkaXJlY3RvcnkgdG8gdmlldyBhbmQgdGhhdCBjaGFuZ2Ugd2FzIGFsc28gcHVzaGVkIHRvIHRoZSBoaXN0b3J5IHRocm91Z2ggb25lIG9yIG1vcmUganNHRVQuc2V0KCkgY2FsbHMuCisJICogICAgKEluIHRoaXMgY2FzZSwgd2UndmUgYWxyZWFkeSBkb25lIHdoYXQgbmVlZGVkIGRvaW5nLCBzbyB3ZSBzaG91bGQgbm90IHJlZG8gdGhhdCBlZmZvcnQgaW4gaGVyZSEpCisJICoKKwkgKiAyKSB0aGUgdXNlciB3ZW50IGJhY2sgaW4gYnJvd3NlciBoaXN0b3J5IG9yIG1hbnVhbGx5IGVkaXRlZCB0aGUgVVJJIGhhc2ggc2VjdGlvbi4KKwkgKiAgICAoVGhpcyBpcyBhbiAnY2hhbmdlIGZyb20gdGhlIG91dHNpZGUnIGFuZCBleGFjdGx5IHdoYXQgdGhpcyBsaXN0ZW5lciBpcyBmb3IuIFRoaXMgdGltZSBhcm91bmQsIHdlIHNob3VsZCBmb2xsb3cgdXAgb24gdGhvc2UgY2hhbmdlcyEpCisJICovCisJaGFzaEhpc3Rvcnk6IGZ1bmN0aW9uKHZhcnMpCisJeworCQl0aGlzLnN0b3JlSGlzdG9yeSA9IGZhbHNlOworCQl0aGlzLmRpYWcubG9nKCdoYXNIaXN0b3J5OicsIHZhcnMpOworCQlpZiAodmFycy5jaGFuZ2VkWydmbVBhdGgnXSA9PT0gJycpCisJCQl2YXJzLmNoYW5nZWRbJ2ZtUGF0aCddID0gJy8nOworCisJCU9iamVjdC5lYWNoKHZhcnMuY2hhbmdlZCwgZnVuY3Rpb24odmFsdWUsIGtleSkgeworCQkJdGhpcy5kaWFnLmxvZygnb24gaGFzaEhpc3Rvcnkga2V5ID0gJywga2V5LCAndmFsdWUgPSAnLCB2YWx1ZSk7CisJCQlzd2l0Y2ggKGtleSkKKwkJCXsKKwkJCWNhc2UgJ2ZtUGF0aCc6CisJCQkJaWYgKHRoaXMuQ3VycmVudERpciAmJiB0aGlzLkN1cnJlbnREaXIucGF0aCAhPT0gdmFsdWUpCisJCQkJeworCQkJCQl0aGlzLmxvYWQodmFsdWUpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSAnZm1GaWxlJzoKKwkJCQl2YXIgaG90X2l0ZW0gPSAodGhpcy5DdXJyZW50ICYmIHRoaXMuQ3VycmVudC5yZXRyaWV2ZSgnZmlsZScpKTsKKwkJCQlpZiAoaG90X2l0ZW0gPT09IG51bGwgfHwgdmFsdWUgIT09IGhvdF9pdGVtLm5hbWUpCisJCQkJeworCQkJCQl0aGlzLmJyb3dzZXIuZ2V0RWxlbWVudHMoJ3NwYW4uZmkgc3BhbicpLmVhY2goKGZ1bmN0aW9uKGN1cnJlbnQpCisJCQkJCXsKKwkJCQkJCWN1cnJlbnQuZ2V0UGFyZW50KCdzcGFuLmZpJykucmVtb3ZlQ2xhc3MoJ2hvdmVyJyk7CisJCQkJCQlpZiAoY3VycmVudC5nZXQoJ3RpdGxlJykgPT0gdmFsdWUpCisJCQkJCQl7CisJCQkJCQkJdGhpcy5kZXNlbGVjdChudWxsKTsKKwkJCQkJCQl0aGlzLkN1cnJlbnQgPSBjdXJyZW50LmdldFBhcmVudCgnc3Bhbi5maScpOworCQkJCQkJCW5ldyBGeC5TY3JvbGwodGhpcy5icm93c2VyU2Nyb2xsLHtkdXJhdGlvbjogJ3Nob3J0Jywgb2Zmc2V0OiB7eDogMCwgeTogLSh0aGlzLmJyb3dzZXJTY3JvbGwuZ2V0U2l6ZSgpLnkvNCl9fSkudG9FbGVtZW50KHRoaXMuQ3VycmVudCk7CisJCQkJCQkJdGhpcy5DdXJyZW50LmFkZENsYXNzKCdzZWxlY3RlZCcpOworCQkJCQkJCXRoaXMuZGlhZy5sb2coJ29uIGhhc2hIaXN0b3J5IEAgZmlsbEluZm8ga2V5ID0gJywga2V5LCAndmFsdWUgPSAnLCB2YWx1ZSwgJ3NvdXJjZSA9ICcsIGN1cnJlbnQsICdmaWxlID0gJywgY3VycmVudC5nZXRQYXJlbnQoJ3NwYW4uZmknKS5yZXRyaWV2ZSgnZmlsZScpKTsKKwkJCQkJCQl0aGlzLmZpbGxJbmZvKHRoaXMuQ3VycmVudC5yZXRyaWV2ZSgnZmlsZScpKTsKKwkJCQkJCX0KKwkJCQkJfSkuYmluZCh0aGlzKSk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9LHRoaXMpOworCX0sCisKKwkvLyBBZGQgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBhIHBhdGggKHJlbGF0aXZlIHRvIHRoZSBiYXNlIGRpcmVjdG9yeSkgYW5kIGEgZmlsZSB0byBwcmVzZWxlY3QKKwlzaG93OiBmdW5jdGlvbihlLCBsb2FkZGlyLCBwcmVzZWxlY3QpIHsKKwkJaWYgKGUpIGUuc3RvcCgpOworCisJCXRoaXMuZGlhZy5sb2coJ29uIHNob3c6ICcsIGUsICcsIGxvYWRkaXI6JywgbG9hZGRpciwgJywgcHJlc2VsZWN0OiAnLCBwcmVzZWxlY3QpOworCQlpZiAodGhpcy5mbVNob3duKSB7CisJCQlyZXR1cm47CisJCX0KKwkJdGhpcy5mbVNob3duID0gdHJ1ZTsKKworCQlpZiAodHlwZW9mIHByZXNlbGVjdCA9PT0gJ3VuZGVmaW5lZCcpIHByZXNlbGVjdCA9IG51bGw7CisJCWlmICh0eXBlb2YgbG9hZGRpciA9PT0gJ3VuZGVmaW5lZCcpIGxvYWRkaXIgPSBudWxsOworCisJCWlmIChsb2FkZGlyID09PSBudWxsICYmIHR5cGVvZiBqc0dFVCAhPT0gJ3VuZGVmaW5lZCcpCisJCXsKKwkJCWlmIChqc0dFVC5nZXQoJ2ZtUGF0aCcpICE9PSBudWxsKQorCQkJeworCQkJCWxvYWRkaXIgPSBqc0dFVC5nZXQoJ2ZtUGF0aCcpOworCQkJfQorCQl9CisJCWlmIChsb2FkZGlyID09PSBudWxsKQorCQl7CisJCQlpZiAodGhpcy5DdXJyZW50RGlyKQorCQkJeworCQkJCWxvYWRkaXIgPSB0aGlzLkN1cnJlbnREaXIucGF0aDsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlsb2FkZGlyID0gdGhpcy5vcHRpb25zLmRpcmVjdG9yeTsKKwkJCX0KKwkJfQorCisJCS8vIGdldCBhbmQgc2V0IGhpc3RvcnkKKwkJaWYgKHR5cGVvZiBqc0dFVCAhPT0gJ3VuZGVmaW5lZCcpIHsKKwkJCWlmIChqc0dFVC5nZXQoJ2ZtRmlsZScpKSB7CisJCQkJdGhpcy5kaWFnLmxvZygnb24gc2hvdzogc2V0IG9uU2hvdyBvbiBmbUZpbGU6ICcsIGpzR0VULmdldCgnZm1GaWxlJykpOworCQkJfQorCQkJaWYgKGpzR0VULmdldCgnZm1MaXN0VHlwZScpICE9PSBudWxsKSB7CisJCQkJJCQoJy5maWxlbWFuYWdlci1icm93c2VyaGVhZGVyIGEubGlzdFR5cGUnKS5zZXRTdHlsZSgnb3BhY2l0eScsMC41KTsKKwkJCQl0aGlzLmxpc3RUeXBlID0ganNHRVQuZ2V0KCdmbUxpc3RUeXBlJyk7CisJCQkJaWYgKHRoaXMubGlzdFR5cGUgPT09ICd0aHVtYicpCisJCQkJCXRoaXMuYnJvd3Nlck1lbnVfdGh1bWIuc3RvcmUoJ3NldCcsdHJ1ZSkuc2V0U3R5bGUoJ29wYWNpdHknLDEpOworCQkJCWVsc2UKKwkJCQkJdGhpcy5icm93c2VyTWVudV9saXN0LnN0b3JlKCdzZXQnLHRydWUpLnNldFN0eWxlKCdvcGFjaXR5JywxKTsKKwkJCX0KKwkJCWpzR0VULnNldCh7CisJCQkJJ2ZtSUQnOiB0aGlzLklELAorCQkJCSdmbVBhdGgnOiBsb2FkZGlyCisJCQl9KTsKKwkJCXRoaXMuaGFzaExpc3RlbmVySWQgPSBqc0dFVC5hZGRMaXN0ZW5lcih0aGlzLmhhc2hIaXN0b3J5LCBmYWxzZSwgdGhpcyk7CisJCX0KKworCQl0aGlzLmxvYWQobG9hZGRpciwgcHJlc2VsZWN0KTsKKwkJaWYgKCF0aGlzLm9wdGlvbnMuaGlkZU92ZXJsYXkpIHsKKwkJCXRoaXMub3ZlcmxheS5zaG93KCk7CisJCX0KKworCQl0aGlzLnNob3dfb3VyX2luZm9fc2VjdGlvbnMoZmFsc2UpOworCQl0aGlzLmNvbnRhaW5lci5mYWRlKDApLnNldFN0eWxlcyh7CisJCQkJZGlzcGxheTogJ2Jsb2NrJworCQkJfSk7CisKKwkJd2luZG93LmFkZEV2ZW50cyh7CisJCQknc2Nyb2xsJzogdGhpcy5ib3VuZC5zY3JvbGwsCisJCQkncmVzaXplJzogdGhpcy5ib3VuZC5zY3JvbGwKKwkJfSk7CisJCS8vIGFkZCBrZXlib2FyZCBuYXZpZ2F0aW9uCisJCXRoaXMuZGlhZy5sb2coJ2FkZCBrZXlib2FyZCBuYXYgb24gc2hvdyBmaWxlID0gJywgbG9hZGRpcik7CisJCWRvY3VtZW50LmFkZEV2ZW50KCdrZXlkb3duJywgdGhpcy5ib3VuZC5rZXlkb3duKTsKKwkJZG9jdW1lbnQuYWRkRXZlbnQoJ2tleXVwJywgdGhpcy5ib3VuZC5rZXl1cCk7CisJCWlmICgoQnJvd3Nlci5FbmdpbmUgJiYgKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQgfHwgQnJvd3Nlci5FbmdpbmUud2Via2l0KSkgfHwgKEJyb3dzZXIuaWUgfHwgQnJvd3Nlci5jaHJvbWUgfHwgQnJvd3Nlci5zYWZhcmkpKQorCQkJZG9jdW1lbnQuYWRkRXZlbnQoJ2tleWRvd24nLCB0aGlzLmJvdW5kLmtleWJvYXJkSW5wdXQpOworCQllbHNlCisJCQlkb2N1bWVudC5hZGRFdmVudCgna2V5cHJlc3MnLCB0aGlzLmJvdW5kLmtleWJvYXJkSW5wdXQpOworCQl0aGlzLmNvbnRhaW5lci5mYWRlKDEpOworCisJCXRoaXMuZml0U2l6ZXMoKTsKKwkJdGhpcy5maXJlRXZlbnQoJ3Nob3cnLCBbdGhpc10pOworCQl0aGlzLmZpcmVIb29rcygnc2hvdycpOworCisvLyBQYXJ0aWt1bGUgOiBJZiBub3Qgc3RhbmRhbG9uZSwgcmV0dXJucyB0aGUgSFRNTCBjb250ZW50CisJCWlmICghdGhpcy5vcHRpb25zLnN0YW5kYWxvbmUpCisJCXsKKwkJCXJldHVybiB0aGlzLmNvbnRhaW5lcjsKKwkJfQorLy8gL1BhcnRpa3VsZQorCX0sCisKKwloaWRlOiBmdW5jdGlvbihlKSB7CisJCWlmIChlKSBlLnN0b3AoKTsKKwkJdGhpcy5kaWFnLmxvZygnb24gaGlkZScsIGUsIHRoaXMpOworCQlpZiAoIXRoaXMuZm1TaG93bikgeworCQkJcmV0dXJuOworCQl9CisJCXRoaXMuZm1TaG93biA9IGZhbHNlOworCisJCS8vIHN0b3AgaGFzaExpc3RlbmVyCisJCWlmICh0eXBlb2YganNHRVQgIT09ICd1bmRlZmluZWQnKSB7CisJCQlqc0dFVC5yZW1vdmVMaXN0ZW5lcih0aGlzLmhhc2hMaXN0ZW5lcklkKTsKKwkJCWpzR0VULnJlbW92ZShbJ2ZtSUQnLCdmbVBhdGgnLCdmbUZpbGUnLCdmbUxpc3RUeXBlJywnZm1QYWdlSWR4J10pOworCQl9CisKKwkJaWYgKCF0aGlzLm9wdGlvbnMuaGlkZU92ZXJsYXkpIHsKKwkJCXRoaXMub3ZlcmxheS5oaWRlKCk7CisJCX0KKwkJdGhpcy50aXBzLmhpZGUoKTsKKwkJdGhpcy5icm93c2VyLmVtcHR5KCk7CisJCXRoaXMuY29udGFpbmVyLnNldFN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTsKKworCQkvLyByZW1vdmUga2V5Ym9hcmQgbmF2aWdhdGlvbgorCQl0aGlzLmRpYWcubG9nKCdSRU1PVkUga2V5Ym9hcmQgbmF2IG9uIGhpZGUnKTsKKwkJd2luZG93LnJlbW92ZUV2ZW50KCdzY3JvbGwnLCB0aGlzLmJvdW5kLnNjcm9sbCkucmVtb3ZlRXZlbnQoJ3Jlc2l6ZScsIHRoaXMuYm91bmQuc2Nyb2xsKTsKKwkJZG9jdW1lbnQucmVtb3ZlRXZlbnQoJ2tleWRvd24nLCB0aGlzLmJvdW5kLmtleWRvd24pOworCQlkb2N1bWVudC5yZW1vdmVFdmVudCgna2V5dXAnLCB0aGlzLmJvdW5kLmtleXVwKTsKKwkJaWYgKChCcm93c2VyLkVuZ2luZSAmJiAoQnJvd3Nlci5FbmdpbmUudHJpZGVudCB8fCBCcm93c2VyLkVuZ2luZS53ZWJraXQpKSB8fCAoQnJvd3Nlci5pZSB8fCBCcm93c2VyLmNocm9tZSB8fCBCcm93c2VyLnNhZmFyaSkpCisJCQlkb2N1bWVudC5yZW1vdmVFdmVudCgna2V5ZG93bicsIHRoaXMuYm91bmQua2V5Ym9hcmRJbnB1dCk7CisJCWVsc2UKKwkJCWRvY3VtZW50LnJlbW92ZUV2ZW50KCdrZXlwcmVzcycsIHRoaXMuYm91bmQua2V5Ym9hcmRJbnB1dCk7CisKKwkJdGhpcy5maXJlSG9va3MoJ2NsZWFudXAnKTsKKwkJdGhpcy5maXJlRXZlbnQoJ2hpZGUnLCBbdGhpc10pOworCX0sCisKKwkvLyBoaWRlIHRoZSBGTSBpbmZvIDxkaXY+cy4gZG8gTk9UIGhpZGUgdGhlIG91dGVyIGluZm8gPGRpdj4gaXRzZWxmLCBhcyB0aGUgVXBsb2FkZXIgKGFuZCBwb3NzaWJseSBvdGhlciBkZXJpdmF0aXZlcykgbWF5IGNob29zZSB0byBzaG93IHRoZWlyIG93biBjb250ZW50IHRoZXJlIQorCXNob3dfb3VyX2luZm9fc2VjdGlvbnM6IGZ1bmN0aW9uKHN0YXRlKSB7CisJCWlmICghc3RhdGUpCisJCXsKKwkJCXRoaXMuaW5mb19oZWFkLmZhZGUoMCkuZ2V0KCd0d2VlbicpLmNoYWluKGZ1bmN0aW9uKCkgeworCQkJCXRoaXMuZWxlbWVudC5zZXRTdHlsZSgnZGlzcGxheScsICdub25lJyk7CisJCQl9KTsKKwkJCXRoaXMucHJldmlld19hcmVhLmZhZGUoMCkuZ2V0KCd0d2VlbicpLmNoYWluKGZ1bmN0aW9uKCkgeworCQkJCXRoaXMuZWxlbWVudC5zZXRTdHlsZSgnZGlzcGxheScsICdub25lJyk7CisJCQl9KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXRoaXMuaW5mb19oZWFkLnNldFN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJykuZmFkZSgxKTsKKwkJCXRoaXMucHJldmlld19hcmVhLnNldFN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJykuZmFkZSgxKTsKKwkJfQorCX0sCisKKwlvcGVuX29uX2NsaWNrOiBmdW5jdGlvbihlKSB7CisJCWlmIChlKSBlLnN0b3AoKTsKKworCQlpZiAoIXRoaXMuQ3VycmVudCkKKwkJCXJldHVybjsKKworCQl2YXIgZmlsZSA9IHRoaXMuQ3VycmVudC5yZXRyaWV2ZSgnZmlsZScpOworCQl0aGlzLmZpcmVFdmVudCgnY29tcGxldGUnLCBbCisJCQkodGhpcy5vcHRpb25zLmRlbGl2ZXJQYXRoQXNMZWdhbFVSTCA/IGZpbGUucGF0aCA6IHRoaXMuZXNjYXBlUkZDMzk4Nih0aGlzLm5vcm1hbGl6ZSgnLycgKyB0aGlzLnJvb3QgKyBmaWxlLnBhdGgpKSksIC8vIHRoZSBhYnNvbHV0ZSBVUkwgZm9yIHRoZSBzZWxlY3RlZCBmaWxlLCByYXdVUkxlbmNvZGVkCisJCQlmaWxlLCAgICAgICAgICAgICAgICAgLy8gdGhlIGZpbGUgc3BlY3M6IC5uYW1lLCAucGF0aCwgLnNpemUsIC5kYXRlLCAubWltZSwgLmljb24sIC5pY29uNDgsIC50aHVtYjQ4LCAudGh1bWIyNTAKKwkJCXRoaXMKKwkJXSk7CisKKwkJLy8gT25seSBoaWRlIGlmIGhpZGVPblNlbGVjdCBpcyB0cnVlCisJCWlmICh0aGlzLm9wdGlvbnMuaGlkZU9uU2VsZWN0KQorCQl7CisJCQl0aGlzLmhpZGUoKTsKKwkJfQorCX0sCisKKwlkb3dubG9hZF9vbl9jbGljazogZnVuY3Rpb24oZSkgeworCQllLnN0b3AoKTsKKwkJaWYgKCF0aGlzLkN1cnJlbnQpIHsKKwkJCXJldHVybjsKKwkJfQorCQl0aGlzLmRpYWcubG9nKCdkb3dubG9hZDogJywgdGhpcy5DdXJyZW50LnJldHJpZXZlKCdmaWxlJykpOworCQl2YXIgZmlsZSA9IHRoaXMuQ3VycmVudC5yZXRyaWV2ZSgnZmlsZScpOworCQl0aGlzLmRvd25sb2FkKGZpbGUpOworCX0sCisKKwlkb3dubG9hZDogZnVuY3Rpb24oZmlsZSkgeworCQl2YXIgc2VsZiA9IHRoaXM7CisJCXZhciBkdW1teWZyYW1lX2FjdGl2ZSA9IGZhbHNlOworCisJCS8vIHRoZSBjaGFpbmVkIGRpc3BsYXk6bm9uZSBjb2RlIGluc2lkZSB0aGUgVGlwcyBjbGFzcyBkb2Vzbid0IGZpcmUgd2hlbiB0aGUgJ1NhdmUgQXMnIGRpYWxvZyBib3ggYXBwZWFycyByaWdodCBhd2F5IChoYXBwZW5zIGluIEZGMy42LjE1IGF0IGxlYXN0KToKKwkJaWYgKHRoaXMudGlwcy50aXApIHsKKwkJCXRoaXMudGlwcy50aXAuc2V0U3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpOworCQl9CisKKwkJLy8gZGlzY2FyZCBvbGQgaWZyYW1lLCBpZiBpdCBleGlzdHM6CisJCWlmICh0aGlzLmRvd25sb2FkSWZyYW1lKQorCQl7CisJCQkvLyByZW1vdmUgZnJvbSB0aGUgbWVudSAoZGlzcG9zZSkgYW5kIHRyYXNoIGl0IChkZXN0cm95KQorCQkJdGhpcy5kb3dubG9hZElmcmFtZS5kaXNwb3NlKCkuZGVzdHJveSgpOworCQkJdGhpcy5kb3dubG9hZElmcmFtZSA9IG51bGw7CisJCX0KKwkJaWYgKHRoaXMuZG93bmxvYWRGb3JtKQorCQl7CisJCQkvLyByZW1vdmUgZnJvbSB0aGUgbWVudSAoZGlzcG9zZSkgYW5kIHRyYXNoIGl0IChkZXN0cm95KQorCQkJdGhpcy5kb3dubG9hZEZvcm0uZGlzcG9zZSgpLmRlc3Ryb3koKTsKKwkJCXRoaXMuZG93bmxvYWRGb3JtID0gbnVsbDsKKwkJfQorCisJCXRoaXMuZG93bmxvYWRJZnJhbWUgPSBuZXcgSUZyYW1lKHsKKwkJCQlzcmM6ICdhYm91dDpibGFuaycsCisJCQkJbmFtZTogJ19kb3dubG9hZElmcmFtZScsCisJCQkJc3R5bGVzOiB7CisJCQkJCWRpc3BsYXk6ICdub25lJworCQkJCX0sCisJCQkgICAgZXZlbnRzOiB7CisJCQkJCWxvYWQ6IGZ1bmN0aW9uKCkKKwkJCQkJeworCQkJCQkJdmFyIGlmcmFtZSA9IHRoaXM7CisJCQkJCQlzZWxmLmRpYWcubG9nKCdkb3dubG9hZCByZXNwb25zZTogJywgdGhpcywgJywgaWZyYW1lOiAnLCBzZWxmLmRvd25sb2FkSWZyYW1lLCAnLCByZWFkeTogJywgKDEgKiBkdW1teWZyYW1lX2FjdGl2ZSkpOworCisJCQkJCQkvLyBtYWtlIHN1cmUgd2UgZG9uJ3QgYWN0IG9uIHByZW1hdHVyZSBmaXJpbmcgb2YgdGhlIGV2ZW50IGluIE1TSUUgLyBTYWZhcmkgYnJvd3NlcnM6CisJCQkJCQlpZiAoIWR1bW15ZnJhbWVfYWN0aXZlKQorCQkJCQkJCXJldHVybjsKKworCQkJCQkJdmFyIHJlc3BvbnNlID0gbnVsbDsKKwkJCQkJCUZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKSB7CisJCQkJCQkJCXJlc3BvbnNlID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudC5kb2N1bWVudEVsZW1lbnQudGV4dENvbnRlbnQ7CisJCQkJCQkJfSwKKwkJCQkJCQlmdW5jdGlvbigpIHsKKwkJCQkJCQkJcmVzcG9uc2UgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudC5pbm5lclRleHQ7CisJCQkJCQkJfSwKKwkJCQkJCQlmdW5jdGlvbigpIHsKKwkJCQkJCQkJcmVzcG9uc2UgPSBpZnJhbWUuY29udGVudERvY3VtZW50LmlubmVyVGV4dDsKKwkJCQkJCQl9LAorCQkJCQkJCWZ1bmN0aW9uKCkgeworCQkJCQkJCQlyZXNwb25zZSA9ICJ7c3RhdHVzOiAwLCBlcnJvcjogXCJEb3dubG9hZDogZG93bmxvYWQgYXNzdW1lZCBva2F5OiBjYW4ndCBmaW5kIHJlc3BvbnNlLlwifSI7CisJCQkJCQkJfQorCQkJCQkJKTsKKworCQkJCQkJdmFyIGogPSBKU09OLmRlY29kZShyZXNwb25zZSk7CisKKwkJCQkJCWlmIChqICYmICFqLnN0YXR1cykKKwkJCQkJCXsKKwkJCQkJCQlzZWxmLnNob3dFcnJvcignJyArIGouZXJyb3IpOworCQkJCQkJfQorCQkJCQkJZWxzZSBpZiAoIWopCisJCQkJCQl7CisJCQkJCQkJc2VsZi5zaG93RXJyb3IoJ2J1Z2dlciEgTm8gb3IgZmF1bHR5IEpTT04gcmVzcG9uc2UhICcgKyByZXNwb25zZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9KTsKKwkJdGhpcy5tZW51LmFkb3B0KHRoaXMuZG93bmxvYWRJZnJhbWUpOworCisJCXRoaXMuZG93bmxvYWRGb3JtID0gbmV3IEVsZW1lbnQoJ2Zvcm0nLCB7dGFyZ2V0OiAnX2Rvd25sb2FkSWZyYW1lJywgbWV0aG9kOiAncG9zdCcsIGVuY3R5cGU6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ30pOworCQl0aGlzLm1lbnUuYWRvcHQodGhpcy5kb3dubG9hZEZvcm0pOworCisJCXZhciB0eF9jZmcgPSB0aGlzLm9wdGlvbnMubWtTZXJ2ZXJSZXF1ZXN0VVJMKHRoaXMsICdkb3dubG9hZCcsIE9iamVjdC5tZXJnZSh7fSwKKwkJCQkJCXRoaXMub3B0aW9ucy5wcm9wYWdhdGVEYXRhLAorCQkJCQkJeworCQkJCQkJCWZpbGU6IGZpbGUucGF0aCwKKwkJCQkJCQlmaWx0ZXI6IHRoaXMub3B0aW9ucy5maWx0ZXIKKwkJCQkJCX0pKTsKKworCQl0aGlzLmRvd25sb2FkRm9ybS5hY3Rpb24gPSB0eF9jZmcudXJsOworCisJCU9iamVjdC5lYWNoKHR4X2NmZy5kYXRhLAorCQkJCQlmdW5jdGlvbih2LCBrKQorCQkJCQl7CisJCQkJCQl0aGlzLmRvd25sb2FkRm9ybS5hZG9wdCgobmV3IEVsZW1lbnQoJ2lucHV0JykpLnNldCh7dHlwZTogJ2hpZGRlbicsIG5hbWU6IGssIHZhbHVlOiB2fSkpOworCQkJCQl9LmJpbmQodGhpcykpOworCisJCWR1bW15ZnJhbWVfYWN0aXZlID0gdHJ1ZTsKKworCQlyZXR1cm4gdGhpcy5kb3dubG9hZEZvcm0uc3VibWl0KCk7CisJfSwKKworCWNyZWF0ZV9vbl9jbGljazogZnVuY3Rpb24oZSkgeworCQllLnN0b3AoKTsKKwkJdmFyIGlucHV0ID0gbmV3IEVsZW1lbnQoJ2lucHV0JywgeydjbGFzcyc6ICdjcmVhdGVEaXJlY3RvcnknfSk7CisJCXZhciBjbGlja19va19mID0gKGZ1bmN0aW9uKGUpIHsKKwkJCXRoaXMuZGlhZy5sb2coJ2NyZWF0ZSBvbiBjbGljazogS0VZQk9BUkQgaGFuZGxlcjoga2V5IHByZXNzOiAnLCBlKTsKKworCQkJaWYgKGUua2V5ID09PSAnZW50ZXInKSB7CisJCQkJZS5zdG9wUHJvcGFnYXRpb24oKTsKKwkJCQllLnRhcmdldC5nZXRQYXJlbnQoJ2Rpdi5maWxlbWFuYWdlci1kaWFsb2cnKS5nZXRFbGVtZW50KCdidXR0b24uZmlsZW1hbmFnZXItZGlhbG9nLWNvbmZpcm0nKS5maXJlRXZlbnQoJ2NsaWNrJyk7CisJCQl9CisJCX0pLmJpbmQodGhpcyk7CisKKwkJbmV3IEZpbGVNYW5hZ2VyLkRpYWxvZyh0aGlzLmxhbmd1YWdlLmNyZWF0ZWRpciwgeworCQkJbGFuZ3VhZ2U6IHsKKwkJCQljb25maXJtOiB0aGlzLmxhbmd1YWdlLmNyZWF0ZSwKKwkJCQlkZWNsaW5lOiB0aGlzLmxhbmd1YWdlLmNhbmNlbAorCQkJfSwKKwkJCWNvbnRlbnQ6IFsKKwkJCQlpbnB1dAorCQkJXSwKKwkJCWF1dG9mb2N1c19vbjogJ2lucHV0LmNyZWF0ZURpcmVjdG9yeScsCisJCQl6SW5kZXg6IHRoaXMub3B0aW9ucy56SW5kZXggKyA5MDAsCisJCQlvbk9wZW46IHRoaXMub25EaWFsb2dPcGVuLmJpbmQodGhpcyksCisJCQlvbkNsb3NlOiAoZnVuY3Rpb24oKSB7CisJCQkJaW5wdXQucmVtb3ZlRXZlbnQoJ2tleXVwJywgY2xpY2tfb2tfZik7CisJCQkJdGhpcy5vbkRpYWxvZ0Nsb3NlKCk7CisJCQl9KS5iaW5kKHRoaXMpLAorCQkJb25TaG93OiAoZnVuY3Rpb24oKSB7CisJCQkJdGhpcy5kaWFnLmxvZygnYWRkIGtleSB1cCBvbiBjcmVhdGUgZGlhbG9nOm9uU2hvdycpOworCQkJCWlucHV0LmFkZEV2ZW50KCdrZXl1cCcsIGNsaWNrX29rX2YpOworCQkJfSkuYmluZCh0aGlzKSwKKwkJCW9uQ29uZmlybTogKGZ1bmN0aW9uKCkgeworCQkJCWlmICh0aGlzLlJlcXVlc3QpIHRoaXMuUmVxdWVzdC5jYW5jZWwoKTsKKworCQkJCS8vIGFib3J0IGFueSBzdGlsbCBydW5uaW5nICgnYW50aXF1YXRlZCcpIGZpbGwgY2h1bmtzIGFuZCByZXNldCB0aGUgc3RvcmUgYmVmb3JlIHdlIHNldCB1cCBhIG5ldyBvbmU6CisJCQkJdGhpcy5yZXNldF92aWV3X2ZpbGxfc3RvcmUoKTsKKworCQkJCXZhciB0eF9jZmcgPSB0aGlzLm9wdGlvbnMubWtTZXJ2ZXJSZXF1ZXN0VVJMKHRoaXMsICdjcmVhdGUnLCB7CisJCQkJCQkJCWZpbGU6IGlucHV0LmdldCgndmFsdWUnKSwKKwkJCQkJCQkJZGlyZWN0b3J5OiB0aGlzLkN1cnJlbnREaXIucGF0aCwKKwkJCQkJCQkJZmlsdGVyOiB0aGlzLm9wdGlvbnMuZmlsdGVyCisJCQkJCQkJfSk7CisKKwkJCQl0aGlzLlJlcXVlc3QgPSBuZXcgRmlsZU1hbmFnZXIuUmVxdWVzdCh7CisJCQkJCXVybDogdHhfY2ZnLnVybCwKKwkJCQkJZGF0YTogdHhfY2ZnLmRhdGEsCisJCQkJCW9uUmVxdWVzdDogZnVuY3Rpb24oKSB7fSwKKwkJCQkJb25TdWNjZXNzOiAoZnVuY3Rpb24oaikgeworCQkJCQkJaWYgKCFqIHx8ICFqLnN0YXR1cykgeworCQkJCQkJCXRoaXMuYnJvd3NlckxvYWRlci5mYWRlKDApOworCQkJCQkJCXJldHVybjsKKwkJCQkJCX0KKworCQkJCQkJdGhpcy5kZXNlbGVjdChudWxsKTsKKwkJCQkJCXRoaXMuc2hvd19vdXJfaW5mb19zZWN0aW9ucyhmYWxzZSk7CisKKwkJCQkJCS8vIG1ha2Ugc3VyZSB3ZSBzdG9yZSB0aGUgSlNPTiBsaXN0IQorCQkJCQkJdGhpcy5yZXNldF92aWV3X2ZpbGxfc3RvcmUoaik7CisKKwkJCQkJCS8vIHRoZSAndmlldycgcmVxdWVzdCBtYXkgYmUgYW4gaW5pdGlhbCByZWxvYWQ6IGtlZXAgdGhlIHN0YXJ0aW5kZXggKD0gcGFnZSBzaG93bikgaW50YWN0IHRoZW46CisJCQkJCQl0aGlzLmZpbGwoaiwgdGhpcy5nZXRfdmlld19maWxsX3N0YXJ0aW5kZXgoKSk7CisJCQkJCX0pLmJpbmQodGhpcyksCisJCQkJCW9uQ29tcGxldGU6IGZ1bmN0aW9uKCkge30sCisJCQkJCW9uRXJyb3I6IChmdW5jdGlvbih0ZXh0LCBlcnJvcikgeworCQkJCQkJdGhpcy5icm93c2VyTG9hZGVyLmZhZGUoMCk7CisJCQkJCX0pLmJpbmQodGhpcyksCisJCQkJCW9uRmFpbHVyZTogKGZ1bmN0aW9uKHhtbEh0dHBSZXF1ZXN0KSB7CisJCQkJCQl0aGlzLmJyb3dzZXJMb2FkZXIuZmFkZSgwKTsKKwkJCQkJfSkuYmluZCh0aGlzKQorCQkJCX0sIHRoaXMpLnNlbmQoKTsKKwkJCX0pLmJpbmQodGhpcykKKwkJfSk7CisJfSwKKworCWRlc2VsZWN0OiBmdW5jdGlvbihlbCkgeworCQlpZiAoZWwgJiYgdGhpcy5DdXJyZW50ICE9IGVsKSB7CisJCQlyZXR1cm47CisJCX0KKwkJdGhpcy5kaWFnLmxvZygnZGVzZWxlY3Q6Q3VycmVudCcsIGVsKTsKKwkJaWYgKGVsKSB7CisJCQl0aGlzLmZpbGxJbmZvKCk7CisJCX0KKwkJaWYgKHRoaXMuQ3VycmVudCkgeworCQkJdGhpcy5DdXJyZW50LnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpOworCQl9CisJCXRoaXMuQ3VycmVudCA9IG51bGw7CisJCXRoaXMuc3dpdGNoQnV0dG9uNEN1cnJlbnQoKTsKKwl9LAorCisJLy8gYWRkIHRoZSBhYmlsaXR5IHRvIHByZXNlbGVjdCBhIGZpbGUgaW4gdGhlIGRpcgorCWxvYWQ6IGZ1bmN0aW9uKGRpciwgcHJlc2VsZWN0KSB7CisKKwkJaWYgKHR5cGVvZiBwcmVzZWxlY3QgPT09ICd1bmRlZmluZWQnKSBwcmVzZWxlY3QgPSBudWxsOworCisJCXRoaXMuZGVzZWxlY3QobnVsbCk7CisJCXRoaXMuc2hvd19vdXJfaW5mb19zZWN0aW9ucyhmYWxzZSk7CisKKwkJaWYgKHRoaXMuUmVxdWVzdCkgdGhpcy5SZXF1ZXN0LmNhbmNlbCgpOworCisJCXRoaXMuZGlhZy5sb2coIiMjIyAndmlldycgcmVxdWVzdDogb25SZXF1ZXN0IGludm9rZWQgQCBsb2FkKCk6ICIsIGRpciwgJywgcHJlc2VsZWN0OiAnLCBwcmVzZWxlY3QpOworCisJCS8vIGFib3J0IGFueSBzdGlsbCBydW5uaW5nICgnYW50aXF1YXRlZCcpIGZpbGwgY2h1bmtzIGFuZCByZXNldCB0aGUgc3RvcmUgYmVmb3JlIHdlIHNldCB1cCBhIG5ldyBvbmU6CisJCXRoaXMucmVzZXRfdmlld19maWxsX3N0b3JlKCk7CisKKwkJdmFyIHR4X2NmZyA9IHRoaXMub3B0aW9ucy5ta1NlcnZlclJlcXVlc3RVUkwodGhpcywgJ3ZpZXcnLCB7CisJCQkJCQlkaXJlY3Rvcnk6IGRpciwKKwkJCQkJCWZpbHRlcjogdGhpcy5vcHRpb25zLmZpbHRlciwKKwkJCQkJCWZpbGVfcHJlc2VsZWN0OiAocHJlc2VsZWN0IHx8ICcnKQorCQkJCQl9KTsKKworCQl0aGlzLmRpYWcubG9nKCdsb2FkKCk6IHZpZXcgVVJJOiAnLCBkaXIsIHRoaXMubGlzdFR5cGUsIHR4X2NmZyk7CisKKwkJdGhpcy5SZXF1ZXN0ID0gbmV3IEZpbGVNYW5hZ2VyLlJlcXVlc3QoeworCQkJdXJsOiB0eF9jZmcudXJsLAorCQkJZGF0YTogdHhfY2ZnLmRhdGEsCisJCQlvblJlcXVlc3Q6IGZ1bmN0aW9uKCkge30sCisJCQlvblN1Y2Nlc3M6IChmdW5jdGlvbihqKSB7CisJCQkJdGhpcy5kaWFnLmxvZygiIyMjICd2aWV3JyByZXF1ZXN0OiBvblN1Y2Nlc3MgaW52b2tlZCIsIGopOworCQkJCWlmICghaiB8fCAhai5zdGF0dXMpIHsKKwkJCQkJdGhpcy5icm93c2VyTG9hZGVyLmZhZGUoMCk7CisJCQkJCXJldHVybjsKKwkJCQl9CisgICAgICAgCisgICAgICAgaWYodGhpcy5saXN0VHlwZSA9PSAndGh1bWInICYmIChqLmZpbGVzLmxlbmd0aCArIGouZGlycy5sZW5ndGgpID4gdGhpcy5vcHRpb25zLmxpc3RNYXhTdWdnZXN0ZWREaXJTaXplRm9yVGh1bWJuYWlscykgCisgICAgICAgeworICAgICAgICAgIHRoaXMubGlzdFR5cGUgPSAnbGlzdCc7CisgICAgICAgICAgdGhpcy5icm93c2VyTWVudV90aHVtYi5zZXRTdHlsZSgnb3BhY2l0eScsMC41KTsKKyAgICAgICAgICB0aGlzLmJyb3dzZXJNZW51X2xpc3Quc2V0U3R5bGUoJ29wYWNpdHknLDEpOyAgICAgIAorICAgICAgICAgIHRoaXMuYnJvd3Nlck1lbnVfdGh1bWIuc3RvcmUoJ3NldCcsIGZhbHNlKTsKKyAgICAgICAgICB0aGlzLmJyb3dzZXJNZW51X2xpc3Quc3RvcmUoJ3NldCcsIHRydWUpOworICAgICAgIH0KKyAgICAgICAgIAorCQkJCS8vIG1ha2Ugc3VyZSB3ZSBzdG9yZSB0aGUgSlNPTiBsaXN0IQorCQkJCXRoaXMucmVzZXRfdmlld19maWxsX3N0b3JlKGopOworCisJCQkJLy8gdGhlICd2aWV3JyByZXF1ZXN0IG1heSBiZSBhbiBpbml0aWFsIHJlbG9hZDoga2VlcCB0aGUgc3RhcnRpbmRleCAoPSBwYWdlIHNob3duKSBpbnRhY3QgdGhlbjoKKwkJCQkvLyBYaW5oYTogYWRkIHRoZSBhYmlsaXR5IHRvIHByZXNlbGVjdCBhIGZpbGUgaW4gdGhlIGRpcgorCQkJCXZhciBzdGFydF9pZHggPSB0aGlzLmdldF92aWV3X2ZpbGxfc3RhcnRpbmRleCgpOworCQkJCXByZXNlbGVjdCA9IG51bGw7CisJCQkJaWYgKGoucHJlc2VsZWN0X2luZGV4ID4gMCkKKwkJCQl7CisJCQkJCXN0YXJ0X2lkeCA9IGoucHJlc2VsZWN0X2luZGV4IC0gMTsKKwkJCQkJcHJlc2VsZWN0ID0gai5wcmVzZWxlY3RfbmFtZTsKKwkJCQl9CisJCQkJdGhpcy5maWxsKGosIHN0YXJ0X2lkeCwgbnVsbCwgbnVsbCwgcHJlc2VsZWN0KTsKKwkJCX0pLmJpbmQodGhpcyksCisJCQlvbkNvbXBsZXRlOiAoZnVuY3Rpb24oKSB7CisJCQkJdGhpcy5kaWFnLmxvZygiIyMjICd2aWV3JyByZXF1ZXN0OiBvbkNvbXBsZXRlIGludm9rZWQiKTsKKwkJCQl0aGlzLmZpdFNpemVzKCk7CisJCQl9KS5iaW5kKHRoaXMpLAorCQkJb25FcnJvcjogKGZ1bmN0aW9uKHRleHQsIGVycm9yKSB7CisJCQkJLy8gYSBKU09OIGVycm9yCisJCQkJdGhpcy5kaWFnLmxvZygiIyMjICd2aWV3JyByZXF1ZXN0OiBvbkVycm9yIGludm9rZWQiLCB0ZXh0LCBlcnJvcik7CisJCQkJdGhpcy5icm93c2VyTG9hZGVyLmZhZGUoMCk7CisJCQl9KS5iaW5kKHRoaXMpLAorCQkJb25GYWlsdXJlOiAoZnVuY3Rpb24oeG1sSHR0cFJlcXVlc3QpIHsKKwkJCQkvLyBhIGdlbmVyaWMgKG5vbi1KU09OKSBjb21tdW5pY2F0aW9uIGZhaWx1cmUKKwkJCQl0aGlzLmRpYWcubG9nKCIjIyMgJ3ZpZXcnIHJlcXVlc3Q6IG9uRmFpbHVyZSBpbnZva2VkIiwgeG1sSHR0cFJlcXVlc3QpOworCQkJCXRoaXMuYnJvd3NlckxvYWRlci5mYWRlKDApOworCQkJfSkuYmluZCh0aGlzKQorCQl9LCB0aGlzKS5zZW5kKCk7CisJfSwKKworCWRlbGV0ZV9mcm9tX2RpcmNhY2hlOiBmdW5jdGlvbihmaWxlKQorCXsKKwkJdmFyIGl0ZW1zOworCQl2YXIgaTsKKworCQlpZiAodGhpcy52aWV3X2ZpbGxfanNvbikKKwkJeworCQkJaWYgKGZpbGUubWltZSA9PT0gJ3RleHQvZGlyZWN0b3J5JykKKwkJCXsKKwkJCQlpdGVtcyA9IHRoaXMudmlld19maWxsX2pzb24uZGlyczsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpdGVtcyA9IHRoaXMudmlld19maWxsX2pzb24uZmlsZXM7CisJCQl9CisKKwkJCWZvciAoaSA9IGl0ZW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKQorCQkJeworCQkJCXZhciBpdGVtID0gaXRlbXNbaV07CisJCQkJaWYgKGl0ZW0ubmFtZSA9PT0gZmlsZS5uYW1lKQorCQkJCXsKKwkJCQkJaXRlbXMuc3BsaWNlKGksIDEpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9LAorCisJZGVzdHJveV9ub1Fhc2tlZDogZnVuY3Rpb24oZmlsZSkgeworCisJCWlmICh0aGlzLlJlcXVlc3QpIHRoaXMuUmVxdWVzdC5jYW5jZWwoKTsKKworCQl0aGlzLmJyb3dzZXJMb2FkZXIuZmFkZSgxKTsKKworCQlpZiAoKHR5cGVvZiBqc0dFVCAhPT0gJ3VuZGVmaW5lZCcpICYmIHRoaXMuc3RvcmVIaXN0b3J5KQorCQl7CisJCQlpZiAoZmlsZS5taW1lICE9PSAndGV4dC9kaXJlY3RvcnknKQorCQkJeworCQkJCS8vIFRPRE86IHJlYWxseSwgYSBmdWxsIGNoZWNrIHNob3VsZCBhbHNvIGNoZWNrIHdoZXRoZXIgdGhlIGZtUGF0aCBlcXVhbHMgdGhlIHRoaXMuQ3VycmVudERpci5wYXRoCisJCQkJaWYgKGZpbGUubmFtZSA9PT0ganNHRVQuZ2V0KCdmbUZpbGUnKSkKKwkJCQl7CisJCQkJCS8vIHRoaXMgd2lsbCBlbnN1cmUgdGhlIHN1YnNlcXVlbnQgZmlsbCgpIGFjdGlvbiB3aWxsIHJldmVydCB0aGUgZGV0YWlsIHZpZXcgdG8gdGhlIGRpcmVjdG9yeSBkZXRhaWxzLgorCQkJCQlqc0dFVC5yZW1vdmUoWydmbUZpbGUnXSk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJdmFyIHR4X2NmZyA9IHRoaXMub3B0aW9ucy5ta1NlcnZlclJlcXVlc3RVUkwodGhpcywgJ2Rlc3Ryb3knLCB7CisJCQkJCQlmaWxlOiBmaWxlLm5hbWUsCisJCQkJCQlkaXJlY3Rvcnk6IHRoaXMuQ3VycmVudERpci5wYXRoLAorCQkJCQkJZmlsdGVyOiB0aGlzLm9wdGlvbnMuZmlsdGVyCisJCQkJCX0pOworCisJCXRoaXMuUmVxdWVzdCA9IG5ldyBGaWxlTWFuYWdlci5SZXF1ZXN0KHsKKwkJCXVybDogdHhfY2ZnLnVybCwKKwkJCWRhdGE6IHR4X2NmZy5kYXRhLAorCQkJb25SZXF1ZXN0OiBmdW5jdGlvbigpIHt9LAorCQkJb25TdWNjZXNzOiAoZnVuY3Rpb24oaikgeworCQkJCWlmICghaiB8fCAhai5zdGF0dXMpIHsKKwkJCQkJdGhpcy5icm93c2VyTG9hZGVyLmZhZGUoMCk7CisJCQkJCXJldHVybjsKKwkJCQl9CisKKwkJCQl0aGlzLmZpcmVFdmVudCgnbW9kaWZ5JywgW09iamVjdC5jbG9uZShmaWxlKSwgaiwgJ2Rlc3Ryb3knLCB0aGlzXSk7CisKKwkJCQkvLyByZW1vdmUgZW50cnkgZnJvbSBjYWNoZWQgSlNPTiBkaXJlY3RvcnkgbGlzdCBhbmQgcmVtb3ZlIHRoZSBpdGVtIGZyb20gdGhlIHZpZXcuCisJCQkJLy8gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHdoZW4gd29ya2luZyBvbiBhIHBhZ2luYXRlZCBkaXJlY3RvcnkgYW5kIGFmdGVyd2FyZHMgdGhlIHBhZ2VzIGFyZSBqdW1wZWQgYmFjayAmIGZvcnRoOgorCQkJCS8vIHRoZSBuZXh0IHRpbWUgYXJvdW5kLCB0aGlzIGl0ZW0gc2hvdWxkIE5PVCBhcHBlYXIgaW4gdGhlIGxpc3QgYW55bW9yZSEKKwkJCQl0aGlzLmRlc2VsZWN0KGZpbGUuZWxlbWVudCk7CisKKwkJCQl2YXIgcmVyZW5kZXJpbmdfbGlzdCA9IGZhbHNlOworCQkJCWlmICh0aGlzLnZpZXdfZmlsbF9qc29uKQorCQkJCXsKKwkJCQkJdGhpcy5kZWxldGVfZnJvbV9kaXJjYWNoZShmaWxlKTsgIC8qIGRvIE5PVCB1c2Ugai5uYW1lLCBhcyB0aGF0IG9uZSBjYW4gYmUgJ2NsZWFuZWQgdXAnIGFzIHBhcnQgb2YgdGhlICdtb3ZlJyBvcGVyYXRpb24hICovCisKKwkJCQkJLy8gbWlub3IgY2F2ZWF0OiB3aGVuIHdlIHBhZ2luYXRlIHRoZSBkaXJlY3RvcnkgbGlzdCwgdGhlbiBicm93c2luZyB0byB0aGUgbmV4dCBwYWdlIHdpbGwgc2tpcCBvbmUgaXRlbSAod2hpY2ggd291bGQKKwkJCQkJLy8gaGF2ZSBiZWVuIHRoZSBmaXJzdCBvbiB0aGUgbmV4dCBwYWdlKS4gVGhlIGJydXRlLWZvcmNlIGZpeCBmb3IgdGhpcyBpcyB0byBmb3JjZSBhIHJlLXJlbmRlciBvZiB0aGUgcGFnZSB3aGVuIGluCisJCQkJCS8vIHBhZ2luYXRpb24gdmlldyBtb2RlOgorCQkJCQlpZiAodGhpcy52aWV3X2ZpbGxfanNvbi5kaXJzLmxlbmd0aCArIHRoaXMudmlld19maWxsX2pzb24uZmlsZXMubGVuZ3RoID4gdGhpcy5saXN0UGFnaW5hdGlvbkxhc3RTaXplKQorCQkJCQl7CisJCQkJCQkvLyBzaW1pbGFyIGFjdGl2aXR5IGFzIGxvYWQoKSwgYnV0IHdpdGhvdXQgdGhlIHNlcnZlciBjb21tdW5pY2F0aW9uLi4uCisKKwkJCQkJCS8vIGFib3J0IGFueSBzdGlsbCBydW5uaW5nICgnYW50aXF1YXRlZCcpIGZpbGwgY2h1bmtzIGFuZCByZXNldCB0aGUgc3RvcmUgYmVmb3JlIHdlIHNldCB1cCBhIG5ldyBvbmU6CisJCQkJCQl0aGlzLlJlcXVlc3RRdWV1ZS5jYW5jZWxfYnVsaygnZmlsbCcpOworCQkJCQkJY2xlYXJUaW1lb3V0KHRoaXMudmlld19maWxsX3RpbWVyKTsKKwkJCQkJCXRoaXMudmlld19maWxsX3RpbWVyID0gbnVsbDsKKworCQkJCQkJLy8gd2FzIGhlcmUgYmVmb3JlCisJCQkJCX0KKwkJCQl9CisKKwkJCQkvLyAtPiBtb3ZlIHRoaXMgaGVyZSwgc28gaXQgYWx3YXlzIHJlbG9hZHMgdGhlIHRodW1ibmFpbCBwYW5lIGluIHRoZSBwcmV2aWV3IHdpbmRvdworCQkJCQkJcmVyZW5kZXJpbmdfbGlzdCA9IHRydWU7CisJCQkJCQl0aGlzLmZpbGwobnVsbCwgdGhpcy5nZXRfdmlld19maWxsX3N0YXJ0aW5kZXgoKSwgdGhpcy5saXN0UGFnaW5hdGlvbkxhc3RTaXplKTsKKworCQkJCS8vIG1ha2Ugc3VyZSBmYWRlIGRvZXMgbm90IGNsYXNoIHdpdGggcGFyYWxsZWwgZGlyZWN0b3J5IChyZSlsb2FkOgorCQkJCWlmICghcmVyZW5kZXJpbmdfbGlzdCkKKwkJCQl7CisJCQkJCXZhciBwID0gZmlsZS5lbGVtZW50LmdldFBhcmVudCgpOworCQkJCQlpZiAocCkgeworCQkJCQkJcC5mYWRlKDApLmdldCgndHdlZW4nKS5jaGFpbihmdW5jdGlvbigpIHsKKwkJCQkJCQl0aGlzLmVsZW1lbnQuZGVzdHJveSgpOworCQkJCQkJfSk7CisJCQkJCX0KKwkJCQl9CisJCQkJdGhpcy5icm93c2VyTG9hZGVyLmZhZGUoMCk7CisKKwkJCQkvLyBjbGVhciBwcmV2aWV3IHBhbmUgdGh1bWJuYWlscworCQkJCS8vIHRoaXMuZGlyX2ZpbGVsaXN0LmVtcHR5KCk7CisKKwkJCX0pLmJpbmQodGhpcyksCisJCQlvbkNvbXBsZXRlOiBmdW5jdGlvbigpIHt9LAorCQkJb25FcnJvcjogKGZ1bmN0aW9uKHRleHQsIGVycm9yKSB7CisJCQkJdGhpcy5icm93c2VyTG9hZGVyLmZhZGUoMCk7CisJCQl9KS5iaW5kKHRoaXMpLAorCQkJb25GYWlsdXJlOiAoZnVuY3Rpb24oeG1sSHR0cFJlcXVlc3QpIHsKKwkJCQl0aGlzLmJyb3dzZXJMb2FkZXIuZmFkZSgwKTsKKwkJCX0pLmJpbmQodGhpcykKKwkJfSwgdGhpcykuc2VuZCgpOworCX0sCisKKwlkZXN0cm95OiBmdW5jdGlvbihmaWxlKSB7CisJCWlmICh0aGlzLm9wdGlvbnMuaGlkZU9uRGVsZXRlKSB7CisJCQl0aGlzLmRlc3Ryb3lfbm9RYXNrZWQoZmlsZSk7CisJCX0KKwkJZWxzZSB7CisJCQluZXcgRmlsZU1hbmFnZXIuRGlhbG9nKHRoaXMubGFuZ3VhZ2UuZGVzdHJveWZpbGUsIHsKKwkJCQlsYW5ndWFnZTogeworCQkJCQljb25maXJtOiB0aGlzLmxhbmd1YWdlLmRlc3Ryb3ksCisJCQkJCWRlY2xpbmU6IHRoaXMubGFuZ3VhZ2UuY2FuY2VsCisJCQkJfSwKKwkJCQl6SW5kZXg6IHRoaXMub3B0aW9ucy56SW5kZXggKyA5MDAsCisJCQkJb25PcGVuOiB0aGlzLm9uRGlhbG9nT3Blbi5iaW5kKHRoaXMpLAorCQkJCW9uQ2xvc2U6IHRoaXMub25EaWFsb2dDbG9zZS5iaW5kKHRoaXMpLAorCQkJCW9uQ29uZmlybTogKGZ1bmN0aW9uKCkgeworCQkJCQl0aGlzLmRlc3Ryb3lfbm9RYXNrZWQoZmlsZSk7CisJCQkJfSkuYmluZCh0aGlzKQorCQkJfSk7CisJCX0KKwl9LAorCisJcmVuYW1lOiBmdW5jdGlvbihmaWxlKSB7CisJCXZhciBuYW1lID0gZmlsZS5uYW1lOworCQl2YXIgaW5wdXQgPSBuZXcgRWxlbWVudCgnaW5wdXQnLCB7J2NsYXNzJzogJ3JlbmFtZScsIHZhbHVlOiBuYW1lfSk7CisKKwkJdGhpcy5kaWFnLmxvZygnIyMjIHJlbmFtZTogJywgT2JqZWN0LmNsb25lKGZpbGUpKTsKKworCQluZXcgRmlsZU1hbmFnZXIuRGlhbG9nKHRoaXMubGFuZ3VhZ2UucmVuYW1lZmlsZSwgeworCQkJbGFuZ3VhZ2U6IHsKKwkJCQljb25maXJtOiB0aGlzLmxhbmd1YWdlLnJlbmFtZSwKKwkJCQlkZWNsaW5lOiB0aGlzLmxhbmd1YWdlLmNhbmNlbAorCQkJfSwKKwkJCWNvbnRlbnQ6IFsKKwkJCQlpbnB1dAorCQkJXSwKKwkJCWF1dG9mb2N1c19vbjogJ2lucHV0LnJlbmFtZScsCisJCQl6SW5kZXg6IHRoaXMub3B0aW9ucy56SW5kZXggKyA5MDAsCisJCQlvbk9wZW46IHRoaXMub25EaWFsb2dPcGVuLmJpbmQodGhpcyksCisJCQlvbkNsb3NlOiB0aGlzLm9uRGlhbG9nQ2xvc2UuYmluZCh0aGlzKSwKKwkJCW9uU2hvdzogKGZ1bmN0aW9uKCkgeworCQkJCXRoaXMuZGlhZy5sb2coJ2FkZCBrZXkgdXAgb24gcmVuYW1lIGRpYWxvZzpvblNob3cnKTsKKwkJCQlpbnB1dC5hZGRFdmVudCgna2V5dXAnLCAoZnVuY3Rpb24oZSkgeworCQkJCQl0aGlzLmRpYWcubG9nKCdyZW5hbWU6IEtFWUJPQVJEIGhhbmRsZXI6IGtleSBwcmVzczogJywgZSk7CisKKwkJCQkJaWYgKGUua2V5ID09PSAnZW50ZXInKSB7CisJCQkJCQllLnN0b3BQcm9wYWdhdGlvbigpOworCQkJCQkJZS50YXJnZXQuZ2V0UGFyZW50KCdkaXYuZmlsZW1hbmFnZXItZGlhbG9nJykuZ2V0RWxlbWVudCgnYnV0dG9uLmZpbGVtYW5hZ2VyLWRpYWxvZy1jb25maXJtJykuZmlyZUV2ZW50KCdjbGljaycpOworCQkJCQl9CisJCQkJfSkuYmluZCh0aGlzKSk7CisJCQl9KS5iaW5kKHRoaXMpLAorCQkJb25Db25maXJtOiAoZnVuY3Rpb24oKSB7CisJCQkJaWYgKHRoaXMuUmVxdWVzdCkgdGhpcy5SZXF1ZXN0LmNhbmNlbCgpOworCisJCQkJdGhpcy5icm93c2VyTG9hZGVyLmZhZGUoMSk7CisKKwkJCQl0aGlzLmRpYWcubG9nKCcjIyMgcmVuYW1lOiBnb2luZyB0byByZW5hbWU6ICcsIE9iamVjdC5jbG9uZShmaWxlKSwgJyB0byAnLCBpbnB1dC5nZXQoJ3ZhbHVlJykpOworCisJCQkJdmFyIHR4X2NmZyA9IHRoaXMub3B0aW9ucy5ta1NlcnZlclJlcXVlc3RVUkwodGhpcywgJ21vdmUnLCB7CisJCQkJCQkJCWZpbGU6IGZpbGUubmFtZSwKKwkJCQkJCQkJbmFtZTogaW5wdXQuZ2V0KCd2YWx1ZScpLAorCQkJCQkJCQlkaXJlY3Rvcnk6IHRoaXMuQ3VycmVudERpci5wYXRoLAorCQkJCQkJCQlmaWx0ZXI6IHRoaXMub3B0aW9ucy5maWx0ZXIKKwkJCQkJCQl9KTsKKworCQkJCXRoaXMuUmVxdWVzdCA9IG5ldyBGaWxlTWFuYWdlci5SZXF1ZXN0KHsKKwkJCQkJdXJsOiB0eF9jZmcudXJsLAorCQkJCQlkYXRhOiB0eF9jZmcuZGF0YSwKKwkJCQkJb25SZXF1ZXN0OiBmdW5jdGlvbigpIHt9LAorCQkJCQlvblN1Y2Nlc3M6IChmdW5jdGlvbihqKSB7CisJCQkJCQlpZiAoIWogfHwgIWouc3RhdHVzKSB7CisJCQkJCQkJdGhpcy5icm93c2VyTG9hZGVyLmZhZGUoMCk7CisJCQkJCQkJcmV0dXJuOworCQkJCQkJfQorCQkJCQkJdGhpcy5kaWFnLmxvZygnbW92ZSA6IG9uU3VjY2VzczogZmlsZSA9ICcsIE9iamVjdC5jbG9uZShmaWxlKSwgJywganNvbjogJywgaik7CisJCQkJCQl0aGlzLmZpcmVFdmVudCgnbW9kaWZ5JywgW09iamVjdC5jbG9uZShmaWxlKSwgaiwgJ3JlbmFtZScsIHRoaXNdKTsKKwkJCQkJCWZpbGUuZWxlbWVudC5nZXRFbGVtZW50KCdzcGFuLmZpbGVtYW5hZ2VyLWZpbGVuYW1lJykuc2V0KCd0ZXh0Jywgai5uYW1lKS5zZXQoJ3RpdGxlJywgai5uYW1lKTsKKwkJCQkJCWZpbGUuZWxlbWVudC5hZGRDbGFzcygnc2VsZWN0ZWQnKTsKKwkJCQkJCWZpbGUubmFtZSA9IGoubmFtZTsKKwkJCQkJCXRoaXMuZGlhZy5sb2coJ21vdmUgOiBvblN1Y2Nlc3MgZ29pbmcgdG8gZmlsbEluZm86IGZpbGUgPSAnLCBPYmplY3QuY2xvbmUoZmlsZSksICcsIGpzb246ICcsIGopOworCQkJCQkJdGhpcy5maWxsSW5mbyhmaWxlKTsKKwkJCQkJCXRoaXMuYnJvd3NlckxvYWRlci5mYWRlKDApOworCQkJCQl9KS5iaW5kKHRoaXMpLAorCQkJCQlvbkNvbXBsZXRlOiBmdW5jdGlvbigpIHt9LAorCQkJCQlvbkVycm9yOiAoZnVuY3Rpb24odGV4dCwgZXJyb3IpIHsKKwkJCQkJCXRoaXMuYnJvd3NlckxvYWRlci5mYWRlKDApOworCQkJCQl9KS5iaW5kKHRoaXMpLAorCQkJCQlvbkZhaWx1cmU6IChmdW5jdGlvbih4bWxIdHRwUmVxdWVzdCkgeworCQkJCQkJdGhpcy5icm93c2VyTG9hZGVyLmZhZGUoMCk7CisJCQkJCX0pLmJpbmQodGhpcykKKwkJCQl9LCB0aGlzKS5zZW5kKCk7CisJCQl9KS5iaW5kKHRoaXMpCisJCX0pOworCX0sCisKKwlicm93c2VyU2VsZWN0aW9uOiBmdW5jdGlvbihkaXJlY3Rpb24pIHsKKwkJdmFyIGNzZWwsY3VycmVudDsKKworCQl0aGlzLmRpYWcubG9nKCdicm93c2VyU2VsZWN0aW9uIDogZGlyZWN0aW9uID0gJywgZGlyZWN0aW9uKTsKKwkJaWYgKHRoaXMuYnJvd3Nlci5nZXRFbGVtZW50KCdsaScpID09PSBudWxsKSByZXR1cm47CisKKwkJaWYgKGRpcmVjdGlvbiA9PT0gJ2dvLWJvdHRvbScpCisJCXsKKwkJCS8vIHNlbGVjdCBmaXJzdCBpdGVtIG9mIG5leHQgcGFnZQorCQkJY3VycmVudCA9IHRoaXMuYnJvd3Nlci5nZXRGaXJzdCgnbGknKS5nZXRFbGVtZW50KCdzcGFuLmZpJyk7CisKKwkJCS8vIGJsb3cgYXdheSBhbnkgbGluZ2VyaW5nICdzZWxlY3RlZCcgYWZ0ZXIgYSBwYWdlIHN3aXRjaCBsaWtlIHRoYXQKKwkJCWNzZWwgPSB0aGlzLmJyb3dzZXIuZ2V0RWxlbWVudCgnc3Bhbi5maS5zZWxlY3RlZCcpOworCQkJaWYgKGNzZWwgIT09IG51bGwpCisJCQkJY3NlbC5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTsKKwkJfQorCQllbHNlIGlmIChkaXJlY3Rpb24gPT09ICdnby10b3AnKQorCQl7CisJCQkvLyBzZWxlY3QgbGFzdCBpdGVtIG9mIHByZXZpb3VzIHBhZ2UKKwkJCWN1cnJlbnQgPSB0aGlzLmJyb3dzZXIuZ2V0TGFzdCgnbGknKS5nZXRFbGVtZW50KCdzcGFuLmZpJyk7CisKKwkJCS8vIGJsb3cgYXdheSBhbnkgbGluZ2VyaW5nICdzZWxlY3RlZCcgYWZ0ZXIgYSBwYWdlIHN3aXRjaCBsaWtlIHRoYXQKKwkJCWNzZWwgPSB0aGlzLmJyb3dzZXIuZ2V0RWxlbWVudCgnc3Bhbi5maS5zZWxlY3RlZCcpOworCQkJaWYgKGNzZWwgIT09IG51bGwpCisJCQkJY3NlbC5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTsKKwkJfQorCQllbHNlIGlmICh0aGlzLmJyb3dzZXIuZ2V0RWxlbWVudCgnc3Bhbi5maS5ob3ZlcicpID09PSBudWxsICYmIHRoaXMuYnJvd3Nlci5nZXRFbGVtZW50KCdzcGFuLmZpLnNlbGVjdGVkJykgPT09IG51bGwpCisJCXsKKwkJCS8vIG5vbmUgaXMgc2VsZWN0ZWQ6IHNlbGVjdCBmaXJzdCBpdGVtIChmb2xkZXIvZmlsZSkKKwkJCWN1cnJlbnQgPSB0aGlzLmJyb3dzZXIuZ2V0Rmlyc3QoJ2xpJykuZ2V0RWxlbWVudCgnc3Bhbi5maScpOworCQl9CisJCWVsc2UgaWYoZGlyZWN0aW9uID09PSAnY3VycmVudCcpIHsKKwkJCWN1cnJlbnQgPSB0aGlzLkN1cnJlbnQ7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvLyBzZWxlY3QgdGhlIGN1cnJlbnQgZmlsZS9mb2xkZXIgb3IgdGhlIG9uZSB3aXRoIGhvdmVyCisJCQljdXJyZW50ID0gbnVsbDsKKwkJCWlmICh0aGlzLmJyb3dzZXIuZ2V0RWxlbWVudCgnc3Bhbi5maS5ob3ZlcicpID09PSBudWxsICYmIHRoaXMuYnJvd3Nlci5nZXRFbGVtZW50KCdzcGFuLmZpLnNlbGVjdGVkJykgIT09IG51bGwpIHsKKwkJCQljdXJyZW50ID0gdGhpcy5icm93c2VyLmdldEVsZW1lbnQoJ3NwYW4uZmkuc2VsZWN0ZWQnKTsKKwkJCX0KKwkJCWVsc2UgaWYgKHRoaXMuYnJvd3Nlci5nZXRFbGVtZW50KCdzcGFuLmZpLmhvdmVyJykgIT09IG51bGwpIHsKKwkJCQljdXJyZW50ID0gdGhpcy5icm93c2VyLmdldEVsZW1lbnQoJ3NwYW4uZmkuaG92ZXInKTsKKwkJCX0KKwkJfQorCisJCXRoaXMuYnJvd3Nlci5nZXRFbGVtZW50cygnc3Bhbi5maS5ob3ZlcicpLmVhY2goZnVuY3Rpb24oc3BhbikgeworCQkJc3Bhbi5yZW1vdmVDbGFzcygnaG92ZXInKTsKKwkJfSk7CisKKwkJdmFyIHN0ZXBzaXplID0gMSwgbmV4dCwgY3VycmVudEZpbGU7CisKKwkJc3dpdGNoIChkaXJlY3Rpb24pIHsKKwkJLy8gZ28gZG93bgorCQljYXNlICdlbmQnOgorCQkJc3RlcHNpemUgPSAxRTU7CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlICdwYWdlZG93bic6CisJCQlpZiAoc3RlcHNpemUgPT0gMSkgeworCQkJCWlmIChjdXJyZW50LmdldFBvc2l0aW9uKHRoaXMuYnJvd3NlclNjcm9sbCkueSArIGN1cnJlbnQuZ2V0U2l6ZSgpLnkgKiAyIDwgdGhpcy5icm93c2VyU2Nyb2xsLmdldFNpemUoKS55KSB7CisJCQkJCXN0ZXBzaXplID0gTWF0aC5mbG9vcigodGhpcy5icm93c2VyU2Nyb2xsLmdldFNpemUoKS55IC0gY3VycmVudC5nZXRQb3NpdGlvbih0aGlzLmJyb3dzZXJTY3JvbGwpLnkpIC8gY3VycmVudC5nZXRTaXplKCkueSkgLSAxOworCQkJCQlpZiAoc3RlcHNpemUgPCAxKQorCQkJCQkJc3RlcHNpemUgPSAxOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3RlcHNpemUgPSBNYXRoLmZsb29yKHRoaXMuYnJvd3NlclNjcm9sbC5nZXRTaXplKCkueSAvIGN1cnJlbnQuZ2V0U2l6ZSgpLnkpOworCQkJCX0KKwkJCX0KKwkJCS8qIGZhbGx0aHJvdWdoICovCisJCWNhc2UgJ2Rvd24nOgorCQkJY3VycmVudCA9IGN1cnJlbnQuZ2V0UGFyZW50KCdsaScpOworCQkJdGhpcy5kaWFnLmxvZygna2V5IERPV046IHN0ZXBzaXplID0gJywgc3RlcHNpemUpOworCisJCQkvLyB3aGVuIHdlJ3JlIGF0IHRoZSBib3R0b20gb2YgdGhlIHZpZXcgYW5kIHRoZXJlIGFyZSBtb3JlIHBhZ2VzLCBnbyB0byB0aGUgbmV4dCBwYWdlOgorCQkJbmV4dCA9IGN1cnJlbnQuZ2V0TmV4dCgnbGknKTsKKwkJCWlmIChuZXh0ID09PSBudWxsKQorCQkJeworCQkJCWlmICh0aGlzLnBhZ2luZ19nb3RvX25leHQobnVsbCwgJ2dvLWJvdHRvbScpKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlmb3IgKCA7IHN0ZXBzaXplID4gMDsgc3RlcHNpemUtLSkgeworCQkJCQluZXh0ID0gY3VycmVudC5nZXROZXh0KCdsaScpOworCQkJCQlpZiAobmV4dCA9PT0gbnVsbCkKKwkJCQkJCWJyZWFrOworCQkJCQljdXJyZW50ID0gbmV4dDsKKwkJCQl9CisJCQl9CisJCQljdXJyZW50ID0gY3VycmVudC5nZXRFbGVtZW50KCdzcGFuLmZpJyk7CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlICdnby1ib3R0b20nOiAgICAgICAgLy8gJ2Zha2VkJyBrZXkgc2VudCB3aGVuIGRvbmUgc2hpZnRpbmcgb25lIHBhZ2luYXRpb24gcGFnZSBkb3duCisJCQljdXJyZW50LmFkZENsYXNzKCdob3ZlcicpOworCQkJdGhpcy5DdXJyZW50ID0gY3VycmVudDsKKwkJCWRpcmVjdGlvbiA9ICdkb3duJzsKKwkJCWJyZWFrOworCisJCS8vIGdvIHVwCisJCWNhc2UgJ2hvbWUnOgorCQkJc3RlcHNpemUgPSAxRTU7CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlICdwYWdldXAnOgorCQkJaWYgKHN0ZXBzaXplID09IDEpIHsKKwkJCQkvLyB3aGVuIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXdwb3J0LCBhIGZ1bGwgcGFnZSBzY3JvbGwgYWxyZWFkeSBoYXBwZW5zIC92aXN1YWxseS8gd2hlbiB5b3UgZ28gdXAgMTogdGhhdCBvbmUgd2lsbCBlbmQgdXAgYXQgdGhlIC9ib3R0b20vLCBhZnRlciBhbGwuCisJCQkJc3RlcHNpemUgPSBNYXRoLmZsb29yKGN1cnJlbnQuZ2V0UG9zaXRpb24odGhpcy5icm93c2VyU2Nyb2xsKS55IC8gY3VycmVudC5nZXRTaXplKCkueSk7CisJCQkJaWYgKHN0ZXBzaXplIDwgMSkKKwkJCQkJc3RlcHNpemUgPSAxOworCQkJfQorCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSAndXAnOgorCQkJY3VycmVudCA9IGN1cnJlbnQuZ2V0UGFyZW50KCdsaScpOworCQkJdGhpcy5kaWFnLmxvZygna2V5IFVQOiBzdGVwc2l6ZSA9ICcsIHN0ZXBzaXplKTsKKworCQkJLy8gd2hlbiB3ZSdyZSBhdCB0aGUgdG9wIG9mIHRoZSB2aWV3IGFuZCB0aGVyZSBhcmUgcGFnZXMgYmVmb3JlIHVzLCBnbyB0byB0aGUgcHJldmlvdXMgcGFnZToKKwkJCXZhciBwcmV2aW91cyA9IGN1cnJlbnQuZ2V0UHJldmlvdXMoJ2xpJyk7CisJCQlpZiAocHJldmlvdXMgPT09IG51bGwpCisJCQl7CisJCQkJaWYgKHRoaXMucGFnaW5nX2dvdG9fcHJldihudWxsLCAnZ28tdG9wJykpCisJCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWZvciAoIDsgc3RlcHNpemUgPiAwOyBzdGVwc2l6ZS0tKSB7CisJCQkJCXByZXZpb3VzID0gY3VycmVudC5nZXRQcmV2aW91cygnbGknKTsKKwkJCQkJaWYgKHByZXZpb3VzID09PSBudWxsKQorCQkJCQkJYnJlYWs7CisJCQkJCWN1cnJlbnQgPSBwcmV2aW91czsKKwkJCQl9CisJCQl9CisJCQljdXJyZW50ID0gY3VycmVudC5nZXRFbGVtZW50KCdzcGFuLmZpJyk7CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlICdnby10b3AnOiAgICAgICAgLy8gJ2Zha2VkJyBrZXkgc2VudCB3aGVuIGRvbmUgc2hpZnRpbmcgb25lIHBhZ2luYXRpb24gcGFnZSB1cAorCQkJY3VycmVudC5hZGRDbGFzcygnaG92ZXInKTsKKwkJCXRoaXMuQ3VycmVudCA9IGN1cnJlbnQ7CisJCQlkaXJlY3Rpb24gPSAndXAnOworCQkJYnJlYWs7CisKKwkJY2FzZSAnbm9uZSc6ICAgICAgICAvLyAnZmFrZWQnIGtleSBzZW50IHdoZW4gcGlja2luZyBhIHJvdyAncmVtb3RlbHknLCBpLmUuIHdoZW4gd2UgZG9uJ3Qga25vdyB3aGVyZSB3ZSBhcmUgY3VycmVudGx5LCBidXQgd2hlbiB3ZSB3YW50IHRvIHNjcm9sbCB0byAnY3VycmVudCcgYW55aG93CisJCQljdXJyZW50LmFkZENsYXNzKCdob3ZlcicpOworCQkJdGhpcy5DdXJyZW50ID0gY3VycmVudDsKKwkJCWJyZWFrOworCisJCS8vIHNlbGVjdAorCQljYXNlICdlbnRlcic6CisJCQl0aGlzLnN0b3JlSGlzdG9yeSA9IHRydWU7CisJCQl0aGlzLkN1cnJlbnQgPSBjdXJyZW50OworCQkJY3NlbCA9IHRoaXMuYnJvd3Nlci5nZXRFbGVtZW50KCdzcGFuLmZpLnNlbGVjdGVkJyk7CisJCQlpZiAoY3NlbCAhPT0gbnVsbCkgLy8gcmVtb3ZlIG9sZCBzZWxlY3RlZCBvbmUKKwkJCQljc2VsLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpOworCisJCQljdXJyZW50LmFkZENsYXNzKCdzZWxlY3RlZCcpOworCQkJY3VycmVudEZpbGUgPSBjdXJyZW50LnJldHJpZXZlKCdmaWxlJyk7CisJCQl0aGlzLmRpYWcubG9nKCdvbiBrZXkgRU5URVIgZmlsZSA9ICcsIGN1cnJlbnRGaWxlKTsKKwkJCWlmIChjdXJyZW50RmlsZS5taW1lID09PSAndGV4dC9kaXJlY3RvcnknKSB7CisJCQkJdGhpcy5sb2FkKGN1cnJlbnRGaWxlLnBhdGggLyoucmVwbGFjZSh0aGlzLnJvb3QsJycpKi8pOworCQkJfQorCQkJZWxzZSB7CisJCQkJdGhpcy5maWxsSW5mbyhjdXJyZW50RmlsZSk7CisJCQl9CisJCQlicmVhazsKKworCQkvLyBkZWxldGUgZmlsZS9kaXJlY3Rvcnk6CisJCWNhc2UgJ2RlbGV0ZSc6CisJCQl0aGlzLnN0b3JlSGlzdG9yeSA9IHRydWU7CisJCQl0aGlzLkN1cnJlbnQgPSBjdXJyZW50OworCQkJdGhpcy5icm93c2VyLmdldEVsZW1lbnRzKCdzcGFuLmZpLnNlbGVjdGVkJykuZWFjaChmdW5jdGlvbihzcGFuKSB7CisJCQkJc3Bhbi5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTsKKwkJCX0pOworCisJCQkvLyBhbmQgYmVmb3JlIHdlIGdvIGFuZCBkZWxldGUgdGhlIGVudHJ5LCBzZWUgaWYgd2UgcGljayB0aGUgbmV4dCBvbmUgZG93biBvciB1cCBhcyBvdXIgbmV4dCBjdXJzb3IgcG9zaXRpb246CisJCQl2YXIgcGFyZW50ID0gY3VycmVudC5nZXRQYXJlbnQoJ2xpJyk7CisJCQluZXh0ID0gcGFyZW50LmdldE5leHQoJ2xpJyk7CisJCQlpZiAobmV4dCA9PT0gbnVsbCkgeworCQkJCW5leHQgPSBwYXJlbnQuZ2V0UHJldmlvdXMoJ2xpJyk7CisJCQl9CisJCQlpZiAobmV4dCAhPT0gbnVsbCkgeworCQkJCW5leHQgPSBuZXh0LmdldEVsZW1lbnQoJ3NwYW4uZmknKTsKKwkJCQluZXh0LmFkZENsYXNzKCdob3ZlcicpOworCQkJfQorCisJCQljdXJyZW50RmlsZSA9IGN1cnJlbnQucmV0cmlldmUoJ2ZpbGUnKTsKKwkJCXRoaXMuZGlhZy5sb2coJ29uIGtleSBERUxFVEUgZmlsZSA9ICcsIGN1cnJlbnRGaWxlKTsKKwkJCXRoaXMuZGVzdHJveShjdXJyZW50RmlsZSk7CisKKwkJCWN1cnJlbnQgPSBuZXh0OworCQkJdGhpcy5DdXJyZW50ID0gY3VycmVudDsKKwkJCWJyZWFrOworCQl9CisKKwkJLy8gbWFrZSBzdXJlIHRvIHNjcm9sbCB0aGUgdmlldyBzbyB0aGUgc2VsZWN0ZWQvJ2hvdmVyZWQnIGl0ZW0gaXMgd2l0aGluIHZpc2libGUgcmFuZ2U6CisKKwkJdGhpcy5kaWFnLmxvZygna2V5IGhhbmRsZXI6IGN1cnJlbnQgWC9ZID0gJywgY3VycmVudC5nZXRQb3NpdGlvbih0aGlzLmJyb3dzZXJTY3JvbGwpLCAnLCBIL1cvU0NST0xMID0gJywgdGhpcy5icm93c2VyU2Nyb2xsLmdldFNpemUoKSwgJywgMVUvU0laRSA9ICcsIGN1cnJlbnQuZ2V0U2l6ZSgpKTsKKwkJdmFyIGR5LCBicm93c2VyU2Nyb2xsRng7CisJCWlmIChkaXJlY3Rpb24gIT09ICd1cCcgJiYgY3VycmVudC5nZXRQb3NpdGlvbih0aGlzLmJyb3dzZXJTY3JvbGwpLnkgKyBjdXJyZW50LmdldFNpemUoKS55ICogMiA+PSB0aGlzLmJyb3dzZXJTY3JvbGwuZ2V0U2l6ZSgpLnkpCisJCXsKKwkJCS8vIG1ha2Ugc2Nyb2xsIGR1cmF0aW9uIHNsaWdodGx5IGRlcGVuZGVudCBvbiB0aGUgZGlzdGFuY2UgdG8gdHJhdmVsOgorCQkJZHkgPSAoY3VycmVudC5nZXRQb3NpdGlvbih0aGlzLmJyb3dzZXJTY3JvbGwpLnkgKyBjdXJyZW50LmdldFNpemUoKS55ICogMiAtIHRoaXMuYnJvd3NlclNjcm9sbC5nZXRTaXplKCkueSk7CisJCQlkeSA9IDUwICogZHkgLyB0aGlzLmJyb3dzZXJTY3JvbGwuZ2V0U2l6ZSgpLnk7CisJCQl0aGlzLmRpYWcubG9nKCdrZXkgQCBkaXJlY3Rpb24gPSBVUDogRFVSOiAnLCBkeSk7CisJCQlicm93c2VyU2Nyb2xsRnggPSBuZXcgRnguU2Nyb2xsKHRoaXMuYnJvd3NlclNjcm9sbCwgeyBkdXJhdGlvbjogKGR5IDwgMTUwID8gMTUwIDogZHkgPiAxMDAwID8gMTAwMCA6IGR5LnRvSW50KCkpIH0pOworCQkJYnJvd3NlclNjcm9sbEZ4LnRvRWxlbWVudChjdXJyZW50KTsKKwkJfQorCQllbHNlIGlmIChkaXJlY3Rpb24gIT09ICdkb3duJyAmJiBjdXJyZW50LmdldFBvc2l0aW9uKHRoaXMuYnJvd3NlclNjcm9sbCkueSA8PSBjdXJyZW50LmdldFNpemUoKS55KQorCQl7CisJCQl2YXIgc3kgPSB0aGlzLmJyb3dzZXJTY3JvbGwuZ2V0U2Nyb2xsKCkueSArIGN1cnJlbnQuZ2V0UG9zaXRpb24odGhpcy5icm93c2VyU2Nyb2xsKS55IC0gdGhpcy5icm93c2VyU2Nyb2xsLmdldFNpemUoKS55ICsgY3VycmVudC5nZXRTaXplKCkueSAqIDI7CisKKwkJCS8vIG1ha2Ugc2Nyb2xsIGR1cmF0aW9uIHNsaWdodGx5IGRlcGVuZGVudCBvbiB0aGUgZGlzdGFuY2UgdG8gdHJhdmVsOgorCQkJZHkgPSB0aGlzLmJyb3dzZXJTY3JvbGwuZ2V0U2Nyb2xsKCkueSAtIHN5OworCQkJZHkgPSA1MCAqIGR5IC8gdGhpcy5icm93c2VyU2Nyb2xsLmdldFNpemUoKS55OworCQkJdGhpcy5kaWFnLmxvZygna2V5IEAgZGlyZWN0aW9uID0gRE9XTjogU1kgPSAnLCBzeSwgJywgRFVSOiAnLCBkeSk7CisJCQlicm93c2VyU2Nyb2xsRnggPSBuZXcgRnguU2Nyb2xsKHRoaXMuYnJvd3NlclNjcm9sbCwgeyBkdXJhdGlvbjogKGR5IDwgMTUwID8gMTUwIDogZHkgPiAxMDAwID8gMTAwMCA6IGR5LnRvSW50KCkpIH0pOworCQkJYnJvd3NlclNjcm9sbEZ4LnN0YXJ0KGN1cnJlbnQuZ2V0UG9zaXRpb24odGhpcy5icm93c2VyU2Nyb2xsKS54LCAoc3kgPj0gMCA/IHN5IDogMCkpOworCQl9CisJfSwKKworCS8vIC0+IGNhbmNlbCBkcmFnZ2luZworCXJldmVydF9kcmFnX25fZHJvcDogZnVuY3Rpb24oZWwpIHsKKwkJZWwuZmFkZSgxKS5yZW1vdmVDbGFzcygnZHJhZycpLnJlbW92ZUNsYXNzKCdtb3ZlJykuc2V0U3R5bGVzKHsKKwkJLy8JJ3otaW5kZXgnOiAnYXV0bycsCisJCQlwb3NpdGlvbjogJ3JlbGF0aXZlJywKKwkJCXdpZHRoOiAnYXV0bycsCisJCQlsZWZ0OiAwLAorCQkJdG9wOiAwCisJCX0pLmluamVjdChlbC5yZXRyaWV2ZSgncGFyZW50JykpOworICAgIHRyeXsgZWwuc2V0U3R5bGUoJ3otaW5kZXgnLCAnYXV0bycpOyB9IGNhdGNoKGUpIHsgZWwuc2V0U3R5bGUoJ3otaW5kZXgnLCAnJyk7IH0gLy8gSUU8OCBDb21wbGFpbnMgYWJvdXQgJ2F1dG8nIGZvciB6LWluZGV4CisJCS8vIGFsc28gZGlhbCBkb3duIHRoZSBvcGFjaXR5IG9mIHRoZSBpY29ucyB3aXRoaW4gdGhpcyByb3cgKGRvd25sb2FkLCByZW5hbWUsIGRlbGV0ZSk6CisJCXZhciBpY29ucyA9IGVsLmdldEVsZW1lbnRzKCdpbWcuYnJvd3Nlci1pY29uJyk7CisJCWlmIChpY29ucykgeworCQkJaWNvbnMuZWFjaChmdW5jdGlvbihpY29uKSB7CisJCQkJaWNvbi5mYWRlKDApOworCQkJfSk7CisJCX0KKworCQl0aGlzLmRpYWcubG9nKCdESVNBQkxFIGtleWJvYXJkIHVwL2Rvd24gb24gcmV2ZXJ0Jyk7CisJCXRoaXMuZHJhZ19pc19hY3RpdmUgPSBmYWxzZTsKKwkJdGhpcy5pbWFnZWFkZC5mYWRlKDApOworCX0sCisKKwkvLyBjbGlja2VkICdmaXJzdCcgYnV0dG9uIGluIHRoZSBwYWdlZCBsaXN0L3RodW1iIHZpZXc6CisJcGFnaW5nX2dvdG9fcHJldjogZnVuY3Rpb24oZSwga2JkX2RpcikKKwl7CisJCWlmIChlKSBlLnN0b3AoKTsKKwkJdmFyIHN0YXJ0aW5kZXggPSB0aGlzLmdldF92aWV3X2ZpbGxfc3RhcnRpbmRleCgpOworCQlpZiAoIXN0YXJ0aW5kZXgpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJcmV0dXJuIHRoaXMucGFnaW5nX2dvdG9faGVscGVyKHN0YXJ0aW5kZXggLSB0aGlzLmxpc3RQYWdpbmF0aW9uTGFzdFNpemUsIHRoaXMubGlzdFBhZ2luYXRpb25MYXN0U2l6ZSwga2JkX2Rpcik7CisJfSwKKwlwYWdpbmdfZ290b19uZXh0OiBmdW5jdGlvbihlLCBrYmRfZGlyKQorCXsKKwkJaWYgKGUpIGUuc3RvcCgpOworCQl2YXIgc3RhcnRpbmRleCA9IHRoaXMuZ2V0X3ZpZXdfZmlsbF9zdGFydGluZGV4KCk7CisJCWlmICh0aGlzLnZpZXdfZmlsbF9qc29uICYmIHN0YXJ0aW5kZXggPiB0aGlzLnZpZXdfZmlsbF9qc29uLmRpcnMubGVuZ3RoICsgdGhpcy52aWV3X2ZpbGxfanNvbi5maWxlcy5sZW5ndGggLSB0aGlzLmxpc3RQYWdpbmF0aW9uTGFzdFNpemUpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJcmV0dXJuIHRoaXMucGFnaW5nX2dvdG9faGVscGVyKHN0YXJ0aW5kZXggKyB0aGlzLmxpc3RQYWdpbmF0aW9uTGFzdFNpemUsIHRoaXMubGlzdFBhZ2luYXRpb25MYXN0U2l6ZSwga2JkX2Rpcik7CisJfSwKKwlwYWdpbmdfZ290b19maXJzdDogZnVuY3Rpb24oZSwga2JkX2RpcikKKwl7CisJCWlmIChlKSBlLnN0b3AoKTsKKwkJdmFyIHN0YXJ0aW5kZXggPSB0aGlzLmdldF92aWV3X2ZpbGxfc3RhcnRpbmRleCgpOworCQlpZiAoIXN0YXJ0aW5kZXgpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJcmV0dXJuIHRoaXMucGFnaW5nX2dvdG9faGVscGVyKDAsIG51bGwsIGtiZF9kaXIpOworCX0sCisJcGFnaW5nX2dvdG9fbGFzdDogZnVuY3Rpb24oZSwga2JkX2RpcikKKwl7CisJCWlmIChlKSBlLnN0b3AoKTsKKwkJdmFyIHN0YXJ0aW5kZXggPSB0aGlzLmdldF92aWV3X2ZpbGxfc3RhcnRpbmRleCgpOworCQlpZiAodGhpcy52aWV3X2ZpbGxfanNvbiAmJiBzdGFydGluZGV4ID4gdGhpcy52aWV3X2ZpbGxfanNvbi5kaXJzLmxlbmd0aCArIHRoaXMudmlld19maWxsX2pzb24uZmlsZXMubGVuZ3RoIC0gdGhpcy5vcHRpb25zLmxpc3RQYWdpbmF0aW9uU2l6ZSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlyZXR1cm4gdGhpcy5wYWdpbmdfZ290b19oZWxwZXIoMkU5IC8qIH4gbWF4aW50ICovLCBudWxsLCBrYmRfZGlyKTsKKwl9LAorCXBhZ2luZ19nb3RvX2hlbHBlcjogZnVuY3Rpb24oc3RhcnRpbmRleCwgcGFnZXNpemUsIGtiZF9kaXIpCisJeworCQkvLyBzaW1pbGFyIGFjdGl2aXR5IGFzIGxvYWQoKSwgYnV0IHdpdGhvdXQgdGhlIHNlcnZlciBjb21tdW5pY2F0aW9uLi4uCisJCXRoaXMuZGVzZWxlY3QobnVsbCk7CisJCXRoaXMuc2hvd19vdXJfaW5mb19zZWN0aW9ucyhmYWxzZSk7CisKKwkJLy8gYWJvcnQgYW55IHN0aWxsIHJ1bm5pbmcgKCdhbnRpcXVhdGVkJykgZmlsbCBjaHVua3MgYW5kIHJlc2V0IHRoZSBzdG9yZSBiZWZvcmUgd2Ugc2V0IHVwIGEgbmV3IG9uZToKKwkJdGhpcy5SZXF1ZXN0UXVldWUuY2FuY2VsX2J1bGsoJ2ZpbGwnKTsKKwkJY2xlYXJUaW1lb3V0KHRoaXMudmlld19maWxsX3RpbWVyKTsKKwkJdGhpcy52aWV3X2ZpbGxfdGltZXIgPSBudWxsOworCisJCXJldHVybiB0aGlzLmZpbGwobnVsbCwgc3RhcnRpbmRleCwgcGFnZXNpemUsIGtiZF9kaXIpOworCX0sCisKKwlmaWxsOiBmdW5jdGlvbihqLCBzdGFydGluZGV4LCBwYWdlc2l6ZSwga2JkX2RpciwgcHJlc2VsZWN0KQorCXsKKwkJdmFyIGpfaXRlbV9jb3VudDsKKworCQlpZiAodHlwZW9mIHByZXNlbGVjdCA9PT0gJ3VuZGVmaW5lZCcpIHByZXNlbGVjdCA9IG51bGw7CisKKwkJaWYgKCFwYWdlc2l6ZSkKKwkJeworCQkJcGFnZXNpemUgPSB0aGlzLm9wdGlvbnMubGlzdFBhZ2luYXRpb25TaXplOworCQkJdGhpcy5saXN0UGFnaW5hdGlvbkxhc3RTaXplID0gcGFnZXNpemU7CisJCX0KKwkJLy8gZWxzZTogcGFnZXNpemUgc3BlY2lmaWVkIG1lYW5zIHN0aWNrIHdpdGggdGhhdCBvbmUuICh1c2VmdWwgdG8ga2VlcCBwYWdlc2l6ZSBpbnRhY3Qgd2hlbiBnb2luZyBwcmV2L25leHQpCisKKwkJaWYgKCFqKQorCQl7CisJCQlqID0gdGhpcy52aWV3X2ZpbGxfanNvbjsKKwkJfQorCisJCWpfaXRlbV9jb3VudCA9IGouZGlycy5sZW5ndGggKyBqLmZpbGVzLmxlbmd0aDsKKworCQlzdGFydGluZGV4ID0gcGFyc2VJbnQoc3RhcnRpbmRleCwgMTApOyAgICAgLy8gbWFrZSBzdXJlIGl0J3MgYW4gaW50IG51bWJlcgorCQlpZiAoaXNOYU4oc3RhcnRpbmRleCkpCisJCXsKKwkJCXN0YXJ0aW5kZXggPSAwOworCQl9CisKKwkJaWYgKCFwYWdlc2l6ZSkKKwkJeworCQkJLy8gbm8gcGFnaW5nOiBhbHdheXMgZ28gdG8gcG9zaXRpb24gMCB0aGVuIQorCQkJc3RhcnRpbmRleCA9IDA7CisJCX0KKwkJZWxzZSBpZiAoc3RhcnRpbmRleCA+IGpfaXRlbV9jb3VudCkKKwkJeworCQkJc3RhcnRpbmRleCA9IGpfaXRlbV9jb3VudDsKKwkJfQorCQllbHNlIGlmIChzdGFydGluZGV4IDwgMCkKKwkJeworCQkJc3RhcnRpbmRleCA9IDA7CisJCX0KKwkJLy8gYWx3YXlzIG1ha2Ugc3VyZSBzdGFydGluZGV4IGlzIGV4YWN0bHkgb24gYSBwYWdlIGVkZ2U6IHRoaXMgaXMgaW1wb3J0YW50IHRvIGtlZXAgdGhlIHBhZ2UgbnVtYmVycworCQkvLyBpbiB0aGUgdG9vbHRpcHMgY29ycmVjdCEKKwkJc3RhcnRpbmRleCA9IE1hdGguZmxvb3Ioc3RhcnRpbmRleCAvIHBhZ2VzaXplKTsKKwkJc3RhcnRpbmRleCAqPSBwYWdlc2l6ZTsKKworCQkvLyBrZXlib2FyZCBuYXZpZ2F0aW9uIHNldHMgdGhlICdob3ZlcicgY2xhc3Mgb24gdGhlICdjdXJyZW50JyBpdGVtOiByZW1vdmUgYW55IG9mIHRob3NlOgorCQl0aGlzLmJyb3dzZXIuZ2V0RWxlbWVudHMoJ3NwYW4uZmkuaG92ZXInKS5lYWNoKGZ1bmN0aW9uKHNwYW4pIHsKKwkJCXNwYW4ucmVtb3ZlQ2xhc3MoJ2hvdmVyJyk7CisJCX0pOworCisJCXRoaXMuZGlhZy5sb2coJyMgZmlsbDogSlNPTiA9ICcsIGosICcsIG1ncjogJywgdGhpcyk7CisJCXRoaXMucm9vdCA9IGoucm9vdDsKKwkJdGhpcy5DdXJyZW50RGlyID0gai50aGlzX2RpcjsKKwkJdGhpcy5icm93c2VyLmVtcHR5KCk7CisKKwkJLy8gQWRkaW5nIHRoZSB0aHVtYm5haWwgbGlzdCBpbiB0aGUgcHJldmlldyBwYW5lbDogYmxvdyBhd2F5IGFueSBwcmUtZXhpc3RpbmcgbGlzdCBub3csIGFzIHdlJ2xsIGdlbmVyYXRlIGEgbmV3IG9uZSBub3c6CisJCXRoaXMuZGlyX2ZpbGVsaXN0X3RodW1iVWwuZW1wdHkoKTsKKworCQkvLyBzZXQgaGlzdG9yeQorCQlpZiAodHlwZW9mIGpzR0VUICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN0b3JlSGlzdG9yeSkKKwkJeworCQkJanNHRVQuc2V0KHsnZm1QYXRoJzogdGhpcy5DdXJyZW50RGlyLnBhdGh9KTsKKwkJfQorCisJCXZhciBjdXJyZW50X3BhdGggPSB0aGlzLm5vcm1hbGl6ZSh0aGlzLnJvb3QgKyB0aGlzLkN1cnJlbnREaXIucGF0aCk7CisJCXZhciB0ZXh0ID0gW10sIHByZSA9IFtdOworCQkvLyBvbiBlcnJvciByZXBvcnRlZCBieSBiYWNrZW5kLCB0aGVyZSBXT04nVCBiZSBhIEpTT04gJ3Jvb3QnIGVsZW1lbnQgYXQgYWxsIHRpbWVzOgorCQkvLworCQkvLyBUT0RPOiBob3cgdG8gaGFuZGxlIHRoYXQgZXJyb3IgY29uZGl0aW9uIGNvcnJlY3RseT8KKwkJaWYgKCFqLnJvb3QpCisJCXsKKwkJCXRoaXMuc2hvd0Vycm9yKCcnICsgai5lcnJvcik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJdmFyIHJvb3RQYXRoID0gJy8nICsgai5yb290OworCQl2YXIgcm9vdFBhcmVudCA9IHRoaXMuZGlybmFtZShyb290UGF0aCk7CisJCXZhciBycGxlbiA9IHJvb3RQYXJlbnQubGVuZ3RoOworCQljdXJyZW50X3BhdGguc3BsaXQoJy8nKS5lYWNoKChmdW5jdGlvbihmb2xkZXJOYW1lKSB7CisJCQlpZiAoIWZvbGRlck5hbWUpIHJldHVybjsKKworCQkJcHJlLnB1c2goZm9sZGVyTmFtZSk7CisJCQl2YXIgcGF0aCA9ICgnLycrcHJlLmpvaW4oJy8nKSsnLycpOworCQkJdGhpcy5kaWFnLmxvZygnb24gZmlsbDogZGlzcGxheSBkaXJlY3RvcnkgcGF0aCBjaHVua3M6IEpTT04gcm9vdCA9ICcsIGoucm9vdCwgJywgcGF0aDogJyAsIHBhdGgsICcsIGZvbGRlcjogJywgZm9sZGVyTmFtZSwgJywgcm9vdDogJywgcm9vdFBhdGgsICcsIHBhcmVudDogJywgcm9vdFBhcmVudCk7CisJCQlpZiAocGF0aC5sZW5ndGggPD0gcnBsZW4pIHsKKwkJCQkvLyBhZGQgbm9uLWNsaWNrYWJsZSBwYXRoCisJCQkJdGV4dC5wdXNoKG5ldyBFbGVtZW50KCdzcGFuJywgeydjbGFzcyc6ICdpY29uJywgdGV4dDogZm9sZGVyTmFtZX0pKTsKKwkJCX0gZWxzZSB7CisJCQkJLy8gYWRkIGNsaWNrYWJsZSBwYXRoCisJCQkJdGV4dC5wdXNoKG5ldyBFbGVtZW50KCdhJywgeworCQkJCQkJJ2NsYXNzJzogJ2ljb24nLAorCQkJCQkJaHJlZjogJyMnLAorCQkJCQkJdGV4dDogZm9sZGVyTmFtZQorCQkJCQl9KS5hZGRFdmVudCgnY2xpY2snLCAoZnVuY3Rpb24oZSkgeworCQkJCQkJZS5zdG9wKCk7CisJCQkJCQlwYXRoID0gcGF0aC5yZXBsYWNlKGoucm9vdCwnJyk7CisJCQkJCQl0aGlzLmRpYWcubG9nKCcjIyBwYXRoIHNlY3Rpb24gLSBjbGljayBldmVudDogJywgZSwgJywgcGF0aDogJywgcGF0aCk7CisJCQkJCQl0aGlzLmxvYWQocGF0aCk7CisJCQkJCX0pLmJpbmQodGhpcykpCisJCQkJKTsKKwkJCX0KKwkJCXRleHQucHVzaChuZXcgRWxlbWVudCgnc3BhbicsIHt0ZXh0OiAnIC8gJ30pKTsKKwkJfSkuYmluZCh0aGlzKSk7CisKKwkJdGV4dC5wb3AoKTsKKwkJdGV4dFt0ZXh0Lmxlbmd0aC0xXS5hZGRDbGFzcygnc2VsZWN0ZWQnKS5yZW1vdmVFdmVudHMoJ2NsaWNrJykuYWRkRXZlbnQoJ2NsaWNrJywgKGZ1bmN0aW9uKGUpIHsKKwkJCWUuc3RvcCgpOworCQkJLy8gc2hvdyB0aGUgJ2RpcmVjdG9yeScgaW5mbyBpbiB0aGUgZGV0YWlsIHBhbmUgYWdhaW4gKHRoaXMgaXMgYSB3YXkgdG8gZ2V0IGJhY2sgZnJvbSBwcmV2aWV3aW5nIHNpbmdsZSBmaWxlcyB0byBwcmV2aWV3aW5nIHRoZSBkaXJlY3RvcnkgYXMgYSBnYWxsZXJ5KQorCQkJdGhpcy5kaWFnLmxvZygnY2xpY2s6IGZpbGxJbmZvOiBjdXJyZW50IGRpcmVjdG9yeSEnKTsKKwkJCXRoaXMuZmlsbEluZm8oKTsKKwkJfSkuYmluZCh0aGlzKSk7CisJCXRoaXMuc2VsZWN0YWJsZVBhdGguc2V0KCd2YWx1ZScsICcvJyArIGN1cnJlbnRfcGF0aCk7CisJCXRoaXMuY2xpY2thYmxlUGF0aC5lbXB0eSgpLmFkb3B0KG5ldyBFbGVtZW50KCdzcGFuJywge3RleHQ6ICcvICd9KSwgdGV4dCk7CisKKwkJaWYgKCFqLmRpcnMgfHwgIWouZmlsZXMpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8vIC0+PiBnZW5lcmF0ZSBicm93c2VyIGxpc3QKKwkJdmFyIGVscyA9IFtbXSwgW11dOworCisJCS8qCisJCSAqIEZvciB2ZXJ5IGxhcmdlIGRpcmVjdG9yaWVzLCB3aGVyZSB0aGUgbnVtYmVyIG9mIGRpcmVjdG9yaWVzIGluIHRoZXJlIGFuZC9vciB0aGUgbnVtYmVyIG9mIGZpbGVzIGlzIEhVR0UgKD4gMjAwKSwKKwkJICogd2UgRElTQUJMRSBkcmFnJmRyb3AgZnVuY3Rpb25hbGl0eS4KKwkJICoKKwkJICogWWVzLCB3ZSBjb3VsZCBoYXZlIG9wdGVkIGZvciB0aGUgYWx0ZXJuYXRpdmUsIHdoaWNoIGlzIHNwbGl0dGluZyB1cCB0aGUgLm1ha2VEcmFnZ2FibGUoKSBhY3Rpdml0eSBpbiBtdWx0aXBsZQorCQkgKiBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKSBpbml0aWF0ZWQgY2h1bmtzIGluIG9yZGVyIHRvIHNwYXJlIHRoZSB1c2VyIHRoZSBoYXNzbGUgb2YgYSAnc2xvdyBzY3JpcHQnIGRpYWxvZywKKwkJICogYnV0IGluIHJlYWxpdHkgZHJhZyZkcm9wIGlzIGx1ZGljcm91cyBpbiBzdWNoIGFuIGVudmlyb25tZW50OyBjdXJyZW50bHkgd2UgZG8gbm90ICh5ZXQpIHN1cHBvcnQgYXV0b3Njcm9sbGluZworCQkgKiB0aGUgbGlzdCB0byBlbmFibGUgZHJhZyZkcm9wcGluZyBpdCB0byBlbGVtZW50cyBmdXJ0aGVyIGF3YXkgdGhhdCB0aGUgY3VycmVudCB2aWV3cG9ydCBjYW4gaG9sZCBhdCB0aGUgc2FtZSB0aW1lLAorCQkgKiBidXQgZHJhZyZkcm9wIGluIGEgNTAwKyBpbWFnZSBjYXJyeWluZyBkaXJlY3RvcnkgaXMgcmVzdWx0aW5nIGluIGEgc2lnbmlmaWNhbnQgbG9hZCBvZiB0aGUgYnJvd3NlciBhbnl3YXk7CisJCSAqIGFsdGVybmF0aXZlIG1lYW5zIHRvIG1vdmUvY29weSBmaWxlcyBzaG91bGQgYmUgcHJvdmlkZWQgaW4gc3VjaCBjYXNlcyBpbnN0ZWFkLgorCQkgKgorCQkgKiBIZW5jZSB3ZSBydW4gdGhyb3VnaCB0aGUgbGlzdCBoZXJlIGFuZCBhYm9ydCAvIGxpbWl0IHRoZSBkcmFnJmRyb3AgYXNzaWdubWVudCBwcm9jZXNzIHdoZW4gdGhlIGhhcmRjb2RlZCBudW1iZXIgb2YKKwkJICogZGlyZWN0b3JpZXMgb3IgZmlsZXMgaGF2ZSBiZWVuIHJlYWNoZWQgKHN1cHBvcnRfRG5EX2Zvcl90aGlzX2RpcikuCisJCSAqCisJCSAqIFRPRE86IG1ha2UgdGhlc2UgbnVtYmVycyAnYXV0byBhZGFwdGl2ZScgYmFzZWQgb24gdGltaW5nIG1lYXN1cmVtZW50czogaG93IGxvbmcgZG9lcyBpdCB0YWtlIHRvIGluaXRpYWxpemUKKwkJICogICAgICAgYSB2aWV3IG9uIFlPVVIgbWFjaGluZT8gLS0+IGFkanVzdCBsaW1pdHMgYWNjb3JkaW5nbHkuCisJCSAqLworCQl2YXIgc3VwcG9ydF9EbkRfZm9yX3RoaXNfZGlyID0gdGhpcy5hbGxvd19EbkQoaiwgcGFnZXNpemUpOworCQl2YXIgc3RhcnR0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CisJCXRoaXMuZGlhZy5sb2coJ2ZpbGwgbGlzdCBzaXplID0gJywgal9pdGVtX2NvdW50KTsKKworCQl2YXIgZW5kaW5kZXggPSBqX2l0ZW1fY291bnQ7CisJCXZhciBwYWdpbmdfbm93ID0gMDsKKwkJaWYgKHBhZ2VzaXplKQorCQl7CisJCQkvLyBlbmRpbmRleCBNQVkgcG9pbnQgYmV5b25kIGpfaXRlbV9jb3VudDsgdGhhdCdzIG9rYXk7IHdlIGNoZWNrIHRoZSBib3VuZGFyeSBldmVyeSB0aW1lIGluIHRoZSBvdGhlciBmaWxsIGNodW5rcy4KKwkJCWVuZGluZGV4ID0gc3RhcnRpbmRleCArIHBhZ2VzaXplOworCQkJLy8gaG93ZXZlciBmb3IgcmVhc29ucyBvZiBzdGF0aXN0aWNzIGdhdGhlcmluZywgd2Uga2VlcCBpdCBib3VuZCB0byBqX2l0ZW1fY291bnQgYXQgdGhlIG1vbWVudDoKKwkJCWlmIChlbmRpbmRleCA+IGpfaXRlbV9jb3VudCkgZW5kaW5kZXggPSBqX2l0ZW1fY291bnQ7CisKKwkJCWlmIChwYWdlc2l6ZSA8IGpfaXRlbV9jb3VudCkKKwkJCXsKKwkJCQl2YXIgcGFnZWNudCA9IE1hdGguY2VpbChqX2l0ZW1fY291bnQgLyBwYWdlc2l6ZSk7CisJCQkJdmFyIGN1cnBhZ25vID0gTWF0aC5mbG9vcihzdGFydGluZGV4IC8gcGFnZXNpemUpICsgMTsKKworCQkJCXRoaXMuYnJvd3Nlcl9wYWdpbmdfaW5mby5zZXQoJ3RleHQnLCAnJyArIGN1cnBhZ25vICsgJy8nICsgcGFnZWNudCk7CisKKwkJCQlpZiAoY3VycGFnbm8gPiAxKQorCQkJCXsKKwkJCQkJdGhpcy5icm93c2VyX3BhZ2luZ19maXJzdC5zZXQoJ3RpdGxlJywgdGhpcy5sYW5ndWFnZS5nb3RvX3BhZ2UgKyAnIDEnKTsKKwkJCQkJdGhpcy5icm93c2VyX3BhZ2luZ19maXJzdC5mYWRlKDEpOworCQkJCQl0aGlzLmJyb3dzZXJfcGFnaW5nX3ByZXYuc2V0KCd0aXRsZScsIHRoaXMubGFuZ3VhZ2UuZ290b19wYWdlICsgJyAnICsgKGN1cnBhZ25vIC0gMSkpOworCQkJCQl0aGlzLmJyb3dzZXJfcGFnaW5nX3ByZXYuZmFkZSgxKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJdGhpcy5icm93c2VyX3BhZ2luZ19maXJzdC5zZXQoJ3RpdGxlJywgJy0tLScpOworCQkJCQl0aGlzLmJyb3dzZXJfcGFnaW5nX2ZpcnN0LmZhZGUoMC4yNSk7CisJCQkJCXRoaXMuYnJvd3Nlcl9wYWdpbmdfcHJldi5zZXQoJ3RpdGxlJywgJy0tLScpOworCQkJCQl0aGlzLmJyb3dzZXJfcGFnaW5nX3ByZXYuZmFkZSgwLjI1KTsKKwkJCQl9CisJCQkJaWYgKGN1cnBhZ25vIDwgcGFnZWNudCkKKwkJCQl7CisJCQkJCXRoaXMuYnJvd3Nlcl9wYWdpbmdfbGFzdC5zZXQoJ3RpdGxlJywgdGhpcy5sYW5ndWFnZS5nb3RvX3BhZ2UgKyAnICcgKyBwYWdlY250KTsKKwkJCQkJdGhpcy5icm93c2VyX3BhZ2luZ19sYXN0LmZhZGUoMSk7CisJCQkJCXRoaXMuYnJvd3Nlcl9wYWdpbmdfbmV4dC5zZXQoJ3RpdGxlJywgdGhpcy5sYW5ndWFnZS5nb3RvX3BhZ2UgKyAnICcgKyAoY3VycGFnbm8gKyAxKSk7CisJCQkJCXRoaXMuYnJvd3Nlcl9wYWdpbmdfbmV4dC5mYWRlKDEpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQl0aGlzLmJyb3dzZXJfcGFnaW5nX2xhc3Quc2V0KCd0aXRsZScsICctLS0nKTsKKwkJCQkJdGhpcy5icm93c2VyX3BhZ2luZ19sYXN0LmZhZGUoMC4yNSk7CisJCQkJCXRoaXMuYnJvd3Nlcl9wYWdpbmdfbmV4dC5zZXQoJ3RpdGxlJywgJy0tLScpOworCQkJCQl0aGlzLmJyb3dzZXJfcGFnaW5nX25leHQuZmFkZSgwLjI1KTsKKwkJCQl9CisKKwkJCQlwYWdpbmdfbm93ID0gMTsKKwkJCX0KKwkJfQorCQl0aGlzLmJyb3dzZXJfcGFnaW5nLmZhZGUocGFnaW5nX25vdyk7CisJCS8vIGZpeCBmb3IgTVNJRTg6IGFsc28gZmFkZSBvdXQgdGhlIHBhZ2luYXRpb24gaWNvbnMgdGhlbXNlbHZlcworCQlpZiAoIXBhZ2luZ19ub3cpCisJCXsKKwkJCXRoaXMuYnJvd3Nlcl9wYWdpbmdfZmlyc3QuZmFkZSgwKTsKKwkJCXRoaXMuYnJvd3Nlcl9wYWdpbmdfcHJldi5mYWRlKDApOworCQkJdGhpcy5icm93c2VyX3BhZ2luZ19sYXN0LmZhZGUoMCk7CisJCQl0aGlzLmJyb3dzZXJfcGFnaW5nX25leHQuZmFkZSgwKTsKKwkJfQorCisJCS8vIHJlbWVtYmVyIHBhZ2luYXRpb24gcG9zaXRpb24gaGlzdG9yeQorCQl0aGlzLnN0b3JlX3ZpZXdfZmlsbF9zdGFydGluZGV4KHN0YXJ0aW5kZXgpOworCisJCS8vIHJlc2V0IHRoZSBmaWxsSW5mbyBmaXJlIG1hcmtlcjoKKwkJdGhpcy5maWxsSW5mb09uRmlsbEZpcmVkID0gZmFsc2U7CisKKwkJdGhpcy52aWV3X2ZpbGxfdGltZXIgPSB0aGlzLmZpbGxfY2h1bmt3aXNlXzEuZGVsYXkoMSwgdGhpcywgW3N0YXJ0aW5kZXgsIGVuZGluZGV4LCBlbmRpbmRleCAtIHN0YXJ0aW5kZXgsIHBhZ2VzaXplLCBzdXBwb3J0X0RuRF9mb3JfdGhpc19kaXIsIHN0YXJ0dGltZSwgZWxzLCBrYmRfZGlyLCBwcmVzZWxlY3RdKTsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9LAorCisJbGlzdF9yb3dfbWFrZXI6IGZ1bmN0aW9uKHRodW1ibmFpbF91cmwsIGZpbGUpCisJeworCQlyZXR1cm4gZmlsZS5lbGVtZW50ID0gbmV3IEVsZW1lbnQoJ3NwYW4nLCB7J2NsYXNzJzogJ2ZpICcgKyB0aGlzLmxpc3RUeXBlLCBocmVmOiAnIyd9KS5hZG9wdCgKKwkJCW5ldyBFbGVtZW50KCdzcGFuJywgeworCQkJCSdjbGFzcyc6IHRoaXMubGlzdFR5cGUsCisJCQkJJ3N0eWxlcyc6IHsKKwkJCQkJJ2JhY2tncm91bmQtaW1hZ2UnOiAndXJsKCcgKyAodGh1bWJuYWlsX3VybCA/IHRodW1ibmFpbF91cmwgOiB0aGlzLmFzc2V0QmFzZVBhdGggKyAnSW1hZ2VzL2xvYWRlci5naWYnKSArICcpJworCQkJCX0KKwkJCX0pLmFkZENsYXNzKCdmbS10aHVtYi1iZycpLAorCQkJbmV3IEVsZW1lbnQoJ3NwYW4nLCB7J2NsYXNzJzogJ2ZpbGVtYW5hZ2VyLWZpbGVuYW1lJywgdGV4dDogZmlsZS5uYW1lLCB0aXRsZTogZmlsZS5uYW1lfSkKKwkJKS5zdG9yZSgnZmlsZScsIGZpbGUpOworCX0sCisKKwlkaXJfZ2FsbGVyeV9pdGVtX21ha2VyOiBmdW5jdGlvbih0aHVtYm5haWxfdXJsLCBmaWxlKQorCXsKKwkJdmFyIGVsID0gbmV3IEVsZW1lbnQoJ2RpdicsIHsKKwkJCSdjbGFzcyc6ICdmaScsCisJCQkndGl0bGUnOiBmaWxlLm5hbWUKKwkJfSkuYWRvcHQoCisJCQluZXcgRWxlbWVudCgnZGl2JywgeworCQkJCSdjbGFzcyc6ICdkaXItZ2FsLXRodW1iLWJnJywKKwkJCQknc3R5bGVzJzogeworCQkJCQknd2lkdGgnOiB0aGlzLm9wdGlvbnMudGh1bWJTaXplNERpckdhbGxlcnkgKyAncHgnLAorCQkJCQknaGVpZ2h0JzogdGhpcy5vcHRpb25zLnRodW1iU2l6ZTREaXJHYWxsZXJ5ICsgJ3B4JywKKwkJCQkJJ2JhY2tncm91bmQtaW1hZ2UnOiAndXJsKCcgKyAodGh1bWJuYWlsX3VybCA/IHRodW1ibmFpbF91cmwgOiB0aGlzLmFzc2V0QmFzZVBhdGggKyAnSW1hZ2VzL2xvYWRlci5naWYnKSArICcpJworCQkJCX0KKwkJCX0pLAorCQkJbmV3IEVsZW1lbnQoJ2RpdicsIHsKKwkJCQknY2xhc3MnOiAnbmFtZScsCisJCQkJJ3N0eWxlcyc6IHsKKwkJCQkJJ3dpZHRoJzogdGhpcy5vcHRpb25zLnRodW1iU2l6ZTREaXJHYWxsZXJ5ICsgJ3B4JworCQkJCX0sCisJCQkJJ3RleHQnOiBmaWxlLm5hbWUKKwkJCX0pCisJCSk7CisJCXRoaXMudGlwcy5hdHRhY2goZWwpOworCQlyZXR1cm4gZWw7CisJfSwKKworCWRpcl9nYWxsZXJ5X3NldF9hY3R1YWxfaW1nOiBmdW5jdGlvbihmaWxlLCBkZ19lbCkKKwl7CisJCS8vIGNhbGN1bGF0ZSB3aGljaCB0aHVtYiB0byB1c2UgYW5kIGhvdyB0byBjZW50ZXIgaXQ6CisJCXZhciBpbWdfdXJsLCBpdywgaWgsIGRzLCBtdCwgbWIsIG1sLCBtciwgcmF0aW87CisKKwkJZHMgPSB0aGlzLm9wdGlvbnMudGh1bWJTaXplNERpckdhbGxlcnk7CisJCWlmIChkcyA+IDQ4KQorCQl7CisJCQlpbWdfdXJsID0gZmlsZS50aHVtYjI1MDsKKwkJCWl3ID0gZmlsZS50aHVtYjI1MF93aWR0aDsKKwkJCWloID0gZmlsZS50aHVtYjI1MF9oZWlnaHQ7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpbWdfdXJsID0gZmlsZS50aHVtYjQ4OworCQkJaXcgPSBmaWxlLnRodW1iNDhfd2lkdGg7CisJCQlpaCA9IGZpbGUudGh1bWI0OF9oZWlnaHQ7CisJCX0KKworCQkvLyAnem9vbScgaW1hZ2UgdG8gZml0IGFyZWE6CisJCWlmIChpdyA+IGRzKQorCQl7CisJCQl2YXIgcmVkdXggPSBkcyAvIGl3OworCQkJaXcgKj0gcmVkdXg7CisJCQlpaCAqPSByZWR1eDsKKwkJfQorCQlpZiAoaWggPiBkcykKKwkJeworCQkJdmFyIHJlZHV4ID0gZHMgLyBpaDsKKwkJCWl3ICo9IHJlZHV4OworCQkJaWggKj0gcmVkdXg7CisJCX0KKwkJaXcgPSBNYXRoLnJvdW5kKGl3KTsKKwkJaWggPSBNYXRoLnJvdW5kKGloKTsKKwkJbWwgPSBNYXRoLnJvdW5kKChkcyAtIGl3KSAvIDIpOworCQltciA9IGRzIC0gbWwgLSBpdzsKKwkJbXQgPSBNYXRoLnJvdW5kKChkcyAtIGloKSAvIDIpOworCQltYiA9IGRzIC0gbXQgLSBpaDsKKworCQl2YXIgc2VsZiA9IHRoaXM7CisKKwkJQXNzZXQuaW1hZ2UoaW1nX3VybCwgeworCQkJc3R5bGVzOiB7CisJCQkJd2lkdGg6IGl3LAorCQkJCWhlaWdodDogaWgsCisJCQkJJ21hcmdpbi1sZWZ0JzogbWwsCisJCQkJJ21hcmdpbi10b3AnOiBtdCwKKwkJCQknbWFyZ2luLXJpZ2h0JzogbXIsCisJCQkJJ21hcmdpbi1ib3R0b20nOiBtYgorCQkJfSwKKwkJCW9uTG9hZDogZnVuY3Rpb24oKSB7CisJCQkJdmFyIGltZ19lbCA9IHRoaXM7CisJCQkJdmFyIGltZ19kaXYgPSBkZ19lbC5nZXRFbGVtZW50KCdkaXYuZGlyLWdhbC10aHVtYi1iZycpLnNldFN0eWxlKCdiYWNrZ3JvdW5kLWltYWdlJywgJycpOworCQkJCWltZ19kaXYuYWRvcHQoaW1nX2VsKTsKKwkJCX0sCisJCQlvbkVycm9yOiBmdW5jdGlvbigpIHsKKwkJCQlzZWxmLmRpYWcubG9nKCdkaXJnYWxsZXJ5IGltYWdlIGFzc2V0OiBlcnJvciEnKTsKKwkJCQl2YXIgaWNvbnBhdGggPSBzZWxmLmFzc2V0QmFzZVBhdGggKyAnSW1hZ2VzL0ljb25zL0xhcmdlL2RlZmF1bHQtZXJyb3IucG5nJzsKKwkJCQlkZ19lbC5nZXRFbGVtZW50KCdkaXYuZGlyLWdhbC10aHVtYi1iZycpLnNldFN0eWxlKCdiYWNrZ3JvdW5kLWltYWdlJywgJ3VybCgnICsgaWNvbnBhdGggKyAnKScpOworCQkJfSwKKwkJCW9uQWJvcnQ6IGZ1bmN0aW9uKCkgeworCQkJCXNlbGYuZGlhZy5sb2coJ2RpcmdhbGxlcnkgaW1hZ2UgYXNzZXQ6IEFCT1JUIScpOworCQkJCXZhciBpY29ucGF0aCA9IHNlbGYuYXNzZXRCYXNlUGF0aCArICdJbWFnZXMvSWNvbnMvTGFyZ2UvZGVmYXVsdC1lcnJvci5wbmcnOworCQkJCWRnX2VsLmdldEVsZW1lbnQoJ2Rpdi5kaXItZ2FsLXRodW1iLWJnJykuc2V0U3R5bGUoJ2JhY2tncm91bmQtaW1hZ2UnLCAndXJsKCcgKyBpY29ucGF0aCArICcpJyk7CisJCQl9CisJCX0pOworCX0sCisKKwkvKgorCSAqIFRoZSBvbGQgb25lLWZ1bmN0aW9uLWRvZXMtYWxsIGZpbGwoKSB3b3VsZCB0YWtlIGFuIGF3ZnVsIGxvbmcgdGltZSB3aGVuIHByb2Nlc3NpbmcgbGFyZ2UgZGlyZWN0b3JpZXMuIFRoaXMgZnVuY3Rpb24KKwkgKiBjb250YWlucyB0aGUgbW9zdCBjb3N0bHkgY29kZSBjaHVuayBvZiB0aGUgb2xkIGZpbGwoKSBhbmQgaGFzIGFkanVzdGVkIHRoZSBsb29waW5nIHRocm91Z2ggdGhlIGouZGlyc1tdIGFuZCBqLmZpbGVzW10gbGlzdHMKKwkgKiBpbiBzdWNoIGEgd2F5IHRoYXQgd2UgY2FuICdjaHVuayBpdCB1cCc6IHdlIGNhbiBtZWFzdXJlIHRoZSB0aW1lIGNvbnN1bWVkIHNvIGZhciBhbmQgd2hlbiB3ZSBoYXZlIHNwZW50IG1vcmUgdGhhbgorCSAqIFggbWlsbGlzZWNvbmRzIGluIHRoZSBsb29wLCB3ZSBzdG9wIGFuZCBhbGxvdyB0aGUgbG9vcCB0byBjb21tZW5jZSBhZnRlciBhIG1pbmltYWwgZGVsYXkuCisJICoKKwkgKiBUaGUgZGVsYXkgaXMgdGhlIHdheSB0byByZWxpbnF1aXNoIGNvbnRyb2wgdG8gdGhlIGJyb3dzZXIgYW5kIGFzIGEgdGhhbmsteW91IE5PVCBnZXQgdGhlIGRyZWFkZWQKKwkgKiAnc2xvdyBzY3JpcHQsIGNvbnRpbnVlIG9yIGFib3J0PycgZGlhbG9nIGluIHlvdXIgZmFjZS4gQWhoLCB0aGUgam95IG9mIGNvb3BlcmF0aXZlIG11bHRpdGFza2luZyBpcyBiYWNrIGFnYWluISA6LSkKKwkgKi8KKwlmaWxsX2NodW5rd2lzZV8xOiBmdW5jdGlvbihzdGFydGluZGV4LCBlbmRpbmRleCwgcmVuZGVyX2NvdW50LCBwYWdlc2l6ZSwgc3VwcG9ydF9EbkRfZm9yX3RoaXNfZGlyLCBzdGFydHRpbWUsIGVscywga2JkX2RpciwgcHJlc2VsZWN0KSB7CisKKwkJdmFyIGlkeCwgZmlsZSwgbG9vcF9kdXJhdGlvbjsKKwkJdmFyIHNlbGYgPSB0aGlzOworCQl2YXIgaiA9IHRoaXMudmlld19maWxsX2pzb247CisJCXZhciBsb29wX3N0YXJ0dGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOworCQl2YXIgZm1GaWxlID0gKHR5cGVvZiBqc0dFVCAhPT0gJ3VuZGVmaW5lZCcgPyBqc0dFVC5nZXQoJ2ZtRmlsZScpIDogbnVsbCk7CisKKwkJdmFyIGR1cmF0aW9uID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydHRpbWU7CisJCS8vdGhpcy5kaWFnLmxvZygnICsgdGltZSBkdXJhdGlvbiBAIGZpbGxfY2h1bmt3aXNlXzEoJywgc3RhcnRpbmRleCwgJyk6ICcsIGR1cmF0aW9uKTsKKworCQkvKgorCQkgKiBOb3RlIHRoYXQgdGhlICc8IGouZGlycy5sZW5ndGgnIC8gJzwgai5maWxlcy5sZW5ndGgnIGNoZWNrcyBNVVNUIGJlIGtlcHQgYXJvdW5kOiBvbmUgb2YgdGhlIGZhc3Rlc3Qgd2F5cyB0byBhYm9ydC9jYW5jZWwKKwkJICogdGhlIHJlbmRlciBpcyBlbXB0eWluZyB0aGUgZGlyc1tdICsgZmlsZXNbXSBhcnJheSwgYXMgdGhhdCB3b3VsZCBhYm9ydCB0aGUgbG9vcCBvbiB0aGUgJzwgai5kaXJzLmxlbmd0aCcgLyAnPCBqLmZpbGVzLmxlbmd0aCcKKwkJICogY29uZGl0aW9uLgorCQkgKgorCQkgKiBUaGlzLCB0b2dldGhlciB3aXRoIGtpbGxpbmcgb3VyIGRlbGF5LXRpbWVyLCBpcyBkb25lIHdoZW4gYW55b25lIGNhbGxzIHJlc2V0X3ZpZXdfZmlsbF9zdG9yZSgpIHRvCisJCSAqIGFib3J0IHRoaXMgcmVuZGVyIHByb250by4KKwkJICovCisKKwkJLy8gZmlyc3QgbG9vcDogb25seSByZW5kZXIgZGlyZWN0b3JpZXMsIHdoZW4gdGhlIGluZGV4ZXMgZml0IHRoZSByYW5nZTogMCAuLiBqLmRpcnMubGVuZ3RoLTEKKwkJLy8gQXNzdW1lIHNldmVyYWwgZGlyZWN0b3J5IGFzcGVjdHMsIHN1Y2ggYXMgbm8gdGh1bWJuYWlsIGhhc3NsZSAoaXQncyBvbmUgb2YgdHdvIGljb25zIGFueXdheSwgcmVhbGx5ISkKKwkJdmFyIGVsLCBlZGl0QnV0dG9uczsKKworCQlmb3IgKGlkeCA9IHN0YXJ0aW5kZXg7IGlkeCA8IGVuZGluZGV4ICYmIGlkeCA8IGouZGlycy5sZW5ndGg7IGlkeCsrKQorCQl7CisJCQlmaWxlID0gai5kaXJzW2lkeF07CisKKwkJaWYgKGlkeCAlIDEwID09PSAwKSB7CisJCQkJLy8gdHJ5IG5vdCB0byBzcGVuZCBtb3JlIHRoYW4gMTAwIG1zZWNzIHBlciAoVUkgYmxvY2tpbmchKSBsb29wIHJ1biEKKwkJCQlsb29wX2R1cmF0aW9uID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBsb29wX3N0YXJ0dGltZTsKKwkJCQlkdXJhdGlvbiA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnR0aW1lOworCQkJCS8vdGhpcy5kaWFnLmxvZygnICsgdGltZSB0YWtlbiBzbyBmYXIgPSAnLCBkdXJhdGlvbiwgJyAvICcsIGxvb3BfZHVyYXRpb24sICcgQCBlbGNudCA9ICcsIGlkeCk7CisKKwkJCQkvKgorCQkJCSAqIEFyZSB3ZSBydW5uaW5nIGluIGFkYXB0aXZlIHBhZ2luYXRpb24gbW9kZT8geWVzOiBjYWxjdWxhdGUgZXN0aW1hdGVkIG5ldyBwYWdlc2l6ZSBhbmQgYWRqdXN0IGF2ZXJhZ2UgKEVNQSkgd2hlbiBuZWVkZWQuCisJCQkJICoKKwkJCQkgKiBEbyB0aGlzIGhlcmUgaW5zdGVhZCBvZiBhdCB0aGUgdmVyeSBlbmQgc28gdGhhdCBwYWdlc2l6ZSB3aWxsIGFkYXB0LCBwYXJ0aWN1bGFybHkgd2hlbiB1c2VyIGRvZXMgbm90IHdhbnQgdG8gd2FpdCBmb3IKKwkJCQkgKiB0aGlzIHJlbmRlciB0byBmaW5pc2guCisJCQkJICovCisJCQkJdGhpcy5hZGFwdGl2ZV91cGRhdGVfcGFnaW5hdGlvbl9zaXplKGlkeCwgZW5kaW5kZXgsIHJlbmRlcl9jb3VudCwgcGFnZXNpemUsIGR1cmF0aW9uLCAxLjAgLyA3LjAsIDEuMSwgMC4xIC8gMTAwMCk7CisKKwkJCQlpZiAobG9vcF9kdXJhdGlvbiA+PSAxMDApCisJCQkJeworCQkJCQl0aGlzLnZpZXdfZmlsbF90aW1lciA9IHRoaXMuZmlsbF9jaHVua3dpc2VfMS5kZWxheSgxLCB0aGlzLCBbaWR4LCBlbmRpbmRleCwgcmVuZGVyX2NvdW50LCBwYWdlc2l6ZSwgc3VwcG9ydF9EbkRfZm9yX3RoaXNfZGlyLCBzdGFydHRpbWUsIGVscywga2JkX2RpciwgcHJlc2VsZWN0XSk7CisJCQkJCXJldHVybjsgLy8gZW5kIGNhbGwgPT0gYnJlYWsgb3V0IG9mIGxvb3AKKwkJCQl9CisJCQl9CisKKwkJCWZpbGUuZGlyID0gai5wYXRoOworCisJCQkvL3RoaXMuZGlhZy5sb2coJ2ZpbGxfY2h1bmt3aXNlXzE6IGRpciA9IGZpbGU6ICcsIGZpbGUsICcgYXQgaW5kZXg6ICcsIGlkeCk7CisKKwkJCS8vIFRoaXMgaXMganVzdCBhIHJhdyBpbWFnZQorCQkJZWwgPSB0aGlzLmxpc3Rfcm93X21ha2VyKCh0aGlzLmxpc3RUeXBlID09PSAndGh1bWInID8gZmlsZS5pY29uNDggOiBmaWxlLmljb24pLCBmaWxlKTsKKworCQkJLy90aGlzLmRpYWcubG9nKCdhZGQgRElSRUNUT1JZIGNsaWNrIGV2ZW50IHRvICcsIGZpbGUpOworCQkJZWwuYWRkRXZlbnQoJ2NsaWNrJywgKGZ1bmN0aW9uKGUpIHsKKwkJCQlzZWxmLmRpYWcubG9nKCdpc19kaXI6Q0xJQ0s6ICcsIGUpOworCQkJCXZhciBub2RlID0gdGhpczsKKwkJCQlzZWxmLnJlbGF5Q2xpY2suYXBwbHkoc2VsZiwgW2UsIG5vZGVdKTsKKwkJCX0pLmJpbmQoZWwpKTsKKworCQkJZWRpdEJ1dHRvbnMgPSBbXTsKKworCQkJLy8gcmVuYW1lLCBkZWxldGUgaWNvbgorCQkJaWYgKGZpbGUubmFtZSAhPT0gJy4uJykKKwkJCXsKKwkJCQlpZiAodGhpcy5vcHRpb25zLnJlbmFtZSkgZWRpdEJ1dHRvbnMucHVzaCgncmVuYW1lJyk7CisJCQkJaWYgKHRoaXMub3B0aW9ucy5kZXN0cm95KSBlZGl0QnV0dG9ucy5wdXNoKCdkZXN0cm95Jyk7CisJCQl9CisKKwkJCWVkaXRCdXR0b25zLmVhY2goZnVuY3Rpb24odikgeworCQkJCS8vaWNvbnMucHVzaCgKKwkJCQlBc3NldC5pbWFnZSh0aGlzLmFzc2V0QmFzZVBhdGggKyAnSW1hZ2VzLycgKyB2ICsgJy5wbmcnLCB7dGl0bGU6IHRoaXMubGFuZ3VhZ2Vbdl19KS5hZGRDbGFzcygnYnJvd3Nlci1pY29uJykuc2V0U3R5bGUoJ29wYWNpdHknLCAwKS5hZGRFdmVudCgnbW91c2V1cCcsIChmdW5jdGlvbihlLCB0YXJnZXQpIHsKKwkJCQkJLy8gdGhpcyA9IGVsLCBzZWxmID0gRk0gaW5zdGFuY2UKKwkJCQkJZS5wcmV2ZW50RGVmYXVsdCgpOworCQkJCQl0aGlzLnN0b3JlKCdlZGl0JywgdHJ1ZSk7CisJCQkJCS8vIGNhbid0IHVzZSAnZmlsZScgaW4gaGVyZSBkaXJlY3RseSBhbnltb3JlIGVpdGhlcjoKKwkJCQkJdmFyIGZpbGUgPSB0aGlzLnJldHJpZXZlKCdmaWxlJyk7CisJCQkJCXNlbGYudGlwcy5oaWRlKCk7CisJCQkJCXNlbGZbdl0oZmlsZSk7CisJCQkJfSkuYmluZChlbCkpLmluamVjdChlbCwndG9wJyk7CisJCQkJLy8pOworCQkJfSwgdGhpcyk7CisKKwkJCWVsc1sxXS5wdXNoKGVsKTsKKwkJCS8vaWYgKGZpbGUubmFtZSA9PT0gJy4uJykgZWwuZmFkZSgwLjcpOworCQkJZWwuaW5qZWN0KG5ldyBFbGVtZW50KCdsaScseydjbGFzcyc6dGhpcy5saXN0VHlwZX0pLmluamVjdCh0aGlzLmJyb3dzZXIpKS5zdG9yZSgncGFyZW50JywgZWwuZ2V0UGFyZW50KCkpOworCQkJLy9pY29ucyA9ICQkKGljb25zLm1hcCgoZnVuY3Rpb24oaWNvbikgeworCQkJLy8gIHRoaXMuc2hvd0Z1bmN0aW9ucyhpY29uLGljb24sMC41LDEpOworCQkJLy8gIHRoaXMuc2hvd0Z1bmN0aW9ucyhpY29uLGVsLmdldFBhcmVudCgnbGknKSwxKTsKKwkJCS8vfSkuYmluZCh0aGlzKSkpOworCisJCQkvLyB5b3UgQ0FOTk9UICdwcmVzZWxlY3QnIGEgZGlyZWN0b3J5IGFzIGlmIGl0IHdlcmUgYSBmaWxlLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGFnYWluc3QgdGhlICdwcmVzZWxlY3QnIG9yICdmbUZpbGUnIHZhbHVlcyBoZXJlIQorCQl9CisKKwkJLy8gYW5kIGFub3RoZXIsIEFMTU9TVCBpZGVudGljYWwsIGxvb3AgdG8gcmVuZGVyIHRoZSBmaWxlcy4gTm90ZSB0aGF0IHRoZXNlIGJ1Z2dlcnMgaGF2ZSB0aGVpciBvd24gcGVjdWxpYXJpdGllcy4uLiBhbmQgbWFrZSBzdXJlIHRoZSBpbmRleCBpcyBhZGp1c3RlZCB0byBwb2ludCBpbnRvIGZpbGVzW10KKwkJdmFyIGRpcl9jb3VudCA9IGouZGlycy5sZW5ndGg7CisKKwkJLy8gc2tpcCBmaWxlc1tdIHJlbmRlcmluZywgd2hlbiB0aGUgc3RhcnRpbmRleCBzdGlsbCBwb2ludHMgaW5zaWRlIGRpcnNbXSAgfiAgdG9vIG1hbnkgZGlyZWN0b3JpZXMgdG8gZml0IGFueSBmaWxlcyBvbiB0aGlzIHBhZ2UhCisJCWlmIChpZHggPj0gZGlyX2NvdW50KQorCQl7CisJCQl2YXIgZGdfZWw7CisKKwkJCWZvciAoIDsgaWR4IDwgZW5kaW5kZXggJiYgaWR4IC0gZGlyX2NvdW50IDwgai5maWxlcy5sZW5ndGg7IGlkeCsrKQorCQkJeworCQkJCWZpbGUgPSBqLmZpbGVzW2lkeCAtIGRpcl9jb3VudF07CisKKwkJCQlpZiAoaWR4ICUgMTAgPT09IDApIHsKKwkJCQkJLy8gdHJ5IG5vdCB0byBzcGVuZCBtb3JlIHRoYW4gMTAwIG1zZWNzIHBlciAoVUkgYmxvY2tpbmchKSBsb29wIHJ1biEKKwkJCQkJbG9vcF9kdXJhdGlvbiA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gbG9vcF9zdGFydHRpbWU7CisJCQkJCWR1cmF0aW9uID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydHRpbWU7CisJCQkJCS8vdGhpcy5kaWFnLmxvZygndGltZSB0YWtlbiBzbyBmYXIgPSAnLCBkdXJhdGlvbiwgJyAvICcsIGxvb3BfZHVyYXRpb24sICcgQCBlbGNudCA9ICcsIGlkeCk7CisKKwkJCQkJLyoKKwkJCQkJICogQXJlIHdlIHJ1bm5pbmcgaW4gYWRhcHRpdmUgcGFnaW5hdGlvbiBtb2RlPyB5ZXM6IGNhbGN1bGF0ZSBlc3RpbWF0ZWQgbmV3IHBhZ2VzaXplIGFuZCBhZGp1c3QgYXZlcmFnZSAoRU1BKSB3aGVuIG5lZWRlZC4KKwkJCQkJICoKKwkJCQkJICogRG8gdGhpcyBoZXJlIGluc3RlYWQgb2YgYXQgdGhlIHZlcnkgZW5kIHNvIHRoYXQgcGFnZXNpemUgd2lsbCBhZGFwdCwgcGFydGljdWxhcmx5IHdoZW4gdXNlciBkb2VzIG5vdCB3YW50IHRvIHdhaXQgZm9yCisJCQkJCSAqIHRoaXMgcmVuZGVyIHRvIGZpbmlzaC4KKwkJCQkJICovCisJCQkJCXRoaXMuYWRhcHRpdmVfdXBkYXRlX3BhZ2luYXRpb25fc2l6ZShpZHgsIGVuZGluZGV4LCByZW5kZXJfY291bnQsIHBhZ2VzaXplLCBkdXJhdGlvbiwgMS4wIC8gNy4wLCAxLjEsIDAuMSAvIDEwMDApOworCisJCQkJCWlmIChsb29wX2R1cmF0aW9uID49IDEwMCkKKwkJCQkJeworCQkJCQkJdGhpcy52aWV3X2ZpbGxfdGltZXIgPSB0aGlzLmZpbGxfY2h1bmt3aXNlXzEuZGVsYXkoMSwgdGhpcywgW2lkeCwgZW5kaW5kZXgsIHJlbmRlcl9jb3VudCwgcGFnZXNpemUsIHN1cHBvcnRfRG5EX2Zvcl90aGlzX2Rpciwgc3RhcnR0aW1lLCBlbHMsIGtiZF9kaXIsIHByZXNlbGVjdF0pOworCQkJCQkJcmV0dXJuOyAvLyBlbmQgY2FsbCA9PSBicmVhayBvdXQgb2YgbG9vcAorCQkJCQl9CisJCQkJfQorCisJCQkJZmlsZS5kaXIgPSBqLnBhdGg7CisKKwkJCQkvL3RoaXMuZGlhZy5sb2coJ2ZpbGxfY2h1bmt3aXNlXzE6IGZpbGVzOiBmaWxlOiAnLCBmaWxlLCAnIGF0IGluZGV4OiAnLCBpZHggLSBkaXJfY291bnQpOworCisJCQkJLy8gQXMgd2Ugbm93IGhhdmUgdHdvIHZpZXdzIGludG8gdGhlIGRpcmVjdG9yeSwgd2UgaGF2ZSB0byBmZXRjaCB0aGUgdGh1bWJuYWlscywgZXZlbiB3aGVuIHdlJ3JlIGluICdsaXN0JyB2aWV3OiB0aGUgZGlyZWNvcnkgZ2FsbGVyeSB3aWxsIG5lZWQgdGhlbSEKKwkJCQkvLyBCZXNpZGVzLCBmZXRjaGluZyB0aGUgdGh1bWJzIGFuZCBhbGwgcmlnaHQgYWZ0ZXIgd2UgcmVuZGVyIHRoZSBkaXJlY3RvcnkgYWxzbyBtYWtlcyB0aGVzZSB0aHVtYnMgKyBtZXRhZGF0YSBhdmFpbGFibGUgZm9yIGRyYWcmZHJvcCBnYWxsZXJ5IGFuZAorCQkJCS8vICdzZWxlY3QgbW9kZScsIHNvIHRoZXkgZG9uJ3QgYWx3YXlzIGhhdmUgdG8gYXNrIGZvciB0aGUgbWV0YSBkYXRhIHdoZW4gaXQgaXMgcmVxdWlyZWQgdGhlcmUgYW5kIHRoZW4uCisJCQkJaWYgKGZpbGUudGh1bWI0OCB8fCAgdGhpcy5saXN0VHlwZSAhPT0gJ3RodW1iJyB8fCAhZmlsZS50aHVtYnNfZGVmZXJyZWQpCisJCQkJeworCQkJCQkvLyBUaGlzIGlzIGp1c3QgYSByYXcgaW1hZ2UKKwkJCQkJZWwgPSB0aGlzLmxpc3Rfcm93X21ha2VyKCh0aGlzLmxpc3RUeXBlID09PSAndGh1bWInID8gKGZpbGUudGh1bWI0OCA/IGZpbGUudGh1bWI0OCA6IGZpbGUuaWNvbjQ4KSA6IGZpbGUuaWNvbiksIGZpbGUpOworCisJCQkJCWRnX2VsID0gdGhpcy5kaXJfZ2FsbGVyeV9pdGVtX21ha2VyKGZpbGUuaWNvbjQ4LCBmaWxlKTsKKwkJCQkJaWYgKGZpbGUudGh1bWI0OCkKKwkJCQkJeworCQkJCQkJdGhpcy5kaXJfZ2FsbGVyeV9zZXRfYWN0dWFsX2ltZyhmaWxlLCBkZ19lbCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSAgICAvLyB0aHVtYnNfZGVmZXJyZWQuLi4KKwkJCQl7CisJCQkJCS8vIFdlIG11c3QgQUpBWCBQT1NUIG91ciBwcm9wYWdhdGVEYXRhLCBzbyB3ZSBuZWVkIHRvIGRvIHRoZSBwb3N0IGFuZCB0YWtlIHRoZSB1cmwgdG8gdGhlCisJCQkJCS8vIHRodW1ibmFpbCBmcm9tIHRoZSBwb3N0IHJlc3VsdHMuCisJCQkJCS8vCisJCQkJCS8vIFRoZSBhbHRlcm5hdGl2ZSBoZXJlLCB0YWtpbmcgb25seSAxIHJvdW5kIHRyaXAgaW5zdGVhZCBvZiAyLCB3b3VsZCBoYXZlIGJlZW4gdG8gRk9STSBQT1NUCisJCQkJCS8vIHRvIGEgdGlueSBpZnJhbWUsIHdoaWNoIGlzIHN1aXRhYmx5IHNpemVkIHRvIGNvbnRhaW4gdGhlIGdlbmVyYXRlZCB0aHVtYm5haWwgYW5kIHRoZSBQT1NUCisJCQkJCS8vIGFjdHVhbGx5IHJldHVybmluZyB0aGUgYmluYXJ5IGltYWdlIGRhdGEsIHRodXMgdGhlIGlmcmFtZSBjb250ZW50cyBiZWNvbWluZyB0aGUgdGh1bWJuYWlsIGltYWdlLgorCisJCQkJCS8vIHVwZGF0ZSB0aGlzIG9uZSBhbG9uZ3NpZGUgdGhlICdlbCc6CisJCQkJCWRnX2VsID0gdGhpcy5kaXJfZ2FsbGVyeV9pdGVtX21ha2VyKGZpbGUuaWNvbjQ4LCBmaWxlKTsKKworCQkJCQllbCA9IChmdW5jdGlvbihmaWxlLCBkZ19lbCkgeyAgICAgICAgICAgLy8gQ2xvc3VyZQorCQkJCQkJdmFyIGljb25wYXRoID0gdGhpcy5hc3NldEJhc2VQYXRoICsgJ0ltYWdlcy9JY29ucy8nICsgKHRoaXMubGlzdFR5cGUgPT09ICd0aHVtYicgPyAnTGFyZ2UvJyA6ICcnKSArICdkZWZhdWx0LWVycm9yLnBuZyc7CisJCQkJCQl2YXIgbGlzdF9yb3cgPSB0aGlzLmxpc3Rfcm93X21ha2VyKCh0aGlzLmxpc3RUeXBlID09PSAndGh1bWInID8gZmlsZS5pY29uNDggOiBmaWxlLmljb24pLCBmaWxlKTsKKworCQkJCQkJdmFyIHR4X2NmZyA9IHRoaXMub3B0aW9ucy5ta1NlcnZlclJlcXVlc3RVUkwodGhpcywgJ2RldGFpbCcsIHsKKwkJCQkJCQkJCQlkaXJlY3Rvcnk6IHRoaXMuZGlybmFtZShmaWxlLnBhdGgpLAorCQkJCQkJCQkJCWZpbGU6IGZpbGUubmFtZSwKKwkJCQkJCQkJCQlmaWx0ZXI6IHRoaXMub3B0aW9ucy5maWx0ZXIsCisJCQkJCQkJCQkJbW9kZTogJ2RpcmVjdCcgKyB0aGlzLm9wdGlvbnMuZGV0YWlsSW5mb01vZGUKKwkJCQkJCQkJCX0pOworCisJCQkJCQl2YXIgcmVxID0gbmV3IEZpbGVNYW5hZ2VyLlJlcXVlc3QoeworCQkJCQkJCXVybDogdHhfY2ZnLnVybCwKKwkJCQkJCQlkYXRhOiB0eF9jZmcuZGF0YSwKKwkJCQkJCQlmbURpc3BsYXlFcnJvcnM6IGZhbHNlLCAgIC8vIFNob3VsZCB3ZSBkaXNwbGF5IHRoZSBlcnJvciBoZXJlPyBObywgd2UganVzdCBkaXNwbGF5IHRoZSBnZW5lcmFsIGVycm9yIGljb24gaW5zdGVhZAorCQkJCQkJCW9uUmVxdWVzdDogZnVuY3Rpb24oKSB7fSwKKwkJCQkJCQlvblN1Y2Nlc3M6IChmdW5jdGlvbihqKSB7CisJCQkJCQkJCWlmICghaiB8fCAhai5zdGF0dXMgfHwgIWoudGh1bWI0OCkKKwkJCQkJCQkJeworCQkJCQkJCQkJbGlzdF9yb3cuZ2V0RWxlbWVudCgnc3Bhbi5mbS10aHVtYi1iZycpLnNldFN0eWxlKCdiYWNrZ3JvdW5kLWltYWdlJywgJ3VybCgnICsgKHRoaXMubGlzdFR5cGUgPT09ICd0aHVtYicgPyAoai5pY29uNDggPyBqLmljb240OCA6IGljb25wYXRoKSA6IChqLmljb24gPyBqLmljb24gOiBpY29ucGF0aCkpICsgJyknKTsKKwkJCQkJCQkJCWRnX2VsLmdldEVsZW1lbnQoJ2Rpdi5kaXItZ2FsLXRodW1iLWJnJykuc2V0U3R5bGUoJ2JhY2tncm91bmQtaW1hZ2UnLCAndXJsKCcgKyAoai5pY29uNDggPyBqLmljb240OCA6IGljb25wYXRoKSArICcpJyk7CisJCQkJCQkJCX0KKwkJCQkJCQkJZWxzZQorCQkJCQkJCQl7CisJCQkJCQkJCQlsaXN0X3Jvdy5nZXRFbGVtZW50KCdzcGFuLmZtLXRodW1iLWJnJykuc2V0U3R5bGUoJ2JhY2tncm91bmQtaW1hZ2UnLCAndXJsKCcgKyAodGhpcy5saXN0VHlwZSA9PT0gJ3RodW1iJyA/IGoudGh1bWI0OCA6IGouaWNvbikgKyAnKScpOworCQkJCQkJCQkJaWYgKGoudGh1bWI0OCkKKwkJCQkJCQkJCXsKKwkJCQkJCQkJCQl0aGlzLmRpcl9nYWxsZXJ5X3NldF9hY3R1YWxfaW1nKGosIGRnX2VsKTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCisJCQkJCQkJCS8vIHVwZGF0ZSB0aGUgc3RvcmVkIGpzb24gZm9yIHRoaXMgZmlsZSBhcyB3ZWxsOgorCQkJCQkJCQlmaWxlID0gT2JqZWN0Lm1lcmdlKGZpbGUsIGopOworCisJCQkJCQkJCWRlbGV0ZSBmaWxlLmVycm9yOworCQkJCQkJCQlkZWxldGUgZmlsZS5zdGF0dXM7CisJCQkJCQkJCWRlbGV0ZSBmaWxlLmNvbnRlbnQ7CisKKwkJCQkJCQkJaWYgKGZpbGUuZWxlbWVudCkKKwkJCQkJCQkJeworCQkJCQkJCQkJZmlsZS5lbGVtZW50LnN0b3JlKCdmaWxlJywgZmlsZSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9KS5iaW5kKHRoaXMpLAorCQkJCQkJCW9uRXJyb3I6IChmdW5jdGlvbih0ZXh0LCBlcnJvcikgeworCQkJCQkJCQlsaXN0X3Jvdy5nZXRFbGVtZW50KCdzcGFuLmZtLXRodW1iLWJnJykuc2V0U3R5bGUoJ2JhY2tncm91bmQtaW1hZ2UnLCAndXJsKCcgKyBpY29ucGF0aCArICcpJyk7CisJCQkJCQkJCWRnX2VsLmdldEVsZW1lbnQoJ2Rpdi5kaXItZ2FsLXRodW1iLWJnJykuc2V0U3R5bGUoJ2JhY2tncm91bmQtaW1hZ2UnLCAndXJsKCcgKyBpY29ucGF0aCArICcpJyk7CisJCQkJCQkJfSkuYmluZCh0aGlzKSwKKwkJCQkJCQlvbkZhaWx1cmU6IChmdW5jdGlvbih4bWxIdHRwUmVxdWVzdCkgeworCQkJCQkJCQlsaXN0X3Jvdy5nZXRFbGVtZW50KCdzcGFuLmZtLXRodW1iLWJnJykuc2V0U3R5bGUoJ2JhY2tncm91bmQtaW1hZ2UnLCAndXJsKCcgKyBpY29ucGF0aCArICcpJyk7CisJCQkJCQkJCWRnX2VsLmdldEVsZW1lbnQoJ2Rpdi5kaXItZ2FsLXRodW1iLWJnJykuc2V0U3R5bGUoJ2JhY2tncm91bmQtaW1hZ2UnLCAndXJsKCcgKyBpY29ucGF0aCArICcpJyk7CisJCQkJCQkJfSkuYmluZCh0aGlzKQorCQkJCQkJfSwgdGhpcyk7CisKKwkJCQkJCXRoaXMuUmVxdWVzdFF1ZXVlLmFkZFJlcXVlc3QoJ2ZpbGw6JyArIFN0cmluZy51bmlxdWVJRCgpLCByZXEpOworCQkJCQkJcmVxLnNlbmQoKTsKKworCQkJCQkJcmV0dXJuIGxpc3Rfcm93OworCQkJCQl9KS5iaW5kKHRoaXMpKGZpbGUsIGRnX2VsKTsKKwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIFdBUk5JTkc6IGZvciBzb21lICh0byBtZSkgaW5jb21wcmVoZW5zaWJsZSByZWFzb24gdGhlIG9sZCBjb2RlIHdoaWNoIGJvdW5kIHRoZSBldmVudCBoYW5kbGVycyB0byAndGhpcz09c2VsZicgYW5kIHdoaWNoIHVzZWQgdGhlICdlbCcgdmFyaWFibGUKKwkJCQkgKiAgICAgICAgICBhdmFpbGFibGUgaGVyZSwgZG9lcyBOT1QgV09SSyBBTlkgTU9SRSAtIHRlc3RlZCBpbiBGRjMuNi4gVHVybnMgb3V0ICdlbCcgaXMgcG9pbnRpbmcgYW55d2hlcmUgYnV0IHdoZXJlIHlvdSB3YW50IGl0IGJ5IHRoZSB0aW1lCisJCQkJICogICAgICAgICAgdGhlIGV2ZW50IGhhbmRsZXIgaXMgZXhlY3V0ZWQuCisJCQkJICoKKwkJCQkgKiAgICAgICAgICBUaGUgJ3NvbHV0aW9uJyB3aGljaCBJIGZvdW5kIHdhcyB0byByZWx5IG9uIHRoZSAnc2VsZicgcmVmZXJlbmNlIGluc3RlYWQgYW5kIGJpbmQgdG8gJ2VsJy4gSWYgdGhlIG9uZSB3b3VsZG4ndCB3b3JrLCB0aGUgb3RoZXIgc2hvdWxkbid0LAorCQkJCSAqICAgICAgICAgIGJ1dCB0aGVyZSB5b3UgaGF2ZSBpdDogdGhpcyB3YXkgYXJvdW5kIGl0IHdvcmtzLiBGRjMuNi4xNCA6LSgKKwkJCQkgKgorCQkJCSAqIEVESVQgMjAxMS8wMy8xNjogdGhlIHByb2JsZW0gc3RhcnRlZCBhcyBzb29uIGFzIHRoZSBvbGQgQXJyYXkuZWFjaChmdW5jdGlvbiguLi4pIHsuLi59KSBieSB0aGUgY2h1bmtlZCBjb2RlIHdoaWNoIHVzZXMgYSBmb3IgbG9vcDoKKwkJCQkgKgorCQkJCSAqICAgICAgICAgICAgICBodHRwOi8vamliYmVyaW5nLmNvbS9mYXEvbm90ZXMvY2xvc3VyZXMvCisJCQkJICoKKwkJCQkgKiAgICAgICAgICBhcyBpdCBzYXlzIHRoZXJlOgorCQkJCSAqCisJCQkJICogICAgICAgICAgICAgIEEgY2xvc3VyZSBpcyBmb3JtZWQgd2hlbiBvbmUgb2YgdGhvc2UgaW5uZXIgZnVuY3Rpb25zIGlzIG1hZGUgYWNjZXNzaWJsZSBvdXRzaWRlIG9mIHRoZSBmdW5jdGlvbiBpbiB3aGljaCBpdCB3YXMKKwkJCQkgKiAgICAgICAgICAgICAgY29udGFpbmVkLCBzbyB0aGF0IGl0IG1heSBiZSBleGVjdXRlZCBhZnRlciB0aGUgb3V0ZXIgZnVuY3Rpb24gaGFzIHJldHVybmVkLiBBdCB3aGljaCBwb2ludCBpdCBzdGlsbCBoYXMgYWNjZXNzIHRvCisJCQkJICogICAgICAgICAgICAgIHRoZSBsb2NhbCB2YXJpYWJsZXMsIHBhcmFtZXRlcnMgYW5kIGlubmVyIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBvZiBpdHMgb3V0ZXIgZnVuY3Rpb24uIFRob3NlIGxvY2FsIHZhcmlhYmxlcywKKwkJCQkgKiAgICAgICAgICAgICAgcGFyYW1ldGVyIGFuZCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgKGluaXRpYWxseSkgPj4+PiBoYXZlIHRoZSB2YWx1ZXMgdGhhdCB0aGV5IGhhZCB3aGVuIHRoZSBvdXRlciBmdW5jdGlvbiByZXR1cm5lZCA8PDw8CisJCQkJICogICAgICAgICAgICAgIGFuZCBtYXkgYmUgaW50ZXJhY3RlZCB3aXRoIGJ5IHRoZSBpbm5lciBmdW5jdGlvbi4KKwkJCQkgKgorCQkJCSAqICAgICAgICAgIFRoZSA+Pj4+IDw8PDwgZW1waGFzaXMgaXMgbWluZTogaW4gdGhlIC5lYWNoKCkgY29kZSwgZWFjaCBlbCB3YXMgYSBzZXBhcmF0ZSBpbmRpdmlkdWFsLCB3aGlsZSBkdWUgdG8gdGhlIGZvciBsb29wLAorCQkJCSAqICAgICAgICAgIHRoZSBsYXN0ICdlbCcgdG8gZXhpc3QgYXQgYWxsIGlzIHRoZSBvbmUgY3JlYXRlZCBkdXJpbmcgdGhlIGxhc3Qgcm91bmQgb2YgdGhlIGxvb3AgaW4gdGhhdCBjaHVuay4gV2hpY2ggZXhwbGFpbnMgdGhlCisJCQkJICogICAgICAgICAgb2JzZXJ2ZWQgYmVoYXZpb3VyIGJlZm9yZSB0aGUgZml4OiB0aGUgZmlsZSBuYW1lcyBhc3NvY2lhdGVkIHdpdGggdGhlICdlbCcgZWxlbWVudCBvYmplY3Qgd2VyZSBhbHdheXMgcG9pbnRpbmcKKwkJCQkgKiAgICAgICAgICBhdCBzb21lIGl0ZW0gZnVydGhlciBkb3duIHRoZSBsaXN0LCBub3QgbmVjZXNzYXJpbHkgdGhlIHZlcnkgbGFzdCBvbmUsIGJ1dCBhbHdheXMgdGhlc2UgcmVmZXJlbmNlcyB3ZXJlICdncm91cGVkJzoKKwkJCQkgKiAgICAgICAgICBtdWx0aXBsZSByb3dzIHdvdWxkIHByb2R1Y2UgdGhlIHNhbWUgZmlsZW5hbWUuCisJCQkJICoKKwkJCQkgKiBFWFRSQTogMjAxMS8wNC8wOTogd2h5IHlvdSBkb24ndCB3YW50IHRvIGFkZCB0aGlzIGV2ZW50IGZvciBhbnkgZHJhZ2dhYmxlIGl0ZW0hCisJCQkJICoKKwkJCQkgKiAgICAgICAgICBJdCB0dXJucyBvdXQgdGhhdCBJRTkgKElFNi04IHVudGVzdGVkIGFzIEkgd3JpdGUgdGhpcykgYW5kIE9wZXJhIGRvIE5PVCBmaXJlIHRoZSAnY2xpY2snIGV2ZW50IGFmdGVyIHRoZSBkcmFnIG9wZXJhdGlvbiBpcworCQkJCSAqICAgICAgICAgICdjYW5jZWwnbGVkLCB3aGlsZSBvdGhlciBicm93c2VycyBmaXJlIGJvdGggKENocm9tZS9TYWZhcmkvRkYzKS4KKwkJCQkgKiAgICAgICAgICBGb3IgdGhlIGxhdHRlciBvbmVzLCB0aGUgZXZlbnQgaGFuZGxlciBzZXF1ZW5jZSBhZnRlciBhIHNpbXBsZSBjbGljayBvbiBhIGRyYWdnYWJsZSBpdGVtIGlzOgorCQkJCSAqICAgICAgICAgICAgLSBEcmFnOjpvbkJlZm9yZVN0YXJ0CisJCQkJICogICAgICAgICAgICAtIERyYWc6Om9uQ2FuY2VsCisJCQkJICogICAgICAgICAgICAtICdjbGljaycKKwkJCQkgKiAgICAgICAgICB3aGlsZSBhIHRpbnkgYW1vdW50IG9mIGRyYWdnaW5nIHByb2R1Y2VzIHRoaXMgc2VxdWVuY2UgaW5zdGVhZDoKKwkJCQkgKiAgICAgICAgICAgIC0gRHJhZzo6b25CZWZvcmVTdGFydAorCQkJCSAqICAgICAgICAgICAgLSBEcmFnOjpvblN0YXJ0CisJCQkJICogICAgICAgICAgICAtIERyYWc6Om9uRHJvcAorCQkJCSAqICAgICAgICAgICAgLSAnY2xpY2snCisJCQkJICoKKwkJCQkgKiAgICAgICAgICBNZWFud2hpbGUsIE9wZXJhIGFuZCBJRTkgZG8gdGhpczoKKwkJCQkgKiAgICAgICAgICAgIC0gRHJhZzo6b25CZWZvcmVTdGFydAorCQkJCSAqICAgICAgICAgICAgLSBEcmFnOjpvbkNhbmNlbAorCQkJCSAqICAgICAgICAgICAgLSAqKk5PKiogY2xpY2sgZXZlbnQhCisJCQkJICogICAgICAgICAgd2hpbGUgYSB0aW55IGFtb3VudCBvZiBkcmFnZ2luZyBwcm9kdWNlcyB0aGlzIHNlcXVlbmNlIGluc3RlYWQ6CisJCQkJICogICAgICAgICAgICAtIERyYWc6Om9uQmVmb3JlU3RhcnQKKwkJCQkgKiAgICAgICAgICAgIC0gRHJhZzo6b25TdGFydAorCQkJCSAqICAgICAgICAgICAgLSBEcmFnOjpvbkRyb3AKKwkJCQkgKiAgICAgICAgICAgIC0gKipOTyoqIGNsaWNrIGV2ZW50IQorCQkJCSAqCisJCQkJICogICAgICAgICAgd2hpY2ggZXhwbGFpbnMgd2h5IHRoZSBvbGQgaW1wbGVtZW50YXRpb24gZGlkIG5vdCBzaW1wbHkgcmVnaXN0ZXIgdGhpcyAnY2xpY2snIGV2ZW50IGhhbmRsZXIgYW5kIGhhZCAncmV2ZXJ0JyBmYWtlIHRoZSAnY2xpY2snCisJCQkJICogICAgICAgICAgZXZlbnQgaW5zdGVhZC4KKwkJCQkgKiAgICAgICAgICBIT1dFVkVSLCB0aGUgb2xkIHdheSwgdXNpbmcgcmV2ZXJ0KCkgKG5vdyBjYWxsZWQgcmV2ZXJ0X2RyYWdfbl9kcm9wKCkpIHdhcyBXQVkgdG9vIGhhcHB5IHRvIGhpdCB0aGUgJ2NsaWNrJyBldmVudCBoYW5kbGVyLiBJbgorCQkJCSAqICAgICAgICAgIGZhY3QsIHRoZSBvbmx5IHNwb3Qgd2hlcmUgc3VjaCAnbWFudWFsbHkgZmlyaW5nJyB3YXMgZGVzaXJhYmxlIGlzIHdoZW4gdGhlIGRyYWcgb3BlcmF0aW9uIGlzIENBTkNFTExFRC4gQW5kIG9ubHkgdGhlcmUhCisJCQkJICovCisKKwkJCQkvLyAyMDExLzA0LzA5OiBvbmx5IHJlZ2lzdGVyIHRoZSAnY2xpY2snIGV2ZW50IHdoZW4gdGhlIGVsZW1lbnQgaXMgTk9UIGEgZHJhZ2dhYmxlOgorCQkJCWlmICghc3VwcG9ydF9EbkRfZm9yX3RoaXNfZGlyKQorCQkJCXsKKwkJCQkJc2VsZi5kaWFnLmxvZygnYWRkIEZJTEUgY2xpY2sgZXZlbnQgdG8gJywgZmlsZSk7CisJCQkJCWVsLmFkZEV2ZW50KCdjbGljaycsIChmdW5jdGlvbihlKSB7CisJCQkJCQlzZWxmLmRpYWcubG9nKCdpc19maWxlOkNMSUNLOiAnLCBlKTsKKwkJCQkJCXZhciBub2RlID0gdGhpczsKKwkJCQkJCXNlbGYucmVsYXlDbGljay5hcHBseShzZWxmLCBbZSwgbm9kZV0pOworCQkJCQl9KS5iaW5kKGVsKSk7CisJCQkJfQorCisJCQkJLy8gYWRkIGRvdWJsZSBjbGljayBmdW5jdGlvbmFsaXR5IHRvIHRoZSBsaXN0IGVsZW1lbnRzCisJCQkJaWYodGhpcy5vcHRpb25zLnNlbGVjdGFibGUgPT09IHRydWUpIHsKKwkJCQkJZWwuYWRkRXZlbnQoJ2RibGNsaWNrJywgKGZ1bmN0aW9uKGUpIHsKKwkJCQkJCXNlbGYuZGlhZy5sb2coJ2lzX2ZpbGU6REJMQ0xJQ0s6ICcsIGUpOworCQkJCQkJdmFyIG5vZGUgPSB0aGlzOworCQkJCQkJc2VsZi5yZWxheURibENsaWNrLmFwcGx5KHNlbGYsIFtlLCBub2RlXSk7CisJCQkJCX0pLmJpbmQoZWwpKTsKKwkJCQl9CisKKwkJCQllZGl0QnV0dG9ucyA9IFtdOworCisJCQkJLy8gZG93bmxvYWQsIHJlbmFtZSwgZGVsZXRlIGljb24KKwkJCQlpZiAodGhpcy5vcHRpb25zLmRvd25sb2FkKSBlZGl0QnV0dG9ucy5wdXNoKCdkb3dubG9hZCcpOworCQkJCWlmICh0aGlzLm9wdGlvbnMucmVuYW1lKSBlZGl0QnV0dG9ucy5wdXNoKCdyZW5hbWUnKTsKKwkJCQlpZiAodGhpcy5vcHRpb25zLmRlc3Ryb3kpIGVkaXRCdXR0b25zLnB1c2goJ2Rlc3Ryb3knKTsKKworCQkJCWVkaXRCdXR0b25zLmVhY2goZnVuY3Rpb24odikgeworCQkJCQlBc3NldC5pbWFnZSh0aGlzLmFzc2V0QmFzZVBhdGggKyAnSW1hZ2VzLycgKyB2ICsgJy5wbmcnLCB7dGl0bGU6IHRoaXMubGFuZ3VhZ2Vbdl19KS5hZGRDbGFzcygnYnJvd3Nlci1pY29uJykuc2V0U3R5bGUoJ29wYWNpdHknLCAwKS5hZGRFdmVudCgnbW91c2V1cCcsIChmdW5jdGlvbihlLCB0YXJnZXQpIHsKKwkJCQkJCS8vIHRoaXMgPSBlbCwgc2VsZiA9IEZNIGluc3RhbmNlCisJCQkJCQllLnByZXZlbnREZWZhdWx0KCk7CisJCQkJCQl0aGlzLnN0b3JlKCdlZGl0JywgdHJ1ZSk7CisJCQkJCQkvLyBjYW4ndCB1c2UgJ2ZpbGUnIGluIGhlcmUgZGlyZWN0bHkgYW55bW9yZSBlaXRoZXI6CisJCQkJCQl2YXIgZmlsZSA9IHRoaXMucmV0cmlldmUoJ2ZpbGUnKTsKKwkJCQkJCXNlbGYudGlwcy5oaWRlKCk7CisJCQkJCQlzZWxmW3ZdKGZpbGUpOworCQkJCQl9KS5iaW5kKGVsKSkuaW5qZWN0KGVsLCd0b3AnKTsKKwkJCQl9LCB0aGlzKTsKKworCQkJCWVsc1swXS5wdXNoKGVsKTsKKwkJCQllbC5pbmplY3QobmV3IEVsZW1lbnQoJ2xpJyx7J2NsYXNzJzp0aGlzLmxpc3RUeXBlfSkuaW5qZWN0KHRoaXMuYnJvd3NlcikpLnN0b3JlKCdwYXJlbnQnLCBlbC5nZXRQYXJlbnQoKSk7CisKKwkJCQkvLyAtPj4gTE9BRCB0aGUgRklMRS9JTUFHRSBmcm9tIGhpc3Rvcnkgd2hlbiBQQUdFIGdldHMgUkVGUkVTSEVEIChvbmx5IGRpcmVjdGx5IGFmdGVyIHJlZnJlc2gpCisJCQkJLy90aGlzLmRpYWcubG9nKCdmaWxsIG9uIFBSRVNFTEVDVCAodGVzdCk6IG9uU2hvdyA9ICcsIHRoaXMuZmlsbEluZm9PbkZpbGxGaXJlZCwgJywgZmlsZSA9ICcsIGZpbGUsICcsIGZtRmlsZSA9ICcsIGZtRmlsZSwgJywgcHJlc2VsZWN0ID0gJywgcHJlc2VsZWN0KTsKKwkJCQlpZiAoIXRoaXMuZmlsbEluZm9PbkZpbGxGaXJlZCkKKwkJCQl7CisJCQkJCWlmIChwcmVzZWxlY3QpCisJCQkJCXsKKwkJCQkJCWlmIChwcmVzZWxlY3QgPT09IGZpbGUubmFtZSkKKwkJCQkJCXsKKwkJCQkJCQl0aGlzLmRlc2VsZWN0KG51bGwpOworCQkJCQkJCXRoaXMuQ3VycmVudCA9IGZpbGUuZWxlbWVudDsKKwkJCQkJCQluZXcgRnguU2Nyb2xsKHRoaXMuYnJvd3NlclNjcm9sbCx7ZHVyYXRpb246ICdzaG9ydCcsIG9mZnNldDoge3g6IDAsIHk6IC0odGhpcy5icm93c2VyU2Nyb2xsLmdldFNpemUoKS55LzQpfX0pLnRvRWxlbWVudChmaWxlLmVsZW1lbnQpOworCQkJCQkJCWZpbGUuZWxlbWVudC5hZGRDbGFzcygnc2VsZWN0ZWQnKTsKKwkJCQkJCQl0aGlzLmRpYWcubG9nKCdmaWxsIG9uIFBSRVNFTEVDVDogZmlsbEluZm86IGZpbGUgPSAnLCBmaWxlKTsKKwkJCQkJCQl0aGlzLmZpbGxJbmZvKGZpbGUpOworCQkJCQkJCXRoaXMuZmlsbEluZm9PbkZpbGxGaXJlZCA9IHRydWU7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZWxzZSBpZiAoZm1GaWxlKQorCQkJCQl7CisJCQkJCQlpZiAoZm1GaWxlID09PSBmaWxlLm5hbWUpCisJCQkJCQl7CisJCQkJCQkJdGhpcy5kZXNlbGVjdChudWxsKTsKKwkJCQkJCQl0aGlzLkN1cnJlbnQgPSBmaWxlLmVsZW1lbnQ7CisJCQkJCQkJbmV3IEZ4LlNjcm9sbCh0aGlzLmJyb3dzZXJTY3JvbGwse2R1cmF0aW9uOiAnc2hvcnQnLCBvZmZzZXQ6IHt4OiAwLCB5OiAtKHRoaXMuYnJvd3NlclNjcm9sbC5nZXRTaXplKCkueS80KX19KS50b0VsZW1lbnQoZmlsZS5lbGVtZW50KTsKKwkJCQkJCQlmaWxlLmVsZW1lbnQuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7CisJCQkJCQkJdGhpcy5kaWFnLmxvZygnZmlsbDogZmlsbEluZm86IGZpbGUgPSAnLCBmaWxlKTsKKwkJCQkJCQl0aGlzLmZpbGxJbmZvKGZpbGUpOworCQkJCQkJCXRoaXMuZmlsbEluZm9PbkZpbGxGaXJlZCA9IHRydWU7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisKKworLy8gUGFydGlrdWxlCisvLyBUaHVtYnMgbGlzdAorLy8gZWRpdDogRmFiaWFuIFZvZ2Vsc3RlbGxlcjogbWFkZSB0aHVtYmxpc3QgRFJBR0dBQkxFCisKKwkJCQkvLyB1c2UgYSBjbG9zdXJlIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZGdfZWwsIG90aGVyd2lzZSBkZ19lbCwgZmlsZSwgZXRjLiB3aWxsIGNhcnJ5IHRoZSB2YWx1ZXMgdGhleSBnb3QgYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCEKKwkJCQkoZnVuY3Rpb24oZGdfZWwsIGVsLCBmaWxlKQorCQkJCXsKKwkJCQkJdmFyIHRodW1iTGkgPSBuZXcgRWxlbWVudCgnbGknKTsKKworCQkJCQlkZ19lbC5zdG9yZSgnZWxfcmVmJywgZWwpLnN0b3JlKCdmaWxlJyxmaWxlKS5zdG9yZSgncGFyZW50Jyx0aHVtYkxpKTsKKworCQkJCQl0aHVtYkxpLmluamVjdCh0aGlzLmRpcl9maWxlbGlzdF90aHVtYlVsKTsKKwkJCQkJZGdfZWwuaW5qZWN0KHRodW1iTGkpOworCQkJCX0pLmJpbmQodGhpcykoZGdfZWwsIGVsLCBmaWxlKTsKKworLy8gLyBQYXJ0aWt1bGUKKwkJCX0KKwkJfQorCisJCS8vIHdoZW4gd2UgZ2V0IGhlcmUsIHdlIGhhdmUgcmVuZGVyZWQgYWxsIGZpbGVzIGluIHRoZSBjdXJyZW50IHBhZ2UgYW5kIHdlIGtub3cgd2hldGhlciB3ZSBoYXZlIGZpcmVkIG9mZiBhIGZpbGxJbmZvIG9uIGEgcHJlc2VsZWN0L2hpc3RvcnktcmVjYWxsZWQgZmlsZSBub3csIG9yIG5vdDoKKwkJaWYgKCF0aGlzLmZpbGxJbmZvT25GaWxsRmlyZWQpCisJCXsKKwkJCXRoaXMuZGlhZy5sb2coJ2ZpbGwgaW50ZXJuYWw6IGZpbGxJbmZvOiBmaWxlID0gJywgaiwgai50aGlzX2Rpcik7CisJCQl0aGlzLmZpbGxJbmZvKGoudGhpc19kaXIpOworCQkJdGhpcy5maWxsSW5mb09uRmlsbEZpcmVkID0gdHJ1ZTsKKwkJfQorCisJCS8vIGNoZWNrIGhvdyBtdWNoIHdlJ3ZlIGNvbnN1bWVkIHNvIGZhcjoKKwkJZHVyYXRpb24gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXJ0dGltZTsKKwkJLy90aGlzLmRpYWcubG9nKCcgKyB0aW1lIHRha2VuIGluIGFycmF5IHRyYXZlcnNhbCA9ICcsIGR1cmF0aW9uKTsKKworCQkvLyBnbyB0byB0aGUgbmV4dCBzdGFnZSwgcmlnaHQgYWZ0ZXIgdGhlc2UgbWVzc2FnZXMuLi4gOy0pCisJCXRoaXMudmlld19maWxsX3RpbWVyID0gdGhpcy5maWxsX2NodW5rd2lzZV8yLmRlbGF5KDEsIHRoaXMsIFtyZW5kZXJfY291bnQsIHBhZ2VzaXplLCBzdXBwb3J0X0RuRF9mb3JfdGhpc19kaXIsIHN0YXJ0dGltZSwgZWxzLCBrYmRfZGlyXSk7CisJfSwKKworCS8qCisJICogU2VlIGNvbW1lbnQgZm9yIGZpbGxfY2h1bmt3aXNlXzEoKTogdGhlIG1ha2VEcmFnZ2FibGUoKSBpcyBhIGxvb3AgaW4gaXRzZWxmIGFuZCB0YWtpbmcgc29tZSBjb25zaWRlcmFibGUgdGltZQorCSAqIGFzIHdlbGwsIHNvIG1ha2UgaXQgaGFwcGVuIGluIGEgJ2ZyZXNoJyBydW4gaGVyZS4uLgorCSAqLworCWZpbGxfY2h1bmt3aXNlXzI6IGZ1bmN0aW9uKHJlbmRlcl9jb3VudCwgcGFnZXNpemUsIHN1cHBvcnRfRG5EX2Zvcl90aGlzX2Rpciwgc3RhcnR0aW1lLCBlbHMsIGtiZF9kaXIpIHsKKworCQl2YXIgZHVyYXRpb24gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXJ0dGltZTsKKwkJLy90aGlzLmRpYWcubG9nKCcgKyB0aW1lIGR1cmF0aW9uIEAgZmlsbF9jaHVua3dpc2VfMigpIGJlZ2luOiAnLCBkdXJhdGlvbik7CisKKwkJLy8gY2hlY2sgaG93IG11Y2ggd2UndmUgY29uc3VtZWQgc28gZmFyOgorCQlkdXJhdGlvbiA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnR0aW1lOworCQkvL3RoaXMuZGlhZy5sb2coJyArIHRpbWUgdGFrZW4gaW4gYXJyYXkgdHJhdmVyc2FsICsgcmV2ZXJ0ID0gJywgZHVyYXRpb24pOworCisJCS8vIC0+IG1hZGUgcHJldmlldyB0aHVtYmxpc3QgRFJBR0dBQkxFCisJCS8vIGFkZCB0aGUgdGh1bWJuYWlsIHBhbmUgaW4gcHJldmlldyB3aW5kb3cgdG8gdGhlIGRyb3BhYmxlIGVsZW1lbnRzCisJCXRoaXMuZGlyX2ZpbGVsaXN0LmdldENoaWxkcmVuKCd1bCBsaSBkaXYuZmknKS5lYWNoKChmdW5jdGlvbih0aHVtYil7CisJCQllbHNbMF0ucHVzaCh0aHVtYik7CisJCX0pLmJpbmQodGhpcykpOworCisJCS8vIG1ha2UgZHJhZ2dhYmxlCisJCWlmIChzdXBwb3J0X0RuRF9mb3JfdGhpc19kaXIpIHsKKwkJCS8vIC0+IG1ha2UgZHJhZ2dhYmxlCisJCQkkJChlbHNbMF0pLm1ha2VEcmFnZ2FibGUoeworCQkJCWRyb3BwYWJsZXM6ICQkKHRoaXMuZHJvcHBhYmxlcy5jb21iaW5lKGVsc1sxXSkpLAorCQkJCS8vc3RvcFByb3BhZ2F0aW9uOiB0cnVlLAorCisJCQkJLy8gV2UgcG9zaXRpb24gdGhlIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9yaWdpbmFsIHBvc2l0aW9uOyB0aGlzIGVuc3VyZXMgdGhlIGRyYWcgYWx3YXlzIHdvcmtzIHdpdGggYXJiaXRyYXJ5IGNvbnRhaW5lci4KKwkJCQlvbkRyYWc6IChmdW5jdGlvbihlbCwgZSkKKwkJCQl7CisJCQkJCXZhciBkcG9zID0gZWwucmV0cmlldmUoJ2RlbHRhX3BvcycpOworCisJCQkJCWVsLnNldFN0eWxlcyh7CisJCQkJCQlkaXNwbGF5OiAnYmxvY2snLAorCQkJCQkJbGVmdDogZS5wYWdlLnggKyBkcG9zLngsCisJCQkJCQl0b3A6IGUucGFnZS55ICsgZHBvcy55CisJCQkJCX0pOworCisJCQkJCXRoaXMuaW1hZ2VhZGQuc2V0U3R5bGVzKHsKKwkJCQkJCSdsZWZ0JzogZS5wYWdlLnggKyBkcG9zLnggLSAxMiwKKwkJCQkJCSd0b3AnOiBlLnBhZ2UueSArIGRwb3MueSArIDIKKwkJCQkJfSk7CisJCQkJfSkuYmluZCh0aGlzKSwKKworCQkJCW9uQmVmb3JlU3RhcnQ6IChmdW5jdGlvbihlbCkgeworCQkJCQkvLyB5b3UgQ0FOTk9UIHVzZSAuY29udGFpbmVyIHRvIGdldCBnb29kIHgveSBjb29yZHMgYXMgaW4gc3RhbmRhbG9uZSBtb2RlLCB0aGlzIDxkaXY+IGhhcyBhIGJvZ3VzIHBvc2l0aW9uOworCQkJCQkvL3ZhciBjcG9zID0gdGhpcy5jb250YWluZXIuZ2V0UG9zaXRpb24oKTsKKworCQkJCQkvLyBzdGFydCB0aGUgc2Nyb2xsZXIKKwkJCQkJdGhpcy5zY3JvbGxlci5zdGFydCgpOworCQkJCX0pLmJpbmQodGhpcyksCisKKwkJCQkvLyBGSVg6IGRvIG5vdCBkZXNlbGVjdCBpdGVtIHdoZW4gYWJvcnRpbmcgZHJhZ2dpbmcgX2Fub3RoZXJfIGl0ZW0hCisJCQkJb25DYW5jZWw6IChmdW5jdGlvbihlbCkgeworCQkJCQl0aGlzLmRpYWcubG9nKCdkcmFnZ2FibGU6b25DYW5jZWwnLCBlbCk7CisJCQkJCXRoaXMuc2Nyb2xsZXIuc3RvcCgpOworCQkJCQl0aGlzLnJldmVydF9kcmFnX25fZHJvcChlbCk7CisJCQkJCS8qCisJCQkJCSAqIEZpeGluZyB0aGUgJ2NsaWNrJyBvbiBGRitPcGVyYSAob3RoZXIgYnJvd3NlcnMgZG8gZ2V0IHRoYXQgZXZlbnQgZm9yIGFueSBpdGVtIHdoaWNoIGlzIG1hZGUgZHJhZ2dhYmxlKToKKwkJCQkJICogYSBiYXNpYyBtb3VzZSdjbGljaycgYXBwZWFycyBhcyB0aGUgZXZlbnQgc2VxdWVuY2Ugb25CZWZvcmVTdGFydCArIG9uQ2FuY2VsLgorCQkJCQkgKgorCQkJCQkgKiBOT1RFIHRoYXQgb25TdGFydCBpcyBOT1QgaW52b2tlZCEgV2hlbiBpdCBpcywgaXQncyBhIGRyYWcgb3BlcmF0aW9uLCBubyBtYXR0ZXIgaWYgaXQncyBzdWNjZXNzZnVsIGFzIGEgZHJhZyZkcm9wIG9yIG5vdC4KKwkJCQkJICoKKwkJCQkJICogU28gd2UgdGhlbiBtYW51YWxseSBmaXJlIHRoZSAnY2xpY2snIGV2ZW50LiBTZWUgYWxzbyB0aGUgY29tbWVudCBuZWFyIHRoZSAnY2xpY2snIGV2ZW50IGhhbmRsZXIgcmVnaXN0cmF0aW9uIGluIGZpbGxfY2h1bmt3aXNlXzEoKQorCQkJCQkgKiBhYm91dCB0aGUgZGlmZmVyZW50IGJlaGF2aW91ciBpbiBkaWZmZXJlbnQgYnJvd3NlcnMuCisJCQkJCSAqLworCQkJCQl0aGlzLnJlbGF5Q2xpY2sobnVsbCwgZWwpOworCQkJCX0pLmJpbmQodGhpcyksCisKKwkJCQlvblN0YXJ0OiAoZnVuY3Rpb24oZWwsIGUpIHsKKwkJCQkJdGhpcy5kaWFnLmxvZygnZHJhZ2dhYmxlOm9uU3RhcnQnLCBlbCk7CisJCQkJCXRoaXMudGlwcy5oaWRlKCk7CisKKwkJCQkJdmFyIHBvc2l0aW9uID0gZWwuZ2V0UG9zaXRpb24oKTsKKwkJCQkJdmFyIGRwb3MgPSB7CisJCQkJCQl4OiBwb3NpdGlvbi54IC0gZS5wYWdlLngsCisJCQkJCQl5OiBwb3NpdGlvbi55IC0gZS5wYWdlLnkKKwkJCQkJfTsKKwkJCQkJLyoKKwkJCQkJICogVXNlIHRoZSBlbGVtZW50IHNpemUgKFkpIGZvciBJRS1maXhpbmcgaGV1cmlzdGljczoKKwkJCQkJICogaW4gSUUgdGhlIG1vdXNlIGlzIGFscmVhZHkgcXVpdGUgc29tZSBkaXN0YW5jZSBhd2F5IGJlZm9yZSB0aGUgb25TdGFydCBmaXJlcywKKwkJCQkJICogd2UgbmVlZCB0byByZXN0cmljdCB0aGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIGRyYWdnZWQgZWxlbWVudCBpbiBzdWNoIGEgd2F5CisJCQkJCSAqIHRoYXQgaXQgd2lsbCByZXNpZGUgJ3VuZGVyIHRoZSBtb3VzZSBjdXJzb3InLgorCQkJCQkgKi8KKwkJCQkJdmFyIGVsc2l6ZSA9IGVsLmdldFNpemUoKTsKKwkJCQkJaWYgKGRwb3MueSA+IDApCisJCQkJCQlkcG9zLnkgPSAtTWF0aC5yb3VuZChlbHNpemUueSAvIDIpOworCQkJCQllbHNlIGlmIChkcG9zLnkgPCAtZWxzaXplLnkpCisJCQkJCQlkcG9zLnkgPSAtTWF0aC5yb3VuZChlbHNpemUueSAvIDIpOworCisJCQkJCXRoaXMuZGlhZy5sb2coJ35+fiBwb3NpdGlvbnMgYXQgc3RhcnQ6ICcsIHBvc2l0aW9uLCBkcG9zLCBlKTsKKworCQkJCQllbC5zdG9yZSgnZGVsdGFfcG9zJywgZHBvcyk7CisKKwkJCQkJZWwuYWRkQ2xhc3MoJ2RyYWcnKS5zZXRTdHlsZXMoeworCQkJCQkJJ3otaW5kZXgnOiB0aGlzLm9wdGlvbnMuekluZGV4ICsgMTUwMCwKKwkJCQkJCSdwb3NpdGlvbic6ICdhYnNvbHV0ZScsCisJCQkJCQknd2lkdGgnOiBlbC5nZXRXaWR0aCgpIC0gZWwuZ2V0U3R5bGUoJ3BhZGRpbmdMZWZ0JykudG9JbnQoKSAtIGVsLmdldFN0eWxlKCdwYWRkaW5nUmlnaHQnKS50b0ludCgpLAorCQkJCQkJJ2Rpc3BsYXknOiAnbm9uZScsCisJCQkJCQknbGVmdCc6IGUucGFnZS54ICsgZHBvcy54LAorCQkJCQkJJ3RvcCc6IGUucGFnZS55ICsgZHBvcy55CisJCQkJCX0pLmluamVjdCh0aGlzLmNvbnRhaW5lcik7CisKKwkJCQkJZWwuZmFkZSgwLjcpLmFkZENsYXNzKCdtb3ZlJyk7CisKKwkJCQkJdGhpcy5kaWFnLmxvZygnRU5BQkxFIGtleWJvYXJkIHVwL2Rvd24gb24gZHJhZyBzdGFydCcpOworCisJCQkJCS8vIEZJWCB3cm9uZyB2aXN1YWwgd2hlbiBDT05UUk9MIGtleSBpcyBrZXB0IGRlcHJlc3NlZCBiZXR3ZWVuIGRyYWcmZHJvcHM6IHRoZSBvbGQgY29kZSBkaXNjYXJkZWQgdGhlIHJlbGV2YW50IGtleWJvYXJkIGhhbmRsZXI7IHdlIHNpbXBseSBzd2l0Y2ggdmlzdWFscyBidXQga2VlcCB0aGUga2V5Ym9hcmQgaGFuZGxlciBhY3RpdmUuCisJCQkJCS8vIFRoaXMgc3RhdGUgY2hhbmdlIHdpbGwgYmUgcmV2ZXJ0ZWQgaW4gcmV2ZXJ0X2RyYWdfbl9kcm9wKCkuCisJCQkJCXRoaXMuZHJhZ19pc19hY3RpdmUgPSB0cnVlOworCQkJCQl0aGlzLmltYWdlYWRkLmZhZGUoMCArIHRoaXMuY3RybF9rZXlfcHJlc3NlZCk7CisJCQkJfSkuYmluZCh0aGlzKSwKKworCQkJCW9uRW50ZXI6IGZ1bmN0aW9uKGVsLCBkcm9wcGFibGUpIHsKKwkJCQkJZHJvcHBhYmxlLmFkZENsYXNzKCdkcm9wcGFibGUnKTsKKwkJCQl9LAorCisJCQkJb25MZWF2ZTogZnVuY3Rpb24oZWwsIGRyb3BwYWJsZSkgeworCQkJCQlkcm9wcGFibGUucmVtb3ZlQ2xhc3MoJ2Ryb3BwYWJsZScpOworCQkJCX0sCisKKwkJCQlvbkRyb3A6IChmdW5jdGlvbihlbCwgZHJvcHBhYmxlLCBlKSB7CisJCQkJCXRoaXMuZGlhZy5sb2coJ2RyYWdnYWJsZTpvbkRyb3AnLCBlbCwgZHJvcHBhYmxlLCBlKTsKKwkJCQkJdGhpcy5zY3JvbGxlci5zdG9wKCk7CisKKwkJCQkJdmFyIGlzX2FfbW92ZSA9ICEoZS5jb250cm9sIHx8IGUubWV0YSk7CisJCQkJCXRoaXMuZHJvcF9wZW5kaW5nID0gMSArIGlzX2FfbW92ZTsKKworCQkJCQlpZiAoIWlzX2FfbW92ZSB8fCAhZHJvcHBhYmxlKSB7CisJCQkJCQllbC5zZXRTdHlsZXMoe2xlZnQ6IDAsIHRvcDogMH0pOworCQkJCQl9CisKKwkJCQkJdmFyIGRpciA9IG51bGw7CisJCQkJCWlmIChkcm9wcGFibGUpIHsKKwkJCQkJCWRyb3BwYWJsZS5hZGRDbGFzcygnc2VsZWN0ZWQnKS5yZW1vdmVDbGFzcygnZHJvcHBhYmxlJyk7CisJCQkJCQkoZnVuY3Rpb24oKSB7CisJCQkJCQkJZHJvcHBhYmxlLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpOworCQkJCQkJfSkuZGVsYXkoMzAwKTsKKwkJCQkJCWlmICh0aGlzLm9uRHJhZ0NvbXBsZXRlKGVsLCBkcm9wcGFibGUpKSB7CisJCQkJCQkJdGhpcy5kcm9wX3BlbmRpbmcgPSAwOworCisJCQkJCQkJdGhpcy5yZXZlcnRfZHJhZ19uX2Ryb3AoZWwpOyAgIC8vIGdvIGFuZCByZXF1ZXN0IHRoZSBkZXRhaWxzIGFuZXcsIHRoZW4gcmVmcmVzaCB0aGVtIGluIHRoZSB2aWV3CisJCQkJCQkJcmV0dXJuOworCQkJCQkJfQorCisJCQkJCQlkaXIgPSBkcm9wcGFibGUucmV0cmlldmUoJ2ZpbGUnKTsKKwkJCQkJCXRoaXMuZGlhZy5sb2coJ29uIGRyb3AgZGlyID0gJywgZGlyKTsKKwkJCQkJfQorCisJCQkJCWlmICgoIXRoaXMub3B0aW9ucy5tb3ZlX29yX2NvcHkpIHx8IChpc19hX21vdmUgJiYgIWRyb3BwYWJsZSkpIHsKKwkJCQkJCXRoaXMuZHJvcF9wZW5kaW5nID0gMDsKKworCQkJCQkJdGhpcy5yZXZlcnRfZHJhZ19uX2Ryb3AoZWwpOyAgIC8vIGdvIGFuZCByZXF1ZXN0IHRoZSBkZXRhaWxzIGFuZXcsIHRoZW4gcmVmcmVzaCB0aGVtIGluIHRoZSB2aWV3CisJCQkJCQlyZXR1cm47CisJCQkJCX0KKworCQkJCQl0aGlzLnJldmVydF9kcmFnX25fZHJvcChlbCk7ICAgICAgIC8vIGRvIG5vdCBzZW5kIHRoZSAnZGV0YWlsJyByZXF1ZXN0IGluIGhlcmU6IHRoaXMuZHJvcF9wZW5kaW5nIHRha2VzIGNhcmUgb2YgdGhhdCEKKworCQkJCQl2YXIgZmlsZSA9IGVsLnJldHJpZXZlKCdmaWxlJyk7CisJCQkJCXRoaXMuZGlhZy5sb2coJ29uIGRyb3AgZmlsZSA9ICcsIGZpbGUsICcsIGN1cnJlbnQgZGlyOicsIHRoaXMuQ3VycmVudERpciwgJywgZHJvcHBhYmxlOiAnLCBkcm9wcGFibGUpOworCisJCQkJCWlmICh0aGlzLlJlcXVlc3QpIHRoaXMuUmVxdWVzdC5jYW5jZWwoKTsKKworCQkJCQl2YXIgdHhfY2ZnID0gdGhpcy5vcHRpb25zLm1rU2VydmVyUmVxdWVzdFVSTCh0aGlzLCAnbW92ZScsIHsKKwkJCQkJCQkJCWZpbGU6IGZpbGUubmFtZSwKKwkJCQkJCQkJCWZpbHRlcjogdGhpcy5vcHRpb25zLmZpbHRlciwKKwkJCQkJCQkJCWRpcmVjdG9yeTogdGhpcy5DdXJyZW50RGlyLnBhdGgsCisJCQkJCQkJCQluZXdEaXJlY3Rvcnk6IChkaXIgPyBkaXIucGF0aCA6IHRoaXMuQ3VycmVudERpci5wYXRoKSwKKwkJCQkJCQkJCWNvcHk6IGlzX2FfbW92ZSA/IDAgOiAxCisJCQkJCQkJCX0pOworCisJCQkJCXRoaXMuUmVxdWVzdCA9IG5ldyBGaWxlTWFuYWdlci5SZXF1ZXN0KHsKKwkJCQkJCXVybDogdHhfY2ZnLnVybCwKKwkJCQkJCWRhdGE6IHR4X2NmZy5kYXRhLAorCQkJCQkJb25TdWNjZXNzOiAoZnVuY3Rpb24oaikgeworCQkJCQkJCWlmICghaiB8fCAhai5zdGF0dXMpIHsKKwkJCQkJCQkJdGhpcy5kcm9wX3BlbmRpbmcgPSAwOworCQkJCQkJCQl0aGlzLmJyb3dzZXJMb2FkZXIuZmFkZSgwKTsKKwkJCQkJCQkJcmV0dXJuOworCQkJCQkJCX0KKworCQkJCQkJCXRoaXMuZmlyZUV2ZW50KCdtb2RpZnknLCBbT2JqZWN0LmNsb25lKGZpbGUpLCBqLCAoaXNfYV9tb3ZlID8gJ21vdmUnIDogJ2NvcHknKSwgdGhpc10pOworCisJCQkJCQkJdmFyIHJlcmVuZGVyaW5nX2xpc3QgPSBmYWxzZTsKKworCQkJCQkJCS8vIHJlbW92ZSBlbnRyeSBmcm9tIGNhY2hlZCBKU09OIGRpcmVjdG9yeSBsaXN0IGFuZCByZW1vdmUgdGhlIGl0ZW0gZnJvbSB0aGUgdmlldyB3aGVuIHRoaXMgd2FzIGEgbW92ZSEKKwkJCQkJCQkvLyBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgd2hlbiB3b3JraW5nIG9uIGEgcGFnaW5hdGVkIGRpcmVjdG9yeSBhbmQgYWZ0ZXJ3YXJkcyB0aGUgcGFnZXMgYXJlIGp1bXBlZCBiYWNrICYgZm9ydGg6CisJCQkJCQkJLy8gdGhlIG5leHQgdGltZSBhcm91bmQsIHRoaXMgaXRlbSBzaG91bGQgTk9UIGFwcGVhciBpbiB0aGUgbGlzdCBhbnltb3JlIQorCQkJCQkJCWlmIChpc19hX21vdmUpCisJCQkJCQkJeworCQkJCQkJCQl0aGlzLmRlc2VsZWN0KGZpbGUuZWxlbWVudCk7CisKKwkJCQkJCQkJaWYgKHRoaXMudmlld19maWxsX2pzb24pCisJCQkJCQkJCXsKKwkJCQkJCQkJCXRoaXMuZGVsZXRlX2Zyb21fZGlyY2FjaGUoZmlsZSk7ICAvKiBkbyBOT1QgdXNlIGoubmFtZSwgYXMgdGhhdCBvbmUgY2FuIGJlICdjbGVhbmVkIHVwJyBhcyBwYXJ0IG9mIHRoZSAnbW92ZScgb3BlcmF0aW9uISAqLworCisJCQkJCQkJCQkvLyBtaW5vciBjYXZlYXQ6IHdoZW4gd2UgcGFnaW5hdGUgdGhlIGRpcmVjdG9yeSBsaXN0LCB0aGVuIGJyb3dzaW5nIHRvIHRoZSBuZXh0IHBhZ2Ugd2lsbCBza2lwIG9uZSBpdGVtICh3aGljaCB3b3VsZAorCQkJCQkJCQkJLy8gaGF2ZSBiZWVuIHRoZSBmaXJzdCBvbiB0aGUgbmV4dCBwYWdlKS4gVGhlIGJydXRlLWZvcmNlIGZpeCBmb3IgdGhpcyBpcyB0byBmb3JjZSBhIHJlLXJlbmRlciBvZiB0aGUgcGFnZSB3aGVuIGluCisJCQkJCQkJCQkvLyBwYWdpbmF0aW9uIHZpZXcgbW9kZToKKwkJCQkJCQkJCWlmICh0aGlzLnZpZXdfZmlsbF9qc29uLmRpcnMubGVuZ3RoICsgdGhpcy52aWV3X2ZpbGxfanNvbi5maWxlcy5sZW5ndGggPiB0aGlzLmxpc3RQYWdpbmF0aW9uTGFzdFNpemUpCisJCQkJCQkJCQl7CisJCQkJCQkJCQkJLy8gc2ltaWxhciBhY3Rpdml0eSBhcyBsb2FkKCksIGJ1dCB3aXRob3V0IHRoZSBzZXJ2ZXIgY29tbXVuaWNhdGlvbi4uLgorCisJCQkJCQkJCQkJLy8gYWJvcnQgYW55IHN0aWxsIHJ1bm5pbmcgKCdhbnRpcXVhdGVkJykgZmlsbCBjaHVua3MgYW5kIHJlc2V0IHRoZSBzdG9yZSBiZWZvcmUgd2Ugc2V0IHVwIGEgbmV3IG9uZToKKwkJCQkJCQkJCQl0aGlzLlJlcXVlc3RRdWV1ZS5jYW5jZWxfYnVsaygnZmlsbCcpOworCQkJCQkJCQkJCWNsZWFyVGltZW91dCh0aGlzLnZpZXdfZmlsbF90aW1lcik7CisJCQkJCQkJCQkJdGhpcy52aWV3X2ZpbGxfdGltZXIgPSBudWxsOworCisJCQkJCQkJCQkJLy8gd2FzIGhlcmUKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCisJCQkJCQkJCS8vIC0+IG1vdmVzIHRoaXMgaGVyZSBzbyBpdCBhbHdheXMgcmVsb2FkcyB0aGUgdGh1bWJuYWlsIHBhbmUgaW4gdGhlIHByZXZpZXcgd2luZG93CisJCQkJCQkJCXJlcmVuZGVyaW5nX2xpc3QgPSB0cnVlOworCQkJCQkJCQl0aGlzLmZpbGwobnVsbCwgdGhpcy5nZXRfdmlld19maWxsX3N0YXJ0aW5kZXgoKSwgdGhpcy5saXN0UGFnaW5hdGlvbkxhc3RTaXplKTsKKworCQkJCQkJCQkvLyBtYWtlIHN1cmUgZmFkZSBkb2VzIG5vdCBjbGFzaCB3aXRoIHBhcmFsbGVsIGRpcmVjdG9yeSAocmUpbG9hZDoKKwkJCQkJCQkJaWYgKCFyZXJlbmRlcmluZ19saXN0KQorCQkJCQkJCQl7CisJCQkJCQkJCQl2YXIgcCA9IGZpbGUuZWxlbWVudC5nZXRQYXJlbnQoKTsKKwkJCQkJCQkJCWlmIChwKSB7CisJCQkJCQkJCQkJcC5mYWRlKDApLmdldCgndHdlZW4nKS5jaGFpbihmdW5jdGlvbigpIHsKKwkJCQkJCQkJCQkJdGhpcy5lbGVtZW50LmRlc3Ryb3koKTsKKwkJCQkJCQkJCQl9KTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJCQkJCQlpZiAoIWRpcikKKwkJCQkJCQkJeworCQkJCQkJCQkJLy8gY29waWVkIHRvIHRoZSB2ZXJ5IHNhbWUgZGlyZWN0b3J5OgorCQkJCQkJCQkJcmVyZW5kZXJpbmdfbGlzdCA9IHRydWU7CisJCQkJCQkJCQl0aGlzLmxvYWQodGhpcy5DdXJyZW50RGlyLnBhdGgpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCisJCQkJCQkJdGhpcy5kcm9wX3BlbmRpbmcgPSAwOworCQkJCQkJCXRoaXMuYnJvd3NlckxvYWRlci5mYWRlKDApOworCQkJCQkJfSkuYmluZCh0aGlzKSwKKwkJCQkJCW9uRXJyb3I6IChmdW5jdGlvbih0ZXh0LCBlcnJvcikgeworCQkJCQkJCXRoaXMuZHJvcF9wZW5kaW5nID0gMDsKKwkJCQkJCQl0aGlzLmJyb3dzZXJMb2FkZXIuZmFkZSgwKTsKKwkJCQkJCX0pLmJpbmQodGhpcyksCisJCQkJCQlvbkZhaWx1cmU6IChmdW5jdGlvbih4bWxIdHRwUmVxdWVzdCkgeworCQkJCQkJCXRoaXMuZHJvcF9wZW5kaW5nID0gMDsKKwkJCQkJCQl0aGlzLmJyb3dzZXJMb2FkZXIuZmFkZSgwKTsKKwkJCQkJCX0pLmJpbmQodGhpcykKKwkJCQkJfSwgdGhpcykuc2VuZCgpOworCQkJCX0pLmJpbmQodGhpcykKKwkJCX0pOworCisJCQl0aGlzLmJyb3dzZXJfZHJhZ25kcm9wX2luZm8uc2V0U3R5bGUoJ2JhY2tncm91bmQtcG9zaXRpb24nLCAnMHB4IDBweCcpOworCQkJdGhpcy5icm93c2VyX2RyYWduZHJvcF9pbmZvLnNldCgndGl0bGUnLCB0aGlzLmxhbmd1YWdlLmRyYWdfbl9kcm9wKTsKKwkJfQorCisJCS8vIGFkZCB0b29sdGlwIGZvciBkcmFnIG4gZHJvcCBpY29uCisJCXRoaXMudGlwcy5hdHRhY2godGhpcy5icm93c2VyX2RyYWduZHJvcF9pbmZvKTsKKworCQkvLyBjaGVjayBob3cgbXVjaCB3ZSd2ZSBjb25zdW1lZCBzbyBmYXI6CisJCWR1cmF0aW9uID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydHRpbWU7CisJCS8vdGhpcy5kaWFnLmxvZygnICsgdGltZSB0YWtlbiBpbiBtYWtlIGRyYWdnYWJsZSA9ICcsIGR1cmF0aW9uKTsKKworCQkkJChlbHNbMF0uY29tYmluZShlbHNbMV0pKS5zZXRTdHlsZXMoeydsZWZ0JzogMCwgJ3RvcCc6IDB9KTsKKworCQkvLyBjaGVjayBob3cgbXVjaCB3ZSd2ZSBjb25zdW1lZCBzbyBmYXI6CisJCWR1cmF0aW9uID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydHRpbWU7CisJCS8vdGhpcy5kaWFnLmxvZygnICsgdGltZSB0YWtlbiBpbiBzZXRTdHlsZXMgPSAnLCBkdXJhdGlvbik7CisKKwkJdGhpcy5hZGFwdGl2ZV91cGRhdGVfcGFnaW5hdGlvbl9zaXplKHJlbmRlcl9jb3VudCwgcmVuZGVyX2NvdW50LCByZW5kZXJfY291bnQsIHBhZ2VzaXplLCBkdXJhdGlvbiwgMS4wIC8gNy4wLCAxLjAyLCAwLjEgLyAxMDAwKTsKKworCQkvLyBnbyB0byB0aGUgbmV4dCBzdGFnZSwgcmlnaHQgYWZ0ZXIgdGhlc2UgbWVzc2FnZXMuLi4gOy0pCisJCXRoaXMudmlld19maWxsX3RpbWVyID0gdGhpcy5maWxsX2NodW5rd2lzZV8zLmRlbGF5KDEsIHRoaXMsIFtyZW5kZXJfY291bnQsIHBhZ2VzaXplLCBzdXBwb3J0X0RuRF9mb3JfdGhpc19kaXIsIHN0YXJ0dGltZSwga2JkX2Rpcl0pOworCX0sCisKKwkvKgorCSAqIFNlZSBjb21tZW50IGZvciBmaWxsX2NodW5rd2lzZV8xKCk6IHRoZSB0b29sdGlwcyBuZWVkIHRvIGJlIGFzc2lnbmVkIHdpdGggZWFjaCBpY29uICgyLi4zIHBlciBsaXN0IGl0ZW0pCisJICogYW5kIGFwcGFyZW50bHkgdGhhdCB0YWtlcyBzb21lIGNvbnNpZGVyYWJsZSB0aW1lIGFzIHdlbGwgZm9yIGxhcmdlIGRpcmVjdG9yaWVzIGFuZCBzbGlnaHRseSBzbG93ZXIgbWFjaGluZXMuCisJICovCisJZmlsbF9jaHVua3dpc2VfMzogZnVuY3Rpb24ocmVuZGVyX2NvdW50LCBwYWdlc2l6ZSwgc3VwcG9ydF9EbkRfZm9yX3RoaXNfZGlyLCBzdGFydHRpbWUsIGtiZF9kaXIpIHsKKworCQl2YXIgZHVyYXRpb24gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXJ0dGltZTsKKwkJLy90aGlzLmRpYWcubG9nKCcgKyB0aW1lIGR1cmF0aW9uIEAgZmlsbF9jaHVua3dpc2VfMygpIGJlZ2luOicsIGR1cmF0aW9uKTsKKworCQl0aGlzLnRpcHMuYXR0YWNoKHRoaXMuYnJvd3Nlci5nZXRFbGVtZW50cygnaW1nLmJyb3dzZXItaWNvbicpKTsKKwkJdGhpcy5icm93c2VyX2RyYWduZHJvcF9pbmZvLmZhZGUoMSk7CisKKwkJLy8gY2hlY2sgaG93IG11Y2ggd2UndmUgY29uc3VtZWQgc28gZmFyOgorCQlkdXJhdGlvbiA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnR0aW1lOworCQkvL3RoaXMuZGlhZy5sb2coJyArIHRpbWUgdGFrZW4gaW4gdGlwcy5hdHRhY2ggPSAnLCBkdXJhdGlvbik7CisKKwkJLy8gd2hlbiBhIHJlbmRlciBpcyBjb21wbGV0ZWQsIHdlIGhhdmUgbWF4aW11bSBrbm93bGVkZ2UsIGkuZS4gbWF4aW11bSBwcm9nbm9zaXMgcG93ZXI6IHNob3J0ZXIgdGFpbCBvbiB0aGUgRU1BIGlzIG91ciB0cmFuc2xhdGlvbiBvZiB0aGF0LgorCQl0aGlzLmFkYXB0aXZlX3VwZGF0ZV9wYWdpbmF0aW9uX3NpemUocmVuZGVyX2NvdW50LCByZW5kZXJfY291bnQsIHJlbmRlcl9jb3VudCwgcGFnZXNpemUsIGR1cmF0aW9uLCAxLjAgLyA1LjAsIDEuMCwgMCk7CisKKwkJLy8gd2UncmUgZG9uZTogZXJhc2UgdGhlIHRpbWVyIHNvIGl0IGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZAorCQkvL3RoaXMuUmVxdWVzdFF1ZXVlLmNhbmNlbF9idWxrKCdmaWxsJyk7ICAgIC0tIGRvIE5PVCBkbyB0aGlzIQorCQljbGVhclRpbWVvdXQodGhpcy52aWV3X2ZpbGxfdGltZXIpOworCQl0aGlzLnZpZXdfZmlsbF90aW1lciA9IG51bGw7CisKKwkJLy8gbWFrZSBzdXJlIHRoZSBzZWxlY3Rpb24sIHdoZW4ga2V5Ym9hcmQgZHJpdmVuLCBpcyBtYXJrZWQgY29ycmVjdGx5CisJCWlmIChrYmRfZGlyKQorCQl7CisJCQl0aGlzLmJyb3dzZXJTZWxlY3Rpb24oa2JkX2Rpcik7CisJCX0KKworCQl0aGlzLmJyb3dzZXJMb2FkZXIuZmFkZSgwKTsKKworCQl0aGlzLmZpcmVIb29rcygnZmlsbCcpOworCX0sCisKKwlhZGFwdGl2ZV91cGRhdGVfcGFnaW5hdGlvbl9zaXplOiBmdW5jdGlvbihjdXJyZW50aW5kZXgsIGVuZGluZGV4LCByZW5kZXJfY291bnQsIHBhZ2VzaXplLCBkdXJhdGlvbiwgRU1BX2ZhY3RvciwgZnV0dXJlX2Z1ZGdlX2ZhY3RvciwgY29tcGVuc2F0aW9uKQorCXsKKwkJdmFyIGF2Z3dhaXQgPSB0aGlzLm9wdGlvbnMubGlzdFBhZ2luYXRpb25BdmdXYWl0VGltZTsKKwkJaWYgKGF2Z3dhaXQpCisJCXsKKwkJCS8vIHdlIGNhbiBub3cgZXN0aW1hdGUgaG93IG11Y2ggdGltZSB3ZSdsbCBuZWVkIHRvIHByb2Nlc3MgdGhlIGVudGlyZSBsaXN0OgorCQkJdmFyIG9yaWdfc3RhcnRpbmRleCA9IGVuZGluZGV4IC0gcmVuZGVyX2NvdW50OworCQkJdmFyIGRvbmVfc29fZmFyID0gY3VycmVudGluZGV4IC0gb3JpZ19zdGFydGluZGV4OworCQkJLy8gdGhlIDEuMyBpcyBhIGhldXJpc3RpYyBjb3ZlcmluZyBmb3IgY2h1bmtfMiszIGFjdGl2aXR5CisJCQlkb25lX3NvX2ZhciAvPSBwYXJzZUZsb2F0KHJlbmRlcl9jb3VudCk7CisJCQkvLyBhdCBsZWFzdCA1JSBvZiB0aGUgam9iIHNob3VsZCBiZSBkb25lIGJlZm9yZSB3ZSBzdGFydCB1c2luZyBvdXIgaW5mbyBmb3IgZXN0aW1hdGlvbi9leHRyYXBvbGF0aW9uCisJCQlpZiAoZG9uZV9zb19mYXIgPiAwLjA1KQorCQkJeworCQkJCS8qCisJCQkJICogYW5kIGl0IHR1cm5zIG91dCBvdXIgZnVkZ2UgZmFjdG9ycyBhcmUgbm90IHRlbGxpbmcgdGhlIHdob2xlIHN0b3J5OiB0aGUgdG90YWwgbnVtYmVyIG9mIGVsZW1lbnRzCisJCQkJICogdG8gcmVuZGVyIGFyZSBzdGlsbCBhIGZhY3RvciB0aGVuLgorCQkJCSAqLworCQkJCWZ1dHVyZV9mdWRnZV9mYWN0b3IgKj0gKDEgKyBjb21wZW5zYXRpb24gKiByZW5kZXJfY291bnQpOworCisJCQkJdmFyIHRfZXN0ID0gZHVyYXRpb24gKiBmdXR1cmVfZnVkZ2VfZmFjdG9yIC8gZG9uZV9zb19mYXI7CisKKwkJCQkvLyBub3cgdGFrZSB0aGUgY29uZmlndXJlZCBfZGVzaXJlZF8gbWF4aW11bSBhdmVyYWdlIHdhaXQgdGltZSBhbmQgc2VlIGhvdyB3ZSBzaG91bGQgZmFyZToKKwkJCQl2YXIgcF9lc3QgPSByZW5kZXJfY291bnQgKiBhdmd3YWl0IC8gdF9lc3Q7CisKKwkJCQkvLyBFTUEgKyBzZW5zaXRpdml0eTogdGhlIGNsb3NlciB0byBvdXIgY3VycmVudCB0YXJnZXQsIHRoZSBiZXR0ZXIgb3VyIGluZm86CisJCQkJdmFyIHRhaWwgPSBFTUFfZmFjdG9yICogKDAuOSArIDAuMSAqIGRvbmVfc29fZmFyKTsKKwkJCQl2YXIgbmV3cHNpemUgPSB0YWlsICogcF9lc3QgKyAoMSAtIHRhaWwpICogcGFnZXNpemU7CisKKwkJCQkvLyBhcHBseSBsaW1pdGF0aW9uczogbmV2ZXIgcmVkdWNlIG1vcmUgdGhhbiA1MCUsIG5ldmVyIGluY3JlYXNlIG1vcmUgdGhhbiAyMCU6CisJCQkJdmFyIGRlbHRhID0gbmV3cHNpemUgLyBwYWdlc2l6ZTsKKwkJCQlpZiAoZGVsdGEgPCAwLjUpCisJCQkJCW5ld3BzaXplID0gMC41ICogcGFnZXNpemU7CisJCQkJZWxzZSBpZiAoZGVsdGEgPiAxLjIpCisJCQkJCW5ld3BzaXplID0gMS4yICogcGFnZXNpemU7CisJCQkJbmV3cHNpemUgPSBuZXdwc2l6ZS50b0ludCgpOworCisJCQkJLy8gYW5kIG5ldmVyIGxldCBpdCBkcm9wIGJlbG93IHJlZGljdWxvdXMgdmFsdWVzOgorCQkJCWlmIChuZXdwc2l6ZSA8IDIwKQorCQkJCQluZXdwc2l6ZSA9IDIwOworCisJCQkJLy90aGlzLmRpYWcubG9nKCc6OmF1dG8tdHVuZSBwYWdpbmF0aW9uOiBuZXcgcGFnZSA9ICcsIG5ld3BzaXplLCAnIEAgdGFpbDonLCB0YWlsLCAnLCBwX2VzdDogJywgcF9lc3QsICcsIHBzaXplOicsIHBhZ2VzaXplLCAnLCByZW5kZXI6JywgcmVuZGVyX2NvdW50LCAnLCBkb25lJTonLCBkb25lX3NvX2ZhciwgJywgZGVsdGEgaW5kZXg6JywgY3VycmVudGluZGV4IC0gb3JpZ19zdGFydGluZGV4LCAnLCB0X2VzdDonLCB0X2VzdCwgJywgZHVyOicsIGR1cmF0aW9uLCAnLCBwZGVsdGE6ICcsIGRlbHRhKTsKKwkJCQl0aGlzLm9wdGlvbnMubGlzdFBhZ2luYXRpb25TaXplID0gbmV3cHNpemU7CisJCQl9CisJCX0KKwl9LAorCisJZmlsbEluZm86IGZ1bmN0aW9uKGZpbGUpIHsKKworCQlpZiAoIWZpbGUpIGZpbGUgPSB0aGlzLkN1cnJlbnREaXI7CisJCWlmICghZmlsZSkgcmV0dXJuOworCisJCS8vIHNldCBmaWxlIGhpc3RvcnkKKwkJdGhpcy5kaWFnLmxvZygnZmlsbEluZm86ICcsIHRoaXMuc3RvcmVIaXN0b3J5LCAnLCBmaWxlOiAnLCBPYmplY3QuY2xvbmUoZmlsZSkpOworCQlpZiAodHlwZW9mIGpzR0VUICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN0b3JlSGlzdG9yeSkgeworCQkJaWYgKGZpbGUubWltZSAhPT0gJ3RleHQvZGlyZWN0b3J5JykKKwkJCQlqc0dFVC5zZXQoeydmbUZpbGUnOiBmaWxlLm5hbWV9KTsKKwkJCWVsc2UKKwkJCQlqc0dFVC5yZW1vdmUoWydmbUZpbGUnXSk7CisJCX0KKworCQl2YXIgaWNvbiA9IGZpbGUuaWNvbjsKKworCQl0aGlzLnN3aXRjaEJ1dHRvbjRDdXJyZW50KCk7CisKKwkJdGhpcy5maXJlSG9va3MoJ2NsZWFudXBQcmV2aWV3Jyk7CisJCS8vIFdlIG5lZWQgdG8gcmVtb3ZlIG91ciBjdXN0b20gYXR0cmlidXRlcyBmb3JtIHdoZW4gdGhlIHByZXZpZXcgaXMgaGlkZGVuCisJCXRoaXMuZmlyZUV2ZW50KCdoaWRlUHJldmlldycsIFt0aGlzXSk7CisKKwkJdGhpcy5wcmV2aWV3LmVtcHR5KCk7CisKKwkJLy9pZiAoZmlsZS5taW1lID09PSAndGV4dC9kaXJlY3RvcnknKSByZXR1cm47CisKKwkJaWYgKHRoaXMuZHJvcF9wZW5kaW5nID09IDApCisJCXsKKwkJCWlmICh0aGlzLlJlcXVlc3QpIHRoaXMuUmVxdWVzdC5jYW5jZWwoKTsKKworCQkJdmFyIGRpciA9IHRoaXMuQ3VycmVudERpci5wYXRoOworCisJCQl0aGlzLmRpYWcubG9nKCdmaWxsSW5mbzogcmVxdWVzdCBkZXRhaWwgZm9yIGZpbGU6ICcsIE9iamVjdC5jbG9uZShmaWxlKSwgJywgZGlyOiAnLCBkaXIpOworICAgICAgaWYoZmlsZS5taW1lID09PSAndGV4dC9kaXJlY3RvcnknKQorICAgICAgeyAgICAKKyAgICAgICAgaWYoZmlsZS5yZWFkbWUgJiYgZmlsZS5yZWFkbWUubGVuZ3RoKSB7IHRoaXMucHJldmlldy5zZXQoJ2h0bWwnLCBmaWxlLnJlYWRtZSk7IHRoaXMucHJldmlld19hcmVhLnNldFN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJykuZmFkZSgnaW4nKTsgcmV0dXJuOyB9CisgICAgICAgIGlmKHRoaXMub3B0aW9ucy5zaG93RGlyR2FsbGVyeSA9PT0gZmFsc2UpIHJldHVybjsgICAgCisgICAgICB9CisgICAgICAKKwkJCXZhciB0eF9jZmcgPSB0aGlzLm9wdGlvbnMubWtTZXJ2ZXJSZXF1ZXN0VVJMKHRoaXMsICdkZXRhaWwnLCB7CisJCQkJCQkJZGlyZWN0b3J5OiB0aGlzLmRpcm5hbWUoZmlsZS5wYXRoKSwKKwkJCQkJCQkvLyBmaXh1cCBmb3Igcm9vdCBkaXJlY3RvcnkgZGV0YWlsIHJlcXVlc3RzOgorCQkJCQkJCWZpbGU6IChmaWxlLm1pbWUgPT09ICd0ZXh0L2RpcmVjdG9yeScgJiYgZmlsZS5wYXRoID09PSAnLycpID8gJy8nIDogZmlsZS5uYW1lLAorCQkJCQkJCWZpbHRlcjogdGhpcy5vcHRpb25zLmZpbHRlciwKKwkJCQkJCQkvLyBwcm92aWRlIGVpdGhlciBkaXJlY3QgbGlua3MgdG8gdGhlIHRodW1ibmFpbHMgKHdoZW4gYXZhaWxhYmxlIGluIGNhY2hlKSBvciBQSFAgZXZlbnQgdHJpZ2dlciBVUkxzIGZvciBkZWxheWVkIHRodW1ibmFpbCBpbWFnZSBjcmVhdGlvbiAocGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBmYXN0ZXIgcGFnZSByZW5kZXIpOgorCQkJCQkJCW1vZGU6ICdkaXJlY3QnICsgdGhpcy5vcHRpb25zLmRldGFpbEluZm9Nb2RlCisJCQkJCQl9KTsKKworCQkJdGhpcy5SZXF1ZXN0ID0gbmV3IEZpbGVNYW5hZ2VyLlJlcXVlc3QoeworCQkJCXVybDogdHhfY2ZnLnVybCwKKwkJCQlkYXRhOiB0eF9jZmcuZGF0YSwKKwkJCQlvblJlcXVlc3Q6IChmdW5jdGlvbigpIHsKKwkJCQkJdGhpcy5wcmV2aWV3TG9hZGVyLmluamVjdCh0aGlzLnByZXZpZXcpOworCQkJCQl0aGlzLnByZXZpZXdMb2FkZXIuZmFkZSgxKTsKKwkJCQkJdGhpcy5zaG93X291cl9pbmZvX3NlY3Rpb25zKGZhbHNlKTsKKwkJCQl9KS5iaW5kKHRoaXMpLAorCQkJCW9uU3VjY2VzczogKGZ1bmN0aW9uKGopIHsKKworCQkJCQlpZiAoIWogfHwgIWouc3RhdHVzKSB7CisJCQkJCQl0aGlzLnByZXZpZXdMb2FkZXIuZGlzcG9zZSgpOworCQkJCQkJcmV0dXJuOworCQkJCQl9CisKKwkJCQkJLy8gc3BlZWQgdXAgRE9NIHRyZWUgbWFuaXB1bGF0aW9uOiBkZXRhY2ggLmluZm8gZnJvbSBkb2N1bWVudCB0ZW1wb3JhcmlseToKKwkJCQkJdGhpcy5pbmZvLmRpc3Bvc2UoKTsKKworCQkJCQl0aGlzLmluZm9faGVhZC5nZXRFbGVtZW50KCdpbWcnKS5zZXQoeworCQkJCQkJCXNyYzogaWNvbiwKKwkJCQkJCQlhbHQ6IGZpbGUubWltZQorCQkJCQkJfSk7CisKKwkJCQkJdGhpcy5pbmZvX2hlYWQuZ2V0RWxlbWVudCgnaDEnKS5zZXQoJ3RleHQnLCBmaWxlLm5hbWUpOworCQkJCQl0aGlzLmluZm9faGVhZC5nZXRFbGVtZW50KCdoMScpLnNldCgndGl0bGUnLCBmaWxlLm5hbWUpOworICAgICAgICAgIAorICAgICAgICAgIC8vIGRvbid0IHdhaXQgZm9yIHRoZSBmYWRlIHRvIGZpbmlzaCB0byBzZXQgdXAgdGhlIG5ldyBjb250ZW50CisgICAgICAgICAgdmFyIHByZXYgPSB0aGlzLnByZXZpZXcucmVtb3ZlQ2xhc3MoJ2ZpbGVtYW5hZ2VyLWxvYWRpbmcnKS5zZXQoJ2h0bWwnLCAnJyk7CisKKyAgICAgICAgICBpZih0eXBlb2YgdGhpcy5vcHRpb25zLnByZXZpZXdIYW5kbGVyc1tqLm1pbWVdID09PSAnZnVuY3Rpb24nKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wcmV2aWV3SGFuZGxlcnNbai5taW1lXShwcmV2LCBqKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZih0eXBlb2YgdGhpcy5vcHRpb25zLnByZXZpZXdIYW5kbGVyc1tqLm1pbWUuc3BsaXQoJy8nKVswXV0gPT09ICdmdW5jdGlvbicpCisgICAgICAgICAgeworICAgICAgICAgICAgdGhpcy5vcHRpb25zLnByZXZpZXdIYW5kbGVyc1tqLm1pbWUuc3BsaXQoJy8nKVswXV0ocHJldiwgaik7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBwcmV2LnNldCgnaHRtbCcsIChqLmNvbnRlbnQgPyBqLmNvbnRlbnQuc3Vic3RpdHV0ZSh0aGlzLmxhbmd1YWdlLCAvXFw/XCRceyhbXnt9XSspXH0vZykgOiAnJykpLmdldEVsZW1lbnQoJ2ltZy5wcmV2aWV3Jyk7ICAgICAgICAgICAKKyAgICAgICAgICB9CisgICAgICAgICAgCisJCQkJCWlmIChmaWxlLm1pbWUgPT09ICd0ZXh0L2RpcmVjdG9yeScpCisJCQkJCXsKKwkJCQkJCS8vIG9ubHkgc2hvdyB0aGUgaW1hZ2Ugc2V0IHdoZW4gdGhpcyBkaXJlY3RvcnkgaXMgYWxzbyB0aGUgY3VycmVudCBvbmUgKG90aGVyIGRpcmVjdG9yeSBkZXRhaWwgdmlld3MgY2FuIHJlc3VsdCBmcm9tIGEgZGlyZWN0b3J5IHJlbmFtZSBvcGVyYXRpb24hCisJCQkJCQl0aGlzLmRpYWcubG9nKCc/IGZpbGxJbmZvIGZvciBESVI6ICcsIGZpbGUsICcsIGN1cnJlbnREaXI6ICcsIHRoaXMuQ3VycmVudERpcik7CisJCQkJCQlpZiAoZmlsZS5wYXRoID09PSB0aGlzLkN1cnJlbnREaXIucGF0aCkKKwkJCQkJCXsKKwkJCQkJCQl0aGlzLnByZXZpZXcuYWRvcHQodGhpcy5kaXJfZmlsZWxpc3QpOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJLy8gYW5kIHBsdWcgaW4gdGhlIG1hbmlwdWxhdGVkIERPTSBzdWJ0cmVlIGFnYWluOgorCQkJCQl0aGlzLmluZm8uaW5qZWN0KHRoaXMuZmlsZW1hbmFnZXIpOworCQkJCQl0aGlzLnNob3dfb3VyX2luZm9fc2VjdGlvbnModHJ1ZSk7CisKKwkJCQkJdGhpcy5wcmV2aWV3TG9hZGVyLmZhZGUoMCkuZ2V0KCd0d2VlbicpLmNoYWluKChmdW5jdGlvbigpIHsKKwkJCQkJCXRoaXMucHJldmlld0xvYWRlci5kaXNwb3NlKCk7CisJCQkJCX0pLmJpbmQodGhpcykpOworCisJCQkJCXZhciBlbHMgPSB0aGlzLnByZXZpZXcuZ2V0RWxlbWVudHMoJ2J1dHRvbicpOworCQkJCQlpZiAoZWxzKSB7CisJCQkJCQllbHMuYWRkRXZlbnQoJ2NsaWNrJywgZnVuY3Rpb24oZSkgeworCQkJCQkJCWUuc3RvcCgpOworCQkJCQkJCXdpbmRvdy5vcGVuKHRoaXMuZ2V0KCd2YWx1ZScpKTsKKwkJCQkJCX0pOworCQkJCQl9CisKKwkJCQkJaWYgKHByZXYgJiYgIWoudGh1bWIyNTAgJiYgai50aHVtYnNfZGVmZXJyZWQpCisJCQkJCXsKKwkJCQkJCXZhciBpY29ucGF0aCA9IHRoaXMuYXNzZXRCYXNlUGF0aCArICdJbWFnZXMvSWNvbnMvTGFyZ2UvZGVmYXVsdC1lcnJvci5wbmcnOworCisJCQkJCQlpZiAoMCkKKwkJCQkJCXsKKwkJCQkJCQlwcmV2LnNldCgnc3JjJywgaWNvbnBhdGgpOworCQkJCQkJCXByZXYuc2V0U3R5bGVzKHsKKwkJCQkJCQkJJ3dpZHRoJzogJycsCisJCQkJCQkJCSdoZWlnaHQnOiAnJywKKwkJCQkJCQkJJ2JhY2tncm91bmQnOiAnbm9uZScKKwkJCQkJCQl9KTsKKwkJCQkJCX0KKworCQkJCQkJdmFyIHR4X2NmZyA9IHRoaXMub3B0aW9ucy5ta1NlcnZlclJlcXVlc3RVUkwodGhpcywgJ2RldGFpbCcsIHsKKwkJCQkJCQkJCQlkaXJlY3Rvcnk6IHRoaXMuZGlybmFtZShmaWxlLnBhdGgpLAorCQkJCQkJCQkJCWZpbGU6IGZpbGUubmFtZSwKKwkJCQkJCQkJCQlmaWx0ZXI6IHRoaXMub3B0aW9ucy5maWx0ZXIsCisJCQkJCQkJCQkJbW9kZTogJ2RpcmVjdCcgKyB0aGlzLm9wdGlvbnMuZGV0YWlsSW5mb01vZGUKKwkJCQkJCQkJCX0pOworCisJCQkJCQl2YXIgcmVxID0gbmV3IEZpbGVNYW5hZ2VyLlJlcXVlc3QoeworCQkJCQkJCXVybDogdHhfY2ZnLnVybCwKKwkJCQkJCQlkYXRhOiB0eF9jZmcuZGF0YSwKKwkJCQkJCQlmbURpc3BsYXlFcnJvcnM6IGZhbHNlLCAgIC8vIFNob3VsZCB3ZSBkaXNwbGF5IHRoZSBlcnJvciBoZXJlPyBObywgd2UganVzdCBkaXNwbGF5IHRoZSBnZW5lcmFsIGVycm9yIGljb24gaW5zdGVhZAorCQkJCQkJCW9uUmVxdWVzdDogZnVuY3Rpb24oKSB7fSwKKwkJCQkJCQlvblN1Y2Nlc3M6IChmdW5jdGlvbihqKSB7CisJCQkJCQkJCXZhciBpbWdfdXJsID0gKGouaWNvbjQ4ID8gai5pY29uNDggOiBpY29ucGF0aCk7CisJCQkJCQkJCWlmIChqICYmIGouc3RhdHVzICYmIGoudGh1bWIyNTApCisJCQkJCQkJCXsKKwkJCQkJCQkJCWltZ191cmwgPSBqLnRodW1iMjUwOworCQkJCQkJCQl9CisKKwkJCQkJCQkJcHJldi5zZXQoJ3NyYycsIGltZ191cmwpOworCQkJCQkJCQlwcmV2LmFkZEV2ZW50KCdsb2FkJywgZnVuY3Rpb24oKSB7CisJCQkJCQkJCQkvLyB3aGVuIHRoZSB0aHVtYjI1MCBpbWFnZSBoYXMgbG9hZGVkLCByZW1vdmUgdGhlIGxvYWRlciBhbmltYXRpb24gaW4gdGhlIGJhY2tncm91bmQgLi4uCisJCQkJCQkJCQkvL3RoaXMuc2V0U3R5bGUoJ2JhY2tncm91bmQnLCAnbm9uZScpOworCQkJCQkJCQkJLy8gLi4uIEFORCBibG93IGF3YXkgdGhlIGVuY29kZWQgJ3dpZHRoJyBhbmQgJ2hlaWdodCcgc3R5bGVzOiBhZnRlciBhbGwsIHRoZSB0aHVtYjI1MCBnZW5lcmF0aW9uIE1BWSBoYXZlIGZhaWxlZC4KKwkJCQkJCQkJCS8vIEluIHRoYXQgY2FzZSwgYW4gaWNvbiBpcyBwcm9kdWNlZCBieSB0aGUgYmFja2VuZCwgYnV0IGl0IHdpbGwgaGF2ZSBkaWZmZXJlbnQgZGltZW5zaW9ucywgYW5kIHdlIGRvbid0IHdhbnQgdG8KKwkJCQkJCQkJCS8vIGRpc3RvcnQgVEhBVCBvbmUsIGVpdGhlci4KKwkJCQkJCQkJCXRoaXMuc2V0U3R5bGVzKHsKKwkJCQkJCQkJCQknd2lkdGgnOiAnJywKKwkJCQkJCQkJCQknaGVpZ2h0JzogJycsCisJCQkJCQkJCQkJJ2JhY2tncm91bmQnOiAnbm9uZScKKwkJCQkJCQkJCX0pOworCQkJCQkJCQl9KTsKKworCQkJCQkJCQkvLyBYaW5oYTogV2UgbmVlZCB0byBhZGQgaW4gYSBmb3JtIGZvciBzZXR0aW5nIHRoZSBhdHRyaWJ1dGVzIG9mIGltYWdlcyBldGMsCisJCQkJCQkJCS8vIHNvIHdlIGFkZCB0aGlzIGV2ZW50IGFuZCBwYXNzIGl0IHRoZSBpbmZvcm1hdGlvbiB3ZSBoYXZlIGFib3V0IHRoZSBpdGVtCisJCQkJCQkJCS8vIGFzIHJldHVybmVkIGJ5IEJhY2tlbmQvRmlsZU1hbmFnZXIucGhwCisJCQkJCQkJCXRoaXMuZmlyZUV2ZW50KCdkZXRhaWxzJywgW2osIHRoaXNdKTsKKworCQkJCQkJCQkvLyB1cGRhdGUgdGhlIHN0b3JlZCBqc29uIGZvciB0aGlzIGZpbGUgYXMgd2VsbDoKKworCQkJCQkJCQkvLyBub3cgbWl4IHdpdGggdGhlIHByZXZpb3VzbHkgZXhpc3RpbmcgJ2ZpbGUnIGluZm8gKGFzIHByb2R1Y2VkIGJ5IGEgJ3ZpZXcnIHJ1bik6CisJCQkJCQkJCWZpbGUgPSBPYmplY3QubWVyZ2UoZmlsZSwgaik7CisKKwkJCQkJCQkJLy8gcmVtb3ZlIHVud2FudGVkIEpTT04gZWxlbWVudHM6CisJCQkJCQkJCWRlbGV0ZSBmaWxlLnN0YXR1czsKKwkJCQkJCQkJZGVsZXRlIGZpbGUuZXJyb3I7CisJCQkJCQkJCWRlbGV0ZSBmaWxlLmNvbnRlbnQ7CisKKwkJCQkJCQkJaWYgKGZpbGUuZWxlbWVudCkKKwkJCQkJCQkJeworCQkJCQkJCQkJZmlsZS5lbGVtZW50LnN0b3JlKCdmaWxlJywgZmlsZSk7CisJCQkJCQkJCX0KKworCQkJCQkJCQlpZiAodHlwZW9mIG1pbGtib3ggIT09ICd1bmRlZmluZWQnKQorCQkJCQkJCQl7CisJCQkJCQkJCQltaWxrYm94LnJlbG9hZFBhZ2VHYWxsZXJpZXMoKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0pLmJpbmQodGhpcyksCisJCQkJCQkJb25FcnJvcjogKGZ1bmN0aW9uKHRleHQsIGVycm9yKSB7CisJCQkJCQkJCXByZXYuc2V0KCdzcmMnLCBpY29ucGF0aCk7CisJCQkJCQkJCXByZXYuc2V0U3R5bGVzKHsKKwkJCQkJCQkJCSd3aWR0aCc6ICcnLAorCQkJCQkJCQkJJ2hlaWdodCc6ICcnLAorCQkJCQkJCQkJJ2JhY2tncm91bmQnOiAnbm9uZScKKwkJCQkJCQkJfSk7CisJCQkJCQkJfSkuYmluZCh0aGlzKSwKKwkJCQkJCQlvbkZhaWx1cmU6IChmdW5jdGlvbih4bWxIdHRwUmVxdWVzdCkgeworCQkJCQkJCQlwcmV2LnNldCgnc3JjJywgaWNvbnBhdGgpOworCQkJCQkJCQlwcmV2LnNldFN0eWxlcyh7CisJCQkJCQkJCQknd2lkdGgnOiAnJywKKwkJCQkJCQkJCSdoZWlnaHQnOiAnJywKKwkJCQkJCQkJCSdiYWNrZ3JvdW5kJzogJ25vbmUnCisJCQkJCQkJCX0pOworCQkJCQkJCX0pLmJpbmQodGhpcykKKwkJCQkJCX0sIHRoaXMpOworCisJCQkJCQl0aGlzLlJlcXVlc3RRdWV1ZS5hZGRSZXF1ZXN0KCdpbmZvOicgKyBTdHJpbmcudW5pcXVlSUQoKSwgcmVxKTsKKwkJCQkJCXJlcS5zZW5kKCk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkvLyBYaW5oYTogV2UgbmVlZCB0byBhZGQgaW4gYSBmb3JtIGZvciBzZXR0aW5nIHRoZSBhdHRyaWJ1dGVzIG9mIGltYWdlcyBldGMsCisJCQkJCQkvLyBzbyB3ZSBhZGQgdGhpcyBldmVudCBhbmQgcGFzcyBpdCB0aGUgaW5mb3JtYXRpb24gd2UgaGF2ZSBhYm91dCB0aGUgaXRlbQorCQkJCQkJLy8gYXMgcmV0dXJuZWQgYnkgQmFja2VuZC9GaWxlTWFuYWdlci5waHAKKwkJCQkJCXRoaXMuZmlyZUV2ZW50KCdkZXRhaWxzJywgW2osIHRoaXNdKTsKKworCQkJCQkJLy8gV2UgYWxzbyB3YW50IHRvIGhvbGQgb250byB0aGUgZGF0YSBzbyB3ZSBjYW4gYWNjZXNzIGl0IGxhdGVyIG9uLAorCQkJCQkJLy8gZS5nLiB3aGVuIHNlbGVjdGluZyB0aGUgaW1hZ2UuCisKKwkJCQkJCS8vIG5vdyBtaXggd2l0aCB0aGUgcHJldmlvdXNseSBleGlzdGluZyAnZmlsZScgaW5mbyAoYXMgcHJvZHVjZWQgYnkgYSAndmlldycgcnVuKToKKwkJCQkJCWZpbGUgPSBPYmplY3QubWVyZ2UoZmlsZSwgaik7CisKKwkJCQkJCS8vIHJlbW92ZSB1bndhbnRlZCBKU09OIGVsZW1lbnRzOgorCQkJCQkJZGVsZXRlIGZpbGUuc3RhdHVzOworCQkJCQkJZGVsZXRlIGZpbGUuZXJyb3I7CisJCQkJCQlkZWxldGUgZmlsZS5jb250ZW50OworCisJCQkJCQlpZiAoZmlsZS5lbGVtZW50KQorCQkJCQkJeworCQkJCQkJCWZpbGUuZWxlbWVudC5zdG9yZSgnZmlsZScsIGZpbGUpOworCQkJCQkJfQorCisJCQkJCQlpZiAodHlwZW9mIG1pbGtib3ggIT09ICd1bmRlZmluZWQnKQorCQkJCQkJeworCQkJCQkJCW1pbGtib3gucmVsb2FkUGFnZUdhbGxlcmllcygpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfSkuYmluZCh0aGlzKSwKKwkJCQlvbkVycm9yOiAoZnVuY3Rpb24odGV4dCwgZXJyb3IpIHsKKwkJCQkJdGhpcy5wcmV2aWV3TG9hZGVyLmRpc3Bvc2UoKTsKKwkJCQl9KS5iaW5kKHRoaXMpLAorCQkJCW9uRmFpbHVyZTogKGZ1bmN0aW9uKHhtbEh0dHBSZXF1ZXN0KSB7CisJCQkJCXRoaXMucHJldmlld0xvYWRlci5kaXNwb3NlKCk7CisJCQkJfSkuYmluZCh0aGlzKQorCQkJfSwgdGhpcykuc2VuZCgpOworCQl9CisJfSwKKworICBhdWRpb1ByZXZpZXc6IGZ1bmN0aW9uKHByZXZpZXdBcmVhLCBmaWxlRGV0YWlscykKKyAgeworICAgIHZhciBkbCA9IG5ldyBFbGVtZW50KCdkbCcpCisgICAgICAgICAgICAgICAgLmFkb3B0KG5ldyBFbGVtZW50KCdkdCcpLnNldCgndGV4dCcsIHRoaXMubGFuZ3VhZ2VbJ3RpdGxlJ10pKQorICAgICAgICAgICAgICAgIC5hZG9wdChuZXcgRWxlbWVudCgnZGQnKS5zZXQoJ3RleHQnLCBmaWxlRGV0YWlscy50aXRsZSkpCisgICAgICAgICAgICAgICAgLmFkb3B0KG5ldyBFbGVtZW50KCdkdCcpLnNldCgndGV4dCcsIHRoaXMubGFuZ3VhZ2VbJ2FydGlzdCddKSkKKyAgICAgICAgICAgICAgICAuYWRvcHQobmV3IEVsZW1lbnQoJ2RkJykuc2V0KCd0ZXh0JywgZmlsZURldGFpbHMuYXJ0aXN0KSkKKyAgICAgICAgICAgICAgICAuYWRvcHQobmV3IEVsZW1lbnQoJ2R0Jykuc2V0KCd0ZXh0JywgdGhpcy5sYW5ndWFnZVsnYWxidW0nXSkpCisgICAgICAgICAgICAgICAgLmFkb3B0KG5ldyBFbGVtZW50KCdkZCcpLnNldCgndGV4dCcsIGZpbGVEZXRhaWxzLmFsYnVtKSkKKyAgICAgICAgICAgICAgICAuYWRvcHQobmV3IEVsZW1lbnQoJ2R0Jykuc2V0KCd0ZXh0JywgdGhpcy5sYW5ndWFnZVsnbGVuZ3RoJ10pKQorICAgICAgICAgICAgICAgIC5hZG9wdChuZXcgRWxlbWVudCgnZGQnKS5zZXQoJ3RleHQnLCBmaWxlRGV0YWlscy5sZW5ndGgpKQorICAgICAgICAgICAgICAgIC5hZG9wdChuZXcgRWxlbWVudCgnZHQnKS5zZXQoJ3RleHQnLCB0aGlzLmxhbmd1YWdlWydiaXRyYXRlJ10pKQorICAgICAgICAgICAgICAgIC5hZG9wdChuZXcgRWxlbWVudCgnZGQnKS5zZXQoJ3RleHQnLCBmaWxlRGV0YWlscy5iaXRyYXRlKSkKKyAgICAgICAgICAgICAgLmluamVjdChwcmV2aWV3QXJlYSk7CisgICAgICAgICAgICAgIAorICAgIHByZXZpZXdBcmVhID0gbmV3IEVsZW1lbnQoJ2RpdicsIHsnY2xhc3MnOiAnZmlsZW1hbmFnZXItcHJldmlldy1jb250ZW50J30pLmluamVjdChwcmV2aWV3QXJlYSk7CisgICAgCisgICAgdmFyIGRld3BsYXllciA9IHRoaXMuYXNzZXRCYXNlUGF0aCArICcvZGV3cGxheWVyLnN3Zic7CisgICAgICAgICAgICAgICAgICAKKyAgICBuZXcgRWxlbWVudCgnb2JqZWN0JywgeworICAgICAgICB0eXBlOiAgICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCcsIAorICAgICAgICBkYXRhOiAgIGRld3BsYXllciwKKyAgICAgICAgd2lkdGg6ICAyMDAsCisgICAgICAgIGhlaWdodDogMjAsCisgICAgICAgIHN0eWxlOiAnbWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0bztkaXNwbGF5OmJsb2NrOycKKyAgICAgIH0pCisgICAgICAuYWRvcHQobmV3IEVsZW1lbnQoJ3BhcmFtJywge25hbWU6J3dtb2RlJywgICAgIHZhbHVlOid0cmFuc3BhcmVudCd9KSkKKyAgICAgIC5hZG9wdChuZXcgRWxlbWVudCgncGFyYW0nLCB7bmFtZTonbW92aWUnLCAgICAgdmFsdWU6ZGV3cGxheWVyfSkpCisgICAgICAuYWRvcHQobmV3IEVsZW1lbnQoJ3BhcmFtJywge25hbWU6J2ZsYXNodmFycycsIHZhbHVlOidtcDM9JytmaWxlRGV0YWlscy51cmwrJyZ2b2x1bWU9NTAmc2hvd3RpbWU9MSd9KSkgICAgICAgICAgICAgIAorICAgICAgLmluamVjdChwcmV2aWV3QXJlYSk7ICAgICAgICAgICAKKyAgICAgIAorICAgIHJldHVybiBwcmV2aWV3QXJlYS5wYXJlbnROb2RlOworICB9LAorICAKKwlzaG93RnVuY3Rpb25zOiBmdW5jdGlvbihpY29uLGFwcGVhck9uLG9wYWNpdHlCZWZvcmUsb3BhY2l0eUFmdGVyKSB7CisJCXZhciBvcGFjaXR5ID0gW29wYWNpdHlCZWZvcmUgfHwgMSwgb3BhY2l0eUFmdGVyIHx8IDBdOworCQlpY29uLnNldCh7CisJCQlvcGFjaXR5OiBvcGFjaXR5WzFdCisJCX0pOworCisJCWRvY3VtZW50LmlkKGFwcGVhck9uKS5hZGRFdmVudHMoeworCQkJbW91c2VlbnRlcjogKGZ1bmN0aW9uKCkgeworCQkJCQkJCXRoaXMuc2V0U3R5bGUoJ29wYWNpdHknLCBvcGFjaXR5WzBdKTsKKwkJCQkJCX0pLmJpbmQoaWNvbiksCisJCQltb3VzZWxlYXZlOiAoZnVuY3Rpb24oKSB7CisJCQkJCQkJdGhpcy5zZXRTdHlsZSgnb3BhY2l0eScsIG9wYWNpdHlbMV0pOworCQkJCQkJfSkuYmluZChpY29uKQorCQl9KTsKKwkJcmV0dXJuIGljb247CisJfSwKKworCW5vcm1hbGl6ZTogZnVuY3Rpb24oc3RyKSB7CisJCXJldHVybiBzdHIucmVwbGFjZSgvXC8rL2csICcvJyk7CisJfSwKKworCWRpcm5hbWU6IGZ1bmN0aW9uKHBhdGgpIHsKKwkJdmFyIHNlY3RzID0gcGF0aC5zcGxpdCgnLycpOworCQl2YXIgdG9wZGlyID0gc2VjdHMucG9wKCk7CisJCWlmICh0b3BkaXIgPT09ICcnKQorCQl7CisJCQkvLyBwYXRoIGhhcyB0cmFpbGluZyAnLyc7IGtlZXAgaXQgdGhhdCB3YXkhCisJCQlzZWN0cy5wb3AoKTsKKwkJCXNlY3RzLnB1c2goJycpOworCQl9CisJCXJldHVybiBzZWN0cy5qb2luKCcvJyk7CisJfSwKKworCXN3aXRjaEJ1dHRvbjRDdXJyZW50OiBmdW5jdGlvbigpIHsKKwkJdmFyIGNoayA9ICEhdGhpcy5DdXJyZW50OworCQl2YXIgZWxzID0gW107CisJCWVscy5wdXNoKHRoaXMubWVudS5nZXRFbGVtZW50KCdidXR0b24uZmlsZW1hbmFnZXItb3BlbicpKTsKKwkJZWxzLnB1c2godGhpcy5tZW51LmdldEVsZW1lbnQoJ2J1dHRvbi5maWxlbWFuYWdlci1kb3dubG9hZCcpKTsKKwkJZWxzLmVhY2goZnVuY3Rpb24oZWwpIHsKKwkJCWlmIChlbCkKKwkJCXsKKwkJCQllbC5zZXQoJ2Rpc2FibGVkJywgIWNoaylbKGNoayA/ICdyZW1vdmUnIDogJ2FkZCcpICsgJ0NsYXNzJ10oJ2Rpc2FibGVkJyk7CisJCQl9CisJCX0pOworCX0sCisKKwkvLyBhZGRzIGJ1dHRvbnMgdG8gdGhlIGZpbGUgbWFpbiBtZW51LCB3aGljaCBvbkNsaWNrIHN0YXJ0IGEgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZQorCWFkZE1lbnVCdXR0b246IGZ1bmN0aW9uKG5hbWUpIHsKKwkJdmFyIGVsID0gbmV3IEVsZW1lbnQoJ2RpdicsIHsKKwkJCSdjbGFzcyc6ICdmaWxlbWFuYWdlci1idXR0b24gZmlsZW1hbmFnZXItJyArIG5hbWUsCisJCQl0ZXh0OiB0aGlzLmxhbmd1YWdlW25hbWVdCisJCX0pLmluamVjdCh0aGlzLm1lbnUsICd0b3AnKTsKKworCQlpZiAodGhpc1tuYW1lKydfb25fY2xpY2snXSkKKwkJeworCQkJZWwuYWRkRXZlbnQoJ2NsaWNrJywgdGhpc1tuYW1lKydfb25fY2xpY2snXS5iaW5kKHRoaXMpKTsKKwkJfQorCQlyZXR1cm4gZWw7CisJfSwKKworCS8vIGNsZWFyIHRoZSB2aWV3IGNodW5rIHRpbWVyLCBlcmFzZSB0aGUgSlNPTiBzdG9yZSBidXQgZG8gTk9UIHJlc2V0IHRoZSBwYWdpbmF0aW9uIHRvIHBhZ2UgMDoKKwkvLyB3ZSBtYXkgYmUgcmVsb2FkaW5nIGFuZCB3ZSBkb24ndCB3YW50IHRvIGRlc3Ryb3kgdGhlIHBhZ2UgaW5kaWNhdG9yIHRoZW4hCisJcmVzZXRfdmlld19maWxsX3N0b3JlOiBmdW5jdGlvbihqKQorCXsKKwkJdGhpcy52aWV3X2ZpbGxfc3RhcnRpbmRleCA9IDA7ICAgLy8gb2Zmc2V0IGludG8gdGhlIHZpZXcgSlNPTiBhcnJheTogd2hpY2ggcGFydCBvZiB0aGUgZW50aXJlIHZpZXcgYXJlIHdlIGN1cnJlbnRseSB3YXRjaGluZz8KKwkJaWYgKHRoaXMudmlld19maWxsX2pzb24pCisJCXsKKwkJCS8vIG1ha2Ugc3VyZSB0aGUgb2xkICdmaWxsJyBydW4gaXMgYWJvcnRlZCBBU0FQOiBjbGVhciB0aGUgb2xkIGZpbGVzW10gYXJyYXkgdG8gYnJlYWsKKwkJCS8vIHRoZSBoZWF2aWVzdCBsb29wIGluIGZpbGw6CisJCQl0aGlzLnZpZXdfZmlsbF9qc29uLmZpbGVzID0gW107CisJCQl0aGlzLnZpZXdfZmlsbF9qc29uLmRpcnMgPSBbXTsKKwkJfQorCisJCXRoaXMucmVzZXRfZmlsbCgpOworCisJCXRoaXMudmlld19maWxsX2pzb24gPSAoKGogJiYgai5zdGF0dXMpID8gaiA6IG51bGwpOyAgICAgIC8vIGNsZWFyIG91dCB0aGUgb2xkIEpTT04gZGF0YSBhbmQgc2V0IHVwIHBvc3NpYmx5IG5ldyBkYXRhLgorCQkvLyBeXl4gdGhlIGxhdGVzdCBKU09OIGFycmF5IGRlc2NyaWJpbmcgdGhlIGVudGlyZSBsaXN0OyB1c2VkIHdpdGggcGFnaW5hdGlvbiB0byBob3AgdGhyb3VnaCBodWdlIGRpcnMgd2l0aG91dCByZXBlYXRlZGx5CisJCS8vICAgICBjb25zdWx0aW5nIHRoZSBzZXJ2ZXIuIFRoZSBzZXJ2ZXIgZG9lc24ndCBuZWVkIHRvIGtub3cgd2UncmUgc28gc2xvdyB3ZSBuZWVkIHBhZ2luYXRpb24gbm93ISA7LSkKKwl9LAorCisKKwkvLyBjbGVhciB0aGUgdmlldyBjaHVuayB0aW1lciBvbmx5LiBXZSBhcmUgcHJvYmFibHkgcmVkcmF3aW5nIHRoZSBsaXN0IHZpZXchCisJcmVzZXRfZmlsbDogZnVuY3Rpb24oKQorCXsKKwkJdGhpcy5icm93c2VyX2RyYWduZHJvcF9pbmZvLmZhZGUoMC41KTsKKwkJdGhpcy5icm93c2VyX2RyYWduZHJvcF9pbmZvLnNldFN0eWxlKCdiYWNrZ3JvdW5kLXBvc2l0aW9uJywgJzBweCAtMTZweCcpOworCQl0aGlzLmJyb3dzZXJfZHJhZ25kcm9wX2luZm8uc2V0KCd0aXRsZScsIHRoaXMubGFuZ3VhZ2UuZHJhZ19uX2Ryb3BfZGlzYWJsZWQpOworCisJCS8vIGFzIHRoaXMgaXMgYSBsb25nLXJ1bm5pbmcgcHJvY2VzcywgbWFrZSBzdXJlIHRoZSBob3VyZ2xhc3MtZXF1aXZhbGVudCBpcyB2aXNpYmxlIGZvciB0aGUgZHVyYXRpb246CisJCXRoaXMuYnJvd3NlckxvYWRlci5mYWRlKDEpOworCisJCXRoaXMuYnJvd3Nlcl9wYWdpbmcuZmFkZSgwKTsKKworCQkvLyBhYm9ydCBhbnkgc3RpbGwgcnVubmluZyAoJ2FudGlxdWF0ZWQnKSBmaWxsIGNodW5rczoKKwkJdGhpcy5SZXF1ZXN0UXVldWUuY2FuY2VsX2J1bGsoJ2ZpbGwnKTsKKwkJY2xlYXJUaW1lb3V0KHRoaXMudmlld19maWxsX3RpbWVyKTsKKwkJdGhpcy52aWV3X2ZpbGxfdGltZXIgPSBudWxsOyAgICAgLy8gdGltZXIgcmVmZXJlbmNlIHdoZW4gZmlsbCgpIGlzIHdvcmtpbmcgY2h1bmstYnktY2h1bmsuCisJfSwKKworCXN0b3JlX3ZpZXdfZmlsbF9zdGFydGluZGV4OiBmdW5jdGlvbihpZHgpCisJeworCQl0aGlzLnZpZXdfZmlsbF9zdGFydGluZGV4ID0gaWR4OworCQlpZiAodHlwZW9mIGpzR0VUICE9PSAndW5kZWZpbmVkJyAvKiAmJiB0aGlzLnN0b3JlSGlzdG9yeSAqLykgeworCQkJanNHRVQuc2V0KHsnZm1QYWdlSWR4JzogaWR4fSk7CisJCX0KKwl9LAorCisJZ2V0X3ZpZXdfZmlsbF9zdGFydGluZGV4OiBmdW5jdGlvbihpZHgpCisJeworCQkvLyB3ZSBkb24ndCBjYXJlIGFib3V0IG51bGwsIHVuZGVmaW5lZCBvciAwIGhlcmU6IGFzIHdlIGtlZXAgY2xvc2UgdHJhY2sgb2YgdGhlIHN0YXJ0aW5kZXgsIGFueSBub256ZXJvIHZhbHVlZCBzZXR0aW5nIHdpbnMgb3V0LgorCQlpZiAoIWlkeCkKKwkJeworCQkJaWR4ID0gdGhpcy52aWV3X2ZpbGxfc3RhcnRpbmRleDsKKwkJfQorCQlpZiAodHlwZW9mIGpzR0VUICE9PSAndW5kZWZpbmVkJyAmJiAhaWR4KQorCQl7CisJCQlpZHggPSBqc0dFVC5nZXQoJ2ZtUGFnZUlkeCcpOworCQl9CisJCXJldHVybiBwYXJzZUludChpZHggPyBpZHggOiAwLCAxMCk7CisJfSwKKworCWZpcmVIb29rczogZnVuY3Rpb24oaG9vaykgeworCQl2YXIgYXJncyA9IEFycmF5LnNsaWNlKGFyZ3VtZW50cywgMSk7CisJCWZvcih2YXIga2V5IGluIHRoaXMuaG9va3NbaG9va10pIHsKKwkJCXRoaXMuaG9va3NbaG9va11ba2V5XS5hcHBseSh0aGlzLCBhcmdzKTsKKwkJfQorCQlyZXR1cm4gdGhpczsKKwl9LAorCisJY3Z0WEhSZXJyb3IybXNnOiBmdW5jdGlvbih4bWxIdHRwUmVxdWVzdCkgeworCQl2YXIgc3RhdHVzID0geG1sSHR0cFJlcXVlc3Quc3RhdHVzOworCQl2YXIgb3JzYyA9IHhtbEh0dHBSZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZTsKKwkJdmFyIHJlc3BvbnNlID0gKHhtbEh0dHBSZXF1ZXN0LnJlc3BvbnNlVGV4dCB8fCB0aGlzLmxhbmd1YWdlWydiYWNrZW5kLnVuaWRlbnRpZmllZF9lcnJvciddKTsKKworCQl2YXIgdGV4dCA9IHJlc3BvbnNlLnN1YnN0aXR1dGUodGhpcy5sYW5ndWFnZSwgL1xcP1wkXHsoW157fV0rKVx9L2cpOworCQlyZXR1cm4gdGV4dDsKKwl9LAorCisJc2hvd0Vycm9yOiBmdW5jdGlvbih0ZXh0KSB7CisJCXZhciBlcnJvclRleHQgPSAnJyArIHRleHQ7CisKKwkJaWYgKCFlcnJvclRleHQpIHsKKwkJCWVycm9yVGV4dCA9IHRoaXMubGFuZ3VhZ2VbJ2JhY2tlbmQudW5pZGVudGlmaWVkX2Vycm9yJ107CisJCX0KKwkJZXJyb3JUZXh0ID0gZXJyb3JUZXh0LnN1YnN0aXR1dGUodGhpcy5sYW5ndWFnZSwgL1xcP1wkXHsoW157fV0rKVx9L2cpOworCisJCWlmICh0aGlzLnBlbmRpbmdfZXJyb3JfZGlhbG9nKQorCQl7CisJCQl0aGlzLnBlbmRpbmdfZXJyb3JfZGlhbG9nLmFwcGVuZE1lc3NhZ2UoZXJyb3JUZXh0KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXRoaXMucGVuZGluZ19lcnJvcl9kaWFsb2cgPSBuZXcgRmlsZU1hbmFnZXIuRGlhbG9nKHRoaXMubGFuZ3VhZ2UuZXJyb3IsIHsKKwkJCQlidXR0b25zOiBbJ2NvbmZpcm0nXSwKKwkJCQlsYW5ndWFnZTogeworCQkJCQljb25maXJtOiB0aGlzLmxhbmd1YWdlLm9rCisJCQkJfSwKKwkJCQljb250ZW50OiBbCisJCQkJCWVycm9yVGV4dAorCQkJCV0sCisJCQkJekluZGV4OiB0aGlzLm9wdGlvbnMuekluZGV4ICsgMTAwMCwKKwkJCQlvbk9wZW46IHRoaXMub25EaWFsb2dPcGVuLmJpbmQodGhpcyksCisJCQkJb25DbG9zZTogZnVuY3Rpb24oKQorCQkJCXsKKwkJCQkJdGhpcy5wZW5kaW5nX2Vycm9yX2RpYWxvZyA9IG51bGw7CisJCQkJCXRoaXMub25EaWFsb2dDbG9zZSgpOworCQkJCX0uYmluZCh0aGlzKQorCQkJfSk7CisJCX0KKwl9LAorCisJc2hvd01lc3NhZ2U6IGZ1bmN0aW9uKHRleHRPckVsZW1lbnQsIHRpdGxlKSB7CisJCWlmICghdGl0bGUpIHRpdGxlID0gJyc7CisJCW5ldyBGaWxlTWFuYWdlci5EaWFsb2codGl0bGUsIHsKKwkJCWJ1dHRvbnM6IFsnY29uZmlybSddLAorCQkJbGFuZ3VhZ2U6IHsKKwkJCQljb25maXJtOiB0aGlzLmxhbmd1YWdlLm9rCisJCQl9LAorCQkJY29udGVudDogWworCQkJCXRleHRPckVsZW1lbnQKKwkJCV0sCisJCQl6SW5kZXg6IHRoaXMub3B0aW9ucy56SW5kZXggKyA5NTAsCisJCQlvbk9wZW46IHRoaXMub25EaWFsb2dPcGVuLmJpbmQodGhpcyksCisJCQlvbkNsb3NlOiB0aGlzLm9uRGlhbG9nQ2xvc2UuYmluZCh0aGlzKQorCQl9KTsKKwl9LAorCisJb25SZXF1ZXN0OiBmdW5jdGlvbigpIHsKKwkJdGhpcy5sb2FkZXIuZmFkZSgxKTsKKwl9LAorCW9uQ29tcGxldGU6IGZ1bmN0aW9uKCkgeworCQkvL3RoaXMubG9hZGVyLmZhZGUoMCk7CisJfSwKKwlvblN1Y2Nlc3M6IGZ1bmN0aW9uKCkgeworCQl0aGlzLmxvYWRlci5mYWRlKDApOworCX0sCisJb25FcnJvcjogZnVuY3Rpb24oKSB7CisJCXRoaXMubG9hZGVyLmZhZGUoMCk7CisJfSwKKwlvbkZhaWx1cmU6IGZ1bmN0aW9uKCkgeworCQl0aGlzLmxvYWRlci5mYWRlKDApOworCX0sCisJb25EaWFsb2dPcGVuOiBmdW5jdGlvbigpIHsKKwkJdGhpcy5kaWFsb2dPcGVuID0gdHJ1ZTsKKwkJdGhpcy5vbkRpYWxvZ09wZW5XaGVuVXBsb2FkLmFwcGx5KHRoaXMpOworCX0sCisJb25EaWFsb2dDbG9zZTogZnVuY3Rpb24oKSB7CisJCXRoaXMuZGlhbG9nT3BlbiA9IGZhbHNlOworCQl0aGlzLm9uRGlhbG9nQ2xvc2VXaGVuVXBsb2FkLmFwcGx5KHRoaXMpOworCX0sCisJb25EaWFsb2dPcGVuV2hlblVwbG9hZDogZnVuY3Rpb24oKSB7fSwKKwlvbkRpYWxvZ0Nsb3NlV2hlblVwbG9hZDogZnVuY3Rpb24oKSB7fSwKKwlvbkRyYWdDb21wbGV0ZTogZnVuY3Rpb24oKSB7CisJCXJldHVybiBmYWxzZTsgICAvLyByZXR1cm4gVFJVRSB3aGVuIHRoZSBkcm9wIGFjdGlvbiBpcyB1bndhbnRlZAorCX0sCisKKwkvLyBkZXYvZGlhZyBzaG9ydGN1dHM6CisKKwkvLyBhbHdheXMgcmV0dXJuIGEgc3RyaW5nOyBkdW1wIG9iamVjdC9hcnJheS8uLi4gaW4gJ2FycicgdG8gaHVtYW4gcmVhZGFibGUgc3RyaW5nOgorCWRpYWc6CisJeworCQl2ZXJib3NlOiBmYWxzZSwKKwkJZHVtcDogZnVuY3Rpb24oYXJyLCBsZXZlbCwgbWF4X2RlcHRoLCBtYXhfbGluZXMsIG5vX3Nob3cpCisJCXsKKwkJCXJldHVybiAnJzsKKwkJfSwKKwkJbG9nOiBmdW5jdGlvbigvKiAuLi4gKi8pCisJCXsKKwkJCWlmICghdGhpcy52ZXJib3NlKSByZXR1cm47CisKKwkJCWlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpCisJCQl7CisJCQkJLy8gV0FSTklORzogTVMgSUU5ICgrIHY4Pykgc2F5czogdGhpcyBvYmplY3QgZG9lc24ndCBzdXBwb3J0IHRoZSAnYXBwbHknIG1ldGhvZC4gOi0oKCgKKwkJCQkvLyBBbHNvLCBNU0lFIDgvOSBkb2Vzbid0IHNob3cgb2JqZWN0IGR1bXBzIGxpa2UgeW91J2QgZXhwZWN0OyBGaXJlYnVnIExpdGUgYWxsZWdlZGx5IGZpeGVzIHRoYXQsCisJCQkJLy8gYnV0IHRoaXMgaXMgY29kZSB3aGljaCBpbnRlbmRzIHRvICdoaWRlJyBhbGwgdGhhdCBzaGl0ZSwgc28gd2UgY2FuIHNpbXBseSB3cml0ZSBkaWFnLmxvZygpIGFuZAorCQkJCS8vIG5vdCBib3RoZXIgd2hlcmUgaXQgd2lsbCBlbmQgdXAuCisJCQkJaWYgKGNvbnNvbGUuaW5mbyAmJiBjb25zb2xlLmluZm8uYXBwbHkpCisJCQkJeworCQkJCQljb25zb2xlLmluZm8uYXBwbHkoY29uc29sZSwgYXJndW1lbnRzKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoY29uc29sZS5sb2cgJiYgY29uc29sZS5sb2cuYXBwbHkpCisJCQkJeworCQkJCQljb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpOworCQkJCX0KKwkJCQllbHNlIGlmIChjb25zb2xlLmluZm8gfHwgY29uc29sZS5sb2cpCisJCQkJeworCQkJCQkvLyB0aGUgTVNJRSBkb3duZ3JhZGUKKwkJCQkJdmFyIGwgPSAoY29uc29sZS5pbmZvIHx8IGNvbnNvbGUubG9nKTsKKwkJCQkJdmFyIGE7CisJCQkJCXZhciBsdCA9ICcnOworCQkJCQl2YXIgbSwgZSwgdjsKKwkJCQkJdmFyIG11bHRpb2JqID0gMDsgICAvLyBjb3VudCBpdGVtcyBkdW1wZWQgd2l0aG91dCBpbnRlci1XUworCQkJCQlmb3IgKGEgaW4gYXJndW1lbnRzKQorCQkJCQl7CisJCQkJCQltdWx0aW9iaisrOworCQkJCQkJYSA9IGFyZ3VtZW50c1thXTsKKwkJCQkJCXN3aXRjaCAodHlwZW9mIGEpCisJCQkJCQl7CisJCQkJCQljYXNlICd1bmRlZmluZWQnOgorCQkJCQkJCWx0ICs9ICcodW5kZWZpbmVkKSc7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgJ251bGwnOgorCQkJCQkJCWx0ICs9ICcobnVsbCknOworCQkJCQkJCWJyZWFrOworCisJCQkJCQljYXNlICdvYmplY3QnOgorCQkJCQkJCWx0ICs9ICd7JzsKKwkJCQkJCQltID0gJyc7CisJCQkJCQkJZm9yIChlIGluIGEpCisJCQkJCQkJeworCQkJCQkJCQlsdCArPSBtOworCisJCQkJCQkJCXYgPSBhW2VdOworCQkJCQkJCQkvL2lmICh0eXBlb2YgZSAhPT0gJ3N0cmluZycpIGNvbnRpbnVlOworCQkJCQkJCQlzd2l0Y2ggKHR5cGVvZiB2KQorCQkJCQkJCQl7CisJCQkJCQkJCWNhc2UgJ2Z1bmN0aW9uJzoKKwkJCQkJCQkJCWNvbnRpbnVlOyAgICAgICAgICAgICAgIC8vIHNraXAgdGhlc2UKKworCQkJCQkJCQljYXNlICd1bmRlZmluZWQnOgorCQkJCQkJCQkJbHQgKz0gZSArICc6ICh1bmRlZmluZWQpJzsKKwkJCQkJCQkJCWJyZWFrOworCisJCQkJCQkJCWNhc2UgJ251bGwnOgorCQkJCQkJCQkJbHQgKz0gZSArICc6IChudWxsKSc7CisJCQkJCQkJCQlicmVhazsKKworCQkJCQkJCQljYXNlICdvYmplY3QnOgorCQkJCQkJCQkJLy8gbnV0cyBvZiBjb3Vyc2U6IElFOSBoYXMgb2JqZWN0cyB3aGljaCB0dXJuIG91dCBhcyA9PT0gbnVsbCBhbmQgY2x1bmsgb24gLnRvU3RyaW5nKCkgYXMgYSBjb25zZXF1ZW5jZSAgID46LVMKKwkJCQkJCQkJCWlmICh2ID09PSBudWxsKQorCQkJCQkJCQkJeworCQkJCQkJCQkJCWx0ICs9IGUgKyAnOiAobnVsbCknOworCQkJCQkJCQkJfQorCQkJCQkJCQkJZWxzZQorCQkJCQkJCQkJeworCQkJCQkJCQkJCWx0ICs9IGUgKyAnOiAnICsgdi50b1N0cmluZygpOworCQkJCQkJCQkJfQorCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkJCQkJY2FzZSAnc3RyaW5nJzoKKwkJCQkJCQkJCWx0ICs9IGUgKyAnOiAiJyArIHYgKyAnIic7CisJCQkJCQkJCQlicmVhazsKKworCQkJCQkJCQlkZWZhdWx0OgorCQkJCQkJCQkJbHQgKz0gZSArICc6ICcgKyB2LnRvU3RyaW5nKCk7CisJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJfQorCQkJCQkJCQltID0gJywgJzsKKwkJCQkJCQl9CisJCQkJCQkJbHQgKz0gJ30nOworCQkJCQkJCWJyZWFrOworCisJCQkJCQljYXNlICdzdHJpbmcnOgorCQkJCQkJCS8vIHJlc2V0IGludGVyLVdTIGZvcm1hdHRpbmcgYXNzaXN0OgorCQkJCQkJCW11bHRpb2JqID0gMDsKKwkJCQkJCQlsdCArPSBhOworCQkJCQkJCWJyZWFrOworCisJCQkJCQlkZWZhdWx0OgorCQkJCQkJCXRyeQorCQkJCQkJCXsKKwkJCQkJCQkJbSA9IGEudG9TdHJpbmcoKTsKKwkJCQkJCQl9CisJCQkJCQkJY2F0Y2ggKGUpCisJCQkJCQkJeworCQkJCQkJCQltID0gJygqY2x1bmsqKSc7CisJCQkJCQkJfQorCQkJCQkJCWx0ICs9IHY7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlpZiAobXVsdGlvYmogPj0gMSkKKwkJCQkJCXsKKwkJCQkJCQlsdCArPSAnICc7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9KTsKKworRmlsZU1hbmFnZXIuUmVxdWVzdCA9IG5ldyBDbGFzcyh7CisJRXh0ZW5kczogUmVxdWVzdC5KU09OLAorCisJb3B0aW9uczoKKwl7CisJCXNlY3VyZTogICAgICAgICAgdHJ1ZSwgLy8gSXNuJ3QgdGhpcyB0cnVlIGJ5IGRlZmF1bHQgYW55d2F5IGluIFJFUVVFU1QuSlNPTj8KKwkJZm1EaXNwbGF5RXJyb3JzOiB0cnVlICAvLyBBdXRvbWF0aWNhbGx5IGRpc3BsYXkgZXJyb3JzIC0gKiogeW91ciBvblN1Y2Nlc3Mgc3RpbGwgZ2V0cyBjYWxsZWQsIGp1c3QgaWdub3JlIGlmIGl0J3MgYW4gZXJyb3IgKioKKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucywgZmlsZWJyb3dzZXIpIHsKKwkJdGhpcy5wYXJlbnQob3B0aW9ucyk7CisKKwkJdGhpcy5vcHRpb25zLmRhdGEgPSBPYmplY3QubWVyZ2Uoe30sIGZpbGVicm93c2VyLm9wdGlvbnMucHJvcGFnYXRlRGF0YSwgdGhpcy5vcHRpb25zLmRhdGEpOworCisJCWlmICh0aGlzLm9wdGlvbnMuZm1EaXNwbGF5RXJyb3JzKQorCQl7CisJCQl0aGlzLmFkZEV2ZW50cyh7CisJCQkJc3VjY2VzczogZnVuY3Rpb24oaikKKwkJCQl7CisJCQkJCWlmICghaikKKwkJCQkJeworCQkJCQkJZmlsZWJyb3dzZXIuc2hvd0Vycm9yKCk7CisJCQkJCX0KKwkJCQkJZWxzZSBpZiAoIWouc3RhdHVzKQorCQkJCQl7CisJCQkJCQlmaWxlYnJvd3Nlci5zaG93RXJyb3IoKCcnICsgai5lcnJvcikuc3Vic3RpdHV0ZShmaWxlYnJvd3Nlci5sYW5ndWFnZSwgL1xcP1wkXHsoW157fV0rKVx9L2cpKTsKKwkJCQkJfQorCQkJCX0uYmluZCh0aGlzKSwKKworCQkJCWVycm9yOiBmdW5jdGlvbih0ZXh0LCBlcnJvcikKKwkJCQl7CisJCQkJCWZpbGVicm93c2VyLnNob3dFcnJvcih0ZXh0KTsKKwkJCQl9LAorCisJCQkJZmFpbHVyZTogZnVuY3Rpb24oeG1sSHR0cFJlcXVlc3QpCisJCQkJeworCQkJCQl2YXIgdGV4dCA9IGZpbGVicm93c2VyLmN2dFhIUmVycm9yMm1zZyh4bWxIdHRwUmVxdWVzdCk7CisJCQkJCWZpbGVicm93c2VyLnNob3dFcnJvcih0ZXh0KTsKKwkJCQl9CisJCQl9KTsKKwkJfQorCisJCXRoaXMuYWRkRXZlbnRzKHsKKwkJCXJlcXVlc3Q6IGZpbGVicm93c2VyLm9uUmVxdWVzdC5iaW5kKGZpbGVicm93c2VyKSwKKwkJCWNvbXBsZXRlOiBmaWxlYnJvd3Nlci5vbkNvbXBsZXRlLmJpbmQoZmlsZWJyb3dzZXIpLAorCQkJc3VjY2VzczogZmlsZWJyb3dzZXIub25TdWNjZXNzLmJpbmQoZmlsZWJyb3dzZXIpLAorCQkJZXJyb3I6IGZpbGVicm93c2VyLm9uRXJyb3IuYmluZChmaWxlYnJvd3NlciksCisJCQlmYWlsdXJlOiBmaWxlYnJvd3Nlci5vbkZhaWx1cmUuYmluZChmaWxlYnJvd3NlcikKKwkJfSk7CisJfQorfSk7CisKK0ZpbGVNYW5hZ2VyLkxhbmd1YWdlID0ge307CisKKyhmdW5jdGlvbigpIHsKKworLy8gLT4+IGxvYWQgREVQRU5ERU5DSUVTCitpZiAodHlwZW9mIF9fTUZNX0FTU0VUU19ESVJfXyA9PT0gJ3VuZGVmaW5lZCcpCit7CisJdmFyIF9fRElSX18gPSAoZnVuY3Rpb24oKSB7CisJCQl2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsKKwkJCXZhciBzY3JpcHQgPSBzY3JpcHRzW3NjcmlwdHMubGVuZ3RoIC0gMV0uc3JjOworCQkJdmFyIGhvc3QgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5yZXBsYWNlKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uaGFzaCwnJyk7CisJCQlyZXR1cm4gc2NyaXB0LnN1YnN0cmluZygwLCBzY3JpcHQubGFzdEluZGV4T2YoJy8nKSkucmVwbGFjZShob3N0LCcnKSArICcvJzsKKwl9KSgpOworCV9fTUZNX0FTU0VUU19ESVJfXyA9IF9fRElSX18gKyAiLi4vQXNzZXRzIjsKK30KK0Fzc2V0LmphdmFzY3JpcHQoX19NRk1fQVNTRVRTX0RJUl9fKycvanMvbWlsa2JveC9taWxrYm94LmpzJyk7CitBc3NldC5jc3MoX19NRk1fQVNTRVRTX0RJUl9fKycvanMvbWlsa2JveC9jc3MvbWlsa2JveC5jc3MnKTsKK0Fzc2V0LmNzcyhfX01GTV9BU1NFVFNfRElSX18rJy9Dc3MvRmlsZU1hbmFnZXIuY3NzJyk7CitBc3NldC5jc3MoX19NRk1fQVNTRVRTX0RJUl9fKycvQ3NzL0FkZGl0aW9ucy5jc3MnKTsKK2lmKEJyb3dzZXIuaWUgJiYgQnJvd3Nlci52ZXJzaW9uIDw9IDcpIAoreyAgIAorICBBc3NldC5jc3MoX19NRk1fQVNTRVRTX0RJUl9fKycvQ3NzL0ZpbGVNYW5hZ2VyX2llNy5jc3MnKTsKK30KKworCitpZiggdHlwZW9mIF9fTUZNX1VTRV9CQUNLX0JVVFRPTl9OQVZJR0FUSU9OX18gIT0gJ3VuZGVmaW5lZCcgJiYgX19NRk1fVVNFX0JBQ0tfQlVUVE9OX05BVklHQVRJT05fXyApCit7CisgIEFzc2V0LmphdmFzY3JpcHQoX19NRk1fQVNTRVRTX0RJUl9fKycvanMvanNHRVQuanMnLCB7CisgICAgZXZlbnRzOiB7CisgICAgICBsb2FkOiAoZnVuY3Rpb24oKSB7CisgICAgICAgIHdpbmRvdy5maXJlRXZlbnQoJ2pzR0VUbG9hZGVkJyk7CisgICAgICB9KS5iaW5kKHRoaXMpCisgICAgfQorICB9KTsKK30KKworRWxlbWVudC5pbXBsZW1lbnQoeworCisJY2VudGVyOiBmdW5jdGlvbihvZmZzZXRzKSB7CisJCXZhciBzY3JvbGwgPSBkb2N1bWVudC5nZXRTY3JvbGwoKTsKKwkJdmFyIG9mZnNldCA9IGRvY3VtZW50LmdldFNpemUoKTsKKwkJdmFyIHNpemUgPSB0aGlzLmdldFNpemUoKTsKKwkJdmFyIHZhbHVlcyA9IHt4OiAnbGVmdCcsIHk6ICd0b3AnfTsKKworCQlpZiAoIW9mZnNldHMpIHsKKwkJCW9mZnNldHMgPSB7fTsKKwkJfQorCisJCWZvciAodmFyIHogaW4gdmFsdWVzKSB7CisJCQl2YXIgc3R5bGUgPSBzY3JvbGxbel0gKyAob2Zmc2V0W3pdIC0gc2l6ZVt6XSkgLyAyICsgKG9mZnNldHNbel0gfHwgMCk7CisJCQl0aGlzLnNldFN0eWxlKHZhbHVlc1t6XSwgKHogPT09ICd5JyAmJiBzdHlsZSA8IDMwKSA/IDMwIDogc3R5bGUpOworCQl9CisJCXJldHVybiB0aGlzOworCX0KKworfSk7CisKK0ZpbGVNYW5hZ2VyLkRpYWxvZyA9IG5ldyBDbGFzcyh7CisKKwlJbXBsZW1lbnRzOiBbT3B0aW9ucywgRXZlbnRzXSwKKworCW9wdGlvbnM6IHsKKwkJLyoKKwkJICogb25TaG93OiBmdW5jdGlvbigpIHt9LAorCQkgKiBvbk9wZW46IGZ1bmN0aW9uKCkge30sCisJCSAqIG9uQ29uZmlybTogZnVuY3Rpb24oKSB7fSwKKwkJICogb25EZWNsaW5lOiBmdW5jdGlvbigpIHt9LAorCQkgKiBvbkNsb3NlOiBmdW5jdGlvbigpIHt9LAorCQkgKi8KKwkJcmVxdWVzdDogbnVsbCwKKwkJYnV0dG9uczogWydjb25maXJtJywgJ2RlY2xpbmUnXSwKKwkJbGFuZ3VhZ2U6IHt9LAorCQl6SW5kZXg6IDIwMDAsCisJCWF1dG9mb2N1c19vbjogbnVsbCAvLyAoc3RyaW5nKSBzdWl0YWJsZSBhcyBhIC5nZXRFbGVtZW50KCkgYXJndW1lbnQgb3IgTlVMTCBmb3IgZGVmYXVsdC4gRXhhbXBsZTogJ2J1dHRvbi5maWxlbWFuYWdlci1kaWFsb2ctY29uZmlybScKKwl9LAorCisJaW5pdGlhbGl6ZTogZnVuY3Rpb24odGV4dCwgb3B0aW9ucykgeworCQl0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7CisJCXRoaXMuZGlhbG9nT3BlbiA9IGZhbHNlOworCisJCXRoaXMuY29udGVudF9lbCA9IG5ldyBFbGVtZW50KCdkaXYnLCB7CisJCQknY2xhc3MnOiAnZmlsZW1hbmFnZXItZGlhbG9nLWNvbnRlbnQnCisJCX0pLmFkb3B0KFsKKwkJCXR5cGVPZih0ZXh0KSA9PT0gJ3N0cmluZycgPyB0aGlzLnN0cjJlbCh0ZXh0KSA6IHRleHQKKwkJXSk7CisKKwkJdGhpcy5lbCA9IG5ldyBFbGVtZW50KCdkaXYnLCB7CisJCQknY2xhc3MnOiAnZmlsZW1hbmFnZXItZGlhbG9nJyArIChCcm93c2VyLmllID8gJyBmaWxlbWFuYWdlci1kaWFsb2ctZW5naW5lLXRyaWRlbnQnIDogJycpICsgKEJyb3dzZXIuaWUgPyAnIGZpbGVtYW5hZ2VyLWRpYWxvZy1lbmdpbmUtdHJpZGVudCcgOiAnJykgKyAoQnJvd3Nlci5pZTggPyAnNCcgOiAnJykgKyAoQnJvd3Nlci5pZTkgPyAnNScgOiAnJyksCisJCQlvcGFjaXR5OiAwLAorCQkJdHdlZW46IHtkdXJhdGlvbjogJ3Nob3J0J30sCisJCQlzdHlsZXM6CisJCQl7CisJCQkJJ3otaW5kZXgnOiB0aGlzLm9wdGlvbnMuekluZGV4CisJCQl9CisJCX0pLmFkb3B0KHRoaXMuY29udGVudF9lbCk7CisKKwkJaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuY29udGVudCAhPT0gJ3VuZGVmaW5lZCcpIHsKKwkJCXRoaXMub3B0aW9ucy5jb250ZW50LmVhY2goKGZ1bmN0aW9uKGNvbnRlbnQpIHsKKwkJCQlpZiAoY29udGVudCkKKwkJCQl7CisJCQkJCWlmICh0eXBlT2YoY29udGVudCkgIT09ICdzdHJpbmcnKQorCQkJCQl7CisJCQkJCQl0aGlzLmNvbnRlbnRfZWwuYWRvcHQoY29udGVudCk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQl0aGlzLmNvbnRlbnRfZWwuYWRvcHQodGhpcy5zdHIyZWwoY29udGVudCkpOworCQkJCQl9CisJCQkJfQorCQkJfSkuYmluZCh0aGlzKSk7CisJCX0KKworCQlBcnJheS5lYWNoKHRoaXMub3B0aW9ucy5idXR0b25zLCBmdW5jdGlvbih2KSB7CisJCQluZXcgRWxlbWVudCgnYnV0dG9uJywgeydjbGFzcyc6ICdmaWxlbWFuYWdlci1kaWFsb2ctJyArIHYsIHRleHQ6IHRoaXMub3B0aW9ucy5sYW5ndWFnZVt2XX0pLmFkZEV2ZW50KCdjbGljaycsIChmdW5jdGlvbihlKSB7CisJCQkJaWYgKGUpIGUuc3RvcCgpOworCQkJCXRoaXMuZmlyZUV2ZW50KHYpLmZpcmVFdmVudCgnY2xvc2UnKTsKKwkJCQkvL2lmICghdGhpcy5vcHRpb25zLmhpZGVPdmVybGF5KQorCQkJCXRoaXMub3ZlcmxheS5oaWRlKCk7CisJCQkJdGhpcy5kZXN0cm95KCk7CisJCQl9KS5iaW5kKHRoaXMpKS5pbmplY3QodGhpcy5lbCk7CisJCX0sIHRoaXMpOworCisJCXRoaXMub3ZlcmxheSA9IG5ldyBPdmVybGF5KHsKKwkJCSdjbGFzcyc6ICdmaWxlbWFuYWdlci1vdmVybGF5IGZpbGVtYW5hZ2VyLW92ZXJsYXktZGlhbG9nJywKKwkJCWV2ZW50czogeworCQkJCWNsaWNrOiB0aGlzLmZpcmVFdmVudC5wYXNzKCdjbG9zZScsIHRoaXMpCisJCQl9LAorCQkJLy90d2Vlbjoge2R1cmF0aW9uOiAnc2hvcnQnfSwKKwkJCXN0eWxlczoKKwkJCXsKKwkJCQknei1pbmRleCc6IHRoaXMub3B0aW9ucy56SW5kZXggLSAxCisJCQl9CisJCX0pOworCisJCXRoaXMuYm91bmQgPSB7CisJCQlzY3JvbGw6IChmdW5jdGlvbigpIHsKKwkJCQlpZiAoIXRoaXMuZWwpCisJCQkJCXRoaXMuZGVzdHJveSgpOworCQkJCWVsc2UKKwkJCQkJdGhpcy5lbC5jZW50ZXIoKTsKKwkJCX0pLmJpbmQodGhpcyksCisKKwkJCWtleWVzYzogKGZ1bmN0aW9uKGUpIHsKKwkJCQl3aW5kb3cuRmlsZU1hbmFnZXIucHJvdG90eXBlLmRpYWcubG9nKCdrZXlFc2M6IGtleSBwcmVzczogJywgZSk7CisJCQkJaWYgKGUua2V5ID09PSAnZXNjJykgeworCQkJCQllLnN0b3BQcm9wYWdhdGlvbigpOworCQkJCQl0aGlzLmRlc3Ryb3koKTsKKwkJCQl9CisJCQl9KS5iaW5kKHRoaXMpCisJCX07CisKKwkJdGhpcy5zaG93KCk7CisJfSwKKworCXNob3c6IGZ1bmN0aW9uKCkgeworCQl0aGlzLm92ZXJsYXkuc2hvdygpOworCisJCXZhciBzZWxmID0gdGhpczsKKwkJdGhpcy5maXJlRXZlbnQoJ29wZW4nKTsKKwkJdGhpcy5lbC5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpLmluamVjdChkb2N1bWVudC5ib2R5KTsKKwkJdGhpcy5yZXN0cmljdFNpemUoKTsKKwkJdmFyIGF1dG9mb2N1c19lbCA9ICh0aGlzLm9wdGlvbnMuYXV0b2ZvY3VzX29uID8gdGhpcy5lbC5nZXRFbGVtZW50KHRoaXMub3B0aW9ucy5hdXRvZm9jdXNfb24pIDogKHRoaXMuZWwuZ2V0RWxlbWVudCgnYnV0dG9uLmZpbGVtYW5hZ2VyLWRpYWxvZy1jb25maXJtJykgfHwgdGhpcy5lbC5nZXRFbGVtZW50KCdidXR0b24nKSkpOworCQlpZiAoYXV0b2ZvY3VzX2VsKQorCQl7CisJCQkJLy8gSFRNTDUgc3VwcG9ydDogc2VlICAgIGh0dHA6Ly9kaXZlaW50b2h0bWw1Lm9yZy9kZXRlY3QuaHRtbAorCQkJYXV0b2ZvY3VzX2VsLnNldFByb3BlcnR5KCdhdXRvZm9jdXMnLCAnYXV0b2ZvY3VzJyk7CisgICAgICB0cnl7YXV0b2ZvY3VzX2VsLmZvY3VzKCk7fWNhdGNoKGUpIHsgLyogSUU8OCBGYWlsZXMgKi8gfQorCQl9CisJCXRoaXMuZWwuY2VudGVyKCkuZmFkZSgxKS5nZXQoJ3R3ZWVuJykuY2hhaW4oKGZ1bmN0aW9uKCkgeworCQkJCS8vIFNhZmFyaSAvIENocm9tZSBoYXZlIHRyb3VibGUgZm9jdXNzaW5nIG9uIHRoaW5ncyBub3QgeWV0IGZ1bGx5IHJlbmRlcmVkIQorCQkJCS8vIHNlZSAgIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjA3NDM0Ny9mb2N1cy1ub3Qtd29ya2luZy1pbi1zYWZhcmktb3ItY2hyb21lCisJCQkJLy8gYW5kICAgaHR0cDovL3d3dy5ta3lvbmcuY29tL2phdmFzY3JpcHQvZm9jdXMtaXMtbm90LXdvcmtpbmctaW4taWUtc29sdXRpb24vCisJCQkJaWYgKGF1dG9mb2N1c19lbCkKKwkJCQl7CisJCQkJCWlmICgwKSAgICAgICAgICAgICAgICAgIC8vIHRoZSBkZWxheSBzdWdnZXN0ZWQgYXMgYSBmaXggdGhlcmUgaXMgcGFydCBvZiB0aGUgZmFkZSgpLi4uCisJCQkJCXsKKwkJCQkJCShmdW5jdGlvbihlbCkgeworCQkJCQkJCWVsLmZvY3VzKCk7CisJCQkJCQl9KS5kZWxheSgxLCB0aGlzLCBbYXV0b2ZvY3VzX2VsXSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkvL2F1dG9mb2N1c19lbC5zZXQoJ3RhYkluZGV4JywgMCk7ICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mjc4NjgjYzE1CisJCQkJCQkvLyBeLS0gbm90IG5lZWRlZC4gIFdoZW4geW91IGRlYnVnIEpTIGluIGEgV2Via2l0IGJyb3dzZXIsIHlvdSdyZSB0b2FzdCB3aGVuIGl0IGNvbWVzIHRvIGdldHRpbmcgaW5wdXQgZmllbGQgZm9jdXMsIHBlcmlvZC4gICA6LSgKKwkJCQkJCWF1dG9mb2N1c19lbC5mb2N1cygpOworCQkJCQl9CisJCQkJfQorCQkJfSkuYmluZCh0aGlzKSk7CisKKwkJc2VsZi5maXJlRXZlbnQoJ3Nob3cnKTsKKworCQl3aW5kb3cuRmlsZU1hbmFnZXIucHJvdG90eXBlLmRpYWcubG9nKCdhZGQga2V5IHVwKEVTQykvcmVzaXplL3Njcm9sbCBvbiBzaG93IDE1MDAnKTsKKwkJZG9jdW1lbnQuYWRkRXZlbnRzKHsKKwkJCSdzY3JvbGwnOiB0aGlzLmJvdW5kLnNjcm9sbCwKKwkJCSdyZXNpemUnOiB0aGlzLmJvdW5kLnNjcm9sbCwKKwkJCSdrZXl1cCc6IHRoaXMuYm91bmQua2V5ZXNjCisJCX0pOworCX0sCisKKwlhcHBlbmRNZXNzYWdlOiBmdW5jdGlvbih0ZXh0KSB7CisJCXRoaXMuY29udGVudF9lbC5hZG9wdChbCisJCQl0eXBlT2YodGV4dCkgPT09ICdzdHJpbmcnID8gdGhpcy5zdHIyZWwodGV4dCkgOiB0ZXh0CisJCV0pOworCQl0aGlzLnJlc3RyaWN0U2l6ZSgpOworCQl0aGlzLmVsLmNlbnRlcigpOworCX0sCisKKwlyZXN0cmljdFNpemU6IGZ1bmN0aW9uKCkKKwl7CisJCS8vIG1ha2Ugc3VyZSB0aGUgZGlhbG9nIG5ldmVyIGlzIGxhcmdlciB0aGFuIHRoZSB2aWV3cG9ydCEKKwkJdmFyIGRkaW0gPSB0aGlzLmVsLmdldFNpemUoKTsKKwkJdmFyIHZkaW0gPSB3aW5kb3cuZ2V0U2l6ZSgpOworCQl2YXIgbWF4eCA9ICh2ZGltLnggLSAyMCkgKiAwLjg1OyAvLyBoZXVyaXN0aWM6IG1ha2UgZGlhbG9nIGEgbGl0dGxlIHNtYWxsZXIgdGhhbiB0aGUgc2NyZWVuIGl0c2VsZiBhbmQga2VlcCBhIHBsYWNlIGZvciBwb3NzaWJsZSBvdXRlciBzY3JvbGxiYXJzCisJCWlmIChkZGltLnggPj0gbWF4eCkKKwkJeworCQkJdGhpcy5lbC5zZXRTdHlsZSgnd2lkdGgnLCBtYXh4LnRvSW50KCkpOworCQl9CisJCWRkaW0gPSB0aGlzLmVsLmdldFNpemUoKTsKKwkJdmFyIGNkaW0gPSB0aGlzLmNvbnRlbnRfZWwuZ2V0U2l6ZSgpOworCQl2YXIgbWF4eSA9ICh2ZGltLnkgLSAyMCkgKiAwLjg1OyAvLyBoZXVyaXN0aWM6IG1ha2UgZGlhbG9nIGEgbGl0dGxlIGxlc3MgaGlnaCB0aGFuIHRoZSBzY3JlZW4gaXRzZWxmIGFuZCBrZWVwIGEgcGxhY2UgZm9yIHBvc3NpYmxlIG91dGVyIHNjcm9sbGJhcnMKKwkJaWYgKGRkaW0ueSA+PSBtYXh5KQorCQl7CisJCQkvLyBmaXJzdCBhdHRlbXB0IHRvIGNvcnJlY3QgdGhpcyBieSBtYWtpbmcgdGhlIGRpYWxvZyB3aWRlcjoKKwkJCXZhciB4ID0gZGRpbS54ICogMi4wOworCQkJd2hpbGUgKHggPCBtYXh4ICYmIGRkaW0ueSA+PSBtYXh5KQorCQkJeworCQkJCXRoaXMuZWwuc2V0U3R5bGUoJ3dpZHRoJywgeC50b0ludCgpKTsKKwkJCQlkZGltID0gdGhpcy5lbC5nZXRTaXplKCk7CisJCQkJeCA9IGRkaW0ueCAqIDEuMzsKKwkJCX0KKworCQkJY2RpbSA9IHRoaXMuY29udGVudF9lbC5nZXRTaXplKCk7CisJCQlpZiAoZGRpbS55ID49IG1heHkpCisJCQl7CisJCQkJdmFyIHkgPSBtYXh5IC0gZGRpbS55ICsgY2RpbS55OworCQkJCXRoaXMuY29udGVudF9lbC5zZXRTdHlsZXMoeworCQkJCQloZWlnaHQ6IHkudG9JbnQoKSwKKwkJCQkJb3ZlcmZsb3c6ICdhdXRvJworCQkJCX0pOworCQkJfQorCQl9CisJfSwKKworCXN0cjJlbDogZnVuY3Rpb24odGV4dCkKKwl7CisJCXZhciBlbCA9IG5ldyBFbGVtZW50KCdkaXYnKTsKKwkJaWYgKHRleHQuaW5kZXhPZignPCcpICE9IC0xICYmIHRleHQuaW5kZXhPZignPicpICE9IC0xKQorCQl7CisJCQl0cnkKKwkJCXsKKwkJCQllbC5zZXQoJ2h0bWwnLCB0ZXh0KTsKKwkJCX0KKwkJCWNhdGNoKGUpCisJCQl7CisJCQkJZWwuc2V0KCd0ZXh0JywgdGV4dCk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQllbC5zZXQoJ3RleHQnLCB0ZXh0KTsKKwkJfQorCQlyZXR1cm4gZWw7CisJfSwKKworCWRlc3Ryb3k6IGZ1bmN0aW9uKCkgeworCQlpZiAodGhpcy5lbCkgeworCQkJdGhpcy5lbC5mYWRlKDApLmdldCgndHdlZW4nKS5jaGFpbigoZnVuY3Rpb24oKSB7CisJCQkJaWYgKCF0aGlzLm9wdGlvbnMuaGlkZU92ZXJsYXkpIHsKKwkJCQkJdGhpcy5vdmVybGF5LmRlc3Ryb3koKTsKKwkJCQl9CisJCQkJdGhpcy5lbC5kZXN0cm95KCk7CisJCQl9KS5iaW5kKHRoaXMpKTsKKwkJfQorCQl3aW5kb3cuRmlsZU1hbmFnZXIucHJvdG90eXBlLmRpYWcubG9nKCdyZW1vdmUga2V5IHVwKEVTQykgb24gZGVzdHJveScpOworCQlkb2N1bWVudC5yZW1vdmVFdmVudCgnc2Nyb2xsJywgdGhpcy5ib3VuZC5zY3JvbGwpLnJlbW92ZUV2ZW50KCdyZXNpemUnLCB0aGlzLmJvdW5kLnNjcm9sbCkucmVtb3ZlRXZlbnQoJ2tleXVwJywgdGhpcy5ib3VuZC5rZXllc2MpOworCQl0aGlzLmZpcmVFdmVudCgnY2xvc2UnKTsKKwl9Cit9KTsKKwordGhpcy5PdmVybGF5ID0gbmV3IENsYXNzKHsKKworCWluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKwkJdGhpcy5lbCA9IG5ldyBFbGVtZW50KCdkaXYnLCBPYmplY3QuYXBwZW5kKHsKKwkJCSdjbGFzcyc6ICdmaWxlbWFuYWdlci1vdmVybGF5JworCQl9LCBvcHRpb25zKSkuaW5qZWN0KGRvY3VtZW50LmJvZHkpOworCX0sCisKKwlzaG93OiBmdW5jdGlvbigpIHsKKwkJdGhpcy5vYmplY3RzID0gJCQoJ29iamVjdCwgc2VsZWN0LCBlbWJlZCcpLmZpbHRlcihmdW5jdGlvbihlbCkgeworCQkJaWYgKGVsLmlkID09PSAnU3dpZmZGaWxlTWFuYWdlclVwbG9hZCcgfHwgZWwuc3R5bGUudmlzaWJpbGl0eSA9PT0gJ2hpZGRlbicpIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQllbHNlIHsKKwkJCQllbC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0pOworCisJCXRoaXMucmVzaXplKCk7CisKKwkJdGhpcy5lbC5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpOworCQl0aGlzLmVsLmZhZGUoJ2hpZGUnKS5mYWRlKDAuNSk7CisKKwkJd2luZG93LmFkZEV2ZW50KCdyZXNpemUnLCB0aGlzLnJlc2l6ZS5iaW5kKHRoaXMpKTsKKworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJaGlkZTogZnVuY3Rpb24oKSB7CisJCWlmICghQnJvd3Nlci5pZSkgeworCQkJdGhpcy5lbC5mYWRlKDApLmdldCgndHdlZW4nKS5jaGFpbigoZnVuY3Rpb24oKSB7CisJCQkJdGhpcy5yZXZlcnRPYmplY3RzKCk7CisJCQkJdGhpcy5lbC5zZXRTdHlsZSgnZGlzcGxheScsICdub25lJyk7CisJCQl9KS5iaW5kKHRoaXMpKTsKKwkJfSBlbHNlIHsKKwkJCXRoaXMucmV2ZXJ0T2JqZWN0cygpOworCQkJdGhpcy5lbC5zZXRTdHlsZSgnZGlzcGxheScsICdub25lJyk7CisJCX0KKworCQl3aW5kb3cucmVtb3ZlRXZlbnQoJ3Jlc2l6ZScsIHRoaXMucmVzaXplKTsKKworCQlyZXR1cm4gdGhpczsKKwl9LAorCisJcmVzaXplOiBmdW5jdGlvbigpIHsKKwkJaWYgKCF0aGlzLmVsKSB7CisJCQl0aGlzLmRlc3Ryb3koKTsKKwkJfQorCQllbHNlIHsKKwkJCWRvY3VtZW50LmlkKHRoaXMuZWwpLnNldFN0eWxlcyh7IC8vIElFNyB0aGlua3MgdGhpcy5lbCBpcyBubyBsb25nZXIgYSBtb290b29scyBvYmplY3QsIF5zaHJ1Z14KKwkJCQl3aWR0aDogZG9jdW1lbnQuZ2V0U2Nyb2xsV2lkdGgoKSwKKwkJCQloZWlnaHQ6IGRvY3VtZW50LmdldFNjcm9sbEhlaWdodCgpCisJCQl9KTsKKwkJfQorCX0sCisKKwlkZXN0cm95OiBmdW5jdGlvbigpIHsKKwkJdGhpcy5yZXZlcnRPYmplY3RzKCkuZWwuZGVzdHJveSgpOworCX0sCisKKwlyZXZlcnRPYmplY3RzOiBmdW5jdGlvbigpIHsKKwkJaWYgKHRoaXMub2JqZWN0cyAmJiB0aGlzLm9iamVjdHMubGVuZ3RoKSB7CisJCQl0aGlzLm9iamVjdHMuZWFjaChmdW5jdGlvbihlbCkgeworCQkJCQllbC5zZXRTdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7CisJCQl9KTsKKwkJfQorCisJCXJldHVybiB0aGlzOworCX0KK30pOworCit9KSgpOwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL1NvdXJjZS9HYWxsZXJ5LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL1NvdXJjZS9HYWxsZXJ5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4ZjZiYjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvU291cmNlL0dhbGxlcnkuanMKQEAgLTAsMCArMSw3OTQgQEAKKy8qCistLS0KKworZGVzY3JpcHRpb246IEFkZHMgZnVuY3Rpb25hbGl0eSB0byBjcmVhdGUgYSBnYWxsZXJ5IG91dCBvZiBhIGxpc3Qgb2YgaW1hZ2VzCisKK2F1dGhvcnM6IENocmlzdG9waCBQb2plciAoQGNwb2plcikKKworbGljZW5zZTogTUlULXN0eWxlIGxpY2Vuc2UuCisKK3JlcXVpcmVzOgorICBjb3JlLzEuNC41OiAnKicKKyAgbW9yZS8xLjQuMC4xOiBbU29ydGFibGVzXQorCitwcm92aWRlczogRmlsZU1hbmFnZXIuR2FsbGVyeQorCisuLi4KKyovCisKKyhmdW5jdGlvbigpIHsKKworRmlsZU1hbmFnZXIuR2FsbGVyeSA9IG5ldyBDbGFzcyh7CisKKwlFeHRlbmRzOiBGaWxlTWFuYWdlciwKKworCW9wdGlvbnM6CisJeworCQljbG9zZUNhcHRpb25FZGl0b3JPbk1vdXNlT3V0OiB0cnVlICAvLyBUUlVFOiB3aWxsIHNhdmUgJiBjbG9zZSBjYXB0aW9uIGVkaXRvciBwb3B1cCBkaWFsb2cgd2hlbiB5b3UgbW92ZSB0aGUgbW91c2Ugb3V0IHRoZXJlCisJfSwKKworCWhvb2tzOiB7CisJCWZpbGw6IHsKKwkJCXBvcHVsYXRlOiBmdW5jdGlvbigpIHsKKwkJCQkvLyBub3cgd2UgaGF2ZSBhIHZhbGlkICd0aGlzLnJvb3QnIGFuZCB3ZSBuZWVkIHRoYXQgdG8gcHJlcHJvY2VzcyB0aGUgcGF0aHMgc3BlY2lmaWVkIG9uIHBvcHVsYXRlKCkuIFNvIHdlIGhhdmUgYSBnbyEKKwkJCQl0aGlzLnN0YXJ0UG9wdWxhdGluZ1RoZUdhbGxlcnkoKTsKKwkJCX0KKwkJfQorCX0sCisKKwlpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKQorCXsKKwkJdGhpcy5vZmZzZXRzID0ge3k6IC03Mn07CisJCXRoaXMuaW1nQ29udGFpbmVyU2l6ZSA9IHsgeDogNzUsIHk6IDU2IH07CisJCXRoaXMuY2FwdGlvbkltZ0NvbnRhaW5lclNpemUgPSB7IHg6IDI1MCwgeTogMjUwIH07CisJCXRoaXMuaXNTb3J0aW5nID0gZmFsc2U7CisJCXRoaXMucG9wdWxhdGVfcXVldWUgPSBbXTsKKworCQkvLyBtYWtlIHN1cmUgb3VyICdjb21wbGV0ZScgZXZlbnQgZG9lcyBOT1QgY2xhc2ggd2l0aCB0aGUgYmFzZSBjbGFzcyBldmVudCBieSBzaW1wbHkgbmV2ZXIgYWxsb3dpbmcgaXQ6IHlvdSBDQU5OT1QgaGF2ZSBvcHRpb25zLnNlbGVjdGFibGUgYW5kIGdhbGxlcnkgbW9kZSBhdCB0aGUgc2FtZSB0aW1lIQorCQkvLyAoSWYgeW91IGRvLCB0aGUgY2FsbGVyIHdpbGwgaGF2ZSBhIGhhcmQgdGltZSBkZXRlY3RpbmcgL3doby8gc2VudCB0aGUgJ2NvbXBsZXRlJyBldmVudDsgdGhlIG9ubHkgd2F5IHdvdWxkIGJlIHRvIGluc3BlY3QgdGhlIGFyZ3VtZW50IGxpc3QgYW5kIGRlZHVjZSB0aGUgJ29yaWdpbicgZnJvbSB0aGVyZS4pCisJCW9wdGlvbnMuc2VsZWN0YWJsZSA9IGZhbHNlOworCisJCXRoaXMucGFyZW50KG9wdGlvbnMpOworCisJCXRoaXMuYWRkRXZlbnRzKHsKKwkJCXNjcm9sbDogZnVuY3Rpb24oZSwgc2VsZikgeworCQkJCXNlbGYuc2hvd19nYWxsZXJ5KCk7CisJCQl9LAorCisJCQlzaG93OiBmdW5jdGlvbihzZWxmKSB7CisJCQkJc2VsZi5nYWxsZXJ5LmVtcHR5KCk7CisJCQkJc2VsZi5maWxlcyA9IHt9OworCisJCQkJc2VsZi5zaG93X2dhbGxlcnkoKTsKKwkJCQlzZWxmLnBvcHVsYXRlKCk7CisJCQl9LAorCisJCQloaWRlOiBmdW5jdGlvbihzZWxmKSB7CisJCQkJaWYgKCFzZWxmLmtlZXBHYWxsZXJ5RGF0YSkgeworCQkJCQlzZWxmLmdhbGxlcnkuZW1wdHkoKTsKKwkJCQkJc2VsZi5maWxlcyA9IHt9OworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc2VsZi5rZWVwR2FsbGVyeURhdGEgPSBmYWxzZTsKKwkJCQl9CisJCQkJc2VsZi5oaWRlQ2xvbmUoKTsKKwkJCQkvLyBzZWxmLndyYXBwZXIuc2V0U3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpOworCQkJfSwKKworCQkJbW9kaWZ5OiBmdW5jdGlvbihmaWxlLCBqc29uLCBtb2RlLCBzZWxmKSB7CisJCQkJLy8gbW9kZSBpcyBvbmUgb2YgKGRlc3Ryb3ksIHJlbmFtZSwgbW92ZSwgY29weSk6IG9ubHkgd2hlbiBtb2RlPWNvcHksIGRvZXMgdGhlIGZpbGUgcmVtYWluIHdoZXJlIGl0IHdhcyBiZWZvcmUhCisJCQkJaWYgKG1vZGUgIT09ICdjb3B5JykKKwkJCQl7CisJCQkJCXNlbGYuZXJhc2VQaWN0dXJlKGZpbGUucGF0aCk7CisJCQkJfQorCQkJfQorCQl9KTsKKworCQl0aGlzLmFkZE1lbnVCdXR0b24oJ3NlcmlhbGl6ZScpOworCQl0aGlzLmdhbGxlcnlDb250YWluZXIgPSBuZXcgRWxlbWVudCgnZGl2JywgeworCQkJJ2NsYXNzJzogJ2ZpbGVtYW5hZ2VyLWdhbGxlcnknLAorCQkJc3R5bGVzOgorCQkJeworCQkJCSd6LWluZGV4JzogdGhpcy5vcHRpb25zLnpJbmRleCAtIDEwCisJCQl9CisJCX0pLmluamVjdCh0aGlzLmNvbnRhaW5lcik7CisJCXRoaXMuZ2FsbGVyeSA9IG5ldyBFbGVtZW50KCd1bCcpLmluamVjdCh0aGlzLmdhbGxlcnlDb250YWluZXIpOworCisJCXZhciB0aW1lciA9IG51bGw7CisJCXZhciBzZWxmID0gdGhpczsKKworCQl0aGlzLmlucHV0ID0gbmV3IEVsZW1lbnQoJ3RleHRhcmVhJywge25hbWU6ICdpbWdDYXB0aW9uJ30pOworCisJCXZhciBpbWdkaXYgPSBuZXcgRWxlbWVudCgnZGl2JywgeydjbGFzcyc6ICdpbWcnfSk7CisJCXRoaXMud3JhcHBlciA9IG5ldyBFbGVtZW50KCdkaXYnLCB7CisJCQknY2xhc3MnOiAnZmlsZW1hbmFnZXItd3JhcHBlcicsCisJCQlzdHlsZXM6CisJCQl7CisJCQkJJ3otaW5kZXgnOiB0aGlzLm9wdGlvbnMuekluZGV4ICsgNzUwLAorCQkJCSdvcGFjaXR5JzogMCwKKwkJCQknZGlzcGxheSc6ICdub25lJworCQkJfSwKKwkJCXR3ZWVuOiB7ZHVyYXRpb246ICdzaG9ydCd9CisJCX0pLmFkb3B0KAorCQkJbmV3IEVsZW1lbnQoJ3NwYW4nLCB7dGV4dDogdGhpcy5sYW5ndWFnZS5nYWxsZXJ5LnRleHR9KSwKKwkJCXRoaXMuaW5wdXQsCisJCQlpbWdkaXYsCisJCQluZXcgRWxlbWVudCgnYnV0dG9uJywge3RleHQ6IHRoaXMubGFuZ3VhZ2UuZ2FsbGVyeS5zYXZlfSkuYWRkRXZlbnQoJ2NsaWNrJywgZnVuY3Rpb24oZSkgeworCQkJCXNlbGYucmVtb3ZlQ2xvbmUoZSwgdGhpcyk7CisJCQl9KQorCQkpOworCisJCS8vIHN0b3AgZmlsZW1hbmFnZXIgd2luZG93IGV2ZW50cyB3aGVuIHlvdSBoaXQgZW50ZXIKKwkJdGhpcy5nYWxsZXJ5X2tleWJvYXJkX2hhbmRsZXIgPSAoZnVuY3Rpb24oZSkKKwkJeworCQkJdGhpcy5kaWFnLmxvZygnZ2FsbGVyeSBLRVlCT0FSRCBoYW5kbGVyOiBrZXkgcHJlc3M6ICcsIGUpOworCisJCQlpZiAodGhpcy5kaWFsb2dPcGVuKSByZXR1cm47CisKKwkJCS8vIGRvbid0IHByb3BhZ2F0ZSBhbnkga2V5Ym9hcmQgY29kZSB0byB0aGUgZmlsZW1hbmFnZXIga2V5Ym9hcmQgaGFuZGxlciAoZS5nLiBUQUIpCisJCQllLnN0b3BQcm9wYWdhdGlvbigpOworCisJCQlpZiAoZS5rZXkgPT0gJ2VudGVyJykKKwkJCXsKKwkJCQkvLyBkZWFjdGl2YXRlZCB0byBhbGxvdyBtdWx0aXBsZSBsaW5lIGNhcHRpb24uIFxuIHdpbGwgbGF0ZXIgYmUgdHJhbnNmb3JtZWQgaW50byA8YnI+CisJCQkJLy9zZWxmLnJlbW92ZUNsb25lKGUsIHRoaXMpOworCQkJfQorCQl9KS5iaW5kKHRoaXMpOworCisJCWlmICgoQnJvd3Nlci5FbmdpbmUgJiYgKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQgfHwgQnJvd3Nlci5FbmdpbmUud2Via2l0KSkgfHwgKEJyb3dzZXIuaWUgfHwgQnJvd3Nlci5jaHJvbWUgfHwgQnJvd3Nlci5zYWZhcmkpKQorCQl7CisJCQl0aGlzLmlucHV0LmFkZEV2ZW50KCdrZXlkb3duJywgdGhpcy5nYWxsZXJ5X2tleWJvYXJkX2hhbmRsZXIpOworCQkJLy8gYWxzbyBtYWtlIHN1cmUga2V5Ym9hcmQgbmF2aWdhdGlvbiBhY3R1YWxseSB3b3JrcyBpbiB0aGUgY2FwdGlvbiBlZGl0b3IgcGFuZTogY2F0Y2ggRU5URVIgb24gYnV0dG9uLCBldGMuIGZyb20gYnViYmxpbmcgdXAgdG8gdGhlIGZpbGVtYW5hZ2VyIGhhbmRsZXI6CisJCQl0aGlzLndyYXBwZXIuYWRkRXZlbnQoJ2tleWRvd24nLCB0aGlzLmdhbGxlcnlfa2V5Ym9hcmRfaGFuZGxlcik7CisJCX0KKwkJZWxzZQorCQl7CisJCQl0aGlzLmlucHV0LmFkZEV2ZW50KCdrZXlwcmVzcycsIHRoaXMuZ2FsbGVyeV9rZXlib2FyZF9oYW5kbGVyKTsKKwkJCS8vIGFsc28gbWFrZSBzdXJlIGtleWJvYXJkIG5hdmlnYXRpb24gYWN0dWFsbHkgd29ya3MgaW4gdGhlIGNhcHRpb24gZWRpdG9yIHBhbmU6IGNhdGNoIEVOVEVSIG9uIGJ1dHRvbiwgZXRjLiBmcm9tIGJ1YmJsaW5nIHVwIHRvIHRoZSBmaWxlbWFuYWdlciBoYW5kbGVyOgorCQkJdGhpcy53cmFwcGVyLmFkZEV2ZW50KCdrZXlwcmVzcycsIHRoaXMuZ2FsbGVyeV9rZXlib2FyZF9oYW5kbGVyKTsKKwkJfQorCQkvLyBhbHNvIG1ha2Ugc3VyZSBrZXlib2FyZCBuYXZpZ2F0aW9uIGFjdHVhbGx5IHdvcmtzIGluIHRoZSBjYXB0aW9uIGVkaXRvciBwYW5lOiBjYXRjaCBFTlRFUiBvbiBidXR0b24sIGV0Yy4gZnJvbSBidWJibGluZyB1cCB0byB0aGUgZmlsZW1hbmFnZXIgaGFuZGxlcjoKKwkJdGhpcy53cmFwcGVyLmFkZEV2ZW50KCdrZXl1cCcsIHRoaXMuZ2FsbGVyeV9rZXlib2FyZF9oYW5kbGVyKTsKKworCQl0aGlzLndyYXBwZXIuaW5qZWN0KGRvY3VtZW50LmJvZHkpOworCisJCXZhciB3cmFwcGVyX3BvcyA9IHRoaXMud3JhcHBlci5nZXRDb29yZGluYXRlcygpOworCQl2YXIgaW1nZGl2X3BvcyA9IGltZ2Rpdi5nZXRDb29yZGluYXRlcygpOworCQl0aGlzLmNhcHRpb25EaWFsb2dPZmZzZXRzID0geworCQkJeDogTWF0aC5yb3VuZCh3cmFwcGVyX3Bvcy5sZWZ0IC0gaW1nZGl2X3Bvcy5sZWZ0IC0gKGltZ2Rpdl9wb3Mud2lkdGggLSB0aGlzLmNhcHRpb25JbWdDb250YWluZXJTaXplLngpIC8gMiksCisJCQl5OiBNYXRoLnJvdW5kKHdyYXBwZXJfcG9zLnRvcCAtIGltZ2Rpdl9wb3MudG9wIC0gKGltZ2Rpdl9wb3MuaGVpZ2h0IC0gdGhpcy5jYXB0aW9uSW1nQ29udGFpbmVyU2l6ZS55KSAvIDIpLAorCQkJaDogd3JhcHBlcl9wb3MuaGVpZ2h0LAorCQkJdzogd3JhcHBlcl9wb3Mud2lkdGgKKwkJfTsKKwkJdGhpcy5kcm9wcGFibGVzLnB1c2godGhpcy5nYWxsZXJ5KTsKKworCQl0aGlzLmtlZXBHYWxsZXJ5RGF0YSA9IGZhbHNlOworCQl0aGlzLmZpbGVzID0ge307CisJCXRoaXMuYW5pbWF0aW9uID0ge307CisKKwkJdGhpcy5ob3d0byA9IG5ldyBFbGVtZW50KCdkaXYnLCB7CisJCQknY2xhc3MnOiAnaG93dG8nLAorCQkJc3R5bGVzOgorCQkJeworCQkJCSd6LWluZGV4JzogdGhpcy5vcHRpb25zLnpJbmRleCArIDE1CisJCQl9LAorCQkJdGV4dDogdGhpcy5sYW5ndWFnZS5nYWxsZXJ5LmRyYWcKKwkJfSkuaW5qZWN0KHRoaXMuZ2FsbGVyeUNvbnRhaW5lcik7CisJCXRoaXMuc3dpdGNoQnV0dG9uKCk7CisKKwkJLy8gaW52b2tlIHRoZSBwYXJlbnQgbWV0aG9kIGRpcmVjdGx5CisJCXRoaXMuaW5pdGlhbFNob3dCYXNlKCk7CisKKwkJLy8gYWRkIENBUFRJT04gT1ZFUkxBWQorCQl0aGlzLmNhcHRpb25PdmVybGF5ID0gbmV3IE92ZXJsYXkoeworCQkJJ2NsYXNzJzogJ2ZpbGVtYW5hZ2VyLW92ZXJsYXkgZmlsZW1hbmFnZXItb3ZlcmxheS1kaWFsb2cgZmlsZW1hbmFnZXItb3ZlcmxheS1jYXB0aW9uJywKKwkJCWV2ZW50czogeworCQkJCWNsaWNrOiAoZnVuY3Rpb24oKSB7CisJCQkJCXRoaXMucmVtb3ZlQ2xvbmUoKTsKKwkJCQkJdGhpcy5jYXB0aW9uT3ZlcmxheS5oaWRlKCk7CisJCQkJfSkuYmluZCh0aGlzKQorCQkJfSwKKwkJCXN0eWxlczogeworCQkJCSd6LWluZGV4JzogdGhpcy5vcHRpb25zLnpJbmRleCArIDExCisJCQl9CisJCX0pOworCisKKwkJLy8gLT4gY3JlYXRlIFNPUlRBQkxFIGxpc3QKKwkJdGhpcy5zb3J0YWJsZSA9IG5ldyBTb3J0YWJsZXModGhpcy5nYWxsZXJ5LCB7CisJCQljbG9uZTogZmFsc2UsCisJCQkvL3JldmVydDogdHJ1ZSwKKwkJCS8vb3BhY2l0eTogMSwKKwkJCW9uU3RhcnQ6IChmdW5jdGlvbigpIHsKKwkJCQl0aGlzLmlzU29ydGluZyA9IHRydWU7CisJCQl9KS5iaW5kKHRoaXMpLAorCQkJb25Tb3J0OiAoZnVuY3Rpb24obGkpIHsKKwkJCQluZXdPcmRlciA9IHRoaXMuc29ydGFibGUuc2VyaWFsaXplKChmdW5jdGlvbihlbGVtZW50LCBpbmRleCkgeworCQkJCQlyZXR1cm4gdGhpcy5maWxlc1tlbGVtZW50LnJldHJpZXZlKCdpbWFnZU5hbWUnKV07CisJCQkJfSkuYmluZCh0aGlzKSk7CisKKwkJCQkvLyBjcmVhdGUgbmV3IG9yZGVyIG9mIGltYWdlcworCQkJCXRoaXMuZmlsZXMgPSB7fTsKKwkJCQluZXdPcmRlci5lYWNoKGZ1bmN0aW9uKGZpbGUpIHsKKwkJCQkJaWYgKGZpbGUpIHsKKwkJCQkJCXRoaXMuZmlsZXNbZmlsZS5sZWdhbF9wYXRoXSA9IGZpbGU7CisJCQkJCX0KKwkJCQl9LCB0aGlzKTsKKwkJCX0pLmJpbmQodGhpcykKKwkJfSk7CisJfSwKKworCS8vIG92ZXJyaWRlIHRoZSBwYXJlbnQncyBpbml0aWFsU2hvdyBtZXRob2Q6IHdlIGRvIG5vdCB3YW50IHRvIGp1bXAgdG8gdGhlIGpzR0VULXN0b3JlZCBwb3NpdGlvbiBhZ2FpbiEKKwlpbml0aWFsU2hvdzogZnVuY3Rpb24oKSB7CisJfSwKKworCXNob3dfZ2FsbGVyeTogZnVuY3Rpb24oKQorCXsKKwkJdGhpcy5nYWxsZXJ5Q29udGFpbmVyLnNldFN0eWxlcyh7CisJCQlvcGFjaXR5OiAwLAorCQkJZGlzcGxheTogJ2Jsb2NrJworCQl9KTsKKworCQl0aGlzLmZpbGVtYW5hZ2VyLnNldFN0eWxlcyh7CisJCQl0b3A6ICcxMCUnLAorCQkJaGVpZ2h0OiAnNjAlJworCQl9KTsKKworCQl0aGlzLmZpdFNpemVzKCk7CisKKwkJdmFyIHNpemUgPSB0aGlzLmZpbGVtYW5hZ2VyLmdldFNpemUoKTsKKwkJdmFyIHBvcyA9IHRoaXMuZmlsZW1hbmFnZXIuZ2V0UG9zaXRpb24oKTsKKworCQkvLyBkZXRlcm1pbmUgaG93IG1hbnkgaW1hZ2VzIHdlIGNhbiBzaG93IG5leHQgdG8gb25lIGFub3RoZXI6CisJCXZhciBnYWxXaWR0aENvbXAgPSAyOyAgICAvLyAycHggbm90IGFjY291bnRlZCBmb3IgaW4gdGhlIFdpZHRoIGNhbGN1bGF0aW9uOyB3aXRob3V0IHRoZXNlIHRoZSB3aWR0aCBzbG93bHkgZ3Jvd3MgaW5zdGVhZCBvZiAnanVtcCcgdG8gZml0IG9uZSBtb3JlL2xlc3MgaW1hZ2UgaG9yaXpvbnRhbGx5CisJCXZhciBpbWdNYXJnaW5XaWR0aCA9IDQ7ICAvLyA0cHggdW5hY2NvdW50ZWQgZm9yIGluIHRoZSBlbGVtZW50IHdpZHRoCisJCXZhciByYWRpaUNvcnIgPSA0MDsgICAgICAvLyBjb3JyZWN0aW9uIGZvciB0aGUgcmFkaWkgaW4gdGhlIEZpbGVNYW5hZ2VyIGNvbnRhaW5lcjogbG9va3MgYmV0dGVyIHRoYXQgd2F5OyBtdXN0IGF0IGxlYXN0IGJlIDIwCisJCXZhciBpbWdXaWR0aCA9IDg0OyAgICAgICAvLyBkZXJpdmVkIGZyb20gY3VycmVudCBDU1M7IGJhZCBmb3JtIHRvIGRvIGl0IHRoaXMgd2F5LCBidXQgdGhpcyBpcyBhIGdvb2QgZ3Vlc3Mgd2hlbiB0aGVyZSdzIG5vIGltYWdlIGluIHRoZXJlIHlldC4KKwkJdmFyIHNjcm9sbGJhckNvcnIgPSAyMDsgIC8vIGNvcnJlY3Rpb24gZm9yIG9wdGlvbmFsIFkgc2Nyb2xsYmFyIHdoZW4gdGhlIG51bWJlciBvZiBpbWFnZXMgZG9lc24ndCBmaXQgaW4gdHdvIHJvd3MgYW55bW9yZS4KKworCQl2YXIgaW1ncyA9IHRoaXMuZ2FsbGVyeUNvbnRhaW5lci5nZXRFbGVtZW50cygnbGknKTsKKwkJaWYgKGltZ3MgJiYgaW1nc1swXSkKKwkJeworCQkJLy8gd2hlbiB3ZSBIQVZFIGltYWdlcywgZGVyaXZlIHRoZSB3aWR0aCBmcm9tIG9uZSBvZiB0aG9zZSEKKwkJCWltZ1dpZHRoID0gaW1nc1swXS5nZXRXaWR0aCgpICsgaW1nTWFyZ2luV2lkdGg7CisJCX0KKwkJdmFyIGdhbFdpZHRoID0gdGhpcy5nYWxsZXJ5Q29udGFpbmVyLmdldFdpZHRoKCk7CisJCXZhciBnX3JlbSA9IChnYWxXaWR0aCAtIHNjcm9sbGJhckNvcnIpICUgaW1nV2lkdGg7CisJCXZhciBpbWdfY250ID0gTWF0aC5mbG9vcigoc2l6ZS54IC0gZ19yZW0gLSBzY3JvbGxiYXJDb3JyIC0gcmFkaWlDb3JyKSAvIGltZ1dpZHRoKTsKKwkJaWYgKGltZ19jbnQgPCAzKSBpbWdfY250ID0gMzsKKwkJdmFyIGd3ID0gaW1nX2NudCAqIGltZ1dpZHRoICsgZ19yZW0gKyBzY3JvbGxiYXJDb3JyOworCisJCXRoaXMuZ2FsbGVyeUNvbnRhaW5lci5zZXRTdHlsZXMoeworCQkJdG9wOiBwb3MueSArIHNpemUueSAtIDEsCisJCQlsZWZ0OiBwb3MueCArIChzaXplLnggLSBndykgLyAyLAorCQkJd2lkdGg6IGd3IC0gMiwKKwkJCW9wYWNpdHk6IDEKKwkJfSk7CisKKwkJdGhpcy5oaWRlQ2xvbmUoKTsKKwkJLy8gdGhpcy53cmFwcGVyLnNldFN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTsKKwl9LAorCisJLy8gb3ZlcnJpZGUgdGhlIHBhcmVudCdzIGFsbG93X0RuRCBtZXRob2Q6IGFsd2F5cyBhbGxvdyBkcmFnIGFuZCBkcm9wIGFzIG90aGVyd2lzZSB3ZSBjYW5ub3QgY29uc3RydWN0IG91ciBnYWxsZXJ5IQorCWFsbG93X0RuRDogZnVuY3Rpb24oaiwgcGFnZXNpemUpIHsKKwkJcmV0dXJuIHRydWU7CisJfSwKKworCXNob3dfY2FwdGlvbl9lZGl0b3I6IGZ1bmN0aW9uKGltZ19lbCwgbGlfd3JhcHBlciwgZmlsZSkKKwl7CisJCXZhciBzZWxmID0gdGhpczsKKworCQkvLyAtPiBhZGQgb3ZlcmxheQorCQkkJCgnZmlsZW1hbmFnZXItb3ZlcmxheS1jYXB0aW9uJykuYWRkRXZlbnQoJ2NsaWNrJywgZnVuY3Rpb24oZSkgeworCQkJdGhpcy5yZW1vdmVDbG9uZShudWxsLGxpX3dyYXBwZXIpOworCQl9LmJpbmQodGhpcykpOworCQl0aGlzLmNhcHRpb25PdmVybGF5LnNob3coKTsKKworCQl2YXIgbmFtZSA9IGZpbGUucGF0aDsKKworCQl2YXIgcG9zID0gaW1nX2VsLmdldENvb3JkaW5hdGVzKCk7CisJCXZhciBvbWwgPSBpbWdfZWwuZ2V0U3R5bGUoJ21hcmdpbi1sZWZ0JykudG9JbnQoKTsKKwkJdmFyIG9tdCA9IGltZ19lbC5nZXRTdHlsZSgnbWFyZ2luLXRvcCcpLnRvSW50KCk7CisJCXBvcy5sZWZ0IC09IG9tbDsKKwkJcG9zLnRvcCAtPSBvbXQ7CisKKwkJdmFyIHZwID0gd2luZG93LmdldFNpemUoKTsKKworCQl0aGlzLmhpZGVDbG9uZSgpOworCisJCXZhciBwaWMgPSBmaWxlLnRodW1iMjUwOworCQl2YXIgdyA9IGZpbGUudGh1bWIyNTBfd2lkdGg7CisJCXZhciBoID0gZmlsZS50aHVtYjI1MF9oZWlnaHQ7CisKKwkJaWYgKCFwaWMpCisJCXsKKwkJCXBpYyA9IGZpbGUuaWNvbjQ4OworCQkJdyA9IDQ4OworCQkJaCA9IDQ4OworCQl9CisKKwkJLy8gbm93IGNhbGN1bGF0ZSB0aGUgc2NhbGVkIGltYWdlIGRpbWVuc2lvbnMgZm9yIHRoaXMgb25lOgorCQl2YXIgY3cgPSB0aGlzLmNhcHRpb25JbWdDb250YWluZXJTaXplLng7CisJCXZhciBjaCA9IHRoaXMuY2FwdGlvbkltZ0NvbnRhaW5lclNpemUueTsKKwkJdmFyIHJlZHV4OworCQlpZiAodyA+IGN3KQorCQl7CisJCQlyZWR1eCA9IGN3IC8gdzsKKwkJCXcgKj0gcmVkdXg7CisJCQloICo9IHJlZHV4OworCQl9CisJCWlmIChoID4gY2gpCisJCXsKKwkJCXJlZHV4ID0gY2ggLyBoOworCQkJdyAqPSByZWR1eDsKKwkJCWggKj0gcmVkdXg7CisJCX0KKwkJdyA9IE1hdGgucm91bmQodyk7CisJCWggPSBNYXRoLnJvdW5kKGgpOworCQl2YXIgbWwsIG1rLCBtdCwgbWI7CisJCW1sID0gTWF0aC5yb3VuZCgoY3cgLSB3KSAvIDIpOworCQltciA9IGN3IC0gbWwgLSB3OworCQltdCA9IE1hdGgucm91bmQoKGNoIC0gaCkgLyAyKTsKKwkJbWIgPSBjaCAtIG10IC0gaDsKKworCQl2YXIgbmwsIG50OworCQkvL25sID0gTWF0aC5yb3VuZChwb3MubGVmdCAtICh3IC0gcG9zLndpZHRoKSAvIDIpOworCQkvL250ID0gcG9zLnRvcCAtIChoIC0gcG9zLmhlaWdodCk7CisJCW5sID0gTWF0aC5yb3VuZCgodnAueCAtIHRoaXMuY2FwdGlvbkRpYWxvZ09mZnNldHMudykgLyAyIC0gdGhpcy5jYXB0aW9uRGlhbG9nT2Zmc2V0cy54KTsKKwkJbnQgPSBNYXRoLnJvdW5kKCh2cC55IC0gdGhpcy5jYXB0aW9uRGlhbG9nT2Zmc2V0cy5oKSAvIDIgLSB0aGlzLmNhcHRpb25EaWFsb2dPZmZzZXRzLnkpOworCisJCXRoaXMuYW5pbWF0aW9uID0geworCQkJZnJvbTogeworCQkJCXdpZHRoOiBwb3Mud2lkdGgsCisJCQkJaGVpZ2h0OiBwb3MuaGVpZ2h0LAorCQkJCWxlZnQ6IHBvcy5sZWZ0LAorCQkJCXRvcDogcG9zLnRvcCwKKwkJCQknbWFyZ2luLWxlZnQnOiBvbWwsCisJCQkJJ21hcmdpbi10b3AnOiBvbXQKKwkJCX0sCisJCQl0bzogeworCQkJCXdpZHRoOiB3LAorCQkJCWhlaWdodDogaCwKKwkJCQlsZWZ0OiBubCwKKwkJCQl0b3A6IG50LAorCQkJCSdtYXJnaW4tbGVmdCc6IG1sLAorCQkJCSdtYXJnaW4tdG9wJzogbXQKKwkJCX0KKwkJfTsKKworCQl0aGlzLmlucHV0LnJlbW92ZUV2ZW50cygnYmx1cicpLmFkZEV2ZW50KCdibHVyJywgZnVuY3Rpb24oKSB7CisJCQlpZiAoIXNlbGYuZmlsZXNbbmFtZV0pCisJCQkJcmV0dXJuOworCQkJc2VsZi5maWxlc1tuYW1lXS5jYXB0aW9uID0gKHRoaXMudmFsdWUgfHwgJycpOworCQl9KTsKKworCQkvLyBjbG9uZSBpbWFnZSBmb3IgY2FwdGlvbiBjb250YWluZXIKKwkJLy9saV93cmFwcGVyLnNldFN0eWxlKCdvcGFjaXR5JywgMCk7CisJCXRoaXMuY2xvbmUgPSBpbWdfZWwuY2xvbmUoKTsKKwkJdGhpcy5jbG9uZS5zdG9yZSgnZmlsZScsIGZpbGUpLnN0b3JlKCdwYXJlbnQnLCBsaV93cmFwcGVyKS5hZGRDbGFzcygnZmlsZW1hbmFnZXItY2xvbmUnKS5zZXQoeworCQkJc3R5bGVzOiB7CisJCQkJcG9zaXRpb246ICdyZWxhdGl2ZScsCisJCQkJd2lkdGg6IHcsCisJCQkJaGVpZ2h0OiBoLAorCQkJCXRvcDogKCgyNjAtIGgpIC8gMikgLSAyLAorCQkJCWxlZnQ6ICgoMjYwLSB3KSAvIDIpIC0gMSwKKwkJCQknei1pbmRleCc6IHRoaXMub3B0aW9ucy56SW5kZXggKyA4MDAKKwkJCX0KKwkJfSkuaW5qZWN0KHNlbGYud3JhcHBlci5nZXRDaGlsZHJlbignZGl2LmltZycpWzBdKTsKKworCQkvLyBibGVuZCBpbiB0aGUgY2FwdGlvbiBjb250YWluZXIKKwkJaWYgKCF0aGlzLmZpbGVzW25hbWVdKQorCQkJcmV0dXJuOworCQl0aGlzLmlucHV0LnNldCgndmFsdWUnLCBzZWxmLmZpbGVzW25hbWVdLmNhcHRpb24gfHwgJycpOworCQl0aGlzLndyYXBwZXIuc2V0U3R5bGVzKHsKKwkJCSdwb3NpdGlvbic6J2ZpeGVkJywKKwkJCSdkaXNwbGF5JzogJ2Jsb2NrJywKKwkJCSdsZWZ0JzogdGhpcy5hbmltYXRpb24udG8ubGVmdCAvKiAtMTIgKi8sCisJCQkndG9wJzogdGhpcy5hbmltYXRpb24udG8udG9wIC0gdGhpcy5jYXB0aW9uRGlhbG9nT2Zmc2V0cy55IC8qIC01MyAqLworCQl9KS5mYWRlKCdoaWRlJykuZmFkZSgxKS5nZXQoJ3R3ZWVuJykuY2hhaW4oKGZ1bmN0aW9uKCkgeworCQkJdGhpcy5pbnB1dC5mb2N1cygpOworCQl9KS5iaW5kKHRoaXMpKTsKKwl9LAorCisJaW1nX2luamVjdG9yOiBmdW5jdGlvbihmaWxlLCBpbWdjb250YWluZXIsIGxpX3dyYXBwZXIpCisJeworCQl2YXIgcGljID0gZmlsZS50aHVtYjI1MDsKKwkJdmFyIHcgPSBmaWxlLnRodW1iMjUwX3dpZHRoOworCQl2YXIgaCA9IGZpbGUudGh1bWIyNTBfaGVpZ2h0OworCisJCWlmICghcGljKQorCQl7CisJCQlwaWMgPSBmaWxlLmljb240ODsKKwkJCXcgPSA0ODsKKwkJCWggPSA0ODsKKwkJfQorCisJCS8vIG5vdyBjYWxjdWxhdGUgdGhlIHNjYWxlZCBpbWFnZSBkaW1lbnNpb25zIGZvciB0aGlzIG9uZToKKwkJdmFyIGN3ID0gdGhpcy5pbWdDb250YWluZXJTaXplLng7CisJCXZhciBjaCA9IHRoaXMuaW1nQ29udGFpbmVyU2l6ZS55OworCQl2YXIgcmVkdXg7CisJCWlmICh3ID4gY3cpCisJCXsKKwkJCXJlZHV4ID0gY3cgLyB3OworCQkJdyAqPSByZWR1eDsKKwkJCWggKj0gcmVkdXg7CisJCX0KKwkJaWYgKGggPiBjaCkKKwkJeworCQkJcmVkdXggPSBjaCAvIGg7CisJCQl3ICo9IHJlZHV4OworCQkJaCAqPSByZWR1eDsKKwkJfQorCQl3ID0gTWF0aC5yb3VuZCh3KTsKKwkJaCA9IE1hdGgucm91bmQoaCk7CisJCXZhciBtbCwgbWssIG10LCBtYjsKKwkJbWwgPSBNYXRoLnJvdW5kKChjdyAtIHcpIC8gMik7CisJCW1yID0gY3cgLSBtbCAtIHc7CisJCW10ID0gTWF0aC5yb3VuZCgoY2ggLSBoKSAvIDIpOworCQltYiA9IGNoIC0gbXQgLSBoOworCisJCXZhciBzZWxmID0gdGhpczsKKwkJdmFyIGltZyA9IEFzc2V0LmltYWdlKHBpYywgeworCQkJc3R5bGVzOiB7CisJCQkJd2lkdGg6IHcsCisJCQkJaGVpZ2h0OiBoLAorCQkJCSdtYXJnaW4tdG9wJzogbXQsCisJCQkJJ21hcmdpbi1ib3R0b20nOiBtYiwKKwkJCQknbWFyZ2luLWxlZnQnOiBtbCwKKwkJCQknbWFyZ2luLXJpZ2h0JzogbXIKKwkJCX0sCisJCQlvbkxvYWQ6IGZ1bmN0aW9uKCkgeworCQkJCXZhciBpbWdfZWwgPSB0aGlzOworCQkJCWxpX3dyYXBwZXIuc2V0U3R5bGUoJ2JhY2tncm91bmQnLCAnbm9uZScpLmFkZEV2ZW50KCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKKwkJCQkJaWYgKGUpIGUuc3RvcCgpOworCQkJCQlpZiAoIXNlbGYuaXNTb3J0aW5nKSB7CisJCQkJCQlzZWxmLnNob3dfY2FwdGlvbl9lZGl0b3IoaW1nX2VsLCBsaV93cmFwcGVyLCBmaWxlKTsKKwkJCQkJfQorCQkJCQlzZWxmLmlzU29ydGluZyA9IGZhbHNlOworCQkJCX0pOworCQkJfSwKKwkJCW9uRXJyb3I6IGZ1bmN0aW9uKCkgeworCQkJCXNlbGYuZGlhZy5sb2coJ2ltYWdlIGFzc2V0OiBlcnJvciEnKTsKKwkJCQl2YXIgaWNvbnBhdGggPSBzZWxmLmFzc2V0QmFzZVBhdGggKyAnSW1hZ2VzL0ljb25zL0xhcmdlL2RlZmF1bHQtZXJyb3IucG5nJzsKKwkJCQl0aGlzLnNyYyA9IGljb25wYXRoOworCQkJfSwKKwkJCW9uQWJvcnQ6IGZ1bmN0aW9uKCkgeworCQkJCXNlbGYuZGlhZy5sb2coJ2ltYWdlIGFzc2V0OiBBQk9SVCEnKTsKKwkJCQl2YXIgaWNvbnBhdGggPSBzZWxmLmFzc2V0QmFzZVBhdGggKyAnSW1hZ2VzL0ljb25zL0xhcmdlL2RlZmF1bHQtZXJyb3IucG5nJzsKKwkJCQl0aGlzLnNyYyA9IGljb25wYXRoOworCQkJfQorCQl9KTsKKworCQlpbWcuaW5qZWN0KGltZ2NvbnRhaW5lcik7CisJfSwKKworCW9uRHJhZ0NvbXBsZXRlOiBmdW5jdGlvbihlbCwgZHJvcHBhYmxlLCBjYXB0aW9uKSB7CisKKwkJaWYgKHR5cGVvZiBjYXB0aW9uID09PSAndW5kZWZpbmVkJykgeworCQkJY2FwdGlvbiA9ICcnOworCQl9CisKKwkJdGhpcy5pbWFnZWFkZC5mYWRlKDApOworCisJCWlmICh0aGlzLmhvd3RvKSB7CisJCQl0aGlzLmhvd3RvLmRlc3Ryb3koKTsKKwkJCXRoaXMuaG93dG8gPSBudWxsOworCQl9CisKKwkJaWYgKCFkcm9wcGFibGUgfHwgZHJvcHBhYmxlICE9IHRoaXMuZ2FsbGVyeSkKKwkJCXJldHVybiBmYWxzZTsKKworCQl2YXIgZmlsZTsKKwkJaWYgKHR5cGVvZiBlbCA9PT0gJ3N0cmluZycpCisJCXsKKwkJCXZhciBwYXJ0ID0gZWwuc3BsaXQoJy8nKTsKKwkJCWZpbGUgPSB7CisJCQkJbmFtZTogcGFydC5wb3AoKSwKKwkJCQlwYXRoOiB0aGlzLm5vcm1hbGl6ZShlbCksCisJCQkJbWltZTogJ3Vua25vd24vdW5rbm93bicsCisJCQkJdGh1bWJzX2RlZmVycmVkOiB0cnVlCisJCQl9OworCQl9CisJCWVsc2UKKwkJeworCQkJZWwuc2V0U3R5bGVzKHtsZWZ0OiAnJywgdG9wOiAnJ30pOworCQkJZmlsZSA9IGVsLnJldHJpZXZlKCdmaWxlJyk7CisJCX0KKworCQl2YXIgbmFtZSA9IGZpbGUucGF0aDsKKworCQkvLyB3aGVuIHRoZSBpdGVtIGFscmVhZHkgZXhpc3RzIGluIHRoZSBnYWxsZXJ5LCBkbyBub3QgYWRkIGl0IGFnYWluOgorCQlpZiAodGhpcy5maWxlc1tuYW1lXSkKKwkJCXJldHVybiB0cnVlOworCisJCS8vIHN0b3JlICYgZGlzcGxheSBpdGVtIGluIGdhbGxlcnk6CisJCXZhciBzZWxmID0gdGhpczsKKwkJdmFyIGRlc3Ryb3lJY29uID0gQXNzZXQuaW1hZ2UodGhpcy5hc3NldEJhc2VQYXRoICsgJ0ltYWdlcy9kZXN0cm95LnBuZycpLnNldCh7CisJCQknY2xhc3MnOiAnZmlsZW1hbmFnZXItcmVtb3ZlJywKKwkJCXRpdGxlOiB0aGlzLmxhbmd1YWdlLmdhbGxlcnkucmVtb3ZlLAorCQkJZXZlbnRzOiB7CisJCQkJY2xpY2s6IGZ1bmN0aW9uKGUpIHsKKwkJCQkJaWYoZSkgZS5zdG9wKCk7CisJCQkJCXNlbGYuZXJhc2VQaWN0dXJlKG5hbWUpOworCQkJCX0KKwkJCX0KKwkJfSk7CisJCS8vIGhpZGUgb24gc3RhcnQKKwkJZGVzdHJveUljb24uc2V0U3R5bGUoJ29wYWNpdHknLDApOworCisJCS8qKgorCQkqIGFzICdpbWdjb250YWluZXIuZ2V0U2l6ZSgpIHdvbid0IGRlbGl2ZXIgdGhlIGRpbWVuc2lvbnMgYXMgc2V0IGluIHRoZSBDU1MsIHdlIHR1cm4gaXQgdGhlIG90aGVyIHdheSBhcm91bmQ6CisJCSogd2Ugc2V0IHRoZSB3L2ggb2YgdGhlIGltYWdlIGNvbnRhaW5lciBoZXJlIGV4cGxpY2l0bHk7IHRoZSBDU1MgY2FuIGJlIHVzZWQgZm9yIG90aGVyIGJpdHMgb2Ygc3R5bGluZy4KKwkJKi8KKwkJdmFyIGltZ2NvbnRhaW5lciA9IG5ldyBFbGVtZW50KCdkaXYnLCB7CisJCQknY2xhc3MnOiAnZ2FsbGVyeS1pbWFnZScsCisJCQkndGl0bGUnOiBmaWxlLm5hbWUsCisJCQlzdHlsZXM6IHsKKwkJCQl3aWR0aDogdGhpcy5pbWdDb250YWluZXJTaXplLngsCisJCQkJaGVpZ2h0OiB0aGlzLmltZ0NvbnRhaW5lclNpemUueQorCQkJfQorCQl9KTsKKwkJdGhpcy50aXBzLmF0dGFjaChpbWdjb250YWluZXIpOworCisJCS8vIFNUT1JFIHRoZSBJTUFHRSBQQVRIIGluIHRoZSBsaSBGT1IgdGhlIFNPUlRBQkxFCisJCXZhciBsaSA9IG5ldyBFbGVtZW50KCdsaScpLnN0b3JlKCdpbWFnZU5hbWUnLCBuYW1lKS5hZG9wdCgKKwkJCWltZ2NvbnRhaW5lciwKKwkJCWRlc3Ryb3lJY29uCisJCSkuaW5qZWN0KHRoaXMuZ2FsbGVyeSk7CisKKwkJdGhpcy5maWxlc1tuYW1lXSA9IHsKKwkJCWxlZ2FsX3BhdGg6IG5hbWUsCisJCQljYXB0aW9uOiBjYXB0aW9uLAorCQkJZmlsZTogZmlsZSwKKwkJCWVsZW1lbnQ6IGxpCisJCX07CisKKwkJdGhpcy5zaG93RnVuY3Rpb25zKGRlc3Ryb3lJY29uLGxpLDEpOworCQl0aGlzLnRpcHMuYXR0YWNoKGRlc3Ryb3lJY29uKTsKKwkJdGhpcy5zd2l0Y2hCdXR0b24oKTsKKworCQkvLyBXaGVuIHRoZSBmaWxlIGluZm8gaXMgbGFja2luZyB0aHVtYm5haWwgaW5mbywgZmV0Y2ggaXQgYnkgZmlyaW5nIGEgJ2RldGFpbCcgcmVxdWVzdCBhbmQgdGFraW5nIGl0IGZyb20gdGhlcmUuCisJCS8vIEFsc28gc2VuZCBvdXIgZmxhdm91ciBvZiB0aGUgJ2RldGFpbCcgcmVxdWVzdCB3aGVuIHRoZSB0aHVtYm5haWwgaXMgeWV0IHRvIGJlIGdlbmVyYXRlZC4KKwkJaWYgKGZpbGUudGh1bWJzX2RlZmVycmVkKQorCQl7CisJCQkvLyByZXF1ZXN0IGZ1bGwgZmlsZSBpbmZvIGZvciB0aGlzIG9uZSEgUExVUyBkaXJlY3QtYWNjZXNzIHRodW1ibmFpbHMhCisKKwkJCS8vIGRvIE5PVCBzZXQgdGhpcy5SZXF1ZXN0IGFzIHRoaXMgaXMgYSBwYXJhbGxlbCByZXF1ZXN0OyBtdXRpcGxlIG9uZXMgbWF5IGJlIGZpcmVkIHdoZW4gb25EcmFnQ29tcGxldGUgaXMsIGZvciBpbnN0YW5jZSwgaW52b2tlZCBmcm9tIHRoZSBhcnJheS1sb29wIGluc2lkZSBwb3B1bGF0ZSgpCisKKwkJCXZhciB0eF9jZmcgPSB0aGlzLm9wdGlvbnMubWtTZXJ2ZXJSZXF1ZXN0VVJMKHRoaXMsICdkZXRhaWwnLCB7CisJCQkJCQkJZGlyZWN0b3J5OiB0aGlzLmRpcm5hbWUoZmlsZS5wYXRoKSwKKwkJCQkJCQlmaWxlOiBmaWxlLm5hbWUsCisJCQkJCQkJZmlsdGVyOiB0aGlzLm9wdGlvbnMuZmlsdGVyLAorCQkJCQkJCW1vZGU6ICdkaXJlY3QnICsgdGhpcy5vcHRpb25zLmRldGFpbEluZm9Nb2RlICAgICAgICAgICAvLyBwcm92aWRlIGRpcmVjdCBsaW5rcyB0byB0aGUgdGh1bWJuYWlsIGZpbGVzCisJCQkJCQl9KTsKKworCQkJdmFyIHJlcSA9IG5ldyBGaWxlTWFuYWdlci5SZXF1ZXN0KHsKKwkJCQl1cmw6IHR4X2NmZy51cmwsCisJCQkJZGF0YTogdHhfY2ZnLmRhdGEsCisJCQkJb25SZXF1ZXN0OiBmdW5jdGlvbigpIHt9LAorCQkJCW9uU3VjY2VzczogKGZ1bmN0aW9uKGopCisJCQkJeworCQkJCQlpZiAoIXRoaXMuZmlsZXNbbmFtZV0pCisJCQkJCQlyZXR1cm47CisKKwkJCQkJaWYgKCFqIHx8ICFqLnN0YXR1cykgeworCQkJCQkJdmFyIG1zZyA9ICgnJyArIGouZXJyb3IpLnN1YnN0aXR1dGUodGhpcy5sYW5ndWFnZSwgL1xcP1wkXHsoW157fV0rKVx9L2cpOworCisJCQkJCQl0aGlzLmZpbGVzW25hbWVdLmNhcHRpb24gPSBtc2c7CisJCQkJCQlyZXR1cm47CisJCQkJCX0KKworCQkJCQkvLyB0aGUgZGVzaXJlZCBiZWhhdmlvdXIgYW55d2hlcmUgaXMgTk9UIGlkZW50aWNhbCB0byB0aGF0IHdoZW4gaGFuZGxpbmcgdGhlIEZpbGVNYW5hZ2VyICdkZXRhaWxzJyByZXF1ZXN0L2V2ZW50IQorCQkJCQl0aGlzLmZpcmVFdmVudCgnZ2FsbGVyeURldGFpbHMnLCBbaiwgdGhpc10pOworCisJCQkJCS8vIFdlIGFsc28gd2FudCB0byBob2xkIG9udG8gdGhlIGRhdGEgc28gd2UgY2FuIGFjY2VzcyBpdCBsYXRlciBvbiwKKwkJCQkJLy8gZS5nLiB3aGVuIHJldHVybmluZyB0aGUgZ2FsbGVyeSBjb2xsZWN0aW9uIHRvIHRoZSB1c2VyLgorCisJCQkJCS8vIG5vdyBtaXggd2l0aCB0aGUgcHJldmlvdXNseSBleGlzdGluZyAnZmlsZScgaW5mbzoKKwkJCQkJZmlsZSA9IE9iamVjdC5tZXJnZShmaWxlLCBqKTsKKworCQkJCQkvLyByZW1vdmUgdW53YW50ZWQgSlNPTiBlbGVtZW50czoKKwkJCQkJZGVsZXRlIGZpbGUudGh1bWJzX2RlZmVycmVkOworCQkJCQlkZWxldGUgZmlsZS5zdGF0dXM7CisJCQkJCWRlbGV0ZSBmaWxlLmVycm9yOworCQkJCQlkZWxldGUgZmlsZS5jb250ZW50OworCisJCQkJCWlmIChmaWxlLmVsZW1lbnQpCisJCQkJCXsKKwkJCQkJCWZpbGUuZWxlbWVudC5zdG9yZSgnZmlsZScsIGZpbGUpOworCQkJCQl9CisKKwkJCQkJLy8gYW5kIHVwZGF0ZSB0aGUgZ2FsbGVyeSBwYW5lOgorCQkJCQlsaS5zdG9yZSgnZmlsZScsIGZpbGUpOworCisJCQkJCS8vdGhpcy5vbkRyYWdDb21wbGV0ZShsaSwgZHJvcHBhYmxlKTsKKwkJCQkJdGhpcy5maWxlc1tuYW1lXS5maWxlID0gZmlsZTsKKworCQkJCQl0aGlzLmltZ19pbmplY3RvcihmaWxlLCBpbWdjb250YWluZXIsIGxpKTsKKworCQkJCX0pLmJpbmQodGhpcyksCisJCQkJb25FcnJvcjogKGZ1bmN0aW9uKHRleHQsIGVycm9yKSB7CisJCQkJfSkuYmluZCh0aGlzKSwKKwkJCQlvbkZhaWx1cmU6IChmdW5jdGlvbih4bWxIdHRwUmVxdWVzdCkgeworCQkJCX0pLmJpbmQodGhpcykKKwkJCX0sIHRoaXMpOworCisJCQl0aGlzLlJlcXVlc3RRdWV1ZS5hZGRSZXF1ZXN0KCdwb3B1bGF0ZTonICsgU3RyaW5nLnVuaXF1ZUlEKCksIHJlcSk7CisJCQlyZXEuc2VuZCgpOworCisJCQkvLyB3aGlsZSB0aGUgJ2RldGFpbHMnIHJlcXVlc3QgaXMgc2VudCBvZmYsIGtlZXAgYSAnbG9hZGVyJyBhbmltYXRpb24gaW4gdGhlIHNwb3Qgd2hlcmUgdGhlIHRodW1ibmFpbC9pbWFnZSBzaG91bGQgZW5kIHVwIG9uY2Ugd2UndmUgZ290IHRoYXQgaW5mbyBmcm9tIHRoZSAnZGV0YWlscycgcmVxdWVzdAorCQl9CisJCWVsc2UKKwkJeworCQkJLy8gd2UgYWxyZWFkeSBoYXZlIGFsbCByZXF1aXJlZCBpbmZvcm1hdGlvbi4gR28gc2hvdyB0aGUgaW1hZ2UgaW4gdGhlIGdhbGxlcnkgcGFuZSEKKwkJCXRoaXMuaW1nX2luamVjdG9yKGZpbGUsIGltZ2NvbnRhaW5lciwgbGkpOworCQl9CisKKwkJLy8gLT4gYWRkIHRoaXMgbGlzdCBpdGVtIHRvIHRoZSBTT1JUQUJMRQorCQl0aGlzLnNvcnRhYmxlLmFkZEl0ZW1zKGxpKTsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9LAorCisJcmVtb3ZlQ2xvbmU6IGZ1bmN0aW9uKGUsIHRhcmdldCkgeworCQlpZiAoZSkgZS5zdG9wKCk7CisKKwkJLy8gcmVtb3ZlIHRoZSBvdmVybGF5CisJCSQkKCdmaWxlbWFuYWdlci1vdmVybGF5LWNhcHRpb24nKS5yZW1vdmVFdmVudHMoJ2NsaWNrJyk7CisJCXRoaXMuY2FwdGlvbk92ZXJsYXkuaGlkZSgpOworCisJCWlmICghdGhpcy5jbG9uZSB8fCAoZSAmJiBlLnJlbGF0ZWRUYXJnZXQgJiYgKFt0aGlzLmNsb25lLCB0aGlzLndyYXBwZXJdLmNvbnRhaW5zKGUucmVsYXRlZFRhcmdldCkgfHwgKGUgJiYgdGhpcy53cmFwcGVyLmNvbnRhaW5zKGUucmVsYXRlZFRhcmdldCkgJiYgZS5yZWxhdGVkVGFyZ2V0ICE9IHRoaXMud3JhcHBlcikpKSkKKwkJCXJldHVybjsKKwkJaWYgKHRoaXMuY2xvbmUuZ2V0KCdtb3JwaCcpLnRpbWVyKQorCQkJcmV0dXJuOworCisJCXZhciBmaWxlID0gdGhpcy5jbG9uZS5yZXRyaWV2ZSgnZmlsZScpOworCQlpZiAoIWZpbGUpCisJCQlyZXR1cm47CisKKwkJdmFyIG5hbWUgPSBmaWxlLnBhdGg7CisKKwkJaWYgKCF0aGlzLmZpbGVzW25hbWVdKQorCQkJcmV0dXJuOworCisJCXRoaXMuZmlsZXNbbmFtZV0uY2FwdGlvbiA9ICh0aGlzLmlucHV0LnZhbHVlIHx8ICcnKTsKKworCQlzZWxmID0gdGhpczsKKworCQl0aGlzLndyYXBwZXIuZmFkZSgwKS5nZXQoJ3R3ZWVuJykuY2hhaW4oZnVuY3Rpb24oKSB7CisJCQl0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpOworCQkJc2VsZi5jbG9uZS5kZXN0cm95KCk7CisJCX0pOworCX0sCisKKwloaWRlQ2xvbmU6IGZ1bmN0aW9uKCkgeworCQlpZiAoIXRoaXMuY2xvbmUpCisJCQlyZXR1cm47CisKKwkJdGhpcy5jbG9uZS5nZXQoJ21vcnBoJykuY2FuY2VsKCk7CisJCXZhciBwYXJlbnQgPSB0aGlzLmNsb25lLnJldHJpZXZlKCdwYXJlbnQnKTsKKwkJaWYgKHBhcmVudCkgeworCQkJLy9wYXJlbnQuc2V0U3R5bGUoJ29wYWNpdHknLCAxKTsKKwkJfQorCQl0aGlzLmNsb25lLmRlc3Ryb3koKTsKKwkJdGhpcy53cmFwcGVyLnNldFN0eWxlcyh7CisJCQlvcGFjaXR5OiAwLAorCQkJJ2Rpc3BsYXknOiAnbm9uZScKKwkJfSk7CisJfSwKKworCWVyYXNlUGljdHVyZTogZnVuY3Rpb24obmFtZSkgeworCQlpZiAodGhpcy5maWxlc1tuYW1lXSkKKwkJeworCQkJdGhpcy50aXBzLmhpZGUoKTsKKworCQkJdmFyIHNlbGYgPSB0aGlzOworCQkJdGhpcy5maWxlc1tuYW1lXS5lbGVtZW50LnNldCgndHdlZW4nLCB7ZHVyYXRpb246ICdzaG9ydCd9KS5yZW1vdmVFdmVudHMoJ2NsaWNrJykuZmFkZSgwKS5nZXQoJ3R3ZWVuJykuY2hhaW4oZnVuY3Rpb24oKSB7CisJCQkJdGhpcy5lbGVtZW50LmRlc3Ryb3koKTsKKwkJCQlzZWxmLnN3aXRjaEJ1dHRvbigpOworCQkJCWRlbGV0ZSBzZWxmLmZpbGVzW25hbWVdOworCQkJfSk7CisJCX0KKwl9LAorCisJc3dpdGNoQnV0dG9uOiBmdW5jdGlvbigpIHsKKwkJaWYgKHR5cGVvZiB0aGlzLmdhbGxlcnkgIT0gJ3VuZGVmaW5lZCcpIHsKKwkJCXZhciBjaGsgPSAhIXRoaXMuZ2FsbGVyeS5nZXRDaGlsZHJlbigpLmxlbmd0aDsKKwkJCXRoaXMubWVudS5nZXRFbGVtZW50KCdidXR0b24uZmlsZW1hbmFnZXItc2VyaWFsaXplJykuc2V0KCdkaXNhYmxlZCcsICFjaGspWyhjaGsgPyAncmVtb3ZlJyA6ICdhZGQnKSArICdDbGFzcyddKCdkaXNhYmxlZCcpOworCQl9CisJfSwKKworCXBvcHVsYXRlOiBmdW5jdGlvbihkYXRhLCBwYXRoX2lzX3VybGVuY29kZWQgLyogZGVmYXVsdCA9IFRSVUUgKi8pCisJeworCQl0aGlzLmRpYWcubG9nKCdHQUxMRVJZLnBvcHVsYXRlOiAnLCBkYXRhLCAnLCBpc191cmxlbmNvZGVkOiAnLCBwYXRoX2lzX3VybGVuY29kZWQpOworCisJCWlmICh0eXBlb2YgcGF0aF9pc191cmxlbmNvZGVkID09ICd1bmRlZmluZWQnIHx8IHBhdGhfaXNfdXJsZW5jb2RlZCA9PT0gbnVsbCkKKwkJCXBhdGhfaXNfdXJsZW5jb2RlZCA9IHRydWU7ICAgIC8vIHNldCBkZWZhdWx0IHRvIFRSVUUKKwkJZWxzZQorCQkJcGF0aF9pc191cmxlbmNvZGVkID0gISFwYXRoX2lzX3VybGVuY29kZWQ7CisKKwkJLy8KKwkJLy8gV0FSTklORzogdGhlc2UgaXRlbXMgYXJlIGFicy5wYXRoIGVuY29kZWQgYW5kIHdlIHRvIGNvbnZlcnQgdGhlbSB0byAnbGVnYWwgVVJMJyBkaXJlY3Rvcnkgc3BhY2Ugb3IgdGhlIHNlcnZlciB3aWxsIHJlamVjdCB0aGVzZSBvbiBzZWN1cml0eSBncm91bmRzLgorCQkvLyAgICAgICAgICBCdXQgd2UgZG9uJ3Qga25vdyB0aGUgJ2xlZ2FsIFVSTCByb290JyBwYXRoIGFzIHRoYXQgaXMgYSBzZXJ2ZXItc2lkZSBzZXR0aW5nLCBzbyB3ZSBNVVNUIGRlbGF5IHRoZSBwb3B1bGF0aW9uIG9mIHRoZSBnYWxsZXJ5IHVudGlsIG91ciBmaXJzdAorCQkvLyAgICAgICAgICByZXF1ZXN0IGhhcyBhcnJpdmVkIHdpdGggdGhpcyBkZXNwZXJhdGVseSBuZWVkZWQgaXRlbS4KKwkJLy8gICAgICAgICAgV2Ugd2FpdCBmb3IgdGhlIGRpcnNjYW4gKCd2aWV3JyByZXF1ZXN0KSB0byBjb21wbGV0ZTsgYWN0dWFsbHkgd2Ugd2FpdCB1bnRpbCB0aGUgZmlsbCgpIGhhcyBmaW5pc2hlZCBhcyBieSB0aGF0IHRpbWUgd2UnbGwgYmUgc3VyZQorCQkvLyAgICAgICAgICB0byBoYXZlIGEgdmFsaWQgdGhpcy5yb290IChvciBhIGdyYW5kaW9zZSBzZXJ2ZXIgY29tbSBmYWlsdXJlISkKKwkJLy8gICAgICAgICAgVW50aWwgdGhhdCB0aW1lLCB3ZSBwdXNoIGFsbCBpdGVtcyB0byBwb3B1bGF0ZSB0aGUgZ2FsbGVyeSB3aXRoIG9uIHRoZSBwb3B1bGF0ZSBzdGFjay4KKworCQlPYmplY3QuZWFjaChkYXRhIHx8IHt9LCBmdW5jdGlvbih2LCBpKSB7CisJCQl0aGlzLmRpYWcubG9nKCdHQUxMRVJZLnBvcHVsYXRlIHB1c2g6IGluZGV4ID0gJywgaSwgJywgdmFsdWUgPSAnLCB2LCAnLCBlbmM6ICcsICgxICogcGF0aF9pc191cmxlbmNvZGVkKSk7CisJCQlpZiAocGF0aF9pc191cmxlbmNvZGVkKQorCQkJeworCQkJCWkgPSB0aGlzLnVuZXNjYXBlUkZDMzk4NihpKTsKKwkJCX0KKwkJCXRoaXMucG9wdWxhdGVfcXVldWUucHVzaCh7CisJCQkJCXBhdGg6IGksCisJCQkJCWNhcHRpb246IHYKKwkJCQl9KTsKKwkJfSwgdGhpcyk7CisJfSwKKworCXN0YXJ0UG9wdWxhdGluZ1RoZUdhbGxlcnk6IGZ1bmN0aW9uKCkKKwl7CisJCWlmICghdGhpcy5yb290KQorCQl7CisJCQl0aGlzLmRpYWcubG9nKCcjIyMgRkFUQUwgZXJyb3IgaW4gc3RhcnRQb3B1bGF0aW5nVGhlR2FsbGVyeSgpOiBubyB2YWxpZCAucm9vdCBwYXRoIScpOworCQkJcmV0dXJuOworCQl9CisKKwkJdmFyIGNvdW50ID0gdGhpcy5wb3B1bGF0ZV9xdWV1ZS5sZW5ndGg7CisJCWlmIChjb3VudCkKKwkJeworCQkJLy8gd2UndmUgZ290IHdvcmsgdG8gZG8sIGZvbGtzIQorCQkJdmFyIGk7CisJCQl2YXIgYWJzX3Jvb3QgPSB0aGlzLm5vcm1hbGl6ZSgnLycgKyB0aGlzLnJvb3QpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKwkJCXsKKwkJCQkvLyBMSUZPIHF1ZXVlOgorCQkJCXZhciBpdGVtID0gdGhpcy5wb3B1bGF0ZV9xdWV1ZS5zaGlmdCgpOworCQkJCXZhciBwYXRoID0gaXRlbS5wYXRoOworCisJCQkJLy8gY29kZWQgc28gdGhhdCB3ZSBzdXBwb3J0ICdsZWdhbCBVUkwgc3BhY2UnIGl0ZW1zIGFuZCAnYWJzb2x1dGUgVVJMIHBhdGgnIGl0ZW1zIGF0IHRoZSBzYW1lIHRpbWU6CisJCQkJLy8gd2hlbiBwYXRocyBzdGFydCB3aXRoIHRoZSByb290IGRpcmVjdG9yeSwgd2UnbGwgc3RyaXAgdGhhdCBvZmYgdG8gbWFrZSB0aGVtICdsZWdhbCBVUkwgc3BhY2UnIGNvbXBsaWFudCBmaWxlc3BlY3MuCisJCQkJaWYgKHBhdGguaW5kZXhPZihhYnNfcm9vdCkgPT09IDApCisJCQkJeworCQkJCQlwYXRoID0gcGF0aC5zdWJzdHIodGhpcy5yb290Lmxlbmd0aCk7CisJCQkJfQorCQkJCWlmIChwYXRoKQorCQkJCXsKKwkJCQkJdGhpcy5vbkRyYWdDb21wbGV0ZShwYXRoLCB0aGlzLmdhbGxlcnksIGl0ZW0uY2FwdGlvbik7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCXRoaXMuZGlhZy5sb2coJyMjIyBnYWxsZXJ5IHBvcHVsYXRlOiBpbnZhbGlkIGlucHV0IChub3QgaW4gbGVnYWwgVVJMIHNwYWNlKTogJywgaXRlbSwgJywgcm9vdDogJywgdGhpcy5yb290KTsKKwkJCQl9CisJCQl9CisJCX0KKwl9LAorCisJc2VyaWFsaXplX29uX2NsaWNrOiBmdW5jdGlvbihlKSB7CisJCWlmIChlKSBlLnN0b3AoKTsKKworCQl2YXIgc2VyaWFsaXplZCA9IHt9OworCQl2YXIgbWV0YXMgPSB7fTsKKwkJdmFyIGluZGV4ID0gMDsKKwkJT2JqZWN0LmVhY2godGhpcy5maWxlcyxmdW5jdGlvbihmaWxlKQorCQl7CisJCQl2YXIgcGF0aCA9ICh0aGlzLm9wdGlvbnMuZGVsaXZlclBhdGhBc0xlZ2FsVVJMID8gZmlsZS5maWxlLnBhdGggOiB0aGlzLmVzY2FwZVJGQzM5ODYodGhpcy5ub3JtYWxpemUoJy8nICsgdGhpcy5yb290ICsgZmlsZS5maWxlLnBhdGgpKSk7ICAvLyB0aGUgYWJzb2x1dGUgVVJMIGZvciB0aGUgZ2l2ZW4gZmlsZSwgcmF3VVJMZW5jb2RlZAorCQkJdmFyIGNhcHRpb24gPSAoZmlsZS5jYXB0aW9uIHx8ICcnKTsKKwkJCXNlcmlhbGl6ZWRbcGF0aF0gPSBjYXB0aW9uOworCQkJdmFyIG0gPSBPYmplY3QuY2xvbmUoZmlsZS5maWxlKTsKKwkJCW1bJ29yZGVyX25vJ10gPSBpbmRleCsrOworCQkJbVsnY2FwdGlvbiddID0gY2FwdGlvbjsKKwkJCW1bJ3BhdGhSRkMzOTg2J10gPSBwYXRoOworCQkJbWV0YXNbcGF0aF0gPSBtOworCQl9LCB0aGlzKTsKKwkJdGhpcy5rZWVwR2FsbGVyeURhdGEgPSB0cnVlOworCQl0aGlzLmhpZGUoZSk7CisJCXRoaXMuZmlyZUV2ZW50KCdjb21wbGV0ZScsIFtzZXJpYWxpemVkLCBtZXRhcywgdGhpcy5yb290LCB0aGlzXSk7CisJfQorfSk7CisKK30pKCk7CisKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Tb3VyY2UvTm9GbGFzaC5VcGxvYWRlci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Tb3VyY2UvTm9GbGFzaC5VcGxvYWRlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmY4OTIwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL1NvdXJjZS9Ob0ZsYXNoLlVwbG9hZGVyLmpzCkBAIC0wLDAgKzEsODgwIEBACisvKioKK1VwbG9hZGVyIEltcGxlbWVudGF0aW9uIE5vdCBSZXF1aXJpbmcgRmxhc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFVwbG9hZCBmdW5jdGlvbmFsaXR5IGludG8gdGhlIEZpbGVNYW5hZ2VyIHVzaW5nIAorZWl0aGVyIEhUTUw1IFVwbG9hZHMgdmlhIFhNTEhUVFBSZXF1ZXN0IGlmIHRoZSBicm93c2VyIHN1cHBvcnRzIHRoYXQsIAorb3IgYSBoaWRkZW4gZmlsZSBpbnB1dCBhbmQgc3VibWl0dGluZyB0byBhbiBpZnJhbWUgb3RoZXJ3aXNlLgorCitIVE1MNSBVcGxvYWRzIGNhbiBoYW5kbGUgdXBsb2FkaW5nIG11bHRpcGxlIGZpbGVzIHdpdGggcHJvZ3Jlc3MgaW5kaWNhdGlvbnMuCisKK0ZhbGxiYWNrIHVwbG9hZHMgcHJlc2VudCBhIHN0YW5kYXJkIGZpbGUgZmllbGQgdG8gZmFjaWxpdGF0ZSBwaWNraW5nIGEgc2luZ2xlCitmaWxlIGFuZCBhbiB1cGxvYWQgYnV0dG9uIHRvIHVwbG9hZCBpdCAocG9zdHMgdG8gYSBoaWRkZW4gaWZyYW1lKS4KKworVGVzdGVkIEluCistLS0tLS0tLS0tCisKK1dvcmtpbmcgRnVsbHkgV2l0aCBIVE1MNSBNdWx0aXBsZSBVcGxvYWRzCisKKyAgKiBMaW51eCBDaHJvbWUgNjUuMC4zMzI1LjE4CisgICogTGludXggRmlyZWZveCA1OCAoc2VlIG5vdGUgZm9yIEZpcmVmb3ggdXNlcnMgYmVsb3cpCisgICogTGludXggT3BlcmEgNTAKKyAgKiBMaW51eCBDaHJvbWl1bSA2My4wLjMyMzkuMTMyCisgIAorICAqIFdpbmRvd3MgSUUgMTEKKyAgCisgICogTWFjIE9TWCBTYWZhcmkgOS4xLjEgKDExNjAxLjYuMTcpCisKK1dvcmtpbmcgRmFsbGJhY2sgU2luZ2xlIFVwbG9hZCBBdCBBIFRpbWUKKworICAqIFdpbmRvd3MgSUUgOCAtIEZhbGxzIGJhY2sgdG8gaWZyYW1lIHVwbG9hZAorICAqIFdpbmRvd3MgSUUgOSAtIEZhbGxzIGJhY2sgdG8gaWZyYW1lIHVwbG9hZAorCisKK0ZJUkVGT1ggVVNFUlMgTk9USUNFCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBGaXJlZm94IGZpbGUgc2VsZWN0aW9uIGRpYWxvZyBjYW4gYmUgSE9SUklCTFkgYnJva2VuLCB1bnVzYWJsZSwgdGhpcyBpcyBub3QgCithIGJ1ZyBpbiBNRk0sIGl0J3MgZmlyZWZveC4gIElmIHlvdSBzdGFydCBmaXJlZm94IHdpdGggdGhlIE1PWl9VU0VfWElOUFVUMj0xIAorZW52aXJvbm1lbnQgdmFyaWFibGUsIGl0IGZpeGVzIGl0IQorCitAYXV0aG9yIEphbWVzIFNsZWVtYW4gPGphbWVzQGdvZ28uY28ubno+CitAbGljZW5zZSBNSVQtc3R5bGUgTGljZW5zZQorCisqLworCitGaWxlTWFuYWdlci5pbXBsZW1lbnQoeworCisJb3B0aW9uczogeworCQlyZXNpemVJbWFnZXM6IHRydWUsCisJCXVwbG9hZDogdHJ1ZSwKKwkJdXBsb2FkQXV0aERhdGE6IHt9ICAgICAgICAgICAgIC8vIGRlcHJlY2F0ZWQ7IHVzZSBGaWxlTWFuYWdlci5wcm9wYWdhdGVEYXRhIGluc3RlYWQhCisJfSwKKworCWhvb2tzOiB7CisJCXNob3c6IHsKKwkJCXVwbG9hZDogZnVuY3Rpb24oKSB7CisJCQkJdGhpcy5zdGFydFVwbG9hZCgpOworCQkJfQorCQl9LAorCisJCWNsZWFudXA6IHsKKwkJCXVwbG9hZDogZnVuY3Rpb24oKSB7CisJCQkJdGhpcy5oaWRlVXBsb2FkKCk7CisJCQl9CisJCX0KKwl9LAorCisJb25EaWFsb2dPcGVuV2hlblVwbG9hZDogZnVuY3Rpb24oKSB7CisKKwl9LAorCisJb25EaWFsb2dDbG9zZVdoZW5VcGxvYWQ6IGZ1bmN0aW9uKCkgeworCisJfSwKKworICAvKiogQ3JlYXRlIHRoZSBmaWxlIGlucHV0IGZpZWxkIGFuZCBpbmplY3QgaXQgaW50byB0aGUgZ2l2ZW4gZm9ybSBlbGVtZW50CisgICAqLworICAKKwltYWtlX2ZpbGVfaW5wdXQ6IGZ1bmN0aW9uKGZvcm1fZWwpCisJeworCQl2YXIgZmlsZWlucHV0ID0gKG5ldyBFbGVtZW50KCdpbnB1dCcpKS5zZXQoeworCQkJdHlwZTogJ2ZpbGUnLAorCQkJbmFtZTogJ0ZpbGVkYXRhJywKKwkJCWlkOiAnZmlsZW1hbmFnZXJfdXBsb2FkX0ZpbGVkYXRhJywKKyAgICAgIG11bHRpcGxlOiAnbXVsdGlwbGUnCisJCX0pOworICAgIAorICAgIC8vIGZpbGVpbnB1dC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7CisgICAgCisJCWlmIChmb3JtX2VsLmdldEVsZW1lbnQoJ2lucHV0W3R5cGU9ZmlsZV0nKSkKKwkJeworCQkJZmlsZWlucHV0LnJlcGxhY2VzKGZvcm1fZWwuZ2V0RWxlbWVudCgnaW5wdXRbdHlwZT1maWxlXScpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWZvcm1fZWwuYWRvcHQoZmlsZWlucHV0KTsKKwkJfQorCQlyZXR1cm4gZm9ybV9lbDsKKwl9LAorCisgIC8qKiBDbGVhbnVwIGFmdGVyIG91cnNlbHZlcyB3aGVuIHRoZSBmaWxlbWFuYWdlciB3aW5kb3cgaXMgY2xvc2VkCisgICAqIAorICAgKiAgQFRPRE8gVGhpcyBtYXkgbm90IGJlIGVudGlyZWx5IG5lY2Vzc2FyeSBub3csIGxlYXZpbmcgaXQgYW55d2F5LgorICAgKi8KKyAgCisJaGlkZVVwbG9hZDogZnVuY3Rpb24oKQorCXsKKwkJaWYgKCF0aGlzLm9wdGlvbnMudXBsb2FkIHx8ICF0aGlzLnVwbG9hZCkgcmV0dXJuOworCisJCWlmICh0aGlzLnVwbG9hZC51cGxvYWRCdXR0b24ubGFiZWwpCisJCXsKKwkJCXRoaXMudXBsb2FkLnVwbG9hZEJ1dHRvbi5sYWJlbC5mYWRlKDApLmdldCgndHdlZW4nKS5jaGFpbihmdW5jdGlvbigpIHsKKwkJCQl0aGlzLmVsZW1lbnQuZGlzcG9zZSgpLmRlc3Ryb3koKTsKKwkJCX0pOworCQkJdGhpcy51cGxvYWQudXBsb2FkQnV0dG9uLmxhYmVsID0gbnVsbDsKKwkJfQorCQlpZiAodGhpcy51cGxvYWQudXBsb2FkQnV0dG9uKQorCQl7CisJCQl0aGlzLnVwbG9hZC51cGxvYWRCdXR0b24uZmFkZSgwKS5nZXQoJ3R3ZWVuJykuY2hhaW4oZnVuY3Rpb24oKSB7CisJCQkJdGhpcy5lbGVtZW50LmRpc3Bvc2UoKS5kZXN0cm95KCk7CisJCQl9KTsKKwkJCXRoaXMudXBsb2FkLnVwbG9hZEJ1dHRvbiA9IG51bGw7CisJCX0KKwkJaWYgKHRoaXMudXBsb2FkLmZvcm0pCisJCXsKKwkJCXRoaXMudXBsb2FkLmlucHV0cyA9IG51bGw7CisKKwkJCXRoaXMudXBsb2FkLmZvcm0uZGlzcG9zZSgpLmRlc3Ryb3koKTsKKwkJCXRoaXMudXBsb2FkLmZvcm0gPSBudWxsOworCQl9CisJCXRoaXMubWVudS5zZXRTdHlsZSgnaGVpZ2h0JywgJycpOworCisJCWlmICh0aGlzLnVwbG9hZC5yZXNpemVyKQorCQl7CisJCQl0aGlzLnVwbG9hZC5yZXNpemVyLmRpc3Bvc2UoKS5kZXN0cm95KCk7CisJCQl0aGlzLnVwbG9hZC5yZXNpemVyID0gbnVsbDsKKwkJfQorCQkKKyAgICAvLyBkaXNjYXJkIG9sZCBpZnJhbWUsIGlmIGl0IGV4aXN0czoKKyAgICBpZiAodGhpcy51cGxvYWQuZHVtbXlmcmFtZSkKKyAgICB7CisgICAgICAvLyByZW1vdmUgZnJvbSB0aGUgbWVudSAoZGlzcG9zZSkgYW5kIHRyYXNoIGl0IChkZXN0cm95KQorICAgICAgdGhpcy51cGxvYWQuZHVtbXlmcmFtZS5kaXNwb3NlKCkuZGVzdHJveSgpOworICAgICAgdGhpcy51cGxvYWQuZHVtbXlmcmFtZSA9IG51bGw7CisgICAgfQorCX0sCisKKyAgLyoqIFNldHVwIG91dCB1cGxvYWQgaW50ZXJmYWNlLgorICAgKiAKKyAgICogIENyZWF0ZXMgdGhlIHVwbG9hZCBidXR0b24sIHRoZSBjb250YWluZXIgZm9yIHRoZSBmb3JtIGZpZWxkLCBjYWxscyBvdXQgdG8gY3JlYXRlIHRoZSBmb3JtIGZpZWxkCisgICAqICB0aGUgYXJlYSBmb3IgdGhlIHVwbG9hZCBsaXN0LCBhbmQgdGhlIHJlc2l6aW5nIGNoZWNrYm94LgorICAgKgorICAgKi8KKyAgCisJc3RhcnRVcGxvYWQ6IGZ1bmN0aW9uKCkKKwl7CisJCWlmICghdGhpcy5vcHRpb25zLnVwbG9hZCkgeworCQkJcmV0dXJuOworCQl9CisKKwkJdmFyIHNlbGYgPSB0aGlzOworCisJCXRoaXMudXBsb2FkID0geworCQkJaW5wdXRzOiB7fSwKKwkJCXJlc2l6ZXI6IG51bGwsCisgICAgICBkdW1teWZyYW1lOiBudWxsLAorICAgICAgZHVtbXlmcmFtZV9hY3RpdmU6IGZhbHNlLCAgICAgLy8gcHJldmVudCBwcmVtYXR1cmUgZmlyaW5nIG9mIHRoZSBsb2FkIGV2ZW50IChoZWxsbywgTVNJRSEpIHRvIGNhdXNlIHVzIHNlcmlvdXMgdHJvdWJsZSBpbiB0aGVyZQorICAgICAgY2FuX3N1cHBvcnRfeGhyOiAgIHR5cGVvZiAoKG5ldyBFbGVtZW50KCdpbnB1dCcpKS5zZXQoeworICAgICAgICB0eXBlOiAnZmlsZScsCisgICAgICAgIG5hbWU6ICdGaWxlZGF0YScsCisgICAgICAgIG11bHRpcGxlOiAnbXVsdGlwbGUnCisgICAgICB9KSkuZmlsZXMgPT0gJ3VuZGVmaW5lZCcgPyBmYWxzZSA6IHRydWUsCisgICAgICAKKwkJCWZvcm06IChuZXcgRWxlbWVudCgnZm9ybScpKQorCQkJCS8vIC5zZXQoJ2FjdGlvbicsIHR4X2NmZy51cmwpCisJCQkJLnNldCgnbWV0aG9kJywgJ3Bvc3QnKQorCQkJCS5zZXQoJ2VuY3R5cGUnLCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpCisgICAgICAgIC5zZXQoJ3RhcmdldCcsICdkdW1teWZyYW1lJykKKwkJCQkuc2V0U3R5bGVzKHsKKwkJCQkJJ2Zsb2F0JzogJ2xlZnQnLAorCQkJCQkncGFkZGluZy1sZWZ0JzogJzNweCcsCisJCQkJCSdkaXNwbGF5JzogJ2Jsb2NrJworCQkJfSksCisKKwkJCXVwbG9hZEJ1dHRvbjogdGhpcy5hZGRNZW51QnV0dG9uKCd1cGxvYWQnKS5pbmplY3QodGhpcy5tZW51LCAnYm90dG9tJykuYWRkRXZlbnRzKHsJCQkJCisJCQkJbW91c2VlbnRlcjogZnVuY3Rpb24oKSB7CisJCQkJCXRoaXMuYWRkQ2xhc3MoJ2hvdmVyJyk7CisJCQkJfSwKKwkJCQltb3VzZWxlYXZlOiBmdW5jdGlvbigpIHsKKwkJCQkJdGhpcy5yZW1vdmVDbGFzcygnaG92ZXInKTsKKwkJCQkJdGhpcy5ibHVyKCk7CisJCQkJfSwKKwkJCQltb3VzZWRvd246IGZ1bmN0aW9uKCkgeworCQkJCQl0aGlzLmZvY3VzKCk7CisJCQkJfQorCQkJfSksCisKKyAgICAgIGxpc3Q6IG5ldyBFbGVtZW50KCd1bCcsIHsnY2xhc3MnOiAnZmlsZW1hbmFnZXItdXBsb2FkZXItbGlzdCd9KSwKKyAgICAgIHVwbG9hZGVyOiBuZXcgRWxlbWVudCgnZGl2Jywge29wYWNpdHk6IDAsICdjbGFzcyc6ICdmaWxlbWFuYWdlci11cGxvYWRlci1hcmVhJ30pLmFkb3B0KAorICAgICAgICBuZXcgRWxlbWVudCgnaDInLCB7dGV4dDogdGhpcy5sYW5ndWFnZS51cGxvYWR9KSwKKyAgICAgICAgbmV3IEVsZW1lbnQoJ2RpdicsIHsnY2xhc3MnOiAnZmlsZW1hbmFnZXItdXBsb2FkZXInfSkKKyAgICAgICkKKwkJfTsKKyAgICB0aGlzLnVwbG9hZC51cGxvYWRlci5nZXRFbGVtZW50KCdkaXYnKS5hZG9wdCh0aGlzLnVwbG9hZC5saXN0KTsKKworICAgIGlmKHRoaXMudXBsb2FkLmNhbl9zdXBwb3J0X3hocikKKyAgICB7CisgICAgICB0aGlzLnVwbG9hZC5mb3JtLnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpOworICAgICAgdGhpcy51cGxvYWQudXBsb2FkQnV0dG9uLmFkZEV2ZW50KCdjbGljaycsICBmdW5jdGlvbihlKSB7CisgICAgICAgICAgZS5zdG9wKCk7CisKKyAgICAgICAgICBzZWxmLnVwbG9hZC5mb3JtLmdldEVsZW1lbnQoJ2lucHV0W3R5cGU9ZmlsZV0nKS5yZW1vdmVFdmVudHMoJ2NoYW5nZScpOworICAgICAgICAgIHNlbGYudXBsb2FkLmZvcm0uZ2V0RWxlbWVudCgnaW5wdXRbdHlwZT1maWxlXScpLmFkZEV2ZW50KCdjaGFuZ2UnLCBzZWxmLmRvVXBsb2FkLmJpbmQoc2VsZikpOworICAgICAgICAgIAorICAgICAgICAgIHNlbGYudXBsb2FkLmZvcm0uZ2V0RWxlbWVudCgnaW5wdXRbdHlwZT1maWxlXScpLmNsaWNrKCk7CisgICAgICAgICAgCisgICAgICB9KTsgCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB0aGlzLnVwbG9hZC51cGxvYWRCdXR0b24uYWRkRXZlbnQoJ2NsaWNrJywgIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICBlLnN0b3AoKQorICAgICAgICAgIHNlbGYuZG9VcGxvYWRGYWxsYmFjaygpOworICAgICAgfSk7IAorICAgIH0KKyAgICAKKwkJaWYgKHRoaXMub3B0aW9ucy5yZXNpemVJbWFnZXMpCisJCXsKKwkJCXRoaXMudXBsb2FkLnJlc2l6ZXIgPSBuZXcgRWxlbWVudCgnZGl2JywgeydjbGFzcyc6ICdjaGVja2JveCd9KTsKKwkJCXZhciBjaGVjayA9IChmdW5jdGlvbigpCisJCQl7CisJCQkJdGhpcy50b2dnbGVDbGFzcygnY2hlY2tib3hDaGVja2VkJyk7CisJCQl9KS5iaW5kKHRoaXMudXBsb2FkLnJlc2l6ZXIpOworCQkJY2hlY2soKTsKKwkJCXRoaXMudXBsb2FkLnVwbG9hZEJ1dHRvbi5sYWJlbCA9IG5ldyBFbGVtZW50KCdsYWJlbCcsIHsgJ2NsYXNzJzogJ2ZpbGVtYW5hZ2VyLXJlc2l6ZScgfSkuYWRvcHQoCisJCQkJdGhpcy51cGxvYWQucmVzaXplciwKKwkJCQluZXcgRWxlbWVudCgnc3BhbicsIHt0ZXh0OiB0aGlzLmxhbmd1YWdlLnJlc2l6ZUltYWdlc30pCisJCQkpLmFkZEV2ZW50KCdjbGljaycsIGNoZWNrKS5pbmplY3QodGhpcy5tZW51KTsKKwkJfQorCisJCXRoaXMubWFrZV9maWxlX2lucHV0KHNlbGYudXBsb2FkLmZvcm0pOworCisJCXNlbGYudXBsb2FkLmZvcm0uaW5qZWN0KHRoaXMubWVudSwgJ3RvcCcpOworCQkvL3RoaXMubWVudS5zZXRTdHlsZSgnaGVpZ2h0JywgJzYwcHgnKTsKKworICB9LAorCisgIAorICAvKiogQ2hhbmdlIGhhbmRsZXIgZm9yIHRoZSBmb3JtIGZpZWxkLCBhY3R1YWxseSBkbyB0aGUgdXBsb2Fkcy4KKyAgICogCisgICAqICBOb3RlIHRoYXQgaWYgeW91IGRvbid0IHNlbGVjdCBhIGRpZmZlcmVudCBmaWxlIGluIHRoZSBmb3JtIGZpZWxkLCBubyBjaGFuZ2UsIHNvIG5vIHJlLXVwbG9hZAorICAgKiAgdW5sZXNzIHlvdSBhY3R1YWxseSBwaWNrIGEgZGlmZmVyZW50IGZpbGUgKGFzIHdlbGwgb3IgaW5zdGVhZCkuCisgICAqIAorICAgKi8KKyAgCisgIGRvVXBsb2FkOiBmdW5jdGlvbigpCisgIHsKKyAgICBpZih0aGlzLnVwbG9hZC5mb3JtLmdldEVsZW1lbnQoJ2lucHV0W3R5cGU9ZmlsZV0nKS5maWxlcy5sZW5ndGggPT0gMCkgcmV0dXJuOworCisgICAgLy8gTm90aWNlIGhlcmUgdGhhdCBwcm9wYWdhdGVEYXRhIGlzIG5vdCBwYXNzZWQgaW50byBta1NlcnZlclJlcXVlc3RVUkwKKyAgICAvLyAgIHRoaXMgaXMgaG93IHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0gd29ya3MgdG9vIHNvIGl0IGNhbid0IHJlYWxseSBiZSBjaGFuZ2VkCisgICAgLy8gICBiZWNhdXNlIG1rU2VydmVyUmVxdWVzdFVSTCBpcyBwYXNzZWQgaW50byBGaWxlTWFuYWdlci5SZXF1ZXN0IG5vcm1hbGx5CisgICAgLy8gICBhbmQgdGhlIHByb3BhZ2F0ZURhdGEgaXMgYWRkZWQgdGhlcmUuCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgdmFyIHR4X2NmZyA9IHRoaXMub3B0aW9ucy5ta1NlcnZlclJlcXVlc3RVUkwodGhpcywgJ3VwbG9hZCcsIE9iamVjdC5tZXJnZSh7fSwKKyAgICAgICAgLyp0aGlzLm9wdGlvbnMucHJvcGFnYXRlRGF0YSwgKi8KKyAgICAgICAgKHRoaXMub3B0aW9ucy51cGxvYWRBdXRoRGF0YSB8fCB7fSksIHsKKyAgICAgICAgICBkaXJlY3Rvcnk6ICh0aGlzLkN1cnJlbnREaXIgPyB0aGlzLkN1cnJlbnREaXIucGF0aCA6ICcvJyksCisgICAgICAgICAgZmlsdGVyOiB0aGlzLm9wdGlvbnMuZmlsdGVyLAorICAgICAgICAgIHJlc2l6ZTogdGhpcy5vcHRpb25zLnJlc2l6ZUltYWdlcyA/IHRoaXMudXBsb2FkLnJlc2l6ZXIuaGFzQ2xhc3MoJ2NoZWNrYm94Q2hlY2tlZCcpIDogZmFsc2UsCisgICAgICAgICAgcmVwb3J0Q29udGVudFR5cGU6ICd0ZXh0L3BsYWluJworICAgICAgICB9KSk7CisgICAgCisgICAgdmFyIGZpbGVzID0gdGhpcy51cGxvYWQuZm9ybS5nZXRFbGVtZW50KCdpbnB1dFt0eXBlPWZpbGVdJykuZmlsZXM7CisgICAgdmFyIGZpZWxkTmFtZSA9IHRoaXMudXBsb2FkLmZvcm0uZ2V0RWxlbWVudCgnaW5wdXRbdHlwZT1maWxlXScpLm5hbWU7CisgICAgdmFyIGkgICAgID0gMDsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgCisgICAgLy8gQ29uc3RydWN0IHRoZSBlbnRyaWVzIGluIHRoZSB1cGxvYWQgbGlzdCBmb3IgZWFjaCBmaWxlCisgICAgdmFyIGZpbGVVSXMgPSBbIF07CisgICAgZm9yKHZhciBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgIGZpbGVVSXNbaV0gPSBuZXcgRmlsZU1hbmFnZXIuVXBsb2FkTGlzdEVudHJ5KGZpbGVzW2ldLCBzZWxmKTsKKyAgICAgICAgICAgIAorICAgICAgLy8gQFRPRE8gVmFsaWRhdGUgY2xpZW50IHNpZGUgaGVyZQorICAgICAgLy8gZmlsZVVJc1tpXS5pbnZhbGlkYXRlKCJUZXN0aW5nIik7CisgICAgICAKKyAgICB9CisgICAgCisgICAgaSA9IDA7CisgICAgCisgICAgLy8gU2hvdyB0aGUgdXBsb2FkIGxpc3Qgb2YgZmlsZXMKKyAgICB0aGlzLnNob3dfb3VyX2luZm9fc2VjdGlvbnMoZmFsc2UpOworICAgIHRoaXMuaW5mby5hZG9wdCh0aGlzLnVwbG9hZC51cGxvYWRlci5zZXRTdHlsZSgnZGlzcGxheScsICdibG9jaycpKTsKKyAgICB0aGlzLnVwbG9hZC51cGxvYWRlci5mYWRlKDEpOworICAgIAorICAgIC8vIERpc3BsYXkgc3Bpbm5lcgorICAgIHNlbGYuYnJvd3NlckxvYWRlci5mYWRlKDEpOworICAgIAorICAgIC8vIFdoZW4gdGhlIGxpc3QgYmVjb21lcyBlbXB0eSAoYWxsIGZpbGVzIHVwbG9hZGVkKSByZW1vdmUgaXQgYW5kIHVwZGF0ZQorICAgIC8vICB0aGUgc2VsZWN0ZWQgZmlsZSB0byB0aGUgZmlyc3QgdmFsaWQgb25lLCB0aGF0IGlzLCB0aGUgZmlyc3Qgb25lIHRoYXQKKyAgICAvLyAgdXBsb2FkZWQgT0suCisgICAgdmFyIGhpZGVMaXN0ID0gZnVuY3Rpb24oKQorICAgIHsKKyAgICAgIGlmKHNlbGYudXBsb2FkLnVwbG9hZGVyLmdldEVsZW1lbnRzKCdsaScpLmxlbmd0aCkKKyAgICAgIHsKKyAgICAgICAgaGlkZUxpc3QuZGVsYXkoMTAwMCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHNlbGYudXBsb2FkLnVwbG9hZGVyLmZhZGUoMCkuZ2V0KCd0d2VlbicpLmNoYWluKGZ1bmN0aW9uKCkgeworICAgICAgICAgIHNlbGYudXBsb2FkLnVwbG9hZGVyLnNldFN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTsKKyAgICAgICAgICBzZWxmLnNob3dfb3VyX2luZm9fc2VjdGlvbnModHJ1ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAvLyBIaWRlIHNwaW5uZXIKKyAgICAgICAgICBzZWxmLmJyb3dzZXJMb2FkZXIuZmFkZSgwKTsKKyAgICAgICAgICAKKyAgICAgICAgICAvLyBVcGRhdGUKKyAgICAgICAgICBmb3IodmFyIHggPSAwOyB4IDwgZmlsZVVJcy5sZW5ndGg7IHgrKykKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZihmaWxlVUlzW3hdLnZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzZWxmLmxvYWQoc2VsZi5DdXJyZW50RGlyLnBhdGgsIGZpbGVVSXNbeF0ubmFtZU9uU2VydmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0pOyAgICAgICAgICAgIAorICAgICAgfQorICAgIH07CisgICAgaGlkZUxpc3QoKTsKKyAgICAgIAorICAgIAorICAgIC8vIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCB1cGxvYWQgb2YgdGhlIGZpbGVzIGhhcHBlbnM6CisgICAgLy8gIHRha2UgZmlsZSBpLAorICAgIC8vICAgIGlmIGl0J3Mgbm90IHZhbGlkLCBza2lwIGl0CisgICAgLy8gICAgY3JlYXRlIGEgbmV3IHJlcXVlc3Qgb2JqZWN0CisgICAgLy8gICAgICAgYXBwZW5kIHRoZSBmaWxlIHRvIGl0CisgICAgLy8gICAgICAgYXBwZW5kIHR4X2NmZy5kYXRhIChhYm92ZSkgYW5kIHRoZSBwcm9wYWdhdGVEYXRhIHRvIGl0CisgICAgLy8gICAgICAgYXR0YWNoIGEgcHJvZ3Jlc3MgZXZlbnQgdG8gaXQgd2hpY2ggY2FsbHMgdGhlIGZpbGUncyBVSSBhbmQgdGVsbHMgaXQgdG8gdXBkYXRlCisgICAgLy8gICAgICAgYXR0YWNoIHN1Y2Nlc3MvZmFpbCBldmVudHMgdG8gaXQgd2hpY2ggY2FsbHMgdGhlIGZpbGUncyBVSSBhbmQgdGVsbHMgaXQgdG8gdXBkYXRlCisgICAgLy8gICAgc3RhcnQgdGhlIHVwbG9hZAorICAgIC8vICAgICAgIHdhaXQgYXN5bmNocm9ub3VzbHkgdW50aWwgaXQncyBkb25lCisgICAgLy8gICAgICAgdGVsbCB0aGUgZmlsZSdzIFVJIHRoYXQgaXQncyBkb25lIGFuZCB0aGUgcmVzdWx0CisgICAgLy8gICAgICAgICAodGhlIGZpbGUncyBVSSB3aWxsIHJlbW92ZSBpdHNlbGYgZnJvbSB0aGUgbGlzdCBhZnRlciBhIHNob3J0IGRlbGF5KQorICAgIC8vICAgIG5leHQgaQorCisgICAgCisgICAgdmFyIGRvVXBsb2FkTmV4dEZpbGUgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgaWYoaSA8PSBmaWxlcy5sZW5ndGgtMSkKKyAgICAgIHsKKyAgICAgICAgdmFyIGZpbGUgICA9IGZpbGVzW2ldOyAgICAgIAorICAgICAgICB2YXIgZmlsZVVJID0gZmlsZVVJc1tpXTsKKyAgICAgICAgCisgICAgICAgIGlmKCFmaWxlVUkudmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICBpKys7CisgICAgICAgICAgcmV0dXJuIGRvVXBsb2FkTmV4dEZpbGUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRm9yIHRlc3RpbmcgcHJvZ2VzcyBiYXIKKyAgICAgICAgaWYoMCkKKyAgICAgICAgeworICAgICAgICAgIHZhciBwID0gMTsKKyAgICAgICAgICAoZnVuY3Rpb24oKXsKKyAgICAgICAgICAgIGlmKHA8MTAwKQorICAgICAgICAgICAgICBmaWxlVUkucHJvZ3Jlc3MocCsrKTsKKyAgICAgICAgICB9KS5wZXJpb2RpY2FsKDUwMCk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2YXIgdXBsb2FkID0gbmV3IEZpbGVNYW5hZ2VyLkZpbGVVcGxvYWRSZXF1ZXN0KHsKKyAgICAgICAgICB1cmw6IHR4X2NmZy51cmwKKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB1cGxvYWQuYXBwZW5kKGZpZWxkTmFtZSwgZmlsZSk7CisgICAgICAgIE9iamVjdC5lYWNoKE9iamVjdC5tZXJnZSh0eF9jZmcuZGF0YSwgc2VsZi5vcHRpb25zLnByb3BhZ2F0ZURhdGEpLCBmdW5jdGlvbih2LGspIHsgdXBsb2FkLmFwcGVuZChrLHYpOyB9KTsKKyAgICAgICAgCisgICAgICAgIHVwbG9hZC5hZGRFdmVudCgncHJvZ3Jlc3MnLCBmdW5jdGlvbihldmVudCwgYSl7ICAgICAgICAgIAorICAgICAgICAgIGlmKGV2ZW50LnRvdGFsICYmIGV2ZW50LmxvYWRlZCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBmaWxlVUkucHJvZ3Jlc3MoKGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsKSAqIDEwMCk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHVwbG9hZC5hZGRFdmVudCgnc3VjY2VzcycsIGZ1bmN0aW9uKHJlc3BvbnNlVGV4dCl7CisgICAgICAgICAgZmlsZVVJLmNvbXBsZXRlKHsndGV4dCc6IHJlc3BvbnNlVGV4dH0pOworICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHVwbG9hZC5hZGRFdmVudCgnZmFpbHVyZScsIGZ1bmN0aW9uKHJlc3BvbnNlWGhyKXsKKyAgICAgICAgICBmaWxlVUkuY29tcGxldGUocmVzcG9uc2VYaHIpOworICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHVwbG9hZC5zZW5kKCk7CisgICAgICAgIAorICAgICAgICAoZnVuY3Rpb24gd2FpdFRpbGxEb25lKCl7CisgICAgICAgICAgaWYoIXVwbG9hZC5pc1J1bm5pbmcoKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpKys7CisgICAgICAgICAgICBkb1VwbG9hZE5leHRGaWxlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZpbGVVSS5wcm9ncmVzcygxMDApOworICAgICAgICAgICAgZmlsZVVJLmNvbXBsZXRlKHVwbG9hZCk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICB3YWl0VGlsbERvbmUuZGVsYXkoNTAwKTsKKyAgICAgICAgICB9CisgICAgICAgIH0pLmRlbGF5KDUwMCk7CisgICAgICB9CisgICAgfQorICAgIAorICAgIGRvVXBsb2FkTmV4dEZpbGUoKTsKKyAgfSwKKyAgCisgIC8qKiBDaGFuZ2UgaGFuZGxlciBmb3IgdGhlIGZvcm0gZmllbGQgdGhhdCBkb2VzIG5vdCByZXF1aXJlIEhUTUw1LCBvciBtdWNoIG1vcmUgdGhhbiBmb3JtIGZpZWxkcy4KKyAgICogCisgICAqICBVc2VzIHRoZSBoaWRkZW4gaWZyYW1lLgorICAgKiAKKyAgICogIE5vdGUgdGhhdCBpZiB5b3UgZG9uJ3Qgc2VsZWN0IGEgZGlmZmVyZW50IGZpbGUgaW4gdGhlIGZvcm0gZmllbGQsIG5vIGNoYW5nZSwgc28gbm8gcmUtdXBsb2FkCisgICAqICB1bmxlc3MgeW91IGFjdHVhbGx5IHBpY2sgYSBkaWZmZXJlbnQgZmlsZSAoYXMgd2VsbCBvciBpbnN0ZWFkKS4KKyAgICogCisgICAqLworICAKKyAgZG9VcGxvYWRGYWxsYmFjazogZnVuY3Rpb24oKQorICB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworICAgIAorICAgIC8vIGRpc2NhcmQgb2xkIGlmcmFtZSwgaWYgaXQgZXhpc3RzOgorICAgIGlmICh0aGlzLnVwbG9hZC5kdW1teWZyYW1lKQorICAgIHsKKyAgICAgIC8vIHJlbW92ZSBmcm9tIHRoZSBtZW51IChkaXNwb3NlKSBhbmQgdHJhc2ggaXQgKGRlc3Ryb3kpCisgICAgICB0aGlzLnVwbG9hZC5kdW1teWZyYW1lLmRpc3Bvc2UoKS5kZXN0cm95KCk7CisgICAgICB0aGlzLnVwbG9hZC5kdW1teWZyYW1lID0gbnVsbDsKKyAgICB9CisKKyAgICB0aGlzLnVwbG9hZC5kdW1teWZyYW1lID0gKG5ldyBJRnJhbWUpLnNldCh7c3JjOiAnYWJvdXQ6YmxhbmsnLCBuYW1lOiAnZHVtbXlmcmFtZSd9KS5zZXRTdHlsZXMoe2Rpc3BsYXk6ICdub25lJ30pOworICAgIHRoaXMubWVudS5hZG9wdCh0aGlzLnVwbG9hZC5kdW1teWZyYW1lKTsKKyAgICAKKyAgICB0aGlzLnVwbG9hZC5kdW1teWZyYW1lLmFkZEV2ZW50KCdsb2FkJywgZnVuY3Rpb24oKQorICAgIHsKKyAgICAgIHZhciBpZnJhbWUgPSB0aGlzOworICAgICAgc2VsZi5kaWFnLmxvZygnTm9GbGFzaCB1cGxvYWQgcmVzcG9uc2U6ICcsIHRoaXMsICcsIGlmcmFtZTogJywgc2VsZi51cGxvYWQuZHVtbXlmcmFtZSwgJywgcmVhZHk6JywgKDEgKiBzZWxmLnVwbG9hZC5kdW1teWZyYW1lX2FjdGl2ZSkpOworCisgICAgICAvLyBtYWtlIHN1cmUgd2UgZG9uJ3QgYWN0IG9uIHByZW1hdHVyZSBmaXJpbmcgb2YgdGhlIGV2ZW50IGluIE1TSUUgYnJvd3NlcnM6CisgICAgICBpZiAoIXNlbGYudXBsb2FkLmR1bW15ZnJhbWVfYWN0aXZlKQorICAgICAgICByZXR1cm47CisKKyAgICAgIHNlbGYuYnJvd3NlckxvYWRlci5mYWRlKDApOworCisgICAgICB2YXIgcmVzcG9uc2UgPSBudWxsOworICAgICAgRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlvbigpIHsKKyAgICAgICAgICByZXNwb25zZSA9IGlmcmFtZS5jb250ZW50RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmlubmVyVGV4dDsKKyAgICAgICAgfSwKKyAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgcmVzcG9uc2UgPSBpZnJhbWUuY29udGVudERvY3VtZW50LmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudDsKKyAgICAgICAgfSwKKyAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgcmVzcG9uc2UgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudC5pbm5lclRleHQ7CisgICAgICAgIH0sCisgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHJlc3BvbnNlID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudC5pbm5lclRleHQ7CisgICAgICAgIH0sCisgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgIC8vIE1heWJlIHRoaXMuY29udGVudERvY3VtZW50LmRvY3VtZW50RWxlbWVudC5pbm5lclRleHQgaXNuJ3Qgd2hlcmUgd2UgbmVlZCB0byBsb29rPworICAgICAgICAgIC8vZGVidWdnZXI7CisgICAgICAgICAgcmVzcG9uc2UgPSAie3N0YXR1czogMCwgZXJyb3I6IFwibm9GbGFzaFVwbG9hZDogZG9jdW1lbnQgaW5uZXJUZXh0IGdyYWIgRkFJTDogQ2FuJ3QgZmluZCByZXNwb25zZS5cIn0iOworICAgICAgICB9CisgICAgICApOworCisgICAgICB2YXIgaiA9IEpTT04uZGVjb2RlKHJlc3BvbnNlKTsKKworICAgICAgaWYgKGogJiYgIWouc3RhdHVzKQorICAgICAgeworICAgICAgICBzZWxmLnNob3dFcnJvcignJyArIGouZXJyb3IpOworICAgICAgICBzZWxmLmxvYWQoc2VsZi5DdXJyZW50RGlyLnBhdGgpOworICAgICAgfQorICAgICAgZWxzZSBpZiAoaikKKyAgICAgIHsKKyAgICAgICAgc2VsZi5sb2FkKHNlbGYuQ3VycmVudERpci5wYXRoLCBqLm5hbWUpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvLyBJRTkgZmlyZXMgdGhlIGxvYWQgZXZlbnQgb24gaW5pdCEgOi0oCisgICAgICAgIGlmIChzZWxmLkN1cnJlbnREaXIpCisgICAgICAgIHsKKyAgICAgICAgICBzZWxmLnNob3dFcnJvcignTm8gb3IgZmF1bHR5IEpTT04gcmVzcG9uc2UhICcgKyByZXNwb25zZSk7CisgICAgICAgICAgc2VsZi5sb2FkKHNlbGYuQ3VycmVudERpci5wYXRoKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvLyBDbGVhciB0aGUgZmlsZSBpbnB1dCwgdG8gZG8gdGhpcyBpdCBpcyByZW1hZGUKKyAgICAgIHNlbGYubWFrZV9maWxlX2lucHV0KHNlbGYudXBsb2FkLmZvcm0pOworICAgIH0pOworICAgICAgICAKKyAgICAvLyBOb3RpY2UgaGVyZSB0aGF0IHByb3BhZ2F0ZURhdGEgaXMgbm90IHBhc3NlZCBpbnRvIG1rU2VydmVyUmVxdWVzdFVSTAorICAgIC8vICAgdGhpcyBpcyBob3cgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSB3b3JrcyB0b28gc28gaXQgY2FuJ3QgcmVhbGx5IGJlIGNoYW5nZWQKKyAgICAvLyAgIGJlY2F1c2UgbWtTZXJ2ZXJSZXF1ZXN0VVJMIGlzIHBhc3NlZCBpbnRvIEZpbGVNYW5hZ2VyLlJlcXVlc3Qgbm9ybWFsbHkKKyAgICAvLyAgIGFuZCB0aGUgcHJvcGFnYXRlRGF0YSBpcyBhZGRlZCB0aGVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICB2YXIgdHhfY2ZnID0gdGhpcy5vcHRpb25zLm1rU2VydmVyUmVxdWVzdFVSTCh0aGlzLCAndXBsb2FkJywgT2JqZWN0Lm1lcmdlKHt9LAorICAgICAgICAvKnRoaXMub3B0aW9ucy5wcm9wYWdhdGVEYXRhLCAqLworICAgICAgICAodGhpcy5vcHRpb25zLnVwbG9hZEF1dGhEYXRhIHx8IHt9KSwgeworICAgICAgICAgIGRpcmVjdG9yeTogKHRoaXMuQ3VycmVudERpciA/IHRoaXMuQ3VycmVudERpci5wYXRoIDogJy8nKSwKKyAgICAgICAgICBmaWx0ZXI6IHRoaXMub3B0aW9ucy5maWx0ZXIsCisgICAgICAgICAgcmVzaXplOiB0aGlzLm9wdGlvbnMucmVzaXplSW1hZ2VzID8gdGhpcy51cGxvYWQucmVzaXplci5oYXNDbGFzcygnY2hlY2tib3hDaGVja2VkJykgOiBmYWxzZSwKKyAgICAgICAgICByZXBvcnRDb250ZW50VHlwZTogJ3RleHQvcGxhaW4nCisgICAgICAgIH0pKTsKKyAgICAKKyAgICBzZWxmLnVwbG9hZC5mb3JtLmFjdGlvbiA9IHR4X2NmZy51cmw7CisgICAgc2VsZi51cGxvYWQuZm9ybS5nZXRFbGVtZW50cygnaW5wdXRbdHlwZT1oaWRkZW5dJykuZWFjaChmdW5jdGlvbihlKXtlLmRlc3Ryb3koKTt9KTsKKyAgICAKKyAgICBPYmplY3QuZWFjaChPYmplY3QubWVyZ2UodHhfY2ZnLmRhdGEsIHNlbGYub3B0aW9ucy5wcm9wYWdhdGVEYXRhKSwgZnVuY3Rpb24odixrKSB7IAorICAgICAgdmFyIGlucHV0ID0gbmV3IEVsZW1lbnQoJ2lucHV0Jykuc2V0KHt0eXBlOiAnaGlkZGVuJywgbmFtZTogaywgdmFsdWU6IHYsIGlkOiAnZmlsZW1hbmFnZXJfdXBsb2FkXycgKyBrIH0pOworICAgICAgc2VsZi51cGxvYWQuZm9ybS5hZG9wdChpbnB1dCk7ICAgIAorICAgIH0pOworICAgIAorICAgIHNlbGYudXBsb2FkLmR1bW15ZnJhbWVfYWN0aXZlID0gdHJ1ZTsKKyAgICBzZWxmLmJyb3dzZXJMb2FkZXIuZmFkZSgwKTsKKyAgICBzZWxmLnVwbG9hZC5mb3JtLnN1Ym1pdCgpOworICAgIAorICB9CisgIAorICAKK30pOworCisKKy8qKiBUaGUgVXBsb2FkTGlzdEVudHJ5IGNsYXNzIGhhbmRsZXMgZW50cmllcyBpbiB0aGUgZmlsZSB1cGxvYWQgbGlzdAorICogCisgKiAgUGFzcyBpdCBhbiBIVE1MNSBmaWxlIG9iamVjdCAodGFrZW4gZnJvbSBpbnB1dFt0eXBlPWZpbGVdLmZpbGVzKSAKKyAqICBhbmQgdGhlIGZpbGUgbWFuYWdlciB0byB3aGljaCBpdCBpcyBiZWluZyBhdHRhY2hlZC4KKyAqIAorICogIER1cmluZyBpbml0aWFsaXNhdGlvbiB0aGUgVXBsb2FkTGlzdEVudHJ5IHdpbGwgaW5qZWN0IGFuIDxsaT4gaW50byAKKyAqICAgIFtmaWxlbWFuYWdlcl0udXBsb2FkLmxpc3QKKyAqICB3aGljaCBtdXN0IGFscmVhZHkgYmUgY3JlYXRlZC4KKyAqIAorICogWW91IGNhbiB0aGVuIGNhbGwgCisgKiAgIGludmFsaWRhdGUoIlJlYXNvbiIpIHRvIGludmFsaWRhdGUgdGhlIGZpbGUgYW5kIHByb2R1Y2UgYSBtZXNzYWdlCisgKiAgIGludmFsaWRhdGUoZmFsc2UpICAgIHRvIGludmFsaWRhdGUgdGhlIGZpbGUgYW5kIG5vdCBwcm9kdWNlIGEgbWVzc2FnZQorICogICBwcm9ncmVzcygwIC4uIDEwMCkgdG8gc2V0IHRoZSBwcm9ncmVzcyBiYXIgZm9yIHRoZSBmaWxlCisgKiAgIGNvbXBsZXRlKHt0ZXh0OiAnanNvbmVuY29kZWRyZXNwb25zZSd9KSB0byBjb21wbGV0ZSB0aGUgZmlsZSB3aXRoIGEganNvbiByZXNwb25zZQorICogICBjb21wbGV0ZShYTUxIVFRQUmVxdWVzdCkgdG8gZmFpbCB0aGUgZmlsZSB3aXRoIHNvbWUgbm9uLWpzb24gZmFpbHVyZQorICovCisKK0ZpbGVNYW5hZ2VyLlVwbG9hZExpc3RFbnRyeSA9IG5ldyBDbGFzcyh7CisKKyAgSW1wbGVtZW50czogRXZlbnRzLAorICAKKyAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZmlsZSwgZm0pIAorICB7CisgICAgdGhpcy5maWxlID0gZmlsZTsKKyAgICB0aGlzLmJhc2UgPSBmbTsgICAgCisgICAgCisgICAgdGhpcy52YWxpZCA9IHRydWU7CisgICAgdGhpcy52YWxpZGF0aW9uRXJyb3IgPSBudWxsOworICAgIHRoaXMuaGFzX2NvbXBsZXRlZCAgPSBmYWxzZTsKKyAgICAKKyAgICB0aGlzLmlkID0gIFN0cmluZy51bmlxdWVJRCgpOworICAgIAorICAgIHRoaXMuYWRkRXZlbnRzKHsKKyAgICAgIHN0YXJ0OiB0aGlzLm9uU3RhcnQsCisgICAgICBwcm9ncmVzczogdGhpcy5vblByb2dyZXNzLAorICAgICAgc3RvcDogdGhpcy5vblN0b3AsCisgICAgICBjb21wbGV0ZTogdGhpcy5vbkNvbXBsZXRlCisgICAgfSk7CisgICAgCisgICAgdGhpcy5yZW5kZXIoKTsKKyAgfSwKKworICAvKiogTWFyayB0aGUgdXBsb2FkIGFzIGludmFsaWQvZmFpbGVkLCBkaXNwbGF5IGEgbWVzc2FnZSwgaGlnaGxpZ2h0IGFuZCByZW1vdmUgdGhlIGZpbGUuCisgICAqIAorICAgKiAgV2l0aCBubyByZWFzb24sIG5vIG1lc3NhZ2UgaXMgZGlzcGxheWVkLCB3aXRoIGEgcmVhc29uIGEgbWVzc2FnZSBpcyBkaXNwbGF5ZWQuIAorICAgKiAKKyAgICogIEBwYXJhbSByZWFzb24gU3RyaW5nfGZhbHNlCisgICAqLworICAKKyAgaW52YWxpZGF0ZTogZnVuY3Rpb24ocmVhc29uKSAKKyAgeworICAgIHRoaXMudmFsaWQgPSBmYWxzZTsKKyAgICB0aGlzLnZhbGlkYXRpb25FcnJvciA9IHJlYXNvbjsKKyAgICAKKyAgICBpZihyZWFzb24pCisgICAgeworICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmJhc2UubGFuZ3VhZ2UudXBsb2FkZXIudW5rbm93bjsKKyAgICAgIHZhciBzdWIgPSB7CisgICAgICAgIG5hbWU6IHRoaXMuZmlsZS5uYW1lLAorICAgICAgICBzaXplOiB0aGlzLmZvcm1hdFVuaXQodGhpcy5maWxlLnNpemUsICdiJykKKyAgICAgIH07CisKKyAgICAgIGlmICh0aGlzLmJhc2UubGFuZ3VhZ2UudXBsb2FkZXJbdGhpcy52YWxpZGF0aW9uRXJyb3JdKSB7CisgICAgICAgIG1lc3NhZ2UgPSB0aGlzLmJhc2UubGFuZ3VhZ2UudXBsb2FkZXJbdGhpcy52YWxpZGF0aW9uRXJyb3JdOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBtZXNzYWdlID0gdGhpcy52YWxpZGF0aW9uRXJyb3I7CisgICAgICB9CisKKyAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25FcnJvciA9PT0gJ3NpemVMaW1pdE1pbicpCisgICAgICAgIHN1Yi5zaXplX21pbiA9IHRoaXMuZm9ybWF0VW5pdCh0aGlzLmJhc2Uub3B0aW9ucy5maWxlU2l6ZU1pbiwgJ2InKTsKKyAgICAgIGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvbkVycm9yID09PSAnc2l6ZUxpbWl0TWF4JykKKyAgICAgICAgc3ViLnNpemVfbWF4ID0gdGhpcy5mb3JtYXRVbml0KHRoaXMuYmFzZS5vcHRpb25zLmZpbGVTaXplTWF4LCAnYicpOworCisgICAgICB0aGlzLmJhc2Uuc2hvd0Vycm9yKG1lc3NhZ2Uuc3Vic3RpdHV0ZShzdWIsIC9cXD9cJFx7KFtee31dKylcfS9nKSk7CisgICAgfQorICAgIAorICAgIHRoaXMuaGlnaGxpZ2h0QW5kQ2xlYXIoKTsKKyAgfSwKKyAgCisgIC8qKiBIaWdobGlnaHQgdGhlIGZpbGUgaW4gdGhlIGxpc3QgYW5kIHRoZW4gcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3QgKGllIHdoZW4gaXQncyBmaW5pc2hlZC9mYWlsZWQpCisgICAqIAorICAgKiAgVXNlZCBieSBpbnZhbGlkYXRlLCBhbmQgY29tcGxldGUKKyAgICovCisgIAorICBoaWdobGlnaHRBbmRDbGVhcjogZnVuY3Rpb24oKQorICB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworICAgIAorICAgIC8vIEhpZ2hsaWdodCB0aGUgbGluZQorICAgIHNlbGYudWkuZWxlbWVudC5zZXQoJ3R3ZWVuJywge2R1cmF0aW9uOiAxMDAwfSkuaGlnaGxpZ2h0KG51bGwsIChzZWxmLnZhbGlkID8gJyNlNmVmYzInIDogJyNmMGMyYzInKSkuZ2V0KCd0d2VlbicpLmNoYWluKGZ1bmN0aW9uKCl7c2VsZi51aS5lbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvcj0oc2VsZi52YWxpZCA/ICcjZTZlZmMyJyA6ICcjZjBjMmMyJyk7fSk7CisgICAgCisgICAgLy8gUmVtb3ZlIGl0IGFmdGVyIGEgZGVsYXkKKyAgICAoZnVuY3Rpb24oKSB7CisgICAgICBzZWxmLnVpLmVsZW1lbnQuc2V0U3R5bGUoJ292ZXJmbG93JywgJ2hpZGRlbicpLm1vcnBoKHsKKyAgICAgICAgb3BhY2l0eTogMCwKKyAgICAgICAgaGVpZ2h0OiAwCisgICAgICB9KS5nZXQoJ21vcnBoJykuY2hhaW4oZnVuY3Rpb24oKSB7CisgICAgICAgIHNlbGYudWkuZWxlbWVudC5kZXN0cm95KCk7CisgICAgICB9KTsKKyAgICB9KS5kZWxheShzZWxmLnZhbGlkID8gMjUwMCA6IDUwMDAsIHNlbGYpOworICB9LAorICAKKyAgLyoqIEZvcm1hdCBhIG51bWJlciBpbnRvIGEgaHVtYW4gcmVhZGFibGUgc2l6ZSAKKyAgICogCisgICAqLworICAKKyAgZm9ybWF0VW5pdDogZnVuY3Rpb24oYmFzZSwgdHlwZSwgam9pbikgeworICAgIHZhciB1bml0TGFiZWxzID0gIHsKKyAgICAgIGI6IFt7bWluOiAxLCB1bml0OiAnQid9LCB7bWluOiAxMDI0LCB1bml0OiAna0InfSwge21pbjogMTA0ODU3NiwgdW5pdDogJ01CJ30sIHttaW46IDEwNzM3NDE4MjQsIHVuaXQ6ICdHQid9XSwKKyAgICAgIHM6IFt7bWluOiAxLCB1bml0OiAncyd9LCB7bWluOiA2MCwgdW5pdDogJ20nfSwge21pbjogMzYwMCwgdW5pdDogJ2gnfSwge21pbjogODY0MDAsIHVuaXQ6ICdkJ31dCisgICAgfTsKKyAgICB2YXIgbGFiZWxzID0gdW5pdExhYmVsc1sodHlwZSA9PSAnYnBzJykgPyAnYicgOiB0eXBlXTsKKyAgICB2YXIgYXBwZW5kID0gKHR5cGUgPT0gJ2JwcycpID8gJy9zJyA6ICcnOworICAgIHZhciBpLCBsID0gbGFiZWxzLmxlbmd0aCwgdmFsdWU7CisKKyAgICBpZiAoYmFzZSA8IDEpIHJldHVybiAnMCAnICsgbGFiZWxzWzBdLnVuaXQgKyBhcHBlbmQ7CisKKyAgICBpZiAodHlwZSA9PSAncycpIHsKKyAgICAgIHZhciB1bml0cyA9IFtdOworCisgICAgICBmb3IgKGkgPSBsIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgdmFsdWUgPSBNYXRoLmZsb29yKGJhc2UgLyBsYWJlbHNbaV0ubWluKTsKKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgdW5pdHMucHVzaCh2YWx1ZSArICcgJyArIGxhYmVsc1tpXS51bml0KTsKKyAgICAgICAgICBiYXNlIC09IHZhbHVlICogbGFiZWxzW2ldLm1pbjsKKyAgICAgICAgICBpZiAoIWJhc2UpIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiAoam9pbiA9PT0gZmFsc2UpID8gdW5pdHMgOiB1bml0cy5qb2luKGpvaW4gfHwgJywgJyk7CisgICAgfQorCisgICAgZm9yIChpID0gbCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICB2YWx1ZSA9IGxhYmVsc1tpXS5taW47CisgICAgICBpZiAoYmFzZSA+PSB2YWx1ZSkgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIChiYXNlIC8gdmFsdWUpLnRvRml4ZWQoMSkgKyAnICcgKyBsYWJlbHNbaV0udW5pdCArIGFwcGVuZDsKKyAgfSwKKyAgCisgIC8qKiBEcmF3IHRoZSBsaXN0IGl0ZW0gCisgICAqCisgICAqLworICAKKyAgcmVuZGVyOiBmdW5jdGlvbigpIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgaWYgKCF0aGlzLnZhbGlkKSB7CisKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIHRoaXMudWkgPSB7fTsKKyAgICB0aGlzLnVpLmljb24gPSBuZXcgQXNzZXQuaW1hZ2UodGhpcy5iYXNlLmFzc2V0QmFzZVBhdGgrJ0ltYWdlcy9JY29ucy8nICsgdGhpcy5maWxlLm5hbWUucmVwbGFjZSgvLipcLi8sICcnKS50b0xvd2VyQ2FzZSgpICsgJy5wbmcnLCB7CisgICAgICAnY2xhc3MnOiAnaWNvbicsCisgICAgICBvbmVycm9yOiBmdW5jdGlvbigpIHsKKyAgICAgICAgbmV3IEFzc2V0LmltYWdlKHNlbGYuYmFzZS5hc3NldEJhc2VQYXRoICsgJ0ltYWdlcy9JY29ucy9kZWZhdWx0LnBuZycpLnJlcGxhY2VzKHRoaXMpOworICAgICAgfQorICAgIH0pOworICAgIHRoaXMudWkuZWxlbWVudCA9IG5ldyBFbGVtZW50KCdsaScsIHsnY2xhc3MnOiAnZmlsZScsIGlkOiAnZmlsZS0nICsgdGhpcy5pZH0pOworICAgIC8vIGtlZXAgZmlsZW5hbWUgaW4gZGlzcGxheSBib3ggYXQgcmVhc29uYWJsZSBsZW5ndGg6CisgICAgdmFyIGxhbmFtZSA9IHRoaXMuZmlsZS5uYW1lOworICAgIGlmIChsYW5hbWUubGVuZ3RoID4gMzYpIHsKKyAgICAgIGxhbmFtZSA9IGxhbmFtZS5zdWJzdHIoMCwgMzYpICsgJy4uLic7CisgICAgfQorICAgIHRoaXMudWkudGl0bGUgPSBuZXcgRWxlbWVudCgnc3BhbicsIHsnY2xhc3MnOiAnZmlsZS10aXRsZScsIHRleHQ6IGxhbmFtZSwgdGl0bGU6IHRoaXMuZmlsZS5uYW1lfSk7CisgICAgdGhpcy51aS5zaXplID0gbmV3IEVsZW1lbnQoJ3NwYW4nLCB7J2NsYXNzJzogJ2ZpbGUtc2l6ZScsIHRleHQ6IHRoaXMuZm9ybWF0VW5pdCh0aGlzLmZpbGUuc2l6ZSwgJ2InKX0pOworCisgICAgdGhpcy51aS5jYW5jZWwgPSBuZXcgQXNzZXQuaW1hZ2UodGhpcy5iYXNlLmFzc2V0QmFzZVBhdGgrJ0ltYWdlcy9jYW5jZWwucG5nJywgeydjbGFzcyc6ICdmaWxlLWNhbmNlbCcsIHRpdGxlOiB0aGlzLmJhc2UubGFuZ3VhZ2UuY2FuY2VsfSkuYWRkRXZlbnQoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CisgICAgICBzZWxmLmludmFsaWRhdGUoZmFsc2UpOyAvLyBObyByZWFzb24KKyAgICAgIHNlbGYuYmFzZS50aXBzLmhpZGUoKTsKKyAgICAgIHNlbGYuYmFzZS50aXBzLmRldGFjaCh0aGlzKTsKKyAgICB9KTsKKyAgICB0aGlzLmJhc2UudGlwcy5hdHRhY2godGhpcy51aS5jYW5jZWwpOworCisgICAgdmFyIHByb2dyZXNzID0gbmV3IEVsZW1lbnQoJ2ltZycsIHsnY2xhc3MnOiAnZmlsZS1wcm9ncmVzcycsIHNyYzogdGhpcy5iYXNlLmFzc2V0QmFzZVBhdGgrJ0ltYWdlcy9iYXIuZ2lmJ30pOworCisKKyAgICB0aGlzLnVpLmVsZW1lbnQuYWRvcHQoCisgICAgICB0aGlzLnVpLmNhbmNlbCwKKyAgICAgIHByb2dyZXNzLAorICAgICAgdGhpcy51aS5pY29uLAorICAgICAgdGhpcy51aS50aXRsZSwKKyAgICAgIHRoaXMudWkuc2l6ZQorICAgICkuaW5qZWN0KHRoaXMuYmFzZS51cGxvYWQubGlzdCkuaGlnaGxpZ2h0KCk7CisKKyAgICB0aGlzLnVpLnByb2dyZXNzID0gcHJvZ3Jlc3M7CisgICAgCisgICAgLy8gSW5pdGlhbGlzZSB0aGUgcHJvZ3Jlc3MgcG9zaXRpb24gdG8gemVybyAgICAgCisgICAgdGhpcy51aS5wcm9ncmVzcy5zZXRTdHlsZSgnYmFja2dyb3VuZC1wb3NpdGlvbi14JywgTWF0aC5mbG9vcigxMDAtKCgwLzEwMCkqMjArNDApKSsnJScpOworICB9LAorCisgIC8qKiBVcGRhdGUgdGhlIHByb2dyZXNzIGJhciBvZiB0aGUgbGlzdCBpdGVtLgorICAgKiAKKyAgICogIEBwYXJhbSBpbnRlZ2VyIDAgdG8gMTAwIHBlcmNlbnQKKyAgICovCisgIAorICBwcm9ncmVzczogZnVuY3Rpb24ocGVyY2VudExvYWRlZCl7CisgICAgaWYodGhpcy5oYXNfY29tcGxldGVkKSByZXR1cm47CisgICAgCisgICAgdGhpcy51aS5lbGVtZW50LmFkZENsYXNzKCdmaWxlLXJ1bm5pbmcnKTsKKyAgICAKKyAgICAvLyBTZXR0aW5nIHRoZSBiYWNraHJvdW5kIHRvIGJldHdlZW4gNjAlIGZvciBlbXB0eSBhbmQgNDAlIGZvciBmdWxsIHdvcmtzCisgICAgLy8gICBzbyB0aGF0IGlzIGEgcmFuZ2Ugb2YgMjAsIGFuIG9mZnNldCBvZiA0MCwgZmxpcHBlZCBiYWNrd2FyZHMgKDEwMC1OKSAgICAKKyAgICB0aGlzLnVpLnByb2dyZXNzLnNldFN0eWxlKCdiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnLCAoMTAwLSgocGVyY2VudExvYWRlZC8xMDApKjIwKzQwKSkrJyUnKTsKKyAgfSwKKyAgCisgIC8qKiBNYXJrIHRoZSBmaWxlIGFzIGNvbXBsZXRlZCwgYW5kIHRoZW4gcmVtb3ZlIGZyb20gdGhlIGxpc3QuCisgICAqIAorICAgKiAgQHBhcmFtIG9iamVjdCB7dGV4dDogJ2pzb25lbmNvZGVkcmVzcG9uc2UnfQorICAgKi8KKyAgCisgIGNvbXBsZXRlOiBmdW5jdGlvbihyZXNwb25zZSkKKyAgeworICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAKKyAgICBpZih0aGlzLmhhc19jb21wbGV0ZWQpIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7CisgICAgCisgICAgdmFyIGpzb25yZXNwb25zZSA9IG51bGw7CisKKyAgICB0aGlzLmhhc19jb21wbGV0ZWQgPSB0cnVlOworICAgIHRoaXMudWkuY2FuY2VsID0gdGhpcy51aS5jYW5jZWwuZGVzdHJveSgpOworCisgICAgdHJ5CisgICAgeworICAgICAganNvbnJlc3BvbnNlID0gSlNPTi5kZWNvZGUocmVzcG9uc2UudGV4dCk7CisgICAgfQorICAgIGNhdGNoKGUpCisgICAgeworICAgICAgdGhpcy5iYXNlLmRpYWcubG9nKHJlc3BvbnNlKTsKKyAgICB9CisKKyAgICBpZiAodHlwZW9mIGpzb25yZXNwb25zZSA9PT0gJ3VuZGVmaW5lZCcgfHwganNvbnJlc3BvbnNlID09IG51bGwpCisgICAgeworICAgICAgaWYgKHJlc3BvbnNlID09IG51bGwgfHwgIXJlc3BvbnNlLnRleHQpCisgICAgICB7CisgICAgICAgIC8vIFRoZSAnbW9kX3NlY3VyaXR5JyBoYXMgc2hvd24gdG8gYmUgb25lIG9mIHRoZSBtb3N0IHVuaGVscGZ1bCBlcnJvciBtZXNzYWdlcyBldmVyOyBwYXJ0aWN1bGFybHkgd2hlbiBpdCBoYXBwZW5lZCBvbiBhIGxvdCBvbiBib3hlcyB3aGljaCBoYWQgYSBndWFyYW50ZWVkIHV0dGVyIGxhY2sgb2YgbW9kX3NlY3VyaXR5IGFuZCBmcmllbmRzLgorICAgICAgICAvLyBTbyB3ZSByZXN0cmljdCB0aGlzIHJlcG9ydCB0byB0aGUgaGlnaGx5IGltcHJvYmFibGUgY2FzZSB3aGVyZSB3ZSBnZXQgdG8gcmVjZWl2ZSAvbm90aGluZy8gL2F0LyAvYWxsLy4KKyAgICAgICAgdGhpcy5pbnZhbGlkYXRlKHRoaXMuYmFzZS5sYW5ndWFnZS51cGxvYWRlci5tb2Rfc2VjdXJpdHkpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICB0aGlzLmludmFsaWRhdGUoKCJTZXJ2ZXIgcmVzcG9uc2U6XG4iICsgdGhpcy5yZXNwb25zZS50ZXh0KS5zdWJzdGl0dXRlKHRoaXMuYmFzZS5sYW5ndWFnZSwgL1xcP1wkXHsoW157fV0rKVx9L2cpKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIWpzb25yZXNwb25zZS5zdGF0dXMpCisgICAgeworICAgICAgdGhpcy5pbnZhbGlkYXRlKCgnJyArIGpzb25yZXNwb25zZS5lcnJvcikuc3Vic3RpdHV0ZSh0aGlzLmJhc2UubGFuZ3VhZ2UsIC9cXD9cJFx7KFtee31dKylcfS9nKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB0aGlzLnZhbGlkID0gdHJ1ZTsKKyAgICAgIHRoaXMubmFtZU9uU2VydmVyID0ganNvbnJlc3BvbnNlLm5hbWU7CisgICAgfQorCisgICAgdGhpcy5oaWdobGlnaHRBbmRDbGVhcigpOworICB9CisKK30pOworCisKKy8qKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gaGFuZGxlIHRoZSBmaWxlIHVwbG9hZHMgdGhlbXNlbHZlcyAoWE1MSFRUUFJlcXVlc3QpCisgKiAKKyAqIEl0IGRvZXMgZXh0ZW5kIFJlcXVlc3QsIGJ1dCB5b3Ugc2hvdWxkJ3QgZXhwZWN0IGV2ZXJ5dGhpbmcgdG8gd29yaywgaXQgaXMKKyAqIG5vdCByZWFsbHkgZ2VuZXJhbCBwdXJwb3NlLgorICogCisgKiBUYWtlbiBvcmlnaW5hbGx5IGZyb20gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vbWxvYmVyZy8xMzQyNDczIGFuZCBtZXNzZWQgCisgKiAgYWJvdXQgYSBiaXQuCisgKgorICogSW1wb3J0YW50IGRpZmZlcmVuY2VzIHRvIFJlcXVlc3QKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqIHVzZSBhcHBlbmQoKSB0byBpbnNlcnQgeW91ciBmb3JtIGRhdGEgKGtleSBhbmQgdmFsdWUsIHdoaWNoIG1pZ2h0IGJlIGEgZmlsZSkKKyAqIGFkZCBhIHByb2dyZXNzIGV2ZW50IGxpc3RlbmVyIHRvIGdldCBwcm9ncmVzcyBvZiB0aGUgVVBMT0FEIG5vdCB0aGUgRE9XTkxPQUQKKyAqIHNlbmQgZG9lcyBub3QgYWNjZXB0IG9wdGlvbnMsIHBhc3MgdGhlbSB0byB0aGUgY29uc3RydWN0b3Igb25seQorICogICAobmFtZWx5IHt1cmw6ICcuLi4uJ30gKQorICogSSBkb24ndCBrbm93IGlmIFBPU1QoKSBvciBHRVQoKSBldGMgYWxpYXNlcyB3aWxsIHdvcmssIGp1c3QgdXNlIHNlbmQoKQorICogCisgKi8KKworRmlsZU1hbmFnZXIuRmlsZVVwbG9hZFJlcXVlc3QgPSBuZXcgQ2xhc3MoeworCisgIEV4dGVuZHM6IFJlcXVlc3QsCisgIAorICBvcHRpb25zOiB7CisgICAgZW11bGF0aW9uOiBmYWxzZSwKKyAgICB1cmxFbmNvZGVkOiBmYWxzZQorICB9LAorICAKKyAgaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7CisgICAgdGhpcy54aHIgPSBuZXcgQnJvd3Nlci5SZXF1ZXN0KCk7CisgICAgdGhpcy5mb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTsKKyAgICB0aGlzLmhlYWRlcnMgPSB0aGlzLm9wdGlvbnMuaGVhZGVyczsKKyAgfSwKKyAgCisgIC8qKiBBcHBlbmQgInNvbWV0aGluZyIgdG8gdGhlIHJlcXVlc3QuCisgICAqICAgCisgICAqICBJbiBPdXIgY2FzZSB0aGF0IHNvbWV0aGluZyBpcyBlaXRoZXIgYSBmaWVsZCBuYW1lIGFuZCB2YWx1ZSAKKyAgICogICAoIHlvdSBkb24ndCBzZWVtIHRvIG5lZWQgdG8gZW5jb2RlIGl0IHlvdXJzZWxmKQorICAgKiAgb3IgZmllbGQgbmFtZSBhbmQgYSBmaWxlIHRha2VuIGZyb20gYW4gKGlucHV0W3R5cGU9ZmlsZV0pLmZpbGVzIGxpc3QKKyAgICogCisgICAqICBJdCdzIGtpbmRhIG5pY2UgaG93IGl0ICJqdXN0IHdvcmtzIiwgYW5kIGFsc28ga2luZGEgd29ycnlpbmcuCisgICAqLworICAKKyAgYXBwZW5kOiBmdW5jdGlvbihrZXksIHZhbHVlKXsKKyAgICB0aGlzLmZvcm1EYXRhLmFwcGVuZChrZXksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpcy5mb3JtRGF0YTsKKyAgfSwKKyAgCisgIHJlc2V0OiBmdW5jdGlvbigpeworICAgIHRoaXMuZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKyAgfSwKKyAgCisgIHNlbmQ6IGZ1bmN0aW9uKCl7CisgICAgdmFyIHVybCA9IHRoaXMub3B0aW9ucy51cmw7CisgICAgCisgICAgdGhpcy5vcHRpb25zLmlzU3VjY2VzcyA9IHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MgfHwgdGhpcy5pc1N1Y2Nlc3M7CisgICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTsKKyAgICAKKyAgICB2YXIgeGhyID0gdGhpcy54aHI7CisgICAgeGhyLm9wZW4oJ1BPU1QnLCB1cmwsIHRydWUpOworICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSB0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzKTsKKyAgICAKKyAgICBpZiAoKCdvbnByb2dyZXNzJyBpbiB4aHIpKQorICAgIHsKKyAgICAgIHhoci5vbmxvYWRzdGFydCA9IHRoaXMubG9hZHN0YXJ0LmJpbmQodGhpcyk7CisgICAgICAKKyAgICAgIC8vIEJ5IGF0dGFjaGluZyB0byB4aHIudXBsb2FkIHdlIGdldCBwcm9ncmVzcyBvZiB0aGF0LCAKKyAgICAgIC8vIHJhdGhlciB0aGFuIHRoZSB1bmtub3dhYmxlIHJlc3BvbnNlIHByb2dyZXNzCisgICAgICB4aHIudXBsb2FkLm9ucHJvZ3Jlc3MgPSB0aGlzLnByb2dyZXNzLmJpbmQodGhpcyk7CisgICAgfQorICAgIAorICAgIE9iamVjdC5lYWNoKHRoaXMuaGVhZGVycywgZnVuY3Rpb24odmFsdWUsIGtleSl7CisgICAgICB0cnl7CisgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsdWUpOworICAgICAgfWNhdGNoKGUpeworICAgICAgICB0aGlzLmZpcmVFdmVudCgnZXhjZXB0aW9uJywgW2tleSwgdmFsdWVdKTsKKyAgICAgIH0KKyAgICB9LCB0aGlzKTsKKyAgICAKKworICAgIAorICAgIHRoaXMuZmlyZUV2ZW50KCdyZXF1ZXN0Jyk7CisgICAgeGhyLnNlbmQodGhpcy5mb3JtRGF0YSk7CisgICAgCisgICAgaWYoIXRoaXMub3B0aW9ucy5hc3luYykgdGhpcy5vblN0YXRlQ2hhbmdlKCk7CisgICAgaWYodGhpcy5vcHRpb25zLnRpbWVvdXQpIHRoaXMudGltZXIgPSB0aGlzLnRpbWVvdXQuZGVsYXkodGhpcy5vcHRpb25zLnRpbWVvdXQsIHRoaXMpOworICAgIHJldHVybiB0aGlzOworICB9CisKK30pOwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9Nb290b29sc0ZpbGVNYW5hZ2VyL21vb3Rvb2xzLWZpbGVtYW5hZ2VyL1NvdXJjZS9VcGxvYWRlci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Tb3VyY2UvVXBsb2FkZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM4MzgwMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Tb3VyY2UvVXBsb2FkZXIuanMKQEAgLTAsMCArMSw0MjMgQEAKKy8qCistLS0KKworZGVzY3JpcHRpb246IEltcGxlbWVudHMgVXBsb2FkIGZ1bmN0aW9uYWxpdHkgaW50byB0aGUgRmlsZU1hbmFnZXIgYmFzZWQgb24gW0ZhbmN5VXBsb2FkXShodHRwOi8vZGlnaXRhcmFsZC5kZSkKKworYXV0aG9yczogQ2hyaXN0b3BoIFBvamVyIChAY3BvamVyKQorCitsaWNlbnNlOiBNSVQtc3R5bGUgbGljZW5zZS4KKworcmVxdWlyZXM6IFtDb3JlLypdCisKK3Byb3ZpZGVzOiBGaWxlbWFuYWdlci5VcGxvYWRlcgorCisuLi4KKyovCisKK0ZpbGVNYW5hZ2VyLmltcGxlbWVudCh7CisKKwlvcHRpb25zOiB7CisJCXJlc2l6ZUltYWdlczogdHJ1ZSwKKwkJdXBsb2FkOiB0cnVlLAorCQl1cGxvYWRBdXRoRGF0YToge30sICAgICAgICAgICAgLy8gZGVwcmVjYXRlZDsgdXNlIEZpbGVNYW5hZ2VyLnByb3BhZ2F0ZURhdGEgaW5zdGVhZCEKKwkJdXBsb2FkVGltZUxpbWl0OiAyNjAsCisJCXVwbG9hZEZpbGVTaXplTWF4OiAyNjAwICogMjYwMCAqIDI1CisJfSwKKworCWhvb2tzOiB7CisJCXNob3c6IHsKKwkJCXVwbG9hZDogZnVuY3Rpb24oKSB7CisJCQkJdGhpcy5zdGFydFVwbG9hZCgpOworCQkJfQorCQl9LAorCisJCWNsZWFudXA6IHsKKwkJCXVwbG9hZDogZnVuY3Rpb24oKSB7CisJCQkJaWYgKCF0aGlzLm9wdGlvbnMudXBsb2FkIHx8ICF0aGlzLnVwbG9hZCkgcmV0dXJuOworCisJCQkJaWYgKHRoaXMudXBsb2FkLnVwbG9hZGVyKSB7CisJCQkJCXRoaXMudXBsb2FkLnVwbG9hZGVyLmZhZGUoMCkuZ2V0KCd0d2VlbicpLmNoYWluKGZ1bmN0aW9uKCkgeworCQkJCQkJdGhpcy5lbGVtZW50LmRpc3Bvc2UoKTsKKwkJCQkJfSk7CisJCQkJfQorCQkJfQorCQl9CisJfSwKKworCW9uRGlhbG9nT3BlbldoZW5VcGxvYWQ6IGZ1bmN0aW9uKCkgeworCQlpZiAodGhpcy5zd2YgJiYgdGhpcy5zd2YuYm94KSB0aGlzLnN3Zi5ib3guc2V0U3R5bGUoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7CisJfSwKKworCW9uRGlhbG9nQ2xvc2VXaGVuVXBsb2FkOiBmdW5jdGlvbigpIHsKKwkJaWYgKHRoaXMuc3dmICYmIHRoaXMuc3dmLmJveCkgdGhpcy5zd2YuYm94LnNldFN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTsKKwl9LAorCisJc3RhcnRVcGxvYWQ6IGZ1bmN0aW9uKCkgeworCisJCWlmICghdGhpcy5vcHRpb25zLnVwbG9hZCB8fCB0aGlzLnN3ZikgcmV0dXJuOworCisJCXZhciBzZWxmID0gdGhpczsKKwkJdGhpcy51cGxvYWQgPSB7CisJCQlidXR0b246IHRoaXMuYWRkTWVudUJ1dHRvbigndXBsb2FkJykuaW5qZWN0KHRoaXMubWVudSwgJ2JvdHRvbScpLmFkZEV2ZW50cyh7CisJCQkJY2xpY2s6IGZ1bmN0aW9uKCkgeworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfSwKKwkJCQltb3VzZWVudGVyOiBmdW5jdGlvbigpIHsKKwkJCQkJdGhpcy5hZGRDbGFzcygnaG92ZXInKTsKKwkJCQl9LAorCQkJCW1vdXNlbGVhdmU6IGZ1bmN0aW9uKCkgeworCQkJCQl0aGlzLnJlbW92ZUNsYXNzKCdob3ZlcicpOworCQkJCQl0aGlzLmJsdXIoKTsKKwkJCQl9LAorCQkJCW1vdXNlZG93bjogZnVuY3Rpb24oKSB7CisJCQkJCXRoaXMuZm9jdXMoKTsKKwkJCQl9CisJCQl9KSwKKwkJCWxpc3Q6IG5ldyBFbGVtZW50KCd1bCcsIHsnY2xhc3MnOiAnZmlsZW1hbmFnZXItdXBsb2FkZXItbGlzdCd9KSwKKwkJCXVwbG9hZGVyOiBuZXcgRWxlbWVudCgnZGl2Jywge29wYWNpdHk6IDAsICdjbGFzcyc6ICdmaWxlbWFuYWdlci11cGxvYWRlci1hcmVhJ30pLmFkb3B0KAorCQkJCW5ldyBFbGVtZW50KCdoMicsIHt0ZXh0OiB0aGlzLmxhbmd1YWdlLnVwbG9hZH0pLAorCQkJCW5ldyBFbGVtZW50KCdkaXYnLCB7J2NsYXNzJzogJ2ZpbGVtYW5hZ2VyLXVwbG9hZGVyJ30pCisJCQkpLAorCQkJbGFzdEZpbGVVcGxvYWRlZDogbnVsbCwgIC8vIG5hbWUgb2YgdGhlIGxhc3Qgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkIGZpbGU7IHdpbGwgYmUgcHJlc2VsZWN0ZWQgaW4gdGhlIGxpc3QgdmlldworCQkJZXJyb3JfY291bnQ6IDAKKwkJfTsKKwkJdGhpcy51cGxvYWQudXBsb2FkZXIuZ2V0RWxlbWVudCgnZGl2JykuYWRvcHQodGhpcy51cGxvYWQubGlzdCk7CisKKwkJaWYgKHRoaXMub3B0aW9ucy5yZXNpemVJbWFnZXMpIHsKKwkJCXZhciByZXNpemVyID0gbmV3IEVsZW1lbnQoJ2RpdicsIHsnY2xhc3MnOiAnY2hlY2tib3gnfSk7CisJCQl2YXIgY2hlY2sgPSAoZnVuY3Rpb24oKSB7CisJCQkJCXRoaXMudG9nZ2xlQ2xhc3MoJ2NoZWNrYm94Q2hlY2tlZCcpOworCQkJCX0pLmJpbmQocmVzaXplcik7CisJCQljaGVjaygpOworCQkJdGhpcy51cGxvYWQubGFiZWwgPSBuZXcgRWxlbWVudCgnbGFiZWwnKS5hZG9wdCgKKwkJCQlyZXNpemVyLAorCQkJCW5ldyBFbGVtZW50KCdzcGFuJywge3RleHQ6IHRoaXMubGFuZ3VhZ2UucmVzaXplSW1hZ2VzfSkKKwkJCSkuYWRkRXZlbnQoJ2NsaWNrJywgY2hlY2spLmluamVjdCh0aGlzLm1lbnUpOworCQl9CisKKwkJdmFyIEZpbGUgPSBuZXcgQ2xhc3MoeworCisJCQlFeHRlbmRzOiBTd2lmZi5VcGxvYWRlci5GaWxlLAorCisJCQlpbml0aWFsaXplOiBmdW5jdGlvbihiYXNlLCBkYXRhKSB7CisKKwkJCQl0aGlzLnBhcmVudChiYXNlLCBkYXRhKTsKKwkJCQl0aGlzLmhhc19jb21wbGV0ZWQgPSBmYWxzZTsKKworCQkJCXZhciB0eF9jZmcgPSBzZWxmLm9wdGlvbnMubWtTZXJ2ZXJSZXF1ZXN0VVJMKHNlbGYsICd1cGxvYWQnLCB7CisJCQkJCQkJCWRpcmVjdG9yeTogc2VsZi5DdXJyZW50RGlyLnBhdGgsCisJCQkJCQkJCWZpbHRlcjogc2VsZi5vcHRpb25zLmZpbHRlciwKKwkJCQkJCQkJcmVzaXplOiAoc2VsZi5vcHRpb25zLnJlc2l6ZUltYWdlcyAmJiByZXNpemVyLmhhc0NsYXNzKCdjaGVja2JveENoZWNrZWQnKSkgPyAxIDogMAorCQkJCQkJCX0pOworCisJCQkJc2VsZi5kaWFnLmxvZygnVXBsb2FkZXI6IHNldE9wdGlvbnMnLCB0eF9jZmcpOworCisJCQkJdGhpcy5zZXRPcHRpb25zKHR4X2NmZyk7CisJCQl9LAorCisJCQlyZW5kZXI6IGZ1bmN0aW9uKCkgeworCQkJCWlmICh0aGlzLmludmFsaWQpIHsKKwkJCQkJdmFyIG1lc3NhZ2UgPSBzZWxmLmxhbmd1YWdlLnVwbG9hZGVyLnVua25vd247CisJCQkJCXZhciBzdWIgPSB7CisJCQkJCQluYW1lOiB0aGlzLm5hbWUsCisJCQkJCQlzaXplOiBTd2lmZi5VcGxvYWRlci5mb3JtYXRVbml0KHRoaXMuc2l6ZSwgJ2InKQorCQkJCQl9OworCisJCQkJCWlmIChzZWxmLmxhbmd1YWdlLnVwbG9hZGVyW3RoaXMudmFsaWRhdGlvbkVycm9yXSkgeworCQkJCQkJbWVzc2FnZSA9IHNlbGYubGFuZ3VhZ2UudXBsb2FkZXJbdGhpcy52YWxpZGF0aW9uRXJyb3JdOworCQkJCQl9CisKKwkJCQkJaWYgKHRoaXMudmFsaWRhdGlvbkVycm9yID09PSAnc2l6ZUxpbWl0TWluJykKKwkJCQkJCXN1Yi5zaXplX21pbiA9IFN3aWZmLlVwbG9hZGVyLmZvcm1hdFVuaXQodGhpcy5iYXNlLm9wdGlvbnMuZmlsZVNpemVNaW4sICdiJyk7CisJCQkJCWVsc2UgaWYgKHRoaXMudmFsaWRhdGlvbkVycm9yID09PSAnc2l6ZUxpbWl0TWF4JykKKwkJCQkJCXN1Yi5zaXplX21heCA9IFN3aWZmLlVwbG9hZGVyLmZvcm1hdFVuaXQodGhpcy5iYXNlLm9wdGlvbnMuZmlsZVNpemVNYXgsICdiJyk7CisKKwkJCQkJc2VsZi5zaG93RXJyb3IobWVzc2FnZS5zdWJzdGl0dXRlKHN1YiwgL1xcP1wkXHsoW157fV0rKVx9L2cpKTsKKwkJCQkJcmV0dXJuIHRoaXM7CisJCQkJfQorCisJCQkJdGhpcy5hZGRFdmVudHMoeworCQkJCQlvcGVuOiB0aGlzLm9uT3BlbiwKKwkJCQkJcmVtb3ZlOiB0aGlzLm9uUmVtb3ZlLAorCQkJCQlyZXF1ZXVlOiB0aGlzLm9uUmVxdWV1ZSwKKwkJCQkJcHJvZ3Jlc3M6IHRoaXMub25Qcm9ncmVzcywKKwkJCQkJc3RvcDogdGhpcy5vblN0b3AsCisJCQkJCWNvbXBsZXRlOiB0aGlzLm9uQ29tcGxldGUKKwkJCQl9KTsKKworCQkJCXRoaXMudWkgPSB7fTsKKwkJCQl0aGlzLnVpLmljb24gPSBuZXcgQXNzZXQuaW1hZ2Uoc2VsZi5hc3NldEJhc2VQYXRoKydJbWFnZXMvSWNvbnMvJyArIHRoaXMuZXh0ZW5zaW9uICsgJy5wbmcnLCB7CisJCQkJCSdjbGFzcyc6ICdpY29uJywKKwkJCQkJb25lcnJvcjogZnVuY3Rpb24oKSB7CisJCQkJCQluZXcgQXNzZXQuaW1hZ2Uoc2VsZi5hc3NldEJhc2VQYXRoICsgJ0ltYWdlcy9JY29ucy9kZWZhdWx0LnBuZycpLnJlcGxhY2VzKHRoaXMpOworCQkJCQl9CisJCQkJfSk7CisJCQkJdGhpcy51aS5lbGVtZW50ID0gbmV3IEVsZW1lbnQoJ2xpJywgeydjbGFzcyc6ICdmaWxlJywgaWQ6ICdmaWxlLScgKyB0aGlzLmlkfSk7CisJCQkJLy8ga2VlcCBmaWxlbmFtZSBpbiBkaXNwbGF5IGJveCBhdCByZWFzb25hYmxlIGxlbmd0aDoKKwkJCQl2YXIgbGFuYW1lID0gdGhpcy5uYW1lOworCQkJCWlmIChsYW5hbWUubGVuZ3RoID4gMzYpIHsKKwkJCQkJbGFuYW1lID0gbGFuYW1lLnN1YnN0cigwLCAzNikgKyAnLi4uJzsKKwkJCQl9CisJCQkJdGhpcy51aS50aXRsZSA9IG5ldyBFbGVtZW50KCdzcGFuJywgeydjbGFzcyc6ICdmaWxlLXRpdGxlJywgdGV4dDogbGFuYW1lLCB0aXRsZTogdGhpcy5uYW1lfSk7CisJCQkJdGhpcy51aS5zaXplID0gbmV3IEVsZW1lbnQoJ3NwYW4nLCB7J2NsYXNzJzogJ2ZpbGUtc2l6ZScsIHRleHQ6IFN3aWZmLlVwbG9hZGVyLmZvcm1hdFVuaXQodGhpcy5zaXplLCAnYicpfSk7CisKKwkJCQl2YXIgZmlsZSA9IHRoaXM7CisJCQkJdGhpcy51aS5jYW5jZWwgPSBuZXcgQXNzZXQuaW1hZ2Uoc2VsZi5hc3NldEJhc2VQYXRoKydJbWFnZXMvY2FuY2VsLnBuZycsIHsnY2xhc3MnOiAnZmlsZS1jYW5jZWwnLCB0aXRsZTogc2VsZi5sYW5ndWFnZS5jYW5jZWx9KS5hZGRFdmVudCgnY2xpY2snLCBmdW5jdGlvbigpIHsKKwkJCQkJZmlsZS5yZW1vdmUoKTsKKwkJCQkJc2VsZi50aXBzLmhpZGUoKTsKKwkJCQkJc2VsZi50aXBzLmRldGFjaCh0aGlzKTsKKwkJCQl9KTsKKwkJCQlzZWxmLnRpcHMuYXR0YWNoKHRoaXMudWkuY2FuY2VsKTsKKworCQkJCXZhciBwcm9ncmVzcyA9IG5ldyBFbGVtZW50KCdpbWcnLCB7J2NsYXNzJzogJ2ZpbGUtcHJvZ3Jlc3MnLCBzcmM6IHNlbGYuYXNzZXRCYXNlUGF0aCsnSW1hZ2VzL2Jhci5naWYnfSk7CisKKwkJCQl0aGlzLnVpLmVsZW1lbnQuYWRvcHQoCisJCQkJCXRoaXMudWkuY2FuY2VsLAorCQkJCQlwcm9ncmVzcywKKwkJCQkJdGhpcy51aS5pY29uLAorCQkJCQl0aGlzLnVpLnRpdGxlLAorCQkJCQl0aGlzLnVpLnNpemUKKwkJCQkpLmluamVjdChzZWxmLnVwbG9hZC5saXN0KS5oaWdobGlnaHQoKTsKKworCQkJCXRoaXMudWkucHJvZ3Jlc3MgPSBuZXcgRnguUHJvZ3Jlc3NCYXIocHJvZ3Jlc3MpLnNldCgwKTsKKworCQkJCXRoaXMuYmFzZS5yZXBvc2l0aW9uKCk7CisKKwkJCQlyZXR1cm4gdGhpcy5wYXJlbnQoKTsKKwkJCX0sCisKKwkJCW9uT3BlbjogZnVuY3Rpb24oKSB7CisJCQkJdGhpcy51aS5lbGVtZW50LmFkZENsYXNzKCdmaWxlLXJ1bm5pbmcnKTsKKwkJCX0sCisKKwkJCW9uUmVtb3ZlOiBmdW5jdGlvbigpIHsKKwkJCQl0aGlzLnVpID0gdGhpcy51aS5lbGVtZW50LmRlc3Ryb3koKTsKKworCQkJCS8vIHdoZW4gYWxsIGl0ZW1zIGluIHRoZSBsaXN0IGhhdmUgYmVlbiBjYW5jZWxsZWQvcmVtb3ZlZCwgYW5kIHRoZSB0cmFuc21pc3Npb24gb2YgdGhlIGZpbGVzIGlzIGRvbmUsIGkuZS4gYWZ0ZXIgdGhlIG9uQ29tcGxldGUgaGFzIGZpcmVkLCBkZXN0cm95IHRoZSBsaXN0IQorCQkJCXZhciBjbnQgPSBzZWxmLnVwbG9hZC5saXN0LmdldEVsZW1lbnRzKCdsaScpLmxlbmd0aDsKKwkJCQlpZiAoY250ID09IDAgJiYgdGhpcy5oYXNfY29tcGxldGVkKQorCQkJCXsKKwkJCQkJc2VsZi51cGxvYWQudXBsb2FkZXIuZmFkZSgwKS5nZXQoJ3R3ZWVuJykuY2hhaW4oZnVuY3Rpb24oKSB7CisJCQkJCQlzZWxmLnVwbG9hZC51cGxvYWRlci5zZXRTdHlsZSgnZGlzcGxheScsICdub25lJyk7CisJCQkJCX0pOworCQkJCX0KKwkJCX0sCisKKwkJCW9uUHJvZ3Jlc3M6IGZ1bmN0aW9uKCkgeworCQkJCXRoaXMudWkucHJvZ3Jlc3Muc3RhcnQodGhpcy5wcm9ncmVzcy5wZXJjZW50TG9hZGVkKTsKKwkJCX0sCisKKwkJCW9uU3RvcDogZnVuY3Rpb24oKSB7CisJCQkJdGhpcy5yZW1vdmUoKTsKKwkJCX0sCisKKwkJCW9uQ29tcGxldGU6IGZ1bmN0aW9uKGZpbGVfb2JqKQorCQkJeworCQkJCXNlbGYuZGlhZy5sb2coJ0ZpbGUtb25Db21wbGV0ZScsIGFyZ3VtZW50cywgJywgZmlsZUxpc3Q6ICcsIHNlbGYuc3dmLmZpbGVMaXN0KTsKKworCQkJCXZhciByZXNwb25zZSA9IG51bGw7CisJCQkJdmFyIGZhaWx1cmUgPSB0cnVlOworCisJCQkJdGhpcy5oYXNfY29tcGxldGVkID0gdHJ1ZTsKKworCQkJCXRoaXMudWkucHJvZ3Jlc3MgPSB0aGlzLnVpLnByb2dyZXNzLmNhbmNlbCgpLmVsZW1lbnQuZGVzdHJveSgpOworCQkJCXRoaXMudWkuY2FuY2VsID0gdGhpcy51aS5jYW5jZWwuZGVzdHJveSgpOworCisJCQkJdHJ5CisJCQkJeworCQkJCQlyZXNwb25zZSA9IEpTT04uZGVjb2RlKHRoaXMucmVzcG9uc2UudGV4dCk7CisJCQkJfQorCQkJCWNhdGNoKGUpCisJCQkJeworCQkJCQlzZWxmLmRpYWcubG9nKHRoaXMucmVzcG9uc2UpOworCQkJCX0KKworCQkJCWlmICh0eXBlb2YgcmVzcG9uc2UgPT09ICd1bmRlZmluZWQnIHx8IHJlc3BvbnNlID09IG51bGwpCisJCQkJeworCQkJCQlpZiAodGhpcy5yZXNwb25zZSA9PSBudWxsIHx8ICF0aGlzLnJlc3BvbnNlLnRleHQpCisJCQkJCXsKKwkJCQkJCS8vIFRoZSAnbW9kX3NlY3VyaXR5JyBoYXMgc2hvd24gdG8gYmUgb25lIG9mIHRoZSBtb3N0IHVuaGVscGZ1bCBlcnJvciBtZXNzYWdlcyBldmVyOyBwYXJ0aWN1bGFybHkgd2hlbiBpdCBoYXBwZW5lZCBvbiBhIGxvdCBvbiBib3hlcyB3aGljaCBoYWQgYSBndWFyYW50ZWVkIHV0dGVyIGxhY2sgb2YgbW9kX3NlY3VyaXR5IGFuZCBmcmllbmRzLgorCQkJCQkJLy8gU28gd2UgcmVzdHJpY3QgdGhpcyByZXBvcnQgdG8gdGhlIGhpZ2hseSBpbXByb2JhYmxlIGNhc2Ugd2hlcmUgd2UgZ2V0IHRvIHJlY2VpdmUgL25vdGhpbmcvIC9hdC8gL2FsbC8uCisJCQkJCQlzZWxmLnNob3dFcnJvcihzZWxmLmxhbmd1YWdlLnVwbG9hZGVyLm1vZF9zZWN1cml0eSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlzZWxmLnNob3dFcnJvcigoIlNlcnZlciByZXNwb25zZTpcbiIgKyB0aGlzLnJlc3BvbnNlLnRleHQpLnN1YnN0aXR1dGUoc2VsZi5sYW5ndWFnZSwgL1xcP1wkXHsoW157fV0rKVx9L2cpKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmICghcmVzcG9uc2Uuc3RhdHVzKQorCQkJCXsKKwkJCQkJc2VsZi5zaG93RXJyb3IoKCcnICsgcmVzcG9uc2UuZXJyb3IpLnN1YnN0aXR1dGUoc2VsZi5sYW5ndWFnZSwgL1xcP1wkXHsoW157fV0rKVx9L2cpKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJZmFpbHVyZSA9IGZhbHNlOworCQkJCX0KKworCQkJCXRoaXMudWkuZWxlbWVudC5zZXQoJ3R3ZWVuJywge2R1cmF0aW9uOiAyMDAwfSkuaGlnaGxpZ2h0KCFmYWlsdXJlID8gJyNlNmVmYzInIDogJyNmMGMyYzInKTsKKwkJCQkoZnVuY3Rpb24oKSB7CisJCQkJCXRoaXMudWkuZWxlbWVudC5zZXRTdHlsZSgnb3ZlcmZsb3cnLCAnaGlkZGVuJykubW9ycGgoeworCQkJCQkJb3BhY2l0eTogMCwKKwkJCQkJCWhlaWdodDogMAorCQkJCQl9KS5nZXQoJ21vcnBoJykuY2hhaW4oZnVuY3Rpb24oKSB7CisJCQkJCQl0aGlzLmVsZW1lbnQuZGVzdHJveSgpOworCQkJCQkJdmFyIGNudCA9IHNlbGYudXBsb2FkLmxpc3QuZ2V0RWxlbWVudHMoJ2xpJykubGVuZ3RoOworCQkJCQkJaWYgKGNudCA9PSAwKQorCQkJCQkJeworCQkJCQkJCXNlbGYudXBsb2FkLnVwbG9hZGVyLmZhZGUoMCkuZ2V0KCd0d2VlbicpLmNoYWluKGZ1bmN0aW9uKCkgeworCQkJCQkJCQlzZWxmLnVwbG9hZC51cGxvYWRlci5zZXRTdHlsZSgnZGlzcGxheScsICdub25lJyk7CisJCQkJCQkJfSk7CisJCQkJCQl9CisJCQkJCX0pOworCQkJCX0pLmRlbGF5KCFmYWlsdXJlID8gMTAwMCA6IDUwMDAsIHRoaXMpOworCisJCQkJaWYgKGZhaWx1cmUpCisJCQkJeworCQkJCQlzZWxmLnVwbG9hZC5lcnJvcl9jb3VudCsrOworCQkJCX0KKworCQkJCS8vIGRvbid0IHdhaXQgZm9yIHRoZSBjdXRlIGRlbGF5cyB0byBzdGFydCB1cGRhdGluZyB0aGUgZGlyZWN0b3J5IHZpZXchCisJCQkJdmFyIGNudCA9IHNlbGYudXBsb2FkLmxpc3QuZ2V0RWxlbWVudHMoJ2xpJykubGVuZ3RoOworCQkJCXZhciBmY250ID0gc2VsZi5zd2YuZmlsZUxpc3QubGVuZ3RoOworCQkJCXNlbGYuZGlhZy5sb2coJ3VwbG9hZDpvbkNvbXBsZXRlIGZvciBGSUxFJywgZmlsZV9vYmosIGNudCwgZmNudCk7CisJCQl9CisJCX0pOworCisJCXRoaXMuZ2V0RmlsZVR5cGVzID0gZnVuY3Rpb24oKSB7CisJCQl2YXIgZmlsZVR5cGVzID0ge307CisJCQlpZiAodGhpcy5vcHRpb25zLmZpbHRlciA9PSAnaW1hZ2UnKQorCQkJCWZpbGVUeXBlcyA9IHsnSW1hZ2VzICgqLmpwZywgKi5naWYsICoucG5nKSc6ICcqLmpwZzsgKi5qcGVnOyAqLmJtcDsgKi5naWY7ICoucG5nJ307CisJCQlpZiAodGhpcy5vcHRpb25zLmZpbHRlciA9PSAndmlkZW8nKQorCQkJCWZpbGVUeXBlcyA9IHsnVmlkZW9zICgqLmF2aSwgKi5mbHYsICoubW92LCAqLm1wZWcsICoubXBnLCAqLndtdiwgKi5tcDQpJzogJyouYXZpOyAqLmZsdjsgKi5mbGk7ICoubW92aWU7ICoubXBlOyAqLnF0OyAqLnZpdjsgKi5ta3Y7ICoudml2bzsgKi5tb3Y7ICoubXBlZzsgKi5tcGc7ICoud212OyAqLm1wNCd9OworCQkJaWYgKHRoaXMub3B0aW9ucy5maWx0ZXIgPT0gJ2F1ZGlvJykKKwkJCQlmaWxlVHlwZXMgPSB7J0F1ZGlvICgqLmFpZiwgKi5taWQsICoubXAzLCAqLm1wZ2EsICoucm0sICoud2F2KSc6ICcqLmFpZjsgKi5haWZjOyAqLmFpZmY7ICouYWlmOyAqLmF1OyAqLm1rYTsgKi5rYXI7ICoubWlkOyAqLm1pZGk7ICoubXAyOyAqLm1wMzsgKi5tcGdhOyAqLnJhOyAqLnJhbTsgKi5ybTsgKi5ycG07ICouc25kOyAqLndhdjsgKi50c2knfTsKKwkJCWlmICh0aGlzLm9wdGlvbnMuZmlsdGVyID09ICd0ZXh0JykKKwkJCQlmaWxlVHlwZXMgPSB7J1RleHQgKCoudHh0LCAqLnJ0ZiwgKi5ydHgsICouaHRtbCwgKi5odG0sICouY3NzLCAqLmFzLCAqLnhtbCwgKi50cGwpJzogJyoudHh0OyAqLnJ0ZjsgKi5ydHg7ICouaHRtbDsgKi5odG07ICouY3NzOyAqLmFzOyAqLnhtbDsgKi50cGwnfTsKKwkJCWlmICh0aGlzLm9wdGlvbnMuZmlsdGVyID09ICdhcHBsaWNhdGlvbicpCisJCQkJZmlsZVR5cGVzID0geydBcHBsaWNhdGlvbiAoKi5iaW4sICouZG9jLCAqLmV4ZSwgKi5pc28sICouanMsICoub2R0LCAqLnBkZiwgKi5waHAsICoucHB0LCAqLnN3ZiwgKi5yYXIsICouemlwKSc6ICcqLmFpOyAqLmJpbjsgKi5jY2FkOyAqLmNsYXNzOyAqLmNwdDsgKi5kaXI7ICouZG1zOyAqLmRydzsgKi5kb2M7ICouZHZpOyAqLmR3ZzsgKi5lcHM7ICouZXhlOyAqLmd0YXI7ICouZ3o7ICouanM7ICoubGF0ZXg7ICoubG5rOyAqLmxuazsgKi5vZGE7ICoub2R0OyAqLm9kczsgKi5vZHA7ICoub2RnOyAqLm9kYzsgKi5vZGY7ICoub2RiOyAqLm9kaTsgKi5vZG07ICoub3R0OyAqLm90czsgKi5vdHA7ICoub3RnOyAqLnBkZjsgKi5waHA7ICoucG90OyAqLnBwczsgKi5wcHQ7ICoucHB6OyAqLnByZTsgKi5wczsgKi5yYXI7ICouc2V0OyAqLnNoOyAqLnNrZDsgKi5za207ICouc21pOyAqLnNtaWw7ICouc3BsOyAqLnNyYzsgKi5zdGw7ICouc3dmOyAqLnRhcjsgKi50ZXg7ICoudGV4aTsgKi50ZXhpbmZvOyAqLnRzcDsgKi51bnY7ICoudmNkOyAqLnZkYTsgKi54bGM7ICoueGxsOyAqLnhsbTsgKi54bHM7ICoueGx3OyAqLnppcCd9OworCisJCQlyZXR1cm4gZmlsZVR5cGVzOworCQl9OworCisJCXRoaXMuZGlhZy5sb2coJ1VwbG9hZGVyOiBTV0YgaW5pdCcpOworCQl0aGlzLnN3ZiA9IG5ldyBTd2lmZi5VcGxvYWRlcih7CisJCQlpZDogJ1N3aWZmRmlsZU1hbmFnZXJVcGxvYWQnLAorCQkJcGF0aDogdGhpcy5hc3NldEJhc2VQYXRoICsgJ1N3aWZmLlVwbG9hZGVyLnN3ZicsCisJCQlxdWV1ZWQ6IGZhbHNlLAorCQkJdGFyZ2V0OiB0aGlzLnVwbG9hZC5idXR0b24sCisJCQlhbGxvd0R1cGxpY2F0ZXM6IHRydWUsCisJCQlpbnN0YW50U3RhcnQ6IHRydWUsCisJCQlhcHBlbmRDb29raWVEYXRhOiB0cnVlLCAvLyBwYXNzIGFsb25nIGFueSBzZXNzaW9uIGNvb2tpZSBkYXRhLCBldGMuIGluIHRoZSByZXF1ZXN0IHNlY3Rpb24gKFBIUDogJF9HRVRbXSkKKwkJCXZlcmJvc2U6IHRoaXMub3B0aW9ucy52ZXJib3NlLAorCQkJZGF0YTogT2JqZWN0Lm1lcmdlKHt9LAorCQkJCXNlbGYub3B0aW9ucy5wcm9wYWdhdGVEYXRhLAorCQkJCShzZWxmLm9wdGlvbnMudXBsb2FkQXV0aERhdGEgfHwge30pCisJCQkpLAorCQkJZmlsZUNsYXNzOiBGaWxlLAorCQkJdGltZUxpbWl0OiBzZWxmLm9wdGlvbnMudXBsb2FkVGltZUxpbWl0LAorCQkJZmlsZVNpemVNYXg6IHNlbGYub3B0aW9ucy51cGxvYWRGaWxlU2l6ZU1heCwKKwkJCXR5cGVGaWx0ZXI6IHRoaXMuZ2V0RmlsZVR5cGVzKCksCisJCQl6SW5kZXg6IHRoaXMub3B0aW9ucy56SW5kZXggKyAzMDAwLAorCQkJb25TZWxlY3RTdWNjZXNzOiBmdW5jdGlvbigpIHsKKwkJCQlzZWxmLmRpYWcubG9nKCdGbGFzaFVwbG9hZGVyOiBvblNlbGVjdFN1Y2Nlc3MnLCBhcmd1bWVudHMsICcsIGZpbGVMaXN0OiAnLCBzZWxmLnN3Zi5maWxlTGlzdCk7CisJCQkJLy9zZWxmLmZpbGxJbmZvKCk7CisJCQkJc2VsZi5zaG93X291cl9pbmZvX3NlY3Rpb25zKGZhbHNlKTsKKwkJCQkvL3NlbGYuaW5mby5nZXRFbGVtZW50KCdoMi5maWxlbWFuYWdlci1oZWFkbGluZScpLnNldFN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTsKKwkJCQlzZWxmLmluZm8uYWRvcHQoc2VsZi51cGxvYWQudXBsb2FkZXIuc2V0U3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKSk7CisJCQkJc2VsZi51cGxvYWQudXBsb2FkZXIuZmFkZSgxKTsKKwkJCX0sCisJCQlvbkNvbXBsZXRlOiBmdW5jdGlvbihpbmZvKSB7CisJCQkJdGhpcy5kaWFnLmxvZygnRmxhc2hVcGxvYWRlcjogb25Db21wbGV0ZScsIGFyZ3VtZW50cywgJywgZmlsZUxpc3Q6ICcsIHNlbGYuc3dmLmZpbGVMaXN0KTsKKworCQkJCS8vIGRvbid0IHdhaXQgZm9yIHRoZSBjdXRlIGRlbGF5cyB0byBzdGFydCB1cGRhdGluZyB0aGUgZGlyZWN0b3J5IHZpZXchCisJCQkJdmFyIGNudCA9IHRoaXMudXBsb2FkLmxpc3QuZ2V0RWxlbWVudHMoJ2xpJykubGVuZ3RoOworCQkJCXZhciBmY250ID0gdGhpcy5zd2YuZmlsZUxpc3QubGVuZ3RoOworCQkJCXRoaXMuZGlhZy5sb2coJ3VwbG9hZDpvbkNvbXBsZXRlJywgaW5mbywgY250LCBmY250KTsKKwkJCQkvLyBhZGQgYSA1IHNlY29uZCBkZWxheSB3aGVuIHRoZXJlIHdlcmUgdXBsb2FkIGVycm9yczoKKwkJCQkoZnVuY3Rpb24oKSB7CisJCQkJCXRoaXMubG9hZCh0aGlzLkN1cnJlbnREaXIucGF0aCwgdGhpcy51cGxvYWQubGFzdEZpbGVVcGxvYWRlZCk7CisJCQkJCS8vIHRoaXMuZmlsbEluZm8oKTsKKwkJCQl9KS5iaW5kKHRoaXMpLmRlbGF5KHRoaXMudXBsb2FkLmVycm9yX2NvdW50ID4gMCA/IDU1MDAgOiAxKTsKKwkJCX0uYmluZCh0aGlzKSwKKwkJCW9uRmlsZUNvbXBsZXRlOiBmdW5jdGlvbihmKSB7CisJCQkJc2VsZi5kaWFnLmxvZygnRmxhc2hVcGxvYWRlcjogb25GaWxlQ29tcGxldGUnLCBhcmd1bWVudHMsICcsIGZpbGVMaXN0OiAnLCBzZWxmLnN3Zi5maWxlTGlzdCk7CisJCQkJc2VsZi51cGxvYWQubGFzdEZpbGVVcGxvYWRlZCA9IGYubmFtZS5yZXBsYWNlKC9ccysvZywgJ18nKS5yZXBsYWNlKC9fezIsfS9nLCAnXycpOworCQkJfSwKKwkJCW9uRmFpbDogZnVuY3Rpb24oZXJyb3IpIHsKKwkJCQlzZWxmLmRpYWcubG9nKCdGbGFzaFVwbG9hZGVyOiBvbkZhaWwnLCBhcmd1bWVudHMsICcsIHN3ZjogJywgc2VsZi5zd2YsICcsIGZpbGVMaXN0OiAnLCAodHlwZW9mIHNlbGYuc3dmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYuc3dmIDogJy0tLScpKTsKKwkJCQlpZiAoZXJyb3IgIT09ICdlbXB0eScpIHsKKwkJCQkJJCQoc2VsZi51cGxvYWQuYnV0dG9uLCBzZWxmLnVwbG9hZC5sYWJlbCkuZGlzcG9zZSgpOworCQkJCQlzZWxmLnNob3dFcnJvcihzZWxmLmxhbmd1YWdlLmZsYXNoW2Vycm9yXSB8fCBzZWxmLmxhbmd1YWdlLmZsYXNoLmZsYXNoKTsKKwkJCQl9CisJCQl9LAorCisJCQlvbkxvYWQ6IGZ1bmN0aW9uKCkgeworCQkJCXNlbGYuZGlhZy5sb2coJ0ZsYXNoVXBsb2FkZXI6IG9uTG9hZCcsIGFyZ3VtZW50cywgJywgZmlsZUxpc3Q6ICcsIHNlbGYuc3dmLmZpbGVMaXN0KTsKKwkJCX0sCisJCQlvblN0YXJ0OiBmdW5jdGlvbigpIHsKKwkJCQlzZWxmLmRpYWcubG9nKCdGbGFzaFVwbG9hZGVyOiBvblN0YXJ0JywgYXJndW1lbnRzLCAnLCBmaWxlTGlzdDogJywgc2VsZi5zd2YuZmlsZUxpc3QpOworCQkJfSwKKwkJCW9uUXVldWU6IGZ1bmN0aW9uKCkgeworCQkJCXNlbGYuZGlhZy5sb2coJ0ZsYXNoVXBsb2FkZXI6IG9uUXVldWUnLCBhcmd1bWVudHMsICcsIGZpbGVMaXN0OiAnLCBzZWxmLnN3Zi5maWxlTGlzdCk7CisJCQl9LAorCQkJb25Ccm93c2U6IGZ1bmN0aW9uKCkgeworCQkJCXNlbGYuZGlhZy5sb2coJ0ZsYXNoVXBsb2FkZXI6IG9uQnJvd3NlJywgYXJndW1lbnRzLCAnLCBmaWxlTGlzdDogJywgc2VsZi5zd2YuZmlsZUxpc3QpOworCQkJfSwKKwkJCW9uRGlzYWJsZWRCcm93c2U6IGZ1bmN0aW9uKCkgeworCQkJCXNlbGYuZGlhZy5sb2coJ0ZsYXNoVXBsb2FkZXI6IG9uRGlzYWJsZWRCcm93c2UnLCBhcmd1bWVudHMsICcsIGZpbGVMaXN0OiAnLCBzZWxmLnN3Zi5maWxlTGlzdCk7CisJCQl9LAorCQkJb25DYW5jZWw6IGZ1bmN0aW9uKCkgeworCQkJCXNlbGYuZGlhZy5sb2coJ0ZsYXNoVXBsb2FkZXI6IG9uQ2FuY2VsJywgYXJndW1lbnRzLCAnLCBmaWxlTGlzdDogJywgc2VsZi5zd2YuZmlsZUxpc3QpOworCQkJfSwKKwkJCW9uU2VsZWN0OiBmdW5jdGlvbigpIHsKKwkJCQlzZWxmLmRpYWcubG9nKCdGbGFzaFVwbG9hZGVyOiBvblNlbGVjdCcsIGFyZ3VtZW50cywgJywgZmlsZUxpc3Q6ICcsIHNlbGYuc3dmLmZpbGVMaXN0KTsKKwkJCX0sCisJCQlvblNlbGVjdEZhaWw6IGZ1bmN0aW9uKCkgeworCQkJCXNlbGYuZGlhZy5sb2coJ0ZsYXNoVXBsb2FkZXI6IG9uU2VsZWN0RmFpbCcsIGFyZ3VtZW50cywgJywgZmlsZUxpc3Q6ICcsIHNlbGYuc3dmLmZpbGVMaXN0KTsKKwkJCX0sCisKKwkJCW9uQnV0dG9uRW50ZXI6IGZ1bmN0aW9uKCkgeworCQkJCXNlbGYuZGlhZy5sb2coJ0ZsYXNoVXBsb2FkZXI6IG9uQnV0dG9uRW50ZXInLCBhcmd1bWVudHMsICcsIGZpbGVMaXN0OiAnLCBzZWxmLnN3Zi5maWxlTGlzdCk7CisJCQl9LAorCQkJb25CdXR0b25MZWF2ZTogZnVuY3Rpb24oKSB7CisJCQkJc2VsZi5kaWFnLmxvZygnRmxhc2hVcGxvYWRlcjogb25CdXR0b25MZWF2ZScsIGFyZ3VtZW50cywgJywgZmlsZUxpc3Q6ICcsIHNlbGYuc3dmLmZpbGVMaXN0KTsKKwkJCX0sCisJCQlvbkJ1dHRvbkRvd246IGZ1bmN0aW9uKCkgeworCQkJCXNlbGYuZGlhZy5sb2coJ0ZsYXNoVXBsb2FkZXI6IG9uQnV0dG9uRG93bicsIGFyZ3VtZW50cywgJywgZmlsZUxpc3Q6ICcsIHNlbGYuc3dmLmZpbGVMaXN0KTsKKwkJCX0sCisJCQlvbkJ1dHRvbkRpc2FibGU6IGZ1bmN0aW9uKCkgeworCQkJCXNlbGYuZGlhZy5sb2coJ0ZsYXNoVXBsb2FkZXI6IG9uQnV0dG9uRGlzYWJsZScsIGFyZ3VtZW50cywgJywgZmlsZUxpc3Q6ICcsIHNlbGYuc3dmLmZpbGVMaXN0KTsKKwkJCX0sCisKKwkJCW9uRmlsZVN0YXJ0OiBmdW5jdGlvbigpIHsKKwkJCQlzZWxmLmRpYWcubG9nKCdGbGFzaFVwbG9hZGVyOiBvbkZpbGVTdGFydCcsIGFyZ3VtZW50cywgJywgZmlsZUxpc3Q6ICcsIHNlbGYuc3dmLmZpbGVMaXN0KTsKKwkJCX0sCisJCQlvbkZpbGVTdG9wOiBmdW5jdGlvbigpIHsKKwkJCQlzZWxmLmRpYWcubG9nKCdGbGFzaFVwbG9hZGVyOiBvbkZpbGVTdG9wJywgYXJndW1lbnRzLCAnLCBmaWxlTGlzdDogJywgc2VsZi5zd2YuZmlsZUxpc3QpOworCQkJfSwKKwkJCW9uRmlsZVJlcXVldWU6IGZ1bmN0aW9uKCkgeworCQkJCXNlbGYuZGlhZy5sb2coJ0ZsYXNoVXBsb2FkZXI6IG9uRmlsZVJlcXVldWUnLCBhcmd1bWVudHMsICcsIGZpbGVMaXN0OiAnLCBzZWxmLnN3Zi5maWxlTGlzdCk7CisJCQl9LAorCQkJb25GaWxlT3BlbjogZnVuY3Rpb24oKSB7CisJCQkJc2VsZi5kaWFnLmxvZygnRmxhc2hVcGxvYWRlcjogb25GaWxlT3BlbicsIGFyZ3VtZW50cywgJywgZmlsZUxpc3Q6ICcsIHNlbGYuc3dmLmZpbGVMaXN0KTsKKwkJCX0sCisJCQlvbkZpbGVQcm9ncmVzczogZnVuY3Rpb24oKSB7CisJCQkJc2VsZi5kaWFnLmxvZygnRmxhc2hVcGxvYWRlcjogb25GaWxlUHJvZ3Jlc3MnLCBhcmd1bWVudHMsICcsIGZpbGVMaXN0OiAnLCBzZWxmLnN3Zi5maWxlTGlzdCk7CisJCQl9LAorCQkJb25GaWxlUmVtb3ZlOiBmdW5jdGlvbigpIHsKKwkJCQlzZWxmLmRpYWcubG9nKCdGbGFzaFVwbG9hZGVyOiBvbkZpbGVSZW1vdmUnLCBhcmd1bWVudHMsICcsIGZpbGVMaXN0OiAnLCBzZWxmLnN3Zi5maWxlTGlzdCk7CisJCQl9LAorCisJCQlvbkJlZm9yZVN0YXJ0OiBmdW5jdGlvbigpIHsKKwkJCQlzZWxmLmRpYWcubG9nKCdGbGFzaFVwbG9hZGVyOiBvbkJlZm9yZVN0YXJ0JywgYXJndW1lbnRzLCAnLCBmaWxlTGlzdDogJywgc2VsZi5zd2YuZmlsZUxpc3QpOworCQkJfSwKKwkJCW9uQmVmb3JlU3RvcDogZnVuY3Rpb24oKSB7CisJCQkJc2VsZi5kaWFnLmxvZygnRmxhc2hVcGxvYWRlcjogb25CZWZvcmVTdG9wJywgYXJndW1lbnRzLCAnLCBmaWxlTGlzdDogJywgc2VsZi5zd2YuZmlsZUxpc3QpOworCQkJfSwKKwkJCW9uQmVmb3JlUmVtb3ZlOiBmdW5jdGlvbigpIHsKKwkJCQlzZWxmLmRpYWcubG9nKCdGbGFzaFVwbG9hZGVyOiBvbkJlZm9yZVJlbW92ZScsIGFyZ3VtZW50cywgJywgZmlsZUxpc3Q6ICcsIHNlbGYuc3dmLmZpbGVMaXN0KTsKKwkJCX0KKwkJfSk7CisJfQorfSk7CisKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Tb3VyY2UvVXBsb2FkZXIvRnguUHJvZ3Jlc3NCYXIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvU291cmNlL1VwbG9hZGVyL0Z4LlByb2dyZXNzQmFyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNTA4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvU291cmNlL1VwbG9hZGVyL0Z4LlByb2dyZXNzQmFyLmpzCkBAIC0wLDAgKzEsNzggQEAKKy8qCistLS0KK25hbWU6IEZ4LlByb2dyZXNzQmFyCisKK2Rlc2NyaXB0aW9uOiBGeC5Qcm9ncmVzc0JhcgorCityZXF1aXJlczogW0NvcmUvRnguVHJhbnNpdGlvbnMsIENvcmUvRngsIENvcmUvQ2xhc3NdCisKK3Byb3ZpZGVzOiBbRnguUHJvZ3Jlc3NCYXJdCisKK3ZlcnNpb246IDEuMQorCitsaWNlbnNlOiBNSVQgTGljZW5zZQorCithdXRob3I6IEhhcmFsZCBLaXJzY2huZXIgPGh0dHA6Ly9kaWdpdGFyYWxkLmRlPgorLi4uCisqLworCitGeC5Qcm9ncmVzc0JhciA9IG5ldyBDbGFzcyh7CisKKyAgRXh0ZW5kczogRngsCisKKyAgb3B0aW9uczogeworICAgIHRleHQ6IG51bGwsCisgICAgdXJsOiBudWxsLAorICAgIHRyYW5zaXRpb246IEZ4LlRyYW5zaXRpb25zLkNpcmMuZWFzZU91dCwKKyAgICBmaXQ6IHRydWUsCisgICAgbGluazogJ2NhbmNlbCcKKyAgfSwKKworICBpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuaWQoZWxlbWVudCk7CisgICAgdGhpcy5wYXJlbnQob3B0aW9ucyk7CisKKyAgICB2YXIgdXJsID0gdGhpcy5vcHRpb25zLnVybDsKKyAgICBpZiAodXJsKSB7CisgICAgICB0aGlzLmVsZW1lbnQuc2V0U3R5bGVzKHsKKyAgICAgICAgJ2JhY2tncm91bmQtaW1hZ2UnOiAndXJsKCcgKyB1cmwgKyAnKScsCisgICAgICAgICdiYWNrZ3JvdW5kLXJlcGVhdCc6ICduby1yZXBlYXQnCisgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAodGhpcy5vcHRpb25zLmZpdCkgeworICAgICAgdXJsID0gdXJsIHx8IHRoaXMuZWxlbWVudC5nZXRTdHlsZSgnYmFja2dyb3VuZC1pbWFnZScpLnJlcGxhY2UoL151cmxcKFsiJ10/fFsiJ10/XCkkL2csICcnKTsKKyAgICAgIGlmICh1cmwpIHsKKyAgICAgICAgdmFyIGZpbGwgPSBuZXcgSW1hZ2UoKTsKKyAgICAgICAgZmlsbC5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICB0aGlzLmZpbGwgPSBmaWxsLndpZHRoOworICAgICAgICAgIGZpbGwgPSBmaWxsLm9ubG9hZCA9IG51bGw7CisgICAgICAgICAgdGhpcy5zZXQodGhpcy5ub3cgfHwgMCk7CisgICAgICAgIH0uYmluZCh0aGlzKTsKKyAgICAgICAgZmlsbC5zcmMgPSB1cmw7CisgICAgICAgIGlmICghdGhpcy5maWxsICYmIGZpbGwud2lkdGgpIGZpbGwub25sb2FkKCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMuc2V0KDApOworICAgIH0KKyAgfSwKKworICBzdGFydDogZnVuY3Rpb24odG8sIHRvdGFsKSB7CisgICAgcmV0dXJuIHRoaXMucGFyZW50KHRoaXMubm93LCAoYXJndW1lbnRzLmxlbmd0aCA9PSAxIHx8ICF0b3RhbCkgPyB0by5saW1pdCgwLCAxMDApIDogdG8gLyB0b3RhbCAqIDEwMCk7CisgIH0sCisKKyAgc2V0OiBmdW5jdGlvbih0bykgeworICAgIHRoaXMubm93ID0gdG87CisgICAgdmFyIGNzcyA9ICh0aGlzLmZpbGwpCisgICAgICA/ICgoKHRoaXMuZmlsbCAvIC0yKSArICh0byAvIDEwMCkgKiAodGhpcy5lbGVtZW50LndpZHRoIHx8IDEpIHx8IDApLnJvdW5kKCkgKyAncHgnKQorICAgICAgOiAoKDEwMCAtIHRvKSArICclJyk7CisKKyAgICB0aGlzLmVsZW1lbnQuc2V0U3R5bGUoJ2JhY2tncm91bmRQb3NpdGlvbicsIGNzcyArICcgMHB4JykudGl0bGUgPSBNYXRoLnJvdW5kKHRvKSArICclJzsKKworICAgIHZhciB0ZXh0ID0gZG9jdW1lbnQuaWQodGhpcy5vcHRpb25zLnRleHQpOworICAgIGlmICh0ZXh0KSB0ZXh0LnNldCgndGV4dCcsIE1hdGgucm91bmQodG8pICsgJyUnKTsKKworICAgIHJldHVybiB0aGlzOworICB9CisKK30pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvTW9vdG9vbHNGaWxlTWFuYWdlci9tb290b29scy1maWxlbWFuYWdlci9Tb3VyY2UvVXBsb2FkZXIvU3dpZmYuVXBsb2FkZXIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvU291cmNlL1VwbG9hZGVyL1N3aWZmLlVwbG9hZGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5Njk5MjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL01vb3Rvb2xzRmlsZU1hbmFnZXIvbW9vdG9vbHMtZmlsZW1hbmFnZXIvU291cmNlL1VwbG9hZGVyL1N3aWZmLlVwbG9hZGVyLmpzCkBAIC0wLDAgKzEsNTA4IEBACisvKgorLS0tCituYW1lOiBTd2lmZi5VcGxvYWRlcgorCitkZXNjcmlwdGlvbjogU3dpZmYuVXBsb2FkZXIgLSBGbGFzaCBGaWxlUmVmZXJlbmNlIENvbnRyb2wKKworcmVxdWlyZXM6IFtDb3JlL1N3aWZmLCBDb3JlL0Z4LCBDb3JlL0NsYXNzLCBDb3JlL0NsYXNzLkV4dHJhcywgQ29yZS9Ccm93c2VyLCBDb3JlL0VsZW1lbnRdCisKK3Byb3ZpZGVzOiBbU3dpZmYuVXBsb2FkZXIsIFN3aWZmLlVwbG9hZGVyLkZpbGVdCisKK3ZlcnNpb246IDMuMAorCitsaWNlbnNlOiBNSVQgTGljZW5zZQorCithdXRob3I6IEhhcmFsZCBLaXJzY2huZXIgPGh0dHA6Ly9kaWdpdGFyYWxkLmRlPgorYXV0aG9yOiBWYWxlcmlvIFByb2lldHRpLCA8aHR0cDovL21hZDRtaWxrLm5ldD4KKy4uLgorKi8KKworU3dpZmYuVXBsb2FkZXIgPSBuZXcgQ2xhc3MoeworCisgIEV4dGVuZHM6IFN3aWZmLAorCisgIEltcGxlbWVudHM6IEV2ZW50cywKKworICBvcHRpb25zOiB7CisgICAgcGF0aDogJ1N3aWZmLlVwbG9hZGVyLnN3ZicsCisKKyAgICB0YXJnZXQ6IG51bGwsCisgICAgekluZGV4OiA5OTk5LAorCisgICAgY2FsbEJhY2tzOiBudWxsLAorICAgIHBhcmFtczogeworICAgICAgd01vZGU6ICdvcGFxdWUnLAorICAgICAgbWVudTogJ2ZhbHNlJywKKyAgICAgIGFsbG93U2NyaXB0QWNjZXNzOiAnYWx3YXlzJworICAgIH0sCisKKyAgICB0eXBlRmlsdGVyOiBudWxsLAorICAgIG11bHRpcGxlOiB0cnVlLAorICAgIHF1ZXVlZDogdHJ1ZSwKKyAgICB2ZXJib3NlOiBmYWxzZSwKKyAgICBoZWlnaHQ6IDMwLAorICAgIHdpZHRoOiAxMDAsCisgICAgcGFzc1N0YXR1czogbnVsbCwKKworICAgIHVybDogbnVsbCwKKyAgICBtZXRob2Q6IG51bGwsCisgICAgZGF0YTogbnVsbCwKKyAgICBtZXJnZURhdGE6IHRydWUsCisgICAgZmllbGROYW1lOiBudWxsLAorCisgICAgZmlsZVNpemVNaW46IDEsCisgICAgZmlsZVNpemVNYXg6IG51bGwsIC8vIE9mZmljaWFsIGxpbWl0IGlzIDEwMCBNQiBmb3IgRmlsZVJlZmVyZW5jZSwgYnV0IEkgdGVzdGVkIHVwIHRvIDJHYiEKKyAgICBhbGxvd0R1cGxpY2F0ZXM6IGZhbHNlLAorICAgIHRpbWVMaW1pdDogKEJyb3dzZXIuUGxhdGZvcm0ubGludXgpID8gMCA6IDMwLAorCisgICAgcG9saWN5RmlsZTogbnVsbCwKKyAgICBidXR0b25JbWFnZTogbnVsbCwKKworICAgIGZpbGVMaXN0TWF4OiAwLAorICAgIGZpbGVMaXN0U2l6ZU1heDogMCwKKworICAgIGluc3RhbnRTdGFydDogZmFsc2UsCisgICAgYXBwZW5kQ29va2llRGF0YTogZmFsc2UsCisKKyAgICBmaWxlQ2xhc3M6IG51bGwKKyAgICAvKgorICAgIG9uTG9hZDogZnVuY3Rpb24oKXt9LAorICAgIG9uRmFpbDogZnVuY3Rpb24oKXt9LAorICAgIG9uU3RhcnQ6IGZ1bmN0aW9uKCl7fSwKKyAgICBvblF1ZXVlOiBmdW5jdGlvbigpe30sCisgICAgb25Db21wbGV0ZTogZnVuY3Rpb24oKXt9LAorICAgIG9uQnJvd3NlOiBmdW5jdGlvbigpe30sCisgICAgb25EaXNhYmxlZEJyb3dzZTogZnVuY3Rpb24oKXt9LAorICAgIG9uQ2FuY2VsOiBmdW5jdGlvbigpe30sCisgICAgb25TZWxlY3Q6IGZ1bmN0aW9uKCl7fSwKKyAgICBvblNlbGVjdFN1Y2Nlc3M6IGZ1bmN0aW9uKCl7fSwKKyAgICBvblNlbGVjdEZhaWw6IGZ1bmN0aW9uKCl7fSwKKworICAgIG9uQnV0dG9uRW50ZXI6IGZ1bmN0aW9uKCl7fSwKKyAgICBvbkJ1dHRvbkxlYXZlOiBmdW5jdGlvbigpe30sCisgICAgb25CdXR0b25Eb3duOiBmdW5jdGlvbigpe30sCisgICAgb25CdXR0b25EaXNhYmxlOiBmdW5jdGlvbigpe30sCisKKyAgICBvbkZpbGVTdGFydDogZnVuY3Rpb24oKXt9LAorICAgIG9uRmlsZVN0b3A6IGZ1bmN0aW9uKCl7fSwKKyAgICBvbkZpbGVSZXF1ZXVlOiBmdW5jdGlvbigpe30sCisgICAgb25GaWxlT3BlbjogZnVuY3Rpb24oKXt9LAorICAgIG9uRmlsZVByb2dyZXNzOiBmdW5jdGlvbigpe30sCisgICAgb25GaWxlQ29tcGxldGU6IGZ1bmN0aW9uKCl7fSwKKyAgICBvbkZpbGVSZW1vdmU6IGZ1bmN0aW9uKCl7fSwKKworICAgIG9uQmVmb3JlU3RhcnQ6IGZ1bmN0aW9uKCl7fSwKKyAgICBvbkJlZm9yZVN0b3A6IGZ1bmN0aW9uKCl7fSwKKyAgICBvbkJlZm9yZVJlbW92ZTogZnVuY3Rpb24oKXt9CisgICAgKi8KKyAgfSwKKworICBpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKSB7CisgICAgLy8gcHJvdGVjdGVkIGV2ZW50cyB0byBjb250cm9sIHRoZSBjbGFzcywgYWRkZWQKKyAgICAvLyBiZWZvcmUgc2V0dGluZyBvcHRpb25zICh3aGljaCBhZGRzIG93biBldmVudHMpCisgICAgdGhpcy5hZGRFdmVudCgnbG9hZCcsIHRoaXMuaW5pdGlhbGl6ZVN3aWZmLCB0cnVlKQorICAgICAgLmFkZEV2ZW50KCdzZWxlY3QnLCB0aGlzLnByb2Nlc3NGaWxlcywgdHJ1ZSkKKyAgICAgIC5hZGRFdmVudCgnY29tcGxldGUnLCB0aGlzLnVwZGF0ZSwgdHJ1ZSkKKyAgICAgIC5hZGRFdmVudCgnZmlsZVJlbW92ZScsIGZ1bmN0aW9uKGZpbGUpIHsKKyAgICAgICAgdGhpcy5maWxlTGlzdC5lcmFzZShmaWxlKTsKKyAgICAgIH0uYmluZCh0aGlzKSwgdHJ1ZSk7CisKKyAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7CisKKyAgICAvLyBjYWxsYmFja3MgYXJlIG5vIGxvbmdlciBpbiB0aGUgb3B0aW9ucywgZXZlcnkgY2FsbGJhY2sKKyAgICAvLyBpcyBmaXJlZCBhcyBldmVudCwgdGhpcyBpcyBqdXN0IGNvbXBhdAorICAgIGlmICh0aGlzLm9wdGlvbnMuY2FsbEJhY2tzKSB7CisgICAgICBPYmplY3QuZWFjaCh0aGlzLm9wdGlvbnMuY2FsbEJhY2tzLCBmdW5jdGlvbihmbiwgbmFtZSkgeworICAgICAgICB0aGlzLmFkZEV2ZW50KG5hbWUsIGZuKTsKKyAgICAgIH0sIHRoaXMpOworICAgIH0KKworICAgIHRoaXMub3B0aW9ucy5jYWxsQmFja3MgPSB7CisgICAgICBmaXJlQ2FsbGJhY2s6IHRoaXMuZmlyZUNhbGxiYWNrLmJpbmQodGhpcykKKyAgICB9OworCisgICAgdmFyIHBhdGggPSB0aGlzLm9wdGlvbnMucGF0aDsKKyAgICBpZiAoIXBhdGguY29udGFpbnMoJz8nKSkgcGF0aCArPSAnP25vQ2FjaGU9JyArIERhdGUubm93KCk7IC8vIGNhY2hlIGluIElFCisKKyAgICAvLyBjb250YWluZXIgb3B0aW9ucyBmb3IgU3dpZmYgY2xhc3MKKyAgICB0aGlzLm9wdGlvbnMuY29udGFpbmVyID0gdGhpcy5ib3ggPSBuZXcgRWxlbWVudCgnc3BhbicsIHsnY2xhc3MnOiAnc3dpZmYtdXBsb2FkZXItYm94JyxldmVudHM6IHsgY2xpY2s6IGZ1bmN0aW9uKGUpIHsgZS5zdG9wUHJvcGFnYXRpb24oKTsgfSB9fSkuaW5qZWN0KGRvY3VtZW50LmlkKHRoaXMub3B0aW9ucy5jb250YWluZXIpIHx8IGRvY3VtZW50LmJvZHkpOworCisgICAgLy8gdGFyZ2V0CisgICAgdGhpcy50YXJnZXQgPSBkb2N1bWVudC5pZCh0aGlzLm9wdGlvbnMudGFyZ2V0KTsKKyAgICBpZih0aGlzLnRhcmdldCkgeworICAgICAgdmFyIHNjcm9sbCA9IHdpbmRvdy5nZXRTY3JvbGwoKTsKKyAgICAgIHRoaXMuYm94LnNldFN0eWxlcyh7CisgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLAorICAgICAgICB2aXNpYmlsaXR5OiAndmlzaWJsZScsCisgICAgICAgIHpJbmRleDogdGhpcy5vcHRpb25zLnpJbmRleCwKKyAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLAorICAgICAgICBoZWlnaHQ6IDEsIHdpZHRoOiAxLAorICAgICAgICB0b3A6IHNjcm9sbC55LCBsZWZ0OiBzY3JvbGwueAorICAgICAgfSk7CisKKyAgICAgIC8vIHdlIGZvcmNlIHdNb2RlIHRvIHRyYW5zcGFyZW50IGZvciB0aGUgb3ZlcmxheSBlZmZlY3QKKyAgICAgIHRoaXMucGFyZW50KHBhdGgsIHsKKyAgICAgICAgcGFyYW1zOiB7CisgICAgICAgICAgd01vZGU6ICd0cmFuc3BhcmVudCcKKyAgICAgICAgfSwKKyAgICAgICAgaGVpZ2h0OiAnMTAwJScsCisgICAgICAgIHdpZHRoOiAnMTAwJScKKyAgICAgIH0pOworCisgICAgICB0aGlzLnRhcmdldC5hZGRFdmVudCgnbW91c2VlbnRlcicsIHRoaXMucmVwb3NpdGlvbi5iaW5kKHRoaXMpKTsKKworICAgICAgLy8gYnV0dG9uIGludGVyYWN0aW9ucywgcmVsYXllZCB0byB0byB0aGUgdGFyZ2V0CisgICAgICB0aGlzLmFkZEV2ZW50cyh7CisgICAgICAgIGJ1dHRvbkVudGVyOiB0aGlzLnRhcmdldFJlbGF5LnBhc3MoJ21vdXNlZW50ZXInLHRoaXMpLAorICAgICAgICBidXR0b25MZWF2ZTogdGhpcy50YXJnZXRSZWxheS5wYXNzKCdtb3VzZWxlYXZlJyx0aGlzKSwKKyAgICAgICAgYnV0dG9uRG93bjogdGhpcy50YXJnZXRSZWxheS5wYXNzKCdtb3VzZWRvd24nLHRoaXMpLAorICAgICAgICBidXR0b25EaXNhYmxlOiB0aGlzLnRhcmdldFJlbGF5LnBhc3MoJ2Rpc2FibGUnLHRoaXMpCisgICAgICB9KTsKKworICAgICAgdGhpcy5yZXBvc2l0aW9uKCk7CisgICAgICB3aW5kb3cuYWRkRXZlbnQoJ3Jlc2l6ZScsIHRoaXMucmVwb3NpdGlvbi5iaW5kKHRoaXMpKTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy5wYXJlbnQocGF0aCk7CisgICAgfQorCisgICAgdGhpcy5pbmplY3QodGhpcy5ib3gpOworCisgICAgdGhpcy5maWxlTGlzdCA9IFtdOworCisgICAgdGhpcy5zaXplID0gdGhpcy51cGxvYWRpbmcgPSB0aGlzLmJ5dGVzTG9hZGVkID0gdGhpcy5wZXJjZW50TG9hZGVkID0gMDsKKworICAgIGlmIChCcm93c2VyLlBsdWdpbnMuRmxhc2gudmVyc2lvbiA8IDkpIHsKKyAgICAgIHRoaXMuZmlyZUV2ZW50KCdmYWlsJywgWydmbGFzaCddKTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy52ZXJpZnlMb2FkLmRlbGF5KDEwMDAsIHRoaXMpOworICAgIH0KKyAgfSwKKworICB2ZXJpZnlMb2FkOiBmdW5jdGlvbigpIHsKKyAgICBpZiAodGhpcy5sb2FkZWQpIHJldHVybjsKKyAgICBpZiAoIXRoaXMub2JqZWN0LnBhcmVudE5vZGUpIHsKKyAgICAgIHRoaXMuZmlyZUV2ZW50KCdmYWlsJywgWydkaXNhYmxlZCddKTsKKyAgICB9IGVsc2UgaWYgKHRoaXMub2JqZWN0LnN0eWxlLmRpc3BsYXkgPT0gJ25vbmUnKSB7CisgICAgICB0aGlzLmZpcmVFdmVudCgnZmFpbCcsIFsnaGlkZGVuJ10pOworICAgIH0gZWxzZSBpZiAoIXRoaXMub2JqZWN0Lm9mZnNldFdpZHRoKSB7CisgICAgICB0aGlzLmZpcmVFdmVudCgnZmFpbCcsIFsnZW1wdHknXSk7CisgICAgfQorICB9LAorCisgIGZpcmVDYWxsYmFjazogZnVuY3Rpb24obmFtZSwgYXJncykgeworICAgIC8vIGZpbGUqIGNhbGxiYWNrcyBhcmUgcmVsYXllZCB0byB0aGUgc3BlY2lmaWMgZmlsZQorICAgIGlmIChuYW1lLnN1YnN0cigwLCA0KSA9PSAnZmlsZScpIHsKKyAgICAgIC8vIHVwZGF0ZWQgcXVldWUgZGF0YSBpcyB0aGUgc2Vjb25kIGFyZ3VtZW50CisgICAgICBpZiAoYXJncy5sZW5ndGggPiAxKSB0aGlzLnVwZGF0ZShhcmdzWzFdKTsKKyAgICAgIHZhciBkYXRhID0gYXJnc1swXTsKKworICAgICAgdmFyIGZpbGUgPSB0aGlzLmZpbmRGaWxlKGRhdGEuaWQpOworICAgICAgdGhpcy5maXJlRXZlbnQobmFtZSwgZmlsZSB8fCBkYXRhLCA1KTsKKyAgICAgIGlmIChmaWxlKSB7CisgICAgICAgIHZhciBmaXJlID0gbmFtZS5yZXBsYWNlKC9eZmlsZShbQS1aXSkvLCBmdW5jdGlvbigkMCwgJDEpIHsKKyAgICAgICAgICByZXR1cm4gJDEudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGZpbGUudXBkYXRlKGRhdGEpLmZpcmVFdmVudChmaXJlLCBbZGF0YV0sIDEwKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgdGhpcy5maXJlRXZlbnQobmFtZSwgYXJncywgNSk7CisgICAgfQorICB9LAorCisgIHVwZGF0ZTogZnVuY3Rpb24oZGF0YSkgeworICAgIC8vIHRoZSBkYXRhIGlzIHNhdmVkIHJpZ2h0IHRvIHRoZSBpbnN0YW5jZQorICAgIE9iamVjdC5hcHBlbmQodGhpcywgZGF0YSk7CisgICAgdGhpcy5maXJlRXZlbnQoJ3F1ZXVlJywgW3RoaXNdLCAxMCk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0sCisKKyAgZmluZEZpbGU6IGZ1bmN0aW9uKGlkKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpbGVMaXN0Lmxlbmd0aDsgaSsrKSB7CisgICAgICBpZiAodGhpcy5maWxlTGlzdFtpXS5pZCA9PSBpZCkgcmV0dXJuIHRoaXMuZmlsZUxpc3RbaV07CisgICAgfQorICAgIHJldHVybiBudWxsOworICB9LAorCisgIGluaXRpYWxpemVTd2lmZjogZnVuY3Rpb24oKSB7CisgICAgdGhpcy5hcHBlbmRDb29raWVEYXRhKCk7ICAgICAgICAgIC8vIGxvb2tzIGxpa2UgdGhlcmUncyBhIGJpdCBvZiB0cm91YmxlIHdpdGggeFNldE9wdGlvbnMsIHNvIHdlIGNpcmN1bXZlbnQgaXQgYnkgcGFzc2luZyBpdCBhbGwgaW4gb25lIGdvIHRocm91Z2ggeEluaXRpYWxpemUKKwkvLyBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUubG9nKSBjb25zb2xlLmxvZygnaW5pdGlhbGl6ZVN3aWZmOiBkYXRhIGNvdW50ID0gJyArIHRoaXMub3B0aW9ucy5kYXRhLmxlbmd0aCArICcgOiAnICsgdGhpcy5vcHRpb25zLmRhdGEpOworCisgICAgLy8gZXh0cmFjdGVkIG9wdGlvbnMgZm9yIHRoZSBzd2YKKyAgICB0aGlzLnJlbW90ZSgneEluaXRpYWxpemUnLCB7CisgICAgICB0eXBlRmlsdGVyOiB0aGlzLm9wdGlvbnMudHlwZUZpbHRlciwKKyAgICAgIG11bHRpcGxlOiB0aGlzLm9wdGlvbnMubXVsdGlwbGUsCisgICAgICBxdWV1ZWQ6IHRoaXMub3B0aW9ucy5xdWV1ZWQsCisgICAgICB2ZXJib3NlOiB0aGlzLm9wdGlvbnMudmVyYm9zZSwKKyAgICAgIHdpZHRoOiB0aGlzLm9wdGlvbnMud2lkdGgsCisgICAgICBoZWlnaHQ6IHRoaXMub3B0aW9ucy5oZWlnaHQsCisgICAgICBwYXNzU3RhdHVzOiB0aGlzLm9wdGlvbnMucGFzc1N0YXR1cywKKyAgICAgIHVybDogdGhpcy5vcHRpb25zLnVybCwKKyAgICAgIG1ldGhvZDogdGhpcy5vcHRpb25zLm1ldGhvZCwKKyAgICAgIGRhdGE6IHRoaXMub3B0aW9ucy5kYXRhLAorICAgICAgbWVyZ2VEYXRhOiB0aGlzLm9wdGlvbnMubWVyZ2VEYXRhLAorICAgICAgZmllbGROYW1lOiB0aGlzLm9wdGlvbnMuZmllbGROYW1lLAorICAgICAgZmlsZVNpemVNaW46IHRoaXMub3B0aW9ucy5maWxlU2l6ZU1pbiwKKyAgICAgIGZpbGVTaXplTWF4OiB0aGlzLm9wdGlvbnMuZmlsZVNpemVNYXgsCisgICAgICBhbGxvd0R1cGxpY2F0ZXM6IHRoaXMub3B0aW9ucy5hbGxvd0R1cGxpY2F0ZXMsCisgICAgICB0aW1lTGltaXQ6IHRoaXMub3B0aW9ucy50aW1lTGltaXQsCisgICAgICBwb2xpY3lGaWxlOiB0aGlzLm9wdGlvbnMucG9saWN5RmlsZSwKKyAgICAgIGJ1dHRvbkltYWdlOiB0aGlzLm9wdGlvbnMuYnV0dG9uSW1hZ2UKKyAgICB9KTsKKworICAgIHRoaXMubG9hZGVkID0gdHJ1ZTsKKyAgfSwKKworICB0YXJnZXRSZWxheTogZnVuY3Rpb24obmFtZSkgeworICAgIGlmICh0aGlzLnRhcmdldCkgdGhpcy50YXJnZXQuZmlyZUV2ZW50KG5hbWUpOworICB9LAorCisgIHJlcG9zaXRpb246IGZ1bmN0aW9uKGNvb3JkcykgeworICAgIC8vIHVwZGF0ZSBjb29yZGluYXRlcywgbWFudWFsIG9yIGF1dG9tYXRpY2FsbHkKKyAgICBjb29yZHMgPSBjb29yZHMgfHwgKHRoaXMudGFyZ2V0ICYmIHRoaXMudGFyZ2V0Lm9mZnNldEhlaWdodCkgPyB0aGlzLnRhcmdldC5nZXRDb29yZGluYXRlcyh0aGlzLmJveC5nZXRPZmZzZXRQYXJlbnQoKSkgOiB7dG9wOiB3aW5kb3cuZ2V0U2Nyb2xsVG9wKCksIGxlZnQ6IDAsIHdpZHRoOiA0MCwgaGVpZ2h0OiA0MH07CisgICAgdGhpcy5ib3guc2V0U3R5bGVzKGNvb3Jkcyk7CisgICAgdGhpcy5maXJlRXZlbnQoJ3JlcG9zaXRpb24nLCBbY29vcmRzLCB0aGlzLmJveCwgdGhpcy50YXJnZXRdKTsKKyAgfSwKKworICBzZXRPcHRpb25zOiBmdW5jdGlvbihvcHRpb25zKSB7CisJLy8gaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLmxvZykgY29uc29sZS5sb2coJ1N3aWZmLlVwbG9hZGVyOiBCQVNFOjpzZXRPcHRpb25zJyk7CisgICAgaWYgKG9wdGlvbnMpIHsKKyAgICAgIGlmIChvcHRpb25zLnVybCkgb3B0aW9ucy51cmwgPSBTd2lmZi5VcGxvYWRlci5xdWFsaWZ5UGF0aChvcHRpb25zLnVybCk7CisgICAgICBpZiAob3B0aW9ucy5idXR0b25JbWFnZSkgb3B0aW9ucy5idXR0b25JbWFnZSA9IFN3aWZmLlVwbG9hZGVyLnF1YWxpZnlQYXRoKG9wdGlvbnMuYnV0dG9uSW1hZ2UpOworICAgICAgdGhpcy5wYXJlbnQob3B0aW9ucyk7CisgICAgICBpZiAodGhpcy5sb2FkZWQpIHsKKwkJdGhpcy5yZW1vdGUoJ3hTZXRPcHRpb25zJywgb3B0aW9ucyk7CisgICAgfQorICAgIH0KKyAgICByZXR1cm4gdGhpczsKKyAgfSwKKworICBzZXRFbmFibGVkOiBmdW5jdGlvbihzdGF0dXMpIHsKKyAgICB0aGlzLnJlbW90ZSgneFNldEVuYWJsZWQnLCBzdGF0dXMpOworICB9LAorCisgIHN0YXJ0OiBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmZpcmVFdmVudCgnYmVmb3JlU3RhcnQnKTsKKyAgICB0aGlzLnJlbW90ZSgneFN0YXJ0Jyk7CisgIH0sCisKKyAgc3RvcDogZnVuY3Rpb24oKSB7CisgICAgdGhpcy5maXJlRXZlbnQoJ2JlZm9yZVN0b3AnKTsKKyAgICB0aGlzLnJlbW90ZSgneFN0b3AnKTsKKyAgfSwKKworICByZW1vdmU6IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZmlyZUV2ZW50KCdiZWZvcmVSZW1vdmUnKTsKKyAgICB0aGlzLnJlbW90ZSgneFJlbW92ZScpOworICB9LAorCisgIGZpbGVTdGFydDogZnVuY3Rpb24oZmlsZSkgeworICAgIHRoaXMucmVtb3RlKCd4RmlsZVN0YXJ0JywgZmlsZS5pZCk7CisgIH0sCisKKyAgZmlsZVN0b3A6IGZ1bmN0aW9uKGZpbGUpIHsKKyAgICB0aGlzLnJlbW90ZSgneEZpbGVTdG9wJywgZmlsZS5pZCk7CisgIH0sCisKKyAgZmlsZVJlbW92ZTogZnVuY3Rpb24oZmlsZSkgeworICAgIHRoaXMucmVtb3RlKCd4RmlsZVJlbW92ZScsIGZpbGUuaWQpOworICB9LAorCisgIGZpbGVSZXF1ZXVlOiBmdW5jdGlvbihmaWxlKSB7CisgICAgdGhpcy5yZW1vdGUoJ3hGaWxlUmVxdWV1ZScsIGZpbGUuaWQpOworICB9LAorCisgIGFwcGVuZENvb2tpZURhdGE6IGZ1bmN0aW9uKCkgeworICAgIHZhciBhcHBlbmQgPSB0aGlzLm9wdGlvbnMuYXBwZW5kQ29va2llRGF0YTsKKwkvLyBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUubG9nKSBjb25zb2xlLmxvZygnYXBwZW5kQ29va2llRGF0YTogJyArICgxICogYXBwZW5kKSArICcgLyAnICsgYXBwZW5kKTsKKyAgICBpZiAoIWFwcGVuZCkgcmV0dXJuOworCisgICAgdmFyIGhhc2ggPSB7fTsKKyAgICAvL2lmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS5sb2cpIGNvbnNvbGUubG9nKCdhcHBlbmRDb29raWVEYXRhOiBFTlRJUkUgY29va2llOiAiJyArIGRvY3VtZW50LmNvb2tpZSArICciJyk7CisgICAgZG9jdW1lbnQuY29va2llLnNwbGl0KC87XHMqLykuZWFjaChmdW5jdGlvbihjb29raWUpIHsKKyAgICAgIGNvb2tpZSA9IGNvb2tpZS5zcGxpdCgnPScpOworICAgICAgLy9pZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUubG9nKSBjb25zb2xlLmxvZygnYXBwZW5kQ29va2llRGF0YTogY29va2llOiAiJyArIGNvb2tpZVswXSArICciKCcgKyBjb29raWUubGVuZ3RoICsgJykgPSAiJyArIChjb29raWUubGVuZ3RoID4gMSA/IGNvb2tpZVsxXSA6ICc/Pz8nKSArICciJyk7CisgICAgICBpZiAoY29va2llLmxlbmd0aCA9PSAyKSB7CisgICAgICAgIC8vaGFzaFsnXCInICsgZGVjb2RlVVJJQ29tcG9uZW50KGNvb2tpZVswXSkgKyAnXCInXSA9IGRlY29kZVVSSUNvbXBvbmVudChjb29raWVbMV0pOyAgICAvLyBhbGxvdyBzZXNzaW9uIElEcyBzdWNoIGFzIHRoZSBBU1AuTkVUIG9uZXMsIHdoaWNoIGNvbWUgd2l0aCBhIGRvdCwgZXRjLgorICAgICAgICBoYXNoW2RlY29kZVVSSUNvbXBvbmVudChjb29raWVbMF0pXSA9IGRlY29kZVVSSUNvbXBvbmVudChjb29raWVbMV0pOworICAgICAgfQorICAgIH0pOworCisgICAgdmFyIGRhdGEgPSB0aGlzLm9wdGlvbnMuZGF0YSB8fCB7fTsKKyAgICBpZiAodHlwZU9mKGFwcGVuZCkgPT0gJ3N0cmluZycpIHsKKyAgICAgIGRhdGFbYXBwZW5kXSA9IGhhc2g7CisgIH0gZWxzZSB7CisgICAgT2JqZWN0LmFwcGVuZChkYXRhLCBoYXNoKTsKKyAgfQorICAgIHRoaXMuc2V0T3B0aW9ucyh7ZGF0YTogZGF0YX0pOworICB9LAorCisgIHByb2Nlc3NGaWxlczogZnVuY3Rpb24oc3VjY2Vzc3JhdywgZmFpbHJhdywgcXVldWUpIHsKKyAgICB2YXIgY2xzID0gdGhpcy5vcHRpb25zLmZpbGVDbGFzcyB8fCBTd2lmZi5VcGxvYWRlci5GaWxlOworCisgICAgdmFyIGZhaWwgPSBbXSwgc3VjY2VzcyA9IFtdOworCisgICAgaWYgKHN1Y2Nlc3NyYXcpIHsKKyAgICAgIHN1Y2Nlc3NyYXcuZWFjaChmdW5jdGlvbihkYXRhKSB7CisgICAgICAgIHZhciByZXQgPSBuZXcgY2xzKHRoaXMsIGRhdGEpOworICAgICAgICBpZiAoIXJldC52YWxpZGF0ZSgpKSB7CisgICAgICAgICAgcmV0LnJlbW92ZS5kZWxheSgxMCwgcmV0KTsKKyAgICAgICAgICBmYWlsLnB1c2gocmV0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aGlzLnNpemUgKz0gZGF0YS5zaXplOworICAgICAgICAgIHRoaXMuZmlsZUxpc3QucHVzaChyZXQpOworICAgICAgICAgIHN1Y2Nlc3MucHVzaChyZXQpOworICAgICAgICAgIHJldC5yZW5kZXIoKTsKKyAgICAgICAgfQorICAgICAgfSwgdGhpcyk7CisKKyAgICAgIHRoaXMuZmlyZUV2ZW50KCdzZWxlY3RTdWNjZXNzJywgW3N1Y2Nlc3NdLCAxMCk7CisgICAgfQorCisgICAgaWYgKGZhaWxyYXcgfHwgZmFpbC5sZW5ndGgpIHsKKyAgICAgIGZhaWwuYXBwZW5kKChmYWlscmF3KSA/IGZhaWxyYXcubWFwKGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBjbHModGhpcywgZGF0YSk7CisgICAgICB9LCB0aGlzKSA6IFtdKS5lYWNoKGZ1bmN0aW9uKGZpbGUpIHsKKyAgICAgICAgZmlsZS5pbnZhbGlkYXRlKCkucmVuZGVyKCk7CisgICAgICB9KTsKKworICAgICAgdGhpcy5maXJlRXZlbnQoJ3NlbGVjdEZhaWwnLCBbZmFpbF0sIDEwKTsKKyAgICB9CisKKyAgICB0aGlzLnVwZGF0ZShxdWV1ZSk7CisKKyAgICBpZiAodGhpcy5vcHRpb25zLmluc3RhbnRTdGFydCAmJiBzdWNjZXNzLmxlbmd0aCkgdGhpcy5zdGFydCgpOworICB9CisKK30pOworCitPYmplY3QuYXBwZW5kKFN3aWZmLlVwbG9hZGVyLCB7CisKKyAgU1RBVFVTX1FVRVVFRDogMCwKKyAgU1RBVFVTX1JVTk5JTkc6IDEsCisgIFNUQVRVU19FUlJPUjogMiwKKyAgU1RBVFVTX0NPTVBMRVRFOiAzLAorICBTVEFUVVNfU1RPUFBFRDogNCwKKworICBsb2c6IGZ1bmN0aW9uKCkgeworICAgIGlmICh3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLmluZm8pIGNvbnNvbGUuaW5mby5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpOworICB9LAorCisgIHVuaXRMYWJlbHM6IHsKKyAgICBiOiBbe21pbjogMSwgdW5pdDogJ0InfSwge21pbjogMTAyNCwgdW5pdDogJ2tCJ30sIHttaW46IDEwNDg1NzYsIHVuaXQ6ICdNQid9LCB7bWluOiAxMDczNzQxODI0LCB1bml0OiAnR0InfV0sCisgICAgczogW3ttaW46IDEsIHVuaXQ6ICdzJ30sIHttaW46IDYwLCB1bml0OiAnbSd9LCB7bWluOiAzNjAwLCB1bml0OiAnaCd9LCB7bWluOiA4NjQwMCwgdW5pdDogJ2QnfV0KKyAgfSwKKworICBmb3JtYXRVbml0OiBmdW5jdGlvbihiYXNlLCB0eXBlLCBqb2luKSB7CisgICAgdmFyIGxhYmVscyA9IFN3aWZmLlVwbG9hZGVyLnVuaXRMYWJlbHNbKHR5cGUgPT0gJ2JwcycpID8gJ2InIDogdHlwZV07CisgICAgdmFyIGFwcGVuZCA9ICh0eXBlID09ICdicHMnKSA/ICcvcycgOiAnJzsKKyAgICB2YXIgaSwgbCA9IGxhYmVscy5sZW5ndGgsIHZhbHVlOworCisgICAgaWYgKGJhc2UgPCAxKSByZXR1cm4gJzAgJyArIGxhYmVsc1swXS51bml0ICsgYXBwZW5kOworCisgICAgaWYgKHR5cGUgPT0gJ3MnKSB7CisgICAgICB2YXIgdW5pdHMgPSBbXTsKKworICAgICAgZm9yIChpID0gbCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIHZhbHVlID0gTWF0aC5mbG9vcihiYXNlIC8gbGFiZWxzW2ldLm1pbik7CisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgIHVuaXRzLnB1c2godmFsdWUgKyAnICcgKyBsYWJlbHNbaV0udW5pdCk7CisgICAgICAgICAgYmFzZSAtPSB2YWx1ZSAqIGxhYmVsc1tpXS5taW47CisgICAgICAgICAgaWYgKCFiYXNlKSBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4gKGpvaW4gPT09IGZhbHNlKSA/IHVuaXRzIDogdW5pdHMuam9pbihqb2luIHx8ICcsICcpOworICAgIH0KKworICAgIGZvciAoaSA9IGwgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgdmFsdWUgPSBsYWJlbHNbaV0ubWluOworICAgICAgaWYgKGJhc2UgPj0gdmFsdWUpIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiAoYmFzZSAvIHZhbHVlKS50b0ZpeGVkKDEpICsgJyAnICsgbGFiZWxzW2ldLnVuaXQgKyBhcHBlbmQ7CisgIH0KKworfSk7CisKK1N3aWZmLlVwbG9hZGVyLnF1YWxpZnlQYXRoID0gKGZ1bmN0aW9uKCkgeworCisgIHZhciBhbmNob3I7CisKKyAgcmV0dXJuIGZ1bmN0aW9uKHBhdGgpIHsKKyAgICAoYW5jaG9yIHx8IChhbmNob3IgPSBuZXcgRWxlbWVudCgnYScpKSkuaHJlZiA9IHBhdGg7CisgICAgcmV0dXJuIGFuY2hvci5ocmVmOworICB9OworCit9KSgpOworCitTd2lmZi5VcGxvYWRlci5GaWxlID0gbmV3IENsYXNzKHsKKworICBJbXBsZW1lbnRzOiBFdmVudHMsCisKKyAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oYmFzZSwgZGF0YSkgeworICAgIHRoaXMuYmFzZSA9IGJhc2U7CisgICAgdGhpcy51cGRhdGUoZGF0YSk7CisgIH0sCisKKyAgdXBkYXRlOiBmdW5jdGlvbihkYXRhKSB7CisgICAgcmV0dXJuIE9iamVjdC5hcHBlbmQodGhpcywgZGF0YSk7CisgIH0sCisKKyAgdmFsaWRhdGU6IGZ1bmN0aW9uKCkgeworICAgIHZhciBvcHRpb25zID0gdGhpcy5iYXNlLm9wdGlvbnM7CisKKyAgICBpZiAob3B0aW9ucy5maWxlTGlzdE1heCAmJiB0aGlzLmJhc2UuZmlsZUxpc3QubGVuZ3RoID49IG9wdGlvbnMuZmlsZUxpc3RNYXgpIHsKKyAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yID0gJ2ZpbGVMaXN0TWF4JzsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAob3B0aW9ucy5maWxlTGlzdFNpemVNYXggJiYgKHRoaXMuYmFzZS5zaXplICsgdGhpcy5zaXplKSA+IG9wdGlvbnMuZmlsZUxpc3RTaXplTWF4KSB7CisgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvciA9ICdmaWxlTGlzdFNpemVNYXgnOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworICB9LAorCisgIGludmFsaWRhdGU6IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaW52YWxpZCA9IHRydWU7CisgICAgdGhpcy5iYXNlLmZpcmVFdmVudCgnZmlsZUludmFsaWQnLCB0aGlzLCAxMCk7CisgICAgcmV0dXJuIHRoaXMuZmlyZUV2ZW50KCdpbnZhbGlkJywgdGhpcywgMTApOworICB9LAorCisgIHJlbmRlcjogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXM7CisgIH0sCisKKyAgc2V0T3B0aW9uczogZnVuY3Rpb24ob3B0aW9ucykgeworCS8vaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLmxvZykgY29uc29sZS5sb2coJ1N3aWZmLlVwbG9hZGVyOiBGaWxlOjpzZXRPcHRpb25zJyk7CisgICAgaWYgKG9wdGlvbnMpIHsKKyAgICAgIGlmIChvcHRpb25zLnVybCkgeworCQlvcHRpb25zLnVybCA9IFN3aWZmLlVwbG9hZGVyLnF1YWxpZnlQYXRoKG9wdGlvbnMudXJsKTsKKyAgICB9CisgICAgICB0aGlzLmJhc2UucmVtb3RlKCd4RmlsZVNldE9wdGlvbnMnLCB0aGlzLmlkLCBvcHRpb25zKTsKKyAgICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5tZXJnZSh0aGlzLmJhc2Uub3B0aW9ucywgb3B0aW9ucyk7CisgICAgfQorICAgIHJldHVybiB0aGlzOworICB9LAorCisgIHN0YXJ0OiBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmJhc2UuZmlsZVN0YXJ0KHRoaXMpOworICAgIHJldHVybiB0aGlzOworICB9LAorCisgIHN0b3A6IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuYmFzZS5maWxlU3RvcCh0aGlzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfSwKKworICByZW1vdmU6IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuYmFzZS5maWxlUmVtb3ZlKHRoaXMpOworICAgIHJldHVybiB0aGlzOworICB9LAorCisgIHJlcXVldWU6IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuYmFzZS5maWxlUmVxdWV1ZSh0aGlzKTsKKyAgfQorCit9KTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L1Bhc3RlVGV4dC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L1Bhc3RlVGV4dC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWE4Y2EzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvUGFzdGVUZXh0LmpzCkBAIC0wLDAgKzEsMTQxIEBACisvLyBQYXN0ZSBQbGFpbiBUZXh0IHBsdWdpbiBmb3IgWGluaGENCisNCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBYaW5oYSBpdHNlbGYuDQorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLg0KKw0KK2Z1bmN0aW9uIFBhc3RlVGV4dChlZGl0b3IpIHsNCisJdGhpcy5lZGl0b3IgPSBlZGl0b3I7DQorCXZhciBjZmcgPSBlZGl0b3IuY29uZmlnOw0KKwl2YXIgc2VsZiA9IHRoaXM7DQorDQorCWNmZy5yZWdpc3RlckJ1dHRvbih7DQorCQlpZCAgICAgICA6ICJwYXN0ZXRleHQiLA0KKwkJdG9vbHRpcCAgOiB0aGlzLl9sYygiUGFzdGUgYXMgUGxhaW4gVGV4dCIpLA0KKwkJaW1hZ2UgICAgOiBlZGl0b3IuaW1nVVJMKCJlZF9wYXN0ZV90ZXh0LmdpZiIsICJQYXN0ZVRleHQiKSwNCisJCXRleHRNb2RlIDogZmFsc2UsDQorCQlhY3Rpb24gICA6IGZ1bmN0aW9uKCkgeyBzZWxmLnNob3coKTsgfQ0KKwl9KTsNCisNCisJY2ZnLmFkZFRvb2xiYXJFbGVtZW50KCJwYXN0ZXRleHQiLCBbInBhc3RlIiwgImtpbGx3b3JkIl0sIDEpOw0KK30NCisNCitQYXN0ZVRleHQuX3BsdWdpbkluZm8gPSB7DQorCW5hbWUgICAgICAgICAgOiAiUGFzdGVUZXh0IiwNCisJdmVyc2lvbiAgICAgICA6ICIxLjIiLA0KKwlkZXZlbG9wZXIgICAgIDogIk1pY2hhZWwgSGFycmlzIiwNCisJZGV2ZWxvcGVyX3VybCA6ICJodHRwOi8vd3d3LmpvbmVzYWR2aXNvcnlncm91cC5jb20iLA0KKwljX293bmVyICAgICAgIDogIkpvbmVzIEFkdmlzb3J5IEdyb3VwIiwNCisJc3BvbnNvciAgICAgICA6ICJKb25lcyBJbnRlcm5hdGlvbmFsIFVuaXZlcnNpdHkiLA0KKwlzcG9uc29yX3VybCAgIDogImh0dHA6Ly93d3cuam9uZXNpbnRlcm5hdGlvbmFsLmVkdSIsDQorCWxpY2Vuc2UgICAgICAgOiAiaHRtbEFyZWEiDQorfTsNCisNCitQYXN0ZVRleHQucHJvdG90eXBlLl9sYyA9IGZ1bmN0aW9uKHN0cmluZykgew0KKwlyZXR1cm4gWGluaGEuX2xjKHN0cmluZywgJ1Bhc3RlVGV4dCcpOw0KK307DQorDQorWGluaGEuQ29uZmlnLnByb3RvdHlwZS5QYXN0ZVRleHQgPQ0KK3sNCisJc2hvd1BhcmFncmFwaE9wdGlvbiA6IHRydWUsDQorCW5ld1BhcmFncmFwaERlZmF1bHQgOnRydWUNCit9DQorDQorUGFzdGVUZXh0LnByb3RvdHlwZS5vbkdlbmVyYXRlT25jZSA9IGZ1bmN0aW9uKCkNCit7DQorCXZhciBzZWxmID0gUGFzdGVUZXh0Ow0KKwlpZiAoc2VsZi5sb2FkaW5nKSByZXR1cm47DQorCXNlbGYubG9hZGluZyA9IHRydWU7DQorCVhpbmhhLl9nZXRiYWNrKFhpbmhhLmdldFBsdWdpbkRpcigiUGFzdGVUZXh0IikgKyAnL3BvcHVwcy9wYXN0ZV90ZXh0Lmh0bWwnLCBmdW5jdGlvbihnZXRiYWNrKSB7IHNlbGYuaHRtbCA9IGdldGJhY2s7fSk7DQorfTsNCisNCitQYXN0ZVRleHQucHJvdG90eXBlLl9wcmVwYXJlRGlhbG9nID0gZnVuY3Rpb24oKQ0KK3sNCisJdmFyIHNlbGYgPSB0aGlzOw0KKwl2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7DQorDQorCXZhciBzZWxmID0gdGhpczsNCisNCisvLy8gTm93IHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkLCBzbyB3ZSBjYW4gYnVpbGQgdGhlIGRpYWxvZy4NCisJdGhpcy5kaWFsb2cgPSBuZXcgWGluaGEuRGlhbG9nKGVkaXRvciwgUGFzdGVUZXh0Lmh0bWwsICdQYXN0ZVRleHQnLHt3aWR0aDozNTB9KQ0KKw0KKwkvLyBDb25uZWN0IHRoZSBPSyBhbmQgQ2FuY2VsIGJ1dHRvbnMNCisJdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ29rJykub25jbGljayA9IGZ1bmN0aW9uKCkge3NlbGYuYXBwbHkoKTt9DQorDQorCXRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdjYW5jZWwnKS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7IHNlbGYuZGlhbG9nLmhpZGUoKX07DQorDQorCS8vIGRvIHNvbWUgdHdlYWtpbmcgDQorCWlmIChlZGl0b3IuY29uZmlnLlBhc3RlVGV4dC5zaG93UGFyYWdyYXBoT3B0aW9uKQ0KKwl7DQorCQl0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgicGFyYWdyYXBoT3B0aW9uIikuc3R5bGUuZGlzcGxheSA9ICIiOw0KKwl9DQorCWlmIChlZGl0b3IuY29uZmlnLlBhc3RlVGV4dC5uZXdQYXJhZ3JhcGhEZWZhdWx0KQ0KKwl7DQorCQl0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgiaW5zZXJ0UGFyYWdyYXBocyIpLmNoZWNrZWQgPSB0cnVlOw0KKwl9DQorDQorCS8vIHdlIGNhbiBzZXR1cCBhIGN1c3RvbSBmdW5jdGlvbiB0aGF0IGNhcmVzIGZvciBzaXplcyBldGMuIHdoZW4gdGhlIGRpYWxvZyBpcyByZXNpemVkDQorCXRoaXMuZGlhbG9nLm9ucmVzaXplID0gZnVuY3Rpb24gKCkNCisJew0KKwkJdGhpcy5nZXRFbGVtZW50QnlJZCgiaW5wdXRBcmVhIikuc3R5bGUuaGVpZ2h0ID0gDQorCQlwYXJzZUludCh0aGlzLmhlaWdodCwxMCkgLy8gdGhlIGFjdHVhbCBoZWlnaHQgb2YgdGhlIGRpYWxvZw0KKwkJLSB0aGlzLmdldEVsZW1lbnRCeUlkKCdoMScpLm9mZnNldEhlaWdodCAvLyB0aGUgdGl0bGUgYmFyDQorCQktIHRoaXMuZ2V0RWxlbWVudEJ5SWQoJ2J1dHRvbnMnKS5vZmZzZXRIZWlnaHQgLy8gdGhlIGJ1dHRvbnMNCisJCS0gcGFyc2VJbnQodGhpcy5yb290RWxlbS5zdHlsZS5wYWRkaW5nQm90dG9tLDEwKSAvLyB3ZSBoYXZlIGEgcGFkZGluZyBhdCB0aGUgYm90dG9tLCBnb3R0YSB0YWtlIHRoaXMgaW50byBhY291bnQNCisJCSsgJ3B4JzsgLy8gZG9uJ3QgZm9yZ2V0IHRoaXMgOykNCisJCQ0KKwkJdGhpcy5nZXRFbGVtZW50QnlJZCgiaW5wdXRBcmVhIikuc3R5bGUud2lkdGggPSh0aGlzLndpZHRoIC0gMikgKyAncHgnOyAvLyBhbmQgdGhlIHdpZHRoDQorDQorCX0NCit9Ow0KKw0KK1Bhc3RlVGV4dC5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uKCkNCit7DQorCWlmICghdGhpcy5kaWFsb2cpIHRoaXMuX3ByZXBhcmVEaWFsb2coKTsNCisNCisJLy8gaGVyZSB3ZSBjYW4gcGFzcyB2YWx1ZXMgdG8gdGhlIGRpYWxvZw0KKwkvLyBlYWNoIHByb3BlcnR5IHBhaXIgY29uc2lzdHMgb2YgdGhlICJuYW1lIiBvZiB0aGUgaW5wdXQgd2Ugd2FudCB0byBwb3B1bGF0ZSwgYW5kIHRoZSB2YWx1ZSB0byBiZSBzZXQNCisJdmFyIGlucHV0cyA9DQorCXsNCisJCWlucHV0QXJlYSA6ICcnIC8vIHdlIHdhbnQgdGhlIHRleHRhcmVhIGFsd2F5cyB0byBiZSBlbXB0eSBvbiBzaG93aW5nDQorCX0NCisJLy8gbm93IGNhbGxpbmcgdGhlIHNob3cgbWV0aG9kIG9mIHRoZSBYaW5oYS5EaWFsb2cgb2JqZWN0IHRvIHNldCB0aGUgdmFsdWVzIGFuZCBzaG93IHRoZSBhY3R1YWwgZGlhbG9nDQorCXRoaXMuZGlhbG9nLnNob3coaW5wdXRzKTsNCisNCisJLy8gSW5pdCB0aGUgc2l6ZXMgKG9ubHkgaWYgd2UgaGF2ZSBzZXQgdXAgdGhlIGN1c3RvbSByZXNpemUgZnVuY3Rpb24pDQorCXRoaXMuZGlhbG9nLm9ucmVzaXplKCk7DQorDQorCXRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJpbnB1dEFyZWEiKS5mb2N1cygpOw0KK307DQorDQorLy8gYW5kIGZpbmFsbHkgLi4uIHRha2Ugc29tZSBhY3Rpb24NCitQYXN0ZVRleHQucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24oKQ0KK3sNCisJLy8gdGhlIGhpZGUgbWV0aG9kIG9mIHRoZSBkaWFsb2cgb2JqZWN0IHJldHVybnMgdGhlIHZhbHVlcyBvZiB0aGUgaW5wdXRzIEFORCBoaWRlcyB0aGUgZGlhbG9nDQorCS8vIGNvdWxkIGFsc28gdXNlIHRoaXMuZGlhbG9nLmdldFZhbHVlcygpIGhlcmUgYW5kIGhpZGUgaXQgYXQgdGhlIGVuZA0KKwl2YXIgcmV0dXJuVmFsdWVzID0gdGhpcy5kaWFsb2cuaGlkZSgpOw0KKwkNCisJdmFyIGh0bWwgPSByZXR1cm5WYWx1ZXMuaW5wdXRBcmVhOw0KKwl2YXIgaW5zZXJ0UGFyYWdyYXBocyA9IHJldHVyblZhbHVlcy5pbnNlcnRQYXJhZ3JhcGhzOw0KKwlodG1sID0gaHRtbC5yZXBsYWNlKC88L2csICImbHQ7Iik7DQorCWh0bWwgPSBodG1sLnJlcGxhY2UoLz4vZywgIiZndDsiKTsNCisJaWYgKCByZXR1cm5WYWx1ZXMuaW5zZXJ0UGFyYWdyYXBocykNCisJew0KKwkJaHRtbCA9IGh0bWwucmVwbGFjZSgvXHQvZywiJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Iik7DQorCQlodG1sID0gaHRtbC5yZXBsYWNlKC9cbisvZywiPC9wPjxwPiIpOw0KKwkJaHRtbD0iPHA+IiArIGh0bWwgKyAiPC9wPiI7DQorCQlpZiAoWGluaGEuaXNfaWUpDQorCQl7DQorCQkJdGhpcy5lZGl0b3IuaW5zZXJ0SFRNTChodG1sKTsNCisJCX0NCisJCWVsc2UNCisJCXsNCisgICAgICB0aGlzLmVkaXRvci5pbnNlcnRIVE1MKGh0bWwpOw0KKwkJCS8vIHRoaXMuZWRpdG9yLmV4ZWNDb21tYW5kKCJpbnNlcnRodG1sIixmYWxzZSxodG1sKTsNCisJCX0NCisJfQ0KKwllbHNlDQorCXsNCisJCWh0bWwgPSBodG1sLnJlcGxhY2UoL1xuL2csIjxiciAvPiIpOw0KKwkJdGhpcy5lZGl0b3IuaW5zZXJ0SFRNTChodG1sKTsNCisJfQ0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvaW1nL2VkX3Bhc3RlX3RleHQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvaW1nL2VkX3Bhc3RlX3RleHQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOWE2NDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9pbWcvZWRfcGFzdGVfdGV4dC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9jaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvY2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ3OGU0NAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvY2guanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi5Y+W5raIIiwKKyAgICAiT0siOiAi5aW9IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL2N6LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9jei5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmI5OTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9jei5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImN6IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJacnXFoWl0IiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvZGEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZmMwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL2RhLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGVyIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL2RlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYmE3ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgIkluc2VydCB0ZXh0IGluIG5ldyBwYXJhZ3JhcGgiOiAiTmV1ZSBBYnPDpHR6ZSBlaWbDvGdlbiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUGFzdGUgYXMgUGxhaW4gVGV4dCI6ICJ1bmZvcm1hdGllcnRlbiBUZXh0IGVpbmbDvGdlbiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9lZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvZWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE5MTZlOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvZWUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTG9vYnUiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9lbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZlMDA2YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvZWwuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciLAorICAgICJPSyI6ICLOlc69z4TOrM6+zrXOuSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYyM2MwZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvZXMuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlcyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICJPSyI6ICJBY2VwdGFyIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL2V1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9ldS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmM5ZGJiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9ldS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImV1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJVdHppIiwKKyAgICAiT0siOiAiQWRvcyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9mYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvZmEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlN2Y3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvZmEuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi2KfZhti12LHYp9mBIiwKKyAgICAiT0siOiAi2KjZhNmHIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL2ZpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9maS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjU1MmI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9maS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIiwKKyAgICAiT0siOiAiSHl2w6Rrc3kiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZmE4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsZXIiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBhc3RlIGFzIFBsYWluIFRleHQiOiAiQ29waWVyIGNvbW1lIHRleHRlIHB1ciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9oZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvaGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYwMmY3YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvaGUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJoZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgIk9LIjogIteQ15nXqdeV16giCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL2h1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzODUyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL2h1LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaHUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIk3DqWdzZW0iLAorICAgICJPSyI6ICJSZW5kYmVuIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9pdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGFjYjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9pdC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIml0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9qYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4YTMwMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvamEuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi5Lit5q2iIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQYXN0ZSBhcyBQbGFpbiBUZXh0IjogIuODl+ODrOODvOODs+ODhuOCreOCueODiOOBqOOBl+OBpuiyvOOCiuS7mOOBkSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMmUwMTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSwyOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICJDYW5jZWwiOiAiIiwKKyAgICAiSW5zZXJ0IHRleHQgaW4gbmV3IHBhcmFncmFwaCI6ICIiLAorICAgICJPSyI6ICIiLAorICAgICJQYXN0ZSBhcyBQbGFpbiBUZXh0IjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9sdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTE4OTA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9sdC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdMWhYXVrdGkiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9sdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvbHYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzZDVkMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvbHYuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXRjZWx0IiwKKyAgICAiT0siOiAiTGFiaSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9uYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNiNjRjNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvbmIuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJuYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAiT0siOiAiT0siLAorICAgICJQYXN0ZSBhcyBQbGFpbiBUZXh0IjogIkxpbSBpbm4gc29tIHJlbiB0ZWtzdCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9ubC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvbmwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY2OWYxNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvbmwuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJubCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQYXN0ZSBhcyBQbGFpbiBUZXh0IjogIktvcGllZXIgYWxzIHBsYXR0ZSB0ZWtzdCAoZ2VlbiBvcG1hYWspIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL3BsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9wbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDBmZGNlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9wbC5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInBsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBhc3RlIGFzIFBsYWluIFRleHQiOiAiV2tsZWogamFrbyBjenlzdHkgdGVrc3QiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDVlYjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTggQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQYXN0ZSBhcyBQbGFpbiBUZXh0IjogIkNvbGFyIHVtIHRleHRvIGLDoXNpY28iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJQYXN0ZSBUZXh0IjogIkNvbGFyIFRleHRvIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9yby5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvcm8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2ZTFjMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvcm8uanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJybyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKKyAgICAiT0siOiAiQWNjZXB0xIMiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvcnUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL3J1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMWEzODMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL3J1LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicnUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUGFzdGUgYXMgUGxhaW4gVGV4dCI6ICLQktGB0YLQsNCy0LjRgtGMINC60LDQuiDQvtCx0YvRh9C90YvQuSDRgtC10LrRgdGCIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL3NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9zaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmU3NmY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9zaC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL3NpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9zaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njc0ODkyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy9zaS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiLAorICAgICJPSyI6ICJWIHJlZHUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvc3IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL3NyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZWU2ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL3NyLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvc3YuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL3N2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MzM2ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL3N2LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3YiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL3RoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy90aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGE5YzhkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy90aC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLguKLguIHguYDguKXguLTguIEiLAorICAgICJPSyI6ICLguJXguIHguKXguIciCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L2xhbmcvdHIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL3RyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNGUyMmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgIk9LIjogIlRhbWFtIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9sYW5nL3ZuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy92bi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDgyZTAyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QYXN0ZVRleHQvbGFuZy92bi5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInZuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJI4buneSIsCisgICAgIk9LIjogIsSQ4buTbmcgw70iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUGFzdGVUZXh0L3BvcHVwcy9wYXN0ZV90ZXh0Lmh0bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9wb3B1cHMvcGFzdGVfdGV4dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTJlN2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Bhc3RlVGV4dC9wb3B1cHMvcGFzdGVfdGV4dC5odG1sCkBAIC0wLDAgKzEsOSBAQAorPGgxIGlkPSJbaDFdIj48bDEwbj5QYXN0ZSBhcyBQbGFpbiBUZXh0PC9sMTBuPjwvaDE+DQorPHRleHRhcmVhIG5hbWU9IltpbnB1dEFyZWFdIiBpZD0iW2lucHV0QXJlYV0iIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7aGVpZ2h0OjMwMHB4O2JvcmRlcjpub25lOyI+PC90ZXh0YXJlYT4NCis8ZGl2IGNsYXNzPSJidXR0b25zIiBpZD0iW2J1dHRvbnNdIj4NCis8bGFiZWwgc3R5bGU9ImZsb2F0OmxlZnQ7ZGlzcGxheTpub25lIiBpZD0iW3BhcmFncmFwaE9wdGlvbl0iPg0KKzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IltpbnNlcnRQYXJhZ3JhcGhzXSIgbmFtZT0iW2luc2VydFBhcmFncmFwaHNdIiB2YWx1ZT0ib24iIC8+IDxsMTBuPkluc2VydCB0ZXh0IGluIG5ldyBwYXJhZ3JhcGg8L2wxMG4+IA0KKzwvbGFiZWw+DQorICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0iW29rXSIgICAgIHZhbHVlPSJfKE9LKSIgICAgIC8+DQorICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0iW2NhbmNlbF0iIHZhbHVlPSJfKENhbmNlbCkiIC8+DQorPC9kaXY+DQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QcmVzZXJ2ZVNjcmlwdHMvUHJlc2VydmVTY3JpcHRzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QcmVzZXJ2ZVNjcmlwdHMvUHJlc2VydmVTY3JpcHRzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MTA0OTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1ByZXNlcnZlU2NyaXB0cy9QcmVzZXJ2ZVNjcmlwdHMuanMKQEAgLTAsMCArMSw4NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorUHJlc2VydmVTY3JpcHRzIGZvciBYaW5oYQorX19fX19fX19fX19fX19fX19fX18KK1JlcGxhY2UgYmxvY2tzIG9mIG9mIFBIUCBvciBKYXZhU2NyaXB0IHdpdGggaWNvbnMgaW4gdGhlIGVkaXRvciwgdGhpcyB3YXkgbWFraW5nIGl0IHBvc3NpYmxlIHRvIGVkaXQgc291cmNlY29kZSBjb250YWluaW5nIFBIUCwgCithbmQgcHJldmVudGluZyBKYXZhc2NyaXB0IGZyb20gYmVpbmcgYWNjaWRlbnRhbGx5IGRlbGV0ZWQgYmVjYXVzZSBpdCdzIG5vcm1hbGx5IGludmlzaWJsZQorCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2Z1bmN0aW9uIFByZXNlcnZlU2NyaXB0cyhlZGl0b3IpIHsKKwl0aGlzLmVkaXRvciA9IGVkaXRvcjsKK30KKworUHJlc2VydmVTY3JpcHRzLl9wbHVnaW5JbmZvID0geworICBuYW1lICAgICAgICAgIDogIlByZXNlcnZlU2NyaXB0cyIsCisgIHZlcnNpb24gICAgICAgOiAiMS4wIiwKKyAgZGV2ZWxvcGVyICAgICA6ICJSYWltdW5kIE1leWVyIiwKKyAgZGV2ZWxvcGVyX3VybCA6ICJodHRwOi8veC13ZWJzZXJ2aWNlLm5ldCIsCisgIGNfb3duZXIgICAgICAgOiAiUmFpbXVuZCBNZXllciIsCisgIHNwb25zb3IgICAgICAgOiAiIiwKKyAgc3BvbnNvcl91cmwgICA6ICIiLAorICBsaWNlbnNlICAgICAgIDogIkxHUEwiCit9CitYaW5oYS5Db25maWcucHJvdG90eXBlLlByZXNlcnZlU2NyaXB0cyA9Cit7CisJJ3ByZXNlcnZlUEhQJyA6IHRydWUsCisJJ3ByZXNlcnZlSlMnIDogdHJ1ZQorfQorUHJlc2VydmVTY3JpcHRzLnByb3RvdHlwZS5pbndhcmRIdG1sID0gZnVuY3Rpb24oaHRtbCkKK3sKKwl2YXIgcyA9IHRoaXM7CisJdmFyIGMgPSBzLmVkaXRvci5jb25maWcuUHJlc2VydmVTY3JpcHRzOworCXRoaXMuc3RvcmFnZSA9IHt9OyAvL2VtcHR5IHRoZSBjYWNoZQorCXZhciBpID0gMTsKKwl2YXIgaW5kZXg9MDsKKwlodG1sID0gaHRtbC5yZXBsYWNlKC9cbj88XD8ocGhwKT8oXHN8W15cc10pKj9cPz5cbj8vaWcsCisJCWZ1bmN0aW9uKG0pCisJCXsKKwkJCWlmICggYy5wcmVzZXJ2ZVBIUCApIC8vIGlmIGNvbmZpZyBzZXQgdG8gZmFsc2Ugd2lwZSBvdXQgcGhwIGNvbXBsZXRlbHksIG90aGVyd2lzZSB1Z2x5IGZyYWdtZW50cyBtYXkgcmVtYWluCisJCQl7CisJCQkJaW5kZXggPSBodG1sLmluZGV4T2YobSxpbmRleCk7CisJCQkJCisJCQkJaW5kZXgrPW0ubGVuZ3RoCisJCQkJCisJCQkJdmFyIGFmdGVyID0gaHRtbC5zdWJzdHJpbmcoIGluZGV4LCBodG1sLmxlbmd0aCApOworCQkJCQorCQkJCS8vc3RyaXAgb3V0IHBocAorCQkJCXMuc3RvcmFnZVsncHJlc2VydmVzY3JpcHRzXycraV0gPSBtOworCQkJCWFmdGVyPWFmdGVyLnJlcGxhY2UoL1xuPzxcPyhwaHApPyhcc3xbXlxzXSkqP1w/PlxuPy9pZywnJyk7CisJCQkJCisJCQkJaWYgKCBhZnRlci5tYXRjaCgvXltePF0qPi8pICkgLy8gbWFrZSBzdXJlIGN1cnNvciBpcyBpbiBhbiBlZGl0YWJsZSBhcmVhIChvdXRzaWRlIHRhZ3MsIHNjcmlwdCBibG9ja3MsIGVudGl0aWVzLCBhbmQgaW5zaWRlIHRoZSBib2R5KQorCQkJCXsKKwkJCQkJdmFyIHIgPSAnW3ByZXNlcnZlc2NyaXB0c18nK2krJ109cHJlc2VydmVzY3JpcHRzJzsKKwkJCQl9ZWxzZXsKKwkJCQkJdmFyIHIgPSAnPGltZyB0aXRsZT0iUEhQIiBpZD0icHJlc2VydmVzY3JpcHRzXycraSsnIiBzcmM9IicrWGluaGEuZ2V0UGx1Z2luRGlyKCJQcmVzZXJ2ZVNjcmlwdHMiKSsnL3BocC5wbmciIC8+JzsKKwkJCQl9CisJCQkJaSsrOworCQkJCXJldHVybiByOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXJldHVybiAnJzsKKwkJCX0KKwkJfSk7CisJaWYgKCBjLnByZXNlcnZlSlMgKQorCXsKKwkJaHRtbCA9IGh0bWwucmVwbGFjZSgvXG4/PHNjcmlwdChcc3xbXlxzXSkqPzxcL3NjcmlwdD5cbj8vZywKKwkJCWZ1bmN0aW9uKG0pCisJCQl7CisJCQkJcy5zdG9yYWdlWydwcmVzZXJ2ZXNjcmlwdHNfJytpXSA9IG07CisJCQkJdmFyIHIgPSAnPGltZyB0aXRsZT0iSmF2YVNjcmlwdCIgaWQ9InByZXNlcnZlc2NyaXB0c18nK2krJyIgc3JjPSInICsgWGluaGEuZ2V0UGx1Z2luRGlyKCJQcmVzZXJ2ZVNjcmlwdHMiKSArICcvanMucG5nIiAvPic7CisJCQkJaSsrOworCQkJCXJldHVybiByOworCQkJfSk7CQorCX0KKwlyZXR1cm4gaHRtbDsKK30KKworUHJlc2VydmVTY3JpcHRzLnByb3RvdHlwZS5vdXR3YXJkSHRtbCA9IGZ1bmN0aW9uKGh0bWwpCit7CisJdmFyIHMgPSB0aGlzOworCWh0bWwgPSBodG1sLnJlcGxhY2UoL1xbKHByZXNlcnZlc2NyaXB0c19cZCspXF0oPSJwcmVzZXJ2ZXNjcmlwdHMifD1wcmVzZXJ2ZXNjcmlwdHMpPy9nLGZ1bmN0aW9uKG0wLG0xKXtyZXR1cm4gcy5zdG9yYWdlW20xXTt9KTsKKwlodG1sID0gaHRtbC5yZXBsYWNlKC88aW1nW14+XSppZD0iKHByZXNlcnZlc2NyaXB0c19cZCspIltePl0qPi9nLGZ1bmN0aW9uKG0wLG0xKXtyZXR1cm4gcy5zdG9yYWdlW20xXTt9KTsKKwlyZXR1cm4gaHRtbDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1ByZXNlcnZlU2NyaXB0cy9qcy5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1ByZXNlcnZlU2NyaXB0cy9qcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFmNWU0MgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUHJlc2VydmVTY3JpcHRzL2pzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1ByZXNlcnZlU2NyaXB0cy9sYW5nL2xjX2Jhc2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1ByZXNlcnZlU2NyaXB0cy9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRjZDc4MQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUHJlc2VydmVTY3JpcHRzL2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDI2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgIkphdmFTY3JpcHQiOiAiIiwKKyAgICAiUEhQIjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1ByZXNlcnZlU2NyaXB0cy9waHAucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QcmVzZXJ2ZVNjcmlwdHMvcGhwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWJmZmIxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QcmVzZXJ2ZVNjcmlwdHMvcGhwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1ByZXNlcnZlU2NyaXB0cy9waHAuc3ZnIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QcmVzZXJ2ZVNjcmlwdHMvcGhwLnN2ZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNzJhZGM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QcmVzZXJ2ZVNjcmlwdHMvcGhwLnN2ZwpAQCAtMCwwICsxLDE1MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4KKzxzdmcKKyAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKKyAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCisgICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCisgICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgorICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgorICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCisgICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCisgICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKKyAgIHdpZHRoPSIxNnB4IgorICAgaGVpZ2h0PSIxNnB4IgorICAgaWQ9InN2ZzIxNjgiCisgICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgorICAgaW5rc2NhcGU6dmVyc2lvbj0iMC40NiIKKyAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL2hvbWUvcmFpbXVuZC93d3cveC9wbHVnaW5zL1ByZXNlcnZlU2NyaXB0cy9qcy5wbmciCisgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iODkuMzQyOTE4IgorICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9Ijg5LjM0MjkxOCIKKyAgIHNvZGlwb2RpOmRvY2Jhc2U9Ii9ob21lL3JhaW11bmQvd3d3L3gvcGx1Z2lucy9QcmVzZXJ2ZVNjcmlwdHMiCisgICBzb2RpcG9kaTpkb2NuYW1lPSJwaHAuc3ZnIgorICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgorICA8ZGVmcworICAgICBpZD0iZGVmczIxNzAiPgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM1MDAiPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM3Mjk2Y2Y7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIwIgorICAgICAgICAgaWQ9InN0b3AzNTAyIiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIGlkPSJzdG9wMzUwOCIKKyAgICAgICAgIG9mZnNldD0iMSIKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7IiAvPgorICAgIDwvbGluZWFyR3JhZGllbnQ+CisgICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCisgICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKKyAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogOCA6IDEiCisgICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgorICAgICAgIGlua3NjYXBlOnZwX3o9IjE2IDogOCA6IDEiCisgICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjggOiA1LjMzMzMzMzMgOiAxIgorICAgICAgIGlkPSJwZXJzcGVjdGl2ZTM0OTgiIC8+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMyMTMiPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmOWYwZjA7c3RvcC1vcGFjaXR5OjE7IgorICAgICAgICAgb2Zmc2V0PSIwIgorICAgICAgICAgaWQ9InN0b3AzMjE1IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmOWYwZjA7c3RvcC1vcGFjaXR5OjA7IgorICAgICAgICAgb2Zmc2V0PSIxIgorICAgICAgICAgaWQ9InN0b3AzMjE3IiAvPgorICAgIDwvbGluZWFyR3JhZGllbnQ+CisgICAgPGxpbmVhckdyYWRpZW50CisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDMyMTMiCisgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzIxOSIKKyAgICAgICB4MT0iMS40Mzc2MjI5IgorICAgICAgIHkxPSIxMS41IgorICAgICAgIHgyPSI1IgorICAgICAgIHkyPSIxMS41IgorICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzMjEzIgorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMyNzEiCisgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICAgICAgeDE9IjEuNDM3NjIyOSIKKyAgICAgICB5MT0iMTEuNSIKKyAgICAgICB4Mj0iNSIKKyAgICAgICB5Mj0iMTEuNSIgLz4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzUwMCIKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNTA2IgorICAgICAgIHgxPSIyLjg1ODQ2MjEiCisgICAgICAgeTE9IjEuNTc3NjE5NiIKKyAgICAgICB4Mj0iMTcuNTk5MjQ5IgorICAgICAgIHkyPSIyMS42NTEwNyIKKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KKyAgPC9kZWZzPgorICA8c29kaXBvZGk6bmFtZWR2aWV3CisgICAgIGlkPSJiYXNlIgorICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCisgICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgorICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCisgICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCisgICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCisgICAgIGlua3NjYXBlOnpvb209IjQ1LjI1IgorICAgICBpbmtzY2FwZTpjeD0iOCIKKyAgICAgaW5rc2NhcGU6Y3k9IjgiCisgICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKKyAgICAgc2hvd2dyaWQ9InRydWUiCisgICAgIGlua3NjYXBlOmdyaWQtYmJveD0idHJ1ZSIKKyAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgorICAgICBzaG93Z3VpZGVzPSJ0cnVlIgorICAgICBpbmtzY2FwZTpndWlkZS1iYm94PSJ0cnVlIgorICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEyODAiCisgICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9Ijk1MiIKKyAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCisgICAgIGlua3NjYXBlOndpbmRvdy15PSI0OCI+CisgICAgPHNvZGlwb2RpOmd1aWRlCisgICAgICAgb3JpZW50YXRpb249Imhvcml6b250YWwiCisgICAgICAgcG9zaXRpb249IjEzLjk5OTgyOSIKKyAgICAgICBpZD0iZ3VpZGUzMjc5IiAvPgorICAgIDxzb2RpcG9kaTpndWlkZQorICAgICAgIG9yaWVudGF0aW9uPSJob3Jpem9udGFsIgorICAgICAgIHBvc2l0aW9uPSIxLjAzMTI1IgorICAgICAgIGlkPSJndWlkZTMyODEiIC8+CisgICAgPHNvZGlwb2RpOmd1aWRlCisgICAgICAgb3JpZW50YXRpb249InZlcnRpY2FsIgorICAgICAgIHBvc2l0aW9uPSIyLjAwMzc2MiIKKyAgICAgICBpZD0iZ3VpZGUzMjgzIiAvPgorICA8L3NvZGlwb2RpOm5hbWVkdmlldz4KKyAgPG1ldGFkYXRhCisgICAgIGlkPSJtZXRhZGF0YTIxNzMiPgorICAgIDxyZGY6UkRGPgorICAgICAgPGNjOldvcmsKKyAgICAgICAgIHJkZjphYm91dD0iIj4KKyAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CisgICAgICAgIDxkYzp0eXBlCisgICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CisgICAgICA8L2NjOldvcms+CisgICAgPC9yZGY6UkRGPgorICA8L21ldGFkYXRhPgorICA8ZworICAgICBpZD0ibGF5ZXIxIgorICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKKyAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciI+CisgICAgPHBhdGgKKyAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50MzUwNik7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNzQwMDAwMDEwMDAwMDAwMDQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MSIKKyAgICAgICBkPSJNIDcuNzk4NTgwNywwLjA2NTcyNzYxMyBDIDE0Ljc0NjgwNSwwLjEwMTAyNDYgMTYuMTAzMjYxLDYuNjU0MDA4MyAxNi4yMDg4NCw4LjE2NTQ4NjIgTCAxNS45NTgwOCwxNiBMIDAuMDMxNDQwODMyLDE2IEwgLTYuMjc0Njg0NWUtMTYsOC4xMjUxNjM2IEMgMC4wMjI3NDE5NzYsNC4xODcyOTA0IDIuODE4NTU3OSwwLjAzNTIyOTczNiA3Ljc5ODU4MDcsMC4wNjU3Mjc2MTMgeiAiCisgICAgICAgaWQ9InJlY3QzMjczIgorICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjIgorICAgICAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL2hvbWUvcmFpbXVuZC93d3cveC9wbHVnaW5zL1ByZXNlcnZlUEhQL3RhZy5wbmciCisgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9Ijg5Ljk3Njk5IgorICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI4OS45NzY5OSIgLz4KKyAgICA8dGV4dAorICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiCisgICAgICAgc3R5bGU9ImZvbnQtc2l6ZTo3LjE4NjEyNjIzMDAwMDAwMDE3cHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZpbGw6I2VjZWVlZDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7Zm9udC1mYW1pbHk6Qml0c3RyZWFtIFZlcmEgU2FucyIKKyAgICAgICB4PSI5LjE4NzI5NTkiCisgICAgICAgeT0iMTMuMDU4MTk0IgorICAgICAgIGlkPSJ0ZXh0MzI3NSIKKyAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuODczMTE5MSwxLjE0NTMxOTEpIj48dHNwYW4KKyAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCisgICAgICAgICBpZD0idHNwYW4zMjc3IgorICAgICAgICAgeD0iOS4xODcyOTU5IgorICAgICAgICAgeT0iMTMuMDU4MTk0IgorICAgICAgICAgc3R5bGU9ImZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1hbmNob3I6bWlkZGxlO2ZvbnQtZmFtaWx5OkRlamFWdSBTYW5zO2ZpbGw6I2VjZWVlZDtmaWxsLW9wYWNpdHk6MSI+UEhQPC90c3Bhbj48L3RleHQ+CisgIDwvZz4KKzwvc3ZnPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9QcmVzZXJ2ZVNlbGVjdGlvbi9QcmVzZXJ2ZVNlbGVjdGlvbi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUHJlc2VydmVTZWxlY3Rpb24vUHJlc2VydmVTZWxlY3Rpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIyNDBiNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUHJlc2VydmVTZWxlY3Rpb24vUHJlc2VydmVTZWxlY3Rpb24uanMKQEAgLTAsMCArMSwyMDkgQEAKKy8qKgorIFByZXNlcnZlU2VsZWN0aW9uIGZvciBYaW5oYQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAKKyBPcmlnaW5hbGx5IGRldmVsb3BlZCBieSBBZGFtSiBpbiB0aWNrZXQgIzE1NDQgYXMgYSBHZWNrbyBwYXRjaC4gIFBsdWdpbmlzZWQgYnkgCisgSmFtZXMgU2xlZW1hbi4KKyAKKyBUaGlzIHBsdWdpbiBwcmVzZXJ2ZXMgdGhlIHNlbGVjdGVkIHRleHQgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiB3eXNpd3lnIGFuZCAKKyBzb3VyY2UgbW9kZXMsIGVnLCBzZWxlY3QgaGVsbG8gd29ybGQgaW4gdGhlIHd5c2l3eWcgbW9kZSwgYW5kIHN3aXRjaCB0bworIHNvdXJjZSBtb2RlIGFuZCBoZWxsbyB3b3JsZCB3aWxsIGJlIHNlbGVjdGVkIHRoZXJlIGFsc28uCisgCisgTm90ZSB0aGF0IHRoaXMgcGx1Z2luIHdvcmtzIGEgYml0IGRpZmZlcmVudGx5IGFzIGl0IG92ZXItcmlkZXMgZXhpc3RpbmcgCisgZmVhdHVyZXMgb2YgdGhlIEdlY2tvL1dlYktpdCBtb2R1bGUgbG9hZGVkIGluIHRoZSBicm93c2VyLgorKi8KKworUHJlc2VydmVTZWxlY3Rpb24uX3BsdWdpbkluZm8gPSB7CisgIG5hbWUgICAgICAgICAgOiAiUHJlc2VydmVTZWxlY3Rpb24iLAorICB2ZXJzaW9uICAgICAgIDogIjEuMCIsCisgIGRldmVsb3BlciAgICAgOiAiQWRhbUosIEphbWVzIFNsZWVtYW4iLAorICBkZXZlbG9wZXJfdXJsIDogImh0dHA6Ly90cmFjLnhpbmhhLm9yZy90aWNrZXQvMTU0NCIsCisgIHNwb25zb3IgICAgICAgOiAiIiwKKyAgc3BvbnNvcl91cmwgICA6ICIiLAorICBsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIgorfQorCitmdW5jdGlvbiBQcmVzZXJ2ZVNlbGVjdGlvbihlZGl0b3IpCit7CisgIHRoaXMuZWRpdG9yID0gZWRpdG9yOworfTsKKworWGluaGEuY2NTdGFydCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoODI4Nik7IAorWGluaGEuY2NFbmQgICA9IFN0cmluZy5mcm9tQ2hhckNvZGUoODI4NSk7IAorCitQcmVzZXJ2ZVNlbGVjdGlvbi5wcm90b3R5cGUub25HZW5lcmF0ZU9uY2UgPSBmdW5jdGlvbigpCit7CisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgCisgIGVkaXRvci5zZXRDQyA9ICBmdW5jdGlvbiAoIHRhcmdldCApCisgIHsKKyAgICB2YXIgY2NTdGFydCA9IFhpbmhhLmNjU3RhcnQ7CisgICAgdmFyIGNjRW5kID0gWGluaGEuY2NFbmQ7CisgICAgdHJ5CisgICAgeworICAgICAgaWYgKCB0YXJnZXQgPT0gInRleHRhcmVhIiApCisgICAgICB7CisgICAgICAgIHZhciB0YSA9IHRoaXMuX3RleHRBcmVhOworICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHRhLnNlbGVjdGlvblN0YXJ0OworICAgICAgICB2YXIgZW5kSW5kZXggPSB0YS5zZWxlY3Rpb25FbmQ7CisgICAgICAKKyAgICAgIHZhciBhZnRlcj10YS52YWx1ZS5zdWJzdHJpbmcoIHN0YXJ0SW5kZXgsIHRhLnZhbHVlLmxlbmd0aCApOworICAgICAgaWYgKCBhZnRlci5tYXRjaCgvXltePF0qPi8pICkgLy8gbWFrZSBzdXJlIGN1cnNvciBpcyBpbiBhbiBlZGl0YWJsZSBhcmVhIChvdXRzaWRlIHRhZ3MsIHNjcmlwdCBibG9ja3MsIGVudGl0aWVzLCBhbmQgaW5zaWRlIHRoZSBib2R5KQorICAgICAgICB7CisgICAgICAgICAgdmFyIHRhZ0VuZCA9IGFmdGVyLmluZGV4T2YoIj4iKSArIDE7CisgICAgICAgICAgc3RhcnRJbmRleCs9dGFnRW5kOworICAgICAgICB9CisgICAgICAKKyAgICAgIHZhciBhZnRlcj10YS52YWx1ZS5zdWJzdHJpbmcoIGVuZEluZGV4LCB0YS52YWx1ZS5sZW5ndGggKTsKKyAgICAgIGlmICggYWZ0ZXIubWF0Y2goL15bXjxdKj4vKSApIC8vIG1ha2Ugc3VyZSBjdXJzb3IgaXMgaW4gYW4gZWRpdGFibGUgYXJlYSAob3V0c2lkZSB0YWdzLCBzY3JpcHQgYmxvY2tzLCBlbnRpdGllcywgYW5kIGluc2lkZSB0aGUgYm9keSkKKyAgICAgICAgeworICAgICAgICAgIHZhciB0YWdFbmQgPSBhZnRlci5pbmRleE9mKCI+IikgKyAxOworICAgICAgICAgIGVuZEluZGV4Kz10YWdFbmQ7CisgICAgICAgIH0KKyAgICAgIAorICAgICAgICB2YXIgYmVmb3JlID0gdGEudmFsdWUuc3Vic3RyaW5nKCAwLCBzdGFydEluZGV4ICkKKyAgICAgICAgdmFyIG1pZGRsZSA9IHRhLnZhbHVlLnN1YnN0cmluZyggc3RhcnRJbmRleCwgZW5kSW5kZXggKQorICAgICAgICB2YXIgYWZ0ZXIgPSB0YS52YWx1ZS5zdWJzdHJpbmcoIGVuZEluZGV4LCB0YS52YWx1ZS5sZW5ndGggKTsKKworICAgICAgICB0YS52YWx1ZSA9IGJlZm9yZSArIGNjU3RhcnQgKyBtaWRkbGUgKyBjY0VuZCArIGFmdGVyOworICAgICAgICB0YS52YWx1ZSA9IHRhLnZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCAoJygmW14nK2NjU3RhcnQrJztdKj8pKCcrY2NTdGFydCsnKShbXicrY2NTdGFydCsnXSo/OyknKSwgIiQxJDMkMiIpOworICAgICAgICB0YS52YWx1ZSA9IHRhLnZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCAoJyg8c2NyaXB0W14+XSo+W14nK2NjU3RhcnQrJ10qPykoJytjY1N0YXJ0KycpKFteJytjY1N0YXJ0KyddKj88XC9zY3JpcHQ+KScpLCAiJDEkMyQyIik7CisgICAgICAgIHRhLnZhbHVlID0gdGEudmFsdWUucmVwbGFjZShuZXcgUmVnRXhwICgnXihbXicrY2NTdGFydCsnXSopKCcrY2NTdGFydCsnKShbXicrY2NTdGFydCsnXSo8Ym9keVtePl0qPikoLio/KScpLCAiJDEkMyQyJDQiKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgdmFyIHNlbCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7CisgICAgICAKKyAgICAgIHZhciByYW5nZT1zZWwuZ2V0UmFuZ2VBdCgwKTsKKyAgICAgIHZhciBjb2xsYXBzZWQ9cmFuZ2UuY29sbGFwc2VkOworICAgICAgCisKKyAgICAgIGlmKHJhbmdlLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlPT0zKXsKKyAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIuaW5zZXJ0RGF0YShyYW5nZS5zdGFydE9mZnNldCxjY1N0YXJ0KTsKKyAgICAgIH1lbHNlIGlmKHJhbmdlLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlPT0xKXsKKyAgICAgICAgaWYoIHJhbmdlLnN0YXJ0T2Zmc2V0ICl7CisgICAgICAgICAgdmFyIHN0YXJ0VGV4dE5vZGU9cmFuZ2Uuc3RhcnRDb250YWluZXIuaW5zZXJ0QmVmb3JlKCB0aGlzLl9kb2MuY3JlYXRlVGV4dE5vZGUoY2NTdGFydCksIHJhbmdlLnN0YXJ0Q29udGFpbmVyLmNoaWxkTm9kZXNbcmFuZ2Uuc3RhcnRPZmZzZXRdICk7CisgICAgICAgIH1lbHNleworICAgICAgICAgIHZhciBzdGFydFRleHROb2RlPXJhbmdlLnN0YXJ0Q29udGFpbmVyLmFwcGVuZENoaWxkKCB0aGlzLl9kb2MuY3JlYXRlVGV4dE5vZGUoY2NTdGFydCkgKTsKKyAgICAgICAgfQorICAgICAgfWVsc2V7CisgICAgICAgIGFsZXJ0KHJhbmdlLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgCisgICAgICBpZiggY29sbGFwc2VkPT1mYWxzZSApeworICAgICAgICBpZihyYW5nZS5lbmRDb250YWluZXIubm9kZVR5cGU9PTMpeworICAgICAgICAgIHJhbmdlLmVuZENvbnRhaW5lci5pbnNlcnREYXRhKHJhbmdlLmVuZE9mZnNldCxjY0VuZCk7CisgICAgICAgIH1lbHNlIGlmKHJhbmdlLmVuZENvbnRhaW5lci5ub2RlVHlwZT09MSl7CisgICAgICAgICAgaWYoIHJhbmdlLmVuZE9mZnNldCApeworICAgICAgICAgICAgdmFyIGVuZFRleHROb2RlPXJhbmdlLmVuZENvbnRhaW5lci5pbnNlcnRCZWZvcmUoIHRoaXMuX2RvYy5jcmVhdGVUZXh0Tm9kZShjY0VuZCksIHJhbmdlLmVuZENvbnRhaW5lci5jaGlsZE5vZGVzW3JhbmdlLmVuZE9mZnNldF0gKTsKKyAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgIHZhciBlbmRUZXh0Tm9kZT1yYW5nZS5lbmRDb250YWluZXIuYXBwZW5kQ2hpbGQoIHRoaXMuX2RvYy5jcmVhdGVUZXh0Tm9kZShjY0VuZCkgKTsKKyAgICAgICAgICB9CisgICAgICAgIH1lbHNleworICAgICAgICAgIGFsZXJ0KHJhbmdlLmVuZENvbnRhaW5lci5ub2RlVHlwZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIH0KKyAgICB9IGNhdGNoIChlKSB7fQorICB9OworICAKKyAgZWRpdG9yLmZpbmRDQyA9IGZ1bmN0aW9uICggdGFyZ2V0ICkKKyAgeworICAgIHZhciBjY1N0YXJ0ID0gWGluaGEuY2NTdGFydDsKKyAgICB2YXIgY2NFbmQgPSBYaW5oYS5jY0VuZDsKKyAgICAKKyAgICBpZiAoIHRhcmdldCA9PSAndGV4dGFyZWEnICkKKyAgICB7CisgICAgICB2YXIgdGEgPSB0aGlzLl90ZXh0QXJlYTsKKyAgICAgIAorICAgICAgdmFyIHN0YXJ0UG9zID0gdGEudmFsdWUuaW5kZXhPZiggY2NTdGFydCApOworICAgICAgaWYgKCBzdGFydFBvcyA9PSAtMSApIHJldHVybjsKKyAgICAgIAorICAgICAgdmFyIGVuZFBvcyA9IHRhLnZhbHVlLmluZGV4T2YoIGNjRW5kICk7CisgICAgICAKKyAgICAgIGlmICggZW5kUG9zICE9IC0xICl7IAorCisgICAgICAgIGlmKCBzdGFydFBvczxlbmRQb3MgKXsKKyAgICAgICAgICBwb3MxPXN0YXJ0UG9zOworICAgICAgICAgIHBvczI9ZW5kUG9zOworICAgICAgICB9ZWxzZXsKKyAgICAgICAgICBwb3MxPWVuZFBvczsKKyAgICAgICAgICBwb3MyPXN0YXJ0UG9zOworICAgICAgICB9CisgICAgICAKKyAgICAgICAgdmFyIG1pZGRsZSA9IHBvczEgKyBjY1N0YXJ0Lmxlbmd0aDsKKyAgICAgICAgdmFyIGJlZm9yZSA9ICB0YS52YWx1ZS5zdWJzdHJpbmcoIDAsIHBvczEgKTsKKyAgICAgICAgdmFyIG1pZGRsZSA9IHRhLnZhbHVlLnN1YnN0cmluZyggbWlkZGxlLCBwb3MyICk7CisgICAgICAgIHZhciBhZnRlciA9IHRhLnZhbHVlLnN1YnN0cmluZyhwb3MyICsgY2NFbmQubGVuZ3RoKTsKKyAgICAgICAgdGEudmFsdWUgPSBiZWZvcmU7CisgICAgICAKKyAgICAgICAgdGEuc2Nyb2xsVG9wID0gdGEuc2Nyb2xsSGVpZ2h0OworICAgICAgICB2YXIgc2Nyb2xsUG9zID0gdGEuc2Nyb2xsVG9wOworICAgICAgICAKKyAgICAgICAgdGEudmFsdWUgKz0gbWlkZGxlOworICAgICAgICB0YS52YWx1ZSArPSBhZnRlcjsKKyAgICAgICAgdGEuc2V0U2VsZWN0aW9uUmFuZ2UocG9zMSxwb3MyLTEpOworICAgICAgfWVsc2V7CisgICAgICAgIAorICAgICAgICB2YXIgZW5kID0gc3RhcnRQb3MgKyBjY1N0YXJ0Lmxlbmd0aDsKKyAgICAgICAgdmFyIGJlZm9yZSA9ICB0YS52YWx1ZS5zdWJzdHJpbmcoIDAsIHN0YXJ0UG9zICk7CisgICAgICAgIHZhciBhZnRlciA9IHRhLnZhbHVlLnN1YnN0cmluZyggZW5kLCB0YS52YWx1ZS5sZW5ndGggKTsKKyAgICAgICAgdGEudmFsdWUgPSBiZWZvcmU7CisgICAgICAKKyAgICAgICAgdGEuc2Nyb2xsVG9wID0gdGEuc2Nyb2xsSGVpZ2h0OworICAgICAgICB2YXIgc2Nyb2xsUG9zID0gdGEuc2Nyb2xsVG9wOworICAgICAgICAKKyAgICAgICAgdGEudmFsdWUgKz0gYWZ0ZXI7CisgICAgICAgIHRhLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0UG9zLHN0YXJ0UG9zKTsKKyAgICAgIH0KKyAgICAKKyAgICAgIHRhLmZvY3VzKCk7CisgICAgICAKKyAgICAgIHRhLnNjcm9sbFRvcCA9IHNjcm9sbFBvczsKKworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgdHJ5CisgICAgICB7CisgICAgICAgIHZhciBkb2MgPSB0aGlzLl9kb2M7IAorICAgICAgZG9jLmJvZHkuaW5uZXJIVE1MID0gZG9jLmJvZHkuaW5uZXJIVE1MLnJlcGxhY2UobmV3IFJlZ0V4cChjY1N0YXJ0KSwnPHNwYW4gaWQ9IlhpbmhhRWRpdGluZ1N0YXJ0Ij48L3NwYW4+Jyk7CisgICAgICBkb2MuYm9keS5pbm5lckhUTUwgPSBkb2MuYm9keS5pbm5lckhUTUwucmVwbGFjZShuZXcgUmVnRXhwKGNjRW5kKSwnPHNwYW4gaWQ9IlhpbmhhRWRpdGluZ0VuZCI+PC9zcGFuPicpOworICAgICAgdmFyIHN0YXJ0RWwgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoJ1hpbmhhRWRpdGluZ1N0YXJ0Jyk7CisgICAgICB2YXIgZW5kRWwgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoJ1hpbmhhRWRpdGluZ0VuZCcpOworICAgICAgCisgICAgICB0aGlzLmZvcmNlUmVkcmF3KCk7CisgICAgICB2YXIgcmFuZ2U7CisgICAgICB2YXIgY29sbGFwc2VkID0gdHlwZW9mIGNvbGxhcHNlVG9TdGFydCA9PSAidW5kZWZpbmVkIiA/IHRydWUgOiBmYWxzZTsKKyAgICAgIHZhciBzZWwgPSB0aGlzLmdldFNlbGVjdGlvbigpOworICAgICAgcmFuZ2UgPSB0aGlzLl9kb2MuY3JlYXRlUmFuZ2UoKTsKKyAgICAgIGlmICggIXN0YXJ0RWwgKXsKKyAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICAvLyBUYWJsZXMgYW5kIEltYWdlcyBnZXQgc2VsZWN0ZWQgYXMgIm9iamVjdHMiIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGNvbnRlbnRzCisgICAgICBpZiAoICFlbmRFbCAmJiBzdGFydEVsLnRhZ05hbWUgJiYgc3RhcnRFbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkubWF0Y2goL3RhYmxlfGltZ3xpbnB1dHx0ZXh0YXJlYXxzZWxlY3QvKSApeworICAgICAgICByYW5nZS5zZWxlY3ROb2RlKHN0YXJ0RWwpOworICAgICAgfWVsc2V7CisgICAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhzdGFydEVsKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYoIGVuZEVsICl7CisgICAgICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0RWwsMCk7CisgICAgICAgIHJhbmdlLnNldEVuZChlbmRFbCwwKTsKKyAgICAgIH0KKworICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOworICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlKTsKKyAgICAgIAorICAgICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoc3RhcnRFbCk7CisgICAgICBzdGFydEVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3RhcnRFbCk7ICAgICAgICAgIAorICAgICAgZW5kRWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbmRFbCk7CisgICAgICAKKyAgICAgIHRoaXMuX2lmcmFtZS5jb250ZW50V2luZG93LmZvY3VzKCk7CisgICAgICB9IGNhdGNoIChlKSB7fQorICAgIH0KKyAgfTsKKworfTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvUXVpY2tUYWcuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL1F1aWNrVGFnLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYjI4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL1F1aWNrVGFnLmpzCkBAIC0wLDAgKzEsNTMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwNCisgUXVpY2sgVGFnIEVkaXRvciBQbHVnaW4gZm9yIEhUTUxBcmVhLTMuMA0KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyBhdXRob3I6IENhdSBndWFuYWJhcmEgDQorIGUtbWFpbDogY2F1Z2JAaWJlc3QuY29tLmJyDQorXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK2Z1bmN0aW9uIFF1aWNrVGFnKGVkaXRvcikgew0KKyAgdmFyIGNmZyA9IGVkaXRvci5jb25maWc7DQorICB2YXIgc2VsZiA9IHRoaXM7DQorDQorICBjZmcucmVnaXN0ZXJCdXR0b24oew0KKwlpZCAgICAgICA6ICJxdWlja2VkaXRvciIsDQorCXRvb2x0aXAgIDogdGhpcy5fbGMoIlF1aWNrIFRhZyBFZGl0b3IiKSwNCisJaW1hZ2UgICAgOiBlZGl0b3IuaW1nVVJMKCJlZF9xdWlja3RhZy5naWYiLCAiUXVpY2tUYWciKSwgDQorCXRleHRNb2RlIDogZmFsc2UsDQorICBhY3Rpb24gICA6IGZ1bmN0aW9uKGVkaXRvcikgeyANCisgICAgICAgICAgICAgICBzZWxmLmJ1dHRvblByZXNzKGVkaXRvcik7IA0KKyAgICAgICAgICAgICB9DQorICB9KTsNCisgIGNmZy5hZGRUb29sYmFyRWxlbWVudCgicXVpY2tlZGl0b3IiLCAiaHRtbG1vZGUiLCAxKTsgIA0KK30NCisNCitRdWlja1RhZy5wcm90b3R5cGUuYnV0dG9uUHJlc3MgPSBmdW5jdGlvbihlZGl0b3IpIHsgDQordmFyIHNlbGYgPSB0aGlzOw0KK3ZhciBzZWwgPSBlZGl0b3IuZ2V0U2VsZWN0ZWRIVE1MKCkucmVwbGFjZSgvKDxbXj5dKj58Jm5ic3A7fFxufFxyKS9nLCIiKTsgDQordmFyIHBhcmFtID0gbmV3IE9iamVjdCgpOw0KK3BhcmFtLmVkaXRvciA9IGVkaXRvcjsNCisNCisgIGlmKC9cdy8udGVzdChzZWwpKQ0KKyAgICBlZGl0b3IuX3BvcHVwRGlhbG9nKCJwbHVnaW46Ly9RdWlja1RhZy9xdWlja3RhZyIsIGZ1bmN0aW9uKHApIHsgc2VsZi5zZXRUYWcoZWRpdG9yLCBwKTsgfSwgcGFyYW0pOw0KKyAgZWxzZQ0KKyAgICBhbGVydCh0aGlzLl9sYygnWW91IGhhdmUgdG8gc2VsZWN0IHNvbWUgdGV4dCcpKTsNCit9Ow0KKw0KK1F1aWNrVGFnLnByb3RvdHlwZS5zZXRUYWcgPSBmdW5jdGlvbihlZGl0b3IsIHBhcmFtKSB7DQorZWRpdG9yLnN1cnJvdW5kSFRNTChwYXJhbS50YWdvcGVuLHBhcmFtLnRhZ2Nsb3NlKTsNCit9Ow0KKw0KK1F1aWNrVGFnLl9wbHVnaW5JbmZvID0gew0KK25hbWUgICAgICAgICAgOiAiUXVpY2tUYWciLA0KK3ZlcnNpb24gICAgICAgOiAiMS4wIC0gYmV0YSIsDQorZGV2ZWxvcGVyICAgICA6ICJDYXUgR3VhbmFiYXJhIiwNCitkZXZlbG9wZXJfdXJsIDogIm1haWx0bzpjYXVnYkBpYmVzdC5jb20uYnIiLA0KK2Nfb3duZXIgICAgICAgOiAiQ2F1IEd1YW5hYmFyYSIsDQorc3BvbnNvciAgICAgICA6ICJJbmRlcGVuZGVudCBwcm9kdWN0aW9uIiwNCitzcG9uc29yX3VybCAgIDogImh0dHA6Ly93d3cubmV0Zmxhc2guY29tLmJyL2diL0hBMy1yYzEvZXhhbXBsZXMvcXVpY2stdGFnLmh0bWwiLA0KK2xpY2Vuc2UgICAgICAgOiAiaHRtbEFyZWEiDQorfTsNCisNCitRdWlja1RhZy5wcm90b3R5cGUuX2xjID0gZnVuY3Rpb24oc3RyaW5nKSB7DQorICAgIHJldHVybiBYaW5oYS5fbGMoc3RyaW5nLCAnUXVpY2tUYWcnKTsNCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvaW1nL2VkX3F1aWNrdGFnLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvaW1nL2VkX3F1aWNrdGFnLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWU1Y2U1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9pbWcvZWRfcXVpY2t0YWcuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9jaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9jaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmU1YmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2NoLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuWPlua2iCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2N6LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2N6LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNmE0OGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvY3ouanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjeiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2RhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmODU0MDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvZGEuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxsZXIiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjY5MGYxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsMjQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQVRUUklCVVRFUyI6ICJBVFRSSUJVVEVTIiwKKyAgICAiQ2FuY2VsIjogIkNhbmNlbCIsCisgICAgIkNvbG9ycyI6ICJDb2xvcnMiLAorICAgICJFbnRlciB0aGUgVEFHIHlvdSB3YW50IHRvIGluc2VydCI6ICJFbnRlciB0aGUgVEFHIHlvdSB3YW50IHRvIGluc2VydCIsCisgICAgIk5vIENTUyBjbGFzcyBhdmFpYWJsZSI6ICJObyBDU1MgY2xhc3NlcyBhdmFpYWJsZSIsCisgICAgIk9QVElPTlMiOiAiT1BUSU9OUyIsCisgICAgIk9rIjogIk9rIiwKKyAgICAiUXVpY2sgVGFnIEVkaXRvciI6ICJRdWljayBUQUcgRWRpdG9yIiwKKyAgICAiVEFHcyI6ICJUQUdzIiwKKyAgICAiVGhlcmUgYXJlIHNvbWUgdW5jbG9zZWQgcXVvdGUiOiAiVGhlcmUgYXJlIHNvbWUgdW5jbG9zZWQgcXVvdGUiLAorICAgICJUaGlzIGF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgVEFHIjogIlRoaXMgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBUQUciLAorICAgICJZb3UgaGF2ZSB0byBzZWxlY3Qgc29tZSB0ZXh0IjogIllvdSBoYXZlIHRvIHNlbGVjdCBzb21lIHRleHQiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9lZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9lZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWNkODQwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2VlLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkxvb2J1IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvZWwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I0Njk1ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9lbC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLOkc66z43Pgc+Jz4POtyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2VzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExM2VhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvZXMuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlcyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9ldS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9ldS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDIxYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2V1LmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlV0emkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9mYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9mYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDU3MTg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2ZhLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2ZpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2ZpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMzNhYzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvZmkuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUGVydXV0YSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNzUyNzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvZnIuanMKQEAgLTAsMCArMSwyNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBVFRSSUJVVEVTIjogIkFUVFJJQlVUUyIsCisgICAgIkNhbmNlbCI6ICJBbm51bGVyIiwKKyAgICAiQ29sb3JzIjogIkNvdWxldXJzIiwKKyAgICAiRW50ZXIgdGhlIFRBRyB5b3Ugd2FudCB0byBpbnNlcnQiOiAiRW50cmV6IGxhIGJhbGlzZSBxdWUgdm91cyB2b3VsZXogaW5zw6lyZXIiLAorICAgICJObyBDU1MgY2xhc3MgYXZhaWFibGUiOiAiUGFzIGRlIGNsYXNzZSBDU1MgYWNjZXNzaWJsZSIsCisgICAgIk9QVElPTlMiOiAiT1BUSU9OUyIsCisgICAgIk9rIjogIk9LIiwKKyAgICAiUXVpY2sgVGFnIEVkaXRvciI6ICJFZGl0ZXVyIHJhcGlkZSBkZSBiYWxpc2UiLAorICAgICJUQUdzIjogIkJhbGlzZXMiLAorICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICJJbCB5IGEgZGVzIGFwb3N0cm9waGVzIG1hbCBmZXJtw6llcyIsCisgICAgIlRoaXMgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBUQUciOiAiQ2V0IGF0dHJpYnV0ZSBleGlzdGUgZMOpasOgIHN1ciBjZXR0ZSBiYWxpc2UiLAorICAgICJZb3UgaGF2ZSB0byBzZWxlY3Qgc29tZSB0ZXh0IjogIlZvdXMgZGV2ZXogc8OpbGVjdGlvbm5lciBkdSB0ZXh0ZSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2hlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NWRkYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvaGUuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJoZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2h1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2h1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZDU2NjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvaHUuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJodSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2l0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYmE0M2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvaXQuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJpdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk5MDg2YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9qYS5qcwpAQCAtMCwwICsxLDI0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFUVFJJQlVURVMiOiAi5bGe5oCnIiwKKyAgICAiQ2FuY2VsIjogIuS4reatoiIsCisgICAgIkNvbG9ycyI6ICLoibIiLAorICAgICJFbnRlciB0aGUgVEFHIHlvdSB3YW50IHRvIGluc2VydCI6ICLmjL/lhaXjgZfjgZ/jgYTjgr/jgrDjgpLlhaXlipsiLAorICAgICJObyBDU1MgY2xhc3MgYXZhaWFibGUiOiAiQ1NT44Kv44Op44K544GM44GC44KK44G+44Gb44KTIiwKKyAgICAiT1BUSU9OUyI6ICLpgbjmip7ogqIiLAorICAgICJPayI6ICJPSyIsCisgICAgIlF1aWNrIFRhZyBFZGl0b3IiOiAi44Kv44Kk44OD44Kv44K/44Kw44Ko44OH44Kj44K/IiwKKyAgICAiVEFHcyI6ICLjgr/jgrAiLAorICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICLplonjgZjjgabjgYTjgarjgYTlvJXnlKjnrKbjgYzjgYLjgorjgb7jgZkiLAorICAgICJUaGlzIGF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgVEFHIjogIuOCv+OCsOOBq+OBr+OBmeOBp+OBq+WQjOOBmOWxnuaAp+OBjOOBguOCiuOBvuOBmSIsCisgICAgIllvdSBoYXZlIHRvIHNlbGVjdCBzb21lIHRleHQiOiAi44OG44Kt44K544OI44KS6YG45oqe44GX44Gq44GR44KM44Gw44Gq44KK44G+44Gb44KTIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NjcyZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDM3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgIicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbCc6ICciOiAiIiwKKyAgICAiQVRUUklCVVRFUyI6ICIiLAorICAgICJDYW5jZWwiOiAiIiwKKyAgICAiQ29sb3JzIjogIiIsCisgICAgIkVudGVyIHRoZSBUQUcgeW91IHdhbnQgdG8gaW5zZXJ0IjogIiIsCisgICAgIk5vIENTUyBjbGFzcyBhdmFpYWJsZSI6ICIiLAorICAgICJPUFRJT05TIjogIiIsCisgICAgIk9rIjogIiIsCisgICAgIlF1aWNrIFRhZyBFZGl0b3IiOiAiIiwKKyAgICAiVEFHcyI6ICIiLAorICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICIiLAorICAgICJUaGlzIGF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgVEFHIjogIiIsCisgICAgIllvdSBoYXZlIHRvIHNlbGVjdCBzb21lIHRleHQiOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9sdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9sdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmJjNjc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2x0LmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2x2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL2x2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYzY4ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvbHYuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXRjZWx0IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvbmIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFmNWEwNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDI0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFUVFJJQlVURVMiOiAiQVRUUklCVVRURVIiLAorICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAiQ29sb3JzIjogIkZhcmdlciIsCisgICAgIkVudGVyIHRoZSBUQUcgeW91IHdhbnQgdG8gaW5zZXJ0IjogIlNrcml2IGlubiB0YWdnZW4gZHUgdmlsIMO4bnNrZXIgw6Ugc2V0dGUgaW5uIiwKKyAgICAiTm8gQ1NTIGNsYXNzIGF2YWlhYmxlIjogIkluZ2VuIENTUyBrbGFzc2UgdGlsZ2plbmdlbGlnIiwKKyAgICAiT1BUSU9OUyI6ICJFR0VOU0tBUEVSIiwKKyAgICAiT2siOiAiT0siLAorICAgICJRdWljayBUYWcgRWRpdG9yIjogIktqYXBwIFRBR0ctRWRpdG9yIiwKKyAgICAiVEFHcyI6ICJUQUdHZXIiLAorICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICJEZXQgbWFuZ2xlciBldCBoZXJtZXRlZ24iLAorICAgICJUaGlzIGF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgVEFHIjogIkRlbm5lIGF0dHJpYnV0dGVuIGVrc2lzdGVyZXIgYWxsZXJlZGUgaSB0YWdnZW4iLAorICAgICJZb3UgaGF2ZSB0byBzZWxlY3Qgc29tZSB0ZXh0IjogIkR1IG3DpSB2ZWxnZSBub2UgdGVrc3QiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9ubC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGE0Y2RlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL25sLmpzCkBAIC0wLDAgKzEsMjQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQVRUUklCVVRFUyI6ICJBVFRSSUJVVEVOIiwKKyAgICAiQ2FuY2VsIjogIkFubnVsZXJlbiIsCisgICAgIkNvbG9ycyI6ICJLbGV1cmVuIiwKKyAgICAiRW50ZXIgdGhlIFRBRyB5b3Ugd2FudCB0byBpbnNlcnQiOiAiVm9lciBkZSBUYWcgbmFhbSBpbiIsCisgICAgIk5vIENTUyBjbGFzcyBhdmFpYWJsZSI6ICJHZWVuIENTUyBjbGFzcyBiZXNjaGlrYmFhciIsCisgICAgIk9QVElPTlMiOiAiT1BUSUVTIiwKKyAgICAiT2siOiAiT2siLAorICAgICJRdWljayBUYWcgRWRpdG9yIjogIlF1aWNrIFRhZyBFZGl0b3IiLAorICAgICJUQUdzIjogIlRBR3MiLAorICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICJFciB6aWpuIG5pZXQgZ2VzbG90ZW4gcXVvdGVzIiwKKyAgICAiVGhpcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIFRBRyI6ICJEaXQgYXR0cmlidXV0IGJlc3RhYXQgYWwgaW4gZGUgdGFnIiwKKyAgICAiWW91IGhhdmUgdG8gc2VsZWN0IHNvbWUgdGV4dCI6ICJTZWxlY3RlZXIgdGVrc3QiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9wbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmIzM2FmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL3BsLmpzCkBAIC0wLDAgKzEsMjQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicGwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQVRUUklCVVRFUyI6ICJBVFJZQlVUWSIsCisgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICJDb2xvcnMiOiAiS29sb3J5IiwKKyAgICAiRW50ZXIgdGhlIFRBRyB5b3Ugd2FudCB0byBpbnNlcnQiOiAiUG9kYWogVEFHLCBrdMOzcnkgY2hjZXN6IHdzdGF3acSHIiwKKyAgICAiTm8gQ1NTIGNsYXNzIGF2YWlhYmxlIjogIkJyYWsgZG9zdMSZcG55Y2gga2xhcyBDU1MiLAorICAgICJPUFRJT05TIjogIk9QQ0pFIiwKKyAgICAiT2siOiAiT2siLAorICAgICJRdWljayBUYWcgRWRpdG9yIjogIkVkeXRvciBRdWljayBUYWciLAorICAgICJUQUdzIjogIlRBR2kiLAorICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICJTxIUgamFraWXFmyBuaWV6YW1rbmnEmXRlIGN1ZHp5c8WCb3dpYSIsCisgICAgIlRoaXMgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBUQUciOiAiVEFHIHBvc2lhZGEganXFvCB0ZW4gYXRyeWJ1dCIsCisgICAgIllvdSBoYXZlIHRvIHNlbGVjdCBzb21lIHRleHQiOiAiTXVzaXN6IHphem5hY3p5xIcgdGVrc3QuIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvcHRfYnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI0ZmRmMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9wdF9ici5qcwpAQCAtMCwwICsxLDI0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFUVFJJQlVURVMiOiAiQVRSSUJVVE9TIiwKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiQ29sb3JzIjogIkNvcmVzIiwKKyAgICAiRW50ZXIgdGhlIFRBRyB5b3Ugd2FudCB0byBpbnNlcnQiOiAiRW50cmUgY29tIGEgVEFHIHF1ZSBkZXNlamEgaW5zZXJpciIsCisgICAgIk5vIENTUyBjbGFzcyBhdmFpYWJsZSI6ICJOw6NvIGjDoSBjbGFzc2VzIENTUyBkaXNwb27DrXZlbCIsCisgICAgIk9QVElPTlMiOiAiT1DDh8OVRVMiLAorICAgICJPayI6ICJPayIsCisgICAgIlF1aWNrIFRhZyBFZGl0b3IiOiAiRWRpdG9yIFLDoXBpZG8iLAorICAgICJUQUdzIjogIlRBR3MiLAorICAgICJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSI6ICJIw6EgdW1hIG91IG1haXMgYXNwYXMgc2VtIGZlY2hhbWVudG8iLAorICAgICJUaGlzIGF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgVEFHIjogIkVzc2UgYXRyaWJ1dG8gasOhIGV4aXN0ZSBuYSBUQUciLAorICAgICJZb3UgaGF2ZSB0byBzZWxlY3Qgc29tZSB0ZXh0IjogIsOJIHByZWNpc28gc2VsZWNpb25hciBhbGd1bSB0ZXh0byIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL3JvLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL3JvLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNGUxOWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvcm8uanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJybyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvcnUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU2OWNmZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9ydS5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJ1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLQntGC0LzQtdC90LAiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9zaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9zaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDNiMGM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL3NoLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvc2kuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvc2kuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAzZDE2MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9zaS5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9zci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9zci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk2NmU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL3NyLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvc3YuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThiNjM5NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy9zdi5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInN2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdmJyeXQiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy90aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDM2Yjg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL3RoLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidGgiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL3RyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9sYW5nL3RyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MzYyM2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvdHIuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0ciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAixLBwdGFsIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvdm4uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL2xhbmcvdm4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMyZDc3OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvbGFuZy92bi5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInZuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJI4buneSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy9wb3B1cHMvcXVpY2t0YWcuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvcG9wdXBzL3F1aWNrdGFnLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhjYzE3MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvUXVpY2tUYWcvcG9wdXBzL3F1aWNrdGFnLmh0bWwKQEAgLTAsMCArMSwzNTQgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+UXVpY2sgVGFnIEVkaXRvcjwvdGl0bGU+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi90YWctbGliLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uLy4uL3BvcHVwcy9wb3B1cC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKK3dpbmRvdy5yZXNpemVUbyg0MDAsIDE4MCk7Cit2YXIgUXVpY2tUYWcgPSB3aW5kb3cub3BlbmVyLlF1aWNrVGFnOwordmFyIGN1clRhZyA9ICdub25lJzsKK3ZhciBjdXJUYWdPcHQgPSBmYWxzZTsKK3ZhciBDU1NFZGl0ID0gZmFsc2U7Cit2YXIgZWRpdG9yID0gbnVsbDsKKworZnVuY3Rpb24gSW5pdCgpIHsKKyAgX19kbGdfdHJhbnNsYXRlKCJRdWlja1RhZyIpOworICBfX2RsZ19pbml0KCk7CisKKyAgdmFyIHBhcmFtID0gd2luZG93LmRpYWxvZ0FyZ3VtZW50czsKKyAgZWRpdG9yID0gcGFyYW1bJ2VkaXRvciddOworICB2YXIgc2VsZWN0ZXh0ID0gcGFyYW1bJ3NlbGVjdGVkVGV4dCddOyAvLyBzZW0gdXNvLi4uCisKKyAgY3JlYXRlRHJvcGRvd24oInRhZ3MiKTsKKworICB2YXIgdG8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFnb3BlbicpOworICBpZiAoZG9jdW1lbnQuYWxsKSAKKyAgICB0by5hdHRhY2hFdmVudCgib25rZXlwcmVzcyIsIGZ1bmN0aW9uKGUpIHsgY2hvaWNlX2Ryb3Bkb3duKGUpIH0pOworICBlbHNlIAorICAgIHRvLmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIiwgZnVuY3Rpb24oZSkgeyBjaG9pY2VfZHJvcGRvd24oZSkgfSwgdHJ1ZSk7CisgIHRvLmZvY3VzKCk7CisKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0X2NvbG9ycycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgIGRvY3VtZW50LmJvZHkub25rZXlwcmVzcyA9IF9fZGxnX2tleV9wcmVzczsKK30KKworZnVuY3Rpb24gb25DYW5jZWwoKSB7CisgIF9fZGxnX2Nsb3NlKG51bGwpOworICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIHF1b3RlVGVzdCh2YWwpIHsKKyAgdmFyIGVyID0gL15cdytccyooXHcrPVwiW15cIl0qXCJccyp8XHcrPVwnW15cJ10qXCdccyopKiQvOworICByZXR1cm4gZXIudGVzdCh2YWwpOworfQorCitmdW5jdGlvbiBvbk9LKCkgeworICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFnb3BlbicpOworICBpZighZWwudmFsdWUpIHsKKyAgYWxlcnQoSFRNTEFyZWEuX2xjKCJFbnRlciB0aGUgVEFHIHlvdSB3YW50IHRvIGluc2VydCIsICJRdWlja1RhZyIpKTsKKyAgZWwuZm9jdXMoKTsKKyAgcmV0dXJuIGZhbHNlOworICB9CisgIGlmKCFxdW90ZVRlc3QoZWwudmFsdWUpKSB7CisgICAgYWxlcnQoSFRNTEFyZWEuX2xjKCJUaGVyZSBhcmUgc29tZSB1bmNsb3NlZCBxdW90ZSIsICJRdWlja1RhZyIpKTsKKyAgICBlbC5mb2N1cygpOworICAgIGVsLnNlbGVjdCgpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICB2YXIgcGFyYW0gPSB7fTsKKyAgdmFyIGNsZWFuVE8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFnb3BlbicpLnZhbHVlLnJlcGxhY2UoLyg8fD4pL2csIiIpOworICBwYXJhbS50YWdvcGVuID0gIjwiK2NsZWFuVE8rIj4iOworICBwYXJhbS50YWdjbG9zZSA9IHBhcmFtLnRhZ29wZW4ucmVwbGFjZSgvXjwoXHcrKSA/Lio+LywiPC8kMT4iKTsKKworICB2YXIgc3VidGFnID0gc3ViVGFnTGliW2N1clRhZ107CisgIGlmKHR5cGVvZiBzdWJ0YWcgPT0gJ29iamVjdCcpIHsKKyAgICBwYXJhbS50YWdvcGVuID0gcGFyYW0udGFnb3BlbitzdWJ0YWcub3A7CisgICAgcGFyYW0udGFnY2xvc2UgPSBzdWJ0YWcuY2wrcGFyYW0udGFnY2xvc2U7CisgIH0KKworICBfX2RsZ19jbG9zZShwYXJhbSk7CisgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gX19kbGdfa2V5X3ByZXNzKGV2KSB7CisgIGV2IHx8IChldiA9IHdpbmRvdy5ldmVudCk7CisgIHN3aXRjaChldi5rZXlDb2RlKSB7CisgICAgY2FzZSAxMzoKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRfb2snKS5jbGljaygpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAyNzoKKyAgICBfX2RsZ19jbG9zZSgpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gc2VsY2hhbmdlKCkgeworICB2YXIgdG9hZGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0YWcnKS52YWx1ZTsKKyAgdmFyIG9sZHZhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdvcGVuJykudmFsdWU7CisgIHZhciB0ZXh0ID0gKG9sZHZhbCt0b2FkZCkucmVwbGFjZSgvXlxzKiguKylccyokLywiJDEiKTsKKyAgdmFyIGF0cmliID0gLyhcdyspPVwiJC8udGVzdCh0b2FkZCkgPyB0b2FkZC5yZXBsYWNlKC8oXHcrKT1cIiQvLCAiJDEiKSA6IG51bGw7CisgIHZhciBzaG93Y29sb3JzID0gKC9jb2xvclw6ID8kLy50ZXN0KHRvYWRkKSkgPyB0cnVlIDogZmFsc2U7CisgIHZhciBub0NTU2NsYXNzZXMgPSBmYWxzZTsKKyAgdmFyIG9iaiA9IG51bGw7CisgIGN1clRhZyA9IHRleHQucmVwbGFjZSgvKF5cdyspID8uKiQvLCAiJDEiKTsKKyAgY3VyVGFnT3B0ID0gKHRhZ0xpYltjdXJUYWddID09IHRydWUpOworCisgIGlmKGF0cmliKSB7CisgICAgdmFyIGF0cmVyID0gZXZhbCgnLycrYXRyaWIrJz0vaWcnKTsKKyAgICBpZihhdHJlci50ZXN0KG9sZHZhbCkgJiYgISgvW149XVwiJC8udGVzdCh0b2FkZCkpKSB7CisgICAgICBhbGVydChIVE1MQXJlYS5fbGMoIlRoaXMgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBUQUciLCAiUXVpY2tUYWciKSk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3dpdGNoKGF0cmliKSB7CisgICAgY2FzZSAnc3R5bGUnOgorICAgICAgQ1NTRWRpdCA9IHRydWU7CisgICAgICBicmVhazsKKyAgICBjYXNlICdjbGFzcyc6CisgICAgICBpZihjYXB0dXJlQ2xhc3NlcygpID09IDApIG5vQ1NTY2xhc3NlcyA9IHRydWU7CisgICAgICBicmVhazsKKyAgICBjYXNlICdjb2xvcic6IGNhc2UgJ2JnY29sb3InOiBjYXNlICdib3JkZXJjb2xvcic6CisgICAgY2FzZSAnYm9yZGVyY29sb3JsaWdodCc6IGNhc2UgJ2JvcmRlcmNvbG9yZGFyayc6CisgICAgICBzaG93Y29sb3JzID0gdHJ1ZTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmKGN1clRhZ09wdCA9PSB0cnVlKQorICAgICAgb2JqID0gZXZhbCgnb3BBdHRfJytjdXJUYWcrJ1siJythdHJpYisnIl0nKTsKKyAgICBlbHNlCisgICAgICBvYmogPSBvcEF0dF9hbGxbYXRyaWJdOworICB9CisgIGVsc2UgaWYoIUNTU0VkaXQgJiYgKC8oXlx3KyR8XCIkKS8udGVzdCh0b2FkZCkpKSB7CisgICAgb2JqID0gJ2FsbCc7CisgICAgaWYoY3VyVGFnT3B0ID09IHRydWUpIG9iaiA9IGN1clRhZzsKKyAgICB0b2FkZCArPSAnICc7CisgIH0KKworICBpZihDU1NFZGl0ICYmIHF1b3RlVGVzdCh0ZXh0KSkKKyAgICBDU1NFZGl0ID0gZmFsc2U7CisKKyAgaWYoc2hvd2NvbG9ycykKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRfY29sb3JzJykuc3R5bGUuZGlzcGxheSA9ICcnOworCisgIGlmKG9iaikKKyAgICBjcmVhdGVEcm9wZG93bihvYmopOworICBlbHNlIGlmKCFDU1NFZGl0KQorICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaG93c2VsZWN0Jykuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOworCisgIGlmKG5vQ1NTY2xhc3NlcykgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaG93c2VsZWN0JykuaW5uZXJIVE1MID0gSFRNTEFyZWEuX2xjKCJObyBDU1MgY2xhc3MgYXZhaWFibGUiLCAiUXVpY2tUYWciKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hvd3NlbGVjdCcpLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7CisgIH0KKworICBhZGRjaGFuZ2VzKCk7CisKKyAgZnVuY3Rpb24gYWRkY2hhbmdlcygpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFnb3BlbicpLmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhZ29wZW4nKS52YWx1ZSArPSB0b2FkZDsKKyAgfQorfQorCitmdW5jdGlvbiBjYXB0dXJlQ2xhc3NlcygpIHsKKyAgdmFyIGNvbnQgPSAwOworICAvLyBJZiB0aGVyZSBpcyBubyAnPEhUTUw+JyBpbiB0aGUgSFRNTEFyZWEgY29udGVudCwgd2hlbiB1c2luZworICAvLyBzdHlsZVNoZWV0c1suLl0ucnVsZSwgSUUgZ2VuZXJhdGVzIGFuIGVycm9yLgorICAvLyBJbiB0aGlzIGNhc2UsIHdlIGxvc3QgdGhlIGNsYXNzZXMgaW4gZXh0ZXJuYWwgQ1NTIGZpbGVzLgorICAvLyBJZiBGdWxsUGFnZSBpcyBsb2FkZWQsIHRoZXJlIGlzIG5vIHByb2JsZW0uCisgIGlmKCEoLzxccypodG1sXHMqPi9pLnRlc3QoZWRpdG9yLmdldEhUTUwoKSkpICYmIGRvY3VtZW50LmFsbCkgeworICAgIHZhciBzdHlsZXMgPSBlZGl0b3IuX2RvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3R5bGUiKTsKKyAgICBmb3IodmFyIGkgaW4gc3R5bGVzKSB7CisgICAgICB2YXIgY29udCA9IHN0eWxlc1tpXS5pbm5lckhUTUw7CisgICAgICBpZih0eXBlb2YgY29udCAhPSAndW5kZWZpbmVkJykgeworICAgICAgICB2YXIgY2xzID0gY29udC5tYXRjaCgvXC5cdysvaWcsIiIpOworICAgICAgICBmb3IoaiBpbiBjbHMpIGlmKC9eXC5cdyskLy50ZXN0KGNsc1tqXSkpIHsKKyAgICAgICAgICB2YXIgY2xhc3NuYW1lID0gY2xzW2pdLnJlcGxhY2UoL1wuLywiIikrJyInOworICAgICAgICAgIG9wQXR0X2FsbFsnY2xhc3MnXVtjbHNbal1dID0gY2xhc3NuYW1lOworICAgICAgICAgIGNvbnQrKzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY29udDsKKyAgfQorCisgIHZhciBzdHlsZVNoZWV0ID0gbnVsbDsKKyAgdmFyIHN0eWxlcyA9IGVkaXRvci5fZG9jLnN0eWxlU2hlZXRzOworCisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7CisgICAgc3R5bGVTaGVldCA9IHN0eWxlc1tpXTsKKyAgICBpZihkb2N1bWVudC5hbGwpCisgICAgICB2YXIgX3J1bGVzID0gc3R5bGVTaGVldC5ydWxlczsKKyAgICBlbHNlCisgICAgICB2YXIgX3J1bGVzID0gc3R5bGVTaGVldC5jc3NSdWxlczsKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IF9ydWxlcy5sZW5ndGg7IGorKykgeworICAgICAgcnVsZSA9IF9ydWxlc1tqXTsKKyAgICAgIGlmKC9eXC5cdyskLy50ZXN0KHJ1bGUuc2VsZWN0b3JUZXh0KSkgeworICAgICAgICB2YXIgY2xhc3NuYW1lID0gcnVsZS5zZWxlY3RvclRleHQucmVwbGFjZSgvXC4vLCIiKSsnIic7CisgICAgICAgIG9wQXR0X2FsbFsnY2xhc3MnXVtydWxlLnNlbGVjdG9yVGV4dF0gPSBjbGFzc25hbWU7CisgICAgICAgIGNvbnQrKzsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIGNvbnQ7Cit9CisKK2Z1bmN0aW9uIGNob2ljZV9kcm9wZG93bihlKSB7CisgIGlmIChkb2N1bWVudC5hbGwpIEtleSA9IGUua2V5Q29kZTsKKyAgZWxzZSBLZXkgPSBlLmNoYXJDb2RlOworCisgIGlmKEtleSAhPSAzMikgcmV0dXJuOworCisgIHZhciB0ZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhZ29wZW4nKS52YWx1ZS5yZXBsYWNlKC9eXHMqKFteXHNdKylccyokLywiJDEiKTsKKworICBpZihDU1NFZGl0ICYmIHF1b3RlVGVzdCh0ZXh0KSkgQ1NTRWRpdCA9IGZhbHNlOworICBpZihDU1NFZGl0KSByZXR1cm47CisKKyAgaWYoY3VyVGFnID09ICdub25lJykgeworICAgIGN1clRhZyA9IHRleHQucmVwbGFjZSgvKF5cdyspID8uKiQvLCAiJDEiKTsKKyAgICBjdXJUYWdPcHQgPSB0YWdMaWJbY3VyVGFnXTsKKyAgfQorCisgIGlmKCEvXHcvLnRlc3QodGV4dCkpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFnb3BlbicpLnZhbHVlID0gJyc7CisgICAgY3JlYXRlRHJvcGRvd24oInRhZ3MiKTsKKyAgICByZXR1cm47CisgIH0KKworICB2YXIgYXR0ID0gJ2FsbCc7CisgIGlmKGN1clRhZ09wdCA9PSB0cnVlKQorICAgIGF0dCA9IGN1clRhZzsKKworICBjcmVhdGVEcm9wZG93bihhdHQpOworfQorCitmdW5jdGlvbiBjcmVhdGVEcm9wZG93bih0eXBlKSB7CisgIHZhciBfZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nob3dzZWxlY3QnKTsKKyAgd2hpbGUoX2Rpdi5oYXNDaGlsZE5vZGVzKCkpCisgICAgX2Rpdi5yZW1vdmVDaGlsZChfZGl2LmZpcnN0Q2hpbGQpOworICBfZGl2LnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7CisKKyAgdmFyIF9zZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKKyAgX3NlbC5pZCA9ICJzZWxlY3RhZyI7CisgIF9zZWwub25jaGFuZ2UgPSBmdW5jdGlvbigpIHsgc2VsY2hhbmdlKCk7IH07CisKKyAgaWYodHlwZW9mIHR5cGUgPT0gJ29iamVjdCcpIHsKKyAgICB2YXIgb2JqID0gdHlwZTsKKyAgICBmb3JPYmooSFRNTEFyZWEuX2xjKCJPUFRJT05TIiwgIlF1aWNrVGFnIikpOworICAgIF9kaXYuYXBwZW5kQ2hpbGQoX3NlbCk7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYodHlwZSA9PSAndGFncycpIHsKKyAgICB2YXIgb2JqID0gYWxsVGFnczsKKyAgICBmb3JPYmooSFRNTEFyZWEuX2xjKCJUQUdzIiwgIlF1aWNrVGFnIikpOworICAgIF9kaXYuYXBwZW5kQ2hpbGQoX3NlbCk7CisgICAgcmV0dXJuOworICB9CisKKyAgdHlwZSA9IHR5cGUucmVwbGFjZSgvXmhbMS02XSQvLCJoIik7CisgIHZhciB0b3B0ID0gZXZhbCgnb3BUYWdfJyt0eXBlKTsKKyAgaWYodHlwZW9mIHRvcHQgPT0gJ29iamVjdCcpIAorICAgIHZhciBvYmogPSB0b3B0OworICBlbHNlIAorICAgIHJldHVybjsKKworICBmb3JPYmooSFRNTEFyZWEuX2xjKCJBVFRSSUJVVEVTIiwgIlF1aWNrVGFnIikpOworICBfZGl2LmFwcGVuZENoaWxkKF9zZWwpOworCisgIGZ1bmN0aW9uIGZvck9iaihmaXJzdCkgeworICAgIGlmKGZpcnN0KSB7CisgICAgICB2YXIgX29wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7CisgICAgICBfb3AuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZmlyc3QpKTsKKyAgICAgIF9zZWwuYXBwZW5kQ2hpbGQoX29wKTsKKyAgICB9CisgICAgZm9yKGkgaW4gb2JqKSB7CisgICAgICB2YXIgb3B0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7CisgICAgICBvcHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaSkpOworICAgICAgb3B0LnZhbHVlID0gb2JqW2ldOworICAgICAgX3NlbC5hcHBlbmRDaGlsZChvcHQpOworICAgIH0KKyAgfQorfQorCitmdW5jdGlvbiBjb2xvcnMoKSB7CisgIHZhciBjb2xsb2MgPSB3aW5kb3cubG9jYXRpb24udG9TdHJpbmcoKS5yZXBsYWNlKC9wbHVnaW5zLiskLywiIikgKworICAgICAgICAgICAgICAgInBvcHVwcy9zZWxlY3RfY29sb3IuaHRtbCI7CisgIHdpbmRvdy5vcGVuKGNvbGxvYywgJ2NvbG9ycycsICJ0b29sYmFyPW5vLGxvY2F0aW9uPW5vLGRpcmVjdG9yaWVzPW5vLCIgKworICAgICAgICAgICAgICAic3RhdHVzPW5vLG1lbnViYXI9bm8sc2Nyb2xsYmFycz1ubyxyZXNpemFibGU9bm8sd2lkdGg9MjQwLGhlaWdodD0xODIiKTsKK30KKworLy8gc2ltdWxhdGlvbiBvZiBEaWFsb2cuX3JldHVybiAtIHNlbGVjdF9jb2xvci5odG1sIG5lZWRzIGl0LgordmFyIERpYWxvZyA9IG5ldyBPYmplY3QoKTsKK0RpYWxvZy5fcmV0dXJuID0gZnVuY3Rpb24gKHZhbCkgeworICBpZih2YWwgIT0gbnVsbCkgeworICAgIGlmKENTU0VkaXQpCisgICAgICB2YWwgKz0gJzsgJzsKKyAgICBlbHNlCisgICAgICB2YWwgKz0gJyInOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdvcGVuJykuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFnb3BlbicpLnZhbHVlICs9ICIjIit2YWw7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0X2NvbG9ycycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgIH0KK307Cis8L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CitodG1sLCBib2R5IHsKK2JhY2tncm91bmQ6IEJ1dHRvbkZhY2U7Citjb2xvcjogQnV0dG9uVGV4dDsKK2ZvbnQ6IDExcHggVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjsKK21hcmdpbjogMHB4OworcGFkZGluZzogMHB4OworYm9yZGVyLXdpZHRoOiAwcHg7Cit9Citib2R5IHsgcGFkZGluZzogNXB4OyB9Cit0YWJsZSB7IGZvbnQ6IDExcHggVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjsgfQorc2VsZWN0LCBpbnB1dCwgYnV0dG9uIHsgZm9udDogMTFweCBUYWhvbWEsVmVyZGFuYSxzYW5zLXNlcmlmOyB9CitidXR0b24geyB3aWR0aDogNzBweDsgfQorLnNwYWNlIHsgcGFkZGluZzogMnB4OyB9CisudGl0bGUgeworYmFja2dyb3VuZDogI2RkZjsKK2NvbG9yOiAjMDAwOworZm9udC13ZWlnaHQ6IGJvbGQ7Citmb250LXNpemU6IDEyMCU7CitwYWRkaW5nOiAzcHggMTBweDsKK21hcmdpbi1ib3R0b206IDEwcHg7Citib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7CitsZXR0ZXItc3BhY2luZzogMnB4OworfQorLmJ1dHRvbnMgeworYm9yZGVyLXRvcDogMXB4IHNvbGlkICM5OTk7CitwYWRkaW5nOiA1cHg7Cit0ZXh0LWFsaWduOiByaWdodDsKK2hlaWdodDogMjBweDsKK30KK2Zvcm0geyBwYWRkaW5nOiAwcHg7IG1hcmdpbjogMHB4OyB9Cis8L3N0eWxlPgorPC9oZWFkPgorICA8Ym9keSBjbGFzcz0iZGlhbG9nIiBvbmxvYWQ9IkluaXQoKSI+Cis8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJnZXQiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZSIgc3R5bGU9IndpZHRoOiAzNjBweCI+UXVpY2sgVGFnIEVkaXRvcjwvZGl2PgorICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij4KKyAgPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjM3MCI+CisgICAgPHRib2R5PgorICAgICAgPHRyPgorICAgICAgICA8dGQgY29sc3Bhbj0iMiIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiIHN0eWxlPSJwYWRkaW5nOiAzcHg7IGJhY2tncm91bmQtY29sb3I6ICNlOWU5ZTk7Ij4KKyAgICAgICAgPHN0cm9uZyBzdHlsZT0iZm9udC1zaXplOiAxNHB4Ij4mbHQ7PC9zdHJvbmc+CisgICAgICAgIDxpbnB1dCBpZD0idGFnb3BlbiIgdHlwZT0idGV4dCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNlOWU5ZTk7IHdpZHRoOiAzMjdweDsgYm9yZGVyLXdpZHRoOiAwcHg7Ij4KKyAgICAgICAgPHN0cm9uZyBzdHlsZT0iZm9udC1zaXplOiAxNHB4Ij4mZ3Q7PC9zdHJvbmc+CisgICAgICAgIDwvdGQ+CisgICAgICA8L3RyPgorICAgIDwvdGJvZHk+CisgIDwvdGFibGU+CisgIDwvZGl2PgorPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgorPGRpdiBjbGFzcz0iYnV0dG9ucyI+Cis8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9ImJ0X2NvbG9ycyIgb25jbGljaz0iY29sb3JzKCk7Ij5Db2xvcnM8L2J1dHRvbj4KKzxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iYnRfb2siIG9uY2xpY2s9InJldHVybiBvbk9LKCk7Ij5PazwvYnV0dG9uPgorPGJ1dHRvbiB0eXBlPSJidXR0b24iIG9uY2xpY2s9InJldHVybiBvbkNhbmNlbCgpOyI+Q2FuY2VsPC9idXR0b24+Cis8L2Rpdj4KKzxkaXYgaWQ9InNob3dzZWxlY3QiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDo3cHg7IHRvcDo3NXB4OyB3aWR0aDoxNTBweDsgei1pbmRleDoxMDA7IHZpc2liaWxpdHk6IHZpc2libGU7IGhlaWdodDogMTNweDsgY29sb3I6IHJlZDsiPgorPC9kaXY+Cis8L2Zvcm0+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy90YWctbGliLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9RdWlja1RhZy90YWctbGliLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3Y2RiMTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1F1aWNrVGFnL3RhZy1saWIuanMKQEAgLTAsMCArMSwzNTYgQEAKKy8qDQorICBUQUcgTGlicmFyeSBmb3IgUXVpY2tUYWcgUGx1Z2luICANCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgIA0KKyAgYWxsVGFncyA9IEFsbCB0YWdzIHRoYXQgYXBwZWFycyBpbiB0aGUgZmlyc3QgZHJvcGRvd24gKCdUQUdTJykgeydjYXB0aW9uJzogJ3ZhbHVlJ30gIA0KKyAgdGFnTGliID0gVGhlIHRhZ3Mgd2l0aCBvcHRpb25zIChqdXN0IHRvIGNoZWNrIGlmIGN1cnJlbnQgVEFHIGhhdmUgb3B0aW9ucykgeydbVEFHXSc6IHRydWV9DQorICBzdWJUYWdMaWIgPSBDb21wbGVtZW50cyBmb3Igc29tZSB0YWdzIHRoYXQgbmVlZHMgaXQgKFRBQkxFKSANCisgICAgeydbVEFHXSc6IHsnb3AnOiAnYWZ0ZXIgdGFnIG9wZW4nLCAnY2wnOiAnYmVmb3JlIHRhZyBjbG9zZSd9fQ0KKyAgb3BUYWdfYWxsID0gQ29tbW9uIGF0dHJpYnV0ZXMgdG8gYWxsIFRBR1MgeydjYXB0aW9uJzogJ3ZhbHVlJ30gIA0KKyAgb3BBdHRfYWxsID0gT3B0aW9ucyBmb3IgdGhlIGNvbW1vbiBhdHRyaWJ1dGVzIHsnYXR0cmlidXRlJzogeydjYXB0aW9uJzogJ3ZhbHVlJ319DQorICBvcFRhZ19bVEFHXSA9IEF0dHJpYnV0ZXMgZm9yIFtUQUddIHsnY2FwdGlvbic6ICd2YWx1ZSd9DQorICBvcEF0dF9bVEFHXSA9IE9wdGlvbnMgZm9yIHRoZSBbVEFHXSBhdHRyaWJ1dGVzIHsnYXR0cmlidXRlJzogeydjYXB0aW9uJzogJ3ZhbHVlJ319DQorICANCisqLw0KKw0KK3ZhciBhbGxUYWdzID0gew0KKydhJzogJ2EnLA0KKydhIChmdWxsKSc6ICdhIGhyZWY9IiIgdGFyZ2V0PSIiJywNCisnYWRkcmVzcyc6ICdhZGRyZXNzJywNCisnYic6ICdiJywNCisnYmlnJzogJ2JpZycsDQorJ2Jsb2NrcXVvdGUnOiAnYmxvY2txdW90ZScsDQorJ2NvZGUnOiAnY29kZScsDQorJ2Rpdic6ICdkaXYnLA0KKydlbSc6ICdlbScsDQorJ2ZpZWxkc2V0JzogJ2ZpZWxkc2V0JywNCisnZm9udCc6ICdmb250JywNCisnZm9udCAoZnVsbCknOiAnZm9udCBmYWNlPSIiIHNpemU9IiIgY29sb3I9IiInLA0KKydoMSc6ICdoMScsDQorJ2gyJzogJ2gyJywNCisnaDMnOiAnaDMnLA0KKydoNCc6ICdoNCcsDQorJ2g1JzogJ2g1JywNCisnaDYnOiAnaDYnLA0KKydpJzogJ2knLA0KKydsZWdlbmQnOiAnbGVnZW5kJywNCisnbGknOiAnbGknLA0KKydvbCc6ICdvbCcsDQorJ3VsJzogJ3VsJywNCisncCc6ICdwJywNCisncHJlJzogJ3ByZScsDQorJ3NtYWxsJzogJ3NtYWxsJywNCisnc3Bhbic6ICdzcGFuJywNCisnc3Ryb25nJzogJ3N0cm9uZycsDQorJ3N1Yic6ICdzdWInLA0KKydzdXAnOiAnc3VwJywNCisndGFibGUnOiAndGFibGUnDQorfTsNCisNCisvLyB0YWdzIHdpdGggb3B0aW9ucw0KK3ZhciB0YWdMaWIgPSAgew0KKydhJzogdHJ1ZSwgDQorJ2Rpdic6IHRydWUsIA0KKydmb250JzogdHJ1ZSwgDQorJ2gxJzogdHJ1ZSwNCisnaDInOiB0cnVlLA0KKydoMyc6IHRydWUsDQorJ2g0JzogdHJ1ZSwNCisnaDUnOiB0cnVlLA0KKydoNic6IHRydWUsDQorJ3AnOiB0cnVlLA0KKyd0YWJsZSc6IHRydWUNCit9Ow0KKy8vIHRhZ3MgdGhhdCBuZWVkcyBzb21lIGNvbXBsZW1lbnQgICAgICAgICAgICAgICB2LS0gQXZvaWQgbGNfcGFyc2Vfc3RyaW5ncy5waHANCit2YXIgc3ViVGFnTGliID0geyd0YWJsZSc6IHsnb3AnOiAnPHRib2R5Pjx0cj48dGQnKyc+JywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2wnOiAnPC90ZD48L3RyPjwvdGJvZHk+J30NCit9Ow0KKw0KK3ZhciBvcFRhZ19hID0gew0KKydocmVmJzogJ2hyZWY9IicsDQorJ25hbWUnOiAnbmFtZT0iJywNCisndGFyZ2V0JzogJ3RhcmdldD0iJw0KK307DQordmFyIG9wQXR0X2EgPSB7DQorJ2hyZWYnOiB7J2h0dHA6Ly8nOiAnaHR0cDovLycsDQorICAgICAgICAgJ2h0dHBzOi8vJzogJ2h0dHBzOi8vJywNCisgICAgICAgICAnZnRwOi8vJzogJ2Z0cDovLycsDQorICAgICAgICAgJ21haWx0bzonOiAnbWFpbHRvOicsDQorICAgICAgICAgJyMnOiAnIyInfSwNCisndGFyZ2V0JzogeydfdG9wJzogJ190b3AiJywNCisgICAgICAgICAgICdfc2VsZic6ICdfc2VsZiInLA0KKyAgICAgICAgICAgJ19wYXJlbnQnOiAnX3BhcmVudCInLA0KKyAgICAgICAgICAgJ19ibGFuayc6ICdfYmxhbmsiJ30NCit9Ow0KKw0KK3ZhciBvcFRhZ19mb250ID0gew0KKydmYWNlJzogJ2ZhY2U9IicsDQorJ3NpemUnOiAnc2l6ZT0iJywNCisnY29sb3InOiAnY29sb3I9IicNCit9Ow0KK3ZhciBvcEF0dF9mb250ID0gew0KKydmYWNlJzogeydWZXJkYW5hJzogJ1ZlcmRhbmEiJywNCisgICAgICAgICAnQXJpYWwnOiAnQXJpYWwiJywNCisgICAgICAgICAnVGFob21hJzogJ1RhaG9tYSInLA0KKyAgICAgICAgICdDb3VyaWVyIE5ldyc6ICdDb3VyaWVyIE5ldyInLA0KKyAgICAgICAgICdUaW1lcyBOZXcgUm9tYW4nOiAnVGltZXMgTmV3IFJvbWFuIid9LA0KKydzaXplJzogeycxJzogJzEiJywnMic6ICcyIicsJzMnOiAnMyInLCc0JzogJzQiJywnNSc6ICc1IicsJzYnOiAnNiInLA0KKyAgICAgICAgICcrMSc6ICcrMSInLCcrMic6ICcrMiInLCcrMyc6ICcrMyInLCcrNCc6ICcrNCInLCcrNSc6ICcrNSInLCcrNic6ICcrNiInLA0KKyAgICAgICAgICctMSc6ICctMSInLCctMic6ICctMiInLCctMyc6ICctMyInLCctNCc6ICctNCInLCctNSc6ICctNSInLCctNic6ICctNiInfQ0KK307DQorDQordmFyIG9wVGFnX2RpdiA9IHsNCisnYWxpZ24nOiAnYWxpZ249IicNCit9Ow0KK3ZhciBvcEF0dF9kaXYgPSB7DQorJ2FsaWduJzogeydjZW50ZXInOiAnY2VudGVyIicsDQorICAgICAgICAgICdsZWZ0JzogJ2xlZnQiJywNCisgICAgICAgICAgJ3JpZ2h0JzogJ3JpZ2h0IicsDQorICAgICAgICAgICdqdXN0aWZ5JzogJ2p1c3RpZnkiJ30NCit9Ow0KKw0KK3ZhciBvcFRhZ19oID0gew0KKydhbGlnbic6ICdhbGlnbj0iJw0KK307DQordmFyIG9wQXR0X2ggPSB7DQorJ2FsaWduJzogeydjZW50ZXInOiAnY2VudGVyIicsDQorICAgICAgICAgICdsZWZ0JzogJ2xlZnQiJywNCisgICAgICAgICAgJ3JpZ2h0JzogJ3JpZ2h0IicsDQorICAgICAgICAgICdqdXN0aWZ5JzogJ2p1c3RpZnkiJ30NCit9Ow0KKw0KK3ZhciBvcFRhZ19wID0gew0KKydhbGlnbic6ICdhbGlnbj0iJw0KK307DQordmFyIG9wQXR0X3AgPSB7DQorJ2FsaWduJzogeydjZW50ZXInOiAnY2VudGVyIicsDQorICAgICAgICAgICdsZWZ0JzogJ2xlZnQiJywNCisgICAgICAgICAgJ3JpZ2h0JzogJ3JpZ2h0IicsDQorICAgICAgICAgICdqdXN0aWZ5JzogJ2p1c3RpZnkiJ30NCit9Ow0KKw0KK3ZhciBvcFRhZ190YWJsZSA9IHsNCisnYWxpZ24nOiAnYWxpZ249IicsDQorJ3dpZHRoJzogJ3dpZHRoPSInLA0KKydoZWlnaHQnOiAnaGVpZ2h0PSInLA0KKydjZWxscGFkZGluZyc6ICdjZWxscGFkZGluZz0iJywNCisnY2VsbHNwYWNpbmcnOiAnY2VsbHNwYWNpbmc9IicsDQorJ2JhY2tncm91bmQnOiAnYmFja2dyb3VuZD0iJywNCisnYmdjb2xvcic6ICdiZ2NvbG9yPSInLA0KKydib3JkZXInOiAnYm9yZGVyPSInLA0KKydib3JkZXJjb2xvcic6ICdib3JkZXJjb2xvcj0iJywNCisnYm9yZGVyY29sb3JsaWdodCc6ICdib3JkZXJjb2xvcmxpZ2h0PSInLA0KKydib3JkZXJjb2xvcmRhcmsnOiAnYm9yZGVyY29sb3JkYXJrPSInDQorfTsNCit2YXIgb3BBdHRfdGFibGUgPSB7DQorJ2FsaWduJzogeydjZW50ZXInOiAnY2VudGVyIicsDQorICAgICAgICAgICdsZWZ0JzogJ2xlZnQiJywNCisgICAgICAgICAgJ3JpZ2h0JzogJ3JpZ2h0Iid9DQorfTsNCisNCisvLyBmb3IgYWxsIHRhZ3MgDQordmFyIG9wVGFnX2FsbCA9IHsNCisnY2xhc3MnOiAnY2xhc3M9IicsDQorJ2Rpcic6ICdkaXI9IicsDQorJ2lkJzogJ2lkPSInLA0KKydsYW5nJzogJ2xhbmc9IicsDQorJ29uRm9jdXMnOiAnb25Gb2N1cz0iJywNCisnb25CbHVyJzogJ29uQmx1cj0iJywNCisnb25DbGljayc6ICdvbkNsaWNrPSInLA0KKydvbkRibENsaWNrJzogJ29uRGJsQ2xpY2s9IicsDQorJ29uTW91c2VEb3duJzogJ29uTW91c2VEb3duPSInLA0KKydvbk1vdXNlVXAnOiAnb25Nb3VzZVVwPSInLA0KKydvbk1vdXNlT3Zlcic6ICdvbk1vdXNlT3Zlcj0iJywNCisnb25Nb3VzZU1vdmUnOiAnb25Nb3VzZU1vdmU9IicsDQorJ29uTW91c2VPdXQnOiAnb25Nb3VzZU91dD0iJywNCisnb25LZXlQcmVzcyc6ICdvbktleVByZXNzPSInLA0KKydvbktleURvd24nOiAnb25LZXlEb3duPSInLA0KKydvbktleVVwJzogJ29uS2V5VXA9IicsDQorJ3N0eWxlJzogJ3N0eWxlPSInLA0KKyd0aXRsZSc6ICd0aXRsZT0nKyciJyAvLyAvLyAgPC0tIEF2b2lkIGxjX3BhcnNlX3N0cmluZ3MucGhwDQorfTsNCit2YXIgb3BBdHRfYWxsID0gew0KKydjbGFzcyc6IHt9LA0KKydkaXInOiB7J3J0bCc6ICdydGwiJywnbHRyJzogJ2x0ciInfSwNCisnbGFuZyc6IHsnQWZyaWthYW5zICc6ICdhZiInLA0KKyAgICAgICAgICdBbGJhbmlhbiAnOiAnc3EiJywNCisgICAgICAgICAnQXJhYmljICc6ICdhciInLA0KKyAgICAgICAgICdCYXNxdWUgJzogJ2V1IicsDQorICAgICAgICAgJ0JyZXRvbiAnOiAnYnIiJywNCisgICAgICAgICAnQnVsZ2FyaWFuICc6ICdiZyInLA0KKyAgICAgICAgICdCZWxhcnVzaWFuICc6ICdiZSInLA0KKyAgICAgICAgICdDYXRhbGFuICc6ICdjYSInLA0KKyAgICAgICAgICdDaGluZXNlICc6ICd6aCInLA0KKyAgICAgICAgICdDcm9hdGlhbiAnOiAnaHIiJywNCisgICAgICAgICAnQ3plY2ggJzogJ2NzIicsDQorICAgICAgICAgJ0RhbmlzaCAnOiAnZGEiJywNCisgICAgICAgICAnRHV0Y2ggJzogJ25sIicsDQorICAgICAgICAgJ0VuZ2xpc2ggJzogJ2VuIicsDQorICAgICAgICAgJ0VzdG9uaWFuICc6ICdldCInLA0KKyAgICAgICAgICdGYWVyb2VzZSAnOiAnZm8iJywNCisgICAgICAgICAnRmFyc2kgJzogJ2ZhIicsDQorICAgICAgICAgJ0Zpbm5pc2ggJzogJ2ZpIicsDQorICAgICAgICAgJ0ZyZW5jaCAnOiAnZnIiJywNCisgICAgICAgICAnR2FlbGljICc6ICdnZCInLA0KKyAgICAgICAgICdHZXJtYW4gJzogJ2RlIicsDQorICAgICAgICAgJ0dyZWVrICc6ICdlbCInLA0KKyAgICAgICAgICdIZWJyZXcgJzogJ2hlIicsDQorICAgICAgICAgJ0hpbmRpICc6ICdoaSInLA0KKyAgICAgICAgICdIdW5nYXJpYW4gJzogJ2h1IicsDQorICAgICAgICAgJ0ljZWxhbmRpYyAnOiAnaXMiJywNCisgICAgICAgICAnSW5kb25lc2lhbiAnOiAnaWQiJywNCisgICAgICAgICAnSXRhbGlhbiAnOiAnaXQiJywNCisgICAgICAgICAnSmFwYW5lc2UgJzogJ2phIicsDQorICAgICAgICAgJ0tvcmVhbiAnOiAna28iJywNCisgICAgICAgICAnTGF0dmlhbiAnOiAnbHYiJywNCisgICAgICAgICAnTGl0aHVhbmlhbiAnOiAnbHQiJywNCisgICAgICAgICAnTWFjZWRvbmlhbiAnOiAnbWsiJywNCisgICAgICAgICAnTWFsYXlzaWFuICc6ICdtcyInLA0KKyAgICAgICAgICdNYWx0ZXNlICc6ICdtdCInLA0KKyAgICAgICAgICdOb3J3ZWdpYW4gJzogJ25vIicsDQorICAgICAgICAgJ1BvbGlzaCAnOiAncGwiJywNCisgICAgICAgICAnUG9ydHVndWVzZSAnOiAncHQiJywNCisgICAgICAgICAnUmhhZXRvLVJvbWFuaWMgJzogJ3JtIicsDQorICAgICAgICAgJ1JvbWFuaWFuICc6ICdybyInLA0KKyAgICAgICAgICdSdXNzaWFuICc6ICdydSInLA0KKyAgICAgICAgICdTYW1pICc6ICdzeiInLA0KKyAgICAgICAgICdTZXJiaWFuICc6ICdzciInLA0KKyAgICAgICAgICdTZXRzd2FuYSAnOiAndG4iJywNCisgICAgICAgICAnU2xvdmFrICc6ICdzayInLA0KKyAgICAgICAgICdTbG92ZW5pYW4gJzogJ3NsIicsDQorICAgICAgICAgJ1NwYW5pc2ggJzogJ2VzIicsDQorICAgICAgICAgJ1N1dHUgJzogJ3N4IicsDQorICAgICAgICAgJ1N3ZWRpc2ggJzogJ3N2IicsDQorICAgICAgICAgJ1RoYWkgJzogJ3RoIicsDQorICAgICAgICAgJ1Rzb25nYSAnOiAndHMiJywNCisgICAgICAgICAnVHVya2lzaCAnOiAndHIiJywNCisgICAgICAgICAnVWtyYWluaWFuICc6ICd1ayInLA0KKyAgICAgICAgICdVcmR1ICc6ICd1ciInLA0KKyAgICAgICAgICdWaWV0bmFtZXNlICc6ICd2aSInLA0KKyAgICAgICAgICdYaG9zYSAnOiAneGgiJywNCisgICAgICAgICAnWWlkZGlzaCAnOiAneWkiJywNCisgICAgICAgICAnWnVsdSc6ICd6dSInfSwNCisnc3R5bGUnOiB7J2F6aW11dGgnOiAnYXppbXV0aDogJywNCisgICAgICAgICAgJ2JhY2tncm91bmQnOiAnYmFja2dyb3VuZDogJywNCisgICAgICAgICAgJ2JhY2tncm91bmQtYXR0YWNobWVudCc6ICdiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6ICcsDQorICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ2JhY2tncm91bmQtY29sb3I6ICcsDQorICAgICAgICAgICdiYWNrZ3JvdW5kLWltYWdlJzogJ2JhY2tncm91bmQtaW1hZ2U6ICcsDQorICAgICAgICAgICdiYWNrZ3JvdW5kLXBvc2l0aW9uJzogJ2JhY2tncm91bmQtcG9zaXRpb246ICcsDQorICAgICAgICAgICdiYWNrZ3JvdW5kLXJlcGVhdCc6ICdiYWNrZ3JvdW5kLXJlcGVhdDogJywNCisgICAgICAgICAgJ2JvcmRlcic6ICdib3JkZXI6ICcsDQorICAgICAgICAgICdib3JkZXItYm90dG9tJzogJ2JvcmRlci1ib3R0b206ICcsDQorICAgICAgICAgICdib3JkZXItbGVmdCc6ICdib3JkZXItbGVmdDogJywNCisgICAgICAgICAgJ2JvcmRlci1yaWdodCc6ICdib3JkZXItcmlnaHQ6ICcsDQorICAgICAgICAgICdib3JkZXItdG9wJzogJ2JvcmRlci10b3A6ICcsDQorICAgICAgICAgICdib3JkZXItYm90dG9tLWNvbG9yJzogJ2JvcmRlci1ib3R0b20tY29sb3I6ICcsDQorICAgICAgICAgICdib3JkZXItbGVmdC1jb2xvcic6ICdib3JkZXItbGVmdC1jb2xvcjogJywNCisgICAgICAgICAgJ2JvcmRlci1yaWdodC1jb2xvcic6ICdib3JkZXItcmlnaHQtY29sb3I6ICcsDQorICAgICAgICAgICdib3JkZXItdG9wLWNvbG9yJzogJ2JvcmRlci10b3AtY29sb3I6ICcsDQorICAgICAgICAgICdib3JkZXItYm90dG9tLXN0eWxlJzogJ2JvcmRlci1ib3R0b20tc3R5bGU6ICcsDQorICAgICAgICAgICdib3JkZXItbGVmdC1zdHlsZSc6ICdib3JkZXItbGVmdC1zdHlsZTogJywNCisgICAgICAgICAgJ2JvcmRlci1yaWdodC1zdHlsZSc6ICdib3JkZXItcmlnaHQtc3R5bGU6ICcsDQorICAgICAgICAgICdib3JkZXItdG9wLXN0eWxlJzogJ2JvcmRlci10b3Atc3R5bGU6ICcsDQorICAgICAgICAgICdib3JkZXItYm90dG9tLXdpZHRoJzogJ2JvcmRlci1ib3R0b20td2lkdGg6ICcsDQorICAgICAgICAgICdib3JkZXItbGVmdC13aWR0aCc6ICdib3JkZXItbGVmdC13aWR0aDogJywNCisgICAgICAgICAgJ2JvcmRlci1yaWdodC13aWR0aCc6ICdib3JkZXItcmlnaHQtd2lkdGg6ICcsDQorICAgICAgICAgICdib3JkZXItdG9wLXdpZHRoJzogJ2JvcmRlci10b3Atd2lkdGg6ICcsDQorICAgICAgICAgICdib3JkZXItY29sbGFwc2UnOiAnYm9yZGVyLWNvbGxhcHNlOiAnLA0KKyAgICAgICAgICAnYm9yZGVyLWNvbG9yJzogJ2JvcmRlci1jb2xvcjogJywNCisgICAgICAgICAgJ2JvcmRlci1zdHlsZSc6ICdib3JkZXItc3R5bGU6ICcsDQorICAgICAgICAgICdib3JkZXItd2lkdGgnOiAnYm9yZGVyLXdpZHRoOiAnLA0KKyAgICAgICAgICAnYm90dG9tJzogJ2JvdHRvbTogJywNCisgICAgICAgICAgJ2NhcHRpb24tc2lkZSc6ICdjYXB0aW9uLXNpZGU6ICcsDQorICAgICAgICAgICdjZWxsLXNwYWNpbmcnOiAnY2VsbC1zcGFjaW5nOiAnLA0KKyAgICAgICAgICAnY2xlYXInOiAnY2xlYXI6ICcsDQorICAgICAgICAgICdjbGlwJzogJ2NsaXA6ICcsDQorICAgICAgICAgICdjb2xvcic6ICdjb2xvcjogJywNCisgICAgICAgICAgJ2NvbHVtbi1zcGFuJzogJ2NvbHVtbi1zcGFuOiAnLA0KKyAgICAgICAgICAnY29udGVudCc6ICdjb250ZW50OiAnLA0KKyAgICAgICAgICAnY3VlJzogJ2N1ZTogJywNCisgICAgICAgICAgJ2N1ZS1hZnRlcic6ICdjdWUtYWZ0ZXI6ICcsDQorICAgICAgICAgICdjdWUtYmVmb3JlJzogJ2N1ZS1iZWZvcmU6ICcsDQorICAgICAgICAgICdjdXJzb3InOiAnY3Vyc29yOiAnLA0KKyAgICAgICAgICAnZGlyZWN0aW9uJzogJ2RpcmVjdGlvbjogJywNCisgICAgICAgICAgJ2Rpc3BsYXknOiAnZGlzcGxheTogJywNCisgICAgICAgICAgJ2VsZXZhdGlvbic6ICdlbGV2YXRpb246ICcsDQorICAgICAgICAgICdmaWx0ZXInOiAnZmlsdGVyOiAnLA0KKyAgICAgICAgICAnZmxvYXQnOiAnZmxvYXQ6ICcsDQorICAgICAgICAgICdmb250LWZhbWlseSc6ICdmb250LWZhbWlseTogJywNCisgICAgICAgICAgJ2ZvbnQtc2l6ZSc6ICdmb250LXNpemU6ICcsDQorICAgICAgICAgICdmb250LXNpemUtYWRqdXN0JzogJ2ZvbnQtc2l6ZS1hZGp1c3Q6ICcsDQorICAgICAgICAgICdmb250LXN0eWxlJzogJ2ZvbnQtc3R5bGU6ICcsDQorICAgICAgICAgICdmb250LXZhcmlhbnQnOiAnZm9udC12YXJpYW50OiAnLA0KKyAgICAgICAgICAnZm9udC13ZWlnaHQnOiAnZm9udC13ZWlnaHQ6ICcsDQorICAgICAgICAgICdoZWlnaHQnOiAnaGVpZ2h0OiAnLA0KKyAgICAgICAgICAnIWltcG9ydGFudCc6ICchaW1wb3J0YW50OiAnLA0KKyAgICAgICAgICAnbGVmdCc6ICdsZWZ0OiAnLA0KKyAgICAgICAgICAnbGV0dGVyLXNwYWNpbmcnOiAnbGV0dGVyLXNwYWNpbmc6ICcsDQorICAgICAgICAgICdsaW5lLWhlaWdodCc6ICdsaW5lLWhlaWdodDogJywNCisgICAgICAgICAgJ2xpc3Qtc3R5bGUnOiAnbGlzdC1zdHlsZTogJywNCisgICAgICAgICAgJ2xpc3Qtc3R5bGUtaW1hZ2UnOiAnbGlzdC1zdHlsZS1pbWFnZTogJywNCisgICAgICAgICAgJ2xpc3Qtc3R5bGUtcG9zaXRpb24nOiAnbGlzdC1zdHlsZS1wb3NpdGlvbjogJywNCisgICAgICAgICAgJ2xpc3Qtc3R5bGUtdHlwZSc6ICdsaXN0LXN0eWxlLXR5cGU6ICcsDQorICAgICAgICAgICdtYXJnaW4nOiAnbWFyZ2luOiAnLA0KKyAgICAgICAgICAnbWFyZ2luLWJvdHRvbSc6ICdtYXJnaW4tYm90dG9tOiAnLA0KKyAgICAgICAgICAnbWFyZ2luLWxlZnQnOiAnbWFyZ2luLWxlZnQ6ICcsDQorICAgICAgICAgICdtYXJnaW4tcmlnaHQnOiAnbWFyZ2luLXJpZ2h0OiAnLA0KKyAgICAgICAgICAnbWFyZ2luLXRvcCc6ICdtYXJnaW4tdG9wOiAnLA0KKyAgICAgICAgICAnbWFya3MnOiAnbWFya3M6ICcsDQorICAgICAgICAgICdtYXgtaGVpZ2h0JzogJ21heC1oZWlnaHQ6ICcsDQorICAgICAgICAgICdtaW4taGVpZ2h0JzogJ21pbi1oZWlnaHQ6ICcsDQorICAgICAgICAgICdtYXgtd2lkdGgnOiAnbWF4LXdpZHRoOiAnLA0KKyAgICAgICAgICAnbWluLXdpZHRoJzogJ21pbi13aWR0aDogJywNCisgICAgICAgICAgJ29ycGhhbnMnOiAnb3JwaGFuczogJywNCisgICAgICAgICAgJ292ZXJmbG93JzogJ292ZXJmbG93OiAnLA0KKyAgICAgICAgICAncGFkZGluZyc6ICdwYWRkaW5nOiAnLA0KKyAgICAgICAgICAncGFkZGluZy1ib3R0b20nOiAncGFkZGluZy1ib3R0b206ICcsDQorICAgICAgICAgICdwYWRkaW5nLWxlZnQnOiAncGFkZGluZy1sZWZ0OiAnLA0KKyAgICAgICAgICAncGFkZGluZy1yaWdodCc6ICdwYWRkaW5nLXJpZ2h0OiAnLA0KKyAgICAgICAgICAncGFkZGluZy10b3AnOiAncGFkZGluZy10b3A6ICcsDQorICAgICAgICAgICdwYWdlLWJyZWFrLWFmdGVyJzogJ3BhZ2UtYnJlYWstYWZ0ZXI6ICcsDQorICAgICAgICAgICdwYWdlLWJyZWFrLWJlZm9yZSc6ICdwYWdlLWJyZWFrLWJlZm9yZTogJywNCisgICAgICAgICAgJ3BhdXNlJzogJ3BhdXNlOiAnLA0KKyAgICAgICAgICAncGF1c2UtYWZ0ZXInOiAncGF1c2UtYWZ0ZXI6ICcsDQorICAgICAgICAgICdwYXVzZS1iZWZvcmUnOiAncGF1c2UtYmVmb3JlOiAnLA0KKyAgICAgICAgICAncGl0Y2gnOiAncGl0Y2g6ICcsDQorICAgICAgICAgICdwaXRjaC1yYW5nZSc6ICdwaXRjaC1yYW5nZTogJywNCisgICAgICAgICAgJ3BsYXktZHVyaW5nJzogJ3BsYXktZHVyaW5nOiAnLA0KKyAgICAgICAgICAncG9zaXRpb24nOiAncG9zaXRpb246ICcsDQorICAgICAgICAgICdyaWNobmVzcyc6ICdyaWNobmVzczogJywNCisgICAgICAgICAgJ3JpZ2h0JzogJ3JpZ2h0OiAnLA0KKyAgICAgICAgICAncm93LXNwYW4nOiAncm93LXNwYW46ICcsDQorICAgICAgICAgICdzaXplJzogJ3NpemU6ICcsDQorICAgICAgICAgICdzcGVhayc6ICdzcGVhazogJywNCisgICAgICAgICAgJ3NwZWFrLWRhdGUnOiAnc3BlYWstZGF0ZTogJywNCisgICAgICAgICAgJ3NwZWFrLWhlYWRlcic6ICdzcGVhay1oZWFkZXI6ICcsDQorICAgICAgICAgICdzcGVhay1udW1lcmFsJzogJ3NwZWFrLW51bWVyYWw6ICcsDQorICAgICAgICAgICdzcGVhay1wdW5jdHVhdGlvbic6ICdzcGVhay1wdW5jdHVhdGlvbjogJywNCisgICAgICAgICAgJ3NwZWFrLXRpbWUnOiAnc3BlYWstdGltZTogJywNCisgICAgICAgICAgJ3NwZWVjaC1yYXRlJzogJ3NwZWVjaC1yYXRlOiAnLA0KKyAgICAgICAgICAnc3RyZXNzJzogJ3N0cmVzczogJywNCisgICAgICAgICAgJ3RhYmxlLWxheW91dCc6ICd0YWJsZS1sYXlvdXQ6ICcsDQorICAgICAgICAgICd0ZXh0LWFsaWduJzogJ3RleHQtYWxpZ246ICcsDQorICAgICAgICAgICd0ZXh0LWRlY29yYXRpb24nOiAndGV4dC1kZWNvcmF0aW9uOiAnLA0KKyAgICAgICAgICAndGV4dC1pbmRlbnQnOiAndGV4dC1pbmRlbnQ6ICcsDQorICAgICAgICAgICd0ZXh0LXNoYWRvdyc6ICd0ZXh0LXNoYWRvdzogJywNCisgICAgICAgICAgJ3RleHQtdHJhbnNmb3JtJzogJ3RleHQtdHJhbnNmb3JtOiAnLA0KKyAgICAgICAgICAndG9wJzogJ3RvcDogJywNCisgICAgICAgICAgJ3ZlcnRpY2FsLWFsaWduJzogJ3ZlcnRpY2FsLWFsaWduOiAnLA0KKyAgICAgICAgICAndmlzaWJpbGl0eSc6ICd2aXNpYmlsaXR5OiAnLA0KKyAgICAgICAgICAndm9pY2UtZmFtaWx5JzogJ3ZvaWNlLWZhbWlseTogJywNCisgICAgICAgICAgJ3ZvbHVtZSc6ICd2b2x1bWU6ICcsDQorICAgICAgICAgICd3aGl0ZS1zcGFjZSc6ICd3aGl0ZS1zcGFjZTogJywNCisgICAgICAgICAgJ3dpZG93cyc6ICd3aWRvd3M6ICcsDQorICAgICAgICAgICd3aWR0aCc6ICd3aWR0aDogJywNCisgICAgICAgICAgJ3dvcmQtc3BhY2luZyc6ICd3b3JkLXNwYWNpbmc6ICcsDQorICAgICAgICAgICd6LWluZGV4JzogJ3otaW5kZXg6ICcgfQ0KK307DQorDQorLy8gYWRkIHRoZSBjb21tb24gaXRlbXMgdG8gYWxsIG9iamVjdHMNCitmb3IodmFyIGkgaW4gdGFnTGliKSB7DQoraSA9IGkucmVwbGFjZSgvXmhbMS02XSQvLCJoIik7IC8vIGgxIC4uIGg2DQorICBmb3IodmFyIGogaW4gb3BUYWdfYWxsKQ0KKyAgICBldmFsKCdvcFRhZ18nK2krJ1siJytqKyciXSA9IG9wVGFnX2FsbFsiJytqKyciXTsnKTsNCisgIGZvcih2YXIgaiBpbiBvcEF0dF9hbGwpDQorICAgIGV2YWwoJ29wQXR0XycraSsnWyInK2orJyJdID0gb3BBdHRfYWxsWyInK2orJyJdOycpOw0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NhdmVPbkJsdXIvU2F2ZU9uQmx1ci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2F2ZU9uQmx1ci9TYXZlT25CbHVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYTU2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NhdmVPbkJsdXIvU2F2ZU9uQmx1ci5qcwpAQCAtMCwwICsxLDQ3IEBACisvKiogU2F2ZSB0aGUgY29udGVudCBvZiB0aGUgZWRpdG9yIHRvIHRoZSB0ZXh0IGFyZWEgd2hlbiBibHVycmluZyAobG9zaW5nIGZvY3VzKS4KKyAqCisgKiBAYXV0aG9yIFBldGVyIFNpZXdlcnQgCisgKiBAc2VlIFRpY2tldCAjMTQzMworICovCisgCitTYXZlT25CbHVyLl9wbHVnaW5JbmZvID0geworICBuYW1lOiJTYXZlT25CbHVyIiwKKyAgdmVyc2lvbjoiMS4wIiwKKyAgZGV2ZWxvcGVyOiJQZXRlciBTaWV3ZXJ0IiwKKyAgZGV2ZWxvcGVyX3VybDoiaHR0cDovL3hpbmhhLm9yZyIsCisgIHNwb25zb3I6IiIsCisgIHNwb25zb3JfdXJsOiIiLAorICBsaWNlbnNlOiJodG1sQXJlYSIKK307CisKK2Z1bmN0aW9uIFNhdmVPbkJsdXIoZWRpdG9yKXsKKyAgdGhpcy5lZGl0b3I9ZWRpdG9yOworfQorCitTYXZlT25CbHVyLnByb3RvdHlwZS5vbktleVByZXNzPWZ1bmN0aW9uKCl7CisgIHRoaXMucXVldWVfeGluaGFfdXBkYXRlX3RleHRhcmVhKCk7CisgIHJldHVybiBmYWxzZTsKK307CisKK1NhdmVPbkJsdXIucHJvdG90eXBlLm9uTW91c2VEb3duPWZ1bmN0aW9uKCl7CisgIHRoaXMucXVldWVfeGluaGFfdXBkYXRlX3RleHRhcmVhKCk7CisgIHJldHVybiBmYWxzZTsKK307CisKK1NhdmVPbkJsdXIucHJvdG90eXBlLnF1ZXVlX3hpbmhhX3VwZGF0ZV90ZXh0YXJlYSA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIGJsdXJyeSA9IHRoaXM7CisgIAorICBpZighdGhpcy5fYXR0YWNoX2JsdXIpCisgIHsKKyAgCisgICAgWGluaGEuX2FkZEV2ZW50KHRoaXMuZWRpdG9yLl9pZnJhbWUsICdibHVyJywgZnVuY3Rpb24oKXsgYmx1cnJ5LnhpbmhhX3VwZGF0ZV90ZXh0YXJlYSgpOyB9KTsgLy8gSUUKKyAgICBYaW5oYS5fYWRkRXZlbnQodGhpcy5lZGl0b3IuX2RvYywgJ2JsdXInLCAgICBmdW5jdGlvbigpeyBibHVycnkueGluaGFfdXBkYXRlX3RleHRhcmVhKCk7IH0pOyAvLyBHRUNLTworICAgIHRoaXMuX2F0dGFjaF9ibHVyID0gMTsKKyAgfQorfQorCitTYXZlT25CbHVyLnByb3RvdHlwZS54aW5oYV91cGRhdGVfdGV4dGFyZWEgPSBmdW5jdGlvbigpCit7CisgIHRoaXMuZWRpdG9yLl90ZXh0QXJlYS52YWx1ZT10aGlzLmVkaXRvci5vdXR3YXJkSHRtbCh0aGlzLmVkaXRvci5nZXRIVE1MKCkpOworfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TYXZlU3VibWl0L1JFQURNRS50eHQgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NhdmVTdWJtaXQvUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmE3MWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TYXZlU3VibWl0L1JFQURNRS50eHQKQEAgLTAsMCArMSwxNSBAQAorU2F2ZVN1Ym1pdCBmb3IgWGluaGEKKworZGV2ZWxvcGVkIGJ5IFJhaW11bmQgTWV5ZXIgKHJheSkgeGluaGEgQCByYWltdW5kbWV5ZXIuZGUKKworUmVnaXN0ZXJzIGEgYnV0dG9uIGZvciBzdWJtaXRpbmcgdGhlIFhpbmhhIGZvcm0gdXNpbmcgYXN5bmNocm9ub3VzCitwb3N0YmFjayBmb3Igc2VuZGluZyB0aGUgZGF0YSB0byB0aGUgc2VydmVyCisKK1VzYWdlOiBUaGlzIHNob3VsZCBiZSBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIGEgbm9ybWFsIHN1Ym1pdCBidXR0b24uCitXaGlsZSBzYXZpbmcgYSBtZXNzYWdlIGlzIGRpc3BsYXllZCB0byBpbmZvcm0gdGhlIHVzZXIgd2hhdCdzIGdvaW5nIG9uLgorT24gc3VjY2Vzc2Z1bCB0cmFuc21pc3Npb24gdGhlIG91dHB1dCBvZiB0aGUgdGFyZ2V0IHNjcmlwdCBpcyBzaG93biwgc28gaXQgc2hvdWxkIHByaW50IHNvbWUgaW5mb3JtYXRpb24KK2Fib3V0IHRoZSBzdWNjZXNzIG9mIHNhdmluZy4KKworQVRURU5USU9OOiBUaGUgZGF0YSBzZW50IGJ5IHRoaXMgbWV0aG9kIGlzIGFsd2F5cyBVVEYtOCBlbmNvZGVkLCByZWdhcmRsZXNzIG9mIHRoZSBhY3R1YWwgY2hhcnNldCB1c2VkLiBTbywgaWYgeW91IAorYXJlIHVzaW5nIGEgZGlmZmVyZW50IGVuY29kaW5nIHlvdSBoYXZlIHRvIGNvbnZlcnQgb24gdGhlIHNlcnZlciBzaWRlLgorCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NhdmVTdWJtaXQvU2F2ZVN1Ym1pdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2F2ZVN1Ym1pdC9TYXZlU3VibWl0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZWJjNmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NhdmVTdWJtaXQvU2F2ZVN1Ym1pdC5qcwpAQCAtMCwwICsxLDE1OSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorU2F2ZVN1Ym1pdCBmb3IgWGluaGEKK19fX19fX19fX19fX19fX19fX19fCisKK1NlZSBSRUFETUUudHh0IGZvciBpbmZvcm1hdGlvbgorCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2Z1bmN0aW9uIFNhdmVTdWJtaXQoZWRpdG9yKSB7CisJdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisJdGhpcy5jaGFuZ2VkID0gZmFsc2U7CisJdmFyIHNlbGYgPSB0aGlzOworCXZhciBjZmcgPSBlZGl0b3IuY29uZmlnOworCXRoaXMudGV4dGFyZWEgPSB0aGlzLmVkaXRvci5fdGV4dEFyZWE7CisKKwljZmcucmVnaXN0ZXJJY29uKCdzYXZlc3VibWl0Y2hhbmdlZCcsIFhpbmhhLmdldFBsdWdpbkRpcigiU2F2ZVN1Ym1pdCIpKyIvaW1nL2VkX3NhdmVfcmVkLmdpZiIpOworCWNmZy5yZWdpc3Rlckljb24oJ3NhdmVzdWJtaXR1bmNoYW5nZWQnLCBYaW5oYS5nZXRQbHVnaW5EaXIoIlNhdmVTdWJtaXQiKSsiL2ltZy9lZF9zYXZlX2dyZWVuLmdpZiIpOworCisJY2ZnLnJlZ2lzdGVyQnV0dG9uKHsKKwlpZCAgICAgICA6ICJzYXZlc3VibWl0IiwKKwl0b29sdGlwICA6IHNlbGYuX2xjKCJTYXZlIiksCisJaW1hZ2UgICAgOiBjZmcuaWNvbkxpc3Quc2F2ZXN1Ym1pdHVuY2hhbmdlZCwKKwl0ZXh0TW9kZSA6IGZhbHNlLAorCWFjdGlvbiAgIDogIGZ1bmN0aW9uKCkgeworCQkJc2VsZi5zYXZlKCk7CisJCX0KKwl9KTsKKwljZmcuYWRkVG9vbGJhckVsZW1lbnQoInNhdmVzdWJtaXQiLCAicG9wdXBlZGl0b3IiLCAtMSk7Cit9CisKK1NhdmVTdWJtaXQucHJvdG90eXBlLl9sYyA9IGZ1bmN0aW9uKHN0cmluZykgeworICAgIHJldHVybiBYaW5oYS5fbGMoc3RyaW5nLCAnU2F2ZVN1Ym1pdCcpOworfQorCitTYXZlU3VibWl0Ll9wbHVnaW5JbmZvID0geworICBuYW1lICAgICAgICAgIDogIlNhdmVTdWJtaXQiLAorICB2ZXJzaW9uICAgICAgIDogIjEuMCIsCisgIGRldmVsb3BlciAgICAgOiAiUmFpbXVuZCBNZXllciIsCisgIGRldmVsb3Blcl91cmwgOiAiaHR0cDovL3gtd2Vic2VydmljZS5uZXQiLAorICBjX293bmVyICAgICAgIDogIlJhaW11bmQgTWV5ZXIiLAorICBzcG9uc29yICAgICAgIDogIiIsCisgIHNwb25zb3JfdXJsICAgOiAiIiwKKyAgbGljZW5zZSAgICAgICA6ICJodG1sQXJlYSIKK30KKworU2F2ZVN1Ym1pdC5wcm90b3R5cGUub25LZXlQcmVzcyA9IGZ1bmN0aW9uKGV2KSB7CisJaWYgKCBldi5jdHJsS2V5ICYmIHRoaXMuZWRpdG9yLmdldEtleShldikgPT0gJ3MnKSB7CisJCQl0aGlzLnNhdmUodGhpcy5lZGl0b3IpOworCQkJWGluaGEuX3N0b3BFdmVudChldik7CisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJZWxzZSB7CisJCWlmICghdGhpcy5jaGFuZ2VkKSB7CisJCQlpZiAodGhpcy5nZXRDaGFuZ2VkKCkpIHRoaXMuc2V0Q2hhbmdlZCgpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorfQorU2F2ZVN1Ym1pdC5wcm90b3R5cGUub25FeGVjQ29tbWFuZCA9IGZ1bmN0aW9uIChjbWQpIHsKKwlpZiAodGhpcy5jaGFuZ2VkICYmIGNtZCA9PSAndW5kbycpIHsgCisJCWlmICh0aGlzLmluaXRpYWxfaHRtbCA9PSB0aGlzLmVkaXRvci5nZXRJbm5lckhUTUwoKSkgdGhpcy5zZXRVbkNoYW5nZWQoKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KK1NhdmVTdWJtaXQucHJvdG90eXBlLm9uVXBkYXRlVG9vbGJhciA9IGZ1bmN0aW9uICgpIHsKKyAgaWYgKCF0aGlzLmluaXRpYWxfaHRtbCkgdGhpcy5pbml0aWFsX2h0bWwgPSB0aGlzLmVkaXRvci5nZXRJbm5lckhUTUwoKTsKKwlpZiAoIXRoaXMuY2hhbmdlZCkgeworCQlpZiAodGhpcy5nZXRDaGFuZ2VkKCkpIHRoaXMuc2V0Q2hhbmdlZCgpOworCQlyZXR1cm4gZmFsc2U7CisJfQkKK30KK1NhdmVTdWJtaXQucHJvdG90eXBlLmdldENoYW5nZWQgPSBmdW5jdGlvbigpIHsKKwlpZiAodGhpcy5pbml0aWFsX2h0bWwgPT09IG51bGwpIHRoaXMuaW5pdGlhbF9odG1sID0gdGhpcy5lZGl0b3IuZ2V0SW5uZXJIVE1MKCk7CisJaWYgKHRoaXMuaW5pdGlhbF9odG1sICE9IHRoaXMuZWRpdG9yLmdldElubmVySFRNTCgpICYmIHRoaXMuY2hhbmdlZCA9PSBmYWxzZSkgeworCQl0aGlzLmNoYW5nZWQgPSB0cnVlOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJZWxzZSByZXR1cm4gZmFsc2U7Cit9CitTYXZlU3VibWl0LnByb3RvdHlwZS5zZXRDaGFuZ2VkID0gZnVuY3Rpb24oKSB7CisJdGhpcy5lZGl0b3IuX3Rvb2xiYXJPYmplY3RzLnNhdmVzdWJtaXQuc3dhcEltYWdlKHRoaXMuZWRpdG9yLmNvbmZpZy5pY29uTGlzdC5zYXZlc3VibWl0Y2hhbmdlZCk7CisJdGhpcy5lZGl0b3IudXBkYXRlVG9vbGJhcigpOworfQorU2F2ZVN1Ym1pdC5wcm90b3R5cGUuc2V0VW5DaGFuZ2VkID0gZnVuY3Rpb24oKSB7CisJdGhpcy5jaGFuZ2VkID0gZmFsc2U7CisJdGhpcy5lZGl0b3IuX3Rvb2xiYXJPYmplY3RzLnNhdmVzdWJtaXQuc3dhcEltYWdlKHRoaXMuZWRpdG9yLmNvbmZpZy5pY29uTGlzdC5zYXZlc3VibWl0dW5jaGFuZ2VkKTsKK30KK1NhdmVTdWJtaXQucHJvdG90eXBlLmNoYW5nZWRSZXNldCA9IGZ1bmN0aW9uKCkgeworCXRoaXMuaW5pdGlhbF9odG1sID0gbnVsbDsKKwl0aGlzLnNldFVuQ2hhbmdlZCgpOworfQorCitTYXZlU3VibWl0LnByb3RvdHlwZS5zYXZlID0gIGZ1bmN0aW9uKCkgeworCXRoaXMuYnVpbGRNZXNzYWdlKCk7CisJdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworCXZhciBzZWxmID10aGlzOworCXZhciBmb3JtID0gZWRpdG9yLl90ZXh0QXJlYS5mb3JtOworCWZvcm0ub25zdWJtaXQoKTsKKworCXZhciBuYW1lLCB2YWx1ZSwgY29udGVudCA9Jyc7CisJCisJZm9yICh2YXIgaT0wO2k8Zm9ybS5lbGVtZW50cy5sZW5ndGg7aSsrKQorCXsKKwkJaWYgKCggZm9ybS5lbGVtZW50c1tpXS50eXBlID09ICdjaGVja2JveCcgfHwgZm9ybS5lbGVtZW50c1tpXS50eXBlID09ICdyYWRpbycgKSAmJiAhZm9ybS5lbGVtZW50c1tpXS5jaGVja2VkICkgY29udGludWU7CisKKwkJY29udGVudCArPSAoKGk+MCkgPyAnJicgOiAnJykgKyBmb3JtLmVsZW1lbnRzW2ldLm5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS52YWx1ZSk7CisJfQorCXZhciB1cmwgPSBlZGl0b3IuX3RleHRBcmVhLmZvcm0uYWN0aW9uIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmOworCVhpbmhhLl9wb3N0YmFjayh1cmwsIGNvbnRlbnQsIGZ1bmN0aW9uKGdldGJhY2spIHsKKworCQlpZiAoZ2V0YmFjaykgeworCQkJc2VsZi5zZXRNZXNzYWdlKGdldGJhY2spOworCQkJLy9zZWxmLnNldE1lc3NhZ2Uoc2VsZi5fbGMoIlJlYWR5IikpOworCQkJc2VsZi5jaGFuZ2VkUmVzZXQoKTsKKwkJfQorCQlyZW1vdmVNZXNzYWdlID0gZnVuY3Rpb24oKSB7IHNlbGYucmVtb3ZlTWVzc2FnZSgpfSA7CisJCXdpbmRvdy5zZXRUaW1lb3V0KCJyZW1vdmVNZXNzYWdlKCkiLDEwMDApOworCX0pOworfQorCitTYXZlU3VibWl0LnByb3RvdHlwZS5zZXRNZXNzYWdlID0gZnVuY3Rpb24oc3RyaW5nKSB7CisgIHZhciB0ZXh0YXJlYSA9IHRoaXMudGV4dGFyZWE7CisgIGlmICggIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtZXNzYWdlX3N1Yl8iICsgdGV4dGFyZWEuaWQpKSB7IHJldHVybiA7IH0KKyAgdmFyIGVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtZXNzYWdlX3N1Yl8iICsgdGV4dGFyZWEuaWQpOworICBlbHQuaW5uZXJIVE1MID0gWGluaGEuX2xjKHN0cmluZywgJ1NhdmVTdWJtaXQnKTsKK30KKworU2F2ZVN1Ym1pdC5wcm90b3R5cGUucmVtb3ZlTWVzc2FnZSA9IGZ1bmN0aW9uKCkgeworICB2YXIgdGV4dGFyZWEgPSB0aGlzLnRleHRhcmVhOworICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtZXNzYWdlXyIgKyB0ZXh0YXJlYS5pZCkpIHsgcmV0dXJuIDsgfQorICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtZXNzYWdlXyIgKyB0ZXh0YXJlYS5pZCkpOworfQorCisvL3JpcHBlZCBtb2toZXQncyBsb2FkaW5nIG1lc3NhZ2UgZnVuY3Rpb24KK1NhdmVTdWJtaXQucHJvdG90eXBlLmJ1aWxkTWVzc2FnZSAgID0gZnVuY3Rpb24oKSB7CisKKwl2YXIgdGV4dGFyZWEgPSB0aGlzLnRleHRhcmVhOworCXZhciBodG1sYXJlYSA9IHRoaXMuZWRpdG9yLl9odG1sQXJlYTsKKwl2YXIgbG9hZGluZ19tZXNzYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisJbG9hZGluZ19tZXNzYWdlLmlkID0gIm1lc3NhZ2VfIiArIHRleHRhcmVhLmlkOworCWxvYWRpbmdfbWVzc2FnZS5jbGFzc05hbWUgPSAibG9hZGluZyI7CisJbG9hZGluZ19tZXNzYWdlLnN0eWxlLndpZHRoICAgID0gaHRtbGFyZWEub2Zmc2V0V2lkdGggKydweCcgOy8vKHRoaXMuZWRpdG9yLl9pZnJhbWUub2Zmc2V0V2lkdGggIT0gMCkgPyB0aGlzLmVkaXRvci5faWZyYW1lLm9mZnNldFdpZHRoICsncHgnIDogdGhpcy5lZGl0b3IuX2luaXRpYWxfdGFfc2l6ZS53OworCisJbG9hZGluZ19tZXNzYWdlLnN0eWxlLmxlZnQgICAgID0gWGluaGEuZmluZFBvc1goaHRtbGFyZWEpICsgICdweCc7CisJbG9hZGluZ19tZXNzYWdlLnN0eWxlLnRvcCAgICAgID0gKFhpbmhhLmZpbmRQb3NZKGh0bWxhcmVhKSArIHBhcnNlSW50KGh0bWxhcmVhLm9mZnNldEhlaWdodCkgLyAyKSAtIDUwICsgICdweCc7CisKKwl2YXIgbG9hZGluZ19tYWluID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisJbG9hZGluZ19tYWluLmNsYXNzTmFtZSA9ICJsb2FkaW5nX21haW4iOworCWxvYWRpbmdfbWFpbi5pZCA9ICJsb2FkaW5nX21haW5fIiArIHRleHRhcmVhLmlkOworCWxvYWRpbmdfbWFpbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLl9sYygiU2F2aW5nLi4uIikpKTsKKworCXZhciBsb2FkaW5nX3N1YiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworCWxvYWRpbmdfc3ViLmNsYXNzTmFtZSA9ICJsb2FkaW5nX3N1YiI7CisJbG9hZGluZ19zdWIuaWQgPSAibWVzc2FnZV9zdWJfIiArIHRleHRhcmVhLmlkOworCWxvYWRpbmdfc3ViLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuX2xjKCJpbiBwcm9ncmVzcyIpKSk7CisJbG9hZGluZ19tZXNzYWdlLmFwcGVuZENoaWxkKGxvYWRpbmdfbWFpbik7CisJbG9hZGluZ19tZXNzYWdlLmFwcGVuZENoaWxkKGxvYWRpbmdfc3ViKTsKKwlkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxvYWRpbmdfbWVzc2FnZSk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TYXZlU3VibWl0L2ltZy9lZF9zYXZlX2dyZWVuLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2F2ZVN1Ym1pdC9pbWcvZWRfc2F2ZV9ncmVlbi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgwNGE3NAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2F2ZVN1Ym1pdC9pbWcvZWRfc2F2ZV9ncmVlbi5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TYXZlU3VibWl0L2ltZy9lZF9zYXZlX3JlZC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NhdmVTdWJtaXQvaW1nL2VkX3NhdmVfcmVkLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDI4OWI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TYXZlU3VibWl0L2ltZy9lZF9zYXZlX3JlZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TYXZlU3VibWl0L2xhbmcvZGEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NhdmVTdWJtaXQvbGFuZy9kYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDU2ZTM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TYXZlU3VibWl0L2xhbmcvZGEuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJTYXZlIjogIkdlbSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TYXZlU3VibWl0L2xhbmcvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NhdmVTdWJtaXQvbGFuZy9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzhhODJkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TYXZlU3VibWl0L2xhbmcvZGUuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJSZWFkeSI6ICJGZXJ0aWciLAorICAgICJTYXZlIjogIlNwZWljaGVybiIsCisgICAgIlNhdmluZy4uLiI6ICJTcGVpY2hlcm4uLi4iLAorICAgICJpbiBwcm9ncmVzcyI6ICJpbiBBcmJlaXQiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2F2ZVN1Ym1pdC9sYW5nL2VzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TYXZlU3VibWl0L2xhbmcvZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYyMTFmOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2F2ZVN1Ym1pdC9sYW5nL2VzLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXMiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiU2F2ZSI6ICJHdWFyZGFyIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NhdmVTdWJtaXQvbGFuZy9mci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2F2ZVN1Ym1pdC9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YjMxOTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NhdmVTdWJtaXQvbGFuZy9mci5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIlJlYWR5IjogIlByw6p0IiwKKyAgICAiU2F2ZSI6ICJFbnJlZ2lzdHJlciIsCisgICAgIlNhdmluZy4uLiI6ICJFbnJlZ2lzdHJlbWVudC4uLiIsCisgICAgImluIHByb2dyZXNzIjogImVuIGNvdXJzIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NhdmVTdWJtaXQvbGFuZy9qYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2F2ZVN1Ym1pdC9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMTY5ODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NhdmVTdWJtaXQvbGFuZy9qYS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIlJlYWR5IjogIuODrOODh+OCoyIsCisgICAgIlNhdmUiOiAi5L+d5a2YIiwKKyAgICAiU2F2aW5nLi4uIjogIuS/neWtmOS4rS4uLiIsCisgICAgImluIHByb2dyZXNzIjogIuWHpueQhuS4rSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TYXZlU3VibWl0L2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2F2ZVN1Ym1pdC9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZiNzk2MQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2F2ZVN1Ym1pdC9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSwyOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICJSZWFkeSI6ICIiLAorICAgICJTYXZlIjogIiIsCisgICAgIlNhdmluZy4uLiI6ICIiLAorICAgICJpbiBwcm9ncmVzcyI6ICIiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TYXZlU3VibWl0L2xhbmcvbmIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NhdmVTdWJtaXQvbGFuZy9uYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGZhNjFlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TYXZlU3VibWl0L2xhbmcvbmIuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJuYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJTYXZlIjogIkxhZ3JlIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NhdmVTdWJtaXQvbGFuZy9ubC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2F2ZVN1Ym1pdC9sYW5nL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YWZhMTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NhdmVTdWJtaXQvbGFuZy9ubC5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIlJlYWR5IjogIktsYWFyIiwKKyAgICAiU2F2ZSI6ICJPcHNsYWFuIiwKKyAgICAiU2F2aW5nLi4uIjogIkJlemlnIG1ldCBvcHNsYWFuLi4uIiwKKyAgICAiaW4gcHJvZ3Jlc3MiOiAiYmV6aWcgbWV0IG9wc2xhYW4uLi4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2F2ZVN1Ym1pdC9sYW5nL3BsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TYXZlU3VibWl0L2xhbmcvcGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFlNjg4MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2F2ZVN1Ym1pdC9sYW5nL3BsLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicGwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiU2F2ZSI6ICJaYXBpc3oiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2F2ZVN1Ym1pdC9sYW5nL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TYXZlU3VibWl0L2xhbmcvcHRfYnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM0NzAwNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2F2ZVN1Ym1pdC9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiUmVhZHkiOiAiUHJvbnRvIiwKKyAgICAiU2F2ZSI6ICJTYWx2YXIiLAorICAgICJTYXZpbmcuLi4iOiAiR3JhdmFuZG8uLi4iLAorICAgICJpbiBwcm9ncmVzcyI6ICJlbSBwcm9jZXNzbyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TYXZlU3VibWl0L2xhbmcvcnUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NhdmVTdWJtaXQvbGFuZy9ydS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjI0OTAzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TYXZlU3VibWl0L2xhbmcvcnUuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJSZWFkeSI6ICLQk9C+0YLQvtCy0L4iLAorICAgICJTYXZlIjogItCh0L7RhdGA0LDQvdC40YLRjCIsCisgICAgIlNhdmluZy4uLiI6ICLQodC+0YXRgNCw0L3QtdC90LjQtS4uLiIsCisgICAgImluIHByb2dyZXNzIjogItC/0L7QttCw0LvRg9C50YHRgtCwLCDQttC00LjRgtC1IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL1NldElkLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9TZXRJZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDdhMzNmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9TZXRJZC5qcwpAQCAtMCwwICsxLDg4IEBACitmdW5jdGlvbiBTZXRJZChlZGl0b3IpIHsNCisgIHRoaXMuZWRpdG9yID0gZWRpdG9yOw0KKyAgdmFyIGNmZyA9IGVkaXRvci5jb25maWc7DQorICB2YXIgc2VsZiA9IHRoaXM7DQorDQorICAvLyByZWdpc3RlciB0aGUgdG9vbGJhciBidXR0b25zIHByb3ZpZGVkIGJ5IHRoaXMgcGx1Z2luDQorICBjZmcucmVnaXN0ZXJCdXR0b24oew0KKyAgICBpZCAgICAgICA6ICJzZXRpZCIsDQorICAgIHRvb2x0aXAgIDogdGhpcy5fbGMoIlNldCBJZCBhbmQgTmFtZSIpLA0KKyAgICBpbWFnZSAgICA6IGVkaXRvci5pbWdVUkwoInNldC1pZC5naWYiLCAiU2V0SWQiKSwNCisgICAgdGV4dE1vZGUgOiBmYWxzZSwNCisgICAgYWN0aW9uICAgOiBmdW5jdGlvbihlZGl0b3IpIHsNCisgICAgICAgICAgICAgICAgIHNlbGYuYnV0dG9uUHJlc3MoZWRpdG9yKTsNCisgICAgICAgICAgICAgICB9DQorICB9KTsNCisgIGNmZy5hZGRUb29sYmFyRWxlbWVudCgic2V0aWQiLCAiY3JlYXRlbGluayIsIDEpOw0KK30NCisNCitTZXRJZC5fcGx1Z2luSW5mbyA9IHsNCisgIG5hbWUgICAgICAgICAgOiAiU2V0SWQiLA0KKyAgdmVyc2lvbiAgICAgICA6ICIyLjAiLA0KKyAgZGV2ZWxvcGVyICAgICA6ICJVZG8gU2NobWFsIiwNCisgIGRldmVsb3Blcl91cmwgOiAiaHR0cDovL3d3dy5zY2hhZmZyYXRoLW5ldWVtZWRpZW4uZGUiLA0KKyAgY19vd25lciAgICAgICA6ICJVZG8gU2NobWFsIiwNCisgIHNwb25zb3IgICAgICAgOiAiTC5OLlNjaGFmZnJhdGggTmV1ZU1lZGllbiIsDQorICBzcG9uc29yX3VybCAgIDogImh0dHA6Ly93d3cuc2NoYWZmcmF0aC1uZXVlbWVkaWVuLmRlIiwNCisgIGxpY2Vuc2UgICAgICAgOiAiaHRtbEFyZWEiDQorfTsNCisNCitTZXRJZC5wcm90b3R5cGUuX2xjID0gZnVuY3Rpb24oc3RyaW5nKSB7DQorICByZXR1cm4gWGluaGEuX2xjKHN0cmluZywgJ1NldElkJyk7DQorfTsNCisNCisNCitTZXRJZC5wcm90b3R5cGUub25HZW5lcmF0ZSA9IGZ1bmN0aW9uKCkgew0KKyAgdGhpcy5lZGl0b3IuYWRkRWRpdG9yU3R5bGVzaGVldChYaW5oYS5nZXRQbHVnaW5EaXIoIlNldElkIikgKyAnL3NldC1pZC5jc3MnKTsNCit9Ow0KKw0KK1NldElkLnByb3RvdHlwZS5idXR0b25QcmVzcyA9IGZ1bmN0aW9uKGVkaXRvcikgew0KKyAgdmFyIG91dHBhcmFtID0gbnVsbDsNCisgIHZhciBodG1sID0gZWRpdG9yLmdldFNlbGVjdGVkSFRNTCgpOw0KKyAgdmFyIHNlbCAgPSBlZGl0b3IuX2dldFNlbGVjdGlvbigpOw0KKyAgdmFyIHJhbmdlICA9IGVkaXRvci5fY3JlYXRlUmFuZ2Uoc2VsKTsNCisgIHZhciBub2RlID0gZWRpdG9yLl9hY3RpdmVFbGVtZW50KHNlbCk7DQorICBpZiAobm9kZSkNCisgICAgb3V0cGFyYW0gPSB7IG5hbWUgOiBub2RlLmlkIH07DQorICBlbHNlDQorICAgIG91dHBhcmFtID0geyBuYW1lIDogJycgfTsNCisNCisgIGVkaXRvci5fcG9wdXBEaWFsb2coICJwbHVnaW46Ly9TZXRJZC9zZXRfaWQiLCBmdW5jdGlvbiggcGFyYW0gKSB7DQorICAgIGlmICggcGFyYW0gKSB7DQorICAgICAgdmFyIG5hbWUgPSBwYXJhbVsibmFtZSJdOw0KKyAgICAgIGlmIChuYW1lID09ICIiIHx8IG5hbWUgPT0gbnVsbCkgew0KKyAgICAgICAgaWYgKG5vZGUpIHsNCisgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoIm5hbWUiKTsNCisgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoImlkIik7DQorICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCJ0aXRsZSIpOw0KKyAgICAgICAgICBpZiAobm9kZS5jbGFzc05hbWUgPT0gImhhc2lkIikgew0KKyAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpOw0KKyAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICByZXR1cm47DQorICAgICAgfQ0KKyAgICAgIHRyeSB7DQorICAgICAgICB2YXIgZG9jID0gZWRpdG9yLl9kb2M7DQorICAgICAgICBpZiAoIW5vZGUpIHsNCisgICAgICAgICAgbm9kZSA9IGRvYy5jcmVhdGVFbGVtZW50KCJzcGFuIik7DQorICAgICAgICAgIG5vZGUuaWQgPSBuYW1lOw0KKyAgICAgICAgICBub2RlLm5hbWUgPSBuYW1lOw0KKyAgICAgICAgICBub2RlLnRpdGxlID0gbmFtZTsNCisgICAgICAgICAgbm9kZS5jbGFzc05hbWUgPSAiaGFzaWQiOw0KKyAgICAgICAgICBub2RlLmlubmVySFRNTCA9IGh0bWw7DQorICAgICAgICAgIGlmIChYaW5oYS5pc19pZSkgew0KKyAgICAgICAgICAgIHJhbmdlLnBhc3RlSFRNTChub2RlLm91dGVySFRNTCk7DQorICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgZWRpdG9yLmluc2VydE5vZGVBdFNlbGVjdGlvbihub2RlKTsNCisgICAgICAgICAgfQ0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgbm9kZS5pZCA9IG5hbWU7DQorICAgICAgICAgIG5vZGUubmFtZSA9IG5hbWU7DQorICAgICAgICAgIG5vZGUudGl0bGUgPSBuYW1lOw0KKyAgICAgICAgICBub2RlLmNsYXNzTmFtZSA9ICJoYXNpZCI7DQorICAgICAgICB9DQorICAgICAgfQ0KKyAgICAgIGNhdGNoIChlKSB7IH0NCisgICAgfQ0KKyAgfSwgb3V0cGFyYW0pOw0KK307DQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9pbWcvcGxhY2Vob2xkZXIuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9pbWcvcGxhY2Vob2xkZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMzQyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2ltZy9wbGFjZWhvbGRlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9pbWcvc2V0LWlkLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvaW1nL3NldC1pZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY2ZWU5MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvaW1nL3NldC1pZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL2NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL2NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNzhlNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvY2guanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi5Y+W5raIIiwKKyAgICAiT0siOiAi5aW9IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvY3ouanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvY3ouanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZiOTkyOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9jei5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImN6IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJacnXFoWl0IiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9kYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9kYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGZjMGQwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL2RhLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGVyIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmVmNjAwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsMTkgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgIkRlbGV0ZSI6ICJMw7ZzY2hlbiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiU2V0IElkIGFuZCBOYW1lIjogIk9iamVrdCBJRCB1bmQgTmFtZSBlaW5mw7xnZW4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJOYW1lL0lkIjogIk5hbWUgKElEKSIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9lZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9lZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTkxNmU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL2VlLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9lbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9lbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmUwMDZjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL2VsLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAiT0siOiAizpXOvc+EzqzOvs61zrkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWZkOGNiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL2VzLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXMiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiRGVsZXRlIjogIlN1cHJpbWlyIiwKKyAgICAiT0siOiAiQWNlcHRhciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL2V1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL2V1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYzlkYmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvZXUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJldSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiVXR6aSIsCisgICAgIk9LIjogIkFkb3MiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9mYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9mYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGU3ZjdlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL2ZhLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIsCisgICAgIk9LIjogItio2YTZhyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL2ZpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL2ZpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNTUyYjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvZmkuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUGVydXV0YSIsCisgICAgIk9LIjogIkh5dsOka3N5IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvZnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxNTUyNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9mci5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGVyIiwKKyAgICAiRGVsZXRlIjogIlN1cHByaW1lciIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvaGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvaGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYwMmY3YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9oZS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImhlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKKyAgICAiT0siOiAi15DXmdep15XXqCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL2h1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL2h1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzODUyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvaHUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJodSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIsCisgICAgIk9LIjogIlJlbmRiZW4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9pdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9pdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGFjYjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL2l0LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaXQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGFtZW50byIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE1ODZiMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9qYS5qcwpAQCAtMCwwICsxLDIxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICJEZWxldGUiOiAi5YmK6ZmkIiwKKyAgICAiSUQvTmFtZToiOiAiSUQv5ZCN5YmNOiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiU2V0IElEL05hbWUiOiAiSUTjgajlkI3liY3jga7oqK3lrpoiLAorICAgICJTZXQgSWQgYW5kIE5hbWUiOiAiSUTjgajlkI3liY3jga7oqK3lrpoiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJOYW1lL0lkIjogIuWQjeWJjS9JRCIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk0ZjJiNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9sY19iYXNlLmpzCkBAIC0wLDAgKzEsMzEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLworLy8gTEFORzogImVuIiwgRU5DT0RJTkc6IFVURi04CisvLyBBdXRob3I6IFRyYW5zbGF0b3ItTmFtZSwgPGVtYWlsQGV4YW1wbGUuY29tPgorLy8KKy8vIExhc3QgcmV2aXNpb246IDIwMTgtMDQtMTIKKy8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KKy8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyAoUGxlYXNlLCByZW1vdmUgaW5mb3JtYXRpb24gYmVsb3cpCisvLyBGT1IgVFJBTlNMQVRPUlM6CisvLworLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCisvLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCisvLworLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7CisvLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50CisvLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCisKK3sKKyAgICAiQ2FuY2VsIjogIiIsCisgICAgIkRlbGV0ZSI6ICIiLAorICAgICJJRC9OYW1lOiI6ICIiLAorICAgICJPSyI6ICIiLAorICAgICJTZXQgSUQvTmFtZSI6ICIiLAorICAgICJTZXQgSWQgYW5kIE5hbWUiOiAiIiwKKyAgICAiU2V0IElkL05hbWUiOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9sdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9sdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTE4OTA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL2x0LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvbHYuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvbHYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzZDVkMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9sdi5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdGNlbHQiLAorICAgICJPSyI6ICJMYWJpIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvbmIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBhMTBkOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDE5IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICJEZWxldGUiOiAiU2xldHQiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlNldCBJZCBhbmQgTmFtZSI6ICJTZXR0IElEIG9nIG5hdm4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJOYW1lL0lkIjogIk5hdm4gKElEKSIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9ubC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2Y5MjA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL25sLmpzCkBAIC0wLDAgKzEsMjEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsZXJlbiIsCisgICAgIkRlbGV0ZSI6ICJWZXJ3aWpkZXJlbiIsCisgICAgIklEL05hbWU6IjogIklEL05hYW06IiwKKyAgICAiT0siOiAiT0siLAorICAgICJTZXQgSUQvTmFtZSI6ICJJRC9OYWFtIGluc3RlbGxlbiIsCisgICAgIlNldCBJZCBhbmQgTmFtZSI6ICJJRCBlbiBOYWFtIGluc3RlbGxlbiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIk5hbWUvSWQiOiAiTmFhbS9JRCIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9wbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjQzZGUyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL3BsLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicGwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFudWx1aiIsCisgICAgIkRlbGV0ZSI6ICJVc3XFhCIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvcHRfYnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3YjkzMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9wdF9ici5qcwpAQCAtMCwwICsxLDIyIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCisgICAgIkRlbGV0ZSI6ICJBcGFnYXIiLAorICAgICJJRC9OYW1lOiI6ICJJRC9Ob21lOiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiU2V0IElEL05hbWUiOiAiRGVmaW5pciBJRC9Ob21lIiwKKyAgICAiU2V0IElkIGFuZCBOYW1lIjogIkRlZmluaXIgSWQgZSBOb21lIiwKKyAgICAiU2V0IElkL05hbWUiOiAiRGVmaW5pciBJZC9Ob21lIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiTmFtZS9JZCI6ICJOb21lL0lkIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL3JvLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL3JvLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNmUxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvcm8uanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJybyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKKyAgICAiT0siOiAiQWNjZXB0xIMiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9ydS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9ydS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWQ1OWYyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL3J1LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicnUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvc2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvc2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJlNzZmNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9zaC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvc2kuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvc2kuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY3NDg5MgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9zaS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiLAorICAgICJPSyI6ICJWIHJlZHUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9zci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9zci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2VlNmY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL3NyLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9zdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy9zdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODMzNmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL3N2LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3YiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvdGguanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvdGguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRhOWM4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy90aC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLguKLguIHguYDguKXguLTguIEiLAorICAgICJPSyI6ICLguJXguIHguKXguIciCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy90ci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvbGFuZy90ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDJjOGI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgIkRlbGV0ZSI6ICJTaWwiLAorICAgICJPSyI6ICJUYW1hbSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL3ZuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9sYW5nL3ZuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODJlMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL2xhbmcvdm4uanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ2biIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiSOG7p3kiLAorICAgICJPSyI6ICLEkOG7k25nIMO9IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL3BvcHVwcy9zZXRfaWQuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvcG9wdXBzL3NldF9pZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZTU5ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NldElkL3BvcHVwcy9zZXRfaWQuaHRtbApAQCAtMCwwICsxLDU4IEBACis8aHRtbD4KKzxoZWFkPgorICA8dGl0bGU+U2V0IElkL05hbWU8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi8uLi8uLi9wb3B1cHMvcG9wdXAuY3NzIiAvPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi9wb3B1cHMvcG9wdXAuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cit3aW5kb3cucmVzaXplVG8oMzUwLCAxMDApOworZnVuY3Rpb24gSW5pdCgpIHsKKyAgX19kbGdfdHJhbnNsYXRlKCJTZXRJZCIpOworICBfX2RsZ19pbml0KCk7CisgIHZhciBwYXJhbSA9IHdpbmRvdy5kaWFsb2dBcmd1bWVudHM7CisgIGlmIChwYXJhbSkgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYW1lIikudmFsdWUgPSBwYXJhbVsibmFtZSJdOworICB9CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYW1lIikuZm9jdXMoKTsKK30KKworZnVuY3Rpb24gb25PSygpIHsKKyAgLy8gcGFzcyBkYXRhIGJhY2sgdG8gdGhlIGNhbGxpbmcgd2luZG93CisgIHZhciBwYXJhbSA9IG5ldyBPYmplY3QoKTsKKyAgcGFyYW1bIm5hbWUiXSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYW1lIikudmFsdWU7CisgIF9fZGxnX2Nsb3NlKHBhcmFtKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBvbkRlbGV0ZSgpIHsKKyAgLy8gcGFzcyBkYXRhIGJhY2sgdG8gdGhlIGNhbGxpbmcgd2luZG93CisgIHZhciBwYXJhbSA9IG5ldyBPYmplY3QoKTsKKyAgcGFyYW1bIm5hbWUiXSA9ICIiOworICBfX2RsZ19jbG9zZShwYXJhbSk7CisgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gb25DYW5jZWwoKSB7CisgIF9fZGxnX2Nsb3NlKG51bGwpOworICByZXR1cm4gZmFsc2U7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgY2xhc3M9ImRpYWxvZyIgb25sb2FkPSJJbml0KCkiPgorPGRpdiBjbGFzcz0idGl0bGUiPlNldCBJRC9OYW1lPC9kaXY+Cis8Zm9ybT4KKzx0YWJsZSBib3JkZXI9IjAiIHN0eWxlPSJ3aWR0aDogMzAwcHg7Ij4KKyAgPHRyPgorICAgIDx0ZCBjbGFzcz0ibGFiZWwiPklEL05hbWU6PC90ZD4KKyAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIGlkPSJuYW1lIiBzdHlsZT0id2lkdGg6IDIwMHB4IiAvPjwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorCis8ZGl2IGlkPSJidXR0b25zIj4KKyAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9Im9rIiBvbmNsaWNrPSJyZXR1cm4gb25PSygpOyI+T0s8L2J1dHRvbj4KKyAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG5hbWU9ImRlbGV0ZSIgb25jbGljaz0icmV0dXJuIG9uRGVsZXRlKCk7Ij5EZWxldGU8L2J1dHRvbj4KKyAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG5hbWU9ImNhbmNlbCIgb25jbGljaz0icmV0dXJuIG9uQ2FuY2VsKCk7Ij5DYW5jZWw8L2J1dHRvbj4KKzwvZGl2PgorPC9mb3JtPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvc2V0LWlkLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU2V0SWQvc2V0LWlkLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWFiYWEwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TZXRJZC9zZXQtaWQuY3NzCkBAIC0wLDAgKzEsNyBAQAorLmhhc2lkIHsNCisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChpbWcvc2V0LWlkLmdpZik7DQorICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7DQorICBwYWRkaW5nLWxlZnQ6IDE5cHg7DQorICBib3JkZXI6IDFweCBkb3R0ZWQgYmx1ZTsNCit9DQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvU21hcnRSZXBsYWNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvU21hcnRSZXBsYWNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOTkwODQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9TbWFydFJlcGxhY2UuanMKQEAgLTAsMCArMSwzNjkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwNCisgU21hcnRSZXBsYWNlIGZvciBYaW5oYQ0KKyBfX19fX19fX19fX19fX19fX19fX19fXw0KKwkgDQorXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK2Z1bmN0aW9uIFNtYXJ0UmVwbGFjZShlZGl0b3IpIHsNCisJdGhpcy5lZGl0b3IgPSBlZGl0b3I7DQorCXRoaXMuX3dhc1Nob3dpbmcgPSBmYWxzZTsgLy8gU2V0IHRydWUgd2hlbiBzd2l0Y2hpbmcgdG8gdGV4dG1vZGUgaWYgdGhlIGRpYWxvZyBpcyB2aXNpYmxlLCBzbyBpdCBjYW4gYmUgcmVzdG9yZWQNCisJdmFyIGNmZyA9IGVkaXRvci5jb25maWc7DQorCXZhciBzZWxmID0gdGhpczsNCisJDQorCWNmZy5yZWdpc3RlckJ1dHRvbg0KKwkoew0KKwkJaWQgICAgICAgOiAic21hcnRyZXBsYWNlIiwNCisJCXRvb2x0aXAgIDogdGhpcy5fbGMoIlNtYXJ0UmVwbGFjZSIpLA0KKwkJaW1hZ2UgICAgOiBbX2VkaXRvcl91cmwgKydpY29uc2V0cy9UYW5nby9lZF9idXR0b25zX21haW4ucG5nJywzLDhdLA0KKwkJdGV4dE1vZGUgOiBmYWxzZSwNCisJCWFjdGlvbiAgIDogZnVuY3Rpb24oZSwgb2JqbmFtZSwgb2JqKSB7IHNlbGYuYnV0dG9uUHJlc3MobnVsbCwgb2JqKTsgfQ0KKwl9KTsNCisJY2ZnLmFkZFRvb2xiYXJFbGVtZW50KCJzbWFydHJlcGxhY2UiLCAiaHRtbG1vZGUiLCAxKTsNCit9DQorDQorU21hcnRSZXBsYWNlLl9wbHVnaW5JbmZvID0gew0KKyAgbmFtZSAgICAgICAgICA6ICJTbWFydFJlcGxhY2UiLA0KKyAgdmVyc2lvbiAgICAgICA6ICIxLjAiLA0KKyAgZGV2ZWxvcGVyICAgICA6ICJSYWltdW5kIE1leWVyIiwNCisgIGRldmVsb3Blcl91cmwgOiAiaHR0cDovL3gtd2Vic2VydmljZS5uZXQiLA0KKyAgY19vd25lciAgICAgICA6ICJSYWltdW5kIE1leWVyIiwNCisgIHNwb25zb3IgICAgICAgOiAiIiwNCisgIHNwb25zb3JfdXJsICAgOiAiIiwNCisgIGxpY2Vuc2UgICAgICAgOiAiaHRtbEFyZWEiDQorfTsNCisNCitTbWFydFJlcGxhY2UucHJvdG90eXBlLl9sYyA9IGZ1bmN0aW9uKHN0cmluZykgew0KKwlyZXR1cm4gWGluaGEuX2xjKHN0cmluZywgJ1NtYXJ0UmVwbGFjZScpOw0KK307DQorDQorWGluaGEuQ29uZmlnLnByb3RvdHlwZS5TbWFydFJlcGxhY2UgPQ0KK3sNCisJJ2RlZmF1bHRBY3RpdmUnIDogdHJ1ZSwNCisJJ3F1b3RlcycgOiBudWxsLy9bU3RyaW5nLmZyb21DaGFyQ29kZSgxODcpLFN0cmluZy5mcm9tQ2hhckNvZGUoMTcxKSxTdHJpbmcuZnJvbUNoYXJDb2RlKDgyNTApLFN0cmluZy5mcm9tQ2hhckNvZGUoODI0OSldDQorfQ0KK1NtYXJ0UmVwbGFjZS5wcm90b3R5cGUudG9nZ2xlQWN0aXZpdHkgPSBmdW5jdGlvbihuZXdTdGF0ZSkgDQorew0KKwlpZiAodHlwZW9mIG5ld1N0YXRlICE9ICd1bmRlZmluZWQnKQ0KKwl7DQorCQl0aGlzLmFjdGl2ZSA9IG5ld1N0YXRlOw0KKwl9DQorCWVsc2UNCisJew0KKwkJdGhpcy5hY3RpdmUgPSB0aGlzLmFjdGl2ZSA/IGZhbHNlIDogdHJ1ZTsJCQ0KKwl9DQorCXRoaXMuZWRpdG9yLl90b29sYmFyT2JqZWN0cy5zbWFydHJlcGxhY2Uuc3RhdGUoImFjdGl2ZSIsIHRoaXMuYWN0aXZlKTsNCit9DQorDQorU21hcnRSZXBsYWNlLnByb3RvdHlwZS5vblVwZGF0ZVRvb2xiYXIgPSBmdW5jdGlvbigpIHsNCisJdGhpcy5lZGl0b3IuX3Rvb2xiYXJPYmplY3RzLnNtYXJ0cmVwbGFjZS5zdGF0ZSgiYWN0aXZlIiwgdGhpcy5hY3RpdmUpOw0KK30NCisNCitTbWFydFJlcGxhY2UucHJvdG90eXBlLm9uR2VuZXJhdGUgPSBmdW5jdGlvbigpIHsNCisJdGhpcy5hY3RpdmUgPSB0aGlzLmVkaXRvci5jb25maWcuU21hcnRSZXBsYWNlLmRlZmF1bHRBY3RpdmU7DQorCXRoaXMuZWRpdG9yLl90b29sYmFyT2JqZWN0cy5zbWFydHJlcGxhY2Uuc3RhdGUoImFjdGl2ZSIsIHRoaXMuYWN0aXZlKTsNCisJDQorCXZhciBzZWxmID0gdGhpczsNCisJWGluaGEuX2FkZEV2ZW50KA0KKwkJc2VsZi5lZGl0b3IuX2RvYywNCisJCSAia2V5cHJlc3MiLA0KKwkJZnVuY3Rpb24gKGV2ZW50KQ0KKwkJew0KKwkJICByZXR1cm4gc2VsZi5rZXlFdmVudChYaW5oYS5pc19pZSA/IHNlbGYuZWRpdG9yLl9pZnJhbWUuY29udGVudFdpbmRvdy5ldmVudCA6IGV2ZW50KTsNCisJCX0pOw0KKwkNCisJdmFyIHF1b3RlcyA9IHRoaXMuZWRpdG9yLmNvbmZpZy5TbWFydFJlcGxhY2UucXVvdGVzOw0KKyAgIA0KKwlpZiAocXVvdGVzICYmIHR5cGVvZiBxdW90ZXMgPT0gJ29iamVjdCcpDQorCXsNCisJCXRoaXMub3BlbmluZ1F1b3RlcyA9IHF1b3Rlc1swXTsNCisJCXRoaXMuY2xvc2luZ1F1b3RlcyA9IHF1b3Rlc1sxXTsNCisJCXRoaXMub3BlbmluZ1F1b3RlICA9IHF1b3Rlc1syXTsNCisJCXRoaXMuY2xvc2luZ1F1b3RlICA9IHF1b3Rlc1szXTsNCisJfQ0KKwllbHNlDQorCXsNCisJCXRoaXMub3BlbmluZ1F1b3RlcyA9IHRoaXMuX2xjKCJPcGVuaW5nRG91YmxlUXVvdGVzIik7DQorCQl0aGlzLmNsb3NpbmdRdW90ZSAgPSB0aGlzLl9sYygiQ2xvc2luZ1NpbmdsZVF1b3RlIik7DQorCQl0aGlzLmNsb3NpbmdRdW90ZXMgPSB0aGlzLl9sYygiQ2xvc2luZ0RvdWJsZVF1b3RlcyIpOw0KKwkJdGhpcy5vcGVuaW5nUXVvdGUgID0gdGhpcy5fbGMoIk9wZW5pbmdTaW5nbGVRdW90ZSIpOw0KKwl9DQorCQ0KKwlpZiAodGhpcy5vcGVuaW5nUXVvdGVzID09ICdPcGVuaW5nRG91YmxlUXVvdGVzJykgLy9JZiBub3RoaW5nIGVsc2UgaXMgZGVmaW5lZCwgRW5nbGlzaCBzdHlsZSBhcyBkZWZhdWx0DQorCXsNCisJCXRoaXMub3BlbmluZ1F1b3RlcyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoODIyMCk7DQorCQl0aGlzLmNsb3NpbmdRdW90ZXMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDgyMjEpOw0KKwkJdGhpcy5vcGVuaW5nUXVvdGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDgyMTYpOw0KKwkJdGhpcy5jbG9zaW5nUXVvdGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDgyMTcpOw0KKwl9DQorfTsNCisNCitTbWFydFJlcGxhY2UucHJvdG90eXBlLmtleUV2ZW50ID0gZnVuY3Rpb24oZXYpDQorew0KKwlpZiAoICF0aGlzLmFjdGl2ZSkgcmV0dXJuIHRydWU7DQorCXZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsNCisJdmFyIGNoYXJDb2RlID0gIFhpbmhhLmlzX2llID8gZXYua2V5Q29kZSA6IGV2LndoaWNoOw0KKw0KKwl2YXIga2V5ID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSk7DQorDQorCWlmICgga2V5ID09ICciJyB8fCBrZXkgPT0gIiciKQ0KKwl7DQorCQlYaW5oYS5fc3RvcEV2ZW50KGV2KTsNCisJCXJldHVybiB0aGlzLnNtYXJ0UXVvdGVzKGtleSk7DQorCX0NCisJaWYgKGNoYXJDb2RlID09IDMyKSAvL3NwYWNlIGJhcg0KKwl7DQorCQlyZXR1cm4gdGhpcy5zbWFydFJlcGxhY2UoZXYsIDIsIC9eXHMtLywgJyAnK1N0cmluZy5mcm9tQ2hhckNvZGUoODIxMSksIGZhbHNlKTsgLy8gc3BhY2Utc3BhY2UgLT4gZGFzaCANCisJfQ0KKwlpZiAoIGtleSA9PSAnLicgKSAvLyAuLi4gLT4gZWxsaXBzaXMNCisJew0KKwkJcmV0dXJuIHRoaXMuc21hcnRSZXBsYWNlKGV2LCAyLCAvXC5cLi8sIFN0cmluZy5mcm9tQ2hhckNvZGUoODIzMCksIHRydWUpOw0KKwl9DQorCXJldHVybiB0cnVlOw0KK30NCisNCitTbWFydFJlcGxhY2UucHJvdG90eXBlLnNtYXJ0UXVvdGVzID0gZnVuY3Rpb24oa2luZCkNCit7DQorCWlmIChraW5kID09ICInIikNCisJew0KKwkJdmFyIG9wZW5pbmcgPSB0aGlzLm9wZW5pbmdRdW90ZTsNCisJCXZhciBjbG9zaW5nID0gdGhpcy5jbG9zaW5nUXVvdGU7DQorCX0NCisJZWxzZQ0KKwl7DQorCQl2YXIgb3BlbmluZyA9IHRoaXMub3BlbmluZ1F1b3RlczsNCisJCXZhciBjbG9zaW5nID0gdGhpcy5jbG9zaW5nUXVvdGVzOw0KKwl9DQorCQ0KKwl2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7DQorCQkNCisJdmFyIHNlbCA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTsNCisNCisJaWYgKFhpbmhhLmlzX2llKQ0KKwl7DQorCQl2YXIgciA9IGVkaXRvci5jcmVhdGVSYW5nZShzZWwpOw0KKwkJaWYgKHIudGV4dCAhPT0gJycpDQorCQl7DQorCQkJci50ZXh0ID0gJyc7DQorCQl9DQorCQlyLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgLTEpOw0KKwkJDQorCQlpZihyLnRleHQubWF0Y2goL1xTLykpDQorCQl7DQorCQkJci5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsICsxKTsNCisJCQlyLnRleHQgPSBjbG9zaW5nOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCXIubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCArMSk7DQorCQkJci50ZXh0ID0gb3BlbmluZzsNCisJCX0NCisJfQ0KKwllbHNlDQorCXsNCisJCXZhciByID0gZWRpdG9yLmNyZWF0ZVJhbmdlKHNlbCk7DQorDQorCQlpZiAoIXIuY29sbGFwc2VkKQ0KKwkJew0KKwkJCWVkaXRvci5pbnNlcnROb2RlQXRTZWxlY3Rpb24oZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpKTsNCisJCX0NCisJCWlmIChyLnN0YXJ0T2Zmc2V0ID4gMCkgci5zZXRTdGFydChyLnN0YXJ0Q29udGFpbmVyLCByLnN0YXJ0T2Zmc2V0IC0xKTsNCisNCisJCQ0KKwkJaWYoci50b1N0cmluZygpLm1hdGNoKC9bXlxzXHhBMF0vKSkNCisJCXs7DQorCQkJci5jb2xsYXBzZShmYWxzZSk7DQorCQkJZWRpdG9yLmluc2VydE5vZGVBdFNlbGVjdGlvbihkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjbG9zaW5nKSk7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJZWRpdG9yLmluc2VydE5vZGVBdFNlbGVjdGlvbihkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShyLnRvU3RyaW5nKCkrb3BlbmluZykpOwkJCQ0KKwkJfQ0KKwkJZWRpdG9yLmdldFNlbGVjdGlvbigpLmNvbGxhcHNlVG9FbmQoKTsNCisJfQ0KKwlyZXR1cm4gZmFsc2U7DQorfQ0KKw0KK1NtYXJ0UmVwbGFjZS5wcm90b3R5cGUuc21hcnRSZXBsYWNlID0gZnVuY3Rpb24oZXYsIGxvb2tiYWNrLCByZSwgcmVwbGFjZSwgc3RvcEV2ZW50KQ0KK3sNCisJdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOw0KKwl2YXIgc2VsID0gdGhpcy5lZGl0b3IuZ2V0U2VsZWN0aW9uKCk7DQorCXZhciByID0gdGhpcy5lZGl0b3IuY3JlYXRlUmFuZ2Uoc2VsKTsNCisJDQorCWlmIChYaW5oYS5pc19pZSkNCisJew0KKwkJci5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIC1sb29rYmFjayk7DQorCQkNCisJCWlmKHIudGV4dC5tYXRjaChyZSkpDQorCQl7DQorCQkJci50ZXh0ID0gcmVwbGFjZTsNCisJCQlpZiAoc3RvcEV2ZW50KSANCisJCQl7DQorCQkJCVhpbmhhLl9zdG9wRXZlbnQoZXYpOw0KKwkJCQlyZXR1cm4gZmFsc2UNCisJCQl9DQorCQl9DQorCX0NCisJZWxzZQ0KKwl7DQorCQlpZiAoci5zdGFydE9mZnNldCA+IDEpIHIuc2V0U3RhcnQoci5zdGFydENvbnRhaW5lciwgci5zdGFydE9mZnNldCAtbG9va2JhY2spOw0KKw0KKwkJaWYoci50b1N0cmluZygpLm1hdGNoKHJlKSkNCisJCXsNCisJCQl0aGlzLmVkaXRvci5pbnNlcnROb2RlQXRTZWxlY3Rpb24oZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocmVwbGFjZSkpOw0KKwkJCXIuZGVsZXRlQ29udGVudHMoKTsNCisJCQlyLmNvbGxhcHNlKHRydWUpOw0KKwkJICBpZiAoc3RvcEV2ZW50KSANCisJCSAgew0KKwkJCQlYaW5oYS5fc3RvcEV2ZW50KGV2KTsNCisJCQkJcmV0dXJuIGZhbHNlDQorCQkgIH0NCisJCX0NCisJCWVkaXRvci5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZVRvRW5kKCk7DQorCX0NCisJcmV0dXJuIHRydWU7DQorfQ0KKw0KK1NtYXJ0UmVwbGFjZS5wcm90b3R5cGUucmVwbGFjZUFsbCA9IGZ1bmN0aW9uKCkNCit7DQorCXZhciBkb3VibGVRdW90ZXMgPSBbDQorCQkJCQkJCScmcXVvdDsnLA0KKwkJCQkJCQlTdHJpbmcuZnJvbUNoYXJDb2RlKDgyMjApLA0KKwkJCQkJCQlTdHJpbmcuZnJvbUNoYXJDb2RlKDgyMjEpLA0KKwkJCQkJCQlTdHJpbmcuZnJvbUNoYXJDb2RlKDgyMjIpLA0KKwkJCQkJCQlTdHJpbmcuZnJvbUNoYXJDb2RlKDE4NyksDQorCQkJCQkJCVN0cmluZy5mcm9tQ2hhckNvZGUoMTcxKQ0KKwkJCQkJCQkNCisJCQkJCQldOw0KKwl2YXIgc2luZ2xlUXVvdGVzID0gWw0KKwkJCQkJCQkiJyIsDQorCQkJCQkJCVN0cmluZy5mcm9tQ2hhckNvZGUoODIxNiksDQorCQkJCQkJCVN0cmluZy5mcm9tQ2hhckNvZGUoODIxNyksDQorCQkJCQkJCVN0cmluZy5mcm9tQ2hhckNvZGUoODIxOCksDQorCQkJCQkJCVN0cmluZy5mcm9tQ2hhckNvZGUoODI1MCksDQorCQkJCQkJCVN0cmluZy5mcm9tQ2hhckNvZGUoODI0OSkNCisJCQkJCQldOw0KKwkNCisJdmFyIGh0bWwgPSB0aGlzLmVkaXRvci5nZXRIVE1MKCk7DQorCXZhciByZU9wZW5pbmdEb3VibGUgPSBuZXcgUmVnRXhwICgnKFxcc3xefD4pKCcrZG91YmxlUXVvdGVzLmpvaW4oJ3wnKSsnKShcXFMpJywnZycpOw0KKwlodG1sID0gaHRtbC5yZXBsYWNlKHJlT3BlbmluZ0RvdWJsZSwnJDEnK3RoaXMub3BlbmluZ1F1b3RlcysnJDMnKTsNCisJDQorCXZhciByZU9wZW5pbmdTaW5nbGUgPSBuZXcgUmVnRXhwICgnKFxcc3xefD4pKCcrc2luZ2xlUXVvdGVzLmpvaW4oJ3wnKSsnKShcXFMpJywnZycpOw0KKwlodG1sID0gaHRtbC5yZXBsYWNlKHJlT3BlbmluZ1NpbmdsZSwnJDEnK3RoaXMub3BlbmluZ1F1b3RlKyckMycpOw0KKwkNCisJdmFyIHJlQ2xvc2luZ0RvdWJsZSA9IG5ldyBSZWdFeHAgKCcoXFxTKSgnK2RvdWJsZVF1b3Rlcy5qb2luKCd8JykrJyknLCdnJyk7DQorCWh0bWwgPSBodG1sLnJlcGxhY2UocmVDbG9zaW5nRG91YmxlLCckMScrdGhpcy5jbG9zaW5nUXVvdGVzKTsNCisJDQorCXZhciByZUNsb3NpbmdTaW5nbGUgPSBuZXcgUmVnRXhwICgnKFxcUykoJytzaW5nbGVRdW90ZXMuam9pbignfCcpKycpJywnZycpOw0KKwlodG1sID0gaHRtbC5yZXBsYWNlKHJlQ2xvc2luZ1NpbmdsZSwnJDEnK3RoaXMuY2xvc2luZ1F1b3RlKTsNCisJDQorCXZhciByZURhc2ggICAgPSBuZXcgUmVnRXhwICgnKCB8Jm5ic3A7KSgtKSggfCZuYnNwOyknLCdnJyk7DQorCWh0bWwgPSBodG1sLnJlcGxhY2UocmVEYXNoLCcgJytTdHJpbmcuZnJvbUNoYXJDb2RlKDgyMTEpKycgJyk7DQorCQ0KKwl0aGlzLmVkaXRvci5zZXRIVE1MKGh0bWwpOw0KK30NCisNCitTbWFydFJlcGxhY2UucHJvdG90eXBlLmJ1dHRvblByZXNzID0gZnVuY3Rpb24ob3B0cywgb2JqKQ0KK3sNCisJdmFyIHNlbGYgPSB0aGlzOw0KKw0KKwlpZiAoIHRoaXMuZGlhbG9nLnJvb3RFbGVtLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnKQ0KKwl7DQorCQlyZXR1cm4gdGhpcy5kaWFsb2cuaGlkZSgpOw0KKwl9DQorCXZhciBkb09LID0gZnVuY3Rpb24oKQ0KKwl7DQorCQl2YXIgb3B0cyA9IHNlbGYuZGlhbG9nLmhpZGUoKTsNCisJCXNlbGYudG9nZ2xlQWN0aXZpdHkoKG9wdHMuZW5hYmxlKSA/IHRydWUgOiBmYWxzZSk7IA0KKwkJaWYgKG9wdHMuY29udmVydCkNCisJCXsNCisJCQlzZWxmLnJlcGxhY2VBbGwoKTsNCisJCQlzZWxmLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgiY29udmVydCIpLmNoZWNrZWQgPSBmYWxzZTsNCisJCX0NCisJfQ0KKwl2YXIgaW5wdXRzID0gDQorCXsNCisJCWVuYWJsZSA6IHNlbGYuYWN0aXZlID8gIm9uIiA6ICcnLA0KKwkJY29udmVydDogJycNCisJfTsNCisJdGhpcy5zaG93KGlucHV0cywgZG9PSyk7DQorfTsNCisNCitTbWFydFJlcGxhY2UucHJvdG90eXBlLm9uR2VuZXJhdGVPbmNlID0gZnVuY3Rpb24oKQ0KK3sNCisgIHRoaXMuX3ByZXBhcmVEaWFsb2coKTsNCit9Ow0KKw0KK1NtYXJ0UmVwbGFjZS5wcm90b3R5cGUuX3ByZXBhcmVEaWFsb2cgPSBmdW5jdGlvbigpDQorew0KKyAgdmFyIHNlbGYgPSB0aGlzOw0KKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOw0KKw0KKyAgaWYoIXRoaXMuaHRtbCkNCisgIHsNCisgICAgWGluaGEuX2dldGJhY2soIFhpbmhhLmdldFBsdWdpbkRpcigiU21hcnRSZXBsYWNlIikgKyAnL2RpYWxvZy5odG1sJywgZnVuY3Rpb24oZ2V0YmFjaykgeyBzZWxmLmh0bWwgPSBnZXRiYWNrOyBzZWxmLl9wcmVwYXJlRGlhbG9nKCk7IH0pOw0KKwlyZXR1cm47DQorICB9DQorICANCisgIC8vIE5vdyB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZCwgc28gd2UgY2FuIGJ1aWxkIHRoZSBkaWFsb2cuDQorICB0aGlzLmRpYWxvZyA9IG5ldyBYaW5oYS5EaWFsb2coZWRpdG9yLCB0aGlzLmh0bWwsICdTbWFydFJlcGxhY2UnLHt9LHttb2RhbDpmYWxzZX0pOw0KKyAgdGhpcy5kaWFsb2cuYXR0YWNoVG9QYW5lbCgndG9wJyk7DQorDQorICB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgnZW5hYmxlJykub25jaGFuZ2UgPSBmdW5jdGlvbiAoKQ0KKyAgew0KKyAgCXNlbGYudG9nZ2xlQWN0aXZpdHkodGhpcy5jaGVja2VkKTsgDQorICB9DQorICB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgnY29udmVydCcpLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkNCisgIHsNCisgIAlzZWxmLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgnb2snKS5zdHlsZS5kaXNwbGF5ID0gKCB0aGlzLmNoZWNrZWQgKSA/ICcnIDogJ25vbmUnOyANCisgIH0NCisgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdvaycpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKQ0KKyAgew0KKyAgCXNlbGYucmVwbGFjZUFsbCgpOw0KKyAgCXNlbGYuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdjb252ZXJ0JykuY2hlY2tlZCA9IGZhbHNlOyANCisgIAl0aGlzLnN0eWxlLmRpc3BsYXkgPSAgJ25vbmUnOyANCisgIH0NCisgIHRoaXMucmVhZHkgPSB0cnVlOw0KK307DQorDQorU21hcnRSZXBsYWNlLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24oaW5wdXRzKQ0KK3sNCisgIGlmKCF0aGlzLnJlYWR5KQ0KKyAgew0KKyAgICB2YXIgc2VsZiA9IHRoaXM7DQorICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge3NlbGYuc2hvdyhpbnB1dHMsb2ssY2FuY2VsKTt9LDEwMCk7DQorCXJldHVybjsNCisgIH0NCisNCisgIC8vIENvbm5lY3QgdGhlIE9LIGFuZCBDYW5jZWwgYnV0dG9ucw0KKyAgdmFyIHNlbGYgPSB0aGlzOw0KKw0KKyAgdGhpcy5kaWFsb2cuc2hvdyhpbnB1dHMpOw0KKw0KKyAgLy8gSW5pdCB0aGUgc2l6ZXMNCisgIHRoaXMuZGlhbG9nLm9ucmVzaXplKCk7DQorfTsNCisNCitTbWFydFJlcGxhY2UucHJvdG90eXBlLm9uQmVmb3JlTW9kZSA9IGZ1bmN0aW9uKG1vZGUpDQorew0KKyAgc3dpdGNoKG1vZGUpDQorICB7DQorICAgIGNhc2UgJ3RleHRtb2RlJzogICAgICANCisgICAgICBpZiAoIHRoaXMuZGlhbG9nLnJvb3RFbGVtLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnKQ0KKyAgICAgIHsNCisgICAgICAgIHRoaXMuX3dhc1Nob3dpbmcgPSB0cnVlOw0KKyAgICAgICAgdGhpcy5kaWFsb2cuaGlkZSgpOw0KKyAgICAgIH0NCisgICAgICBlbHNlDQorICAgICAgew0KKyAgICAgICAgdGhpcy5fd2FzU2hvd2luZyA9IGZhbHNlOw0KKyAgICAgIH0NCisgICAgICBicmVhazsNCisgICAgICANCisgICAgY2FzZSAnd3lzaXd5Zyc6DQorICAgICAgaWYodGhpcy5fd2FzU2hvd2luZykNCisgICAgICB7DQorICAgICAgICB0aGlzLmJ1dHRvblByZXNzKCk7DQorICAgICAgfQ0KKyAgICAgIGJyZWFrOw0KKyAgfQ0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9kaWFsb2cuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2RpYWxvZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NmUwZjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9kaWFsb2cuaHRtbApAQCAtMCwwICsxLDE2IEBACis8aDEgaWQ9IltoMV0iPjxsMTBuPlNtYXJ0UmVwbGFjZSBTZXR0aW5nczwvbDEwbj48L2gxPgorPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDEwcHg7Ij4KKzx0YWJsZSBzdHlsZT0id2lkdGg6IDEwMCU7Ym9yZGVyOm5vbmUiPgorICA8dHI+CisgICAgPHRkIHN0eWxlPSJ3aWR0aDoxNXB4Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJbZW5hYmxlXSIgbmFtZT0iW2VuYWJsZV0iIHZhbHVlPSJvbiIgLz48L3RkPgorICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij48bDEwbj5FbmFibGUgYXV0b21hdGljIHJlcGxhY2VtZW50czwvbDEwbj48L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkIHN0eWxlPSJ3aWR0aDoxNXB4Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJbY29udmVydF0iIG5hbWU9Iltjb252ZXJ0XSIgdmFsdWU9Im9uIiAvPjwvdGQ+CisgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjxsMTBuPkNvbnZlcnQgYWxsIHF1b3RlcyBhbmQgZGFzaGVzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50PC9sMTBuPiA8aW5wdXQgc3R5bGU9ImRpc3BsYXk6bm9uZSIgdHlwZT0iYnV0dG9uIiBpZD0iW29rXSIgdmFsdWU9Il8oT0spIiAvPjwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJidXR0b25zIj4KKyAgCis8L2Rpdj4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2ltZy9TbWFydFJlcGxhY2Uuc3ZnIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvaW1nL1NtYXJ0UmVwbGFjZS5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk4MTgxNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2ltZy9TbWFydFJlcGxhY2Uuc3ZnCkBAIC0wLDAgKzEsMjMxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgorPHN2ZworICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgorICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKKyAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKKyAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCisgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCisgICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCisgICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKKyAgIHdpZHRoPSIxOCIKKyAgIGhlaWdodD0iMTgiCisgICBpZD0ic3ZnMiIKKyAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCisgICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgorICAgdmVyc2lvbj0iMS4wIgorICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSIvaG9tZS9yYWltdW5kL3d3dy94LWFsbC90cnVuay9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9pbWcvc21hcnRxdW90ZXMucG5nIgorICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9Ijg5IgorICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9Ijg5IgorICAgc29kaXBvZGk6ZG9jbmFtZT0iU21hcnRSZXBsYWNlLnN2ZyIKKyAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIj4KKyAgPGRlZnMKKyAgICAgaWQ9ImRlZnM0Ij4KKyAgICA8bGluZWFyR3JhZGllbnQKKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMTk1Ij4KKyAgICAgIDxzdG9wCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAxYWVhO3N0b3Atb3BhY2l0eTowLjQ5ODAzOTIyOyIKKyAgICAgICAgIG9mZnNldD0iMCIKKyAgICAgICAgIGlkPSJzdG9wMzE5NyIgLz4KKyAgICAgIDxzdG9wCisgICAgICAgICBpZD0ic3RvcDMxOTkiCisgICAgICAgICBvZmZzZXQ9IjEiCisgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAyZmU5O3N0b3Atb3BhY2l0eTowOyIgLz4KKyAgICA8L2xpbmVhckdyYWRpZW50PgorICAgIDxsaW5lYXJHcmFkaWVudAorICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMxODEiPgorICAgICAgPHN0b3AKKyAgICAgICAgIGlkPSJzdG9wMzE5MSIKKyAgICAgICAgIG9mZnNldD0iMCIKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDFhZWE7c3RvcC1vcGFjaXR5OjAuNDk4MDM5MjI7IiAvPgorICAgICAgPHN0b3AKKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDJmZTk7c3RvcC1vcGFjaXR5OjA7IgorICAgICAgICAgb2Zmc2V0PSIxIgorICAgICAgICAgaWQ9InN0b3AzMTg1IiAvPgorICAgIDwvbGluZWFyR3JhZGllbnQ+CisgICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCisgICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKKyAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTI2LjE4MTA5IDogMSIKKyAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCisgICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKKyAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzcyLjA0NzI0IDogMzUwLjc4NzM5IDogMSIKKyAgICAgICBpZD0icGVyc3BlY3RpdmUxMCIgLz4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXIzODc3IgorICAgICAgIHg9Ii0wLjU1MjI2NDM0IgorICAgICAgIHdpZHRoPSIyLjEwNDUyODciCisgICAgICAgeT0iLTAuNTg3NjM2MzMiCisgICAgICAgaGVpZ2h0PSIyLjE3NTI3MjciPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjAuMzI1ODg0MSIKKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjM4NzkiIC8+CisgICAgPC9maWx0ZXI+CisgICAgPGZpbHRlcgorICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICBpZD0iZmlsdGVyMzg4MSIKKyAgICAgICB4PSItMC41NDk4MTU0MSIKKyAgICAgICB3aWR0aD0iMi4wOTk2MzA4IgorICAgICAgIHk9Ii0wLjU4NTAzMDU0IgorICAgICAgIGhlaWdodD0iMi4xNzAwNjExIj4KKyAgICAgIDxmZUdhdXNzaWFuQmx1cgorICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgICAgc3RkRGV2aWF0aW9uPSIwLjMyNDQzOTAxIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyMzg4MyIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgICA8ZmlsdGVyCisgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgICAgIGlkPSJmaWx0ZXIzODg1IgorICAgICAgIHg9Ii0wLjU0OTgxNTQxIgorICAgICAgIHdpZHRoPSIyLjA5OTYzMDgiCisgICAgICAgeT0iLTAuNTg1MDMwNTQiCisgICAgICAgaGVpZ2h0PSIyLjE3MDA2MTEiPgorICAgICAgPGZlR2F1c3NpYW5CbHVyCisgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgICBzdGREZXZpYXRpb249IjAuMzI0NDM5MDEiCisgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXIzODg3IiAvPgorICAgIDwvZmlsdGVyPgorICAgIDxmaWx0ZXIKKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICAgICAgaWQ9ImZpbHRlcjM4ODkiCisgICAgICAgeD0iLTAuNTUyMjY0MzQiCisgICAgICAgd2lkdGg9IjIuMTA0NTI4NyIKKyAgICAgICB5PSItMC41ODc2MzYzMyIKKyAgICAgICBoZWlnaHQ9IjIuMTc1MjcyNyI+CisgICAgICA8ZmVHYXVzc2lhbkJsdXIKKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zMjU4ODQxIgorICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyMzg5MSIgLz4KKyAgICA8L2ZpbHRlcj4KKyAgPC9kZWZzPgorICA8c29kaXBvZGk6bmFtZWR2aWV3CisgICAgIGlkPSJiYXNlIgorICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCisgICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgorICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCisgICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCisgICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCisgICAgIGlua3NjYXBlOnpvb209IjExLjIiCisgICAgIGlua3NjYXBlOmN4PSIzLjY3MjcxNjciCisgICAgIGlua3NjYXBlOmN5PSI3LjIwNTgyMTgiCisgICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKKyAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgorICAgICBzaG93Z3JpZD0iZmFsc2UiCisgICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTI4MCIKKyAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iOTUwIgorICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKKyAgICAgaW5rc2NhcGU6d2luZG93LXk9IjI1IiAvPgorICA8bWV0YWRhdGEKKyAgICAgaWQ9Im1ldGFkYXRhNyI+CisgICAgPHJkZjpSREY+CisgICAgICA8Y2M6V29yaworICAgICAgICAgcmRmOmFib3V0PSIiPgorICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KKyAgICAgICAgPGRjOnR5cGUKKyAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KKyAgICAgIDwvY2M6V29yaz4KKyAgICA8L3JkZjpSREY+CisgIDwvbWV0YWRhdGE+CisgIDxnCisgICAgIGlua3NjYXBlOmxhYmVsPSJFYmVuZSAxIgorICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgorICAgICBpZD0ibGF5ZXIxIj4KKyAgICA8ZworICAgICAgIGlkPSJnMzUyNSIKKyAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk3MzM1MTksLTAuMjI5MzE2NiwwLjIyOTMxNjYsMC45NzMzNTE5LC0zLjAzMzQ4MywxLjc2MjExMDYpIgorICAgICAgIHN0eWxlPSJmaWxsOiM2YWIxMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwYTA0MDQ7c3Ryb2tlLXdpZHRoOjAuMztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgorICAgICAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL2hvbWUvcmFpbXVuZC93d3cveC1hbGwvdHJ1bmsvcGx1Z2lucy9TbWFydFJlcGxhY2UvaW1nL3NtYXJ0cXVvdGVzLnBuZyIKKyAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iODkiCisgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9Ijg5Ij4KKyAgICAgIDxwYXRoCisgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzc3NjY2MiCisgICAgICAgICBpZD0idGV4dDM1MDYiCisgICAgICAgICBkPSJNIDMuNTcxMTI4NCwxNy40MzA5MyBDIDYuMTI2MTk3NCwxNi4wNzI0MzYgNy42NjczNTQzLDE0LjA1MTI1NyA3LjY2NzM1NDMsMTIuMDk2MzUxIEMgNy42NjczNTQzLDEwLjIwNzcxMyA2LjMyODk4MTEsOC45NDg2MTg0IDQuMzQxNzA1Niw4Ljk0ODYxODQgQyAyLjU1NzIxMjksOC45NDg2MTg0IDEuMTc4MjgzOCwxMC4wNzUxNzcgMS4xNzgyODM4LDExLjU2NjIwNyBDIDEuMTc4MjgzOCwxMi44NTg0MzMgMi4wNzA1MzI3LDEzLjcxOTkxOSAzLjgxNDQ2ODYsMTMuOTg0OTkgQyAzLjM2ODM0NTQsMTQuNjgwODA1IDIuODAwNTUwMywxNS4yNDQwODUgMS44MjcxOTA4LDE1LjkzOTg5OSBMIDMuNTcxMTI4NCwxNy40MzA5MyIKKyAgICAgICAgIHN0eWxlPSJmb250LXNpemU6NTMuMDYwNTM5MjQ5OTk5OTk3OTNweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7ZmlsbDojNmFiMTAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMGEwNDA0O3N0cm9rZS13aWR0aDowLjM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MTtmb250LWZhbWlseTpCaXRzdHJlYW0gVmVyYSBTYW5zIiAvPgorICAgICAgPHBhdGgKKyAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3Nzc2NjYyIKKyAgICAgICAgIGlkPSJwYXRoMzUxMSIKKyAgICAgICAgIGQ9Ik0gOC41NzA4NDcyLDE3LjU1OTYwNiBDIDExLjEyNTkxNiwxNi4yMDExMTIgMTIuNjY3MDczLDE0LjE3OTkzMyAxMi42NjcwNzMsMTIuMjI1MDI4IEMgMTIuNjY3MDczLDEwLjMzNjM4OSAxMS4zMjg2OTksOS4wNzcyOTQ4IDkuMzQxNDI0MSw5LjA3NzI5NDggQyA3LjU1NjkzMDgsOS4wNzcyOTQ4IDYuMTc4MDAyMiwxMC4yMDM4NTQgNi4xNzgwMDIyLDExLjY5NDg4MyBDIDYuMTc4MDAyMiwxMi45ODcxMDkgNy4wNzAyNTEsMTMuODQ4NTk1IDguODE0MTg3MiwxNC4xMTM2NjggQyA4LjM2ODA2NDMsMTQuODA5NDgxIDcuODAwMjY4NiwxNS4zNzI3NjEgNi44MjY5MDg3LDE2LjA2ODU3NSBMIDguNTcwODQ3MiwxNy41NTk2MDYiCisgICAgICAgICBzdHlsZT0iZm9udC1zaXplOjUzLjA2MDUzOTI0OTk5OTk5NzkzcHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZpbGw6IzZhYjEwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzBhMDQwNDtzdHJva2Utd2lkdGg6MC4zO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7Zm9udC1mYW1pbHk6Qml0c3RyZWFtIFZlcmEgU2FucyIgLz4KKyAgICA8L2c+CisgICAgPGcKKyAgICAgICBpZD0iZzM1MjkiCisgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC44Nzc2MTU1LC0wLjQ3OTM2NTIsMC40NzkzNjUyLDAuODc3NjE1NSwtMi4wOTI1Njc0LDYuMzQ2NTU2NSkiCisgICAgICAgc3R5bGU9ImZpbGw6IzZhYjEwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzBhMDQwNDtzdHJva2Utd2lkdGg6MC4zMDAwMDAwMTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgorICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI4OSIKKyAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iODkiCisgICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSIvaG9tZS9yYWltdW5kL3d3dy94LWFsbC90cnVuay9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9pbWcvc21hcnRxdW90ZXMucG5nIj4KKyAgICAgIDxnCisgICAgICAgICBpZD0iZzM1MzMiCisgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk3MzUxOTYsMC4yMjg2MDM3LC0wLjIyODYwMzcsMC45NzM1MTk2LDEuNDkwMTMxMSwtMi41Nzg0ODM2KSIKKyAgICAgICAgIHN0eWxlPSJmaWxsOiM2YWIxMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwYTA0MDQ7c3Ryb2tlLXdpZHRoOjAuMztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIj4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZTo1My4wNjA1MzkyNDk5OTk5OTc5M3B4O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmaWxsOiM2YWIxMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwYTA0MDQ7c3Ryb2tlLXdpZHRoOjAuMztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxO2ZvbnQtZmFtaWx5OkJpdHN0cmVhbSBWZXJhIFNhbnMiCisgICAgICAgICAgIGQ9Ik0gMTAuMjI2ODMyLDAuODM3MzYzMDUgQyA3LjY3MTc2MywyLjE5NTg1NzEgNi4xMzA2MDU2LDQuMjE3MDM2MSA2LjEzMDYwNTYsNi4xNzE5NDIxIEMgNi4xMzA2MDU2LDguMDYwNTgwMiA3LjQ2ODk3OSw5LjMxOTY3NDkgOS40NTYyNTUsOS4zMTk2NzQ5IEMgMTEuMjQwNzQ3LDkuMzE5Njc0OSAxMi42MTk2NzYsOC4xOTMxMTYxIDEyLjYxOTY3Niw2LjcwMjA4NjEgQyAxMi42MTk2NzYsNS40MDk4NjAyIDExLjcyNzQyOCw0LjU0ODM3NDEgOS45ODM0OTIsNC4yODMzMDMxIEMgMTAuNDI5NjE1LDMuNTg3NDg4MSAxMC45OTc0MSwzLjAyNDIwODIgMTEuOTcwNzcsMi4zMjgzOTQyIEwgMTAuMjI2ODMyLDAuODM3MzYzMDUiCisgICAgICAgICAgIGlkPSJwYXRoMzUxNyIKKyAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjc3NzY2NjIiAvPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBzdHlsZT0iZm9udC1zaXplOjUzLjA2MDUzOTI0OTk5OTk5NzkzcHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZpbGw6IzZhYjEwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzBhMDQwNDtzdHJva2Utd2lkdGg6MC4zO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7Zm9udC1mYW1pbHk6Qml0c3RyZWFtIFZlcmEgU2FucyIKKyAgICAgICAgICAgZD0iTSAxNS4yMjY1NDksMC45NjYwMzkyNSBDIDEyLjY3MTQ4MSwyLjMyNDUzMzMgMTEuMTMwMzI0LDQuMzQ1NzEyMyAxMS4xMzAzMjQsNi4zMDA2MTczIEMgMTEuMTMwMzI0LDguMTg5MjU2MyAxMi40Njg2OTgsOS40NDgzNTA5IDE0LjQ1NTk3Myw5LjQ0ODM1MDkgQyAxNi4yNDA0NjYsOS40NDgzNTA5IDE3LjYxOTM5NCw4LjMyMTc5MTMgMTcuNjE5Mzk0LDYuODMwNzYyMyBDIDE3LjYxOTM5NCw1LjUzODUzNjMgMTYuNzI3MTQ2LDQuNjc3MDUwMyAxNC45ODMyMDksNC40MTE5NzczIEMgMTUuNDI5MzMyLDMuNzE2MTY0MyAxNS45OTcxMjgsMy4xNTI4ODQzIDE2Ljk3MDQ4OCwyLjQ1NzA3MDMgTCAxNS4yMjY1NDksMC45NjYwMzkyNSIKKyAgICAgICAgICAgaWQ9InBhdGgzNTE5IgorICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzc3NjY2MiIC8+CisgICAgICA8L2c+CisgICAgPC9nPgorICAgIDxwYXRoCisgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIgorICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiNmZmY5Zjk7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZmlsdGVyOnVybCgjZmlsdGVyMzg4MSkiCisgICAgICAgaWQ9InBhdGgzNDY2IgorICAgICAgIHNvZGlwb2RpOmN4PSItMS45NDEzODY5IgorICAgICAgIHNvZGlwb2RpOmN5PSI0LjM1MTY3ODQiCisgICAgICAgc29kaXBvZGk6cng9IjAuNzEwMjYzNDkiCisgICAgICAgc29kaXBvZGk6cnk9IjAuNjYyOTEyNjEiCisgICAgICAgZD0iTSAtMS4yMzExMjM0LDQuMzUxNjc4NCBBIDAuNzEwMjYzNDksMC42NjI5MTI2MSAwIDEgMSAtMi42NTE2NTA0LDQuMzUxNjc4NCBBIDAuNzEwMjYzNDksMC42NjI5MTI2MSAwIDEgMSAtMS4yMzExMjM0LDQuMzUxNjc4NCB6IgorICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0yLjM1MjY0MDcsLTAuNTM4Njc3MywwLjUzODY3NzMsLTIuMzUyNjQwNywtMC4xNzEwMzU3LDE1Ljc5ODIxMSkiCisgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSItMTAuOTcxMTE3IgorICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iMTQuNzA0MzQ0IgorICAgICAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL2hvbWUvcmFpbXVuZC93d3cveC1hbGwvdHJ1bmsvcGx1Z2lucy9TbWFydFJlcGxhY2UvaW1nL3BhdGgzNDY4LnBuZyIKKyAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iODkiCisgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9Ijg5IiAvPgorICAgIDxwYXRoCisgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIgorICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiNmZmY5Zjk7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZmlsdGVyOnVybCgjZmlsdGVyMzg3NykiCisgICAgICAgaWQ9InBhdGgzNDY4IgorICAgICAgIHNvZGlwb2RpOmN4PSItMS45NDEzODY5IgorICAgICAgIHNvZGlwb2RpOmN5PSI0LjM1MTY3ODQiCisgICAgICAgc29kaXBvZGk6cng9IjAuNzEwMjYzNDkiCisgICAgICAgc29kaXBvZGk6cnk9IjAuNjYyOTEyNjEiCisgICAgICAgZD0iTSAtMS4yMzExMjM0LDQuMzUxNjc4NCBBIDAuNzEwMjYzNDksMC42NjI5MTI2MSAwIDEgMSAtMi42NTE2NTA0LDQuMzUxNjc4NCBBIDAuNzEwMjYzNDksMC42NjI5MTI2MSAwIDEgMSAtMS4yMzExMjM0LDQuMzUxNjc4NCB6IgorICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0yLjM0MjIwODMsLTAuNTM2Mjg4NSwwLjUzNjI4ODUsLTIuMzQyMjA4Myw0Ljc0OTg5LDE0LjY2OTQyKSIKKyAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iODkiCisgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9Ijg5IiAvPgorICAgIDxwYXRoCisgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIgorICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiNmZmY5Zjk7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZmlsdGVyOnVybCgjZmlsdGVyMzg4NSkiCisgICAgICAgaWQ9InBhdGgzNzI5IgorICAgICAgIHNvZGlwb2RpOmN4PSItMS45NDEzODY5IgorICAgICAgIHNvZGlwb2RpOmN5PSI0LjM1MTY3ODQiCisgICAgICAgc29kaXBvZGk6cng9IjAuNzEwMjYzNDkiCisgICAgICAgc29kaXBvZGk6cnk9IjAuNjYyOTEyNjEiCisgICAgICAgZD0iTSAtMS4yMzExMjM0LDQuMzUxNjc4NCBBIDAuNzEwMjYzNDksMC42NjI5MTI2MSAwIDEgMSAtMi42NTE2NTA0LDQuMzUxNjc4NCBBIDAuNzEwMjYzNDksMC42NjI5MTI2MSAwIDEgMSAtMS4yMzExMjM0LDQuMzUxNjc4NCB6IgorICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0yLjM1MjY0MDcsLTAuNTM4Njc3MywwLjUzODY3NzMsLTIuMzUyNjQwNywtNC43OTkzMTQyLDIwLjYzNDM5NCkiCisgICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSItMTAuOTcxMTE3IgorICAgICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iMTQuNzA0MzQ0IgorICAgICAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL2hvbWUvcmFpbXVuZC93d3cveC1hbGwvdHJ1bmsvcGx1Z2lucy9TbWFydFJlcGxhY2UvaW1nL3BhdGgzNDY4LnBuZyIKKyAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iODkiCisgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9Ijg5IiAvPgorICAgIDxwYXRoCisgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIgorICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiNmZmY5Zjk7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZmlsdGVyOnVybCgjZmlsdGVyMzg4OSkiCisgICAgICAgaWQ9InBhdGgzNzMxIgorICAgICAgIHNvZGlwb2RpOmN4PSItMS45NDEzODY5IgorICAgICAgIHNvZGlwb2RpOmN5PSI0LjM1MTY3ODQiCisgICAgICAgc29kaXBvZGk6cng9IjAuNzEwMjYzNDkiCisgICAgICAgc29kaXBvZGk6cnk9IjAuNjYyOTEyNjEiCisgICAgICAgZD0iTSAtMS4yMzExMjM0LDQuMzUxNjc4NCBBIDAuNzEwMjYzNDksMC42NjI5MTI2MSAwIDEgMSAtMi42NTE2NTA0LDQuMzUxNjc4NCBBIDAuNzEwMjYzNDksMC42NjI5MTI2MSAwIDEgMSAtMS4yMzExMjM0LDQuMzUxNjc4NCB6IgorICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0yLjM0MjIwODMsLTAuNTM2Mjg4NSwwLjUzNjI4ODUsLTIuMzQyMjA4MywwLjMwMDE4MjksMjAuMDQxMzE3KSIKKyAgICAgICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9Ii9ob21lL3JhaW11bmQvd3d3L3gtYWxsL3RydW5rL3BsdWdpbnMvU21hcnRSZXBsYWNlL2ltZy9wYXRoMzQ2OC5wbmciCisgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9Ijg5IgorICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI4OSIgLz4KKyAgPC9nPgorPC9zdmc+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9pbWcvc21hcnRxdW90ZXMucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvaW1nL3NtYXJ0cXVvdGVzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjFhZTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvaW1nL3NtYXJ0cXVvdGVzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL2NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9jaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWU2YjIwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9jaC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIk9LIjogIuWlvSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9jei5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvY3ouanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFmMmU4ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvY3ouanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjeiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9kYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvZGEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1ZTM2NAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvZGEuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E2Y2JlOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvZGUuanMKQEAgLTAsMCArMSwyMCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDbG9zaW5nRG91YmxlUXVvdGVzIjogIuKAnCIsCisgICAgIkNsb3NpbmdTaW5nbGVRdW90ZSI6ICLigJgiLAorICAgICJDb252ZXJ0IGFsbCBxdW90ZXMgYW5kIGRhc2hlcyBpbiB0aGUgY3VycmVudCBkb2N1bWVudCI6ICJBbGxlIEFuZsO8aHJ1bmdzemVpY2hlbiB1bmQgR2VkYW5rZW5zdHJpY2hlIHVtd2FuZGVsbiIsCisgICAgIkVuYWJsZSBhdXRvbWF0aWMgcmVwbGFjZW1lbnRzIjogIkF1dG9tYXRpc2NoZSBFcnNldHp1bmcgYWt0aXZpZXJlbiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiT3BlbmluZ0RvdWJsZVF1b3RlcyI6ICLigJ4iLAorICAgICJPcGVuaW5nU2luZ2xlUXVvdGUiOiAi4oCaIiwKKyAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIlNtYXJ0UmVwbGFjZSBFaW5zdGVsbHVuZ2VuIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL2VlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9lZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzZiZWUwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9lZS5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL2VsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9lbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDY4MDM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9lbC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIk9LIjogIs6Vzr3PhM6szr7Otc65IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL2VzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2QwMWZkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9lcy5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVzIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIk9LIjogIkFjZXB0YXIiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvZXUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL2V1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYjlmZTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL2V1LmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiT0siOiAiQWRvcyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9mYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvZmEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJhNDFjOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvZmEuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJPSyI6ICLYqNmE2YciCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvZmkuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL2ZpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YWVkMmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL2ZpLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmkiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiT0siOiAiSHl2w6Rrc3kiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYWRiNmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsMjIgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2xvc2luZ0RvdWJsZVF1b3RlcyI6ICLCqyIsCisgICAgIkNvbnZlcnQgYWxsIHF1b3RlcyBhbmQgZGFzaGVzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IjogIkNvbnZlcnRpciB0b3VzIGxlcyBndWlsbGVtZXRzIGV0IHRpcmV0cyBkYW5zIGxlIGRvY3VtZW50IGFjdHVlbCIsCisgICAgIkVuYWJsZSBhdXRvbWF0aWMgcmVwbGFjZW1lbnRzIjogIkFjdGl2ZXIgbGUgcmVtcGxhY2VtZW50IGF1dG9tYXRpcXVlIiwKKyAgICAiT0siOiAiT0siLAorICAgICJPcGVuaW5nRG91YmxlUXVvdGVzIjogIsK7IiwKKyAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIlBhcmFtw6h0cmVzIFNtYXJ0UmVwbGFjZSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkNsb3NpbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICAgICAiT3BlbmluZ1NpbmdsZVF1b3RlIjogIiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvaGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZjcyZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL2hlLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiT0siOiAi15DXmdep15XXqCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9odS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvaHUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVmOTE1OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvaHUuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJodSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJPSyI6ICJSZW5kYmVuIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9pdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGZlZDIzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9pdC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIml0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9qYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWY5YjU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9qYS5qcwpAQCAtMCwwICsxLDIwIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNsb3NpbmdEb3VibGVRdW90ZXMiOiAi4oCcIiwKKyAgICAiQ2xvc2luZ1NpbmdsZVF1b3RlIjogIuKAmCIsCisgICAgIkNvbnZlcnQgYWxsIHF1b3RlcyBhbmQgZGFzaGVzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IjogIuaWh+abuOWGheOBruW8leeUqOespuOBqOODgOODg+OCt+ODpeOCkuOBmeOBueOBpuWkieaPmyIsCisgICAgIkVuYWJsZSBhdXRvbWF0aWMgcmVwbGFjZW1lbnRzIjogIuiHquWLlee9ruaPm+OBruacieWKueWMliIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiT3BlbmluZ0RvdWJsZVF1b3RlcyI6ICLigJ4iLAorICAgICJPcGVuaW5nU2luZ2xlUXVvdGUiOiAi4oCaIiwKKyAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIlNtYXJ0UmVwbGFjZeioreWumiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMGY2MmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSwzMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICJDbG9zaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgIkNsb3NpbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICJDb252ZXJ0IGFsbCBxdW90ZXMgYW5kIGRhc2hlcyBpbiB0aGUgY3VycmVudCBkb2N1bWVudCI6ICIiLAorICAgICJFbmFibGUgYXV0b21hdGljIHJlcGxhY2VtZW50cyI6ICIiLAorICAgICJPSyI6ICIiLAorICAgICJPcGVuaW5nRG91YmxlUXVvdGVzIjogIiIsCisgICAgIk9wZW5pbmdTaW5nbGVRdW90ZSI6ICIiLAorICAgICJTbWFydFJlcGxhY2UiOiAiIiwKKyAgICAiU21hcnRSZXBsYWNlIFNldHRpbmdzIjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9sdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGMwMDZhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9sdC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL2x2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9sdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2U2YzhjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9sdi5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIk9LIjogIkxhYmkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvbmIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL25iLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZGJhMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL25iLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MTBlMGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL25sLmpzCkBAIC0wLDAgKzEsMjAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2xvc2luZ0RvdWJsZVF1b3RlcyI6ICLigJwiLAorICAgICJDbG9zaW5nU2luZ2xlUXVvdGUiOiAi4oCYIiwKKyAgICAiQ29udmVydCBhbGwgcXVvdGVzIGFuZCBkYXNoZXMgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQiOiAiQ29udmVydGVlciBhbGxlIHF1b3RlcyBlbiBzY2h1aW5lIHN0cmVwZW4iLAorICAgICJFbmFibGUgYXV0b21hdGljIHJlcGxhY2VtZW50cyI6ICJBdXRvbWF0aXNjaCB2ZXJ2YW5nZW4gaW5zY2hha2VsZW4iLAorICAgICJPSyI6ICJPSyIsCisgICAgIk9wZW5pbmdEb3VibGVRdW90ZXMiOiAi4oCeIiwKKyAgICAiT3BlbmluZ1NpbmdsZVF1b3RlIjogIuKAmiIsCisgICAgIlNtYXJ0UmVwbGFjZSBTZXR0aW5ncyI6ICJTbWFydFJlcGxhY2UgSW5zdGVsbGluZ2VuIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL3BsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9wbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjc1MzViCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9wbC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInBsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9wdF9ici5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2VjMTJmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9wdF9ici5qcwpAQCAtMCwwICsxLDIwIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNvbnZlcnQgYWxsIHF1b3RlcyBhbmQgZGFzaGVzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IjogIkNvbnZlcnRlciB0b2RhcyBhcyBjaXRhw6fDtWVzIGUgaMOtZmVucyBubyBkb2N1bWVudG8gYXR1YWwiLAorICAgICJFbmFibGUgYXV0b21hdGljIHJlcGxhY2VtZW50cyI6ICJBdGl2YXIgc3Vic3RpdHVpw6fDtWVzIGF1dG9tw6F0aWNhcyIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiU21hcnRSZXBsYWNlIjogIlN1YnN0aXR1acOnw6NvIFLDoXBpZGEiLAorICAgICJTbWFydFJlcGxhY2UgU2V0dGluZ3MiOiAiQ29uZmlndXJhw6fDtWVzIGRhIFN1YnN0aXR1acOnw6NvIFLDoXBpZGEiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL3JvLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9yby5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTQxMDBiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9yby5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJvIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIk9LIjogIkFjY2VwdMSDIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9ydS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDczMThiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9ydS5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJ1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL3NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9zaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2JhZDZiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9zaC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL3NpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9zaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2I3YThiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9zaS5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIk9LIjogIlYgcmVkdSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9zci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvc3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY3MWYxMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvc3IuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy9zdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRiMmIzYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvc3YuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvdGguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhlMmE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvdGguanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0aCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJPSyI6ICLguJXguIHguKXguIciCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvdHIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL3RyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYWQxMDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiT0siOiAiVGFtYW0iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL2xhbmcvdm4uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL3ZuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZDkyN2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1NtYXJ0UmVwbGFjZS9sYW5nL3ZuLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidm4iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiT0siOiAixJDhu5NuZyDDvSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TbWFydFJlcGxhY2UvcmVhZG1lLnR4dCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL3JlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU4MjkwNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU21hcnRSZXBsYWNlL3JlYWRtZS50eHQKQEAgLTAsMCArMSwxNSBAQAorT25lIGlycml0YXRpbmcgdGhpbmcgd2l0aCB0ZXh0IHByb2Nlc3NpbmcgaXMgdGhlIHRvdGFsIGFic2VuY2Ugb2Ygc29tZSB0eXBvZ3JhcGhpYyBlc3NlbnRpYWxzIG9uIHRoZSBrZXlib2FyZCAtLSAicmVhbCIgKHR5cG9ncmFwaGljKSBxdW90ZXMgYW5kIHRoZSBkYXNoLCB0eXBpY2FsbHkgbWlzcy10eXBlZCBhcyBpbmNoIG9yIHNlY29uZCBzaWduICgiKSBhbmQgdGhlIGh5cGhvbigtKS4KKworVGhpcyBwbHVnaW4gbGVuZHMgdGhlIGdvb2Qgb2xkIFdvcmQgYmVoYXZpb3VyIHRvIFhpbmhhLCBhcyAiLCcsIGFuZCAtIGdldCBjb252ZXJ0ZWQgdG8gdGhlaXIgcmVzcGVjdGl2ZSB0eXBvZ3JhcGhpYyBjb3JyZWN0IHJlbGF0aXZlcyB3aGlsZSB0eXBpbmcuCitJdCBhbHNvIHJlcGxhY2VzIC4uLiB3aXRoIHRoZSBlbGxpcHNpcyBzaWduICh3aGljaCBpcyB0aHJlZSBkb3RzIGNvbWJpbmVkIGluIG9uZSBnbHlwaCB0aGF0IGlzIGNvbnNpZGVyZWQgdHlwb2dyYXBoaWNhbGx5IGJldHRlcikuCisKKyBDb25maWd1cmF0aW9uICh0byBjaGFuZ2UgdGhlIHF1b3RlIHN0eWxlIGZyb20gZGVmYXVsdCBFbmdsaXNoKToKKyAgKiB0aHJvdWdoIGxhbmd1YWdlIGZpbGUgKHNlZSBsYW5nL2RlLmpzKQorICAqIHRocm91Z2ggYSBjb25maWcgdmFyaWFibGUgKGFuIGFycmF5IHRoYXQgaG9sZHMgZm91ciB2YWx1ZXM6IG9wZW5pbmcgc2luZ2xlIHF1b3RlLCBjbG9zaW5nIHNpbmdsZSBxdW90ZSwgb3BlbmluZyBkb3VibGUgcXVvdGUsIGNsb3NpbmcgZG91YmxlIHF1b3RlKQorICAKKyBBZGRpdGlvbmFsIGNvbmZpZyBvcHRpb246CisgICogZGlzYWJsZSBhdXRvbWF0aWMgcmVwbGFjZW1lbnQgYnkgZGVmYXVsdAorICAKKyBBZGRpdGlvbmFsIGZlYXR1cmVzOgorICAqIGNhbiBiZSBzd2l0Y2hlZCBvbi9vZmYKKyAgKiBjb252ZXJ0IGFsbCBxdW90ZXMvZGFzaGVzIGluIGEgZG9jdW1lbnQgdGhhdCBzdGlsbCBoYXMgdGhlIGJvcmluZyAgIi8tIHN0dWZmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdHlsaXN0L1N0eWxpc3QuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N0eWxpc3QvU3R5bGlzdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjBjMDMwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdHlsaXN0L1N0eWxpc3QuanMKQEAgLTAsMCArMSw3MTcgQEAKKy8qKgorICogQWRkIGFuIGVtcHR5IGNzc19zdHlsZSB0byBDb25maWcgb2JqZWN0J3MgcHJvdG90eXBlCisgKiAgdGhlIGZvcm1hdCBpcyB7ICcuY2xhc3NOYW1lJyA6ICdEZXNjcmlwdGlvbicgfQorICovCisKK1hpbmhhLkNvbmZpZy5wcm90b3R5cGUuY3NzX3N0eWxlID0geyB9OworCisvKioKKyAqIFRoaXMgbWV0aG9kIGxvYWRzIGFuIGV4dGVybmFsIHN0eWxlc2hlZXQgYW5kIHVzZXMgaXQgaW4gdGhlIHN0eWxpc3QKKyAqCisgKiBAcGFyYW0gc3RyaW5nIFVSTCB0byB0aGUgc3R5bGVzaGVldAorICogQHBhcmFtIGhhc2ggQWx0ZXJuYXRlIGRlc2NyaXB0aXZlIG5hbWVzIGZvciB5b3VyIGNsYXNzZXMgCisgKiAgICAgICAgICAgICAgeyAnLmZvb2NsYXNzJzogJ0ZvbyBEZXNjcmlwdGlvbicgfQorICogQHBhcmFtIGJvb2wgSWYgc2V0IHRydWUgdGhlbiBAaW1wb3J0IHJ1bGVzIGluIHRoZSBzdHlsZXNoZWV0IGFyZSBza2lwcGVkLAorICogICBvdGhlcndpc2UgdGhleSB3aWxsIGJlIGluY29ycG9yYXRlZCBpZiBwb3NzaWJsZS4KKyAqLworIAorWGluaGEuQ29uZmlnLnByb3RvdHlwZS5zdHlsaXN0TG9hZFN0eWxlc2hlZXQgPSBmdW5jdGlvbih1cmwsIGFsdG5hbWVzLCBza2lwX2ltcG9ydHMpCit7CisgIGlmKCFhbHRuYW1lcykgYWx0bmFtZXMgPSB7IH07CisgIHZhciBuZXdTdHlsZXMgPSBYaW5oYS5yaXBTdHlsZXNGcm9tQ1NTRmlsZSh1cmwsIHNraXBfaW1wb3J0cyk7CisgIGZvcih2YXIgaSBpbiBuZXdTdHlsZXMpCisgIHsKKyAgICBpZihhbHRuYW1lc1tpXSkKKyAgICB7CisgICAgICB0aGlzLmNzc19zdHlsZVtpXSA9IGFsdG5hbWVzW2ldOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgdGhpcy5jc3Nfc3R5bGVbaV0gPSBuZXdTdHlsZXNbaV07CisgICAgfQorICB9CisgIAorICBmb3IodmFyIHggPSAwOyB4IDwgdGhpcy5wYWdlU3R5bGVTaGVldHMubGVuZ3RoOyB4KyspCisgIHsKKyAgICBpZih0aGlzLnBhZ2VTdHlsZVNoZWV0c1t4XSA9PSB1cmwpIHJldHVybjsKKyAgfQorICB0aGlzLnBhZ2VTdHlsZVNoZWV0c1t0aGlzLnBhZ2VTdHlsZVNoZWV0cy5sZW5ndGhdID0gdXJsOworfTsKKworLyoqCisgKiBUaGlzIG1ldGhvZCB0YWtlcyByYXcgc3R5bGUgZGVmaW5pdGlvbnMgYW5kIHVzZXMgdGhlbSBpbiB0aGUgc3R5bGlzdAorICoKKyAqIEBwYXJhbSBzdHJpbmcgQ1NTCisgKgorICogQHBhcmFtIGhhc2ggQWx0ZXJuYXRlIGRlc2NyaXB0aXZlIG5hbWVzIGZvciB5b3VyIGNsYXNzZXMgCisgKiAgICAgICAgICAgICAgeyAnLmZvb2NsYXNzJzogJ0ZvbyBEZXNjcmlwdGlvbicgfQorICoKKyAqIEBwYXJhbSBib29sIElmIHNldCB0cnVlIHRoZW4gQGltcG9ydCBydWxlcyBpbiB0aGUgc3R5bGVzaGVldCBhcmUgc2tpcHBlZCwKKyAqICAgb3RoZXJ3aXNlIHRoZXkgd2lsbCBiZSBpbmNvcnBvcmF0ZWQgaWYgcG9zc2libGUuCisgKgorICogQHBhcmFtIHN0cmluZyBJZiBza2lwX2ltcG9ydHMgaXMgZmFsc2UsIHRoaXMgc3RyaW5nIHNob3VsZCBjb250YWluCisgKiAgIHRoZSAiVVJMIiBvZiB0aGUgc3R5bGVzaGVldCB0aGVzZSBzdHlsZXMgY2FtZSBmcm9tIChkb2Vzbid0IG1hdHRlcgorICogICBpZiBpdCBleGlzdHMgb3Igbm90KSwgaXQgaXMgdXNlZCB3aGVuIHJlc29sdmluZyByZWxhdGl2ZSBVUkxzIGV0Yy4gIAorICogICBJZiBub3QgcHJvdmlkZWQsIGl0IGRlZmF1bHRzIHRvIFhpbmhhLmNzcyBpbiB0aGUgWGluaGEgcm9vdC4KKyAqLworIAorWGluaGEuQ29uZmlnLnByb3RvdHlwZS5zdHlsaXN0TG9hZFN0eWxlcyA9IGZ1bmN0aW9uKHN0eWxlcywgYWx0bmFtZXMsIHNraXBfaW1wb3J0cywgaW1wb3J0c19yZWxhdGl2ZV90bykKK3sKKyAgaWYoIWFsdG5hbWVzKSBhbHRuYW1lcyA9IHsgfTsKKyAgdmFyIG5ld1N0eWxlcyA9IFhpbmhhLnJpcFN0eWxlc0Zyb21DU1NTdHJpbmcoc3R5bGVzLCBza2lwX2ltcG9ydHMpOworICBmb3IodmFyIGkgaW4gbmV3U3R5bGVzKQorICB7CisgICAgaWYoYWx0bmFtZXNbaV0pCisgICAgeworICAgICAgdGhpcy5jc3Nfc3R5bGVbaV0gPSBhbHRuYW1lc1tpXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHRoaXMuY3NzX3N0eWxlW2ldID0gbmV3U3R5bGVzW2ldOworICAgIH0KKyAgfQorICB0aGlzLnBhZ2VTdHlsZSArPSBzdHlsZXM7Cit9OworCisKKworLyoqCisgKiBGaWxsIHRoZSBzdHlsaXN0IHBhbmVsIHdpdGggc3R5bGVzIHRoYXQgbWF5IGJlIGFwcGxpZWQgdG8gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiAgU3R5bGVzCisgKiBhcmUgc3VwcGxpZWQgaW4gdGhlIGNzc19zdHlsZSBwcm9wZXJ0eSBvZiB0aGUgWGluaGEuQ29uZmlnIG9iamVjdCwgd2hpY2ggaXMgaW4gdGhlIGZvcm1hdAorICogeyAnLmNsYXNzTmFtZScgOiAnRGVzY3JpcHRpb24nIH0KKyAqIGNsYXNzZXMgdGhhdCBhcmUgZGVmaW5lZCBvbiBhIHNwZWNpZmljIHRhZyAoZWcgJ2EuZW1haWxfbGluaycpIGFyZSBvbmx5IHNob3duIGluIHRoZSBwYW5lbAorICogICAgd2hlbiBhbiBlbGVtZW50IG9mIHRoYXQgdHlwZSBpcyBzZWxlY3RlZC4KKyAqIGNsYXNzZXMgdGhhdCBhcmUgZGVmaW5lZCB3aXRoIHNlbGVjdG9ycy9wc3VlZG9jbGFzc2VzIChlZyAnYS5lbWFpbF9saW5rOmhvdmVyJykgYXJlIG5ldmVyCisgKiAgICBzaG93biAoaWYgeW91IGhhdmUgYW4gJ2EuZW1haWxfbGluaycgd2l0aG91dCB0aGUgcHNldWRvY2xhc3MgaXQgd2lsbCBiZSBzaG93biBvZiBjb3Vyc2UpCisgKiBtdWx0aXBsZSBjbGFzc2VzIChlZyAnYS5lbWFpbF9saW5rLnN0YWZmX21lbWJlcicpIGFyZSBzaG93biBhcyBhIHNpbmdsZSBjbGFzcywgYW5kIGFwcGxpZWQKKyAqICAgIHRvIHRoZSBlbGVtZW50IGFzIG11bHRpcGxlIGNsYXNzZXMgKGNsYXNzPSJlbWFpbF9saW5rIHN0YWZmX21lbWJlciIpCisgKiB5b3UgbWF5IGNsaWNrIGEgY2xhc3MgbmFtZSBpbiB0aGUgc3R5bGlzdCBwYW5lbCB0byBhZGQgaXQsIGFuZCBjbGljayBhZ2FpbiB0byByZW1vdmUgaXQKKyAqIHlvdSBtYXkgYWRkIG11bHRpcGxlIGNsYXNzZXMgdG8gYW55IGVsZW1lbnQKKyAqIHNwYW5zIHdpbGwgYmUgYWRkZWQgd2hlcmUgbm8gc2luZ2xlIF9hbmRfZW50aXJlXyBlbGVtZW50IGlzIHNlbGVjdGVkCisgKi8KK1hpbmhhLnByb3RvdHlwZS5fZmlsbFN0eWxpc3QgPSBmdW5jdGlvbigpCit7CisgIGlmKCF0aGlzLnBsdWdpbnMuU3R5bGlzdC5pbnN0YW5jZS5kaWFsb2cpIHJldHVybiBmYWxzZTsKKyAgdmFyIG1haW4gPSB0aGlzLnBsdWdpbnMuU3R5bGlzdC5pbnN0YW5jZS5kaWFsb2cubWFpbjsKKyAgbWFpbi5pbm5lckhUTUwgPSAnJzsKKworICB2YXIgbWF5X2FwcGx5ID0gdHJ1ZTsKKyAgdmFyIHNlbCAgICAgICA9IHRoaXMuX2dldFNlbGVjdGlvbigpOworCisgIC8vIFdoYXQgaXMgYXBwbGllZAorICAvLyB2YXIgYXBwbGllZCA9IHRoaXMuX2dldEFuY2VzdG9yc0NsYXNzTmFtZXModGhpcy5fZ2V0U2VsZWN0aW9uKCkpOworCisgIC8vIEdldCBhbiBhY3RpdmUgZWxlbWVudAorICB2YXIgYWN0aXZlX2VsZW0gPSB0aGlzLl9hY3RpdmVFbGVtZW50KHNlbCk7CisKKyAgZm9yKHZhciB4IGluIHRoaXMuY29uZmlnLmNzc19zdHlsZSkKKyAgeworICAgIHZhciB0YWcgICA9IG51bGw7CisgICAgdmFyIGNsYXNzTmFtZSA9IHgudHJpbSgpOworICAgIHZhciBhcHBsaWNhYmxlID0gdHJ1ZTsKKyAgICB2YXIgYXBwbHlfdG8gICA9IGFjdGl2ZV9lbGVtOworCisgICAgaWYoYXBwbGljYWJsZSAmJiAvW15hLXpBLVowLTlfLi1dLy50ZXN0KGNsYXNzTmFtZSkpCisgICAgeworICAgICAgYXBwbGljYWJsZSA9IGZhbHNlOyAvLyBPbmx5IGJhc2ljIGNsYXNzZXMgYXJlIGFjY2VwdGVkLCBubyBzZWxlY3RvcnMsIGV0Yy4uIHByZXN1bWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaWYgeW91IGhhdmUgYS5mb286dmlzaXRlZCB5b3UnbGwgYWxzbyBoYXZlIGEuZm9vCisgICAgICAvLyBhbGVydCgnY29tcGxleCcpOworICAgIH0KKworICAgIGlmKGNsYXNzTmFtZS5pbmRleE9mKCcuJykgPCAwKQorICAgIHsKKyAgICAgIC8vIE5vIGNsYXNzIG5hbWUsIGp1c3QgcmVkZWZpbmVzIGEgdGFnCisgICAgICBhcHBsaWNhYmxlID0gZmFsc2U7CisgICAgfQorCisgICAgaWYoYXBwbGljYWJsZSAmJiAoY2xhc3NOYW1lLmluZGV4T2YoJy4nKSA+IDApKQorICAgIHsKKyAgICAgIC8vIHJlcXVpcmVzIHNwZWNpZmljIGh0bWwgdGFnCisgICAgICB0YWcgPSBjbGFzc05hbWUuc3Vic3RyaW5nKDAsIGNsYXNzTmFtZS5pbmRleE9mKCcuJykpLnRvTG93ZXJDYXNlKCk7CisgICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUuc3Vic3RyaW5nKGNsYXNzTmFtZS5pbmRleE9mKCcuJyksIGNsYXNzTmFtZS5sZW5ndGgpOworCisgICAgICAvLyBUbyBhcHBseSB3ZSBtdXN0IGhhdmUgYW4gYW5jZXN0b3IgdGFnIHRoYXQgaXMgdGhlIHJpZ2h0IHR5cGUKKyAgICAgIGlmKGFjdGl2ZV9lbGVtICE9IG51bGwgJiYgYWN0aXZlX2VsZW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09IHRhZykKKyAgICAgIHsKKyAgICAgICAgYXBwbGljYWJsZSA9IHRydWU7CisgICAgICAgIGFwcGx5X3RvID0gYWN0aXZlX2VsZW07CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGlmKHRoaXMuX2dldEZpcnN0QW5jZXN0b3IodGhpcy5fZ2V0U2VsZWN0aW9uKCksIFt0YWddKSAhPSBudWxsKQorICAgICAgICB7CisgICAgICAgICAgYXBwbGljYWJsZSA9IHRydWU7CisgICAgICAgICAgYXBwbHlfdG8gPSB0aGlzLl9nZXRGaXJzdEFuY2VzdG9yKHRoaXMuX2dldFNlbGVjdGlvbigpLCBbdGFnXSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLy8gYWxlcnQgKHRoaXMuX2dldEZpcnN0QW5jZXN0b3IodGhpcy5fZ2V0U2VsZWN0aW9uKCksIHRhZykpOworICAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW4gYW5jZXN0b3IsIGJ1dCBpdCdzIGEgZGl2L3NwYW4vcC9oeCBzdGxlLCB3ZSBjYW4gbWFrZSBvbmUKKyAgICAgICAgICBpZigoIHRhZyA9PSAnZGl2JyB8fCB0YWcgPT0gJ3NwYW4nIHx8IHRhZyA9PSAncCcKKyAgICAgICAgICAgICAgfHwgKHRhZy5zdWJzdHIoMCwxKSA9PSAnaCcgJiYgdGFnLmxlbmd0aCA9PSAyICYmIHRhZyAhPSAnaHInKSkpCisgICAgICAgICAgeworICAgICAgICAgICAgaWYoIXRoaXMuX3NlbGVjdGlvbkVtcHR5KHRoaXMuX2dldFNlbGVjdGlvbigpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYXBwbGljYWJsZSA9IHRydWU7CisgICAgICAgICAgICAgIGFwcGx5X3RvID0gJ25ldyc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZ2V0IGEgcGFyYWdyYXBoIG9yIGhlYWRlciB0aGF0IGNhbiBiZSBjb252ZXJ0ZWQKKyAgICAgICAgICAgICAgYXBwbHlfdG8gPSB0aGlzLl9nZXRGaXJzdEFuY2VzdG9yKHNlbCwgWydwJywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2g3J10pOworICAgICAgICAgICAgICBpZihhcHBseV90byAhPSBudWxsKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXBwbGljYWJsZSA9IHRydWU7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXBwbGljYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBhcHBsaWNhYmxlID0gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaWYoYXBwbGljYWJsZSkKKyAgICB7CisgICAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IC4KKyAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5zdWJzdHJpbmcoY2xhc3NOYW1lLmluZGV4T2YoJy4nKSwgY2xhc3NOYW1lLmxlbmd0aCk7CisKKyAgICAgIC8vIFJlcGxhY2UgYW55IGZ1dGhlciBvbmVzIHdpdGggc3BhY2VzIChmb3IgbXVsdGlwbGUgY2xhc3MgZGVmaW5pdGlvbnMpCisgICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUucmVwbGFjZSgnLicsICcgJyk7CisKKyAgICAgIGlmKGFwcGx5X3RvID09IG51bGwpCisgICAgICB7CisgICAgICAgIGlmKHRoaXMuX3NlbGVjdGlvbkVtcHR5KHRoaXMuX2dldFNlbGVjdGlvbigpKSkKKyAgICAgICAgeworICAgICAgICAgIC8vIEdldCB0aGUgcHJldmlvdXMgZWxlbWVudCBhbmQgYXBwbHkgdG8gdGhhdAorICAgICAgICAgIGFwcGx5X3RvID0gdGhpcy5fZ2V0Rmlyc3RBbmNlc3Rvcih0aGlzLl9nZXRTZWxlY3Rpb24oKSwgbnVsbCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgYXBwbHlfdG8gPSAnbmV3JzsKKyAgICAgICAgICB0YWcgICAgICA9ICdzcGFuJzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHZhciBhcHBsaWVkICAgID0gKHRoaXMuX2FuY2VzdG9yc1dpdGhDbGFzc2VzKHNlbCwgdGFnLCBjbGFzc05hbWUpLmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2UpOworICAgIHZhciBhcHBsaWVkX3RvID0gdGhpcy5fYW5jZXN0b3JzV2l0aENsYXNzZXMoc2VsLCB0YWcsIGNsYXNzTmFtZSk7CisKKyAgICBpZihhcHBsaWNhYmxlKQorICAgIHsKKyAgICAgIHZhciBhbmNoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOworICAgICAgYW5jaC5vbmZvY3VzID0gZnVuY3Rpb24gKCkgeyB0aGlzLmJsdXIoKSB9IC8vIHByZXZlbnQgZG90dGVkIGxpbmUgYXJvdW5kIGxpbmsgdGhhdCBjYXVzZXMgaG9yaXpvbnRhbCBzY3JvbGxiYXIKKyAgICAgIGFuY2guX3N0eWxpc3RfY2xhc3NOYW1lID0gY2xhc3NOYW1lLnRyaW0oKTsKKyAgICAgIGFuY2guX3N0eWxpc3RfYXBwbGllZCAgID0gYXBwbGllZDsKKyAgICAgIGFuY2guX3N0eWxpc3RfYXBwbGllZFRvID0gYXBwbGllZF90bzsKKyAgICAgIGFuY2guX3N0eWxpc3RfYXBwbHlUbyA9IGFwcGx5X3RvOworICAgICAgYW5jaC5fc3R5bGlzdF9hcHBseVRhZyA9IHRhZzsKKworICAgICAgYW5jaC5pbm5lckhUTUwgPSB0aGlzLmNvbmZpZy5jc3Nfc3R5bGVbeF07CisgICAgICBhbmNoLmhyZWYgPSAnamF2YXNjcmlwdDp2b2lkKDApJzsKKyAgICAgIHZhciBlZGl0b3IgPSB0aGlzOworICAgICAgYW5jaC5vbmNsaWNrID0gZnVuY3Rpb24oKQorICAgICAgeworICAgICAgICBpZih0aGlzLl9zdHlsaXN0X2FwcGxpZWQgPT0gdHJ1ZSkKKyAgICAgICAgeworICAgICAgICAgIGVkaXRvci5fc3R5bGlzdFJlbW92ZUNsYXNzZXModGhpcy5fc3R5bGlzdF9jbGFzc05hbWUsIHRoaXMuX3N0eWxpc3RfYXBwbGllZFRvKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBlZGl0b3IuX3N0eWxpc3RBZGRDbGFzc2VzKHRoaXMuX3N0eWxpc3RfYXBwbHlUbywgdGhpcy5fc3R5bGlzdF9hcHBseVRhZywgdGhpcy5fc3R5bGlzdF9jbGFzc05hbWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKworICAgICAgYW5jaC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKKyAgICAgIGFuY2guc3R5bGUucGFkZGluZ0xlZnQgPSAnM3B4JzsKKyAgICAgIGFuY2guc3R5bGUucGFkZGluZ1RvcCA9ICcxcHgnOworICAgICAgYW5jaC5zdHlsZS5wYWRkaW5nQm90dG9tID0gJzFweCc7CisgICAgICBhbmNoLnN0eWxlLnRleHREZWNvcmF0aW9uID0gJ25vbmUnOworCisgICAgICBpZihhcHBsaWVkKQorICAgICAgeworICAgICAgICBhbmNoLnN0eWxlLmJhY2tncm91bmQgPSAnSGlnaGxpZ2h0JzsKKyAgICAgICAgYW5jaC5zdHlsZS5jb2xvciA9ICdIaWdobGlnaHRUZXh0JzsKKyAgICAgIH0KKyAgICAgIGFuY2guc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOworICAgICAgbWFpbi5hcHBlbmRDaGlsZChhbmNoKTsKKyAgICB9CisgIH0KKworICBpZihtYWluLmNoaWxkTm9kZXMubGVuZ3RoKQorICB7CisgICAgdGhpcy5wbHVnaW5zLlN0eWxpc3QuaW5zdGFuY2UuZGlhbG9nLnNob3coKTsKKyAgfQorfTsKKworCisvKioKKyAqIEFkZCB0aGUgZ2l2ZW4gY2xhc3NlcyAoc3BhY2Ugc2VwZXJhdGVkIGxpc3QpIHRvIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZWxlbWVudAorICogKHdpbGwgYWRkIGEgc3BhbiBpZiBub25lIHNlbGVjdGVkKQorICovCitYaW5oYS5wcm90b3R5cGUuX3N0eWxpc3RBZGRDbGFzc2VzID0gZnVuY3Rpb24oZWwsIHRhZywgY2xhc3NlcykKKyAgeworICAgIGlmKGVsID09ICduZXcnKQorICAgIHsKKyAgICAgIHRoaXMuaW5zZXJ0SFRNTCgnPCcgKyB0YWcgKyAnIGNsYXNzPSInICsgY2xhc3NlcyArICciPicgKyB0aGlzLmdldFNlbGVjdGVkSFRNTCgpICsgJzwvJyArIHRhZyArICc+Jyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBpZih0YWcgIT0gbnVsbCAmJiBlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT0gdGFnKQorICAgICAgeworICAgICAgICAvLyBIYXZlIHRvIGNoYW5nZSB0aGUgdGFnIQorICAgICAgICB2YXIgbmV3X2VsID0gdGhpcy5zd2l0Y2hFbGVtZW50VGFnKGVsLCB0YWcpOworCisgICAgICAgIGlmKHR5cGVvZiBlbC5fc3R5bGlzdF91c2VkVG9CZSAhPSAndW5kZWZpbmVkJykKKyAgICAgICAgeworICAgICAgICAgIG5ld19lbC5fc3R5bGlzdF91c2VkVG9CZSA9IGVsLl9zdHlsaXN0X3VzZWRUb0JlOworICAgICAgICAgIG5ld19lbC5fc3R5bGlzdF91c2VkVG9CZVtuZXdfZWwuX3N0eWxpc3RfdXNlZFRvQmUubGVuZ3RoXSA9IHsndGFnTmFtZScgOiBlbC50YWdOYW1lLCAnY2xhc3NOYW1lJyA6IGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKX07CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgbmV3X2VsLl9zdHlsaXN0X3VzZWRUb0JlID0gW3sndGFnTmFtZScgOiBlbC50YWdOYW1lLCAnY2xhc3NOYW1lJyA6IGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKX1dOworICAgICAgICB9CisKKyAgICAgICAgWGluaGEuYWRkQ2xhc3NlcyhuZXdfZWwsIGNsYXNzZXMpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBYaW5oYS5fYWRkQ2xhc3NlcyhlbCwgY2xhc3Nlcyk7CisgICAgICB9CisgICAgfQorICAgIHRoaXMuZm9jdXNFZGl0b3IoKTsKKyAgICB0aGlzLnVwZGF0ZVRvb2xiYXIoKTsKKyAgfTsKKworLyoqCisgKiBSZW1vdmUgdGhlIGdpdmVuIGNsYXNzZXMgKHNwYWNlIHNlcGVyYXRlZCBsaXN0KSBmcm9tIHRoZSBnaXZlbiBlbGVtZW50cyAoYXJyYXkgb2YgZWxlbWVudHMpCisgKi8KK1hpbmhhLnByb3RvdHlwZS5fc3R5bGlzdFJlbW92ZUNsYXNzZXMgPSBmdW5jdGlvbihjbGFzc2VzLCBmcm9tKQorICB7CisgICAgZm9yKHZhciB4ID0gMDsgeCA8IGZyb20ubGVuZ3RoOyB4KyspCisgICAgeworICAgICAgdGhpcy5fc3R5bGlzdFJlbW92ZUNsYXNzZXNGdWxsKGZyb21beF0sIGNsYXNzZXMpOworICAgIH0KKyAgICB0aGlzLmZvY3VzRWRpdG9yKCk7CisgICAgdGhpcy51cGRhdGVUb29sYmFyKCk7CisgIH07CisKK1hpbmhhLnByb3RvdHlwZS5fc3R5bGlzdFJlbW92ZUNsYXNzZXNGdWxsID0gZnVuY3Rpb24oZWwsIGNsYXNzZXMpCit7CisgIGlmKGVsICE9IG51bGwpCisgIHsKKyAgICB2YXIgdGhpZXJzID0gZWwuY2xhc3NOYW1lLnRyaW0oKS5zcGxpdCgnICcpOworICAgIHZhciBuZXdfdGhpZXJzID0gWyBdOworICAgIHZhciBvdXJzICAgPSBjbGFzc2VzLnNwbGl0KCcgJyk7CisgICAgZm9yKHZhciB4ID0gMDsgeCA8IHRoaWVycy5sZW5ndGg7IHgrKykKKyAgICB7CisgICAgICB2YXIgZXhpc3RzID0gZmFsc2U7CisgICAgICBmb3IodmFyIGkgPSAwOyBleGlzdHMgPT0gZmFsc2UgJiYgaSA8IG91cnMubGVuZ3RoOyBpKyspCisgICAgICB7CisgICAgICAgIGlmKG91cnNbaV0gPT0gdGhpZXJzW3hdKQorICAgICAgICB7CisgICAgICAgICAgZXhpc3RzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYoZXhpc3RzID09IGZhbHNlKQorICAgICAgeworICAgICAgICBuZXdfdGhpZXJzW25ld190aGllcnMubGVuZ3RoXSA9IHRoaWVyc1t4XTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZihuZXdfdGhpZXJzLmxlbmd0aCA9PSAwICYmIGVsLl9zdHlsaXN0X3VzZWRUb0JlICYmIGVsLl9zdHlsaXN0X3VzZWRUb0JlLmxlbmd0aCA+IDAgJiYgZWwuX3N0eWxpc3RfdXNlZFRvQmVbZWwuX3N0eWxpc3RfdXNlZFRvQmUubGVuZ3RoIC0gMV0uY2xhc3NOYW1lICE9IG51bGwpCisgICAgeworICAgICAgLy8gUmV2ZXJ0IGJhY2sgdG8gd2hhdCB3ZSB3ZXJlIElGIHRoZSBjbGFzc2VzIGFyZSBpZGVudGljYWwKKyAgICAgIHZhciBsYXN0X2VsID0gZWwuX3N0eWxpc3RfdXNlZFRvQmVbZWwuX3N0eWxpc3RfdXNlZFRvQmUubGVuZ3RoIC0gMV07CisgICAgICB2YXIgbGFzdF9jbGFzc2VzID0gWGluaGEuYXJyYXlGaWx0ZXIobGFzdF9lbC5jbGFzc05hbWUudHJpbSgpLnNwbGl0KCcgJyksIGZ1bmN0aW9uKGMpIHsgaWYgKGMgPT0gbnVsbCB8fCBjLnRyaW0oKSA9PSAnJykgeyByZXR1cm4gZmFsc2U7fSByZXR1cm4gdHJ1ZTsgfSk7CisKKyAgICAgIGlmKAorICAgICAgICAobmV3X3RoaWVycy5sZW5ndGggPT0gMCkKKyAgICAgICAgfHwKKyAgICAgICAgKAorICAgICAgICBYaW5oYS5hcnJheUNvbnRhaW5zQXJyYXkobmV3X3RoaWVycywgbGFzdF9jbGFzc2VzKQorICAgICAgICAmJiBYaW5oYS5hcnJheUNvbnRhaW5zQXJyYXkobGFzdF9jbGFzc2VzLCBuZXdfdGhpZXJzKQorICAgICAgICApCisgICAgICApCisgICAgICB7CisgICAgICAgIGVsID0gdGhpcy5zd2l0Y2hFbGVtZW50VGFnKGVsLCBsYXN0X2VsLnRhZ05hbWUpOworICAgICAgICBuZXdfdGhpZXJzID0gbGFzdF9jbGFzc2VzOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvLyBXZSBjYW4ndCByZWx5IG9uIHRoZSByZW1lbWJlcmVkIHRhZ3MgYW55IG1vcmUKKyAgICAgICAgZWwuX3N0eWxpc3RfdXNlZFRvQmUgPSBbIF07CisgICAgICB9CisgICAgfQorCisgICAgaWYoICAgICBuZXdfdGhpZXJzLmxlbmd0aCA+IDAKKyAgICAgICAgfHwgIGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPSAnc3BhbicKKyAgICAgICAgfHwgKGVsLmlkICYmIGVsLmlkICE9ICcnKQorICAgICAgKQorICAgIHsKKyAgICAgIGVsLmNsYXNzTmFtZSA9IG5ld190aGllcnMuam9pbignICcpLnRyaW0oKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8vIE11c3QgYmUgYSBzcGFuIHdpdGggbm8gY2xhc3NlcyBhbmQgbm8gaWQsIHNvIHdlIGNhbiBzcGxpY2UgaXQgb3V0CisgICAgICB2YXIgcHJudCA9IGVsLnBhcmVudE5vZGU7CisgICAgICB2YXIgdG1wOworICAgICAgd2hpbGUgKGVsLmhhc0NoaWxkTm9kZXMoKSkKKyAgICAgIHsKKyAgICAgICAgaWYgKGVsLmZpcnN0Q2hpbGQubm9kZVR5cGUgPT0gMSkKKyAgICAgICAgeworICAgICAgICAgIC8vIGlmIGVsLmZpcnN0Q2hpbGQgaXMgYW4gZWxlbWVudCwgd2UndmUgZ290IHRvIHJlY3Vyc2UgdG8gbWFrZSBzdXJlIGNsYXNzZXMgYXJlCisgICAgICAgICAgLy8gcmVtb3ZlZCBmcm9tIGl0IGFuZCBhbmQgYW55IG9mIGl0cyBjaGlsZHJlbi4KKyAgICAgICAgICB0aGlzLl9zdHlsaXN0UmVtb3ZlQ2xhc3Nlc0Z1bGwoZWwuZmlyc3RDaGlsZCwgY2xhc3Nlcyk7CisgICAgICAgIH0KKyAgICAgICAgdG1wID0gZWwucmVtb3ZlQ2hpbGQoZWwuZmlyc3RDaGlsZCk7CisgICAgICAgIHBybnQuaW5zZXJ0QmVmb3JlKHRtcCwgZWwpOworICAgICAgfQorICAgICAgcHJudC5yZW1vdmVDaGlsZChlbCk7CisgICAgfQorICB9Cit9OworCisvKioKKyAqIENoYW5nZSB0aGUgdGFnIG9mIGFuIGVsZW1lbnQKKyAqLworWGluaGEucHJvdG90eXBlLnN3aXRjaEVsZW1lbnRUYWcgPSBmdW5jdGlvbihlbCwgdGFnKQoreworICB2YXIgcHJudCA9IGVsLnBhcmVudE5vZGU7CisgIHZhciBuZXdfZWwgPSB0aGlzLl9kb2MuY3JlYXRlRWxlbWVudCh0YWcpOworCisgIGlmKFhpbmhhLmlzX2llIHx8IGVsLmhhc0F0dHJpYnV0ZSgnaWQnKSkgICAgbmV3X2VsLnNldEF0dHJpYnV0ZSgnaWQnLCBlbC5nZXRBdHRyaWJ1dGUoJ2lkJykpOworICBpZihYaW5oYS5pc19pZSB8fCBlbC5oYXNBdHRyaWJ1dGUoJ3N0eWxlJykpIG5ld19lbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgZWwuZ2V0QXR0cmlidXRlKCdzdHlsZScpKTsKKworICB2YXIgY2hpbGRzID0gZWwuY2hpbGROb2RlczsKKyAgZm9yKHZhciB4ID0gMDsgeCA8IGNoaWxkcy5sZW5ndGg7IHgrKykKKyAgeworICAgIG5ld19lbC5hcHBlbmRDaGlsZChjaGlsZHNbeF0uY2xvbmVOb2RlKHRydWUpKTsKKyAgfQorCisgIHBybnQuaW5zZXJ0QmVmb3JlKG5ld19lbCwgZWwpOworICBuZXdfZWwuX3N0eWxpc3RfdXNlZFRvQmUgPSBbZWwudGFnTmFtZV07CisgIHBybnQucmVtb3ZlQ2hpbGQoZWwpOworICB0aGlzLnNlbGVjdE5vZGVDb250ZW50cyhuZXdfZWwpOworICByZXR1cm4gbmV3X2VsOworfTsKKworWGluaGEucHJvdG90eXBlLl9nZXRBbmNlc3RvcnNDbGFzc05hbWVzID0gZnVuY3Rpb24oc2VsKQoreworICAvLyBTY2FuIHVwd2FyZHMgdG8gZmluZCBhIGJsb2NrIGxldmVsIGVsZW1lbnQgdGhhdCB3ZSBjYW4gY2hhbmdlIG9yIGFwcGx5IHRvCisgIHZhciBwcm50ID0gdGhpcy5fYWN0aXZlRWxlbWVudChzZWwpOworICBpZihwcm50ID09IG51bGwpCisgIHsKKyAgICBwcm50ID0gKFhpbmhhLmlzX2llID8gdGhpcy5fY3JlYXRlUmFuZ2Uoc2VsKS5wYXJlbnRFbGVtZW50KCkgOiB0aGlzLl9jcmVhdGVSYW5nZShzZWwpLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKTsKKyAgfQorCisgIHZhciBjbGFzc05hbWVzID0gWyBdOworICB3aGlsZShwcm50KQorICB7CisgICAgaWYocHJudC5ub2RlVHlwZSA9PSAxKQorICAgIHsKKyAgICAgIHZhciBjbGFzc2VzID0gcHJudC5jbGFzc05hbWUudHJpbSgpLnNwbGl0KCcgJyk7CisgICAgICBmb3IodmFyIHggPSAwOyB4IDwgY2xhc3Nlcy5sZW5ndGg7IHgrKykKKyAgICAgIHsKKyAgICAgICAgY2xhc3NOYW1lc1tjbGFzc05hbWVzLmxlbmd0aF0gPSBjbGFzc2VzW3hdOworICAgICAgfQorCisgICAgICBpZihwcm50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnYm9keScpIGJyZWFrOworICAgICAgaWYocHJudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ3RhYmxlJyAgKSBicmVhazsKKyAgICB9CisgICAgICBwcm50ID0gcHJudC5wYXJlbnROb2RlOworICB9CisKKyAgcmV0dXJuIGNsYXNzTmFtZXM7Cit9OworCitYaW5oYS5wcm90b3R5cGUuX2FuY2VzdG9yc1dpdGhDbGFzc2VzID0gZnVuY3Rpb24oc2VsLCB0YWcsIGNsYXNzZXMpCit7CisgIHZhciBhbmNlc3RvcnMgPSBbIF07CisgIHZhciBwcm50ID0gdGhpcy5fYWN0aXZlRWxlbWVudChzZWwpOworICBpZihwcm50ID09IG51bGwpCisgIHsKKyAgICB0cnkKKyAgICB7CisgICAgICBwcm50ID0gKFhpbmhhLmlzX2llID8gdGhpcy5fY3JlYXRlUmFuZ2Uoc2VsKS5wYXJlbnRFbGVtZW50KCkgOiB0aGlzLl9jcmVhdGVSYW5nZShzZWwpLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKTsKKyAgICB9CisgICAgY2F0Y2goZSkKKyAgICB7CisgICAgICByZXR1cm4gYW5jZXN0b3JzOworICAgIH0KKyAgfQorICB2YXIgc2VhcmNoX2NsYXNzZXMgPSBjbGFzc2VzLnRyaW0oKS5zcGxpdCgnICcpOworCisgIHdoaWxlKHBybnQpCisgIHsKKyAgICBpZihwcm50Lm5vZGVUeXBlID09IDEgJiYgcHJudC5jbGFzc05hbWUpCisgICAgeworICAgICAgaWYodGFnID09IG51bGwgfHwgcHJudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gdGFnKQorICAgICAgeworICAgICAgICB2YXIgY2xhc3NlcyA9IHBybnQuY2xhc3NOYW1lLnRyaW0oKS5zcGxpdCgnICcpOworICAgICAgICB2YXIgZm91bmRfYWxsID0gdHJ1ZTsKKyAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHNlYXJjaF9jbGFzc2VzLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgdmFyIGZvdW5kX2NsYXNzID0gZmFsc2U7CisgICAgICAgICAgZm9yKHZhciB4ID0gMDsgeCA8IGNsYXNzZXMubGVuZ3RoOyB4KyspCisgICAgICAgICAgeworICAgICAgICAgICAgaWYoc2VhcmNoX2NsYXNzZXNbaV0gPT0gY2xhc3Nlc1t4XSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZm91bmRfY2xhc3MgPSB0cnVlOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZighZm91bmRfY2xhc3MpCisgICAgICAgICAgeworICAgICAgICAgICAgZm91bmRfYWxsID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZihmb3VuZF9hbGwpIGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoXSA9IHBybnQ7CisgICAgICB9CisgICAgICBpZihwcm50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnYm9keScpICAgIGJyZWFrOworICAgICAgaWYocHJudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ3RhYmxlJyAgKSBicmVhazsKKyAgICB9CisgICAgcHJudCA9IHBybnQucGFyZW50Tm9kZTsKKyAgfQorCisgIHJldHVybiBhbmNlc3RvcnM7Cit9OworCisKK1hpbmhhLnJpcFN0eWxlc0Zyb21DU1NGaWxlID0gZnVuY3Rpb24oVVJMLCBza2lwX2ltcG9ydHMpCit7CisgIHZhciBjc3MgPSBYaW5oYS5fZ2V0dXJsY29udGVudChVUkwpOworIAorICByZXR1cm4gWGluaGEucmlwU3R5bGVzRnJvbUNTU1N0cmluZyhjc3MsIHNraXBfaW1wb3J0cywgVVJMKTsKK307CisKK1hpbmhhLnJpcFN0eWxlc0Zyb21DU1NTdHJpbmcgPSBmdW5jdGlvbihjc3MsIHNraXBfaW1wb3J0cywgaW1wb3J0c19yZWxhdGl2ZV90bykKK3sKKyAgaWYoIXNraXBfaW1wb3J0cykKKyAgeyAgICAKKyAgICBpZighaW1wb3J0c19yZWxhdGl2ZV90bykgCisgICAgeworICAgICAgaW1wb3J0c19yZWxhdGl2ZV90byA9IF9lZGl0b3JfdXJsICsgJ1hpbmhhLmNzcycKKyAgICB9CisgICAgCisgICAgdmFyIHNlZW4gPSB7IH07CisgICAgCisgICAgZnVuY3Rpb24gcmVzb2x2ZV9pbXBvcnRzKGNzcywgdXJsKQorICAgIHsKKyAgICAgIHNlZW5bdXJsXSA9IHRydWU7IC8vIHByb3RlY3RzIGFnYWluc3QgaW5maW5pdGUgcmVjdXJzaW9uCisgICAgICAKKyAgICAgIHZhciBSRV9hdGltcG9ydCA9ICdAaW1wb3J0XFxzKih1cmxcXCgpP1siXCddKC4qKVsiXCddLionOworICAgICAgdmFyIGltcG9ydHMgPSBjc3MubWF0Y2gobmV3IFJlZ0V4cChSRV9hdGltcG9ydCwnaWcnKSk7CisgICAgICB2YXIgbSwgZmlsZSwgcmUgPSBuZXcgUmVnRXhwKFJFX2F0aW1wb3J0LCdpJyk7CisKKyAgICAgIGlmIChpbXBvcnRzKQorICAgICAgeworICAgICAgICB2YXIgcGF0aCA9IHVybC5yZXBsYWNlKC9cPy4qJC8sJycpLnNwbGl0KCIvIik7CisgICAgICAgIHBhdGgucG9wKCk7CisgICAgICAgIHBhdGggPSBwYXRoLmpvaW4oJy8nKTsKKyAgICAgICAgZm9yICh2YXIgaT0wO2k8aW1wb3J0cy5sZW5ndGg7aSsrKQorICAgICAgICB7CisgICAgICAgICAgbSA9IGltcG9ydHNbaV0ubWF0Y2gocmUpOworICAgICAgICAgIGZpbGUgPSBtWzJdOworICAgICAgICAgIGlmICghZmlsZS5tYXRjaCgvXihbXjpdK1w6KT9cLy8pKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZpbGUgPSBYaW5oYS5fcmVzb2x2ZVJlbGF0aXZlVXJsKHBhdGgsZmlsZSk7CisgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICBpZihzZWVuW2ZpbGVdKSBjb250aW51ZTsKKyAgICAgICAgICAKKyAgICAgICAgICBjc3MgKz0gcmVzb2x2ZV9pbXBvcnRzKFhpbmhhLl9nZXR1cmxjb250ZW50KGZpbGUpLCBmaWxlKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgCisgICAgICByZXR1cm4gY3NzOworICAgIH0KKyAgICAKKyAgICBjc3MgPSByZXNvbHZlX2ltcG9ydHMoY3NzLCBpbXBvcnRzX3JlbGF0aXZlX3RvKTsKKyAgfQorCisgIC8vIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIHNlbGVjdG9ycywgdGhlIHJ1bGVzIGFyZSBub3QgaW1wb3J0YW50CisgIC8vICBzbyB3ZSdsbCBkcm9wIG91dCBhbGwgY29tZW50cyBhbmQgcnVsZXMKKyAgdmFyIFJFX2NvbW1lbnQgPSAvXC9cKigufFxyfFxuKSo/XCpcLy9nOworICB2YXIgUkVfcnVsZSAgICA9IC9ceygufFxyfFxuKSo/XH0vZzsKKyAgdmFyIFJFX3NwZWNpYWwgPSAvXEBbYS16QS1aXStbXjtdKjsvZzsKKworICBjc3MgPSBjc3MucmVwbGFjZShSRV9jb21tZW50LCAnJyk7CisgIGNzcyA9IGNzcy5yZXBsYWNlKFJFX3NwZWNpYWwsICcsJyk7CisgIGNzcyA9IGNzcy5yZXBsYWNlKFJFX3J1bGUsICcsJyk7CisKKyAgLy8gQW5kIHNwbGl0IG9uIGNvbW1hcworICBjc3MgPSBjc3Muc3BsaXQoJywnKTsKKworICAvLyBBbmQgYWRkIHRob3NlIGludG8gb3VyIHN0cnVjdHVyZQorICB2YXIgc2VsZWN0b3JzID0geyB9OworICBmb3IodmFyIHggPSAwOyB4IDwgY3NzLmxlbmd0aDsgeCsrKQorICB7CisgICAgaWYoY3NzW3hdLnRyaW0oKSkKKyAgICB7CisgICAgICBzZWxlY3RvcnNbY3NzW3hdLnRyaW0oKV0gPSBjc3NbeF0udHJpbSgpOworICAgIH0KKyAgfQorCisKKyAgcmV0dXJuIHNlbGVjdG9yczsKK307CisKKy8vIE1ha2Ugb3VyIHJpZ2h0IHNpZGUgcGFuZWwgYW5kIGluc2VydCBhcHByb3ByaWF0bHkKK2Z1bmN0aW9uIFN0eWxpc3QoZWRpdG9yLCBhcmdzKQoreworICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKKyAKKyAgdmFyIHN0eWxpc3QgPSB0aGlzOworCit9CisKK1N0eWxpc3QuX3BsdWdpbkluZm8gPQoreworICBuYW1lICAgICA6ICJTdHlsaXN0IiwKKyAgdmVyc2lvbiAgOiAiMS4wIiwKKyAgZGV2ZWxvcGVyOiAiSmFtZXMgU2xlZW1hbiIsCisgIGRldmVsb3Blcl91cmw6ICJodHRwOi8vd3d3LmdvZ28uY28ubnovIiwKKyAgY19vd25lciAgICAgIDogIkdvZ28gSW50ZXJuZXQgU2VydmljZXMiLAorICBsaWNlbnNlICAgICAgOiAiSFRNTEFyZWEiLAorICBzcG9uc29yICAgICAgOiAiR29nbyBJbnRlcm5ldCBTZXJ2aWNlcyIsCisgIHNwb25zb3JfdXJsICA6ICJodHRwOi8vd3d3LmdvZ28uY28ubnovIgorfTsKKworU3R5bGlzdC5wcm90b3R5cGUub25HZW5lcmF0ZU9uY2UgPSBmdW5jdGlvbigpCit7CisgIHZhciBjZmcgPSB0aGlzLmVkaXRvci5jb25maWc7CisgIGlmKHR5cGVvZiBjZmcuY3NzX3N0eWxlICE9ICd1bmRlZmluZWQnICYmIFhpbmhhLm9iamVjdFByb3BlcnRpZXMoY2ZnLmNzc19zdHlsZSkubGVuZ3RoICE9IDApCisgIHsKKyAgICB0aGlzLl9wcmVwYXJlRGlhbG9nKCk7CisgIH0KKworfTsKK1N0eWxpc3QucHJvdG90eXBlLl9wcmVwYXJlRGlhbG9nID0gZnVuY3Rpb24oKQoreworICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisgIHZhciBzdHlsaXN0ID0gdGhpczsKKworICB2YXIgaHRtbCA9ICc8aDE+PGwxMG4+U3R5bGVzPC9sMTBuPjwvaDE+JzsKKyAgCisgIHRoaXMuZGlhbG9nID0gbmV3IFhpbmhhLkRpYWxvZyhlZGl0b3IsIGh0bWwsICdTdHlsaXN0Jyx7d2lkdGg6MjAwfSx7bW9kYWw6ZmFsc2UsY2xvc2FibGU6ZmFsc2V9KTsKKwlYaW5oYS5fYWRkQ2xhc3MoIHRoaXMuZGlhbG9nLnJvb3RFbGVtLCAnU3R5bGlzdCcgKTsKKwl0aGlzLmRpYWxvZy5hdHRhY2hUb1BhbmVsKCdyaWdodCcpOworICAvLyB0aGlzLmRpYWxvZy5zaG93KCk7CisgIAorCXZhciBkaWFsb2cgPSB0aGlzLmRpYWxvZzsKKwl2YXIgbWFpbiA9IHRoaXMuZGlhbG9nLm1haW47CisJdmFyIGNhcHRpb24gPSB0aGlzLmRpYWxvZy5jYXB0aW9uQmFyOworCQorICBtYWluLnN0eWxlLm92ZXJmbG93ID0gImF1dG8iOworICBtYWluLnN0eWxlLmhlaWdodCA9IHRoaXMuZWRpdG9yLl9mcmFtZXdvcmsuZWRfY2VsbC5vZmZzZXRIZWlnaHQgLSBjYXB0aW9uLm9mZnNldEhlaWdodCArICdweCc7CisKKyAgZWRpdG9yLm5vdGlmeU9uKCdtb2RlY2hhbmdlJywKKyAgZnVuY3Rpb24oZSxhcmdzKQorICB7CisgICAgaWYgKCFkaWFsb2cuYXR0YWNoZWQpCisgICAgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzd2l0Y2goYXJncy5tb2RlKQorICAgIHsKKyAgICAgIGNhc2UgJ3RleHQnOgorICAgICAgeworICAgICAgICBkaWFsb2cuaGlkZSgpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgJ3d5c2l3eWcnOgorICAgICAgeworICAgICAgICBkaWFsb2cuc2hvdygpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgKTsKKyAgZWRpdG9yLm5vdGlmeU9uKCdwYW5lbF9jaGFuZ2UnLAorICBmdW5jdGlvbihlLGFyZ3MpCisgIHsKKyAgICBpZiAoIWRpYWxvZy5hdHRhY2hlZCkKKyAgICB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHN3aXRjaCAoYXJncy5hY3Rpb24pCisgICAgeworICAgICAgY2FzZSAnc2hvdyc6CisgICAgICB2YXIgbmV3SGVpZ2h0ID0gbWFpbi5vZmZzZXRIZWlnaHQgLSBhcmdzLnBhbmVsLm9mZnNldEhlaWdodDsKKyAgICAgIG1haW4uc3R5bGUuaGVpZ2h0ID0gKChuZXdIZWlnaHQgPiAwKSA/ICBtYWluLm9mZnNldEhlaWdodCAtIGFyZ3MucGFuZWwub2Zmc2V0SGVpZ2h0IDogMCkgKyAncHgnOworICAgICAgZGlhbG9nLnJvb3RFbGVtLnN0eWxlLmhlaWdodCA9IGNhcHRpb24ub2Zmc2V0SGVpZ2h0ICsgInB4IjsKKyAgICAgIGVkaXRvci5zaXplRWRpdG9yKCk7CisgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2hpZGUnOgorICAgICAgc3R5bGlzdC5yZXNpemUoKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICApOworICBlZGl0b3Iubm90aWZ5T24oJ2JlZm9yZV9yZXNpemUnLAorICBmdW5jdGlvbigpCisgIHsKKyAgICBpZiAoIWRpYWxvZy5hdHRhY2hlZCkKKyAgICB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGRpYWxvZy5yb290RWxlbS5zdHlsZS5oZWlnaHQgPSBjYXB0aW9uLm9mZnNldEhlaWdodCArICJweCI7CisgIH0KKyAgKTsKKyAgZWRpdG9yLm5vdGlmeU9uKCdyZXNpemUnLAorICBmdW5jdGlvbigpCisgIHsKKyAgICBpZiAoIWRpYWxvZy5hdHRhY2hlZCkKKyAgICB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHN0eWxpc3QucmVzaXplKCk7CisgIH0KKyAgKTsKK30KK1N0eWxpc3QucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworICB2YXIgcm9vdEVsZW0gPSB0aGlzLmRpYWxvZy5yb290RWxlbTsKKyAgCisgIGlmIChyb290RWxlbS5zdHlsZS5kaXNwbGF5ID09ICdub25lJykgcmV0dXJuOworICAKKyAgdmFyIHBhbmVsQ29udGFpbmVyID0gcm9vdEVsZW0ucGFyZW50Tm9kZTsKKworICB2YXIgbmV3U2l6ZSA9IHBhbmVsQ29udGFpbmVyLm9mZnNldEhlaWdodDsKKyAgZm9yICh2YXIgaT0wOyBpIDwgcGFuZWxDb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGg7KytpKQorICB7CisgICAgaWYgKHBhbmVsQ29udGFpbmVyLmNoaWxkTm9kZXNbaV0gPT0gcm9vdEVsZW0gfHwgIXBhbmVsQ29udGFpbmVyLmNoaWxkTm9kZXNbaV0ub2Zmc2V0SGVpZ2h0KQorICAgIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBuZXdTaXplIC09IHBhbmVsQ29udGFpbmVyLmNoaWxkTm9kZXNbaV0ub2Zmc2V0SGVpZ2h0OworICB9CisgIHJvb3RFbGVtLnN0eWxlLmhlaWdodCA9IG5ld1NpemUtNSArICdweCc7CisgIHRoaXMuZGlhbG9nLm1haW4uc3R5bGUuaGVpZ2h0ID0gbmV3U2l6ZSAtIHRoaXMuZGlhbG9nLmNhcHRpb25CYXIub2Zmc2V0SGVpZ2h0IC01ICsgJ3B4JzsKK30KKworU3R5bGlzdC5wcm90b3R5cGUub25VcGRhdGVUb29sYmFyID0gZnVuY3Rpb24oKQoreworICBpZih0aGlzLmRpYWxvZykKKyAgeworICAgIGlmKHRoaXMuX3RpbWVvdXRJRCkKKyAgICB7CisgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJRCk7CisgICAgfQorCisgICAgdmFyIGUgPSB0aGlzLmVkaXRvcjsKKyAgICB0aGlzLl90aW1lb3V0SUQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgaWYoZS5lZGl0b3JJc0FjdGl2YXRlZCgpKSBlLl9maWxsU3R5bGlzdCgpOyB9LCA1MDApOworICB9Cit9OwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdHlsaXN0L2xhbmcvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N0eWxpc3QvbGFuZy9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmMyNGU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdHlsaXN0L2xhbmcvZGUuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJTdHlsZXMiOiAiU3RpbGUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3R5bGlzdC9sYW5nL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdHlsaXN0L2xhbmcvZnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgyMTQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3R5bGlzdC9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiU3R5bGVzIjogIlN0eWxlcyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdHlsaXN0L2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N0eWxpc3QvbGFuZy9qYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTg5OGYxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdHlsaXN0L2xhbmcvamEuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJTdHlsZXMiOiAi44K544K/44Kk44OrIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N0eWxpc3QvbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdHlsaXN0L2xhbmcvbGNfYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTRiNTFkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdHlsaXN0L2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDI1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgIlN0eWxlcyI6ICIiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdHlsaXN0L2xhbmcvbmIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N0eWxpc3QvbGFuZy9uYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDU4MjYwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdHlsaXN0L2xhbmcvbmIuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJuYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJTdHlsZXMiOiAiU3RpbGVyIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N0eWxpc3QvbGFuZy9ubC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3R5bGlzdC9sYW5nL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZThkOTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N0eWxpc3QvbGFuZy9ubC5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIlN0eWxlcyI6ICJTdHlsZSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdHlsaXN0L2xhbmcvcGwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N0eWxpc3QvbGFuZy9wbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjlhMzA4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdHlsaXN0L2xhbmcvcGwuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJTdHlsZXMiOiAiU3R5bGUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3R5bGlzdC9sYW5nL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdHlsaXN0L2xhbmcvcHRfYnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkNThkZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3R5bGlzdC9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiU3R5bGVzIjogIkVzdGlsb3MiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3R5bGlzdC9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdHlsaXN0L2xhbmcvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZmOTdlMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3R5bGlzdC9sYW5nL3J1LmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicnUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiU3R5bGVzIjogItCh0YLQuNC70LgiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9TdXBlckNsZWFuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL1N1cGVyQ2xlYW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM1YTQzNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9TdXBlckNsZWFuLmpzCkBAIC0wLDAgKzEsMTgyIEBACisvKiogc3VwZXJDbGVhbiBjb21iaW5lcyBIVE1MVGlkeSwgV29yZCBDbGVhbmluZyBhbmQgZm9udCBzdHJpcHBpbmcgaW50byBhIHNpbmdsZSBmdW5jdGlvbgorICogIGl0IHdvcmtzIGEgYml0IGRpZmZlcmVudGx5IGluIGhvdyBpdCBhc2tzIGZvciBwYXJhbWV0ZXJzICovCisKK2Z1bmN0aW9uIFN1cGVyQ2xlYW4oZWRpdG9yLCBhcmdzKQoreworICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKKyAgdmFyIHN1cGVyY2xlYW4gPSB0aGlzOworICBlZGl0b3IuX3N1cGVyY2xlYW5fb24gPSBmYWxzZTsKKyAgZWRpdG9yLmNvbmZpZy5yZWdpc3RlckJ1dHRvbignc3VwZXJjbGVhbicsIHRoaXMuX2xjKCJDbGVhbiB1cCBIVE1MIiksIFtfZWRpdG9yX3VybCArJ2ljb25zZXRzL1RhbmdvL2VkX2J1dHRvbnNfbWFpbi5wbmcnLDYsNF0sIHRydWUsIGZ1bmN0aW9uKGUsIG9iam5hbWUsIG9iaikgeyBzdXBlcmNsZWFuLl9zdXBlckNsZWFuKG51bGwsIG9iaik7IH0pOworCisgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCAna2lsbHdvcmQnIGFuZCByZXBsYWNlIGl0IHdpdGggc3VwZXJjbGVhbgorICBlZGl0b3IuY29uZmlnLmFkZFRvb2xiYXJFbGVtZW50KCJzdXBlcmNsZWFuIiwgImtpbGx3b3JkIiwgMCk7Cit9CisKK1N1cGVyQ2xlYW4uX3BsdWdpbkluZm8gPQoreworICBuYW1lICAgICA6ICJTdXBlckNsZWFuIiwKKyAgdmVyc2lvbiAgOiAiMS4wIiwKKyAgZGV2ZWxvcGVyOiAiSmFtZXMgU2xlZW1hbiwgTmlrbyBTYW1zIiwKKyAgZGV2ZWxvcGVyX3VybDogImh0dHA6Ly93d3cuZ29nby5jby5uei8iLAorICBjX293bmVyICAgICAgOiAiR29nbyBJbnRlcm5ldCBTZXJ2aWNlcyIsCisgIGxpY2Vuc2UgICAgICA6ICJodG1sQXJlYSIsCisgIHNwb25zb3IgICAgICA6ICJHb2dvIEludGVybmV0IFNlcnZpY2VzIiwKKyAgc3BvbnNvcl91cmwgIDogImh0dHA6Ly93d3cuZ29nby5jby5uei8iCit9OworCitTdXBlckNsZWFuLnByb3RvdHlwZS5fbGMgPSBmdW5jdGlvbihzdHJpbmcpIHsKKyAgICByZXR1cm4gWGluaGEuX2xjKHN0cmluZywgJ1N1cGVyQ2xlYW4nKTsKK307CisKK1hpbmhhLkNvbmZpZy5wcm90b3R5cGUuU3VwZXJDbGVhbiA9Cit7CisgIC8vIHNldCB0byB0aGUgVVJMIG9mIGEgaGFuZGxlciBmb3IgaHRtbCB0aWR5LCB0aGlzIGhhbmRsZXIKKyAgLy8gIChzZWUgdGlkeS5waHAgZm9yIGFuIGV4YW1wbGUpIG11c3QgdGhhdCBhIHNpbmdsZSBwb3N0IHZhcmlhYmxlCisgIC8vICAiY29udGVudCIgd2hpY2ggY29udGFpbnMgdGhlIEhUTUwgdG8gdGlkeSwgYW5kIHJldHVybiBqYXZhc2NyaXB0IGxpa2UKKyAgLy8gIGVkaXRvci5zZXRIVE1MKCc8c3Ryb25nPlRpZGllZCBIdG1sPC9zdHJvbmc+JykKKyAgLy8gaXQncyBjYWxsZWQgdGhyb3VnaCBYTUxIVFRQUmVxdWVzdAorICAndGlkeV9oYW5kbGVyJzogWGluaGEuZ2V0UGx1Z2luRGlyKCJTdXBlckNsZWFuIikgKyAnL3RpZHkucGhwJywKKworICAvLyBzZXQgYWRkaXRpb25hbCBhcmd1bWVudHMgbmVlZGVkIGZvciB0aGUgdGlkeSByZXF1ZXN0IAorICAndGlkeV9hcmdzJyA6IHt9LCAgCisKKyAgLy9hdmFsaWFibGUgZmlsdGVycyAodGhlc2UgYXJlIGJ1aWx0LWluIGZpbHRlcnMpCisgIC8vIFlvdSBjYW4gZWl0aGVyIHVzZQorICAvLyAgICAnZmlsdGVyX25hbWUnIDogIkxhYmVsL0Rlc2NyaXB0aW9uIFN0cmluZyIKKyAgLy8gb3IgJ2ZpbHRlcl9uYW1lJyA6IHtsYWJlbDogIkxhYmVsIiwgY2hlY2tlZDogdHJ1ZS9mYWxzZSwgZmlsdGVyRnVuY3Rpb246IGZ1bmN0aW9uKGh0bWwpIHsgLi4uIHJldHVybiBodG1sO30gfQorICAvLyBmaWx0ZXJGdW5jdGlvbiBpbiB0aGUgc2Vjb25kIGZvcm1hdCBhYm92ZSBpcyBvcHRpb25hbC4KKworICAnZmlsdGVycyc6IHsgJ3RpZHknOiAgICAgICAgICB7bGFiZWw6WGluaGEuX2xjKCdHZW5lcmFsIHRpZHkgdXAgYW5kIGNvcnJlY3Rpb24gb2Ygc29tZSBwcm9ibGVtcy4nLCAnU3VwZXJDbGVhbicpLCBjaGVja2VkOnRydWUsIGZ1bGxvbmx5OiB0cnVlfSwKKyAgICAgICAgICAgICAgICd3b3JkX2NsZWFuJzogICAge2xhYmVsOlhpbmhhLl9sYygnQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4nLCAnU3VwZXJDbGVhbicpLCBjaGVja2VkOnRydWUsIGZ1bGxvbmx5OiB0cnVlfSwgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgJ3dvcmQnOiAgICAgICAgICB7bGFiZWw6WGluaGEuX2xjKCdWaWdvcm91c2x5IHB1cmdlIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZC4nLCAnU3VwZXJDbGVhbicpLCBjaGVja2VkOmZhbHNlLCBmdWxsb25seTogdHJ1ZX0sCisgICAgICAgICAgICAgICAncmVtb3ZlX2ZhY2VzJzogIHtsYWJlbDpYaW5oYS5fbGMoJ1JlbW92ZSBjdXN0b20gdHlwZWZhY2VzIChmb250ICJzdHlsZXMiKS4nLCAnU3VwZXJDbGVhbicpLGNoZWNrZWQ6dHJ1ZX0sCisgICAgICAgICAgICAgICAncmVtb3ZlX3NpemVzJzogIHtsYWJlbDpYaW5oYS5fbGMoJ1JlbW92ZSBjdXN0b20gZm9udCBzaXplcy4nLCAnU3VwZXJDbGVhbicpLGNoZWNrZWQ6dHJ1ZX0sCisgICAgICAgICAgICAgICAncmVtb3ZlX2NvbG9ycyc6IHtsYWJlbDpYaW5oYS5fbGMoJ1JlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuJywgJ1N1cGVyQ2xlYW4nKSxjaGVja2VkOnRydWV9LAorICAgICAgICAgICAgICAgJ3JlbW92ZV9lbXBoYXNpcyc6IHtsYWJlbDpYaW5oYS5fbGMoJ1JlbW92ZSBlbXBoYXNpcyBhbmQgYW5ub3RhdGlvbnMuJywgJ1N1cGVyQ2xlYW4nKSwgY2hlY2tlZDp0cnVlfSwKKyAgICAgICAgICAgICAgICdyZW1vdmVfc3VwX3N1Yic6ICB7bGFiZWw6WGluaGEuX2xjKCdSZW1vdmUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzLicsICdTdXBlckNsZWFuJyksIGNoZWNrZWQ6ZmFsc2V9LAorICAgICAgICAgICAgICAgJ3JlbW92ZV9hbGlnbm1lbnQnOiB7bGFiZWw6WGluaGEuX2xjKCdSZW1vdmUgYWxpZ25tZW50IChsZWZ0L3JpZ2h0L2p1c3RpZnkpLicsICdTdXBlckNsZWFuJyksY2hlY2tlZDp0cnVlfSwKKyAgICAgICAgICAgICAgICdyZW1vdmVfYWxsX2Nzc19jbGFzc2VzJzoge2xhYmVsOlhpbmhhLl9sYygnUmVtb3ZlIGFsbCBjbGFzc2VzIChDU1MpLicsICdTdXBlckNsZWFuJyksIGNoZWNrZWQ6IGZhbHNlfSwKKyAgICAgICAgICAgICAgICdyZW1vdmVfYWxsX2Nzc19zdHlsZXMnOiAgICAgICAgIHtsYWJlbDpYaW5oYS5fbGMoJ1JlbW92ZSBhbGwgc3R5bGVzIChDU1MpLicsICdTdXBlckNsZWFuJyksY2hlY2tlZDp0cnVlfSwKKyAgICAgICAgICAgICAgICdyZW1vdmVfbGFuZyc6IHtsYWJlbDpYaW5oYS5fbGMoJ1JlbW92ZSBsYW5nIGF0dHJpYnV0ZXMuJywgJ1N1cGVyQ2xlYW4nKSxjaGVja2VkOnRydWV9LAorICAgICAgICAgICAgICAgJ3JlbW92ZV9mYW5jeV9xdW90ZXMnOiB7bGFiZWw6WGluaGEuX2xjKCdSZXBsYWNlIGRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzIHdpdGggbm9uLWRpcmVjdGlvbmFsIHF1b3RlIG1hcmtzLicsICdTdXBlckNsZWFuJyksIGNoZWNrZWQ6ZmFsc2V9LAorICAvL2FkZGl0aW9uYWwgY3VzdG9tIGZpbHRlcnMgKGRlZmluZWQgaW4gcGx1Z2lucy9TdXBlckNsZWFuL2ZpbHRlcnMvd29yZC5qcykKKyAgICAgICAgICAgICAgICdwYXJhZ3JhcGgnOntsYWJlbDpYaW5oYS5fbGMoJ1JlbW92ZSBQYXJhZ3JhcGhzJywgJ1N1cGVyQ2xlYW4nKSwgY2hlY2tlZDpmYWxzZX0sCisgICAgICAgICAgICAgICAncmVtb3ZlX2FsbF90YWdzJzoge2xhYmVsOlhpbmhhLl9sYygnUmVtb3ZlIEFsbCBIVE1MIFRhZ3MnLCAnU3VwZXJDbGVhbicpLCBjaGVja2VkOmZhbHNlIH0KKyAgICAgICAgICAgICB9LAorICAvL2lmIGZhbHNlIGFsbCBmaWx0ZXJzIGFyZSBhcHBsaWVkLCBpZiB0cnVlIGEgZGlhbG9nIGFza3Mgd2hhdCBmaWx0ZXJzIHNob3VsZCBiZSB1c2VkCisgICdzaG93X2RpYWxvZyc6IHRydWUKK307CisKK1N1cGVyQ2xlYW4uZmlsdGVyRnVuY3Rpb25zID0geyB9OworCisvKiogSGVscGVyIGZ1bmN0aW9uIHRvIHN0cmlwIHRhZ3MgZnJvbSBnaXZlbiBodG1sLgorICogCisgKiBAcGFyYW0gc3RyaW5nCisgKiBAcGFyYW0gYXJyYXl8c3RyaW5nIEFuIGFycmF5IHBmIHRhZyBuYW1lcywgb3IgYSB0YWcgbmFtZSBzdHJpbmcKKyAqIEBwYXJhbSBib29sICAgICAgICAgdHJ1ZSA9PSBjb21wbGV0ZWx5IHJlbW92ZSB0YWcgYW5kIGNvbnRlbnRzLCBmYWxzZSA9PSByZW1vdmUgdGFnIG9ubHkKKyAqIEByZXR1cm4gc3RyaW5nCisgKi8KKworU3VwZXJDbGVhbi5zdHJpcFRhZ3MgPSBmdW5jdGlvbihodG1sLCB0YWdOYW1lcywgY29tcGxldGVseVJlbW92ZSkKK3sKKyAgaWYodHlwZW9mIHRhZ05hbWVzID09ICdzdHJpbmcnKQorICB7CisgICAgdGFnTmFtZXMgPSBbIHRhZ05hbWVzIF07CisgIH0KKyAgCisgIGZvcih2YXIgaSA9IDA7IGkgPCB0YWdOYW1lcy5sZW5ndGg7IGkrKykKKyAgeworICAgIHZhciB0YWdOYW1lID0gdGFnTmFtZXNbaV07CisgICAgaWYoY29tcGxldGVseVJlbW92ZSkKKyAgICB7CisgICAgICBodG1sID0gaHRtbC5yZXBsYWNlKG5ldyBSZWdFeHAoJzwnK3RhZ05hbWUrJyggW14+XSopPz4uKj88LycrdGFnTmFtZSsnKCBbXj5dKik/PicsICdnaScpLCAnJyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBodG1sID0gaHRtbC5yZXBsYWNlKG5ldyBSZWdFeHAoJzwvPycrdGFnTmFtZSsnKCBbXj5dKik/PicsICdnaScpLCAnJyk7CisgICAgfQorICB9CisgIAorICByZXR1cm4gaHRtbDsKK30KKworU3VwZXJDbGVhbi5zdHJpcEF0dHJpYnV0ZXMgPSBmdW5jdGlvbihodG1sLCBhdHRyaWJ1dGVOYW1lcykKK3sKKyAgaWYodHlwZW9mIGF0dHJpYnV0ZU5hbWVzID09ICdzdHJpbmcnKQorICB7CisgICAgYXR0cmlidXRlTmFtZXMgPSBbIGF0dHJpYnV0ZU5hbWVzIF07CisgIH0KKyAgCisgIGZvcih2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVOYW1lcy5sZW5ndGg7IGkrKykKKyAgeworICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZXNbaV07CisgICAgCisgICAgLy8gQFRPRE8gLSBtYWtlIHRoaXMgbGVzcyBsaWtlbHkgdG8gZmFsc2UtcG9zaXRpdmUgb3V0c2lkZSBvZiB0YWdzCisgICAgaHRtbCA9IGh0bWwucmVwbGFjZShuZXcgUmVnRXhwKCcgKCcrYXR0cmlidXRlTmFtZSsnPSJbXiJdKiJ8JythdHRyaWJ1dGVOYW1lKyc9XCdbXlwnXSpcJ3wnK2F0dHJpYnV0ZU5hbWUrJz1bXiA+XSopJywgJ2dpJyksICcgJyk7ICAgIAorICB9CisgIAorICByZXR1cm4gaHRtbDsKK30KKworU3VwZXJDbGVhbi5wcm90b3R5cGUub25HZW5lcmF0ZU9uY2UgPSBmdW5jdGlvbigpCit7CisKKyAgaWYodGhpcy5lZGl0b3IuY29uZmlnLnRpZHlfaGFuZGxlcikKKyAgeworICAgIC8vZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisgICAgdGhpcy5lZGl0b3IuY29uZmlnLlN1cGVyQ2xlYW4udGlkeV9oYW5kbGVyID0gdGhpcy5lZGl0b3IuY29uZmlnLnRpZHlfaGFuZGxlcjsKKyAgICB0aGlzLmVkaXRvci5jb25maWcudGlkeV9oYW5kbGVyID0gbnVsbDsKKyAgfQorICBpZighdGhpcy5lZGl0b3IuY29uZmlnLlN1cGVyQ2xlYW4udGlkeV9oYW5kbGVyICYmIHRoaXMuZWRpdG9yLmNvbmZpZy5maWx0ZXJzLnRpZHkpIHsKKyAgICAvL3Vuc2V0IHRpZHktZmlsdGVyIGlmIG5vIHRpZHlfaGFuZGxlcgorICAgIHRoaXMuZWRpdG9yLmNvbmZpZy5maWx0ZXJzLnRpZHkgPSBudWxsOworICB9CisgIFN1cGVyQ2xlYW4ubG9hZEFzc2V0cygpOworICB0aGlzLmxvYWRGaWx0ZXJzKCk7Cit9OworCitTdXBlckNsZWFuLnByb3RvdHlwZS5vblVwZGF0ZVRvb2xiYXIgPSBmdW5jdGlvbigpCit7IAorICBpZiAoIShTdXBlckNsZWFuLm1ldGhvZHNSZWFkeSAmJiBTdXBlckNsZWFuLmh0bWwpKQorICB7CisgICAgdGhpcy5lZGl0b3IuX3Rvb2xiYXJPYmplY3RzLnN1cGVyY2xlYW4uc3RhdGUoImVuYWJsZWQiLCBmYWxzZSk7CisgIH0KKyAgZWxzZSB0aGlzLm9uVXBkYXRlVG9vbGJhciA9IG51bGw7Cit9OworCitTdXBlckNsZWFuLmxvYWRBc3NldHMgPSBmdW5jdGlvbigpCit7CisgIHZhciBzZWxmID0gU3VwZXJDbGVhbjsKKyAgaWYgKHNlbGYubG9hZGluZykgcmV0dXJuOworICBzZWxmLmxvYWRpbmcgPSB0cnVlOworICBYaW5oYS5fZ2V0YmFjayhYaW5oYS5nZXRQbHVnaW5EaXIoIlN1cGVyQ2xlYW4iKSArICcvcGx1Z2luTWV0aG9kcy5qcycsIGZ1bmN0aW9uKGdldGJhY2spIHsgZXZhbChnZXRiYWNrKTsgc2VsZi5tZXRob2RzUmVhZHkgPSB0cnVlOyB9KTsKKyAgWGluaGEuX2dldGJhY2soIFhpbmhhLmdldFBsdWdpbkRpcigiU3VwZXJDbGVhbiIpICsgJy9kaWFsb2cuaHRtbCcsIGZ1bmN0aW9uKGdldGJhY2spIHsgc2VsZi5odG1sID0gZ2V0YmFjazsgfSApOworfTsKKworU3VwZXJDbGVhbi5wcm90b3R5cGUubG9hZEZpbHRlcnMgPSBmdW5jdGlvbigpCit7CisgIHZhciBzYyA9IHRoaXM7CisgIC8vbG9hZCB0aGUgZmlsdGVyLWZ1bmN0aW9ucworICBmb3IodmFyIGZpbHRlciBpbiB0aGlzLmVkaXRvci5jb25maWcuU3VwZXJDbGVhbi5maWx0ZXJzKQorICB7CisgICAgaWYgKC9eKHJlbW92ZV9jb2xvcnN8cmVtb3ZlX3NpemVzfHJlbW92ZV9mYWNlc3xyZW1vdmVfbGFuZ3x3b3JkX2NsZWFufHJlbW92ZV9mYW5jeV9xdW90ZXN8dGlkeXxyZW1vdmVfZW1waGFzaXN8cmVtb3ZlX3N1cF9zdWJ8cmVtb3ZlX2FsaWdubWVudHxyZW1vdmVfYWxsX2Nzc19jbGFzc2VzfHJlbW92ZV9hbGxfY3NzX3N0eWxlc3xyZW1vdmVfYWxsX3RhZ3MpJC8udGVzdChmaWx0ZXIpKSBjb250aW51ZTsgLy9za2lwIGJ1aWx0LWluIGZ1bmN0aW9ucworICAgIAorICAgIGlmKCFTdXBlckNsZWFuLmZpbHRlckZ1bmN0aW9uc1tmaWx0ZXJdKQorICAgIHsKKyAgICAgIHZhciBmaWx0RGV0YWlsID0gdGhpcy5lZGl0b3IuY29uZmlnLlN1cGVyQ2xlYW4uZmlsdGVyc1tmaWx0ZXJdOworICAgICAgaWYodHlwZW9mIGZpbHREZXRhaWwuZmlsdGVyRnVuY3Rpb24gIT0gJ3VuZGVmaW5lZCcpCisgICAgICB7CisgICAgICAgIFN1cGVyQ2xlYW4uZmlsdGVyRnVuY3Rpb25zW2ZpbHRlcl0gPSBmaWx0ZXJGdW5jdGlvbjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgWGluaGEuX2dldGJhY2soWGluaGEuZ2V0UGx1Z2luRGlyKCJTdXBlckNsZWFuIikgKyAnL2ZpbHRlcnMvJytmaWx0ZXIrJy5qcycsCisgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oZnVuYykgeworICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCgnU3VwZXJDbGVhbi5maWx0ZXJGdW5jdGlvbnMuJytmaWx0ZXIrJz0nK2Z1bmMrJzsnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjLmxvYWRGaWx0ZXJzKCk7CisgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICB9CisgICAgICByZXR1cm47CisgICAgfQorICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9kaWFsb2cuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9kaWFsb2cuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2Y4OGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2RpYWxvZy5odG1sCkBAIC0wLDAgKzEsMjQgQEAKKzxoMSBpZD0iW2gxXSI+PGwxMG4+Q2xlYW4gdXAgSFRNTDwvbDEwbj48L2gxPgorPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDEwcHg7bWFyZ2luLXJpZ2h0OjEwcHg7IiBpZD0iW21haW5dIj4KKyAgICA8bDEwbj5QbGVhc2Ugc2VsZWN0IGZyb20gdGhlIGZvbGxvd2luZyBjbGVhbmluZyBvcHRpb25zLi4uPC9sMTBuPgorICAgIDwhLS1maWx0ZXJzLS0+CisgICAgCisgICAgCisgICAgCisgICAgPGZpZWxkc2V0IHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij4KKyAgICAgIDxsZWdlbmQ+PGwxMG4+Q2xlYW5pbmcgU2NvcGU8L2wxMG4+PC9sZWdlbmQ+CisgICAgICA8c2VsZWN0IG5hbWU9IltzY29wZV0iPgorICAgICAgICA8b3B0aW9uIHZhbHVlPSJmdWxsIj48bDEwbj5DbGVhbiBFbnRpcmUgRWRpdG9yIENvbnRlbnRzPGwxMG4+PC9vcHRpb24+CisgICAgICAgIDxvcHRpb24gdmFsdWU9InNlbGVjdGlvbiI+PGwxMG4+Q2xlYW4gU2VsZWN0aW9uIE9ubHk8L2wxMG4+PC9vcHRpb24+CisgICAgICA8L3NlbGVjdD4KKyAgICAgIDxwIGlkPSJbbm90ZV0iPjxsMTBuPl4gLSBJdGVtcyBzbyBtYXJrZWQgb3BlcmF0ZSBvbiB0aGUgZW50aXJlIGVkaXRvciBjb250ZW50cyByZWdhcmRsZXNzIG9mIHRoaXMgc2V0dGluZy48L2wxMG4+PC9wPgorICAgIDwvZmllbGRzZXQ+Cis8L2Rpdj4KKworPGRpdiBpZD0iW3dhaXRpbmddIiBzdHlsZT0iZGlzcGxheTpub25lO21hcmdpbjozZW0gMWVtO3RleHQtYWxpZ246Y2VudGVyIj48bDEwbj5QbGVhc2Ugc3RhbmQgYnkgd2hpbGUgY2xlYW5pbmcgaW4gcHJvY2Vzcy4uLjwvbDEwbj48L2Rpdj4KKzxkaXYgaWQ9IlthbGVydF0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7bWFyZ2luOjNlbSAxZW07dGV4dC1hbGlnbjpjZW50ZXIiPjwvbDEwbj48L2Rpdj4KKworPGRpdiBjbGFzcz0iYnV0dG9ucyIgaWQ9IltidXR0b25zXSI+CisgIDxpbnB1dCB0eXBlPSJidXR0b24iIGlkPSJbb2tdIiAgICAgdmFsdWU9Il8oT0spIiAgICAgLz4KKyAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9IltjYW5jZWxdIiB2YWx1ZT0iXyhDYW5jZWwpIiAvPgorPC9kaXY+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2ZpbHRlcnMvcGFyYWdyYXBoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2ZpbHRlcnMvcGFyYWdyYXBoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MWE1NzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vZmlsdGVycy9wYXJhZ3JhcGguanMKQEAgLTAsMCArMSw2IEBACitmdW5jdGlvbihodG1sKSB7CisgIGh0bWwgPSBodG1sLnJlcGxhY2UoLzxccypwW14+XSo+L2dpLCAnJyk7CisgIGh0bWwgPSBodG1sLnJlcGxhY2UoLzxcL1xzKnBccyo+L2dpLCAnJyk7CisgIGh0bWwgPSBodG1sLnRyaW0oKTsKKyAgcmV0dXJuIGh0bWw7Cit9IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9maWx0ZXJzL3dvcmQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vZmlsdGVycy93b3JkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NWE3MTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vZmlsdGVycy93b3JkLmpzCkBAIC0wLDAgKzEsNTMgQEAKK2Z1bmN0aW9uKGh0bWwpIHsKKyAgICAvLyBSZW1vdmUgSFRNTCBjb21tZW50cworCWh0bWwgPSBodG1sLnJlcGxhY2UoLzwhLS1bXHdcc1xkQHt9Oi47LCciJSEjXz0mfD9+KClbKitcL1wtXF1dKi0tPi9naSwgIiIgKTsKKwlodG1sID0gaHRtbC5yZXBsYWNlKC88IS0tW15cMF0qLS0+L2dpLCAnJyk7CisgICAgLy8gUmVtb3ZlIGFsbCBIVE1MIHRhZ3MKKwlodG1sID0gaHRtbC5yZXBsYWNlKC88XC8/XHMqSFRNTFtePl0qPi9naSwgIiIgKTsKKyAgICAvLyBSZW1vdmUgYWxsIEJPRFkgdGFncworICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLzxcLz9ccypCT0RZW14+XSo+L2dpLCAiIiApOworICAgIC8vIFJlbW92ZSBhbGwgTUVUQSB0YWdzCisJaHRtbCA9IGh0bWwucmVwbGFjZSgvPFwvP1xzKk1FVEFbXj5dKj4vZ2ksICIiICk7CisgICAgLy8gUmVtb3ZlIGFsbCBTUEFOIHRhZ3MKKwlodG1sID0gaHRtbC5yZXBsYWNlKC88XC8/XHMqU1BBTltePl0qPi9naSwgIiIgKTsKKwkvLyBSZW1vdmUgYWxsIEZPTlQgdGFncworICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLzxcLz9ccypGT05UW14+XSo+L2dpLCAiIik7CisgICAgLy8gUmVtb3ZlIGFsbCBJRlJBTUUgdGFncy4KKyAgICBodG1sID0gaHRtbC5yZXBsYWNlKC88XC8/XHMqSUZSQU1FW14+XSo+L2dpLCAiIik7CisgICAgLy8gUmVtb3ZlIGFsbCBTVFlMRSB0YWdzICYgY29udGVudAorCWh0bWwgPSBodG1sLnJlcGxhY2UoLzxcLz9ccypTVFlMRVtePl0qPigufFtcblxyXHRdKSo8XC9ccypTVFlMRVxzKj4vZ2ksICIiICk7CisgICAgLy8gUmVtb3ZlIGFsbCBUSVRMRSB0YWdzICYgY29udGVudAorCWh0bWwgPSBodG1sLnJlcGxhY2UoLzxccypUSVRMRVtePl0qPigufFtcblxyXHRdKSo8XC9ccypUSVRMRVxzKj4vZ2ksICIiICk7CisJLy8gUmVtb3ZlIGphdmFzY3JpcHQKKyAgICBodG1sID0gaHRtbC5yZXBsYWNlKC88XHMqU0NSSVBUW14+XSo+W15cMF0qPFwvXHMqU0NSSVBUXHMqPi9naSwgIiIpOworICAgIC8vIFJlbW92ZSBhbGwgSEVBRCB0YWdzICYgY29udGVudAorCWh0bWwgPSBodG1sLnJlcGxhY2UoLzxccypIRUFEW14+XSo+KC58W1xuXHJcdF0pKjxcL1xzKkhFQURccyo+L2dpLCAiIiApOworCS8vIFJlbW92ZSBDbGFzcyBhdHRyaWJ1dGVzCisJaHRtbCA9IGh0bWwucmVwbGFjZSgvPFxzKihcd1tePl0qKSBjbGFzcz0oW14gfD5dKikoW14+XSopL2dpLCAiPCQxJDMiKSA7CisJLy8gUmVtb3ZlIFN0eWxlIGF0dHJpYnV0ZXMKKwlodG1sID0gaHRtbC5yZXBsYWNlKC88XHMqKFx3W14+XSopIHN0eWxlPSIoW14iXSopIihbXj5dKikvZ2ksICI8JDEkMyIpIDsKKwkvLyBSZW1vdmUgTGFuZyBhdHRyaWJ1dGVzCisJaHRtbCA9IGh0bWwucmVwbGFjZSgvPFxzKihcd1tePl0qKSBsYW5nPShbXiB8Pl0qKShbXj5dKikvZ2ksICI8JDEkMyIpIDsKKwkvLyBSZW1vdmUgWE1MIGVsZW1lbnRzIGFuZCBkZWNsYXJhdGlvbnMKKwlodG1sID0gaHRtbC5yZXBsYWNlKC88XFw/XD94bWxbXj5dKj4vZ2ksICIiKSA7CisJLy8gUmVtb3ZlIFRhZ3Mgd2l0aCBYTUwgbmFtZXNwYWNlIGRlY2xhcmF0aW9uczogPG86cD48L286cD4KKwlodG1sID0gaHRtbC5yZXBsYWNlKC88XC8/XHcrOltePl0qPi9naSwgIiIpIDsKKwkvLyBSZXBsYWNlIHRoZSAmbmJzcDsKKwlodG1sID0gaHRtbC5yZXBsYWNlKC8mbmJzcDsvLCAiICIgKTsKKworCS8vIFRyYW5zZm9ybSA8cD48YnIgLz48L3A+IHRvIDxicj4KKwkvL2h0bWwgPSBodG1sLnJlcGxhY2UoLzxccypwW14+XSo+XHMqPFxzKmJyXHMqXC8+XHMqPFwvXHMqcFtePl0qPi9naSwgIjxicj4iKTsKKwlodG1sID0gaHRtbC5yZXBsYWNlKC88XHMqcFtePl0qPjxccypiclxzKlwvPz5ccyo8XC9ccypwW14+XSo+L2dpLCAiPGJyPiIpOworCQorCS8vIFJlbW92ZSA8UD4gCisJaHRtbCA9IGh0bWwucmVwbGFjZSgvPFxzKnBbXj5dKj4vZ2ksICIiKTsKKwkKKwkvLyBSZXBsYWNlIDwvcD4gd2l0aCA8YnI+CisJaHRtbCA9IGh0bWwucmVwbGFjZSgvPFwvXHMqcFtePl0qPi9naSwgIjxicj4iKTsKKwkKKwkvLyBSZW1vdmUgYW55IDxicj4gYXQgdGhlIGVuZAorCWh0bWwgPSBodG1sLnJlcGxhY2UoLyhccyo8YnI+XHMqKSokLywgIiIpOworCQorCWh0bWwgPSBodG1sLnRyaW0oKTsKKwlyZXR1cm4gaHRtbDsKK30gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2ltZy9lZF9zdXBlcmNsZWFuLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9pbWcvZWRfc3VwZXJjbGVhbi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMxODBhOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9pbWcvZWRfc3VwZXJjbGVhbi5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvY2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9jaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDc4ZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvY2guanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi5Y+W5raIIiwKKyAgICAiT0siOiAi5aW9IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9jei5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL2N6LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2Yjk5MjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9jei5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImN6IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJacnXFoWl0IiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL2RhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvZGEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY5MzUzZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL2RhLmpzCkBAIC0wLDAgKzEsMjggQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGVyIiwKKyAgICAiQ2xlYW4gdXAgSFRNTCI6ICJSZW5nw7hyIEhUTUwiLAorICAgICJHZW5lcmFsIHRpZHkgdXAgYW5kIGNvcnJlY3Rpb24gb2Ygc29tZSBwcm9ibGVtcy4iOiAiR2VuZXJlbCBvcHJ5ZG5pbmcgb2cgcmV0dGVsc2UgYWYgZGl2ZXJzZSBwcm9ibGVtZXIuIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQbGVhc2Ugc2VsZWN0IGZyb20gdGhlIGZvbGxvd2luZyBjbGVhbmluZyBvcHRpb25zLi4uIjogIlbDpmxnIGV0IGVsbGVyIGZsZXJlIGFmIGbDuGxnZW5kZSByZW5nw7hyaW5nc3bDpnJrdMO4amVyLi4uIiwKKyAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICJTbGV0IHNrcmlmdHN0w7hycmVsc2VyLiIsCisgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIlNsZXQgdGVrc3RmYXJ2ZXIuIiwKKyAgICAiUmVtb3ZlIGN1c3RvbSB0eXBlZmFjZXMgKGZvbnQgXCJzdHlsZXNcIikuIjogIlNsZXQgc2tyaWZ0c25pdCAoZm9udCBcInN0eWxlc1wiKS4iLAorICAgICJSZW1vdmUgbGFuZyBhdHRyaWJ1dGVzLiI6ICJTbGV0IGxhbmcgYXR0cmlidXR0ZXIuIiwKKyAgICAiUmVwbGFjZSBkaXJlY3Rpb25hbCBxdW90ZSBtYXJrcyB3aXRoIG5vbi1kaXJlY3Rpb25hbCBxdW90ZSBtYXJrcy4iOiAiRXJzdGF0IGRpcmVjdGlvbmFsIGFuZsO4cnNlbHN0ZWduIG1lZCBpa2tlLWRpcmVjdGlvbmFsIGFuZsO4cnNlbHN0ZWduIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZCI6ICJSZW5nw7hyIHXDuG5za2V0IEhUTUwgZnJhIE1pY3Jvc29mdCBXb3JkIiwKKyAgICAgICAgIkdvIjogIk9rIiwKKyAgICAgICAgIlRpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLiI6ICJUaWR5IG1pc2x5a2tlZGVzLiBUamVrIGRpbiBIVE1MIGZvciBzeW50YWtzZmVqbC4iLAorICAgICAgICAiWW91IGRvbid0IGhhdmUgYW55dGhpbmcgdG8gdGlkeSEiOiAiRGVyIGVyIGlra2Ugbm9nZXQgYXQgcmVuZ8O4cmUhIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzdjYThkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvZGUuanMKQEAgLTAsMCArMSwyOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAiQ2xlYW4gdXAgSFRNTCI6ICJIVE1MIHPDpHViZXJuIiwKKyAgICAiR2VuZXJhbCB0aWR5IHVwIGFuZCBjb3JyZWN0aW9uIG9mIHNvbWUgcHJvYmxlbXMuIjogIkFsbGdlbWVpbmVzIGF1ZnLDpHVtZW4gdW5kIEtvcnJla3R1ciBlaW5pZ2VyIFByb2JsZW1lLiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUGxlYXNlIHNlbGVjdCBmcm9tIHRoZSBmb2xsb3dpbmcgY2xlYW5pbmcgb3B0aW9ucy4uLiI6ICJCaXR0ZSBPcHRpb25lbiBhdXN3w6RobGVuLi4uIiwKKyAgICAiUGxlYXNlIHN0YW5kIGJ5IHdoaWxlIGNsZWFuaW5nIGluIHByb2Nlc3MuLi4iOiAiQml0dGUgd2FydGVuIFNpZSwgd8OkaHJlbmQgZGllIFPDpHViZXJ1bmcgbMOkdWZ0Li4uIiwKKyAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICJTY2hyaWZ0Z3LDtsOfZW4gZW50ZmVybmVuIChmb250IHNpemUpLiIsCisgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIlNjaHJpZnRmYXJiZW4gZW50ZmVybmVuIChmb250IGNvbG9yKS4iLAorICAgICJSZW1vdmUgY3VzdG9tIHR5cGVmYWNlcyAoZm9udCBcInN0eWxlc1wiKS4iOiAiU2NocmlmdGFydGVuIGVudGZlcm5lbiAoZm9udCBmYWNlKS4iLAorICAgICJSZW1vdmUgbGFuZyBhdHRyaWJ1dGVzLiI6ICJTcHJhY2hhdHRyaWJ1dGUgZW50ZmVybmVuLiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkNsZWFuIGJhZCBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQiOiAiU2NobGVjaHRlcyBIVE1MIGF1cyBNaWNyb3NvZnQgV29yZCBhdWZyw6R1bWVuIiwKKyAgICAgICAgIkdvIjogIkdvIiwKKyAgICAgICAgIlRpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLiI6ICJTw6R1YmVybiBmZWhsZ2VzY2hsYWdlbi4gw5xiZXJwcsO8ZmVuIFNpZSBJaHJlbiBDb2RlIGF1ZiBGZWhsZXIuIiwKKyAgICAgICAgIllvdSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIHRpZHkhIjogIkVzIGdpYnQgbmljaHRzIHp1IHPDpHViZXJuLi4uISIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL2VlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvZWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE5MTZlOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL2VlLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL2VsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZlMDA2YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL2VsLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAiT0siOiAizpXOvc+EzqzOvs61zrkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL2VzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYyM2MwZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL2VzLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXMiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiT0siOiAiQWNlcHRhciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvZXUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9ldS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmM5ZGJiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvZXUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJldSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiVXR6aSIsCisgICAgIk9LIjogIkFkb3MiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvZmEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlN2Y3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL2ZhLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIsCisgICAgIk9LIjogItio2YTZhyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvZmkuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9maS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjU1MmI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvZmkuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUGVydXV0YSIsCisgICAgIk9LIjogIkh5dsOka3N5IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9mci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNTMwZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9mci5qcwpAQCAtMCwwICsxLDI3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGVyIiwKKyAgICAiQ2xlYW4gdXAgSFRNTCI6ICJOZXR0b3llciBsZSBjb2RlIEhUTUwiLAorICAgICJHZW5lcmFsIHRpZHkgdXAgYW5kIGNvcnJlY3Rpb24gb2Ygc29tZSBwcm9ibGVtcy4iOiAiTmV0dG95YWdlIGfDqW7DqXJpcXVlIGV0IGNvcnJlY3Rpb24gZGVzIHByb2Jsw6htZXMgbWluZXVycy4iLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBsZWFzZSBzZWxlY3QgZnJvbSB0aGUgZm9sbG93aW5nIGNsZWFuaW5nIG9wdGlvbnMuLi4iOiAiVmV1aWxsZXogc8OpbGVjdGlvbm5lciB1bmUgb3B0aW9uIGRlIG5ldHRveWFnZS4iLAorICAgICJSZW1vdmUgY3VzdG9tIGZvbnQgc2l6ZXMuIjogIlN1cHByaW1lciBsZXMgdGFpbGxlcyBkZSBwb2xpY2VzIHBlcnNvbm5hbGlzw6llcy4iLAorICAgICJSZW1vdmUgY3VzdG9tIHRleHQgY29sb3JzLiI6ICJTdXBwcmltZXIgbGVzIGNvdWxldXJzIGRlIHRleHRlIHBlcnNvbmFsaXPDqWVzLiIsCisgICAgIlJlbW92ZSBjdXN0b20gdHlwZWZhY2VzIChmb250IFwic3R5bGVzXCIpLiI6ICJTdXBwcmltZXIgbGVzIHBvbGljZXMgcGVyc29uYWxpc8OpZXMgKGZvbnQgXCJzdHlsZXNcIikuIiwKKyAgICAiUmVtb3ZlIGxhbmcgYXR0cmlidXRlcy4iOiAiU3VwcHJpbWVyIGxlcyBhdHRyaWJ1dHMgZGUgbGFuZ3VlLiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkNsZWFuIGJhZCBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQiOiAiTmV0dG95ZXIgbGVzIGJhbGlzZXMgSFRNTCBkZSBNaWNyb3NvZnQgV29yZCIsCisgICAgICAgICJHbyI6ICJDb21tZW5jZXIiLAorICAgICAgICAiVGlkeSBmYWlsZWQuICBDaGVjayB5b3VyIEhUTUwgZm9yIHN5bnRheCBlcnJvcnMuIjogIlRpZHkgYSDDqWNob3XDqS4gVsOpcmlmaWVyIGxhIHN5bnRheGUgSFRNTC4iLAorICAgICAgICAiWW91IGRvbid0IGhhdmUgYW55dGhpbmcgdG8gdGlkeSEiOiAiUmllbiDDoCB0cmFuc21ldHRyZSDDoCB0aWR5ICEiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9oZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MDJmN2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9oZS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImhlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKKyAgICAiT0siOiAi15DXmdep15XXqCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9odS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzg1MjhkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvaHUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJodSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIsCisgICAgIk9LIjogIlJlbmRiZW4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvaXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBhY2I0NQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL2l0LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaXQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGFtZW50byIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9qYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MTA1ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9qYS5qcwpAQCAtMCwwICsxLDI5IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICJDbGVhbiB1cCBIVE1MIjogIkhUTUzjga7jgq/jg6rjg7zjg7Pjg4rjg4Pjg5ciLAorICAgICJHZW5lcmFsIHRpZHkgdXAgYW5kIGNvcnJlY3Rpb24gb2Ygc29tZSBwcm9ibGVtcy4iOiAi5LiA6Iis55qE44Gq6YGp5q2j5YyW44Go44GE44GP44Gk44GL44Gu5ZWP6aGM44KS5L+u5q2j44GX44G+44GZ44CCIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQbGVhc2Ugc2VsZWN0IGZyb20gdGhlIGZvbGxvd2luZyBjbGVhbmluZyBvcHRpb25zLi4uIjogIuS7peS4i+OBruOCr+ODquODvOODs+ODiuODg+ODl+OCquODl+OCt+ODp+ODs+OCkumBuOaKnuOBl+OBpuOBj+OBoOOBleOBhC4uLiIsCisgICAgIlJlbW92ZSBjdXN0b20gZm9udCBzaXplcy4iOiAi54us6Ieq44OV44Kp44Oz44OI44K144Kk44K66Kit5a6a44Gu6Zmk5Y6744CCIiwKKyAgICAiUmVtb3ZlIGN1c3RvbSB0ZXh0IGNvbG9ycy4iOiAi54us6Ieq5paH5a2X6Imy6Kit5a6a44Gu6Zmk5Y6744CCIiwKKyAgICAiUmVtb3ZlIGN1c3RvbSB0eXBlZmFjZXMgKGZvbnQgXCJzdHlsZXNcIikuIjogIueLrOiHquODleOCqeODs+ODiOWQjeioreWumuOBrumZpOWOuyAoZm9udCBmYWNlKeOAgiIsCisgICAgIlJlbW92ZSBsYW5nIGF0dHJpYnV0ZXMuIjogIuiogOiqnuWxnuaAp+OBrumZpOWOu+OAgiIsCisgICAgIlJlcGxhY2UgZGlyZWN0aW9uYWwgcXVvdGUgbWFya3Mgd2l0aCBub24tZGlyZWN0aW9uYWwgcXVvdGUgbWFya3MuIjogIuaWueWQkeOBpOOBjeW8leeUqOespuOCkuaWueWQkeOBquOBl+W8leeUqOespuOBq+e9ruaPm+OAgiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkNBTkNFTCI6ICLkuK3mraIiLAorICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZCI6ICJNaWNyb3NvZnQgV29yZOOBq+OCiOOCi+S4jeato+OBqkhUTUzjga7muIXmvZTljJYiLAorICAgICAgICAiR28iOiAi5a6f6KGMIiwKKyAgICAgICAgIlRpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLiI6ICLpganmraPljJbjgavlpLHmlZfjgZfjgb7jgZfjgZ/jgIJIVE1M44Gu5paH5rOV44Ko44Op44O844KS56K66KqN44GX44Gm44GP44Gg44GV44GE44CCIiwKKyAgICAgICAgIllvdSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIHRpZHkhIjogIumBqeato+WMluOBmeOCi+OCguOBruOBr+S9leOCguOBguOCiuOBvuOBm+OCkyEiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvbGNfYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYThmZmY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDQ2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgIkNhbmNlbCI6ICIiLAorICAgICJDbGVhbiBTZWxlY3Rpb24gT25seSI6ICIiLAorICAgICJDbGVhbiBiYWQgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiLAorICAgICJDbGVhbiB1cCBIVE1MIjogIiIsCisgICAgIkNsZWFuaW5nIFNjb3BlIjogIiIsCisgICAgIkdlbmVyYWwgdGlkeSB1cCBhbmQgY29ycmVjdGlvbiBvZiBzb21lIHByb2JsZW1zLiI6ICIiLAorICAgICJPSyI6ICIiLAorICAgICJQbGVhc2Ugc2VsZWN0IGZyb20gdGhlIGZvbGxvd2luZyBjbGVhbmluZyBvcHRpb25zLi4uIjogIiIsCisgICAgIlBsZWFzZSBzdGFuZCBieSB3aGlsZSBjbGVhbmluZyBpbiBwcm9jZXNzLi4uIjogIiIsCisgICAgIlJlbW92ZSBBbGwgSFRNTCBUYWdzIjogIiIsCisgICAgIlJlbW92ZSBQYXJhZ3JhcGhzIjogIiIsCisgICAgIlJlbW92ZSBhbGlnbm1lbnQgKGxlZnQvcmlnaHQvanVzdGlmeSkuIjogIiIsCisgICAgIlJlbW92ZSBhbGwgY2xhc3NlcyAoQ1NTKS4iOiAiIiwKKyAgICAiUmVtb3ZlIGFsbCBzdHlsZXMgKENTUykuIjogIiIsCisgICAgIlJlbW92ZSBjdXN0b20gZm9udCBzaXplcy4iOiAiIiwKKyAgICAiUmVtb3ZlIGN1c3RvbSB0ZXh0IGNvbG9ycy4iOiAiIiwKKyAgICAiUmVtb3ZlIGN1c3RvbSB0eXBlZmFjZXMgKGZvbnQgXCJzdHlsZXNcIikuIjogIiIsCisgICAgIlJlbW92ZSBlbXBoYXNpcyBhbmQgYW5ub3RhdGlvbnMuIjogIiIsCisgICAgIlJlbW92ZSBsYW5nIGF0dHJpYnV0ZXMuIjogIiIsCisgICAgIlJlbW92ZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMuIjogIiIsCisgICAgIlJlcGxhY2UgZGlyZWN0aW9uYWwgcXVvdGUgbWFya3Mgd2l0aCBub24tZGlyZWN0aW9uYWwgcXVvdGUgbWFya3MuIjogIiIsCisgICAgIlZpZ29yb3VzbHkgcHVyZ2UgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkLiI6ICIiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvbHQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9sdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTE4OTA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvbHQuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL2x2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvbHYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzZDVkMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL2x2LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHYiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0Y2VsdCIsCisgICAgIk9LIjogIkxhYmkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRlZTQzNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL25iLmpzCkBAIC0wLDAgKzEsMjcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIkNsZWFuIHVwIEhUTUwiOiAiVmFzayBIVE1MIGtvZGUiLAorICAgICJHZW5lcmFsIHRpZHkgdXAgYW5kIGNvcnJlY3Rpb24gb2Ygc29tZSBwcm9ibGVtcy4iOiAiR2VuZXJlbGwgb3BwcnlkZGluZyBpIEhUTUwga29kZW4gc2FtdCBrb3JyaWdlcmluZyBhdiB0eXBpc2tlIGZlaWwiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBsZWFzZSBzZWxlY3QgZnJvbSB0aGUgZm9sbG93aW5nIGNsZWFuaW5nIG9wdGlvbnMuLi4iOiAiVmVubmxpZ3N0IHZlbGcgYmxhbmR0IGRlIGZvcnNramVsbGlnZSBtdWxpZ2hldGVuZSDDpSB2YXNrZS8gcnlkZGUgaSBIVE1MIGtvZGVuIiwKKyAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICJGamVybmUgZWdlbmRlZmluZXJ0ZSBza3JpZnRzdMO4cnJlbHNlciAoZm9udCBzaXplKSIsCisgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIkZqZXJuZSBlZ2VuZGVmaW5lcnRlIHNrcmlmdGZhcmdlciAoZm9udCBjb2xvcikiLAorICAgICJSZW1vdmUgY3VzdG9tIHR5cGVmYWNlcyAoZm9udCBcInN0eWxlc1wiKS4iOiAiRmplcm5lIGVnZW5kZWZpbmVydGUgc2tyaWZ0dHlwZXIgKGZvbnQgZmFjZSkiLAorICAgICJSZW1vdmUgbGFuZyBhdHRyaWJ1dGVzLiI6ICJGamVybmUgbGFuZy1hdHRyaWJ1dHRlci4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJDbGVhbiBiYWQgSFRNTCBmcm9tIE1pY3Jvc29mdCBXb3JkIjogIlZhc2sgSFRNTCBrb2RlIGZvciBmZWlsIG9nIHByb2JsZW1lciBldHRlciBNaWNyb3NvZnQgV29yZCIsCisgICAgICAgICJHbyI6ICJVdGbDuHIiLAorICAgICAgICAiVGlkeSBmYWlsZWQuICBDaGVjayB5b3VyIEhUTUwgZm9yIHN5bnRheCBlcnJvcnMuIjogIlRpZHkgKFByb2dyYW1tZXQgc29tIHJldHRlciBIVE1MIGtvZGVuKSBmZWlsZXQuIFZlbm5saWdzdCBzZSBvdmVyIEhUTUwga29kZW4gZm9yIGZlaWwuIiwKKyAgICAgICAgIllvdSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIHRpZHkhIjogIkRldCBmaW5uZXMgaW5nZW4gSFRNTCBrb2RlIMOlIHZhc2tlISIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvbmwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJjOGE4YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL25sLmpzCkBAIC0wLDAgKzEsMjcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsZXJlbiIsCisgICAgIkNsZWFuIHVwIEhUTUwiOiAiSFRNTCBvcHNjaG9uZW4iLAorICAgICJHZW5lcmFsIHRpZHkgdXAgYW5kIGNvcnJlY3Rpb24gb2Ygc29tZSBwcm9ibGVtcy4iOiAiQWxnZW1lZW4gb3BzY2hvbmVuIGVuIGNvcnJlY3RpZSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUGxlYXNlIHNlbGVjdCBmcm9tIHRoZSBmb2xsb3dpbmcgY2xlYW5pbmcgb3B0aW9ucy4uLiI6ICJTZWxlY3RlZXIgZGUgZ2V3ZW5zdGUgb3BzY2hvb24gb3B0aWVzLi4uIiwKKyAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICJWZXJ3aWpkZXIgYWFuZ2VwYXN0ZSBsZXR0ZXJncm9vdHRlcyAoZm9udCBzaXplKSIsCisgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIlZlcndpamRlciBhYW5nZXBhc3RlIHRla3N0a2xldXJlbiAoZm9udCBjb2xvcikiLAorICAgICJSZW1vdmUgY3VzdG9tIHR5cGVmYWNlcyAoZm9udCBcInN0eWxlc1wiKS4iOiAiVmVyd2lqZGVyIGFhbmdlcGFzdGUgbGV0dGVydHlwZXMgKGZvbnQgZmFjZSkiLAorICAgICJSZW1vdmUgbGFuZyBhdHRyaWJ1dGVzLiI6ICJWZXJ3aWpkZXIgYWxsZSB0YWFsIChsYW5nKSBhdHRyaWJ1dGVuLiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkNsZWFuIGJhZCBIVE1MIGZyb20gTWljcm9zb2Z0IFdvcmQiOiAiT3ZlcmJvZGlnZS92ZXJrZWVyZGUgSFRNTCB2YW4gTWljcm9zb2Z0IFdvcmQgb3BzY2hvbmVuIiwKKyAgICAgICAgIkdvIjogIk9wc2Nob25lbiIsCisgICAgICAgICJUaWR5IGZhaWxlZC4gIENoZWNrIHlvdXIgSFRNTCBmb3Igc3ludGF4IGVycm9ycy4iOiAiVGlkeSBtaXNsdWt0LiBDb250cm9sZWVyIEhUTUwgb3AgZm91dGVuLiIsCisgICAgICAgICJZb3UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byB0aWR5ISI6ICJFciBpcyBuaWV0cyBvbSBvcCB0ZSBzY2hvbmVuISIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL3BsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvcGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc3OWFmYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL3BsLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicGwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFudWx1aiIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9wdF9ici5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4OGZkM2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9wdF9ici5qcwpAQCAtMCwwICsxLDI2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCisgICAgIkNsZWFuIHVwIEhUTUwiOiAiTGltcGFyIEhUTUwiLAorICAgICJHZW5lcmFsIHRpZHkgdXAgYW5kIGNvcnJlY3Rpb24gb2Ygc29tZSBwcm9ibGVtcy4iOiAiTGltcGVzYSBnZXJhbCBlIGNvcnJlw6fDo28gZGUgYWxndW5zIHByb2JsZW1hcy4iLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBsZWFzZSBzZWxlY3QgZnJvbSB0aGUgZm9sbG93aW5nIGNsZWFuaW5nIG9wdGlvbnMuLi4iOiAiUG9yIGZhdm9yLCBzZWxlY2lvbmUgdW1hIGRhcyBvcMOnw7VlcyBkZSBsaW1wZXNhLi4uIiwKKyAgICAiUmVtb3ZlIGN1c3RvbSBmb250IHNpemVzLiI6ICJSZW1vdmVyIHRhbWFuaG8gZGUgZm9udGVzIHBlcnNvbmFsaXphZG9zIChmb250IHNpemUpLiIsCisgICAgIlJlbW92ZSBjdXN0b20gdGV4dCBjb2xvcnMuIjogIlJlbW92ZXIgY29yZXMgZGUgdGV4dG8gcGVyc29uYWxpemFkb3MgKGZvbnQgY29sb3IpLiIsCisgICAgIlJlbW92ZSBjdXN0b20gdHlwZWZhY2VzIChmb250IFwic3R5bGVzXCIpLiI6ICJSZW1vdmVyIHRpcG9zIGRlIGxldHJhcyBwZXJzb25hbGl6YWRhcyAoZm9udCBcInN0eWxlc1wiKS4iLAorICAgICJSZW1vdmUgbGFuZyBhdHRyaWJ1dGVzLiI6ICJSZW1vdmVyIGF0cmlidXRvcyBkZSBpZGlvbWEuIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQ2xlYW4gYmFkIEhUTUwgZnJvbSBNaWNyb3NvZnQgV29yZCI6ICJMaW1wYXIgY8OzZGlnb3MgbWFsIGZvcm1hdGFkb3MgZG8gTWljcm9zb2Z0IFdvcmQiLAorICAgICAgICAiVGlkeSBmYWlsZWQuICBDaGVjayB5b3VyIEhUTUwgZm9yIHN5bnRheCBlcnJvcnMuIjogIkxpbXBlc2EgZmFsaG91LiBWZXJpZmlxdWUgc2V1IEhUTUwgcG9yIGVycm9zIGRlIHNpbnRheGUuIiwKKyAgICAgICAgIllvdSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIHRpZHkhIjogIlZvY8OqIG7Do28gcG9zc3VpIG5hZGEgcGFyYSBsaW1wYXIhIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvcm8uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9yby5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDZlMWMzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvcm8uanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJybyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKKyAgICAiT0siOiAiQWNjZXB0xIMiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFkNTlmMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL3J1LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicnUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9zaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL3NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZTc2ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9zaC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9zaS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL3NpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NzQ4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy9zaS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiLAorICAgICJPSyI6ICJWIHJlZHUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL3NyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvc3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlZTZmNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL3NyLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL3N2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgzMzZkOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL3N2LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3YiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIk9LIjogIk9LIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL3RoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYTljOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy90aC5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLguKLguIHguYDguKXguLTguIEiLAorICAgICJPSyI6ICLguJXguIHguKXguIciCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL3RyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL2xhbmcvdHIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE0ZTIyYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgIk9LIjogIlRhbWFtIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy92bi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9sYW5nL3ZuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODJlMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vbGFuZy92bi5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInZuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJI4buneSIsCisgICAgIk9LIjogIsSQ4buTbmcgw70iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9wbHVnaW5NZXRob2RzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9TdXBlckNsZWFuL3BsdWdpbk1ldGhvZHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxMjYyMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi9wbHVnaW5NZXRob2RzLmpzCkBAIC0wLDAgKzEsMzU3IEBACitTdXBlckNsZWFuLnByb3RvdHlwZS5fc3VwZXJDbGVhbiA9IGZ1bmN0aW9uKG9wdHMsIG9iaikKK3sKKyAgaWYodGhpcy5lZGl0b3IuY29uZmlnLlN1cGVyQ2xlYW4uc2hvd19kaWFsb2cgJiYgIXRoaXMuX2RpYWxvZykKKyAgeworICAgIHRoaXMuX2RpYWxvZyA9IG5ldyBTdXBlckNsZWFuLkRpYWxvZyh0aGlzKTsKKyAgfQorICB2YXIgc3VwZXJjbGVhbiA9IHRoaXM7CisKKyAgLy8gRG8gdGhlIGNsZWFuIGlmIHdlIGdvdCBvcHRpb25zCisgIHZhciBkb09LID0gZnVuY3Rpb24oKQorICB7CisgICAgc3VwZXJjbGVhbi5fZGlhbG9nLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgibWFpbiIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgc3VwZXJjbGVhbi5fZGlhbG9nLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgid2FpdGluZyIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICBzdXBlcmNsZWFuLl9kaWFsb2cuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJidXR0b25zIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICAKKyAgCXZhciBvcHRzID0gc3VwZXJjbGVhbi5fZGlhbG9nLmRpYWxvZy5nZXRWYWx1ZXMoKTsKKyAgICB2YXIgZWRpdG9yID0gc3VwZXJjbGVhbi5lZGl0b3I7CisKKyAgICBpZihvcHRzLndvcmRfY2xlYW4pIGVkaXRvci5fd29yZENsZWFuKCk7CisgICAgCisgICAgdmFyIEQ7CisgICAgCisgICAgaWYob3B0c1snc2NvcGUnXS52YWx1ZSA9PSAnc2VsZWN0aW9uJykKKyAgICB7CisgICAgICBEID0gZWRpdG9yLmdldFNlbGVjdGVkSFRNTCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgRCA9IGVkaXRvci5nZXRFZGl0b3JDb250ZW50KCk7CisgICAgfQorCisgICAgZm9yKHZhciBmaWx0ZXIgaW4gZWRpdG9yLmNvbmZpZy5TdXBlckNsZWFuLmZpbHRlcnMpCisgICAgeworICAgICAgaWYoZmlsdGVyPT0ndGlkeScgfHwgZmlsdGVyPT0nd29yZF9jbGVhbicpIGNvbnRpbnVlOworICAgICAgCisgICAgICAvLyBBbnkgZnVsbCBvbmx5IG9uZXMgbmVlZCB0byBoYXBwZW4gbGF0ZXIKKyAgICAgIGlmKHR5cGVvZiBmaWx0ZXIgPT0gJ29iamVjdCcgJiYgZmlsdGVyLmZ1bGxvbmx5KSBjb250aW51ZTsKKyAgICAgIAorICAgICAgaWYob3B0c1tmaWx0ZXJdKQorICAgICAgeworICAgICAgICBEID0gU3VwZXJDbGVhbi5maWx0ZXJGdW5jdGlvbnNbZmlsdGVyXShELCBlZGl0b3IpOworICAgICAgfQorICAgIH0KKworICAgIEQgPSBELnJlcGxhY2UoLyhzdHlsZXxjbGFzcyk9IlxzKiIvZ2ksICcnKTsKKyAgICBEID0gRC5yZXBsYWNlKC88KGZvbnR8c3Bhbilccyo+L2dpLCAnJyk7CisKKyAgICBpZihvcHRzWydzY29wZSddLnZhbHVlID09ICdzZWxlY3Rpb24nKQorICAgIHsKKyAgICAgIGVkaXRvci5pbnNlcnRIVE1MKEQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgZWRpdG9yLnNldEVkaXRvckNvbnRlbnQoRCk7CisgICAgfQorCisgICAgLy8gRG8gdGhlIGZ1bGwgb25seSBvbmVzCisgICAgRCA9IGVkaXRvci5nZXRFZGl0b3JDb250ZW50KCk7CisgICAgZm9yKHZhciBmaWx0ZXIgaW4gZWRpdG9yLmNvbmZpZy5TdXBlckNsZWFuLmZpbHRlcnMpCisgICAgeworICAgICAgLy8gU2tpcCB0aWR5IHdlIGRvIHRoYXQgbGFzdCwgYW5kIHdvcmRfY2xlYW4gd2FzIGRvbmUKKyAgICAgIC8vIGZpcnN0CisgICAgICBpZihmaWx0ZXI9PSd0aWR5JyB8fCBmaWx0ZXI9PSd3b3JkX2NsZWFuJykgY29udGludWU7CisgICAgICAKKyAgICAgIC8vIEFueSBmdWxsIG9ubHkgb25lcyBuZWVkIHRvIGhhcHBlbiBsYXN0CisgICAgICBpZih0eXBlb2YgZmlsdGVyID09ICdvYmplY3QnICYmIGZpbHRlci5mdWxsb25seSAmJiBvcHRzW2ZpbHRlcl0pCisgICAgICB7CisgICAgICAgIEQgPSBTdXBlckNsZWFuLmZpbHRlckZ1bmN0aW9uc1tmaWx0ZXJdKEQsIGVkaXRvcik7CisgICAgICB9CisgICAgfQorICAgIAorICAgIGlmKG9wdHMudGlkeSkKKyAgICB7CisgICAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbihqYXZhc2NyaXB0UmVzcG9uc2UpIAorICAgICAgeyAKKyAgICAgICAgZXZhbCgidmFyIHJlc3BvbnNlID0gIiArIGphdmFzY3JpcHRSZXNwb25zZSk7CisgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuYWN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSAnc2V0SFRNTCc6CisgICAgICAgICAgICBlZGl0b3Iuc2V0RWRpdG9yQ29udGVudChyZXNwb25zZS52YWx1ZSk7CisgICAgICAgICAgICBzdXBlcmNsZWFuLl9kaWFsb2cuaGlkZSgpOworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJ2FsZXJ0JzoKKyAgICAgICAgICAgIHN1cGVyY2xlYW4uX2RpYWxvZy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvbnMiKS5zdHlsZS5kaXNwbGF5ID0gIiI7CisgICAgICAgICAgICBzdXBlcmNsZWFuLl9kaWFsb2cuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJvayIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgICAgICAgICBzdXBlcmNsZWFuLl9kaWFsb2cuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJ3YWl0aW5nIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsgCisgICAgICAgICAgICBzdXBlcmNsZWFuLl9kaWFsb2cuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJhbGVydCIpLnN0eWxlLmRpc3BsYXkgPSAiIjsgCisgICAgICAgICAgICBzdXBlcmNsZWFuLl9kaWFsb2cuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJhbGVydCIpLmlubmVySFRNTCA9IHN1cGVyY2xlYW4uX2xjKHJlc3BvbnNlLnZhbHVlKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiAvLyBtYWtlIHRoZSBkaWFsb2cgZ28gYXdheSBpZiBzdGggZ29lcyB3cm9uZywgd2hvIGtub3dzLi4uCisgICAgICAgICAgIHN1cGVyY2xlYW4uX2RpYWxvZy5oaWRlKCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIAorICAgICAgdmFyIGFyZ3MgPSBlZGl0b3IuY29uZmlnLlN1cGVyQ2xlYW4udGlkeV9hcmdzOyAKKyAgICAgIGlmICggdHlwZW9mIGFyZ3MgIT0gJ29iamVjdCcgKSAKKyAgICAgIHsgCisgICAgICAgIGFyZ3MgPSB7fTsgCisgICAgICB9IAorICAgICAgYXJnc1snY29udGVudCddID0gIGVkaXRvci5nZXRJbm5lckhUTUwoKTsgCisgICAgIAorICAgICAgWGluaGEuX3Bvc3RiYWNrKGVkaXRvci5jb25maWcuU3VwZXJDbGVhbi50aWR5X2hhbmRsZXIsIGFyZ3MsIGNhbGxiYWNrKTsgICAgICAgCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBzdXBlcmNsZWFuLl9kaWFsb2cuaGlkZSgpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGlmKHRoaXMuZWRpdG9yLmNvbmZpZy5TdXBlckNsZWFuLnNob3dfZGlhbG9nKQorICB7CisgICAgdmFyIGlucHV0cyA9IHt9OworICAgIHRoaXMuX2RpYWxvZy5zaG93KGlucHV0cywgZG9PSyk7CisgIH0KKyAgZWxzZQorICB7CisgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworICAgIHZhciBodG1sID0gZWRpdG9yLmdldEVkaXRvckNvbnRlbnQoKTsKKyAgICBmb3IodmFyIGZpbHRlciBpbiBlZGl0b3IuY29uZmlnLlN1cGVyQ2xlYW4uZmlsdGVycykKKyAgICB7CisgICAgICBpZihmaWx0ZXI9PSd0aWR5JykgY29udGludWU7IC8vY2FsbCB0aWR5IGxhc3QKKyAgICAgIGh0bWwgPSBTdXBlckNsZWFuLmZpbHRlckZ1bmN0aW9uc1tmaWx0ZXJdKGh0bWwsIGVkaXRvcik7CisgICAgfQorCisgICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvKHN0eWxlfGNsYXNzKT0iXHMqIi9naSwgJycpOworICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLzwoZm9udHxzcGFuKVxzKj4vZ2ksICcnKTsKKworICAgIGVkaXRvci5zZXRFZGl0b3JDb250ZW50KGh0bWwpOworCisgICAgaWYoZWRpdG9yLmNvbmZpZy5TdXBlckNsZWFuLmZpbHRlcnMudGlkeSkKKyAgICB7CisgICAgICBTdXBlckNsZWFuLmZpbHRlckZ1bmN0aW9ucy50aWR5KGh0bWwsIGVkaXRvcik7CisgICAgfQorICB9Cit9OworCitTdXBlckNsZWFuLmZpbHRlckZ1bmN0aW9ucy5yZW1vdmVfY29sb3JzID0gZnVuY3Rpb24oRCkKK3sKKyAgRCA9IEQucmVwbGFjZSgvY29sb3I9Ij9bXiIgPl0qIj8vZ2ksICcnKTsKKyAgLy8geyAoc3RvcHMgamVkaXQncyBmb2xkIGJyZWFraW5nKQorICBEID0gRC5yZXBsYWNlKC8oW14tXSljb2xvcjpbXjt9IiddKzs/L2dpLCAnJDEnKTsKKyAgcmV0dXJuKEQpOworfTsKK1N1cGVyQ2xlYW4uZmlsdGVyRnVuY3Rpb25zLnJlbW92ZV9zaXplcyA9IGZ1bmN0aW9uKEQpCit7CisgIEQgPSBELnJlcGxhY2UoL3NpemU9Ij9bXiIgPl0qIj8vZ2ksICcnKTsKKyAgLy8geyAoc3RvcHMgamVkaXQncyBmb2xkIGJyZWFraW5nKQorICBEID0gRC5yZXBsYWNlKC9mb250LXNpemU6W147fSInXSs7Py9naSwgJycpOworICByZXR1cm4oRCk7Cit9OworU3VwZXJDbGVhbi5maWx0ZXJGdW5jdGlvbnMucmVtb3ZlX2ZhY2VzID0gZnVuY3Rpb24oRCkKK3sKKyAgRCA9IEQucmVwbGFjZSgvZmFjZT0iP1teIiA+XSoiPy9naSwgJycpOworICAvLyB7IChzdG9wcyBqZWRpdCdzIGZvbGQgYnJlYWtpbmcpCisgIEQgPSBELnJlcGxhY2UoL2ZvbnQtZmFtaWx5OlteO30iJ10rOz8vZ2ksICcnKTsKKyAgcmV0dXJuKEQpOworfTsKK1N1cGVyQ2xlYW4uZmlsdGVyRnVuY3Rpb25zLnJlbW92ZV9sYW5nID0gZnVuY3Rpb24oRCkKK3sKKyAgRCA9IEQucmVwbGFjZSgvbGFuZz0iP1teIiA+XSoiPy9naSwgJycpOworICByZXR1cm4oRCk7Cit9OworU3VwZXJDbGVhbi5maWx0ZXJGdW5jdGlvbnMud29yZF9jbGVhbiA9IGZ1bmN0aW9uKGh0bWwsIGVkaXRvcikKK3sKKyAgZWRpdG9yLnNldEhUTUwoaHRtbCk7CisgIGVkaXRvci5fd29yZENsZWFuKCk7CisgIHJldHVybiBlZGl0b3IuZ2V0SW5uZXJIVE1MKCk7Cit9OworCitTdXBlckNsZWFuLmZpbHRlckZ1bmN0aW9ucy5yZW1vdmVfZmFuY3lfcXVvdGVzID0gZnVuY3Rpb24oRCkKK3sKKyAgRCA9IEQucmVwbGFjZShuZXcgUmVnRXhwKFN0cmluZy5mcm9tQ2hhckNvZGUoODIxNiksImciKSwiJyIpOworICBEID0gRC5yZXBsYWNlKG5ldyBSZWdFeHAoU3RyaW5nLmZyb21DaGFyQ29kZSg4MjE3KSwiZyIpLCInIik7CisgIEQgPSBELnJlcGxhY2UobmV3IFJlZ0V4cChTdHJpbmcuZnJvbUNoYXJDb2RlKDgyMTgpLCJnIiksIiciKTsKKyAgRCA9IEQucmVwbGFjZShuZXcgUmVnRXhwKFN0cmluZy5mcm9tQ2hhckNvZGUoODIxOSksImciKSwiJyIpOworICBEID0gRC5yZXBsYWNlKG5ldyBSZWdFeHAoU3RyaW5nLmZyb21DaGFyQ29kZSg4MjIwKSwiZyIpLCJcIiIpOworICBEID0gRC5yZXBsYWNlKG5ldyBSZWdFeHAoU3RyaW5nLmZyb21DaGFyQ29kZSg4MjIxKSwiZyIpLCJcIiIpOworICBEID0gRC5yZXBsYWNlKG5ldyBSZWdFeHAoU3RyaW5nLmZyb21DaGFyQ29kZSg4MjIyKSwiZyIpLCJcIiIpOworICBEID0gRC5yZXBsYWNlKG5ldyBSZWdFeHAoU3RyaW5nLmZyb21DaGFyQ29kZSg4MjIzKSwiZyIpLCJcIiIpOworICByZXR1cm4gRDsKK307CisKK1N1cGVyQ2xlYW4uZmlsdGVyRnVuY3Rpb25zLnRpZHkgPSBmdW5jdGlvbihodG1sLCBlZGl0b3IpCit7CisgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKGphdmFzY3JpcHRSZXNwb25zZSkgCisgIHsKKyAgICBldmFsKCJ2YXIgcmVzcG9uc2UgPSAiICsgamF2YXNjcmlwdFJlc3BvbnNlKTsKKyAgICBzd2l0Y2ggKHJlc3BvbnNlLmFjdGlvbikKKyAgICB7CisgICAgICBjYXNlICdzZXRIVE1MJzoKKyAgICAgICAgZWRpdG9yLnNldEVkaXRvckNvbnRlbnQocmVzcG9uc2UudmFsdWUpOworICAgICAgYnJlYWs7CisgICAgICBjYXNlICdhbGVydCc6CisgICAgICAgIGFsZXJ0KFhpbmhhLl9sYyhyZXNwb25zZS52YWx1ZSwgJ1N1cGVyQ2xlYW4nKSk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgCisgIHZhciBhcmdzID0gZWRpdG9yLmNvbmZpZy5TdXBlckNsZWFuLnRpZHlfYXJnczsgCisgIGlmICggdHlwZW9mIGFyZ3MgIT0gJ29iamVjdCcgKSAKKyAgeyAKKyAgICBhcmdzID0ge307IAorICB9CisgIGFyZ3NbJ2NvbnRlbnQnXSA9ICBodG1sOyAKKyAgCisgIFhpbmhhLl9wb3N0YmFjayhlZGl0b3IuY29uZmlnLlN1cGVyQ2xlYW4udGlkeV9oYW5kbGVyLCBhcmdzLCBjYWxsYmFjayk7ICAgICAgICAgCit9OworCitTdXBlckNsZWFuLmZpbHRlckZ1bmN0aW9ucy5yZW1vdmVfZW1waGFzaXMgPSBmdW5jdGlvbihodG1sKQoreyAgCisgIGh0bWwgPSBTdXBlckNsZWFuLnN0cmlwVGFncyhodG1sLCBbICdiJywgJ3N0cm9uZycsICdpJywgJ2VtJywgJ3UnLCAnbWFyaycsICdpbnMnLCdhYmJyJywgJ2Fjcm9ueW0nLCAna2JkJywgJ3NhbXAnLCAnc3RyaWtlJywgJ3MnICBdKTsKKyAgCisgIC8vIGZvciBkZWwgd2UgZGVsZXRlIGl0IGVudGlyZWx5IG9yIGl0IHdvdWxkIGJlIGNvbmZpc2luZyAoPGRlbD5vbGQgdGhpbmc8L2RlbD4gPGlucz5uZXcgdGhpbmc8L2lucz4gd291bGQgYmVjb21lIG9sZCB0aGluZyBuZXcgdGhpbmcpICAKKyAgaHRtbCA9IFN1cGVyQ2xlYW4uc3RyaXBUYWdzKGh0bWwsIFsgJ2RlbCcgXSwgdHJ1ZSk7CisgIAorICBodG1sID0gaHRtbC5yZXBsYWNlKC9mb250LXdlaWdodDpbXjt9IiddKzs/L2dpLCAnJyk7CisgIGh0bWwgPSBodG1sLnJlcGxhY2UoL2ZvbnQtc3R5bGU6W147fSInXSs7Py9naSwgJycpOworICByZXR1cm4gaHRtbDsKK307CisKK1N1cGVyQ2xlYW4uZmlsdGVyRnVuY3Rpb25zLnJlbW92ZV9zdXBfc3ViID0gZnVuY3Rpb24oaHRtbCkKK3sKKyAgcmV0dXJuIFN1cGVyQ2xlYW4uc3RyaXBUYWdzKGh0bWwsIFsnc3VwJywgJ3N1YiddKS5yZXBsYWNlKC92ZXJ0aWNhbC1hbGlnbjpccyooc3VifHN1cGVyKVteO30iJ10rOz8vZ2kpOworfTsKKworU3VwZXJDbGVhbi5maWx0ZXJGdW5jdGlvbnMucmVtb3ZlX2FsaWdubWVudCA9IGZ1bmN0aW9uKGh0bWwpCit7CisgIHJldHVybiBodG1sLnJlcGxhY2UoLyBhbGlnbj1bXlxzfD5dKi9naSwnJykucmVwbGFjZSgvKHRleHQtYWxpZ258dmVydGljYWwtYWxpZ258ZmxvYXQpOlteO30iJ10rOz8vZ2ksICcnKTsKK307CisKK1N1cGVyQ2xlYW4uZmlsdGVyRnVuY3Rpb25zLnJlbW92ZV9hbGxfY3NzX2NsYXNzZXMgPSBmdW5jdGlvbihodG1sKQoreworICByZXR1cm4gU3VwZXJDbGVhbi5zdHJpcEF0dHJpYnV0ZXMoaHRtbCwgJ2NsYXNzJyk7Cit9OworCitTdXBlckNsZWFuLmZpbHRlckZ1bmN0aW9ucy5yZW1vdmVfYWxsX2Nzc19zdHlsZXMgPSBmdW5jdGlvbihodG1sKQoreworICByZXR1cm4gU3VwZXJDbGVhbi5zdHJpcEF0dHJpYnV0ZXMoaHRtbCwgJ3N0eWxlJyk7Cit9OworCitTdXBlckNsZWFuLmZpbHRlckZ1bmN0aW9ucy5yZW1vdmVfYWxsX3RhZ3MgPSBmdW5jdGlvbihodG1sKQoreworICByZXR1cm4gIGh0bWwucmVwbGFjZSgvPFtcIV0qP1tePD5dKj8+L2csICIiKTsKK307CisKK1N1cGVyQ2xlYW4uRGlhbG9nID0gZnVuY3Rpb24gKFN1cGVyQ2xlYW4pCit7CisgIHZhciAgbERpYWxvZyA9IHRoaXM7CisgIHRoaXMuRGlhbG9nX254dGlkID0gMDsKKyAgdGhpcy5TdXBlckNsZWFuID0gU3VwZXJDbGVhbjsKKyAgdGhpcy5pZCA9IHsgfTsgLy8gVGhpcyB3aWxsIGJlIGZpbGxlZCBiZWxvdyB3aXRoIGEgcmVwbGFjZSwgbmlmdHkKKworICB0aGlzLnJlYWR5ID0gZmFsc2U7CisgIHRoaXMuZGlhbG9nID0gZmFsc2U7CisKKyAgLy8gbG9hZCB0aGUgZFRyZWUgc2NyaXB0CisgIHRoaXMuX3ByZXBhcmVEaWFsb2coKTsKKworfTsKKworU3VwZXJDbGVhbi5EaWFsb2cucHJvdG90eXBlLl9wcmVwYXJlRGlhbG9nID0gZnVuY3Rpb24oKQoreworICB2YXIgbERpYWxvZyA9IHRoaXM7CisgIHZhciBTdXBlckNsZWFuID0gdGhpcy5TdXBlckNsZWFuOworCisgIHZhciBodG1sID0gd2luZG93LlN1cGVyQ2xlYW4uaHRtbDsKKworICB2YXIgaHRtbEZpbHRlcnMgPSAiIjsKKyAgZm9yKHZhciBmaWx0ZXIgaW4gdGhpcy5TdXBlckNsZWFuLmVkaXRvci5jb25maWcuU3VwZXJDbGVhbi5maWx0ZXJzKQorICB7CisgICAgaHRtbEZpbHRlcnMgKz0gIiAgICA8ZGl2PlxuIjsKKyAgICB2YXIgZmlsdERldGFpbCA9IHRoaXMuU3VwZXJDbGVhbi5lZGl0b3IuY29uZmlnLlN1cGVyQ2xlYW4uZmlsdGVyc1tmaWx0ZXJdOworICAgIGlmKHR5cGVvZiBmaWx0RGV0YWlsLmxhYmVsID09ICd1bmRlZmluZWQnKQorICAgIHsKKyAgICAgIGh0bWxGaWx0ZXJzICs9ICIgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiWyIrZmlsdGVyKyJdXCIgaWQ9XCJbIitmaWx0ZXIrIl1cIiBjaGVja2VkIHZhbHVlPVwib25cIiAvPlxuIjsKKyAgICAgIGh0bWxGaWx0ZXJzICs9ICIgICAgICAgIDxsYWJlbCBmb3I9XCJbIitmaWx0ZXIrIl1cIj4iK3RoaXMuU3VwZXJDbGVhbi5lZGl0b3IuY29uZmlnLlN1cGVyQ2xlYW4uZmlsdGVyc1tmaWx0ZXJdKyI8L2xhYmVsPlxuIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGh0bWxGaWx0ZXJzICs9ICIgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiWyIrZmlsdGVyKyJdXCIgaWQ9XCJbIitmaWx0ZXIrIl1cIiB2YWx1ZT1cIm9uXCIiICsgKGZpbHREZXRhaWwuY2hlY2tlZCA/ICJjaGVja2VkIiA6ICIiKSArICIgLz5cbiI7CisgICAgICBodG1sRmlsdGVycyArPSAiICAgICAgICA8bGFiZWwgZm9yPVwiWyIrZmlsdGVyKyJdXCI+IitmaWx0RGV0YWlsLmxhYmVsKyhmaWx0RGV0YWlsLmZ1bGxvbmx5PydeICc6JycpKyI8L2xhYmVsPlxuIjsKKyAgICB9CisgICAgaHRtbEZpbHRlcnMgKz0gIiAgICA8L2Rpdj5cbiI7CisgIH0KKyAgaHRtbCA9IGh0bWwucmVwbGFjZSgnPCEtLWZpbHRlcnMtLT4nLCBodG1sRmlsdGVycyk7CisKKworICAvLyBOb3cgd2UgaGF2ZSBldmVyeXRoaW5nIHdlIG5lZWQsIHNvIHdlIGNhbiBidWlsZCB0aGUgZGlhbG9nLgorICB2YXIgZGlhbG9nID0gdGhpcy5kaWFsb2cgPSBuZXcgWGluaGEuRGlhbG9nKFN1cGVyQ2xlYW4uZWRpdG9yLCBodG1sLCAnU3VwZXJDbGVhbicse3dpZHRoOjQwMH0pOworCisgIHRoaXMucmVhZHkgPSB0cnVlOworfTsKKworU3VwZXJDbGVhbi5EaWFsb2cucHJvdG90eXBlLl9sYyA9IFN1cGVyQ2xlYW4ucHJvdG90eXBlLl9sYzsKKworU3VwZXJDbGVhbi5EaWFsb2cucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbihpbnB1dHMsIG9rLCBjYW5jZWwpCit7CisgIGlmKCF0aGlzLnJlYWR5KQorICB7CisgICAgdmFyIGxEaWFsb2cgPSB0aGlzOworICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge2xEaWFsb2cuc2hvdyhpbnB1dHMsb2ssY2FuY2VsKTt9LDEwMCk7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gQ29ubmVjdCB0aGUgT0sgYW5kIENhbmNlbCBidXR0b25zCisgIHZhciBkaWFsb2cgPSB0aGlzLmRpYWxvZzsKKyAgdmFyIGxEaWFsb2cgPSB0aGlzOworICBpZihvaykKKyAgeworICAgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdvaycpLm9uY2xpY2sgPSBvazsKKyAgfQorICBlbHNlCisgIHsKKyAgICB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgnb2snKS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7bERpYWxvZy5oaWRlKCk7fTsKKyAgfQorCisgIGlmKGNhbmNlbCkKKyAgeworICAgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdjYW5jZWwnKS5vbmNsaWNrID0gY2FuY2VsOworICB9CisgIGVsc2UKKyAgeworICAgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdjYW5jZWwnKS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7IGxEaWFsb2cuaGlkZSgpfTsKKyAgfQorCisgIC8vIElmIHRoZXJlIGlzIHNlbGVjdGVkIHRleHQsIHNldCB0aGF0IHRoZSBkZWZhdWx0IHNjb3BlCisgIGlmKHRoaXMuU3VwZXJDbGVhbi5lZGl0b3IuaGFzU2VsZWN0ZWRUZXh0KCkpCisgIHsKKyAgICB0aGlzLmRpYWxvZy5nZXRFbGVtZW50c0J5TmFtZSgnc2NvcGUnKVswXS5zZWxlY3RlZEluZGV4ID0gMTsKKyAgfQorICBlbHNlCisgIHsKKyAgICB0aGlzLmRpYWxvZy5nZXRFbGVtZW50c0J5TmFtZSgnc2NvcGUnKVswXS5zZWxlY3RlZEluZGV4ID0gMDsKKyAgfQorICAKKyAgLy8gU2hvdyB0aGUgZGlhbG9nCisgIHRoaXMuU3VwZXJDbGVhbi5lZGl0b3IuZGlzYWJsZVRvb2xiYXIoWydmdWxsc2NyZWVuJywnU3VwZXJDbGVhbiddKTsKKworICB0aGlzLmRpYWxvZy5zaG93KGlucHV0cyk7CisKKyAgLy8gSW5pdCB0aGUgc2l6ZXMKKyAgdGhpcy5kaWFsb2cub25yZXNpemUoKTsKK307CisKK1N1cGVyQ2xlYW4uRGlhbG9nLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24oKQoreworICB2YXIgcmV0ID0gdGhpcy5kaWFsb2cuaGlkZSgpOworICB0aGlzLlN1cGVyQ2xlYW4uZWRpdG9yLmVuYWJsZVRvb2xiYXIoKTsKKyAgdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoIm1haW4iKS5zdHlsZS5kaXNwbGF5ID0gIiI7CisgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJidXR0b25zIikuc3R5bGUuZGlzcGxheSA9ICIiOworICB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgid2FpdGluZyIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJhbGVydCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJvayIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgcmV0dXJuIHJldDsKK307CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vdGlkeS5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1N1cGVyQ2xlYW4vdGlkeS5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZmNzk4MQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvU3VwZXJDbGVhbi90aWR5LnBocApAQCAtMCwwICsxLDE3OSBAQAorPD9waHAKKyAgLyoqIFRoaXMgUEhQIGZpbGUgaXMgaW50ZW5kZWQgZm9yIHVzZSB3aXRoIFhNTEhUVFBSZXF1ZXN0IGZyb20gWGluaGEKKyAgICogaXQgcmVxdXJucyBqYXZhc2NyaXB0IHRvIHNldCB0aGUgWGluaGEgaHRtbCB3aXRoIHRpZGllZCBodG1sIHRoYXQgaXMKKyAgICogc3VibWl0dGVkIGluIGEgJF9QT1NUIHBhcmFtZXRlciBjYWxsZWQgJ2NvbnRlbnQnCisgICAqLworCisgIGlmKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpCisgIHsKKyAgICAvLyB0cmlnZ2VyX2Vycm9yKCdNYWdpYyBRdW90ZXMgR1BDIGlzIG9uLCBjbGVhbmluZyBHUEMuJywgRV9VU0VSX05PVElDRSk7CisgICAgJHRvX2NsZWFuID0gYXJyYXkoJiRfR0VULCAmJF9QT1NULCAmJF9SRVFVRVNULCAmJF9DT09LSUUpOworICAgIHdoaWxlKGNvdW50KCR0b19jbGVhbikpCisgICAgeworICAgICAgJGNsZWFuaW5nID0mICR0b19jbGVhblthcnJheV9wb3AoYXJyYXlfa2V5cygkdG9fY2xlYW4pKV07CisgICAgICB1bnNldCgkdG9fY2xlYW5bYXJyYXlfcG9wKGFycmF5X2tleXMoJHRvX2NsZWFuKSldKTsKKyAgICAgIGZvcmVhY2goYXJyYXlfa2V5cygkY2xlYW5pbmcpIGFzICRrKQorICAgICAgeworICAgICAgICBpZihpc19hcnJheSgkY2xlYW5pbmdbJGtdKSkKKyAgICAgICAgeworICAgICAgICAgICR0b19jbGVhbltdID0mICRjbGVhbmluZ1ska107CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgJGNsZWFuaW5nWyRrXSA9IHN0cmlwc2xhc2hlcygkY2xlYW5pbmdbJGtdKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgnKTsKKworICAvKiogRnVuY3Rpb24gdG8gUE9TVCBzb21lIGRhdGEgdG8gYSBVUkwgKi8KKyAgZnVuY3Rpb24gUG9zdEl0KCREYXRhU3RyZWFtLCAkVVJMKQorICB7CisKKy8vICBTdHJpcCBodHRwOi8vIGZyb20gdGhlIFVSTCBpZiBwcmVzZW50CisgICAgJFVSTCA9IHByZWdfcmVwbGFjZSgiL15odHRwcz86XC9cLy9pIiwgIiIsICRVUkwpOworCisvLyAgU2VwYXJhdGUgaW50byBIb3N0IGFuZCBVUkkKKyAgICAkSG9zdCA9IHN1YnN0cigkVVJMLCAwLCBzdHJwb3MoJFVSTCwgIi8iKSk7CisgICAgJFVSSSA9IHN0cnN0cigkVVJMLCAiLyIpOworCisvLyAgRm9ybSB1cCB0aGUgcmVxdWVzdCBib2R5CisgICAgJFJlcUJvZHkgPSAiIjsKKyAgICB3aGlsZSAobGlzdCgka2V5LCAkdmFsKSA9IGVhY2goJERhdGFTdHJlYW0pKSB7CisgICAgICBpZiAoJFJlcUJvZHkpICRSZXFCb2R5Lj0gIiYiOworICAgICAgJFJlcUJvZHkuPSAka2V5LiI9Ii51cmxlbmNvZGUoJHZhbCk7CisgICAgfQorICAgICRDb250ZW50TGVuZ3RoID0gc3RybGVuKCRSZXFCb2R5KTsKKworLy8gIEdlbmVyYXRlIHRoZSByZXF1ZXN0IGhlYWRlcgorICAgICRSZXFIZWFkZXIgPQorICAgICAgIlBPU1QgJFVSSSBIVFRQLzEuMFxuIi4KKyAgICAgICJIb3N0OiAkSG9zdFxuIi4KKyAgICAgICJVc2VyLUFnZW50OiBQb3N0SXRcbiIuCisgICAgICAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcbiIuCisgICAgICAiQ29udGVudC1MZW5ndGg6ICRDb250ZW50TGVuZ3RoXG5cbiIuCisgICAgICAiJFJlcUJvZHlcbiI7CisKKy8vICAgICBlY2hvICRSZXFIZWFkZXI7CisKKworLy8gIE9wZW4gdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QKKyAgICAkc29ja2V0ID0gZnNvY2tvcGVuKCRIb3N0LCA4MCwgJGVycm5vLCAkZXJyc3RyKTsKKyAgICBpZiAoISRzb2NrZXQpIHsKKyAgICAgICRyZXN1bHQgPSAiKCRlcnJubykgJGVycnN0ciI7CisgICAgICByZXR1cm4gJFJlc3VsdDsKKyAgICB9CisKKyAgICBmcHV0cygkc29ja2V0LCAkUmVxSGVhZGVyKTsKKworICAgICRyZXN1bHQgPSAnJzsKKyAgICB3aGlsZSghZmVvZigkc29ja2V0KSkKKyAgICB7CisgICAgICAkcmVzdWx0IC49IGZnZXRzKCRzb2NrZXQpOworICAgIH0KKyAgICByZXR1cm4gJHJlc3VsdDsKKyAgfQorCisKKyAgZnVuY3Rpb24ganNfZW5jb2RlKCRzdHJpbmcpCisgIHsKKyAgICBzdGF0aWMgJHN0cmluZ3MgPSAiXFwsXCIsJywlLCYsPCw+LHssfSxALFxuLFxyIjsKKworICAgIGlmKCFpc19hcnJheSgkc3RyaW5ncykpCisgICAgeworICAgICAgJHRyID0gYXJyYXkoKTsKKyAgICAgIGZvcmVhY2goZXhwbG9kZSgnLCcsICRzdHJpbmdzKSBhcyAkY2hyKQorICAgICAgeworICAgICAgICAkdHJbJGNocl0gPSBzcHJpbnRmKCdceCUwMlgnLCBvcmQoJGNocikpOworICAgICAgfQorICAgICAgJHN0cmluZ3MgPSAkdHI7CisgICAgfQorCisgICAgcmV0dXJuIHN0cnRyKCRzdHJpbmcsICRzdHJpbmdzKTsKKyAgfQorCisgIC8vIEFueSBlcnJvcnMgd291bGQgc2NyZXEgdXAgb3VyIGphdmFzY3JpcHQKKyAgZXJyb3JfcmVwb3J0aW5nKDApOworICBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIGZhbHNlKTsKKworICBpZih0cmltKEAkX1JFUVVFU1RbJ2NvbnRlbnQnXSkpCisgIHsKKyAgICAvLyBQSFAncyB1cmxkZWNvZGUgZG9lc24ndCB1bmRlcnN0YW5kICV1SEhISCBmb3IgdW5pY29kZQorICAgICRfUkVRVUVTVFsnY29udGVudCddID0gcHJlZ19yZXBsYWNlKCcvJXUoW2EtZjAtOV17NCw0fSkvZWknLCAndXRmOF9jaHIoMHgkMSknLCAkX1JFUVVFU1RbJ2NvbnRlbnQnXSk7CisgICAgZnVuY3Rpb24gdXRmOF9jaHIoJG51bSkKKyAgICB7CisgICAgICBpZigkbnVtPDEyOClyZXR1cm4gY2hyKCRudW0pOworICAgICAgaWYoJG51bTwxMDI0KXJldHVybiBjaHIoKCRudW0+PjYpKzE5MikuY2hyKCgkbnVtJjYzKSsxMjgpOworICAgICAgaWYoJG51bTwzMjc2OClyZXR1cm4gY2hyKCgkbnVtPj4xMikrMjI0KS5jaHIoKCgkbnVtPj42KSY2MykrMTI4KS5jaHIoKCRudW0mNjMpKzEyOCk7CisgICAgICBpZigkbnVtPDIwOTcxNTIpcmV0dXJuIGNocigoJG51bT4+MTgpKzI0MCkuY2hyKCgoJG51bT4+MTIpJjYzKSsxMjgpLmNocigoKCRudW0+PjYpJjYzKSsxMjgpIC5jaHIoKCRudW0mNjMpKzEyOCk7CisgICAgICByZXR1cm4gJyc7CisgICAgfQorICAgIG9iX3N0YXJ0KCk7CisgICAgICBwYXNzdGhydSgiZWNobyAiIC4gIGVzY2FwZXNoZWxsYXJnKCRfUkVRVUVTVFsnY29udGVudCddKSAuICIgfCB0aWR5IC1xIC1pIC11IC13cmFwIDk5OTkgLXV0ZjggLWJhcmUgLWFzeGh0bWwgMj4vZGV2L251bGwiLCAkcmVzdWx0KTsKKyAgICAgICRjb250ZW50ID0gb2JfZ2V0X2NvbnRlbnRzKCk7CisgICAgb2JfZW5kX2NsZWFuKCk7CisKKyAgICBpZihzdHJsZW4oJGNvbnRlbnQpIDwgNCkKKyAgICB7CisgICAgICAvLyBUaWR5IG9uIHRoZSBsb2NhbCBtYWNoaW5lIGZhaWxlZCwgdHJ5IGEgcG9zdAorICAgICAgJHJlc18xCisgICAgICAgID0gUG9zdEl0KAorICAgICAgICAgIGFycmF5CisgICAgICAgICAgICAoCisgICAgICAgICAgICAgICdfZnVuY3Rpb24nID0+ICd0aWR5JywKKyAgICAgICAgICAgICAgJ19odG1sJyAgID0+ICRfUkVRVUVTVFsnY29udGVudCddLAorICAgICAgICAgICAgICAnY2hhci1lbmNvZGluZycgPT4gJ3V0ZjgnLAorICAgICAgICAgICAgICAnX291dHB1dCcgICAgICAgPT4gJ3dhcm4nLAorICAgICAgICAgICAgICAnaW5kZW50JyAgICAgICAgPT4gJ2F1dG8nLAorICAgICAgICAgICAgICAnd3JhcCcgICAgICAgICAgPT4gOTk5OSwKKyAgICAgICAgICAgICAgJ2JyZWFrLWJlZm9yZS1icicgPT4gJ3knLAorICAgICAgICAgICAgICAnYmFyZScgICAgICAgICAgPT4gJ24nLAorICAgICAgICAgICAgICAnd29yZC0yMDAwJyAgICAgPT4gJ24nLAorICAgICAgICAgICAgICAnZHJvcC1lbXB0eS1wYXJhcycgPT4gJ3knLAorICAgICAgICAgICAgICAnZHJvcC1mb250LXRhZ3MnID0+ICduJywKKworICAgICAgICAgICAgKSwKKyAgICAgICAgICAnaHR0cDovL2luZm9ob3VuZC5uZXQvdGlkeS90aWR5LnBsJyk7CisKKyAgICAgIGlmKHByZWdfbWF0Y2goJy88YSBocmVmPSIoW14iXSspIiB0aXRsZScuJz0iU2F2ZSB0aGUgdGlkaWVkIEhUTUwvJywgJHJlc18xLCAkbSkpCisgICAgICB7CisgICAgICAgICR0Z3QgPSBzdHJ0cigkbVsxXSwgYXJyYXlfZmxpcChnZXRfaHRtbF90cmFuc2xhdGlvbl90YWJsZShIVE1MX0VOVElUSUVTKSkpOworICAgICAgICAkY29udGVudCA9IGltcGxvZGUoJycsIGZpbGUoJ2h0dHA6Ly9pbmZvaG91bmQubmV0L3RpZHkvJyAuICR0Z3QpKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZihzdHJsZW4oJGNvbnRlbnQpICYmICEgcHJlZ19tYXRjaCgnLzxcL2JvZHk+L2knLCAkX1JFUVVFU1RbJ2NvbnRlbnQnXSkpCisgICAgeworICAgICAgaWYoIHByZWdfbWF0Y2goJy88Ym9keVtePl0qPiguKik8XC9ib2R5Pi9pcycsICRjb250ZW50LCAkbWF0Y2hlcykgKQorICAgICAgeworICAgICAgICAkY29udGVudCA9ICRtYXRjaGVzWzFdOworICAgICAgfQorICAgIH0KKyAgICBlbHNlaWYoIXN0cmxlbigkY29udGVudCkpCisgICAgeworICAgICAgJGNvbnRlbnQgPSAkX1JFUVVFU1RbJ2NvbnRlbnQnXTsKKyAgICB9CisKKyAgICBpZigkY29udGVudCkKKyAgICB7CisgICAgICA/PgorICAgICAge2FjdGlvbjonc2V0SFRNTCcsdmFsdWU6Jzw/cGhwIGVjaG8ganNfZW5jb2RlKCRjb250ZW50KSA/Pid9OworICAgICAgPD9waHAKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgID8+CisgICAgICB7YWN0aW9uOidhbGVydCcsdmFsdWU6J1RpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLid9OworICAgICAgPD9waHAKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgPz4KKyAgICB7YWN0aW9uOidhbGVydCcsdmFsdWU6IllvdSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIHRpZHkhIn0KKyAgICA8P3BocAorICB9CisKKz8+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9UYWJsZU9wZXJhdGlvbnMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9UYWJsZU9wZXJhdGlvbnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I2YjViZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL1RhYmxlT3BlcmF0aW9ucy5qcwpAQCAtMCwwICsxLDk3NCBAQAorLy8gVGFibGUgT3BlcmF0aW9ucyBQbHVnaW4gZm9yIEhUTUxBcmVhLTMuMAorLy8gSW1wbGVtZW50YXRpb24gYnkgTWloYWkgQmF6b24uICBTcG9uc29yZWQgYnkgaHR0cDovL3d3dy5ibG9raS5jb20KKy8vCisvLyBodG1sQXJlYSB2My4wIC0gQ29weXJpZ2h0IChjKSAyMDAyIGludGVyYWN0aXZldG9vbHMuY29tLCBpbmMuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gQSBmcmVlIFdZU0lXWUcgZWRpdG9yIHJlcGxhY2VtZW50IGZvciA8dGV4dGFyZWE+IGZpZWxkcy4KKy8vIEZvciBmdWxsIHNvdXJjZSBjb2RlIGFuZCBkb2NzLCB2aXNpdCBodHRwOi8vd3d3LmludGVyYWN0aXZldG9vbHMuY29tLworLy8KKy8vIFZlcnNpb24gMy4wIGRldmVsb3BlZCBieSBNaWhhaSBCYXpvbiBmb3IgSW50ZXJhY3RpdmVUb29scy4KKy8vICAgaHR0cDovL2R5bmFyY2guY29tL21pc2hvbworLy8KKy8vICRJZDogVGFibGVPcGVyYXRpb25zLmpzIDE0MDIgMjAxOC0wMi0xOSAwNzozNTo0OVogZ29nbyAkCisKKy8vIE9iamVjdCB0aGF0IHdpbGwgZW5jYXBzdWxhdGUgYWxsIHRoZSB0YWJsZSBvcGVyYXRpb25zIHByb3ZpZGVkIGJ5CisvLyBIVE1MQXJlYS0zLjAgKGV4Y2VwdCAiaW5zZXJ0IHRhYmxlIiB3aGljaCBpcyBpbmNsdWRlZCBpbiB0aGUgbWFpbiBmaWxlKQorWGluaGEuQ29uZmlnLnByb3RvdHlwZS5UYWJsZU9wZXJhdGlvbnMgPSB7CisgICdzaG93QnV0dG9ucycgOiB0cnVlLCAvLyBTZXQgdG8gZmFsc2UgdG8gaGlkZSBhbGwgYnV0IGluc2VydHRhYmxlIGFuZCB0b2dnbGVib3JkZXJzIGJ1dHRvbnMgb24gdGhlIHRvb2xiYXIKKyAgLy8gdGhpcyBpcyB1c2VmdWwgaWYgeW91IGhhdmUgdGhlIENvbnRleHRNZW51IHBsdWdpbiBhbmQgd2FudCB0byBzYXZlIHRvb2xiYXIgc3BhY2UKKyAgLy8gKHRoZSBjb250ZXh0IG1lbnUgY2FuIHBlcmZvcm0gYWxsIHRoZSBidXR0b24gb3BlcmF0aW9ucykKKyAgJ3RhYlRvTmV4dCc6ICAgdHJ1ZSwgLy8gSGl0IHRhYiBpbiBhIHRhYmxlIGNlbGwgZ29lcyB0byBuZXh0IChzaGlmdCBmb3IgcHJldikgY2VsbAorICAnZGJsQ2xpY2tPcGVuVGFibGVQcm9wZXJ0aWVzJzogZmFsc2UsIC8vIERvdWJsZSBjbGljayBvbiBhIGNlbGwgdG8gb3BlbiB0YWJsZSBwcm9wZXJ0aWVzIChJIGRvbid0IGxpa2UgdGhpcywgaXQncyB1bmludHVpdGl2ZSB3aGVuIHlvdSBkb3VibGUtY2xpY2sgdG8gc2VsZWN0IGEgd29yZCwgcGVyaGFwcyBpZiBpdCB3YXMgZGVmYXVsdCBvbmx5IGZvciBlbXB0eSBjZWxscyAtIEphbWVzKQorICAndG9vbGJhckxheW91dCc6ICdjb21wYWN0JywgLy8gJ2NvbXBhY3QnIG9yIGFueXRoaW5nIGVsc2Ugd2lsbCBnaXZlIHlvdSBmdWxsCisgICdyZW5hbWVTcGxpdENlbGxCdXR0b24nOiAnVW5tZXJnZSBDZWxscycsIC8vIFNwbGl0IGNlbGwgaXNuJ3QgYSB2ZXJ5IG9idmlvdXMgdGVybSwgaXQgaW1wbGllcyBiZWluZyBhYmxlIHRvIG1ha2UgbmV3IGNlbGxzLCByZWFsbHkgaXQgaXMgdW5tZXJnaW5nIG1lcmdlZCBjZWxscyBhbmQgY2FuIG9ubHkgYmUgdXNlZCBpbiB0aGF0IGNvbnRleHQKKyAgJ25vRnJhbWVSdWxlc09wdGlvbnMnOiB0cnVlLCAvLyBEaXNhYmxlICJGcmFtZSBhbmQgQm9yZGVyIiBvcHRpb25zIGluIHRoZSB0YWJsZSBwcm9wZXJ0aWVzLCB0aGVzZSBhcmUgY29uZnVzaW5nIChhbmQgbm90IHZlcnkgZ29vZCkKKyAgJ2FkZFRvb2xiYXJMaW5lQnJlYWsnOiB0cnVlIC8vIEJ5IGRlZmF1bHQgVGFibGVPcGVyYXRpb25zIGFkZHMgYSAnbGluZWJyZWFrJyBpbiB0aGUgdG9vbGJhci4KKyAgLy8gU2V0IHRvIGZhbHNlIHRvIHByZXZlbnQgdGhpcyBhbmQgaW5zdGVhZCBqdXN0IGFwcGVuZCB0aGUgYnV0dG9ucyB3aXRob3V0IGEgJ2xpbmVicmVhaycuCit9CisKK2Z1bmN0aW9uIFRhYmxlT3BlcmF0aW9ucyhlZGl0b3IpIHsKKyAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisKKyAgdmFyIGNmZyA9IGVkaXRvci5jb25maWc7CisgIHZhciBzZWxmID0gdGhpczsKKworICAvLyByZWdpc3RlciB0aGUgdG9vbGJhciBidXR0b25zIHByb3ZpZGVkIGJ5IHRoaXMgcGx1Z2luCisKKyAgLy8gUmVtb3ZlIGV4aXN0aW5nIGluc2VydHRhYmxlIGFuZCB0b2dnbGVib3JkZXJzLCB3ZSB3aWxsIHJlcGxhY2UgaXQgaW4gb3VyIGdyb3VwCisgIGNmZy5yZW1vdmVUb29sYmFyRWxlbWVudCgnIGluc2VydHRhYmxlIHRvZ2dsZWJvcmRlcnMgJyk7CisKKyAgdmFyIHRvb2xiYXI7CisgIGlmKCBjZmcuVGFibGVPcGVyYXRpb25zLmFkZFRvb2xiYXJMaW5lQnJlYWsgKSB7CisgICAgdG9vbGJhciA9IFsibGluZWJyZWFrIl07CisgIH0gZWxzZSB7CisgICAgdG9vbGJhciA9IFsiaW5zZXJ0dGFibGUiXTsKKyAgfQorCisgIHZhciBibCA9IFsgXTsKKyAgdmFyIHRiX29yZGVyID0gbnVsbDsKKyAgc3dpdGNoKGVkaXRvci5jb25maWcuVGFibGVPcGVyYXRpb25zLnRvb2xiYXJMYXlvdXQpCisgIHsKKyAgICBjYXNlICdjb21wYWN0JzoKKyAgICAgIHRiX29yZGVyID0gWworICAgICAgICBudWxsLAorICAgICAgICAnaW5zZXJ0dGFibGUnLAorICAgICAgICAndG9nZ2xlYm9yZGVycycsCisgICAgICAgICd0YWJsZS1wcm9wJywKKyAgICAgICAgJ3Jvdy1wcm9wJywKKyAgICAgICAgJ2NlbGwtcHJvcCcsCisgICAgICAgIG51bGwsCisgICAgICAgICdyb3ctaW5zZXJ0LWFib3ZlJywKKyAgICAgICAgJ3Jvdy1pbnNlcnQtdW5kZXInLAorICAgICAgICAncm93LWRlbGV0ZScsCisKKyAgICAgICAgJ2NvbC1pbnNlcnQtYmVmb3JlJywKKyAgICAgICAgJ2NvbC1pbnNlcnQtYWZ0ZXInLAorICAgICAgICAnY29sLWRlbGV0ZScsCisgICAgICAgIG51bGwsCisgICAgICAgICdjZWxsLW1lcmdlJywKKyAgICAgICAgJ2NlbGwtc3BsaXQnCisgICAgICBdOworICAgICAgCisgICAgICBicmVhazsgICAgCisgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKyAgCisgIGlmKHRiX29yZGVyICE9IG51bGwpCisgIHsKKyAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGJfb3JkZXIubGVuZ3RoOyBpKyspCisgICAgeworICAgICAgaWYodGJfb3JkZXJbaV0gPT0gbnVsbCkKKyAgICAgIHsKKyAgICAgICAgYmwucHVzaChudWxsKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYodGJfb3JkZXJbaV0ubWF0Y2goL2luc2VydHRhYmxlfHRvZ2dsZWJvcmRlcnMvKSkKKyAgICAgIHsKKyAgICAgICAgYmwucHVzaCh0Yl9vcmRlcltpXSk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGZvcih2YXIgaiA9IDA7IGogPCBUYWJsZU9wZXJhdGlvbnMuYnRuTGlzdC5sZW5ndGg7IGorKykKKyAgICAgICAgeworICAgICAgICAgIGlmKFRhYmxlT3BlcmF0aW9ucy5idG5MaXN0W2pdICE9IG51bGwgJiYgVGFibGVPcGVyYXRpb25zLmJ0bkxpc3Rbal1bMF0gPT0gdGJfb3JkZXJbaV0pCisgICAgICAgICAgeworICAgICAgICAgICAgYmwucHVzaChUYWJsZU9wZXJhdGlvbnMuYnRuTGlzdFtqXSk7CisgICAgICAgICAgfSAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICBibC5wdXNoKG51bGwpOworICAgIGJsLnB1c2goJ2luc2VydHRhYmxlJyk7CisgICAgYmwucHVzaCgndG9nZ2xlYm9yZGVycycpOworICAgIGZvcih2YXIgaiA9IDA7IGogPCBUYWJsZU9wZXJhdGlvbnMuYnRuTGlzdC5sZW5ndGg7IGorKykKKyAgICB7CisgICAgICBibC5wdXNoKFRhYmxlT3BlcmF0aW9ucy5idG5MaXN0W2pdKTsKKyAgICB9CisgIH0KKyAgCisgIAorICBmb3IgKHZhciBpID0gMDsgaSA8IGJsLmxlbmd0aDsgKytpKSB7CisgICAgdmFyIGJ0biA9IGJsW2ldOworICAgIAorICAgIGlmICghYnRuKSB7CisgICAgICBpZihjZmcuVGFibGVPcGVyYXRpb25zLnNob3dCdXR0b25zKSB0b29sYmFyLnB1c2goInNlcGFyYXRvciIpOworICAgIH0KKyAgICBlbHNlIGlmKHR5cGVvZiBidG4gPT0gJ3N0cmluZycpCisgICAgeworICAgICAgdG9vbGJhci5wdXNoKGJ0bik7CisgICAgfSBlbHNlIHsKKyAgICAgIAorICAgICAgaWYodGhpcy5lZGl0b3IuY29uZmlnLlRhYmxlT3BlcmF0aW9ucy5yZW5hbWVTcGxpdENlbGxCdXR0b24pCisgICAgICB7CisgICAgICAgIGlmKGJ0blswXSA9PSAnY2VsbC1zcGxpdCcpCisgICAgICAgIHsKKyAgICAgICAgICBidG5bMl0gPSB0aGlzLmVkaXRvci5jb25maWcuVGFibGVPcGVyYXRpb25zLnJlbmFtZVNwbGl0Q2VsbEJ1dHRvbjsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgCisgICAgICB2YXIgaWQgPSAiVE8tIiArIGJ0blswXTsKKyAgICAgIGNmZy5yZWdpc3RlckJ1dHRvbihpZCwgWGluaGEuX2xjKGJ0blsyXSwgIlRhYmxlT3BlcmF0aW9ucyIpLCBlZGl0b3IuaW1nVVJMKGJ0blswXSArICIuZ2lmIiwgIlRhYmxlT3BlcmF0aW9ucyIpLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihlZGl0b3IsIGlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkaXNwYXRjaCBidXR0b24gcHJlc3MgZXZlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYnV0dG9uUHJlc3MoZWRpdG9yLCBpZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYnRuWzFdKTsKKyAgICAgIGlmKGNmZy5UYWJsZU9wZXJhdGlvbnMuc2hvd0J1dHRvbnMpIHRvb2xiYXIucHVzaChpZCk7CisgICAgfQorICB9CisgIAorCisgIC8vIGFkZCBhIG5ldyBsaW5lIGluIHRoZSB0b29sYmFyCisgIGNmZy50b29sYmFyLnB1c2godG9vbGJhcik7CisgIAorICBpZiAoIHR5cGVvZiBQb3B1cFdpbiA9PSAndW5kZWZpbmVkJyApCisgIHsKKyAgICBYaW5oYS5fbG9hZGJhY2soX2VkaXRvcl91cmwgKyAnbW9kdWxlcy9EaWFsb2dzL3BvcHVwd2luLmpzJyk7CisgIH0KKyAgaWYgKCB0eXBlb2YgWGluaGEuSW5saW5lU3R5bGVyID09ICd1bmRlZmluZWQnICkKKyAgeworICAgIFhpbmhhLl9sb2FkYmFjayhfZWRpdG9yX3VybCArICdtb2R1bGVzL0lubGluZVN0eWxlci9JbmxpbmVTdHlsZXIuanMnKTsKKyAgfQorCisgIGlmKGNmZy5UYWJsZU9wZXJhdGlvbnMuZG91YmxlQ2xpY2tPcGVuVGFibGVQcm9wZXJ0aWVzKQorICB7CisgICAgY2ZnLmRibGNsaWNrTGlzdFsndGQnXSA9IFtmdW5jdGlvbigpIHsgc2VsZi5kaWFsb2dUYWJsZVByb3BlcnRpZXMoKSB9XTsKKyAgICBjZmcuZGJsY2xpY2tMaXN0Wyd0aCddID0gW2Z1bmN0aW9uKCkgeyBzZWxmLmRpYWxvZ1RhYmxlUHJvcGVydGllcygpIH1dOworICB9Cit9CisKK1RhYmxlT3BlcmF0aW9ucy5fcGx1Z2luSW5mbyA9IHsKKyAgbmFtZSAgICAgICAgICA6ICJUYWJsZU9wZXJhdGlvbnMiLAorICB2ZXJzaW9uICAgICAgIDogIjEuMCIsCisgIGRldmVsb3BlciAgICAgOiAiTWloYWkgQmF6b24iLAorICBkZXZlbG9wZXJfdXJsIDogImh0dHA6Ly9keW5hcmNoLmNvbS9taXNob28vIiwKKyAgY19vd25lciAgICAgICA6ICJNaWhhaSBCYXpvbiIsCisgIHNwb25zb3IgICAgICAgOiAiWmFwYXRlYyBJbmMuIiwKKyAgc3BvbnNvcl91cmwgICA6ICJodHRwOi8vd3d3LmJsb2tpLmNvbSIsCisgIGxpY2Vuc2UgICAgICAgOiAiaHRtbEFyZWEiCit9OworCitUYWJsZU9wZXJhdGlvbnMucHJvdG90eXBlLl9sYyA9IGZ1bmN0aW9uKHN0cmluZykgeworICByZXR1cm4gWGluaGEuX2xjKHN0cmluZywgJ1RhYmxlT3BlcmF0aW9ucycpOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKgorICogVVRJTElUSUVTCisgKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyByZXRyaWV2ZXMgdGhlIGNsb3Nlc3QgZWxlbWVudCBoYXZpbmcgdGhlIHNwZWNpZmllZCB0YWdOYW1lIGluIHRoZSBsaXN0IG9mCisvLyBhbmNlc3RvcnMgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uL2NhcmV0LgorVGFibGVPcGVyYXRpb25zLnByb3RvdHlwZS5nZXRDbG9zZXN0ID0gZnVuY3Rpb24odGFnTmFtZSkgeworICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisgIHZhciBhbmNlc3RvcnMgPSBlZGl0b3IuZ2V0QWxsQW5jZXN0b3JzKCk7CisgIHZhciByZXQgPSBudWxsOworICB0YWdOYW1lID0gKCIiICsgdGFnTmFtZSkudG9Mb3dlckNhc2UoKTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbmNlc3RvcnMubGVuZ3RoOyArK2kpIHsKKyAgICB2YXIgZWwgPSBhbmNlc3RvcnNbaV07CisgICAgaWYgKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSB0YWdOYW1lKSB7CisgICAgICByZXQgPSBlbDsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICByZXR1cm4gcmV0OworfTsKKworVGFibGVPcGVyYXRpb25zLnByb3RvdHlwZS5nZXRDbG9zZXN0TWF0Y2ggPSBmdW5jdGlvbihyZWdFeHBUYWdOYW1lKSB7CisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKyAgCisgIHZhciBzZWwgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7CisgIAorICAvLyBTYWZhcmkgaXMgcmVhbGx5IHdlaXJkLCBpZiB5b3UgcmlnaHQgY2xpY2sgaW4gYSBjZWxsIHdpdGggKG9ubHk/KSB3aGl0ZXNwYWNlCisgIC8vIGl0IHNlbGVjdHMgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgY2VsbCBhbmQgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uIGlzIAorICAvLyBpbnNpZGUgdGhlIG5leHQgY2VsbC4gV2UgaGF2ZSBjb2xsYXBzZSB0byBzdGFydCB0byBnZXQgdGhpcyB0byB3b3JrISAgCisgIHNlbC5jb2xsYXBzZVRvU3RhcnQoKTsKKyAgLyoKKyAgaWYodHlwZW9mIHNlbC5mb2N1c05vZGUgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHNlbC5mb2N1c05vZGUudGFnTmFtZSAhPSAndW5kZWZpbmVkJyAmJiBzZWwuZm9jdXNOb2RlLnRhZ05hbWUubWF0Y2gocmVnRXhwVGFnTmFtZSkpCisgIHsKKyAgICByZXR1cm4gc2VsLmZvY3VzTm9kZTsKKyAgfQorICAqLworICAKKyAgdmFyIGN1cnJlbnRFbGVtZW50ID0gZWRpdG9yLmFjdGl2ZUVsZW1lbnQoc2VsKSA/IGVkaXRvci5hY3RpdmVFbGVtZW50KHNlbCkgOiBlZGl0b3IuZ2V0UGFyZW50RWxlbWVudChzZWwpOworCisgIGlmKHR5cGVvZiBjdXJyZW50RWxlbWVudC50YWdOYW1lICE9ICd1bmRlZmluZWQnICYmIGN1cnJlbnRFbGVtZW50LnRhZ05hbWUubWF0Y2gocmVnRXhwVGFnTmFtZSkpCisgIHsKKyAgICByZXR1cm4gY3VycmVudEVsZW1lbnQ7CisgIH0KKyAgCisgIHZhciBhbmNlc3RvcnMgPSBlZGl0b3IuZ2V0QWxsQW5jZXN0b3JzKCk7CisgIHZhciByZXQgPSBudWxsOworICAKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbmNlc3RvcnMubGVuZ3RoOyArK2kpIHsKKyAgICB2YXIgZWwgPSBhbmNlc3RvcnNbaV07CisgICAgaWYgKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKS5tYXRjaChyZWdFeHBUYWdOYW1lKSkgeworICAgICAgcmV0ID0gZWw7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJldDsKK307CisvLyB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW4gc29tZSBidXR0b24gZnJvbSB0aGUgVGFibGVPcGVyYXRpb25zIHRvb2xiYXIKKy8vIHdhcyBwcmVzc2VkLgorVGFibGVPcGVyYXRpb25zLnByb3RvdHlwZS5idXR0b25QcmVzcyA9IGZ1bmN0aW9uKGVkaXRvciwgYnV0dG9uX2lkKSB7CisgIHRoaXMuZWRpdG9yID0gZWRpdG9yOworICB2YXIgbW96YnIgPSBYaW5oYS5pc19nZWNrbyA/ICI8YnIgLz4iIDogIiI7CisKKyAgLy8gaGVscGVyIGZ1bmN0aW9uIHRoYXQgY2xlYXJzIHRoZSBjb250ZW50IGluIGEgdGFibGUgcm93CisgIGZ1bmN0aW9uIGNsZWFyUm93KHRyKSB7CisgICAgWyAndGQnLCAndGgnIF0uZm9yRWFjaChmdW5jdGlvbihlKQorICAgIHsKKyAgICB2YXIgdGRzID0gdHIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk7CisgICAgZm9yICh2YXIgaSA9IHRkcy5sZW5ndGg7IC0taSA+PSAwOykgeworICAgICAgdmFyIHRkID0gdGRzW2ldOworICAgICAgdGQucm93U3BhbiA9IDE7CisgICAgICB0ZC5pbm5lckhUTUwgPSBtb3picjsKKyAgICB9CisgICAgfSk7CisgIH0KKworICBmdW5jdGlvbiBzcGxpdFJvdyh0ZCkgeworICAgIHZhciBuID0gcGFyc2VJbnQoIiIgKyB0ZC5yb3dTcGFuKTsKKyAgICB2YXIgbmMgPSBwYXJzZUludCgiIiArIHRkLmNvbFNwYW4pOworICAgIHRkLnJvd1NwYW4gPSAxOworICAgIHRyID0gdGQucGFyZW50Tm9kZTsKKyAgICB2YXIgaXRyID0gdHIucm93SW5kZXg7CisgICAgdmFyIHRycyA9IHRyLnBhcmVudE5vZGUucm93czsKKyAgICB2YXIgaW5kZXggPSB0ZC5jZWxsSW5kZXg7CisgICAgd2hpbGUgKC0tbiA+IDApIHsKKyAgICAgIHRyID0gdHJzWysraXRyXTsKKyAgICAgIHZhciBvdGQgPSBlZGl0b3IuX2RvYy5jcmVhdGVFbGVtZW50KCJ0ZCIpOworICAgICAgb3RkLmNvbFNwYW4gPSB0ZC5jb2xTcGFuOworICAgICAgb3RkLmlubmVySFRNTCA9IG1vemJyOworICAgICAgdHIuaW5zZXJ0QmVmb3JlKG90ZCwgdHIuY2VsbHNbaW5kZXhdKTsKKyAgICB9CisgICAgZWRpdG9yLmZvcmNlUmVkcmF3KCk7CisgICAgZWRpdG9yLnVwZGF0ZVRvb2xiYXIoKTsKKyAgfQorCisgIGZ1bmN0aW9uIHNwbGl0Q29sKHRkKSB7CisgICAgdmFyIG5jID0gcGFyc2VJbnQoIiIgKyB0ZC5jb2xTcGFuKTsKKyAgICB0ZC5jb2xTcGFuID0gMTsKKyAgICB0ciA9IHRkLnBhcmVudE5vZGU7CisgICAgdmFyIHJlZiA9IHRkLm5leHRTaWJsaW5nOworICAgIHdoaWxlICgtLW5jID4gMCkgeworICAgICAgdmFyIG90ZCA9IGVkaXRvci5fZG9jLmNyZWF0ZUVsZW1lbnQoInRkIik7CisgICAgICBvdGQucm93U3BhbiA9IHRkLnJvd1NwYW47CisgICAgICBvdGQuaW5uZXJIVE1MID0gbW96YnI7CisgICAgICB0ci5pbnNlcnRCZWZvcmUob3RkLCByZWYpOworICAgIH0KKyAgICBlZGl0b3IuZm9yY2VSZWRyYXcoKTsKKyAgICBlZGl0b3IudXBkYXRlVG9vbGJhcigpOworICB9CisKKyAgZnVuY3Rpb24gc3BsaXRDZWxsKHRkKSB7CisgICAgdmFyIG5jID0gcGFyc2VJbnQoIiIgKyB0ZC5jb2xTcGFuKTsKKyAgICBzcGxpdENvbCh0ZCk7CisgICAgdmFyIGl0ZW1zID0gdGQucGFyZW50Tm9kZS5jZWxsczsKKyAgICB2YXIgaW5kZXggPSB0ZC5jZWxsSW5kZXg7CisgICAgd2hpbGUgKG5jLS0gPiAwKSB7CisgICAgICBzcGxpdFJvdyhpdGVtc1tpbmRleCsrXSk7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gc2VsZWN0TmV4dE5vZGUoZWwpIHsKKyAgICB2YXIgbm9kZSA9IGVsLm5leHRTaWJsaW5nOworICAgIHdoaWxlIChub2RlICYmIG5vZGUubm9kZVR5cGUgIT0gMSkgeworICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7CisgICAgfQorICAgIGlmICghbm9kZSkgeworICAgICAgbm9kZSA9IGVsLnByZXZpb3VzU2libGluZzsKKyAgICAgIHdoaWxlIChub2RlICYmIG5vZGUubm9kZVR5cGUgIT0gMSkgeworICAgICAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7CisgICAgICB9CisgICAgfQorICAgIGlmICghbm9kZSkgeworICAgICAgbm9kZSA9IGVsLnBhcmVudE5vZGU7CisgICAgfQorICAgIGVkaXRvci5zZWxlY3ROb2RlQ29udGVudHMobm9kZSk7CisgIH0KKworICBmdW5jdGlvbiBjZWxsTWVyZ2UodGFibGUsIGNlbGxfaW5kZXgsIHJvd19pbmRleCwgbm9fY29scywgbm9fcm93cykgeworICAgIHZhciByb3dzID0gW107CisgICAgdmFyIGNlbGxzID0gW107CisgICAgdHJ5IHsKKyAgICAgIGZvciAoaT1yb3dfaW5kZXg7IGk8cm93X2luZGV4K25vX3Jvd3M7IGkrKykgeworICAgICAgICB2YXIgcm93ID0gdGFibGUucm93c1tpXTsKKyAgICAgICAgZm9yIChqPWNlbGxfaW5kZXg7IGo8Y2VsbF9pbmRleCtub19jb2xzOyBqKyspIHsKKyAgICAgICAgICBpZiAocm93LmNlbGxzW2pdLmNvbFNwYW4gPiAxIHx8IHJvdy5jZWxsc1tqXS5yb3dTcGFuID4gMSkgeworICAgICAgICAgICAgc3BsaXRDZWxsKHJvdy5jZWxsc1tqXSk7CisgICAgICAgICAgfQorICAgICAgICAgIGNlbGxzLnB1c2gocm93LmNlbGxzW2pdKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2VsbHMubGVuZ3RoID4gMCkgeworICAgICAgICAgIHJvd3MucHVzaChjZWxscyk7CisgICAgICAgICAgY2VsbHMgPSBbXTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gY2F0Y2goZSkgeyAKKyAgICAgIGFsZXJ0KCJJbnZhbGlkIHNlbGVjdGlvbiIpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICB2YXIgcm93X2luZGV4MSA9IHJvd3NbMF1bMF0ucGFyZW50Tm9kZS5yb3dJbmRleDsKKyAgICB2YXIgcm93X2luZGV4MiA9IHJvd3Nbcm93cy5sZW5ndGgtMV1bMF0ucGFyZW50Tm9kZS5yb3dJbmRleDsKKyAgICB2YXIgcm93X3NwYW4yID0gcm93c1tyb3dzLmxlbmd0aC0xXVswXS5yb3dTcGFuOworICAgIHZhciBIVE1MID0gIiI7CisgICAgZm9yIChpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyArK2kpIHsKKyAgICAgIHZhciBjZWxscyA9IHJvd3NbaV07CisgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNlbGxzLmxlbmd0aDsgKytqKSB7CisgICAgICAgIHZhciBjZWxsID0gY2VsbHNbal07CisgICAgICAgIEhUTUwgKz0gY2VsbC5pbm5lckhUTUw7CisgICAgICAgIChpIHx8IGopICYmIChjZWxsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2VsbCkpOworICAgICAgfQorICAgIH0KKyAgICB2YXIgdGQgPSByb3dzWzBdWzBdOworICAgIHRkLmlubmVySFRNTCA9IEhUTUw7CisgICAgdGQucm93U3BhbiA9IHJvd19pbmRleDIgLSByb3dfaW5kZXgxICsgcm93X3NwYW4yOworICAgIHZhciBjb2xfc3BhbiA9IDA7CisgICAgZm9yKGo9MDsgajxyb3dzWzBdLmxlbmd0aDsgaisrKSB7CisgICAgICBjb2xfc3BhbiArPSByb3dzWzBdW2pdLmNvbFNwYW47CisgICAgfQorICAgIHRkLmNvbFNwYW4gPSBjb2xfc3BhbjsKKyAgICBlZGl0b3Iuc2VsZWN0Tm9kZUNvbnRlbnRzKHRkKTsKKyAgICBlZGl0b3IuZm9yY2VSZWRyYXcoKTsKKyAgICBlZGl0b3IuZm9jdXNFZGl0b3IoKTsKKyAgfQorCisgIHN3aXRjaCAoYnV0dG9uX2lkKSB7CisgICAgLy8gUk9XUworCisgIGNhc2UgIlRPLXJvdy1pbnNlcnQtYWJvdmUiOgorICBjYXNlICJUTy1yb3ctaW5zZXJ0LXVuZGVyIjoKKyAgICB2YXIgdHIgPSB0aGlzLmdldENsb3Nlc3QoInRyIik7CisgICAgaWYgKCF0cikgeworICAgICAgYnJlYWs7CisgICAgfQorICAgIHZhciBvdHIgPSB0ci5jbG9uZU5vZGUodHJ1ZSk7CisgICAgY2xlYXJSb3cob3RyKTsKKyAgICB0ci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvdHIsIC91bmRlci8udGVzdChidXR0b25faWQpID8gdHIubmV4dFNpYmxpbmcgOiB0cik7CisgICAgZWRpdG9yLmZvcmNlUmVkcmF3KCk7CisgICAgZWRpdG9yLmZvY3VzRWRpdG9yKCk7CisgICAgYnJlYWs7CisgIGNhc2UgIlRPLXJvdy1kZWxldGUiOgorICAgIHZhciB0ciA9IHRoaXMuZ2V0Q2xvc2VzdCgidHIiKTsKKyAgICBpZiAoIXRyKSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgdmFyIHBhciA9IHRyLnBhcmVudE5vZGU7CisgICAgaWYgKHBhci5yb3dzLmxlbmd0aCA9PSAxKSB7CisgICAgICBhbGVydChYaW5oYS5fbGMoIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iLCAiVGFibGVPcGVyYXRpb25zIikpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIC8vIHNldCB0aGUgY2FyZXQgZmlyc3QgdG8gYSBwb3NpdGlvbiB0aGF0IGRvZXNuJ3QKKyAgICAvLyBkaXNhcHBlYXIuCisgICAgc2VsZWN0TmV4dE5vZGUodHIpOworICAgIHBhci5yZW1vdmVDaGlsZCh0cik7CisgICAgZWRpdG9yLmZvcmNlUmVkcmF3KCk7CisgICAgZWRpdG9yLmZvY3VzRWRpdG9yKCk7CisgICAgZWRpdG9yLnVwZGF0ZVRvb2xiYXIoKTsKKyAgICBicmVhazsKKyAgY2FzZSAiVE8tcm93LXNwbGl0IjoKKyAgICB2YXIgdGQgPSB0aGlzLmdldENsb3Nlc3RNYXRjaCgvXih0ZHx0aCkkL2kpOworICAgIGlmICghdGQpIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBzcGxpdFJvdyh0ZCk7CisgICAgYnJlYWs7CisKKyAgICAvLyBDT0xVTU5TCisKKyAgY2FzZSAiVE8tY29sLWluc2VydC1iZWZvcmUiOgorICBjYXNlICJUTy1jb2wtaW5zZXJ0LWFmdGVyIjoKKyAgICB2YXIgdGQgPSB0aGlzLmdldENsb3Nlc3RNYXRjaCgvXih0ZHx0aCkkL2kpOworICAgIGlmICghdGQpIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICB2YXIgcm93cyA9IHRkLnBhcmVudE5vZGUucGFyZW50Tm9kZS5yb3dzOworICAgIHZhciBpbmRleCA9IHRkLmNlbGxJbmRleDsKKyAgICB2YXIgbGFzdENvbHVtbiA9ICh0ZC5wYXJlbnROb2RlLmNlbGxzLmxlbmd0aCA9PSBpbmRleCArIDEpOworICAgIGZvciAodmFyIGkgPSByb3dzLmxlbmd0aDsgLS1pID49IDA7KSB7CisgICAgICB2YXIgdHIgPSByb3dzW2ldOworICAgICAgdmFyIG90ZCA9IGVkaXRvci5fZG9jLmNyZWF0ZUVsZW1lbnQoInRkIik7CisgICAgICBvdGQuaW5uZXJIVE1MID0gbW96YnI7CisgICAgICBpZiAobGFzdENvbHVtbiAmJiBYaW5oYS5pc19pZSkgCisgICAgICB7CisgICAgICAgIHRyLmluc2VydEJlZm9yZShvdGQpOworICAgICAgfSAKKyAgICAgIGVsc2UgCisgICAgICB7CisgICAgICAgIHZhciByZWYgPSB0ci5jZWxsc1tpbmRleCArICgvYWZ0ZXIvLnRlc3QoYnV0dG9uX2lkKSA/IDEgOiAwKV07CisgICAgICAgIHRyLmluc2VydEJlZm9yZShvdGQsIHJlZik7CisgICAgICB9CisgICAgfQorICAgIGVkaXRvci5mb2N1c0VkaXRvcigpOworICAgIGJyZWFrOworICBjYXNlICJUTy1jb2wtc3BsaXQiOgorICAgIHZhciB0ZCA9IHRoaXMuZ2V0Q2xvc2VzdE1hdGNoKC9eKHRkfHRoKSQvaSk7CisgICAgaWYgKCF0ZCkgeworICAgICAgYnJlYWs7CisgICAgfQorICAgIHNwbGl0Q29sKHRkKTsKKyAgICBicmVhazsKKyAgY2FzZSAiVE8tY29sLWRlbGV0ZSI6CisgICAgdmFyIHRkID0gdGhpcy5nZXRDbG9zZXN0TWF0Y2goL14odGR8dGgpJC9pKTsKKyAgICBpZiAoIXRkKSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgdmFyIGluZGV4ID0gdGQuY2VsbEluZGV4OworICAgIGlmICh0ZC5wYXJlbnROb2RlLmNlbGxzLmxlbmd0aCA9PSAxKSB7CisgICAgICBhbGVydChYaW5oYS5fbGMoIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iLCAiVGFibGVPcGVyYXRpb25zIikpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIC8vIHNldCB0aGUgY2FyZXQgZmlyc3QgdG8gYSBwb3NpdGlvbiB0aGF0IGRvZXNuJ3QgZGlzYXBwZWFyCisgICAgc2VsZWN0TmV4dE5vZGUodGQpOworICAgIHZhciByb3dzID0gdGQucGFyZW50Tm9kZS5wYXJlbnROb2RlLnJvd3M7CisgICAgZm9yICh2YXIgaSA9IHJvd3MubGVuZ3RoOyAtLWkgPj0gMDspIHsKKyAgICAgIHZhciB0ciA9IHJvd3NbaV07CisgICAgICB0ci5yZW1vdmVDaGlsZCh0ci5jZWxsc1tpbmRleF0pOworICAgIH0KKyAgICBlZGl0b3IuZm9yY2VSZWRyYXcoKTsKKyAgICBlZGl0b3IuZm9jdXNFZGl0b3IoKTsKKyAgICBlZGl0b3IudXBkYXRlVG9vbGJhcigpOworICAgIGJyZWFrOworCisgICAgLy8gQ0VMTFMKKworICBjYXNlICJUTy1jZWxsLXNwbGl0IjoKKyAgICB2YXIgdGQgPSB0aGlzLmdldENsb3Nlc3RNYXRjaCgvXih0ZHx0aCkkL2kpOworICAgIGlmICghdGQpIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBzcGxpdENlbGwodGQpOworICAgIGJyZWFrOworICBjYXNlICJUTy1jZWxsLWluc2VydC1iZWZvcmUiOgorICBjYXNlICJUTy1jZWxsLWluc2VydC1hZnRlciI6CisgICAgdmFyIHRkID0gdGhpcy5nZXRDbG9zZXN0TWF0Y2goL14odGR8dGgpJC9pKTsKKyAgICBpZiAoIXRkKSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgdmFyIHRyID0gdGQucGFyZW50Tm9kZTsKKyAgICB2YXIgb3RkID0gZWRpdG9yLl9kb2MuY3JlYXRlRWxlbWVudCgidGQiKTsKKyAgICBvdGQuaW5uZXJIVE1MID0gbW96YnI7CisgICAgdHIuaW5zZXJ0QmVmb3JlKG90ZCwgL2FmdGVyLy50ZXN0KGJ1dHRvbl9pZCkgPyB0ZC5uZXh0U2libGluZyA6IHRkKTsKKyAgICBlZGl0b3IuZm9yY2VSZWRyYXcoKTsKKyAgICBlZGl0b3IuZm9jdXNFZGl0b3IoKTsKKyAgICBicmVhazsKKyAgY2FzZSAiVE8tY2VsbC1kZWxldGUiOgorICAgIHZhciB0ZCA9IHRoaXMuZ2V0Q2xvc2VzdE1hdGNoKC9eKHRkfHRoKSQvaSk7CisgICAgaWYgKCF0ZCkgeworICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICh0ZC5wYXJlbnROb2RlLmNlbGxzLmxlbmd0aCA9PSAxKSB7CisgICAgICBhbGVydChYaW5oYS5fbGMoIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiIsICJUYWJsZU9wZXJhdGlvbnMiKSk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgLy8gc2V0IHRoZSBjYXJldCBmaXJzdCB0byBhIHBvc2l0aW9uIHRoYXQgZG9lc24ndCBkaXNhcHBlYXIKKyAgICBzZWxlY3ROZXh0Tm9kZSh0ZCk7CisgICAgdGQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZCk7CisgICAgZWRpdG9yLmZvcmNlUmVkcmF3KCk7CisgICAgZWRpdG9yLnVwZGF0ZVRvb2xiYXIoKTsKKyAgICBicmVhazsKKyAgY2FzZSAiVE8tY2VsbC1tZXJnZSI6CisgICAgLy9Nb3ppbGxhLCBhcyBvcHBvc2VkIHRvIElFLCBhbGxvd3MgdGhlIHNlbGVjdGlvbiBvZiBzZXZlcmFsIGNlbGxzLCB3aGljaCBpcyBmaW5lIDopCisgICAgdmFyIHNlbCA9IGVkaXRvci5fZ2V0U2VsZWN0aW9uKCk7CisgICAgaWYgKCFYaW5oYS5pc19pZSAmJiBzZWwucmFuZ2VDb3VudCA+IDEpIHsKKyAgICAgIHZhciByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApOworICAgICAgdmFyIHRkID0gcmFuZ2Uuc3RhcnRDb250YWluZXIuY2hpbGROb2Rlc1tyYW5nZS5zdGFydE9mZnNldF07CisgICAgICB2YXIgdHIgPSB0ZC5wYXJlbnROb2RlOworICAgICAgdmFyIGNlbGxfaW5kZXggPSB0ZC5jZWxsSW5kZXg7CisgICAgICB2YXIgcm93X2luZGV4ID0gdHIucm93SW5kZXg7CisgICAgICB2YXIgcm93X2luZGV4MiA9IDA7CisgICAgICB2YXIgcm93bnVtID0gcm93X2luZGV4OworICAgICAgdmFyIG5vX2NvbHMgPSAwOworICAgICAgdmFyIHJvd19jb2xzcGFuID0gMDsKKyAgICAgIHZhciB0ZDIsIHRyMjsKKyAgICAgIGZvcihpPTA7IGk8c2VsLnJhbmdlQ291bnQ7IGkrKykgeworICAgICAgICByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KGkpOworICAgICAgICB0ZDIgPSByYW5nZS5zdGFydENvbnRhaW5lci5jaGlsZE5vZGVzW3JhbmdlLnN0YXJ0T2Zmc2V0XTsKKyAgICAgICAgdHIyID0gdGQyLnBhcmVudE5vZGU7CisgICAgICAgIGlmKHRyMi5yb3dJbmRleCAhPSByb3dudW0pIHsKKyAgICAgICAgICByb3dudW0gPSB0cjIucm93SW5kZXg7CisgICAgICAgICAgcm93X2NvbHNwYW4gPSAwOworICAgICAgICB9CisgICAgICAgIHJvd19jb2xzcGFuICs9IHRkMi5jb2xTcGFuOworICAgICAgICBpZihyb3dfY29sc3BhbiA+IG5vX2NvbHMpIHsKKyAgICAgICAgICBub19jb2xzID0gcm93X2NvbHNwYW47CisgICAgICAgIH0KKyAgICAgICAgaWYodHIyLnJvd0luZGV4ICsgdGQyLnJvd1NwYW4gLSAxID4gcm93X2luZGV4MikgeworICAgICAgICAgIHJvd19pbmRleDIgPSB0cjIucm93SW5kZXggKyB0ZDIucm93U3BhbiAtIDE7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHZhciBub19yb3dzID0gcm93X2luZGV4MiAtIHJvd19pbmRleCArIDE7CisgICAgICB2YXIgdGFibGUgPSB0ci5wYXJlbnROb2RlOworICAgICAgY2VsbE1lcmdlKHRhYmxlLCBjZWxsX2luZGV4LCByb3dfaW5kZXgsIG5vX2NvbHMsIG5vX3Jvd3MpOyAKKyAgICB9IGVsc2UgeworICAgICAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgImJyb3dzZXIiIG9yIG5vdCBtb3JlIHRoYW4gb25lIGNlbGwgc2VsZWN0ZWQgaW4gTW96CisgICAgICB2YXIgdGQgPSB0aGlzLmdldENsb3Nlc3RNYXRjaCgvXih0ZHx0aCkkL2kpOworICAgICAgaWYgKCF0ZCkgeworICAgICAgICBhbGVydChYaW5oYS5fbGMoIlBsZWFzZSBjbGljayBpbnRvIHNvbWUgY2VsbCIsICJUYWJsZU9wZXJhdGlvbnMiKSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgdmFyIHRyID0gdGQucGFyZW50Tm9kZTsKKyAgICAgIHZhciBjZWxsX2luZGV4ID0gdGQuY2VsbEluZGV4OworICAgICAgdmFyIHJvd19pbmRleCA9IHRyLnJvd0luZGV4OworICAgICAgLy8gcGFzcyBjZWxsTWVyZ2UgYW5kIHRoZSBpbmRpY2VzIHNvIGFwcGx5KCkgY2FuIGNhbGwgY2VsbE1lcmdlIGFuZCBrbm93IAorICAgICAgLy8gd2hhdCBjZWxsIHdhcyBzZWxlY3RlZCB3aGVuIHRoZSBkaWFsb2cgd2FzIG9wZW5lZAorICAgICAgdGhpcy5kaWFsb2dNZXJnZShjZWxsTWVyZ2UsIGNlbGxfaW5kZXgsIHJvd19pbmRleCk7CisgICAgfQorICAgIGJyZWFrOworCisgICAgLy8gUFJPUEVSVElFUworCisgIGNhc2UgIlRPLXRhYmxlLXByb3AiOgorICAgIHRoaXMuZGlhbG9nVGFibGVQcm9wZXJ0aWVzKCk7CisgICAgYnJlYWs7CisKKyAgY2FzZSAiVE8tcm93LXByb3AiOgorICAgIHRoaXMuZGlhbG9nUm93Q2VsbFByb3BlcnRpZXMoZmFsc2UpOworICAgIGJyZWFrOworCisgIGNhc2UgIlRPLWNlbGwtcHJvcCI6CisgICAgdGhpcy5kaWFsb2dSb3dDZWxsUHJvcGVydGllcyh0cnVlKTsKKyAgICBicmVhazsKKworICBkZWZhdWx0OgorICAgIGFsZXJ0KCJCdXR0b24gWyIgKyBidXR0b25faWQgKyAiXSBub3QgeWV0IGltcGxlbWVudGVkIik7CisgIH0KK307CisKKy8vIHRoZSBsaXN0IG9mIGJ1dHRvbnMgYWRkZWQgYnkgdGhpcyBwbHVnaW4KK1RhYmxlT3BlcmF0aW9ucy5idG5MaXN0ID0gWworICAvLyB0YWJsZSBwcm9wZXJ0aWVzIGJ1dHRvbgorICBbInRhYmxlLXByb3AiLCAgICAgICAidGFibGUiLCAiVGFibGUgcHJvcGVydGllcyJdLAorICBudWxsLCAvLyBzZXBhcmF0b3IKKworICAvLyBST1dTCisgIFsicm93LXByb3AiLCAgICAgICAgICJ0ciIsICJSb3cgcHJvcGVydGllcyJdLAorICBbInJvdy1pbnNlcnQtYWJvdmUiLCAidHIiLCAiSW5zZXJ0IHJvdyBiZWZvcmUiXSwKKyAgWyJyb3ctaW5zZXJ0LXVuZGVyIiwgInRyIiwgIkluc2VydCByb3cgYWZ0ZXIiXSwKKyAgWyJyb3ctZGVsZXRlIiwgICAgICAgInRyIiwgIkRlbGV0ZSByb3ciXSwKKyAgWyJyb3ctc3BsaXQiLCAgICAgICAgInRkW3Jvd1NwYW4hPTFdIiwgIlNwbGl0IHJvdyJdLAorICBudWxsLAorCisgIC8vIENPTFMKKyAgWyJjb2wtaW5zZXJ0LWJlZm9yZSIsIFsidGQiLCJ0aCJdLCAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiXSwKKyAgWyJjb2wtaW5zZXJ0LWFmdGVyIiwgIFsidGQiLCJ0aCJdLCAiSW5zZXJ0IGNvbHVtbiBhZnRlciJdLAorICBbImNvbC1kZWxldGUiLCAgICAgICAgWyJ0ZCIsInRoIl0sICJEZWxldGUgY29sdW1uIl0sCisgIFsiY29sLXNwbGl0IiwgICAgICAgICBbInRkW2NvbFNwYW4hPTFdIiwidGhbY29sU3BhbiE9MV0iXSwgIlNwbGl0IGNvbHVtbiJdLAorICBudWxsLAorCisgIC8vIENFTExTCisgIFsiY2VsbC1wcm9wIiwgICAgICAgICAgWyJ0ZCIsInRoIl0sICJDZWxsIHByb3BlcnRpZXMiXSwKKyAgWyJjZWxsLWluc2VydC1iZWZvcmUiLCBbInRkIiwidGgiXSwgIkluc2VydCBjZWxsIGJlZm9yZSJdLAorICBbImNlbGwtaW5zZXJ0LWFmdGVyIiwgIFsidGQiLCJ0aCJdLCAiSW5zZXJ0IGNlbGwgYWZ0ZXIiXSwKKyAgWyJjZWxsLWRlbGV0ZSIsICAgICAgICBbInRkIiwidGgiXSwgIkRlbGV0ZSBjZWxsIl0sCisgIFsiY2VsbC1tZXJnZSIsICAgICAgICAgInRyIiwgIk1lcmdlIGNlbGxzIl0sCisgIFsiY2VsbC1zcGxpdCIsICAgICAgICAgWyJ0ZFtjb2xTcGFuIT0xLHJvd1NwYW4hPTFdIiwidGhbY29sU3BhbiE9MSxyb3dTcGFuIT0xXSJdLCAiU3BsaXQgY2VsbCJdCitdOworCisvKiAKKyBUaGlzIGlzIGp1c3QgdG8gY29udmluY2UgdGhlIGxjX3BhcnNlX3N0cmluZ3MucGhwIHRvIGNvbGxlY3QKKyB0aGVzZSBzdHJpbmdzLCB0aGV5IGFyZSBhY3R1YWxseSB0cmFuc2xhdGVkIGluIHRoZSByZWdpc3RlciBidXR0b24gCisgZnVuY3Rpb24uCisKKyBYaW5oYS5fbGMoIlRhYmxlIHByb3BlcnRpZXMiLCAnVGFibGVPcGVyYXRpb25zJyk7IAorCisgWGluaGEuX2xjKCJSb3cgcHJvcGVydGllcyIsICdUYWJsZU9wZXJhdGlvbnMnKTsgCisgWGluaGEuX2xjKCJJbnNlcnQgcm93IGJlZm9yZSIsICdUYWJsZU9wZXJhdGlvbnMnKTsgCisgWGluaGEuX2xjKCJJbnNlcnQgcm93IGFmdGVyIiwgJ1RhYmxlT3BlcmF0aW9ucycpOyAKKyBYaW5oYS5fbGMoIkRlbGV0ZSByb3ciLCAnVGFibGVPcGVyYXRpb25zJyk7IAorIFhpbmhhLl9sYygiU3BsaXQgcm93IiwgJ1RhYmxlT3BlcmF0aW9ucycpOyAKKworIFhpbmhhLl9sYygiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiLCAnVGFibGVPcGVyYXRpb25zJyk7IAorIFhpbmhhLl9sYygiSW5zZXJ0IGNvbHVtbiBhZnRlciIsICdUYWJsZU9wZXJhdGlvbnMnKTsgCisgWGluaGEuX2xjKCJEZWxldGUgY29sdW1uIiwgJ1RhYmxlT3BlcmF0aW9ucycpOyAKKyBYaW5oYS5fbGMoIlNwbGl0IGNvbHVtbiIsICdUYWJsZU9wZXJhdGlvbnMnKTsgCisKKyBYaW5oYS5fbGMoIkNlbGwgcHJvcGVydGllcyIsICdUYWJsZU9wZXJhdGlvbnMnKTsgCisgWGluaGEuX2xjKCJJbnNlcnQgY2VsbCBiZWZvcmUiLCAnVGFibGVPcGVyYXRpb25zJyk7IAorIFhpbmhhLl9sYygiSW5zZXJ0IGNlbGwgYWZ0ZXIiLCAnVGFibGVPcGVyYXRpb25zJyk7IAorIFhpbmhhLl9sYygiRGVsZXRlIGNlbGwiLCAnVGFibGVPcGVyYXRpb25zJyk7IAorIFhpbmhhLl9sYygiTWVyZ2UgY2VsbHMiLCAnVGFibGVPcGVyYXRpb25zJyk7IAorIFhpbmhhLl9sYygiTWVyZ2UgY2VsbHMiLCAnVGFibGVPcGVyYXRpb25zJyk7IAorCisqLworCitUYWJsZU9wZXJhdGlvbnMucHJvdG90eXBlLmRpYWxvZ01lcmdlID0gZnVuY3Rpb24obWVyZ2VfZnVuYywgY2VsbF9pbmRleCwgcm93X2luZGV4KSB7CisgIHZhciB0YWJsZSA9IHRoaXMuZ2V0Q2xvc2VzdCgidGFibGUiKTsKKyAgdmFyIHNlbGYgPSB0aGlzOworICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisKKyAgaWYgKCF0aGlzLmRpYWxvZ01lcmdlQ2VsbHNIdG1sKSB7CisgICAgWGluaGEuX2dldGJhY2soWGluaGEuZ2V0UGx1Z2luRGlyKCJUYWJsZU9wZXJhdGlvbnMiKSArICcvcG9wdXBzL2RpYWxvZ01lcmdlQ2VsbHMuaHRtbCcsIGZ1bmN0aW9uKGdldGJhY2spIHsgc2VsZi5kaWFsb2dNZXJnZUNlbGxzSHRtbCA9IGdldGJhY2s7IHNlbGYuZGlhbG9nTWVyZ2UobWVyZ2VfZnVuYywgY2VsbF9pbmRleCwgcm93X2luZGV4KTsgfSk7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKCF0aGlzLmRpYWxvZ01lcmdlQ2VsbHMpIHsKKyAgICB0aGlzLmRpYWxvZ01lcmdlQ2VsbHMgPSBuZXcgWGluaGEuRGlhbG9nKGVkaXRvciwgdGhpcy5kaWFsb2dNZXJnZUNlbGxzSHRtbCwgJ1RhYmxlT3BlcmF0aW9ucycsIHt3aWR0aDo0MDB9KTsKKyAgICB0aGlzLmRpYWxvZ01lcmdlQ2VsbHMuZ2V0RWxlbWVudEJ5SWQoJ2NhbmNlbCcpLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsgc2VsZi5kaWFsb2dNZXJnZUNlbGxzLmhpZGUoKTsgfTsKKyAgfQorCisgIHZhciBkaWFsb2cgPSB0aGlzLmRpYWxvZ01lcmdlQ2VsbHM7CisgIGZ1bmN0aW9uIGFwcGx5KCkgeworICAgIGRpYWxvZy5oaWRlKCk7CisgICAgbm9fY29scyA9IHBhcnNlSW50KGRpYWxvZy5nZXRFbGVtZW50QnlJZCgnZl9jb2xzJykudmFsdWUsMTApICsgMTsKKyAgICBub19yb3dzID0gcGFyc2VJbnQoZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdmX3Jvd3MnKS52YWx1ZSwxMCkgKyAxOworICAgIG1lcmdlX2Z1bmModGFibGUsIGNlbGxfaW5kZXgsIHJvd19pbmRleCwgbm9fY29scywgbm9fcm93cyk7ICAgIAorICAgIHJldHVybgorICB9CisKKyAgdGhpcy5kaWFsb2dNZXJnZUNlbGxzLmdldEVsZW1lbnRCeUlkKCdvaycpLm9uY2xpY2sgPSBhcHBseTsKKyAgdGhpcy5kaWFsb2dNZXJnZUNlbGxzLnNob3coKTsKKyAgdGhpcy5kaWFsb2dNZXJnZUNlbGxzLmdldEVsZW1lbnRCeUlkKCdmX2NvbHMnKS5mb2N1cygpOworfQorCitUYWJsZU9wZXJhdGlvbnMucHJvdG90eXBlLmRpYWxvZ1RhYmxlUHJvcGVydGllcyA9IGZ1bmN0aW9uKCkgeworCisgIHZhciB0YWJsZSA9IHRoaXMuZ2V0Q2xvc2VzdCgidGFibGUiKTsKKyAgdmFyIHNlbGYgPSB0aGlzOworICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisKKyAgaWYoIXRoaXMuZGlhbG9nVGFibGVQcm9wZXJ0aWVzSHRtbCl7IC8vIHJldHJpZXZlIHRoZSByYXcgZGlhbG9nIGNvbnRlbnRzCisgICAgWGluaGEuX2dldGJhY2soIFhpbmhhLmdldFBsdWdpbkRpcigiVGFibGVPcGVyYXRpb25zIikgKyAnL3BvcHVwcy9kaWFsb2dUYWJsZS5odG1sJywgZnVuY3Rpb24oZ2V0YmFjaykgeyBzZWxmLmRpYWxvZ1RhYmxlUHJvcGVydGllc0h0bWwgPSBnZXRiYWNrOyBzZWxmLmRpYWxvZ1RhYmxlUHJvcGVydGllcygpOyB9KTsKKyAgICByZXR1cm47CisgIH0KKyAgaWYgKCF0aGlzLmRpYWxvZ1RhYmxlKSB7CisgICAgLy8gTm93IHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkLCBzbyB3ZSBjYW4gYnVpbGQgdGhlIGRpYWxvZy4KKyAgICB0aGlzLmRpYWxvZ1RhYmxlID0gbmV3IFhpbmhhLkRpYWxvZyhlZGl0b3IsIHRoaXMuZGlhbG9nVGFibGVQcm9wZXJ0aWVzSHRtbCwgJ1RhYmxlT3BlcmF0aW9ucycse3dpZHRoOjQ0MH0pCisgICAgdGhpcy5kaWFsb2dUYWJsZS5nZXRFbGVtZW50QnlJZCgnY2FuY2VsJykub25jbGljayA9IGZ1bmN0aW9uKCkgeyBzZWxmLmRpYWxvZ1RhYmxlLmhpZGUoKX07CisgIH0KKyAgdmFyIGRpYWxvZyA9IHRoaXMuZGlhbG9nVGFibGU7CisgIAorICB2YXIgU3R5bGVyID0gbmV3IFhpbmhhLklubGluZVN0eWxlcih0YWJsZSwgdGhpcy5lZGl0b3IsIGRpYWxvZyk7CisgIAorICBmdW5jdGlvbiBhcHBseSgpIHsKKyAgICB2YXIgcGFyYW1zID0gZGlhbG9nLmhpZGUoKTsKKyAgICBTdHlsZXIuYXBwbHlTdHlsZShwYXJhbXMpOworICAgIAorICAgIGZvciAodmFyIGkgaW4gcGFyYW1zKSB7CisgICAgICBpZih0eXBlb2YgcGFyYW1zW2ldID09ICdmdW5jdGlvbicpIGNvbnRpbnVlOworICAgICAgdmFyIHZhbCA9IHBhcmFtc1tpXTsKKyAgICAgIC8vaWYgKHZhbCA9PSBudWxsKSBjb250aW51ZTsKKyAgICAgIGlmICh0eXBlb2YgdmFsID09ICdvYmplY3QnICYmIHZhbCAhPSBudWxsICYmIHZhbC50YWdOYW1lKSB2YWwgPSB2YWwudmFsdWU7CisgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgIGNhc2UgImNhcHRpb24iOgorICAgICAgICBpZiAoL1xTLy50ZXN0KHZhbCkpIHsKKyAgICAgICAgICAvLyBjb250YWlucyBub24gd2hpdGUtc3BhY2UgY2hhcmFjdGVycworICAgICAgICAgIHZhciBjYXB0aW9uID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImNhcHRpb24iKVswXTsKKyAgICAgICAgICBpZiAoIWNhcHRpb24pIHsKKyAgICAgICAgICAgIGNhcHRpb24gPSBkaWFsb2cuZWRpdG9yLl9kb2MuY3JlYXRlRWxlbWVudCgiY2FwdGlvbiIpOworICAgICAgICAgICAgdGFibGUuaW5zZXJ0QmVmb3JlKGNhcHRpb24sIHRhYmxlLmZpcnN0Q2hpbGQpOworICAgICAgICAgIH0KKyAgICAgICAgICBjYXB0aW9uLmlubmVySFRNTCA9IHZhbDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAvLyBzZWFyY2ggZm9yIGNhcHRpb24gYW5kIGRlbGV0ZSBpdCBpZiBmb3VuZAorICAgICAgICAgIHZhciBjYXB0aW9uID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImNhcHRpb24iKVswXTsKKyAgICAgICAgICBpZiAoY2FwdGlvbikgeworICAgICAgICAgICAgY2FwdGlvbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNhcHRpb24pOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgInN1bW1hcnkiOgorICAgICAgICB0YWJsZS5zdW1tYXJ5ID0gdmFsOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgImFsaWduIjoKKyAgICAgICAgdGFibGUuYWxpZ24gPSB2YWw7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAic3BhY2luZyI6CisgICAgICAgIHRhYmxlLmNlbGxTcGFjaW5nID0gdmFsOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgInBhZGRpbmciOgorICAgICAgICB0YWJsZS5jZWxsUGFkZGluZyA9IHZhbDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICJib3JkZXJzIjoKKyAgICAgICAgaWYoIWVkaXRvci5jb25maWcuVGFibGVPcGVyYXRpb25zLm5vRnJhbWVSdWxlc09wdGlvbnMpIHRhYmxlLmJvcmRlciA9IHZhbDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICJmcmFtZXMiOgorICAgICAgICBpZighZWRpdG9yLmNvbmZpZy5UYWJsZU9wZXJhdGlvbnMubm9GcmFtZVJ1bGVzT3B0aW9ucykgdGFibGUuZnJhbWUgPSB2YWw7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAicnVsZXMiOgorICAgICAgICBpZighZWRpdG9yLmNvbmZpZy5UYWJsZU9wZXJhdGlvbnMubm9GcmFtZVJ1bGVzT3B0aW9ucykgdGFibGUucnVsZXMgPSB2YWw7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIC8vIFdpdGhvdXQgZnJhbWUgYW5kIHJ1bGVzIG9wdGlvbnMsIGFwcGx5IHRoZSBib3JkZXIgc3R5bGUKKyAgICAvLyBhbHNvIHRvIHRoZSBjZWxscyBpbiB0aGUgdGFibGUsIHRoaXMgaXMgd2hhdCB0aGUgdXNlciAKKyAgICAvLyB3aWxsIHByb2JhYmx5IHdhbnQgKHRoZXkgY2FuIGNoYW5nZSBpdCBsYXRlciBwZXItY2VsbCkKKyAgICBpZihlZGl0b3IuY29uZmlnLlRhYmxlT3BlcmF0aW9ucy5ub0ZyYW1lUnVsZXNPcHRpb25zKQorICAgIHsKKyAgICAgIHZhciBhcHBseVRvID0gWyBdOworICAgICAgZnVuY3Rpb24gZmluZENlbGxzKGluVGhpcykKKyAgICAgIHsKKyAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGluVGhpcy5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgaWYoaW5UaGlzLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT0gMSAmJiBpblRoaXMuY2hpbGROb2Rlc1tpXS50YWdOYW1lLnRvTG93ZXJDYXNlKCkubWF0Y2goL3Rib2R5fHRoZWFkfHRyLykpCisgICAgICAgICAgeworICAgICAgICAgICAgZmluZENlbGxzKGluVGhpcy5jaGlsZE5vZGVzW2ldKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZihpblRoaXMuY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PSAxICYmIGluVGhpcy5jaGlsZE5vZGVzW2ldLnRhZ05hbWUudG9Mb3dlckNhc2UoKS5tYXRjaCgvdGR8dGgvKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBhcHBseVRvLnB1c2goaW5UaGlzLmNoaWxkTm9kZXNbaV0pOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgZmluZENlbGxzKHRhYmxlKTsKKyAgICAgIAorICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFwcGx5VG8ubGVuZ3RoOyBpKyspCisgICAgICB7CisgICAgICAgIFN0eWxlci5lbGVtZW50ID0gYXBwbHlUb1tpXTsKKyAgICAgICAgU3R5bGVyLmFwcGx5U3R5bGVJZk1hdGNoKHBhcmFtcywgL2JvcmRlcigkfENvbG9yfFdpZHRofFN0eWxlKS8pOworICAgICAgfQorICAgICAgCisgICAgICAvLyBJdCBpcyBhbHNvIGZyaWVuZGx5IHRvIHJlbW92ZSB0YWJsZSBib3JkZXJzIGFzIGl0IHRlbmRzIHRvIG92ZXJyaWRlCisgICAgICAvLyBhbmQgdGhpcyBjb3VsZCBiZSBjb25mdXNpbmcgd2hlbiBzdHlsaW5nIGJvcmRlcnMgKHVzZXIgdGhpbmtzIGl0IGRpZG4ndCB3b3JrKQorICAgICAgWGluaGEuX3JlbW92ZUNsYXNzKHRhYmxlLCAnaHRtdGFibGVib3JkZXJzJyk7CisgICAgfQorICAgIAorICAgIC8vIHZhcmlvdXMgd29ya2Fyb3VuZHMgdG8gcmVmcmVzaCB0aGUgdGFibGUgZGlzcGxheSAoR2Vja28sCisgICAgLy8gd2hhdCdzIGdvaW5nIG9uPyEgZG8gbm90IGRpc2FwcG9pbnQgbWUhKQorICAgIHNlbGYuZWRpdG9yLmZvcmNlUmVkcmF3KCk7CisgICAgc2VsZi5lZGl0b3IuZm9jdXNFZGl0b3IoKTsKKyAgICBzZWxmLmVkaXRvci51cGRhdGVUb29sYmFyKCk7CisgICAgdmFyIHNhdmVfY29sbGFwc2UgPSB0YWJsZS5zdHlsZS5ib3JkZXJDb2xsYXBzZTsKKyAgICB0YWJsZS5zdHlsZS5ib3JkZXJDb2xsYXBzZSA9ICJjb2xsYXBzZSI7CisgICAgdGFibGUuc3R5bGUuYm9yZGVyQ29sbGFwc2UgPSAic2VwYXJhdGUiOworICAgIHRhYmxlLnN0eWxlLmJvcmRlckNvbGxhcHNlID0gc2F2ZV9jb2xsYXBzZTsKKyAgfQorICAKKyAgdmFyIHN0X2xheW91dCA9IFN0eWxlci5jcmVhdGVTdHlsZUxheW91dEZpZWxkc2V0KCk7CisgIHZhciBwID0gZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJUT19sYXlvdXQiKTsKKyAgcC5yZXBsYWNlQ2hpbGQoc3RfbGF5b3V0LHAuZmlyc3RDaGlsZCk7CisgIAorICB2YXIgc3RfcHJvcCA9IFN0eWxlci5jcmVhdGVTdHlsZUZpZWxkc2V0KCk7CisgIHAgPSBkaWFsb2cuZ2V0RWxlbWVudEJ5SWQoIlRPX3N0eWxlIik7CisgIHAucmVwbGFjZUNoaWxkKHN0X3Byb3AscC5maXJzdENoaWxkKTsKKworICBpZihlZGl0b3IuY29uZmlnLlRhYmxlT3BlcmF0aW9ucy5ub0ZyYW1lUnVsZXNPcHRpb25zKQorICB7CisgICAgZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdUT19mcmFtZVJ1bGVzJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgfQorICAKKyAgdGhpcy5kaWFsb2dUYWJsZS5nZXRFbGVtZW50QnlJZCgnb2snKS5vbmNsaWNrID0gYXBwbHk7CisKKyAgLy8gZ2F0aGVyIGVsZW1lbnQncyB2YWx1ZXMKKyAgdmFyIHZhbHVlcyA9IHt9OworICB2YXIgY2FwZWwgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY2FwdGlvbiIpWzBdOworICBpZiAoY2FwZWwpIHsKKyAgICB2YWx1ZXNbJ2NhcHRpb24nXSA9IGNhcGVsLmlubmVySFRNTDsKKyAgfQorICBlbHNlIHZhbHVlc1snY2FwdGlvbiddID0gIiI7CisgIHZhbHVlc1snc3VtbWFyeSddID0gdGFibGUuc3VtbWFyeTsKKyAgCisgIHZhbHVlc1snc3BhY2luZyddID0gdGFibGUuY2VsbFNwYWNpbmc7CisgIHZhbHVlc1sncGFkZGluZyddID0gdGFibGUuY2VsbFBhZGRpbmc7CisgIHZhciBmX2JvcmRlcnMgPSB0YWJsZS5ib3JkZXI7CisgIAorICB2YWx1ZXNbJ2ZyYW1lcyddID0gdGFibGUuZnJhbWU7CisgIHZhbHVlc1sncnVsZXMnXSA9IHRhYmxlLnJ1bGVzOworICAKKyAgdGhpcy5kaWFsb2dUYWJsZS5zaG93KHZhbHVlcyk7Cit9OworCitUYWJsZU9wZXJhdGlvbnMucHJvdG90eXBlLmRpYWxvZ1Jvd0NlbGxQcm9wZXJ0aWVzID0gZnVuY3Rpb24oY2VsbCkgeworICAvLyByZXRyaWV2ZSBleGlzdGluZyB2YWx1ZXMKKyAgdmFyIGVsZW1lbnQgPSBjZWxsID8gdGhpcy5nZXRDbG9zZXN0TWF0Y2goL14odGR8dGgpJC9pKSA6IHRoaXMuZ2V0Q2xvc2VzdCgidHIiKTsKKyAgdmFyIHRhYmxlID0gdGhpcy5nZXRDbG9zZXN0KCJ0YWJsZSIpOworCisgIHZhciBzZWxmID0gdGhpczsKKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworCisgIGlmKCFzZWxmLmRpYWxvZ1Jvd0NlbGxQcm9wZXJ0aWVzSHRtbCkgLy8gcmV0cmlldmUgdGhlIHJhdyBkaWFsb2cgY29udGVudHMKKyAgeworICAgIFhpbmhhLl9nZXRiYWNrKCBYaW5oYS5nZXRQbHVnaW5EaXIoIlRhYmxlT3BlcmF0aW9ucyIpICsgJy9wb3B1cHMvZGlhbG9nUm93Q2VsbC5odG1sJywgZnVuY3Rpb24oZ2V0YmFjaykgeyBzZWxmLmRpYWxvZ1Jvd0NlbGxQcm9wZXJ0aWVzSHRtbCA9IGdldGJhY2s7IHNlbGYuZGlhbG9nUm93Q2VsbFByb3BlcnRpZXMoY2VsbCk7IH0pOworICAgIHJldHVybjsKKyAgfQorICBpZiAoIXRoaXMuZGlhbG9nUm93Q2VsbCkgeworICAgIC8vIE5vdyB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZCwgc28gd2UgY2FuIGJ1aWxkIHRoZSBkaWFsb2cuCisgICAgdGhpcy5kaWFsb2dSb3dDZWxsID0gbmV3IFhpbmhhLkRpYWxvZyhlZGl0b3IsIHNlbGYuZGlhbG9nUm93Q2VsbFByb3BlcnRpZXNIdG1sLCAnVGFibGVPcGVyYXRpb25zJyx7d2lkdGg6NDQwfSkKKyAgICB0aGlzLmRpYWxvZ1Jvd0NlbGwuZ2V0RWxlbWVudEJ5SWQoJ2NhbmNlbCcpLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsgc2VsZi5kaWFsb2dSb3dDZWxsLmhpZGUoKX07CisgIH0KKyAgCisgIHZhciBkaWFsb2cgPSB0aGlzLmRpYWxvZ1Jvd0NlbGw7CisgIGRpYWxvZy5nZXRFbGVtZW50QnlJZCgndGl0bGUnKS5pbm5lckhUTUwgPSBjZWxsID8gWGluaGEuX2xjKCJDZWxsIFByb3BlcnRpZXMiLCAiVGFibGVPcGVyYXRpb25zIikgOiBYaW5oYS5fbGMoIlJvdyBQcm9wZXJ0aWVzIiwgIlRhYmxlT3BlcmF0aW9ucyIpOworICB2YXIgU3R5bGVyID0gbmV3IFhpbmhhLklubGluZVN0eWxlcihlbGVtZW50LCBzZWxmLmVkaXRvciwgZGlhbG9nKTsKKyAgCisgIC8vIEluc2VydCBhIGNlbGwgdHlwZSBzZWxlY3RvciBpbnRvIHRoZSBsYXlvdXQgc2VjdGlvbgorICB2YXIgdHlwZVJvdyAgICA9IGRpYWxvZy5jcmVhdGVFbGVtZW50KCd0cicpOworICB2YXIgdHlwZUxhYmVsICA9IGRpYWxvZy5jcmVhdGVFbGVtZW50KCd0aCcpOworICB0eXBlTGFiZWwuY2xhc3NOYW1lID0gJ2xhYmVsJzsKKyAgdHlwZUxhYmVsLmlubmVySFRNTCA9IFhpbmhhLl9sYygnQ2VsbCBUeXBlOicsICdUYWJsZU9wZXJhdGlvbnMnKTsKKyAgdmFyIHR5cGVTZWxlY3QgPSBkaWFsb2cuY3JlYXRlRWxlbWVudCgnc2VsZWN0JywgJ3RvX3R5cGVfc2VsZWN0Jyk7CisgIHR5cGVTZWxlY3Qub3B0aW9uc1swXSA9IG5ldyBPcHRpb24oWGluaGEuX2xjKCdEbyBOb3QgQ2hhbmdlJywnVGFibGVPcGVyYXRpb25zJykpOworICB0eXBlU2VsZWN0Lm9wdGlvbnNbMV0gPSBuZXcgT3B0aW9uKFhpbmhhLl9sYygnTm9ybWFsICh0ZCknLCdUYWJsZU9wZXJhdGlvbnMnKSwgJ3RkJyk7CisgIHR5cGVTZWxlY3Qub3B0aW9uc1syXSA9IG5ldyBPcHRpb24oWGluaGEuX2xjKCdIZWFkZXIgKHRoKScsJ1RhYmxlT3BlcmF0aW9ucycpLCAndGgnKTsKKyAgCisgIHR5cGVSb3cuYXBwZW5kQ2hpbGQodHlwZUxhYmVsKTsKKyAgdHlwZVJvdy5hcHBlbmRDaGlsZCh0eXBlU2VsZWN0KTsKKyAgCisgIGZ1bmN0aW9uIGFwcGx5KCkgeworICAgIHZhciBwYXJhbXMgPSBkaWFsb2cuaGlkZSgpOworICAgIAorICAgIC8vIElmIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBjZWxsIHR5cGUocykKKyAgICBpZih0eXBlU2VsZWN0LnNlbGVjdGVkSW5kZXggPiAwKQorICAgIHsKKyAgICAgIGlmKGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICd0cicpCisgICAgICB7CisgICAgICAgIC8vIENoYW5nZSB0ZCBpbnRvIHRoCisgICAgICAgIHZhciB0b0NoYW5nZSA9IGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHlwZVNlbGVjdC5vcHRpb25zW3R5cGVTZWxlY3Quc2VsZWN0ZWRJbmRleF0udmFsdWUgPT0gJ3RkJyA/ICd0aCc6ICd0ZCcpOworICAgICAgICBmb3IodmFyIGkgPSB0b0NoYW5nZS5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pCisgICAgICAgIHsKKyAgICAgICAgICBpZihlbGVtZW50ID09IHRvQ2hhbmdlW2ldLnBhcmVudE5vZGUpCisgICAgICAgICAgeworICAgICAgICAgICAgdmFyIG5ld05vZGUgPSBlZGl0b3IuY29udmVydE5vZGUodG9DaGFuZ2VbaV0sIHR5cGVTZWxlY3Qub3B0aW9uc1t0eXBlU2VsZWN0LnNlbGVjdGVkSW5kZXhdLnZhbHVlKTsKKyAgICAgICAgICAgIGlmKHRvQ2hhbmdlW2ldLnBhcmVudE5vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHRvQ2hhbmdlW2ldLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld05vZGUsdG9DaGFuZ2VbaV0pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBpZihlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPSB0eXBlU2VsZWN0Lm9wdGlvbnNbdHlwZVNlbGVjdC5zZWxlY3RlZEluZGV4XS52YWx1ZSkKKyAgICAgICAgeyAgICAgICAgICAKKyAgICAgICAgICBTdHlsZXIuZWxlbWVudCA9IGVkaXRvci5jb252ZXJ0Tm9kZShlbGVtZW50LCB0eXBlU2VsZWN0Lm9wdGlvbnNbdHlwZVNlbGVjdC5zZWxlY3RlZEluZGV4XS52YWx1ZSk7CisgICAgICAgICAgaWYoZWxlbWVudC5wYXJlbnROb2RlKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoU3R5bGVyLmVsZW1lbnQsZWxlbWVudCk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsZW1lbnQgPSBTdHlsZXIuZWxlbWVudAorICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIAorICAgIFN0eWxlci5hcHBseVN0eWxlKHBhcmFtcyk7ICAgIAorICAgIAorICAgIC8vIHZhcmlvdXMgd29ya2Fyb3VuZHMgdG8gcmVmcmVzaCB0aGUgdGFibGUgZGlzcGxheSAoR2Vja28sCisgICAgLy8gd2hhdCdzIGdvaW5nIG9uPyEgZG8gbm90IGRpc2FwcG9pbnQgbWUhKQorICAgIHNlbGYuZWRpdG9yLmZvcmNlUmVkcmF3KCk7CisgICAgc2VsZi5lZGl0b3IuZm9jdXNFZGl0b3IoKTsKKyAgICBzZWxmLmVkaXRvci51cGRhdGVUb29sYmFyKCk7CisgICAgdmFyIHNhdmVfY29sbGFwc2UgPSB0YWJsZS5zdHlsZS5ib3JkZXJDb2xsYXBzZTsKKyAgICB0YWJsZS5zdHlsZS5ib3JkZXJDb2xsYXBzZSA9ICJjb2xsYXBzZSI7CisgICAgdGFibGUuc3R5bGUuYm9yZGVyQ29sbGFwc2UgPSAic2VwYXJhdGUiOworICAgIHRhYmxlLnN0eWxlLmJvcmRlckNvbGxhcHNlID0gc2F2ZV9jb2xsYXBzZTsKKyAgfQorICAKKyAgdmFyIHN0X2xheW91dCA9IFN0eWxlci5jcmVhdGVTdHlsZUxheW91dEZpZWxkc2V0KCk7CisgIHZhciBwID0gZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJUT19sYXlvdXQiKTsKKyAgcC5yZXBsYWNlQ2hpbGQoc3RfbGF5b3V0LHAuZmlyc3RDaGlsZCk7CisgIAorICAvLyBJbnNlcnQgdGhlIHR5cGUgc2VsZWN0b3IgaW50byB0aGUgTGF5b3V0IHNlY3Rpb24KKyAgcC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGFibGUnKVswXS5hcHBlbmRDaGlsZCh0eXBlUm93KTsKKyAgCisgIAorICB2YXIgc3RfcHJvcCA9IFN0eWxlci5jcmVhdGVTdHlsZUZpZWxkc2V0KCk7CisgIHAgPSBkaWFsb2cuZ2V0RWxlbWVudEJ5SWQoIlRPX3N0eWxlIik7CisgIHAucmVwbGFjZUNoaWxkKHN0X3Byb3AscC5maXJzdENoaWxkKTsKKworICAKKyAgdGhpcy5kaWFsb2dSb3dDZWxsLmdldEVsZW1lbnRCeUlkKCdvaycpLm9uY2xpY2sgPSBhcHBseTsKKyAgdGhpcy5kaWFsb2dSb3dDZWxsLnNob3coKTsKK307CisKK1RhYmxlT3BlcmF0aW9ucy5wcm90b3R5cGUub25LZXlQcmVzcyA9IGZ1bmN0aW9uKGV2KQoreworICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisgCisgIC8vIE5vdCBlbmFibGVkLCBkcm9wIG91dAorICBpZighZWRpdG9yLmNvbmZpZy5UYWJsZU9wZXJhdGlvbnMudGFiVG9OZXh0KSByZXR1cm4gZmFsc2U7CisgIAorICBpZiggZXYua2V5Q29kZSAhPT0gOSApIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgdmFyIGN1cnJlbnRjZWxsID0gZWRpdG9yLmdldEVsZW1lbnRJc09yRW5jbG9zaW5nU2VsZWN0aW9uKFsndGQnLCd0aCddKTsKKyAgCisgIGlmKCBjdXJyZW50Y2VsbCA9PT0gbnVsbCApIAorICB7CisgICAgLy8gTm90IGluIGEgdGFibGUgY2VsbCwgZHJvcCB0aHJvdWdoIGZvciBvdGhlcnMKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBYaW5oYS5fc3RvcEV2ZW50KGV2KTsKKyAgICAKKyAgLy8gZmluZCB0aGUgbmV4dCBjZWxsLCBnZXQgYWxsIHRoZSBjZWxscyAodGQvdGgpIHdoaWNoIGFyZSBpbiB0aGlzIHRhYmxlCisgIC8vIGZpbmQgb3Vyc2VsZiBpbiB0aGF0IGxpc3QKKyAgLy8gc2V0IHRoZSBuZXcgY2VsbCB0byBwaWNrIHRvIGJlIHRoZSBjdXJyZW50IGluZGV4ICsvLSAxCisgIC8vIHNlbGVjdCB0aGF0IG5ldyBjZWxsCisgIHZhciByb3cgPSBjdXJyZW50Y2VsbC5wYXJlbnROb2RlOworICB2YXIgY2FuZGlkYXRlcyA9IFsgXTsKKyAgdmFyIGFsbCA9IHJvdy5wYXJlbnROb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikKKyAgdmFyIG91cmluZGV4ID0gbnVsbDsKKyAgCisgIGZvcih2YXIgaSA9IDA7IGkgPCBhbGwubGVuZ3RoOyBpKyspCisgIHsKKyAgICAvLyBTYW1lIHRhYmxlIChvciB0Ym9keS90aGVhZCkKKyAgICBpZihhbGxbaV0ucGFyZW50Tm9kZS5wYXJlbnROb2RlICE9IGN1cnJlbnRjZWxsLnBhcmVudE5vZGUucGFyZW50Tm9kZSkgY29udGludWU7CisgICAgCisgICAgaWYoYWxsW2ldLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAndGQnIHx8IGFsbFtpXS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ3RoJykKKyAgICB7CisgICAgICBjYW5kaWRhdGVzW2NhbmRpZGF0ZXMubGVuZ3RoXSA9IGFsbFtpXTsKKyAgICAgIGlmKGFsbFtpXSA9PSBjdXJyZW50Y2VsbCkgb3VyaW5kZXg9Y2FuZGlkYXRlcy5sZW5ndGgtMTsKKyAgICB9CisgIH0KKyAgCisgIHZhciBuZXh0SW5kZXggPSBudWxsOworICBpZihldi5zaGlmdEtleSkKKyAgeworICAgICBuZXh0SW5kZXggPSBNYXRoLm1heCgwLG91cmluZGV4LTEpOworICB9CisgIGVsc2UKKyAgeworICAgIG5leHRJbmRleCA9IE1hdGgubWluKG91cmluZGV4KzEsIGNhbmRpZGF0ZXMubGVuZ3RoLTEpOworICB9CisgIAorICBpZihvdXJpbmRleCA9PSBuZXh0SW5kZXgpCisgIHsKKyAgICAvLyBObyBvdGhlciBjZWxsIHRvIGdvIHRvLCBzdG9wIG5vdworICAgIC8vIG1heWJlIEBUT0RPIGFkZCBhIG5ldyByb3c/CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgCisgIGVkaXRvci5zZWxlY3ROb2RlQ29udGVudHMoY2FuZGlkYXRlc1tuZXh0SW5kZXhdKTsKKyAgCisgIC8qIElmIHlvdSB3YW50ZWQgdG8gY29sbGFwc2UgdGhlIHNlbGVjdGlvbiB0byBwdXQgdGhlIGNhcmV0IGJlZm9yZS9hZnRlciBpdCwgeW91IGNvdWRsIGRvIHRoaXMuCisgICAqICBidXQgSSB0aGluayBoYXZpbmcgaXQgc2VsZWN0ZWQKKyAgICogaXMgbW9yZSBuYXR1cmFsLCB0aGF0J3MgaG93IHNwcmVhZHNoZWV0cyB3b3JrICh5b3UgdGFiIGludG8gYSBmaWVsZCBhbmQgc3RhcnQgdHlwaW5nIGl0IHdpbGwKKyAgICogcmVwbGFjZSB0aGUgZmllbGQgY29udGVudHMgd2l0aCB0aGUgbmV3IGNvbnRlbnRzKQorICAgCisgICAgICBpZihvdXJpbmRleCA8IG5leHRJbmRleCkKKyAgICAgIHsKKyAgICAgICAgc2VsLmNvbGxhcHNlVG9FbmQoKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgc2VsLmNvbGxhcHNlVG9FbmQoKTsKKyAgICAgIH0KKyAgKi8KKworICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9jZWxsLWRlbGV0ZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9pbWcvY2VsbC1kZWxldGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZDYyOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9pbWcvY2VsbC1kZWxldGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9jZWxsLWluc2VydC1hZnRlci5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9pbWcvY2VsbC1pbnNlcnQtYWZ0ZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZWE4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9pbWcvY2VsbC1pbnNlcnQtYWZ0ZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9jZWxsLWluc2VydC1iZWZvcmUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvaW1nL2NlbGwtaW5zZXJ0LWJlZm9yZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU3YjM2YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9jZWxsLWluc2VydC1iZWZvcmUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9jZWxsLW1lcmdlLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9jZWxsLW1lcmdlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGEzOGYzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvaW1nL2NlbGwtbWVyZ2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9jZWxsLXByb3AuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvaW1nL2NlbGwtcHJvcC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk0OTVhYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9jZWxsLXByb3AuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9jZWxsLXNwbGl0LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9jZWxsLXNwbGl0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjIyNTkzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvaW1nL2NlbGwtc3BsaXQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9jb2wtZGVsZXRlLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9jb2wtZGVsZXRlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjAyODg2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvaW1nL2NvbC1kZWxldGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9jb2wtaW5zZXJ0LWFmdGVyLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9jb2wtaW5zZXJ0LWFmdGVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWZmYjZlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvaW1nL2NvbC1pbnNlcnQtYWZ0ZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9jb2wtaW5zZXJ0LWJlZm9yZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9pbWcvY29sLWluc2VydC1iZWZvcmUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMzM1OWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9pbWcvY29sLWluc2VydC1iZWZvcmUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9jb2wtc3BsaXQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvaW1nL2NvbC1zcGxpdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZiZTk0OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9jb2wtc3BsaXQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9yb3ctZGVsZXRlLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9yb3ctZGVsZXRlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmVkMzg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvaW1nL3Jvdy1kZWxldGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9yb3ctaW5zZXJ0LWFib3ZlLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9yb3ctaW5zZXJ0LWFib3ZlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2JlY2ViCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvaW1nL3Jvdy1pbnNlcnQtYWJvdmUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9yb3ctaW5zZXJ0LXVuZGVyLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9yb3ctaW5zZXJ0LXVuZGVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWZjNTg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvaW1nL3Jvdy1pbnNlcnQtdW5kZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9yb3ctcHJvcC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9pbWcvcm93LXByb3AuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhOTAwMTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9pbWcvcm93LXByb3AuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9yb3ctc3BsaXQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvaW1nL3Jvdy1zcGxpdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ3OTlmMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy9yb3ctc3BsaXQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy90YWJsZS1wcm9wLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2ltZy90YWJsZS1wcm9wLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGVjNTUzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvaW1nL3RhYmxlLXByb3AuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvY2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL2NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNzhlNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL2NoLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgIk9LIjogIuWlvSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9jei5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvY3ouanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZlZDBiNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvY3ouanMKQEAgLTAsMCArMSw5MCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjeiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGwgZm91ciBzaWRlcyI6ICJWxaFlY2hueSDEjXR5xZlpIHN0cmFueSIsCisgICAgIkJvcmRlcnMiOiAiT2JyeXN5IiwKKyAgICAiQ2FuY2VsIjogIlpydcWhaXQiLAorICAgICJDYXB0aW9uIjogIlRpdHVsZWsiLAorICAgICJDZWxsIFByb3BlcnRpZXMiOiAiVmxhc3Rub3N0aSBidcWIa3kiLAorICAgICJDZWxsIHByb3BlcnRpZXMiOiAiVmxhc3Rub3N0aSBidcWIa3kiLAorICAgICJEZWxldGUgY2VsbCI6ICJTbWF6YXQgYnXFiGt1IiwKKyAgICAiRGVsZXRlIGNvbHVtbiI6ICJTbWF6YXQgc2xvdXBlYyIsCisgICAgIkRlbGV0ZSByb3ciOiAiU21hemF0IMWZw6FkZWsiLAorICAgICJEZXNjcmlwdGlvbiI6ICJQb3BpcyIsCisgICAgIkZyYW1lcyI6ICJSw6FtZcSNa3kiLAorICAgICJJbnNlcnQgY2VsbCBhZnRlciI6ICJWbG/Fvml0IGJ1xYhrdSB6YSIsCisgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICJWbG/Fvml0IGJ1xYhrdSBwxZllZCIsCisgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAiVmxvxb5pdCBzbG91cGVjIHphIiwKKyAgICAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiOiAiVmxvxb5pdCBzbG91cGVjIHDFmWVkIiwKKyAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICJTbWF6YXQgxZnDoWRlayBwb2QiLAorICAgICJJbnNlcnQgcm93IGJlZm9yZSI6ICJTbWF6YXQgxZnDoWRlayBuYWQiLAorICAgICJNZXJnZSBjZWxscyI6ICJTcG9qaXQgYnXFiGt5IiwKKyAgICAiTm8gcnVsZXMiOiAixb3DoWRuw6kgxI3DoXJ5IiwKKyAgICAiTm8gc2lkZXMiOiAixb3DoWRuw6kgc3RyYW55IiwKKyAgICAiT0siOiAiT0siLAorICAgICJQYWRkaW5nIjogIk9kc2F6b3bDoW7DrSIsCisgICAgIlBsZWFzZSBjbGljayBpbnRvIHNvbWUgY2VsbCI6ICJQcm9zw61tIGtsaWtuxJt0ZSBkbyBuxJtrdGVyw6kgYnXFiGt5IiwKKyAgICAiUm93IFByb3BlcnRpZXMiOiAiVmxhc3Rub3N0aSDFmcOhZGt1IiwKKyAgICAiUm93IHByb3BlcnRpZXMiOiAiVmxhc3Rub3N0aSDFmcOhZGt1IiwKKyAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICLEjMOhcnkgbWV6aSB2xaFlbWkgxZnDoWRreSBpIHNsb3VwY2kiLAorICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGNvbHVtbnMgb25seSI6ICLEjMOhcnkgcG91emUgbWV6aSBzbG91cGNpIiwKKyAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiByb3dzIG9ubHkiOiAixIzDoXJ5IHBvdXplIG1lemkgxZnDoWRreSIsCisgICAgIlNwYWNpbmciOiAiTWV6ZXJ5IiwKKyAgICAiU3BhY2luZyBhbmQgcGFkZGluZyI6ICJNZXplcnkgYSBvZHNhem92w6Fuw60iLAorICAgICJTcGxpdCBjb2x1bW4iOiAiUm96ZMSbbGl0IHNsb3VwZWMiLAorICAgICJTcGxpdCByb3ciOiAiUm96ZMSbbGl0IMWZw6FkZWsiLAorICAgICJTdW1tYXJ5IjogIlNocm51dMOtIiwKKyAgICAiVGFibGUgUHJvcGVydGllcyI6ICJWbGFzdG5vc3RpIHRhYnVsa3kiLAorICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogIlZsYXN0bm9zdGkgdGFidWxreSIsCisgICAgIlRoZSBib3R0b20gc2lkZSBvbmx5IjogIlBvdXplIHNwb2Ruw60gc3RyYW5hIiwKKyAgICAiVGhlIGxlZnQtaGFuZCBzaWRlIG9ubHkiOiAiUG91emUgbGV2w6Egc3RyYW5hIiwKKyAgICAiVGhlIHJpZ2h0IGFuZCBsZWZ0IHNpZGVzIG9ubHkiOiAiUG91emUgbGV2w6EgYSBwcmF2w6Egc3RyYW5hIiwKKyAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIlBvdXplIHByYXbDoSBzdHJhbmEiLAorICAgICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSI6ICJQb3V6ZSBob3Juw60gYSBkb2xuw60gc3RyYW5hIiwKKyAgICAiVGhlIHRvcCBzaWRlIG9ubHkiOiAiUG91emUgaG9ybsOtIHN0cmFuYSIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiI6ICJYaW5oYSB6YmFixJtsZSBvZG3DrXTDoSBzbWF6YXQgcG9zbGVkbsOtIGJ1xYhrdSB2IMWZw6Fka3UuIiwKKyAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICJYaW5oYSB6YmFixJtsZSBvZG3DrXTDoSBzbWF6YXQgcG9zbGVkbsOtIHNsb3VwZWMgdiB0YWJ1bGNlLiIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iOiAiWGluaGEgemJhYsSbbGUgb2Rtw610w6Egc21hemF0IHBvc2xlZG7DrSDFmcOhZGVrIHYgdGFidWxjZS4iLAorICAgICJwaXhlbHMiOiAicGl4ZWzFryIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFsaWduIjogIlphcm92bsOhbsOtIiwKKyAgICAgICAgIkJhY2tncm91bmQiOiAiUG96YWTDrSIsCisgICAgICAgICJCYXNlbGluZSI6ICJaw6FrbGFkbsOtIGxpbmthIiwKKyAgICAgICAgIkJvcmRlciI6ICJPYnJ5cyIsCisgICAgICAgICJCb3R0b20iOiAiRG9sxa8iLAorICAgICAgICAiQ2VudGVyIjogIk5hIHN0xZllZCIsCisgICAgICAgICJDaGFyIjogIlpuYWsiLAorICAgICAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAiU3RsYcSNZW7DqSBva3JhamUiLAorICAgICAgICAiQ29sb3IiOiAiQmFydmEiLAorICAgICAgICAiRkcgQ29sb3IiOiAiQmFydmEgcG9wxZllZMOtIiwKKyAgICAgICAgIkZsb2F0IjogIk9idMOpa8OhbsOtIiwKKyAgICAgICAgIkhlaWdodCI6ICJWw73FoWthIiwKKyAgICAgICAgIkhvdyBtYW55IGNvbHVtbnMgd291bGQgeW91IGxpa2UgdG8gbWVyZ2U/IjogIktvbGlrIHNsb3VwY8WvIHNpIHDFmWVqZXRlIHNwb2ppdD8iLAorICAgICAgICAiSG93IG1hbnkgcm93cyB3b3VsZCB5b3UgbGlrZSB0byBtZXJnZT8iOiAiS29saWsgxZnDoWRrxa8gc2kgcMWZZWpldGUgc3Bvaml0PyIsCisgICAgICAgICJJbWFnZSBVUkwiOiAiQWRyZXNhIG9icsOhemt1IiwKKyAgICAgICAgIkp1c3RpZnkiOiAiRG8gc3RyYW4iLAorICAgICAgICAiTGF5b3V0IjogIlJvemxvxb5lbsOtIiwKKyAgICAgICAgIkxlZnQiOiAiVmxldm8iLAorICAgICAgICAiTWFyZ2luIjogIk9rcmFqIiwKKyAgICAgICAgIk1pZGRsZSI6ICJOYSBzdMWZZWQiLAorICAgICAgICAiTm9uZSI6ICLFvcOhZG7DqSIsCisgICAgICAgICJSaWdodCI6ICJWcHJhdm8iLAorICAgICAgICAiUnVsZXMiOiAixIzDoXJ5IiwKKyAgICAgICAgIlNwbGl0IGNlbGwiOiAiUm96ZMSbbGl0IGJ1xYhrdSIsCisgICAgICAgICJTdHlsZSBbQ1NTXSI6ICJLYXNrw6Fkb3bDqSBzdHlseSAoQ1NTKSIsCisgICAgICAgICJUZXh0IGFsaWduIjogIlphcm92bsOhbsOtIHRleHR1IiwKKyAgICAgICAgIlRvcCI6ICJOYWhvcnUiLAorICAgICAgICAiVW5zZXQgY29sb3IiOiAiWnJ1xaFpdCBiYXJ2dSIsCisgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICJTdmlzbMOpIHphcm92bsOhbsOtIiwKKyAgICAgICAgIldpZHRoIjogIsWgw63FmWthIiwKKyAgICAgICAgInBlcmNlbnQiOiAicHJvY2VudCIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvZGEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZjEyMDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL2RhLmpzCkBAIC0wLDAgKzEsOTEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxsIGZvdXIgc2lkZXMiOiAiQWxsZSBmaXJlIHNpZGVyIiwKKyAgICAiQm9yZGVycyI6ICJLYW50ZXIiLAorICAgICJDYW5jZWwiOiAiRm9ydHJ5ZCIsCisgICAgIkNhcHRpb24iOiAiVGl0ZWwiLAorICAgICJDZWxsIFByb3BlcnRpZXMiOiAiQ2VsbGUgZWdlbnNrYWJlciIsCisgICAgIkNlbGwgcHJvcGVydGllcyI6ICJDZWxsZSBlZ2Vuc2thYmVyIiwKKyAgICAiRGVsZXRlIGNlbGwiOiAiU2xldCBjZWxsZSIsCisgICAgIkRlbGV0ZSBjb2x1bW4iOiAiU2xldCBrb2xsb25uZSIsCisgICAgIkRlbGV0ZSByb3ciOiAiU2xldCByw6Zra2UiLAorICAgICJEZXNjcmlwdGlvbiI6ICJCZXNrcml2ZWxzZSIsCisgICAgIkZyYW1lcyI6ICJVZHZlbmRpZyIsCisgICAgIkluc2VydCBjZWxsIGFmdGVyIjogIkluZHPDpnQgY2VsbGUgZWZ0ZXIiLAorICAgICJJbnNlcnQgY2VsbCBiZWZvcmUiOiAiSW5kc8OmdCBjZWxsZSBmw7hyIiwKKyAgICAiSW5zZXJ0IGNvbHVtbiBhZnRlciI6ICJJbmRzw6Z0IGtvbG9ubmUgZWZ0ZXIiLAorICAgICJJbnNlcnQgY29sdW1uIGJlZm9yZSI6ICJJbmRzw6Z0IGtvbG9ubmUgZsO4ciIsCisgICAgIkluc2VydCByb3cgYWZ0ZXIiOiAiSW5kc8OmdCByw6Zra2UgZWZ0ZXIiLAorICAgICJJbnNlcnQgcm93IGJlZm9yZSI6ICJJbmRzw6Z0IHLDpmtrZSBmw7hyIiwKKyAgICAiTWVyZ2UgY2VsbHMiOiAiU2FtbWVuc8OmdCBjZWxsZXIiLAorICAgICJObyBydWxlcyI6ICJJbmdlbiByYW1tZXIiLAorICAgICJObyBzaWRlcyI6ICJJbmdlbiBzaWRlciIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUGFkZGluZyI6ICJNYXJnZW4iLAorICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiS2xpayBww6UgZW4gY2VsbGUiLAorICAgICJSb3cgUHJvcGVydGllcyI6ICJSw6Zra2UgZWdlbnNrYWJlciIsCisgICAgIlJvdyBwcm9wZXJ0aWVzIjogIlLDpmtrZSBlZ2Vuc2thYmVyIiwKKyAgICAiUm93cyI6ICJSw6Zra2VyOiIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAiUmFtbWVyIG1lbGxlbSByw6Zra2VyIG9nIGtvbG9ubmVyIiwKKyAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBjb2x1bW5zIG9ubHkiOiAiS3VuIHJhbW1lciBtZWxsZW0ga29sb25uZXIiLAorICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIHJvd3Mgb25seSI6ICJLdW4gcmFtbWVyIG1lbGxlbSByw6Zra2VyIiwKKyAgICAiU3BhY2luZyI6ICJBZnN0YW5kIiwKKyAgICAiU3BhY2luZyBhbmQgcGFkZGluZyI6ICJBZnN0YW5kIG9nIG1hcmdlbiIsCisgICAgIlNwbGl0IGNvbHVtbiI6ICJPcGRlbCBrb2xvbm5lIiwKKyAgICAiU3BsaXQgcm93IjogIk9wZGVsIHLDpmtrZSIsCisgICAgIlN1bW1hcnkiOiAiQmVza3JpdmVsc2UiLAorICAgICJUYWJsZSBQcm9wZXJ0aWVzIjogIlRhYmVsIGVnZW5za2FiZXIiLAorICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogIlRhYmVsIGVnZW5za2FiZXIiLAorICAgICJUaGUgYm90dG9tIHNpZGUgb25seSI6ICJLdW4gaSBidW5kZW4iLAorICAgICJUaGUgbGVmdC1oYW5kIHNpZGUgb25seSI6ICJLdW4gaSBow7hqcmUgc2lkZSIsCisgICAgIlRoZSByaWdodCBhbmQgbGVmdCBzaWRlcyBvbmx5IjogIkt1biBpIHNpZGVybmUiLAorICAgICJUaGUgcmlnaHQtaGFuZCBzaWRlIG9ubHkiOiAiS3VuIGkgdmVuc3RyZSBzaWRlIiwKKyAgICAiVGhlIHRvcCBhbmQgYm90dG9tIHNpZGVzIG9ubHkiOiAiS3VuIGkgdG9wIG9nIGJ1bmQiLAorICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICJLdW4gaSB0b3BwZW4iLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiRHUga2FuIGlra2Ugc2xldHRlIGRlbiBzaWRzdGUgY2VsbGUgaSBlbiByw6Zra2UuIiwKKyAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICJEdSBrYW4gaWtrZSBzbGV0dGUgZGVuIHNpZHN0ZSBrb2xvbm5lIGkgZW4gdGFiZWwuIiwKKyAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3Qgcm93IGluIHRhYmxlLiI6ICJEdSBrYW4gaWtrZSBzbGV0dGUgZGVuIHNpZHN0ZSByw6Zra2UgaSBlbiB0YWJlbC4iLAorICAgICJwaXhlbHMiOiAicGl4ZWwiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBbGlnbiI6ICJQbGFjZXIiLAorICAgICAgICAiQmFja2dyb3VuZCI6ICJCYWdncnVuZCIsCisgICAgICAgICJCYXNlbGluZSI6ICJCdW5kbGluaWUiLAorICAgICAgICAiQm9yZGVyIjogIkthbnQiLAorICAgICAgICAiQm90dG9tIjogIkJ1bmQiLAorICAgICAgICAiQ2VudGVyIjogIkNlbnRyZXIiLAorICAgICAgICAiQ2hhciI6ICJQbGFkcyIsCisgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICJTYW1tZW5zbWVsdCByYW1tZXIiLAorICAgICAgICAiQ29sb3IiOiAiRmFydmUiLAorICAgICAgICAiRkcgQ29sb3IiOiAiRm9udCBmYXJ2ZSIsCisgICAgICAgICJGbG9hdCI6ICJKdXN0ZXJpbmciLAorICAgICAgICAiSGVpZ2h0IjogIkjDuGpkZSIsCisgICAgICAgICJIb3cgbWFueSBjb2x1bW5zIHdvdWxkIHlvdSBsaWtlIHRvIG1lcmdlPyI6ICJIdm9yIG1hbmdlIGtvbGxvbm5lciB2aWwgZHUgc2FtbGU/IiwKKyAgICAgICAgIkhvdyBtYW55IHJvd3Mgd291bGQgeW91IGxpa2UgdG8gbWVyZ2U/IjogIkh2b3IgbWFuZ2UgcsOma2tlciB2aWwgZHUgc2FtbGU/IiwKKyAgICAgICAgIkltYWdlIFVSTCI6ICJCaWxsZWRlIFVSTCIsCisgICAgICAgICJKdXN0aWZ5IjogIkxpZ2UgbWFyZ2VuZXIiLAorICAgICAgICAiTGF5b3V0IjogIk9wc8OmdG5pbmciLAorICAgICAgICAiTGVmdCI6ICJWZW5zdHJlIiwKKyAgICAgICAgIk1hcmdpbiI6ICJNYXJnZW4iLAorICAgICAgICAiTWlkZGxlIjogIkNlbnRyZXIiLAorICAgICAgICAiTm9uZSI6ICJJbmdlbiIsCisgICAgICAgICJSaWdodCI6ICJIw7hqcmUiLAorICAgICAgICAiUnVsZXMiOiAiSW52ZW5kaWciLAorICAgICAgICAiU3BsaXQgY2VsbCI6ICJPcGRlbCBjZWxsZSIsCisgICAgICAgICJTdHlsZSBbQ1NTXSI6ICJTdGlsIFtDU1NdIiwKKyAgICAgICAgIlRleHQgYWxpZ24iOiAiVGVrc3QiLAorICAgICAgICAiVG9wIjogIlRvcCIsCisgICAgICAgICJVbnNldCBjb2xvciI6ICJGYXJ2ZSBpa2tlIHZhbGd0IiwKKyAgICAgICAgIlZlcnRpY2FsIGFsaWduIjogIlZlcnRpa2FsIHBsYWNlcmluZyIsCisgICAgICAgICJXaWR0aCI6ICJCcmVkZGUiLAorICAgICAgICAicGVyY2VudCI6ICJwcm9jZW50IgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFhZjk5OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvZGUuanMKQEAgLTAsMCArMSw5MSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGwgZm91ciBzaWRlcyI6ICJBbGxlIDQgU2VpdGVuIiwKKyAgICAiQm9yZGVycyI6ICJSYWhtZW4iLAorICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAiQ2FwdGlvbiI6ICLDnGJlcnNjaHJpZnQiLAorICAgICJDZWxsIFByb3BlcnRpZXMiOiAiWmVsbGVub3B0aW9uZW4iLAorICAgICJDZWxsIHByb3BlcnRpZXMiOiAiWmVsbGVub3B0aW9uZW4iLAorICAgICJEZWxldGUgY2VsbCI6ICJaZWxsZSBsw7ZzY2hlbiIsCisgICAgIkRlbGV0ZSBjb2x1bW4iOiAiU3BhbHRlIGzDtnNjaGVuIiwKKyAgICAiRGVsZXRlIHJvdyI6ICJSZWloZSBsb2VzY2hlbiIsCisgICAgIkRlc2NyaXB0aW9uIjogIkJlc2NocmVpYnVuZyIsCisgICAgIkZyYW1lcyI6ICJSYWhtZW4iLAorICAgICJJbnNlcnQgY2VsbCBhZnRlciI6ICJaZWxsZSBlaW5mw7xnZW4gbmFjaCIsCisgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICJaZWxsZSBlaW5mw7xnZW4gdm9yIiwKKyAgICAiSW5zZXJ0IGNvbHVtbiBhZnRlciI6ICJTcGFsdGUgZWluZsO8Z2VuIG5hY2giLAorICAgICJJbnNlcnQgY29sdW1uIGJlZm9yZSI6ICJTcGFsdGUgZWluZsO8Z2VuIHZvciIsCisgICAgIkluc2VydCByb3cgYWZ0ZXIiOiAiUmVpaGUgZWluZsO8Z2VuIG5hY2giLAorICAgICJJbnNlcnQgcm93IGJlZm9yZSI6ICJSZWloZSBlaW5mw7xnZW4gdm9yIiwKKyAgICAiTWVyZ2UgY2VsbHMiOiAiWmVsbGVuIHp1c2FtbWVuZsO8Z2VuIiwKKyAgICAiTm8gcnVsZXMiOiAiS2VpbmUgR2l0dGVybGluaWVuIiwKKyAgICAiTm8gc2lkZXMiOiAiS2VpbmUgUsOkbmRlciIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUGFkZGluZyI6ICJJbm5lbmFic3RhbmQiLAorICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiQml0dGUgZWluZSBaZWxsZSBhdXN3w6RobGVuIiwKKyAgICAiUm93IFByb3BlcnRpZXMiOiAiWmVpbGVub3B0aW9uZW4iLAorICAgICJSb3cgcHJvcGVydGllcyI6ICJSZWloZW5laW5zdGVsbHVuZ2VuIiwKKyAgICAiUm93cyI6ICJaZWlsZW46IiwKKyAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICJMaW5pZW4gendpc2NoZW4gWmVpbGVuIHVuZCBTcGFsdGVuIiwKKyAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBjb2x1bW5zIG9ubHkiOiAiTGluaWVuIHp3aXNjaGVuIFNwYWx0ZW4iLAorICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIHJvd3Mgb25seSI6ICJMaW5pZW4gendpc2NoZW4gIFplaWxlbiIsCisgICAgIlNwYWNpbmciOiAiQWJzdGFuZCIsCisgICAgIlNwYWNpbmcgYW5kIHBhZGRpbmciOiAiQWJzdMOkbmRlIiwKKyAgICAiU3BsaXQgY29sdW1uIjogIlNwYWx0ZSB0ZWlsZW4iLAorICAgICJTcGxpdCByb3ciOiAiUmVpaGVuIGF1ZnRlaWxlbiIsCisgICAgIlN1bW1hcnkiOiAiWnVzYW1tZW5mYXNzdW5nIiwKKyAgICAiVGFibGUgUHJvcGVydGllcyI6ICJUYWJlbGxlbm9wdGlvbmVuIiwKKyAgICAiVGFibGUgcHJvcGVydGllcyI6ICJUYWJlbGxlbm9wdGlvbmVuIiwKKyAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAiTnVyIHVudGVyZSBTZWl0ZSIsCisgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIk51ciBsaW5rZSBTZWl0ZSIsCisgICAgIlRoZSByaWdodCBhbmQgbGVmdCBzaWRlcyBvbmx5IjogIk51ciBsaW5rZSB1bmQgcmVjaHRlIFNlaXRlIiwKKyAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIk51ciByZWNodGUgU2VpdGUiLAorICAgICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSI6ICJOdXIgb2JlcmUgdW5kIHVudGVyZSBTZWl0ZSIsCisgICAgIlRoZSB0b3Agc2lkZSBvbmx5IjogIk51ciBvYmVyZSBTZWl0ZSIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiI6ICJMZXR6dGUgWmVsbGUgaW4gZGllc2VyIFplaWxlIGthbm4gbmljaHQgZ2Vsw7ZzY2h0IHdlcmRlbiIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iOiAiTGV0enRlIFNwYWx0ZSBpbiBkaWVzZXIgVGFiZWxsZSBrYW5uIG5pY2h0IGdlbMO2c2NodCB3ZXJkZW4iLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIkxldHp0ZSBSZWloZSBpbiBkaWVzZXIgVGFiZWxsZSBrYW5uIG5pY2h0IGdlbMO2c2NodCB3ZXJkZW4iLAorICAgICJwaXhlbHMiOiAiUGl4ZWwiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBbGlnbiI6ICJBdXNyaWNodHVuZyIsCisgICAgICAgICJCYWNrZ3JvdW5kIjogIkhpbnRlcmdydW5kIiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkdydW5kbGluaWUiLAorICAgICAgICAiQm9yZGVyIjogIlJhaG1lbiIsCisgICAgICAgICJCb3R0b20iOiAiVW50ZW4iLAorICAgICAgICAiQ2VudGVyIjogIlplbnRyaWVydCIsCisgICAgICAgICJDaGFyIjogIlplaWNoZW4iLAorICAgICAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAiUmFobWVuIGZhbGxlbiB6dXNhbW1lbiIsCisgICAgICAgICJDb2xvciI6ICJGYXJiZSIsCisgICAgICAgICJGRyBDb2xvciI6ICJWb3JkZXJncnVuZGZhcmJlIiwKKyAgICAgICAgIkZsb2F0IjogIkZsb2F0IiwKKyAgICAgICAgIkhlaWdodCI6ICJIw7ZoZSIsCisgICAgICAgICJIb3cgbWFueSBjb2x1bW5zIHdvdWxkIHlvdSBsaWtlIHRvIG1lcmdlPyI6ICJXaWV2aWVsZSBTcGFsdGVuIHdvbGxlbiBTaWUgdmVyYmluZGVuPyIsCisgICAgICAgICJIb3cgbWFueSByb3dzIHdvdWxkIHlvdSBsaWtlIHRvIG1lcmdlPyI6ICJXaWV2aWVsZSBaZWlsZW4gd29sbGVuIFNpZSB2ZXJiaW5kZW4/IiwKKyAgICAgICAgIkltYWdlIFVSTCI6ICJCaWxkLVVSTCIsCisgICAgICAgICJKdXN0aWZ5IjogIkJsb2Nrc2F0eiIsCisgICAgICAgICJMYXlvdXQiOiAiTGF5b3V0IiwKKyAgICAgICAgIkxlZnQiOiAiTGlua3MiLAorICAgICAgICAiTWFyZ2luIjogIlJhbmQiLAorICAgICAgICAiTWlkZGxlIjogIk1pdHRlIiwKKyAgICAgICAgIk5vbmUiOiAiS2VpbmUiLAorICAgICAgICAiUmlnaHQiOiAiUmVjaHRzIiwKKyAgICAgICAgIlJ1bGVzIjogIkxpbmllbiIsCisgICAgICAgICJTcGxpdCBjZWxsIjogIlplbGxlbiB0ZWlsZW4iLAorICAgICAgICAiU3R5bGUgW0NTU10iOiAiU3R5bGUgW0NTU10iLAorICAgICAgICAiVGV4dCBhbGlnbiI6ICJUZXh0YXVzcmljaHR1bmciLAorICAgICAgICAiVG9wIjogIk9iZW4iLAorICAgICAgICAiVW5zZXQgY29sb3IiOiAiRmFyYmUgZW50ZmVybmVuIiwKKyAgICAgICAgIlZlcnRpY2FsIGFsaWduIjogIlZlcnRpa2FsZSBBdXNyaWNodHVuZyIsCisgICAgICAgICJXaWR0aCI6ICJCcmVpdGUiLAorICAgICAgICAicGVyY2VudCI6ICIlIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9lZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvZWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE5MTZlOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvZWUuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTG9vYnUiLAorICAgICJPSyI6ICJPSyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9lbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUyZGVmZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvZWwuanMKQEAgLTAsMCArMSw5MCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGwgZm91ciBzaWRlcyI6ICLOms6xzrkgzr/OuSA0IM+AzrvOtc+Fz4HOrc+CIiwKKyAgICAiQm9yZGVycyI6ICLOoM61z4HOuc6zz4HOrM68zrzOsc+EzrEiLAorICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciLAorICAgICJDYXB0aW9uIjogIs6bzrXOts6szr3PhM6xIiwKKyAgICAiQ2VsbCBQcm9wZXJ0aWVzIjogIs6ZzrTOuc+Mz4TOt8+EzrXPgiDOms61zrvOuc6/z40iLAorICAgICJDZWxsIHByb3BlcnRpZXMiOiAizpnOtM65z4zPhM63z4TOtc+CIM66zrXOu865zr/PjSIsCisgICAgIkRlbGV0ZSBjZWxsIjogIs6UzrnOsc6zz4HOsc+Gzq4gzrrOtc67zrnOv8+NIiwKKyAgICAiRGVsZXRlIGNvbHVtbiI6ICLOlM65zrHOs8+BzrHPhs6uIM+Dz4TOrs67zrfPgiIsCisgICAgIkRlbGV0ZSByb3ciOiAizpTOuc6xzrPPgc6xz4bOriDOs8+BzrHOvM68zq7PgiIsCisgICAgIkRlc2NyaXB0aW9uIjogIs6gzrXPgc65zrPPgc6xz4bOriIsCisgICAgIkZyYW1lcyI6ICJGcmFtZXMiLAorICAgICJJbnNlcnQgY2VsbCBhZnRlciI6ICLOlc65z4POsc6zz4nOs86uIM66zrXOu865zr/PjSDOvM61z4TOrCIsCisgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICLOlc65z4POsc6zz4nOs86uIM66zrXOu865zr/PjSDPgM+BzrnOvSIsCisgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAizpXOuc+DzrHOs8+JzrPOriDPg8+Ezq7Ou863z4IgzrzOtc+EzqwiLAorICAgICJJbnNlcnQgY29sdW1uIGJlZm9yZSI6ICLOlc65z4POsc6zz4nOs86uIM+Dz4TOrs67zrfPgiDPgM+BzrnOvSIsCisgICAgIkluc2VydCByb3cgYWZ0ZXIiOiAizpXOuc+DzrHOs8+JzrPOriDOs8+BzrHOvM68zq7PgiDPgM+BzrnOvSIsCisgICAgIkluc2VydCByb3cgYmVmb3JlIjogIs6VzrnPg86xzrPPic6zzq4gzrPPgc6xzrzOvM6uz4IgzrzOtc+EzqwiLAorICAgICJNZXJnZSBjZWxscyI6ICLOo8+FzrPPh8+Ozr3Otc+Fz4POtyDOus61zrvOuc+Ozr0iLAorICAgICJObyBydWxlcyI6ICLOp8+Jz4HOr8+CIM6Tz4HOsc68zrzOrc+CIiwKKyAgICAiTm8gc2lkZXMiOiAiTm8gc2lkZXMiLAorICAgICJPSyI6ICLOlc69z4TOrM6+zrXOuSIsCisgICAgIlBhZGRpbmciOiAizpXPg86/z4fOriIsCisgICAgIlBsZWFzZSBjbGljayBpbnRvIHNvbWUgY2VsbCI6ICLOms6szr3PhM61IM66zrvOuc66IM68zq3Pg86xIM+DzrUgzrrOrM+Azr/Ouc6/IM66zrXOu86vIiwKKyAgICAiUm93IFByb3BlcnRpZXMiOiAizpnOtM65z4zPhM63z4TOtc+CIM6Tz4HOsc68zrzOrs+CIiwKKyAgICAiUm93IHByb3BlcnRpZXMiOiAizpnOtM65z4zPhM63z4TOtc+CIM6zz4HOsc68zrzOrs+CIiwKKyAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICLOk8+BzrHOvM68zq3PgiDOuM6xIM61zrzPhs6xzr3Or862zr/Ovc+EzrHOuSDOvM61z4TOsc6+z40gz4zOu8+Jzr0gz4TPic69IM6zz4HOsc68zrzPjs69IM66zrHOuSDPg8+EzrfOu8+Ozr0iLAorICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGNvbHVtbnMgb25seSI6ICLOk8+BzrHOvM68zq3PgiDOuM6xIM61zrzPhs6xzr3Or862zr/Ovc+EzrHOuSDOvM+Mzr3OvyDOvM61z4TOsc6+z40gz4PPhM63zrvPjs69IiwKKyAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiByb3dzIG9ubHkiOiAizpPPgc6xzrzOvM6tz4IgzrjOsSDOtc68z4bOsc69zq/Ots6/zr3PhM6xzrkgzrzPjM69zr8gzrzOtc+EzrHOvs+NIM6zz4HOsc68zrzPjs69IiwKKyAgICAiU3BhY2luZyI6ICLOkc+Azr/Pg8+EzqzPg861zrnPgiIsCisgICAgIlNwYWNpbmcgYW5kIHBhZGRpbmciOiAizpHPgM6/z4PPhM6sz4POtc65z4IgzrrOsc65IM61z4POv8+Hzq3PgiIsCisgICAgIlNwbGl0IGNvbHVtbiI6ICLOlM65zrHOr8+BzrXPg863IM+Dz4TOrs67zrfPgiIsCisgICAgIlNwbGl0IHJvdyI6ICLOlM65zrHOr8+BzrXPg863IM6zz4HOsc68zrzOrs+CIiwKKyAgICAiU3VtbWFyeSI6ICLOo8+Nzr3Ov8+IzrciLAorICAgICJUYWJsZSBQcm9wZXJ0aWVzIjogIs6ZzrTOuc+Mz4TOt8+EzrXPgiDPgM6vzr3Osc66zrEiLAorICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogIs6ZzrTOuc+Mz4TOt8+EzrXPgiDPgM6vzr3Osc66zrEiLAorICAgICJUaGUgYm90dG9tIHNpZGUgb25seSI6ICLOlyDOus6sz4TPiSDPgM67zrXPhc+BzqwgzrzPjM69zr8iLAorICAgICJUaGUgbGVmdC1oYW5kIHNpZGUgb25seSI6ICLOlyDOsc+BzrnPg8+EzrXPgc6uIM+AzrvOtc+Fz4HOrCDOvM+Mzr3OvyIsCisgICAgIlRoZSByaWdodCBhbmQgbGVmdCBzaWRlcyBvbmx5IjogIs6fzrkgzrTOtc6+zrnOrc+CIM66zrHOuSDOsc+BzrnPg8+EzrXPgc6tz4Igz4DOu861z4XPgc6tz4IgzrzPjM69zr8iLAorICAgICJUaGUgcmlnaHQtaGFuZCBzaWRlIG9ubHkiOiAizpcgzrTOtc6+zrnOrCDPgM67zrXPhc+BzqwgzrzPjM69zr8iLAorICAgICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSI6ICLOn865IM+AzqzOvc+JIM66zrHOuSDOus6sz4TPiSDPgM67zrXPhc+Bzq3PgiDOvM+Mzr3OvyIsCisgICAgIlRoZSB0b3Agc2lkZSBvbmx5IjogIs6XIM+AzqzOvc+JIM+AzrvOtc+Fz4HOrCDOvM+Mzr3OvyIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiI6ICLOlM61zr0gzrzPgM6/z4HOtc6vIM69zrEgzrTOuc6xzrPPgc6xz4bOtc6vIM+Ezr8gz4TOtc67zrXPhc+EzrHOr86/IM66zrXOu86vIM+DzrUgzrzOuc6xIM6zz4HOsc68zrzOri4iLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjb2x1bW4gaW4gdGFibGUuIjogIs6UzrXOvSDOvM+Azr/Pgc61zq8gzr3OsSDOtM65zrHOs8+BzrHPhs61zq8gzrcgz4TOtc67zrXPhc+EzrHOr86xIM+Dz4TOrs67zrcgz4POtSDOrc69zrEgz4DOr869zrHOus6xLiIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iOiAizpTOtc69IM68z4DOv8+BzrXOryDOvc6xIM60zrnOsc6zz4HOsc+GzrXOryDOtyDPhM61zrvOtc+Fz4TOsc6vzrEgzrPPgc6xzrzOvM6uIM+DzrUgzq3Ovc6xIM+Azq/Ovc6xzrrOsS4iLAorICAgICJwaXhlbHMiOiAicGl4ZWxzIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQWxpZ24iOiAizqPPhM6/zq/Ph863z4POtyIsCisgICAgICAgICJCYWNrZ3JvdW5kIjogIs6mz4zOvc+Ezr8iLAorICAgICAgICAiQmFzZWxpbmUiOiAiQmFzZWxpbmUiLAorICAgICAgICAiQm9yZGVyIjogIs6gzrXPgc6vzrPPgc6xzrzOvM6xIiwKKyAgICAgICAgIkJvdHRvbSI6ICLOms6sz4TPiSDOvM6tz4HOv8+CIiwKKyAgICAgICAgIkNlbnRlciI6ICLOms6tzr3PhM+Bzr8iLAorICAgICAgICAiQ2hhciI6ICLOp86xz4HOsc66z4TOrs+BzrHPgiIsCisgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICLOo8+FzrzPgM+Ez4XOs868zq3Ovc6xIM+AzrXPgc65zrPPgc6szrzOvM6xz4TOsSIsCisgICAgICAgICJDb2xvciI6ICLOp8+Bz47OvM6xIiwKKyAgICAgICAgIkZHIENvbG9yIjogIs6nz4HPjs68zrEgzrHOvc+EzrnOus61zrnOvM6tzr3Pic69IiwKKyAgICAgICAgIkZsb2F0IjogIkZsb2F0IiwKKyAgICAgICAgIkhlaWdodCI6ICLOjs+Izr/PgiIsCisgICAgICAgICJIb3cgbWFueSBjb2x1bW5zIHdvdWxkIHlvdSBsaWtlIHRvIG1lcmdlPyI6ICLOoM+Mz4POtc+CIM+Dz4TOrs67zrXPgiDOuM6tzrvOtc+EzrUgzr3OsSDOtc69z47Pg861z4TOtTsiLAorICAgICAgICAiSG93IG1hbnkgcm93cyB3b3VsZCB5b3UgbGlrZSB0byBtZXJnZT8iOiAizqDPjM+DzrXPgiDOs8+BzrHOvM68zq3PgiDOuM6tzrvOtc+EzrUgzr3OsSDOtc69z47Pg861z4TOtTsiLAorICAgICAgICAiSW1hZ2UgVVJMIjogIlVSTCDOtc65zrrPjM69zrHPgiIsCisgICAgICAgICJKdXN0aWZ5IjogIs6gzrvOrs+BzrfPgiDPg8+Ezr/Or8+HzrfPg863IiwKKyAgICAgICAgIkxheW91dCI6ICLOlM65zqzPhM6xzr7OtyIsCisgICAgICAgICJMZWZ0IjogIs6Rz4HOuc+Dz4TOtc+BzqwiLAorICAgICAgICAiTWFyZ2luIjogIs6gzrXPgc65zrjPjs+BzrnOvyIsCisgICAgICAgICJNaWRkbGUiOiAizprOrc69z4TPgc6/IiwKKyAgICAgICAgIk5vbmUiOiAizqTOr8+Azr/PhM6xIiwKKyAgICAgICAgIlJpZ2h0IjogIs6UzrXOvs65zqwiLAorICAgICAgICAiUnVsZXMiOiAizpPPgc6xzrzOvM6tz4IiLAorICAgICAgICAiU3BsaXQgY2VsbCI6ICLOlM65zrHOr8+BzrXPg863IM66zrXOu865zr/PjSIsCisgICAgICAgICJTdHlsZSBbQ1NTXSI6ICLOo8+Ez4XOuyBbQ1NTXSIsCisgICAgICAgICJUZXh0IGFsaWduIjogIs6jz4TOv86vz4fOt8+DzrcgzrrOtc65zrzOrc69zr/PhSIsCisgICAgICAgICJUb3AiOiAizqDOrM69z4kiLAorICAgICAgICAiVW5zZXQgY29sb3IiOiAizpHOvc6xzq/Pgc61z4POtyDPh8+Bz47OvM6xz4TOv8+CIiwKKyAgICAgICAgIlZlcnRpY2FsIGFsaWduIjogIs6azrHPhM6xzrrPjM+Bz4XPhs63IM+Dz4TOv86vz4fOt8+DzrciLAorICAgICAgICAiV2lkdGgiOiAizqDOu86sz4TOv8+CIiwKKyAgICAgICAgInBlcmNlbnQiOiAiz4TOv865z4IgzrXOus6xz4TPjM69IgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVhNzZlOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvZXMuanMKQEAgLTAsMCArMSw5MSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlcyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGwgZm91ciBzaWRlcyI6ICJUb2RvcyBsb3MgY3VhdHJvIGxhZG9zIiwKKyAgICAiQm9yZGVycyI6ICJCb3JkZXMiLAorICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICJDYXB0aW9uIjogIlTDrXR1bG8iLAorICAgICJDZWxsIFByb3BlcnRpZXMiOiAiUHJvcGllZGFkZXMgZGUgbGEgQ2VsZGEiLAorICAgICJDZWxsIHByb3BlcnRpZXMiOiAiUHJvcGllZGFkZXMgZGUgbGEgY2VsZGEiLAorICAgICJEZWxldGUgY2VsbCI6ICJTdXByaW1pciBjZWxkYSIsCisgICAgIkRlbGV0ZSBjb2x1bW4iOiAiU3VwcmltaXIgY29sdW1uYSIsCisgICAgIkRlbGV0ZSByb3ciOiAiU3VwcmltaXIgZmlsYSIsCisgICAgIkRlc2NyaXB0aW9uIjogIkRlc2NyaXBjacOzbiIsCisgICAgIkZyYW1lcyI6ICJNYXJjb3MiLAorICAgICJJbnNlcnQgY2VsbCBhZnRlciI6ICJJbnNlcnRhciBjZWxkYSBkZXRyw6FzIiwKKyAgICAiSW5zZXJ0IGNlbGwgYmVmb3JlIjogIkluc2VydGFyIGNlbGRhIGRlbGFudGUiLAorICAgICJJbnNlcnQgY29sdW1uIGFmdGVyIjogIkluc2VydGFyIGNvbHVtbmEgZGV0csOhcyIsCisgICAgIkluc2VydCBjb2x1bW4gYmVmb3JlIjogIkluc2VydGFyIGNvbHVtbmEgZGVsYW50ZSIsCisgICAgIkluc2VydCByb3cgYWZ0ZXIiOiAiSW5zZXJ0YXIgZmlsYSBkZXRyw6FzIiwKKyAgICAiSW5zZXJ0IHJvdyBiZWZvcmUiOiAiSW5zZXJ0YXIgZmlsYSBkZWxhbnRlIiwKKyAgICAiTWVyZ2UgY2VsbHMiOiAiVW5pciBjZWxkYXMiLAorICAgICJObyBydWxlcyI6ICJOaW5ndW5hIHJlZ2xhIiwKKyAgICAiTm8gc2lkZXMiOiAiTmluZ8O6biBsYWRvIiwKKyAgICAiT0siOiAiQWNlcHRhciIsCisgICAgIlBhZGRpbmciOiAiUmVsbGVubyAoUGFkZGluZykiLAorICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiUG9yIGZhdm9yLCBoYXogY2xpYyBlbiBhbGd1bmEgY2VsZGEiLAorICAgICJSb3cgUHJvcGVydGllcyI6ICJQcm9waWVkYWRlcyBkZSBsYSBGaWxhIiwKKyAgICAiUm93IHByb3BlcnRpZXMiOiAiUHJvcGllZGFkZXMgZGUgbGEgZmlsYSIsCisgICAgIlJvd3MiOiAiRmlsYXM6IiwKKyAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICJMYXMgbMOtbmVhcyBhcGFyZWNlcsOhbiBlbnRyZSB0b2RhcyBsYXMgZmlsYXMgeSBjb2x1bW5hcyIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gY29sdW1ucyBvbmx5IjogIkxhcyBsw61uZWFzIGFwYXJlY2Vyw6FuIHNvbG8gZW50cmUgbGFzIGNvbHVtbmFzIiwKKyAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiByb3dzIG9ubHkiOiAiTGFzIGzDrW5lYXMgYXBhcmVjZXLDoW4gc29sbyBlbnRyZSBsYXMgZmlsYXMiLAorICAgICJTcGFjaW5nIjogIkVzcGFjaWFkbyIsCisgICAgIlNwYWNpbmcgYW5kIHBhZGRpbmciOiAiRXNwYWNpYWRvIHkgUmVsbGVubyIsCisgICAgIlNwbGl0IGNvbHVtbiI6ICJEaXZpZGlyIGNvbHVtbmEiLAorICAgICJTcGxpdCByb3ciOiAiRGl2aWRpciBmaWxhIiwKKyAgICAiU3VtbWFyeSI6ICJSZXN1bWVuIiwKKyAgICAiVGFibGUgUHJvcGVydGllcyI6ICJQcm9waWVkYWRlcyBkZSBsYSBUYWJsYSIsCisgICAgIlRhYmxlIHByb3BlcnRpZXMiOiAiUHJvcGllZGFkZXMgZGUgbGEgdGFibGEiLAorICAgICJUaGUgYm90dG9tIHNpZGUgb25seSI6ICJTb2xvIGVsIGxhZG8gaW5mZXJpb3IiLAorICAgICJUaGUgbGVmdC1oYW5kIHNpZGUgb25seSI6ICJTb2xvIGVsIGxhZG8gaXpxdWllcmRvIiwKKyAgICAiVGhlIHJpZ2h0IGFuZCBsZWZ0IHNpZGVzIG9ubHkiOiAiU29sbyBsb3MgbGFkb3MgZGVyZWNobyBlIGl6cXVpZXJkbyIsCisgICAgIlRoZSByaWdodC1oYW5kIHNpZGUgb25seSI6ICJTb2xvIGVsIGxhZG8gZGVyZWNobyIsCisgICAgIlRoZSB0b3AgYW5kIGJvdHRvbSBzaWRlcyBvbmx5IjogIlNvbG8gbG9zIGxhZG9zIHN1cGVyaW9yIGUgaW5mZXJpb3IiLAorICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICJTb2xvIGVsIGxhZG8gc3VwZXJpb3IiLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiWGluaGEgc2UgcmV1c2EgY29iYXJkZW1lbnRlIGEgZWxpbWluYXIgbGEgw7psdGltYSBjZWxkYSBlbiBsYSBmaWxhLiIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iOiAiWGluaGEgc2UgcmV1c2EgY29iYXJkZW1lbnRlIGEgZWxpbWluYXIgbGEgw7psdGltYSBjb2x1bW5hIGVuIGxhIHRhYmxhLiIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iOiAiWGluaGEgc2UgcmV1c2EgY29iYXJkZW1lbnRlIGEgZWxpbWluYXIgbGEgw7psdGltYSBmaWxhIGVuIGxhIHRhYmxhLiIsCisgICAgInBpeGVscyI6ICJww614ZWxlcyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFsaWduIjogIkFsaW5lYXIiLAorICAgICAgICAiQmFja2dyb3VuZCI6ICJGb25kbyIsCisgICAgICAgICJCYXNlbGluZSI6ICJMw61uZWEgYmFzZSIsCisgICAgICAgICJCb3JkZXIiOiAiQm9yZGUiLAorICAgICAgICAiQm90dG9tIjogIkFiYWpvIiwKKyAgICAgICAgIkNlbnRlciI6ICJDZW50cmFyIiwKKyAgICAgICAgIkNoYXIiOiAiQ2Fyw6FjdGVyIiwKKyAgICAgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIkJvcmRlcyBjb2xhcHNhZG9zIiwKKyAgICAgICAgIkNvbG9yIjogIkNvbG9yIiwKKyAgICAgICAgIkZHIENvbG9yIjogIkNvbG9yIFByaW5jaXBhbCIsCisgICAgICAgICJGbG9hdCI6ICJGbG90YW50ZSIsCisgICAgICAgICJIZWlnaHQiOiAiQWx0dXJhIiwKKyAgICAgICAgIkhvdyBtYW55IGNvbHVtbnMgd291bGQgeW91IGxpa2UgdG8gbWVyZ2U/IjogIsK/Q3XDoW50YXMgY29sdW1uYXMgZGVzZWEgdW5pcj8iLAorICAgICAgICAiSG93IG1hbnkgcm93cyB3b3VsZCB5b3UgbGlrZSB0byBtZXJnZT8iOiAiwr9DdcOhbnRhcyBmaWxhcyBkZXNlYSB1bmlyPyIsCisgICAgICAgICJJbWFnZSBVUkwiOiAiVVJMIGRlIGxhIGltw6FnZW4iLAorICAgICAgICAiSnVzdGlmeSI6ICJKdXN0aWZpY2FyIiwKKyAgICAgICAgIkxheW91dCI6ICJEaXNlw7FvIiwKKyAgICAgICAgIkxlZnQiOiAiSXpxdWllcmRhIiwKKyAgICAgICAgIk1hcmdpbiI6ICJNYXJnZW4iLAorICAgICAgICAiTWlkZGxlIjogIk1lZGlvIiwKKyAgICAgICAgIk5vbmUiOiAiTmluZ3VubyIsCisgICAgICAgICJSaWdodCI6ICJEZXJlY2hhIiwKKyAgICAgICAgIlJ1bGVzIjogIkzDrW5lYXMiLAorICAgICAgICAiU3BsaXQgY2VsbCI6ICJEaXZpZGlyIGNlbGRhIiwKKyAgICAgICAgIlN0eWxlIFtDU1NdIjogIkVzdGlsbyBbQ1NTXSIsCisgICAgICAgICJUZXh0IGFsaWduIjogIkFsaW5lYWNpw7NuIGRlbCB0ZXh0byIsCisgICAgICAgICJUb3AiOiAiQWx0byIsCisgICAgICAgICJVbnNldCBjb2xvciI6ICJSZW1vdmVyIGNvbG9yIiwKKyAgICAgICAgIlZlcnRpY2FsIGFsaWduIjogIkFsaW5lYWNpw7NuIHZlcnRpY2FsIiwKKyAgICAgICAgIldpZHRoIjogIkFuY2hvIiwKKyAgICAgICAgInBlcmNlbnQiOiAicG9yIGNpZW50byIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvZXUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL2V1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MzU4ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL2V1LmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlV0emkiLAorICAgICJPSyI6ICJBZG9zIiwKKyAgICAiUm93cyI6ICJMZXJyb2FrOiIsCisgICAgIlNwYWNpbmciOiAiVGFydGVhIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9mYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmMxN2MyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9mYS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiLAorICAgICJPSyI6ICLYqNmE2YciLAorICAgICJSb3dzIjogItix2K/bjNmBINmH2KciLAorICAgICJTcGFjaW5nIjogItmB2KfYtdmE2Ycg2q/YsNin2LHbjCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9maS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvZmkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I0NmE3ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvZmkuanMKQEAgLTAsMCArMSw4MCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGwgZm91ciBzaWRlcyI6ICJLYWlra2kgbmVsasOkIHNpdnVhIiwKKyAgICAiQm9yZGVycyI6ICJSZXVuYXQiLAorICAgICJDYW5jZWwiOiAiUGVydXV0YSIsCisgICAgIkNhcHRpb24iOiAiT3RzaWtrbyIsCisgICAgIkNlbGwgUHJvcGVydGllcyI6ICJTb2x1biBhc2V0dWtzZXQiLAorICAgICJDZWxsIHByb3BlcnRpZXMiOiAiU29sdW4gYXNldHVrc2V0IiwKKyAgICAiRGVsZXRlIGNlbGwiOiAiUG9pc3RhIHNvbHUiLAorICAgICJEZWxldGUgY29sdW1uIjogIlBvaXN0YSBzYXJha2UiLAorICAgICJEZWxldGUgcm93IjogIlBvaXN0YSByaXZpIiwKKyAgICAiRGVzY3JpcHRpb24iOiAiS3V2YXVzIiwKKyAgICAiRnJhbWVzIjogIktlaHlrc2V0IiwKKyAgICAiSW5zZXJ0IGNlbGwgYWZ0ZXIiOiAiTGlzw6TDpCBzb2x1IHBlcsOkw6RuIiwKKyAgICAiSW5zZXJ0IGNlbGwgYmVmb3JlIjogIkxpc8Okw6Qgc29sdSBlbm5lbiIsCisgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAiTGlzw6TDpCBzYXJha2UgcGVyw6TDpG4iLAorICAgICJJbnNlcnQgY29sdW1uIGJlZm9yZSI6ICJMaXPDpMOkIHNhcmFrZSBlbm5lbiIsCisgICAgIkluc2VydCByb3cgYWZ0ZXIiOiAiTGlzw6TDpCByaXZpIGFsYXB1b2xlbGxlIiwKKyAgICAiSW5zZXJ0IHJvdyBiZWZvcmUiOiAiTGlzw6TDpCByaXZpIHlsw6RwdW9sZWxsZSIsCisgICAgIk1lcmdlIGNlbGxzIjogIlloZGlzdMOkIHNvbHV0IiwKKyAgICAiTm8gcnVsZXMiOiAiRWkgdmlpdm9qYSIsCisgICAgIk5vIHNpZGVzIjogIkVpIHNpdnVqYSIsCisgICAgIk9LIjogIkh5dsOka3N5IiwKKyAgICAiUGFkZGluZyI6ICJQYWxzdGFudMOkeXRlIiwKKyAgICAiUm93IFByb3BlcnRpZXMiOiAiUml2aW4gYXNldHVrc2V0IiwKKyAgICAiUm93IHByb3BlcnRpZXMiOiAiUml2aW4gYXNldHVrc2V0IiwKKyAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICJWaWl2YXQgam9rYWlzZW4gcml2aW4gamEgc2FyYWtrZWVuIHbDpGxpbGzDpCIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gY29sdW1ucyBvbmx5IjogIlZpaXZhdCBhaW5vYXN0YWFuIHNhcmFra2VpZGVuIHbDpGxpbGzDpCIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogIlZpaXZhdCBhaW5vYXN0YWFuIHJpdmllbiB2w6RsaWxsw6QiLAorICAgICJTcGFjaW5nIjogIlBhbHN0YXRpbGEiLAorICAgICJTcGxpdCBjb2x1bW4iOiAiSmFhIHNhcmFrZSIsCisgICAgIlNwbGl0IHJvdyI6ICJKYWEgcml2aSIsCisgICAgIlN1bW1hcnkiOiAiWWh0ZWVudmV0byIsCisgICAgIlRhYmxlIFByb3BlcnRpZXMiOiAiVGF1bHVrb24gYXNldHVrc2V0IiwKKyAgICAiVGFibGUgcHJvcGVydGllcyI6ICJUYXVsdWtvbiBhc2V0dWtzZXQiLAorICAgICJUaGUgYm90dG9tIHNpZGUgb25seSI6ICJBaW5vYXN0YWFuIGFsYXB1b2xlbGxlIiwKKyAgICAiVGhlIGxlZnQtaGFuZCBzaWRlIG9ubHkiOiAiQWlub2FzdGFhbiB2YXNlbnJldW5hIiwKKyAgICAiVGhlIHJpZ2h0IGFuZCBsZWZ0IHNpZGVzIG9ubHkiOiAiT2lrZWEtIGphIHZhc2VucmV1bmEiLAorICAgICJUaGUgcmlnaHQtaGFuZCBzaWRlIG9ubHkiOiAiQWlub2FzdGFhbiBvaWtlYXJldW5hIiwKKyAgICAiVGhlIHRvcCBhbmQgYm90dG9tIHNpZGVzIG9ubHkiOiAiWWzDpC0gamEgYWxhcHVvbGkuIiwKKyAgICAiVGhlIHRvcCBzaWRlIG9ubHkiOiAiQWlub2FzdGFhbiB5bMOkcHVvbGkiLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiRWkgdm9pZGEgcG9pc3RhYSB2aWltZWlzdMOkIHNvbHVhIHJpdmlzdMOkLiIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iOiAiRWkgdm9pZGEgcG9pc3RhYSB2aWltZWlzdMOkIHNhcmFrZXR0YSB0YXVsdXN0YS4iLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIkVpIHZvaWRhIHBvaXN0YWEgdmlpbWVpc3TDpCByaXZpw6QgdGF1bHVzdGEuIiwKKyAgICAicGl4ZWxzIjogInBpa3NlbGnDpCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFsaWduIjogIktvaGRpc3R1cyIsCisgICAgICAgICJCYWNrZ3JvdW5kIjogIlRhdXN0YSIsCisgICAgICAgICJCYXNlbGluZSI6ICJUYWthcmFqYSIsCisgICAgICAgICJCb3JkZXIiOiAiUmV1bmEiLAorICAgICAgICAiQm90dG9tIjogIkFsbGUiLAorICAgICAgICAiQ2VudGVyIjogIktlc2tlbGxlIiwKKyAgICAgICAgIkNoYXIiOiAiTWVya2tpIiwKKyAgICAgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIkx1aGlzdGV0dXQgcmV1bmF0IiwKKyAgICAgICAgIkNvbG9yIjogIlbDpHJpIiwKKyAgICAgICAgIkZHIENvbG9yIjogIkZHIFbDpHJpIiwKKyAgICAgICAgIkltYWdlIFVSTCI6ICJLdXZhbiBvc29pdGUiLAorICAgICAgICAiTGF5b3V0IjogIlNvbW1pdHRlbHUiLAorICAgICAgICAiTGVmdCI6ICJWYXNlbiIsCisgICAgICAgICJNYXJnaW4iOiAiTWFyZ2luYWFsaSIsCisgICAgICAgICJNaWRkbGUiOiAiS2Vza2VsbGUiLAorICAgICAgICAiUmlnaHQiOiAiT2lrZWEiLAorICAgICAgICAiUnVsZXMiOiAiVmlpdmF0IiwKKyAgICAgICAgIlNwbGl0IGNlbGwiOiAiSmFhIHNvbHUiLAorICAgICAgICAiU3R5bGUgW0NTU10iOiAiVHl5bGkgW0NTU10iLAorICAgICAgICAiVG9wIjogIllsw7ZzIiwKKyAgICAgICAgIlZlcnRpY2FsIGFsaWduIjogIlZlcnRpa2FhbGkga29oZGlzdHVzIiwKKyAgICAgICAgIldpZHRoIjogIkxldmV5cyIsCisgICAgICAgICJwZXJjZW50IjogInByb3NlbnR0aWEiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9mci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2Y0ODFhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9mci5qcwpAQCAtMCwwICsxLDkxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsbCBmb3VyIHNpZGVzIjogIlF1YXRyZSBjb3TDqXMiLAorICAgICJCb3JkZXJzIjogIkJvcmR1cmVzIiwKKyAgICAiQ2FuY2VsIjogIkFubnVsZXIiLAorICAgICJDYXB0aW9uIjogIsOJdGlxdWV0dGUiLAorICAgICJDZWxsIFByb3BlcnRpZXMiOiAiUHJvcHJpw6l0w6lzIGRlIGNlbGx1bGUiLAorICAgICJDZWxsIHByb3BlcnRpZXMiOiAiQ2VsbCBwcm9wZXJ0aWVzIiwKKyAgICAiRGVsZXRlIGNlbGwiOiAiU3VwcHJpbWVyIHVuZSBjZWxsdWxlIiwKKyAgICAiRGVsZXRlIGNvbHVtbiI6ICJTdXBwcmltZXIgbGEgY29sb25uZSIsCisgICAgIkRlbGV0ZSByb3ciOiAiU3VwcHJpbWVyIHVuZSByYW5nw6llIiwKKyAgICAiRGVzY3JpcHRpb24iOiAiRGVzY3JpcHRpb24iLAorICAgICJGcmFtZXMiOiAiVnVlcyIsCisgICAgIkluc2VydCBjZWxsIGFmdGVyIjogIkluc8OpcmVyIHVuZSBjZWxsdWxlIGFwcsOocyIsCisgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICJJbnPDqXJlciB1bmUgY2VsbHVsZSBhdmFudCIsCisgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAiSW5zw6lyZXIgdW5lIGNvbG9ubmUgYXByw6hzIiwKKyAgICAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiOiAiSW5zw6lyZXIgdW5lIGNvbG9ubmUgYXZhbnQiLAorICAgICJJbnNlcnQgcm93IGFmdGVyIjogIkluc8OpcmVyIHVuZSByYW5nw6llIGFwcsOocyIsCisgICAgIkluc2VydCByb3cgYmVmb3JlIjogIkluc8OpcmVyIHVuZSByYW5nw6llIGF2YW50IiwKKyAgICAiTWVyZ2UgY2VsbHMiOiAiRnVzaW9ubmVyIGxlcyBjZWxsdWxlcyIsCisgICAgIk5vIHJ1bGVzIjogIkF1Y3VuZSByw6hnbGUiLAorICAgICJObyBzaWRlcyI6ICJBdWN1biBjw7R0w6kiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBhZGRpbmciOiAiUmVtcGxpc3NhZ2UiLAorICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiQ2xpcXVlciBzdXIgdW5lIGNlbGx1bGUiLAorICAgICJSb3cgUHJvcGVydGllcyI6ICJQcm9wcmnDqXTDqXMgZGUgcmFuZ8OpZSIsCisgICAgIlJvdyBwcm9wZXJ0aWVzIjogIlByb3ByacOpdMOpcyBkZSByYW5nw6llIiwKKyAgICAiUm93cyI6ICJMaWduZXMiLAorICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGFsbCByb3dzIGFuZCBjb2x1bW5zIjogIlLDqGdsZXMgZW50cmUgbGVzIHJhbmfDqWVzIGV0IGxlcyBjZWxsdWxlcyIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gY29sdW1ucyBvbmx5IjogIlLDqGdsZXMgZW50cmUgbGVzIGNvbG9ubmVzIHNldWxlbWVudCIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogIlLDqGdsZXMgZW50cmUgbGVzIHJhbmfDqWVzIHNldWxlbWVudCIsCisgICAgIlNwYWNpbmciOiAiRXNwYWNlbWVudCIsCisgICAgIlNwYWNpbmcgYW5kIHBhZGRpbmciOiAiRXNwYWNlbWVudCBldCByZW1wbGlzc2FnZSIsCisgICAgIlNwbGl0IGNvbHVtbiI6ICJEaXZpc2VyIHVuZSBjb2xvbm5lIiwKKyAgICAiU3BsaXQgcm93IjogIkRpdmlzZXIgbGEgcmFuZ8OpZSIsCisgICAgIlN1bW1hcnkiOiAiU29tbWFpcmUiLAorICAgICJUYWJsZSBQcm9wZXJ0aWVzIjogIlByb3ByacOpdMOpcyBkZSB0YWJsZSIsCisgICAgIlRhYmxlIHByb3BlcnRpZXMiOiAiUHJvcHJpw6l0w6lzIGRlIHRhYmxlIiwKKyAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAiQ8O0dMOpIGR1IGJhcyBzZXVsZW1lbnQiLAorICAgICJUaGUgbGVmdC1oYW5kIHNpZGUgb25seSI6ICJDw7R0w6kgZ2F1Y2hlIHNldWxlbWVudCIsCisgICAgIlRoZSByaWdodCBhbmQgbGVmdCBzaWRlcyBvbmx5IjogIkPDtHTDqSBnYXVjaGUgZXQgZHJvaXQgc2V1bGVtZW50IiwKKyAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIkPDtHTDqSBkcm9pdCBzZXVsZW1lbnQiLAorICAgICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSI6ICJDw7R0w6kgaGF1dCBldCBiYXMgc2V1bGVtZW50IiwKKyAgICAiVGhlIHRvcCBzaWRlIG9ubHkiOiAiQ8O0dMOpIGhhdXQgc2V1bGVtZW50IiwKKyAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY2VsbCBpbiByb3cuIjogIklsIGVzdCBpbXBvc3NpYmxlIGRlIHN1cHByaW1lciBsYSBkZXJuacOocmUgY2VsbHVsZSBkZSBsYSByYW5nw6llLiIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iOiAiSWwgZXN0IGltcG9zc2libGUgZGUgc3VwcHJpbWVyIGxhIGRlcm5pw6hyZSBjb2xvbm5lIGRlIGxhIHRhYmxlLiIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iOiAiSWwgZXN0IGltcG9zc2libGUgZGUgc3VwcHJpbWVyIGxhIGRlcm5pw6hyZSByYW5nw6llIGRlIGxhIHRhYmxlIiwKKyAgICAicGl4ZWxzIjogInBpeGVscyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFsaWduIjogIkFsaWduZXIiLAorICAgICAgICAiQmFja2dyb3VuZCI6ICJBcnJpw6hyZSBwbGFuIiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkxpZ25lIGRlIGJhc2UiLAorICAgICAgICAiQm9yZGVyIjogIkJvcmR1cmUiLAorICAgICAgICAiQm90dG9tIjogIkJhcyIsCisgICAgICAgICJDZW50ZXIiOiAiQ2VudHJlIiwKKyAgICAgICAgIkNoYXIiOiAiQ2hhcmFjdMOocmUiLAorICAgICAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAiQm9yZHVyZSBlZmZvbmRyw6lzIiwKKyAgICAgICAgIkNvbG9yIjogIkNvdWxldXIiLAorICAgICAgICAiRkcgQ29sb3IiOiAiQ291bGV1ciBkZSBmYWNlIiwKKyAgICAgICAgIkZsb2F0IjogIkZsb3R0ZXVyIiwKKyAgICAgICAgIkhlaWdodCI6ICJMYXJnZXVyIiwKKyAgICAgICAgIkhvdyBtYW55IGNvbHVtbnMgd291bGQgeW91IGxpa2UgdG8gbWVyZ2U/IjogIkNvbWJpZW4gZGUgY29sb25uZXMgdm91bGV6LXZvdXMgZnVzaW9ubmVyPyIsCisgICAgICAgICJIb3cgbWFueSByb3dzIHdvdWxkIHlvdSBsaWtlIHRvIG1lcmdlPyI6ICJDb21iaWVuIGRlIHJhbmfDqWVzIHZvdWxlei12b3VzIGZ1c2lvbm5lcj8iLAorICAgICAgICAiSW1hZ2UgVVJMIjogIlVSTCBwb3VyIGwnaW1hZ2UiLAorICAgICAgICAiSnVzdGlmeSI6ICJKdXN0aWZpw6kiLAorICAgICAgICAiTGF5b3V0IjogIkFycmFuZ2VtZW50IiwKKyAgICAgICAgIkxlZnQiOiAiR2F1Y2hlIiwKKyAgICAgICAgIk1hcmdpbiI6ICJNYXJnZSIsCisgICAgICAgICJNaWRkbGUiOiAiTWlsaWV1IiwKKyAgICAgICAgIk5vbmUiOiAiQXVjdW4iLAorICAgICAgICAiUmlnaHQiOiAiRHJvaXQiLAorICAgICAgICAiUnVsZXMiOiAiTGVzIHLDqGdsZXMiLAorICAgICAgICAiU3BsaXQgY2VsbCI6ICJEaXZpc2VyIGxhIGNlbGx1bGUiLAorICAgICAgICAiU3R5bGUgW0NTU10iOiAiU3R5bGUgW0NTU10iLAorICAgICAgICAiVGV4dCBhbGlnbiI6ICJBbGlnbmVtZW50IiwKKyAgICAgICAgIlRvcCI6ICJIYXV0IiwKKyAgICAgICAgIlVuc2V0IGNvbG9yIjogIkVubGV2ZXIgbGEgY291bGV1ciIsCisgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICJWZXJ0aWNhbCIsCisgICAgICAgICJXaWR0aCI6ICJMb25nZXVyIiwKKyAgICAgICAgInBlcmNlbnQiOiAiJSIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvaGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMjU0YTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL2hlLmpzCkBAIC0wLDAgKzEsOTAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxsIGZvdXIgc2lkZXMiOiAi15vXnCDXkNeo15HXoteqINeU16bXk9eT15nXnSIsCisgICAgIkJvcmRlcnMiOiAi15LXkdeV15zXldeqIiwKKyAgICAiQ2FuY2VsIjogIteR15nXmNeV15wiLAorICAgICJDYXB0aW9uIjogIteb15XXqteo16oiLAorICAgICJDZWxsIFByb3BlcnRpZXMiOiAi157XkNek15nXmdeg15kg16rXkCIsCisgICAgIkNlbGwgcHJvcGVydGllcyI6ICLXnteQ16TXmdeZ16DXmSDXqteQIiwKKyAgICAiRGVsZXRlIGNlbGwiOiAi157Xl9enINeq15AiLAorICAgICJEZWxldGUgY29sdW1uIjogItee15fXpyDXmNeV16giLAorICAgICJEZWxldGUgcm93IjogItee15fXpyDXqdeV16jXlCIsCisgICAgIkRlc2NyaXB0aW9uIjogIteq15nXkNeV16giLAorICAgICJGcmFtZXMiOiAi157XodeS16jXldeqIiwKKyAgICAiSW5zZXJ0IGNlbGwgYWZ0ZXIiOiAi15TXm9eg16Eg16rXkCDXkNeX16jXmSIsCisgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICLXlNeb16DXoSDXqteQINec16TXoNeZIiwKKyAgICAiSW5zZXJ0IGNvbHVtbiBhZnRlciI6ICLXlNeb16DXoSDXmNeV16gg15DXl9eo15kiLAorICAgICJJbnNlcnQgY29sdW1uIGJlZm9yZSI6ICLXlNeb16DXoSDXmNeV16gg15zXpNeg15kiLAorICAgICJJbnNlcnQgcm93IGFmdGVyIjogIteU15vXoNehINep15XXqNeUINeQ15fXqNeZIiwKKyAgICAiSW5zZXJ0IHJvdyBiZWZvcmUiOiAi15TXm9eg16Eg16nXldeo15Qg15zXpNeg15kiLAorICAgICJNZXJnZSBjZWxscyI6ICLXnteW15Ig16rXkNeZ150iLAorICAgICJObyBydWxlcyI6ICLXnNec15Ag16fXldeV15nXnSIsCisgICAgIk5vIHNpZGVzIjogItec15zXkCDXpteT15PXmdedIiwKKyAgICAiT0siOiAi15DXmdep15XXqCIsCisgICAgIlBhZGRpbmciOiAi16jXmdeV15XXlyDXkdep15XXnNeZ15nXnSIsCisgICAgIlBsZWFzZSBjbGljayBpbnRvIHNvbWUgY2VsbCI6ICLXkNeg15Ag15zXl9elINei15wg16rXkCDXm9ec16nXlNeVIiwKKyAgICAiUm93IFByb3BlcnRpZXMiOiAi157XkNek15nXmdeg15kg16nXldeo15QiLAorICAgICJSb3cgcHJvcGVydGllcyI6ICLXnteQ16TXmdeZ16DXmSDXqdeV16jXlCIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAi16fXldeV15nXnSDXmdeV16TXmdei15Ug15HXmdefINeb15wg15TXqdeV16jXldeqINeV15TXmNeV16jXmdedIiwKKyAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBjb2x1bW5zIG9ubHkiOiAi16fXldeV15nXnSDXmdeV16TXmdei15Ug15HXmdefINeY15XXqNeZ150g15HXnNeR15MiLAorICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIHJvd3Mgb25seSI6ICLXp9eV15XXmdedINeZ15XXpNeZ16LXlSDXkdeZ158g16nXldeo15XXqiDXkdec15HXkyIsCisgICAgIlNwYWNpbmciOiAi16jXmdeV15XXlyIsCisgICAgIlNwYWNpbmcgYW5kIHBhZGRpbmciOiAi16jXmdeV15XXlyDXldep15XXnNeZ15nXnSIsCisgICAgIlNwbGl0IGNvbHVtbiI6ICLXpNem15wg15jXldeoIiwKKyAgICAiU3BsaXQgcm93IjogItek16bXnCDXqdeV16jXlCIsCisgICAgIlN1bW1hcnkiOiAi16HXmdeb15XXnSIsCisgICAgIlRhYmxlIFByb3BlcnRpZXMiOiAi157XkNek15nXmdeg15kg15jXkdec15QiLAorICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogItee15DXpNeZ15nXoNeZINeY15HXnNeUIiwKKyAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAi15TXpteTINeU16rXl9eq15XXnyDXkdec15HXkyIsCisgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIteU16bXkyDXlNep157XkNec15kg15HXnNeR15MiLAorICAgICJUaGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb25seSI6ICLXlNem15PXk9eZ150g15TXmdee16DXmSDXldeU16nXnteQ15zXmSDXkdec15HXkyIsCisgICAgIlRoZSByaWdodC1oYW5kIHNpZGUgb25seSI6ICLXlNem15Mg15TXmdee16DXmSDXkdec15HXkyIsCisgICAgIlRoZSB0b3AgYW5kIGJvdHRvbSBzaWRlcyBvbmx5IjogIteU16bXk9eT15nXnSDXlNei15zXmdeV158g15XXlNeq15fXqteV158g15HXnNeR15MiLAorICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICLXlNem15Mg15TXotec15nXldefINeR15zXkdeTIiwKKyAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY2VsbCBpbiByb3cuIjogIlhpbmhhINee16HXqNeRINeR16TXl9eT16DXldeqINec157Xl9eV16cg15DXqiDXlNeq15Ag15TXkNeX16jXldefINeR16nXldeo15QuIiwKKyAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICJYaW5oYSDXnteh16jXkSDXkdek15fXk9eg15XXqiDXnNee15fXldenINeQ16og15TXmNeV16gg15TXkNeX16jXldefINeR15jXkdec15QuIiwKKyAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3Qgcm93IGluIHRhYmxlLiI6ICJYaW5oYSDXnteh16jXkSDXkdek15fXk9eg15XXqiDXnNee15fXldenINeQ16og15TXqdeV16jXlCDXlNeQ15fXqNeV16DXlCDXkdeY15HXnNeULiIsCisgICAgInBpeGVscyI6ICLXpNeZ16fXodec15nXnSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFsaWduIjogIteZ16nXldeoIiwKKyAgICAgICAgIkJhY2tncm91bmQiOiAi16jXp9eiIiwKKyAgICAgICAgIkJhc2VsaW5lIjogIten15Ug15HXodeZ16EiLAorICAgICAgICAiQm9yZGVyIjogIteS15HXldecIiwKKyAgICAgICAgIkJvdHRvbSI6ICLXqteX16rXldefIiwKKyAgICAgICAgIkNlbnRlciI6ICLXnteo15vXliIsCisgICAgICAgICJDaGFyIjogIteq15UiLAorICAgICAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAi15LXkdeV15zXldeqINen15XXqNeh15nXnSIsCisgICAgICAgICJDb2xvciI6ICLXpteR16IiLAorICAgICAgICAiRkcgQ29sb3IiOiAi16bXkdeiINen15nXk9ee15QiLAorICAgICAgICAiRmxvYXQiOiAi157XqNeX16MiLAorICAgICAgICAiSGVpZ2h0IjogIteS15XXkdeUIiwKKyAgICAgICAgIkhvdyBtYW55IGNvbHVtbnMgd291bGQgeW91IGxpa2UgdG8gbWVyZ2U/IjogIteb157XlCDXmNeV16jXmdedINeR16jXpteV16DXmiDXnNee15bXkj8iLAorICAgICAgICAiSG93IG1hbnkgcm93cyB3b3VsZCB5b3UgbGlrZSB0byBtZXJnZT8iOiAi15vXnteUINep15XXqNeV16og15HXqNem15XXoNeaINec157XlteSPyIsCisgICAgICAgICJJbWFnZSBVUkwiOiAiVVJMINeU16rXnteV16DXlCIsCisgICAgICAgICJKdXN0aWZ5IjogIteZ16nXldeoIiwKKyAgICAgICAgIkxheW91dCI6ICLXpNeo15nXodeUIiwKKyAgICAgICAgIkxlZnQiOiAi16nXnteQ15wiLAorICAgICAgICAiTWFyZ2luIjogItep15XXnNeZ15nXnSIsCisgICAgICAgICJNaWRkbGUiOiAi15DXntem16IiLAorICAgICAgICAiTm9uZSI6ICLXkNeZ158iLAorICAgICAgICAiUmlnaHQiOiAi15nXnteZ158iLAorICAgICAgICAiUnVsZXMiOiAi16fXldeV15nXnSIsCisgICAgICAgICJTcGxpdCBjZWxsIjogItek16bXnCDXqteQIiwKKyAgICAgICAgIlN0eWxlIFtDU1NdIjogIteh15LXoNeV158gW0NTU10iLAorICAgICAgICAiVGV4dCBhbGlnbiI6ICLXmdep15XXqCDXmNen16HXmCIsCisgICAgICAgICJUb3AiOiAi16LXnNeZ15XXnyIsCisgICAgICAgICJVbnNldCBjb2xvciI6ICLXpteR16Ig15zXkCDXoNeR15fXqCIsCisgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICLXmdeZ16nXldeoINeQ16DXm9eZIiwKKyAgICAgICAgIldpZHRoIjogIteo15XXl9eRIiwKKyAgICAgICAgInBlcmNlbnQiOiAi15DXl9eV15YiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL2h1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9odS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzg1MjhkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9odS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImh1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJNw6lnc2VtIiwKKyAgICAiT0siOiAiUmVuZGJlbiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9pdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvaXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5MTI3MQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvaXQuanMKQEAgLTAsMCArMSw5MCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJpdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGwgZm91ciBzaWRlcyI6ICJUdXR0aSBlIHF1YXR0cm8gaSBsYXRpIiwKKyAgICAiQm9yZGVycyI6ICJCb3JkaSIsCisgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iLAorICAgICJDYXB0aW9uIjogIlRpdG9sbyIsCisgICAgIkNlbGwgUHJvcGVydGllcyI6ICJQcm9wcmlldMODwqAgZGVsbGEgQ2VsbGEiLAorICAgICJDZWxsIHByb3BlcnRpZXMiOiAiUHJvcHJpZXTDg8KgIGRlbGxhIGNlbGxhIiwKKyAgICAiRGVsZXRlIGNlbGwiOiAiQ2FuY2VsbGEgY2VsbGEiLAorICAgICJEZWxldGUgY29sdW1uIjogIkNhbmNlbGxhIGNvbG9ubmEiLAorICAgICJEZWxldGUgcm93IjogIkNhbmNlbGxhIHJpZ2EiLAorICAgICJEZXNjcmlwdGlvbiI6ICJEZXNjcml6aW9uZSIsCisgICAgIkZyYW1lcyI6ICJGcmFtZXMiLAorICAgICJJbnNlcnQgY2VsbCBhZnRlciI6ICJJbnNlcmlzY2kgY2VsbGEgZG9wbyIsCisgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICJJbnNlcmlzY2kgY2VsbGEgcHJpbWEiLAorICAgICJJbnNlcnQgY29sdW1uIGFmdGVyIjogIkluc2VyaXNjaSBjb2xvbm5hIGRvcG8iLAorICAgICJJbnNlcnQgY29sdW1uIGJlZm9yZSI6ICJJbnNlcmlzY2kgY29sb25uYSBwcmltYSIsCisgICAgIkluc2VydCByb3cgYWZ0ZXIiOiAiSW5zZXJpc2NpIHJpZ2EgZG9wbyIsCisgICAgIkluc2VydCByb3cgYmVmb3JlIjogIkluc2VyaXNjaSByaWdhIHByaW1hIiwKKyAgICAiTWVyZ2UgY2VsbHMiOiAiVW5pc2NpIGNlbGxlIiwKKyAgICAiTm8gcnVsZXMiOiAiTmVzc3VuIHJpZ2hlbGxvIiwKKyAgICAiTm8gc2lkZXMiOiAiTmVzc3VuIGxhdG8iLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBhZGRpbmciOiAiUGFkZGluZyIsCisgICAgIlBsZWFzZSBjbGljayBpbnRvIHNvbWUgY2VsbCI6ICJQZXIgZmF2b3JlLCBjbGljY2EgaW4gdW5hIGNlbGxhIiwKKyAgICAiUm93IFByb3BlcnRpZXMiOiAiUHJvcHJpZXTDg8KgIGRlbGxhIFJpZ2EiLAorICAgICJSb3cgcHJvcGVydGllcyI6ICJQcm9wcmlldMODwqAgZGVsbGEgcmlnYSIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAiTGUgbGluZWUgYXBwYXJpcmFubm8gdHJhIHR1dHRlIGxlIHJpZ2hlIGUgY29sb25uZSIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gY29sdW1ucyBvbmx5IjogIkxlIGxpbmVlIGFwcGFyaXJhbm5vIHNvbG8gdHJhIGxlIGNvbG9ubmUiLAorICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIHJvd3Mgb25seSI6ICJMZSBsaW5lZSBhcHBhcmlyYW5ubyBzb2xvIHRyYSBsZSByaWdoZSIsCisgICAgIlNwYWNpbmciOiAiU3BhemlhdHVyYSIsCisgICAgIlNwYWNpbmcgYW5kIHBhZGRpbmciOiAiU3BhemlhdHVyYSBlIFBhZGRpbmciLAorICAgICJTcGxpdCBjb2x1bW4iOiAiRGl2aWRpIGNvbG9ubmEiLAorICAgICJTcGxpdCByb3ciOiAiRGl2aWRpIHJpZ2EiLAorICAgICJTdW1tYXJ5IjogIlNvbW1hcmlvIiwKKyAgICAiVGFibGUgUHJvcGVydGllcyI6ICJQcm9wcmlldMODwqAgZGVsbGEgVGFiZWxsYSIsCisgICAgIlRhYmxlIHByb3BlcnRpZXMiOiAiUHJvcHJpZXTDg8KgIGRlbGxhIFRhYmVsbGEiLAorICAgICJUaGUgYm90dG9tIHNpZGUgb25seSI6ICJTb2xvIGxhIHBhcnRlIGluZmVyaW9yZSIsCisgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIlNvbG8gbGEgcGFydGUgc2luaXN0cmEiLAorICAgICJUaGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb25seSI6ICJTb2xvIGRlc3RyYSBlIHNpbmlzdHJhIiwKKyAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIlNvbG8gbGEgcGFydGUgZGVzdHJhIiwKKyAgICAiVGhlIHRvcCBhbmQgYm90dG9tIHNpZGVzIG9ubHkiOiAiU29sbyBzb3ByYSBlIHNvdHRvIiwKKyAgICAiVGhlIHRvcCBzaWRlIG9ubHkiOiAiU29sbyBsYSBwYXJ0ZSBzb3ByYSIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiI6ICJYaW5oYSBzaSByaWZpdXRhIGNvZGFyZGFtZW50ZSBkaSBjYW5jZWxsYXJlIGwndWx0aW1hIGNlbGxhIG5lbGxhIHJpZ2EuIiwKKyAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICJYaW5oYSBzaSByaWZpdXRhIGNvZGFyZGFtZW50ZSBkaSBjYW5jZWxsYXJlIGwndWx0aW1hIGNvbG9ubmEgbmVsbGEgdGFiZWxsYS4iLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIlhpbmhhIHNpIHJpZml1dGEgY29kYXJkYW1lbnRlIGRpIGNhbmNlbGxhcmUgbCd1bHRpbWEgcmlnYSBuZWxsYSB0YWJlbGxhLiIsCisgICAgInBpeGVscyI6ICJwaXhlbHMiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBbGlnbiI6ICJBbGxpbmVhIiwKKyAgICAgICAgIkJhY2tncm91bmQiOiAiU2ZvbmRvIiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkFsbGluZWFtZW50byIsCisgICAgICAgICJCb3JkZXIiOiAiQm9yZG8iLAorICAgICAgICAiQm90dG9tIjogIkJhc3NvIiwKKyAgICAgICAgIkNlbnRlciI6ICJDZW50cmEiLAorICAgICAgICAiQ2hhciI6ICJDYXJhdHRlcmUiLAorICAgICAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAiQm9yZGkgY2hpdXNpIiwKKyAgICAgICAgIkNvbG9yIjogIkNvbG9yZSIsCisgICAgICAgICJGRyBDb2xvciI6ICJDb2xvcmUgUHJpbmNpcGFsZSIsCisgICAgICAgICJGbG9hdCI6ICJGbHV0dHVhbnRlIiwKKyAgICAgICAgIkhlaWdodCI6ICJBbHRlenphIiwKKyAgICAgICAgIkhvdyBtYW55IGNvbHVtbnMgd291bGQgeW91IGxpa2UgdG8gbWVyZ2U/IjogIlF1YW50ZSBjb2xvbm5lIHZ1b2kgdW5pcmU/IiwKKyAgICAgICAgIkhvdyBtYW55IHJvd3Mgd291bGQgeW91IGxpa2UgdG8gbWVyZ2U/IjogIlF1YW50ZSByaWdoZSB2dW9pIHVuaXJlPyIsCisgICAgICAgICJJbWFnZSBVUkwiOiAiVVJMIGRlbGwnSW1tYWdpbmUiLAorICAgICAgICAiSnVzdGlmeSI6ICJKdXN0aWZpY2EiLAorICAgICAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgICAgICJMZWZ0IjogIlNpbmlzdHJhIiwKKyAgICAgICAgIk1hcmdpbiI6ICJNYXJnaW5lIiwKKyAgICAgICAgIk1pZGRsZSI6ICJDZW50cmFsZSIsCisgICAgICAgICJOb25lIjogIk51bGxhIiwKKyAgICAgICAgIlJpZ2h0IjogIkRlc3RyYSIsCisgICAgICAgICJSdWxlcyI6ICJMaW5lZSIsCisgICAgICAgICJTcGxpdCBjZWxsIjogIkRpdmlkaSBjZWxsYSIsCisgICAgICAgICJTdHlsZSBbQ1NTXSI6ICJTdGlsZSBbQ1NTXSIsCisgICAgICAgICJUZXh0IGFsaWduIjogIkFsbGluZWFtZW50byBkZWwgVGVzdG8iLAorICAgICAgICAiVG9wIjogIkFsdG8iLAorICAgICAgICAiVW5zZXQgY29sb3IiOiAiUmltdW92aSBjb2xvcmUiLAorICAgICAgICAiVmVydGljYWwgYWxpZ24iOiAiQWxsaW5lYW1lbnRvIHZlcnRpY2FsZSIsCisgICAgICAgICJXaWR0aCI6ICJMYXJnaGV6emEiLAorICAgICAgICAicGVyY2VudCI6ICJwZXJjZW50byIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMDQxZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL2phLmpzCkBAIC0wLDAgKzEsOTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiamEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxsIGZvdXIgc2lkZXMiOiAi5Zub6L6644GZ44G544GmIiwKKyAgICAiQm9yZGVycyI6ICLlooPnlYznt5oiLAorICAgICJDYW5jZWwiOiAi5Lit5q2iIiwKKyAgICAiQ2FwdGlvbiI6ICLjgq3jg6Pjg5fjgrfjg6fjg7MiLAorICAgICJDZWxsIFByb3BlcnRpZXMiOiAi44K744Or44OX44Ot44OR44OG44KjIiwKKyAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogIuOCu+ODq+OBruODl+ODreODkeODhuOCoyIsCisgICAgIkNvbHVtbnMiOiAi5YiX5pWwOiIsCisgICAgIkRlbGV0ZSBjZWxsIjogIuOCu+ODq+OBruWJiumZpCIsCisgICAgIkRlbGV0ZSBjb2x1bW4iOiAi5YiX44Gu5YmK6ZmkIiwKKyAgICAiRGVsZXRlIHJvdyI6ICLooYzjga7liYrpmaQiLAorICAgICJEZXNjcmlwdGlvbiI6ICLoqqzmmI4iLAorICAgICJGcmFtZSBhbmQgYm9yZGVycyI6ICLlpJbmnqDjgajlooPnlYznt5oiLAorICAgICJGcmFtZXMiOiAi5aSW5p6gIiwKKyAgICAiSW5zZXJ0IGNlbGwgYWZ0ZXIiOiAi5qyh44Gr44K744Or44KS5oy/5YWlIiwKKyAgICAiSW5zZXJ0IGNlbGwgYmVmb3JlIjogIuWJjeOBq+OCu+ODq+OCkuaMv+WFpSIsCisgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAi5Y+z44Gr5YiX44KS5oy/5YWlIiwKKyAgICAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiOiAi5bem44Gr5YiX44KS5oy/5YWlIiwKKyAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICLkuIvjgavooYzjgpLmjL/lhaUiLAorICAgICJJbnNlcnQgcm93IGJlZm9yZSI6ICLkuIrjgavooYzjgpLmjL/lhaUiLAorICAgICJNZXJnZSBDZWxscyI6ICLjgrvjg6vjga7ntZDlkIgiLAorICAgICJNZXJnZSBjZWxscyI6ICLjgrvjg6vjga7ntZDlkIgiLAorICAgICJObyBydWxlcyI6ICLljLrliIfjgorjgarjgZciLAorICAgICJObyBzaWRlcyI6ICLlpJbmnqDjgarjgZciLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBhZGRpbmciOiAi5L2Z55m9IiwKKyAgICAiUGxlYXNlIGNsaWNrIGludG8gc29tZSBjZWxsIjogIuOBhOOBmuOCjOOBi+OBruOCu+ODq+WGheOCkuOCr+ODquODg+OCr+OBl+OBpuOBj+OBoOOBleOBhCIsCisgICAgIlJvdyBQcm9wZXJ0aWVzIjogIuihjOODl+ODreODkeODhuOCoyIsCisgICAgIlJvdyBwcm9wZXJ0aWVzIjogIuihjOOBruODl+ODreODkeODhuOCoyIsCisgICAgIlJvd3MiOiAi6KGM5pWwOiIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAi44GZ44G544Gm44Gu6KGM6ZaT44Go5YiX6ZaT44Gr57ea44KS5byV44GPIiwKKyAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBjb2x1bW5zIG9ubHkiOiAi5YiX44Gu6ZaT44Gr44Gu44G/57ea44KS5byV44GPIiwKKyAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiByb3dzIG9ubHkiOiAi6KGM44Gu6ZaT44Gr44Gu44G/57ea44KS5byV44GPIiwKKyAgICAiU3BhY2luZyI6ICLplpPpmpQiLAorICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogIumWk+malOOBqOS9meeZvSIsCisgICAgIlNwbGl0IGNvbHVtbiI6ICLliJfjga7liIblibIiLAorICAgICJTcGxpdCByb3ciOiAi6KGM44Gu5YiG5YmyIiwKKyAgICAiU3VtbWFyeSI6ICLopoHntIQiLAorICAgICJUYWJsZSBQcm9wZXJ0aWVzIjogIuODhuODvOODluODq+OBruODl+ODreODkeODhuOCoyIsCisgICAgIlRhYmxlIHByb3BlcnRpZXMiOiAi44OG44O844OW44Or44Gu44OX44Ot44OR44OG44KjIiwKKyAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAi5LiL6L6644Gu44G/IiwKKyAgICAiVGhlIGxlZnQtaGFuZCBzaWRlIG9ubHkiOiAi5bem6L6644Gu44G/IiwKKyAgICAiVGhlIHJpZ2h0IGFuZCBsZWZ0IHNpZGVzIG9ubHkiOiAi5bem5Y+z6L6644Gu44G/IiwKKyAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIuWPs+i+uuOBruOBvyIsCisgICAgIlRoZSB0b3AgYW5kIGJvdHRvbSBzaWRlcyBvbmx5IjogIuS4iuS4i+i+uuOBruOBvyIsCisgICAgIlRoZSB0b3Agc2lkZSBvbmx5IjogIuS4iui+uuOBruOBvyIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiI6ICLlronlhajjga7jgZ/jgoHjgavjgIHooYzjgavjgbLjgajjgaTjgaDjgZHmrovjgaPjgabjgYTjgovliJfjga7liYrpmaTjga/mi5LlkKbjgZXjgozjgb7jgZnjgIIiLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjb2x1bW4gaW4gdGFibGUuIjogIuWuieWFqOOBruOBn+OCgeOBq+OAgeODhuODvOODluODq+OBq+OBsuOBqOOBpOOBoOOBkeaui+OBo+OBpuOBhOOCi+WIl+OBruWJiumZpOOBr+aLkuWQpuOBleOCjOOBvuOBmeOAgiIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iOiAi5a6J5YWo44Gu44Gf44KB44Gr44CB44OG44O844OW44Or44Gr44Gy44Go44Gk44Gg44GR5q6L44Gj44Gm44GE44KL6KGM44Gu5YmK6Zmk44Gv5ouS5ZCm44GV44KM44G+44GZ44CCIiwKKyAgICAicGl4ZWxzIjogIuODlOOCr+OCu+ODqyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFsaWduIjogIuihjOaPg+OBiCIsCisgICAgICAgICJCYWNrZ3JvdW5kIjogIuiDjOaZryIsCisgICAgICAgICJCYXNlbGluZSI6ICLjg5njg7zjgrnjg6njgqTjg7MiLAorICAgICAgICAiQm9yZGVyIjogIuWig+eVjOe3miIsCisgICAgICAgICJCb3R0b20iOiAi5LiLIiwKKyAgICAgICAgIkNTUyBTdHlsZSI6ICJDU1Pjgrnjgr/jgqTjg6siLAorICAgICAgICAiQ2VudGVyIjogIuS4reWkriIsCisgICAgICAgICJDaGFyIjogIuaWh+WtlyIsCisgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICLpmqPmjqXlooPnlYznt5rjgpLph43jga3jgosiLAorICAgICAgICAiQ29sb3IiOiAi6ImyIiwKKyAgICAgICAgIkZHIENvbG9yIjogIuWJjeaZr+iJsiIsCisgICAgICAgICJGbG9hdCI6ICLjg5Xjg63jg7zjg4giLAorICAgICAgICAiSGVpZ2h0IjogIumrmOOBlSIsCisgICAgICAgICJIb3cgbWFueSBjb2x1bW5zIHdvdWxkIHlvdSBsaWtlIHRvIG1lcmdlPyI6ICLkvZXliJfntZDlkIjjgZfjgb7jgZnjgYs/IiwKKyAgICAgICAgIkhvdyBtYW55IHJvd3Mgd291bGQgeW91IGxpa2UgdG8gbWVyZ2U/IjogIuS9leihjOe1kOWQiOOBl+OBvuOBmeOBiz8iLAorICAgICAgICAiSW1hZ2UgVVJMIjogIueUu+WDj1VSTCIsCisgICAgICAgICJKdXN0aWZ5IjogIuS4oeerr+aPg+OBiCIsCisgICAgICAgICJMYXlvdXQiOiAi44Os44Kk44Ki44Km44OIIiwKKyAgICAgICAgIkxlZnQiOiAi5bemIiwKKyAgICAgICAgIk1hcmdpbiI6ICLplpPpmpQiLAorICAgICAgICAiTWlkZGxlIjogIuS4rSIsCisgICAgICAgICJOb25lIjogIuOBquOBlyIsCisgICAgICAgICJQbGVhc2Ugc2VsZWN0IHRoZSBjZWxscyB5b3Ugd2FudCB0byBtZXJnZS4iOiAi57WQ5ZCI44GX44Gf44GE44K744Or44KS6KSH5pWw6YG45oqe44GX44Gm44GP44Gg44GV44GE44CCIiwKKyAgICAgICAgIlJpZ2h0IjogIuWPsyIsCisgICAgICAgICJSdWxlcyI6ICLljLrliIfjgooiLAorICAgICAgICAiU3BsaXQgY2VsbCI6ICLjgrvjg6vjga7liIblibIiLAorICAgICAgICAiU3R5bGUgW0NTU10iOiAi44K544K/44Kk44OrIFtDU1NdIiwKKyAgICAgICAgIlRleHQgYWxpZ24iOiAi5rC05bmz5L2N572uIiwKKyAgICAgICAgIlRvcCI6ICLkuIoiLAorICAgICAgICAiVW5zZXQgY29sb3IiOiAi6Imy5oyH5a6a6Kej6ZmkIiwKKyAgICAgICAgIlZlcnRpY2FsIGFsaWduIjogIuWeguebtOS9jee9riIsCisgICAgICAgICJXaWR0aCI6ICLluYUiLAorICAgICAgICAicGVyY2VudCI6ICLjg5Hjg7zjgrvjg7Pjg4giCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL2xjX2Jhc2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4MzliMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDgwIEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgIkFsbCBmb3VyIHNpZGVzIjogIiIsCisgICAgIkJvcmRlcnMiOiAiIiwKKyAgICAiQ2FuY2VsIjogIiIsCisgICAgIkNhcHRpb24iOiAiIiwKKyAgICAiQ2VsbCBQcm9wZXJ0aWVzIjogIiIsCisgICAgIkNlbGwgVHlwZToiOiAiIiwKKyAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogIiIsCisgICAgIkNlbGxzIGRvd24iOiAiIiwKKyAgICAiQ2VsbHMgdG8gdGhlIHJpZ2h0LCBhbmQiOiAiIiwKKyAgICAiQ29sdW1ucyI6ICIiLAorICAgICJEZWxldGUgY2VsbCI6ICIiLAorICAgICJEZWxldGUgY29sdW1uIjogIiIsCisgICAgIkRlbGV0ZSByb3ciOiAiIiwKKyAgICAiRGVzY3JpcHRpb24iOiAiIiwKKyAgICAiRG8gTm90IENoYW5nZSI6ICIiLAorICAgICJGcmFtZSBhbmQgYm9yZGVycyI6ICIiLAorICAgICJGcmFtZXMiOiAiIiwKKyAgICAiSGVhZGVyICh0aCkiOiAiIiwKKyAgICAiSW5zZXJ0IGNlbGwgYWZ0ZXIiOiAiIiwKKyAgICAiSW5zZXJ0IGNlbGwgYmVmb3JlIjogIiIsCisgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAiIiwKKyAgICAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiOiAiIiwKKyAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICIiLAorICAgICJJbnNlcnQgcm93IGJlZm9yZSI6ICIiLAorICAgICJNZXJnZSBDZWxscyI6ICIiLAorICAgICJNZXJnZSBjZWxscyI6ICIiLAorICAgICJNZXJnZSBjdXJyZW50IGNlbGwgd2l0aDoiOiAiIiwKKyAgICAiTm8gcnVsZXMiOiAiIiwKKyAgICAiTm8gc2lkZXMiOiAiIiwKKyAgICAiTm9ybWFsICh0ZCkiOiAiIiwKKyAgICAiT0siOiAiIiwKKyAgICAiUGFkZGluZyI6ICIiLAorICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiIiwKKyAgICAiUm93IFByb3BlcnRpZXMiOiAiIiwKKyAgICAiUm93IHByb3BlcnRpZXMiOiAiIiwKKyAgICAiUm93cyI6ICIiLAorICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGFsbCByb3dzIGFuZCBjb2x1bW5zIjogIiIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gY29sdW1ucyBvbmx5IjogIiIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogIiIsCisgICAgIlNwYWNpbmciOiAiIiwKKyAgICAiU3BhY2luZyBhbmQgcGFkZGluZyI6ICIiLAorICAgICJTcGxpdCBjb2x1bW4iOiAiIiwKKyAgICAiU3BsaXQgcm93IjogIiIsCisgICAgIlN1bW1hcnkiOiAiIiwKKyAgICAiVGFibGUgUHJvcGVydGllcyI6ICIiLAorICAgICJUYWJsZSBwcm9wZXJ0aWVzIjogIiIsCisgICAgIlRoZSBib3R0b20gc2lkZSBvbmx5IjogIiIsCisgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIiIsCisgICAgIlRoZSByaWdodCBhbmQgbGVmdCBzaWRlcyBvbmx5IjogIiIsCisgICAgIlRoZSByaWdodC1oYW5kIHNpZGUgb25seSI6ICIiLAorICAgICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSI6ICIiLAorICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICIiLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiIiwKKyAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICIiLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIiIsCisgICAgInBpeGVscyI6ICIiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9sdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvbHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDExODkwOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvbHQuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKKyAgICAiT0siOiAiT0siCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvbHYuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL2x2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4M2Q1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL2x2LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHYiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0Y2VsdCIsCisgICAgIk9LIjogIkxhYmkiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvbmIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL25iLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYTU2NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL25iLmpzCkBAIC0wLDAgKzEsOTAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxsIGZvdXIgc2lkZXMiOiAiQWxsZSBmaXJlIHNpZGVyIiwKKyAgICAiQm9yZGVycyI6ICJLYW50bGluamVyIiwKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIkNhcHRpb24iOiAiT3ZlcnNrcmlmdCIsCisgICAgIkNlbGwgUHJvcGVydGllcyI6ICJDZWxsZWVnZW5za2FwZXIiLAorICAgICJDZWxsIHByb3BlcnRpZXMiOiAiRWdlbnNrYXBlciBmb3IgY2VsbGUiLAorICAgICJEZWxldGUgY2VsbCI6ICJTbGV0dCBjZWxsZSIsCisgICAgIkRlbGV0ZSBjb2x1bW4iOiAiU2xldHQga29sb25uZSIsCisgICAgIkRlbGV0ZSByb3ciOiAiU2xldHQgcmFkIiwKKyAgICAiRGVzY3JpcHRpb24iOiAiQmVza3JpdmVsc2UiLAorICAgICJGcmFtZXMiOiAicmFtbWVyIiwKKyAgICAiSW5zZXJ0IGNlbGwgYWZ0ZXIiOiAiU2V0dCBpbm4gY2VsbGUgZXR0ZXIiLAorICAgICJJbnNlcnQgY2VsbCBiZWZvcmUiOiAiU2V0dCBpbm4gY2VsbGUgZm9yYW4iLAorICAgICJJbnNlcnQgY29sdW1uIGFmdGVyIjogIlNreXQgaW5uIGtvbG9ubmUgZXR0ZXIiLAorICAgICJJbnNlcnQgY29sdW1uIGJlZm9yZSI6ICJTa3l0IGlubiBrb2xvbm5lIGbDuHIiLAorICAgICJJbnNlcnQgcm93IGFmdGVyIjogIlNreXQgaW5uIHJhZCBldHRlciIsCisgICAgIkluc2VydCByb3cgYmVmb3JlIjogIlNreXQgaW5uIHJhZCBmb3JhbiIsCisgICAgIk1lcmdlIGNlbGxzIjogIlNsw6Ugc2FtbWVuIGNlbGxlciIsCisgICAgIk5vIHJ1bGVzIjogIkluZ2VuIGxpbmphbCIsCisgICAgIk5vIHNpZGVzIjogIkluZ2VuIHNpZGVyIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQYWRkaW5nIjogIkx1ZnQiLAorICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiS2xpa2sgaSBlbiBlbGxlciBhbm5lbiBjZWxsZSIsCisgICAgIlJvdyBQcm9wZXJ0aWVzIjogIkVnZW5za2FwZXIgZm9yIHJhZCIsCisgICAgIlJvdyBwcm9wZXJ0aWVzIjogIkVnZW5za2FwZXIgZm9yIHJhZCIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAiTGluamVyIHZpbCBzeW5lcyBtZWxsb20gYWxsZSByYWRlciBvZyBrb2xvbm5lciIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gY29sdW1ucyBvbmx5IjogIkxpbmplciB2aWwgc3luZXMga3VuIG1lbGxvbSBrb2xvbm5lciIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogIkxpbmplciB2aWwgc3luZXMga3VuIG1lbGxvbSByYWRlciIsCisgICAgIlNwYWNpbmciOiAiTHVmdCIsCisgICAgIlNwYWNpbmcgYW5kIHBhZGRpbmciOiAiTHVmdCIsCisgICAgIlNwbGl0IGNvbHVtbiI6ICJEZWwga29sb25uZSIsCisgICAgIlNwbGl0IHJvdyI6ICJEZWwgcmFkIiwKKyAgICAiU3VtbWFyeSI6ICJTYW1tZW5kcmFnIiwKKyAgICAiVGFibGUgUHJvcGVydGllcyI6ICJUYWJlbGxlZ2Vuc2thcGVyIiwKKyAgICAiVGFibGUgcHJvcGVydGllcyI6ICJUYWJlbGxlZ2Vuc2thcGVyIiwKKyAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAiQnVubmVuIGt1biIsCisgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIlZlbnN0cmVzaWRlbiBrdW4iLAorICAgICJUaGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb25seSI6ICJIw7h5cmUtIG9nIHZlbnN0cmVzaWRlbiBrdW4iLAorICAgICJUaGUgcmlnaHQtaGFuZCBzaWRlIG9ubHkiOiAiSMO4eXJlc2lkZW4ga3VuIiwKKyAgICAiVGhlIHRvcCBhbmQgYm90dG9tIHNpZGVzIG9ubHkiOiAiVGhlIHRvcCBhbmQgYm90dG9tIHNpZGVzIG9ubHkiLAorICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICJPdmVya2FudGVuIGt1biIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiI6ICJYaW5oYSBuZWt0ZXIgw6Ugc2xldHRlIHNpc3RlIGNlbGxlbiBpIHRhYmVsbGVuLiIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iOiAiWGluaGEgbmVrdGVyIMOlIHNsZXR0ZSBzaXN0ZSBrb2xvbm5lbiBpIHRhYmVsbGVuLiIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iOiAiWGluaGEgbmVrdGVyIMOlIHNsZXR0ZSBzaXN0ZSByYWRlbiBpIHRhYmVsbGVuLiIsCisgICAgInBpeGVscyI6ICJiaWxsZWRwdW5rdGVyIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQWxpZ24iOiAiSnVzdGVyIiwKKyAgICAgICAgIkJhY2tncm91bmQiOiAiQmFrZ3J1bmQiLAorICAgICAgICAiQmFzZWxpbmUiOiAiR3J1bm5saW5qZSIsCisgICAgICAgICJCb3JkZXIiOiAiS2FudGxpbmplIiwKKyAgICAgICAgIkJvdHRvbSI6ICJCdW5uIiwKKyAgICAgICAgIkNlbnRlciI6ICJTZW50cmVyIiwKKyAgICAgICAgIkNoYXIiOiAiVGVnbiIsCisgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICJGamVybiBrYW50bGluamVyIiwKKyAgICAgICAgIkNvbG9yIjogIkZhcmdlIiwKKyAgICAgICAgIkZHIENvbG9yIjogIkZHIGZhcmdlIiwKKyAgICAgICAgIkZsb2F0IjogIkZseXRlbmRlIiwKKyAgICAgICAgIkhlaWdodCI6ICJIw7h5ZGUiLAorICAgICAgICAiSG93IG1hbnkgY29sdW1ucyB3b3VsZCB5b3UgbGlrZSB0byBtZXJnZT8iOiAiSHZvciBtYW5nZSBrb2xvbm5lciB2aWwgZHUgc2zDpSBzYW1tZW4/IiwKKyAgICAgICAgIkhvdyBtYW55IHJvd3Mgd291bGQgeW91IGxpa2UgdG8gbWVyZ2U/IjogIkh2b3IgbWFuZ2UgcmFkZXIgdmlsIGR1IHNsw6Ugc2FtbWVuPyIsCisgICAgICAgICJJbWFnZSBVUkwiOiAiQmlsZGV0cyBVUkwiLAorICAgICAgICAiSnVzdGlmeSI6ICJKdXN0ZXIiLAorICAgICAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgICAgICJMZWZ0IjogIlZlbnN0cmUiLAorICAgICAgICAiTWFyZ2luIjogIk1hcmciLAorICAgICAgICAiTWlkZGxlIjogIk1pZHRlbiIsCisgICAgICAgICJOb25lIjogIkluZ2VuIiwKKyAgICAgICAgIlJpZ2h0IjogIkjDuHlyZSIsCisgICAgICAgICJSdWxlcyI6ICJMaW5qZXIiLAorICAgICAgICAiU3BsaXQgY2VsbCI6ICJEZWwgY2VsbGUiLAorICAgICAgICAiU3R5bGUgW0NTU10iOiAiU3RpbCBbQ1NTXSIsCisgICAgICAgICJUZXh0IGFsaWduIjogIkp1c3RlciB0ZWtzdCIsCisgICAgICAgICJUb3AiOiAiT3ZlcmthbnQiLAorICAgICAgICAiVW5zZXQgY29sb3IiOiAiSWtrZS1iZXN0ZW10IGZhcmdlIiwKKyAgICAgICAgIlZlcnRpY2FsIGFsaWduIjogIlZlcnRpa2FsIGp1c3RlcmluZyIsCisgICAgICAgICJXaWR0aCI6ICJCcmVkZGUiLAorICAgICAgICAicGVyY2VudCI6ICJwcm9zZW50IgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9ubC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvbmwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q5MjFlZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvbmwuanMKQEAgLTAsMCArMSw5MiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJubCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGwgZm91ciBzaWRlcyI6ICJBbGxlIDQgemlqZGVuIiwKKyAgICAiQm9yZGVycyI6ICJSYW5kZW4iLAorICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAiQ2FwdGlvbiI6ICJPcG1lcmtpbmciLAorICAgICJDZWxsIFByb3BlcnRpZXMiOiAiQ2VsZWlnZW5zY2hhcHBlbiIsCisgICAgIkNlbGwgcHJvcGVydGllcyI6ICJDZWxlaWdlbnNjaGFwcGVuIiwKKyAgICAiQ29sdW1ucyI6ICJLb2xvbW1lbjoiLAorICAgICJEZWxldGUgY2VsbCI6ICJDZWwgdmVyd2lqZGVyZW4iLAorICAgICJEZWxldGUgY29sdW1uIjogIktvbG9tIHZlcndpamRlcmVuIiwKKyAgICAiRGVsZXRlIHJvdyI6ICJSaWogdmVyd2lqZGVyZW4iLAorICAgICJEZXNjcmlwdGlvbiI6ICJPbXNjaHJpanZpbmciLAorICAgICJGcmFtZXMiOiAiRnJhbWVzIiwKKyAgICAiSW5zZXJ0IGNlbGwgYWZ0ZXIiOiAiVm9lZyBjZWwgdG9lIGFjaHRlciIsCisgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICJWb2VnIGNlbCB0b2Ugdm9vciIsCisgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAiS29sb20gaW52b2VnZW4gYWNodGVyIiwKKyAgICAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiOiAiS29sb20gaW52b2VnZW4gdm9vciIsCisgICAgIkluc2VydCByb3cgYWZ0ZXIiOiAiUmlqIGludm9lZ2VuIG9uZGVyIiwKKyAgICAiSW5zZXJ0IHJvdyBiZWZvcmUiOiAiUmlqIGludm9lZ2VuIGJvdmVuIiwKKyAgICAiTWVyZ2UgY2VsbHMiOiAiQ2VsbGVuIHNhbWVudm9lZ2VuIiwKKyAgICAiTm8gcnVsZXMiOiAiR2VlbiByZWdlbHMiLAorICAgICJObyBzaWRlcyI6ICJHZWVuIHppamxpam5lbiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUGFkZGluZyI6ICJDZWxtYXJnZSIsCisgICAgIlBsZWFzZSBjbGljayBpbnRvIHNvbWUgY2VsbCI6ICJLbGlrIGluIGVlbiBjZWwgYS51LmIuIiwKKyAgICAiUm93IFByb3BlcnRpZXMiOiAiUmlqZWlnZW5zY2hhcHBlbiIsCisgICAgIlJvdyBwcm9wZXJ0aWVzIjogIlJpaiBlaWdlbnNjaGFwcGVuIiwKKyAgICAiUm93cyI6ICJSaWplbjoiLAorICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGFsbCByb3dzIGFuZCBjb2x1bW5zIjogIlJlZ2VscyB2ZXJzY2hpam5lbiB0dXNzZW4gYWxsZSByaWplbiBlbiBrb2xvbW1lbiIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gY29sdW1ucyBvbmx5IjogIlJlZ2VscyB2ZXJzY2hpam5lbiBlbmtlbCB0dXNzZW4gZGUga29sb21tZW4iLAorICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIHJvd3Mgb25seSI6ICJSZWdlbHMgdmVyc2NoaWpuZW4gZW5rZWwgdHVzc2VuIGRlIHJpamVuIiwKKyAgICAiU3BhY2luZyI6ICJtYXJnZSIsCisgICAgIlNwYWNpbmcgYW5kIHBhZGRpbmciOiAiQ2VsbWFyZ2UgZW4gYWZzdGFuZCB0dXNzZW4gY2VsbGVuIiwKKyAgICAiU3BsaXQgY29sdW1uIjogIktvbG9tIHNwbGl0c2VuIiwKKyAgICAiU3BsaXQgcm93IjogIlJpaiBzcGxpdHNlbiIsCisgICAgIlN1bW1hcnkiOiAiT3ZlcnppY2h0IiwKKyAgICAiVGFibGUgUHJvcGVydGllcyI6ICJUYWJlbCBlaWdlbnNjaGFwcGVuIiwKKyAgICAiVGFibGUgcHJvcGVydGllcyI6ICJUYWJlbCBlaWdlbnNjaGFwcGVuIiwKKyAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAiRW5rZWwgYWFuIGRlIG9uZGVya2FudCIsCisgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIkVua2VsIGFhbiBkZSBsaW5rZXJrYW50IiwKKyAgICAiVGhlIHJpZ2h0IGFuZCBsZWZ0IHNpZGVzIG9ubHkiOiAiRW5rZWwgYWFuIGRlIGxpbmtlciBlbiByZWNodGVya2FudCIsCisgICAgIlRoZSByaWdodC1oYW5kIHNpZGUgb25seSI6ICJFbmtlbCBhYW4gZGUgcmVjaHRlcmthbnQiLAorICAgICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSI6ICJFbmtlbCBhYW4gZGUgYm92ZW5lbiBvbmRlcmthbnQiLAorICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICJFbmtlbCBhYW4gZGUgYm92ZW5rYW50IiwKKyAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY2VsbCBpbiByb3cuIjogIlhpbmhhIGthbiBkZSBsYWF0c3RlIGNlbCBpbiBkZXplIHRhYmVsIG5pZXQgdmVyd2lqZGVyZW4uIiwKKyAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY29sdW1uIGluIHRhYmxlLiI6ICJYaW5oYSBrYW4gZGUgbGFhdHN0ZSBrb2xvbSBpbiBkZXplIHRhYmVsIG5pZXQgdmVyd2lqZGVyZW4uIiwKKyAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3Qgcm93IGluIHRhYmxlLiI6ICJYaW5oYSBrYW4gZGUgbGFhdHN0ZSByaWogaW4gZGV6ZSB0YWJlbCBuaWV0IHZlcndpamRlcmVuLiIsCisgICAgInBpeGVscyI6ICJwaXhlbHMiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBbGlnbiI6ICJVaXRsaWpuaW5nIiwKKyAgICAgICAgIkJhY2tncm91bmQiOiAiQWNodGVyZ3JvbmQiLAorICAgICAgICAiQmFzZWxpbmUiOiAiQmFzaXMiLAorICAgICAgICAiQm9yZGVyIjogIlJhbmQiLAorICAgICAgICAiQm90dG9tIjogIk9uZGVyIiwKKyAgICAgICAgIkNlbnRlciI6ICJDZW50cmVyZW4iLAorICAgICAgICAiQ2hhciI6ICJLYXJha3RlciIsCisgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICJHZWVuIHJhbmRlbiIsCisgICAgICAgICJDb2xvciI6ICJLbGV1ciIsCisgICAgICAgICJGRyBDb2xvciI6ICJWb29yZ3JvbmQiLAorICAgICAgICAiRmxvYXQiOiAiWndldmVuZCIsCisgICAgICAgICJIZWlnaHQiOiAiSG9vZ3RlIiwKKyAgICAgICAgIkhvdyBtYW55IGNvbHVtbnMgd291bGQgeW91IGxpa2UgdG8gbWVyZ2U/IjogIkhvZXZlZWwga29sb21tZW4gd2lsdCB1IHNhbWVudm9lZ2VuPyIsCisgICAgICAgICJIb3cgbWFueSByb3dzIHdvdWxkIHlvdSBsaWtlIHRvIG1lcmdlPyI6ICJIb2V2ZWVsIHJpamVuIHdpbHQgdSBzYW1lbnZvZWdlbj8iLAorICAgICAgICAiSW1hZ2UgVVJMIjogIkFmYmVlbGRpbmcgVVJMIiwKKyAgICAgICAgIkp1c3RpZnkiOiAiVWl0dnVsbGVuIiwKKyAgICAgICAgIkxheW91dCI6ICJPcG1hYWsiLAorICAgICAgICAiTGVmdCI6ICJMaW5rcyIsCisgICAgICAgICJNYXJnaW4iOiAiTWFyZ2UiLAorICAgICAgICAiTWlkZGxlIjogIk1pZGRlbiIsCisgICAgICAgICJOb25lIjogIkdlZW4iLAorICAgICAgICAiUmlnaHQiOiAiUmVjaHRzIiwKKyAgICAgICAgIlJ1bGVzIjogIlJlZ2VscyIsCisgICAgICAgICJTcGxpdCBjZWxsIjogIkNlbCBzcGxpdHNlbiIsCisgICAgICAgICJTdHlsZSBbQ1NTXSI6ICJDU1MgU3R5bGUiLAorICAgICAgICAiVGV4dCBhbGlnbiI6ICJUZXh0IHVpdGxpam5pbmciLAorICAgICAgICAiVG9wIjogIkJvdmVuIiwKKyAgICAgICAgIlVuc2V0IGNvbG9yIjogIldpcyBrbGV1ciIsCisgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICJWZXJ0aWthbGUgdWl0bGlqbmluZyIsCisgICAgICAgICJXaWR0aCI6ICJCcmVlZHRlIiwKKyAgICAgICAgInBlcmNlbnQiOiAicHJvY2VudCIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvcGwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL3BsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNDg2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL3BsLmpzCkBAIC0wLDAgKzEsOTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicGwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxsIGZvdXIgc2lkZXMiOiAiV3N6eXN0a2llIDQgc3Ryb255IiwKKyAgICAiQm9yZGVycyI6ICJSYW1raSIsCisgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICJDYXB0aW9uIjogIlBvZHBpcyIsCisgICAgIkNlbGwgUHJvcGVydGllcyI6ICJXxYJhxZtjaXdvxZtjaSBrb23Ds3JraSIsCisgICAgIkNlbGwgcHJvcGVydGllcyI6ICJXxYJhxZtjaXdvxZtjaSBrb23Ds3JraSIsCisgICAgIkRlbGV0ZSBjZWxsIjogIlVzdcWEIGtvbcOzcmvEmSIsCisgICAgIkRlbGV0ZSBjb2x1bW4iOiAiVXN1xYQga29sdW1uxJkiLAorICAgICJEZWxldGUgcm93IjogIlVzdcWEIHdpZXJzeiIsCisgICAgIkRlc2NyaXB0aW9uIjogIk9waXMiLAorICAgICJGcmFtZSBhbmQgYm9yZGVycyI6ICJPYnJhbW93YW5pYSIsCisgICAgIkZyYW1lcyI6ICJSYW1raSB6ZXduLiIsCisgICAgIkluc2VydCBjZWxsIGFmdGVyIjogIldzdGF3IGtvbcOzcmvEmSBwbyIsCisgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICJXc3RhdyBrb23Ds3JrxJkgcHJ6ZWQiLAorICAgICJJbnNlcnQgY29sdW1uIGFmdGVyIjogIldzdGF3IGtvbHVtbsSZIHBvIiwKKyAgICAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiOiAiV3N0YXcga29sdW1uxJkgcHJ6ZWQiLAorICAgICJJbnNlcnQgcm93IGFmdGVyIjogIldzdGF3IHdpZXJzeiBwbyIsCisgICAgIkluc2VydCByb3cgYmVmb3JlIjogIldzdGF3IHdpZXJzeiBwcnplZCIsCisgICAgIk1lcmdlIGNlbGxzIjogIlNjYWwga29tw7Nya2kiLAorICAgICJObyBydWxlcyI6ICJCZXogd2V3bsSZdHJ6eWNoIiwKKyAgICAiTm8gc2lkZXMiOiAiQmV6IHJhbWVrIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQYWRkaW5nIjogIldjacSZY2lhIiwKKyAgICAiUGxlYXNlIGNsaWNrIGludG8gc29tZSBjZWxsIjogIktsaWtuaWogdyBqYWvEhcWbIGtvbcOzcmvEmSIsCisgICAgIlJvdyBQcm9wZXJ0aWVzIjogIlfFgmHFm2Npd2/Fm2NpIHdpZXJzemEiLAorICAgICJSb3cgcHJvcGVydGllcyI6ICJXxYJhxZtjaXdvxZtjaSB3aWVyc3phIiwKKyAgICAiUm93cyI6ICJXaWVyc3p5OiIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAiTGluaWUgYsSZZMSFIHdpZG9jem5lIHBvbWnEmWR6eSBrb2x1bW5hbWkgaSB3aWVyc3phbWkiLAorICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGNvbHVtbnMgb25seSI6ICJMaW5pZSBixJlkxIUgd2lkb2N6bmUgdHlsa28gcG9tacSZZHp5IGtvbHVtbmFtaSIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogIkxpbmllIGLEmWTEhSB3aWRvY3puZSB0eWxrbyBwb21pxJlkenkgd2llcnN6YW1pIiwKKyAgICAiU3BhY2luZyI6ICJPZHN0xJlwIiwKKyAgICAiU3BhY2luZyBhbmQgcGFkZGluZyI6ICJTcGFjam93YW5pZSIsCisgICAgIlNwbGl0IGNvbHVtbiI6ICJSb3pkemllbCBrb2x1bW7EmSIsCisgICAgIlNwbGl0IHJvdyI6ICJSb3pkemllbCB3aWVyc3oiLAorICAgICJTdW1tYXJ5IjogIlBvZHN1bW93YW5pZSIsCisgICAgIlRhYmxlIFByb3BlcnRpZXMiOiAiV8WCYcWbY2l3b8WbY2kgdGFiZWxpIiwKKyAgICAiVGFibGUgcHJvcGVydGllcyI6ICJXxYJhxZtjaXdvxZtjaSB0YWJlbGkiLAorICAgICJUaGUgYm90dG9tIHNpZGUgb25seSI6ICJUeWxrbyBkb2xuYSBsaW5pYSIsCisgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIlR5bGtvIGxld2EgbGluaWEiLAorICAgICJUaGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb25seSI6ICJMZXdhIGkgcHJhd2EgbGluaWEiLAorICAgICJUaGUgcmlnaHQtaGFuZCBzaWRlIG9ubHkiOiAiVHlsa28gcHJhd2EgbGluaWEiLAorICAgICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSI6ICJHw7NybmEgaSBkb2xuYSBsaW5pYSIsCisgICAgIlRoZSB0b3Agc2lkZSBvbmx5IjogIlR5bGtvIGfDs3JuYSBsaW5pYSIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiI6ICJOaWUgbW/FvGVzeiBza2Fzb3dhxIcgb3N0YXRuaWVqIGtvbcOzcmtpIHcgd2llcnN6dS4iLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjb2x1bW4gaW4gdGFibGUuIjogIk5pZSBtb8W8ZXN6IHNrYXNvd2HEhyBvc3RhdG5pZWoga29sdW1ueSB3IHRhYmVsaS4iLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIk5pZSBtb8W8ZXN6IHNrYXNvd2HEhyBvc3RhdG5pZWdvIHdpZXJzemEgdyB0YWJlbGkuIiwKKyAgICAicGl4ZWxzIjogInBpa3NlbGkiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBbGlnbiI6ICJXeXLDs3duYW5pZSIsCisgICAgICAgICJCYWNrZ3JvdW5kIjogIlTFgm8iLAorICAgICAgICAiQmFzZWxpbmUiOiAiTGluaWEgYmF6b3dhIiwKKyAgICAgICAgIkJvcmRlciI6ICJSYW1rYSIsCisgICAgICAgICJCb3R0b20iOiAiRMOzxYIiLAorICAgICAgICAiQ1NTIFN0eWxlIjogIlN0eWwgQ1NTIiwKKyAgICAgICAgIkNlbnRlciI6ICLFmnJvZGVrIiwKKyAgICAgICAgIkNoYXIiOiAiWm5hayIsCisgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICJSYW1raSBza29sYXBzb3dhbmUiLAorICAgICAgICAiQ29sb3IiOiAiS29sb3IiLAorICAgICAgICAiRkcgQ29sb3IiOiAiS29sb3IgY3pjaW9uZWsiLAorICAgICAgICAiRmxvYXQiOiAiT3DFgnl3YW5pZSIsCisgICAgICAgICJIZWlnaHQiOiAiV3lzb2tvxZvEhyIsCisgICAgICAgICJIb3cgbWFueSBjb2x1bW5zIHdvdWxkIHlvdSBsaWtlIHRvIG1lcmdlPyI6ICJJbGUga29sdW1uIGNoY2VzeiBzY2FsacSHPyIsCisgICAgICAgICJIb3cgbWFueSByb3dzIHdvdWxkIHlvdSBsaWtlIHRvIG1lcmdlPyI6ICJJbGUgd2llcnN6eSBjaGNlc3ogc2NhbGnEhz8iLAorICAgICAgICAiSW1hZ2UgVVJMIjogIlVSTCBvYnJhemthIiwKKyAgICAgICAgIkp1c3RpZnkiOiAiV3lqdXN0dWoiLAorICAgICAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgICAgICJMZWZ0IjogIkxld28iLAorICAgICAgICAiTWFyZ2luIjogIk1hcmdpbmVzIiwKKyAgICAgICAgIk1pZGRsZSI6ICLFmnJvZGVrIiwKKyAgICAgICAgIk5vbmUiOiAiQnJhayIsCisgICAgICAgICJSaWdodCI6ICJQcmF3byIsCisgICAgICAgICJSdWxlcyI6ICJMaW5pZSB3ZXduLiIsCisgICAgICAgICJTcGxpdCBjZWxsIjogIlJvemR6aWVsIGtvbcOzcmvEmSIsCisgICAgICAgICJTdHlsZSBbQ1NTXSI6ICJTdHlsIFtDU1NdIiwKKyAgICAgICAgIlRleHQgYWxpZ24iOiAiV3lyLiB3IHBvemlvbWllIiwKKyAgICAgICAgIlRvcCI6ICJHw7NyYSIsCisgICAgICAgICJVbnNldCBjb2xvciI6ICJVc3XFhCBrb2xvciIsCisgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICJXeXIuIHcgcGlvbmllIiwKKyAgICAgICAgIldpZHRoIjogIlN6ZXJva2/Fm8SHIiwKKyAgICAgICAgInBlcmNlbnQiOiAiJSIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MzIxYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsOTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxsIGZvdXIgc2lkZXMiOiAidG9kb3Mgb3MgcXVhdHJvIGxhZG9zIiwKKyAgICAiQm9yZGVycyI6ICJCb3JkYXMiLAorICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICJDYXB0aW9uIjogIkNhcHRhw6fDo28iLAorICAgICJDZWxsIFByb3BlcnRpZXMiOiAiUHJvcHJpZWRhZGVzIGRhIGPDqWx1bGEiLAorICAgICJDZWxscyBkb3duIjogIkPDqWx1bGFzIHBhcmEgYmFpeG8iLAorICAgICJDZWxscyB0byB0aGUgcmlnaHQsIGFuZCI6ICJDw6lsdWxhcyBwYXJhIGRpcmVpdGEsIGUiLAorICAgICJDb2x1bW5zIjogIkNvbHVuYXMiLAorICAgICJEZWxldGUgY2VsbCI6ICJBcGFnYXIgY8OpbHVsYSIsCisgICAgIkRlbGV0ZSBjb2x1bW4iOiAiQXBhZ2FyIGNvbHVuYSIsCisgICAgIkRlbGV0ZSByb3ciOiAiQXBhZ2FyIGxpbmhhIiwKKyAgICAiRGVzY3JpcHRpb24iOiAiRGVzY3Jpw6fDo28iLAorICAgICJGcmFtZSBhbmQgYm9yZGVycyI6ICJGcmFtZXMgZSBib3JkYXMiLAorICAgICJGcmFtZXMiOiAiRnJhbWVzIiwKKyAgICAiSW5zZXJ0IGNlbGwgYWZ0ZXIiOiAiSW5zZXJpciBjw6lsdWxhIGFudGVzIiwKKyAgICAiSW5zZXJ0IGNlbGwgYmVmb3JlIjogIkluc2VyaXIgY8OpbHVsYSBkZXBvaXMiLAorICAgICJJbnNlcnQgY29sdW1uIGFmdGVyIjogIkluc2VyaXIgY29sdW5hIGFudGVzIiwKKyAgICAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiOiAiSW5zZXJpciBjb2x1bmEgZGVwb2lzIiwKKyAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICJJbnNlcmlyIGxpbmhhIGRlcG9pcyIsCisgICAgIkluc2VydCByb3cgYmVmb3JlIjogIkluc2VyaXIgbGluaGEgYW50ZXMiLAorICAgICJNZXJnZSBDZWxscyI6ICJNZXNjbGFyIEPDqWx1bGFzIiwKKyAgICAiTWVyZ2UgY3VycmVudCBjZWxsIHdpdGg6IjogIk1lc2NsYXIgY8OpbHVsYSBhdHVhbCBjb206IiwKKyAgICAiTm8gcnVsZXMiOiAiU2VtIHJlZ3JhcyIsCisgICAgIk5vIHNpZGVzIjogIlNlbSBsYWRvcyIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUGFkZGluZyI6ICJFc3Bhw6dvIGludGVybm8iLAorICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiUG9yIGZhdm9yLCBjbGlxdWUgZW0gYWxndW1hIGPDqWx1bGEiLAorICAgICJSb3cgUHJvcGVydGllcyI6ICJQcm9wcmllZGFkZXMgZGEgTGluaGEiLAorICAgICJSb3dzIjogIkxpbmhhcyIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAiQXMgUmVncmFzIGFwYXJlY2VyYW0gZW50cmUgdG9kYXMgYXMgbGluaGFzIGUgY29sdW5hcyIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gY29sdW1ucyBvbmx5IjogIlJlZ3JhcyBhcGFyZWNlcmFtIHNvbWVudGUgbmFzIGNvbHVuYXMiLAorICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIHJvd3Mgb25seSI6ICJSZWdyYXMgYXBhcmVjZXJhbSBzb21lbnRlIG5hcyBsaW5oYXMiLAorICAgICJTcGFjaW5nIjogIkVzcGHDp2FtZW50byIsCisgICAgIlNwYWNpbmcgYW5kIHBhZGRpbmciOiAiRXNwYcOnYW1lbnRvcyIsCisgICAgIlNwbGl0IGNvbHVtbiI6ICJTZXBhcmFyIGNvbHVuYXMiLAorICAgICJTcGxpdCByb3ciOiAiU2VwYXJhciBsaW5oYXMiLAorICAgICJTdW1tYXJ5IjogIlN1bcOhcmlvIiwKKyAgICAiVGFibGUgUHJvcGVydGllcyI6ICJQcm9wcmllZGFkZXMgZGEgVGFiZWxhIiwKKyAgICAiVGhlIGJvdHRvbSBzaWRlIG9ubHkiOiAiU29tZW50ZSBuYSBwYXJ0ZSBpbmZlcmlvciIsCisgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIlNvbWVudGUgbmEgcGFydGUgZXNxdWVyZGEiLAorICAgICJUaGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb25seSI6ICJTb21lbnRlIG5hcyBwYXJ0ZSBkaXJlaXRhIGUgZXNxdWVyZGEiLAorICAgICJUaGUgcmlnaHQtaGFuZCBzaWRlIG9ubHkiOiAiU29tZW50ZSBuYSBwYXJ0ZSBkaXJlaXRhIiwKKyAgICAiVGhlIHRvcCBhbmQgYm90dG9tIHNpZGVzIG9ubHkiOiAiU29tZW50ZSBuYSBwYXJ0ZSBpbmZlcmlvciBlIHN1cGVyaW9yIiwKKyAgICAiVGhlIHRvcCBzaWRlIG9ubHkiOiAiU29tZW50ZSBuYSBwYXJ0ZSBzdXBlcmlvciIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiI6ICJYaW5oYSByZWN1c2Etc2UgYSBhcGFnYXIgYSDDumx0aW1hIGPDqWx1bGEgbmEgbGluaGEiLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjb2x1bW4gaW4gdGFibGUuIjogIlhpbmhhIHJlY3VzYS1zZSBhIGFwYWdhciBhIMO6bHRpbWEgY29sdW5hIGRhIHRhYmVsYSIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iOiAiWGluaGEgcmVjdXNhLXNlIGEgYXBhZ2FyIGEgw7psdGltYSBsaW5oYSBkYSB0YWJlbGEiLAorICAgICJwaXhlbHMiOiAiUGl4ZWwiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBbGlnbiI6ICJBbGluaGFtZW50byIsCisgICAgICAgICJCYWNrZ3JvdW5kIjogIkZ1bmRvIiwKKyAgICAgICAgIkJhc2VsaW5lIjogIkxpbmhhIGRlIGJhc2UiLAorICAgICAgICAiQm9yZGVyIjogIkJvcmRhciIsCisgICAgICAgICJCb3R0b20iOiAiQm90w6NvIiwKKyAgICAgICAgIkNTUyBTdHlsZSI6ICJFc3RpbG8gKENTUykiLAorICAgICAgICAiQ2VudGVyIjogIkNlbnRyYWxpemFyIiwKKyAgICAgICAgIkNoYXIiOiAiQ2FyYWN0ZXIiLAorICAgICAgICAiQ29sbGFwc2VkIGJvcmRlcnMiOiAiQm9yZGFzIGZlY2hhZGFzIiwKKyAgICAgICAgIkNvbG9yIjogIkNvcmVzIiwKKyAgICAgICAgIkZHIENvbG9yIjogIkNvciBkZSBwcmltZWlybyBwbGFubyIsCisgICAgICAgICJGbG9hdCI6ICJGbHV0dWFudGUiLAorICAgICAgICAiSGVpZ2h0IjogIkFsdHVyYSIsCisgICAgICAgICJIb3cgbWFueSBjb2x1bW5zIHdvdWxkIHlvdSBsaWtlIHRvIG1lcmdlPyI6ICJRdWFudGFzIGNvbHVuYXMgdm9jw6ogZGVzZWphIG1lc2NsYXI/IiwKKyAgICAgICAgIkhvdyBtYW55IHJvd3Mgd291bGQgeW91IGxpa2UgdG8gbWVyZ2U/IjogIlF1YW50YXMgbGluaGFzIHZvY8OqIGRlc2VqYSBtZXNjbGFyPyIsCisgICAgICAgICJJbWFnZSBVUkwiOiAiVVJMIGRhIGltYWdlbSIsCisgICAgICAgICJKdXN0aWZ5IjogIkp1c3RpZmljYWRvIiwKKyAgICAgICAgIkxheW91dCI6ICJMYXlvdXQiLAorICAgICAgICAiTGVmdCI6ICJFc3F1ZXJkYSIsCisgICAgICAgICJNYXJnaW4iOiAiTWFyZ2VtIiwKKyAgICAgICAgIk1pZGRsZSI6ICJNZWlvIiwKKyAgICAgICAgIk5vbmUiOiAiTmVuaHVtIiwKKyAgICAgICAgIlJpZ2h0IjogIkRpcmVpdGEiLAorICAgICAgICAiUnVsZXMiOiAiUmVncmFzIiwKKyAgICAgICAgIlNwbGl0IGNlbGwiOiAiU2VwYXJhciBjw6lsdWxhIiwKKyAgICAgICAgIlN0eWxlIFtDU1NdIjogIkVzdGlsbyBbQ1NTXSIsCisgICAgICAgICJUZXh0IGFsaWduIjogIkFsaW5oYW1lbnRvIGRvIHRleHRvIiwKKyAgICAgICAgIlRvcCI6ICJUb3BvIiwKKyAgICAgICAgIlVuc2V0IGNvbG9yIjogIkNvciBuw6NvIGRlZmluaWRhIiwKKyAgICAgICAgIlZlcnRpY2FsIGFsaWduIjogIkFsaW5oYW1lbnRvIHZlcnRpY2FsIiwKKyAgICAgICAgIldpZHRoIjogIkxhcmd1cmEiLAorICAgICAgICAicGVyY2VudCI6ICIlIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9yby5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvcm8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc5MWFhZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvcm8uanMKQEAgLTAsMCArMSw5MCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJybyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGwgZm91ciBzaWRlcyI6ICJUb2F0ZSBwxINyxaNpbGUiLAorICAgICJCb3JkZXJzIjogIkNoZW5hcmUiLAorICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKKyAgICAiQ2FwdGlvbiI6ICJUaXRsdSBkZSB0YWJlbCIsCisgICAgIkNlbGwgUHJvcGVydGllcyI6ICJQcm9wcmlldMSDxaNpbGUgY2VsdWxlaSIsCisgICAgIkNlbGwgcHJvcGVydGllcyI6ICJQcm9wcmlldMSDxaNpbGUgY2VsdWxlaSIsCisgICAgIkRlbGV0ZSBjZWxsIjogIsWedGVyZ2UgY2VsdWxhIiwKKyAgICAiRGVsZXRlIGNvbHVtbiI6ICLFnnRlcmdlIGNvbG9hbmEiLAorICAgICJEZWxldGUgcm93IjogIsWedGVyZ2UgcsOibmR1bCIsCisgICAgIkRlc2NyaXB0aW9uIjogIkRlc2NyaWVyZSIsCisgICAgIkZyYW1lcyI6ICJDaGVuYXJlIiwKKyAgICAiSW5zZXJ0IGNlbGwgYWZ0ZXIiOiAiSW5zZXJlYXrEgyBvIGNlbHVsxIMgbGEgZHJlYXB0YSIsCisgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICJJbnNlcmVhesSDIG8gY2VsdWzEgyBsYSBzdMOibmdhIiwKKyAgICAiSW5zZXJ0IGNvbHVtbiBhZnRlciI6ICJJbnNlcmVhesSDIG8gY29sb2FuxIMgbGEgZHJlYXB0YSIsCisgICAgIkluc2VydCBjb2x1bW4gYmVmb3JlIjogIkluc2VyZWF6xIMgbyBjb2xvYW7EgyBsYSBzdMOibmdhIiwKKyAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICJJbnNlcmVhesSDIHVuIHLDom5kIGR1cMSDIiwKKyAgICAiSW5zZXJ0IHJvdyBiZWZvcmUiOiAiSW5zZXJlYXrEgyB1biByw6JuZCDDrm5haW50ZSIsCisgICAgIk1lcmdlIGNlbGxzIjogIlVuZcWfdGUgY2VsdWxlbGUiLAorICAgICJObyBydWxlcyI6ICJGxINyxIMgbGluaWkiLAorICAgICJObyBzaWRlcyI6ICJGxINyxIMgcMSDcsWjaSIsCisgICAgIk9LIjogIkFjY2VwdMSDIiwKKyAgICAiUGFkZGluZyI6ICJTcGHFo2llcmUiLAorICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAiVsSDIHJvZyBzxIMgZGHFo2kgY2xpY2sgw65udHItbyBjZWx1bMSDIiwKKyAgICAiUm93IFByb3BlcnRpZXMiOiAiUHJvcHJpZXTEg8WjaWxlIGxpbmllaSIsCisgICAgIlJvdyBwcm9wZXJ0aWVzIjogIlByb3ByaWV0xIPFo2lsZSByw6JuZHVsdWkiLAorICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGFsbCByb3dzIGFuZCBjb2x1bW5zIjogIlZvciBhcMSDcmVhIGxpbmlpIMOubnRyZSB0b2F0ZSByw6JuZHVyaWxlIMWfaSBjb2xvYW5lbGUiLAorICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGNvbHVtbnMgb25seSI6ICJWb3IgYXDEg3JlYSBkb2FyIGxpbmlpIHZlcnRpY2FsZSIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogIlZvciBhcMSDcmVhIGRvYXIgbGluaWkgb3Jpem9udGFsZSIsCisgICAgIlNwYWNpbmciOiAiw45udHJlIGNlbHVsZSIsCisgICAgIlNwYWNpbmcgYW5kIHBhZGRpbmciOiAiU3BhxaNpZXJlYSIsCisgICAgIlNwbGl0IGNvbHVtbiI6ICLDjm1wYXJ0ZSBjb2xvYW5hIiwKKyAgICAiU3BsaXQgcm93IjogIsOObXBhcnRlIHLDom5kdWwiLAorICAgICJTdW1tYXJ5IjogIlN1bWFyIiwKKyAgICAiVGFibGUgUHJvcGVydGllcyI6ICJQcm9wcmlldMSDxaNpbGUgdGFiZWxlaSIsCisgICAgIlRhYmxlIHByb3BlcnRpZXMiOiAiUHJvcHJpZXTEg8WjaWxlIHRhYmVsZWkiLAorICAgICJUaGUgYm90dG9tIHNpZGUgb25seSI6ICJEb2FyIHBhcnRlYSBkZSBqb3MiLAorICAgICJUaGUgbGVmdC1oYW5kIHNpZGUgb25seSI6ICJEb2FyIHBhcnRlYSBkaW4gc3TDom5nYSIsCisgICAgIlRoZSByaWdodCBhbmQgbGVmdCBzaWRlcyBvbmx5IjogIlBhcnRlYSBkaW4gc3TDom5nYSDFn2kgY2VhIGRpbiBkcmVhcHRhIiwKKyAgICAiVGhlIHJpZ2h0LWhhbmQgc2lkZSBvbmx5IjogIkRvYXIgcGFydGVhIGRpbiBkcmVhcHRhIiwKKyAgICAiVGhlIHRvcCBhbmQgYm90dG9tIHNpZGVzIG9ubHkiOiAiUGFydGVhIGRlIHN1cyBzaSBjZWEgZGUgam9zIiwKKyAgICAiVGhlIHRvcCBzaWRlIG9ubHkiOiAiRG9hciBwYXJ0ZWEgZGUgc3VzIiwKKyAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY2VsbCBpbiByb3cuIjogIlhpbmhhIHJlZnV6xIMgY3UgbGHFn2l0YXRlIHPEgyDFn3RlYXJnxIMgdWx0aW1hIGNlbHVsxIMgZGluIHLDom5kLiIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNvbHVtbiBpbiB0YWJsZS4iOiAiWGluaGEgcmVmdXrEgyBjdSBsYcWfaXRhdGUgc8SDIMWfdGVhcmfEgyB1bHRpbWEgY29sb2FtxIMgZGluIHRhYmVsYS4iLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIlhpbmhhIHJlZnV6xIMgY3UgbGHFn2l0YXRlIHPEgyDFn3RlYXJnxIMgdWx0aW11bCByw6JuZCBkaW4gdGFiZWxhLiIsCisgICAgInBpeGVscyI6ICJwaXhlbGkiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBbGlnbiI6ICJBbGluaWVyZSIsCisgICAgICAgICJCYWNrZ3JvdW5kIjogIkZ1bmRhbCIsCisgICAgICAgICJCYXNlbGluZSI6ICJCYXNlbGluZSIsCisgICAgICAgICJCb3JkZXIiOiAiQ2hlbmFyIiwKKyAgICAgICAgIkJvdHRvbSI6ICJKb3MiLAorICAgICAgICAiQ2VudGVyIjogIkNlbnRydSIsCisgICAgICAgICJDaGFyIjogIkNhcmFjdGVyIiwKKyAgICAgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIkNoZW5hcmUgYXNpbWlsYXRlIiwKKyAgICAgICAgIkNvbG9yIjogIkN1bG9hcmUiLAorICAgICAgICAiRkcgQ29sb3IiOiAiQ3Vsb2FyZSB0ZXh0IiwKKyAgICAgICAgIkZsb2F0IjogIlBvemnFo2llIiwKKyAgICAgICAgIkhlaWdodCI6ICLDjm7Eg2zFo2ltZWEiLAorICAgICAgICAiSG93IG1hbnkgY29sdW1ucyB3b3VsZCB5b3UgbGlrZSB0byBtZXJnZT8iOiAiQ8OidGUgY29sb2FuZSB2cmVpIHPEgyB1bmXFn3RpPyIsCisgICAgICAgICJIb3cgbWFueSByb3dzIHdvdWxkIHlvdSBsaWtlIHRvIG1lcmdlPyI6ICJDw6J0ZSBsaW5paSB2cmVpIHPEgyB1bmXFn3RpPyIsCisgICAgICAgICJJbWFnZSBVUkwiOiAiVVJMLXVsIGltYWdpbmlpIiwKKyAgICAgICAgIkp1c3RpZnkiOiAiSnVzdGlmeSIsCisgICAgICAgICJMYXlvdXQiOiAiQXJhbmphbWVudCIsCisgICAgICAgICJMZWZ0IjogIlN0w6JuZ2EiLAorICAgICAgICAiTWFyZ2luIjogIk1hcmdpbmUiLAorICAgICAgICAiTWlkZGxlIjogIk1pamxvYyIsCisgICAgICAgICJOb25lIjogIk5pbWljIiwKKyAgICAgICAgIlJpZ2h0IjogIkRyZWFwdGEiLAorICAgICAgICAiUnVsZXMiOiAiTGluaWkiLAorICAgICAgICAiU3BsaXQgY2VsbCI6ICLDjm1wYXJ0ZSBjZWx1bGEiLAorICAgICAgICAiU3R5bGUgW0NTU10iOiAiU3RpbCBbQ1NTXSIsCisgICAgICAgICJUZXh0IGFsaWduIjogIkFsaW5pZXJlIiwKKyAgICAgICAgIlRvcCI6ICJTdXMiLAorICAgICAgICAiVW5zZXQgY29sb3IiOiAiRGV6YWN0aXZlYXrEgyBjdWxvYXJlYSIsCisgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICJBbGluaWVyZSBwZSB2ZXJ0aWNhbMSDIiwKKyAgICAgICAgIldpZHRoIjogIkzEg8WjaW1lIiwKKyAgICAgICAgInBlcmNlbnQiOiAicHJvY2VudGUiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9ydS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmI1MDUyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9ydS5qcwpAQCAtMCwwICsxLDkxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJ1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsbCBmb3VyIHNpZGVzIjogItCS0YHQtSA0INGB0YLQvtGA0L7QvdGLIiwKKyAgICAiQm9yZGVycyI6ICLQoNCw0LzQutC4IiwKKyAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgIkNhcHRpb24iOiAi0JfQsNCz0L7Qu9C+0LLQvtC6IiwKKyAgICAiQ2VsbCBQcm9wZXJ0aWVzIjogItCh0LLQvtC50YHRgtCy0LAg0Y/Rh9C10LXQuiIsCisgICAgIkNlbGwgcHJvcGVydGllcyI6ICLQodCy0L7QudGB0YLQstCwINGP0YfQtdC10LoiLAorICAgICJEZWxldGUgY2VsbCI6ICLQo9C00LDQu9C40YLRjCDRj9GH0LXQudC60YMiLAorICAgICJEZWxldGUgY29sdW1uIjogItCj0LTQsNC70LjRgtGMINGB0YLQvtC70LHQtdGGIiwKKyAgICAiRGVsZXRlIHJvdyI6ICLQo9C00LDQu9C40YLRjCDRgdGC0YDQvtC60YMiLAorICAgICJEZXNjcmlwdGlvbiI6ICLQntC/0LjRgdCw0L3QuNC1IiwKKyAgICAiRnJhbWVzIjogItCk0YDQtdC50LzRiyIsCisgICAgIkluc2VydCBjZWxsIGFmdGVyIjogItCS0YHRgtCw0LLQuNGC0Ywg0Y/Rh9C10LnQutGDINC/0L7RgdC70LUiLAorICAgICJJbnNlcnQgY2VsbCBiZWZvcmUiOiAi0JLRgdGC0LDQstC40YLRjCDRj9GH0LXQudC60YMg0LTQviIsCisgICAgIkluc2VydCBjb2x1bW4gYWZ0ZXIiOiAi0JLRgdGC0LDQstC40YLRjCDRgdGC0L7Qu9Cx0LXRhiDQv9C+0YHQu9C1IiwKKyAgICAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiOiAi0JLRgdGC0LDQstC40YLRjCDRgdGC0L7Qu9Cx0LXRhiDQtNC+IiwKKyAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICLQktGB0YLQsNCy0LjRgtGMINGB0YLRgNC+0LrRgyDQv9C+0YHQu9C1IiwKKyAgICAiSW5zZXJ0IHJvdyBiZWZvcmUiOiAi0JLRgdGC0LDQstC40YLRjCDRgdGC0YDQvtC60YMg0LTQviIsCisgICAgIk1lcmdlIGNlbGxzIjogItCe0LHRitC10LTQuNC90LjRgtGMINGP0YfQtdC50LrQuCIsCisgICAgIk5vIHJ1bGVzIjogItCd0LXRgiDQu9C40L3QtdC50LrQuCIsCisgICAgIk5vIHNpZGVzIjogItCd0LXRgiDRgdGC0L7RgNC+0L0iLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBhZGRpbmciOiAi0J/QvtC70Y8iLAorICAgICJQbGVhc2UgY2xpY2sgaW50byBzb21lIGNlbGwiOiAi0J/QvtC20LDQu9GD0LnRgdGC0LAg0YnQtdC70LrQvdC40YLQtSDQsiDQvdC10LrQvtGC0L7RgNGL0LUg0Y/Rh9C10LnQutC4IiwKKyAgICAiUm93IFByb3BlcnRpZXMiOiAi0KHQstC+0LnRgdGC0LLQsCDRgdGC0YDQvtC6IiwKKyAgICAiUm93IHByb3BlcnRpZXMiOiAi0KHQstC+0LnRgdGC0LLQsCDRgdGC0YDQvtC60LgiLAorICAgICJSb3dzIjogItCh0YLRgNC+0LrQuCIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAi0JvQuNC90LXQudC60Lgg0L/QvtGP0LLRj9GC0YHRjyDQvNC10LbQtNGDINCy0YHQtdC80Lgg0YHRgtGA0L7QutCw0LzQuCDQuCDRgdGC0L7Qu9Cx0YbQsNC80LgiLAorICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGNvbHVtbnMgb25seSI6ICLQm9C40L3QtdC50LrQuCDQv9C+0Y/QstGP0YLRgdGPINGC0L7Qu9GM0LrQviDQvNC10LbQtNGDINGB0YLQvtC70LHRhtCw0LzQuCIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogItCb0LjQvdC10LnQutC4INC/0L7Rj9Cy0Y/RgtGB0Y8g0YLQvtC70YzQutC+INC80LXQttC00YMg0YHRgtGA0L7QutCw0LzQuCIsCisgICAgIlNwYWNpbmciOiAi0J7RgtGB0YLRg9C/0YsiLAorICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogItCf0L7Qu9GPINC4INC+0YLRgdGC0YPQv9GLIiwKKyAgICAiU3BsaXQgY29sdW1uIjogItCg0LDQt9C00LXQu9C40YLRjCDRgdGC0L7Qu9Cx0LXRhiIsCisgICAgIlNwbGl0IHJvdyI6ICLQoNCw0LfQtNC10LvQuNGC0Ywg0YHRgtGA0L7QutGDIiwKKyAgICAiU3VtbWFyeSI6ICLQodCy0L7QtNC60LAiLAorICAgICJUYWJsZSBQcm9wZXJ0aWVzIjogItCh0LLQvtC50YHRgtCy0LAg0YLQsNCx0LvQuNGGIiwKKyAgICAiVGFibGUgcHJvcGVydGllcyI6ICLQodCy0L7QudGB0YLQstCwINGC0LDQsdC70LjRhiIsCisgICAgIlRoZSBib3R0b20gc2lkZSBvbmx5IjogItCi0L7Qu9GM0LrQviDQvdC40LbQvdC40Lkg0LrRgNCw0LkiLAorICAgICJUaGUgbGVmdC1oYW5kIHNpZGUgb25seSI6ICLQotC+0LvRjNC60L4g0LvQtdCy0YvQuSDQutGA0LDQuSIsCisgICAgIlRoZSByaWdodCBhbmQgbGVmdCBzaWRlcyBvbmx5IjogItCi0L7Qu9GM0LrQviDQu9C10LLRi9C5INC4INC/0YDQsNCy0YvQuSDQutGA0LDQuSIsCisgICAgIlRoZSByaWdodC1oYW5kIHNpZGUgb25seSI6ICLQotC+0LvRjNC60L4g0L/RgNCw0LLRi9C5INC60YDQsNC5IiwKKyAgICAiVGhlIHRvcCBhbmQgYm90dG9tIHNpZGVzIG9ubHkiOiAi0KLQvtC70YzQutC+INCy0LXRgNGF0L3QuNC5INC4INC90LjQttC90LjQuSDQutGA0LDQuSIsCisgICAgIlRoZSB0b3Agc2lkZSBvbmx5IjogItCi0L7Qu9GM0LrQviDQstC10YDRhdC90LjQuSDQutGA0LDQuSIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IGNlbGwgaW4gcm93LiI6ICJYaW5oYSDQvtGC0LrQsNC30LDQu9Cw0YHRjCDRg9C00LDQu9GP0YLRjCDQv9C+0YHQu9C10LTQvdGO0Y4g0Y/Rh9C10LnQutGDINCyINGB0YLRgNC+0LrQtS4iLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjb2x1bW4gaW4gdGFibGUuIjogIlhpbmhhINC+0YLQutCw0LfQsNC70LDRgdGMINGD0LTQsNC70Y/RgtGMINC/0L7RgdC70LXQtNC90LjQuSDRgdGC0L7Qu9Cx0LXRhiDQsiDRgtCw0LHQu9C40YbQtS4iLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIlhpbmhhINC+0YLQutCw0LfQsNC70LDRgdGMINGD0LTQsNC70Y/RgtGMINC/0L7RgdC70LXQtNC90Y7RjiDRgdGC0YDQvtC60YMg0LIg0YLQsNCx0LvQuNGG0LUuIiwKKyAgICAicGl4ZWxzIjogItC/0LjQutGB0LXQu9C10LkiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBbGlnbiI6ICLQktGL0YDQsNCy0L3QuNCy0LDQvdC40LUiLAorICAgICAgICAiQmFja2dyb3VuZCI6ICLQpNC+0L0iLAorICAgICAgICAiQmFzZWxpbmUiOiAi0JHQsNC30L7QstCw0Y8g0LvQuNC90LjRjyIsCisgICAgICAgICJCb3JkZXIiOiAi0KDQsNC80LrQsCIsCisgICAgICAgICJCb3R0b20iOiAi0J3QuNC3IiwKKyAgICAgICAgIkNlbnRlciI6ICLQptC10L3RgtGAIiwKKyAgICAgICAgIkNoYXIiOiAi0KHQuNC80LLQvtC7IiwKKyAgICAgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogItCd0LDQutC70LDQtNGL0LLQsNGO0YnQuNC10YHRjyDRgNCw0LzQutC4IiwKKyAgICAgICAgIkNvbG9yIjogItCm0LLQtdGCIiwKKyAgICAgICAgIkZHIENvbG9yIjogItCm0LLQtdGCINC/0LXRgNC10LTQvdC10LPQviDQv9C70LDQvdCwIiwKKyAgICAgICAgIkZsb2F0IjogItCe0LHRgtC10LrQsNC90LjQtSIsCisgICAgICAgICJIZWlnaHQiOiAi0JLRi9GB0L7RgtCwIiwKKyAgICAgICAgIkhvdyBtYW55IGNvbHVtbnMgd291bGQgeW91IGxpa2UgdG8gbWVyZ2U/IjogItCh0LrQvtC70YzQutC+INGB0YLQvtC70LHRhtC+0LIg0LLRiyDRhdC+0YLQuNGC0LUg0L7QsdGK0LXQtNC40L3QuNGC0Yw/IiwKKyAgICAgICAgIkhvdyBtYW55IHJvd3Mgd291bGQgeW91IGxpa2UgdG8gbWVyZ2U/IjogItCh0LrQvtC70YzQutC+INGB0YLRgNC+0Log0LLRiyDRhdC+0YLQuNGC0LUg0L7QsdGK0LXQtNC40L3QuNGC0Yw/IiwKKyAgICAgICAgIkltYWdlIFVSTCI6ICJVUkwg0LrQsNGA0YLQuNC90LrQuCIsCisgICAgICAgICJKdXN0aWZ5IjogItCf0L4g0L/RgNCw0LLQvtC80YMg0LrRgNCw0Y4iLAorICAgICAgICAiTGF5b3V0IjogItCg0LDRgdC60LvQsNC00LrQsCIsCisgICAgICAgICJMZWZ0IjogItCb0LXQstC+IiwKKyAgICAgICAgIk1hcmdpbiI6ICLQntGC0YHRgtGD0L8iLAorICAgICAgICAiTWlkZGxlIjogItCh0LXRgNC10LTQuNC90LAiLAorICAgICAgICAiTm9uZSI6ICLQndC40YfQtdCz0L4iLAorICAgICAgICAiUmlnaHQiOiAi0J/RgNCw0LLQviIsCisgICAgICAgICJSdWxlcyI6ICLQm9C40L3QtdC50LrQuCIsCisgICAgICAgICJTcGxpdCBjZWxsIjogItCg0LDQt9C00LXQu9C40YLRjCDRj9GH0LXQudC60YMiLAorICAgICAgICAiU3R5bGUgW0NTU10iOiAi0KHRgtC40LvRjCBbQ1NTXSIsCisgICAgICAgICJUZXh0IGFsaWduIjogItCS0YvRgNCw0LLQvdC40LLQsNC90LjQtSDRgtC10YHRgtCwIiwKKyAgICAgICAgIlRvcCI6ICLQktC10YDRhSIsCisgICAgICAgICJVbnNldCBjb2xvciI6ICLQntGC0LzQtdC90LjRgtGMINGG0LLQtdGCIiwKKyAgICAgICAgIlZlcnRpY2FsIGFsaWduIjogItCS0LXRgNGC0LjQutCw0LvRjNC90L7QtSAg0LLRi9GA0LDQstC90LjQstCw0L3QuNC1IiwKKyAgICAgICAgIldpZHRoIjogItCo0LjRgNC40L3QsCIsCisgICAgICAgICJwZXJjZW50IjogItC/0YDQvtGG0LXQvdGC0L7QsiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvc2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL3NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMmUwNDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL3NoLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIiwKKyAgICAiT0siOiAiT0siLAorICAgICJSb3dzIjogIlJlZG92aSIsCisgICAgIlNwYWNpbmciOiAiUmF6bWFrIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL3NpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9zaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njc0ODkyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9zaS5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiLAorICAgICJPSyI6ICJWIHJlZHUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvc3IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL3NyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZmIxYmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL3NyLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IiwKKyAgICAiT0siOiAiT0siLAorICAgICJSb3dzIjogItCg0LXQtNC+0LLQuCIsCisgICAgIlNwYWNpbmciOiAi0KDQsNC30LzQsNC6IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL3N2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9zdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYjMyMGVjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy9zdi5qcwpAQCAtMCwwICsxLDkxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInN2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsbCBmb3VyIHNpZGVzIjogIkFsbGEgZnlyYSBzaWRvciIsCisgICAgIkJvcmRlcnMiOiAiS2FudGxpbmplciIsCisgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICJDYXB0aW9uIjogIsOWdmVyc2tyaWZ0IiwKKyAgICAiQ2VsbCBQcm9wZXJ0aWVzIjogIkNlbGxlZ2Vuc2thcGVyIiwKKyAgICAiQ2VsbCBwcm9wZXJ0aWVzIjogIkVnZW5za2FwZXIgZm9yIGNlbGwiLAorICAgICJEZWxldGUgY2VsbCI6ICJSYWRlcmEgY2VsbCIsCisgICAgIkRlbGV0ZSBjb2x1bW4iOiAiUmFkZXJhIGtvbHVtbiIsCisgICAgIkRlbGV0ZSByb3ciOiAiUmFkZXJhIHJhZCIsCisgICAgIkRlc2NyaXB0aW9uIjogIkJlc2tyaXZuaW5nIiwKKyAgICAiRnJhbWVzIjogInJhbWFyIiwKKyAgICAiSW5zZXJ0IGNlbGwgYWZ0ZXIiOiAiSW5mb2dhIGNlbGwgZWZ0ZXIiLAorICAgICJJbnNlcnQgY2VsbCBiZWZvcmUiOiAiSW5mb2dhIGNlbGwgZsO2cmUiLAorICAgICJJbnNlcnQgY29sdW1uIGFmdGVyIjogIkluZm9nYSBrb2x1bW4gZWZ0ZXIiLAorICAgICJJbnNlcnQgY29sdW1uIGJlZm9yZSI6ICJJbmZvZ2Ega29sdW1uIGbDtnJlIiwKKyAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICJJbmZvZ2EgcmFkIGVmdGVyIiwKKyAgICAiSW5zZXJ0IHJvdyBiZWZvcmUiOiAiSW5mb2dhIHJhZCBmw7ZyZSIsCisgICAgIk1lcmdlIGNlbGxzIjogIlNsw6Ugc2FtbWFuIGNlbGxlciIsCisgICAgIk5vIHJ1bGVzIjogIkluZ2VuIGxpbmphbCIsCisgICAgIk5vIHNpZGVzIjogIkluZ2Egc2lkb3IiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBhZGRpbmciOiAiTHVmdCIsCisgICAgIlBsZWFzZSBjbGljayBpbnRvIHNvbWUgY2VsbCI6ICJLbGlja2EgaSB2YWxmcmkgY2VsbCIsCisgICAgIlJvdyBQcm9wZXJ0aWVzIjogIkVnZW5za2FwZXIgZm9yIHJhZCIsCisgICAgIlJvdyBwcm9wZXJ0aWVzIjogIkVnZW5za2FwZXIgZsO2ciByYWQiLAorICAgICJSb3dzIjogIlJhZGVyOiIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnMiOiAiTGluamFsZXIga29tbWVyIGF0dCBzeW5hcyBtZWxsYW4gYWxsYSByYWRlciBvY2gga29sdW1uZXIiLAorICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIGNvbHVtbnMgb25seSI6ICJMaW5qYWxlciBrb21tZXIgZW5iYXJ0IHN5bmFzIG1lbGxhbiBrb2x1bW5lciIsCisgICAgIlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5IjogIkxpbmphbGVyIGtvbW1lciBlbmJhcnQgc3luYXMgbWVsbGFuIHJhZGVyIiwKKyAgICAiU3BhY2luZyI6ICJNZWxsYW5ydW0iLAorICAgICJTcGFjaW5nIGFuZCBwYWRkaW5nIjogIk1lbGxhbnJ1bSBvY2ggbHVmdCIsCisgICAgIlNwbGl0IGNvbHVtbiI6ICJEZWxhIGtvbHVtbiIsCisgICAgIlNwbGl0IHJvdyI6ICJEZWxhIHJhZCIsCisgICAgIlN1bW1hcnkiOiAiU2FtbWFuZHJhZyIsCisgICAgIlRhYmxlIFByb3BlcnRpZXMiOiAiVGFiZWxsZWdlbnNrYXBlciIsCisgICAgIlRhYmxlIHByb3BlcnRpZXMiOiAiVGFiZWxsZWdlbnNrYXBlciIsCisgICAgIlRoZSBib3R0b20gc2lkZSBvbmx5IjogIk5lZGVya2FudGVuIGVuYmFydCIsCisgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIlbDpG5zdGVyc2lkYW4gZW5iYXJ0IiwKKyAgICAiVGhlIHJpZ2h0IGFuZCBsZWZ0IHNpZGVzIG9ubHkiOiAiSMO2Z2VyLSBvY2ggdsOkbnN0ZXJzaWRhbiBlbmJhcnQiLAorICAgICJUaGUgcmlnaHQtaGFuZCBzaWRlIG9ubHkiOiAiSMO2Z2Vyc2lkYW4gZW5iYXJ0IiwKKyAgICAiVGhlIHRvcCBhbmQgYm90dG9tIHNpZGVzIG9ubHkiOiAiw5Z2ZXItIG9jaCBuZWRlcmthbnRlbiBlbmJhcnQiLAorICAgICJUaGUgdG9wIHNpZGUgb25seSI6ICLDlnZlcmthbnRlbiBlbmJhcnQiLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjZWxsIGluIHJvdy4iOiAiWGluaGEgbmVrYXIgYXR0IHJhZGVyYSBzaXN0YSBjZWxsZW4gaSB0YWJlbGxlbi4iLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjb2x1bW4gaW4gdGFibGUuIjogIlhpbmhhIG5la2FyIGF0dCByYWRlcmEgc2lzdGEga29sdW1uZW4gaSB0YWJlbGxlbi4iLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCByb3cgaW4gdGFibGUuIjogIlhpbmhhIG5la2FyIGF0dCByYWRlcmEgc2lzdGEgcmFkZW4gaSB0YWJlbGxlbi4iLAorICAgICJwaXhlbHMiOiAiYmlsZHB1bmt0ZXIiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBbGlnbiI6ICJKdXN0ZXJhIiwKKyAgICAgICAgIkJhY2tncm91bmQiOiAiQmFrZ3J1bmQiLAorICAgICAgICAiQmFzZWxpbmUiOiAiQmFzbGluamUiLAorICAgICAgICAiQm9yZGVyIjogIkthbnRsaW5qZSIsCisgICAgICAgICJCb3R0b20iOiAiQm90dGVuIiwKKyAgICAgICAgIkNlbnRlciI6ICJDZW50cmVyYSIsCisgICAgICAgICJDaGFyIjogIlRlY2tlbiIsCisgICAgICAgICJDb2xsYXBzZWQgYm9yZGVycyI6ICJPc3lubGlnYSBrYW50bGluamVyIiwKKyAgICAgICAgIkNvbG9yIjogIkbDpHJnIiwKKyAgICAgICAgIkZHIENvbG9yIjogIkbDtnJncnVuZHNmw6RyZyIsCisgICAgICAgICJGbG9hdCI6ICJGbHl0YW5kZSIsCisgICAgICAgICJIZWlnaHQiOiAiSMO2amQiLAorICAgICAgICAiSG93IG1hbnkgY29sdW1ucyB3b3VsZCB5b3UgbGlrZSB0byBtZXJnZT8iOiAiSHVyIG3DpW5nYSBrb2x1bW5lciB2aWxsIGR1IHNsw6Ugc2FtbWFuPyIsCisgICAgICAgICJIb3cgbWFueSByb3dzIHdvdWxkIHlvdSBsaWtlIHRvIG1lcmdlPyI6ICJIdXIgbcOlbmdhIHJhZGVyIHZpbGwgZHUgc2zDpSBzYW1tYW4/IiwKKyAgICAgICAgIkltYWdlIFVSTCI6ICJCaWxkZW5zIFVSTCIsCisgICAgICAgICJKdXN0aWZ5IjogIkp1c3RlcmEiLAorICAgICAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgICAgICJMZWZ0IjogIlZlbnN0ZXIiLAorICAgICAgICAiTWFyZ2luIjogIk1hcmdpbmFsIiwKKyAgICAgICAgIk1pZGRsZSI6ICJNaXR0ZW4iLAorICAgICAgICAiTm9uZSI6ICJJbmdlbiIsCisgICAgICAgICJSaWdodCI6ICJIw7ZnZXIiLAorICAgICAgICAiUnVsZXMiOiAiTGluamFsZXIiLAorICAgICAgICAiU3BsaXQgY2VsbCI6ICJEZWxhIGNlbGwiLAorICAgICAgICAiU3R5bGUgW0NTU10iOiAiU3RpbCBbQ1NTXSIsCisgICAgICAgICJUZXh0IGFsaWduIjogIkp1c3RlcmEgdGV4dCIsCisgICAgICAgICJUb3AiOiAiw5Z2ZXJrYW50IiwKKyAgICAgICAgIlVuc2V0IGNvbG9yIjogIk9iZXN0w6RtZCBmw6RyZyIsCisgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICJWZXJ0aWthbCBqdXN0ZXJpbmciLAorICAgICAgICAiV2lkdGgiOiAiQnJlZGQiLAorICAgICAgICAicGVyY2VudCI6ICJwcm9jZW50IgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvdGguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRhOWM4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL2xhbmcvdGguanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0aCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwKKyAgICAiT0siOiAi4LiV4LiB4Lil4LiHIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL3RyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy90ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjFiZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy90ci5qcwpAQCAtMCwwICsxLDkxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsbCBmb3VyIHNpZGVzIjogIkTDtnJ0IGtlbmFyxLEgZGEiLAorICAgICJCb3JkZXJzIjogIktlbmFybMSxa2xhciIsCisgICAgIkNhbmNlbCI6ICLEsHB0YWwiLAorICAgICJDYXB0aW9uIjogIkJhxZ9sxLFrIiwKKyAgICAiQ2VsbCBQcm9wZXJ0aWVzIjogIkjDvGNyZSDDtnplbGxpa2xlcmkiLAorICAgICJDZWxsIHByb3BlcnRpZXMiOiAiU2F0xLFyIMO2emVsbGlrbGVyaSIsCisgICAgIkRlbGV0ZSBjZWxsIjogIkjDvGNyZXlpIHNpbCIsCisgICAgIkRlbGV0ZSBjb2x1bW4iOiAiU8O8dHVudSBzaWwiLAorICAgICJEZWxldGUgcm93IjogIlPEsXJhecSxIHNpbCIsCisgICAgIkRlc2NyaXB0aW9uIjogIlRhbsSxbSIsCisgICAgIkZyYW1lcyI6ICLDh2Vyw6dldmVsZXIiLAorICAgICJJbnNlcnQgY2VsbCBhZnRlciI6ICJTYcSfxLFuYSBzYXTEsXIgZWtsZSIsCisgICAgIkluc2VydCBjZWxsIGJlZm9yZSI6ICJTb2x1bmEgc2F0xLFyIGVrbGUiLAorICAgICJJbnNlcnQgY29sdW1uIGFmdGVyIjogIlNhxJ/EsW5hIHPDvHR1biBla2xlIiwKKyAgICAiSW5zZXJ0IGNvbHVtbiBiZWZvcmUiOiAiU29sdW5hIHPDvHR1biBla2xlIiwKKyAgICAiSW5zZXJ0IHJvdyBhZnRlciI6ICJTb2x1bmEgc8SxcmEgZWtsZSIsCisgICAgIkluc2VydCByb3cgYmVmb3JlIjogIlNhxJ/EsW5hIHPEsXJhIGVrbGUiLAorICAgICJNZXJnZSBjZWxscyI6ICJTYXTEsXJsYXLEsSBiaXJsZcWfdGlyIiwKKyAgICAiTm8gcnVsZXMiOiAiw4dpemdpIG9sbWFzxLFuIiwKKyAgICAiTm8gc2lkZXMiOiAiS2VuYXIgb2xtYXPEsW4iLAorICAgICJPSyI6ICJUYW1hbSIsCisgICAgIlBhZGRpbmciOiAixLDDpyBib8WfbHVrIiwKKyAgICAiUGxlYXNlIGNsaWNrIGludG8gc29tZSBjZWxsIjogIkzDvHRmZW4gYmlyIGjDvGNyZSBzZcOnaW4iLAorICAgICJSb3cgUHJvcGVydGllcyI6ICJTYXTEsXIgw7Z6ZWxsaWtsZXJpIiwKKyAgICAiUm93IHByb3BlcnRpZXMiOiAiU8SxcmEgw7Z6ZWxsaWtsZXJpIiwKKyAgICAiUm93cyI6ICJTYXTEsXI6IiwKKyAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBhbGwgcm93cyBhbmQgY29sdW1ucyI6ICJUw7xtIHNhdMSxciB2ZSBzw7x0dW5sYXLEsW4gYXJhc8SxbmRhIiwKKyAgICAiUnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBjb2x1bW5zIG9ubHkiOiAiWWFsbsSxemNhIHPDvHR1bmxhcsSxbiBhcmFzxLFuZGEiLAorICAgICJSdWxlcyB3aWxsIGFwcGVhciBiZXR3ZWVuIHJvd3Mgb25seSI6ICJZYWxuxLF6Y2Egc2F0xLFybGFyxLFuIGFyYXPEsW5kYSIsCisgICAgIlNwYWNpbmciOiAiQXJhbMSxayIsCisgICAgIlNwYWNpbmcgYW5kIHBhZGRpbmciOiAiQXJhbMSxa2xhciIsCisgICAgIlNwbGl0IGNvbHVtbiI6ICJTw7x0dW51IGLDtmwiLAorICAgICJTcGxpdCByb3ciOiAiU8O8dHVudSBiw7ZsIiwKKyAgICAiU3VtbWFyeSI6ICLDlnpldCIsCisgICAgIlRhYmxlIFByb3BlcnRpZXMiOiAiVGFibG8gw7Z6ZWxsaWtsZXJpIiwKKyAgICAiVGFibGUgcHJvcGVydGllcyI6ICJUYWJsbyDDtnplbGxpa2xlcmkiLAorICAgICJUaGUgYm90dG9tIHNpZGUgb25seSI6ICJZYWxuxLF6IGFsdCB0YXJhZiIsCisgICAgIlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5IjogIllhbG7EsXogc29sIHRhcmFmIiwKKyAgICAiVGhlIHJpZ2h0IGFuZCBsZWZ0IHNpZGVzIG9ubHkiOiAiWWFsbsSxeiBzYcSfIHZlIHNvbCB0YXJhZiIsCisgICAgIlRoZSByaWdodC1oYW5kIHNpZGUgb25seSI6ICJZYWxuxLF6IHNhxJ8gdGFyYWYiLAorICAgICJUaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seSI6ICJZYWxuxLF6IMO8c3QgdmUgYWx0IHRhcmFmIiwKKyAgICAiVGhlIHRvcCBzaWRlIG9ubHkiOiAiWWFsbsSxeiDDvHN0IHRhcmFmIiwKKyAgICAiWGluaGEgY293YXJkbHkgcmVmdXNlcyB0byBkZWxldGUgdGhlIGxhc3QgY2VsbCBpbiByb3cuIjogIlNhdMSxcmRha2kgc29uIGjDvGNyZSBzaWxpbmVtZXoiLAorICAgICJYaW5oYSBjb3dhcmRseSByZWZ1c2VzIHRvIGRlbGV0ZSB0aGUgbGFzdCBjb2x1bW4gaW4gdGFibGUuIjogIlRhYmxvZGFraSBzb24gc8O8dHVuIHNpbGluZW1leiIsCisgICAgIlhpbmhhIGNvd2FyZGx5IHJlZnVzZXMgdG8gZGVsZXRlIHRoZSBsYXN0IHJvdyBpbiB0YWJsZS4iOiAiVGFibG9kYWtpIHNvbiBzYXTEsXIgc2lsaW5lbWV6IiwKKyAgICAicGl4ZWxzIjogIlBpa3NlbCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFsaWduIjogIkhpemFsYSIsCisgICAgICAgICJCYWNrZ3JvdW5kIjogIkFya2EgcGxhbiIsCisgICAgICAgICJCYXNlbGluZSI6ICJUYWJhbiDDp2l6Z2lzaSIsCisgICAgICAgICJCb3JkZXIiOiAiS2VuYXJsxLFrIiwKKyAgICAgICAgIkJvdHRvbSI6ICJBbHQiLAorICAgICAgICAiQ2VudGVyIjogIk9ydGFsYSIsCisgICAgICAgICJDaGFyIjogIkthcmFrdGVyIiwKKyAgICAgICAgIkNvbGxhcHNlZCBib3JkZXJzIjogIkRhcmFsdMSxbG3EscWfIGtlbmFybMSxa2xhciIsCisgICAgICAgICJDb2xvciI6ICJSZW5rIiwKKyAgICAgICAgIkZHIENvbG9yIjogIsOWbiBwbGFuIHJlbmdpIiwKKyAgICAgICAgIkZsb2F0IjogIktheWTEsXIiLAorICAgICAgICAiSGVpZ2h0IjogIlnDvGtzZWtsaWsiLAorICAgICAgICAiSG93IG1hbnkgY29sdW1ucyB3b3VsZCB5b3UgbGlrZSB0byBtZXJnZT8iOiAiS2HDpyBzw7x0dW4gYmlybGXFn3Rpcm1layBpc3RpeW9yc3VudXo/IiwKKyAgICAgICAgIkhvdyBtYW55IHJvd3Mgd291bGQgeW91IGxpa2UgdG8gbWVyZ2U/IjogIkthw6cgc2F0xLFyIGJpcmxlxZ90aXJtZWsgaXN0aXlvcnN1bnV6PyIsCisgICAgICAgICJJbWFnZSBVUkwiOiAiUmVzaW0gVVJMJ3NpIiwKKyAgICAgICAgIkp1c3RpZnkiOiAiWWFzbGEiLAorICAgICAgICAiTGF5b3V0IjogIkTDvHplbiIsCisgICAgICAgICJMZWZ0IjogIlNvbCIsCisgICAgICAgICJNYXJnaW4iOiAiS2VuYXIgYm/Fn2x1xJ91IiwKKyAgICAgICAgIk1pZGRsZSI6ICJPcnRhbGEiLAorICAgICAgICAiTm9uZSI6ICJIacOnYmlyaSIsCisgICAgICAgICJSaWdodCI6ICJTYcSfIiwKKyAgICAgICAgIlJ1bGVzIjogIsOHaXpnaSIsCisgICAgICAgICJTcGxpdCBjZWxsIjogIlNhdMSxcsSxIGLDtmwiLAorICAgICAgICAiU3R5bGUgW0NTU10iOiAiU3RpbCBbQ1NTXSIsCisgICAgICAgICJUZXh0IGFsaWduIjogIk1ldGluIGhpemFzxLEiLAorICAgICAgICAiVG9wIjogIll1a2FyxLEiLAorICAgICAgICAiVW5zZXQgY29sb3IiOiAiUmVuZ2kga2FsZMSxciIsCisgICAgICAgICJWZXJ0aWNhbCBhbGlnbiI6ICJEaWtleSBoaXphIiwKKyAgICAgICAgIldpZHRoIjogIkdlbmnFn2xpayIsCisgICAgICAgICJwZXJjZW50IjogIiUiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9sYW5nL3ZuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy92bi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDgyZTAyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvbGFuZy92bi5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInZuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJI4buneSIsCisgICAgIk9LIjogIsSQ4buTbmcgw70iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL3BvcHVwcy9kaWFsb2dNZXJnZUNlbGxzLmh0bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9wb3B1cHMvZGlhbG9nTWVyZ2VDZWxscy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OTFlYzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9wb3B1cHMvZGlhbG9nTWVyZ2VDZWxscy5odG1sCkBAIC0wLDAgKzEsMjYgQEAKKzxoMSBpZD0iW2gxXSI+PGwxMG4+TWVyZ2UgQ2VsbHM8L2wxMG4+PC9oMT4KKzx0YWJsZSB3aWR0aD0iMTAwJSI+CisgIDx0cj4KKyAgICA8dGQgY29sc3Bhbj0iMiI+CisgICAgICA8bDEwbj5NZXJnZSBjdXJyZW50IGNlbGwgd2l0aDo8L2wxMG4+CisgICAgPC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IiB3aWR0aD0iMzAlIj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iW2NvbHNdIiB2YWx1ZT0iMCIgaWQ9IltmX2NvbHNdIiBzaXplPSI0IiB0aXRsZT0iQ29sdW1ucyIgLz48L3RkPgorICAgIDx0ZCB3aWR0aD0iNzAlIj48bDEwbj5DZWxscyB0byB0aGUgcmlnaHQsIGFuZDwvbDEwbj48L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbcm93c10iIHZhbHVlPSIwIiBpZD0iW2Zfcm93c10iIHNpemU9IjQiIHRpdGxlPSJSb3dzIiAvPjwvdGQ+CisgICAgPHRkPjxsMTBuPkNlbGxzIGRvd248L2wxMG4+PC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0ZCBjb2xzcGFuPSIyIiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij4KKyAgICAgIDxociAvPgorICAgICAgPGRpdiBjbGFzcz0iYnV0dG9ucyIgaWQ9IltidXR0b25zXSI+CisJPGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9Iltva10iIHZhbHVlPSJfKE9LKSIgLz4KKwk8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0iW2NhbmNlbF0iIHZhbHVlPSJfKENhbmNlbCkiIC8+CisgICAgICA8L2Rpdj4KKyAgICA8L3RkPgorICA8L3RyPgorPC90YWJsZT4KKwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvcG9wdXBzL2RpYWxvZ1Jvd0NlbGwuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL3BvcHVwcy9kaWFsb2dSb3dDZWxsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlOGVkZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL3BvcHVwcy9kaWFsb2dSb3dDZWxsLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPGgxIGlkPSJbdGl0bGVdIj5UaXRsZTwvaDE+Cis8dGFibGUgc3R5bGU9IndpZHRoOjEwMCUiPgorICAgIDx0cj4KKyAgICAgICAgPHRkIGlkPSJbVE9fbGF5b3V0XSI+PGJyIC8+CisgICAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICAgIDx0ZCBpZD0iW1RPX3N0eWxlXSI+PGJyIC8+CisgICAgICAgIDwvdGQ+CisgICAgPC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJidXR0b25zIiBpZD0iW2J1dHRvbnNdIj4KKyAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9Iltva10iICAgICB2YWx1ZT0iXyhPSykiICAgICAvPgorICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0iW2NhbmNlbF0iIHZhbHVlPSJfKENhbmNlbCkiIC8+Cis8L2Rpdj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9wb3B1cHMvZGlhbG9nVGFibGUuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL3BvcHVwcy9kaWFsb2dUYWJsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYTczYzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1RhYmxlT3BlcmF0aW9ucy9wb3B1cHMvZGlhbG9nVGFibGUuaHRtbApAQCAtMCwwICsxLDExOSBAQAorIDxoMSBpZD0iW2gxXSI+PGwxMG4+VGFibGUgUHJvcGVydGllczwvbDEwbj48L2gxPgorICA8dGFibGUgc3R5bGU9IndpZHRoOiAxMDAlOyI+CisgICAgICA8dGJvZHk+CisgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQ+CisgICAgICAgICAgICAgICAgICAgICAgPGxlZ2VuZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGwxMG4+RGVzY3JpcHRpb248L2wxMG4+CisgICAgICAgICAgICAgICAgICAgICAgPC9sZWdlbmQ+CisgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIHN0eWxlPSJ3aWR0aDogMTAwJTsiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsMTBuPkNhcHRpb248L2wxMG4+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ2YWx1ZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJbY2FwdGlvbl0iIHZhbHVlPSIiIHR5cGU9InRleHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bDEwbj5TdW1tYXJ5PC9sMTBuPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idmFsdWUiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iW3N1bW1hcnldIiB2YWx1ZT0iIiB0eXBlPSJ0ZXh0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KKyAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8L3RyPgorICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgPHRkIGlkPSJbVE9fbGF5b3V0XSI+PGJyIC8+CisgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPC90cj4KKyAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgIDxmaWVsZHNldD4KKyAgICAgICAgICAgICAgICAgICAgICA8bGVnZW5kPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8bDEwbj5TcGFjaW5nIGFuZCBwYWRkaW5nPC9sMTBuPgorICAgICAgICAgICAgICAgICAgICAgIDwvbGVnZW5kPgorICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBzdHlsZT0id2lkdGg6IDEwMCU7Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bDEwbj5TcGFjaW5nPC9sMTBuPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9IltzcGFjaW5nXSIgc2l6ZT0iNSIgdmFsdWU9IiIgdHlwZT0idGV4dCI+Jm5ic3A7PGwxMG4+UGFkZGluZzwvbDEwbj46IDxpbnB1dCBuYW1lPSJbcGFkZGluZ10iIHNpemU9IjUiIHZhbHVlPSI1IiB0eXBlPSJ0ZXh0Ij4mbmJzcDsmbmJzcDs8bDEwbj5waXhlbHM8L2wxMG4+IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgorICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgIDwvdHI+CisgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICA8dGQgaWQ9IltUT19mcmFtZVJ1bGVzXSI+CisgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQ+CisgICAgICAgICAgICAgICAgICAgICAgPGxlZ2VuZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGwxMG4+RnJhbWUgYW5kIGJvcmRlcnM8L2wxMG4+CisgICAgICAgICAgICAgICAgICAgICAgPC9sZWdlbmQ+CisgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bDEwbj5Cb3JkZXJzPC9sMTBuPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9Iltib3JkZXJzXSIgc2l6ZT0iNSIgdmFsdWU9IiIgdHlwZT0idGV4dCI+Jm5ic3A7Jm5ic3A7PGwxMG4+cGl4ZWxzPC9sMTBuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bDEwbj5GcmFtZXM8L2wxMG4+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9IltmcmFtZXNdIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InZvaWQiPjxsMTBuPk5vIHNpZGVzPC9sMTBuPjwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYWJvdmUiPjxsMTBuPlRoZSB0b3Agc2lkZSBvbmx5PC9sMTBuPjwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYmVsb3ciPjxsMTBuPlRoZSBib3R0b20gc2lkZSBvbmx5PC9sMTBuPjwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHNpZGVzIj48bDEwbj5UaGUgdG9wIGFuZCBib3R0b20gc2lkZXMgb25seTwvbDEwbj48L29wdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InZzaWRlcyI+PGwxMG4+VGhlIHJpZ2h0IGFuZCBsZWZ0IHNpZGVzIG9ubHk8L2wxMG4+PC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJsaHMiPjxsMTBuPlRoZSBsZWZ0LWhhbmQgc2lkZSBvbmx5PC9sMTBuPjwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icmhzIj48bDEwbj5UaGUgcmlnaHQtaGFuZCBzaWRlIG9ubHk8L2wxMG4+PC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJib3giPjxsMTBuPkFsbCBmb3VyIHNpZGVzPC9sMTBuPjwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGwxMG4+UnVsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iW3J1bGVzXSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJub25lIj48bDEwbj5ObyBydWxlczwvbDEwbj48L29wdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InJvd3MiPjxsMTBuPlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gcm93cyBvbmx5PC9sMTBuPjwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iY29scyI+PGwxMG4+UnVsZXMgd2lsbCBhcHBlYXIgYmV0d2VlbiBjb2x1bW5zIG9ubHk8L2wxMG4+PC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhbGwiPjxsMTBuPlJ1bGVzIHdpbGwgYXBwZWFyIGJldHdlZW4gYWxsIHJvd3MgYW5kIGNvbHVtbnM8L2wxMG4+PC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgorICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgIDwvdHI+CisgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICA8dGQgaWQ9IltUT19zdHlsZV0iPjxiciAvPgorICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgIDwvdHI+CisgICAgICA8L3Rib2R5PgorICA8L3RhYmxlPgorPGRpdiBjbGFzcz0iYnV0dG9ucyIgaWQ9IltidXR0b25zXSI+CisgIDxpbnB1dCB0eXBlPSJidXR0b24iIGlkPSJbb2tdIiAgICAgdmFsdWU9Il8oT0spIiAgICAgLz4KKyAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9IltjYW5jZWxdIiB2YWx1ZT0iXyhDYW5jZWwpIiAvPgorPC9kaXY+CisKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL3BvcHVwcy9tZXJnZV9jZWxscy5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9UYWJsZU9wZXJhdGlvbnMvcG9wdXBzL21lcmdlX2NlbGxzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTBjNTE0NQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVGFibGVPcGVyYXRpb25zL3BvcHVwcy9tZXJnZV9jZWxscy5odG1sCkBAIC0wLDAgKzEsNjggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+CisKKzxoZWFkPgorICA8dGl0bGU+TWVyZ2UgQ2VsbHM8L3RpdGxlPgorCis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi8uLi8uLi9wb3B1cHMvcG9wdXAuY3NzIiAvPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgaHRtbCxib2R5IHt3aWR0aDogNDAwcHg7IGhlaWdodDogMTUwcHg7fQorPC9zdHlsZT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uLy4uL3BvcHVwcy9wb3B1cC5qcyI+PC9zY3JpcHQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIEluaXQoKSB7CisgIHdpbmRvdy5yZXNpemVUbyg0MDAsMTcwKTsKKwlfX2RsZ19pbml0KCk7CisgCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2NvbHMiKS5mb2N1cygpOworfQorCitmdW5jdGlvbiBvbk9LKCkgeworICB2YXIgcGFyYW0gPSBuZXcgT2JqZWN0KCk7CisgIHBhcmFtWyJmX2NvbHMiXSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2NvbHMiKS52YWx1ZTsKKyAgcGFyYW1bImZfcm93cyJdID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfcm93cyIpLnZhbHVlOworICBfX2RsZ19jbG9zZShwYXJhbSk7CisgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gb25DYW5jZWwoKSB7CisgIF9fZGxnX2Nsb3NlKG51bGwpOworICByZXR1cm4gZmFsc2U7Cit9Cis8L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9IkluaXQoKSI+Cis8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJnZXQiPgorPHRhYmxlIHdpZHRoPSIxMDAlIj4KKzx0cj4KKyAgPHRkIGNvbHNwYW49IjIiPgorCTxkaXYgY2xhc3M9InRpdGxlIj5NZXJnZSBDZWxsczwvZGl2PgorICA8L3RkPgorPC90cj4KKzx0cj4KKyAgPHRkIGNvbHNwYW49IjIiPgorCU1lcmdlIGN1cnJlbnQgY2VsbCB3aXRoOgorICA8L3RkPgorPC90cj4KKzx0cj4KKyAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiIHdpZHRoPSIzMCUiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjb2xzIiB2YWx1ZT0iMCIgaWQ9ImZfY29scyIgc2l6ZT0iNCIgdGl0bGU9IkNvbHVtbnMiIC8+PC90ZD4KKyAgPHRkIHdpZHRoPSI3MCUiPkNlbGxzIHRvIHRoZSByaWdodCwgYW5kPC90ZD4KKzwvdHI+Cis8dHI+CisgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icm93cyIgdmFsdWU9IjAiIGlkPSJmX3Jvd3MiIHNpemU9IjQiIHRpdGxlPSJSb3dzIiAvPjwvdGQ+CisgIDx0ZD5DZWxscyBkb3duPC90ZD4KKzwvdHI+Cis8dHI+CisgIDx0ZCBjb2xzcGFuPSIyIiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij4KKyAgICA8aHIgLz4KKyAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbmFtZT0ib2siIG9uY2xpY2s9InJldHVybiBvbk9LKCk7Ij5PSzwvYnV0dG9uPgorICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBuYW1lPSJjYW5jZWwiIG9uY2xpY2s9InJldHVybiBvbkNhbmNlbCgpOyI+Q2FuY2VsPC9idXR0b24+CisgIDwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZm9ybT4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9VbnNhdmVkQ2hhbmdlcy9VbnNhdmVkQ2hhbmdlcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVW5zYXZlZENoYW5nZXMvVW5zYXZlZENoYW5nZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyMTQyNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVW5zYXZlZENoYW5nZXMvVW5zYXZlZENoYW5nZXMuanMKQEAgLTAsMCArMSw1NSBAQAorZnVuY3Rpb24gVW5zYXZlZENoYW5nZXMoZWRpdG9yKSB7CisgICAgLy8gS2VlcCBhIGNvcHkgb2YgdGhlIGVkaXRvciB0byBwZXJmb3JtIGFueSBuZWNlc3NhcnkgZnVuY3Rpb25zCisgICAgdmFyIGVkaXRvciA9IGVkaXRvcjsKKworICAgIC8vIFByaXZhdGUgdmFyaWFibGUgZm9yIHN0b3JpbmcgdGhlIHVubW9kaWZpZWQgY29udGVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeQorICAgIC8vIGJlY2F1c2Ugd2hlbkRvY1JlYWR5IG5lZWRzIGEgY2xvc3VyZSB0byByZWZlcmVuY2UgdGhpcyBvYmplY3QuCisgICAgdmFyIGRlZmF1bHRWYWx1ZTsKKworICAgIC8vIFZhcmlhYmxlIHRvIGFsbG93IHRoZSBwcm90ZWN0b3IgdG8gYmUgYnlwYXNzZWQgaW4gdGhlIGNhc2Ugb2Ygc3VibWl0LgorICAgIHZhciBieXBhc3MgPSBmYWxzZTsKKworICAgIHZhciBwcm90ZWN0b3IgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBpZiAoYnlwYXNzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGVmYXVsdFZhbHVlICE9IChlZGl0b3IuZ2V0RWRpdG9yQ29udGVudCA/IGVkaXRvci5nZXRFZGl0b3JDb250ZW50KCkgOiBlZGl0b3Iub3V0d2FyZEh0bWwoZWRpdG9yLmdldEhUTUwoKSkpKSB7CisgICAgICAgICAgICAvLyBUaGlzIG5lZWRzIHRvIHVzZSBfbGMgZm9yIG11bHRpcGxlIGxhbmd1YWdlcworICAgICAgICAgICAgdmFyIGRpcnR5X3Byb21wdCA9IFhpbmhhLl9sYygnWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBlZGl0b3InLCAnVW5zYXZlZENoYW5nZXMnKTsKKyAgICAgICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZGlydHlfcHJvbXB0OworICAgICAgICAgICAgcmV0dXJuIGRpcnR5X3Byb21wdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRoaXMub25CZWZvcmVTdWJtaXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgYnlwYXNzID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBTZXR1cCB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcGx1Z2luIGlzIGxvYWRlZC4KKyAgICAvLyBXZSBuZWVkIGEgY29weSBvZiB0aGUgaW5pdGlhbCBjb250ZW50IGZvciBkZXRlY3Rpb24gdG8gd29yayBwcm9wZXJseSwgc28KKyAgICAvLyB3ZSB3aWxsIHNldHVwIGEgY2FsbGJhY2sgZm9yIHdoZW4gdGhlIGRvY3VtZW50IGlzIHJlYWR5IHRvIHN0b3JlIGFuCisgICAgLy8gdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBjb250ZW50LgorICAgIHRoaXMub25HZW5lcmF0ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBlZGl0b3Iud2hlbkRvY1JlYWR5KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIC8vIENvcHkgdGhlIG9yaWdpbmFsLCB1bm1vZGlmaWVkIGNvbnRlbnRzIHRvIGNoZWNrIGZvciBjaGFuZ2VzCisgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWUgfHwgKGVkaXRvci5nZXRFZGl0b3JDb250ZW50ID8gZWRpdG9yLmdldEVkaXRvckNvbnRlbnQoKSA6IGVkaXRvci5vdXR3YXJkSHRtbChlZGl0b3IuZ2V0SFRNTCgpKSk7CisKKyAgICAgICAgICAgIC8vIFNldCB1cCB0aGUgYmxvY2tlcgorICAgICAgICAgICAgWGluaGEuX2FkZEV2ZW50KHdpbmRvdywgJ2JlZm9yZXVubG9hZCcsIHByb3RlY3Rvcik7CisgICAgICAgIH0pOworICAgIH0KKworfQorCisvLyBBbiBvYmplY3QgY29udGFpbmluZyBtZXRhZGF0YSBmb3IgdGhpcyBwbHVnaW4KK1Vuc2F2ZWRDaGFuZ2VzLl9wbHVnaW5JbmZvID0geworICAgIG5hbWU6J1Vuc2F2ZWRDaGFuZ2VzJywKKyAgICB2ZXJzaW9uOiczLjcnLAorICAgIGRldmVsb3BlcjonRG91Z2xhcyBNYXlsZScsCisgICAgZGV2ZWxvcGVyX3VybDonaHR0cDovL2RvdWdsYXMubWF5bGUub3JnJywKKyAgICBjX293bmVyOidEb3VnbGFzIE1heWxlJywKKyAgICBzcG9uc29yOidUaGUgT3BlbiBQbGFubmluZyBQcm9qZWN0JywKKyAgICBzcG9uc29yX3VybDonaHR0cDovL3RvcHAub3BlbnBsYW5zLm9yZycsCisgICAgbGljZW5zZTonTEdQTCcKK30KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVW5zYXZlZENoYW5nZXMvbGFuZy9lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVW5zYXZlZENoYW5nZXMvbGFuZy9lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWY5ZjlmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9VbnNhdmVkQ2hhbmdlcy9sYW5nL2VzLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXMiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBlZGl0b3IiOiAiVXN0ZWQgbm8gaGEgZ3VhcmRhZG8gc3VzIG1vZGlmaWNhY2lvbmVzIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Vuc2F2ZWRDaGFuZ2VzL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Vuc2F2ZWRDaGFuZ2VzL2xhbmcvZnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBiYWFiNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvVW5zYXZlZENoYW5nZXMvbGFuZy9mci5qcwpAQCAtMCwwICsxLDEzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgZWRpdG9yIjogIlZvdXMgbidhdmV6IHBhcyBlbnJlZ2lzdHLDqSB2b3MgbW9kaWZpY2F0aW9ucyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9VbnNhdmVkQ2hhbmdlcy9sYW5nL2ZyX2NhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9VbnNhdmVkQ2hhbmdlcy9sYW5nL2ZyX2NhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMjg0MDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Vuc2F2ZWRDaGFuZ2VzL2xhbmcvZnJfY2EuanMKQEAgLTAsMCArMSwxMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmcl9jYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhlIGVkaXRvciI6ICJUdSBuJ2FzIHBhcyBlbnJlZ2lzdHLDqSB0ZXMgbW9kaWZpY2F0aW9ucyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9VbnNhdmVkQ2hhbmdlcy9sYW5nL2xjX2Jhc2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1Vuc2F2ZWRDaGFuZ2VzL2xhbmcvbGNfYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDJiZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9VbnNhdmVkQ2hhbmdlcy9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSwyNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhlIGVkaXRvciI6ICIiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9XZWJLaXRSZXNpemUvV2ViS2l0UmVzaXplLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9XZWJLaXRSZXNpemUvV2ViS2l0UmVzaXplLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNWFiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1dlYktpdFJlc2l6ZS9XZWJLaXRSZXNpemUuanMKQEAgLTAsMCArMSwxMjcgQEAKKy8qKgorICA9IFdlYktpdCBJbWFnZSBSZXNpemVyID0KKyAgCisgIFRoZSBXZWJLaXQgYmFzZWQgKG9yIHNpbWlsYXIpIGJyb3dzZXJzLCBpbmNsdWRpbmcgQ2hyb21lIChhbmQgRWRnZSkKKyAgZG9uJ3Qgc3VwcG9ydCBkcmFnLXRvLXNpemUgaW1hZ2VzIG9yIHRhYmxlcywgd2hpY2ggaXMgYSBwYWluLgorICAKKyAgVGhpcyBwbHVnaW4gaW1wbGVtZW50cyB0aGUgRWRpdG9yQm9vc3QgalF1ZXJ5IHJlc2l6aW5nIHBsdWdpbgorICAgIGh0dHA6Ly93d3cuZWRpdG9yYm9vc3QubmV0L1dlYmtpdHJlc2l6ZS9JbmRleAorICBqUXVlcnkgaXMgcmVxdWlyZWQsIG5hdHVyYWxseSwgaWYgaXQncyBub3QgYWxyZWFkeSBsb2FkZWQgCisgIHRoZW4gd2Ugd2lsbCBsb2FkIG91ciBvd24gdmVyc2lvbiwgc28gZW5zdXJlIHlvdSBsb2FkIHlvdXIgdmVyc2lvbgorICBmaXJzdCBpZiB5b3UgbmVlZCBhIG5ld2VyIG9uZSAodGhlbiB0aGlzIG1pZ2h0IGJyZWFrLCBidXQgb2ggd2VsbCkuCisgIAorICAgIAorICA9PSBVc2FnZSA9PS5fCisgIEluc3RydWN0IFhpbmhhIHRvIGxvYWQgdGhlIFdlYktpdEltYWdlUmVzdXplIHBsdWdpbiAoZm9sbG93IHRoZSBOZXdiaWVHdWlkZSksCisgIAorICBZb3UgY2FuIGFsc28gc3BlY2lmeSB0byBlbmFibGUgdGhlIFREIGFuZCBUQUJMRSByZXNpemluZyBmb3IgR2Vja28gCisgIChGaXJlZm94LCBhbmQgSUUxMSBwcmVkb21pbmF0bHkpIGFzIHRoZXNlIGFsc28gZG9uJ3QgaGF2ZSBzdXBwb3J0IGZvcgorICBzaXppbmcgdGhvc2UgKGJ1dCBjYW4gc2l6ZSBpbWFnZXMpLiwgdGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHlvdQorICBjYW4gZGlzYWJsZSB3aXRoLi4uCisgIAorICB4aW5oYV9jb25maWcuV2ViS2l0UmVzaXplLmVuYWJsZVRERm9yR2Vja29BbHNvID0gZmFsc2U7CisgIHhpbmhhX2NvbmZpZy5XZWJLaXRSZXNpemUuZW5hYmxlVEFCTEVGb3JHZWNrb0Fsc28gPSBmYWxzZTsKKyAgCisgID09IENhdXRpb24gPT0KKyAgVGhpcyBvbmx5IHdvcmtzIGFjY2VwdGFibHkgaW4gZWl0aGVyOgorICAgIFN0YW5kYXJkcyBNb2RlICAoZWcgRG9jdHlwZSA8IURPQ1RZUEUgaHRtbD4gKQorICAgIFF1aXJrcyBNb2RlICAgICAoZWcgbm8gZG9jdHlwZSAgICAgICAgICAgICAgKQorICAgIAorICBpdCBkb2VzIG5vdCB3b3JrIGdyZWF0IGluICJBbG1vc3QgU3RhbmRhcmRzIE1vZGUiIGJlY2F1c2Ugc2Nyb2xsaW5nIHRocm93cworICB0aGUgcmVzaXplIGJvcmRlciBvdXQgb2YgcGxhY2UsICx0aGF0J3Mgb2sgaWYgeW91IGRvbid0IG5lZWQgdG8gc2Nyb2xsLCAKKyAgZWl0aGVyIGJlY2F1c2UgeW91ciB0ZXh0IGlzIHNtYWxsLCBvciB5b3UgYXJlIGluIEZ1bGxTY3JlZW4gbW9kZSBvciAKKyAgc29tZXRoaW5nLCBidXQgYW55d2F5LgorICAKKyAKKyAqIEBhdXRob3IgJEF1dGhvciQKKyAqIEB2ZXJzaW9uICRJZCQKKyAqIEBwYWNrYWdlIFdlYktpdFJlc2l6ZQorICovCisKKworV2ViS2l0UmVzaXplLl9wbHVnaW5JbmZvID0geworICBuYW1lICAgICAgICAgIDogIldlYktpdCBJbWFnZSBSZXNpemUiLAorICB2ZXJzaW9uICAgICAgIDogIjEuMCIsCisgIGRldmVsb3BlciAgICAgOiAiRWRpdG9yQm9vc3QsIEphbWVzIFNsZWVtYW4gKFhpbmhhKSIsCisgIGRldmVsb3Blcl91cmwgOiAiaHR0cDovL3d3dy5lZGl0b3Jib29zdC5uZXQvV2Via2l0cmVzaXplL0luZGV4IiwKKyAgbGljZW5zZSAgICAgICA6ICJHUEx2MyIKK307CisKK1hpbmhhLkNvbmZpZy5wcm90b3R5cGUuV2ViS2l0UmVzaXplID0geworICBlbmFibGVUREZvckdlY2tvQWxzbzogICAgIHRydWUsCisgIGVuYWJsZVRBQkxFRm9yR2Vja29BbHNvOiAgdHJ1ZQorfTsKKworZnVuY3Rpb24gV2ViS2l0UmVzaXplKGVkaXRvcikKK3sKKyAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKKyAgICAKKyAgICBpZihYaW5oYS5pc193ZWJraXQgfHwgdGhpcy5lZGl0b3IuY29uZmlnLldlYktpdFJlc2l6ZS5lbmFibGVUREZvckdlY2tvQWxzbyB8fCB0aGlzLmVkaXRvci5jb25maWcuV2ViS2l0UmVzaXplLmVuYWJsZVRBQkxFRm9yR2Vja29BbHNvKQorICAgIHsKKyAgICAgICAgWGluaGEubG9hZExpYnJhcnkoJ2pRdWVyeScpCisgICAgICAgIC5sb2FkU2NyaXB0KCdqcXVlcnkubWIuYnJvd3Nlci5taW4uanMnLCAnV2ViS2l0UmVzaXplJykKKyAgICAgICAgLmxvYWRTY3JpcHQoJ2pxdWVyeS53ZWJraXRyZXNpemUuanMnLCAgICdXZWJLaXRSZXNpemUnKTsKKyAgICB9Cit9CisKKworV2ViS2l0UmVzaXplLnByb3RvdHlwZS5vbkdlbmVyYXRlT25jZSA9IGZ1bmN0aW9uKCkKK3sKKyAgLy8galF1ZXJ5IG5vdCBsb2FkZWQgeWV0PworICBpZighKHR5cGVvZiBqUXVlcnkgIT0gJ3VuZGVmaW5lZCcgJiYgalF1ZXJ5LmZuICYmIGpRdWVyeS5mbi53ZWJraXRpbWFnZXJlc2l6ZSkpCisgIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtzZWxmLm9uR2VuZXJhdGVPbmNlKCl9LCA1MDApOworICAgIHJldHVybjsKKyAgfQorICAKKyAgdHJ5CisgIHsKKyAgICBpZihYaW5oYS5pc193ZWJraXQpCisgICAgeworICAgICAgalF1ZXJ5KHRoaXMuZWRpdG9yLl9pZnJhbWUpLndlYmtpdGltYWdlcmVzaXplKCk7CisgICAgfQorICAgIAorICAgIGlmKFhpbmhhLmlzX3dlYmtpdCB8fCBYaW5oYS5pc19nZWNrbyAmJiB0aGlzLmVkaXRvci5jb25maWcuV2ViS2l0UmVzaXplLmVuYWJsZVRBQkxFRm9yR2Vja29BbHNvKSAKKyAgICB7CisgICAgICBqUXVlcnkodGhpcy5lZGl0b3IuX2lmcmFtZSkud2Via2l0dGFibGVyZXNpemUoKTsKKyAgICB9CisgICAgCisgICAgaWYoWGluaGEuaXNfd2Via2l0IHx8IFhpbmhhLmlzX2dlY2tvICYmIHRoaXMuZWRpdG9yLmNvbmZpZy5XZWJLaXRSZXNpemUuZW5hYmxlVERGb3JHZWNrb0Fsc28pIAorICAgIHsKKyAgICAgIGpRdWVyeSh0aGlzLmVkaXRvci5faWZyYW1lKS53ZWJraXR0ZHJlc2l6ZSgpOworICAgIH0KKyAgfQorICBjYXRjaChlKSB7IH0KK30KKworLy8gV2hlbiBjaGFuZ2luZyBtb2RlcywgbWFrZSBzdXJlIHRoYXQgd2Ugc3RvcCBkaXNwbGF5aW5nIHRoZSBoYW5kbGVzCisvLyBpZiB0aGV5IHdlcmUgZGlzcGxheWluZywgb3RoZXJ3aXNlIHRoZXkgY3JlYXRlIGR1cGxpY2F0ZXMgKGJlY2F1c2UKKy8vIHRoZSBpbWFnZXMgYXJlIHJlY3JlYXRlZCkuCitXZWJLaXRSZXNpemUucHJvdG90eXBlLm9uQmVmb3JlTW9kZSA9IGZ1bmN0aW9uKG1vZGUpCit7CisgIGlmKG1vZGUgPT0gJ3RleHRtb2RlJykKKyAgeworICAgIGlmKHR5cGVvZiB0aGlzLmVkaXRvci5faWZyYW1lLl9XZWJLaXRJbWFnZVJlc2l6ZUVuZCA9PSAnZnVuY3Rpb24nKQorICAgICAgdGhpcy5lZGl0b3IuX2lmcmFtZS5fV2ViS2l0SW1hZ2VSZXNpemVFbmQoKTsKKyAgICAKKyAgICBpZih0eXBlb2YgdGhpcy5lZGl0b3IuX2lmcmFtZS5fV2ViS2l0VGFibGVSZXNpemVFbmQgPT0gJ2Z1bmN0aW9uJykKKyAgICAgIHRoaXMuZWRpdG9yLl9pZnJhbWUuX1dlYktpdFRhYmxlUmVzaXplRW5kKCk7CisgICAgCisgICAgaWYodHlwZW9mIHRoaXMuZWRpdG9yLl9pZnJhbWUuX1dlYktpdFRkUmVzaXplRW5kID09ICdmdW5jdGlvbicpCisgICAgICB0aGlzLmVkaXRvci5faWZyYW1lLl9XZWJLaXRUZFJlc2l6ZUVuZCgpOworICB9Cit9CisKK1dlYktpdFJlc2l6ZS5wcm90b3R5cGUub25Nb2RlID0gZnVuY3Rpb24obW9kZSkKK3sKKyAgaWYobW9kZSA9PSAndGV4dG1vZGUnKQorICB7CisgICAgCisgIH0KKyAgZWxzZQorICB7CisgICAgaWYodHlwZW9mIHRoaXMuZWRpdG9yLl9pZnJhbWUuX1dlYktpdEltYWdlUmVzaXplU3RhcnQgPT0gJ2Z1bmN0aW9uJykKKyAgICAgIHRoaXMuZWRpdG9yLl9pZnJhbWUuX1dlYktpdEltYWdlUmVzaXplU3RhcnQoKTsKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvV2ViS2l0UmVzaXplL2pxdWVyeS5tYi5icm93c2VyLm1pbi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvV2ViS2l0UmVzaXplL2pxdWVyeS5tYi5icm93c2VyLm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWQ4NjhjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9XZWJLaXRSZXNpemUvanF1ZXJ5Lm1iLmJyb3dzZXIubWluLmpzCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBqcXVlcnkubWIuY29tcG9uZW50cworICogIGZpbGU6IGpxdWVyeS5tYi5icm93c2VyLm1pbi5qcworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxMy4gTWF0dGVvIEJpY29jY2hpIChQdXB1bnppKTsKKyAqICBPcGVuIGxhYiBzcmwsIEZpcmVuemUgLSBJdGFseQorICogIGVtYWlsOiBtYXR0ZW9Ab3Blbi1sYWIuY29tCisgKiAgc2l0ZTogCWh0dHA6Ly9wdXB1bnppLmNvbQorICogIGJsb2c6CWh0dHA6Ly9wdXB1bnppLm9wZW4tbGFiLmNvbQorICogCWh0dHA6Ly9vcGVuLWxhYi5jb20KKyAqCisgKiAgTGljZW5jZXM6IE1JVCwgR1BMCisgKiAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHAKKyAqICBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwKKyAqCisgKiAgbGFzdCBtb2RpZmllZDogMTcvMDEvMTMgMC4xMgorICogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyhmdW5jdGlvbigpe2lmKCFqUXVlcnkuYnJvd3Nlcil7alF1ZXJ5LmJyb3dzZXI9e307alF1ZXJ5LmJyb3dzZXIubW96aWxsYT0hMTtqUXVlcnkuYnJvd3Nlci53ZWJraXQ9ITE7alF1ZXJ5LmJyb3dzZXIub3BlcmE9ITE7alF1ZXJ5LmJyb3dzZXIubXNpZT0hMTt2YXIgYT1uYXZpZ2F0b3IudXNlckFnZW50O2pRdWVyeS5icm93c2VyLm5hbWU9bmF2aWdhdG9yLmFwcE5hbWU7alF1ZXJ5LmJyb3dzZXIuZnVsbFZlcnNpb249IiIrcGFyc2VGbG9hdChuYXZpZ2F0b3IuYXBwVmVyc2lvbik7alF1ZXJ5LmJyb3dzZXIubWFqb3JWZXJzaW9uPXBhcnNlSW50KG5hdmlnYXRvci5hcHBWZXJzaW9uLDEwKTt2YXIgYyxiO2lmKC0xIT0oYj1hLmluZGV4T2YoIk9wZXJhIikpKXtpZihqUXVlcnkuYnJvd3Nlci5vcGVyYT0hMCxqUXVlcnkuYnJvd3Nlci5uYW1lPSJPcGVyYSIsalF1ZXJ5LmJyb3dzZXIuZnVsbFZlcnNpb249YS5zdWJzdHJpbmcoYis2KSwtMSE9KGI9YS5pbmRleE9mKCJWZXJzaW9uIikpKWpRdWVyeS5icm93c2VyLmZ1bGxWZXJzaW9uPQorYS5zdWJzdHJpbmcoYis4KX1lbHNlIGlmKC0xIT0oYj1hLmluZGV4T2YoIk1TSUUiKSkpalF1ZXJ5LmJyb3dzZXIubXNpZT0hMCxqUXVlcnkuYnJvd3Nlci5uYW1lPSJNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXIiLGpRdWVyeS5icm93c2VyLmZ1bGxWZXJzaW9uPWEuc3Vic3RyaW5nKGIrNSk7ZWxzZSBpZigtMSE9KGI9YS5pbmRleE9mKCJDaHJvbWUiKSkpalF1ZXJ5LmJyb3dzZXIud2Via2l0PSEwLGpRdWVyeS5icm93c2VyLm5hbWU9IkNocm9tZSIsalF1ZXJ5LmJyb3dzZXIuZnVsbFZlcnNpb249YS5zdWJzdHJpbmcoYis3KTtlbHNlIGlmKC0xIT0oYj1hLmluZGV4T2YoIlNhZmFyaSIpKSl7aWYoalF1ZXJ5LmJyb3dzZXIud2Via2l0PSEwLGpRdWVyeS5icm93c2VyLm5hbWU9IlNhZmFyaSIsalF1ZXJ5LmJyb3dzZXIuZnVsbFZlcnNpb249YS5zdWJzdHJpbmcoYis3KSwtMSE9KGI9YS5pbmRleE9mKCJWZXJzaW9uIikpKWpRdWVyeS5icm93c2VyLmZ1bGxWZXJzaW9uPWEuc3Vic3RyaW5nKGIrCis4KX1lbHNlIGlmKC0xIT0oYj1hLmluZGV4T2YoIkZpcmVmb3giKSkpalF1ZXJ5LmJyb3dzZXIubW96aWxsYT0hMCxqUXVlcnkuYnJvd3Nlci5uYW1lPSJGaXJlZm94IixqUXVlcnkuYnJvd3Nlci5mdWxsVmVyc2lvbj1hLnN1YnN0cmluZyhiKzgpO2Vsc2UgaWYoKGM9YS5sYXN0SW5kZXhPZigiICIpKzEpPChiPWEubGFzdEluZGV4T2YoIi8iKSkpalF1ZXJ5LmJyb3dzZXIubmFtZT1hLnN1YnN0cmluZyhjLGIpLGpRdWVyeS5icm93c2VyLmZ1bGxWZXJzaW9uPWEuc3Vic3RyaW5nKGIrMSksalF1ZXJ5LmJyb3dzZXIubmFtZS50b0xvd2VyQ2FzZSgpPT1qUXVlcnkuYnJvd3Nlci5uYW1lLnRvVXBwZXJDYXNlKCkmJihqUXVlcnkuYnJvd3Nlci5uYW1lPW5hdmlnYXRvci5hcHBOYW1lKTtpZigtMSE9KGE9alF1ZXJ5LmJyb3dzZXIuZnVsbFZlcnNpb24uaW5kZXhPZigiOyIpKSlqUXVlcnkuYnJvd3Nlci5mdWxsVmVyc2lvbj1qUXVlcnkuYnJvd3Nlci5mdWxsVmVyc2lvbi5zdWJzdHJpbmcoMCwKK2EpO2lmKC0xIT0oYT1qUXVlcnkuYnJvd3Nlci5mdWxsVmVyc2lvbi5pbmRleE9mKCIgIikpKWpRdWVyeS5icm93c2VyLmZ1bGxWZXJzaW9uPWpRdWVyeS5icm93c2VyLmZ1bGxWZXJzaW9uLnN1YnN0cmluZygwLGEpO2pRdWVyeS5icm93c2VyLm1ham9yVmVyc2lvbj1wYXJzZUludCgiIitqUXVlcnkuYnJvd3Nlci5mdWxsVmVyc2lvbiwxMCk7aXNOYU4oalF1ZXJ5LmJyb3dzZXIubWFqb3JWZXJzaW9uKSYmKGpRdWVyeS5icm93c2VyLmZ1bGxWZXJzaW9uPSIiK3BhcnNlRmxvYXQobmF2aWdhdG9yLmFwcFZlcnNpb24pLGpRdWVyeS5icm93c2VyLm1ham9yVmVyc2lvbj1wYXJzZUludChuYXZpZ2F0b3IuYXBwVmVyc2lvbiwxMCkpO2pRdWVyeS5icm93c2VyLnZlcnNpb249alF1ZXJ5LmJyb3dzZXIubWFqb3JWZXJzaW9ufX0pKGpRdWVyeSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9XZWJLaXRSZXNpemUvanF1ZXJ5LndlYmtpdHJlc2l6ZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvV2ViS2l0UmVzaXplL2pxdWVyeS53ZWJraXRyZXNpemUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJiMDA4MQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BsdWdpbnMvV2ViS2l0UmVzaXplL2pxdWVyeS53ZWJraXRyZXNpemUuanMKQEAgLTAsMCArMSwxMDYzIEBACivvu78vKiANCisqIFdlYmtpdHJlc2l6ZSAoaHR0cDovL2VkaXRvcmJvb3N0Lm5ldC93ZWJraXRyZXNpemUpDQorKiBDb3B5cmlnaHQgMjAxMiBFZGl0b3Jib29zdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gDQorKg0KKyogV2Via2l0cmVzaXplIGNvbW1lcmNpYWwgbGljZW5zZXMgbWF5IGJlIG9idGFpbmVkIGF0IGh0dHA6Ly9lZGl0b3Jib29zdC5uZXQvaG9tZS9saWNlbnNlcy4NCisqIElmIHlvdSBkbyBub3Qgb3duIGEgY29tbWVyY2lhbCBsaWNlbnNlLCB0aGlzIGZpbGUgc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlDQorKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDMuIEZvciBHUEwgcmVxdWlyZW1lbnRzLCBwbGVhc2UNCisqIHJldmlldzogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sDQorKg0KKyogVmVyc2lvbiBkYXRlOiBNYXJjaCAxOSAyMDEzDQorKiBSRVFVSVJFUzoganF1ZXJ5IDEuNy4xKw0KKyovDQorDQorOyAoZnVuY3Rpb24gKCQpIHsNCisgICAgJC5mbi53ZWJraXRpbWFnZXJlc2l6ZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7DQorICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsNCisNCisgICAgICAgICAgICBpZiAoISQuYnJvd3Nlci53ZWJraXQpIHsNCisgICAgICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisNCisNCisgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSAkLmV4dGVuZCh7DQorICAgICAgICAgICAgfSwgb3B0aW9ucyk7DQorDQorICAgICAgICAgICAgdmFyIGxhc3RDcmM7DQorICAgICAgICAgICAgdmFyIGltYWdlUmVzaXplaW5Qcm9ncmVzcyA9IGZhbHNlOw0KKyAgICAgICAgICAgIHZhciBjdXJyZW50SW1hZ2U7DQorICAgICAgICAgICAgdmFyIGN1cnJlbnRJbWFnZV9IeFdfUmF0ZTsNCisgICAgICAgICAgICB2YXIgY3VycmVudEltYWdlX1d4SF9SYXRlOw0KKyAgICAgICAgICAgIHZhciBpbml0aWFsSGVpZ2h0Ow0KKyAgICAgICAgICAgIHZhciBpbml0aWFsV2lkdGg7DQorDQorICAgICAgICAgICAgdmFyIG1ldGhvZHMgPSB7DQorICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICBndWlkR2VuZXJhdG9yOiBmdW5jdGlvbigpIHsNCisgICAgICAgICAgICAgICAgICAgIHZhciBTNCA9IGZ1bmN0aW9uKCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoKDErTWF0aC5yYW5kb20oKSkqMHgxMDAwMCl8MCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKTsNCisgICAgICAgICAgICAgICAgICAgIH07DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFM0KCkrUzQoKSsiLSIrUzQoKSsiLSIrUzQoKSsiLSIrUzQoKSsiLSIrUzQoKStTNCgpK1M0KCkpOw0KKyAgICAgICAgICAgICAgICB9LA0KKw0KKyAgICAgICAgICAgICAgICBndWlkRmlsdGVyOiBmdW5jdGlvbihjb250ZXh0KXsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiW2RhdGEtZ3VpZD0nIiArIGNvbnRleHQuZ3VpZCArICInXSI7DQorICAgICAgICAgICAgICAgIH0sDQorDQorICAgICAgICAgICAgICAgIHJlbW92ZVJlc2l6ZUVsZW1lbnRzOiBmdW5jdGlvbiAoY29udGV4dCkgew0KKyAgICAgICAgICAgICAgICAgICAgJCgiLmltZy1yZXNpemUtc2VsZWN0b3IiKS5maWx0ZXIobWV0aG9kcy5ndWlkRmlsdGVyKGNvbnRleHQpKS5yZW1vdmUoKTsNCisgICAgICAgICAgICAgICAgICAgICQoIi5pbWctcmVzaXplLXJlZ2lvbiIpLmZpbHRlcihtZXRob2RzLmd1aWRGaWx0ZXIoY29udGV4dCkpLnJlbW92ZSgpOw0KKyAgICAgICAgICAgICAgICB9LA0KKw0KKyAgICAgICAgICAgICAgICBpbWFnZUNsaWNrOiBmdW5jdGlvbiAoY29udGV4dCwgaW1nKSB7DQorICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3MuYmVmb3JlRWxlbWVudFNlbGVjdCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmJlZm9yZUVsZW1lbnRTZWxlY3QoaW1nKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMucmVtb3ZlUmVzaXplRWxlbWVudHMoY29udGV4dCk7DQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50SW1hZ2UgPSBpbWc7DQorDQorICAgICAgICAgICAgICAgICAgICB2YXIgaW1nSGVpZ2h0ID0gJChpbWcpLm91dGVySGVpZ2h0KCk7DQorICAgICAgICAgICAgICAgICAgICB2YXIgaW1nV2lkdGggPSAkKGltZykub3V0ZXJXaWR0aCgpOw0KKyAgICAgICAgICAgICAgICAgICAgdmFyIGlmcmFtZVBvcyA9IGNvbnRleHQuJGlmcm0ub2Zmc2V0KCk7DQorICAgICAgICAgICAgICAgICAgICB2YXIgaW1nUG9zaXRpb24gPSAkKGltZykub2Zmc2V0KCk7ICAgICAgIA0KKyAgICAgICAgICAgICAgICAgICAgdmFyIGlmcm1TY3JvbGxUb3AgPSBNYXRoLm1heChjb250ZXh0Lmlmcm0uY29udGVudFdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLCBjb250ZXh0LiRpZnJtQm9keS5zY3JvbGxUb3AoKSk7DQorICAgICAgICAgICAgICAgICAgICB2YXIgaWZybVNjcm9sbExlZnQgPSBNYXRoLm1heChjb250ZXh0Lmlmcm0uY29udGVudFdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCwgY29udGV4dC4kaWZybUJvZHkuc2Nyb2xsTGVmdCgpKTsNCisNCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuJGRvY0JvZHkuYXBwZW5kKCI8c3BhbiBkYXRhLWd1aWQ9JyIgKyBjb250ZXh0Lmd1aWQgKyAiJyBjbGFzcz0naW1nLXJlc2l6ZS1zZWxlY3Rvcicgc3R5bGU9J21hcmdpbjoxMHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoiICsgKGlmcmFtZVBvcy50b3AgKyBpbWdQb3NpdGlvbi50b3AgLSBpZnJtU2Nyb2xsVG9wICsgaW1nSGVpZ2h0IC0gMTApICsgInB4O2xlZnQ6IiArIChpZnJhbWVQb3MubGVmdCArIGltZ1Bvc2l0aW9uLmxlZnQgLSBpZnJtU2Nyb2xsTGVmdCArIGltZ1dpZHRoIC0gMTApICsgInB4O2JvcmRlcjpzb2xpZCAycHggcmVkO3dpZHRoOjZweDtoZWlnaHQ6NnB4O2N1cnNvcjpzZS1yZXNpemU7ei1pbmRleDoxMDAwOyc+PC9zcGFuPiIpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC4kZG9jQm9keS5hcHBlbmQoIjxzcGFuIGRhdGEtZ3VpZD0nIiArIGNvbnRleHQuZ3VpZCArICInIGNsYXNzPSdpbWctcmVzaXplLXJlZ2lvbiByZWdpb24tdG9wLXJpZ2h0JyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO3RvcDoiICsgKGlmcmFtZVBvcy50b3AgKyBpbWdQb3NpdGlvbi50b3AgLSBpZnJtU2Nyb2xsVG9wKSArICJweDtsZWZ0OiIgKyAoaWZyYW1lUG9zLmxlZnQgKyBpbWdQb3NpdGlvbi5sZWZ0IC0gaWZybVNjcm9sbExlZnQpICsgInB4O2JvcmRlcjpkYXNoZWQgMXB4IGdyZXk7d2lkdGg6IiArIGltZ1dpZHRoICsgInB4O2hlaWdodDowcHg7Jz48L3NwYW4+Iik7DQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LiRkb2NCb2R5LmFwcGVuZCgiPHNwYW4gZGF0YS1ndWlkPSciICsgY29udGV4dC5ndWlkICsgIicgY2xhc3M9J2ltZy1yZXNpemUtcmVnaW9uIHJlZ2lvbi10b3AtZG93bicgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDt0b3A6IiArIChpZnJhbWVQb3MudG9wICsgaW1nUG9zaXRpb24udG9wIC0gaWZybVNjcm9sbFRvcCkgKyAicHg7bGVmdDoiICsgKGlmcmFtZVBvcy5sZWZ0ICsgaW1nUG9zaXRpb24ubGVmdCAtIGlmcm1TY3JvbGxMZWZ0KSArICJweDtib3JkZXI6ZGFzaGVkIDFweCBncmV5O3dpZHRoOjBweDtoZWlnaHQ6IiArIGltZ0hlaWdodCArICJweDsnPjwvc3Bhbj4iKTsNCisNCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuJGRvY0JvZHkuYXBwZW5kKCI8c3BhbiBkYXRhLWd1aWQ9JyIgKyBjb250ZXh0Lmd1aWQgKyAiJyBjbGFzcz0naW1nLXJlc2l6ZS1yZWdpb24gcmVnaW9uLXJpZ2h0LWRvd24nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7dG9wOiIgKyAoaWZyYW1lUG9zLnRvcCArIGltZ1Bvc2l0aW9uLnRvcCAtIGlmcm1TY3JvbGxUb3ApICsgInB4O2xlZnQ6IiArIChpZnJhbWVQb3MubGVmdCArIGltZ1Bvc2l0aW9uLmxlZnQgLSBpZnJtU2Nyb2xsTGVmdCArIGltZ1dpZHRoKSArICJweDtib3JkZXI6ZGFzaGVkIDFweCBncmV5O3dpZHRoOjBweDtoZWlnaHQ6IiArIGltZ0hlaWdodCArICJweDsnPjwvc3Bhbj4iKTsNCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuJGRvY0JvZHkuYXBwZW5kKCI8c3BhbiBkYXRhLWd1aWQ9JyIgKyBjb250ZXh0Lmd1aWQgKyAiJyBjbGFzcz0naW1nLXJlc2l6ZS1yZWdpb24gcmVnaW9uLWRvd24tbGVmdCcgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDt0b3A6IiArIChpZnJhbWVQb3MudG9wICsgaW1nUG9zaXRpb24udG9wIC0gaWZybVNjcm9sbFRvcCArIGltZ0hlaWdodCkgKyAicHg7bGVmdDoiICsgKGlmcmFtZVBvcy5sZWZ0ICsgaW1nUG9zaXRpb24ubGVmdCAtIGlmcm1TY3JvbGxMZWZ0KSArICJweDtib3JkZXI6ZGFzaGVkIDFweCBncmV5O3dpZHRoOiIgKyBpbWdXaWR0aCArICJweDtoZWlnaHQ6MHB4Oyc+PC9zcGFuPiIpOw0KKw0KKw0KKyAgICAgICAgICAgICAgICAgICAgdmFyIGRyYWdTdG9wID0gZnVuY3Rpb24gKCkgeyAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZVJlc2l6ZWluUHJvZ3Jlc3MpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChjdXJyZW50SW1hZ2UpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCJ3aWR0aCIsICQoIi5yZWdpb24tdG9wLXJpZ2h0IikuZmlsdGVyKG1ldGhvZHMuZ3VpZEZpbHRlcihjb250ZXh0KSkud2lkdGgoKSArICJweCIpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdoZWlnaHQnLCAkKCIucmVnaW9uLXRvcC1kb3duIikuZmlsdGVyKG1ldGhvZHMuZ3VpZEZpbHRlcihjb250ZXh0KSkuaGVpZ2h0KCkgKyAicHgiKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcy5yZWZyZXNoKGNvbnRleHQpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGN1cnJlbnRJbWFnZSkuY2xpY2soKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC4kaWZybS50cmlnZ2VyKCd3ZWJraXRyZXNpemUtdXBkYXRlY3JjJywgW21ldGhvZHMuY3JjKGNvbnRleHQuJGlmcm1Cb2R5Lmh0bWwoKSldKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VSZXNpemVpblByb2dyZXNzID0gZmFsc2U7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5ncy5hZnRlclJlc2l6ZSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYWZ0ZXJSZXNpemUoY3VycmVudEltYWdlKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIH07DQorDQorICAgICAgICAgICAgICAgICAgICB2YXIgaWZyYW1lTW91c2VNb3ZlID0gZnVuY3Rpb24gKGUpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2VSZXNpemVpblByb2dyZXNzKSB7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNXaWR0aCA9IGltZ1dpZHRoOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzSGVpZ2h0ID0gaW1nSGVpZ2h0Ow0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNIZWlnaHQgPSBlLnBhZ2VZIC0gaW1nUG9zaXRpb24udG9wOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNXaWR0aCA9IGUucGFnZVggLSBpbWdQb3NpdGlvbi5sZWZ0Ow0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzSGVpZ2h0IDwgMSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzSGVpZ2h0ID0gMTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzV2lkdGggPCAxKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNXaWR0aCA9IDE7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmdzLmtlZXBBc3BlY3RSYXRpbyB8fCBlLmN0cmxLZXkpew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodERpZmYgPSBpbml0aWFsSGVpZ2h0IC0gcmVzSGVpZ2h0Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaGVpZ2h0RGlmZiA8IDApew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodERpZmYgPSBoZWlnaHREaWZmICogLTEuMDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aERpZmYgPSBpbml0aWFsV2lkdGggLSByZXNXaWR0aDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpZHRoRGlmZiA8IDApew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoRGlmZiA9IHdpZHRoRGlmZiAqIC0xLjA7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihoZWlnaHREaWZmID4gd2lkdGhEaWZmKXsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNXaWR0aCA9IHJlc0hlaWdodCAqIGN1cnJlbnRJbWFnZV9XeEhfUmF0ZTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzSGVpZ2h0ID0gcmVzV2lkdGggKiBjdXJyZW50SW1hZ2VfSHhXX1JhdGU7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICANCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiLmltZy1yZXNpemUtc2VsZWN0b3IiKS5maWx0ZXIobWV0aG9kcy5ndWlkRmlsdGVyKGNvbnRleHQpKS5jc3MoInRvcCIsIChpZnJhbWVQb3MudG9wICsgaW1nUG9zaXRpb24udG9wIC0gaWZybVNjcm9sbFRvcCArIHJlc0hlaWdodCAtIDEwKSArICdweCcpLmNzcygibGVmdCIsIChpZnJhbWVQb3MubGVmdCArIGltZ1Bvc2l0aW9uLmxlZnQgLSBpZnJtU2Nyb2xsTGVmdCArIHJlc1dpZHRoIC0gMTApICsgInB4Iik7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIi5yZWdpb24tdG9wLXJpZ2h0IikuZmlsdGVyKG1ldGhvZHMuZ3VpZEZpbHRlcihjb250ZXh0KSkuY3NzKCJ3aWR0aCIsIHJlc1dpZHRoICsgInB4Iik7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIi5yZWdpb24tdG9wLWRvd24iKS5maWx0ZXIobWV0aG9kcy5ndWlkRmlsdGVyKGNvbnRleHQpKS5jc3MoImhlaWdodCIsIHJlc0hlaWdodCArICJweCIpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIucmVnaW9uLXJpZ2h0LWRvd24iKS5maWx0ZXIobWV0aG9kcy5ndWlkRmlsdGVyKGNvbnRleHQpKS5jc3MoImxlZnQiLCAoaWZyYW1lUG9zLmxlZnQgKyBpbWdQb3NpdGlvbi5sZWZ0IC0gaWZybVNjcm9sbExlZnQgKyByZXNXaWR0aCkgKyAicHgiKS5jc3MoImhlaWdodCIsIHJlc0hlaWdodCArICJweCIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIucmVnaW9uLWRvd24tbGVmdCIpLmZpbHRlcihtZXRob2RzLmd1aWRGaWx0ZXIoY29udGV4dCkpLmNzcygidG9wIiwgKGlmcmFtZVBvcy50b3AgKyBpbWdQb3NpdGlvbi50b3AgLSBpZnJtU2Nyb2xsVG9wICsgcmVzSGVpZ2h0KSArICJweCIpLmNzcygid2lkdGgiLCByZXNXaWR0aCArICJweCIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgICAgICAgICB9Ow0KKw0KKw0KKyAgICAgICAgICAgICAgICAgICAgdmFyIHdpbmRvd01vdXNlTW92ZSA9IGZ1bmN0aW9uIChlKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlUmVzaXplaW5Qcm9ncmVzcykgew0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzV2lkdGggPSBpbWdXaWR0aDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc0hlaWdodCA9IGltZ0hlaWdodDsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzSGVpZ2h0ID0gZS5wYWdlWSAtIChpZnJhbWVQb3MudG9wICsgaW1nUG9zaXRpb24udG9wIC0gaWZybVNjcm9sbFRvcCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1dpZHRoID0gZS5wYWdlWCAtIChpZnJhbWVQb3MubGVmdCArIGltZ1Bvc2l0aW9uLmxlZnQgLSBpZnJtU2Nyb2xsTGVmdCk7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNIZWlnaHQgPCAxKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNIZWlnaHQgPSAxOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNXaWR0aCA8IDEpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1dpZHRoID0gMTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2V0dGluZ3Mua2VlcEFzcGVjdFJhdGlvIHx8IGUuY3RybEtleSl7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0RGlmZiA9IGluaXRpYWxIZWlnaHQgLSByZXNIZWlnaHQ7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihoZWlnaHREaWZmIDwgMCl7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0RGlmZiA9IGhlaWdodERpZmYgKiAtMS4wOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoRGlmZiA9IGluaXRpYWxXaWR0aCAtIHJlc1dpZHRoOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2lkdGhEaWZmIDwgMCl7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhEaWZmID0gd2lkdGhEaWZmICogLTEuMDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGhlaWdodERpZmYgPiB3aWR0aERpZmYpew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1dpZHRoID0gcmVzSGVpZ2h0ICogY3VycmVudEltYWdlX1d4SF9SYXRlOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNIZWlnaHQgPSByZXNXaWR0aCAqIGN1cnJlbnRJbWFnZV9IeFdfUmF0ZTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICANCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiLmltZy1yZXNpemUtc2VsZWN0b3IiKS5maWx0ZXIobWV0aG9kcy5ndWlkRmlsdGVyKGNvbnRleHQpKS5jc3MoInRvcCIsIChpZnJhbWVQb3MudG9wICsgaW1nUG9zaXRpb24udG9wIC0gaWZybVNjcm9sbFRvcCArIHJlc0hlaWdodCAtIDEwKSArICdweCcpLmNzcygibGVmdCIsIChpZnJhbWVQb3MubGVmdCArIGltZ1Bvc2l0aW9uLmxlZnQgLSBpZnJtU2Nyb2xsTGVmdCArIHJlc1dpZHRoIC0gMTApICsgInB4Iik7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIi5yZWdpb24tdG9wLXJpZ2h0IikuZmlsdGVyKG1ldGhvZHMuZ3VpZEZpbHRlcihjb250ZXh0KSkuY3NzKCJ3aWR0aCIsIHJlc1dpZHRoICsgInB4Iik7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIi5yZWdpb24tdG9wLWRvd24iKS5maWx0ZXIobWV0aG9kcy5ndWlkRmlsdGVyKGNvbnRleHQpKS5jc3MoImhlaWdodCIsIHJlc0hlaWdodCArICJweCIpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIucmVnaW9uLXJpZ2h0LWRvd24iKS5maWx0ZXIobWV0aG9kcy5ndWlkRmlsdGVyKGNvbnRleHQpKS5jc3MoImxlZnQiLCAoaWZyYW1lUG9zLmxlZnQgKyBpbWdQb3NpdGlvbi5sZWZ0IC0gaWZybVNjcm9sbExlZnQgKyByZXNXaWR0aCkgKyAicHgiKS5jc3MoImhlaWdodCIsIHJlc0hlaWdodCArICJweCIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIucmVnaW9uLWRvd24tbGVmdCIpLmZpbHRlcihtZXRob2RzLmd1aWRGaWx0ZXIoY29udGV4dCkpLmNzcygidG9wIiwgKGlmcmFtZVBvcy50b3AgKyBpbWdQb3NpdGlvbi50b3AgLSBpZnJtU2Nyb2xsVG9wICsgcmVzSGVpZ2h0KSArICJweCIpLmNzcygid2lkdGgiLCByZXNXaWR0aCArICJweCIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgICAgICAgICB9Ow0KKw0KKyAgICAgICAgICAgICAgICAgICAgJCgiLmltZy1yZXNpemUtc2VsZWN0b3IiKS5maWx0ZXIobWV0aG9kcy5ndWlkRmlsdGVyKGNvbnRleHQpKS5tb3VzZWRvd24oZnVuY3Rpb24gKGUpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3MuYmVmb3JlUmVzaXplU3RhcnQpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYmVmb3JlUmVzaXplU3RhcnQoY3VycmVudEltYWdlKTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ0ggPSAkKGN1cnJlbnRJbWFnZSkuaGVpZ2h0KCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ1cgPSAkKGN1cnJlbnRJbWFnZSkud2lkdGgoKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50SW1hZ2VfSHhXX1JhdGUgPSBpbWdIIC8gaW1nVzsNCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50SW1hZ2VfV3hIX1JhdGUgPSBpbWdXIC8gaW1nSDsNCisgICAgICAgICAgICAgICAgICAgICAgICBpZihpbWdIID4gaW1nVyl7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxIZWlnaHQgPSAwOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsV2lkdGggPSAoaW1nSCAtIGltZ1cpICogLTE7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxXaWR0aCA9IDA7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxIZWlnaHQgPSAoaW1nVyAtIGltZ0gpICogLTE7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlUmVzaXplaW5Qcm9ncmVzcyA9IHRydWU7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgICAgICAgICAgICAgfSk7DQorDQorICAgICAgICAgICAgICAgICAgICAkKGNvbnRleHQuaWZybS5jb250ZW50V2luZG93LmRvY3VtZW50KS5tb3VzZXVwKGZ1bmN0aW9uICgpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2VSZXNpemVpblByb2dyZXNzKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdTdG9wKCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgfSk7DQorDQorICAgICAgICAgICAgICAgICAgICAkKHdpbmRvdy5kb2N1bWVudCkubW91c2V1cChmdW5jdGlvbiAoKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlUmVzaXplaW5Qcm9ncmVzcykgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFnU3RvcCgpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIH0pOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgJChjb250ZXh0Lmlmcm0uY29udGVudFdpbmRvdy5kb2N1bWVudCkubW91c2Vtb3ZlKGZ1bmN0aW9uIChlKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lTW91c2VNb3ZlKGUpOw0KKyAgICAgICAgICAgICAgICAgICAgfSk7DQorDQorICAgICAgICAgICAgICAgICAgICAkKHdpbmRvdy5kb2N1bWVudCkubW91c2Vtb3ZlKGZ1bmN0aW9uIChlKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93TW91c2VNb3ZlKGUpOw0KKyAgICAgICAgICAgICAgICAgICAgfSk7DQorDQorICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3MuYWZ0ZXJFbGVtZW50U2VsZWN0KSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYWZ0ZXJFbGVtZW50U2VsZWN0KGN1cnJlbnRJbWFnZSk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0sDQorDQorICAgICAgICAgICAgICAgIHJlYmluZDogZnVuY3Rpb24gKGNvbnRleHQpIHsNCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuJGlmcm0uY29udGVudHMoKS5maW5kKCJpbWciKS5lYWNoKGZ1bmN0aW9uIChpLCB2KSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgJCh2KS51bmJpbmQoJ2NsaWNrJyk7DQorICAgICAgICAgICAgICAgICAgICAgICAgJCh2KS5jbGljayhmdW5jdGlvbiAoZSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQgPT0gdikgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcy5pbWFnZUNsaWNrKGNvbnRleHQsIHYpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQorICAgICAgICAgICAgICAgICAgICB9KTsNCisgICAgICAgICAgICAgICAgfSwNCisgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgIGRlYmluZDogZnVuY3Rpb24gKGNvbnRleHQpIHsNCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuJGlmcm0uY29udGVudHMoKS5maW5kKCJpbWciKS5lYWNoKGZ1bmN0aW9uIChpLCB2KSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgJCh2KS51bmJpbmQoJ2NsaWNrJyk7ICAgICAgICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgICAgICB9KTsNCisgICAgICAgICAgICAgICAgfSwNCisNCisgICAgICAgICAgICAgICAgcmVmcmVzaDogZnVuY3Rpb24gKGNvbnRleHQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMucmViaW5kKGNvbnRleHQpOw0KKyAgICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgICAgICBtZXRob2RzLnJlbW92ZVJlc2l6ZUVsZW1lbnRzKGNvbnRleHQpOw0KKyAgICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRJbWFnZSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5ncy5hZnRlclJlZnJlc2gpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYWZ0ZXJSZWZyZXNoKG51bGwpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgICAgIHZhciBpbWcgPSBjdXJyZW50SW1hZ2U7DQorDQorICAgICAgICAgICAgICAgICAgICB2YXIgaW1nSGVpZ2h0ID0gJChpbWcpLm91dGVySGVpZ2h0KCk7DQorICAgICAgICAgICAgICAgICAgICB2YXIgaW1nV2lkdGggPSAkKGltZykub3V0ZXJXaWR0aCgpOw0KKyAgICAgICAgICAgICAgICAgICAgdmFyIGlmcmFtZVBvcyA9IGNvbnRleHQuJGlmcm0ub2Zmc2V0KCk7DQorICAgICAgICAgICAgICAgICAgICB2YXIgaW1nUG9zaXRpb24gPSAkKGltZykub2Zmc2V0KCk7DQorICAgICAgICAgICAgICAgICAgICB2YXIgaWZybVNjcm9sbFRvcCA9IGNvbnRleHQuJGlmcm1Cb2R5LnNjcm9sbFRvcCgpOw0KKyAgICAgICAgICAgICAgICAgICAgdmFyIGlmcm1TY3JvbGxMZWZ0ID0gY29udGV4dC4kaWZybUJvZHkuc2Nyb2xsTGVmdCgpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC4kZG9jQm9keS5hcHBlbmQoIjxzcGFuIGRhdGEtZ3VpZD0nIiArIGNvbnRleHQuZ3VpZCArICInIGNsYXNzPSdpbWctcmVzaXplLXNlbGVjdG9yJyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7dG9wOiIgKyAoaWZyYW1lUG9zLnRvcCArIGltZ1Bvc2l0aW9uLnRvcCAtIGlmcm1TY3JvbGxUb3AgKyBpbWdIZWlnaHQpICsgInB4O2xlZnQ6IiArIChpZnJhbWVQb3MubGVmdCArIGltZ1Bvc2l0aW9uLmxlZnQgLSBpZnJtU2Nyb2xsTGVmdCArIGltZ1dpZHRoKSArICJweDtib3JkZXI6c29saWQgMnB4IHJlZDt3aWR0aDo2cHg7aGVpZ2h0OjZweDtjdXJzb3I6c2UtcmVzaXplO3otaW5kZXg6MTAwMDsnPjwvc3Bhbj4iKTsNCisNCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuJGRvY0JvZHkuYXBwZW5kKCI8c3BhbiBkYXRhLWd1aWQ9JyIgKyBjb250ZXh0Lmd1aWQgKyAiJyBjbGFzcz0naW1nLXJlc2l6ZS1yZWdpb24nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7dG9wOiIgKyAoaWZyYW1lUG9zLnRvcCArIGltZ1Bvc2l0aW9uLnRvcCAtIGlmcm1TY3JvbGxUb3ApICsgInB4O2xlZnQ6IiArIChpZnJhbWVQb3MubGVmdCArIGltZ1Bvc2l0aW9uLmxlZnQgLSBpZnJtU2Nyb2xsTGVmdCkgKyAicHg7Ym9yZGVyOmRhc2hlZCAxcHggZ3JleTt3aWR0aDoiICsgaW1nV2lkdGggKyAicHg7aGVpZ2h0OjBweDsnPjwvc3Bhbj4iKTsNCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuJGRvY0JvZHkuYXBwZW5kKCI8c3BhbiBkYXRhLWd1aWQ9JyIgKyBjb250ZXh0Lmd1aWQgKyAiJyBjbGFzcz0naW1nLXJlc2l6ZS1yZWdpb24nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7dG9wOiIgKyAoaWZyYW1lUG9zLnRvcCArIGltZ1Bvc2l0aW9uLnRvcCAtIGlmcm1TY3JvbGxUb3ApICsgInB4O2xlZnQ6IiArIChpZnJhbWVQb3MubGVmdCArIGltZ1Bvc2l0aW9uLmxlZnQgLSBpZnJtU2Nyb2xsTGVmdCkgKyAicHg7Ym9yZGVyOmRhc2hlZCAxcHggZ3JleTt3aWR0aDowcHg7aGVpZ2h0OiIgKyBpbWdIZWlnaHQgKyAicHg7Jz48L3NwYW4+Iik7DQorDQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LiRkb2NCb2R5LmFwcGVuZCgiPHNwYW4gZGF0YS1ndWlkPSciICsgY29udGV4dC5ndWlkICsgIicgY2xhc3M9J2ltZy1yZXNpemUtcmVnaW9uJyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO3RvcDoiICsgKGlmcmFtZVBvcy50b3AgKyBpbWdQb3NpdGlvbi50b3AgLSBpZnJtU2Nyb2xsVG9wKSArICJweDtsZWZ0OiIgKyAoaWZyYW1lUG9zLmxlZnQgKyBpbWdQb3NpdGlvbi5sZWZ0IC0gaWZybVNjcm9sbExlZnQgKyBpbWdXaWR0aCkgKyAicHg7Ym9yZGVyOmRhc2hlZCAxcHggZ3JleTt3aWR0aDowcHg7aGVpZ2h0OiIgKyBpbWdIZWlnaHQgKyAicHg7Jz48L3NwYW4+Iik7DQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LiRkb2NCb2R5LmFwcGVuZCgiPHNwYW4gZGF0YS1ndWlkPSciICsgY29udGV4dC5ndWlkICsgIicgY2xhc3M9J2ltZy1yZXNpemUtcmVnaW9uJyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO3RvcDoiICsgKGlmcmFtZVBvcy50b3AgKyBpbWdQb3NpdGlvbi50b3AgLSBpZnJtU2Nyb2xsVG9wICsgaW1nSGVpZ2h0KSArICJweDtsZWZ0OiIgKyAoaWZyYW1lUG9zLmxlZnQgKyBpbWdQb3NpdGlvbi5sZWZ0IC0gaWZybVNjcm9sbExlZnQpICsgInB4O2JvcmRlcjpkYXNoZWQgMXB4IGdyZXk7d2lkdGg6IiArIGltZ1dpZHRoICsgInB4O2hlaWdodDowcHg7Jz48L3NwYW4+Iik7DQorDQorICAgICAgICAgICAgICAgICAgICBsYXN0Q3JjID0gbWV0aG9kcy5jcmMoY29udGV4dC4kaWZybUJvZHkuaHRtbCgpKTsNCisNCisgICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5ncy5hZnRlclJlZnJlc2gpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5hZnRlclJlZnJlc2goY3VycmVudEltYWdlKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfSwNCisNCisgICAgICAgICAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7DQorICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEltYWdlICE9IG51bGwpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50SW1hZ2UgPSBudWxsOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlUmVzaXplaW5Qcm9ncmVzcyA9IGZhbHNlOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMucmVtb3ZlUmVzaXplRWxlbWVudHMoY29udGV4dCk7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLmFmdGVyUmVzZXQpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYWZ0ZXJSZXNldCgpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMucmViaW5kKGNvbnRleHQpOw0KKyAgICAgICAgICAgICAgICB9LA0KKw0KKyAgICAgICAgICAgICAgICBjcmM6IGZ1bmN0aW9uIChzdHIpIHsNCisgICAgICAgICAgICAgICAgICAgIHZhciBoYXNoID0gMDsNCisgICAgICAgICAgICAgICAgICAgIGlmIChzdHIubGVuZ3RoID09IDApIHJldHVybiBoYXNoOw0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgPSBzdHIuY2hhckNvZGVBdChpKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBjaGFyOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc2ggPSBoYXNoICYgaGFzaDsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNoOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfTsNCisNCisgICAgICAgICAgICB2YXIgaWZybSA9IHRoaXM7DQorICAgICAgICAgICAgdmFyICRpZnJtID0gJCh0aGlzKTsNCisgICAgICAgICAgICB2YXIgJGRvY0JvZHkgPSAkKCJib2R5Iik7DQorICAgICAgICAgICAgdmFyICRpZnJtQm9keSA9ICRpZnJtLmNvbnRlbnRzKCkuZmluZCgiYm9keSIpOw0KKw0KKyAgICAgICAgICAgIGxhc3RDcmMgPSBtZXRob2RzLmNyYygkaWZybUJvZHkuaHRtbCgpKTsNCisNCisgICAgICAgICAgICBpZiAoISRpZnJtLmlzKCdpZnJhbWUnKSkgew0KKyAgICAgICAgICAgICAgICByZXR1cm47DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIHZhciBjb250ZXh0ID0gew0KKyAgICAgICAgICAgICAgICBpZnJtOiBpZnJtLA0KKyAgICAgICAgICAgICAgICAkaWZybTogJGlmcm0sDQorICAgICAgICAgICAgICAgICRkb2NCb2R5OiAkZG9jQm9keSwNCisgICAgICAgICAgICAgICAgJGlmcm1Cb2R5OiAkaWZybUJvZHksDQorICAgICAgICAgICAgICAgIGd1aWQ6IG1ldGhvZHMuZ3VpZEdlbmVyYXRvcigpDQorICAgICAgICAgICAgfTsNCisNCisgICAgICAgICAgICBpZnJtLmNvbnRlbnRXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24gKCkgew0KKyAgICAgICAgICAgICAgICBtZXRob2RzLnJlc2V0KGNvbnRleHQpOw0KKyAgICAgICAgICAgIH0sIGZhbHNlKTsNCisNCisgICAgICAgICAgICAkKGlmcm0uY29udGVudFdpbmRvdy5kb2N1bWVudCkubW91c2V1cChmdW5jdGlvbiAoZSkgew0KKyAgICAgICAgICAgICAgICBpZiAoIWltYWdlUmVzaXplaW5Qcm9ncmVzcykgew0KKyAgICAgICAgICAgICAgICAgICAgdmFyIHggPSAoZS54KSA/IGUueCA6IGUuY2xpZW50WDsNCisgICAgICAgICAgICAgICAgICAgIHZhciB5ID0gKGUueSkgPyBlLnkgOiBlLmNsaWVudFk7DQorICAgICAgICAgICAgICAgICAgICB2YXIgbW91c2VVcEVsZW1lbnQgPSBpZnJtLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh4LCB5KTsNCisgICAgICAgICAgICAgICAgICAgIGlmIChtb3VzZVVwRWxlbWVudCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZ0VsZW1lbnQ7DQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRzZWxlY3QgPSBjb250ZXh0LiRpZnJtLmNvbnRlbnRzKCkuZmluZChzZXR0aW5ncy5zZWxlY3Rvcik7DQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRwYXJlbnRzU2VsZWN0ID0gJChtb3VzZVVwRWxlbWVudCkucGFyZW50cygpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHBzaSA9IDA7IHBzaSA8ICRwYXJlbnRzU2VsZWN0Lmxlbmd0aDsgcHNpKyspIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAkc2VsZWN0Lmxlbmd0aDsgaSsrKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHNlbGVjdFtpXSA9PSAkcGFyZW50c1NlbGVjdFtwc2ldKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmdFbGVtZW50ID0gJHNlbGVjdFtpXTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmdFbGVtZW50KSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoaW5nRWxlbWVudCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RzLnJlc2V0KGNvbnRleHQpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcy5pbWFnZUNsaWNrKGNvbnRleHQsIG1hdGNoaW5nRWxlbWVudCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfSk7ICAgICAgICAgICAgDQorDQorICAgICAgICAgICAgJChkb2N1bWVudCkua2V5dXAoZnVuY3Rpb24gKGUpIHsNCisgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAyNykgew0KKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kcy5yZXNldChjb250ZXh0KTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0pOw0KKw0KKyAgICAgICAgICAgICQoaWZybS5jb250ZW50V2luZG93LmRvY3VtZW50KS5rZXl1cChmdW5jdGlvbiAoZSkgew0KKyAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDI3KSB7DQorICAgICAgICAgICAgICAgICAgICBtZXRob2RzLnJlc2V0KGNvbnRleHQpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfSk7DQorDQorDQorICAgICAgICAgICAgaWYgKCFpZnJtLmNyY0NoZWNrZXIpIHsNCisgICAgICAgICAgICAgICAgaWZybS5jcmNDaGVja2VyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgew0KKyAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRDcmMgPSBtZXRob2RzLmNyYygkaWZybUJvZHkuaHRtbCgpKTsNCisgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Q3JjICE9IGN1cnJlbnRDcmMpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAkaWZybS50cmlnZ2VyKCd3ZWJraXRyZXNpemUtY3JjY2hhbmdlZCcsIFtjdXJyZW50Q3JjXSk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0sIDEwMDApOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAkKHdpbmRvdykucmVzaXplKGZ1bmN0aW9uKCl7DQorICAgICAgICAgICAgICAgIG1ldGhvZHMucmVzZXQoY29udGV4dCk7DQorICAgICAgICAgICAgfSk7DQorDQorICAgICAgICAgICAgJGlmcm0uYmluZCgnd2Via2l0cmVzaXplLWNyY2NoYW5nZWQnLCBmdW5jdGlvbiAoZXZlbnQsIGNyYykgew0KKyAgICAgICAgICAgICAgICBsYXN0Q3JjID0gY3JjOw0KKyAgICAgICAgICAgICAgICBtZXRob2RzLnJlc2V0KGNvbnRleHQpOw0KKyAgICAgICAgICAgIH0pOw0KKw0KKyAgICAgICAgICAgICRpZnJtLmJpbmQoJ3dlYmtpdHJlc2l6ZS11cGRhdGVjcmMnLCBmdW5jdGlvbiAoZXZlbnQsIGNyYykgeyAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgbGFzdENyYyA9IGNyYzsNCisgICAgICAgICAgICB9KTsNCisgICAgICAgICAgICANCisgICAgICAgICAgICBtZXRob2RzLnJlZnJlc2goY29udGV4dCk7DQorDQorICAgICAgICAgICAgaWZybS5fV2ViS2l0SW1hZ2VSZXNpemVFbmQgICA9IGZ1bmN0aW9uKCl7IG1ldGhvZHMucmVzZXQoY29udGV4dCk7IG1ldGhvZHMucmVtb3ZlUmVzaXplRWxlbWVudHMoY29udGV4dCk7IG1ldGhvZHMuZGViaW5kKGNvbnRleHQpOyB9DQorICAgICAgICAgICAgaWZybS5fV2ViS2l0SW1hZ2VSZXNpemVTdGFydCA9IGZ1bmN0aW9uKCl7IG1ldGhvZHMucmVzZXQoY29udGV4dCk7IGNvbnRleHQuJGlmcm1Cb2R5ID0gJGlmcm0uY29udGVudHMoKS5maW5kKCJib2R5Iik7IH0NCisgICAgICAgIH0pOw0KKyAgICB9Ow0KKw0KKw0KKyAgICAkLmZuLndlYmtpdHRhYmxlcmVzaXplID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsNCisgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgew0KKw0KKyAgICAgICAgICAgIGlmICghJC5icm93c2VyLndlYmtpdCkgew0KKyAgICAgICAgICAgIC8vICAgIHJldHVybjsNCisgICAgICAgICAgICB9DQorDQorDQorICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gJC5leHRlbmQoew0KKyAgICAgICAgICAgIH0sIG9wdGlvbnMpOw0KKw0KKyAgICAgICAgICAgIHZhciBsYXN0Q3JjOw0KKyAgICAgICAgICAgIHZhciB0YWJsZVJlc2l6ZWluUHJvZ3Jlc3MgPSBmYWxzZTsNCisgICAgICAgICAgICB2YXIgY3VycmVudHRhYmxlOw0KKw0KKyAgICAgICAgICAgIHZhciBtZXRob2RzID0gew0KKw0KKyAgICAgICAgICAgICAgICBndWlkR2VuZXJhdG9yOiBmdW5jdGlvbigpIHsNCisgICAgICAgICAgICAgICAgICAgIHZhciBTNCA9IGZ1bmN0aW9uKCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoKDErTWF0aC5yYW5kb20oKSkqMHgxMDAwMCl8MCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKTsNCisgICAgICAgICAgICAgICAgICAgIH07DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFM0KCkrUzQoKSsiLSIrUzQoKSsiLSIrUzQoKSsiLSIrUzQoKSsiLSIrUzQoKStTNCgpK1M0KCkpOw0KKyAgICAgICAgICAgICAgICB9LA0KKw0KKyAgICAgICAgICAgICAgICBndWlkRmlsdGVyOiBmdW5jdGlvbihjb250ZXh0KXsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiW2RhdGEtZ3VpZD0nIiArIGNvbnRleHQuZ3VpZCArICInXSI7DQorICAgICAgICAgICAgICAgIH0sDQorDQorICAgICAgICAgICAgICAgIHJlbW92ZVJlc2l6ZUVsZW1lbnRzOiBmdW5jdGlvbiAoY29udGV4dCkgew0KKyAgICAgICAgICAgICAgICAgICAgJCgiLnJlc2l6ZS1zZWxlY3RvciIpLmZpbHRlcihtZXRob2RzLmd1aWRGaWx0ZXIoY29udGV4dCkpLnJlbW92ZSgpOw0KKyAgICAgICAgICAgICAgICAgICAgJCgiLnJlc2l6ZS1yZWdpb24iKS5maWx0ZXIobWV0aG9kcy5ndWlkRmlsdGVyKGNvbnRleHQpKS5yZW1vdmUoKTsNCisgICAgICAgICAgICAgICAgfSwNCisNCisgICAgICAgICAgICAgICAgdGFibGVDbGljazogZnVuY3Rpb24gKGNvbnRleHQsIHRibCkgew0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLmJlZm9yZUVsZW1lbnRTZWxlY3QpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5iZWZvcmVFbGVtZW50U2VsZWN0KHRibCk7DQorICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICBtZXRob2RzLnJlbW92ZVJlc2l6ZUVsZW1lbnRzKGNvbnRleHQpOw0KKyAgICAgICAgICAgICAgICAgICAgY3VycmVudHRhYmxlID0gdGJsOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgdmFyIHRibEhlaWdodCA9ICQodGJsKS5vdXRlckhlaWdodCgpOw0KKyAgICAgICAgICAgICAgICAgICAgdmFyIHRibFdpZHRoID0gJCh0YmwpLm91dGVyV2lkdGgoKTsNCisgICAgICAgICAgICAgICAgICAgIHZhciBpZnJhbWVQb3MgPSBjb250ZXh0LiRpZnJtLm9mZnNldCgpOw0KKyAgICAgICAgICAgICAgICAgICAgdmFyIHRibFBvc2l0aW9uID0gJCh0YmwpLm9mZnNldCgpOw0KKyAgICAgICAgICAgICAgICAgICAgdmFyIGlmcm1TY3JvbGxUb3AgPSBNYXRoLm1heChjb250ZXh0Lmlmcm0uY29udGVudFdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLCBjb250ZXh0LiRpZnJtQm9keS5zY3JvbGxUb3AoKSk7DQorICAgICAgICAgICAgICAgICAgICB2YXIgaWZybVNjcm9sbExlZnQgPSBNYXRoLm1heChjb250ZXh0Lmlmcm0uY29udGVudFdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCwgY29udGV4dC4kaWZybUJvZHkuc2Nyb2xsTGVmdCgpKTsNCisNCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuJGRvY0JvZHkuYXBwZW5kKCI8c3BhbiBkYXRhLWd1aWQ9JyIgKyBjb250ZXh0Lmd1aWQgKyAiJyBjbGFzcz0ncmVzaXplLXNlbGVjdG9yJyBzdHlsZT0nbWFyZ2luOjEwcHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOiIgKyAoaWZyYW1lUG9zLnRvcCArIHRibFBvc2l0aW9uLnRvcCAtIGlmcm1TY3JvbGxUb3AgKyB0YmxIZWlnaHQgLSAxMCkgKyAicHg7bGVmdDoiICsgKGlmcmFtZVBvcy5sZWZ0ICsgdGJsUG9zaXRpb24ubGVmdCAtIGlmcm1TY3JvbGxMZWZ0ICsgdGJsV2lkdGggLSAxMCkgKyAicHg7Ym9yZGVyOnNvbGlkIDJweCByZWQ7d2lkdGg6NnB4O2hlaWdodDo2cHg7Y3Vyc29yOnNlLXJlc2l6ZTt6LWluZGV4OjEwMDA7Jz48L3NwYW4+Iik7DQorDQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LiRkb2NCb2R5LmFwcGVuZCgiPHNwYW4gZGF0YS1ndWlkPSciICsgY29udGV4dC5ndWlkICsgIicgY2xhc3M9J3Jlc2l6ZS1yZWdpb24gcmVnaW9uLXRvcC1yaWdodCcgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDt0b3A6IiArIChpZnJhbWVQb3MudG9wICsgdGJsUG9zaXRpb24udG9wIC0gaWZybVNjcm9sbFRvcCkgKyAicHg7bGVmdDoiICsgKGlmcmFtZVBvcy5sZWZ0ICsgdGJsUG9zaXRpb24ubGVmdCAtIGlmcm1TY3JvbGxMZWZ0KSArICJweDtib3JkZXI6ZGFzaGVkIDFweCBncmV5O3dpZHRoOiIgKyB0YmxXaWR0aCArICJweDtoZWlnaHQ6MHB4Oyc+PC9zcGFuPiIpOw0KKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC4kZG9jQm9keS5hcHBlbmQoIjxzcGFuIGRhdGEtZ3VpZD0nIiArIGNvbnRleHQuZ3VpZCArICInIGNsYXNzPSdyZXNpemUtcmVnaW9uIHJlZ2lvbi10b3AtZG93bicgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDt0b3A6IiArIChpZnJhbWVQb3MudG9wICsgdGJsUG9zaXRpb24udG9wIC0gaWZybVNjcm9sbFRvcCkgKyAicHg7bGVmdDoiICsgKGlmcmFtZVBvcy5sZWZ0ICsgdGJsUG9zaXRpb24ubGVmdCAtIGlmcm1TY3JvbGxMZWZ0KSArICJweDtib3JkZXI6ZGFzaGVkIDFweCBncmV5O3dpZHRoOjBweDtoZWlnaHQ6IiArIHRibEhlaWdodCArICJweDsnPjwvc3Bhbj4iKTsNCisNCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuJGRvY0JvZHkuYXBwZW5kKCI8c3BhbiBkYXRhLWd1aWQ9JyIgKyBjb250ZXh0Lmd1aWQgKyAiJyBjbGFzcz0ncmVzaXplLXJlZ2lvbiByZWdpb24tcmlnaHQtZG93bicgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDt0b3A6IiArIChpZnJhbWVQb3MudG9wICsgdGJsUG9zaXRpb24udG9wIC0gaWZybVNjcm9sbFRvcCkgKyAicHg7bGVmdDoiICsgKGlmcmFtZVBvcy5sZWZ0ICsgdGJsUG9zaXRpb24ubGVmdCAtIGlmcm1TY3JvbGxMZWZ0ICsgdGJsV2lkdGgpICsgInB4O2JvcmRlcjpkYXNoZWQgMXB4IGdyZXk7d2lkdGg6MHB4O2hlaWdodDoiICsgdGJsSGVpZ2h0ICsgInB4Oyc+PC9zcGFuPiIpOw0KKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC4kZG9jQm9keS5hcHBlbmQoIjxzcGFuIGRhdGEtZ3VpZD0nIiArIGNvbnRleHQuZ3VpZCArICInIGNsYXNzPSdyZXNpemUtcmVnaW9uIHJlZ2lvbi1kb3duLWxlZnQnIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7dG9wOiIgKyAoaWZyYW1lUG9zLnRvcCArIHRibFBvc2l0aW9uLnRvcCAtIGlmcm1TY3JvbGxUb3AgKyB0YmxIZWlnaHQpICsgInB4O2xlZnQ6IiArIChpZnJhbWVQb3MubGVmdCArIHRibFBvc2l0aW9uLmxlZnQgLSBpZnJtU2Nyb2xsTGVmdCkgKyAicHg7Ym9yZGVyOmRhc2hlZCAxcHggZ3JleTt3aWR0aDoiICsgdGJsV2lkdGggKyAicHg7aGVpZ2h0OjBweDsnPjwvc3Bhbj4iKTsNCisNCisNCisgICAgICAgICAgICAgICAgICAgIHZhciBkcmFnU3RvcCA9IGZ1bmN0aW9uICgpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFibGVSZXNpemVpblByb2dyZXNzKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoY3VycmVudHRhYmxlKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygid2lkdGgiLCAkKCIucmVnaW9uLXRvcC1yaWdodCIpLmZpbHRlcihtZXRob2RzLmd1aWRGaWx0ZXIoY29udGV4dCkpLndpZHRoKCkgKyAicHgiKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygnaGVpZ2h0JywgJCgiLnJlZ2lvbi10b3AtZG93biIpLmZpbHRlcihtZXRob2RzLmd1aWRGaWx0ZXIoY29udGV4dCkpLmhlaWdodCgpICsgInB4Iik7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMucmVmcmVzaChjb250ZXh0KTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChjdXJyZW50dGFibGUpLmNsaWNrKCk7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuJGlmcm0udHJpZ2dlcignd2Via2l0cmVzaXplLXVwZGF0ZWNyYycsIFttZXRob2RzLmNyYyhjb250ZXh0LiRpZnJtQm9keS5odG1sKCkpXSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuJGlmcm0udHJpZ2dlcignd2Via2l0cmVzaXplLXRhYmxlLXJlc2l6ZWQnLCBbXSk7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlUmVzaXplaW5Qcm9ncmVzcyA9IGZhbHNlOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3MuYWZ0ZXJSZXNpemUpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmFmdGVyUmVzaXplKGN1cnJlbnR0YWJsZSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICB9Ow0KKw0KKyAgICAgICAgICAgICAgICAgICAgdmFyIGlmcmFtZU1vdXNlTW92ZSA9IGZ1bmN0aW9uIChlKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlUmVzaXplaW5Qcm9ncmVzcykgew0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzV2lkdGggPSB0YmxXaWR0aDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc0hlaWdodCA9IHRibEhlaWdodDsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzSGVpZ2h0ID0gZS5wYWdlWSAtIHRibFBvc2l0aW9uLnRvcDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzV2lkdGggPSBlLnBhZ2VYIC0gdGJsUG9zaXRpb24ubGVmdDsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc0hlaWdodCA8IDEpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc0hlaWdodCA9IDE7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc1dpZHRoIDwgMSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzV2lkdGggPSAxOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIi5yZXNpemUtc2VsZWN0b3IiKS5maWx0ZXIobWV0aG9kcy5ndWlkRmlsdGVyKGNvbnRleHQpKS5jc3MoInRvcCIsIChpZnJhbWVQb3MudG9wICsgdGJsUG9zaXRpb24udG9wIC0gaWZybVNjcm9sbFRvcCArIHJlc0hlaWdodCAtIDEwKSArICdweCcpLmNzcygibGVmdCIsIChpZnJhbWVQb3MubGVmdCArIHRibFBvc2l0aW9uLmxlZnQgLSBpZnJtU2Nyb2xsTGVmdCArIHJlc1dpZHRoIC0gMTApICsgInB4Iik7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIi5yZWdpb24tdG9wLXJpZ2h0IikuZmlsdGVyKG1ldGhvZHMuZ3VpZEZpbHRlcihjb250ZXh0KSkuY3NzKCJ3aWR0aCIsIHJlc1dpZHRoICsgInB4Iik7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIi5yZWdpb24tdG9wLWRvd24iKS5maWx0ZXIobWV0aG9kcy5ndWlkRmlsdGVyKGNvbnRleHQpKS5jc3MoImhlaWdodCIsIHJlc0hlaWdodCArICJweCIpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIucmVnaW9uLXJpZ2h0LWRvd24iKS5maWx0ZXIobWV0aG9kcy5ndWlkRmlsdGVyKGNvbnRleHQpKS5jc3MoImxlZnQiLCAoaWZyYW1lUG9zLmxlZnQgKyB0YmxQb3NpdGlvbi5sZWZ0IC0gaWZybVNjcm9sbExlZnQgKyByZXNXaWR0aCkgKyAicHgiKS5jc3MoImhlaWdodCIsIHJlc0hlaWdodCArICJweCIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIucmVnaW9uLWRvd24tbGVmdCIpLmZpbHRlcihtZXRob2RzLmd1aWRGaWx0ZXIoY29udGV4dCkpLmNzcygidG9wIiwgKGlmcmFtZVBvcy50b3AgKyB0YmxQb3NpdGlvbi50b3AgLSBpZnJtU2Nyb2xsVG9wICsgcmVzSGVpZ2h0KSArICJweCIpLmNzcygid2lkdGgiLCByZXNXaWR0aCArICJweCIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgICAgICAgICB9Ow0KKw0KKw0KKyAgICAgICAgICAgICAgICAgICAgdmFyIHdpbmRvd01vdXNlTW92ZSA9IGZ1bmN0aW9uIChlKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlUmVzaXplaW5Qcm9ncmVzcykgew0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzV2lkdGggPSB0YmxXaWR0aDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc0hlaWdodCA9IHRibEhlaWdodDsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzSGVpZ2h0ID0gZS5wYWdlWSAtIChpZnJhbWVQb3MudG9wICsgdGJsUG9zaXRpb24udG9wIC0gaWZybVNjcm9sbFRvcCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1dpZHRoID0gZS5wYWdlWCAtIChpZnJhbWVQb3MubGVmdCArIHRibFBvc2l0aW9uLmxlZnQgLSBpZnJtU2Nyb2xsTGVmdCk7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNIZWlnaHQgPCAxKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNIZWlnaHQgPSAxOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNXaWR0aCA8IDEpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1dpZHRoID0gMTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIucmVzaXplLXNlbGVjdG9yIikuZmlsdGVyKG1ldGhvZHMuZ3VpZEZpbHRlcihjb250ZXh0KSkuY3NzKCJ0b3AiLCAoaWZyYW1lUG9zLnRvcCArIHRibFBvc2l0aW9uLnRvcCAtIGlmcm1TY3JvbGxUb3AgKyByZXNIZWlnaHQgLSAxMCkgKyAncHgnKS5jc3MoImxlZnQiLCAoaWZyYW1lUG9zLmxlZnQgKyB0YmxQb3NpdGlvbi5sZWZ0IC0gaWZybVNjcm9sbExlZnQgKyByZXNXaWR0aCAtIDEwKSArICJweCIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIucmVnaW9uLXRvcC1yaWdodCIpLmZpbHRlcihtZXRob2RzLmd1aWRGaWx0ZXIoY29udGV4dCkpLmNzcygid2lkdGgiLCByZXNXaWR0aCArICJweCIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIucmVnaW9uLXRvcC1kb3duIikuZmlsdGVyKG1ldGhvZHMuZ3VpZEZpbHRlcihjb250ZXh0KSkuY3NzKCJoZWlnaHQiLCByZXNIZWlnaHQgKyAicHgiKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiLnJlZ2lvbi1yaWdodC1kb3duIikuZmlsdGVyKG1ldGhvZHMuZ3VpZEZpbHRlcihjb250ZXh0KSkuY3NzKCJsZWZ0IiwgKGlmcmFtZVBvcy5sZWZ0ICsgdGJsUG9zaXRpb24ubGVmdCAtIGlmcm1TY3JvbGxMZWZ0ICsgcmVzV2lkdGgpICsgInB4IikuY3NzKCJoZWlnaHQiLCByZXNIZWlnaHQgKyAicHgiKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiLnJlZ2lvbi1kb3duLWxlZnQiKS5maWx0ZXIobWV0aG9kcy5ndWlkRmlsdGVyKGNvbnRleHQpKS5jc3MoInRvcCIsIChpZnJhbWVQb3MudG9wICsgdGJsUG9zaXRpb24udG9wIC0gaWZybVNjcm9sbFRvcCArIHJlc0hlaWdodCkgKyAicHgiKS5jc3MoIndpZHRoIiwgcmVzV2lkdGggKyAicHgiKTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgICAgICAgICAgICAgfTsNCisNCisgICAgICAgICAgICAgICAgICAgICQoIi5yZXNpemUtc2VsZWN0b3IiKS5maWx0ZXIobWV0aG9kcy5ndWlkRmlsdGVyKGNvbnRleHQpKS5tb3VzZWRvd24oZnVuY3Rpb24gKGUpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3MuYmVmb3JlUmVzaXplU3RhcnQpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYmVmb3JlUmVzaXplU3RhcnQoY3VycmVudHRhYmxlKTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVSZXNpemVpblByb2dyZXNzID0gdHJ1ZTsNCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgICAgICAgICB9KTsNCisNCisgICAgICAgICAgICAgICAgICAgICQoIioiKS5tb3VzZXVwKGZ1bmN0aW9uICgpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFibGVSZXNpemVpblByb2dyZXNzKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdTdG9wKCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgfSk7DQorDQorICAgICAgICAgICAgICAgICAgICAkKGNvbnRleHQuaWZybS5jb250ZW50V2luZG93KS5tb3VzZW1vdmUoZnVuY3Rpb24gKGUpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWVNb3VzZU1vdmUoZSk7DQorICAgICAgICAgICAgICAgICAgICB9KTsNCisNCisgICAgICAgICAgICAgICAgICAgICQod2luZG93KS5tb3VzZW1vdmUoZnVuY3Rpb24gKGUpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dNb3VzZU1vdmUoZSk7DQorICAgICAgICAgICAgICAgICAgICB9KTsNCisNCisgICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5ncy5hZnRlckVsZW1lbnRTZWxlY3QpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5hZnRlckVsZW1lbnRTZWxlY3QoY3VycmVudHRhYmxlKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfSwNCisNCisgICAgICAgICAgICAgICAgcmViaW5kOiBmdW5jdGlvbiAoY29udGV4dCkgew0KKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC4kaWZybS5jb250ZW50cygpLmZpbmQoInRhYmxlIikuZWFjaChmdW5jdGlvbiAoaSwgdikgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICQodikudW5iaW5kKCdjbGljaycpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICQodikuY2xpY2soZnVuY3Rpb24gKGUpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0ID09IHYgfHwgKCgkKGUudGFyZ2V0KS5pcygndGQnKXx8JChlLnRhcmdldCkuaXMoJ3RoJykpICYmICQoZS50YXJnZXQpLnBhcmVudHMoInRhYmxlIilbMF0gPT0gdikpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMudGFibGVDbGljayhjb250ZXh0LCB2KTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KKyAgICAgICAgICAgICAgICAgICAgfSk7DQorICAgICAgICAgICAgICAgIH0sDQorDQorICAgICAgICAgICAgICAgIGRlYmluZDogZnVuY3Rpb24gKGNvbnRleHQpIHsNCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuJGlmcm0uY29udGVudHMoKS5maW5kKCJ0YWJsZSIpLmVhY2goZnVuY3Rpb24gKGksIHYpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAkKHYpLnVuYmluZCgnY2xpY2snKTsgICAgICAgICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgICAgIH0pOw0KKyAgICAgICAgICAgICAgICB9LA0KKw0KKyAgICAgICAgICAgICAgICByZWZyZXNoOiBmdW5jdGlvbiAoY29udGV4dCkgew0KKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kcy5yZWJpbmQoY29udGV4dCk7DQorDQorICAgICAgICAgICAgICAgICAgICBtZXRob2RzLnJlbW92ZVJlc2l6ZUVsZW1lbnRzKGNvbnRleHQpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50dGFibGUpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3MuYWZ0ZXJSZWZyZXNoKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmFmdGVyUmVmcmVzaChudWxsKTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgdmFyIHRibCA9IGN1cnJlbnR0YWJsZTsNCisNCisgICAgICAgICAgICAgICAgICAgIHZhciB0YmxIZWlnaHQgPSAkKHRibCkub3V0ZXJIZWlnaHQoKTsNCisgICAgICAgICAgICAgICAgICAgIHZhciB0YmxXaWR0aCA9ICQodGJsKS5vdXRlcldpZHRoKCk7DQorICAgICAgICAgICAgICAgICAgICB2YXIgaWZyYW1lUG9zID0gY29udGV4dC4kaWZybS5vZmZzZXQoKTsNCisgICAgICAgICAgICAgICAgICAgIHZhciB0YmxQb3NpdGlvbiA9ICQodGJsKS5vZmZzZXQoKTsNCisgICAgICAgICAgICAgICAgICAgIHZhciBpZnJtU2Nyb2xsVG9wID0gY29udGV4dC4kaWZybUJvZHkuc2Nyb2xsVG9wKCk7DQorICAgICAgICAgICAgICAgICAgICB2YXIgaWZybVNjcm9sbExlZnQgPSBjb250ZXh0LiRpZnJtQm9keS5zY3JvbGxMZWZ0KCk7DQorDQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LiRkb2NCb2R5LmFwcGVuZCgiPHNwYW4gZGF0YS1ndWlkPSciICsgY29udGV4dC5ndWlkICsgIicgY2xhc3M9J3Jlc2l6ZS1zZWxlY3Rvcicgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3RvcDoiICsgKGlmcmFtZVBvcy50b3AgKyB0YmxQb3NpdGlvbi50b3AgLSBpZnJtU2Nyb2xsVG9wICsgdGJsSGVpZ2h0KSArICJweDtsZWZ0OiIgKyAoaWZyYW1lUG9zLmxlZnQgKyB0YmxQb3NpdGlvbi5sZWZ0IC0gaWZybVNjcm9sbExlZnQgKyB0YmxXaWR0aCkgKyAicHg7Ym9yZGVyOnNvbGlkIDJweCByZWQ7d2lkdGg6NnB4O2hlaWdodDo2cHg7Y3Vyc29yOnNlLXJlc2l6ZTt6LWluZGV4OjEwMDA7Jz48L3NwYW4+Iik7DQorDQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LiRkb2NCb2R5LmFwcGVuZCgiPHNwYW4gZGF0YS1ndWlkPSciICsgY29udGV4dC5ndWlkICsgIicgY2xhc3M9J3Jlc2l6ZS1yZWdpb24nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7dG9wOiIgKyAoaWZyYW1lUG9zLnRvcCArIHRibFBvc2l0aW9uLnRvcCAtIGlmcm1TY3JvbGxUb3ApICsgInB4O2xlZnQ6IiArIChpZnJhbWVQb3MubGVmdCArIHRibFBvc2l0aW9uLmxlZnQgLSBpZnJtU2Nyb2xsTGVmdCkgKyAicHg7Ym9yZGVyOmRhc2hlZCAxcHggZ3JleTt3aWR0aDoiICsgdGJsV2lkdGggKyAicHg7aGVpZ2h0OjBweDsnPjwvc3Bhbj4iKTsNCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuJGRvY0JvZHkuYXBwZW5kKCI8c3BhbiBkYXRhLWd1aWQ9JyIgKyBjb250ZXh0Lmd1aWQgKyAiJyBjbGFzcz0ncmVzaXplLXJlZ2lvbicgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDt0b3A6IiArIChpZnJhbWVQb3MudG9wICsgdGJsUG9zaXRpb24udG9wIC0gaWZybVNjcm9sbFRvcCkgKyAicHg7bGVmdDoiICsgKGlmcmFtZVBvcy5sZWZ0ICsgdGJsUG9zaXRpb24ubGVmdCAtIGlmcm1TY3JvbGxMZWZ0KSArICJweDtib3JkZXI6ZGFzaGVkIDFweCBncmV5O3dpZHRoOjBweDtoZWlnaHQ6IiArIHRibEhlaWdodCArICJweDsnPjwvc3Bhbj4iKTsNCisNCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuJGRvY0JvZHkuYXBwZW5kKCI8c3BhbiBkYXRhLWd1aWQ9JyIgKyBjb250ZXh0Lmd1aWQgKyAiJyBjbGFzcz0ncmVzaXplLXJlZ2lvbicgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDt0b3A6IiArIChpZnJhbWVQb3MudG9wICsgdGJsUG9zaXRpb24udG9wIC0gaWZybVNjcm9sbFRvcCkgKyAicHg7bGVmdDoiICsgKGlmcmFtZVBvcy5sZWZ0ICsgdGJsUG9zaXRpb24ubGVmdCAtIGlmcm1TY3JvbGxMZWZ0ICsgdGJsV2lkdGgpICsgInB4O2JvcmRlcjpkYXNoZWQgMXB4IGdyZXk7d2lkdGg6MHB4O2hlaWdodDoiICsgdGJsSGVpZ2h0ICsgInB4Oyc+PC9zcGFuPiIpOw0KKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC4kZG9jQm9keS5hcHBlbmQoIjxzcGFuIGRhdGEtZ3VpZD0nIiArIGNvbnRleHQuZ3VpZCArICInIGNsYXNzPSdyZXNpemUtcmVnaW9uJyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO3RvcDoiICsgKGlmcmFtZVBvcy50b3AgKyB0YmxQb3NpdGlvbi50b3AgLSBpZnJtU2Nyb2xsVG9wICsgdGJsSGVpZ2h0KSArICJweDtsZWZ0OiIgKyAoaWZyYW1lUG9zLmxlZnQgKyB0YmxQb3NpdGlvbi5sZWZ0IC0gaWZybVNjcm9sbExlZnQpICsgInB4O2JvcmRlcjpkYXNoZWQgMXB4IGdyZXk7d2lkdGg6IiArIHRibFdpZHRoICsgInB4O2hlaWdodDowcHg7Jz48L3NwYW4+Iik7DQorDQorICAgICAgICAgICAgICAgICAgICBsYXN0Q3JjID0gbWV0aG9kcy5jcmMoY29udGV4dC4kaWZybUJvZHkuaHRtbCgpKTsNCisNCisgICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5ncy5hZnRlclJlZnJlc2gpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5hZnRlclJlZnJlc2goY3VycmVudHRhYmxlKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfSwNCisNCisgICAgICAgICAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7DQorICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudHRhYmxlICE9IG51bGwpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50dGFibGUgPSBudWxsOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlUmVzaXplaW5Qcm9ncmVzcyA9IGZhbHNlOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMucmVtb3ZlUmVzaXplRWxlbWVudHMoY29udGV4dCk7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLmFmdGVyUmVzZXQpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYWZ0ZXJSZXNldCgpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMucmViaW5kKGNvbnRleHQpOw0KKyAgICAgICAgICAgICAgICB9LA0KKw0KKyAgICAgICAgICAgICAgICBjcmM6IGZ1bmN0aW9uIChzdHIpIHsNCisgICAgICAgICAgICAgICAgICAgIHZhciBoYXNoID0gMDsNCisgICAgICAgICAgICAgICAgICAgIGlmIChzdHIubGVuZ3RoID09IDApIHJldHVybiBoYXNoOw0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgPSBzdHIuY2hhckNvZGVBdChpKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBjaGFyOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc2ggPSBoYXNoICYgaGFzaDsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNoOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgfTsNCisNCisgICAgICAgICAgICB2YXIgaWZybSA9IHRoaXM7DQorICAgICAgICAgICAgdmFyICRpZnJtID0gJCh0aGlzKTsNCisgICAgICAgICAgICB2YXIgJGRvY0JvZHkgPSAkKCJib2R5Iik7DQorICAgICAgICAgICAgdmFyICRpZnJtQm9keSA9ICRpZnJtLmNvbnRlbnRzKCkuZmluZCgiYm9keSIpOw0KKw0KKyAgICAgICAgICAgIGxhc3RDcmMgPSBtZXRob2RzLmNyYygkaWZybUJvZHkuaHRtbCgpKTsNCisNCisgICAgICAgICAgICBpZiAoISRpZnJtLmlzKCdpZnJhbWUnKSkgew0KKyAgICAgICAgICAgICAgICByZXR1cm47DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIHZhciBjb250ZXh0ID0gew0KKyAgICAgICAgICAgICAgICBpZnJtOiBpZnJtLA0KKyAgICAgICAgICAgICAgICAkaWZybTogJGlmcm0sDQorICAgICAgICAgICAgICAgICRkb2NCb2R5OiAkZG9jQm9keSwNCisgICAgICAgICAgICAgICAgJGlmcm1Cb2R5OiAkaWZybUJvZHksDQorICAgICAgICAgICAgICAgIGd1aWQ6IG1ldGhvZHMuZ3VpZEdlbmVyYXRvcigpDQorICAgICAgICAgICAgfTsNCisNCisgICAgICAgICAgICBpZnJtLmNvbnRlbnRXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24gKCkgew0KKyAgICAgICAgICAgICAgICBtZXRob2RzLnJlc2V0KGNvbnRleHQpOw0KKyAgICAgICAgICAgIH0sIGZhbHNlKTsNCisNCisgICAgICAgICAgICAkKGlmcm0uY29udGVudFdpbmRvdy5kb2N1bWVudCkubW91c2V1cChmdW5jdGlvbiAoZSkgew0KKyAgICAgICAgICAgICAgICBpZiAoIXRhYmxlUmVzaXplaW5Qcm9ncmVzcykgew0KKyAgICAgICAgICAgICAgICAgICAgdmFyIHggPSAoZS54KSA/IGUueCA6IGUuY2xpZW50WDsNCisgICAgICAgICAgICAgICAgICAgIHZhciB5ID0gKGUueSkgPyBlLnkgOiBlLmNsaWVudFk7DQorICAgICAgICAgICAgICAgICAgICB2YXIgbW91c2VVcEVsZW1lbnQgPSBpZnJtLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh4LCB5KTsNCisgICAgICAgICAgICAgICAgICAgIGlmIChtb3VzZVVwRWxlbWVudCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZ0VsZW1lbnQ7DQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRzZWxlY3QgPSBjb250ZXh0LiRpZnJtLmNvbnRlbnRzKCkuZmluZChzZXR0aW5ncy5zZWxlY3Rvcik7DQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRwYXJlbnRzU2VsZWN0ID0gJChtb3VzZVVwRWxlbWVudCkucGFyZW50cygpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHBzaSA9IDA7IHBzaSA8ICRwYXJlbnRzU2VsZWN0Lmxlbmd0aDsgcHNpKyspIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAkc2VsZWN0Lmxlbmd0aDsgaSsrKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHNlbGVjdFtpXSA9PSAkcGFyZW50c1NlbGVjdFtwc2ldKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmdFbGVtZW50ID0gJHNlbGVjdFtpXTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmdFbGVtZW50KSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoaW5nRWxlbWVudCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RzLnJlc2V0KGNvbnRleHQpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcy50YWJsZUNsaWNrKGNvbnRleHQsIG1hdGNoaW5nRWxlbWVudCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfSk7DQorDQorICAgICAgICAgICAgJChkb2N1bWVudCkua2V5dXAoZnVuY3Rpb24gKGUpIHsNCisgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAyNykgew0KKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kcy5yZXNldChjb250ZXh0KTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0pOw0KKw0KKyAgICAgICAgICAgIGlmICghaWZybS5jcmNDaGVja2VyKSB7DQorICAgICAgICAgICAgICAgIGlmcm0uY3JjQ2hlY2tlciA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHsNCisgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50Q3JjID0gbWV0aG9kcy5jcmMoJGlmcm1Cb2R5Lmh0bWwoKSk7DQorICAgICAgICAgICAgICAgICAgICBpZiAobGFzdENyYyAhPSBjdXJyZW50Q3JjKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgJGlmcm0udHJpZ2dlcignd2Via2l0cmVzaXplLWNyY2NoYW5nZWQnLCBbY3VycmVudENyY10pOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9LCAxMDAwKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgJCh3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbigpew0KKyAgICAgICAgICAgICAgICBtZXRob2RzLnJlc2V0KGNvbnRleHQpOw0KKyAgICAgICAgICAgIH0pOw0KKw0KKyAgICAgICAgICAgICRpZnJtLmJpbmQoJ3dlYmtpdHJlc2l6ZS1jcmNjaGFuZ2VkJywgZnVuY3Rpb24gKGV2ZW50LCBjcmMpIHsNCisgICAgICAgICAgICAgICAgbGFzdENyYyA9IGNyYzsNCisgICAgICAgICAgICAgICAgbWV0aG9kcy5yZXNldChjb250ZXh0KTsNCisgICAgICAgICAgICB9KTsNCisNCisgICAgICAgICAgICAkaWZybS5iaW5kKCd3ZWJraXRyZXNpemUtdXBkYXRlY3JjJywgZnVuY3Rpb24gKGV2ZW50LCBjcmMpIHsNCisgICAgICAgICAgICAgICAgbGFzdENyYyA9IGNyYzsNCisgICAgICAgICAgICB9KTsNCisNCisgICAgICAgICAgICBtZXRob2RzLnJlZnJlc2goY29udGV4dCk7DQorDQorICAgICAgICAgICAgaWZybS5fV2ViS2l0VGFibGVSZXNpemVFbmQgPSBmdW5jdGlvbigpeyBtZXRob2RzLnJlc2V0KGNvbnRleHQpOyBtZXRob2RzLnJlbW92ZVJlc2l6ZUVsZW1lbnRzKGNvbnRleHQpOyBtZXRob2RzLmRlYmluZChjb250ZXh0KTsgfQ0KKyAgICAgICAgICAgIGlmcm0uX1dlYktpdEltYWdlUmVzaXplU3RhcnQgPSBmdW5jdGlvbigpeyBtZXRob2RzLnJlc2V0KGNvbnRleHQpOyBjb250ZXh0LiRpZnJtQm9keSA9ICRpZnJtLmNvbnRlbnRzKCkuZmluZCgiYm9keSIpOyB9DQorICAgICAgICB9KTsNCisgICAgfTsNCisNCisNCisgICAgJC5mbi53ZWJraXR0ZHJlc2l6ZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7DQorICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsNCisNCisgICAgICAgICAgICBpZiAoISQuYnJvd3Nlci53ZWJraXQpIHsNCisgICAgICAgICAgIC8vICAgICByZXR1cm47DQorICAgICAgICAgICAgfQ0KKw0KKw0KKyAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9ICQuZXh0ZW5kKHsNCisgICAgICAgICAgICB9LCBvcHRpb25zKTsNCisNCisgICAgICAgICAgICB2YXIgbGFzdENyYzsNCisgICAgICAgICAgICB2YXIgdGRSZXNpemVpblByb2dyZXNzID0gZmFsc2U7DQorICAgICAgICAgICAgdmFyIGN1cnJlbnR0ZDsNCisNCisgICAgICAgICAgICB2YXIgbWV0aG9kcyA9IHsNCisNCisgICAgICAgICAgICAgICAgZ3VpZEdlbmVyYXRvcjogZnVuY3Rpb24oKSB7DQorICAgICAgICAgICAgICAgICAgICB2YXIgUzQgPSBmdW5jdGlvbigpIHsNCisgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKCgxK01hdGgucmFuZG9tKCkpKjB4MTAwMDApfDApLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSk7DQorICAgICAgICAgICAgICAgICAgICB9Ow0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChTNCgpK1M0KCkrIi0iK1M0KCkrIi0iK1M0KCkrIi0iK1M0KCkrIi0iK1M0KCkrUzQoKStTNCgpKTsNCisgICAgICAgICAgICAgICAgfSwNCisNCisgICAgICAgICAgICAgICAgZ3VpZEZpbHRlcjogZnVuY3Rpb24oY29udGV4dCl7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIltkYXRhLWd1aWQ9JyIgKyBjb250ZXh0Lmd1aWQgKyAiJ10iOw0KKyAgICAgICAgICAgICAgICB9LA0KKw0KKyAgICAgICAgICAgICAgICByZW1vdmVSZXNpemVFbGVtZW50czogZnVuY3Rpb24gKGNvbnRleHQpIHsNCisgICAgICAgICAgICAgICAgICAgICQoIi50ZC1yZXNpemUtc2VsZWN0b3IiKS5maWx0ZXIobWV0aG9kcy5ndWlkRmlsdGVyKGNvbnRleHQpKS5yZW1vdmUoKTsNCisgICAgICAgICAgICAgICAgICAgICQoIi50ZC1yZXNpemUtcmVnaW9uIikuZmlsdGVyKG1ldGhvZHMuZ3VpZEZpbHRlcihjb250ZXh0KSkucmVtb3ZlKCk7DQorICAgICAgICAgICAgICAgIH0sDQorDQorICAgICAgICAgICAgICAgIHRkQ2xpY2s6IGZ1bmN0aW9uIChjb250ZXh0LCB0ZCkgew0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLmJlZm9yZUVsZW1lbnRTZWxlY3QpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5iZWZvcmVFbGVtZW50U2VsZWN0KHRkKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMucmVtb3ZlUmVzaXplRWxlbWVudHMoY29udGV4dCk7DQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50dGQgPSB0ZDsNCisNCisgICAgICAgICAgICAgICAgICAgIHZhciB0ZEhlaWdodCA9ICQodGQpLm91dGVySGVpZ2h0KCk7DQorICAgICAgICAgICAgICAgICAgICB2YXIgdGRXaWR0aCA9ICQodGQpLm91dGVyV2lkdGgoKTsNCisgICAgICAgICAgICAgICAgICAgIHZhciBpZnJhbWVQb3MgPSBjb250ZXh0LiRpZnJtLm9mZnNldCgpOw0KKyAgICAgICAgICAgICAgICAgICAgdmFyIHRkUG9zaXRpb24gPSAkKHRkKS5vZmZzZXQoKTsNCisgICAgICAgICAgICAgICAgICAgIHZhciBpZnJtU2Nyb2xsVG9wID0gTWF0aC5tYXgoY29udGV4dC5pZnJtLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCwgY29udGV4dC4kaWZybUJvZHkuc2Nyb2xsVG9wKCkpOw0KKyAgICAgICAgICAgICAgICAgICAgdmFyIGlmcm1TY3JvbGxMZWZ0ID0gTWF0aC5tYXgoY29udGV4dC5pZnJtLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQsIGNvbnRleHQuJGlmcm1Cb2R5LnNjcm9sbExlZnQoKSk7DQorDQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LiRkb2NCb2R5LmFwcGVuZCgiPHNwYW4gZGF0YS1ndWlkPSciICsgY29udGV4dC5ndWlkICsgIicgY2xhc3M9J3RkLXJlc2l6ZS1zZWxlY3Rvcicgc3R5bGU9J21hcmdpbjoxMHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoiICsgKGlmcmFtZVBvcy50b3AgKyB0ZFBvc2l0aW9uLnRvcCAtIGlmcm1TY3JvbGxUb3AgKyB0ZEhlaWdodCAtIDEwKSArICJweDtsZWZ0OiIgKyAoaWZyYW1lUG9zLmxlZnQgKyB0ZFBvc2l0aW9uLmxlZnQgLSBpZnJtU2Nyb2xsTGVmdCArIHRkV2lkdGggLSAxMCkgKyAicHg7Ym9yZGVyOnNvbGlkIDJweCByZWQ7d2lkdGg6NnB4O2hlaWdodDo2cHg7Y3Vyc29yOnNlLXJlc2l6ZTt6LWluZGV4OjEwMDA7Jz48L3NwYW4+Iik7DQorDQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LiRkb2NCb2R5LmFwcGVuZCgiPHNwYW4gZGF0YS1ndWlkPSciICsgY29udGV4dC5ndWlkICsgIicgY2xhc3M9J3RkLXJlc2l6ZS1yZWdpb24gdGQtcmVnaW9uLXRvcC1yaWdodCcgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDt0b3A6IiArIChpZnJhbWVQb3MudG9wICsgdGRQb3NpdGlvbi50b3AgLSBpZnJtU2Nyb2xsVG9wKSArICJweDtsZWZ0OiIgKyAoaWZyYW1lUG9zLmxlZnQgKyB0ZFBvc2l0aW9uLmxlZnQgLSBpZnJtU2Nyb2xsTGVmdCkgKyAicHg7Ym9yZGVyOmRhc2hlZCAxcHggZ3JlZW47d2lkdGg6IiArIHRkV2lkdGggKyAicHg7aGVpZ2h0OjBweDsnPjwvc3Bhbj4iKTsNCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuJGRvY0JvZHkuYXBwZW5kKCI8c3BhbiBkYXRhLWd1aWQ9JyIgKyBjb250ZXh0Lmd1aWQgKyAiJyBjbGFzcz0ndGQtcmVzaXplLXJlZ2lvbiB0ZC1yZWdpb24tdG9wLWRvd24nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7dG9wOiIgKyAoaWZyYW1lUG9zLnRvcCArIHRkUG9zaXRpb24udG9wIC0gaWZybVNjcm9sbFRvcCkgKyAicHg7bGVmdDoiICsgKGlmcmFtZVBvcy5sZWZ0ICsgdGRQb3NpdGlvbi5sZWZ0IC0gaWZybVNjcm9sbExlZnQpICsgInB4O2JvcmRlcjpkYXNoZWQgMXB4IGdyZWVuO3dpZHRoOjBweDtoZWlnaHQ6IiArIHRkSGVpZ2h0ICsgInB4Oyc+PC9zcGFuPiIpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC4kZG9jQm9keS5hcHBlbmQoIjxzcGFuIGRhdGEtZ3VpZD0nIiArIGNvbnRleHQuZ3VpZCArICInIGNsYXNzPSd0ZC1yZXNpemUtcmVnaW9uIHRkLXJlZ2lvbi1yaWdodC1kb3duJyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO3RvcDoiICsgKGlmcmFtZVBvcy50b3AgKyB0ZFBvc2l0aW9uLnRvcCAtIGlmcm1TY3JvbGxUb3ApICsgInB4O2xlZnQ6IiArIChpZnJhbWVQb3MubGVmdCArIHRkUG9zaXRpb24ubGVmdCAtIGlmcm1TY3JvbGxMZWZ0ICsgdGRXaWR0aCkgKyAicHg7Ym9yZGVyOmRhc2hlZCAxcHggZ3JlZW47d2lkdGg6MHB4O2hlaWdodDoiICsgdGRIZWlnaHQgKyAicHg7Jz48L3NwYW4+Iik7DQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LiRkb2NCb2R5LmFwcGVuZCgiPHNwYW4gZGF0YS1ndWlkPSciICsgY29udGV4dC5ndWlkICsgIicgY2xhc3M9J3RkLXJlc2l6ZS1yZWdpb24gdGQtcmVnaW9uLWRvd24tbGVmdCcgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDt0b3A6IiArIChpZnJhbWVQb3MudG9wICsgdGRQb3NpdGlvbi50b3AgLSBpZnJtU2Nyb2xsVG9wICsgdGRIZWlnaHQpICsgInB4O2xlZnQ6IiArIChpZnJhbWVQb3MubGVmdCArIHRkUG9zaXRpb24ubGVmdCAtIGlmcm1TY3JvbGxMZWZ0KSArICJweDtib3JkZXI6ZGFzaGVkIDFweCBncmVlbjt3aWR0aDoiICsgdGRXaWR0aCArICJweDtoZWlnaHQ6MHB4Oyc+PC9zcGFuPiIpOw0KKw0KKw0KKyAgICAgICAgICAgICAgICAgICAgdmFyIGRyYWdTdG9wID0gZnVuY3Rpb24gKCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZFJlc2l6ZWluUHJvZ3Jlc3MpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChjdXJyZW50dGQpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCJ3aWR0aCIsICQoIi50ZC1yZWdpb24tdG9wLXJpZ2h0IikuZmlsdGVyKG1ldGhvZHMuZ3VpZEZpbHRlcihjb250ZXh0KSkud2lkdGgoKSArICJweCIpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdoZWlnaHQnLCAkKCIudGQtcmVnaW9uLXRvcC1kb3duIikuZmlsdGVyKG1ldGhvZHMuZ3VpZEZpbHRlcihjb250ZXh0KSkuaGVpZ2h0KCkgKyAicHgiKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcy5yZWZyZXNoKGNvbnRleHQpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGN1cnJlbnR0ZCkuY2xpY2soKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC4kaWZybS50cmlnZ2VyKCd3ZWJraXRyZXNpemUtdXBkYXRlY3JjJywgW21ldGhvZHMuY3JjKGNvbnRleHQuJGlmcm1Cb2R5Lmh0bWwoKSldKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRSZXNpemVpblByb2dyZXNzID0gZmFsc2U7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5ncy5hZnRlclJlc2l6ZSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYWZ0ZXJSZXNpemUoY3VycmVudHRkKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIH07DQorDQorICAgICAgICAgICAgICAgICAgICB2YXIgaWZyYW1lTW91c2VNb3ZlID0gZnVuY3Rpb24gKGUpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGRSZXNpemVpblByb2dyZXNzKSB7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNXaWR0aCA9IHRkV2lkdGg7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNIZWlnaHQgPSB0ZEhlaWdodDsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzSGVpZ2h0ID0gZS5wYWdlWSAtIHRkUG9zaXRpb24udG9wOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNXaWR0aCA9IGUucGFnZVggLSB0ZFBvc2l0aW9uLmxlZnQ7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNIZWlnaHQgPCAxKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNIZWlnaHQgPSAxOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNXaWR0aCA8IDEpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1dpZHRoID0gMTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIudGQtcmVzaXplLXNlbGVjdG9yIikuZmlsdGVyKG1ldGhvZHMuZ3VpZEZpbHRlcihjb250ZXh0KSkuY3NzKCJ0b3AiLCAoaWZyYW1lUG9zLnRvcCArIHRkUG9zaXRpb24udG9wIC0gaWZybVNjcm9sbFRvcCArIHJlc0hlaWdodCAtIDEwKSArICdweCcpLmNzcygibGVmdCIsIChpZnJhbWVQb3MubGVmdCArIHRkUG9zaXRpb24ubGVmdCAtIGlmcm1TY3JvbGxMZWZ0ICsgcmVzV2lkdGggLSAxMCkgKyAicHgiKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiLnRkLXJlZ2lvbi10b3AtcmlnaHQiKS5maWx0ZXIobWV0aG9kcy5ndWlkRmlsdGVyKGNvbnRleHQpKS5jc3MoIndpZHRoIiwgcmVzV2lkdGggKyAicHgiKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiLnRkLXJlZ2lvbi10b3AtZG93biIpLmZpbHRlcihtZXRob2RzLmd1aWRGaWx0ZXIoY29udGV4dCkpLmNzcygiaGVpZ2h0IiwgcmVzSGVpZ2h0ICsgInB4Iik7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIi50ZC1yZWdpb24tcmlnaHQtZG93biIpLmZpbHRlcihtZXRob2RzLmd1aWRGaWx0ZXIoY29udGV4dCkpLmNzcygibGVmdCIsIChpZnJhbWVQb3MubGVmdCArIHRkUG9zaXRpb24ubGVmdCAtIGlmcm1TY3JvbGxMZWZ0ICsgcmVzV2lkdGgpICsgInB4IikuY3NzKCJoZWlnaHQiLCByZXNIZWlnaHQgKyAicHgiKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiLnRkLXJlZ2lvbi1kb3duLWxlZnQiKS5maWx0ZXIobWV0aG9kcy5ndWlkRmlsdGVyKGNvbnRleHQpKS5jc3MoInRvcCIsIChpZnJhbWVQb3MudG9wICsgdGRQb3NpdGlvbi50b3AgLSBpZnJtU2Nyb2xsVG9wICsgcmVzSGVpZ2h0KSArICJweCIpLmNzcygid2lkdGgiLCByZXNXaWR0aCArICJweCIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgICAgICAgICB9Ow0KKw0KKw0KKyAgICAgICAgICAgICAgICAgICAgdmFyIHdpbmRvd01vdXNlTW92ZSA9IGZ1bmN0aW9uIChlKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRkUmVzaXplaW5Qcm9ncmVzcykgew0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzV2lkdGggPSB0ZFdpZHRoOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzSGVpZ2h0ID0gdGRIZWlnaHQ7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc0hlaWdodCA9IGUucGFnZVkgLSAoaWZyYW1lUG9zLnRvcCArIHRkUG9zaXRpb24udG9wIC0gaWZybVNjcm9sbFRvcCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1dpZHRoID0gZS5wYWdlWCAtIChpZnJhbWVQb3MubGVmdCArIHRkUG9zaXRpb24ubGVmdCAtIGlmcm1TY3JvbGxMZWZ0KTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc0hlaWdodCA8IDEpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc0hlaWdodCA9IDE7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc1dpZHRoIDwgMSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzV2lkdGggPSAxOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIi50ZC1yZXNpemUtc2VsZWN0b3IiKS5maWx0ZXIobWV0aG9kcy5ndWlkRmlsdGVyKGNvbnRleHQpKS5jc3MoInRvcCIsIChpZnJhbWVQb3MudG9wICsgdGRQb3NpdGlvbi50b3AgLSBpZnJtU2Nyb2xsVG9wICsgcmVzSGVpZ2h0IC0gMTApICsgJ3B4JykuY3NzKCJsZWZ0IiwgKGlmcmFtZVBvcy5sZWZ0ICsgdGRQb3NpdGlvbi5sZWZ0IC0gaWZybVNjcm9sbExlZnQgKyByZXNXaWR0aCAtIDEwKSArICJweCIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIudGQtcmVnaW9uLXRvcC1yaWdodCIpLmZpbHRlcihtZXRob2RzLmd1aWRGaWx0ZXIoY29udGV4dCkpLmNzcygid2lkdGgiLCByZXNXaWR0aCArICJweCIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIudGQtcmVnaW9uLXRvcC1kb3duIikuZmlsdGVyKG1ldGhvZHMuZ3VpZEZpbHRlcihjb250ZXh0KSkuY3NzKCJoZWlnaHQiLCByZXNIZWlnaHQgKyAicHgiKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiLnRkLXJlZ2lvbi1yaWdodC1kb3duIikuZmlsdGVyKG1ldGhvZHMuZ3VpZEZpbHRlcihjb250ZXh0KSkuY3NzKCJsZWZ0IiwgKGlmcmFtZVBvcy5sZWZ0ICsgdGRQb3NpdGlvbi5sZWZ0IC0gaWZybVNjcm9sbExlZnQgKyByZXNXaWR0aCkgKyAicHgiKS5jc3MoImhlaWdodCIsIHJlc0hlaWdodCArICJweCIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIudGQtcmVnaW9uLWRvd24tbGVmdCIpLmZpbHRlcihtZXRob2RzLmd1aWRGaWx0ZXIoY29udGV4dCkpLmNzcygidG9wIiwgKGlmcmFtZVBvcy50b3AgKyB0ZFBvc2l0aW9uLnRvcCAtIGlmcm1TY3JvbGxUb3AgKyByZXNIZWlnaHQpICsgInB4IikuY3NzKCJ3aWR0aCIsIHJlc1dpZHRoICsgInB4Iik7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICAgICAgICAgIH07DQorDQorICAgICAgICAgICAgICAgICAgICAkKCIudGQtcmVzaXplLXNlbGVjdG9yIikuZmlsdGVyKG1ldGhvZHMuZ3VpZEZpbHRlcihjb250ZXh0KSkubW91c2Vkb3duKGZ1bmN0aW9uIChlKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLmJlZm9yZVJlc2l6ZVN0YXJ0KSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmJlZm9yZVJlc2l6ZVN0YXJ0KGN1cnJlbnR0ZCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRkUmVzaXplaW5Qcm9ncmVzcyA9IHRydWU7DQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgICAgICAgICAgICAgfSk7DQorDQorICAgICAgICAgICAgICAgICAgICAkKCIqIikubW91c2V1cChmdW5jdGlvbiAoKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRkUmVzaXplaW5Qcm9ncmVzcykgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFnU3RvcCgpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIH0pOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgJChjb250ZXh0Lmlmcm0uY29udGVudFdpbmRvdykubW91c2Vtb3ZlKGZ1bmN0aW9uIChlKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lTW91c2VNb3ZlKGUpOw0KKyAgICAgICAgICAgICAgICAgICAgfSk7DQorDQorICAgICAgICAgICAgICAgICAgICAkKHdpbmRvdykubW91c2Vtb3ZlKGZ1bmN0aW9uIChlKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93TW91c2VNb3ZlKGUpOw0KKyAgICAgICAgICAgICAgICAgICAgfSk7DQorDQorICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3MuYWZ0ZXJFbGVtZW50U2VsZWN0KSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYWZ0ZXJFbGVtZW50U2VsZWN0KGN1cnJlbnR0ZCk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0sDQorDQorICAgICAgICAgICAgICAgIHJlYmluZDogZnVuY3Rpb24gKGNvbnRleHQpIHsNCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuJGlmcm0uY29udGVudHMoKS5maW5kKCJ0ZCx0aCIpLmVhY2goZnVuY3Rpb24gKGksIHYpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAkKHYpLnVuYmluZCgnY2xpY2snKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAkKHYpLmNsaWNrKGZ1bmN0aW9uIChlKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldCA9PSB2KSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RzLnRkQ2xpY2soY29udGV4dCwgdik7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCisgICAgICAgICAgICAgICAgICAgIH0pOw0KKyAgICAgICAgICAgICAgICB9LA0KKyAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgZGViaW5kOiBmdW5jdGlvbiAoY29udGV4dCkgew0KKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC4kaWZybS5jb250ZW50cygpLmZpbmQoInRkLHRoIikuZWFjaChmdW5jdGlvbiAoaSwgdikgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICQodikudW5iaW5kKCdjbGljaycpOyAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICAgICAgfSk7DQorICAgICAgICAgICAgICAgIH0sDQorDQorICAgICAgICAgICAgICAgIHJlZnJlc2g6IGZ1bmN0aW9uIChjb250ZXh0KSB7DQorICAgICAgICAgICAgICAgICAgICBtZXRob2RzLnJlYmluZChjb250ZXh0KTsNCisNCisgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMucmVtb3ZlUmVzaXplRWxlbWVudHMoY29udGV4dCk7DQorDQorICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnR0ZCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5ncy5hZnRlclJlZnJlc2gpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYWZ0ZXJSZWZyZXNoKG51bGwpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47DQorICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjdXJyZW50dGQ7DQorDQorICAgICAgICAgICAgICAgICAgICB2YXIgdGRIZWlnaHQgPSAkKHRkKS5vdXRlckhlaWdodCgpOw0KKyAgICAgICAgICAgICAgICAgICAgdmFyIHRkV2lkdGggPSAkKHRkKS5vdXRlcldpZHRoKCk7DQorICAgICAgICAgICAgICAgICAgICB2YXIgaWZyYW1lUG9zID0gY29udGV4dC4kaWZybS5vZmZzZXQoKTsNCisgICAgICAgICAgICAgICAgICAgIHZhciB0ZFBvc2l0aW9uID0gJCh0ZCkub2Zmc2V0KCk7DQorICAgICAgICAgICAgICAgICAgICB2YXIgaWZybVNjcm9sbFRvcCA9IGNvbnRleHQuJGlmcm1Cb2R5LnNjcm9sbFRvcCgpOw0KKyAgICAgICAgICAgICAgICAgICAgdmFyIGlmcm1TY3JvbGxMZWZ0ID0gY29udGV4dC4kaWZybUJvZHkuc2Nyb2xsTGVmdCgpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC4kZG9jQm9keS5hcHBlbmQoIjxzcGFuIGRhdGEtZ3VpZD0nIiArIGNvbnRleHQuZ3VpZCArICInIGNsYXNzPSd0ZC1yZXNpemUtc2VsZWN0b3InIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt0b3A6IiArIChpZnJhbWVQb3MudG9wICsgdGRQb3NpdGlvbi50b3AgLSBpZnJtU2Nyb2xsVG9wICsgdGRIZWlnaHQpICsgInB4O2xlZnQ6IiArIChpZnJhbWVQb3MubGVmdCArIHRkUG9zaXRpb24ubGVmdCAtIGlmcm1TY3JvbGxMZWZ0ICsgdGRXaWR0aCkgKyAicHg7Ym9yZGVyOnNvbGlkIDJweCByZWQ7d2lkdGg6NnB4O2hlaWdodDo2cHg7Y3Vyc29yOnNlLXJlc2l6ZTt6LWluZGV4OjEwMDA7Jz48L3NwYW4+Iik7DQorDQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LiRkb2NCb2R5LmFwcGVuZCgiPHNwYW4gZGF0YS1ndWlkPSciICsgY29udGV4dC5ndWlkICsgIicgY2xhc3M9J3RkLXJlc2l6ZS1yZWdpb24nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7dG9wOiIgKyAoaWZyYW1lUG9zLnRvcCArIHRkUG9zaXRpb24udG9wIC0gaWZybVNjcm9sbFRvcCkgKyAicHg7bGVmdDoiICsgKGlmcmFtZVBvcy5sZWZ0ICsgdGRQb3NpdGlvbi5sZWZ0IC0gaWZybVNjcm9sbExlZnQpICsgInB4O2JvcmRlcjpkYXNoZWQgMXB4IGdyZWVuO3dpZHRoOiIgKyB0ZFdpZHRoICsgInB4O2hlaWdodDowcHg7Jz48L3NwYW4+Iik7DQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LiRkb2NCb2R5LmFwcGVuZCgiPHNwYW4gZGF0YS1ndWlkPSciICsgY29udGV4dC5ndWlkICsgIicgY2xhc3M9J3RkLXJlc2l6ZS1yZWdpb24nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7dG9wOiIgKyAoaWZyYW1lUG9zLnRvcCArIHRkUG9zaXRpb24udG9wIC0gaWZybVNjcm9sbFRvcCkgKyAicHg7bGVmdDoiICsgKGlmcmFtZVBvcy5sZWZ0ICsgdGRQb3NpdGlvbi5sZWZ0IC0gaWZybVNjcm9sbExlZnQpICsgInB4O2JvcmRlcjpkYXNoZWQgMXB4IGdyZWVuO3dpZHRoOjBweDtoZWlnaHQ6IiArIHRkSGVpZ2h0ICsgInB4Oyc+PC9zcGFuPiIpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC4kZG9jQm9keS5hcHBlbmQoIjxzcGFuIGRhdGEtZ3VpZD0nIiArIGNvbnRleHQuZ3VpZCArICInIGNsYXNzPSd0ZC1yZXNpemUtcmVnaW9uJyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO3RvcDoiICsgKGlmcmFtZVBvcy50b3AgKyB0ZFBvc2l0aW9uLnRvcCAtIGlmcm1TY3JvbGxUb3ApICsgInB4O2xlZnQ6IiArIChpZnJhbWVQb3MubGVmdCArIHRkUG9zaXRpb24ubGVmdCAtIGlmcm1TY3JvbGxMZWZ0ICsgdGRXaWR0aCkgKyAicHg7Ym9yZGVyOmRhc2hlZCAxcHggZ3JlZW47d2lkdGg6MHB4O2hlaWdodDoiICsgdGRIZWlnaHQgKyAicHg7Jz48L3NwYW4+Iik7DQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LiRkb2NCb2R5LmFwcGVuZCgiPHNwYW4gZGF0YS1ndWlkPSciICsgY29udGV4dC5ndWlkICsgIicgY2xhc3M9J3RkLXJlc2l6ZS1yZWdpb24nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7dG9wOiIgKyAoaWZyYW1lUG9zLnRvcCArIHRkUG9zaXRpb24udG9wIC0gaWZybVNjcm9sbFRvcCArIHRkSGVpZ2h0KSArICJweDtsZWZ0OiIgKyAoaWZyYW1lUG9zLmxlZnQgKyB0ZFBvc2l0aW9uLmxlZnQgLSBpZnJtU2Nyb2xsTGVmdCkgKyAicHg7Ym9yZGVyOmRhc2hlZCAxcHggZ3JlZW47d2lkdGg6IiArIHRkV2lkdGggKyAicHg7aGVpZ2h0OjBweDsnPjwvc3Bhbj4iKTsNCisNCisgICAgICAgICAgICAgICAgICAgIGxhc3RDcmMgPSBtZXRob2RzLmNyYyhjb250ZXh0LiRpZnJtQm9keS5odG1sKCkpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLmFmdGVyUmVmcmVzaCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmFmdGVyUmVmcmVzaChjdXJyZW50dGQpOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9LA0KKw0KKyAgICAgICAgICAgICAgICByZXNldDogZnVuY3Rpb24gKGNvbnRleHQpIHsNCisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50dGQgIT0gbnVsbCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnR0ZCA9IG51bGw7DQorICAgICAgICAgICAgICAgICAgICAgICAgdGRSZXNpemVpblByb2dyZXNzID0gZmFsc2U7DQorICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcy5yZW1vdmVSZXNpemVFbGVtZW50cyhjb250ZXh0KTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3MuYWZ0ZXJSZXNldCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5hZnRlclJlc2V0KCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kcy5yZWJpbmQoY29udGV4dCk7DQorICAgICAgICAgICAgICAgIH0sDQorDQorICAgICAgICAgICAgICAgIGNyYzogZnVuY3Rpb24gKHN0cikgew0KKyAgICAgICAgICAgICAgICAgICAgdmFyIGhhc2ggPSAwOw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0ci5sZW5ndGggPT0gMCkgcmV0dXJuIGhhc2g7DQorICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciA9IHN0ci5jaGFyQ29kZUF0KGkpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIGNoYXI7DQorICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCA9IGhhc2ggJiBoYXNoOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc2g7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICB9Ow0KKw0KKyAgICAgICAgICAgIHZhciBpZnJtID0gdGhpczsNCisgICAgICAgICAgICB2YXIgJGlmcm0gPSAkKHRoaXMpOw0KKyAgICAgICAgICAgIHZhciAkZG9jQm9keSA9ICQoImJvZHkiKTsNCisgICAgICAgICAgICB2YXIgJGlmcm1Cb2R5ID0gJGlmcm0uY29udGVudHMoKS5maW5kKCJib2R5Iik7DQorDQorICAgICAgICAgICAgbGFzdENyYyA9IG1ldGhvZHMuY3JjKCRpZnJtQm9keS5odG1sKCkpOw0KKw0KKyAgICAgICAgICAgIGlmICghJGlmcm0uaXMoJ2lmcmFtZScpKSB7DQorICAgICAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB7DQorICAgICAgICAgICAgICAgIGlmcm06IGlmcm0sDQorICAgICAgICAgICAgICAgICRpZnJtOiAkaWZybSwNCisgICAgICAgICAgICAgICAgJGRvY0JvZHk6ICRkb2NCb2R5LA0KKyAgICAgICAgICAgICAgICAkaWZybUJvZHk6ICRpZnJtQm9keSwNCisgICAgICAgICAgICAgICAgZ3VpZDogbWV0aG9kcy5ndWlkR2VuZXJhdG9yKCkNCisgICAgICAgICAgICB9Ow0KKw0KKyAgICAgICAgICAgIGlmcm0uY29udGVudFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBmdW5jdGlvbiAoKSB7DQorICAgICAgICAgICAgICAgIG1ldGhvZHMucmVzZXQoY29udGV4dCk7DQorICAgICAgICAgICAgfSwgZmFsc2UpOw0KKw0KKyAgICAgICAgICAgICQoaWZybS5jb250ZW50V2luZG93LmRvY3VtZW50KS5tb3VzZXVwKGZ1bmN0aW9uIChlKSB7DQorICAgICAgICAgICAgICAgIGlmICghdGRSZXNpemVpblByb2dyZXNzKSB7DQorICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IChlLngpID8gZS54IDogZS5jbGllbnRYOw0KKyAgICAgICAgICAgICAgICAgICAgdmFyIHkgPSAoZS55KSA/IGUueSA6IGUuY2xpZW50WTsNCisgICAgICAgICAgICAgICAgICAgIHZhciBtb3VzZVVwRWxlbWVudCA9IGlmcm0uY29udGVudFdpbmRvdy5kb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHgsIHkpOw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1vdXNlVXBFbGVtZW50KSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoaW5nRWxlbWVudDsNCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJHNlbGVjdCA9IGNvbnRleHQuJGlmcm0uY29udGVudHMoKS5maW5kKHNldHRpbmdzLnNlbGVjdG9yKTsNCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJHBhcmVudHNTZWxlY3QgPSAkKG1vdXNlVXBFbGVtZW50KS5wYXJlbnRzKCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcHNpID0gMDsgcHNpIDwgJHBhcmVudHNTZWxlY3QubGVuZ3RoOyBwc2krKykgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8ICRzZWxlY3QubGVuZ3RoOyBpKyspIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkc2VsZWN0W2ldID09ICRwYXJlbnRzU2VsZWN0W3BzaV0pIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGluZ0VsZW1lbnQgPSAkc2VsZWN0W2ldOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGluZ0VsZW1lbnQpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hpbmdFbGVtZW50KSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMucmVzZXQoY29udGV4dCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RzLnRkQ2xpY2soY29udGV4dCwgbWF0Y2hpbmdFbGVtZW50KTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgfSk7DQorDQorICAgICAgICAgICAgJChkb2N1bWVudCkua2V5dXAoZnVuY3Rpb24gKGUpIHsNCisgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAyNykgew0KKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kcy5yZXNldChjb250ZXh0KTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0pOw0KKw0KKyAgICAgICAgICAgIGlmICghaWZybS5jcmNDaGVja2VyKSB7DQorICAgICAgICAgICAgICAgIGlmcm0uY3JjQ2hlY2tlciA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHsNCisgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50Q3JjID0gbWV0aG9kcy5jcmMoJGlmcm1Cb2R5Lmh0bWwoKSk7DQorICAgICAgICAgICAgICAgICAgICBpZiAobGFzdENyYyAhPSBjdXJyZW50Q3JjKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgJGlmcm0udHJpZ2dlcignd2Via2l0cmVzaXplLWNyY2NoYW5nZWQnLCBbY3VycmVudENyY10pOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9LCAxMDAwKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgJCh3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbigpew0KKyAgICAgICAgICAgICAgICBtZXRob2RzLnJlc2V0KGNvbnRleHQpOw0KKyAgICAgICAgICAgIH0pOw0KKw0KKyAgICAgICAgICAgICRpZnJtLmJpbmQoJ3dlYmtpdHJlc2l6ZS1jcmNjaGFuZ2VkJywgZnVuY3Rpb24gKGV2ZW50LCBjcmMpIHsNCisgICAgICAgICAgICAgICAgbGFzdENyYyA9IGNyYzsNCisgICAgICAgICAgICAgICAgbWV0aG9kcy5yZXNldChjb250ZXh0KTsNCisgICAgICAgICAgICB9KTsNCisNCisgICAgICAgICAgICAkaWZybS5iaW5kKCd3ZWJraXRyZXNpemUtdXBkYXRlY3JjJywgZnVuY3Rpb24gKGV2ZW50LCBjcmMpIHsNCisgICAgICAgICAgICAgICAgbGFzdENyYyA9IGNyYzsNCisgICAgICAgICAgICB9KTsNCisNCisgICAgICAgICAgICAkaWZybS5iaW5kKCd3ZWJraXRyZXNpemUtdGFibGUtcmVzaXplZCcsIGZ1bmN0aW9uICgpIHsNCisgICAgICAgICAgICAgICAgbWV0aG9kcy5yZXNldChjb250ZXh0KTsNCisgICAgICAgICAgICB9KTsNCisNCisgICAgICAgICAgICBtZXRob2RzLnJlZnJlc2goY29udGV4dCk7DQorDQorICAgICAgICAgICAgaWZybS5fV2ViS2l0VGRSZXNpemVFbmQgPSBmdW5jdGlvbigpeyBtZXRob2RzLnJlc2V0KGNvbnRleHQpOyBtZXRob2RzLnJlbW92ZVJlc2l6ZUVsZW1lbnRzKGNvbnRleHQpOyBtZXRob2RzLmRlYmluZChjb250ZXh0KTsgIH0NCisgICAgICAgICAgICBpZnJtLl9XZWJLaXRJbWFnZVJlc2l6ZVN0YXJ0ID0gZnVuY3Rpb24oKXsgbWV0aG9kcy5yZXNldChjb250ZXh0KTsgY29udGV4dC4kaWZybUJvZHkgPSAkaWZybS5jb250ZW50cygpLmZpbmQoImJvZHkiKTsgfQ0KKyAgICAgICAgfSk7DQorICAgIH07DQorfSkoalF1ZXJ5KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wbHVnaW5zL1d5c2l3eWdXcmFwL1d5c2l3eWdXcmFwLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9XeXNpd3lnV3JhcC9XeXNpd3lnV3JhcC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzliYmFiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcGx1Z2lucy9XeXNpd3lnV3JhcC9XeXNpd3lnV3JhcC5qcwpAQCAtMCwwICsxLDEwMSBAQAorLyoqCisgKiAgV1lTSVdZRyBXcmFwIFBsdWdpbgorICogCisgKiAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBwbHVnaW4gaXMgdG8gd3JhcCB0aGUgY29udGVudCBiZWluZyBlZGl0ZWQgaW4gWGluaGEKKyAqICB3aXRoIGNlcnRhaW4gZWxlbWVudHMgb2YgZ2l2ZW4gSUQgYW5kL29yIGNsYXNzIHdoZW4gaW4gdGhlIFdZU0lXWUcgdmlldy4KKyAqCisgKiAgVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0byBhc3Npc3Qgd2hlbiBzdHlsaW5nIGNvbnRlbnQuCisgKgorICovCisKK1d5c2l3eWdXcmFwLl9wbHVnaW5JbmZvID0geworICBuYW1lICAgICAgICAgIDogIldZU0lXWUcgV3JhcCIsCisgIHZlcnNpb24gICAgICAgOiAiMS4wIiwKKyAgZGV2ZWxvcGVyICAgICA6ICJKYW1lcyBTbGVlbWFuIiwKKyAgZGV2ZWxvcGVyX3VybCA6ICJodHRwOi8vd3d3LmdvZ28uY28ubnovIiwKKyAgY19vd25lciAgICAgICA6ICJKYW1lcyBTbGVlbWFuIiwKKyAgbGljZW5zZSAgICAgICA6ICJodG1sQXJlYSIKK307CisKK1hpbmhhLkNvbmZpZy5wcm90b3R5cGUuV3lzaXd5Z1dyYXAgPQoreworICAnZWxlbWVudHMnIDogWyBdCisgIC8vICdlbGVtZW50cycgOiBbICdkaXYuY2xhc3MjaWQnLCAndWwnLCAnbGknIF0KK307CisKKworZnVuY3Rpb24gV3lzaXd5Z1dyYXAoZWRpdG9yKSB7CisgIHRoaXMuZWRpdG9yID0gZWRpdG9yOyAgICAKK30KKworLyoqIFRha2UgSFRNTCBhbmQgd3JhcCBpdCB3aXRoIHRoZSBlbGVtZW50cy4gCisgKgorICogQHBhcmFtIHN0cmluZworICogQHJldHVybiBzdHJpbmcKKyAqLworIAorV3lzaXd5Z1dyYXAucHJvdG90eXBlLmlud2FyZEh0bWwgPSBmdW5jdGlvbihodG1sKQoreworICBmb3IodmFyIHggPSB0aGlzLmVkaXRvci5jb25maWcuV3lzaXd5Z1dyYXAuZWxlbWVudHMubGVuZ3RoIC0gMTsgeCA+PSAwOyB4LS0pCisgIHsKKyAgICB2YXIgZSA9IHsgdGFnTmFtZTogdGhpcy5lZGl0b3IuY29uZmlnLld5c2l3eWdXcmFwLmVsZW1lbnRzW3hdLCBjbGFzc05hbWU6ICcnLCBpZDogJycgfTsgICAgCisgICAgaWYoZS50YWdOYW1lLm1hdGNoKC8jKC4rKSQvKSkKKyAgICB7CisgICAgICBlLmlkICAgICAgICA9IFJlZ0V4cC4kMTsKKyAgICAgIGUudGFnTmFtZSAgID0gZS50YWdOYW1lLnJlcGxhY2UoLyMoLispJC8sJycpOworICAgIH0KKyAgICAKKyAgICBpZihlLnRhZ05hbWUubWF0Y2goL1teLl0qXC4oLispJC8pKQorICAgIHsKKyAgICAgIGUuY2xhc3NOYW1lID0gUmVnRXhwLiQxLnJlcGxhY2UoJy4nLCAnICcpOworICAgICAgZS50YWdOYW1lICAgPSBlLnRhZ05hbWUucmVwbGFjZSgvXC4uKyQvLCAnJyk7CisgICAgfQorICAgIAorICAgIGlmKCFlLnRhZ05hbWUubGVuZ3RoKSAKKyAgICB7IAorICAgICAgZS50YWdOYW1lID0gJ2Rpdic7IAorICAgIH0KKyAgICAKKyAgICBodG1sID0gJzwnK2UudGFnTmFtZSsnIGlkPSInK2UuaWQrJyIgY2xhc3M9IicrZS5jbGFzc05hbWUrJyI+JytodG1sKyc8LycrZS50YWdOYW1lKyc+JzsKKyAgfQorICAKKyAgcmV0dXJuIGh0bWw7Cit9CisKKy8qKiBUYWtlIEhUTUwgYW5kIHN0cmlwIGl0IGZyb20gdGhlIGVsZW1lbnRzLiAKKyAqCisgKiBAcGFyYW0gc3RyaW5nCisgKiBAcmV0dXJuIHN0cmluZworICovCisgCitXeXNpd3lnV3JhcC5wcm90b3R5cGUub3V0d2FyZEh0bWwgPSBmdW5jdGlvbihodG1sKQoreworICBmb3IodmFyIHggPSAwOyB4IDwgdGhpcy5lZGl0b3IuY29uZmlnLld5c2l3eWdXcmFwLmVsZW1lbnRzLmxlbmd0aDsgeCsrKQorICB7CisgICAgdmFyIGUgPSB7IHRhZ05hbWU6IHRoaXMuZWRpdG9yLmNvbmZpZy5XeXNpd3lnV3JhcC5lbGVtZW50c1t4XSwgY2xhc3NOYW1lOiAnJywgaWQ6ICcnIH07ICAgIAorICAgIGlmKGUudGFnTmFtZS5tYXRjaCgvIyguKykkLykpCisgICAgeworICAgICAgZS5pZCAgICAgICAgPSBSZWdFeHAuJDE7CisgICAgICBlLnRhZ05hbWUgICA9IGUudGFnTmFtZS5yZXBsYWNlKC8jKC4rKSQvLCcnKTsKKyAgICB9CisgICAgCisgICAgaWYoZS50YWdOYW1lLm1hdGNoKC9bXi5dKlwuKC4rKSQvKSkKKyAgICB7CisgICAgICBlLmNsYXNzTmFtZSA9IFJlZ0V4cC4kMS5yZXBsYWNlKCcuJywgJyAnKTsKKyAgICAgIGUudGFnTmFtZSAgID0gZS50YWdOYW1lLnJlcGxhY2UoL1wuLiskLywgJycpOworICAgIH0KKyAgICAKKyAgICBpZighZS50YWdOYW1lLmxlbmd0aCkgCisgICAgeyAKKyAgICAgIGUudGFnTmFtZSA9ICdkaXYnOyAKKyAgICB9CisKKyAgICB2YXIgcjEgPSBuZXcgUmVnRXhwKCdeKFxcc3xcXG58XFxyKSo8JytlLnRhZ05hbWUrJ1tePl0qPihcXHN8XFxufFxccikqJywgJ2knKTsKKyAgICB2YXIgcjIgPSBuZXcgUmVnRXhwKCcoXFxzfFxcbnxcXHIpKjwvJytlLnRhZ05hbWUrJ1tePl0qPihcXHN8XFxufFxccikqJCcsICdpJyk7CisgIAorICAgIGh0bWwgPSBodG1sLnJlcGxhY2UocjEsICcnKTsKKyAgICBodG1sID0gaHRtbC5yZXBsYWNlKHIyLCAnJyk7CisgIH0KKyAgCisgIHJldHVybiBodG1sOworfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3BvcHVwcy9ibGFuay5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcG9wdXBzL2JsYW5rLmh0bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9wb3B1cHMvYmxhbmsuaHRtbApyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcG9wdXBzL2JsYW5rLmh0bWwKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9wb3B1cHMvZWRpdG9yX2hlbHAuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BvcHVwcy9lZGl0b3JfaGVscC5odG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvcG9wdXBzL2VkaXRvcl9oZWxwLmh0bWwKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BvcHVwcy9lZGl0b3JfaGVscC5odG1sCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvcG9wdXBzL3BvcHVwLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BvcHVwcy9wb3B1cC5jc3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9wb3B1cHMvcG9wdXAuY3NzCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wb3B1cHMvcG9wdXAuY3NzCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wb3B1cHMvcG9wdXAuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wb3B1cHMvcG9wdXAuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkMDZjZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BvcHVwcy9wb3B1cC5qcwpAQCAtMCwwICsxLDE0MCBAQAorLy8gaHRtbEFyZWEgdjMuMCAtIENvcHlyaWdodCAoYykgMjAwMiwgMjAwMyBpbnRlcmFjdGl2ZXRvb2xzLmNvbSwgaW5jLgorLy8gVGhpcyBjb3B5cmlnaHQgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyBQb3J0aW9ucyAoYykgZHluYXJjaC5jb20sIDIwMDMKKy8vCisvLyBBIGZyZWUgV1lTSVdZRyBlZGl0b3IgcmVwbGFjZW1lbnQgZm9yIDx0ZXh0YXJlYT4gZmllbGRzLgorLy8gRm9yIGZ1bGwgc291cmNlIGNvZGUgYW5kIGRvY3MsIHZpc2l0IGh0dHA6Ly93d3cuaW50ZXJhY3RpdmV0b29scy5jb20vCisvLworLy8gVmVyc2lvbiAzLjAgZGV2ZWxvcGVkIGJ5IE1paGFpIEJhem9uLgorLy8gICBodHRwOi8vZHluYXJjaC5jb20vbWlzaG9vCisvLworLy8gJElkOnBvcHVwLmpzIDkyOSAyMDA4LTAxLTA5IDIxOjEwOjU5WiByYXkgJAoraWYodHlwZW9mIFhpbmhhID09ICd1bmRlZmluZWQnKQorICBYaW5oYSA9IHdpbmRvdy5vcGVuZXIuWGluaGE7CisKKy8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2lsbCBiZSByZW1vdmVkIHNvbWUgdGltZSBvciBub3Q/CitIVE1MQXJlYSA9IFhpbmhhOworCitmdW5jdGlvbiBnZXRBYnNvbHV0ZVBvcyhlbCkgeworCXZhciByID0geyB4OiBlbC5vZmZzZXRMZWZ0LCB5OiBlbC5vZmZzZXRUb3AgfTsKKwlpZiAoZWwub2Zmc2V0UGFyZW50KSB7CisJCXZhciB0bXAgPSBnZXRBYnNvbHV0ZVBvcyhlbC5vZmZzZXRQYXJlbnQpOworCQlyLnggKz0gdG1wLng7CisJCXIueSArPSB0bXAueTsKKwl9CisJcmV0dXJuIHI7Cit9CisKK2Z1bmN0aW9uIGNvbWJvU2VsZWN0VmFsdWUoYywgdmFsKSB7CisJdmFyIG9wcyA9IGMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9wdGlvbiIpOworCWZvciAodmFyIGkgPSBvcHMubGVuZ3RoOyAtLWkgPj0gMDspIHsKKwkJdmFyIG9wID0gb3BzW2ldOworCQlvcC5zZWxlY3RlZCA9IChvcC52YWx1ZSA9PSB2YWwpOworCX0KKwljLnZhbHVlID0gdmFsOworfQorCitmdW5jdGlvbiBfX2RsZ19vbmNsb3NlKCkgeworCW9wZW5lci5EaWFsb2cuX3JldHVybihudWxsKTsKK30KKy8vIHJheTogSSBtYXJrIHRoaXMgb24gZGVwcmVjYXRlZCwgYmVjYXVzZSBib3R0b20gaXMgbmV2ZXIgdXNlZAorZnVuY3Rpb24gX19kbGdfaW5pdCggYm90dG9tLCB3aW5fZGltICkgeworICBfX3hpbmhhX2RsZ19pbml0KHdpbl9kaW0pOworfQorCitmdW5jdGlvbiBfX3hpbmhhX2RsZ19pbml0KCB3aW5fZGltICkgeworICBpZih3aW5kb3cuX19kbGdfaW5pdF9kb25lKSByZXR1cm4gdHJ1ZTsKKyAgCisgIGlmKHdpbmRvdy5vcGVuZXIuX2VkaXRvcl9za2luKSB7CisgICAgdmFyIGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdOworICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpOworICAgIGxpbmsudHlwZSA9ICJ0ZXh0L2NzcyI7CisgICAgbGluay5ocmVmID0gd2luZG93Lm9wZW5lci5fZWRpdG9yX3VybCArICdza2lucy8nICsgd2luZG93Lm9wZW5lci5fZWRpdG9yX3NraW4gKyAnL3NraW4uY3NzJzsKKyAgICBsaW5rLnJlbCA9ICJzdHlsZXNoZWV0IjsKKyAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspOworICB9CisgIGlmICghd2luZG93LmRpYWxvZ0FyZ3VtZW50cyAmJiBvcGVuZXIuRGlhbG9nLl9hcmd1bWVudHMpCisgIHsKKyAgICB3aW5kb3cuZGlhbG9nQXJndW1lbnRzID0gb3BlbmVyLkRpYWxvZy5fYXJndW1lbnRzOworICB9CisgIAorCisgIHZhciBwYWdlID0gWGluaGEucGFnZVNpemUod2luZG93KTsKKyAgaWYgKCAhd2luX2RpbSApCisgIHsKKyAgICB3aW5fZGltID0ge3dpZHRoOnBhZ2UueCwgaGVpZ2h0OiBwYWdlLnl9OworICB9CisgIHdpbmRvdy5yZXNpemVUbyh3aW5fZGltLndpZHRoLCB3aW5fZGltLmhlaWdodCk7CisKKyAgdmFyIGRpbSA9IFhpbmhhLnZpZXdwb3J0U2l6ZSh3aW5kb3cpOworCisgIHdpbmRvdy5yZXNpemVCeSgwLCBwYWdlLnkgLSBkaW0ueSk7CisKKyAgaWYod2luX2RpbS50b3AgJiYgd2luX2RpbS5sZWZ0KQorICB7CisgICAgd2luZG93Lm1vdmVUbyh3aW5fZGltLmxlZnQsd2luX2RpbS50b3ApOworICB9CisgIGVsc2UKKyAgeworICAgIGlmICghWGluaGEuaXNfaWUpCisgICAgeworICAgICAgdmFyIHggPSBvcGVuZXIuc2NyZWVuWCArIChvcGVuZXIub3V0ZXJXaWR0aCAtIHdpbl9kaW0ud2lkdGgpIC8gMjsKKyAgICAgIHZhciB5ID0gb3BlbmVyLnNjcmVlblkgKyAob3BlbmVyLm91dGVySGVpZ2h0IC0gd2luX2RpbS5oZWlnaHQpIC8gMjsKKyAgICB9CisgICAgZWxzZQorICAgIHsvL0lFIGRvZXMgbm90IGhhdmUgd2luZG93Lm91dGVyLi4uICwgc28gY2VudGVyIGl0IG9uIHRoZSBzY3JlZW4gYXQgbGVhc3QKKyAgICAgIHZhciB4ID0gIChzZWxmLnNjcmVlbi5hdmFpbFdpZHRoIC0gd2luX2RpbS53aWR0aCkgLyAyOworICAgICAgdmFyIHkgPSAgKHNlbGYuc2NyZWVuLmF2YWlsSGVpZ2h0IC0gd2luX2RpbS5oZWlnaHQpIC8gMjsJCisgICAgfQorICAgIHdpbmRvdy5tb3ZlVG8oeCx5KTsKKyAgfQorICAKKyAgWGluaGEuYWRkRG9tMEV2ZW50KGRvY3VtZW50LmJvZHksICdrZXlwcmVzcycsIF9fZGxnX2Nsb3NlX29uX2VzYyk7CisgIHdpbmRvdy5fX2RsZ19pbml0X2RvbmUgPSB0cnVlOworfQorCitmdW5jdGlvbiBfX2RsZ190cmFuc2xhdGUoY29udGV4dCkgeworCXZhciB0eXBlcyA9IFsiaW5wdXQiLCAic2VsZWN0IiwgImxlZ2VuZCIsICJzcGFuIiwgIm9wdGlvbiIsICJ0ZCIsICJ0aCIsICJidXR0b24iLCAiZGl2IiwgImxhYmVsIiwgImEiLCAiaW1nIl07CisJZm9yICh2YXIgdHlwZSA9IDA7IHR5cGUgPCB0eXBlcy5sZW5ndGg7ICsrdHlwZSkgeworCQl2YXIgc3BhbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSh0eXBlc1t0eXBlXSk7CisJCWZvciAodmFyIGkgPSBzcGFucy5sZW5ndGg7IC0taSA+PSAwOykgeworCQkJdmFyIHNwYW4gPSBzcGFuc1tpXTsKKwkJCWlmIChzcGFuLmZpcnN0Q2hpbGQgJiYgc3Bhbi5maXJzdENoaWxkLmRhdGEpIHsKKwkJCQl2YXIgdHh0ID0gWGluaGEuX2xjKHNwYW4uZmlyc3RDaGlsZC5kYXRhLCBjb250ZXh0KTsKKwkJCQlpZiAodHh0KSB7CisJCQkJCXNwYW4uZmlyc3RDaGlsZC5kYXRhID0gdHh0OworCQkJCX0KKwkJCX0KKwkJCWlmIChzcGFuLnRpdGxlKSB7CisJCQkJdmFyIHR4dCA9IFhpbmhhLl9sYyhzcGFuLnRpdGxlLCBjb250ZXh0KTsKKwkJCQlpZiAodHh0KSB7CisJCQkJCXNwYW4udGl0bGUgPSB0eHQ7CisJCQkJfQorCQkJfQorCQkJaWYgKHNwYW4udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdpbnB1dCcgJiYgCisJCQkJCSgvXihidXR0b258c3VibWl0fHJlc2V0KSQvaS50ZXN0KHNwYW4udHlwZSkpKSB7CisJCQkJdmFyIHR4dCA9IFhpbmhhLl9sYyhzcGFuLnZhbHVlLCBjb250ZXh0KTsKKwkJCQlpZiAodHh0KSB7CisJCQkJCXNwYW4udmFsdWUgPSB0eHQ7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWRvY3VtZW50LnRpdGxlID0gWGluaGEuX2xjKGRvY3VtZW50LnRpdGxlLCBjb250ZXh0KTsKK30KKworLy8gY2xvc2VzIHRoZSBkaWFsb2cgYW5kIHBhc3NlcyB0aGUgcmV0dXJuIGluZm8gdXBwZXIuCitmdW5jdGlvbiBfX2RsZ19jbG9zZSh2YWwpIHsKKwlvcGVuZXIuRGlhbG9nLl9yZXR1cm4odmFsKTsKKwl3aW5kb3cuY2xvc2UoKTsKK30KKworZnVuY3Rpb24gX19kbGdfY2xvc2Vfb25fZXNjKGV2KSB7CisJZXYgfHwgKGV2ID0gd2luZG93LmV2ZW50KTsKKwlpZiAoZXYua2V5Q29kZSA9PSAyNykgeworCQlfX2RsZ19jbG9zZShudWxsKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9wb3B1cHMvc2VsZWN0X2NvbG9yLmh0bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9wb3B1cHMvc2VsZWN0X2NvbG9yLmh0bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9wb3B1cHMvc2VsZWN0X2NvbG9yLmh0bWwKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3BvcHVwcy9zZWxlY3RfY29sb3IuaHRtbApkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcmVsZWFzZS1ub3Rlcy50eHQgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9yZWxlYXNlLW5vdGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWY2YWFhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvcmVsZWFzZS1ub3Rlcy50eHQKQEAgLTAsMCArMSw0OTEgQEAKK1hpbmhhIC0gVGhlIENvbW11bml0eS1CdWlsdCBPbmxpbmUgSFRNTCBFZGl0b3IKKworRm9yIGJ1ZyByZXBvcnRzLCBmb3J1bSwgYW5kIHVwZGF0ZXMgZ28gdG8gCitodHRwOi8veGluaGEub3JnCisKK1JlbGVhc2UgSGlzdG9yeQorCis9PSBYaW5oYSAxLjUgIkEgTG9uZyBUaW1lIENvbWluZyIgPT0KKworQSBsb25nIHRpbWUgcGFzc2VkIGJldHdlZW4gdGhlIHJlbGVhc2Ugb2YgMC45Ni4xIGFuZCAxLjUsIGR1cmluZyB0aGlzIHRpbWUgWGluaGEgd2FzIGluIGRhaWx5IHJlbGlhYmxlIHVzZSwgZXNwZWNpYWxseSBieSB1c2VycyBvZiBDaHJvbWUgYW5kIG90aGVyICJnb29kIiBicm93c2VycywgcGVyaGFwcyBub3Qgc28gbXVjaCBJRS4gIEluIGVhcmx5IDIwMTggSmFtZXMgU2xlZW1hbiAoZ29nbykgZ290IGluc3BpcmVkIGluIGEgZmV3IHdlZWtzIG9mIGZyZWUgdGltZSB0byBkbyBzb21lIHVwZGF0ZXMgdG8gYnJpbmcgWGluaGEgYmFjayB0byB1cCB0byBzcGVlZCB3aXRoIGFsbCBicm93c2VycywgYWRkaW5nIG5ldyBmZWF0dXJlcyBjbGVhbmluZyB1cCBvbGQgYnVncywgYW5kIGdlbmVyYWxseSBtYWtpbmcgWGluaGEgcmVhZHkgZm9yIGl0J3MgbmV4dCA1IG9yIDEwIHllYXJzIG9mIHJlbGlhYmxlIHNlcnZpY2UgdG8gY29tZS4KKworPT09IEJ1Z3MgRml4ZWQgPT09CisgICogIzE1OTUgc3Vob3NoaW4gY2F1c2VkIGlzc3VlcyB3aXRoIE1vb3Rvb2xzRmlsZU1hbmFnZXIKKyAgKiAjMTYxOSBkVHJlZSdzIE5vZGUgb2JqZWN0IGNvbmZsaWN0aW5nIHdpdGggRE9NCisgICogWzEzMzJdIGlQaG9uZS9pUGFkIEZpeGVzCisgICogWzEzMzJdIFN0eWxpc3Qgc3RhcnR1cCByZWxpYWJsaWxpdHkgZml4CisgICogWzEzMzZdIEZpeCBmb3IgYSBjb25zb2xlIHdhcm5pbmcgaW4gQ2hyb21lCisgICogIzE2MDkgIFJlbmFtZSB0aGUgQ1NTIHBsdWdpbiB0byBDU1NEcm9wRG93bnMgdG8gYXZvaWQgdGhlIG5hdGl2ZSBDU1MgT2JqZWN0IGluIEZpcmVmb3gKKyAgKiAjMTYwMSAgRml4IHN0YXR1cyBiYXIgd2lkdGgKKyAgKiAjMTU4OSAgRml4IGNyYXNoIGluIEVxdWF0aW9uIHBsdWdpbgorICAqICMxNTY4ICBGaXggc29tZSA3IGJpdCBjbGVhbiBVUkxzIHdpdGggVHJhbnNmb3JtSW5uZXJIVE1MCisgICogIzE1MjAgIFJlbW92ZSBjbGFzcyBhdHRyaWJ1dGVzIGNvcnJlY3RseSB3aGVuIGNsZWFuaW5nIHdvcmQKKyAgKiAjMTQ4NyAgUHJldmVudCAiRGlzY28gRmV2ZXIiIHdpdGggbXVsdGlwbGUgZWRpdG9ycyBkdWUgdG8gYSByYWNlIGNvbmRpdGlvbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMKKyAgKiAjMTQ4MCAgRml4IHNvbWUgb2RkaXRpZXMgd2l0aCBJbnNlcnRBbmNob3IgcGx1Z2luCisgICogIzE0MjAgIFJlbW92ZSB0aGUgU2F2ZSBBcyBidXR0b24sIHRoaXMgaXMgbm90IHJlbGV2YW50IGFueSBtb3JlLgorICAqICMxMjQ1ICBGaXggcGVyY2VudCB3aWR0aCBhbmQgaGVpZ2h0IGluIERPTXdhbGsKKyAgKiAjMTM2MSAgSW5jcmVhc2UgdGhlIHotSW5kZXggZm9yIHRoZSAibG9hZGluZyIgbWVzc2FnZQorICAqIFsxMzYwXSBTbWFsbCBmaXggZm9yIFNtYXJ0UmVwbGFjZSBwbHVnaW4KKyAgKiAjMTI3OSAgQ2hhbmdlIGVyZWcgdG8gcHJlZyBpbiBTdXBlckNsZWFuIHRpZHkgcGhwIAorICAqIFsxMzY3XSBJbXByb3ZlIHdhcm5pbmdzIChpbiB0aGUgY29uc29sZSkgZm9yIGRlcHJlY2F0ZWQgcGx1Z2lucy4KKyAgKiAjMTU3OCAgRml4IENvbG9yUGlja2VyIHNjcm9sbGluZyBhbmQgcG9zaXRpb25pbmcKKyAgKiBbMTM3M10gRml4IHBhZGRpbmcgb2Ygc2tpbi1sZXNzIGJ1dHRvbnMgaW4gdGhlIHRvb2xiYXIuCisgICogIzEzNTggIEhpZGUgU21hcnRSZXBsYWNlIHdoZW4gaW4gdGV4dG1vZGUKKyAgKiAjMTYxMiAgRml4IGxpc3QgZWxlbWVudCBjcmVhdGlvbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMgaW4gR2Vja28KKyAgKiAjMTQyMiAgRml4IGFsZ29yaXRobSBmb3IgZGV0ZXJtaW5pbmcgc2VsZWN0ZWQgZm9udCBzdHlsZXMgKGltcGxlbWVudGF0aW9uYWwgZGlmZmVyZW5jZSBvbmx5KQorICAqICMxNDg0ICBSZXdyaXRlIGV4cGFuZFJlbGF0aXZlVXJsIHRvIHdvcmsgcHJvcGVybHkKKyAgKiBbMTQwMF0gUmVwYWlyIEdyZWVrIFRyYW5zbGF0aW9ucworICAqIFsxNDAxXSBSZXBhaXIgTGF0dmlhbiBUcmFuc2xhdGlvbnMKKyAgKiBbMTQxM10gRml4IGZvciB0aGUgdG9vbGJhciBpbiBJRTEwCisKKyAgCis9PT0gTmV3IEZlYXR1cmVzIGFuZCBJbXByb3ZlbWVudHMgPT09CisgICogQWRkIGEgbmV3IHdheSBvZiBsb2FkaW5nIFhpbmhhIHdoaWNoIGlzIG11Y2ggZWFzaWVyLCBjYWxsZWQgWGluaGFFYXN5LmpzLCB0aGlzIGNhbiBhbHNvIGJlIHVzZWQgZnJvbSBhIENETiB0eXBlIGFycmFuZ2VtZW50LCBldmVuIGlmIHlvdSB3YW50IHRvIHVzZSBQSFAgcGx1Z2lucyAod2hpY2ggYXJlIG9uIHlvdXIgbG9jYWwgc2VydmVyKS4gIFNlZSB0aGUgZXhhbXBsZXMgYW5kIHRoZSBOZXdiaWVHdWlkZSAgCisgICogWzEzMzJdIE5ldyBQbHVnaW4gZXZlbnQgb25CZWZvcmVTdWJtaXRUZXh0YXJlYQorICAqICMxNjAyICBBbGxvdyBzZXR0aW5nIGVkaXRvciBldmVudHMgYWZ0ZXIgbWFrZUVkaXRvcnMgYW5kIGJlZm9yZSBzdGFydEVkaXRvcnMKKyAgKiAjMTYwMCAgSW1wcm92ZSBzY3JvbGxpbmcgd2hlbiBhIG5ldyBwYXJhZ3JhcGggaXMgZW50ZXJlZAorICAqICMxNTQ2ICBBZGQgYW4gb25Nb3VzZVVwIGV2ZW50CisgICogIzEzOTEgIEltcHJvdmUgUHJlc2VydmVTY3JpcHRzIHBsdWdpbi4KKyAgKiAjMTUxMSAgSW1wcm92ZSBTdXBlckNsZWFuIHBsdWdpbgorICAqICMxNDc2ICBJbXByb3ZlIENvbnRleHRNZW51IHdoZW4gdXNpbmcgbmF0aXZlIGJyb3dzZXIgc3BlbGwgY2hlY2tpbmcKKyAgKiAjMTQzMiAgU3VwcG9ydCB0aXRsZSBhdHRyaWJ1dGUgaW4gdGhlIExpbmtlciBwbHVnaW4KKyAgKiAjMTM0MyAgQWRkIHNvbWUgVHVya2lzaCB0cmFuc2xhdGlvbnMKKyAgKiAjMTQ4OSAgQWRkIHNvbWUgUG9ydHVndWVzZSBCcmF6aWxpYW4gdHJhbnNsYXRpb25zCisgICogIzExNjMgIEFkZCBlZGl0aW5nIHN1cHBvcnQgZm9yIHRoIGluIFRhYmxlT3BlcmF0aW9ucworICAqIFsxMzY2XSBBZGQgYSAuaHRhY2Nlc3MgdG8gdW5zdXBwb3J0ZWRfcGx1Z2lucyB0byByZXN0cmljdCBhY2Nlc3MgdG8gcG9zc2libGUgc2VjdXJpdHkgdGhyZWF0ZW5pbmcgcGx1Z2lucyB0byBhcHByb3ZlZCBJUCBhZGRyZXNzZXMuCisgICogWzEzNzFdIFVwZGF0ZSBNb290b29sc0ZpbGVNYW5hZ2VyIHRvIG5vIGxvbmdlciByZXF1aXJlIEZsYXNoICh1c2VzIEhUTUw1IHVwbG9hZGluZykgYW1vbmdzdCBzb21lIG90aGVyIHNtYWxsIGltcHJvdmVtZW50cy4KKyAgKiBbMTM3OF0gSW1wcm92ZSBoYW5kbGluZyBvZiB0YWIga2V5LCBhZGQgY29uZmlndXJhdGlvbiB0YWJTcGFuQ2xhc3MgYW5kIHRhYlNwYW5Db250ZW50cworICAqICMxNjE3ICBJbXBsZW1lbnQgdGFiL3NoaWZ0LXRhYiBmb3IgVGFibGVPcGVyYXRpb25zCisgICogIzExNjMgIEFsbG93IGNoYW5naW5nIHRhYmxlIGNlbGxzIGJldHdlZW4gdGQvdGggaW4gVGFibGVPcGVyYXRpb25zCisgICogIzE1NTAgIE1ha2Ugc29tZSBmZWF0dXJlcyBvZiBUYWJsZU9wZXJhdGlvbnMgbGVzcyBjb25mdXNpbmcgYW5kIGltcHJvdmUgYm9yZGVyIHN0eWxpbmcuCisgICogWzEzOTRdIFJld3JpdGUga2V5IGV2ZW50IGhhbmRsaW5nIHRvIG1ha2Uga2V5IGV2ZW50cyBtb3JlIHN0YW5kYXJkaXNlZCAoIzEzOTMpIAorICAqIFsxMzk3XSBJbXByb3ZlIHRoZSB1bmRvL3JlZG8gYnkgYWxzbyByZW1lbWJlcmluZyB0aGUgY2FyZXQgcG9zaXRpb24gYW5kIHJlc3RvcmluZyB0aGF0IG9uIHVuZG8vcmVkbyAoIzM2MCkKKyAgKiAjMTEzNSAgVXBkYXRlIFN1cGVyQ2xlYW4gdG8gaW5jb3Jwb3JhdGUgVW5Gb3JtYXQgZnVuY3Rpb25hbGl0eQorICAqIFsxNDAyXSBSZWJ1aWxkIHRoZSB0cmFuc2xhdGlvbiBzeXN0ZW0gYW5kIGxhbmd1YWdlIGZpbGVzIGVudGlyZWx5LiAgU2VlIGh0dHA6Ly90cmFjLnhpbmhhLm9yZy93aWtpL0RvY3VtZW50YXRpb24vRGV2ZWxvcGluZ0ZvclhpbmhhL1RyYW5zbGF0aW5nCisgICogWzE0MDNdIFVzZSBtZXJnZWQgdHJhbnNsYXRpb24gZmlsZXMgYnkgZGVmYXVsdCAgCisgICogWzE0MThdIEFkZCBjb25maWd1cmF0aW9uIG9wdGlvbiByZXNpemFibGVFZGl0b3Igd2hpY2ggYWxsb3dzIGRyYWctcmVzaXplLiAgV29ya3MgaW4gQ2hyb21lLCBub3QgdGhhdCB3ZWxsIGluIHRoZSBvdGhlcnMuCisgICogWzE0MjFdIFJlZHVjZSB0aGUgInBpbmdpbmciIHRvIGxvYWQgcGx1Z2lucyBieSB1dGlsaXNpbmcgYSBQbHVnaW4gTWFuaWZlc3Qgc28gWGluaGEga25vd3Mgd2hhdCBwbHVnaW5zIGl0IGhhcyBpbiBpdCdzIGRpc3RyaWJ1dGlvbi4gIFRoaXMgYWxzbyBtYWtlcyB1c2luZyBYaW5oYSBmcm9tIGFuIEFtYXpvbiBTMyBzZXJ2ZWQgZW52aXJvbm1lbnQgcG9zc2libGUuCisgICogWzE0MjNdIEltcHJvdmUgbG9jay1kb3duIG9mIHRoZSBjb250cmliIGZvbGRlciwgYWNjZXNzaW5nIHRoaXMgZm9sZGVyIGZyb20gYSB3ZWIgYnJvd3NlciBpcyBub3QgbmVjZXNzYXJ5IG9yIGRlc2lyYWJsZS4KKyAgCis9PT0gTmV3IFBsdWdpbnMgPT09CisgICogV2ViS2l0UmVzaXplIFByb3ZpZGVzIGRyYWctcmVzaXplIGZvciBpbWFnZXMsIHRhYmxlcyBhbmQgdGFibGUgY2VsbHMgaW4gV2ViS2l0IEJyb3dzZXJzLCBhbHNvIGZvciB0YWJsZXMgYW5kIGNlbGxzIGluIEdlY2tvIEJyb3dzZXJzLgorICAqIEVuY29kZU91dHB1dCBQcm92aWRlcyBhYmlsaXR5IHRvIGVuY29kZSB0aGUgZ2VuZXJhdGVkIEhUTUwgb2YgWGluaGEgaW4gc29tZSBtYW5uZXJzIGJlZm9yZSBzdWJtaXR0aW5nIGl0IHRvIHRoZSBzZXJ2ZXIsIGZvciBleGFtcGxlIHRvIGF2b2lkIG1vZF9zZWN1cml0eSBpc3N1ZXMuCisgICogTGlzdE9wZXJhdGlvbnMgUHJvdmlkZXMgdGFiL3NoaWZ0LXRhYiBmdW5jdGlvbmFsaXR5IHdoZW4gZWRpdGluZyBsaXN0cyAoICMxNjE0ICkKKyAgKiBGYW5jeVNlbGVjdHMgUHJvdmlkZXMgImZhbmN5IiBzZWxlY3RzIGZvciB0aGUgZm9udCBzdHlsZSBldGMgd2hpY2ggc2hvdyB0aGUgZm9udCBpbiB1c2UuICBVc2VzIHRoZSBzZWxlY3QyIGpRdWVyeSBjb21wb25lbnQgYmVoaW5kIHRoZSBzY2VuZXMgKGpRdWVyeSBpcyBsb2FkZWQgYXV0b21hdGljYWxseSBpZiBuZWNlc3NhcnkpLgorICAqIFByZXNlcnZlU2VsZWN0aW9uIEFsbG93cyBzZWxlY3RlZCB0ZXh0IGluIHRoZSBXWVNJV1lHIHZpZXcgdG8gYWxzbyBiZSBzZWxlY3RlZCB3aGVuIHlvdSBzd2l0Y2ggdG8gdGV4dG1vZGUgKCMxNTQ0KQorICAgIAorICAKKz09PSBEZXByZWNhdGVkIFBsdWdpbnMgPT09CisgICogWzEzNTFdIERlcHJlY2F0ZSBTcGVsbENoZWNrZXIgcGx1Z2luLCBuYXRpdmUgYnJvd3NlciBzcGVsbCBjaGVja2luZyB3b3JrcyB3ZWxsIGVub3VnaCBhbmQgZXhlY3V0aW5nIGFzcGVsbCBvbiBob3N0cyBuZXZlciByZWFsbHkgd29ya2VkIHRoYXQgcmVsaWFibHkuCisgICogWzEzNTVdIERlcHJlY2F0ZSB0aGUgUGVyc2lzdGFudFN0b3JhZ2UgYW5kIGFzc29jaWF0ZWQgcGx1Z2lucywgdGhlc2UgYXJlIGFiYW5kb25lZC4KKyAgKiBbMTM2Nl0gRGVwcmVjYXRlIEV4dGVuZGVkRmlsZU1hbmFnZXIgYW5kIEltYWdlTWFuYWdlciwgdGhlIE1vb3Rvb2xzRmlsZU1hbmFnZXIgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBib3RoLgorICAqICMxMTM1ICBEZXByZWNhdGUgVW5Gb3JtYXQsIFN1cGVyQ2xlYW4gbm93IGhhcyBpdCdzIGZlYXR1cmVzLgorCis9PSBYaW5oYSAxLjAgPT0KKworWGluaGEgMS4wIHdhcyBuZXZlciBhY3R1YWxseSByZWxlYXNlZCwgaXQgd2FzIGp1c3QgdGhlIHN0YWJsZSBidXQgIlVucmVsZWFzZWQgVHJ1bmsiIGJldHdlZW4gMC45Ni4xIHJlbGVhc2VkIGluIDIwMTAgYW5kIDEuNSByZWxlYXNlZCBpbiAyMDE4LgorCis9PT0gSW1wcm92ZW1lbnRzID09PQorICogVXBkYXRlIE1vb3Rvb2xzRmlsZU1hbmFnZXIgdG8gYSBuZXcgdmVyc2lvbgorICogWzEzMTNdIFJlZHVjZSBQSFAgU2Vzc2lvbiBsb2NraW5nCisgKiAjMTU0MSBbMTI5Nl0gWzEyODldIE1vcmUgQ29uZmlndXJhYmxlIEZvcm1hdEJsb2NrIG9wdGlvbnMKKyAqIFsxMjk0XSBCZXR0ZXIgZG9jdW1lbnRhdGlvbiBmb3IgbXVsdGlzdGFnZSBsb2FkZXIKKyAKKyA9PT0gQnVncyBGaXhlZCA9PT0KKyAqICMxNTgxICMxNTI0ICMxNTc3IElFIEZpeGVzIChlc3BlY2lhbGx5IElFOSkKKyAqIFsxMzEzXSBGaXhlcyB0byBJbnNlcnRUYWJsZSwgRE9NV2FsaywgU3R5bGlzdCBhbmQgUGFzdGVUZXh0CisgKiAjMTI5OCBDU1MgU3R5bGluZyBnZXRzIGluc2VydGVkIGludG8gdGFibGUgY2VsbCBhZnRlciB2aWV3aW5nIHNvdXJjZQorICogWzEzMDFdIFJlbW9pdmUgb2xkIGNoYXJhY3Rlcm1hcCBwb3B1cCAoZGlzdXNlZCkKKyAqICMxNTI4IER1dGNoIExhbmdNYXJrcyB0cmFuc2xhdGlvbiBmaXgKKyAqICMxNTM0IEFsbG93ICJmdWxsc2NyZWVuIiBhcyB0b29sYmFyIGVsZW1lbnQuCisgKiAjMTUyNSBFeHRlbmQgZnJlZXplc2NyaXB0IHRvIGFwcGx5IHRvIHBsYWluIHNjcmlwdCB0YWdzCisgKiAjMTUyNiBIaWRlIG1lZGlhIG9iamVjdHMgYmVoaW5kIGRpdi10eXBlIGRpYWxvZ3MKKyAqIFVwZGF0ZXMgdG8gTW9vdG9vbHNGaWxlTWFuYWdlcgorICogIzE1MzIgRml4IGluZGV4T2YgaW1wbGVtZW50YXRpb24gKGZvciBJRSkKKyAqICMxNTUzIEZpeCBgZWRpdG9yLl9jcmVhdGVMaW5rYCBtZXRob2QgYW5kIGFiaWxpdHkgdG8gZG91YmxlLWNsaWNrIG9uIGxpbmtzIHRvIGVkaXQgdGhlbQorICogIzE1NTYgRml4IGBlZGl0b3IuX2luc2VydFRhYmxlYCBtZXRob2QKKyAqICMxNTU5IERlZmluaXRpb25MaXN0IHBsdWdpbidzIGA8ZGw+YCBidXR0b24gdGhyb3dzIGEgSlMgZXJyb3IgaWYgdGhlIGN1cnNvciBjb250ZXh0IGlzIHRoZSBgPGJvZHk+YCBlbGVtZW50CisgKiAjMTU1NSBNYXJrIERvdWJsZUNsaWNrIHBsdWdpbiBhcyB1bnN1cHBvcnRlZCwgc2luY2UgaXRzIGZ1bmN0aW9uYWxpdHkgaXMgbm93IGluIGNvcmUgKGBjb25maWcuZGJsY2xpY2tMaXN0YCwgYXMgb2YgMC45Ni4xIHJlbGVhc2UpCisgKiAjMTU2MSBNb3ZlIERlZmluaXRpb25MaXN0IHBsdWdpbidzIHRvb2xiYXIgYnV0dG9ucyBuZWFyIHRoZSBzdGFuZGFyZCBvcmRlcmVkbGlzdCBhbmQgdW5vcmRlcmVkbGlzdCBidXR0b25zCisgKiAjMTU2MCBJZiBUYWJsZU9wZXJhdGlvbnMgaXMgaW5zdGFsbGVkLCB5b3UgY2FuIG5vdyBkb3VibGUtY2xpY2sgb24gdGFibGVzIHRvIGVkaXQgdGhlaXIgcHJvcGVydGllcworICogIzE1NTcgUnVzc2lhbiB0cmFuc2xhdGlvbiBmb3IgRGVmaW5pdGlvbkxpc3QKKyAqICMxNTM4IEFkZCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBUYWJsZU9wZXJhdGlvbnMgdG8gcHJldmVudCBpdCBmcm9tIHRyeWluZyB0byBhZGQgYSBsaW5lYnJlYWsgdG8gdGhlIHRvb2xiYXIKKyAqICMxNTQ1IEZpeCB0eXBvIGluIFVuRm9ybWF0IHBsdWdpbgorICogIzE1MzAgRml4IGEgRGVmaW5pdGlvbkxpc3Q/IHN5bnRheCBlcnJvciBhbmQganNsaW50IHdhcm5pbmdzCisgKiBJbXByb3ZlIHNvbWUgZG9jdW1lbnRhdGlvbiBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgKCMxNTM2LCAjMTUzNykKKyAqICMxNTM0IEFsbG93IHRoZSB1c2Ugb2YgImZ1bGxzY3JlZW4iIGFzIGEgdG9vbGJhciBlbGVtZW50LCBhcyBhbiBhbHRlcm5hdGl2ZSB0byAicG9wdXBlZGl0b3IiCisKKworPT0gWGluaGEgMC45Ni4xID09Cis9PT0gQnVncyBGaXhlZCA9PT0KKworICogIzE0MjUgW1NtYXJ0UmVwbGFjZV1bR2Vja29dIFdoZW4gaW5zZXJ0aW5nIG9wZW5pbmcgcXVvdGUsIHRoZSBzcGFjZSBiZWZvcmUgdGhlIGN1cnNvciBpcyBkZWxldGVkCisgKiAjMTQyOSBQcm9ibGVtcyB3aXRoIEFwYWNoZSBhbmQgSEVBRCByZXF1ZXN0cy4uLgorICogIzE0NzggRnVydGhlciBpbXBvcnRhbnQgc2VjdXJpdHkgcHJlY2F1dGlvbnMgZm9yIEV4dGVuZGVkRmlsZU1hbmFnZXIgYW5kIEltYWdlTWFuYWdlcgorICogIzE0NzggSGlkZSBhbGwgZG90ZmlsZXMgZnJvbSB0aGUgTGlua2VyIHNjYW5uZXIsIHRoZSBsaW5rZXIgc2hvdWxkbid0IGJlIHNob3dpbmcgImhpZGRlbiIgZmlsZXMuCisgKiAjMTQ3OCBDU1MgZml4IHRvIGRUcmVlIGluIGxpbmtlciwganVzdCB0byBtYWtlIHN1cmUgaXQncyBzdHlsZXMgd2VyZSBub3QgZ2V0dGluZyBjbG9iYmVyZWQuCisgKiAjMTQ3OCBTdG9wIHRoZSBTdHlsaXN0IGZyb20gcG9zc2libHkgYWRkaW5nIGEgIGR1cGxpY2F0ZSBzdHlsZXNoZWV0IGludG8gcGFnZVN0eWxlU2hlZXRzLCB0aGlzIHdhcyBjcmVhdGluZyBhIHN1YnRsZSBwcm9ibGVtIGluIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4KKyAqICMxMjI3ICBJbXByb3ZlZCBoYW5kbGluZyBvZiBDU1MgaW1wb3J0cyBpbiBTdHlsaXN0IHBsdWdpbi4KKyAqICMxNDQ4IGFbYi5pZF0gaXMgdW5kZWZpbmVkCisgKiAjMTM4NyBwcmV2ZW50IGNyYXNoIGluIElFIAorICogIzExOTggRml4IGZvciBiYWQgc2l6aW5nIG9mIGVkaXRvci4KKyAqICMxMTIxIERpc2FibGUgdGFiIGluIEludGVybmV0IEV4cGxvcmVyIGJlY2F1c2UgaXQgZXhpdHMgdGhlIFhpbmhhIGFyZWEuCisgKiAjNDcyICBEaXNhYmxlIEluc2VydFBpY3R1cmUKKyAqICM1NzkgUGFzcyB2YWx1ZSB0byBkcm9wZG93biBoYW5kbGVycy4KKyAqICMxNDcyIF90b3Agbm90IHJlc3BlY3RlZCBpbiBlZGl0aW5nIGxpbmsuCisgKiAjMTQ2NyBhdXRvZm9jdXM9ZmFsc2Ugbm90IHdvcmtpbmcgYXMgZXhwZWN0ZWQuCisgKiAjMTQ2MSBTcGVjaWFsIGNoYXJhY3RlcnMgaW4gaW1hZ2UgbWFrZSB0aHVtYm5haWwgbm90IGFwcGVhci4KKyAqICMxNDM1IElFIGZhaWxlZCBpbiBUcmFuc2Zvcm1Jbm5lckhUTUwKKyAqICMxMjMyIENsaWNrYWJsZSBpY29ucyBvbiBFeHRlbmRlZEZpbGVNYW5hZ2VyCisgKiAjMTQwOSBJbWFnZSBQcm9wZXJ0aWVzIGJyb2tlbiBpbiBDb250ZXh0TWVudQorICogIzE0MTkgU3R5bGlzdCBkaXNwbGF5IHByb2JsZW0gaW4gSUU2LzcsIEhhc0xheW91dCBidWcuCisgKiAjMTI2MiBBbHRlcm5hdGl2ZSBtZXRob2QgZm9yIHJlc3RvcmluZyBmcm9tIGZ1bGxzY3JlZW4gbW9kZS4KKyAqICMxMzg4IENoYW5nZSAmbWRhc2g7IHRvICY4MjEyOyBmb3IgeG1sIGNvbXBhdGFiaWxpdHkuCisgKiAjMTA5MywgIzEzNzcgUmV3cml0ZSB0aGUgSW5zZXJ0U21pbGV5IHBsdWdpbi4gIFJlbWFpbnMgY29tcGF0aWJsZSB3aXRoIHJheSdzIGNoYW5nZXMgaW4gcjkwNCBpZiBwZW9wbGUgaGF2ZSBtYWRlIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KKyAqICMxMjgyIE9wZXJhIGxvc2luZyBpdCdzIGV2ZW50cyB3aGVuIGRlc2lnbk1vZGUgdHVybmVkIG9uIGNhdXNpbmcgc3RhdHVzIGJhciB0byBub3QgdXBkYXRlIGFtb25nc3Qgb3RoZXIgdGhpbmdzLgorICogcjEyMjggUmVtb3ZlIFBlcnNpc3RhbnRTdG9yYWdlIGZyb20gTmV3YmllIGV4YW1wbGUsIGJlY2F1c2UgaXQgbm90IGFjdHVhbGx5IHVzYWJsZSBhdG0KKyAqIHIxMjI5IEZpeCBmaXJlZm94IHZlcnNpb24gZGV0ZWN0aW9uLgorICogcjEyMzAgYXZvaWQgdW5lY2Vzc2FyeSBwb2xsdXRpb24gb2YgZ2xvYmFsIG5hbWVzcGFjZQorICogcjEyMzIgUmVtb3ZlZCBDQyBsaWNlbnNlIGZyb20gVGFuZ28gaWNvbnNldCwgYXMgaXQgc2VlbXMgbm90IGFwcHJvcHJpYXRlCisgKiByMTIzMiBDaGFuZ2VkIEh0bWxFbnRpdGllcyBwbHVnaW4gbGljZW5zZSB0byBIVE1MQXJlYQorICogIzE0ODggRml4IENvbnRyb2wgU2VsZWN0aW9uIGluIElFOAorICogcjEyMzUgQ2hhbmdlIGxpY2Vuc2UgdG8gSFRNTEFyZWEgLSBzZWUgaHR0cDovL3hpbmhhLm9yZy9wdW5iYi92aWV3dG9waWMucGhwP2lkPTI0OTkKKyAqICMxNDk3IFRyYW5zZm9ybUlubmVySHRtbCBoYW5kbGluZyBvZiBvYmplY3QgdGFnCisgKiAjMTQ5OCBDb2xvciBwaWNrZXIgZGlzcGxheSBpbiBuZXcgZGlhbG9ncyBpbiBJRTYKKyAqICMxNDk5IEZpeCBmb2N1cyBlcnJvcnMgaW4gbmV3IGRpYWxvZ3MgaW4gSUUKKyAqICMxNTAzIHhpbmhhX3RvX2pzIGRpZCBub3QgaGFuZGxlIGJvb2xlYW5zIGNvcnJlY3RseQorICogIzE1MDkgUHJldmVudCBhdHRlbXB0aW5nIHRvIGNvbXByZXNzIFJFcyBpbiBTYWZhcmkgNAorICogIzE1MTUgU2VjdXJpdHkgcGF0Y2ggdG8gcHJldmVudCByb2d1ZSBhY2Nlc3MgdG8gdGhlIGNvbXByZXNzb3JzIGluIGNvbnRyaWIuCisgKiAjMTUxOCBTZWN1cml0eSBwYXRjaCB3aGljaCBwcmV2ZW50cyBub24tZGVmYXVsdCBrZXlzIGluIHhpbmhhX3Bhc3NfdG9fcGhwX2JhY2tlbmQuCisgKiAjMTUxOCBJc3N1ZSBhbiBlcnJvciBhbmQgaWdub3JlIHRoZSBzcGVjaWFsIGJhY2tlbmQgY29uZmlndXJhdGlvbiB3aGVuIHRoZSBrZXkgbG9jYXRpb24gaXMgbm9uIGRlZmF1bHQsIGZvciBib3RoIHRoZSBJbWFnZU1hbmFnZXIgYW5kIEV4dGVuZGVkRmlsZU1hbmFnZXIgZGVwcmVjYXRlZCBjb25maWcgcGFzc2luZyBtZXRob2RzLgorICogIzEyMDkgYW5kICMxMTgyIFVwZ3JhZGUgRXF1YXRpb24gdG8gdXNlIG5ldyBBc2NpaU1hdGgsIGZpeCBtdWx0aXBsZSBlcXVhdGlvbiBlZGl0aW5nLiBUaGFua3MgdG8gTmlyYWogQmhhd25hbmkgb2YgVW5pdmVyc2l0eSBvZiBOZXcgU291dGggV2FsZXMuCisgKiAjMTQ4MyBGaXggY2FuY2VsIGJ1dHRvbiBpbiBFcXVhdGlvbiBlZGl0b3IuCisgKiAjMTQ4NSBBZGQgYSBkb3VibGUtY2xpY2sgaGFuZGxlciB3aGljaCB3aWxsIGJyaW5nIHVwIHRoZSBsaW5rL2ltYWdlIGluc2VydGlvbiBkaWFsb2dzIChvciBJbWFnZU1hbmFnZXIvTGlua2VyKSB3aGVuIGEgbGluayBvciBpbWFnZSBpcyBkb3VibGUgY2xpY2tlZC4KKyAqICMxNDkyIEZpeCBsaW5rZXIgaW4gc29tZSBzaXR1YXRpb25zLgorICogIzE0NzEsICMxNTA4LCAjMTUxMCBGaXggSUU4IHByb2JsZW1zIHdpdGggVGFibGVPcGVyYXRpb25zIGFuZCBvdGhlciBidXR0b25zLCBhbmQgYWJzb2x1dGUgcG9zaXRpb25lZCBlZGl0aW5nLgorCis9PT0gTmV3IEZlYXR1cmVzID09PQorCisgKiByMTE4OSBhZGRlZCB0b29sYmFyIGNvbmZpZyB0byBOZXdiaWUgZXhhbXBsZQorICogIzE0NzggQWRkIG5ldyBtZXRob2QgWGluaGEuZXh0ZW5kIHRvIHByb3ZpZGUgbW9yZSBjbGFzc2ljYWwgb2JqZWN0IG9yaWVudGVkIHN1YmNsYXNzZXMgd2l0aGluIEphdmFzY3JpcHQuCisgKiAjMTQ3OCBBZGQgbmV3IG1ldGhvZCBYaW5oYS5EaWFsb2c6OnNldExvY2FsaXplcigpIHRvIG1vcmUgZWFzaWx5IHNldCBhIHNwZWNpZmljIGxvY2FsaXplciBmb3IgYSBkaWFsb2cuCisgKiAjMTQ3OCBGaWxlLVBpY2tlciBvbiBhcmJpdHJhcnkgZmllbGRzIG91dHNpZGUgWGluaGEgKEV4dGVuZGVkRmlsZU1hbmFnZXIpCisgKiAjMTQ3OCBBZGQgY29uZmlnIG9wdGlvbiB0byB1c2UgSFNwYWNlIGFuZCBWU3BhY2UgaW4gSW1hZ2VNYW5hZ2VyIChkZWZhdWx0IG9mZikKKyAqICMxNDc4IEFkZCBZb3VUdWJlIGFuZCBGbGlja3Igc3VwcG9ydCB0byBJbWFnZU1hbmFnZXIgc28gdGhhdCB2aWRlb3MgYW5kIEZsaWNrciBpbWFnZXMgY2FuIGJlIHNlYXJjaGVkIGFuZCBzZWxlY3RlZCBpbiB0aGUgSW1hZ2VNYW5hZ2VyLgorICogIzE0NzggQWRkIGEgbmV3IGRpYWxvZyB0eXBlICJEZXRhY2hlZERpYWxvZyIgdG8gaGVscCBsZXZlcmFnZSBYaW5oYSBwbHVnaW5zIHRvIHBlcmZvcm0gdGFza3Mgb3V0c2lkZSBvZiBYaW5oYSwgYW5kIGFuIGV4YW1wbGUgb2YgYSBzaW1wbGUgZGlhbG9nIGZvciB0aG9zZSB3aG8gd2lzaCB0byBtYWtlIHRoZWlyIG93bi4KKyAqICMxNDc4IExpbmstUGlja2VyICBvbiBhcmJpdHJhcnkgZmllbGRzIG91dHNpZGUgWGluaGEgKExpbmtlcikKKyAqICMxNDc4IE5ldyBQbHVnaW46IFd5c2l3eWdXcmFwIC0gY29tYmluZWQgd2l0aCBhbiBhcHByb3ByaWF0ZSBwYWdlU3R5bGVTaGVldChzKSB5b3UgY2FuIG1vcmUgZWFzaWx5IHNpbXVsYXRlIGluIFhpbmhhIHdoYXQgaXQgd2lsbCAibG9vayBsaWtlIiB3aGVuIHRoYXQgSFRNTCBpcyAicHVibGlzaGVkIi4KKyAqICMxNDQ2IFByb3ZpZGUgYSBtZWFucyBmb3IgYWRkaW5nIGN1c3RvbSBob29rcyBpbnRvIHRoZSBDb250ZXh0TWVudSBwbHVnaW4uCisgKiAjMTIyMCBBZGQgYWJpbGl0eSB0byBwYXNzIGV4dHJhIGFyZ3VtZW50cyBpbiB0aGUgcG9zdCB0byB0aGUgYmFja2VuZCBoYW5kbGVyIGZvciBTdXBlckNsZWFuLgorICogIzE0NjUgIEFkZCBhbiBvcHRpb24gYHJlc2l6ZV9maWxlc2AgdG8gYm90aCBFeHRlbmRlZEZpbGVNYW5hZ2VyIGFuZCBJbWFnZU1hbmFnZXIsIGRlZmF1bHRzIHRydWUsIGZhbHNlIHR1cm5zIG9mZiB0aGUgYXV0b21hdGljIGltYWdlIHJlc2l6aW5nLgorICogIzExODkgQWRkIHRoZSB4bWw6bGFuZyBhdHRyaWJ1dGUgdG8gTGFuZ01hcmtzIHBsdWdpbi4gIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIHBsdWdpbiBoYXMgY2hhbmdlZCwgb2xkIGNvbmZpZ3VyYXRpb25zIGFyZSBhY2NlcHRlZCB3aXRoIGEgd2FybmluZyB0byB0aGUgY29uc29sZS4KKyAqICMxNDMzIEFkZCBhIFNhdmVPbkJsdXIgcGx1Z2luLCBhdXRob3JlZCBieSBQZXRlciBTaWV3ZXJ0ICh3aXRoIGEgY2xlYW4gdXAgYnkgSmFtZXMgU2xlZW1hbikuCisgKiAjMTQ3OSBBZGQgQ1NTUGlja2VyIHBsdWdpbi4KKyAqICMxMjA1IEFkZCBhbGxvd19kZWxldGUgYW5kIGFsbG93X2VkaXQgdG8gSW1hZ2VNYW5hZ2VyCisgKiAjMTIwNSBBZGQgYWxsb3dfZGVsZXRlIHRvIEV4dGVuZGVkRmlsZU1hbmFnZXIKKyAqICMxNDk2IE1ha2UgZGlhbG9nIHRpdGxlIGJhciBsb2dvIHNraW5hYmxlCisgKiByMTI0MyBBZGRlZCBhIG1ldGhvZCB0byBhbGxvdyBwbHVnaW5zIHRvIGVhc2lseSBsb2FkIGFzc2V0cyBzeW5jaHJvbm91c2x5IChmb3IgZGVwZW5kYW5jaWVzKS4gCisgKiAjMTUwMiBBZGQgbmV3IHBsdWdpbiBNb290b29sc0ZpbGVNYW5hZ2VyIC0gYW4gYWR2YW5jZWQgaW1hZ2UgYW5kIGZpbGUgdXBsb2FkZXIvcGlja2VyL2luc2VydGVyIHdpdGggbXVsdGktZmlsZS11cGxvYWQsIHByb2dyZXNzIGJhcnMsIGFuZCBwcmV2aWV3cy4KKyAqICMxNTA3IENvbmZpZyBvcHRpb24gdG8gc2hvdyBmb250cyBpbiB0b29sYmFyIHVzaW5nIGFjdHVhbCBmb250cy4KKworPT09IFRyYW5zbGF0aW9uID09CisKKyAqICMxNDc3IERhbmlzaCB0cmFuc2xhdGlvbiBmb3IgRXh0ZW5kZWRGaWxlTWFuYWdlciBhbmQgU3VwZXJDbGVhbgorICogcjEyMDUgVXBkYXRlZCBEYW5pc2ggdHJhbnNsYXRpb24uCisgKiAjMTQ3MCBDb250cmlidXRpb24gZnJvbSBOaWVscyBCYWdnZXNlbiB0byBhc3Npc3QgdHJhbnNsYXRvcnMuCisgKiAjMTQ1NCwgIzE0NTUsICMxNDU2LCAjMTQ1NywgIzE0NTgsICMxNDU5LCAjMTQ2MCBTcGFuaXNoIHRyYW5zbGF0aW9ucy4KKyAqICMxNDY5IFVwZGF0ZWQgZGFuaXNoIHRyYW5zbGF0aW9uLgorCisKKz09IFhpbmhhIDAuOTZiZXRhMiA9PQorPT09IEJ1Z3MgRml4ZWQgPT09CisgKiAjMTM3NiBbSUU2ICYgSUU3IFF1aXJrc21vZGVdIERpYWxvZ3MgYXJlIGludmlzaWJsZQorICogIzEzODEgW0lFXSBRdWlya3NNb2RlIGRpYWxvZyBiYWNrZ3JvdW5kIHJlbmRlcmVkIGluIHdyb25nIHBvc2l0aW9uIHdoZW4gcGFuZWwgaXMgZGV0YWNoZWQKKyAqICMxMzgzIFtJRTddIFNlY3VyZSBhbmQgTm9uc2VjdXJlIFdhcm5pbmcKKyAqICMxMzgyIFtJRV0gUXVpcmtzTW9kZSBkaWFsb2cgYmFja2dyb3VuZCBmYWxzZWx5IG5vbi1ncmV5IHdpdGggbW9kYWwgZGlhbG9ncywgZ3JleSB3aGVuIGRyYWdnaW5nIG1vZGVsZXNzIGRpYWxvZ3MKKyAqICMxMzg5IFtJRTZdIHNlbGVjdGlvbiBsb3N0IHdoZW4gY2xpY2tpbmcgdG9vbGJhciBidXR0b24KKyAqICMxMzg2IFtTYWZhcmldIFNldHRpbmcgZGVmYXVsdCBjaGVja2JveCBzZXR0aW5ncyBpbiBkaWFsb2dzIGRvZXMgbm90IHdvcmsKKyAqICMxMzk0IGZ1bGxwYWdlIHB1dHMgbWV0YXMvIHRpdGxlIGFsbCBvbiB0aGUgc2FtZSBsaW5lCisgKiAjMTM5MCBQcmVzZXJ2ZVNjcmlwdHMgc2hvcnRoYW5kIHBocCB0YWdzCisgKiAjMTM5MiB0b28gbXVjaCByZWN1cnNpb24gd2hlbiBzZXR0aW5nIEhUTUwgaW4gZnVsbFBhZ2UgbW9kZSB1c2luZyBvbkdlbmVyYXRlL29uR2VuZXJhdGVPbmNlCisgKiAjMTQwNyBbSUU4XSB3aW5kb3cgcmVzaXplIGNhdXNlcyBpbmZpbml0ZSBsb29wCisgKiAjMTQwOCBQSFA1IElJUyBmaWxlIHVwbG9hZCBwcm9ibGVtCisgKiAjMTM3NCBbSUU4XSBUYWJsZSBpbnNlcnQgbm90IHdvcmsKKyAqICMxMzc5IFtGaXJlZm94XSBubyBsb25nZXIgY29ycnVwdHMgaW1hZ2UgZGF0YSBmcm9tIGJyb2tlbiBpbWFnZXMKKworPT09IFRyYW5zbGF0aW9uID09PQorICogW1NtYXJ0UmVwbGFjZV0gQWRkZWQgRnJlbmNoIHRyYW5zbGF0aW9uCisgKiAjMTQwNiBbRnVsbFNjcmVlbl0gQWRkZWQgU3BhbmlzaCB0cmFuc2xhdGlvbgorCis9PSBYaW5oYSAwLjk2YmV0YSA9PQorPT09IEJ1Z3MgRml4ZWQgPT09CisgKiAjMzE0IFN0YXR1cyBiYXIgc2hvdWxkIHdyYXAKKyAqICM3NDEgQ29udGV4dE1lbnUgc2hvdWxkIG5vdCBvdmVyZmxvdyB3aW5kb3cgYm91bmRhcmllcworICogIzk2MSBiYXNlSHJlZiBub3QgY29ycmVjdGx5IHRyZWF0ZWQgd2hlbiBzdHJpcHBpbmcKKyAqICMxMTYwIFNhZmFyaSBwdXRzIHNlbGVjdGVkIEhUTUwgbmVhciBib3R0b20gaWYgZWRpdGVkCisgKiAjMTE2NiBUYWJsZU9wZXJhdGlvbnMgZGlhbG9ncyBkbyBub3QgcmVzaXplIHByb3Blcmx5IGluIFNhZmFyaSAzCisgKiAjMTE3MyBJRTggYmV0YSB0b29sYmFycyBicm9rZW4KKyAqICMxMTc0IElFOCBiZXRhIG5vIHRleHQgY3Vyc29yIGluIHd5c2l3eWcKKyAqICMxMTg3IEV4dGVuZGVkRmlsZU1hbmFnZXIgImltZ01hbmFnZXIuY2hhbmdlRGlyIGlzIG5vdCBhIGZ1bmN0aW9uIiBlcnJvcgorICogIzExOTMgU3R5bGlzdCBidWcgd2hlbiBmb3JtYXR0aW5nIHNlbGVjdGVkIHRleHQKKyAqICMxMjEzIFdvdWxkIGJlIG5pY2UgdG8gcHJvdGVjdCB1bnNhdmVkIGNoYW5nZXMgZnJvbSBhY2NpZGVudGFsIGxvc3Mgd2hlbiBuYXZpZ2F0aW5nIGF3YXkKKyAqICMxMjIxIFNlbGVjdGluZyBoZWFkaW5nIG5vcm1hbCBvbiBub3RoaW5nIHRocm93cyBleGNlcHRpb24gYWxlcnQKKyAqICMxMjI0IHNldmVuYml0Y2xlYW4/IC8gZ2hvc3QgY3Vyc29yIGVycm9yIHdpdGggaHRtbCBtb2RlIHRvZ2dsZSAoRmlyZWZveCkKKyAqICMxMjI3IE5vIENTUyBydWxlcyBsb2FkIHdoZW4gdXNpbmcgQGltcG9ydCBpbiBleHRlcm5hbCBzdHlsZXNoZWV0CisgKiAjMTIzMCBDU1Mgd2lkdGggYXR0cmlidXRlIGJyZWFrcyBzZWxlY3QgZGlzcGxheSBpbiBJRQorICogIzEyNDAgTGlua2VyOiB0cmltIHNwYWNlcyBmcm9tIFVSTAorICogIzEyNDcgQ2hhckNvdW50ZXIgcHJvYmxlbXMgd2l0aCBTaWx2YSBza2luCisgKiAjMTI1NyBFcnJvciBpZiB1cmwgcXVlcnkgc3RyaW5nIGluY2x1ZGVkICcvJworICogIzEyNTggRXZlbnQgb2JqZWN0IGlzIG5vdCBoYW5kZWQgb3ZlciB0byBldmVudCBoYW5kbGVycyBpbnN0YWxsZWQgb24gdGV4dGFyZWEKKyAqICMxMjYxIER1dGNoIHRyYW5zbGF0aW9uIGZvciBGdWxsc2NyZWVuIG1vZHVsZQorICogIzEyODAgcmVzdG9yZVNlbGVjdGlvbiBkb2Vzbid0IGFsd2F5cyB3b3JrIGluIGludGVybmV0IGV4cGxvcmVyCisgKiAjMTI4MSBzZWxlY3ROb2RlQ29udGVudHMgaXMgYm9ya2VuIGluIElFIHdoZW4gdGhlIG5vZGUgaXMgYSB0ZXh0IG5vZGUKKyAqICMxMjg0IF9lZGl0b3JfdXJsIGlzIHN0aWxsIHVzZWQgaW4gYSBjb3VwbGUgb2YgcGx1Z2lucy4KKyAqICMxMjg2IHVzZSBjYWxsYmFja3MgYXMgY3JpdGVyaWEgZm9yIGdldEZpcnN0QW5jZXN0b3IKKyAqICMxMjg4IFtEZWZpbml0aW9uTGlzdF0gbGlzdCBpdGVtcyByZXN0cmljdGVkIHRvIHNtYWxsIHdpZHRoIGFuZCBvbmUgbGluZSBieSBDU1MKKyAqICMxMjkwIEltcHJvdmVkIHN1cHBvcnQgZm9yIHBhc3RpbmcgZnJvbSBNaWNyb3NvZnQgV29yZAorICogIzEyOTEgWGluaGEucmVtb3ZlRnJvbVBhcmVudCgpIGRvZXMgbm90IHJldHVybiBjb3JyZWN0IHJlZmVyZW5jZQorICogIzEyOTIgY2hhbmdlIG5hbWluZyBzY2hlbWUgb2YgcGx1Z2luIGZpbGVzCisgKiAjMTI5MyBbR2Vja29dIFdpbmRvdyBzY3JvbGxzIHRvIHRvcCBvZiBlZGl0aW5nIGFyZWEgd2hlbiBzd2l0Y2hpbmcgZnJvbSB0ZXh0IHRvIFdZU0lXWUcKKyAqICMxMjk0IEVkaXRvciBoaWdoZXIgaW4gSFRNTCBtb2RlCisgKiAjMTI5NSBUZXh0YXJlYSBub3QgYWxpZ25lZCB1bmRlciB0b29sYmFyCisgKiAjMTI5OCBDU1Mgc3R5bGluZyBnZXRzIGluc2VydGVkIGludG8gdGFibGUgY2VsbCBhZnRlciB2aWV3aW5nIHNvdXJjZSAoU2FmYXJpIG9ubHkpCisgKiAjMTMwMCBjcmVhdGUgbmFtZXNwYWNlIGZvciBwbHVnaW5zIHdpdGhpbiBYaW5oYSBuYW1lc3BhY2UKKyAqICMxMzAxIGxvYWRpbmcgc2hvdWxkIG5vdCBmYWlsIGlmIHBsdWdpbiBvbWl0cyBfcGx1Z2luSW5mbworICogIzEzMDIgYWRkIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoIGZvciBCcm93c2VyIHRoYXQgZG9lc24ndCBzdXBwb3J0IGl0CisgKiAjMTMwMyBhZGQgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgpCisgKiAjMTMwNiBUb29sYmFyIGFjdGlvbnMgbmVlZCBhY2Nlc3MgdG8gdGhlIGNsaWNrIGV2ZW50CisgKiAjMTMwOSBYaW5oYSBjaG9rZXMgb24gYW5jaG9ycworICogIzEzMTUgWGluaGEncyBfYWRkRXZlbnQgdXNlcyBldmVudCBjYXB0dXJpbmcKKyAqICMxMzE2IEluIEludGVybmV0RXhwbG9yZXIsIHRoZSBjdXJzb3IgaXMgbG9zdCB3aGVuIHN3aXRjaGluZyBpbnRvIHNvdXJjZSBtb2RlCisgKiAjMTMxNyBYaW5oYSdzIHBvc3RiYWNrIGFuZCBnZXRiYWNrIHNob3VsZCBhbGxvdyBmb3IgZmFpbHVyZSBoYW5kbGVycworICogIzEzMTkgbWFrZSBldmVudCBob29rcyBsaWtlIG9uS2V5UHJlc3MgYWNjZXNpYmxlIGZyb20gdGhlIGNvbmZpZyBvYmplY3QKKyAqICMxMzIwIG1ha2UgaXQgcG9zc2libGUgdG8gdXNlIHBuZyBpbWFnZXMgYXMgaWNvbnMgaW4gSUU2CisgKiAjMTMyMSBbU2F2ZVN1Ym1pdF0gaWNvbiBpcyBpbiAiY2hhbmdlZCIgc3RhdGUgaW5pdGlhbGx5CisgKiAjMTMyMiBbU2F2ZVN1Ym1pdF0gZXJyb3Igd2hlbiBmb3JtIGFjdGlvbiBpcyBlbXB0eQorICogIzEzMzIgUGFuZWwgY2xhc3NlcyBhcmUgdmVyeSBnZW5lcmljLCBhbmQgcmlzayBjb25mbGljdCB3aXRoIHVzZXJzIGVtYmVkZGluZyBpdCBpbiB0aGVpciBzaXRlCisgKiAjMTMzNyBHZXRIVE1MIHRydW5jYXRlcyBoeXBlcmxpbmtzCisgKiAjMTM0NiBzdGF0dXNiYXIgc2hvd3MgYiwgaSwgc3RyaWtlIGluc3RlYWQgb2Ygc3Ryb25nLCBlbSwgYW5kIGRlbAorICogIzEzNTcgc2FmYXJpIGZvcm0gc3VibWl0IGhhcyBlbXB0eSBmb3JtIGZpZWxkIG5hbWVzIGluIFBPU1QgZGF0YSwgY2F1c2VzIGZhaWx1cmUgd2l0aCBwZXJsIENHSQorCisgCis9PT0gRW5oYW5jZW1lbnRzID09PQorICogIzExNzYgQ29tcGxldGVseSByZXZhbXBlZCBkaWFsb2cgc3lzdGVtLCB3aGljaCB1c2VzIGlubGluZSBsaWdodGJveC1zdHlsZSBkaWFsb2dzIGluc3RlYWQgb2Ygc2VwYXJhdGUgcG9wdXAgd2luZG93cyAKKyAqICMzMjYgQWRkZWQgc3VwcG9ydCBmb3IgY3VzdG9taXphYmxlIGljb24gc2V0cworICogIzEzMTggQWRkZWQgaWNvbiBzZXQgZnJvbSB0aGUgVGFuZ28gUHJvamVjdAorICogIzEyODcgTmV3IEluc2VydE5vdGUgcGx1Z2luIGZvciBoYW5kbGluZyBmb290bm90ZXMsIHdpdGggYXV0b21hdGljIG5vdGUgbnVtYmVyaW5nIGFuZCBvcmRlcmluZywgbGlua2luZywgYW5kIHN1cHBvcnQgZm9yIHJlcGVhdGVkIHJlZmVyZW5jZXMKKyAqICMxMjg5IE5ldyBJbnNlcnRTbmlwcGV0MiBwbHVnaW4sIHdpdGggY2F0ZWdvcml6YXRpb24gb2Ygc25pcHBldHMsIHNlYXJjaCBieSBuYW1lLCBhbmQgYW4gWE1MIGRhdGEgZm9ybWF0CisgKiAjNTggQWRkaXRpb25hbCBzZXR0aW5ncyBmb3IgTGlua2VyIHBsdWdpbiAobGluayB0eXBlcyBhbmQgdGFyZ2V0cyBjYW4gYmUgY29uZmlndXJlZCkKKyAqICMxMjE5IENvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGF1dG9mb2N1cyBlZGl0b3IKKyAqICMxMjg1IENvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHNldCBkb2N1bWVudCBib2R5IGNsYXNzCisgKiAjMTMyMyBBbGxvdyBza2lucyB0byBoYXZlIG1ldGEgaW5mb3JtYXRpb24gKGF1dGhvciwgZXRjLikKKyAqICMxMzM4IF9lZGl0b3JfdXJsIGlzIG5vdyBhdXRvbWF0aWNhbGx5IGRldGVjdGVkCisgKiAjMTM0NSBBZGQgYSBzdGF0aWMgZnVuY3Rpb24gdGhhdCBzYXZlcyB0aGUgY29udGVudHMgb2YgYWxsIFhpbmhhcyB0byB0aGVpciByZXNwZWN0aXZlIHRleHRhcmVhcworCisKKz09IFhpbmhhIDAuOTUgPT0KKz09PSBCdWdzIEZpeGVkID09PQorICogZml4ZWQgIzEwNDAgaHRtbFJlbW92ZVRhZ3MgZG9lc24ndCB3b3JrIGluIElFIAorICogZml4ZWQgIzY0NSBJRSBTYXZlIGFzIGZ1bmN0aW9uIG9ubHkgc2F2ZXMgdGhlIG9yaWdpbmFsIGh0bWwgCisgKiBmaXhlZCAjMTEzNiBGRjMgTGludXggc2VsZWN0IGJveGVzIGluIHRvb2xiYXIgYXJlIHRvbyBzbWFsbCAKKyAqIGZpeGVkICMxMTAwIEV4dGVuZGVkIEZpbGUgTWFuYWdlciAtIEVycm9yIGFmdGVyIG9wZW5pbmcgd2luZG93CisgKiBmaXhlZCAjMTEwMyBbVHJhbnNmb3JtSW5uZXJIVE1MXSBJRSBicmVha3Mgc2luZ2xldCBhdHRyaWJ1dGVzIHN0YXJ0aW5nIHdpdGggIm5vIgorICogZml4ZWQgIzEwODYgUmVwZWF0ZWQgamF2YXNjcmlwdCBpbnNlcnRpb24gaW4gb25jbGljayBhdHRyaWJ1dGVzCisgKiBmaXhlZCAjMTA5NCBJRSB0aHJvd3MgZXJyb3IgaW4gWGluaGEubG9hZFN0eWxlIGZ1bmN0aW9uCisgKiBmaXhlZCAgIzExMTcgSUUgcmV0dXJucyBqYXZhc2NyaXB0IGVycm9yIC0xMDcyODk2NjU4CisgKiBmaXhlZCAjOTkzIFBhZ2VTdHlsZSB0byBvdmVycmlkZSBzdHlsZXMgaW4gUGFnZVN0eWxlc2hlZXRzCisgKiAjMTExMiBzd2l0Y2hpbmcgYmV0d2VlbiBtb2RlcyBsZWF2ZXMgc3RyYW5nZSBjaGFyYWN0ZXJzIGluIHNvdXJjZSAKKyAqIGZpeGVkICMxMTI4IGxvYWRpbmcgZmFpbHMgd2hlbiBGdWxsc2NyZWVuIHRyaWVkIHRvIGxvYWQgYXMgcGx1Z2luCisgKiBmaXhlZCAjMTEyNiBQZXJjZW50ICglKSBpbiBVUkwgcHJldmVudCBzdHJpcFNlbGZOYW1lZEFuY2hvcnMgZnJvbSB3b3JraW5nICAKKyAqIGZpeGVkICMxMTIwIEhUTUwgc2VsZWN0IG92ZXJsYXBzIGNvbG9yIHBpY2tlciBpbiBJRTYKKyAqICMxMTE1ICsgIzExMjcgZml4ZWQgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBGaXJlZm94IDMKKyAqICM5NjEgKyAgIzExMzAgY2hhbmdlZCBiZWhhdmlvdXIgb2YgeGluaGFfY29uZmlnLmJhc2VIcmVmCisgKiBmaXhlZCAjNjQ1IFNhdmUgYXMgZnVuY3Rpb24gb25seSBzYXZlcyB0aGUgb3JpZ2luYWwgaHRtbAorICogZml4ZWQgIzEwNDAgaHRtbFJlbW92ZVRhZ3MgZG9lc24ndCB3b3JrIGluIElFCisgKiBmaXhlZCAjMTAxNSBNb3ppbGxhIHNob3dzIHNjcm9sbGJhcnMgb24gY2xpY2sgaW4gU3R5bGlzdCAKKyAqICM5MTggcmVtb3ZlZCBtb3pQYXJhSGFuZGxlciBkaXJ0eSBhcyBpdCBoYWQgYmVlbiBicm9rZW4gZm9yIGEgbG9uZyB0aW1lCisgKiBmaXhlZCAjMTAxNSBNb3ppbGxhIHNob3dzIHNjcm9sbGJhcnMgb24gY2xpY2sgaW4gU3R5bGlzdCAKKyAqIGZpeGVkICMxMTQ4IEhUTUwgZW50aXRpZXMgYnJlYWsgd2hlbiBjdXJzb3IgaXMgaW5zaWRlIHdoZW4gc3dpdGNoaW5nIGZyb20gSFRNTCB0byBXWVNJV1lHIAorICogZml4ZWQgIzExNTEgZm9ybSBhY3Rpb24gYWx3YXlzIG1hZGUgYWJzb2x1dGUKKyAqIGZpeGVkICMxMTU1IEluc2VydEFuY2hvciBicm9rZW4gaW4gSUUgNworICogZml4ZWQgIzExNTggW0ltYWdlTWFuYWdlcl0gaW4gSmFwYW5lc2UgZW52aXJvbm1lbnQsIGFuIGVycm9yIG9jY3VycyBieSByZWFkaW5nIG9mIGxhbmcvamEuanMgaW4gSUU2LzcgCisgKiBmaXhlZCAjMTE1MiBQbHVnaW5zIHVzaW5nIHN1cnJvdW5kSFRNTCAoRWRpdFRhZywgTGFuZ01hcmtzKSBubyBsb25nZXIgd29yayBpbiBJRTcKKyAqIGZpeGVkICMxMTYxIHBlcm1pc3Npb24gZXJyb3IgZnJvbSBDb2xvclBpY2tlci5qcworICogZml4ZWQgIzExODEgW1RhYmxlT3BlcmF0aW9uc10gVGFibGUgT3B0aW9ucyBkaWFsb2cgZmlyc3QgZW50cnkgZm9yIGJvcmRlciBzdHlsZSBmYXVsdHkKKyAqIGZpeGVkICMxMTg1IFtUYWJsZU9wZXJhdGlvbnNdIElFOiBzdHlsZSBmbG9hdCBicm9rZW4KKyAqIGZpeGVkICMxMTk3IFtMaW5rZXJdIElFIHNob3dzIGJ1ZyBpbiBsaW5lIDI2MgorICogZml4ZWQgIzEyMDAgW0xpbmtlcl0gRGlhbG9nIGRvZXMgbm90IHNob3cgaWYgc2Nhbm5lZCBmb2xkZXIgZW1wdHkKKyAKKz09PSBFbmhhbmNlbWVudHMgPT09CisgKiAjMTE0MyBhZGQgU2FmYXJpIHN1cHBvcnQKKyAqICM5MzggIGFkZCBPcGVyYSBzdXBwb3J0CisgKiAjMTEzOCBhZGRlZCBBUEkgZnVuY3Rpb25zIFhpbmhhLmdldEVkaXRvcigpLCBYaW5oYS5wcm90b3R5cGUuZ2V0UGx1Z2luSW5zdGFuY2UoKSwgWGluaGEuYWRkT25sb2FkSGFuZGxlcigpIAorICogIzExMzcgW0VxdWF0aW9uXSBGRjMgZml4ZXMgJiBpbXByb3ZlZCB3YXkgb2YgYXZvaWRpbmcgZm9ybXVsYSBjaGFuZ2VzIGluIGVkaXRvcgorICogIzExNTAgc3luY2hyb25pemUgIlJlbW92ZSBGb3JtYXQiIGJldHdlZW4gYnJvd3NlcnMKKyAqIGFkZGVkIHBsdWdpbiBQcmVzZXJ2ZVNjcmlwdHMgZm9yIGVuaGFuY2VkIGVkaXRpbmcgb2YgcGFnZXMgY29udGFpbmluZyBQSFAgYW5kL29yIEphdmFTY3JpcHQgKCkKKyAqIExvYWRpbmcgbWVzc2FnZSBmYWNlbGlmdAorICogYWRkZWQgWGluaGFMb2FkZXIuanMgZm9yIGVuaGFuY2VkIHVzZXIgZXhwZXJpZW5jZSB0aHJvdWdoIGVhcmx5IGxvYWRpbmcgbWVzc2FnZQorICogbWFkZSBYaW5oYS5tYWtlRWRpdG9ycyBhY2NlcHQgYSBET00gcmVmZXJlbmNlIHRvIHRoZSB0ZXh0YXJlYSBpbnN0ZWFkIG9mIHRoZSBpZCBhcyBwYXJ0IG9mIHhpbmhhX2VkaXRvcnMgYXJyYXkgKCMxMTA1KQorICogIzExMjMgQWxsb3cgcmV0dXJuIG9mIFBIUCBhcnJheSBmcm9tIHhpbmhhX3Bhc3NfdG9fcGhwX2JhY2tlbmQKKyAqIFtMaW5rZXJdIHNjYW4ucGhwOiBBbGxvdyBzcGVjaWZpY2F0aW9uIG9mIGJhc2UgdXJsIHRvIHVzZSAoc28gdGhhdCBhIHN1YmRpcmVjdG9yeSBjYW4gYmUgdXNlZCBhcyAkZGlyIGFuZCByZXR1cm4gYXBwcm9wcmlhdGUgdXJscyB0byB0aGUgZmlsZXMgKHByZWZpeGluZyB0aGUgdXJsCisgKiBbRXh0ZW5kZWRGaWxlTWFuYWdlcl0gbmV3IFZlcnNpb24KKyAqICM5NjEgKyAgIzExMzAgY2hhbmdlZCBiZWhhdmlvdXIgb2YgeGluaGFfY29uZmlnLmJhc2VIcmVmCisgKiAjMTEzNyBbRXF1YXRpb25dIGltcHJvdmVkIHdheSBvZiBhdm9pZGluZyBmb3JtdWxhIGNoYW5nZXMgaW4gZWRpdG9yCisgKiAjNDQyIHJlbW92ZWQgYWxlcnQgIllvdXIgRG9jdW1lbnQgaXMgbm90IHdlbGwgZm9ybWVkLi4uIgorICogIzExMTkgZGlzYWJsZWQgRmlyZWZveCAyIHNwZWxsIGNoZWNrIHdoZW4gQ29udGV4dE1lbnUgaXMgZW5hYmxlZCAKKyAqIGFkZGVkIGEgcGx1Z2luICJHZW5lcmljUGx1Z2luIiBhcyBhIGRlbW9jYXNlIGZvciBwbHVnaW4gZXZlbnQgaGFuZGxlcnMKKyAqICMxMTcxIFtTbWFydFJlcGxhY2VdIG5vdyBhbHNvIHJlcGxhY2VzIHRocmVlIGRvdHMgd2l0aCBhbiBlbGxpcHNpcworICogIzExMTkgW0NvbnRleHRNZW51XSBvcHRpb25hbGx5IHN3aXRjaCBvZiBGaXJlZm94IFNwZWxsIGNoZWNrCisgKiAjMTE3MiBbTGFuZ01hcmtzXSBtYWtlIGF2YWlsYWJsZSBsYW5ndWFnZXMgY29uZmlndXJhYmxlCisgKiBlbmhhbmNlZCBiZWhhdmlvdXIgd2hlbiB4aW5oYV9jb25maWcuYmFzZUhyZWYgaXMgc2V0IHRvIGFub3RoZXIgc2VydmVyCisgKiAjMTE5NSBBbGxvdyB0byBzcGVjaWZ5IGFuIGV4dGVybmFsIHVybCB0byBsb2FkIGEgcGx1Z2luIGZyb20KKyAqICMxMjAxIEFkZCBpbndhcmRIdG1sL291dHdhcmRIdG1sIGZ1bmN0aW9ucyB0byBDb25maWcgb2JqZWN0CisgCis9PT0gSTE4biA9PT0KKyAqICMxMTA5IFNwYW5pc2ggbGFuZ3VhZ2UgZXh0ZW5kZWQKKyAqICMxMTE2IFtFeHRlbmRlZEZpbGVNYW5hZ2VyXSBhZGRlZCBGcmVuY2ggdHJhbnNsYXRpb24KKyAqICM4NTMgdXBkYXRlZCBUcmFuc2xhdGlvbiBmb3IgZmFyc2kKKyAqIGZpeGVkIHdyb25nIGVuY29kaW5nIGluIFNwYW5pc2ggbGFuZ3VhZ2UgZmlsZSAKKyAqIGZpeGVkIG5vIGJvbGQvaXRhbGljL3VuZGVybGluZSBidXR0b24gaW1hZ2VzIGluIFNwYW5pc2gKKyAqICAjMTE5NCBbRXh0ZW5kZWRGaWxlTWFuYWdlcl0gdXBkYXRlZCBGcmVuY2ggdHJhbnNsYXRpb24KKworIAorPT0gWGluaGEgMC45NCA9PQorICogVGlja2V0ICMxMDkzIFtJbnNlcnRTbWlsZXldIHJlbW92ZSBzbWlsZXkgZ2lmcyBmcm9tIHRydW5rCisgKiBmaXhlZCBUaWNrZXQgIzEwMTkgQ3Vzb3Igbm90IGp1bXBpbmcgdG8gZWRpdGFibGUgcGFydCBvZiB3aW5kb3cgd2hlbiBjbGlja2VkIGluIElFCisgKiBbVGFibGVPcGVyYXRpb25zXSBBZGQgY29uZmlnIG9wdGlvbiB0byBub3QgZGlzcGFseSB0b29sYmFyIGJ1dHRvbnMKKyAqIGZpeGVkIFRpY2tldCAjMTAyMSAgUHJldmVudCBFeHRlbmRlZEZpbGVNYW5hZ2VyIGZyb20gbWFza2luZyBJbWFnZU1hbmFnZXIKKyAqIGZpeGVkIFRpY2tldCAjMTAyMyBbSW1hZ2VNYW5hZ2VyXSBBZGQgY29uZmlnIGl0ZW0gdG8gYWxsb3cgdGhlIGFkdmFuY2VkIGltYWdlIG9wdGlvbnMgdG8gYmUgaGlkZGVuIGZyb20gdGhlIHVzZXIKKyAqIGZpeGVkIFRpY2tldCAjMTAyNiBmaXggcHJvYmxlbXMgd2l0aCBsb2FkaW5nIHNraW5zCisgKiBmaXhlZCBUaWNrZXRzICMxMDMwICYgIzEwMzE6IHNsb3cgbG9hZGluZyBsYXJnZSBwYWdlcyBpbiBJRQorICogZml4ZWQgVGlja2V0ICMxMDM0IFtFeHRlbmRlZEZpbGVNYW5hZ2VyXSBDb2xvciBwaWNrZXJzIHNob3duIHdoZW4gdXNlX2NvbG9yX3BpY2tlcnMgaXMgZmFsc2UKKyAqIGZpeGVkIFRpY2tldCAjMTAzNSBbVHJhbnNmb3JtSW5uZXJIVE1MXSB0YWdzIGNvcnJ1cHRlZHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcworICogZml4ZWQgVGlja2V0ICMxMDM2IFtFeHRlbmRlZEZpbGVNYW5hZ2VyXSB3aW5kb3cgaXMgb25seSByZXNpemVkIGFmdGVyIGFsbCB0aHVtYm5haWxzIGhhdmUgYmVubiBsb2FkZWQsIHdoaWNoIGNhbiB0YWtlIHF1aXRlIHNvbWUgdGltZQorICogZml4ZWQgVGlja2V0ICMxMDM5IEZpcmVmb3ggZnVsbCBwYWdlIGFkZHMgbXVsdGlwbGUgcGFyYWdyYXBocyBhZnRlciB2aWV3IHNvdXJjZQorICogZml4ZWQgVGlja2V0ICMxMDE5IEN1c29yIG5vdCBqdW1waW5nIHRvIGVkaXRhYmxlIHBhcnQgb2Ygd2luZG93IHdoZW4gY2xpY2tlZCBpbiBJRTcKKyAqIGZpeGVkIFRpY2tldCAjMTA0NiBFcnJvciBpbiBJRSA2IHdoZW4gc3dpdGNoaW5nIGZyb20gdGV4dCB0byB3eXNpd3lnCisgKiBbRE9Nd2Fsa10gbGluZWJyZWFrcyBpbnNlcnRlZCBiZWZvcmUgPGJyIC8+cworICogY2F0Y2ggZXJyb3IgaW4gSUUgd2hlbiB0cnlpbmcgdG8gcmVzdG9yZSBzZWxlY3Rpb24gb24gbm9uLWRpc3BsYXllZCBhcmVhCisgKiBmaXhlZCBUaWNrZXQgIzk3MyBFcnJvciBzd2l0Y2hpbmcgd3lzaXd5Zy9odG1sIGluY2x1ZGluZyBqYXZhc2NyaXB0IGZpbGUgb24gdGhlIGNvZGUKKyAqIGZpeGVkIFRpY2tldCAjMTAyOCAgLSBbTGlua2VyXSBhdXRvbWF0aWNhbGx5IChhdHRlbXB0IHRvKSB3b3JrIGFyb3VuZCBhbiBpc3N1ZSB3aXRoIG1vZF9zZWN1cml0eSBiZWluZyB0cmlnZ2VyZWQgYmVjYXVzZSBvZiB0aGUgY2hhcnNldCBvbiBvdXIgUE9TVCByZXF1ZXN0cworICogZml4ZWQgVGlja2V0ICMxMDU1IFtTdHlsaXN0XSBJbmFwcHJvcHJpYXRlIHN0eWxlcyAoZm9yIG90aGVyIHRhZ3MpIGFyZSBzaG93bgorICogYWRkZWQgRHV0Y2ggbGFuZ3VhZ2UgZmlsZXMKKyAqIGFkZGVkIG5ldyBob29rICdvbkJlZm9yZVN1Ym1pdCcgZm9yIGZpcmVQbHVnaW5FdmVudCgpCisgKiBhZGRlZCBuZXcgaG9vayAnb25CZWZvcmVVbmxvYWQnIGZvciBmaXJlUGx1Z2luRXZlbnQoKQorICogZml4ZWQgVGlja2V0ICMxMDQ4IEZ1bGwgU2NyZWVuIHBsdWdpbiBkb2Vzbid0IGxvYWQgaWYgbWFueSBlZGl0b3JzIG9uIHBhZ2UKKyAqIGZpeGVkIFRpY2tldCAjMTA1MyBMaXN0VHlwZSBwbHVnaW4gZG9lc24ndCB3b3JrIGluIHBhbmVsIGNvbmZpZyB3aXRoIG11bHRpcGxlIGVkaXRvcnMKKyAqIGZpeGVkIFRpY2tldCAjMTAyNiBTa2lucyByZWZlcmVuY2VkIHdpdGggPGxpbms+LXRhZ3MgZG9uJ3Qgd29yayBhbnltb3JlCisgKiBmaXhlZCBUaWNrZXQgIzEwNTkgW0VxdWF0aW9uXSBsb29zaW5nIGZvcm11bGEgb25zdWJtaXQKKyAqIGZpeGVkIFRpY2tldCAjMTA2MCBbRXF1YXRpb25dIHZhcmlvdXMgdXBkYXRlcworICogW0VxdWF0aW9uXSBwcmVzZXJ2ZSBmb3JtdWxhIG9uIHJlbG9hZCBpbiBNb3ppbGxhCisgKiBbRXF1YXRpb25dIHVwZGF0ZWQgQVNDSUlNYXRoTUwuanMKKyAqIFtTa2luOnNpbHZhXSBwYWRkaW5nIGFuZCBib3JkZXIgb24gdGV4dGFyZWEgbWFrZSB0aGUgdGV4dG1vZGUgdG9vIHdpZGUgCisgKiBmaXhlZCBUaWNrZXQjMTAwMSBFZGl0b3IgbG9hZHMgYSBidW5jaCBvZiBudWxsIHVybHMgaW4gaWUKKyAqIGZpeGVkIFRpY2tldCAjMTA2OCBbVHJhbmZvcm1Jbm5lckhUTUxdIG5ld2xpbmVzIGFkZGVkIGFmdGVyIDwvc2NyaXB0PgorICogZml4ZWQgVGlja2V0IzEwNjkgRWRpdG9yIGRvY3VtZW50IFVSTCBwcmVmaXhlZCB0byBhbnkgaHJlZiB0aGF0IG9ubHkgY29uc2lzdHMgb2YgVVJMIHBhcmFtZXRlcnMKKyAqIGFkZGVkIFRoYWkgdHJhbnNsYXRpb24gZm9yIGNvcmUKKyAqIGFkZGVkIGNvbXBsZXRlIFBvcnR1Z3Vlc2UgQnJhemlsaWFuIHRyYW5zbGF0aW9uCisgKiB1cGRhdGVkIGxjX3BhcnNlIHNjcmlwdAorICogZml4ZWQgVGlja2V0ICMxMDcxIFtFeHRlbmRlZEZpbGVNYW5hZ2VyXSBleHRlcm5hbCBpbWFnZSBVUkwgaW1hZ2UgaW5zZXJ0ZWQgd2l0aCB3aWR0aC9oZWlnaHQgMCwgYW1raW5nIGl0IGludmlzaWJsZQorICogZml4ZWQgVGlja2V0ICMxMDc0IFtTdXBlckNsZWFuXSB0aHJvd3Mgd2FybmluZ3MgaW4gUEhQIDUKKyAqIGZpeGVkIFRpY2tldCAjMTA3OSBbRHluYW1pY0NTU10gbGlzdHMgWGluaGEgaW50ZXJuYWwgQ1NTCisgKiBmaXhlZCBUaWNrZXQgIzEwODAgU29tZSBwbHVnaW5zIGxlYXZlIGJlaGluZCBzdHlsZXNoZWV0IGxpbmtzIGluIGZ1bGxwYWdlIG1vZGUKKyAqIGZpeGVkIFRpY2tldCAjMTA4MyBDb252ZXJ0IFVSTHMgdG8gbGlua3MgLSBFcnJvcgorICogZml4ZWQgVGlja2V0ICMxMDg0IFVSTCBhdXRvLWxpbmtpbmcgKEdlY2tvKTogVVJMcyB3aXRoIHVzZXI6cGFzc3dvcmRAZG9tYWluLnRsZCBmYWxzZWx5IHJlY29nbml6ZWQgYXMgZW1haWwgYWRkcmVzcworICogZml4ZWQgVGlja2V0ICMxMDg1IFVSTCBhdXRvLWxpbmtpbmcgKEdlY2tvKTogSVAgbnVtYmVycyBkb24ndCB3b3JrCisgKiBmaXhlZCBUaWNrZXQgIzEwODEgQ29udHJvbCBjaGFyYWN0ZXIgaXMgbm90IGJlaW5nIHJlbW92ZWQgaW5zaWRlIFNDUklQVCB0YWdzIG9yIEhFQUQgd2hlbiBzd2l0Y2hpbmcgZnJvbSB0ZXh0bW9kZSB0byBodG1sbW9kZQorICogZml4ZWQgVGlja2V0ICMxMDc4IFtJbnNlcnRJbWFnZV0gc3BhY2luZyBhdHRyaWJ1dGVzOiBpbmNvbnNpc3RlbnQgYmVoYXZpb3VyIHdoZW4gZWRpdGluZyBpbWFnZQorICogZml4ZWQgVGlja2V0ICMxMDg5IFtDb2xvciBQaWNrZXJdIExvY2FsaXplIE9LIExhYmVsCisgKiBmaXhlZCBUaWNrZXQgIzEwOTEgW1NhdmVTdWJtaXRdIGRvZXMgbm90IGNvcnJlY3RseSBzdWJtaXQgdmFsdWUgb2YgY2hlY2tib3hlcyBhbmQgcmFkaW8gYnV0dG9ucworCis9PSBYaW5oYSAwLjkzID09CisgLSBmaXhlZCBUaWNrZXQgIzk2NyBGb250IENvbG9yIFBpY2tlciBzdG9wcyB3b3JraW5nIGFmdGVyIHVzaW5nIG9uZSBvZiBJbWFnZU1hbmFnZXIsIEV4dGVuZGVkRmlsZU1hbmFnZXIsIEZ1bGxQYWdlLCBvciBIb3Jpem9udGFsUnVsZQorIC0gZml4ZWQgVGlja2V0ICM5NjUgV2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBYaW5oYXMgaW4gdGhlIHNhbWUgcGFnZSwgaW4gdGV4dG1vZGUgdG9vbGJhciBzdGF5cyBkaXNhYmxlZAorIC0gZml4d2QgVGlja2V0ICM5NjMgRE9Nd2FsayBJRTogaGVhZCB0YWcgYXR0cmlidXRlcyB3aXRob3V0IHF1b3RlcyBhbmQgY2xvc2luZyBzbGFzaAorIC0gVGlja2V0ICM5NjIgRE9Nd2FsayBNb3ppbGxhOiBpbXByb3ZlZCBzb3VyY2UgaW5kZW50YXRpb24KKyAtIGZpeGVkIFRpY2tldCAjOTU3IElmIGl0ZW0gaW4gaW4geGluaGFfZWRpdG9ycyBpcyBub3QgYSB0ZXh0YXJlYTogc2tpcCBncmFjZWZ1bGx5CisgLSBmaXhlZCBUaWNrZXQgIzkwMDogY2F0Y2ggYW4gZmF0YWwgZXJyb3IgdGhhdCBvY2N1cmVkIHNvbWV0aW1lcyB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIG1vZGVzIGluIGZ1bGxwYWdlIG1vZGUgaW4gTW96aWxsYQorIC0gZml4ZWQgVGlja2V0ICM5NjkgRE9Nd2FsayBHZWNrbzogbGluZSBicmVha3MgcmVuZGVyZWQgYXMgPGJyPnMgaW5zaWRlIDxwcmU+IGJsb2NrcworIC0gZml4ZWQgVGlja2V0ICM5NzYgTG9hZGluZyBtZXNzYWdlIG1pc3BsYWNlZCBpbiBJRTcKKyAtIGZpeGVkIFRpY2tldCAjOTc3IFRhYmxlT3BlcmF0aW9ucyB0b29sYmFyIG9mZi1wbGFjZSBpbiBleHRfZXhhbXBsZS5odG1sCisgLSBmaXhlZCBUaWNrZXQgIzk3OCBkZWZpbmluZyBhIHBhZGRpbmcgZm9yIDx0ZD5zIGluIGdsb2JhbCBjc3MgYWZmZWN0cyBYaW5oYSBmcmFtZXdvcmsKKyAtIFRpY2tldCAjOTc5IGltcHJvdmUgY2hlY2tpbmcgZm9yIG5vbi1zdXBwb3J0ZWQgYnJvd3NlcnMKKyAtIGZpeGVkIFRpY2tldCAjOTM0IFN1cGVyQ2xlYW4gcGx1Z2luIHJldHVybnMganVzdCBxdW90YXRpb24gd2hlbiBleGVjdXRlZCBvbiBsb2NhbGhvc3QKKyAtIFRpY2tldCAjOTI5IFNhdmUgY2hhbmdlcyBvbiBwYWdlIHVubG9hZCBmaXhlZCBmb3IgTW96aWxsYSAKKyAtIGZpeGVkIFRpY2tldCAjOTgwIEltYWdlTWFuYWdlciBjb2xvciBmb3JtYXQgYnVnCisgLSBmaXhlZCBUaWNrZXQgIzk4MSBObyBkb2N0eXBlIGluIGlmcmFtZSBjb250ZW50IGRvY3VtZW50LyBlZGl0b3IgYWx3YXlzIGluIHF1aXJrcyBtb2RlCisgLSBmaXhlZCBUaWNrZXQgIzU0MyBTdHlsaXN0IFBhbmVsIG92ZXJmbG93IGJyb2tlbgorIC0gVGlja2V0ICM5ODMgYWRkZWQgaWQgZm9yIGlmcmFtZQorIC0gZml4ZWQgVGlja2V0ICM5ODQgIUV4dGVuZGVkRmlsZU1hbmFnZXIgcHJvZHVjZXMgcGhwIHdhcm5pbmcKKyAtIG9wdGltaXplZCBpY29uIGZpbGUgc2l6ZQorIC0gZml4ZWQgIUphdmFTY3JpcHQgZXJyb3IgaW4gIUltYWdlTWFuYWdlci8hRXh0ZW5kZWRGaWxlTWFuYWdlciBpbWFnZSBlZGl0b3IKKyAtIFRpY2tldCAjOTA4KiBQcm9tcHRzIGJyb2tlbiBpbiBJRTc6IGZpeGVkIGZvciBFRk0sICFJbWFnZU1hbmFnZXIgJiAhVGFibGVPcGVyYXRpb25zCisgLSBGaXhlcyBmb3IgVGFibGVPcGVyYXRpb25zLCB0aWNrZXRzICM4MiwgIzkwOCosICM5MTIgYW5kICM5NDcKKyAtIGZpeGVkIFRpY2tldCAjOTk4KiB3aGl0ZXNwYWNlIGFkZGVkIGJlZm9yZSBhbmQvb3IgYWZ0ZXIgY29udGVudCAoaW4gbm9uLWZ1bGxwYWdlIG1vZGUpCisgLSBmaXhlZCBzbG93IHVubG9hZGluZyBpbiBNb3ppbGxhCisgLSBGaXggZm9jdXMgcHJvYmxlbSB3aGVuIHN3aXRjaGluZyBmcm9tIGh0bWwgdG8gd3lzaXd5ZyBpbiBHZWNrby4gU2VlIHRpY2tldCAjOTAwLgorIC0gZml4ZWQgdG9vbGJhciBmbG9hdGluZyBpc3N1ZQorIC0gZml4ZWQgIzEwMDMgSFRNTCBsZW5ndGggbGltaXRlZCB0byAxMDI0IGNoYXJhY3RlcnMgd2l0aCBwbHVnaW4gQ2hhckNvdW50ZXIKKyAtIFRpY2tldCAjMTAwMCBuZXcgcHVibGljIG1ldGhvZHMgZm9yIGdldHRpbmcvc2V0dGluZyBlZGl0b3IgY29udGVudAorIC0gZml4ZWQgIzczNSAtIElFIGVhdGluZyBzY3JpcHRzIGFuZCBjb21tZW50cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHBhZ2VzLgorIC0gQWRkZWQgbmV3IGNvbmZpZyB2YXJpYWJsZXMgdG8gc2V0IGlmcmFtZSB3aWR0aCBpZiBsZXNzIHRoYW4gZWRpdG9yIHdpZHRoICh0aWNrZXQ6MzIyKSBhbmQgc2V0IGFsaWdubWVudCBvZiB0b29sYmFyIGJ1dHRvbnMuCisgLSBhZGRlZCBCYXNxdWUgdHJhbnNsYXRpb24gZm9yIFhpbmhhQ29yZQorIC0gcHJldmVudCBhbiBlcnJvciBpZiBzZXJ2ZXIgaXMgc2V0IHRvIHBhcnNlIC5qcyBmaWxlcyBhcyBQSFAKKyAtIFRpY2tldCAjMTI3IHBsdWdpbiBIdG1sRW50aXRpZXM6IEVudGl0aWVzLmpzICBmaWxlIGNvcnJ1cHQKKworPT0gWGluaGEgMC45MmJldGEgPT0KKyAtIGZpeGVkIFRpY2tldCAjODMxIHN0b3AgZW1wdHkgYW5jaG9ycyBmcm9tIGJlaW5nIHJlbW92ZWQKKyAtIE1ha2UgaHRtbGFyZWEuanMganVzdCBsb2FkIFhpbmhhQ29yZS5qcyBpbnN0ZWFkIG9mIGJlaW5nIGEgY29weSBvZiBpdC4KKyAtIGZpeGVkIFRpY2tldCAjNDQ1IFRvZ2dsZSBUYWJsZUJvcmRlciBkb2Vzbid0IHdvcmsgaWYgdGhpcy5mdWxscGFnZT10cnVlIG9yIHVzaW5nIEZ1bGxQYWdlIHBsdWdpbgorIC0gZml4ZWQgVGlja2V0ICM1NTEgc2hhcGUgYW5kIGNvb3JkIGF0dHJpYnV0ZXMgb2YgYXJlYSBlbGVtZW50IGFyZSBpZ25vcmVkIGJ5IElFCisgLSBmaXhlZCBUaWNrZXQgIzY1MCBTcGVsbENoZWNrZXIgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBGdWxsUGFnZSBwbHVnaW4KKyAtIGZpeGVkIFRpY2tldCAjODE2IENoYXJhY3Rlck1hcCBhbmQgTGlzdFR5cGUgcGFuZWwgbW9kZXMgbWFrZSBlZGl0b3IganVtcCB0byB0b3AgaW4gSUUKKyAtIGZpeGVkIFRpY2tldCAjNTcwIGNoYW5nZSBiZWhhdmlvdXIgb2YganVzdGlmeSB3aGVuIGFuIGltYWdlIGlzIHNlbGVjdGVkIHRvIG1ha2UgdGhlIGltYWdlIGZsb2F0IGxlZnQvcmlnaHQsIAorICAgY2xpY2sgdGhlIGp1c3RpZnkgYnV0dG9uIGFnYWluIHRvIHVuZG8gaXQKKyAtIGZpeGVkIFRpY2tldCAjODkxIG5vc2NyaXB0IGNvbnRlbnQgZ290IGVzY2FwZWQKKyAtIGZpeGVkIFRpY2tldCAjODU3IEZpcmVmb3ggZmFpbHMgdG8gbG9hZCBpbiBmdWxscGFnZSBtb2RlIHdoZW4gPGxpbmsgLi4+IHRhZyBpbiB3cm9uZyBwbGFjZS4KKyAtIGZpeGVkIFRpY2tldCAjODQxIFNwZWxsIENoZWNrZXIgLSBXb24ndCByZXR1cm4gdG8geGluaGEuCisgLSBmaXhlZCBUaWNrZXQgIzkxNCBBbGwgYnV0dG9ucyBzdGF5IGdyZXkgJiB0aGlzLmdldFBhcmVudEVsZW1lbnQgaXMgbm90IGEgZnVuY3Rpb24gbWVzc2FnZSB3aGVuIG5vdCBjYWxsaW5nCisgICBYaW5oYS5sb2FkUGx1Z2lucygpIGluIHhpbmhhX2luaXQgZnVuY3Rpb24KKyAtIGZpeGVkIFRpY2tldCAjOTExIEJhY2tncm91bmQgY29sb3IgZG9lcyBub3Qgd29yayBpbiBGaXJlZm94CisgLSBmaXhlZCBUaWNrZXQgIzkxMiBhbiBlcnJvciBpcyB0aHJvd24gaW4gTW96aWxsYSB3aGVuIGNsaWNraW5nIG1lcmdlIGNlbGxzIGJ1dHRvbiBhbmQgZmV3ZXIgdGhhbiAyIGNlbGxzIGFyZSBzZWxlY3RlZAorIC0gZml4ZWQgVGlja2V0ICM4MTYgQ2hhcmFjdGVyTWFwIGFuZCBMaXN0VHlwZSBwYW5lbCBtb2RlcyBtYWtlIGVkaXRvciBqdW1wIHRvIHRvcCBpbiBJRQorIC0gZml4ZWQgVGlja2V0ICM5MTcgZ2V0SFRNTFdyYXBwZXIgaW4gSUUgcmVuZGVycyBhdHRyaWJ1dGVzIGxpa2UgX3N0eWxpc3RfdXNlZHRvYmU9IltvYmplY3QgT2JqZWN0XSIKKyAtIGZpeGVkIFRpY2tldCAjNTU2IHN0cmlwQmFzZUhyZWYgZGlkbid0IHdvcmsgd2l0aG91dCBiYXNlSHJlZiBkZWZpbmVkIGV4cGxpY2l0bHkuCisgLSBVcGRhdGUgSW5zZXJ0UGljdHVyZSBwbHVnaW4gVXBkYXRlCisgLSBmaXhlZCBUaWNrZXQgIzkyMSBFRk0gZXh0ZW5kZWQgZmlsZSBtYW5hZ2VyIC0gaWZyYW1lIGhlaWdodCBwcm9ibGVtIChJRSkKKyAtIFRpY2tldCAjOTIzIGNvbG9yUGlja2VyIGZhY2UgbGlmdCAmIGxvY2FsaXNhdGlvbgorIC0gZml4ZWQgVGlja2V0ICM5MjQgRUZNICsgSW1hZ2VNYW5hZ2VyIHJlLXRyYW5zZm9ybWluZyBvZiB1cmwgdG8gb3JpZ2luYWwgaW1hZ2UgYWZ0ZXIgYXV0b21hdGljIHJlc2l6ZSBicm9rZW4KKyAtIFRpY2tldCAjOTAwLSByZXRhaW4gZWRpdGluZyBwb3NpdGlvbiBwb3NpdGlvbiBiZXR3ZWVuIG1vZGVzCisgLSBmaXhlZCBUaWNrZXQgIzkyOCBJbWFnZU1hbmFnZXIgZmFpbHMgaWYgKGFub3RoZXIpIEZpbGVzLnBocCBleGlzdHMgaW4gaW5jbHVkZSBwYXRoCisgLSBmaXhlZCBUaWNrZXQgIzkzNSBFRk0gZGVtb19pbWFnZXMgcGhwIHVwbG9hZCBhbGxvd2VkOiBwb3NzaWJsZSBzZWN1cml0eSByaXNrCisgLSBUaWNrZXQgIzkzOSBKYXBhbmVzZSBsYW5nYWdlIHN1cHBvcnQgCisgLSBmaXhlZCBUaWNrZXQgIzMgSG9yaXpvbnRhbCBSdWxlIFNlbGVjdGlvbgorIC0gUGx1Z2luIEV4dGVuZGVkRmlsZU1hbmFnZXI6IGFkZGVkIGRvYyB0byBhbGxvd2VkIHVwbG9hZCBleHRlbnNpb25zCisgLSBQbHVnaW4gUGFzdGVUZXh0IHVwZGF0ZQorIC0gUGx1Z2luIEh0bWxFbnRpdGllczogZGVmYXVsdCBwcmVzZXQgaXNvLTg4NTktMQorIC0gZml4ZWQgVGlja2V0ICM5NDggSUU6IGlubGluZSBzdHlsZXMgYXJlIG5vdCByZW5kZXJlZCBieSBET013YWxrIGdldEhUTUwoKQorIC0gUGx1Z2luIEhvcml6b250YWxSdWxlIHVwZGF0ZQorIC0gUGx1Z2luIFNhdmVTdWJtaXQgdXBkYXRlCisgLSBQbHVnaW4gTGlua2VyIHVwZGF0ZQorIC0gZml4ZWQgVGlja2V0ICM4MjMgZWRpdG9yIGNvbnRlbnRzIHdhcyBub3Qgc3VibWl0dGVkIHdoZW4gdXNpbmcgSmF2YVNjcmlwdCBmb3JtLnN1Ym1pdCgpIHdpdGhvdXQgcHJpb3IgZm9ybS5vbnN1Ym1pdCgpCisgLSBmaXhlZCBUaWNrZXQgIzQ1OSBhbGwgYm9keSBhdHRyaWJ1dGVzIHJlbW92ZWQgaW4gZnVsbCBwYWdlIG1vZGUgaW4gRmlyZUZveAorIC0gX2VkaXRvcl91cmwgaXMgbm93IGNvbnZlcnRlZCB0byBhYnNvbHV0ZSBpZiBpdCBpcyByZWxhdGl2ZS4gCisgLSBmaXhlZCBUaWNrZXQgIzU5NCBJRTogaW5zZXJ0SFRNTCgpIGluc2VydHMgSFRNTCBvdXRzaWRlIGVkaXRvciB3aGVuIGVkaXRvciBpcyBub3QgZm9jdXNzZWQKKyAtIFRpY2tldCAjOTU0IEZ1bGxTY3JlZW4gbW9kZSBjYW4gbm93IGJlIGNhbGxlZCBwcm9ncmFtbWF0aWNhbGx5IG9yIG9uIHN0YXJ0dXAgd2l0aCBvciB3aXRob3V0IGJ1dHRvbgorIC0gZml4ZWQgVGlja2V0ICMzMjEgRnVsbFNjcmVlbiA6IHNlbGVjdCBlbGVtZW50cyBzaG93IHRocm91Z2ggaW4gSUU2IAorIC0gZml4ZWQgVGlja2V0ICM5NTMgU3RhdHVzYmFyIGhhcyB1Z2x5IHdoaXRlIGdhcCBhdCB0aGUgYm90dG9tIHdoZW4gc3dpdGNoaW5nIGJhY2sgZnJvbSBmdWxsIHNjcmVlbiBpbiBJRSAKKyAtIGZpeGVkIFRpY2tldCAjOTUyIEZ1bGxTY3JlZW46IHNjcm9sbGJhcnMgZG9uJ3QgZGlzYXBwZWFyIGluIElFIGluIFF1aXJrc01vZGUKKyAtIGZpeGVkIFRpY2tldCAjNjAzIFBvcG9wIERpYWxvZyBIZWlnaHQgcHJvYmxlbXMKKyAtIGZpeGVkIFRpY2tldCAjOTU1IERPTXdhbGsgZ2V0SFRNTCBvdXRwdXRzIGVtcHR5IGF0dHJpYnV0ZSB3aXRoIHZhbHVlICJ0cnVlIiBpbnN0ZWFkIG9mIGF0dHJpYnV0ZSBuYW1lIGFuZCBzb21lIGFyZSBza2lwcGVkIGF0IGFsbAorIAorPT0gWGluaGEgMC45MWJldGEgPT0KKyAtIGNoYW5nZWQgbmFtZXNwYWNlIGZyb20gSFRNTEFyZWEgdG8gWGluaGEKKyAtIHRoZSBjb3JlIGZpbGUgaXMgbm93IG5hbWVkIFhpbmhhQ29yZS5qcyBpbnN0ZWFkIG9mIGh0bWxhcmVhLmpzLAorICAgcGxlYXNlIGNoYW5nZSB5b3VyIHBhZ2VzIGFjY29yZGluZ2x5ICh0aGUgaHRtbGFyZWEuanMgd2lsbCBiZSByZW1vdmVkISkKKyAtIHRoZSBjb2xvciBwaWNrZXIgc2NyaXB0IGlzIG5vdyBsb2FkZWQgb24gZGVtYW5kIHRvIHJlZHVjZSBpbml0aWFsIGxvYWRpbmcgdGltZQorIAorPT0gWGluaGEgMC45YmV0YSA9PQorVGhpcyBlcXVhbHMgWGluaGEgcmV2aXNpb24gNjM1IG9mIEphbiAxMSAyMDA3CisgLSBBbGwgSmF2YVNjcmlwdCBmaWxlcyBvdmVyIDJrYiBoYXZlIGJlZW4gY29tcHJlc3NlZCB1c2luZyB0aGUgZG9qbyBKYXZhU2NyaXB0IGNvbXByZXNzb3IKKyAtIEFsbCBnaWZzIGhhdmUgYmVlbiBvcHRpbWl6ZWQgdXNpbmcgVHJvdXQncyBHSUYgT3B0aW1pemVyIHZlcnNpb24gMi4zClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL2JsdWUtbG9vay9idXR0b24tYmFja2dyb3VuZC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9ibHVlLWxvb2svYnV0dG9uLWJhY2tncm91bmQucG5nCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvc2tpbnMvYmx1ZS1sb29rL2J1dHRvbi1iYWNrZ3JvdW5kLnBuZwpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvYmx1ZS1sb29rL2J1dHRvbi1iYWNrZ3JvdW5kLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvc2tpbnMvYmx1ZS1sb29rL3NlcGFyYXRvci5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9ibHVlLWxvb2svc2VwYXJhdG9yLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL2JsdWUtbG9vay9zZXBhcmF0b3IuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9ibHVlLWxvb2svc2VwYXJhdG9yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9ibHVlLWxvb2svc2tpbi5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9ibHVlLWxvb2svc2tpbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlOTcxZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL2JsdWUtbG9vay9za2luLmNzcwpAQCAtMCwwICsxLDExMCBAQAorLmh0bWxhcmVhIC50b29sYmFyLCAuaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvbgoreworICBiYWNrZ3JvdW5kLWNvbG9yOiNmN2Y4ZmQ7Cit9CisKKy5odG1sYXJlYSAudG9vbGJhclJvdworeworICBtYXJnaW4tdG9wOjJweDsKKyAgbWFyZ2luLWJvdHRvbToycHg7CisgIGJvcmRlcjoxcHggZG90dGVkICNERURFREU7CisgIHBhZGRpbmc6MnB4OworICAtbW96LWJvcmRlci1yYWRpdXM6M3B4OworICBtYXJnaW46NHB4OworICBoZWlnaHQ6MjVweDsKK30KKworLmh0bWxhcmVhIC50b29sYmFyUm93IHRkLnRvb2xCYXJFbGVtZW50Cit7CisgIG1hcmdpbjowcHg7IHBhZGRpbmc6MHB4OworfQorCisuaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvbgoreworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoYnV0dG9uLWJhY2tncm91bmQucG5nKTsKKyAgd2lkdGg6MjBweDsKKyAgaGVpZ2h0OjIwcHg7CisgIHBhZGRpbmc6MHB4OworICBib3JkZXI6MXB4IHNvbGlkICNmN2Y4ZmQ7Cit9CisKKy5idXR0b25JbWFnZUNvbnRhaW5lcgoreworICBwb3NpdGlvbjpyZWxhdGl2ZTsKKyAgbGVmdDoxcHg7CisgIHRvcCA6MXB4OworfQorCisuaHRtbGFyZWEgLnRvb2xiYXIgLnNlcGFyYXRvciB7CisgIG1hcmdpbjowcHg7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChzZXBhcmF0b3IuZ2lmKTsKKyAgYm9yZGVyOjFweCAjZjdmOGZkOworICB3aWR0aDogICA3cHg7CisgIGhlaWdodDogMjBweDsKKyAgcGFkZGluZzogMHB4OworfQorCisuaHRtbGFyZWEgLnRvb2xiYXIgYS5idXR0b246aG92ZXIKK3sKKyAgYm9yZGVyOiAxcHggc29saWQ7CisgIGJvcmRlci1jb2xvcjogd2hpdGUgI0NDQyAjQ0NDIHdoaXRlOworfQorCisuaHRtbGFyZWEgLnRvb2xiYXIgYS5idXR0b25EaXNhYmxlZDpob3ZlcgoreworICBib3JkZXItY29sb3I6ICNmN2Y4ZmQ7Cit9CisKKy5odG1sYXJlYSAudG9vbGJhciAuYnV0dG9uLmJ1dHRvbkFjdGl2ZSwKKy5odG1sYXJlYSAudG9vbGJhciAuYnV0dG9uLmJ1dHRvblByZXNzZWQKK3sKKyAgYm9yZGVyOiAxcHggc29saWQ7CisgIGJvcmRlci1jb2xvcjogI0NDQyB3aGl0ZSB3aGl0ZSAjQ0NDOworfQorCisuaHRtbGFyZWEgLnN0YXR1c0JhciB7CisgIGJvcmRlci1jb2xvcjogI0NDQyB3aGl0ZSB3aGl0ZSAjQ0NDOworICBwYWRkaW5nOiAwcHg7CisgIGhlaWdodDoyMHB4OworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoYnV0dG9uLWJhY2tncm91bmQucG5nKTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmOGZkOworICBjb2xvcjogQnV0dG9uVGV4dDsKKyAgZm9udDogMTFweCBoZWx2ZXRpY2EsYXJpYWwsc2Fucy1zZXJpZjsKK30KKworLmh0bWxhcmVhIC5zdGF0dXNCYXIgLnN0YXR1c0JhcldpZGdldENvbnRhaW5lcgoreworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoYnV0dG9uLWJhY2tncm91bmQucG5nKTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmOGZkOworfQorCisuaHRtbGFyZWEgLnN0YXR1c0JhciAuc3RhdHVzQmFyVHJlZQoreworICBkaXNwbGF5OmJsb2NrOworICBtYXJnaW46IDNweDsKK30KKworLmh0bWxhcmVhIC5zdGF0dXNCYXIgLnN0YXR1c0JhclRyZWUgYQoreworICBwYWRkaW5nOiAycHggNXB4OworICBjb2xvcjogIzAwZjsKKyAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7Cit9CisKKy5odG1sYXJlYSAucGFuZWwgaDEKK3sKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdidXR0b24tYmFja2dyb3VuZC5wbmcnKTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmOGZkOworfQorLmRpYWxvZyB7CisgIGJhY2tncm91bmQtY29sb3I6I2Y3ZjhmZDsKK30KKy5kaWFsb2cgLnRpdGxlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7Cit9ICAKKy5kaWFsb2cgYnV0dG9ueworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoYnV0dG9uLWJhY2tncm91bmQucG5nKTsKK30KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL2JsdWUtbG9vay9za2luLnhtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL2JsdWUtbG9vay9za2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmFlMGJlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvYmx1ZS1sb29rL3NraW4ueG1sCkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8c2tpbj4KKyAgPG1ldGEgbmFtZT0ibmFtZSIgdmFsdWU9ImJsdWUtbG9vayIgLz4KKyAgPG1ldGEgbmFtZT0iZGV2ZWxvcGVyIiB2YWx1ZT0iIiAvPgorICA8bWV0YSBuYW1lPSJkZXZlbG9wZXJfdXJsIiB2YWx1ZT0iIiAvPgorICA8bWV0YSBuYW1lPSJzcG9uc29yIiB2YWx1ZT0iIiAvPgorICA8bWV0YSBuYW1lPSJzcG9uc29yX3VybCIgdmFsdWU9IiIgLz4KKyAgPG1ldGEgbmFtZT0idmVyc2lvbiIgdmFsdWU9IjEuMCIgLz4KKyAgPG1ldGEgbmFtZT0ibGljZW5zZSIgdmFsdWU9Imh0bWxBcmVhIiAvPgorICA8cmVjb21tZW5kZWRJY29ucz5DcnlzdGFsPC9yZWNvbW1lbmRlZEljb25zPgorPC9za2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL2JsdWUtbWV0YWxsaWMvYnV0dG9uLWJhY2tncm91bmQucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvYmx1ZS1tZXRhbGxpYy9idXR0b24tYmFja2dyb3VuZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFjMThkYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL2JsdWUtbWV0YWxsaWMvYnV0dG9uLWJhY2tncm91bmQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL2JsdWUtbWV0YWxsaWMvc2VwYXJhdG9yLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL2JsdWUtbWV0YWxsaWMvc2VwYXJhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzkyOTdhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvYmx1ZS1tZXRhbGxpYy9zZXBhcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL2JsdWUtbWV0YWxsaWMvc2tpbi5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9ibHVlLW1ldGFsbGljL3NraW4uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNmI4MDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9ibHVlLW1ldGFsbGljL3NraW4uY3NzCkBAIC0wLDAgKzEsMTAzIEBACisuaHRtbGFyZWEgLnRvb2xiYXIgeyBiYWNrZ3JvdW5kLWNvbG9yOiNmN2Y4ZmQ7fQ0KKw0KKy5odG1sYXJlYSAudG9vbGJhclJvdw0KK3sNCisgIC8qYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7Ki8NCisgIGJhY2tncm91bmQtY29sb3I6ICNDNURDRUM7DQorICBtYXJnaW4tdG9wOjJweDsNCisgIG1hcmdpbi1ib3R0b206MnB4Ow0KKyAgYm9yZGVyOjFweCBzb2xpZCAjN0E4QTk5Ow0KKyAgcGFkZGluZzoycHg7DQorICAtbW96LWJvcmRlci1yYWRpdXM6NHB4Ow0KKyAgbWFyZ2luOjRweDsNCisgIGhlaWdodDoyNXB4Ow0KK30NCisNCisuaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvbiB7DQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoYnV0dG9uLWJhY2tncm91bmQucG5nKTsNCisgIHdpZHRoOjIwcHg7DQorICBoZWlnaHQ6MjFweDsNCisgIHBhZGRpbmc6MXB4Ow0KKyAgYm9yZGVyOjBweDsNCit9DQorDQorLmJ1dHRvbkltYWdlQ29udGFpbmVyDQorew0KKyAgcG9zaXRpb246cmVsYXRpdmU7DQorICBsZWZ0OjFweDsNCisgIHRvcCA6MXB4Ow0KK30NCisNCisuaHRtbGFyZWEgLnRvb2xiYXIgLnNlcGFyYXRvcg0KK3sNCisgIG1hcmdpbjowcHg7DQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoc2VwYXJhdG9yLmdpZik7DQorICBib3JkZXI6MXB4ICNmN2Y4ZmQ7DQorICB3aWR0aDogICA3cHg7DQorICBoZWlnaHQ6IDIxcHg7DQorICBwYWRkaW5nOiAwcHg7DQorfQ0KKw0KKy5odG1sYXJlYSAudG9vbGJhciBhLmJ1dHRvbjpob3ZlciwNCisuaHRtbGFyZWEgLnRvb2xiYXIgYS5idXR0b25EaXNhYmxlZDpob3Zlcg0KK3sNCisgIHBhZGRpbmc6IDBweDsNCisgIGJvcmRlcjogMXB4IHNvbGlkOw0KKyAgYm9yZGVyLWNvbG9yOiAjN0E4QTk5Ow0KK30NCisNCisuaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvbi5idXR0b25BY3RpdmUsDQorLmh0bWxhcmVhIC50b29sYmFyIC5idXR0b24uYnV0dG9uUHJlc3NlZA0KK3sNCisgIHBhZGRpbmc6IDBweDsNCisgIGJvcmRlcjogMXB4IHNvbGlkOw0KKyAgYm9yZGVyLWNvbG9yOiAjNzlBNENDICNGRkZGRkYgI0ZGRkZGRiAjNzlBNENDOw0KK30NCisNCisuaHRtbGFyZWEgLnN0YXR1c0JhciB7DQorICBib3JkZXItY29sb3I6ICNDQ0Mgd2hpdGUgd2hpdGUgI0NDQzsNCisgIHBhZGRpbmc6IDBweDsNCisgIGhlaWdodDoyMHB4Ow0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7DQorICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7DQorICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmOGZkOw0KKyAgY29sb3I6IEJ1dHRvblRleHQ7DQorICBmb250OiAxMXB4IGhlbHZldGljYSxhcmlhbCxzYW5zLXNlcmlmOw0KK30NCisNCisuaHRtbGFyZWEgLnN0YXR1c0JhciAuc3RhdHVzQmFyV2lkZ2V0Q29udGFpbmVyDQorew0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7DQorICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7DQorICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmOGZkOw0KK30NCisNCisuaHRtbGFyZWEgLnN0YXR1c0JhciAuc3RhdHVzQmFyVHJlZQ0KK3sNCisgIGRpc3BsYXk6YmxvY2s7DQorICBtYXJnaW46IDNweDsNCit9DQorDQorLmh0bWxhcmVhIC5zdGF0dXNCYXIgLnN0YXR1c0JhclRyZWUgYQ0KK3sNCisgIHBhZGRpbmc6IDJweCA1cHg7DQorICBjb2xvcjogIzAwZjsNCisgIHRleHQtZGVjb3JhdGlvbjpub25lOw0KK30NCisNCisuaHRtbGFyZWEgLnBhbmVsIGgxDQorew0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdidXR0b24tYmFja2dyb3VuZC5wbmcnKTsNCisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsNCisgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y4ZmQ7DQorfQ0KKw0KKy5kaWFsb2cgew0KKyAgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVFRTsNCit9DQorLmRpYWxvZyAudGl0bGUgew0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7DQorfQ0KKy5kaWFsb2cgYnV0dG9uew0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7DQorfQ0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9ncmVlbi1sb29rL2J1dHRvbi1iYWNrZ3JvdW5kLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL2dyZWVuLWxvb2svYnV0dG9uLWJhY2tncm91bmQuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvc2tpbnMvZ3JlZW4tbG9vay9idXR0b24tYmFja2dyb3VuZC5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL2dyZWVuLWxvb2svYnV0dG9uLWJhY2tncm91bmQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9ncmVlbi1sb29rL3NlcGFyYXRvci5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9ncmVlbi1sb29rL3NlcGFyYXRvci5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9ncmVlbi1sb29rL3NlcGFyYXRvci5naWYKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL2dyZWVuLWxvb2svc2VwYXJhdG9yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvc2tpbnMvZ3JlZW4tbG9vay9za2luLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL2dyZWVuLWxvb2svc2tpbi5jc3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9ncmVlbi1sb29rL3NraW4uY3NzCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9ncmVlbi1sb29rL3NraW4uY3NzCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9pbmRpdHJldXNlL1JFQURNRSBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL2luZGl0cmV1c2UvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NmFjY2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9pbmRpdHJldXNlL1JFQURNRQpAQCAtMCwwICsxLDkgQEAKK1NraW4gaW5kaXRyZXVzZQ0KK0F1dGhvcjogS3lsZSBLb2NoaXMgKGh0dHA6Ly9jb21wbGV0ZXNpdGVzZXJ2aWNlcy5jb20vKQ0KK1RoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIExpY2Vuc2UuDQorVG8gdmlldyBhIGNvcHkgb2YgdGhpcyBsaWNlbnNlLCB2aXNpdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvDQorb3Igc2VuZCBhIGxldHRlciB0bw0KK0NyZWF0aXZlIENvbW1vbnMsDQorNTU5IE5hdGhhbiBBYmJvdHQgV2F5DQorU3RhbmZvcmQsIENhbGlmb3JuaWEgOTQzMDUNCitVU0EKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9pbmRpdHJldXNlL2JhY2sucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvaW5kaXRyZXVzZS9iYWNrLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTcxZmU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvaW5kaXRyZXVzZS9iYWNrLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9pbmRpdHJldXNlL2J1dHRvbi1iYWNrZ3JvdW5kLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL2luZGl0cmV1c2UvYnV0dG9uLWJhY2tncm91bmQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNGE4MjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9pbmRpdHJldXNlL2J1dHRvbi1iYWNrZ3JvdW5kLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9pbmRpdHJldXNlL2hvdmVyLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL2luZGl0cmV1c2UvaG92ZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNDU0ODMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9pbmRpdHJldXNlL2hvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9pbmRpdHJldXNlL3NlbGVjdGVkLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL2luZGl0cmV1c2Uvc2VsZWN0ZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZGU1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9pbmRpdHJldXNlL3NlbGVjdGVkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9pbmRpdHJldXNlL3NlcGFyYXRvci5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9pbmRpdHJldXNlL3NlcGFyYXRvci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3N2U1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL2luZGl0cmV1c2Uvc2VwYXJhdG9yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9pbmRpdHJldXNlL3NraW4uY3NzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvaW5kaXRyZXVzZS9za2luLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODUxOTdlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvaW5kaXRyZXVzZS9za2luLmNzcwpAQCAtMCwwICsxLDgxIEBACisuaHRtbGFyZWEgLnRvb2xiYXIgew0KKwliYWNrZ3JvdW5kLWNvbG9yOiM4ODlmYzk7DQorICBiYWNrZ3JvdW5kLWltYWdlOnVybChiYWNrLnBuZyk7DQorICBiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteTsNCit9DQorLmh0bWxhcmVhIC50b29sYmFyUm93IHsNCisgIG1hcmdpbi10b3A6MnB4Ow0KKyAgbWFyZ2luLWJvdHRvbToycHg7DQorICBiYWNrZ3JvdW5kLWltYWdlOnVybChidXR0b24tYmFja2dyb3VuZC5wbmcpOw0KKyAgaGVpZ2h0OjI1cHg7DQorfQ0KKy5odG1sYXJlYSAudG9vbGJhciAuYnV0dG9uIHsNCisgIHdpZHRoOjIwcHg7DQorICBoZWlnaHQ6MjBweDsNCisgIHBhZGRpbmc6MXB4Ow0KKyAgYm9yZGVyOm5vbmU7DQorICBiYWNrZ3JvdW5kLWltYWdlOnVybChidXR0b24tYmFja2dyb3VuZC5wbmcpOw0KK30NCisuYnV0dG9uSW1hZ2VDb250YWluZXIgew0KKyAgcG9zaXRpb246cmVsYXRpdmU7DQorICBsZWZ0OjFweDsNCisgIHRvcDoxcHg7DQorfQ0KKy5odG1sYXJlYSAudG9vbGJhciAuc2VwYXJhdG9yIHsNCisgIG1hcmdpbjowOw0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKHNlcGFyYXRvci5wbmcpOw0KKyAgd2lkdGg6N3B4Ow0KKyAgaGVpZ2h0OjIwcHg7DQorICBwYWRkaW5nOjFweDsNCisgIGJvcmRlcjpub25lOw0KK30NCisuaHRtbGFyZWEgLnRvb2xiYXIgYS5idXR0b246aG92ZXIgew0KKyAgYm9yZGVyOm5vbmUgIWltcG9ydGFudDsNCisgIHBhZGRpbmc6MXB4Ow0KKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoaG92ZXIucG5nKTsNCit9DQorLmh0bWxhcmVhIC50b29sYmFyIC5idXR0b24uYnV0dG9uUHJlc3NlZA0KK3sNCisgIHBhZGRpbmc6MXB4Ow0KKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoc2VsZWN0ZWQucG5nKTsNCit9DQorLmh0bWxhcmVhIC5zdGF0dXNCYXIgew0KKyAgcGFkZGluZzowOw0KKyAgaGVpZ2h0OjIwcHg7DQorICBiYWNrZ3JvdW5kLWltYWdlOnVybChidXR0b24tYmFja2dyb3VuZC5wbmcpOw0KKyAgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7DQorICBiYWNrZ3JvdW5kLWNvbG9yOiM4ODlmYzk7DQorICBjb2xvcjpCdXR0b25UZXh0Ow0KKyAgZm9udDoxMXB4IGhlbHZldGljYSxhcmlhbCxzYW5zLXNlcmlmOw0KK30NCisNCisuaHRtbGFyZWEgLnN0YXR1c0JhciAuc3RhdHVzQmFyV2lkZ2V0Q29udGFpbmVyDQorew0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7DQorICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7DQorICBiYWNrZ3JvdW5kLWNvbG9yOiAjODg5ZmM5Ow0KK30NCisNCisuaHRtbGFyZWEgLnN0YXR1c0JhciAuc3RhdHVzQmFyVHJlZSB7DQorICBkaXNwbGF5OmJsb2NrOw0KKyAgbWFyZ2luOjNweDsNCit9DQorLmh0bWxhcmVhIC5zdGF0dXNCYXIgLnN0YXR1c0JhclRyZWUgYSB7DQorICBwYWRkaW5nOjJweCA1cHg7DQorICBjb2xvcjojMDBmOw0KKyAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7DQorfQ0KKy5odG1sYXJlYSAucGFuZWwgaDEgew0KKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoYnV0dG9uLWJhY2tncm91bmQucG5nKTsNCisgIGJhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14Ow0KKyAgYmFja2dyb3VuZC1jb2xvcjojODg5ZmM5Ow0KK30NCisuZGlhbG9nIHsNCisgIGJhY2tncm91bmQtY29sb3I6Izg4OWZjOTsNCit9DQorLmRpYWxvZyAudGl0bGUgew0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7DQorfSAgDQorLmRpYWxvZyBidXR0b257DQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoYnV0dG9uLWJhY2tncm91bmQucG5nKTsNCit9DQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL3NpbHZhL2RpYWxvZy5qcGcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9zaWx2YS9kaWFsb2cuanBnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvc2tpbnMvc2lsdmEvZGlhbG9nLmpwZwpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvc2lsdmEvZGlhbG9nLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvc2tpbnMvc2lsdmEvaHRtbC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9zaWx2YS9odG1sLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL3NpbHZhL2h0bWwuZ2lmCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9zaWx2YS9odG1sLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvc2tpbnMvc2lsdmEvc2tpbi5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9zaWx2YS9za2luLmNzcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL3NpbHZhL3NraW4uY3NzCnJlbmFtZSB0byBhcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy9zaWx2YS9za2luLmNzcwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL3NpbHZhL3NraW4ueG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvc2lsdmEvc2tpbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9zaWx2YS9za2luLnhtbApyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvc2lsdmEvc2tpbi54bWwKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9zaWx2YS9zdGF0dXNiYXIucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvc2lsdmEvc3RhdHVzYmFyLnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL3NpbHZhL3N0YXR1c2Jhci5wbmcKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3NpbHZhL3N0YXR1c2Jhci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL3NpbHZhL3Rvb2xiYXIucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvc2lsdmEvdG9vbGJhci5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9zaWx2YS90b29sYmFyLnBuZwpyZW5hbWUgdG8gYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvc2lsdmEvdG9vbGJhci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvdGl0YW4vUkVBRE1FIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvdGl0YW4vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNzJhMjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy90aXRhbi9SRUFETUUKQEAgLTAsMCArMSwxMiBAQAorU2tpbiBUaXRhbiwgYSBtb2RpZmljYXRpb24gb2YgU2tpbiBpbmRpdHJldXNlIGJ5IE1pa2UgSGFycmlzICh3d3cuam9uZXNzdGFuZGFyZC5vcmcpDQorSSBzaW1wbHkgY2hhbmdlZCB0aGUgYmFja2dyb3VuZCB0byBsb29rIG1vcmUgbGlrZSBuaWNrZWwsIGFuZCB0aGUgZG90cyBvbiB0aGUgc2VwYXJhdG9yIGhhdmUgYmVlbiByZXBsYWNlZC4gIA0KK0V2ZXJ5dGhpbmcgZWxzZSBpcyB0aGUgc2FtZS4NCisNCitTa2luIGluZGl0cmV1c2UgQXV0aG9yOiBLeWxlIEtvY2hpcyAoaHR0cDovL2NvbXBsZXRlc2l0ZXNlcnZpY2VzLmNvbS8pDQorVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgTGljZW5zZS4NCitUbyB2aWV3IGEgY29weSBvZiB0aGlzIGxpY2Vuc2UsIHZpc2l0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzIuMC8NCitvciBzZW5kIGEgbGV0dGVyIHRvDQorQ3JlYXRpdmUgQ29tbW9ucywNCis1NTkgTmF0aGFuIEFiYm90dCBXYXkNCitTdGFuZm9yZCwgQ2FsaWZvcm5pYSA5NDMwNQ0KK1VTQQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3RpdGFuL2JhY2sucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvdGl0YW4vYmFjay5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E3MWZlNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3RpdGFuL2JhY2sucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3RpdGFuL2J1dHRvbi1iYWNrZ3JvdW5kLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3RpdGFuL2J1dHRvbi1iYWNrZ3JvdW5kLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWU2YWFlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvdGl0YW4vYnV0dG9uLWJhY2tncm91bmQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3RpdGFuL2hvdmVyLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3RpdGFuL2hvdmVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTg3ZDg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvdGl0YW4vaG92ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3RpdGFuL3NlbGVjdGVkLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3RpdGFuL3NlbGVjdGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmNmOGE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvdGl0YW4vc2VsZWN0ZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3RpdGFuL3NlcGFyYXRvci5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy90aXRhbi9zZXBhcmF0b3IucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZTAwOWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy90aXRhbi9zZXBhcmF0b3IucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3RpdGFuL3NraW4uY3NzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMvdGl0YW4vc2tpbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM2NWZiZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3RpdGFuL3NraW4uY3NzCkBAIC0wLDAgKzEsODEgQEAKKy5odG1sYXJlYSAudG9vbGJhciB7DQorICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiM4ODlmYzk7DQorICBiYWNrZ3JvdW5kLWltYWdlOnVybChiYWNrLnBuZyk7DQorICBiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteTsNCit9DQorLmh0bWxhcmVhIC50b29sYmFyUm93IHsNCisgIG1hcmdpbi10b3A6MnB4Ow0KKyAgbWFyZ2luLWJvdHRvbToycHg7DQorICBiYWNrZ3JvdW5kLWltYWdlOnVybChidXR0b24tYmFja2dyb3VuZC5wbmcpOw0KKyAgaGVpZ2h0OjI1cHg7DQorfQ0KKy5odG1sYXJlYSAudG9vbGJhciAuYnV0dG9uIHsNCisgIHdpZHRoOjIwcHg7DQorICBoZWlnaHQ6MjBweDsNCisgIHBhZGRpbmc6MXB4Ow0KKyAgYm9yZGVyOm5vbmU7DQorICBiYWNrZ3JvdW5kLWltYWdlOnVybChidXR0b24tYmFja2dyb3VuZC5wbmcpOw0KK30NCisuYnV0dG9uSW1hZ2VDb250YWluZXIgew0KKyAgcG9zaXRpb246cmVsYXRpdmU7DQorICBsZWZ0OjFweDsNCisgIHRvcDoxcHg7DQorfQ0KKy5odG1sYXJlYSAudG9vbGJhciAuc2VwYXJhdG9yIHsNCisgIG1hcmdpbjowOw0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKHNlcGFyYXRvci5wbmcpOw0KKyAgd2lkdGg6N3B4Ow0KKyAgaGVpZ2h0OjIwcHg7DQorICBwYWRkaW5nOjFweDsNCisgIGJvcmRlcjpub25lOw0KK30NCisuaHRtbGFyZWEgLnRvb2xiYXIgYS5idXR0b246aG92ZXIgew0KKyAgYm9yZGVyOm5vbmUgIWltcG9ydGFudDsNCisgIHBhZGRpbmc6MXB4Ow0KKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoaG92ZXIucG5nKTsNCit9DQorLmh0bWxhcmVhIC50b29sYmFyIC5idXR0b24uYnV0dG9uUHJlc3NlZA0KK3sNCisgIHBhZGRpbmc6MXB4Ow0KKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoc2VsZWN0ZWQucG5nKTsNCit9DQorLmh0bWxhcmVhIC5zdGF0dXNCYXIgew0KKyAgcGFkZGluZzowOw0KKyAgaGVpZ2h0OjIwcHg7DQorICBiYWNrZ3JvdW5kLWltYWdlOnVybChidXR0b24tYmFja2dyb3VuZC5wbmcpOw0KKyAgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7DQorICBiYWNrZ3JvdW5kLWNvbG9yOiM4ODlmYzk7DQorICBjb2xvcjpCdXR0b25UZXh0Ow0KKyAgZm9udDoxMXB4IGhlbHZldGljYSxhcmlhbCxzYW5zLXNlcmlmOw0KK30NCisNCisuaHRtbGFyZWEgLnN0YXR1c0JhciAuc3RhdHVzQmFyV2lkZ2V0Q29udGFpbmVyDQorew0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7DQorICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7DQorICBiYWNrZ3JvdW5kLWNvbG9yOiAjODg5ZmM5Ow0KK30NCisNCisuaHRtbGFyZWEgLnN0YXR1c0JhciAuc3RhdHVzQmFyVHJlZSB7DQorICBkaXNwbGF5OmJsb2NrOw0KKyAgbWFyZ2luOjNweDsNCit9DQorLmh0bWxhcmVhIC5zdGF0dXNCYXIgLnN0YXR1c0JhclRyZWUgYSB7DQorICBwYWRkaW5nOjJweCA1cHg7DQorICBjb2xvcjojMDBmOw0KKyAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7DQorfQ0KKy5odG1sYXJlYSAucGFuZWwgaDEgew0KKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoYnV0dG9uLWJhY2tncm91bmQucG5nKTsNCisgIGJhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14Ow0KKyAgYmFja2dyb3VuZC1jb2xvcjojODg5ZmM5Ow0KK30NCisuZGlhbG9nIHsNCisgIGJhY2tncm91bmQtY29sb3I6I2Y3ZjhmZDsNCit9DQorLmRpYWxvZyAudGl0bGUgew0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7DQorfSAgDQorLmRpYWxvZyBidXR0b257DQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoYnV0dG9uLWJhY2tncm91bmQucG5nKTsNCit9DQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMveHAtYmx1ZS9iYWNrLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3hwLWJsdWUvYmFjay5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc4ZGViYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3hwLWJsdWUvYmFjay5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMveHAtYmx1ZS9idXR0b24tYmFja2dyb3VuZC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy94cC1ibHVlL2J1dHRvbi1iYWNrZ3JvdW5kLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTQ4OGQzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMveHAtYmx1ZS9idXR0b24tYmFja2dyb3VuZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMveHAtYmx1ZS9ob3Zlci5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy94cC1ibHVlL2hvdmVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTVlMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMveHAtYmx1ZS9ob3Zlci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMveHAtYmx1ZS9zZWxlY3RlZC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy94cC1ibHVlL3NlbGVjdGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGMzMzM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMveHAtYmx1ZS9zZWxlY3RlZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMveHAtYmx1ZS9zZXBhcmF0b3IucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMveHAtYmx1ZS9zZXBhcmF0b3IucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyY2ViMzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy94cC1ibHVlL3NlcGFyYXRvci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMveHAtYmx1ZS9za2luLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3hwLWJsdWUvc2tpbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmODU2NAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3hwLWJsdWUvc2tpbi5jc3MKQEAgLTAsMCArMSw4NCBAQAorLmh0bWxhcmVhIC50b29sYmFyIHsNCisJYmFja2dyb3VuZC1jb2xvcjojYzNkYWY5Ow0KKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoYmFjay5wbmcpOw0KKyAgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXk7DQorfQ0KKy5odG1sYXJlYSAudG9vbGJhclJvdyB7DQorICBtYXJnaW4tdG9wOjJweDsNCisgIG1hcmdpbi1ib3R0b206MnB4Ow0KKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoYnV0dG9uLWJhY2tncm91bmQucG5nKTsNCisgIGhlaWdodDoyNXB4OyAgDQorfQ0KKy5odG1sYXJlYSAudG9vbGJhciAuYnV0dG9uIHsNCisgIHdpZHRoOjIwcHg7DQorICBoZWlnaHQ6MjBweDsNCisgIHBhZGRpbmc6MXB4Ow0KKyAgYm9yZGVyOm5vbmU7DQorICBiYWNrZ3JvdW5kLWltYWdlOnVybChidXR0b24tYmFja2dyb3VuZC5wbmcpOw0KK30NCisuYnV0dG9uSW1hZ2VDb250YWluZXIgew0KKyAgcG9zaXRpb246cmVsYXRpdmU7DQorICBsZWZ0OjFweDsNCisgIHRvcDoxcHg7DQorfQ0KKy5odG1sYXJlYSAudG9vbGJhciAuc2VwYXJhdG9yIHsNCisgIG1hcmdpbjowOw0KKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoc2VwYXJhdG9yLnBuZyk7DQorICB3aWR0aDo3cHg7DQorICBoZWlnaHQ6MjBweDsNCisgIHBhZGRpbmc6MDsNCit9DQorLnNlcGFyYXRvciB7DQorICBib3JkZXI6bm9uZTsNCit9DQorLmh0bWxhcmVhIC50b29sYmFyIGEuYnV0dG9uOmhvdmVyIHsNCisgIGJvcmRlcjoxcHggc29saWQgIzAwMzM1NTsNCisgIHBhZGRpbmc6MDsNCisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKGhvdmVyLnBuZyk7DQorfQ0KKy5odG1sYXJlYSAudG9vbGJhciAuYnV0dG9uLmJ1dHRvblByZXNzZWQNCit7DQorICBib3JkZXI6MXB4IHNvbGlkICMwMDMzNTU7DQorICBwYWRkaW5nOjA7DQorICBiYWNrZ3JvdW5kLWltYWdlOnVybChzZWxlY3RlZC5wbmcpOw0KK30NCisuaHRtbGFyZWEgLnN0YXR1c0JhciB7DQorICBwYWRkaW5nOjA7DQorICBoZWlnaHQ6MjBweDsNCisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7DQorICBiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDsNCisgIGJhY2tncm91bmQtY29sb3I6I2MzZGFmOTsNCisgIGNvbG9yOkJ1dHRvblRleHQ7DQorICBmb250OjExcHggaGVsdmV0aWNhLGFyaWFsLHNhbnMtc2VyaWY7DQorfQ0KKw0KKy5odG1sYXJlYSAuc3RhdHVzQmFyIC5zdGF0dXNCYXJXaWRnZXRDb250YWluZXINCit7DQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoYnV0dG9uLWJhY2tncm91bmQucG5nKTsNCisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsNCisgIGJhY2tncm91bmQtY29sb3I6ICNjM2RhZjk7DQorfQ0KKw0KKy5odG1sYXJlYSAuc3RhdHVzQmFyIC5zdGF0dXNCYXJUcmVlIHsNCisgIGRpc3BsYXk6YmxvY2s7DQorICBtYXJnaW46M3B4Ow0KK30NCisuaHRtbGFyZWEgLnN0YXR1c0JhciAuc3RhdHVzQmFyVHJlZSBhIHsNCisgIHBhZGRpbmc6MnB4IDVweDsNCisgIGNvbG9yOiMwMGY7DQorICB0ZXh0LWRlY29yYXRpb246bm9uZTsNCit9DQorLmh0bWxhcmVhIC5wYW5lbCBoMSB7DQorICBiYWNrZ3JvdW5kLWltYWdlOnVybChidXR0b24tYmFja2dyb3VuZC5wbmcpOw0KKyAgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7DQorICBiYWNrZ3JvdW5kLWNvbG9yOiNjM2RhZjk7DQorfQ0KKy5kaWFsb2cgew0KKyAgYmFja2dyb3VuZC1jb2xvcjojYzNkYWY5Ow0KK30NCisuZGlhbG9nIC50aXRsZSB7DQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoYnV0dG9uLWJhY2tncm91bmQucG5nKTsNCit9ICANCisuZGlhbG9nIGJ1dHRvbnsNCisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChidXR0b24tYmFja2dyb3VuZC5wbmcpOw0KK30NCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy94cC1ncmVlbi9iYWNrLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3hwLWdyZWVuL2JhY2sucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMGE3NDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy94cC1ncmVlbi9iYWNrLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy94cC1ncmVlbi9idXR0b24tYmFja2dyb3VuZC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy94cC1ncmVlbi9idXR0b24tYmFja2dyb3VuZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFhNDY1NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3hwLWdyZWVuL2J1dHRvbi1iYWNrZ3JvdW5kLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy94cC1ncmVlbi9ob3Zlci5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy94cC1ncmVlbi9ob3Zlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU1ZTM1NQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3hwLWdyZWVuL2hvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy94cC1ncmVlbi9zZWxlY3RlZC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy94cC1ncmVlbi9zZWxlY3RlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBjMzMzOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3hwLWdyZWVuL3NlbGVjdGVkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy94cC1ncmVlbi9zZXBhcmF0b3IucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMveHAtZ3JlZW4vc2VwYXJhdG9yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGM1YTU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvc2tpbnMveHAtZ3JlZW4vc2VwYXJhdG9yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy94cC1ncmVlbi9za2luLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3NraW5zL3hwLWdyZWVuL3NraW4uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMjg0ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS9za2lucy94cC1ncmVlbi9za2luLmNzcwpAQCAtMCwwICsxLDg0IEBACisuaHRtbGFyZWEgLnRvb2xiYXIgew0KKyAgYmFja2dyb3VuZC1jb2xvcjojZjJmMGU0Ow0KKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoYmFjay5wbmcpOw0KKyAgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXk7DQorfQ0KKy5odG1sYXJlYSAudG9vbGJhclJvdyB7DQorICBtYXJnaW4tdG9wOjJweDsNCisgIG1hcmdpbi1ib3R0b206MnB4Ow0KKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoYnV0dG9uLWJhY2tncm91bmQucG5nKTsNCisgIGhlaWdodDoyNXB4Ow0KK30NCisuaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvbiB7DQorICB3aWR0aDoyMHB4Ow0KKyAgaGVpZ2h0OjIwcHg7DQorICBwYWRkaW5nOjFweDsNCisgIGJvcmRlcjpub25lOw0KKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoYnV0dG9uLWJhY2tncm91bmQucG5nKTsNCit9DQorLmJ1dHRvbkltYWdlQ29udGFpbmVyIHsNCisgIHBvc2l0aW9uOnJlbGF0aXZlOw0KKyAgbGVmdDoxcHg7DQorICB0b3A6MXB4Ow0KK30NCisuaHRtbGFyZWEgLnRvb2xiYXIgLnNlcGFyYXRvciB7DQorICBtYXJnaW46MDsNCisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKHNlcGFyYXRvci5wbmcpOw0KKyAgd2lkdGg6N3B4Ow0KKyAgaGVpZ2h0OjIwcHg7DQorICBwYWRkaW5nOjA7DQorfQ0KKy5zZXBhcmF0b3Igew0KKyAgYm9yZGVyOm5vbmU7DQorfQ0KKy5odG1sYXJlYSAudG9vbGJhciBhLmJ1dHRvbjpob3ZlciB7DQorICBib3JkZXI6MXB4IHNvbGlkICMzMzU1MDA7DQorICBwYWRkaW5nOjA7DQorICBiYWNrZ3JvdW5kLWltYWdlOnVybChob3Zlci5wbmcpOw0KK30NCisuaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvbi5idXR0b25QcmVzc2VkDQorew0KKyAgYm9yZGVyOjFweCBzb2xpZCAjMzM1NTAwOw0KKyAgcGFkZGluZzowOw0KKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoc2VsZWN0ZWQucG5nKTsNCit9DQorLmh0bWxhcmVhIC5zdGF0dXNCYXIgew0KKyAgcGFkZGluZzowOw0KKyAgaGVpZ2h0OjIwcHg7DQorICBiYWNrZ3JvdW5kLWltYWdlOnVybChidXR0b24tYmFja2dyb3VuZC5wbmcpOw0KKyAgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7DQorICBiYWNrZ3JvdW5kLWNvbG9yOiNmMmYwZTQ7DQorICBjb2xvcjpCdXR0b25UZXh0Ow0KKyAgZm9udDoxMXB4IGhlbHZldGljYSxhcmlhbCxzYW5zLXNlcmlmOw0KK30NCisNCisuaHRtbGFyZWEgLnN0YXR1c0JhciAuc3RhdHVzQmFyV2lkZ2V0Q29udGFpbmVyDQorew0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7DQorICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7DQorICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMGU0Ow0KK30NCisNCisuaHRtbGFyZWEgLnN0YXR1c0JhciAuc3RhdHVzQmFyVHJlZSB7DQorICBkaXNwbGF5OmJsb2NrOw0KKyAgbWFyZ2luOjNweDsNCit9DQorLmh0bWxhcmVhIC5zdGF0dXNCYXIgLnN0YXR1c0JhclRyZWUgYSB7DQorICBwYWRkaW5nOjJweCA1cHg7DQorICBjb2xvcjojMDBmOw0KKyAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7DQorfQ0KKy5odG1sYXJlYSAucGFuZWwgaDEgew0KKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoYnV0dG9uLWJhY2tncm91bmQucG5nKTsNCisgIGJhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14Ow0KKyAgYmFja2dyb3VuZC1jb2xvcjojZjJmMGU0Ow0KK30NCisuZGlhbG9nIHsNCisgIGJhY2tncm91bmQtY29sb3I6I2YyZjBlNDsNCit9DQorLmRpYWxvZyAudGl0bGUgew0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7DQorfSAgDQorLmRpYWxvZyBidXR0b257DQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoYnV0dG9uLWJhY2tncm91bmQucG5nKTsNCit9DQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy8uaHRhY2Nlc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zLy5odGFjY2VzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTdiOGI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy8uaHRhY2Nlc3MKQEAgLTAsMCArMSwxMDUgQEAKKzxJZk1vZHVsZSBtb2Rfc2V0ZW52aWYuYz4KKyAgCisgIEVycm9yRG9jdW1lbnQgNDAzICJUaGlzIHJlcXVlc3QgaGFzIGJlZW4gZGVuaWVkIGJlY2F1c2UgdGhlIHBsdWdpbiBpcyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIGFuZCB5b3VyIElQIGlzIG5vdCBhcHByb3ZlZC4gRGV2ZWxvcGVycyBjYW4gYWRkIGFwcHJvdmVkIElQIGFkZHJlc3NlcyB0byB0aGUgWy4uLl0veGluaGEvdW5zdXBwb3J0ZWRfcGx1Z2lucy8uaHRhY2Nlc3MgZmlsZSIKKyAgCisgICMgU29tZSB1bnN1cHBvcnRlZCBwbHVnaW5zIGFyZSBwb3RlbnRpYWxseSBtb3JlIGRhbmdlcm91cyB0byBoYXZlIAorICAjICBvcGVuLXRvLXRoZS13b3JsZCB0aGFuIG90aGVycyBkdWUgdG8gdGhlIHBvdGVudGlhbCBmb3IgdW5rbm93biBvcgorICAjICBjcmVwdC1pbi10aHJvdWdoLXBocC11cGRhdGVzIHR5cGUgdnVsbmVyYWJpbGl0aWVzCisgICMKKyAgIyBBcyBhIHJlc3VsdCB0aG9zZSBwbHVnaW5zIChzZWUgZnVydGhlciBiZWxvdykgYXJlIGxpbWl0ZWQgdG8gYXBwcm92ZWQKKyAgIyAgaXAgYWRkcmVzc2VzIG9ubHksIHdoaWNoIHlvdSBjYW4gc2V0IGJlbG93LgorICAKKyAgIyBMb2NhbGhvc3Qgb25seSBieSBkZWZhdWx0LCBJIGZpZ3VyZSBpZiB5b3UgYXJlIHJ1bm5pbmcgbG9jYWxseSB0aGVyZQorICAjIGlzbid0IG11Y2ggbW9yZSBiYWQgY2FuIGhhcHBlbiB0aGFuIGFscmVhZHkgaXMuCisgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICBTZXRFbnZJZiBSZW1vdGVfQWRkciAxMjdcLjBcLjBcLjEgYXBwcm92ZWRfaXAKKyAgCisgICMgVGhlIGZvbGxvd2luZyByYW5nZXMgYXJlIHRoZSBQcml2YXRlIElQdjQgU3BhY2UKKyAgIyBJZiB5b3UgYXJlIGFsbG93aW5nIG9ubHkgeW91ciBsb2NhbCBuZXR3b3JrIHRvIGFjY2VzcyB0aGlzLCBqdXN0IAorICAjIHVuY29tbWVudCB0aGUgYXBwcm9wcmlhdGUgb25lKHMpCisgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAjIFNldEVudklmIFJlbW90ZV9BZGRyIDE5MlwuMTY4XC5bMC05XStcLlswLTldKyAgICBhcHByb3ZlZF9pcAorICAjIFNldEVudklmIFJlbW90ZV9BZGRyIDEwXC5bMC05XStcLlswLTldK1wuWzAtOV0rICBhcHByb3ZlZF9pcAorICAjIFNldEVudklmIFJlbW90ZV9BZGRyIDE3MlwuMVs2LTldXC5bMC05XStcLlswLTldKyBhcHByb3ZlZF9pcAorICAjIFNldEVudklmIFJlbW90ZV9BZGRyIDE3MlwuMlswLTldXC5bMC05XStcLlswLTldKyBhcHByb3ZlZF9pcAorICAjIFNldEVudklmIFJlbW90ZV9BZGRyIDE3MlwuM1swLTFdXC5bMC05XStcLlswLTldKyBhcHByb3ZlZF9pcAorICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgCisgICMgQWRkIGFkZGl0aW9uYWwgU2V0RW52SWYgdG8gYXBwcm92ZSBmdXJ0aGVyIElQIGFkZHJlc3Nlcywgbm90ZSB0aGF0IAorICAjICB0aGUgSVAgYWRkcmVzcyBpcyBhIHJlZ3VsYXIgZXhwcmVzcywgYmUgc3VyZSB0byBlc2NhcGUgdGhlIGRvdHMuCisgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAjIFNldEVudklmIFJlbW90ZV9BZGRyIDExMVwuMTExXC4xMTFcLjExMSAgICAgICAgIGFwcHJvdmVkX2lwCisgICMgU2V0RW52SWYgUmVtb3RlX0FkZHIgMTIzXC4xMjNcLjEyM1wuMTIzICAgICAgICAgYXBwcm92ZWRfaXAKKyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAKKyAgIyBQbHVnaW4gTGlzdAorICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICMgV2UgbWFyayB0aGUgc2FmZSBwbHVnaW5zLCBhbnl0aGluZyBub3QgbWFya2VkIChjb21tZW50ZWQgb3V0KSBpcyAKKyAgIyAgcmVnYXJkZWQgdG8gYmUgYSBwb3RlbnRpYWwgdGhyZWF0LgorICAKKyAgI1NldEVudklmIFJlcXVlc3RfVVJJICIvQmFja2dyb3VuZEltYWdlLyIgbm90X2Ffc2VjdXJpdHlfdGhyZWF0CisgICNTZXRFbnZJZiBSZXF1ZXN0X1VSSSAiL0RvdWJsZUNsaWNrLyIgbm90X2Ffc2VjdXJpdHlfdGhyZWF0CisgICNTZXRFbnZJZiBSZXF1ZXN0X1VSSSAiL0ZpbHRlci8iIG5vdF9hX3NlY3VyaXR5X3RocmVhdAorICAjU2V0RW52SWYgUmVxdWVzdF9VUkkgIi9JbnNlcnRNYXJxdWVlLyIgbm90X2Ffc2VjdXJpdHlfdGhyZWF0CisgICNTZXRFbnZJZiBSZXF1ZXN0X1VSSSAiL05vdGVTZXJ2ZXIvIiBub3RfYV9zZWN1cml0eV90aHJlYXQgIAorICAjU2V0RW52SWYgUmVxdWVzdF9VUkkgIi9UZW1wbGF0ZS8iIG5vdF9hX3NlY3VyaXR5X3RocmVhdAorICAKKyAgU2V0RW52SWYgUmVxdWVzdF9VUkkgIi9FeHRlbmRlZEZpbGVNYW5hZ2VyLyIgIHNlY3VyaXR5X3RocmVhdAorICBTZXRFbnZJZiBSZXF1ZXN0X1VSSSAiL0h0bWxUaWR5LyIgICAgICAgICAgICAgc2VjdXJpdHlfdGhyZWF0CisgIFNldEVudklmIFJlcXVlc3RfVVJJICIvSW1hZ2VNYW5hZ2VyLyIgICAgICAgICBzZWN1cml0eV90aHJlYXQKKyAgU2V0RW52SWYgUmVxdWVzdF9VUkkgIi9JbnNlcnRQaWN0dXJlLyIgICAgICAgIHNlY3VyaXR5X3RocmVhdAorICBTZXRFbnZJZiBSZXF1ZXN0X1VSSSAiL1NwZWxsQ2hlY2tlci8iICAgICAgICAgc2VjdXJpdHlfdGhyZWF0CisgIAorICBTZXRFbnZJZiBSZXF1ZXN0X1VSSSAiL1BlcnNpc3RlbnRTdG9yYWdlLyIgICAgc2VjdXJpdHlfdGhyZWF0CisgICAgU2V0RW52SWYgUmVxdWVzdF9VUkkgIi9QU0ZpeGVkLyIgICAgICAgICAgICBzZWN1cml0eV90aHJlYXQKKyAgICBTZXRFbnZJZiBSZXF1ZXN0X1VSSSAiL1BTTG9jYWwvIiAgICAgICAgICAgIHNlY3VyaXR5X3RocmVhdAorICAgIFNldEVudklmIFJlcXVlc3RfVVJJICIvUFNTZXJ2ZXIvIiAgICAgICAgICAgc2VjdXJpdHlfdGhyZWF0CisgIAorICAjIEFuZCB0aGlzIGlzIHdoZXJlIHdlIGRlbnkgdGhpbmdzLCBob3BlZnVsbHkgdGhpcyBjb25jb2N0aW9uIG9mIHJ1bGVzCisgICMgIHdvcmtzIGluIG1vc3QgdHlwaWNhbCBBcGFjaGUgc2l0dWF0aW9ucy4KKyAgCisgICMgQXBhY2hlIDwgMi4zCisgIDxJZk1vZHVsZSAhbW9kX2F1dGh6X2NvcmUuYz4KKyAgICAgICMgRGVueSxBbGxvdyBtZWFucworICAgICAgIyAgaWYgYm90aCBtYXRjaCB0aGVuIGFsbG93LAorICAgICAgIyAgZWxzZSBpZiBuZWl0aGVyIG1hdGNoIHRoZW4gYWxsb3csCisgICAgICAjICBlbHNlIGlmIGRlbnkgbWF0Y2hlcyB0aGVuIGRlbnksCisgICAgICAjICBlbHNlIGlmIGFsbG93IG1hdGNoZXMgdGhlbiBhbGxvdyAgICAgIAorICAgICAgT3JkZXIgRGVueSxBbGxvdworICAgICAgRGVueSBmcm9tIGVudj1zZWN1cml0eV90aHJlYXQKKyAgICAgIEFsbG93IGZyb20gZW52PWFwcHJvdmVkX2lwCisgIDwvSWZNb2R1bGU+CisKKyAgIyBBcGFjaGUgPj0gMi4zCisgIDxJZk1vZHVsZSBtb2RfYXV0aHpfY29yZS5jPgorICAgIAorICAgICMgV2hpY2ggaGFzIHRoZSBjb21wYXRpYmlsaXR5IG1vZHVsZSwgd2Ugd2lsbCBoYXZlIHRvIHVzZQorICAgICMgIHRoaXMgYWxzbyB0byBtYWtlIHN1cmUgdGhhdCBpcyBkZW5pZWQgaW4gY2FzZSB0aGUKKyAgICAjICB2aG9zZSBpbmNsdWRlcyBvbGQgcnVsZXMgdG9vIHdoaWNoIHdvdWxkIG92ZXJyaWRlCisgICAgIyAgdGhlIG5ldyBSZXF1aXJlIGRpcmVjdGl2ZXMKKyAgICA8SWZNb2R1bGUgbW9kX2FjY2Vzc19jb21wYXQuYz4KKyAgICAgIE9yZGVyIERlbnksQWxsb3cKKyAgICAgIERlbnkgZnJvbSBlbnY9c2VjdXJpdHlfdGhyZWF0CisgICAgICBBbGxvdyBmcm9tIGVudj1hcHByb3ZlZF9pcAorICAgIDwvSWZNb2R1bGU+CisgICAgCisgICAgIyBGaW5hbGx5IEFwYWNoZSA+PSAyLjMgcHJvcGVybHkgKHdoeSBkaWQgdGhleSBtYWtlIHRoaXMgc28gY29uZnVzaW5nKQorICAgIDxSZXF1aXJlQW55PgorICAgICAgIyBEZW55IGV2ZXJ5Ym9keSBieSBkZWZhdWx0CisgICAgICBSZXF1aXJlIGFsbCBkZW5pZWQKKyAgICAgIAorICAgICAgIyBFeGNlcHQgaWYgaXQncyBub3QgYSBzZWN1cml0eSB0aHJlYXQKKyAgICAgIDxSZXF1aXJlQWxsPgorICAgICAgICBSZXF1aXJlIGFsbCBncmFudGVkCisgICAgICAgIFJlcXVpcmUgbm90IGVudiBzZWN1cml0eV90aHJlYXQKKyAgICAgIDwvUmVxdWlyZUFsbD4KKyAgICAgIAorICAgICAgIyBFeGNlcHQgaWYgaXQncyBhbiBhcHByb3ZlZCBJUAorICAgICAgPFJlcXVpcmVBbGw+CisgICAgICAgIFJlcXVpcmUgYWxsIGdyYW50ZWQKKyAgICAgICAgUmVxdWlyZSBlbnYgYXBwcm92ZWRfaXAKKyAgICAgIDwvUmVxdWlyZUFsbD4KKyAgICA8L1JlcXVpcmVBbnk+CisgIDwvSWZNb2R1bGU+CisgIAorPC9JZk1vZHVsZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9CYWNrZ3JvdW5kSW1hZ2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9CYWNrZ3JvdW5kSW1hZ2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNhYTdlOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL0JhY2tncm91bmRJbWFnZS5qcwpAQCAtMCwwICsxLDEzNiBAQAorLy8gQmFja2dyb3VuZEltYWdlIHBsdWdpbiBmb3IgWGluaGENCisvLyBTcG9uc29yZWQgYnkgaHR0cDovL3d3dy5zY2hhZmZyYXRoLW5ldWVtZWRpZW4uZGUNCisvLyBJbXBsZW1lbnRhdGlvbiBieSBVZG8gU2NobWFsDQorLy8gYmFzZWQgb24gVGlueU1DRSAoaHR0cDovL3RpbnltY2UubW94aWVjb2RlLmNvbS8pIERpc3RyaWJ1dGVkIHVuZGVyIExHUEwgYnkgTW94aWVjb2RlIFN5c3RlbXMgQUINCisvLw0KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFhpbmhhIGl0c2VsZi4NCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuDQorDQorZnVuY3Rpb24gQmFja2dyb3VuZEltYWdlKGVkaXRvcikgew0KKyAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7DQorICB2YXIgY2ZnID0gZWRpdG9yLmNvbmZpZzsNCisgIHZhciBzZWxmID0gdGhpczsNCisgIGNmZy5yZWdpc3RlckJ1dHRvbih7DQorICAgIGlkICAgICAgIDogImJnSW1hZ2UiLA0KKyAgICB0b29sdGlwICA6IFhpbmhhLl9sYygiU2V0IHBhZ2UgYmFja2dyb3VuZCBpbWFnZSIsICAnQmFja2dyb3VuZEltYWdlJyksDQorICAgIGltYWdlICAgIDogZWRpdG9yLmltZ1VSTCgiZWRfYmdpbWFnZS5naWYiLCAiQmFja2dyb3VuZEltYWdlIiksDQorICAgIHRleHRNb2RlIDogZmFsc2UsDQorICAgIGFjdGlvbiAgIDogZnVuY3Rpb24oZWRpdG9yKSB7DQorICAgICAgc2VsZi5zaG93KCk7DQorICAgIH0NCisgIH0pDQorICBjZmcuYWRkVG9vbGJhckVsZW1lbnQoImJnSW1hZ2UiLCAiaW5zZXJ0aG9yaXpvbnRhbHJ1bGUiLCAxKTsNCit9DQorDQorQmFja2dyb3VuZEltYWdlLl9wbHVnaW5JbmZvID0gew0KKyAgbmFtZSAgICAgICAgICA6ICJCYWNrZ3JvdW5kSW1hZ2UiLA0KKyAgdmVyc2lvbiAgICAgICA6ICIxLjAiLA0KKyAgZGV2ZWxvcGVyICAgICA6ICJVZG8gU2NobWFsIiwNCisgIGRldmVsb3Blcl91cmwgOiAiaHR0cDovL3d3dy5zY2hhZmZyYXRoLW5ldWVtZWRpZW4uZGUvIiwNCisgIGNfb3duZXIgICAgICAgOiAiVWRvIFNjaG1hbCAmIFNjaGFmZnJhdGggTmV1ZU1lZGllbiIsDQorICBzcG9uc29yICAgICAgIDogIkwuTi5TY2hhZmZyYXRoIE5ldWVNZWRpZW4iLA0KKyAgc3BvbnNvcl91cmwgICA6ICJodHRwOi8vd3d3LnNjaGFmZnJhdGgtbmV1ZW1lZGllbi5kZS5kZS8iLA0KKyAgbGljZW5zZSAgICAgICA6ICJodG1sQXJlYSINCit9Ow0KKw0KK0JhY2tncm91bmRJbWFnZS5wcm90b3R5cGUub25HZW5lcmF0ZU9uY2UgPSBmdW5jdGlvbihlZGl0b3Ipew0KKyAgLy8gTG9hZCBhc3NldHMNCisgIHZhciBzZWxmID0gQmFja2dyb3VuZEltYWdlOw0KKyAgaWYgKHNlbGYubG9hZGluZykgcmV0dXJuOw0KKw0KKyAgLy8gQSBsaXN0IG9mIGpwZ3MgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgaW4gLi9iYWNrZ3JvdW5kcyB3aXRoIHRodW1ibmFpbHMuDQorICB2YXIgYmFja2dyb3VuZHMgPSB7Ymx1ZnVyOicnLHBhbGVjbnZzOicnLCBwcHBsY252czonJywgeWx3c2FuZDonJ307DQorDQorICBzZWxmLmxvYWRpbmcgPSB0cnVlOw0KKyAgc2VsZi5tZXRob2RzUmVhZHkgPSB0cnVlOw0KKw0KKyAgLy8gV2hlbiB3ZSBnZXQgYmFjayBmcm9tIGxvYWRpbmcgdGhlIGRpYWxvZywgd2UnbGwgcHJvY2VzcyBvdXIgaW1hZ2UgdGVtcGxhdGUgdG8gaGFuZGxlIGFzIG1hbnkgaW1hZ2VzIGFzIHNwZWNpZmllZC4NCisgIFhpbmhhLl9nZXRiYWNrKFhpbmhhLmdldFBsdWdpbkRpcignQmFja2dyb3VuZEltYWdlJykgKyAnL2RpYWxvZy5odG1sJywgZnVuY3Rpb24oZ2V0YmFjaykgew0KKw0KKyAgICAvLyBSZXBsYWNlIHRoZSB0ZW1wbGF0ZSBsaW5lIHdpdGggb25lIGxpbmUgcGVyIGltYWdlLg0KKyAgICBzZWxmLmh0bWwgPSBnZXRiYWNrLnJlcGxhY2UoLzx0ZW1wbGF0ZT4oLio/KTxcL3RlbXBsYXRlPi9pZywgZnVuY3Rpb24oZnVsbFN0cmluZywgdGVtcGxhdGUpIHsNCisgICAgICB2YXIgcmVwbGFjZW1lbnQgPSAnJzsNCisNCisgICAgICBmb3IgKGJnIGluIGJhY2tncm91bmRzKQ0KKyAgICAgIHsNCisgICAgICAgIHZhciB0aHVtYlVSTCA9IFhpbmhhLmdldFBsdWdpbkRpcignQmFja2dyb3VuZEltYWdlJykgKyAnL2JhY2tncm91bmRzL3RodW1ibmFpbHMvJyArIGJnICsgJy5qcGcnOw0KKyAgICAgICAgdmFyIGltYWdlVVJMID0gWGluaGEuZ2V0UGx1Z2luRGlyKCdCYWNrZ3JvdW5kSW1hZ2UnKSArICcvYmFja2dyb3VuZHMvJyArIGJnICsgJy5qcGcnOw0KKyAgICAgICAgcmVwbGFjZW1lbnQgKz0gdGVtcGxhdGUucmVwbGFjZSgvJXRodW1ibmFpbCUvLHRodW1iVVJMKS5yZXBsYWNlKC8laW1hZ2UlLyxpbWFnZVVSTCk7DQorICAgICAgfQ0KKyAgICAgIHJldHVybiByZXBsYWNlbWVudDsNCisgICAgfSk7DQorICAgIHNlbGYuZGlhbG9nUmVhZHkgPSB0cnVlOw0KKyAgfSk7DQorfQ0KKw0KK0JhY2tncm91bmRJbWFnZS5wcm90b3R5cGUub25VcGRhdGVUb29sYmFyID0gZnVuY3Rpb24oZWRpdG9yKXsNCisgIC8vIEtlZXAgb3VyIHRvb2xiYXIgaW1hZ2UgZ3JleWVkIHVudGlsIHdlJ3JlIGZ1bGx5IGxvYWRlZC4NCisgIGlmICghKEJhY2tncm91bmRJbWFnZS5kaWFsb2dSZWFkeSAmJiBCYWNrZ3JvdW5kSW1hZ2UubWV0aG9kc1JlYWR5KSkNCisgIHsNCisgICAgdGhpcy5lZGl0b3IuX3Rvb2xiYXJPYmplY3RzLkJhY2tncm91bmRJbWFnZS5zdGF0ZSgiZW5hYmxlZCIsIGZhbHNlKTsNCisgIH0NCisgIGVsc2UgdGhpcy5vblVwZGF0ZVRvb2xiYXIgPSBudWxsOw0KKw0KK30NCisNCitCYWNrZ3JvdW5kSW1hZ2UucHJvdG90eXBlLnByZXBhcmVEaWFsb2cgPSBmdW5jdGlvbihlZGl0b3Ipew0KKyAgdmFyIHNlbGYgPSB0aGlzOw0KKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOw0KKw0KKyAgdmFyIGRpYWxvZyA9IHRoaXMuZGlhbG9nID0gbmV3IFhpbmhhLkRpYWxvZyhlZGl0b3IsIEJhY2tncm91bmRJbWFnZS5odG1sLCAnWGluaGEnLHt3aWR0aDo0MDB9KQ0KKyAgLy8NCisgIC8vIEhvb2t1cCB0aGUgYnV0dG9ucyB3aXRoIG91ciBhY3Rpb25zDQorICBkaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ3NldCcpLm9uY2xpY2sgPSBmdW5jdGlvbigpIHtzZWxmLmFwcGx5KCk7fQ0KKyAgZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdkZWxldGUnKS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7c2VsZi5kZWxldGVCZygpO30NCisgIGRpYWxvZy5nZXRFbGVtZW50QnlJZCgnY2FuY2VsJykub25jbGljayA9IGZ1bmN0aW9uKCkgeyBzZWxmLmRpYWxvZy5oaWRlKCl9Ow0KKyAgDQorICB0aGlzLmRpYWxvZ1JlYWR5ID0gdHJ1ZTsNCit9DQorDQorQmFja2dyb3VuZEltYWdlLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24oZWRpdG9yKXsNCisgaWYgKCF0aGlzLmRpYWxvZykgdGhpcy5wcmVwYXJlRGlhbG9nKCk7DQorDQorICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7DQorDQorICAvLyBBZnRlciBjbGVhcmluZyB0aGUgYmFja2dyb3VuZCBwcm9wZXJ0eSwgaXQgcmV0dXJucyB0aGUgY3VycmVudCBVUkwsIGFuZCBzbw0KKyAgLy8gd2UgbmVlZCB0byBjaGVjayB0aGUgZXh0ZW5zaW9uIHRvIGZpbmQgb3V0IGlmIGl0IHJlYWxseSBoYXMgYSBiYWNrZ3JvdW5kLg0KKyAgaWYgKGVkaXRvci5fZG9jLmJvZHkuYmFja2dyb3VuZC5zcGxpdCgnLicpLnBvcCgpIGluIHtqcGc6JycsIGdpZjonJywgcG5nOicnLCBqcGVnOicnLCB0aWZmOicnfSkNCisgIHsNCisgICAgdmFyIGJhY2tncm91bmQgPSBlZGl0b3IuX2RvYy5ib2R5LmJhY2tncm91bmQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIHZhciBiYWNrZ3JvdW5kID0gJyc7DQorICB9DQorICB2YXIgdmFsdWVzID0gDQorICB7DQorICAgICJiYWNrZ3JvdW5kIiAgICAgIDogYmFja2dyb3VuZA0KKyAgfQ0KKw0KKyAgLy8gbm93IGNhbGxpbmcgdGhlIHNob3cgbWV0aG9kIG9mIHRoZSBYaW5oYS5EaWFsb2cgb2JqZWN0IHRvIHNldCB0aGUgdmFsdWVzIGFuZCBzaG93IHRoZSBhY3R1YWwgZGlhbG9nDQorICB0aGlzLmRpYWxvZy5zaG93KHZhbHVlcyk7DQorfQ0KKw0KK0JhY2tncm91bmRJbWFnZS5wcm90b3R5cGUuZGVsZXRlQmcgPSBmdW5jdGlvbigpew0KKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOw0KKyAgdGhpcy5kaWFsb2cuaGlkZSgpOw0KKw0KKyAgaWYgKFhpbmhhLmlzX2llKQ0KKyAgICBlZGl0b3IuZm9jdXNFZGl0b3IoKTsNCisNCisgICAgZWRpdG9yLl9kb2MuYm9keS5iYWNrZ3JvdW5kID0gIiI7DQorfQ0KKw0KK0JhY2tncm91bmRJbWFnZS5wcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbigpew0KKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOw0KKyAgdmFyIGRvYyA9IGVkaXRvci5fZG9jOw0KKyAgDQorICAvLyBzZWxlY3Rpb24gaXMgb25seSByZXN0b3JlZCBvbiBkaWFsb2cuaGlkZSgpDQorICB2YXIgcGFyYW0gPSB0aGlzLmRpYWxvZy5oaWRlKCk7DQorICAvLyBhc3NpZ24gdGhlIGdpdmVuIGFyZ3VtZW50cw0KKyAgDQorICBpZiAoWGluaGEuaXNfaWUpDQorICAgIGVkaXRvci5mb2N1c0VkaXRvcigpOw0KKw0KKyAgZG9jLmJvZHkuYmFja2dyb3VuZCA9IHBhcmFtLmJhY2tncm91bmQ7DQorfTsNCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9iYWNrZ3JvdW5kcy9ibHVmdXIuanBnIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvYmFja2dyb3VuZHMvYmx1ZnVyLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2RmNmM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvYmFja2dyb3VuZHMvYmx1ZnVyLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9iYWNrZ3JvdW5kcy9wYWxlY252cy5qcGcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9iYWNrZ3JvdW5kcy9wYWxlY252cy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJhODhhYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2JhY2tncm91bmRzL3BhbGVjbnZzLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9iYWNrZ3JvdW5kcy9wcHBsY252cy5qcGcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9iYWNrZ3JvdW5kcy9wcHBsY252cy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhkZmMwZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2JhY2tncm91bmRzL3BwcGxjbnZzLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9iYWNrZ3JvdW5kcy90aHVtYm5haWxzL2JsdWZ1ci5qcGcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9iYWNrZ3JvdW5kcy90aHVtYm5haWxzL2JsdWZ1ci5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRhYzQ4NAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2JhY2tncm91bmRzL3RodW1ibmFpbHMvYmx1ZnVyLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9iYWNrZ3JvdW5kcy90aHVtYm5haWxzL3BhbGVjbnZzLmpwZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2JhY2tncm91bmRzL3RodW1ibmFpbHMvcGFsZWNudnMuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NjdhMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9iYWNrZ3JvdW5kcy90aHVtYm5haWxzL3BhbGVjbnZzLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9iYWNrZ3JvdW5kcy90aHVtYm5haWxzL3BwcGxjbnZzLmpwZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2JhY2tncm91bmRzL3RodW1ibmFpbHMvcHBwbGNudnMuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZGZjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9iYWNrZ3JvdW5kcy90aHVtYm5haWxzL3BwcGxjbnZzLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9iYWNrZ3JvdW5kcy90aHVtYm5haWxzL3lsd3NhbmQuanBnIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvYmFja2dyb3VuZHMvdGh1bWJuYWlscy95bHdzYW5kLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTExYWE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvYmFja2dyb3VuZHMvdGh1bWJuYWlscy95bHdzYW5kLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9iYWNrZ3JvdW5kcy95bHdzYW5kLmpwZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2JhY2tncm91bmRzL3lsd3NhbmQuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMTFhYTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9iYWNrZ3JvdW5kcy95bHdzYW5kLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9kaWFsb2cuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2RpYWxvZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMTkwZDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9kaWFsb2cuaHRtbApAQCAtMCwwICsxLDE1IEBACis8aDEgaWQ9IltoMV0iPjxsMTBuPlNldCBQYWdlIEJhY2tncm91bmQgSW1hZ2U8L2wxMG4+PC9oMT4KKworPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0iZ2V0Ij4KKzx0YWJsZSBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjYiPgorICA8dHIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsgdmVydGljYWwtYWxpZ246IHRvcDsiPgorICAgIDx0ZW1wbGF0ZT48dGQ+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJbYmFja2dyb3VuZF0iIHZhbHVlPSIlaW1hZ2UlIiAvPjxpbWcgYm9yZGVyPSIxIiBzcmM9IiV0aHVtYm5haWwlIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiPjwvdGQ+PC90ZW1wbGF0ZT4KKyAgPC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJzcGFjZSI+PC9kaXY+Cis8ZGl2IGlkPSJbYnV0dG9uc10iPgorICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0iW3NldF0iIHZhbHVlPSJfKFNldCBCYWNrZ3JvdW5kKSIgLz4KKyAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9IltkZWxldGVdIiBzdHlsZT0id2lkdGg6YXV0byIgdmFsdWU9Il8oUmVtb3ZlIEN1cnJlbnQgQmFja2dyb3VuZCkiIC8+CisgIDxpbnB1dCB0eXBlPSJidXR0b24iIGlkPSJbY2FuY2VsXSIgdmFsdWU9Il8oQ2FuY2VsKSIgLz4KKzwvZGl2PgorPC9mb3JtPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvaW1nL2VkX2JnaW1hZ2UuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvaW1nL2VkX2JnaW1hZ2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNTdkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9pbWcvZWRfYmdpbWFnZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9iNS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvYjUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEzYmQ3NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvYjUuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJiNSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvY2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZjY2NGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2NoLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9jei5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvY3ouanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkzMDkzNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvY3ouanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjeiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9kYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvZGEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJlZGU0YQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvZGEuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2RlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OGNmZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsMTkgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgIlJlbW92ZSBDdXJyZW50IEJhY2tncm91bmQiOiAiQWt0dWVsbGVuIEhpbnRlcmdydW5kIGVudGZlcm5lbiIsCisgICAgIlNldCBQYWdlIEJhY2tncm91bmQgSW1hZ2UiOiAiU2VpdGVuLUhpbnRlcmdydW5kYmlsZCBzZXR6ZW4iLAorICAgICJTZXQgcGFnZSBiYWNrZ3JvdW5kIGltYWdlIjogIlNlaXRlbi1IaW50ZXJncnVuZGJpbGQgc2V0emVuIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQkFDS0dST1VORElNQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2VlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9lZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTljMWVhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9lZS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJMb29idSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9lbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhMzgxMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvZWwuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NGNlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2VzLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXMiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQkFDS0dST1VORElNQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2V1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9ldS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWYxNTVhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9ldS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImV1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJVdHppIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQkFDS0dST1VORElNQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9mYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGViZDU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9mYS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvZmkuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2ZpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTdiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2ZpLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmkiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlBlcnV1dGEiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiODBjYmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsMTkgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsZXIiLAorICAgICJSZW1vdmUgQ3VycmVudCBCYWNrZ3JvdW5kIjogIlN1cHByaW1lciBsZSBmb25kIGFjdHVlbCIsCisgICAgIlNldCBQYWdlIEJhY2tncm91bmQgSW1hZ2UiOiAiRMOpZmluaXIgbCdJbWFnZSBkZSBGb25kIiwKKyAgICAiU2V0IHBhZ2UgYmFja2dyb3VuZCBpbWFnZSI6ICJEw6lmaW5pciBsJ2ltYWdlIGRlIGZvbmQiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvZnJfY2EuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2ZyX2NhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NjI4YmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2ZyX2NhLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnJfY2EiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQkFDS0dST1VORElNQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2diLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9nYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGE1YjRlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9nYi5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImdiIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9oZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvaGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdhNDc5MgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvaGUuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJoZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9odS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvaHUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQwNzY3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvaHUuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJodSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9pdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvaXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlZWNhMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvaXQuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJpdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxsYW1lbnRvIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQkFDS0dST1VORElNQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9qYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFiMjE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9qYS5qcwpAQCAtMCwwICsxLDE5IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICJSZW1vdmUgQ3VycmVudCBCYWNrZ3JvdW5kIjogIuePvuWcqOOBruiDjOaZr+eUu+WDj+OCkumZpOWOuyIsCisgICAgIlNldCBQYWdlIEJhY2tncm91bmQgSW1hZ2UiOiAi44Oa44O844K444Gu6IOM5pmv55S75YOP44KS6Kit5a6aIiwKKyAgICAiU2V0IHBhZ2UgYmFja2dyb3VuZCBpbWFnZSI6ICLjg5rjg7zjgrjjga7og4zmma/nlLvlg4/jgpLoqK3lrpoiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvbGNfYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjkyNDZmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9sY19iYXNlLmpzCkBAIC0wLDAgKzEsMjkgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLworLy8gTEFORzogImVuIiwgRU5DT0RJTkc6IFVURi04CisvLyBBdXRob3I6IFRyYW5zbGF0b3ItTmFtZSwgPGVtYWlsQGV4YW1wbGUuY29tPgorLy8KKy8vIExhc3QgcmV2aXNpb246IDIwMTgtMDQtMTIKKy8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KKy8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyAoUGxlYXNlLCByZW1vdmUgaW5mb3JtYXRpb24gYmVsb3cpCisvLyBGT1IgVFJBTlNMQVRPUlM6CisvLworLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCisvLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCisvLworLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7CisvLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50CisvLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCisKK3sKKyAgICAiQ2FuY2VsIjogIiIsCisgICAgIlJlbW92ZSBDdXJyZW50IEJhY2tncm91bmQiOiAiIiwKKyAgICAiU2V0IEJhY2tncm91bmQiOiAiIiwKKyAgICAiU2V0IFBhZ2UgQmFja2dyb3VuZCBJbWFnZSI6ICIiLAorICAgICJTZXQgcGFnZSBiYWNrZ3JvdW5kIGltYWdlIjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9sdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWU1YTY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9sdC5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdMWhYXVrdGkiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvbHYuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2x2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOWJlMGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL2x2LmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHYiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0Y2VsdCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9uYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRmNDQ3MgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvbmIuanMKQEAgLTAsMCArMSwxOSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJuYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAiUmVtb3ZlIEN1cnJlbnQgQmFja2dyb3VuZCI6ICJGamVybiBnamVsZGVuZGUgYmFrZ3J1bm4iLAorICAgICJTZXQgUGFnZSBCYWNrZ3JvdW5kIEltYWdlIjogIlZlbGcgYmFrZ3J1bm5zYmlsZGUgcMOlIFNpZGVuIiwKKyAgICAiU2V0IHBhZ2UgYmFja2dyb3VuZCBpbWFnZSI6ICJWZWxnIGJha2dydW5uc2JpbGRlIHDDpSBzaWRlbiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9ubC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvbmwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhZjM0MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvbmwuanMKQEAgLTAsMCArMSwxOSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJubCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAiUmVtb3ZlIEN1cnJlbnQgQmFja2dyb3VuZCI6ICJIdWlkaWdlIEFjaHRlcmdyb25kIEFmYmVlbGRpbmcgVmVyd2lqZGVyZW4iLAorICAgICJTZXQgUGFnZSBCYWNrZ3JvdW5kIEltYWdlIjogIlBhZ2luYSBBY2h0ZXJncm9uZCBBZmJlZWxkaW5nIEluc3RlbGxlbiIsCisgICAgIlNldCBwYWdlIGJhY2tncm91bmQgaW1hZ2UiOiAiUGFnaW5hIGFjaHRlcmdyb25kIGFmYmVlbGRpbmcgaW5zdGVsbGVuIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQkFDS0dST1VORElNQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL3BsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9wbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2Q5YzkzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9wbC5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInBsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYWYzNWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTkgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiUmVtb3ZlIEN1cnJlbnQgQmFja2dyb3VuZCI6ICJSZW1vdmVyIGZ1bmRvIGF0dWFsIiwKKyAgICAiU2V0IFBhZ2UgQmFja2dyb3VuZCBJbWFnZSI6ICJEZWZpbmlyIEltYWdlbSBkZSBGdW5kbyIsCisgICAgIlNldCBwYWdlIGJhY2tncm91bmQgaW1hZ2UiOiAiRGVmaW5pciBpbWFnZW0gZGUgZnVuZG8iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvcm8uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL3JvLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOTFmMDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL3JvLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicm8iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlJlbnVuxaPEgyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9ydS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ3ZmU0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvcnUuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQkFDS0dST1VORElNQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL3NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9zaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGM4ZmIyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9zaC5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9zaS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvc2kuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUxNDBlOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvc2kuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUHJla2xpxI1pIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQkFDS0dST1VORElNQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL3NyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9zci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODA0NmIxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9zci5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy9zdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI1MTFiOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvc3YuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQkFDS0dST1VORElNQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL3RoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy90aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mzg5OTdlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy90aC5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLguKLguIHguYDguKXguLTguIEiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvdHIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL3RyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ODMyODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEJBQ0tHUk9VTkRJTUFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9CYWNrZ3JvdW5kSW1hZ2UvbGFuZy92bi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvdm4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM4NmE5MwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvdm4uanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ2biIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiSOG7p3kiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBCQUNLR1JPVU5ESU1BR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQmFja2dyb3VuZEltYWdlL2xhbmcvemhfY24uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL3poX2NuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MDUwZjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0JhY2tncm91bmRJbWFnZS9sYW5nL3poX2NuLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiemhfY24iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQkFDS0dST1VORElNQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL0NsaWVudHNpZGVTcGVsbGNoZWNrLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9DbGllbnRzaWRlU3BlbGxjaGVjay5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzQyYmI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9DbGllbnRzaWRlU3BlbGxjaGVjay5qcwpAQCAtMCwwICsxLDYyIEBACisvLyBJRSBTcGVsbCBJbXBsZW1lbnRhdGlvbiBmb3IgWElOSEENCisvL0NsaWVudC1zaWRlIHNwZWxsIGNoZWNrIHBsdWdpbg0KKy8vVGhpcyBpbXBsZW1lbnRzIHRoZSBBUEkgZm9yIGllU3BlbGwsIHdoaWNoIGlzIG93bmVkIGJ5IFJlZCBFZ2cgU29mdHdhcmUgDQorLy9Gb3IgbW9yZSBpbmZvIGFib3V0IGllU3BlbGwsIGdvIHRvIGh0dHA6Ly93d3cuaWVzcGVsbC5jb20vaW5kZXguaHRtDQorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgWGluaGEgaXRzZWxmLg0KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4NCisNCisNCitmdW5jdGlvbiBDbGllbnRzaWRlU3BlbGxjaGVjayhlZGl0b3IpIHsNCisgIHRoaXMuZWRpdG9yID0gZWRpdG9yOw0KKw0KKyAgdmFyIGNmZyA9IGVkaXRvci5jb25maWc7DQorICB2YXIgYmwgPSBDbGllbnRzaWRlU3BlbGxjaGVjay5idG5MaXN0Ow0KKyAgdmFyIHNlbGYgPSB0aGlzOw0KKw0KKyAgLy8gc2VlIGlmIHdlIGNhbiBmaW5kIHRoZSBtb2RlIHN3aXRjaCBidXR0b24sIGluc2VydCB0aGlzIGJlZm9yZSB0aGF0DQorICB2YXIgaWQgPSAiY2xpZW50c2lkZXNwZWxsY2hlY2siOw0KKyAgDQorICANCisgIGNmZy5yZWdpc3RlckJ1dHRvbihpZCwgdGhpcy5fbGMoIlNwZWxsIENoZWNrIHVzaW5nIGllU3BlbGwiKSwgZWRpdG9yLmltZ1VSTCgiY2xpZW50c2lkZS1zcGVsbGNoZWNrLmdpZiIsICJDbGllbnRzaWRlU3BlbGxjaGVjayIpLCBmYWxzZSwNCisgICAgICAgICAgICAgZnVuY3Rpb24oZWRpdG9yLCBpZCkgew0KKyAgICAgICAgICAgICAgIC8vIGRpc3BhdGNoIGJ1dHRvbiBwcmVzcyBldmVudA0KKyAgICAgICAgICAgICAgIHNlbGYuYnV0dG9uUHJlc3MoZWRpdG9yLCBpZCk7DQorICAgICAgICAgICAgIH0pOw0KKw0KKyAgaWYoWGluaGEuaXNfaWUpIHsNCisgICAgY2ZnLmFkZFRvb2xiYXJFbGVtZW50KCJjbGllbnRzaWRlc3BlbGxjaGVjayIsICJwcmludCIsIDEpOw0KK30NCisNCit9DQorDQorQ2xpZW50c2lkZVNwZWxsY2hlY2suX3BsdWdpbkluZm8gPSB7DQorICBuYW1lICAgICAgICAgIDogIkNsaWVudHNpZGVTcGVsbGNoZWNrIiwNCisgIHZlcnNpb24gICAgICAgOiAiMS4wIiwNCisgIGRldmVsb3BlciAgICAgOiAiTWljaGFlbCBIYXJyaXMiLA0KKyAgZGV2ZWxvcGVyX3VybCA6ICJodHRwOi8vd3d3LmpvbmVzaW50ZXJuYXRpb25hbC5lZHUiLA0KKyAgY19vd25lciAgICAgICA6ICJSZWQgRWdnIFNvZnR3YXJlIiwNCisgIHNwb25zb3IgICAgICAgOiAiSm9uZXMgSW50ZXJuYXRpb25hbCBVbml2ZXJzaXR5IiwNCisgIHNwb25zb3JfdXJsICAgOiAiaHR0cDovL3d3dy5qb25lc2ludGVybmF0aW9uYWwuZWR1IiwNCisgIGxpY2Vuc2UgICAgICAgOiAiaHRtbEFyZWEiDQorfTsNCisNCisNCitDbGllbnRzaWRlU3BlbGxjaGVjay5wcm90b3R5cGUuX2xjID0gZnVuY3Rpb24oc3RyaW5nKSB7DQorICByZXR1cm4gWGluaGEuX2xjKHN0cmluZywgJ0NsaWVudHNpZGVTcGVsbGNoZWNrJyk7DQorfTsNCisNCitDbGllbnRzaWRlU3BlbGxjaGVjay5wcm90b3R5cGUuYnV0dG9uUHJlc3MgPSBmdW5jdGlvbihlZGl0b3IpIHsNCisNCisJdHJ5IHsNCisJCXZhciB0bXBpcyA9IG5ldyBBY3RpdmVYT2JqZWN0KCJpZVNwZWxsLmllU3BlbGxFeHRlbnNpb24iKTsNCisJCXRtcGlzLkNoZWNrQWxsTGlua2VkRG9jdW1lbnRzKGRvY3VtZW50KTsNCisJfQ0KKwljYXRjaChleGNlcHRpb24pIHsNCisgCQlpZihleGNlcHRpb24ubnVtYmVyPT0tMjE0NjgyNzg1OSkgew0KKwkJCWlmIChjb25maXJtKHRoaXMubGMoImllU3BlbGwgbm90IGRldGVjdGVkLiAgQ2xpY2sgT2sgdG8gZ28gdG8gZG93bmxvYWQgcGFnZS4iKSkpDQorCQkJCXdpbmRvdy5vcGVuKCJodHRwOi8vd3d3Lmllc3BlbGwuY29tL2Rvd25sb2FkLnBocCIsIkRvd25Mb2FkIik7DQorCQl9IGVsc2Ugew0KKwkJCWFsZXJ0KHRoaXMubGMoImllU3BlbGwgY2FuIG9ubHkgYmUgdXNlZCBpbiBJbnRlcm5ldCBFeHBsb3JlciIpKTsNCisJCX0NCisJfQ0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9pbWcvY2xpZW50c2lkZS1zcGVsbGNoZWNrLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svaW1nL2NsaWVudHNpZGUtc3BlbGxjaGVjay5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM4NDM1YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svaW1nL2NsaWVudHNpZGUtc3BlbGxjaGVjay5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9pbWcvaGUtc3BlbGwtY2hlY2suZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9pbWcvaGUtc3BlbGwtY2hlY2suZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMTVkMmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2ltZy9oZS1zcGVsbC1jaGVjay5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2I1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2I1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMjY3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvYjUuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJiNSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNDEzYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvY2guanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2N6LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2N6LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDYzYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvY3ouanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjeiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2RhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYjNjMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvZGEuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2RlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NzEwZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvZGUuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJTcGVsbCBDaGVjayB1c2luZyBpZVNwZWxsIjogIkVuZ2xpc2NoZSBSZWNodHNjaHJlaWJrb250cm9sbGUgbWl0IGllU3BlbGwiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJpZVNwZWxsIGNhbiBvbmx5IGJlIHVzZWQgaW4gSW50ZXJuZXQgRXhwbG9yZXIiOiAiaWVTcGVsbCBrYW5uIG51ciBtaXQgZGVtIEludGVybmV0IEV4cGxvcmVyIGJlbnV0enQgd2VyZGVuIiwKKyAgICAgICAgImllU3BlbGwgbm90IGRldGVjdGVkLiAgQ2xpY2sgT2sgdG8gZ28gdG8gZG93bmxvYWQgcGFnZS4iOiAiaWVTcGVsbCB3dXJkZSBuaWNodCBnZWZ1bmRlbi4gRHLDvGNrZW4gc2llIE9rIHVtIGllU3BlY2sgaGVydW50ZXIgenUgbGFkZW4uIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2VlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2VlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZDE5ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvZWUuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2VsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2VsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjM2Q5ODIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvZWwuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2VzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZDAzNWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvZXMuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlcyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2V1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2V1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYWVlNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvZXUuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJldSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2ZhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYWM3YjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvZmEuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2ZpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2ZpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MjJkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvZmkuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2N2Y1YTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvZnIuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2ZyX2NhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2ZyX2NhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZTcxMmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvZnJfY2EuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmcl9jYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2diLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2diLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NjY2MDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvZ2IuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJnYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2hlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYjczYjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvaGUuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJoZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2h1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2h1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZjYyMDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvaHUuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJodSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2l0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NmQ2NDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvaXQuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJpdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MjBjNjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvamEuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJTcGVsbCBDaGVjayB1c2luZyBpZVNwZWxsIjogIuOCueODmuODq+ODgeOCp+ODg+OCr+OBqyBpZVNwZWxsIOOCkuS9v+OBhiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgImllU3BlbGwgY2FuIG9ubHkgYmUgdXNlZCBpbiBJbnRlcm5ldCBFeHBsb3JlciI6ICJpZVNwZWxsIOOBryBJbnRlcm5ldCBFeHBsb3JlciDjgafjga7jgb/kvb/nlKjjgafjgY3jgb7jgZkiLAorICAgICAgICAiaWVTcGVsbCBub3QgZGV0ZWN0ZWQuICBDbGljayBPayB0byBnbyB0byBkb3dubG9hZCBwYWdlLiI6ICJpZVNwZWxsIOOBjOaknOefpeOBleOCjOOBvuOBm+OCk+OBp+OBl+OBn+OAgk9LIOOCkuOCr+ODquODg+OCr+OBl+OBpuODgOOCpuODs+ODreODvOODieODmuODvOOCuOOCkumWi+OBhOOBpuOBj+OBoOOBleOBhOOAgiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQzZmEzNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy9sY19iYXNlLmpzCkBAIC0wLDAgKzEsMjUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLworLy8gTEFORzogImVuIiwgRU5DT0RJTkc6IFVURi04CisvLyBBdXRob3I6IFRyYW5zbGF0b3ItTmFtZSwgPGVtYWlsQGV4YW1wbGUuY29tPgorLy8KKy8vIExhc3QgcmV2aXNpb246IDIwMTgtMDQtMTIKKy8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KKy8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyAoUGxlYXNlLCByZW1vdmUgaW5mb3JtYXRpb24gYmVsb3cpCisvLyBGT1IgVFJBTlNMQVRPUlM6CisvLworLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCisvLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCisvLworLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7CisvLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50CisvLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCisKK3sKKyAgICAiU3BlbGwgQ2hlY2sgdXNpbmcgaWVTcGVsbCI6ICIiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2x0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYmJkMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvbHQuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2x2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL2x2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkODg4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvbHYuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL25iLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOGNlNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvbmIuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJuYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBDTElFTlRTSURFU1BFTExDSEVDSyBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZDBmNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0NsaWVudHNpZGVTcGVsbGNoZWNrL2xhbmcvbmwuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJubCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJTcGVsbCBDaGVjayB1c2luZyBpZVNwZWxsIjogIkVuZ2Vsc2Ugc3BlbGxpbmdzY29udHJvbGUgbWV0IGllU3BlbGwiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJpZVNwZWxsIGNhbiBvbmx5IGJlIHVzZWQgaW4gSW50ZXJuZXQgRXhwbG9yZXIiOiAiaWVTcGVsbCBrYW4gYWxsZWVuIHdvcmRlbiBnZWJydWlrdCBpbiBJbnRlcm5ldCBFeHBsb3JlciIsCisgICAgICAgICJpZVNwZWxsIG5vdCBkZXRlY3RlZC4gIENsaWNrIE9rIHRvIGdvIHRvIGRvd25sb2FkIHBhZ2UuIjogImllU3BlbGwgd2VyZCBuaWV0IGdldm9uZGVuLiBLbGlrIG9wIE9rIG9tIGllU3BlbGwgdGUgZG93bmxvYWRlbiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy9wbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTY4MTVkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL3BsLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicGwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQ0xJRU5UU0lERVNQRUxMQ0hFQ0sgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy9wdF9ici5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy9wdF9ici5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWI3ODU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiU3BlbGwgQ2hlY2sgdXNpbmcgaWVTcGVsbCI6ICJWZXJpZmljYcOnw6NvIE9ydG9ncsOhZmljYSB1dGlsaXphbmRvIGllU3BlbGwiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy9yby5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy9yby5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjEyNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL3JvLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicm8iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQ0xJRU5UU0lERVNQRUxMQ0hFQ0sgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy9ydS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy9ydS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2FhYTI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL3J1LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicnUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQ0xJRU5UU0lERVNQRUxMQ0hFQ0sgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy9zaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy9zaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzVjOTYwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL3NoLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQ0xJRU5UU0lERVNQRUxMQ0hFQ0sgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy9zaS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy9zaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTM1Y2ViCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL3NpLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2kiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQ0xJRU5UU0lERVNQRUxMQ0hFQ0sgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy9zci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy9zci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDhlZWVkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL3NyLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQ0xJRU5UU0lERVNQRUxMQ0hFQ0sgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy9zdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy9zdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTk0MTBkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL3N2LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3YiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQ0xJRU5UU0lERVNQRUxMQ0hFQ0sgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy90aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGUyMzNhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL3RoLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidGgiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQ0xJRU5UU0lERVNQRUxMQ0hFQ0sgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy90ci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy90ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDdmMTZmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQ0xJRU5UU0lERVNQRUxMQ0hFQ0sgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy92bi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy92bi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTZmZWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL3ZuLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidm4iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQ0xJRU5UU0lERVNQRUxMQ0hFQ0sgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy96aF9jbi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvQ2xpZW50c2lkZVNwZWxsY2hlY2svbGFuZy96aF9jbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjU3MDFhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9DbGllbnRzaWRlU3BlbGxjaGVjay9sYW5nL3poX2NuLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiemhfY24iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogQ0xJRU5UU0lERVNQRUxMQ0hFQ0sgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRG91YmxlQ2xpY2svRG91YmxlQ2xpY2suanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0RvdWJsZUNsaWNrL0RvdWJsZUNsaWNrLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZWEwYWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0RvdWJsZUNsaWNrL0RvdWJsZUNsaWNrLmpzCkBAIC0wLDAgKzEsNjIgQEAKKy8vIERvdWJsZSBDbGljayBQbHVnaW4gZm9yIFhpbmhhDQorLy8gSW1wbGVtZW50YXRpb24gYnkgTWFyaWpuIEthbXBmIGh0dHA6Ly93d3cubWFyaWpuLm9yZw0KKy8vIFNwb25zb3JlZCBieSBodHRwOi8vd3d3LnNtaWxpbmctZmFjZXMuY29tDQorLy8NCisvLyAoYykgTWFyaWpuIEthbXBmIDIwMDQuDQorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLg0KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4NCisvLw0KKy8vIEN1dC1uLXBhc3RlIHZlcnNpb24gb2YgZG91YmxlIGNsaWNrIHBsdWdpbi4NCisvLyBBbG1vc3Qgbm8gb3JpZ2luYWwgY29kZSB1c2VkLiBCYXNlZCBvbg0KKy8vIEx1aXMgSFRNTGFyZWEgYW5kIE1paGFpIEJhem9uIENvbnRleHQgTWVudQ0KKy8vDQorLy8NCisvLw0KKw0KK0RvdWJsZUNsaWNrLl9wbHVnaW5JbmZvID0gew0KKyAgbmFtZSAgICAgICAgICA6ICJEb3VibGVDbGljayIsDQorICB2ZXJzaW9uICAgICAgIDogIjEuMSIsDQorICBkZXZlbG9wZXIgICAgIDogIk1hcmlqbiBLYW1wZiIsDQorICBkZXZlbG9wZXJfdXJsIDogImh0dHA6Ly93d3cubWFyaWpuLm9yZyIsDQorICBjX293bmVyICAgICAgIDogIk1hcmlqbiBLYW1wZiIsDQorICBzcG9uc29yICAgICAgIDogInNtaWxpbmctZmFjZXMuY29tIiwNCisgIHNwb25zb3JfdXJsICAgOiAiaHR0cDovL3d3dy5zbWlsaW5nLWZhY2VzLmNvbSIsDQorICBsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIg0KK307DQorDQorZnVuY3Rpb24gRG91YmxlQ2xpY2soZWRpdG9yKSB7DQorICB0aGlzLmVkaXRvciA9IGVkaXRvcjsNCisNCisgIC8vIEFERElORyBDVVNUT00gRE9VQkxFIENMSUNLIEFDVElPTlMNCisgIC8vIGZvcm1hdCBvZiB0aGUgZGJsQ2xpY2tMaXN0IGVsZW1lbnRzIGlzICJUQUdOQU1FOiBbIEFDVElPTiBdIg0KKyAgLy8gICAgLSBUQUdOQU1FOiB0YWduYW1lIG9mIHRoZSB0YWcgdGhhdCBpcyBkb3VibGUgY2xpY2tlZA0KKyAgLy8gICAgLSBBQ1RJT046IGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQuDQorICAvLyAgICAgICAgICAgICAgaXQgaGFzIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOg0KKyAgLy8gICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGVkaXRvciwgZXZlbnQpDQorICAvLyAgICAgICAgICAgICAgLSBlZGl0b3IgaXMgdGhlIFhpbmhhIG9iamVjdCB0aGF0IHRyaWdnZXJlZCB0aGUgY2FsbA0KKyAgLy8gICAgICAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBzZWxlY3RlZCBvYmplY3QNCisgIHRoaXMuZWRpdG9yLmRibENsaWNrTGlzdCA9IHsNCisgICAgLy8gRWRpdCBMaW5rIGRpYWxvZw0KKyAgICBhOiBbIGZ1bmN0aW9uKGUsIHRhcmdldCkge2UuZXhlY0NvbW1hbmQoImNyZWF0ZWxpbmsiLCBmYWxzZSwgdGFyZ2V0KTt9IF0sDQorICAgIC8vIEZvbGxvdyBsaW5rDQorICAgIC8vYTogWyBmdW5jdGlvbihlZGl0b3IsIHRhcmdldCkgeyB3aW5kb3cubG9jYXRpb24gPSB0YXJnZXQuaHJlZjsgcHJvcGVydGllcyh0YXJnZXQpOyB9IF0sDQorDQorICAgIGltZzogWyBmdW5jdGlvbihlKSB7ZS5leGVjQ29tbWFuZCgiaW5zZXJ0aW1hZ2UiKTt9IF0sDQorICAgIHRkOiBbIGZ1bmN0aW9uKGUpIHtlLmV4ZWNDb21tYW5kKCJpbnNlcnR0YWJsZSIpO30gXQ0KKyAgfTsNCit9DQorDQorRG91YmxlQ2xpY2sucHJvdG90eXBlLm9uR2VuZXJhdGUgPSBmdW5jdGlvbigpIHsNCisgIHZhciBzZWxmID0gdGhpczsNCisgIHZhciBjb25maWcgPSB0aGlzLmVkaXRvci5jb25maWc7DQorICBmb3IoIHZhciBpIGluIHRoaXMuZWRpdG9yLmRibENsaWNrTGlzdCApIHsNCisgICAgICBpZiggdHlwZW9mIGkgIT0gJ3N0cmluZycgKSB7DQorCSAgY29udGludWU7DQorICAgICAgfQ0KKyAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5lZGl0b3IuZGJsQ2xpY2tMaXN0W2ldOw0KKyAgICAgIGlmKCB0eXBlb2YgYWN0aW9ucyAhPSAnb2JqZWN0JyApIHsNCisJICBjb250aW51ZTsNCisgICAgICB9DQorICAgICAgdGhpcy5lZGl0b3IuY29uZmlnLmRibGNsaWNrTGlzdFtpXSA9IGFjdGlvbnM7DQorICB9DQorfTsNCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvQ2xhc3Nlcy9FeHRlbmRlZEZpbGVNYW5hZ2VyLnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9DbGFzc2VzL0V4dGVuZGVkRmlsZU1hbmFnZXIucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZTI2N2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvQ2xhc3Nlcy9FeHRlbmRlZEZpbGVNYW5hZ2VyLnBocApAQCAtMCwwICsxLDgxOSBAQAorPD9waHAKKy8qKgorICogRXh0ZW5kZWRGaWxlTWFuYWdlciwgbGlzdCBpbWFnZXMsIGRpcmVjdG9yaWVzLCBhbmQgdGh1bWJuYWlscy4KKyAqIEF1dGhvcnM6IFdlaSBaaHVvLCBBZnJ1LCBLcnp5c3p0b2YgS290b3dpY3osIFJhaW11bmQgTWV5ZXIKKyAqIFZlcnNpb246IFVwZGF0ZWQgb24gMDgtMDEtMjAwNSBieSBBZnJ1CisgKiBWZXJzaW9uOiBVcGRhdGVkIG9uIDA0LTA3LTIwMDYgYnkgS3J6eXN6dG9mIEtvdG93aWN6CisgKiBWZXJzaW9uOiBVcGRhdGVkIG9uIDI5LTEwLTIwMDYgYnkgUmFpbXVuZCBNZXllcgorICogUGFja2FnZTogRXh0ZW5kZWRGaWxlTWFuYWdlciAoRUZNIDEuMS4zKQorICogaHR0cDovL3d3dy5hZnJ1c29mdC5jb20vaHRtbGFyZWEKKyAqLworCisvKioKKyAqIFdlIHVzZSBjbGFzc2VzIGZyb20gSW1hZ2VNYW5hZ2VyIHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb24KKyAqLworcmVxdWlyZV9vbmNlICcuLi9JbWFnZU1hbmFnZXIvQ2xhc3Nlcy9GaWxlcy5waHAnOworCisvKioKKyAqIEV4dGVuZGVkRmlsZU1hbmFnZXIgQ2xhc3MuCisgKiBAYXV0aG9yIFdlaSBaaHVvLCBBZnJ1LCBLcnp5c3p0b2YgS290b3dpY3osIFJhaW11bmQgTWV5ZXIKKyAqIEB2ZXJzaW9uICRJZDogRXh0ZW5kZWRGaWxlTWFuYWdlci5waHAgMTE3MSAyMDA5LTAzLTE5IDIyOjA2OjA5WiByYXkgJAorICovCitjbGFzcyBFeHRlbmRlZEZpbGVNYW5hZ2VyIAoreworCS8qKgorCSAqIENvbmZpZ3VyYXRpb24gYXJyYXkuCisJICovCisJdmFyICRjb25maWc7CisKKwkvKioKKwkgKiBBcnJheSBvZiBkaXJlY3RvcnkgaW5mb3JtYXRpb24uCisJICovCisJdmFyICRkaXJzOworCQorICAgIC8qKgorICAgICAqIE1hbmFnZXIgbW9kZSAtIGltYWdlIHwgbGluaworICAgICAqLworCXZhciAkbW9kZTsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yLiBDcmVhdGUgYSBuZXcgSW1hZ2UgTWFuYWdlciBpbnN0YW5jZS4KKwkgKiBAcGFyYW0gYXJyYXkgJGNvbmZpZyBjb25maWd1cmF0aW9uIGFycmF5LCBzZWUgY29uZmlnLmluYy5waHAKKwkgKi8KKwlmdW5jdGlvbiBFeHRlbmRlZEZpbGVNYW5hZ2VyKCRjb25maWcsICRtb2RlID0gbnVsbCkKKwl7CisJCSR0aGlzLT5jb25maWcgPSAkY29uZmlnOworCQkKKwkJJHRoaXMtPm1vZGUgPSBlbXB0eSgkbW9kZSkgPyAoZW1wdHkoJGNvbmZpZ1snaW5zZXJ0X21vZGUnXSkgPyAnaW1hZ2UnIDogJGNvbmZpZ1snaW5zZXJ0X21vZGUnXSk6ICRtb2RlOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgYmFzZSBkaXJlY3RvcnkuCisJICogQHJldHVybiBzdHJpbmcgYmFzZSBkaXIsIHNlZSBjb25maWcuaW5jLnBocAorCSAqLworCWZ1bmN0aW9uIGdldEltYWdlc0RpcigpCisJeworCQlpZiAoJHRoaXMtPm1vZGUgPT0gJ2xpbmsnICYmIGlzc2V0KCR0aGlzLT5jb25maWdbJ2ZpbGVzX2RpciddKSkKKwkJCVJldHVybiAkdGhpcy0+Y29uZmlnWydmaWxlc19kaXInXTsKKwkJZWxzZSBSZXR1cm4gJHRoaXMtPmNvbmZpZ1snaW1hZ2VzX2RpciddOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgYmFzZSBVUkwuCisJICogQHJldHVybiBzdHJpbmcgYmFzZSB1cmwsIHNlZSBjb25maWcuaW5jLnBocAorCSAqLworCWZ1bmN0aW9uIGdldEltYWdlc1VSTCgpCisJeworCQlpZiAoJHRoaXMtPm1vZGUgPT0gJ2xpbmsnICYmIGlzc2V0KCR0aGlzLT5jb25maWdbJ2ZpbGVzX3VybCddKSkKKwkJCQlSZXR1cm4gJHRoaXMtPmNvbmZpZ1snZmlsZXNfdXJsJ107CisJCWVsc2UgUmV0dXJuICR0aGlzLT5jb25maWdbJ2ltYWdlc191cmwnXTsKKwl9CisKKwlmdW5jdGlvbiBpc1ZhbGlkQmFzZSgpCisJeworCQlyZXR1cm4gaXNfZGlyKCR0aGlzLT5nZXRJbWFnZXNEaXIoKSk7CisJfQorCisJLyoqCisJICogR2V0IHRoZSB0bXAgZmlsZSBwcmVmaXguCisgICAgICogQHJldHVybiBzdHJpbmcgdG1wIGZpbGUgcHJlZml4LgorCSAqLworCWZ1bmN0aW9uIGdldFRtcFByZWZpeCgpIAorCXsKKwkJUmV0dXJuICR0aGlzLT5jb25maWdbJ3RtcF9wcmVmaXgnXTsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIHN1YiBkaXJlY3RvcmllcyBpbiB0aGUgYmFzZSBkaXIuCisJICogRWFjaCBhcnJheSBlbGVtZW50IGNvbnRhaW4KKwkgKiB0aGUgcmVsYXRpdmUgcGF0aCAocmVsYXRpdmUgdG8gdGhlIGJhc2UgZGlyKSBhcyBrZXkgYW5kIHRoZSAKKwkgKiBmdWxsIHBhdGggYXMgdmFsdWUuCisJICogQHJldHVybiBhcnJheSBvZiBzdWIgZGlyZWN0cmllcworCSAqIDxjb2RlPmFycmF5KCdwYXRoIG5hbWUnID0+ICdmdWxsIGRpcmVjdG9yeSBwYXRoJywgLi4uKTwvY29kZT4KKwkgKi8KKwlmdW5jdGlvbiBnZXREaXJzKCkgCisJeworCQlpZihpc19udWxsKCR0aGlzLT5kaXJzKSkKKwkJeworCQkJJGRpcnMgPSAkdGhpcy0+X2RpcnMoJHRoaXMtPmdldEltYWdlc0RpcigpLCcvJyk7CisJCQlrc29ydCgkZGlycyk7CisJCQkkdGhpcy0+ZGlycyA9ICRkaXJzOworCQl9CisJCXJldHVybiAkdGhpcy0+ZGlyczsKKwl9CisKKwkvKioKKwkgKiBSZWN1cnNpdmVseSB0cmF2ZXNlIHRoZSBkaXJlY3RvcmllcyB0byBnZXQgYSBsaXN0CisJICogb2YgYWNjZXNzYWJsZSBkaXJlY3Rvcmllcy4KKwkgKiBAcGFyYW0gc3RyaW5nICRiYXNlIHRoZSBmdWxsIHBhdGggdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CisJICogQHBhcmFtIHN0cmluZyAkcGF0aCB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lCisJICogQHJldHVybiBhcnJheSBvZiBhY2Nlc3NpYWJsZSBzdWItZGlyZWN0b3JpZXMKKwkgKiA8Y29kZT5hcnJheSgncGF0aCBuYW1lJyA9PiAnZnVsbCBkaXJlY3RvcnkgcGF0aCcsIC4uLik8L2NvZGU+CisJICovCisJZnVuY3Rpb24gX2RpcnMoJGJhc2UsICRwYXRoKSAKKwl7CisJCSRiYXNlID0gRmlsZXM6OmZpeFBhdGgoJGJhc2UpOworCQkkZGlycyA9IGFycmF5KCk7CisKKwkJaWYoJHRoaXMtPmlzVmFsaWRCYXNlKCkgPT0gZmFsc2UpCisJCQlyZXR1cm4gJGRpcnM7CisKKwkJJGQgPSBAZGlyKCRiYXNlKTsKKwkJCisJCXdoaWxlIChmYWxzZSAhPT0gKCRlbnRyeSA9ICRkLT5yZWFkKCkpKSAKKwkJeworCQkJLy9JZiBpdCBpcyBhIGRpcmVjdG9yeSwgYW5kIGl0IGRvZXNuJ3Qgc3RhcnQgd2l0aAorCQkJLy8gYSBkb3QsIGFuZCBpZiBpcyBpdCBub3QgdGhlIHRodW1ibmFpbCBkaXJlY3RvcnkKKwkJCWlmKGlzX2RpcigkYmFzZS4kZW50cnkpIAorCQkJCSYmIHN1YnN0cigkZW50cnksMCwxKSAhPSAnLicKKwkJCQkmJiAkdGhpcy0+aXNUaHVtYkRpcigkZW50cnkpID09IGZhbHNlKSAKKwkJCXsKKwkJCQkkcmVsYXRpdmUgPSBGaWxlczo6Zml4UGF0aCgkcGF0aC4kZW50cnkpOworCQkJCSRmdWxscGF0aCA9IEZpbGVzOjpmaXhQYXRoKCRiYXNlLiRlbnRyeSk7CisJCQkJJGRpcnNbJHJlbGF0aXZlXSA9ICRmdWxscGF0aDsKKwkJCQkkZGlycyA9IGFycmF5X21lcmdlKCRkaXJzLCAkdGhpcy0+X2RpcnMoJGZ1bGxwYXRoLCAkcmVsYXRpdmUpKTsKKwkJCX0KKwkJfQorCQkkZC0+Y2xvc2UoKTsKKworCQlSZXR1cm4gJGRpcnM7CisJfQorCisJLyoqCisJICogR2V0IGFsbCB0aGUgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIG9mIGEgcmVsYXRpdmUgcGF0aC4KKwkgKiBAcGFyYW0gc3RyaW5nICRwYXRoIHJlbGF0aXZlIHBhdGggdG8gYmUgYmFzZSBwYXRoLgorCSAqIEByZXR1cm4gYXJyYXkgb2YgZmlsZSBhbmQgcGF0aCBpbmZvcm1hdGlvbi4KKwkgKiA8Y29kZT5hcnJheSgwPT5hcnJheSgncmVsYXRpdmUnPT4nZnVsbHBhdGgnLC4uLiksIDE9PmFycmF5KCdmaWxlbmFtZSc9PmZpbGVpbmZvIGFycmF5KCksLi4uKTwvY29kZT4KKwkgKiBmaWxlaW5mbyBhcnJheTogPGNvZGU+YXJyYXkoJ3VybCc9PidmdWxsIHVybCcsIAorCSAqICAgICAgICAgICAgICAgICAgICAgICAncmVsYXRpdmUnPT4ncmVsYXRpdmUgdG8gYmFzZScsIAorCSAqICAgICAgICAgICAgICAgICAgICAgICAgJ2Z1bGxwYXRoJz0+J2Z1bGwgZmlsZSBwYXRoJywgCisJICogICAgICAgICAgICAgICAgICAgICAgICAnaW1hZ2UnPT5pbWFnZUluZm8gYXJyYXkoKSBmYWxzZSBpZiBub3QgaW1hZ2UsCisJICogICAgICAgICAgICAgICAgICAgICAgICAnc3RhdCcgPT4gZmlsZXN0YXQpPC9jb2RlPgorCSAqLworCWZ1bmN0aW9uIGdldEZpbGVzKCRwYXRoKSAKKwl7CisJCSRmaWxlcyA9IGFycmF5KCk7CisJCSRkaXJzID0gYXJyYXkoKTsKKworICAgICAgICAkdmFsaWRfZXh0ZW5zaW9ucyA9ICR0aGlzLT5tb2RlID09ICdpbWFnZScgPyAkdGhpcy0+Y29uZmlnWydhbGxvd2VkX2ltYWdlX2V4dGVuc2lvbnMnXSA6ICR0aGlzLT5jb25maWdbJ2FsbG93ZWRfbGlua19leHRlbnNpb25zJ107CisKKwkJaWYoJHRoaXMtPmlzVmFsaWRCYXNlKCkgPT0gZmFsc2UpCisJCQlyZXR1cm4gYXJyYXkoJGZpbGVzLCRkaXJzKTsKKworCQkkcGF0aCA9IEZpbGVzOjpmaXhQYXRoKCRwYXRoKTsKKwkJJGJhc2UgPSBGaWxlczo6Zml4UGF0aCgkdGhpcy0+Z2V0SW1hZ2VzRGlyKCkpOworCQkkZnVsbHBhdGggPSBGaWxlczo6bWFrZVBhdGgoJGJhc2UsJHBhdGgpOworCisKKwkJJGQgPSBAZGlyKCRmdWxscGF0aCk7CisJCQorCQl3aGlsZSAoZmFsc2UgIT09ICgkZW50cnkgPSAkZC0+cmVhZCgpKSkgCisJCXsKKwkJCS8vbm90IGEgZG90IGZpbGUgb3IgZGlyZWN0b3J5CisJCQlpZihzdWJzdHIoJGVudHJ5LDAsMSkgIT0gJy4nKQorCQkJeworCQkJCWlmKGlzX2RpcigkZnVsbHBhdGguJGVudHJ5KQorCQkJCQkmJiAkdGhpcy0+aXNUaHVtYkRpcigkZW50cnkpID09IGZhbHNlKQorCQkJCXsKKwkJCQkJJHJlbGF0aXZlID0gRmlsZXM6OmZpeFBhdGgoJHBhdGguJGVudHJ5KTsKKwkJCQkJJGZ1bGwgPSBGaWxlczo6Zml4UGF0aCgkZnVsbHBhdGguJGVudHJ5KTsKKwkJCQkJJGNvdW50ID0gJHRoaXMtPmNvdW50RmlsZXMoJGZ1bGwpOworCQkJCQkkZGlyc1skcmVsYXRpdmVdID0gYXJyYXkoJ2Z1bGxwYXRoJz0+JGZ1bGwsJ2VudHJ5Jz0+JGVudHJ5LCdjb3VudCc9PiRjb3VudCwgJ3N0YXQnPT5zdGF0KCRmdWxscGF0aC4kZW50cnkpKTsKKwkJCQl9CisKKwkJCQllbHNlIGlmKGlzX2ZpbGUoJGZ1bGxwYXRoLiRlbnRyeSkgJiYgJHRoaXMtPmlzVGh1bWIoJGVudHJ5KT09ZmFsc2UgJiYgJHRoaXMtPmlzVG1wRmlsZSgkZW50cnkpID09IGZhbHNlKSAKKwkJCQl7CisJCQkJCSRhZnJ1ZXh0ID0gc3RydG9sb3dlcihzdWJzdHIoc3RycmNocigkZW50cnksICIuIiksIDEpKTsKKworICAgICAgICAgICAgICAgICAgICBpZihpbl9hcnJheSgkYWZydWV4dCwkdmFsaWRfZXh0ZW5zaW9ucykpCisJCQkJCXsKKworCQkJCQkJJGZpbGVbJ3VybCddID0gRmlsZXM6Om1ha2VQYXRoKCR0aGlzLT5jb25maWdbJ2Jhc2VfdXJsJ10sJHBhdGgpLiRlbnRyeTsKKwkJCQkJCSRmaWxlWydyZWxhdGl2ZSddID0gJHBhdGguJGVudHJ5OworCQkJCQkJJGZpbGVbJ2Z1bGxwYXRoJ10gPSAkZnVsbHBhdGguJGVudHJ5OworCQkJCQkJJGltZyA9ICR0aGlzLT5nZXRJbWFnZUluZm8oJGZ1bGxwYXRoLiRlbnRyeSk7CisJCQkJCQlpZighaXNfYXJyYXkoJGltZykpICRpbWdbMF09JGltZ1sxXT0wOworCQkJCQkJJGZpbGVbJ2ltYWdlJ10gPSAkaW1nOworCQkJCQkJJGZpbGVbJ3N0YXQnXSA9IHN0YXQoJGZ1bGxwYXRoLiRlbnRyeSk7CisJCQkJCQkkZmlsZVsnZXh0J10gPSAkYWZydWV4dDsKKwkJCQkJCSRmaWxlc1skZW50cnldID0gJGZpbGU7CisJCQkJCX0KKworCQkJCX0KKwkJCX0KKwkJfQorCQkkZC0+Y2xvc2UoKTsKKwkJa3NvcnQoJGRpcnMpOworCQlrc29ydCgkZmlsZXMpOworCQkKKwkJUmV0dXJuIGFycmF5KCRkaXJzLCAkZmlsZXMpOworCX0JCisKKwkvKioKKwkgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBpbiBhIGdpdmVuIGZvbGRlcgorCSAqIG1pbnVzIHRoZSB0aHVtYm5haWwgZm9sZGVycyBhbmQgdGh1bWJuYWlscy4KKwkgKi8KKwlmdW5jdGlvbiBjb3VudEZpbGVzKCRwYXRoKSAKKwl7CisJCSR0b3RhbCA9IDA7CisKKwkJaWYoaXNfZGlyKCRwYXRoKSkgCisJCXsKKwkJCSRkID0gQGRpcigkcGF0aCk7CisKKwkJCXdoaWxlIChmYWxzZSAhPT0gKCRlbnRyeSA9ICRkLT5yZWFkKCkpKSAKKwkJCXsKKwkJCQkvL2VjaG8gJGVudHJ5LiI8YnI+IjsKKwkJCQlpZihzdWJzdHIoJGVudHJ5LDAsMSkgIT0gJy4nCisJCQkJCSYmICR0aGlzLT5pc1RodW1iRGlyKCRlbnRyeSkgPT0gZmFsc2UKKwkJCQkJJiYgJHRoaXMtPmlzVG1wRmlsZSgkZW50cnkpID09IGZhbHNlCisJCQkJCSYmICR0aGlzLT5pc1RodW1iKCRlbnRyeSkgPT0gZmFsc2UpIAorCQkJCXsKKwkJCQkJJHRvdGFsKys7CisJCQkJfQorCQkJfQorCQkJJGQtPmNsb3NlKCk7CisJCX0KKwkJcmV0dXJuICR0b3RhbDsKKwl9CisKKwkvKioKKwkgKiBHZXQgaW1hZ2Ugc2l6ZSBpbmZvcm1hdGlvbi4KKwkgKiBAcGFyYW0gc3RyaW5nICRmaWxlIHRoZSBpbWFnZSBmaWxlCisJICogQHJldHVybiBhcnJheSBvZiBnZXRJbWFnZVNpemUgaW5mb3JtYXRpb24sIAorCSAqICBmYWxzZSBpZiB0aGUgZmlsZSBpcyBub3QgYW4gaW1hZ2UuCisJICovCisJZnVuY3Rpb24gZ2V0SW1hZ2VJbmZvKCRmaWxlKSAKKwl7CisJCVJldHVybiBAZ2V0SW1hZ2VTaXplKCRmaWxlKTsKKwl9CisKKwkvKioKKwkgKiBDaGVjayBpZiB0aGUgZmlsZSBjb250YWlucyB0aGUgdGh1bWJuYWlsIHByZWZpeC4KKwkgKiBAcGFyYW0gc3RyaW5nICRmaWxlIGZpbGVuYW1lIHRvIGJlIGNoZWNrZWQKKwkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGZpbGUgY29udGFpbnMgdGhlIHRodW1ibmFpbCBwcmVmaXgsIGZhbHNlIG90aGVyd2lzZS4KKwkgKi8KKwlmdW5jdGlvbiBpc1RodW1iKCRmaWxlKSAKKwl7CisJCSRsZW4gPSBzdHJsZW4oJHRoaXMtPmNvbmZpZ1sndGh1bWJuYWlsX3ByZWZpeCddKTsKKwkJaWYoc3Vic3RyKCRmaWxlLDAsJGxlbik9PSR0aGlzLT5jb25maWdbJ3RodW1ibmFpbF9wcmVmaXgnXSkKKwkJCVJldHVybiB0cnVlOworCQllbHNlCisJCQlSZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogQ2hlY2sgaWYgdGhlIGdpdmVuIGRpcmVjdG9yeSBpcyBhIHRodW1ibmFpbCBkaXJlY3RvcnkuCisJICogQHBhcmFtIHN0cmluZyAkZW50cnkgZGlyZWN0b3J5IG5hbWUKKwkgKiBAcmV0dXJuIHRydWUgaWYgaXQgaXMgYSB0aHVtYm5haWwgZGlyZWN0b3J5LCBmYWxzZSBvdGhlcndpc2UKKwkgKi8KKwlmdW5jdGlvbiBpc1RodW1iRGlyKCRlbnRyeSkgCisJeworCQlpZigkdGhpcy0+Y29uZmlnWyd0aHVtYm5haWxfZGlyJ10gPT0gZmFsc2UKKwkJCXx8IHN0cmxlbih0cmltKCR0aGlzLT5jb25maWdbJ3RodW1ibmFpbF9kaXInXSkpID09IDApCisJCQlSZXR1cm4gZmFsc2U7CQkKKwkJZWxzZQorCQkJUmV0dXJuICgkZW50cnkgPT0gJHRoaXMtPmNvbmZpZ1sndGh1bWJuYWlsX2RpciddKTsKKwl9CisKKwkvKioKKwkgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gZmlsZSBpcyBhIHRtcCBmaWxlLgorCSAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgZmlsZSBuYW1lCisJICogQHJldHVybiBib29sZWFuIHRydWUgaWYgaXQgaXMgYSB0bXAgZmlsZSwgZmFsc2Ugb3RoZXJ3aXNlCisJICovCisJZnVuY3Rpb24gaXNUbXBGaWxlKCRmaWxlKSAKKwl7CisJCSRsZW4gPSBzdHJsZW4oJHRoaXMtPmNvbmZpZ1sndG1wX3ByZWZpeCddKTsKKwkJaWYoc3Vic3RyKCRmaWxlLDAsJGxlbik9PSR0aGlzLT5jb25maWdbJ3RtcF9wcmVmaXgnXSkKKwkJCVJldHVybiB0cnVlOworCQllbHNlCisJCQlSZXR1cm4gZmFsc2U7CSAJCisJfQorCisJLyoqCisJICogRm9yIGEgZ2l2ZW4gaW1hZ2UgZmlsZSwgZ2V0IHRoZSByZXNwZWN0aXZlIHRodW1ibmFpbCBmaWxlbmFtZQorCSAqIG5vIGZpbGUgZXhpc3RlbmNlIGNoZWNrIGlzIGRvbmUuCisJICogQHBhcmFtIHN0cmluZyAkZnVsbHBhdGhmaWxlIHRoZSBmdWxsIHBhdGggdG8gdGhlIGltYWdlIGZpbGUKKwkgKiBAcmV0dXJuIHN0cmluZyBvZiB0aGUgdGh1bWJuYWlsIGZpbGUKKwkgKi8KKwlmdW5jdGlvbiBnZXRUaHVtYk5hbWUoJGZ1bGxwYXRoZmlsZSkgCisJeworCQkkcGF0aF9wYXJ0cyA9IHBhdGhpbmZvKCRmdWxscGF0aGZpbGUpOworCQkKKwkJJHRodW1ibmFpbCA9ICR0aGlzLT5jb25maWdbJ3RodW1ibmFpbF9wcmVmaXgnXS4kcGF0aF9wYXJ0c1snYmFzZW5hbWUnXTsKKworCQlpZigkdGhpcy0+Y29uZmlnWydzYWZlX21vZGUnXSA9PSB0cnVlCisJCQl8fCBzdHJsZW4odHJpbSgkdGhpcy0+Y29uZmlnWyd0aHVtYm5haWxfZGlyJ10pKSA9PSAwKQorCQl7CisJCQlSZXR1cm4gRmlsZXM6Om1ha2VGaWxlKCRwYXRoX3BhcnRzWydkaXJuYW1lJ10sJHRodW1ibmFpbCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZihzdHJsZW4odHJpbSgkdGhpcy0+Y29uZmlnWyd0aHVtYm5haWxfZGlyJ10pKSA+IDApCisJCQl7CisJCQkJJHBhdGggPSBGaWxlczo6bWFrZVBhdGgoJHBhdGhfcGFydHNbJ2Rpcm5hbWUnXSwkdGhpcy0+Y29uZmlnWyd0aHVtYm5haWxfZGlyJ10pOworCQkJCWlmKCFpc19kaXIoJHBhdGgpKQorCQkJCQlGaWxlczo6Y3JlYXRlRm9sZGVyKCRwYXRoKTsKKwkJCQlSZXR1cm4gRmlsZXM6Om1ha2VGaWxlKCRwYXRoLCR0aHVtYm5haWwpOworCQkJfQorCQkJZWxzZSAvL3Nob3VsZCB0aGlzIGV2ZXIgaGFwcGVuPworCQkJeworCQkJCS8vZXJyb3JfbG9nKCdFeHRlbmRlZEZpbGVNYW5hZ2VyOiBFcnJvciBpbiBjcmVhdGluZyB0aHVtYm5haWwgbmFtZScpOworCQkJfQorCQl9CisJfQorCQorCS8qKgorCSAqIFNpbWlsYXIgdG8gZ2V0VGh1bWJOYW1lLCBidXQgcmV0dXJucyB0aGUgVVJMLCBiYXNlIG9uIHRoZQorCSAqIGdpdmVuIGJhc2VfdXJsIGluIGNvbmZpZy5pbmMucGhwCisJICogQHBhcmFtIHN0cmluZyAkcmVsYXRpdmUgdGhlIHJlbGF0aXZlIGltYWdlIGZpbGUgbmFtZSwgCisJICogcmVsYXRpdmUgdG8gdGhlIGJhc2VfZGlyIHBhdGgKKwkgKiBAcmV0dXJuIHN0cmluZyB0aGUgdXJsIG9mIHRoZSB0aHVtYm5haWwKKwkgKi8KKwlmdW5jdGlvbiBnZXRUaHVtYlVSTCgkcmVsYXRpdmUpIAorCXsKKwkJJHBhdGhfcGFydHMgPSBwYXRoaW5mbygkcmVsYXRpdmUpOworCQkkdGh1bWJuYWlsID0gJHRoaXMtPmNvbmZpZ1sndGh1bWJuYWlsX3ByZWZpeCddLiRwYXRoX3BhcnRzWydiYXNlbmFtZSddOworCQlpZigkcGF0aF9wYXJ0c1snZGlybmFtZSddPT0nXFwnKSAkcGF0aF9wYXJ0c1snZGlybmFtZSddPScvJzsKKworCQlpZigkdGhpcy0+Y29uZmlnWydzYWZlX21vZGUnXSA9PSB0cnVlCisJCQl8fCBzdHJsZW4odHJpbSgkdGhpcy0+Y29uZmlnWyd0aHVtYm5haWxfZGlyJ10pKSA9PSAwKQorCQl7CisJCQlSZXR1cm4gRmlsZXM6Om1ha2VGaWxlKCR0aGlzLT5nZXRJbWFnZXNVUkwoKSwkdGh1bWJuYWlsKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmKHN0cmxlbih0cmltKCR0aGlzLT5jb25maWdbJ3RodW1ibmFpbF9kaXInXSkpID4gMCkKKwkJCXsKKwkJCQkkcGF0aCA9IEZpbGVzOjptYWtlUGF0aCgkcGF0aF9wYXJ0c1snZGlybmFtZSddLCR0aGlzLT5jb25maWdbJ3RodW1ibmFpbF9kaXInXSk7CisJCQkJJHVybF9wYXRoID0gRmlsZXM6Om1ha2VQYXRoKCR0aGlzLT5nZXRJbWFnZXNVUkwoKSwgJHBhdGgpOworCQkJCVJldHVybiBGaWxlczo6bWFrZUZpbGUoJHVybF9wYXRoLCR0aHVtYm5haWwpOworCQkJfQorCQkJZWxzZSAvL3Nob3VsZCB0aGlzIGV2ZXIgaGFwcGVuPworCQkJeworCQkJCS8vZXJyb3JfbG9nKCdFeHRlbmRlZEZpbGVNYW5hZ2VyOiBFcnJvciBpbiBjcmVhdGluZyB0aHVtYm5haWwgdXJsJyk7CisJCQl9CisKKwkJfQorCX0KKworICAgLyoqCisgICAgKiBGb3IgYSBnaXZlbiBpbWFnZSBmaWxlLCBnZXQgdGhlIHJlc3BlY3RpdmUgcmVzaXplZCBmaWxlbmFtZQorICAgICogbm8gZmlsZSBleGlzdGVuY2UgY2hlY2sgaXMgZG9uZS4KKyAgICAqIEBwYXJhbSBzdHJpbmcgJGZ1bGxwYXRoZmlsZSB0aGUgZnVsbCBwYXRoIHRvIHRoZSBpbWFnZSBmaWxlCisgICAgKiBAcGFyYW0gaW50ZWdlciAkd2lkdGggdGhlIGludGVuZGVkIHdpZHRoCisgICAgKiBAcGFyYW0gaW50ZWdlciAkaGVpZ2h0IHRoZSBpbnRlbmRlZCBoZWlnaHQKKyAgICAqIEBwYXJhbSBib29sZWFuICRta0RpciB3aGV0aGVyIHRvIGF0dGVtcHQgdG8gbWFrZSB0aGUgcmVzaXplZF9kaXIgaWYgaXQgZG9lc24ndCBleGlzdAorICAgICogQHJldHVybiBzdHJpbmcgb2YgdGhlIHJlc2l6ZWQgZmlsZW5hbWUKKyAgICAqLworCWZ1bmN0aW9uIGdldFJlc2l6ZWROYW1lKCRmdWxscGF0aGZpbGUsICR3aWR0aCwgJGhlaWdodCwgJG1rRGlyID0gVFJVRSkKKwl7CisJCSRwYXRoX3BhcnRzID0gcGF0aGluZm8oJGZ1bGxwYXRoZmlsZSk7CisKKwkJJHRodW1ibmFpbCA9ICR0aGlzLT5jb25maWdbJ3Jlc2l6ZWRfcHJlZml4J10uIl97JHdpZHRofXh7JGhlaWdodH1feyRwYXRoX3BhcnRzWydiYXNlbmFtZSddfSI7CisKKwkJaWYoIHN0cmxlbih0cmltKCR0aGlzLT5jb25maWdbJ3Jlc2l6ZWRfZGlyJ10pKSA9PSAwIHx8ICR0aGlzLT5jb25maWdbJ3NhZmVfbW9kZSddID09IHRydWUgKQorCQl7CisJCQlSZXR1cm4gRmlsZXM6Om1ha2VGaWxlKCRwYXRoX3BhcnRzWydkaXJuYW1lJ10sJHRodW1ibmFpbCk7CisJCX0KKwkJZWxzZQorCQl7CisgICAgICAkcGF0aCA9IEZpbGVzOjptYWtlUGF0aCgkcGF0aF9wYXJ0c1snZGlybmFtZSddLCR0aGlzLT5jb25maWdbJ3Jlc2l6ZWRfZGlyJ10pOworICAgICAgaWYoJG1rRGlyICYmICFpc19kaXIoJHBhdGgpKQorICAgICAgICBGaWxlczo6Y3JlYXRlRm9sZGVyKCRwYXRoKTsKKyAgICAgIFJldHVybiBGaWxlczo6bWFrZUZpbGUoJHBhdGgsJHRodW1ibmFpbCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gcGF0aCBpcyBwYXJ0IG9mIHRoZSBzdWJkaXJlY3RvcmllcworCSAqIHVuZGVyIHRoZSBiYXNlX2Rpci4KKwkgKiBAcGFyYW0gc3RyaW5nICRwYXRoIHRoZSByZWxhdGl2ZSBwYXRoIHRvIGJlIGNoZWNrZWQKKwkgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgcGF0aCBleGlzdHMsIGZhbHNlIG90aGVyd2lzZQorCSAqLworCWZ1bmN0aW9uIHZhbGlkUmVsYXRpdmVQYXRoKCRwYXRoKSAKKwl7CisJCSRkaXJzID0gJHRoaXMtPmdldERpcnMoKTsKKwkJaWYoJHBhdGggPT0gJy8nKQorCQkJUmV0dXJuIHRydWU7CisJCS8vY2hlY2sgdGhlIHBhdGggZ2l2ZW4gaW4gdGhlIHVybCBhZ2FpbnN0IHRoZSAKKwkJLy9saXN0IG9mIHBhdGhzIGluIHRoZSBzeXN0ZW0uCisJCWZvcigkaSA9IDA7ICRpIDwgY291bnQoJGRpcnMpOyAkaSsrKQorCQl7CisJCQkka2V5ID0ga2V5KCRkaXJzKTsKKwkJCS8vd2UgZm91bmQgdGhlIHBhdGgKKwkJCWlmKCRrZXkgPT0gJHBhdGgpCisJCQkJUmV0dXJuIHRydWU7CisJCQorCQkJbmV4dCgkZGlycyk7CisJCX0JCQorCQlSZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogUHJvY2VzcyB1cGxvYWRlZCBmaWxlcywgYXNzdW1lcyB0aGUgZmlsZSBpcyBpbiAKKwkgKiAkX0ZJTEVTWyd1cGxvYWQnXSBhbmQgJF9QT1NUWydkaXInXSBpcyBzZXQuCisJICogVGhlIGRpciBtdXN0IGJlIHJlbGF0aXZlIHRvIHRoZSBiYXNlX2RpciBhbmQgZXhpc3RzLgorCSAqIEByZXR1cm4gbnVsbAorCSAqLworCWZ1bmN0aW9uIHByb2Nlc3NVcGxvYWRzKCkgCisJeworCQlpZigkdGhpcy0+aXNWYWxpZEJhc2UoKSA9PSBmYWxzZSkKKwkJCXJldHVybjsKKworCQkkcmVsYXRpdmUgPSBudWxsOworCisJCWlmKGlzc2V0KCRfUE9TVFsnZGlyJ10pKSAKKwkJCSRyZWxhdGl2ZSA9IHJhd3VybGRlY29kZSgkX1BPU1RbJ2RpciddKTsKKwkJZWxzZQorCQkJcmV0dXJuOworCisJCS8vY2hlY2sgZm9yIHRoZSBmaWxlLCBhbmQgbXVzdCBoYXZlIHZhbGlkIHJlbGF0aXZlIHBhdGgKKwkJaWYoaXNzZXQoJF9GSUxFU1sndXBsb2FkJ10pICYmICR0aGlzLT52YWxpZFJlbGF0aXZlUGF0aCgkcmVsYXRpdmUpKQorCQl7CisJCQlSZXR1cm4gJHRoaXMtPl9wcm9jZXNzRmlsZXMoJHJlbGF0aXZlLCAkX0ZJTEVTWyd1cGxvYWQnXSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBQcm9jZXNzIHVwbG9hZCBmaWxlcy4gVGhlIGZpbGUgbXVzdCBiZSBhbiAKKwkgKiB1cGxvYWRlZCBmaWxlLiBBbnkgZHVwbGljYXRlCisJICogZmlsZSB3aWxsIGJlIHJlbmFtZWQuIFNlZSBGaWxlczo6Y29weUZpbGUgZm9yIGRldGFpbHMKKwkgKiBvbiByZW5hbWluZy4KKwkgKiBAcGFyYW0gc3RyaW5nICRyZWxhdGl2ZSB0aGUgcmVsYXRpdmUgcGF0aCB3aGVyZSB0aGUgZmlsZQorCSAqIHNob3VsZCBiZSBjb3BpZWQgdG8uCisJICogQHBhcmFtIGFycmF5ICRmaWxlIHRoZSB1cGxvYWRlZCBmaWxlIGZyb20gJF9GSUxFUworCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoZSBmaWxlIHdhcyBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5LCAKKwkgKiBmYWxzZSBvdGhlcndpc2UKKwkgKi8KKwlmdW5jdGlvbiBfcHJvY2Vzc0ZpbGVzKCRyZWxhdGl2ZSwgJGZpbGUpCisJeworCQkKKwkJaWYoJGZpbGVbJ2Vycm9yJ10hPTApCisJCXsKKwkJCVJldHVybiBmYWxzZTsKKwkJfQorCisJCWlmKCFpc191cGxvYWRlZF9maWxlKCRmaWxlWyd0bXBfbmFtZSddKSkKKwkJeworCQkJRmlsZXM6OmRlbEZpbGUoJGZpbGVbJ3RtcF9uYW1lJ10pOworCQkJUmV0dXJuIGZhbHNlOworCQl9CisKKyAgICAgICAgJHZhbGlkX2V4dGVuc2lvbnMgPSAkdGhpcy0+bW9kZSA9PSAnaW1hZ2UnID8gJHRoaXMtPmNvbmZpZ1snYWxsb3dlZF9pbWFnZV9leHRlbnNpb25zJ10gOiAkdGhpcy0+Y29uZmlnWydhbGxvd2VkX2xpbmtfZXh0ZW5zaW9ucyddOworICAgICAgICAkbWF4X3NpemUgPSAkdGhpcy0+bW9kZSA9PSAnaW1hZ2UnID8gJHRoaXMtPmNvbmZpZ1snbWF4X2ZpbGVzaXplX2tiX2ltYWdlJ10gOiAkdGhpcy0+Y29uZmlnWydtYXhfZmlsZXNpemVfa2JfbGluayddOworCQkkYWZydWV4dCA9IHN0cnRvbG93ZXIoc3Vic3RyKHN0cnJjaHIoJGZpbGVbJ25hbWUnXSwgIi4iKSwgMSkpOworCisJCWlmKCFpbl9hcnJheSgkYWZydWV4dCwgJHZhbGlkX2V4dGVuc2lvbnMpKQorCQl7CisJCQlGaWxlczo6ZGVsRmlsZSgkZmlsZVsndG1wX25hbWUnXSk7CisJCQlSZXR1cm4gJ0Nhbm5vdCB1cGxvYWQgJGV4dGVuc2lvbj0nLiRhZnJ1ZXh0LickIEZpbGVzLiBQZXJtaXNzaW9uIGRlbmllZC4nOworCQl9CisKKwkJaWYoJGZpbGVbJ3NpemUnXT4oJG1heF9zaXplKjEwMjQpKQorCQl7CisJCQlGaWxlczo6ZGVsRmlsZSgkZmlsZVsndG1wX25hbWUnXSk7CisJCQlSZXR1cm4gJ1VuYmxlIHRvIHVwbG9hZCBmaWxlLiBNYXhpbXVtIGZpbGUgc2l6ZSBbJG1heF9zaXplPScuJG1heF9zaXplLickIEtCXSBleGNlZWRlZC4nOworCQl9CisKKwkJaWYoIWVtcHR5KCR0aGlzLT5jb25maWdbJ21heF9mb2xkZXJzaXplX21iJ10pICYmICAoRmlsZXM6OmRpclNpemUoJHRoaXMtPmdldEltYWdlc0RpcigpKSkrJGZpbGVbJ3NpemUnXT4gKCR0aGlzLT5jb25maWdbJ21heF9mb2xkZXJzaXplX21iJ10qMTA0ODU3NikpCisJCXsKKwkJCUZpbGVzOjpkZWxGaWxlKCRmaWxlWyd0bXBfbmFtZSddKTsKKwkJCVJldHVybiAoIkNhbm5vdCB1cGxvYWQuIE1heGltdW0gZm9sZGVyIHNpemUgcmVhY2hlZC4gRGVsZXRlIHVud2FudGVkIGZpbGVzIGFuZCB0cnkgYWdhaW4uIik7CisJCX0KKworCQkvL25vdyBjb3B5IHRoZSBmaWxlCisJCSRwYXRoID0gRmlsZXM6Om1ha2VQYXRoKCR0aGlzLT5nZXRJbWFnZXNEaXIoKSwkcmVsYXRpdmUpOworCQkkcmVzdWx0ID0gRmlsZXM6OmNvcHlGaWxlKCRmaWxlWyd0bXBfbmFtZSddLCAkcGF0aCwgJGZpbGVbJ25hbWUnXSk7CisKKwkJLy9ubyBjb3B5IGVycm9yCisJCWlmKCFpc19pbnQoJHJlc3VsdCkpCisJCXsKKwkJCUZpbGVzOjpkZWxGaWxlKCRmaWxlWyd0bXBfbmFtZSddKTsKKwkJCVJldHVybiAnRmlsZSAiJGZpbGU9Jy4kZmlsZVsnbmFtZSddLickIiBzdWNjZXNzZnVsbHkgdXBsb2FkZWQuJzsKKwkJfQorCisJCS8vZGVsZXRlIHRtcCBmaWxlcy4KKwkJRmlsZXM6OmRlbEZpbGUoJGZpbGVbJ3RtcF9uYW1lJ10pOworCQlSZXR1cm4gZmFsc2U7CisKKwl9CisKKworCWZ1bmN0aW9uIGdldERpc2tJbmZvKCkKKwl7CisgICAgICAgIGlmIChlbXB0eSgkdGhpcy0+Y29uZmlnWydtYXhfZm9sZGVyc2l6ZV9tYiddKSkKKyAgICAgICAgICAgIHJldHVybiAnJzsKKyAgICAgICAgICAgIAorCQkkdG1wRnJlZVNpemU9KCR0aGlzLT5jb25maWdbJ21heF9mb2xkZXJzaXplX21iJ10qMTA0ODU3NiktRmlsZXM6OmRpclNpemUoJHRoaXMtPmdldEltYWdlc0RpcigpKTsKKworCQlpZighaXNfbnVtZXJpYygkdG1wRnJlZVNpemUpIHx8ICR0bXBGcmVlU2l6ZTwwKQkkdG1wRnJlZVNpemU9MDsKKyAgICAgICAgCisJCVJldHVybiAnVG90YWwgU2l6ZSA6ICRtYXhfZm9sZGVyc2l6ZV9tYj0nLiR0aGlzLT5jb25maWdbJ21heF9mb2xkZXJzaXplX21iJ10uJyQgTUIsIEZyZWUgU3BhY2U6ICRmcmVlX3NwYWNlPScuRmlsZXM6OmZvcm1hdFNpemUoJHRtcEZyZWVTaXplKS4nJCc7CisJfQorCisKKworCS8qKgorCSAqIEdldCB0aGUgVVJMIG9mIHRoZSByZWxhdGl2ZSBmaWxlLgorCSAqIGJhc2ljYWxseSBhcHBlbmRzIHRoZSByZWxhdGl2ZSBmaWxlIHRvIHRoZSAKKwkgKiBiYXNlX3VybCBnaXZlbiBpbiBjb25maWcuaW5jLnBocAorCSAqIEBwYXJhbSBzdHJpbmcgJHJlbGF0aXZlIGEgZmlsZSB0aGUgcmVsYXRpdmUgdG8gdGhlIGJhc2VfZGlyCisJICogQHJldHVybiBzdHJpbmcgdGhlIFVSTCBvZiB0aGUgcmVsYXRpdmUgZmlsZS4KKwkgKi8KKwlmdW5jdGlvbiBnZXRGaWxlVVJMKCRyZWxhdGl2ZSkgCisJeworCQlSZXR1cm4gRmlsZXM6Om1ha2VGaWxlKCR0aGlzLT5nZXRJbWFnZXNVUkwoKSwkcmVsYXRpdmUpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgZnVsbHBhdGggdG8gYSByZWxhdGl2ZSBmaWxlLgorCSAqIEBwYXJhbSBzdHJpbmcgJHJlbGF0aXZlIHRoZSByZWxhdGl2ZSBmaWxlLgorCSAqIEByZXR1cm4gc3RyaW5nIHRoZSBmdWxsIHBhdGgsIC5pZS4gdGhlIGJhc2VfZGlyICsgcmVsYXRpdmUuCisJICovCisJZnVuY3Rpb24gZ2V0RnVsbFBhdGgoJHJlbGF0aXZlKSAKKwl7CisJCVJldHVybiBGaWxlczo6bWFrZUZpbGUoJHRoaXMtPmdldEltYWdlc0RpcigpLCRyZWxhdGl2ZSk7OworCX0KKworCS8qKgorCSAqIEdldCB0aGUgZGVmYXVsdCB0aHVtYm5haWwuCisJICogQHJldHVybiBzdHJpbmcgZGVmYXVsdCB0aHVtYm5haWwsIGVtcHR5IHN0cmluZyBpZiAKKwkgKiB0aGUgdGh1bWJuYWlsIGRvZXNuJ3QgZXhpc3QuCisJICovCisJZnVuY3Rpb24gZ2V0RGVmYXVsdFRodW1iKCkgCisJeworCQlpZihpc19maWxlKCR0aGlzLT5jb25maWdbJ2RlZmF1bHRfdGh1bWJuYWlsJ10pKQorCQkJUmV0dXJuICR0aGlzLT5jb25maWdbJ2RlZmF1bHRfdGh1bWJuYWlsJ107CisJCWVsc2UgCisJCQlSZXR1cm4gJyc7CisJfQorCisKKwkvKioKKwkgKiBDaGVja3MgaW1hZ2Ugc2l6ZS4gSWYgdGhlIGltYWdlIHNpemUgaXMgbGVzcyB0aGFuIGRlZmF1bHQgc2l6ZQorCSAqIHJldHVybnMgdGhlIG9yaWdpbmFsIHNpemUgZWxzZSByZXR1cm5zIGRlZmF1bHQgc2l6ZSB0byBkaXNwbGF5IHRodW1ibmFpbAorCSovCisJZnVuY3Rpb24gY2hlY2tJbWFnZVNpemUoJHJlbGF0aXZlKQorCXsKKwkJJGZ1bGxwYXRoID0gRmlsZXM6Om1ha2VGaWxlKCR0aGlzLT5nZXRJbWFnZXNEaXIoKSwkcmVsYXRpdmUpOworCisJCSRhZnJ1ZXh0ID0gc3RydG9sb3dlcihzdWJzdHIoc3RycmNocigkcmVsYXRpdmUsICIuIiksIDEpKTsKKwkJCisJCWlmKCFpbl9hcnJheSgkYWZydWV4dCwkdGhpcy0+Y29uZmlnWyd0aHVtYm5haWxfZXh0ZW5zaW9ucyddKSkKKwkJeworCQkJJGltZ0luZm89YXJyYXkoMCwwKTsKKwkJCVJldHVybiAkaW1nSW5mbzsKKwkJfQorCQllbHNlCisJCXsKKwkJCSRpbWdJbmZvID0gQGdldEltYWdlU2l6ZSgkZnVsbHBhdGgpOworCQkJLy9ub3QgYW4gaW1hZ2UKKwkJCWlmKCFpc19hcnJheSgkaW1nSW5mbykpCisJCQl7CisJCQkJJGltZ0luZm89YXJyYXkoMCwwKTsKKwkJCQlSZXR1cm4gJGltZ0luZm87CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYoJGltZ0luZm9bMF0gPiAkdGhpcy0+Y29uZmlnWyd0aHVtYm5haWxfd2lkdGgnXSkKKwkJCQkkaW1nSW5mb1swXSA9ICR0aGlzLT5jb25maWdbJ3RodW1ibmFpbF93aWR0aCddOworCisJCQkJaWYoJGltZ0luZm9bMV0gPiAkdGhpcy0+Y29uZmlnWyd0aHVtYm5haWxfaGVpZ2h0J10pCisJCQkJJGltZ0luZm9bMV0gPSAkdGhpcy0+Y29uZmlnWyd0aHVtYm5haWxfaGVpZ2h0J107CisKKwkJCQlSZXR1cm4gJGltZ0luZm87CisJCQl9CisJCX0KKworCX0KKworCisJLyoqCisJICogR2V0IHRoZSB0aHVtYm5haWwgdXJsIHRvIGJlIGRpc3BsYXllZC4gCisJICogSWYgdGhlIHRodW1ibmFpbCBleGlzdHMsIGFuZCBpdCBpcyB1cC10by1kYXRlCisJICogdGhlIHRodW1ibmFpbCB1cmwgd2lsbCBiZSByZXR1cm5zLiBJZiB0aGUgCisJICogZmlsZSBpcyBub3QgYW4gaW1hZ2UsIGEgZGVmYXVsdCBpbWFnZSB3aWxsIGJlIHJldHVybmVkLgorCSAqIElmIGl0IGlzIGFuIGltYWdlIGZpbGUsIGFuZCBubyB0aHVtYm5haWwgZXhpc3RzIG9yIAorCSAqIHRoZSB0aHVtYm5haWwgaXMgb3V0LW9mLWRhdGUgKGkuZS4gdGhlIHRodW1ibmFpbCAKKwkgKiBtb2RpZmllZCB0aW1lIGlzIGxlc3MgdGhhbiB0aGUgb3JpZ2luYWwgZmlsZSkKKwkgKiB0aGVuIGEgdGh1bWJzLnBocD9pbWc9ZmlsZW5hbWUuanBnIGlzIHJldHVybmVkLgorCSAqIFRoZSB0aHVtYnMucGhwIHVybCB3aWxsIGdlbmVyYXRlIGEgbmV3IHRodW1ibmFpbAorCSAqIG9uIHRoZSBmbHkuIElmIHRoZSBpbWFnZSBpcyBsZXNzIHRoYW4gdGhlIGRpbWVuc2lvbnMKKwkgKiBvZiB0aGUgdGh1bWJuYWlscywgdGhlIGltYWdlIHdpbGwgYmUgZGlzcGxheSBpbnN0ZWFkLgorCSAqIEBwYXJhbSBzdHJpbmcgJHJlbGF0aXZlIHRoZSByZWxhdGl2ZSBpbWFnZSBmaWxlLgorCSAqIEByZXR1cm4gc3RyaW5nIHRoZSB1cmwgb2YgdGhlIHRodW1ibmFpbCwgYmUgaXQKKwkgKiBhY3R1YWxseSB0aHVtYm5haWwgb3IgYSBzY3JpcHQgdG8gZ2VuZXJhdGUgdGhlCisJICogdGh1bWJuYWlsIG9uIHRoZSBmbHkuCisJICovCisJZnVuY3Rpb24gZ2V0VGh1bWJuYWlsKCRyZWxhdGl2ZSkgCisJeworCQlnbG9iYWwgJElNQ29uZmlnOworCQkKKwkJJGZ1bGxwYXRoID0gRmlsZXM6Om1ha2VGaWxlKCR0aGlzLT5nZXRJbWFnZXNEaXIoKSwkcmVsYXRpdmUpOworCisJCS8vbm90IGEgZmlsZT8/PworCQlpZighaXNfZmlsZSgkZnVsbHBhdGgpKQorCQkJUmV0dXJuICR0aGlzLT5nZXREZWZhdWx0VGh1bWIoKTsKKworCQkkYWZydWV4dCA9IHN0cnRvbG93ZXIoc3Vic3RyKHN0cnJjaHIoJHJlbGF0aXZlLCAiLiIpLCAxKSk7CisJCQorCQlpZighaW5fYXJyYXkoJGFmcnVleHQsJHRoaXMtPmNvbmZpZ1sndGh1bWJuYWlsX2V4dGVuc2lvbnMnXSkpCisJCXsKKwkJCWlmKGlzX2ZpbGUoJ2ljb25zLycuJGFmcnVleHQuJy5naWYnKSkgCisJCQkJUmV0dXJuKCdpY29ucy8nLiRhZnJ1ZXh0LicuZ2lmJyk7CisJCQllbHNlCisJCQkJUmV0dXJuICR0aGlzLT5nZXREZWZhdWx0VGh1bWIoKTsKKwkJfQorCisJCSRpbWdJbmZvID0gQGdldEltYWdlU2l6ZSgkZnVsbHBhdGgpOworCisJCS8vbm90IGFuIGltYWdlCisJCWlmKCFpc19hcnJheSgkaW1nSW5mbykpCisJCQlSZXR1cm4gJHRoaXMtPmdldERlZmF1bHRUaHVtYigpOworCisKKwkJLy9SZXR1cm5pbmcgb3JpZ2luYWwgaW1hZ2UgYXMgdGh1bWJuYWlsIHdpdGhvdXQgSW1hZ2UgTGlicmFyeSBieSBBZnJ1CisJCWlmKCEkdGhpcy0+Y29uZmlnWydpbWdfbGlicmFyeSddKSBSZXR1cm4gJHRoaXMtPmdldEZpbGVVUkwoJHJlbGF0aXZlKTsKKworCisJCS8vdGhlIG9yaWdpbmFsIGltYWdlIGlzIHNtYWxsZXIgdGhhbiB0aHVtYm5haWxzLAorCQkvL3NvIGp1c3QgcmV0dXJuIHRoZSB1cmwgdG8gdGhlIG9yaWdpbmFsIGltYWdlLgorCQlpZiAoJGltZ0luZm9bMF0gPD0gJHRoaXMtPmNvbmZpZ1sndGh1bWJuYWlsX3dpZHRoJ10KKwkJICYmICRpbWdJbmZvWzFdIDw9ICR0aGlzLT5jb25maWdbJ3RodW1ibmFpbF9oZWlnaHQnXSkKKwkJCVJldHVybiAkdGhpcy0+Z2V0RmlsZVVSTCgkcmVsYXRpdmUpOworCisJCSR0aHVtYm5haWwgPSAkdGhpcy0+Z2V0VGh1bWJOYW1lKCRmdWxscGF0aCk7CisJCQorCQkvL2NoZWNrIGZvciB0aHVtYm5haWxzLCBpZiBleGlzdHMgYW5kCisJCS8vIGl0IGlzIHVwLXRvLWRhdGUsIHJldHVybiB0aGUgdGh1bWJuYWlsIHVybAorCQlpZihpc19maWxlKCR0aHVtYm5haWwpKQorCQl7CisJCQlpZihmaWxlbXRpbWUoJHRodW1ibmFpbCkgPj0gZmlsZW10aW1lKCRmdWxscGF0aCkpCisJCQkJUmV0dXJuICR0aGlzLT5nZXRUaHVtYlVSTCgkcmVsYXRpdmUpOworCQl9CisKKwkJLy93ZWxsLCBubyB0aHVtYm5haWwgd2FzIGZvdW5kLCBzbyBhc2sgdGhlIHRodW1icy5waHAKKwkJLy90byBnZW5lcmF0ZSB0aGUgdGh1bWJuYWlsIG9uIHRoZSBmbHkuCisJCVJldHVybiAkSU1Db25maWdbJ2JhY2tlbmRfdXJsJ10gLiAnX19mdW5jdGlvbj10aHVtYnMmaW1nPScucmF3dXJsZW5jb2RlKCRyZWxhdGl2ZSkuIiZtb2RlPSR0aGlzLT5tb2RlIjsKKwl9CisKKwkvKioKKwkgKiBEZWxldGUgYW5kIHNwZWNpZmllZCBmaWxlcy4KKwkgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBkZWxldGUsIGZhbHNlIG90aGVyd2lzZQorCSAqLworCWZ1bmN0aW9uIGRlbGV0ZUZpbGVzKCkgCisJeworCQlpZihpc3NldCgkX0dFVFsnZGVsZiddKSkKKwkJCXJldHVybiAkdGhpcy0+X2RlbEZpbGUocmF3dXJsZGVjb2RlKCRfR0VUWydkZWxmJ10pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIERlbGV0ZSBhbmQgc3BlY2lmaWVkIGRpcmVjdG9yaWVzLgorCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGRlbGV0ZSwgZmFsc2Ugb3RoZXJ3aXNlCisJICovCisJZnVuY3Rpb24gZGVsZXRlRGlycygpIAorCXsKKwkJIGlmKGlzc2V0KCRfR0VUWydkZWxkJ10pKQorCQkJcmV0dXJuICR0aGlzLT5fZGVsRGlyKHJhd3VybGRlY29kZSgkX0dFVFsnZGVsZCddKSk7CQkKKwkJIGVsc2UKKwkJCSBSZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogRGVsZXRlIHRoZSByZWxhdGl2ZSBmaWxlLCBhbmQgYW55IHRodW1ibmFpbHMuCisJICogQHBhcmFtIHN0cmluZyAkcmVsYXRpdmUgdGhlIHJlbGF0aXZlIGZpbGUuCisJICogQHJldHVybiBib29sZWFuIHRydWUgaWYgZGVsZXRlZCwgZmFsc2Ugb3RoZXJ3aXNlLgorCSAqLworCWZ1bmN0aW9uIF9kZWxGaWxlKCRyZWxhdGl2ZSkgCisJeworCQkkZnVsbHBhdGggPSBGaWxlczo6bWFrZUZpbGUoJHRoaXMtPmdldEltYWdlc0RpcigpLCRyZWxhdGl2ZSk7CisJCisJCSRhZnJ1ZXh0ID0gc3RydG9sb3dlcihzdWJzdHIoc3RycmNocigkcmVsYXRpdmUsICIuIiksIDEpKTsKKworICAgICAgICAkdmFsaWRfZXh0ZW5zaW9ucyA9ICR0aGlzLT5tb2RlID09ICdpbWFnZScgPyAkdGhpcy0+Y29uZmlnWydhbGxvd2VkX2ltYWdlX2V4dGVuc2lvbnMnXSA6ICR0aGlzLT5jb25maWdbJ2FsbG93ZWRfbGlua19leHRlbnNpb25zJ107CisKKwkJaWYoIWluX2FycmF5KCRhZnJ1ZXh0LCR2YWxpZF9leHRlbnNpb25zKSkKKwkJeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLy9jaGVjayB0aGF0IHRoZSBmaWxlIGlzIGFuIGltYWdlCisJCWlmKGlzX2FycmF5KCR0aGlzLT5nZXRJbWFnZUluZm8oJGZ1bGxwYXRoKSkpCisJCXsKKwkJCSR0aHVtYm5haWwgPSAkdGhpcy0+Z2V0VGh1bWJOYW1lKCRmdWxscGF0aCk7CisJCQlGaWxlczo6ZGVsRmlsZSgkdGh1bWJuYWlsKTsKKwkJfQorCisJCVJldHVybiBGaWxlczo6ZGVsRmlsZSgkZnVsbHBhdGgpOworCX0KKworCS8qKgorCSAqIERlbGV0ZSBkaXJlY3RvcmllcyByZWN1cnNpdmVseS4KKwkgKiBAcGFyYW0gc3RyaW5nICRyZWxhdGl2ZSB0aGUgcmVsYXRpdmUgcGF0aCB0byBiZSBkZWxldGVkLgorCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGRlbGV0ZWQsIGZhbHNlIG90aGVyd2lzZS4KKwkgKi8KKwlmdW5jdGlvbiBfZGVsRGlyKCRyZWxhdGl2ZSkgCisJeworCQkkZnVsbHBhdGggPSBGaWxlczo6bWFrZVBhdGgoJHRoaXMtPmdldEltYWdlc0RpcigpLCRyZWxhdGl2ZSk7CisJLy8JaWYoJHRoaXMtPmNvdW50RmlsZXMoJGZ1bGxwYXRoKSA8PSAwKQorCQkJcmV0dXJuIEZpbGVzOjpkZWxGb2xkZXIoJGZ1bGxwYXRoLHRydWUpOyAvL2RlbGV0ZSByZWN1cnNpdmVseS4KKwkJLy9lbHNlCisJCQkvL1JldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgbmV3IGRpcmVjdG9yaWVzLgorCSAqIElmIGluIHNhZmVfbW9kZSwgbm90aGluZyBoYXBwZW5zLgorCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNyZWF0ZWQsIGZhbHNlIG90aGVyd2lzZS4KKwkgKi8KKwlmdW5jdGlvbiBwcm9jZXNzTmV3RGlyKCkgCisJeworCQlpZigkdGhpcy0+Y29uZmlnWydzYWZlX21vZGUnXSA9PSB0cnVlKQorCQkJUmV0dXJuIGZhbHNlOworCisJCWlmKGlzc2V0KCRfR0VUWyduZXdEaXInXSkgJiYgaXNzZXQoJF9HRVRbJ2RpciddKSkKKwkJeworCQkJJG5ld0RpciA9IHJhd3VybGRlY29kZSgkX0dFVFsnbmV3RGlyJ10pOworCQkJJGRpciA9IHJhd3VybGRlY29kZSgkX0dFVFsnZGlyJ10pOworCQkJJHBhdGggPSBGaWxlczo6bWFrZVBhdGgoJHRoaXMtPmdldEltYWdlc0RpcigpLCRkaXIpOworCQkJJGZ1bGxwYXRoID0gRmlsZXM6Om1ha2VQYXRoKCRwYXRoLCBGaWxlczo6ZXNjYXBlKCRuZXdEaXIpKTsKKwkJCWlmKGlzX2RpcigkZnVsbHBhdGgpKQorCQkJCVJldHVybiBmYWxzZTsKKworCQkJUmV0dXJuIEZpbGVzOjpjcmVhdGVGb2xkZXIoJGZ1bGxwYXRoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJlbmFtZXMgZmlsZXMgaWYgY2VydGFpbiBHRVQgdmFyaWFibGVzIGFyZSBzZXQKKwkgKiBAcmV0dXJuIGJvb2wKKwkgKi8KKwlmdW5jdGlvbiBwcm9jZXNzUmVuYW1lcygpCisJeworCQlpZighZW1wdHkoJF9HRVRbJ3JlbmFtZSddKSAmJiAhZW1wdHkoJF9HRVRbJ3JlbmFtZVRvJ10pKQorCQl7CisJCQkvLyBuZXcgZmlsZSBuYW1lICh3aXRob3V0IHBhdGggYW5kIGV4dGVuc2lvbikKKwkJCSRuZXdOYW1lID0gRmlsZXM6OmVzY2FwZShyYXd1cmxkZWNvZGUoJF9HRVRbJ3JlbmFtZVRvJ10pKTsKKwkJCSRuZXdOYW1lID0gc3RyX3JlcGxhY2UoJy4nLCAnJywgJG5ld05hbWUpOworCisJCQkvLyBwYXRoIHRvIGZpbGUgKGZyb20gYmFzZSBpbWFnZXMgZGlyZWN0b3J5KQorCQkJJG9sZE5hbWUgPSByYXd1cmxkZWNvZGUoJF9HRVRbJ3JlbmFtZSddKTsKKworCQkJLy8gc3RyaXAgcGFyZW50IGRpciAoIi4uIikgdG8gYXZvaWQgZXNjYXBpbmcgZnJvbSBiYXNlIGRpcmVjdGlvcnkKKwkJCSRvbGROYW1lID0gcHJlZ19yZXBsYWNlKCcjXC5cLiMnLCAnJywgJG9sZE5hbWUpOworCisJCQlpZiAoaXNfZGlyKCRvbGRQYXRoID0gRmlsZXM6Om1ha2VGaWxlKCR0aGlzLT5nZXRJbWFnZXNEaXIoKSwgJF9HRVRbJ2RpciddLiRvbGROYW1lKSkpCisJCQl7CisJCQkJJG5ld1BhdGggPSBGaWxlczo6bWFrZUZpbGUoJHRoaXMtPmdldEltYWdlc0RpcigpLCAkX0dFVFsnZGlyJ10uJG5ld05hbWUpOworCQkJCXJldHVybiBGaWxlczo6cmVuYW1lKCRvbGRQYXRoLCRuZXdQYXRoKTsKKwkJCX0KKwkJCWVsc2UgCisJCQl7CisJCQkJLy8gcGF0aCB0byBvbGQgZmlsZQorCQkJCSRvbGRQYXRoID0gRmlsZXM6Om1ha2VGaWxlKCR0aGlzLT5nZXRJbWFnZXNEaXIoKSwgJG9sZE5hbWUpOworCQorCQkJCSRyZXQgPSBGaWxlczo6cmVuYW1lRmlsZSgkb2xkUGF0aCwgJG5ld05hbWUpOworCQkJCWlmICgkcmV0ID09PSB0cnVlKSB7CisJCQkJCS8vIGRlbGV0ZSBvbGQgdGh1bWJuYWlsCisJCQkJCUZpbGVzOjpkZWxGaWxlKCR0aGlzLT5nZXRUaHVtYm5hbWUoJG9sZFBhdGgpKTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gJHJldDsKKwkJfQorCQkKKwkJcmV0dXJuIG51bGw7CisJfQorCisJZnVuY3Rpb24gcHJvY2Vzc1Bhc3RlKCkKKwl7CisJCXN3aXRjaCAoJF9HRVRbJ3Bhc3RlJ10pCisJCXsKKwkJCWNhc2UgJ2NvcHlGaWxlJzoKKwkJCQkkc3JjID0gRmlsZXM6Om1ha2VGaWxlKCR0aGlzLT5nZXRJbWFnZXNEaXIoKSwgJF9HRVRbJ3NyY2RpciddLiRfR0VUWydmaWxlJ10pOworCQkJCSRmaWxlID0gJF9HRVRbJ2ZpbGUnXTsKKwkJCQkkZGVzdCA9IEZpbGVzOjptYWtlRmlsZSgkdGhpcy0+Z2V0SW1hZ2VzRGlyKCksICRfR0VUWydkaXInXSk7CisJCQkJcmV0dXJuIEZpbGVzOjpjb3B5RmlsZSgkc3JjLCRkZXN0LCRmaWxlKTsKKwkJCWJyZWFrOworCQkJY2FzZSAnY29weURpcic6CisJCQkJJGJhc2VQYXRoID0gJHRoaXMtPmdldEltYWdlc0RpcigpOworCQkJCSRzcmMgPSAkX0dFVFsnc3JjZGlyJ10uJF9HRVRbJ2ZpbGUnXTsKKwkJCQkkZGVzdCA9ICRfR0VUWydkaXInXS4kX0dFVFsnZmlsZSddOworCQkJCXJldHVybiBGaWxlczo6Y29weURpcigkYmFzZVBhdGgsJHNyYywkZGVzdCk7CisJCQlicmVhazsKKwkJCWNhc2UgJ21vdmVGaWxlJzoKKwkJCQkkc3JjID0gRmlsZXM6Om1ha2VGaWxlKCR0aGlzLT5nZXRJbWFnZXNEaXIoKSwgJF9HRVRbJ3NyY2RpciddLiRfR0VUWydmaWxlJ10pOworCQkJCSRkZXN0ID0gRmlsZXM6Om1ha2VGaWxlKCR0aGlzLT5nZXRJbWFnZXNEaXIoKSwgJF9HRVRbJ2RpciddLiRfR0VUWydmaWxlJ10pOworCQkJCXJldHVybiBGaWxlczo6cmVuYW1lKCRzcmMsJGRlc3QpOworCQkJYnJlYWs7CisJCQljYXNlICdtb3ZlRGlyJzoKKwkJCQkkc3JjID0gRmlsZXM6Om1ha2VGaWxlKCR0aGlzLT5nZXRJbWFnZXNEaXIoKSwgJF9HRVRbJ3NyY2RpciddLiRfR0VUWydmaWxlJ10pOworCQkJCSRkZXN0ID0gRmlsZXM6Om1ha2VGaWxlKCR0aGlzLT5nZXRJbWFnZXNEaXIoKSwgJF9HRVRbJ2RpciddLiRfR0VUWydmaWxlJ10pOworCQkJCXJldHVybiBGaWxlczo6cmVuYW1lKCRzcmMsJGRlc3QpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKz8+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvRXh0ZW5kZWRGaWxlTWFuYWdlci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9FeHRlbmRlZEZpbGVNYW5hZ2VyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYWFmNTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvRXh0ZW5kZWRGaWxlTWFuYWdlci5qcwpAQCAtMCwwICsxLDMyOSBAQAorLyoqDQorICogRXh0ZW5kZWRGaWxlTWFuYWdlciBleHRlbmRlZC1maWxlLW1hbmFnZXIuanMgZmlsZS4NCisgKiBBdXRob3JzOiBXZWkgWmh1bywgQWZydSwgS3J6eXN6dG9mIEtvdG93aWN6LCBSYWltdW5kIE1leWVyDQorICogTW9kaWZpZWQgYnk6IEtyenlzenRvZiBLb3Rvd2ljeiA8a290b0B3ZWJ3b3JrZXJzLnBsPg0KKyAqIFZlcnNpb246IFVwZGF0ZWQgb24gMDgtMDEtMjAwNSBieSBBZnJ1DQorICogVmVyc2lvbjogTW9kaWZpZWQgb24gMjAtMDYtMjAwNiBieSBLcnp5c3p0b2YgS290b3dpY3oNCisgKiBWZXJzaW9uOiBVcGRhdGVkIG9uIDI5LTEwLTIwMDYgYnkgUmFpbXVuZCBNZXllcg0KKyAqIFZlcnNpb246IFVwZGF0ZWQgb24gMjAtMDEtMjAwOCBieSBSYWltdW5kIE1leWVyDQorICogUGFja2FnZTogRXh0ZW5kZWRGaWxlTWFuYWdlciAoRUZNIDEuNCkNCisgKi8NCisNCisvKioNCisgKiBGb3IgaW5zdGFsbGF0aW9uIGRldGFpbHMgc2VlIFJlYWRtZS50eHQgaW4gdGhlIHBsdWdpbiBmb2xkZXINCisgKg0KKyAqLw0KKw0KK2Z1bmN0aW9uIEV4dGVuZGVkRmlsZU1hbmFnZXIoZWRpdG9yKQ0KK3sNCisNCisgICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7DQorDQorICAgIHZhciBjZmcgPSBlZGl0b3IuY29uZmlnOw0KKyAgICB2YXIgdG9vbGJhciA9IGNmZy50b29sYmFyOw0KKyAgICB2YXIgc2VsZiA9IHRoaXM7DQorICAgIA0KKyAgICBpZiAoY2ZnLkV4dGVuZGVkRmlsZU1hbmFnZXIudXNlX2xpbmtlcikgew0KKyAgICAgICAgY2ZnLnJlZ2lzdGVyQnV0dG9uKHsNCisgICAgICAgICAgICBpZCAgICAgICAgOiAibGlua2ZpbGUiLA0KKyAgICAgICAgICAgIHRvb2x0aXAgICA6IFhpbmhhLl9sYygiSW5zZXJ0IEZpbGUgTGluayIsJ0V4dGVuZGVkRmlsZU1hbmFnZXInKSwNCisgICAgICAgICAgICBpbWFnZSAgICAgOiBYaW5oYS5nZXRQbHVnaW5EaXIoJ0V4dGVuZGVkRmlsZU1hbmFnZXInKSArICcvaW1nL2VkX2xpbmtmaWxlLmdpZicsDQorICAgICAgICAgICAgdGV4dE1vZGUgIDogZmFsc2UsDQorICAgICAgICAgICAgYWN0aW9uICAgIDogZnVuY3Rpb24oZWRpdG9yKSB7DQorICAgICAgICAgICAgICAgICAgICBlZGl0b3IuX2xpbmtGaWxlKCk7DQorICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0pOw0KKyAgICAgICAgY2ZnLmFkZFRvb2xiYXJFbGVtZW50KCJsaW5rZmlsZSIsICJjcmVhdGVsaW5rIiwgMSk7DQorICAgICAgICB9Ow0KKw0KKyAgICB2YXIgbWFuYWdlciA9IGVkaXRvci5jb25maWcuRXh0ZW5kZWRGaWxlTWFuYWdlci5iYWNrZW5kICsgJ19fZnVuY3Rpb249bWFuYWdlcic7DQorICAgIGlmKGNmZy5FeHRlbmRlZEZpbGVNYW5hZ2VyLmJhY2tlbmRfY29uZmlnICE9IG51bGwpDQorICAgIHsNCisgICAgICBtYW5hZ2VyICs9ICcmYmFja2VuZF9jb25maWc9Jw0KKyAgICAgICAgKyBlbmNvZGVVUklDb21wb25lbnQoY2ZnLkV4dGVuZGVkRmlsZU1hbmFnZXIuYmFja2VuZF9jb25maWcpOw0KKyAgICAgIG1hbmFnZXIgKz0gJyZiYWNrZW5kX2NvbmZpZ19oYXNoPScNCisgICAgICAgICsgZW5jb2RlVVJJQ29tcG9uZW50KGNmZy5FeHRlbmRlZEZpbGVNYW5hZ2VyLmJhY2tlbmRfY29uZmlnX2hhc2gpOw0KKyAgICAgIG1hbmFnZXIgKz0gJyZiYWNrZW5kX2NvbmZpZ19zZWNyZXRfa2V5X2xvY2F0aW9uPScNCisgICAgICAgICsgZW5jb2RlVVJJQ29tcG9uZW50KGNmZy5FeHRlbmRlZEZpbGVNYW5hZ2VyLmJhY2tlbmRfY29uZmlnX3NlY3JldF9rZXlfbG9jYXRpb24pOw0KKyAgICB9DQorDQorICAgIGlmKGNmZy5FeHRlbmRlZEZpbGVNYW5hZ2VyLmJhY2tlbmRfZGF0YSAhPSBudWxsKQ0KKyAgICB7DQorICAgICAgICBmb3IgKCB2YXIgaSBpbiBjZmcuRXh0ZW5kZWRGaWxlTWFuYWdlci5iYWNrZW5kX2RhdGEgKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1hbmFnZXIgKz0gJyYnICsgaSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChjZmcuRXh0ZW5kZWRGaWxlTWFuYWdlci5iYWNrZW5kX2RhdGFbaV0pOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGNmZy5FeHRlbmRlZEZpbGVNYW5hZ2VyLm1hbmFnZXIgPSBtYW5hZ2VyOw0KK30NCisNCitFeHRlbmRlZEZpbGVNYW5hZ2VyLl9wbHVnaW5JbmZvID0gew0KKyAgICBuYW1lICAgICAgICAgIDogIkV4dGVuZGVkRmlsZU1hbmFnZXIiLA0KKyAgICB2ZXJzaW9uICAgICAgIDogIjEuNCIsDQorICAgIGRldmVsb3BlciAgICAgOiAiQWZydSwgS3J6eXN6dG9mIEtvdG93aWN6LCBSYWltdW5kIE1leWVyIiwNCisgICAgZGV2ZWxvcGVyX3VybCA6ICJodHRwOi8veGluaGEub3JnIiwNCisgICAgbGljZW5zZSAgICAgICA6ICJodG1sQXJlYSINCit9Ow0KKw0KK1hpbmhhLkNvbmZpZy5wcm90b3R5cGUuRXh0ZW5kZWRGaWxlTWFuYWdlciA9DQorew0KKyAgJ3VzZV9saW5rZXInOiB0cnVlLA0KKyAgJ2JhY2tlbmQnICAgIDogWGluaGEuZ2V0UGx1Z2luRGlyKCdFeHRlbmRlZEZpbGVNYW5hZ2VyJykgKyAnL2JhY2tlbmQucGhwP19fcGx1Z2luPUV4dGVuZGVkRmlsZU1hbmFnZXImJywNCisgICdiYWNrZW5kX2RhdGEnIDogbnVsbCwNCisgIC8vIGRlcHJlY2F0ZWQga2V5cywgdXNlIHBhc3NpbmcgZGF0YSB0aHJvdWdoIGUuZy4geGluaGFfcGFzc190b19waHBfYmFja2VuZCgpDQorICAnYmFja2VuZF9jb25maWcnICAgICA6IG51bGwsDQorICAnYmFja2VuZF9jb25maWdfaGFzaCc6IG51bGwsDQorICAnYmFja2VuZF9jb25maWdfc2VjcmV0X2tleV9sb2NhdGlvbic6ICdYaW5oYTpFeHRlbmRlZEZpbGVNYW5hZ2VyJw0KK307DQorDQorLy8gT3ZlciByaWRlIHRoZSBfaW5zZXJ0SW1hZ2UgZnVuY3Rpb24gaW4gaHRtbGFyZWEuanMuDQorLy8gT3BlbiB1cCB0aGUgRXh0ZW5kZWRGaWxlTWFuZ2VyIHNjcmlwdCBpbnN0ZWFkLg0KK2lmKHR5cGVvZiBJbWFnZU1hbmFnZXIgPT0gJ3VuZGVmaW5lZCcpDQorew0KK1hpbmhhLnByb3RvdHlwZS5faW5zZXJ0SW1hZ2UgPSBmdW5jdGlvbihpbWFnZSkgew0KKw0KKyAgICB2YXIgZWRpdG9yID0gdGhpczsgIC8vIGZvciBuZXN0ZWQgZnVuY3Rpb25zDQorICAgIHZhciBvdXRwYXJhbSA9IHsiZWRpdG9yIiA6IHRoaXMsIHBhcmFtIDogbnVsbH07DQorICAgIA0KKyAgICBpZiAodHlwZW9mIGltYWdlID09ICJ1bmRlZmluZWQiKSB7DQorICAgICAgICBpbWFnZSA9IHRoaXMuZ2V0UGFyZW50RWxlbWVudCgpOw0KKyAgICAgICAgaWYgKGltYWdlICYmICEvXmltZyQvaS50ZXN0KGltYWdlLnRhZ05hbWUpKQ0KKyAgICAgICAgICAgIGltYWdlID0gbnVsbDsNCisgICAgfQ0KKw0KKyAgICBpZiAoaW1hZ2UpIHsNCisgICAgICAgIG91dHBhcmFtLnBhcmFtID0gew0KKyAgICAgICAgICAgIGZfdXJsICAgIDogWGluaGEuaXNfaWUgPyBpbWFnZS5zcmMgOiBpbWFnZS5nZXRBdHRyaWJ1dGUoInNyYyIpLA0KKyAgICAgICAgICAgIGZfYWx0ICAgIDogaW1hZ2UuYWx0LA0KKyAgICAgICAgICAgIGZfdGl0bGUgIDogaW1hZ2UudGl0bGUsDQorICAgICAgICAgICAgZl9ib3JkZXIgOiBpbWFnZS5zdHlsZS5ib3JkZXJXaWR0aCA/IGltYWdlLnN0eWxlLmJvcmRlcldpZHRoIDogaW1hZ2UuYm9yZGVyLA0KKyAgICAgICAgICAgIGZfYWxpZ24gIDogaW1hZ2UuYWxpZ24sDQorICAgICAgICAgICAgZl93aWR0aCAgOiBpbWFnZS53aWR0aCwNCisgICAgICAgICAgICBmX2hlaWdodCAgOiBpbWFnZS5oZWlnaHQsDQorICAgICAgICAgICAgZl9wYWRkaW5nOiBpbWFnZS5zdHlsZS5wYWRkaW5nLA0KKyAgICAgICAgICAgIGZfbWFyZ2luIDogaW1hZ2Uuc3R5bGUubWFyZ2luLA0KKyAgICAgICAgICAgIGZfYmFja2dyb3VuZENvbG9yOiBpbWFnZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IsDQorICAgICAgICAgICAgZl9ib3JkZXJDb2xvcjogaW1hZ2Uuc3R5bGUuYm9yZGVyQ29sb3IsDQorICAgICAgICAgICAgYmFzZUhyZWY6IGVkaXRvci5jb25maWcuYmFzZUhyZWYNCisgICAgICAgIH07DQorDQorICAgICAgICAvLyBjb21wcmVzcyAndG9wIHJpZ2h0IGJvdHRvbSBsZWZ0JyBzeW50YXggaW50byBvbmUgdmFsdWUgaWYgcG9zc2libGUNCisgICAgICAgIG91dHBhcmFtLnBhcmFtLmZfYm9yZGVyID0gc2hvcnRTaXplKG91dHBhcmFtLnBhcmFtLmZfYm9yZGVyKTsNCisgICAgICAgIG91dHBhcmFtLnBhcmFtLmZfcGFkZGluZyA9IHNob3J0U2l6ZShvdXRwYXJhbS5wYXJhbS5mX3BhZGRpbmcpOw0KKyAgICAgICAgb3V0cGFyYW0ucGFyYW0uZl9tYXJnaW4gPSBzaG9ydFNpemUob3V0cGFyYW0ucGFyYW0uZl9tYXJnaW4pOw0KKw0KKyAgICAgICAgLy8gY29udmVydCByZ2IoKSBjYWxscyB0byByZ2IgaGV4DQorICAgICAgICBvdXRwYXJhbS5wYXJhbS5mX2JhY2tncm91bmRDb2xvciA9IGNvbnZlcnRUb0hleChvdXRwYXJhbS5wYXJhbS5mX2JhY2tncm91bmRDb2xvcik7DQorICAgICAgICBvdXRwYXJhbS5wYXJhbS5mX2JvcmRlckNvbG9yID0gY29udmVydFRvSGV4KG91dHBhcmFtLnBhcmFtLmZfYm9yZGVyQ29sb3IpOw0KKw0KKyAgICB9DQorICAgIERpYWxvZyh0aGlzLmNvbmZpZy5FeHRlbmRlZEZpbGVNYW5hZ2VyLm1hbmFnZXIsIGZ1bmN0aW9uKHBhcmFtKXsNCisgICAgICAgIGlmICghcGFyYW0pDQorICAgICAgICB7ICAgLy8gdXNlciBtdXN0IGhhdmUgcHJlc3NlZCBDYW5jZWwNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQorDQorICAgICAgICB2YXIgaW1nID0gaW1hZ2U7DQorICAgICAgICBpZiAoIWltZykgew0KKyAgICAgICAgCWlmICggIXBhcmFtLmZfdXJsICkgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgICAgIGlmIChYaW5oYS5pc19pZSkgew0KKyAgICAgICAgICAgICAgICB2YXIgc2VsID0gZWRpdG9yLmdldFNlbGVjdGlvbigpOw0KKyAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBlZGl0b3IuY3JlYXRlUmFuZ2Uoc2VsKTsNCisgICAgICAgICAgICAgICAgZWRpdG9yLl9kb2MuZXhlY0NvbW1hbmQoImluc2VydGltYWdlIiwgZmFsc2UsIHBhcmFtLmZfdXJsKTsNCisgICAgICAgICAgICAgICAgaW1nID0gcmFuZ2UucGFyZW50RWxlbWVudCgpOw0KKyAgICAgICAgICAgICAgICAvLyB3b25kZXIgaWYgdGhpcyB3b3Jrcy4uLg0KKyAgICAgICAgICAgICAgICBpZiAoaW1nLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPSAiaW1nIikgew0KKyAgICAgICAgICAgICAgICAgICAgaW1nID0gaW1nLnByZXZpb3VzU2libGluZzsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOw0KKyAgICAgICAgICAgICAgICBpbWcuc3JjID0gcGFyYW0uZl91cmw7DQorICAgICAgICAgICAgICAgIGVkaXRvci5pbnNlcnROb2RlQXRTZWxlY3Rpb24oaW1nKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgCWlmICggIXBhcmFtLmZfdXJsICkgeyAvLyBkZWxldGUgdGhlIGltYWdlIGlmIGVtcHR5IHVybCBwYXNzZWQNCisgICAgICAgIAkJaW1nLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaW1nKTsNCisgICAgICAgIAkJZWRpdG9yLnVwZGF0ZVRvb2xiYXIoKTsNCisgICAgICAgIAkJcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgCX0gZWxzZSB7DQorICAgICAgICAgICAgICAgIGltZy5zcmMgPSBwYXJhbS5mX3VybDsNCisgICAgICAgIAl9DQorICAgICAgICB9DQorDQorICAgICAgICBpbWcuYWx0ID0gaW1nLmFsdCA/IGltZy5hbHQgOiAnJzsNCisgICAgICAgIA0KKyAgICAgICAgZm9yIChmaWVsZCBpbiBwYXJhbSkNCisgICAgICAgIHsNCisgICAgICAgICAgICB2YXIgdmFsdWUgPSBwYXJhbVtmaWVsZF07DQorICAgICAgICAgICAgc3dpdGNoIChmaWVsZCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGNhc2UgImZfYWx0IiAgICA6IGltZy5hbHQgICAgPSB2YWx1ZTsgYnJlYWs7DQorICAgICAgICAgICAgICAgIGNhc2UgImZfdGl0bGUiICA6IGltZy50aXRsZSA9IHZhbHVlOyBicmVhazsNCisgICAgICAgICAgICAgICAgY2FzZSAiZl9ib3JkZXIiIDogDQorICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnN0eWxlLmJvcmRlcldpZHRoID0gL1teMC05XS8udGVzdCh2YWx1ZSkgPyB2YWx1ZSA6ICh2YWx1ZSAhPSAnJykgPyAocGFyc2VJbnQodmFsdWUpICsgJ3B4JykgOiAnJzsNCisgICAgICAgICAgICAgICAgICAgICAgICBpZihpbWcuc3R5bGUuYm9yZGVyV2lkdGggJiYgIWltZy5zdHlsZS5ib3JkZXJTdHlsZSkNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zdHlsZS5ib3JkZXJTdHlsZSA9ICdzb2xpZCc7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpbWcuc3R5bGUuYm9yZGVyV2lkdGgpDQorICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIAlpbWcuc3R5bGUuYm9yZGVyID0gJyc7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgY2FzZSAiZl9ib3JkZXJDb2xvciI6IGltZy5zdHlsZS5ib3JkZXJDb2xvciA9ICB2YWx1ZTsgYnJlYWs7DQorICAgICAgICAgICAgICAgIGNhc2UgImZfYmFja2dyb3VuZENvbG9yIjogaW1nLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHZhbHVlOyBicmVhazsNCisgICAgICAgICAgICAgICAgY2FzZSAiZl9hbGlnbiIgIDogaW1nLmFsaWduICA9IHZhbHVlOyBicmVhazsNCisgICAgICAgICAgICAgICAgY2FzZSAiZl93aWR0aCIgIDogDQorICAgICAgICAgICAgICAgICAgICBpZiAoIHBhcnNlSW50KCB2YWx1ZSApID4gMCApDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaW1nLndpZHRoID0gcGFyc2VJbnQodmFsdWUpOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgY2FzZSAiZl9oZWlnaHQiICA6IA0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJzZUludCggdmFsdWUgKSA+IDAgKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGltZy5oZWlnaHQgPSBwYXJzZUludCh2YWx1ZSk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICBjYXNlICJmX3BhZGRpbmciOiBpbWcuc3R5bGUucGFkZGluZyA9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL1teMC05XS8udGVzdCh2YWx1ZSkgPyB2YWx1ZSA6ICh2YWx1ZSAhPSAnJykgPyAocGFyc2VJbnQodmFsdWUpICsgJ3B4JykgOicnOyBicmVhazsNCisgICAgICAgICAgICAgICAgY2FzZSAiZl9tYXJnaW4iOiBpbWcuc3R5bGUubWFyZ2luID0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvW14wLTldLy50ZXN0KHZhbHVlKSA/IHZhbHVlIDogKHZhbHVlICE9ICcnKSA/IChwYXJzZUludCh2YWx1ZSkgKyAncHgnKSA6Jyc7IGJyZWFrOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgfSwgb3V0cGFyYW0pOw0KKw0KK307DQorfQ0KKw0KK1hpbmhhLnByb3RvdHlwZS5fbGlua0ZpbGUgPSBmdW5jdGlvbihsaW5rKSB7DQorDQorICAgIHZhciBlZGl0b3IgPSB0aGlzOw0KKyAgICB2YXIgb3V0cGFyYW0gPSB7ImVkaXRvciIgOiB0aGlzLCBwYXJhbSA6IG51bGx9Ow0KKyAgICBpZiAodHlwZW9mIGxpbmsgPT0gInVuZGVmaW5lZCIpIHsNCisgICAgICAgIGxpbmsgPSB0aGlzLmdldFBhcmVudEVsZW1lbnQoKTsNCisgICAgICAgIGlmIChsaW5rKSB7DQorICAgICAgICAgICAgaWYgKC9eaW1nJC9pLnRlc3QobGluay50YWdOYW1lKSkNCisgICAgICAgICAgICAgICAgbGluayA9IGxpbmsucGFyZW50Tm9kZTsNCisgICAgICAgICAgICBpZiAoIS9eYSQvaS50ZXN0KGxpbmsudGFnTmFtZSkpDQorICAgICAgICAgICAgICAgIGxpbmsgPSBudWxsOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGlmICghbGluaykgew0KKyAgICAgICAgdmFyIHNlbCA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTsNCisgICAgICAgIHZhciByYW5nZSA9IGVkaXRvci5jcmVhdGVSYW5nZShzZWwpOw0KKyAgICAgICAgdmFyIGNvbXBhcmUgPSAwOw0KKyAgICAgICAgaWYgKFhpbmhhLmlzX2llKSB7DQorICAgICAgICAgICAgaWYgKCBzZWwudHlwZSA9PSAiQ29udHJvbCIgKQ0KKyAgICAgICAgICAgICAgICBjb21wYXJlID0gcmFuZ2UubGVuZ3RoOw0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgY29tcGFyZSA9IHJhbmdlLmNvbXBhcmVFbmRQb2ludHMoIlN0YXJ0VG9FbmQiLCByYW5nZSk7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIGNvbXBhcmUgPSByYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMocmFuZ2UuU1RBUlRfVE9fRU5ELCByYW5nZSk7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY29tcGFyZSA9PSAwKSB7DQorICAgICAgICAgICAgYWxlcnQoWGluaGEuX2xjKCJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iLCAnRXh0ZW5kZWRGaWxlTWFuYWdlcicpKTsNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICB9DQorICAgICAgICBvdXRwYXJhbS5wYXJhbSA9IHsNCisgICAgICAgICAgICBmX2hyZWYgOiAnJywNCisgICAgICAgICAgICBmX3RpdGxlIDogJycsDQorICAgICAgICAgICAgZl90YXJnZXQgOiAnJywNCisgICAgICAgICAgICBmX3VzZXRhcmdldCA6IGVkaXRvci5jb25maWcubWFrZUxpbmtTaG93c1RhcmdldCwNCisgICAgICAgICAgICBiYXNlSHJlZjogZWRpdG9yLmNvbmZpZy5iYXNlSHJlZg0KKyAgICAgICAgfTsNCisgICAgfSAKKyAgICBlbHNlDQorICAgIHsgICAgICANCisgICAgICAgIG91dHBhcmFtLnBhcmFtID0gew0KKyAgICAgICAgICAgIGZfaHJlZiAgIDogWGluaGEuaXNfaWUgPyBsaW5rLmhyZWYgOiBsaW5rLmdldEF0dHJpYnV0ZSgiaHJlZiIpLA0KKyAgICAgICAgICAgIGZfdGl0bGUgIDogbGluay50aXRsZSwNCisgICAgICAgICAgICBmX3RhcmdldCA6IGxpbmsudGFyZ2V0LA0KKyAgICAgICAgICAgIGZfdXNldGFyZ2V0IDogZWRpdG9yLmNvbmZpZy5tYWtlTGlua1Nob3dzVGFyZ2V0LA0KKyAgICAgICAgICAgIGJhc2VIcmVmOiBlZGl0b3IuY29uZmlnLmJhc2VIcmVmDQorICAgICAgICB9Ow0KKyAgICB9DQorDQorICAgIERpYWxvZyh0aGlzLmNvbmZpZy5FeHRlbmRlZEZpbGVNYW5hZ2VyLm1hbmFnZXIrJyZtb2RlPWxpbmsnLCBmdW5jdGlvbihwYXJhbSl7DQorICAgICAgICBpZiAoIXBhcmFtKQ0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgIHZhciBhID0gbGluazsNCisgICAgICAgIGlmICghYSkgdHJ5IHsNCisgICAgICAgICAgICBlZGl0b3IuX2RvYy5leGVjQ29tbWFuZCgiY3JlYXRlbGluayIsIGZhbHNlLCBwYXJhbS5mX2hyZWYpOw0KKyAgICAgICAgICAgIGEgPSBlZGl0b3IuZ2V0UGFyZW50RWxlbWVudCgpOw0KKyAgICAgICAgICAgIHZhciBzZWwgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7DQorICAgICAgICAgICAgdmFyIHJhbmdlID0gZWRpdG9yLmNyZWF0ZVJhbmdlKHNlbCk7DQorICAgICAgICAgICAgaWYgKCFYaW5oYS5pc19pZSkgew0KKyAgICAgICAgICAgICAgICBhID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7DQorICAgICAgICAgICAgICAgIGlmICghL15hJC9pLnRlc3QoYS50YWdOYW1lKSkgew0KKyAgICAgICAgICAgICAgICAgICAgYSA9IGEubmV4dFNpYmxpbmc7DQorICAgICAgICAgICAgICAgICAgICBpZiAoYSA9PSBudWxsKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGEgPSByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfSBjYXRjaChlKSB7fQ0KKyAgICAgICAgZWxzZSB7DQorICAgICAgICAgICAgdmFyIGhyZWYgPSBwYXJhbS5mX2hyZWYudHJpbSgpOw0KKyAgICAgICAgICAgIGVkaXRvci5zZWxlY3ROb2RlQ29udGVudHMoYSk7DQorICAgICAgICAgICAgaWYgKGhyZWYgPT0gIiIpIHsNCisgICAgICAgICAgICAgICAgZWRpdG9yLl9kb2MuZXhlY0NvbW1hbmQoInVubGluayIsIGZhbHNlLCBudWxsKTsNCisgICAgICAgICAgICAgICAgZWRpdG9yLnVwZGF0ZVRvb2xiYXIoKTsNCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlIHsNCisgICAgICAgICAgICAgICAgYS5ocmVmID0gaHJlZjsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBpZiAoIShhICYmIC9eYSQvaS50ZXN0KGEudGFnTmFtZSkpKQ0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgIGEudGFyZ2V0ID0gcGFyYW0uZl90YXJnZXQudHJpbSgpOw0KKyAgICAgICAgYS50aXRsZSA9IHBhcmFtLmZfdGl0bGUudHJpbSgpOw0KKyAgICAgICAgZWRpdG9yLnNlbGVjdE5vZGVDb250ZW50cyhhKTsNCisgICAgICAgIGVkaXRvci51cGRhdGVUb29sYmFyKCk7DQorICAgIH0sIG91dHBhcmFtKTsNCit9Ow0KKw0KK2Z1bmN0aW9uIHNob3J0U2l6ZShjc3NTaXplKQ0KK3sNCisgICAgaWYoLyAvLnRlc3QoY3NzU2l6ZSkpDQorICAgIHsNCisgICAgICAgIHZhciBzaXplcyA9IGNzc1NpemUuc3BsaXQoJyAnKTsNCisgICAgICAgIHZhciB1c2VGaXJzdFNpemUgPSB0cnVlOw0KKyAgICAgICAgZm9yKHZhciBpID0gMTsgaSA8IHNpemVzLmxlbmd0aDsgaSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmKHNpemVzWzBdICE9IHNpemVzW2ldKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgdXNlRmlyc3RTaXplID0gZmFsc2U7DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGlmKHVzZUZpcnN0U2l6ZSkgY3NzU2l6ZSA9IHNpemVzWzBdOw0KKyAgICB9DQorDQorICAgIHJldHVybiBjc3NTaXplOw0KK30NCisNCitmdW5jdGlvbiBjb252ZXJ0VG9IZXgoY29sb3IpIHsNCisNCisgICAgaWYgKHR5cGVvZiBjb2xvciA9PSAic3RyaW5nIiAmJiAvLCAvLnRlc3QuY29sb3IpDQorICAgICAgICBjb2xvciA9IGNvbG9yLnJlcGxhY2UoLywgLywgJywnKTsgLy8gcmdiKGEsIGIpID0+IHJnYihhLGIpDQorDQorICAgIGlmICh0eXBlb2YgY29sb3IgPT0gInN0cmluZyIgJiYgLyAvLnRlc3QuY29sb3IpIHsgLy8gbXVsdGlwbGUgdmFsdWVzDQorICAgICAgICB2YXIgY29sb3JzID0gY29sb3Iuc3BsaXQoJyAnKTsNCisgICAgICAgIHZhciBjb2xvcnN0cmluZyA9ICcnOw0KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xvcnMubGVuZ3RoOyBpKyspIHsNCisgICAgICAgICAgICBjb2xvcnN0cmluZyArPSBYaW5oYS5fY29sb3JUb1JnYihjb2xvcnNbaV0pOw0KKyAgICAgICAgICAgIGlmIChpICsgMSA8IGNvbG9ycy5sZW5ndGgpDQorICAgICAgICAgICAgICAgIGNvbG9yc3RyaW5nICs9ICIgIjsNCisgICAgICAgIH0NCisgICAgICAgIHJldHVybiBjb2xvcnN0cmluZzsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gWGluaGEuX2NvbG9yVG9SZ2IoY29sb3IpOw0KK30NCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvUmVhZG1lLnR4dCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9SZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMTlhODcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvUmVhZG1lLnR4dApAQCAtMCwwICsxLDExMSBAQAorUGFja2FnZSA6IEV4dGVuZGVkIEZpbGUgTWFuYWdlciBFRk0gMS4xLjENCisNCitWZXJzaW9uIDEuMSBjcmVhdGVkIGZyb20gMS4wIGJldGEgYnkgS3J6eXN6dG9mIEtvdG93aWN6IDxrb3RvQHdlYndvcmtlcnMucGw+DQorDQorT3ZlcnZpZXcgOg0KKy0tLS0tLS0tLS0NCisNCitFeHRlbmRlZCBGaWxlIE1hbmFnZXIgaXMgYW4gYWR2YW5jZWQgcGx1Z2luIGZvciBYaW5oYSANCisNCitJdCB3b3JrcyBpbiB0d28gZGlmZmVyZW50IG1vZGVzLg0KKzEpLiBJbnNlcnQgSW1hZ2UgTW9kZSBhbmQgDQorMikuIEluc2VydCBGaWxlIExpbmsgTW9kZS4NCisNCitJbiBJbnNlcnQgSW1hZ2UgTW9kZSwgaXQgcmVwbGFjZXMgdGhlIGJhc2ljIGluc2VydCBpbWFnZSBmdW5jdGlvbmFsaXR5IG9mIFhpbmhhIHdpdGggaXRzIGFkdmFuY2VkIGltYWdlIG1hbmFnZXIuDQorDQorSWYgSW5zZXJ0IEZpbGUgTGluayBNb2RlIGlzIGVuYWJsZWQsIGEgbmV3IGljb24gd2lsbCBiZSBhZGRlZCB0byB0aGUgdG9vbGJhciB3aXRoIGFkdmFuY2VkIGZpbGUgbGlua2luZyBjYXBhYmlsaXR5Lg0KKw0KKw0KKw0KK0NvbXBsZXRlIEZlYXR1cmVzIDoNCistLS0tLS0tLS0tLS0tLS0tLS0tDQorKiBFYXN5IGNvbmZpZy5pbmMgZmlsZSB0aGF0IGVuYWJsZXMgaW5kaXZpZHVhbCBvcHRpb25zIGZvciBib3RoIG1vZGVzLg0KKyogVGh1bW5haWwgVmlldyANCisqIExpc3QgVmlldyANCisqIE5pY2UgaWNvbnMgZm9yIGJvdGggdmlld3MgDQorKiBDcmVhdGUgRm9sZGVycyANCisqIFZlcnRpY2FsIFNjcm9sbGluZyANCisqIEFsbG93ZWQgZXh0ZW5zaW9ucyB0byB2aWV3IG9yIHVwbG9hZC4NCisqIEZpbGUgVXBsb2FkcyANCisqIE1heCBGaWxlIHVwbG9hZCBsaW1pdCANCisqIE1heCBVcGxvYWQgRm9sZGVyIHNpemUgKEluY2x1ZGluZyBhbGwgc3ViZm9sZGVycyBhbmQgZmlsZXMuIEEgbXVzdCBzZWUgb3B0aW9uLikNCisqIER5bmFtaWMgZGlzcGxheSBvZiBhdmFpbGFibGUgZnJlZSBzcGFjZSBpbiB0aGUgVXBsb2FkIEZvbGRlciANCisqIER5bmFtaWMgVGh1bWJuYWlscyB1c2luZyBJbWFnZSBsaWJyYXJpZXMgb3IgYnJvd3NlciByZXNpemUgDQorKiBJbWFnZSBFZGl0b3IgKEFjdHVhbGx5IGRvbmUgYnkgV2VpLi4uYSBncmVhdCBhZGRvbikgDQorKiBDYW4gYmUgdXNlZCB0byBpbnNlcnQgaW1hZ2VzIGFsb25nIHdpdGggcHJvcGVydGllcy4gDQorKiBDYW4gYmUgdXNlZCB0byBpbnNlcnQgbGluayB0byBub24taW1hZ2UgZmlsZXMgbGlrZSBwZGYgb3IgemlwLg0KKyogWW91IGNhbiBzcGVjaWZ5IGltYWdlIG1hcmdpbiAvIHBhZGRpbmcgLyBiYWNrZ3JvdW5kIGFuZCBib3JkZXIgY29sb3JzDQorKiBZb3UgbWF5IGVkaXQgQWx0L3RpdGxlIHRhZ3MgZm9yIGluc2VydGVkIGltYWdlcw0KKw0KKyhNb3N0IG9mIHRoZSBmZWF0dXJlcyBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCBhcyBuZWVkZWQpDQorDQorSW5zdGFsbGF0aW9uIDoNCistLS0tLS0tLS0tLS0tLQ0KKw0KK0luc3RhbGxpbmcgaW52b2x2ZXMgZXh0cmFjdGluZyB0aGUgYXJjaGl2ZSB0byAncGx1Z2lucycgc3ViZGlyZWN0b3J5IG9mIFhpbmhhDQorYW5kIHNlbGVjdGluZyB0aGUgcGx1Z2luIGluIGFwcHJvcHJpYXRlIHhpbmhhX3BsdWdpbnMgbGlzdC4NCisNCitQbHVnaW4gbWF5IGJlIGNvbmZpZ3VyZWQgdmlhIHhpbmhhX2NvbmZpZy5FeHRlbmRlZEZpbGVNYW5hZ2VyIG9iamVjdC4NCitMb29rIGludG8gSW1hZ2VNYW5hZ2VyIHBsdWdpbiBkb2N1bWVudGF0aW9uIGFzIHRoaXMgcGx1Z2luIHVzZXMgYWxtb3N0IGlkZW50aWNhbA0KK3NldHRpbmdzLiBBbGwgYXZhaWxhYmxlIG9wdGlvbnMgY2FuIGJlIGZvdW5kIGluIHRoZSBmaWxlIGNvbmZpZy5pbmMucGhwLg0KKw0KKy8vIG9ubHkgc25pcHBldHMgb2YgY29kZSBmcm9tIGluaXRpYWxpemluZyBmaWxlIHNob3duIGJlbG93DQorDQorDQorICB4aW5oYV9wbHVnaW5zID0geGluaGFfcGx1Z2lucyA/IHhpbmhhX3BsdWdpbnMgOg0KKyAgWw0KKyAgICdDb250ZXh0TWVudScsDQorICAgJ1N1cGVyQ2xlYW4nLA0KKyAgICdDaGFyYWN0ZXJNYXAnLA0KKyAgICdHZXRIdG1sJywNCisgICAnRXh0ZW5kZWRGaWxlTWFuYWdlcicsDQorICAgLyonSW1hZ2VNYW5hZ2VyJywqLyAgLy8gcmVwbGFjZSBpbWFnZSBtYW5hZ2VyIHdpdGggRUZNDQorICAgJ0xpbmtlcicNCisgIF07DQorDQorLi4uDQorDQorLy9JZiB5b3UgZG9uJ3Qgd2FudCB0byBhZGQgYSBidXR0b24gZm9yIGxpbmtpbmcgZmlsZXMgYW5kIHVzZSBvbmx5IHRoZSBhZHZhbmNlZCBJbWFnZU1hbmFnZXINCit4aW5oYV9jb25maWcuRXh0ZW5kZWRGaWxlTWFuYWdlci51c2VfbGlua2VyID0gZmFsc2U7DQorLy8gcGFzcyB0aGUgY29uZmlndXJhdGlvbiB0byBwbHVnaW4NCitpZiAoeGluaGFfY29uZmlnLkV4dGVuZGVkRmlsZU1hbmFnZXIpIHsNCisgICAJICAgIHdpdGggKHhpbmhhX2NvbmZpZy5FeHRlbmRlZEZpbGVNYW5hZ2VyKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIDw/cGhwDQorDQorICAgICAgICAgICAgLy8gZGVmaW5lIGJhY2tlbmQgY29uZmlndXJhdGlvbiBmb3IgdGhlIHBsdWdpbg0KKyAgICAgICAgICAgICRJTUNvbmZpZyA9IGFycmF5KCk7DQorICAgICAgICAgICAgJElNQ29uZmlnWydpbWFnZXNfZGlyJ10gPSAnPGltYWdlcyBkaXI+JzsNCisgICAgICAgICAgICAkSU1Db25maWdbJ2ltYWdlc191cmwnXSA9ICc8aW1hZ2VzIHVybD4nOw0KKyAgICAgICAgICAgICRJTUNvbmZpZ1snZmlsZXNfZGlyJ10gPSAnPGZpbGVzIGRpcj4nOw0KKyAgICAgICAgICAgICRJTUNvbmZpZ1snZmlsZXNfdXJsJ10gPSAnPGZpbGVzIHVybD4nOw0KKyAgICAgICAgICAgICRJTUNvbmZpZ1sndGh1bWJuYWlsX3ByZWZpeCddID0gJ3RfJzsNCisgICAgICAgICAgICAkSU1Db25maWdbJ3RodW1ibmFpbF9kaXInXSA9ICd0JzsNCisgICAgICAgICAgICAkSU1Db25maWdbJ3Jlc2l6ZWRfcHJlZml4J10gPSAncmVzaXplZF8nOw0KKyAgICAgICAgICAgICRJTUNvbmZpZ1sncmVzaXplZF9kaXInXSA9ICcnOw0KKyAgICAgICAgICAgICRJTUNvbmZpZ1sndG1wX3ByZWZpeCddID0gJ190bXAnOw0KKyAgICAgICAgICAgICRJTUNvbmZpZ1snbWF4X2ZpbGVzaXplX2tiX2ltYWdlJ10gPSAyMDAwOw0KKyAgICAgICAgICAgIC8vIG1heGltdW0gc2l6ZSBmb3IgdXBsb2FkaW5nIGZpbGVzIGluICdpbnNlcnQgaW1hZ2UnIG1vZGUgKDIwMDAga0IgaGVyZSkNCisNCisgICAgICAgICAgICAkSU1Db25maWdbJ21heF9maWxlc2l6ZV9rYl9saW5rJ10gPSA1MDAwOw0KKyAgICAgICAgICAgIC8vIG1heGltdW0gc2l6ZSBmb3IgdXBsb2FkaW5nIGZpbGVzIGluICdpbnNlcnQgbGluaycgbW9kZSAoNTAwMCBrQiBoZXJlKQ0KKw0KKyAgICAgICAgICAgIC8vIE1heGltdW0gdXBsb2FkIGZvbGRlciBzaXplIGluIE1lZ2FieXRlcy4NCisgICAgICAgICAgICAvLyBVc2UgMCB0byBkaXNhYmxlIGxpbWl0DQorICAgICAgICAgICAgJElNQ29uZmlnWydtYXhfZm9sZGVyc2l6ZV9tYiddID0gMDsNCisgICAgICAgICAgICANCisgICAgICAgICAgICAkSU1Db25maWdbJ2FsbG93ZWRfaW1hZ2VfZXh0ZW5zaW9ucyddID0gYXJyYXkoImpwZyIsImdpZiIsInBuZyIpOw0KKyAgICAgICAgICAgICRJTUNvbmZpZ1snYWxsb3dlZF9saW5rX2V4dGVuc2lvbnMnXSA9IGFycmF5KCJqcGciLCJnaWYiLCJwZGYiLCJpcCIsInR4dCIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBzZCIsInBuZyIsImh0bWwiLCJzd2YiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4bWwiLCJ4bHMiKTsNCisNCisgICAgICAgICAgICByZXF1aXJlX29uY2UgJy9wYXRoL3RvL3hpbmhhL2NvbnRyaWIvcGhwLXhpbmhhLnBocCc7DQorICAgICAgICAgICAgeGluaGFfcGFzc190b19waHBfYmFja2VuZCgkSU1Db25maWcpOw0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgID8+DQorICAgICAgICB9DQorfQ0KKw0KKz09PT09DQorYWZydXNvZnRAZ21haWwuY29tIC0gYXV0aG9yIG9mIEVGTSAxLjAgYmV0YQ0KK2tvdG9Ad2Vid29ya2Vycy5wbCAtIEVGTSAxLjEgKG1vc3Qgb2YgdGhlIGNvZGUgdGFrZW4gZnJvbSBYaW5oYSBjb2RlYmFzZSkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvYXNzZXRzL0VkaXRvckNvbnRlbnQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvYXNzZXRzL0VkaXRvckNvbnRlbnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY0YTg1YQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvRWRpdG9yQ29udGVudC5qcwpAQCAtMCwwICsxLDcwNyBAQAorLyoqCisgKiBJbWFnZUVkaXRvciBJbnRlcmZhY2UgZmlsZS4KKyAqIEF1dGhvcnM6IFdlaSBaaHVvLCBBZnJ1LCBLcnp5c3p0b2YgS290b3dpY3oKKyAqIFZlcnNpb246IFVwZGF0ZWQgb24gMDgtMDEtMjAwNSBieSBBZnJ1CisgKiBWZXJzaW9uOiBVcGRhdGVkIG9uIDIwLTA2LTIwMDYgYnkgS3J6eXN6dG9mIEtvdG93aWN6CisgKiBWZXJzaW9uOiBVcGRhdGVkIG9uIDA0LTExLTIwMDcgYnkgUmFpbXVuZCBNZXllcgorICogUGFja2FnZTogRXh0ZW5kZWRGaWxlTWFuYWdlciAoRUZNIDEuNCkKKyAqIGh0dHA6Ly93d3cuYWZydXNvZnQuY29tL2h0bWxhcmVhCisgKi8KKworZnVuY3Rpb24gTU1fZmluZE9iaihuLCBkKSB7IC8vdjQuMDEKKyAgdmFyIHAsaSx4OyAgaWYoIWQpIGQ9ZG9jdW1lbnQ7IGlmKChwPW4uaW5kZXhPZigiPyIpKT4wJiZwYXJlbnQuZnJhbWVzLmxlbmd0aCkgeworICAgIGQ9cGFyZW50LmZyYW1lc1tuLnN1YnN0cmluZyhwKzEpXS5kb2N1bWVudDsgbj1uLnN1YnN0cmluZygwLHApO30KKyAgaWYoISh4PWRbbl0pJiZkLmFsbCkgeD1kLmFsbFtuXTsgZm9yIChpPTA7IXgmJmk8ZC5mb3Jtcy5sZW5ndGg7aSsrKSB4PWQuZm9ybXNbaV1bbl07CisgIGZvcihpPTA7IXgmJmQubGF5ZXJzJiZpPGQubGF5ZXJzLmxlbmd0aDtpKyspIHg9TU1fZmluZE9iaihuLGQubGF5ZXJzW2ldLmRvY3VtZW50KTsKKyAgaWYoIXggJiYgZC5nZXRFbGVtZW50QnlJZCkgeD1kLmdldEVsZW1lbnRCeUlkKG4pOyByZXR1cm4geDsKK30KKwordmFyIHBpY194LCBwaWNfeTsKK2Z1bmN0aW9uIFA3X1NuYXAoKSB7IC8vdjIuNjIgYnkgUFZJSQorICB2YXIgeCx5LG94LGJ4LG95LHAsdHgsYSxiLGssZCxkYSxlLGVsLGFyZ3M9UDdfU25hcC5hcmd1bWVudHM7YT1wYXJzZUludChhKTsKKyAgZm9yIChrPTA7IGs8KGFyZ3MubGVuZ3RoLTMpOyBrKz00KQorICAgaWYgKChnPU1NX2ZpbmRPYmooYXJnc1trXSkpIT1udWxsKSB7CisgICAgZWw9ZXZhbChNTV9maW5kT2JqKGFyZ3NbaysxXSkpOworICAgIGE9cGFyc2VJbnQoYXJnc1trKzJdKTtiPXBhcnNlSW50KGFyZ3NbayszXSk7CisgICAgeD0wO3k9MDtveD0wO295PTA7cD0iIjt0eD0xO2RhPSJkb2N1bWVudC5hbGxbJyIrYXJnc1trXSsiJ10iOworICAgIGlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKSB7CisgICAgIGQ9ImRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCciK2FyZ3Nba10rIicpWzBdIjsKKyAgICAgaWYoIWV2YWwoZCkpIHtkPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnIithcmdzW2tdKyInKSI7aWYoIWV2YWwoZCkpIHtkPWRhO319CisgICAgfWVsc2UgaWYoZG9jdW1lbnQuYWxsKSB7ZD1kYTt9CisgICAgaWYgKGRvY3VtZW50LmFsbCB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCkgeworICAgICB3aGlsZSAodHg9PTEpIHtwKz0iLm9mZnNldFBhcmVudCI7CisgICAgICBpZihldmFsKGQrcCkpIHt4Kz1wYXJzZUludChldmFsKGQrcCsiLm9mZnNldExlZnQiKSk7eSs9cGFyc2VJbnQoZXZhbChkK3ArIi5vZmZzZXRUb3AiKSk7CisgICAgICB9ZWxzZXt0eD0wO319CisgICAgIG94PXBhcnNlSW50KGcub2Zmc2V0TGVmdCk7b3k9cGFyc2VJbnQoZy5vZmZzZXRUb3ApO3ZhciB0dz14K294K3krb3k7CisgICAgIGlmKHR3PT0wIHx8IChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCJNU0lFIDQiKT4tMSAmJiBuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCJNYWMiKT4tMSkpIHsKKyAgICAgIG94PTA7b3k9MDtpZihnLnN0eWxlLmxlZnQpe3g9cGFyc2VJbnQoZy5zdHlsZS5sZWZ0KTt5PXBhcnNlSW50KGcuc3R5bGUudG9wKTsKKyAgICAgIH1lbHNle3ZhciB3MT1wYXJzZUludChlbC5zdHlsZS53aWR0aCk7Yng9KGE8MCk/LTUtdzE6LTEwOworICAgICAgYT0oTWF0aC5hYnMoYSk8MTAwMCk/MDphO2I9KE1hdGguYWJzKGIpPDEwMDApPzA6YjsKKyAgICAgIC8vYWxlcnQoZXZlbnQuY2xpZW50WCk7CisgICAgICBpZiAoZXZlbnQgPT0gbnVsbCkgeD1kb2N1bWVudC5ib2R5LnNjcm9sbExlZnQgKyBieDsKKyAgICAgICAgZWxzZSB4PWRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCArIGV2ZW50LmNsaWVudFggKyBieDsKKyAgICAgIGlmIChldmVudCA9PSBudWxsKSB5PWRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOworICAgICAgICBlbHNlIHk9ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgKyBldmVudC5jbGllbnRZO319CisgICB9ZWxzZSBpZiAoZG9jdW1lbnQubGF5ZXJzKSB7eD1nLng7eT1nLnk7dmFyIHEwPWRvY3VtZW50LmxheWVycyxkZD0iIjsKKyAgICBmb3IodmFyIHM9MDtzPHEwLmxlbmd0aDtzKyspIHtkZD0nZG9jdW1lbnQuJytxMFtzXS5uYW1lOworICAgICBpZihldmFsKGRkKycuZG9jdW1lbnQuJythcmdzW2tdKSkge3grPWV2YWwoZGQrJy5sZWZ0Jyk7eSs9ZXZhbChkZCsnLnRvcCcpO2JyZWFrO319fQorICAgaWYoZWwpIHtlPShkb2N1bWVudC5sYXllcnMpP2VsOmVsLnN0eWxlOworICAgdmFyIHh4PXBhcnNlSW50KHgrb3grYSkseXk9cGFyc2VJbnQoeStveStiKTsKKyAgIGlmKG5hdmlnYXRvci5hcHBOYW1lPT0iTmV0c2NhcGUiICYmIHBhcnNlSW50KG5hdmlnYXRvci5hcHBWZXJzaW9uKT40KXt4eCs9InB4Ijt5eSs9InB4Ijt9CisgICBpZihuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCJNU0lFIDUiKT4tMSAmJiBuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCJNYWMiKT4tMSl7CisgICAgeHgrPXBhcnNlSW50KGRvY3VtZW50LmJvZHkubGVmdE1hcmdpbik7eXkrPXBhcnNlSW50KGRvY3VtZW50LmJvZHkudG9wTWFyZ2luKTsKKyAgICB4eCs9InB4Ijt5eSs9InB4Ijt9ZS5sZWZ0PXh4O2UudG9wPXl5O30KKyAgICBwaWNfeCA9IHBhcnNlSW50KHh4KTsgcGljX3kgPSBwYXJzZUludCh5eSk7CisgICAgfQorfQorCit2YXIgaWU9ZG9jdW1lbnQuYWxsOwordmFyIG5zNj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCYmIWRvY3VtZW50LmFsbDsKKwordmFyIGRyYWdhcHByb3ZlZD1mYWxzZTsKK3ZhciB6LHgseSxzdGF0dXMsIGFudCwgY2FudmFzLCBjb250ZW50LCBwaWNfd2lkdGgsIHBpY19oZWlnaHQsIGltYWdlLCByZXNpemVIYW5kbGUsIG9hX3csIG9hX2gsIG9hX3gsIG9hX3ksIG14MiwgbXkyOworCitmdW5jdGlvbiBpbml0X3Jlc2l6ZSgpCit7CisgICAgLy9pZihtb2RlID09ICJzY2FsZSIpCisgICAgLy97CisgICAgICAgIFA3X1NuYXAoJ3RoZUltYWdlJywnYW50JywwLDApOworCisgICAgICAgIGlmIChjYW52YXMgPT0gbnVsbCkKKyAgICAgICAgICAgIGNhbnZhcyA9IE1NX2ZpbmRPYmooImltZ0NhbnZhcyIpOworCisgICAgICAgIGlmIChwaWNfd2lkdGggPT0gbnVsbCB8fCBwaWNfaGVpZ2h0ID09IG51bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGltYWdlID0gTU1fZmluZE9iaigidGhlSW1hZ2UiKTsKKyAgICAgICAgICAgIHBpY193aWR0aCA9IGltYWdlLndpZHRoOworICAgICAgICAgICAgcGljX2hlaWdodCA9IGltYWdlLmhlaWdodDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhbnQgPT0gbnVsbCkKKyAgICAgICAgICAgIGFudCA9IE1NX2ZpbmRPYmooImFudCIpOworCisgICAgICAgIGFudC5zdHlsZS5sZWZ0ID0gcGljX3g7IGFudC5zdHlsZS50b3AgPSBwaWNfeTsKKyAgICAgICAgYW50LnN0eWxlLndpZHRoID0gcGljX3dpZHRoOyBhbnQuc3R5bGUuaGVpZ2h0ID0gcGljX2hlaWdodDsKKyAgICAgICAgYW50LnN0eWxlLnZpc2liaWxpdHkgPSAidmlzaWJsZSI7CisKKyAgICAgICAgZHJhd0JvdW5kSGFuZGxlKCk7CisgICAgICAgIGpnX2RvYy5wYWludCgpOworICAgIC8vfQorfQorCitpbml0RWRpdG9yID0gZnVuY3Rpb24gKCkKK3sKKyAgICBpbml0X2Nyb3AoKTsKKyAgICBpbml0X3Jlc2l6ZSgpOworICAgIHZhciBtYXJrZXJJbWcgPSBNTV9maW5kT2JqKCdtYXJrZXJJbWcnLCB3aW5kb3cudG9wLmRvY3VtZW50KTsKKworICAgIGlmIChtYXJrZXJJbWcuc3JjLmluZGV4T2YoImltZy90X3doaXRlLmdpZiIpPjApCisgICAgICAgIHRvZ2dsZU1hcmtlcigpIDsKKwl2YXIgdGhlSW1hZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGhlSW1hZ2UnKTsKKwl0aGVJbWFnZS5fd2lkdGggPSB0aGVJbWFnZS53aWR0aDsKKwl0aGVJbWFnZS5faGVpZ2h0ID0gdGhlSW1hZ2UuaGVpZ2h0OworfQorCitmdW5jdGlvbiBpbml0X2Nyb3AoKQoreworICAgIC8vaWYobW9kZSA9PSAiY3JvcCIpIHsKKyAgICAgICAgUDdfU25hcCgndGhlSW1hZ2UnLCdhbnQnLDAsMCk7CisgICAgLy99Cit9CisKK2Z1bmN0aW9uIHNldE1vZGUobmV3TW9kZSkKK3sKKyAgICBtb2RlID0gbmV3TW9kZTsKKyAgICByZXNldCgpOworfQorCitmdW5jdGlvbiByZXNldCgpCit7CisgICAgaWYgKGFudCA9PSBudWxsKQorICAgICAgICBhbnQgPSBNTV9maW5kT2JqKCJhbnQiKTsKKworICAgIGFudC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CisgICAgYW50LnN0eWxlLmxlZnQgPSAwOworICAgIGFudC5zdHlsZS50b3AgPSAwOworICAgIGFudC5zdHlsZS53aWR0aCA9IDA7CisgICAgYW50LnN0eWxlLmhlaWdodCA9IDA7CisKKyAgICBteDIgPSBudWxsOworICAgIG15MiA9IG51bGw7CisKKyAgICBqZ19kb2MuY2xlYXIoKTsKKyAgICBpZihtb2RlICE9ICdtZWFzdXJlJykKKyAgICAgICAgc2hvd1N0YXR1cygpOworCisgICAgaWYobW9kZSA9PSAic2NhbGUiKSB7CisgICAgICAgIGluaXRfcmVzaXplKCk7CisgICAgfQorCisgICAgUDdfU25hcCgndGhlSW1hZ2UnLCdhbnQnLDAsMCk7Cit9CisKK2Z1bmN0aW9uIHRvZ2dsZU1hcmtlcigpCit7CisgICAgaWYgKGFudCA9PSBudWxsKQorICAgICAgICBhbnQgPSBNTV9maW5kT2JqKCJhbnQiKTsKKworICAgIGlmKGFudC5jbGFzc05hbWU9PSJzZWxlY3Rpb24iKQorICAgICAgICBhbnQuY2xhc3NOYW1lPSJzZWxlY3Rpb25XaGl0ZSI7CisgICAgZWxzZQorICAgICAgICBhbnQuY2xhc3NOYW1lPSJzZWxlY3Rpb24iOworCisgICAgaWYgKGpnX2RvYy5nZXRDb2xvcigpID09ICIjMDAwMDAwIikKKyAgICAgICAgamdfZG9jLnNldENvbG9yKCIjRkZGRkZGIik7CisgICAgZWxzZQorICAgICAgICBqZ19kb2Muc2V0Q29sb3IoIiMwMDAwMDAiKTsKKworICAgIGRyYXdCb3VuZEhhbmRsZQorICAgIGpnX2RvYy5wYWludCgpOworfQorCitmdW5jdGlvbiBtb3ZlKGUpCit7CisgICAgaWYgKGRyYWdhcHByb3ZlZCkKKyAgICB7CisgICAgICAgIHZhciB3ID0gbnM2PyB0ZW1wMStlLnBhZ2VYIC0geCA6IHRlbXAxK2V2ZW50LmNsaWVudFggKyBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQtIHg7CisgICAgICAgIHZhciBoID0gbnM2PyB0ZW1wMitlLnBhZ2VZIC0geSA6IHRlbXAyK2V2ZW50LmNsaWVudFkgICsgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgLSB5OworCisgICAgICAgIGlmIChhbnQgIT0gbnVsbCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHcgPj0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhbnQuc3R5bGUubGVmdCA9IHg7CisgICAgICAgICAgICAgICAgYW50LnN0eWxlLndpZHRoID0gdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhbnQuc3R5bGUubGVmdCA9IHgrdzsKKyAgICAgICAgICAgICAgICBhbnQuc3R5bGUud2lkdGggPSAtMSp3OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaCA+PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFudC5zdHlsZS50b3AgPSB5OworICAgICAgICAgICAgICAgIGFudC5zdHlsZS5oZWlnaHQgPSBoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFudC5zdHlsZS50b3AgPSB5K2g7CisgICAgICAgICAgICAgICAgYW50LnN0eWxlLmhlaWdodCA9IC0xKmgKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNob3dTdGF0dXMoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlCisgICAgfQorfQorCitmdW5jdGlvbiBtb3ZlQ29udGVudChlKQoreworICAgIGlmIChkcmFnYXBwcm92ZWQpCisgICAgeworCisgICAgICAgIHZhciBkeCA9bnM2PyBvYV94ICsgZS5jbGllbnRYLXg6IG9hX3ggKyBldmVudC5jbGllbnRYLXgKKyAgICAgICAgdmFyIGR5ID1uczY/IG9hX3kgKyBlLmNsaWVudFkteSA6IG9hX3kgKyBldmVudC5jbGllbnRZLXkKKworICAgICAgICBhbnQuc3R5bGUubGVmdCA9IGR4OworICAgICAgICBhbnQuc3R5bGUudG9wID0gZHk7CisKKyAgICAgICAgc2hvd1N0YXR1cygpOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vQ29kZSBhZGQgZm9yIGNvbnN0cmFpbnRzIGJ5IEZyw6lkw6lyaWMgS2xlZSA8ZmtsZWVAaXN1aXNzZS5jb20+CitmdW5jdGlvbiBtb3ZlSGFuZGxlKGUpCit7CisgICAgaWYgKGRyYWdhcHByb3ZlZCkKKyAgICB7CisgICAgICAgIHZhciB3ID0gbnM2PyBlLmNsaWVudFggLSB4IDogZXZlbnQuY2xpZW50WCAtIHg7CisgICAgICAgIHZhciBoID0gbnM2PyBlLmNsaWVudFkgLSB5IDogZXZlbnQuY2xpZW50WSAtIHk7CisKKyAgICAgICAgdmFyIGNvbnN0cmFpbmVkID0gTU1fZmluZE9iaignY29uc3RQcm9wJywgd2luZG93LnRvcC5kb2N1bWVudCk7CisgICAgICAgIHZhciBvcmdpbmFsX2hlaWdodCA9IGRvY3VtZW50LnRoZUltYWdlLmhlaWdodCA7CisgICAgICAgIHZhciBvcmdpbmFsX3dpZHRoID0gZG9jdW1lbnQudGhlSW1hZ2Uud2lkdGggOworICAgICAgICByYXBwID0gb3JnaW5hbF93aWR0aC9vcmdpbmFsX2hlaWdodCA7CisgICAgICAgIHJhcHBfaW52ID0gb3JnaW5hbF9oZWlnaHQgLyBvcmdpbmFsX3dpZHRoIDsKKworICAgICAgICBzd2l0Y2gocmVzaXplSGFuZGxlKQorICAgICAgICB7CisKKyAgICAgICAgICAgIGNhc2UgInMtcmVzaXplIjoKKyAgICAgICAgICAgICAgICBpZiAob2FfaCArIGggPj0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFudC5zdHlsZS5oZWlnaHQgPSBvYV9oICsgaDsKKyAgICAgICAgICAgICAgICAgICAgaWYoY29uc3RyYWluZWQuY2hlY2tlZCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLndpZHRoID0gcmFwcCAqIChvYV9oICsgaCkgOworICAgICAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLmxlZnQgPSBvYV94IC0gcmFwcCAqIGgvMjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiZS1yZXNpemUiOgorICAgICAgICAgICAgICAgIGlmKG9hX3cgKyB3ID49IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUud2lkdGggPSBvYV93ICsgdzsKKyAgICAgICAgICAgICAgICAgICAgaWYoY29uc3RyYWluZWQuY2hlY2tlZCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLmhlaWdodCA9IHJhcHBfaW52ICogKG9hX3cgKyB3KSA7CisgICAgICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUudG9wID0gb2FfeSAtIHJhcHBfaW52ICogdy8yOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJuLXJlc2l6ZSI6CisgICAgICAgICAgICAgICAgaWYgKG9hX2ggLSBoID49IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUudG9wID0gb2FfeSArIGg7CisgICAgICAgICAgICAgICAgICAgIGFudC5zdHlsZS5oZWlnaHQgPSBvYV9oIC0gaDsKKyAgICAgICAgICAgICAgICAgICAgaWYoY29uc3RyYWluZWQuY2hlY2tlZCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLndpZHRoID0gcmFwcCAqIChvYV9oIC0gaCkgOworICAgICAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLmxlZnQgPSBvYV94ICsgcmFwcCAqIGgvMjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAidy1yZXNpemUiOgorICAgICAgICAgICAgICAgIGlmKG9hX3cgLSB3ID49IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUubGVmdCA9IG9hX3ggKyB3OworICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUud2lkdGggPSBvYV93IC0gdzsKKyAgICAgICAgICAgICAgICAgICAgaWYoY29uc3RyYWluZWQuY2hlY2tlZCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLmhlaWdodCA9IHJhcHBfaW52ICogKG9hX3cgLSB3KSA7CisgICAgICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUudG9wID0gb2FfeSArIHJhcHBfaW52ICogdy8yOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9YnJlYWs7CisgICAgICAgICAgICBjYXNlICJudy1yZXNpemUiOgorICAgICAgICAgICAgICAgIGlmKG9hX2ggLSBoID49IDAgJiYgb2FfdyAtIHcgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUubGVmdCA9IG9hX3ggKyB3OworICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUud2lkdGggPSBvYV93IC0gdzsKKyAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLnRvcCA9IG9hX3kgKyBoOworICAgICAgICAgICAgICAgICAgICBpZihjb25zdHJhaW5lZC5jaGVja2VkKQorICAgICAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLmhlaWdodCA9IHJhcHBfaW52ICogKG9hX3cgLSB3KSA7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGFudC5zdHlsZS5oZWlnaHQgPSBvYV9oIC0gaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIm5lLXJlc2l6ZSI6CisgICAgICAgICAgICAgICAgaWYgKG9hX2ggLSBoID49IDAgJiYgb2FfdyArIHcgPj0gMCl7CisgICAgICAgICAgICAgICAgICAgIGFudC5zdHlsZS50b3AgPSBvYV95ICsgaDsKKyAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLndpZHRoID0gb2FfdyArIHc7CisgICAgICAgICAgICAgICAgICAgIGlmKGNvbnN0cmFpbmVkLmNoZWNrZWQpCisgICAgICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUuaGVpZ2h0ID0gcmFwcF9pbnYgKiAob2FfdyArIHcpIDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLmhlaWdodCA9IG9hX2ggLSBoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgInNlLXJlc2l6ZSI6CisgICAgICAgICAgICAgICAgaWYgKG9hX2ggKyBoID49IDAgJiYgb2FfdyArIHcgPj0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFudC5zdHlsZS53aWR0aCA9IG9hX3cgKyB3OworICAgICAgICAgICAgICAgICAgICBpZihjb25zdHJhaW5lZC5jaGVja2VkKQorICAgICAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLmhlaWdodCA9IHJhcHBfaW52ICogKG9hX3cgKyB3KSA7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGFudC5zdHlsZS5oZWlnaHQgPSBvYV9oICsgaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJzdy1yZXNpemUiOgorICAgICAgICAgICAgICAgIGlmIChvYV9oICsgaCA+PSAwICYmIG9hX3cgLSB3ID49IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUubGVmdCA9IG9hX3ggKyB3OworICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUud2lkdGggPSBvYV93IC0gdzsKKyAgICAgICAgICAgICAgICAgICAgaWYoY29uc3RyYWluZWQuY2hlY2tlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFudC5zdHlsZS5oZWlnaHQgPSByYXBwX2ludiAqIChvYV93IC0gdykgOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgIGFudC5zdHlsZS5oZWlnaHQgPSBvYV9oICsgaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzaG93U3RhdHVzKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIH0KK30KKworZnVuY3Rpb24gZHJhZ3MoZSkKK3sKKyAgICBpZiAoIWllJiYhbnM2KQorICAgICAgICByZXR1cm4KKworICAgIHZhciBmaXJlZG9iaj1uczY/IGUudGFyZ2V0IDogZXZlbnQuc3JjRWxlbWVudAorICAgIHZhciB0b3BlbGVtZW50PW5zNj8gIkhUTUwiIDogIkJPRFkiCisKKyAgICB3aGlsZSAoZmlyZWRvYmoudGFnTmFtZSE9dG9wZWxlbWVudCYmCisgICAgICAgICAgICAhKGZpcmVkb2JqLmNsYXNzTmFtZT09ImNyb3AiCisgICAgICAgICAgICAgICAgfHwgZmlyZWRvYmouY2xhc3NOYW1lPT0iaGFuZGxlQm94IgorICAgICAgICAgICAgICAgIHx8IGZpcmVkb2JqLmNsYXNzTmFtZT09InNlbGVjdGlvbiIgfHwgZmlyZWRvYmouY2xhc3NOYW1lPT0ic2VsZWN0aW9uV2hpdGUiKSkKKyAgICB7CisgICAgICAgIGZpcmVkb2JqPW5zNj8gZmlyZWRvYmoucGFyZW50Tm9kZSA6IGZpcmVkb2JqLnBhcmVudEVsZW1lbnQKKyAgICB9CisKKyAgICBpZihmaXJlZG9iai5jbGFzc05hbWU9PSJoYW5kbGVCb3giKSB7CisKKyAgICAgICAgaWYoY29udGVudCAhPSBudWxsKSB7CisgICAgICAgICAgICBpZihjb250ZW50LndpZHRoICE9IG51bGwgJiYgY29udGVudC5oZWlnaHQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNvbnRlbnQud2lkdGggPSAwOworICAgICAgICAgICAgICAgIGNvbnRlbnQuaGVpZ2h0ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXNpemVIYW5kbGUgPSBmaXJlZG9iai5pZDsKKworICAgICAgICB4PW5zNj8gZS5jbGllbnRYOiBldmVudC5jbGllbnRYCisgICAgICAgIHk9bnM2PyBlLmNsaWVudFk6IGV2ZW50LmNsaWVudFkKKworICAgICAgICBvYV93ID0gcGFyc2VJbnQoYW50LnN0eWxlLndpZHRoKTsKKyAgICAgICAgb2FfaCA9IHBhcnNlSW50KGFudC5zdHlsZS5oZWlnaHQpOworICAgICAgICBvYV94ID0gcGFyc2VJbnQoYW50LnN0eWxlLmxlZnQpOworICAgICAgICBvYV95ID0gcGFyc2VJbnQoYW50LnN0eWxlLnRvcCk7CisKKyAgICAgICAgZHJhZ2FwcHJvdmVkPXRydWUKKyAgICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmU9bW92ZUhhbmRsZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgaWYoKGZpcmVkb2JqLmNsYXNzTmFtZSA9PSAic2VsZWN0aW9uIiB8fCBmaXJlZG9iai5jbGFzc05hbWU9PSJzZWxlY3Rpb25XaGl0ZSIpJiYgbW9kZSA9PSAiY3JvcCIpIHsKKworICAgICAgICB4PW5zNj8gZS5jbGllbnRYOiBldmVudC5jbGllbnRYCisgICAgICAgIHk9bnM2PyBlLmNsaWVudFk6IGV2ZW50LmNsaWVudFkKKworICAgICAgICBvYV94ID0gcGFyc2VJbnQoYW50LnN0eWxlLmxlZnQpOworICAgICAgICBvYV95ID0gcGFyc2VJbnQoYW50LnN0eWxlLnRvcCk7CisKKyAgICAgICAgZHJhZ2FwcHJvdmVkPXRydWUKKyAgICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmU9bW92ZUNvbnRlbnQ7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZWxzZQorICAgIGlmIChmaXJlZG9iai5jbGFzc05hbWU9PSJjcm9wIiAmJiBtb2RlID09ICJjcm9wIikKKyAgICB7CisgICAgICAgIGlmKGNvbnRlbnQgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYoY29udGVudC53aWR0aCAhPSBudWxsICYmIGNvbnRlbnQuaGVpZ2h0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBjb250ZW50LndpZHRoID0gMDsKKyAgICAgICAgICAgICAgICBjb250ZW50LmhlaWdodCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RhdHVzID09IG51bGwpCisgICAgICAgICAgICBzdGF0dXMgPSBNTV9maW5kT2JqKCJzdGF0dXMiKTsKKworICAgICAgICBpZiAoYW50ID09IG51bGwpCisgICAgICAgICAgICBhbnQgPSBNTV9maW5kT2JqKCJhbnQiKTsKKworICAgICAgICBpZiAoY2FudmFzID09IG51bGwpCisgICAgICAgICAgICBjYW52YXMgPSBNTV9maW5kT2JqKCJpbWdDYW52YXMiKTsKKyAgICAgICAgaWYoY29udGVudCA9PSBudWxsKSB7CisgICAgICAgICAgICBjb250ZW50ID0gTU1fZmluZE9iaigiY3JvcENvbnRlbnQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwaWNfd2lkdGggPT0gbnVsbCB8fCBwaWNfaGVpZ2h0ID09IG51bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGltYWdlID0gTU1fZmluZE9iaigidGhlSW1hZ2UiKTsKKyAgICAgICAgICAgIHBpY193aWR0aCA9IGltYWdlLndpZHRoOworICAgICAgICAgICAgcGljX2hlaWdodCA9IGltYWdlLmhlaWdodDsKKyAgICAgICAgfQorCisgICAgICAgIGFudC5zdHlsZS52aXNpYmlsaXR5ID0gInZpc2libGUiOworCisgICAgICAgIG9iaiA9IGZpcmVkb2JqOworICAgICAgICBkcmFnYXBwcm92ZWQ9dHJ1ZQorICAgICAgICB6PWZpcmVkb2JqCisgICAgICAgIHRlbXAxPXBhcnNlSW50KHouc3R5bGUubGVmdCswKQorICAgICAgICB0ZW1wMj1wYXJzZUludCh6LnN0eWxlLnRvcCswKQorICAgICAgICAgIAorICAgICAgICB4PW5zNj8gZS5wYWdlWDogZXZlbnQuY2xpZW50WCArIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdAorICAgICAgICB5PW5zNj8gZS5wYWdlWTogZXZlbnQuY2xpZW50WSArIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wCisgICAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlPW1vdmUKKyAgICAgICAgcmV0dXJuIGZhbHNlCisgICAgfQorICAgICAgICBlbHNlIGlmKGZpcmVkb2JqLmNsYXNzTmFtZT09ImNyb3AiICYmIG1vZGUgPT0gIm1lYXN1cmUiKSB7CisKKyAgICAgICAgICAgIGlmIChhbnQgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICBhbnQgPSBNTV9maW5kT2JqKCJhbnQiKTsKKworICAgICAgICAgICAgaWYgKGNhbnZhcyA9PSBudWxsKQorICAgICAgICAgICAgICAgIGNhbnZhcyA9IE1NX2ZpbmRPYmooImltZ0NhbnZhcyIpOworCisgICAgICAgICAgICB4PW5zNj8gZS5wYWdlWDogZXZlbnQuY2xpZW50WCArIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdAorICAgICAgICAgICAgeT1uczY/IGUucGFnZVk6IGV2ZW50LmNsaWVudFkgKyBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcAorCisgICAgICAgICAgICBkcmFnYXBwcm92ZWQ9dHJ1ZQorICAgICAgICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmU9bWVhc3VyZQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2UKKyAgICAgICAgfQorfQorCitmdW5jdGlvbiBtZWFzdXJlKGUpCit7CisgICAgaWYgKGRyYWdhcHByb3ZlZCkKKyAgICB7CisgICAgICAgIG14MiA9IG5zNj8gZS5wYWdlWCA6IGV2ZW50LmNsaWVudFggKyBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQ7CisgICAgICAgIG15MiA9IG5zNj8gZS5wYWdlWSA6IGV2ZW50LmNsaWVudFkgKyBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDsKKworICAgICAgICBqZ19kb2MuY2xlYXIoKTsKKyAgICAgICAgamdfZG9jLnNldFN0cm9rZShTdHJva2UuRE9UVEVEKTsKKyAgICAgICAgamdfZG9jLmRyYXdMaW5lKHgseSxteDIsbXkyKTsKKyAgICAgICAgamdfZG9jLnBhaW50KCk7CisgICAgICAgIHNob3dTdGF0dXMoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworZnVuY3Rpb24gc2V0TWFya2VyKG54LG55LG53LG5oKQoreworICAgIGlmIChpc05hTihueCkpIG54ID0gMDsgCisgICAgaWYgKGlzTmFOKG55KSkgbnkgPSAwOyAKKyAgICBpZiAoaXNOYU4obncpKSBudyA9IDA7IAorICAgIGlmIChpc05hTihuaCkpIG5oID0gMDsgCisKKyAgICBpZiAoYW50ID09IG51bGwpCisgICAgICAgIGFudCA9IE1NX2ZpbmRPYmooImFudCIpOworCisgICAgaWYgKGNhbnZhcyA9PSBudWxsKQorICAgICAgICBjYW52YXMgPSBNTV9maW5kT2JqKCJpbWdDYW52YXMiKTsKKyAgICBpZihjb250ZW50ID09IG51bGwpIHsKKyAgICAgICAgY29udGVudCA9IE1NX2ZpbmRPYmooImNyb3BDb250ZW50Iik7CisgICAgfQorCisgICAgaWYgKHBpY193aWR0aCA9PSBudWxsIHx8IHBpY19oZWlnaHQgPT0gbnVsbCkKKyAgICB7CisgICAgICAgIGltYWdlID0gTU1fZmluZE9iaigidGhlSW1hZ2UiKTsKKyAgICAgICAgcGljX3dpZHRoID0gaW1hZ2Uud2lkdGg7CisgICAgICAgIHBpY19oZWlnaHQgPSBpbWFnZS5oZWlnaHQ7CisgICAgfQorCisgICAgYW50LnN0eWxlLnZpc2liaWxpdHkgPSAidmlzaWJsZSI7CisKKyAgICBueCA9IHBpY194ICsgbng7CisgICAgbnkgPSBwaWNfeSArIG55OworCisgICAgaWYgKG53ID49IDApCisgICAgeworICAgICAgICBhbnQuc3R5bGUubGVmdCA9IG54OworICAgICAgICBhbnQuc3R5bGUud2lkdGggPSBudzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYW50LnN0eWxlLmxlZnQgPSBueCtudzsKKyAgICAgICAgYW50LnN0eWxlLndpZHRoID0gLTEqbnc7CisgICAgfQorCisgICAgaWYgKG5oID49IDApCisgICAgeworICAgICAgICBhbnQuc3R5bGUudG9wID0gbnk7CisgICAgICAgIGFudC5zdHlsZS5oZWlnaHQgPSBuaDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYW50LnN0eWxlLnRvcCA9IG55K25oOworICAgICAgICBhbnQuc3R5bGUuaGVpZ2h0ID0gLTEqbmgKKyAgICB9CisKK30KKworZnVuY3Rpb24gbWF4KHgseSkKK3sKKyAgICBpZih5ID4geCkKKyAgICAgICAgcmV0dXJuIHg7CisgICAgZWxzZQorICAgICAgICByZXR1cm4geTsKK30KKworZnVuY3Rpb24gZHJhd0JvdW5kSGFuZGxlKCkKK3sKKyAgICBpZihhbnQgPT0gbnVsbCB8fCBhbnQuc3R5bGUgPT0gbnVsbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFyIGFoID0gcGFyc2VJbnQoYW50LnN0eWxlLmhlaWdodCk7CisgICAgdmFyIGF3ID0gcGFyc2VJbnQoYW50LnN0eWxlLndpZHRoKTsKKyAgICB2YXIgYXggPSBwYXJzZUludChhbnQuc3R5bGUubGVmdCk7CisgICAgdmFyIGF5ID0gcGFyc2VJbnQoYW50LnN0eWxlLnRvcCk7CisKKyAgICBqZ19kb2MuZHJhd0hhbmRsZShheC0xNSxheS0xNSwzMCwzMCwibnctcmVzaXplIik7IC8vdXBwZXIgbGVmdAorICAgIGpnX2RvYy5kcmF3SGFuZGxlKGF4LTE1LGF5K2FoLTE1LDMwLDMwLCJzdy1yZXNpemUiKTsgLy9sb3dlciBsZWZ0CisgICAgamdfZG9jLmRyYXdIYW5kbGUoYXgrYXctMTUsYXktMTUsMzAsMzAsIm5lLXJlc2l6ZSIpOyAvL3VwcGVyIHJpZ2h0CisgICAgamdfZG9jLmRyYXdIYW5kbGUoYXgrYXctMTUsYXkrYWgtMTUsMzAsMzAsInNlLXJlc2l6ZSIpOyAvL2xvd2VyIHJpZ2h0CisKKyAgICBqZ19kb2MuZHJhd0hhbmRsZShheCttYXgoMTUsYXcvMTApLGF5LTgsYXctMiptYXgoMTUsYXcvMTApLDgsIm4tcmVzaXplIik7IC8vdG9wIG1pZGRsZQorICAgIGpnX2RvYy5kcmF3SGFuZGxlKGF4K21heCgxNSxhdy8xMCksYXkrYWgsYXctMiptYXgoMTUsYXcvMTApLDgsInMtcmVzaXplIik7IC8vYm90dG9tIG1pZGRsZQorICAgIGpnX2RvYy5kcmF3SGFuZGxlKGF4LTgsIGF5K21heCgxNSxhaC8xMCksOCxhaC0yKm1heCgxNSxhaC8xMCksInctcmVzaXplIik7IC8vbGVmdCBtaWRkbGUKKyAgICBqZ19kb2MuZHJhd0hhbmRsZShheCthdywgYXkrbWF4KDE1LGFoLzEwKSw4LGFoLTIqbWF4KDE1LGFoLzEwKSwiZS1yZXNpemUiKTsgLy9yaWdodCBtaWRkbGUKKworICAgIGpnX2RvYy5kcmF3SGFuZGxlQm94KGF4LTQsYXktNCw4LDgsIm53LXJlc2l6ZSIpOyAvL3VwcGVyIGxlZnQKKyAgICBqZ19kb2MuZHJhd0hhbmRsZUJveChheC00LGF5K2FoLTQsOCw4LCJzdy1yZXNpemUiKTsgLy9sb3dlciBsZWZ0CisgICAgamdfZG9jLmRyYXdIYW5kbGVCb3goYXgrYXctNCxheS00LDgsOCwibmUtcmVzaXplIik7IC8vdXBwZXIgcmlnaHQKKyAgICBqZ19kb2MuZHJhd0hhbmRsZUJveChheCthdy00LGF5K2FoLTQsOCw4LCJzZS1yZXNpemUiKTsgLy9sb3dlciByaWdodAorCisgICAgamdfZG9jLmRyYXdIYW5kbGVCb3goYXgrYXcvMi00LGF5LTQsOCw4LCJuLXJlc2l6ZSIpOyAvL3RvcCBtaWRkbGUKKyAgICBqZ19kb2MuZHJhd0hhbmRsZUJveChheCthdy8yLTQsYXkrYWgtNCw4LDgsInMtcmVzaXplIik7IC8vYm90dG9tIG1pZGRsZQorICAgIGpnX2RvYy5kcmF3SGFuZGxlQm94KGF4LTQsIGF5K2FoLzItNCw4LDgsInctcmVzaXplIik7IC8vbGVmdCBtaWRkbGUKKyAgICBqZ19kb2MuZHJhd0hhbmRsZUJveChheCthdy00LCBheSthaC8yLTQsOCw4LCJlLXJlc2l6ZSIpOyAvL3JpZ2h0IG1pZGRsZQorfQorCitmdW5jdGlvbiBzaG93U3RhdHVzKCkKK3sKKyAgICBpZihhbnQgPT0gbnVsbCB8fCBhbnQuc3R5bGUgPT0gbnVsbCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHZhciB6b29tID0gMTAwIC8gcGFyc2VJbnQoIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3pvb20nKS52YWx1ZSwgMTAgKTsKKyAgICBpZihtb2RlID09ICJtZWFzdXJlIikgeworCisgICAgICAgIG14MSA9IHggLSBwaWNfeDsKKyAgICAgICAgbXkxID0geSAtIHBpY195OworCisgICAgICAgIG13ID0gbXgyIC0geDsKKyAgICAgICAgbWggPSBteTIgLSB5OworCisgICAgICAgIG1kID0gcGFyc2VJbnQoTWF0aC5zcXJ0KG13Km13ICsgbWgqbWgpKjEwMCkvMTAwOworCisgICAgICAgIG1hID0gKE1hdGguYXRhbigtMSptaC9tdykvTWF0aC5QSSkqMTgwOworICAgICAgICBpZihtdyA8IDAgJiYgbWggPCAwKQorICAgICAgICAgICAgbWEgPSBtYSsxODA7CisKKyAgICAgICAgaWYgKG13IDwwICYmIG1oID4wKQorICAgICAgICAgICAgbWEgPSBtYSAtIDE4MDsKKworICAgICAgICBtYSA9IHBhcnNlSW50KG1hKjEwMCkvMTAwOworCisgICAgICAgIGlmIChtX3N4ICE9IG51bGwgJiYgIWlzTmFOKG14MSkpCisgICAgICAgICAgICBtX3N4LnZhbHVlID0gbXgxICogem9vbSArInB4IjsKKyAgICAgICAgaWYgKG1fc3kgIT0gbnVsbCAmJiAhaXNOYU4obXkxKSkKKyAgICAgICAgICAgIG1fc3kudmFsdWUgPSBteTEgKiB6b29tKyJweCI7CisgICAgICAgIGlmKG1fdyAhPSBudWxsICYmICFpc05hTihtdykpCisgICAgICAgICAgICBtX3cudmFsdWUgPSBtdyAqIHpvb20gKyAicHgiOworICAgICAgICBpZihtX2ggIT0gbnVsbCAmJiAhaXNOYU4obWgpKQorICAgICAgICAgICAgbV9oLnZhbHVlID0gbWggKiB6b29tICsgInB4IjsKKworICAgICAgICBpZihtX2QgIT0gbnVsbCAmJiAhaXNOYU4obWQpKQorICAgICAgICAgICAgbV9kLnZhbHVlID0gbWQgKiB6b29tICsgInB4IjsKKyAgICAgICAgaWYobV9hICE9IG51bGwgJiYgIWlzTmFOKG1hKSkKKyAgICAgICAgICAgIG1fYS52YWx1ZSA9IG1hICsgIiI7CisKKyAgICAgICAgaWYocl9yYSAhPSBudWxsICYmIWlzTmFOKG1hKSkKKyAgICAgICAgICAgIHJfcmEudmFsdWUgPSBtYTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmFyIGFoID0gcGFyc2VJbnQoYW50LnN0eWxlLmhlaWdodCk7CisgICAgdmFyIGF3ID0gcGFyc2VJbnQoYW50LnN0eWxlLndpZHRoKTsKKyAgICB2YXIgYXggPSBwYXJzZUludChhbnQuc3R5bGUubGVmdCk7CisgICAgdmFyIGF5ID0gcGFyc2VJbnQoYW50LnN0eWxlLnRvcCk7CisKKyAgICB2YXIgY3ggPSBheC1waWNfeDwwPzA6YXgtcGljX3g7CisgICAgdmFyIGN5ID0gYXktcGljX3k8MD8wOmF5LXBpY195OworICAgIGN4ID0gY3g+cGljX3dpZHRoP3BpY193aWR0aDpjeDsKKyAgICBjeSA9IGN5PnBpY19oZWlnaHQ/cGljX2hlaWdodDpjeTsKKworICAgIHZhciBjdyA9IGF4LXBpY194PjA/YXc6YXctKHBpY194LWF4KTsKKyAgICB2YXIgY2ggPSBheS1waWNfeT4wP2FoOmFoLShwaWNfeS1heSk7CisKKyAgICBjaCA9IGF5K2FoPHBpY195K3BpY19oZWlnaHQ/Y2g6Y2gtKGF5K2FoLXBpY195LXBpY19oZWlnaHQpOworICAgIGN3ID0gYXgrYXc8cGljX3grcGljX3dpZHRoP2N3OmN3LShheCthdy1waWNfeC1waWNfd2lkdGgpOworCisgICAgY2ggPSBjaDwwPzA6Y2g7IGN3ID0gY3c8MD8wOmN3OworCisgICAgaWYgKGFudC5zdHlsZS52aXNpYmlsaXR5ID09ICJoaWRkZW4iKQorICAgIHsKKyAgICAgICAgY3ggPSAiIjsgY3kgPSAiIjsgY3c9IiI7IGNoPSIiOworICAgIH0KKworICAgIGlmKG1vZGUgPT0gJ2Nyb3AnKSB7CisgICAgICAgIGlmKHRfY3ggIT0gbnVsbCkKKyAgICAgICAgICAgIHRfY3gudmFsdWUgPSBjeCAqIHpvb20gOworICAgICAgICBpZiAodF9jeSAhPSBudWxsKQorICAgICAgICAgICAgdF9jeS52YWx1ZSA9IGN5ICogem9vbSA7CisgICAgICAgIGlmKHRfY3cgIT0gbnVsbCkKKyAgICAgICAgICAgIHRfY3cudmFsdWUgPSBjdyAqIHpvb20gOworICAgICAgICBpZiAodF9jaCAhPSBudWxsKQorICAgICAgICAgICAgdF9jaC52YWx1ZSA9IGNoICogem9vbSA7CisgICAgfQorICAgIGVsc2UgaWYobW9kZSA9PSAnc2NhbGUnKSB7CisKKyAgICAgICAgdmFyIHN3ID0gYXcsIHNoID0gYWg7CisKKyAgICAgICAgaWYgKHNfc3cudmFsdWUuaW5kZXhPZignJScpPjAgJiYgc19zaC52YWx1ZS5pbmRleE9mKCclJyk+MCkKKyAgICAgICAgeworICAgICAgICAgICAgc3cgPSBjdy9waWNfd2lkdGg7CisgICAgICAgICAgICBzaCA9IGNoL3BpY19oZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNfc3cgIT0gbnVsbCkKKyAgICAgICAgICAgIHNfc3cudmFsdWUgPSBzdyAqIHpvb20gOworICAgICAgICBpZiAoc19zaCAhPSBudWxsKQorICAgICAgICAgICAgc19zaC52YWx1ZSA9IHNoICogem9vbSA7CisgICAgfQorfQorCitmdW5jdGlvbiBkcmFnU3RvcHBlZCgpCit7CisgICAgZHJhZ2FwcHJvdmVkPWZhbHNlOworCisgICAgaWYoYW50ID09IG51bGwgfHwgYW50LnN0eWxlID09IG51bGwpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmKG1vZGUgPT0gIm1lYXN1cmUiKSB7CisgICAgICAgIGpnX2RvYy5kcmF3TGluZSh4LTQseSx4KzQseSk7CisgICAgICAgIGpnX2RvYy5kcmF3TGluZSh4LHktNCx4LHkrNCk7CisgICAgICAgIGpnX2RvYy5kcmF3TGluZShteDItNCxteTIsbXgyKzQsbXkyKTsKKyAgICAgICAgamdfZG9jLmRyYXdMaW5lKG14MixteTItNCxteDIsbXkyKzQpOworCisgICAgICAgIGpnX2RvYy5wYWludCgpOworICAgICAgICBzaG93U3RhdHVzKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIHZhciBhaCA9IHBhcnNlSW50KGFudC5zdHlsZS5oZWlnaHQpOworICAgICAgICB2YXIgYXcgPSBwYXJzZUludChhbnQuc3R5bGUud2lkdGgpOworICAgICAgICB2YXIgYXggPSBwYXJzZUludChhbnQuc3R5bGUubGVmdCk7CisgICAgICAgIHZhciBheSA9IHBhcnNlSW50KGFudC5zdHlsZS50b3ApOworICAgICAgICBqZ19kb2MuY2xlYXIoKTsKKworICAgICAgICBpZihjb250ZW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmKGNvbnRlbnQud2lkdGggIT0gbnVsbCAmJiBjb250ZW50LmhlaWdodCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgY29udGVudC53aWR0aCA9IGF3LTE7CisgICAgICAgICAgICAgICAgY29udGVudC5oZWlnaHQgPSBhaC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKG1vZGUgPT0gImNyb3AiKSB7CisgICAgICAgICAgICAvL2FsZXJ0KHBpY195KTsKKyAgICAgICAgICAgIGpnX2RvYy5maWxsUmVjdFBhdHRlcm4ocGljX3gscGljX3kscGljX3dpZHRoLGF5LXBpY195LHBhdHRlcm4pOworCisgICAgICAgICAgICB2YXIgaDEgPSBhaDsKKyAgICAgICAgICAgIHZhciB5MSA9IGF5OworICAgICAgICAgICAgaWYgKGFoK2F5ID49IHBpY19oZWlnaHQrcGljX3kpCisgICAgICAgICAgICAgICAgaDEgPSBwaWNfaGVpZ2h0K3BpY195LWF5OworICAgICAgICAgICAgZWxzZSBpZiAoYXkgPD0gcGljX3kpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaDEgPSBheSthaC1waWNfeTsKKyAgICAgICAgICAgICAgICB5MSA9IHBpY195OworICAgICAgICAgICAgfQorICAgICAgICAgICAgamdfZG9jLmZpbGxSZWN0UGF0dGVybihwaWNfeCx5MSxheC1waWNfeCxoMSxwYXR0ZXJuKTsKKyAgICAgICAgICAgIGpnX2RvYy5maWxsUmVjdFBhdHRlcm4oYXgrYXcseTEscGljX3grcGljX3dpZHRoLWF4LWF3LGgxLHBhdHRlcm4pOworICAgICAgICAgICAgamdfZG9jLmZpbGxSZWN0UGF0dGVybihwaWNfeCxheSthaCxwaWNfd2lkdGgscGljX2hlaWdodCtwaWNfeS1heS1haCxwYXR0ZXJuKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKG1vZGUgPT0gInNjYWxlIikgeworICAgICAgICAgICAgZG9jdW1lbnQudGhlSW1hZ2UuaGVpZ2h0ID0gYWg7CisgICAgICAgICAgICBkb2N1bWVudC50aGVJbWFnZS53aWR0aCA9IGF3OworICAgICAgICAgICAgZG9jdW1lbnQudGhlSW1hZ2Uuc3R5bGUuaGVpZ2h0ID0gYWgrIiBweCI7CisgICAgICAgICAgICBkb2N1bWVudC50aGVJbWFnZS5zdHlsZS53aWR0aCA9IGF3KyIgcHgiOworCisgICAgICAgICAgICBQN19TbmFwKCd0aGVJbWFnZScsJ2FudCcsMCwwKTsKKyAgICAgICAgfQorCisgICAgICAgIGRyYXdCb3VuZEhhbmRsZSgpOworICAgICAgICBqZ19kb2MucGFpbnQoKTsKKworICAgICAgICBzaG93U3RhdHVzKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitkb2N1bWVudC5vbm1vdXNlZG93bj1kcmFnczsKK2RvY3VtZW50Lm9ubW91c2V1cD1kcmFnU3RvcHBlZDsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvYXNzZXRzL0ltYWdlRWRpdG9yLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvSW1hZ2VFZGl0b3IuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZWZlNDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvYXNzZXRzL0ltYWdlRWRpdG9yLmNzcwpAQCAtMCwwICsxLDc2IEBACisuaWNvbnMgeworICAgIGZvbnQ6IDExcHggVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjsKKyAgICBjb2xvcjogIzY2NjY5OTsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGJvcmRlcjogMXB4IHNvbGlkICNFRUVFRkY7CisgICAgLU1vei1Cb3JkZXItUmFkaXVzOiA2cHggNnB4IDZweCA2cHg7Cit9CisKK2JvZHksIHRkLCBwIHsKKyAgICBmb250OiAxMXB4IFRhaG9tYSxWZXJkYW5hLHNhbnMtc2VyaWY7Cit9CisuaWNvbnNPdmVyIHsKKyAgICBmb250OiAxMXB4IFRhaG9tYSxWZXJkYW5hLHNhbnMtc2VyaWY7CisgICAgY29sb3I6ICM2NjY2OTk7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjlGOUZGOworICAgIGJvcmRlcjogMXB4IHNvbGlkICM2NjY2OTk7CisgICAgLU1vei1Cb3JkZXItUmFkaXVzOiA2cHggNnB4IDZweCA2cHg7Cit9CisudG9wQmFyIHsKKyAgICBmb250OiAxMXB4IFRhaG9tYSxWZXJkYW5hLHNhbnMtc2VyaWY7CisgICAgY29sb3I6ICM2NjY2OTk7Cit9CisuaWNvbnNTZWwgeworICAgIGZvbnQ6IDExcHggVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjsKKyAgICBjb2xvcjogIzY2NjY5OTsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGJvcmRlcjogMXB4IHNvbGlkICM2NjY2OTk7CisgICAgLU1vei1Cb3JkZXItUmFkaXVzOiA2cHggNnB4IDZweCA2cHg7Cit9CisuaWNvblRleHQgeworICAgIGZvbnQ6IDExcHggVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjsKKyAgICBjb2xvcjogIzY2NjY5OTsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorLm1lYXN1cmVTdGF0c3sKKyAgICB3aWR0aDogNTBweDsKK30KKworI3NsaWRlcmNhc2luZyB7CisgICAgLypib3JkZXI6MXB4IHNvbGlkICNDQ0NDQ0M7CisgICAgYmFja2dyb3VuZC1jb2xvcjojRkZGRkZGOyovCisgICAgd2lkdGg6MTAwcHg7CisgICAgaGVpZ2h0OjVweDsKKyAgICBwb3NpdGlvbjpyZWxhdGl2ZTsKKyAgICB6LWluZGV4OjQ7CisgICAgcGFkZGluZzoxMHB4OworfQorCisKKyNzbGlkZXJ0cmFjayB7CisgICAgcG9zaXRpb246cmVsYXRpdmU7CisgICAgYm9yZGVyOjFweCBzb2xpZCAjQ0NDQ0NDOworICAgIGJhY2tncm91bmQtY29sb3I6I0ZGRkZDQzsKKyAgICB6LWluZGV4OjU7CisgICAgaGVpZ2h0OjVweDsKK30KKworCisjc2xpZGVyYmFyIHsKKyAgICBwb3NpdGlvbjphYnNvbHV0ZTsKKyAgICB6LWluZGV4OjY7CisgICAgYm9yZGVyOjFweCBzb2xpZCAjQ0NDQ0NDOworICAgIGJhY2tncm91bmQtY29sb3I6I0RERERERDsKKyAgICB3aWR0aDoxNXB4OyAgICAgCisgICAgcGFkZGluZzowcHg7CisgICAgaGVpZ2h0OjIwcHg7IAorICAgIGN1cnNvcjogcG9pbnRlcjsKKyAgICB0b3A6MnB4OworfQorCitzZWxlY3QsIGlucHV0LCBidXR0b24geyBmb250OiAxMXB4IFRhaG9tYSxWZXJkYW5hLHNhbnMtc2VyaWY7IH0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvZGlhbG9nLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2Fzc2V0cy9kaWFsb2cuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzllYjYyYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvZGlhbG9nLmpzCkBAIC0wLDAgKzEsMTE1IEBACisvLyBEaWFsb2cgdjMuMCAtIENvcHlyaWdodCAoYykgMjAwMy0yMDA0IGludGVyYWN0aXZldG9vbHMuY29tLCBpbmMuDQorLy8gVGhpcyBjb3B5cmlnaHQgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4NCisvLw0KKy8vIFBvcnRpb25zIChjKSBkeW5hcmNoLmNvbSwgMjAwMy0yMDA0DQorLy8NCisvLyBBIGZyZWUgV1lTSVdZRyBlZGl0b3IgcmVwbGFjZW1lbnQgZm9yIDx0ZXh0YXJlYT4gZmllbGRzLg0KKy8vIEZvciBmdWxsIHNvdXJjZSBjb2RlIGFuZCBkb2NzLCB2aXNpdCBodHRwOi8vd3d3LmludGVyYWN0aXZldG9vbHMuY29tLw0KKy8vDQorLy8gVmVyc2lvbiAzLjAgZGV2ZWxvcGVkIGJ5IE1paGFpIEJhem9uLg0KKy8vICAgaHR0cDovL2R5bmFyY2guY29tL21pc2hvbw0KKy8vDQorLy8gJElkOiBkaWFsb2cuanMgMTA4NCAyMDA4LTEwLTEyIDE3OjQyOjQyWiByYXkgJA0KKw0KKy8vIFRob3VnaCAiRGlhbG9nIiBsb29rcyBsaWtlIGFuIG9iamVjdCwgaXQgaXNuJ3QgcmVhbGx5IGFuIG9iamVjdC4gIEluc3RlYWQNCisvLyBpdCdzIGp1c3QgbmFtZXNwYWNlIGZvciBwcm90ZWN0aW5nIGdsb2JhbCBzeW1ib2xzLg0KKw0KK2Z1bmN0aW9uIERpYWxvZyh1cmwsIGFjdGlvbiwgaW5pdCkgew0KKwlpZiAodHlwZW9mIGluaXQgPT0gInVuZGVmaW5lZCIpIHsNCisJCWluaXQgPSB3aW5kb3c7CS8vIHBhc3MgdGhpcyB3aW5kb3cgb2JqZWN0IGJ5IGRlZmF1bHQNCisJfQ0KKwlpZiAodHlwZW9mIHdpbmRvdy5zaG93TW9kYWxEaWFsb2cgPT0gJ2Z1bmN0aW9uJykNCisJew0KKwkJRGlhbG9nLl9yZXR1cm4gPSBhY3Rpb247DQorCQl2YXIgciA9IHdpbmRvdy5zaG93TW9kYWxEaWFsb2codXJsLCBpbml0LCAiZGlhbG9naGVpZ2h0PTEwO2RpYWxvZ3dpZHRoPTEwO3Jlc2l6YWJsZT15ZXMiKTsNCisJfQ0KKwllbHNlDQorCXsNCisJCURpYWxvZy5fZ2Vja29PcGVuTW9kYWwodXJsLCBhY3Rpb24sIGluaXQpOw0KKwl9DQorfQ0KKw0KK0RpYWxvZy5fcGFyZW50RXZlbnQgPSBmdW5jdGlvbihldikgew0KKyAgICBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsgaWYgKERpYWxvZy5fbW9kYWwgJiYgIURpYWxvZy5fbW9kYWwuY2xvc2VkKSB7IERpYWxvZy5fbW9kYWwuZm9jdXMoKSB9IH0sIDUwKTsNCisgICAgaWYgKERpYWxvZy5fbW9kYWwgJiYgIURpYWxvZy5fbW9kYWwuY2xvc2VkKSB7DQorICAgICAgICBEaWFsb2cuX3N0b3BFdmVudChldik7DQorICAgIH0NCit9Ow0KKw0KKy8vIHNob3VsZCBiZSBhIGZ1bmN0aW9uLCB0aGUgcmV0dXJuIGhhbmRsZXIgb2YgdGhlIGN1cnJlbnRseSBvcGVuZWQgZGlhbG9nLg0KK0RpYWxvZy5fcmV0dXJuID0gbnVsbDsNCisNCisvLyBjb25zdGFudCwgdGhlIGN1cnJlbnRseSBvcGVuZWQgZGlhbG9nDQorRGlhbG9nLl9tb2RhbCA9IG51bGw7DQorDQorLy8gdGhlIGRpYWxvZyB3aWxsIHJlYWQgaXQncyBhcmdzIGZyb20gdGhpcyB2YXJpYWJsZQ0KK0RpYWxvZy5fYXJndW1lbnRzID0gbnVsbDsNCisNCitEaWFsb2cuX2dlY2tvT3Blbk1vZGFsID0gZnVuY3Rpb24odXJsLCBhY3Rpb24sIGluaXQpIHsNCisgICAgLy92YXIgdXJsTGluayA9ICJoYWRpYWxvZyIrdXJsLnRvU3RyaW5nKCk7DQorICAgIHZhciBteVVSTCA9ICJoYWRpYWxvZyIrdXJsOw0KKyAgICB2YXIgcmVnT2JqID0gL1xXL2c7DQorICAgIG15VVJMID0gbXlVUkwucmVwbGFjZShyZWdPYmosJ18nKTsNCisgICAgdmFyIGRsZyA9IHdpbmRvdy5vcGVuKHVybCwgbXlVUkwsDQorICAgICAgICAgICAgICAgICAgInRvb2xiYXI9bm8sbWVudWJhcj1ubyxwZXJzb25hbGJhcj1ubyx3aWR0aD0xMCxoZWlnaHQ9MTAsIiArDQorICAgICAgICAgICAgICAgICAgInNjcm9sbGJhcnM9bm8scmVzaXphYmxlPXllcyxtb2RhbD15ZXMsZGVwZW5kYWJsZT15ZXMiKTsNCisgICAgRGlhbG9nLl9tb2RhbCA9IGRsZzsNCisgICAgRGlhbG9nLl9hcmd1bWVudHMgPSBpbml0Ow0KKw0KKyAgICAvLyBjYXB0dXJlIHNvbWUgd2luZG93J3MgZXZlbnRzDQorICAgIGZ1bmN0aW9uIGNhcHdpbih3KSB7DQorICAgICAgICBEaWFsb2cuX2FkZEV2ZW50KHcsICJjbGljayIsIERpYWxvZy5fcGFyZW50RXZlbnQpOw0KKyAgICAgICAgRGlhbG9nLl9hZGRFdmVudCh3LCAibW91c2Vkb3duIiwgRGlhbG9nLl9wYXJlbnRFdmVudCk7DQorICAgICAgICBEaWFsb2cuX2FkZEV2ZW50KHcsICJmb2N1cyIsIERpYWxvZy5fcGFyZW50RXZlbnQpOw0KKyAgICB9Ow0KKyAgICAvLyByZWxlYXNlIHRoZSBjYXB0dXJlZCBldmVudHMNCisgICAgZnVuY3Rpb24gcmVsd2luKHcpIHsNCisgICAgICAgIERpYWxvZy5fcmVtb3ZlRXZlbnQodywgImNsaWNrIiwgRGlhbG9nLl9wYXJlbnRFdmVudCk7DQorICAgICAgICBEaWFsb2cuX3JlbW92ZUV2ZW50KHcsICJtb3VzZWRvd24iLCBEaWFsb2cuX3BhcmVudEV2ZW50KTsNCisgICAgICAgIERpYWxvZy5fcmVtb3ZlRXZlbnQodywgImZvY3VzIiwgRGlhbG9nLl9wYXJlbnRFdmVudCk7DQorICAgIH07DQorICAgIGNhcHdpbih3aW5kb3cpOw0KKyAgICAvLyBjYXB0dXJlIG90aGVyIGZyYW1lcw0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdpbmRvdy5mcmFtZXMubGVuZ3RoOyBjYXB3aW4od2luZG93LmZyYW1lc1tpKytdKSk7DQorICAgIC8vIG1ha2UgdXAgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgRGlhbG9nIGVuZHMuDQorICAgIERpYWxvZy5fcmV0dXJuID0gZnVuY3Rpb24gKHZhbCkgew0KKyAgICAgICAgaWYgKHZhbCAmJiBhY3Rpb24pIHsNCisgICAgICAgICAgICBhY3Rpb24odmFsKTsNCisgICAgICAgIH0NCisgICAgICAgIHJlbHdpbih3aW5kb3cpOw0KKyAgICAgICAgLy8gY2FwdHVyZSBvdGhlciBmcmFtZXMNCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd2luZG93LmZyYW1lcy5sZW5ndGg7IHJlbHdpbih3aW5kb3cuZnJhbWVzW2krK10pKTsNCisgICAgICAgIERpYWxvZy5fbW9kYWwgPSBudWxsOw0KKyAgICB9Ow0KK307DQorDQorLy8gZXZlbnQgaGFuZGxpbmcNCisNCitEaWFsb2cuX2FkZEV2ZW50ID0gZnVuY3Rpb24oZWwsIGV2bmFtZSwgZnVuYykgew0KKyAgICBpZiAoRGlhbG9nLmlzX2llKSB7DQorICAgICAgICBlbC5hdHRhY2hFdmVudCgib24iICsgZXZuYW1lLCBmdW5jKTsNCisgICAgfSBlbHNlIHsNCisgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZuYW1lLCBmdW5jLCB0cnVlKTsNCisgICAgfQ0KK307DQorDQorRGlhbG9nLl9yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKGVsLCBldm5hbWUsIGZ1bmMpIHsNCisgICAgaWYgKERpYWxvZy5pc19pZSkgew0KKyAgICAgICAgZWwuZGV0YWNoRXZlbnQoIm9uIiArIGV2bmFtZSwgZnVuYyk7DQorICAgIH0gZWxzZSB7DQorICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2bmFtZSwgZnVuYywgdHJ1ZSk7DQorICAgIH0NCit9Ow0KKw0KK0RpYWxvZy5fc3RvcEV2ZW50ID0gZnVuY3Rpb24oZXYpIHsNCisgICAgaWYgKERpYWxvZy5pc19pZSkgew0KKyAgICAgICAgZXYuY2FuY2VsQnViYmxlID0gdHJ1ZTsNCisgICAgICAgIGV2LnJldHVyblZhbHVlID0gZmFsc2U7DQorICAgIH0gZWxzZSB7DQorICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpOw0KKyAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7DQorICAgIH0NCit9Ow0KKw0KK0RpYWxvZy5hZ3QgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7DQorRGlhbG9nLmlzX2llID0gKChEaWFsb2cuYWd0LmluZGV4T2YoIm1zaWUiKSAhPSAtMSkgJiYgKERpYWxvZy5hZ3QuaW5kZXhPZigib3BlcmEiKSA9PSAtMSkpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvZHJhZ1RhYmxlQ29scy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvZHJhZ1RhYmxlQ29scy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTIzNGM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2Fzc2V0cy9kcmFnVGFibGVDb2xzLmpzCkBAIC0wLDAgKzEsMTMxIEBACisvKiogbWFrZXMgdGhlIGNvbHVtbnMgb2YgYSBnaXZlbiB0YWJsZSByZXNpemFibGUgd2l0aCB0aGUgbW91c2UKKyAqIEBhdXRob3IgUmFpbXVuZCBNZXllcgorICogQHBhcmFtIGlkIHtTdHJpbmd9IHRoZSBpZCBvZiB0aGUgdGFibGUKKyAqLworZnVuY3Rpb24gZHJhZ1RhYmxlQ29scyAoaWQpCit7CisJdGhpcy50YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKwl2YXIgdGhzID0gdGhpcy50YWJsZS5yb3dzWzBdLmNlbGxzOworCXRoaXMudGhzID0gdGhzOworCXZhciBzZWxmID0gdGhpczsKKwl2YXIgYzsKKwlmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMudGFibGUucm93cy5sZW5ndGg7IGorKykgCisJeworCQlmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGFibGUucm93c1tqXS5jZWxscy5sZW5ndGg7IGkrKykgCisJCXsKKwkJCWMgPSB0aGlzLnRhYmxlLnJvd3Nbal0uY2VsbHNbaV07CisJCQljLl9pID0gaTsKKwkJCWRyYWdUYWJsZUNvbHMuYWRkRXZlbnQoYywgJ21vdXNlbW92ZScsIGZ1bmN0aW9uKGUpCisJCQl7CisJCQkJc2VsZi5jZWxsTW91c2VNb3ZlKGUpOworCQkJfSk7CisJCQlkcmFnVGFibGVDb2xzLmFkZEV2ZW50KGMsICdtb3VzZW92ZXInLCBmdW5jdGlvbihlKQorCQkJeworCQkJCWUgPSBlID8gZSA6IHdpbmRvdy5ldmVudDsKKwkJCQl2YXIgdCA9IGUudGFyZ2V0ICB8fCBlLnNyY0VsZW1lbnQ7CisJCQkJdC5fcG9zID0gZHJhZ1RhYmxlQ29scy5nZXRFbGVtZW50VG9wTGVmdCh0KTsKKwkJCX0pOworCQl9CisJfQorCWZ1bmN0aW9uIGRlYWN0aXZhdGUgKCkKKwl7CisJCSBzZWxmLmRyYWcgPSBmYWxzZTsgc2VsZi5fY29sID0gbnVsbDsgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnJzsKKwl9CisJZHJhZ1RhYmxlQ29scy5hZGRFdmVudChkb2N1bWVudC5ib2R5LCAnbW91c2Vtb3ZlJyxmdW5jdGlvbiAoZSkgeyBzZWxmLmJvZHlNb3VzZU1vdmUoZSk7IH0pOworCWRyYWdUYWJsZUNvbHMuYWRkRXZlbnQoZG9jdW1lbnQuYm9keSwgJ21vdXNldXAnLGRlYWN0aXZhdGUpOworCQorCit9CitkcmFnVGFibGVDb2xzLnByb3RvdHlwZS5jZWxsTW91c2VNb3ZlID0gZnVuY3Rpb24gKGUpCit7CisJZSA9IGUgPyBlIDogd2luZG93LmV2ZW50OworCXZhciB0ID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50OworCQorCWlmICggdHlwZW9mIGRyYWdUYWJsZUNvbHMgPT0gJ3VuZGVmaW5lZCcgKSByZXR1cm47Ly8gc29tZXRpbWVzIGhhcHBlbnMsIG5vIGlkZWEgd2h5CisJaWYgKCF0Ll9wb3MpIAorCXsKKwkJdC5fcG9zID0gZHJhZ1RhYmxlQ29scy5nZXRFbGVtZW50VG9wTGVmdCh0KTsKKwkJcmV0dXJuOworCX0KKwkKKwlpZiAodC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT0gJ3RkJyAmJiB0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPSAndGgnKSByZXR1cm47CisJdmFyIHNlbGYgPSB0aGlzOworCWZ1bmN0aW9uIGFjdGl2YXRlIChlKQorCXsKKwkJZSA9IGUgPyBlIDogd2luZG93LmV2ZW50OworCQlzZWxmLmRyYWcgPSB0cnVlOworCQlzZWxmLnN0YXJ0WCA9IHQuX3Bvcy5sZWZ0ICsgdC5vZmZzZXRXaWR0aDsKKwkJc2VsZi5fY29sID0gdDsKKwkJdmFyIG9mZnNldFdpZHRoID0gdC5vZmZzZXRXaWR0aDsKKwkJc2VsZi5zdGFydFdpZHRoID0gKHQud2lkdGgpID8gcGFyc2VJbnQodC53aWR0aCwgMTApIDogdC5vZmZzZXRXaWR0aDsKKwkJdC5zdHlsZS53aWR0aCA9IHNlbGYuc3RhcnRXaWR0aCArICdweCc7CisJCXNlbGYub2Zmc2V0ID0gdC5vZmZzZXRXaWR0aCAtIG9mZnNldFdpZHRoOyAvL3BhZGRpbmcgKyBib3JkZXI7IAorCQl0LnN0eWxlLndpZHRoID0gc2VsZi5zdGFydFdpZHRoIC0gc2VsZi5vZmZzZXQrICdweCc7CisJfQorCS8vIGFjdGl2YXRlIHJpZ2h0IHNpZGUKKwlpZiAodC5fcG9zLmxlZnQgKyB0Lm9mZnNldFdpZHRoIC0gZHJhZ1RhYmxlQ29scy5nZXRQYWdlWCAoZSkgIDwgNSAmJiB0ICE9IHQucGFyZW50Tm9kZS5jZWxsc1t0LnBhcmVudE5vZGUuY2VsbHMubGVuZ3RoIC0xXSApCisJeworCQl0LnN0eWxlLmN1cnNvciA9ICdlLXJlc2l6ZSc7CisKKwkJZHJhZ1RhYmxlQ29scy5hZGRFdmVudCh0LCdtb3VzZWRvd24nLCBhY3RpdmF0ZSk7CisJfQorCWVsc2UgCisJeworCQl0LnN0eWxlLmN1cnNvciA9ICcnOworCQlkcmFnVGFibGVDb2xzLnJlbW92ZUV2ZW50KHQsJ21vdXNlZG93bicsIGFjdGl2YXRlKTsKKwl9Cit9CitkcmFnVGFibGVDb2xzLnByb3RvdHlwZS5ib2R5TW91c2VNb3ZlID0gZnVuY3Rpb24gKGUpCit7CisJaWYgKCF0aGlzLmRyYWcpIHJldHVybiB0cnVlOworCWUgPSBlID8gZSA6IHdpbmRvdy5ldmVudDsKKwl2YXIgbW91c2VYID0gZHJhZ1RhYmxlQ29scy5nZXRQYWdlWCAoZSk7CisJdmFyIGRlbHRhID0gbW91c2VYIC0gdGhpcy5zdGFydFg7CisJZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAoZGVsdGEgPCAwKSA/ICdlLXJlc2l6ZScgOiAndy1yZXNpemUnOworCXZhciBuZXdXaWR0aCA9IHRoaXMuc3RhcnRXaWR0aCArIGRlbHRhIC0gdGhpcy5vZmZzZXQ7CisJdGhpcy5fY29sLnN0eWxlLndpZHRoID0gICgobmV3V2lkdGggPiAxMCApID8gbmV3V2lkdGggOiAxMCApICsgJ3B4JzsKKwlyZXR1cm4gdHJ1ZTsKK30KKworZHJhZ1RhYmxlQ29scy5hZGRFdmVudCA9IGZ1bmN0aW9uIChvYmosIGV2VHlwZSwgZm4pCit7CisgICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7IG9iai5hZGRFdmVudExpc3RlbmVyKGV2VHlwZSwgZm4sIHRydWUpOyB9CisgICAgZWxzZSBpZiAob2JqLmF0dGFjaEV2ZW50KSB7IG9iai5hdHRhY2hFdmVudCgib24iK2V2VHlwZSwgZm4pO30KKyAgICBlbHNlIHsgIHJldHVybiBmYWxzZTsgfQorfQorZHJhZ1RhYmxlQ29scy5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uIChvYmosIGV2VHlwZSwgZm4pCit7CisgICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7IG9iai5yZW1vdmVFdmVudExpc3RlbmVyKGV2VHlwZSwgZm4sIHRydWUpOyB9CisgICAgZWxzZSBpZiAob2JqLmRldGFjaEV2ZW50KSB7IG9iai5kZXRhY2hFdmVudCgib24iK2V2VHlwZSwgZm4pOyB9CisgICAgZWxzZSB7ICByZXR1cm4gZmFsc2U7IH0KK30KK2RyYWdUYWJsZUNvbHMuZ2V0RWxlbWVudFRvcExlZnQgPSBmdW5jdGlvbihlbGVtZW50KSAKK3sKKyAgdmFyIGN1cmxlZnQgPSAwOworICB2YXIgY3VydG9wID0gMDsKKyAgaWYgKGVsZW1lbnQub2Zmc2V0UGFyZW50KSAKKyAgeworICAgIGN1cmxlZnQgPSBlbGVtZW50Lm9mZnNldExlZnQKKyAgICBjdXJ0b3AgPSBlbGVtZW50Lm9mZnNldFRvcAorICAgIHdoaWxlIChlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQpIAorICAgIHsKKyAgICAgIGN1cmxlZnQgKz0gZWxlbWVudC5vZmZzZXRMZWZ0CisgICAgICBjdXJ0b3AgKz0gZWxlbWVudC5vZmZzZXRUb3AKKyAgICB9CisgIH0KKyAgcmV0dXJuIHsgdG9wOmN1cnRvcCwgbGVmdDpjdXJsZWZ0IH07Cit9CitkcmFnVGFibGVDb2xzLmdldFBhZ2VYID0gZnVuY3Rpb24gKGUpCit7CisJaWYgKCBlLnBhZ2VYICkgcmV0dXJuIGUucGFnZVg7CisJZWxzZSBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApCisJLy8gRXhwbG9yZXIgNiBTdHJpY3QKKwl7CisJCXJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCArIGUuY2xpZW50WDsKKworCX0KKwllbHNlIGlmIChkb2N1bWVudC5ib2R5KSAvLyBhbGwgb3RoZXIgRXhwbG9yZXJzCisJeworCQlyZXR1cm4gZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0ICsgZS5jbGllbnRYOworCX0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvYXNzZXRzL2VkaXRvci5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvYXNzZXRzL2VkaXRvci5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc3OWRjZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvZWRpdG9yLmNzcwpAQCAtMCwwICsxLDE4NCBAQAorCQlib2R5DQorCQl7DQorCQkJbWFyZ2luOiAwOyBwYWRkaW5nOiAwOw0KKwkJCWZvbnQ6IDExcHggVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjsNCisJCX0NCisJCXNlbGVjdCwgaW5wdXQsIGJ1dHRvbiB7IGZvbnQ6IDExcHggVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjsgfQ0KKw0KKwkJI2luZGljYXRvcg0KKwkJew0KKwkJCXdpZHRoOiAyMHB4Ow0KKwkJCWhlaWdodDogMjBweDsNCisJCQliYWNrZ3JvdW5kLWNvbG9yOiAjZWVmOwkJCQ0KKwkJCXBhZGRpbmc6IDE1cHggMjBweDsNCisJCX0NCisJCSogaHRtbCAjaW5kaWNhdG9yDQorCQl7DQorCQkJcGFkZGluZzogMTRweCAyMnB4Ow0KKwkJfQ0KKwkJI3Rvb2xzDQorCQl7DQorCQkJYmFja2dyb3VuZC1jb2xvcjogI2VlZjsNCisJCQlwYWRkaW5nOiAwOw0KKwkJCWJvcmRlci1sZWZ0OiAxcHggc29saWQgd2hpdGU7DQorCQkJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHdoaXRlOw0KKwkJfQ0KKwkJI3Rvb2xiYXINCisJCXsNCisJCQliYWNrZ3JvdW5kLWNvbG9yOiAjZWVmOw0KKwkJCXRleHQtYWxpZ246IGNlbnRlcjsNCisJCQlwYWRkaW5nOiA1cHg7DQorCQkJYm9yZGVyLXRvcDogMXB4IHNvbGlkIHdoaXRlOw0KKwkJCWJvcmRlci1yaWdodDogMXB4IHNvbGlkIHdoaXRlOw0KKwkJCXZlcnRpY2FsLWFsaWduOiB0b3A7DQorCQkJd2lkdGg6NTBweDsNCisJCX0NCisJCQ0KKwkJI2NvbnRlbnRzDQorCQl7DQorCQkJcG9zaXRpb246IHJlbGF0aXZlOw0KKwkJfQ0KKwkJDQorCQkjZWRpdG9yDQorCQl7DQorCQkJd2lkdGg6IDEwMCU7DQorCQkJaGVpZ2h0OiAxMDAlOw0KKwkJfQ0KKw0KKwkJI3Rvb2xiYXIgYSANCisJCXsNCisJCQlwYWRkaW5nOiA1cHg7DQorCQkJd2lkdGg6IDQwcHg7DQorCQkJZGlzcGxheTogYmxvY2s7DQorCQkJYm9yZGVyOiAxcHggc29saWQgI2VlZjsNCisJCQl0ZXh0LWFsaWduOiBjZW50ZXI7DQorCQkJdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KKwkJCWNvbG9yOiAjNjY5Ow0KKwkJCW1hcmdpbjogNXB4IDA7DQorCQl9DQorCQkjdG9vbGJhciBhOmhvdmVyDQorCQl7DQorCQkJYmFja2dyb3VuZC1jb2xvcjogI0Y5RjlGRjsNCisJCQlib3JkZXItY29sb3I6ICM2Njk7DQorCQl9DQorCQkNCisJCSN0b29sYmFyIGEuaWNvbkFjdGl2ZQ0KKwkJew0KKwkJCWJvcmRlci1jb2xvcjogIzY2OTsNCisJCX0NCisNCisJCSN0b29sYmFyIGEgc3Bhbg0KKwkJew0KKwkJCWRpc3BsYXk6IGJsb2NrOw0KKwkJCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCisJCQkNCisJCX0NCisJCSN0b29sYmFyIGEgaW1nDQorCQl7DQorCQkJYm9yZGVyOiAwIG5vbmU7DQorCQl9DQorCQkNCisJCSN0b29scyAudGV4dElucHV0DQorCQl7DQorCQkJd2lkdGg6IDNlbTsNCisJCQl2ZXJ0aWNhbC1hbGlnbjogMHB4Ow0KKw0KKwkJfQ0KKwkJKiBodG1sICN0b29scyAudGV4dElucHV0DQorCQl7DQorCQkJdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCisJCX0NCisJCSN0b29scyAubWVhc3VyZVN0YXRzDQorCQl7DQorCQkJd2lkdGg6IDQuNWVtOw0KKwkJCWJvcmRlcjogMCBub25lOw0KKwkJCWJhY2tncm91bmQtY29sb3I6ICNlZWY7DQorCQkJdmVydGljYWwtYWxpZ246IDBweDsNCisJCX0NCisJCSogaHRtbCAjdG9vbHMgLm1lYXN1cmVTdGF0cw0KKwkJew0KKwkJCXZlcnRpY2FsLWFsaWduOiBtaWRkbGU7DQorCQl9DQorCQkjdG9vbHMgbGFiZWwNCisJCXsNCisJCQltYXJnaW46IDAgMnB4IDAgNXB4Ow0KKwkJfQ0KKwkJI3Rvb2xzIGlucHV0DQorCQl7DQorCQkJdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCisJCX0NCisJCSN0b29scyAudG9vbF9pbnB1dHMNCisJCXsNCisJCQlwYWRkaW5nLXRvcDogMTBweDsNCisJCQlmbG9hdDogbGVmdDsJCQkNCisJCX0NCisJCSN0b29scyAuZGl2DQorCQl7DQorCQkJdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCisJCQltYXJnaW46IDAgNXB4Ow0KKwkJfQ0KKwkJI3Rvb2xzIGltZw0KKwkJew0KKwkJCWJvcmRlcjogMCBub25lOw0KKwkJfQ0KKwkJI3Rvb2xzIGEuYnV0dG9ucw0KKwkJew0KKwkJCW1hcmdpbi10b3A6IDEwcHg7DQorCQkJYm9yZGVyOiAxcHggc29saWQgI2VlZjsNCisJCQlkaXNwbGF5OiBibG9jazsNCisJCQlmbG9hdDogbGVmdDsNCisJCX0NCisJCSN0b29scyBhLmJ1dHRvbnM6aG92ZXINCisJCXsNCisJCQliYWNrZ3JvdW5kLWNvbG9yOiAjRjlGOUZGOw0KKwkJCWJvcmRlci1jb2xvcjogIzY2OTsNCisJCX0NCisJCSNzbGlkZXJjYXNpbmcgew0KKyAgICAvKmJvcmRlcjoxcHggc29saWQgI0NDQ0NDQzsNCisgICAgYmFja2dyb3VuZC1jb2xvcjojRkZGRkZGOyovDQorICAgIHdpZHRoOjEwMHB4Ow0KKyAgICBoZWlnaHQ6NXB4Ow0KKyAgICBwb3NpdGlvbjpyZWxhdGl2ZTsNCisgICAgei1pbmRleDo0Ow0KKyAgICBwYWRkaW5nOjEwcHg7DQorCSB0b3A6IDZweDsNCisJIG1hcmdpbjogMCAtNXB4IDAgLTEwcHg7DQorDQorCQ0KK30NCisNCisNCisjc2xpZGVydHJhY2sgew0KKyAgICBwb3NpdGlvbjpyZWxhdGl2ZTsNCisgICAgYm9yZGVyOjFweCBzb2xpZCAjQ0NDQ0NDOw0KKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiNGRkZGQ0M7DQorICAgIHotaW5kZXg6NTsNCisgICAgaGVpZ2h0OjVweDsNCit9DQorDQorDQorI3NsaWRlcmJhciB7DQorICAgIHBvc2l0aW9uOmFic29sdXRlOw0KKyAgICB6LWluZGV4OjY7DQorICAgIGJvcmRlcjoxcHggc29saWQgI0NDQ0NDQzsNCisgICAgYmFja2dyb3VuZC1jb2xvcjojREREREREOw0KKyAgICB3aWR0aDoxNXB4OyAgICAgDQorICAgIHBhZGRpbmc6MHB4Ow0KKyAgICBoZWlnaHQ6MjBweDsgDQorICAgIGN1cnNvcjogcG9pbnRlcjsNCisgICAgdG9wOjJweDsNCit9DQorDQorKiBodG1sICNzbGlkZXJjYXNpbmcNCit7DQorCXRvcDowOw0KK30NCisNCisNCisjYm90dG9tDQorew0KKwlwb3NpdGlvbjogcmVsYXRpdmU7DQorCXRvcDogNDkwcHg7DQorfQ0KKw0KKyNzYXZlX2ZpbGVuYW1lIHt3aWR0aDogMTAwcHg7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvZWRpdG9yLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2Fzc2V0cy9lZGl0b3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZlMDEwNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvZWRpdG9yLmpzCkBAIC0wLDAgKzEsMjMxIEBACisvKioNCisgKiBGdW5jdGlvbnMgZm9yIHRoZSBJbWFnZUVkaXRvciBpbnRlcmZhY2UsIHVzZWQgYnkgZWRpdG9yLnBocCBvbmx5DQorICogQXV0aG9yczogV2VpIFpodW8sIEFmcnUsIEtyenlzenRvZiBLb3Rvd2ljeg0KKyAqIFZlcnNpb246IFVwZGF0ZWQgb24gMDgtMDEtMjAwNSBieSBBZnJ1DQorICogVmVyc2lvbjogVXBkYXRlZCBvbiAyMC0wNi0yMDA2IGJ5IEtyenlzenRvZiBLb3Rvd2ljeg0KKyAqIFZlcnNpb246IFVwZGF0ZWQgb24gMjAtMDEtMjAwOCBieSBSYWltdW5kIE1leWVyDQorICogUGFja2FnZTogRXh0ZW5kZWRGaWxlTWFuYWdlciAoRUZNIDEuNCkNCisgKi8NCisNCit2YXIgY3VycmVudF9hY3Rpb24gPSBudWxsOw0KK3ZhciBhY3Rpb25zID0gWydjcm9wJywgJ3NjYWxlJywgJ3JvdGF0ZScsICdtZWFzdXJlJywgJ3NhdmUnXTsNCit2YXIgb3JnaW5hbF93aWR0aCA9IG51bGwsIG9yZ2luYWxfaGVpZ2h0PW51bGw7DQorZnVuY3Rpb24gdG9nZ2xlKGFjdGlvbikNCit7DQorICAgIGlmKGN1cnJlbnRfYWN0aW9uICE9IGFjdGlvbikNCisgICAgew0KKw0KKyAgICAgICAgZm9yICh2YXIgaSBpbiBhY3Rpb25zKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmKGFjdGlvbnNbaV0gIT0gYWN0aW9uKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgdmFyIHRvb2xzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xzXycrYWN0aW9uc1tpXSk7DQorICAgICAgICAgICAgICAgIHRvb2xzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQorICAgICAgICAgICAgICAgIHZhciBpY29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ljb25fJythY3Rpb25zW2ldKTsNCisgICAgICAgICAgICAgICAgaWNvbi5jbGFzc05hbWUgPSAnJzsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBjdXJyZW50X2FjdGlvbiA9IGFjdGlvbjsNCisNCisgICAgICAgIHZhciB0b29scyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sc18nK2FjdGlvbik7DQorICAgICAgICB0b29scy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCisgICAgICAgIHZhciBpY29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ljb25fJythY3Rpb24pOw0KKyAgICAgICAgaWNvbi5jbGFzc05hbWUgPSAnaWNvbkFjdGl2ZSc7DQorDQorICAgICAgICB2YXIgaW5kaWNhdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luZGljYXRvcl9pbWFnZScpOw0KKyAgICAgICAgaW5kaWNhdG9yLnNyYyA9ICdpbWcvJythY3Rpb24rJy5naWYnOw0KKw0KKyAgICAgICAgZWRpdG9yLnNldE1vZGUoY3VycmVudF9hY3Rpb24pOw0KKw0KKyAgICAgICAgLy9jb25zdHJhaW50cyBvbiB0aGUgc2NhbGUsDQorICAgICAgICAvL2NvZGUgYnkgRnLDqWTDqXJpYyBLbGVlIDxma2xlZUBpc3Vpc3NlLmNvbT4NCisgICAgICAgIGlmKGFjdGlvbiA9PSAnc2NhbGUnKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHZhciB0aGVJbWFnZSA9IGVkaXRvci53aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RoZUltYWdlJyk7DQorICAgICAgICAgICAgb3JnaW5hbF93aWR0aCA9IHRoZUltYWdlLl93aWR0aCA7DQorICAgICAgICAgICAgb3JnaW5hbF9oZWlnaHQgPSB0aGVJbWFnZS5faGVpZ2h0Ow0KKw0KKyAgICAgICAgICAgIHZhciB3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N3Jyk7DQorICAgICAgICAgICAgdy52YWx1ZSA9IG9yZ2luYWxfd2lkdGggOw0KKyAgICAgICAgICAgIHZhciBoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoJykgOw0KKyAgICAgICAgICAgIGgudmFsdWUgPSBvcmdpbmFsX2hlaWdodCA7DQorICAgICAgICB9DQorCQlpZiAoIGFjdGlvbiA9PSAnc2F2ZScgKQ0KKwkJew0KKwkJCXZhciBmb3JtYXRTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2F2ZV9mb3JtYXQnKTsNCisJCQl2YXIgZm9ybWF0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhdmVfZmlsZW5hbWUnKS52YWx1ZS5tYXRjaCgvXC4oZ2lmfHBuZ3xqcGU/ZykvaSlbMV0udG9Mb3dlckNhc2UoKTsNCisJCQlzd2l0Y2ggKCBmb3JtYXQgKQ0KKwkJCXsNCisJCQkJY2FzZSAncG5nJzoNCisJCQkJCWZvcm1hdFNlbGVjdC5zZWxlY3RlZEluZGV4ID0gJzMnOw0KKwkJCQlicmVhazsNCisJCQkJY2FzZSAnZ2lmJzoNCisJCQkJCWZvcm1hdFNlbGVjdC5zZWxlY3RlZEluZGV4ID0gJzQnOw0KKwkJCQlicmVhazsNCisJCQkJZGVmYXVsdDoNCisJCQkJCWZvcm1hdFNlbGVjdC5zZWxlY3RlZEluZGV4ID0gJzAnOw0KKwkJCQlicmVhazsNCisJCQl9DQorCQkJZm9ybWF0U2VsZWN0Lm9uY2hhbmdlKCk7DQorCQl9DQorICAgIH0NCit9DQorDQorZnVuY3Rpb24gdG9nZ2xlTWFya2VyKCkNCit7DQorICAgIHZhciBtYXJrZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFya2VySW1nIik7DQorDQorICAgIGlmKG1hcmtlciAhPSBudWxsICYmIG1hcmtlci5zcmMgIT0gbnVsbCkgew0KKyAgICAgICAgaWYobWFya2VyLnNyYy5pbmRleE9mKCJ0X2JsYWNrLmdpZiIpID49IDApDQorICAgICAgICAgICAgbWFya2VyLnNyYyA9ICJpbWcvdF93aGl0ZS5naWYiOw0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIG1hcmtlci5zcmMgPSAiaW1nL3RfYmxhY2suZ2lmIjsNCisNCisgICAgICAgIGVkaXRvci50b2dnbGVNYXJrZXIoKTsNCisgICAgfQ0KK30NCisNCisvL1RvZ2dnbGUgY29uc3RyYWludHMsIGJ5IEZyw6lkw6lyaWMgS2xlZSA8ZmtsZWVAaXN1aXNzZS5jb20+DQorZnVuY3Rpb24gdG9nZ2xlQ29uc3RyYWludHMoKQ0KK3sNCisgICAgdmFyIGxvY2sgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2NhbGVDb25zdEltZyIpOw0KKyAgICB2YXIgY2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc3RQcm9wIik7DQorDQorICAgIGlmKGxvY2sgIT0gbnVsbCAmJiBsb2NrLnNyYyAhPSBudWxsKSB7DQorICAgICAgICBpZihsb2NrLnNyYy5pbmRleE9mKCJ1bmxvY2tlZDIuZ2lmIikgPj0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBsb2NrLnNyYyA9ICJpbWcvaXNsb2NrZWQyLmdpZiI7DQorICAgICAgICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHRydWU7DQorICAgICAgICAgICAgY2hlY2tDb25zdHJhaW5zKCd3aWR0aCcpOw0KKw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGxvY2suc3JjID0gImltZy91bmxvY2tlZDIuZ2lmIjsNCisgICAgICAgICAgICBjaGVja2JveC5jaGVja2VkID0gZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorLy9jaGVjayB0aGUgY29uc3RyYWludHMsIGJ5IEZyw6lkw6lyaWMgS2xlZSA8ZmtsZWVAaXN1aXNzZS5jb20+DQorZnVuY3Rpb24gY2hlY2tDb25zdHJhaW5zKGNoYW5nZWQpDQorew0KKyAgICB2YXIgY29uc3RyYWluZWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc3RQcm9wJyk7DQorICAgIGlmKGNvbnN0cmFpbmVkLmNoZWNrZWQpDQorICAgIHsNCisgICAgICAgIHZhciB3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N3JykgOw0KKyAgICAgICAgdmFyIHdpZHRoID0gdy52YWx1ZSA7DQorICAgICAgICB2YXIgaCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaCcpIDsNCisgICAgICAgIHZhciBoZWlnaHQgPSBoLnZhbHVlIDsNCisNCisgICAgICAgIGlmKG9yZ2luYWxfd2lkdGggPiAwICYmIG9yZ2luYWxfaGVpZ2h0ID4gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZihjaGFuZ2VkID09ICd3aWR0aCcgJiYgd2lkdGggPiAwKQ0KKyAgICAgICAgICAgICAgICBoLnZhbHVlID0gcGFyc2VJbnQoKHdpZHRoL29yZ2luYWxfd2lkdGgpKm9yZ2luYWxfaGVpZ2h0KTsNCisgICAgICAgICAgICBlbHNlIGlmKGNoYW5nZWQgPT0gJ2hlaWdodCcgJiYgaGVpZ2h0ID4gMCkNCisgICAgICAgICAgICAgICAgdy52YWx1ZSA9IHBhcnNlSW50KChoZWlnaHQvb3JnaW5hbF9oZWlnaHQpKm9yZ2luYWxfd2lkdGgpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHVwZGF0ZU1hcmtlcignc2NhbGUnKSA7DQorfQ0KKw0KK2Z1bmN0aW9uIHVwZGF0ZU1hcmtlcihtb2RlKQ0KK3sNCisgICAgaWYgKG1vZGUgPT0gJ2Nyb3AnKQ0KKyAgICB7DQorICAgICAgICB2YXIgdF9jeCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjeCcpOw0KKyAgICAgICAgdmFyIHRfY3kgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3knKTsNCisgICAgICAgIHZhciB0X2N3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N3Jyk7DQorICAgICAgICB2YXIgdF9jaCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaCcpOw0KKw0KKyAgICAgICAgZWRpdG9yLnNldE1hcmtlcihwYXJzZUludCh0X2N4LnZhbHVlKSwgcGFyc2VJbnQodF9jeS52YWx1ZSksIHBhcnNlSW50KHRfY3cudmFsdWUpLCBwYXJzZUludCh0X2NoLnZhbHVlKSk7DQorICAgIH0NCisgICAgZWxzZSBpZihtb2RlID09ICdzY2FsZScpIHsNCisgICAgICAgIHZhciBzX3N3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N3Jyk7DQorICAgICAgICB2YXIgc19zaCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaCcpOw0KKyAgICAgICAgZWRpdG9yLnNldE1hcmtlcigwLCAwLCBwYXJzZUludChzX3N3LnZhbHVlKSwgcGFyc2VJbnQoc19zaC52YWx1ZSkpOw0KKyAgICB9DQorfQ0KKw0KK2Z1bmN0aW9uIHJvdGF0ZVN1YkFjdGlvblNlbGVjdChzZWxlY3Rpb24pDQorew0KKwl2YXIgdmFsdWUgPSBzZWxlY3Rpb24ub3B0aW9uc1tzZWxlY3Rpb24uc2VsZWN0ZWRJbmRleF0udmFsdWU7DQorCQ0KKwl2YXIgcm90YXRlX3ByZXNldF9zZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm90YXRlX3ByZXNldF9zZWxlY3QnKTsNCisJdmFyIGZsaXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmxpcCcpOw0KKwl2YXIgYW5nbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmEnKS5wYXJlbnROb2RlOw0KKwkNCisJc3dpdGNoICh2YWx1ZSkNCisJew0KKwkJY2FzZSAncm90YXRlJzoNCisJCQlyb3RhdGVfcHJlc2V0X3NlbGVjdC5zdHlsZS5kaXNwbGF5ID0gJyc7DQorCQkJZmxpcC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KKwkJCWFuZ2xlLnN0eWxlLmRpc3BsYXkgPSAnJzsNCisJCWJyZWFrOw0KKwkJY2FzZSAnZmxpcCc6DQorCQkJcm90YXRlX3ByZXNldF9zZWxlY3Quc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCisJCQlmbGlwLnN0eWxlLmRpc3BsYXkgPSAnJzsNCisJCQlhbmdsZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KKwkJYnJlYWs7DQorCX0NCit9DQorZnVuY3Rpb24gcm90YXRlUHJlc2V0KHNlbGVjdGlvbikNCit7DQorICAgIHZhciB2YWx1ZSA9IHNlbGVjdGlvbi5vcHRpb25zW3NlbGVjdGlvbi5zZWxlY3RlZEluZGV4XS52YWx1ZTsNCisNCisgICAgaWYodmFsdWUubGVuZ3RoID4gMCAmJiBwYXJzZUludCh2YWx1ZSkgIT0gMCkgew0KKyAgICAgICAgdmFyIHJhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhJyk7DQorICAgICAgICByYS52YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTsNCisgICAgfQ0KK30NCisNCitmdW5jdGlvbiB1cGRhdGVGb3JtYXQoc2VsZWN0aW9uKQ0KK3sNCisgICAgdmFyIHNlbGVjdGVkID0gc2VsZWN0aW9uLm9wdGlvbnNbc2VsZWN0aW9uLnNlbGVjdGVkSW5kZXhdLnZhbHVlOw0KKw0KKyAgICB2YXIgdmFsdWVzID0gc2VsZWN0ZWQuc3BsaXQoIiwiKTsNCisJaWYgKCB2YWx1ZXNbMF0gIT0gJ2pwZWcnICkgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NsaWRlcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQorCWVsc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NsaWRlcicpLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJzsNCisgICAgaWYodmFsdWVzLmxlbmd0aCA+MSkgew0KKyAgICAgICAgdXBkYXRlU2xpZGVyKHBhcnNlSW50KHZhbHVlc1sxXSkpOw0KKyAgICB9DQorDQorfQ0KK2Z1bmN0aW9uIHpvb20oKQ0KK3sNCisJdmFyIHRoZUltYWdlID0gZWRpdG9yLndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGhlSW1hZ2UnKTsNCisJdmFyIHZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3pvb20nKS52YWx1ZTsNCisJdGhlSW1hZ2Uud2lkdGggPSB0aGVJbWFnZS5fd2lkdGggKiBwYXJzZUludCggdmFsdWUsIDEwICkgLyAxMDA7CQ0KKwl0aGVJbWFnZS5oZWlnaHQgPSB0aGVJbWFnZS5faGVpZ2h0ICogcGFyc2VJbnQoIHZhbHVlLCAxMCApLyAxMDA7DQorCWVkaXRvci5yZXNldCgpOw0KKwllZGl0b3IucGljX3dpZHRoID0gbnVsbDsNCisJZWRpdG9yLnBpY19oZWlnaHQgPSBudWxsOw0KK30NCitmdW5jdGlvbiBhZGRFdmVudChvYmosIGV2VHlwZSwgZm4pDQorew0KKyAgICBpZiAob2JqLmFkZEV2ZW50TGlzdGVuZXIpIHsgb2JqLmFkZEV2ZW50TGlzdGVuZXIoZXZUeXBlLCBmbiwgdHJ1ZSk7IHJldHVybiB0cnVlOyB9DQorICAgIGVsc2UgaWYgKG9iai5hdHRhY2hFdmVudCkgeyAgdmFyIHIgPSBvYmouYXR0YWNoRXZlbnQoIm9uIitldlR5cGUsIGZuKTsgIHJldHVybiByOyAgfQ0KKyAgICBlbHNlIHsgIHJldHVybiBmYWxzZTsgfQ0KK30NCisNCit2YXIgaW5pdCA9IGZ1bmN0aW9uKCkNCit7DQorICAgIGlmKHdpbmRvdy5vcGVuZXIpDQorICAgIHsNCisgICAgICAgIF9feGluaGFfZGxnX2luaXQoKTsNCisgICAgICAgIF9fZGxnX3RyYW5zbGF0ZSgnRXh0ZW5kZWRGaWxlTWFuYWdlcicpOw0KKyAgICB9DQorCWFkZEV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScsIHdpbk9uUmVzaXplKTsNCisJdHJ5IHsgd2luZG93Lm1vdmVUbygwLDApOyB9IGNhdGNoIChlKSB7fQ0KKwl3aW5kb3cucmVzaXplVG8od2luZG93LnNjcmVlbi5hdmFpbFdpZHRoLHdpbmRvdy5zY3JlZW4uYXZhaWxIZWlnaHQpOw0KKwl3aW5PblJlc2l6ZSgpOw0KK30NCitmdW5jdGlvbiB3aW5PblJlc2l6ZSAoKQ0KK3sNCisJaWYgKCB0eXBlb2YgZWRpdG9yLnJlc2V0ID09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGVkaXRvci5hbnQgIT0gJ3VuZGVmaW5lZCcgICkgZWRpdG9yLnJlc2V0KCk7DQorCXZhciB3aW4gPSBYaW5oYS52aWV3cG9ydFNpemUod2luZG93KTsNCisJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnRzIikuc3R5bGUuaGVpZ2h0ID0gd2luLnkgLSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW5kaWNhdG9yIikub2Zmc2V0SGVpZ2h0LDEwKSAtIDUgKyAncHgnOw0KK30NCitYaW5oYS5hZGRPbmxvYWRIYW5kbGVyKCBpbml0LCB3aW5kb3cgKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvYXNzZXRzL2VkaXRvckZyYW1lLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvZWRpdG9yRnJhbWUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZDg0MWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvYXNzZXRzL2VkaXRvckZyYW1lLmNzcwpAQCAtMCwwICsxLDE3IEBACitib2R5IHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsgfQordGFibGUgeyB3aWR0aDogMTAwJTsgfQordGFibGUgdGQgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKy5jcm9we2N1cnNvcjpjcm9zc2hhaXI7fQorLnNlbGVjdGlvbiB7IGJvcmRlcjogZG90dGVkIDFweCAjMDAwMDAwOyBwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6IDBweDsgaGVpZ2h0OiAxcHg7IHotaW5kZXg6NTsgfQorLnNlbGVjdGlvbldoaXRleyBib3JkZXI6IGRvdHRlZCAxcHggI0ZGRkZGRjsgcG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOiAwcHg7IGhlaWdodDogMXB4OyB6LWluZGV4OjU7IH0KKy5oYW5kbGVCb3h7IHotaW5kZXg6MTA1OyB9CisuZXJyb3IgeyBmb250LXNpemU6bGFyZ2U7IGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOiNjMDA7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IH0gCisKKyNuLXJlc2l6ZSAge2N1cnNvcjogbi1yZXNpemUgIH0KKyNzLXJlc2l6ZSAge2N1cnNvcjogcy1yZXNpemUgIH0KKyN3LXJlc2l6ZSAge2N1cnNvcjogdy1yZXNpemUgIH0KKyNlLXJlc2l6ZSAge2N1cnNvcjogZS1yZXNpemUgIH0KKyNudy1yZXNpemUge2N1cnNvcjogbnctcmVzaXplIH0KKyNzdy1yZXNpemUge2N1cnNvcjogc3ctcmVzaXplIH0KKyNuZS1yZXNpemUge2N1cnNvcjogbmUtcmVzaXplIH0KKyNzZS1yZXNpemUge2N1cnNvcjogc2UtcmVzaXplIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvYXNzZXRzL2VkaXRvckZyYW1lLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2Fzc2V0cy9lZGl0b3JGcmFtZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmRiNGQzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2Fzc2V0cy9lZGl0b3JGcmFtZS5qcwpAQCAtMCwwICsxLDEwOCBAQAorLyoqDQorICogSmF2YXNjcmlwdCB1c2VkIGJ5IHRoZSBlZGl0b3JGcmFtZS5waHAsIGl0IGJhc2ljYWxseSBpbml0aWFsaXplcyB0aGUgZnJhbWUuDQorICogQXV0aG9yczogV2VpIFpodW8sIEFmcnUsIEtyenlzenRvZiBLb3Rvd2ljeg0KKyAqIFZlcnNpb246IFVwZGF0ZWQgb24gMDgtMDEtMjAwNSBieSBBZnJ1DQorICogVmVyc2lvbjogVXBkYXRlZCBvbiAyMC0wNi0yMDA2IGJ5IEtyenlzenRvZiBLb3Rvd2ljeg0KKyAqIFZlcnNpb246IFVwZGF0ZWQgb24gMjAtMDEtMjAwOCBieSBSYWltdW5kIE1leWVyDQorICogUGFja2FnZTogRXh0ZW5kZWRGaWxlTWFuYWdlciAoRUZNIDEuNCkNCisgKiBodHRwOi8vd3d3LmFmcnVzb2Z0LmNvbS9odG1sYXJlYQ0KKyAqLw0KKw0KK3ZhciB0b3BEb2MgPSB3aW5kb3cudG9wLmRvY3VtZW50Ow0KKw0KK3ZhciB0X2N4ID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdjeCcpOw0KK3ZhciB0X2N5ID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdjeScpOw0KK3ZhciB0X2N3ID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdjdycpOw0KK3ZhciB0X2NoID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdjaCcpOw0KKw0KK3ZhciBtX3N4ID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdzeCcpOw0KK3ZhciBtX3N5ID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdzeScpOw0KK3ZhciBtX3cgPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ213Jyk7DQordmFyIG1faCA9IHRvcERvYy5nZXRFbGVtZW50QnlJZCgnbWgnKTsNCit2YXIgbV9hID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdtYScpOw0KK3ZhciBtX2QgPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ21kJyk7DQorDQordmFyIHNfc3cgPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ3N3Jyk7DQordmFyIHNfc2ggPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ3NoJyk7DQorDQordmFyIHJfcmEgPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ3JhJyk7DQorDQordmFyIHBhdHRlcm4gPSAiaW1nLzJ4Mi5naWYiOw0KKw0KK2Z1bmN0aW9uIGRvU3VibWl0KGFjdGlvbikNCit7DQorICAgIGlmIChhY3Rpb24gPT0gJ2Nyb3AnKQ0KKyAgICB7DQorICAgICAgICB2YXIgdXJsID0gX2JhY2tlbmRfdXJsICsgIl9fZnVuY3Rpb249ZWRpdG9yRnJhbWUmaW1nPSIrY3VycmVudEltYWdlRmlsZSsiJmFjdGlvbj1jcm9wJnBhcmFtcz0iK3BhcnNlSW50KHRfY3gudmFsdWUpKycsJytwYXJzZUludCh0X2N5LnZhbHVlKSsnLCcrIHBhcnNlSW50KHRfY3cudmFsdWUpKycsJytwYXJzZUludCh0X2NoLnZhbHVlKTsNCisNCisgICAgICAgIC8vYWxlcnQodXJsKTsNCisgICAgICAgIGxvY2F0aW9uLmhyZWYgPSB1cmw7DQorDQorICAgICAgICAvL2xvY2F0aW9uLnJlbG9hZCgpOw0KKyAgICB9DQorICAgIGVsc2UgaWYgKGFjdGlvbiA9PSAnc2NhbGUnKQ0KKyAgICB7DQorICAgICAgICB2YXIgdXJsID0gX2JhY2tlbmRfdXJsICsgIl9fZnVuY3Rpb249ZWRpdG9yRnJhbWUmaW1nPSIrY3VycmVudEltYWdlRmlsZSsiJmFjdGlvbj1zY2FsZSZwYXJhbXM9IitwYXJzZUludChzX3N3LnZhbHVlKSsnLCcrcGFyc2VJbnQoc19zaC52YWx1ZSk7DQorICAgICAgICAvL2FsZXJ0KHVybCk7DQorICAgICAgICBsb2NhdGlvbi5ocmVmID0gdXJsOw0KKw0KKyAgICB9DQorICAgIGVsc2UgaWYgKGFjdGlvbiA9PSAncm90YXRlJykNCisgICAgew0KKyAgICAgICAgdmFyIHJvdGF0ZV9zdWJfYWN0aW9uID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdyb3RhdGVfc3ViX2FjdGlvbicpOw0KKw0KKyAgICAgICAgaWYocm90YXRlX3N1Yl9hY3Rpb24udmFsdWUgPT0gJ2ZsaXAnKQ0KKyAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBfYmFja2VuZF91cmwgKyAiX19mdW5jdGlvbj1lZGl0b3JGcmFtZSZpbWc9IitjdXJyZW50SW1hZ2VGaWxlKyImYWN0aW9uPWZsaXAmcGFyYW1zPSIrdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdmbGlwJykudmFsdWU7DQorICAgICAgICBlbHNlIGlmIChpc05hTihwYXJzZUZsb2F0KHJfcmEudmFsdWUpKT09ZmFsc2UpDQorICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9IF9iYWNrZW5kX3VybCArICJfX2Z1bmN0aW9uPWVkaXRvckZyYW1lJmltZz0iK2N1cnJlbnRJbWFnZUZpbGUrIiZhY3Rpb249cm90YXRlJnBhcmFtcz0iK3BhcnNlRmxvYXQocl9yYS52YWx1ZSk7DQorICAgIH0NCisgICAgZWxzZSBpZihhY3Rpb24gPT0gJ3NhdmUnKSB7DQorICAgICAgICB2YXIgc19maWxlID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdzYXZlX2ZpbGVuYW1lJyk7DQorICAgICAgICB2YXIgc19mb3JtYXQgPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ3NhdmVfZm9ybWF0Jyk7DQorICAgICAgICB2YXIgc19xdWFsaXR5ID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdxdWFsaXR5Jyk7DQorDQorICAgICAgICB2YXIgZm9ybWF0ID0gc19mb3JtYXQudmFsdWUuc3BsaXQoIiwiKTsNCisgICAgICAgIGlmKHNfZmlsZS52YWx1ZS5sZW5ndGggPD0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBhbGVydChpMThuKCdQbGVhc2UgZW50ZXIgYSBmaWxlbmFtZSB0byBzYXZlLicpKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICB2YXIgZmlsZW5hbWUgPSBlbmNvZGVVUkkoc19maWxlLnZhbHVlKTsNCisJCQl2YXIgcXVhbGl0eSA9IHBhcnNlSW50KHNfcXVhbGl0eS52YWx1ZSk7DQorCQkJdmFyIGZvcm1hdCA9IHNfZm9ybWF0LnZhbHVlLnNwbGl0KCIsIik7DQorCQkJdmFyIHVybCA9IF9iYWNrZW5kX3VybCArICJfX2Z1bmN0aW9uPWVkaXRvckZyYW1lJmltZz0iK2N1cnJlbnRJbWFnZUZpbGUrIiZhY3Rpb249c2F2ZSZwYXJhbXM9Iitmb3JtYXRbMF0rIiwiK3F1YWxpdHkrIiZmaWxlPSIrZmlsZW5hbWU7DQorCSAgICAgICAgbG9jYXRpb24uaHJlZiA9IHVybDsNCisgICAgICAgIH0NCisgICAgfQ0KKwllbHNlIGlmIChhY3Rpb24gPT0gJ3ByZXZpZXcnKSB7DQorCQl2YXIgc19mb3JtYXQgPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ3NhdmVfZm9ybWF0Jyk7DQorICAgICAgICB2YXIgc19xdWFsaXR5ID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdxdWFsaXR5Jyk7DQorCQl2YXIgcXVhbGl0eSA9IHBhcnNlSW50KHNfcXVhbGl0eS52YWx1ZSk7DQorCQl2YXIgZm9ybWF0ID0gc19mb3JtYXQudmFsdWUuc3BsaXQoIiwiKTsNCisJCXZhciB1cmwgPSBfYmFja2VuZF91cmwgKyAiX19mdW5jdGlvbj1lZGl0b3JGcmFtZSZpbWc9IitjdXJyZW50SW1hZ2VGaWxlKyImYWN0aW9uPXByZXZpZXcmcGFyYW1zPSIrZm9ybWF0WzBdKyIsIitxdWFsaXR5KyImZmlsZT0iK2ZpbGVuYW1lOw0KKyAgICAgICAgbG9jYXRpb24uaHJlZiA9IHVybDsNCisJfQ0KK30NCisNCitmdW5jdGlvbiBhZGRFdmVudChvYmosIGV2VHlwZSwgZm4pDQorew0KKyAgICBpZiAob2JqLmFkZEV2ZW50TGlzdGVuZXIpIHsgb2JqLmFkZEV2ZW50TGlzdGVuZXIoZXZUeXBlLCBmbiwgdHJ1ZSk7IHJldHVybiB0cnVlOyB9DQorICAgIGVsc2UgaWYgKG9iai5hdHRhY2hFdmVudCkgeyAgdmFyIHIgPSBvYmouYXR0YWNoRXZlbnQoIm9uIitldlR5cGUsIGZuKTsgIHJldHVybiByOyAgfQ0KKyAgICBlbHNlIHsgIHJldHVybiBmYWxzZTsgfQ0KK30NCisNCit2YXIgamdfZG9jOw0KKw0KK2luaXQgPSBmdW5jdGlvbigpDQorew0KKyAgICBqZ19kb2MgPSBuZXcganNHcmFwaGljcygiaW1nQ2FudmFzIik7IC8vIGRyYXcgZGlyZWN0bHkgaW50byBkb2N1bWVudA0KKyAgICBqZ19kb2Muc2V0Q29sb3IoIiMwMDAwMDAiKTsgLy8gYmxhY2sNCisJDQorICAgIGluaXRFZGl0b3IoKTsNCisJaWYgKHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3pvb20nKS52YWx1ZSAhPSAnMTAwJykgd2luZG93LnBhcmVudC56b29tKCk7DQorCXJlc2V0KCk7DQorCXdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVzaXplJykuaW5uZXJIVE1MID0gZmlsZVNpemU7IA0KK307DQorDQorYWRkRXZlbnQod2luZG93LCAnbG9hZCcsIGluaXQpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvaG92ZXIuaHRjIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2Fzc2V0cy9ob3Zlci5odGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU4MWFmNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvaG92ZXIuaHRjCkBAIC0wLDAgKzEsMzQgQEAKKzxhdHRhY2ggZXZlbnQ9Im9ubW91c2VvdmVyIiBoYW5kbGVyPSJob3ZlclJvbGxPdmVyIiAvPg0KKzxhdHRhY2ggZXZlbnQ9Im9ubW91c2VvdXQiIGhhbmRsZXI9ImhvdmVyUm9sbE9mZiIgLz4NCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQorLy8NCisvLwlTaW1wbGUgYmVoYXZpb3VyIGZvciBJRTUrIHRvIGVtdWxhdGUgOmhvdmVyIENTUyBwc2V1ZG8tY2xhc3MuDQorLy8gIEV4cGVyaW1lbnRhbCB2ZXIgMC4xDQorLy8NCisvLwlUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCB2ZXJzaW9uISBIYW5kbGUgd2l0aCBjYXJlIQ0KKy8vCU1hbnVhbCBhdDogaHR0cDovL3d3dy5oc3prLmJtZS5odS9+aGoxMzAvY3NzL2xpc3RfbWVudS9ob3Zlci8NCisvLw0KKw0KK2Z1bmN0aW9uIGhvdmVyUm9sbE92ZXIoKSB7DQorCQ0KKwllbGVtZW50Lm9yaWdDbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZTsJLy8gYmFja3VwIG9yaWdvbmFsIGNsYXNzTmFtZQ0KKwkNCisJdmFyIHRlbXBDbGFzc1N0ciA9IGVsZW1lbnQuY2xhc3NOYW1lOwkJDQorCQ0KKwl0ZW1wQ2xhc3NTdHIgKz0gIkhvdmVyIjsJCQkJCS8vIGNvbnZlcnQgbmFtZSsnSG92ZXInIHRoZSBsYXN0IGNsYXNzIG5hbWUJdG8gZW11bGF0ZSB0YWcuY2xhc3M6aG92ZXINCisJDQorCXRlbXBDbGFzc1N0ciA9IHRlbXBDbGFzc1N0ci5yZXBsYWNlKC9ccy9nLCJIb3ZlciAiKTsJLy9jb252ZXJ0IG5hbWUrJ0hvdmVyJyB0aGUgb3RoZXJzIHRvIGVtdWxhdGUgdGFnLmNsYXNzOmhvdmVyDQorCQ0KKwl0ZW1wQ2xhc3NTdHIgKz0gIiBob3ZlciI7CQkJCS8vIGFkZCBzaW1wbGUgJ2hvdmVyJyBjbGFzcyBuYW1lIHRvIGVtdWxhdGUgdGFnOmhvdmVyDQorCQ0KKwllbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lICsgIiAiICsgdGVtcENsYXNzU3RyOyANCisJDQorCS8vYWxlcnQoZWxlbWVudC5jbGFzc05hbWUpOw0KKwkvL3dpbmRvdy5zdGF0dXMgPSBlbGVtZW50LmNsYXNzTmFtZTsJCS8vIG9ubHkgZm9yIFRFU1QNCit9DQorZnVuY3Rpb24gaG92ZXJSb2xsT2ZmKCkgew0KKwllbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQub3JpZ0NsYXNzTmFtZTsNCit9DQorDQorPC9zY3JpcHQ+DQorDQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2Fzc2V0cy9pbWFnZWxpc3QuY3NzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2Fzc2V0cy9pbWFnZWxpc3QuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZDI0N2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvYXNzZXRzL2ltYWdlbGlzdC5jc3MKQEAgLTAsMCArMSw1NSBAQAorYm9keSB7IG1hcmdpbjogMDsgcGFkZGluZzogMDt9DQorLmVkaXQsLmRpcl9ob2xkZXIgLmZpbGVOYW1lLCAudGh1bWJfaG9sZGVyIC5maWxlTmFtZSAgICB7IGZvbnQtc2l6ZTogOHB0OyBmb250LWZhbWlseTogc21hbGwtY2FwdGlvbiwgc2Fucy1zZXJpZjsgcGFkZGluZy10b3A6IDNweDt9DQorLmVkaXQgYSB7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMDsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IH0NCisuZWRpdCBhOmhvdmVyIHsgYmFja2dyb3VuZC1jb2xvcjogQnV0dG9uSGlnaGxpZ2h0OyB9DQorLmVkaXQgYSBpbWcgeyBib3JkZXI6IG5vbmU7IHZlcnRpY2FsLWFsaWduOiBib3R0b207IH0NCisubm9SZXN1bHQgeyBmb250LXNpemU6bGFyZ2U7IGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOiNjY2M7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7ICB0ZXh0LWFsaWduOiBjZW50ZXI7ICBwYWRkaW5nLXRvcDogNjBweDsgICB9DQorLmVycm9yIHsgY29sb3I6I2MwMDsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IHRleHQtYWxpZ246IGNlbnRlcjsgIHBhZGRpbmctdG9wOiA2NXB4O30NCisNCisuZGlyX2hvbGRlciwgLnRodW1iX2hvbGRlcg0KK3sNCisgIHdpZHRoOjEwNnB4OyBoZWlnaHQ6MTMycHg7DQorICBmbG9hdDpsZWZ0Ow0KKyAgbWFyZ2luOjZweCA0cHg7DQorICBiYWNrZ3JvdW5kLWNvbG9yOkJ1dHRvbkZhY2U7DQorICBib3JkZXI6IDFweCBvdXRzZXQ7DQorfQ0KKw0KKy50aHVtYl9ob2xkZXIuYWN0aXZlDQorew0KKyAgYmFja2dyb3VuZDpIaWdobGlnaHQ7DQorICBjb2xvcjpIaWdobGlnaHRUZXh0Ow0KKyAgYm9yZGVyOjFweCBkYXNoZWQgSGlnaGxpZ2h0Ow0KK30NCisNCisuZGlyX2hvbGRlciBhLmRpciwgLnRodW1iX2hvbGRlciBhLnRodW1iDQorew0KKyAgaGVpZ2h0Ojg1cHg7DQorICBkaXNwbGF5OmJsb2NrOw0KKyAgdGV4dC1hbGlnbjpjZW50ZXI7DQorICBwYWRkaW5nOjVweDsNCisgIHRleHQtZGVjb3JhdGlvbjpub25lOw0KKyAgb3ZlcmZsb3c6aGlkZGVuOw0KK30NCisNCisudGh1bWJfaG9sZGVyIGEudGh1bWIgaW1nDQorew0KKyAgYm9yZGVyOjFweCBzb2xpZCBibGFjazsNCit9DQorDQorLmRpcl9ob2xkZXIgYS5kaXIgaW1nDQorew0KKyAgYm9yZGVyOm5vbmU7DQorfQ0KKw0KKy5saXN0dmlldyB7IHdpZHRoOjEwMCU7IH0NCisubGlzdHZpZXcgdGQsIC5saXN0dmlldyB0aCB7IHRleHQtYWxpZ246bGVmdDsgZm9udC1zaXplOnNtYWxsOyB9DQorLmxpc3R2aWV3IHRkLmFjdGlvbnMgeyB0ZXh0LWFsaWduOiByaWdodDt3aWR0aDoxMTFweCB9DQorLmxpc3R2aWV3IHRkLmFjdGlvbnMgaW1nIHsgYm9yZGVyOjA7IH0NCisNCisubGlzdHZpZXcgdGhlYWQgdGgge2JhY2tncm91bmQtY29sb3I6IEJ1dHRvbkZhY2U7IGJvcmRlcjogMXB4IHNvbGlkIHRocmVlZGZhY2U7IGJvcmRlci1jb2xvcjogQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvblNoYWRvdyBCdXR0b25TaGFkb3cgQnV0dG9uSGlnaGxpZ2h0OyBwYWRkaW5nLXRvcDoycHg7IHBhZGRpbmctYm90dG9tOjJweDsgcGFkZGluZy1sZWZ0OiA1cHg7IHBhZGRpbmctcmlnaHQ6IDVweDsgZm9udC1zaXplOiA5cHQ7IGZvbnQtZmFtaWx5OiAiTVMgU2FucyBTZXJpZiIsICJCaXRzdHJlYW0gVmVyYSBTYW5zIiwgR2VuZXZhLCBTYW5zLCBzYW5zLXNlcmlmO2ZvbnQtd2VpZ2h0Om5vcm1hbH0NCisubGlzdHZpZXcgdGJvZHkgdGQsIC5saXN0dmlldyB0Ym9keSB0aCB7b3ZlcmZsb3c6aGlkZGVuOyBwYWRkaW5nLXRvcDoycHg7IHBhZGRpbmctbGVmdDogM3B4OyBmb250LXNpemU6IDlwdDsgIGZvbnQtZmFtaWx5OiAiTVMgU2FucyBTZXJpZiIsICJCaXRzdHJlYW0gVmVyYSBTYW5zIiwgR2VuZXZhLCBTYW5zLCBzYW5zLXNlcmlmO30NCisubGlzdHZpZXcgdGJvZHkgYSwgbGlzdHZpZXcgdGJvZHkgYTp2aXNpdGVkIHsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBjb2xvcjogIzAwMDsgYm9yZGVyOjBweDsgcGFkZGluZzoycHg7fQ0KKy5saXN0dmlldyB0Ym9keSBhOmhvdmVyIHsgYmFja2dyb3VuZC1jb2xvcjojMEIyNTZCOyBjb2xvcjojZmZmO30NCisNCisubGlzdHZpZXcgdGJvZHkgdHI6aG92ZXIge2JhY2tncm91bmQtY29sb3I6IHJnYigyMjEsMjIxLDI1NSl9Ow0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvaW1hZ2VzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2Fzc2V0cy9pbWFnZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MyNzI3NQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvaW1hZ2VzLmpzCkBAIC0wLDAgKzEsMzEzIEBACisvKioNCisgKiBGdW5jdGlvbnMgZm9yIHRoZSBpbWFnZSBsaXN0aW5nLCB1c2VkIGJ5IGltYWdlcy5waHAgb25seQ0KKyAqIEF1dGhvcnM6IFdlaSBaaHVvLCBBZnJ1LCBLcnp5c3p0b2YgS290b3dpY3osIFJhaW11bmQgTWV5ZXINCisgKiBWZXJzaW9uOiBVcGRhdGVkIG9uIDA4LTAxLTIwMDUgYnkgQWZydQ0KKyAqIFZlcnNpb246IFVwZGF0ZWQgb24gMDQtMDctMjAwNiBieSBLcnp5c3p0b2YgS290b3dpY3oNCisgKiBWZXJzaW9uOiBVcGRhdGVkIG9uIDE3LTExLTIwMDYgYnkgUmFpbXVuZCBNZXllcg0KKyAqIFBhY2thZ2U6IEV4dGVuZGVkRmlsZU1hbmFnZXIgKEVGTSAxLjEuMykNCisgKiBodHRwOi8vd3d3LmFmcnVzb2Z0LmNvbS9odG1sYXJlYQ0KKyAqLw0KKw0KK2Z1bmN0aW9uIGkxOG4oc3RyKSB7DQorICAgIHJldHVybiBYaW5oYS5fbGMoc3RyLCAnRXh0ZW5kZWRGaWxlTWFuYWdlcicpOw0KK30NCisNCitmdW5jdGlvbiBjaGFuZ2VEaXIobmV3RGlyKQ0KK3sNCisgICAgc2hvd01lc3NhZ2UoJ0xvYWRpbmcnKTsNCisgICAgdmFyIG1vZGU9d2luZG93LnRvcC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFuYWdlcl9tb2RlJykudmFsdWU7DQorICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cudG9wLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aWV3dHlwZScpOw0KKyAgICB2YXIgdmlld3R5cGUgPSBzZWxlY3Rpb24ub3B0aW9uc1tzZWxlY3Rpb24uc2VsZWN0ZWRJbmRleF0udmFsdWU7DQorICAgIGxvY2F0aW9uLmhyZWYgPSBfYmFja2VuZF91cmwgKyAiX19mdW5jdGlvbj1pbWFnZXMmbW9kZT0iK21vZGUrIiZkaXI9IituZXdEaXIrIiZ2aWV3dHlwZT0iK3ZpZXd0eXBlOw0KKwlkb2N1bWVudC5jb29raWUgPSAiRUZNU3RhcnREaXIiICsgbW9kZSArICI9IituZXdEaXI7DQorfQ0KKw0KK2Z1bmN0aW9uIG5ld0ZvbGRlcihkaXIsIG5ld0RpcikNCit7DQorICAgIHZhciBtb2RlPXdpbmRvdy50b3AuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hbmFnZXJfbW9kZScpLnZhbHVlOw0KKyAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LnRvcC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmlld3R5cGUnKTsNCisgICAgdmFyIHZpZXd0eXBlID0gc2VsZWN0aW9uLm9wdGlvbnNbc2VsZWN0aW9uLnNlbGVjdGVkSW5kZXhdLnZhbHVlOw0KKyAgICBsb2NhdGlvbi5ocmVmID0gX2JhY2tlbmRfdXJsICsgIl9fZnVuY3Rpb249aW1hZ2VzJm1vZGU9Iittb2RlKyImZGlyPSIrZGlyKyImbmV3RGlyPSIrbmV3RGlyKyImdmlld3R5cGU9Iit2aWV3dHlwZTsNCit9DQorDQorZnVuY3Rpb24gcmVuYW1lRmlsZShvbGRQYXRoKSB7DQorIC8vIHN0cmlwIGRpcmVjdG9yeSBhbmQgZXh0ZW5zaW9uDQorICB2YXIgb2xkTmFtZT1vbGRQYXRoLnJlcGxhY2UoLy4qJTJGLywnJykucmVwbGFjZSgvXC4uKiQvLCcnKTsNCisgIA0KKyAgdmFyIHJlbmFtZSA9IGZ1bmN0aW9uIChuZXdOYW1lKQ0KKyAgew0KKyAgICBpZihuZXdOYW1lID09ICcnIHx8IG5ld05hbWUgPT0gbnVsbCB8fCBuZXdOYW1lID09IG9sZE5hbWUpDQorICAgIHsNCisgICAgICAgIGFsZXJ0KGkxOG4oJ0NhbmNlbGxlZCByZW5hbWUuJykpOw0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorICAgIHZhciBtb2RlPXdpbmRvdy50b3AuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hbmFnZXJfbW9kZScpLnZhbHVlOw0KKyAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LnRvcC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGlyUGF0aCcpOw0KKyAgICB2YXIgZGlyID0gc2VsZWN0aW9uLm9wdGlvbnNbc2VsZWN0aW9uLnNlbGVjdGVkSW5kZXhdLnZhbHVlOw0KKyAgICBzZWxlY3Rpb24gPSB3aW5kb3cudG9wLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aWV3dHlwZScpOw0KKyAgICB2YXIgdmlld3R5cGUgPSBzZWxlY3Rpb24ub3B0aW9uc1tzZWxlY3Rpb24uc2VsZWN0ZWRJbmRleF0udmFsdWU7DQorICAgIGxvY2F0aW9uLmhyZWYgPSBfYmFja2VuZF91cmwgKyAiX19mdW5jdGlvbj1pbWFnZXMmbW9kZT0iK21vZGUrIiZkaXI9IitkaXIrIiZyZW5hbWU9IitvbGRQYXRoKyImcmVuYW1lVG89IituZXdOYW1lKyImdmlld3R5cGU9Iit2aWV3dHlwZTsNCisgIH0NCisgIA0KKyAgIC8vIElFNyBoYXMgY3JpcHBsZWQgdGhlIHByb21wdCgpDQorICBpZiAoIFhpbmhhLmllX3ZlcnNpb24gPiA2ICkNCisgIHsNCisgICAgcG9wdXBQcm9tcHQoaTE4bigiUGxlYXNlIGVudGVyIG5ldyBuYW1lIGZvciB0aGlzIGZpbGUuLi4iKSwgb2xkTmFtZSwgcmVuYW1lLCBpMThuKCJSZW5hbWUiKSk7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIHZhciBuZXdOYW1lID0gcHJvbXB0KGkxOG4oJ1BsZWFzZSBlbnRlciBuZXcgbmFtZSBmb3IgdGhpcyBmaWxlLi4uJyksIG9sZE5hbWUpOw0KKyAgICByZW5hbWUobmV3TmFtZSk7DQorICB9DQorfQ0KK2Z1bmN0aW9uIHJlbmFtZURpcihvbGROYW1lKSANCit7DQorICAvLyBzdHJpcCBkaXJlY3RvcnkgYW5kIGV4dGVuc2lvbg0KKw0KKyAgZnVuY3Rpb24gcmVuYW1lKG5ld05hbWUpDQorICB7DQorICAgIGlmKG5ld05hbWUgPT0gJycgfHwgbmV3TmFtZSA9PSBudWxsIHx8IG5ld05hbWUgPT0gb2xkTmFtZSkNCisgICAgew0KKyAgICAgIGFsZXJ0KGkxOG4oJ0NhbmNlbGxlZCByZW5hbWUuJykpOw0KKyAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKyAgICB2YXIgbW9kZT13aW5kb3cudG9wLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYW5hZ2VyX21vZGUnKS52YWx1ZTsNCisgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy50b3AuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpclBhdGgnKTsNCisgICAgdmFyIGRpciA9IHNlbGVjdGlvbi5vcHRpb25zW3NlbGVjdGlvbi5zZWxlY3RlZEluZGV4XS52YWx1ZTsNCisgICAgc2VsZWN0aW9uID0gd2luZG93LnRvcC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmlld3R5cGUnKTsNCisgICAgdmFyIHZpZXd0eXBlID0gc2VsZWN0aW9uLm9wdGlvbnNbc2VsZWN0aW9uLnNlbGVjdGVkSW5kZXhdLnZhbHVlOw0KKyAgICBsb2NhdGlvbi5ocmVmID0gX2JhY2tlbmRfdXJsICsgIl9fZnVuY3Rpb249aW1hZ2VzJm1vZGU9Iittb2RlKyImZGlyPSIrZGlyKyImcmVuYW1lPSIrb2xkTmFtZSsiJnJlbmFtZVRvPSIrbmV3TmFtZSsiJnZpZXd0eXBlPSIrdmlld3R5cGU7DQorICB9DQorICANCisgIC8vIElFNyBoYXMgY3JpcHBsZWQgdGhlIHByb21wdCgpDQorICBpZiAoIFhpbmhhLmllX3ZlcnNpb24gPiA2ICkNCisgIHsNCisgICAgcG9wdXBQcm9tcHQoaTE4bignUGxlYXNlIGVudGVyIG5ldyBuYW1lIGZvciB0aGlzIGZvbGRlci4uLicpLCBvbGROYW1lLCByZW5hbWUsIGkxOG4oIlJlbmFtZSIpKTsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgdmFyIG5ld05hbWUgPSBwcm9tcHQoaTE4bignUGxlYXNlIGVudGVyIG5ldyBuYW1lIGZvciB0aGlzIGZvbGRlci4uLicpLCBvbGROYW1lKTsNCisgICAgcmVuYW1lKG5ld05hbWUpOw0KKyAgfQ0KK30NCitmdW5jdGlvbiBjb3B5RmlsZShmaWxlLGFjdGlvbikNCit7DQorCXZhciBzZWxlY3Rpb24gPSB3aW5kb3cudG9wLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXJQYXRoJyk7DQorICAgIHZhciBkaXIgPSBzZWxlY3Rpb24ub3B0aW9uc1tzZWxlY3Rpb24uc2VsZWN0ZWRJbmRleF0udmFsdWU7DQorCXdpbmRvdy50b3AucGFzdGVCdXR0b24oeydkaXInOmRpciwnZmlsZSc6ZmlsZSwnYWN0aW9uJzphY3Rpb24rJ0ZpbGUnfSk7DQorfQ0KK2Z1bmN0aW9uIGNvcHlEaXIoZGlyVG9Db3B5LGFjdGlvbikNCit7DQorCXZhciBzZWxlY3Rpb24gPSB3aW5kb3cudG9wLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXJQYXRoJyk7DQorICAgIHZhciBkaXIgPSBzZWxlY3Rpb24ub3B0aW9uc1tzZWxlY3Rpb24uc2VsZWN0ZWRJbmRleF0udmFsdWU7DQorCXdpbmRvdy50b3AucGFzdGVCdXR0b24oeydkaXInOmRpciwnZmlsZSc6ZGlyVG9Db3B5LCdhY3Rpb24nOmFjdGlvbisnRGlyJ30pOw0KK30NCitmdW5jdGlvbiBwYXN0ZShhY3Rpb24pDQorew0KKyAgICB2YXIgbW9kZT13aW5kb3cudG9wLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYW5hZ2VyX21vZGUnKS52YWx1ZTsNCisgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy50b3AuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpclBhdGgnKTsNCisgICAgdmFyIGRpciA9IHNlbGVjdGlvbi5vcHRpb25zW3NlbGVjdGlvbi5zZWxlY3RlZEluZGV4XS52YWx1ZTsNCisgICAgc2VsZWN0aW9uID0gd2luZG93LnRvcC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmlld3R5cGUnKTsNCisgICAgdmFyIHZpZXd0eXBlID0gc2VsZWN0aW9uLm9wdGlvbnNbc2VsZWN0aW9uLnNlbGVjdGVkSW5kZXhdLnZhbHVlOw0KKwlsb2NhdGlvbi5ocmVmID0gX2JhY2tlbmRfdXJsICsgIl9fZnVuY3Rpb249aW1hZ2VzJm1vZGU9Iittb2RlKyImZGlyPSIrZGlyKyImcGFzdGU9IithY3Rpb24uYWN0aW9uKyImc3JjZGlyPSIrYWN0aW9uLmRpcisiJmZpbGU9IithY3Rpb24uZmlsZSsiJnZpZXd0eXBlPSIrdmlld3R5cGU7DQorfQ0KKy8vdXBkYXRlIHRoZSBkaXIgbGlzdCBpbiB0aGUgcGFyZW50IHdpbmRvdy4NCitmdW5jdGlvbiB1cGRhdGVEaXIobmV3RGlyKQ0KK3sNCisJdmFyIG1vZGUgPSB3aW5kb3cudG9wLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYW5hZ2VyX21vZGUnKS52YWx1ZTsNCisJZG9jdW1lbnQuY29va2llID0gIkVGTVN0YXJ0RGlyIiArIG1vZGUgKyAiPSIrbmV3RGlyOw0KKyAgICANCisJdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy50b3AuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpclBhdGgnKTsNCisgICAgaWYoc2VsZWN0aW9uKQ0KKyAgICB7DQorICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2VsZWN0aW9uLmxlbmd0aDsgaSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHZhciB0aGlzRGlyID0gc2VsZWN0aW9uLm9wdGlvbnNbaV0udGV4dDsNCisgICAgICAgICAgICBpZih0aGlzRGlyID09IG5ld0RpcikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zZWxlY3RlZEluZGV4ID0gaTsNCisgICAgICAgICAgICAgICAgc2hvd01lc3NhZ2UoJ0xvYWRpbmcnKTsNCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorfQ0KKw0KK2Z1bmN0aW9uIGVtcHR5UHJvcGVydGllcygpDQorew0KKyAgICB0b2dnbGVJbWFnZVByb3BlcnRpZXMoZmFsc2UpOw0KKyAgICB2YXIgdG9wRG9jID0gd2luZG93LnRvcC5kb2N1bWVudDsNCisgICAgdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdmX3VybCcpLnZhbHVlID0gJyc7DQorICAgIHRvcERvYy5nZXRFbGVtZW50QnlJZCgnZl9hbHQnKS52YWx1ZSA9ICcnOw0KKyAgICB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ2ZfdGl0bGUnKS52YWx1ZSA9ICcnOw0KKyAgICB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ2Zfd2lkdGgnKS52YWx1ZSA9ICcnOw0KKyAgICB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ2ZfbWFyZ2luJykudmFsdWUgPSAnJzsNCisgICAgdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdmX2hlaWdodCcpLnZhbHVlID0gJyc7DQorICAgIHRvcERvYy5nZXRFbGVtZW50QnlJZCgnZl9wYWRkaW5nJykudmFsdWUgPSAnJzsNCisgICAgdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdmX2JvcmRlcicpLnZhbHVlID0gJyc7DQorICAgIHRvcERvYy5nZXRFbGVtZW50QnlJZCgnZl9ib3JkZXJDb2xvcicpLnZhbHVlID0gJyc7DQorICAgIHRvcERvYy5nZXRFbGVtZW50QnlJZCgnZl9iYWNrZ3JvdW5kQ29sb3InKS52YWx1ZSA9ICcnOw0KK30NCisNCitmdW5jdGlvbiB0b2dnbGVJbWFnZVByb3BlcnRpZXModmFsKQ0KK3sNCisgICAgdmFyIHRvcERvYyA9IHdpbmRvdy50b3AuZG9jdW1lbnQ7DQorICAgIGlmKHZhbD09dHJ1ZSkNCisgICAgew0KKyAgICAgICAgdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdmX3dpZHRoJykudmFsdWUgPSAnJzsNCisgICAgICAgIHRvcERvYy5nZXRFbGVtZW50QnlJZCgnZl9tYXJnaW4nKS52YWx1ZSA9ICcnOw0KKyAgICAgICAgdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdmX2hlaWdodCcpLnZhbHVlID0gJyc7DQorICAgICAgICB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ2ZfcGFkZGluZycpLnZhbHVlID0gJyc7DQorICAgICAgICB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ2ZfYm9yZGVyJykudmFsdWUgPSAnJzsNCisgICAgICAgIHRvcERvYy5nZXRFbGVtZW50QnlJZCgnZl9ib3JkZXJDb2xvcicpLnZhbHVlID0gJyc7DQorICAgICAgICB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ2ZfYmFja2dyb3VuZENvbG9yJykudmFsdWUgPSAnJzsNCisgICAgfQ0KKyAgICB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ2Zfd2lkdGgnKS5kaXNhYmxlZCA9IHZhbDsNCisgICAgdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdmX21hcmdpbicpLmRpc2FibGVkID0gdmFsOw0KKyAgICB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ2ZfaGVpZ2h0JykuZGlzYWJsZWQgPSB2YWw7DQorICAgIHRvcERvYy5nZXRFbGVtZW50QnlJZCgnZl9wYWRkaW5nJykuZGlzYWJsZWQgPSB2YWw7DQorICAgIHRvcERvYy5nZXRFbGVtZW50QnlJZCgnZl9hbGlnbicpLmRpc2FibGVkID0gdmFsOw0KKyAgICB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ2ZfYm9yZGVyJykuZGlzYWJsZWQgPSB2YWw7DQorICAgIHRvcERvYy5nZXRFbGVtZW50QnlJZCgnZl9ib3JkZXJDb2xvcicpLnZhbHVlID0gJyc7DQorICAgIHRvcERvYy5nZXRFbGVtZW50QnlJZCgnZl9iYWNrZ3JvdW5kQ29sb3InKS52YWx1ZSA9ICcnOw0KKyAgICB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ2NvbnN0cmFpbl9wcm9wJykuZGlzYWJsZWQgPSB2YWw7DQorfQ0KKw0KK2Z1bmN0aW9uIHNlbGVjdEltYWdlKGZpbGVuYW1lLCBhbHQsIHdpZHRoLCBoZWlnaHQpDQorew0KKyAgICB2YXIgdG9wRG9jID0gd2luZG93LnRvcC5kb2N1bWVudDsNCisNCisgICAgaWYodG9wRG9jLmdldEVsZW1lbnRCeUlkKCdtYW5hZ2VyX21vZGUnKS52YWx1ZT09ImltYWdlIikNCisgICAgew0KKyAgICAgICAgdmFyIG9iaiA9IHRvcERvYy5nZXRFbGVtZW50QnlJZCgnZl91cmwnKTsgIG9iai52YWx1ZSA9IGZpbGVuYW1lOw0KKyAgICAgICAgb2JqID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdmX2FsdCcpOyBvYmoudmFsdWUgPSBhbHQ7DQorICAgICAgICBvYmogPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ2ZfdGl0bGUnKTsgb2JqLnZhbHVlID0gYWx0Ow0KKw0KKyAgICAgICAgaWYod2lkdGg9PTAgJiYgaGVpZ2h0PT0wKSB0b2dnbGVJbWFnZVByb3BlcnRpZXModHJ1ZSk7DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgdG9nZ2xlSW1hZ2VQcm9wZXJ0aWVzKGZhbHNlKTsNCisgICAgICAgICAgICB2YXIgb2JqID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdmX3dpZHRoJyk7ICBvYmoudmFsdWUgPSB3aWR0aDsNCisgICAgICAgICAgICB2YXIgb2JqID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdmX2hlaWdodCcpOyBvYmoudmFsdWUgPSBoZWlnaHQ7DQorICAgICAgICAgICAgdmFyIG9iaiA9IHRvcERvYy5nZXRFbGVtZW50QnlJZCgnb3JnaW5hbF93aWR0aCcpOyBvYmoudmFsdWUgPSB3aWR0aDsNCisgICAgICAgICAgICB2YXIgb2JqID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdvcmdpbmFsX2hlaWdodCcpOyBvYmoudmFsdWUgPSBoZWlnaHQ7DQorICAgICAgICAgICAgdXBkYXRlX3NlbGVjdGVkKCk7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZSBpZiAodG9wRG9jLmdldEVsZW1lbnRCeUlkKCdtYW5hZ2VyX21vZGUnKS52YWx1ZT09ImxpbmsiKQ0KKyAgICB7DQorICAgICAgICB2YXIgb2JqID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdmX2hyZWYnKTsgIG9iai52YWx1ZSA9IGZpbGVuYW1lOw0KKyAgICAgICAgdmFyIG9iaiA9IHRvcERvYy5nZXRFbGVtZW50QnlJZCgnZl90aXRsZScpOyBvYmoudmFsdWUgPSBhbHQ7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGZhbHNlOw0KK30NCisNCit2YXIgX2N1cnJlbnRfc2VsZWN0ZWQgPSBudWxsOw0KKw0KK2Z1bmN0aW9uIHVwZGF0ZV9zZWxlY3RlZCgpDQorew0KKyAgICB2YXIgdG9wRG9jID0gd2luZG93LnRvcC5kb2N1bWVudDsNCisgICAgaWYoX2N1cnJlbnRfc2VsZWN0ZWQpDQorICAgIHsNCisgICAgICAgIF9jdXJyZW50X3NlbGVjdGVkLmNsYXNzTmFtZSA9IF9jdXJyZW50X3NlbGVjdGVkLmNsYXNzTmFtZS5yZXBsYWNlKC8oXnwgKWFjdGl2ZSggfCQpLywgJyQxJDInKTsNCisgICAgICAgIF9jdXJyZW50X3NlbGVjdGVkID0gbnVsbDsNCisgICAgfQ0KKyAgICAvLyBHcmFiIHRoZSBjdXJyZW50IGZpbGUsIGFuZCBoaWdobGlnaHQgaXQgaWYgd2UgaGF2ZSBpdA0KKyAgICB2YXIgY19maWxlID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdmX3VybCcpLnZhbHVlOw0KKyAgICB2YXIgc2VsZWN0aW9uID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdkaXJQYXRoJyk7DQorICAgIHZhciBjdXJyZW50RGlyID0gc2VsZWN0aW9uLm9wdGlvbnNbc2VsZWN0aW9uLnNlbGVjdGVkSW5kZXhdLnRleHQ7DQorICAgIHZhciBkUmUgPSBuZXcgUmVnRXhwKCdeKCcgKyBjdXJyZW50RGlyLnJlcGxhY2UoLyhbXC9cXiQqKz8uKCl8e31bXF1dKS9nLCAnXFwkMScpICsgJykoW14vXSopJCcpOw0KKyAgICBpZihkUmUudGVzdChjX2ZpbGUpKQ0KKyAgICB7DQorICAgICAgICB2YXIgaG9sZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hvbGRlcl8nICsgYXNjMmhleChSZWdFeHAuJDIpKTsNCisgICAgICAgIGlmKGhvbGRlcikNCisgICAgICAgIHsNCisgICAgICAgICAgICBfY3VycmVudF9zZWxlY3RlZCA9IGhvbGRlcjsNCisgICAgICAgICAgICBob2xkZXIuY2xhc3NOYW1lICs9ICcgYWN0aXZlJzsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBzaG93UHJldmlldyhjX2ZpbGUpOw0KK30NCisNCitmdW5jdGlvbiBhc2MyaGV4KHN0cikNCit7DQorICAgIHZhciBoZXhzdHIgPSAnJzsNCisgICAgZm9yKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykNCisgICAgew0KKyAgICAgICAgdmFyIGhleCA9IChzdHIuY2hhckNvZGVBdChpKSkudG9TdHJpbmcoMTYpOw0KKyAgICAgICAgaWYoaGV4Lmxlbmd0aCA9PSAxKSBoZXggPSAnMCcgKyBoZXg7DQorICAgICAgICBoZXhzdHIgKz0gaGV4Ow0KKyAgICB9DQorICAgIHJldHVybiBoZXhzdHI7DQorfQ0KKw0KK2Z1bmN0aW9uIHNob3dNZXNzYWdlKG5ld01lc3NhZ2UpDQorew0KKyAgICB2YXIgdG9wRG9jID0gd2luZG93LnRvcC5kb2N1bWVudDsNCisNCisgICAgdmFyIG1lc3NhZ2UgPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ21lc3NhZ2UnKTsNCisgICAgdmFyIG1lc3NhZ2VzID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdtZXNzYWdlcycpOw0KKyAgICBpZihtZXNzYWdlICYmIG1lc3NhZ2VzKQ0KKyAgICB7DQorICAgICAgICBpZihtZXNzYWdlLmZpcnN0Q2hpbGQpDQorICAgICAgICAgICAgbWVzc2FnZS5yZW1vdmVDaGlsZChtZXNzYWdlLmZpcnN0Q2hpbGQpOw0KKw0KKyAgICAgICAgbWVzc2FnZS5hcHBlbmRDaGlsZCh0b3BEb2MuY3JlYXRlVGV4dE5vZGUoaTE4bihuZXdNZXNzYWdlKSkpOw0KKw0KKyAgICAgICAgbWVzc2FnZXMuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7DQorICAgIH0NCit9DQorDQorZnVuY3Rpb24gdXBkYXRlRGlza01lc2cobmV3TWVzc2FnZSkNCit7DQorICAgIHZhciB0b3BEb2MgPSB3aW5kb3cudG9wLmRvY3VtZW50Ow0KKw0KKyAgICB2YXIgZGlza21lc2cgPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ2Rpc2ttZXNnJyk7DQorICAgIGlmKGRpc2ttZXNnKQ0KKyAgICB7DQorICAgICAgICBpZihkaXNrbWVzZy5maXJzdENoaWxkKQ0KKyAgICAgICAgICAgIGRpc2ttZXNnLnJlbW92ZUNoaWxkKGRpc2ttZXNnLmZpcnN0Q2hpbGQpOw0KKw0KKyAgICAgICAgZGlza21lc2cuYXBwZW5kQ2hpbGQodG9wRG9jLmNyZWF0ZVRleHROb2RlKG5ld01lc3NhZ2UpKTsNCisNCisgICAgfQ0KK30NCisNCitmdW5jdGlvbiBhZGRFdmVudChvYmosIGV2VHlwZSwgZm4pDQorew0KKyAgICBpZiAob2JqLmFkZEV2ZW50TGlzdGVuZXIpIHsgb2JqLmFkZEV2ZW50TGlzdGVuZXIoZXZUeXBlLCBmbiwgdHJ1ZSk7IHJldHVybiB0cnVlOyB9DQorICAgIGVsc2UgaWYgKG9iai5hdHRhY2hFdmVudCkgeyAgdmFyIHIgPSBvYmouYXR0YWNoRXZlbnQoIm9uIitldlR5cGUsIGZuKTsgIHJldHVybiByOyAgfQ0KKyAgICBlbHNlIHsgIHJldHVybiBmYWxzZTsgfQ0KK30NCisNCitmdW5jdGlvbiBjb25maXJtRGVsZXRlRmlsZShmaWxlKQ0KK3sNCisgICAgaWYoY29uZmlybShpMThuKCdEZWxldGUgZmlsZSAiJGZpbGU9JyArIGZpbGUgKyckIj8nKSkpDQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisNCisgICAgcmV0dXJuIGZhbHNlOw0KK30NCisNCitmdW5jdGlvbiBjb25maXJtRGVsZXRlRGlyKGRpciwgY291bnQpDQorew0KKyAgIC8qIGlmKGNvdW50ID4gMCkNCisgICAgew0KKyAgICAgICAgYWxlcnQoaTE4bigiRm9sZGVyIGlzIG5vdCBlbXB0eS4gUGxlYXNlIGRlbGV0ZSBhbGwgRmlsZXMgYW5kIFN1YmZvbGRlcnMgaW5zaWRlLiIpKTsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfSovDQorDQorICAgIGlmKGNvbmZpcm0oaTE4bignRGVsZXRlIGZvbGRlciAiJGRpcj0nICsgZGlyICsnJCI/JykpKQ0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorDQorICAgIHJldHVybiBmYWxzZTsNCit9DQorDQorZnVuY3Rpb24gc2hvd1ByZXZpZXcoZl91cmwpDQorew0KKyAgICB3aW5kb3cucGFyZW50LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX3ByZXZpZXcnKS5zcmMgPQ0KKyAgICBmX3VybCA/IHdpbmRvdy5wYXJlbnQuX2JhY2tlbmRfdXJsICsgJ19fZnVuY3Rpb249dGh1bWJzJmltZz0nICsgZl91cmwgOndpbmRvdy5wYXJlbnQub3BlbmVyLlhpbmhhLmdldFBsdWdpbkRpcignRXh0ZW5kZWRGaWxlTWFuYWdlcicpKycvaW1nLzF4MV90cmFuc3BhcmVudC5naWYnOw0KK30NCisNCithZGRFdmVudCh3aW5kb3csICdsb2FkJywgaW5pdCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2Fzc2V0cy9tYW5hZ2VyLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvbWFuYWdlci5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ5MDBhZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvbWFuYWdlci5jc3MKQEAgLTAsMCArMSw0OSBAQAoraHRtbCwgYm9keSwgLmRpYWxvZyB7ICBiYWNrZ3JvdW5kLWNvbG9yOiBCdXR0b25GYWNlOyAgY29sb3I6IEJ1dHRvblRleHQ7IGZvbnQ6IDExcHggVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwO30NCitib2R5IHsgcGFkZGluZzogNXB4OyB9DQorZmllbGRzZXQgeyBwYWRkaW5nOiAwO30NCisudGl0bGUgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRmOyBjb2xvcjogIzAwMDsgZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMTIwJTsgcGFkZGluZzogM3B4IDEwcHg7IG1hcmdpbi1ib3R0b206IDEwcHg7IGJvcmRlci1ib3R0b206IDFweCAgc29saWQgYmxhY2s7IGxldHRlci1zcGFjaW5nOiAycHg7fQ0KK2Zvcm0geyBwYWRkaW5nOiAwcHg7ICBtYXJnaW46IDAgYXV0bzsgd2lkdGg6IDEwMCU7fQ0KKy8qLmRpcldpZHRoIHsgd2lkdGg6IDYwJTsgfSovDQorYSB7IHBhZGRpbmc6IDVweDsgYm9yZGVyOiAxcHggc29saWQgQnV0dG9uRmFjZTsJfQkNCithIGltZwl7IGJvcmRlcjogMDsgfQkNCithOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiBCdXR0b25IaWdobGlnaHQgQnV0dG9uU2hhZG93IEJ1dHRvblNoYWRvdyBCdXR0b25IaWdobGlnaHQ7IH0NCisuZGlycyB7CXBhZGRpbmc6IDFlbTsgCX0NCisNCisuaW1hZ2VGcmFtZSB7IG92ZXJmbG93LXg6aGlkZGVuOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxNTVweDsgbWFyZ2luOjBweDsgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjt9DQorLnNtYWxsV2lkdGh7IHdpZHRoOiA0ZW07IH0NCisubGFyZ2VsV2lkdGh7IHdpZHRoOiAzMGVtOyB9DQorLmV4dHJhbGFyZ2VsV2lkdGh7IHdpZHRoOiAxMDAlOyB9DQorLmlucHV0VGFibGUgeyBtYXJnaW46IDFlbSBhdXRvIDFlbSAwO3dpZHRoOjEwMCV9DQorc2VsZWN0LCBpbnB1dCwgYnV0dG9uIHsgZm9udDogMTFweCBUYWhvbWEsVmVyZGFuYSxzYW5zLXNlcmlmOyB9DQorLmJ1dHRvbnMgeyB3aWR0aDogNzBweDsgdGV4dC1hbGlnbjogY2VudGVyOyB9DQorLmNsZWFyYm90aHsgY2xlYXI6IGJvdGg7IH0NCisjbWVzc2FnZXMge29wYWNpdHk6MC44O2ZpbHRlcjpBbHBoYShvcGFjaXR5PTg1KTtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6MjBweDttYXJnaW4tYm90dG9tOi0zMHB4O2JhY2tncm91bmQtY29sb3I6IHdoaXRlOyAgYm9yZGVyOiBub25lOyB0ZXh0LWFsaWduOiBjZW50ZXI7IHBhZGRpbmc6IDVweDsgfQ0KKyNtZXNzYWdlICB7IGZvbnQtc2l6ZTogMTVweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IGNvbG9yOiAjNjljOyB9DQoraWZyYW1lIHsgYm9yZGVyOjFweCBpbnNldDsgYm9yZGVyLXJpZ2h0Om5vbmU7IGJvcmRlci1sZWZ0Om5vbmU7IGJvcmRlci1ib3R0b206bm9uZTsgfQ0KKyNjb250cm9scyB7cGFkZGluZy1ib3R0b206MTBweDt9DQordGFibGUgeyBtYXJnaW4tdG9wOjEwcHg7IH0NCit0aCwgdGQgeyBwYWRkaW5nLXJpZ2h0OjNweDsgdGV4dC1hbGlnbjpsZWZ0OyBmb250LWZhbWlseTpzbWFsbC1jYXB0aW9uLGhlbHZldGljYSxzYW5zLXNlcmlmOyB9DQorLmRpcldpZHRoIHt3aWR0aDogNTklfQ0KKw0KKy5idXR0b25Db2xvciB7DQorICB3aWR0aCA6MWVtOw0KKyAgbWFyZ2luLWxlZnQ6IDJweDsNCisgIGN1cnNvcjogZGVmYXVsdDsNCit9DQorDQorLmJ1dHRvbkNvbG9yIC5jaG9vc2VyLCAuYnV0dG9uQ29sb3IgLm5vY29sb3Igew0KKyAgaGVpZ2h0OiAwLjZlbTsNCisgIGJvcmRlcjogMXB4IHNvbGlkOw0KKyAgcGFkZGluZzogMHB4IDFlbTsNCisgIGJvcmRlci1jb2xvcjogQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvblNoYWRvdyBCdXR0b25TaGFkb3cgQnV0dG9uSGlnaGxpZ2h0Ow0KK30NCisNCisuYnV0dG9uQ29sb3IgLmJ1dHRvbkNsaWNrIHsNCisgIGJvcmRlci1jb2xvcjogQnV0dG9uU2hhZG93IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25IaWdobGlnaHQgQnV0dG9uU2hhZG93Ow0KK30NCisuYnV0dG9uQ29sb3IgLmJ1dHRvbkNvbG9yLWhpbGl0ZSB7DQorICBib3JkZXItY29sb3I6IEJ1dHRvblNoYWRvdyBCdXR0b25IaWdobGlnaHQgQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvblNoYWRvdzsNCit9DQorDQorLmJ1dHRvbkNvbG9yIC5ub2NvbG9yIHsgcGFkZGluZzogMHB4OyB9DQorLmJ1dHRvbkNvbG9yIC5ub2NvbG9yLWhpbGl0ZSB7IGJhY2tncm91bmQtY29sb3I6ICNmZmY7IGNvbG9yOiAjZjAwOyB9DQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2Fzc2V0cy9tYW5hZ2VyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2Fzc2V0cy9tYW5hZ2VyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOWZlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvYXNzZXRzL21hbmFnZXIuanMKQEAgLTAsMCArMSw1NTQgQEAKKy8qKg0KKyAqIEZ1bmN0aW9ucyBmb3IgdGhlIEV4dGVuZGVkRmlsZU1hbmFnZXIsIHVzZWQgYnkgbWFuYWdlci5waHAgb25seQ0KKyAqIEF1dGhvcnM6IFdlaSBaaHVvLCBBZnJ1LCBLcnp5c3p0b2YgS290b3dpY3osIFJhaW11bmQgTWV5ZXINCisgKiBWZXJzaW9uOiBVcGRhdGVkIG9uIDA4LTAxLTIwMDUgYnkgQWZydQ0KKyAqIFZlcnNpb246IFVwZGF0ZWQgb24gMjAtMDYtMjAwNiBieSBLcnp5c3p0b2YgS290b3dpY3oNCisgKiBWZXJzaW9uOiBVcGRhdGVkIG9uIDE3LTExLTIwMDYgYnkgUmFpbXVuZCBNZXllcg0KKyAqIFZlcnNpb246IFVwZGF0ZWQgb24gMjAtMDEtMjAwOCBieSBSYWltdW5kIE1leWVyDQorICogUGFja2FnZTogRXh0ZW5kZWRGaWxlTWFuYWdlciAoRUZNIDEuNCkNCisgKiBodHRwOi8vd3d3LmFmcnVzb2Z0LmNvbS9odG1sYXJlYQ0KKyAqLw0KKw0KK2Z1bmN0aW9uIGNvbWJvU2VsZWN0VmFsdWUoYywgdmFsKSB7DQorICAgIHZhciBvcHMgPSBjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvcHRpb24iKTsNCisgICAgZm9yICh2YXIgaSA9IG9wcy5sZW5ndGg7IC0taSA+PSAwOykgew0KKyAgICAgICAgdmFyIG9wID0gb3BzW2ldOw0KKyAgICAgICAgb3Auc2VsZWN0ZWQgPSAob3AudmFsdWUgPT0gdmFsKTsNCisgICAgfQ0KKyAgICBjLnZhbHVlID0gdmFsOw0KK30NCisNCisvL1RyYW5zbGF0aW9uDQorZnVuY3Rpb24gaTE4bihzdHIpIHsNCisgICAgcmV0dXJuIFhpbmhhLl9sYyhzdHIsICdFeHRlbmRlZEZpbGVNYW5hZ2VyJyk7DQorfQ0KKw0KKy8vc2V0IHRoZSBhbGlnbm1lbnQgb3B0aW9ucw0KK2Z1bmN0aW9uIHNldEFsaWduKGFsaWduKQ0KK3sNCisgICAgdmFyIHNlbGVjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX2FsaWduJyk7DQorICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzZWxlY3Rpb24ubGVuZ3RoOyBpKyspDQorICAgIHsNCisgICAgICAgIGlmKHNlbGVjdGlvbi5vcHRpb25zW2ldLnZhbHVlID09IGFsaWduKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHNlbGVjdGlvbi5zZWxlY3RlZEluZGV4ID0gaTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCitmdW5jdGlvbiBvblRhcmdldENoYW5nZWQoKSB7DQorICB2YXIgZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX290aGVyX3RhcmdldCIpOw0KKyAgaWYgKHRoaXMudmFsdWUgPT0gIl9vdGhlciIpIHsNCisgICAgZi5zdHlsZS52aXNpYmlsaXR5ID0gInZpc2libGUiOw0KKyAgICBmLnNlbGVjdCgpOw0KKyAgICBmLmZvY3VzKCk7DQorICB9IGVsc2UgZi5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7DQorfQ0KKw0KK2Z1bmN0aW9uIGluaXQgKCkNCit7DQorCWlmICh0eXBlb2YgaW1nTWFuYWdlciA9PSAndW5kZWZpbmVkJyApDQorCXsNCisJCXNldFRpbWVvdXQoaW5pdCwxMCk7IC8vIHNvbWV0aW1lcyB3ZSBhcmUgdG9vIGhhc3R5DQorCQlyZXR1cm47DQorCX0NCisJDQorCXZhciB3ID0gNjUwOw0KKwl2YXIgaCA9IDYwMDsNCisJDQorCXdpbmRvdy5yZXNpemVUbyh3LGgpOw0KKwl2YXIgcGFnZSA9IFhpbmhhLnBhZ2VTaXplKHdpbmRvdyk7DQorCXdpbmRvdy5yZXNpemVUbyh3LGgpOw0KKwkNCisJdmFyIGRpbSA9IFhpbmhhLnZpZXdwb3J0U2l6ZSh3aW5kb3cpOw0KKw0KKwl3aW5kb3cucmVzaXplQnkoMCwgcGFnZS55IC0gZGltLnkgKyA1KTsNCisNCisJZGltID0gWGluaGEudmlld3BvcnRTaXplKHdpbmRvdyk7DQorCQ0KKwlpZiAoIVhpbmhhLmlzX2llKQ0KKwl7DQorCSAgdmFyIHggPSBvcGVuZXIuc2NyZWVuWCArIChvcGVuZXIub3V0ZXJXaWR0aCAtIGRpbS54KSAvIDI7DQorCSAgdmFyIHkgPSBvcGVuZXIuc2NyZWVuWSArIChvcGVuZXIub3V0ZXJIZWlnaHQgLSBkaW0ueCkgLyAyOw0KKwl9DQorCWVsc2UNCisJey8vSUUgZG9lcyBub3QgaGF2ZSB3aW5kb3cub3V0ZXIuLi4gLCBzbyBjZW50ZXIgaXQgb24gdGhlIHNjcmVlbiBhdCBsZWFzdA0KKwkgIHZhciB4ID0gIChzZWxmLnNjcmVlbi5hdmFpbFdpZHRoIC0gZGltLngpIC8gMjsNCisJICB2YXIgeSA9ICAoc2VsZi5zY3JlZW4uYXZhaWxIZWlnaHQgLSBkaW0ueSkgLyAyOwkNCisJfQ0KKwl3aW5kb3cubW92ZVRvKHgseSk7DQorCQ0KKwlfX3hpbmhhX2RsZ19pbml0KCk7DQorICAgIF9fZGxnX3RyYW5zbGF0ZSgnRXh0ZW5kZWRGaWxlTWFuYWdlcicpOw0KKw0KKyAgICB2YXIgdXBsb2FkRm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGxvYWRGb3JtJyk7DQorICAgIGlmKHVwbG9hZEZvcm0pIHVwbG9hZEZvcm0udGFyZ2V0ID0gJ2ltZ01hbmFnZXInOw0KKyAgICANCisgICAgdmFyIGVkaXRvciA9IHdpbmRvdy5kaWFsb2dBcmd1bWVudHMuZWRpdG9yOw0KKw0KKyAgICB2YXIgcGFyYW0gPSB3aW5kb3cuZGlhbG9nQXJndW1lbnRzLnBhcmFtOw0KKyAgICB2YXIgc3RhcnREaXIgPSBudWxsOw0KKwkNCisgICAgaWYobWFuYWdlcl9tb2RlPT0iaW1hZ2UiICYmIHBhcmFtKQ0KKyAgICB7DQorICAgICAgICB2YXIgYWJzb2x1dGVVUkwgPSBuZXcgUmVnRXhwKCdeaHR0cHM/Oi8vJyk7DQorDQorICAgICAgICBpZiAocGFyYW0uZl91cmwubGVuZ3RoID4gMCAmJiAhYWJzb2x1dGVVUkwudGVzdChwYXJhbS5mX3VybCkgJiYgdHlwZW9mIHBhcmFtLmJhc2VIcmVmID09ICJzdHJpbmciKSB7DQorICAgICAgICAgICAgLy8gVVJMIGlzIG5vdCBhYnNvbHV0ZSwgcHJlcGVuZCBiYXNlSHJlZg0KKyAgICAgICAgICAgIHBhcmFtLmZfdXJsID0gcGFyYW0uYmFzZUhyZWYgKyBwYXJhbS5mX3VybDsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vIHN0cmlwIGJhc2VfdXJsIGZyb20gdXJsDQorICAgICAgICB2YXIgaW1hZ2VfcmVnZXggPSBuZXcgUmVnRXhwKCAnKGh0dHBzPzovL1teL10qKT8nICsgYmFzZV91cmwucmVwbGFjZSgvXC8kLywgJycpICk7DQorICAgICAgICBwYXJhbS5mX3VybCA9IHBhcmFtLmZfdXJsLnJlcGxhY2UoIGltYWdlX3JlZ2V4LCAiIiApOw0KKw0KKyAgICAgICAgLy8gVGhlIGltYWdlIFVSTCBtYXkgcmVmZXJlbmNlIG9uZSBvZiB0aGUgYXV0b21hdGljYWxseSByZXNpemVkIGltYWdlcw0KKyAgICAgICAgLy8gKHdoZW4gdGhlIHVzZXIgYWx0ZXJzIHRoZSBkaW1lbnNpb25zIGluIHRoZSBwaWNrZXIpLCBjbGVhbiB0aGF0IHVwDQorICAgICAgICAvLyBzbyBpdCBsb29rcyByaWdodCBhbmQgd2UgZ2V0IGJhY2sgdG8gYSBub3JtYWwgZl91cmwNCisgICAgICAgIHZhciByZCA9IChfcmVzaXplZF9kaXIpID8gX3Jlc2l6ZWRfZGlyLnJlcGxhY2UoWGluaGEuUkVfU3BlY2lhbHMsICdcXCQxJykgKyAnLycgOiAnJzsNCisgICAgICAgIHZhciBycCA9IF9yZXNpemVkX3ByZWZpeC5yZXBsYWNlKFhpbmhhLlJFX1NwZWNpYWxzLCAnXFwkMScpOw0KKyAgICAgICAgdmFyIGRyZWcgPSBuZXcgUmVnRXhwKCdeKC4qLyknICsgcmQgKyBycCArICdfKFswLTldKyl4KFswLTldKylfKFteL10rKSQnKTsNCisNCisgICAgICAgIHZhciBtYXRjaCA9IHBhcmFtLmZfdXJsLm1hdGNoKGRyZWcpOw0KKw0KKyAgICAgICAgaWYoZHJlZy50ZXN0KHBhcmFtLmZfdXJsKSkNCisgICAgICAgIHsNCisgICAgICAgICAgcGFyYW0uZl91cmwgICAgPSBSZWdFeHAuJDEgKyBSZWdFeHAuJDQ7DQorICAgICAgICAgIHBhcmFtLmZfd2lkdGggID0gUmVnRXhwLiQyOw0KKyAgICAgICAgICBwYXJhbS5mX2hlaWdodCA9IFJlZ0V4cC4kMzsNCisgICAgICAgIH0NCisNCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3VybCIpLnZhbHVlID0gcGFyYW1bImZfdXJsIl07DQorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9hbHQiKS52YWx1ZSA9IHBhcmFtWyJmX2FsdCJdOw0KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfdGl0bGUiKS52YWx1ZSA9IHBhcmFtWyJmX3RpdGxlIl07DQorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9ib3JkZXIiKS52YWx1ZSA9IHBhcmFtWyJmX2JvcmRlciJdOw0KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfd2lkdGgiKS52YWx1ZSA9IHBhcmFtWyJmX3dpZHRoIl07DQorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9oZWlnaHQiKS52YWx1ZSA9IHBhcmFtWyJmX2hlaWdodCJdOw0KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfbWFyZ2luIikudmFsdWUgPSBwYXJhbVsiZl9tYXJnaW4iXTsNCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3BhZGRpbmciKS52YWx1ZSA9IHBhcmFtWyJmX3BhZGRpbmciXTsNCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2JvcmRlckNvbG9yIikudmFsdWUgPSBwYXJhbVsiZl9ib3JkZXJDb2xvciJdOw0KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYmFja2dyb3VuZENvbG9yIikudmFsdWUgPSBwYXJhbVsiZl9iYWNrZ3JvdW5kQ29sb3IiXTsNCisNCisgICAgICAgIHNldEFsaWduKHBhcmFtWyJmX2FsaWduIl0pOw0KKw0KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfdXJsIikuZm9jdXMoKTsNCisNCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvcmdpbmFsX3dpZHRoIikudmFsdWUgPSBwYXJhbVsiZl93aWR0aCJdOw0KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm9yZ2luYWxfaGVpZ2h0IikudmFsdWUgPSBwYXJhbVsiZl9oZWlnaHQiXTsNCisNCisgICAgICAgIC8vIExvY2F0ZSB0byB0aGUgY29ycmVjdCBkaXJlY3RvcnkNCisgICAgICAgIHZhciBkcmVnID0gbmV3IFJlZ0V4cCgnXiguKi8pKFteL10rKSQnKTsNCisgICAgICAgIGlmIChkcmVnLnRlc3QocGFyYW1bJ2ZfdXJsJ10pKQ0KKyAgICAgICAgew0KKwkJICBzdGFydERpciA9IFJlZ0V4cC4kMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX3ByZXZpZXcnKS5zcmMgPSBfYmFja2VuZF91cmwgKyAnX19mdW5jdGlvbj10aHVtYnMmaW1nPScgKyBwYXJhbS5mX3VybDsNCisNCisgICAgfQ0KKw0KKyAgICBlbHNlIGlmKG1hbmFnZXJfbW9kZT09ImxpbmsiICYmIHBhcmFtKQ0KKyAgICB7DQorICAgICAgICB2YXIgdGFyZ2V0X3NlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3RhcmdldCIpOw0KKyAgICAgICAgdmFyIGFic29sdXRlVVJMID0gbmV3IFJlZ0V4cCgnXigvfChodHRwcz86Ly8pKScpOw0KKw0KKyAgICAgICAgaWYgKHBhcmFtLmZfaHJlZi5sZW5ndGggPiAwICYmICFhYnNvbHV0ZVVSTC50ZXN0KHBhcmFtLmZfaHJlZikgJiYgdHlwZW9mIHBhcmFtLmJhc2VIcmVmID09ICJzdHJpbmciKSB7DQorICAgICAgICAgICAgLy8gVVJMIGlzIG5vdCBhYnNvbHV0ZSwgcHJlcGVuZCBiYXNlSHJlZg0KKyAgICAgICAgICAgIHBhcmFtLmZfaHJlZiA9IHBhcmFtLmJhc2VIcmVmICsgcGFyYW0uZl9ocmVmOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8gc3RyaXAgYmFzZV91cmwgZnJvbSBocmVmDQorICAgICAgICB2YXIgaHJlZl9yZWdleCA9IG5ldyBSZWdFeHAoICcoaHR0cHM/Oi8vW14vXSopPycgKyBiYXNlX3VybC5yZXBsYWNlKC9cLyQvLCAnJykgKTsNCisgICAgICAgIHBhcmFtLmZfaHJlZiA9IHBhcmFtLmZfaHJlZi5yZXBsYWNlKCBocmVmX3JlZ2V4LCAiIiApOw0KKw0KKyAgICAgICAgLy8gTG9jYXRlIHRvIHRoZSBjb3JyZWN0IGRpcmVjdG9yeQ0KKyAgICAgICAgdmFyIGRyZWcgPSBuZXcgUmVnRXhwKCdeKC4qLykoW14vXSspJCcpOw0KKyAgICAgICAgaWYgKGRyZWcudGVzdChwYXJhbVsnZl9ocmVmJ10pKQ0KKyAgICAgICAgew0KKyAgICAgICAgCXN0YXJ0RGlyID0gUmVnRXhwLiQxOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgCXN0YXJ0RGlyID0gZG9jdW1lbnQuY29va2llLm1hdGNoKC9FRk1TdGFydERpcmxpbms9KC4qPykoO3wkKS8pOw0KKyAgICAgICAgCWlmIChzdGFydERpcikgc3RhcnREaXIgPSBzdGFydERpclsxXTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgaWYgKHBhcmFtKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmICggdHlwZW9mIHBhcmFtWyJmX2hyZWYiXSAhPSAidW5kZWZpbmVkIiApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9ocmVmIikudmFsdWUgPSBwYXJhbVsiZl9ocmVmIl07DQorICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3RpdGxlIikudmFsdWUgPSBwYXJhbVsiZl90aXRsZSJdOw0KKyAgICAgICAgICAgICAgICBjb21ib1NlbGVjdFZhbHVlKHRhcmdldF9zZWxlY3QsIHBhcmFtWyJmX3RhcmdldCJdKTsNCisgICAgICAgICAgICAgICAgaWYgKHRhcmdldF9zZWxlY3QudmFsdWUgIT0gcGFyYW0uZl90YXJnZXQpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHZhciBvcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTsNCisgICAgICAgICAgICAgICAgICAgIG9wdC52YWx1ZSA9IHBhcmFtLmZfdGFyZ2V0Ow0KKyAgICAgICAgICAgICAgICAgICAgb3B0LmlubmVySFRNTCA9IG9wdC52YWx1ZTsNCisgICAgICAgICAgICAgICAgICAgIHRhcmdldF9zZWxlY3QuYXBwZW5kQ2hpbGQob3B0KTsNCisgICAgICAgICAgICAgICAgICAgIG9wdC5zZWxlY3RlZCA9IHRydWU7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIGlmICggcGFyYW1bImZfdXNldGFyZ2V0Il0gPT0gZmFsc2UgfHwgbWFuYWdlcl9zaG93X3RhcmdldCAhPSBmYWxzZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl90YXJnZXRfbGFiZWwiKS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7DQorICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfdGFyZ2V0Iikuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOw0KKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX290aGVyX3RhcmdldCIpLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsNCisgICAgICAgIH0NCisgICAgICAgIGlmICh0YXJnZXRfc2VsZWN0ICYmIHBhcmFtWyJmX3VzZXRhcmdldCJdICYmIG1hbmFnZXJfc2hvd190YXJnZXQgIT0gZmFsc2UpDQorICAgICAgICB7DQorICAgICAgICAgICAgdmFyIG9wdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpOw0KKyAgICAgICAgICAgIG9wdC52YWx1ZSA9ICJfb3RoZXIiOw0KKyAgICAgICAgICAgIG9wdC5pbm5lckhUTUwgPSBpMThuKCJPdGhlciIpOw0KKyAgICAgICAgICAgIHRhcmdldF9zZWxlY3QuYXBwZW5kQ2hpbGQob3B0KTsNCisgICAgICAgICAgICB0YXJnZXRfc2VsZWN0Lm9uY2hhbmdlID0gb25UYXJnZXRDaGFuZ2VkOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9ocmVmIikuZm9jdXMoKTsNCisgICAgfQ0KKyAgICBlbHNlIGlmICghcGFyYW0pDQorICAgIHsNCisgICAgCXN0YXJ0RGlyID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAgKCJFRk1TdGFydERpciIgKyBtYW5hZ2VyX21vZGUgKyAiPSguKj8pKDt8JCkiKSk7DQorICAgIAlpZiAoc3RhcnREaXIpDQorICAgIAl7DQorICAgIAkJc3RhcnREaXIgPSBzdGFydERpclsxXTsNCisgICAgCX0NCisgICAgfQ0KKwlpZiAoIHN0YXJ0RGlyICkNCisJew0KKwkJaWZyYW1lVXJsICs9ICcmZGlyPScgKyBzdGFydERpcjsNCisJCXZhciBkaXJQYXRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpclBhdGgnKTsNCisJCWZvcih2YXIgaSA9IDA7IGkgPCBkaXJQYXRoLm9wdGlvbnMubGVuZ3RoOyBpKyspDQorCQl7DQorCQkJaWYoZGlyUGF0aC5vcHRpb25zW2ldLnZhbHVlID09IGVuY29kZVVSSUNvbXBvbmVudChzdGFydERpcikpDQorCQkJew0KKwkJCQlkaXJQYXRoLm9wdGlvbnNbaV0uc2VsZWN0ZWQgPSB0cnVlOw0KKwkJCQlicmVhazsNCisJCQl9DQorCQl9DQorCX07DQorCWltZ01hbmFnZXIubG9jYXRpb24ucmVwbGFjZShpZnJhbWVVcmwpOw0KKw0KKyAgICBpZiAobWFuYWdlcl9tb2RlID09ICdpbWFnZScgJiYgdHlwZW9mIFhpbmhhLmNvbG9yUGlja2VyICE9ICJ1bmRlZmluZWQiICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX2JhY2tncm91bmRDb2xvcicpICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX2JhY2tncm91bmRDb2xvcicpLnR5cGUgPT0gJ3RleHQnKSB7DQorICAgICAgLy8gSG9va3VwIGNvbG9yIHBpY2tlcnMNCisNCisgICAgICB2YXIgcGlja2VyQ29uZmlnID0gew0KKyAgICAgICAgY2VsbHNpemU6ZWRpdG9yLmNvbmZpZy5jb2xvclBpY2tlckNlbGxTaXplLA0KKyAgICAgICAgZ3JhbnVsYXJpdHk6ZWRpdG9yLmNvbmZpZy5jb2xvclBpY2tlckdyYW51bGFyaXR5LA0KKyAgICAgICAgd2Vic2FmZTplZGl0b3IuY29uZmlnLmNvbG9yUGlja2VyV2ViU2FmZSwNCisgICAgICAgIHNhdmVjb2xvcnM6ZWRpdG9yLmNvbmZpZy5jb2xvclBpY2tlclNhdmVDb2xvcnMNCisgICAgICB9Ow0KKw0KKyAgICAgIG5ldyBYaW5oYS5jb2xvclBpY2tlci5JbnB1dEJpbmRpbmcoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZfYmFja2dyb3VuZENvbG9yJykscGlja2VyQ29uZmlnKTsNCisgICAgICBuZXcgWGluaGEuY29sb3JQaWNrZXIuSW5wdXRCaW5kaW5nKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX2JvcmRlckNvbG9yJykscGlja2VyQ29uZmlnKTsNCisgICAgfQ0KKwlzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyByZXNpemUoKTthZGRFdmVudCh3aW5kb3csICdyZXNpemUnLCByZXNpemUpOyB9LCA1MDApOw0KK30NCisNCitmdW5jdGlvbiBwYXN0ZUJ1dHRvbihhY3Rpb24pDQorew0KKwl2YXIgYnV0dG9uSG9sZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bhc3RlQnRuJyk7DQorCWlmICghYnV0dG9uSG9sZGVyLmZpcnN0Q2hpbGQpDQorCXsNCisJCXZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOw0KKwkJCWEuaHJlZiA9ICJqYXZhc2NyaXB0OnZvaWQoMCk7IjsNCisJCQkNCisJCXZhciBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsNCisJCQlpbWcuc3JjID0gd2luZG93Lm9wZW5lci5YaW5oYS5nZXRQbHVnaW5EaXIoJ0V4dGVuZGVkRmlsZU1hbmFnZXInKSsnL2ltZy9lZGl0X3Bhc3RlLmdpZic7DQorCQkJaW1nLmFsdCA9IGkxOG4oJ1Bhc3RlJyk7DQorCQkJYS5hcHBlbmRDaGlsZChpbWcpOw0KKwkJCWJ1dHRvbkhvbGRlci5hcHBlbmRDaGlsZChhKTsNCisJfQ0KKwlidXR0b25Ib2xkZXIub25jbGljayA9IGZ1bmN0aW9uKCkgeyAgDQorCQkJCWlmKHR5cGVvZiBpbWdNYW5hZ2VyICE9ICd1bmRlZmluZWQnKSBpbWdNYW5hZ2VyLnBhc3RlKGFjdGlvbik7DQorCQkJCWlmIChhY3Rpb24uYWN0aW9uID09ICAnbW92ZUZpbGUnIHx8IGFjdGlvbi5hY3Rpb24gPT0gICdtb3ZlRGlyJyApDQorCQkJCXsNCisJCQkJCXRoaXMub25jbGljayA9IG51bGw7DQorCQkJCQl0aGlzLnJlbW92ZUNoaWxkKHRoaXMuZmlyc3RDaGlsZCkNCisJCQkJfQ0KKwl9DQorCXN3aXRjaCAoYWN0aW9uLmFjdGlvbikNCisJew0KKwkJY2FzZSAnY29weUZpbGUnOg0KKwkJCWJ1dHRvbkhvbGRlci5maXJzdENoaWxkLnRpdGxlID0gaTE4bignQ29weSAiJGZpbGU9JythY3Rpb24uZmlsZSsnJCIgZnJvbSAiJGRpcj0nK2RlY29kZVVSSUNvbXBvbmVudChhY3Rpb24uZGlyKSsnJCIgaGVyZScpOwkJCQ0KKwkJYnJlYWs7DQorCQljYXNlICdjb3B5RGlyJzoNCisJCQlidXR0b25Ib2xkZXIuZmlyc3RDaGlsZC50aXRsZSA9IGkxOG4oJ0NvcHkgZm9sZGVyICIkZmlsZT0nK2FjdGlvbi5maWxlKyckIiBmcm9tICIkZGlyPScrZGVjb2RlVVJJQ29tcG9uZW50KGFjdGlvbi5kaXIpKyckIiBoZXJlJyk7CQkNCisJCWJyZWFrOw0KKwkJY2FzZSAnbW92ZUZpbGUnOg0KKwkJCWJ1dHRvbkhvbGRlci5maXJzdENoaWxkLnRpdGxlID0gaTE4bignTW92ZSAiJGZpbGU9JythY3Rpb24uZmlsZSsnJCIgZnJvbSAiJGRpcj0nK2RlY29kZVVSSUNvbXBvbmVudChhY3Rpb24uZGlyKSsnJCIgaGVyZScpOw0KKwkJYnJlYWs7DQorCQlicmVhazsNCisJCWNhc2UgJ21vdmVEaXInOg0KKwkJCWJ1dHRvbkhvbGRlci5maXJzdENoaWxkLnRpdGxlID0gaTE4bignTW92ZSBmb2xkZXIgIiRmaWxlPScrYWN0aW9uLmZpbGUrJyQiIGZyb20gIiRkaXI9JytkZWNvZGVVUklDb21wb25lbnQoYWN0aW9uLmRpcikrJyQiIGhlcmUnKTsNCisJCWJyZWFrOwkNCisJfQ0KKwkNCit9DQorZnVuY3Rpb24gb25DYW5jZWwoKQ0KK3sNCisgICAgX19kbGdfY2xvc2UobnVsbCk7DQorICAgIHJldHVybiBmYWxzZTsNCit9DQorDQorZnVuY3Rpb24gb25PSygpDQorew0KKyAgICBpZihtYW5hZ2VyX21vZGU9PSJpbWFnZSIpDQorICAgIHsNCisgICAgICAgIC8vIHBhc3MgZGF0YSBiYWNrIHRvIHRoZSBjYWxsaW5nIHdpbmRvdw0KKyAgICAgICAgdmFyIGZpZWxkcyA9IFsiZl91cmwiLCAiZl9hbHQiLCAiZl90aXRsZSIsICJmX2FsaWduIiwgImZfYm9yZGVyIiwgImZfbWFyZ2luIiwgImZfcGFkZGluZyIsICJmX2hlaWdodCIsICJmX3dpZHRoIiwgImZfYm9yZGVyQ29sb3IiLCAiZl9iYWNrZ3JvdW5kQ29sb3IiXTsNCisgICAgICAgIHZhciBwYXJhbSA9IG5ldyBPYmplY3QoKTsNCisgICAgICAgIGZvciAodmFyIGkgaW4gZmllbGRzKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHZhciBpZCA9IGZpZWxkc1tpXTsNCisgICAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7DQorICAgICAgICAgICAgaWYoaWQgPT0gImZfdXJsIiAmJiBlbC52YWx1ZS5pbmRleE9mKCc6Ly8nKSA8IDAgJiYgZWwudmFsdWUgKQ0KKyAgICAgICAgICAgICAgICBwYXJhbVtpZF0gPSBtYWtlVVJMKGJhc2VfdXJsLGVsLnZhbHVlKTsNCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgIHBhcmFtW2lkXSA9IGVsLnZhbHVlOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8gU2VlIGlmIHdlIG5lZWQgdG8gcmVzaXplIHRoZSBpbWFnZQ0KKyAgICAgICAgdmFyIG9yaWdzaXplID0NCisgICAgICAgIHsNCisgICAgICAgICAgdzpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3JnaW5hbF93aWR0aCcpLnZhbHVlLA0KKyAgICAgICAgICBoOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcmdpbmFsX2hlaWdodCcpLnZhbHVlDQorICAgICAgICB9DQorDQorICAgICAgICBpZiggIChvcmlnc2l6ZS53ICE9IHBhcmFtLmZfd2lkdGgpDQorICAgICAgICAgIHx8IChvcmlnc2l6ZS5oICE9IHBhcmFtLmZfaGVpZ2h0KSApDQorICAgICAgICB7DQorICAgICAgICAgIC8vIFl1cCwgbmVlZCB0byByZXNpemUNCisgICAgICAgICAgdmFyIHJlc2l6ZWQgPSBYaW5oYS5fZ2V0dXJsY29udGVudCh3aW5kb3cub3BlbmVyLlhpbmhhLmdldFBsdWdpbkRpcignRXh0ZW5kZWRGaWxlTWFuYWdlcicpICsgJy8nICsgX2JhY2tlbmRfdXJsICsgJyZfX2Z1bmN0aW9uPXJlc2l6ZXImaW1nPScgKyBlbmNvZGVVUklDb21wb25lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZfdXJsJykudmFsdWUpICsgJyZ3aWR0aD0nICsgcGFyYW0uZl93aWR0aCArICcmaGVpZ2h0PScgKyBwYXJhbS5mX2hlaWdodCk7DQorDQorICAgICAgICAgIC8vIGFsZXJ0KHJlc2l6ZWQpOw0KKyAgICAgICAgICByZXNpemVkID0gZXZhbChyZXNpemVkKTsNCisgICAgICAgICAgaWYocmVzaXplZCkNCisgICAgICAgICAgew0KKyAgICAgICAgICAgIHBhcmFtLmZfdXJsID0gbWFrZVVSTChiYXNlX3VybCwgcmVzaXplZCk7DQorICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIF9fZGxnX2Nsb3NlKHBhcmFtKTsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKyAgICBlbHNlIGlmKG1hbmFnZXJfbW9kZT09ImxpbmsiKQ0KKyAgICB7DQorICAgICAgICB2YXIgcmVxdWlyZWQgPSB7DQorICAgICAgICAgICAgLy8gZl9ocmVmIHNob3VsZG4ndCBiZSByZXF1aXJlZCBvciBvdGhlcndpc2UgcmVtb3ZpbmcgdGhlIGxpbmsgYnkgZW50ZXJpbmcgYW4gZW1wdHkNCisNCisgICAgICAgICAgICAvLyB1cmwgaXNuJ3QgcG9zc2libGUgYW55bW9yZS4NCisNCisgICAgICAgICAgICAvLyAiZl9ocmVmIjogaTE4bigiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIikNCisNCisgICAgICAgIH07DQorICAgICAgICBmb3IgKHZhciBpIGluIHJlcXVpcmVkKSB7DQorICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpKTsNCisgICAgICAgICAgICBpZiAoIWVsLnZhbHVlKSB7DQorICAgICAgICAgICAgICBhbGVydChyZXF1aXJlZFtpXSk7DQorICAgICAgICAgICAgICBlbC5mb2N1cygpOw0KKyAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIC8vIHBhc3MgZGF0YSBiYWNrIHRvIHRoZSBjYWxsaW5nIHdpbmRvdw0KKyAgICAgICAgdmFyIGZpZWxkcyA9IFsiZl9ocmVmIiwgImZfdGl0bGUiLCAiZl90YXJnZXQiIF07DQorICAgICAgICB2YXIgcGFyYW0gPSBuZXcgT2JqZWN0KCk7DQorICAgICAgICBmb3IgKHZhciBpIGluIGZpZWxkcykgew0KKyAgICAgICAgICAgIHZhciBpZCA9IGZpZWxkc1tpXTsNCisgICAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7DQorDQorICAgICAgICAgICAgaWYoaWQgPT0gImZfaHJlZiIgJiYgZWwudmFsdWUuaW5kZXhPZignOi8vJykgPCAwICkNCisgICAgICAgICAgICAgICAgcGFyYW1baWRdID0gbWFrZVVSTChiYXNlX3VybCxlbC52YWx1ZSk7DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICBwYXJhbVtpZF0gPSBlbC52YWx1ZTsNCisNCisgICAgICAgIH0NCisgICAgICAgIGlmIChwYXJhbS5mX3RhcmdldCA9PSAiX290aGVyIikNCisgICAgICAgICAgICBwYXJhbS5mX3RhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX290aGVyX3RhcmdldCIpLnZhbHVlOw0KKw0KKy8vICAgICAgICAgIGFsZXJ0KHBhcmFtLmZfdGFyZ2V0KTsNCisgICAgICAgICAgX19kbGdfY2xvc2UocGFyYW0pOw0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorfQ0KKw0KKy8vc2ltaWxhciB0byB0aGUgRmlsZXM6Om1ha2VGaWxlKCkgaW4gRmlsZXMucGhwDQorZnVuY3Rpb24gbWFrZVVSTChwYXRoQSwgcGF0aEIpDQorew0KKyAgICBpZihwYXRoQS5zdWJzdHJpbmcocGF0aEEubGVuZ3RoLTEpICE9ICcvJykNCisgICAgICAgIHBhdGhBICs9ICcvJzsNCisNCisgICAgaWYocGF0aEIuY2hhckF0KDApID09ICcvJyk7DQorICAgICAgICBwYXRoQiA9IHBhdGhCLnN1YnN0cmluZygxKTsNCisNCisgICAgcmV0dXJuIHBhdGhBK3BhdGhCOw0KK30NCisNCitmdW5jdGlvbiB1cGRhdGVEaXIoc2VsZWN0aW9uKQ0KK3sNCisgICAgdmFyIG5ld0RpciA9IHNlbGVjdGlvbi5vcHRpb25zW3NlbGVjdGlvbi5zZWxlY3RlZEluZGV4XS52YWx1ZTsNCisgICAgY2hhbmdlRGlyKG5ld0Rpcik7DQorfQ0KKw0KK2Z1bmN0aW9uIGdvVXBEaXIoKQ0KK3sNCisgICAgdmFyIHNlbGVjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXJQYXRoJyk7DQorICAgIHZhciBjdXJyZW50RGlyID0gc2VsZWN0aW9uLm9wdGlvbnNbc2VsZWN0aW9uLnNlbGVjdGVkSW5kZXhdLnRleHQ7DQorICAgIGlmKGN1cnJlbnREaXIubGVuZ3RoIDwgMikNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgdmFyIGRpcnMgPSBjdXJyZW50RGlyLnNwbGl0KCcvJyk7DQorDQorICAgIHZhciBzZWFyY2ggPSAnJzsNCisNCisgICAgZm9yKHZhciBpID0gMDsgaSA8IGRpcnMubGVuZ3RoIC0gMjsgaSsrKQ0KKyAgICB7DQorICAgICAgICBzZWFyY2ggKz0gZGlyc1tpXSsnLyc7DQorICAgIH0NCisNCisgICAgZm9yKHZhciBpID0gMDsgaSA8IHNlbGVjdGlvbi5sZW5ndGg7IGkrKykNCisgICAgew0KKyAgICAgICAgdmFyIHRoaXNEaXIgPSBzZWxlY3Rpb24ub3B0aW9uc1tpXS50ZXh0Ow0KKyAgICAgICAgaWYodGhpc0RpciA9PSBzZWFyY2gpDQorICAgICAgICB7DQorICAgICAgICAgICAgc2VsZWN0aW9uLnNlbGVjdGVkSW5kZXggPSBpOw0KKyAgICAgICAgICAgIHZhciBuZXdEaXIgPSBzZWxlY3Rpb24ub3B0aW9uc1tpXS52YWx1ZTsNCisgICAgICAgICAgICBjaGFuZ2VEaXIobmV3RGlyKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCitmdW5jdGlvbiBjaGFuZ2VEaXIobmV3RGlyKQ0KK3sNCisgICAgaWYodHlwZW9mIGltZ01hbmFnZXIgIT0gJ3VuZGVmaW5lZCcpDQorICAgICAgICBpbWdNYW5hZ2VyLmNoYW5nZURpcihuZXdEaXIpOw0KK30NCisNCitmdW5jdGlvbiB1cGRhdGVWaWV3KCkNCit7DQorICAgIHJlZnJlc2goKTsNCit9DQorDQorZnVuY3Rpb24gdG9nZ2xlQ29uc3RyYWlucyhjb25zdHJhaW5zKQ0KK3sNCisgICAgdmFyIGxvY2tJbWFnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdMb2NrJyk7DQorICAgIHZhciBjb25zdHJhaW5zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnN0cmFpbl9wcm9wJyk7DQorDQorICAgIGlmKGNvbnN0cmFpbnMuY2hlY2tlZCkNCisgICAgew0KKyAgICAgICAgbG9ja0ltYWdlLnNyYyA9ICJpbWcvbG9ja2VkLmdpZiI7DQorICAgICAgICBjaGVja0NvbnN0cmFpbnMoJ3dpZHRoJykNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGxvY2tJbWFnZS5zcmMgPSAiaW1nL3VubG9ja2VkLmdpZiI7DQorICAgIH0NCit9DQorDQorZnVuY3Rpb24gY2hlY2tDb25zdHJhaW5zKGNoYW5nZWQpDQorew0KKyAgICAvL2FsZXJ0KGRvY3VtZW50LmZvcm0xLmNvbnN0cmFpbl9wcm9wKTsNCisgICAgdmFyIGNvbnN0cmFpbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc3RyYWluX3Byb3AnKTsNCisNCisgICAgaWYoY29uc3RyYWlucy5jaGVja2VkKQ0KKyAgICB7DQorICAgICAgICB2YXIgb2JqID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29yZ2luYWxfd2lkdGgnKTsNCisgICAgICAgIHZhciBvcmdpbmFsX3dpZHRoID0gcGFyc2VJbnQob2JqLnZhbHVlKTsNCisgICAgICAgIHZhciBvYmogPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3JnaW5hbF9oZWlnaHQnKTsNCisgICAgICAgIHZhciBvcmdpbmFsX2hlaWdodCA9IHBhcnNlSW50KG9iai52YWx1ZSk7DQorDQorICAgICAgICB2YXIgd2lkdGhPYmogPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl93aWR0aCcpOw0KKyAgICAgICAgdmFyIGhlaWdodE9iaiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX2hlaWdodCcpOw0KKw0KKyAgICAgICAgdmFyIHdpZHRoID0gcGFyc2VJbnQod2lkdGhPYmoudmFsdWUpOw0KKyAgICAgICAgdmFyIGhlaWdodCA9IHBhcnNlSW50KGhlaWdodE9iai52YWx1ZSk7DQorDQorICAgICAgICBpZihvcmdpbmFsX3dpZHRoID4gMCAmJiBvcmdpbmFsX2hlaWdodCA+IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYoY2hhbmdlZCA9PSAnd2lkdGgnICYmIHdpZHRoID4gMCkgew0KKyAgICAgICAgICAgICAgICBoZWlnaHRPYmoudmFsdWUgPSBwYXJzZUludCgod2lkdGgvb3JnaW5hbF93aWR0aCkqb3JnaW5hbF9oZWlnaHQpOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpZihjaGFuZ2VkID09ICdoZWlnaHQnICYmIGhlaWdodCA+IDApIHsNCisgICAgICAgICAgICAgICAgd2lkdGhPYmoudmFsdWUgPSBwYXJzZUludCgoaGVpZ2h0L29yZ2luYWxfaGVpZ2h0KSpvcmdpbmFsX3dpZHRoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorZnVuY3Rpb24gc2hvd01lc3NhZ2UobmV3TWVzc2FnZSkNCit7DQorICAgIHZhciBtZXNzYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lc3NhZ2UnKTsNCisgICAgdmFyIG1lc3NhZ2VzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lc3NhZ2VzJyk7DQorICAgIGlmKG1lc3NhZ2UuZmlyc3RDaGlsZCkNCisgICAgICAgIG1lc3NhZ2UucmVtb3ZlQ2hpbGQobWVzc2FnZS5maXJzdENoaWxkKTsNCisNCisgICAgbWVzc2FnZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShpMThuKG5ld01lc3NhZ2UpKSk7DQorDQorICAgIG1lc3NhZ2VzLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOw0KK30NCisNCitmdW5jdGlvbiBhZGRFdmVudChvYmosIGV2VHlwZSwgZm4pDQorew0KKyAgICBpZiAob2JqLmFkZEV2ZW50TGlzdGVuZXIpIHsgb2JqLmFkZEV2ZW50TGlzdGVuZXIoZXZUeXBlLCBmbiwgdHJ1ZSk7IHJldHVybiB0cnVlOyB9DQorICAgIGVsc2UgaWYgKG9iai5hdHRhY2hFdmVudCkgeyAgdmFyIHIgPSBvYmouYXR0YWNoRXZlbnQoIm9uIitldlR5cGUsIGZuKTsgIHJldHVybiByOyAgfQ0KKyAgICBlbHNlIHsgIHJldHVybiBmYWxzZTsgfQ0KK30NCisNCitmdW5jdGlvbiBkb1VwbG9hZCgpDQorew0KKyAgICB2YXIgdXBsb2FkRm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGxvYWRGb3JtJyk7DQorICAgIGlmKHVwbG9hZEZvcm0pDQorICAgICAgICBzaG93TWVzc2FnZSgnVXBsb2FkaW5nJyk7DQorfQ0KKw0KK2Z1bmN0aW9uIHJlZnJlc2goKQ0KK3sNCisgICAgdmFyIHNlbGVjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXJQYXRoJyk7DQorICAgIHVwZGF0ZURpcihzZWxlY3Rpb24pOw0KK30NCisNCitmdW5jdGlvbiBuZXdGb2xkZXIoKQ0KK3sNCisgIGZ1bmN0aW9uIGNyZWF0ZUZvbGRlcihmb2xkZXIpDQorICB7DQorICAgIHZhciBzZWxlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGlyUGF0aCcpOw0KKyAgICB2YXIgZGlyID0gc2VsZWN0aW9uLm9wdGlvbnNbc2VsZWN0aW9uLnNlbGVjdGVkSW5kZXhdLnZhbHVlOw0KKw0KKyAgICBpZihmb2xkZXIgPT0gdGh1bWJkaXIpDQorICAgIHsNCisgICAgICBhbGVydChpMThuKCdJbnZhbGlkIGZvbGRlciBuYW1lLCBwbGVhc2UgY2hvb3NlIGFub3RoZXIgZm9sZGVyIG5hbWUuJykpOw0KKyAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAoZm9sZGVyICYmIGZvbGRlciAhPSAnJyAmJiB0eXBlb2YgaW1nTWFuYWdlciAhPSAndW5kZWZpbmVkJykNCisgICAgew0KKyAgICAgIGltZ01hbmFnZXIubmV3Rm9sZGVyKGRpciwgZW5jb2RlVVJJKGZvbGRlcikpOw0KKyAgICB9DQorICB9DQorICAgIC8vIElFNyBoYXMgY3JpcHBsZWQgdGhlIHByb21wdCgpDQorICBpZiAoIFhpbmhhLmllX3ZlcnNpb24gPiA2ICkNCisgIHsNCisgICAgcG9wdXBQcm9tcHQoaTE4bignUGxlYXNlIGVudGVyIG5hbWUgZm9yIG5ldyBmb2xkZXIuLi4nKSwgaTE4bignVW50aXRsZWQnKSwgY3JlYXRlRm9sZGVyLCBpMThuKCJOZXcgRm9sZGVyIikpOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICB2YXIgZm9sZGVyID0gcHJvbXB0KGkxOG4oJ1BsZWFzZSBlbnRlciBuYW1lIGZvciBuZXcgZm9sZGVyLi4uJyksIGkxOG4oJ1VudGl0bGVkJykpOw0KKyAgICBjcmVhdGVGb2xkZXIoZm9sZGVyKTsNCisgIH0NCit9DQorDQorDQorZnVuY3Rpb24gcmVzaXplKCkNCit7DQorCXZhciB3aW4gPSBYaW5oYS52aWV3cG9ydFNpemUod2luZG93KTsNCisJdmFyIG0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVzc2FnZXMnKTsNCisJdmFyIG1lc3NhZ2VzSGVpZ2h0ID0gKG0gJiYgbS5zdHlsZS5kaXNwbGF5ICE9ICdub25lJyApID8gIHBhcnNlSW50KCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVzc2FnZXMnKS5vZmZzZXRIZWlnaHQsIDEwICkgOiAwOw0KKwlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nTWFuYWdlcicpLnN0eWxlLmhlaWdodCA9IHBhcnNlSW50KCB3aW4ueSAtIDEzMCAtIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250cm9scycpLm9mZnNldEhlaWdodCwgMTAgKSAtIG1lc3NhZ2VzSGVpZ2h0ICArICdweCc7DQorCXJldHVybiB0cnVlOw0KK30NCisNCitYaW5oYS5hZGRPbmxvYWRIYW5kbGVyKCBpbml0LCB3aW5kb3cgKTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvcG9wdXAuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvYXNzZXRzL3BvcHVwLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMzgyOGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvYXNzZXRzL3BvcHVwLmpzCkBAIC0wLDAgKzEsODcgQEAKKy8vIGh0bWxBcmVhIHYzLjAgLSBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgaW50ZXJhY3RpdmV0b29scy5jb20sIGluYy4NCisvLyBUaGlzIGNvcHlyaWdodCBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLg0KKy8vDQorLy8gUG9ydGlvbnMgKGMpIGR5bmFyY2guY29tLCAyMDAzDQorLy8NCisvLyBBIGZyZWUgV1lTSVdZRyBlZGl0b3IgcmVwbGFjZW1lbnQgZm9yIDx0ZXh0YXJlYT4gZmllbGRzLg0KKy8vIEZvciBmdWxsIHNvdXJjZSBjb2RlIGFuZCBkb2NzLCB2aXNpdCBodHRwOi8vd3d3LmludGVyYWN0aXZldG9vbHMuY29tLw0KKy8vDQorLy8gVmVyc2lvbiAzLjAgZGV2ZWxvcGVkIGJ5IE1paGFpIEJhem9uLg0KKy8vICAgaHR0cDovL2R5bmFyY2guY29tL21pc2hvbw0KKy8vDQorLy8gJElkOiBwb3B1cC5qcyAxMDg0IDIwMDgtMTAtMTIgMTc6NDI6NDJaIHJheSAkDQorDQorZnVuY3Rpb24gX19kbGdfb25jbG9zZSgpIHsNCisgICAgaWYob3BlbmVyLkRpYWxvZy5fcmV0dXJuKQ0KKyAgICAgICAgb3BlbmVyLkRpYWxvZy5fcmV0dXJuKG51bGwpOw0KK30NCitmdW5jdGlvbiBfX2RsZ19pbml0KCBib3R0b20sIHdpbl9kaW0gKSB7DQorICBfX3hpbmhhX2RsZ19pbml0KHdpbl9kaW0pOw0KK30NCisNCitmdW5jdGlvbiBfX3hpbmhhX2RsZ19pbml0KCB3aW5fZGltICkgew0KKyAgaWYod2luZG93Ll9fZGxnX2luaXRfZG9uZSkgcmV0dXJuIHRydWU7DQorICANCisgIGlmKHdpbmRvdy5vcGVuZXIuX2VkaXRvcl9za2luKSB7DQorICAgIHZhciBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTsNCisgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIik7DQorICAgIGxpbmsudHlwZSA9ICJ0ZXh0L2NzcyI7DQorICAgIGxpbmsuaHJlZiA9IHdpbmRvdy5vcGVuZXIuX2VkaXRvcl91cmwgKyAnc2tpbnMvJyArIHdpbmRvdy5vcGVuZXIuX2VkaXRvcl9za2luICsgJy9za2luLmNzcyc7DQorICAgIGxpbmsucmVsID0gInN0eWxlc2hlZXQiOw0KKyAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspOw0KKyAgfQ0KKyAgaWYgKCF3aW5kb3cuZGlhbG9nQXJndW1lbnRzICYmIG9wZW5lci5EaWFsb2cuX2FyZ3VtZW50cykNCisgIHsNCisgICAgd2luZG93LmRpYWxvZ0FyZ3VtZW50cyA9IG9wZW5lci5EaWFsb2cuX2FyZ3VtZW50czsNCisgIH0NCisNCisgIFhpbmhhLmFkZERvbTBFdmVudChkb2N1bWVudC5ib2R5LCAna2V5cHJlc3MnLCBfX2RsZ19jbG9zZV9vbl9lc2MpOw0KKyAgd2luZG93Ll9fZGxnX2luaXRfZG9uZSA9IHRydWU7DQorfQ0KK2Z1bmN0aW9uIF9fZGxnX3RyYW5zbGF0ZShjb250ZXh0KSB7DQorICAgIHZhciB0eXBlcyA9IFsic3BhbiIsICJvcHRpb24iLCAidGQiLCAidGgiLCAiYnV0dG9uIiwgImRpdiIsICJsYWJlbCIsICJhIiwiaW1nIiwgImxlZ2VuZCJdOw0KKyAgICBmb3IgKHZhciB0eXBlID0gMDsgdHlwZSA8IHR5cGVzLmxlbmd0aDsgdHlwZSsrKSB7DQorICAgICAgICB2YXIgc3BhbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSh0eXBlc1t0eXBlXSk7DQorICAgICAgICBmb3IgKHZhciBpID0gc3BhbnMubGVuZ3RoOyAtLWkgPj0gMDspIHsNCisgICAgICAgICAgICB2YXIgc3BhbiA9IHNwYW5zW2ldOw0KKyAgICAgICAgICAgIGlmIChzcGFuLmZpcnN0Q2hpbGQgJiYgc3Bhbi5maXJzdENoaWxkLmRhdGEpIHsNCisgICAgICAgICAgICAgICAgdmFyIHR4dCA9IFhpbmhhLl9sYyhzcGFuLmZpcnN0Q2hpbGQuZGF0YSwgY29udGV4dCk7DQorICAgICAgICAgICAgICAgIGlmICh0eHQpDQorICAgICAgICAgICAgICAgICAgICBzcGFuLmZpcnN0Q2hpbGQuZGF0YSA9IHR4dDsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgaWYgKHNwYW4udGl0bGUpIHsNCisgICAgICAgICAgICAgICAgdmFyIHR4dCA9IFhpbmhhLl9sYyhzcGFuLnRpdGxlLCBjb250ZXh0KTsNCisgICAgICAgICAgICAgICAgaWYgKHR4dCkNCisgICAgICAgICAgICAgICAgICAgIHNwYW4udGl0bGUgPSB0eHQ7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGlmIChzcGFuLmFsdCkgew0KKyAgICAgICAgICAgICAgICB2YXIgdHh0ID0gWGluaGEuX2xjKHNwYW4uYWx0LCBjb250ZXh0KTsNCisgICAgICAgICAgICAgICAgaWYgKHR4dCkNCisgICAgICAgICAgICAgICAgICAgIHNwYW4uYWx0ID0gdHh0Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBkb2N1bWVudC50aXRsZSA9IFhpbmhhLl9sYyhkb2N1bWVudC50aXRsZSwgY29udGV4dCk7DQorfQ0KKw0KKy8vIGNsb3NlcyB0aGUgZGlhbG9nIGFuZCBwYXNzZXMgdGhlIHJldHVybiBpbmZvIHVwcGVyLg0KK2Z1bmN0aW9uIF9fZGxnX2Nsb3NlKHZhbCkgew0KKyAgICBvcGVuZXIuRGlhbG9nLl9yZXR1cm4odmFsKTsNCisgICAgd2luZG93LmNsb3NlKCk7DQorfQ0KKw0KK2Z1bmN0aW9uIHBvcHVwUHJvbXB0KCBwcm9tcHQsIHZhbHVlLCBoYW5kbGVyLCB0aXRsZSkNCit7DQorICANCisgICAgRGlhbG9nKCJwcm9tcHQuaHRtbCIsIGZ1bmN0aW9uKHBhcmFtKQ0KKyAgICB7DQorICAgICAgaWYgKCFwYXJhbSkgLy8gdXNlciBtdXN0IGhhdmUgcHJlc3NlZCBDYW5jZWwNCisgICAgICB7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgfQ0KKyAgICAgIGVsc2UNCisgICAgICB7DQorICAgICAgICBoYW5kbGVyIChwYXJhbS52YWx1ZSk7DQorICAgICAgfQ0KKyAgICB9LCB7cHJvbXB0OnByb21wdCx2YWx1ZTp2YWx1ZSx0aXRsZTp0aXRsZX0pOw0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvYXNzZXRzL3NsaWRlci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvc2xpZGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMDNlZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvYXNzZXRzL3NsaWRlci5qcwpAQCAtMCwwICsxLDEwNSBAQAorLyoqCisgKiBJbWFnZUVkaXRvciBzbGlkZXIgZmlsZS4KKyAqIEF1dGhvcnM6IFdlaSBaaHVvLCBBZnJ1LCBLcnp5c3p0b2YgS290b3dpY3oKKyAqIFZlcnNpb246IFVwZGF0ZWQgb24gMDgtMDEtMjAwNSBieSBBZnJ1CisgKiBWZXJzaW9uOiBVcGRhdGVkIG9uIDIwLTA2LTIwMDYgYnkgS3J6eXN6dG9mIEtvdG93aWN6CisgKiBQYWNrYWdlOiBFeHRlbmRlZEZpbGVNYW5hZ2VyIChFRk0gMS4xLjEpCisgKiBodHRwOi8vd3d3LmFmcnVzb2Z0LmNvbS9odG1sYXJlYQorICovCisKK3ZhciBpZT1kb2N1bWVudC5hbGw7Cit2YXIgbnM2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkJiYhZG9jdW1lbnQuYWxsOworCitkb2N1bWVudC5vbm1vdXNldXAgPSBjYXB0dXJlU3RvcDsKKwordmFyIGN1cnJlbnRTbGlkZXIgPSBudWxsLHNsaWRlckZpZWxkID0gbnVsbDsKK3ZhciByYW5nZU1pbiA9IG51bGwsIHJhbmdlTWF4PSBudWxsLCBzeCA9IC0xLCBzeSA9IC0xLCBpbml0WD0wOworCitmdW5jdGlvbiBnZXRNb3VzZVhZKGUpIHsKKworICAgIC8vYWxlcnQoJ2hlbGxvJyk7CisgICAgeCA9IG5zNj8gZS5jbGllbnRYOiBldmVudC5jbGllbnRYCisgICAgeSA9IG5zNj8gZS5jbGllbnRZOiBldmVudC5jbGllbnRZCisKKyAgICBpZiAoc3ggPCAwKSBzeCA9IHg7IGlmIChzeSA8IDApIHN5ID0geTsKKworICAgIHZhciBkeCA9IGluaXRYICsoeC1zeCk7CisKKyAgICBpZiAoZHggPD0gcmFuZ2VNaW4pCisgICAgICAgIGR4ID0gcmFuZ2VNaW47CisgICAgZWxzZSBpZiAoZHggPj0gcmFuZ2VNYXgpCisgICAgICAgIGR4ID0gcmFuZ2VNYXg7CisKKyAgICB2YXIgcmFuZ2UgPSAoZHgtcmFuZ2VNaW4pLyhyYW5nZU1heCAtIHJhbmdlTWluKSoxMDA7CisKKyAgICBpZiAoY3VycmVudFNsaWRlciAhPSAgbnVsbCkKKyAgICAgICAgY3VycmVudFNsaWRlci5zdHlsZS5sZWZ0ID0gZHgrInB4IjsKKworICAgIGlmIChzbGlkZXJGaWVsZCAhPSBudWxsKQorICAgIHsKKyAgICAgICAgc2xpZGVyRmllbGQudmFsdWUgPSBwYXJzZUludChyYW5nZSk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKworfQorCitmdW5jdGlvbiBpbml0U2xpZGVyKCkKK3sKKyAgICBpZiAoY3VycmVudFNsaWRlciA9PSBudWxsKQorICAgICAgICBjdXJyZW50U2xpZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NsaWRlcmJhcicpOworCisgICAgaWYgKHNsaWRlckZpZWxkID09IG51bGwpCisgICAgICAgIHNsaWRlckZpZWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3F1YWxpdHknKTsKKworICAgIGlmIChyYW5nZU1pbiA9PSBudWxsKQorICAgICAgICByYW5nZU1pbiA9IDMKKyAgICBpZiAocmFuZ2VNYXggPT0gbnVsbCkKKyAgICB7CisgICAgICAgIHZhciB0cmFjayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzbGlkZXJ0cmFjaycpOworICAgICAgICByYW5nZU1heCA9IHBhcnNlSW50KHRyYWNrLnN0eWxlLndpZHRoKTsKKyAgICB9CisKK30KKworZnVuY3Rpb24gdXBkYXRlU2xpZGVyKHZhbHVlKQoreworICAgIGluaXRTbGlkZXIoKTsKKworICAgIHZhciBuZXdWYWx1ZSA9IHBhcnNlSW50KHZhbHVlKS8xMDAqKHJhbmdlTWF4LXJhbmdlTWluKTsKKworICAgIGlmIChuZXdWYWx1ZSA8PSByYW5nZU1pbikKKyAgICAgICAgbmV3VmFsdWUgPSByYW5nZU1pbjsKKyAgICBlbHNlIGlmIChuZXdWYWx1ZSA+PSByYW5nZU1heCkKKyAgICAgICAgbmV3VmFsdWUgPSByYW5nZU1heDsKKworICAgIGlmIChjdXJyZW50U2xpZGVyICE9ICBudWxsKQorICAgICAgICBjdXJyZW50U2xpZGVyLnN0eWxlLmxlZnQgPSBuZXdWYWx1ZSsicHgiOworCisgICAgdmFyIHJhbmdlID0gbmV3VmFsdWUvKHJhbmdlTWF4IC0gcmFuZ2VNaW4pKjEwMDsKKworICAgIGlmIChzbGlkZXJGaWVsZCAhPSBudWxsKQorICAgICAgICBzbGlkZXJGaWVsZC52YWx1ZSA9IHBhcnNlSW50KHJhbmdlKTsKK30KKworZnVuY3Rpb24gY2FwdHVyZVN0YXJ0KCkKK3sKKworICAgIGluaXRTbGlkZXIoKTsKKworICAgIGluaXRYID0gcGFyc2VJbnQoY3VycmVudFNsaWRlci5zdHlsZS5sZWZ0KTsKKyAgICBpZiAoaW5pdFggPiByYW5nZU1heCkKKyAgICAgICAgaW5pdFggPSByYW5nZU1heDsKKyAgICBlbHNlIGlmIChpbml0WCA8IHJhbmdlTWluKQorICAgICAgICBpbml0WCA9IHJhbmdlTWluOworCisgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBnZXRNb3VzZVhZOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBjYXB0dXJlU3RvcCgpCit7CisgICAgc3ggPSAtMTsgc3kgPSAtMTsKKyAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG51bGw7CisgICAgcmV0dXJuIGZhbHNlOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvd3pfanNncmFwaGljcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9hc3NldHMvd3pfanNncmFwaGljcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGU2ZjhlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2Fzc2V0cy93el9qc2dyYXBoaWNzLmpzCkBAIC0wLDAgKzEsMTE2MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiogRmlsZW5hbWUuLi4uLi46ICB3el9qc2dyYXBoaWNzLmpzDQorKiogTGFzdCBjaGFuZ2VkLi46ICAyIE5vdmVtYmVyIDIwMDcgYnkgUmFpbXVuZCBNZXllciB1cGRhdGVkIHRvIG5ldyB2ZXJzaW9uICANCisqKiBOb3Rlcy4uLi4uLi4uLjogIE1vZGlmaWVkIGJ5IFhpYW5nIFdlaSBaSFVPIDx3ZWlAemh1by5vcmc+IGZvciBJbWFnZSBFZGl0b3IsIGFkZGVkIGV4dHJhIGNvbW1hbmRzIGwuIDY5MC03NDANCisqKi8gDQorDQorLyogVGhpcyBub3RpY2UgbXVzdCBiZSB1bnRvdWNoZWQgYXQgYWxsIHRpbWVzLg0KKw0KK3d6X2pzZ3JhcGhpY3MuanMgICAgdi4gMy4wMg0KK1RoZSBsYXRlc3QgdmVyc2lvbiBpcyBhdmFpbGFibGUgYXQNCitodHRwOi8vd3d3LndhbHRlcnpvcm4uY29tDQorb3IgaHR0cDovL3d3dy5kZXZpcmEuY29tDQorb3IgaHR0cDovL3d3dy53YWx0ZXJ6b3JuLmRlDQorDQorQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgV2FsdGVyIFpvcm4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorQ3JlYXRlZCAzLiAxMS4gMjAwMiBieSBXYWx0ZXIgWm9ybiAoV2ViOiBodHRwOi8vd3d3LndhbHRlcnpvcm4uY29tICkNCitMYXN0IG1vZGlmaWVkOiAyNi4gMTAuIDIwMDcNCisNCitQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIGZvciBJbnRlcm5ldCBFeHBsb3Jlcg0KK2J5IFRob21hcyBGcmFuayBhbmQgSm9obiBIb2xkc3dvcnRoLg0KK2ZpbGxQb2x5Z29uIG1ldGhvZCBpbXBsZW1lbnRlZCBieSBNYXR0aGlldSBIYWxsZXIuDQorDQorSGlnaCBQZXJmb3JtYW5jZSBKYXZhU2NyaXB0IEdyYXBoaWNzIExpYnJhcnkuDQorUHJvdmlkZXMgbWV0aG9kcw0KKy0gdG8gZHJhdyBsaW5lcywgcmVjdGFuZ2xlcywgZWxsaXBzZXMsIHBvbHlnb25zDQorCXdpdGggc3BlY2lmaWFibGUgbGluZSB0aGlja25lc3MsDQorLSB0byBmaWxsIHJlY3RhbmdsZXMsIHBvbHlnb25zLCBlbGxpcHNlcyBhbmQgYXJjcw0KKy0gdG8gZHJhdyB0ZXh0Lg0KK05PVEU6IE9wZXJhdGlvbnMsIGZ1bmN0aW9ucyBhbmQgYnJhbmNoaW5nIGhhdmUgcmF0aGVyIGJlZW4gb3B0aW1pemVkDQordG8gZWZmaWNpZW5jeSBhbmQgc3BlZWQgdGhhbiB0byBzaG9ydG5lc3Mgb2Ygc291cmNlIGNvZGUuDQorDQorTElDRU5TRTogTEdQTA0KKw0KK1RoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQorTGljZW5zZSAoTEdQTCkgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KK3ZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKw0KK1RoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCitMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCitMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQorRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQSwNCitvciBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2xlc3Nlci5odG1sDQorKi8NCisNCisNCit2YXIgamdfb2ssIGpnX2llLCBqZ19mYXN0LCBqZ19kb20sIGpnX21vejsNCisNCisNCitmdW5jdGlvbiBfY2hrREhUTSh4LCBpKQ0KK3sNCisJeCA9IGRvY3VtZW50LmJvZHkgfHwgbnVsbDsNCisJamdfaWUgPSB4ICYmIHR5cGVvZiB4Lmluc2VydEFkamFjZW50SFRNTCAhPSAidW5kZWZpbmVkIiAmJiBkb2N1bWVudC5jcmVhdGVFbGVtZW50Ow0KKwlqZ19kb20gPSAoeCAmJiAhamdfaWUgJiYNCisJCXR5cGVvZiB4LmFwcGVuZENoaWxkICE9ICJ1bmRlZmluZWQiICYmDQorCQl0eXBlb2YgZG9jdW1lbnQuY3JlYXRlUmFuZ2UgIT0gInVuZGVmaW5lZCIgJiYNCisJCXR5cGVvZiAoaSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkpLnNldFN0YXJ0QmVmb3JlICE9ICJ1bmRlZmluZWQiICYmDQorCQl0eXBlb2YgaS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgIT0gInVuZGVmaW5lZCIpOw0KKwlqZ19mYXN0ID0gamdfaWUgJiYgZG9jdW1lbnQuYWxsICYmICF3aW5kb3cub3BlcmE7DQorCWpnX21veiA9IGpnX2RvbSAmJiB0eXBlb2YgeC5zdHlsZS5Nb3pPcGFjaXR5ICE9ICJ1bmRlZmluZWQiOw0KKwlqZ19vayA9ICEhKGpnX2llIHx8IGpnX2RvbSk7DQorfQ0KKw0KK2Z1bmN0aW9uIF9wbnRDbnZEb20oKQ0KK3sNCisJdmFyIHggPSB0aGlzLnduZC5kb2N1bWVudC5jcmVhdGVSYW5nZSgpOw0KKwl4LnNldFN0YXJ0QmVmb3JlKHRoaXMuY252KTsNCisJeCA9IHguY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGpnX2Zhc3Q/IHRoaXMuX2h0bVJwYygpIDogdGhpcy5odG0pOw0KKwlpZih0aGlzLmNudikgdGhpcy5jbnYuYXBwZW5kQ2hpbGQoeCk7DQorCXRoaXMuaHRtID0gIiI7DQorfQ0KKw0KK2Z1bmN0aW9uIF9wbnRDbnZJZSgpDQorew0KKwlpZih0aGlzLmNudikgdGhpcy5jbnYuaW5zZXJ0QWRqYWNlbnRIVE1MKCJCZWZvcmVFbmQiLCBqZ19mYXN0PyB0aGlzLl9odG1ScGMoKSA6IHRoaXMuaHRtKTsNCisJdGhpcy5odG0gPSAiIjsNCit9DQorDQorZnVuY3Rpb24gX3BudERvYygpDQorew0KKwl0aGlzLnduZC5kb2N1bWVudC53cml0ZShqZ19mYXN0PyB0aGlzLl9odG1ScGMoKSA6IHRoaXMuaHRtKTsNCisJdGhpcy5odG0gPSAnJzsNCit9DQorDQorZnVuY3Rpb24gX3BudE4oKQ0KK3sNCisJOw0KK30NCisNCitmdW5jdGlvbiBfbWtEaXYoeCwgeSwgdywgaCkNCit7DQorCXRoaXMuaHRtICs9ICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsnKw0KKwkJJ2xlZnQ6JyArIHggKyAncHg7JysNCisJCSd0b3A6JyArIHkgKyAncHg7JysNCisJCSd3aWR0aDonICsgdyArICdweDsnKw0KKwkJJ2hlaWdodDonICsgaCArICdweDsnKw0KKwkJJ2NsaXA6cmVjdCgwLCcrdysncHgsJytoKydweCwwKTsnKw0KKwkJJ2JhY2tncm91bmQtY29sb3I6JyArIHRoaXMuY29sb3IgKw0KKwkJKCFqZ19tb3o/ICc7b3ZlcmZsb3c6aGlkZGVuJyA6ICcnKSsNCisJCSc7Ij48XC9kaXY+JzsNCit9DQorDQorZnVuY3Rpb24gX21rRGl2SWUoeCwgeSwgdywgaCkNCit7DQorCXRoaXMuaHRtICs9ICclJScrdGhpcy5jb2xvcisnOycreCsnOycreSsnOycrdysnOycraCsnOyc7DQorfQ0KKw0KK2Z1bmN0aW9uIF9ta0RpdlBydCh4LCB5LCB3LCBoKQ0KK3sNCisJdGhpcy5odG0gKz0gJzxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOycrDQorCQknYm9yZGVyLWxlZnQ6JyArIHcgKyAncHggc29saWQgJyArIHRoaXMuY29sb3IgKyAnOycrDQorCQknbGVmdDonICsgeCArICdweDsnKw0KKwkJJ3RvcDonICsgeSArICdweDsnKw0KKwkJJ3dpZHRoOjBweDsnKw0KKwkJJ2hlaWdodDonICsgaCArICdweDsnKw0KKwkJJ2NsaXA6cmVjdCgwLCcrdysncHgsJytoKydweCwwKTsnKw0KKwkJJ2JhY2tncm91bmQtY29sb3I6JyArIHRoaXMuY29sb3IgKw0KKwkJKCFqZ19tb3o/ICc7b3ZlcmZsb3c6aGlkZGVuJyA6ICcnKSsNCisJCSc7Ij48XC9kaXY+JzsNCit9DQorDQordmFyIF9yZWdleCA9ICAvJSUoW147XSspOyhbXjtdKyk7KFteO10rKTsoW147XSspOyhbXjtdKyk7L2c7DQorZnVuY3Rpb24gX2h0bVJwYygpDQorew0KKwlyZXR1cm4gdGhpcy5odG0ucmVwbGFjZSgNCisJCV9yZWdleCwNCisJCSc8ZGl2IHN0eWxlPSJvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZC1jb2xvcjonKw0KKwkJJyQxO2xlZnQ6JDI7dG9wOiQzO3dpZHRoOiQ0O2hlaWdodDokNSI+PC9kaXY+XG4nKTsNCit9DQorDQorZnVuY3Rpb24gX2h0bVBydFJwYygpDQorew0KKwlyZXR1cm4gdGhpcy5odG0ucmVwbGFjZSgNCisJCV9yZWdleCwNCisJCSc8ZGl2IHN0eWxlPSJvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZC1jb2xvcjonKw0KKwkJJyQxO2xlZnQ6JDI7dG9wOiQzO3dpZHRoOiQ0O2hlaWdodDokNTtib3JkZXItbGVmdDokNHB4IHNvbGlkICQxIj48L2Rpdj5cbicpOw0KK30NCisNCitmdW5jdGlvbiBfbWtMaW4oeDEsIHkxLCB4MiwgeTIpDQorew0KKwlpZih4MSA+IHgyKQ0KKwl7DQorCQl2YXIgX3gyID0geDI7DQorCQl2YXIgX3kyID0geTI7DQorCQl4MiA9IHgxOw0KKwkJeTIgPSB5MTsNCisJCXgxID0gX3gyOw0KKwkJeTEgPSBfeTI7DQorCX0NCisJdmFyIGR4ID0geDIteDEsIGR5ID0gTWF0aC5hYnMoeTIteTEpLA0KKwl4ID0geDEsIHkgPSB5MSwNCisJeUluY3IgPSAoeTEgPiB5Mik/IC0xIDogMTsNCisNCisJaWYoZHggPj0gZHkpDQorCXsNCisJCXZhciBwciA9IGR5PDwxLA0KKwkJcHJ1ID0gcHIgLSAoZHg8PDEpLA0KKwkJcCA9IHByLWR4LA0KKwkJb3ggPSB4Ow0KKwkJd2hpbGUoZHggPiAwKQ0KKwkJey0tZHg7DQorCQkJKyt4Ow0KKwkJCWlmKHAgPiAwKQ0KKwkJCXsNCisJCQkJdGhpcy5fbWtEaXYob3gsIHksIHgtb3gsIDEpOw0KKwkJCQl5ICs9IHlJbmNyOw0KKwkJCQlwICs9IHBydTsNCisJCQkJb3ggPSB4Ow0KKwkJCX0NCisJCQllbHNlIHAgKz0gcHI7DQorCQl9DQorCQl0aGlzLl9ta0RpdihveCwgeSwgeDItb3grMSwgMSk7DQorCX0NCisNCisJZWxzZQ0KKwl7DQorCQl2YXIgcHIgPSBkeDw8MSwNCisJCXBydSA9IHByIC0gKGR5PDwxKSwNCisJCXAgPSBwci1keSwNCisJCW95ID0geTsNCisJCWlmKHkyIDw9IHkxKQ0KKwkJew0KKwkJCXdoaWxlKGR5ID4gMCkNCisJCQl7LS1keTsNCisJCQkJaWYocCA+IDApDQorCQkJCXsNCisJCQkJCXRoaXMuX21rRGl2KHgrKywgeSwgMSwgb3kteSsxKTsNCisJCQkJCXkgKz0geUluY3I7DQorCQkJCQlwICs9IHBydTsNCisJCQkJCW95ID0geTsNCisJCQkJfQ0KKwkJCQllbHNlDQorCQkJCXsNCisJCQkJCXkgKz0geUluY3I7DQorCQkJCQlwICs9IHByOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXRoaXMuX21rRGl2KHgyLCB5MiwgMSwgb3kteTIrMSk7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJd2hpbGUoZHkgPiAwKQ0KKwkJCXstLWR5Ow0KKwkJCQl5ICs9IHlJbmNyOw0KKwkJCQlpZihwID4gMCkNCisJCQkJew0KKwkJCQkJdGhpcy5fbWtEaXYoeCsrLCBveSwgMSwgeS1veSk7DQorCQkJCQlwICs9IHBydTsNCisJCQkJCW95ID0geTsNCisJCQkJfQ0KKwkJCQllbHNlIHAgKz0gcHI7DQorCQkJfQ0KKwkJCXRoaXMuX21rRGl2KHgyLCBveSwgMSwgeTItb3krMSk7DQorCQl9DQorCX0NCit9DQorDQorZnVuY3Rpb24gX21rTGluMkQoeDEsIHkxLCB4MiwgeTIpDQorew0KKwlpZih4MSA+IHgyKQ0KKwl7DQorCQl2YXIgX3gyID0geDI7DQorCQl2YXIgX3kyID0geTI7DQorCQl4MiA9IHgxOw0KKwkJeTIgPSB5MTsNCisJCXgxID0gX3gyOw0KKwkJeTEgPSBfeTI7DQorCX0NCisJdmFyIGR4ID0geDIteDEsIGR5ID0gTWF0aC5hYnMoeTIteTEpLA0KKwl4ID0geDEsIHkgPSB5MSwNCisJeUluY3IgPSAoeTEgPiB5Mik/IC0xIDogMTsNCisNCisJdmFyIHMgPSB0aGlzLnN0cm9rZTsNCisJaWYoZHggPj0gZHkpDQorCXsNCisJCWlmKGR4ID4gMCAmJiBzLTMgPiAwKQ0KKwkJew0KKwkJCXZhciBfcyA9IChzKmR4Kk1hdGguc3FydCgxK2R5KmR5LyhkeCpkeCkpLWR4LShzPj4xKSpkeSkgLyBkeDsNCisJCQlfcyA9ICghKHMtNCk/IE1hdGguY2VpbChfcykgOiBNYXRoLnJvdW5kKF9zKSkgKyAxOw0KKwkJfQ0KKwkJZWxzZSB2YXIgX3MgPSBzOw0KKwkJdmFyIGFkID0gTWF0aC5jZWlsKHMvMik7DQorDQorCQl2YXIgcHIgPSBkeTw8MSwNCisJCXBydSA9IHByIC0gKGR4PDwxKSwNCisJCXAgPSBwci1keCwNCisJCW94ID0geDsNCisJCXdoaWxlKGR4ID4gMCkNCisJCXstLWR4Ow0KKwkJCSsreDsNCisJCQlpZihwID4gMCkNCisJCQl7DQorCQkJCXRoaXMuX21rRGl2KG94LCB5LCB4LW94K2FkLCBfcyk7DQorCQkJCXkgKz0geUluY3I7DQorCQkJCXAgKz0gcHJ1Ow0KKwkJCQlveCA9IHg7DQorCQkJfQ0KKwkJCWVsc2UgcCArPSBwcjsNCisJCX0NCisJCXRoaXMuX21rRGl2KG94LCB5LCB4Mi1veCthZCsxLCBfcyk7DQorCX0NCisNCisJZWxzZQ0KKwl7DQorCQlpZihzLTMgPiAwKQ0KKwkJew0KKwkJCXZhciBfcyA9IChzKmR5Kk1hdGguc3FydCgxK2R4KmR4LyhkeSpkeSkpLShzPj4xKSpkeC1keSkgLyBkeTsNCisJCQlfcyA9ICghKHMtNCk/IE1hdGguY2VpbChfcykgOiBNYXRoLnJvdW5kKF9zKSkgKyAxOw0KKwkJfQ0KKwkJZWxzZSB2YXIgX3MgPSBzOw0KKwkJdmFyIGFkID0gTWF0aC5yb3VuZChzLzIpOw0KKw0KKwkJdmFyIHByID0gZHg8PDEsDQorCQlwcnUgPSBwciAtIChkeTw8MSksDQorCQlwID0gcHItZHksDQorCQlveSA9IHk7DQorCQlpZih5MiA8PSB5MSkNCisJCXsNCisJCQkrK2FkOw0KKwkJCXdoaWxlKGR5ID4gMCkNCisJCQl7LS1keTsNCisJCQkJaWYocCA+IDApDQorCQkJCXsNCisJCQkJCXRoaXMuX21rRGl2KHgrKywgeSwgX3MsIG95LXkrYWQpOw0KKwkJCQkJeSArPSB5SW5jcjsNCisJCQkJCXAgKz0gcHJ1Ow0KKwkJCQkJb3kgPSB5Ow0KKwkJCQl9DQorCQkJCWVsc2UNCisJCQkJew0KKwkJCQkJeSArPSB5SW5jcjsNCisJCQkJCXAgKz0gcHI7DQorCQkJCX0NCisJCQl9DQorCQkJdGhpcy5fbWtEaXYoeDIsIHkyLCBfcywgb3kteTIrYWQpOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCXdoaWxlKGR5ID4gMCkNCisJCQl7LS1keTsNCisJCQkJeSArPSB5SW5jcjsNCisJCQkJaWYocCA+IDApDQorCQkJCXsNCisJCQkJCXRoaXMuX21rRGl2KHgrKywgb3ksIF9zLCB5LW95K2FkKTsNCisJCQkJCXAgKz0gcHJ1Ow0KKwkJCQkJb3kgPSB5Ow0KKwkJCQl9DQorCQkJCWVsc2UgcCArPSBwcjsNCisJCQl9DQorCQkJdGhpcy5fbWtEaXYoeDIsIG95LCBfcywgeTItb3krYWQrMSk7DQorCQl9DQorCX0NCit9DQorDQorZnVuY3Rpb24gX21rTGluRG90dCh4MSwgeTEsIHgyLCB5MikNCit7DQorCWlmKHgxID4geDIpDQorCXsNCisJCXZhciBfeDIgPSB4MjsNCisJCXZhciBfeTIgPSB5MjsNCisJCXgyID0geDE7DQorCQl5MiA9IHkxOw0KKwkJeDEgPSBfeDI7DQorCQl5MSA9IF95MjsNCisJfQ0KKwl2YXIgZHggPSB4Mi14MSwgZHkgPSBNYXRoLmFicyh5Mi15MSksDQorCXggPSB4MSwgeSA9IHkxLA0KKwl5SW5jciA9ICh5MSA+IHkyKT8gLTEgOiAxLA0KKwlkcncgPSB0cnVlOw0KKwlpZihkeCA+PSBkeSkNCisJew0KKwkJdmFyIHByID0gZHk8PDEsDQorCQlwcnUgPSBwciAtIChkeDw8MSksDQorCQlwID0gcHItZHg7DQorCQl3aGlsZShkeCA+IDApDQorCQl7LS1keDsNCisJCQlpZihkcncpIHRoaXMuX21rRGl2KHgsIHksIDEsIDEpOw0KKwkJCWRydyA9ICFkcnc7DQorCQkJaWYocCA+IDApDQorCQkJew0KKwkJCQl5ICs9IHlJbmNyOw0KKwkJCQlwICs9IHBydTsNCisJCQl9DQorCQkJZWxzZSBwICs9IHByOw0KKwkJCSsreDsNCisJCX0NCisJfQ0KKwllbHNlDQorCXsNCisJCXZhciBwciA9IGR4PDwxLA0KKwkJcHJ1ID0gcHIgLSAoZHk8PDEpLA0KKwkJcCA9IHByLWR5Ow0KKwkJd2hpbGUoZHkgPiAwKQ0KKwkJey0tZHk7DQorCQkJaWYoZHJ3KSB0aGlzLl9ta0Rpdih4LCB5LCAxLCAxKTsNCisJCQlkcncgPSAhZHJ3Ow0KKwkJCXkgKz0geUluY3I7DQorCQkJaWYocCA+IDApDQorCQkJew0KKwkJCQkrK3g7DQorCQkJCXAgKz0gcHJ1Ow0KKwkJCX0NCisJCQllbHNlIHAgKz0gcHI7DQorCQl9DQorCX0NCisJaWYoZHJ3KSB0aGlzLl9ta0Rpdih4LCB5LCAxLCAxKTsNCit9DQorDQorZnVuY3Rpb24gX21rT3YobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KQ0KK3sNCisJdmFyIGEgPSAoKyt3aWR0aCk+PjEsIGIgPSAoKytoZWlnaHQpPj4xLA0KKwl3b2QgPSB3aWR0aCYxLCBob2QgPSBoZWlnaHQmMSwNCisJY3ggPSBsZWZ0K2EsIGN5ID0gdG9wK2IsDQorCXggPSAwLCB5ID0gYiwNCisJb3ggPSAwLCBveSA9IGIsDQorCWFhMiA9IChhKmEpPDwxLCBhYTQgPSBhYTI8PDEsIGJiMiA9IChiKmIpPDwxLCBiYjQgPSBiYjI8PDEsDQorCXN0ID0gKGFhMj4+MSkqKDEtKGI8PDEpKSArIGJiMiwNCisJdHQgPSAoYmIyPj4xKSAtIGFhMiooKGI8PDEpLTEpLA0KKwl3LCBoOw0KKwl3aGlsZSh5ID4gMCkNCisJew0KKwkJaWYoc3QgPCAwKQ0KKwkJew0KKwkJCXN0ICs9IGJiMiooKHg8PDEpKzMpOw0KKwkJCXR0ICs9IGJiNCooKyt4KTsNCisJCX0NCisJCWVsc2UgaWYodHQgPCAwKQ0KKwkJew0KKwkJCXN0ICs9IGJiMiooKHg8PDEpKzMpIC0gYWE0Kih5LTEpOw0KKwkJCXR0ICs9IGJiNCooKyt4KSAtIGFhMiooKCh5LS0pPDwxKS0zKTsNCisJCQl3ID0geC1veDsNCisJCQloID0gb3kteTsNCisJCQlpZigodyYyKSAmJiAoaCYyKSkNCisJCQl7DQorCQkJCXRoaXMuX21rT3ZRZHMoY3gsIGN5LCB4LTIsIHkrMiwgMSwgMSwgd29kLCBob2QpOw0KKwkJCQl0aGlzLl9ta092UWRzKGN4LCBjeSwgeC0xLCB5KzEsIDEsIDEsIHdvZCwgaG9kKTsNCisJCQl9DQorCQkJZWxzZSB0aGlzLl9ta092UWRzKGN4LCBjeSwgeC0xLCBveSwgdywgaCwgd29kLCBob2QpOw0KKwkJCW94ID0geDsNCisJCQlveSA9IHk7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJdHQgLT0gYWEyKigoeTw8MSktMyk7DQorCQkJc3QgLT0gYWE0KigtLXkpOw0KKwkJfQ0KKwl9DQorCXcgPSBhLW94KzE7DQorCWggPSAob3k8PDEpK2hvZDsNCisJeSA9IGN5LW95Ow0KKwl0aGlzLl9ta0RpdihjeC1hLCB5LCB3LCBoKTsNCisJdGhpcy5fbWtEaXYoY3grb3grd29kLTEsIHksIHcsIGgpOw0KK30NCisNCitmdW5jdGlvbiBfbWtPdjJEKGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCkNCit7DQorCXZhciBzID0gdGhpcy5zdHJva2U7DQorCXdpZHRoICs9IHMrMTsNCisJaGVpZ2h0ICs9IHMrMTsNCisJdmFyIGEgPSB3aWR0aD4+MSwgYiA9IGhlaWdodD4+MSwNCisJd29kID0gd2lkdGgmMSwgaG9kID0gaGVpZ2h0JjEsDQorCWN4ID0gbGVmdCthLCBjeSA9IHRvcCtiLA0KKwl4ID0gMCwgeSA9IGIsDQorCWFhMiA9IChhKmEpPDwxLCBhYTQgPSBhYTI8PDEsIGJiMiA9IChiKmIpPDwxLCBiYjQgPSBiYjI8PDEsDQorCXN0ID0gKGFhMj4+MSkqKDEtKGI8PDEpKSArIGJiMiwNCisJdHQgPSAoYmIyPj4xKSAtIGFhMiooKGI8PDEpLTEpOw0KKw0KKwlpZihzLTQgPCAwICYmICghKHMtMikgfHwgd2lkdGgtNTEgPiAwICYmIGhlaWdodC01MSA+IDApKQ0KKwl7DQorCQl2YXIgb3ggPSAwLCBveSA9IGIsDQorCQl3LCBoLA0KKwkJcHh3Ow0KKwkJd2hpbGUoeSA+IDApDQorCQl7DQorCQkJaWYoc3QgPCAwKQ0KKwkJCXsNCisJCQkJc3QgKz0gYmIyKigoeDw8MSkrMyk7DQorCQkJCXR0ICs9IGJiNCooKyt4KTsNCisJCQl9DQorCQkJZWxzZSBpZih0dCA8IDApDQorCQkJew0KKwkJCQlzdCArPSBiYjIqKCh4PDwxKSszKSAtIGFhNCooeS0xKTsNCisJCQkJdHQgKz0gYmI0KigrK3gpIC0gYWEyKigoKHktLSk8PDEpLTMpOw0KKwkJCQl3ID0geC1veDsNCisJCQkJaCA9IG95LXk7DQorDQorCQkJCWlmKHctMSkNCisJCQkJew0KKwkJCQkJcHh3ID0gdysxKyhzJjEpOw0KKwkJCQkJaCA9IHM7DQorCQkJCX0NCisJCQkJZWxzZSBpZihoLTEpDQorCQkJCXsNCisJCQkJCXB4dyA9IHM7DQorCQkJCQloICs9IDErKHMmMSk7DQorCQkJCX0NCisJCQkJZWxzZSBweHcgPSBoID0gczsNCisJCQkJdGhpcy5fbWtPdlFkcyhjeCwgY3ksIHgtMSwgb3ksIHB4dywgaCwgd29kLCBob2QpOw0KKwkJCQlveCA9IHg7DQorCQkJCW95ID0geTsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJdHQgLT0gYWEyKigoeTw8MSktMyk7DQorCQkJCXN0IC09IGFhNCooLS15KTsNCisJCQl9DQorCQl9DQorCQl0aGlzLl9ta0RpdihjeC1hLCBjeS1veSwgcywgKG95PDwxKStob2QpOw0KKwkJdGhpcy5fbWtEaXYoY3grYSt3b2QtcywgY3ktb3ksIHMsIChveTw8MSkraG9kKTsNCisJfQ0KKw0KKwllbHNlDQorCXsNCisJCXZhciBfYSA9ICh3aWR0aC0oczw8MSkpPj4xLA0KKwkJX2IgPSAoaGVpZ2h0LShzPDwxKSk+PjEsDQorCQlfeCA9IDAsIF95ID0gX2IsDQorCQlfYWEyID0gKF9hKl9hKTw8MSwgX2FhNCA9IF9hYTI8PDEsIF9iYjIgPSAoX2IqX2IpPDwxLCBfYmI0ID0gX2JiMjw8MSwNCisJCV9zdCA9IChfYWEyPj4xKSooMS0oX2I8PDEpKSArIF9iYjIsDQorCQlfdHQgPSAoX2JiMj4+MSkgLSBfYWEyKigoX2I8PDEpLTEpLA0KKw0KKwkJcHhsID0gbmV3IEFycmF5KCksDQorCQlweHQgPSBuZXcgQXJyYXkoKSwNCisJCV9weGIgPSBuZXcgQXJyYXkoKTsNCisJCXB4bFswXSA9IDA7DQorCQlweHRbMF0gPSBiOw0KKwkJX3B4YlswXSA9IF9iLTE7DQorCQl3aGlsZSh5ID4gMCkNCisJCXsNCisJCQlpZihzdCA8IDApDQorCQkJew0KKwkJCQlweGxbcHhsLmxlbmd0aF0gPSB4Ow0KKwkJCQlweHRbcHh0Lmxlbmd0aF0gPSB5Ow0KKwkJCQlzdCArPSBiYjIqKCh4PDwxKSszKTsNCisJCQkJdHQgKz0gYmI0KigrK3gpOw0KKwkJCX0NCisJCQllbHNlIGlmKHR0IDwgMCkNCisJCQl7DQorCQkJCXB4bFtweGwubGVuZ3RoXSA9IHg7DQorCQkJCXN0ICs9IGJiMiooKHg8PDEpKzMpIC0gYWE0Kih5LTEpOw0KKwkJCQl0dCArPSBiYjQqKCsreCkgLSBhYTIqKCgoeS0tKTw8MSktMyk7DQorCQkJCXB4dFtweHQubGVuZ3RoXSA9IHk7DQorCQkJfQ0KKwkJCWVsc2UNCisJCQl7DQorCQkJCXR0IC09IGFhMiooKHk8PDEpLTMpOw0KKwkJCQlzdCAtPSBhYTQqKC0teSk7DQorCQkJfQ0KKw0KKwkJCWlmKF95ID4gMCkNCisJCQl7DQorCQkJCWlmKF9zdCA8IDApDQorCQkJCXsNCisJCQkJCV9zdCArPSBfYmIyKigoX3g8PDEpKzMpOw0KKwkJCQkJX3R0ICs9IF9iYjQqKCsrX3gpOw0KKwkJCQkJX3B4YltfcHhiLmxlbmd0aF0gPSBfeS0xOw0KKwkJCQl9DQorCQkJCWVsc2UgaWYoX3R0IDwgMCkNCisJCQkJew0KKwkJCQkJX3N0ICs9IF9iYjIqKChfeDw8MSkrMykgLSBfYWE0KihfeS0xKTsNCisJCQkJCV90dCArPSBfYmI0KigrK194KSAtIF9hYTIqKCgoX3ktLSk8PDEpLTMpOw0KKwkJCQkJX3B4YltfcHhiLmxlbmd0aF0gPSBfeS0xOw0KKwkJCQl9DQorCQkJCWVsc2UNCisJCQkJew0KKwkJCQkJX3R0IC09IF9hYTIqKChfeTw8MSktMyk7DQorCQkJCQlfc3QgLT0gX2FhNCooLS1feSk7DQorCQkJCQlfcHhiW19weGIubGVuZ3RoLTFdLS07DQorCQkJCX0NCisJCQl9DQorCQl9DQorDQorCQl2YXIgb3ggPSAtd29kLCBveSA9IGIsDQorCQlfb3kgPSBfcHhiWzBdLA0KKwkJbCA9IHB4bC5sZW5ndGgsDQorCQl3LCBoOw0KKwkJZm9yKHZhciBpID0gMDsgaSA8IGw7IGkrKykNCisJCXsNCisJCQlpZih0eXBlb2YgX3B4YltpXSAhPSAidW5kZWZpbmVkIikNCisJCQl7DQorCQkJCWlmKF9weGJbaV0gPCBfb3kgfHwgcHh0W2ldIDwgb3kpDQorCQkJCXsNCisJCQkJCXggPSBweGxbaV07DQorCQkJCQl0aGlzLl9ta092UWRzKGN4LCBjeSwgeCwgb3ksIHgtb3gsIG95LV9veSwgd29kLCBob2QpOw0KKwkJCQkJb3ggPSB4Ow0KKwkJCQkJb3kgPSBweHRbaV07DQorCQkJCQlfb3kgPSBfcHhiW2ldOw0KKwkJCQl9DQorCQkJfQ0KKwkJCWVsc2UNCisJCQl7DQorCQkJCXggPSBweGxbaV07DQorCQkJCXRoaXMuX21rRGl2KGN4LXgsIGN5LW95LCAxLCAob3k8PDEpK2hvZCk7DQorCQkJCXRoaXMuX21rRGl2KGN4K294K3dvZCwgY3ktb3ksIDEsIChveTw8MSkraG9kKTsNCisJCQkJb3ggPSB4Ow0KKwkJCQlveSA9IHB4dFtpXTsNCisJCQl9DQorCQl9DQorCQl0aGlzLl9ta0RpdihjeC1hLCBjeS1veSwgMSwgKG95PDwxKStob2QpOw0KKwkJdGhpcy5fbWtEaXYoY3grb3grd29kLCBjeS1veSwgMSwgKG95PDwxKStob2QpOw0KKwl9DQorfQ0KKw0KK2Z1bmN0aW9uIF9ta092RG90dChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpDQorew0KKwl2YXIgYSA9ICgrK3dpZHRoKT4+MSwgYiA9ICgrK2hlaWdodCk+PjEsDQorCXdvZCA9IHdpZHRoJjEsIGhvZCA9IGhlaWdodCYxLCBob2R1ID0gaG9kXjEsDQorCWN4ID0gbGVmdCthLCBjeSA9IHRvcCtiLA0KKwl4ID0gMCwgeSA9IGIsDQorCWFhMiA9IChhKmEpPDwxLCBhYTQgPSBhYTI8PDEsIGJiMiA9IChiKmIpPDwxLCBiYjQgPSBiYjI8PDEsDQorCXN0ID0gKGFhMj4+MSkqKDEtKGI8PDEpKSArIGJiMiwNCisJdHQgPSAoYmIyPj4xKSAtIGFhMiooKGI8PDEpLTEpLA0KKwlkcncgPSB0cnVlOw0KKwl3aGlsZSh5ID4gMCkNCisJew0KKwkJaWYoc3QgPCAwKQ0KKwkJew0KKwkJCXN0ICs9IGJiMiooKHg8PDEpKzMpOw0KKwkJCXR0ICs9IGJiNCooKyt4KTsNCisJCX0NCisJCWVsc2UgaWYodHQgPCAwKQ0KKwkJew0KKwkJCXN0ICs9IGJiMiooKHg8PDEpKzMpIC0gYWE0Kih5LTEpOw0KKwkJCXR0ICs9IGJiNCooKyt4KSAtIGFhMiooKCh5LS0pPDwxKS0zKTsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQl0dCAtPSBhYTIqKCh5PDwxKS0zKTsNCisJCQlzdCAtPSBhYTQqKC0teSk7DQorCQl9DQorCQlpZihkcncgJiYgeSA+PSBob2R1KSB0aGlzLl9ta092UWRzKGN4LCBjeSwgeCwgeSwgMSwgMSwgd29kLCBob2QpOw0KKwkJZHJ3ID0gIWRydzsNCisJfQ0KK30NCisNCitmdW5jdGlvbiBfbWtSZWN0KHgsIHksIHcsIGgpDQorew0KKwl2YXIgcyA9IHRoaXMuc3Ryb2tlOw0KKwl0aGlzLl9ta0Rpdih4LCB5LCB3LCBzKTsNCisJdGhpcy5fbWtEaXYoeCt3LCB5LCBzLCBoKTsNCisJdGhpcy5fbWtEaXYoeCwgeStoLCB3K3MsIHMpOw0KKwl0aGlzLl9ta0Rpdih4LCB5K3MsIHMsIGgtcyk7DQorfQ0KKw0KK2Z1bmN0aW9uIF9ta1JlY3REb3R0KHgsIHksIHcsIGgpDQorew0KKwl0aGlzLmRyYXdMaW5lKHgsIHksIHgrdywgeSk7DQorCXRoaXMuZHJhd0xpbmUoeCt3LCB5LCB4K3csIHkraCk7DQorCXRoaXMuZHJhd0xpbmUoeCwgeStoLCB4K3csIHkraCk7DQorCXRoaXMuZHJhd0xpbmUoeCwgeSwgeCwgeStoKTsNCit9DQorDQorZnVuY3Rpb24ganNnRm9udCgpDQorew0KKwl0aGlzLlBMQUlOID0gJ2ZvbnQtd2VpZ2h0Om5vcm1hbDsnOw0KKwl0aGlzLkJPTEQgPSAnZm9udC13ZWlnaHQ6Ym9sZDsnOw0KKwl0aGlzLklUQUxJQyA9ICdmb250LXN0eWxlOml0YWxpYzsnOw0KKwl0aGlzLklUQUxJQ19CT0xEID0gdGhpcy5JVEFMSUMgKyB0aGlzLkJPTEQ7DQorCXRoaXMuQk9MRF9JVEFMSUMgPSB0aGlzLklUQUxJQ19CT0xEOw0KK30NCit2YXIgRm9udCA9IG5ldyBqc2dGb250KCk7DQorDQorZnVuY3Rpb24ganNnU3Ryb2tlKCkNCit7DQorCXRoaXMuRE9UVEVEID0gLTE7DQorfQ0KK3ZhciBTdHJva2UgPSBuZXcganNnU3Ryb2tlKCk7DQorDQorZnVuY3Rpb24ganNHcmFwaGljcyhjbnYsIHduZCkNCit7DQorCXRoaXMuc2V0Q29sb3IgPSBmdW5jdGlvbih4KQ0KKwl7DQorCQl0aGlzLmNvbG9yID0geC50b0xvd2VyQ2FzZSgpOw0KKwl9Ow0KKw0KKwl0aGlzLnNldFN0cm9rZSA9IGZ1bmN0aW9uKHgpDQorCXsNCisJCXRoaXMuc3Ryb2tlID0geDsNCisJCWlmKCEoeCsxKSkNCisJCXsNCisJCQl0aGlzLmRyYXdMaW5lID0gX21rTGluRG90dDsNCisJCQl0aGlzLl9ta092ID0gX21rT3ZEb3R0Ow0KKwkJCXRoaXMuZHJhd1JlY3QgPSBfbWtSZWN0RG90dDsNCisJCX0NCisJCWVsc2UgaWYoeC0xID4gMCkNCisJCXsNCisJCQl0aGlzLmRyYXdMaW5lID0gX21rTGluMkQ7DQorCQkJdGhpcy5fbWtPdiA9IF9ta092MkQ7DQorCQkJdGhpcy5kcmF3UmVjdCA9IF9ta1JlY3Q7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJdGhpcy5kcmF3TGluZSA9IF9ta0xpbjsNCisJCQl0aGlzLl9ta092ID0gX21rT3Y7DQorCQkJdGhpcy5kcmF3UmVjdCA9IF9ta1JlY3Q7DQorCQl9DQorCX07DQorDQorCXRoaXMuc2V0UHJpbnRhYmxlID0gZnVuY3Rpb24oYXJnKQ0KKwl7DQorCQl0aGlzLnByaW50YWJsZSA9IGFyZzsNCisJCWlmKGpnX2Zhc3QpDQorCQl7DQorCQkJdGhpcy5fbWtEaXYgPSBfbWtEaXZJZTsNCisJCQl0aGlzLl9odG1ScGMgPSBhcmc/IF9odG1QcnRScGMgOiBfaHRtUnBjOw0KKwkJfQ0KKwkJZWxzZSB0aGlzLl9ta0RpdiA9IGFyZz8gX21rRGl2UHJ0IDogX21rRGl2Ow0KKwl9Ow0KKw0KKwl0aGlzLnNldEZvbnQgPSBmdW5jdGlvbihmYW0sIHN6LCBzdHkpDQorCXsNCisJCXRoaXMuZnRGYW0gPSBmYW07DQorCQl0aGlzLmZ0U3ogPSBzejsNCisJCXRoaXMuZnRTdHkgPSBzdHkgfHwgRm9udC5QTEFJTjsNCisJfTsNCisNCisJdGhpcy5kcmF3UG9seWxpbmUgPSB0aGlzLmRyYXdQb2x5TGluZSA9IGZ1bmN0aW9uKHgsIHkpDQorCXsNCisJCWZvciAodmFyIGk9eC5sZW5ndGggLSAxOyBpOykNCisJCXstLWk7DQorCQkJdGhpcy5kcmF3TGluZSh4W2ldLCB5W2ldLCB4W2krMV0sIHlbaSsxXSk7DQorCQl9DQorCX07DQorLyoqKioqKioqKioqKioqIFhpbmhhIGFkZGVkICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorCQ0KKwl0aGlzLnNldENvbG9yID0gbmV3IEZ1bmN0aW9uKCdhcmcnLCAndGhpcy5jb2xvciA9IGFyZzsnKTsNCisgICAgdGhpcy5nZXRDb2xvciA9IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMuY29sb3InKTsNCisNCisJdGhpcy5maWxsUmVjdCA9IGZ1bmN0aW9uKHgsIHksIHcsIGgpDQorCXsNCisJCXRoaXMuX21rRGl2KHgsIHksIHcsIGgpOw0KKwl9Ow0KKwkNCisgICAgdGhpcy5maWxsUmVjdFBhdHRlcm4gPSBmdW5jdGlvbih4LCB5LCB3LCBoLCB1cmwpDQorICAgIHsNCisgICAgICAgIHRoaXMuaHRtICs9ICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsnKw0KKyAgICAgICAgICAgICdsZWZ0OicgKyB4ICsgJ3B4OycrDQorICAgICAgICAgICAgJ3RvcDonICsgeSArICdweDsnKw0KKyAgICAgICAgICAgICd3aWR0aDonICsgdyArICdweDsnKw0KKyAgICAgICAgICAgICdoZWlnaHQ6JyArIGggKyAncHg7JysNCisgICAgICAgICAgICAnY2xpcDpyZWN0KDAsJyt3KydweCwnK2grJ3B4LDApOycrDQorICAgICAgICAgICAgJ292ZXJmbG93OmhpZGRlbjsnKw0KKyAgICAgICAgICAgIC8vJ2JhY2tncm91bmQtY29sb3I6JyArIHRoaXMuY29sb3IgKyAnOycrDQorICAgICAgICAgICAgImJhY2tncm91bmQtaW1hZ2U6IHVybCgnIiArIHVybCArICInKTsiKw0KKyAgICAgICAgICAgICJsYXllci1iYWNrZ3JvdW5kLWltYWdlOiB1cmwoJyIgKyB1cmwgKyAiJyk7IisNCisgICAgICAgICAgICAnei1pbmRleDoxMDA7Ij48XC9kaXY+JzsNCisgICAgICAgIC8vYWxlcnQodGhpcy5odG0pOw0KKyAgICB9Ow0KKw0KKyAgICB0aGlzLmRyYXdIYW5kbGUgPSBmdW5jdGlvbih4LCB5LCB3LCBoLCBjdXJzb3IpDQorICAgIHsNCisgICAgICAgIA0KKyAgICAgICAgdGhpcy5odG0gKz0gJzxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOycrDQorICAgICAgICAnbGVmdDonICsgeCArICdweDsnKw0KKyAgICAgICAgJ3RvcDonICsgeSArICdweDsnKw0KKyAgICAgICAgJ3dpZHRoOicgKyB3ICsgJ3B4OycrDQorICAgICAgICAnaGVpZ2h0OicgKyBoICsgJ3B4OycrDQorICAgICAgICAnY2xpcDpyZWN0KDAsJyt3KydweCwnK2grJ3B4LDApOycrDQorICAgICAgICAncGFkZGluZzogMnB4O292ZXJmbG93OmhpZGRlbjsnKw0KKyAgICAgICAgImN1cnNvcjogJyIgKyBjdXJzb3IgKyAiJzsiKw0KKyAgICAgICAgJyIgY2xhc3M9ImhhbmRsZUJveCIgaWQ9IicgKyBjdXJzb3IgKyAnIiA+PFwvZGl2Pic7DQorICAgIH07DQorCQ0KKwl0aGlzLmRyYXdIYW5kbGVCb3ggPSBmdW5jdGlvbih4LCB5LCB3LCBoLCBjdXJzb3IpDQorICAgIHsNCisgICAgICAgIA0KKyAgICAgICAgdGhpcy5odG0gKz0gJzxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOycrDQorICAgICAgICAnbGVmdDonICsgeCArICdweDsnKw0KKyAgICAgICAgJ3RvcDonICsgeSArICdweDsnKw0KKyAgICAgICAgJ3dpZHRoOicgKyB3ICsgJ3B4OycrDQorICAgICAgICAnaGVpZ2h0OicgKyBoICsgJ3B4OycrDQorICAgICAgICAnY2xpcDpyZWN0KDAsJysodysyKSsncHgsJysoaCsyKSsncHgsMCk7JysNCisgICAgICAgICdvdmVyZmxvdzpoaWRkZW47IGJvcmRlcjogc29saWQgMXB4ICcrIHRoaXMuY29sb3IrJzsnKw0KKyAgICAgICAgImN1cnNvcjogJyIgKyBjdXJzb3IgKyAiJzsiKw0KKyAgICAgICAgJyIgY2xhc3M9ImhhbmRsZUJveCIgaWQ9IicgKyBjdXJzb3IgKyAnIiA+PFwvZGl2Pic7DQorICAgIH07DQorDQorLyoqKioqKioqKioqKioqIGVuZCBYaW5oYSBhZGRlZCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKwl0aGlzLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24oeCwgeSkNCisJew0KKwkJdGhpcy5kcmF3UG9seWxpbmUoeCwgeSk7DQorCQl0aGlzLmRyYXdMaW5lKHhbeC5sZW5ndGgtMV0sIHlbeC5sZW5ndGgtMV0sIHhbMF0sIHlbMF0pOw0KKwl9Ow0KKw0KKwl0aGlzLmRyYXdFbGxpcHNlID0gdGhpcy5kcmF3T3ZhbCA9IGZ1bmN0aW9uKHgsIHksIHcsIGgpDQorCXsNCisJCXRoaXMuX21rT3YoeCwgeSwgdywgaCk7DQorCX07DQorDQorCXRoaXMuZmlsbEVsbGlwc2UgPSB0aGlzLmZpbGxPdmFsID0gZnVuY3Rpb24obGVmdCwgdG9wLCB3LCBoKQ0KKwl7DQorCQl2YXIgYSA9IHc+PjEsIGIgPSBoPj4xLA0KKwkJd29kID0gdyYxLCBob2QgPSBoJjEsDQorCQljeCA9IGxlZnQrYSwgY3kgPSB0b3ArYiwNCisJCXggPSAwLCB5ID0gYiwgb3kgPSBiLA0KKwkJYWEyID0gKGEqYSk8PDEsIGFhNCA9IGFhMjw8MSwgYmIyID0gKGIqYik8PDEsIGJiNCA9IGJiMjw8MSwNCisJCXN0ID0gKGFhMj4+MSkqKDEtKGI8PDEpKSArIGJiMiwNCisJCXR0ID0gKGJiMj4+MSkgLSBhYTIqKChiPDwxKS0xKSwNCisJCXhsLCBkdywgZGg7DQorCQlpZih3KSB3aGlsZSh5ID4gMCkNCisJCXsNCisJCQlpZihzdCA8IDApDQorCQkJew0KKwkJCQlzdCArPSBiYjIqKCh4PDwxKSszKTsNCisJCQkJdHQgKz0gYmI0KigrK3gpOw0KKwkJCX0NCisJCQllbHNlIGlmKHR0IDwgMCkNCisJCQl7DQorCQkJCXN0ICs9IGJiMiooKHg8PDEpKzMpIC0gYWE0Kih5LTEpOw0KKwkJCQl4bCA9IGN4LXg7DQorCQkJCWR3ID0gKHg8PDEpK3dvZDsNCisJCQkJdHQgKz0gYmI0KigrK3gpIC0gYWEyKigoKHktLSk8PDEpLTMpOw0KKwkJCQlkaCA9IG95LXk7DQorCQkJCXRoaXMuX21rRGl2KHhsLCBjeS1veSwgZHcsIGRoKTsNCisJCQkJdGhpcy5fbWtEaXYoeGwsIGN5K3kraG9kLCBkdywgZGgpOw0KKwkJCQlveSA9IHk7DQorCQkJfQ0KKwkJCWVsc2UNCisJCQl7DQorCQkJCXR0IC09IGFhMiooKHk8PDEpLTMpOw0KKwkJCQlzdCAtPSBhYTQqKC0teSk7DQorCQkJfQ0KKwkJfQ0KKwkJdGhpcy5fbWtEaXYoY3gtYSwgY3ktb3ksIHcsIChveTw8MSkraG9kKTsNCisJfTsNCisNCisJdGhpcy5maWxsQXJjID0gZnVuY3Rpb24oaUwsIGlULCBpVywgaUgsIGZBbmdBLCBmQW5nWikNCisJew0KKwkJdmFyIGEgPSBpVz4+MSwgYiA9IGlIPj4xLA0KKwkJaU9kZHMgPSAoaVcmMSkgfCAoKGlIJjEpIDw8IDE2KSwNCisJCWN4ID0gaUwrYSwgY3kgPSBpVCtiLA0KKwkJeCA9IDAsIHkgPSBiLCBveCA9IHgsIG95ID0geSwNCisJCWFhMiA9IChhKmEpPDwxLCBhYTQgPSBhYTI8PDEsIGJiMiA9IChiKmIpPDwxLCBiYjQgPSBiYjI8PDEsDQorCQlzdCA9IChhYTI+PjEpKigxLShiPDwxKSkgKyBiYjIsDQorCQl0dCA9IChiYjI+PjEpIC0gYWEyKigoYjw8MSktMSksDQorCQkvLyBWYXJzIGZvciByYWRpYWwgYm91bmRhcnkgbGluZXMNCisJCXhFbmRBLCB5RW5kQSwgeEVuZFosIHlFbmRaLA0KKwkJaVNlY3RzID0gKDEgPDwgKE1hdGguZmxvb3IoKGZBbmdBICU9IDM2MC4wKS8xODAuMCkgPDwgMykpDQorCQkJCXwgKDIgPDwgKE1hdGguZmxvb3IoKGZBbmdaICU9IDM2MC4wKS8xODAuMCkgPDwgMykpDQorCQkJCXwgKChmQW5nQSA+PSBmQW5nWikgPDwgMTYpLA0KKwkJYUJuZEEgPSBuZXcgQXJyYXkoYisxKSwgYUJuZFogPSBuZXcgQXJyYXkoYisxKTsNCisJCQ0KKwkJLy8gU2V0IHVwIHJhZGlhbCBib3VuZGFyeSBsaW5lcw0KKwkJZkFuZ0EgKj0gTWF0aC5QSS8xODAuMDsNCisJCWZBbmdaICo9IE1hdGguUEkvMTgwLjA7DQorCQl4RW5kQSA9IGN4K01hdGgucm91bmQoYSpNYXRoLmNvcyhmQW5nQSkpOw0KKwkJeUVuZEEgPSBjeStNYXRoLnJvdW5kKC1iKk1hdGguc2luKGZBbmdBKSk7DQorCQlfbWtMaW5WaXJ0KGFCbmRBLCBjeCwgY3ksIHhFbmRBLCB5RW5kQSk7DQorCQl4RW5kWiA9IGN4K01hdGgucm91bmQoYSpNYXRoLmNvcyhmQW5nWikpOw0KKwkJeUVuZFogPSBjeStNYXRoLnJvdW5kKC1iKk1hdGguc2luKGZBbmdaKSk7DQorCQlfbWtMaW5WaXJ0KGFCbmRaLCBjeCwgY3ksIHhFbmRaLCB5RW5kWik7DQorDQorCQl3aGlsZSh5ID4gMCkNCisJCXsNCisJCQlpZihzdCA8IDApIC8vIEFkdmFuY2UgeA0KKwkJCXsNCisJCQkJc3QgKz0gYmIyKigoeDw8MSkrMyk7DQorCQkJCXR0ICs9IGJiNCooKyt4KTsNCisJCQl9DQorCQkJZWxzZSBpZih0dCA8IDApIC8vIEFkdmFuY2UgeCBhbmQgeQ0KKwkJCXsNCisJCQkJc3QgKz0gYmIyKigoeDw8MSkrMykgLSBhYTQqKHktMSk7DQorCQkJCW94ID0geDsNCisJCQkJdHQgKz0gYmI0KigrK3gpIC0gYWEyKigoKHktLSk8PDEpLTMpOw0KKwkJCQl0aGlzLl9ta0FyY0RpdihveCwgeSwgb3ksIGN4LCBjeSwgaU9kZHMsIGFCbmRBLCBhQm5kWiwgaVNlY3RzKTsNCisJCQkJb3kgPSB5Ow0KKwkJCX0NCisJCQllbHNlIC8vIEFkdmFuY2UgeQ0KKwkJCXsNCisJCQkJdHQgLT0gYWEyKigoeTw8MSktMyk7DQorCQkJCXN0IC09IGFhNCooLS15KTsNCisJCQkJaWYoeSAmJiAoYUJuZEFbeV0gIT0gYUJuZEFbeS0xXSB8fCBhQm5kWlt5XSAhPSBhQm5kWlt5LTFdKSkNCisJCQkJew0KKwkJCQkJdGhpcy5fbWtBcmNEaXYoeCwgeSwgb3ksIGN4LCBjeSwgaU9kZHMsIGFCbmRBLCBhQm5kWiwgaVNlY3RzKTsNCisJCQkJCW94ID0geDsNCisJCQkJCW95ID0geTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCXRoaXMuX21rQXJjRGl2KHgsIDAsIG95LCBjeCwgY3ksIGlPZGRzLCBhQm5kQSwgYUJuZFosIGlTZWN0cyk7DQorCQlpZihpT2RkcyA+PiAxNikgLy8gT2RkIGhlaWdodA0KKwkJew0KKwkJCWlmKGlTZWN0cyA+PiAxNikgLy8gU3RhcnQtYW5nbGUgPiBlbmQtYW5nbGUNCisJCQl7DQorCQkJCXZhciB4bCA9ICh5RW5kQSA8PSBjeSB8fCB5RW5kWiA+IGN5KT8gKGN4IC0geCkgOiBjeDsNCisJCQkJdGhpcy5fbWtEaXYoeGwsIGN5LCB4ICsgY3ggLSB4bCArIChpT2RkcyAmIDB4ZmZmZiksIDEpOw0KKwkJCX0NCisJCQllbHNlIGlmKChpU2VjdHMgJiAweDAxKSAmJiB5RW5kWiA+IGN5KQ0KKwkJCQl0aGlzLl9ta0RpdihjeCAtIHgsIGN5LCB4LCAxKTsNCisJCX0NCisJfTsNCisNCisvKiBmaWxsUG9seWdvbiBtZXRob2QsIGltcGxlbWVudGVkIGJ5IE1hdHRoaWV1IEhhbGxlci4NCitUaGlzIGphdmFzY3JpcHQgZnVuY3Rpb24gaXMgYW4gYWRhcHRhdGlvbiBvZiB0aGUgZ2RJbWFnZUZpbGxlZFBvbHlnb24gZm9yIFdhbHRlciBab3JuIGxpYi4NCitDIHNvdXJjZSBvZiBHRCAxLjguNCBmb3VuZCBhdCBodHRwOi8vd3d3LmJvdXRlbGwuY29tL2dkLw0KKw0KK1RIQU5LUyB0byBLaXJzdGVuIFNjaHVseiBmb3IgdGhlIHBvbHlnb24gZml4ZXMhDQorDQorVGhlIGludGVyc2VjdGlvbiBmaW5kaW5nIHRlY2huaXF1ZSBvZiB0aGlzIGNvZGUgY291bGQgYmUgaW1wcm92ZWQNCitieSByZW1lbWJlcmluZyB0aGUgcHJldmlvdXMgaW50ZXJ0ZXJzZWN0aW9uLCBhbmQgYnkgdXNpbmcgdGhlIHNsb3BlLg0KK1RoYXQgY291bGQgaGVscCB0byBhZGp1c3QgaW50ZXJzZWN0aW9ucyB0byBwcm9kdWNlIGEgbmljZQ0KK2ludGVyaW9yX2V4dHJlbWEuICovDQorCXRoaXMuZmlsbFBvbHlnb24gPSBmdW5jdGlvbihhcnJheV94LCBhcnJheV95KQ0KKwl7DQorCQl2YXIgaTsNCisJCXZhciB5Ow0KKwkJdmFyIG1pbnksIG1heHk7DQorCQl2YXIgeDEsIHkxOw0KKwkJdmFyIHgyLCB5MjsNCisJCXZhciBpbmQxLCBpbmQyOw0KKwkJdmFyIGludHM7DQorDQorCQl2YXIgbiA9IGFycmF5X3gubGVuZ3RoOw0KKwkJaWYoIW4pIHJldHVybjsNCisNCisJCW1pbnkgPSBhcnJheV95WzBdOw0KKwkJbWF4eSA9IGFycmF5X3lbMF07DQorCQlmb3IoaSA9IDE7IGkgPCBuOyBpKyspDQorCQl7DQorCQkJaWYoYXJyYXlfeVtpXSA8IG1pbnkpDQorCQkJCW1pbnkgPSBhcnJheV95W2ldOw0KKw0KKwkJCWlmKGFycmF5X3lbaV0gPiBtYXh5KQ0KKwkJCQltYXh5ID0gYXJyYXlfeVtpXTsNCisJCX0NCisJCWZvcih5ID0gbWlueTsgeSA8PSBtYXh5OyB5KyspDQorCQl7DQorCQkJdmFyIHBvbHlJbnRzID0gbmV3IEFycmF5KCk7DQorCQkJaW50cyA9IDA7DQorCQkJZm9yKGkgPSAwOyBpIDwgbjsgaSsrKQ0KKwkJCXsNCisJCQkJaWYoIWkpDQorCQkJCXsNCisJCQkJCWluZDEgPSBuLTE7DQorCQkJCQlpbmQyID0gMDsNCisJCQkJfQ0KKwkJCQllbHNlDQorCQkJCXsNCisJCQkJCWluZDEgPSBpLTE7DQorCQkJCQlpbmQyID0gaTsNCisJCQkJfQ0KKwkJCQl5MSA9IGFycmF5X3lbaW5kMV07DQorCQkJCXkyID0gYXJyYXlfeVtpbmQyXTsNCisJCQkJaWYoeTEgPCB5MikNCisJCQkJew0KKwkJCQkJeDEgPSBhcnJheV94W2luZDFdOw0KKwkJCQkJeDIgPSBhcnJheV94W2luZDJdOw0KKwkJCQl9DQorCQkJCWVsc2UgaWYoeTEgPiB5MikNCisJCQkJew0KKwkJCQkJeTIgPSBhcnJheV95W2luZDFdOw0KKwkJCQkJeTEgPSBhcnJheV95W2luZDJdOw0KKwkJCQkJeDIgPSBhcnJheV94W2luZDFdOw0KKwkJCQkJeDEgPSBhcnJheV94W2luZDJdOw0KKwkJCQl9DQorCQkJCWVsc2UgY29udGludWU7DQorDQorCQkJCSAvLyAgTW9kaWZpZWQgMTEuIDIuIDIwMDQgV2FsdGVyIFpvcm4NCisJCQkJaWYoKHkgPj0geTEpICYmICh5IDwgeTIpKQ0KKwkJCQkJcG9seUludHNbaW50cysrXSA9IE1hdGgucm91bmQoKHkteTEpICogKHgyLXgxKSAvICh5Mi15MSkgKyB4MSk7DQorDQorCQkJCWVsc2UgaWYoKHkgPT0gbWF4eSkgJiYgKHkgPiB5MSkgJiYgKHkgPD0geTIpKQ0KKwkJCQkJcG9seUludHNbaW50cysrXSA9IE1hdGgucm91bmQoKHkteTEpICogKHgyLXgxKSAvICh5Mi15MSkgKyB4MSk7DQorCQkJfQ0KKwkJCXBvbHlJbnRzLnNvcnQoX0NvbXBJbnQpOw0KKwkJCWZvcihpID0gMDsgaSA8IGludHM7IGkrPTIpDQorCQkJCXRoaXMuX21rRGl2KHBvbHlJbnRzW2ldLCB5LCBwb2x5SW50c1tpKzFdLXBvbHlJbnRzW2ldKzEsIDEpOw0KKwkJfQ0KKwl9Ow0KKw0KKwl0aGlzLmRyYXdTdHJpbmcgPSBmdW5jdGlvbih0eHQsIHgsIHkpDQorCXsNCisJCXRoaXMuaHRtICs9ICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aGl0ZS1zcGFjZTpub3dyYXA7JysNCisJCQknbGVmdDonICsgeCArICdweDsnKw0KKwkJCSd0b3A6JyArIHkgKyAncHg7JysNCisJCQknZm9udC1mYW1pbHk6JyArICB0aGlzLmZ0RmFtICsgJzsnKw0KKwkJCSdmb250LXNpemU6JyArIHRoaXMuZnRTeiArICc7JysNCisJCQknY29sb3I6JyArIHRoaXMuY29sb3IgKyAnOycgKyB0aGlzLmZ0U3R5ICsgJyI+JysNCisJCQl0eHQgKw0KKwkJCSc8XC9kaXY+JzsNCisJfTsNCisNCisvKiBkcmF3U3RyaW5nUmVjdCgpIGFkZGVkIGJ5IFJpY2sgQmxvbW1lcnMuDQorQWxsb3dzIHRvIHNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIHRleHQgcmVjdGFuZ2xlIGFuZCB0byBhbGlnbiB0aGUNCit0ZXh0IGJvdGggaG9yaXpvbnRhbGx5IChlLmcuIHJpZ2h0KSBhbmQgdmVydGljYWxseSB3aXRoaW4gdGhhdCByZWN0YW5nbGUgKi8NCisJdGhpcy5kcmF3U3RyaW5nUmVjdCA9IGZ1bmN0aW9uKHR4dCwgeCwgeSwgd2lkdGgsIGhhbGlnbikNCisJew0KKwkJdGhpcy5odG0gKz0gJzxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO292ZXJmbG93OmhpZGRlbjsnKw0KKwkJCSdsZWZ0OicgKyB4ICsgJ3B4OycrDQorCQkJJ3RvcDonICsgeSArICdweDsnKw0KKwkJCSd3aWR0aDonK3dpZHRoICsncHg7JysNCisJCQkndGV4dC1hbGlnbjonK2hhbGlnbisnOycrDQorCQkJJ2ZvbnQtZmFtaWx5OicgKyAgdGhpcy5mdEZhbSArICc7JysNCisJCQknZm9udC1zaXplOicgKyB0aGlzLmZ0U3ogKyAnOycrDQorCQkJJ2NvbG9yOicgKyB0aGlzLmNvbG9yICsgJzsnICsgdGhpcy5mdFN0eSArICciPicrDQorCQkJdHh0ICsNCisJCQknPFwvZGl2Pic7DQorCX07DQorDQorCXRoaXMuZHJhd0ltYWdlID0gZnVuY3Rpb24oaW1nU3JjLCB4LCB5LCB3LCBoLCBhKQ0KKwl7DQorCQl0aGlzLmh0bSArPSAnPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7JysNCisJCQknbGVmdDonICsgeCArICdweDsnKw0KKwkJCSd0b3A6JyArIHkgKyAncHg7JysNCisJCQknd2lkdGg6JyArICB3ICsgJ3B4OycrDQorCQkJJ2hlaWdodDonICsgaCArICdweDsiPicrDQorCQkJJzxpbWcgc3JjPSInICsgaW1nU3JjICsgJyIgd2lkdGg9IicgKyB3ICsgJyIgaGVpZ2h0PSInICsgaCArICciJyArIChhPyAoJyAnK2EpIDogJycpICsgJz4nKw0KKwkJCSc8XC9kaXY+JzsNCisJfTsNCisNCisJdGhpcy5jbGVhciA9IGZ1bmN0aW9uKCkNCisJew0KKwkJdGhpcy5odG0gPSAiIjsNCisJCWlmKHRoaXMuY252KSB0aGlzLmNudi5pbm5lckhUTUwgPSAiIjsNCisJfTsNCisNCisJdGhpcy5fbWtPdlFkcyA9IGZ1bmN0aW9uKGN4LCBjeSwgeCwgeSwgdywgaCwgd29kLCBob2QpDQorCXsNCisJCXZhciB4bCA9IGN4IC0geCwgeHIgPSBjeCArIHggKyB3b2QgLSB3LCB5dCA9IGN5IC0geSwgeWIgPSBjeSArIHkgKyBob2QgLSBoOw0KKwkJaWYoeHIgPiB4bCt3KQ0KKwkJew0KKwkJCXRoaXMuX21rRGl2KHhyLCB5dCwgdywgaCk7DQorCQkJdGhpcy5fbWtEaXYoeHIsIHliLCB3LCBoKTsNCisJCX0NCisJCWVsc2UNCisJCQl3ID0geHIgLSB4bCArIHc7DQorCQl0aGlzLl9ta0Rpdih4bCwgeXQsIHcsIGgpOw0KKwkJdGhpcy5fbWtEaXYoeGwsIHliLCB3LCBoKTsNCisJfTsNCisJDQorCXRoaXMuX21rQXJjRGl2ID0gZnVuY3Rpb24oeCwgeSwgb3ksIGN4LCBjeSwgaU9kZHMsIGFCbmRBLCBhQm5kWiwgaVNlY3RzKQ0KKwl7DQorCQl2YXIgeHJEZWYgPSBjeCArIHggKyAoaU9kZHMgJiAweGZmZmYpLCB5MiwgaCA9IG95IC0geSwgeGwsIHhyLCB3Ow0KKw0KKwkJaWYoIWgpIGggPSAxOw0KKwkJeCA9IGN4IC0geDsNCisNCisJCWlmKGlTZWN0cyAmIDB4ZmYwMDAwKSAvLyBTdGFydC1hbmdsZSA+IGVuZC1hbmdsZQ0KKwkJew0KKwkJCXkyID0gY3kgLSB5IC0gaDsNCisJCQlpZihpU2VjdHMgJiAweDAwZmYpDQorCQkJew0KKwkJCQlpZihpU2VjdHMgJiAweDAyKQ0KKwkJCQl7DQorCQkJCQl4bCA9IE1hdGgubWF4KHgsIGFCbmRaW3ldKTsNCisJCQkJCXcgPSB4ckRlZiAtIHhsOw0KKwkJCQkJaWYodyA+IDApIHRoaXMuX21rRGl2KHhsLCB5MiwgdywgaCk7DQorCQkJCX0NCisJCQkJaWYoaVNlY3RzICYgMHgwMSkNCisJCQkJew0KKwkJCQkJeHIgPSBNYXRoLm1pbih4ckRlZiwgYUJuZEFbeV0pOw0KKwkJCQkJdyA9IHhyIC0geDsNCisJCQkJCWlmKHcgPiAwKSB0aGlzLl9ta0Rpdih4LCB5MiwgdywgaCk7DQorCQkJCX0NCisJCQl9DQorCQkJZWxzZQ0KKwkJCQl0aGlzLl9ta0Rpdih4LCB5MiwgeHJEZWYgLSB4LCBoKTsNCisJCQl5MiA9IGN5ICsgeSArIChpT2RkcyA+PiAxNik7DQorCQkJaWYoaVNlY3RzICYgMHhmZjAwKQ0KKwkJCXsNCisJCQkJaWYoaVNlY3RzICYgMHgwMTAwKQ0KKwkJCQl7DQorCQkJCQl4bCA9IE1hdGgubWF4KHgsIGFCbmRBW3ldKTsNCisJCQkJCXcgPSB4ckRlZiAtIHhsOw0KKwkJCQkJaWYodyA+IDApIHRoaXMuX21rRGl2KHhsLCB5MiwgdywgaCk7DQorCQkJCX0NCisJCQkJaWYoaVNlY3RzICYgMHgwMjAwKQ0KKwkJCQl7DQorCQkJCQl4ciA9IE1hdGgubWluKHhyRGVmLCBhQm5kWlt5XSk7DQorCQkJCQl3ID0geHIgLSB4Ow0KKwkJCQkJaWYodyA+IDApIHRoaXMuX21rRGl2KHgsIHkyLCB3LCBoKTsNCisJCQkJfQ0KKwkJCX0NCisJCQllbHNlDQorCQkJCXRoaXMuX21rRGl2KHgsIHkyLCB4ckRlZiAtIHgsIGgpOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCWlmKGlTZWN0cyAmIDB4MDBmZikNCisJCQl7DQorCQkJCWlmKGlTZWN0cyAmIDB4MDIpDQorCQkJCQl4bCA9IE1hdGgubWF4KHgsIGFCbmRaW3ldKTsNCisJCQkJZWxzZQ0KKwkJCQkJeGwgPSB4Ow0KKwkJCQlpZihpU2VjdHMgJiAweDAxKQ0KKwkJCQkJeHIgPSBNYXRoLm1pbih4ckRlZiwgYUJuZEFbeV0pOw0KKwkJCQllbHNlDQorCQkJCQl4ciA9IHhyRGVmOw0KKwkJCQl5MiA9IGN5IC0geSAtIGg7DQorCQkJCXcgPSB4ciAtIHhsOw0KKwkJCQlpZih3ID4gMCkgdGhpcy5fbWtEaXYoeGwsIHkyLCB3LCBoKTsNCisJCQl9DQorCQkJaWYoaVNlY3RzICYgMHhmZjAwKQ0KKwkJCXsNCisJCQkJaWYoaVNlY3RzICYgMHgwMTAwKQ0KKwkJCQkJeGwgPSBNYXRoLm1heCh4LCBhQm5kQVt5XSk7DQorCQkJCWVsc2UNCisJCQkJCXhsID0geDsNCisJCQkJaWYoaVNlY3RzICYgMHgwMjAwKQ0KKwkJCQkJeHIgPSBNYXRoLm1pbih4ckRlZiwgYUJuZFpbeV0pOw0KKwkJCQllbHNlDQorCQkJCQl4ciA9IHhyRGVmOw0KKwkJCQl5MiA9IGN5ICsgeSArIChpT2RkcyA+PiAxNik7DQorCQkJCXcgPSB4ciAtIHhsOw0KKwkJCQlpZih3ID4gMCkgdGhpcy5fbWtEaXYoeGwsIHkyLCB3LCBoKTsNCisJCQl9DQorCQl9DQorCX07DQorDQorCXRoaXMuc2V0U3Ryb2tlKDEpOw0KKwl0aGlzLnNldEZvbnQoInZlcmRhbmEsZ2VuZXZhLGhlbHZldGljYSxzYW5zLXNlcmlmIiwgIjEycHgiLCBGb250LlBMQUlOKTsNCisJdGhpcy5jb2xvciA9ICIjMDAwMDAwIjsNCisJdGhpcy5odG0gPSAiIjsNCisJdGhpcy53bmQgPSB3bmQgfHwgd2luZG93Ow0KKw0KKwlpZighamdfb2spIF9jaGtESFRNKCk7DQorCWlmKGpnX29rKQ0KKwl7DQorCQlpZihjbnYpDQorCQl7DQorCQkJaWYodHlwZW9mKGNudikgPT0gInN0cmluZyIpDQorCQkJCXRoaXMuY29udCA9IGRvY3VtZW50LmFsbD8gKHRoaXMud25kLmRvY3VtZW50LmFsbFtjbnZdIHx8IG51bGwpDQorCQkJCQk6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkPyAodGhpcy53bmQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY252KSB8fCBudWxsKQ0KKwkJCQkJOiBudWxsOw0KKwkJCWVsc2UgaWYoY252ID09IHdpbmRvdy5kb2N1bWVudCkNCisJCQkJdGhpcy5jb250ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTsNCisJCQkvLyBJZiBjbnYgaXMgYSBkaXJlY3QgcmVmZXJlbmNlIHRvIGEgY2FudmFzIERPTSBub2RlDQorCQkJLy8gKG9wdGlvbiBzdWdnZXN0ZWQgYnkgQW5kcmVhcyBMdWxlaWNoKQ0KKwkJCWVsc2UgdGhpcy5jb250ID0gY252Ow0KKwkJCS8vIENyZWF0ZSBuZXcgY2FudmFzIGluc2lkZSBjb250YWluZXIgRElWLiBUaHVzIHRoZSBkcmF3aW5nIGFuZCBjbGVhcmluZw0KKwkJCS8vIG1ldGhvZHMgd29uJ3QgaW50ZXJmZXJlIHdpdGggdGhlIGNvbnRhaW5lcidzIGlubmVyIGh0bWwuDQorCQkJLy8gU29sdXRpb24gc3VnZ2VzdGVkIGJ5IFZsYWRpbWlyLg0KKwkJCXRoaXMuY252ID0gdGhpcy53bmQuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7DQorCQkJdGhpcy5jbnYuc3R5bGUuZm9udFNpemU9MDsNCisJCQl0aGlzLmNvbnQuYXBwZW5kQ2hpbGQodGhpcy5jbnYpOw0KKwkJCXRoaXMucGFpbnQgPSBqZ19kb20/IF9wbnRDbnZEb20gOiBfcG50Q252SWU7DQorCQl9DQorCQllbHNlDQorCQkJdGhpcy5wYWludCA9IF9wbnREb2M7DQorCX0NCisJZWxzZQ0KKwkJdGhpcy5wYWludCA9IF9wbnROOw0KKw0KKwl0aGlzLnNldFByaW50YWJsZShmYWxzZSk7DQorfQ0KKw0KK2Z1bmN0aW9uIF9ta0xpblZpcnQoYUxpbiwgeDEsIHkxLCB4MiwgeTIpDQorew0KKwl2YXIgZHggPSBNYXRoLmFicyh4Mi14MSksIGR5ID0gTWF0aC5hYnMoeTIteTEpLA0KKwl4ID0geDEsIHkgPSB5MSwNCisJeEluY3IgPSAoeDEgPiB4Mik/IC0xIDogMSwNCisJeUluY3IgPSAoeTEgPiB5Mik/IC0xIDogMSwNCisJcCwNCisJaSA9IDA7DQorCWlmKGR4ID49IGR5KQ0KKwl7DQorCQl2YXIgcHIgPSBkeTw8MSwNCisJCXBydSA9IHByIC0gKGR4PDwxKTsNCisJCXAgPSBwci1keDsNCisJCXdoaWxlKGR4ID4gMCkNCisJCXstLWR4Ow0KKwkJCWlmKHAgPiAwKSAgICAvLyAgSW5jcmVtZW50IHkNCisJCQl7DQorCQkJCWFMaW5baSsrXSA9IHg7DQorCQkJCXkgKz0geUluY3I7DQorCQkJCXAgKz0gcHJ1Ow0KKwkJCX0NCisJCQllbHNlIHAgKz0gcHI7DQorCQkJeCArPSB4SW5jcjsNCisJCX0NCisJfQ0KKwllbHNlDQorCXsNCisJCXZhciBwciA9IGR4PDwxLA0KKwkJcHJ1ID0gcHIgLSAoZHk8PDEpOw0KKwkJcCA9IHByLWR5Ow0KKwkJd2hpbGUoZHkgPiAwKQ0KKwkJey0tZHk7DQorCQkJeSArPSB5SW5jcjsNCisJCQlhTGluW2krK10gPSB4Ow0KKwkJCWlmKHAgPiAwKSAgICAvLyAgSW5jcmVtZW50IHgNCisJCQl7DQorCQkJCXggKz0geEluY3I7DQorCQkJCXAgKz0gcHJ1Ow0KKwkJCX0NCisJCQllbHNlIHAgKz0gcHI7DQorCQl9DQorCX0NCisJZm9yKHZhciBsZW4gPSBhTGluLmxlbmd0aCwgaSA9IGxlbi1pOyBpOykNCisJCWFMaW5bbGVuLShpLS0pXSA9IHg7DQorfTsNCisNCitmdW5jdGlvbiBfQ29tcEludCh4LCB5KQ0KK3sNCisJcmV0dXJuKHggLSB5KTsNCit9DQorDQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2JhY2tlbmQucGhwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2JhY2tlbmQucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YzVmMzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvYmFja2VuZC5waHAKQEAgLTAsMCArMSwxMTAgQEAKKzw/cGhwIAorLyoqCisqIFVuaWZpZWQgYmFja2VuZCBmb3IgRXh0ZW5kZWRGaWxlTWFuYWdlciAtIGNvcGllZCBmcm9tIEltYWdlTWFuYWdlcgorKgorKiBJbWFnZSBNYW5hZ2VyIHdhcyBvcmlnaW5hbGx5IGRldmVsb3BlZCBieToKKyogICBYaWFuZyBXZWkgWmh1bywgZW1haWw6IHhpYW5nd2Vpemh1byhhdClob3RtYWlsLmNvbSBXZWkgU2hvdS4KKyoKKyogVW5pZmllZCBiYWNrZW5kIHNwb25zb3JlZCBieSBEVExpbmsgU29mdHdhcmUsIGh0dHA6Ly93d3cuZHRsaW5rLmNvbQorKiBJbXBsZW1lbnRhdGlvbiBieSBZZXJtbyBMYW1lcnMsIGh0dHA6Ly93d3cuZm9ybXZpc3RhLmNvbQorKgorKiAoYykgRFRMaW5rLCBMTEMgMjAwNS4KKyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgWGluaGEgaXRzZWxmLgorKiBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisqCisqIERFU0NSSVBUSU9OOgorKgorKiBJbnN0ZWFkIG9mIHVzaW5nIHNlcGFyYXRlIFVSTCdzIGZvciBlYWNoIGZ1bmN0aW9uLCBJbWFnZU1hbmFnZXIgbm93CisqIHJvdXRlcyBhbGwgcmVxdWVzdHMgdG8gdGhlIHNlcnZlciB0aHJvdWdoIHRoaXMgc2luZ2xlLCByZXBsYWNlYWJsZSwKKyogZW50cnkgcG9pbnQuIGJhY2tlbmQucGhwIGV4cGVjdHMgYXQgbGVhc3QgdHdvIFVSTCB2YXJpYWJsZSBwYXJhbWV0ZXJzOiAKKyoKKyogX19wbHVnaW49SW1hZ2VNYW5hZ2VyICAgZm9yIGZ1dHVyZSBleHBhbnNpb247IGlkZW50aWZ5IHRoZSBwbHVnaW4gYmVpbmcgcmVxdWVzdGVkLgorKiBfX2Z1bmN0aW9uPXRodW1ic3xpbWFnZXN8ZWRpdG9yRnJhbWV8ZWRpdG9yfG1hbmFnZXIgIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC4KKyoKKyogSGF2aW5nIGEgc2luZ2xlIGVudHJ5IHBvaW50IHRoYXQgc3RyaWN0bHkgYWRoZXJlcyB0byBhIGRlZmluZWQgaW50ZXJmYWNlIHdpbGwgCisqIG1ha2UgdGhlIGJhY2tlbmQgY29kZSBtdWNoIGVhc2llciB0byBtYWludGFpbiBhbmQgZXhwYW5kLiBJdCB3aWxsIG1ha2UgaXQgZWFzaWVyCisqIG9uIGludGVncmF0b3JzLCBub3QgdG8gbWVudGlvbiBpdCdsbCBtYWtlIGl0IGVhc2llciB0byBoYXZlIHNlcGFyYXRlIAorKiBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGJhY2tlbmQgaW4gZGlmZmVyZW50IGxhbmd1YWdlcyAoUGVybCwgUHl0aG9uLCBBU1AsIGV0Yy4pIAorKgorKiBAc2VlIGNvbmZpZy5pbmMucGhwCisqLworCisvKioKKyogSW1hZ2VNYW5hZ2VyIGNvbmZpZ3VyYXRpb24KKyovCisKK3JlcXVpcmVfb25jZSgnY29uZmlnLmluYy5waHAnKTsKKworCisvLyBTdHJpcCBzbGFzaGVzIGlmIE1RR1BDIGlzIG9uCitzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7CitpZihnZXRfbWFnaWNfcXVvdGVzX2dwYygpKQoreworICAkdG9fY2xlYW4gPSBhcnJheSgmJF9HRVQsICYkX1BPU1QsICYkX1JFUVVFU1QsICYkX0NPT0tJRSk7CisgIHdoaWxlKGNvdW50KCR0b19jbGVhbikpCisgIHsKKyAgICAkY2xlYW5pbmcgPSYgJHRvX2NsZWFuW2FycmF5X3BvcCgkanVuayA9IGFycmF5X2tleXMoJHRvX2NsZWFuKSldOworICAgIHVuc2V0KCR0b19jbGVhblthcnJheV9wb3AoJGp1bmsgPSBhcnJheV9rZXlzKCR0b19jbGVhbikpXSk7CisgICAgZm9yZWFjaChhcnJheV9rZXlzKCRjbGVhbmluZykgYXMgJGspCisgICAgeworICAgICAgaWYoaXNfYXJyYXkoJGNsZWFuaW5nWyRrXSkpCisgICAgICB7CisgICAgICAgICR0b19jbGVhbltdID0mICRjbGVhbmluZ1ska107CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgICRjbGVhbmluZ1ska10gPSBzdHJpcHNsYXNoZXMoJGNsZWFuaW5nWyRrXSk7CisgICAgICB9CisgICAgfQorICB9Cit9CisKKy8qKgorKiBJbWFnZU1hbmFnZXIgY29uZmlndXJhdGlvbgorKi8KKworJGZvcm1WYXJzID0gZW1wdHkoJF9QT1NUKSA/ICRfR0VUIDogJF9QT1NUOworCisvLyBtYWtlIHN1cmUgdGhlIHJlcXVlc3QgaXMgZm9yIHVzICh0aGlzIGdpdmVzIHVzIHRoZSBhYmlsaXR5IHRvIGV2ZW50dWFsbHkgb3JnYW5pemUKKy8vIGEgYmFja2VuZCBldmVudCBoYW5kbGVyIHN5c3RlbSkgRm9yIGFuIGluY2x1ZGUgZmlsZSB0aGUgcmV0dXJuIGRvZXNuJ3QgbWFrZSBhbG90IG9mCisvLyBzZW5zZSBidXQgZXZlbnR1YWxseSB3ZSdsbCB3YW50IHRvIHR1cm4gYWxsIG9mIHRoaXMgaW50byBhdCBsZWFzdCBmdW5jdGlvbnMgCisvLyBzZXBhcmF0aW5nIG91dCBhbGwgdGhlIHByZXNlbnRhdGlvbiBIVE1MIGZyb20gdGhlIGxvZ2ljLiAoUmlnaHQgbm93IGFsbCB0aGUgSFRNTAorLy8gdXNlZCBieSBJbWFnZU1hbmFnZXIgaXMgaW4gdGhlIHNhbWUgZmlsZXMgYXMgdGhlIFBIUCBjb2RlIC4uLikKKworaWYgKCBAJGZvcm1WYXJzWyAiX19wbHVnaW4iIF0gIT0gIkV4dGVuZGVkRmlsZU1hbmFnZXIiICkKKwl7CisJLy8gbm90IGZvciB1cy4KKworCXJldHVybiB0cnVlOworCX0KKworLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byByZS1lbmdpbmVlciB0aGUgZW50aXJlIHRoaW5nIHJpZ2h0IG5vdywgc2luY2UgaXQncyBwcm9iYWJseQorLy8gZ29pbmcgdG8gZ2V0IHJld3JpdHRlbiBhbnl3YXksIHdlIGp1c3QgaW5jbHVkZSB0aGUgY29ycmVjdCBmaWxlIGJhc2VkIG9uIHRoZSAKKy8vIGZ1bmN0aW9uIHJlcXVlc3QuCisKK3N3aXRjaCAoIEAkZm9ybVZhcnNbICJfX2Z1bmN0aW9uIiBdICkKKwl7CisKKwljYXNlICJlZGl0b3IiOiAKKwljYXNlICJlZGl0b3JGcmFtZSI6CisJY2FzZSAibWFuYWdlciI6CisJY2FzZSAiaW1hZ2VzIjoKKwljYXNlICJ0aHVtYnMiOgorCWNhc2UgInJlc2l6ZXIiOgorCisJCWluY2x1ZGVfb25jZSAkSU1Db25maWdbJ2Jhc2VfZGlyJ10gLiAnLycgLiAkZm9ybVZhcnNbJ19fZnVuY3Rpb24nXSAuICcucGhwJyA7CisJCWV4aXQoKTsKKwkJCisJCWJyZWFrOworCisJZGVmYXVsdDoKKworCQlicmVhazsKKworCX0JLy8gZW5kIG9mIHN3aXRjaC4KKworcmV0dXJuIGZhbHNlIDsKKworLy8gRU5ECisKKz8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2NvbmZpZy5pbmMucGhwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2NvbmZpZy5pbmMucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYzUwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvY29uZmlnLmluYy5waHAKQEAgLTAsMCArMSw0MTMgQEAKKzw/cGhwDQorDQorLyoqDQorICogRXh0ZW5kZWRGaWxlTWFuYWdlciBjb25maWd1cmF0aW9uIGZpbGUuDQorICogQXV0aG9yczogV2VpIFpodW8sIEFmcnUNCisgKiBWZXJzaW9uOiBVcGRhdGVkIG9uIDA4LTAxLTIwMDUgYnkgQWZydQ0KKyAqIFZlcnNpb24gMS4xLjI6IFVwZGF0ZWQgb24gMDQtMDctMjAwNiBieSBLcnp5c3p0b2YgS290b3dpY3ogPGtvdG9Ad2Vid29ya2Vycy5wbD4NCisgKiBQYWNrYWdlOiBFeHRlbmRlZEZpbGVNYW5hZ2VyDQorICogaHR0cDovL3d3dy5hZnJ1c29mdC5jb20vaHRtbGFyZWENCisgKi8NCisNCisvKiAgQ29uZmlndXJhdGlvbiBmaWxlIHVzYWdlOg0KKyAqCVRoZXJlIGFyZSB0d28gaW5zZXJ0TW9kZXMgZm9yIHRoaXMgZmlsZW1hbmFnZXIuDQorICoJT25lIGlzICJpbWFnZSIgYW5kIGFub3RoZXIgaXMgImxpbmsiLg0KKyAqCVNvIHlvdSBjYW4gYXNzaWduIGNvbmZpZyB2YWx1ZXMgYXMgYmVsb3cNCisgKg0KKyAqCWlmKCRpbnNlcnRNb2RlPT0iaW1hZ2UiKSAkSU1Db25maWdbJ3Byb3BlcnR5J109c29tZXZhbHVlZm9yaW1hZ2Vtb2RlOw0KKyAqCWVsc2UgaWYoJGluc2VydE1vZGU9PSJsaW5rIikgJElNQ29uZmlnWydwcm9wZXJ0eSddPXNvbWV2YWx1ZWZvcmxpbmttb2RlOw0KKyAqDQorICoJKG9yKSB5b3UgY2FuIGRpcmVjdGx5IGFzICRJTUNvbmZpZ1sncHJvcGVydHknXT1zb21ldmFsdWVmb3Jib3RobW9kZXM7DQorICoNCisgKglCZXN0IG9mIEx1Y2sgOikgQWZydS4NCisgKi8NCisgDQorLyoNCisgKglHZXR0aW5nIHRoZSBtb2RlIGZvciBmdXJ0aGVyIGRpZmZlcmVudGlhdGlvbg0KKyAqLw0KKw0KK2lmKGlzc2V0KCRfUkVRVUVTVFsnbW9kZSddKSkgJGluc2VydE1vZGU9JF9SRVFVRVNUWydtb2RlJ107DQorCWlmKCFpc3NldCgkaW5zZXJ0TW9kZSkpICRpbnNlcnRNb2RlPSJpbWFnZSI7DQorDQorLyoqDQorKiBEZWZhdWx0IGJhY2tlbmQgVVJMDQorKg0KKyogVVJMIHRvIHVzZSBmb3IgdW5pZmllZCBiYWNrZW5kLg0KKyoNCisqIFRoZSA/X19wbHVnaW49RXh0ZW5kZWRGaWxlTWFuYWdlciYgaXMgcmVxdWlyZWQuDQorKi8NCisNCiskSU1Db25maWdbJ2JhY2tlbmRfdXJsJ10gPSAiYmFja2VuZC5waHA/X19wbHVnaW49RXh0ZW5kZWRGaWxlTWFuYWdlciYiOw0KKw0KKy8qKg0KKyogQmFja2VuZCBJbnN0YWxsYXRpb24gRGlyZWN0b3J5DQorKg0KKyogbG9jYXRpb24gb2YgYmFja2VuZCBpbnN0YWxsOyB0aGVzZSBhcmUgdXNlZCB0byBsaW5rIHRvIGNzcyBhbmQganMNCisqIGFzc2V0cyBiZWNhdXNlIHdlIG1heSBoYXZlIHRoZSBmcm9udCBlbmQgaW5zdGFsbGVkIGluIGEgZGlmZmVyZW50DQorKiBkaXJlY3RvcnkgdGhhbiB0aGUgYmFja2VuZC4gKGkuZS4gbm90aGluZyBhc3N1bWVzIHRoYXQgdGhlIGZyb250ZW5kDQorKiBhbmQgdGhlIGJhY2tlbmQgYXJlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSkNCisqLw0KKyRJTUNvbmZpZ1snYmFzZV9kaXInXSA9IGdldGN3ZCgpOw0KKyRJTUNvbmZpZ1snYmFzZV91cmwnXSA9ICcnOw0KKw0KKw0KKy8qDQorCSBGaWxlIHN5c3RlbSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgeW91IHdhbnQgdG8gbWFuYWdlIHRoZSBpbWFnZXMNCisJIGZvciBtdWx0aXBsZSB1c2VyIHN5c3RlbXMsIHNldCBpdCBkeW5hbWljYWxseS4NCisNCisJIE5PVEU6IFRoaXMgZGlyZWN0b3J5IHJlcXVpcmVzIHdyaXRlIGFjY2VzcyBieSBQSFAuIFRoYXQgaXMsDQorCQkgICBQSFAgbXVzdCBiZSBhYmxlIHRvIGNyZWF0ZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4NCisJCSAgIEFibGUgdG8gY3JlYXRlIGRpcmVjdG9yaWVzIGlzIG5pY2UsIGJ1dCBub3QgbmVjZXNzYXJ5Lg0KKyovDQorJElNQ29uZmlnWydpbWFnZXNfZGlyJ10gPSAnZGVtb19pbWFnZXMnOw0KKy8vWW91IG1heSBzZXQgYSBkaWZmZXJlbnQgZGlyZWN0b3J5IGZvciB0aGUgbGluayBtb2RlOyBpZiB5b3UgZG9uJ3QsIHRoZSBhYm92ZSBzZXR0aW5nIHdpbGwgYmUgdXNlZCBmb3IgYm90aCBtb2Rlcw0KKy8vJElNQ29uZmlnWydmaWxlc19kaXInXSA9ICdkZW1vX2ZpbGVzJzsNCisNCisvKg0KKyBUaGUgVVJMIHRvIHRoZSBhYm92ZSBwYXRoLCB0aGUgd2ViIGJyb3dzZXIgbmVlZHMgdG8gYmUgYWJsZSB0byBzZWUgaXQuDQorIFBsZWFzZSByZW1vdmUgc2NyaXB0aW5nIGNhcGFiaWxpdGllcyBpbiB0aGlzIGRpcmVjdG9yeQ0KKyBmb3IgdGhpcyBkaXJlY3RvcnkgKGkuZS4gZGlzYWJsZSBQSFAsIFBlcmwsIENHSTsgc2VlIC5odGFjY2VzcyBmaWxlIGluIGRlbW9faW1hZ2VzIGZvbGRlcikuDQorKi8NCiskSU1Db25maWdbJ2ltYWdlc191cmwnXSA9IHN0cl9yZXBsYWNlKCBhcnJheSgiYmFja2VuZC5waHAiLCJtYW5hZ2VyLnBocCIpLCAiIiwgJF9TRVJWRVJbIlBIUF9TRUxGIl0gKSAuICRJTUNvbmZpZ1snaW1hZ2VzX2RpciddOw0KKy8vJElNQ29uZmlnWydmaWxlc191cmwnXSA9ICd1cmwvdG8vZmlsZXNfZGlyJzsNCisNCisvKg0KKyAgRm9ybWF0IG9mIHRoZSBEYXRlIE1vZGlmaWVkIGluIGxpc3Qgdmlldy4NCisgIEl0IGhhcyB0byBiZSBhIHN0cmluZyB1bmRlcnN0b29kIGJ5IHRoZSBQSFAgZGF0ZSgpIGZ1bmN0aW9uIChmb3IgcG9zc2libGUgdmFsdWVzIHNlZSBodHRwOi8vaHR0cDovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRhdGUucGhwKQ0KKyovDQorJElNQ29uZmlnWydkYXRlX2Zvcm1hdCddID0gImQubS55IEg6aSI7DQorLyoNCisgIFBvc3NpYmxlIHZhbHVlczogdHJ1ZSwgZmFsc2UNCisNCisgIFRSVUUgLSBJZiBQSFAgb24gdGhlIHdlYiBzZXJ2ZXIgaXMgaW4gc2FmZSBtb2RlLCBzZXQgdGhpcyB0byB0cnVlLg0KKyAgICAgICAgIFNBRkUgTU9ERSByZXN0cmljdGlvbnM6IGRpcmVjdG9yeSBjcmVhdGlvbiB3aWxsIG5vdCBiZSBwb3NzaWJsZSwNCisJCSBvbmx5IHRoZSBHRCBsaWJyYXJ5IGNhbiBiZSB1c2VkLCBvdGhlciBsaWJyYXJpZXMgcmVxdWlyZQ0KKwkJIFNhZmUgTW9kZSB0byBiZSBvZmYuDQorDQorICBGQUxTRSAtIFNldCB0byBmYWxzZSBpZiBQSFAgb24gdGhlIHdlYiBzZXJ2ZXIgaXMgbm90IGluIHNhZmUgbW9kZS4NCisqLw0KKyRJTUNvbmZpZ1snc2FmZV9tb2RlJ10gPSBmYWxzZTsNCisNCisvKg0KK1RoaXMgc3BlY2lmaWVzIHdoZXRoZXIgYW55IGltYWdlIGxpYnJhcnkgaXMgYXZhaWxhYmxlIHRvIHJlc2l6ZSBhbmQgZWRpdCBpbWFnZXMuVFJVRSAtIFRodW1ibmFpbHMgd2lsbCBiZSByZXNpemVkIGJ5IGltYWdlIGxpYnJhcmllcyBhbmQgaWYgdGhlcmUgaXMgbm8gbGlicmFyeSwgZGVmYXVsdCB0aHVtYm5haWwgd2lsbCBiZSBzaG93bi4NCitGQUxTRSAtIFRodW1ibmFpbHMgd2lsbCBiZSByZXNpemVkIGJ5IGJyb3dzZXIgaWdub3JpbmcgaW1hZ2UgbGlicmFyaWVzLg0KKyovDQorJElNQ29uZmlnWydpbWdfbGlicmFyeSddID0gdHJ1ZTsNCisNCisNCisvKg0KK1ZpZXcgdHlwZSB3aGVuIHRoZSBGaWxlIG1hbmFnZXIgaXMgaW4gaW5zZXJ0IGltYWdlIG1vZGUuDQorVmFsaWQgdmFsdWVzIGFyZSAidGh1bWJ2aWV3IiBhbmQgImxpc3R2aWV3Ii4NCisqLw0KKw0KKyAgICANCitpZiAoJGluc2VydE1vZGUgPT0gJ2ltYWdlJykNCisJJElNQ29uZmlnWyd2aWV3X3R5cGUnXSA9ICJ0aHVtYnZpZXciOw0KKwkNCitlbHNlIGlmKCRpbnNlcnRNb2RlID09ICJsaW5rIikNCisJJElNQ29uZmlnWyd2aWV3X3R5cGUnXSA9ICJsaXN0dmlldyI7DQorDQorJElNQ29uZmlnWydpbnNlcnRfbW9kZSddID0gJGluc2VydE1vZGU7DQorDQorLyogDQorIFBvc3NpYmxlIHZhbHVlczogJ0dEJywgJ0lNJywgb3IgJ05ldFBCTScNCisNCisgVGhlIGltYWdlIG1hbmlwdWxhdGlvbiBsaWJyYXJ5IHRvIHVzZSwgZWl0aGVyIEdEIG9yIEltYWdlTWFnaWNrIG9yIE5ldFBCTS4NCisgSWYgeW91IGhhdmUgc2FmZSBtb2RlIE9OLCBvciBkb24ndCBoYXZlIHRoZSBiaW5hcmllcyB0byBvdGhlciBwYWNrYWdlcywgDQorIHlvdXIgY2hvaWNlIGlzICdHRCcgb25seS4gT3RoZXIgcGFja2FnZXMgcmVxdWlyZSBTYWZlIE1vZGUgdG8gYmUgb2ZmLg0KKyovDQorZGVmaW5lKCdJTUFHRV9DTEFTUycsICdHRCcpOw0KKw0KKw0KKy8qDQorIEFmdGVyIGRlZmluaW5nIHdoaWNoIGxpYnJhcnkgdG8gdXNlLCBpZiBpdCBpcyBOZXRQQk0gb3IgSU0sIHlvdSBuZWVkIHRvDQorIHNwZWNpZnkgd2hlcmUgdGhlIGJpbmFyeSBmb3IgdGhlIHNlbGVjdGVkIGxpYnJhcnkgYXJlLiBBbmQgb2YgY291cnNlDQorIHlvdXIgc2VydmVyIGFuZCBQSFAgbXVzdCBiZSBhYmxlIHRvIGV4ZWN1dGUgdGhlbSAoaS5lLiBzYWZlIG1vZGUgaXMgT0ZGKS4NCisgR0QgZG9lcyBub3QgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRlZmluaXRpb24uDQorKi8NCitkZWZpbmUoJ0lNQUdFX1RSQU5TRk9STV9MSUJfUEFUSCcsICcvdXNyL2Jpbi8nKTsNCisvL2RlZmluZSgnSU1BR0VfVFJBTlNGT1JNX0xJQl9QQVRIJywgJ0M6LyJQcm9ncmFtIEZpbGVzIi9JbWFnZU1hZ2ljay01LjUuNy1RMTYvJyk7DQorDQorDQorLyoNCisgIFRoZSBwcmVmaXggZm9yIHRodW1ibmFpbCBmaWxlcywgc29tZXRoaW5nIGxpa2UgLnRodW1iIHdpbGwgZG8uIFRoZQ0KKyAgdGh1bWJuYWlscyBmaWxlcyB3aWxsIGJlIG5hbWVkIGFzICJwcmVmaXhfaW1hZ2VmaWxlLmV4dCIsIHRoYXQgaXMsDQorICBwcmVmaXggKyBvcmdpbmFsIGZpbGVuYW1lLg0KKyovDQorJElNQ29uZmlnWyd0aHVtYm5haWxfcHJlZml4J10gPSAndF8nOw0KKw0KKw0KKy8qDQorICBUaHVtYm5haWwgY2FuIGFsc28gYmUgc3RvcmVkIGluIGEgZGlyZWN0b3J5LCB0aGlzIGRpcmVjdG9yeQ0KKyAgd2lsbCBiZSBjcmVhdGVkIGJ5IFBIUC4gSWYgUEhQIGlzIGluIHNhZmUgbW9kZSwgdGhpcyBwYXJhbWV0ZXINCisgIGlzIGlnbm9yZWQsIHlvdSBjYW4gbm90IGNyZWF0ZSBkaXJlY3Rvcmllcy4NCisNCisgIElmIHlvdSBkbyBub3Qgd2FudCB0byBzdG9yZSB0aHVtYm5haWxzIGluIGEgZGlyZWN0b3J5LCBzZXQgdGhpcw0KKyAgdG8gZmFsc2Ugb3IgZW1wdHkgc3RyaW5nICcnOw0KKyovDQorJElNQ29uZmlnWyd0aHVtYm5haWxfZGlyJ10gPSAndCc7DQorDQorLyoqDQorICogUmVzaXplIGZpbGVzLCBvciBub3QuICBJZiB0aGUgZGltZW5zaW9ucyBmb3IgYW4gaW1hZ2UgYXJlIGNoYW5nZWQNCisgKiB0aGlzIHdpbGwgY29udHJvbCBpZiB0aGUgaW1hZ2UgaXMgYWN0dWFsbHkgcmVzaXplZC4gIA0KKyAqDQorICogVXN1YWxseSB5b3Ugd2FudCB0aGlzIHRydWUsIHVubGVzcyB5b3UgYXJlIHZlcnkgZGlzayBzcGFjZSBjb25jaW91cy4NCisgKi8NCisgDQorJElNQ29uZmlnWydyZXNpemVfZmlsZXMnXSA9IHRydWU7DQorDQorLyoqDQorKiBSZXNpemVkIHByZWZpeA0KKyoNCisqIFRoZSBwcmVmaXggZm9yIHJlc2l6ZWQgZmlsZXMsIHNvbWV0aGluZyBsaWtlIC5yZXNpemVkIHdpbGwgZG8uICBUaGUNCisqIHJlc2l6ZWQgZmlsZXMgd2lsbCBiZSBuYW1lZCA8cHJlZml4Pl88d2lkdGg+eDxoZWlnaHQ+XzxvcmlnaW5hbD4NCisqIHJlc2l6ZWQgZmlsZXMgYXJlIGNyZWF0ZWQgd2hlbiBvbmUgY2hhbmdlcyB0aGUgZGltZW5zaW9ucyBvZiBhbiBpbWFnZQ0KKyogaW4gdGhlIGltYWdlIG1hbmFnZXIgc2VsZWN0aW9uIGRpYWxvZyAtIHRoZSBpbWFnZSBpcyBzY2FsZWQgd2hlbiB0aGUNCisqIHVzZXIgY2xpY2tzIHRoZSBvayBidXR0b24uDQorKi8NCisNCiskSU1Db25maWdbJ3Jlc2l6ZWRfcHJlZml4J10gPSAnLnJlc2l6ZWQnOw0KKw0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCisvKioNCisqIFJlc2l6ZWQgRGlyZWN0b3J5DQorKg0KKyogUmVzaXplZCBpbWFnZXMgbWF5IGFsc28gYmUgc3RvcmVkIGluIGEgZGlyZWN0b3J5LCBleGNlcHQgaW4gc2FmZSBtb2RlLg0KKyovDQorDQorJElNQ29uZmlnWydyZXNpemVkX2RpciddID0gJyc7DQorDQorLyoNCisgIFBvc3NpYmxlIHZhbHVlczogdHJ1ZSwgZmFsc2UNCisNCisgVFJVRSAtICBBbGxvdyB0aGUgdXNlciB0byBjcmVhdGUgbmV3IHN1Yi1kaXJlY3RvcmllcyBpbiB0aGUNCisgICAgICAgICAkSU1Db25maWdbJ2ltYWdlc19kaXInXS8kSU1Db25maWdbJ2ZpbGVzX2RpciddLg0KKw0KKyBGQUxTRSAtIE5vIGRpcmVjdG9yeSBjcmVhdGlvbi4NCisNCisgTk9URTogSWYgJElNQ29uZmlnWydzYWZlX21vZGUnXSA9IHRydWUsIHRoaXMgcGFyYW1ldGVyDQorICAgICAgIGlzIGlnbm9yZWQsIHlvdSBjYW4gbm90IGNyZWF0ZSBkaXJlY3Rvcmllcw0KKyovDQorJElNQ29uZmlnWydhbGxvd19uZXdfZGlyJ10gPSBmYWxzZTsNCisNCisvKg0KKyAgUG9zc2libGUgdmFsdWVzOiB0cnVlLCBmYWxzZQ0KKw0KKyBUUlVFIC0gIEFsbG93IHRoZSB1c2VyIHRvIGVkaXQgaW1hZ2UgYnkgaW1hZ2UgZWRpdG9yLg0KKw0KKyBGQUxTRSAtIE5vIGVkaXQgaWNvbiB3aWxsIGJlIGRpc3BsYXllZC4NCisNCisgTk9URTogSWYgJElNQ29uZmlnWydpbWdfbGlicmFyeSddID0gZmFsc2UsIHRoaXMgcGFyYW1ldGVyDQorICAgICAgIGlzIGlnbm9yZWQsIHlvdSBjYW4gbm90IGVkaXQgaW1hZ2VzLg0KKyovDQorJElNQ29uZmlnWydhbGxvd19lZGl0X2ltYWdlJ10gPSBmYWxzZTsNCisNCisvKg0KKyAgUG9zc2libGUgdmFsdWVzOiB0cnVlLCBmYWxzZQ0KKw0KKyBUUlVFIC0gIEFsbG93IHRoZSB1c2VyIHRvIHJlbmFtZSBmaWxlcyBhbmQgZm9sZGVycy4NCisNCisgRkFMU0UgLSBObyByZW5hbWUgaWNvbiB3aWxsIGJlIGRpc3BsYXllZC4NCisNCisqLw0KKyRJTUNvbmZpZ1snYWxsb3dfcmVuYW1lJ10gPSBmYWxzZTsNCisNCisvKg0KKyAgUG9zc2libGUgdmFsdWVzOiB0cnVlLCBmYWxzZQ0KKw0KKyBUUlVFIC0gIEFsbG93IHRoZSB1c2VyIHRvIHBlcmZvcm0gY3V0L2NvcHkvcGFzdGUgYWN0aW9ucy4NCisNCisgRkFMU0UgLSBObyBjdXQvY29weS9wYXN0ZSBpY29ucyB3aWxsIGJlIGRpc3BsYXllZC4NCisNCisqLw0KKyRJTUNvbmZpZ1snYWxsb3dfY3V0X2NvcHlfcGFzdGUnXSA9IGZhbHNlOw0KKw0KKy8qDQorICBQb3NzaWJsZSB2YWx1ZXM6IHRydWUsIGZhbHNlDQorDQorIFRSVUUgLSAgQWxsb3cgdGhlIHVzZXIgdG8gZGVsZXRlIGZpbGVzIGFuZCBmb2xkZXJzLg0KKw0KKyBGQUxTRSAtIE5vIGRlbGV0ZSBpY29uIHdpbGwgYmUgZGlzcGxheWVkLg0KKw0KKyovDQorJElNQ29uZmlnWydhbGxvd19kZWxldGUnXSA9IGZhbHNlOw0KKw0KKy8qDQorICBQb3NzaWJsZSB2YWx1ZXM6IHRydWUsIGZhbHNlDQorDQorICBUUlVFIC0gRGlzcGxheSBjb2xvciBwaWNrZXJzIGZvciBpbWFnZSBiYWNrZ3JvdW5kIC8gYm9yZGVyIGNvbG9ycw0KKw0KKyAgRkFMU0UgLSBEb24ndCBkaXNwbGF5IGNvbG9yIHBpY2tlcnMNCisqLw0KKyRJTUNvbmZpZ1sndXNlX2NvbG9yX3BpY2tlcnMnXSA9IHRydWU7DQorDQorLyoNCisgIFBvc3NpYmxlIHZhbHVlczogdHJ1ZSwgZmFsc2UNCisNCisgVFJVRSAtICBBbGxvdyB0aGUgdXNlciB0byBzZXQgYWx0IChhbHRlcm5hdGl2ZSB0ZXh0KSBhdHRyaWJ1dGUuDQorDQorIEZBTFNFIC0gTm8gaW5wdXQgZmllbGQgZm9yIGFsdCBhdHRyaWJ1dGUgd2lsbCBiZSBkaXNwbGF5ZWQuDQorDQorIE5PVEU6IFRoZSBhbHQgYXR0cmlidXRlIGlzIF9vYmxpZ2F0b3J5XyBmb3IgaW1hZ2VzLCBzbyA8aW1nIGFsdD0iIiAvPiB3aWxsIGJlIGluc2VydGVkDQorICAgICAgaWYgJ2ltYWdlc19lbmFibGVfYWx0JyBpcyBzZXQgdG8gZmFsc2UNCisqLw0KKyRJTUNvbmZpZ1snaW1hZ2VzX2VuYWJsZV9hbHQnXSA9IHRydWU7DQorDQorLyoNCisgIFBvc3NpYmxlIHZhbHVlczogdHJ1ZSwgZmFsc2UNCisNCisgVFJVRSAtICBBbGxvdyB0aGUgdXNlciB0byBzZXQgdGl0bGUgYXR0cmlidXRlICh1c3VhbGx5IGRpc3BsYXllZCB3aGVuIG1vdXNlIGlzIG92ZXIgZWxlbWVudCkuDQorDQorIEZBTFNFIC0gTm8gaW5wdXQgZmllbGQgZm9yIHRpdGxlIGF0dHJpYnV0ZSB3aWxsIGJlIGRpc3BsYXllZC4NCisNCisqLw0KKyRJTUNvbmZpZ1snaW1hZ2VzX2VuYWJsZV90aXRsZSddID0gZmFsc2U7DQorDQorLyoNCisgIFBvc3NpYmxlIHZhbHVlczogdHJ1ZSwgZmFsc2UNCisNCisgVFJVRSAtICBBbGxvdyB0aGUgdXNlciB0byBzZXQgYWxpZ24gYXR0cmlidXRlLg0KKw0KKyBGQUxTRSAtIE5vIHNlbGVjdGlvbiBib3ggZm9yIGFsaWduIGF0dHJpYnV0ZSB3aWxsIGJlIGRpc3BsYXllZC4NCisNCisqLw0KKyRJTUNvbmZpZ1snaW1hZ2VzX2VuYWJsZV9hbGlnbiddID0gdHJ1ZTsNCisNCisvKg0KKyAgUG9zc2libGUgdmFsdWVzOiB0cnVlLCBmYWxzZQ0KKw0KKyBUUlVFIC0gIEFsbG93IHRoZSB1c2VyIHRvIHNldCBtYXJnaW4sIHBhZGRpbmcsIGFuZCBib3JkZXIgc3R5bGVzIGZvciB0aGUgaW1hZ2UNCisNCisgRkFMU0UgLSBObyBzdHlsaW5nIGlucHV0IGZpZWxkcyB3aWxsIGJlIGRpc3BsYXllZC4NCisNCisqLw0KKyRJTUNvbmZpZ1snaW1hZ2VzX2VuYWJsZV9zdHlsaW5nJ10gPSB0cnVlOw0KKw0KKy8qDQorICBQb3NzaWJsZSB2YWx1ZXM6IHRydWUsIGZhbHNlDQorDQorIFRSVUUgLSAgIEFsbG93IHRoZSB1c2VyIHRvIHNldCB0YXJnZXQgYXR0cmlidXRlIGZvciBsaW5rICh0aGUgd2luZG93IGluIHdoaWNoIHRoZSBsaW5rIHdpbGwgYmUgb3BlbmVkKS4NCisNCisgRkFMU0UgLSBObyBzZWxlY3Rpb24gYm94IGZvciB0YXJnZXQgYXR0cmlidXRlIHdpbGwgYmUgZGlzcGxheWVkLg0KKw0KKyovDQorJElNQ29uZmlnWydsaW5rX2VuYWJsZV90YXJnZXQnXSA9IHRydWU7DQorLyoNCisgIFBvc3NpYmxlIHZhbHVlczogdHJ1ZSwgZmFsc2UNCisNCisgIFRSVUUgLSBBbGxvdyB0aGUgdXNlciB0byB1cGxvYWQgZmlsZXMuDQorDQorICBGQUxTRSAtIE5vIHVwbG9hZGluZyBhbGxvd2VkLg0KKyovDQorJElNQ29uZmlnWydhbGxvd191cGxvYWQnXSA9IGZhbHNlOw0KKw0KKy8qIE1heGltdW0gdXBsb2FkIGZpbGUgc2l6ZQ0KKw0KKyAgUG9zc2libGUgdmFsdWVzOiBudW1iZXIsICJtYXgiDQorDQorICBudW1iZXIgLSBtYXhpbXVtIHNpemUgaW4gS2lsb2J5dGVzLg0KKw0KKyAgIm1heCIgIC0gdGhlIG1heGltdW0gYWxsb3dlZCBieSB0aGUgc2VydmVyICh0aGUgdmFsdWUgaXMgcmV0cmlldmVkIGZyb20gdGhlIHNlcnZlciBjb25maWd1cmF0aW9uKS4NCisqLw0KKyRJTUNvbmZpZ1snbWF4X2ZpbGVzaXplX2tiX2ltYWdlJ10gPSAyMDA7DQorDQorJElNQ29uZmlnWydtYXhfZmlsZXNpemVfa2JfbGluayddID0gNTAwMDsNCisNCisvKiBNYXhpbXVtIHVwbG9hZCBmb2xkZXIgc2l6ZSBpbiBNZWdhYnl0ZXMuIFVzZSAwIHRvIGRpc2FibGUgbGltaXQgKi8NCiskSU1Db25maWdbJ21heF9mb2xkZXJzaXplX21iJ10gPSAwOw0KKw0KKy8qDQorQWxsb3dlZCBleHRlbnNpb25zIHRoYXQgY2FuIGJlIHNob3duIGFuZCBhbGxvd2VkIHRvIHVwbG9hZC4NCitBdmFpbGFibGUgaWNvbnMgYXJlIGZvciAiZG9jLGZsYSxnaWYsZ3osaHRtbCxqcGcsanMsbW92LHBkZixwaHAscG5nLHBwdCxyYXIsdHh0LHhscyx6aXAiDQorLUNoYW5nZWQgYnkgQUZSVS4NCisqLw0KKw0KKyRJTUNvbmZpZ1snYWxsb3dlZF9pbWFnZV9leHRlbnNpb25zJ10gPSBhcnJheSgianBnIiwiZ2lmIiwicG5nIiwiYm1wIik7DQorJElNQ29uZmlnWydhbGxvd2VkX2xpbmtfZXh0ZW5zaW9ucyddID0gYXJyYXkoImpwZyIsImdpZiIsImpzIiwicGhwIiwicGRmIiwiemlwIiwidHh0IiwicHNkIiwicG5nIiwiaHRtbCIsInN3ZiIsInhtbCIsInhscyIsImRvYyIpOw0KKw0KKw0KKy8qDQorIFRoZSBkZWZhdWx0IHRodW1ibmFpbCBhbmQgbGlzdCB2aWV3IGljb24gaW4gY2FzZSB0aHVtYm5haWxzIGFyZSBub3QgY3JlYXRlZCBhbmQgdGhlIGZpbGVzIGFyZSBvZiB1bmtub3duLg0KKyovDQorJElNQ29uZmlnWydkZWZhdWx0X3RodW1ibmFpbCddID0gJ2ljb25zL2RlZi5naWYnOw0KKyRJTUNvbmZpZ1snZGVmYXVsdF9saXN0aWNvbiddID0gJ2ljb25zL2RlZl9zbWFsbC5naWYnOw0KKw0KKw0KKy8qDQorT25seSBmaWxlcyB3aXRoIHRoZXNlIGV4dGVuc2lvbnMgd2lsbCBiZSBzaG93biBhcyB0aHVtYm5haWxzLiBBbGwgb3RoZXIgZmlsZXMgd2lsbCBiZSBzaG93biBhcyBpY29ucy4NCisqLw0KKyRJTUNvbmZpZ1sndGh1bWJuYWlsX2V4dGVuc2lvbnMnXSA9IGFycmF5KCJqcGciLCAiZ2lmIiwgInBuZyIsICJibXAiKTsNCisNCisvKg0KKyAgVGh1bWJuYWlsIGRpbWVuc2lvbnMuDQorKi8NCiskSU1Db25maWdbJ3RodW1ibmFpbF93aWR0aCddID0gODQ7DQorJElNQ29uZmlnWyd0aHVtYm5haWxfaGVpZ2h0J10gPSA4NDsNCisNCisvKg0KKyAgSW1hZ2UgRWRpdG9yIHRlbXBvcmFyeSBmaWxlbmFtZSBwcmVmaXguDQorKi8NCiskSU1Db25maWdbJ3RtcF9wcmVmaXgnXSA9ICcuZWRpdG9yXyc7DQorDQorDQorLy8gU3RhbmRhcmQgUEhQIEJhY2tlbmQgRGF0YSBQYXNzaW5nDQorLy8gIGlmIGRhdGEgd2FzIHBhc3NlZCB1c2luZyB4aW5oYV9wYXNzX3RvX3BocF9iYWNrZW5kKCkgd2UgbWVyZ2UgdGhlIGl0ZW1zDQorLy8gIHByb3ZpZGVkIGludG8gdGhlIENvbmZpZw0KK3JlcXVpcmVfb25jZShyZWFscGF0aChkaXJuYW1lKF9fRklMRV9fKSAuICcvLi4vLi4vY29udHJpYi9waHAteGluaGEucGhwJykpOw0KK2lmKCRwYXNzZWRfZGF0YSA9IHhpbmhhX3JlYWRfcGFzc2VkX2RhdGEoKSkNCit7DQorICAkSU1Db25maWcgPSBhcnJheV9tZXJnZSgkSU1Db25maWcsICRwYXNzZWRfZGF0YSk7DQorICAkSU1Db25maWdbJ2JhY2tlbmRfdXJsJ10gLj0geGluaGFfcGFzc2VkX2RhdGFfcXVlcnlzdHJpbmcoKSAuICcmJzsNCit9DQorLy8gRGVwcmVjYXRlZCBjb25maWcgcGFzc2luZywgZG9uJ3QgdXNlIHRoaXMgd2F5IGFueSBtb3JlIQ0KK2Vsc2VpZihpc3NldCgkX1JFUVVFU1RbJ2JhY2tlbmRfY29uZmlnJ10pKQ0KK3sNCisgIGlmKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpIHsNCisgICAgJF9SRVFVRVNUWydiYWNrZW5kX2NvbmZpZyddID0gc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFsnYmFja2VuZF9jb25maWcnXSk7DQorICB9DQorICANCisgIGlmKCRfUkVRVUVTVFsnYmFja2VuZF9jb25maWdfc2VjcmV0X2tleV9sb2NhdGlvbiddICE9PSAnWGluaGE6RXh0ZW5kZWRGaWxlTWFuYWdlcicpDQorICB7DQorICAgIHRyaWdnZXJfZXJyb3IoJ1Byb2dyYW1taW5nIEVycm9yIC0gcGxlYXNlIGNvbnRhY3QgdGhlIHdlYnNpdGUgYWRtaW5pc3RyYXRvci9wcm9ncmFtbWVyIHRvIGFsZXJ0IHRoZW0gdG8gdGhpcyBwcm9ibGVtLiBBIG5vbi1kZWZhdWx0IGJhY2tlbmQga2V5IGxvY2F0aW9uIGlzIGJlaW5nIHVzZWQgdG8gcGFzcyBiYWNrZW5kIGRhdGEgdG8gWGluaGEsIGJ1dCB0aGUgc2FtZSBrZXkgbG9jYXRpb24gaXMgbm90IGJlaW5nIHVzZWQgdG8gcmVjZWl2ZSBkYXRhLiAgVGhlIHNwZWNpYWwgYmFja2VuZCBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGlnbm9yZWQuICBUbyByZXNvbHZlIHRoaXMsIHlvdSBzaG91bGQgZWRpdCBwbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvY29uZmlnLnBocCBhbmQgY2hhbmdlIHRoZSBkZWZhdWx0IGtleSBsb2NhdGlvbiBmcm9tICJYaW5oYTpFeHRlbmRlZEZpbGVNYW5hZ2VyIiB0byB5b3VyIGRlc2lyZWQgbm9uIGRlZmF1bHQuICBTZWU6IGh0dHA6Ly90cmFjLnhpbmhhLm9yZy90aWNrZXQvMTUxOCcsIEVfVVNFUl9FUlJPUik7ICAgIA0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgLy8gQ29uZmlnIHNwZWNpZmllZCBmcm9tIGZyb250IGVuZCwgY2hlY2sgdGhhdCBpdCdzIHZhbGlkDQorICBzZXNzaW9uX3N0YXJ0KCk7DQorICBpZiAoIWFycmF5X2tleV9leGlzdHMoJF9SRVFVRVNUWydiYWNrZW5kX2NvbmZpZ19zZWNyZXRfa2V5X2xvY2F0aW9uJ10sICRfU0VTU0lPTikpDQorICAgIGRpZSgiQmFja2VuZCBzZWN1cml0eSBlcnJvci4iKTsNCisNCisgICRzZWNyZXQgPSAkX1NFU1NJT05bJF9SRVFVRVNUWydiYWNrZW5kX2NvbmZpZ19zZWNyZXRfa2V5X2xvY2F0aW9uJ11dOw0KKw0KKyAgaWYoJF9SRVFVRVNUWydiYWNrZW5kX2NvbmZpZ19oYXNoJ10gIT09IHNoYTEoJF9SRVFVRVNUWydiYWNrZW5kX2NvbmZpZyddIC4gJHNlY3JldCkpDQorICB7DQorICAgIGRpZSgiQmFja2VuZCBzZWN1cml0eSBlcnJvci4iKTsNCisgIH0NCisNCisgICR0b19tZXJnZSA9IHVuc2VyaWFsaXplKCRfUkVRVUVTVFsnYmFja2VuZF9jb25maWcnXSk7DQorICBpZighaXNfYXJyYXkoJHRvX21lcmdlKSkNCisgIHsNCisgICAgZGllKCJCYWNrZW5kIGNvbmZpZyBzeW50YXggZXJyb3IuIik7DQorICB9DQorDQorICAkSU1Db25maWcgPSBhcnJheV9tZXJnZSgkSU1Db25maWcsICR0b19tZXJnZSk7DQorDQorICAgLy8gY2hhbmdlZCBjb25maWcgc2V0dGluZ3Mga2V5cyBpbiByZWxhdGlvbiB0byBJbWFnZU1hbmFnZXINCisgICRJTUNvbmZpZ1snYmFja2VuZF91cmwnXSAuPSAiYmFja2VuZF9jb25maWc9IiAuIHJhd3VybGVuY29kZSgkX1JFUVVFU1RbJ2JhY2tlbmRfY29uZmlnJ10pIC4gJyYnOw0KKyAgJElNQ29uZmlnWydiYWNrZW5kX3VybCddIC49ICJiYWNrZW5kX2NvbmZpZ19oYXNoPSIgLiByYXd1cmxlbmNvZGUoJF9SRVFVRVNUWydiYWNrZW5kX2NvbmZpZ19oYXNoJ10pIC4gJyYnOw0KKyAgJElNQ29uZmlnWydiYWNrZW5kX3VybCddIC49ICJiYWNrZW5kX2NvbmZpZ19zZWNyZXRfa2V5X2xvY2F0aW9uPSIgLiByYXd1cmxlbmNvZGUoJF9SRVFVRVNUWydiYWNrZW5kX2NvbmZpZ19zZWNyZXRfa2V5X2xvY2F0aW9uJ10pIC4gJyYnOw0KKyAgfQ0KK30NCitpZiAoJElNQ29uZmlnWydtYXhfZmlsZXNpemVfa2JfbGluayddID09ICJtYXgiKQ0KK3sNCisgICRJTUNvbmZpZ1snbWF4X2ZpbGVzaXplX2tiX2xpbmsnXSA9IHVwbG9hZF9tYXhfZmlsZXNpemVfa2IoKTsNCit9DQorDQoraWYgKCRJTUNvbmZpZ1snbWF4X2ZpbGVzaXplX2tiX2ltYWdlJ10gPT0gIm1heCIpDQorew0KKyAgJElNQ29uZmlnWydtYXhfZmlsZXNpemVfa2JfaW1hZ2UnXSA9IHVwbG9hZF9tYXhfZmlsZXNpemVfa2IoKTsNCit9DQorLy8gRU5EDQorDQorPz4NCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvZGVtb19pbWFnZXMvLmh0YWNjZXNzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2RlbW9faW1hZ2VzLy5odGFjY2VzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGI0NWNmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2RlbW9faW1hZ2VzLy5odGFjY2VzcwpAQCAtMCwwICsxLDExIEBACis8SWZNb2R1bGUgbW9kX3BocC5jPgorIHBocF9mbGFnIGVuZ2luZSBvZmYKKzwvSWZNb2R1bGU+CitBZGRUeXBlIHRleHQvaHRtbCAuaHRtbCAuaHRtIC5zaHRtbCAucGhwIC5waHAzIC5waHA0IC5waHA1IC5waHA2IC5waHA3IC5waHA4IC5waHRtbCAucGh0bSAucGwgLnB5IC5jZ2kKK1JlbW92ZUhhbmRsZXIgLnBocAorUmVtb3ZlSGFuZGxlciAucGhwOAorUmVtb3ZlSGFuZGxlciAucGhwNworUmVtb3ZlSGFuZGxlciAucGhwNgorUmVtb3ZlSGFuZGxlciAucGhwNQorUmVtb3ZlSGFuZGxlciAucGhwNAorUmVtb3ZlSGFuZGxlciAucGhwMwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9kZW1vX2ltYWdlcy9iaWtlcnBlZXAuanBnIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2RlbW9faW1hZ2VzL2Jpa2VycGVlcC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJlNzAyOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9kZW1vX2ltYWdlcy9iaWtlcnBlZXAuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9kZW1vX2ltYWdlcy9saW51eC8uaHRhY2Nlc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvZGVtb19pbWFnZXMvbGludXgvLmh0YWNjZXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NzFiMzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvZGVtb19pbWFnZXMvbGludXgvLmh0YWNjZXNzCkBAIC0wLDAgKzEsMTAgQEAKKworPElmTW9kdWxlIG1vZF9waHAuYz4KKyBwaHBfZmxhZyBlbmdpbmUgb2ZmCis8L0lmTW9kdWxlPgorQWRkVHlwZSB0ZXh0L2h0bWwgLmh0bWwgLmh0bSAuc2h0bWwgLnBocCAucGhwMyAucGh0bWwgLnBodG0gLnBsIC5weSAuY2dpCitSZW1vdmVIYW5kbGVyIC5waHAKK1JlbW92ZUhhbmRsZXIgLnBocDUKK1JlbW92ZUhhbmRsZXIgLnBocDQKK1JlbW92ZUhhbmRsZXIgLnBocDMKKwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2RlbW9faW1hZ2VzL2xpbnV4L2xpbnV4LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9kZW1vX2ltYWdlcy9saW51eC9saW51eC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y0MmQyYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9kZW1vX2ltYWdlcy9saW51eC9saW51eC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2RlbW9faW1hZ2VzL3dlc25vdGgwNzguanBnIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2RlbW9faW1hZ2VzL3dlc25vdGgwNzguanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMzdkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvZGVtb19pbWFnZXMvd2Vzbm90aDA3OC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2VkaXRvci5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvZWRpdG9yLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmIyNjI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2VkaXRvci5waHAKQEAgLTAsMCArMSwxNzIgQEAKKzw/cGhwDQorLyoqDQorICogRXh0ZW5kZWRGaWxlTWFuYWdlciBlZGl0b3IucGhwIGZpbGUuDQorICogQXV0aG9yczogV2VpIFpodW8sIEFmcnUsIEtyenlzenRvZiBLb3Rvd2ljeg0KKyAqIFZlcnNpb246IFVwZGF0ZWQgb24gMDgtMDEtMjAwNSBieSBBZnJ1DQorICogVmVyc2lvbjogVXBkYXRlZCBvbiAyMS0wNi0yMDA2IGJ5IEtyenlzenRvZiBLb3Rvd2ljeg0KKyAqIFZlcnNpb246IFVwZGF0ZWQgb24gMjAtMDEtMjAwOCBieSBSYWltdW5kIE1leWVyDQorICogUGFja2FnZTogRXh0ZW5kZWRGaWxlTWFuYWdlciAoRUZNIDEuNCkNCisgKiBodHRwOi8vd3d3LmFmcnVzb2Z0LmNvbS9odG1sYXJlYQ0KKyAqLw0KK2lmKGlzc2V0KCRfUkVRVUVTVFsnbW9kZSddKSkgJGluc2VydE1vZGU9JF9SRVFVRVNUWydtb2RlJ107DQorCWlmKCFpc3NldCgkaW5zZXJ0TW9kZSkpICRpbnNlcnRNb2RlPSJpbWFnZSI7DQorDQorcmVxdWlyZV9vbmNlKCdjb25maWcuaW5jLnBocCcpOw0KK3JlcXVpcmVfb25jZSgnQ2xhc3Nlcy9FeHRlbmRlZEZpbGVNYW5hZ2VyLnBocCcpOw0KK3JlcXVpcmVfb25jZSgnLi4vSW1hZ2VNYW5hZ2VyL0NsYXNzZXMvSW1hZ2VFZGl0b3IucGhwJyk7DQorDQorJG1hbmFnZXIgPSBuZXcgRXh0ZW5kZWRGaWxlTWFuYWdlcigkSU1Db25maWcsJGluc2VydE1vZGUpOw0KKyRlZGl0b3IgPSBuZXcgSW1hZ2VFZGl0b3IoJG1hbmFnZXIpOw0KKw0KKz8+DQorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPg0KKw0KKzxodG1sPg0KKzxoZWFkPg0KKwk8dGl0bGU+WGluaGEgSW1hZ2UgRWRpdG9yPC90aXRsZT4NCisJPGxpbmsgaHJlZj0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+YXNzZXRzL2VkaXRvci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIC8+DQorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+YXNzZXRzL3NsaWRlci5qcyI+PC9zY3JpcHQ+DQorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vcG9wdXBzL3BvcHVwLmpzIj48L3NjcmlwdD4NCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5hc3NldHMvcG9wdXAuanMiPjwvc2NyaXB0Pg0KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCisvKjwhW0NEQVRBWyovDQorDQorICAgIHZhciBfYmFja2VuZF91cmwgPSAiPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYWNrZW5kX3VybCddLiImbW9kZT0kaW5zZXJ0TW9kZSI7ID8+JiI7DQorDQorCWlmKHdpbmRvdy5vcGVuZXIpDQorCQlYaW5oYSA9IHdpbmRvdy5vcGVuZXIuWGluaGE7DQorLypdXT4qLw0KKzwvc2NyaXB0Pg0KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmFzc2V0cy9lZGl0b3IuanMiPjwvc2NyaXB0Pg0KKzwvaGVhZD4NCisNCis8Ym9keT4NCis8dGFibGUgc3R5bGU9IndpZHRoOjEwMCUiPg0KKzx0cj4NCisJPHRkIGlkPSJpbmRpY2F0b3IiPg0KKyAgICAJPGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9zcGFjZXIuZ2lmIiBpZD0iaW5kaWNhdG9yX2ltYWdlIiBoZWlnaHQ9IjIwIiB3aWR0aD0iMjAiIGFsdD0iIi8+CisJPC90ZD4NCisJPHRkIGlkPSJ0b29scyI+DQorCQk8ZGl2IGlkPSJ0b29sc19jcm9wIiBzdHlsZT0iZGlzcGxheTpub25lOyI+DQorCQkJPGRpdiBjbGFzcz0idG9vbF9pbnB1dHMiPg0KKwkJCQk8bGFiZWwgZm9yPSJjeCI+U3RhcnQgWDo8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iY3giICBjbGFzcz0idGV4dElucHV0IiBvbmNoYW5nZT0idXBkYXRlTWFya2VyKCdjcm9wJykiLz4NCisJCQkJPGxhYmVsIGZvcj0iY3kiPlN0YXJ0IFk6PC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImN5IiBjbGFzcz0idGV4dElucHV0IiBvbmNoYW5nZT0idXBkYXRlTWFya2VyKCdjcm9wJykiLz4NCisJCQkJPGxhYmVsIGZvcj0iY3ciPldpZHRoOjwvbGFiZWw+PGlucHV0IHR5cGU9InRleHQiIGlkPSJjdyIgY2xhc3M9InRleHRJbnB1dCIgb25jaGFuZ2U9InVwZGF0ZU1hcmtlcignY3JvcCcpIi8+DQorCQkJCTxsYWJlbCBmb3I9ImNoIj5IZWlnaHQ6PC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImNoIiBjbGFzcz0idGV4dElucHV0IiBvbmNoYW5nZT0idXBkYXRlTWFya2VyKCdjcm9wJykiLz4JCQk8aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2Rpdi5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIyIiBjbGFzcz0iZGl2IiBhbHQ9InwiIC8+DQorCQkJPC9kaXY+CQ0KKwkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9ImVkaXRvci5kb1N1Ym1pdCgnY3JvcCcpOyIgY2xhc3M9ImJ1dHRvbnMiIHRpdGxlPSJPSyI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9idG5fb2suZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzAiIGFsdD0iT0siIC8+PC9hPg0KKwkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9ImVkaXRvci5yZXNldCgpOyIgY2xhc3M9ImJ1dHRvbnMiIHRpdGxlPSJDYW5jZWwiPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvYnRuX2NhbmNlbC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzMCIgYWx0PSJDYW5jZWwiIC8+PC9hPg0KKwkJPC9kaXY+CQ0KKwkJPGRpdiBpZD0idG9vbHNfc2NhbGUiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4NCisJCQk8ZGl2IGNsYXNzPSJ0b29sX2lucHV0cyI+DQorCQkJCTxsYWJlbCBmb3I9InN3Ij5XaWR0aDo8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic3ciIGNsYXNzPSJ0ZXh0SW5wdXQiIG9uY2hhbmdlPSJjaGVja0NvbnN0cmFpbnMoJ3dpZHRoJykiLz4NCisJCQkJPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0idG9nZ2xlQ29uc3RyYWludHMoKTsiIHRpdGxlPSJMb2NrIj48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2lzbG9ja2VkMi5naWYiIGlkPSJzY2FsZUNvbnN0SW1nIiBoZWlnaHQ9IjE0IiB3aWR0aD0iOCIgYWx0PSJMb2NrIiBjbGFzcz0iZGl2IiAvPjwvYT48bGFiZWwgZm9yPSJzaCI+SGVpZ2h0OjwvbGFiZWw+DQorCQkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic2giIGNsYXNzPSJ0ZXh0SW5wdXQiIG9uY2hhbmdlPSJjaGVja0NvbnN0cmFpbnMoJ2hlaWdodCcpIi8+DQorCQkJCTxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbnN0UHJvcCIgdmFsdWU9IjEiIGNoZWNrZWQ9ImNoZWNrZWQiIG9uY2xpY2s9InRvZ2dsZUNvbnN0cmFpbnRzKCkiLz4NCisJCQkJPGxhYmVsIGZvcj0iY29uc3RQcm9wIj5Db25zdHJhaW4gUHJvcG9ydGlvbnM8L2xhYmVsPg0KKwkJCQk8aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2Rpdi5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIyIiBjbGFzcz0iZGl2IiBhbHQ9InwiIC8+DQorCQkJPC9kaXY+CQ0KKwkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9ImVkaXRvci5kb1N1Ym1pdCgnc2NhbGUnKTsiIGNsYXNzPSJidXR0b25zIiB0aXRsZT0iT0siPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvYnRuX29rLmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjMwIiBhbHQ9Ik9LIiAvPjwvYT4NCisJCQk8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBvbmNsaWNrPSJ6b29tKCk7IiBjbGFzcz0iYnV0dG9ucyIgdGl0bGU9IkNhbmNlbCI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9idG5fY2FuY2VsLmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjMwIiBhbHQ9IkNhbmNlbCIgLz48L2E+DQorCQk8L2Rpdj4JDQorCQk8ZGl2IGlkPSJ0b29sc19yb3RhdGUiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4NCisJCQk8ZGl2IGNsYXNzPSJ0b29sX2lucHV0cyI+DQorCQkJCTxzZWxlY3QgaWQ9InJvdGF0ZV9zdWJfYWN0aW9uIiBuYW1lPSJyb3RhdGVfc3ViX2FjdGlvbiIgb25jaGFuZ2U9InJvdGF0ZVN1YkFjdGlvblNlbGVjdCh0aGlzKSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAxMHB4OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyI+DQorCQkJCQk8b3B0aW9uIHNlbGVjdGVkPSJzZWxlY3RlZCIgdmFsdWU9InJvdGF0ZSI+Um90YXRlIEltYWdlPC9vcHRpb24+DQorCQkJCQk8b3B0aW9uIHZhbHVlPSJmbGlwIj5GbGlwIEltYWdlPC9vcHRpb24+DQorCQkJCTwvc2VsZWN0Pg0KKwkJCQk8c2VsZWN0IGlkPSJyb3RhdGVfcHJlc2V0X3NlbGVjdCIgbmFtZT0icm90YXRlX3ByZXNldF9zZWxlY3QiIG9uY2hhbmdlPSJyb3RhdGVQcmVzZXQodGhpcykiIHN0eWxlPSJtYXJnaW4tbGVmdDogMjBweDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsiPg0KKwkJCQkJPG9wdGlvbj5QcmVzZXQ8L29wdGlvbj4NCisJCQkJCTxvcHRpb24gdmFsdWU9IjE4MCI+Um90YXRlIDE4MCAmZGVnOzwvb3B0aW9uPg0KKwkJCQkJPG9wdGlvbiB2YWx1ZT0iOTAiPlJvdGF0ZSA5MCAmZGVnOyBDVzwvb3B0aW9uPg0KKwkJCQkJPG9wdGlvbiB2YWx1ZT0iLTkwIj5Sb3RhdGUgOTAgJmRlZzsgQ0NXPC9vcHRpb24+DQorCQkJCTwvc2VsZWN0Pg0KKwkJCQk8c2VsZWN0IGlkPSJmbGlwIiBuYW1lPSJmbGlwIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDIwcHg7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7ZGlzcGxheTpub25lIj4NCisJCQkJCTxvcHRpb24gdmFsdWU9ImhveiI+RmxpcCBIb3Jpem9udGFsPC9vcHRpb24+DQorCQkJCQk8b3B0aW9uIHZhbHVlPSJ2ZXIiPkZsaXAgVmVydGljYWw8L29wdGlvbj4NCisJCQkJPC9zZWxlY3Q+DQorCQkJCTxsYWJlbCBmb3I9InJhIj5BbmdsZTo8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InJhIiBjbGFzcz0idGV4dElucHV0IiAvPjwvbGFiZWw+DQorCQkJCTxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvZGl2LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjIiIGNsYXNzPSJkaXYiIGFsdD0ifCIgLz4NCisJCQk8L2Rpdj4JDQorCQkJPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0iZWRpdG9yLmRvU3VibWl0KCdyb3RhdGUnKTsiIGNsYXNzPSJidXR0b25zIiB0aXRsZT0iT0siPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvYnRuX29rLmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjMwIiBhbHQ9Ik9LIiAvPjwvYT4NCisJCQk8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBvbmNsaWNrPSJlZGl0b3IucmVzZXQoKTsiIGNsYXNzPSJidXR0b25zIiB0aXRsZT0iQ2FuY2VsIj48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2J0bl9jYW5jZWwuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzAiIGFsdD0iQ2FuY2VsIiAvPjwvYT4NCisJCTwvZGl2PgkJDQorCQk8ZGl2IGlkPSJ0b29sc19tZWFzdXJlIiBzdHlsZT0iZGlzcGxheTpub25lOyI+DQorCQkJPGRpdiBjbGFzcz0idG9vbF9pbnB1dHMiPg0KKwkJCQk8bGFiZWw+WDo8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0ibWVhc3VyZVN0YXRzIiBpZD0ic3giIC8+DQorCQkJCTxsYWJlbD5ZOjwvbGFiZWw+PGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJtZWFzdXJlU3RhdHMiIGlkPSJzeSIgLz4NCisJCQkJPGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9kaXYuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMiIgY2xhc3M9ImRpdiIgYWx0PSJ8IiAvPg0KKwkJCQk8bGFiZWw+Vzo8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0ibWVhc3VyZVN0YXRzIiBpZD0ibXciIC8+DQorCQkJCTxsYWJlbD5IOjwvbGFiZWw+PGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJtZWFzdXJlU3RhdHMiIGlkPSJtaCIgLz4NCisJCQkJPGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9kaXYuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMiIgY2xhc3M9ImRpdiIgYWx0PSJ8IiAvPg0KKwkJCQk8bGFiZWw+QTo8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0ibWVhc3VyZVN0YXRzIiBpZD0ibWEiIC8+CQkNCisJCQkJPGxhYmVsPkQ6PC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9Im1lYXN1cmVTdGF0cyIgaWQ9Im1kIiAvPgkJDQorCQkJCTxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvZGl2LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjIiIGNsYXNzPSJkaXYiIGFsdD0ifCIgLz4NCisJCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIG9uY2xpY2s9ImVkaXRvci5yZXNldCgpOyIgPkNsZWFyPC9idXR0b24+DQorCQkJPC9kaXY+CQ0KKwkJPC9kaXY+DQorCQk8ZGl2IGlkPSJ0b29sc19zYXZlIiBzdHlsZT0iZGlzcGxheTpub25lOyI+DQorCQkJPGRpdiBjbGFzcz0idG9vbF9pbnB1dHMiPg0KKwkJCQk8bGFiZWwgZm9yPSJzYXZlX2ZpbGVuYW1lIj5GaWxlbmFtZTo8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic2F2ZV9maWxlbmFtZSIgdmFsdWU9Ijw/cGhwIGVjaG8gJGVkaXRvci0+Z2V0RGVmYXVsdFNhdmVGaWxlKCk7Pz4iLz4NCisJCQkJPHNlbGVjdCBuYW1lPSJmb3JtYXQiIGlkPSJzYXZlX2Zvcm1hdCIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAxMHB4OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyIgb25jaGFuZ2U9InVwZGF0ZUZvcm1hdCh0aGlzKSI+DQorCSAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImpwZWcsODUiPkpQRUcgSGlnaDwvb3B0aW9uPg0KKwkgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJqcGVnLDYwIj5KUEVHIE1lZGl1bTwvb3B0aW9uPg0KKwkgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJqcGVnLDM1Ij5KUEVHIExvdzwvb3B0aW9uPg0KKwkgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwbmciPlBORzwvb3B0aW9uPg0KKwkJCQk8P3BocCBpZigkZWRpdG9yLT5pc0dER0lGQWJsZSgpICE9IC0xKSB7ID8+DQorCSAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImdpZiI+R0lGPC9vcHRpb24+DQorCQkJCTw/cGhwIH0gPz4NCisJICAgICAgICAgPC9zZWxlY3Q+DQorCQkJIDxkaXYgaWQ9InNsaWRlciIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4NCisJCQkJPGxhYmVsPlF1YWxpdHk6PC9sYWJlbD4NCisJCQkJPHRhYmxlIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPg0KKwkJCQkJPHRyPg0KKwkJCQkJPHRkPg0KKwkJCQkJCTxkaXYgaWQ9InNsaWRlcmNhc2luZyI+IA0KKwkJCQkJPGRpdiBpZD0ic2xpZGVydHJhY2siIHN0eWxlPSJ3aWR0aDoxMDBweCI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9zcGFjZXIuZ2lmIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBib3JkZXI9IjAiIGFsdD0idHJhY2siIC8+PC9kaXY+DQorCSAgICAgICAgICAgIDxkaXYgaWQ9InNsaWRlcmJhciIgc3R5bGU9ImxlZnQ6ODVweCIgb25tb3VzZWRvd249ImNhcHR1cmVTdGFydCgpOyI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9zcGFjZXIuZ2lmIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBib3JkZXI9IjAiIGFsdD0idHJhY2siIC8+PC9kaXY+DQorCQkJCTwvZGl2PgkNCisJCQkJCTwvdGQ+DQorCQkJCQk8L3RyPg0KKwkJCQk8L3RhYmxlPg0KKwkJCQk8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InF1YWxpdHkiIG9uY2hhbmdlPSJ1cGRhdGVTbGlkZXIodGhpcy52YWx1ZSkiIHN0eWxlPSJ3aWR0aDogMmVtOyIgdmFsdWU9Ijg1Ii8+DQorCQkJPC9kaXY+DQorCQkJPGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9kaXYuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMiIgY2xhc3M9ImRpdiIgYWx0PSJ8IiAvPg0KKwkJCTxkaXYgc3R5bGU9ImRpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZToxMHB4Ij4NCisJCQk8c3Bhbj5GaWxlc2l6ZTo8L3NwYW4+IDxzcGFuIGlkPSJmaWxlc2l6ZSI+PC9zcGFuPg0KKwkJCTwvZGl2PiANCisJCQk8aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2Rpdi5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIyIiBjbGFzcz0iZGl2IiBhbHQ9InwiIC8+DQorCQkJPC9kaXY+CQ0KKwkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBzdHlsZT0iZmxvYXQ6bGVmdDttYXJnaW46MTdweCA1cHggMCA7IiBvbmNsaWNrPSJlZGl0b3IuZG9TdWJtaXQoJ3ByZXZpZXcnKSI+UHJldmlldzwvYnV0dG9uPg0KKwkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBzdHlsZT0iZmxvYXQ6bGVmdDttYXJnaW4tdG9wOjE3cHg7IiBvbmNsaWNrPSJlZGl0b3IuZG9TdWJtaXQoJ3NhdmUnKTsiPlNhdmU8L2J1dHRvbj4NCisJCQk8L2Rpdj4JDQorCTwvdGQ+DQorPC90cj4NCis8dHI+DQorCTx0ZCBpZD0idG9vbGJhciI+DQorCQk8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiAgb25jbGljaz0idG9nZ2xlKCdjcm9wJykiIGlkPSJpY29uX2Nyb3AiIHRpdGxlPSJDcm9wIj48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2Nyb3AuZ2lmIiBoZWlnaHQ9IjIwIiB3aWR0aD0iMjAiIGFsdD0iQ3JvcCIgLz48c3Bhbj5Dcm9wPC9zcGFuPjwvYT4NCisJCTxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9InRvZ2dsZSgnc2NhbGUnKSIgaWQ9Imljb25fc2NhbGUiIHRpdGxlPSJSZXNpemUiPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvc2NhbGUuZ2lmIiBoZWlnaHQ9IjIwIiB3aWR0aD0iMjAiIGFsdD0iUmVzaXplIiAvPjxzcGFuPlJlc2l6ZTwvc3Bhbj48L2E+DQorCQk8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBvbmNsaWNrPSJ0b2dnbGUoJ3JvdGF0ZScpIiBpZD0iaWNvbl9yb3RhdGUiIHRpdGxlPSJSb3RhdGUiPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvcm90YXRlLmdpZiIgaGVpZ2h0PSIyMCIgd2lkdGg9IjIwIiBhbHQ9IlJvdGF0ZSIgLz48c3Bhbj5Sb3RhdGU8L3NwYW4+PC9hPg0KKwkJPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0idG9nZ2xlKCdtZWFzdXJlJykiIGlkPSJpY29uX21lYXN1cmUiIHRpdGxlPSJNZWFzdXJlIj48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL21lYXN1cmUuZ2lmIiBoZWlnaHQ9IjIwIiB3aWR0aD0iMjAiIGFsdD0iTWVhc3VyZSIgLz48c3Bhbj5NZWFzdXJlPC9zcGFuPjwvYT4NCisJCTxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9InRvZ2dsZU1hcmtlcigpOyIgdGl0bGU9IlRvZ2dsZSBtYXJrZXIgY29sb3IiPjxpbWcgaWQ9Im1hcmtlckltZyIgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvdF9ibGFjay5naWYiIGhlaWdodD0iMjAiIHdpZHRoPSIyMCIgYWx0PSJNYXJrZXIiIC8+PHNwYW4+TWFya2VyPC9zcGFuPjwvYT4NCisJCTxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9InRvZ2dsZSgnc2F2ZScpIiBpZD0iaWNvbl9zYXZlIiB0aXRsZT0iU2F2ZSI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9zYXZlLmdpZiIgaGVpZ2h0PSIyMCIgd2lkdGg9IjIwIiBhbHQ9IlNhdmUiIC8+PHNwYW4+U2F2ZTwvc3Bhbj48L2E+DQorCQk8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjEwcHgiPlpvb208L2Rpdj4NCisJCTxzZWxlY3QgaWQ9Inpvb20iIG9uY2hhbmdlPSJ6b29tKHRoaXMudmFsdWUpIj4NCisJCQk8b3B0aW9uIHZhbHVlPSIxMCI+MTAlPC9vcHRpb24+DQorCQkJPG9wdGlvbiB2YWx1ZT0iMjUiPjI1JTwvb3B0aW9uPg0KKwkJCTxvcHRpb24gdmFsdWU9IjUwIj41MCU8L29wdGlvbj4NCisJCQk8b3B0aW9uIHZhbHVlPSI3NSI+NzUlPC9vcHRpb24+DQorCQkJPG9wdGlvbiB2YWx1ZT0iMTAwIiBzZWxlY3RlZD0ic2VsZWN0ZWQiPjEwMCU8L29wdGlvbj4NCisJCQk8b3B0aW9uIHZhbHVlPSIyMDAiPjIwMCU8L29wdGlvbj4NCisJCTwvc2VsZWN0Pg0KKwk8L3RkPg0KKwk8dGQgaWQ9ImNvbnRlbnRzIj4NCisJCTw/cGhwDQorCQkkaWZyYW1lX3NyYyA9ICRJTUNvbmZpZ1snYmFja2VuZF91cmwnXS4nX19mdW5jdGlvbj1lZGl0b3JGcmFtZSZpbWc9Jy4oKGlzc2V0KCRfR0VUWydpbWcnXSkpID8gcmF3dXJsZW5jb2RlKCRfR0VUWydpbWcnXSkgOiAnJykuJyZtb2RlPScuICRpbnNlcnRNb2RlOw0KKwkJPz4NCisJCTxpZnJhbWUgc3JjPSI8P3BocCBwcmludCBodG1sc3BlY2lhbGNoYXJzKCRpZnJhbWVfc3JjKSA/PiIgbmFtZT0iZWRpdG9yIiBpZD0iZWRpdG9yIiAgc2Nyb2xsaW5nPSJhdXRvIiB0aXRsZT0iSW1hZ2UgRWRpdG9yIiBmcmFtZWJvcmRlcj0iMCI+PC9pZnJhbWU+DQorCTwvdGQ+DQorPC90cj4NCis8L3RhYmxlPg0KKzwvYm9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2VkaXRvckZyYW1lLnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9lZGl0b3JGcmFtZS5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBmYjMxMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9lZGl0b3JGcmFtZS5waHAKQEAgLTAsMCArMSw4NCBAQAorPD9waHANCisvKioNCisgKiBFeHRlbmRlZEZpbGVNYW5hZ2VyIGVkaXRvcmZyYW1lLnBocCBmaWxlLg0KKyAqIEF1dGhvcnM6IFdlaSBaaHVvLCBBZnJ1LCBLcnp5c3p0b2YgS290b3dpY3oNCisgKiBWZXJzaW9uOiBVcGRhdGVkIG9uIDA4LTAxLTIwMDUgYnkgQWZydQ0KKyAqIFZlcnNpb246IFVwZGF0ZWQgb24gMjEtMDYtMjAwNiBieSBLcnp5c3p0b2YgS290b3dpY3oNCisgKiBWZXJzaW9uOiBVcGRhdGVkIG9uIDIwLTAxLTIwMDggYnkgUmFpbXVuZCBNZXllcg0KKyAqIFBhY2thZ2U6IEV4dGVuZGVkRmlsZU1hbmFnZXIgKEVGTSAxLjQpDQorICogaHR0cDovL3d3dy5hZnJ1c29mdC5jb20vaHRtbGFyZWENCisgKi8NCitpZihpc3NldCgkX1JFUVVFU1RbJ21vZGUnXSkpICRpbnNlcnRNb2RlPSRfUkVRVUVTVFsnbW9kZSddOw0KKwlpZighaXNzZXQoJGluc2VydE1vZGUpKSAkaW5zZXJ0TW9kZT0iaW1hZ2UiOw0KKw0KK3JlcXVpcmVfb25jZSgnY29uZmlnLmluYy5waHAnKTsNCityZXF1aXJlX29uY2UoJ0NsYXNzZXMvRXh0ZW5kZWRGaWxlTWFuYWdlci5waHAnKTsNCityZXF1aXJlX29uY2UoJy4uL0ltYWdlTWFuYWdlci9DbGFzc2VzL0ltYWdlRWRpdG9yLnBocCcpOw0KKw0KKyRtYW5hZ2VyID0gbmV3IEV4dGVuZGVkRmlsZU1hbmFnZXIoJElNQ29uZmlnLCRpbnNlcnRNb2RlKTsNCiskZWRpdG9yID0gbmV3IEltYWdlRWRpdG9yKCRtYW5hZ2VyKTsNCiskaW1hZ2VJbmZvID0gJGVkaXRvci0+cHJvY2Vzc0ltYWdlKCk7DQorDQorPz4NCisNCis8aHRtbD4NCis8aGVhZD4NCisJPHRpdGxlPjwvdGl0bGU+DQorPGxpbmsgaHJlZj0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+YXNzZXRzL2VkaXRvckZyYW1lLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgLz4NCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5hc3NldHMvd3pfanNncmFwaGljcy5qcyI+PC9zY3JpcHQ+DQorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+YXNzZXRzL0VkaXRvckNvbnRlbnQuanMiPjwvc2NyaXB0Pg0KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCisgICAgdmFyIF9iYWNrZW5kX3VybCA9ICI8P3BocCBwcmludCAkSU1Db25maWdbJ2JhY2tlbmRfdXJsJ10uIiZtb2RlPSRpbnNlcnRNb2RlIjsgPz4mIjsNCisNCisgICAgaWYod2luZG93LnRvcCkNCisgICAgCVhpbmhhID0gd2luZG93LnRvcC5YaW5oYTsNCisNCisgICAgZnVuY3Rpb24gaTE4bihzdHIpIHsNCisgICAgICAgIHJldHVybiBYaW5oYS5fbGMoc3RyLCAnSW1hZ2VNYW5hZ2VyJyk7DQorICAgIH0NCisNCisJdmFyIG1vZGUgPSAiPD9waHAgZWNobyAkZWRpdG9yLT5nZXRBY3Rpb24oKTsgPz4iIC8vY3JvcCwgc2NhbGUsIG1lYXN1cmUNCisJdmFyIGN1cnJlbnRJbWFnZUZpbGUgPSAiPD9waHAgaWYoY291bnQoJGltYWdlSW5mbyk+MCkgZWNobyByYXd1cmxlbmNvZGUoJGltYWdlSW5mb1snZmlsZSddKTsgPz4iOw0KKwl2YXIgZmlsZVNpemUgPSAiPD9waHAgZWNobyAocm91bmQoJGltYWdlSW5mb1snZmlsZXNpemUnXSAvIDEwMjQsMSkpLicgS0InID8+IjsNCisJDQorDQorPD9waHAgaWYgKCRlZGl0b3ItPmlzRmlsZVNhdmVkKCkgPT0gMSkgeyA/Pg0KKwlhbGVydChpMThuKCdGaWxlIHNhdmVkLicpKTsNCisNCisgICAgd2luZG93LnBhcmVudC5vcGVuZXIucGFyZW50LnJlZnJlc2goKTsNCisgICAgd2luZG93LnBhcmVudC5vcGVuZXIuc2VsZWN0SW1hZ2UNCisgICAgKA0KKyAgCSc8P3BocCBlY2hvICRpbWFnZUluZm9bJ3NhdmVGaWxlJ10gPz4nLA0KKyAgCSc8P3BocCBlY2hvICRpbWFnZUluZm9bJ3NhdmVGaWxlJ10gPz4nLnJlcGxhY2UoL14uKlwvPyhbXlwvXSopJC8sICckMScpLA0KKyAgCTw/cGhwIGVjaG8gJGltYWdlSW5mb1snd2lkdGgnXSA/PiwNCisgIAk8P3BocCBlY2hvICRpbWFnZUluZm9bJ2hlaWdodCddID8+DQorICAJKTsNCisgIAl3aW5kb3cucGFyZW50LmNsb3NlKCk7DQorICAJDQorPD9waHAgfSBlbHNlIGlmICgkZWRpdG9yLT5pc0ZpbGVTYXZlZCgpID09IC0xKSB7ID8+DQorCWFsZXJ0KGkxOG4oJ0ZpbGUgd2FzIG5vdCBzYXZlZC4nKSk7DQorPD9waHAgfSA/Pg0KKw0KKzwvc2NyaXB0Pg0KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmFzc2V0cy9lZGl0b3JGcmFtZS5qcyI+PC9zY3JpcHQ+DQorPC9oZWFkPg0KKw0KKzxib2R5Pg0KKzxkaXYgaWQ9InN0YXR1cyI+PC9kaXY+DQorPGRpdiBpZD0iYW50IiBjbGFzcz0ic2VsZWN0aW9uIiBzdHlsZT0idmlzaWJpbGl0eTpoaWRkZW4iPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvc3BhY2VyLmdpZiIgd2lkdGg9IjAiIGhlaWdodD0iMCIgYm9yZGVyPSIwIiBhbHQ9IiIgaWQ9ImNyb3BDb250ZW50Ij48L2Rpdj4NCis8P3BocCBpZiAoJGVkaXRvci0+aXNHREVkaXRhYmxlKCkgPT0gLTEpIHsgPz4NCisJPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6MTBweDsiPjxzcGFuIGNsYXNzPSJlcnJvciI+R0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuPC9zcGFuPjwvZGl2Pg0KKzw/cGhwIH0gPz4NCis8dGFibGUgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSI+DQorCTx0cj4NCisJCTx0ZD4NCis8P3BocCBpZihjb3VudCgkaW1hZ2VJbmZvKSA+IDAgJiYgaXNfZmlsZSgkaW1hZ2VJbmZvWydmdWxscGF0aCddKSkgeyA/Pg0KKwk8c3BhbiBpZD0iaW1nQ2FudmFzIiBjbGFzcz0iY3JvcCI+PGltZyBzcmM9Ijw/cGhwIGVjaG8gJGltYWdlSW5mb1snc3JjJ107ID8+IiA8P3BocCBlY2hvICRpbWFnZUluZm9bJ2RpbWVuc2lvbnMnXTsgPz4gYWx0PSIiIGlkPSJ0aGVJbWFnZSIgbmFtZT0idGhlSW1hZ2UiPjwvc3Bhbj4NCis8P3BocCB9IGVsc2UgeyA/Pg0KKwk8c3BhbiBjbGFzcz0iZXJyb3IiPk5vIEltYWdlIEF2YWlsYWJsZTwvc3Bhbj4NCis8P3BocCB9ID8+DQorCQk8L3RkPg0KKwk8L3RyPg0KKzwvdGFibGU+DQorPC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvZmlsZS1waWNrZXIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvZmlsZS1waWNrZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk3NzcyNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9maWxlLXBpY2tlci5qcwpAQCAtMCwwICsxLDE2NCBAQAorLyoqCisgKiBBbiBpbnB1dCBmaWVsZCBGaWxlIFBpY2tlciB1dGlsaXNpbmcgdGhlIFhpbmhhIEV4dGVuZGVkRmlsZU1hbmFnZXIuCisgKgorICogSGlqYWNrIHRoZSBYaW5oYSBFeHRlbmRlZEZpbGVNYW5hZ2VyIHBsdWdpbiB0byBwcm92aWRlIGEgZmlsZSBVUkwgcGlja2VyCisgKiBmb3IgYW55IGZvcm0gaW5wdXQgZmllbGQgaW4gdGhlIGZvcm0gb2YgYSAiQnJvd3NlIiBidXR0b24gdG8gdGhlCisgKiByaWdodCBvZiB0aGUgZmllbGQsIGluIHRoZSBzYW1lIG1hbm5lciBhcyBhIGZpbGUgdHlwZSBpbnB1dCBmaWVsZAorICogZXhjZXB0IGl0IG9wZW5zIHRoZSBmYW1pbGlhciBFeHRlbmRlZEZpbGVNYW5hZ2VyIGRpYWxvZyB0byB1cGxvYWQvc2VsZWN0CisgKiBhIGZpbGUgYW5kIHJldHVybnMgdGhlIFVSTCBvZiB0aGUgZmlsZSB0byB0aGUgZmllbGQncyB2YWx1ZS4KKyAqCisgKiBFeGFtcGxlIFVzYWdlOgorICoKKyAqICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+X2VkaXRvcl91cmwgPSAnL3VybC90by94aW5oYSc7PC9zY3JpcHQ+CisgKiAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iZmlsZS1waWNrZXIuanMiIC8+CisgKiAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICogICA8P3BocCByZXF1aXJlX29uY2UoJy9wYXRoL3RvL3hpbmhhL2NvbnRyaWIvcGhwLXhpbmhhLnBocCcpOyA/PgorICogICB3aXRoKEZpbGVQaWNrZXIucHJvdG90eXBlKQorICogICB7CisgKiAgICAgPD9waHAgCisgKiAgICAgICRDb25mID0gYXJyYXkKKyAqICAgICAgICgKKyAqICAgICAgICAgJ2ZpbGVzX2RpcicgPT4gJy9wYXRoL3RvL2Rvd25sb2FkcycsIAorICogICAgICAgICAnZmlsZXNfdXJsJyA9PiAnL3VybC90by9kb3dubG9hZHMnLCAKKyAqICAgICAgICAgJ3Nob3dfZnVsbF9vcHRpb25zJyA9PiBmYWxzZSwgLy8gRnVsbCBvcHRpb25zIGFyZSBub3QgdXNlZnVsIGFzIGEgVVJMIHBpY2tlcgorICogICAgICAgICAvLyBTZWUgRXh0ZW5kZWRGaWxlTWFuYWdlciBmb3IgbW9yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgISAgICAgICAgICAgCisgKiAgICAgICApOworICogICAgICB4aW5oYV9wYXNzX3RvX3BocF9iYWNrZW5kKCRDb25mKTsKKyAqICAgICA/PgorICogICB9CisgKgorICogICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7IG5ldyBGaWxlUGlja2VyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZE9mVGhlSW5wdXRGaWVsZCcpKTsgfQorICogIDwvc2NyaXB0PgorICoKKyAqCisgKiBAYXV0aG9yICRBdXRob3IkCisgKiBAdmVyc2lvbiAkSWQkCisgKiBAcGFja2FnZSBJbWFnZU1hbmFnZXIKKyAqLworCisKK2Z1bmN0aW9uIEZpbGVQaWNrZXIoZmllbGQpCit7CisgIHRoaXMuZmllbGQgPSBmaWVsZDsKKyAgdmFyIHBpY2tlciA9IHRoaXM7CisgIAorICB2YXIgYnV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsgICAKKyAgYnV0LnR5cGUgPSAnYnV0dG9uJzsKKyAgYnV0LnZhbHVlID0gJ0Jyb3dzZSc7IAorICBidXQub25jbGljayA9IGZ1bmN0aW9uKCkgeyBwaWNrZXIucG9wdXBfcGlja2VyKCk7IH0KKyAgICAgCisgIGZpZWxkLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGJ1dCxmaWVsZC5uZXh0U2libGluZyk7CisgIGZpZWxkLnNpemUgPSAnMjAnOworICBmaWVsZC5zdHlsZS50ZXh0QWxpZ24gPSAncmlnaHQnOworfTsKKworRmlsZVBpY2tlci5wcm90b3R5cGUuYmFja2VuZCAgICAgICAgICAgICA9IF9lZGl0b3JfdXJsICsgJ3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9iYWNrZW5kLnBocD9fX3BsdWdpbj1FeHRlbmRlZEZpbGVNYW5hZ2VyJic7CitGaWxlUGlja2VyLnByb3RvdHlwZS5iYWNrZW5kX2RhdGEgICAgICAgID0gbnVsbDsKKworRmlsZVBpY2tlci5wcm90b3R5cGUuYXBwZW5kX3F1ZXJ5X3N0cmluZyA9IHRydWU7CisKK0ZpbGVQaWNrZXIucHJvdG90eXBlLnBvcHVwX3BpY2tlciA9IGZ1bmN0aW9uKCkKK3sKKyAgdmFyIHBpY2tlciA9IHRoaXM7IC8vIGNsb3N1cmUgZm9yIGxhdGVyICAKKyAgdmFyIG91dHBhcmFtID0gbnVsbDsKKyAgaWYocGlja2VyLmZpZWxkLnZhbHVlKQorICB7CisgICAgb3V0cGFyYW0gPQorCQl7ICAgICAgCisJCQlmX2hyZWYgICAgOiBwaWNrZXIuZmllbGQudmFsdWUsCisgICAgICBmX3RpdGxlICAgOiAnJywKKyAgICAgIGZfdGFyZ2V0ICA6ICcnLAorICAgICAgZl91c2V0YXJnZXQgOiBmYWxzZSwKKyAgICAgIGJhc2VIcmVmOiBudWxsCisgICAgfTsKKyAgICAgCisgIH0KKworICB2YXIgbWFuYWdlciA9IHRoaXMuYmFja2VuZCArICdfX2Z1bmN0aW9uPW1hbmFnZXImbW9kZT1saW5rJzsKKyAgaWYodGhpcy5iYWNrZW5kX2NvbmZpZyAhPSBudWxsKQorICB7CisgICAgbWFuYWdlciArPSAnJmJhY2tlbmRfY29uZmlnPScKKyAgICAgICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuYmFja2VuZF9jb25maWcpOworICAgIG1hbmFnZXIgKz0gJyZiYWNrZW5kX2NvbmZpZ19oYXNoPScKKyAgICAgICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuYmFja2VuZF9jb25maWdfaGFzaCk7CisgICAgbWFuYWdlciArPSAnJmJhY2tlbmRfY29uZmlnX3NlY3JldF9rZXlfbG9jYXRpb249JworICAgICAgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5iYWNrZW5kX2NvbmZpZ19zZWNyZXRfa2V5X2xvY2F0aW9uKTsKKyAgfQorICAKKyAgaWYodGhpcy5iYWNrZW5kX2RhdGEgIT0gbnVsbCkKKyAgeworICAgIGZvciAoIHZhciBpIGluIHRoaXMuYmFja2VuZF9kYXRhICkKKyAgICB7CisgICAgICBtYW5hZ2VyICs9ICcmJyArIGkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5iYWNrZW5kX2RhdGFbaV0pOworICAgIH0KKyAgfQorCisgIERpYWxvZyhtYW5hZ2VyLCBmdW5jdGlvbihwYXJhbSkgeworCQlpZiAoIXBhcmFtKSB7CS8vIHVzZXIgbXVzdCBoYXZlIHByZXNzZWQgQ2FuY2VsCisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKyAgICAKKyAgICBwaWNrZXIuZmllbGQudmFsdWUgPSBwYXJhbS5mX2hyZWY7CisgICAgCisJCX0sIG91dHBhcmFtKTsKK30KKworLy8gRGlhbG9nIGlzIHBhcnQgb2YgWGluaGEsIGJ1dCB3ZSdsbCBwcm92aWRlIGl0IGhlcmUgaW5jYXNlIFhpbmhhJ3Mgbm90IGJlaW5nCisvLyBsb2FkZWQuCitpZih0eXBlb2YgRGlhbG9nID09ICd1bmRlZmluZWQnKQoreworICAvLyBodG1sQXJlYSB2My4wIC0gQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQgaW50ZXJhY3RpdmV0b29scy5jb20sIGluYy4KKyAgLy8gVGhpcyBjb3B5cmlnaHQgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKyAgLy8KKyAgLy8gUG9ydGlvbnMgKGMpIGR5bmFyY2guY29tLCAyMDAzLTIwMDQKKyAgLy8KKyAgLy8gQSBmcmVlIFdZU0lXWUcgZWRpdG9yIHJlcGxhY2VtZW50IGZvciA8dGV4dGFyZWE+IGZpZWxkcy4KKyAgLy8gRm9yIGZ1bGwgc291cmNlIGNvZGUgYW5kIGRvY3MsIHZpc2l0IGh0dHA6Ly93d3cuaW50ZXJhY3RpdmV0b29scy5jb20vCisgIC8vCisgIC8vIFZlcnNpb24gMy4wIGRldmVsb3BlZCBieSBNaWhhaSBCYXpvbi4KKyAgLy8gICBodHRwOi8vZHluYXJjaC5jb20vbWlzaG9vCisgIC8vCisgIC8vICRJZDogZGlhbG9nLmpzIDE4MyAyMDA1LTA1LTIwIDA2OjExOjQ0WiBnb2dvICQKKyAgCisgIC8vIFRob3VnaCAiRGlhbG9nIiBsb29rcyBsaWtlIGFuIG9iamVjdCwgaXQgaXNuJ3QgcmVhbGx5IGFuIG9iamVjdC4gIEluc3RlYWQKKyAgLy8gaXQncyBqdXN0IG5hbWVzcGFjZSBmb3IgcHJvdGVjdGluZyBnbG9iYWwgc3ltYm9scy4KKyAgCisgIGZ1bmN0aW9uIERpYWxvZyh1cmwsIGFjdGlvbiwgaW5pdCkgeworICAgIGlmICh0eXBlb2YgaW5pdCA9PSAidW5kZWZpbmVkIikgeworICAgICAgaW5pdCA9IHdpbmRvdzsJLy8gcGFzcyB0aGlzIHdpbmRvdyBvYmplY3QgYnkgZGVmYXVsdAorICAgIH0KKyAgICB2YXIgZGxnID0gd2luZG93Lm9wZW4odXJsLCAiaGFkaWFsb2ciLAorICAgICAgICAgICAgICAidG9vbGJhcj1ubyxtZW51YmFyPW5vLHBlcnNvbmFsYmFyPW5vLHdpZHRoPTEwLGhlaWdodD0xMCwiICsKKyAgICAgICAgICAgICAgInNjcm9sbGJhcnM9eWVzLHJlc2l6YWJsZT15ZXMsbW9kYWw9eWVzLGRlcGVuZGFibGU9eWVzIik7CisgICAgRGlhbG9nLl9tb2RhbCA9IGRsZzsKKyAgICBEaWFsb2cuX2FyZ3VtZW50cyA9IGluaXQ7CisKKyAgICAvLyBtYWtlIHVwIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIERpYWxvZyBlbmRzLgorICAgIERpYWxvZy5fcmV0dXJuID0gZnVuY3Rpb24gKHZhbCkgCisgICAgeworICAgICAgaWYgKHZhbCAmJiBhY3Rpb24pIHsKKyAgICAgICAgYWN0aW9uKHZhbCk7CisgICAgICB9CisKKyAgICAgIERpYWxvZy5fbW9kYWwgPSBudWxsOworICAgIH07CisgICAgRGlhbG9nLl9tb2RhbC5mb2N1cygpOworICB9OworICAgICAKKyAgLy8gc2hvdWxkIGJlIGEgZnVuY3Rpb24sIHRoZSByZXR1cm4gaGFuZGxlciBvZiB0aGUgY3VycmVudGx5IG9wZW5lZCBkaWFsb2cuCisgIERpYWxvZy5fcmV0dXJuID0gbnVsbDsKKyAgCisgIC8vIGNvbnN0YW50LCB0aGUgY3VycmVudGx5IG9wZW5lZCBkaWFsb2cKKyAgRGlhbG9nLl9tb2RhbCA9IG51bGw7CisgIAorICAvLyB0aGUgZGlhbG9nIHdpbGwgcmVhZCBpdCdzIGFyZ3MgZnJvbSB0aGlzIHZhcmlhYmxlCisgIERpYWxvZy5fYXJndW1lbnRzID0gbnVsbDsKKyAKK30KKworLy8gRGVwcmVjYXRlZCBtZXRob2QgZm9yIHBhc3NpbmcgY29uZmlnLCB1c2UgYWJvdmUgaW5zdGVhZCEKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitGaWxlUGlja2VyLnByb3RvdHlwZS5iYWNrZW5kX2NvbmZpZyAgICAgID0gbnVsbDsKK0ZpbGVQaWNrZXIucHJvdG90eXBlLmJhY2tlbmRfY29uZmlnX2hhc2ggPSBudWxsOworRmlsZVBpY2tlci5wcm90b3R5cGUuYmFja2VuZF9jb25maWdfc2VjcmV0X2tleV9sb2NhdGlvbiA9ICdYaW5oYTpFeHRlbmRlZEZpbGVNYW5hZ2VyJzsKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZGVmLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9kZWYuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NDViOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZGVmLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZGVmX3NtYWxsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9kZWZfc21hbGwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZmQ0ODQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZGVmX3NtYWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZG9jLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9kb2MuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxOTcyMjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZG9jLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZG9jX3NtYWxsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9kb2Nfc21hbGwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNDNhM2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZG9jX3NtYWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZmxhLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9mbGEuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMzVmMjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZmxhLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZmxhX3NtYWxsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9mbGFfc21hbGwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYjEzZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZmxhX3NtYWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZm9sZGVyLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9mb2xkZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMDNmNTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZm9sZGVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZm9sZGVyX3NtYWxsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9mb2xkZXJfc21hbGwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MGU5OGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZm9sZGVyX3NtYWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZ2lmX3NtYWxsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9naWZfc21hbGwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNzc0NzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZ2lmX3NtYWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZ3ouZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ljb25zL2d6LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTllY2VmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ljb25zL2d6LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvZ3pfc21hbGwuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ljb25zL2d6X3NtYWxsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mzk1NTZlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ljb25zL2d6X3NtYWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvaHRtbC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvaHRtbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ1NDk5OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9odG1sLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvaHRtbF9zbWFsbC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvaHRtbF9zbWFsbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQzMGViZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9odG1sX3NtYWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvanBnX3NtYWxsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9qcGdfc21hbGwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YTRlNzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvanBnX3NtYWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvanMuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ljb25zL2pzLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWI5ODc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ljb25zL2pzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvanNfc21hbGwuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ljb25zL2pzX3NtYWxsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGUxNGZiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ljb25zL2pzX3NtYWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvbW92LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9tb3YuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YjY1OTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvbW92LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvbW92X3NtYWxsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9tb3Zfc21hbGwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMzVkMjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvbW92X3NtYWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvcGRmLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9wZGYuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZTNkNTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvcGRmLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvcGRmX3NtYWxsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9wZGZfc21hbGwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZTAwNTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvcGRmX3NtYWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvcGhwLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9waHAuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZTU2MzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvcGhwLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvcGhwX3NtYWxsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9waHBfc21hbGwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwODY5MWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvcGhwX3NtYWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvcG5nX3NtYWxsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9wbmdfc21hbGwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNjg0YWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvcG5nX3NtYWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvcHB0LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9wcHQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMzkyOTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvcHB0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvcHB0X3NtYWxsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9wcHRfc21hbGwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzN2JiMDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvcHB0X3NtYWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvcmFyLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9yYXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOTU0OWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvcmFyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvcmFyX3NtYWxsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy9yYXJfc21hbGwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZjM4ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvcmFyX3NtYWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvdHh0LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy90eHQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNzZhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvdHh0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvdHh0X3NtYWxsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy90eHRfc21hbGwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNzlmOTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvdHh0X3NtYWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMveGxzLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy94bHMuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5OWUwOTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMveGxzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMveGxzX3NtYWxsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy94bHNfc21hbGwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0N2MwYzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMveGxzX3NtYWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvemlwLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy96aXAuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OWVjZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvemlwLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvemlwX3NtYWxsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pY29ucy96aXBfc21hbGwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOTU1NmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaWNvbnMvemlwX3NtYWxsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1hZ2VzLnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWFnZXMucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4Yzg2ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1hZ2VzLnBocApAQCAtMCwwICsxLDQyMCBAQAorPD9waHAKKy8qKgorICogRXh0ZW5kZWRGaWxlTWFuYWdlciBpbWFnZXMucGhwIGZpbGUuIFNob3dzIGZvbGRlcnMgYW5kIGZpbGVzLgorICogQXV0aG9yczogV2VpIFpodW8sIEFmcnUsIEtyenlzenRvZiBLb3Rvd2ljeiwgUmFpbXVuZCBNZXllcgorICogVmVyc2lvbjogVXBkYXRlZCBvbiAwOC0wMS0yMDA1IGJ5IEFmcnUKKyAqIFZlcnNpb246IFVwZGF0ZWQgb24gMDQtMDctMjAwNiBieSBLcnp5c3p0b2YgS290b3dpY3oKKyAqIFZlcnNpb246IFVwZGF0ZWQgb24gMjktMTAtMjAwNiBieSBSYWltdW5kIE1leWVyCisgKiBWZXJzaW9uOiBVcGRhdGVkIG9uIDIwLTAxLTIwMDggYnkgUmFpbXVuZCBNZXllcgorICogUGFja2FnZTogRXh0ZW5kZWRGaWxlTWFuYWdlciAoRUZNIDEuNCkKKyAqIGh0dHA6Ly93d3cuYWZydXNvZnQuY29tL2h0bWxhcmVhCisgKi8KKworCWlmKGlzc2V0KCRfUkVRVUVTVFsnbW9kZSddKSkgJGluc2VydE1vZGU9JF9SRVFVRVNUWydtb2RlJ107CisJaWYoIWlzc2V0KCRpbnNlcnRNb2RlKSkgJGluc2VydE1vZGU9ImltYWdlIjsKKworcmVxdWlyZV9vbmNlKCdjb25maWcuaW5jLnBocCcpOworcmVxdWlyZV9vbmNlKCdDbGFzc2VzL0V4dGVuZGVkRmlsZU1hbmFnZXIucGhwJyk7CiskYmFja2VuZF91cmxfZW5jID0gaHRtbHNwZWNpYWxjaGFycyggJElNQ29uZmlnWydiYWNrZW5kX3VybCddICk7CisvL2RlZmF1bHQgcGF0aCBpcyAvCiskcmVsYXRpdmUgPSAnLyc7CiskbWFuYWdlciA9IG5ldyBFeHRlbmRlZEZpbGVNYW5hZ2VyKCRJTUNvbmZpZywgJGluc2VydE1vZGUpOworCisvL3Byb2Nlc3MgYW55IGZpbGUgdXBsb2FkcworJHVwbG9hZFN0YXR1cz0kbWFuYWdlci0+cHJvY2Vzc1VwbG9hZHMoKTsKKworLy9wcm9jZXNzIGFueSBmaWxlIHJlbmFtZXMKKyRyZW5hbWVTdGF0dXM9JG1hbmFnZXItPnByb2Nlc3NSZW5hbWVzKCk7CisKKy8vcHJvY2VzcyBwYXN0ZQorJHBhc3RlU3RhdHVzID0gKGlzc2V0KCRfR0VUWydwYXN0ZSddKSkgPyAJJG1hbmFnZXItPnByb2Nlc3NQYXN0ZSgpIDogZmFsc2U7CisKKyRyZWZyZXNoRmlsZSA9ICgkSU1Db25maWdbJ2FsbG93X2RlbGV0ZSddICYmICRtYW5hZ2VyLT5kZWxldGVGaWxlcygpKSA/IHRydWUgOiBmYWxzZTsKKworJHJlZnJlc2hEaXIgPSBmYWxzZTsKKy8vcHJvY2VzcyBhbnkgZGlyZWN0b3J5IGZ1bmN0aW9ucworaWYoKCRJTUNvbmZpZ1snYWxsb3dfZGVsZXRlJ10gJiYgJG1hbmFnZXItPmRlbGV0ZURpcnMoKSkgfHwgJG1hbmFnZXItPnByb2Nlc3NOZXdEaXIoKSB8fCAkcGFzdGVTdGF0dXMgfHwgJHJlbmFtZVN0YXR1cyApCisJJHJlZnJlc2hEaXIgPSB0cnVlOworCisKKyRkaXNrSW5mbz0kbWFuYWdlci0+Z2V0RGlza0luZm8oKTsKKworLy9jaGVjayBmb3IgYW55IHN1Yi1kaXJlY3RvcnkgcmVxdWVzdAorLy9jaGVjayB0aGF0IHRoZSByZXF1ZXN0ZWQgc3ViLWRpcmVjdG9yeSBleGlzdHMKKy8vYW5kIHZhbGlkCitpZihpc3NldCgkX1JFUVVFU1RbJ2RpciddKSkKK3sKKwkkcGF0aCA9IHJhd3VybGRlY29kZSgkX1JFUVVFU1RbJ2RpciddKTsKKwlpZigkbWFuYWdlci0+dmFsaWRSZWxhdGl2ZVBhdGgoJHBhdGgpKQorCQkkcmVsYXRpdmUgPSAkcGF0aDsKK30KKworJGFmcnVWaWV3VHlwZSA9IChpc3NldCgkX1JFUVVFU1RbJ3ZpZXd0eXBlJ10pKSA/ICRhZnJ1Vmlld1R5cGU9JF9SRVFVRVNUWyd2aWV3dHlwZSddIDogJyc7CisKK2lmKCRhZnJ1Vmlld1R5cGUhPSJ0aHVtYnZpZXciICYmICRhZnJ1Vmlld1R5cGUhPSJsaXN0dmlldyIpCit7CisgICRhZnJ1Vmlld1R5cGU9JElNQ29uZmlnWyd2aWV3X3R5cGUnXTsKK30KKy8vZ2V0IHRoZSBsaXN0IG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcworJGxpc3QgPSAkbWFuYWdlci0+Z2V0RmlsZXMoJHJlbGF0aXZlKTsKKworCisvKiA9PT09PT09PT09PT09PT09PSBPVVRQVVQvRFJBVyBGVU5DVElPTlMgPT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAqIERyYXcgZm9sZGVycyBhbmQgZmlsZXMuIENoYW5nZWQgYnkgQWZydQorICovCitmdW5jdGlvbiBkcmF3RGlyc19GaWxlcygkbGlzdCwgJiRtYW5hZ2VyKSAKK3sKKwlnbG9iYWwgJHJlbGF0aXZlLCAkYWZydVZpZXdUeXBlLCAkSU1Db25maWcsICRpbnNlcnRNb2RlLCRiYWNrZW5kX3VybF9lbmM7CisKKyAgICBzd2l0Y2ggKCRhZnJ1Vmlld1R5cGUpIHsKKyAgICAgICAgY2FzZSAnbGlzdHZpZXcnOgorICAgIAkJJG1heE5hbWVMZW5ndGggPSAzMDsKKyAgICAJCT8+CisgICAgICAgICAgICA8dGFibGUgY2xhc3M9Imxpc3R2aWV3IiBpZD0ibGlzdHZpZXciPgorICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgPHRyPjx0aD5OYW1lPC90aD48dGg+U2l6ZTwvdGg+PHRoPkltYWdlIFNpemU8L3RoPjx0aD5EYXRlIE1vZGlmaWVkPC90aD48dGg+Jm5ic3A7PC90aD48L3RyPjwvdGhlYWQ+CisgICAgICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICA8P3BocAorICAgIAkJLy8gc3RhcnQgb2YgZm9yZWFjaCBmb3IgZHJhdyBsaXN0dmlldyBmb2xkZXJzIC4KKyAgICAJCWZvcmVhY2goJGxpc3RbMF0gYXMgJHBhdGggPT4gJGRpcikKKyAgICAJCXsgPz4KKyAgICAJCQk8dHI+CisgICAgCQkJPHRkPjxzcGFuIHN0eWxlPSJ3aWR0aDoyMHB4OyI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/Pmljb25zL2ZvbGRlcl9zbWFsbC5naWYiIGFsdD0iIiAvPjwvc3Bhbj4KKwkJCQk8YSBocmVmPSI8P3BocCBwcmludCAkYmFja2VuZF91cmxfZW5jOyA/Pl9fZnVuY3Rpb249aW1hZ2VzJmFtcDttb2RlPTw/cGhwIGVjaG8gJGluc2VydE1vZGU7Pz4mYW1wO2Rpcj08P3BocCBlY2hvIHJhd3VybGVuY29kZSgkcGF0aCk7ID8+JmFtcDt2aWV3dHlwZT08P3BocCBlY2hvICRhZnJ1Vmlld1R5cGU7ID8+IiBvbmNsaWNrPSJ1cGRhdGVEaXIoJzw/cGhwIGVjaG8gJHBhdGg7ID8+JykiIHRpdGxlPSI8P3BocCBlY2hvICRkaXJbJ2VudHJ5J107ID8+Ij4KKyAgICAJCQk8P3BocAorICAgIAkJCWlmKHN0cmxlbigkZGlyWydlbnRyeSddKT4kbWF4TmFtZUxlbmd0aCkgZWNobyBzdWJzdHIoJGRpclsnZW50cnknXSwwLCRtYXhOYW1lTGVuZ3RoKS4iLi4uIjsgZWxzZSBlY2hvICRkaXJbJ2VudHJ5J107CisgICAgCQkJPz4KKyAgICAJCQk8L2E+PC90ZD4KKyAgICAJCQk8dGQgY29sc3Bhbj0iMiIgPkZvbGRlcjwvdGQ+CisKKyAgICAJCQk8dGQgPjw/cGhwIGVjaG8gZGF0ZSgkSU1Db25maWdbJ2RhdGVfZm9ybWF0J10sJGRpclsnc3RhdCddWydtdGltZSddKTsgPz48L3RkPgorCisgICAgCQkJPHRkIGNsYXNzPSJhY3Rpb25zIiA+CisgICAgICAgICAgICA8P3BocAorICAgICAgICAgICAgICBpZigkSU1Db25maWdbJ2FsbG93X2RlbGV0ZSddKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgPz4KKyAgICAJCQkJPGEgaHJlZj0iPD9waHAgcHJpbnQgJGJhY2tlbmRfdXJsX2VuYzsgPz5fX2Z1bmN0aW9uPWltYWdlcyZhbXA7bW9kZT08P3BocCBlY2hvICRpbnNlcnRNb2RlOz8+JmFtcDtkaXI9PD9waHAgZWNobyAkcmVsYXRpdmU7ID8+JmFtcDtkZWxkPTw/cGhwIGVjaG8gcmF3dXJsZW5jb2RlKCRwYXRoKTsgPz4mYW1wO3ZpZXd0eXBlPTw/cGhwIGVjaG8gJGFmcnVWaWV3VHlwZTsgPz4iIHRpdGxlPSJUcmFzaCIgb25jbGljaz0icmV0dXJuIGNvbmZpcm1EZWxldGVEaXIoJzw/cGhwIGVjaG8gJGRpclsnZW50cnknXTsgPz4nLCA8P3BocCBlY2hvICRkaXJbJ2NvdW50J107ID8+KTsiIHN0eWxlPSJib3JkZXI6MHB4OyI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9lZGl0X3RyYXNoLmdpZiIgaGVpZ2h0PSIxNSIgd2lkdGg9IjE1IiBhbHQ9IlRyYXNoIiBib3JkZXI9IjAiIC8+PC9hPgorICAgICAgICAgICAgICAgIDw/cGhwCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgID8+CisJCQkgICAgCTw/cGhwIGlmICgkSU1Db25maWdbJ2FsbG93X3JlbmFtZSddKSB7ID8+CisJCQkgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJSZW5hbWUiIG9uY2xpY2s9InJlbmFtZURpcignPD9waHAgZWNobyByYXd1cmxlbmNvZGUoJGRpclsnZW50cnknXSk7Pz4nKTsgcmV0dXJuIGZhbHNlOyI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9lZGl0X3JlbmFtZS5naWYiIGhlaWdodD0iMTUiIHdpZHRoPSIxNSIgYWx0PSJSZW5hbWUiIGJvcmRlcj0iMCIgLz48L2E+CisJCQkgICAgICAgIDw/cGhwIH0gID8+CisgICAgCQkJCTw/cGhwIGlmICgkSU1Db25maWdbJ2FsbG93X2N1dF9jb3B5X3Bhc3RlJ10pIHsgPz4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IkN1dCIgb25jbGljaz0iY29weURpcignPD9waHAgZWNobyByYXd1cmxlbmNvZGUoJGRpclsnZW50cnknXSk7Pz4nLCdtb3ZlJyk7IHJldHVybiBmYWxzZTsiPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvZWRpdF9jdXQuZ2lmIiBoZWlnaHQ9IjE1IiB3aWR0aD0iMTUiIGFsdD0iQ3V0IiAvPjwvYT4KKyAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJDb3B5IiBvbmNsaWNrPSJjb3B5RGlyKCc8P3BocCBlY2hvIHJhd3VybGVuY29kZSgkZGlyWydlbnRyeSddKTs/PicsJ2NvcHknKTsgcmV0dXJuIGZhbHNlOyI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9lZGl0X2NvcHkuZ2lmIiBoZWlnaHQ9IjE1IiB3aWR0aD0iMTUiIGFsdD0iQ29weSIgLz48L2E+CisgICAgIAkJICAgCQk8P3BocCB9ICA/PgorICAgIAkJCTwvdGQ+CisgICAgCQkJPC90cj4KKyAgICAJCSAgPD9waHAKKyAgICAJCX0gLy8gZW5kIG9mIGZvcmVhY2ggZm9yIGRyYXcgbGlzdHZpZXcgZm9sZGVycyAuCisKKyAgICAJCWNsZWFyc3RhdGNhY2hlKCk7CisKKyAgICAJCS8vIHN0YXJ0IG9mIGZvcmVhY2ggZm9yIGRyYXcgbGlzdHZpZXcgZmlsZXMgLgorICAgIAkJZm9yZWFjaCgkbGlzdFsxXSBhcyAkZW50cnkgPT4gJGZpbGUpCisgICAgCQl7CisgICAgCQkJPz4KKyAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgIAkJICA8dGQ+CisJCQkJCTxhIGhyZWY9IiMiIGNsYXNzPSJ0aHVtYiIgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7IiBvbmRibGNsaWNrPSJ0aGlzLm9uY2xpY2soKTt3aW5kb3cudG9wLm9uT0soKTsiIG9uY2xpY2s9InNlbGVjdEltYWdlKCc8P3BocCBlY2hvICRmaWxlWydyZWxhdGl2ZSddOz8+JywgJzw/cGhwIGVjaG8gcHJlZ19yZXBsYWNlKCcjXC4uezMsNH0kIycsICcnLCAkZW50cnkpOyA/PicsIDw/cGhwIGVjaG8gJGZpbGVbJ2ltYWdlJ11bMF07Pz4sIDw/cGhwIGVjaG8gJGZpbGVbJ2ltYWdlJ11bMV07ID8+KTtyZXR1cm4gZmFsc2U7IiB0aXRsZT0iPD9waHAgZWNobyAkZW50cnk7ID8+IC0gPD9waHAgZWNobyBGaWxlczo6Zm9ybWF0U2l6ZSgkZmlsZVsnc3RhdCddWydzaXplJ10pOyA/PiIgPD9waHAgaWYgKCRpbnNlcnRNb2RlID09ICdpbWFnZScpIHsgPz4gb25tb3VzZW92ZXI9InNob3dQcmV2aWV3KCc8P3BocCBlY2hvICRmaWxlWydyZWxhdGl2ZSddOz8+JykiIG9ubW91c2VvdXQ9InNob3dQcmV2aWV3KHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZfdXJsJykudmFsdWUpIiA8P3BocCB9ID8+ID4KKyAgICAgICAgICA8c3BhbiBzdHlsZT0id2lkdGg6MjBweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ij48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOyBpZihpc19maWxlKCdpY29ucy8nLiRmaWxlWydleHQnXS4nX3NtYWxsLmdpZicpKSBlY2hvICJpY29ucy8iLiRmaWxlWydleHQnXS4iX3NtYWxsLmdpZiI7IGVsc2UgZWNobyAkSU1Db25maWdbJ2RlZmF1bHRfbGlzdGljb24nXTsgPz4iIGFsdD0iIiBzdHlsZT0iYm9yZGVyOm5vbmU7IiAvPjwvc3Bhbj48c3BhbiBzdHlsZT0idmVydGljYWwtYWxpZ246bWlkZGxlOyI+CisgICAgICAgIAkJCTw/cGhwCisgICAgICAgIAkJCWlmKHN0cmxlbigkZW50cnkpPiRtYXhOYW1lTGVuZ3RoKSBlY2hvIHN1YnN0cigkZW50cnksMCwkbWF4TmFtZUxlbmd0aCkuIi4uLiI7IGVsc2UgZWNobyAkZW50cnk7CisgICAgICAgIAkJCT8+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICA8dGQ+PD9waHAgZWNobyBGaWxlczo6Zm9ybWF0U2l6ZSgkZmlsZVsnc3RhdCddWydzaXplJ10pOyA/PjwvdGQ+CisgICAgICAgICAgICAgICAgICA8dGQ+PD9waHAgaWYoJGZpbGVbJ2ltYWdlJ11bMF0gPiAwKXsgZWNobyAkZmlsZVsnaW1hZ2UnXVswXS4neCcuJGZpbGVbJ2ltYWdlJ11bMV07IH0gPz48L3RkPgorICAgIAkJCSAgPHRkID48P3BocCBlY2hvIGRhdGUoJElNQ29uZmlnWydkYXRlX2Zvcm1hdCddLCRmaWxlWydzdGF0J11bJ210aW1lJ10pOyA/PjwvdGQ+CisgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImFjdGlvbnMiPgorICAgICAgICAgICAgICAgICAgICA8P3BocCBpZigkSU1Db25maWdbJ2ltZ19saWJyYXJ5J10gJiYgJElNQ29uZmlnWydhbGxvd19lZGl0X2ltYWdlJ10gJiYgJGZpbGVbJ2ltYWdlJ11bMF0gPiAwKSB7ID8+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgdGl0bGU9IkVkaXQiIG9uY2xpY2s9ImVkaXRJbWFnZSgnPD9waHAgZWNobyByYXd1cmxlbmNvZGUoJGZpbGVbJ3JlbGF0aXZlJ10pOz8+Jyk7Ij48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2VkaXRfcGVuY2lsLmdpZiIgaGVpZ2h0PSIxNSIgd2lkdGg9IjE1IiBhbHQ9IkVkaXQiIGJvcmRlcj0iMCIgLz48L2E+CisgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gID8+ICAKKyAgICAgICAgICAgICA8P3BocAorICAgICAgICAgICAgICBpZigkSU1Db25maWdbJ2FsbG93X2RlbGV0ZSddKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgPz4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgcHJpbnQgJGJhY2tlbmRfdXJsX2VuYzsgPz5fX2Z1bmN0aW9uPWltYWdlcyZhbXA7ZGlyPTw/cGhwIGVjaG8gJHJlbGF0aXZlOyA/PiZhbXA7ZGVsZj08P3BocCBlY2hvIHJhd3VybGVuY29kZSgkZmlsZVsncmVsYXRpdmUnXSk7Pz4mYW1wO21vZGU9PD9waHAgZWNobyAkaW5zZXJ0TW9kZTs/PiZhbXA7dmlld3R5cGU9PD9waHAgZWNobyAkYWZydVZpZXdUeXBlOyA/PiIgdGl0bGU9IlRyYXNoIiBvbmNsaWNrPSJyZXR1cm4gY29uZmlybURlbGV0ZUZpbGUoJzw/cGhwIGVjaG8gJGVudHJ5OyA/PicpOyI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9lZGl0X3RyYXNoLmdpZiIgaGVpZ2h0PSIxNSIgd2lkdGg9IjE1IiBhbHQ9IlRyYXNoIiBib3JkZXI9IjAiIC8+PC9hPgorICAgICAgICAgICAgICAgICA8P3BocAorICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgID8+CisgICAgICAgIAkJCTw/cGhwIGlmICgkSU1Db25maWdbJ2FsbG93X3JlbmFtZSddKSB7ID8+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJSZW5hbWUiIG9uY2xpY2s9InJlbmFtZUZpbGUoJzw/cGhwIGVjaG8gcmF3dXJsZW5jb2RlKCRmaWxlWydyZWxhdGl2ZSddKTs/PicpOyByZXR1cm4gZmFsc2U7Ij48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2VkaXRfcmVuYW1lLmdpZiIgaGVpZ2h0PSIxNSIgd2lkdGg9IjE1IiBhbHQ9IlJlbmFtZSIgYm9yZGVyPSIwIiAvPjwvYT4KKyAgICAgICAgICAgICAgICAgICAgPD9waHAgfSAgPz4KKyAgICAgICAgCQkJPD9waHAgaWYgKCRJTUNvbmZpZ1snYWxsb3dfY3V0X2NvcHlfcGFzdGUnXSkgeyA/PgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iQ3V0IiBvbmNsaWNrPSJjb3B5RmlsZSgnPD9waHAgZWNobyByYXd1cmxlbmNvZGUoJGVudHJ5KTs/PicsJ21vdmUnKTsgcmV0dXJuIGZhbHNlOyI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9lZGl0X2N1dC5naWYiIGhlaWdodD0iMTUiIHdpZHRoPSIxNSIgYWx0PSJDdXQiIC8+PC9hPgorICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IkNvcHkiIG9uY2xpY2s9ImNvcHlGaWxlKCc8P3BocCBlY2hvIHJhd3VybGVuY29kZSgkZW50cnkpOz8+JywnY29weScpOyByZXR1cm4gZmFsc2U7Ij48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2VkaXRfY29weS5naWYiIGhlaWdodD0iMTUiIHdpZHRoPSIxNSIgYWx0PSJDb3B5IiAvPjwvYT4KKyAgICAgICAgICAgICAgICAgICAgPD9waHAgfSAgPz4KKyAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgPC90cj4KKyAgICAJCSAgPD9waHAKKyAgICAJCX0vL2VuZCBvZiBmb3JlYWNoIG9mIGRyYXcgbGlzdHZpZXcgZmlsZXMKKyAgICAgICAgICAgID8+CisgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIDw/cGhwCisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd0aHVtYnZpZXcnOiAvLyB0aHVtYnZpZXcgaXMgZGVmYXVsdAorICAgICAgICBkZWZhdWx0OgorICAgIAkJJG1heEZpbGVOYW1lTGVuZ3RoPTE2OworICAgIAkJJG1heEZvbGRlck5hbWVMZW5ndGg9MTY7CisgICAgCQkvLyBzdGFydCBvZiBmb3JlYWNoIGZvciBkcmF3IHRodW1idmlldyBmb2xkZXJzLgorICAgIAkJZm9yZWFjaCgkbGlzdFswXSBhcyAkcGF0aCA9PiAkZGlyKQorICAgIAkJeyA/PgorICAgIDxkaXYgY2xhc3M9ImRpcl9ob2xkZXIiPgorICAgICAgPGEgY2xhc3M9ImRpciIgaHJlZj0iPD9waHAgcHJpbnQgJGJhY2tlbmRfdXJsX2VuYzs/Pl9fZnVuY3Rpb249aW1hZ2VzJmFtcDttb2RlPTw/cGhwIGVjaG8gJGluc2VydE1vZGU7Pz4mYW1wO2Rpcj08P3BocCBlY2hvIHJhd3VybGVuY29kZSgkcGF0aCk7ID8+JmFtcDt2aWV3dHlwZT08P3BocCBlY2hvICRhZnJ1Vmlld1R5cGU7ID8+IiBvbmNsaWNrPSJ1cGRhdGVEaXIoJzw/cGhwIGVjaG8gJHBhdGg7ID8+JykiIHRpdGxlPSI8P3BocCBlY2hvICRkaXJbJ2VudHJ5J107ID8+Ij48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2ZvbGRlci5naWYiIGhlaWdodD0iODAiIHdpZHRoPSI4MCIgYWx0PSI8P3BocCBlY2hvICRkaXJbJ2VudHJ5J107ID8+IiAvPjwvYT4KKworICAgICAgPGRpdiBjbGFzcz0iZmlsZU5hbWUiPgorICAgICAgPD9waHAgaWYoc3RybGVuKCRkaXJbJ2VudHJ5J10pID4gJG1heEZvbGRlck5hbWVMZW5ndGgpCisgICAgICAgICAgICAgICAgZWNobyBzdWJzdHIoJGRpclsnZW50cnknXSwgMCwgJG1heEZvbGRlck5hbWVMZW5ndGgpIC4gIi4uLiI7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlY2hvICRkaXJbJ2VudHJ5J107ID8+CisgICAgICA8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9ImVkaXQiPgorICAgICAgPD9waHAKKyAgICAgICAgaWYoJElNQ29uZmlnWydhbGxvd19kZWxldGUnXSkKKyAgICAgICAgeworICAgICAgICAgID8+CisgICAgICAgIDxhIGhyZWY9Ijw/cGhwIHByaW50ICRiYWNrZW5kX3VybF9lbmM7Pz5fX2Z1bmN0aW9uPWltYWdlcyZhbXA7bW9kZT08P3BocCBlY2hvICRpbnNlcnRNb2RlOz8+JmFtcDtkaXI9PD9waHAgZWNobyAkcmVsYXRpdmU7ID8+JmFtcDtkZWxkPTw/cGhwIGVjaG8gcmF3dXJsZW5jb2RlKCRwYXRoKTsgPz4mYW1wO3ZpZXd0eXBlPTw/cGhwIGVjaG8gJGFmcnVWaWV3VHlwZTsgPz4iIHRpdGxlPSJUcmFzaCIgb25jbGljaz0icmV0dXJuIGNvbmZpcm1EZWxldGVEaXIoJzw/cGhwIGVjaG8gJGRpclsnZW50cnknXTsgPz4nLCA8P3BocCBlY2hvICRkaXJbJ2NvdW50J107ID8+KTsiPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvZWRpdF90cmFzaC5naWYiIGhlaWdodD0iMTUiIHdpZHRoPSIxNSIgYWx0PSJUcmFzaCIgLz48L2E+CisgICAgICAgICAgPD9waHAKKyAgICAgICAgfQorICAgICAgPz4KKyAgICAJPD9waHAgaWYgKCRJTUNvbmZpZ1snYWxsb3dfcmVuYW1lJ10pIHsgPz4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlJlbmFtZSIgb25jbGljaz0icmVuYW1lRGlyKCc8P3BocCBlY2hvIHJhd3VybGVuY29kZSgkZGlyWydlbnRyeSddKTs/PicpOyByZXR1cm4gZmFsc2U7Ij48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2VkaXRfcmVuYW1lLmdpZiIgaGVpZ2h0PSIxNSIgd2lkdGg9IjE1IiBhbHQ9IlJlbmFtZSIgYm9yZGVyPSIwIiAvPjwvYT4KKyAgICAgICAgPD9waHAgfSAgPz4KKyAgICAgICAgPD9waHAgaWYgKCRJTUNvbmZpZ1snYWxsb3dfY3V0X2NvcHlfcGFzdGUnXSkgeyA/PgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iQ3V0IiBvbmNsaWNrPSJjb3B5RGlyKCc8P3BocCBlY2hvIHJhd3VybGVuY29kZSgkZGlyWydlbnRyeSddKTs/PicsJ21vdmUnKTsgcmV0dXJuIGZhbHNlOyI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9lZGl0X2N1dC5naWYiIGhlaWdodD0iMTUiIHdpZHRoPSIxNSIgYWx0PSJDdXQiIC8+PC9hPgorICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IkNvcHkiIG9uY2xpY2s9ImNvcHlEaXIoJzw/cGhwIGVjaG8gcmF3dXJsZW5jb2RlKCRkaXJbJ2VudHJ5J10pOz8+JywnY29weScpOyByZXR1cm4gZmFsc2U7Ij48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2VkaXRfY29weS5naWYiIGhlaWdodD0iMTUiIHdpZHRoPSIxNSIgYWx0PSJDb3B5IiAvPjwvYT4KKyAgICAgICAgPD9waHAgfSAgPz4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgIAkJICA8P3BocAorICAgIAkJfSAvLyBlbmQgb2YgZm9yZWFjaCBmb3IgZHJhdyB0aHVtYnZpZXcgZm9sZGVycy4KKworCisgICAgCQkvLyBzdGFydCBvZiBmb3JlYWNoIGZvciBkcmF3IHRodW1idmlldyBmaWxlcy4KKyAgICAJCWZvcmVhY2goJGxpc3RbMV0gYXMgJGVudHJ5ID0+ICRmaWxlKQorICAgIAkJeworICAgIAkJCSRhZnJ1aW1nZGltZW5zaW9ucz0kbWFuYWdlci0+Y2hlY2tJbWFnZVNpemUoJGZpbGVbJ3JlbGF0aXZlJ10pOworICAgIAkJCSR0aGlzRmlsZU5hbWVMZW5ndGggPSAkbWF4RmlsZU5hbWVMZW5ndGg7CisgICAgCQkJPz4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aHVtYl9ob2xkZXIiIGlkPSJob2xkZXJfPD9waHAgZWNobyBhc2MyaGV4KCRlbnRyeSkgPz4iPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9InRodW1iIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyIgb25kYmxjbGljaz0idGhpcy5vbmNsaWNrKCk7d2luZG93LnRvcC5vbk9LKCk7IiBvbmNsaWNrPSJzZWxlY3RJbWFnZSgnPD9waHAgZWNobyAkZmlsZVsncmVsYXRpdmUnXTs/PicsICc8P3BocCBlY2hvIHByZWdfcmVwbGFjZSgnI1wuLnszLDR9JCMnLCAnJywgJGVudHJ5KTsgPz4nLCA8P3BocCBlY2hvICRmaWxlWydpbWFnZSddWzBdOz8+LCA8P3BocCBlY2hvICRmaWxlWydpbWFnZSddWzFdOyA/Pik7cmV0dXJuIGZhbHNlOyIgdGl0bGU9Ijw/cGhwIGVjaG8gJGVudHJ5OyA/PiAtIDw/cGhwIGVjaG8gRmlsZXM6OmZvcm1hdFNpemUoJGZpbGVbJ3N0YXQnXVsnc2l6ZSddKTsgPz4iPgorICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iPD9waHAgcHJpbnQgJG1hbmFnZXItPmdldFRodW1ibmFpbCgkZmlsZVsncmVsYXRpdmUnXSk7ID8+IiBhbHQ9Ijw/cGhwIGVjaG8gJGVudHJ5OyA/PiAtIDw/cGhwIGVjaG8gRmlsZXM6OmZvcm1hdFNpemUoJGZpbGVbJ3N0YXQnXVsnc2l6ZSddKTsgPz4iIC8+CisgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZU5hbWUiPgorICAgICAgICAgICAgICAgICAgIDw/cGhwCisgICAgICAgICAgICAJCQlpZihzdHJsZW4oJGVudHJ5KSA+ICR0aGlzRmlsZU5hbWVMZW5ndGggKyAzKSBlY2hvIHN0cnRvbG93ZXIoc3Vic3RyKCRlbnRyeSwwLCR0aGlzRmlsZU5hbWVMZW5ndGgpKS4iLi4uIjsgZWxzZSBlY2hvICRlbnRyeTsKKyAgICAgICAgICAgIAkJPz4KKyAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVkaXQiPgorICAgICAgICAgICAgICAgICAgICA8P3BocCBpZigkSU1Db25maWdbJ2ltZ19saWJyYXJ5J10gJiYgJElNQ29uZmlnWydhbGxvd19lZGl0X2ltYWdlJ10gJiYgJGZpbGVbJ2ltYWdlJ11bMF0gPiAwICkKKyAgICAgICAgICAgICAgICAgICAgeyA/PgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OjsiIHRpdGxlPSJFZGl0IiBvbmNsaWNrPSJlZGl0SW1hZ2UoJzw/cGhwIGVjaG8gcmF3dXJsZW5jb2RlKCRmaWxlWydyZWxhdGl2ZSddKTs/PicpOyI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9lZGl0X3BlbmNpbC5naWYiIGhlaWdodD0iMTUiIHdpZHRoPSIxNSIgYWx0PSJFZGl0IiAvPjwvYT4KKyAgICAgICAgICAgIAkJPD9waHAgJHRoaXNGaWxlTmFtZUxlbmd0aCAtPSAzOyB9ID8+CisgICAgICAgICAgICAgICAgPD9waHAKKyAgICAgICAgICAgICAgICAgIGlmKCRJTUNvbmZpZ1snYWxsb3dfZGVsZXRlJ10pCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgID8+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIHByaW50ICRiYWNrZW5kX3VybF9lbmM7ID8+X19mdW5jdGlvbj1pbWFnZXMmYW1wO21vZGU9PD9waHAgZWNobyAkaW5zZXJ0TW9kZTs/PiZhbXA7ZGlyPTw/cGhwIGVjaG8gJHJlbGF0aXZlOyA/PiZhbXA7ZGVsZj08P3BocCBlY2hvIHJhd3VybGVuY29kZSgkZmlsZVsncmVsYXRpdmUnXSk7Pz4mYW1wO3ZpZXd0eXBlPTw/cGhwIGVjaG8gJGFmcnVWaWV3VHlwZTsgPz4iIHRpdGxlPSJUcmFzaCIgb25jbGljaz0icmV0dXJuIGNvbmZpcm1EZWxldGVGaWxlKCc8P3BocCBlY2hvICRlbnRyeTsgPz4nKTsiPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvZWRpdF90cmFzaC5naWYiIGhlaWdodD0iMTUiIHdpZHRoPSIxNSIgYWx0PSJUcmFzaCIgLz48L2E+CisgICAgICAgICAgICAgICAgICAgIDw/cGhwCisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgPz4KKyAgICAgICAgCQkJPD9waHAgaWYgKCRJTUNvbmZpZ1snYWxsb3dfcmVuYW1lJ10pIHsgPz4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlJlbmFtZSIgb25jbGljaz0icmVuYW1lRmlsZSgnPD9waHAgZWNobyByYXd1cmxlbmNvZGUoJGZpbGVbJ3JlbGF0aXZlJ10pOz8+Jyk7IHJldHVybiBmYWxzZTsiPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvZWRpdF9yZW5hbWUuZ2lmIiBoZWlnaHQ9IjE1IiB3aWR0aD0iMTUiIGFsdD0iUmVuYW1lIiAvPjwvYT4KKyAgICAgICAgICAgICAgICAgICAgPD9waHAgJHRoaXNGaWxlTmFtZUxlbmd0aCAtPSAzOyB9ICA/PgorICAgICAgICAgICAgICAgIAk8P3BocCBpZiAoJElNQ29uZmlnWydhbGxvd19jdXRfY29weV9wYXN0ZSddKSB7ID8+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJDdXQiIG9uY2xpY2s9ImNvcHlGaWxlKCc8P3BocCBlY2hvIHJhd3VybGVuY29kZSgkZW50cnkpOz8+JywnbW92ZScpOyByZXR1cm4gZmFsc2U7Ij48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2VkaXRfY3V0LmdpZiIgaGVpZ2h0PSIxNSIgd2lkdGg9IjE1IiBhbHQ9IkN1dCIgLz48L2E+CisgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iQ29weSIgb25jbGljaz0iY29weUZpbGUoJzw/cGhwIGVjaG8gcmF3dXJsZW5jb2RlKCRlbnRyeSk7Pz4nLCdjb3B5Jyk7IHJldHVybiBmYWxzZTsiPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvZWRpdF9jb3B5LmdpZiIgaGVpZ2h0PSIxNSIgd2lkdGg9IjE1IiBhbHQ9IkNvcHkiIC8+PC9hPgorICAgICAgICAgICAgICAgICAgICA8P3BocCAkdGhpc0ZpbGVOYW1lTGVuZ3RoIC09IDY7IH0gID8+CisgICAgICAgICAgICAJCQorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgCQkgIDw/cGhwCisgICAgCQl9Ly9lbmQgb2YgZm9yZWFjaCBvZiBkcmF3IHRodW1idmlldyBmaWxlcworCisgICAgfQorfS8vZW5kIG9mIGZ1bmN0aW9uIGRyYXdEaXJzX0ZpbGVzCisKKworLyoqCisgKiBObyBkaXJlY3RvcmllcyBhbmQgbm8gZmlsZXMuCisgKi8KK2Z1bmN0aW9uIGRyYXdOb1Jlc3VsdHMoKSAKK3sKKz8+Cis8ZGl2IGNsYXNzPSJub1Jlc3VsdCI+Tm8gRmlsZXMgRm91bmQ8L2Rpdj4KKzw/cGhwCit9CisKKy8qKgorICogTm8gZGlyZWN0b3JpZXMgYW5kIG5vIGZpbGVzLgorICovCitmdW5jdGlvbiBkcmF3RXJyb3JCYXNlKCYkbWFuYWdlcikgCit7Cis/PgorPGRpdiBjbGFzcz0iZXJyb3IiPjxzcGFuPkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6PC9zcGFuPiA8P3BocCBlY2hvICRtYW5hZ2VyLT5nZXRJbWFnZXNEaXIoKTsgPz48L2Rpdj4KKzw/cGhwCit9CisKKy8qKgorICogVXRpbGl0eSB0byBjb252ZXJ0IGFzY2lpIHN0cmluZyB0byBoZXgKKyAqLworZnVuY3Rpb24gYXNjMmhleCAoJHRlbXApCit7CisgICRkYXRhID0gJyc7CisgICRsZW4gPSBzdHJsZW4oJHRlbXApOworICBmb3IgKCRpPTA7ICRpPCRsZW47ICRpKyspICRkYXRhLj1zcHJpbnRmKCIlMDJ4IixvcmQoc3Vic3RyKCR0ZW1wLCRpLDEpKSk7CisgIHJldHVybiAkZGF0YTsKK30KKworPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCisgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+CisJPHRpdGxlPkZpbGUgTGlzdDwvdGl0bGU+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgorCTxsaW5rIGhyZWY9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmFzc2V0cy9pbWFnZWxpc3QuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+YXNzZXRzL2RpYWxvZy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisvKjwhW0NEQVRBWyovCisKKyAgICB2YXIgX2JhY2tlbmRfdXJsID0gIjw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFja2VuZF91cmwnXTsgPz4iOworCisJaWYod2luZG93LnRvcCkKKwkJWGluaGEgPSB3aW5kb3cudG9wLlhpbmhhOworCisJZnVuY3Rpb24gaGlkZU1lc3NhZ2UoKQorCXsKKwkJdmFyIHRvcERvYyA9IHdpbmRvdy50b3AuZG9jdW1lbnQ7CisJCXZhciBtZXNzYWdlcyA9IHRvcERvYy5nZXRFbGVtZW50QnlJZCgnbWVzc2FnZXMnKTsKKwkJaWYgKG1lc3NhZ2VzKQorCQl7CisJCQltZXNzYWdlcy5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworCQl9CisJCS8vd2luZG93LnBhcmVudC5yZXNpemUoKTsKKwl9CisKKwlpbml0ID0gZnVuY3Rpb24oKQorCXsKKyAgICAgICAgX19kbGdfdHJhbnNsYXRlKCdFeHRlbmRlZEZpbGVNYW5hZ2VyJyk7CisgICAgICAgIAorCQloaWRlTWVzc2FnZSgpOworCQk8P3BocCBpZiAoJGFmcnVWaWV3VHlwZSA9PSAnbGlzdHZpZXcnKQorCQkJcHJpbnQgInZhciBkID0gbmV3IGRyYWdUYWJsZUNvbHMoJ2xpc3R2aWV3Jyk7IjsKKwkJCisJCWlmKGlzc2V0KCR1cGxvYWRTdGF0dXMpICYmICFpc19udW1lcmljKCR1cGxvYWRTdGF0dXMpICYmICFpc19ib29sKCR1cGxvYWRTdGF0dXMpKQorCQllY2hvICJhbGVydChpMThuKCckdXBsb2FkU3RhdHVzJykpOyI7CisJCWVsc2UgaWYoaXNzZXQoJHVwbG9hZFN0YXR1cykgJiYgJHVwbG9hZFN0YXR1cz09ZmFsc2UpCisJCWVjaG8gJ2FsZXJ0KGkxOG4oIlVuYWJsZSB0byB1cGxvYWQgRmlsZS4gXG5FaXRoZXIgTWF4aW11bSBmaWxlIHNpemUgWyRtYXhfc2l6ZT0nLigkaW5zZXJ0TW9kZSA9PSAnaW1hZ2UnID8gJElNQ29uZmlnWydtYXhfZmlsZXNpemVfa2JfaW1hZ2UnXSA6ICRJTUNvbmZpZ1snbWF4X2ZpbGVzaXplX2tiX2xpbmsnXSApLickIEtCXSBleGNlZWRlZCBvclxuRm9sZGVyIGRvZXNuXCd0IGhhdmUgd3JpdGUgcGVybWlzc2lvbi4iKSk7JzsKKwkJPz4KKworCQk8P3BocAorCQlpZihpc3NldCgkcmVuYW1lU3RhdHVzKSAmJiAhaXNfbnVtZXJpYygkcmVuYW1lU3RhdHVzKSAmJiAhaXNfYm9vbCgkcmVuYW1lU3RhdHVzKSkKKwkJZWNobyAnYWxlcnQoaTE4bigiJy4kcmVuYW1lU3RhdHVzLiciKSk7JzsKKwkJZWxzZSBpZihpc3NldCgkcmVuYW1lU3RhdHVzKSAmJiAkcmVuYW1lU3RhdHVzPT09ZmFsc2UpCisJCWVjaG8gJ2FsZXJ0KGkxOG4oIlVuYWJsZSB0byByZW5hbWUgZmlsZS4gRmlsZSBvZiB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzIG9yXG5mb2xkZXIgZG9lc25cJ3QgaGF2ZSB3cml0ZSBwZXJtaXNzaW9uLiIpKTsnOworCQk/PgorCQkKKwkJPD9waHAKKwkJaWYgKGlzc2V0KCRwYXN0ZVN0YXR1cykgJiYgaXNfbnVtZXJpYygkcGFzdGVTdGF0dXMpKQorCQl7CisJCQlzd2l0Y2ggKCRwYXN0ZVN0YXR1cykKKwkJCXsKKwkJCQljYXNlIDEwMCA6CisJCQkJCSRwYXN0ZVN0YXR1cyA9ICdTb3VyY2UgZmlsZS9mb2xkZXIgbm90IGZvdW5kLic7CisJCQkJYnJlYWs7CisJCQkJY2FzZSAxMDEgOgorCQkJCQkkcGFzdGVTdGF0dXMgPSAnQ29weSBmYWlsZWQuXG5NYXliZSBmb2xkZXIgZG9lc25cJ3QgaGF2ZSB3cml0ZSBwZXJtaXNzaW9uLic7CisJCQkJYnJlYWs7CisJCQkJY2FzZSAxMDIgOgorCQkJCQkkcGFzdGVTdGF0dXMgPSAnQ291bGQgbm90IGNyZWF0ZSBkZXN0aW5hdGlvbiBmb2xkZXIuJzsKKwkJCQlicmVhazsKKwkJCQljYXNlIDEwMyA6CisJCQkJCSRwYXN0ZVN0YXR1cyA9ICdGaWxlIHBhc3RlZCBPSy4nOworCQkJCWJyZWFrOworCQkJCWNhc2UgMTA0IDoKKwkJCQkJJHBhc3RlU3RhdHVzID0gJ0Rlc3RpbmF0aW9uIGZpbGUvZm9sZGVyIGFscmVhZHkgZXhpc3RzLic7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYoaXNzZXQoJHBhc3RlU3RhdHVzKSAmJiAhaXNfYm9vbCgkcGFzdGVTdGF0dXMpKQorCQl7CisJCQllY2hvICdhbGVydChpMThuKCInLiRwYXN0ZVN0YXR1cy4nIikpOyc7CisJCX0KKwkJPz4KKworCQl2YXIgdG9wRG9jID0gd2luZG93LnRvcC5kb2N1bWVudDsKKworPD9waHAKKwkvL3dlIG5lZWQgdG8gcmVmZXNoIHRoZSBkcm9wIGRpcmVjdG9yeSBsaXN0CisJLy9zYXZlIHRoZSBjdXJyZW50IGRpciwgZGVsZXRlIGFsbCBzZWxlY3Qgb3B0aW9ucworCS8vYWRkIHRoZSBuZXcgbGlzdCwgcmUtc2VsZWN0IHRoZSBzYXZlZCBkaXIuCisJaWYoJHJlZnJlc2hEaXIpIAorCXsgCisJCSRkaXJzID0gJG1hbmFnZXItPmdldERpcnMoKTsKKz8+CisJCXZhciBzZWxlY3Rpb24gPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ2RpclBhdGgnKTsKKwkJdmFyIGN1cnJlbnREaXIgPSBzZWxlY3Rpb24ub3B0aW9uc1tzZWxlY3Rpb24uc2VsZWN0ZWRJbmRleF0udGV4dDsKKworCQl3aGlsZShzZWxlY3Rpb24ubGVuZ3RoID4gMCkKKwkJewlzZWxlY3Rpb24ucmVtb3ZlKDApOyB9CisJCQorCQlzZWxlY3Rpb24ub3B0aW9uc1tzZWxlY3Rpb24ubGVuZ3RoXSA9IG5ldyBPcHRpb24oIi8iLCI8P3BocCBlY2hvIHJhd3VybGVuY29kZSgnLycpOyA/PiIpOworCQk8P3BocCBmb3JlYWNoKCRkaXJzIGFzICRyZWxhdGl2ZT0+JGZ1bGxwYXRoKSB7ID8+CisJCXNlbGVjdGlvbi5vcHRpb25zW3NlbGVjdGlvbi5sZW5ndGhdID0gbmV3IE9wdGlvbigiPD9waHAgZWNobyAkcmVsYXRpdmU7ID8+IiwiPD9waHAgZWNobyByYXd1cmxlbmNvZGUoJHJlbGF0aXZlKTsgPz4iKTsKKwkJPD9waHAgfSA/PgorCQkKKwkJZm9yKHZhciBpID0gMDsgaSA8IHNlbGVjdGlvbi5sZW5ndGg7IGkrKykKKwkJeworCQkJdmFyIHRoaXNEaXIgPSBzZWxlY3Rpb24ub3B0aW9uc1tpXS50ZXh0OworCQkJaWYodGhpc0RpciA9PSBjdXJyZW50RGlyKQorCQkJeworCQkJCXNlbGVjdGlvbi5zZWxlY3RlZEluZGV4ID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQkJCis8P3BocCB9ID8+CisJfQorICAgIAorCWZ1bmN0aW9uIGVkaXRJbWFnZShpbWFnZSkgCisJeworCQl2YXIgdXJsID0gIjw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFja2VuZF91cmwnXTsgPz5fX2Z1bmN0aW9uPWVkaXRvciZpbWc9IitpbWFnZSsiJm1vZGU9PD9waHAgcHJpbnQgJGluc2VydE1vZGUgPz4iOworICAgICAgICBEaWFsb2codXJsLCBmdW5jdGlvbihwYXJhbSkKKwkJeworCQkJaWYgKCFwYXJhbSkgeyAvLyB1c2VyIG11c3QgaGF2ZSBwcmVzc2VkIENhbmNlbAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZQorCQkJeworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQl9LCBudWxsKTsKKwl9CisKKy8qXV0+Ki8KKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+YXNzZXRzL2ltYWdlcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5hc3NldHMvcG9wdXAuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorPCEtLQorLy8gS290bzogd2h5IGVtcHR5aW5nPyBjb21tZW50ZWQgb3V0CisvL2lmKHdpbmRvdy50b3AuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hbmFnZXJfbW9kZScpLnZhbHVlPT0iaW1hZ2UiKQorLy9lbXB0eVByb3BlcnRpZXMoKTsKKzw/cGhwIGlmKGlzc2V0KCRkaXNrSW5mbykpIGVjaG8gJ3VwZGF0ZURpc2tNZXNnKGkxOG4oXCcnLiRkaXNrSW5mby4nXCcpKTsnOyA/PgorLy8tLT4KKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+YXNzZXRzL2RyYWdUYWJsZUNvbHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKzw/cGhwIGlmICgkbWFuYWdlci0+aXNWYWxpZEJhc2UoKSA9PSBmYWxzZSkgeyBkcmF3RXJyb3JCYXNlKCRtYW5hZ2VyKTsgfQorCWVsc2VpZihjb3VudCgkbGlzdFswXSkgPiAwIHx8IGNvdW50KCRsaXN0WzFdKSA+IDApIHsgPz4KKwk8P3BocCBkcmF3RGlyc19GaWxlcygkbGlzdCwgJG1hbmFnZXIpOyA/PgorPD9waHAgfSBlbHNlIHsgZHJhd05vUmVzdWx0cygpOyB9ID8+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nLzF4MV90cmFuc3BhcmVudC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nLzF4MV90cmFuc3BhcmVudC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkNDJlOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvMXgxX3RyYW5zcGFyZW50LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nLzJ4Mi5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nLzJ4Mi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYyZWM0YQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvMngyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nLzJ4Ml93LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvMngyX3cuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNTYwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nLzJ4Ml93LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2J0bkZvbGRlck5ldy5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2J0bkZvbGRlck5ldy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQxZDA5YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvYnRuRm9sZGVyTmV3LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2J0bkZvbGRlck5ldzEuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9idG5Gb2xkZXJOZXcxLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjAxNzQyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9idG5Gb2xkZXJOZXcxLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2J0bkZvbGRlclVwLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvYnRuRm9sZGVyVXAuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YWM1NmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2J0bkZvbGRlclVwLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2J0bkZvbGRlclVwMS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2J0bkZvbGRlclVwMS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I3MzQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvYnRuRm9sZGVyVXAxLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2J0bl9jYW5jZWwuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9idG5fY2FuY2VsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTk0MDFjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9idG5fY2FuY2VsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2J0bl9vay5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2J0bl9vay5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiMDI3YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvYnRuX29rLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2Nyb3AuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9jcm9wLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWY1M2IyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9jcm9wLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2RlZmF1bHQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9kZWZhdWx0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDE5YzFkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9kZWZhdWx0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2Rpdi5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2Rpdi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQyNWMwMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvZGl2LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2RvdHMuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9kb3RzLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjEzZTViCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9kb3RzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2VkX2xpbmtmaWxlLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvZWRfbGlua2ZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YWMyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2VkX2xpbmtmaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2VkX2xpbmtmaWxlMS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2VkX2xpbmtmaWxlMS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBmZGUyZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvZWRfbGlua2ZpbGUxLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2VkaXRfYWN0aXZlLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvZWRpdF9hY3RpdmUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyOGMyNWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2VkaXRfYWN0aXZlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2VkaXRfY29weS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2VkaXRfY29weS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ExNDU2OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvZWRpdF9jb3B5LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2VkaXRfY3V0LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvZWRpdF9jdXQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMTExNDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2VkaXRfY3V0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2VkaXRfcGFzdGUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9lZGl0X3Bhc3RlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWVhOTEyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9lZGl0X3Bhc3RlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2VkaXRfcGVuY2lsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvZWRpdF9wZW5jaWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZmU1YTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2VkaXRfcGVuY2lsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2VkaXRfcmVuYW1lLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvZWRpdF9yZW5hbWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNjFkNTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2VkaXRfcmVuYW1lLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2VkaXRfdHJhc2guZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9lZGl0X3RyYXNoLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzU0YWM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9lZGl0X3RyYXNoLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2ZvbGRlci5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2ZvbGRlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAwM2Y1OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvZm9sZGVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2hhbmQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9oYW5kLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2M5MDBmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9oYW5kLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2lzbG9ja2VkMi5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2lzbG9ja2VkMi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRmZDJlYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvaXNsb2NrZWQyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2xvY2tlZC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL2xvY2tlZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI0NzIzOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvbG9ja2VkLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL21lYXN1cmUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9tZWFzdXJlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQ5NmRiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9tZWFzdXJlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL25vaW1hZ2VzLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvbm9pbWFnZXMuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZTZkZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL25vaW1hZ2VzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL3JvdGF0ZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL3JvdGF0ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y4NzY0ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvcm90YXRlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL3NhdmUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9zYXZlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWRiOWIwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy9zYXZlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL3NjYWxlLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvc2NhbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNmJlYzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL3NjYWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL3NwYWNlci5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL3NwYWNlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyNTYwOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvc3BhY2VyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL3RfYmxhY2suZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy90X2JsYWNrLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjM2MmYxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy90X2JsYWNrLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL3Rfd2hpdGUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy90X3doaXRlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2RkZWVjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2ltZy90X3doaXRlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL3VubG9ja2VkLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvdW5sb2NrZWQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOGU3ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL3VubG9ja2VkLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL3VubG9ja2VkMi5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL3VubG9ja2VkMi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U3MDNjOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvdW5sb2NrZWQyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL3VubG9ja2VkX2VtcHR5LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9pbWcvdW5sb2NrZWRfZW1wdHkuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNGUwZDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvaW1nL3VubG9ja2VkX2VtcHR5LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9iNS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2I1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYTNiZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9iNS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImI1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvY2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBjODVhNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2NoLmpzCkBAIC0wLDAgKzEsMjIgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAi5paw56qX5oi3KF9ibGFuaykiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIueEoSh1c2UgaW1wbGljaXQpIiwKKyAgICAiT0siOiAi5aW9IiwKKyAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIuacrOWMoSAoX3NlbGYpIiwKKyAgICAiVGl0bGUgKHRvb2x0aXApIjogIuS4u+mhjCAodG9vbHRpcCk6IiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICLkuIrljKEgKF90b3ApIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRVhURU5ERURGSUxFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvY3ouanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9jei5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODFiNjM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvY3ouanMKQEAgLTAsMCArMSwzMiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjeiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGlnbiI6ICJaYXJvdm7DoW7DrSIsCisgICAgIkJhc2VsaW5lIjogIlrDoWtsYWRuw60gbGlua2EiLAorICAgICJCb3JkZXIiOiAiT2JyeXMiLAorICAgICJCb3R0b20iOiAiRG9sxa8iLAorICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgIkNvbG9yIjogIkJhcnZhIiwKKyAgICAiSGVpZ2h0IjogIlbDvcWha2EiLAorICAgICJIZWlnaHQ6IjogIlbDvcWha2EiLAorICAgICJMZWZ0IjogIlZsZXZvIiwKKyAgICAiTWFyZ2luIjogIk9rcmFqIiwKKyAgICAiTWlkZGxlIjogIk5hIHN0xZllZCIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUGFkZGluZyI6ICJPZHNhem92w6Fuw60iLAorICAgICJSaWdodCI6ICJWcHJhdm8iLAorICAgICJUb3AiOiAiTmFob3J1IiwKKyAgICAiV2lkdGgiOiAixaDDrcWZa2EiLAorICAgICJXaWR0aDoiOiAixaDDrcWZa2EiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9kYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2Y2U3MzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9kYS5qcwpAQCAtMCwwICsxLDEzNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAiQnVuZCIsCisgICAgIkFic21pZGRsZSI6ICJDZW50cmVyZXQiLAorICAgICJBbGlnbiI6ICJQbGFjZXJpbmciLAorICAgICJBbHQiOiAiQWx0IiwKKyAgICAiQmFzZWxpbmUiOiAiR3J1bmRsaW5qZSIsCisgICAgIkJvcmRlciI6ICJSYW1tZSIsCisgICAgIkJvcmRlciBDb2xvciI6ICJSYW1tZWZhcnZlIiwKKyAgICAiQm90dG9tIjogIlRla3N0YnVuZCIsCisgICAgIkNhbmNlbCI6ICJBbm51bGxlciIsCisgICAgIkNsZWFyIjogIkZvcnRyeWQiLAorICAgICJDb2xvciI6ICJGYXJ2ZSIsCisgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICJLb3JyZWt0IHN0w7hycmVsc2VzZm9yaG9sZCIsCisgICAgIkNvcHkiOiAiS29waWVyIiwKKyAgICAiQ3JvcCI6ICJCZXNrw6ZyIiwKKyAgICAiQ3V0IjogIktsaXAiLAorICAgICJEaXJlY3RvcnkiOiAiTWFwcGUiLAorICAgICJEaXJlY3RvcnkgVXAiOiAiTWFwcGUgb3AiLAorICAgICJFZGl0IjogIlJlZGlnZXIiLAorICAgICJGaWxlIE1hbmFnZXIiOiAiRmlsIE1hbmFnZXIiLAorICAgICJGaWxlbmFtZToiOiAiRmlsbmF2bjoiLAorICAgICJGaWxlc2l6ZToiOiAiRmlsc3TDuHJyZWxzZToiLAorICAgICJGbGlwIEhvcml6b250YWwiOiAiVmVuZCB2YW5kcmV0IiwKKyAgICAiRmxpcCBJbWFnZSI6ICJWZW5kIGJpbGxlZGUiLAorICAgICJGbGlwIFZlcnRpY2FsIjogIlZlbmQgbG9kcmV0IiwKKyAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIkdJRi1Gb3JtYXQgaWtrZSB1bmRlcnN0w7h0dGV0IC0ga2FuIGlra2UgcmVkaWdlcmVzLiIsCisgICAgIkhlaWdodCI6ICJIw7hqZGUiLAorICAgICJIZWlnaHQ6IjogIkjDuGpkZToiLAorICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIkluZHPDpnQgZmlsLWxpbmsiLAorICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICJVZ3lsZGlnIGJhc2UgbWFwcGU6IiwKKyAgICAiSlBFRyBIaWdoIjogIkpQRUcgaMO4aiIsCisgICAgIkpQRUcgTG93IjogIkpQRUcgbGF2IiwKKyAgICAiSlBFRyBNZWRpdW0iOiAiSlBFRyBtZWxsZW0iLAorICAgICJMZWZ0IjogIlZlbnN0cmUiLAorICAgICJMb2FkaW5nIjogIkhlbnRlciIsCisgICAgIkxvY2siOiAiTMOlcyIsCisgICAgIk1hcmdpbiI6ICJNYXJnZW4iLAorICAgICJNYXJrZXIiOiAiTWFya8O4ciIsCisgICAgIk1lYXN1cmUiOiAiTcOlbGViw6VuZCIsCisgICAgIk1pZGRsZSI6ICJNaWR0IiwKKyAgICAiTmV3IEZvbGRlciI6ICJOeSBtYXBwZSIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTnl0IHZpbmR1ZSAoX2JsYW5rKSIsCisgICAgIk5vIEZpbGVzIEZvdW5kIjogIkluZ2VuIGZpbGVyIGZ1bmRldCIsCisgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICJJbmdlbiBiaWxsZWRlciB0aWxnw6ZuZ2VsaWciLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogImluZ2VuIChpbXBsaWNpdCkiLAorICAgICJOb3Qgc2V0IjogIlViZXN0ZW10IiwKKyAgICAiT0siOiAiT0siLAorICAgICJQYWRkaW5nIjogIlNwYWx0ZWZ5bGQiLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIkJpbGxlZGV0cyBwb3NpdGlvbiIsCisgICAgIlByZXZpZXciOiAiU211Z2tpZyIsCisgICAgIlF1YWxpdHk6IjogIkt2YWxpdGV0IiwKKyAgICAiUmVmcmVzaCI6ICJPcGRhdGVyIiwKKyAgICAiUmVuYW1lIjogIk9tZMO4YiIsCisgICAgIlJlc2l6ZSI6ICLDhm5kcmUgc3TDuHJyZWxzZSIsCisgICAgIlJpZ2h0IjogIkjDuGpyZSIsCisgICAgIlJvdGF0ZSI6ICJSb3RlcmUiLAorICAgICJSb3RhdGUgSW1hZ2UiOiAiRHJlaiBiaWxsZWRlIiwKKyAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlNhbW1lIHJhbW1lIChfc2VsZikiLAorICAgICJTYXZlIjogIkdlbSIsCisgICAgIlN0YXJ0IFg6IjogIlN0YXJ0IFgiLAorICAgICJTdGFydCBZOiI6ICJTdGFydCBZIiwKKyAgICAiVGFyZ2V0IFdpbmRvdyI6ICJNw6VsIiwKKyAgICAiVGV4dHRvcCI6ICJUZWtzdHRvcCIsCisgICAgIlRpdGxlICh0b29sdGlwKSI6ICJUaXRlbCAoVG9vbHRpcCkiLAorICAgICJUb2dnbGUgbWFya2VyIGNvbG9yIjogIlNraWZ0IG1hcmvDuHJmYXJ2ZSIsCisgICAgIlRvcCI6ICJUb3AiLAorICAgICJUb3AgZnJhbWUgKF90b3ApIjogIlRvcHJhbW1lIChfdG9wKSIsCisgICAgIlRyYXNoIjogIlBhcGlya3VydiIsCisgICAgIlVwbG9hZCI6ICJVcGxvYWQiLAorICAgICJXOiI6ICJXOiIsCisgICAgIldpZHRoIjogIkJyZWRkZSIsCisgICAgIldpZHRoOiI6ICJCcmVkZGU6IiwKKyAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIlbDpmxnIHZlbmxpZ3N0IG5vZ2V0IHRla3N0IGbDuHIgZHUgbGF2ZXIgZXQgbnl0IGxpbmsuIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQW5nbGU6IjogIlZpbmtlbDoiLAorICAgICAgICAiQ2FuY2VsbGVkIHJlbmFtZS4iOiAiRm9ydHJ5ZCBvbWTDuGJuaW5nLiIsCisgICAgICAgICJDYW5ub3QgdXBsb2FkICRleHRlbnNpb24gRmlsZXMuIFBlcm1pc3Npb24gZGVuaWVkLiI6ICJLYW4gaWtrZSB1cGxvYWRlICRleHRlbnNpb24uIFRpbGxhZGVsc2UgbsOmZ3RldC4iLAorICAgICAgICAiQ2Fubm90IHVwbG9hZC4gTWF4aW11bSBmb2xkZXIgc2l6ZSByZWFjaGVkLiBEZWxldGUgdW53YW50ZWQgZmlsZXMgYW5kIHRyeSBhZ2Fpbi4iOiAiS2FuIGlra2UgdXBsb2FkZS4gRGVuIG1ha3NpbWFsZSBtYXBwZXN0w7hycmVsc2UgZXIgbsOlZXQuIFNsZXQgdcO4bnNrZWRlIGZpbGVyIG9nIHByw7h2IGlnZW4uIiwKKyAgICAgICAgIkNvcHkgXCIkZmlsZVwiIGZyb20gXCIkZGlyXCIgaGVyZSI6ICJLb3BpZXIgXCIkZmlsZVwiIGZyYSBcIiRkaXJcIiBoZXIiLAorICAgICAgICAiQ29weSBmb2xkZXIgXCIkZmlsZVwiIGZyb20gXCIkZGlyXCIgaGVyZSI6ICJLb3BpZXIgbWFwcGUgXCIkZmlsZVwiIGZyYSBcIiRkaXJcIiBoZXIiLAorICAgICAgICAiQ291bGQgbm90IGNyZWF0ZSBkZXN0aW5hdGlvbiBmb2xkZXIuIjogIkt1bm5lIGlra2UgbGF2ZSBkZXN0aW5hdGlvbnNtYXBwZS4iLAorICAgICAgICAiRGF0ZSBNb2RpZmllZCI6ICJEYXRvIGZvciByZWRpZ2VyaW5nIiwKKyAgICAgICAgIkRlbGV0ZSBmaWxlIFwiJGZpbGVcIj8iOiAiU2xldCBmaWxlbiBcIiRmaWxlXCI/IiwKKyAgICAgICAgIkRlbGV0ZSBmb2xkZXIgXCIkZGlyXCI/IjogIlNsZXQgbWFwcGVuIFwiJGRpclwiPyIsCisgICAgICAgICJEZXNjcmlwdGlvbjoiOiAiQmVza3JpdmVsc2U6IiwKKyAgICAgICAgIkRlc3RpbmF0aW9uIGZpbGUvZm9sZGVyIGFscmVhZHkgZXhpc3RzLiI6ICJEZXN0aW5hdGlvbnMtIGZpbC9tYXBwZSBmaW5kZXMgYWxsZXJlZGUiLAorICAgICAgICAiRmlsZSBcIiRmaWxlXCIgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkLiI6ICJGaWxlbiBcIiRmaWxlXCIgYmxldiB1cGxvYWRldC4iLAorICAgICAgICAiRmlsZSBOYW1lIjogIkZpbG5hdm4iLAorICAgICAgICAiRmlsZSBwYXN0ZWQgT0suIjogIkZpbGUgcGFzdGVkIE9LLiIsCisgICAgICAgICJGaWxlIHNhdmVkLiI6ICJGaWxlbiBibGV2IGdlbXQuIiwKKyAgICAgICAgIkZpbGUgd2FzIG5vdCBzYXZlZC4iOiAiRmlsZW4gYmxldiBpa2tlIGdlbXQuIiwKKyAgICAgICAgIkZvbGRlciBOYW1lOiI6ICJNYXBwZW5hdm4iLAorICAgICAgICAiRm9sZGVyIGlzIG5vdCBlbXB0eS4gUGxlYXNlIGRlbGV0ZSBhbGwgRmlsZXMgYW5kIFN1YmZvbGRlcnMgaW5zaWRlLiI6ICJNYXBwZW4gZXIgaWtrZSB0b20uIFNsZXQgdmVubGlnc3QgYWxsZSBmaWxlciBvZyB1bmRlcm1hcHBlcm1hcHBlciBpIG1hcHBlbiBmw7hyc3QuIiwKKyAgICAgICAgIkZyZWUgU3BhY2UiOiAiRnJpIHBsYWRzIiwKKyAgICAgICAgIkltYWdlIEZpbGUiOiAiQmlsbGVkZmlsIiwKKyAgICAgICAgIkltYWdlIEZvcm1hdCI6ICJCaWxsZWRmb3JtYXQ6IiwKKyAgICAgICAgIkltYWdlIFNpemUiOiAiQmlsbGVkc3TDuHJyZWxzZSIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiSW5kc8OmdCBiaWxsZWRlIiwKKyAgICAgICAgIkludmFsaWQgZm9sZGVyIG5hbWUsIHBsZWFzZSBjaG9vc2UgYW5vdGhlciBmb2xkZXIgbmFtZS4iOiAiVWd5bGRpZ3QgbWFwcGVuYXZuLCB2w6ZsZyB2ZW5saWdzdCBldCBhbmRldCBuYXZuLiIsCisgICAgICAgICJMaXN0IFZpZXciOiAiTGlzdGV2aXNuaW5nIiwKKyAgICAgICAgIk1heGltdW0gZmlsZSBzaXplIFskbWF4X3NpemUgS0JdIGV4Y2VlZGVkLiI6ICJNYWtzaW1hbCBmaWxzdMO4cnJlbHNlIFskbWF4X3NpemUgS0JdIG92ZXJza3JlZGV0LiIsCisgICAgICAgICJNb3ZlIFwiJGZpbGVcIiBmcm9tIFwiJGRpclwiIGhlcmUiOiAiRmx5dCBcIiRmaWxlXCIgZnJhIFwiJGRpclwiIGhlciIsCisgICAgICAgICJNb3ZlIGZvbGRlciBcIiRmaWxlXCIgZnJvbSBcIiRkaXJcIiBoZXJlIjogIkZseXQgbWFwcGUgXCIkZmlsZVwiIGZyYSBcIiRkaXJcIiBoZXIiLAorICAgICAgICAiTmFtZSI6ICJOYXZuIiwKKyAgICAgICAgIk5vIEltYWdlIHNlbGVjdGVkLiI6ICJJbmdlbiBiaWxsZWRlciB2YWxndC4iLAorICAgICAgICAiT3RoZXIiOiAiQW5kcmUuLi4iLAorICAgICAgICAiUGFzdGUiOiAiU8OmdCBpbmQiLAorICAgICAgICAiUGFzdGUgZmFpbGVkLlxuTWF5YmUgZm9sZGVyIGRvZXNuJ3QgaGF2ZSB3cml0ZSBwZXJtaXNzaW9uLiI6ICJTw6Z0IGluZCBmZWpsZWRlLlxuTcOlc2tlIGhhciBtYXBwZW4gaWtrZSBza3JpdmVyZXR0aWdoZWRlci4iLAorICAgICAgICAiUGxlYXNlIGRlbGV0ZSBhbGwgZmlsZXMvZm9sZGVycyBpbnNpZGUgdGhlIGZvbGRlciB5b3Ugd2lzaCB0byBkZWxldGUgZmlyc3QuIjogIlNsZXQgdmVubGlnc3QgYWxsZSBmaWxlci9tYXBwZXIgaSBtYXBwZW4gZsO4ciBkZW4gc2xldHRlcy4iLAorICAgICAgICAiUGxlYXNlIGVudGVyIG5hbWUgZm9yIG5ldyBmb2xkZXIuLi4iOiAiSW5kdGFzdCB2ZW5saWdzdCBuYXZuIHDDpSBueSBtYXBwZS4uLiIsCisgICAgICAgICJQbGVhc2UgZW50ZXIgbmV3IG5hbWUgZm9yIHRoaXMgZmlsZS4uLiI6ICJJbmR0YXN0IHZlbmxpZ3N0IGV0IG55dCBuYXZuIHRpbCBkZW5uZSBmaWwuLi4iLAorICAgICAgICAiUGxlYXNlIGVudGVyIG5ldyBuYW1lIGZvciB0aGlzIGZvbGRlci4uLiI6ICJJbmR0YXN0IHZlbmxpZ3N0IGV0IG55dCBuYXZuIHRpbCBkZW5uZSBtYXBwZS4uLiIsCisgICAgICAgICJSb3RhdGUgMTgwIMKwIjogIkRyZWogMTgwwrAiLAorICAgICAgICAiUm90YXRlIDkwIMKwIENDVyI6ICJEcmVqIDkwwrAgbW9kIHVyZXQiLAorICAgICAgICAiUm90YXRlIDkwIMKwIENXIjogIkRyZWogOTDCsCBtZWQgdXJldCIsCisgICAgICAgICJTaXplIjogIlN0w7hycmVsc2UiLAorICAgICAgICAiU291cmNlIGZpbGUvZm9sZGVyIG5vdCBmb3VuZC4iOiAiS2lsZGUtIGZpbC9tYXBwZSBpa2tlIGZ1bmRldCIsCisgICAgICAgICJUaHVtYm5haWwgVmlldyI6ICJNaW5pYXR1cmVwb3J0csOmdCIsCisgICAgICAgICJUb3RhbCBTaXplIjogIlNhbWxldCBzdMO4cnJlbHNlIiwKKyAgICAgICAgIlRvdGFsIFNpemUgOiAkbWF4X2ZvbGRlcnNpemVfbWIgTUIsIEZyZWUgU3BhY2U6ICRmcmVlX3NwYWNlIjogIk1ha3Mgc3TDuHJyZWxzZTogJG1heF9mb2xkZXJzaXplX21iIE1CLCBGcmkgcGxhZHM6ICRmcmVlX3NwYWNlIiwKKyAgICAgICAgIlVuYWJsZSB0byByZW5hbWUgZmlsZS4gRmlsZSBvZiB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzIG9yXG5mb2xkZXIgZG9lc24ndCBoYXZlIHdyaXRlIHBlcm1pc3Npb24uIjogIkZpbGVuIGthbiBpa2tlIG9tZMO4YmVzLiBFbiBmaWwgbWVkIHNhbW1lIG5hdm4gZWtzaXN0ZXJlciBhbGxlcmVkZSwgXG5lbGxlciBtYXBwZW4gaGFyIGlra2Ugc2tyaXZlcmV0dGlnaGVkZXIuIiwKKyAgICAgICAgIlVuYWJsZSB0byB1cGxvYWQgRmlsZS4gXG5FaXRoZXIgTWF4aW11bSBmaWxlIHNpemUgWyRtYXhfc2l6ZSBLQl0gZXhjZWVkZWQgb3JcbkZvbGRlciBkb2Vzbid0IGhhdmUgd3JpdGUgcGVybWlzc2lvbi4iOiAiSWtrZSBtdWxpZ3QgYXQgdXBsb2FkZSBmaWxlbi5cbkVudGVuIGVyIGRlbiBtYWtzaW1hbGUgZmlsc3TDuHJyZWxzZSBww6UgWyRtYXhfc2l6ZSBLQl0gbsOlZXRcbmVsbGVyIG1hcHBlbiBoYXIgaWtrZSBza3JpdmVyZXR0aWdoZWRlci4iLAorICAgICAgICAiVW50aXRsZWQiOiAiVWJldGl0bGV0IiwKKyAgICAgICAgIlVwbG9hZGluZyI6ICJVcGxvYWRlciIsCisgICAgICAgICJVcGxvYWRpbmcuLi4iOiAiVXBsb2FkZXIuLi4iCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2RlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMGIxMDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9kZS5qcwpAQCAtMCwwICsxLDEzOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAidW50ZW4gYsO8bmRpZyIsCisgICAgIkFic21pZGRsZSI6ICJtaXR0aWciLAorICAgICJBbGlnbiI6ICJBbm9yZG51bmciLAorICAgICJBbHQiOiAiQWx0IiwKKyAgICAiQmFzZWxpbmUiOiAiR3J1bmRsaW5pZSIsCisgICAgIkJvcmRlciI6ICJSYWhtZW4iLAorICAgICJCb3JkZXIgQ29sb3IiOiAiUmFobWVuZmFyYmUiLAorICAgICJCb3R0b20iOiAidW50ZW4iLAorICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAiQ2xlYXIiOiAiTMO2c2NoZW4iLAorICAgICJDb2xvciI6ICJGYXJiZSIsCisgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICJQcm9wb3J0aW9uZW4gYmVpYmVoYWx0ZW4iLAorICAgICJDb3B5IjogIktvcGllcmVuIiwKKyAgICAiQ3JvcCI6ICJCZXNjaG5laWRlbiIsCisgICAgIkN1dCI6ICJBdXNzY2huZWlkZW4iLAorICAgICJEaXJlY3RvcnkiOiAiVmVyemVpY2huaXMiLAorICAgICJEaXJlY3RvcnkgVXAiOiAiQXVmd8OkcnRzIiwKKyAgICAiRWRpdCI6ICJCZWFyYmVpdGVuIiwKKyAgICAiRmlsZSBNYW5hZ2VyIjogIkRhdGVpbWFuYWdlciIsCisgICAgIkZpbGVuYW1lOiI6ICJEYXRlaW5hbWU6IiwKKyAgICAiRmlsZXNpemU6IjogIkRhdGVpZ3LDtsOfZToiLAorICAgICJGbGlwIEhvcml6b250YWwiOiAiaG9yLiBzcGllZ2VsbiIsCisgICAgIkZsaXAgSW1hZ2UiOiAiQmlsZCBzcGllZ2VsbiIsCisgICAgIkZsaXAgVmVydGljYWwiOiAidmVyLiBzcGllZ2VsbiIsCisgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICJHSUYtRm9ybWF0IG5pY2h0IHVudGVyc3TDvHR6dCwgYmVhcmJlaXRlbiBuaWNodCBtw7ZnbGljaC4iLAorICAgICJIZWlnaHQiOiAiSMO2aGUiLAorICAgICJIZWlnaHQ6IjogIkjDtmhlOiIsCisgICAgIkluc2VydCBGaWxlIExpbmsiOiAiRGF0ZWlsaW5rIGVpbmbDvGdlbiIsCisgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIlVuZ8O8bHRpZ2VzIEJhc2lzdmVyemVpY2huaXM6IiwKKyAgICAiSlBFRyBIaWdoIjogIkpQRUcgaG9jaCIsCisgICAgIkpQRUcgTG93IjogIkpQRUcgbmllZHJpZyIsCisgICAgIkpQRUcgTWVkaXVtIjogIkpQRUcgbWl0dGVsIiwKKyAgICAiTGVmdCI6ICJsaW5rcyIsCisgICAgIkxvYWRpbmciOiAiTGFkZW4iLAorICAgICJMb2NrIjogIkZlc3RzdGVsbGVuIiwKKyAgICAiTWFyZ2luIjogIkF1c3NlbmFic3RhbmQiLAorICAgICJNYXJrZXIiOiAiUmFobWVuIiwKKyAgICAiTWVhc3VyZSI6ICJNYcOfZSIsCisgICAgIk1pZGRsZSI6ICJ6ZW50cmllcnQiLAorICAgICJOZXcgRm9sZGVyIjogIk5ldWVzIFZlcnplaWNobmlzIGVyc3RlbGxlbiIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTmV1ZXMgRmVuc3RlciAoX2JsYW5rKSIsCisgICAgIk5vIEZpbGVzIEZvdW5kIjogIktlaW5lIERhdGVpZW4gZ2VmdW5kZW4iLAorICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiS2VpbiBCaWxkIHZlcmbDvGdiYXIiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogImsuQS4gKGltcGxpeml0KSIsCisgICAgIk5vdCBzZXQiOiAibmljaHQgZWluZ2VzdGVsbHQiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBhZGRpbmciOiAiSW5uZW5hYnN0YW5kIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJBbm9yZG51bmcgZGllc2VzIEJpbGRlcyIsCisgICAgIlByZXZpZXciOiAiVm9yc2NoYXUiLAorICAgICJRdWFsaXR5OiI6ICJRdWFsaXTDpHQiLAorICAgICJSZWZyZXNoIjogIkFrdHVhbGlzaWVyZW4iLAorICAgICJSZW5hbWUiOiAiVW1iZW5lbm5lbiIsCisgICAgIlJlc2l6ZSI6ICJHcsO2w59lIMOkbmRlcm4iLAorICAgICJSaWdodCI6ICJyZWNodHMiLAorICAgICJSb3RhdGUiOiAiRHJlaGVuIiwKKyAgICAiUm90YXRlIEltYWdlIjogIkJpbGQgZHJlaGVuIiwKKyAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlNlbGJlciBSYWhtZW4gKF9zZWxmKSIsCisgICAgIlNhdmUiOiAiU3BlaWNoZXJuIiwKKyAgICAiU3RhcnQgWDoiOiAiU3RhcnQgWCIsCisgICAgIlN0YXJ0IFk6IjogIlN0YXJ0IFkiLAorICAgICJUYXJnZXQgV2luZG93IjogIlppZWxmZW5zdGVyIiwKKyAgICAiVGV4dHRvcCI6ICJvYmVuIGLDvG5kaWciLAorICAgICJUaXRsZSAodG9vbHRpcCkiOiAiVGl0ZWwgKFRvb2x0aXApIiwKKyAgICAiVG9nZ2xlIG1hcmtlciBjb2xvciI6ICJGYXJiZSBkZXIgTWFya2llcnVuZyB1bXNjaGFsdGVuIiwKKyAgICAiVG9wIjogIm9iZW4iLAorICAgICJUb3AgZnJhbWUgKF90b3ApIjogIk9iZXJzdGVyIFJhaG1lbiAoX3RvcCkiLAorICAgICJUcmFzaCI6ICJQYXBpZXJrb3JiIiwKKyAgICAiVXBsb2FkIjogIkhvY2hsYWRlbiIsCisgICAgIlc6IjogIlc6IiwKKyAgICAiV2lkdGgiOiAiQnJlaXRlIiwKKyAgICAiV2lkdGg6IjogIkJyZWl0ZToiLAorICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiQml0dGUgenVlcnN0IFRleHQgbWFya2llcmVuLiIsCisgICAgIlpvb20iOiAiWm9vbSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFuZ2xlOiI6ICJXaW5rZWw6IiwKKyAgICAgICAgIkNhbmNlbGxlZCByZW5hbWUuIjogIlVtYmVuZW5uZW4gYWJnZWJyb2NoZW4uIiwKKyAgICAgICAgIkNhbm5vdCB1cGxvYWQgJGV4dGVuc2lvbiBGaWxlcy4gUGVybWlzc2lvbiBkZW5pZWQuIjogIiRleHRlbnNpb24gRGF0ZWllbiBkw7xyZmVuIG5pY2h0IGhvY2hnZWxhZGVuIHdlcmRlbi4iLAorICAgICAgICAiQ2Fubm90IHVwbG9hZC4gTWF4aW11bSBmb2xkZXIgc2l6ZSByZWFjaGVkLiBEZWxldGUgdW53YW50ZWQgZmlsZXMgYW5kIHRyeSBhZ2Fpbi4iOiAiRGllIG1heGltYWxlIE9yZG5lcmdyw7bDn2UgaXN0IGVycmVpY2h0LiBCaXR0ZSBsw7ZzY2hlbiBTaWUgRGF0ZWllbiwgZGllIFNpZSBuaWNodCBtZWhyIGJlbsO2dGlnZW4uIiwKKyAgICAgICAgIkNvcHkgXCIkZmlsZVwiIGZyb20gXCIkZGlyXCIgaGVyZSI6ICJcIiRmaWxlXCIgYXVzIE9yZG5lciBcIiRkaXJcIiBoaWVyaGVyIGtvcGllcmVuIiwKKyAgICAgICAgIkNvcHkgZm9sZGVyIFwiJGZpbGVcIiBmcm9tIFwiJGRpclwiIGhlcmUiOiAiXCJPcmRuZXIgJGZpbGVcIiBhdXMgXCIkZGlyXCIgaGllcmhlciBrb3BpZXJlbiIsCisgICAgICAgICJDb3VsZCBub3QgY3JlYXRlIGRlc3RpbmF0aW9uIGZvbGRlci4iOiAiS29ubnRlIFppZWxvcmRuZXIgbmljaHQgZXJzdGVsbGVuLiIsCisgICAgICAgICJEYXRlIE1vZGlmaWVkIjogIkRhdHVtIGxldHp0ZSDDhG5kZXJ1bmciLAorICAgICAgICAiRGVsZXRlIGZpbGUgXCIkZmlsZVwiPyI6ICJEYXRlaSBcIiRmaWxlXCIgbMO2c2NoZW4/IiwKKyAgICAgICAgIkRlbGV0ZSBmb2xkZXIgXCIkZGlyXCI/IjogIlZlcnplaWNobmlzIFwiJGRpclwiIGzDtnNjaGVuPyIsCisgICAgICAgICJEZXNjcmlwdGlvbjoiOiAiQmVzY2hyZWlidW5nOiIsCisgICAgICAgICJEZXN0aW5hdGlvbiBmaWxlL2ZvbGRlciBhbHJlYWR5IGV4aXN0cy4iOiAiWmllbGRhdGVpLy1vcmRuZXIgZXhpc3RpZXJ0IGJlcmVpdHMiLAorICAgICAgICAiRmlsZSBcIiRmaWxlXCIgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkLiI6ICJEYXRlaSBcIiRmaWxlXCIgZXJmb2xncmVpY2ggaG9jaGdlbGFkZW4uIiwKKyAgICAgICAgIkZpbGUgTmFtZSI6ICJEYXRlaW5hbWUiLAorICAgICAgICAiRmlsZSBwYXN0ZWQgT0suIjogIkZpbGUgcGFzdGVkIE9LLiIsCisgICAgICAgICJGaWxlIHNhdmVkLiI6ICJEYXRlaSBnZXNwZWljaGVydC4iLAorICAgICAgICAiRmlsZSB3YXMgbm90IHNhdmVkLiI6ICJEYXRlaSB3dXJkZSBuaWNodCBnZXNwZWljaGVydC4iLAorICAgICAgICAiRm9sZGVyIE5hbWU6IjogIlZlcnplaWNobmlzbmFtZSIsCisgICAgICAgICJGb2xkZXIgaXMgbm90IGVtcHR5LiBQbGVhc2UgZGVsZXRlIGFsbCBGaWxlcyBhbmQgU3ViZm9sZGVycyBpbnNpZGUuIjogIlZlcnplaWNobmlzIGlzdCBuaWNodCBsZWVyLiBCaXR0ZSB6dWVyc3QgYWxsZSBVbnRlcm9yZG5lciB1bmQgRGF0ZWllbiBsw7ZzY2hlbi4iLAorICAgICAgICAiRnJlZSBTcGFjZSI6ICJGcmVpZXIgU3BlaWNoZXIiLAorICAgICAgICAiSW1hZ2UgRmlsZSI6ICJCaWxkZGF0ZWkiLAorICAgICAgICAiSW1hZ2UgRm9ybWF0IjogIkJpbGRmb3JtYXQ6IiwKKyAgICAgICAgIkltYWdlIFNpemUiOiAiQmlsZGdyw7bDn2UiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIkJpbGQgZWluZsO8Z2VuIiwKKyAgICAgICAgIkludmFsaWQgZm9sZGVyIG5hbWUsIHBsZWFzZSBjaG9vc2UgYW5vdGhlciBmb2xkZXIgbmFtZS4iOiAiVW5nw7xsdGlnZXIgVmVyemVpY2huaXNuYW1lIC0gYml0dGUgbmV1IHfDpGhsZW4uIiwKKyAgICAgICAgIkxpc3QgVmlldyI6ICJMaXN0ZW5hbnNpY2h0IiwKKyAgICAgICAgIk1heGltdW0gZmlsZSBzaXplIFskbWF4X3NpemUgS0JdIGV4Y2VlZGVkLiI6ICJNYXhpbWFsZSBEYXRlaWdyw7bDn2UgWyRtYXhfc2l6ZSBLQl0gw7xiZXJzY2hyaXR0ZW4uIiwKKyAgICAgICAgIk1vdmUgXCIkZmlsZVwiIGZyb20gXCIkZGlyXCIgaGVyZSI6ICJcIiRmaWxlXCIgYXVzIE9yZG5lciBcIiRkaXJcIiBoaWVyaGVyIHZlcnNjaGllYmVuIiwKKyAgICAgICAgIk1vdmUgZm9sZGVyIFwiJGZpbGVcIiBmcm9tIFwiJGRpclwiIGhlcmUiOiAiT3JkbmVyIFwiJGZpbGVcIiBhdXMgXCIkZGlyXCIgaGllcmhlciB2ZXJzY2hpZWJlbiIsCisgICAgICAgICJOYW1lIjogIk5hbWUiLAorICAgICAgICAiTm8gSW1hZ2Ugc2VsZWN0ZWQuIjogIktlaW4gQmlsZCBhdXNnZXfDpGhsdC4iLAorICAgICAgICAiT3RoZXIiOiAiQW5kZXJlLi4uIiwKKyAgICAgICAgIlBhc3RlIjogIkVpbmbDvGdlbiIsCisgICAgICAgICJQYXN0ZSBmYWlsZWQuXG5NYXliZSBmb2xkZXIgZG9lc24ndCBoYXZlIHdyaXRlIHBlcm1pc3Npb24uIjogIkVpbmbDvGdlbiBmZWhsZ2VzY2hsYWdlbi5cbk3DtmdsaWNoZXJ3ZWlzZSBoYXQgZGVyIE9yZG5lciBrZWluZSBTY2hyZWliYmVyZWNodGlndW5nLiIsCisgICAgICAgICJQbGVhc2UgZGVsZXRlIGFsbCBmaWxlcy9mb2xkZXJzIGluc2lkZSB0aGUgZm9sZGVyIHlvdSB3aXNoIHRvIGRlbGV0ZSBmaXJzdC4iOiAiQml0dGUgenVlcnN0IGFsbGUgdW50ZXJnZW9yZG5ldGVuIE9yZG5lciBsw7ZzY2hlbi4iLAorICAgICAgICAiUGxlYXNlIGVudGVyIG5hbWUgZm9yIG5ldyBmb2xkZXIuLi4iOiAiQml0dGUgTmFtZW4gZsO8ciBuZXVlbiBPcmRuZXIgZWluZ2ViZW4uLi4iLAorICAgICAgICAiUGxlYXNlIGVudGVyIG5ldyBuYW1lIGZvciB0aGlzIGZpbGUuLi4iOiAiQml0dGUgbmV1ZW4gTmFtZW4gZsO8ciBkaWVzZSBEYXRlaSBlaW5nZWJlbi4uLiIsCisgICAgICAgICJQbGVhc2UgZW50ZXIgbmV3IG5hbWUgZm9yIHRoaXMgZm9sZGVyLi4uIjogIkJpdHRlIG5ldWVuIE5hbWVuIGbDvHIgZGllc2VuIE9yZG5lciBlaW5nZWJlbi4uLiIsCisgICAgICAgICJSb3RhdGUgMTgwIMKwIjogIkRyZWh1bmcgdW0gMTgwwrAiLAorICAgICAgICAiUm90YXRlIDkwIMKwIENDVyI6ICJEcmVodW5nIHVtIDkwwrAgZ2VnZW4gVWhyemVpZ2Vyc2lubiIsCisgICAgICAgICJSb3RhdGUgOTAgwrAgQ1ciOiAiRHJlaHVuZyB1bSA5MMKwIGltIFVocnplaWdlcnNpbm4iLAorICAgICAgICAiU2l6ZSI6ICJHcsO2w59lIiwKKyAgICAgICAgIlNvdXJjZSBmaWxlL2ZvbGRlciBub3QgZm91bmQuIjogIlF1ZWxsZGF0ZWkvLW9yZG5lciBuaWNodCBnZWZ1bmRlbiIsCisgICAgICAgICJUaHVtYm5haWwgVmlldyI6ICJNaW5pYXR1cmFuc2ljaHQiLAorICAgICAgICAiVG90YWwgU2l6ZSI6ICJHZXNhbXRncsO2w59lIiwKKyAgICAgICAgIlRvdGFsIFNpemUgOiAkbWF4X2ZvbGRlcnNpemVfbWIgTUIsIEZyZWUgU3BhY2U6ICRmcmVlX3NwYWNlIjogIk1heC4gT3JkZXJncsO2w59lOiAkbWF4X2ZvbGRlcnNpemVfbWIgTUIsIG5vY2ggZnJlaTogJGZyZWVfc3BhY2UiLAorICAgICAgICAiVW5hYmxlIHRvIHJlbmFtZSBmaWxlLiBGaWxlIG9mIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMgb3JcbmZvbGRlciBkb2Vzbid0IGhhdmUgd3JpdGUgcGVybWlzc2lvbi4iOiAiVW1iZW5lbm5lbiBuaWNodCBtw7ZnbGljaC4gRXZ0bC4gRGF0ZWluYW1lIHNjaG9uIHZvcmhhbmRlbiBvZGVyIGtlaW5lIFNjaHJlaWJyZWNodGUuIiwKKyAgICAgICAgIlVuYWJsZSB0byB1cGxvYWQgRmlsZS4gXG5FaXRoZXIgTWF4aW11bSBmaWxlIHNpemUgWyRtYXhfc2l6ZSBLQl0gZXhjZWVkZWQgb3JcbkZvbGRlciBkb2Vzbid0IGhhdmUgd3JpdGUgcGVybWlzc2lvbi4iOiAiS29ubnRlIERhdGVpIG5pY2h0IGhvY2hsYWRlbi5cbkVudHdlZGVyIGRpZSBtYXhpbWFsZSBEYXRlaWdyw7bDn2UgWyRtYXhfc2l6ZSBLQl0gaXN0IMO8YmVyc2Nocml0dGVuXG5vZGVyIGRhcyBWZXJ6ZWljaG5pcyBoYXQga2VpbmUgU2NocmVpYnJlY2h0ZS4iLAorICAgICAgICAiVW50aXRsZWQiOiAiVW5iZXRpdGVsdCIsCisgICAgICAgICJVcGxvYWRpbmciOiAiSG9jaGxhZGVuIiwKKyAgICAgICAgIlVwbG9hZGluZy4uLiI6ICJMYWRlIGhvY2guLi4iCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9lZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2VlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YWU1OTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9lZS5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJMb29idSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRVhURU5ERURGSUxFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvZWwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9lbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjA4ZmY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvZWwuanMKQEAgLTAsMCArMSwzOSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGlnbiI6ICLOo8+Ezr/Or8+HzrfPg863IiwKKyAgICAiQmFzZWxpbmUiOiAiQmFzZWxpbmUiLAorICAgICJCb3JkZXIiOiAizqDOtc+Bzq/Os8+BzrHOvM68zrEiLAorICAgICJCb3R0b20iOiAizprOrM+Ez4kgzrzOrc+Bzr/PgiIsCisgICAgIkNhbmNlbCI6ICLOkc66z43Pgc+Jz4POtyIsCisgICAgIkNvbG9yIjogIs6nz4HPjs68zrEiLAorICAgICJDb3B5IjogIs6Rzr3PhM65zrPPgc6xz4bOriIsCisgICAgIkN1dCI6ICLOkc+Azr/Ous6/z4DOriIsCisgICAgIkhlaWdodCI6ICLOjs+Izr/PgiIsCisgICAgIkhlaWdodDoiOiAizo7PiM6/z4IiLAorICAgICJMZWZ0IjogIs6Rz4HOuc+Dz4TOtc+BzqwiLAorICAgICJNYXJnaW4iOiAizqDOtc+BzrnOuM+Oz4HOuc6/IiwKKyAgICAiTWlkZGxlIjogIs6azq3Ovc+Ez4HOvyIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAizp3Orc6/IM+AzrHPgc6szrjPhc+Bzr8gKF9ibGFuaykiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIs6azrHOvc6tzr3OsSAoz4fPgc6uz4POtyDOsc+Az4zOu8+Fz4TOv8+FKSIsCisgICAgIk9LIjogIs6Vzr3PhM6szr7Otc65IiwKKyAgICAiUGFkZGluZyI6ICLOlc+Dzr/Ph86uIiwKKyAgICAiUmlnaHQiOiAizpTOtc6+zrnOrCIsCisgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICLOis60zrnOvyBmcmFtZSAoX3NlbGYpIiwKKyAgICAiVGl0bGUgKHRvb2x0aXApIjogIs6kzq/PhM67zr/PgiAodG9vbHRpcCk6IiwKKyAgICAiVG9wIjogIs6gzqzOvc+JIiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICLOoM6szr3PiSBmcmFtZSAoX3RvcCkiLAorICAgICJXaWR0aCI6ICLOoM67zqzPhM6/z4IiLAorICAgICJXaWR0aDoiOiAizqDOu86sz4TOv8+CIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRVhURU5ERURGSUxFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzczNmNmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvZXMuanMKQEAgLTAsMCArMSwxMDMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXMiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJzYm90dG9tIjogIkluZmVyaW9yIGFic29sdXRvIiwKKyAgICAiQWJzbWlkZGxlIjogIk1lZGlvIEFic29sdXRvIiwKKyAgICAiQWxpZ24iOiAiQWxpbmVhciIsCisgICAgIkJhc2VsaW5lIjogIkzDrW5lYSBiYXNlIiwKKyAgICAiQm9yZGVyIjogIkJvcmRlIiwKKyAgICAiQm90dG9tIjogIkluZmVyaW9yIiwKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiQ2xlYXIiOiAiRWxpbWluYXIiLAorICAgICJDb2xvciI6ICJDb2xvciIsCisgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICJQcm9wb3JjaW9uYWwiLAorICAgICJDb3B5IjogIkNvcGlhciIsCisgICAgIkNyb3AiOiAiUmVjb3J0YXIiLAorICAgICJDdXQiOiAiQ29ydGFyIiwKKyAgICAiRGlyZWN0b3J5IjogIkRpcmVjdG9yaW8iLAorICAgICJEaXJlY3RvcnkgVXAiOiAiRGlyZWN0b3JpbyBzdXBlcmlvciIsCisgICAgIkVkaXQiOiAiZWRpdGFyIiwKKyAgICAiRmlsZW5hbWU6IjogIk5vbWJyZSBkZWwgZmljaGVybzoiLAorICAgICJGbGlwIEhvcml6b250YWwiOiAiaW52ZXJ0aXIgaG9yaXpvbnRhbG1lbnRlIiwKKyAgICAiRmxpcCBJbWFnZSI6ICJpbnZlcnRpciBpbWFnZW4iLAorICAgICJGbGlwIFZlcnRpY2FsIjogImludmVydGlyIHZlcnRpY2FsbWVudGUiLAorICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiTm8gaGF5IHNvcG9ydGUgcGFyYSBpbcOhZ2VuZXMgZW4gZm9ybWF0byBHSUYuIiwKKyAgICAiSGVpZ2h0IjogIkFsdG8iLAorICAgICJIZWlnaHQ6IjogIkFsdG86IiwKKyAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiRGlyZWN0b3JpbyBkZSBpbmljaW8gaW52w6FsaWRvOiIsCisgICAgIkpQRUcgSGlnaCI6ICJKUEVHIGFsdG8iLAorICAgICJKUEVHIExvdyI6ICJKUEVHIGJham8iLAorICAgICJKUEVHIE1lZGl1bSI6ICJKUEVHIG1lZGlvIiwKKyAgICAiTGVmdCI6ICJJenF1aWVyZGEiLAorICAgICJMb2FkaW5nIjogIkNhcmdhciIsCisgICAgIkxvY2siOiAiQmxvcXVlYXIiLAorICAgICJNYXJnaW4iOiAiTWFyZ2VuIiwKKyAgICAiTWFya2VyIjogIk1hcmNhZG9yIiwKKyAgICAiTWVhc3VyZSI6ICJEaW1lbnNpb25lcyIsCisgICAgIk1pZGRsZSI6ICJNZWRpbyIsCisgICAgIk5ldyBGb2xkZXIiOiAiQ3JlYXIgZGlyZWN0b3JpbyIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTnVldmEgdmVudGFuYSAoX2JsYW5rKSIsCisgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICJObyBoYXkgaW1hZ2VuIiwKKyAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJWYWPDrW8gKCB1c2FyIGltcGzDrWNpdG8gKSIsCisgICAgIk5vdCBzZXQiOiAiTm8gZGVmaW5pZG8iLAorICAgICJPSyI6ICJBY2VwdGFyIiwKKyAgICAiUGFkZGluZyI6ICJSZWxsZW5vIChQYWRkaW5nKSIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zaWNpw7NuIGRlIGxhIGltYWdlbiIsCisgICAgIlByZXZpZXciOiAiUHJldmlzdWFsaXphciIsCisgICAgIlF1YWxpdHk6IjogIkNhbGlkYWQiLAorICAgICJSZWZyZXNoIjogIkFjdHVhbGl6YXIiLAorICAgICJSZXNpemUiOiAiQ2FtYmlhciB0YW1hw7FvIiwKKyAgICAiUmlnaHQiOiAiRGVyZWNoYSIsCisgICAgIlJvdGF0ZSI6ICJHaXJhciIsCisgICAgIlJvdGF0ZSBJbWFnZSI6ICJHaXJhciBpbWFnZW4iLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiTWlzbW8gbWFyY28gKF9zZWxmKSIsCisgICAgIlNhdmUiOiAiR3VhcmRhciIsCisgICAgIlN0YXJ0IFg6IjogIkluaWNpbyBYIiwKKyAgICAiU3RhcnQgWToiOiAiSW5pY2lvIFkiLAorICAgICJUZXh0dG9wIjogIlRleHRvIFN1cGVyaW9yIiwKKyAgICAiVGl0bGUgKHRvb2x0aXApIjogIlTDrXR1bG8gKFRvb2x0aXApOiIsCisgICAgIlRvcCI6ICJTdXBlcmlvciIsCisgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiTWFyY28gc3VwZXJpb3IgKF90b3ApIiwKKyAgICAiVHJhc2giOiAiQmFzdXJhIiwKKyAgICAiVXBsb2FkIjogIlN1YmlyIiwKKyAgICAiVzoiOiAiQjoiLAorICAgICJXaWR0aCI6ICJBbmNobyIsCisgICAgIldpZHRoOiI6ICJBbmNobzoiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBbGlnbjoiOiAiQWxpbmVhZG86IiwKKyAgICAgICAgIkFuZ2xlOiI6ICLDgW5ndWxvOiIsCisgICAgICAgICJCb3JkZXI6IjogIkJvcmRlOiIsCisgICAgICAgICJDb2xvcjoiOiAiQ29sb3I6IiwKKyAgICAgICAgIkRlbGV0ZSBmaWxlPyI6ICLCv0JvcnJhciBmaWNoZXJvPyIsCisgICAgICAgICJEZWxldGUgZm9sZGVyPyI6ICLCv0JvcnJhciBkaXJlY3RvcmlvPyIsCisgICAgICAgICJEZXNjcmlwdGlvbjoiOiAiRGVzY3JpcGNpw7NuOiIsCisgICAgICAgICJGaWxlIHNhdmVkLiI6ICJGaWNoZXJvIGd1YXJkYWRvLiIsCisgICAgICAgICJGaWxlIHdhcyBub3Qgc2F2ZWQuIjogImVsIGZpY2hlcm8gbm8gaGEgc2lkbyBndWFyZGFkby4iLAorICAgICAgICAiRm9sZGVyIE5hbWU6IjogIk5vbWJyZSBkZWwgZGlyZWN0b3JpbzoiLAorICAgICAgICAiSCBTcGFjZSI6ICJlc3BhY2lvIGhvcml6b250YWwiLAorICAgICAgICAiSW1hZ2UgRmlsZSI6ICJGaWNoZXJvIiwKKyAgICAgICAgIkltYWdlIEZvcm1hdCI6ICJGb3JtYXRvOiIsCisgICAgICAgICJJbWFnZSBNYW5hZ2VyIjogIkVkaXRvciBkZSBpbcOhZ2VuZXMiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogImluc2VydGFyIGltYWdlbiIsCisgICAgICAgICJJbnZhbGlkIGZvbGRlciBuYW1lLCBwbGVhc2UgY2hvb3NlIGFub3RoZXIgZm9sZGVyIG5hbWUuIjogIk5vbWJyZSBkZSBkaXJlY3RvcmlvIGludsOhbGlkby4uLiBwb3IgZmF2b3IgZWxpamEgb3RybyBub21icmUuIiwKKyAgICAgICAgIk1hcmdpbjoiOiAiTWFyZ2VuIGV4dGVyaW9yOiIsCisgICAgICAgICJObyBJbWFnZSBzZWxlY3RlZC4iOiAiTm8gaGEgc2VsZWNjaW9uYWRvIGltYWdlbi4iLAorICAgICAgICAiTm8gSW1hZ2VzIEZvdW5kIjogIk5vIHNlIGhhIGVuY29udHJhZG8gaW1hZ2VuIiwKKyAgICAgICAgIlBhZGRpbmc6IjogIk1hcmdlbiBpbnRlcmlvcjoiLAorICAgICAgICAiUGxlYXNlIGRlbGV0ZSBhbGwgZmlsZXMvZm9sZGVycyBpbnNpZGUgdGhlIGZvbGRlciB5b3Ugd2lzaCB0byBkZWxldGUgZmlyc3QuIjogIlByaW1lcm8gdGllbmUgcXVlIGJvcnJhciB0b2RvYXMgbG9zIGZpY2hlcm9zIGRlIGVzdGUgZGlyZWN0b3Jpby4iLAorICAgICAgICAiUm90YXRlIDE4MCDCsCI6ICJHaXJhciAxODDCuiIsCisgICAgICAgICJSb3RhdGUgOTAgwrAgQ0NXIjogIkdpcmFyIDkwwrogc2VudGlkbyBjb250cmFyZWxvaiIsCisgICAgICAgICJSb3RhdGUgOTAgwrAgQ1ciOiAiR2lyYXIgOTDCuiBzZW50aWRvIHJlbG9qIiwKKyAgICAgICAgIlVwbG9hZDoiOiAiU3ViaXI6IiwKKyAgICAgICAgIlVwbG9hZGluZy4uLiI6ICJTdWJpci4uLiIsCisgICAgICAgICJWIFNwYWNlIjogImVzcGFjaW8gdmVydGljYWwiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9ldS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2V1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNTBiOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9ldS5qcwpAQCAtMCwwICsxLDM2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImV1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICJJcnVkaWFyZW4gYmVoZWthbGRlYW4iLAorICAgICJBYnNtaWRkbGUiOiAiSXJ1ZGlhcmVuIGVyZGlhbiIsCisgICAgIkJhc2VsaW5lIjogIklydWRpYXJlbiBvaW5lYW4iLAorICAgICJCb3R0b20iOiAiQmVoZWFuIiwKKyAgICAiQ2FuY2VsIjogIlV0emkiLAorICAgICJMZWZ0IjogIkV6a2VycmV0YXJhIiwKKyAgICAiTWlkZGxlIjogIkVyZGlhbiIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTGVoaW8gYmVycmlhbiAoX2JsYW5rKSIsCisgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiQmF0IGVyZSBleiAoaW1wbGl6aXR1a2kgZXJhYmlsaSkiLAorICAgICJOb3Qgc2V0IjogIkV6IGdhaXR1YSIsCisgICAgIk9LIjogIkFkb3MiLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIklydWRpYXJlbiBrb2thcGVuYSIsCisgICAgIlByZXZpZXciOiAiQXVycmViaXN0YSIsCisgICAgIlJpZ2h0IjogIkVza3VpbmV0YXJhIiwKKyAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIkZyYW1lIGJlcmVhbiAoX3NlbGYpIiwKKyAgICAiVGV4dHRvcCI6ICJJcnVkaWFyZW4gZ29pYWxkZWFuIiwKKyAgICAiVGl0bGUgKHRvb2x0aXApIjogIkl6ZW5idXJ1YSAoYXJnaWJpZGVhKToiLAorICAgICJUb3AiOiAiR29pYW4iLAorICAgICJUb3AgZnJhbWUgKF90b3ApIjogIkdvaWtvIGZyYW1lLWFuIChfdG9wKSIsCisgICAgIldpZHRoIjogIlphYmFsZXJhOiIsCisgICAgIldpZHRoOiI6ICJaYWJhbGVyYToiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9mYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2ZhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZDk0NWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9mYS5qcwpAQCAtMCwwICsxLDM2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICLYr9mC24zZgtinINm+2KfbjNuM2YYiLAorICAgICJBYnNtaWRkbGUiOiAi2K/ZgtuM2YLYpyDZiNiz2LciLAorICAgICJCYXNlbGluZSI6ICLYp9io2KrYr9in24wg2K7YtyIsCisgICAgIkJvdHRvbSI6ICLZvtin24zbjNmGIiwKKyAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIsCisgICAgIkxlZnQiOiAi2obZviIsCisgICAgIk1pZGRsZSI6ICLZiNiz2LciLAorICAgICJOZXcgd2luZG93IChfYmxhbmspIjogItm+2YbYrNix2Ycg2KzYr9uM2K8gKF9ibGFuaykiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogItmH24zahtqp2K/Yp9mFICjYp9iz2KrZgdin2K/ZhyDYp9iyINio2K/ZiNmGINi02LHYtykiLAorICAgICJOb3Qgc2V0IjogItiq2YbYuNuM2YUg2YbYtNiv2YciLAorICAgICJPSyI6ICLYqNmE2YciLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogItmF2YjZgti524zYqiDbjNin2KjbjCDYqti12YjbjNixIiwKKyAgICAiUHJldmlldyI6ICLZvtuM2LQg2YbZhdin24zYtCIsCisgICAgIlJpZ2h0IjogItix2KfYs9iqIiwKKyAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogItmB2LHbjNmFINuM2qnYs9in2YYgKF9zZWxmKSIsCisgICAgIlRleHR0b3AiOiAi2KjYp9mE2KfbjCDZhdiq2YYiLAorICAgICJUaXRsZSAodG9vbHRpcCkiOiAi2LnZhtmI2KfZhiAo2LHYp9mH2YbZhdin24wg24zaqSDYrti324wpIiwKKyAgICAiVG9wIjogItio2KfZhNinIiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICLZgdix24zZhSDYqNin2YTYp9uM24wgKF90b3ApIiwKKyAgICAiV2lkdGgiOiAi2LfZiNmEIiwKKyAgICAiV2lkdGg6IjogIti32YjZhCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2ZpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvZmkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZkNDViYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2ZpLmpzCkBAIC0wLDAgKzEsMzAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmkiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxpZ24iOiAiS29oZGlzdHVzIiwKKyAgICAiQmFzZWxpbmUiOiAiVGFrYXJhamEiLAorICAgICJCb3JkZXIiOiAiUmV1bmEiLAorICAgICJCb3R0b20iOiAiQWxsZSIsCisgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIiwKKyAgICAiQ29sb3IiOiAiVsOkcmkiLAorICAgICJMZWZ0IjogIlZhc2VuIiwKKyAgICAiTWFyZ2luIjogIk1hcmdpbmFhbGkiLAorICAgICJNaWRkbGUiOiAiS2Vza2VsbGUiLAorICAgICJPSyI6ICJIeXbDpGtzeSIsCisgICAgIlBhZGRpbmciOiAiUGFsc3RhbnTDpHl0ZSIsCisgICAgIlJpZ2h0IjogIk9pa2VhIiwKKyAgICAiVG9wIjogIllsw7ZzIiwKKyAgICAiV2lkdGgiOiAiTGV2ZXlzIiwKKyAgICAiV2lkdGg6IjogIkxldmV5cyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvZnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg2NTcxMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsMTM4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICJBYnNib3R0b20iLAorICAgICJBYnNtaWRkbGUiOiAiQWJzbWlkZGxlIiwKKyAgICAiQWxpZ24iOiAiQWxpZ25lbWVudCIsCisgICAgIkFsdCI6ICJBbHQiLAorICAgICJCYXNlbGluZSI6ICJCYXNlbGluZSIsCisgICAgIkJvcmRlciI6ICJCb3JkdXJlIiwKKyAgICAiQm9yZGVyIENvbG9yIjogIkNvdWxldXIgZGUgbGEgYm9yZHVyZSIsCisgICAgIkJvdHRvbSI6ICJCYXMiLAorICAgICJDYW5jZWwiOiAiQW5udWxlciIsCisgICAgIkNsZWFyIjogIkVmZmFjZXIiLAorICAgICJDb2xvciI6ICJDb3VsZXVyIiwKKyAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIk1haW50ZW5pciBsZXMgcHJvcG9ydGlvbnMiLAorICAgICJDb3B5IjogIkNvcGllciIsCisgICAgIkNyb3AiOiAiUmVjYWRyZXIiLAorICAgICJDdXQiOiAiQ291cGVyIiwKKyAgICAiRGlyZWN0b3J5IjogIlLDqXBlcnRvaXJlIiwKKyAgICAiRGlyZWN0b3J5IFVwIjogIlJlbW9udGVyIiwKKyAgICAiRWRpdCI6ICJNb2RpZmllciIsCisgICAgIkZpbGUgTWFuYWdlciI6ICJHZXN0aW9ubmFpcmUgZGUgZmljaGllcnMiLAorICAgICJGaWxlbmFtZToiOiAiTm9tIGR1IGZpY2hpZXI6IiwKKyAgICAiRmlsZXNpemU6IjogIlRhaWxsZSBkdSBmaWNoaWVyOiIsCisgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICJTeW3DqXRyaWUgaG9yLiIsCisgICAgIkZsaXAgSW1hZ2UiOiAiU3ltw6l0cmllIiwKKyAgICAiRmxpcCBWZXJ0aWNhbCI6ICJTeW3DqXRyaWUgdmVyLiIsCisgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICJMZSBmb3JtYXQgR0lGIG4nZXN0IHBhcyBzdXBwb3J0w6ksIMOpZGl0aW9uIGQnaW1hZ2UgaW1wb3NzaWJsZS4iLAorICAgICJIZWlnaHQiOiAiSGF1dGV1ciIsCisgICAgIkhlaWdodDoiOiAiSGF1dGV1cjoiLAorICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIkluc8OpcmVyIHVuIGxpZW4gdmVycyBmaWNoaWVyIiwKKyAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiRG9zc2llciByYWNpbmUgaW52YWxpZGU6IiwKKyAgICAiSlBFRyBIaWdoIjogIkpQRUcgaGF1dCIsCisgICAgIkpQRUcgTG93IjogIkpQRUcgYmFzIiwKKyAgICAiSlBFRyBNZWRpdW0iOiAiSlBFRyBtb3llbiIsCisgICAgIkxlZnQiOiAiR2F1Y2hlIiwKKyAgICAiTG9hZGluZyI6ICJDaGFyZ2VtZW50IiwKKyAgICAiTG9jayI6ICJWZXJyb3VpbGxlciIsCisgICAgIk1hcmdpbiI6ICJNYXJnZSIsCisgICAgIk1hcmtlciI6ICJNYXJxdWV1ciIsCisgICAgIk1lYXN1cmUiOiAiUsOoZ2xlIiwKKyAgICAiTWlkZGxlIjogIk1pbGlldSIsCisgICAgIk5ldyBGb2xkZXIiOiAiTm91dmVhdSBkb3NzaWVyIiwKKyAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOb3V2ZWxsZSBmZW7DqnRyZSAoX2JsYW5rKSIsCisgICAgIk5vIEZpbGVzIEZvdW5kIjogIkF1Y3VuIGZpY2hpZXIiLAorICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiQXVjdW5lIGltYWdlIGRpc3BvbmlibGUiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIkF1Y3VuZSAoaW1wbGljaXRlKSIsCisgICAgIk5vdCBzZXQiOiAiSW5kw6lmaW5pIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQYWRkaW5nIjogIk1hcmdlIGludMOpcmlldXJlIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJQb3NpdGlvbiBkZSBjZXR0ZSBpbWFnZSIsCisgICAgIlByZXZpZXciOiAiQXBlcsOndSAiLAorICAgICJRdWFsaXR5OiI6ICJRdWFsaXTDqToiLAorICAgICJSZWZyZXNoIjogIkFjdHVhbGlzZXIiLAorICAgICJSZW5hbWUiOiAiUmVub21tZXIiLAorICAgICJSZXNpemUiOiAiUmVkaW1lbi4iLAorICAgICJSaWdodCI6ICJEcm9pdGUiLAorICAgICJSb3RhdGUiOiAiUGl2b3RlciIsCisgICAgIlJvdGF0ZSBJbWFnZSI6ICJQaXZvdGVyIGwnaW1hZ2UiLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiTcOqbWUgZnJhbWUgKF9zZWxmKSIsCisgICAgIlNhdmUiOiAiRW5yZWdpc3RyZXIiLAorICAgICJTdGFydCBYOiI6ICJEw6lwYXJ0IFgiLAorICAgICJTdGFydCBZOiI6ICJEw6lwYXJ0IFkiLAorICAgICJUYXJnZXQgV2luZG93IjogIkZlbsOqdHJlIGNpYmxlIiwKKyAgICAiVGV4dHRvcCI6ICJUZXh0dG9wIiwKKyAgICAiVGl0bGUgKHRvb2x0aXApIjogIlRvb2x0aXAiLAorICAgICJUb2dnbGUgbWFya2VyIGNvbG9yIjogIkNoYW5nZXIgbGEgY291bGV1ciBkdSBtYXJxdWV1ciIsCisgICAgIlRvcCI6ICJIYXV0IiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJGcmFtZSBwcmluY2lwYWxlIChfdG9wKSIsCisgICAgIlRyYXNoIjogIkNvcmJlaWxsZSIsCisgICAgIlVwbG9hZCI6ICJFbnZveWVyIiwKKyAgICAiVzoiOiAiVzoiLAorICAgICJXaWR0aCI6ICJMYXJnZXVyIiwKKyAgICAiV2lkdGg6IjogIkxhcmdldXI6IiwKKyAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIlZvdXMgZGV2ZXogc8OpbGVjdGlvbm5lciBkdSB0ZXh0ZSBhdmFudCBkZSBmYWlyZSB1biBub3V2ZWF1IGxpZW4uIiwKKyAgICAiWm9vbSI6ICJab29tIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQW5nbGU6IjogIkFuZ2xlOiIsCisgICAgICAgICJDYW5jZWxsZWQgcmVuYW1lLiI6ICJSZW5vbW1hZ2UgYW5udWzDqS4iLAorICAgICAgICAiQ2Fubm90IHVwbG9hZCAkZXh0ZW5zaW9uIEZpbGVzLiBQZXJtaXNzaW9uIGRlbmllZC4iOiAiSW1wb3NzaWJsZSBkJ2Vudm95ZXIgZGVzIGZpY2hpZXJzICRleHRlbnNpb24uIiwKKyAgICAgICAgIkNhbm5vdCB1cGxvYWQuIE1heGltdW0gZm9sZGVyIHNpemUgcmVhY2hlZC4gRGVsZXRlIHVud2FudGVkIGZpbGVzIGFuZCB0cnkgYWdhaW4uIjogIkxhIHRhaWxsZSBtYXhpbWFsZSBwb3VyIGxlIGRvc3NpZXIgZXN0IGF0dGVpbnRlLiBWb3VzIGRldmV6IGVmZmFjZXIgZGVzIGZpY2hpZXJzIHBvdXIgbGliw6lyZXIgZGUgbGEgcGxhY2UiLAorICAgICAgICAiQ29weSBcIiRmaWxlXCIgZnJvbSBcIiRkaXJcIiBoZXJlIjogIkNvcGllciBcIiRmaWxlXCIgZHUgZG9zc2llciBcIiRkaXJcIiBpY2kiLAorICAgICAgICAiQ29weSBmb2xkZXIgXCIkZmlsZVwiIGZyb20gXCIkZGlyXCIgaGVyZSI6ICJDb3BpZXIgbGUgZG9zc2llciBcIiRmaWxlXCIgZGUgXCIkZGlyXCIgaWNpIiwKKyAgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgZGVzdGluYXRpb24gZm9sZGVyLiI6ICJJbXBvc3NpYmxlIGRlIGNyw6llciBsZSBkb3NzaWVyIGRlIGRlc3RpbmF0aW9uLiIsCisgICAgICAgICJEYXRlIE1vZGlmaWVkIjogIkRhdGUgZGUgbW9kaWZpY2F0aW9uIiwKKyAgICAgICAgIkRlbGV0ZSBmaWxlIFwiJGZpbGVcIj8iOiAiRWZmYWNlciBsZSBmaWNoaWVyIFwiJGZpbGVcIiA/IiwKKyAgICAgICAgIkRlbGV0ZSBmb2xkZXIgXCIkZGlyXCI/IjogIkVmZmFjZXIgbGUgZG9zc2llciBcIiRkaXJcIiA/IiwKKyAgICAgICAgIkRlc2NyaXB0aW9uOiI6ICJEZXNjcmlwdGlvbjoiLAorICAgICAgICAiRGVzdGluYXRpb24gZmlsZS9mb2xkZXIgYWxyZWFkeSBleGlzdHMuIjogIkZpY2hpZXIvZG9zc2llciBkw6lqw6AgZXhpc3RhbnQuIiwKKyAgICAgICAgIkZpbGUgXCIkZmlsZVwiIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZC4iOiAiRmljaGllciBcIiRmaWxlXCIgZW52b3nDqS4iLAorICAgICAgICAiRmlsZSBOYW1lIjogIk5vbSBkdSBmaWNoaWVyIiwKKyAgICAgICAgIkZpbGUgcGFzdGVkIE9LLiI6ICJGaWNoaWVyIGNvcnJlY3RlbWVudCBjb2xsw6kuIiwKKyAgICAgICAgIkZpbGUgc2F2ZWQuIjogIkZpY2hpZXIgZW5yZWdpc3Ryw6kuIiwKKyAgICAgICAgIkZpbGUgd2FzIG5vdCBzYXZlZC4iOiAiTGUgZmljaGllciBuJ2EgcGFzIMOpdMOpIGVucmVnaXN0csOpLiIsCisgICAgICAgICJGb2xkZXIgTmFtZToiOiAiTm9tIGR1IGRvc3NpZXI6IiwKKyAgICAgICAgIkZvbGRlciBpcyBub3QgZW1wdHkuIFBsZWFzZSBkZWxldGUgYWxsIEZpbGVzIGFuZCBTdWJmb2xkZXJzIGluc2lkZS4iOiAiTGUgZG9zc2llciBuJ2VzdCBwYXMgdmlkZS4gRWZmYWNleiB0b3VzIGxlcyBmaWNoaWVycyBldCBzb3VzLWRvc3NpZXJzIHF1J2lsIGNvbnRpZW50LiIsCisgICAgICAgICJGcmVlIFNwYWNlIjogIkVzcGFjZSBsaWJyZSIsCisgICAgICAgICJJbWFnZSBGaWxlIjogIkZpY2hpZXIgaW1hZ2UiLAorICAgICAgICAiSW1hZ2UgRm9ybWF0IjogIkZvcm1hdCBkJ2ltYWdlOiIsCisgICAgICAgICJJbWFnZSBTaXplIjogIkRpbWVuc2lvbnMgZGUgbCdpbWFnZSIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiSW5zw6lyZXIgdW5lIGltYWdlIiwKKyAgICAgICAgIkludmFsaWQgZm9sZGVyIG5hbWUsIHBsZWFzZSBjaG9vc2UgYW5vdGhlciBmb2xkZXIgbmFtZS4iOiAiTm9tIGRlIGRvc3NpZXIgaW52YWxpZGUgLSBjaG9pc2lzc2V6IHVuIGF1dHJlIG5vbWQgZGUgZG9zc2llci4iLAorICAgICAgICAiTGlzdCBWaWV3IjogIlZ1ZSBsaXN0ZSIsCisgICAgICAgICJNYXhpbXVtIGZpbGUgc2l6ZSBbJG1heF9zaXplIEtCXSBleGNlZWRlZC4iOiAiVGFpbGxlIGRlIGZpY2hpZXIgWyRtYXhfc2l6ZSBLb10gZMOpcGFzc8OpZS4iLAorICAgICAgICAiTW92ZSBcIiRmaWxlXCIgZnJvbSBcIiRkaXJcIiBoZXJlIjogIkTDqXBsYWNlciBcIiRmaWxlXCIgZHUgZG9zc2llciBcIiRkaXJcIiBpY2kiLAorICAgICAgICAiTW92ZSBmb2xkZXIgXCIkZmlsZVwiIGZyb20gXCIkZGlyXCIgaGVyZSI6ICJEw6lwbGFjZXIgbGUgZG9zc2llciBcIiRmaWxlXCIgZGUgXCIkZGlyXCIgaWNpIiwKKyAgICAgICAgIk5hbWUiOiAiTm9tIiwKKyAgICAgICAgIk5vIEltYWdlIHNlbGVjdGVkLiI6ICJBdWN1bmUgaW1hZ2Ugc8OpbGVjdGlvbm7DqWUuIiwKKyAgICAgICAgIk90aGVyIjogIkF1dHJlLi4uIiwKKyAgICAgICAgIlBhc3RlIjogIkNvbGxlciIsCisgICAgICAgICJQYXN0ZSBmYWlsZWQuXG5NYXliZSBmb2xkZXIgZG9lc24ndCBoYXZlIHdyaXRlIHBlcm1pc3Npb24uIjogIkVjaGVjIGxvcnMgZHUgY29sbGVyLlxuTGUgZG9zc2llciBuJ8OgIHBldXQgw6p0cmUgcGFzIGxlcyBkcm9pdHMgZCfDqWNyaXR1cmUuIiwKKyAgICAgICAgIlBsZWFzZSBkZWxldGUgYWxsIGZpbGVzL2ZvbGRlcnMgaW5zaWRlIHRoZSBmb2xkZXIgeW91IHdpc2ggdG8gZGVsZXRlIGZpcnN0LiI6ICJFZmZhY2V6IHMnaWwgdm91cyBwbGHDrnQgdG91cyBsZXMgZmljaGllcnMvZG9zc2llcnMgZGFucyBsZSBkb3NzaWVyIHF1ZSB2b3VzIHNvdWhhaXRleiBlZmZhY2VyIGQnYWJvcmQuIiwKKyAgICAgICAgIlBsZWFzZSBlbnRlciBuYW1lIGZvciBuZXcgZm9sZGVyLi4uIjogIkVudHJleiB1biBub20gcG91ciBsZSBub3V2ZWF1IGRvc3NpZXIuLi4iLAorICAgICAgICAiUGxlYXNlIGVudGVyIG5ldyBuYW1lIGZvciB0aGlzIGZpbGUuLi4iOiAiRW50cmV6IHVuIG5vdXZlYXUgbm9tIHBvdXIgY2UgZmljaGllci4uLiIsCisgICAgICAgICJQbGVhc2UgZW50ZXIgbmV3IG5hbWUgZm9yIHRoaXMgZm9sZGVyLi4uIjogIkVudHJleiB1biBub3V2ZWF1IG5vbSBwb3VyIGNlIGRvc3NpZXIuLi4iLAorICAgICAgICAiUm90YXRlIDE4MCDCsCI6ICJSb3RhdGlvbiDDoCAxODDCsCIsCisgICAgICAgICJSb3RhdGUgOTAgwrAgQ0NXIjogIlJvdGF0aW9uIMOgIDkwwrAgYW50aWhvcmFpcmUiLAorICAgICAgICAiUm90YXRlIDkwIMKwIENXIjogIlJvdGF0aW9uIMOgIDkwwrAgaG9yYWlyZSIsCisgICAgICAgICJTaXplIjogIlRhaWxsZSIsCisgICAgICAgICJTb3VyY2UgZmlsZS9mb2xkZXIgbm90IGZvdW5kLiI6ICJEb3NzaWVyIG91IGZpY2hpZXIgc291cmNlIGludHJvdXZhYmxlLiIsCisgICAgICAgICJUaHVtYm5haWwgVmlldyI6ICJWdWUgbWluaWF0dXJlcyIsCisgICAgICAgICJUb3RhbCBTaXplIjogIlRhaWxsZSB0b3RhbGUiLAorICAgICAgICAiVG90YWwgU2l6ZSA6ICRtYXhfZm9sZGVyc2l6ZV9tYiBNQiwgRnJlZSBTcGFjZTogJGZyZWVfc3BhY2UiOiAiVGFpbGxlIG1heGltYWxlOiAkbWF4X2ZvbGRlcnNpemVfbWIgTW8sIGxpYnJlOiAkZnJlZV9zcGFjZSIsCisgICAgICAgICJVbmFibGUgdG8gcmVuYW1lIGZpbGUuIEZpbGUgb2YgdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cyBvclxuZm9sZGVyIGRvZXNuJ3QgaGF2ZSB3cml0ZSBwZXJtaXNzaW9uLiI6ICJJbXBvc3NpYmxlIGRlIHJlbm9tbWVyIGxlIGZpY2hpZXIuIFxuIFVuIGZpY2hpZXIgZGUgbcOqbWUgbm9tIGV4aXN0ZSBkw6lqw6Agb3UgbCfDqWNyaXR1cmUgZXN0IGltcG9zc2libGUuIiwKKyAgICAgICAgIlVuYWJsZSB0byB1cGxvYWQgRmlsZS4gXG5FaXRoZXIgTWF4aW11bSBmaWxlIHNpemUgWyRtYXhfc2l6ZSBLQl0gZXhjZWVkZWQgb3JcbkZvbGRlciBkb2Vzbid0IGhhdmUgd3JpdGUgcGVybWlzc2lvbi4iOiAiSW1wb3NzaWJsZSBkJ2Vudm95ZXIgbGUgZmljaGllci5cblNvaXQgbGEgdGFpbGxlIG1heGltYWxlIFskbWF4X3NpemUgS29dIGVzdCBkw6lwYXNzw6llXG5zb2l0IGxlIGRvc3NpZXIgbmUgcG9zc8OoZGUgcGFzIGxlcyBkcm9pdHMgZCfDqWNyaXR1cmUuIiwKKyAgICAgICAgIlVudGl0bGVkIjogIlNhbnMgdGl0cmUiLAorICAgICAgICAiVXBsb2FkaW5nIjogIkVudm9pIiwKKyAgICAgICAgIlVwbG9hZGluZy4uLiI6ICJFbnZvaSBlbiBjb3Vycy4uLiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2ZyX2NhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvZnJfY2EuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRkYjUxMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2ZyX2NhLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnJfY2EiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRVhURU5ERURGSUxFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvZ2IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9nYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjM4ODgwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvZ2IuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJnYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9oZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0Y2Y2MDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9oZS5qcwpAQCAtMCwwICsxLDM5IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImhlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsaWduIjogIteZ16nXldeoIiwKKyAgICAiQmFzZWxpbmUiOiAi16fXlSDXkdeh15nXoSIsCisgICAgIkJvcmRlciI6ICLXkteR15XXnCIsCisgICAgIkJvdHRvbSI6ICLXqteX16rXldefIiwKKyAgICAiQ2FuY2VsIjogIteR15nXmNeV15wiLAorICAgICJDb2xvciI6ICLXpteR16IiLAorICAgICJDb3B5IjogIteU16LXqtenIiwKKyAgICAiQ3V0IjogIteS15bXldeoIiwKKyAgICAiSGVpZ2h0IjogIteS15XXkdeUIiwKKyAgICAiSGVpZ2h0OiI6ICLXkteV15HXlCIsCisgICAgIkxlZnQiOiAi16nXnteQ15wiLAorICAgICJNYXJnaW4iOiAi16nXldec15nXmdedIiwKKyAgICAiTWlkZGxlIjogIteQ157XpteiIiwKKyAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICLXl9ec15XXnyDXl9eT16kgKF9ibGFuaykiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogItec15zXkCAo15TXqdeq157XqSDXkS1mcmFtZSDXlNen15nXmdedKSIsCisgICAgIk9LIjogIteQ15nXqdeV16giLAorICAgICJQYWRkaW5nIjogIteo15nXldeV15cg15HXqdeV15zXmdeZ150iLAorICAgICJSaWdodCI6ICLXmdee15nXnyIsCisgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICLXkNeV16rXlSBmcmFtZSAoX3NlbGYpIiwKKyAgICAiVGl0bGUgKHRvb2x0aXApIjogIteb15XXqteo16ogKHRvb2x0aXApOiIsCisgICAgIlRvcCI6ICLXotec15nXldefIiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJGcmFtZSDXotec15nXldefIChfdG9wKSIsCisgICAgIldpZHRoIjogIteo15XXl9eRIiwKKyAgICAiV2lkdGg6IjogIteo15XXl9eRIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRVhURU5ERURGSUxFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9odS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODUxYjgwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvaHUuanMKQEAgLTAsMCArMSwyMiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJodSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiw5pqIGFibGFrIChfYmxhbmspIiwKKyAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJOaW5jcyAodXNlIGltcGxpY2l0KSIsCisgICAgIk9LIjogIlJlbmRiZW4iLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiVWd5YW5hYmJhIGEga2VyZXRiZSAoX3NlbGYpIiwKKyAgICAiVGl0bGUgKHRvb2x0aXApIjogIkPDrW0gKHRvb2x0aXApOiIsCisgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiRmVsc8WRIGtlcmV0IChfdG9wKSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvaXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhhZDQwZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2l0LmpzCkBAIC0wLDAgKzEsMzcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaXQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxpZ24iOiAiQWxsaW5lYSIsCisgICAgIkJhc2VsaW5lIjogIkFsbGluZWFtZW50byIsCisgICAgIkJvcmRlciI6ICJCb3JkbyIsCisgICAgIkJvdHRvbSI6ICJCYXNzbyIsCisgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iLAorICAgICJDb2xvciI6ICJDb2xvcmUiLAorICAgICJIZWlnaHQiOiAiQWx0ZXp6YSIsCisgICAgIkhlaWdodDoiOiAiQWx0ZXp6YSIsCisgICAgIkxlZnQiOiAiU2luaXN0cmEiLAorICAgICJNYXJnaW4iOiAiTWFyZ2luZSIsCisgICAgIk1pZGRsZSI6ICJDZW50cmFsZSIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTnVvdmEgZmluZXN0cmEgKF9ibGFuaykiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIk5pZW50ZSAodXNhIGltcGxpY2l0bykiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBhZGRpbmciOiAiUGFkZGluZyIsCisgICAgIlJpZ2h0IjogIkRlc3RyYSIsCisgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJTdGVzc2EgZnJhbWUgKF9zZWxmKSIsCisgICAgIlRpdGxlICh0b29sdGlwKSI6ICJUaXRsZSAoc3VnZ2VyaW1lbnRvKToiLAorICAgICJUb3AiOiAiQWx0byIsCisgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiUGFnaW5hIGludGVyYSAoX3RvcCkiLAorICAgICJXaWR0aCI6ICJMYXJnaGV6emEiLAorICAgICJXaWR0aDoiOiAiTGFyZ2hlenphIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRVhURU5ERURGSUxFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9qYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTFmNjM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvamEuanMKQEAgLTAsMCArMSwxNDIgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiamEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJzYm90dG9tIjogIuS4iyjntbblr77nmoQpIiwKKyAgICAiQWJzbWlkZGxlIjogIuS4reWkrijntbblr77nmoQpIiwKKyAgICAiQWxpZ24iOiAi6KGM5o+D44GIIiwKKyAgICAiQWx0IjogIkFsdCIsCisgICAgIkJhc2VsaW5lIjogIuODmeODvOOCueODqeOCpOODsyIsCisgICAgIkJvcmRlciI6ICLjg5zjg7zjg4Djg7wiLAorICAgICJCb3JkZXIgQ29sb3IiOiAi5aKD55WM6ImyOiIsCisgICAgIkJvdHRvbSI6ICLkuIsiLAorICAgICJDYW5jZWwiOiAi5Lit5q2iIiwKKyAgICAiQ2xlYXIiOiAi44Kv44Oq44KiIiwKKyAgICAiQ29sb3IiOiAi6ImyIiwKKyAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIue4puaoquavlOOCkuWbuuWumiIsCisgICAgIkNvcHkiOiAi44Kz44OU44O8IiwKKyAgICAiQ3JvcCI6ICLliIfjgormipzjgY0iLAorICAgICJDdXQiOiAi5YiH44KK5Y+W44KKIiwKKyAgICAiRGlyZWN0b3J5IjogIuODh+OCo+ODrOOCr+ODiOODqiIsCisgICAgIkRpcmVjdG9yeSBVcCI6ICLopqrjg4fjgqPjg6zjgq/jg4jjg6rjgbgiLAorICAgICJFZGl0IjogIue3qOmbhiIsCisgICAgIkZpbGUgTWFuYWdlciI6ICLjg5XjgqHjgqTjg6vjg57jg43jg7zjgrjjg6MiLAorICAgICJGaWxlbmFtZToiOiAi44OV44Kh44Kk44Or5ZCNOiIsCisgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICLlt6blj7Plj43ou6IiLAorICAgICJGbGlwIEltYWdlIjogIueUu+WDj+OCkuWPjei7oiIsCisgICAgIkZsaXAgVmVydGljYWwiOiAi5LiK5LiL5Y+N6LuiIiwKKyAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIkdJRuW9ouW8j+OBr+OCteODneODvOODiOOBleOCjOOBpuOBhOOBquOBhOOBn+OCgeOAgeeUu+WDj+e3qOmbhuOBp+OBjeOBvuOBm+OCk+OAgiIsCisgICAgIkhlaWdodCI6ICLpq5jjgZUiLAorICAgICJIZWlnaHQ6IjogIumrmOOBlToiLAorICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIuODleOCoeOCpOODq+OBuOOBruODquODs+OCr+OCkuaMv+WFpSIsCisgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIueEoeWKueOBquODh+OCo+ODrOOCr+ODiOODqjoiLAorICAgICJKUEVHIEhpZ2giOiAiSlBFRyDpq5jnlLvos6oiLAorICAgICJKUEVHIExvdyI6ICJKUEVHIOS9jueUu+izqiIsCisgICAgIkpQRUcgTWVkaXVtIjogIkpQRUcg5qiZ5rqWIiwKKyAgICAiTGVmdCI6ICLlt6YiLAorICAgICJMb2FkaW5nIjogIuODreODvOODieS4rSIsCisgICAgIkxvY2siOiAi44Ot44OD44KvIiwKKyAgICAiTWFyZ2luIjogIumWk+malCIsCisgICAgIk1hcmtlciI6ICLjg57jg7zjgqvjg7wiLAorICAgICJNZWFzdXJlIjogIuioiOa4rCIsCisgICAgIk1pZGRsZSI6ICLkuK3lpK4iLAorICAgICJOZXcgRm9sZGVyIjogIuaWsOimj+ODleOCqeODq+ODgCIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAi5paw44GX44GE44Km44Kj44Oz44OJ44KmIChfYmxhbmspIiwKKyAgICAiTm8gRmlsZXMgRm91bmQiOiAi44OV44Kh44Kk44Or44GM44GC44KK44G+44Gb44KTIiwKKyAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIueUu+WDj+OBjOOBguOCiuOBvuOBm+OCkyIsCisgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi44Gq44GXICjjg4fjg5Xjgqnjg6vjg4jjgavku7vjgZvjgospIiwKKyAgICAiTm90IHNldCI6ICLjgarjgZciLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBhZGRpbmciOiAi5L2Z55m9IiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICLjgZPjga7nlLvlg4/jga7phY3nva4iLAorICAgICJQcmV2aWV3IjogIuihqOekuiIsCisgICAgIlF1YWxpdHk6IjogIueUu+izqjoiLAorICAgICJSZWZyZXNoIjogIuabtOaWsCIsCisgICAgIlJlbmFtZSI6ICLlkI3liY3jga7lpInmm7QiLAorICAgICJSZXNpemUiOiAi44K144Kk44K65aSJ5pu0IiwKKyAgICAiUmlnaHQiOiAi5Y+zIiwKKyAgICAiUm90YXRlIjogIuWbnui7oiIsCisgICAgIlJvdGF0ZSBJbWFnZSI6ICLnlLvlg4/jgpLlm57ou6IiLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAi6Ieq5bex44OV44Os44O844Og5YaFIChfc2VsZikiLAorICAgICJTYXZlIjogIuS/neWtmCIsCisgICAgIlN0YXJ0IFg6IjogIumWi+WniyBYIiwKKyAgICAiU3RhcnQgWToiOiAi6ZaL5aeLIFkiLAorICAgICJUYXJnZXQgV2luZG93IjogIuOCv+ODvOOCsuODg+ODiCIsCisgICAgIlRleHR0b3AiOiAi44OG44Kt44K544OI5LiK6YOoIiwKKyAgICAiVGl0bGUgKHRvb2x0aXApIjogIuOCv+OCpOODiOODqyIsCisgICAgIlRvcCI6ICLkuIoiLAorICAgICJUb3AgZnJhbWUgKF90b3ApIjogIuacgOS4iuS9jeODleODrOODvOODoCAoX3RvcCkiLAorICAgICJUcmFzaCI6ICLliYrpmaQiLAorICAgICJVcGxvYWQiOiAi44Ki44OD44OX44Ot44O844OJIiwKKyAgICAiVzoiOiAiVzoiLAorICAgICJXaWR0aCI6ICLluYUiLAorICAgICJXaWR0aDoiOiAi5bmFOiIsCisgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICLjg6rjg7Pjgq/jgpLkvZzmiJDjgZnjgovjgavjga/jg4bjgq3jgrnjg4jjgpLpgbjmip7jgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZnjgIIiLAorICAgICJab29tIjogIuaLoeWkp+eOhzoiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBbmdsZToiOiAi6KeS5bqmOiIsCisgICAgICAgICJCb3JkZXIgQ29sb3I6IjogIuWig+eVjOiJsjoiLAorICAgICAgICAiQm9yZGVyOiI6ICLlooPnlYznt5o6IiwKKyAgICAgICAgIkNhbmNlbGxlZCByZW5hbWUuIjogIuWQjeWJjeWkieabtOOCkuS4reatouOBl+OBvuOBl+OBn+OAgiIsCisgICAgICAgICJDYW5ub3QgdXBsb2FkICRleHRlbnNpb24gRmlsZXMuIFBlcm1pc3Npb24gZGVuaWVkLiI6ICIkZXh0ZW5zaW9uIOODleOCoeOCpOODq+OCkuOCouODg+ODl+ODreODvOODieOBp+OBjeOBvuOBm+OCk+OAguaTjeS9nOOBr+emgeatouOBleOCjOOBpuOBhOOBvuOBmeOAgiIsCisgICAgICAgICJDYW5ub3QgdXBsb2FkLiBNYXhpbXVtIGZvbGRlciBzaXplIHJlYWNoZWQuIERlbGV0ZSB1bndhbnRlZCBmaWxlcyBhbmQgdHJ5IGFnYWluLiI6ICLjgqLjg4Pjg5fjg63jg7zjg4njgafjgY3jgb7jgZvjgpPjgILjg5Xjgqnjg6vjg4Dlrrnph4/jga7kuIrpmZDjgavpgZTjgZfjgb7jgZfjgZ/jgILkuI3opoHjgarjg5XjgqHjgqTjg6vjgpLliYrpmaTjgZfjgabjgIHlho3oqabooYzjgZfjgabjgY/jgaDjgZXjgYTjgIIiLAorICAgICAgICAiQ29sb3I6IjogIuiJsjoiLAorICAgICAgICAiQ29weSBcIiRmaWxlXCIgZnJvbSBcIiRkaXJcIiBoZXJlIjogIlwiJGZpbGVcIiDjgpIgXCIkZGlyXCIg44GL44KJ44GT44GT44Gr44Kz44OU44O8IiwKKyAgICAgICAgIkNvcHkgZm9sZGVyIFwiJGZpbGVcIiBmcm9tIFwiJGRpclwiIGhlcmUiOiAi44OV44Kp44Or44OAIFwiJGZpbGVcIiDjgpIgXCIkZGlyXCIg44GL44KJ44GT44GT44Gr44Kz44OU44O8IiwKKyAgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgZGVzdGluYXRpb24gZm9sZGVyLiI6ICLou6LpgIHlhYjjg5Xjgqnjg6vjg4DjgpLkvZzmiJDjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ/jgIIiLAorICAgICAgICAiRGF0ZSBNb2RpZmllZCI6ICLmm7TmlrDml6UiLAorICAgICAgICAiRGVsZXRlIGZpbGUgXCIkZmlsZVwiPyI6ICLjg5XjgqHjgqTjg6sgXCIkZmlsZVwiIOOCkuWJiumZpOOBl+OBvuOBmeOBiz8iLAorICAgICAgICAiRGVsZXRlIGZvbGRlciBcIiRkaXJcIj8iOiAi44OV44Kp44Or44OAIFwiJGRpclwiIOOCkuWJiumZpOOBl+OBvuOBmeOBiz8iLAorICAgICAgICAiRGVzY3JpcHRpb246IjogIuiqrOaYjjoiLAorICAgICAgICAiRGVzdGluYXRpb24gZmlsZS9mb2xkZXIgYWxyZWFkeSBleGlzdHMuIjogIui7oumAgeWFiOODleOCoeOCpOODqy/jg5Xjgqnjg6vjg4Djga/jgZnjgafjgavlrZjlnKjjgZfjgb7jgZnjgIIiLAorICAgICAgICAiRmlsZSBcIiRmaWxlXCIgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkLiI6ICLjg5XjgqHjgqTjg6sgXCIkZmlsZVwiIOOBruOCouODg+ODl+ODreODvOODieOBq+aIkOWKn+OBl+OBvuOBl+OBn+OAgiIsCisgICAgICAgICJGaWxlIE5hbWUiOiAi44OV44Kh44Kk44Or5ZCNIiwKKyAgICAgICAgIkZpbGUgcGFzdGVkIE9LLiI6ICLjg5XjgqHjgqTjg6vjga7osrzjgorku5jjgZHjgavmiJDlip/jgZfjgb7jgZfjgZ/jgIIiLAorICAgICAgICAiRmlsZSBzYXZlZC4iOiAi44OV44Kh44Kk44Or44KS5L+d5a2Y44GX44G+44GX44Gf44CCIiwKKyAgICAgICAgIkZpbGUgd2FzIG5vdCBzYXZlZC4iOiAi44OV44Kh44Kk44Or44KS5L+d5a2Y44Gn44GN44G+44Gb44KT44Gn44GX44Gf44CCIiwKKyAgICAgICAgIkZvbGRlciBOYW1lOiI6ICLjg5Xjgqnjg6vjg4DlkI06IiwKKyAgICAgICAgIkZvbGRlciBpcyBub3QgZW1wdHkuIFBsZWFzZSBkZWxldGUgYWxsIEZpbGVzIGFuZCBTdWJmb2xkZXJzIGluc2lkZS4iOiAi44OV44Kp44Or44OA44Gv56m644Gn44Gv44GC44KK44G+44Gb44KT44CC5Lit44Gu44OV44Kh44Kk44Or44Go44K144OW44OV44Kp44Or44OA44KS44GZ44G544Gm5YmK6Zmk44GX44Gm44GP44Gg44GV44GE44CCIiwKKyAgICAgICAgIkZyZWUgU3BhY2UiOiAi56m644GN5a656YePIiwKKyAgICAgICAgIkltYWdlIEZpbGUiOiAi55S75YOP44OV44Kh44Kk44OrIiwKKyAgICAgICAgIkltYWdlIEZvcm1hdCI6ICLnlLvlg4/lvaLlvI8iLAorICAgICAgICAiSW1hZ2UgU2l6ZSI6ICLnlLvlg4/jgrXjgqTjgroiLAorICAgICAgICAiSW5zZXJ0IEltYWdlIjogIueUu+WDj+OBruaMv+WFpSIsCisgICAgICAgICJJbnZhbGlkIGZvbGRlciBuYW1lLCBwbGVhc2UgY2hvb3NlIGFub3RoZXIgZm9sZGVyIG5hbWUuIjogIueEoeWKueOBquODleOCqeODq+ODgOWQjeOBp+OBmeOAguWIpeOBruODleOCqeODq+ODgOWQjeOCkumBuOOCk+OBp+OBj+OBoOOBleOBhOOAgiIsCisgICAgICAgICJMaXN0IFZpZXciOiAi5LiA6Kan6KGo56S6IiwKKyAgICAgICAgIk1hcmdpbjoiOiAi6ZaT6ZqUOiIsCisgICAgICAgICJNYXhpbXVtIGZpbGUgc2l6ZSBbJG1heF9zaXplIEtCXSBleGNlZWRlZC4iOiAi44OV44Kh44Kk44Or44K144Kk44K65LiK6ZmQIFskbWF4X3NpemUgS0JdIOOCkui2heOBiOOBpuOBhOOBvuOBmeOAgiIsCisgICAgICAgICJNb3ZlIFwiJGZpbGVcIiBmcm9tIFwiJGRpclwiIGhlcmUiOiAiXCIkZmlsZVwiIOOCkiBcIiRkaXJcIiDjgYvjgonjgZPjgZPjgavnp7vli5UiLAorICAgICAgICAiTW92ZSBmb2xkZXIgXCIkZmlsZVwiIGZyb20gXCIkZGlyXCIgaGVyZSI6ICLjg5Xjgqnjg6vjg4AgXCIkZmlsZVwiIOOCkiBcIiRkaXJcIiDjgYvjgonjgZPjgZPjgavnp7vli5UiLAorICAgICAgICAiTmFtZSI6ICLlkI3liY0iLAorICAgICAgICAiTm8gSW1hZ2Ugc2VsZWN0ZWQuIjogIueUu+WDj+OBjOmBuOaKnuOBleOCjOOBpuOBhOOBvuOBm+OCk+OAgiIsCisgICAgICAgICJPdGhlciI6ICLjgZ3jga7ku5YiLAorICAgICAgICAiUGFkZGluZzoiOiAi5L2Z55m9OiIsCisgICAgICAgICJQYXN0ZSI6ICLosrzjgorku5jjgZEiLAorICAgICAgICAiUGFzdGUgZmFpbGVkLlxuTWF5YmUgZm9sZGVyIGRvZXNuJ3QgaGF2ZSB3cml0ZSBwZXJtaXNzaW9uLiI6ICLosrzjgorku5jjgZHjgavlpLHmlZfjgZfjgb7jgZfjgZ/jgIJcbuODleOCqeODq+ODgOOBq+abuOOBjei+vOOBv+aoqemZkOOBjOOBquOBhOWPr+iDveaAp+OBjOOBguOCiuOBvuOBmeOAgiIsCisgICAgICAgICJQbGVhc2UgZGVsZXRlIGFsbCBmaWxlcy9mb2xkZXJzIGluc2lkZSB0aGUgZm9sZGVyIHlvdSB3aXNoIHRvIGRlbGV0ZSBmaXJzdC4iOiAi5YmK6Zmk44GX44Gf44GE44OV44Kp44Or44OA5YaF44Gu44OV44Kh44Kk44Or44Go44OV44Kp44Or44OA44KS5YWo44Gm5YmK6Zmk44GX44Gm44GK44GE44Gm44GP44Gg44GV44GE44CCIiwKKyAgICAgICAgIlBsZWFzZSBlbnRlciBuYW1lIGZvciBuZXcgZm9sZGVyLi4uIjogIuaWsOimj+ODleOCqeODq+ODgOOBruWQjeWJjeOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhC4uLiIsCisgICAgICAgICJQbGVhc2UgZW50ZXIgbmV3IG5hbWUgZm9yIHRoaXMgZmlsZS4uLiI6ICLjg5XjgqHjgqTjg6vjga7mlrDjgZfjgYTlkI3liY3jgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYQuLi4iLAorICAgICAgICAiUGxlYXNlIGVudGVyIG5ldyBuYW1lIGZvciB0aGlzIGZvbGRlci4uLiI6ICLjgZPjga7jg5Xjgqnjg6vjg4Djga7mlrDjgZfjgYTlkI3liY3jgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYQuLi4iLAorICAgICAgICAiUm90YXRlIDE4MCDCsCI6ICIxODDCsCIsCisgICAgICAgICJSb3RhdGUgOTAgwrAgQ0NXIjogIjkwwrAg5Y+N5pmC6KiI5Zue44KKIiwKKyAgICAgICAgIlJvdGF0ZSA5MCDCsCBDVyI6ICI5MMKwIOaZguioiOWbnuOCiiIsCisgICAgICAgICJTaXplIjogIuOCteOCpOOCuiIsCisgICAgICAgICJTb3VyY2UgZmlsZS9mb2xkZXIgbm90IGZvdW5kLiI6ICLou6LpgIHlhYPjg5XjgqHjgqTjg6sv44OV44Kp44Or44OA44GM6KaL44Gk44GL44KK44G+44Gb44KT44CCIiwKKyAgICAgICAgIlRodW1ibmFpbCBWaWV3IjogIuOCteODoOODjeODvOODq+ihqOekuiIsCisgICAgICAgICJUb3RhbCBTaXplIjogIuWQiOioiOOCteOCpOOCuiIsCisgICAgICAgICJUb3RhbCBTaXplIDogJG1heF9mb2xkZXJzaXplX21iIE1CLCBGcmVlIFNwYWNlOiAkZnJlZV9zcGFjZSI6ICLlkIjoqIjjgrXjgqTjgro6ICRtYXhfZm9sZGVyc2l6ZV9tYiBNQiwg56m644GN5a656YePOiAkZnJlZV9zcGFjZSIsCisgICAgICAgICJVbmFibGUgdG8gcmVuYW1lIGZpbGUuIEZpbGUgb2YgdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cyBvclxuZm9sZGVyIGRvZXNuJ3QgaGF2ZSB3cml0ZSBwZXJtaXNzaW9uLiI6ICLjg5XjgqHjgqTjg6vlkI3jgpLlpInmm7TjgafjgY3jgb7jgZvjgpPjgILlkIzlkI3jga7jg5XjgqHjgqTjg6vjgYzlrZjlnKjjgZnjgovjgYvjgIFcbuODleOCqeODq+ODgOOBq+abuOOBjei+vOOBv+aoqemZkOOBjOOBguOCiuOBvuOBm+OCk+OAgiIsCisgICAgICAgICJVbmFibGUgdG8gdXBsb2FkIEZpbGUuIFxuRWl0aGVyIE1heGltdW0gZmlsZSBzaXplIFskbWF4X3NpemUgS0JdIGV4Y2VlZGVkIG9yXG5Gb2xkZXIgZG9lc24ndCBoYXZlIHdyaXRlIHBlcm1pc3Npb24uIjogIuODleOCoeOCpOODq+OCkuOCouODg+ODl+ODreODvOODieOBp+OBjeOBvuOBm+OCk+OAglxu44OV44Kh44Kk44Or44K144Kk44K65LiK6ZmQIFskbWF4X3NpemUgS0JdIOOCkui2heOBiOOBpuOBhOOCi+OBi+OAgVxu44OV44Kp44Or44OA44Gr5pu444GN6L6844G/5qip6ZmQ44GM44GC44KK44G+44Gb44KT44CCIiwKKyAgICAgICAgIlVudGl0bGVkIjogIueEoemhjCIsCisgICAgICAgICJVcGxvYWQ6IjogIuOCouODg+ODl+ODreODvOODiToiLAorICAgICAgICAiVXBsb2FkaW5nIjogIuOCouODg+ODl+ODreODvOODieS4rSIsCisgICAgICAgICJVcGxvYWRpbmcuLi4iOiAi44Ki44OD44OX44Ot44O844OJ5LitLi4uIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMyOGM5NgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSwxMjMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLworLy8gTEFORzogImVuIiwgRU5DT0RJTkc6IFVURi04CisvLyBBdXRob3I6IFRyYW5zbGF0b3ItTmFtZSwgPGVtYWlsQGV4YW1wbGUuY29tPgorLy8KKy8vIExhc3QgcmV2aXNpb246IDIwMTgtMDQtMTIKKy8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KKy8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyAoUGxlYXNlLCByZW1vdmUgaW5mb3JtYXRpb24gYmVsb3cpCisvLyBGT1IgVFJBTlNMQVRPUlM6CisvLworLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCisvLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCisvLworLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7CisvLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50CisvLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCisKK3sKKyAgICAiMTAlIjogIiIsCisgICAgIjEwMCUiOiAiIiwKKyAgICAiMjAwJSI6ICIiLAorICAgICIyNSUiOiAiIiwKKyAgICAiNTAlIjogIiIsCisgICAgIjc1JSI6ICIiLAorICAgICI+TGlzdCBWaWV3IjogIiIsCisgICAgIj5UaHVtYm5haWwgVmlldyI6ICIiLAorICAgICJBOiI6ICIiLAorICAgICJBYnNib3R0b20iOiAiIiwKKyAgICAiQWJzbWlkZGxlIjogIiIsCisgICAgIkFsaWduIjogIiIsCisgICAgIkFsdCI6ICIiLAorICAgICJCYXNlbGluZSI6ICIiLAorICAgICJCb3JkZXIiOiAiIiwKKyAgICAiQm9yZGVyIENvbG9yIjogIiIsCisgICAgIkJvdHRvbSI6ICIiLAorICAgICJDYW5jZWwiOiAiIiwKKyAgICAiQ2xlYXIiOiAiIiwKKyAgICAiQ29sb3IiOiAiIiwKKyAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIiIsCisgICAgIkNvcHkiOiAiIiwKKyAgICAiQ3JvcCI6ICIiLAorICAgICJDdXQiOiAiIiwKKyAgICAiRDoiOiAiIiwKKyAgICAiRGlyZWN0b3J5IjogIiIsCisgICAgIkRpcmVjdG9yeSBVcCI6ICIiLAorICAgICJFZGl0IjogIiIsCisgICAgIkZpbGUgTGlzdCI6ICIiLAorICAgICJGaWxlIE1hbmFnZXIiOiAiIiwKKyAgICAiRmlsZW5hbWU6IjogIiIsCisgICAgIkZpbGVzaXplOiI6ICIiLAorICAgICJGbGlwIEhvcml6b250YWwiOiAiIiwKKyAgICAiRmxpcCBJbWFnZSI6ICIiLAorICAgICJGbGlwIFZlcnRpY2FsIjogIiIsCisgICAgIkZvbGRlciI6ICIiLAorICAgICJHSUYiOiAiIiwKKyAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIiIsCisgICAgIkg6IjogIiIsCisgICAgIkhlaWdodCI6ICIiLAorICAgICJIZWlnaHQ6IjogIiIsCisgICAgIkltYWdlIEVkaXRvciI6ICIiLAorICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICIiLAorICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICIiLAorICAgICJKUEVHIEhpZ2giOiAiIiwKKyAgICAiSlBFRyBMb3ciOiAiIiwKKyAgICAiSlBFRyBNZWRpdW0iOiAiIiwKKyAgICAiTGVmdCI6ICIiLAorICAgICJMb2FkaW5nIjogIiIsCisgICAgIkxvY2siOiAiIiwKKyAgICAiTWFyZ2luIjogIiIsCisgICAgIk1hcmtlciI6ICIiLAorICAgICJNYXhpbXVtIGZvbGRlciBzaXplIGxpbWl0IHJlYWNoZWQuIFVwbG9hZCBkaXNhYmxlZC4iOiAiIiwKKyAgICAiTWVhc3VyZSI6ICIiLAorICAgICJNaWRkbGUiOiAiIiwKKyAgICAiTmV3IEZvbGRlciI6ICIiLAorICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIiIsCisgICAgIk5vIEZpbGVzIEZvdW5kIjogIiIsCisgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICIiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIiIsCisgICAgIk5vdCBzZXQiOiAiIiwKKyAgICAiT0siOiAiIiwKKyAgICAiUE5HIjogIiIsCisgICAgIlBhZGRpbmciOiAiIiwKKyAgICAiUGxlYXNlIGVudGVyIHZhbHVlIjogIiIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiIiwKKyAgICAiUHJlc2V0IjogIiIsCisgICAgIlByZXZpZXciOiAiIiwKKyAgICAiUXVhbGl0eToiOiAiIiwKKyAgICAiUmVmcmVzaCI6ICIiLAorICAgICJSZW5hbWUiOiAiIiwKKyAgICAiUmVzaXplIjogIiIsCisgICAgIlJpZ2h0IjogIiIsCisgICAgIlJvdGF0ZSI6ICIiLAorICAgICJSb3RhdGUgMTgwICZkZWc7IjogIiIsCisgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiIiwKKyAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIiIsCisgICAgIlJvdGF0ZSBJbWFnZSI6ICIiLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiIiwKKyAgICAiU2F2ZSI6ICIiLAorICAgICJTdGFydCBYOiI6ICIiLAorICAgICJTdGFydCBZOiI6ICIiLAorICAgICJUYXJnZXQgV2luZG93IjogIiIsCisgICAgIlRleHR0b3AiOiAiIiwKKyAgICAiVGl0bGUgKHRvb2x0aXApIjogIiIsCisgICAgIlRvZ2dsZSBtYXJrZXIgY29sb3IiOiAiIiwKKyAgICAiVG9wIjogIiIsCisgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiIiwKKyAgICAiVHJhc2giOiAiIiwKKyAgICAiVXBsb2FkIjogIiIsCisgICAgIlc6IjogIiIsCisgICAgIldpZHRoIjogIiIsCisgICAgIldpZHRoOiI6ICIiLAorICAgICJYOiI6ICIiLAorICAgICJYaW5oYSBJbWFnZSBFZGl0b3IiOiAiIiwKKyAgICAiWToiOiAiIiwKKyAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIiIsCisgICAgIlpvb20iOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvbHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M3MWEwOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL2x0LmpzCkBAIC0wLDAgKzEsMjIgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTmF1amFzIGxhbmdhcyAoX2JsYW5rKSIsCisgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiTm9uZSAodXNlIGltcGxpY2l0KSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlNhbWUgZnJhbWUgKF9zZWxmKSIsCisgICAgIlRpdGxlICh0b29sdGlwKSI6ICJQYXZhZGluaW1hcyAodG9vbHRpcCk6IiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJUb3AgZnJhbWUgKF90b3ApIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRVhURU5ERURGSUxFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvbHYuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9sdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWQ0ODYxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvbHYuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXRjZWx0IiwKKyAgICAiT0siOiAiTGFiaSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E3ZjNiOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL25iLmpzCkBAIC0wLDAgKzEsMTM1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsaWduIjogIkp1c3RlciIsCisgICAgIkFsdCI6ICJBbHQiLAorICAgICJCYXNlbGluZSI6ICJHcnVubmxpbmplIiwKKyAgICAiQm9yZGVyIjogIlJhbW1lIiwKKyAgICAiQm9yZGVyIENvbG9yIjogIlJhbW1lIGZhcmdlOiIsCisgICAgIkJvdHRvbSI6ICJCdW5uIiwKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIkNsZWFyIjogIlTDuG0iLAorICAgICJDb2xvciI6ICJGYXJnZSIsCisgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICJCZWhvbGRlIHByb3Bvc2pvbmVyIiwKKyAgICAiQ29weSI6ICJDb3B5IiwKKyAgICAiQ3JvcCI6ICJCZXNrasOmciIsCisgICAgIkN1dCI6ICJDdXQiLAorICAgICJEaXJlY3RvcnkiOiAiTWFwcGUiLAorICAgICJEaXJlY3RvcnkgVXAiOiAiT3BwIGV0IG5pdsOlIiwKKyAgICAiRWRpdCI6ICJSZWRpZ2VyIiwKKyAgICAiRmlsZSBNYW5hZ2VyIjogIkZpbGJlaGFuZGxlciIsCisgICAgIkZpbGVuYW1lOiI6ICJGaWxuYXZuOiIsCisgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICJWZW5kIGhvcmlzb250YWwiLAorICAgICJGbGlwIEltYWdlIjogIlZlbmQgYmlsZGUiLAorICAgICJGbGlwIFZlcnRpY2FsIjogIlZlbmQgdmVydGlrYWwiLAorICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiR0lGIGZvcm1hdCBlciBpa2tlIHN0w7h0dGV0IG9nIGJpbGRlcmVkaWdlcmluZyBlciBkZXJmb3IgaWtrZSB0aWxnamVuZ2VsaWcuIiwKKyAgICAiSGVpZ2h0IjogIkjDuHlkZSIsCisgICAgIkhlaWdodDoiOiAiSMO4eWRlOiIsCisgICAgIkluc2VydCBGaWxlIExpbmsiOiAiU2V0dCBpbm4gbGVua2UgdGlsIGZpbCIsCisgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIlVneWxkaWcgc3RpIHRpbCBtYXBwZToiLAorICAgICJKUEVHIEhpZ2giOiAiSlBFRyBow7h5IiwKKyAgICAiSlBFRyBMb3ciOiAiSlBFRyBsYXYiLAorICAgICJKUEVHIE1lZGl1bSI6ICJKUEVHIG1pZGRlbHMiLAorICAgICJMZWZ0IjogIlZlbnN0cmUiLAorICAgICJMb2FkaW5nIjogIkxhc3RlciIsCisgICAgIkxvY2siOiAiTMOlcyIsCisgICAgIk1hcmdpbiI6ICJNYXJnIiwKKyAgICAiTWFya2VyIjogIk1hcmvDuHIiLAorICAgICJNZWFzdXJlIjogIk3DpWwiLAorICAgICJNaWRkbGUiOiAiTWlkdGVuIiwKKyAgICAiTmV3IEZvbGRlciI6ICJOeSBtYXBwZSIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiRWdldCB2aW5kdSAoX2JsYW5rKSIsCisgICAgIk5vIEZpbGVzIEZvdW5kIjogIkluZ2VuIGZpbGVyIGZ1bm5ldCIsCisgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICJJbmdldCBiaWxkZSB0aWxnamVuZ2VsaWcuIiwKKyAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJJbmdlbiAoYnJ1ayBzdGFuZGFyZGlubnN0aWxsaW5nKSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUGFkZGluZyI6ICJJbm52ZW5kaWcgbWFyZyIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiQmlsZGVwb3NzaXNqb24iLAorICAgICJQcmV2aWV3IjogIkZvcmjDpW5kc3Zpc25pbmciLAorICAgICJRdWFsaXR5OiI6ICJLdmFsaXRldCIsCisgICAgIlJlZnJlc2giOiAiT3BwZnJpc2sgc2lkZSIsCisgICAgIlJlbmFtZSI6ICJOeXR0IG5hdm4iLAorICAgICJSZXNpemUiOiAiRW5kcmUgc3TDuHJyZWxzZSIsCisgICAgIlJpZ2h0IjogIkjDuHlyZSIsCisgICAgIlJvdGF0ZSI6ICJSb3RlciIsCisgICAgIlJvdGF0ZSBJbWFnZSI6ICJSb3RlciBiaWxkZSIsCisgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJTYW1tZSByYW1tZSAoX3NlbGYpIiwKKyAgICAiU2F2ZSI6ICJMYWdyZSIsCisgICAgIlN0YXJ0IFg6IjogIlN0YXJ0IFgiLAorICAgICJTdGFydCBZOiI6ICJTdGFydCBZIiwKKyAgICAiVGFyZ2V0IFdpbmRvdyI6ICJNw6VsIiwKKyAgICAiVGl0bGUgKHRvb2x0aXApIjogIlRpdHRlbCAodG9vbHRpcCkiLAorICAgICJUb3AiOiAiT3ZlcmthbnQiLAorICAgICJUb3AgZnJhbWUgKF90b3ApIjogIlRvcHByYW1tZSAoX3RvcCkiLAorICAgICJUcmFzaCI6ICJTw7hwcGVsIiwKKyAgICAiVXBsb2FkIjogIkxhc3Qgb3BwIiwKKyAgICAiVzoiOiAiTDoiLAorICAgICJXaWR0aCI6ICJCcmVkZGUiLAorICAgICJXaWR0aDoiOiAiQnJlZGRlOiIsCisgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICJEdSBtw6UgdmVsZ2Ugbm9lIHRla3N0IGbDuHIgZHUga2FuIGxhZ2UgZW4gbnkgbGVua2UuIiwKKyAgICAiWm9vbSI6ICJGb3JzdMO4cnIiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBbmdsZToiOiAiVmlua2VsOiIsCisgICAgICAgICJCb3JkZXIgQ29sb3I6IjogIlJhbW1lIGZhcmdlOiIsCisgICAgICAgICJDYW5jZWxsZWQgcmVuYW1lLiI6ICJPbWTDuHBpbmcgYXYgZmlsbmF2biBhdmJydXR0LiIsCisgICAgICAgICJDYW5ub3QgdXBsb2FkICRleHRlbnNpb24gRmlsZXMuIFBlcm1pc3Npb24gZGVuaWVkLiI6ICJDYW5ub3QgdXBsb2FkICRleHRlbnNpb24gRmlsZXMuIFBlcm1pc3Npb24gZGVuaWVkLiIsCisgICAgICAgICJDYW5ub3QgdXBsb2FkLiBNYXhpbXVtIGZvbGRlciBzaXplIHJlYWNoZWQuIERlbGV0ZSB1bndhbnRlZCBmaWxlcyBhbmQgdHJ5IGFnYWluLiI6ICJDYW5ub3QgdXBsb2FkLiBNYXhpbXVtIGZvbGRlciBzaXplIHJlYWNoZWQuIERlbGV0ZSB1bndhbnRlZCBmaWxlcyBhbmQgdHJ5IGFnYWluLiIsCisgICAgICAgICJDb2xvcjoiOiAiRmFyZ2U6IiwKKyAgICAgICAgIkNvcHkgXCIkZmlsZVwiIGZyb20gXCIkZGlyXCIgaGVyZSI6ICJDb3B5IFwiJGZpbGVcIiBmcm9tIFwiJGRpclwiIGhlcmUiLAorICAgICAgICAiQ29weSBmb2xkZXIgXCIkZmlsZVwiIGZyb20gXCIkZGlyXCIgaGVyZSI6ICJDb3B5IGZvbGRlciBcIiRmaWxlXCIgZnJvbSBcIiRkaXJcIiBoZXJlIiwKKyAgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgZGVzdGluYXRpb24gZm9sZGVyLiI6ICJDb3VsZCBub3QgY3JlYXRlIGRlc3RpbmF0aW9uIGZvbGRlci4iLAorICAgICAgICAiRGF0ZSBNb2RpZmllZCI6ICJTaXN0ZSBlbmRyZXQiLAorICAgICAgICAiRGVsZXRlIGZpbGUgXCIkZmlsZVwiPyI6ICIkZmlsZVxuXG5TbGV0dGUgZmlsPyIsCisgICAgICAgICJEZWxldGUgZm9sZGVyIFwiJGRpclwiPyI6ICIkZGlyXG5cblNsZXR0ZSBtYXBwZT8iLAorICAgICAgICAiRGVzY3JpcHRpb246IjogIkJlc2tyaXZlbHNlOiIsCisgICAgICAgICJEZXN0aW5hdGlvbiBmaWxlL2ZvbGRlciBhbHJlYWR5IGV4aXN0cy4iOiAiRGVzdGluYXRpb24gZmlsZS9mb2xkZXIgYWxyZWFkeSBleGlzdHMuIiwKKyAgICAgICAgIkZpbGUgXCIkZmlsZVwiIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZC4iOiAiRmlsZSBcIiRmaWxlXCIgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkLiIsCisgICAgICAgICJGaWxlIE5hbWUiOiAiRmlsbmF2biIsCisgICAgICAgICJGaWxlIHBhc3RlZCBPSy4iOiAiRmlsZSBwYXN0ZWQgT0suIiwKKyAgICAgICAgIkZpbGUgc2F2ZWQuIjogIkZpbCBlciBsYWdyZXQuIiwKKyAgICAgICAgIkZpbGUgd2FzIG5vdCBzYXZlZC4iOiAiRmlsZW4gYmxlIGlra2UgbGFncmV0LiIsCisgICAgICAgICJGb2xkZXIgTmFtZToiOiAiTWFwcGUgbmF2biIsCisgICAgICAgICJGb2xkZXIgaXMgbm90IGVtcHR5LiBQbGVhc2UgZGVsZXRlIGFsbCBGaWxlcyBhbmQgU3ViZm9sZGVycyBpbnNpZGUuIjogIk1hcHBlbiBlciBpa2tlIHRvbS4gRHUgbcOlIHNsZXR0ZSBhbGxlIGZpbGVyIG9nIG1hcHBlciBpIG1hcHBlbiBmw7hyc3QuIiwKKyAgICAgICAgIkZyZWUgU3BhY2UiOiAiTGVkaWcgcGxhc3MiLAorICAgICAgICAiSW1hZ2UgRmlsZSI6ICJCaWxkZWZpbCIsCisgICAgICAgICJJbWFnZSBGb3JtYXQiOiAiQmlsZGVmb3JtYXQ6IiwKKyAgICAgICAgIkltYWdlIFNpemUiOiAiQmlsZGUgc3TDuHJyZWxzZSIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiU2V0dCBpbm4gYmlsZGUiLAorICAgICAgICAiSW52YWxpZCBmb2xkZXIgbmFtZSwgcGxlYXNlIGNob29zZSBhbm90aGVyIGZvbGRlciBuYW1lLiI6ICJVZ3lsZGlnIG1hcHBlbmF2biwgdmVubmxpZ3N0IHZlbGcgZXQgYW5uZXQgbWFwcGVuYXZuIiwKKyAgICAgICAgIkxpc3QgVmlldyI6ICJMaXN0ZSIsCisgICAgICAgICJNYXhpbXVtIGZpbGUgc2l6ZSBbJG1heF9zaXplIEtCXSBleGNlZWRlZC4iOiAiTWF4aW11bSBmaWxlIHNpemUgWyRtYXhfc2l6ZSBLQl0gZXhjZWVkZWQuIiwKKyAgICAgICAgIk1vdmUgXCIkZmlsZVwiIGZyb20gXCIkZGlyXCIgaGVyZSI6ICJNb3ZlIFwiJGZpbGVcIiBmcm9tIFwiJGRpclwiIGhlcmUiLAorICAgICAgICAiTW92ZSBmb2xkZXIgXCIkZmlsZVwiIGZyb20gXCIkZGlyXCIgaGVyZSI6ICJNb3ZlIGZvbGRlciBcIiRmaWxlXCIgZnJvbSBcIiRkaXJcIiBoZXJlIiwKKyAgICAgICAgIk5hbWUiOiAiTmF2biIsCisgICAgICAgICJObyBJbWFnZSBzZWxlY3RlZC4iOiAiSW5nZXQgYmlsZGUgdmFsZ3QuIiwKKyAgICAgICAgIk90aGVyIjogIkFuZHJlLi4uIiwKKyAgICAgICAgIlBhc3RlIjogIlBhc3RlIiwKKyAgICAgICAgIlBhc3RlIGZhaWxlZC5cbk1heWJlIGZvbGRlciBkb2Vzbid0IGhhdmUgd3JpdGUgcGVybWlzc2lvbi4iOiAiUGFzdGUgZmFpbGVkLlxuTWF5YmUgZm9sZGVyIGRvZXNuJ3QgaGF2ZSB3cml0ZSBwZXJtaXNzaW9uLiIsCisgICAgICAgICJQbGVhc2UgZGVsZXRlIGFsbCBmaWxlcy9mb2xkZXJzIGluc2lkZSB0aGUgZm9sZGVyIHlvdSB3aXNoIHRvIGRlbGV0ZSBmaXJzdC4iOiAiVmVubmxpZ3N0IHNsZXR0IGFsbGUgZmlsZXIgb2cgbWFwcGVyIGkgbWFwcGVuIGR1IMO4bnNrZXIgw6Ugc2xldHRlIGbDuHJzdCEiLAorICAgICAgICAiUGxlYXNlIGVudGVyIG5hbWUgZm9yIG5ldyBmb2xkZXIuLi4iOiAiU2tyaXYgaW5uIG5hdm4gZm9yIG55IG1hcHBlLi4uIiwKKyAgICAgICAgIlBsZWFzZSBlbnRlciBuZXcgbmFtZSBmb3IgdGhpcyBmaWxlLi4uIjogIlZlbm5saWdzdCBza3JpdiBpbm4gbnl0dCBuYXZuIGZvciBkZW5uZSBmaWwuLi4iLAorICAgICAgICAiUGxlYXNlIGVudGVyIG5ldyBuYW1lIGZvciB0aGlzIGZvbGRlci4uLiI6ICJQbGVhc2UgZW50ZXIgbmV3IG5hbWUgZm9yIHRoaXMgZm9sZGVyLi4uIiwKKyAgICAgICAgIlJvdGF0ZSAxODAgwrAiOiAiUm90ZXIgMTgwwrAiLAorICAgICAgICAiUm90YXRlIDkwIMKwIENDVyI6ICJSb3RlciA5MMKwIG1vdCBrbG9ra2EiLAorICAgICAgICAiUm90YXRlIDkwIMKwIENXIjogIlJvdGVyIDkwwrAgbWVkIGtsb2trYSIsCisgICAgICAgICJTaXplIjogIlN0w7hycmVsc2UiLAorICAgICAgICAiU291cmNlIGZpbGUvZm9sZGVyIG5vdCBmb3VuZC4iOiAiU291cmNlIGZpbGUvZm9sZGVyIG5vdCBmb3VuZC4iLAorICAgICAgICAiVGh1bWJuYWlsIFZpZXciOiAiTWluaWF0eXJiaWxkZSIsCisgICAgICAgICJUb3RhbCBTaXplIjogIlRvdGFsIHN0w7hycmVsc2UiLAorICAgICAgICAiVG90YWwgU2l6ZSA6ICRtYXhfZm9sZGVyc2l6ZV9tYiBNQiwgRnJlZSBTcGFjZTogJGZyZWVfc3BhY2UiOiAiVG90YWwgU2l6ZSA6ICRtYXhfZm9sZGVyc2l6ZV9tYiBNQiwgRnJlZSBTcGFjZTogJGZyZWVfc3BhY2UiLAorICAgICAgICAiVW5hYmxlIHRvIHJlbmFtZSBmaWxlLiBGaWxlIG9mIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMgb3JcbmZvbGRlciBkb2Vzbid0IGhhdmUgd3JpdGUgcGVybWlzc2lvbi4iOiAiS2FuIGlra2Ugb21kw7hwZSBmaWwuIEVuIGZpbCBoYXIgYWxsZXJlZGUgc2FtbWUgbmF2biBlbGxlclxubWFwcGVuIGhhciBpa2tlIHNrcml2ZXJldHRpZ2hldGVyLiIsCisgICAgICAgICJVbmFibGUgdG8gdXBsb2FkIEZpbGUuIFxuRWl0aGVyIE1heGltdW0gZmlsZSBzaXplIFskbWF4X3NpemUgS0JdIGV4Y2VlZGVkIG9yXG5Gb2xkZXIgZG9lc24ndCBoYXZlIHdyaXRlIHBlcm1pc3Npb24uIjogIlVuYWJsZSB0byB1cGxvYWQgRmlsZS4gXG5FaXRoZXIgTWF4aW11bSBmaWxlIHNpemUgWyRtYXhfc2l6ZSBLQl0gZXhjZWVkZWQgb3JcbkZvbGRlciBkb2Vzbid0IGhhdmUgd3JpdGUgcGVybWlzc2lvbi4iLAorICAgICAgICAiVW50aXRsZWQiOiAiVXRlbiBuYXZuIiwKKyAgICAgICAgIlVwbG9hZDoiOiAiTGFzdCBvcHA6IiwKKyAgICAgICAgIlVwbG9hZGluZyI6ICJMYXN0ZXIgb3BwIiwKKyAgICAgICAgIlVwbG9hZGluZy4uLiI6ICJMYXN0ZXIgb3BwLi4uIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjI5ZjFlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvbmwuanMKQEAgLTAsMCArMSwxMzQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxpZ24iOiAiVWl0bGlqbmVuIiwKKyAgICAiQWx0IjogIkFsdCIsCisgICAgIkJhc2VsaW5lIjogIkJhc2lzIiwKKyAgICAiQm9yZGVyIjogIkthZGVyIiwKKyAgICAiQm9yZGVyIENvbG9yIjogIkthZGVya2xldXI6IiwKKyAgICAiQm90dG9tIjogIk9uZGVyIiwKKyAgICAiQ2FuY2VsIjogIkFubnVsZXJlbiIsCisgICAgIkNsZWFyIjogIldpc3NlbiIsCisgICAgIkNvbG9yIjogIktsZXVyIiwKKyAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIlByb3BvcnRpZSBiZWhvdWRlbiIsCisgICAgIkNvcHkiOiAiS29wacOrcmVuIiwKKyAgICAiQ3JvcCI6ICJVaXRzbmVkZW4iLAorICAgICJDdXQiOiAiS25pcHBlbiIsCisgICAgIkRpcmVjdG9yeSI6ICJNYXAiLAorICAgICJEaXJlY3RvcnkgVXAiOiAiQm92ZW5saWdnZW5kZSBtYXAiLAorICAgICJFZGl0IjogIkJld2Vya2VuIiwKKyAgICAiRmlsZSBNYW5hZ2VyIjogIkJlc3RhbmRzYmVoZWVyIiwKKyAgICAiRmlsZW5hbWU6IjogIkJlc3RhbmRzbmFhbToiLAorICAgICJGbGlwIEhvcml6b250YWwiOiAiaG9yLiBzcGllZ2VsZW4iLAorICAgICJGbGlwIEltYWdlIjogIkJlZWxkIHNwaWVnZWxlbiIsCisgICAgIkZsaXAgVmVydGljYWwiOiAidmVyLiBzcGllZ2VsZW4iLAorICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiR0lGLWZvcm1hdCBuaWV0IG9uZGVyc3RldW5kLCBiZWVsZGJld2Vya2luZyBuaWV0IG9uZGVyc3RldW5kLiIsCisgICAgIkhlaWdodCI6ICJIb29nIiwKKyAgICAiSGVpZ2h0OiI6ICJIb29ndGU6IiwKKyAgICAiSW5zZXJ0IEZpbGUgTGluayI6ICJIeXBlbGluayB2YW4gYmVzdGFuZGludm9lZ2VuIiwKKyAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiT25nZWxkaWcgcGFkOiIsCisgICAgIkpQRUcgSGlnaCI6ICJKUEVHIGhvb2ciLAorICAgICJKUEVHIExvdyI6ICJKUEVHIGxhYWciLAorICAgICJKUEVHIE1lZGl1bSI6ICJKUEVHIG1pZGRlbiIsCisgICAgIkxlZnQiOiAiTGlua3MiLAorICAgICJMb2FkaW5nIjogIkxhZGVuIiwKKyAgICAiTG9jayI6ICJPcC1zbG90IiwKKyAgICAiTWFyZ2luIjogIkluc3ByaW5nZW4iLAorICAgICJNYXJrZXIiOiAiTWFya2VyZW4iLAorICAgICJNZWFzdXJlIjogIk9wbWV0ZW4iLAorICAgICJNaWRkbGUiOiAiTWlkZGVuIiwKKyAgICAiTmV3IEZvbGRlciI6ICJOaWV1dyBtYXAiLAorICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIk5pZXV3IHZlbnN0ZXIgKF9ibGFuaykiLAorICAgICJObyBGaWxlcyBGb3VuZCI6ICJHZWVuIGJlc3RhYW5kIGdldm9uZGVuIiwKKyAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIkdlZW4gYmVlbGQgYmVzY2hpa2JhYXIiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIkdlZW4iLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBhZGRpbmciOiAiVWl0dnVsbGVuIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJVaXRsaWpuZW4gdmFuIGRpdCBiZWVsZCIsCisgICAgIlByZXZpZXciOiAiVm9vcmJlZWxkIiwKKyAgICAiUXVhbGl0eToiOiAiS3dhbGl0ZWl0IiwKKyAgICAiUmVmcmVzaCI6ICJWZXJuaWV1d2VuIiwKKyAgICAiUmVuYW1lIjogIk5hYW0gd2lqemlnZW4iLAorICAgICJSZXNpemUiOiAiRm9ybWFhdCB3aWp6aWdlbiIsCisgICAgIlJpZ2h0IjogIlJlY2h0cyIsCisgICAgIlJvdGF0ZSI6ICJEcmFhaWVuIiwKKyAgICAiUm90YXRlIEltYWdlIjogIkJlZWxkIGRyYWFpZW4iLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiWmVsZmRlIGZyYW1lIChfc2VsZikiLAorICAgICJTYXZlIjogIk9wc2xhYW4iLAorICAgICJTdGFydCBYOiI6ICJTdGFydCBYIiwKKyAgICAiU3RhcnQgWToiOiAiU3RhcnQgWSIsCisgICAgIlRhcmdldCBXaW5kb3ciOiAiRG9lbCB2ZW5zdGVyIiwKKyAgICAiVGl0bGUgKHRvb2x0aXApIjogIlRpdGVsICh0b29sdGlwKSIsCisgICAgIlRvcCI6ICJCb3ZlbiIsCisgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiQm92ZW5zdGUgZnJhbWUgKF90b3ApIiwKKyAgICAiVHJhc2giOiAiUHJ1bGxlbmJhayIsCisgICAgIlVwbG9hZCI6ICJVcGxvYWQiLAorICAgICJXOiI6ICJXOiIsCisgICAgIldpZHRoIjogIkJyZWVkIiwKKyAgICAiV2lkdGg6IjogIkJyZWVkdGU6IiwKKyAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIkVlcnN0IHRla3N0IHNlbGVjdGVyZW4uIiwKKyAgICAiWm9vbSI6ICJWZXJncm9vdC92ZXJrbGVpbiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFuZ2xlOiI6ICJIb2VrOiIsCisgICAgICAgICJCb3JkZXIgQ29sb3I6IjogIkthZGVya2xldXI6IiwKKyAgICAgICAgIkNhbmNlbGxlZCByZW5hbWUuIjogIkhlcm5vZW1lbiBnZWFubnVsZWVyZC4iLAorICAgICAgICAiQ2Fubm90IHVwbG9hZCAkZXh0ZW5zaW9uIEZpbGVzLiBQZXJtaXNzaW9uIGRlbmllZC4iOiAiSGV0IGlzIG5pZXQgbW9nZWxpamsgb20gJGV4dGVuc2lvbiBiZXN0YW5kZW4gdGUgdXBsb2FkZW4uIiwKKyAgICAgICAgIkNhbm5vdCB1cGxvYWQuIE1heGltdW0gZm9sZGVyIHNpemUgcmVhY2hlZC4iOiAiVXBsb2FkZW4gaXMgbmlldCBtb2dlbGlqay4gRGUgZG9lbCBtYXAgaXMgdm9sLiIsCisgICAgICAgICJDb2xvcjoiOiAiS2xldXI6IiwKKyAgICAgICAgIkNvcHkgXCIkZmlsZVwiIGZyb20gXCIkZGlyXCIgaGVyZSI6ICJLb3BpZWVyIFwiJGZpbGVcIiB2YW4gXCIkZGlyXCIgbmFhciIsCisgICAgICAgICJDb3B5IGZvbGRlciBcIiRmaWxlXCIgZnJvbSBcIiRkaXJcIiBoZXJlIjogIktvcGllZXIgbWFwIFwiJGZpbGVcIiB2YW4gXCIkZGlyXCIgbmFhciIsCisgICAgICAgICJDb3VsZCBub3QgY3JlYXRlIGRlc3RpbmF0aW9uIGZvbGRlci4iOiAiQmVzdGVtbWluZ3MgbWFwIGtvbiBuaWV0IHdvcmRlbiBnZW1hYWt0Li4iLAorICAgICAgICAiRGF0ZSBNb2RpZmllZCI6ICJEYXR1bSBhYW5nZXBhc3QiLAorICAgICAgICAiRGVsZXRlIGZpbGUgXCIkZmlsZVwiPyI6ICJCZXN0YW5kIFwiJGZpbGVcIiB2ZXJ3aWpkZXJlbj8iLAorICAgICAgICAiRGVsZXRlIGZvbGRlciBcIiRkaXJcIj8iOiAiV2lzIG1hcCBcIiRkaXJcIj8iLAorICAgICAgICAiRGVzY3JpcHRpb246IjogIkJlc2NocmlqdmluZzoiLAorICAgICAgICAiRGVzdGluYXRpb24gZmlsZS9mb2xkZXIgYWxyZWFkeSBleGlzdHMuIjogIkJlc3RlbW1pbmdzIGJlc3RhbmQvbWFwIGJlc3RhYXQgYWwuIiwKKyAgICAgICAgIkZpbGUgXCIkZmlsZVwiIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZC4iOiAiXCIkZmlsZVwiIGJlc3RhbmQgdXBsb2FkIHZvbHRvb2lkLiIsCisgICAgICAgICJGaWxlIE5hbWUiOiAiQmVzdGFuZHNuYWFtIiwKKyAgICAgICAgIkZpbGUgc2F2ZWQuIjogIkJlc3RhbmQgb3BnZXNsYWdlbi4iLAorICAgICAgICAiRmlsZSB3YXMgbm90IHNhdmVkLiI6ICJCZXN0YW5kIG5pZXQgb3BnZXNsYWdlbi4iLAorICAgICAgICAiRm9sZGVyIE5hbWU6IjogIk1hcCBuYWFtIiwKKyAgICAgICAgIkZvbGRlciBpcyBub3QgZW1wdHkuIFBsZWFzZSBkZWxldGUgYWxsIEZpbGVzIGFuZCBTdWJmb2xkZXJzIGluc2lkZS4iOiAiTWFwIGlzIG5pZXQgbGVlZy4gVmVyd2lqZGVyIGVlcnN0IGFsbGUgYmVzdGFuZGVuIGVuIG9uZGVybGlnZ2VuZGVtYXBwZW4uIiwKKyAgICAgICAgIkZyZWUgU3BhY2UiOiAiVnJpamUgcnVpbXRlIiwKKyAgICAgICAgIkltYWdlIEZpbGUiOiAiQmVlbGRiZXN0YW5kIiwKKyAgICAgICAgIkltYWdlIEZvcm1hdCI6ICJCZWVsZGZvcm1hYXQ6IiwKKyAgICAgICAgIkltYWdlIFNpemUiOiAiQmVlbGQgYWZtZXRpbmdlbiIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiQmVlbGQgaW52b2VnZW4iLAorICAgICAgICAiSW52YWxpZCBmb2xkZXIgbmFtZSwgcGxlYXNlIGNob29zZSBhbm90aGVyIGZvbGRlciBuYW1lLiI6ICJPbmdlbGRpZyBtYXAgbmFhbSwga2llcyBlZW4gYW5kZXJlIG5hYW0gcy52LnAuLiIsCisgICAgICAgICJMaXN0IFZpZXciOiAiTGlqc3QiLAorICAgICAgICAiTWF4aW11bSBmaWxlIHNpemUgWyRtYXhfc2l6ZSBLQl0gZXhjZWVkZWQuIjogIk1heGltYWxlIGJlc3RhbmRncm9vdHRlIFskbWF4X3NpemUgS0JdIG92ZXJzY2hyZWRlbi4iLAorICAgICAgICAiTW92ZSBcIiRmaWxlXCIgZnJvbSBcIiRkaXJcIiBoZXJlIjogIlZlcnBsYWF0cyBcIiRmaWxlXCIgdmFuIFwiJGRpclwiIG5hYXIiLAorICAgICAgICAiTW92ZSBmb2xkZXIgXCIkZmlsZVwiIGZyb20gXCIkZGlyXCIgaGVyZSI6ICJWZXJwbGFhdHMgbWFwIFwiJGZpbGVcIiB2YW4gXCIkZGlyXCIgbmFhciIsCisgICAgICAgICJOYW1lIjogIk5hYW0iLAorICAgICAgICAiTm8gSW1hZ2Ugc2VsZWN0ZWQuIjogIkdlZW4gYmVlbGQgZ2VzZWxlY3RlZXJkLiIsCisgICAgICAgICJPdGhlciI6ICJBbmRlcmUuLi4iLAorICAgICAgICAiUGFzdGUiOiAiUGxha2tlbiIsCisgICAgICAgICJQYXN0ZSBmYWlsZWQuXG5NYXliZSBmb2xkZXIgZG9lc24ndCBoYXZlIHdyaXRlIHBlcm1pc3Npb24uIjogIlBsYWtrZW4gbWlzbHVrdC4uXG5EZSBtYXAgaGVlZnQgbW9nZWxpamsgbmlldCBkZSBqdWlzdGUgc2NocmlqZnJlY2h0ZW4uIiwKKyAgICAgICAgIlBsZWFzZSBkZWxldGUgYWxsIGZpbGVzL2ZvbGRlcnMgaW5zaWRlIHRoZSBmb2xkZXIgeW91IHdpc2ggdG8gZGVsZXRlIGZpcnN0LiI6ICJWZXdpamRlciBhbGxlIG9uZGVybGlnZ2VuZGUgYmVzdGFuZGVuL21hcHBlbiBlZXJzdC4iLAorICAgICAgICAiUGxlYXNlIGVudGVyIG5hbWUgZm9yIG5ldyBmb2xkZXIuLi4iOiAiTmFhbSB2YW4gbmlldXdlIG1hcC4uLiIsCisgICAgICAgICJQbGVhc2UgZW50ZXIgbmV3IG5hbWUgZm9yIHRoaXMgZmlsZS4uLiI6ICJOaWV1d2UgYmVzdGFuZHNuYWFtLi4uIiwKKyAgICAgICAgIlBsZWFzZSBlbnRlciBuZXcgbmFtZSBmb3IgdGhpcyBmb2xkZXIuLi4iOiAiR2VlZiBlZW4gbmlldXdlIG5hYW0gdm9vciBkZXplIG1hcC4uLiIsCisgICAgICAgICJSb3RhdGUgMTgwIMKwIjogIkRyYWFpIDE4MMKwIG9tIiwKKyAgICAgICAgIlJvdGF0ZSA5MCDCsCBDQ1ciOiAiRHJhYWkgbGlua3Mgb20gOTDCsCIsCisgICAgICAgICJSb3RhdGUgOTAgwrAgQ1ciOiAiRHJhYWkgcmVjaHRzIG9tIDkwwrAiLAorICAgICAgICAiU2l6ZSI6ICJHcm9vdHRlIiwKKyAgICAgICAgIlNvdXJjZSBmaWxlL2ZvbGRlciBub3QgZm91bmQuIjogIkJyb24gYmVzdGFuZC9tYXAgbmlldCBnZXZvbmRlbi4iLAorICAgICAgICAiVGh1bWJuYWlsIFZpZXciOiAiTWluaWF0dXJlbiIsCisgICAgICAgICJUb3RhbCBTaXplIjogIlRvdGFhbGdyb290dGUiLAorICAgICAgICAiVG90YWwgU2l6ZSA6ICRtYXhfZm9sZGVyc2l6ZV9tYiBNQiwgRnJlZSBTcGFjZTogJGZyZWVfc3BhY2UiOiAiVG90YWFsZ3Jvb3R0ZTogJG1heF9mb2xkZXJzaXplX21iIE1CLCBub2cgdnJpajogJGZyZWVfc3BhY2UiLAorICAgICAgICAiVW5hYmxlIHRvIHJlbmFtZSBmaWxlLiBGaWxlIG9mIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMgb3JcbmZvbGRlciBkb2Vzbid0IGhhdmUgd3JpdGUgcGVybWlzc2lvbi4iOiAiSGVybm9lbWVuIG5pZXQgbW9nZWxpamsuIEJlc3RhbmQgYmVzdGFhdCBhbCBvZlxubWFwIGhlZWZ0IGdlZW4gc2NocmlqZiB0b2VzdGVtbWluZy4iLAorICAgICAgICAiVW5hYmxlIHRvIHVwbG9hZCBGaWxlLiBcbkVpdGhlciBNYXhpbXVtIGZpbGUgc2l6ZSBbJG1heF9zaXplIEtCXSBleGNlZWRlZCBvclxuRm9sZGVyIGRvZXNuJ3QgaGF2ZSB3cml0ZSBwZXJtaXNzaW9uLiI6ICJCZXN0YW5kcyB1cGxvYWQgbmlldCBtb2dlbGlqay5cbk1heGltYWxlIGJlc3RhbmRzZ3Jvb3R0ZSBbJG1heF9zaXplIEtCXSBvdmVydHJlZGVuXG5vZiBkZSBtYXAgaGVlZnQgZ2VlbiBzY2hyaWpmIHRvZXN0ZW1taW5nLiIsCisgICAgICAgICJVbnRpdGxlZCI6ICJHZWVuIHRpdGVsIiwKKyAgICAgICAgIlVwbG9hZDoiOiAiVXBsb2FkOiIsCisgICAgICAgICJVcGxvYWRpbmciOiAiVXBsb2FkZW4iLAorICAgICAgICAiVXBsb2FkaW5nLi4uIjogIlVwbG9hZGVuLi4uIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvcGwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9wbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzNkNTYzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvcGwuanMKQEAgLTAsMCArMSwxMzMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicGwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJzYm90dG9tIjogIkFicy4gZMOzxYIiLAorICAgICJBYnNtaWRkbGUiOiAiQWJzLiDFm3JvZGVrIiwKKyAgICAiQWxpZ24iOiAiV3lyw7N3bmFuaWUiLAorICAgICJBbHQiOiAiQWx0IiwKKyAgICAiQmFzZWxpbmUiOiAiTGluaWEgYmF6b3dhIiwKKyAgICAiQm9yZGVyIjogIlJhbWthIiwKKyAgICAiQm9yZGVyIENvbG9yIjogIktvbG9yIHJhbWtpIiwKKyAgICAiQm90dG9tIjogIkTDs8WCIiwKKyAgICAiQ2FuY2VsIjogIkFudWx1aiIsCisgICAgIkNsZWFyIjogIld5Y3p5xZvEhyIsCisgICAgIkNvbG9yIjogIktvbG9yIiwKKyAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIlphY2hvd2FqIHByb3BvcmNqZSIsCisgICAgIkNvcHkiOiAiS29waXVqIiwKKyAgICAiQ3JvcCI6ICJQcnp5dG5paiIsCisgICAgIkN1dCI6ICJXeXRuaWoiLAorICAgICJEaXJlY3RvcnkiOiAiS2F0YWxvZyIsCisgICAgIkRpcmVjdG9yeSBVcCI6ICJLYXRhbG9nIHd5xbxlaiIsCisgICAgIkVkaXQiOiAiRWR5dHVqIiwKKyAgICAiRmlsZSBNYW5hZ2VyIjogIk1lbmVkxbxlciBwbGlrw7N3IiwKKyAgICAiRmlsZW5hbWU6IjogIk5hendhIHBsaWt1OiIsCisgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICJPZHdyw7PEhyBwb3ppb21vIiwKKyAgICAiRmxpcCBJbWFnZSI6ICJPZHdyw7PEhyIsCisgICAgIkZsaXAgVmVydGljYWwiOiAiT2R3csOzxIcgcGlvbm93byIsCisgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICJCcmFrIG9ic8WCdWdpIHBsaWvDs3cgR0lGLCBlZHljamEgamVzdCBuaWVtb8W8bGl3YS4iLAorICAgICJIZWlnaHQiOiAiV3lzb2tvxZvEhyIsCisgICAgIkhlaWdodDoiOiAiV3lzb2tvxZvEhzoiLAorICAgICJJbnNlcnQgRmlsZSBMaW5rIjogIldzdGF3IG9kbm/Fm25payBkbyBwbGlrdSBuYSBzZXJ3ZXJ6ZSIsCisgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIk5pZXByYXdpZMWCb3d5IGthdGFsb2cgYmF6b3d5OiIsCisgICAgIkpQRUcgSGlnaCI6ICJKUEVHIHd5c29rYSIsCisgICAgIkpQRUcgTG93IjogIkpQRUcgbmlza2EiLAorICAgICJKUEVHIE1lZGl1bSI6ICJKUEVHIMWbcmVkbmlhIiwKKyAgICAiTGVmdCI6ICJEbyBsZXdlaiIsCisgICAgIkxvYWRpbmciOiAixYFhZG93YW5pZSIsCisgICAgIkxvY2siOiAiWmFibG9rdWoiLAorICAgICJNYXJnaW4iOiAiT2RzdMSZcCIsCisgICAgIk1hcmtlciI6ICJaYXpuYWN6IiwKKyAgICAiTWVhc3VyZSI6ICJabWllcnoiLAorICAgICJNaWRkbGUiOiAixZpyb2RlayIsCisgICAgIk5ldyBGb2xkZXIiOiAiTm93eSBrYXRhbG9nIiwKKyAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOb3dlIG9rbm8gKF9ibGFuaykiLAorICAgICJObyBGaWxlcyBGb3VuZCI6ICJOaWUgem5hbGV6aW9ubyBwbGlrw7N3IiwKKyAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIk9icmF6ZWsgbmllZG9zdMSZcG55IiwKKyAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJCcmFrIiwKKyAgICAiTm90IHNldCI6ICJOaWUgdXN0YXdpb25lIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQYWRkaW5nIjogIldjacSZY2llIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJXeXLDs3duYW5pZSB0ZWdvIG9icmF6a2EgbmEgc3Ryb25pZSIsCisgICAgIlByZXZpZXciOiAiUG9kZ2zEhWQiLAorICAgICJRdWFsaXR5OiI6ICJKYWtvxZvEhyIsCisgICAgIlJlZnJlc2giOiAiT2TFm3dpZcW8IiwKKyAgICAiUmVuYW1lIjogIlptaWXFhCBuYXp3xJkiLAorICAgICJSZXNpemUiOiAiUHJ6ZXNrYWx1aiIsCisgICAgIlJpZ2h0IjogIkRvIHByYXdlaiIsCisgICAgIlJvdGF0ZSI6ICJPYnLDs8SHIiwKKyAgICAiUm90YXRlIEltYWdlIjogIk9icsOzxIciLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiVGEgc2FtYSByYW1rYSAoX3NlbGYpIiwKKyAgICAiU2F2ZSI6ICJaYXBpc3oiLAorICAgICJTdGFydCBYOiI6ICJQb2N6xIV0ZWsgWDoiLAorICAgICJTdGFydCBZOiI6ICJQb2N6xIV0ZWsgWToiLAorICAgICJUYXJnZXQgV2luZG93IjogIkRvY2Vsb3dlIG9rbm8iLAorICAgICJUZXh0dG9wIjogIkfDs3JhIHRla3N0dSIsCisgICAgIlRpdGxlICh0b29sdGlwKSI6ICJUeXR1xYIiLAorICAgICJUb3AiOiAiR8OzcmEiLAorICAgICJUb3AgZnJhbWUgKF90b3ApIjogIkfFgsOzd25hIHJhbWthIChfdG9wKSIsCisgICAgIlRyYXNoIjogIlVzdcWEIiwKKyAgICAiVXBsb2FkIjogIldncmFqIiwKKyAgICAiVzoiOiAiTDoiLAorICAgICJXaWR0aCI6ICJTemVyb2tvxZvEhyIsCisgICAgIldpZHRoOiI6ICJTemVyb2tvxZvEhzoiLAorICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiWmF6bmFjeiB0ZWtzdCBwcnplZCBkb2RhbmllbSBvZG5vxZtuaWthLiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFuZ2xlOiI6ICJLxIV0OiIsCisgICAgICAgICJDYW5jZWxsZWQgcmVuYW1lLiI6ICJBbnVsb3dhbm8gem1pYW7EmSBuYXp3eSBwbGlrdS4iLAorICAgICAgICAiQ2Fubm90IHVwbG9hZCAkZXh0ZW5zaW9uIEZpbGVzLiBQZXJtaXNzaW9uIGRlbmllZC4iOiAiTmllIG1vxbxuYSBiecWCbyB3Z3JhxIcgcGxpa3UuXG5cbk5pZWRvendvbG9uZSByb3pzemVyemVuaWUgcGxpa3UgWyRleHRlbnNpb25dLiIsCisgICAgICAgICJDYW5ub3QgdXBsb2FkLiBNYXhpbXVtIGZvbGRlciBzaXplIHJlYWNoZWQuIERlbGV0ZSB1bndhbnRlZCBmaWxlcyBhbmQgdHJ5IGFnYWluLiI6ICJXZ3J5d2FuaWUgbmllIHBvd2lvZMWCbyBzacSZLlxuXG5Qcnpla3JvY3pvbm8gZG96d29sb255IGxpbWl0IG1pZWpzY2EuIFVzdcWEIG5pZWNoY2lhbmUgcGxpa2kgaSBzcHLDs2J1aiBwb25vd25pZS4iLAorICAgICAgICAiQ29weSBcIiRmaWxlXCIgZnJvbSBcIiRkaXJcIiBoZXJlIjogIlNrb3BpdWogXCIkZmlsZVwiIHogXCIkZGlyXCIgdHV0YWoiLAorICAgICAgICAiQ29weSBmb2xkZXIgXCIkZmlsZVwiIGZyb20gXCIkZGlyXCIgaGVyZSI6ICJTa29waXVqIGZvbGRlciBcIiRmaWxlXCIgeiBcIiRkaXJcIiB0dXRhaiIsCisgICAgICAgICJDb3VsZCBub3QgY3JlYXRlIGRlc3RpbmF0aW9uIGZvbGRlci4iOiAiTmllIG1vxbxuYSBiecWCbyB1dHdvcnp5xIcgZm9sZGVydSBkb2NlbG93ZWdvLiIsCisgICAgICAgICJEYXRlIE1vZGlmaWVkIjogIkRhdGEgb3N0Lm1vZHlmLiIsCisgICAgICAgICJEZWxldGUgZmlsZSBcIiRmaWxlXCI/IjogIiRmaWxlXG5cblVzdW7EhcSHIHBsaWs/IiwKKyAgICAgICAgIkRlbGV0ZSBmb2xkZXIgXCIkZGlyXCI/IjogIiRkaXJcblxuVXN1bsSFxIcga2F0YWxvZyA/IiwKKyAgICAgICAgIkRlc3RpbmF0aW9uIGZpbGUvZm9sZGVyIGFscmVhZHkgZXhpc3RzLiI6ICJQbGlrL2ZvbGRlciBkb2NlbG93eSBqdcW8IGlzdG5pZWplLiIsCisgICAgICAgICJGaWxlIFwiJGZpbGVcIiBzdWNjZXNzZnVsbHkgdXBsb2FkZWQuIjogIlBsaWsgXCIkZmlsZVwiIHdncmFubyBuYSBzZXJ3ZXIuIiwKKyAgICAgICAgIkZpbGUgTmFtZSI6ICJOYXp3YSBwbGlrdSIsCisgICAgICAgICJGaWxlIHBhc3RlZCBPSy4iOiAiV2tsZWpvbm8gcGxpay4iLAorICAgICAgICAiRmlsZSBzYXZlZC4iOiAiWmFwaXNhbm8gcGxpay4iLAorICAgICAgICAiRmlsZSB3YXMgbm90IHNhdmVkLiI6ICJOaWUgemFwaXNhbm8gcGxpa3UuIiwKKyAgICAgICAgIkZvbGRlciBpcyBub3QgZW1wdHkuIFBsZWFzZSBkZWxldGUgYWxsIEZpbGVzIGFuZCBTdWJmb2xkZXJzIGluc2lkZS4iOiAiRm9sZGVyIG5pZSBqZXN0IHB1c3R5LiBOYWpwaWVydyB1c3XFhCB3c3p5c3RraWUgcGxpa2kgaSBwb2Rmb2xkZXJ5IHRlZ28gZm9sZGVydS4iLAorICAgICAgICAiRnJlZSBTcGFjZSI6ICJQb3pvc3RhxYJvIiwKKyAgICAgICAgIkltYWdlIEZpbGUiOiAiUGxpayBvYnJhemthIiwKKyAgICAgICAgIkltYWdlIEZvcm1hdCI6ICJGb3JtYXQgcGxpa3U6IiwKKyAgICAgICAgIkltYWdlIFNpemUiOiAiV3ltaWFyeSIsCisgICAgICAgICJJbnNlcnQgSW1hZ2UiOiAiV3N0YXcgb2JyYXplayIsCisgICAgICAgICJJbnZhbGlkIGZvbGRlciBuYW1lLCBwbGVhc2UgY2hvb3NlIGFub3RoZXIgZm9sZGVyIG5hbWUuIjogIk5pZXByYXdpZMWCb3dhIG5hendhIGthdGFsb2d1LCB3eWJpZXJ6IGlubsSFLiIsCisgICAgICAgICJMaXN0IFZpZXciOiAiTGlzdGEiLAorICAgICAgICAiTWF4aW11bSBmaWxlIHNpemUgWyRtYXhfc2l6ZSBLQl0gZXhjZWVkZWQuIjogIldncnl3YW5pZSBuaWUgcG93aW9kxYJvIHNpxJkuXG5cblByemVrcm9jem9ubyBtYWtzeW1hbG55IHJvem1pYXIgcGxpa3UgWyRtYXhfc2l6ZSBLQl0uIiwKKyAgICAgICAgIk1vdmUgXCIkZmlsZVwiIGZyb20gXCIkZGlyXCIgaGVyZSI6ICJQcnplbmllxZsgXCIkZmlsZVwiIHogXCIkZGlyXCIgdHV0YWoiLAorICAgICAgICAiTW92ZSBmb2xkZXIgXCIkZmlsZVwiIGZyb20gXCIkZGlyXCIgaGVyZSI6ICJQcnplbmllxZsgZm9sZGVyIFwiJGZpbGVcIiB6IFwiJGRpclwiIHR1dGFqIiwKKyAgICAgICAgIk5hbWUiOiAiTmF6d2EiLAorICAgICAgICAiTm8gSW1hZ2Ugc2VsZWN0ZWQuIjogIk5pZSB6YXpuYWN6b25vIG9icmF6a2EuIiwKKyAgICAgICAgIk90aGVyIjogIklubmUuLi4iLAorICAgICAgICAiUGFzdGUiOiAiV2tsZWoiLAorICAgICAgICAiUGFzdGUgZmFpbGVkLlxuTWF5YmUgZm9sZGVyIGRvZXNuJ3QgaGF2ZSB3cml0ZSBwZXJtaXNzaW9uLiI6ICJXa2xlamVuaWUgbmllIHBvd2lvZMWCbyBzacSZLlxuUHJhd2RvcG9kb2JuaWUgbmllIG1hc3ogcHJhdyB6YXBpc3UgdyB0eW0gZm9sZGVyemUuIiwKKyAgICAgICAgIlBsZWFzZSBkZWxldGUgYWxsIGZpbGVzL2ZvbGRlcnMgaW5zaWRlIHRoZSBmb2xkZXIgeW91IHdpc2ggdG8gZGVsZXRlIGZpcnN0LiI6ICJOYWpwaWVydyB1c3XFhCB3c3p5c3RraWUgcGxpa2kgaSBwb2RrYXRhbG9naSBrYXRhbG9ndS4iLAorICAgICAgICAiUGxlYXNlIGVudGVyIG5hbWUgZm9yIG5ldyBmb2xkZXIuLi4iOiAiUG9kYWogbmF6d8SZIG5vd2VnbyBmb2xkZXJ1Li4uIiwKKyAgICAgICAgIlBsZWFzZSBlbnRlciBuZXcgbmFtZSBmb3IgdGhpcyBmaWxlLi4uIjogIlBvZGFqIG5vd8SFIG5henfEmSBkbGEgdGVnbyBwbGlrdS4uLiIsCisgICAgICAgICJQbGVhc2UgZW50ZXIgbmV3IG5hbWUgZm9yIHRoaXMgZm9sZGVyLi4uIjogIlBvZGFqIG5vd8SFIG5henfEmSBkbGEgdGVnbyBmb2xkZXJ1Li4uIiwKKyAgICAgICAgIlJvdGF0ZSAxODAgwrAiOiAiT2Jyw7PEhyAxODDCsCIsCisgICAgICAgICJSb3RhdGUgOTAgwrAgQ0NXIjogIk9icsOzxIcgOTDCsCB3IGxld28iLAorICAgICAgICAiUm90YXRlIDkwIMKwIENXIjogIk9icsOzxIcgOTDCsCB3IHByYXdvIiwKKyAgICAgICAgIlNpemUiOiAiUm96bWlhciIsCisgICAgICAgICJTb3VyY2UgZmlsZS9mb2xkZXIgbm90IGZvdW5kLiI6ICJOaWUgem5hbGV6aW9ubyBwbGlrdS9mb2xkZXJ1IMW6csOzZMWCb3dlZ28uIiwKKyAgICAgICAgIlRodW1ibmFpbCBWaWV3IjogIk1pbmlhdHVya2kiLAorICAgICAgICAiVG90YWwgU2l6ZSI6ICJNaWVqc2NlIG5hIHNlcndlcnplIiwKKyAgICAgICAgIlRvdGFsIFNpemUgOiAkbWF4X2ZvbGRlcnNpemVfbWIgTUIsIEZyZWUgU3BhY2U6ICRmcmVlX3NwYWNlIjogIkRvc3TEmXBueSBsaW1pdDogJG1heF9mb2xkZXJzaXplX21iIE1CLCBXb2xuZTogJGZyZWVfc3BhY2UiLAorICAgICAgICAiVW5hYmxlIHRvIHJlbmFtZSBmaWxlLiBGaWxlIG9mIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMgb3JcbmZvbGRlciBkb2Vzbid0IGhhdmUgd3JpdGUgcGVybWlzc2lvbi4iOiAiTmllIG1vZ8WCZW0gem1pZW5pxIcgbmF6d3kgcGxpa3UuIFBsaWsgbyBub3dlaiBuYXp3aWUganXFvCBpc3RuaWVqZVxubHViIHByYWsgcHJhdyB6YXBpc3UgZG8ga2F0YWxvZ3UuIiwKKyAgICAgICAgIlVuYWJsZSB0byB1cGxvYWQgRmlsZS4gXG5FaXRoZXIgTWF4aW11bSBmaWxlIHNpemUgWyRtYXhfc2l6ZSBLQl0gZXhjZWVkZWQgb3JcbkZvbGRlciBkb2Vzbid0IGhhdmUgd3JpdGUgcGVybWlzc2lvbi4iOiAiV2dyeXdhbmllIG5pZSBwb3dpb2TFgm8gc2nEmS5cblxuUHJ6ZWtyb2N6b25vIG1ha3N5bWFsbnkgcm96bWlhciBwbGlrdSBbJG1heF9zaXplIEtCXSBsdWIgbmllIG1hIHVzdGF3aW9ueWNoIHByYXcgemFwaXN1IGRvIGZvbGRlcnUuIiwKKyAgICAgICAgIlVudGl0bGVkIjogIkJlel9uYXp3eSIsCisgICAgICAgICJVcGxvYWRpbmciOiAiV2dyeXdhbSIsCisgICAgICAgICJVcGxvYWRpbmcuLi4iOiAiV2dyeXdhbmllLi4uIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9wdF9ici5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWU0MDA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvcHRfYnIuanMKQEAgLTAsMCArMSwxMDUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiPkxpc3QgVmlldyI6ICI+TGlzdGEiLAorICAgICI+VGh1bWJuYWlsIFZpZXciOiAiPk1pbmlhdHVyYXMiLAorICAgICJBOiI6ICJBOiIsCisgICAgIkFic2JvdHRvbSI6ICJJbmZlcmlvciBhYnNvbHV0byIsCisgICAgIkFic21pZGRsZSI6ICJNZWlvIGFic29sdXRvIiwKKyAgICAiQWxpZ24iOiAiQWxpbmhhbWVudG8iLAorICAgICJBbHQiOiAiQWx0IiwKKyAgICAiQmFzZWxpbmUiOiAiTGluaGEgZGUgYmFzZSIsCisgICAgIkJvcmRlciI6ICJCb3JkYSIsCisgICAgIkJvcmRlciBDb2xvciI6ICJDw7RyIGRhIEJvcmRhIiwKKyAgICAiQm90dG9tIjogIkluZmVyaW9yIiwKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiQ2xlYXIiOiAiTGltcGFyIiwKKyAgICAiQ29sb3IiOiAiQ8O0ciIsCisgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICJNYW50ZXIgUHJvcG9yY2lvbmFsaWRhZGUiLAorICAgICJDb3B5IjogIkNvcGlhciIsCisgICAgIkNyb3AiOiAiUmVjb3J0YXIiLAorICAgICJDdXQiOiAiQ29ydGFyIiwKKyAgICAiRDoiOiAiRzoiLAorICAgICJEaXJlY3RvcnkiOiAiRGlyZXTDs3JpbyIsCisgICAgIkRpcmVjdG9yeSBVcCI6ICJEaXJldMOzcmlvIEFjaW1hIiwKKyAgICAiRWRpdCI6ICJFZGl0YXIiLAorICAgICJGaWxlIExpc3QiOiAiTGlzdGEgZGUgQXJxdWl2b3MiLAorICAgICJGaWxlIE1hbmFnZXIiOiAiR2VyZW5jaWFkb3IgZGUgQXJxdWl2b3MiLAorICAgICJGaWxlbmFtZToiOiAiTm9tZSBkbyBBcnF1aXZvOiIsCisgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICJFc3BlbGhhciBIb3Jpem9udGFsbWVudGUiLAorICAgICJGbGlwIEltYWdlIjogIkVzcGVsaGFyIEltYWdlbSIsCisgICAgIkZsaXAgVmVydGljYWwiOiAiRXNwZWxoYXIgVmVydGljYWxtZW50ZSIsCisgICAgIkZvbGRlciI6ICJQYXN0YSIsCisgICAgIkdJRiI6ICJHSUYiLAorICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiRm9ybWF0byBHSUYgbsOjbyDDqSBzdXBvcnRhZG8sIG7Do28gw6kgcG9zc8OtdmVsIGVkaXRhciBpbWFnZW0uIiwKKyAgICAiSDoiOiAiQToiLAorICAgICJIZWlnaHQiOiAiQWx0dXJhIiwKKyAgICAiSGVpZ2h0OiI6ICJBbHR1cmE6IiwKKyAgICAiSW1hZ2UgRWRpdG9yIjogIkVkaXRvciBkZSBJbWFnZW0iLAorICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiU2VsZcOnw6NvIGRlIEltYWdlbSIsCisgICAgIkluc2VydCBGaWxlIExpbmsiOiAiSW5zZXJpciBMaW5rIGRlIEFycXVpdm8iLAorICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICJEaXJldMOzcmlvIGJhc2UgaW52w6FsaWRvIiwKKyAgICAiSlBFRyBIaWdoIjogIkpQRUcgQWx0byIsCisgICAgIkpQRUcgTG93IjogIkpQRUcgQmFpeG8iLAorICAgICJKUEVHIE1lZGl1bSI6ICJKUEVHIE3DqWRpbyIsCisgICAgIkxlZnQiOiAiRXNxdWVyZGEiLAorICAgICJMb2FkaW5nIjogIkNhcnJlZ2FuZG8iLAorICAgICJMb2NrIjogIlRyYXZhciIsCisgICAgIk1hcmdpbiI6ICJNYXJnZW0iLAorICAgICJNYXJrZXIiOiAiTWFyY2FyIiwKKyAgICAiTWF4aW11bSBmb2xkZXIgc2l6ZSBsaW1pdCByZWFjaGVkLiBVcGxvYWQgZGlzYWJsZWQuIjogIkF0aW5naWRvIG8gbGltaXRlIG3DoXhpbW8gZGEgcGFzdGEuIEVudmlvIGRlc2F0aXZhZG8uIiwKKyAgICAiTWVhc3VyZSI6ICJNZWRpZGE6IiwKKyAgICAiTWlkZGxlIjogIk1laW8iLAorICAgICJOZXcgRm9sZGVyIjogIk5vdmEgUGFzdGEiLAorICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIk5vdmEgamFuZWxhIChfYmxhbmspIiwKKyAgICAiTm8gRmlsZXMgRm91bmQiOiAiTmVuaHVtIEFycXVpdm8gRW5jb250cmFkbyIsCisgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICJOZW5odW1hIEltYWdlbSBEaXNwb27DrXZlbCIsCisgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiTmVuaHVtICh1c28gaW1wbMOtY2l0bykiLAorICAgICJOb3Qgc2V0IjogIk7Do28gZGVmaW5pZG8iLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBORyI6ICJQTkciLAorICAgICJQYWRkaW5nIjogIkVzcGHDp2FtZW50byBJbnRlcm5vIiwKKyAgICAiUGxlYXNlIGVudGVyIHZhbHVlIjogIlBvciBmYXZvciwgZW50cmUgbyB2YWxvciIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zaWNpb25hbWVudG8gZGVzdGEgaW1hZ2VtIiwKKyAgICAiUHJldmlldyI6ICJWaXN1YWxpemFyIiwKKyAgICAiUXVhbGl0eToiOiAiUXVhbGlkYWRlOiIsCisgICAgIlJlZnJlc2giOiAiQXR1YWxpemFyIiwKKyAgICAiUmVuYW1lIjogIlJlbm9tZWFyIiwKKyAgICAiUmVzaXplIjogIlJlZGltZW5jaW9uYXIiLAorICAgICJSaWdodCI6ICJEaXJlaXRhKG8pIiwKKyAgICAiUm90YXRlIjogIlJvdGFjaW9uYXIiLAorICAgICJSb3RhdGUgMTgwICZkZWc7IjogIlJvdGFjaW9uYXIgMTgwICZkZWc7IiwKKyAgICAiUm90YXRlIDkwICZkZWc7IENDVyI6ICJSb3RhY2lvbmFyIDkwICZkZWc7IGFudGktaG9yw6FyaW8iLAorICAgICJSb3RhdGUgOTAgJmRlZzsgQ1ciOiAiUm90YWNpb25hciA5MCAmZGVnOyBob3LDoXJpbyIsCisgICAgIlJvdGF0ZSBJbWFnZSI6ICJSb3RhY2lvbmFyIEltYWdlbSIsCisgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJNZXNtYSBmcmFtZSAoX3NlbGYpIiwKKyAgICAiU2F2ZSI6ICJHcmF2YXIiLAorICAgICJTdGFydCBYOiI6ICJJbsOtY2lvIFg6IiwKKyAgICAiU3RhcnQgWToiOiAiSW7DrWNpbyBZIiwKKyAgICAiVGFyZ2V0IFdpbmRvdyI6ICJKYW5lbGEgRGVzdGlubyIsCisgICAgIlRleHR0b3AiOiAiVGV4dG8gbm8gdG9wbyIsCisgICAgIlRpdGxlICh0b29sdGlwKSI6ICJUw610dWxvICh0b29sdGlwKSIsCisgICAgIlRvcCI6ICJUb3BvIiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJGcmFtZSBkbyB0b3BvIChfdG9wKSIsCisgICAgIlRyYXNoIjogIkxpeG8iLAorICAgICJVcGxvYWQiOiAiRW52aWFyIiwKKyAgICAiVzoiOiAiTDoiLAorICAgICJXaWR0aCI6ICJMYXJndXJhIiwKKyAgICAiV2lkdGg6IjogIkxhcmd1cmE6IiwKKyAgICAiWDoiOiAiWDoiLAorICAgICJZOiI6ICJZOiIsCisgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICJWb2PDqiBwcmVjaXNhIHNlbGVjaW9uYXIgdW0gdGV4dG8gYW50ZXMgZGUgY3JpYXIgdW0gbm92byBsaW5rLiIsCisgICAgIlpvb20iOiAiQW1wbGlhw6fDo28iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJBbmdsZToiOiAiQW5ndWxvOiIsCisgICAgICAgICJJbWFnZSBGb3JtYXQiOiAiRm9ybWF0byBkYSBJbWFnZW0iCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9yby5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL3JvLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZjc1NzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9yby5qcwpAQCAtMCwwICsxLDM3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJvIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsaWduIjogIkFsaW5pZXJlIiwKKyAgICAiQmFzZWxpbmUiOiAiQmFzZWxpbmUiLAorICAgICJCb3JkZXIiOiAiQ2hlbmFyIiwKKyAgICAiQm90dG9tIjogIkpvcyIsCisgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiLAorICAgICJDb2xvciI6ICJDdWxvYXJlIiwKKyAgICAiSGVpZ2h0IjogIsOObsSDbMWjaW1lYSIsCisgICAgIkhlaWdodDoiOiAiw45uxINsxaNpbWVhIiwKKyAgICAiTGVmdCI6ICJTdMOibmdhIiwKKyAgICAiTWFyZ2luIjogIk1hcmdpbmUiLAorICAgICJNaWRkbGUiOiAiTWlqbG9jIiwKKyAgICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJGZXJlYXN0csSDIG5vdcSDIChfYmxhbmspIiwKKyAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJOaW1pYyAoZm9sb3NlxZ90ZSBjZS1pIGltcGxpY2l0KSIsCisgICAgIk9LIjogIkFjY2VwdMSDIiwKKyAgICAiUGFkZGluZyI6ICJTcGHFo2llcmUiLAorICAgICJSaWdodCI6ICJEcmVhcHRhIiwKKyAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIkFjZWVhxZ9pIGZlcmVhc3RyxIMgKF9zZWxmKSIsCisgICAgIlRpdGxlICh0b29sdGlwKSI6ICJUaXRsdWwgKHRvb2x0aXApOiIsCisgICAgIlRvcCI6ICJTdXMiLAorICAgICJUb3AgZnJhbWUgKF90b3ApIjogIkZlcmVhc3RyYSBwcmluY2lwYWzEgyAoX3RvcCkiLAorICAgICJXaWR0aCI6ICJMxIPFo2ltZSIsCisgICAgIldpZHRoOiI6ICJMxIPFo2ltZSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyY2JkZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL3J1LmpzCkBAIC0wLDAgKzEsNzUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicnUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJzYm90dG9tIjogItCf0L4g0L3QuNC20L3QtdC5INCz0YDQsNC90LjRhtC1IiwKKyAgICAiQWJzbWlkZGxlIjogItCf0L4g0YHQtdGA0LXQtNC40L3QtSDRgtC10LrRgdGC0LAiLAorICAgICJBbGlnbiI6ICLQktGL0YDQsNCy0L3QuNCy0LDQvdC40LUiLAorICAgICJCYXNlbGluZSI6ICLQn9C+INC90LjQttC90LXQuSDQs9GA0LDQvdC40YbQtSDRgtC10LrRgdGC0LAiLAorICAgICJCb3JkZXIiOiAi0KDQsNC80LrQsCIsCisgICAgIkJvdHRvbSI6ICLQn9C+INC90LjQttC90LXQvNGDINC60YDQsNGOIiwKKyAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgIkNsZWFyIjogItCe0YfQuNGB0YLQuNGC0YwiLAorICAgICJDb2xvciI6ICLQptCy0LXRgiIsCisgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICLQodC+0YXRgNCw0L3QuNGC0Ywg0L/RgNC+0L/QvtGA0YbQuNC4IiwKKyAgICAiQ3JvcCI6ICLQntCx0YDQtdC30LDRgtGMIiwKKyAgICAiRGlyZWN0b3J5IjogItCf0LDQv9C60LAiLAorICAgICJEaXJlY3RvcnkgVXAiOiAi0J/QsNC/0LrQsCDQvdCw0LLQtdGA0YUiLAorICAgICJFZGl0IjogItCf0YDQsNCy0LrQsCIsCisgICAgIkZpbGVuYW1lOiI6ICLQmNC80Y8g0YTQsNC50LvQsCIsCisgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICLQoNCw0LfQstC10YDQvdGD0YLRjCDQv9C+INCz0L7RgNC40LfQvtC90YLQsNC70LgiLAorICAgICJGbGlwIEltYWdlIjogItCg0LDQt9Cy0LXRgNC90YPRgtGMINC60LDRgNGC0LjQvdC60YMiLAorICAgICJGbGlwIFZlcnRpY2FsIjogItCg0LDQt9Cy0LXRgNC90YPRgtGMINC/0L4g0LLQtdGA0YLQuNC60LDQu9C4IiwKKyAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogItCk0L7RgNC80LDRgiBHSUYg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPLCDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1INC60LDRgNGC0LjQvdC60Lgg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPLiIsCisgICAgIkhlaWdodCI6ICLQktGL0YHQvtGC0LAiLAorICAgICJIZWlnaHQ6IjogItCS0YvRgdC+0YLQsCIsCisgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogItCd0LXQstC10YDQvdCw0Y8g0LHQsNC30L7QstCw0Y8g0L/QsNC/0LrQsDoiLAorICAgICJKUEVHIEhpZ2giOiAiSlBFRyDQstGL0YHQvtC6LiIsCisgICAgIkpQRUcgTG93IjogIkpQRUcg0L3QuNC30LouIiwKKyAgICAiSlBFRyBNZWRpdW0iOiAiSlBFRyDRgdGA0LXQtNC9LiIsCisgICAgIkxlZnQiOiAi0J/QviDQu9C10LLQvtC80YMg0LrRgNCw0Y4iLAorICAgICJMb2FkaW5nIjogItCX0LDQs9GA0YPQt9C60LAiLAorICAgICJMb2NrIjogItCR0LvQvtC60LjRgNC+0LLQutCwIiwKKyAgICAiTWFyZ2luIjogItCe0YLRgdGC0YPQvyIsCisgICAgIk1hcmtlciI6ICLQnNCw0YDQutC10YAiLAorICAgICJNZWFzdXJlIjogItCY0LfQvNC10YDQtdC90LjQtSIsCisgICAgIk1pZGRsZSI6ICLQn9C+0YHRgNC10LTQuNC90LUiLAorICAgICJOZXcgRm9sZGVyIjogItCd0L7QstCw0Y8g0L/QsNC/0LrQsCIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAi0J3QvtCy0L7QtSDQvtC60L3QviAoX2JsYW5rKSIsCisgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICLQndC10YIg0LTQvtGB0YLRg9C/0L3Ri9GFINC60LDRgNGC0LjQvdC+0LoiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogItCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOIiwKKyAgICAiTm90IHNldCI6ICLQndC1INGD0YHRgtCw0L3QvtCy0LvQtdC90L4iLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBhZGRpbmciOiAi0J/QvtC70Y8iLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogItCg0LDRgdC/0L7Qu9C+0LbQtdC90LjQtSDQuNC30L7QsdGA0LDQttC10L3QuNGPIiwKKyAgICAiUHJldmlldyI6ICLQn9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdGL0Lkg0L/RgNC+0YHQvNC+0YLRgCIsCisgICAgIlF1YWxpdHk6IjogItCa0LDRh9C10YHRgtCy0L4iLAorICAgICJSZWZyZXNoIjogItCe0LHQvdC+0LLQuNGC0YwiLAorICAgICJSZXNpemUiOiAi0JzQsNGB0YjQsNCx0LjRgNC+0LLQsNGC0YwiLAorICAgICJSaWdodCI6ICLQn9C+INC/0YDQsNCy0L7QvNGDINC60YDQsNGOIiwKKyAgICAiUm90YXRlIjogItCf0L7QstC10YDQvdGD0YLRjCIsCisgICAgIlJvdGF0ZSBJbWFnZSI6ICLQn9C+0LLQtdGA0L3Rg9GC0Ywg0LrQsNGA0YLQuNC90LrRgyIsCisgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICLQotC+INC20LUg0L7QutC90L4gKF9zZWxmKSIsCisgICAgIlNhdmUiOiAi0KHQvtGF0YDQsNC90LjRgtGMIiwKKyAgICAiU3RhcnQgWDoiOiAi0J3QsNGH0LDQu9C+IFgiLAorICAgICJTdGFydCBZOiI6ICLQndCw0YfQsNC70L4gWSIsCisgICAgIlRleHR0b3AiOiAi0J/QviDQstC10YDRhdC90LXQuSDQs9GA0LDQvdC40YbQtSDRgtC10LrRgdGC0LAiLAorICAgICJUaXRsZSAodG9vbHRpcCkiOiAi0JLRgdC/0LvRi9Cy0LDRjtGJ0LDRjyDQv9C+0LTRgdC60LDQt9C60LAiLAorICAgICJUb3AiOiAi0J/QviDQstC10YDRhdC90LXQvNGDINC60YDQsNGOIiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICLQoNC+0LTQuNGC0LXQu9GM0YHQutC+0LUg0L7QutC90L4gKF90b3ApIiwKKyAgICAiVHJhc2giOiAi0JrQvtGA0LfQuNC90LAiLAorICAgICJVcGxvYWQiOiAi0JfQsNCz0YDRg9C30LjRgtGMIiwKKyAgICAiVzoiOiAi0Kg6IiwKKyAgICAiV2lkdGgiOiAi0KjQuNGA0LjQvdCwIiwKKyAgICAiV2lkdGg6IjogItCo0LjRgNC40L3QsCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL3NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvc2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU1NzczNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL3NoLmpzCkBAIC0wLDAgKzEsMzYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJzYm90dG9tIjogIkFwc29sdXRubyBkbm8iLAorICAgICJBYnNtaWRkbGUiOiAiQXBzb2x1dG5hIHNyZWRpbmEiLAorICAgICJCYXNlbGluZSI6ICJEb25qYSBsaW5pamEiLAorICAgICJCb3R0b20iOiAiRG5vIiwKKyAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIiwKKyAgICAiTGVmdCI6ICJMZXZvIiwKKyAgICAiTWlkZGxlIjogIlNyZWRpbmEiLAorICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIk5vdm9tIHByb3pvcnUgKF9ibGFuaykiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogImtvcmlzdGkgcG9kcmF6dW1ldmFubyIsCisgICAgIk5vdCBzZXQiOiAiTmlqZSBwb3N0YXZsamVubyIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJQb3N0YXZsamFuamUgb3ZlIHNsaWtlIiwKKyAgICAiUHJldmlldyI6ICJQcmVnbGVkIiwKKyAgICAiUmlnaHQiOiAiRGVzbm8iLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAiSXN0aSBmcmVqbSAoX3NlbGYpIiwKKyAgICAiVGV4dHRvcCI6ICJWcmggdGVrc3RhIiwKKyAgICAiVGl0bGUgKHRvb2x0aXApIjogIk5heml2ICh0b29sdGlwKToiLAorICAgICJUb3AiOiAiVnJoIiwKKyAgICAiVG9wIGZyYW1lIChfdG9wKSI6ICJHbGF2bmkgZnJlam0gKF90b3ApIiwKKyAgICAiV2lkdGgiOiAixaBpcmluYSIsCisgICAgIldpZHRoOiI6ICLFoGlyaW5hIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRVhURU5ERURGSUxFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvc2kuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9zaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzk1NjdiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvc2kuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUHJla2xpxI1pIiwKKyAgICAiT0siOiAiViByZWR1IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRVhURU5ERURGSUxFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvc3IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9zci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjkzOWVkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvc3IuanMKQEAgLTAsMCArMSwzNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAi0JDQv9GB0L7Qu9GD0YLQvdC+INC00L3QviIsCisgICAgIkFic21pZGRsZSI6ICLQkNC/0YHQvtC70YPRgtC90LAg0YHRgNC10LTQuNC90LAiLAorICAgICJCYXNlbGluZSI6ICLQlNC+0ZrQsCDQu9C40L3QuNGY0LAiLAorICAgICJCb3R0b20iOiAi0JTQvdC+IiwKKyAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IiwKKyAgICAiTGVmdCI6ICLQm9C10LLQviIsCisgICAgIk1pZGRsZSI6ICLQodGA0LXQtNC40L3QsCIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAi0J3QvtCy0L7QvCDQv9GA0L7Qt9C+0YDRgyAoX2JsYW5rKSIsCisgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi0LrQvtGA0LjRgdGC0Lgg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90L4iLAorICAgICJOb3Qgc2V0IjogItCd0LjRmNC1INC/0L7RgdGC0LDQstGZ0LXQvdC+IiwKKyAgICAiT0siOiAiT0siLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogItCf0L7RgdGC0LDQstGZ0LDRmtC1INC+0LLQtSDRgdC70LjQutC1IiwKKyAgICAiUHJldmlldyI6ICLQn9GA0LXQs9C70LXQtCIsCisgICAgIlJpZ2h0IjogItCU0LXRgdC90L4iLAorICAgICJTYW1lIGZyYW1lIChfc2VsZikiOiAi0JjRgdGC0Lgg0YTRgNC10ZjQvCAoX3NlbGYpIiwKKyAgICAiVGV4dHRvcCI6ICLQktGA0YUg0YLQtdC60YHRgtCwIiwKKyAgICAiVGl0bGUgKHRvb2x0aXApIjogItCd0LDQt9C40LIgKHRvb2x0aXApOiIsCisgICAgIlRvcCI6ICLQktGA0YUiLAorICAgICJUb3AgZnJhbWUgKF90b3ApIjogItCT0LvQsNCy0L3QuCDRhNGA0LXRmNC8IChfdG9wKSIsCisgICAgIldpZHRoIjogItCo0LjRgNC40L3QsCIsCisgICAgIldpZHRoOiI6ICLQqNC40YDQuNC90LAiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9zdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL3N2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MjEzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy9zdi5qcwpAQCAtMCwwICsxLDQzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInN2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsaWduIjogIkp1c3RlcmEiLAorICAgICJCYXNlbGluZSI6ICJCYXNsaW5qZSIsCisgICAgIkJvcmRlciI6ICJLYW50bGluamUiLAorICAgICJCb3R0b20iOiAiQm90dGVuIiwKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIkNsZWFyIjogIlTDtm0iLAorICAgICJDb2xvciI6ICJGw6RyZyIsCisgICAgIkNvcHkiOiAiS29waWVyYSIsCisgICAgIkNyb3AiOiAiQmVza2rDpHIiLAorICAgICJDdXQiOiAiS2xpcHAgdXQiLAorICAgICJIZWlnaHQiOiAiSMO2amQiLAorICAgICJIZWlnaHQ6IjogIkjDtmpkOiIsCisgICAgIkxlZnQiOiAiVmVuc3RlciIsCisgICAgIk1hcmdpbiI6ICJNYXJnaW5hbCIsCisgICAgIk1pZGRsZSI6ICJNaXR0ZW4iLAorICAgICJOZXcgd2luZG93IChfYmxhbmspIjogIk55dHQgZsO2bnN0ZXIgKF9ibGFuaykiLAorICAgICJOb25lICh1c2UgaW1wbGljaXQpIjogIkluZ2VuIChhbnbDpG5kIHN0YW5kYXJkaW5zdMOkbGxpbmcpIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQYWRkaW5nIjogIkx1ZnQiLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIkJpbGRlbnMgcG9zaXRpb25lcmluZyIsCisgICAgIlByZXZpZXciOiAiRsO2cmhhbmRzZ3JhbnNrYSIsCisgICAgIlJpZ2h0IjogIkjDtmdlciIsCisgICAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJTYW1tYSByYW0gKF9zZWxmKSIsCisgICAgIlRpdGxlICh0b29sdGlwKSI6ICJUaXRlbCAodG9vbHRpcCk6IiwKKyAgICAiVG9wIjogIsOWdmVya2FudCIsCisgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiVG9wcHJhbSAoX3RvcCkiLAorICAgICJXaWR0aCI6ICJCcmVkZCIsCisgICAgIldpZHRoOiI6ICJCcmVkZDoiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL3RoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZDExNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy90aC5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLguKLguIHguYDguKXguLTguIEiLAorICAgICJPSyI6ICLguJXguIHguKXguIciLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy90ci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL3RyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYTU3NTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy90ci5qcwpAQCAtMCwwICsxLDQzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICJTYWx0IGFsdGEiLAorICAgICJBYnNtaWRkbGUiOiAiU2FsdCBvcnRhIiwKKyAgICAiQWxpZ24iOiAiSGl6YWxhIiwKKyAgICAiQmFzZWxpbmUiOiAiVGFiYW4gaGl6YXPEsSIsCisgICAgIkJvcmRlciI6ICJLZW5hcmzEsWsiLAorICAgICJCb3R0b20iOiAiQWx0YSIsCisgICAgIkNhbmNlbCI6ICLEsHB0YWwiLAorICAgICJDb2xvciI6ICJSZW5rIiwKKyAgICAiSGVpZ2h0IjogIlnDvGtzZWtsaWsiLAorICAgICJIZWlnaHQ6IjogIlnDvGtzZWtsaWsiLAorICAgICJMZWZ0IjogIlNvbGEiLAorICAgICJNYXJnaW4iOiAiS2VuYXIgYm/Fn2x1xJ91IiwKKyAgICAiTWlkZGxlIjogIk9ydGFsYSIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiWWVuaSBwZW5jZXJlIChfYmxhbmspIiwKKyAgICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJIacOnYmlyaSAow5ZydMO8aykiLAorICAgICJOb3Qgc2V0IjogIkF5YXJsYW5tYW3EscWfIiwKKyAgICAiT0siOiAiVGFtYW0iLAorICAgICJQYWRkaW5nIjogIsSww6cgYm/Fn2x1ayIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUmVzbWkga29udW1sYW5kxLFybWEiLAorICAgICJQcmV2aWV3IjogIsOWbml6bGVtZSIsCisgICAgIlJpZ2h0IjogIlNhxJ9hIiwKKyAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIkF5bsSxIMOnZXLDp2V2ZSAoX3NlbGYpIiwKKyAgICAiVGV4dHRvcCI6ICJNZXRpbi3DvHN0dGUiLAorICAgICJUaXRsZSAodG9vbHRpcCkiOiAiQmHFn2zEsWsgKEFyYcOnIGlwdWN1KToiLAorICAgICJUb3AiOiAiWXVrYXLEsSIsCisgICAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiRW4gw7xzdCDDp2Vyw6dldmUgKF90b3ApIiwKKyAgICAiV2lkdGgiOiAiR2VuacWfbGlrIiwKKyAgICAiV2lkdGg6IjogIkdlbmnFn2xpazoiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBFWFRFTkRFREZJTEVNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy92bi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL3ZuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZjQ2OGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbGFuZy92bi5qcwpAQCAtMCwwICsxLDIyIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInZuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJI4buneSIsCisgICAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiQ+G7rWEgc+G7lSBt4bubaSAoX2JsYW5rKSIsCisgICAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiS2jDtG5nIChz4butIGThu6VuZyBpbXBsaWNpdCkiLAorICAgICJPSyI6ICLEkOG7k25nIMO9IiwKKyAgICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlRyw6puIGPDuW5nIGtodW5nIChfc2VsZikiLAorICAgICJUaXRsZSAodG9vbHRpcCkiOiAiVGnDqnUgxJHhu4EgKGPhu6dhIGjGsOG7m25nIGThuqtuKToiLAorICAgICJUb3AgZnJhbWUgKF90b3ApIjogIktodW5nIHRyw6puIGPDuW5nIChfdG9wKSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEVYVEVOREVERklMRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL3poX2NuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL2xhbmcvemhfY24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBlNmEwYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9sYW5nL3poX2NuLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiemhfY24iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRVhURU5ERURGSUxFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL21hbmFnZXIucGhwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL21hbmFnZXIucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYjFkYmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvbWFuYWdlci5waHAKQEAgLTAsMCArMSwyODcgQEAKKzw/cGhwCisvKioKKyAqIFRoZSBtYWluIEdVSSBmb3IgdGhlIEV4dGVuZGVkRmlsZU1hbmFnZXIuCisgKiBBdXRob3JzOiBXZWkgWmh1bywgQWZydSwgS3J6eXN6dG9mIEtvdG93aWN6LCBSYWltdW5kIE1leWVyCisgKiBWZXJzaW9uOiBVcGRhdGVkIG9uIDA4LTAxLTIwMDUgYnkgQWZydQorICogVmVyc2lvbjogVXBkYXRlZCBvbiAwNC0wNy0yMDA2IGJ5IEtyenlzenRvZiBLb3Rvd2ljegorICogVmVyc2lvbjogVXBkYXRlZCBvbiAyOS0xMC0yMDA2IGJ5IFJhaW11bmQgTWV5ZXIKKyAqIFZlcnNpb246IFVwZGF0ZWQgb24gMjAtMDEtMjAwOCBieSBSYWltdW5kIE1leWVyCisgKiBQYWNrYWdlOiBFeHRlbmRlZEZpbGVNYW5hZ2VyIChFRk0gMS40KQorICogaHR0cDovL3d3dy5hZnJ1c29mdC5jb20vaHRtbGFyZWEKKyAqLworCisJaWYoaXNzZXQoJF9SRVFVRVNUWydtb2RlJ10pKSAkaW5zZXJ0TW9kZT0kX1JFUVVFU1RbJ21vZGUnXTsKKwlpZighaXNzZXQoJGluc2VydE1vZGUpKSAkaW5zZXJ0TW9kZT0iaW1hZ2UiOworCisJcmVxdWlyZV9vbmNlKCdjb25maWcuaW5jLnBocCcpOworCXJlcXVpcmVfb25jZSgnQ2xhc3Nlcy9FeHRlbmRlZEZpbGVNYW5hZ2VyLnBocCcpOworCQorCSRtYW5hZ2VyID0gbmV3IEV4dGVuZGVkRmlsZU1hbmFnZXIoJElNQ29uZmlnKTsKKwkkZGlycyA9ICRtYW5hZ2VyLT5nZXREaXJzKCk7CisKKwkvLyBjYWxjdWxhdGUgbnVtYmVyIG9mIHRhYmxlIHJvd3MgdG8gc3BhbiBmb3IgdGhlIHByZXZpZXcgY2VsbAorCSRudW1fcm93cyA9IDQ7IC8vIGZpbGVuYW1lICYgdXBsb2FkICYgZGlzayBpbmZvIG1lc3NhZ2UgJiB3aWR0aCttYXJnaW4KKwkJCisJaWYgKCRpbnNlcnRNb2RlPT0naW1hZ2UnKQorCXsKKwkJaWYgKCRJTUNvbmZpZ1snaW1hZ2VzX2VuYWJsZV9zdHlsaW5nJ10gPT09IGZhbHNlKQorCQl7CisJCQkkaGlkZGVuX2ZpZWxkc1tdID0gJ2ZfbWFyZ2luJzsKKwkJCSRoaWRkZW5fZmllbGRzW10gPSAnZl9wYWRkaW5nJzsKKwkJCSRoaWRkZW5fZmllbGRzW10gPSAnZl9ib3JkZXInOworCQkJJGhpZGRlbl9maWVsZHNbXSA9ICdmX2JhY2tncm91bmRDb2xvcic7CisJCQkkaGlkZGVuX2ZpZWxkc1tdID0gJ2ZfYm9yZGVyQ29sb3InOworCQkJJG51bV9yb3dzICs9MjsKKwkJfQorCQllbHNlIGlmICgkSU1Db25maWdbJ3VzZV9jb2xvcl9waWNrZXJzJ10gPT09IGZhbHNlKQorCQl7CisJCQkkaGlkZGVuX2ZpZWxkc1tdID0gJ2ZfYmFja2dyb3VuZENvbG9yJzsKKwkJCSRoaWRkZW5fZmllbGRzW10gPSAnZl9ib3JkZXJDb2xvcic7CisJCQkkbnVtX3Jvd3MgKz0yOworCQl9CisJCQorCQlpZiAoJElNQ29uZmlnWydpbWFnZXNfZW5hYmxlX2FsaWduJ10gPT09IGZhbHNlKQorCQl7CisJCQkkaGlkZGVuX2ZpZWxkc1tdID0gJ2ZfYWxpZ24nOworCQl9CisJCWlmICgkSU1Db25maWdbJ2ltYWdlc19lbmFibGVfYWx0J10pCisJCXsKKwkJCSRudW1fcm93cysrOworCQl9CisJCWVsc2UgCisJCXsKKwkJCSRoaWRkZW5fZmllbGRzW10gPSAnZl9hbHQnOworCQl9CisJCWlmICgkSU1Db25maWdbJ2ltYWdlc19lbmFibGVfdGl0bGUnXSkKKwkJeworCQkJJG51bV9yb3dzKys7CisJCX0KKwkJZWxzZSAKKwkJeworCQkJJGhpZGRlbl9maWVsZHNbXSA9ICdmX3RpdGxlJzsKKwkJfQorCX0KKwkKKwlpZiAoJGluc2VydE1vZGUgPT0gJ2xpbmsnKQorCXsKKwkJaWYgKCRJTUNvbmZpZ1snbGlua19lbmFibGVfdGFyZ2V0J10gPT09IGZhbHNlKQorCQl7CisJCQkkaGlkZGVuX2ZpZWxkc1tdID0gJ2ZfdGFyZ2V0JzsKKwkJfQorCQkkbnVtX3Jvd3MgKz0yOworCX0KKz8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgorICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorCTx0aXRsZT5JbnNlcnQgPD9waHAgZWNobyAoJGluc2VydE1vZGUgPT0gJ2ltYWdlJyA/ICdJbWFnZScgOiAnRmlsZSBMaW5rJykgPz48L3RpdGxlPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KKyA8bGluayBocmVmPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5hc3NldHMvbWFuYWdlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIC8+CisgPGxpbmsgaHJlZj0iLi4vLi4vcG9wdXBzL3BvcHVwLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL3BvcHVwcy9wb3B1cC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5hc3NldHMvcG9wdXAuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+YXNzZXRzL2RpYWxvZy5qcyI+PC9zY3JpcHQ+Cis8P3BocCBpZiAoIWVtcHR5KCRJTUNvbmZpZ1sndXNlX2NvbG9yX3BpY2tlcnMnXSkpIHsgPz48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9tb2R1bGVzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLmpzIj48L3NjcmlwdD48P3BocCB9ID8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisvKiA8IVtDREFUQVsgKi8KKworCWlmKHdpbmRvdy5vcGVuZXIpCisJCVhpbmhhID0gd2luZG93Lm9wZW5lci5YaW5oYTsKKwkJCisJdmFyIHRodW1iZGlyID0gIjw/cGhwIGVjaG8gJElNQ29uZmlnWyd0aHVtYm5haWxfZGlyJ107ID8+IjsKKwl2YXIgYmFzZV91cmwgPSAiPD9waHAgZWNobyAkbWFuYWdlci0+Z2V0SW1hZ2VzVVJMKCk7ID8+IjsKKyAgICB2YXIgX2JhY2tlbmRfdXJsID0gIjw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFja2VuZF91cmwnXTsgPz4iOworICAgIHZhciBfcmVzaXplZF9wcmVmaXggPSAiPD9waHAgZWNobyAkSU1Db25maWdbJ3Jlc2l6ZWRfcHJlZml4J107ID8+IjsKKyAgCXZhciBfcmVzaXplZF9kaXIgPSAiPD9waHAgZWNobyAkSU1Db25maWdbJ3Jlc2l6ZWRfZGlyJ107ID8+IjsKKyAgICB2YXIgbWFuYWdlcl9zaG93X3RhcmdldCA9IDw/cGhwIGVjaG8gKCRpbnNlcnRNb2RlID09ICdsaW5rJyAmJiAkSU1Db25maWdbJ2xpbmtfZW5hYmxlX3RhcmdldCddID8gJ3RydWUnICA6ICdmYWxzZScpID8+OworCisJPD9waHAKKwlpZihpc3NldCgkX1JFUVVFU1RbJ21vZGUnXSkpCisJeworCQllY2hvICd2YXIgbWFuYWdlcl9tb2RlPSInLiRfUkVRVUVTVFsnbW9kZSddLiciOyc7CisJfQorCWVsc2UKKwl7CisJCWVjaG8gJ3ZhciBtYW5hZ2VyX21vZGU9ImltYWdlIjsnOworCX0KKwkvL0lFIGRvZXNuJ3QgbGlrZSBhIHJlbGF0aXZlIFVSTCB3aGVuIGNoYW5naW5nIGEgd2luZG93J3MgbG9jYXRpb24KKwkkaWZyYW1lX3VybCA9IHN0cl9yZXBsYWNlKCBhcnJheSgiYmFja2VuZC5waHAiLCJtYW5hZ2VyLnBocCIpLCAiIiwgJF9TRVJWRVJbIlBIUF9TRUxGIl0gKSAuICRJTUNvbmZpZ1snYmFja2VuZF91cmwnXTsKKwk/PgorCQorCXZhciBpZnJhbWVVcmwgPSAnPD9waHAgcHJpbnQgJGlmcmFtZV91cmwgPz5fX2Z1bmN0aW9uPWltYWdlcyZtb2RlPTw/cGhwIGVjaG8gJGluc2VydE1vZGU7Pz4mdmlld3R5cGU9PD9waHAgZWNobyAkSU1Db25maWdbJ3ZpZXdfdHlwZSddID8+JzsKKworLyogXV0+ICovCis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmFzc2V0cy9tYW5hZ2VyLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGNsYXNzPSJkaWFsb2ciID4KKzxkaXYgY2xhc3M9InRpdGxlIj5JbnNlcnQgPD9waHAgZWNobyAoJGluc2VydE1vZGUgPT0gJ2ltYWdlJyA/ICdJbWFnZScgOiAnRmlsZSBMaW5rJykgPz48L2Rpdj4KKzxmb3JtIGFjdGlvbj0iPD9waHAgcHJpbnQgaHRtbHNwZWNpYWxjaGFycygkSU1Db25maWdbJ2JhY2tlbmRfdXJsJ10pOyA/PiIgaWQ9InVwbG9hZEZvcm0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+Cis8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJfX3BsdWdpbiIgdmFsdWU9IkV4dGVuZGVkRmlsZU1hbmFnZXIiIC8+Cis8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJfX2Z1bmN0aW9uIiB2YWx1ZT0iaW1hZ2VzIiAvPgorPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ibW9kZSIgdmFsdWU9Ijw/cGhwIGVjaG8gJGluc2VydE1vZGU7ID8+IiAvPgorPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9Im1hbmFnZXJfbW9kZSIgdmFsdWU9Ijw/cGhwIGVjaG8gJGluc2VydE1vZGU7Pz4iIC8+Cis8ZmllbGRzZXQ+PGxlZ2VuZD5GaWxlIE1hbmFnZXI8L2xlZ2VuZD4KKzx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkIG5vd3JhcD0ibm93cmFwIiBzdHlsZT0icGFkZGluZzoxMHB4OyI+CisKKwk8bGFiZWwgZm9yPSJkaXJQYXRoIj5EaXJlY3Rvcnk8L2xhYmVsPgorCTxzZWxlY3QgbmFtZT0iZGlyIiBjbGFzcz0iZGlyV2lkdGgiIGlkPSJkaXJQYXRoIiBvbmNoYW5nZT0idXBkYXRlRGlyKHRoaXMpIj4KKwk8b3B0aW9uIHZhbHVlPSIvIj4vPC9vcHRpb24+Cis8P3BocCBmb3JlYWNoKCRkaXJzIGFzICRyZWxhdGl2ZT0+JGZ1bGxwYXRoKSB7ID8+CisJCTxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8gcmF3dXJsZW5jb2RlKCRyZWxhdGl2ZSk7ID8+Ij48P3BocCBlY2hvICRyZWxhdGl2ZTsgPz48L29wdGlvbj4KKzw/cGhwIH0gPz4KKwk8L3NlbGVjdD4KKworCTxhIGhyZWY9IiMiIG9uY2xpY2s9ImphdmFzY3JpcHQ6IGdvVXBEaXIoKTsiIHRpdGxlPSJEaXJlY3RvcnkgVXAiPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvYnRuRm9sZGVyVXAuZ2lmIiBoZWlnaHQ9IjE1IiB3aWR0aD0iMTUiIGFsdD0iRGlyZWN0b3J5IFVwIiAvPjwvYT4KKworCis8P3BocCBpZigkSU1Db25maWdbJ3NhZmVfbW9kZSddID09IGZhbHNlICYmICRJTUNvbmZpZ1snYWxsb3dfbmV3X2RpciddKSB7ID8+CisJPGEgaHJlZj0iIyIgb25jbGljaz0ibmV3Rm9sZGVyKCk7IiB0aXRsZT0iTmV3IEZvbGRlciI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9idG5Gb2xkZXJOZXcuZ2lmIiBoZWlnaHQ9IjE1IiB3aWR0aD0iMTUiIGFsdD0iTmV3IEZvbGRlciIgLz48L2E+Cis8P3BocCB9ID8+Cis8c3BhbiBpZD0icGFzdGVCdG4iPjwvc3Bhbj4KKworCTxzZWxlY3QgbmFtZT0idmlld3R5cGUiIGlkPSJ2aWV3dHlwZSIgb25jaGFuZ2U9InVwZGF0ZVZpZXcoKSI+CisJPG9wdGlvbiB2YWx1ZT0idGh1bWJ2aWV3IiA8P3BocCBpZigkSU1Db25maWdbJ3ZpZXdfdHlwZSddPT0idGh1bWJ2aWV3IikgZWNobyAnc2VsZWN0ZWQ9InNlbGVjdGVkIic7Pz4gPlRodW1ibmFpbCBWaWV3PC9vcHRpb24+CisJPG9wdGlvbiB2YWx1ZT0ibGlzdHZpZXciIDw/cGhwIGlmKCRJTUNvbmZpZ1sndmlld190eXBlJ109PSJsaXN0dmlldyIpIGVjaG8gJ3NlbGVjdGVkPSJzZWxlY3RlZCInOz8+ID5MaXN0IFZpZXc8L29wdGlvbj4KKwk8L3NlbGVjdD4KKzwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBzdHlsZT0icGFkZGluZzoxMHB4OyBwYWRkaW5nLXRvcDowcHg7Ij4KKwk8ZGl2IGlkPSJtZXNzYWdlcyI+PHNwYW4gaWQ9Im1lc3NhZ2UiPkxvYWRpbmc8L3NwYW4+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9kb3RzLmdpZiIgd2lkdGg9IjIyIiBoZWlnaHQ9IjEyIiBhbHQ9Ii4uLiIgLz48L2Rpdj4KKwk8aWZyYW1lIHNyYz0iYWJvdXQ6YmxhbmsiIG5hbWU9ImltZ01hbmFnZXIiIGlkPSJpbWdNYW5hZ2VyIiBjbGFzcz0iaW1hZ2VGcmFtZSIgc2Nyb2xsaW5nPSJhdXRvIiB0aXRsZT0iSW1hZ2UgU2VsZWN0aW9uIiBmcmFtZWJvcmRlcj0iMCI+PC9pZnJhbWU+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPC9maWVsZHNldD4KKzwhLS0gaW1hZ2UgcHJvcGVydGllcyAtLT4KKzxkaXYgaWQ9ImNvbnRyb2xzIj4KKwk8dGFibGUgY2xhc3M9ImlucHV0VGFibGUiPgorCQk8dHI+CisJCQk8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyIgbm93cmFwPSJub3dyYXAiPjxsYWJlbCBmb3I9ImZfdXJsIj48P3BocCBpZigkaW5zZXJ0TW9kZT09J2ltYWdlJykgZWNobyAnRmlsZSBOYW1lJzsgZWxzZSBlY2hvICdVUkwnOz8+PC9sYWJlbD48L3RkPgorCQkJPHRkIGNvbHNwYW49IjUiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iPD9waHAgaWYoJGluc2VydE1vZGU9PSdpbWFnZScpIGVjaG8gJ2ZfdXJsJzsgZWxzZSBlY2hvICdmX2hyZWYnOz8+IiBjbGFzcz0ibGFyZ2VsV2lkdGgiIHZhbHVlPSIiIC8+PC90ZD4KKyAgICAgICAgICAgIDx0ZCByb3dzcGFuPSI8P3BocCBlY2hvICRudW1fcm93cyA/PiIgY29sc3Bhbj0iMiIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IHRleHQtYWxpZ246IGNlbnRlcjsiPjw/cGhwIGlmKCRpbnNlcnRNb2RlPT0naW1hZ2UnKSB7ID8+CisgICAgICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNDQ0M7Ym9yZGVyOjFweCBpbnNldDt3aWR0aDogMTAwcHg7IGhlaWdodDogMTAwcHg7Ij4KKyAgICAgICAgICAgIDxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvMXgxX3RyYW5zcGFyZW50LmdpZiIgYWx0PSIiIGlkPSJmX3ByZXZpZXciIC8+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDw/cGhwIH0gZWxzZSBpZigkaW5zZXJ0TW9kZT09ImxpbmsiICYmICRJTUNvbmZpZ1snbGlua19lbmFibGVfdGFyZ2V0J10gIT09IGZhbHNlKSB7Pz48bGFiZWwgZm9yPSJmX2FsaWduIiBpZD0iZl90YXJnZXRfbGFiZWwiPlRhcmdldCBXaW5kb3c8L2xhYmVsPgorCQkJPHNlbGVjdCBpZD0iZl90YXJnZXQiIHN0eWxlPSJ3aWR0aDoxMjVweDsiPgorCQkJICA8b3B0aW9uIHZhbHVlPSIiPk5vbmUgKHVzZSBpbXBsaWNpdCk8L29wdGlvbj4KKwkJCSAgPG9wdGlvbiB2YWx1ZT0iX2JsYW5rIj5OZXcgd2luZG93IChfYmxhbmspPC9vcHRpb24+CisJCQkgIDxvcHRpb24gdmFsdWU9Il9zZWxmIj5TYW1lIGZyYW1lIChfc2VsZik8L29wdGlvbj4KKwkJICAgICAgPG9wdGlvbiB2YWx1ZT0iX3RvcCI+VG9wIGZyYW1lIChfdG9wKTwvb3B0aW9uPgorCQkgICAgPC9zZWxlY3Q+PGJyIC8+PGJyIC8+Cis8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZl9vdGhlcl90YXJnZXQiIGlkPSJmX290aGVyX3RhcmdldCIgc3R5bGU9InZpc2liaWxpdHk6aGlkZGVuOyB3aWR0aDoxMjBweDsiIC8+CisgICAgICAgICAgICA8P3BocCB9ID8+PC90ZD4KKyAgICAgICAgICAgIDwvdHI+Cis8P3BocCBpZigkaW5zZXJ0TW9kZSA9PSAnaW1hZ2UnICYmICRJTUNvbmZpZ1snaW1hZ2VzX2VuYWJsZV9hbHQnXSkgeyA/PgorCQk8dHI+CisJCQk8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+PGxhYmVsIGZvcj0iZl9hbHQiPkFsdDwvbGFiZWw+PC90ZD4KKwkJCTx0ZCBjb2xzcGFuPSI1Ij48aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImZfYWx0IiBjbGFzcz0ibGFyZ2VsV2lkdGgiIHZhbHVlPSIiIC8+PC90ZD4KKyAgICAgICAgPC90cj4KKzw/cGhwIH0KKyAgICAgIGlmICgkaW5zZXJ0TW9kZSA9PSAnbGluaycgfHwgJElNQ29uZmlnWydpbWFnZXNfZW5hYmxlX3RpdGxlJ10pIHsgPz4KKyAgICAgIDx0cj4KKwkJCTx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij48bGFiZWwgZm9yPSJmX3RpdGxlIj5UaXRsZSAodG9vbHRpcCk8L2xhYmVsPjwvdGQ+CisJCQk8dGQgY29sc3Bhbj0iNSI+PGlucHV0IHR5cGU9InRleHQiIGlkPSJmX3RpdGxlIiBjbGFzcz0ibGFyZ2VsV2lkdGgiIHZhbHVlPSIiIC8+PC90ZD4KKyAgICAgIDwvdHI+Cis8P3BocCB9ID8+CisJCTx0cj4KKzw/cGhwCitpZiAoIWVtcHR5KCRJTUNvbmZpZ1snbWF4X2ZvbGRlcnNpemVfbWInXSkgJiYgRmlsZXM6OmRpclNpemUoJG1hbmFnZXItPmdldEltYWdlc0RpcigpKSA+ICgkSU1Db25maWdbJ21heF9mb2xkZXJzaXplX21iJ10qMTA0ODU3NikpCit7ID8+CisJPHRkIGNvbHNwYW49IjYiIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPk1heGltdW0gZm9sZGVyIHNpemUgbGltaXQgcmVhY2hlZC4gVXBsb2FkIGRpc2FibGVkLjwvdGQ+Cis8P3BocCB9CitlbHNlIGlmKCRJTUNvbmZpZ1snYWxsb3dfdXBsb2FkJ10pIHsgPz4KKwkJCTx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij48bGFiZWwgZm9yPSJ1cGxvYWQiPlVwbG9hZDwvbGFiZWw+PC90ZD4KKwkJCTx0ZCBjb2xzcGFuPSI1Ij4KKwkJCQk8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiPgorICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iTUFYX0ZJTEVfU0laRSIgdmFsdWU9Ijw/cGhwIGVjaG8gJG1heCA9ICgoJGluc2VydE1vZGUgPT0gJ2ltYWdlJyA/ICRJTUNvbmZpZ1snbWF4X2ZpbGVzaXplX2tiX2ltYWdlJ10gOiAkSU1Db25maWdbJ21heF9maWxlc2l6ZV9rYl9saW5rJ10gKSoxMDI0KTsgPz4iIC8+Cis8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0idXBsb2FkIiBpZD0idXBsb2FkIiAvPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD48YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0IiBvbmNsaWNrPSJkb1VwbG9hZCgpOyI+VXBsb2FkPC9idXR0b24+KDw/cGhwIGVjaG8gJG1heC8xMDI0IC4gJ0tCJz8+IG1heC4pPC90ZD4KKyAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgPC90YWJsZT4KKwkJCTwvdGQ+Cis8P3BocCB9IGVsc2UgeyA/PgorCQkJPHRkIGNvbHNwYW49IjYiPjwvdGQ+Cis8P3BocCB9ID8+CisJCTwvdHI+CisJCTx0cj4KKwkJIDx0ZD48P3BocCBpZiAoIWVtcHR5KCRoaWRkZW5fZmllbGRzKSkgZm9yZWFjaCAoJGhpZGRlbl9maWVsZHMgYXMgJGhmKSBlY2hvICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwieyRoZn1cIiBuYW1lPVwieyRoZn1cIiB2YWx1ZT1cIlwiIC8+IjsgPz48L3RkPgorCQkgPHRkIGNvbHNwYW49IjUiPjxzcGFuIGlkPSJkaXNrbWVzZyI+PC9zcGFuPjwvdGQ+CisgICAgICA8L3RyPgorPHRyPgorCQkJPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPjw/cGhwIGlmKCRpbnNlcnRNb2RlPT0naW1hZ2UnKSB7ID8+IDxsYWJlbCBmb3I9ImZfd2lkdGgiPldpZHRoPC9sYWJlbD48P3BocCB9Pz48L3RkPgorCisJCQk8dGQ+PD9waHAgaWYoJGluc2VydE1vZGU9PSdpbWFnZScpIHsgPz4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJmX3dpZHRoIiBjbGFzcz0ic21hbGxXaWR0aCIgdmFsdWU9IiIgb25jaGFuZ2U9ImphdmFzY3JpcHQ6Y2hlY2tDb25zdHJhaW5zKCd3aWR0aCcpOyIvPjw/cGhwIH0gZWxzZSBlY2hvICImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiOz8+PC90ZD4KKworCQkJPHRkIHJvd3NwYW49IjIiPjw/cGhwIGlmKCRpbnNlcnRNb2RlPT0naW1hZ2UnKSB7ID8+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9sb2NrZWQuZ2lmIiBpZD0iaW1nTG9jayIgd2lkdGg9IjI1IiBoZWlnaHQ9IjMyIiBhbHQ9IkNvbnN0cmFpbmVkIFByb3BvcnRpb25zIiAvPgorCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJvcmdpbmFsX3dpZHRoIiAvPgorCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJvcmdpbmFsX2hlaWdodCIgLz4KKyAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbnN0cmFpbl9wcm9wIiBjaGVja2VkPSJjaGVja2VkIiBvbmNsaWNrPSJqYXZhc2NyaXB0OnRvZ2dsZUNvbnN0cmFpbnModGhpcyk7IiB2YWx1ZT0ib24iIC8+PGJyIC8+CisgICAgICAgICAgICA8bGFiZWwgZm9yPSJjb25zdHJhaW5fcHJvcCI+Q29uc3RyYWluIFByb3BvcnRpb25zPC9sYWJlbD48P3BocCB9Pz4KKyAgICAgICAgICAgIDwvdGQ+CisKKwkJCTx0ZCByb3dzcGFuPSIzIiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij48L3RkPgorCisJCQk8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+PD9waHAgaWYoJGluc2VydE1vZGU9PSdpbWFnZScgJiYgJElNQ29uZmlnWydpbWFnZXNfZW5hYmxlX3N0eWxpbmcnXSAhPT0gZmFsc2UpIHsgPz48bGFiZWwgZm9yPSJmX21hcmdpbiI+TWFyZ2luPC9sYWJlbD48P3BocCB9Pz48L3RkPgorCisJCQk8dGQ+PD9waHAgaWYoJGluc2VydE1vZGU9PSdpbWFnZScgJiYgJElNQ29uZmlnWydpbWFnZXNfZW5hYmxlX3N0eWxpbmcnXSAhPT0gZmFsc2UpIHsgPz48aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImZfbWFyZ2luIiBjbGFzcz0ic21hbGxXaWR0aCIgdmFsdWU9IiIgLz48P3BocCB9ID8+PC90ZD4KKzwvdHI+Cis8dHI+CisJCQk8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+PD9waHAgaWYoJGluc2VydE1vZGU9PSdpbWFnZScpIHsgPz48bGFiZWwgZm9yPSJmX2hlaWdodCI+SGVpZ2h0PC9sYWJlbD48P3BocCB9Pz48L3RkPgorCisJCQk8dGQgY2xhc3M9InNtYWxsV2lkdGgiPjw/cGhwIGlmKCRpbnNlcnRNb2RlPT0naW1hZ2UnKSB7ID8+PGlucHV0IHR5cGU9InRleHQiIGlkPSJmX2hlaWdodCIgY2xhc3M9InNtYWxsV2lkdGgiIHZhbHVlPSIiIG9uY2hhbmdlPSJqYXZhc2NyaXB0OmNoZWNrQ29uc3RyYWlucygnaGVpZ2h0Jyk7Ii8+PD9waHAgfT8+PC90ZD4KKworCQkJPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPjw/cGhwIGlmKCRpbnNlcnRNb2RlPT0naW1hZ2UnICYmICRJTUNvbmZpZ1snaW1hZ2VzX2VuYWJsZV9zdHlsaW5nJ10gIT09IGZhbHNlKSB7ID8+PGxhYmVsIGZvcj0iZl9wYWRkaW5nIj5QYWRkaW5nPC9sYWJlbD48P3BocCB9Pz48L3RkPgorCisJCQk8dGQ+PD9waHAgaWYoJGluc2VydE1vZGU9PSdpbWFnZScgJiYgJElNQ29uZmlnWydpbWFnZXNfZW5hYmxlX3N0eWxpbmcnXSAhPT0gZmFsc2UpIHsgPz48aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImZfcGFkZGluZyIgY2xhc3M9InNtYWxsV2lkdGgiIHZhbHVlPSIiIC8+CisJCQk8P3BocCB9Pz48L3RkPgorCisgICAgICAgICAgICA8P3BocCBpZigkaW5zZXJ0TW9kZT09J2ltYWdlJyAmJiAhZW1wdHkoJElNQ29uZmlnWyd1c2VfY29sb3JfcGlja2VycyddKSAmJiAkSU1Db25maWdbJ2ltYWdlc19lbmFibGVfc3R5bGluZyddICE9PSBmYWxzZSkgeyA/PgorICAgCSAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPkNvbG9yPC90ZD4KKyAgCSAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJmX2JhY2tncm91bmRDb2xvciIgdHlwZT0idGV4dCIgaWQ9ImZfYmFja2dyb3VuZENvbG9yIiBzaXplPSI3IiAvPgorICAgICAgICAgICAgICAgIDwvdGQ+CisgIAkgICAgICAgIDw/cGhwIH0gPz4KKzwvdHI+Cis8dHI+CisJCQk8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+PD9waHAgaWYoJGluc2VydE1vZGU9PSdpbWFnZScgJiYgJElNQ29uZmlnWydpbWFnZXNfZW5hYmxlX2FsaWduJ10gIT09IGZhbHNlKSB7ID8+PGxhYmVsIGZvcj0iZl9hbGlnbiI+QWxpZ248L2xhYmVsPjw/cGhwIH0/PjwvdGQ+CisKKwkJCTx0ZCBjb2xzcGFuPSIyIj48P3BocCBpZigkaW5zZXJ0TW9kZT09J2ltYWdlJyAmJiAkSU1Db25maWdbJ2ltYWdlc19lbmFibGVfYWxpZ24nXSAhPT0gZmFsc2UpIHsgPz4KKwkJCQk8c2VsZWN0IHNpemU9IjEiIGlkPSJmX2FsaWduIiAgdGl0bGU9IlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiPgorCQkJCSAgPG9wdGlvbiB2YWx1ZT0iIiBzZWxlY3RlZD0ic2VsZWN0ZWQiICAgICAgICAgPk5vdCBzZXQ8L29wdGlvbj4KKwkJCQkgIDxvcHRpb24gdmFsdWU9ImxlZnQiICAgICAgICAgICAgICAgICAgICAgICAgID5MZWZ0PC9vcHRpb24+CisJCQkJICA8b3B0aW9uIHZhbHVlPSJyaWdodCIgICAgICAgICAgICAgICAgICAgICAgICA+UmlnaHQ8L29wdGlvbj4KKwkJCQkgIDxvcHRpb24gdmFsdWU9InRleHR0b3AiICAgICAgICAgICAgICAgICAgICAgID5UZXh0dG9wPC9vcHRpb24+CisJCQkJICA8b3B0aW9uIHZhbHVlPSJhYnNtaWRkbGUiICAgICAgICAgICAgICAgICAgICA+QWJzbWlkZGxlPC9vcHRpb24+CisJCQkJICA8b3B0aW9uIHZhbHVlPSJiYXNlbGluZSIgICAgICAgICAgICAgICAgICAgICA+QmFzZWxpbmU8L29wdGlvbj4KKwkJCQkgIDxvcHRpb24gdmFsdWU9ImFic2JvdHRvbSIgICAgICAgICAgICAgICAgICAgID5BYnNib3R0b208L29wdGlvbj4KKwkJCQkgIDxvcHRpb24gdmFsdWU9ImJvdHRvbSIgICAgICAgICAgICAgICAgICAgICAgID5Cb3R0b208L29wdGlvbj4KKwkJCQkgIDxvcHRpb24gdmFsdWU9Im1pZGRsZSIgICAgICAgICAgICAgICAgICAgICAgID5NaWRkbGU8L29wdGlvbj4KKwkJCQkgIDxvcHRpb24gdmFsdWU9InRvcCIgICAgICAgICAgICAgICAgICAgICAgICAgID5Ub3A8L29wdGlvbj4KKwkJCQk8L3NlbGVjdD48P3BocCB9ID8+CisJCQk8L3RkPgorCisJCQk8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+PD9waHAgaWYoJGluc2VydE1vZGU9PSdpbWFnZScgJiYgJElNQ29uZmlnWydpbWFnZXNfZW5hYmxlX3N0eWxpbmcnXSAhPT0gZmFsc2UpIHsgPz48bGFiZWwgZm9yPSJmX2JvcmRlciI+Qm9yZGVyPC9sYWJlbD48P3BocCB9Pz48L3RkPgorCQkJPHRkPjw/cGhwIGlmKCRpbnNlcnRNb2RlPT0naW1hZ2UnICYmICRJTUNvbmZpZ1snaW1hZ2VzX2VuYWJsZV9zdHlsaW5nJ10gIT09IGZhbHNlKSB7ID8+PGlucHV0IHR5cGU9InRleHQiIGlkPSJmX2JvcmRlciIgY2xhc3M9InNtYWxsV2lkdGgiIHZhbHVlPSIiIC8+PD9waHAgfT8+PC90ZD4KKwkJCTw/cGhwIGlmKCRpbnNlcnRNb2RlPT0naW1hZ2UnICYmICFlbXB0eSgkSU1Db25maWdbJ3VzZV9jb2xvcl9waWNrZXJzJ10pICYmICRJTUNvbmZpZ1snaW1hZ2VzX2VuYWJsZV9zdHlsaW5nJ10gIT09IGZhbHNlKSB7ID8+CisgIAkgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPkJvcmRlciBDb2xvcjwvdGQ+CisgICAgICAgICAgICA8dGQ+PGlucHV0IG5hbWU9ImZfYm9yZGVyQ29sb3IiIHR5cGU9InRleHQiIGlkPSJmX2JvcmRlckNvbG9yIiBzaXplPSI3IiAvPjwvdGQ+CisgICAgICAgICAgICA8P3BocCB9ID8+Cis8L3RyPgorPC90YWJsZT4KKworPCEtLS8vIGltYWdlIHByb3BlcnRpZXMgLS0+CQorCTxkaXYgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+IAorICAgICAgICAgIDxociAvPgorCQkgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnV0dG9ucyIgb25jbGljaz0icmV0dXJuIHJlZnJlc2goKTsiPlJlZnJlc2g8L2J1dHRvbj4KKyAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ1dHRvbnMiIG9uY2xpY2s9InJldHVybiBvbk9LKCk7Ij5PSzwvYnV0dG9uPgorICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnV0dG9ucyIgb25jbGljaz0icmV0dXJuIG9uQ2FuY2VsKCk7Ij5DYW5jZWw8L2J1dHRvbj4KKyAgICA8L2Rpdj4KKzwvZGl2PgorPC9mb3JtPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL3Byb21wdC5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL3Byb21wdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZTY3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0V4dGVuZGVkRmlsZU1hbmFnZXIvcHJvbXB0Lmh0bWwKQEAgLTAsMCArMSw5MiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPg0KKzxodG1sPg0KKzxoZWFkPg0KKzx0aXRsZT48L3RpdGxlPg0KKyA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9wb3B1cHMvcG9wdXAuanMiPjwvc2NyaXB0Pg0KKyA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KKyAvKjwhW0NEQVRBWyovDQorIGh0bWwsIGJvZHkgeyAgYmFja2dyb3VuZC1jb2xvcjogQnV0dG9uRmFjZTsgIGNvbG9yOiBCdXR0b25UZXh0OyBmb250OiAxMXB4IFRhaG9tYSxWZXJkYW5hLHNhbnMtc2VyaWY7IG1hcmdpbjogMDsgcGFkZGluZzogMDt9DQorYm9keSB7IHBhZGRpbmc6IDVweDsgfQ0KKyAudGl0bGUgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRmOyBjb2xvcjogIzAwMDsgZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMTIwJTsgcGFkZGluZzogM3B4IDEwcHg7IG1hcmdpbi1ib3R0b206IDEwcHg7IGJvcmRlci1ib3R0b206IDFweCAgc29saWQgYmxhY2s7IGxldHRlci1zcGFjaW5nOiAycHg7fQ0KK3NlbGVjdCwgaW5wdXQsIGJ1dHRvbiB7IGZvbnQ6IDExcHggVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjsgfQ0KKy5idXR0b25zIHsgd2lkdGg6IDcwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgfQ0KK2Zvcm0geyBwYWRkaW5nOiAwcHg7ICBtYXJnaW46IDA7fQ0KK2Zvcm0gLmVsZW1lbnRzew0KKwlwYWRkaW5nOiAxMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7DQorfQ0KKyAvKl1dPiovDQorIDwvc3R5bGU+DQorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vcG9wdXBzL3BvcHVwLmpzIj48L3NjcmlwdD4NCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQorLyo8IVtDREFUQVsqLw0KKwkNCisgICAgaWYod2luZG93Lm9wZW5lcikNCisgICAgICAgIEhUTUxBcmVhID0gd2luZG93Lm9wZW5lci5IVE1MQXJlYTsNCisNCisJaW5pdCA9IGZ1bmN0aW9uICgpDQorCXsNCisJCV9fZGxnX3RyYW5zbGF0ZSgnSW1hZ2VNYW5hZ2VyJyk7DQorCQkNCisJCXZhciBwYXJhbSA9IG9wZW5lci5EaWFsb2cuX2FyZ3VtZW50czsNCisJCQ0KKwkJaWYgKCBwYXJhbSApDQorCQl7DQorCQkgIGlmICggcGFyYW0udGl0bGUgKQ0KKwkJICB7DQorCQkgICAgZG9jdW1lbnQudGl0bGUgPSBwYXJhbS50aXRsZTsNCisJCSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGl0bGUiKS5pbm5lckhUTUwgPSBwYXJhbS50aXRsZTsNCisJCSAgfQ0KKwkJICBpZiAoIHBhcmFtLnByb21wdCApDQorCQkgIHsNCisJCSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvbXB0IikuaW5uZXJIVE1MID0gcGFyYW0ucHJvbXB0Ow0KKwkJICB9DQorCQkgIGlmICggcGFyYW0udmFsdWUgKQ0KKwkJICB7DQorCQkgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfaW5wdXQiKS52YWx1ZSA9IHBhcmFtLnZhbHVlOw0KKwkJICB9DQorCQl9DQorCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9pbnB1dCIpLmZvY3VzKCk7DQorCQkNCisJCV9feGluaGFfZGxnX2luaXQoKTsNCisJCQ0KKwl9Ow0KKw0KKwlmdW5jdGlvbiBvbkNhbmNlbCgpDQorCXsNCisJCV9fZGxnX2Nsb3NlKG51bGwpOw0KKwkJcmV0dXJuIGZhbHNlOw0KKwl9DQorDQorCWZ1bmN0aW9uIG9uT0soKQ0KKwl7DQorCQkgLy8gcGFzcyBkYXRhIGJhY2sgdG8gdGhlIGNhbGxpbmcgd2luZG93DQorCSAgX19kbGdfY2xvc2Uoe3ZhbHVlOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2lucHV0IikudmFsdWV9KTsNCisJICByZXR1cm4gZmFsc2U7DQorCX0NCisNCisJZnVuY3Rpb24gYWRkRXZlbnQob2JqLCBldlR5cGUsIGZuKQ0KKwl7DQorCQlpZiAob2JqLmFkZEV2ZW50TGlzdGVuZXIpIHsgb2JqLmFkZEV2ZW50TGlzdGVuZXIoZXZUeXBlLCBmbiwgdHJ1ZSk7IHJldHVybiB0cnVlOyB9DQorCQllbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsgIHZhciByID0gb2JqLmF0dGFjaEV2ZW50KCJvbiIrZXZUeXBlLCBmbik7ICByZXR1cm4gcjsgIH0NCisJCWVsc2UgeyAgcmV0dXJuIGZhbHNlOyB9DQorCX0NCisNCisJYWRkRXZlbnQod2luZG93LCAnbG9hZCcsIGluaXQpOw0KKy8vLS0+DQorPC9zY3JpcHQ+DQorPC9oZWFkPg0KKzxib2R5ID4NCis8ZGl2IGNsYXNzPSJ0aXRsZSIgaWQ9InRpdGxlIiBzdHlsZT0id2hpdGUtc3BhY2U6bm93cmFwIj5QbGVhc2UgZW50ZXIgdmFsdWU8L2Rpdj4NCis8Zm9ybSBhY3Rpb249IiI+DQorPGRpdiBjbGFzcz0iZWxlbWVudHMiPg0KKwk8bGFiZWwgZm9yPSJmX2lucHV0IiBpZD0icHJvbXB0Ij48L2xhYmVsPg0KKwk8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImZfaW5wdXQiIHN0eWxlPSJ3aWR0aDo1MCUiLz4NCis8L2Rpdj4NCis8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPg0KKwkgIDxociAvPg0KKwkgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnV0dG9ucyIgb25jbGljaz0icmV0dXJuIG9uT0soKTsiPk9LPC9idXR0b24+DQorCSAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b25zIiBvbmNsaWNrPSJyZXR1cm4gb25DYW5jZWwoKTsiPkNhbmNlbDwvYnV0dG9uPg0KKzwvZGl2Pg0KKzwvZm9ybT4NCis8L2JvZHk+DQorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9yZXNpemVyLnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci9yZXNpemVyLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjYxZjZiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL3Jlc2l6ZXIucGhwCkBAIC0wLDAgKzEsODggQEAKKzw/cGhwDQoraGVhZGVyKCdDb250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD1VVEYtOCcpOw0KKw0KKy8qKg0KKyAqIFJlc2l6ZSBpbWFnZXMgdG8gYSBnaXZlbiBzaXplLCBhbmQgc2F2aW5nIGluIGEgbmV3IGZpbGUuDQorICogcmVzaXplLnBocD9pbWc9L3JlbGF0aXZlL3BhdGgvdG8vaW1hZ2UuanBnJndpZHRoPTxwaXhlbHM+JmhlaWdodD08cGl4ZWxzPlsmdG89L3JlbGF0aXZlL3BhdGgvdG8vbmV3aW1hZ2UuanBnXQ0KKyAqIHJlbGF0aXZlIHRvIHRoZSBiYXNlX2RpciBnaXZlbiBpbiBjb25maWcuaW5jLnBocA0KKyAqIFRoaXMgaXMgcHJldHR5IG11Y2gganVzdCB0aHVtYnMucGhwIHdpdGggc29tZSBtb2RzLCBJJ20gdG9vIGxhenkgdG8gZG8gaXQgcHJvcGVybHkNCisgKiBAYXV0aG9yICRBdXRob3I6cmF5ICQNCisgKiBAdmVyc2lvbiAkSWQ6cmVzaXplci5waHAgOTIyIDIwMDctMTItMzAgMTQ6MzU6NDZaIHJheSAkDQorICogQHBhY2thZ2UgSW1hZ2VNYW5hZ2VyDQorICovDQorDQorcmVxdWlyZV9vbmNlKCdjb25maWcuaW5jLnBocCcpOw0KK3JlcXVpcmVfb25jZSgnQ2xhc3Nlcy9FeHRlbmRlZEZpbGVNYW5hZ2VyLnBocCcpOw0KK3JlcXVpcmVfb25jZSgnLi4vSW1hZ2VNYW5hZ2VyL0NsYXNzZXMvVGh1bWJuYWlsLnBocCcpOw0KKw0KK2Z1bmN0aW9uIGpzX2ZhaWwoJG1lc3NhZ2UpICAgIHsgZWNobyAnYWxlcnQoXCdoYSAnIC4gJG1lc3NhZ2UgLiAnXCcpOyBmYWxzZSc7IGV4aXQ7ICAgfQ0KK2Z1bmN0aW9uIGpzX3N1Y2Nlc3MoJHJlc3VsdEZpbGUpICAgIHsgZWNobyAnXCcnIC4gJHJlc3VsdEZpbGUgLiAnXCcnOyBleGl0OyAgIH0NCisNCisvL2NoZWNrIGZvciBpbWcgcGFyYW1ldGVyIGluIHRoZSB1cmwNCitpZighaXNzZXQoJF9HRVRbJ2ltZyddKSB8fCAhaXNzZXQoJF9HRVRbJ3dpZHRoJ10pIHx8ICFpc3NldCgkX0dFVFsnaGVpZ2h0J10pKQ0KK3sNCisgIGpzX2ZhaWwoJ01pc3NpbmcgcGFyYW1ldGVyLicpOw0KK30NCisNCitpZigkSU1Db25maWdbJ3Jlc2l6ZV9maWxlcyddID09IEZBTFNFKQ0KK3sNCisgICAganNfc3VjY2VzcygkX0dFVFsnaW1nJ10pOw0KK30NCisNCiskbWFuYWdlciA9IG5ldyBFeHRlbmRlZEZpbGVNYW5hZ2VyKCRJTUNvbmZpZyk7DQorDQorLy9nZXQgdGhlIGltYWdlIGFuZCB0aGUgZnVsbCBwYXRoIHRvIHRoZSBpbWFnZQ0KKyRpbWFnZSA9ICRfR0VUWydpbWcnXTsNCiskZnVsbHBhdGggPSBGaWxlczo6bWFrZUZpbGUoJG1hbmFnZXItPmdldEltYWdlc0RpcigpLCRpbWFnZSk7DQorDQorLy9ub3QgYSBmaWxlLCBzbyBleGl0DQoraWYoIWlzX2ZpbGUoJGZ1bGxwYXRoKSkNCit7DQorICBqc19mYWlsKCJGaWxlIHskZnVsbHBhdGh9IGRvZXMgbm90IGV4aXN0LiIpOw0KK30NCisNCiskaW1nSW5mbyA9IEBnZXRJbWFnZVNpemUoJGZ1bGxwYXRoKTsNCisNCisvL05vdCBhbiBpbWFnZSwgYmFpbCBvdXQuDQoraWYoIWlzX2FycmF5KCRpbWdJbmZvKSkNCit7DQorCWpzX2ZhaWwoIkZpbGUgeyRmdWxscGF0aH0gaXMgbm90IGFuIGltYWdlLiIpOw0KK30NCisNCitpZighaXNzZXQoJF9HRVRbJ3RvJ10pKQ0KK3sNCisgICRyZXNpemVkICAgID0gJG1hbmFnZXItPmdldFJlc2l6ZWROYW1lKCRmdWxscGF0aCwkX0dFVFsnd2lkdGgnXSwkX0dFVFsnaGVpZ2h0J10pOw0KKyAgJF9HRVRbJ3RvJ10gPSAkbWFuYWdlci0+Z2V0UmVzaXplZE5hbWUoJGltYWdlLCRfR0VUWyd3aWR0aCddLCRfR0VUWydoZWlnaHQnXSwgRkFMU0UpOw0KK30NCitlbHNlDQorew0KKyAgJHJlc2l6ZWQgPSBGaWxlczo6bWFrZUZpbGUoJG1hbmFnZXItPmdldEltYWdlc0RpcigpLCRfR0VUWyd0byddKTsNCit9DQorDQorLy8gQ2hlY2sgdG8gc2VlIGlmIGl0IGFscmVhZHkgZXhpc3RzDQoraWYoaXNfZmlsZSgkcmVzaXplZCkpDQorew0KKwkvLyBBbmQgaXMgbmV3ZXINCisJaWYoZmlsZW10aW1lKCRyZXNpemVkKSA+PSBmaWxlbXRpbWUoJGZ1bGxwYXRoKSkNCisJew0KKwkJanNfc3VjY2VzcygkX0dFVFsndG8nXSk7DQorCX0NCit9DQorDQorDQorDQorLy8gcmVzaXplICh0aHVtYm5haWxlciB3aWxsIGRvIHRoaXMgZm9yIHVzIGp1c3QgZmluZSkNCiskdGh1bWJuYWlsZXIgPSBuZXcgVGh1bWJuYWlsKCRfR0VUWyd3aWR0aCddLCRfR0VUWydoZWlnaHQnXSk7DQorJHRodW1ibmFpbGVyLT5wcm9wb3J0aW9uYWwgPSBGQUxTRTsNCiskdGh1bWJuYWlsZXItPmNyZWF0ZVRodW1ibmFpbCgkZnVsbHBhdGgsICRyZXNpemVkKTsNCisNCisvLyBkaWQgaXQgd29yaz8NCitpZihpc19maWxlKCRyZXNpemVkKSkNCit7DQorCWpzX3N1Y2Nlc3MoJF9HRVRbJ3RvJ10pOw0KK30NCitlbHNlDQorew0KKwlqc19mYWlsKCJSZXNpemUgRmFpbGVkLiIpOw0KK30NCis/PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci90aHVtYnMucGhwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9FeHRlbmRlZEZpbGVNYW5hZ2VyL3RodW1icy5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ5YmIxOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRXh0ZW5kZWRGaWxlTWFuYWdlci90aHVtYnMucGhwCkBAIC0wLDAgKzEsODUgQEAKKzw/cGhwDQorLyoqDQorICogT24gdGhlIGZseSBUaHVtYm5haWwgZ2VuZXJhdGlvbi4NCisgKiBDcmVhdGVzIHRodW1ibmFpbHMgZ2l2ZW4gYnkgdGh1bWJzLnBocD9pbWc9L3JlbGF0aXZlL3BhdGgvdG8vaW1hZ2UuanBnDQorICogcmVsYXRpdmUgdG8gdGhlIGJhc2VfZGlyIGdpdmVuIGluIGNvbmZpZy5pbmMucGhwDQorICogQXV0aG9yczogV2VpIFpodW8sIEFmcnUsIEtyenlzenRvZiBLb3Rvd2ljeg0KKyAqIFZlcnNpb246IFVwZGF0ZWQgb24gMDgtMDEtMjAwNSBieSBBZnJ1DQorICogVmVyc2lvbjogVXBkYXRlZCBvbiAyMS0wNi0yMDA2IGJ5IEtyenlzenRvZiBLb3Rvd2ljeg0KKyAqIFBhY2thZ2U6IEV4dGVuZGVkRmlsZU1hbmFnZXIgKEVGTSAxLjEuMSkNCisgKiBodHRwOi8vd3d3LmFmcnVzb2Z0LmNvbS9odG1sYXJlYQ0KKyAqLw0KK2lmKGlzc2V0KCRfUkVRVUVTVFsnbW9kZSddKSkgJGluc2VydE1vZGU9JF9SRVFVRVNUWydtb2RlJ107DQoraWYoIWlzc2V0KCRpbnNlcnRNb2RlKSkgJGluc2VydE1vZGU9ImltYWdlIjsNCisNCityZXF1aXJlX29uY2UoJ2NvbmZpZy5pbmMucGhwJyk7DQorcmVxdWlyZV9vbmNlKCdDbGFzc2VzL0V4dGVuZGVkRmlsZU1hbmFnZXIucGhwJyk7DQorcmVxdWlyZV9vbmNlKCcuLi9JbWFnZU1hbmFnZXIvQ2xhc3Nlcy9UaHVtYm5haWwucGhwJyk7DQorDQorLy9jaGVjayBmb3IgaW1nIHBhcmFtZXRlciBpbiB0aGUgdXJsDQoraWYoIWlzc2V0KCRfR0VUWydpbWcnXSkpDQorCWV4aXQoKTsNCisNCiskbWFuYWdlciA9IG5ldyBFeHRlbmRlZEZpbGVNYW5hZ2VyKCRJTUNvbmZpZywkaW5zZXJ0TW9kZSk7DQorDQorLy9nZXQgdGhlIGltYWdlIGFuZCB0aGUgZnVsbCBwYXRoIHRvIHRoZSBpbWFnZQ0KKyRpbWFnZSA9IHJhd3VybGRlY29kZSgkX0dFVFsnaW1nJ10pOw0KKyRmdWxscGF0aCA9IEZpbGVzOjptYWtlRmlsZSgkbWFuYWdlci0+Z2V0SW1hZ2VzRGlyKCksJGltYWdlKTsNCisNCisvL25vdCBhIGZpbGUsIHNvIGV4aXQNCitpZighaXNfZmlsZSgkZnVsbHBhdGgpKQ0KKwlleGl0KCk7DQorDQorJGltZ0luZm8gPSBAZ2V0SW1hZ2VTaXplKCRmdWxscGF0aCk7DQorDQorLy9Ob3QgYW4gaW1hZ2UsIHNlbmQgZGVmYXVsdCB0aHVtYm5haWwNCitpZighaXNfYXJyYXkoJGltZ0luZm8pKQ0KK3sNCisJLy9zaG93IHRoZSBkZWZhdWx0IGltYWdlLCBvdGhlcndpc2Ugd2UgcXVpdCENCisJJGRlZmF1bHQgPSAkbWFuYWdlci0+Z2V0RGVmYXVsdFRodW1iKCk7DQorCWlmKCRkZWZhdWx0KQ0KKwl7DQorCQloZWFkZXIoJ0xvY2F0aW9uOiAnLiRkZWZhdWx0KTsNCisJCWV4aXQoKTsNCisJfQ0KK30NCisvL2lmIHRoZSBpbWFnZSBpcyBsZXNzIHRoYW4gdGhlIHRodW1ibmFpbCBkaW1lbnNpb25zDQorLy9zZW5kIHRoZSBvcmlnaW5hbCBpbWFnZSBhcyB0aHVtYm5haWwNCitpZiAoJGltZ0luZm9bMF0gPD0gJElNQ29uZmlnWyd0aHVtYm5haWxfd2lkdGgnXQ0KKyAmJiAkaW1nSW5mb1sxXSA8PSAkSU1Db25maWdbJ3RodW1ibmFpbF9oZWlnaHQnXSkNCisgew0KKwkgaGVhZGVyKCdMb2NhdGlvbjogJy4kbWFuYWdlci0+Z2V0RmlsZVVSTCgkaW1hZ2UpKTsNCisJIGV4aXQoKTsNCisgfQ0KKw0KKy8vQ2hlY2sgZm9yIHRodW1ibmFpbHMNCiskdGh1bWJuYWlsID0gJG1hbmFnZXItPmdldFRodW1iTmFtZSgkZnVsbHBhdGgpOw0KK2lmKGlzX2ZpbGUoJHRodW1ibmFpbCkpDQorew0KKwkvL2lmIHRoZSB0aHVtYm5haWwgaXMgbmV3ZXIsIHNlbmQgaXQNCisJaWYoZmlsZW10aW1lKCR0aHVtYm5haWwpID49IGZpbGVtdGltZSgkZnVsbHBhdGgpKQ0KKwl7DQorCQloZWFkZXIoJ0xvY2F0aW9uOiAnLiRtYW5hZ2VyLT5nZXRUaHVtYlVSTCgkaW1hZ2UpKTsNCisJCWV4aXQoKTsNCisJfQ0KK30NCisNCisvL2NyZWF0aW5nIHRodW1ibmFpbHMNCiskdGh1bWJuYWlsZXIgPSBuZXcgVGh1bWJuYWlsKCRJTUNvbmZpZ1sndGh1bWJuYWlsX3dpZHRoJ10sJElNQ29uZmlnWyd0aHVtYm5haWxfaGVpZ2h0J10pOw0KKyR0aHVtYm5haWxlci0+Y3JlYXRlVGh1bWJuYWlsKCRmdWxscGF0aCwgJHRodW1ibmFpbCk7DQorDQorLy9DaGVjayBmb3IgTkVXIHRodW1ibmFpbHMNCitpZihpc19maWxlKCR0aHVtYm5haWwpKQ0KK3sNCisJLy9zZW5kIHRoZSBuZXcgdGh1bWJuYWlsDQorCWhlYWRlcignTG9jYXRpb246ICcuJG1hbmFnZXItPmdldFRodW1iVVJMKCRpbWFnZSkpOw0KKwlleGl0KCk7DQorfQ0KK2Vsc2UNCit7DQorCS8vc2hvdyB0aGUgZGVmYXVsdCBpbWFnZSwgb3RoZXJ3aXNlIHdlIHF1aXQhDQorCSRkZWZhdWx0ID0gJG1hbmFnZXItPmdldERlZmF1bHRUaHVtYigpOw0KKwlpZigkZGVmYXVsdCkNCisJCWhlYWRlcignTG9jYXRpb246ICcuJGRlZmF1bHQpOw0KK30NCis/PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL0ZpbHRlci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL0ZpbHRlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzYzNTk0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvRmlsdGVyLmpzCkBAIC0wLDAgKzEsNjggQEAKKy8vIEZpbHRlciBwbHVnaW4gZm9yIFhpbmhhCisvLyBJbXBsZW1lbnRhdGlvbiBieSBVZG8gU2NobWFsICYgU2NoYWZmcmF0aCBOZXVlTWVkaWVuCisvLyBPcmlnaW5hbCBBdXRob3IgLSBVZG8gU2NobWFsCisvLworLy8gKGMpIFVkbyBTY2htYWwgJiBTY2hhZmZyYXRoIE5ldWVNZWRpZW4gMjAwNAorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorZnVuY3Rpb24gRmlsdGVyKGVkaXRvcikgeworICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKKyAgdmFyIGNmZyA9IGVkaXRvci5jb25maWc7CisgIHZhciBzZWxmID0gdGhpczsKKyAgLy8gcmVnaXN0ZXIgdGhlIHRvb2xiYXIgYnV0dG9ucyBwcm92aWRlZCBieSB0aGlzIHBsdWdpbgorICBjZmcucmVnaXN0ZXJCdXR0b24oeworICAgIGlkOiAiZmlsdGVyIiwKKyAgICB0b29sdGlwICA6IHRoaXMuX2xjKCJGaWx0ZXIiKSwKKyAgICBpbWFnZSAgICA6IGVkaXRvci5pbWdVUkwoImVkX2ZpbHRlci5naWYiLCAiRmlsdGVyIiksCisgICAgdGV4dE1vZGUgOiBmYWxzZSwKKyAgICBhY3Rpb24gICA6IGZ1bmN0aW9uKGVkaXRvcikgeworICAgICAgICAgICAgICAgICBzZWxmLmJ1dHRvblByZXNzKGVkaXRvcik7CisgICAgICAgICAgICAgICB9CisgIH0pOworICBpZiAoIWNmZy5GaWx0ZXJzKQorICAgIGNmZy5GaWx0ZXJzID0gWyJQYXJhZ3JhcGgiLCJXb3JkIl07CisgIGZvciAodmFyIGkgPSAwOyBpIDwgZWRpdG9yLmNvbmZpZy5GaWx0ZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgc2VsZi5hZGQoZWRpdG9yLmNvbmZpZy5GaWx0ZXJzW2ldKTsKKyAgfQorICBjZmcuYWRkVG9vbGJhckVsZW1lbnQoImZpbHRlciIsICJyZW1vdmVmb3JtYXQiLCAxKTsKK30KKworRmlsdGVyLl9wbHVnaW5JbmZvID0KK3sKKyAgbmFtZSAgICAgICAgICA6ICJGaWx0ZXIiLAorICB2ZXJzaW9uICAgICAgIDogIjEuMCIsCisgIGRldmVsb3BlciAgICAgOiAiVWRvIFNjaG1hbCAoZ29jaGVyKSIsCisgIGRldmVsb3Blcl91cmwgOiAiIiwKKyAgc3BvbnNvciAgICAgICA6ICJMLk4uU2NoYWZmcmF0aCBOZXVlTWVkaWVuIiwKKyAgc3BvbnNvcl91cmwgICA6ICJodHRwOi8vd3d3LnNjaGFmZnJhdGgtbmV1ZW1lZGllbi5kZS8iLAorICBjX293bmVyICAgICAgIDogIlVkbyBTY2htYWwgJiBTY2hhZmZyYXRoLU5ldWVNZWRpZW4iLAorICBsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIgorfTsKKworRmlsdGVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihmaWx0ZXJOYW1lKSB7CisgIGlmKGV2YWwoJ3R5cGVvZiAnICsgZmlsdGVyTmFtZSkgPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICB2YXIgZmlsdGVyID0gWGluaGEuZ2V0UGx1Z2luRGlyKCdGaWx0ZXInKSArICIvZmlsdGVycy8iICsgZmlsdGVyTmFtZSArICIuanMiOworICAgIHZhciBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTsKKyAgICB2YXIgZXZ0ID0gWGluaGEuaXNfaWUgPyAib25yZWFkeXN0YXRlY2hhbmdlIiA6ICJvbmxvYWQiOworICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKKyAgICBzY3JpcHQudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiOworICAgIHNjcmlwdC5zcmMgPSBmaWx0ZXI7CisgICAgc2NyaXB0W2V2dF0gPSBmdW5jdGlvbigpIHsKKyAgICAgIGlmKFhpbmhhLmlzX2llICYmICEvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KHdpbmRvdy5ldmVudC5zcmNFbGVtZW50LnJlYWR5U3RhdGUpKSAgcmV0dXJuOworICAgIH0KKyAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7CisgICAgLy9kb2N1bWVudC53cml0ZSgiPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0nIiArIHBsdWdpbl9maWxlICsgIic+PC9zY3JpcHQ+Iik7CisgIH0KK307CisKK0ZpbHRlci5wcm90b3R5cGUuX2xjID0gZnVuY3Rpb24oc3RyaW5nKSB7CisgICAgcmV0dXJuIFhpbmhhLl9sYyhzdHJpbmcsICdGaWx0ZXInKTsKK307CisKK0ZpbHRlci5wcm90b3R5cGUuYnV0dG9uUHJlc3MgPSBmdW5jdGlvbihlZGl0b3IpIHsKKyAgdmFyIGh0bWwgPSBlZGl0b3IuZ2V0SW5uZXJIVE1MKCk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgZWRpdG9yLmNvbmZpZy5GaWx0ZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgaHRtbCA9IGV2YWwoZWRpdG9yLmNvbmZpZy5GaWx0ZXJzW2ldKShodG1sKTsKKyAgfQorICBlZGl0b3Iuc2V0SFRNTChodG1sKTsKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvZmlsdGVycy9wYXJhZ3JhcGguanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9maWx0ZXJzL3BhcmFncmFwaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDRhM2RlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvZmlsdGVycy9wYXJhZ3JhcGguanMKQEAgLTAsMCArMSw2IEBACitQYXJhZ3JhcGggPSBmdW5jdGlvbihodG1sKSB7CisgIGh0bWwgPSBodG1sLnJlcGxhY2UoLzxccypwW14+XSo+L2dpLCAnJyk7CisgIGh0bWwgPSBodG1sLnJlcGxhY2UoLzxcL1xzKnBccyo+L2dpLCAnJyk7CisgIGh0bWwgPSBodG1sLnRyaW0oKTsKKyAgcmV0dXJuIGh0bWw7Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2ZpbHRlcnMvd29yZC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2ZpbHRlcnMvd29yZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2NkOTk1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvZmlsdGVycy93b3JkLmpzCkBAIC0wLDAgKzEsNTMgQEAKK1dvcmQgPSBmdW5jdGlvbihodG1sKSB7CisgICAgLy8gUmVtb3ZlIEhUTUwgY29tbWVudHMKKwlodG1sID0gaHRtbC5yZXBsYWNlKC88IS0tW1x3XHNcZEB7fTouOywnIiUhI189Jnw/figpWyorXC9cLVxdXSotLT4vZ2ksICIiICk7CisJaHRtbCA9IGh0bWwucmVwbGFjZSgvPCEtLVteXDBdKi0tPi9naSwgJycpOworICAgIC8vIFJlbW92ZSBhbGwgSFRNTCB0YWdzCisJaHRtbCA9IGh0bWwucmVwbGFjZSgvPFwvP1xzKkhUTUxbXj5dKj4vZ2ksICIiICk7CisgICAgLy8gUmVtb3ZlIGFsbCBCT0RZIHRhZ3MKKyAgICBodG1sID0gaHRtbC5yZXBsYWNlKC88XC8/XHMqQk9EWVtePl0qPi9naSwgIiIgKTsKKyAgICAvLyBSZW1vdmUgYWxsIE1FVEEgdGFncworCWh0bWwgPSBodG1sLnJlcGxhY2UoLzxcLz9ccypNRVRBW14+XSo+L2dpLCAiIiApOworICAgIC8vIFJlbW92ZSBhbGwgU1BBTiB0YWdzCisJaHRtbCA9IGh0bWwucmVwbGFjZSgvPFwvP1xzKlNQQU5bXj5dKj4vZ2ksICIiICk7CisJLy8gUmVtb3ZlIGFsbCBGT05UIHRhZ3MKKyAgICBodG1sID0gaHRtbC5yZXBsYWNlKC88XC8/XHMqRk9OVFtePl0qPi9naSwgIiIpOworICAgIC8vIFJlbW92ZSBhbGwgSUZSQU1FIHRhZ3MuCisgICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvPFwvP1xzKklGUkFNRVtePl0qPi9naSwgIiIpOworICAgIC8vIFJlbW92ZSBhbGwgU1RZTEUgdGFncyAmIGNvbnRlbnQKKwlodG1sID0gaHRtbC5yZXBsYWNlKC88XC8/XHMqU1RZTEVbXj5dKj4oLnxbXG5cclx0XSkqPFwvXHMqU1RZTEVccyo+L2dpLCAiIiApOworICAgIC8vIFJlbW92ZSBhbGwgVElUTEUgdGFncyAmIGNvbnRlbnQKKwlodG1sID0gaHRtbC5yZXBsYWNlKC88XHMqVElUTEVbXj5dKj4oLnxbXG5cclx0XSkqPFwvXHMqVElUTEVccyo+L2dpLCAiIiApOworCS8vIFJlbW92ZSBqYXZhc2NyaXB0CisgICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvPFxzKlNDUklQVFtePl0qPlteXDBdKjxcL1xzKlNDUklQVFxzKj4vZ2ksICIiKTsKKyAgICAvLyBSZW1vdmUgYWxsIEhFQUQgdGFncyAmIGNvbnRlbnQKKwlodG1sID0gaHRtbC5yZXBsYWNlKC88XHMqSEVBRFtePl0qPigufFtcblxyXHRdKSo8XC9ccypIRUFEXHMqPi9naSwgIiIgKTsKKwkvLyBSZW1vdmUgQ2xhc3MgYXR0cmlidXRlcworCWh0bWwgPSBodG1sLnJlcGxhY2UoLzxccyooXHdbXj5dKikgY2xhc3M9KFteIHw+XSopKFtePl0qKS9naSwgIjwkMSQzIikgOworCS8vIFJlbW92ZSBTdHlsZSBhdHRyaWJ1dGVzCisJaHRtbCA9IGh0bWwucmVwbGFjZSgvPFxzKihcd1tePl0qKSBzdHlsZT0iKFteIl0qKSIoW14+XSopL2dpLCAiPCQxJDMiKSA7CisJLy8gUmVtb3ZlIExhbmcgYXR0cmlidXRlcworCWh0bWwgPSBodG1sLnJlcGxhY2UoLzxccyooXHdbXj5dKikgbGFuZz0oW14gfD5dKikoW14+XSopL2dpLCAiPCQxJDMiKSA7CisJLy8gUmVtb3ZlIFhNTCBlbGVtZW50cyBhbmQgZGVjbGFyYXRpb25zCisJaHRtbCA9IGh0bWwucmVwbGFjZSgvPFxcP1w/eG1sW14+XSo+L2dpLCAiIikgOworCS8vIFJlbW92ZSBUYWdzIHdpdGggWE1MIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnM6IDxvOnA+PC9vOnA+CisJaHRtbCA9IGh0bWwucmVwbGFjZSgvPFwvP1x3KzpbXj5dKj4vZ2ksICIiKSA7CisJLy8gUmVwbGFjZSB0aGUgJm5ic3A7CisJaHRtbCA9IGh0bWwucmVwbGFjZSgvJm5ic3A7LywgIiAiICk7CisKKwkvLyBUcmFuc2Zvcm0gPHA+PGJyIC8+PC9wPiB0byA8YnI+CisJLy9odG1sID0gaHRtbC5yZXBsYWNlKC88XHMqcFtePl0qPlxzKjxccypiclxzKlwvPlxzKjxcL1xzKnBbXj5dKj4vZ2ksICI8YnI+Iik7CisJaHRtbCA9IGh0bWwucmVwbGFjZSgvPFxzKnBbXj5dKj48XHMqYnJccypcLz8+XHMqPFwvXHMqcFtePl0qPi9naSwgIjxicj4iKTsKKwkKKwkvLyBSZW1vdmUgPFA+IAorCWh0bWwgPSBodG1sLnJlcGxhY2UoLzxccypwW14+XSo+L2dpLCAiIik7CisJCisJLy8gUmVwbGFjZSA8L3A+IHdpdGggPGJyPgorCWh0bWwgPSBodG1sLnJlcGxhY2UoLzxcL1xzKnBbXj5dKj4vZ2ksICI8YnI+Iik7CisJCisJLy8gUmVtb3ZlIGFueSA8YnI+IGF0IHRoZSBlbmQKKwlodG1sID0gaHRtbC5yZXBsYWNlKC8oXHMqPGJyPlxzKikqJC8sICIiKTsKKwkKKwlodG1sID0gaHRtbC50cmltKCk7CisJcmV0dXJuIGh0bWw7Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2ltZy9lZF9maWx0ZXIuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvaW1nL2VkX2ZpbHRlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMxODBhOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2ltZy9lZF9maWx0ZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvYjUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2I1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMGYxZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2I1LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiYjUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9jaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWZhOTc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9jaC5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEZJTFRFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9jei5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvY3ouanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA0M2NlNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvY3ouanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjeiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvZGEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYzNiMzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2RhLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmJjNjY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9kZS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkZpbHRlciI6ICJGaWx0ZXIiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvZWUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2VlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NzgzNzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2VlLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2VsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9lbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzQ2MjA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9lbC5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEZJTFRFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhhMjgxZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvZXMuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlcyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvZXUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2V1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxOWQ1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2V1LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9mYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzI3YzQwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9mYS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEZJTFRFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9maS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvZmkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4ZjJkNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvZmkuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OGQwOWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2ZyX2NhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9mcl9jYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjRkMGI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9mcl9jYS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyX2NhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEZJTFRFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9nYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvZ2IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM1NzViNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvZ2IuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJnYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvaGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNGFhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2hlLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2h1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9odS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yzk1ZDJjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9odS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImh1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEZJTFRFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9pdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvaXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIwMThjOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvaXQuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJpdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MGE5OTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2phLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiamEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiRmlsdGVyIjogIuODleOCo+ODq+OCv+ODvCIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZGM0YTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSwyNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICJGaWx0ZXIiOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvbHQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2x0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMGY1MzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2x0LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL2x2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9sdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzYyZTcxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9sdi5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEZJTFRFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9uYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYzNDgwOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvbmIuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJuYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OTU3NzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL25sLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiRmlsdGVyIjogIkZpbHRlciIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvcGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY5NzFiYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvcGwuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2Y2FmYjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiRmlsdGVyIjogIkZpbHRybyIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9yby5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvcm8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAzMTM0YQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvcm8uanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJybyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvcnUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL3J1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NmE1YjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL3J1LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicnUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL3NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9zaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTA4OWIxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9zaC5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEZJTFRFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9zaS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvc2kuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EzZTJmMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvc2kuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvc3IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL3NyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NjFkNDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL3NyLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL3N2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9zdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjQ3MWU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy9zdi5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInN2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEZJTFRFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvdGguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQyZWEwNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvdGguanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0aCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvdHIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL3RyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ODEzMTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogRklMVEVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ZpbHRlci9sYW5nL3ZuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy92bi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmQxM2UyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy92bi5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInZuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEZJTFRFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9GaWx0ZXIvbGFuZy96aF9jbi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvemhfY24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc1ZjM1NAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvRmlsdGVyL2xhbmcvemhfY24uanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ6aF9jbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBGSUxURVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvSHRtbFRpZHkuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L0h0bWxUaWR5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMjI0ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L0h0bWxUaWR5LmpzCkBAIC0wLDAgKzEsMTA1IEBACisvLyBQbHVnaW4gZm9yIGh0bWxBcmVhIHRvIHJ1biBjb2RlIHRocm91Z2ggdGhlIHNlcnZlcidzIEhUTUwgVGlkeQorLy8gQnkgQWRhbSBXcmlnaHQsIGZvciBUaGUgVW5pdmVyc2l0eSBvZiBXZXN0ZXJuIEF1c3RyYWxpYQorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKworZnVuY3Rpb24gSHRtbFRpZHkoZWRpdG9yKSB7CisJdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisKKwl2YXIgY2ZnID0gZWRpdG9yLmNvbmZpZzsKKwl2YXIgYmwgPSBIdG1sVGlkeS5idG5MaXN0OworCXZhciBzZWxmID0gdGhpczsKKworCXRoaXMub25Nb2RlID0gdGhpcy5fX29uTW9kZTsKKworCS8vIHJlZ2lzdGVyIHRoZSB0b29sYmFyIGJ1dHRvbnMgcHJvdmlkZWQgYnkgdGhpcyBwbHVnaW4KKwl2YXIgdG9vbGJhciA9IFtdOworCWZvciAodmFyIGkgPSAwOyBpIDwgYmwubGVuZ3RoOyArK2kpIHsKKwkJdmFyIGJ0biA9IGJsW2ldOworCQlpZiAoYnRuID09ICJodG1sLXRpZHkiKSB7CisJCQl2YXIgaWQgPSAiSFQtaHRtbC10aWR5IjsKKwkJCWNmZy5yZWdpc3RlckJ1dHRvbihpZCwgdGhpcy5fbGMoIkhUTUwgVGlkeSIpLCBlZGl0b3IuaW1nVVJMKGJ0blswXSArICIuZ2lmIiwgIkh0bWxUaWR5IiksIHRydWUsCisJCQkJCSAgIGZ1bmN0aW9uKGVkaXRvciwgaWQpIHsKKwkJCQkJCSAgIC8vIGRpc3BhdGNoIGJ1dHRvbiBwcmVzcyBldmVudAorCQkJCQkJICAgc2VsZi5idXR0b25QcmVzcyhlZGl0b3IsIGlkKTsKKwkJCQkJICAgfSwgYnRuWzFdKTsKKwkJCXRvb2xiYXIucHVzaChpZCk7CisJCX0gZWxzZSBpZiAoYnRuID09ICJodG1sLWF1dG8tdGlkeSIpIHsKKyAgICAgICAgICAgIHZhciBidG5UeHQgPSBbdGhpcy5fbGMoIkF1dG8tVGlkeSIpLCB0aGlzLl9sYygiRG9uJ3QgVGlkeSIpXTsKKyAgICAgICAgICAgIHZhciBvcHRpb25JdGVtcyA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAgICAgIG9wdGlvbkl0ZW1zW2J0blR4dFswXV0gPSAiYXV0byI7CisgICAgICAgICAgICBvcHRpb25JdGVtc1tidG5UeHRbMV1dID0gIm5vYXV0byI7CisJCQl2YXIgaHRfY2xhc3MgPSB7CisJCQkJaWQJOiAiSFQtYXV0by10aWR5IiwKKwkJCQlvcHRpb25zCTogb3B0aW9uSXRlbXMsCisJCQkJYWN0aW9uCTogZnVuY3Rpb24gKGVkaXRvcikgeyBzZWxmLl9fb25TZWxlY3QoZWRpdG9yLCB0aGlzKTsgfSwKKwkJCQlyZWZyZXNoCTogZnVuY3Rpb24gKGVkaXRvcikgeyB9LAorCQkJCWNvbnRleHQJOiAiYm9keSIKKwkJCX07CisJCQljZmcucmVnaXN0ZXJEcm9wZG93bihodF9jbGFzcyk7CisJCX0KKwl9CisKKwlmb3IgKHZhciBpIGluIHRvb2xiYXIpIHsKKwkJY2ZnLnRvb2xiYXJbMF0ucHVzaCh0b29sYmFyW2ldKTsKKwl9Cit9CisKK0h0bWxUaWR5Ll9wbHVnaW5JbmZvID0geworCW5hbWUgICAgICAgICAgOiAiSHRtbFRpZHkiLAorCXZlcnNpb24gICAgICAgOiAiMS4wIiwKKwlkZXZlbG9wZXIgICAgIDogIkFkYW0gV3JpZ2h0IiwKKwlkZXZlbG9wZXJfdXJsIDogImh0dHA6Ly9ibG9nLmhpcGlrYXQub3JnLyIsCisJc3BvbnNvciAgICAgICA6ICJUaGUgVW5pdmVyc2l0eSBvZiBXZXN0ZXJuIEF1c3RyYWxpYSIsCisJc3BvbnNvcl91cmwgICA6ICJodHRwOi8vd3d3LnV3YS5lZHUuYXUvIiwKKwlsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIgorfTsKKworSHRtbFRpZHkucHJvdG90eXBlLl9sYyA9IGZ1bmN0aW9uKHN0cmluZykgeworICAgIHJldHVybiBYaW5oYS5fbGMoc3RyaW5nLCAnSHRtbFRpZHknKTsKK307CisKK0h0bWxUaWR5LnByb3RvdHlwZS5fX29uU2VsZWN0ID0gZnVuY3Rpb24oZWRpdG9yLCBvYmopIHsKKwkvLyBHZXQgdGhlIHRvb2xiYXIgZWxlbWVudCBvYmplY3QKKwl2YXIgZWxlbSA9IGVkaXRvci5fdG9vbGJhck9iamVjdHNbb2JqLmlkXS5lbGVtZW50OworCisJLy8gU2V0IG91ciBvbk1vZGUgZXZlbnQgYXBwcm9wcmlhdGVseQorCWlmIChlbGVtLnZhbHVlID09ICJhdXRvIikKKwkJdGhpcy5vbk1vZGUgPSB0aGlzLl9fb25Nb2RlOworCWVsc2UKKwkJdGhpcy5vbk1vZGUgPSBudWxsOworfTsKKworSHRtbFRpZHkucHJvdG90eXBlLl9fb25Nb2RlID0gZnVuY3Rpb24obW9kZSkgeworCWlmICggbW9kZSA9PSAidGV4dG1vZGUiICkgeworCQl0aGlzLmJ1dHRvblByZXNzKHRoaXMuZWRpdG9yLCAiSFQtaHRtbC10aWR5Iik7CisJfQorfTsKKworSHRtbFRpZHkuYnRuTGlzdCA9IFsKKwkJICAgIG51bGwsIC8vIHNlcGFyYXRvcgorCQkgICAgWyJodG1sLXRpZHkiXSwKKwkJICAgIFsiaHRtbC1hdXRvLXRpZHkiXQorXTsKKworSHRtbFRpZHkucHJvdG90eXBlLmJ1dHRvblByZXNzID0gZnVuY3Rpb24oZWRpdG9yLCBpZCkgeworCisJc3dpdGNoIChpZCkKKyAgeworICAgIGNhc2UgIkhULWh0bWwtdGlkeSI6CisgICAgeworICAgICAgdmFyIG9sZGh0bWwgPSBlZGl0b3IuZ2V0SFRNTCgpOworICAgICAgaWYob2xkaHRtbD09IiIpIGJyZWFrOyAvL2Rvbid0IGNsZWFuIGVtcHR5IHRleHQKKyAgICAgIC8vIEFzayB0aGUgc2VydmVyIGZvciBzb21lIG5pY2UgbmV3IGh0bWwsIGJhc2VkIG9uIHRoZSBvbGQuLi4KKyAgICAgIFhpbmhhLl9wb3N0YmFjayhYaW5oYS5nZXRQbHVnaW5EaXIoIkh0bWxUaWR5IikgKyAnL2h0bWwtdGlkeS1sb2dpYy5waHAnLCB7J2h0aXNvdXJjZV9uYW1lJyA6IG9sZGh0bWx9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGphdmFzY3JpcHRSZXNwb25zZSkgeyBldmFsKGphdmFzY3JpcHRSZXNwb25zZSkgfSk7CisgICAgfQorCQlicmVhazsKKwl9Cit9OworCitIdG1sVGlkeS5wcm90b3R5cGUucHJvY2Vzc1RpZGllZCA9IGZ1bmN0aW9uKG5ld1NyYykgeworCWVkaXRvciA9IHRoaXMuZWRpdG9yOworCWVkaXRvci5zZXRIVE1MKG5ld1NyYyk7Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvUkVBRE1FIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNlMTlmMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvUkVBRE1FCkBAIC0wLDAgKzEsMTA0IEBACisvLyBQbHVnaW4gZm9yIGh0bWxBcmVhIHRvIHJ1biBjb2RlIHRocm91Z2ggdGhlIHNlcnZlcidzIEhUTUwgVGlkeQorLy8gQnkgQWRhbSBXcmlnaHQsIGZvciBUaGUgVW5pdmVyc2l0eSBvZiBXZXN0ZXJuIEF1c3RyYWxpYQorLy8KKy8vICAgRW1haWw6ICAgICAgemVub0B1Y2MuZ3UudXdhLmVkdS5hdQorLy8gICBIb21lcGFnZTogICBodHRwOi8vYmxvZy5oaXBpa2F0Lm9yZy8KKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gVmVyc2lvbjogMC41CisvLyBSZWxlYXNlZCB0byB0aGUgb3V0c2lkZSB3b3JsZDogMDQvMDMvMDQKKworCitIdG1sVGlkeSBpcyBhIHBsdWdpbiBmb3IgdGhlIHBvcHVsYXIgY3Jvc3MtYnJvd3NlciBUVFkgV1lTSVdZRyBlZGl0b3IsCitodG1sQXJlYSAoaHR0cDovL3d3dy5pbnRlcmFjdGl2ZXRvb2xzLmNvbS9wcm9kdWN0cy9odG1sYXJlYS8pLiBIdG1sVGlkeQorYmFzaWNhbGx5IHF1ZXJpZXMgSFRNTCBUaWR5IChodHRwOi8vdGlkeS5zb3VyY2Vmb3JnZS5uZXQvKSBvbiB0aGUKK3NlcnZlciBzaWRlLCBnZXR0aW5nIGl0IHRvIG1ha2UtaHRtbC1uaWNlLCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWFzc2VzCitvZiBqYXZhc2NyaXB0LCB3aGljaCB0aGUgY2xpZW50IHdvdWxkIGhhdmUgdG8gZG93bmxvYWQuCisKK0hpLCB0aGlzIGlzIGEgcXVpY2sgZXhwbGFuYXRpb24gb2YgaG93IHRvIGluc3RhbGwgSHRtbFRpZHkuIE11Y2ggYmV0dGVyCitkb2N1bWVudGF0aW9uIGlzIHByb2JhYmx5IHJlcXVpcmVkLCBhbmQgeW91J3JlIHdlbGNvbWUgdG8gd3JpdGUgaXQgOikKKworCisqIFRoZSBIdG1sVGlkeSBkaXJlY3RvcnkgeW91IHNob3VsZCBoYXZlIGZvdW5kIHRoaXMgZmlsZSBpbiBzaG91bGQKKyAgaW5jbHVkZSB0aGUgZm9sbG93aW5nOgorCisgIC0gUkVBRE1FCisgICAgICAgIFRoaXMgZmlsZSwgcHJvdmlkaW5nIGhlbHAgaW5zdGFsbGluZyB0aGUgcGx1Z2luLgorCisgIC0gaHRtbC10aWR5LWNvbmZpZy5jZmcKKyAgICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgSFRNTCBUaWR5IHVzZXMgdG8KKyAgICAgICAgY2xlYW4gaHRtbCwgYW5kIGNhbiBiZSBtb2RpZmllZCB0byBzdWl0IHlvdXIgb3JnYW5pemF0aW9ucworICAgICAgICByZXF1aXJlbWVudHMuCisKKyAgLSBodG1sLXRpZHktbG9naWMucGhwCisgICAgICAgIFRoaXMgaXMgdGhlIHBocCBzY3JpcHQsIHdoaWNoIGlzIHF1ZXJpZWQgd2l0aCBkaXJ0eSBodG1sIGFuZCBpcworICAgICAgICByZXNwb25zaWJsZSBmb3IgaW52b2tpbmcgSFRNTCBUaWR5LCBnZXR0aW5nIG5pY2UgbmV3IGh0bWwgYW5kCisgICAgICAgIHJldHVybmluZyBpdCB0byB0aGUgY2xpZW50LgorCisgIC0gaHRtbC10aWR5LmpzCisgICAgICAgIFRoZSBtYWluIGh0bWxBcmVhIHBsdWdpbiwgcHJvdmlkaW5nIGZ1bmN0aW9uYWxpdHkgdG8gdGlkeSBodG1sCisgICAgICAgIHRocm91Z2ggdGhlIGh0bWxBcmVhIGludGVyZmFjZS4KKworICAtIGh0bWxhcmVhLmpzLm9ubW9kZV9ldmVudC5kaWZmCisgICAgICAgIEF0IHRoZSB0aW1lIG9mIHB1Ymxpc2hpbmcsIGFuIGV4dHJhIGV2ZW50IGhhbmRsZXIgd2FzIHJlcXVpcmVkCisgICAgICAgIGluc2lkZSB0aGUgbWFpbiBodG1sYXJlYS5qcyBmaWxlLiBodG1sYXJlYS5qcyBtYXkgYmUgcGF0Y2hlZAorICAgICAgICBhZ2FpbnN0IHRoaXMgZmlsZSB0byBtYWtlIHRoZSBjaGFuZ2VzIHJldXF1aXJlZCwgYnV0IGJlIGF3YXJlCisgICAgICAgIHRoYXQgdGhlIGV2ZW50IGhhbmRsZXIgbWF5IGVpdGhlciBub3cgYmUgaW4gdGhlIGNvcmUgb3IKKyAgICAgICAgaHRtbGFyZWEuanMgbWF5IGhhdmUgY2hhbmdlZCBlbm91Z2ggdG8gaW52YWxpZGF0ZSB0aGUgcGF0Y2guCisJCisJVVBEQVRFOiBub3cgaXQgZXhpc3RzIGluIHRoZSBvZmZpY2lhbCBodG1sYXJlYS5qczsgYXBwbHlpbmcKKwl0aGlzIHBhdGNoIGlzIHRodXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KKworICAtIGltZy9odG1sLXRpZHkuZ2lmCisgICAgICAgIFRoZSBIdG1sVGlkeSBpY29uLCBmb3IgdGhlIGh0bWxBcmVhIHRvb2xiYXIuIENyZWF0ZWQgYnkgRGFuCisgICAgICAgIFBldHR5IGZvciBUaGUgVW5pdmVyc2l0eSBvZiBXZXN0ZXJuIEF1c3RyYWxpYS4KKworICAtIGxhbmcvZW4uanMKKyAgICAgICAgRW5nbGlzaCBsYW5ndWFnZSBmaWxlLiBBZGQgeW91ciBvd24gbGFuZ3VhZ2UgZmlsZXMgaGVyZSBhbmQKKyAgICAgICAgcGxlYXNlIGNvbnRyaWJ1dGUgYmFjayBpbnRvIHRoZSBodG1sQXJlYSBjb21tdW5pdHkhCisKKyAgVGhlIEh0bWxBcmVhIGRpcmVjdG9yeSBzaG91bGQgYmUgZXh0cmFjdGVkIHRvIHlvdXIgaHRtbGFyZWEvcGx1Z2lucy8KKyAgZGlyZWN0b3J5LgorCisKKyogTWFrZSBzdXJlIHRoZSBvbk1vZGUgZXZlbnQgaGFuZGxlciBtZW50aW9uZWQgYWJvdmUsIHJlZ2FyZGluZworICBodG1sYXJlYS5qcy5vbm1vZGVfZXZlbnQuZGlmZiwgZXhpc3RzIGluIHlvdXIgaHRtbGFyZWEuanMKKworCisqIGh0bWwtdGlkeS1sb2dpYy5waHAgc2hvdWxkIGJlIGV4ZWN1dGFibGUsIGFuZCB5b3VyIHdlYiBzZXJ2ZXIgc2hvdWxkCisgIGJlIGNvbmZpZ3VyZWQgdG8gZXhlY3V0ZSBwaHAgc2NyaXB0cyBpbiB0aGUgZGlyZWN0b3J5CisgIGh0bWwtdGlkeS1sb2dpYy5waHAgZXhpc3RzIGluLgorCisKKyogSFRNTCBUaWR5IG5lZWRzIHRvIGJlIGluc3RhbGxlZCBvbiB5b3VyIHNlcnZlciwgYW5kICd0aWR5JyBzaG91bGQgYmUKKyAgYW4gYWxpYXMgdG8gaXQsIGx5aW5nIGluIHRoZSBQQVRIIGtub3duIHRvIHRoZSB1c2VyIGV4ZWN1dGluZyBzdWNoCisgIHdlYiBzY3JpcHRzLgorCisKKyogSW4geW91ciBodG1sQXJlYSBjb25maWd1cmF0aW9uLCBkbyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCisgICAgSFRNTEFyZWEubG9hZFBsdWdpbigiSHRtbFRpZHkiKTsKKworICAgIGVkaXRvciA9IG5ldyBIVE1MQXJlYSgiZG9jIik7CisgICAgZWRpdG9yLnJlZ2lzdGVyUGx1Z2luKCJIdG1sVGlkeSIpOworCisKKyogVGhlbiwgaW4geW91ciBodG1sQXJlYSB0b29sYmFyIGNvbmZpZ3VyYXRpb24sIHVzZToKKworICAgIC0gIkhULWh0bWwtdGlkeSIKKyAgICAgICAgVGhpcyB3aWxsIGNyZWF0ZSB0aGUgJ3RpZHkgYnJvb20nIGljb24gb24gdGhlIHRvb2xiYXIsIHdoaWNoCisgICAgICAgIHdpbGwgYXR0ZW1wdCB0byB0aWR5IGh0bWwgc291cmNlIHdoZW4gY2xpY2tlZCwgYW5kOworCisgICAgLSAiSFQtYXV0by10aWR5IgorICAgICAgICBUaGlzIHdpbGwgY3JlYXRlIGFuICJBdXRvIFRpZHkiIC8gIkRvbid0IFRpZHkiIGRyb3Bkb3duLCB0bworICAgICAgICBzZWxlY3Qgd2hldGhlciB0aGUgc291cmNlIHNob3VsZCBiZSB0aWRpZWQgYXV0b21hdGljYWxseSB3aGVuCisgICAgICAgIGVudGVyaW5nIHNvdXJjZSB2aWV3LiBPbiBieSBkZWZhdWx0LCBpZiB5b3UnZCBsaWtlIGl0IG90aGVyd2lzZQorICAgICAgICB5b3UgY2FuIGRvIHNvIHByb2dyYW1hdGljYWxseSBhZnRlciBnZW5lcmF0aW5nIHRoZSB0b29sYmFyIDopCisgICAgICAgIChPciBqdXN0IGhhY2sgaXQgdG8gYmUgb3RoZXJ3aXNlLi4uKQorICAgIAorCitUaGFuayB5b3UuCisKK0FueSBidWdzIHlvdSBmaW5kIGNhbiBiZSBlbWFpbGVkIHRvIHplbm9AdWNjLmd1LnV3YS5lZHUuYXUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvaHRtbC10aWR5LWNvbmZpZy5jZmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2h0bWwtdGlkeS1jb25maWcuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MTY5OTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2h0bWwtdGlkeS1jb25maWcuY2ZnCkBAIC0wLDAgKzEsMjkgQEAKKy8vIERlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgaHRtbEFyZWEsIEh0bWxUaWR5IHBsdWdpbgorLy8gQnkgQWRhbSBXcmlnaHQsIGZvciBUaGUgVW5pdmVyc2l0eSBvZiBXZXN0ZXJuIEF1c3RyYWxpYQorLy8KKy8vIEV2ZXJ0eXRoaW5nIHlvdSBhbHdheXMgd2FudGVkIHRvIGtub3cgYWJvdXQgSFRNTCBUaWR5ICoKKy8vIGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vdGlkeS5zb3VyY2Vmb3JnZS5uZXQvLCBhbmQgYQorLy8gcXVpY2sgcmVmZXJlbmNlIHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZXhpc3RzIGF0CisvLyBodHRwOi8vdGlkeS5zb3VyY2Vmb3JnZS5uZXQvZG9jcy9xdWlja3JlZi5odG1sCisvLworLy8gKiBCdXQgd2VyZSBhZnJhaWQgdG8gYXNrCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorCit3b3JkLTIwMDA6IHllcworY2xlYW46IHllcworZHJvcC1mb250LXRhZ3M6IG5vCitkb2N0eXBlOiBhdXRvCitkcm9wLWVtcHR5LXBhcmFzOiB5ZXMKK2Ryb3AtcHJvcHJpZXRhcnktYXR0cmlidXRlczogeWVzCitlbmNsb3NlLWJsb2NrLXRleHQ6IHllcworZW5jbG9zZS10ZXh0OiB5ZXMKK2VzY2FwZS1jZGF0YTogeWVzCitsb2dpY2FsLWVtcGhhc2lzOiB5ZXMKK2luZGVudDogYXV0bworaW5kZW50LXNwYWNlczogMgorYnJlYWstYmVmb3JlLWJyOiB5ZXMKK291dHB1dC14aHRtbDogeWVzCisKK2ZvcmNlLW91dHB1dDogeWVzCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2h0bWwtdGlkeS1sb2dpYy5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2h0bWwtdGlkeS1sb2dpYy5waHAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzQ1N2UwZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvaHRtbC10aWR5LWxvZ2ljLnBocApAQCAtMCwwICsxLDc5IEBACis8P3BocCAKKyMjCisjIyAgUGx1Z2luIGZvciBodG1sQXJlYSwgdG8gcnVuIGNvZGUgdGhyb3VnaCB0aGUgc2VydmVyJ3MgSFRNTCBUaWR5CisjIyAgIEJ5IEFkYW0gV3JpZ2h0LCBmb3IgVGhlIFVuaXZlcnNpdHkgb2YgV2VzdGVybiBBdXN0cmFsaWEKKyMjICAgIFRoaXMgaXMgdGhlIHNlcnZlci1zaWRlIHNjcmlwdCwgd2hpY2ggZGlydHkgY29kZSBpcyBydW4gdGhyb3VnaC4KKyMjCisjIyAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorIyMgIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKyMjCisKKwkvLyBHZXQgdGhlIG9yaWdpbmFsIHNvdXJjZQorCSRzb3VyY2UgPSAkX1BPU1RbJ2h0aXNvdXJjZV9uYW1lJ107CisJJHNvdXJjZSA9IHN0cmlwc2xhc2hlcygkc291cmNlKTsKKyAgJGN3ZCA9IHN0cl9yZXBsYWNlKCJcXCIsIi8iLGdldGN3ZCgpKS4iLyI7CisgIAorCS8vIE9wZW4gYSB0aWR5IHByb2Nlc3MgLSBJIGhvcGUgaXQncyBpbnN0YWxsZWQhCisJJGRlc2NyaXB0b3JzcGVjID0gYXJyYXkoCisJCTAgPT4gYXJyYXkoInBpcGUiLCAiciIpLAorCQkxID0+IGFycmF5KCJwaXBlIiwgInciKQorCSk7CisJJHByb2Nlc3MgPSBAcHJvY19vcGVuKCJ0aWR5IC11dGY4IC1jb25maWcgeyRjd2R9aHRtbC10aWR5LWNvbmZpZy5jZmciLCAkZGVzY3JpcHRvcnNwZWMsICRwaXBlcyk7CisKKworCS8vIE1ha2Ugc3VyZSB0aGUgcHJvZ3JhbSBzdGFydGVkIGFuZCB3ZSBnb3QgdGhlIGhvb2tzLi4uCisJLy8gRWl0aGVyIHdheSwgZ2V0IHNvbWUgc291cmNlIGNvZGUgaW50byAkc291cmNlCisJaWYgKGlzX3Jlc291cmNlKCRwcm9jZXNzKSkgeworCisJCS8vIEZlZWQgdW50aWR5IHNvdXJjZSBpbnRvIHRoZSBzdGRpbgorCQlmd3JpdGUoJHBpcGVzWzBdLCAkc291cmNlKTsKKwkJZmNsb3NlKCRwaXBlc1swXSk7CisKKwkJLy8gUmVhZCBjbGVhbiBzb3VyY2Ugb3V0IHRvIHRoZSBicm93c2VyCisJCXdoaWxlICghZmVvZigkcGlwZXNbMV0pKSB7CisJCQkvL2VjaG8gZmdldHMoJHBpcGVzWzFdLCAxMDI0KTsKKwkJCSRuZXdzcmMgLj0gZmdldHMoJHBpcGVzWzFdLCAxMDI0KTsKKwkJfQorCQlmY2xvc2UoJHBpcGVzWzFdKTsKKworCQkvLyBDbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMKKwkJcHJvY19jbG9zZSgkcHJvY2Vzcyk7CisKKwl9IGVsc2UgeworICAgIC8qIFVzZSB0aWR5IGlmIGl0J3MgYXZhaWxhYmxlIGZyb20gUEVDTCAqLworICAgIGlmKCBmdW5jdGlvbl9leGlzdHMoJ3RpZHlfcGFyc2Vfc3RyaW5nJykgKQorICAgIHsKKyAgICAgICR0ZW1wc3JjID0gdGlkeV9wYXJzZV9zdHJpbmcoJHNvdXJjZSk7CisgICAgICB0aWR5X2NsZWFuX3JlcGFpcigpOworICAgICAgJG5ld3NyYyA9IHRpZHlfZ2V0X291dHB1dCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLy8gQmV0dGVyIGdpdmUgdGhlbSBiYWNrIHdoYXQgdGhleSBjYW1lIHdpdGgsIHNvIHRoZXkgZG9uJ3QgbG9zZSBpdCBhbGwuLi4KKyAgICAgICRuZXdzcmMgPSAiPGJvZHk+XG4iIC4kc291cmNlLiAiXG48L2JvZHk+IjsKKyAgICB9CisJfQorCisJLy8gU3BsaXQgb3VyIHNvdXJjZSBpbnRvIGFuIGFycmF5IGJ5IGxpbmVzCisJJHNyY0xpbmVzID0gcHJlZ19zcGxpdCgiL1xuLyIsJG5ld3NyYywtMSxQUkVHX1NQTElUX05PX0VNUFRZKTsKKworCS8vIEdldCBvbmx5IHRoZSBsaW5lcyBiZXR3ZWVuIHRoZSBib2R5IHRhZ3MKKwkkc3RhcnRMbiA9IDA7CisJd2hpbGUgKCBzdHJwb3MoICRzcmNMaW5lc1skc3RhcnRMbisrXSwgJzxib2R5JyApID09PSBmYWxzZSAmJiAkc3RhcnRMbiA8IHNpemVvZigkc3JjTGluZXMpICk7CisJJGVuZExuID0gJHN0YXJ0TG47CisJd2hpbGUgKCBzdHJwb3MoICRzcmNMaW5lc1skZW5kTG4rK10sICc8L2JvZHknICkgPT09IGZhbHNlICYmICRlbmRMbiA8IHNpemVvZigkc3JjTGluZXMpICk7CisKKwkkc3JjTGluZXMgPSBhcnJheV9zbGljZSggJHNyY0xpbmVzLCAkc3RhcnRMbiwgKCRlbmRMbiAtICRzdGFydExuIC0gMSkgKTsKKworCS8vIENyZWF0ZSBhIHNldCBvZiBqYXZhc2NyaXB0IGNvZGUgdG8gY29tcGlsZSBhIG5ldyBzb3VyY2Ugc3RyaW5nCisJZm9yZWFjaCAoJHNyY0xpbmVzIGFzICRsaW5lKSB7CisJCSRqc01ha2VTcmMgLj0gIlx0bnMgKz0gJyIgLiBzdHJfcmVwbGFjZSgiJyIsIlwnIiwkbGluZSkgLiAiXFxuJztcbiI7CisJfQoraWYoIXNpemVvZigkc3JjTGluZXMpKSB7CisgICAgZWNobyAiYWxlcnQoSFRNTEFyZWEuX2xjKCdUaWR5IGZhaWxlZC4gIENoZWNrIHlvdXIgSFRNTCBmb3Igc3ludGF4IGVycm9ycy4nLCAnSHRtbFRpZHknKSk7XG4iOworfSBlbHNlIHsKKz8+Cit2YXIgbnM9IiI7Cis8P3BocCBlY2hvICRqc01ha2VTcmM7ID8+CitlZGl0b3Iuc2V0SFRNTChucyk7Cis8PyB9ID8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9pbWcvaHRtbC10aWR5LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvaW1nL2h0bWwtdGlkeS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjYzZhNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvaW1nL2h0bWwtdGlkeS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL2I1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL2I1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZTIwNjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvYjUuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJiNSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL2NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL2NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YzhhY2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvY2guanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL2N6LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL2N6LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1YWU4YzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvY3ouanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjeiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL2RhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YTU0OTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvZGEuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJUaWR5IGZhaWxlZC4gIENoZWNrIHlvdXIgSFRNTCBmb3Igc3ludGF4IGVycm9ycy4iOiAiVGlkeSBtaXNseWtrZWRlcy4gVGplayBkaW4gSFRNTCBmb3Igc3ludGFrc2ZlamwuIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjM5ZGU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiSFRNTCBUaWR5IjogIkhUTUwgVGlkeSIsCisgICAgIlRpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLiI6ICJUaWR5IGZlaGxnZXNjaGxhZ2VuLiBQcsO8ZmVuIFNpZSBkZW4gSFRNTCBDb2RlIG5hY2ggU3ludGF4LUZlaGxlcm4uIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9lZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9lZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjlkYTg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL2VlLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9lbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9lbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGQ0Y2ZlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL2VsLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjIyMDM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL2VzLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXMiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9ldS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9ldS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDU2Y2IzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL2V1LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9mYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9mYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2FmMjAzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL2ZhLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9maS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9maS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzExYTI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL2ZpLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmkiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSFRNTFRJRFkgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9mci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9mci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDc5M2E3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQXV0by1UaWR5IjogIlRpZHkgYXV0b21hdGlxdWUiLAorICAgICJEb24ndCBUaWR5IjogIlRpZHkgbm9uIHV0aWxpc8OpIiwKKyAgICAiSFRNTCBUaWR5IjogIkhUTUwgVGlkeSIsCisgICAgIlRpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLiI6ICJUaWR5IGEgw6ljaG91w6kuIFbDqXJpZmlleiB2b3RyZSBIVE1MIGZvciBkZXMgZXJyZXVycyBkZSBzeW50YXhlIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvZnJfY2EuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvZnJfY2EuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBhOWJjNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9mcl9jYS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyX2NhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEhUTUxUSURZIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvZ2IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvZ2IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIzYWM2MgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9nYi5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImdiIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEhUTUxUSURZIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvaGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvaGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY2N2ZkOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9oZS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImhlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEhUTUxUSURZIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvaHUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJiY2E4NQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9odS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImh1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEhUTUxUSURZIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvaXQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvaXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJiN2IwYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9pdC5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIml0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEhUTUxUSURZIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNhNDMyOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9qYS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkF1dG8tVGlkeSI6ICLoh6rli5XpganmraPljJYiLAorICAgICJEb24ndCBUaWR5IjogIumBqeato+WMluOBl+OBquOBhCIsCisgICAgIkhUTUwgVGlkeSI6ICJIVE1MIFRpZHkiLAorICAgICJUaWR5IGZhaWxlZC4gIENoZWNrIHlvdXIgSFRNTCBmb3Igc3ludGF4IGVycm9ycy4iOiAi6YGp5q2j5YyW44Gr5aSx5pWX44GX44G+44GX44Gf44CCSFRNTOOBruaWh+azleOCqOODqeODvOOCkueiuuiqjeOBl+OBpuOBj+OBoOOBleOBhOOAgiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL2xjX2Jhc2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvbGNfYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOThiOWNmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSwyOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICJBdXRvLVRpZHkiOiAiIiwKKyAgICAiRG9uJ3QgVGlkeSI6ICIiLAorICAgICJIVE1MIFRpZHkiOiAiIiwKKyAgICAiVGlkeSBmYWlsZWQuICBDaGVjayB5b3VyIEhUTUwgZm9yIHN5bnRheCBlcnJvcnMuIjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvbHQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvbHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY0NTQ1MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9sdC5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEhUTUxUSURZIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvbHYuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvbHYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg5ZGUzZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9sdi5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEhUTUxUSURZIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvbmIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQxZGQ3MQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkhUTUwgVGlkeSI6ICJIVE1MIFRpZHkiLAorICAgICJUaWR5IGZhaWxlZC4gIENoZWNrIHlvdXIgSFRNTCBmb3Igc3ludGF4IGVycm9ycy4iOiAiVGlkeSBmZWlsZXQuIFNqZWtrIEhUTUwga29kZW4gZm9yIHN5bnRha3NmZWlsLiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIEhUTUxUSURZIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvbmwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzY2ZmZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSHRtbFRpZHkvbGFuZy9ubC5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIlRpZHkgZmFpbGVkLiAgQ2hlY2sgeW91ciBIVE1MIGZvciBzeW50YXggZXJyb3JzLiI6ICJUaWR5IG1pc2x1a3QuIENvbnRyb2xlZXIgSFRNTCBvcCBmb3V0ZW4uIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiSFQtaHRtbC10aWR5IjogIkhUTUwgb3BzY2hvbmVuIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3BsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3BsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZTI5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvcGwuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNjQyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvcHRfYnIuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwdF9iciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBdXRvLVRpZHkiOiAiQXV0by1UaWR5IiwKKyAgICAiRG9uJ3QgVGlkeSI6ICJTZW0gVGlkeSIsCisgICAgIkhUTUwgVGlkeSI6ICJIVE1MIFRpZHkiLAorICAgICJUaWR5IGZhaWxlZC4gIENoZWNrIHlvdXIgSFRNTCBmb3Igc3ludGF4IGVycm9ycy4iOiAiVGlkeSBmYWxob3UuIFZlcmlmaXF1ZSBlcnJvcyBkZSBzaW50YXhlIGVtIHNldSBIVE1MLiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3JvLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3JvLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZTVhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvcm8uanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJybyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3J1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNDA0NzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvcnUuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhY2MzZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvc2guanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3NpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3NpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNTM2YWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvc2kuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3NyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3NyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYTdhODAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvc3IuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3N2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3N2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNWFiMTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvc3YuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3RoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3RoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMzk4ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvdGguanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0aCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3RyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3RyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYzZiZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvdHIuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0ciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3ZuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3ZuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZDhjMTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvdm4uanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ2biIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3poX2NuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9IdG1sVGlkeS9sYW5nL3poX2NuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZTY3MzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0h0bWxUaWR5L2xhbmcvemhfY24uanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ6aF9jbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBIVE1MVElEWSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvQ2xhc3Nlcy9GaWxlcy5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9DbGFzc2VzL0ZpbGVzLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmM5NzMwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvQ2xhc3Nlcy9GaWxlcy5waHAKQEAgLTAsMCArMSwzMzMgQEAKKzw/cGhwCisvKioKKyAqIEZpbGUgVXRpbGl0aWVzLgorICogQGF1dGhvciAkQXV0aG9yOmtvdG8gJAorICogQHZlcnNpb24gJElkOkZpbGVzLnBocCA4NDEgMjAwNy0wNS0yNyAxMzozMTo1MVoga290byAkCisgKiBAcGFja2FnZSBJbWFnZU1hbmFnZXIKKyAqLworCitkZWZpbmUoJ0ZJTEVfRVJST1JfTk9fU09VUkNFJywgMTAwKTsKK2RlZmluZSgnRklMRV9FUlJPUl9DT1BZX0ZBSUxFRCcsIDEwMSk7CitkZWZpbmUoJ0ZJTEVfRVJST1JfRFNUX0RJUl9GQUlMRUQnLCAxMDIpOworZGVmaW5lKCdGSUxFX0NPUFlfT0snLCAxMDMpOworZGVmaW5lKCdGSUxFX0VSUk9SX0RTVF9ESVJfRVhJU1QnLCAxMDQpOworCisvKioKKyAqIEZpbGUgVXRpbGl0aWVzCisgKiBAYXV0aG9yICRBdXRob3I6a290byAkCisgKiBAdmVyc2lvbiAkSWQ6RmlsZXMucGhwIDg0MSAyMDA3LTA1LTI3IDEzOjMxOjUxWiBrb3RvICQKKyAqIEBwYWNrYWdlIEltYWdlTWFuYWdlcgorICogQHN1YnBhY2thZ2UgZmlsZXMKKyAqLworY2xhc3MgRmlsZXMgCit7CisJCisJLyoqCisJICogQ29weSBhIGZpbGUgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24uIElmIHVuaXF1ZSA9PSB0cnVlLCB0aGVuIGlmCisJICogdGhlIGRlc3RpbmF0aW9uIGV4aXN0cywgaXQgd2lsbCBiZSByZW5hbWVkIGJ5IGFwcGVuZGluZyBhbiBpbmNyZWFtZW50aW5nIAorCSAqIGNvdW50aW5nIG51bWJlci4KKwkgKiBAcGFyYW0gc3RyaW5nICRzb3VyY2Ugd2hlcmUgdGhlIGZpbGUgaXMgZnJvbSwgZnVsbCBwYXRoIHRvIHRoZSBmaWxlcyByZXF1aXJlZAorCSAqIEBwYXJhbSBzdHJpbmcgJGRlc3RpbmF0aW9uX2ZpbGUgbmFtZSBvZiB0aGUgbmV3IGZpbGUsIGp1c3QgdGhlIGZpbGVuYW1lCisJICogQHBhcmFtIHN0cmluZyAkZGVzdGluYXRpb25fZGlyIHdoZXJlIHRoZSBmaWxlcywganVzdCB0aGUgZGVzdGluYXRpb24gZGlyLAorCSAqIGUuZy4sIC93d3cvaHRtbC9nYWxsZXJ5LworCSAqIEBwYXJhbSBib29sZWFuICR1bmlxdWUgY3JlYXRlIHVuaXF1ZSBkZXN0aW5hdGlvbiBmaWxlIGlmIHRydWUuCisJICogQHJldHVybiBzdHJpbmcgdGhlIG5ldyBjb3BpZWQgZmlsZW5hbWUsIGVsc2UgZXJyb3IgaWYgYW55dGhpbmcgZ29lcyBiYWQuCisJICovCisJZnVuY3Rpb24gY29weUZpbGUoJHNvdXJjZSwgJGRlc3RpbmF0aW9uX2RpciwgJGRlc3RpbmF0aW9uX2ZpbGUsICR1bmlxdWU9dHJ1ZSkgCisJeworCQlpZighaXNfdXBsb2FkZWRfZmlsZSgkc291cmNlKSAmJiAhKGZpbGVfZXhpc3RzKCRzb3VyY2UpICYmIGlzX2ZpbGUoJHNvdXJjZSkpKSAKKwkJCXJldHVybiBGSUxFX0VSUk9SX05PX1NPVVJDRTsKKworCQkkZGVzdGluYXRpb25fZGlyID0gRmlsZXM6OmZpeFBhdGgoJGRlc3RpbmF0aW9uX2Rpcik7CisKKwkJaWYoIWlzX2RpcigkZGVzdGluYXRpb25fZGlyKSkgCisJCQlSZXR1cm4gRklMRV9FUlJPUl9EU1RfRElSX0ZBSUxFRDsKKworCQkkZmlsZW5hbWUgPSBGaWxlczo6ZXNjYXBlKCRkZXN0aW5hdGlvbl9maWxlKTsKKworCQlpZigkdW5pcXVlKSAKKwkJeworCQkJJGRvdEluZGV4ID0gc3RycnBvcygkZGVzdGluYXRpb25fZmlsZSwgJy4nKTsKKwkJCSRleHQgPSAnJzsKKwkJCWlmKGlzX2ludCgkZG90SW5kZXgpKSAKKwkJCXsKKwkJCQkkZXh0ID0gc3Vic3RyKCRkZXN0aW5hdGlvbl9maWxlLCAkZG90SW5kZXgpOworCQkJCSRiYXNlID0gc3Vic3RyKCRkZXN0aW5hdGlvbl9maWxlLCAwLCAkZG90SW5kZXgpOworCQkJfQorCQkJJGNvdW50ZXIgPSAwOworCQkJd2hpbGUoaXNfZmlsZSgkZGVzdGluYXRpb25fZGlyLiRmaWxlbmFtZSkpIAorCQkJeworCQkJCSRjb3VudGVyKys7CisJCQkJJGZpbGVuYW1lID0gJGJhc2UuJ18nLiRjb3VudGVyLiRleHQ7CisJCQl9CisJCX0KKworCQlpZiAoIWNvcHkoJHNvdXJjZSwgJGRlc3RpbmF0aW9uX2Rpci4kZmlsZW5hbWUpKQorCQkJcmV0dXJuIEZJTEVfRVJST1JfQ09QWV9GQUlMRUQ7CisJCQorCQkvL3ZlcmlmeSB0aGF0IGl0IGNvcGllZCwgbmV3IGZpbGUgbXVzdCBleGlzdHMKKwkJaWYgKGlzX2ZpbGUoJGRlc3RpbmF0aW9uX2Rpci4kZmlsZW5hbWUpKQorCQkJUmV0dXJuICRmaWxlbmFtZTsKKwkJZWxzZQorCQkJcmV0dXJuIEZJTEVfRVJST1JfQ09QWV9GQUlMRUQ7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGEgbmV3IGZvbGRlci4KKwkgKiBAcGFyYW0gc3RyaW5nICRuZXdGb2xkZXIgc3BlY2lmaXkgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgbmV3IGZvbGRlci4KKwkgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgbmV3IGZvbGRlciBpcyBjcmVhdGVkLCBmYWxzZSBvdGhlcndpc2UuCisJICovCisJZnVuY3Rpb24gY3JlYXRlRm9sZGVyKCRuZXdGb2xkZXIpIAorCXsKKwkJbWtkaXIgKCRuZXdGb2xkZXIsIDA3NzcpOworCQlyZXR1cm4gY2htb2QoJG5ld0ZvbGRlciwgMDc3Nyk7CisJfQorCisKKwkvKioKKwkgKiBFc2NhcGUgdGhlIGZpbGVuYW1lcywgYW55IG5vbi13b3JkIGNoYXJhY3RlcnMgd2lsbCBiZQorCSAqIHJlcGxhY2VkIGJ5IGFuIHVuZGVyc2NvcmUuCisJICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgdGhlIG9yZ2luYWwgZmlsZW5hbWUKKwkgKiBAcmV0dXJuIHN0cmluZyB0aGUgZXNjYXBlZCBzYWZlIGZpbGVuYW1lCisJICovCisJZnVuY3Rpb24gZXNjYXBlKCRmaWxlbmFtZSkKKwl7CisJCVJldHVybiBwcmVnX3JlcGxhY2UoJy9bXlx3XC5fXS8nLCAnXycsICRmaWxlbmFtZSk7CisJfQorCisJLyoqCisJICogRGVsZXRlIGEgZmlsZS4KKwkgKiBAcGFyYW0gc3RyaW5nICRmaWxlIGZpbGUgdG8gYmUgZGVsZXRlZAorCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGRlbGV0ZWQsIGZhbHNlIG90aGVyd2lzZS4KKwkgKi8KKwlmdW5jdGlvbiBkZWxGaWxlKCRmaWxlKSAKKwl7CisJCWlmKGlzX2ZpbGUoJGZpbGUpKSAKKwkJCVJldHVybiB1bmxpbmsoJGZpbGUpOworCQllbHNlCisJCQlSZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogRGVsZXRlIGZvbGRlcihzKSwgY2FuIGRlbGV0ZSByZWN1cnNpdmVseS4KKwkgKiBAcGFyYW0gc3RyaW5nICRmb2xkZXIgdGhlIGZvbGRlciB0byBiZSBkZWxldGVkLgorCSAqIEBwYXJhbSBib29sZWFuICRyZWN1cnNpdmUgaWYgdHJ1ZSwgYWxsIGZpbGVzIGFuZCBzdWItZGlyZWN0b3JpZXMKKwkgKiBhcmUgZGVsZXRlLiBJZiBmYWxzZSwgdHJpZXMgdG8gZGVsZXRlIHRoZSBmb2xkZXIsIGNhbiB0aHJvdworCSAqIGVycm9yIGlmIHRoZSBkaXJlY3RvcnkgaXMgbm90IGVtcHR5LgorCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGRlbGV0ZWQuCisJICovCisJZnVuY3Rpb24gZGVsRm9sZGVyKCRmb2xkZXIsICRyZWN1cnNpdmU9ZmFsc2UpIAorCXsKKwkJJGRlbGV0ZWQgPSB0cnVlOworCQlpZigkcmVjdXJzaXZlKSAKKwkJeworCQkJJGQgPSBkaXIoJGZvbGRlcik7CisJCQl3aGlsZSAoZmFsc2UgIT09ICgkZW50cnkgPSAkZC0+cmVhZCgpKSkgCisJCQl7CisJCQkJaWYgKCRlbnRyeSAhPSAnLicgJiYgJGVudHJ5ICE9ICcuLicpCisJCQkJeworCQkJCQkkb2JqID0gRmlsZXM6OmZpeFBhdGgoJGZvbGRlcikuJGVudHJ5OworCQkJCQkvL3Zhcl9kdW1wKCRvYmopOworCQkJCQlpZiAoaXNfZmlsZSgkb2JqKSkKKwkJCQkJeworCQkJCQkJJGRlbGV0ZWQgJj0gRmlsZXM6OmRlbEZpbGUoJG9iaik7CQkJCQkKKwkJCQkJfQorCQkJCQllbHNlIGlmKGlzX2Rpcigkb2JqKSkKKwkJCQkJeworCQkJCQkJJGRlbGV0ZWQgJj0gRmlsZXM6OmRlbEZvbGRlcigkb2JqLCAkcmVjdXJzaXZlKTsKKwkJCQkJfQorCQkJCQkKKwkJCQl9CisJCQl9CisJCQkkZC0+Y2xvc2UoKTsKKworCQl9CisKKwkJLy8kZm9sZGVyPSAkZm9sZGVyLicvdGh1bWJzJzsKKwkJLy92YXJfZHVtcCgkZm9sZGVyKTsKKwkJaWYoaXNfZGlyKCRmb2xkZXIpKSAKKwkJCSRkZWxldGVkICY9IHJtZGlyKCRmb2xkZXIpOworCQllbHNlCisJCQkkZGVsZXRlZCAmPSBmYWxzZTsKKworCQlSZXR1cm4gJGRlbGV0ZWQ7CisJfQorCisJLyoqCisJICogQXBwZW5kIGEgLyB0byB0aGUgcGF0aCBpZiByZXF1aXJlZC4KKwkgKiBAcGFyYW0gc3RyaW5nICRwYXRoIHRoZSBwYXRoCisJICogQHJldHVybiBzdHJpbmcgcGF0aCB3aXRoIHRyYWlsaW5nIC8KKwkgKi8KKwlmdW5jdGlvbiBmaXhQYXRoKCRwYXRoKSAKKwl7CisJCS8vYXBwZW5kIGEgc2xhc2ggdG8gdGhlIHBhdGggaWYgaXQgZG9lc24ndCBleGlzdHMuCisJCWlmKCEoc3Vic3RyKCRwYXRoLC0xKSA9PSAnLycpKQorCQkJJHBhdGggLj0gJy8nOworCQlSZXR1cm4gJHBhdGg7CisJfQorCisJLyoqCisJICogQ29uY2F0IHR3byBwYXRocyB0b2dldGhlci4gQmFzaWNhbGx5ICRwYXRoQSskcGF0aEIKKwkgKiBAcGFyYW0gc3RyaW5nICRwYXRoQSBwYXRoIG9uZQorCSAqIEBwYXJhbSBzdHJpbmcgJHBhdGhCIHBhdGggdHdvCisJICogQHJldHVybiBzdHJpbmcgYSB0cmFpbGluZyBzbGFzaCBjb21iaW5kZWQgcGF0aC4KKwkgKi8KKwlmdW5jdGlvbiBtYWtlUGF0aCgkcGF0aEEsICRwYXRoQikgCisJeworCQkkcGF0aEEgPSBGaWxlczo6Zml4UGF0aCgkcGF0aEEpOworCQlpZihzdWJzdHIoJHBhdGhCLDAsMSk9PScvJykKKwkJCSRwYXRoQiA9IHN1YnN0cigkcGF0aEIsMSk7CisJCVJldHVybiBGaWxlczo6Zml4UGF0aCgkcGF0aEEuJHBhdGhCKTsKKwl9CisKKwkvKioKKwkgKiBTaW1pbGFyIHRvIG1ha2VQYXRoLCBidXQgdGhlIHNlY29uZCBwYXJhbWV0ZXIKKwkgKiBpcyBub3Qgb25seSBhIHBhdGgsIGl0IG1heSBjb250YWluIHNheSBhIGZpbGUgZW5kaW5nLgorCSAqIEBwYXJhbSBzdHJpbmcgJHBhdGhBIHRoZSBsZWFkaW5nIHBhdGgKKwkgKiBAcGFyYW0gc3RyaW5nICRwYXRoQiB0aGUgZW5kaW5nIHBhdGggd2l0aCBmaWxlCisJICogQHJldHVybiBzdHJpbmcgY29tYmluZWQgZmlsZSBwYXRoLgorCSAqLworCWZ1bmN0aW9uIG1ha2VGaWxlKCRwYXRoQSwgJHBhdGhCKSAKKwl7CQkKKwkJJHBhdGhBID0gRmlsZXM6OmZpeFBhdGgoJHBhdGhBKTsKKwkJaWYoc3Vic3RyKCRwYXRoQiwwLDEpPT0nLycpCisJCQkkcGF0aEIgPSBzdWJzdHIoJHBhdGhCLDEpOworCQkKKwkJUmV0dXJuICRwYXRoQS4kcGF0aEI7CisJfQorCisJCisJLyoqCisJICogRm9ybWF0IHRoZSBmaWxlIHNpemUsIGxpbWl0cyB0byBNYi4KKwkgKiBAcGFyYW0gaW50ICRzaXplIHRoZSByYXcgZmlsZXNpemUKKwkgKiBAcmV0dXJuIHN0cmluZyBmb3JtYXRlZCBmaWxlIHNpemUuCisJICovCisJZnVuY3Rpb24gZm9ybWF0U2l6ZSgkc2l6ZSkgCisJeworCQlpZigkc2l6ZSA8IDEwMjQpIAorCQkJcmV0dXJuICRzaXplLicgYnl0ZXMnOwkKKwkJZWxzZSBpZigkc2l6ZSA+PSAxMDI0ICYmICRzaXplIDwgMTAyNCoxMDI0KSAKKwkJCXJldHVybiBzcHJpbnRmKCclMDEuMmYnLCRzaXplLzEwMjQuMCkuJyBLQic7CisJCWVsc2UKKwkJCXJldHVybiBzcHJpbnRmKCclMDEuMmYnLCRzaXplLygxMDI0LjAqMTAyNCkpLicgTUInOworCX0KKworCS8qKgorCSAqIFJldHVybnMgc2l6ZSBvZiBhIGRpcmVjdG9yeSwgd2l0aCBhbGwgZmlsZSAmIHN1YmRpcmVjdG9yeQorCSAqIHNpemVzIGFkZGVkIHVwCisJICogQHBhcmFtIHN0cmluZyBkaXIgcGF0aAorCSAqIEByZXR1cm4gaW50CisJICovCisJZnVuY3Rpb24gZGlyU2l6ZSgkZGlyTmFtZSA9ICcuJykKKwl7CisJCSRkaXIgID0gZGlyKCRkaXJOYW1lKTsKKwkJJHNpemUgPSAwOworCisJCXdoaWxlICgkZmlsZSA9ICRkaXItPnJlYWQoKSkgeworCQkJaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKQorCQkJeworCQkJCWlmIChpc19kaXIoIiRkaXJOYW1lJGZpbGUiKSkKKwkJCQl7CisJCQkJCSRzaXplICs9IEZpbGVzOjpkaXJTaXplKCRkaXJOYW1lIC4gJy8nIC4gJGZpbGUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkkc2l6ZSArPSBmaWxlc2l6ZSgkZGlyTmFtZSAuICcvJyAuICRmaWxlKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJJGRpci0+Y2xvc2UoKTsKKwkJcmV0dXJuICRzaXplOworCX0KKwkKKwkvKioKKwkgKiBSZW5hbWVzIGZpbGUsIHByZXNlcnZpbmcgaXRzIGRpcmVjdG9yeSBhbmQgZXh0ZW5zaW9uCisJICogQHBhcmFtIHN0cmluZyAkb2xkUGF0aCBwYXRoIHRvIHRoZSBvbGQgZXhpc3RpbmcgZmlsZQorCSAqIEBwYXJhbSBzdHJpbmcgbmV3IGZpbGVuYW1lIChqdXN0IHRoZSBuYW1lLCB3aXRob3V0IHBhdGggb3IgZXh0ZW5zaW9uKQorCSAqIEBhdXRob3IgS3J6eXN6dG9mIEtvdG93aWN6IDxrb3RvQHdlYndvcmtlcnMucGw+CisJICovCisJZnVuY3Rpb24gcmVuYW1lRmlsZSgkb2xkUGF0aCwgJG5ld05hbWUpIHsKKworCQlpZighKGZpbGVfZXhpc3RzKCRvbGRQYXRoKSAmJiBpc19maWxlKCRvbGRQYXRoKSkpCisJCQlyZXR1cm4gRklMRV9FUlJPUl9OT19TT1VSQ0U7CisKKwkJJG9sZEZpbGVQYXJ0cyA9IHBhdGhpbmZvKCRvbGRQYXRoKTsKKworCQkkbmV3UGF0aCA9ICRvbGRGaWxlUGFydHNbJ2Rpcm5hbWUnXSAuICcvJworCQkJCSAgIC4gJG5ld05hbWUKKwkJCQkgICAuICghZW1wdHkoJG9sZEZpbGVQYXJ0c1snZXh0ZW5zaW9uJ10pID8gJy4nIC4gJG9sZEZpbGVQYXJ0c1snZXh0ZW5zaW9uJ10gOiAnJyk7CisKKwkJaWYgKGZpbGVfZXhpc3RzKCRuZXdQYXRoKSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlpZiAoIXJlbmFtZSgkb2xkUGF0aCwgJG5ld1BhdGgpKQorCQkJcmV0dXJuIEZJTEVfRVJST1JfQ09QWV9GQUlMRUQ7CisKKwl9CisJCisJZnVuY3Rpb24gcmVuYW1lICgkb2xkUGF0aCwkbmV3UGF0aCkKKwl7CisJCWlmKCEoaXNfZGlyKCRvbGRQYXRoKSB8fCBpc19maWxlKCRvbGRQYXRoKSkpCisJCQlyZXR1cm4gRklMRV9FUlJPUl9OT19TT1VSQ0U7CisJCQorCQlpZiAoZmlsZV9leGlzdHMoJG5ld1BhdGgpKQorCQkJcmV0dXJuIEZJTEVfRVJST1JfRFNUX0RJUl9FWElTVDsKKworCQkkcmV0ID0gcmVuYW1lKCRvbGRQYXRoLCAkbmV3UGF0aCk7CisJCWlmICghJHJldCkKKwkJCXJldHVybiBGSUxFX0VSUk9SX0NPUFlfRkFJTEVEOworCQllbHNlIHJldHVybiBGSUxFX0NPUFlfT0s7CisJfQorCQorCS8qKgorCSAqIGNvcHkgYSBkaXJlY3RvcnkgYW5kIGFsbCBzdWJkaXJlY3RvcmllcyBhbmQgZmlsZXMgKHJlY3Vyc2l2ZSkKKwkgKiBAYXV0aG9yIFNCb2lzdmVydCBhdCBEb24ndFNwYW1NZSBkb3QgQnJ5eGFsIGRvdCBjYSAoYWRhcHRlZCBmcm9tIHBocC5uZXQpCisJICogQGF1dGhvciBSYWltdW5kIE1leWVyCisJICogQHBhcmFtIHN0cmluZyBiYXNlIHBhdGgKKwkgKiBAcGFyYW0gc3RyaW5nIHNvdXJjZSBkaXJlY3RvcnkKKwkgKiBAcGFyYW0gc3RyaW5nIGRlc3RpbmF0aW9uIGRpcmVjdG9yeQorCSAqIEBwYXJhbSBib29sICAgb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGVzCisJICogIAorCSAqIEByZXR1cm4gbWl4ZWQgYm9vbCB0cnVlIG9uIHBhc3MsIG51bWJlciBvbiBmYWlsCisJICovCisgIAlmdW5jdGlvbiBjb3B5RGlyKCRiYXNlUGF0aCwgJHNvdXJjZSwgJGRlc3QsICRvdmVyd3JpdGUgPSBmYWxzZSkKKwl7CisJCWlmKCFpc19kaXIoJGJhc2VQYXRoIC4gJGRlc3QpKQorCQl7CisJCQlpZiAoIUBta2RpcigkYmFzZVBhdGggLiAkZGVzdCkpIHJldHVybiBGSUxFX0VSUk9SX0RTVF9ESVJfRkFJTEVEOwkKKwkJfQorCQlpZigkaGFuZGxlID0gb3BlbmRpcigkYmFzZVBhdGggLiAkc291cmNlKSkKKwkJeyAgICAgICAgLy8gaWYgdGhlIGZvbGRlciBleHBsb3JhdGlvbiBpcyBzdWNzZXNzZnVsLCBjb250aW51ZQorCQkJd2hpbGUoICgkZmlsZSA9IHJlYWRkaXIoJGhhbmRsZSkpICE9PSBmYWxzZSkKKwkJCXsgLy8gYXMgbG9uZyBhcyBzdG9yaW5nIHRoZSBuZXh0IGZpbGUgdG8gJGZpbGUgaXMgc3VjY2Vzc2Z1bCwgY29udGludWUKKwkJCQlpZigkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJykKKwkJCQl7CisJCQkJCSRwYXRoID0gJHNvdXJjZSAuICcvJyAuICRmaWxlOworCQkJCQlpZihpc19maWxlKCRiYXNlUGF0aCAuICRwYXRoKSkKKwkJCQkJeworCQkJCQkJLyppZighaXNfZmlsZSgkYmFzZVBhdGggLiAkZGVzdCAuICcvJyAuICRmaWxlKSB8fCAkb3ZlcndyaXRlKQorCQkJCQkJeworCQkJCQkJCWlmKCFAY29weSgkYmFzZVBhdGggLiAkcGF0aCwgJGJhc2VQYXRoIC4gJGRlc3QgLiAnLycgLiAkZmlsZSkpCisJCQkJCQkJeworCQkJCQkJCSAgcmV0dXJuIEZJTEVfRVJST1JfQ09QWV9GQUlMRUQ7CisJCQkJCQkJfQorCQkJCQkJfSovCisJCQkJCQlGaWxlczo6Y29weUZpbGUoJGJhc2VQYXRoIC4gJHBhdGgsICRiYXNlUGF0aCAuICRkZXN0IC4gJy8nLCAkZmlsZSwgdHJ1ZSk7CisJCQkJCX0gCisJCQkJCWVsc2VpZihpc19kaXIoJGJhc2VQYXRoIC4gJHBhdGgpKQorCQkJCQl7CisJCQkJCQlpZighaXNfZGlyKCRiYXNlUGF0aCAuICRkZXN0IC4gJy8nIC4gJGZpbGUpKQorCQkJCQkJeworCQkJCQkJCW1rZGlyKCRiYXNlUGF0aCAuICRkZXN0IC4gJy8nIC4gJGZpbGUpOyAvLyBtYWtlIHN1YmRpcmVjdG9yeSBiZWZvcmUgc3ViZGlyZWN0b3J5IGlzIGNvcGllZAorCQkJCQkJCUZpbGVzOjpjb3B5RGlyKCRiYXNlUGF0aCwgJHBhdGgsICRkZXN0IC4gJy8nIC4gJGZpbGUsICRvdmVyd3JpdGUpOyAvL3JlY3Vyc2UhCisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQljbG9zZWRpcigkaGFuZGxlKTsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9CisKKz8+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9DbGFzc2VzL0ZsaWNrci5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9DbGFzc2VzL0ZsaWNrci5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5NTUzNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL0NsYXNzZXMvRmxpY2tyLnBocApAQCAtMCwwICsxLDE4OCBAQAorPD9waHAgCisvKioKKyAqIFNpbXBsZSBmdW5jdGlvbnMgdG8gYWNjZXNzIHRoZSBmbGlja3IgQVBJICh5ZXMgSSBrbm93IHRoaXMgaXMgdGhlICJDbGFzc2VzIiBkaXJlY3RvcnkgYW5kIHRoaXMgaXNuJ3QgYSBjbGFzcykuCisgKiBAYXV0aG9yICRBdXRob3I6IGdvZ28gJAorICogQHZlcnNpb24gJElkOiBpbWFnZXMucGhwIDg3NyAyMDA3LTA4LTEyIDE1OjUwOjAzWiBnb2dvICQKKyAqIEBwYWNrYWdlIEltYWdlTWFuYWdlcgorICovCisgCityZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykgLiAnL0pTT05fQ29tcGF0LnBocCcpOworICAKK2Z1bmN0aW9uIGZsaWNrcl9yZXF1ZXN0KCRtZXRob2QsICRwYXJhbXMgPSBhcnJheSgpKQoreworICBnbG9iYWwgJElNQ29uZmlnOworICAkZmxpY2tyID0gImh0dHA6Ly9hcGkuZmxpY2tyLmNvbS9zZXJ2aWNlcy9yZXN0Lz9tZXRob2Q9eyRtZXRob2R9JmZvcm1hdD1qc29uJm5vanNvbmNhbGxiYWNrPTEmYXBpX2tleT0iIC4gJElNQ29uZmlnWydGbGlja3InXVsnS2V5J107CisgIGZvcmVhY2goJHBhcmFtcyBhcyAkayA9PiAkdikKKyAgeworICAgICRmbGlja3IgLj0gIiZ7JGt9PSIucmF3dXJsZW5jb2RlKCR2KTsKKyAgfQorICAKKyAgJGZlZWQgPSBmaWxlX2dldF9jb250ZW50cygkZmxpY2tyKTsKKyAgaWYoJGZlZWQpCisgIHsKKyAgICAkZmVlZCA9IGpzb25fZGVjb2RlKCRmZWVkLCB0cnVlKTsKKyAgICBpZighJGZlZWQgfHwgIWlzc2V0KCRmZWVkWydzdGF0J10pIHx8ICgkZmVlZFsnc3RhdCddICE9ICdvaycpKQorICAgIHsKKyAgICAgIHByaW50X3IoJHBhcmFtcyk7CisgICAgICB0cmlnZ2VyX2Vycm9yKCRmZWVkWydtZXNzYWdlJ10sIEVfVVNFUl9FUlJPUik7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICB9ICAgIAorICBlbHNlCisgIHsKKyAgICB0cmlnZ2VyX2Vycm9yKCdOdWxsIHJlc3BvbnNlIGZyb20gRmxpY2tyJywgRV9VU0VSX0VSUk9SKTsKKyAgfQorICAKKyAgcmV0dXJuICRmZWVkOyAKK30KKworZnVuY3Rpb24gZmxpY2tyX2dldF9saWNlbnNlcygpCit7CisgIHN0YXRpYyAkbGljczsKKyAgCisgIGlmKCEkbGljcykgCisgIHsKKyAgICBpZigwICYmIGlzc2V0KCRfU0VTU0lPTlsnZmxpY2tyX2xpY2Vuc2VzJ10pKQorICAgIHsKKyAgICAgICRsaWNzID0gJF9TRVNTSU9OWydmbGlja3JfbGljZW5zZXMnXTsKKyAgICAgIHJldHVybiAkbGljczsKKyAgICB9CisgICAgCisgICAgJGxpY3MgPSBhcnJheSgpOworICAgICR4ID0gZmxpY2tyX3JlcXVlc3QoJ2ZsaWNrci5waG90b3MubGljZW5zZXMuZ2V0SW5mbycpOworICAgICR4ID0gJHhbJ2xpY2Vuc2VzJ11bJ2xpY2Vuc2UnXTsKKyAgICBmb3JlYWNoKCR4IGFzICRsKQorICAgIHsKKyAgICAgIC8vIEFkZCBvdXQgb3duIGRlc2NyaXB0aXZlICJ1c2FnZSIgdGV4dAorICAgICAgc3dpdGNoKCRsWyd1cmwnXSkKKyAgICAgIHsgICAgICAgIAorICAgICAgICBjYXNlICdodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8yLjAvJzoKKyAgICAgICAgY2FzZSAnaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMi4wLyc6CisgICAgICAgICAgJGxbJ3VzYWdlJ10gPSAnQXR0cmlidXRpb24gUmVxdWlyZWQnOworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIAorICAgICAgICBjYXNlICdodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uZC8yLjAvJzoKKyAgICAgICAgICAkbFsndXNhZ2UnXSA9ICdBdHRyaWJ1dGlvbiBSZXF1aXJlZCwgTm8gTW9kaWZpY2F0aW9ucyc7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgCisgICAgICAgIGNhc2UgJ2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLW5kLzIuMC8nOgorICAgICAgICAgICRsWyd1c2FnZSddID0gJ05vbiBDb21tZXJjaWFsIE9OTFksIEF0dHJpYnV0aW9uIFJlcXVpcmVkLCBObyBNb2RpZmljYXRpb25zJzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgICAKKyAgICAgICAgY2FzZSAnaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMvMi4wLyc6ICAgICAgICAgIAorICAgICAgICBjYXNlICdodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uYy1zYS8yLjAvJzoKKyAgICAgICAgICAkbFsndXNhZ2UnXSA9ICdOb24gQ29tbWVyY2lhbCBPTkxZLCBBdHRyaWJ1dGlvbiBSZXF1aXJlZCc7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6IAorICAgICAgICAgICRsWyd1c2FnZSddID0gJ1VzZSBPTkxZIFBlcm1pdHRlZCBXaXRoIFdyaXR0ZW4gUGVybWlzc2lvbic7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICAKKyAgICAgIC8vIEFuZCBvdXIgb3duIGlkZW50aWZpZXIKKyAgICAgIHN3aXRjaCgkbFsndXJsJ10pCisgICAgICB7ICAgICAgICAKKyAgICAgICAgY2FzZSAnaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMi4wLyc6CisgICAgICAgICAgJGxbJ3gtaWQnXSA9ICdjYzInOworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIAorICAgICAgICBjYXNlICdodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvJzoKKyAgICAgICAgICAkbFsneC1pZCddID0gJ2Njc2EyJzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGNhc2UgJ2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5kLzIuMC8nOgorICAgICAgICAgICRsWyd4LWlkJ10gPSAnY2NuZDInOworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIAorICAgICAgICBjYXNlICdodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uYy1uZC8yLjAvJzoKKyAgICAgICAgICAkbFsneC1pZCddID0gJ2NjbmNuZDInOworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIAorICAgICAgICBjYXNlICdodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uYy8yLjAvJzogICAgICAgICAgCisgICAgICAgICAgJGxbJ3gtaWQnXSA9ICdjY25jMic7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgCisgICAgICAgIGNhc2UgJ2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLXNhLzIuMC8nOgorICAgICAgICAgICRsWyd4LWlkJ10gPSAnY2NuY3NhMic7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6IAorICAgICAgICAgICRsWyd4LWlkJ10gPSAnJzsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIAorICAgICAgJGxpY3NbJGxbJ2lkJ11dID0gJGw7ICAgICAgCisgICAgfQorICAgIAorICAgICRfU0VTU0lPTlsnZmxpY2tyX2xpY2Vuc2VzJ10gPSAkbGljczsKKyAgfQorICAKKyAgcmV0dXJuICRsaWNzOworfQorCitmdW5jdGlvbiBmbGlja3JfZ2V0X2xpY2Vuc2VfaWRfYnlfdXNhZ2UoKQoreworICAkbGljcyA9IGZsaWNrcl9nZXRfbGljZW5zZXMoKTsKKyAgJHVzZSA9IGFycmF5KCk7CisgIGZvcmVhY2goJGxpY3MgYXMgJGxpYykKKyAgeworICAgIGlmKCFpc3NldCgkdXNlWyRsaWNbJ3VzYWdlJ11dKSkKKyAgICB7CisgICAgICAkdXNlWyRsaWNbJ3VzYWdlJ11dID0gJGxpY1snaWQnXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICR1c2VbJGxpY1sndXNhZ2UnXV0gLj0gIiwiIC4gJGxpY1snaWQnXTsKKyAgICB9CisgIH0KKyAgCisgIHJldHVybiAkdXNlOworfQorCitmdW5jdGlvbiBmbGlja3JfaXNfZGVmYXVsdF9saWNlbnNlKCRsaWNJRHMpCit7CisgIGdsb2JhbCAkSU1Db25maWc7CisgICRsaWNzID0gZmxpY2tyX2dldF9saWNlbnNlcygpOworICBmb3JlYWNoKCRsaWNzIGFzICRsaWMpCisgIHsKKyAgICBpZigkbGljWyd1cmwnXSA9PSAkSU1Db25maWdbJ0ZsaWNrciddWydEZWZhdWx0IExpY2Vuc2UnXSkKKyAgICB7CisgICAgICBpZihpbl9hcnJheSgkbGljWydpZCddLCBleHBsb2RlKCcsJywgJGxpY0lEcykpKSByZXR1cm4gVFJVRTsgCisgICAgfQorICB9CisgIAorICByZXR1cm4gRkFMU0U7Cit9CisKK2Z1bmN0aW9uIGZsaWNrcl9nZXRfZGVmYXVsdF91c2FnZV9pZCgpCit7CisgICR1c2FnZXMgPSBmbGlja3JfZ2V0X2xpY2Vuc2VfaWRfYnlfdXNhZ2UoKTsKKyAgZm9yZWFjaCgkdXNhZ2VzIGFzICR1c2FnZSA9PiAkaWQpCisgIHsKKyAgICBpZihmbGlja3JfaXNfZGVmYXVsdF9saWNlbnNlKCRpZCkpIHJldHVybiAkaWQ7CisgIH0KKyAgCisgIHJldHVybiAwOworfQorCitmdW5jdGlvbiBmbGlja3JfZ2V0X3VzZXJfaWQoJE5hbWVPckVtYWlsKQoreworICBpZihwcmVnX21hdGNoKCcvQC8nLCAkTmFtZU9yRW1haWwpKQorICB7CisgICAgJGQgPSBmbGlja3JfcmVxdWVzdCgnZmxpY2tyLnBlb3BsZS5maW5kQnlFbWFpbCcsIGFycmF5KCdmaW5kX2VtYWlsJyA9PiAkTmFtZU9yRW1haWwpKTsKKyAgICBpZigkZCkKKyAgICB7CisgICAgIHJldHVybiAkZFsndXNlciddWydpZCddOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICAkZCA9IGZsaWNrcl9yZXF1ZXN0KCdmbGlja3IucGVvcGxlLmZpbmRCeVVzZXJuYW1lJywgYXJyYXkoJ3VzZXJuYW1lJyA9PiAkTmFtZU9yRW1haWwpKTsKKyAgICBpZigkZCkKKyAgICB7CisgICAgICByZXR1cm4gJGRbJ3VzZXInXVsnaWQnXTsKKyAgICB9CisgIH0gIAorfQorCis/PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL0NsYXNzZXMvR0QucGhwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvQ2xhc3Nlcy9HRC5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIyNzMzMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL0NsYXNzZXMvR0QucGhwCkBAIC0wLDAgKzEsNTk3IEBACis8P3BocA0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoqIFRpdGxlLi4uLi4uLi4uOiAgR0QgRHJpdmVyDQorKiogVmVyc2lvbi4uLi4uLi46ICAxLjANCisqKiBBdXRob3IuLi4uLi4uLjogIFhpYW5nIFdlaSBaSFVPIDx3ZWlAemh1by5vcmc+DQorKiogRmlsZW5hbWUuLi4uLi46ICBHRC5waHANCisqKiBMYXN0IGNoYW5nZWQuLjogIDMwIEF1ZyAyMDAzIA0KKyoqIE5vdGVzLi4uLi4uLi4uOiAgT3JnaW5hbCBpcyBmcm9tIFBFQVINCisqKi8NCisvLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisvLyB8IFBIUCBWZXJzaW9uIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisvLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisvLyB8IENvcHlyaWdodCAoYykgMTk5Ny0yMDAyIFRoZSBQSFAgR3JvdXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisvLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisvLyB8IFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB2ZXJzaW9uIDIuMDIgb2YgdGhlIFBIUCBsaWNlbnNlLCAgICAgIHwNCisvLyB8IHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLCBhbmQgaXMgICAgICAgIHwNCisvLyB8IGF2YWlsYWJsZSBhdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisvLyB8IGh0dHA6Ly93d3cucGhwLm5ldC9saWNlbnNlLzJfMDIudHh0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisvLyB8IElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBQSFAgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0byAgIHwNCisvLyB8IG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYSBub3RlIHRvICAgICAgICAgIHwNCisvLyB8IGxpY2Vuc2VAcGhwLm5ldCBzbyB3ZSBjYW4gbWFpbCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LiAgICAgICAgICAgICAgIHwNCisvLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisvLyB8IEF1dGhvcnM6IFBldGVyIEJvd3llciA8cGV0ZXJAbWFwbGVkZXNpZ24uY28udWs+ICAgICAgICAgICAgICAgICAgICAgIHwNCisvLyB8ICAgICAgICAgIEFsYW4gS25vd2xlcyA8YWxhbkBha2JraG9tZS5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisvLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisvLw0KKy8vICAgIFVzYWdlIDoNCisvLyAgICAkaW1nICAgID0gbmV3IEltYWdlX1RyYW5zZm9ybV9HRCgpOw0KKy8vICAgICRhbmdsZSAgPSAtNzg7DQorLy8gICAgJGltZy0+bG9hZCgnbWFnaWNrLnBuZycpOw0KKy8vDQorLy8gICAgaWYoJGltZy0+cm90YXRlKCRhbmdsZSxhcnJheSgnYXV0b3Jlc2l6ZSc9PnRydWUsJ2NvbG9yX21hc2snPT5hcnJheSgyNTUsMCwwKSkpKXsNCisvLyAgICAgICAgJGltZy0+YWRkVGV4dChhcnJheSgndGV4dCc9PiJSb3RhdGlvbiAkYW5nbGUiLCd4Jz0+MCwneSc9PjEwMCwnZm9udCc9PicvdXNyL3NoYXJlL2ZvbnRzL2RlZmF1bHQvVHJ1ZVR5cGUvY29nYl9fX18udHRmJykpOw0KKy8vICAgICAgICAkaW1nLT5kaXNwbGF5KCk7DQorLy8gICAgfSBlbHNlIHsNCisvLyAgICAgICAgZWNobyAiRXJyb3IiOw0KKy8vICAgIH0NCisvLw0KKy8vDQorLy8gJElkOkdELnBocCA5MzggMjAwOC0wMS0yMiAyMDoxMzo0N1ogcmF5ICQNCisvLw0KKy8vIEltYWdlIFRyYW5zZm9ybWF0aW9uIGludGVyZmFjZSB1c2luZyB0aGUgR0QgbGlicmFyeQ0KKy8vDQorDQorcmVxdWlyZV9vbmNlICIuLi9JbWFnZU1hbmFnZXIvQ2xhc3Nlcy9UcmFuc2Zvcm0ucGhwIjsNCisNCitDbGFzcyBJbWFnZV9UcmFuc2Zvcm1fRHJpdmVyX0dEIGV4dGVuZHMgSW1hZ2VfVHJhbnNmb3JtDQorew0KKyAgICAvKioNCisgICAgICogSG9sZHMgdGhlIGltYWdlIGZpbGUgZm9yIG1hbmlwdWxhdGlvbg0KKyAgICAgKi8NCisgICAgdmFyICRpbWFnZUhhbmRsZSA9ICcnOw0KKw0KKyAgICAvKioNCisgICAgICogSG9sZHMgdGhlIG9yaWdpbmFsIGltYWdlIGZpbGUNCisgICAgICovDQorICAgIHZhciAkb2xkX2ltYWdlID0gJyc7DQorDQorICAgIC8qKg0KKyAgICAgKiBDaGVjayBzZXR0aW5ncw0KKyAgICAgKg0KKyAgICAgKiBAcmV0dXJuIG1peGVkIHRydWUgb3IgIG9yIGEgUEVBUiBlcnJvciBvYmplY3Qgb24gZXJyb3INCisgICAgICoNCisgICAgICogQHNlZSBQRUFSOjppc0Vycm9yKCkNCisgICAgICovDQorICAgIGZ1bmN0aW9uIEltYWdlX1RyYW5zZm9ybV9HRCgpDQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfSAvLyBFbmQgZnVuY3Rpb24gSW1hZ2UNCisNCisgICAgLyoqDQorICAgICAqIExvYWQgaW1hZ2UNCisgICAgICoNCisgICAgICogQHBhcmFtIHN0cmluZyBmaWxlbmFtZQ0KKyAgICAgKg0KKyAgICAgKiBAcmV0dXJuIG1peGVkIG5vbmUgb3IgYSBQRUFSIGVycm9yIG9iamVjdCBvbiBlcnJvcg0KKyAgICAgKiBAc2VlIFBFQVI6OmlzRXJyb3IoKQ0KKyAgICAgKi8NCisgICAgZnVuY3Rpb24gbG9hZCgkaW1hZ2UpDQorICAgIHsNCisgICAgICAgICR0aGlzLT51aWQgPSBtZDUoJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10pOw0KKyAgICAgICAgJHRoaXMtPmltYWdlID0gJGltYWdlOw0KKyAgICAgICAgJHRoaXMtPl9nZXRfaW1hZ2VfZGV0YWlscygkaW1hZ2UpOw0KKyAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICdJbWFnZUNyZWF0ZUZyb20nIC4gJHRoaXMtPnR5cGU7DQorCQkNCisJCWlmKGZ1bmN0aW9uX2V4aXN0cygkZnVuY3Rpb25OYW1lKSkNCisJCXsNCisJCQkkdGhpcy0+aW1hZ2VIYW5kbGUgPSAkZnVuY3Rpb25OYW1lKCR0aGlzLT5pbWFnZSk7DQorCQkJaWYgKCAkdGhpcy0+dHlwZSA9PSAncG5nJykNCisJCQl7DQorCQkJCWltYWdlQWxwaGFCbGVuZGluZygkdGhpcy0+aW1hZ2VIYW5kbGUsIGZhbHNlKTsNCisJCQkJaW1hZ2VTYXZlQWxwaGEoJHRoaXMtPmltYWdlSGFuZGxlLCB0cnVlKTsNCisJCQl9DQorCQl9DQorICAgIH0gLy8gRW5kIGxvYWQNCisNCisgICAgLyoqDQorICAgICAqIGFkZFRleHQNCisgICAgICoNCisgICAgICogQHBhcmFtICAgYXJyYXkgICBvcHRpb25zICAgICBBcnJheSBjb250YWlucyBvcHRpb25zDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0JyAgVGhlIHN0cmluZyB0byBkcmF3DQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd4JyAgICAgSG9yaXpvbnRhbCBwb3NpdGlvbg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneScgICAgIFZlcnRpY2FsIFBvc2l0aW9uDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb2xvcicgRm9udCBjb2xvcg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9udCcgIEZvbnQgdG8gYmUgdXNlZA0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZScgIFNpemUgb2YgdGhlIGZvbnRzIGluIHBpeGVsDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXNpemVfZmlyc3QnICBUZWxsIGlmIHRoZSBpbWFnZSBoYXMgdG8gYmUgcmVzaXplZA0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlIGRyYXdpbmcgdGhlIHRleHQNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorICAgICAqDQorICAgICAqIEByZXR1cm4gbm9uZQ0KKyAgICAgKiBAc2VlIFBFQVI6OmlzRXJyb3IoKQ0KKyAgICAgKi8NCisgICAgZnVuY3Rpb24gYWRkVGV4dCgkcGFyYW1zKQ0KKyAgICB7DQorICAgICAgICAkZGVmYXVsdF9wYXJhbXMgPSBhcnJheSgNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0JyA9PiAnVGhpcyBpcyBUZXh0JywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd4JyA9PiAxMCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5JyA9PiAyMCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvcicgPT4gYXJyYXkoMjU1LDAsMCksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9udCcgPT4gJ0FyaWFsLnR0ZicsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZScgPT4gJzEyJywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmdsZScgPT4gMCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXNpemVfZmlyc3QnID0+IGZhbHNlIC8vIENhcnJ5IG91dCB0aGUgc2NhbGluZyBvZiB0aGUgaW1hZ2UgYmVmb3JlIGFubm90YXRpb24/ICBOb3QgdXNlZCBmb3IgR0QNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQorICAgICAgICAkcGFyYW1zID0gYXJyYXlfbWVyZ2UoJGRlZmF1bHRfcGFyYW1zLCAkcGFyYW1zKTsNCisgICAgICAgIGV4dHJhY3QoJHBhcmFtcyk7DQorDQorICAgICAgICBpZiggIWlzX2FycmF5KCRjb2xvcikgKXsNCisgICAgICAgICAgICBpZiAoJGNvbG9yWzBdPT0nIycpew0KKyAgICAgICAgICAgICAgICAkdGhpcy0+Y29sb3JoZXgyY29sb3JhcnJheSggJGNvbG9yICk7DQorICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAgaW5jbHVkZV9vbmNlKCdJbWFnZS9UcmFuc2Zvcm0vRHJpdmVyL0NvbG9yc0RlZnMucGhwJyk7DQorICAgICAgICAgICAgICAgICRjb2xvciA9IGlzc2V0KCRjb2xvcm5hbWVzWyRjb2xvcl0pPyRjb2xvcm5hbWVzWyRjb2xvcl06ZmFsc2U7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgJGMgPSBpbWFnZWNvbG9ycmVzb2x2ZSAoJHRoaXMtPmltYWdlSGFuZGxlLCAkY29sb3JbMF0sICRjb2xvclsxXSwgJGNvbG9yWzJdKTsNCisNCisgICAgICAgIGlmICgndHRmJyA9PSBzdWJzdHIoJGZvbnQsIC0zKSkgew0KKyAgICAgICAgICAgIEltYWdlVFRGVGV4dCgkdGhpcy0+aW1hZ2VIYW5kbGUsICRzaXplLCAkYW5nbGUsICR4LCAkeSwgJGMsICRmb250LCAkdGV4dCk7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIEltYWdlUFNUZXh0KCR0aGlzLT5pbWFnZUhhbmRsZSwgJHNpemUsICRhbmdsZSwgJHgsICR5LCAkYywgJGZvbnQsICR0ZXh0KTsNCisgICAgICAgIH0NCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9IC8vIEVuZCBhZGRUZXh0DQorDQorDQorICAgIC8qKg0KKyAgICAgKiBSb3RhdGUgaW1hZ2UgYnkgdGhlIGdpdmVuIGFuZ2xlDQorICAgICAqIFVzZXMgYSBmYXN0IHJvdGF0aW9uIGFsZ29yeXRobSBmb3IgY3VzdG9tIGFuZ2xlcw0KKyAgICAgKiBvciBsaW5lcyBjb3B5IGZvciBtdWx0aXBsZSBvZiA5MCBkZWdyZWVzDQorICAgICAqDQorICAgICAqIEBwYXJhbSBpbnQgICAgICAgJGFuZ2xlICAgICAgUm90YXRpb24gYW5nbGUNCisgICAgICogQHBhcmFtIGFycmF5ICAgICAkb3B0aW9ucyAgICBhcnJheSggICdhdXRvcmVzaXplJz0+dHJ1ZXxmYWxzZSwNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvcl9tYXNrJz0+YXJyYXkocixnLGIpLCBuYW1lZCBjb2xvciBvciAjcnJnZ2JiDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorICAgICAqIEBhdXRob3IgUGllcnJlLUFsYWluIEpveWUNCisgICAgICogQHJldHVybiBtaXhlZCBub25lIG9yIGEgUEVBUiBlcnJvciBvYmplY3Qgb24gZXJyb3INCisgICAgICogQHNlZSBQRUFSOjppc0Vycm9yKCkNCisgICAgICovDQorICAgIGZ1bmN0aW9uIHJvdGF0ZSgkYW5nbGUsICRvcHRpb25zPW51bGwpDQorICAgIHsNCisgICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnaW1hZ2Vyb3RhdGUnKSkgew0KKyAgICAgICAgICAgICR3aGl0ZSA9IGltYWdlY29sb3JhbGxvY2F0ZWFscGhhICgkdGhpcy0+aW1hZ2VIYW5kbGUsIDI1NSwgMjU1LCAyNTUsIDEyNyk7DQorCQkJJHRoaXMtPmltYWdlSGFuZGxlID0gaW1hZ2Vyb3RhdGUoJHRoaXMtPmltYWdlSGFuZGxlLCAkYW5nbGUsICR3aGl0ZSk7DQorICAgICAgICAgICAgcmV0dXJuIHRydWU7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoICRvcHRpb25zPT1udWxsICl7DQorICAgICAgICAgICAgJGF1dG9yZXNpemUgPSB0cnVlOw0KKyAgICAgICAgICAgICRjb2xvcl9tYXNrID0gYXJyYXkoMTA1LDI1NSwyNTUpOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICBleHRyYWN0KCAkb3B0aW9ucyApOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgd2hpbGUgKCRhbmdsZSA8PSAtNDUpIHsNCisgICAgICAgICAgICAkYW5nbGUgICs9IDM2MDsNCisgICAgICAgIH0NCisgICAgICAgIHdoaWxlICgkYW5nbGUgPiAyNzApIHsNCisgICAgICAgICAgICAkYW5nbGUgIC09IDM2MDsNCisgICAgICAgIH0NCisNCisgICAgICAgICR0ICAgICAgPSBkZWcycmFkKCRhbmdsZSk7DQorDQorICAgICAgICBpZiggIWlzX2FycmF5KCRjb2xvcl9tYXNrKSApew0KKyAgICAgICAgICAgIGlmICgkY29sb3JbMF09PScjJyl7DQorICAgICAgICAgICAgICAgICR0aGlzLT5jb2xvcmhleDJjb2xvcmFycmF5KCAkY29sb3JfbWFzayApOw0KKyAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgIGluY2x1ZGVfb25jZSgnSW1hZ2UvVHJhbnNmb3JtL0RyaXZlci9Db2xvckRlZnMucGhwJyk7DQorICAgICAgICAgICAgICAgICRjb2xvciA9IGlzc2V0KCRjb2xvcm5hbWVzWyRjb2xvcl9tYXNrXSk/JGNvbG9ybmFtZXNbJGNvbG9yX21hc2tdOmZhbHNlOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIC8vIERvIG5vdCByb3VuZCBpdCwgdG9vIG11Y2ggbG9zdCBvZiBxdWFsaXR5DQorICAgICAgICAkY29zVCAgID0gY29zKCR0KTsNCisgICAgICAgICRzaW5UICAgPSBzaW4oJHQpOw0KKw0KKyAgICAgICAgJGltZyAgICA9JiAkdGhpcy0+aW1hZ2VIYW5kbGU7DQorDQorICAgICAgICAkd2lkdGggID0gJG1heF94ICA9ICR0aGlzLT5pbWdfeDsNCisgICAgICAgICRoZWlnaHQgPSAkbWF4X3kgID0gJHRoaXMtPmltZ195Ow0KKyAgICAgICAgJG1pbl95ICA9IDA7DQorICAgICAgICAkbWluX3ggID0gMDsNCisNCisgICAgICAgICR4MSAgICAgPSByb3VuZCgkbWF4X3gvMiwwKTsNCisgICAgICAgICR5MSAgICAgPSByb3VuZCgkbWF4X3kvMiwwKTsNCisNCisgICAgICAgIGlmICggJGF1dG9yZXNpemUgKXsNCisgICAgICAgICAgICAkdCAgICAgID0gYWJzKCR0KTsNCisgICAgICAgICAgICAkYSAgICAgID0gcm91bmQoJGFuZ2xlLDApOw0KKyAgICAgICAgICAgIHN3aXRjaCgoaW50KSgkYW5nbGUpKXsNCisgICAgICAgICAgICAgICAgY2FzZSAwOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICR3aWR0aDIgICAgID0gJHdpZHRoOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICRoZWlnaHQyICAgID0gJGhlaWdodDsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICBjYXNlIDkwOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICR3aWR0aDIgICAgID0gJGhlaWdodDsNCisgICAgICAgICAgICAgICAgICAgICAgICAkaGVpZ2h0MiAgICA9ICR3aWR0aDsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICBjYXNlIDE4MDoNCisgICAgICAgICAgICAgICAgICAgICAgICAkd2lkdGgyICAgICA9ICR3aWR0aDsNCisgICAgICAgICAgICAgICAgICAgICAgICAkaGVpZ2h0MiAgICA9ICRoZWlnaHQ7DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgY2FzZSAyNzA6DQorICAgICAgICAgICAgICAgICAgICAgICAgJHdpZHRoMiAgICAgPSAkaGVpZ2h0Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgICRoZWlnaHQyICAgID0gJHdpZHRoOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgICAgICAgICAkd2lkdGgyICAgICA9IChpbnQpKGFicyhzaW4oJHQpICogJGhlaWdodCArIGNvcygkdCkgKiAkd2lkdGgpKTsNCisgICAgICAgICAgICAgICAgICAgICRoZWlnaHQyICAgID0gKGludCkoYWJzKGNvcygkdCkgKiAkaGVpZ2h0K3NpbigkdCkgKiAkd2lkdGgpKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgJHdpZHRoMiAgICAgLT0gJHdpZHRoMiUyOw0KKyAgICAgICAgICAgICRoZWlnaHQyICAgIC09ICRoZWlnaHQyJTI7DQorDQorICAgICAgICAgICAgJGRfd2lkdGggICAgPSBhYnMoJHdpZHRoIC0gJHdpZHRoMik7DQorICAgICAgICAgICAgJGRfaGVpZ2h0ICAgPSBhYnMoJGhlaWdodCAtICRoZWlnaHQyKTsNCisgICAgICAgICAgICAkeF9vZmZzZXQgICA9ICRkX3dpZHRoLzI7DQorICAgICAgICAgICAgJHlfb2Zmc2V0ICAgPSAkZF9oZWlnaHQvMjsNCisgICAgICAgICAgICAkbWluX3gyICAgICA9IC1hYnMoJHhfb2Zmc2V0KTsNCisgICAgICAgICAgICAkbWluX3kyICAgICA9IC1hYnMoJHlfb2Zmc2V0KTsNCisgICAgICAgICAgICAkbWF4X3gyICAgICA9ICR3aWR0aDI7DQorICAgICAgICAgICAgJG1heF95MiAgICAgPSAkaGVpZ2h0MjsNCisgICAgICAgIH0NCisNCisgICAgICAgICRpbWcyICAgPSBAJHRoaXMtPm5ld0ltZ1ByZXNlcnZlQWxwaGEoIGltYWdlY3JlYXRlVHJ1ZUNvbG9yKCR3aWR0aDIsJGhlaWdodDIpICk7DQorDQorICAgICAgICBpZiAoICFpc19yZXNvdXJjZSgkaW1nMikgKXsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7LypQRUFSOjpyYWlzZUVycm9yKCdDYW5ub3QgY3JlYXRlIGJ1ZmZlciBmb3IgdGhlIHJvdGF0YWlvbi4nLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgUEVBUl9FUlJPUl9UUklHR0VSLCBFX1VTRVJfTk9USUNFKTsqLw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgJHRoaXMtPmltZ194ID0gJHdpZHRoMjsNCisgICAgICAgICR0aGlzLT5pbWdfeSA9ICRoZWlnaHQyOw0KKw0KKw0KKyAgICAgICAgaW1hZ2VwYWxldHRlY29weSgkaW1nMiwkaW1nKTsNCisNCisgICAgICAgJG1hc2sgPSBpbWFnZWNvbG9yYWxsb2NhdGVhbHBoYSAoJGltZzIsJGNvbG9yX21hc2tbMF0sJGNvbG9yX21hc2tbMV0sJGNvbG9yX21hc2tbMl0sMTI3KTsNCisgICAgICAgIC8vIHVzZSBzaW1wbGUgbGluZXMgY29weSBmb3IgYXhlcyBhbmdsZXMNCisgICAgICAgIHN3aXRjaCgoaW50KSgkYW5nbGUpKXsNCisgICAgICAgICAgICBjYXNlIDA6DQorICAgICAgICAgICAgICAgIGltYWdlZmlsbCAoJGltZzIsIDAsIDAsJG1hc2spOw0KKyAgICAgICAgICAgICAgICBmb3IgKCR5PTA7ICR5IDwgJG1heF95OyAkeSsrKSB7DQorICAgICAgICAgICAgICAgICAgICBmb3IgKCR4ID0gJG1pbl94OyAkeCA8ICRtYXhfeDsgJHgrKyl7DQorICAgICAgICAgICAgICAgICAgICAgICAgJGMgID0gQGltYWdlY29sb3JhdCAoICRpbWcsICR4LCAkeSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzZXRwaXhlbCgkaW1nMiwkeCskeF9vZmZzZXQsJHkrJHlfb2Zmc2V0LCRjKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICBjYXNlIDkwOg0KKyAgICAgICAgICAgICAgICBpbWFnZWZpbGwgKCRpbWcyLCAwLCAwLCRtYXNrKTsNCisgICAgICAgICAgICAgICAgZm9yICgkeCA9ICRtaW5feDsgJHggPCAkbWF4X3g7ICR4Kyspew0KKyAgICAgICAgICAgICAgICAgICAgZm9yICgkeT0kbWluX3k7ICR5IDwgJG1heF95OyAkeSsrKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgJGMgID0gaW1hZ2Vjb2xvcmF0ICggJGltZywgJHgsICR5KTsNCisgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXNldHBpeGVsKCRpbWcyLCRtYXhfeS0keS0xLCR4LCRjKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICBjYXNlIDE4MDoNCisgICAgICAgICAgICAgICAgaW1hZ2VmaWxsICgkaW1nMiwgMCwgMCwkbWFzayk7DQorICAgICAgICAgICAgICAgIGZvciAoJHk9MDsgJHkgPCAkbWF4X3k7ICR5KyspIHsNCisgICAgICAgICAgICAgICAgICAgIGZvciAoJHggPSAkbWluX3g7ICR4IDwgJG1heF94OyAkeCsrKXsNCisgICAgICAgICAgICAgICAgICAgICAgICAkYyAgPSBAaW1hZ2Vjb2xvcmF0ICggJGltZywgJHgsICR5KTsNCisgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXNldHBpeGVsKCRpbWcyLCAkbWF4X3gyLSR4LTEsICRtYXhfeTItJHktMSwgJGMpOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIGNhc2UgMjcwOg0KKyAgICAgICAgICAgICAgICBpbWFnZWZpbGwgKCRpbWcyLCAwLCAwLCRtYXNrKTsNCisgICAgICAgICAgICAgICAgZm9yICgkeT0wOyAkeSA8ICRtYXhfeTsgJHkrKykgew0KKyAgICAgICAgICAgICAgICAgICAgZm9yICgkeCA9ICRtYXhfeDsgJHggPj0gJG1pbl94OyAkeC0tKXsNCisgICAgICAgICAgICAgICAgICAgICAgICAkYyAgPSBAaW1hZ2Vjb2xvcmF0ICggJGltZywgJHgsICR5KTsNCisgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXNldHBpeGVsKCRpbWcyLCR5LCRtYXhfeC0keC0xLCRjKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAvLyBzaW1wbGUgcmV2ZXJzZSByb3RhdGlvbiBhbGdvDQorICAgICAgICAgICAgZGVmYXVsdDoNCisgICAgICAgICAgICAgICAgJGk9MDsNCisgICAgICAgICAgICAgICAgZm9yICgkeSA9ICRtaW5feTI7ICR5IDwgJG1heF95MjsgJHkrKyl7DQorDQorICAgICAgICAgICAgICAgICAgICAvLyBBbGdlYnJhIDopDQorICAgICAgICAgICAgICAgICAgICAkeDIgPSByb3VuZCgoKCRtaW5feDItJHgxKSAqICRjb3NUKSArICgoJHktJHkxKSAqICRzaW5UICsgJHgxKSwwKTsNCisgICAgICAgICAgICAgICAgICAgICR5MiA9IHJvdW5kKCgoJHktJHkxKSAqICRjb3NUIC0gKCRtaW5feDItJHgxKSAqICRzaW5UICsgJHkxKSwwKTsNCisNCisgICAgICAgICAgICAgICAgICAgIGZvciAoJHggPSAkbWluX3gyOyAkeCA8ICRtYXhfeDI7ICR4Kyspew0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFyZSBvdXQgb2Ygb3JpZ2luYWwgYm91bmNlcywgaWYgd2UgYXJlDQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIHRoZSBkZWZhdWx0IGNvbG9yIG1hc2sNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICR4Mj49MCAmJiAkeDI8JG1heF94ICYmICR5Mj49MCAmJiAkeTI8JG1heF95ICl7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjICA9IGltYWdlY29sb3JhdCAoICRpbWcsICR4MiwgJHkyKTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYyAgPSAkbWFzazsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzZXRwaXhlbCgkaW1nMiwkeCskeF9vZmZzZXQsJHkrJHlfb2Zmc2V0LCRjKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAvLyByb3VuZCB2ZXJib3RlbiENCisgICAgICAgICAgICAgICAgICAgICAgICAkeDIgICs9ICRjb3NUOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICR5MiAgLT0gJHNpblQ7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQorICAgICAgICAkdGhpcy0+b2xkX2ltYWdlICAgID0gJHRoaXMtPmltYWdlSGFuZGxlOw0KKyAgICAgICAgJHRoaXMtPmltYWdlSGFuZGxlICA9ICAkaW1nMjsNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9DQorDQorDQorICAgLyoqDQorICAgICogUmVzaXplIEFjdGlvbg0KKyAgICAqDQorICAgICogRm9yIEdEIDIuMDErIHRoZSBuZXcgY29weXJlc2FtcGxlZCBmdW5jdGlvbiBpcyB1c2VkDQorICAgICogSXQgdXNlcyBhIGJpY3ViaWMgaW50ZXJwb2xhdGlvbiBhbGdvcml0aG0gdG8gZ2V0IGZhcg0KKyAgICAqIGJldHRlciByZXN1bHQuDQorICAgICoNCisgICAgKiBAcGFyYW0gaW50ICAkbmV3X3ggbmV3IHdpZHRoDQorICAgICogQHBhcmFtIGludCAgJG5ld195IG5ldyBoZWlnaHQNCisgICAgKg0KKyAgICAqIEByZXR1cm4gdHJ1ZSBvbiBzdWNjZXNzIG9yIHBlYXIgZXJyb3INCisgICAgKiBAc2VlIFBFQVI6OmlzRXJyb3IoKQ0KKyAgICAqLw0KKyAgICBmdW5jdGlvbiBfcmVzaXplKCRuZXdfeCwgJG5ld195KSB7DQorICAgICAgICBpZiAoJHRoaXMtPnJlc2l6ZWQgPT09IHRydWUpIHsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8qUEVBUjo6cmFpc2VFcnJvcignWW91IGhhdmUgYWxyZWFkeSByZXNpemVkIHRoZSBpbWFnZSB3aXRob3V0IHNhdmluZyBpdC4gIFlvdXIgcHJldmlvdXMgcmVzaXppbmcgd2lsbCBiZSBvdmVyd3JpdHRlbicsIG51bGwsIFBFQVJfRVJST1JfVFJJR0dFUiwgRV9VU0VSX05PVElDRSk7Ki8NCisgICAgICAgIH0NCisgICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnSW1hZ2VDcmVhdGVUcnVlQ29sb3InKSl7DQorICAgICAgICAgICAkbmV3X2ltZyA9ICR0aGlzLT5uZXdJbWdQcmVzZXJ2ZUFscGhhKCBJbWFnZUNyZWF0ZVRydWVDb2xvcigkbmV3X3gsJG5ld195KSApOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAkbmV3X2ltZyA9SW1hZ2VDcmVhdGUoJG5ld194LCRuZXdfeSk7DQorICAgICAgICB9DQorDQorICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJ0ltYWdlQ29weVJlc2FtcGxlZCcpKXsNCisgICAgICAgICAgICBJbWFnZUNvcHlSZXNhbXBsZWQoJG5ld19pbWcsICR0aGlzLT5pbWFnZUhhbmRsZSwgMCwgMCwgMCwgMCwgJG5ld194LCAkbmV3X3ksICR0aGlzLT5pbWdfeCwgJHRoaXMtPmltZ195KTsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgSW1hZ2VDb3B5UmVzaXplZCgkbmV3X2ltZywgJHRoaXMtPmltYWdlSGFuZGxlLCAwLCAwLCAwLCAwLCAkbmV3X3gsICRuZXdfeSwgJHRoaXMtPmltZ194LCAkdGhpcy0+aW1nX3kpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgJHRoaXMtPm9sZF9pbWFnZSA9ICR0aGlzLT5pbWFnZUhhbmRsZTsNCisgICAgICAgICR0aGlzLT5pbWFnZUhhbmRsZSA9ICRuZXdfaW1nOw0KKyAgICAgICAgJHRoaXMtPnJlc2l6ZWQgPSB0cnVlOw0KKw0KKyAgICAgICAgJHRoaXMtPm5ld194ID0gJG5ld194Ow0KKyAgICAgICAgJHRoaXMtPm5ld195ID0gJG5ld195Ow0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisNCisgICAgLyoqDQorICAgICAqIENyb3AgdGhlIGltYWdlDQorICAgICAqDQorICAgICAqIEBwYXJhbSBpbnQgJGNyb3BfeCBsZWZ0IGNvbHVtbiBvZiB0aGUgaW1hZ2UNCisgICAgICogQHBhcmFtIGludCAkY3JvcF95IHRvcCByb3cgb2YgdGhlIGltYWdlDQorICAgICAqIEBwYXJhbSBpbnQgJGNyb3Bfd2lkdGggbmV3IGNyb3BwZWQgaW1hZ2Ugd2lkdGgNCisgICAgICogQHBhcmFtIGludCAkY3JvcF9oZWlnaHQgbmV3IGNyb3BwZWQgaW1hZ2UgaGVpZ2h0DQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBjcm9wKCRuZXdfeCwgJG5ld195LCAkbmV3X3dpZHRoLCAkbmV3X2hlaWdodCkgDQorICAgIHsNCisgICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnSW1hZ2VDcmVhdGVUcnVlQ29sb3InKSl7DQorICAgICAgICAgICAgJG5ld19pbWcgPSAgJHRoaXMtPm5ld0ltZ1ByZXNlcnZlQWxwaGEoSW1hZ2VDcmVhdGVUcnVlQ29sb3IoJG5ld193aWR0aCwkbmV3X2hlaWdodCkpOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAkbmV3X2ltZyA9SW1hZ2VDcmVhdGUoJG5ld193aWR0aCwkbmV3X2hlaWdodCk7DQorICAgICAgICB9DQorICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJ0ltYWdlQ29weVJlc2FtcGxlZCcpKXsNCisgICAgICAgICAgICBJbWFnZUNvcHlSZXNhbXBsZWQoJG5ld19pbWcsICR0aGlzLT5pbWFnZUhhbmRsZSwgMCwgMCwgJG5ld194LCAkbmV3X3ksJG5ld193aWR0aCwkbmV3X2hlaWdodCwkbmV3X3dpZHRoLCRuZXdfaGVpZ2h0KTsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgSW1hZ2VDb3B5UmVzaXplZCgkbmV3X2ltZywgJHRoaXMtPmltYWdlSGFuZGxlLCAwLCAwLCAkbmV3X3gsICRuZXdfeSwgJG5ld193aWR0aCwkbmV3X2hlaWdodCwkbmV3X3dpZHRoLCRuZXdfaGVpZ2h0KTsNCisgICAgICAgIH0NCisgICAgICAgICR0aGlzLT5vbGRfaW1hZ2UgPSAkdGhpcy0+aW1hZ2VIYW5kbGU7DQorICAgICAgICAkdGhpcy0+aW1hZ2VIYW5kbGUgPSAkbmV3X2ltZzsNCisgICAgICAgICR0aGlzLT5yZXNpemVkID0gdHJ1ZTsNCisNCisgICAgICAgICR0aGlzLT5uZXdfeCA9ICRuZXdfeDsNCisgICAgICAgICR0aGlzLT5uZXdfeSA9ICRuZXdfeTsNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9DQorICAgDQorICAgIC8qKg0KKyAgICAgKiBGbGlwIHRoZSBpbWFnZSBob3Jpem9udGFsbHkgb3IgdmVydGljYWxseQ0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gYm9vbGVhbiAkaG9yaXpvbnRhbCB0cnVlIGlmIGhvcml6b250YWwgZmxpcCwgdmVydGljYWwgb3RoZXJ3aXNlDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBmbGlwKCRob3Jpem9udGFsKQ0KKyAgICB7DQorICAgICAgICBpZighJGhvcml6b250YWwpIHsNCisgICAgICAgICAgICAkdGhpcy0+cm90YXRlKDE4MCk7DQorICAgICAgICB9DQorDQorICAgICAgICAkd2lkdGggPSBpbWFnZXN4KCR0aGlzLT5pbWFnZUhhbmRsZSk7IA0KKyAgICAgICAgJGhlaWdodCA9IGltYWdlc3koJHRoaXMtPmltYWdlSGFuZGxlKTsgDQorDQorICAgICAgICBmb3IgKCRqID0gMDsgJGogPCAkaGVpZ2h0OyAkaisrKSB7IA0KKyAgICAgICAgICAgICAgICAkbGVmdCA9IDA7IA0KKyAgICAgICAgICAgICAgICAkcmlnaHQgPSAkd2lkdGgtMTsgDQorDQorDQorICAgICAgICAgICAgICAgIHdoaWxlICgkbGVmdCA8ICRyaWdodCkgeyANCisgICAgICAgICAgICAgICAgICAgIC8vZWNobyAiIGo6Ii4kai4iIGw6Ii4kbGVmdC4iIHI6Ii4kcmlnaHQuIlxuPGJyPiI7DQorICAgICAgICAgICAgICAgICAgICAkdCA9IGltYWdlY29sb3JhdCgkdGhpcy0+aW1hZ2VIYW5kbGUsICRsZWZ0LCAkaik7IA0KKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VzZXRwaXhlbCgkdGhpcy0+aW1hZ2VIYW5kbGUsICRsZWZ0LCAkaiwgaW1hZ2Vjb2xvcmF0KCR0aGlzLT5pbWFnZUhhbmRsZSwgJHJpZ2h0LCAkaikpOyANCisgICAgICAgICAgICAgICAgICAgIGltYWdlc2V0cGl4ZWwoJHRoaXMtPmltYWdlSGFuZGxlLCAkcmlnaHQsICRqLCAkdCk7IA0KKyAgICAgICAgICAgICAgICAgICAgJGxlZnQrKzsgJHJpZ2h0LS07IA0KKyAgICAgICAgICAgICAgICB9IA0KKyAgICAgICAgICAgIA0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisNCisNCisgICAgLyoqDQorICAgICAqIEFkanVzdCB0aGUgaW1hZ2UgZ2FtbWENCisgICAgICoNCisgICAgICogQHBhcmFtIGZsb2F0ICRvdXRwdXRnYW1tYQ0KKyAgICAgKg0KKyAgICAgKiBAcmV0dXJuIG5vbmUNCisgICAgICovDQorICAgIGZ1bmN0aW9uIGdhbW1hKCRvdXRwdXRnYW1tYT0xLjApIHsNCisgICAgICAgIEltYWdlR2FtbWFDb3JyZWN0KCR0aGlzLT5pbWFnZUhhbmRsZSwgMS4wLCAkb3V0cHV0Z2FtbWEpOw0KKyAgICB9DQorCWZ1bmN0aW9uIHBhbGV0dGVUb1RydWVDb2xvcldpdGhUcmFuc3BhcmVuY3koKQ0KKwl7DQorCQkkb2xkSW1nID0gJHRoaXMtPmltYWdlSGFuZGxlOw0KKwkJJG5ld0ltZyA9ICR0aGlzLT5uZXdJbWdQcmVzZXJ2ZUFscGhhKCBpbWFnZWNyZWF0ZXRydWVjb2xvcigkdGhpcy0+aW1nX3gsJHRoaXMtPmltZ195KSApOw0KKwkJaW1hZ2Vjb3B5KCRuZXdJbWcsJG9sZEltZywwLDAsMCwwLCR0aGlzLT5pbWdfeCwkdGhpcy0+aW1nX3kpOw0KKw0KKwkJJHRoaXMtPmltYWdlSGFuZGxlID0gJG5ld0ltZzsNCisJfQ0KKwkNCisJZnVuY3Rpb24gbmV3SW1nUHJlc2VydmVBbHBoYSgkbmV3SW1nKQ0KKwl7DQorCQlpZiAoICR0aGlzLT50eXBlID09ICdqcGVnJykgcmV0dXJuICRuZXdJbWc7DQorCQkNCisJCS8vIFR1cm4gb2ZmIHRyYW5zcGFyZW5jeSBibGVuZGluZyAodGVtcG9yYXJpbHkpDQorCQlpbWFnZWFscGhhYmxlbmRpbmcoJG5ld0ltZywgZmFsc2UpOw0KKwkJDQorCQkvLyBDcmVhdGUgYSBuZXcgdHJhbnNwYXJlbnQgY29sb3IgZm9yIGltYWdlDQorCQlpZiAoICR0cmFuc3BhcmVudCA9IGltYWdlY29sb3J0cmFuc3BhcmVudCgkdGhpcy0+aW1hZ2VIYW5kbGUpID49IDAgKQ0KKwkJew0KKwkJCWlmIChpbWFnZWlzdHJ1ZWNvbG9yKCR0aGlzLT5pbWFnZUhhbmRsZSkpDQorCQkJew0KKwkJCQkkcmVkID0gKCR0cmFuc3BhcmVudCAmIDB4RkYwMDAwKSA+PiAxNjsNCisJCQkJJGdyZWVuID0gKCR0cmFuc3BhcmVudCAmIDB4MDBGRjAwKSA+PiA4Ow0KKwkJCQkkYmx1ZSA9ICgkdHJhbnNwYXJlbnQgJiAweDAwMDBGRik7DQorCQkJCSRjb2xvcl92YWx1ZXMgPSBhcnJheSgncmVkJyA9PiAkcmVkLCAnZ3JlZW4nID0+ICRncmVlbiwgJ2JsdWUnID0+ICRibHVlKTsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJJGNvbG9yX3ZhbHVlcyA9IGltYWdlY29sb3JzZm9yaW5kZXgoJHRoaXMtPmltYWdlSGFuZGxlLCR0cmFuc3BhcmVudCk7DQorDQorCQkJfQ0KKwkJCSRjb2xvcl92YWx1ZXMgPSBpbWFnZWNvbG9yc2ZvcmluZGV4KCR0aGlzLT5pbWFnZUhhbmRsZSwkdHJhbnNwYXJlbnQpOw0KKwkJCSRjb2xvciA9IGltYWdlY29sb3JhbGxvY2F0ZWFscGhhKCRuZXdJbWcsICRjb2xvcl92YWx1ZXNbJ3JlZCddLCRjb2xvcl92YWx1ZXNbJ2dyZWVuJ10sJGNvbG9yX3ZhbHVlc1snYmx1ZSddLCAxMjcpOw0KKwkJCSRjb2xvcnQgPSBpbWFnZWNvbG9yYWxsb2NhdGUoJG5ld0ltZywgJGNvbG9yX3ZhbHVlc1sncmVkJ10sJGNvbG9yX3ZhbHVlc1snZ3JlZW4nXSwkY29sb3JfdmFsdWVzWydibHVlJ10pOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCSRjb2xvciA9IGltYWdlY29sb3JhbGxvY2F0ZWFscGhhKCRuZXdJbWcsIDI1MiwgMiwgMjUyLCAxMjcpOw0KKwkJCSRjb2xvcnQgPSBpbWFnZWNvbG9yYWxsb2NhdGUoJG5ld0ltZywgMjUyLCAyLCAyNTIpOw0KKwkJfQ0KKwkJaW1hZ2Vjb2xvcnRyYW5zcGFyZW50KCRuZXdJbWcsJGNvbG9ydCk7DQorCQkNCisJCS8vIENvbXBsZXRlbHkgZmlsbCB0aGUgYmFja2dyb3VuZCBvZiB0aGUgbmV3IGltYWdlIHdpdGggYWxsb2NhdGVkIGNvbG9yLg0KKwkJaW1hZ2VmaWxsKCRuZXdJbWcsIDAsIDAsICRjb2xvcik7DQorCQkNCisJCS8vIFJlc3RvcmUgdHJhbnNwYXJlbmN5IGJsZW5kaW5nDQorCQlpbWFnZXNhdmVhbHBoYSgkbmV3SW1nLCB0cnVlKTsNCisJCQ0KKwkJcmV0dXJuICRuZXdJbWc7DQorCX0NCisJDQorCWZ1bmN0aW9uIHByZXNlcnZlVHJhbnNwYXJlbmN5Rm9yUGFsZXR0ZSgpDQorCXsNCisJCSRuZXdfaW1nID0gaW1hZ2VjcmVhdGV0cnVlY29sb3IoJHRoaXMtPmltZ194LCR0aGlzLT5pbWdfeSk7DQorCQkkdHJ1ZWNvbG9yID0gaW1hZ2Vpc3RydWVjb2xvcigkdGhpcy0+aW1hZ2VIYW5kbGUpOw0KKwkJJHRyYW5zcGFyZW50ID0gaW1hZ2Vjb2xvcmFsbG9jYXRlKCRuZXdfaW1nLCAyNTIsMiwyNTIpOyAvLyBuYXN0eSBwaW5raXNoIHB1cnBsZSB0aGF0IGhvcGVmdWxseSBkb2Vzbid0IGV4aXN0IGluIHRoZSBpbWFnZQ0KKw0KKwkJaW1hZ2Vjb2xvcnRyYW5zcGFyZW50KCRuZXdfaW1nLCAkdHJhbnNwYXJlbnQpOw0KKwkJZm9yICgkaT0wOyRpPCR0aGlzLT5pbWdfeTskaSsrKQ0KKwkJew0KKwkJCWZvciAoJGo9MDskajwkdGhpcy0+aW1nX3g7JGorKykNCisJCQl7DQorCQkJCSRjID0gaW1hZ2Vjb2xvcmF0KCR0aGlzLT5pbWFnZUhhbmRsZSwkaiwgJGkpOw0KKwkJCQlpZiAoJHRydWVjb2xvcikNCisJCQkJew0KKwkJCQkJJGEgPSAoJGMgPj4gMjQpICYgMHhGRjsNCisJCQkJCSRyID0gKCRjID4+IDE2KSAmIDB4RkY7DQorCQkJCQkkZyA9ICgkYyA+PiA4KSAmIDB4RkY7DQorCQkJCQkkYiA9ICRjICYgMHhGRjsNCisJCQkJCSRjb2xvcl92YWx1ZXMgPSBhcnJheSgncmVkJyA9PiAkciwgJ2dyZWVuJyA9PiAkZywgJ2JsdWUnID0+ICRiLCAnYWxwaGEnID0+ICRhKTsNCisJCQkJfQ0KKwkJCQllbHNlDQorCQkJCXsNCisJCQkJCSRjb2xvcl92YWx1ZXMgPSBpbWFnZWNvbG9yc2ZvcmluZGV4KCR0aGlzLT5pbWFnZUhhbmRsZSwkYyk7DQorCQkJCX0NCisJCQkJaWYgKCRjb2xvcl92YWx1ZXNbJ2FscGhhJ10gPj0gMTI2KQ0KKwkJCQl7DQorCQkJCQlpbWFnZXNldHBpeGVsKCRuZXdfaW1nLCAkaiwgJGksICR0cmFuc3BhcmVudCk7DQorCQkJCX0NCisJCQkJZWxzZQ0KKwkJCQl7DQorCQkJCQlpbWFnZXNldHBpeGVsKCRuZXdfaW1nLCAkaiwgJGksICRjKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCSR0aGlzLT5pbWFnZUhhbmRsZSA9ICRuZXdfaW1nOw0KKwl9DQorDQorICAgIC8qKg0KKyAgICAgKiBTYXZlIHRoZSBpbWFnZSBmaWxlDQorICAgICAqDQorICAgICAqIEBwYXJhbSBzdHJpbmcgICRmaWxlbmFtZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byB3cml0ZSB0bw0KKyAgICAgKiBAcGFyYW0gaW50ICAgICAkcXVhbGl0eSAgb3V0cHV0IERQSSwgZGVmYXVsdCBpcyA4NQ0KKyAgICAgKiBAcGFyYW0gc3RyaW5nICAkdHlwZXMgICAgZGVmaW5lIHRoZSBvdXRwdXQgZm9ybWF0LCBkZWZhdWx0DQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0aGUgY3VycmVudCB1c2VkIGZvcm1hdA0KKyAgICAgKg0KKyAgICAgKiBAcmV0dXJuIG5vbmUNCisgICAgICovDQorICAgIGZ1bmN0aW9uIHNhdmUoJGZpbGVuYW1lLCAkdHlwZSA9ICcnLCAkcXVhbGl0eSA9IDg1KQ0KKyAgICB7DQorCQkkdHlwZSAgICAgICAgICAgPSAkdHlwZT09Jyc/ICR0aGlzLT50eXBlIDogJHR5cGU7DQorCQkkZnVuY3Rpb25OYW1lICAgPSAnaW1hZ2UnIC4gJHR5cGU7DQorDQorCQlpZihmdW5jdGlvbl9leGlzdHMoJGZ1bmN0aW9uTmFtZSkpDQorCQl7DQorCQkJJHRoaXMtPm9sZF9pbWFnZSA9ICR0aGlzLT5pbWFnZUhhbmRsZTsNCisJCQlpZigkdHlwZT09J2pwZWcnKQ0KKwkJCQkkZnVuY3Rpb25OYW1lKCR0aGlzLT5pbWFnZUhhbmRsZSwgJGZpbGVuYW1lLCAkcXVhbGl0eSk7DQorCQkJZWxzZQ0KKwkJCQkkZnVuY3Rpb25OYW1lKCR0aGlzLT5pbWFnZUhhbmRsZSwgJGZpbGVuYW1lKTsNCisJCQkkdGhpcy0+aW1hZ2VIYW5kbGUgPSAkdGhpcy0+b2xkX2ltYWdlOw0KKwkJCSR0aGlzLT5yZXNpemVkID0gZmFsc2U7DQorCQl9DQorICAgIH0gLy8gRW5kIHNhdmUNCisNCisNCisgICAgLyoqDQorICAgICAqIERpc3BsYXkgaW1hZ2Ugd2l0aG91dCBzYXZpbmcgYW5kIGxvc2UgY2hhbmdlcw0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gc3RyaW5nIHR5cGUgKEpQRyxQTkcuLi4pOw0KKyAgICAgKiBAcGFyYW0gaW50IHF1YWxpdHkgNzUNCisgICAgICoNCisgICAgICogQHJldHVybiBub25lDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBkaXNwbGF5KCR0eXBlID0gJycsICRxdWFsaXR5ID0gNzUpDQorICAgIHsNCisgICAgICAgIGlmICgkdHlwZSAhPSAnJykgew0KKyAgICAgICAgICAgICR0aGlzLT50eXBlID0gJHR5cGU7DQorICAgICAgICB9DQorICAgICAgICAkZnVuY3Rpb25OYW1lID0gJ0ltYWdlJyAuICR0aGlzLT50eXBlOw0KKwkJaWYoZnVuY3Rpb25fZXhpc3RzKCRmdW5jdGlvbk5hbWUpKQ0KKwkJew0KKwkJCWhlYWRlcignQ29udGVudC10eXBlOiBpbWFnZS8nIC4gc3RydG9sb3dlcigkdGhpcy0+dHlwZSkpOw0KKwkJCSRmdW5jdGlvbk5hbWUoJHRoaXMtPmltYWdlSGFuZGxlLCAnJywgJHF1YWxpdHkpOw0KKwkJCSR0aGlzLT5pbWFnZUhhbmRsZSA9ICR0aGlzLT5vbGRfaW1hZ2U7DQorCQkJJHRoaXMtPnJlc2l6ZWQgPSBmYWxzZTsNCisJCQlJbWFnZURlc3Ryb3koJHRoaXMtPm9sZF9pbWFnZSk7DQorCQkJJHRoaXMtPmZyZWUoKTsNCisJCX0NCisgICAgfQ0KKw0KKyAgICAvKioNCisgICAgICogRGVzdHJveSBpbWFnZSBoYW5kbGUNCisgICAgICoNCisgICAgICogQHJldHVybiBub25lDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBmcmVlKCkNCisgICAgew0KKyAgICAgICAgaWYgKCR0aGlzLT5pbWFnZUhhbmRsZSl7DQorICAgICAgICAgICAgSW1hZ2VEZXN0cm95KCR0aGlzLT5pbWFnZUhhbmRsZSk7DQorICAgICAgICB9DQorICAgIH0NCisNCit9IC8vIEVuZCBjbGFzcyBJbWFnZUdEDQorPz4NCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9DbGFzc2VzL0lNLnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL0NsYXNzZXMvSU0ucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNzE3MDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9DbGFzc2VzL0lNLnBocApAQCAtMCwwICsxLDIzOSBAQAorPD9waHANCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqKiBUaXRsZS4uLi4uLi4uLjogIEltYWdlTWFnaWNrIERyaXZlcg0KKyoqIFZlcnNpb24uLi4uLi4uOiAgMS4wDQorKiogQXV0aG9yLi4uLi4uLi46ICBYaWFuZyBXZWkgWkhVTyA8d2VpQHpodW8ub3JnPg0KKyoqIEZpbGVuYW1lLi4uLi4uOiAgSU0ucGhwDQorKiogTGFzdCBjaGFuZ2VkLi46ICAzMCBBdWcgMjAwMyANCisqKiBOb3Rlcy4uLi4uLi4uLjogIE9yZ2luYWwgaXMgZnJvbSBQRUFSDQorKiovDQorDQorLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorLy8gfCBQSFAgVmVyc2lvbiA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorLy8gfCBDb3B5cmlnaHQgKGMpIDE5OTctMjAwMiBUaGUgUEhQIEdyb3VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorLy8gfCBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdmVyc2lvbiAyLjAyIG9mIHRoZSBQSFAgbGljZW5zZSwgICAgICB8DQorLy8gfCB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRSwgYW5kIGlzICAgICAgICB8DQorLy8gfCBhdmFpbGFibGUgYXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLy8gfCBodHRwOi8vd3d3LnBocC5uZXQvbGljZW5zZS8yXzAyLnR4dC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLy8gfCBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgUEhQIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8gICB8DQorLy8gfCBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGEgbm90ZSB0byAgICAgICAgICB8DQorLy8gfCBsaWNlbnNlQHBocC5uZXQgc28gd2UgY2FuIG1haWwgeW91IGEgY29weSBpbW1lZGlhdGVseS4gICAgICAgICAgICAgICB8DQorLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorLy8gfCBBdXRob3JzOiBQZXRlciBCb3d5ZXIgPHBldGVyQG1hcGxlZGVzaWduLmNvLnVrPiAgICAgICAgICAgICAgICAgICAgICB8DQorLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorLy8NCisvLyAkSWQ6SU0ucGhwIDkzNyAyMDA4LTAxLTIwIDIzOjEzOjI1WiByYXkgJA0KKy8vDQorLy8gSW1hZ2UgVHJhbnNmb3JtYXRpb24gaW50ZXJmYWNlIHVzaW5nIGNvbW1hbmQgbGluZSBJbWFnZU1hZ2ljaw0KKy8vDQorDQorcmVxdWlyZV9vbmNlICIuLi9JbWFnZU1hbmFnZXIvQ2xhc3Nlcy9UcmFuc2Zvcm0ucGhwIjsNCisNCitDbGFzcyBJbWFnZV9UcmFuc2Zvcm1fRHJpdmVyX0lNIGV4dGVuZHMgSW1hZ2VfVHJhbnNmb3JtDQorew0KKyAgICAvKioNCisgICAgICogYXNzb2NpYXRpdmUgYXJyYXkgY29tbWFuZHMgdG8gYmUgZXhlY3V0ZWQNCisgICAgICogQHZhciBhcnJheQ0KKyAgICAgKi8NCisgICAgdmFyICRjb21tYW5kID0gYXJyYXkoKTsNCisNCisgICAgLyoqDQorICAgICAqDQorICAgICAqDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBJbWFnZV9UcmFuc2Zvcm1fRHJpdmVyX0lNKCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0gLy8gRW5kIEltYWdlX0lNDQorDQorICAgIC8qKg0KKyAgICAgKiBMb2FkIGltYWdlDQorICAgICAqDQorICAgICAqIEBwYXJhbSBzdHJpbmcgZmlsZW5hbWUNCisgICAgICoNCisgICAgICogQHJldHVybiBtaXhlZCBub25lIG9yIGEgUEVBUiBlcnJvciBvYmplY3Qgb24gZXJyb3INCisgICAgICogQHNlZSBQRUFSOjppc0Vycm9yKCkNCisgICAgICovDQorICAgIGZ1bmN0aW9uIGxvYWQoJGltYWdlKQ0KKyAgICB7DQorDQorICAgICAgICAkdGhpcy0+dWlkID0gbWQ1KCRfU0VSVkVSWydSRU1PVEVfQUREUiddKTsNCisgICAgICAgIC8qaWYgKCFmaWxlX2V4aXN0cygkaW1hZ2UpKSB7DQorICAgICAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoJ1RoZSBpbWFnZSBmaWxlICcgLiAkaW1hZ2UgLiAnIGRvZXNcJ3QgZXhpc3QnLCB0cnVlKTsNCisgICAgICAgIH0qLw0KKyAgICAgICAgJHRoaXMtPmltYWdlID0gJGltYWdlOw0KKyAgICAgICAgJHRoaXMtPl9nZXRfaW1hZ2VfZGV0YWlscygkaW1hZ2UpOw0KKyAgICB9IC8vIEVuZCBsb2FkDQorDQorICAgIC8qKg0KKyAgICAgKiBSZXNpemUgQWN0aW9uDQorICAgICAqDQorICAgICAqIEBwYXJhbSBpbnQgICBuZXdfeCAgIG5ldyB3aWR0aA0KKyAgICAgKiBAcGFyYW0gaW50ICAgbmV3X3kgICBuZXcgaGVpZ2h0DQorICAgICAqDQorICAgICAqIEByZXR1cm4gbm9uZQ0KKyAgICAgKiBAc2VlIFBFQVI6OmlzRXJyb3IoKQ0KKyAgICAgKi8NCisgICAgZnVuY3Rpb24gX3Jlc2l6ZSgkbmV3X3gsICRuZXdfeSkNCisgICAgew0KKyAgICAgICAgLyppZiAoaXNzZXQoJHRoaXMtPmNvbW1hbmRbJ3Jlc2l6ZSddKSkgew0KKyAgICAgICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCJZb3UgY2Fubm90IHNjYWxlIG9yIHJlc2l6ZSBhbiBpbWFnZSBtb3JlIHRoYW4gb25jZSB3aXRob3V0IGNhbGxpbmcgc2F2ZSBvciBkaXNwbGF5IiwgdHJ1ZSk7DQorICAgICAgICB9Ki8NCisgICAgICAgICR0aGlzLT5jb21tYW5kWydyZXNpemUnXSA9ICItZ2VvbWV0cnkgJHtuZXdfeH14JHtuZXdfeX0hIjsNCisNCisgICAgICAgICR0aGlzLT5uZXdfeCA9ICRuZXdfeDsNCisgICAgICAgICR0aGlzLT5uZXdfeSA9ICRuZXdfeTsNCisgICAgfSAvLyBFbmQgcmVzaXplDQorDQorICAgIC8qKg0KKyAgICAgKiBDcm9wIHRoZSBpbWFnZQ0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gaW50ICRjcm9wX3ggbGVmdCBjb2x1bW4gb2YgdGhlIGltYWdlDQorICAgICAqIEBwYXJhbSBpbnQgJGNyb3BfeSB0b3Agcm93IG9mIHRoZSBpbWFnZQ0KKyAgICAgKiBAcGFyYW0gaW50ICRjcm9wX3dpZHRoIG5ldyBjcm9wcGVkIGltYWdlIHdpZHRoDQorICAgICAqIEBwYXJhbSBpbnQgJGNyb3BfaGVpZ2h0IG5ldyBjcm9wcGVkIGltYWdlIGhlaWdodA0KKyAgICAgKi8NCisgICAgZnVuY3Rpb24gY3JvcCgkY3JvcF94LCAkY3JvcF95LCAkY3JvcF93aWR0aCwgJGNyb3BfaGVpZ2h0KSANCisgICAgew0KKyAgICAgICAgJHRoaXMtPmNvbW1hbmRbJ2Nyb3AnXSA9ICItY3JvcCB7JGNyb3Bfd2lkdGh9eHskY3JvcF9oZWlnaHR9K3skY3JvcF94fSt7JGNyb3BfeX0iOw0KKyAgICB9DQorDQorICAgIC8qKg0KKyAgICAgKiBGbGlwIHRoZSBpbWFnZSBob3Jpem9udGFsbHkgb3IgdmVydGljYWxseQ0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gYm9vbGVhbiAkaG9yaXpvbnRhbCB0cnVlIGlmIGhvcml6b250YWwgZmxpcCwgdmVydGljYWwgb3RoZXJ3aXNlDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBmbGlwKCRob3Jpem9udGFsKSANCisgICAgew0KKyAgICAgICAgaWYoJGhvcml6b250YWwpDQorICAgICAgICAgICAgJHRoaXMtPmNvbW1hbmRbJ2Zsb3AnXSA9ICItZmxvcCI7DQorICAgICAgICBlbHNlDQorICAgICAgICAgICAgJHRoaXMtPmNvbW1hbmRbJ2ZsaXAnXSA9ICItZmxpcCI7DQorICAgIH0NCisgICAgLyoqDQorICAgICAqIHJvdGF0ZQ0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gICBpbnQgICAgIGFuZ2xlICAgcm90YXRpb24gYW5nbGUNCisgICAgICogQHBhcmFtICAgYXJyYXkgICBvcHRpb25zIG5vIG9wdGlvbiBhbGxvd2VkDQorICAgICAqDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiByb3RhdGUoJGFuZ2xlLCAkb3B0aW9ucz1udWxsKQ0KKyAgICB7DQorICAgICAgICBpZiAoJy0nID09ICRhbmdsZXswfSkgew0KKyAgICAgICAgICAgICRhbmdsZSA9IDM2MCAtIHN1YnN0cigkYW5nbGUsIDEpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgICR0aGlzLT5jb21tYW5kWydyb3RhdGUnXSA9ICItcm90YXRlICRhbmdsZSI7DQorICAgIH0gLy8gRW5kIHJvdGF0ZQ0KKw0KKyAgICAvKioNCisgICAgICogYWRkVGV4dA0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gICBhcnJheSAgIG9wdGlvbnMgICAgIEFycmF5IGNvbnRhaW5zIG9wdGlvbnMNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQnICBUaGUgc3RyaW5nIHRvIGRyYXcNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3gnICAgICBIb3Jpem9udGFsIHBvc2l0aW9uDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5JyAgICAgVmVydGljYWwgUG9zaXRpb24NCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbG9yJyBGb250IGNvbG9yDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb250JyAgRm9udCB0byBiZSB1c2VkDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplJyAgU2l6ZSBvZiB0aGUgZm9udHMgaW4gcGl4ZWwNCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc2l6ZV9maXJzdCcgIFRlbGwgaWYgdGhlIGltYWdlIGhhcyB0byBiZSByZXNpemVkDQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgZHJhd2luZyB0aGUgdGV4dA0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisgICAgICoNCisgICAgICogQHJldHVybiBub25lDQorICAgICAqIEBzZWUgUEVBUjo6aXNFcnJvcigpDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBhZGRUZXh0KCRwYXJhbXMpDQorICAgIHsNCisgICAgICAgICRkZWZhdWx0X3BhcmFtcyA9IGFycmF5KA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQnID0+ICdUaGlzIGlzIFRleHQnLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3gnID0+IDEwLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3knID0+IDIwLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbG9yJyA9PiAncmVkJywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb250JyA9PiAnQXJpYWwudHRmJywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXNpemVfZmlyc3QnID0+IGZhbHNlIC8vIENhcnJ5IG91dCB0aGUgc2NhbGluZyBvZiB0aGUgaW1hZ2UgYmVmb3JlIGFubm90YXRpb24/DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KKyAgICAgICAgICRwYXJhbXMgPSBhcnJheV9tZXJnZSgkZGVmYXVsdF9wYXJhbXMsICRwYXJhbXMpOw0KKyAgICAgICAgIGV4dHJhY3QoJHBhcmFtcyk7DQorICAgICAgICAgaWYgKHRydWUgPT09ICRyZXNpemVfZmlyc3QpIHsNCisgICAgICAgICAgICAgLy8gU2V0IHRoZSBrZXkgc28gdGhhdCB0aGlzIHdpbGwgYmUgdGhlIGxhc3QgaXRlbSBpbiB0aGUgYXJyYXkNCisgICAgICAgICAgICAka2V5ID0gJ3p0ZXh0JzsNCisgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICRrZXkgPSAndGV4dCc7DQorICAgICAgICAgfQ0KKyAgICAgICAgICR0aGlzLT5jb21tYW5kWyRrZXldID0gIi1mb250ICRmb250IC1maWxsICRjb2xvciAtZHJhdyAndGV4dCAkeCwkeSBcIiR0ZXh0XCInIjsNCisgICAgICAgICAvLyBQcm9kdWNpbmcgZXJyb3I6IGdzOiBub3QgZm91bmQgZ3M6IG5vdCBmb3VuZCBjb252ZXJ0OiBQb3N0c2NyaXB0IGRlbGVnYXRlIGZhaWxlZCBbTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeV0uDQorICAgIH0gLy8gRW5kIGFkZFRleHQNCisNCisgICAgLyoqDQorICAgICAqIEFkanVzdCB0aGUgaW1hZ2UgZ2FtbWENCisgICAgICoNCisgICAgICogQHBhcmFtIGZsb2F0ICRvdXRwdXRnYW1tYQ0KKyAgICAgKg0KKyAgICAgKiBAcmV0dXJuIG5vbmUNCisgICAgICovDQorICAgIGZ1bmN0aW9uIGdhbW1hKCRvdXRwdXRnYW1tYT0xLjApIHsNCisgICAgICAgICR0aGlzLT5jb21tYW5kWydnYW1tYSddID0gIi1nYW1tYSAkb3V0cHV0Z2FtbWEiOw0KKyAgICB9DQorCQ0KKwlmdW5jdGlvbiByZWR1Y2VfY29sb3JzKCRudW1iZXIgPSAyNTYpDQorCXsNCisJCSAkdGhpcy0+Y29tbWFuZFsnY29sb3JzJ10gPSAiLWNvbG9ycyAkbnVtYmVyIjsNCisJfQ0KKyAgICAvKioNCisgICAgICogU2F2ZSB0aGUgaW1hZ2UgZmlsZQ0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gc3RyaW5nICAkZmlsZW5hbWUgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gd3JpdGUgdG8NCisgICAgICogQHBhcmFtIHF1YWxpdHkgJHF1YWxpdHkgIGltYWdlIGRwaSwgZGVmYXVsdD03NQ0KKyAgICAgKiBAcGFyYW0gc3RyaW5nICAkdHlwZSAgICAgKEpQRyxQTkcuLi4pDQorICAgICAqDQorICAgICAqIEByZXR1cm4gbm9uZQ0KKyAgICAgKi8NCisgICAgZnVuY3Rpb24gc2F2ZSgkZmlsZW5hbWUsICR0eXBlPScnLCAkcXVhbGl0eSA9IDg1KQ0KKyAgICB7DQorICAgICAgICAkdHlwZSA9PSAnJyA/ICR0aGlzLT50eXBlIDogJHR5cGU7DQorICAgICAgICAkY21kID0gJycgLiBJTUFHRV9UUkFOU0ZPUk1fTElCX1BBVEggLiAnY29udmVydCAnOw0KKwkJJGNtZCAuPSBpbXBsb2RlKCcgJywgJHRoaXMtPmNvbW1hbmQpIC4gIiAtcXVhbGl0eSAkcXVhbGl0eSAiOw0KKwkJJGNtZCAuPSAnIicuKCR0aGlzLT5pbWFnZSkgLiAnIiAiJyAuICgkZmlsZW5hbWUpIC4gJyInOw0KKyAgICAgICAgDQorICAgICAgICAvLyRjbWQgPSBzdHJfcmVwbGFjZSgnLycsICdcXCcsICRjbWQpOw0KKwkJLy9lY2hvKCRjbWQuJzxicj4nKTsNCisgICAgICAgIGV4ZWMoJGNtZCwkcmV0dmFsKTsNCisJCS8vZXJyb3JfbG9nKCdJTSAnLnByaW50X3IoJHJldHZhbCx0cnVlKSk7DQorICAgIH0gLy8gRW5kIHNhdmUNCisNCisgICAgLyoqDQorICAgICAqIERpc3BsYXkgaW1hZ2Ugd2l0aG91dCBzYXZpbmcgYW5kIGxvc2UgY2hhbmdlcw0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gc3RyaW5nIHR5cGUgKEpQRyxQTkcuLi4pOw0KKyAgICAgKiBAcGFyYW0gaW50IHF1YWxpdHkgNzUNCisgICAgICoNCisgICAgICogQHJldHVybiBub25lDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBkaXNwbGF5KCR0eXBlID0gJycsICRxdWFsaXR5ID0gNzUpDQorICAgIHsNCisgICAgICAgIGlmICgkdHlwZSA9PSAnJykgew0KKyAgICAgICAgICAgIGhlYWRlcignQ29udGVudC10eXBlOiBpbWFnZS8nIC4gJHRoaXMtPnR5cGUpOw0KKyAgICAgICAgICAgIHBhc3N0aHJ1KElNQUdFX1RSQU5TRk9STV9MSUJfUEFUSCAuICcgICcgLiBpbXBsb2RlKCcgJywgJHRoaXMtPmNvbW1hbmQpIC4gIiAtcXVhbGl0eSAkcXVhbGl0eSAiICAuIGVzY2FwZXNoZWxsYXJnKCR0aGlzLT5pbWFnZSkgLiAnICcgLiBzdHJ0b3VwcGVyKCR0aGlzLT50eXBlKSAuICI6LSIpOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtdHlwZTogaW1hZ2UvJyAuICR0eXBlKTsNCisgICAgICAgICAgICBwYXNzdGhydShJTUFHRV9UUkFOU0ZPUk1fTElCX1BBVEggLiAnY29udmVydCAnIC4gaW1wbG9kZSgnICcsICR0aGlzLT5jb21tYW5kKSAuICIgLXF1YWxpdHkgJHF1YWxpdHkgIiAgLiBlc2NhcGVzaGVsbGFyZygkdGhpcy0+aW1hZ2UpIC4gJyAnIC4gc3RydG91cHBlcigkdHlwZSkgLiAiOi0iKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKw0KKyAgICAvKioNCisgICAgICogRGVzdHJveSBpbWFnZSBoYW5kbGUNCisgICAgICoNCisgICAgICogQHJldHVybiBub25lDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBmcmVlKCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisNCit9IC8vIEVuZCBjbGFzcyBJbWFnZUlNDQorPz4NCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9DbGFzc2VzL0ltYWdlRWRpdG9yLnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL0NsYXNzZXMvSW1hZ2VFZGl0b3IucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZjhjOTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9DbGFzc2VzL0ltYWdlRWRpdG9yLnBocApAQCAtMCwwICsxLDUwMiBAQAorPD9waHANCisvKioNCisgKiBJbWFnZSBFZGl0b3IuIEVkaXRpbmcgdG9vbHMsIGNyb3AsIHJvdGF0ZSwgc2NhbGUgYW5kIHNhdmUuDQorICogQGF1dGhvciAkQXV0aG9yOnJheSAkDQorICogQHZlcnNpb24gJElkOkltYWdlRWRpdG9yLnBocCA5MzggMjAwOC0wMS0yMiAyMDoxMzo0N1ogcmF5ICQNCisgKiBAcGFja2FnZSBJbWFnZU1hbmFnZXINCisgKi8NCisNCityZXF1aXJlX29uY2UoJy4uL0ltYWdlTWFuYWdlci9DbGFzc2VzL1RyYW5zZm9ybS5waHAnKTsNCisNCisvKioNCisgKiBIYW5kbGVzIHRoZSBiYXNpYyBpbWFnZSBlZGl0aW5nIGNhcGJhYmlsaXRpZXMuDQorICogQGF1dGhvciAkQXV0aG9yOnJheSAkDQorICogQHZlcnNpb24gJElkOkltYWdlRWRpdG9yLnBocCA5MzggMjAwOC0wMS0yMiAyMDoxMzo0N1ogcmF5ICQNCisgKiBAcGFja2FnZSBJbWFnZU1hbmFnZXINCisgKiBAc3VicGFja2FnZSBFZGl0b3INCisgKi8NCitjbGFzcyBJbWFnZUVkaXRvciANCit7DQorCS8qKg0KKwkgKiBJbWFnZU1hbmFnZXIgaW5zdGFuY2UuDQorCSAqLw0KKwl2YXIgJG1hbmFnZXI7DQorDQorCS8qKg0KKwkgKiB1c2VyIGJhc2VkIG9uIElQIGFkZHJlc3MNCisJICovDQorCXZhciAkX3VpZDsNCisNCisJLyoqDQorCSAqIHRtcCBmaWxlIHN0b3JhZ2UgdGltZS4NCisJICovDQorCXZhciAkbGFwc2VfdGltZSA9OTAwOyAvLzE1IG1pbnMNCisNCisJdmFyICRmaWxlc2F2ZWQgPSAwOw0KKw0KKwkvKioNCisJICogQ3JlYXRlIGEgbmV3IEltYWdlRWRpdG9yIGluc3RhbmNlLiBFZGl0aW5nIHJlcXVpcmVzIGEgDQorCSAqIHRtcCBmaWxlLCB3aGljaCBpcyBzYXZlZCBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hlcmUgdGhlDQorCSAqIGltYWdlIGlzIGVkaXRlZC4gVGhlIHRtcCBmaWxlIGlzIGFzc2lnbmVkIGJ5IG1kNSBoYXNoIG9mIHRoZQ0KKwkgKiB1c2VyIElQIGFkZHJlc3MuIFRoaXMgaGFzaGVkIGlzIHVzZWQgYXMgYW4gSUQgZm9yIGNsZWFuaW5nIHVwDQorCSAqIHRoZSB0bXAgZmlsZXMuIEluIGFkZGl0aW9uLCBhbnkgdG1wIGZpbGVzIG9sZGVyIHRoYW4gdGhlDQorCSAqIHRoZSBzcGVjaWZpZWQgcGVyaW9kIHdpbGwgYmUgZGVsZXRlZC4NCisJICogQHBhcmFtIEltYWdlTWFuYWdlciAkbWFuYWdlciB0aGUgaW1hZ2UgbWFuYWdlciwgd2UgbmVlZCB0aGlzDQorCSAqIGZvciBzb21lIGZpbGUgYW5kIHBhdGggaGFuZGxpbmcgZnVuY3Rpb25zLg0KKwkgKi8NCisJZnVuY3Rpb24gSW1hZ2VFZGl0b3IoJG1hbmFnZXIpIA0KKwl7DQorCQkkdGhpcy0+bWFuYWdlciA9ICRtYW5hZ2VyOw0KKwkJJHRoaXMtPl91aWQgPSBtZDUoJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10pOw0KKwl9DQorCQ0KKwkvKioNCisJICogRGlkIHdlIHNhdmUgYSBmaWxlPw0KKwkgKiBAcmV0dXJuIGludCAxIGlmIHRoZSBmaWxlIHdhcyBzYXZlZCBzdWNlc3NmdWxseSwgDQorCSAqIDAgbm8gc2F2ZSBvcGVyYXRpb24sIC0xIGZpbGUgc2F2ZSBlcnJvci4NCisJICovDQorCWZ1bmN0aW9uIGlzRmlsZVNhdmVkKCkgDQorCXsNCisJCVJldHVybiAkdGhpcy0+ZmlsZXNhdmVkOw0KKwl9DQorDQorCS8qKg0KKwkgKiBQcm9jZXNzIHRoZSBpbWFnZSwgaWYgbm90IGFjdGlvbiwganVzdCBkaXNwbGF5IHRoZSBpbWFnZS4NCisJICogQHJldHVybiBhcnJheSB3aXRoIGltYWdlIGluZm9ybWF0aW9uLCBlbXB0eSBhcnJheSBpZiBub3QgYW4gaW1hZ2UuDQorCSAqIDxjb2RlPmFycmF5KCdzcmMnPT4ndXJsIG9mIHRoZSBpbWFnZScsICdkaW1lbnNpb25zJz0+J3dpZHRoPSJ4eCIgaGVpZ2h0PSJ5eSInLA0KKwkgKiAnZmlsZSc9PidpbWFnZSBmaWxlLCByZWxhdGl2ZScsICdmdWxscGF0aCc9PidmdWxsIHBhdGggdG8gdGhlIGltYWdlJyk7PC9jb2RlPg0KKwkgKi8NCisJZnVuY3Rpb24gcHJvY2Vzc0ltYWdlKCkgDQorCXsNCisJCWlmKGlzc2V0KCRfR0VUWydpbWcnXSkpDQorCQkJJHJlbGF0aXZlID0gcmF3dXJsZGVjb2RlKCRfR0VUWydpbWcnXSk7DQorCQllbHNlDQorCQkJUmV0dXJuIGFycmF5KCk7DQorCQkNCisJCS8vJHJlbGF0aXZlID0gJy9TZXJpZXMyMDA0Tm90ZUZyb250LmpwZyc7DQorDQorCQkkaW1nVVJMID0gJHRoaXMtPm1hbmFnZXItPmdldEZpbGVVUkwoJHJlbGF0aXZlKTsNCisJCSRmdWxscGF0aCA9ICR0aGlzLT5tYW5hZ2VyLT5nZXRGdWxsUGF0aCgkcmVsYXRpdmUpOw0KKwkJDQorCQkkaW1nSW5mbyA9IEBnZXRJbWFnZVNpemUoJGZ1bGxwYXRoKTsNCisJCWlmKCFpc19hcnJheSgkaW1nSW5mbykpDQorCQkJUmV0dXJuIGFycmF5KCk7DQorDQorCQkkYWN0aW9uID0gJHRoaXMtPmdldEFjdGlvbigpOw0KKw0KKwkJaWYoIWlzX251bGwoJGFjdGlvbikpDQorCQl7DQorCQkJJGltYWdlID0gJHRoaXMtPnByb2Nlc3NBY3Rpb24oJGFjdGlvbiwgJHJlbGF0aXZlLCAkZnVsbHBhdGgpOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCSRpbWFnZVsnc3JjJ10gPSAkaW1nVVJMOw0KKwkJCSRpbWFnZVsnZGltZW5zaW9ucyddID0gJGltZ0luZm9bM107DQorCQkJJGltYWdlWydmaWxlJ10gPSAkcmVsYXRpdmU7DQorCQkJJGltYWdlWydmdWxscGF0aCddID0gJGZ1bGxwYXRoOw0KKwkJCSRpbWFnZVsnZmlsZXNpemUnXSA9IEBmaWxlc2l6ZSgkZnVsbHBhdGgpOw0KKwkJfQ0KKw0KKwkJUmV0dXJuICRpbWFnZTsNCisJfQ0KKw0KKwkvKioNCisJICogUHJvY2VzcyB0aGUgYWN0aW9ucywgY3JvcCwgc2NhbGUocmVzaXplKSwgcm90YXRlLCBmbGlwLCBhbmQgc2F2ZS4NCisJICogV2hlbiBldmVyIGFuIGFjdGlvbiBpcyBwZXJmb3JtZWQsIHRoZSByZXN1bHQgaXMgc2F2ZSBpbnRvIGENCisJICogdGVtcG9yYXJ5IGltYWdlIGZpbGUsIHNlZSBjcmVhdGVVbmlxdWUgb24gdGhlIGZpbGVuYW1lIHNwZWNzLg0KKwkgKiBJdCBkb2VzIG5vdCByZXR1cm4gdGhlIHNhdmVkIGZpbGUsIGFsd2F5IHJldHVybmluZyB0aGUgdG1wIGZpbGUuDQorCSAqIEBwYXJhbSBzdHJpbmcgJGFjdGlvbiwgc2hvdWxkIGJlICdjcm9wJywgJ3NjYWxlJywgJ3JvdGF0ZScsJ2ZsaXAnLCBvciAnc2F2ZScNCisJICogQHBhcmFtIHN0cmluZyAkcmVsYXRpdmUgdGhlIHJlbGF0aXZlIGltYWdlIGZpbGVuYW1lDQorCSAqIEBwYXJhbSBzdHJpbmcgJGZ1bGxwYXRoIHRoZSBmdWxscGF0aCB0byB0aGUgaW1hZ2UgZmlsZQ0KKwkgKiBAcmV0dXJuIGFycmF5IHdpdGggaW1hZ2UgaW5mb3JtYXRpb24NCisJICogPGNvZGU+YXJyYXkoJ3NyYyc9Pid1cmwgb2YgdGhlIGltYWdlJywgJ2RpbWVuc2lvbnMnPT4nd2lkdGg9Inh4IiBoZWlnaHQ9Inl5IicsDQorCSAqICdmaWxlJz0+J2ltYWdlIGZpbGUsIHJlbGF0aXZlJywgJ2Z1bGxwYXRoJz0+J2Z1bGwgcGF0aCB0byB0aGUgaW1hZ2UnKTs8L2NvZGU+DQorCSAqLw0KKwlmdW5jdGlvbiBwcm9jZXNzQWN0aW9uKCRhY3Rpb24sICRyZWxhdGl2ZSwgJGZ1bGxwYXRoKSANCisJew0KKwkJJHBhcmFtcyA9ICcnOw0KKwkJDQorCQlpZihpc3NldCgkX0dFVFsncGFyYW1zJ10pKQ0KKwkJCSRwYXJhbXMgPSAkX0dFVFsncGFyYW1zJ107DQorDQorCQkkdmFsdWVzID0gIGV4cGxvZGUoJywnLCRwYXJhbXMpOw0KKwkJJHNhdmVGaWxlID0gJHRoaXMtPmdldFNhdmVGaWxlTmFtZSgkdmFsdWVzWzBdKTsNCisNCisJCSRpbWcgPSBJbWFnZV9UcmFuc2Zvcm06OmZhY3RvcnkoSU1BR0VfQ0xBU1MpOw0KKwkJJGltZy0+bG9hZCgkZnVsbHBhdGgpOw0KKwkJDQorCQlpZiAoIGlzX2NhbGxhYmxlKCBhcnJheSgkaW1nLCdwYWxldHRlVG9UcnVlQ29sb3JXaXRoVHJhbnNwYXJlbmN5JykpICYmICFpbWFnZWlzdHJ1ZWNvbG9yKCRpbWctPmltYWdlSGFuZGxlKSkNCisJCXsNCisJCQkkaW1nLT5wYWxldHRlVG9UcnVlQ29sb3JXaXRoVHJhbnNwYXJlbmN5KCk7DQorCQl9DQorCQlzd2l0Y2ggKCRhY3Rpb24pIA0KKwkJew0KKwkJCWNhc2UgJ2Nyb3AnOg0KKwkJCQkkaW1nLT5jcm9wKGludHZhbCgkdmFsdWVzWzBdKSxpbnR2YWwoJHZhbHVlc1sxXSksDQorCQkJCQkJCWludHZhbCgkdmFsdWVzWzJdKSxpbnR2YWwoJHZhbHVlc1szXSkpOw0KKwkJCWJyZWFrOw0KKwkJCWNhc2UgJ3NjYWxlJzoNCisJCQkJJGltZy0+cmVzaXplKGludHZhbCgkdmFsdWVzWzBdKSxpbnR2YWwoJHZhbHVlc1sxXSkpOw0KKwkJCQlicmVhazsNCisJCQljYXNlICdyb3RhdGUnOg0KKwkJCQkkaW1nLT5yb3RhdGUoZmxvYXR2YWwoJHZhbHVlc1swXSkpOw0KKwkJCQlicmVhazsNCisJCQljYXNlICdmbGlwJzoNCisJCQkJaWYgKCR2YWx1ZXNbMF0gPT0gJ2hveicpDQorCQkJCQkkaW1nLT5mbGlwKHRydWUpOw0KKwkJCQllbHNlIGlmKCR2YWx1ZXNbMF0gPT0gJ3ZlcicpIA0KKwkJCQkJJGltZy0+ZmxpcChmYWxzZSk7DQorCQkJCWJyZWFrOw0KKwkJCWNhc2UgJ3NhdmUnOg0KKwkJCQlpZighaXNfbnVsbCgkc2F2ZUZpbGUpKQ0KKwkJCQl7DQorCQkJCQkkcXVhbGl0eSA9IGludHZhbCgkdmFsdWVzWzFdKTsNCisJCSAgICAgICAgICAgIGlmKCRxdWFsaXR5IDwwKSAkcXVhbGl0eSA9IDg1Ow0KKwkJCQkJJG5ld1NhdmVGaWxlID0gJHRoaXMtPm1ha2VSZWxhdGl2ZSgkcmVsYXRpdmUsICRzYXZlRmlsZSk7DQorCQkJCQkkbmV3U2F2ZUZpbGUgPSAkdGhpcy0+Z2V0VW5pcXVlRmlsZW5hbWUoJG5ld1NhdmVGaWxlKTsNCisJCQkJCQ0KKwkJCQkJLy9nZXQgdW5pcXVlIGZpbGVuYW1lIGp1c3QgcmV0dXJucyB0aGUgZmlsZW5hbWUsIHNvDQorCQkJCQkvL3dlIG5lZWQgdG8gbWFrZSB0aGUgcmVsYXRpdmUgcGF0aCBvbmNlIG1vcmUuDQorCQkJCQkkbmV3U2F2ZUZpbGUgPSAkdGhpcy0+bWFrZVJlbGF0aXZlKCRyZWxhdGl2ZSwgJG5ld1NhdmVGaWxlKTsNCisgICAgICAgICAgCQkJJGltYWdlWydzYXZlRmlsZSddID0gJG5ld1NhdmVGaWxlOw0KKwkJCQkJJG5ld1NhdmVGdWxscGF0aCA9ICR0aGlzLT5tYW5hZ2VyLT5nZXRGdWxsUGF0aCgkbmV3U2F2ZUZpbGUpOw0KKwkJCQkJaWYgKCAkdmFsdWVzWzBdID09ICdnaWYnICYmIGlzX2NhbGxhYmxlKGFycmF5KCRpbWcsICdwcmVzZXJ2ZVRyYW5zcGFyZW5jeUZvclBhbGV0dGUnKSkpDQorCQkJCQl7DQorCQkJCQkJJGltZy0+cHJlc2VydmVUcmFuc3BhcmVuY3lGb3JQYWxldHRlKCk7DQorCQkJCQl9DQorCQkJCQkkaW1nLT5zYXZlKCRuZXdTYXZlRnVsbHBhdGgsICR2YWx1ZXNbMF0sICRxdWFsaXR5KTsNCisJCQkJCWlmKGlzX2ZpbGUoJG5ld1NhdmVGdWxscGF0aCkpDQorCQkJCQkJJHRoaXMtPmZpbGVzYXZlZCA9IDE7DQorCQkJCQllbHNlDQorCQkJCQkJJHRoaXMtPmZpbGVzYXZlZCA9IC0xOw0KKwkJCQl9DQorCQkJCWJyZWFrOw0KKwkJCQljYXNlICdwcmV2aWV3JzoNCisJCQkJCSRxdWFsaXR5ID0gaW50dmFsKCR2YWx1ZXNbMV0pOw0KKwkJCQkJDQorCQkJCQkNCisJCQkJCSRpbWFnZVsnZmlsZSddID0gJHJlbGF0aXZlOw0KKwkJCQkJJGltYWdlWydmdWxscGF0aCddID0gJGZ1bGxwYXRoOw0KKwkJCQkJDQorCQkJCQkvL2NyZWF0ZSB0aGUgdG1wIGltYWdlIGZpbGUNCisJCQkJCSRmaWxlbmFtZSA9ICR0aGlzLT5jcmVhdGVVbmlxdWUoJGZ1bGxwYXRoKTsNCisJCQkJCSRuZXdSZWxhdGl2ZSA9ICR0aGlzLT5tYWtlUmVsYXRpdmUoJHJlbGF0aXZlLCAkZmlsZW5hbWUpOw0KKwkJCQkJJG5ld0Z1bGxwYXRoID0gJHRoaXMtPm1hbmFnZXItPmdldEZ1bGxQYXRoKCRuZXdSZWxhdGl2ZSk7DQorCQkJCQkkbmV3VVJMID0gJHRoaXMtPm1hbmFnZXItPmdldEZpbGVVUkwoJG5ld1JlbGF0aXZlKTsNCisJCQkJCQ0KKwkJCQkJDQorCQkJCQlpZiAoICR2YWx1ZXNbMF0gPT0gJ2dpZicgJiYgaXNfY2FsbGFibGUoYXJyYXkoJGltZywgJ3ByZXNlcnZlVHJhbnNwYXJlbmN5Rm9yUGFsZXR0ZScpKSkNCisJCQkJCXsNCisJCQkJCQkkaW1nLT5wcmVzZXJ2ZVRyYW5zcGFyZW5jeUZvclBhbGV0dGUoKTsNCisJCQkJCX0NCisJCQkJCSRpbWctPnNhdmUoJG5ld0Z1bGxwYXRoLCAkdmFsdWVzWzBdICk7DQorCQkJCQkkaW1nLT5mcmVlKCk7DQorCQkJDQorCQkJCQkvL2dldCB0aGUgaW1hZ2UgaW5mb3JtYXRpb24NCisJCQkJCSRpbWdJbmZvID0gQGdldGltYWdlc2l6ZSgkbmV3RnVsbHBhdGgpOw0KKwkJCQkNCisJCQkJCSRpbWFnZVsnc3JjJ10gPSAkbmV3VVJMOw0KKwkJCSAgICAJJGltYWdlWyd3aWR0aCddID0gJGltZ0luZm9bMF07DQorCQkJICAgCQkkaW1hZ2VbJ2hlaWdodCddID0gJGltZ0luZm9bMV07DQorCQkJCQkkaW1hZ2VbJ2RpbWVuc2lvbnMnXSA9ICRpbWdJbmZvWzNdOw0KKwkJCQkJJGltYWdlWydmaWxlJ10gPSAkcmVsYXRpdmU7DQorCQkJCQkkaW1hZ2VbJ2Z1bGxwYXRoJ10gPSAkZnVsbHBhdGg7DQorCQkJCQkkaW1hZ2VbJ2ZpbGVzaXplJ10gPSBAZmlsZXNpemUoJG5ld0Z1bGxwYXRoKTsNCisNCisJCQkJCVJldHVybiAkaW1hZ2U7DQorCQ0KKwkJCQlicmVhazsNCisJCX0NCisJCQ0KKwkJLy9jcmVhdGUgdGhlIHRtcCBpbWFnZSBmaWxlDQorCQkkZmlsZW5hbWUgPSAkdGhpcy0+Y3JlYXRlVW5pcXVlKCRmdWxscGF0aCk7DQorCQkkbmV3UmVsYXRpdmUgPSAkdGhpcy0+bWFrZVJlbGF0aXZlKCRyZWxhdGl2ZSwgJGZpbGVuYW1lKTsNCisJCSRuZXdGdWxscGF0aCA9ICR0aGlzLT5tYW5hZ2VyLT5nZXRGdWxsUGF0aCgkbmV3UmVsYXRpdmUpOw0KKwkJJG5ld1VSTCA9ICR0aGlzLT5tYW5hZ2VyLT5nZXRGaWxlVVJMKCRuZXdSZWxhdGl2ZSk7DQorDQorCQkvL3NhdmUgdGhlIGZpbGUuDQorCQkkaW1nLT5zYXZlKCRuZXdGdWxscGF0aCwgJ3BuZycgKTsNCisJCSRpbWctPmZyZWUoKTsNCisNCisJCS8vZ2V0IHRoZSBpbWFnZSBpbmZvcm1hdGlvbg0KKwkJJGltZ0luZm8gPSBAZ2V0aW1hZ2VzaXplKCRuZXdGdWxscGF0aCk7DQorDQorCQkkaW1hZ2VbJ3NyYyddID0gJG5ld1VSTDsNCisgICAgCSRpbWFnZVsnd2lkdGgnXSA9ICRpbWdJbmZvWzBdOw0KKyAgIAkJJGltYWdlWydoZWlnaHQnXSA9ICRpbWdJbmZvWzFdOw0KKwkJJGltYWdlWydkaW1lbnNpb25zJ10gPSAkaW1nSW5mb1szXTsNCisJCSRpbWFnZVsnZmlsZSddID0gJG5ld1JlbGF0aXZlOw0KKwkJJGltYWdlWydmdWxscGF0aCddID0gJG5ld0Z1bGxwYXRoOw0KKwkJJGltYWdlWydmaWxlc2l6ZSddID0gQGZpbGVzaXplKCRuZXdGdWxscGF0aCk7DQorCQkkaW1hZ2VbJ3R5cGUnXSA9IGltYWdlX3R5cGVfdG9fbWltZV90eXBlKCRpbWdJbmZvWzJdKTsNCisJCQ0KKwkJUmV0dXJuICRpbWFnZTsNCisJDQorCX0NCisNCisJLyoqDQorCSAqIEdldCB0aGUgZmlsZSBuYW1lIGJhc2Ugb24gdGhlIHNhdmUgbmFtZQ0KKwkgKiBhbmQgdGhlIHNhdmUgdHlwZS4NCisJICogQHBhcmFtIHN0cmluZyAkdHlwZSBpbWFnZSB0eXBlLCAnanBlZycsICdwbmcnLCBvciAnZ2lmJw0KKwkgKiBAcmV0dXJuIHN0cmluZyB0aGUgZmlsZW5hbWUgYWNjb3JkaW5nIHRvIHNhdmUgdHlwZQ0KKwkgKi8NCisJZnVuY3Rpb24gZ2V0U2F2ZUZpbGVOYW1lKCR0eXBlKSANCisJew0KKwkJaWYoIWlzc2V0KCRfR0VUWydmaWxlJ10pKQ0KKwkJCVJldHVybiBudWxsOw0KKw0KKwkJJGZpbGVuYW1lID0gRmlsZXM6OmVzY2FwZShyYXd1cmxkZWNvZGUoJF9HRVRbJ2ZpbGUnXSkpOw0KKwkJJGluZGV4ID0gc3RycnBvcygkZmlsZW5hbWUsJy4nKTsNCisJCSRiYXNlID0gc3Vic3RyKCRmaWxlbmFtZSwwLCRpbmRleCk7DQorCQkkZXh0ID0gc3RydG9sb3dlcihzdWJzdHIoJGZpbGVuYW1lLCRpbmRleCsxLHN0cmxlbigkZmlsZW5hbWUpKSk7DQorDQorCQlpZigkdHlwZSA9PSAnanBlZycgJiYgISgkZXh0PT0nanBlZycgfHwgJGV4dD09J2pwZycpKQ0KKwkJew0KKwkJCVJldHVybiAkYmFzZS4nLmpwZWcnOw0KKwkJfQ0KKwkJaWYoJHR5cGU9PSdwbmcnICYmICRleHQgIT0gJ3BuZycpDQorCQkJUmV0dXJuICRiYXNlLicucG5nJzsNCisJCWlmKCR0eXBlPT0nZ2lmJyAmJiAkZXh0ICE9ICdnaWYnKQ0KKwkJCVJldHVybiAkYmFzZS4nLmdpZic7DQorDQorICAgIC8vIEVuc3VyZSB0eXBlIGlzIGluIGFjY2VwdGFibGUgaW1hZ2UgdHlwZXMNCisgICAgJHZhbGlkX2V4dGVuc2lvbnMgPSAkdGhpcy0+bWFuYWdlci0+Y29uZmlnWydhbGxvd2VkX2ltYWdlX2V4dGVuc2lvbnMnXTsgICAgDQorICAgIGlmKCFpbl9hcnJheSgkZXh0LCAkdmFsaWRfZXh0ZW5zaW9ucykpDQorCQl7DQorICAgICAgcmV0dXJuICRiYXNlIC4gIi4iLnN0cnRvbG93ZXIoJHR5cGUgPyAkdHlwZSA6ICdqcGcnKTsNCisJCX0NCisgICAgDQorCQlSZXR1cm4gJGZpbGVuYW1lOw0KKwl9DQorDQorCS8qKg0KKwkgKiBHZXQgdGhlIGRlZmF1bHQgc2F2ZSBmaWxlIG5hbWUsIHVzZWQgYnkgZWRpdG9yLnBocC4NCisJICogQHJldHVybiBzdHJpbmcgYSBzdWdnZXN0aXZlIGZpbGVuYW1lLCB0aGlzIHNob3VsZCBiZSB1bmlxdWUNCisJICovDQorCWZ1bmN0aW9uIGdldERlZmF1bHRTYXZlRmlsZSgpIA0KKwl7DQorCQlpZihpc3NldCgkX0dFVFsnaW1nJ10pKQ0KKwkJCSRyZWxhdGl2ZSA9IHJhd3VybGRlY29kZSgkX0dFVFsnaW1nJ10pOw0KKwkJZWxzZQ0KKwkJCVJldHVybiBudWxsOw0KKw0KKwkJUmV0dXJuICR0aGlzLT5nZXRVbmlxdWVGaWxlbmFtZSgkcmVsYXRpdmUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBHZXQgYSB1bmlxdWUgZmlsZW5hbWUuIElmIHRoZSBmaWxlIGV4aXN0cywgdGhlIGZpbGVuYW1lDQorCSAqIGJhc2UgaXMgYXBwZW5kZWQgd2l0aCBhbiBpbmNyZWFzaW5nIGludGVnZXIuDQorCSAqIEBwYXJhbSBzdHJpbmcgJHJlbGF0aXZlIHRoZSByZWxhdGl2ZSBmaWxlbmFtZSB0byB0aGUgYmFzZV9kaXINCisJICogQHJldHVybiBzdHJpbmcgYSB1bmlxdWUgZmlsZW5hbWUgaW4gdGhlIGN1cnJlbnQgcGF0aA0KKwkgKi8NCisJZnVuY3Rpb24gZ2V0VW5pcXVlRmlsZW5hbWUoJHJlbGF0aXZlKSANCisJew0KKwkJJGZ1bGxwYXRoID0gJHRoaXMtPm1hbmFnZXItPmdldEZ1bGxQYXRoKCRyZWxhdGl2ZSk7DQorCQkNCisJCSRwYXRoaW5mbyA9IHBhdGhpbmZvKCRmdWxscGF0aCk7DQorDQorCQkkcGF0aCA9IEZpbGVzOjpmaXhQYXRoKCRwYXRoaW5mb1snZGlybmFtZSddKTsNCisJCSRmaWxlID0gRmlsZXM6OmVzY2FwZSgkcGF0aGluZm9bJ2Jhc2VuYW1lJ10pOw0KKwkJDQorCQkkZmlsZW5hbWUgPSAkZmlsZTsNCisNCisJCSRkb3RJbmRleCA9IHN0cnJwb3MoJGZpbGUsICcuJyk7DQorCQkkZXh0ID0gJyc7DQorDQorCQlpZihpc19pbnQoJGRvdEluZGV4KSkgDQorCQl7DQorCQkJJGV4dCA9IHN1YnN0cigkZmlsZSwgJGRvdEluZGV4KTsNCisJCQkkYmFzZSA9IHN1YnN0cigkZmlsZSwgMCwgJGRvdEluZGV4KTsNCisJCX0NCisNCisJCSRjb3VudGVyID0gMDsNCisJCXdoaWxlKGlzX2ZpbGUoJHBhdGguJGZpbGVuYW1lKSkgDQorCQl7DQorCQkJJGNvdW50ZXIrKzsNCisJCQkkZmlsZW5hbWUgPSAkYmFzZS4nXycuJGNvdW50ZXIuJGV4dDsNCisJCX0NCisJCQ0KKwkJUmV0dXJuICRmaWxlbmFtZTsNCisJCQ0KKwl9DQorDQorCS8qKg0KKwkgKiBTcGVjaWZpeSB0aGUgb3JpZ2luYWwgcmVsYXRpdmUgcGF0aCwgYSBuZXcgZmlsZW5hbWUNCisJICogYW5kIHJldHVybiB0aGUgbmV3IGZpbGVuYW1lIHdpdGggcmVsYXRpdmUgcGF0aC4NCisJICogaS5lLiAkcGF0aEEgKC1maWxlbmFtZSkgKyAkZmlsZQ0KKwkgKiBAcGFyYW0gc3RyaW5nICRwYXRoQSB0aGUgcmVsYXRpdmUgZmlsZQ0KKwkgKiBAcGFyYW0gc3RyaW5nICRmaWxlIHRoZSBuZXcgZmlsZW5hbWUNCisJICogQHJldHVybiBzdHJpbmcgcmVsYXRpdmUgcGF0aCB3aXRoIHRoZSBuZXcgZmlsZW5hbWUNCisJICovDQorCWZ1bmN0aW9uIG1ha2VSZWxhdGl2ZSgkcGF0aEEsICRmaWxlKSANCisJew0KKwkJJGluZGV4ID0gc3RycnBvcygkcGF0aEEsJy8nKTsNCisJCWlmKCFpc19pbnQoJGluZGV4KSkNCisJCQlSZXR1cm4gJGZpbGU7DQorDQorCQkkcGF0aCA9IHN1YnN0cigkcGF0aEEsIDAsICRpbmRleCk7DQorCQlSZXR1cm4gRmlsZXM6OmZpeFBhdGgoJHBhdGgpLiRmaWxlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBHZXQgdGhlIGFjdGlvbiBHRVQgcGFyYW1ldGVyDQorCSAqIEByZXR1cm4gc3RyaW5nIGFjdGlvbiBwYXJhbWV0ZXINCisJICovDQorCWZ1bmN0aW9uIGdldEFjdGlvbigpIA0KKwl7DQorCQkkYWN0aW9uID0gbnVsbDsNCisJCWlmKGlzc2V0KCRfR0VUWydhY3Rpb24nXSkpDQorCQkJJGFjdGlvbiA9ICRfR0VUWydhY3Rpb24nXTsNCisJCVJldHVybiAkYWN0aW9uOw0KKwl9DQorDQorCS8qKg0KKwkgKiBHZW5lcmF0ZSBhIHVuaXF1ZSBzdHJpbmcgYmFzZWQgb24gbWQ1KG1pY3JvdGltZSgpKS4NCisJICogV2VsbCBub3Qgc28gdW5pcWUsIGFzIGl0IGlzIGxpbWl0ZWQgdG8gNiBjaGFyYWN0ZXJzDQorCSAqIEByZXR1cm4gc3RyaW5nIHVuaXF1ZSBzdHJpbmcuDQorCSAqLw0KKyAgICBmdW5jdGlvbiB1bmlxdWVTdHIoKQ0KKyAgICB7DQorICAgICAgcmV0dXJuIHN1YnN0cihtZDUobWljcm90aW1lKCkpLDAsNik7DQorICAgIH0NCisNCisJLyoqDQorCSAqIENyZWF0ZSB1bmlxdWUgdG1wIGltYWdlIGZpbGUgbmFtZS4NCisJICogVGhlIGZpbGVuYW1lIGlzIGJhc2VkIG9uIHRoZSB0bXAgZmlsZSBwcmVmaXgNCisJICogc3BlY2lmaWVkIGluIGNvbmZpZy5pbmMucGhwIHBsdXMgDQorCSAqIHRoZSBVSUQgKGJhc2ljYWxseSBhIG1kNSBvZiB0aGUgcmVtb3RlIElQKQ0KKwkgKiBhbmQgc29tZSByYW5kb20gNiBjaGFyYWN0ZXIgc3RyaW5nLg0KKwkgKiBUaGlzIGZ1bmN0aW9uIGFsc28gY2FsbHMgdG8gY2xlYW4gdXAgdGhlIHRtcCBmaWxlcy4NCisJICogQHBhcmFtIHN0cmluZyAkZmlsZSB0aGUgZnVsbHBhdGggdG8gYSBmaWxlDQorCSAqIEByZXR1cm4gc3RyaW5nIGEgdW5pcXVlIGZpbGVuYW1lIGZvciB0aGF0IHBhdGgNCisJICogTk9URTogaXQgb25seSByZXR1cm5zIHRoZSBmaWxlbmFtZSwgcGF0aCBubyBpbmNsdWRlZC4NCisJICovDQorCWZ1bmN0aW9uIGNyZWF0ZVVuaXF1ZSgkZmlsZSkgDQorCXsNCisJCSRwYXRoaW5mbyA9IHBhdGhpbmZvKCRmaWxlKTsNCisJCSRwYXRoID0gRmlsZXM6OmZpeFBhdGgoJHBhdGhpbmZvWydkaXJuYW1lJ10pOw0KKwkJJGltZ1R5cGUgPSAkdGhpcy0+Z2V0SW1hZ2VUeXBlKCRmaWxlKTsNCisNCisJCSR1bmlxdWVfc3RyID0gJHRoaXMtPm1hbmFnZXItPmdldFRtcFByZWZpeCgpLiR0aGlzLT5fdWlkLidfJy4kdGhpcy0+dW5pcXVlU3RyKCkuIi4iLiRpbWdUeXBlOw0KKw0KKwkgICAvL21ha2Ugc3VyZSB0aGUgdGhlIHVuaXF1ZSB0ZW1wIGZpbGUgZG9lcyBub3QgZXhpc3RzDQorICAgICAgICB3aGlsZSAoZmlsZV9leGlzdHMoJHBhdGguJHVuaXF1ZV9zdHIpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgICR1bmlxdWVfc3RyID0gJHRoaXMtPm1hbmFnZXItPmdldFRtcFByZWZpeCgpLiR0aGlzLT5fdWlkLidfJy4kdGhpcy0+dW5pcXVlU3RyKCkuIi4iLiRpbWdUeXBlOw0KKyAgICAgICAgfQ0KKw0KKwkJJHRoaXMtPmNsZWFuVXAoJHBhdGgsJHBhdGhpbmZvWydiYXNlbmFtZSddKTsNCisNCisJCVJldHVybiAkdW5pcXVlX3N0cjsNCisJfQ0KKw0KKwkvKioNCisJICogRGVsZXRlIGFueSB0bXAgaW1hZ2UgZmlsZXMuDQorCSAqIEBwYXJhbSBzdHJpbmcgJHBhdGggdGhlIGZ1bGwgcGF0aCANCisJICogd2hlcmUgdGhlIGNsZWFuIHNob3VsZCB0YWtlIHBsYWNlLg0KKwkgKi8NCisJZnVuY3Rpb24gY2xlYW5VcCgkcGF0aCwkZmlsZSkgDQorCXsNCisJCSRwYXRoID0gRmlsZXM6OmZpeFBhdGgoJHBhdGgpOw0KKw0KKwkJaWYoIWlzX2RpcigkcGF0aCkpDQorCQkJUmV0dXJuIGZhbHNlOw0KKw0KKwkJJGQgPSBAZGlyKCRwYXRoKTsNCisJCQ0KKwkJJHRtcCA9ICR0aGlzLT5tYW5hZ2VyLT5nZXRUbXBQcmVmaXgoKTsNCisJCSR0bXBMZW4gPSBzdHJsZW4oJHRtcCk7DQorDQorCQkkcHJlZml4ID0gJHRtcC4kdGhpcy0+X3VpZDsNCisJCSRsZW4gPSBzdHJsZW4oJHByZWZpeCk7DQorDQorCQl3aGlsZSAoZmFsc2UgIT09ICgkZW50cnkgPSAkZC0+cmVhZCgpKSkgDQorCQl7DQorCQkJLy9lY2hvICRlbnRyeS4iPGJyPiI7DQorCQkJaWYoaXNfZmlsZSgkcGF0aC4kZW50cnkpICYmICR0aGlzLT5tYW5hZ2VyLT5pc1RtcEZpbGUoJGVudHJ5KSkNCisJCQl7DQorCQkJCWlmKHN1YnN0cigkZW50cnksMCwkbGVuKT09JHByZWZpeCAmJiAkZW50cnkgIT0gJGZpbGUpDQorCQkJCQlGaWxlczo6ZGVsRmlsZSgkcGF0aC4kZW50cnkpOw0KKwkJCQllbHNlIGlmKHN1YnN0cigkZW50cnksMCwkdG1wTGVuKT09JHRtcCAmJiAkZW50cnkgIT0gJGZpbGUpDQorCQkJCXsNCisJCQkJCWlmKGZpbGVtdGltZSgkcGF0aC4kZW50cnkpKyR0aGlzLT5sYXBzZV90aW1lIDwgdGltZSgpKQ0KKwkJCQkJCUZpbGVzOjpkZWxGaWxlKCRwYXRoLiRlbnRyeSk7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCQkkZC0+Y2xvc2UoKTsNCisJfQ0KKw0KKwkvKioNCisJICogR2V0IHRoZSBpbWFnZSB0eXBlIGJhc2Ugb24gYW4gaW1hZ2UgZmlsZS4NCisJICogQHBhcmFtIHN0cmluZyAkZmlsZSB0aGUgZnVsbCBwYXRoIHRvIHRoZSBpbWFnZSBmaWxlLg0KKwkgKiBAcmV0dXJuIHN0cmluZyBvZiBlaXRoZXIgJ2dpZicsICdqcGVnJywgJ3BuZycgb3IgJ2JtcCcNCisJICogb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIG51bGwuDQorCSAqLw0KKwlmdW5jdGlvbiBnZXRJbWFnZVR5cGUoJGZpbGUpIA0KKwl7DQorCQkkaW1hZ2VJbmZvID0gQGdldEltYWdlU2l6ZSgkZmlsZSk7DQorDQorCQlpZighaXNfYXJyYXkoJGltYWdlSW5mbykpDQorCQkJUmV0dXJuIG51bGw7DQorDQorCQlzd2l0Y2goJGltYWdlSW5mb1syXSkgDQorCQl7DQorCQkJY2FzZSAxOg0KKwkJCQlSZXR1cm4gJ2dpZic7DQorCQkJY2FzZSAyOg0KKwkJCQlSZXR1cm4gJ2pwZWcnOw0KKwkJCWNhc2UgMzoNCisJCQkJUmV0dXJuICdwbmcnOw0KKwkJCWNhc2UgNjoNCisJCQkJUmV0dXJuICdibXAnOw0KKwkJfQ0KKw0KKwkJUmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENoZWNrIGlmIHRoZSBzcGVjaWZpZWQgaW1hZ2UgY2FuIGJlIGVkaXQgYnkgR0QNCisJICogbWFpbmx5IHRvIGNoZWNrIHRoYXQgR0QgY2FuIHJlYWQgYW5kIHNhdmUgR0lGcw0KKwkgKiBAcmV0dXJuIGludCAwIGlmIGl0IGlzIG5vdCBhIEdJRiBmaWxlLCAxIGlzIEdJRiBpcyBlZGl0YWJsZSwgLTEgaWYgbm90IGVkaXRhYmxlLg0KKwkgKi8NCisJZnVuY3Rpb24gaXNHREVkaXRhYmxlKCkgDQorCXsNCisJCWlmKGlzc2V0KCRfR0VUWydpbWcnXSkpDQorCQkJJHJlbGF0aXZlID0gcmF3dXJsZGVjb2RlKCRfR0VUWydpbWcnXSk7DQorCQllbHNlDQorCQkJUmV0dXJuIDA7DQorCQlpZihJTUFHRV9DTEFTUyAhPSAnR0QnKQ0KKwkJCVJldHVybiAwOw0KKw0KKwkJJGZ1bGxwYXRoID0gJHRoaXMtPm1hbmFnZXItPmdldEZ1bGxQYXRoKCRyZWxhdGl2ZSk7DQorIA0KKwkJJHR5cGUgPSAkdGhpcy0+Z2V0SW1hZ2VUeXBlKCRmdWxscGF0aCk7DQorCQlpZigkdHlwZSAhPSAnZ2lmJykNCisJCQlSZXR1cm4gMDsNCisNCisJCWlmKGZ1bmN0aW9uX2V4aXN0cygnSW1hZ2VDcmVhdGVGcm9tJy4kdHlwZSkNCisJCQkmJiBmdW5jdGlvbl9leGlzdHMoJ2ltYWdlJy4kdHlwZSkpDQorCQkJUmV0dXJuIDE7DQorCQllbHNlDQorCQkJUmV0dXJuIC0xOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDaGVjayBpZiBHSUYgY2FuIGJlIGVkaXQgYnkgR0QuDQorCSAqIEByZXR1cm4gaW50IDAgaWYgaXQgaXMgbm90IHVzaW5nIHRoZSBHRCBsaWJyYXJ5LCAxIGlzIEdJRiBpcyBlZGl0YWJsZSwgLTEgaWYgbm90IGVkaXRhYmxlLg0KKwkgKi8NCisJZnVuY3Rpb24gaXNHREdJRkFibGUoKSANCisJew0KKwkJaWYoSU1BR0VfQ0xBU1MgIT0gJ0dEJykNCisJCQlSZXR1cm4gMDsNCisNCisJCWlmKGZ1bmN0aW9uX2V4aXN0cygnSW1hZ2VDcmVhdGVGcm9tR2lmJykNCisJCQkmJiBmdW5jdGlvbl9leGlzdHMoJ2ltYWdlZ2lmJykpDQorCQkJUmV0dXJuIDE7DQorCQllbHNlDQorCQkJUmV0dXJuIC0xOw0KKwl9DQorfQ0KKw0KKz8+DQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvQ2xhc3Nlcy9JbWFnZU1hbmFnZXIucGhwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvQ2xhc3Nlcy9JbWFnZU1hbmFnZXIucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNGE1ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9DbGFzc2VzL0ltYWdlTWFuYWdlci5waHAKQEAgLTAsMCArMSw2NzIgQEAKKzw/cGhwDQorLyoqDQorICogSW1hZ2VNYW5hZ2VyLCBsaXN0IGltYWdlcywgZGlyZWN0b3JpZXMsIGFuZCB0aHVtYm5haWxzLg0KKyAqIEBhdXRob3IgJEF1dGhvcjpyYXkgJA0KKyAqIEB2ZXJzaW9uICRJZDpJbWFnZU1hbmFnZXIucGhwIDcwOSAyMDA3LTAxLTMwIDIzOjIyOjA0WiByYXkgJA0KKyAqIEBwYWNrYWdlIEltYWdlTWFuYWdlcg0KKyAqLw0KKw0KK3JlcXVpcmVfb25jZSgnLi4vSW1hZ2VNYW5hZ2VyL0NsYXNzZXMvRmlsZXMucGhwJyk7DQorDQorLy8gdW5jb21tZW50IHRvIHR1cm4gb24gZGVidWdnaW5nDQorDQorLy8gX2RkdE9uKCk7DQorDQorLyoqDQorICogSW1hZ2VNYW5hZ2VyIENsYXNzLg0KKyAqIEBhdXRob3IgJEF1dGhvcjpyYXkgJA0KKyAqIEB2ZXJzaW9uICRJZDpJbWFnZU1hbmFnZXIucGhwIDcwOSAyMDA3LTAxLTMwIDIzOjIyOjA0WiByYXkgJA0KKyAqLw0KK2NsYXNzIEltYWdlTWFuYWdlciANCit7DQorCS8qKg0KKwkgKiBDb25maWd1cmF0aW9uIGFycmF5Lg0KKwkgKi8NCisJdmFyICRjb25maWc7DQorDQorCS8qKg0KKwkgKiBBcnJheSBvZiBkaXJlY3RvcnkgaW5mb3JtYXRpb24uDQorCSAqLw0KKwl2YXIgJGRpcnM7DQorDQorCS8qKg0KKwkgKiBDb25zdHJ1Y3Rvci4gQ3JlYXRlIGEgbmV3IEltYWdlIE1hbmFnZXIgaW5zdGFuY2UuDQorCSAqIEBwYXJhbSBhcnJheSAkY29uZmlnIGNvbmZpZ3VyYXRpb24gYXJyYXksIHNlZSBjb25maWcuaW5jLnBocA0KKwkgKi8NCisJZnVuY3Rpb24gSW1hZ2VNYW5hZ2VyKCRjb25maWcpIA0KKwl7DQorCQkkdGhpcy0+Y29uZmlnID0gJGNvbmZpZzsNCisJfQ0KKw0KKwkvKioNCisJICogR2V0IHRoZSBpbWFnZXMgYmFzZSBkaXJlY3RvcnkuDQorCSAqIEByZXR1cm4gc3RyaW5nIGJhc2UgZGlyLCBzZWUgY29uZmlnLmluYy5waHANCisJICovDQorCWZ1bmN0aW9uIGdldEltYWdlc0RpcigpIA0KKwl7DQorCQlSZXR1cm4gJHRoaXMtPmNvbmZpZ1snaW1hZ2VzX2RpciddOw0KKwl9DQorDQorCS8qKg0KKwkgKiBHZXQgdGhlIGltYWdlcyBiYXNlIFVSTC4NCisJICogQHJldHVybiBzdHJpbmcgYmFzZSB1cmwsIHNlZSBjb25maWcuaW5jLnBocA0KKwkgKi8NCisJZnVuY3Rpb24gZ2V0SW1hZ2VzVVJMKCkgDQorCXsNCisJCVJldHVybiAkdGhpcy0+Y29uZmlnWydpbWFnZXNfdXJsJ107DQorCX0NCisNCisJZnVuY3Rpb24gaXNWYWxpZEJhc2UoKQ0KKwl7DQorCQlyZXR1cm4gaXNfZGlyKCR0aGlzLT5nZXRJbWFnZXNEaXIoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIEdldCB0aGUgdG1wIGZpbGUgcHJlZml4Lg0KKwkgKiBAcmV0dXJuIHN0cmluZyB0bXAgZmlsZSBwcmVmaXguDQorCSAqLw0KKwlmdW5jdGlvbiBnZXRUbXBQcmVmaXgoKSANCisJew0KKwkJUmV0dXJuICR0aGlzLT5jb25maWdbJ3RtcF9wcmVmaXgnXTsNCisJfQ0KKw0KKwkvKioNCisJICogR2V0IHRoZSBzdWIgZGlyZWN0b3JpZXMgaW4gdGhlIGJhc2UgZGlyLg0KKwkgKiBFYWNoIGFycmF5IGVsZW1lbnQgY29udGFpbg0KKwkgKiB0aGUgcmVsYXRpdmUgcGF0aCAocmVsYXRpdmUgdG8gdGhlIGJhc2UgZGlyKSBhcyBrZXkgYW5kIHRoZSANCisJICogZnVsbCBwYXRoIGFzIHZhbHVlLg0KKwkgKiBAcmV0dXJuIGFycmF5IG9mIHN1YiBkaXJlY3RyaWVzDQorCSAqIDxjb2RlPmFycmF5KCdwYXRoIG5hbWUnID0+ICdmdWxsIGRpcmVjdG9yeSBwYXRoJywgLi4uKTwvY29kZT4NCisJICovDQorCWZ1bmN0aW9uIGdldERpcnMoKSANCisJew0KKwkJaWYoaXNfbnVsbCgkdGhpcy0+ZGlycykpDQorCQl7DQorCQkJJGRpcnMgPSAkdGhpcy0+X2RpcnMoJHRoaXMtPmdldEltYWdlc0RpcigpLCcvJyk7DQorCQkJa3NvcnQoJGRpcnMpOw0KKwkJCSR0aGlzLT5kaXJzID0gJGRpcnM7DQorCQl9DQorCQlyZXR1cm4gJHRoaXMtPmRpcnM7DQorCX0NCisNCisJLyoqDQorCSAqIFJlY3Vyc2l2ZWx5IHRyYXZlc2UgdGhlIGRpcmVjdG9yaWVzIHRvIGdldCBhIGxpc3QNCisJICogb2YgYWNjZXNzYWJsZSBkaXJlY3Rvcmllcy4NCisJICogQHBhcmFtIHN0cmluZyAkYmFzZSB0aGUgZnVsbCBwYXRoIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeQ0KKwkgKiBAcGFyYW0gc3RyaW5nICRwYXRoIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUNCisJICogQHJldHVybiBhcnJheSBvZiBhY2Nlc3NpYWJsZSBzdWItZGlyZWN0b3JpZXMNCisJICogPGNvZGU+YXJyYXkoJ3BhdGggbmFtZScgPT4gJ2Z1bGwgZGlyZWN0b3J5IHBhdGgnLCAuLi4pPC9jb2RlPg0KKwkgKi8NCisJZnVuY3Rpb24gX2RpcnMoJGJhc2UsICRwYXRoKSANCisJew0KKwkJJGJhc2UgPSBGaWxlczo6Zml4UGF0aCgkYmFzZSk7DQorCQkkZGlycyA9IGFycmF5KCk7DQorDQorCQlpZigkdGhpcy0+aXNWYWxpZEJhc2UoKSA9PSBmYWxzZSkNCisJCQlyZXR1cm4gJGRpcnM7DQorDQorCQkkZCA9IEBkaXIoJGJhc2UpOw0KKwkJDQorCQl3aGlsZSAoZmFsc2UgIT09ICgkZW50cnkgPSAkZC0+cmVhZCgpKSkgDQorCQl7DQorCQkJLy9JZiBpdCBpcyBhIGRpcmVjdG9yeSwgYW5kIGl0IGRvZXNuJ3Qgc3RhcnQgd2l0aA0KKwkJCS8vIGEgZG90LCBhbmQgaWYgaXMgaXQgbm90IHRoZSB0aHVtYm5haWwgZGlyZWN0b3J5DQorCQkJaWYoaXNfZGlyKCRiYXNlLiRlbnRyeSkgDQorCQkJCSYmIHN1YnN0cigkZW50cnksMCwxKSAhPSAnLicNCisJCQkJJiYgJHRoaXMtPmlzVGh1bWJEaXIoJGVudHJ5KSA9PSBmYWxzZSkgDQorCQkJew0KKwkJCQkkcmVsYXRpdmUgPSBGaWxlczo6Zml4UGF0aCgkcGF0aC4kZW50cnkpOw0KKwkJCQkkZnVsbHBhdGggPSBGaWxlczo6Zml4UGF0aCgkYmFzZS4kZW50cnkpOw0KKwkJCQkkZGlyc1skcmVsYXRpdmVdID0gJGZ1bGxwYXRoOw0KKwkJCQkkZGlycyA9IGFycmF5X21lcmdlKCRkaXJzLCAkdGhpcy0+X2RpcnMoJGZ1bGxwYXRoLCAkcmVsYXRpdmUpKTsNCisJCQl9DQorCQl9DQorCQkkZC0+Y2xvc2UoKTsNCisNCisJCVJldHVybiAkZGlyczsNCisJfQ0KKw0KKwkvKioNCisJICogR2V0IGFsbCB0aGUgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIG9mIGEgcmVsYXRpdmUgcGF0aC4NCisJICogQHBhcmFtIHN0cmluZyAkcGF0aCByZWxhdGl2ZSBwYXRoIHRvIGJlIGJhc2UgcGF0aC4NCisJICogQHJldHVybiBhcnJheSBvZiBmaWxlIGFuZCBwYXRoIGluZm9ybWF0aW9uLg0KKwkgKiA8Y29kZT5hcnJheSgwPT5hcnJheSgncmVsYXRpdmUnPT4nZnVsbHBhdGgnLC4uLiksIDE9PmFycmF5KCdmaWxlbmFtZSc9PmZpbGVpbmZvIGFycmF5KCksLi4uKTwvY29kZT4NCisJICogZmlsZWluZm8gYXJyYXk6IDxjb2RlPmFycmF5KCd1cmwnPT4nZnVsbCB1cmwnLCANCisJICogICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZSc9PidyZWxhdGl2ZSB0byBiYXNlJywgDQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgJ2Z1bGxwYXRoJz0+J2Z1bGwgZmlsZSBwYXRoJywgDQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgJ2ltYWdlJz0+aW1hZ2VJbmZvIGFycmF5KCkgZmFsc2UgaWYgbm90IGltYWdlLA0KKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0JyA9PiBmaWxlc3RhdCk8L2NvZGU+DQorCSAqLw0KKwlmdW5jdGlvbiBnZXRGaWxlcygkcGF0aCkgDQorCXsNCisJCSRmaWxlcyA9IGFycmF5KCk7DQorCQkkZGlycyA9IGFycmF5KCk7DQorDQorCQlpZigkdGhpcy0+aXNWYWxpZEJhc2UoKSA9PSBmYWxzZSkNCisJCQlyZXR1cm4gYXJyYXkoJGZpbGVzLCRkaXJzKTsNCisNCisJCSRwYXRoID0gRmlsZXM6OmZpeFBhdGgoJHBhdGgpOw0KKwkJJGJhc2UgPSBGaWxlczo6Zml4UGF0aCgkdGhpcy0+Z2V0SW1hZ2VzRGlyKCkpOw0KKwkJJGZ1bGxwYXRoID0gRmlsZXM6Om1ha2VQYXRoKCRiYXNlLCRwYXRoKTsNCisNCisNCisJCSRkID0gQGRpcigkZnVsbHBhdGgpOw0KKwkJDQorCQl3aGlsZSAoZmFsc2UgIT09ICgkZW50cnkgPSAkZC0+cmVhZCgpKSkgDQorCQl7DQorCQkJLy9ub3QgYSBkb3QgZmlsZSBvciBkaXJlY3RvcnkNCisJCQlpZihzdWJzdHIoJGVudHJ5LDAsMSkgIT0gJy4nKQ0KKwkJCXsNCisJCQkJaWYoaXNfZGlyKCRmdWxscGF0aC4kZW50cnkpDQorCQkJCQkmJiAkdGhpcy0+aXNUaHVtYkRpcigkZW50cnkpID09IGZhbHNlKQ0KKwkJCQl7DQorCQkJCQkkcmVsYXRpdmUgPSBGaWxlczo6Zml4UGF0aCgkcGF0aC4kZW50cnkpOw0KKwkJCQkJJGZ1bGwgPSBGaWxlczo6Zml4UGF0aCgkZnVsbHBhdGguJGVudHJ5KTsNCisJCQkJCSRjb3VudCA9ICR0aGlzLT5jb3VudEZpbGVzKCRmdWxsKTsNCisJCQkJCSRkaXJzWyRyZWxhdGl2ZV0gPSBhcnJheSgnZnVsbHBhdGgnPT4kZnVsbCwnZW50cnknPT4kZW50cnksJ2NvdW50Jz0+JGNvdW50KTsNCisJCQkJfQ0KKwkJCQllbHNlIGlmKGlzX2ZpbGUoJGZ1bGxwYXRoLiRlbnRyeSkgJiYgJHRoaXMtPmlzVGh1bWIoJGVudHJ5KT09ZmFsc2UgJiYgJHRoaXMtPmlzVG1wRmlsZSgkZW50cnkpID09IGZhbHNlKSANCisJCQkJew0KKwkJCQkJJGltZyA9ICR0aGlzLT5nZXRJbWFnZUluZm8oJGZ1bGxwYXRoLiRlbnRyeSk7DQorDQorCQkJCQlpZighKCFpc19hcnJheSgkaW1nKSYmJHRoaXMtPmNvbmZpZ1sndmFsaWRhdGVfaW1hZ2VzJ10pKQ0KKwkJCQkJew0KKwkJCQkJCSRmaWxlWyd1cmwnXSA9IEZpbGVzOjptYWtlUGF0aCgkdGhpcy0+Y29uZmlnWydiYXNlX3VybCddLCRwYXRoKS4kZW50cnk7DQorCQkJCQkJJGZpbGVbJ3JlbGF0aXZlJ10gPSAkcGF0aC4kZW50cnk7DQorCQkJCQkJJGZpbGVbJ2Z1bGxwYXRoJ10gPSAkZnVsbHBhdGguJGVudHJ5Ow0KKwkJCQkJCSRmaWxlWydpbWFnZSddID0gJGltZzsNCisJCQkJCQkkZmlsZVsnc3RhdCddID0gc3RhdCgkZnVsbHBhdGguJGVudHJ5KTsNCisJCQkJCQkkZmlsZXNbJGVudHJ5XSA9ICRmaWxlOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJJGQtPmNsb3NlKCk7DQorCQlrc29ydCgkZGlycyk7DQorCQlrc29ydCgkZmlsZXMpOw0KKwkJDQorCQlSZXR1cm4gYXJyYXkoJGRpcnMsICRmaWxlcyk7DQorCX0JDQorDQorCS8qKg0KKwkgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBpbiBhIGdpdmVuIGZvbGRlcg0KKwkgKiBtaW51cyB0aGUgdGh1bWJuYWlsIGZvbGRlcnMgYW5kIHRodW1ibmFpbHMuDQorCSAqLw0KKwlmdW5jdGlvbiBjb3VudEZpbGVzKCRwYXRoKSANCisJew0KKwkJJHRvdGFsID0gMDsNCisNCisJCWlmKGlzX2RpcigkcGF0aCkpIA0KKwkJew0KKwkJCSRkID0gQGRpcigkcGF0aCk7DQorDQorCQkJd2hpbGUgKGZhbHNlICE9PSAoJGVudHJ5ID0gJGQtPnJlYWQoKSkpIA0KKwkJCXsNCisJCQkJLy9lY2hvICRlbnRyeS4iPGJyPiI7DQorCQkJCWlmKHN1YnN0cigkZW50cnksMCwxKSAhPSAnLicNCisJCQkJCSYmICR0aGlzLT5pc1RodW1iRGlyKCRlbnRyeSkgPT0gZmFsc2UNCisJCQkJCSYmICR0aGlzLT5pc1RtcEZpbGUoJGVudHJ5KSA9PSBmYWxzZQ0KKwkJCQkJJiYgJHRoaXMtPmlzVGh1bWIoJGVudHJ5KSA9PSBmYWxzZSkgDQorCQkJCXsNCisJCQkJCSR0b3RhbCsrOw0KKwkJCQl9DQorCQkJfQ0KKwkJCSRkLT5jbG9zZSgpOw0KKwkJfQ0KKwkJcmV0dXJuICR0b3RhbDsNCisJfQ0KKw0KKwkvKioNCisJICogR2V0IGltYWdlIHNpemUgaW5mb3JtYXRpb24uDQorCSAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgdGhlIGltYWdlIGZpbGUNCisJICogQHJldHVybiBhcnJheSBvZiBnZXRJbWFnZVNpemUgaW5mb3JtYXRpb24sIA0KKwkgKiAgZmFsc2UgaWYgdGhlIGZpbGUgaXMgbm90IGFuIGltYWdlLg0KKwkgKi8NCisJZnVuY3Rpb24gZ2V0SW1hZ2VJbmZvKCRmaWxlKSANCisJew0KKwkJUmV0dXJuIEBnZXRJbWFnZVNpemUoJGZpbGUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDaGVjayBpZiB0aGUgZmlsZSBjb250YWlucyB0aGUgdGh1bWJuYWlsIHByZWZpeC4NCisJICogQHBhcmFtIHN0cmluZyAkZmlsZSBmaWxlbmFtZSB0byBiZSBjaGVja2VkDQorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsZSBjb250YWlucyB0aGUgdGh1bWJuYWlsIHByZWZpeCwgZmFsc2Ugb3RoZXJ3aXNlLg0KKwkgKi8NCisJZnVuY3Rpb24gaXNUaHVtYigkZmlsZSkgDQorCXsNCisJCSRsZW4gPSBzdHJsZW4oJHRoaXMtPmNvbmZpZ1sndGh1bWJuYWlsX3ByZWZpeCddKTsNCisJCWlmKHN1YnN0cigkZmlsZSwwLCRsZW4pPT0kdGhpcy0+Y29uZmlnWyd0aHVtYm5haWxfcHJlZml4J10pDQorCQkJUmV0dXJuIHRydWU7DQorCQllbHNlDQorCQkJUmV0dXJuIGZhbHNlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gZGlyZWN0b3J5IGlzIGEgdGh1bWJuYWlsIGRpcmVjdG9yeS4NCisJICogQHBhcmFtIHN0cmluZyAkZW50cnkgZGlyZWN0b3J5IG5hbWUNCisJICogQHJldHVybiB0cnVlIGlmIGl0IGlzIGEgdGh1bWJuYWlsIGRpcmVjdG9yeSwgZmFsc2Ugb3RoZXJ3aXNlDQorCSAqLw0KKwlmdW5jdGlvbiBpc1RodW1iRGlyKCRlbnRyeSkgDQorCXsNCisJCWlmKCR0aGlzLT5jb25maWdbJ3RodW1ibmFpbF9kaXInXSA9PSBmYWxzZQ0KKwkJCXx8IHN0cmxlbih0cmltKCR0aGlzLT5jb25maWdbJ3RodW1ibmFpbF9kaXInXSkpID09IDApDQorCQkJUmV0dXJuIGZhbHNlOwkJDQorCQllbHNlDQorCQkJUmV0dXJuICgkZW50cnkgPT0gJHRoaXMtPmNvbmZpZ1sndGh1bWJuYWlsX2RpciddKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ2hlY2sgaWYgdGhlIGdpdmVuIGZpbGUgaXMgYSB0bXAgZmlsZS4NCisJICogQHBhcmFtIHN0cmluZyAkZmlsZSBmaWxlIG5hbWUNCisJICogQHJldHVybiBib29sZWFuIHRydWUgaWYgaXQgaXMgYSB0bXAgZmlsZSwgZmFsc2Ugb3RoZXJ3aXNlDQorCSAqLw0KKwlmdW5jdGlvbiBpc1RtcEZpbGUoJGZpbGUpIA0KKwl7DQorCQkkbGVuID0gc3RybGVuKCR0aGlzLT5jb25maWdbJ3RtcF9wcmVmaXgnXSk7DQorCQlpZihzdWJzdHIoJGZpbGUsMCwkbGVuKT09JHRoaXMtPmNvbmZpZ1sndG1wX3ByZWZpeCddKQ0KKwkJCVJldHVybiB0cnVlOw0KKwkJZWxzZQ0KKwkJCVJldHVybiBmYWxzZTsJIAkNCisJfQ0KKw0KKwkvKioNCisJICogRm9yIGEgZ2l2ZW4gaW1hZ2UgZmlsZSwgZ2V0IHRoZSByZXNwZWN0aXZlIHRodW1ibmFpbCBmaWxlbmFtZQ0KKwkgKiBubyBmaWxlIGV4aXN0ZW5jZSBjaGVjayBpcyBkb25lLg0KKwkgKiBAcGFyYW0gc3RyaW5nICRmdWxscGF0aGZpbGUgdGhlIGZ1bGwgcGF0aCB0byB0aGUgaW1hZ2UgZmlsZQ0KKwkgKiBAcmV0dXJuIHN0cmluZyBvZiB0aGUgdGh1bWJuYWlsIGZpbGUNCisJICovDQorCWZ1bmN0aW9uIGdldFRodW1iTmFtZSgkZnVsbHBhdGhmaWxlKSANCisJew0KKwkJJHBhdGhfcGFydHMgPSBwYXRoaW5mbygkZnVsbHBhdGhmaWxlKTsNCisJCQ0KKwkJJHRodW1ibmFpbCA9ICR0aGlzLT5jb25maWdbJ3RodW1ibmFpbF9wcmVmaXgnXS4kcGF0aF9wYXJ0c1snYmFzZW5hbWUnXTsNCisNCisJCWlmKCBzdHJsZW4odHJpbSgkdGhpcy0+Y29uZmlnWyd0aHVtYm5haWxfZGlyJ10pKSA9PSAwIHx8ICR0aGlzLT5jb25maWdbJ3NhZmVfbW9kZSddID09IHRydWUpDQorCQl7DQorCQkJUmV0dXJuIEZpbGVzOjptYWtlRmlsZSgkcGF0aF9wYXJ0c1snZGlybmFtZSddLCR0aHVtYm5haWwpOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCQkkcGF0aCA9IEZpbGVzOjptYWtlUGF0aCgkcGF0aF9wYXJ0c1snZGlybmFtZSddLCR0aGlzLT5jb25maWdbJ3RodW1ibmFpbF9kaXInXSk7DQorCQkJCWlmKCFpc19kaXIoJHBhdGgpKQ0KKwkJCQkJRmlsZXM6OmNyZWF0ZUZvbGRlcigkcGF0aCk7DQorCQkJCVJldHVybiBGaWxlczo6bWFrZUZpbGUoJHBhdGgsJHRodW1ibmFpbCk7DQorCQl9DQorCX0NCisJDQorCS8qKg0KKwkgKiBTaW1pbGFyIHRvIGdldFRodW1iTmFtZSwgYnV0IHJldHVybnMgdGhlIFVSTCwgYmFzZSBvbiB0aGUNCisJICogZ2l2ZW4gYmFzZV91cmwgaW4gY29uZmlnLmluYy5waHANCisJICogQHBhcmFtIHN0cmluZyAkcmVsYXRpdmUgdGhlIHJlbGF0aXZlIGltYWdlIGZpbGUgbmFtZSwgDQorCSAqIHJlbGF0aXZlIHRvIHRoZSBiYXNlX2RpciBwYXRoDQorCSAqIEByZXR1cm4gc3RyaW5nIHRoZSB1cmwgb2YgdGhlIHRodW1ibmFpbA0KKwkgKi8NCisJZnVuY3Rpb24gZ2V0VGh1bWJVUkwoJHJlbGF0aXZlKSANCisJew0KKw0KKwkJX2RkdCggX19GSUxFX18sIF9fTElORV9fLCAiZ2V0VGh1bWJVUkwoKTogcmVsYXRpdmUgaXMgJyRyZWxhdGl2ZSciICk7DQorDQorCQkkcGF0aF9wYXJ0cyA9IHBhdGhpbmZvKCRyZWxhdGl2ZSk7DQorCQkkdGh1bWJuYWlsID0gJHRoaXMtPmNvbmZpZ1sndGh1bWJuYWlsX3ByZWZpeCddLiRwYXRoX3BhcnRzWydiYXNlbmFtZSddOw0KKwkJaWYoJHBhdGhfcGFydHNbJ2Rpcm5hbWUnXT09J1xcJykgJHBhdGhfcGFydHNbJ2Rpcm5hbWUnXT0nLyc7DQorDQorCQlpZigkdGhpcy0+Y29uZmlnWydzYWZlX21vZGUnXSA9PSB0cnVlDQorCQkJfHwgc3RybGVuKHRyaW0oJHRoaXMtPmNvbmZpZ1sndGh1bWJuYWlsX2RpciddKSkgPT0gMCkNCisJCXsNCisJCQlSZXR1cm4gRmlsZXM6Om1ha2VGaWxlKCR0aGlzLT5nZXRJbWFnZXNVUkwoKSxyYXd1cmxlbmNvZGUoJHRodW1ibmFpbCkpOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCWlmKHN0cmxlbih0cmltKCR0aGlzLT5jb25maWdbJ3RodW1ibmFpbF9kaXInXSkpID4gMCkNCisJCQl7DQorCQkJCSRwYXRoID0gRmlsZXM6Om1ha2VQYXRoKCRwYXRoX3BhcnRzWydkaXJuYW1lJ10sJHRoaXMtPmNvbmZpZ1sndGh1bWJuYWlsX2RpciddKTsNCisJCQkJJHVybF9wYXRoID0gRmlsZXM6Om1ha2VQYXRoKCR0aGlzLT5nZXRJbWFnZXNVUkwoKSwgJHBhdGgpOw0KKw0KKwkJCQlfZGR0KCBfX0ZJTEVfXywgX19MSU5FX18sICJnZXRUaHVtYlVSTCgpOiB1cmxfcGF0aCBpcyAnJHVybF9wYXRoJyIgKTsNCisNCisJCQkJUmV0dXJuIEZpbGVzOjptYWtlRmlsZSgkdXJsX3BhdGgscmF3dXJsZW5jb2RlKCR0aHVtYm5haWwpKTsNCisJCQl9DQorCQkJZWxzZSAvL3Nob3VsZCB0aGlzIGV2ZXIgaGFwcGVuPw0KKwkJCXsNCisJCQkJLy9lcnJvcl9sb2coJ0ltYWdlTWFuYWdlcjogRXJyb3IgaW4gY3JlYXRpbmcgdGh1bWJuYWlsIHVybCcpOw0KKwkJCX0NCisNCisJCX0NCisJfQ0KKw0KKw0KKwkvKioNCisJICogRm9yIGEgZ2l2ZW4gaW1hZ2UgZmlsZSwgZ2V0IHRoZSByZXNwZWN0aXZlIHJlc2l6ZWQgZmlsZW5hbWUNCisJICogbm8gZmlsZSBleGlzdGVuY2UgY2hlY2sgaXMgZG9uZS4NCisJICogQHBhcmFtIHN0cmluZyAkZnVsbHBhdGhmaWxlIHRoZSBmdWxsIHBhdGggdG8gdGhlIGltYWdlIGZpbGUNCisJICogQHBhcmFtIGludGVnZXIgJHdpZHRoIHRoZSBpbnRlbmRlZCB3aWR0aA0KKwkgKiBAcGFyYW0gaW50ZWdlciAkaGVpZ2h0IHRoZSBpbnRlbmRlZCBoZWlnaHQNCisJICogQHBhcmFtIGJvb2xlYW4gJG1rRGlyIHdoZXRoZXIgdG8gYXR0ZW1wdCB0byBtYWtlIHRoZSByZXNpemVkX2RpciBpZiBpdCBkb2Vzbid0IGV4aXN0DQorCSAqIEByZXR1cm4gc3RyaW5nIG9mIHRoZSByZXNpemVkIGZpbGVuYW1lDQorCSAqLw0KKwlmdW5jdGlvbiBnZXRSZXNpemVkTmFtZSgkZnVsbHBhdGhmaWxlLCAkd2lkdGgsICRoZWlnaHQsICRta0RpciA9IFRSVUUpDQorCXsNCisJCSRwYXRoX3BhcnRzID0gcGF0aGluZm8oJGZ1bGxwYXRoZmlsZSk7DQorDQorCQkkdGh1bWJuYWlsID0gJHRoaXMtPmNvbmZpZ1sncmVzaXplZF9wcmVmaXgnXS4iX3skd2lkdGh9eHskaGVpZ2h0fV97JHBhdGhfcGFydHNbJ2Jhc2VuYW1lJ119IjsNCisNCisJCWlmKCBzdHJsZW4odHJpbSgkdGhpcy0+Y29uZmlnWydyZXNpemVkX2RpciddKSkgPT0gMCB8fCAkdGhpcy0+Y29uZmlnWydzYWZlX21vZGUnXSA9PSB0cnVlICkNCisJCXsNCisJCQlSZXR1cm4gRmlsZXM6Om1ha2VGaWxlKCRwYXRoX3BhcnRzWydkaXJuYW1lJ10sJHRodW1ibmFpbCk7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJJHBhdGggPSBGaWxlczo6bWFrZVBhdGgoJHBhdGhfcGFydHNbJ2Rpcm5hbWUnXSwkdGhpcy0+Y29uZmlnWydyZXNpemVkX2RpciddKTsNCisJCQlpZigkbWtEaXIgJiYgIWlzX2RpcigkcGF0aCkpDQorCQkJCUZpbGVzOjpjcmVhdGVGb2xkZXIoJHBhdGgpOw0KKwkJCVJldHVybiBGaWxlczo6bWFrZUZpbGUoJHBhdGgsJHRodW1ibmFpbCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIENoZWNrIGlmIHRoZSBnaXZlbiBwYXRoIGlzIHBhcnQgb2YgdGhlIHN1YmRpcmVjdG9yaWVzDQorCSAqIHVuZGVyIHRoZSBiYXNlX2Rpci4NCisJICogQHBhcmFtIHN0cmluZyAkcGF0aCB0aGUgcmVsYXRpdmUgcGF0aCB0byBiZSBjaGVja2VkDQorCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoZSBwYXRoIGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlDQorCSAqLw0KKwlmdW5jdGlvbiB2YWxpZFJlbGF0aXZlUGF0aCgkcGF0aCkgDQorCXsNCisJCSRkaXJzID0gJHRoaXMtPmdldERpcnMoKTsNCisJCWlmKCRwYXRoID09ICcvJykNCisJCQlSZXR1cm4gdHJ1ZTsNCisJCS8vY2hlY2sgdGhlIHBhdGggZ2l2ZW4gaW4gdGhlIHVybCBhZ2FpbnN0IHRoZSANCisJCS8vbGlzdCBvZiBwYXRocyBpbiB0aGUgc3lzdGVtLg0KKwkJZm9yKCRpID0gMDsgJGkgPCBjb3VudCgkZGlycyk7ICRpKyspDQorCQl7DQorCQkJJGtleSA9IGtleSgkZGlycyk7DQorCQkJLy93ZSBmb3VuZCB0aGUgcGF0aA0KKwkJCWlmKCRrZXkgPT0gJHBhdGgpDQorCQkJCVJldHVybiB0cnVlOw0KKwkJDQorCQkJbmV4dCgkZGlycyk7DQorCQl9CQkNCisJCVJldHVybiBmYWxzZTsNCisJfQ0KKw0KKwkvKioNCisJICogUHJvY2VzcyB1cGxvYWRlZCBmaWxlcywgYXNzdW1lcyB0aGUgZmlsZSBpcyBpbiANCisJICogJF9GSUxFU1sndXBsb2FkJ10gYW5kICRfUE9TVFsnZGlyJ10gaXMgc2V0Lg0KKwkgKiBUaGUgZGlyIG11c3QgYmUgcmVsYXRpdmUgdG8gdGhlIGJhc2VfZGlyIGFuZCBleGlzdHMuDQorCSAqIElmICd2YWxpZGF0ZV9pbWFnZXMnIGlzIHNldCB0byB0cnVlLCBvbmx5IGZpbGUgd2l0aA0KKwkgKiBpbWFnZSBkaW1lbnNpb25zIHdpbGwgYmUgYWNjZXB0ZWQuDQorCSAqIEByZXR1cm4gbnVsbA0KKwkgKi8NCisJZnVuY3Rpb24gcHJvY2Vzc1VwbG9hZHMoKSANCisJew0KKwkJaWYoJHRoaXMtPmlzVmFsaWRCYXNlKCkgPT0gZmFsc2UpDQorCQkJcmV0dXJuOw0KKw0KKwkJJHJlbGF0aXZlID0gbnVsbDsNCisNCisJCWlmKGlzc2V0KCRfUE9TVFsnZGlyJ10pKSANCisJCQkkcmVsYXRpdmUgPSByYXd1cmxkZWNvZGUoJF9QT1NUWydkaXInXSk7DQorCQllbHNlDQorCQkJcmV0dXJuOw0KKw0KKwkJLy9jaGVjayBmb3IgdGhlIGZpbGUsIGFuZCBtdXN0IGhhdmUgdmFsaWQgcmVsYXRpdmUgcGF0aA0KKwkJaWYoaXNzZXQoJF9GSUxFU1sndXBsb2FkJ10pICYmICR0aGlzLT52YWxpZFJlbGF0aXZlUGF0aCgkcmVsYXRpdmUpKQ0KKwkJew0KKwkJCSR0aGlzLT5fcHJvY2Vzc0ZpbGVzKCRyZWxhdGl2ZSwgJF9GSUxFU1sndXBsb2FkJ10pOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBQcm9jZXNzIHVwbG9hZCBmaWxlcy4gVGhlIGZpbGUgbXVzdCBiZSBhbiANCisJICogdXBsb2FkZWQgZmlsZS4gSWYgJ3ZhbGlkYXRlX2ltYWdlcycgaXMgc2V0IHRvDQorCSAqIHRydWUsIG9ubHkgaW1hZ2VzIHdpbGwgYmUgcHJvY2Vzc2VkLiBBbnkgZHVwbGljYXRlDQorCSAqIGZpbGUgd2lsbCBiZSByZW5hbWVkLiBTZWUgRmlsZXM6OmNvcHlGaWxlIGZvciBkZXRhaWxzDQorCSAqIG9uIHJlbmFtaW5nLg0KKwkgKiBAcGFyYW0gc3RyaW5nICRyZWxhdGl2ZSB0aGUgcmVsYXRpdmUgcGF0aCB3aGVyZSB0aGUgZmlsZQ0KKwkgKiBzaG91bGQgYmUgY29waWVkIHRvLg0KKwkgKiBAcGFyYW0gYXJyYXkgJGZpbGUgdGhlIHVwbG9hZGVkIGZpbGUgZnJvbSAkX0ZJTEVTDQorCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoZSBmaWxlIHdhcyBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5LCANCisJICogZmFsc2Ugb3RoZXJ3aXNlDQorCSAqLw0KKwlmdW5jdGlvbiBfcHJvY2Vzc0ZpbGVzKCRyZWxhdGl2ZSwgJGZpbGUpDQorCXsNCisJCQ0KKwkJaWYoJGZpbGVbJ2Vycm9yJ10hPTApDQorCQl7DQorCQkJUmV0dXJuIGZhbHNlOw0KKwkJfQ0KKw0KKwkJaWYoIWlzX2ZpbGUoJGZpbGVbJ3RtcF9uYW1lJ10pKQ0KKwkJew0KKwkJCVJldHVybiBmYWxzZTsNCisJCX0NCisNCisJCWlmKCFpc191cGxvYWRlZF9maWxlKCRmaWxlWyd0bXBfbmFtZSddKSkNCisJCXsNCisJCQlGaWxlczo6ZGVsRmlsZSgkZmlsZVsndG1wX25hbWUnXSk7DQorCQkJUmV0dXJuIGZhbHNlOw0KKwkJfQ0KKwkJDQorDQorCQlpZigkdGhpcy0+Y29uZmlnWyd2YWxpZGF0ZV9pbWFnZXMnXSA9PSB0cnVlKQ0KKwkJew0KKwkJCSRpbWdJbmZvID0gQGdldEltYWdlU2l6ZSgkZmlsZVsndG1wX25hbWUnXSk7DQorCQkJaWYoIWlzX2FycmF5KCRpbWdJbmZvKSkNCisJCQl7DQorCQkJCUZpbGVzOjpkZWxGaWxlKCRmaWxlWyd0bXBfbmFtZSddKTsNCisJCQkJUmV0dXJuIGZhbHNlOw0KKwkJCX0NCisJCX0NCisgICAgDQorICAgICR2YWxpZF9leHRlbnNpb25zID0gJHRoaXMtPmNvbmZpZ1snYWxsb3dlZF9pbWFnZV9leHRlbnNpb25zJ107DQorICAgICRhZnJ1ZXh0ID0gc3RydG9sb3dlcihzdWJzdHIoc3RycmNocigkZmlsZVsnbmFtZSddLCAiLiIpLCAxKSk7DQorICAgIGlmKCFpbl9hcnJheSgkYWZydWV4dCwgJHZhbGlkX2V4dGVuc2lvbnMpKQ0KKwkJew0KKwkJCUZpbGVzOjpkZWxGaWxlKCRmaWxlWyd0bXBfbmFtZSddKTsNCisJCQlSZXR1cm4gJ0Nhbm5vdCB1cGxvYWQgJGV4dGVuc2lvbj0nLiRhZnJ1ZXh0LickIEZpbGVzLiBQZXJtaXNzaW9uIGRlbmllZC4nOw0KKwkJfQ0KKw0KKwkJLy9ub3cgY29weSB0aGUgZmlsZQ0KKwkJJHBhdGggPSBGaWxlczo6bWFrZVBhdGgoJHRoaXMtPmdldEltYWdlc0RpcigpLCRyZWxhdGl2ZSk7DQorCQkkcmVzdWx0ID0gRmlsZXM6OmNvcHlGaWxlKCRmaWxlWyd0bXBfbmFtZSddLCAkcGF0aCwgJGZpbGVbJ25hbWUnXSk7DQorDQorCQkvL25vIGNvcHkgZXJyb3INCisJCWlmKCFpc19pbnQoJHJlc3VsdCkpDQorCQl7DQorCQkJRmlsZXM6OmRlbEZpbGUoJGZpbGVbJ3RtcF9uYW1lJ10pOw0KKwkJCVJldHVybiB0cnVlOw0KKwkJfQ0KKw0KKwkJLy9kZWxldGUgdG1wIGZpbGVzLg0KKwkJRmlsZXM6OmRlbEZpbGUoJGZpbGVbJ3RtcF9uYW1lJ10pOw0KKwkJUmV0dXJuIGZhbHNlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBHZXQgdGhlIFVSTCBvZiB0aGUgcmVsYXRpdmUgZmlsZS4NCisJICogYmFzaWNhbGx5IGFwcGVuZHMgdGhlIHJlbGF0aXZlIGZpbGUgdG8gdGhlIA0KKwkgKiBiYXNlX3VybCBnaXZlbiBpbiBjb25maWcuaW5jLnBocA0KKwkgKiBAcGFyYW0gc3RyaW5nICRyZWxhdGl2ZSBhIGZpbGUgdGhlIHJlbGF0aXZlIHRvIHRoZSBiYXNlX2Rpcg0KKwkgKiBAcmV0dXJuIHN0cmluZyB0aGUgVVJMIG9mIHRoZSByZWxhdGl2ZSBmaWxlLg0KKwkgKi8NCisJZnVuY3Rpb24gZ2V0RmlsZVVSTCgkcmVsYXRpdmUpIA0KKwl7DQorCQlSZXR1cm4gRmlsZXM6Om1ha2VGaWxlKCR0aGlzLT5nZXRJbWFnZXNVUkwoKSwkcmVsYXRpdmUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBHZXQgdGhlIGZ1bGxwYXRoIHRvIGEgcmVsYXRpdmUgZmlsZS4NCisJICogQHBhcmFtIHN0cmluZyAkcmVsYXRpdmUgdGhlIHJlbGF0aXZlIGZpbGUuDQorCSAqIEByZXR1cm4gc3RyaW5nIHRoZSBmdWxsIHBhdGgsIC5pZS4gdGhlIGJhc2VfZGlyICsgcmVsYXRpdmUuDQorCSAqLw0KKwlmdW5jdGlvbiBnZXRGdWxsUGF0aCgkcmVsYXRpdmUpIA0KKwl7DQorCQlSZXR1cm4gRmlsZXM6Om1ha2VGaWxlKCR0aGlzLT5nZXRJbWFnZXNEaXIoKSwkcmVsYXRpdmUpOzsNCisJfQ0KKw0KKwkvKioNCisJICogR2V0IHRoZSBkZWZhdWx0IHRodW1ibmFpbC4NCisJICogQHJldHVybiBzdHJpbmcgZGVmYXVsdCB0aHVtYm5haWwsIGVtcHR5IHN0cmluZyBpZiANCisJICogdGhlIHRodW1ibmFpbCBkb2Vzbid0IGV4aXN0Lg0KKwkgKi8NCisJZnVuY3Rpb24gZ2V0RGVmYXVsdFRodW1iKCkgDQorCXsNCisNCisJCS8vIEZJWE1FOiBoYWNrDQorDQorCQlSZXR1cm4gJHRoaXMtPmNvbmZpZ1snZGVmYXVsdF90aHVtYm5haWwnXTsNCisNCisJCWlmKGlzX2ZpbGUoJHRoaXMtPmNvbmZpZ1snZGVmYXVsdF90aHVtYm5haWwnXSkpDQorCQkJew0KKwkJCVJldHVybiAkdGhpcy0+Y29uZmlnWydkZWZhdWx0X3RodW1ibmFpbCddOw0KKwkJCX0NCisJCWVsc2UgDQorCQkJUmV0dXJuICcnOw0KKwl9DQorDQorDQorCS8qKg0KKwkgKiBHZXQgdGhlIHRodW1ibmFpbCB1cmwgdG8gYmUgZGlzcGxheWVkLiANCisJICogSWYgdGhlIHRodW1ibmFpbCBleGlzdHMsIGFuZCBpdCBpcyB1cC10by1kYXRlDQorCSAqIHRoZSB0aHVtYm5haWwgdXJsIHdpbGwgYmUgcmV0dXJucy4gSWYgdGhlIA0KKwkgKiBmaWxlIGlzIG5vdCBhbiBpbWFnZSwgYSBkZWZhdWx0IGltYWdlIHdpbGwgYmUgcmV0dXJuZWQuDQorCSAqIElmIGl0IGlzIGFuIGltYWdlIGZpbGUsIGFuZCBubyB0aHVtYm5haWwgZXhpc3RzIG9yIA0KKwkgKiB0aGUgdGh1bWJuYWlsIGlzIG91dC1vZi1kYXRlIChpLmUuIHRoZSB0aHVtYm5haWwgDQorCSAqIG1vZGlmaWVkIHRpbWUgaXMgbGVzcyB0aGFuIHRoZSBvcmlnaW5hbCBmaWxlKQ0KKwkgKiB0aGVuIGEgdGh1bWJzLnBocD9pbWc9ZmlsZW5hbWUuanBnIGlzIHJldHVybmVkLg0KKwkgKiBUaGUgdGh1bWJzLnBocCB1cmwgd2lsbCBnZW5lcmF0ZSBhIG5ldyB0aHVtYm5haWwNCisJICogb24gdGhlIGZseS4gSWYgdGhlIGltYWdlIGlzIGxlc3MgdGhhbiB0aGUgZGltZW5zaW9ucw0KKwkgKiBvZiB0aGUgdGh1bWJuYWlscywgdGhlIGltYWdlIHdpbGwgYmUgZGlzcGxheSBpbnN0ZWFkLg0KKwkgKiBAcGFyYW0gc3RyaW5nICRyZWxhdGl2ZSB0aGUgcmVsYXRpdmUgaW1hZ2UgZmlsZS4NCisJICogQHJldHVybiBzdHJpbmcgdGhlIHVybCBvZiB0aGUgdGh1bWJuYWlsLCBiZSBpdA0KKwkgKiBhY3R1YWxseSB0aHVtYm5haWwgb3IgYSBzY3JpcHQgdG8gZ2VuZXJhdGUgdGhlDQorCSAqIHRodW1ibmFpbCBvbiB0aGUgZmx5Lg0KKwkgKi8NCisJZnVuY3Rpb24gZ2V0VGh1bWJuYWlsKCRyZWxhdGl2ZSkgDQorCXsNCisNCisJCWdsb2JhbCAkSU1Db25maWc7DQorDQorCQlfZGR0KCBfX0ZJTEVfXywgX19MSU5FX18sICJnZXRUaHVtYm5haWwoKTogdG9wIHdpdGggJyRyZWxhdGl2ZSciICk7DQorDQorCQkkZnVsbHBhdGggPSBGaWxlczo6bWFrZUZpbGUoJHRoaXMtPmdldEltYWdlc0RpcigpLCRyZWxhdGl2ZSk7DQorDQorCQkvL25vdCBhIGZpbGU/Pz8NCisJCWlmKCFpc19maWxlKCRmdWxscGF0aCkpDQorCQkJUmV0dXJuICR0aGlzLT5nZXREZWZhdWx0VGh1bWIoKTsNCisNCisJCSRpbWdJbmZvID0gQGdldEltYWdlU2l6ZSgkZnVsbHBhdGgpOw0KKwkJDQorCQkvL25vdCBhbiBpbWFnZQ0KKwkJaWYoIWlzX2FycmF5KCRpbWdJbmZvKSkNCisJCQlSZXR1cm4gJHRoaXMtPmdldERlZmF1bHRUaHVtYigpOw0KKw0KKwkJLy90aGUgb3JpZ2luYWwgaW1hZ2UgaXMgc21hbGxlciB0aGFuIHRodW1ibmFpbHMsDQorCQkvL3NvIGp1c3QgcmV0dXJuIHRoZSB1cmwgdG8gdGhlIG9yaWdpbmFsIGltYWdlLg0KKwkJaWYgKCRpbWdJbmZvWzBdIDw9ICR0aGlzLT5jb25maWdbJ3RodW1ibmFpbF93aWR0aCddDQorCQkgJiYgJGltZ0luZm9bMV0gPD0gJHRoaXMtPmNvbmZpZ1sndGh1bWJuYWlsX2hlaWdodCddKQ0KKwkJCVJldHVybiAkdGhpcy0+Z2V0RmlsZVVSTCgkcmVsYXRpdmUpOw0KKw0KKwkJJHRodW1ibmFpbCA9ICR0aGlzLT5nZXRUaHVtYk5hbWUoJGZ1bGxwYXRoKTsNCisJCQ0KKwkJLy9jaGVjayBmb3IgdGh1bWJuYWlscywgaWYgZXhpc3RzIGFuZA0KKwkJLy8gaXQgaXMgdXAtdG8tZGF0ZSwgcmV0dXJuIHRoZSB0aHVtYm5haWwgdXJsDQorCQlpZihpc19maWxlKCR0aHVtYm5haWwpKQ0KKwkJew0KKwkJCWlmKGZpbGVtdGltZSgkdGh1bWJuYWlsKSA+PSBmaWxlbXRpbWUoJGZ1bGxwYXRoKSkNCisJCQkJew0KKwkJCQlfZGR0KCBfX0ZJTEVfXywgX19MSU5FX18sICJnZXRUaHVtYm5haWwoKTogcmV0dXJuaW5nIHVybCAnIiAuICR0aGlzLT5nZXRUaHVtYlVSTCgkcmVsYXRpdmUpIC4gIiciICk7DQorDQorCQkJCVJldHVybiAkdGhpcy0+Z2V0VGh1bWJVUkwoJHJlbGF0aXZlKTsNCisJCQkJfQ0KKwkJfQ0KKw0KKwkJLy93ZWxsLCBubyB0aHVtYm5haWwgd2FzIGZvdW5kLCBzbyBhc2sgdGhlIHRodW1icy5waHANCisJCS8vdG8gZ2VuZXJhdGUgdGhlIHRodW1ibmFpbCBvbiB0aGUgZmx5Lg0KKwkJUmV0dXJuICRJTUNvbmZpZ1snYmFja2VuZF91cmwnXSAuICdfX2Z1bmN0aW9uPXRodW1icyZpbWc9Jy5yYXd1cmxlbmNvZGUoJHJlbGF0aXZlKTsNCisJfQ0KKw0KKwkvKioNCisJICogRGVsZXRlIGFuZCBzcGVjaWZpZWQgZmlsZXMuDQorCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGRlbGV0ZSwgZmFsc2Ugb3RoZXJ3aXNlDQorCSAqLw0KKwlmdW5jdGlvbiBkZWxldGVGaWxlcygpIA0KKwl7DQorCQlpZihpc3NldCgkX0dFVFsnZGVsZiddKSkNCisJCQkkdGhpcy0+X2RlbEZpbGUocmF3dXJsZGVjb2RlKCRfR0VUWydkZWxmJ10pKTsNCisJfQ0KKw0KKwkvKioNCisJICogRGVsZXRlIGFuZCBzcGVjaWZpZWQgZGlyZWN0b3JpZXMuDQorCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGRlbGV0ZSwgZmFsc2Ugb3RoZXJ3aXNlDQorCSAqLw0KKwlmdW5jdGlvbiBkZWxldGVEaXJzKCkgDQorCXsNCisJCSBpZihpc3NldCgkX0dFVFsnZGVsZCddKSkNCisJCQlyZXR1cm4gJHRoaXMtPl9kZWxEaXIocmF3dXJsZGVjb2RlKCRfR0VUWydkZWxkJ10pKTsJCQ0KKwkJIGVsc2UNCisJCQkgUmV0dXJuIGZhbHNlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBEZWxldGUgdGhlIHJlbGF0aXZlIGZpbGUsIGFuZCBhbnkgdGh1bWJuYWlscy4NCisJICogQHBhcmFtIHN0cmluZyAkcmVsYXRpdmUgdGhlIHJlbGF0aXZlIGZpbGUuDQorCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGRlbGV0ZWQsIGZhbHNlIG90aGVyd2lzZS4NCisJICovDQorCWZ1bmN0aW9uIF9kZWxGaWxlKCRyZWxhdGl2ZSkgDQorCXsNCisJCSRmdWxscGF0aCA9IEZpbGVzOjptYWtlRmlsZSgkdGhpcy0+Z2V0SW1hZ2VzRGlyKCksJHJlbGF0aXZlKTsNCisJCQ0KKwkJLy9jaGVjayB0aGF0IHRoZSBmaWxlIGlzIGFuIGltYWdlDQorCQlpZigkdGhpcy0+Y29uZmlnWyd2YWxpZGF0ZV9pbWFnZXMnXSA9PSB0cnVlKQ0KKwkJew0KKwkJCWlmKCFpc19hcnJheSgkdGhpcy0+Z2V0SW1hZ2VJbmZvKCRmdWxscGF0aCkpKQ0KKwkJCQlyZXR1cm4gZmFsc2U7IC8vaG1tbSBub3QgYW4gSW1hZ2UhIT8/Pw0KKwkJfQ0KKw0KKwkJJHRodW1ibmFpbCA9ICR0aGlzLT5nZXRUaHVtYk5hbWUoJGZ1bGxwYXRoKTsNCisNCisJCWlmKEZpbGVzOjpkZWxGaWxlKCRmdWxscGF0aCkpDQorCQkJUmV0dXJuIEZpbGVzOjpkZWxGaWxlKCR0aHVtYm5haWwpOw0KKwkJZWxzZQ0KKwkJCVJldHVybiBmYWxzZTsNCisJfQ0KKw0KKwkvKioNCisJICogRGVsZXRlIGRpcmVjdG9yaWVzIHJlY3Vyc2l2ZWx5Lg0KKwkgKiBAcGFyYW0gc3RyaW5nICRyZWxhdGl2ZSB0aGUgcmVsYXRpdmUgcGF0aCB0byBiZSBkZWxldGVkLg0KKwkgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBkZWxldGVkLCBmYWxzZSBvdGhlcndpc2UuDQorCSAqLw0KKwlmdW5jdGlvbiBfZGVsRGlyKCRyZWxhdGl2ZSkgDQorCXsNCisJCSRmdWxscGF0aCA9IEZpbGVzOjptYWtlUGF0aCgkdGhpcy0+Z2V0SW1hZ2VzRGlyKCksJHJlbGF0aXZlKTsNCisJCWlmKCR0aGlzLT5jb3VudEZpbGVzKCRmdWxscGF0aCkgPD0gMCkNCisJCQlyZXR1cm4gRmlsZXM6OmRlbEZvbGRlcigkZnVsbHBhdGgsdHJ1ZSk7IC8vZGVsZXRlIHJlY3Vyc2l2ZWx5Lg0KKwkJZWxzZQ0KKwkJCVJldHVybiBmYWxzZTsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlIG5ldyBkaXJlY3Rvcmllcy4NCisJICogSWYgaW4gc2FmZV9tb2RlLCBub3RoaW5nIGhhcHBlbnMuDQorCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNyZWF0ZWQsIGZhbHNlIG90aGVyd2lzZS4NCisJICovDQorCWZ1bmN0aW9uIHByb2Nlc3NOZXdEaXIoKSANCisJew0KKwkJaWYoJHRoaXMtPmNvbmZpZ1snc2FmZV9tb2RlJ10gPT0gdHJ1ZSkNCisJCQlSZXR1cm4gZmFsc2U7DQorDQorCQlpZihpc3NldCgkX0dFVFsnbmV3RGlyJ10pICYmIGlzc2V0KCRfR0VUWydkaXInXSkpDQorCQl7DQorCQkJJG5ld0RpciA9IHJhd3VybGRlY29kZSgkX0dFVFsnbmV3RGlyJ10pOw0KKwkJCSRkaXIgPSByYXd1cmxkZWNvZGUoJF9HRVRbJ2RpciddKTsNCisJCQkkcGF0aCA9IEZpbGVzOjptYWtlUGF0aCgkdGhpcy0+Z2V0SW1hZ2VzRGlyKCksJGRpcik7DQorCQkJJGZ1bGxwYXRoID0gRmlsZXM6Om1ha2VQYXRoKCRwYXRoLCBGaWxlczo6ZXNjYXBlKCRuZXdEaXIpKTsNCisJCQlpZihpc19kaXIoJGZ1bGxwYXRoKSkNCisJCQkJUmV0dXJuIGZhbHNlOw0KKw0KKwkJCVJldHVybiBGaWxlczo6Y3JlYXRlRm9sZGVyKCRmdWxscGF0aCk7DQorCQl9DQorCX0NCit9DQorDQorPz4NCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9DbGFzc2VzL0pTT04ucGhwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvQ2xhc3Nlcy9KU09OLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzZmNzgyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvQ2xhc3Nlcy9KU09OLnBocApAQCAtMCwwICsxLDgwNiBAQAorPD9waHAKKy8qIHZpbTogc2V0IGV4cGFuZHRhYiB0YWJzdG9wPTQgc2hpZnR3aWR0aD00IHNvZnR0YWJzdG9wPTQ6ICovCisKKy8qKgorICogQ29udmVydHMgdG8gYW5kIGZyb20gSlNPTiBmb3JtYXQuCisgKgorICogSlNPTiAoSmF2YVNjcmlwdCBPYmplY3QgTm90YXRpb24pIGlzIGEgbGlnaHR3ZWlnaHQgZGF0YS1pbnRlcmNoYW5nZQorICogZm9ybWF0LiBJdCBpcyBlYXN5IGZvciBodW1hbnMgdG8gcmVhZCBhbmQgd3JpdGUuIEl0IGlzIGVhc3kgZm9yIG1hY2hpbmVzCisgKiB0byBwYXJzZSBhbmQgZ2VuZXJhdGUuIEl0IGlzIGJhc2VkIG9uIGEgc3Vic2V0IG9mIHRoZSBKYXZhU2NyaXB0CisgKiBQcm9ncmFtbWluZyBMYW5ndWFnZSwgU3RhbmRhcmQgRUNNQS0yNjIgM3JkIEVkaXRpb24gLSBEZWNlbWJlciAxOTk5LgorICogVGhpcyBmZWF0dXJlIGNhbiBhbHNvIGJlIGZvdW5kIGluICBQeXRob24uIEpTT04gaXMgYSB0ZXh0IGZvcm1hdCB0aGF0IGlzCisgKiBjb21wbGV0ZWx5IGxhbmd1YWdlIGluZGVwZW5kZW50IGJ1dCB1c2VzIGNvbnZlbnRpb25zIHRoYXQgYXJlIGZhbWlsaWFyCisgKiB0byBwcm9ncmFtbWVycyBvZiB0aGUgQy1mYW1pbHkgb2YgbGFuZ3VhZ2VzLCBpbmNsdWRpbmcgQywgQysrLCBDIywgSmF2YSwKKyAqIEphdmFTY3JpcHQsIFBlcmwsIFRDTCwgYW5kIG1hbnkgb3RoZXJzLiBUaGVzZSBwcm9wZXJ0aWVzIG1ha2UgSlNPTiBhbgorICogaWRlYWwgZGF0YS1pbnRlcmNoYW5nZSBsYW5ndWFnZS4KKyAqCisgKiBUaGlzIHBhY2thZ2UgcHJvdmlkZXMgYSBzaW1wbGUgZW5jb2RlciBhbmQgZGVjb2RlciBmb3IgSlNPTiBub3RhdGlvbi4gSXQKKyAqIGlzIGludGVuZGVkIGZvciB1c2Ugd2l0aCBjbGllbnQtc2lkZSBKYXZhc2NyaXB0IGFwcGxpY2F0aW9ucyB0aGF0IG1ha2UKKyAqIHVzZSBvZiBIVFRQUmVxdWVzdCB0byBwZXJmb3JtIHNlcnZlciBjb21tdW5pY2F0aW9uIGZ1bmN0aW9ucyAtIGRhdGEgY2FuCisgKiBiZSBlbmNvZGVkIGludG8gSlNPTiBub3RhdGlvbiBmb3IgdXNlIGluIGEgY2xpZW50LXNpZGUgamF2YXNjcmlwdCwgb3IKKyAqIGRlY29kZWQgZnJvbSBpbmNvbWluZyBKYXZhc2NyaXB0IHJlcXVlc3RzLiBKU09OIGZvcm1hdCBpcyBuYXRpdmUgdG8KKyAqIEphdmFzY3JpcHQsIGFuZCBjYW4gYmUgZGlyZWN0bHkgZXZhbCgpJ2VkIHdpdGggbm8gZnVydGhlciBwYXJzaW5nCisgKiBvdmVyaGVhZAorICoKKyAqIEFsbCBzdHJpbmdzIHNob3VsZCBiZSBpbiBBU0NJSSBvciBVVEYtOCBmb3JtYXQhCisgKgorICogTElDRU5TRTogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUKKyAqIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiBkaXNjbGFpbWVyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyAqIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKiBAY2F0ZWdvcnkKKyAqIEBwYWNrYWdlICAgICBTZXJ2aWNlc19KU09OCisgKiBAYXV0aG9yICAgICAgTWljaGFsIE1pZ3Vyc2tpIDxtaWtlLWpzb25AdGVjem5vLmNvbT4KKyAqIEBhdXRob3IgICAgICBNYXR0IEtuYXBwIDxtZGtuYXBwW2F0XWdtYWlsW2RvdF1jb20+CisgKiBAYXV0aG9yICAgICAgQnJldHQgU3RpbW1lcm1hbiA8YnJldHRzdGltbWVybWFuW2F0XWdtYWlsW2RvdF1jb20+CisgKiBAY29weXJpZ2h0ICAgMjAwNSBNaWNoYWwgTWlndXJza2kKKyAqIEB2ZXJzaW9uICAgICBDVlM6ICRJZDogSlNPTi5waHAsdiAxLjMxIDIwMDYvMDYvMjggMDU6NTQ6MTcgbWlndXJza2kgRXhwICQKKyAqIEBsaWNlbnNlICAgICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocAorICogQGxpbmsgICAgICAgIGh0dHA6Ly9wZWFyLnBocC5uZXQvcGVwci9wZXByLXByb3Bvc2FsLXNob3cucGhwP2lkPTE5OAorICovCisKKy8qKgorICogTWFya2VyIGNvbnN0YW50IGZvciBTZXJ2aWNlc19KU09OOjpkZWNvZGUoKSwgdXNlZCB0byBmbGFnIHN0YWNrIHN0YXRlCisgKi8KK2RlZmluZSgnU0VSVklDRVNfSlNPTl9TTElDRScsICAgMSk7CisKKy8qKgorICogTWFya2VyIGNvbnN0YW50IGZvciBTZXJ2aWNlc19KU09OOjpkZWNvZGUoKSwgdXNlZCB0byBmbGFnIHN0YWNrIHN0YXRlCisgKi8KK2RlZmluZSgnU0VSVklDRVNfSlNPTl9JTl9TVFInLCAgMik7CisKKy8qKgorICogTWFya2VyIGNvbnN0YW50IGZvciBTZXJ2aWNlc19KU09OOjpkZWNvZGUoKSwgdXNlZCB0byBmbGFnIHN0YWNrIHN0YXRlCisgKi8KK2RlZmluZSgnU0VSVklDRVNfSlNPTl9JTl9BUlInLCAgMyk7CisKKy8qKgorICogTWFya2VyIGNvbnN0YW50IGZvciBTZXJ2aWNlc19KU09OOjpkZWNvZGUoKSwgdXNlZCB0byBmbGFnIHN0YWNrIHN0YXRlCisgKi8KK2RlZmluZSgnU0VSVklDRVNfSlNPTl9JTl9PQkonLCAgNCk7CisKKy8qKgorICogTWFya2VyIGNvbnN0YW50IGZvciBTZXJ2aWNlc19KU09OOjpkZWNvZGUoKSwgdXNlZCB0byBmbGFnIHN0YWNrIHN0YXRlCisgKi8KK2RlZmluZSgnU0VSVklDRVNfSlNPTl9JTl9DTVQnLCA1KTsKKworLyoqCisgKiBCZWhhdmlvciBzd2l0Y2ggZm9yIFNlcnZpY2VzX0pTT046OmRlY29kZSgpCisgKi8KK2RlZmluZSgnU0VSVklDRVNfSlNPTl9MT09TRV9UWVBFJywgMTYpOworCisvKioKKyAqIEJlaGF2aW9yIHN3aXRjaCBmb3IgU2VydmljZXNfSlNPTjo6ZGVjb2RlKCkKKyAqLworZGVmaW5lKCdTRVJWSUNFU19KU09OX1NVUFBSRVNTX0VSUk9SUycsIDMyKTsKKworLyoqCisgKiBDb252ZXJ0cyB0byBhbmQgZnJvbSBKU09OIGZvcm1hdC4KKyAqCisgKiBCcmllZiBleGFtcGxlIG9mIHVzZToKKyAqCisgKiA8Y29kZT4KKyAqIC8vIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBTZXJ2aWNlc19KU09OCisgKiAkanNvbiA9IG5ldyBTZXJ2aWNlc19KU09OKCk7CisgKgorICogLy8gY29udmVydCBhIGNvbXBsZXhlIHZhbHVlIHRvIEpTT04gbm90YXRpb24sIGFuZCBzZW5kIGl0IHRvIHRoZSBicm93c2VyCisgKiAkdmFsdWUgPSBhcnJheSgnZm9vJywgJ2JhcicsIGFycmF5KDEsIDIsICdiYXonKSwgYXJyYXkoMywgYXJyYXkoNCkpKTsKKyAqICRvdXRwdXQgPSAkanNvbi0+ZW5jb2RlKCR2YWx1ZSk7CisgKgorICogcHJpbnQoJG91dHB1dCk7CisgKiAvLyBwcmludHM6IFsiZm9vIiwiYmFyIixbMSwyLCJiYXoiXSxbMyxbNF1dXQorICoKKyAqIC8vIGFjY2VwdCBpbmNvbWluZyBQT1NUIGRhdGEsIGFzc3VtZWQgdG8gYmUgaW4gSlNPTiBub3RhdGlvbgorICogJGlucHV0ID0gZmlsZV9nZXRfY29udGVudHMoJ3BocDovL2lucHV0JywgMTAwMDAwMCk7CisgKiAkdmFsdWUgPSAkanNvbi0+ZGVjb2RlKCRpbnB1dCk7CisgKiA8L2NvZGU+CisgKi8KK2NsYXNzIFNlcnZpY2VzX0pTT04KK3sKKyAgIC8qKgorICAgICogY29uc3RydWN0cyBhIG5ldyBKU09OIGluc3RhbmNlCisgICAgKgorICAgICogQHBhcmFtICAgIGludCAgICAgJHVzZSAgICBvYmplY3QgYmVoYXZpb3IgZmxhZ3M7IGNvbWJpbmUgd2l0aCBib29sZWFuLU9SCisgICAgKgorICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZSB2YWx1ZXM6CisgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gU0VSVklDRVNfSlNPTl9MT09TRV9UWVBFOiAgbG9vc2UgdHlwaW5nLgorICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7Li4ufSIgc3ludGF4IGNyZWF0ZXMgYXNzb2NpYXRpdmUgYXJyYXlzCisgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiBvYmplY3RzIGluIGRlY29kZSgpLgorICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAtIFNFUlZJQ0VTX0pTT05fU1VQUFJFU1NfRVJST1JTOiAgZXJyb3Igc3VwcHJlc3Npb24uCisgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVzIHdoaWNoIGNhbid0IGJlIGVuY29kZWQgKGUuZy4gcmVzb3VyY2VzKQorICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVhciBhcyBOVUxMIGluc3RlYWQgb2YgdGhyb3dpbmcgZXJyb3JzLgorICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIGEgZGVlcGx5LW5lc3RlZCByZXNvdXJjZSB3aWxsCisgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnViYmxlIHVwIHdpdGggYW4gZXJyb3IsIHNvIGFsbCByZXR1cm4gdmFsdWVzCisgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBlbmNvZGUoKSBzaG91bGQgYmUgY2hlY2tlZCB3aXRoIGlzRXJyb3IoKQorICAgICovCisgICAgZnVuY3Rpb24gU2VydmljZXNfSlNPTigkdXNlID0gMCkKKyAgICB7CisgICAgICAgICR0aGlzLT51c2UgPSAkdXNlOworICAgIH0KKworICAgLyoqCisgICAgKiBjb252ZXJ0IGEgc3RyaW5nIGZyb20gb25lIFVURi0xNiBjaGFyIHRvIG9uZSBVVEYtOCBjaGFyCisgICAgKgorICAgICogTm9ybWFsbHkgc2hvdWxkIGJlIGhhbmRsZWQgYnkgbWJfY29udmVydF9lbmNvZGluZywgYnV0CisgICAgKiBwcm92aWRlcyBhIHNsb3dlciBQSFAtb25seSBtZXRob2QgZm9yIGluc3RhbGxhdGlvbnMKKyAgICAqIHRoYXQgbGFjayB0aGUgbXVsdGlieWUgc3RyaW5nIGV4dGVuc2lvbi4KKyAgICAqCisgICAgKiBAcGFyYW0gICAgc3RyaW5nICAkdXRmMTYgIFVURi0xNiBjaGFyYWN0ZXIKKyAgICAqIEByZXR1cm4gICBzdHJpbmcgIFVURi04IGNoYXJhY3RlcgorICAgICogQGFjY2VzcyAgIHByaXZhdGUKKyAgICAqLworICAgIGZ1bmN0aW9uIHV0ZjE2MnV0ZjgoJHV0ZjE2KQorICAgIHsKKyAgICAgICAgLy8gb2ggcGxlYXNlIG9oIHBsZWFzZSBvaCBwbGVhc2Ugb2ggcGxlYXNlIG9oIHBsZWFzZQorICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJ21iX2NvbnZlcnRfZW5jb2RpbmcnKSkgeworICAgICAgICAgICAgcmV0dXJuIG1iX2NvbnZlcnRfZW5jb2RpbmcoJHV0ZjE2LCAnVVRGLTgnLCAnVVRGLTE2Jyk7CisgICAgICAgIH0KKworICAgICAgICAkYnl0ZXMgPSAob3JkKCR1dGYxNnswfSkgPDwgOCkgfCBvcmQoJHV0ZjE2ezF9KTsKKworICAgICAgICBzd2l0Y2godHJ1ZSkgeworICAgICAgICAgICAgY2FzZSAoKDB4N0YgJiAkYnl0ZXMpID09ICRieXRlcyk6CisgICAgICAgICAgICAgICAgLy8gdGhpcyBjYXNlIHNob3VsZCBuZXZlciBiZSByZWFjaGVkLCBiZWNhdXNlIHdlIGFyZSBpbiBBU0NJSSByYW5nZQorICAgICAgICAgICAgICAgIC8vIHNlZTogaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3VuaWNvZGUuaHRtbCN1dGYtOAorICAgICAgICAgICAgICAgIHJldHVybiBjaHIoMHg3RiAmICRieXRlcyk7CisKKyAgICAgICAgICAgIGNhc2UgKDB4MDdGRiAmICRieXRlcykgPT0gJGJ5dGVzOgorICAgICAgICAgICAgICAgIC8vIHJldHVybiBhIDItYnl0ZSBVVEYtOCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAvLyBzZWU6IGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91bmljb2RlLmh0bWwjdXRmLTgKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hyKDB4QzAgfCAoKCRieXRlcyA+PiA2KSAmIDB4MUYpKQorICAgICAgICAgICAgICAgICAgICAgLiBjaHIoMHg4MCB8ICgkYnl0ZXMgJiAweDNGKSk7CisKKyAgICAgICAgICAgIGNhc2UgKDB4RkZGRiAmICRieXRlcykgPT0gJGJ5dGVzOgorICAgICAgICAgICAgICAgIC8vIHJldHVybiBhIDMtYnl0ZSBVVEYtOCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAvLyBzZWU6IGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91bmljb2RlLmh0bWwjdXRmLTgKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hyKDB4RTAgfCAoKCRieXRlcyA+PiAxMikgJiAweDBGKSkKKyAgICAgICAgICAgICAgICAgICAgIC4gY2hyKDB4ODAgfCAoKCRieXRlcyA+PiA2KSAmIDB4M0YpKQorICAgICAgICAgICAgICAgICAgICAgLiBjaHIoMHg4MCB8ICgkYnl0ZXMgJiAweDNGKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBpZ25vcmluZyBVVEYtMzIgZm9yIG5vdywgc29ycnkKKyAgICAgICAgcmV0dXJuICcnOworICAgIH0KKworICAgLyoqCisgICAgKiBjb252ZXJ0IGEgc3RyaW5nIGZyb20gb25lIFVURi04IGNoYXIgdG8gb25lIFVURi0xNiBjaGFyCisgICAgKgorICAgICogTm9ybWFsbHkgc2hvdWxkIGJlIGhhbmRsZWQgYnkgbWJfY29udmVydF9lbmNvZGluZywgYnV0CisgICAgKiBwcm92aWRlcyBhIHNsb3dlciBQSFAtb25seSBtZXRob2QgZm9yIGluc3RhbGxhdGlvbnMKKyAgICAqIHRoYXQgbGFjayB0aGUgbXVsdGlieWUgc3RyaW5nIGV4dGVuc2lvbi4KKyAgICAqCisgICAgKiBAcGFyYW0gICAgc3RyaW5nICAkdXRmOCAgIFVURi04IGNoYXJhY3RlcgorICAgICogQHJldHVybiAgIHN0cmluZyAgVVRGLTE2IGNoYXJhY3RlcgorICAgICogQGFjY2VzcyAgIHByaXZhdGUKKyAgICAqLworICAgIGZ1bmN0aW9uIHV0ZjgydXRmMTYoJHV0ZjgpCisgICAgeworICAgICAgICAvLyBvaCBwbGVhc2Ugb2ggcGxlYXNlIG9oIHBsZWFzZSBvaCBwbGVhc2Ugb2ggcGxlYXNlCisgICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnbWJfY29udmVydF9lbmNvZGluZycpKSB7CisgICAgICAgICAgICByZXR1cm4gbWJfY29udmVydF9lbmNvZGluZygkdXRmOCwgJ1VURi0xNicsICdVVEYtOCcpOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoKHN0cmxlbigkdXRmOCkpIHsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAvLyB0aGlzIGNhc2Ugc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWQsIGJlY2F1c2Ugd2UgYXJlIGluIEFTQ0lJIHJhbmdlCisgICAgICAgICAgICAgICAgLy8gc2VlOiBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdW5pY29kZS5odG1sI3V0Zi04CisgICAgICAgICAgICAgICAgcmV0dXJuICR1dGY4OworCisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGEgVVRGLTE2IGNoYXJhY3RlciBmcm9tIGEgMi1ieXRlIFVURi04IGNoYXIKKyAgICAgICAgICAgICAgICAvLyBzZWU6IGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91bmljb2RlLmh0bWwjdXRmLTgKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hyKDB4MDcgJiAob3JkKCR1dGY4ezB9KSA+PiAyKSkKKyAgICAgICAgICAgICAgICAgICAgIC4gY2hyKCgweEMwICYgKG9yZCgkdXRmOHswfSkgPDwgNikpCisgICAgICAgICAgICAgICAgICAgICAgICAgfCAoMHgzRiAmIG9yZCgkdXRmOHsxfSkpKTsKKworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIC8vIHJldHVybiBhIFVURi0xNiBjaGFyYWN0ZXIgZnJvbSBhIDMtYnl0ZSBVVEYtOCBjaGFyCisgICAgICAgICAgICAgICAgLy8gc2VlOiBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdW5pY29kZS5odG1sI3V0Zi04CisgICAgICAgICAgICAgICAgcmV0dXJuIGNocigoMHhGMCAmIChvcmQoJHV0Zjh7MH0pIDw8IDQpKQorICAgICAgICAgICAgICAgICAgICAgICAgIHwgKDB4MEYgJiAob3JkKCR1dGY4ezF9KSA+PiAyKSkpCisgICAgICAgICAgICAgICAgICAgICAuIGNocigoMHhDMCAmIChvcmQoJHV0Zjh7MX0pIDw8IDYpKQorICAgICAgICAgICAgICAgICAgICAgICAgIHwgKDB4N0YgJiBvcmQoJHV0Zjh7Mn0pKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBpZ25vcmluZyBVVEYtMzIgZm9yIG5vdywgc29ycnkKKyAgICAgICAgcmV0dXJuICcnOworICAgIH0KKworICAgLyoqCisgICAgKiBlbmNvZGVzIGFuIGFyYml0cmFyeSB2YXJpYWJsZSBpbnRvIEpTT04gZm9ybWF0CisgICAgKgorICAgICogQHBhcmFtICAgIG1peGVkICAgJHZhciAgICBhbnkgbnVtYmVyLCBib29sZWFuLCBzdHJpbmcsIGFycmF5LCBvciBvYmplY3QgdG8gYmUgZW5jb2RlZC4KKyAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGFyZ3VtZW50IDEgdG8gU2VydmljZXNfSlNPTigpIGFib3ZlIGZvciBhcnJheS1wYXJzaW5nIGJlaGF2aW9yLgorICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YXIgaXMgYSBzdHJuZywgbm90ZSB0aGF0IGVuY29kZSgpIGFsd2F5cyBleHBlY3RzIGl0CisgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIGluIEFTQ0lJIG9yIFVURi04IGZvcm1hdCEKKyAgICAqCisgICAgKiBAcmV0dXJuICAgbWl4ZWQgICBKU09OIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBpbnB1dCB2YXIgb3IgYW4gZXJyb3IgaWYgYSBwcm9ibGVtIG9jY3VycworICAgICogQGFjY2VzcyAgIHB1YmxpYworICAgICovCisgICAgZnVuY3Rpb24gZW5jb2RlKCR2YXIpCisgICAgeworICAgICAgICBzd2l0Y2ggKGdldHR5cGUoJHZhcikpIHsKKyAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOgorICAgICAgICAgICAgICAgIHJldHVybiAkdmFyID8gJ3RydWUnIDogJ2ZhbHNlJzsKKworICAgICAgICAgICAgY2FzZSAnTlVMTCc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdudWxsJzsKKworICAgICAgICAgICAgY2FzZSAnaW50ZWdlcic6CisgICAgICAgICAgICAgICAgcmV0dXJuIChpbnQpICR2YXI7CisKKyAgICAgICAgICAgIGNhc2UgJ2RvdWJsZSc6CisgICAgICAgICAgICBjYXNlICdmbG9hdCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIChmbG9hdCkgJHZhcjsKKworICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzoKKyAgICAgICAgICAgICAgICAvLyBTVFJJTkdTIEFSRSBFWFBFQ1RFRCBUTyBCRSBJTiBBU0NJSSBPUiBVVEYtOCBGT1JNQVQKKyAgICAgICAgICAgICAgICAkYXNjaWkgPSAnJzsKKyAgICAgICAgICAgICAgICAkc3RybGVuX3ZhciA9IHN0cmxlbigkdmFyKTsKKworICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAqIEl0ZXJhdGUgb3ZlciBldmVyeSBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZywKKyAgICAgICAgICAgICAgICAqIGVzY2FwaW5nIHdpdGggYSBzbGFzaCBvciBlbmNvZGluZyB0byBVVEYtOCB3aGVyZSBuZWNlc3NhcnkKKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGZvciAoJGMgPSAwOyAkYyA8ICRzdHJsZW5fdmFyOyArKyRjKSB7CisKKyAgICAgICAgICAgICAgICAgICAgJG9yZF92YXJfYyA9IG9yZCgkdmFyeyRjfSk7CisKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRvcmRfdmFyX2MgPT0gMHgwODoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXNjaWkgLj0gJ1xiJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJG9yZF92YXJfYyA9PSAweDA5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhc2NpaSAuPSAnXHQnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkb3JkX3Zhcl9jID09IDB4MEE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzY2lpIC49ICdcbic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRvcmRfdmFyX2MgPT0gMHgwQzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXNjaWkgLj0gJ1xmJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJG9yZF92YXJfYyA9PSAweDBEOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhc2NpaSAuPSAnXHInOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRvcmRfdmFyX2MgPT0gMHgyMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJG9yZF92YXJfYyA9PSAweDJGOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkb3JkX3Zhcl9jID09IDB4NUM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG91YmxlIHF1b3RlLCBzbGFzaCwgc2xvc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXNjaWkgLj0gJ1xcJy4kdmFyeyRjfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoKCRvcmRfdmFyX2MgPj0gMHgyMCkgJiYgKCRvcmRfdmFyX2MgPD0gMHg3RikpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgVS0wMDAwMDAwMCAtIFUtMDAwMDAwN0YgKHNhbWUgYXMgQVNDSUkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzY2lpIC49ICR2YXJ7JGN9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICgoJG9yZF92YXJfYyAmIDB4RTApID09IDB4QzApOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgVS0wMDAwMDA4MCAtIFUtMDAwMDA3RkYsIG1hc2sgMTEwWFhYWFgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3VuaWNvZGUuaHRtbCN1dGYtOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaGFyID0gcGFjaygnQyonLCAkb3JkX3Zhcl9jLCBvcmQoJHZhcnskYyArIDF9KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGMgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmMTYgPSAkdGhpcy0+dXRmODJ1dGYxNigkY2hhcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzY2lpIC49IHNwcmludGYoJ1x1JTA0cycsIGJpbjJoZXgoJHV0ZjE2KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKCgkb3JkX3Zhcl9jICYgMHhGMCkgPT0gMHhFMCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBVLTAwMDAwODAwIC0gVS0wMDAwRkZGRiwgbWFzayAxMTEwWFhYWAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdW5pY29kZS5odG1sI3V0Zi04CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoYXIgPSBwYWNrKCdDKicsICRvcmRfdmFyX2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZCgkdmFyeyRjICsgMX0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmQoJHZhcnskYyArIDJ9KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGMgKz0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmMTYgPSAkdGhpcy0+dXRmODJ1dGYxNigkY2hhcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzY2lpIC49IHNwcmludGYoJ1x1JTA0cycsIGJpbjJoZXgoJHV0ZjE2KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKCgkb3JkX3Zhcl9jICYgMHhGOCkgPT0gMHhGMCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBVLTAwMDEwMDAwIC0gVS0wMDFGRkZGRiwgbWFzayAxMTExMFhYWAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdW5pY29kZS5odG1sI3V0Zi04CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoYXIgPSBwYWNrKCdDKicsICRvcmRfdmFyX2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZCgkdmFyeyRjICsgMX0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmQoJHZhcnskYyArIDJ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkKCR2YXJ7JGMgKyAzfSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjICs9IDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHV0ZjE2ID0gJHRoaXMtPnV0ZjgydXRmMTYoJGNoYXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhc2NpaSAuPSBzcHJpbnRmKCdcdSUwNHMnLCBiaW4yaGV4KCR1dGYxNikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICgoJG9yZF92YXJfYyAmIDB4RkMpID09IDB4RjgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgVS0wMDIwMDAwMCAtIFUtMDNGRkZGRkYsIG1hc2sgMTExMTEwWFgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3VuaWNvZGUuaHRtbCN1dGYtOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaGFyID0gcGFjaygnQyonLCAkb3JkX3Zhcl9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmQoJHZhcnskYyArIDF9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkKCR2YXJ7JGMgKyAyfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZCgkdmFyeyRjICsgM30pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmQoJHZhcnskYyArIDR9KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGMgKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmMTYgPSAkdGhpcy0+dXRmODJ1dGYxNigkY2hhcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzY2lpIC49IHNwcmludGYoJ1x1JTA0cycsIGJpbjJoZXgoJHV0ZjE2KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKCgkb3JkX3Zhcl9jICYgMHhGRSkgPT0gMHhGQyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBVLTA0MDAwMDAwIC0gVS03RkZGRkZGRiwgbWFzayAxMTExMTEwWAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdW5pY29kZS5odG1sI3V0Zi04CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoYXIgPSBwYWNrKCdDKicsICRvcmRfdmFyX2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZCgkdmFyeyRjICsgMX0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmQoJHZhcnskYyArIDJ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkKCR2YXJ7JGMgKyAzfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZCgkdmFyeyRjICsgNH0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmQoJHZhcnskYyArIDV9KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGMgKz0gNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmMTYgPSAkdGhpcy0+dXRmODJ1dGYxNigkY2hhcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzY2lpIC49IHNwcmludGYoJ1x1JTA0cycsIGJpbjJoZXgoJHV0ZjE2KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gJyInLiRhc2NpaS4nIic7CisKKyAgICAgICAgICAgIGNhc2UgJ2FycmF5JzoKKyAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgKiBBcyBwZXIgSlNPTiBzcGVjIGlmIGFueSBhcnJheSBrZXkgaXMgbm90IGFuIGludGVnZXIKKyAgICAgICAgICAgICAgICAqIHdlIG11c3QgdHJlYXQgdGhlIHRoZSB3aG9sZSBhcnJheSBhcyBhbiBvYmplY3QuIFdlCisgICAgICAgICAgICAgICAgKiBhbHNvIHRyeSB0byBjYXRjaCBhIHNwYXJzZWx5IHBvcHVsYXRlZCBhc3NvY2lhdGl2ZQorICAgICAgICAgICAgICAgICogYXJyYXkgd2l0aCBudW1lcmljIGtleXMgaGVyZSBiZWNhdXNlIHNvbWUgSlMgZW5naW5lcworICAgICAgICAgICAgICAgICogd2lsbCBjcmVhdGUgYW4gYXJyYXkgd2l0aCBlbXB0eSBpbmRleGVzIHVwIHRvCisgICAgICAgICAgICAgICAgKiBtYXhfaW5kZXggd2hpY2ggY2FuIGNhdXNlIG1lbW9yeSBpc3N1ZXMgYW5kIGJlY2F1c2UKKyAgICAgICAgICAgICAgICAqIHRoZSBrZXlzLCB3aGljaCBtYXkgYmUgcmVsZXZhbnQsIHdpbGwgYmUgcmVtYXBwZWQKKyAgICAgICAgICAgICAgICAqIG90aGVyd2lzZS4KKyAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgKiBBcyBwZXIgdGhlIEVDTUEgYW5kIEpTT04gc3BlY2lmaWNhdGlvbiBhbiBvYmplY3QgbWF5CisgICAgICAgICAgICAgICAgKiBoYXZlIGFueSBzdHJpbmcgYXMgYSBwcm9wZXJ0eS4gVW5mb3J0dW5hdGVseSBkdWUgdG8KKyAgICAgICAgICAgICAgICAqIGEgaG9sZSBpbiB0aGUgRUNNQSBzcGVjaWZpY2F0aW9uIGlmIHRoZSBrZXkgaXMgYQorICAgICAgICAgICAgICAgICogRUNNQSByZXNlcnZlZCB3b3JkIG9yIHN0YXJ0cyB3aXRoIGEgZGlnaXQgdGhlCisgICAgICAgICAgICAgICAgKiBwYXJhbWV0ZXIgaXMgb25seSBhY2Nlc3NpYmxlIHVzaW5nIEVDTUFTY3JpcHQncworICAgICAgICAgICAgICAgICogYnJhY2tldCBub3RhdGlvbi4KKyAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgLy8gdHJlYXQgYXMgYSBKU09OIG9iamVjdAorICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkdmFyKSAmJiBjb3VudCgkdmFyKSAmJiAoYXJyYXlfa2V5cygkdmFyKSAhPT0gcmFuZ2UoMCwgc2l6ZW9mKCR2YXIpIC0gMSkpKSB7CisgICAgICAgICAgICAgICAgICAgICRwcm9wZXJ0aWVzID0gYXJyYXlfbWFwKGFycmF5KCR0aGlzLCAnbmFtZV92YWx1ZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9rZXlzKCR2YXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV92YWx1ZXMoJHZhcikpOworCisgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJHByb3BlcnRpZXMgYXMgJHByb3BlcnR5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihTZXJ2aWNlc19KU09OOjppc0Vycm9yKCRwcm9wZXJ0eSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHByb3BlcnR5OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd7JyAuIGpvaW4oJywnLCAkcHJvcGVydGllcykgLiAnfSc7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gdHJlYXQgaXQgbGlrZSBhIHJlZ3VsYXIgYXJyYXkKKyAgICAgICAgICAgICAgICAkZWxlbWVudHMgPSBhcnJheV9tYXAoYXJyYXkoJHRoaXMsICdlbmNvZGUnKSwgJHZhcik7CisKKyAgICAgICAgICAgICAgICBmb3JlYWNoKCRlbGVtZW50cyBhcyAkZWxlbWVudCkgeworICAgICAgICAgICAgICAgICAgICBpZihTZXJ2aWNlc19KU09OOjppc0Vycm9yKCRlbGVtZW50KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRlbGVtZW50OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuICdbJyAuIGpvaW4oJywnLCAkZWxlbWVudHMpIC4gJ10nOworCisgICAgICAgICAgICBjYXNlICdvYmplY3QnOgorICAgICAgICAgICAgICAgICR2YXJzID0gZ2V0X29iamVjdF92YXJzKCR2YXIpOworCisgICAgICAgICAgICAgICAgJHByb3BlcnRpZXMgPSBhcnJheV9tYXAoYXJyYXkoJHRoaXMsICduYW1lX3ZhbHVlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfa2V5cygkdmFycyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfdmFsdWVzKCR2YXJzKSk7CisKKyAgICAgICAgICAgICAgICBmb3JlYWNoKCRwcm9wZXJ0aWVzIGFzICRwcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgICAgICBpZihTZXJ2aWNlc19KU09OOjppc0Vycm9yKCRwcm9wZXJ0eSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkcHJvcGVydHk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3snIC4gam9pbignLCcsICRwcm9wZXJ0aWVzKSAuICd9JzsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gKCR0aGlzLT51c2UgJiBTRVJWSUNFU19KU09OX1NVUFBSRVNTX0VSUk9SUykKKyAgICAgICAgICAgICAgICAgICAgPyAnbnVsbCcKKyAgICAgICAgICAgICAgICAgICAgOiBuZXcgU2VydmljZXNfSlNPTl9FcnJvcihnZXR0eXBlKCR2YXIpLiIgY2FuIG5vdCBiZSBlbmNvZGVkIGFzIEpTT04gc3RyaW5nIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgIC8qKgorICAgICogYXJyYXktd2Fsa2luZyBmdW5jdGlvbiBmb3IgdXNlIGluIGdlbmVyYXRpbmcgSlNPTi1mb3JtYXR0ZWQgbmFtZS12YWx1ZSBwYWlycworICAgICoKKyAgICAqIEBwYXJhbSAgICBzdHJpbmcgICRuYW1lICAgbmFtZSBvZiBrZXkgdG8gdXNlCisgICAgKiBAcGFyYW0gICAgbWl4ZWQgICAkdmFsdWUgIHJlZmVyZW5jZSB0byBhbiBhcnJheSBlbGVtZW50IHRvIGJlIGVuY29kZWQKKyAgICAqCisgICAgKiBAcmV0dXJuICAgc3RyaW5nICBKU09OLWZvcm1hdHRlZCBuYW1lLXZhbHVlIHBhaXIsIGxpa2UgJyJuYW1lIjp2YWx1ZScKKyAgICAqIEBhY2Nlc3MgICBwcml2YXRlCisgICAgKi8KKyAgICBmdW5jdGlvbiBuYW1lX3ZhbHVlKCRuYW1lLCAkdmFsdWUpCisgICAgeworICAgICAgICAkZW5jb2RlZF92YWx1ZSA9ICR0aGlzLT5lbmNvZGUoJHZhbHVlKTsKKworICAgICAgICBpZihTZXJ2aWNlc19KU09OOjppc0Vycm9yKCRlbmNvZGVkX3ZhbHVlKSkgeworICAgICAgICAgICAgcmV0dXJuICRlbmNvZGVkX3ZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICR0aGlzLT5lbmNvZGUoc3RydmFsKCRuYW1lKSkgLiAnOicgLiAkZW5jb2RlZF92YWx1ZTsKKyAgICB9CisKKyAgIC8qKgorICAgICogcmVkdWNlIGEgc3RyaW5nIGJ5IHJlbW92aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGNvbW1lbnRzIGFuZCB3aGl0ZXNwYWNlCisgICAgKgorICAgICogQHBhcmFtICAgICRzdHIgICAgc3RyaW5nICAgICAgc3RyaW5nIHZhbHVlIHRvIHN0cmlwIG9mIGNvbW1lbnRzIGFuZCB3aGl0ZXNwYWNlCisgICAgKgorICAgICogQHJldHVybiAgIHN0cmluZyAgc3RyaW5nIHZhbHVlIHN0cmlwcGVkIG9mIGNvbW1lbnRzIGFuZCB3aGl0ZXNwYWNlCisgICAgKiBAYWNjZXNzICAgcHJpdmF0ZQorICAgICovCisgICAgZnVuY3Rpb24gcmVkdWNlX3N0cmluZygkc3RyKQorICAgIHsKKyAgICAgICAgJHN0ciA9IHByZWdfcmVwbGFjZShhcnJheSgKKworICAgICAgICAgICAgICAgIC8vIGVsaW1pbmF0ZSBzaW5nbGUgbGluZSBjb21tZW50cyBpbiAnLy8gLi4uJyBmb3JtCisgICAgICAgICAgICAgICAgJyNeXHMqLy8oLispJCNtJywKKworICAgICAgICAgICAgICAgIC8vIGVsaW1pbmF0ZSBtdWx0aS1saW5lIGNvbW1lbnRzIGluICcvKiAuLi4gKi8nIGZvcm0sIGF0IHN0YXJ0IG9mIHN0cmluZworICAgICAgICAgICAgICAgICcjXlxzKi9cKiguKylcKi8jVXMnLAorCisgICAgICAgICAgICAgICAgLy8gZWxpbWluYXRlIG11bHRpLWxpbmUgY29tbWVudHMgaW4gJy8qIC4uLiAqLycgZm9ybSwgYXQgZW5kIG9mIHN0cmluZworICAgICAgICAgICAgICAgICcjL1wqKC4rKVwqL1xzKiQjVXMnCisKKyAgICAgICAgICAgICksICcnLCAkc3RyKTsKKworICAgICAgICAvLyBlbGltaW5hdGUgZXh0cmFuZW91cyBzcGFjZQorICAgICAgICByZXR1cm4gdHJpbSgkc3RyKTsKKyAgICB9CisKKyAgIC8qKgorICAgICogZGVjb2RlcyBhIEpTT04gc3RyaW5nIGludG8gYXBwcm9wcmlhdGUgdmFyaWFibGUKKyAgICAqCisgICAgKiBAcGFyYW0gICAgc3RyaW5nICAkc3RyICAgIEpTT04tZm9ybWF0dGVkIHN0cmluZworICAgICoKKyAgICAqIEByZXR1cm4gICBtaXhlZCAgIG51bWJlciwgYm9vbGVhbiwgc3RyaW5nLCBhcnJheSwgb3Igb2JqZWN0CisgICAgKiAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIEpTT04gaW5wdXQgc3RyaW5nLgorICAgICogICAgICAgICAgICAgICAgICAgU2VlIGFyZ3VtZW50IDEgdG8gU2VydmljZXNfSlNPTigpIGFib3ZlIGZvciBvYmplY3Qtb3V0cHV0IGJlaGF2aW9yLgorICAgICogICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGRlY29kZSgpIGFsd2F5cyByZXR1cm5zIHN0cmluZ3MKKyAgICAqICAgICAgICAgICAgICAgICAgIGluIEFTQ0lJIG9yIFVURi04IGZvcm1hdCEKKyAgICAqIEBhY2Nlc3MgICBwdWJsaWMKKyAgICAqLworICAgIGZ1bmN0aW9uIGRlY29kZSgkc3RyKQorICAgIHsKKyAgICAgICAgJHN0ciA9ICR0aGlzLT5yZWR1Y2Vfc3RyaW5nKCRzdHIpOworCisgICAgICAgIHN3aXRjaCAoc3RydG9sb3dlcigkc3RyKSkgeworICAgICAgICAgICAgY2FzZSAndHJ1ZSc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIGNhc2UgJ2ZhbHNlJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGNhc2UgJ251bGwnOgorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICRtID0gYXJyYXkoKTsKKworICAgICAgICAgICAgICAgIGlmIChpc19udW1lcmljKCRzdHIpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIExvb2tpZS1sb28sIGl0J3MgYSBudW1iZXIKKworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHdvdWxkIHdvcmsgb24gaXRzIG93biwgYnV0IEknbSB0cnlpbmcgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgLy8gZ29vZCBhYm91dCByZXR1cm5pbmcgaW50ZWdlcnMgd2hlcmUgYXBwcm9wcmlhdGU6CisgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiAoZmxvYXQpJHN0cjsKKworICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gZmxvYXQgb3IgaW50LCBhcyBhcHByb3ByaWF0ZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKChmbG9hdCkkc3RyID09IChpbnRlZ2VyKSRzdHIpCisgICAgICAgICAgICAgICAgICAgICAgICA/IChpbnRlZ2VyKSRzdHIKKyAgICAgICAgICAgICAgICAgICAgICAgIDogKGZsb2F0KSRzdHI7CisKKyAgICAgICAgICAgICAgICB9IGVsc2VpZiAocHJlZ19tYXRjaCgnL14oInxcJykuKihcMSkkL3MnLCAkc3RyLCAkbSkgJiYgJG1bMV0gPT0gJG1bMl0pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU1RSSU5HUyBSRVRVUk5FRCBJTiBVVEYtOCBGT1JNQVQKKyAgICAgICAgICAgICAgICAgICAgJGRlbGltID0gc3Vic3RyKCRzdHIsIDAsIDEpOworICAgICAgICAgICAgICAgICAgICAkY2hycyA9IHN1YnN0cigkc3RyLCAxLCAtMSk7CisgICAgICAgICAgICAgICAgICAgICR1dGY4ID0gJyc7CisgICAgICAgICAgICAgICAgICAgICRzdHJsZW5fY2hycyA9IHN0cmxlbigkY2hycyk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICgkYyA9IDA7ICRjIDwgJHN0cmxlbl9jaHJzOyArKyRjKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICRzdWJzdHJfY2hyc19jXzIgPSBzdWJzdHIoJGNocnMsICRjLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICRvcmRfY2hyc19jID0gb3JkKCRjaHJzeyRjfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJHN1YnN0cl9jaHJzX2NfMiA9PSAnXGInOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmOCAuPSBjaHIoMHgwOCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrJGM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJHN1YnN0cl9jaHJzX2NfMiA9PSAnXHQnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmOCAuPSBjaHIoMHgwOSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrJGM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJHN1YnN0cl9jaHJzX2NfMiA9PSAnXG4nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmOCAuPSBjaHIoMHgwQSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrJGM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJHN1YnN0cl9jaHJzX2NfMiA9PSAnXGYnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmOCAuPSBjaHIoMHgwQyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrJGM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJHN1YnN0cl9jaHJzX2NfMiA9PSAnXHInOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmOCAuPSBjaHIoMHgwRCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrJGM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkc3Vic3RyX2NocnNfY18yID09ICdcXCInOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJHN1YnN0cl9jaHJzX2NfMiA9PSAnXFxcJyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkc3Vic3RyX2NocnNfY18yID09ICdcXFxcJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRzdWJzdHJfY2hyc19jXzIgPT0gJ1xcLyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJGRlbGltID09ICciJyAmJiAkc3Vic3RyX2NocnNfY18yICE9ICdcXFwnJykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCRkZWxpbSA9PSAiJyIgJiYgJHN1YnN0cl9jaHJzX2NfMiAhPSAnXFwiJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1dGY4IC49ICRjaHJzeysrJGN9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBwcmVnX21hdGNoKCcvXFxcdVswLTlBLUZdezR9L2knLCBzdWJzdHIoJGNocnMsICRjLCA2KSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmdsZSwgZXNjYXBlZCB1bmljb2RlIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmMTYgPSBjaHIoaGV4ZGVjKHN1YnN0cigkY2hycywgKCRjICsgMiksIDIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gY2hyKGhleGRlYyhzdWJzdHIoJGNocnMsICgkYyArIDQpLCAyKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmOCAuPSAkdGhpcy0+dXRmMTYydXRmOCgkdXRmMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYyArPSA1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKCRvcmRfY2hyc19jID49IDB4MjApICYmICgkb3JkX2NocnNfYyA8PSAweDdGKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHV0ZjggLj0gJGNocnN7JGN9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKCRvcmRfY2hyc19jICYgMHhFMCkgPT0gMHhDMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBVLTAwMDAwMDgwIC0gVS0wMDAwMDdGRiwgbWFzayAxMTBYWFhYWAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3NlZSBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdW5pY29kZS5odG1sI3V0Zi04CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1dGY4IC49IHN1YnN0cigkY2hycywgJGMsIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArKyRjOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKCRvcmRfY2hyc19jICYgMHhGMCkgPT0gMHhFMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBVLTAwMDAwODAwIC0gVS0wMDAwRkZGRiwgbWFzayAxMTEwWFhYWAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3VuaWNvZGUuaHRtbCN1dGYtOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmOCAuPSBzdWJzdHIoJGNocnMsICRjLCAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGMgKz0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICgkb3JkX2NocnNfYyAmIDB4RjgpID09IDB4RjA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgVS0wMDAxMDAwMCAtIFUtMDAxRkZGRkYsIG1hc2sgMTExMTBYWFgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VlIGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91bmljb2RlLmh0bWwjdXRmLTgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHV0ZjggLj0gc3Vic3RyKCRjaHJzLCAkYywgNCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjICs9IDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoJG9yZF9jaHJzX2MgJiAweEZDKSA9PSAweEY4OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIFUtMDAyMDAwMDAgLSBVLTAzRkZGRkZGLCBtYXNrIDExMTExMFhYCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdW5pY29kZS5odG1sI3V0Zi04CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1dGY4IC49IHN1YnN0cigkY2hycywgJGMsIDUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYyArPSA0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKCRvcmRfY2hyc19jICYgMHhGRSkgPT0gMHhGQzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBVLTA0MDAwMDAwIC0gVS03RkZGRkZGRiwgbWFzayAxMTExMTEwWAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3VuaWNvZGUuaHRtbCN1dGYtOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmOCAuPSBzdWJzdHIoJGNocnMsICRjLCA2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGMgKz0gNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR1dGY4OworCisgICAgICAgICAgICAgICAgfSBlbHNlaWYgKHByZWdfbWF0Y2goJy9eXFsuKlxdJC9zJywgJHN0cikgfHwgcHJlZ19tYXRjaCgnL15cey4qXH0kL3MnLCAkc3RyKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBhcnJheSwgb3Igb2JqZWN0IG5vdGF0aW9uCisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCRzdHJ7MH0gPT0gJ1snKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkc3RrID0gYXJyYXkoU0VSVklDRVNfSlNPTl9JTl9BUlIpOworICAgICAgICAgICAgICAgICAgICAgICAgJGFyciA9IGFycmF5KCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPnVzZSAmIFNFUlZJQ0VTX0pTT05fTE9PU0VfVFlQRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdGsgPSBhcnJheShTRVJWSUNFU19KU09OX0lOX09CSik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9iaiA9IGFycmF5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdGsgPSBhcnJheShTRVJWSUNFU19KU09OX0lOX09CSik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9iaiA9IG5ldyBzdGRDbGFzcygpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkc3RrLCBhcnJheSgnd2hhdCcgID0+IFNFUlZJQ0VTX0pTT05fU0xJQ0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3doZXJlJyA9PiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWxpbScgPT4gZmFsc2UpKTsKKworICAgICAgICAgICAgICAgICAgICAkY2hycyA9IHN1YnN0cigkc3RyLCAxLCAtMSk7CisgICAgICAgICAgICAgICAgICAgICRjaHJzID0gJHRoaXMtPnJlZHVjZV9zdHJpbmcoJGNocnMpOworCisgICAgICAgICAgICAgICAgICAgIGlmICgkY2hycyA9PSAnJykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc2V0KCRzdGspID09IFNFUlZJQ0VTX0pTT05fSU5fQVJSKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRhcnI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRvYmo7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vcHJpbnQoIlxucGFyc2luZyB7JGNocnN9XG4iKTsKKworICAgICAgICAgICAgICAgICAgICAkc3RybGVuX2NocnMgPSBzdHJsZW4oJGNocnMpOworCisgICAgICAgICAgICAgICAgICAgIGZvciAoJGMgPSAwOyAkYyA8PSAkc3RybGVuX2NocnM7ICsrJGMpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgJHRvcCA9IGVuZCgkc3RrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICRzdWJzdHJfY2hyc19jXzIgPSBzdWJzdHIoJGNocnMsICRjLCAyKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgkYyA9PSAkc3RybGVuX2NocnMpIHx8ICgoJGNocnN7JGN9ID09ICcsJykgJiYgKCR0b3BbJ3doYXQnXSA9PSBTRVJWSUNFU19KU09OX1NMSUNFKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBhIGNvbW1hIHRoYXQgaXMgbm90IGluc2lkZSBhIHN0cmluZywgYXJyYXksIGV0Yy4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT1Igd2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBjaGFyYWN0ZXIgbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzbGljZSA9IHN1YnN0cigkY2hycywgJHRvcFsnd2hlcmUnXSwgKCRjIC0gJHRvcFsnd2hlcmUnXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJHN0aywgYXJyYXkoJ3doYXQnID0+IFNFUlZJQ0VTX0pTT05fU0xJQ0UsICd3aGVyZScgPT4gKCRjICsgMSksICdkZWxpbScgPT4gZmFsc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50KCJGb3VuZCBzcGxpdCBhdCB7JGN9OiAiLnN1YnN0cigkY2hycywgJHRvcFsnd2hlcmUnXSwgKDEgKyAkYyAtICR0b3BbJ3doZXJlJ10pKS4iXG4iKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNldCgkc3RrKSA9PSBTRVJWSUNFU19KU09OX0lOX0FSUikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgaW4gYW4gYXJyYXksIHNvIGp1c3QgcHVzaCBhbiBlbGVtZW50IG9udG8gdGhlIHN0YWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJGFyciwgJHRoaXMtPmRlY29kZSgkc2xpY2UpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmIChyZXNldCgkc3RrKSA9PSBTRVJWSUNFU19KU09OX0lOX09CSikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgaW4gYW4gb2JqZWN0LCBzbyBmaWd1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3V0IHRoZSBwcm9wZXJ0eSBuYW1lIGFuZCBzZXQgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxlbWVudCBpbiBhbiBhc3NvY2lhdGl2ZSBhcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIG5vdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFydHMgPSBhcnJheSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goJy9eXHMqKFsiXCddLipbXlxcXF1bIlwnXSlccyo6XHMqKFxTLiopLD8kL1VpcycsICRzbGljZSwgJHBhcnRzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIm5hbWUiOnZhbHVlIHBhaXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRrZXkgPSAkdGhpcy0+ZGVjb2RlKCRwYXJ0c1sxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmFsID0gJHRoaXMtPmRlY29kZSgkcGFydHNbMl0pOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPnVzZSAmIFNFUlZJQ0VTX0pTT05fTE9PU0VfVFlQRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvYmpbJGtleV0gPSAkdmFsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2JqLT4ka2V5ID0gJHZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKHByZWdfbWF0Y2goJy9eXHMqKFx3Kylccyo6XHMqKFxTLiopLD8kL1VpcycsICRzbGljZSwgJHBhcnRzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmFtZTp2YWx1ZSBwYWlyLCB3aGVyZSBuYW1lIGlzIHVucXVvdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAka2V5ID0gJHBhcnRzWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZhbCA9ICR0aGlzLT5kZWNvZGUoJHBhcnRzWzJdKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT51c2UgJiBTRVJWSUNFU19KU09OX0xPT1NFX1RZUEUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2JqWyRrZXldID0gJHZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9iai0+JGtleSA9ICR2YWw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCgoJGNocnN7JGN9ID09ICciJykgfHwgKCRjaHJzeyRjfSA9PSAiJyIpKSAmJiAoJHRvcFsnd2hhdCddICE9IFNFUlZJQ0VTX0pTT05fSU5fU1RSKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEgcXVvdGUsIGFuZCB3ZSBhcmUgbm90IGluc2lkZSBhIHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJHN0aywgYXJyYXkoJ3doYXQnID0+IFNFUlZJQ0VTX0pTT05fSU5fU1RSLCAnd2hlcmUnID0+ICRjLCAnZGVsaW0nID0+ICRjaHJzeyRjfSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJpbnQoIkZvdW5kIHN0YXJ0IG9mIHN0cmluZyBhdCB7JGN9XG4iKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCgkY2hyc3skY30gPT0gJHRvcFsnZGVsaW0nXSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgkdG9wWyd3aGF0J10gPT0gU0VSVklDRVNfSlNPTl9JTl9TVFIpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHN0cmxlbihzdWJzdHIoJGNocnMsIDAsICRjKSkgLSBzdHJsZW4ocnRyaW0oc3Vic3RyKCRjaHJzLCAwLCAkYyksICdcXCcpKSkgJSAyICE9IDEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgYSBxdW90ZSwgd2UncmUgaW4gYSBzdHJpbmcsIGFuZCBpdCdzIG5vdCBlc2NhcGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Uga25vdyB0aGF0IGl0J3Mgbm90IGVzY2FwZWQgYmVjYXNlIHRoZXJlIGlzIF9ub3RfIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2RkIG51bWJlciBvZiBiYWNrc2xhc2hlcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgc28gZmFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfcG9wKCRzdGspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJpbnQoIkZvdW5kIGVuZCBvZiBzdHJpbmcgYXQgeyRjfTogIi5zdWJzdHIoJGNocnMsICR0b3BbJ3doZXJlJ10sICgxICsgMSArICRjIC0gJHRvcFsnd2hlcmUnXSkpLiJcbiIpOworCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoKCRjaHJzeyRjfSA9PSAnWycpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9hcnJheSgkdG9wWyd3aGF0J10sIGFycmF5KFNFUlZJQ0VTX0pTT05fU0xJQ0UsIFNFUlZJQ0VTX0pTT05fSU5fQVJSLCBTRVJWSUNFU19KU09OX0lOX09CSikpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgYSBsZWZ0LWJyYWNrZXQsIGFuZCB3ZSBhcmUgaW4gYW4gYXJyYXksIG9iamVjdCwgb3Igc2xpY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRzdGssIGFycmF5KCd3aGF0JyA9PiBTRVJWSUNFU19KU09OX0lOX0FSUiwgJ3doZXJlJyA9PiAkYywgJ2RlbGltJyA9PiBmYWxzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJpbnQoIkZvdW5kIHN0YXJ0IG9mIGFycmF5IGF0IHskY31cbiIpOworCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoKCRjaHJzeyRjfSA9PSAnXScpICYmICgkdG9wWyd3aGF0J10gPT0gU0VSVklDRVNfSlNPTl9JTl9BUlIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgYSByaWdodC1icmFja2V0LCBhbmQgd2UncmUgaW4gYW4gYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9wb3AoJHN0ayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmludCgiRm91bmQgZW5kIG9mIGFycmF5IGF0IHskY306ICIuc3Vic3RyKCRjaHJzLCAkdG9wWyd3aGVyZSddLCAoMSArICRjIC0gJHRvcFsnd2hlcmUnXSkpLiJcbiIpOworCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoKCRjaHJzeyRjfSA9PSAneycpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9hcnJheSgkdG9wWyd3aGF0J10sIGFycmF5KFNFUlZJQ0VTX0pTT05fU0xJQ0UsIFNFUlZJQ0VTX0pTT05fSU5fQVJSLCBTRVJWSUNFU19KU09OX0lOX09CSikpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgYSBsZWZ0LWJyYWNlLCBhbmQgd2UgYXJlIGluIGFuIGFycmF5LCBvYmplY3QsIG9yIHNsaWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkc3RrLCBhcnJheSgnd2hhdCcgPT4gU0VSVklDRVNfSlNPTl9JTl9PQkosICd3aGVyZScgPT4gJGMsICdkZWxpbScgPT4gZmFsc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50KCJGb3VuZCBzdGFydCBvZiBvYmplY3QgYXQgeyRjfVxuIik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgoJGNocnN7JGN9ID09ICd9JykgJiYgKCR0b3BbJ3doYXQnXSA9PSBTRVJWSUNFU19KU09OX0lOX09CSikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBhIHJpZ2h0LWJyYWNlLCBhbmQgd2UncmUgaW4gYW4gb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfcG9wKCRzdGspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJpbnQoIkZvdW5kIGVuZCBvZiBvYmplY3QgYXQgeyRjfTogIi5zdWJzdHIoJGNocnMsICR0b3BbJ3doZXJlJ10sICgxICsgJGMgLSAkdG9wWyd3aGVyZSddKSkuIlxuIik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgoJHN1YnN0cl9jaHJzX2NfMiA9PSAnLyonKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fYXJyYXkoJHRvcFsnd2hhdCddLCBhcnJheShTRVJWSUNFU19KU09OX1NMSUNFLCBTRVJWSUNFU19KU09OX0lOX0FSUiwgU0VSVklDRVNfSlNPTl9JTl9PQkopKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEgY29tbWVudCBzdGFydCwgYW5kIHdlIGFyZSBpbiBhbiBhcnJheSwgb2JqZWN0LCBvciBzbGljZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJHN0aywgYXJyYXkoJ3doYXQnID0+IFNFUlZJQ0VTX0pTT05fSU5fQ01ULCAnd2hlcmUnID0+ICRjLCAnZGVsaW0nID0+IGZhbHNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGMrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50KCJGb3VuZCBzdGFydCBvZiBjb21tZW50IGF0IHskY31cbiIpOworCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoKCRzdWJzdHJfY2hyc19jXzIgPT0gJyovJykgJiYgKCR0b3BbJ3doYXQnXSA9PSBTRVJWSUNFU19KU09OX0lOX0NNVCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBhIGNvbW1lbnQgZW5kLCBhbmQgd2UncmUgaW4gb25lIG5vdworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3BvcCgkc3RrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYysrOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9ICR0b3BbJ3doZXJlJ107ICRpIDw9ICRjOyArKyRpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2hycyA9IHN1YnN0cl9yZXBsYWNlKCRjaHJzLCAnICcsICRpLCAxKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJpbnQoIkZvdW5kIGVuZCBvZiBjb21tZW50IGF0IHskY306ICIuc3Vic3RyKCRjaHJzLCAkdG9wWyd3aGVyZSddLCAoMSArICRjIC0gJHRvcFsnd2hlcmUnXSkpLiJcbiIpOworCisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChyZXNldCgkc3RrKSA9PSBTRVJWSUNFU19KU09OX0lOX0FSUikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRhcnI7CisKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKHJlc2V0KCRzdGspID09IFNFUlZJQ0VTX0pTT05fSU5fT0JKKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJG9iajsKKworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAdG9kbyBVbHRpbWF0ZWx5LCB0aGlzIHNob3VsZCBqdXN0IGNhbGwgUEVBUjo6aXNFcnJvcigpCisgICAgICovCisgICAgZnVuY3Rpb24gaXNFcnJvcigkZGF0YSwgJGNvZGUgPSBudWxsKQorICAgIHsKKyAgICAgICAgaWYgKGNsYXNzX2V4aXN0cygncGVhcicpKSB7CisgICAgICAgICAgICByZXR1cm4gUEVBUjo6aXNFcnJvcigkZGF0YSwgJGNvZGUpOworICAgICAgICB9IGVsc2VpZiAoaXNfb2JqZWN0KCRkYXRhKSAmJiAoZ2V0X2NsYXNzKCRkYXRhKSA9PSAnc2VydmljZXNfanNvbl9lcnJvcicgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3N1YmNsYXNzX29mKCRkYXRhLCAnc2VydmljZXNfanNvbl9lcnJvcicpKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpZiAoY2xhc3NfZXhpc3RzKCdQRUFSX0Vycm9yJykpIHsKKworICAgIGNsYXNzIFNlcnZpY2VzX0pTT05fRXJyb3IgZXh0ZW5kcyBQRUFSX0Vycm9yCisgICAgeworICAgICAgICBmdW5jdGlvbiBTZXJ2aWNlc19KU09OX0Vycm9yKCRtZXNzYWdlID0gJ3Vua25vd24gZXJyb3InLCAkY29kZSA9IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1vZGUgPSBudWxsLCAkb3B0aW9ucyA9IG51bGwsICR1c2VyaW5mbyA9IG51bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcmVudDo6UEVBUl9FcnJvcigkbWVzc2FnZSwgJGNvZGUsICRtb2RlLCAkb3B0aW9ucywgJHVzZXJpbmZvKTsKKyAgICAgICAgfQorICAgIH0KKworfSBlbHNlIHsKKworICAgIC8qKgorICAgICAqIEB0b2RvIFVsdGltYXRlbHksIHRoaXMgY2xhc3Mgc2hhbGwgYmUgZGVzY2VuZGVkIGZyb20gUEVBUl9FcnJvcgorICAgICAqLworICAgIGNsYXNzIFNlcnZpY2VzX0pTT05fRXJyb3IKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIFNlcnZpY2VzX0pTT05fRXJyb3IoJG1lc3NhZ2UgPSAndW5rbm93biBlcnJvcicsICRjb2RlID0gbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbW9kZSA9IG51bGwsICRvcHRpb25zID0gbnVsbCwgJHVzZXJpbmZvID0gbnVsbCkKKyAgICAgICAgeworCisgICAgICAgIH0KKyAgICB9CisKK30KKyAgICAKKz8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvQ2xhc3Nlcy9KU09OX0NvbXBhdC5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9DbGFzc2VzL0pTT05fQ29tcGF0LnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzMxYTVkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvQ2xhc3Nlcy9KU09OX0NvbXBhdC5waHAKQEAgLTAsMCArMSw1MiBAQAorPD9waHAKKyAgLyoqIElmIHRoZXJlIGlzIG5vIGpzb25fZW5jb2RlKCkgb3IganNvbl9kZWNvZGUoKSBmdW5jdGlvbiBhbHJlYWR5IGluIGV4aXN0YW5jZSAocmVjZW50IFBIUCB3aWxsIHByb3ZpZGUgbmF0aXZlKQorICAgKiAgdXNlIHRoZSBQRUFSOjpKU09OIGNsYXNzIHRvIGRvIHRoZSBqb2IuCisgICAqCisgICAqLworICAgCisgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2pzb25fZGVjb2RlJykpCisgIHsKKyAgICAgICAgCisgICAgZnVuY3Rpb24gJmdldF9qc29uKCkKKyAgICB7CisgICAgICBnbG9iYWwgJEpTT05fU2luZ2xldG9uOworICAgICAgaWYoIWlzc2V0KCRKU09OX1NpbmdsZXRvbikpCisgICAgICB7CisgICAgICAgIHJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKSAuICcvSlNPTi5waHAnKTsKKyAgICAgICAgJEpTT05fU2luZ2xldG9uID0gbmV3IFNlcnZpY2VzX0pTT04oKTsKKyAgICAgIH0KKyAgICAgICAgICAgCisgICAgICByZXR1cm4gJEpTT05fU2luZ2xldG9uOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBqc29uX2RlY29kZSgkc3RyLCAkbG9vc2UgPSBGQUxTRSkgCisgICAgeworICAgICAgJGpzb24gPSYgZ2V0X2pzb24oKTsKKyAgICAgIAorICAgICAgaWYoJGxvb3NlKQorICAgICAgeworICAgICAgICAkanNvbi0+dXNlID0gU0VSVklDRVNfSlNPTl9MT09TRV9UWVBFOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAkanNvbi0+dXNlID0gMDsKKyAgICAgIH0KKyAgICAgIAorICAgICAgcmV0dXJuICRqc29uLT5kZWNvZGUoJHN0cik7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIGpzb25fZW5jb2RlKCR2YXIsICRsb29zZSA9IEZBTFNFKQorICAgIHsKKyAgICAgICRqc29uID0mIGdldF9qc29uKCk7CisgICAgICBpZigkbG9vc2UpCisgICAgICB7CisgICAgICAgICRqc29uLT51c2UgPSBTRVJWSUNFU19KU09OX0xPT1NFX1RZUEU7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgICRqc29uLT51c2UgPSAwOworICAgICAgfQorICAgICAgcmV0dXJuICRqc29uLT5lbmNvZGUoJHZhcik7CisgICAgfQorICB9Cis/PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL0NsYXNzZXMvTmV0UEJNLnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL0NsYXNzZXMvTmV0UEJNLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTNmNThmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvQ2xhc3Nlcy9OZXRQQk0ucGhwCkBAIC0wLDAgKzEsMjU3IEBACis8P3BocA0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoqIFRpdGxlLi4uLi4uLi4uOiAgTmV0UEJNIERyaXZlcg0KKyoqIFZlcnNpb24uLi4uLi4uOiAgMS4wDQorKiogQXV0aG9yLi4uLi4uLi46ICBYaWFuZyBXZWkgWkhVTyA8d2VpQHpodW8ub3JnPg0KKyoqIEZpbGVuYW1lLi4uLi4uOiAgTmV0UEJNLnBocA0KKyoqIExhc3QgY2hhbmdlZC4uOiAgMzAgQXVnIDIwMDMgDQorKiogTm90ZXMuLi4uLi4uLi46ICBPcmdpbmFsIGlzIGZyb20gUEVBUg0KKyoqLw0KKw0KKy8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKy8vIHwgUEhQIFZlcnNpb24gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKy8vIHwgQ29weXJpZ2h0IChjKSAxOTk3LTIwMDIgVGhlIFBIUCBHcm91cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKy8vIHwgVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHZlcnNpb24gMi4wMiBvZiB0aGUgUEhQIGxpY2Vuc2UsICAgICAgfA0KKy8vIHwgdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UsIGFuZCBpcyAgICAgICAgfA0KKy8vIHwgYXZhaWxhYmxlIGF0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy8vIHwgaHR0cDovL3d3dy5waHAubmV0L2xpY2Vuc2UvMl8wMi50eHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy8vIHwgSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIFBIUCBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvICAgfA0KKy8vIHwgb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhIG5vdGUgdG8gICAgICAgICAgfA0KKy8vIHwgbGljZW5zZUBwaHAubmV0IHNvIHdlIGNhbiBtYWlsIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuICAgICAgICAgICAgICAgfA0KKy8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKy8vIHwgQXV0aG9yczogUGV0ZXIgQm93eWVyIDxwZXRlckBtYXBsZWRlc2lnbi5jby51az4gICAgICAgICAgICAgICAgICAgICAgfA0KKy8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKy8vDQorLy8gJElkOk5ldFBCTS5waHAgNzA5IDIwMDctMDEtMzAgMjM6MjI6MDRaIHJheSAkDQorLy8NCisvLyBJbWFnZSBUcmFuc2Zvcm1hdGlvbiBpbnRlcmZhY2UgdXNpbmcgY29tbWFuZCBsaW5lIE5ldFBCTQ0KKw0KK3JlcXVpcmVfb25jZSAiLi4vSW1hZ2VNYW5hZ2VyL0NsYXNzZXMvVHJhbnNmb3JtLnBocCI7DQorDQorQ2xhc3MgSW1hZ2VfVHJhbnNmb3JtX0RyaXZlcl9OZXRQQk0gZXh0ZW5kcyBJbWFnZV9UcmFuc2Zvcm0NCit7DQorDQorICAgIC8qKg0KKyAgICAgKiBhc3NvY2lhdGl2ZSBhcnJheSBjb21tYW5kcyB0byBiZSBleGVjdXRlZA0KKyAgICAgKiBAdmFyIGFycmF5DQorICAgICAqLw0KKyAgICB2YXIgJGNvbW1hbmQgPSBhcnJheSgpOw0KKw0KKyAgICAvKioNCisgICAgICogQ2xhc3MgQ29uc3RydWN0b3INCisgICAgICovDQorICAgIGZ1bmN0aW9uIEltYWdlX1RyYW5zZm9ybV9Ecml2ZXJfTmV0UEJNKCkNCisgICAgew0KKyAgICAgICAgJHRoaXMtPnVpZCA9IG1kNSgkX1NFUlZFUlsnUkVNT1RFX0FERFInXSk7DQorICAgICAgICAgICAgDQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfSAvLyBFbmQgZnVuY3Rpb24gSW1hZ2VfTmV0UEJNDQorDQorICAgIC8qKg0KKyAgICAgKiBMb2FkIGltYWdlDQorICAgICAqDQorICAgICAqIEBwYXJhbSBzdHJpbmcgZmlsZW5hbWUNCisgICAgICoNCisgICAgICogQHJldHVybiBtaXhlZCBub25lIG9yIGEgUEVBUiBlcnJvciBvYmplY3Qgb24gZXJyb3INCisgICAgICogQHNlZSBQRUFSOjppc0Vycm9yKCkNCisgICAgICovDQorICAgIGZ1bmN0aW9uIGxvYWQoJGltYWdlKQ0KKyAgICB7DQorICAgICAgICAvL2VjaG8gJGltYWdlOw0KKyAgICAgICAgJHRoaXMtPmltYWdlID0gJGltYWdlOw0KKyAgICAgICAgJHRoaXMtPl9nZXRfaW1hZ2VfZGV0YWlscygkaW1hZ2UpOw0KKyAgICB9IC8vIEVuZCBsb2FkDQorDQorICAgIC8qKg0KKyAgICAgKiBSZXNpemVzIHRoZSBpbWFnZQ0KKyAgICAgKg0KKyAgICAgKiBAcmV0dXJuIG5vbmUNCisgICAgICogQHNlZSBQRUFSOjppc0Vycm9yKCkNCisgICAgICovDQorICAgIGZ1bmN0aW9uIF9yZXNpemUoJG5ld194LCAkbmV3X3kpDQorICAgIHsNCisgICAgICAgIC8vIHRoZXJlJ3Mgbm8gdGVjaG5pY2FsIHJlYXNvbiB3aHkgcmVzaXplIGNhbid0IGJlIGNhbGxlZCBtdWx0aXBsZQ0KKyAgICAgICAgLy8gdGltZXMuLi5pdCdzIGp1c3Qgc2lsbHkgdG8gZG8gc28NCisNCisgICAgICAgICR0aGlzLT5jb21tYW5kW10gPSBJTUFHRV9UUkFOU0ZPUk1fTElCX1BBVEggLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJwbm1zY2FsZSAtd2lkdGggJG5ld194IC1oZWlnaHQgJG5ld195IjsNCisNCisgICAgICAgICR0aGlzLT5fc2V0X25ld194KCRuZXdfeCk7DQorICAgICAgICAkdGhpcy0+X3NldF9uZXdfeSgkbmV3X3kpOw0KKyAgICB9IC8vIEVuZCByZXNpemUNCisNCisgICAgLyoqDQorICAgICAqIENyb3AgdGhlIGltYWdlDQorICAgICAqDQorICAgICAqIEBwYXJhbSBpbnQgJGNyb3BfeCBsZWZ0IGNvbHVtbiBvZiB0aGUgaW1hZ2UNCisgICAgICogQHBhcmFtIGludCAkY3JvcF95IHRvcCByb3cgb2YgdGhlIGltYWdlDQorICAgICAqIEBwYXJhbSBpbnQgJGNyb3Bfd2lkdGggbmV3IGNyb3BwZWQgaW1hZ2Ugd2lkdGgNCisgICAgICogQHBhcmFtIGludCAkY3JvcF9oZWlnaHQgbmV3IGNyb3BwZWQgaW1hZ2UgaGVpZ2h0DQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBjcm9wKCRjcm9wX3gsICRjcm9wX3ksICRjcm9wX3dpZHRoLCAkY3JvcF9oZWlnaHQpIA0KKyAgICB7DQorICAgICAgICAkdGhpcy0+Y29tbWFuZFtdID0gSU1BR0VfVFJBTlNGT1JNX0xJQl9QQVRIIC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBubWN1dCAtbGVmdCAkY3JvcF94IC10b3AgJGNyb3BfeSAtd2lkdGggJGNyb3Bfd2lkdGggLWhlaWdodCAkY3JvcF9oZWlnaHQiOw0KKyAgICB9DQorDQorICAgIC8qKg0KKyAgICAgKiBSb3RhdGVzIHRoZSBpbWFnZQ0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gaW50ICRhbmdsZSBUaGUgYW5nbGUgdG8gcm90YXRlIHRoZSBpbWFnZSB0aHJvdWdoDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiByb3RhdGUoJGFuZ2xlKQ0KKyAgICB7DQorICAgICAgICAkYW5nbGUgPSAtMSpmbG9hdHZhbCgkYW5nbGUpOw0KKw0KKyAgICAgICAgaWYoJGFuZ2xlID4gOTApDQorICAgICAgICB7ICAgDQorICAgICAgICAgICAgJHRoaXMtPmNvbW1hbmRbXSA9IElNQUdFX1RSQU5TRk9STV9MSUJfUEFUSCAuICJwbm1yb3RhdGUgLW5vYW50aWFsaWFzIDkwIjsNCisgICAgICAgICAgICAkdGhpcy0+cm90YXRlKC0xKigkYW5nbGUtOTApKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgaWYgKCRhbmdsZSA8IC05MCkNCisgICAgICAgIHsNCisgICAgICAgICAgICAkdGhpcy0+Y29tbWFuZFtdID0gSU1BR0VfVFJBTlNGT1JNX0xJQl9QQVRIIC4gInBubXJvdGF0ZSAtbm9hbnRpYWxpYXMgLTkwIjsNCisgICAgICAgICAgICAkdGhpcy0+cm90YXRlKC0xKigkYW5nbGUrOTApKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgICAgICAkdGhpcy0+Y29tbWFuZFtdID0gSU1BR0VfVFJBTlNGT1JNX0xJQl9QQVRIIC4gInBubXJvdGF0ZSAtbm9hbnRpYWxpYXMgJGFuZ2xlIjsNCisgICAgfSAvLyBFbmQgcm90YXRlDQorDQorICAgIC8qKg0KKyAgICAgKiBGbGlwIHRoZSBpbWFnZSBob3Jpem9udGFsbHkgb3IgdmVydGljYWxseQ0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gYm9vbGVhbiAkaG9yaXpvbnRhbCB0cnVlIGlmIGhvcml6b250YWwgZmxpcCwgdmVydGljYWwgb3RoZXJ3aXNlDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBmbGlwKCRob3Jpem9udGFsKSANCisgICAgew0KKyAgICAgICAgaWYoJGhvcml6b250YWwpIA0KKyAgICAgICAgICAgICR0aGlzLT5jb21tYW5kW10gPSBJTUFHRV9UUkFOU0ZPUk1fTElCX1BBVEggLiAicG5tZmxpcCAtbHIiOw0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICR0aGlzLT5jb21tYW5kW10gPSBJTUFHRV9UUkFOU0ZPUk1fTElCX1BBVEggLiAicG5tZmxpcCAtdGIiOw0KKyAgICB9DQorDQorICAgIC8qKg0KKyAgICAgKiBBZGp1c3QgdGhlIGltYWdlIGdhbW1hDQorICAgICAqDQorICAgICAqIEBwYXJhbSBmbG9hdCAkb3V0cHV0Z2FtbWENCisgICAgICoNCisgICAgICogQHJldHVybiBub25lDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBnYW1tYSgkb3V0cHV0Z2FtbWEgPSAxLjApIHsNCisgICAgICAgICR0aGlzLT5jb21tYW5kWzEzXSA9IElNQUdFX1RSQU5TRk9STV9MSUJfUEFUSCAuICJwbm1nYW1tYSAkb3V0cHV0Z2FtbWEiOw0KKyAgICB9DQorDQorICAgIC8qKg0KKyAgICAgKiBhZGRzIHRleHQgdG8gYW4gaW1hZ2UNCisgICAgICoNCisgICAgICogQHBhcmFtICAgYXJyYXkgICBvcHRpb25zICAgICBBcnJheSBjb250YWlucyBvcHRpb25zDQorICAgICAqICAgICAgICAgICAgIGFycmF5KA0KKyAgICAgKiAgICAgICAgICAgICAgICAgICd0ZXh0JyAgICAgICAgICAvLyBUaGUgc3RyaW5nIHRvIGRyYXcNCisgICAgICogICAgICAgICAgICAgICAgICAneCcgICAgICAgICAgICAgLy8gSG9yaXpvbnRhbCBwb3NpdGlvbg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICd5JyAgICAgICAgICAgICAvLyBWZXJ0aWNhbCBQb3NpdGlvbg0KKyAgICAgKiAgICAgICAgICAgICAgICAgICdDb2xvcicgICAgICAgICAvLyBGb250IGNvbG9yDQorICAgICAqICAgICAgICAgICAgICAgICAgJ2ZvbnQnICAgICAgICAgIC8vIEZvbnQgdG8gYmUgdXNlZA0KKyAgICAgKiAgICAgICAgICAgICAgICAgICdzaXplJyAgICAgICAgICAvLyBTaXplIG9mIHRoZSBmb250cyBpbiBwaXhlbA0KKyAgICAgKiAgICAgICAgICAgICAgICAgICdyZXNpemVfZmlyc3QnICAvLyBUZWxsIGlmIHRoZSBpbWFnZSBoYXMgdG8gYmUgcmVzaXplZA0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWZvcmUgZHJhd2luZyB0aGUgdGV4dA0KKyAgICAgKiAgICAgICAgICAgICAgICAgICApDQorICAgICAqDQorICAgICAqIEByZXR1cm4gbm9uZQ0KKyAgICAgKi8NCisgICAgZnVuY3Rpb24gYWRkVGV4dCgkcGFyYW1zKQ0KKyAgICB7DQorICAgICAgICAkZGVmYXVsdF9wYXJhbXMgPSBhcnJheSgndGV4dCcgPT4gJ1RoaXMgaXMgVGV4dCcsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneCcgPT4gMTAsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneScgPT4gMjAsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sb3InID0+ICdyZWQnLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQnID0+ICdBcmlhbC50dGYnLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemUnID0+ICcxMicsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5nbGUnID0+IDAsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzaXplX2ZpcnN0JyA9PiBmYWxzZSk7DQorICAgICAgICAvLyB3ZSBpZ25vcmUgJ3Jlc2l6ZV9maXJzdCcgc2luY2UgdGhlIG1vcmUgbG9naWNhbCBhcHByb2FjaCB3b3VsZCBiZQ0KKyAgICAgICAgLy8gZm9yIHRoZSB1c2VyIHRvIGp1c3QgY2FsbCAkdGhpcy0+X3Jlc2l6ZSgpIF9maXJzdF8gOykNCisgICAgICAgIGV4dHJhY3QoYXJyYXlfbWVyZ2UoJGRlZmF1bHRfcGFyYW1zLCAkcGFyYW1zKSk7DQorICAgICAgICAkdGhpcy0+Y29tbWFuZFtdID0gInBwbWxhYmVsIC1hbmdsZSAkYW5nbGUgLWNvbG91ciAkY29sb3IgLXNpemUgIg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC4iJHNpemUgLXggJHggLXkgIi4keSskc2l6ZS4iIC10ZXh0IFwiJHRleHRcIiI7DQorICAgIH0gLy8gRW5kIGFkZFRleHQNCisNCisgICAgZnVuY3Rpb24gX3Bvc3RQcm9jZXNzKCR0eXBlLCAkcXVhbGl0eSwgJHNhdmVfdHlwZSkNCisgICAgew0KKyAgICAgICAgJHR5cGUgPSBpc19udWxsKCR0eXBlKSB8fCAkdHlwZT09Jyc/ICR0aGlzLT50eXBlIDogJHR5cGU7DQorICAgICAgICAkc2F2ZV90eXBlID0gaXNfbnVsbCgkc2F2ZV90eXBlKSB8fCAkc2F2ZV90eXBlPT0nJz8gJHRoaXMtPnR5cGUgOiAkc2F2ZV90eXBlOw0KKyAgICAgICAgLy9lY2hvICJUWVBFOiIuICR0aGlzLT50eXBlOw0KKyAgICAgICAgYXJyYXlfdW5zaGlmdCgkdGhpcy0+Y29tbWFuZCwgSU1BR0VfVFJBTlNGT1JNX0xJQl9QQVRIDQorICAgICAgICAgICAgICAgICAgICAgIC4gJHR5cGUuJ3RvcG5tICcuICR0aGlzLT5pbWFnZSk7DQorICAgICAgICAkYXJnID0gJyc7DQorICAgICAgICBzd2l0Y2goc3RydG9sb3dlcigkc2F2ZV90eXBlKSl7DQorICAgICAgICAgICAgY2FzZSAnZ2lmJzoNCisgICAgICAgICAgICAgICAgJHRoaXMtPmNvbW1hbmRbXSA9IElNQUdFX1RSQU5TRk9STV9MSUJfUEFUSCAuICJwcG1xdWFudCAyNTYiOw0KKyAgICAgICAgICAgICAgICAkdGhpcy0+Y29tbWFuZFtdID0gSU1BR0VfVFJBTlNGT1JNX0xJQl9QQVRIIC4gInBwbXRvJHNhdmVfdHlwZSI7DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIGNhc2UgJ2pwZyc6DQorICAgICAgICAgICAgY2FzZSAnanBlZyc6DQorICAgICAgICAgICAgICAgICRhcmcgPSAiLS1xdWFsaXR5PSRxdWFsaXR5IjsNCisgICAgICAgICAgICAgICAgJHRoaXMtPmNvbW1hbmRbXSA9IElNQUdFX1RSQU5TRk9STV9MSUJfUEFUSCAuICJwcG10byRzYXZlX3R5cGUgJGFyZyI7DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgICAgICR0aGlzLT5jb21tYW5kW10gPSBJTUFHRV9UUkFOU0ZPUk1fTElCX1BBVEggLiAicG5tdG8kc2F2ZV90eXBlICRhcmciOw0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0gLy8gc3dpdGNoDQorICAgICAgICByZXR1cm4gaW1wbG9kZSgnfCcsICR0aGlzLT5jb21tYW5kKTsNCisgICAgfSANCisNCisgICAgLyoqDQorICAgICAqIFNhdmUgdGhlIGltYWdlIGZpbGUNCisgICAgICoNCisgICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gd3JpdGUgdG8NCisgICAgICogQHBhcmFtIHN0cmluZyAkdHlwZSAoanBlZyxwbmcuLi4pOw0KKyAgICAgKiBAcGFyYW0gaW50ICRxdWFsaXR5IDc1DQorICAgICAqIEByZXR1cm4gbm9uZQ0KKyAgICAgKi8NCisgICAgZnVuY3Rpb24gc2F2ZSgkZmlsZW5hbWUsICR0eXBlPW51bGwsICRxdWFsaXR5ID0gODUpDQorICAgIHsNCisgICAgICAgICRjbWQgPSAkdGhpcy0+X3Bvc3RQcm9jZXNzKCcnLCAkcXVhbGl0eSwgJHR5cGUpIC4gIj4kZmlsZW5hbWUiOw0KKyAgICAgICAgICAgIA0KKwkJLy9pZiB3ZSBoYXZlIHdpbmRvd3Mgc2VydmVyDQorICAgICAgICBpZihpc3NldCgkX0VOVlsnT1MnXSkgJiYgZXJlZ2koJ3dpbmRvdycsJF9FTlZbJ09TJ10pKQ0KKwkJCSRjbWQgPSBlcmVnX3JlcGxhY2UoJy8nLCdcXCcsJGNtZCk7DQorICAgICAgICAvL2VjaG8gJGNtZC4iIyMiOw0KKyAgICAgICAgJG91dHB1dCA9IHN5c3RlbSgkY21kKTsNCisJCWVycm9yX2xvZygnTkVUUEJNOiAnLiRjbWQpOw0KKwkJLy9lcnJvcl9sb2coJG91dHB1dCk7DQorICAgICAgICAkdGhpcy0+Y29tbWFuZCA9IGFycmF5KCk7DQorICAgIH0gLy8gRW5kIHNhdmUNCisNCisNCisgICAgLyoqDQorICAgICAqIERpc3BsYXkgaW1hZ2Ugd2l0aG91dCBzYXZpbmcgYW5kIGxvc2UgY2hhbmdlcw0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gc3RyaW5nICR0eXBlIChqcGVnLHBuZy4uLik7DQorICAgICAqIEBwYXJhbSBpbnQgJHF1YWxpdHkgNzUNCisgICAgICogQHJldHVybiBub25lDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBkaXNwbGF5KCR0eXBlID0gbnVsbCwgJHF1YWxpdHkgPSA3NSkNCisgICAgew0KKyAgICAgICAgaGVhZGVyKCdDb250ZW50LXR5cGU6IGltYWdlLycgLiAkdHlwZSk7DQorICAgICAgICAkY21kID0gJHRoaXMtPl9wb3N0UHJvY2VzcygkdHlwZSwgJHF1YWxpdHkpOw0KKyAgICAgICAgDQorICAgICAgICBwYXNzdGhydSgkY21kKTsNCisgICAgICAgICR0aGlzLT5jb21tYW5kID0gYXJyYXkoKTsNCisgICAgfQ0KKw0KKyAgICAvKioNCisgICAgICogRGVzdHJveSBpbWFnZSBoYW5kbGUNCisgICAgICoNCisgICAgICogQHJldHVybiBub25lDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBmcmVlKCkNCisgICAgew0KKyAgICAgICAgLy8gdGhlcmUgaXMgbm8gaW1hZ2UgaGFuZGxlIGhlcmUNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9DQorDQorDQorfSAvLyBFbmQgY2xhc3MgTmV0UEJNDQorPz4NCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9DbGFzc2VzL1RodW1ibmFpbC5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9DbGFzc2VzL1RodW1ibmFpbC5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFiNDU1ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL0NsYXNzZXMvVGh1bWJuYWlsLnBocApAQCAtMCwwICsxLDEyNSBAQAorPD9waHANCisvKioNCisgKiBDcmVhdGUgdGh1bWJuYWlscy4NCisgKiBAYXV0aG9yICRBdXRob3I6cmF5ICQNCisgKiBAdmVyc2lvbiAkSWQ6VGh1bWJuYWlsLnBocCA3MDkgMjAwNy0wMS0zMCAyMzoyMjowNFogcmF5ICQNCisgKiBAcGFja2FnZSBJbWFnZU1hbmFnZXINCisgKi8NCisNCisNCityZXF1aXJlX29uY2UoJy4uL0ltYWdlTWFuYWdlci9DbGFzc2VzL1RyYW5zZm9ybS5waHAnKTsNCisNCisvKioNCisgKiBUaHVtYm5haWwgY3JlYXRpb24NCisgKiBAYXV0aG9yICRBdXRob3I6cmF5ICQNCisgKiBAdmVyc2lvbiAkSWQ6VGh1bWJuYWlsLnBocCA3MDkgMjAwNy0wMS0zMCAyMzoyMjowNFogcmF5ICQNCisgKiBAcGFja2FnZSBJbWFnZU1hbmFnZXINCisgKiBAc3VicGFja2FnZSBJbWFnZXMNCisgKi8NCitjbGFzcyBUaHVtYm5haWwgDQorew0KKwkvKioNCisJICogR3JhcGhpY3MgZHJpdmVyLCBHRCwgTmV0UEJNIG9yIEltYWdlTWFnaWNrLg0KKwkgKi8NCisJdmFyICRkcml2ZXI7DQorDQorCS8qKg0KKwkgKiBUaHVtYm5haWwgZGVmYXVsdCB3aWR0aC4NCisJICovDQorCXZhciAkd2lkdGggPSA5NjsNCisNCisJLyoqDQorCSAqIFRodW1ibmFpbCBkZWZhdWx0IGhlaWdodC4NCisJICovDQorCXZhciAkaGVpZ2h0ID0gOTY7DQorDQorCS8qKg0KKwkgKiBUaHVtYm5haWwgZGVmYXVsdCBKUEVHIHF1YWxpdHkuDQorCSAqLw0KKwl2YXIgJHF1YWxpdHkgPSA4NTsNCisNCisJLyoqDQorCSAqIFRodW1ibmFpbCBpcyBwcm9wb3J0aW9uYWwNCisJICovDQorCXZhciAkcHJvcG9ydGlvbmFsID0gdHJ1ZTsNCisNCisJLyoqDQorCSAqIERlZmF1bHQgaW1hZ2UgdHlwZSBpcyBKUEVHLg0KKwkgKi8NCisJdmFyICR0eXBlID0gJ2pwZWcnOw0KKw0KKwkvKioNCisJICogQ3JlYXRlIGEgbmV3IFRodW1ibmFpbCBpbnN0YW5jZS4NCisJICogQHBhcmFtIGludCAkd2lkdGggdGh1bWJuYWlsIHdpZHRoDQorCSAqIEBwYXJhbSBpbnQgJGhlaWdodCB0aHVtYm5haWwgaGVpZ2h0DQorCSAqLw0KKwlmdW5jdGlvbiBUaHVtYm5haWwoJHdpZHRoPTk2LCAkaGVpZ2h0PTk2KSANCisJew0KKwkJJHRoaXMtPmRyaXZlciA9IEltYWdlX1RyYW5zZm9ybTo6ZmFjdG9yeShJTUFHRV9DTEFTUyk7DQorCQkkdGhpcy0+d2lkdGggPSAkd2lkdGg7DQorCQkkdGhpcy0+aGVpZ2h0ID0gJGhlaWdodDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlIGEgdGh1bWJuYWlsLg0KKwkgKiBAcGFyYW0gc3RyaW5nICRmaWxlIHRoZSBpbWFnZSBmb3IgdGhlIHRodW1ibmFpbA0KKwkgKiBAcGFyYW0gc3RyaW5nICR0aHVtYm5haWwgaWYgbm90IG51bGwsIHRoZSB0aHVtYm5haWwgd2lsbCBiZSBzYXZlZA0KKwkgKiBhcyB0aGlzIHBhcmFtZXRlciB2YWx1ZS4NCisJICogQHJldHVybiBib29sZWFuIHRydWUgaWYgdGh1bWJuYWlsIGlzIGNyZWF0ZWQsIGZhbHNlIG90aGVyd2lzZQ0KKwkgKi8NCisJZnVuY3Rpb24gY3JlYXRlVGh1bWJuYWlsKCRmaWxlLCAkdGh1bWJuYWlsPW51bGwpIA0KKwl7DQorCQlpZighaXNfZmlsZSgkZmlsZSkpIA0KKwkJCVJldHVybiBmYWxzZTsNCisNCisJCS8vZXJyb3JfbG9nKCdDcmVhdGluZyBUaHVtYnM6ICcuJGZpbGUpOw0KKw0KKwkJJHRoaXMtPmRyaXZlci0+bG9hZCgkZmlsZSk7DQorDQorCQlpZigkdGhpcy0+cHJvcG9ydGlvbmFsKSANCisJCXsNCisJCQkkd2lkdGggPSAkdGhpcy0+ZHJpdmVyLT5pbWdfeDsNCisJCQkkaGVpZ2h0ID0gJHRoaXMtPmRyaXZlci0+aW1nX3k7DQorDQorCQkJaWYgKCR3aWR0aCA+ICRoZWlnaHQpDQorCQkJCSR0aGlzLT5oZWlnaHQgPSBpbnR2YWwoJHRoaXMtPndpZHRoLyR3aWR0aCokaGVpZ2h0KTsNCisJCQllbHNlIGlmICgkaGVpZ2h0ID4gJHdpZHRoKQ0KKwkJCQkkdGhpcy0+d2lkdGggPSBpbnR2YWwoJHRoaXMtPmhlaWdodC8kaGVpZ2h0KiR3aWR0aCk7DQorCQl9DQorDQorCQkkdGhpcy0+ZHJpdmVyLT5yZXNpemUoJHRoaXMtPndpZHRoLCAkdGhpcy0+aGVpZ2h0KTsNCisNCisJCWlmKGlzX251bGwoJHRodW1ibmFpbCkpIA0KKwkJCSR0aGlzLT5zYXZlKCRmaWxlKTsNCisJCWVsc2UNCisJCQkkdGhpcy0+c2F2ZSgkdGh1bWJuYWlsKTsNCisNCisNCisJCSR0aGlzLT5mcmVlKCk7DQorDQorCQlpZihpc19maWxlKCR0aHVtYm5haWwpKSANCisJCQlSZXR1cm4gdHJ1ZTsNCisJCWVsc2UNCisJCQlSZXR1cm4gZmFsc2U7DQorCX0NCisNCisJLyoqDQorCSAqIFNhdmUgdGhlIHRodW1ibmFpbCBmaWxlLg0KKwkgKiBAcGFyYW0gc3RyaW5nICRmaWxlIGZpbGUgbmFtZSB0byBiZSBzYXZlZCBhcy4NCisJICovDQorCWZ1bmN0aW9uIHNhdmUoJGZpbGUpIA0KKwl7DQorCQkkdGhpcy0+ZHJpdmVyLT5zYXZlKCRmaWxlKTsNCisJfQ0KKw0KKwkvKioNCisJICogRnJlZSB1cCB0aGUgZ3JhcGhpYyBkcml2ZXIgcmVzb3VyY2VzLg0KKwkgKi8NCisJZnVuY3Rpb24gZnJlZSgpIA0KKwl7DQorCQkkdGhpcy0+ZHJpdmVyLT5mcmVlKCk7DQorCX0NCit9DQorDQorDQorPz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9DbGFzc2VzL1RyYW5zZm9ybS5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9DbGFzc2VzL1RyYW5zZm9ybS5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY2Mzc5OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL0NsYXNzZXMvVHJhbnNmb3JtLnBocApAQCAtMCwwICsxLDU2OSBAQAorPD9waHANCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqKiBUaXRsZS4uLi4uLi4uLjogIEltYWdlIFRyYW5zZm9ybWF0aW9uIEludGVyZmFjZQ0KKyoqIFZlcnNpb24uLi4uLi4uOiAgMS4wDQorKiogQXV0aG9yLi4uLi4uLi46ICBYaWFuZyBXZWkgWkhVTyA8d2VpQHpodW8ub3JnPg0KKyoqIEZpbGVuYW1lLi4uLi4uOiAgVHJhbnNmb3JtLnBocA0KKyoqIExhc3QgY2hhbmdlZC4uOiAgMzAgQXVnIDIwMDMgDQorKiogTm90ZXMuLi4uLi4uLi46ICBPcmdpbmFsIGlzIGZyb20gUEVBUg0KKyAgICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgICAgICBBZGRlZCBhIGZldyBleHRyYSwNCisgICAgICAgICAgICAgICAgICAgICAgICAtIGNyZWF0ZSB1bmlxdWUgZmlsZW5hbWUgaW4gYSBwYXJ0aWN1bGFyIGRpcmVjdG9yeSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgZm9yIHRlbXAgaW1hZ2UgZmlsZXMuDQorICAgICAgICAgICAgICAgICAgICAgICAgLSBhZGRlZCBjcm9wcGluZyB0byBHRCwgTmV0UEJNLCBJbWFnZU1hZ2ljaw0KKyoqLw0KKw0KKy8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKy8vIHwgUEhQIFZlcnNpb24gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKy8vIHwgQ29weXJpZ2h0IChjKSAxOTk3LTIwMDIgVGhlIFBIUCBHcm91cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKy8vIHwgVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHZlcnNpb24gMi4wMiBvZiB0aGUgUEhQIGxpY2Vuc2UsICAgICAgfA0KKy8vIHwgdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UsIGFuZCBpcyAgICAgICAgfA0KKy8vIHwgYXZhaWxhYmxlIGF0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy8vIHwgaHR0cDovL3d3dy5waHAubmV0L2xpY2Vuc2UvMl8wMi50eHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy8vIHwgSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIFBIUCBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvICAgfA0KKy8vIHwgb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhIG5vdGUgdG8gICAgICAgICAgfA0KKy8vIHwgbGljZW5zZUBwaHAubmV0IHNvIHdlIGNhbiBtYWlsIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuICAgICAgICAgICAgICAgfA0KKy8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKy8vIHwgQXV0aG9yczogUGV0ZXIgQm93eWVyIDxwZXRlckBtYXBsZWRlc2lnbi5jby51az4gICAgICAgICAgICAgICAgICAgICAgfA0KKy8vIHwgICAgICAgICAgQWxhbiBLbm93bGVzIDxhbGFuQGFrYmtob21lLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy8vIHwgICAgICAgICAgVmluY2VudCBPb3N0aW5kaWUgPHZpbmNlbnRAc3VubGlnaHQudG1md2ViLm5sPiAgICAgICAgICAgICAgfA0KKy8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKy8vDQorLy8gJElkOlRyYW5zZm9ybS5waHAgNzA5IDIwMDctMDEtMzAgMjM6MjI6MDRaIHJheSAkDQorLy8NCisvLyBJbWFnZSBUcmFuc2Zvcm1hdGlvbiBpbnRlcmZhY2UNCisvLw0KKw0KKw0KKy8qKg0KKyAqIFRoZSBtYWluICJJbWFnZV9SZXNpemUiIGNsYXNzIGlzIGEgY29udGFpbmVyIGFuZCBiYXNlIGNsYXNzIHdoaWNoDQorICogcHJvdmlkZXMgdGhlIHN0YXRpYyBtZXRob2RzIGZvciBjcmVhdGluZyBJbWFnZSBvYmplY3RzIGFzIHdlbGwgYXMNCisgKiBzb21lIHV0aWxpdHkgZnVuY3Rpb25zIChtYXRocykgY29tbW9uIHRvIGFsbCBwYXJ0cyBvZiBJbWFnZSBSZXNpemUuDQorICoNCisgKiBUaGUgb2JqZWN0IG1vZGVsIG9mIERCIGlzIGFzIGZvbGxvd3MgKGluZGVudGF0aW9uIG1lYW5zIGluaGVyaXRhbmNlKToNCisgKg0KKyAqIEltYWdlX1Jlc2l6ZSBUaGUgYmFzZSBmb3IgZWFjaCBJbWFnZSBpbXBsZW1lbnRhdGlvbi4gIFByb3ZpZGVzIGRlZmF1bHQNCisgKiB8ICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zIChpbiBPTyBsaW5nbyB2aXJ0dWFsIG1ldGhvZHMpIGZvcg0KKyAqIHwgICAgICAgICAgICB0aGUgYWN0dWFsIEltYWdlIGltcGxlbWVudGF0aW9ucyBhcyB3ZWxsIGFzIGEgYnVuY2ggb2YNCisgKiB8ICAgICAgICAgICAgbWF0aHMgbWV0aG9kcy4NCisgKiB8DQorICogKy1JbWFnZV9HRCAgIFRoZSBJbWFnZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIFBIUCBHRCBleHRlbnNpb24gLiAgSW5oZXJpdHMNCisgKiAgICAgICAgICAgICAgSW1hZ2VfUmVzaXplDQorICogICAgICAgICAgICAgIFdoZW4gY2FsbGluZyBEQjo6c2V0dXAgZm9yIEdEIGltYWdlcyB0aGUgb2JqZWN0IHJldHVybmVkIGlzIGFuDQorICogICAgICAgICAgICAgIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuDQorICoNCisgKiBAcGFja2FnZSAgSW1hZ2UgUmVzaXplDQorICogQHZlcnNpb24gIDEuMDANCisgKiBAYXV0aG9yICAgUGV0ZXIgQm93eWVyIDxwZXRlckBtYXBsZWRlc2lnbi5jby51az4NCisgKiBAc2luY2UgICAgUEhQIDQuMA0KKyAqLw0KK0NsYXNzIEltYWdlX1RyYW5zZm9ybQ0KK3sNCisgICAgLyoqDQorICAgICAqIE5hbWUgb2YgdGhlIGltYWdlIGZpbGUNCisgICAgICogQHZhciBzdHJpbmcNCisgICAgICovDQorICAgIHZhciAkaW1hZ2UgPSAnJzsNCisgICAgLyoqDQorICAgICAqIFR5cGUgb2YgdGhlIGltYWdlIGZpbGUgKGVnLiBqcGcsIGdpZiBwbmcgLi4uKQ0KKyAgICAgKiBAdmFyIHN0cmluZw0KKyAgICAgKi8NCisgICAgdmFyICR0eXBlID0gJyc7DQorICAgIC8qKg0KKyAgICAgKiBPcmlnaW5hbCBpbWFnZSB3aWR0aCBpbiB4IGRpcmVjdGlvbg0KKyAgICAgKiBAdmFyIGludA0KKyAgICAgKi8NCisgICAgdmFyICRpbWdfeCA9ICcnOw0KKyAgICAvKioNCisgICAgICogT3JpZ2luYWwgaW1hZ2Ugd2lkdGggaW4geSBkaXJlY3Rpb24NCisgICAgICogQHZhciBpbnQNCisgICAgICovDQorICAgIHZhciAkaW1nX3kgPSAnJzsNCisgICAgLyoqDQorICAgICAqIE5ldyBpbWFnZSB3aWR0aCBpbiB4IGRpcmVjdGlvbg0KKyAgICAgKiBAdmFyIGludA0KKyAgICAgKi8NCisgICAgdmFyICRuZXdfeCA9ICcnOw0KKyAgICAvKioNCisgICAgICogTmV3IGltYWdlIHdpZHRoIGluIHkgZGlyZWN0aW9uDQorICAgICAqIEB2YXIgaW50DQorICAgICAqLw0KKyAgICB2YXIgJG5ld195ID0gJyc7DQorICAgIC8qKg0KKyAgICAgKiBQYXRoIHRoZSB0aGUgbGlicmFyeSB1c2VkDQorICAgICAqIGUuZy4gL3Vzci9sb2NhbC9JbWFnZU1hZ2ljay9iaW4vIG9yDQorICAgICAqIC91c3IvbG9jYWwvbmV0cGJtLw0KKyAgICAgKi8NCisgICAgdmFyICRsaWJfcGF0aCA9ICcnOw0KKyAgICAvKioNCisgICAgICogRmxhZyB0byB3YXJuIGlmIGltYWdlIGhhcyBiZWVuIHJlc2l6ZWQgbW9yZSB0aGFuIG9uY2UgYmVmb3JlIGRpc3BsYXlpbmcNCisgICAgICogb3Igc2F2aW5nLg0KKyAgICAgKi8NCisgICAgIHZhciAkcmVzaXplZCA9IGZhbHNlOw0KKw0KKw0KKyAgICAgdmFyICR1aWQgPSAnJzsNCisNCisgICAgIHZhciAkbGFwc2VfdGltZSA9OTAwOyAvLzE1IG1pbnMNCisNCisgICAgLyoqDQorICAgICAqIENyZWF0ZSBhIG5ldyBJbWFnZV9yZXNpemUgb2JqZWN0DQorICAgICAqDQorICAgICAqIEBwYXJhbSBzdHJpbmcgJGRyaXZlciBuYW1lIG9mIGRyaXZlciBjbGFzcyB0byBpbml0aWFsaXplDQorICAgICAqDQorICAgICAqIEByZXR1cm4gbWl4ZWQgYSBuZXdseSBjcmVhdGVkIEltYWdlX1RyYW5zZm9ybSBvYmplY3QsIG9yIGEgUEVBUg0KKyAgICAgKiBlcnJvciBvYmplY3Qgb24gZXJyb3INCisgICAgICoNCisgICAgICogQHNlZSBQRUFSOjppc0Vycm9yKCkNCisgICAgICogQHNlZSBJbWFnZV9UcmFuc2Zvcm06OnNldE9wdGlvbigpDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiAmZmFjdG9yeSgkZHJpdmVyKQ0KKyAgICB7DQorICAgICAgICBpZiAoJycgPT0gJGRyaXZlcikgew0KKyAgICAgICAgICAgIGRpZSgiTm8gaW1hZ2UgbGlicmFyeSBzcGVjaWZpZWQuLi4gYWJvcnRpbmcuICBZb3UgbXVzdCBjYWxsIDo6ZmFjdG9yeSgpIHdpdGggb25lIHBhcmFtZXRlciwgdGhlIGxpYnJhcnkgdG8gbG9hZC4iKTsNCisNCisgICAgICAgIH0NCisgICAgICAgICR0aGlzLT51aWQgPSBtZDUoJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10pOw0KKw0KKyAgICAgICAgaW5jbHVkZV9vbmNlICIuLi9JbWFnZU1hbmFnZXIvQ2xhc3Nlcy8kZHJpdmVyLnBocCI7DQorDQorICAgICAgICAkY2xhc3NuYW1lID0gIkltYWdlX1RyYW5zZm9ybV9Ecml2ZXJfeyRkcml2ZXJ9IjsNCisgICAgICAgICRvYmogPSBuZXcgJGNsYXNzbmFtZTsNCisgICAgICAgIHJldHVybiAkb2JqOw0KKyAgICB9DQorDQorDQorICAgIC8qKg0KKyAgICAgKiBSZXNpemUgdGhlIEltYWdlIGluIHRoZSBYIGFuZC9vciBZIGRpcmVjdGlvbg0KKyAgICAgKiBJZiBlaXRoZXIgaXMgMCBpdCB3aWxsIGJlIHNjYWxlZCBwcm9wb3J0aW9uYWxseQ0KKyAgICAgKg0KKyAgICAgKiBAYWNjZXNzIHB1YmxpYw0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gbWl4ZWQgJG5ld194ICgwLCBudW1iZXIsIHBlcmNlbnRhZ2UgMTAlIG9yIDAuMSkNCisgICAgICogQHBhcmFtIG1peGVkICRuZXdfeSAoMCwgbnVtYmVyLCBwZXJjZW50YWdlIDEwJSBvciAwLjEpDQorICAgICAqDQorICAgICAqIEByZXR1cm4gbWl4ZWQgbm9uZSBvciBQRUFSX2Vycm9yDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiByZXNpemUoJG5ld194ID0gMCwgJG5ld195ID0gMCkNCisgICAgew0KKyAgICAgICAgLy8gMCBtZWFucyBrZWVwIG9yaWdpbmFsIHNpemUNCisgICAgICAgICRuZXdfeCA9ICgwID09ICRuZXdfeCkgPyAkdGhpcy0+aW1nX3ggOiAkdGhpcy0+X3BhcnNlX3NpemUoJG5ld194LCAkdGhpcy0+aW1nX3gpOw0KKyAgICAgICAgJG5ld195ID0gKDAgPT0gJG5ld195KSA/ICR0aGlzLT5pbWdfeSA6ICR0aGlzLT5fcGFyc2Vfc2l6ZSgkbmV3X3ksICR0aGlzLT5pbWdfeSk7DQorICAgICAgICAvLyBOb3cgZG8gdGhlIGxpYnJhcnkgc3BlY2lmaWMgcmVzaXppbmcuDQorICAgICAgICByZXR1cm4gJHRoaXMtPl9yZXNpemUoJG5ld194LCAkbmV3X3kpOw0KKyAgICB9IC8vIEVuZCByZXNpemUNCisNCisNCisgICAgLyoqDQorICAgICAqIFNjYWxlIHRoZSBpbWFnZSB0byBoYXZlIHRoZSBtYXggeCBkaW1lbnNpb24gc3BlY2lmaWVkLg0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gaW50ICRuZXdfeCBTaXplIHRvIHNjYWxlIFgtZGltZW5zaW9uIHRvDQorICAgICAqIEByZXR1cm4gbm9uZQ0KKyAgICAgKi8NCisgICAgZnVuY3Rpb24gc2NhbGVNYXhYKCRuZXdfeCkNCisgICAgew0KKyAgICAgICAgJG5ld195ID0gcm91bmQoKCRuZXdfeCAvICR0aGlzLT5pbWdfeCkgKiAkdGhpcy0+aW1nX3ksIDApOw0KKyAgICAgICAgcmV0dXJuICR0aGlzLT5fcmVzaXplKCRuZXdfeCwgJG5ld195KTsNCisgICAgfSAvLyBFbmQgcmVzaXplWA0KKw0KKyAgICAvKioNCisgICAgICogU2NhbGUgdGhlIGltYWdlIHRvIGhhdmUgdGhlIG1heCB5IGRpbWVuc2lvbiBzcGVjaWZpZWQuDQorICAgICAqDQorICAgICAqIEBhY2Nlc3MgcHVibGljDQorICAgICAqIEBwYXJhbSBpbnQgJG5ld195IFNpemUgdG8gc2NhbGUgWS1kaW1lbnNpb24gdG8NCisgICAgICogQHJldHVybiBub25lDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBzY2FsZU1heFkoJG5ld195KQ0KKyAgICB7DQorICAgICAgICAkbmV3X3ggPSByb3VuZCgoJG5ld195IC8gJHRoaXMtPmltZ195KSAqICR0aGlzLT5pbWdfeCwgMCk7DQorICAgICAgICByZXR1cm4gJHRoaXMtPl9yZXNpemUoJG5ld194LCAkbmV3X3kpOw0KKyAgICB9IC8vIEVuZCByZXNpemVZDQorDQorICAgIC8qKg0KKyAgICAgKiBTY2FsZSBJbWFnZSB0byBhIG1heGltdW0gb3IgcGVyY2VudGFnZQ0KKyAgICAgKg0KKyAgICAgKiBAYWNjZXNzIHB1YmxpYw0KKyAgICAgKiBAcGFyYW0gbWl4ZWQgKG51bWJlciwgcGVyY2VudGFnZSAxMCUgb3IgMC4xKQ0KKyAgICAgKiBAcmV0dXJuIG1peGVkIG5vbmUgb3IgUEVBUl9lcnJvcg0KKyAgICAgKi8NCisgICAgZnVuY3Rpb24gc2NhbGUoJHNpemUpDQorICAgIHsNCisgICAgICAgIGlmICgoc3RybGVuKCRzaXplKSA+IDEpICYmIChzdWJzdHIoJHNpemUsLTEpID09ICclJykpIHsNCisgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnNjYWxlQnlQZXJjZW50YWdlKHN1YnN0cigkc2l6ZSwgMCwgLTEpKTsNCisgICAgICAgIH0gZWxzZWlmICgkc2l6ZSA8IDEpIHsNCisgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnNjYWxlQnlGYWN0b3IoJHNpemUpOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnNjYWxlQnlMZW5ndGgoJHNpemUpOw0KKyAgICAgICAgfQ0KKyAgICB9IC8vIEVuZCBzY2FsZQ0KKw0KKyAgICAvKioNCisgICAgICogU2NhbGVzIGFuIGltYWdlIHRvIGEgcGVyY2VudGFnZSBvZiBpdHMgb3JpZ2luYWwgc2l6ZS4gIEZvciBleGFtcGxlLCBpZg0KKyAgICAgKiBteSBpbWFnZSB3YXMgNjQweDQ4MCBhbmQgSSBjYWxsZWQgc2NhbGVCeVBlcmNlbnRhZ2UoMTApIHRoZW4gdGhlIGltYWdlDQorICAgICAqIHdvdWxkIGJlIHJlc2l6ZWQgdG8gNjR4NDgNCisgICAgICoNCisgICAgICogQGFjY2VzcyBwdWJsaWMNCisgICAgICogQHBhcmFtIGludCAkc2l6ZSBQZXJjZW50YWdlIG9mIG9yaWdpbmFsIHNpemUgdG8gc2NhbGUgdG8NCisgICAgICogQHJldHVybiBub25lDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBzY2FsZUJ5UGVyY2VudGFnZSgkc2l6ZSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuICR0aGlzLT5zY2FsZUJ5RmFjdG9yKCRzaXplIC8gMTAwKTsNCisgICAgfSAvLyBFbmQgc2NhbGVCeVBlcmNlbnRhZ2UNCisNCisgICAgLyoqDQorICAgICAqIFNjYWxlcyBhbiBpbWFnZSB0byBhIGZhY3RvciBvZiBpdHMgb3JpZ2luYWwgc2l6ZS4gIEZvciBleGFtcGxlLCBpZg0KKyAgICAgKiBteSBpbWFnZSB3YXMgNjQweDQ4MCBhbmQgSSBjYWxsZWQgc2NhbGVCeUZhY3RvcigwLjUpIHRoZW4gdGhlIGltYWdlDQorICAgICAqIHdvdWxkIGJlIHJlc2l6ZWQgdG8gMzIweDI0MC4NCisgICAgICoNCisgICAgICogQGFjY2VzcyBwdWJsaWMNCisgICAgICogQHBhcmFtIGZsb2F0ICRzaXplIEZhY3RvciBvZiBvcmlnaW5hbCBzaXplIHRvIHNjYWxlIHRvDQorICAgICAqIEByZXR1cm4gbm9uZQ0KKyAgICAgKi8NCisgICAgZnVuY3Rpb24gc2NhbGVCeUZhY3Rvcigkc2l6ZSkNCisgICAgew0KKyAgICAgICAgJG5ld194ID0gcm91bmQoJHNpemUgKiAkdGhpcy0+aW1nX3gsIDApOw0KKyAgICAgICAgJG5ld195ID0gcm91bmQoJHNpemUgKiAkdGhpcy0+aW1nX3ksIDApOw0KKyAgICAgICAgcmV0dXJuICR0aGlzLT5fcmVzaXplKCRuZXdfeCwgJG5ld195KTsNCisgICAgfSAvLyBFbmQgc2NhbGVCeUZhY3Rvcg0KKw0KKyAgICAvKioNCisgICAgICogU2NhbGVzIGFuIGltYWdlIHNvIHRoYXQgdGhlIGxvbmdlc3Qgc2lkZSBoYXMgdGhpcyBkaW1lbnNpb24uDQorICAgICAqDQorICAgICAqIEBhY2Nlc3MgcHVibGljDQorICAgICAqIEBwYXJhbSBpbnQgJHNpemUgTWF4IGRpbWVuc2lvbiBpbiBwaXhlbHMNCisgICAgICogQHJldHVybiBub25lDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBzY2FsZUJ5TGVuZ3RoKCRzaXplKQ0KKyAgICB7DQorICAgICAgICAgaWYgKCR0aGlzLT5pbWdfeCA+PSAkdGhpcy0+aW1nX3kpIHsNCisgICAgICAgICAgICAkbmV3X3ggPSAkc2l6ZTsNCisgICAgICAgICAgICAkbmV3X3kgPSByb3VuZCgoJG5ld194IC8gJHRoaXMtPmltZ194KSAqICR0aGlzLT5pbWdfeSwgMCk7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICRuZXdfeSA9ICRzaXplOw0KKyAgICAgICAgICAgICRuZXdfeCA9IHJvdW5kKCgkbmV3X3kgLyAkdGhpcy0+aW1nX3kpICogJHRoaXMtPmltZ194LCAwKTsNCisgICAgICAgIH0NCisgICAgICAgIHJldHVybiAkdGhpcy0+X3Jlc2l6ZSgkbmV3X3gsICRuZXdfeSk7DQorICAgIH0gLy8gRW5kIHNjYWxlQnlMZW5ndGgNCisNCisNCisgICAgLyoqDQorICAgICAqDQorICAgICAqIEBhY2Nlc3MgcHVibGljDQorICAgICAqIEByZXR1cm4gdm9pZA0KKyAgICAgKi8NCisgICAgZnVuY3Rpb24gX2dldF9pbWFnZV9kZXRhaWxzKCRpbWFnZSkNCisgICAgew0KKyAgICAgICAgLy9lY2hvICRpbWFnZTsNCisgICAgICAgICRkYXRhID0gQEdldEltYWdlU2l6ZSgkaW1hZ2UpOw0KKyAgICAgICAgIzEgPSBHSUYsIDIgPSBKUEcsIDMgPSBQTkcsIDQgPSBTV0YsIDUgPSBQU0QsIDYgPSBCTVAsIDcgPSBUSUZGKGludGVsIGJ5dGUgb3JkZXIpLCA4ID0gVElGRihtb3Rvcm9sYSBieXRlIG9yZGVyLA0KKyAgICAgICAgIyA5ID0gSlBDLCAxMCA9IEpQMiwgMTEgPSBKUFgsIDEyID0gSkIyLCAxMyA9IFNXQw0KKyAgICAgICAgaWYgKGlzX2FycmF5KCRkYXRhKSl7DQorICAgICAgICAgICAgc3dpdGNoKCRkYXRhWzJdKXsNCisgICAgICAgICAgICAgICAgY2FzZSAxOg0KKyAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAnZ2lmJzsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICBjYXNlIDI6DQorICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICdqcGVnJzsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICBjYXNlIDM6DQorICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICdwbmcnOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgIGNhc2UgNDoNCisgICAgICAgICAgICAgICAgICAgICR0eXBlID0gJ3N3Zic7DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgY2FzZSA1Og0KKyAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAncHNkJzsNCisgICAgICAgICAgICAgICAgY2FzZSA2Og0KKyAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAnYm1wJzsNCisgICAgICAgICAgICAgICAgY2FzZSA3Og0KKyAgICAgICAgICAgICAgICBjYXNlIDg6DQorICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICd0aWZmJzsNCisgICAgICAgICAgICAgICAgZGVmYXVsdDoNCisgICAgICAgICAgICAgICAgICAgIGVjaG8oIldlIGRvIG5vdCByZWNvZ25pemUgdGhpcyBpbWFnZSBmb3JtYXQiKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgJHRoaXMtPmltZ194ID0gJGRhdGFbMF07DQorICAgICAgICAgICAgJHRoaXMtPmltZ195ID0gJGRhdGFbMV07DQorICAgICAgICAgICAgJHRoaXMtPnR5cGUgPSAkdHlwZTsNCisNCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgZWNobygiQ2Fubm90IGZldGNoIGltYWdlIG9yIGltYWdlcyBkZXRhaWxzLiIpOw0KKyAgICAgICAgICAgIHJldHVybiBudWxsOw0KKyAgICAgICAgfQ0KKyAgICAgICAgLyoNCisgICAgICAgICRvdXRwdXQgPSBhcnJheSgNCisgICAgICAgICAgICAgICAgICAgICAgICAnd2lkdGgnID0+ICRkYXRhWzBdLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICdoZWlnaHQnID0+ICRkYXRhWzFdLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJyA9PiAkdHlwZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICk7DQorICAgICAgICByZXR1cm4gJG91dHB1dDsNCisgICAgICAgICovDQorICAgIH0NCisNCisNCisgICAgLyoqDQorICAgICAqIFBhcnNlIGlucHV0IGFuZCBjb252ZXJ0DQorICAgICAqIElmIGVpdGhlciBpcyAwIGl0IHdpbGwgYmUgc2NhbGVkIHByb3BvcnRpb25hbGx5DQorICAgICAqDQorICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQ0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gbWl4ZWQgJG5ld19zaXplICgwLCBudW1iZXIsIHBlcmNlbnRhZ2UgMTAlIG9yIDAuMSkNCisgICAgICogQHBhcmFtIGludCAkb2xkX3NpemUNCisgICAgICoNCisgICAgICogQHJldHVybiBtaXhlZCBub25lIG9yIFBFQVJfZXJyb3INCisgICAgICovDQorICAgIGZ1bmN0aW9uIF9wYXJzZV9zaXplKCRuZXdfc2l6ZSwgJG9sZF9zaXplKQ0KKyAgICB7DQorICAgICAgICBpZiAoJyUnID09ICRuZXdfc2l6ZSkgew0KKyAgICAgICAgICAgICRuZXdfc2l6ZSA9IHN0cl9yZXBsYWNlKCclJywnJywkbmV3X3NpemUpOw0KKyAgICAgICAgICAgICRuZXdfc2l6ZSA9ICRuZXdfc2l6ZSAvIDEwMDsNCisgICAgICAgIH0NCisgICAgICAgIGlmICgkbmV3X3NpemUgPiAxKSB7DQorICAgICAgICAgICAgcmV0dXJuIChpbnQpICRuZXdfc2l6ZTsNCisgICAgICAgIH0gZWxzZWlmICgkbmV3X3NpemUgPT0gMCkgew0KKyAgICAgICAgICAgIHJldHVybiAoaW50KSAkb2xkX3NpemU7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIHJldHVybiAoaW50KSByb3VuZCgkbmV3X3NpemUgKiAkb2xkX3NpemUsIDApOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorDQorICAgIGZ1bmN0aW9uIHVuaXF1ZVN0cigpDQorICAgIHsNCisgICAgICByZXR1cm4gc3Vic3RyKG1kNShtaWNyb3RpbWUoKSksMCw2KTsNCisgICAgfQ0KKw0KKyAgICAvL2RlbGV0ZSBvbGQgdG1wIGZpbGVzLCBhbmQgYWxsb3cgb25seSAxIGZpbGUgcGVyIHJlbW90ZSBob3N0Lg0KKyAgICBmdW5jdGlvbiBjbGVhblVwKCRpZCwgJGRpcikNCisgICAgew0KKyAgICAgICAgJGQgPSBkaXIoJGRpcik7DQorICAgICAgICAkaWRfbGVuZ3RoID0gc3RybGVuKCRpZCk7DQorDQorICAgICAgICB3aGlsZSAoZmFsc2UgIT09ICgkZW50cnkgPSAkZC0+cmVhZCgpKSkgew0KKyAgICAgICAgICAgIGlmIChpc19maWxlKCRkaXIuJy8nLiRlbnRyeSkgJiYgc3Vic3RyKCRlbnRyeSwwLDEpID09ICcuJyAmJiAhZXJlZygkZW50cnksICR0aGlzLT5pbWFnZSkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAvL2VjaG8gZmlsZW10aW1lKCR0aGlzLT5kaXJlY3RvcnkuJy8nLiRlbnRyeSkuIjxicj4iOyANCisgICAgICAgICAgICAgICAgLy9lY2hvIHRpbWUoKTsNCisNCisgICAgICAgICAgICAgICAgaWYgKGZpbGVtdGltZSgkZGlyLicvJy4kZW50cnkpICsgJHRoaXMtPmxhcHNlX3RpbWUgPCB0aW1lKCkpDQorICAgICAgICAgICAgICAgICAgICB1bmxpbmsoJGRpci4nLycuJGVudHJ5KTsNCisNCisgICAgICAgICAgICAgICAgaWYgKHN1YnN0cigkZW50cnksIDEsICRpZF9sZW5ndGgpID09ICRpZCkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2ZpbGUoJGRpci4nLycuJGVudHJ5KSkNCisgICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmsoJGRpci4nLycuJGVudHJ5KTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgICRkLT5jbG9zZSgpOw0KKyAgICB9DQorDQorDQorICAgIGZ1bmN0aW9uIGNyZWF0ZVVuaXF1ZSgkZGlyKQ0KKyAgICB7DQorICAgICAgICR1bmlxdWVfc3RyID0gJy4nLiR0aGlzLT51aWQuJ18nLiR0aGlzLT51bmlxdWVTdHIoKS4iLiIuJHRoaXMtPnR5cGU7DQorICAgICAgICANCisgICAgICAgLy9tYWtlIHN1cmUgdGhlIHRoZSB1bmlxdWUgdGVtcCBmaWxlIGRvZXMgbm90IGV4aXN0cw0KKyAgICAgICAgd2hpbGUgKGZpbGVfZXhpc3RzKCRkaXIuJHVuaXF1ZV9zdHIpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgICR1bmlxdWVfc3RyID0gJy4nLiR0aGlzLT51aWQuJ18nLiR0aGlzLT51bmlxdWVTdHIoKS4iLiIuJHRoaXMtPnR5cGU7DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAkdGhpcy0+Y2xlYW5VcCgkdGhpcy0+dWlkLCAkZGlyKTsNCisNCisgICAgICAgcmV0dXJuICR1bmlxdWVfc3RyOw0KKyAgICB9DQorDQorDQorICAgIC8qKg0KKyAgICAgKiBTZXQgdGhlIGltYWdlIHdpZHRoDQorICAgICAqIEBwYXJhbSBpbnQgJHNpemUgZGltZW5zaW9uIHRvIHNldA0KKyAgICAgKiBAc2luY2UgMjkvMDUvMDIgMTM6MzY6MzENCisgICAgICogQHJldHVybg0KKyAgICAgKi8NCisgICAgZnVuY3Rpb24gX3NldF9pbWdfeCgkc2l6ZSkNCisgICAgew0KKyAgICAgICAgJHRoaXMtPmltZ194ID0gJHNpemU7DQorICAgIH0NCisNCisgICAgLyoqDQorICAgICAqIFNldCB0aGUgaW1hZ2UgaGVpZ2h0DQorICAgICAqIEBwYXJhbSBpbnQgJHNpemUgZGltZW5zaW9uIHRvIHNldA0KKyAgICAgKiBAc2luY2UgMjkvMDUvMDIgMTM6MzY6MzENCisgICAgICogQHJldHVybg0KKyAgICAgKi8NCisgICAgZnVuY3Rpb24gX3NldF9pbWdfeSgkc2l6ZSkNCisgICAgew0KKyAgICAgICAgJHRoaXMtPmltZ195ID0gJHNpemU7DQorICAgIH0NCisNCisgICAgLyoqDQorICAgICAqIFNldCB0aGUgaW1hZ2Ugd2lkdGgNCisgICAgICogQHBhcmFtIGludCAkc2l6ZSBkaW1lbnNpb24gdG8gc2V0DQorICAgICAqIEBzaW5jZSAyOS8wNS8wMiAxMzozNjozMQ0KKyAgICAgKiBAcmV0dXJuDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBfc2V0X25ld194KCRzaXplKQ0KKyAgICB7DQorICAgICAgICAkdGhpcy0+bmV3X3ggPSAkc2l6ZTsNCisgICAgfQ0KKw0KKyAgICAvKioNCisgICAgICogU2V0IHRoZSBpbWFnZSBoZWlnaHQNCisgICAgICogQHBhcmFtIGludCAkc2l6ZSBkaW1lbnNpb24gdG8gc2V0DQorICAgICAqIEBzaW5jZSAyOS8wNS8wMiAxMzozNjozMQ0KKyAgICAgKiBAcmV0dXJuDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBfc2V0X25ld195KCRzaXplKQ0KKyAgICB7DQorICAgICAgICAkdGhpcy0+bmV3X3kgPSAkc2l6ZTsNCisgICAgfQ0KKw0KKyAgICAvKioNCisgICAgICogR2V0IHRoZSB0eXBlIG9mIHRoZSBpbWFnZSBiZWluZyBtYW5pcHVsYXRlZA0KKyAgICAgKg0KKyAgICAgKiBAcmV0dXJuIHN0cmluZyAkdGhpcy0+dHlwZSB0aGUgaW1hZ2UgdHlwZQ0KKyAgICAgKi8NCisgICAgZnVuY3Rpb24gZ2V0SW1hZ2VUeXBlKCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuICR0aGlzLT50eXBlOw0KKyAgICB9DQorDQorICAgIC8qKg0KKyAgICAgKg0KKyAgICAgKiBAYWNjZXNzIHB1YmxpYw0KKyAgICAgKiBAcmV0dXJuIHN0cmluZyB3ZWItc2FmZSBpbWFnZSB0eXBlDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBnZXRXZWJTYWZlRm9ybWF0KCkNCisgICAgew0KKyAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKXsNCisgICAgICAgICAgICBjYXNlICdnaWYnOg0KKyAgICAgICAgICAgIGNhc2UgJ3BuZyc6DQorICAgICAgICAgICAgICAgIHJldHVybiAncG5nJzsNCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgZGVmYXVsdDoNCisgICAgICAgICAgICAgICAgcmV0dXJuICdqcGVnJzsNCisgICAgICAgIH0gLy8gc3dpdGNoDQorICAgIH0NCisNCisgICAgLyoqDQorICAgICAqIFBsYWNlIGhvbGRlciBmb3IgdGhlIHJlYWwgcmVzaXplIG1ldGhvZA0KKyAgICAgKiB1c2VkIGJ5IGV4dGVuZGVkIG1ldGhvZHMgdG8gZG8gdGhlIHJlc2l6aW5nDQorICAgICAqDQorICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQ0KKyAgICAgKiBAcmV0dXJuIFBFQVJfZXJyb3INCisgICAgICovDQorICAgIGZ1bmN0aW9uIF9yZXNpemUoKSB7DQorICAgICAgICByZXR1cm4gbnVsbDsgLy9QRUFSOjpyYWlzZUVycm9yKCJObyBSZXNpemUgbWV0aG9kIGV4aXN0cyIsIHRydWUpOw0KKyAgICB9DQorDQorICAgIC8qKg0KKyAgICAgKiBQbGFjZSBob2xkZXIgZm9yIHRoZSByZWFsIGxvYWQgbWV0aG9kDQorICAgICAqIHVzZWQgYnkgZXh0ZW5kZWQgbWV0aG9kcyB0byBkbyB0aGUgcmVzaXppbmcNCisgICAgICoNCisgICAgICogQGFjY2VzcyBwdWJsaWMNCisgICAgICogQHJldHVybiBQRUFSX2Vycm9yDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBsb2FkKCRmaWxlbmFtZSkgew0KKyAgICAgICAgcmV0dXJuIG51bGw7IC8vUEVBUjo6cmFpc2VFcnJvcigiTm8gTG9hZCBtZXRob2QgZXhpc3RzIiwgdHJ1ZSk7DQorICAgIH0NCisNCisgICAgLyoqDQorICAgICAqIFBsYWNlIGhvbGRlciBmb3IgdGhlIHJlYWwgZGlzcGxheSBtZXRob2QNCisgICAgICogdXNlZCBieSBleHRlbmRlZCBtZXRob2RzIHRvIGRvIHRoZSByZXNpemluZw0KKyAgICAgKg0KKyAgICAgKiBAYWNjZXNzIHB1YmxpYw0KKyAgICAgKiBAcGFyYW0gc3RyaW5nIGZpbGVuYW1lDQorICAgICAqIEByZXR1cm4gUEVBUl9lcnJvcg0KKyAgICAgKi8NCisgICAgZnVuY3Rpb24gZGlzcGxheSgkdHlwZSwgJHF1YWxpdHkpIHsNCisgICAgICAgIHJldHVybiBudWxsOyAvL1BFQVI6OnJhaXNlRXJyb3IoIk5vIERpc3BsYXkgbWV0aG9kIGV4aXN0cyIsIHRydWUpOw0KKyAgICB9DQorDQorICAgIC8qKg0KKyAgICAgKiBQbGFjZSBob2xkZXIgZm9yIHRoZSByZWFsIHNhdmUgbWV0aG9kDQorICAgICAqIHVzZWQgYnkgZXh0ZW5kZWQgbWV0aG9kcyB0byBkbyB0aGUgcmVzaXppbmcNCisgICAgICoNCisgICAgICogQGFjY2VzcyBwdWJsaWMNCisgICAgICogQHBhcmFtIHN0cmluZyBmaWxlbmFtZQ0KKyAgICAgKiBAcmV0dXJuIFBFQVJfZXJyb3INCisgICAgICovDQorICAgIGZ1bmN0aW9uIHNhdmUoJGZpbGVuYW1lLCAkdHlwZSwgJHF1YWxpdHkpIHsNCisgICAgICAgIHJldHVybiBudWxsOyAvL1BFQVI6OnJhaXNlRXJyb3IoIk5vIFNhdmUgbWV0aG9kIGV4aXN0cyIsIHRydWUpOw0KKyAgICB9DQorDQorICAgIC8qKg0KKyAgICAgKiBQbGFjZSBob2xkZXIgZm9yIHRoZSByZWFsIGZyZWUgbWV0aG9kDQorICAgICAqIHVzZWQgYnkgZXh0ZW5kZWQgbWV0aG9kcyB0byBkbyB0aGUgcmVzaXppbmcNCisgICAgICoNCisgICAgICogQGFjY2VzcyBwdWJsaWMNCisgICAgICogQHJldHVybiBQRUFSX2Vycm9yDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBmcmVlKCkgew0KKyAgICAgICAgcmV0dXJuIG51bGw7IC8vUEVBUjo6cmFpc2VFcnJvcigiTm8gRnJlZSBtZXRob2QgZXhpc3RzIiwgdHJ1ZSk7DQorICAgIH0NCisNCisgICAgLyoqDQorICAgICAqIFJldmVyc2Ugb2YgcmdiMmNvbG9ybmFtZS4NCisgICAgICoNCisgICAgICogQGFjY2VzcyBwdWJsaWMNCisgICAgICogQHJldHVybiBQRUFSX2Vycm9yDQorICAgICAqDQorICAgICAqIEBzZWUgcmdiMmNvbG9ybmFtZQ0KKyAgICAgKi8NCisgICAgZnVuY3Rpb24gY29sb3JoZXgyY29sb3JhcnJheSgkY29sb3JoZXgpIHsNCisgICAgICAgICRyID0gaGV4ZGVjKHN1YnN0cigkY29sb3JoZXgsIDEsIDIpKTsNCisgICAgICAgICRnID0gaGV4ZGVjKHN1YnN0cigkY29sb3JoZXgsIDMsIDIpKTsNCisgICAgICAgICRiID0gaGV4ZGVjKHN1YnN0cigkY29sb3JoZXgsIDQsIDIpKTsNCisgICAgICAgIHJldHVybiBhcnJheSgkciwkZywkYik7DQorICAgIH0NCisNCisgICAgLyoqDQorICAgICAqIFJldmVyc2Ugb2YgcmdiMmNvbG9ybmFtZS4NCisgICAgICoNCisgICAgICogQGFjY2VzcyBwdWJsaWMNCisgICAgICogQHJldHVybiBQRUFSX2Vycm9yDQorICAgICAqDQorICAgICAqIEBzZWUgcmdiMmNvbG9ybmFtZQ0KKyAgICAgKi8NCisgICAgZnVuY3Rpb24gY29sb3JhcnJheTJjb2xvcmhleCgkY29sb3IpIHsNCisgICAgICAgICRjb2xvciA9ICcjJy5kZWNoZXgoJGNvbG9yWzBdKS5kZWNoZXgoJGNvbG9yWzFdKS5kZWNoZXgoJGNvbG9yWzJdKTsNCisgICAgICAgIHJldHVybiBzdHJsZW4oJGNvbG9yKT42P2ZhbHNlOiRjb2xvcjsNCisgICAgfQ0KKw0KKw0KKyAgICAvKiBNZXRob2RzIHRvIGFkZCB0byB0aGUgZHJpdmVyIGNsYXNzZXMgaW4gdGhlIGZ1dHVyZSAqLw0KKyAgICBmdW5jdGlvbiBhZGRUZXh0KCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIG51bGw7IC8vUEVBUjo6cmFpc2VFcnJvcigiTm8gYWRkVGV4dCBtZXRob2QgZXhpc3RzIiwgdHJ1ZSk7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gYWRkRHJvcFNoYWRvdygpDQorICAgIHsNCisgICAgICAgIHJldHVybiBudWxsOyAvL1BFQVI6OnJhaXNlRXJyb3IoIk5vIEFkZERyb3BTaGFkb3cgbWV0aG9kIGV4aXN0cyIsIHRydWUpOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGFkZEJvcmRlcigpDQorICAgIHsNCisgICAgICAgIHJldHVybiBudWxsOyAvL1BFQVI6OnJhaXNlRXJyb3IoIk5vIGFkZEJvcmRlciBtZXRob2QgZXhpc3RzIiwgdHJ1ZSk7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gY3JvcCgpDQorICAgIHsNCisgICAgICAgIHJldHVybiBudWxsOyAvL1BFQVI6OnJhaXNlRXJyb3IoIk5vIGNyb3AgbWV0aG9kIGV4aXN0cyIsIHRydWUpOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGZsaXAoKSANCisgICAgew0KKyAgICAgICAgcmV0dXJuIG51bGw7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gZ2FtbWEoKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gbnVsbDsgLy9QRUFSOjpyYWlzZUVycm9yKCJObyBnYW1tYSBtZXRob2QgZXhpc3RzIiwgdHJ1ZSk7DQorICAgIH0NCit9DQorPz4NCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9JbWFnZU1hbmFnZXIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9JbWFnZU1hbmFnZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjMGFkYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL0ltYWdlTWFuYWdlci5qcwpAQCAtMCwwICsxLDI5MSBAQAorLyoqCisgKiBUaGUgSW1hZ2VNYW5hZ2VyIHBsdWdpbiBqYXZhc2NyaXB0LgorICogQGF1dGhvciAkQXV0aG9yOihsb2NhbCkgJAorICogQHZlcnNpb24gJElkOmltYWdlLW1hbmFnZXIuanMgODU2TSAyMDA3LTA2LTEzIDE4OjM0OjM0WiAobG9jYWwpICQKKyAqIEBwYWNrYWdlIEltYWdlTWFuYWdlcgorICovCisKKy8qKgorICogVG8gRW5hYmxlIHRoZSBwbHVnLWluIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUgYmVmb3JlIFhpbmhhIGlzIGluaXRpYWxpc2VkLgorICoKKyAqIFhpbmhhLmxvYWRQbHVnaW4oIkltYWdlTWFuYWdlciIpOworICoKKyAqIFRoZW4gY29uZmlndXJlIHRoZSBjb25maWcuaW5jLnBocCBmaWxlLCB0aGF0IGlzIGFsbC4KKyAqIEZvciB1cC10by1kYXRlIGRvY3VtZW50YXRpb24sIHBsZWFzZSB2aXNpdCBodHRwOi8vd3d3LnpodW8ub3JnL2h0bWxhcmVhLworICovCisKKy8qKgorICogSXQgaXMgcHJldHR5IHNpbXBsZSwgdGhpcyBmaWxlIG92ZXIgcmlkZXMgdGhlIFhpbmhhLnByb3RvdHlwZS5faW5zZXJ0SW1hZ2UKKyAqIGZ1bmN0aW9uIHdpdGggb3VyIG93biwgb25seSBkaWZmZXJlbmNlIGlzIHRoZSBwb3B1cERpYWxvZyB1cmwKKyAqIHBvaW50IHRoYXQgdG8gdGhlIHBocCBzY3JpcHQuCisgKi8KKworZnVuY3Rpb24gSW1hZ2VNYW5hZ2VyKGVkaXRvcikKK3sKKworfQorCitJbWFnZU1hbmFnZXIuX3BsdWdpbkluZm8gPSB7CisJbmFtZSAgICAgICAgICA6ICJJbWFnZU1hbmFnZXIiLAorCXZlcnNpb24gICAgICAgOiAiMS4wIiwKKwlkZXZlbG9wZXIgICAgIDogIlhpYW5nIFdlaSBaaHVvIiwKKwlkZXZlbG9wZXJfdXJsIDogImh0dHA6Ly93d3cuemh1by5vcmcvaHRtbGFyZWEvIiwKKwlsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIgorfTsKKworCisvLyBDT05GSUdVUkFUSU9OIFJFQURNRToKKy8vCisvLyAgSXQncyB1c2VmdWwgdG8gcGFzcyB0aGUgY29uZmlndXJhdGlvbiB0byB0aGUgYmFja2VuZCB0aHJvdWdoIGphdmFzY3JpcHQKKy8vICAodGhpcyBzYXZlcyBlZGl0aW5nIHRoZSBiYWNrZW5kIGNvbmZpZyBpdHNlbGYpLCB0aGlzIG5lZWRzIHRvIGJlIGRvbmUKKy8vICBpbiBhIHRydXN0ZWQvc2VjdXJlIG1hbm5lci4uLiBoZXJlIGlzIGhvdyB0byBkbyBpdC4uCisvLworLy8gIDEuIFlvdSBuZWVkIHRvIGJlIGFibGUgdG8gcHV0IFBIUCBpbiB5b3VyIHhpbmhhX2NvbmZpZyBzZXR1cAorLy8gIDIuIEluIHN0ZXAgMyB3cml0ZSBzb21ldGhpbmcgbGlrZQorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgd2l0aCAoeGluaGFfY29uZmlnLkltYWdlTWFuYWdlcikKKy8vICB7IAorLy8gICAgPD9waHAgCisvLyAgICAgIHJlcXVpcmVfb25jZSgnL3BhdGgvdG8veGluaGEvY29udHJpYi9waHAteGluaGEucGhwJyk7CisvLyAgICAgIHhpbmhhX3Bhc3NfdG9fcGhwX2JhY2tlbmQKKy8vICAgICAgKCAgICAgICAKKy8vICAgICAgICBhcnJheQorLy8gICAgICAgICgKKy8vICAgICAgICAgJ2ltYWdlc19kaXInID0+ICcvaG9tZS95b3VyL2RpcmVjdG9yeScsCisvLyAgICAgICAgICdpbWFnZXNfdXJsJyA9PiAnL2RpcmVjdG9yeScKKy8vICAgICAgICApCisvLyAgICAgICkKKy8vICAgID8+CisvLyAgfQorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gIHRoaXMgd2lsbCB3b3JrIHByb3ZpZGVkIHlvdSBhcmUgdXNpbmcgbm9ybWFsIGZpbGUtYmFzZWQgUEhQIHNlc3Npb25zCisvLyAgKG1vc3QgbGlrZWx5KSwgaWYgbm90LCB5b3UgbWF5IG5lZWQgdG8gbW9kaWZ5IHRoZSBwaHAteGluaGEucGhwCisvLyAgZmlsZSB0byBzdWl0IHlvdXIgc2V0dXAuCisKK1hpbmhhLkNvbmZpZy5wcm90b3R5cGUuSW1hZ2VNYW5hZ2VyID0KK3sKKyAgJ2JhY2tlbmQnICAgIDogWGluaGEuZ2V0UGx1Z2luRGlyKCJJbWFnZU1hbmFnZXIiKSArICcvYmFja2VuZC5waHA/X19wbHVnaW49SW1hZ2VNYW5hZ2VyJicsCisgICdiYWNrZW5kX2RhdGEnIDogbnVsbCwKKyAgCisgIC8vIERlcHJlY2F0ZWQgbWV0aG9kIGZvciBwYXNzaW5nIGNvbmZpZywgdXNlIGFib3ZlIGluc3RlYWQhCisgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICdiYWNrZW5kX2NvbmZpZycgICAgIDogbnVsbCwKKyAgJ2JhY2tlbmRfY29uZmlnX2hhc2gnOiBudWxsLAorICAnYmFja2VuZF9jb25maWdfc2VjcmV0X2tleV9sb2NhdGlvbic6ICdYaW5oYTpJbWFnZU1hbmFnZXInCisgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit9OworCisvLyBPdmVyIHJpZGUgdGhlIF9pbnNlcnRJbWFnZSBmdW5jdGlvbiBpbiBodG1sYXJlYS5qcy4KKy8vIE9wZW4gdXAgdGhlIEltYWdlTWFuZ2VyIHNjcmlwdCBpbnN0ZWFkLgorCitYaW5oYS5wcm90b3R5cGUuX2luc2VydEltYWdlID0gZnVuY3Rpb24oaW1hZ2UpIHsKKworCXZhciBlZGl0b3IgPSB0aGlzOwkvLyBmb3IgbmVzdGVkIGZ1bmN0aW9ucworCXZhciBvdXRwYXJhbSA9IG51bGw7CisJaWYgKHR5cGVvZiBpbWFnZSA9PSAidW5kZWZpbmVkIikgeworCQlpbWFnZSA9IHRoaXMuZ2V0UGFyZW50RWxlbWVudCgpOworCQlpZiAoaW1hZ2UgJiYgIS9eaW1nJC9pLnRlc3QoaW1hZ2UudGFnTmFtZSkpCisJCQlpbWFnZSA9IG51bGw7CisJfQorCisJLy8gdGhlIHNlbGVjdGlvbiB3aWxsIGhhdmUgdGhlIGFic29sdXRlIHVybCB0byB0aGUgaW1hZ2UuIAorCS8vIGNvZXJjZSBpdCB0byBiZSByZWxhdGl2ZSB0byB0aGUgaW1hZ2VzIGRpcmVjdG9yeS4KKwkvLworCS8vIEZJWE1FOiB3ZSBoYXZlIHRoZSBjb3JyZWN0IFVSTCwgYnV0IGhvdyB0byBnZXQgaXQgdG8gc2VsZWN0PworCS8vIEZJWE1FOiBuZWVkIHRvIGRvIHRoZSBzYW1lIGZvciBNU0lFLgorCisJaWYgKCBpbWFnZSApCisJCXsKKworCQlvdXRwYXJhbSA9CisJCQl7CisJCQlmX3VybCAgICA6IFhpbmhhLmlzX2llID8gaW1hZ2Uuc3JjIDogaW1hZ2Uuc3JjLAorCQkJZl9hbHQgICAgOiBpbWFnZS5hbHQsCisJCQlmX2JvcmRlciA6IGltYWdlLnN0eWxlLmJvcmRlcldpZHRoID8gaW1hZ2Uuc3R5bGUuYm9yZGVyV2lkdGggOiBpbWFnZS5ib3JkZXIsCisJCQlmX2FsaWduICA6IGltYWdlLmFsaWduLAorCQkJZl9wYWRkaW5nOiBpbWFnZS5zdHlsZS5wYWRkaW5nLAorCQkJZl9tYXJnaW4gOiBpbWFnZS5zdHlsZS5tYXJnaW4sCisJCQlmX3dpZHRoICA6IGltYWdlLndpZHRoLAorCQkJZl9oZWlnaHQgIDogaW1hZ2UuaGVpZ2h0LAorICAgICAgZl9iYWNrZ3JvdW5kQ29sb3I6IGltYWdlLnN0eWxlLmJhY2tncm91bmRDb2xvciwKKyAgICAgIGZfYm9yZGVyQ29sb3I6IGltYWdlLnN0eWxlLmJvcmRlckNvbG9yLAorICAgICAgZl9oc3BhY2U6ICBpbWFnZS5oc3BhY2UgJiYgaW1hZ2UuaHNwYWNlICE9ICctMScgPyBwYXJzZUludChpbWFnZS5oc3BhY2UpIDogJycsCisgICAgICBmX3ZzcGFjZTogaW1hZ2UudnNwYWNlICYmIGltYWdlLnZzcGFjZSAhPSAnLTEnID8gcGFyc2VJbnQoaW1hZ2UudnNwYWNlKSA6ICcnCisJCQl9OworCisgICAgZnVuY3Rpb24gc2hvcnRTaXplKGNzc1NpemUpCisgICAgeworICAgICAgaWYoLyAvLnRlc3QoY3NzU2l6ZSkpCisgICAgICB7CisgICAgICAgIHZhciBzaXplcyA9IGNzc1NpemUuc3BsaXQoJyAnKTsKKyAgICAgICAgdmFyIHVzZUZpcnN0U2l6ZSA9IHRydWU7CisgICAgICAgIGZvcih2YXIgaSA9IDE7IGkgPCBzaXplcy5sZW5ndGg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgIGlmKHNpemVzWzBdICE9IHNpemVzW2ldKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHVzZUZpcnN0U2l6ZSA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKHVzZUZpcnN0U2l6ZSkgY3NzU2l6ZSA9IHNpemVzWzBdOworICAgICAgfQorICAgICAgcmV0dXJuIGNzc1NpemU7CisgICAgfQorICAgIG91dHBhcmFtLmZfYm9yZGVyID0gc2hvcnRTaXplKG91dHBhcmFtLmZfYm9yZGVyKTsKKyAgICBvdXRwYXJhbS5mX3BhZGRpbmcgPSBzaG9ydFNpemUob3V0cGFyYW0uZl9wYWRkaW5nKTsKKyAgICBvdXRwYXJhbS5mX21hcmdpbiA9IHNob3J0U2l6ZShvdXRwYXJhbS5mX21hcmdpbik7CisgICAgCisgICAgZnVuY3Rpb24gY29udmVydFRvSGV4KGNvbG9yKSB7CisKKyAgICAgIGlmICh0eXBlb2YgY29sb3IgPT0gInN0cmluZyIgJiYgLywgLy50ZXN0LmNvbG9yKQorICAgICAgY29sb3IgPSBjb2xvci5yZXBsYWNlKC8sIC8sICcsJyk7IC8vIHJnYihhLCBiKSA9PiByZ2IoYSxiKQorCisgICAgICBpZiAodHlwZW9mIGNvbG9yID09ICJzdHJpbmciICYmIC8gLy50ZXN0LmNvbG9yKSB7IC8vIG11bHRpcGxlIHZhbHVlcworICAgICAgICB2YXIgY29sb3JzID0gY29sb3Iuc3BsaXQoJyAnKTsKKyAgICAgICAgdmFyIGNvbG9yc3RyaW5nID0gJyc7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgY29sb3JzdHJpbmcgKz0gWGluaGEuX2NvbG9yVG9SZ2IoY29sb3JzW2ldKTsKKyAgICAgICAgICBpZiAoaSArIDEgPCBjb2xvcnMubGVuZ3RoKQorICAgICAgICAgIGNvbG9yc3RyaW5nICs9ICIgIjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY29sb3JzdHJpbmc7CisgICAgICB9CisKKyAgICAgIHJldHVybiBYaW5oYS5fY29sb3JUb1JnYihjb2xvcik7CisgICAgfQorICAgIAorICAgIG91dHBhcmFtLmZfYmFja2dyb3VuZENvbG9yID0gY29udmVydFRvSGV4KG91dHBhcmFtLmZfYmFja2dyb3VuZENvbG9yKTsKKyAgICBvdXRwYXJhbS5mX2JvcmRlckNvbG9yID0gY29udmVydFRvSGV4KG91dHBhcmFtLmZfYm9yZGVyQ29sb3IpOworCisJCX0gLy8gZW5kIG9mIGlmIHdlIHNlbGVjdGVkIGFuIGltYWdlIGJlZm9yZSByYWlzaW5nIHRoZSBkaWFsb2cuCisKKwkvLyB0aGUgIm1hbmFnZXIiIHZhciBpcyBsZWdhY3kgY29kZS4gU2hvdWxkIHByb2JhYmx5IHJlZmVyZW5jZSB0aGUKKwkvLyBhY3R1YWwgY29uZmlnIHZhcmlhYmxlIGluIGVhY2ggcGxhY2UgLi4gZm9yIG5vdyB0aGlzIGlzIGdvb2QgZW5vdWdoLgorCisJLy8gYWxlcnQoICJiYWNrZW5kIGlzICciICsgZWRpdG9yLmNvbmZpZy5JbWFnZU1hbmFnZXIuYmFja2VuZCArICInIiApOworCisJdmFyIG1hbmFnZXIgPSBlZGl0b3IuY29uZmlnLkltYWdlTWFuYWdlci5iYWNrZW5kICsgJ19fZnVuY3Rpb249bWFuYWdlcic7CisgIGlmKGVkaXRvci5jb25maWcuSW1hZ2VNYW5hZ2VyLmJhY2tlbmRfY29uZmlnICE9IG51bGwpCisgIHsKKyAgICBtYW5hZ2VyICs9ICcmYmFja2VuZF9jb25maWc9JworICAgICAgKyBlbmNvZGVVUklDb21wb25lbnQoZWRpdG9yLmNvbmZpZy5JbWFnZU1hbmFnZXIuYmFja2VuZF9jb25maWcpOworICAgIG1hbmFnZXIgKz0gJyZiYWNrZW5kX2NvbmZpZ19oYXNoPScKKyAgICAgICsgZW5jb2RlVVJJQ29tcG9uZW50KGVkaXRvci5jb25maWcuSW1hZ2VNYW5hZ2VyLmJhY2tlbmRfY29uZmlnX2hhc2gpOworICAgIG1hbmFnZXIgKz0gJyZiYWNrZW5kX2NvbmZpZ19zZWNyZXRfa2V5X2xvY2F0aW9uPScKKyAgICAgICsgZW5jb2RlVVJJQ29tcG9uZW50KGVkaXRvci5jb25maWcuSW1hZ2VNYW5hZ2VyLmJhY2tlbmRfY29uZmlnX3NlY3JldF9rZXlfbG9jYXRpb24pOworICB9CisgIAorICBpZihlZGl0b3IuY29uZmlnLkltYWdlTWFuYWdlci5iYWNrZW5kX2RhdGEgIT0gbnVsbCkKKyAgeworICAgIGZvciAoIHZhciBpIGluIGVkaXRvci5jb25maWcuSW1hZ2VNYW5hZ2VyLmJhY2tlbmRfZGF0YSApCisgICAgeworICAgICAgbWFuYWdlciArPSAnJicgKyBpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGVkaXRvci5jb25maWcuSW1hZ2VNYW5hZ2VyLmJhY2tlbmRfZGF0YVtpXSk7CisgICAgfQorICB9CisgIAorCURpYWxvZyhtYW5hZ2VyLCBmdW5jdGlvbihwYXJhbSkgeworCQlpZiAoIXBhcmFtKSB7CS8vIHVzZXIgbXVzdCBoYXZlIHByZXNzZWQgQ2FuY2VsCisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJdmFyIGltZyA9IGltYWdlOworCQlpZiAoIWltZykgeworCQkJaWYgKFhpbmhhLmlzX2llKSB7CisgICAgICAgIHZhciBzZWwgPSBlZGl0b3IuX2dldFNlbGVjdGlvbigpOworICAgICAgICB2YXIgcmFuZ2UgPSBlZGl0b3IuX2NyZWF0ZVJhbmdlKHNlbCk7CisgICAgICAgIGVkaXRvci5fZG9jLmV4ZWNDb21tYW5kKCJpbnNlcnRpbWFnZSIsIGZhbHNlLCBwYXJhbS5mX3VybCk7CisJCQkJaW1nID0gcmFuZ2UucGFyZW50RWxlbWVudCgpOworCQkJCS8vIHdvbmRlciBpZiB0aGlzIHdvcmtzLi4uCisJCQkJaWYgKGltZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT0gImltZyIpIHsKKwkJCQkJaW1nID0gaW1nLnByZXZpb3VzU2libGluZzsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOworICAgICAgICBpbWcuc3JjID0gcGFyYW0uZl91cmw7CisgICAgICAgIGVkaXRvci5pbnNlcnROb2RlQXRTZWxlY3Rpb24oaW1nKTsKKwkJCX0KKwkJfSBlbHNlIHsJCQkKKwkJCWltZy5zcmMgPSBwYXJhbS5mX3VybDsKKwkJfQorCQkKKwkJZm9yIChmaWVsZCBpbiBwYXJhbSkgeworCQkJdmFyIHZhbHVlID0gcGFyYW1bZmllbGRdOworCQkJc3dpdGNoIChmaWVsZCkgeworCQkJICAgIGNhc2UgImZfYWx0IiAgICA6IGltZy5hbHQJID0gdmFsdWU7IGJyZWFrOworCQkJICAgIGNhc2UgImZfYm9yZGVyIiA6CisgICAgICAgICAgaWYodmFsdWUubGVuZ3RoKQorICAgICAgICAgIHsgICAgICAgICAgIAorICAgICAgICAgICAgaW1nLnN0eWxlLmJvcmRlcldpZHRoID0gL1teMC05XS8udGVzdCh2YWx1ZSkgPyB2YWx1ZSA6ICAocGFyc2VJbnQodmFsdWUpICsgJ3B4Jyk7CisgICAgICAgICAgICBpZihpbWcuc3R5bGUuYm9yZGVyV2lkdGggJiYgIWltZy5zdHlsZS5ib3JkZXJTdHlsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW1nLnN0eWxlLmJvcmRlclN0eWxlID0gJ3NvbGlkJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGltZy5zdHlsZS5ib3JkZXJXaWR0aCA9ICcnOworICAgICAgICAgICAgaW1nLnN0eWxlLmJvcmRlclN0eWxlID0gJyc7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICAgIAorICAgICAgICAgIGNhc2UgImZfYm9yZGVyQ29sb3IiOiBpbWcuc3R5bGUuYm9yZGVyQ29sb3IgPSB2YWx1ZTsgYnJlYWs7CisgICAgICAgICAgY2FzZSAiZl9iYWNrZ3JvdW5kQ29sb3IiOiBpbWcuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdmFsdWU7IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgY2FzZSAiZl9wYWRkaW5nIjogCisgICAgICAgICAgeworICAgICAgICAgICAgaWYodmFsdWUubGVuZ3RoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpbWcuc3R5bGUucGFkZGluZyA9IC9bXjAtOV0vLnRlc3QodmFsdWUpID8gdmFsdWUgOiAgKHBhcnNlSW50KHZhbHVlKSArICdweCcpOyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW1nLnN0eWxlLnBhZGRpbmcgPSAnJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgCisgICAgICAgICAgY2FzZSAiZl9tYXJnaW4iOiAKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZih2YWx1ZS5sZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGltZy5zdHlsZS5tYXJnaW4gPSAvW14wLTldLy50ZXN0KHZhbHVlKSA/IHZhbHVlIDogIChwYXJzZUludCh2YWx1ZSkgKyAncHgnKTsgCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGltZy5zdHlsZS5tYXJnaW4gPSAnJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgCisJCQkgICAgY2FzZSAiZl9hbGlnbiIgIDogaW1nLmFsaWduCSA9IHZhbHVlOyBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgIGNhc2UgImZfd2lkdGgiIDogCisgICAgICAgICAgeworICAgICAgICAgICAgaWYoIWlzTmFOKHBhcnNlSW50KHZhbHVlKSkpIHsgaW1nLndpZHRoICA9IHBhcnNlSW50KHZhbHVlKTsgfSBlbHNlIHsgaW1nLndpZHRoID0gJyc7IH0KKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgCisJCQkJICBjYXNlICJmX2hlaWdodCI6CisgICAgICAgICAgeworICAgICAgICAgICAgaWYoIWlzTmFOKHBhcnNlSW50KHZhbHVlKSkpIHsgaW1nLmhlaWdodCA9IHBhcnNlSW50KHZhbHVlKTsgfSBlbHNlIHsgaW1nLmhlaWdodCA9ICcnOyB9CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICAgIAorICAgICAgICAgIGNhc2UgImZfaHNwYWNlIiA6IAorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCFpc05hTihwYXJzZUludCh2YWx1ZSkpKSB7IGltZy5oc3BhY2UgID0gcGFyc2VJbnQodmFsdWUpOyB9IGVsc2UgeyBpbWcuaHNwYWNlID0gJyc7IH0KKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgCisgICAgICAgICAgY2FzZSAiZl92c3BhY2UiIDogCisgICAgICAgICAgeworICAgICAgICAgICAgaWYoIWlzTmFOKHBhcnNlSW50KHZhbHVlKSkpIHsgaW1nLnZzcGFjZSAgPSBwYXJzZUludCh2YWx1ZSk7IH0gZWxzZSB7IGltZy52c3BhY2UgPSAnJzsgfQorICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKwkJCX0KKworCQl9CisJCQorCQkKKwl9LCBvdXRwYXJhbSk7Cit9OwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvUkVBRE1FLnR4dCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE5OTM5MgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL1JFQURNRS50eHQKQEAgLTAsMCArMSwxNTAgQEAKK09yaWdpbmFsbHkgRGV2ZWxvcGVkIGJ5OiBodHRwOi8vd3d3LnpodW8ub3JnL2h0bWxhcmVhLworCis+IFRoaXMgaXMgYSBwbHVnLWluIGZvciBIVE1MQXJlYSAzLjAKKz4gCis+IFRoZSBQSFAgSW1hZ2VNYW5hZ2VyICsgRWRpdG9yIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byAKKz4gYnJvd3NlciBmb3IgaW1hZ2UgZmlsZXMgb24geW91ciB3ZWIgc2VydmVyLiBUaGUgRWRpdG9yCis+IGFsbG93cyBzb21lIGJhc2ljIGltYWdlIG1hbmlwdWxhdGlvbnMgc3VjaCBhcywgY3JvcHBpbmcsCis+IHJvdGF0aW9uLCBmbGlwLCBhbmQgc2NhbGluZy4KKz4gCis+IEZ1cnRoZXIgYW5kIHVwLXRvLWRhdGUgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgYXQKKz4gaHR0cDovL3d3dy56aHVvLm9yZy9odG1sYXJlYS9kb2NzL2luZGV4Lmh0bWwKKz4gCis+IENoZWVyLAorPiBXZWkKKworMjAwNS0wMy0yMCAKKyAgYnkgWWVybW8gTGFtZXJzIG9mIERUTGluaywgTExDIChodHRwOi8vd3d3LmZvcm12aXN0YS5jb20vY29udGFjdC5odG1sKQorCitQbGVhc2UgcG9zdCBxdWVzdGlvbnMvY29tbWVudHMvZmxhbWVzIGFib3V0IHRoaXMgcGx1Z2luIGluIHRoZSBYaW5oYSBmb3J1bXMKK2F0IAorCisgICBodHRwOi8veGluaGEuZ29nby5jby5uei9wdW5iYi92aWV3Zm9ydW0ucGhwP2lkPTEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJZiB5b3UgaGF2ZSBHRCBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQgaW4gUEhQIHRoaXMgc2hvdWxkIHdvcmsgb3V0IG9mIHRoZSAKK2JveC4gCisKK0ZvciBwcm9kdWN0aW9uIHVzZSBzZWUgY29uZmlnLmluYy5waHAgZm9yIGNvbmZpZ3VyYXRpb24gdmFsdWVzLiBZb3Ugd2lsbCAKK3dhbnQgdG8gYWRqdXN0IGltYWdlc19kaXIgYW5kIGltYWdlc191cmwgZm9yIHlvdXIgYXBwbGljYXRpb24uCisKK0ZvciBkZW1vIHB1cnBvc2VzIEltYWdlTWFuYWdlciBpcyBzZXQgdXAgdG8gdmlldyBpbWFnZXMgaW4gdGhlCisKKyAgIC94aW5oYS9wbHVnaW5zL0ltYWdlTWFuYWdlci9kZW1vX2ltYWdlcworCitkaXJlY3RvcnkuIFRoaXMgaXMgZ292ZXJuZWQgYnkgdGhlIGltYWdlc19kaXIgYW5kIGltYWdlc191cmwgY29uZmlnIG9wdGlvbnMuCisKK1RoZSBwZXJtaXNzaW9ucyBvbiB0aGUgZGVtb19pbWFnZXMgZGlyZWN0b3J5IG1heSBub3QgYmUgY29ycmVjdC4gVGhlIGRpcmVjdG9yeQorc2hvdWxkIGJlIG93bmVkIGJ5IHRoZSB1c2VyIHlvdXIgd2Vic2VydmVyIHJ1bnMgYXMgYW5kIHNob3VsZCBoYXZlIDc1NSAKK3Blcm1pc3Npb25zLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCeSAgZGVmYXVsdCB0aGlzIEltYWdlTWFuYWdlciBpcyBzZXQgdXAgdG8gYnJvd3NlIHNvbWUgZ3JhcGhpY3MKK2luIHBsdWdpbnMvSW1hZ2VNYW5hZ2VyL2RlbW9faW1hZ2VzLgorCitGb3IgIHNlY3VyaXR5IHJlYXNvbnMgaW1hZ2UgdXBsb2FkaW5nIGlzIHR1cm5lZCBvZmYgYnkgZGVmYXVsdC4KK1lvdSBjYW4gZW5hYmxlIGl0IGJ5IGVkaXRpbmcgY29uZmlnLmluYy5waHAuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRm9yIERldmVsb3BlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDSEFOR0VTIEZST00gV2VpJ3MgT3JpZ2luYWwgQ29kZToKKworU2luZ2xlIEJhY2tlbmQ6CQkJCQkJCQkgCistLS0tLS0tLS0tLS0tLS0KKworQWxsICByZXF1ZXN0cyAgZnJvbSAgdGhlIGphdmFzY3JpcHQgY29kZSBiYWNrIHRvIHRoZSBzZXJ2ZXIgbm93CithcmUgIHJvdXRlZCAgdGhyb3VnaCAgYSAgc2luZ2xlICBjb25maWd1cmFibGUgIGJhY2tlbmQgIHNjcmlwdCwKK2JhY2tlbmQucGhwLgorCitSZXF1ZXN0IFVSTHMgYXJlIG9mIHRoZSBmb3JtOgorCisgPGNvbmZpZyBiYWNrZW5kIFVSTD4oP3wmKV9fcGx1Z2luPUltYWdlTWFuYWdlciZfX2Z1bmN0aW9uPTxmdW5jdGlvbj4mYXJnPXZhbHVlJmFyZz12YWx1ZQorCitUaGUgZGVmYXVsdCBVUkwgaXMgcGx1Z2lucy94aW5oYS9iYWNrZW5kLnBocC4KKworVGhpcyAgYXBwcm9hY2ggIG1ha2VzICBpdCAgcG9zc2libGUgIHRvICBjb21wbGV0ZWx5IHJlcGxhY2UgdGhlCitiYWNrZW5kICB3aXRoICBhICBwZXJsICBvciBBU1AgaW1wbGVtZW50YXRpb24gd2l0aG91dCBoYXZpbmcgdG8KK2NoYW5nZSBhbnkgb2YgdGhlIGNsaWVudCBzaWRlIGNvZGUuCisKK1lvdSAgY2FuICBvdmVycmlkZSAgdGhlICBsb2NhdGlvbiAgYW5kICBuYW1lIG9mIHRoZSBiYWNrZW5kLnBocAorc2NyaXB0IGJ5IHNldHRpbmcgdGhlIGNvbmZpZy5JbWFnZU1hbmFnZXIuYmFja2VuZCBwcm9wZXJ0eSBmcm9tCit0aGUgIGNhbGxpbmcgIHBhZ2UuIE1ha2Ugc3VyZSB0aGUgVVJMIGVuZHMgaW4gYW4gIiYiLiBUaGUgY29kZSwKK2ZvciBub3csIGFzc3VtZXMgaXQgY2FuIGp1c3QgdGFjayBvbiB2YXJpYWJsZXMuCisKK0ZvciAgdGhlIG1vbWVudCB0aGUgamF2YXNjcmlwdCBmaWxlcyBpbiB0aGUgYXNzZXRzIGRpcmVjdG9yeSBkbworbm90ICBoYXZlIGFjY2VzcyB0byB0aGUgbWFpbiBlZGl0b3Igb2JqZWN0IGFuZCBhcyBhIHJlc3VsdCBoYXZlCitub3QgIGFjY2VzcyB0byB0aGUgY29uZmlnLiBGb3IgdGhlIG1vbWVudCB3ZSB1c2UgYSBfYmFja2VuZF91cmwKK3ZhcmlhYmxlICBvdXRwdXQgIGZyb20gIFBIUCAgdG8gY29tbXVuaWNhdGUgdGhlIGxvY2F0aW9uIG9mIHRoZQorYmFja2VuZCAgdG8gIHRoZXNlICBhc3NldHMuICBJdCdzICBhICBrbHVkZ2UuIElkZWFsbHkgYWxsIHRoZXNlCitjb25maWcgIHZhbHVlcyAgc2hvdWxkICBiZSAgc2V0ICBmcm9tICB0aGUgIGNhbGxpbmcgcGFnZSBhbmQgYmUKK2F2YWlsYWJsZSB0aHJvdWdoIHRoZSBlZGl0b3IuY29uZmlnLkltYWdlTWFuYWdlciBvYmplY3QuCisKK0RlYnVnIE1lc3NhZ2VzCistLS0tLS0tLS0tLS0tLS0KKworVGhlICBwaHAgZmlsZXMgaW5jbHVkZSBhIHNpbXBsZSBkZWJ1Z2dpbmcgbGlicmFyeSwgZGR0LnBocC4gU2VlCitjb25maWcuaW5jLnBocCAgZm9yICBob3cgIHRvICB0dXJuICBpdCBvbi4gSXQgY2FuIGRpc3BsYXkgdHJhY2UKK21lc3NhZ2VzIHRvIHRoZSBicm93c2VyIG9yIGR1bXAgdGhlbSB0byBhIGxvZyBmaWxlLgorCitJJ2xsICB0cnkgIHRvICBwYWNrYWdlICB1cCAgdGhlIGNsaWVudC1zaWRlIHRyYWNpbmctdG8tdGV4dGFyZWEKK19kZHQoKSAgZnVuY3Rpb25zICBJJ3ZlICBwdXQgIHRvZ2V0aGVyLiAgSGF2aW5nIGEgdHJhY2UgbWVzc2FnZQoraW5mcmFzdHJ1Y3R1cmUgaGFzIGFsd2F5cyBzZXJ2ZWQgbWUgd2VsbC4KKworLS0tLS0tLS0tLS0tLQorRmxha2V5IEVkaXRvcgorLS0tLS0tLS0tLS0tLQorCitUaGUgIGVkaXRvciAgSSAgdXNlICBpcyAgZmxha2V5ICAoYnV0ICB2ZXJ5ICB2ZXJ5IGZhc3QpLiBJdCBoYXMKK3Byb2JsZW1zIHdpdGggdGFiIHRvIHNwYWNlIGNvbnZlcnNpb24gc28gaWYgdGhlIGluZGVudGluZyBsb29rcword2VpcmQgdGhhdCdzIHdoeS4KKworLS0tLQorVE9ETworLS0tLQorCitJbWFnZU1hbmFnZXIgcmVhbGx5IG5lZWRzIGEgY29tcGxldGUgcmV3cml0ZS4gCisKKy4gSW1hZ2VNYW5hZ2VyIHNob3VsZCBhcHBlYXIgaW4gYSBwYW5lIGluc3RlYWQgb2YgYSBwb3B1cAorICB3aW5kb3cgdXNpbmcgU2xlZW1hbidzIHdpbmRvd3BhbmUgc3VwcG9ydC4KKworLiAgaHRtbCAgYW5kICBwaHAgY29kZSBhcmUgaW50ZXJtaXhlZC4gSXQgd291bGQgYmUgdmVyeSBuaWNlIHRvCit1c2UgIHNvbWUgIGtpbmQgIG9mIHRlbXBsYXRpbmcgZm9yIHRoZSBkaWFsb2dzOyB0aGlzIHRlbXBsYXRpbmcKK3Nob3VsZCBiZSBkb25lIGxvbmcgaGFuZCBzbyBpdCBjYW4gYmUgcmUtdXNlZCByZWdhcmRsZXNzIG9mIHRoZQorYmFja2VuZCBpbXBsZW1lbnRhdGlvbiBsYW5ndWFnZS4KKworLiAgdGhlICBjb25maWcgIHNob3VsZCAgcHJvYmFibHkgIGJlICBzb21lIGZvcm1hdCB0aGF0IHdvdWxkIGJlCitlYXNpbHkgIHJlYWQgIGJ5ICBtdWx0aXBsZSAgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBiYWNrIGVuZC4gSXQKK3dvdWxkICBiZSBuaWNlIHRvIGhhdmUgYSBzaW5nbGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gcmVnYXJkbGVzcworb2Ygd2hldGhlciB0aGUgYmFja2VuZCBpcyBQSFAsIFBlcmwgb3IgQVNQLgorCisuICBqYXZhc2NyaXB0IGFzc2V0cyBhcmUgbm90IG9iamVjdHMuIFBhc3NpbmcgY29uZmlnIG9wdGlvbnMgdG8KK3RoZSAgYXNzZXRzICBmdW5jdGlvbnMgcmVxdWlyZXMgaW50ZXJtZWRpYXRlIHZhcmlhYmxlcyB3aGljaCBpcworcmVhbGx5ICB1Z2x5LiAgRXZlcnl0aGluZyBzaG91bGQgYmUgY2xlYW5seSBpbnRlZ3JhdGVkIGludG8gdGhlCitvYmplY3QgaGVpcmFyY2h5IGFraW4gdG8gdGhlIHdheSBMaW5rZXIgaXMgZG9uZS4KKworLiAgaWYgIGFuICBpbWFnZSBpcyBzZWxlY3RlZCBmcm9tIHRoZSBkb2N1bWVudCBlZGl0b3Igd2luZG93IGl0CitzaG91bGQgIGJlICBmb2N1c2VkICBhbmQgIGhpZ2hsaWdodGVkICBpbiAgdGhlICBpbWFnZSBzZWxlY3Rpb24KK3dpbmRvdy4KKworLiBmaXggZnVsbHktcXVhbGlmaWVkIHVybCBpbiBpbWFnZSBzZWxlY3Rpb24gYm94IHVuZGVyIE1TSUUuCisKKy4gcGVyLWltYWdlIHBlcm1pc3Npb25zLiBXZSBzaG91bGQgaW5jbHVkZSBzb21lIGtpbmQgb2YgYmFja2VuZAorcGVybWlzc2lvbnMgICAgICBtYW5hZ2VtZW50ICAgICAgc28gICAgICB1c2VycyAgICAgY2FuICAgICBvbmx5CitkZWxldGUvZWRpdC9tb3ZlL3JlbmFtZSBpbWFnZXMgdGhhdCB0aGV5IGhhdmUgdXBsb2FkZWQuCisKKy4gYWRkIGEgQ0FOQ0VMIGJ1dHRvbiBhbmQgYSBTQVZFIEFTIGJ1dHRvbiB0byB0aGUgZWRpdG9yLgorCisuICBhZGQgIGEgIGxpc3QgdmlldyBha2luIHRvIEVGTS4gKGFuZCBpbmNsdWRlIGltYWdlIHByb3BlcnRpZXMKK3dpZHRoL2hlaWdodC9kZXB0aC9ldGMuKQorCisuICBmaWd1cmUgIG91dCAgYSB3YXkgZm9yIEltYWdlTWFuYWdlciB0byB3b3JrICJvdXQgb2YgdGhlIGJveCIKK3JlZ2FyZGxlc3Mgb2YgaW5zdGFsbC4KKworLiBjbGllbnQtc2lkZSB0cmFjaW5nLgorCisuIGZhbmN5IHN0dWZmIGxpa2UgYWRkaW5nIGEgVUkgdG8gZGVmaW5lIHJvbGxvdmVycywgYW5pbWF0aW9ucywKK2V0Yy4KKwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvYXNzZXRzL0VkaXRvckNvbnRlbnQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9hc3NldHMvRWRpdG9yQ29udGVudC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTY1NWYwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvYXNzZXRzL0VkaXRvckNvbnRlbnQuanMKQEAgLTAsMCArMSw3NDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogVGl0bGUuLi4uLi4uLi46ICBPbmxpbmUgSW1hZ2UgRWRpdG9yIEludGVyZmFjZQorKiogVmVyc2lvbi4uLi4uLi46ICAxLjAKKyoqIEF1dGhvci4uLi4uLi4uOiAgWGlhbmcgV2VpIFpIVU8gPHdlaUB6aHVvLm9yZz4KKyoqIEZpbGVuYW1lLi4uLi4uOiAgRWRpdG9yQ29udGVudHMuanMKKyoqIExhc3QgY2hhbmdlZC4uOiAgMzEgTWFyIDIwMDQgCisqKiBOb3Rlcy4uLi4uLi4uLjogIEhhbmRsZXMgbW9zdCBvZiB0aGUgaW50ZXJmYWNlIHJvdXRpbmVzIGZvciB0aGUgSW1hZ2VFZGl0b3IuCisqCisqIEFkZGVkOiAgMjkgTWFyIDIwMDQgIC0gQ29uc3RyYWludGVkIHJlc2l6aW5nL3NjYWxpbmcKKyoqLyAKKworCitmdW5jdGlvbiBNTV9maW5kT2JqKG4sIGQpIHsgLy92NC4wMQorICB2YXIgcCxpLHg7ICBpZighZCkgZD1kb2N1bWVudDsgaWYoKHA9bi5pbmRleE9mKCI/IikpPjAmJnBhcmVudC5mcmFtZXMubGVuZ3RoKSB7CisgICAgZD1wYXJlbnQuZnJhbWVzW24uc3Vic3RyaW5nKHArMSldLmRvY3VtZW50OyBuPW4uc3Vic3RyaW5nKDAscCk7fQorICBpZighKHg9ZFtuXSkmJmQuYWxsKSB4PWQuYWxsW25dOyBmb3IgKGk9MDsheCYmaTxkLmZvcm1zLmxlbmd0aDtpKyspIHg9ZC5mb3Jtc1tpXVtuXTsKKyAgZm9yKGk9MDsheCYmZC5sYXllcnMmJmk8ZC5sYXllcnMubGVuZ3RoO2krKykgeD1NTV9maW5kT2JqKG4sZC5sYXllcnNbaV0uZG9jdW1lbnQpOworICBpZigheCAmJiBkLmdldEVsZW1lbnRCeUlkKSB4PWQuZ2V0RWxlbWVudEJ5SWQobik7IHJldHVybiB4OworfQorCit2YXIgcGljX3gsIHBpY195OworZnVuY3Rpb24gUDdfU25hcCgpIHsgLy92Mi42MiBieSBQVklJCisgIHZhciB4LHksb3gsYngsb3kscCx0eCxhLGIsayxkLGRhLGUsZWwsYXJncz1QN19TbmFwLmFyZ3VtZW50czthPXBhcnNlSW50KGEpOworICBmb3IgKGs9MDsgazwoYXJncy5sZW5ndGgtMyk7IGsrPTQpCisgICBpZiAoKGc9TU1fZmluZE9iaihhcmdzW2tdKSkhPW51bGwpIHsKKyAgICBlbD1ldmFsKE1NX2ZpbmRPYmooYXJnc1trKzFdKSk7CisgICAgYT1wYXJzZUludChhcmdzW2srMl0pO2I9cGFyc2VJbnQoYXJnc1trKzNdKTsKKyAgICB4PTA7eT0wO294PTA7b3k9MDtwPSIiO3R4PTE7ZGE9ImRvY3VtZW50LmFsbFsnIithcmdzW2tdKyInXSI7CisgICAgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQpIHsKKyAgICAgZD0iZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoJyIrYXJnc1trXSsiJylbMF0iOworICAgICBpZighZXZhbChkKSkge2Q9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciK2FyZ3Nba10rIicpIjtpZighZXZhbChkKSkge2Q9ZGE7fX0KKyAgICB9ZWxzZSBpZihkb2N1bWVudC5hbGwpIHtkPWRhO30gCisgICAgaWYgKGRvY3VtZW50LmFsbCB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCkgeworICAgICB3aGlsZSAodHg9PTEpIHtwKz0iLm9mZnNldFBhcmVudCI7CisgICAgICBpZihldmFsKGQrcCkpIHt4Kz1wYXJzZUludChldmFsKGQrcCsiLm9mZnNldExlZnQiKSk7eSs9cGFyc2VJbnQoZXZhbChkK3ArIi5vZmZzZXRUb3AiKSk7CisgICAgICB9ZWxzZXt0eD0wO319CisgICAgIG94PXBhcnNlSW50KGcub2Zmc2V0TGVmdCk7b3k9cGFyc2VJbnQoZy5vZmZzZXRUb3ApO3ZhciB0dz14K294K3krb3k7CisgICAgIGlmKHR3PT0wIHx8IChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCJNU0lFIDQiKT4tMSAmJiBuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCJNYWMiKT4tMSkpIHsKKyAgICAgIG94PTA7b3k9MDtpZihnLnN0eWxlLmxlZnQpe3g9cGFyc2VJbnQoZy5zdHlsZS5sZWZ0KTt5PXBhcnNlSW50KGcuc3R5bGUudG9wKTsKKyAgICAgIH1lbHNle3ZhciB3MT1wYXJzZUludChlbC5zdHlsZS53aWR0aCk7Yng9KGE8MCk/LTUtdzE6LTEwOworICAgICAgYT0oTWF0aC5hYnMoYSk8MTAwMCk/MDphO2I9KE1hdGguYWJzKGIpPDEwMDApPzA6YjsKKyAgICAgIC8vYWxlcnQoZXZlbnQuY2xpZW50WCk7CisJICBpZiAoZXZlbnQgPT0gbnVsbCkgeD1kb2N1bWVudC5ib2R5LnNjcm9sbExlZnQgKyBieDsKKwkJZWxzZSB4PWRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCArIGV2ZW50LmNsaWVudFggKyBieDsKKwkgIGlmIChldmVudCA9PSBudWxsKSB5PWRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOworCQllbHNlIHk9ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgKyBldmVudC5jbGllbnRZO319CisgICB9ZWxzZSBpZiAoZG9jdW1lbnQubGF5ZXJzKSB7eD1nLng7eT1nLnk7dmFyIHEwPWRvY3VtZW50LmxheWVycyxkZD0iIjsKKyAgICBmb3IodmFyIHM9MDtzPHEwLmxlbmd0aDtzKyspIHtkZD0nZG9jdW1lbnQuJytxMFtzXS5uYW1lOworICAgICBpZihldmFsKGRkKycuZG9jdW1lbnQuJythcmdzW2tdKSkge3grPWV2YWwoZGQrJy5sZWZ0Jyk7eSs9ZXZhbChkZCsnLnRvcCcpO2JyZWFrO319fQorICAgaWYoZWwpIHtlPShkb2N1bWVudC5sYXllcnMpP2VsOmVsLnN0eWxlOworICAgdmFyIHh4PXBhcnNlSW50KHgrb3grYSkseXk9cGFyc2VJbnQoeStveStiKTsKKyAgIC8vYWxlcnQoeHgrIjoiK3l5KTsKKyAgIGlmKG5hdmlnYXRvci5hcHBOYW1lPT0iTmV0c2NhcGUiICYmIHBhcnNlSW50KG5hdmlnYXRvci5hcHBWZXJzaW9uKT40KXt4eCs9InB4Ijt5eSs9InB4Ijt9CisgICBpZihuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCJNU0lFIDUiKT4tMSAmJiBuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCJNYWMiKT4tMSl7CisgICAgeHgrPXBhcnNlSW50KGRvY3VtZW50LmJvZHkubGVmdE1hcmdpbik7eXkrPXBhcnNlSW50KGRvY3VtZW50LmJvZHkudG9wTWFyZ2luKTsKKyAgICB4eCs9InB4Ijt5eSs9InB4Ijt9ZS5sZWZ0PXh4O2UudG9wPXl5O30KKyAgICBwaWNfeCA9IHBhcnNlSW50KHh4KTsgcGljX3kgPSBwYXJzZUludCh5eSk7CisgICAgLy9hbGVydCh4eCsiOiIreXkpOworICAgIH0KK30KKwordmFyIGllPWRvY3VtZW50LmFsbAordmFyIG5zNj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCYmIWRvY3VtZW50LmFsbAorCit2YXIgZHJhZ2FwcHJvdmVkPWZhbHNlCit2YXIgeix4LHksc3RhdHVzLCBhbnQsIGNhbnZhcywgY29udGVudCwgcGljX3dpZHRoLCBwaWNfaGVpZ2h0LCBpbWFnZSwgcmVzaXplSGFuZGxlLCBvYV93LCBvYV9oLCBvYV94LCBvYV95LCBteDIsIG15MjsKKworCitmdW5jdGlvbiBpbml0X3Jlc2l6ZSgpIAoreworICAgIGlmKG1vZGUgPT0gInNjYWxlIikgCisgICAgeworICAgICAgICBQN19TbmFwKCd0aGVJbWFnZScsJ2FudCcsMCwwKTsKKworICAgICAgICBpZiAoY2FudmFzID09IG51bGwpCisgICAgICAgICAgICBjYW52YXMgPSBNTV9maW5kT2JqKCJpbWdDYW52YXMiKTsKKworICAgICAgICBpZiAocGljX3dpZHRoID09IG51bGwgfHwgcGljX2hlaWdodCA9PSBudWxsKQorICAgICAgICB7CisgICAgICAgICAgICBpbWFnZSA9IE1NX2ZpbmRPYmooInRoZUltYWdlIik7CisgICAgICAgICAgICBwaWNfd2lkdGggPSBpbWFnZS53aWR0aDsKKyAgICAgICAgICAgIHBpY19oZWlnaHQgPSBpbWFnZS5oZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChhbnQgPT0gbnVsbCkKKyAgICAgICAgICAgIGFudCA9IE1NX2ZpbmRPYmooImFudCIpOworCisgICAgICAgIGFudC5zdHlsZS5sZWZ0ID0gcGljX3g7IGFudC5zdHlsZS50b3AgPSBwaWNfeTsKKyAgICAgICAgYW50LnN0eWxlLndpZHRoID0gcGljX3dpZHRoOyBhbnQuc3R5bGUuaGVpZ2h0ID0gcGljX2hlaWdodDsKKyAgICAgICAgYW50LnN0eWxlLnZpc2liaWxpdHkgPSAidmlzaWJsZSI7CisKKyAgICAgICAgZHJhd0JvdW5kSGFuZGxlKCk7CisgICAgICAgIGpnX2RvYy5wYWludCgpOworICAgIH0KK30KKworaW5pdEVkaXRvciA9IGZ1bmN0aW9uICgpIAoreworICAgIGluaXRfY3JvcCgpOworICAgIGluaXRfcmVzaXplKCk7CisgICAgdmFyIG1hcmtlckltZyA9IE1NX2ZpbmRPYmooJ21hcmtlckltZycsIHdpbmRvdy50b3AuZG9jdW1lbnQpOworCisgICAgaWYgKG1hcmtlckltZy5zcmMuaW5kZXhPZigiaW1nL3Rfd2hpdGUuZ2lmIik+MCkKKyAgICAgICAgdG9nZ2xlTWFya2VyKCkgOworfTsKKworZnVuY3Rpb24gaW5pdF9jcm9wKCkgCit7CisgICAgLy9pZihtb2RlID09ICJjcm9wIikgeworICAgICAgICBQN19TbmFwKCd0aGVJbWFnZScsJ2FudCcsMCwwKTsKKyAgICAvL30KK30KKworZnVuY3Rpb24gc2V0TW9kZShuZXdNb2RlKSAKK3sKKyAgICBtb2RlID0gbmV3TW9kZTsKKyAgICByZXNldCgpOworfQorCitmdW5jdGlvbiByZXNldCgpIAoreworICAgIGlmIChhbnQgPT0gbnVsbCkKKyAgICAgICAgYW50ID0gTU1fZmluZE9iaigiYW50Iik7CisKKyAgICBhbnQuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOworICAgIGFudC5zdHlsZS5sZWZ0ID0gMDsKKyAgICBhbnQuc3R5bGUudG9wID0gMDsKKyAgICBhbnQuc3R5bGUud2lkdGggPSAwOworICAgIGFudC5zdHlsZS5oZWlnaHQgPSAwOworCisgICAgbXgyID0gbnVsbDsKKyAgICBteTIgPSBudWxsOworCisgICAgamdfZG9jLmNsZWFyKCk7CisgICAgaWYobW9kZSAhPSAnbWVhc3VyZScpCisgICAgICAgIHNob3dTdGF0dXMoKTsgICAKKworICAgIGlmKG1vZGUgPT0gInNjYWxlIikgeworICAgICAgICBpbml0X3Jlc2l6ZSgpOworICAgIH0KKworICAgIFA3X1NuYXAoJ3RoZUltYWdlJywnYW50JywwLDApOworfQorCitmdW5jdGlvbiB0b2dnbGVNYXJrZXIoKSAKK3sKKyAgICAvL2FsZXJ0KCJUb2dnbGUiKTsKKyAgICBpZiAoYW50ID09IG51bGwpCisgICAgICAgIGFudCA9IE1NX2ZpbmRPYmooImFudCIpOworCisgICAgaWYoYW50LmNsYXNzTmFtZT09InNlbGVjdGlvbiIpCisgICAgICAgIGFudC5jbGFzc05hbWU9InNlbGVjdGlvbldoaXRlIjsKKyAgICBlbHNlCisgICAgICAgIGFudC5jbGFzc05hbWU9InNlbGVjdGlvbiI7CisgICAgCisgICAgaWYgKGpnX2RvYy5nZXRDb2xvcigpID09ICIjMDAwMDAwIikKKyAgICAgICAgamdfZG9jLnNldENvbG9yKCIjRkZGRkZGIik7CisgICAgZWxzZQorICAgICAgICBqZ19kb2Muc2V0Q29sb3IoIiMwMDAwMDAiKTsKKyAgICAKKyAgICBkcmF3Qm91bmRIYW5kbGUKKyAgICBqZ19kb2MucGFpbnQoKTsKK30KKworCitmdW5jdGlvbiBtb3ZlKGUpCit7CisgICAgaWYgKGRyYWdhcHByb3ZlZCkKKyAgICB7CisgICAgICAgIC8vei5zdHlsZS5sZWZ0PW5zNj8gdGVtcDErZS5jbGllbnRYLXg6IHRlbXAxK2V2ZW50LmNsaWVudFgteAorICAgICAgICAvL3ouc3R5bGUudG9wPW5zNj8gdGVtcDIrZS5jbGllbnRZLXkgOiB0ZW1wMitldmVudC5jbGllbnRZLXkKKyAgICAgICAgdmFyIHcgPSBuczY/IHRlbXAxK2UuY2xpZW50WCAtIHggOiB0ZW1wMStldmVudC5jbGllbnRYIC0geDsKKyAgICAgICAgdmFyIGggPSBuczY/IHRlbXAyK2UuY2xpZW50WSAtIHkgOiB0ZW1wMitldmVudC5jbGllbnRZIC0geTsKKworICAgICAgICAvL2FsZXJ0KGNhbnZhcy5zdHlsZS5sZWZ0KTsKKyAgICAgICAgLyppZiAoc3RhdHVzICE9bnVsbCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzLmlubmVySFRNTCAgPSAieDoiK3grIiB5OiIreSsiIHc6Iit3KyIgaDoiK2grIiBjYW5faDoiK3BpY19oZWlnaHQ7CisgICAgICAgICAgICBzdGF0dXMuaW5uZXJIVE1MICs9ICIgY2FuX3c6IitwaWNfd2lkdGgrIiBweDoiK3BpY194KyIgcHk6IitwaWNfeTsKKyAgICAgICAgICAgIHN0YXR1cy5pbm5lckhUTUwgKz0gIiBwaXg6IitpbWFnZS5zdHlsZS5sZWZ0KyIgcGl5OiIraW1hZ2Uuc3R5bGUudG9wKyIgb2JqOiIrb2JqLmlkOworICAgICAgICB9Ki8KKworICAgICAgICAvKmpnX2RvYy5jbGVhcigpOworICAgICAgICBqZ19kb2MuZmlsbFJlY3RQYXR0ZXJuKDAsMCxNYXRoLmFicyh3KSxNYXRoLmFicyhoKSxwYXR0ZXJuKTsKKyAgICAgICAgamdfZG9jLnBhaW50KCk7CisqLworICAgICAgICBpZiAoYW50ICE9IG51bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3ID49IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYW50LnN0eWxlLmxlZnQgPSB4OworICAgICAgICAgICAgICAgIGFudC5zdHlsZS53aWR0aCA9IHc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYW50LnN0eWxlLmxlZnQgPSB4K3c7CisgICAgICAgICAgICAgICAgYW50LnN0eWxlLndpZHRoID0gLTEqdzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGggPj0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhbnQuc3R5bGUudG9wID0geTsKKyAgICAgICAgICAgICAgICBhbnQuc3R5bGUuaGVpZ2h0ID0gaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhbnQuc3R5bGUudG9wID0geStoOworICAgICAgICAgICAgICAgIGFudC5zdHlsZS5oZWlnaHQgPSAtMSpoCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNob3dTdGF0dXMoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlCisgICAgfQorfQorCitmdW5jdGlvbiBtb3ZlQ29udGVudChlKSAKK3sKKyAgICBpZiAoZHJhZ2FwcHJvdmVkKQorICAgIHsKKworICAgICAgICB2YXIgZHggPW5zNj8gb2FfeCArIGUuY2xpZW50WC14OiBvYV94ICsgZXZlbnQuY2xpZW50WC14CisgICAgICAgIHZhciBkeSA9bnM2PyBvYV95ICsgZS5jbGllbnRZLXkgOiBvYV95ICsgZXZlbnQuY2xpZW50WS15CisKKworICAgICAgICAvKmlmIChzdGF0dXMgIT1udWxsKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMuaW5uZXJIVE1MICA9ICJ4OiIreCsiIHk6Iit5KyIgZHg6IitkeCsiIGR5OiIrZHk7CisgICAgICAgIH0qLworCisgICAgICAgIGFudC5zdHlsZS5sZWZ0ID0gZHg7CisgICAgICAgIGFudC5zdHlsZS50b3AgPSBkeTsKKworICAgICAgICBzaG93U3RhdHVzKCk7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLy9Db2RlIGFkZCBmb3IgY29uc3RyYWludHMgYnkgRnLpZOlyaWMgS2xlZSA8ZmtsZWVAaXN1aXNzZS5jb20+CitmdW5jdGlvbiBtb3ZlSGFuZGxlKGUpIAoreworICAgIGlmIChkcmFnYXBwcm92ZWQpCisgICAgeworICAgICAgICB2YXIgdyA9IG5zNj8gZS5jbGllbnRYIC0geCA6IGV2ZW50LmNsaWVudFggLSB4OworICAgICAgICB2YXIgaCA9IG5zNj8gZS5jbGllbnRZIC0geSA6IGV2ZW50LmNsaWVudFkgLSB5OworICAgICAgICAKKwkJdmFyIGNvbnN0cmFpbmVkID0gTU1fZmluZE9iaignY29uc3RQcm9wJywgd2luZG93LnRvcC5kb2N1bWVudCk7CisgICAgICAgIHZhciBvcmdpbmFsX2hlaWdodCA9IGRvY3VtZW50LnRoZUltYWdlLmhlaWdodCA7CisgICAgICAgIHZhciBvcmdpbmFsX3dpZHRoID0gZG9jdW1lbnQudGhlSW1hZ2Uud2lkdGggOworICAgICAgICByYXBwID0gb3JnaW5hbF93aWR0aC9vcmdpbmFsX2hlaWdodCA7CisgICAgICAgIHJhcHBfaW52ID0gb3JnaW5hbF9oZWlnaHQgLyBvcmdpbmFsX3dpZHRoIDsKKworICAgICAgICBzd2l0Y2gocmVzaXplSGFuZGxlKSAKKyAgICAgICAgeworCisgICAgICAgICAgICBjYXNlICJzLXJlc2l6ZSI6CisgICAgICAgICAgICAgICAgaWYgKG9hX2ggKyBoID49IDApIAorCQkJCXsKKyAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLmhlaWdodCA9IG9hX2ggKyBoOworCQkJCQlpZihjb25zdHJhaW5lZC5jaGVja2VkKSAKKwkJCQkJeworCQkJCQkJYW50LnN0eWxlLndpZHRoID0gcmFwcCAqIChvYV9oICsgaCkgOworICAgICAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLmxlZnQgPSBvYV94IC0gcmFwcCAqIGgvMjsKKwkJCQkJfQorCisJCQkJfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiZS1yZXNpemUiOgorICAgICAgICAgICAgICAgIGlmKG9hX3cgKyB3ID49IDApCisJCQkJeworICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUud2lkdGggPSBvYV93ICsgdzsKKwkJCQkJaWYoY29uc3RyYWluZWQuY2hlY2tlZCkgCisJCQkJCXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFudC5zdHlsZS5oZWlnaHQgPSByYXBwX2ludiAqIChvYV93ICsgdykgOworICAgICAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLnRvcCA9IG9hX3kgLSByYXBwX2ludiAqIHcvMjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisJCQkJfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAibi1yZXNpemUiOgorICAgICAgICAgICAgICAgIGlmIChvYV9oIC0gaCA+PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLnRvcCA9IG9hX3kgKyBoOworICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUuaGVpZ2h0ID0gb2FfaCAtIGg7CisJCQkJCWlmKGNvbnN0cmFpbmVkLmNoZWNrZWQpIAorCQkJCQl7CisJCQkJCQlhbnQuc3R5bGUud2lkdGggPSByYXBwICogKG9hX2ggLSBoKSA7CisgICAgICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUubGVmdCA9IG9hX3ggKyByYXBwICogaC8yOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJ3LXJlc2l6ZSI6CisgICAgICAgICAgICAgICAgaWYob2FfdyAtIHcgPj0gMCkgCisJCQkJeworICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUubGVmdCA9IG9hX3ggKyB3OworICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUud2lkdGggPSBvYV93IC0gdzsKKwkJCQkJaWYoY29uc3RyYWluZWQuY2hlY2tlZCkgCisJCQkJCXsKKwkJCQkJCWFudC5zdHlsZS5oZWlnaHQgPSByYXBwX2ludiAqIChvYV93IC0gdykgOworCQkJCQkJYW50LnN0eWxlLnRvcCA9IG9hX3kgKyByYXBwX2ludiAqIHcvMjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfWJyZWFrOworICAgICAgICAgICAgY2FzZSAibnctcmVzaXplIjoKKyAgICAgICAgICAgICAgICBpZihvYV9oIC0gaCA+PSAwICYmIG9hX3cgLSB3ID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLmxlZnQgPSBvYV94ICsgdzsKKyAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLndpZHRoID0gb2FfdyAtIHc7CisgICAgICAgICAgICAgICAgICAgIGFudC5zdHlsZS50b3AgPSBvYV95ICsgaDsKKyAgICAgICAgICAgICAgICAgICAgaWYoY29uc3RyYWluZWQuY2hlY2tlZCkgCisgICAgICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUuaGVpZ2h0ID0gcmFwcF9pbnYgKiAob2FfdyAtIHcpIDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLmhlaWdodCA9IG9hX2ggLSBoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAibmUtcmVzaXplIjoKKyAgICAgICAgICAgICAgICBpZiAob2FfaCAtIGggPj0gMCAmJiBvYV93ICsgdyA+PSAwKXsKKyAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLnRvcCA9IG9hX3kgKyBoOworCQkJCQlhbnQuc3R5bGUud2lkdGggPSBvYV93ICsgdzsKKwkJCQkJaWYoY29uc3RyYWluZWQuY2hlY2tlZCkgCisgICAgICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUuaGVpZ2h0ID0gcmFwcF9pbnYgKiAob2FfdyArIHcpIDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLmhlaWdodCA9IG9hX2ggLSBoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgInNlLXJlc2l6ZSI6CisgICAgICAgICAgICAgICAgaWYgKG9hX2ggKyBoID49IDAgJiYgb2FfdyArIHcgPj0gMCkgCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUud2lkdGggPSBvYV93ICsgdzsKKyAgICAgICAgICAgICAgICAgICAgaWYoY29uc3RyYWluZWQuY2hlY2tlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFudC5zdHlsZS5oZWlnaHQgPSByYXBwX2ludiAqIChvYV93ICsgdykgOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUuaGVpZ2h0ID0gb2FfaCArIGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAic3ctcmVzaXplIjoKKyAgICAgICAgICAgICAgICBpZiAob2FfaCArIGggPj0gMCAmJiBvYV93IC0gdyA+PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLmxlZnQgPSBvYV94ICsgdzsKKyAgICAgICAgICAgICAgICAgICAgYW50LnN0eWxlLndpZHRoID0gb2FfdyAtIHc7CisJCQkJCWlmKGNvbnN0cmFpbmVkLmNoZWNrZWQpCisgICAgICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUuaGVpZ2h0ID0gcmFwcF9pbnYgKiAob2FfdyAtIHcpIDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICBhbnQuc3R5bGUuaGVpZ2h0ID0gb2FfaCArIGg7CisJCQkJfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzaG93U3RhdHVzKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgfQorfQorCitmdW5jdGlvbiBkcmFncyhlKQoreworICAgIGlmICghaWUmJiFuczYpCisgICAgICAgIHJldHVybgorICAgIAorICAgIHZhciBmaXJlZG9iaj1uczY/IGUudGFyZ2V0IDogZXZlbnQuc3JjRWxlbWVudAorICAgIHZhciB0b3BlbGVtZW50PW5zNj8gIkhUTUwiIDogIkJPRFkiCisKKyAgICB3aGlsZSAoZmlyZWRvYmoudGFnTmFtZSE9dG9wZWxlbWVudCYmCisgICAgICAgICAgICAhKGZpcmVkb2JqLmNsYXNzTmFtZT09ImNyb3AiIAorICAgICAgICAgICAgICAgIHx8IGZpcmVkb2JqLmNsYXNzTmFtZT09ImhhbmRsZUJveCIgCisgICAgICAgICAgICAgICAgfHwgZmlyZWRvYmouY2xhc3NOYW1lPT0ic2VsZWN0aW9uIiB8fCBmaXJlZG9iai5jbGFzc05hbWU9PSJzZWxlY3Rpb25XaGl0ZSIpKQorICAgIHsKKyAgICAgICAgZmlyZWRvYmo9bnM2PyBmaXJlZG9iai5wYXJlbnROb2RlIDogZmlyZWRvYmoucGFyZW50RWxlbWVudAorICAgIH0KKworICAgIGlmKGZpcmVkb2JqLmNsYXNzTmFtZT09ImhhbmRsZUJveCIpIHsKKyAgICAgICAgCisgICAgICAgIGlmKGNvbnRlbnQgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYoY29udGVudC53aWR0aCAhPSBudWxsICYmIGNvbnRlbnQuaGVpZ2h0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBjb250ZW50LndpZHRoID0gMDsKKyAgICAgICAgICAgICAgICBjb250ZW50LmhlaWdodCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvL2FsZXJ0KGNvbnRlbnQud2lkdGgrIjoiK2NvbnRlbnQuaGVpZ2h0KTsKKyAgICAgICAgfQorICAgICAgICByZXNpemVIYW5kbGUgPSBmaXJlZG9iai5pZDsKKyAgICAgICAgCisgICAgICAgIC8qaWYoc3RhdHVzIT1udWxsKSB7CisgICAgICAgICAgICBzdGF0dXMuaW5uZXJIVE1MICA9ICIgb2JqOiIrZmlyZWRvYmouaWQ7CisgICAgICAgIH0qLworCisgICAgICAgIHg9bnM2PyBlLmNsaWVudFg6IGV2ZW50LmNsaWVudFgKKyAgICAgICAgeT1uczY/IGUuY2xpZW50WTogZXZlbnQuY2xpZW50WQorCisgICAgICAgIG9hX3cgPSBwYXJzZUludChhbnQuc3R5bGUud2lkdGgpOworICAgICAgICBvYV9oID0gcGFyc2VJbnQoYW50LnN0eWxlLmhlaWdodCk7CisgICAgICAgIG9hX3ggPSBwYXJzZUludChhbnQuc3R5bGUubGVmdCk7CisgICAgICAgIG9hX3kgPSBwYXJzZUludChhbnQuc3R5bGUudG9wKTsKKworICAgICAgICBkcmFnYXBwcm92ZWQ9dHJ1ZQorICAgICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZT1tb3ZlSGFuZGxlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGVsc2UKKyAgICBpZigoZmlyZWRvYmouY2xhc3NOYW1lID09ICJzZWxlY3Rpb24iIHx8IGZpcmVkb2JqLmNsYXNzTmFtZT09InNlbGVjdGlvbldoaXRlIikmJiBtb2RlID09ICJjcm9wIikgeworICAgICAgICAKKyAgICAgICAgeD1uczY/IGUuY2xpZW50WDogZXZlbnQuY2xpZW50WAorICAgICAgICB5PW5zNj8gZS5jbGllbnRZOiBldmVudC5jbGllbnRZCisgICAgICAgIAorICAgICAgICBvYV94ID0gcGFyc2VJbnQoYW50LnN0eWxlLmxlZnQpOworICAgICAgICBvYV95ID0gcGFyc2VJbnQoYW50LnN0eWxlLnRvcCk7CisKKyAgICAgICAgZHJhZ2FwcHJvdmVkPXRydWUKKyAgICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmU9bW92ZUNvbnRlbnQ7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZWxzZQorICAgIGlmIChmaXJlZG9iai5jbGFzc05hbWU9PSJjcm9wIiAmJiBtb2RlID09ICJjcm9wIikKKyAgICB7CisgICAgICAgIGlmKGNvbnRlbnQgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYoY29udGVudC53aWR0aCAhPSBudWxsICYmIGNvbnRlbnQuaGVpZ2h0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBjb250ZW50LndpZHRoID0gMDsKKyAgICAgICAgICAgICAgICBjb250ZW50LmhlaWdodCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvL2FsZXJ0KGNvbnRlbnQud2lkdGgrIjoiK2NvbnRlbnQuaGVpZ2h0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdGF0dXMgPT0gbnVsbCkKKyAgICAgICAgICAgIHN0YXR1cyA9IE1NX2ZpbmRPYmooInN0YXR1cyIpOworCisgICAgICAgIGlmIChhbnQgPT0gbnVsbCkKKyAgICAgICAgICAgIGFudCA9IE1NX2ZpbmRPYmooImFudCIpOworCisgICAgICAgIGlmIChjYW52YXMgPT0gbnVsbCkKKyAgICAgICAgICAgIGNhbnZhcyA9IE1NX2ZpbmRPYmooImltZ0NhbnZhcyIpOworICAgICAgICBpZihjb250ZW50ID09IG51bGwpIHsKKyAgICAgICAgICAgIGNvbnRlbnQgPSBNTV9maW5kT2JqKCJjcm9wQ29udGVudCIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBpY193aWR0aCA9PSBudWxsIHx8IHBpY19oZWlnaHQgPT0gbnVsbCkKKyAgICAgICAgeworICAgICAgICAgICAgaW1hZ2UgPSBNTV9maW5kT2JqKCJ0aGVJbWFnZSIpOworICAgICAgICAgICAgcGljX3dpZHRoID0gaW1hZ2Uud2lkdGg7CisgICAgICAgICAgICBwaWNfaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0OworICAgICAgICB9CisKKyAgICAgICAgYW50LnN0eWxlLnZpc2liaWxpdHkgPSAidmlzaWJsZSI7CisKKyAgICAgICAgb2JqID0gZmlyZWRvYmo7CisgICAgICAgIGRyYWdhcHByb3ZlZD10cnVlCisgICAgICAgIHo9ZmlyZWRvYmoKKyAgICAgICAgdGVtcDE9cGFyc2VJbnQoei5zdHlsZS5sZWZ0KzApCisgICAgICAgIHRlbXAyPXBhcnNlSW50KHouc3R5bGUudG9wKzApCisgICAgICAgIHg9bnM2PyBlLmNsaWVudFg6IGV2ZW50LmNsaWVudFgKKyAgICAgICAgeT1uczY/IGUuY2xpZW50WTogZXZlbnQuY2xpZW50WQorICAgICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZT1tb3ZlCisgICAgICAgIHJldHVybiBmYWxzZQorICAgIH0KKyAgICAgICAgZWxzZSBpZihmaXJlZG9iai5jbGFzc05hbWU9PSJjcm9wIiAmJiBtb2RlID09ICJtZWFzdXJlIikgeworCisgICAgICAgICAgICBpZiAoYW50ID09IG51bGwpCisgICAgICAgICAgICAgICAgYW50ID0gTU1fZmluZE9iaigiYW50Iik7CisKKyAgICAgICAgICAgIGlmIChjYW52YXMgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICBjYW52YXMgPSBNTV9maW5kT2JqKCJpbWdDYW52YXMiKTsKKworICAgICAgICAgICAgeD1uczY/IGUuY2xpZW50WDogZXZlbnQuY2xpZW50WAorICAgICAgICAgICAgeT1uczY/IGUuY2xpZW50WTogZXZlbnQuY2xpZW50WQorCisgICAgICAgICAgICAgICAgLy9qZ19kb2MuZHJhdworICAgICAgICAgICAgZHJhZ2FwcHJvdmVkPXRydWUKKyAgICAgICAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlPW1lYXN1cmUKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlCisgICAgICAgIH0KK30KKworZnVuY3Rpb24gbWVhc3VyZShlKSAKK3sKKyAgICBpZiAoZHJhZ2FwcHJvdmVkKQorICAgIHsKKyAgICAgICAgbXgyID0gbnM2PyBlLmNsaWVudFggOiBldmVudC5jbGllbnRYOworICAgICAgICBteTIgPSBuczY/IGUuY2xpZW50WSA6IGV2ZW50LmNsaWVudFk7CisgICAgICAgIAorICAgICAgICBqZ19kb2MuY2xlYXIoKTsKKyAgICAgICAgamdfZG9jLnNldFN0cm9rZShTdHJva2UuRE9UVEVEKTsgCisgICAgICAgIGpnX2RvYy5kcmF3TGluZSh4LHksbXgyLG15Mik7CisgICAgICAgIGpnX2RvYy5wYWludCgpOworICAgICAgICBzaG93U3RhdHVzKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHNldE1hcmtlcihueCxueSxudyxuaCkgCit7CisgICAgaWYgKGlzTmFOKG54KSkgbnggPSAwOworICAgIGlmIChpc05hTihueSkpIG55ID0gMDsKKyAgICBpZiAoaXNOYU4obncpKSBudyA9IDA7CisgICAgaWYgKGlzTmFOKG5oKSkgbmggPSAwOworICAKKyAgICBpZiAoYW50ID09IG51bGwpCisgICAgICBhbnQgPSBNTV9maW5kT2JqKCJhbnQiKTsKKworICAgIGlmIChjYW52YXMgPT0gbnVsbCkKKyAgICAgICAgY2FudmFzID0gTU1fZmluZE9iaigiaW1nQ2FudmFzIik7CisgICAgaWYoY29udGVudCA9PSBudWxsKSB7CisgICAgICAgIGNvbnRlbnQgPSBNTV9maW5kT2JqKCJjcm9wQ29udGVudCIpOworICAgIH0KKworICAgIGlmIChwaWNfd2lkdGggPT0gbnVsbCB8fCBwaWNfaGVpZ2h0ID09IG51bGwpCisgICAgeworICAgICAgICBpbWFnZSA9IE1NX2ZpbmRPYmooInRoZUltYWdlIik7CisgICAgICAgIHBpY193aWR0aCA9IGltYWdlLndpZHRoOworICAgICAgICBwaWNfaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0OworICAgIH0KKworICAgIGFudC5zdHlsZS52aXNpYmlsaXR5ID0gInZpc2libGUiOworCisgICAgbnggPSBwaWNfeCArIG54OworICAgIG55ID0gcGljX3kgKyBueTsKKworICAgIGlmIChudyA+PSAwKQorICAgIHsKKyAgICAgICAgYW50LnN0eWxlLmxlZnQgPSBueDsKKyAgICAgICAgYW50LnN0eWxlLndpZHRoID0gbnc7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFudC5zdHlsZS5sZWZ0ID0gbngrbnc7CisgICAgICAgIGFudC5zdHlsZS53aWR0aCA9IC0xKm53OworICAgIH0KKworICAgIGlmIChuaCA+PSAwKQorICAgIHsKKyAgICAgICAgYW50LnN0eWxlLnRvcCA9IG55OworICAgICAgICBhbnQuc3R5bGUuaGVpZ2h0ID0gbmg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFudC5zdHlsZS50b3AgPSBueStuaDsKKyAgICAgICAgYW50LnN0eWxlLmhlaWdodCA9IC0xKm5oCisgICAgfQorCisgICAgCit9CisKK2Z1bmN0aW9uIG1heCh4LHkpIAoreworICAgIGlmKHkgPiB4KQorICAgICAgICByZXR1cm4geDsKKyAgICBlbHNlIAorICAgICAgICByZXR1cm4geTsKK30KKworZnVuY3Rpb24gZHJhd0JvdW5kSGFuZGxlKCkgCit7CisgICAgaWYoYW50ID09IG51bGwgfHwgYW50LnN0eWxlID09IG51bGwpIAorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YXIgYWggPSBwYXJzZUludChhbnQuc3R5bGUuaGVpZ2h0KTsKKyAgICB2YXIgYXcgPSBwYXJzZUludChhbnQuc3R5bGUud2lkdGgpOworICAgIHZhciBheCA9IHBhcnNlSW50KGFudC5zdHlsZS5sZWZ0KTsKKyAgICB2YXIgYXkgPSBwYXJzZUludChhbnQuc3R5bGUudG9wKTsKKworICAgIGpnX2RvYy5kcmF3SGFuZGxlKGF4LTE1LGF5LTE1LDMwLDMwLCJudy1yZXNpemUiKTsgLy91cHBlciBsZWZ0CisgICAgamdfZG9jLmRyYXdIYW5kbGUoYXgtMTUsYXkrYWgtMTUsMzAsMzAsInN3LXJlc2l6ZSIpOyAvL2xvd2VyIGxlZnQKKyAgICBqZ19kb2MuZHJhd0hhbmRsZShheCthdy0xNSxheS0xNSwzMCwzMCwibmUtcmVzaXplIik7IC8vdXBwZXIgcmlnaHQKKyAgICBqZ19kb2MuZHJhd0hhbmRsZShheCthdy0xNSxheSthaC0xNSwzMCwzMCwic2UtcmVzaXplIik7IC8vbG93ZXIgcmlnaHQKKworICAgIGpnX2RvYy5kcmF3SGFuZGxlKGF4K21heCgxNSxhdy8xMCksYXktOCxhdy0yKm1heCgxNSxhdy8xMCksOCwibi1yZXNpemUiKTsgLy90b3AgbWlkZGxlCisgICAgamdfZG9jLmRyYXdIYW5kbGUoYXgrbWF4KDE1LGF3LzEwKSxheSthaCxhdy0yKm1heCgxNSxhdy8xMCksOCwicy1yZXNpemUiKTsgLy9ib3R0b20gbWlkZGxlCisgICAgamdfZG9jLmRyYXdIYW5kbGUoYXgtOCwgYXkrbWF4KDE1LGFoLzEwKSw4LGFoLTIqbWF4KDE1LGFoLzEwKSwidy1yZXNpemUiKTsgLy9sZWZ0IG1pZGRsZQorICAgIGpnX2RvYy5kcmF3SGFuZGxlKGF4K2F3LCBheSttYXgoMTUsYWgvMTApLDgsYWgtMiptYXgoMTUsYWgvMTApLCJlLXJlc2l6ZSIpOyAvL3JpZ2h0IG1pZGRsZQorCisKKworICAgIGpnX2RvYy5kcmF3SGFuZGxlQm94KGF4LTQsYXktNCw4LDgsIm53LXJlc2l6ZSIpOyAvL3VwcGVyIGxlZnQKKyAgICBqZ19kb2MuZHJhd0hhbmRsZUJveChheC00LGF5K2FoLTQsOCw4LCJzdy1yZXNpemUiKTsgLy9sb3dlciBsZWZ0CisgICAgamdfZG9jLmRyYXdIYW5kbGVCb3goYXgrYXctNCxheS00LDgsOCwibmUtcmVzaXplIik7IC8vdXBwZXIgcmlnaHQKKyAgICBqZ19kb2MuZHJhd0hhbmRsZUJveChheCthdy00LGF5K2FoLTQsOCw4LCJzZS1yZXNpemUiKTsgLy9sb3dlciByaWdodAorCisgICAgamdfZG9jLmRyYXdIYW5kbGVCb3goYXgrYXcvMi00LGF5LTQsOCw4LCJuLXJlc2l6ZSIpOyAvL3RvcCBtaWRkbGUKKyAgICBqZ19kb2MuZHJhd0hhbmRsZUJveChheCthdy8yLTQsYXkrYWgtNCw4LDgsInMtcmVzaXplIik7IC8vYm90dG9tIG1pZGRsZQorICAgIGpnX2RvYy5kcmF3SGFuZGxlQm94KGF4LTQsIGF5K2FoLzItNCw4LDgsInctcmVzaXplIik7IC8vbGVmdCBtaWRkbGUKKyAgICBqZ19kb2MuZHJhd0hhbmRsZUJveChheCthdy00LCBheSthaC8yLTQsOCw4LCJlLXJlc2l6ZSIpOyAvL3JpZ2h0IG1pZGRsZQorCisgICAgLy9qZ19kb2MucGFpbnQoKTsKK30KKworZnVuY3Rpb24gc2hvd1N0YXR1cygpIAoreworICAgIGlmKGFudCA9PSBudWxsIHx8IGFudC5zdHlsZSA9PSBudWxsKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZihtb2RlID09ICJtZWFzdXJlIikgeworICAgICAgICAvL2FsZXJ0KHBpY194KTsKKyAgICAgICAgbXgxID0geCAtIHBpY194OworICAgICAgICBteTEgPSB5IC0gcGljX3k7CisKKyAgICAgICAgbXcgPSBteDIgLSB4OworICAgICAgICBtaCA9IG15MiAtIHk7CisKKyAgICAgICAgbWQgPSBwYXJzZUludChNYXRoLnNxcnQobXcqbXcgKyBtaCptaCkqMTAwKS8xMDA7CisKKyAgICAgICAgbWEgPSAoTWF0aC5hdGFuKC0xKm1oL213KS9NYXRoLlBJKSoxODA7CisgICAgICAgIGlmKG13IDwgMCAmJiBtaCA8IDApCisgICAgICAgICAgICBtYSA9IG1hKzE4MDsKKworICAgICAgICBpZiAobXcgPDAgJiYgbWggPjApCisgICAgICAgICAgICBtYSA9IG1hIC0gMTgwOworCisgICAgICAgIG1hID0gcGFyc2VJbnQobWEqMTAwKS8xMDA7CisKKyAgICAgICAgaWYgKG1fc3ggIT0gbnVsbCAmJiAhaXNOYU4obXgxKSkKKyAgICAgICAgICAgIG1fc3gudmFsdWUgPSBteDErInB4IjsKKyAgICAgICAgaWYgKG1fc3kgIT0gbnVsbCAmJiAhaXNOYU4obXkxKSkKKyAgICAgICAgICAgIG1fc3kudmFsdWUgPSBteTErInB4IjsKKyAgICAgICAgaWYobV93ICE9IG51bGwgJiYgIWlzTmFOKG13KSkKKyAgICAgICAgICAgIG1fdy52YWx1ZSA9IG13ICsgInB4IjsKKyAgICAgICAgaWYobV9oICE9IG51bGwgJiYgIWlzTmFOKG1oKSkKKyAgICAgICAgICAgIG1faC52YWx1ZSA9IG1oICsgInB4IjsKKworICAgICAgICBpZihtX2QgIT0gbnVsbCAmJiAhaXNOYU4obWQpKQorICAgICAgICAgICAgbV9kLnZhbHVlID0gbWQgKyAicHgiOworICAgICAgICBpZihtX2EgIT0gbnVsbCAmJiAhaXNOYU4obWEpKQorICAgICAgICAgICAgbV9hLnZhbHVlID0gbWEgKyAiIjsKKworICAgICAgICBpZihyX3JhICE9IG51bGwgJiYhaXNOYU4obWEpKQorICAgICAgICAgICAgcl9yYS52YWx1ZSA9IG1hOyAgICAgICAgICAgIAorCisgICAgICAgIC8vYWxlcnQoIm14MToiK214MSsiIG15MSIrbXkxKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZhciBhaCA9IHBhcnNlSW50KGFudC5zdHlsZS5oZWlnaHQpOworICAgIHZhciBhdyA9IHBhcnNlSW50KGFudC5zdHlsZS53aWR0aCk7CisgICAgdmFyIGF4ID0gcGFyc2VJbnQoYW50LnN0eWxlLmxlZnQpOworICAgIHZhciBheSA9IHBhcnNlSW50KGFudC5zdHlsZS50b3ApOworCisgICAgdmFyIGN4ID0gYXgtcGljX3g8MD8wOmF4LXBpY194OworICAgIHZhciBjeSA9IGF5LXBpY195PDA/MDpheS1waWNfeTsKKyAgICBjeCA9IGN4PnBpY193aWR0aD9waWNfd2lkdGg6Y3g7CisgICAgY3kgPSBjeT5waWNfaGVpZ2h0P3BpY19oZWlnaHQ6Y3k7CisgICAgCisgICAgdmFyIGN3ID0gYXgtcGljX3g+MD9hdzphdy0ocGljX3gtYXgpOworICAgIHZhciBjaCA9IGF5LXBpY195PjA/YWg6YWgtKHBpY195LWF5KTsKKworICAgIGNoID0gYXkrYWg8cGljX3krcGljX2hlaWdodD9jaDpjaC0oYXkrYWgtcGljX3ktcGljX2hlaWdodCk7CisgICAgY3cgPSBheCthdzxwaWNfeCtwaWNfd2lkdGg/Y3c6Y3ctKGF4K2F3LXBpY194LXBpY193aWR0aCk7CisKKyAgICBjaCA9IGNoPDA/MDpjaDsgY3cgPSBjdzwwPzA6Y3c7CisgICAgCisgICAgaWYgKGFudC5zdHlsZS52aXNpYmlsaXR5ID09ICJoaWRkZW4iKQorICAgIHsKKyAgICAgICAgY3ggPSAiIjsgY3kgPSAiIjsgY3c9IiI7IGNoPSIiOworICAgIH0KKworICAgIGlmKG1vZGUgPT0gJ2Nyb3AnKSB7CisgICAgICAgIGlmKHRfY3ggIT0gbnVsbCkKKyAgICAgICAgICAgIHRfY3gudmFsdWUgPSBjeDsKKyAgICAgICAgaWYgKHRfY3kgIT0gbnVsbCkgICAKKyAgICAgICAgICAgIHRfY3kudmFsdWUgPSBjeTsKKyAgICAgICAgaWYodF9jdyAhPSBudWxsKQorICAgICAgICAgICAgdF9jdy52YWx1ZSA9IGN3OworICAgICAgICBpZiAodF9jaCAhPSBudWxsKSAgIAorICAgICAgICAgICAgdF9jaC52YWx1ZSA9IGNoOworICAgIH0KKyAgICBlbHNlIGlmKG1vZGUgPT0gJ3NjYWxlJykgeworCisgICAgICAgIHZhciBzdyA9IGF3LCBzaCA9IGFoOworCisgICAgICAgIGlmIChzX3N3LnZhbHVlLmluZGV4T2YoJyUnKT4wICYmIHNfc2gudmFsdWUuaW5kZXhPZignJScpPjApCisgICAgICAgIHsgICAKKyAgICAgICAgICAgIHN3ID0gY3cvcGljX3dpZHRoOworICAgICAgICAgICAgc2ggPSBjaC9waWNfaGVpZ2h0OworICAgICAgICB9CisgICAgICAgIGlmIChzX3N3ICE9IG51bGwpCisgICAgICAgICAgICBzX3N3LnZhbHVlID0gc3c7CisgICAgICAgIGlmIChzX3NoICE9IG51bGwpCisgICAgICAgICAgICBzX3NoLnZhbHVlID0gc2g7CisgICAgfQorCit9CisKK2Z1bmN0aW9uIGRyYWdTdG9wcGVkKCkKK3sKKyAgICBkcmFnYXBwcm92ZWQ9ZmFsc2U7CisKKyAgICBpZihhbnQgPT0gbnVsbCB8fCBhbnQuc3R5bGUgPT0gbnVsbCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYobW9kZSA9PSAibWVhc3VyZSIpIHsKKyAgICAgICAgamdfZG9jLmRyYXdMaW5lKHgtNCx5LHgrNCx5KTsKKyAgICAgICAgamdfZG9jLmRyYXdMaW5lKHgseS00LHgseSs0KTsKKyAgICAgICAgamdfZG9jLmRyYXdMaW5lKG14Mi00LG15MixteDIrNCxteTIpOworICAgICAgICBqZ19kb2MuZHJhd0xpbmUobXgyLG15Mi00LG14MixteTIrNCk7CisKKyAgICAgICAgamdfZG9jLnBhaW50KCk7CisgICAgICAgIHNob3dTdGF0dXMoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgdmFyIGFoID0gcGFyc2VJbnQoYW50LnN0eWxlLmhlaWdodCk7CisgICAgICAgIHZhciBhdyA9IHBhcnNlSW50KGFudC5zdHlsZS53aWR0aCk7CisgICAgICAgIHZhciBheCA9IHBhcnNlSW50KGFudC5zdHlsZS5sZWZ0KTsKKyAgICAgICAgdmFyIGF5ID0gcGFyc2VJbnQoYW50LnN0eWxlLnRvcCk7CisgICAgICAgIGpnX2RvYy5jbGVhcigpOworICAgICAgICAKKyAgICAgICAgaWYoY29udGVudCAhPSBudWxsKSB7CisgICAgICAgICAgICBpZihjb250ZW50LndpZHRoICE9IG51bGwgJiYgY29udGVudC5oZWlnaHQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNvbnRlbnQud2lkdGggPSBhdy0xOworICAgICAgICAgICAgICAgIGNvbnRlbnQuaGVpZ2h0ID0gYWgtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vYWxlcnQoY29udGVudC53aWR0aCsiOiIrY29udGVudC5oZWlnaHQpOworICAgICAgICB9CisgICAgICAgIGlmKG1vZGUgPT0gImNyb3AiKSB7CisgICAgICAgICAgICAvL2FsZXJ0KHBpY195KTsKKyAgICAgICAgICAgIGpnX2RvYy5maWxsUmVjdFBhdHRlcm4ocGljX3gscGljX3kscGljX3dpZHRoLGF5LXBpY195LHBhdHRlcm4pOworICAgICAgICAgICAgCisgICAgICAgICAgICB2YXIgaDEgPSBhaDsKKyAgICAgICAgICAgIHZhciB5MSA9IGF5OworICAgICAgICAgICAgaWYgKGFoK2F5ID49IHBpY19oZWlnaHQrcGljX3kpCisgICAgICAgICAgICAgICAgaDEgPSBwaWNfaGVpZ2h0K3BpY195LWF5OworICAgICAgICAgICAgZWxzZSBpZiAoYXkgPD0gcGljX3kpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaDEgPSBheSthaC1waWNfeTsKKyAgICAgICAgICAgICAgICB5MSA9IHBpY195OworICAgICAgICAgICAgfQorICAgICAgICAgICAgamdfZG9jLmZpbGxSZWN0UGF0dGVybihwaWNfeCx5MSxheC1waWNfeCxoMSxwYXR0ZXJuKTsKKyAgICAgICAgICAgIGpnX2RvYy5maWxsUmVjdFBhdHRlcm4oYXgrYXcseTEscGljX3grcGljX3dpZHRoLWF4LWF3LGgxLHBhdHRlcm4pOworICAgICAgICAgICAgamdfZG9jLmZpbGxSZWN0UGF0dGVybihwaWNfeCxheSthaCxwaWNfd2lkdGgscGljX2hlaWdodCtwaWNfeS1heS1haCxwYXR0ZXJuKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKG1vZGUgPT0gInNjYWxlIikgeworICAgICAgICAgICAgLy9hbGVydCgiUmVzaXppbmc6IGl3OiIraW1hZ2Uud2lkdGgrIiBudzoiK2F3KTsKKyAgICAgICAgICAgIGRvY3VtZW50LnRoZUltYWdlLmhlaWdodCA9IGFoOworICAgICAgICAgICAgZG9jdW1lbnQudGhlSW1hZ2Uud2lkdGggPSBhdzsKKyAgICAgICAgICAgIGRvY3VtZW50LnRoZUltYWdlLnN0eWxlLmhlaWdodCA9IGFoKyIgcHgiOworICAgICAgICAgICAgZG9jdW1lbnQudGhlSW1hZ2Uuc3R5bGUud2lkdGggPSBhdysiIHB4IjsKKworICAgICAgICAgICAgUDdfU25hcCgndGhlSW1hZ2UnLCdhbnQnLDAsMCk7CisKKyAgICAgICAgICAgIC8vYWxlcnQoIkFmdGVyIFJlc2l6aW5nOiBpdzoiK2ltYWdlLndpZHRoKyIgbnc6Iithdyk7CisgICAgICAgIH0KKworICAgICAgICBkcmF3Qm91bmRIYW5kbGUoKTsKKyAgICAgICAgamdfZG9jLnBhaW50KCk7CisgICAgCisgICAgICAgIHNob3dTdGF0dXMoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2RvY3VtZW50Lm9ubW91c2Vkb3duPWRyYWdzCitkb2N1bWVudC5vbm1vdXNldXA9ZHJhZ1N0b3BwZWQ7CisKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2Fzc2V0cy9JbWFnZUVkaXRvci5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9hc3NldHMvSW1hZ2VFZGl0b3IuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZWZlNDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9hc3NldHMvSW1hZ2VFZGl0b3IuY3NzCkBAIC0wLDAgKzEsNzYgQEAKKy5pY29ucyB7CisgICAgZm9udDogMTFweCBUYWhvbWEsVmVyZGFuYSxzYW5zLXNlcmlmOworICAgIGNvbG9yOiAjNjY2Njk5OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgYm9yZGVyOiAxcHggc29saWQgI0VFRUVGRjsKKyAgICAtTW96LUJvcmRlci1SYWRpdXM6IDZweCA2cHggNnB4IDZweDsKK30KKworYm9keSwgdGQsIHAgeworICAgIGZvbnQ6IDExcHggVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjsKK30KKy5pY29uc092ZXIgeworICAgIGZvbnQ6IDExcHggVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjsKKyAgICBjb2xvcjogIzY2NjY5OTsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGJhY2tncm91bmQtY29sb3I6ICNGOUY5RkY7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzY2NjY5OTsKKyAgICAtTW96LUJvcmRlci1SYWRpdXM6IDZweCA2cHggNnB4IDZweDsKK30KKy50b3BCYXIgeworICAgIGZvbnQ6IDExcHggVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjsKKyAgICBjb2xvcjogIzY2NjY5OTsKK30KKy5pY29uc1NlbCB7CisgICAgZm9udDogMTFweCBUYWhvbWEsVmVyZGFuYSxzYW5zLXNlcmlmOworICAgIGNvbG9yOiAjNjY2Njk5OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzY2NjY5OTsKKyAgICAtTW96LUJvcmRlci1SYWRpdXM6IDZweCA2cHggNnB4IDZweDsKK30KKy5pY29uVGV4dCB7CisgICAgZm9udDogMTFweCBUYWhvbWEsVmVyZGFuYSxzYW5zLXNlcmlmOworICAgIGNvbG9yOiAjNjY2Njk5OworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisubWVhc3VyZVN0YXRzeworICAgIHdpZHRoOiA1MHB4OworfQorCisjc2xpZGVyY2FzaW5nIHsKKyAgICAvKmJvcmRlcjoxcHggc29saWQgI0NDQ0NDQzsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiNGRkZGRkY7Ki8KKyAgICB3aWR0aDoxMDBweDsKKyAgICBoZWlnaHQ6NXB4OworICAgIHBvc2l0aW9uOnJlbGF0aXZlOworICAgIHotaW5kZXg6NDsKKyAgICBwYWRkaW5nOjEwcHg7Cit9CisKKworI3NsaWRlcnRyYWNrIHsKKyAgICBwb3NpdGlvbjpyZWxhdGl2ZTsKKyAgICBib3JkZXI6MXB4IHNvbGlkICNDQ0NDQ0M7CisgICAgYmFja2dyb3VuZC1jb2xvcjojRkZGRkNDOworICAgIHotaW5kZXg6NTsKKyAgICBoZWlnaHQ6NXB4OworfQorCisKKyNzbGlkZXJiYXIgeworICAgIHBvc2l0aW9uOmFic29sdXRlOworICAgIHotaW5kZXg6NjsKKyAgICBib3JkZXI6MXB4IHNvbGlkICNDQ0NDQ0M7CisgICAgYmFja2dyb3VuZC1jb2xvcjojREREREREOworICAgIHdpZHRoOjE1cHg7ICAgICAKKyAgICBwYWRkaW5nOjBweDsKKyAgICBoZWlnaHQ6MjBweDsgCisgICAgY3Vyc29yOiBwb2ludGVyOworICAgIHRvcDoycHg7Cit9CisKK3NlbGVjdCwgaW5wdXQsIGJ1dHRvbiB7IGZvbnQ6IDExcHggVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjsgfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvYXNzZXRzL2RpYWxvZy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2Fzc2V0cy9kaWFsb2cuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE0MWRkMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2Fzc2V0cy9kaWFsb2cuanMKQEAgLTAsMCArMSwxMTkgQEAKKy8vIERpYWxvZyB2My4wIC0gQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQgaW50ZXJhY3RpdmV0b29scy5jb20sIGluYy4KKy8vIFRoaXMgY29weXJpZ2h0IG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gUG9ydGlvbnMgKGMpIGR5bmFyY2guY29tLCAyMDAzLTIwMDQKKy8vCisvLyBBIGZyZWUgV1lTSVdZRyBlZGl0b3IgcmVwbGFjZW1lbnQgZm9yIDx0ZXh0YXJlYT4gZmllbGRzLgorLy8gRm9yIGZ1bGwgc291cmNlIGNvZGUgYW5kIGRvY3MsIHZpc2l0IGh0dHA6Ly93d3cuaW50ZXJhY3RpdmV0b29scy5jb20vCisvLworLy8gVmVyc2lvbiAzLjAgZGV2ZWxvcGVkIGJ5IE1paGFpIEJhem9uLgorLy8gICBodHRwOi8vZHluYXJjaC5jb20vbWlzaG9vCisvLworLy8gJElkOmRpYWxvZy5qcyA5MjkgMjAwOC0wMS0wOSAyMToxMDo1OVogcmF5ICQKKworLy8gVGhvdWdoICJEaWFsb2ciIGxvb2tzIGxpa2UgYW4gb2JqZWN0LCBpdCBpc24ndCByZWFsbHkgYW4gb2JqZWN0LiAgSW5zdGVhZAorLy8gaXQncyBqdXN0IG5hbWVzcGFjZSBmb3IgcHJvdGVjdGluZyBnbG9iYWwgc3ltYm9scy4KKworZnVuY3Rpb24gRGlhbG9nKHVybCwgYWN0aW9uLCBpbml0KSB7CisJaWYgKHR5cGVvZiBpbml0ID09ICJ1bmRlZmluZWQiKSB7CisJCWluaXQgPSB3aW5kb3c7CS8vIHBhc3MgdGhpcyB3aW5kb3cgb2JqZWN0IGJ5IGRlZmF1bHQKKwl9CisJaWYgKHR5cGVvZiB3aW5kb3cuc2hvd01vZGFsRGlhbG9nID09ICdmdW5jdGlvbicpCisJeworCQlEaWFsb2cuX3JldHVybiA9IGFjdGlvbjsKKwkJdmFyIHIgPSB3aW5kb3cuc2hvd01vZGFsRGlhbG9nKHVybCwgaW5pdCwgImRpYWxvZ2hlaWdodD0xMDtkaWFsb2d3aWR0aD0xMDtyZXNpemFibGU9eWVzIik7CisJfQorCWVsc2UKKwl7CisJCURpYWxvZy5fZ2Vja29PcGVuTW9kYWwodXJsLCBhY3Rpb24sIGluaXQpOworCX0KK30KKworRGlhbG9nLl9wYXJlbnRFdmVudCA9IGZ1bmN0aW9uKGV2KSB7CisJc2V0VGltZW91dCggZnVuY3Rpb24oKSB7IGlmIChEaWFsb2cuX21vZGFsICYmICFEaWFsb2cuX21vZGFsLmNsb3NlZCkgeyBEaWFsb2cuX21vZGFsLmZvY3VzKCkgfSB9LCA1MCk7CisJaWYgKERpYWxvZy5fbW9kYWwgJiYgIURpYWxvZy5fbW9kYWwuY2xvc2VkKSB7CisJCURpYWxvZy5fc3RvcEV2ZW50KGV2KTsKKwl9Cit9OworCisKKy8vIHNob3VsZCBiZSBhIGZ1bmN0aW9uLCB0aGUgcmV0dXJuIGhhbmRsZXIgb2YgdGhlIGN1cnJlbnRseSBvcGVuZWQgZGlhbG9nLgorRGlhbG9nLl9yZXR1cm4gPSBudWxsOworCisvLyBjb25zdGFudCwgdGhlIGN1cnJlbnRseSBvcGVuZWQgZGlhbG9nCitEaWFsb2cuX21vZGFsID0gbnVsbDsKKworLy8gdGhlIGRpYWxvZyB3aWxsIHJlYWQgaXQncyBhcmdzIGZyb20gdGhpcyB2YXJpYWJsZQorRGlhbG9nLl9hcmd1bWVudHMgPSBudWxsOworCitEaWFsb2cuX2dlY2tvT3Blbk1vZGFsID0gZnVuY3Rpb24odXJsLCBhY3Rpb24sIGluaXQpIHsKKwkvL3ZhciB1cmxMaW5rID0gImhhZGlhbG9nIit1cmwudG9TdHJpbmcoKTsKKwl2YXIgbXlVUkwgPSAiaGFkaWFsb2ciK3VybDsKKwl2YXIgcmVnT2JqID0gL1xXL2c7CisJbXlVUkwgPSBteVVSTC5yZXBsYWNlKHJlZ09iaiwnXycpOworCXZhciBkbGcgPSB3aW5kb3cub3Blbih1cmwsIG15VVJMLAorCQkJICAgICAgInRvb2xiYXI9bm8sbWVudWJhcj1ubyxwZXJzb25hbGJhcj1ubyx3aWR0aD0xMCxoZWlnaHQ9MTAsIiArCisJCQkgICAgICAic2Nyb2xsYmFycz1ubyxyZXNpemFibGU9eWVzLG1vZGFsPXllcyxkZXBlbmRhYmxlPXllcyIpOworCURpYWxvZy5fbW9kYWwgPSBkbGc7CisJRGlhbG9nLl9hcmd1bWVudHMgPSBpbml0OworCisJLy8gY2FwdHVyZSBzb21lIHdpbmRvdydzIGV2ZW50cworCWZ1bmN0aW9uIGNhcHdpbih3KSB7CisJCURpYWxvZy5fYWRkRXZlbnQodywgImNsaWNrIiwgRGlhbG9nLl9wYXJlbnRFdmVudCk7CisJCURpYWxvZy5fYWRkRXZlbnQodywgIm1vdXNlZG93biIsIERpYWxvZy5fcGFyZW50RXZlbnQpOworCQlEaWFsb2cuX2FkZEV2ZW50KHcsICJmb2N1cyIsIERpYWxvZy5fcGFyZW50RXZlbnQpOworCX0KKwkvLyByZWxlYXNlIHRoZSBjYXB0dXJlZCBldmVudHMKKwlmdW5jdGlvbiByZWx3aW4odykgeworCQlEaWFsb2cuX3JlbW92ZUV2ZW50KHcsICJjbGljayIsIERpYWxvZy5fcGFyZW50RXZlbnQpOworCQlEaWFsb2cuX3JlbW92ZUV2ZW50KHcsICJtb3VzZWRvd24iLCBEaWFsb2cuX3BhcmVudEV2ZW50KTsKKwkJRGlhbG9nLl9yZW1vdmVFdmVudCh3LCAiZm9jdXMiLCBEaWFsb2cuX3BhcmVudEV2ZW50KTsKKwl9CisJY2Fwd2luKHdpbmRvdyk7CisJLy8gY2FwdHVyZSBvdGhlciBmcmFtZXMKKwlmb3IgKHZhciBpID0gMDsgaSA8IHdpbmRvdy5mcmFtZXMubGVuZ3RoOyBjYXB3aW4od2luZG93LmZyYW1lc1tpKytdKSk7CisJLy8gbWFrZSB1cCBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBEaWFsb2cgZW5kcy4KKwlEaWFsb2cuX3JldHVybiA9IGZ1bmN0aW9uICh2YWwpIHsKKwkJaWYgKHZhbCAmJiBhY3Rpb24pIHsKKwkJCWFjdGlvbih2YWwpOworCQl9CisJCXJlbHdpbih3aW5kb3cpOworCQkvLyBjYXB0dXJlIG90aGVyIGZyYW1lcworCQlmb3IgKHZhciBpID0gMDsgaSA8IHdpbmRvdy5mcmFtZXMubGVuZ3RoOyByZWx3aW4od2luZG93LmZyYW1lc1tpKytdKSk7CisJCURpYWxvZy5fbW9kYWwgPSBudWxsOworCX07Cit9OworCisKKy8vIGV2ZW50IGhhbmRsaW5nCisKK0RpYWxvZy5fYWRkRXZlbnQgPSBmdW5jdGlvbihlbCwgZXZuYW1lLCBmdW5jKSB7CisJaWYgKERpYWxvZy5pc19pZSkgeworCQllbC5hdHRhY2hFdmVudCgib24iICsgZXZuYW1lLCBmdW5jKTsKKwl9IGVsc2UgeworCQllbC5hZGRFdmVudExpc3RlbmVyKGV2bmFtZSwgZnVuYywgdHJ1ZSk7CisJfQorfTsKKworCitEaWFsb2cuX3JlbW92ZUV2ZW50ID0gZnVuY3Rpb24oZWwsIGV2bmFtZSwgZnVuYykgeworCWlmIChEaWFsb2cuaXNfaWUpIHsKKwkJZWwuZGV0YWNoRXZlbnQoIm9uIiArIGV2bmFtZSwgZnVuYyk7CisJfSBlbHNlIHsKKwkJZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldm5hbWUsIGZ1bmMsIHRydWUpOworCX0KK307CisKKworRGlhbG9nLl9zdG9wRXZlbnQgPSBmdW5jdGlvbihldikgeworCWlmIChEaWFsb2cuaXNfaWUpIHsKKwkJZXYuY2FuY2VsQnViYmxlID0gdHJ1ZTsKKwkJZXYucmV0dXJuVmFsdWUgPSBmYWxzZTsKKwl9IGVsc2UgeworCQlldi5wcmV2ZW50RGVmYXVsdCgpOworCQlldi5zdG9wUHJvcGFnYXRpb24oKTsKKwl9Cit9OworCitEaWFsb2cuYWd0ID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpOworRGlhbG9nLmlzX2llCSAgID0gKChEaWFsb2cuYWd0LmluZGV4T2YoIm1zaWUiKSAhPSAtMSkgJiYgKERpYWxvZy5hZ3QuaW5kZXhPZigib3BlcmEiKSA9PSAtMSkpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2Fzc2V0cy9lZGl0b3IuY3NzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvYXNzZXRzL2VkaXRvci5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiNTUzZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2Fzc2V0cy9lZGl0b3IuY3NzCkBAIC0wLDAgKzEsMTk0IEBACisJCWJvZHkNCisJCXsNCisJCQltYXJnaW46IDA7IHBhZGRpbmc6IDA7DQorCQkJZm9udDogMTFweCBUYWhvbWEsVmVyZGFuYSxzYW5zLXNlcmlmOw0KKwkJfQ0KKwkJc2VsZWN0LCBpbnB1dCwgYnV0dG9uIHsgZm9udDogMTFweCBUYWhvbWEsVmVyZGFuYSxzYW5zLXNlcmlmOyB9DQorDQorCQkjaW5kaWNhdG9yDQorCQl7DQorCQkJd2lkdGg6IDI1cHg7DQorCQkJaGVpZ2h0OiAyMHB4Ow0KKwkJCWJhY2tncm91bmQtY29sb3I6ICNlZWY7CQkJDQorCQkJcGFkZGluZzogMTVweCAyMHB4Ow0KKwkJCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCisJCQlsZWZ0OiAwOyB0b3A6IDA7DQorCQl9DQorCQkqIGh0bWwgI2luZGljYXRvcg0KKwkJew0KKwkJCXBhZGRpbmc6IDE0cHggMjJweDsNCisJCX0NCisJCSN0b29scw0KKwkJew0KKwkJCXdpZHRoOiA2MDBweDsNCisJCQloZWlnaHQ6IDUwcHg7DQorCQkJYmFja2dyb3VuZC1jb2xvcjogI2VlZjsNCisJCQlwYWRkaW5nOiAwOw0KKwkJCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCisJCQlsZWZ0OiA2M3B4Ow0KKwkJCWJvcmRlci1sZWZ0OiAxcHggc29saWQgd2hpdGU7DQorCQkJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHdoaXRlOw0KKwkJfQ0KKwkJI3Rvb2xiYXINCisJCXsNCisJCQl3aWR0aDogNTNweDsNCisJCQloZWlnaHQ6IDQzNXB4Ow0KKwkJCWJhY2tncm91bmQtY29sb3I6ICNlZWY7DQorCQkJZmxvYXQ6IGxlZnQ7DQorCQkJdGV4dC1hbGlnbjogY2VudGVyOw0KKwkJCXBhZGRpbmc6IDVweDsNCisJCQlwb3NpdGlvbjogYWJzb2x1dGU7DQorCQkJdG9wOiA1MHB4Ow0KKwkJCWJvcmRlci10b3A6IDFweCBzb2xpZCB3aGl0ZTsNCisJCQlib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB3aGl0ZTsNCisJCX0NCisJCQ0KKwkJI2NvbnRlbnRzDQorCQl7DQorCQkJd2lkdGg6IDYwMHB4Ow0KKwkJCWhlaWdodDogNDQ1cHg7DQorCQkJcG9zaXRpb246IGFic29sdXRlOw0KKwkJCWxlZnQ6IDY0cHg7IHRvcDogNTFweDsNCisJCX0NCisJCQ0KKwkJI2VkaXRvcg0KKwkJew0KKwkJCXdpZHRoOiA2MDBweDsNCisJCQloZWlnaHQ6IDQ0NXB4Ow0KKwkJfQ0KKw0KKwkJI3Rvb2xiYXIgYSANCisJCXsNCisJCQlwYWRkaW5nOiA1cHg7DQorCQkJd2lkdGg6IDQwcHg7DQorCQkJZGlzcGxheTogYmxvY2s7DQorCQkJYm9yZGVyOiAxcHggc29saWQgI2VlZjsNCisJCQl0ZXh0LWFsaWduOiBjZW50ZXI7DQorCQkJdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KKwkJCWNvbG9yOiAjNjY5Ow0KKwkJCW1hcmdpbjogNXB4IDA7DQorCQl9DQorCQkjdG9vbGJhciBhOmhvdmVyDQorCQl7DQorCQkJYmFja2dyb3VuZC1jb2xvcjogI0Y5RjlGRjsNCisJCQlib3JkZXItY29sb3I6ICM2Njk7DQorCQl9DQorCQkNCisJCSN0b29sYmFyIGEuaWNvbkFjdGl2ZQ0KKwkJew0KKwkJCWJvcmRlci1jb2xvcjogIzY2OTsNCisJCX0NCisNCisJCSN0b29sYmFyIGEgc3Bhbg0KKwkJew0KKwkJCWRpc3BsYXk6IGJsb2NrOw0KKwkJCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCisJCQkNCisJCX0NCisJCSN0b29sYmFyIGEgaW1nDQorCQl7DQorCQkJYm9yZGVyOiAwIG5vbmU7DQorCQl9DQorCQkNCisJCSN0b29scyAudGV4dElucHV0DQorCQl7DQorCQkJd2lkdGg6IDNlbTsNCisJCQl2ZXJ0aWNhbC1hbGlnbjogMHB4Ow0KKw0KKwkJfQ0KKwkJKiBodG1sICN0b29scyAudGV4dElucHV0DQorCQl7DQorCQkJdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCisJCX0NCisJCSN0b29scyAubWVhc3VyZVN0YXRzDQorCQl7DQorCQkJd2lkdGg6IDQuNWVtOw0KKwkJCWJvcmRlcjogMCBub25lOw0KKwkJCWJhY2tncm91bmQtY29sb3I6ICNlZWY7DQorCQkJdmVydGljYWwtYWxpZ246IDBweDsNCisJCX0NCisJCSogaHRtbCAjdG9vbHMgLm1lYXN1cmVTdGF0cw0KKwkJew0KKwkJCXZlcnRpY2FsLWFsaWduOiBtaWRkbGU7DQorCQl9DQorCQkjdG9vbHMgbGFiZWwNCisJCXsNCisJCQltYXJnaW46IDAgMnB4IDAgNXB4Ow0KKwkJfQ0KKwkJI3Rvb2xzIGlucHV0DQorCQl7DQorCQkJdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCisJCX0NCisJCSN0b29scyAjdG9vbF9pbnB1dHMNCisJCXsNCisJCQlwYWRkaW5nLXRvcDogMTBweDsNCisJCQlmbG9hdDogbGVmdDsJCQkNCisJCX0NCisJCSN0b29scyAuZGl2DQorCQl7DQorCQkJdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCisJCQltYXJnaW46IDAgNXB4Ow0KKwkJfQ0KKwkJI3Rvb2xzIGltZw0KKwkJew0KKwkJCWJvcmRlcjogMCBub25lOw0KKwkJfQ0KKwkJI3Rvb2xzIGEuYnV0dG9ucw0KKwkJew0KKwkJCW1hcmdpbi10b3A6IDEwcHg7DQorCQkJYm9yZGVyOiAxcHggc29saWQgI2VlZjsNCisJCQlkaXNwbGF5OiBibG9jazsNCisJCQlmbG9hdDogbGVmdDsNCisJCX0NCisJCSN0b29scyBhLmJ1dHRvbnM6aG92ZXINCisJCXsNCisJCQliYWNrZ3JvdW5kLWNvbG9yOiAjRjlGOUZGOw0KKwkJCWJvcmRlci1jb2xvcjogIzY2OTsNCisJCX0NCisJCSNzbGlkZXJjYXNpbmcgew0KKyAgICAvKmJvcmRlcjoxcHggc29saWQgI0NDQ0NDQzsNCisgICAgYmFja2dyb3VuZC1jb2xvcjojRkZGRkZGOyovDQorICAgIHdpZHRoOjEwMHB4Ow0KKyAgICBoZWlnaHQ6NXB4Ow0KKyAgICBwb3NpdGlvbjpyZWxhdGl2ZTsNCisgICAgei1pbmRleDo0Ow0KKyAgICBwYWRkaW5nOjEwcHg7DQorCSB0b3A6IDZweDsNCisJIG1hcmdpbjogMCAtNXB4IDAgLTEwcHg7DQorDQorCQ0KK30NCisNCisNCisjc2xpZGVydHJhY2sgew0KKyAgICBwb3NpdGlvbjpyZWxhdGl2ZTsNCisgICAgYm9yZGVyOjFweCBzb2xpZCAjQ0NDQ0NDOw0KKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiNGRkZGQ0M7DQorICAgIHotaW5kZXg6NTsNCisgICAgaGVpZ2h0OjVweDsNCit9DQorDQorDQorI3NsaWRlcmJhciB7DQorICAgIHBvc2l0aW9uOmFic29sdXRlOw0KKyAgICB6LWluZGV4OjY7DQorICAgIGJvcmRlcjoxcHggc29saWQgI0NDQ0NDQzsNCisgICAgYmFja2dyb3VuZC1jb2xvcjojREREREREOw0KKyAgICB3aWR0aDoxNXB4OyAgICAgDQorICAgIHBhZGRpbmc6MHB4Ow0KKyAgICBoZWlnaHQ6MjBweDsgDQorICAgIGN1cnNvcjogcG9pbnRlcjsNCisgICAgdG9wOjJweDsNCit9DQorDQorKiBodG1sICNzbGlkZXJjYXNpbmcNCit7DQorCXRvcDowOw0KK30NCisNCisNCisjYm90dG9tDQorew0KKwlwb3NpdGlvbjogcmVsYXRpdmU7DQorCXRvcDogNDkwcHg7DQorfQ0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2Fzc2V0cy9lZGl0b3IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9hc3NldHMvZWRpdG9yLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YzhlOGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9hc3NldHMvZWRpdG9yLmpzCkBAIC0wLDAgKzEsMTcyIEBACisvKioKKyAqIEZ1bmN0aW9ucyBmb3IgdGhlIEltYWdlRWRpdG9yIGludGVyZmFjZSwgdXNlZCBieSBlZGl0b3IucGhwIG9ubHkJCisgKiBAYXV0aG9yICRBdXRob3I6cmF5ICQKKyAqIEB2ZXJzaW9uICRJZDplZGl0b3IuanMgNjc3IDIwMDctMDEtMTkgMjI6MjQ6MzZaIHJheSAkCisgKiBAcGFja2FnZSBJbWFnZU1hbmFnZXIKKyAqLworCisJdmFyIGN1cnJlbnRfYWN0aW9uID0gbnVsbDsKKwl2YXIgYWN0aW9ucyA9IFsnY3JvcCcsICdzY2FsZScsICdyb3RhdGUnLCAnbWVhc3VyZScsICdzYXZlJ107CisJdmFyIG9yZ2luYWxfd2lkdGggPSBudWxsLCBvcmdpbmFsX2hlaWdodD1udWxsOworCWZ1bmN0aW9uIHRvZ2dsZShhY3Rpb24pIAorCXsKKwkJaWYoY3VycmVudF9hY3Rpb24gIT0gYWN0aW9uKQorCQl7CisKKwkJCWZvciAodmFyIGkgaW4gYWN0aW9ucykKKwkJCXsKKwkJCQlpZihhY3Rpb25zW2ldICE9IGFjdGlvbikKKwkJCQl7CisJCQkJCXZhciB0b29scyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sc18nK2FjdGlvbnNbaV0pOworCQkJCQl0b29scy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworCQkJCQl2YXIgaWNvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpY29uXycrYWN0aW9uc1tpXSk7CisJCQkJCWljb24uY2xhc3NOYW1lID0gJyc7CisJCQkJfQorCQkJfQorCisJCQljdXJyZW50X2FjdGlvbiA9IGFjdGlvbjsKKwkJCQorCQkJdmFyIHRvb2xzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xzXycrYWN0aW9uKTsKKwkJCXRvb2xzLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOworCQkJdmFyIGljb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWNvbl8nK2FjdGlvbik7CisJCQlpY29uLmNsYXNzTmFtZSA9ICdpY29uQWN0aXZlJzsKKworCQkJdmFyIGluZGljYXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbmRpY2F0b3JfaW1hZ2UnKTsKKwkJCWluZGljYXRvci5zcmMgPSAnaW1nLycrYWN0aW9uKycuZ2lmJzsKKworCQkJZWRpdG9yLnNldE1vZGUoY3VycmVudF9hY3Rpb24pOworCisJCQkvL2NvbnN0cmFpbnRzIG9uIHRoZSBzY2FsZSwKKwkJCS8vY29kZSBieSBGculk6XJpYyBLbGVlIDxma2xlZUBpc3Vpc3NlLmNvbT4KKwkJCWlmKGFjdGlvbiA9PSAnc2NhbGUnKSAKKwkJCXsKKwkJCQl2YXIgdGhlSW1hZ2UgPSBlZGl0b3Iud2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aGVJbWFnZScpOworCQkJCW9yZ2luYWxfd2lkdGggPSB0aGVJbWFnZS53aWR0aCA7CisJCQkJb3JnaW5hbF9oZWlnaHQgPSB0aGVJbWFnZS5oZWlnaHQ7CisKKyAgICAgICAgICAgICAgICB2YXIgdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdycpOworCQkJCXcudmFsdWUgPSBvcmdpbmFsX3dpZHRoIDsKKwkJCQl2YXIgaCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaCcpIDsKKwkJCQloLnZhbHVlID0gb3JnaW5hbF9oZWlnaHQgOworCQkJfQorCisJCX0KKwl9CisKKwlmdW5jdGlvbiB0b2dnbGVNYXJrZXIoKSAKKwl7CisJCXZhciBtYXJrZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFya2VySW1nIik7CisJCQorCQlpZihtYXJrZXIgIT0gbnVsbCAmJiBtYXJrZXIuc3JjICE9IG51bGwpIHsKKwkJCWlmKG1hcmtlci5zcmMuaW5kZXhPZigidF9ibGFjay5naWYiKSA+PSAwKQorCQkJCW1hcmtlci5zcmMgPSAiaW1nL3Rfd2hpdGUuZ2lmIjsKKwkJCWVsc2UKKwkJCQltYXJrZXIuc3JjID0gImltZy90X2JsYWNrLmdpZiI7CisKKwkJCWVkaXRvci50b2dnbGVNYXJrZXIoKTsKKwkJfQorCX0KKworCS8vVG9nZ2dsZSBjb25zdHJhaW50cywgYnkgRnLpZOlyaWMgS2xlZSA8ZmtsZWVAaXN1aXNzZS5jb20+CisJZnVuY3Rpb24gdG9nZ2xlQ29uc3RyYWludHMoKSAKKwl7CisJCXZhciBsb2NrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNjYWxlQ29uc3RJbWciKTsKKwkJdmFyIGNoZWNrYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnN0UHJvcCIpOworCQkKKwkJaWYobG9jayAhPSBudWxsICYmIGxvY2suc3JjICE9IG51bGwpIHsKKwkJCWlmKGxvY2suc3JjLmluZGV4T2YoInVubG9ja2VkMi5naWYiKSA+PSAwKQorCQkJeworCQkJCWxvY2suc3JjID0gImltZy9pc2xvY2tlZDIuZ2lmIjsKKwkJCQljaGVja2JveC5jaGVja2VkID0gdHJ1ZTsKKwkJCQljaGVja0NvbnN0cmFpbnMoJ3dpZHRoJyk7CisKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlsb2NrLnNyYyA9ICJpbWcvdW5sb2NrZWQyLmdpZiI7CisJCQkJY2hlY2tib3guY2hlY2tlZCA9IGZhbHNlOworCQkJfQorCQl9CisJfQorCQorCS8vY2hlY2sgdGhlIGNvbnN0cmFpbnRzLCBieSBGculk6XJpYyBLbGVlIDxma2xlZUBpc3Vpc3NlLmNvbT4KKwlmdW5jdGlvbiBjaGVja0NvbnN0cmFpbnMoY2hhbmdlZCkgCisJeworCQl2YXIgY29uc3RyYWluZWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc3RQcm9wJyk7CisJCWlmKGNvbnN0cmFpbmVkLmNoZWNrZWQpIAorCQl7CisJCQl2YXIgdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdycpIDsKKwkJCXZhciB3aWR0aCA9IHcudmFsdWUgOworCQkJdmFyIGggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2gnKSA7CisJCQl2YXIgaGVpZ2h0ID0gaC52YWx1ZSA7CisJCQkKKwkJCWlmKG9yZ2luYWxfd2lkdGggPiAwICYmIG9yZ2luYWxfaGVpZ2h0ID4gMCkgCisJCQl7CisJCQkJaWYoY2hhbmdlZCA9PSAnd2lkdGgnICYmIHdpZHRoID4gMCkgCisJCQkJCWgudmFsdWUgPSBwYXJzZUludCgod2lkdGgvb3JnaW5hbF93aWR0aCkqb3JnaW5hbF9oZWlnaHQpOworCQkJCWVsc2UgaWYoY2hhbmdlZCA9PSAnaGVpZ2h0JyAmJiBoZWlnaHQgPiAwKSAKKwkJCQkJdy52YWx1ZSA9IHBhcnNlSW50KChoZWlnaHQvb3JnaW5hbF9oZWlnaHQpKm9yZ2luYWxfd2lkdGgpOworCQkJfQorCQl9CisJCQorCQl1cGRhdGVNYXJrZXIoJ3NjYWxlJykgOworCX0KKworCisJZnVuY3Rpb24gdXBkYXRlTWFya2VyKG1vZGUpIAorCXsKKwkJaWYgKG1vZGUgPT0gJ2Nyb3AnKQorCQl7CisJCQl2YXIgdF9jeCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjeCcpOworCQkJdmFyIHRfY3kgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3knKTsKKwkJCXZhciB0X2N3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N3Jyk7CisJCQl2YXIgdF9jaCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaCcpOworCisJCQllZGl0b3Iuc2V0TWFya2VyKHBhcnNlSW50KHRfY3gudmFsdWUpLCBwYXJzZUludCh0X2N5LnZhbHVlKSwgcGFyc2VJbnQodF9jdy52YWx1ZSksIHBhcnNlSW50KHRfY2gudmFsdWUpKTsKKwkJfQorCQllbHNlIGlmKG1vZGUgPT0gJ3NjYWxlJykgeworCQkJdmFyIHNfc3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3cnKTsKKwkJCXZhciBzX3NoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoJyk7CisJCQllZGl0b3Iuc2V0TWFya2VyKDAsIDAsIHBhcnNlSW50KHNfc3cudmFsdWUpLCBwYXJzZUludChzX3NoLnZhbHVlKSk7CisJCX0KKwl9CisKKwkKKwlmdW5jdGlvbiByb3RhdGVQcmVzZXQoc2VsZWN0aW9uKSAKKwl7CisJCXZhciB2YWx1ZSA9IHNlbGVjdGlvbi5vcHRpb25zW3NlbGVjdGlvbi5zZWxlY3RlZEluZGV4XS52YWx1ZTsKKwkJCisJCWlmKHZhbHVlLmxlbmd0aCA+IDAgJiYgcGFyc2VJbnQodmFsdWUpICE9IDApIHsKKwkJCXZhciByYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYScpOworCQkJcmEudmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7CisJCX0KKwl9CisKKwlmdW5jdGlvbiB1cGRhdGVGb3JtYXQoc2VsZWN0aW9uKSAKKwl7CisJCXZhciBzZWxlY3RlZCA9IHNlbGVjdGlvbi5vcHRpb25zW3NlbGVjdGlvbi5zZWxlY3RlZEluZGV4XS52YWx1ZTsKKworCQl2YXIgdmFsdWVzID0gc2VsZWN0ZWQuc3BsaXQoIiwiKTsKKwkJaWYodmFsdWVzLmxlbmd0aCA+MSkgeworCQkJdXBkYXRlU2xpZGVyKHBhcnNlSW50KHZhbHVlc1sxXSkpOworCQl9CisKKwl9CisJZnVuY3Rpb24gYWRkRXZlbnQob2JqLCBldlR5cGUsIGZuKQorCXsgCisJCWlmIChvYmouYWRkRXZlbnRMaXN0ZW5lcikgeyBvYmouYWRkRXZlbnRMaXN0ZW5lcihldlR5cGUsIGZuLCB0cnVlKTsgcmV0dXJuIHRydWU7IH0gCisJCWVsc2UgaWYgKG9iai5hdHRhY2hFdmVudCkgeyAgdmFyIHIgPSBvYmouYXR0YWNoRXZlbnQoIm9uIitldlR5cGUsIGZuKTsgIHJldHVybiByOyAgfSAKKwkJZWxzZSB7ICByZXR1cm4gZmFsc2U7IH0gCisJfSAKKworCWluaXQgPSBmdW5jdGlvbigpCisJeworCQl2YXIgYm90dG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdHRvbScpOworCQlpZih3aW5kb3cub3BlbmVyKQorCQl7CisJCQlfX2RsZ19pbml0KGJvdHRvbSk7CisJCQlfX2RsZ190cmFuc2xhdGUoJ0ltYWdlTWFuYWdlcicpOworCQl9CisJfQorCisJYWRkRXZlbnQod2luZG93LCAnbG9hZCcsIGluaXQpOwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvYXNzZXRzL2VkaXRvckZyYW1lLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2Fzc2V0cy9lZGl0b3JGcmFtZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk1ZTQyMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2Fzc2V0cy9lZGl0b3JGcmFtZS5jc3MKQEAgLTAsMCArMSw4IEBACitib2R5IHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsgfQ0KK3RhYmxlIHsgd2lkdGg6IDEwMCU7IH0NCit0YWJsZSB0ZCB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQ0KKy5jcm9we2N1cnNvcjpjcm9zc2hhaXI7fQ0KKy5zZWxlY3Rpb24geyBib3JkZXI6IGRvdHRlZCAxcHggIzAwMDAwMDsgcG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOiAwcHg7IGhlaWdodDogMXB4OyB6LWluZGV4OjU7IH0NCisuc2VsZWN0aW9uV2hpdGV7IGJvcmRlcjogZG90dGVkIDFweCAjRkZGRkZGOyBwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6IDBweDsgaGVpZ2h0OiAxcHg7IHotaW5kZXg6NTsgfQ0KKy5oYW5kbGVCb3h7IHotaW5kZXg6MTA1OyB9DQorLmVycm9yIHsgZm9udC1zaXplOmxhcmdlOyBmb250LXdlaWdodDpib2xkOyBjb2xvcjojYzAwOyBmb250LWZhbWlseTogSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2Fzc2V0cy9lZGl0b3JGcmFtZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2Fzc2V0cy9lZGl0b3JGcmFtZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmFmMTNiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvYXNzZXRzL2VkaXRvckZyYW1lLmpzCkBAIC0wLDAgKzEsOTggQEAKKy8qKgorICogSmF2YXNjcmlwdCB1c2VkIGJ5IHRoZSBlZGl0b3JGcmFtZS5waHAsIGl0IGJhc2ljYWxseSBpbml0aWFsaXplcyB0aGUgZnJhbWUuCisgKiBAYXV0aG9yICRBdXRob3I6cmF5ICQKKyAqIEB2ZXJzaW9uICRJZDplZGl0b3JGcmFtZS5qcyA2NzcgMjAwNy0wMS0xOSAyMjoyNDozNlogcmF5ICQKKyAqIEBwYWNrYWdlIEltYWdlTWFuYWdlcgorICovCisKK3ZhciB0b3BEb2MgPSB3aW5kb3cudG9wLmRvY3VtZW50OworCit2YXIgdF9jeCA9IHRvcERvYy5nZXRFbGVtZW50QnlJZCgnY3gnKTsKK3ZhciB0X2N5ID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdjeScpOwordmFyIHRfY3cgPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ2N3Jyk7Cit2YXIgdF9jaCA9IHRvcERvYy5nZXRFbGVtZW50QnlJZCgnY2gnKTsKKwordmFyIG1fc3ggPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ3N4Jyk7Cit2YXIgbV9zeSA9IHRvcERvYy5nZXRFbGVtZW50QnlJZCgnc3knKTsKK3ZhciBtX3cgPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ213Jyk7Cit2YXIgbV9oID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdtaCcpOwordmFyIG1fYSA9IHRvcERvYy5nZXRFbGVtZW50QnlJZCgnbWEnKTsKK3ZhciBtX2QgPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ21kJyk7CisKK3ZhciBzX3N3ID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdzdycpOwordmFyIHNfc2ggPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ3NoJyk7CisKK3ZhciByX3JhID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdyYScpOworCit2YXIgcGF0dGVybiA9ICJpbWcvMngyLmdpZiI7CisKK2Z1bmN0aW9uIGRvU3VibWl0KGFjdGlvbikKK3sKKyAgICBpZiAoYWN0aW9uID09ICdjcm9wJykKKyAgICB7CisgICAgICAgIC8vIGJhY2tlbmRfdXJsIGlzIHNldCBieSB0aGUgY2FsbGluZyBwYWdlLiBGb3Igbm93IHdlIGFzc3VtZSBpdCBjb250YWlucworCQkgIC8vIGEgdHJhaWxpbmcgJgorCisgICAgICAgIHZhciB1cmwgPSBfYmFja2VuZF91cmwgKyAiX19mdW5jdGlvbj1lZGl0b3JGcmFtZSZpbWc9IitjdXJyZW50SW1hZ2VGaWxlKyImYWN0aW9uPWNyb3AmcGFyYW1zPSIrcGFyc2VJbnQodF9jeC52YWx1ZSkrJywnK3BhcnNlSW50KHRfY3kudmFsdWUpKycsJysgcGFyc2VJbnQodF9jdy52YWx1ZSkrJywnK3BhcnNlSW50KHRfY2gudmFsdWUpOworCisgICAgICAgIC8vYWxlcnQodXJsKTsKKyAgICAgICAgbG9jYXRpb24uaHJlZiA9IHVybDsKKworICAgICAgICAvL2xvY2F0aW9uLnJlbG9hZCgpOworICAgIH0gICAKKyAgICBlbHNlIGlmIChhY3Rpb24gPT0gJ3NjYWxlJykKKyAgICB7CisgICAgICAgIHZhciB1cmwgPSBfYmFja2VuZF91cmwgKyAiX19mdW5jdGlvbj1lZGl0b3JGcmFtZSZpbWc9IitjdXJyZW50SW1hZ2VGaWxlKyImYWN0aW9uPXNjYWxlJnBhcmFtcz0iK3BhcnNlSW50KHNfc3cudmFsdWUpKycsJytwYXJzZUludChzX3NoLnZhbHVlKTsKKyAgICAgICAgLy9hbGVydCh1cmwpOworICAgICAgICBsb2NhdGlvbi5ocmVmID0gdXJsOworICAgICAgICAKKyAgICB9CisgICAgZWxzZSBpZiAoYWN0aW9uID09ICdyb3RhdGUnKQorICAgIHsKKyAgICAgICAgdmFyIGZsaXAgPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ2ZsaXAnKTsKKworICAgICAgICBpZihmbGlwLnZhbHVlID09ICdob3onIHx8IGZsaXAudmFsdWUgPT0gJ3ZlcicpIAorICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9IF9iYWNrZW5kX3VybCArICJfX2Z1bmN0aW9uPWVkaXRvckZyYW1lJmltZz0iK2N1cnJlbnRJbWFnZUZpbGUrIiZhY3Rpb249ZmxpcCZwYXJhbXM9IitmbGlwLnZhbHVlOworICAgICAgICBlbHNlIGlmIChpc05hTihwYXJzZUZsb2F0KHJfcmEudmFsdWUpKT09ZmFsc2UpCisgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gX2JhY2tlbmRfdXJsICsgIl9fZnVuY3Rpb249ZWRpdG9yRnJhbWUmaW1nPSIrY3VycmVudEltYWdlRmlsZSsiJmFjdGlvbj1yb3RhdGUmcGFyYW1zPSIrcGFyc2VGbG9hdChyX3JhLnZhbHVlKTsKKyAgICB9CisgICAgZWxzZSBpZihhY3Rpb24gPT0gJ3NhdmUnKSB7CisgICAgICAgIHZhciBzX2ZpbGUgPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ3NhdmVfZmlsZW5hbWUnKTsKKyAgICAgICAgdmFyIHNfZm9ybWF0ID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdzYXZlX2Zvcm1hdCcpOworICAgICAgICB2YXIgc19xdWFsaXR5ID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdxdWFsaXR5Jyk7CisKKyAgICAgICAgdmFyIGZvcm1hdCA9IHNfZm9ybWF0LnZhbHVlLnNwbGl0KCIsIik7CisgICAgICAgIGlmKHNfZmlsZS52YWx1ZS5sZW5ndGggPD0gMCkgCisJCXsKKyAgICAgICAgICAgIGFsZXJ0KGkxOG4oJ1BsZWFzZSBlbnRlciBhIGZpbGVuYW1lIHRvIHNhdmUuJykpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGZpbGVuYW1lID0gZW5jb2RlVVJJKHNfZmlsZS52YWx1ZSk7CisgICAgICAgICAgICB2YXIgcXVhbGl0eSA9IHBhcnNlSW50KHNfcXVhbGl0eS52YWx1ZSk7CisgICAgICAgICAgICB2YXIgdXJsID0gX2JhY2tlbmRfdXJsICsgIl9fZnVuY3Rpb249ZWRpdG9yRnJhbWUmaW1nPSIrY3VycmVudEltYWdlRmlsZSsiJmFjdGlvbj1zYXZlJnBhcmFtcz0iK2Zvcm1hdFswXSsiLCIrcXVhbGl0eSsiJmZpbGU9IitmaWxlbmFtZTsKKyAgICAgICAgICAgIC8vYWxlcnQodXJsKTsKKyAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSB1cmw7CisgICAgICAgIH0KKyAgICB9Cit9CisKKworZnVuY3Rpb24gYWRkRXZlbnQob2JqLCBldlR5cGUsIGZuKQoreyAKKwlpZiAob2JqLmFkZEV2ZW50TGlzdGVuZXIpIHsgb2JqLmFkZEV2ZW50TGlzdGVuZXIoZXZUeXBlLCBmbiwgdHJ1ZSk7IHJldHVybiB0cnVlOyB9IAorCWVsc2UgaWYgKG9iai5hdHRhY2hFdmVudCkgeyAgdmFyIHIgPSBvYmouYXR0YWNoRXZlbnQoIm9uIitldlR5cGUsIGZuKTsgIHJldHVybiByOyAgfSAKKwllbHNlIHsgIHJldHVybiBmYWxzZTsgfSAKK30gCisKK3ZhciBqZ19kb2MKKworaW5pdCA9IGZ1bmN0aW9uKCkKK3sKKwlqZ19kb2MgPSBuZXcganNHcmFwaGljcygiaW1nQ2FudmFzIik7IC8vIGRyYXcgZGlyZWN0bHkgaW50byBkb2N1bWVudAorCWpnX2RvYy5zZXRDb2xvcigiIzAwMDAwMCIpOyAvLyBibGFjaworCisJaW5pdEVkaXRvcigpOworfTsKKworYWRkRXZlbnQod2luZG93LCAnbG9hZCcsIGluaXQpOwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvYXNzZXRzL2hvdmVyLmh0YyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2Fzc2V0cy9ob3Zlci5odGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU1ZDgyMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2Fzc2V0cy9ob3Zlci5odGMKQEAgLTAsMCArMSwzNCBAQAorPGF0dGFjaCBldmVudD0ib25tb3VzZW92ZXIiIGhhbmRsZXI9ImhvdmVyUm9sbE92ZXIiIC8+Cis8YXR0YWNoIGV2ZW50PSJvbm1vdXNlb3V0IiBoYW5kbGVyPSJob3ZlclJvbGxPZmYiIC8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisvLworLy8JU2ltcGxlIGJlaGF2aW91ciBmb3IgSUU1KyB0byBlbXVsYXRlIDpob3ZlciBDU1MgcHNldWRvLWNsYXNzLgorLy8gIEV4cGVyaW1lbnRhbCB2ZXIgMC4xCisvLworLy8JVGhpcyBpcyBhbiBleHBlcmltZW50YWwgdmVyc2lvbiEgSGFuZGxlIHdpdGggY2FyZSEKKy8vCU1hbnVhbCBhdDogaHR0cDovL3d3dy5oc3prLmJtZS5odS9+aGoxMzAvY3NzL2xpc3RfbWVudS9ob3Zlci8KKy8vCisKK2Z1bmN0aW9uIGhvdmVyUm9sbE92ZXIoKSB7CisJCisJZWxlbWVudC5vcmlnQ2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWU7CS8vIGJhY2t1cCBvcmlnb25hbCBjbGFzc05hbWUKKwkKKwl2YXIgdGVtcENsYXNzU3RyID0gZWxlbWVudC5jbGFzc05hbWU7CQkKKwkKKwl0ZW1wQ2xhc3NTdHIgKz0gIkhvdmVyIjsJCQkJCS8vIGNvbnZlcnQgbmFtZSsnSG92ZXInIHRoZSBsYXN0IGNsYXNzIG5hbWUJdG8gZW11bGF0ZSB0YWcuY2xhc3M6aG92ZXIKKwkKKwl0ZW1wQ2xhc3NTdHIgPSB0ZW1wQ2xhc3NTdHIucmVwbGFjZSgvXHMvZywiSG92ZXIgIik7CS8vY29udmVydCBuYW1lKydIb3ZlcicgdGhlIG90aGVycyB0byBlbXVsYXRlIHRhZy5jbGFzczpob3ZlcgorCQorCXRlbXBDbGFzc1N0ciArPSAiIGhvdmVyIjsJCQkJLy8gYWRkIHNpbXBsZSAnaG92ZXInIGNsYXNzIG5hbWUgdG8gZW11bGF0ZSB0YWc6aG92ZXIKKwkKKwllbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lICsgIiAiICsgdGVtcENsYXNzU3RyOyAKKwkKKwkvL2FsZXJ0KGVsZW1lbnQuY2xhc3NOYW1lKTsKKwkvL3dpbmRvdy5zdGF0dXMgPSBlbGVtZW50LmNsYXNzTmFtZTsJCS8vIG9ubHkgZm9yIFRFU1QKK30KK2Z1bmN0aW9uIGhvdmVyUm9sbE9mZigpIHsKKwllbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQub3JpZ0NsYXNzTmFtZTsKK30KKworPC9zY3JpcHQ+CisKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2Fzc2V0cy9pbWFnZWxpc3QuY3NzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvYXNzZXRzL2ltYWdlbGlzdC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMzY2UxNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2Fzc2V0cy9pbWFnZWxpc3QuY3NzCkBAIC0wLDAgKzEsNDggQEAKK2JvZHkgeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IH0NCisuZWRpdCAgIHsgZm9udC1zaXplOiBzbWFsbDsgZm9udC1mYW1pbHk6IHNtYWxsLWNhcHRpb24sIHNhbnMtc2VyaWY7IHBhZGRpbmctdG9wOiAzcHg7fQ0KKy5lZGl0IGEgeyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDNweDsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IH0NCisuZWRpdCBhOmhvdmVyIHsgYmFja2dyb3VuZC1jb2xvcjogQnV0dG9uSGlnaGxpZ2h0OyB9DQorLmVkaXQgYSBpbWcgeyBib3JkZXI6IG5vbmU7IHZlcnRpY2FsLWFsaWduOiBib3R0b207IH0NCisubm9SZXN1bHQgeyBmb250LXNpemU6bGFyZ2U7IGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOiNjY2M7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7ICB0ZXh0LWFsaWduOiBjZW50ZXI7ICBwYWRkaW5nLXRvcDogNjBweDsgICB9DQorLmVycm9yIHsgY29sb3I6I2MwMDsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IHRleHQtYWxpZ246IGNlbnRlcjsgIHBhZGRpbmctdG9wOiA2NXB4O30NCisNCisuZGlyX2hvbGRlciwgLnRodW1iX2hvbGRlcg0KK3sNCisgIHdpZHRoOjExMHB4OyBoZWlnaHQ6MTMycHg7DQorICBmbG9hdDpsZWZ0Ow0KKyAgbWFyZ2luOjZweDsNCisgIGJhY2tncm91bmQtY29sb3I6QnV0dG9uRmFjZTsNCisgIGJvcmRlcjogMXB4IG91dHNldDsNCit9DQorDQorLnRodW1iX2hvbGRlci5hY3RpdmUNCit7DQorICBiYWNrZ3JvdW5kOkhpZ2hsaWdodDsNCisgIGNvbG9yOkhpZ2hsaWdodFRleHQ7DQorICBib3JkZXI6MXB4IGRhc2hlZCBIaWdobGlnaHQ7DQorfQ0KKw0KKy5kaXJfaG9sZGVyIGEuZGlyLCAudGh1bWJfaG9sZGVyIGEudGh1bWINCit7DQorICBoZWlnaHQ6MTAwcHg7DQorICBkaXNwbGF5OmJsb2NrOw0KKyAgdGV4dC1hbGlnbjpjZW50ZXI7DQorICBwYWRkaW5nOjVweDsNCisgIHRleHQtZGVjb3JhdGlvbjpub25lOw0KK30NCisNCisudGh1bWJfaG9sZGVyIGEudGh1bWIgaW1nDQorew0KKyAgYm9yZGVyOjFweCBzb2xpZCBibGFjazsNCit9DQorDQorLmRpcl9ob2xkZXIgYS5kaXIgaW1nDQorew0KKyAgYm9yZGVyOm5vbmU7DQorfQ0KKy5saXN0dmlldyB7IHdpZHRoOjEwMCUgfQ0KKy5saXN0dmlldyB0ZCwgLmxpc3R2aWV3IHRoIHsgdGV4dC1hbGlnbjpsZWZ0OyBmb250LXNpemU6c21hbGw7IH0NCisubGlzdHZpZXcgdGQuYWN0aW9ucyB7IHRleHQtYWxpZ246cmlnaHQ7IH0NCisubGlzdHZpZXcgdGQuYWN0aW9ucyBpbWcgeyBib3JkZXI6MHB4OyB9DQorDQorLmZsay1saWNlbnNlIHsgZm9udC1zaXplOiB4eC1zbWFsbDsgdGV4dC1hbGlnbjpjZW50ZXI7IH0NCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9hc3NldHMvaW1hZ2VzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvYXNzZXRzL2ltYWdlcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDJkYmU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvYXNzZXRzL2ltYWdlcy5qcwpAQCAtMCwwICsxLDE0OCBAQAorLyoqCisgKiBGdW5jdGlvbnMgZm9yIHRoZSBpbWFnZSBsaXN0aW5nLCB1c2VkIGJ5IGltYWdlcy5waHAgb25seQkKKyAqIEBhdXRob3IgJEF1dGhvcjpnb2dvICQKKyAqIEB2ZXJzaW9uICRJZDppbWFnZXMuanMgOTI3IDIwMDgtMDEtMDggMDM6NDA6MDJaIGdvZ28gJAorICogQHBhY2thZ2UgSW1hZ2VNYW5hZ2VyCisgKi8KKworCWZ1bmN0aW9uIGkxOG4oc3RyKSB7CisgICAgICAgIHJldHVybiBYaW5oYS5fbGMoc3RyLCAnSW1hZ2VNYW5hZ2VyJyk7CisJfQorCisJZnVuY3Rpb24gY2hhbmdlRGlyKG5ld0RpcikgCisJeworCQlzaG93TWVzc2FnZSgnTG9hZGluZycpOworCisJCS8vIGJhY2tlbmRfdXJsIGlzIGRlZmluZWQgaW4gdGhlIGNhbGxpbmcgcGFnZS4gRm9yIG5vdyB3ZSAKKwkJLy8gYXNzdW1lIGl0IGhhcyBhIHRyYWlsaW5nICYKKworCQlsb2NhdGlvbi5ocmVmID0gX2JhY2tlbmRfdXJsICsgIl9fZnVuY3Rpb249aW1hZ2VzJmRpcj0iK2VuY29kZVVSSUNvbXBvbmVudChuZXdEaXIpOworCX0KKworCisJZnVuY3Rpb24gbmV3Rm9sZGVyKGRpciwgbmV3RGlyKSAKKwl7CisJCWxvY2F0aW9uLmhyZWYgPSBfYmFja2VuZF91cmwgKyAiX19mdW5jdGlvbj1pbWFnZXMmZGlyPSIrZW5jb2RlVVJJQ29tcG9uZW50KGRpcikrIiZuZXdEaXI9IitlbmNvZGVVUklDb21wb25lbnQobmV3RGlyKTsKKwl9CisKKwkvL3VwZGF0ZSB0aGUgZGlyIGxpc3QgaW4gdGhlIHBhcmVudCB3aW5kb3cuCisJZnVuY3Rpb24gdXBkYXRlRGlyKG5ld0RpcikKKwl7CisJCXZhciBzZWxlY3Rpb24gPSB3aW5kb3cudG9wLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXJQYXRoJyk7CisJCWlmKHNlbGVjdGlvbikKKwkJeworCQkJZm9yKHZhciBpID0gMDsgaSA8IHNlbGVjdGlvbi5sZW5ndGg7IGkrKykKKwkJCXsKKwkJCQl2YXIgdGhpc0RpciA9IHNlbGVjdGlvbi5vcHRpb25zW2ldLnRleHQ7CisJCQkJaWYodGhpc0RpciA9PSBuZXdEaXIpCisJCQkJeworCQkJCQlzZWxlY3Rpb24uc2VsZWN0ZWRJbmRleCA9IGk7CisJCQkJCXNob3dNZXNzYWdlKCdMb2FkaW5nJyk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0JCQorCQl9CisJfQorCisJZnVuY3Rpb24gc2VsZWN0SW1hZ2UoZmlsZW5hbWUsIGFsdCwgd2lkdGgsIGhlaWdodCkgCisJeworCQl2YXIgdG9wRG9jID0gd2luZG93LnRvcC5kb2N1bWVudDsKKwkJCisJCXZhciBvYmogPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ2ZfdXJsJyk7ICBvYmoudmFsdWUgPSBmaWxlbmFtZTsKKwkJdmFyIG9iaiA9IHRvcERvYy5nZXRFbGVtZW50QnlJZCgnZl93aWR0aCcpOyAgb2JqLnZhbHVlID0gd2lkdGg7CisJCXZhciBvYmogPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ2Zfd2lkdGgnKTsgb2JqLnZhbHVlID0gd2lkdGg7CisJCXZhciBvYmogPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ2ZfaGVpZ2h0Jyk7IG9iai52YWx1ZSA9IGhlaWdodDsKKwkJdmFyIG9iaiA9IHRvcERvYy5nZXRFbGVtZW50QnlJZCgnZl9hbHQnKTsgb2JqLnZhbHVlID0gYWx0OworCQl2YXIgb2JqID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdvcmdpbmFsX3dpZHRoJyk7IG9iai52YWx1ZSA9IHdpZHRoOworCQl2YXIgb2JqID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdvcmdpbmFsX2hlaWdodCcpOyBvYmoudmFsdWUgPSBoZWlnaHQ7CQkKKyAgICAvLyBTZXQgcHJldmlldyBmb3IgdGhlIHNlbGVjdGVkCisgICAgdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdmX3ByZXZpZXcnKS5zcmMgPSB3aW5kb3cucGFyZW50Ll9iYWNrZW5kX3VybCArICdfX2Z1bmN0aW9uPXRodW1icyZpbWc9JyArIGVuY29kZVVSSUNvbXBvbmVudChmaWxlbmFtZSk7CisgICAgCisgICAgdXBkYXRlX3NlbGVjdGVkKCk7CisJfQorCisgIHZhciBfY3VycmVudF9zZWxlY3RlZCA9IG51bGw7CisgIGZ1bmN0aW9uIHVwZGF0ZV9zZWxlY3RlZCgpCisgIHsKKyAgICB2YXIgdG9wRG9jID0gd2luZG93LnRvcC5kb2N1bWVudDsKKyAgICBpZihfY3VycmVudF9zZWxlY3RlZCkKKyAgICB7CisgICAgICBfY3VycmVudF9zZWxlY3RlZC5jbGFzc05hbWUgPSBfY3VycmVudF9zZWxlY3RlZC5jbGFzc05hbWUucmVwbGFjZSgvKF58IClhY3RpdmUoIHwkKS8sICckMSQyJyk7CisgICAgICBfY3VycmVudF9zZWxlY3RlZCA9IG51bGw7CisgICAgfQorICAgIC8vIEdyYWIgdGhlIGN1cnJlbnQgZmlsZSwgYW5kIGhpZ2hsaWdodCBpdCBpZiB3ZSBoYXZlIGl0CisgICAgdmFyIGNfZmlsZSA9IHRvcERvYy5nZXRFbGVtZW50QnlJZCgnZl91cmwnKS52YWx1ZTsKKyAgICB2YXIgc2VsZWN0aW9uID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdkaXJQYXRoJyk7CisJCXZhciBjdXJyZW50RGlyID0gc2VsZWN0aW9uLm9wdGlvbnNbc2VsZWN0aW9uLnNlbGVjdGVkSW5kZXhdLnRleHQ7CisgICAgdmFyIGRSZSA9IG5ldyBSZWdFeHAoJ14oJyArIGN1cnJlbnREaXIucmVwbGFjZSgvKFtcL1xeJCorPy4oKXx7fVtcXV0pL2csICdcXCQxJykgKyAnKShbXi9dKikkJyk7CisgICAgaWYoZFJlLnRlc3QoY19maWxlKSkKKyAgICB7CisgICAgICB2YXIgaG9sZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hvbGRlcl8nICsgYXNjMmhleChSZWdFeHAuJDIpKTsKKyAgICAgIGlmKGhvbGRlcikKKyAgICAgIHsKKyAgICAgICAgX2N1cnJlbnRfc2VsZWN0ZWQgPSBob2xkZXI7CisgICAgICAgIGhvbGRlci5jbGFzc05hbWUgKz0gJyBhY3RpdmUnOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGFzYzJoZXgoc3RyKQorICB7CisgICAgdmFyIGhleHN0ciA9ICcnOworICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspCisgICAgeworICAgICAgdmFyIGhleCA9IChzdHIuY2hhckNvZGVBdChpKSkudG9TdHJpbmcoMTYpOworICAgICAgaWYoaGV4Lmxlbmd0aCA9PSAxKSBoZXggPSAnMCcgKyBoZXg7CisgICAgICBoZXhzdHIgKz0gaGV4OworICAgIH0KKyAgICByZXR1cm4gaGV4c3RyOworICB9CisKKwlmdW5jdGlvbiBzaG93TWVzc2FnZShuZXdNZXNzYWdlKSAKKwl7CisJCXZhciB0b3BEb2MgPSB3aW5kb3cudG9wLmRvY3VtZW50OworCisJCXZhciBtZXNzYWdlID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdtZXNzYWdlJyk7CisJCXZhciBtZXNzYWdlcyA9IHRvcERvYy5nZXRFbGVtZW50QnlJZCgnbWVzc2FnZXMnKTsKKwkJaWYobWVzc2FnZSAmJiBtZXNzYWdlcykKKwkJeworCQkJaWYobWVzc2FnZS5maXJzdENoaWxkKQorCQkJCW1lc3NhZ2UucmVtb3ZlQ2hpbGQobWVzc2FnZS5maXJzdENoaWxkKTsKKworCQkJbWVzc2FnZS5hcHBlbmRDaGlsZCh0b3BEb2MuY3JlYXRlVGV4dE5vZGUoaTE4bihuZXdNZXNzYWdlKSkpOworCQkJCisJCQltZXNzYWdlcy5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKwkJfQorCX0KKworCWZ1bmN0aW9uIGFkZEV2ZW50KG9iaiwgZXZUeXBlLCBmbikKKwl7IAorCQlpZiAob2JqLmFkZEV2ZW50TGlzdGVuZXIpIHsgb2JqLmFkZEV2ZW50TGlzdGVuZXIoZXZUeXBlLCBmbiwgdHJ1ZSk7IHJldHVybiB0cnVlOyB9IAorCQllbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsgIHZhciByID0gb2JqLmF0dGFjaEV2ZW50KCJvbiIrZXZUeXBlLCBmbik7ICByZXR1cm4gcjsgIH0gCisJCWVsc2UgeyAgcmV0dXJuIGZhbHNlOyB9IAorCX0gCisKKwlmdW5jdGlvbiBjb25maXJtRGVsZXRlRmlsZShmaWxlKSAKKwl7CisJCWlmKGNvbmZpcm0oaTE4bigiRGVsZXRlIGZpbGU/IikpKQorCQkJcmV0dXJuIHRydWU7CisJCisJCXJldHVybiBmYWxzZTsJCQorCX0KKworCWZ1bmN0aW9uIGNvbmZpcm1EZWxldGVEaXIoZGlyLCBjb3VudCkgCisJeworCQlpZihjb3VudCA+IDApCisJCXsKKwkJCWFsZXJ0KGkxOG4oIlBsZWFzZSBkZWxldGUgYWxsIGZpbGVzL2ZvbGRlcnMgaW5zaWRlIHRoZSBmb2xkZXIgeW91IHdpc2ggdG8gZGVsZXRlIGZpcnN0LiIpKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmKGNvbmZpcm0oaTE4bigiRGVsZXRlIGZvbGRlcj8iKSkpIAorCQkJcmV0dXJuIHRydWU7CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWFkZEV2ZW50KHdpbmRvdywgJ2xvYWQnLCBpbml0KTsKKyAgWGluaGEgPSB3aW5kb3cucGFyZW50LlhpbmhhOwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvYXNzZXRzL21hbmFnZXIuY3NzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvYXNzZXRzL21hbmFnZXIuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMDU4NGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9hc3NldHMvbWFuYWdlci5jc3MKQEAgLTAsMCArMSw0NyBAQAoraHRtbCwgYm9keSwgLmRpYWxvZyB7ICBiYWNrZ3JvdW5kLWNvbG9yOiBCdXR0b25GYWNlOyAgY29sb3I6IEJ1dHRvblRleHQ7IGZvbnQ6IDExcHggVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwO30KK2JvZHkgeyBwYWRkaW5nOiA1cHg7IH0KK2ZpZWxkc2V0IHsgcGFkZGluZzogMDt9CisudGl0bGUgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRmOyBjb2xvcjogIzAwMDsgZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMTIwJTsgcGFkZGluZzogM3B4IDEwcHg7IG1hcmdpbi1ib3R0b206IDEwcHg7IGJvcmRlci1ib3R0b206IDFweCAgc29saWQgYmxhY2s7IGxldHRlci1zcGFjaW5nOiAycHg7fQorZm9ybSB7IHBhZGRpbmc6IDBweDsgIG1hcmdpbjogMCBhdXRvOyB3aWR0aDogNTUwcHg7fQorCithIHsgcGFkZGluZzogNXB4OyBib3JkZXI6IDFweCBzb2xpZCBCdXR0b25GYWNlOwl9CQorYSBpbWcJeyBib3JkZXI6IDA7IH0JCithOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiBCdXR0b25IaWdobGlnaHQgQnV0dG9uU2hhZG93IEJ1dHRvblNoYWRvdyBCdXR0b25IaWdobGlnaHQ7IH0KKy5kaXJzIHsJcGFkZGluZzogMWVtOyAJfQorLmltYWdlRnJhbWUgeyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxNDVweDsgbWFyZ2luOiAwIGF1dG87IG1hcmdpbi10b3A6IDFlbTsgYmFja2dyb3VuZC1jb2xvcjogV2hpdGU7fQorI3lvdXR1YmVDaG9vc2VyIC5pbWFnZUZyYW1lIHsgaGVpZ2h0OiAxNTVweDsgfQorLnNtYWxsV2lkdGh7IHdpZHRoOiA0ZW07IH0KKy5sYXJnZWxXaWR0aHsgd2lkdGg6IDIyZW07IH0KKy5pbnB1dFRhYmxlIHsgbWFyZ2luOiAxZW0gYXV0bzsgfQorc2VsZWN0LCBpbnB1dCwgYnV0dG9uIHsgZm9udDogMTFweCBUYWhvbWEsVmVyZGFuYSxzYW5zLXNlcmlmOyB9CisuYnV0dG9ucyB7IHdpZHRoOiA3MHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KKy5jbGVhcmJvdGh7IGNsZWFyOiBib3RoOyB9CisjbWVzc2FnZXMgeyBwb3NpdGlvbjogcmVsYXRpdmU7IGxlZnQ6IDE3NXB4OyB0b3A6IDExNXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgd2lkdGg6MjAwcHg7ICBmbG9hdDogbGVmdDsgbWFyZ2luLXRvcDogLTUycHg7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHRleHQtYWxpZ246IGNlbnRlcjsgcGFkZGluZzogMTVweDsgfQorI21lc3NhZ2UgIHsgZm9udC1zaXplOiAxNXB4OyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICM2OWM7IH0KK2lmcmFtZSB7IGJvcmRlcjoxcHggaW5zZXQ7IGJvcmRlci1yaWdodDpub25lOyBib3JkZXItbGVmdDpub25lOyBib3JkZXItYm90dG9tOm5vbmU7IH0KKwordGFibGUgeyBtYXJnaW4tdG9wOjEwcHg7IH0KK3RoLCB0ZCB7IHBhZGRpbmctcmlnaHQ6M3B4OyB0ZXh0LWFsaWduOmxlZnQ7IGZvbnQtZmFtaWx5OnNtYWxsLWNhcHRpb24saGVsdmV0aWNhLHNhbnMtc2VyaWY7IH0KKworLmJ1dHRvbkNvbG9yIHsKKyAgd2lkdGggOjFlbTsKKyAgbWFyZ2luLWxlZnQ6IDJweDsKKyAgY3Vyc29yOiBkZWZhdWx0OworfQorCisuYnV0dG9uQ29sb3IgLmNob29zZXIsIC5idXR0b25Db2xvciAubm9jb2xvciB7CisgIGhlaWdodDogMC42ZW07CisgIGJvcmRlcjogMXB4IHNvbGlkOworICBwYWRkaW5nOiAwcHggMWVtOworICBib3JkZXItY29sb3I6IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25TaGFkb3cgQnV0dG9uU2hhZG93IEJ1dHRvbkhpZ2hsaWdodDsKK30KKworLmJ1dHRvbkNvbG9yIC5idXR0b25DbGljayB7CisgIGJvcmRlci1jb2xvcjogQnV0dG9uU2hhZG93IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25IaWdobGlnaHQgQnV0dG9uU2hhZG93OworfQorLmJ1dHRvbkNvbG9yIC5idXR0b25Db2xvci1oaWxpdGUgeworICBib3JkZXItY29sb3I6IEJ1dHRvblNoYWRvdyBCdXR0b25IaWdobGlnaHQgQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvblNoYWRvdzsKK30KKworLmJ1dHRvbkNvbG9yIC5ub2NvbG9yIHsgcGFkZGluZzogMHB4OyB9CisuYnV0dG9uQ29sb3IgLm5vY29sb3ItaGlsaXRlIHsgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgY29sb3I6ICNmMDA7IH0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2Fzc2V0cy9tYW5hZ2VyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvYXNzZXRzL21hbmFnZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmNGJjOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2Fzc2V0cy9tYW5hZ2VyLmpzCkBAIC0wLDAgKzEsMzQxIEBACisvKioKKyAqIEZ1bmN0aW9ucyBmb3IgdGhlIEltYWdlTWFuYWdlciwgdXNlZCBieSBtYW5hZ2VyLnBocCBvbmx5CQorICogQGF1dGhvciAkQXV0aG9yOmdvZ28gJAorICogQHZlcnNpb24gJElkOm1hbmFnZXIuanMgODc3IDIwMDctMDgtMTIgMTU6NTA6MDNaIGdvZ28gJAorICogQHBhY2thZ2UgSW1hZ2VNYW5hZ2VyCisgKi8KKwkKKwkvL1RyYW5zbGF0aW9uCisJZnVuY3Rpb24gaTE4bihzdHIpIHsKKyAgICAgICAgcmV0dXJuIFhpbmhhLl9sYyhzdHIsICdJbWFnZU1hbmFnZXInKTsKKwl9CisKKworCS8vc2V0IHRoZSBhbGlnbm1lbnQgb3B0aW9ucworCWZ1bmN0aW9uIHNldEFsaWduKGFsaWduKSAKKwl7CisJCXZhciBzZWxlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl9hbGlnbicpOworCQlmb3IodmFyIGkgPSAwOyBpIDwgc2VsZWN0aW9uLmxlbmd0aDsgaSsrKQorCQl7CisJCQlpZihzZWxlY3Rpb24ub3B0aW9uc1tpXS52YWx1ZSA9PSBhbGlnbikKKwkJCXsKKwkJCQlzZWxlY3Rpb24uc2VsZWN0ZWRJbmRleCA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvL2luaXRpYWxpc2UgdGhlIGZvcm0KKyAgZG9uZWluaXQgPSAwOyAvLyBTZWVtcyB0aGF0IGluIE9wZXJhIHRoZSBsb2FkIGV2ZW50IG9mIHRoZSBpZnJhbWUgcmUtZmlyZXMgdGhpcyBvbmUgYWxzby4KKwlpbml0ID0gZnVuY3Rpb24gKCkgCisJeworICAgIGlmKGRvbmVpbml0KyspIHJldHVybjsKKyAgICAKKwkJX19kbGdfaW5pdChudWxsLCB7d2lkdGg6NjAwLGhlaWdodDo0NjB9KTsKKworCQlfX2RsZ190cmFuc2xhdGUoJ0ltYWdlTWFuYWdlcicpOworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBpcyBzbyB0aGUgdHJhbnNsYXRlZCBzdHJpbmcgc2hvd3MgdXAgaW4gdGhlIGRyb3AgZG93bi4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYWxpZ24iKS5zZWxlY3RlZEluZGV4ID0gMTsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYWxpZ24iKS5zZWxlY3RlZEluZGV4ID0gMDsKKyAgICAgICAgCisKKwkJdmFyIHVwbG9hZEZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkRm9ybScpOworCQlpZih1cGxvYWRGb3JtKSB1cGxvYWRGb3JtLnRhcmdldCA9ICdpbWdNYW5hZ2VyJzsKKworCQl2YXIgcGFyYW0gPSB3aW5kb3cuZGlhbG9nQXJndW1lbnRzOworCQlpZiAocGFyYW0pIAorCQl7CisgICAgICB2YXIgaW1hZ2VfcmVnZXggPSBuZXcgUmVnRXhwKCAnKGh0dHBzPzovL1teL10qKT8nICsgYmFzZV91cmwucmVwbGFjZSgvXC8kLywgJycpICk7CisgICAgICBwYXJhbS5mX3VybCA9IHBhcmFtLmZfdXJsLnJlcGxhY2UoIGltYWdlX3JlZ2V4LCAiIiApOworCisgICAgICAvLyBUaGUgaW1hZ2UgVVJMIG1heSByZWZlcmVuY2Ugb25lIG9mIHRoZSBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQgaW1hZ2VzIAorICAgICAgLy8gKHdoZW4gdGhlIHVzZXIgYWx0ZXJzIHRoZSBkaW1lbnNpb25zIGluIHRoZSBwaWNrZXIpLCBjbGVhbiB0aGF0IHVwCisgICAgICAvLyBzbyBpdCBsb29rcyByaWdodCBhbmQgd2UgZ2V0IGJhY2sgdG8gYSBub3JtYWwgZl91cmwKKyAgICAgIHZhciByZCA9IChfcmVzaXplZF9kaXIpID8gX3Jlc2l6ZWRfZGlyLnJlcGxhY2UoWGluaGEuUkVfU3BlY2lhbHMsICdcXCQxJykgKyAnLycgOiAnJzsKKyAgICAgIHZhciBycCA9IF9yZXNpemVkX3ByZWZpeC5yZXBsYWNlKFhpbmhhLlJFX1NwZWNpYWxzLCAnXFwkMScpOworICAgICAgdmFyIGRyZWcgPSBuZXcgUmVnRXhwKCdeKC4qLyknICsgcmQgKyBycCArICdfKFswLTldKyl4KFswLTldKylfKFteL10rKSQnKTsKKyAgCisgICAgICBpZihkcmVnLnRlc3QocGFyYW0uZl91cmwpKQorICAgICAgeworICAgICAgICBwYXJhbS5mX3VybCAgICA9IFJlZ0V4cC4kMSArIFJlZ0V4cC4kNDsKKyAgICAgICAgcGFyYW0uZl93aWR0aCAgPSBSZWdFeHAuJDI7CisgICAgICAgIHBhcmFtLmZfaGVpZ2h0ID0gUmVnRXhwLiQzOworICAgICAgfQorICAgICAgCisgICAgICBmb3IgKHZhciBpZCBpbiBwYXJhbSkKKyAgICAgIHsKKyAgICAgICAgaWYoaWQgPT0gJ2ZfYWxpZ24nKSBjb250aW51ZTsKKyAgICAgICAgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpKQorICAgICAgICB7CisgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnZhbHVlID0gcGFyYW1baWRdOworICAgICAgICB9CisgICAgICB9CisKKworCisgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3JnaW5hbF93aWR0aCIpLnZhbHVlID0gcGFyYW1bImZfd2lkdGgiXTsKKwkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvcmdpbmFsX2hlaWdodCIpLnZhbHVlID0gcGFyYW1bImZfaGVpZ2h0Il07CisJCQlzZXRBbGlnbihwYXJhbVsiZl9hbGlnbiJdKTsKKworICAgICAgLy8gTG9jYXRlIHRvIHRoZSBjb3JyZWN0IGRpcmVjdG9yeQorICAgICAgdmFyIGRyZWcgPSBuZXcgUmVnRXhwKCdeKC4qLykoW14vXSspJCcpOworICAgICAgaWYoZHJlZy50ZXN0KHBhcmFtWydmX3VybCddKSAmJiAhKG5ldyBSZWdFeHAoJ15odHRwcz86Ly8nLCdpJykpLnRlc3QocGFyYW1bJ2ZfdXJsJ10pKQorICAgICAgeworICAgICAgICBjaGFuZ2VEaXIoUmVnRXhwLiQxKTsKKyAgICAgICAgdmFyIGRpclBhdGggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGlyUGF0aCcpOworICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZGlyUGF0aC5vcHRpb25zLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgaWYoZGlyUGF0aC5vcHRpb25zW2ldLnZhbHVlID09IGVuY29kZVVSSUNvbXBvbmVudChSZWdFeHAuJDEpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGRpclBhdGgub3B0aW9uc1tpXS5zZWxlY3RlZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX3ByZXZpZXcnKS5zcmMgPSBfYmFja2VuZF91cmwgKyAnX19mdW5jdGlvbj10aHVtYnMmaW1nPScgKyBlbmNvZGVVUklDb21wb25lbnQocGFyYW0uZl91cmwpOyAgICAgIAorCQl9CisJCQorCQkgLy8gSG9va3VwIGNvbG9yIHBpY2tlcnMKKyAgICBuZXcgWGluaGEuY29sb3JQaWNrZXIuSW5wdXRCaW5kaW5nKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX2JhY2tncm91bmRDb2xvcicpKTsKKyAgICBuZXcgWGluaGEuY29sb3JQaWNrZXIuSW5wdXRCaW5kaW5nKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX2JvcmRlckNvbG9yJykpOworCisJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2FsdCIpLmZvY3VzKCk7CisJfTsKKworCisJZnVuY3Rpb24gb25DYW5jZWwoKSAKKwl7CisJCV9fZGxnX2Nsb3NlKG51bGwpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJZnVuY3Rpb24gb25PSygpIAorCXsKKwkJLy8gcGFzcyBkYXRhIGJhY2sgdG8gdGhlIGNhbGxpbmcgd2luZG93CisJCXZhciBmaWVsZHMgPSBbImZfdXJsIiwgImZfYWx0IiwgImZfYWxpZ24iLCAiZl93aWR0aCIsICJmX2hlaWdodCIsICJmX3BhZGRpbmciLCAiZl9tYXJnaW4iLCAiZl9ib3JkZXIiLCAiZl9ib3JkZXJDb2xvciIsICJmX2JhY2tncm91bmRDb2xvciIsICdmX2hzcGFjZScsICdmX3ZzcGFjZSddOworCQl2YXIgcGFyYW0gPSBuZXcgT2JqZWN0KCk7CisJCWZvciAodmFyIGkgaW4gZmllbGRzKSAKKwkJeworCQkJdmFyIGlkID0gZmllbGRzW2ldOworCQkJdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworCQkJaWYoaWQgPT0gImZfdXJsIiAmJiBlbC52YWx1ZS5pbmRleE9mKCc6Ly8nKSA8IDAgKQorCQkJCXsKKworCQkJCWlmICggZWwudmFsdWUgPT0gIiIgKQorCQkJCQl7CisJCQkJCWFsZXJ0KCBpMThuKCJObyBJbWFnZSBzZWxlY3RlZC4iKSApOworCQkJCQlyZXR1cm4oIGZhbHNlICk7CisJCQkJCX0KKworCQkJCXBhcmFtW2lkXSA9IG1ha2VVUkwoYmFzZV91cmwsZWwudmFsdWUpOworCQkJCX0KKwkJCWVsc2UgaWYgKGVsKQorCQkJCXBhcmFtW2lkXSA9IGVsLnZhbHVlOworICAgICAgLy8gZWxzZSBhbGVydCgiTWlzc2luZyAiICsgZmllbGRzW2ldKTsgPC0tIE5vdCB1c2VmdWwgdG8gdGVsbCBwZW9wbGUgdGhpcywgbWF5YmUgZm9yIGRlYnVnZ2luZy4KKworCQl9CisKKyAgICAvLyBTZWUgaWYgd2UgbmVlZCB0byByZXNpemUgdGhlIGltYWdlCisgICAgdmFyIG9yaWdzaXplID0KKyAgICB7CisgICAgICB3OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcmdpbmFsX3dpZHRoJykudmFsdWUsCisgICAgICBoOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcmdpbmFsX2hlaWdodCcpLnZhbHVlCisgICAgfQorCisgICAgaWYoICAob3JpZ3NpemUudyAhPSBwYXJhbS5mX3dpZHRoKQorICAgICAgfHwgKG9yaWdzaXplLmggIT0gcGFyYW0uZl9oZWlnaHQpICkKKyAgICB7CisgICAgICAvLyBZdXAsIG5lZWQgdG8gcmVzaXplCisgICAgICB2YXIgcmVzaXplZCA9IFhpbmhhLl9nZXR1cmxjb250ZW50KF9iYWNrZW5kX3VybCArICcmX19mdW5jdGlvbj1yZXNpemVyJmltZz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX3VybCcpLnZhbHVlKSArICcmd2lkdGg9JyArIHBhcmFtLmZfd2lkdGggKyAnJmhlaWdodD0nICsgcGFyYW0uZl9oZWlnaHQpOworICAgICAgLy8gYWxlcnQocmVzaXplZCk7CisgICAgICByZXNpemVkID0gZXZhbChyZXNpemVkKTsKKyAgICAgIGlmKHJlc2l6ZWQpCisgICAgICB7CisgICAgICAgIHBhcmFtLmZfdXJsID0gbWFrZVVSTChiYXNlX3VybCwgcmVzaXplZCk7CisgICAgICB9CisgICAgfQorCisKKwkJX19kbGdfY2xvc2UocGFyYW0pOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLy9zaW1pbGFyIHRvIHRoZSBGaWxlczo6bWFrZUZpbGUoKSBpbiBGaWxlcy5waHAKKwlmdW5jdGlvbiBtYWtlVVJMKHBhdGhBLCBwYXRoQikgCisJeworCQlpZihwYXRoQS5zdWJzdHJpbmcocGF0aEEubGVuZ3RoLTEpICE9ICcvJykKKwkJCXBhdGhBICs9ICcvJzsKKworCQlpZihwYXRoQi5jaGFyQXQoMCkgPT0gJy8nKTsJCisJCQlwYXRoQiA9IHBhdGhCLnN1YnN0cmluZygxKTsKKworCQlyZXR1cm4gcGF0aEErcGF0aEI7CisJfQorCisKKwlmdW5jdGlvbiB1cGRhdGVEaXIoc2VsZWN0aW9uKSAKKwl7CisJCXZhciBuZXdEaXIgPSBzZWxlY3Rpb24ub3B0aW9uc1tzZWxlY3Rpb24uc2VsZWN0ZWRJbmRleF0udmFsdWU7CisJCWNoYW5nZURpcihuZXdEaXIpOworCX0KKworCWZ1bmN0aW9uIGdvVXBEaXIoKSAKKwl7CisJCXZhciBzZWxlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGlyUGF0aCcpOworCQl2YXIgY3VycmVudERpciA9IHNlbGVjdGlvbi5vcHRpb25zW3NlbGVjdGlvbi5zZWxlY3RlZEluZGV4XS50ZXh0OworCQlpZihjdXJyZW50RGlyLmxlbmd0aCA8IDIpCisJCQlyZXR1cm4gZmFsc2U7CisJCXZhciBkaXJzID0gY3VycmVudERpci5zcGxpdCgnLycpOworCQkKKwkJdmFyIHNlYXJjaCA9ICcnOworCisJCWZvcih2YXIgaSA9IDA7IGkgPCBkaXJzLmxlbmd0aCAtIDI7IGkrKykKKwkJeworCQkJc2VhcmNoICs9IGRpcnNbaV0rJy8nOworCQl9CisKKwkJZm9yKHZhciBpID0gMDsgaSA8IHNlbGVjdGlvbi5sZW5ndGg7IGkrKykKKwkJeworCQkJdmFyIHRoaXNEaXIgPSBzZWxlY3Rpb24ub3B0aW9uc1tpXS50ZXh0OworCQkJaWYodGhpc0RpciA9PSBzZWFyY2gpCisJCQl7CisJCQkJc2VsZWN0aW9uLnNlbGVjdGVkSW5kZXggPSBpOworCQkJCXZhciBuZXdEaXIgPSBzZWxlY3Rpb24ub3B0aW9uc1tpXS52YWx1ZTsKKwkJCQljaGFuZ2VEaXIobmV3RGlyKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWZ1bmN0aW9uIGNoYW5nZURpcihuZXdEaXIpIAorCXsKKwkJaWYodHlwZW9mIGltZ01hbmFnZXIgIT0gJ3VuZGVmaW5lZCcpCisgICAgeyAgICAgIAorCSAgICBpbWdNYW5hZ2VyLmNoYW5nZURpcihuZXdEaXIpOworICAgIH0KKwl9CisKKwlmdW5jdGlvbiB0b2dnbGVDb25zdHJhaW5zKGNvbnN0cmFpbnMpIAorCXsKKwkJdmFyIGxvY2tJbWFnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdMb2NrJyk7CisJCXZhciBjb25zdHJhaW5zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnN0cmFpbl9wcm9wJyk7CisKKwkJaWYoY29uc3RyYWlucy5jaGVja2VkKSAKKwkJeworCQkJbG9ja0ltYWdlLnNyYyA9ICJpbWcvbG9ja2VkLmdpZiI7CQorCQkJY2hlY2tDb25zdHJhaW5zKCd3aWR0aCcpIAorCQl9CisJCWVsc2UKKwkJeworCQkJbG9ja0ltYWdlLnNyYyA9ICJpbWcvdW5sb2NrZWQuZ2lmIjsJCisJCX0KKwl9CisKKwlmdW5jdGlvbiBjaGVja0NvbnN0cmFpbnMoY2hhbmdlZCkgCisJeworCQkvL2FsZXJ0KGRvY3VtZW50LmZvcm0xLmNvbnN0cmFpbl9wcm9wKTsKKwkJdmFyIGNvbnN0cmFpbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc3RyYWluX3Byb3AnKTsKKwkJCisJCWlmKGNvbnN0cmFpbnMuY2hlY2tlZCkgCisJCXsKKwkJCXZhciBvYmogPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3JnaW5hbF93aWR0aCcpOworCQkJdmFyIG9yZ2luYWxfd2lkdGggPSBwYXJzZUludChvYmoudmFsdWUpOworCQkJdmFyIG9iaiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcmdpbmFsX2hlaWdodCcpOworCQkJdmFyIG9yZ2luYWxfaGVpZ2h0ID0gcGFyc2VJbnQob2JqLnZhbHVlKTsKKworCQkJdmFyIHdpZHRoT2JqID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zfd2lkdGgnKTsKKwkJCXZhciBoZWlnaHRPYmogPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl9oZWlnaHQnKTsKKwkJCQorCQkJdmFyIHdpZHRoID0gcGFyc2VJbnQod2lkdGhPYmoudmFsdWUpOworCQkJdmFyIGhlaWdodCA9IHBhcnNlSW50KGhlaWdodE9iai52YWx1ZSk7CisKKwkJCWlmKG9yZ2luYWxfd2lkdGggPiAwICYmIG9yZ2luYWxfaGVpZ2h0ID4gMCkgCisJCQl7CisJCQkJaWYoY2hhbmdlZCA9PSAnd2lkdGgnICYmIHdpZHRoID4gMCkgeworCQkJCQloZWlnaHRPYmoudmFsdWUgPSBwYXJzZUludCgod2lkdGgvb3JnaW5hbF93aWR0aCkqb3JnaW5hbF9oZWlnaHQpOworCQkJCX0KKworCQkJCWlmKGNoYW5nZWQgPT0gJ2hlaWdodCcgJiYgaGVpZ2h0ID4gMCkgeworCQkJCQl3aWR0aE9iai52YWx1ZSA9IHBhcnNlSW50KChoZWlnaHQvb3JnaW5hbF9oZWlnaHQpKm9yZ2luYWxfd2lkdGgpOworCQkJCX0KKwkJCX0JCQkKKwkJfQorCX0KKworCWZ1bmN0aW9uIHNob3dNZXNzYWdlKG5ld01lc3NhZ2UpIAorCXsKKwkJdmFyIG1lc3NhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVzc2FnZScpOworCQl2YXIgbWVzc2FnZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVzc2FnZXMnKTsKKwkJaWYobWVzc2FnZS5maXJzdENoaWxkKQorCQkJbWVzc2FnZS5yZW1vdmVDaGlsZChtZXNzYWdlLmZpcnN0Q2hpbGQpOworCisJCW1lc3NhZ2UuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaTE4bihuZXdNZXNzYWdlKSkpOworCQkKKwkJbWVzc2FnZXMuc3R5bGUuZGlzcGxheSA9ICcnOworCX0KKworCWZ1bmN0aW9uIGFkZEV2ZW50KG9iaiwgZXZUeXBlLCBmbikKKwl7IAorCQlpZiAob2JqLmFkZEV2ZW50TGlzdGVuZXIpIHsgb2JqLmFkZEV2ZW50TGlzdGVuZXIoZXZUeXBlLCBmbiwgdHJ1ZSk7IHJldHVybiB0cnVlOyB9IAorCQllbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsgIHZhciByID0gb2JqLmF0dGFjaEV2ZW50KCJvbiIrZXZUeXBlLCBmbik7ICByZXR1cm4gcjsgIH0gCisJCWVsc2UgeyAgcmV0dXJuIGZhbHNlOyB9IAorCX0gCisKKwlmdW5jdGlvbiBkb1VwbG9hZCgpIAorCXsKKwkJCisJCXZhciB1cGxvYWRGb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbG9hZEZvcm0nKTsKKwkJaWYodXBsb2FkRm9ybSkKKwkJCXNob3dNZXNzYWdlKCdVcGxvYWRpbmcnKTsKKwl9CisKKwlmdW5jdGlvbiByZWZyZXNoKCkKKwl7CisJCXZhciBzZWxlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGlyUGF0aCcpOworCQl1cGRhdGVEaXIoc2VsZWN0aW9uKTsKKwl9CisKKworCWZ1bmN0aW9uIG5ld0ZvbGRlcigpCisJeworCQlmdW5jdGlvbiBjcmVhdGVGb2xkZXIoZm9sZGVyKQorCQl7CisJCQl2YXIgc2VsZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpclBhdGgnKTsKKwkJCXZhciBkaXIgPSBzZWxlY3Rpb24ub3B0aW9uc1tzZWxlY3Rpb24uc2VsZWN0ZWRJbmRleF0udmFsdWU7CisKKwkJCWlmKGZvbGRlciA9PSB0aHVtYmRpcikKKwkJCXsKKwkJCQlhbGVydChpMThuKCdJbnZhbGlkIGZvbGRlciBuYW1lLCBwbGVhc2UgY2hvb3NlIGFub3RoZXIgZm9sZGVyIG5hbWUuJykpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKworCQkJaWYgKGZvbGRlciAmJiBmb2xkZXIgIT0gJycgJiYgdHlwZW9mIGltZ01hbmFnZXIgIT0gJ3VuZGVmaW5lZCcpCisJCQl7CisJCQkJaW1nTWFuYWdlci5uZXdGb2xkZXIoZGlyLCBlbmNvZGVVUkkoZm9sZGVyKSk7CisJCQl9CisJCX0KKwkJLy8gSUU3IGhhcyBjcmlwcGxlZCB0aGUgcHJvbXB0KCkKKwkJaWYgKFhpbmhhLmllX3ZlcnNpb24gPiA2KQorCQl7CisJCQlEaWFsb2coIm5ld0ZvbGRlci5odG1sIiwgZnVuY3Rpb24ocGFyYW0pCisJCQl7CisJCQkJaWYgKCFwYXJhbSkgLy8gdXNlciBtdXN0IGhhdmUgcHJlc3NlZCBDYW5jZWwKKwkJCQl7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJdmFyIGZvbGRlciA9IHBhcmFtWydmX2ZvbGRlcm5hbWUnXTsKKwkJCQkJY3JlYXRlRm9sZGVyKGZvbGRlcik7CisJCQkJfQorCQkJfSwgbnVsbCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQl2YXIgZm9sZGVyID0gcHJvbXB0KGkxOG4oJ1BsZWFzZSBlbnRlciBuYW1lIGZvciBuZXcgZm9sZGVyLi4uJyksIGkxOG4oJ1VudGl0bGVkJykpOworCQkJY3JlYXRlRm9sZGVyKGZvbGRlcik7CisJCX0KKwl9CisgIAorCWFkZEV2ZW50KHdpbmRvdywgJ2xvYWQnLCBpbml0KTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2Fzc2V0cy9wb3B1cC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2Fzc2V0cy9wb3B1cC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTk5Y2M4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvYXNzZXRzL3BvcHVwLmpzCkBAIC0wLDAgKzEsNDAgQEAKKy8vIGh0bWxBcmVhIHYzLjAgLSBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgaW50ZXJhY3RpdmV0b29scy5jb20sIGluYy4NCisvLyBUaGlzIGNvcHlyaWdodCBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLg0KKy8vDQorLy8gUG9ydGlvbnMgKGMpIGR5bmFyY2guY29tLCAyMDAzDQorLy8NCisvLyBBIGZyZWUgV1lTSVdZRyBlZGl0b3IgcmVwbGFjZW1lbnQgZm9yIDx0ZXh0YXJlYT4gZmllbGRzLg0KKy8vIEZvciBmdWxsIHNvdXJjZSBjb2RlIGFuZCBkb2NzLCB2aXNpdCBodHRwOi8vd3d3LmludGVyYWN0aXZldG9vbHMuY29tLw0KKy8vDQorLy8gVmVyc2lvbiAzLjAgZGV2ZWxvcGVkIGJ5IE1paGFpIEJhem9uLg0KKy8vICAgaHR0cDovL2R5bmFyY2guY29tL21pc2hvbw0KKy8vDQorLy8gJElkOnBvcHVwLmpzIDg1NiAyMDA3LTA2LTEzIDE4OjM0OjM0WiB3eW1zeSAkDQorDQorLy8gT3ZlcnJpZGUgdGhlIG9yZGluYXJ5IHBvcHVwLmpzIHRyYW5zbGF0aW9uIHRvIGFkZCB0cmFuc2xhdGlvbiBmb3IgYSBmZXcgb3RoZXIgSFRNTCBlbGVtZW50cy4NCisNCitmdW5jdGlvbiBfX2RsZ190cmFuc2xhdGUoY29udGV4dCkgew0KKyAgICB2YXIgdHlwZXMgPSBbInNwYW4iLCAib3B0aW9uIiwgInRkIiwgInRoIiwgImJ1dHRvbiIsICJkaXYiLCAibGFiZWwiLCAiYSIsImltZyIsICJsZWdlbmQiXTsNCisgICAgZm9yICh2YXIgdHlwZSA9IDA7IHR5cGUgPCB0eXBlcy5sZW5ndGg7ICsrdHlwZSkgew0KKyAgICAgICAgdmFyIHNwYW5zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHlwZXNbdHlwZV0pOw0KKyAgICAgICAgZm9yICh2YXIgaSA9IHNwYW5zLmxlbmd0aDsgLS1pID49IDA7KSB7DQorICAgICAgICAgICAgdmFyIHNwYW4gPSBzcGFuc1tpXTsNCisgICAgICAgICAgICBpZiAoc3Bhbi5maXJzdENoaWxkICYmIHNwYW4uZmlyc3RDaGlsZC5kYXRhKSB7DQorICAgICAgICAgICAgICAgIHZhciB0eHQgPSBYaW5oYS5fbGMoc3Bhbi5maXJzdENoaWxkLmRhdGEsIGNvbnRleHQpOw0KKyAgICAgICAgICAgICAgICBpZiAodHh0KQ0KKyAgICAgICAgICAgICAgICAgICAgc3Bhbi5maXJzdENoaWxkLmRhdGEgPSB0eHQ7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGlmIChzcGFuLnRpdGxlKSB7DQorICAgICAgICAgICAgICAgIHZhciB0eHQgPSBYaW5oYS5fbGMoc3Bhbi50aXRsZSwgY29udGV4dCk7DQorICAgICAgICAgICAgICAgIGlmICh0eHQpDQorICAgICAgICAgICAgICAgICAgICBzcGFuLnRpdGxlID0gdHh0Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBpZiAoc3Bhbi5hbHQpIHsNCisgICAgICAgICAgICAgICAgdmFyIHR4dCA9IFhpbmhhLl9sYyhzcGFuLmFsdCwgY29udGV4dCk7DQorICAgICAgICAgICAgICAgIGlmICh0eHQpDQorICAgICAgICAgICAgICAgICAgICBzcGFuLmFsdCA9IHR4dDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisgICAgZG9jdW1lbnQudGl0bGUgPSBYaW5oYS5fbGMoZG9jdW1lbnQudGl0bGUsIGNvbnRleHQpOw0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9hc3NldHMvc2xpZGVyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvYXNzZXRzL3NsaWRlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGRlZTc1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvYXNzZXRzL3NsaWRlci5qcwpAQCAtMCwwICsxLDEwNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiBUaXRsZS4uLi4uLi4uLjogIFNpbXBsZSBMaXRlIFNsaWRlciBmb3IgSW1hZ2UgRWRpdG9yCisqKiBWZXJzaW9uLi4uLi4uLjogIDEuMQorKiogQXV0aG9yLi4uLi4uLi46ICBYaWFuZyBXZWkgWkhVTyA8d2VpQHpodW8ub3JnPgorKiogRmlsZW5hbWUuLi4uLi46ICBzbGlkZXIuanMKKyoqIExhc3QgY2hhbmdlZC4uOiAgMzEgTWFyIDIwMDQgCisqKiBOb3Rlcy4uLi4uLi4uLjogIFdvcmtzIGluIElFIGFuZCBNb3ppbGxhCisqKi8gCisKK3ZhciBpZT1kb2N1bWVudC5hbGwKK3ZhciBuczY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQmJiFkb2N1bWVudC5hbGwKKworZG9jdW1lbnQub25tb3VzZXVwID0gY2FwdHVyZVN0b3A7CisKK3ZhciBjdXJyZW50U2xpZGVyID0gbnVsbCxzbGlkZXJGaWVsZCA9IG51bGw7Cit2YXIgcmFuZ2VNaW4gPSBudWxsLCByYW5nZU1heD0gbnVsbCwgc3ggPSAtMSwgc3kgPSAtMSwgaW5pdFg9MDsKKworZnVuY3Rpb24gZ2V0TW91c2VYWShlKSB7CisKKyAgICAvL2FsZXJ0KCdoZWxsbycpOworICAgIHggPSBuczY/IGUuY2xpZW50WDogZXZlbnQuY2xpZW50WAorICAgIHkgPSBuczY/IGUuY2xpZW50WTogZXZlbnQuY2xpZW50WQorICAgIAorICAgIGlmIChzeCA8IDApIHN4ID0geDsgaWYgKHN5IDwgMCkgc3kgPSB5OworCisgICAgdmFyIGR4ID0gaW5pdFggKyh4LXN4KTsKKyAgICAKKyAgICBpZiAoZHggPD0gcmFuZ2VNaW4pCisgICAgICAgIGR4ID0gcmFuZ2VNaW47CisgICAgZWxzZSBpZiAoZHggPj0gcmFuZ2VNYXgpCisgICAgICAgIGR4ID0gcmFuZ2VNYXg7CisKKyAgICB2YXIgcmFuZ2UgPSAoZHgtcmFuZ2VNaW4pLyhyYW5nZU1heCAtIHJhbmdlTWluKSoxMDA7CisKKyAgICBpZiAoY3VycmVudFNsaWRlciAhPSAgbnVsbCkKKyAgICAgICAgY3VycmVudFNsaWRlci5zdHlsZS5sZWZ0ID0gZHgrInB4IjsKKyAgICAgICAgCisgICAgaWYgKHNsaWRlckZpZWxkICE9IG51bGwpCisgICAgeworICAgICAgICBzbGlkZXJGaWVsZC52YWx1ZSA9IHBhcnNlSW50KHJhbmdlKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworCit9CisKK2Z1bmN0aW9uIGluaXRTbGlkZXIoKQoreworICAgIGlmIChjdXJyZW50U2xpZGVyID09IG51bGwpCisgICAgICAgIGN1cnJlbnRTbGlkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2xpZGVyYmFyJyk7CisgICAKKyAgICBpZiAoc2xpZGVyRmllbGQgPT0gbnVsbCkKKyAgICAgICAgc2xpZGVyRmllbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncXVhbGl0eScpOworCisgICAgaWYgKHJhbmdlTWluID09IG51bGwpCisgICAgICAgIHJhbmdlTWluID0gMworICAgIGlmIChyYW5nZU1heCA9PSBudWxsKQorICAgIHsKKyAgICAgICAgdmFyIHRyYWNrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NsaWRlcnRyYWNrJyk7CisgICAgICAgIHJhbmdlTWF4ID0gcGFyc2VJbnQodHJhY2suc3R5bGUud2lkdGgpOworICAgIH0KKworfQorCitmdW5jdGlvbiB1cGRhdGVTbGlkZXIodmFsdWUpCit7CisgICAgaW5pdFNsaWRlcigpOworCisgICAgdmFyIG5ld1ZhbHVlID0gcGFyc2VJbnQodmFsdWUpLzEwMCoocmFuZ2VNYXgtcmFuZ2VNaW4pOworCisgICAgaWYgKG5ld1ZhbHVlIDw9IHJhbmdlTWluKQorICAgICAgICBuZXdWYWx1ZSA9IHJhbmdlTWluOworICAgIGVsc2UgaWYgKG5ld1ZhbHVlID49IHJhbmdlTWF4KQorICAgICAgICBuZXdWYWx1ZSA9IHJhbmdlTWF4OworCisgICAgaWYgKGN1cnJlbnRTbGlkZXIgIT0gIG51bGwpCisgICAgICAgIGN1cnJlbnRTbGlkZXIuc3R5bGUubGVmdCA9IG5ld1ZhbHVlKyJweCI7CisgICAgCisgICAgdmFyIHJhbmdlID0gbmV3VmFsdWUvKHJhbmdlTWF4IC0gcmFuZ2VNaW4pKjEwMDsKKworICAgIGlmIChzbGlkZXJGaWVsZCAhPSBudWxsKQorICAgICAgICBzbGlkZXJGaWVsZC52YWx1ZSA9IHBhcnNlSW50KHJhbmdlKTsKK30KKworZnVuY3Rpb24gY2FwdHVyZVN0YXJ0KCkKK3sKKyAgICAKKyAgICBpbml0U2xpZGVyKCk7CisKKyAgICBpbml0WCA9IHBhcnNlSW50KGN1cnJlbnRTbGlkZXIuc3R5bGUubGVmdCk7CisgICAgaWYgKGluaXRYID4gcmFuZ2VNYXgpCisgICAgICAgIGluaXRYID0gcmFuZ2VNYXg7CisgICAgZWxzZSBpZiAoaW5pdFggPCByYW5nZU1pbikKKyAgICAgICAgaW5pdFggPSByYW5nZU1pbjsKKworICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZ2V0TW91c2VYWTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gY2FwdHVyZVN0b3AoKQoreworICAgIHN4ID0gLTE7IHN5ID0gLTE7CisgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBudWxsOworICAgIHJldHVybiBmYWxzZTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9hc3NldHMvd3pfanNncmFwaGljcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2Fzc2V0cy93el9qc2dyYXBoaWNzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YzIxNTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9hc3NldHMvd3pfanNncmFwaGljcy5qcwpAQCAtMCwwICsxLDkyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiBUaXRsZS4uLi4uLi4uLjogIEphdmFzY3JpcHQgR3JhcGhpY3MKKyoqIFZlcnNpb24uLi4uLi4uOiAgMS4wCisqKiBBdXRob3IuLi4uLi4uLjogIFhpYW5nIFdlaSBaSFVPIDx3ZWlAemh1by5vcmc+CisqKiBGaWxlbmFtZS4uLi4uLjogIHd6X2pzZ3JhcGhpY3MuanMKKyoqIExhc3QgY2hhbmdlZC4uOiAgMzEgQXVnIDIwMDMgIAorKiogTm90ZXMuLi4uLi4uLi46ICBNb2RpZmllZCBmb3IgSW1hZ2UgRWRpdG9yLCBhZGRlZCBleHRyYSBjb21tYW5kcworKiovIAorCisvKiBUaGlzIG5vdGljZSBtdXN0IGJlIHVudG91Y2hlZCBhdCBhbGwgdGltZXMuCisKK3d6X2pzZ3JhcGhpY3MuanMgICAgdi4gMi4wMworVGhlIGxhdGVzdCB2ZXJzaW9uIGlzIGF2YWlsYWJsZSBhdAoraHR0cDovL3d3dy53YWx0ZXJ6b3JuLmNvbQorb3IgaHR0cDovL3d3dy5kZXZpcmEuY29tCitvciBodHRwOi8vd3d3LndhbHRlcnpvcm4uZGUKKworQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgV2FsdGVyIFpvcm4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitDcmVhdGVkIDMuIDExLiAyMDAyIGJ5IFdhbHRlciBab3JuIDx3YWx0ZXJAa3JldXpvdHRlci5kZT4KK0xhc3QgbW9kaWZpZWQ6IDExLiA2LiAyMDAzCisKK0hpZ2ggUGVyZm9ybWFuY2UgSmF2YVNjcmlwdCBHcmFwaGljcyBMaWJyYXJ5LgorUHJvdmlkZXMgbWV0aG9kcworLSB0byBkcmF3IGxpbmVzLCByZWN0YW5nbGVzLCBlbGxpcHNlcywgcG9seWdvbnMKKyAgd2l0aCBzcGVjaWZpYWJsZSBsaW5lIHRoaWNrbmVzcywKKy0gdG8gZmlsbCByZWN0YW5nbGVzIGFuZCBlbGxpcHNlcworLSB0byBkcmF3IHRleHQuCitOT1RFOiBPcGVyYXRpb25zLCBmdW5jdGlvbnMgYW5kIGJyYW5jaGluZyBoYXZlIHJhdGhlciBiZWVuIG9wdGltaXplZAordG8gZWZmaWNpZW5jeSBhbmQgc3BlZWQgdGhhbiB0byBzaG9ydG5lc3Mgb2Ygc291cmNlIGNvZGUuCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOworeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK2VpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsKK3dpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCitTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithdCBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwgZm9yIG1vcmUgZGV0YWlscy4KKyovCisKKworCisKKwordmFyIGpnX2lodG0sIGpnX2llLCBqZ19kb20sCitqZ19uNCA9IChkb2N1bWVudC5sYXllcnMgJiYgdHlwZW9mIGRvY3VtZW50LmNsYXNzZXMgIT0gInVuZGVmaW5lZCIpOworCisKKworCisKK2Z1bmN0aW9uIGNoa0RIVE0oeCwgaSkKK3sKKyAgICB4ID0gZG9jdW1lbnQuYm9keSB8fCBudWxsOworICAgIGpnX2llID0gKHggJiYgdHlwZW9mIHguaW5zZXJ0QWRqYWNlbnRIVE1MICE9ICJ1bmRlZmluZWQiKTsKKyAgICBqZ19kb20gPSAoeCAmJiAhamdfaWUgJiYKKyAgICAgICAgdHlwZW9mIHguYXBwZW5kQ2hpbGQgIT0gInVuZGVmaW5lZCIgJiYKKyAgICAgICAgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZVJhbmdlICE9ICJ1bmRlZmluZWQiICYmCisgICAgICAgIHR5cGVvZiAoaSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkpLnNldFN0YXJ0QmVmb3JlICE9ICJ1bmRlZmluZWQiICYmCisgICAgICAgIHR5cGVvZiBpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCAhPSAidW5kZWZpbmVkIik7CisgICAgamdfaWh0bSA9ICghamdfaWUgJiYgIWpnX2RvbSAmJiB4ICYmIHR5cGVvZiB4LmlubmVySFRNTCAhPSAidW5kZWZpbmVkIik7Cit9CisKKworCisKKworZnVuY3Rpb24gcG50RG9jKCkKK3sKKyAgICB0aGlzLnduZC5kb2N1bWVudC53cml0ZSh0aGlzLmh0bSk7CisgICAgdGhpcy5odG0gPSAnJzsKK30KKworCisKKworCitmdW5jdGlvbiBwbnRDbnZEb20oKQoreworICAgIHZhciB4ID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKKyAgICB4LnNldFN0YXJ0QmVmb3JlKHRoaXMuY252KTsKKyAgICB4ID0geC5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodGhpcy5odG0pOworICAgIHRoaXMuY252LmFwcGVuZENoaWxkKHgpOworICAgIHRoaXMuaHRtID0gJyc7Cit9CisKKworCisKKworZnVuY3Rpb24gcG50Q252SWUoKQoreworICAgIHRoaXMuY252Lmluc2VydEFkamFjZW50SFRNTCgiQmVmb3JlRW5kIiwgdGhpcy5odG0pOworICAgIHRoaXMuaHRtID0gJyc7Cit9CisKKworCisKKworZnVuY3Rpb24gcG50Q252SWh0bSgpCit7CisgICAgdGhpcy5jbnYuaW5uZXJIVE1MICs9IHRoaXMuaHRtOworICAgIHRoaXMuaHRtID0gJyc7Cit9CisKKworCisKKworZnVuY3Rpb24gcG50Q252KCkKK3sKKyAgICB0aGlzLmh0bSA9ICcnOworfQorCisKKworCisKK2Z1bmN0aW9uIG1rRGl2KHgsIHksIHcsIGgpCit7CisgICAgdGhpcy5odG0gKz0gJzxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOycrCisgICAgICAgICdsZWZ0OicgKyB4ICsgJ3B4OycrCisgICAgICAgICd0b3A6JyArIHkgKyAncHg7JysKKyAgICAgICAgJ3dpZHRoOicgKyB3ICsgJ3B4OycrCisgICAgICAgICdoZWlnaHQ6JyArIGggKyAncHg7JysKKyAgICAgICAgJ2NsaXA6cmVjdCgwLCcrdysncHgsJytoKydweCwwKTsnKworICAgICAgICAnb3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6JyArIHRoaXMuY29sb3IgKyAnOycrCisgICAgICAgICciPjxcL2Rpdj4nOworCisgICAgLy9hbGVydCh0aGlzLmh0bSk7Cit9CisKKworCisKK2Z1bmN0aW9uIG1rRGl2UHJpbnQoeCwgeSwgdywgaCkKK3sKKyAgICB0aGlzLmh0bSArPSAnPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7JysKKyAgICAgICAgJ2JvcmRlci1sZWZ0OicgKyB3ICsgJ3B4IHNvbGlkICcgKyB0aGlzLmNvbG9yICsgJzsnKworICAgICAgICAnbGVmdDonICsgeCArICdweDsnKworICAgICAgICAndG9wOicgKyB5ICsgJ3B4OycrCisgICAgICAgICd3aWR0aDonICsgdyArICdweDsnKworICAgICAgICAnaGVpZ2h0OicgKyBoICsgJ3B4OycrCisgICAgICAgICdjbGlwOnJlY3QoMCwnK3crJ3B4LCcraCsncHgsMCk7JysKKyAgICAgICAgJ292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOicgKyB0aGlzLmNvbG9yICsgJzsnKworICAgICAgICAnIj48XC9kaXY+JzsKK30KKworCisKKworCitmdW5jdGlvbiBta0x5cih4LCB5LCB3LCBoKQoreworICAgIHRoaXMuaHRtICs9ICc8bGF5ZXIgJysKKyAgICAgICAgJ2xlZnQ9IicgKyB4ICsgJyIgJysKKyAgICAgICAgJ3RvcD0iJyArIHkgKyAnIiAnKworICAgICAgICAnd2lkdGg9IicgKyB3ICsgJyIgJysKKyAgICAgICAgJ2hlaWdodD0iJyArIGggKyAnIiAnKworICAgICAgICAnYmdjb2xvcj0iJyArIHRoaXMuY29sb3IgKyAnIj48XC9sYXllcj5cbic7Cit9CisKKworCisKKworZnVuY3Rpb24gbWtMYmwodHh0LCB4LCB5KQoreworICAgIHRoaXMuaHRtICs9ICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aGl0ZS1zcGFjZTpub3dyYXA7JysKKyAgICAgICAgJ2xlZnQ6JyArIHggKyAncHg7JysKKyAgICAgICAgJ3RvcDonICsgeSArICdweDsnKworICAgICAgICAnZm9udC1mYW1pbHk6JyArICB0aGlzLmZ0RmFtICsgJzsnKworICAgICAgICAnZm9udC1zaXplOicgKyB0aGlzLmZ0U3ogKyAnOycrCisgICAgICAgICdjb2xvcjonICsgdGhpcy5jb2xvciArICc7JyArIHRoaXMuZnRTdHkgKyAnIj4nKworICAgICAgICB0eHQgKworICAgICAgICAnPFwvZGl2Pic7Cit9CisKKworCisKKworZnVuY3Rpb24gbWtMaW4oeDEsIHkxLCB4MiwgeTIpCit7CisgICAgaWYgKHgxID4geDIpCisgICAgeworICAgICAgICB2YXIgX3gyID0geDI7CisgICAgICAgIHZhciBfeTIgPSB5MjsKKyAgICAgICAgeDIgPSB4MTsKKyAgICAgICAgeTIgPSB5MTsKKyAgICAgICAgeDEgPSBfeDI7CisgICAgICAgIHkxID0gX3kyOworICAgIH0KKyAgICB2YXIgZHggPSB4Mi14MSwgZHkgPSBNYXRoLmFicyh5Mi15MSksCisgICAgeCA9IHgxLCB5ID0geTEsCisgICAgeUluY3IgPSAoeTEgPiB5Mik/IC0xIDogMTsKKworICAgIGlmIChkeCA+PSBkeSkKKyAgICB7CisgICAgICAgIHZhciBwciA9IGR5PDwxLAorICAgICAgICBwcnUgPSBwciAtIChkeDw8MSksCisgICAgICAgIHAgPSBwci1keCwKKyAgICAgICAgb3ggPSB4OworICAgICAgICB3aGlsZSAoKGR4LS0pID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgKyt4OworICAgICAgICAgICAgaWYgKHAgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRoaXMubWtEaXYob3gsIHksIHgtb3gsIDEpOworICAgICAgICAgICAgICAgIHkgKz0geUluY3I7CisgICAgICAgICAgICAgICAgcCArPSBwcnU7CisgICAgICAgICAgICAgICAgb3ggPSB4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBwICs9IHByOworICAgICAgICB9CisgICAgICAgIHRoaXMubWtEaXYob3gsIHksIHgyLW94KzEsIDEpOworICAgIH0KKworICAgIGVsc2UKKyAgICB7CisgICAgICAgIHZhciBwciA9IGR4PDwxLAorICAgICAgICBwcnUgPSBwciAtIChkeTw8MSksCisgICAgICAgIHAgPSBwci1keSwKKyAgICAgICAgb3kgPSB5OworICAgICAgICBpZiAoeTIgPD0geTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlICgoZHktLSkgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChwID4gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMubWtEaXYoeCsrLCB5LCAxLCBveS15KzEpOworICAgICAgICAgICAgICAgICAgICB5ICs9IHlJbmNyOworICAgICAgICAgICAgICAgICAgICBwICs9IHBydTsKKyAgICAgICAgICAgICAgICAgICAgb3kgPSB5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB5ICs9IHlJbmNyOworICAgICAgICAgICAgICAgICAgICBwICs9IHByOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMubWtEaXYoeDIsIHkyLCAxLCBveS15MisxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlICgoZHktLSkgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHkgKz0geUluY3I7CisgICAgICAgICAgICAgICAgaWYgKHAgPiAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5ta0Rpdih4KyssIG95LCAxLCB5LW95KTsKKyAgICAgICAgICAgICAgICAgICAgcCArPSBwcnU7CisgICAgICAgICAgICAgICAgICAgIG95ID0geTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBwICs9IHByOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5ta0Rpdih4Miwgb3ksIDEsIHkyLW95KzEpOworICAgICAgICB9CisgICAgfQorfQorCisKKworCisKK2Z1bmN0aW9uIG1rTGluMkQoeDEsIHkxLCB4MiwgeTIpCit7CisgICAgaWYgKHgxID4geDIpCisgICAgeworICAgICAgICB2YXIgX3gyID0geDI7CisgICAgICAgIHZhciBfeTIgPSB5MjsKKyAgICAgICAgeDIgPSB4MTsKKyAgICAgICAgeTIgPSB5MTsKKyAgICAgICAgeDEgPSBfeDI7CisgICAgICAgIHkxID0gX3kyOworICAgIH0KKyAgICB2YXIgZHggPSB4Mi14MSwgZHkgPSBNYXRoLmFicyh5Mi15MSksCisgICAgeCA9IHgxLCB5ID0geTEsCisgICAgeUluY3IgPSAoeTEgPiB5Mik/IC0xIDogMTsKKworCisgICAgdmFyIHMgPSB0aGlzLnN0cm9rZTsKKyAgICBpZiAoZHggPj0gZHkpCisgICAgeworICAgICAgICBpZiAocy0weDMgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgX3MgPSAocypkeCpNYXRoLnNxcnQoMStkeSpkeS8oZHgqZHgpKS1keC0ocz4+MSkqZHkpIC8gZHg7CisgICAgICAgICAgICBfcyA9ICghKHMtMHg0KT8gTWF0aC5jZWlsKF9zKSA6IE1hdGgucm91bmQoX3MpKSArIDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB2YXIgX3MgPSBzOworICAgICAgICB2YXIgYWQgPSBNYXRoLmNlaWwocy8yKTsKKworICAgICAgICB2YXIgcHIgPSBkeTw8MSwKKyAgICAgICAgcHJ1ID0gcHIgLSAoZHg8PDEpLAorICAgICAgICBwID0gcHItZHgsCisgICAgICAgIG94ID0geDsKKyAgICAgICAgd2hpbGUgKChkeC0tKSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgICsreDsKKyAgICAgICAgICAgIGlmIChwID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aGlzLm1rRGl2KG94LCB5LCB4LW94K2FkLCBfcyk7CisgICAgICAgICAgICAgICAgeSArPSB5SW5jcjsKKyAgICAgICAgICAgICAgICBwICs9IHBydTsKKyAgICAgICAgICAgICAgICBveCA9IHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHAgKz0gcHI7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5ta0RpdihveCwgeSwgeDItb3grYWQrMSwgX3MpOworICAgIH0KKworICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChzLTB4MyA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBfcyA9IChzKmR5Kk1hdGguc3FydCgxK2R4KmR4LyhkeSpkeSkpLShzPj4xKSpkeC1keSkgLyBkeTsKKyAgICAgICAgICAgIF9zID0gKCEocy0weDQpPyBNYXRoLmNlaWwoX3MpIDogTWF0aC5yb3VuZChfcykpICsgMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHZhciBfcyA9IHM7CisgICAgICAgIHZhciBhZCA9IE1hdGgucm91bmQocy8yKTsKKworICAgICAgICB2YXIgcHIgPSBkeDw8MSwKKyAgICAgICAgcHJ1ID0gcHIgLSAoZHk8PDEpLAorICAgICAgICBwID0gcHItZHksCisgICAgICAgIG95ID0geTsKKyAgICAgICAgaWYgKHkyIDw9IHkxKQorICAgICAgICB7CisgICAgICAgICAgICArK2FkOworICAgICAgICAgICAgd2hpbGUgKChkeS0tKSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHAgPiAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5ta0Rpdih4KyssIHksIF9zLCBveS15K2FkKTsKKyAgICAgICAgICAgICAgICAgICAgeSArPSB5SW5jcjsKKyAgICAgICAgICAgICAgICAgICAgcCArPSBwcnU7CisgICAgICAgICAgICAgICAgICAgIG95ID0geTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgeSArPSB5SW5jcjsKKyAgICAgICAgICAgICAgICAgICAgcCArPSBwcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLm1rRGl2KHgyLCB5MiwgX3MsIG95LXkyK2FkKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlICgoZHktLSkgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHkgKz0geUluY3I7CisgICAgICAgICAgICAgICAgaWYgKHAgPiAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5ta0Rpdih4KyssIG95LCBfcywgeS1veSthZCk7CisgICAgICAgICAgICAgICAgICAgIHAgKz0gcHJ1OworICAgICAgICAgICAgICAgICAgICBveSA9IHk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgcCArPSBwcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMubWtEaXYoeDIsIG95LCBfcywgeTItb3krYWQrMSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKworCisKKworZnVuY3Rpb24gbWtMaW5Eb3R0KHgxLCB5MSwgeDIsIHkyKQoreworICAgIGlmICh4MSA+IHgyKQorICAgIHsKKyAgICAgICAgdmFyIF94MiA9IHgyOworICAgICAgICB2YXIgX3kyID0geTI7CisgICAgICAgIHgyID0geDE7CisgICAgICAgIHkyID0geTE7CisgICAgICAgIHgxID0gX3gyOworICAgICAgICB5MSA9IF95MjsKKyAgICB9CisgICAgdmFyIGR4ID0geDIteDEsIGR5ID0gTWF0aC5hYnMoeTIteTEpLAorICAgIHggPSB4MSwgeSA9IHkxLAorICAgIHlJbmNyID0gKHkxID4geTIpPyAtMSA6IDEsCisgICAgZHJ3ID0gdHJ1ZTsKKyAgICBpZiAoZHggPj0gZHkpCisgICAgeworICAgICAgICB2YXIgcHIgPSBkeTw8MSwKKyAgICAgICAgcHJ1ID0gcHIgLSAoZHg8PDEpLAorICAgICAgICBwID0gcHItZHg7CisgICAgICAgIHdoaWxlICgoZHgtLSkgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZHJ3KSB0aGlzLm1rRGl2KHgsIHksIDEsIDEpOworICAgICAgICAgICAgZHJ3ID0gIWRydzsKKyAgICAgICAgICAgIGlmIChwID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB5ICs9IHlJbmNyOworICAgICAgICAgICAgICAgIHAgKz0gcHJ1OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBwICs9IHByOworICAgICAgICAgICAgKyt4OworICAgICAgICB9CisgICAgICAgIGlmIChkcncpIHRoaXMubWtEaXYoeCwgeSwgMSwgMSk7CisgICAgfQorCisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdmFyIHByID0gZHg8PDEsCisgICAgICAgIHBydSA9IHByIC0gKGR5PDwxKSwKKyAgICAgICAgcCA9IHByLWR5OworICAgICAgICB3aGlsZSAoKGR5LS0pID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGRydykgdGhpcy5ta0Rpdih4LCB5LCAxLCAxKTsKKyAgICAgICAgICAgIGRydyA9ICFkcnc7CisgICAgICAgICAgICB5ICs9IHlJbmNyOworICAgICAgICAgICAgaWYgKHAgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICsreDsKKyAgICAgICAgICAgICAgICBwICs9IHBydTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgcCArPSBwcjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHJ3KSB0aGlzLm1rRGl2KHgsIHksIDEsIDEpOworICAgIH0KK30KKworCisKKworCitmdW5jdGlvbiBta092KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCkKK3sKKyAgICB2YXIgYSA9IHdpZHRoPj4xLCBiID0gaGVpZ2h0Pj4xLAorICAgIHdvZCA9IHdpZHRoJjEsIGhvZCA9IChoZWlnaHQmMSkrMSwKKyAgICBjeCA9IGxlZnQrYSwgY3kgPSB0b3ArYiwKKyAgICB4ID0gMCwgeSA9IGIsCisgICAgb3ggPSAwLCBveSA9IGIsCisgICAgYWEgPSAoYSphKTw8MSwgYmIgPSAoYipiKTw8MSwKKyAgICBzdCA9IChhYT4+MSkqKDEtKGI8PDEpKSArIGJiLAorICAgIHR0ID0gKGJiPj4xKSAtIGFhKigoYjw8MSktMSksCisgICAgdywgaDsKKyAgICB3aGlsZSAoeSA+IDApCisgICAgeworICAgICAgICBpZiAoc3QgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBzdCArPSBiYiooKHg8PDEpKzB4Myk7CisgICAgICAgICAgICB0dCArPSAoYmI8PDEpKigrK3gpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR0IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgc3QgKz0gYmIqKCh4PDwxKSsweDMpIC0gKGFhPDwxKSooeS0xKTsKKyAgICAgICAgICAgIHR0ICs9IChiYjw8MSkqKCsreCkgLSBhYSooKCh5LS0pPDwxKS0weDMpOworICAgICAgICAgICAgdyA9IHgtb3g7CisgICAgICAgICAgICBoID0gb3kteTsKKyAgICAgICAgICAgIGlmICh3JjB4MiAmJiBoJjB4MikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aGlzLm1rT3ZRZHMoY3gsIGN5LCAteCsweDIsIG94K3dvZCwgLW95LCBveS0xK2hvZCwgMSwgMSk7CisgICAgICAgICAgICAgICAgdGhpcy5ta092UWRzKGN4LCBjeSwgLXgrMSwgeC0xK3dvZCwgLXktMSwgeStob2QsIDEsIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB0aGlzLm1rT3ZRZHMoY3gsIGN5LCAteCsxLCBveCt3b2QsIC1veSwgb3ktaCtob2QsIHcsIGgpOworICAgICAgICAgICAgb3ggPSB4OworICAgICAgICAgICAgb3kgPSB5OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdHQgLT0gYWEqKCh5PDwxKS0weDMpOworICAgICAgICAgICAgc3QgLT0gKGFhPDwxKSooLS15KTsKKyAgICAgICAgfQorICAgIH0KKyAgICB0aGlzLm1rRGl2KGN4LWEsIGN5LW95LCBhLW94KzEsIChveTw8MSkraG9kKTsKKyAgICB0aGlzLm1rRGl2KGN4K294K3dvZCwgY3ktb3ksIGEtb3grMSwgKG95PDwxKStob2QpOworfQorCisKKworCisKK2Z1bmN0aW9uIG1rT3YyRChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpCit7CisgICAgdmFyIHMgPSB0aGlzLnN0cm9rZTsKKyAgICB3aWR0aCArPSBzLTE7CisgICAgaGVpZ2h0ICs9IHMtMTsKKyAgICB2YXIgYSA9IHdpZHRoPj4xLCBiID0gaGVpZ2h0Pj4xLAorICAgIHdvZCA9IHdpZHRoJjEsIGhvZCA9IChoZWlnaHQmMSkrMSwKKyAgICBjeCA9IGxlZnQrYSwgY3kgPSB0b3ArYiwKKyAgICB4ID0gMCwgeSA9IGIsCisgICAgYWEgPSAoYSphKTw8MSwgYmIgPSAoYipiKTw8MSwKKyAgICBzdCA9IChhYT4+MSkqKDEtKGI8PDEpKSArIGJiLAorICAgIHR0ID0gKGJiPj4xKSAtIGFhKigoYjw8MSktMSk7CisKKworICAgIGlmIChzLTB4NCA8IDAgJiYgKCEocy0weDIpIHx8IHdpZHRoLTB4MzMgPiAwICYmIGhlaWdodC0weDMzID4gMCkpCisgICAgeworICAgICAgICB2YXIgb3ggPSAwLCBveSA9IGIsCisgICAgICAgIHcsIGgsCisgICAgICAgIHB4bCwgcHhyLCBweHQsIHB4YiwgcHh3OworICAgICAgICB3aGlsZSAoeSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzdCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3QgKz0gYmIqKCh4PDwxKSsweDMpOworICAgICAgICAgICAgICAgIHR0ICs9IChiYjw8MSkqKCsreCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0dCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3QgKz0gYmIqKCh4PDwxKSsweDMpIC0gKGFhPDwxKSooeS0xKTsKKyAgICAgICAgICAgICAgICB0dCArPSAoYmI8PDEpKigrK3gpIC0gYWEqKCgoeS0tKTw8MSktMHgzKTsKKyAgICAgICAgICAgICAgICB3ID0geC1veDsKKyAgICAgICAgICAgICAgICBoID0gb3kteTsKKworICAgICAgICAgICAgICAgIGlmICh3LTEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBweHcgPSB3KzErKHMmMSk7CisgICAgICAgICAgICAgICAgICAgIGggPSBzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChoLTEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBweHcgPSBzOworICAgICAgICAgICAgICAgICAgICBoICs9IDErKHMmMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgcHh3ID0gaCA9IHM7CisgICAgICAgICAgICAgICAgdGhpcy5ta092UWRzKGN4LCBjeSwgLXgrMSwgb3gtcHh3K3crd29kLCAtb3ksIC1oK295K2hvZCwgcHh3LCBoKTsKKyAgICAgICAgICAgICAgICBveCA9IHg7CisgICAgICAgICAgICAgICAgb3kgPSB5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHR0IC09IGFhKigoeTw8MSktMHgzKTsKKyAgICAgICAgICAgICAgICBzdCAtPSAoYWE8PDEpKigtLXkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMubWtEaXYoY3gtYSwgY3ktb3ksIHMsIChveTw8MSkraG9kKTsKKyAgICAgICAgdGhpcy5ta0RpdihjeCthK3dvZC1zKzEsIGN5LW95LCBzLCAob3k8PDEpK2hvZCk7CisgICAgfQorCisKKyAgICBlbHNlCisgICAgeworICAgICAgICB2YXIgX2EgPSAod2lkdGgtKChzLTEpPDwxKSk+PjEsCisgICAgICAgIF9iID0gKGhlaWdodC0oKHMtMSk8PDEpKT4+MSwKKyAgICAgICAgX3ggPSAwLCBfeSA9IF9iLAorICAgICAgICBfYWEgPSAoX2EqX2EpPDwxLCBfYmIgPSAoX2IqX2IpPDwxLAorICAgICAgICBfc3QgPSAoX2FhPj4xKSooMS0oX2I8PDEpKSArIF9iYiwKKyAgICAgICAgX3R0ID0gKF9iYj4+MSkgLSBfYWEqKChfYjw8MSktMSksCisKKyAgICAgICAgcHhsID0gbmV3IEFycmF5KCksCisgICAgICAgIHB4dCA9IG5ldyBBcnJheSgpLAorICAgICAgICBfcHhiID0gbmV3IEFycmF5KCk7CisgICAgICAgIHB4bFswXSA9IDA7CisgICAgICAgIHB4dFswXSA9IGI7CisgICAgICAgIF9weGJbMF0gPSBfYi0xOworICAgICAgICB3aGlsZSAoeSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzdCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3QgKz0gYmIqKCh4PDwxKSsweDMpOworICAgICAgICAgICAgICAgIHR0ICs9IChiYjw8MSkqKCsreCk7CisgICAgICAgICAgICAgICAgcHhsW3B4bC5sZW5ndGhdID0geDsKKyAgICAgICAgICAgICAgICBweHRbcHh0Lmxlbmd0aF0gPSB5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodHQgPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ICs9IGJiKigoeDw8MSkrMHgzKSAtIChhYTw8MSkqKHktMSk7CisgICAgICAgICAgICAgICAgdHQgKz0gKGJiPDwxKSooKyt4KSAtIGFhKigoKHktLSk8PDEpLTB4Myk7CisgICAgICAgICAgICAgICAgcHhsW3B4bC5sZW5ndGhdID0geDsKKyAgICAgICAgICAgICAgICBweHRbcHh0Lmxlbmd0aF0gPSB5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHR0IC09IGFhKigoeTw8MSktMHgzKTsKKyAgICAgICAgICAgICAgICBzdCAtPSAoYWE8PDEpKigtLXkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoX3kgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChfc3QgPCAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgX3N0ICs9IF9iYiooKF94PDwxKSsweDMpOworICAgICAgICAgICAgICAgICAgICBfdHQgKz0gKF9iYjw8MSkqKCsrX3gpOworICAgICAgICAgICAgICAgICAgICBfcHhiW19weGIubGVuZ3RoXSA9IF95LTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKF90dCA8IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBfc3QgKz0gX2JiKigoX3g8PDEpKzB4MykgLSAoX2FhPDwxKSooX3ktMSk7CisgICAgICAgICAgICAgICAgICAgIF90dCArPSAoX2JiPDwxKSooKytfeCkgLSBfYWEqKCgoX3ktLSk8PDEpLTB4Myk7CisgICAgICAgICAgICAgICAgICAgIF9weGJbX3B4Yi5sZW5ndGhdID0gX3ktMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgX3R0IC09IF9hYSooKF95PDwxKS0weDMpOworICAgICAgICAgICAgICAgICAgICBfc3QgLT0gKF9hYTw8MSkqKC0tX3kpOworICAgICAgICAgICAgICAgICAgICBfcHhiW19weGIubGVuZ3RoLTFdLS07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFyIG94ID0gMCwgb3kgPSBiLAorICAgICAgICBfb3kgPSBfcHhiWzBdLAorICAgICAgICBsID0gcHhsLmxlbmd0aCwKKyAgICAgICAgdywgaDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgX3B4YltpXSAhPSAidW5kZWZpbmVkIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoX3B4YltpXSA8IF9veSB8fCBweHRbaV0gPCBveSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHggPSBweGxbaV07CisgICAgICAgICAgICAgICAgICAgIHRoaXMubWtPdlFkcyhjeCwgY3ksIC14KzEsIG94K3dvZCwgLW95LCBfb3kraG9kLCB4LW94LCBveS1fb3kpOworICAgICAgICAgICAgICAgICAgICBveCA9IHg7CisgICAgICAgICAgICAgICAgICAgIG95ID0gcHh0W2ldOworICAgICAgICAgICAgICAgICAgICBfb3kgPSBfcHhiW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB4ID0gcHhsW2ldOworICAgICAgICAgICAgICAgIHRoaXMubWtEaXYoY3gteCsxLCBjeS1veSwgMSwgKG95PDwxKStob2QpOworICAgICAgICAgICAgICAgIHRoaXMubWtEaXYoY3grb3grd29kLCBjeS1veSwgMSwgKG95PDwxKStob2QpOworICAgICAgICAgICAgICAgIG94ID0geDsKKyAgICAgICAgICAgICAgICBveSA9IHB4dFtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLm1rRGl2KGN4LWEsIGN5LW95LCAxLCAob3k8PDEpK2hvZCk7CisgICAgICAgIHRoaXMubWtEaXYoY3grb3grd29kLCBjeS1veSwgMSwgKG95PDwxKStob2QpOworICAgIH0KK30KKworCisKKworCitmdW5jdGlvbiBta092RG90dChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpCit7CisgICAgdmFyIGEgPSB3aWR0aD4+MSwgYiA9IGhlaWdodD4+MSwKKyAgICB3b2QgPSB3aWR0aCYxLCBob2QgPSBoZWlnaHQmMSwKKyAgICBjeCA9IGxlZnQrYSwgY3kgPSB0b3ArYiwKKyAgICB4ID0gMCwgeSA9IGIsCisgICAgYWEyID0gKGEqYSk8PDEsIGFhNCA9IGFhMjw8MSwgYmIgPSAoYipiKTw8MSwKKyAgICBzdCA9IChhYTI+PjEpKigxLShiPDwxKSkgKyBiYiwKKyAgICB0dCA9IChiYj4+MSkgLSBhYTIqKChiPDwxKS0xKSwKKyAgICBkcncgPSB0cnVlOworICAgIHdoaWxlICh5ID4gMCkKKyAgICB7CisgICAgICAgIGlmIChzdCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0ICs9IGJiKigoeDw8MSkrMHgzKTsKKyAgICAgICAgICAgIHR0ICs9IChiYjw8MSkqKCsreCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBzdCArPSBiYiooKHg8PDEpKzB4MykgLSBhYTQqKHktMSk7CisgICAgICAgICAgICB0dCArPSAoYmI8PDEpKigrK3gpIC0gYWEyKigoKHktLSk8PDEpLTB4Myk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB0dCAtPSBhYTIqKCh5PDwxKS0weDMpOworICAgICAgICAgICAgc3QgLT0gYWE0KigtLXkpOworICAgICAgICB9CisgICAgICAgIGlmIChkcncpIHRoaXMubWtPdlFkcyhjeCwgY3ksIC14LCB4K3dvZCwgLXksIHkraG9kLCAxLCAxKTsKKyAgICAgICAgZHJ3ID0gIWRydzsKKyAgICB9Cit9CisKKworCisKKworZnVuY3Rpb24gbWtSZWN0KHgsIHksIHcsIGgpCit7CisgICAgdmFyIHMgPSB0aGlzLnN0cm9rZTsKKyAgICB0aGlzLm1rRGl2KHgsIHksIHcsIHMpOworICAgIHRoaXMubWtEaXYoeCt3LCB5LCBzLCBoKTsKKyAgICB0aGlzLm1rRGl2KHgsIHkraCwgdytzLCBzKTsKKyAgICB0aGlzLm1rRGl2KHgsIHkrcywgcywgaC1zKTsKK30KKworCisKKworCitmdW5jdGlvbiBta1JlY3REb3R0KHgsIHksIHcsIGgpCit7CisgICAgdGhpcy5kcmF3TGluZSh4LCB5LCB4K3csIHkpOworICAgIHRoaXMuZHJhd0xpbmUoeCt3LCB5LCB4K3csIHkraCk7CisgICAgdGhpcy5kcmF3TGluZSh4LCB5K2gsIHgrdywgeStoKTsKKyAgICB0aGlzLmRyYXdMaW5lKHgsIHksIHgsIHkraCk7Cit9CisKKworCisKKworZnVuY3Rpb24ganNnRm9udCgpCit7CisgICAgdGhpcy5QTEFJTiA9ICdmb250LXdlaWdodDpub3JtYWw7JzsKKyAgICB0aGlzLkJPTEQgPSAnZm9udC13ZWlnaHQ6Ym9sZDsnOworICAgIHRoaXMuSVRBTElDID0gJ2ZvbnQtc3R5bGU6aXRhbGljOyc7CisgICAgdGhpcy5JVEFMSUNfQk9MRCA9IHRoaXMuSVRBTElDICsgdGhpcy5CT0xEOworICAgIHRoaXMuQk9MRF9JVEFMSUMgPSB0aGlzLklUQUxJQ19CT0xEOworfQordmFyIEZvbnQgPSBuZXcganNnRm9udCgpOworCisKKworCisKK2Z1bmN0aW9uIGpzZ1N0cm9rZSgpCit7CisgICAgdGhpcy5ET1RURUQgPSAtMTsKK30KK3ZhciBTdHJva2UgPSBuZXcganNnU3Ryb2tlKCk7CisKKworCisKKworZnVuY3Rpb24ganNHcmFwaGljcyhpZCwgd25kKQoreworICAgIHRoaXMuc2V0Q29sb3IgPSBuZXcgRnVuY3Rpb24oJ2FyZycsICd0aGlzLmNvbG9yID0gYXJnOycpOworCisKKyAgICB0aGlzLmdldENvbG9yID0gbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcy5jb2xvcicpOworCisgICAgdGhpcy5zZXRTdHJva2UgPSBmdW5jdGlvbih4KQorICAgIHsKKyAgICAgICAgdGhpcy5zdHJva2UgPSB4OworICAgICAgICBpZiAoISh4KzEpKQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLmRyYXdMaW5lID0gbWtMaW5Eb3R0OworICAgICAgICAgICAgdGhpcy5ta092ID0gbWtPdkRvdHQ7CisgICAgICAgICAgICB0aGlzLmRyYXdSZWN0ID0gbWtSZWN0RG90dDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh4LTEgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLmRyYXdMaW5lID0gbWtMaW4yRDsKKyAgICAgICAgICAgIHRoaXMubWtPdiA9IG1rT3YyRDsKKyAgICAgICAgICAgIHRoaXMuZHJhd1JlY3QgPSBta1JlY3Q7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLmRyYXdMaW5lID0gbWtMaW47CisgICAgICAgICAgICB0aGlzLm1rT3YgPSBta092OworICAgICAgICAgICAgdGhpcy5kcmF3UmVjdCA9IG1rUmVjdDsKKyAgICAgICAgfQorICAgIH07CisKKworCisgICAgdGhpcy5zZXRQcmludGFibGUgPSBmdW5jdGlvbihhcmcpCisgICAgeworICAgICAgICB0aGlzLnByaW50YWJsZSA9IGFyZzsKKyAgICAgICAgdGhpcy5ta0RpdiA9IGpnX240PyBta0x5ciA6IGFyZz8gbWtEaXZQcmludCA6IG1rRGl2OworICAgIH07CisKKworCisgICAgdGhpcy5zZXRGb250ID0gZnVuY3Rpb24oZmFtLCBzeiwgc3R5KQorICAgIHsKKyAgICAgICAgdGhpcy5mdEZhbSA9IGZhbTsKKyAgICAgICAgdGhpcy5mdFN6ID0gc3o7CisgICAgICAgIHRoaXMuZnRTdHkgPSBzdHkgfHwgRm9udC5QTEFJTjsKKyAgICB9OworCisKKworICAgIHRoaXMuZHJhd1BvbHlsaW5lID0gdGhpcy5kcmF3UG9seUxpbmUgPSBmdW5jdGlvbih4LCB5LCBzKQorICAgIHsKKyAgICAgICAgdmFyIGkgPSB4Lmxlbmd0aC0xOyB3aGlsZSAoaSA+PSAwKQorICAgICAgICAgICAgdGhpcy5kcmF3TGluZSh4W2ldLCB5W2ldLCB4Wy0taV0sIHlbaV0pOworICAgIH07CisKKworCisgICAgdGhpcy5maWxsUmVjdCA9IGZ1bmN0aW9uKHgsIHksIHcsIGgpCisgICAgeworICAgICAgICB0aGlzLm1rRGl2KHgsIHksIHcsIGgpOworICAgIH07CisKKworICAgIHRoaXMuZmlsbFJlY3RQYXR0ZXJuID0gZnVuY3Rpb24oeCwgeSwgdywgaCwgdXJsKQorICAgIHsKKyAgICAgICAgdGhpcy5odG0gKz0gJzxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOycrCisgICAgICAgICAgICAnbGVmdDonICsgeCArICdweDsnKworICAgICAgICAgICAgJ3RvcDonICsgeSArICdweDsnKworICAgICAgICAgICAgJ3dpZHRoOicgKyB3ICsgJ3B4OycrCisgICAgICAgICAgICAnaGVpZ2h0OicgKyBoICsgJ3B4OycrCisgICAgICAgICAgICAnY2xpcDpyZWN0KDAsJyt3KydweCwnK2grJ3B4LDApOycrCisgICAgICAgICAgICAnb3ZlcmZsb3c6aGlkZGVuOycrCisgICAgICAgICAgICAvLydiYWNrZ3JvdW5kLWNvbG9yOicgKyB0aGlzLmNvbG9yICsgJzsnKworICAgICAgICAgICAgImJhY2tncm91bmQtaW1hZ2U6IHVybCgnIiArIHVybCArICInKTsiKworICAgICAgICAgICAgImxheWVyLWJhY2tncm91bmQtaW1hZ2U6IHVybCgnIiArIHVybCArICInKTsiKworICAgICAgICAgICAgJ3otaW5kZXg6MTAwOyI+PFwvZGl2Pic7CisgICAgICAgIC8vYWxlcnQodGhpcy5odG0pOworICAgIH0KKworICAgIHRoaXMuZHJhd0hhbmRsZSA9IGZ1bmN0aW9uKHgsIHksIHcsIGgsIGN1cnNvcikKKyAgICB7CisgICAgICAgIAorICAgICAgICB0aGlzLmh0bSArPSAnPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7JysKKyAgICAgICAgJ2xlZnQ6JyArIHggKyAncHg7JysKKyAgICAgICAgJ3RvcDonICsgeSArICdweDsnKworICAgICAgICAnd2lkdGg6JyArIHcgKyAncHg7JysKKyAgICAgICAgJ2hlaWdodDonICsgaCArICdweDsnKworICAgICAgICAnY2xpcDpyZWN0KDAsJyt3KydweCwnK2grJ3B4LDApOycrCisgICAgICAgICdwYWRkaW5nOiAycHg7b3ZlcmZsb3c6aGlkZGVuOycrCisgICAgICAgICJjdXJzb3I6ICciICsgY3Vyc29yICsgIic7IisKKyAgICAgICAgJyIgY2xhc3M9ImhhbmRsZUJveCIgaWQ9IicgKyBjdXJzb3IgKyAnIiA+PFwvZGl2Pic7CisgICAgfQorCisgICAgdGhpcy5kcmF3SGFuZGxlQm94ID0gZnVuY3Rpb24oeCwgeSwgdywgaCwgY3Vyc29yKQorICAgIHsKKyAgICAgICAgCisgICAgICAgIHRoaXMuaHRtICs9ICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsnKworICAgICAgICAnbGVmdDonICsgeCArICdweDsnKworICAgICAgICAndG9wOicgKyB5ICsgJ3B4OycrCisgICAgICAgICd3aWR0aDonICsgdyArICdweDsnKworICAgICAgICAnaGVpZ2h0OicgKyBoICsgJ3B4OycrCisgICAgICAgICdjbGlwOnJlY3QoMCwnKyh3KzIpKydweCwnKyhoKzIpKydweCwwKTsnKworICAgICAgICAnb3ZlcmZsb3c6aGlkZGVuOyBib3JkZXI6IHNvbGlkIDFweCAnKyB0aGlzLmNvbG9yKyc7JysKKyAgICAgICAgImN1cnNvcjogJyIgKyBjdXJzb3IgKyAiJzsiKworICAgICAgICAnIiBjbGFzcz0iaGFuZGxlQm94IiBpZD0iJyArIGN1cnNvciArICciID48XC9kaXY+JzsKKworICAgICAgICAKKyAgICB9CisKKyAgICB0aGlzLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24oeCwgeSkKKyAgICB7CisgICAgICAgIHRoaXMuZHJhd1BvbHlsaW5lKHgsIHkpOworICAgICAgICB0aGlzLmRyYXdMaW5lKHhbeC5sZW5ndGgtMV0sIHlbeC5sZW5ndGgtMV0sIHhbMF0sIHlbMF0pOworICAgIH07CisKKworCisgICAgdGhpcy5kcmF3RWxsaXBzZSA9IHRoaXMuZHJhd092YWwgPSBmdW5jdGlvbih4LCB5LCB3LCBoKQorICAgIHsKKyAgICAgICAgdGhpcy5ta092KHgsIHksIHcsIGgpOworICAgIH07CisKKworCisgICAgdGhpcy5maWxsRWxsaXBzZSA9IHRoaXMuZmlsbE92YWwgPSBmdW5jdGlvbihsZWZ0LCB0b3AsIHcsIGgpCisgICAgeworICAgICAgICB2YXIgYSA9ICh3IC09IDEpPj4xLCBiID0gKGggLT0gMSk+PjEsCisgICAgICAgIHdvZCA9ICh3JjEpKzEsIGhvZCA9IChoJjEpKzEsCisgICAgICAgIGN4ID0gbGVmdCthLCBjeSA9IHRvcCtiLAorICAgICAgICB4ID0gMCwgeSA9IGIsCisgICAgICAgIG94ID0gMCwgb3kgPSBiLAorICAgICAgICBhYTIgPSAoYSphKTw8MSwgYWE0ID0gYWEyPDwxLCBiYiA9IChiKmIpPDwxLAorICAgICAgICBzdCA9IChhYTI+PjEpKigxLShiPDwxKSkgKyBiYiwKKyAgICAgICAgdHQgPSAoYmI+PjEpIC0gYWEyKigoYjw8MSktMSksCisgICAgICAgIHB4bCwgZHcsIGRoOworICAgICAgICBpZiAodysxKSB3aGlsZSAoeSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzdCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3QgKz0gYmIqKCh4PDwxKSsweDMpOworICAgICAgICAgICAgICAgIHR0ICs9IChiYjw8MSkqKCsreCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0dCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3QgKz0gYmIqKCh4PDwxKSsweDMpIC0gYWE0Kih5LTEpOworICAgICAgICAgICAgICAgIHB4bCA9IGN4LXg7CisgICAgICAgICAgICAgICAgZHcgPSAoeDw8MSkrd29kOworICAgICAgICAgICAgICAgIHR0ICs9IChiYjw8MSkqKCsreCkgLSBhYTIqKCgoeS0tKTw8MSktMHgzKTsKKyAgICAgICAgICAgICAgICBkaCA9IG95LXk7CisgICAgICAgICAgICAgICAgdGhpcy5ta0RpdihweGwsIGN5LW95LCBkdywgZGgpOworICAgICAgICAgICAgICAgIHRoaXMubWtEaXYocHhsLCBjeStveS1kaCtob2QsIGR3LCBkaCk7CisgICAgICAgICAgICAgICAgb3ggPSB4OworICAgICAgICAgICAgICAgIG95ID0geTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0dCAtPSBhYTIqKCh5PDwxKS0weDMpOworICAgICAgICAgICAgICAgIHN0IC09IGFhNCooLS15KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLm1rRGl2KGN4LWEsIGN5LW95LCB3KzEsIChveTw8MSkraG9kKTsKKyAgICB9OworCisKKworICAgIHRoaXMuZHJhd1N0cmluZyA9IG1rTGJsOworCisKKworICAgIHRoaXMuY2xlYXIgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLmh0bSA9ICIiOworICAgICAgICBpZiAodGhpcy5jbnYpIHRoaXMuY252LmlubmVySFRNTCA9IHRoaXMuZGVmaHRtOworICAgICAgICAKKyAgICB9OworCisKKworICAgIHRoaXMubWtPdlFkcyA9IGZ1bmN0aW9uKGN4LCBjeSwgeGwsIHhyLCB5dCwgeWIsIHcsIGgpCisgICAgeworICAgICAgICB0aGlzLm1rRGl2KHhyK2N4LCB5dCtjeSwgdywgaCk7CisgICAgICAgIHRoaXMubWtEaXYoeHIrY3gsIHliK2N5LCB3LCBoKTsKKyAgICAgICAgdGhpcy5ta0Rpdih4bCtjeCwgeWIrY3ksIHcsIGgpOworICAgICAgICB0aGlzLm1rRGl2KHhsK2N4LCB5dCtjeSwgdywgaCk7CisgICAgfTsKKworCisgICAgdGhpcy5zZXRTdHJva2UoMSk7CisgICAgdGhpcy5zZXRQcmludGFibGUoZmFsc2UpOworICAgIHRoaXMuc2V0Rm9udCgndmVyZGFuYSxnZW5ldmEsaGVsdmV0aWNhLHNhbnMtc2VyaWYnLCBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MzEsIDB4MzIsIDB4NzAsIDB4NzgpLCBGb250LlBMQUlOKTsKKyAgICB0aGlzLmNvbG9yID0gJyMwMDAwMDAnOworICAgIHRoaXMuaHRtID0gJyc7CisgICAgdGhpcy53bmQgPSB3bmQgfHwgd2luZG93OworCisKKyAgICBpZiAoIShqZ19pZSB8fCBqZ19kb20gfHwgamdfaWh0bSkpIGNoa0RIVE0oKTsKKyAgICBpZiAodHlwZW9mIGlkICE9ICdzdHJpbmcnIHx8ICFpZCkgdGhpcy5wYWludCA9IHBudERvYzsKKyAgICBlbHNlCisgICAgeworICAgICAgICB0aGlzLmNudiA9IGRvY3VtZW50LmFsbD8gKHRoaXMud25kLmRvY3VtZW50LmFsbFtpZF0gfHwgbnVsbCkKKyAgICAgICAgICAgIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQ/ICh0aGlzLnduZC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgfHwgbnVsbCkKKyAgICAgICAgICAgIDogbnVsbDsKKyAgICAgICAgdGhpcy5kZWZodG0gPSAodGhpcy5jbnYgJiYgdGhpcy5jbnYuaW5uZXJIVE1MKT8gdGhpcy5jbnYuaW5uZXJIVE1MIDogJyc7CisgICAgICAgIHRoaXMucGFpbnQgPSBqZ19kb20/IHBudENudkRvbSA6IGpnX2llPyBwbnRDbnZJZSA6IGpnX2lodG0/IHBudENudklodG0gOiBwbnRDbnY7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvYmFja2VuZC5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9iYWNrZW5kLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzRjMGI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvYmFja2VuZC5waHAKQEAgLTAsMCArMSwxNzEgQEAKKzw/cGhwIAorLyoqCisqIFVuaWZpZWQgYmFja2VuZCBmb3IgSW1hZ2VNYW5hZ2VyIAorKgorKiBJbWFnZSBNYW5hZ2VyIHdhcyBvcmlnaW5hbGx5IGRldmVsb3BlZCBieToKKyogICBYaWFuZyBXZWkgWmh1bywgZW1haWw6IHhpYW5nd2Vpemh1byhhdClob3RtYWlsLmNvbSBXZWkgU2hvdS4KKyoKKyogVW5pZmllZCBiYWNrZW5kIHNwb25zb3JlZCBieSBEVExpbmsgU29mdHdhcmUsIGh0dHA6Ly93d3cuZHRsaW5rLmNvbQorKiBJbXBsZW1lbnRhdGlvbiBieSBZZXJtbyBMYW1lcnMsIGh0dHA6Ly93d3cuZm9ybXZpc3RhLmNvbQorKgorKiAoYykgRFRMaW5rLCBMTEMgMjAwNS4KKyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorKiBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisqCisqIERFU0NSSVBUSU9OOgorKgorKiBJbnN0ZWFkIG9mIHVzaW5nIHNlcGFyYXRlIFVSTCdzIGZvciBlYWNoIGZ1bmN0aW9uLCBJbWFnZU1hbmFnZXIgbm93CisqIHJvdXRlcyBhbGwgcmVxdWVzdHMgdG8gdGhlIHNlcnZlciB0aHJvdWdoIHRoaXMgc2luZ2xlLCByZXBsYWNlYWJsZSwKKyogZW50cnkgcG9pbnQuIGJhY2tlbmQucGhwIGV4cGVjdHMgYXQgbGVhc3QgdHdvIFVSTCB2YXJpYWJsZSBwYXJhbWV0ZXJzOiAKKyoKKyogX19wbHVnaW49SW1hZ2VNYW5hZ2VyICAgZm9yIGZ1dHVyZSBleHBhbnNpb247IGlkZW50aWZ5IHRoZSBwbHVnaW4gYmVpbmcgcmVxdWVzdGVkLgorKiBfX2Z1bmN0aW9uPXRodW1ic3xpbWFnZXN8ZWRpdG9yRnJhbWV8ZWRpdG9yfG1hbmFnZXIgIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC4KKyoKKyogSGF2aW5nIGEgc2luZ2xlIGVudHJ5IHBvaW50IHRoYXQgc3RyaWN0bHkgYWRoZXJlcyB0byBhIGRlZmluZWQgaW50ZXJmYWNlIHdpbGwgCisqIG1ha2UgdGhlIGJhY2tlbmQgY29kZSBtdWNoIGVhc2llciB0byBtYWludGFpbiBhbmQgZXhwYW5kLiBJdCB3aWxsIG1ha2UgaXQgZWFzaWVyCisqIG9uIGludGVncmF0b3JzLCBub3QgdG8gbWVudGlvbiBpdCdsbCBtYWtlIGl0IGVhc2llciB0byBoYXZlIHNlcGFyYXRlIAorKiBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGJhY2tlbmQgaW4gZGlmZmVyZW50IGxhbmd1YWdlcyAoUGVybCwgUHl0aG9uLCBBU1AsIGV0Yy4pIAorKgorKiBAc2VlIGNvbmZpZy5pbmMucGhwCisqLworCisvLyBTdHJpcCBzbGFzaGVzIGlmIE1RR1BDIGlzIG9uCitpZihmdW5jdGlvbl9leGlzdHMoJ3NldF9tYWdpY19xdW90ZXNfcnVudGltZScpKSBAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApOworaWYoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkKK3sKKyAgJHRvX2NsZWFuID0gYXJyYXkoJiRfR0VULCAmJF9QT1NULCAmJF9SRVFVRVNULCAmJF9DT09LSUUpOworICB3aGlsZShjb3VudCgkdG9fY2xlYW4pKQorICB7CisgICAgJGNsZWFuaW5nID0mICR0b19jbGVhblthcnJheV9wb3AoJGp1bmsgPSBhcnJheV9rZXlzKCR0b19jbGVhbikpXTsKKyAgICB1bnNldCgkdG9fY2xlYW5bYXJyYXlfcG9wKCRqdW5rID0gYXJyYXlfa2V5cygkdG9fY2xlYW4pKV0pOworICAgIGZvcmVhY2goYXJyYXlfa2V5cygkY2xlYW5pbmcpIGFzICRrKQorICAgIHsKKyAgICAgIGlmKGlzX2FycmF5KCRjbGVhbmluZ1ska10pKQorICAgICAgeworICAgICAgICAkdG9fY2xlYW5bXSA9JiAkY2xlYW5pbmdbJGtdOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAkY2xlYW5pbmdbJGtdID0gc3RyaXBzbGFzaGVzKCRjbGVhbmluZ1ska10pOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisvKioKKyogSW1hZ2VNYW5hZ2VyIGNvbmZpZ3VyYXRpb24KKyovCisKK3JlcXVpcmVfb25jZSgnY29uZmlnLmluYy5waHAnKTsKKworLyoqCisqIGRlYnVnIG1lc3NhZ2UgbGlicmFyeQorKi8KKworaW5jbHVkZV9vbmNlKCAiZGR0LnBocCIgKTsKKworLy8gdW5jb21tZW50IHRvIHR1cm4gb24gZGVidWdnaW5nCisvLyBfZGR0T24oKTsKKworX2RkdCggX19GSUxFX18sIF9fTElORV9fLCAiYmFja2VuZC5waHA6IHRvcCB3aXRoIHF1ZXJ5ICciIC4gJF9TRVJWRVJbIlBIUF9TRUxGIl0gLiAiJyBzdHJpbmcgJyIgLiAkX1NFUlZFUlsiUVVFUllfU1RSSU5HIl0gLiAiJyIgKTsKKworJGZvcm1WYXJzID0gZW1wdHkoJF9QT1NUKSA/ICRfR0VUIDogJF9QT1NUOworCisvLyBtYWtlIHN1cmUgdGhlIHJlcXVlc3QgaXMgZm9yIHVzICh0aGlzIGdpdmVzIHVzIHRoZSBhYmlsaXR5IHRvIGV2ZW50dWFsbHkgb3JnYW5pemUKKy8vIGEgYmFja2VuZCBldmVudCBoYW5kbGVyIHN5c3RlbSkgRm9yIGFuIGluY2x1ZGUgZmlsZSB0aGUgcmV0dXJuIGRvZXNuJ3QgbWFrZSBhbG90IG9mCisvLyBzZW5zZSBidXQgZXZlbnR1YWxseSB3ZSdsbCB3YW50IHRvIHR1cm4gYWxsIG9mIHRoaXMgaW50byBhdCBsZWFzdCBmdW5jdGlvbnMgCisvLyBzZXBhcmF0aW5nIG91dCBhbGwgdGhlIHByZXNlbnRhdGlvbiBIVE1MIGZyb20gdGhlIGxvZ2ljLiAoUmlnaHQgbm93IGFsbCB0aGUgSFRNTAorLy8gdXNlZCBieSBJbWFnZU1hbmFnZXIgaXMgaW4gdGhlIHNhbWUgZmlsZXMgYXMgdGhlIFBIUCBjb2RlIC4uLikKKworaWYgKCBAJGZvcm1WYXJzWyAiX19wbHVnaW4iIF0gIT0gIkltYWdlTWFuYWdlciIgKQorCXsKKwkvLyBub3QgZm9yIHVzLgorCisJX2RkdCggX19GSUxFX18sIF9fTElORV9fLCAicmVxdWVzdCB3YXMgbm90IGZvciB1cyIgKTsKKworCXJldHVybiB0cnVlOworCX0KKworLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byByZS1lbmdpbmVlciB0aGUgZW50aXJlIHRoaW5nIHJpZ2h0IG5vdywgc2luY2UgaXQncyBwcm9iYWJseQorLy8gZ29pbmcgdG8gZ2V0IHJld3JpdHRlbiBhbnl3YXksIHdlIGp1c3QgaW5jbHVkZSB0aGUgY29ycmVjdCBmaWxlIGJhc2VkIG9uIHRoZSAKKy8vIGZ1bmN0aW9uIHJlcXVlc3QuCisKK19kZHQoIF9fRklMRV9fLCBfX0xJTkVfXywgImJhY2tlbmQucGhwKCk6IGhhbmRsaW5nIGZ1bmN0aW9uICciIC4gJGZvcm1WYXJzWyAiX19mdW5jdGlvbiIgXSAuICInIGJhc2VfZGlyIGlzICciIC4gJElNQ29uZmlnWyJiYXNlX2RpciJdIC4gIiciICk7CisKK3N3aXRjaCAoIEAkZm9ybVZhcnNbICJfX2Z1bmN0aW9uIiBdICkKKwl7CisKKwljYXNlICJlZGl0b3IiOiAKKworCQlpbmNsdWRlX29uY2UoICRJTUNvbmZpZ1snYmFzZV9kaXInXSAuICIvZWRpdG9yLnBocCIgKTsKKwkJZXhpdCgpOworCQkKKwkJYnJlYWs7CisKKwljYXNlICJlZGl0b3JGcmFtZSI6CisKKwkJaW5jbHVkZV9vbmNlKCAkSU1Db25maWdbJ2Jhc2VfZGlyJ10gLiAiL2VkaXRvckZyYW1lLnBocCIgKTsKKwkJZXhpdCgpOworCisJCWJyZWFrOworCisJY2FzZSAibWFuYWdlciI6CisKKwkJX2RkdCggX19GSUxFX18sIF9fTElORV9fLCAiaW5jbHVkaW5nICciIC4gJElNQ29uZmlnWydiYXNlX2RpciddIC4gIi9tYW5hZ2VyLnBocCIgKTsKKworCQlpbmNsdWRlX29uY2UoICRJTUNvbmZpZ1snYmFzZV9kaXInXSAuICIvbWFuYWdlci5waHAiICk7CisJCWV4aXQoKTsKKworCQlicmVhazsKKworCWNhc2UgImltYWdlcyI6CisKKwkJaW5jbHVkZV9vbmNlKCAkSU1Db25maWdbJ2Jhc2VfZGlyJ10gLiAiL2ltYWdlcy5waHAiICk7CisJCWV4aXQoKTsKKworCQlicmVhazsKKworCWNhc2UgInRodW1icyI6CisKKwkJaW5jbHVkZV9vbmNlKCAkSU1Db25maWdbJ2Jhc2VfZGlyJ10gLiAiL3RodW1icy5waHAiICk7CisJCWV4aXQoKTsKKworCQlicmVhazsKKworCWNhc2UgInJlc2l6ZXIiOgorCisJCWluY2x1ZGVfb25jZSggJElNQ29uZmlnWydiYXNlX2RpciddIC4gIi9yZXNpemVyLnBocCIgKTsKKwkJZXhpdCgpOworCisJCWJyZWFrOworCisgICAgCisJY2FzZSAieW91dHViZSI6CisKKwkJaW5jbHVkZV9vbmNlKCAkSU1Db25maWdbJ2Jhc2VfZGlyJ10gLiAiL3lvdXR1YmUucGhwIiApOworCQlleGl0KCk7CisKKwkJYnJlYWs7CisgICAgCisgICAgCisJY2FzZSAiZmxpY2tyIjoKKworCQlpbmNsdWRlX29uY2UoICRJTUNvbmZpZ1snYmFzZV9kaXInXSAuICIvZmxpY2tyLnBocCIgKTsKKwkJZXhpdCgpOworCisJCWJyZWFrOworICAgIAorCWRlZmF1bHQ6CisKKwkJX2RkdCggX19GSUxFX18sIF9fTElORV9fLCAiZnVuY3Rpb24gcmVxdWVzdCBub3Qgc3VwcG9ydGVkIiApOworCQlfZXJyb3IoIF9fRklMRV9fLCBfX0xJTkVfXywgImZ1bmN0aW9uIHJlcXVlc3Qgbm90IHN1cHBvcnRlZCIgKTsKKworCQlicmVhazsKKworCX0JLy8gZW5kIG9mIHN3aXRjaC4KKworcmV0dXJuIGZhbHNlIDsKKworLy8gRU5ECisKKz8+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9jb25maWcuaW5jLnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2NvbmZpZy5pbmMucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjN2VmYzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9jb25maWcuaW5jLnBocApAQCAtMCwwICsxLDQ2MCBAQAorPD9waHAKKworLyoqCisgKiBJbWFnZSBNYW5hZ2VyIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAqIEBhdXRob3IgJEF1dGhvcjpnb2dvICQKKyAqIEB2ZXJzaW9uICRJZDpjb25maWcuaW5jLnBocCA4MzAgMjAwNy0wNS0wOSAxMzoyNzozNFogZ29nbyAkCisgKiBAcGFja2FnZSBJbWFnZU1hbmFnZXIKKyAqCisgKiBAdG9kbyBjaGFuZ2UgYWxsIHRoZXNlIGNvbmZpZyB2YWx1ZXMgdG8gZGVmaW5lcygpCisgKi8KKworLy8gUkVWSVNJT04gSElTVE9SWToKKy8vCisvLyAyMDA1LTAzLTIwIFllcm1vIExhbWVycyAod3d3LmZvcm12aXN0YS5jb20pOgorLy8JLiB1bmlmaWVkIGJhY2tlbmQuCisvLyAuIGNyZWF0ZWQgYSBzZXQgb2YgZGVmYXVsdHMgdGhhdCBtYWtlIHNlbnNlIGZvciBidW5kbGluZyB3aXRoIFhpbmhhLgorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgorKiBEZWZhdWx0IGJhY2tlbmQgVVJMCisqCisqIFVSTCB0byB1c2UgZm9yIHVuaWZpZWQgYmFja2VuZC4KKyoKKyogVGhlID9fX3BsdWdpbj1JbWFnZU1hbmFnZXImIGlzIHJlcXVpcmVkLiAKKyovCisKKyRJTUNvbmZpZ1snYmFja2VuZF91cmwnXSA9ICJiYWNrZW5kLnBocD9fX3BsdWdpbj1JbWFnZU1hbmFnZXImIjsKKworLyoqCisqIEJhY2tlbmQgSW5zdGFsbGF0aW9uIERpcmVjdG9yeQorKgorKiBsb2NhdGlvbiBvZiBiYWNrZW5kIGluc3RhbGw7IHRoZXNlIGFyZSB1c2VkIHRvIGxpbmsgdG8gY3NzIGFuZCBqcworKiBhc3NldHMgYmVjYXVzZSB3ZSBtYXkgaGF2ZSB0aGUgZnJvbnQgZW5kIGluc3RhbGxlZCBpbiBhIGRpZmZlcmVudAorKiBkaXJlY3RvcnkgdGhhbiB0aGUgYmFja2VuZC4gKGkuZS4gbm90aGluZyBhc3N1bWVzIHRoYXQgdGhlIGZyb250ZW5kCisqIGFuZCB0aGUgYmFja2VuZCBhcmUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5KQorKi8KKworJElNQ29uZmlnWydiYXNlX2RpciddID0gZ2V0Y3dkKCk7CiskSU1Db25maWdbJ2Jhc2VfdXJsJ10gPSAnJzsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgorKiBQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIGltYWdlcy4KKyoKKyogRmlsZSBzeXN0ZW0gcGF0aCB0byB0aGUgZGlyZWN0b3J5IHlvdSB3YW50IHRvIG1hbmFnZSB0aGUgaW1hZ2VzCisqIGZvciBtdWx0aXBsZSB1c2VyIHN5c3RlbXMsIHNldCBpdCBkeW5hbWljYWxseS4KKyoKKyogTk9URTogVGhpcyBkaXJlY3RvcnkgcmVxdWlyZXMgd3JpdGUgYWNjZXNzIGJ5IFBIUC4gVGhhdCBpcywgCisqIFBIUCBtdXN0IGJlIGFibGUgdG8gY3JlYXRlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5LgorKiBBYmxlIHRvIGNyZWF0ZSBkaXJlY3RvcmllcyBpcyBuaWNlLCBidXQgbm90IG5lY2Vzc2FyeS4KKyoKKyogQ0hBTkdFIFRISVM6IGZvciBvdXQtb2YtdGhlLWJveCBkZW1vIHB1cnBvc2VzIHdlJ3JlIHNldHRpbmcgdGhpcyB0byAuL2RlbW9faW1hZ2VzCisqIHdoaWNoIGhhcyBzb21lIGdyYXBoaWNzIGluIGl0LgorKi8KKworLy8gJElNQ29uZmlnWydpbWFnZXNfZGlyJ10gPSAiL3NvbWUvcGF0aC90by9pbWFnZXMvZGlyZWN0b3J5OworCiskSU1Db25maWdbJ2ltYWdlc19kaXInXSA9ICJkZW1vX2ltYWdlcyI7CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisqIFVSTCBvZiBkaXJlY3RvcnkgY29udGFpbmluZyBpbWFnZXMuCisqCisqIFRoZSBVUkwgdG8gdGhlIGFib3ZlIHBhdGgsIHRoZSB3ZWIgYnJvd3NlciBuZWVkcyB0byBiZSBhYmxlIHRvIHNlZSBpdC4KKyogSXQgY2FuIGJlIHByb3RlY3RlZCB2aWEgLmh0YWNjZXNzIG9uIGFwYWNoZSBvciBkaXJlY3RvcnkgcGVybWlzc2lvbnMgb24gSUlTLAorKiBjaGVjayB5b3Ugd2ViIHNlcnZlciBkb2N1bWVudGF0aW9uIGZvciBmdXRoZXIgaW5mb3JtYXRpb24gb24gZGlyZWN0b3J5IHByb3RlY3Rpb24KKyogSWYgdGhpcyBkaXJlY3RvcnkgbmVlZHMgdG8gYmUgcHVibGljbHkgYWNjZXNzaWFibGUsIHJlbW92ZSBzY3JpcHRpbmcgY2FwYWJpbGl0aWVzCisqIGZvciB0aGlzIGRpcmVjdG9yeSAoaS5lLiBkaXNhYmxlIFBIUCwgUGVybCwgQ0dJKS4gV2Ugb25seSB3YW50IHRvIHN0b3JlIGFzc2V0cworKiBpbiB0aGlzIGRpcmVjdG9yeSBhbmQgaXRzIHN1YmRpcmVjdG9yaWVzLgorKgorKiBDSEFOR0UgVEhJUzogWW91IG5lZWQgdG8gY2hhbmdlIHRoaXMgdG8gbWF0Y2ggdGhlIHVybCB3aGVyZSB5b3UgaGF2ZSBYaW5oYQorKiBpbnN0YWxsZWQuIElmIHRoZSBpbWFnZXMgc2hvdyB1cCBibGFuayBjaGFuY2VzIGFyZSB0aGlzIGlzIG5vdCBzZXQgY29ycmVjdGx5LgorKi8KKworLy8gJElNQ29uZmlnWydpbWFnZXNfdXJsJ10gPSAiL3VybC90by9hYm92ZSI7CisKKy8vIHRyeSB0byBmaWd1cmUgb3V0IHRoZSBVUkwgb2YgdGhlIHNhbXBsZSBpbWFnZXMgZGlyZWN0b3J5LiBGb3IgeW91ciBpbnN0YWxsYXRpb24KKy8vIHlvdSB3aWxsIHByb2JhYmx5IHdhbnQgdG8ga2VlcCBpbWFnZXMgaW4gYW5vdGhlciBkaXJlY3RvcnkuCisKKyRJTUNvbmZpZ1snaW1hZ2VzX3VybCddID0gc3RyX3JlcGxhY2UoICJiYWNrZW5kLnBocCIsICIiLCAkX1NFUlZFUlsiUEhQX1NFTEYiXSApIC4gImRlbW9faW1hZ2VzIjsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyogUEhQIFNhZmUgTW9kZT8KKyoKKyogUG9zc2libGUgdmFsdWVzOiB0cnVlLCBmYWxzZQorKgorKiBUUlVFIC0gSWYgUEhQIG9uIHRoZSB3ZWIgc2VydmVyIGlzIGluIHNhZmUgbW9kZSwgc2V0IHRoaXMgdG8gdHJ1ZS4KKyogU0FGRSBNT0RFIHJlc3RyaWN0aW9uczogZGlyZWN0b3J5IGNyZWF0aW9uIHdpbGwgbm90IGJlIHBvc3NpYmxlLAorKiBvbmx5IHRoZSBHRCBsaWJyYXJ5IGNhbiBiZSB1c2VkLCBvdGhlciBsaWJyYXJpZXMgcmVxdWlyZQorKiBTYWZlIE1vZGUgdG8gYmUgb2ZmLgorKgorKiBGQUxTRSAtIFNldCB0byBmYWxzZSBpZiBQSFAgb24gdGhlIHdlYiBzZXJ2ZXIgaXMgbm90IGluIHNhZmUgbW9kZS4KKyovCisKKyRJTUNvbmZpZ1snc2FmZV9tb2RlJ10gPSBmYWxzZTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyogSW1hZ2UgTGlicmFyeSB0byB1c2UuCisqCisqIFBvc3NpYmxlIHZhbHVlczogJ0dEJywgJ0lNJywgb3IgJ05ldFBCTScKKyoKKyogVGhlIGltYWdlIG1hbmlwdWxhdGlvbiBsaWJyYXJ5IHRvIHVzZSwgZWl0aGVyIEdEIG9yIEltYWdlTWFnaWNrIG9yIE5ldFBCTS4KKyogSWYgeW91IGhhdmUgc2FmZSBtb2RlIE9OLCBvciBkb24ndCBoYXZlIHRoZSBiaW5hcmllcyB0byBvdGhlciBwYWNrYWdlcywgCisqIHlvdXIgY2hvaWNlIGlzICdHRCcgb25seS4gT3RoZXIgcGFja2FnZXMgcmVxdWlyZSBTYWZlIE1vZGUgdG8gYmUgb2ZmLgorKgorKiBERUZBVUxUOiBHRCBpcyBwcm9iYWJseSB0aGUgbW9zdCBsaWtlbHkgdG8gYmUgYXZhaWxhYmxlLiAKKyovCisKKyRJTUNvbmZpZ1snSU1BR0VfQ0xBU1MnXSA9ICdHRCc7CisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyogTmV0UEJNIG9yIElNIGJpbmFyeSBwYXRoLgorKgorKiBBZnRlciBkZWZpbmluZyB3aGljaCBsaWJyYXJ5IHRvIHVzZSwgaWYgaXQgaXMgTmV0UEJNIG9yIElNLCB5b3UgbmVlZCB0bworKiBzcGVjaWZ5IHdoZXJlIHRoZSBiaW5hcnkgZm9yIHRoZSBzZWxlY3RlZCBsaWJyYXJ5IGFyZS4gQW5kIG9mIGNvdXJzZQorKiB5b3VyIHNlcnZlciBhbmQgUEhQIG11c3QgYmUgYWJsZSB0byBleGVjdXRlIHRoZW0gKGkuZS4gc2FmZSBtb2RlIGlzIE9GRikuCisqIEdEIGRvZXMgbm90IHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9uLgorKi8KKworJElNQ29uZmlnWydJTUFHRV9UUkFOU0ZPUk1fTElCX1BBVEgnXSA9Jy91c3IvYmluLyc7CisKKy8vIEZvciB3aW5kb3dzLCBzb21ldGhpbmcgbGlrZQorLy8gQzovIlByb2dyYW0gRmlsZXMiL0ltYWdlTWFnaWNrLTUuNS43LVExNi8KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgICAgICAgT1BUSU9OQUwgU0VUVElOR1MgCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgorKiBUaHVtYm5haWwgcHJlZml4CisqCisqIFRoZSBwcmVmaXggZm9yIHRodW1ibmFpbCBmaWxlcywgc29tZXRoaW5nIGxpa2UgLnRodW1iIHdpbGwgZG8uIFRoZQorKiB0aHVtYm5haWxzIGZpbGVzIHdpbGwgYmUgbmFtZWQgYXMgInByZWZpeF9pbWFnZWZpbGUuZXh0IiwgdGhhdCBpcywKKyogIHByZWZpeCArIG9yZ2luYWwgZmlsZW5hbWUuCisqLworCiskSU1Db25maWdbJ3RodW1ibmFpbF9wcmVmaXgnXSA9ICcuJzsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyogVGh1bWJuYWlsIERpcmVjdG9yeQorKgorKiBUaHVtYm5haWwgY2FuIGFsc28gYmUgc3RvcmVkIGluIGEgZGlyZWN0b3J5LCB0aGlzIGRpcmVjdG9yeQorKiB3aWxsIGJlIGNyZWF0ZWQgYnkgUEhQLiBJZiBQSFAgaXMgaW4gc2FmZSBtb2RlLCB0aGlzIHBhcmFtZXRlcgorKiAgaXMgaWdub3JlZCwgeW91IGNhbiBub3QgY3JlYXRlIGRpcmVjdG9yaWVzLiAKKyoKKyogIElmIHlvdSBkbyBub3Qgd2FudCB0byBzdG9yZSB0aHVtYm5haWxzIGluIGEgZGlyZWN0b3J5LCBzZXQgdGhpcworKiAgdG8gZmFsc2Ugb3IgZW1wdHkgc3RyaW5nICcnOworKi8KKworJElNQ29uZmlnWyd0aHVtYm5haWxfZGlyJ10gPSAnLnRodW1icyc7CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisgKiBSZXNpemUgZmlsZXMsIG9yIG5vdC4gIElmIHRoZSBkaW1lbnNpb25zIGZvciBhbiBpbWFnZSBhcmUgY2hhbmdlZAorICogdGhpcyB3aWxsIGNvbnRyb2wgaWYgdGhlIGltYWdlIGlzIGFjdHVhbGx5IHJlc2l6ZWQuICAKKyAqCisgKiBVc3VhbGx5IHlvdSB3YW50IHRoaXMgdHJ1ZSwgdW5sZXNzIHlvdSBhcmUgdmVyeSBkaXNrIHNwYWNlIGNvbmNpb3VzLgorICovCisgCiskSU1Db25maWdbJ3Jlc2l6ZV9maWxlcyddID0gdHJ1ZTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyogUmVzaXplZCBwcmVmaXgKKyoKKyogVGhlIHByZWZpeCBmb3IgcmVzaXplZCBmaWxlcywgc29tZXRoaW5nIGxpa2UgLnJlc2l6ZWQgd2lsbCBkby4gIFRoZQorKiByZXNpemVkIGZpbGVzIHdpbGwgYmUgbmFtZWQgPHByZWZpeD5fPHdpZHRoPng8aGVpZ2h0Pl88b3JpZ2luYWw+CisqIHJlc2l6ZWQgZmlsZXMgYXJlIGNyZWF0ZWQgd2hlbiBvbmUgY2hhbmdlcyB0aGUgZGltZW5zaW9ucyBvZiBhbiBpbWFnZQorKiBpbiB0aGUgaW1hZ2UgbWFuYWdlciBzZWxlY3Rpb24gZGlhbG9nIC0gdGhlIGltYWdlIGlzIHNjYWxlZCB3aGVuIHRoZQorKiB1c2VyIGNsaWNrcyB0aGUgb2sgYnV0dG9uLgorKi8KKworJElNQ29uZmlnWydyZXNpemVkX3ByZWZpeCddID0gJy5yZXNpemVkJzsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyogUmVzaXplZCBEaXJlY3RvcnkKKyoKKyogUmVzaXplZCBpbWFnZXMgbWF5IGFsc28gYmUgc3RvcmVkIGluIGEgZGlyZWN0b3J5LCBleGNlcHQgaW4gc2FmZSBtb2RlLgorKi8KKworJElNQ29uZmlnWydyZXNpemVkX2RpciddID0gJy5yZXNpemVkJzsKKworLyoqCisgKiBGdWxsIG9wdGlvbnMKKyAqCisgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHVzZXIgaXMgZ2l2ZW4gb3B0aW9ucyBmb3IgcGFkZGluZywgCisgKiBiYWNrZ3JvdW5kL3BhZGRpbmcgY29sb3VyLCBtYXJnaW4sIGJvcmRlciBhbmQgYm9yZGVyIGNvbG91ci4gCisgKi8KKworJElNQ29uZmlnWydzaG93X2Z1bGxfb3B0aW9ucyddID0gdHJ1ZTsKKyAKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisqIEFsbG93IE5ldyBEaXJlY3RvcmllcworKgorKgorKiBQb3NzaWJsZSB2YWx1ZXM6IHRydWUsIGZhbHNlCisqCisqIFRSVUUgLSAgQWxsb3cgdGhlIHVzZXIgdG8gY3JlYXRlIG5ldyBzdWItZGlyZWN0b3JpZXMgaW4gdGhlCisqICAgICAgICAkSU1Db25maWdbJ2Jhc2VfZGlyJ10uCisqCisqIEZBTFNFIC0gTm8gZGlyZWN0b3J5IGNyZWF0aW9uLgorKgorKiBOT1RFOiBJZiAkSU1Db25maWdbJ3NhZmVfbW9kZSddID0gdHJ1ZSwgdGhpcyBwYXJhbWV0ZXIKKyogICAgIGlzIGlnbm9yZWQsIHlvdSBjYW4gbm90IGNyZWF0ZSBkaXJlY3RvcmllcworKgorKiBERUZBVUxUOiBmb3IgZGVtbyBwdXJwb3NlcyB3ZSB0dXJuIHRoaXMgb2ZmLgorKi8KKworJElNQ29uZmlnWydhbGxvd19uZXdfZGlyJ10gPSBmYWxzZTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyogQWxsb3cgVXBsb2FkcworKgorKiAgUG9zc2libGUgdmFsdWVzOiB0cnVlLCBmYWxzZQorKgorKiAgVFJVRSAtIEFsbG93IHRoZSB1c2VyIHRvIHVwbG9hZCBmaWxlcy4KKyoKKyogIEZBTFNFIC0gTm8gdXBsb2FkaW5nIGFsbG93ZWQuCisqCisqIERFRkFVTFQ6IGZvciBkZW1vIHB1cnBvc2VzIHdlIHR1cm4gdGhpcyBvZmYuCisqLworCiskSU1Db25maWdbJ2FsbG93X3VwbG9hZCddID0gZmFsc2U7CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisqIEFsbG93IERlbGV0ZQorKgorKiAgUG9zc2libGUgdmFsdWVzOiB0cnVlLCBmYWxzZQorKgorKiAgVFJVRSAtIEFsbG93IHRoZSB1c2VyIHRvIGRlbGV0ZSBmaWxlcy9kaXJzCisqCisqICBGQUxTRSAtIE5vIGRlbGV0aW5nIGFsbG93ZWQuCisqIAorKi8KKworJElNQ29uZmlnWydhbGxvd19kZWxldGUnXSA9IGZhbHNlOworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgorKiBBbGxvdyBFZGl0CisqCisqICBQb3NzaWJsZSB2YWx1ZXM6IHRydWUsIGZhbHNlCisqCisqICBUUlVFIC0gQWxsb3cgdGhlIHVzZXIgdG8gZWRpdCBmaWxlcworKgorKiAgRkFMU0UgLSBObyBlZGl0aW5nIGFsbG93ZWQuCisqIAorKi8KKworJElNQ29uZmlnWydhbGxvd19lZGl0J10gPSBmYWxzZTsKKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgorKiBWYWxpZGF0ZSBJbWFnZXMKKyoKKyogUG9zc2libGUgdmFsdWVzOiB0cnVlLCBmYWxzZQorKgorKiBUUlVFIC0gSWYgc2V0IHRvIHRydWUsIHVwbG9hZGVkIGZpbGVzIHdpbGwgYmUgdmFsaWRhdGVkIGJhc2VkIG9uIHRoZSAKKyogICAgICAgIGZ1bmN0aW9uIGdldEltYWdlU2l6ZSwgaWYgd2UgY2FuIGdldCB0aGUgaW1hZ2UgZGltZW5zaW9ucyB0aGVuIAorKiAgICAgICAgSSBndWVzcyB0aGlzIHNob3VsZCBiZSBhIHZhbGlkIGltYWdlLiBPdGhlcndpc2UgdGhlIGZpbGUgd2lsbCBiZSByZWplY3RlZC4KKyoKKyogRkFMU0UgLSBBbGwgdXBsb2FkZWQgZmlsZXMgd2lsbCBiZSBwcm9jZXNzZWQuCisqCisqIE5PVEU6IElmIHVwbG9hZGluZyBpcyBub3QgYWxsb3dlZCwgdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KKyovCisKKyRJTUNvbmZpZ1sndmFsaWRhdGVfaW1hZ2VzJ10gPSB0cnVlOworCiskSU1Db25maWdbJ2FsbG93ZWRfaW1hZ2VfZXh0ZW5zaW9ucyddID0gYXJyYXkoImpwZyIsImdpZiIsInBuZyIsImpwZWciKTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyogRGVmYXVsdCBUaHVtbmFpbC4KKyoKKyogVGhlIGRlZmF1bHQgdGh1bWJuYWlsIGlmIHRoZSB0aHVtYm5haWxzIGNhbiBub3QgYmUgY3JlYXRlZCwgZWl0aGVyCisqIGR1ZSB0byBlcnJvciBvciBiYWQgaW1hZ2UgZmlsZS4KKyovCisKKyRJTUNvbmZpZ1snZGVmYXVsdF90aHVtYm5haWwnXSA9ICdpbWcvZGVmYXVsdC5naWYnOworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgorKiAgVGh1bWJuYWlsIGRpbWVuc2lvbnMuCisqLworCiskSU1Db25maWdbJ3RodW1ibmFpbF93aWR0aCddID0gOTY7CiskSU1Db25maWdbJ3RodW1ibmFpbF9oZWlnaHQnXSA9IDk2OworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgorKiBFZGl0b3IgVGVtcG9yYXJ5IEZpbGUgUHJlZml4LgorKgorKiBJbWFnZSBFZGl0b3IgdGVtcG9yYXJ5IGZpbGVuYW1lIHByZWZpeC4KKyovCisKKyRJTUNvbmZpZ1sndG1wX3ByZWZpeCddID0gJy5lZGl0b3JfJzsKKworCiskSU1Db25maWdbJ1ZpZXdNb2RlJ10gPSAndGh1bWJzJzsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKiogTWFyZ2luIFR5cGVzIAorICogIElmIHlvdXIgSFRNTCB3aWxsIGJlIHVzZWQgaW4gYW4gZW1haWwsIHRoZW4gdXNpbmcgQ1NTIHR5cGUgIm1hcmdpbiIKKyAqICBpcyBub3Qgc28gcmVsaWFibGUgYW5kIHlvdSBzaG91bGQgc2V0IFVzZUhTcGFjZVZTcGFjZSB0byBiZSB0cnVlCisgKiAgdG8gZ28gYmFjayB0byB0aGUgb2xkIGZhc2hpb25lZCBoc3BhY2U9IiIgYW5kIHZzcGFjZT0iIiBhdHRyaWJ1dGVzIG9uCisgKiAgaW1hZ2VzLgorICovCiskSU1Db25maWdbJ1VzZUhTcGFjZVZTcGFjZSddID0gZmFsc2U7CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisgKiBJbWFnZU1hbmFnZXIvUGlja2VyIGNhbiBwcm92aWRlIHNlbGVjdGlvbiBpbnRlcmZhY2VzIGZvciBtb3JlIHRoYW4ganVzdCAKKyAqIGltYWdlcyBvbiB0aGUgc2VydmVyICgiUGljdHVyZXMiKS4KKyAqCisgKiAgTG9jYWwgLSB0aGUgY2xhc3NpY2FsIEltYWdlTWFuYWdlciBmb3IgaW1hZ2VzIHN0b3JlZCBvbiB0aGlzIHNlcnZlci4KKyAqCisgKiAgWW91VHViZSAgLSBwcm92aWRlcyBzZWxlY3Rpb24gKGJ1dCBub3QgdXBsb2FkIGV0Yykgb2YgdmlkZW9zIG9uIFlvdVR1YmUKKyAqICAgIHNlZSBzbWFydC1pbWFnZS5qcyBmb3IgaG93IHRvIG1ha2UgdGhlIHZpZGVvcyB3b3JrIGFzIHZpZGVvcyBpbnN0ZWFkIG9mCisgKiAgICBzdGF0aWMgaW1hZ2VzLgorICoKKyAqICBGbGlja3IgICAtIHByb3ZpZGVzIHNlbGVjdGlvbiAoYnV0IG5vdCB1cGxvYWQgZXRjKSBvZiBwdWJsaWMgaW1hZ2VzIG9uIEZsaWNrcgorICogICAgU2V0IAorICogICAgICAgJElNQ29uZmlnWydGbGlja3InXSA9IGFycmF5KCdLZXknID0+ICd5b3Vya2V5aGVyZScpOworICogICAgdG8gdHVybiBvbiBGbGlja3Igc3VwcG9ydC4KKyAqIAorICogICAgVG8gZ2V0IGEga2V5OiBodHRwOi8vd3d3LmZsaWNrci5jb20vc2VydmljZXMvYXBpL2tleXMvCisgKgorICogICAgV0FSTklORzogRmxpY2tyIHJlc3RyaWN0cyBjb21tZXJjaWFsIHVzZSBvZiB0aGUgQVBJLiAgSWYgeW91ciBzaXRlIGlzIGluIGFueSB3YXkgZXZlbiAKKyAqICAgICByZW1vdGVseSBjb21tZXJjaWFsIHlvdSBuZWVkIHRvIGFzayBmb3IgYSBjb21tZXJjaWFsIGtleSBmcm9tIGZsaWNrci4KKyAqCisgKiAgICBBRERJVElPTkFMIFdBUk5JTkc6IEZsaWNrciByZXF1aXJlcyB0aGF0IHlvdSBwcm92aWRlIGEgbGluayBiYWNrIHRvIHRoZW0sIHByZWZlcmFibHkKKyAqICAgICBvbiB0aGUgaW1hZ2UgaXRzZWxmIChsaW5raW5nIHRvIHRoZSBpbWFnZSkgLSB5b3UgY2FuIHVzZSBzbWFydC1pbWFnZS5qcyB0byBkbworICogICAgIHNvbWV0aGluZyBsaWtlIHRoaXMuIAorICoKKyAqICAgIEFERElUSU9OQUwgQURESVRJT05BTCBXQVJOSU5HOiBJdCdzIHVwIHRvIHlvdSB0byBjb21wbHkgd2l0aCB0aGUgaW1hZ2UncyBsaWNlbnNlISEgCisgKi8KKyAKKyRJTUNvbmZpZ1snTG9jYWwnXSA9IFRSVUU7CiskSU1Db25maWdbJ1lvdVR1YmUnXSAgPSBGQUxTRTsKKyRJTUNvbmZpZ1snRmxpY2tyJ10gICA9IEZBTFNFOworCisvLyBUaGVzZSBhcmUgc29tZSBjb25maWd1cmFibGUgZGVmYXVsdHMgZm9yIEZsaWNrciwgdG8gb3ZlcnJpZGUKKy8vICAkSU1Db25maWdbJ0ZsaWNrciddID0gYXJyYXkoJ1doYXRldmVyJyA9PiAnWW91IFdhbnQnKTsKKyRGbGlja3JEZWZhdWx0cyA9IGFycmF5CisoCisgIC8vIFRoaXMgaXMgdGhlIFVSTCBhcyBmbGlja3IgcHJvdmlkZXMgaXQgZm9yIHRoZSBsaWNlbmNlIHdoaWNoIHlvdSB3aXNoIAorICAvLyB0byBzZWFyY2ggb24gYnkgZGVmYXVsdC4gIFRoZSBkZWZhdWx0IGhlcmUgaXMgdGhlIGxlYXN0IHJlc3RyaWN0aXZlIG9uZS4KKyAgJ0RlZmF1bHQgTGljZW5zZScgPT4gJ2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzIuMC8nLAorICAgIAorKTsgIAorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAgICA9PT09PT09PT09PT09PT09PT0gRU5EIE9GIENPTkZJR1VSQVRJT04gPT09PT09PT09PT09PT09PT09PT09PT0gICAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCisvLyBTdGFuZGFyZCBQSFAgQmFja2VuZCBEYXRhIFBhc3NpbmcKKy8vICBpZiBkYXRhIHdhcyBwYXNzZWQgdXNpbmcgeGluaGFfcGFzc190b19waHBfYmFja2VuZCgpIHdlIG1lcmdlIHRoZSBpdGVtcworLy8gIHByb3ZpZGVkIGludG8gdGhlIENvbmZpZworcmVxdWlyZV9vbmNlKHJlYWxwYXRoKGRpcm5hbWUoX19GSUxFX18pIC4gJy8uLi8uLi9jb250cmliL3BocC14aW5oYS5waHAnKSk7CitpZigkcGFzc2VkX2RhdGEgPSB4aW5oYV9yZWFkX3Bhc3NlZF9kYXRhKCkpCit7CisgICRJTUNvbmZpZyA9IGFycmF5X21lcmdlKCRJTUNvbmZpZywgJHBhc3NlZF9kYXRhKTsKKyAgJElNQ29uZmlnWydiYWNrZW5kX3VybCddIC49IHhpbmhhX3Bhc3NlZF9kYXRhX3F1ZXJ5c3RyaW5nKCkgLiAnJic7CisgIAorICBpZigkSU1Db25maWdbJ0ZsaWNrciddKQorICB7CisgICAgZm9yZWFjaCgkRmxpY2tyRGVmYXVsdHMgYXMgJGsgPT4gJHYpCisgICAgeworICAgICAgaWYoIWlzc2V0KCRJTUNvbmZpZ1snRmxpY2tyJ11bJGtdKSkKKyAgICAgIHsKKyAgICAgICAgJElNQ29uZmlnWydGbGlja3InXVska10gPSAkdjsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKy8vIERlcHJlY2F0ZWQgY29uZmlnIHBhc3NpbmcsIGRvbid0IHVzZSB0aGlzIHdheSBhbnkgbW9yZSEKK2Vsc2VpZihpc3NldCgkX1JFUVVFU1RbJ2JhY2tlbmRfY29uZmlnJ10pKQoreworICBpZihnZXRfbWFnaWNfcXVvdGVzX2dwYygpKSB7CisgICAgJF9SRVFVRVNUWydiYWNrZW5kX2NvbmZpZyddID0gc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFsnYmFja2VuZF9jb25maWcnXSk7CisgIH0KKyAgCisgIGlmKCRfUkVRVUVTVFsnYmFja2VuZF9jb25maWdfc2VjcmV0X2tleV9sb2NhdGlvbiddICE9PSAnWGluaGE6SW1hZ2VNYW5hZ2VyJykKKyAgeworICAgIHRyaWdnZXJfZXJyb3IoJ1Byb2dyYW1taW5nIEVycm9yIC0gcGxlYXNlIGNvbnRhY3QgdGhlIHdlYnNpdGUgYWRtaW5pc3RyYXRvci9wcm9ncmFtbWVyIHRvIGFsZXJ0IHRoZW0gdG8gdGhpcyBwcm9ibGVtLiBBIG5vbi1kZWZhdWx0IGJhY2tlbmQga2V5IGxvY2F0aW9uIGlzIGJlaW5nIHVzZWQgdG8gcGFzcyBiYWNrZW5kIGRhdGEgdG8gWGluaGEsIGJ1dCB0aGUgc2FtZSBrZXkgbG9jYXRpb24gaXMgbm90IGJlaW5nIHVzZWQgdG8gcmVjZWl2ZSBkYXRhLiAgVGhlIHNwZWNpYWwgYmFja2VuZCBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGlnbm9yZWQuICBUbyByZXNvbHZlIHRoaXMsIHlvdSBzaG91bGQgZWRpdCBwbHVnaW5zL0ltYWdlTWFuYWdlci9jb25maWcucGhwIGFuZCBjaGFuZ2UgdGhlIGRlZmF1bHQga2V5IGxvY2F0aW9uIGZyb20gIlhpbmhhOkltYWdlTWFuYWdlciIgdG8geW91ciBkZXNpcmVkIG5vbiBkZWZhdWx0LiAgU2VlOiBodHRwOi8vdHJhYy54aW5oYS5vcmcvdGlja2V0LzE1MTgnLCBFX1VTRVJfRVJST1IpOyAgICAKKyAgfQorICBlbHNlCisgIHsKKyAgCisgIC8vIENvbmZpZyBzcGVjaWZpZWQgZnJvbSBmcm9udCBlbmQsIGNoZWNrIHRoYXQgaXQncyB2YWxpZAorICBzZXNzaW9uX3N0YXJ0KCk7CisgICRzZWNyZXQgPSAkX1NFU1NJT05bJF9SRVFVRVNUWydiYWNrZW5kX2NvbmZpZ19zZWNyZXRfa2V5X2xvY2F0aW9uJ11dOworCisgIGlmKCRfUkVRVUVTVFsnYmFja2VuZF9jb25maWdfaGFzaCddICE9PSBzaGExKCRfUkVRVUVTVFsnYmFja2VuZF9jb25maWcnXSAuICRzZWNyZXQpKQorICB7CisgICAgZGllKCJCYWNrZW5kIHNlY3VyaXR5IGVycm9yLiIpOworICB9CisKKyAgJHRvX21lcmdlID0gdW5zZXJpYWxpemUoJF9SRVFVRVNUWydiYWNrZW5kX2NvbmZpZyddKTsKKyAgaWYoIWlzX2FycmF5KCR0b19tZXJnZSkpCisgIHsKKyAgICBkaWUoIkJhY2tlbmQgY29uZmlnIHN5bnRheCBlcnJvci4iKTsKKyAgfQorCisgICRJTUNvbmZpZyA9IGFycmF5X21lcmdlKCRJTUNvbmZpZywgJHRvX21lcmdlKTsKKyAgJElNQ29uZmlnWydiYWNrZW5kX3VybCddIC49ICJiYWNrZW5kX2NvbmZpZz0iIC4gcmF3dXJsZW5jb2RlKCRfUkVRVUVTVFsnYmFja2VuZF9jb25maWcnXSkgLiAnJic7CisgICRJTUNvbmZpZ1snYmFja2VuZF91cmwnXSAuPSAiYmFja2VuZF9jb25maWdfaGFzaD0iIC4gcmF3dXJsZW5jb2RlKCRfUkVRVUVTVFsnYmFja2VuZF9jb25maWdfaGFzaCddKSAuICcmJzsKKyAgJElNQ29uZmlnWydiYWNrZW5kX3VybCddIC49ICJiYWNrZW5kX2NvbmZpZ19zZWNyZXRfa2V5X2xvY2F0aW9uPSIgLiByYXd1cmxlbmNvZGUoJF9SRVFVRVNUWydiYWNrZW5kX2NvbmZpZ19zZWNyZXRfa2V5X2xvY2F0aW9uJ10pIC4gJyYnOworICB9Cit9CisKK2RlZmluZSgnSU1BR0VfQ0xBU1MnLCAkSU1Db25maWdbJ0lNQUdFX0NMQVNTJ10pOworZGVmaW5lKCdJTUFHRV9UUkFOU0ZPUk1fTElCX1BBVEgnLCAkSU1Db25maWdbJ0lNQUdFX1RSQU5TRk9STV9MSUJfUEFUSCddKTsKK2RlZmluZSggIklNX0NPTkZJR19MT0FERUQiLCAieWVzIiApOworCisvLyBicmluZyBpbiB0aGUgZGVidWdnaW5nIGxpYnJhcnkKKworaW5jbHVkZV9vbmNlKCAiZGR0LnBocCIgKTsKKworLy8gdW5jb21tZW50IHRvIHNlbmQgZGVidWcgbWVzc2FnZXMgdG8gYSBsb2NhbCBmaWxlCisvLyBfc2V0RGVidWdMb2coICIvdG1wL2RlYnVnX2xvZy50eHQiICk7CisKKy8vIHR1cm4gZGVidWdnaW5nIG9uIGV2ZXJ5d2hlcmUuCisvLyBfZGR0T24oKTsKKworLy8gRU5ECisKKz8+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9kZHQucGhwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvZGR0LnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTkyYjhiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvZGR0LnBocApAQCAtMCwwICsxLDI4OCBAQAorPD9waHAgCisvKgorVGhpcyBkZHQgbGlicmFyeSBpcyByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEhUTUxBcmVhIGxpY2Vuc2UuIAorU2VlIGxpY2Vuc2UudHh0IHRoYXQgaXMgc2hpcHBlZCB3aXRoIFhpbmhhLgorKi8KKworLy8gbXVzdCBiZSBpbmNsdWRlZCBhZnRlciB0aGUgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBsb2FkZWQuCisKK2lmICggISBkZWZpbmVkKCAiSU1fQ09ORklHX0xPQURFRCIgKSApCisJZGllKCAic29ycnkiICk7CisKKy8qKgorKiBEZWJ1ZyBhbmQgRXJyb3IgTWVzc2FnZSBmdW5jdGlvbnMuCisqCisqIFRoZXNlIGZ1bmN0aW9ucyBpbXBsZW1lbnQgYSBwcm9jZWR1cmFsIHZlcnNpb24gb2YgdGhlIGZvcm1WaXN0YSBERFQgZGVidWcKKyogbWVzc2FnZSBzeXN0ZW0uCisqCisqIEBwYWNrYWdlIGZvcm1WaXN0YQorKiBAc3VicGFja2FnZSBsaWIKKyogQGNvcHlyaWdodCBEVExpbmssIExMQyAyMDA1CisqIEBhdXRob3IgWWVybW8gTGFtZXJzCisqIEBzZWUgaHR0cDovL3d3dy5mb3JtdmlzdGEuY29tL2NvbnRhY3QuaHRtbAorKi8KKworLy8gUkVWSVNJT04gSElTVE9SWToKKy8vCisvLyAyNiBKYW4gMjAwMSBZbUw6CisvLwkJLiBpbml0aWFsIHJldmlzaW9uCisvLworLy8gMjAwMi0wNi0xOSBZbUw6CisvLwkJLiBhZGRlZAlsb2dnaW5nCWRlYnVnIGFuZCBlcnJvcgltZXNzYWdlcyB0byBhIGZpbGUuCisvLworLy8gMjAwNC0wMi0wNiBZbUw6CisvLwkuCWFkZGVkIGEgbmV3bGluZSB0byBnZW5lcmF0ZWQgbWVzc2FnZXMuCisvLworLy8gMjAwNS0wMS0wOSBZbUw6CisvLwkuCW5vdyBjaGVja3MgZ2xvYmFsICRmdkRFQlVHWyAibG9nZmlsZSIgXSBzZXR0aW5nIGZvciAKKy8vCQlsb2dmaWxlIHRvIG91dHB1dCB0by4gCisvLwkuCWR1bXBpbmcgdG8gZmlsZSBoYXMgbm90IGJlZW4gY29tYmluZWQgaW50byBhIGR1bXBtc2cgCisvLwkJbWV0aG9kLgorLy8KKy8vIDIwMDUtMDItMjUgWW1MOgorLy8JLglhZGRlZCBfZXJyb3IoKSBzdXBwb3J0IGZvciBjbWRMaW5lIHByb2dyYW1zLgorLy8KKy8vIDIwMDUtMDMtMjAgWW1MOgorLy8JLgljaGFuZ2VkIGxpY2Vuc2UgZm9yIHRoaXMgZmlsZSB0byBIVE1MQXJlYSBmcm9tIFJQTC4KKy8vCS4JcXVpY2sgaGFjayB0byByZXB1cnBvc2UgZm9yIFhpbmhhLgorLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisqIGR1bXBzIG1lc3NhZ2UgdG8gc3Rkb3V0IG9yIGxvZyBmaWxlIGRlcGVuZGluZyB1cG9uIGdsb2JhbC4KKyoKKyogY2hlY2tzICRmdkRFQlVHWyJsb2dmaWxlIl0gZ2xvYmFsIGZvciBuYW1lIG9mIGZpbGUgdG8gZHVtcAorKiBtZXNzYWdlcyB0by4gT3BlbnMgdGhlIGZpbGUgb25jZS4KKyovCisKK2Z1bmN0aW9uIGR1bXBtc2coICRtc2dsaW5lICkKK3sKKworZ2xvYmFsICRmdkRFQlVHOworCitpZiAoIEAkZnZERUJVR1sgImxvZ2ZpbGUiIF0gIT0gTlVMTCApCisJeworCisJLy8gb25seSBvcGVuIHRoZSBmaWxlIG9uY2UgYW5kIHN0b3JlIHRoZSBoYW5kbGUgaW4gdGhlIGdsb2JhbAorCS8vIGZ2REVCVUcgYXJyYXkgLi4gZm9yIG5vdy4KKworCWlmICggQCRmdkRFQlVHWyAibG9nZmlsZV9mcCIgXSA9PSBOVUxMICkKKwkJeworCisJCS8vIHdlIGNsZWFyIG91dCB0aGUgZGVidWcgZmlsZSBvbiBlYWNoIHJ1bi4KKworCQlpZiAoKCAkZnZERUJVR1sgImxvZ2ZpbGVfZnAiIF0gPSBmb3BlbiggJGZ2REVCVUdbICJsb2dmaWxlIiBdLCAiYSIgKSkgPT0gTlVMTCApCisJCQl7CisJCQlkaWUoICJkZHQoKTogdW5hYmxlIHRvIG9wZW4gZGVidWcgbG9nIiApOworCQkJcmV0dXJuICBmYWxzZSA7CisJCQl9CisJCX0KKworCWZwdXRzKCAkZnZERUJVR1sgImxvZ2ZpbGVfZnAiIF0sICIkbXNnbGluZSIgKTsKKwlmZmx1c2goICRmdkRFQlVHWyAibG9nZmlsZV9mcCIgXSApOworCisJfQorZWxzZQorCXsKKwllY2hvICRtc2dsaW5lOworCX0KKworfQkvLyBlbmQgb2YgZHVtcG1zZy4KKworLyoqCisqIGRpc3BsYXlzIGEgZm9ybWF0dGVkIGRlYnVnZ2luZyBtZXNzYWdlLgorKgorKiBJZiBkZHRPbigpIHdhcyBjYWxsZWQsIG91dHB1dHMgYSBmb3JtYXR0ZWQgZGVidWdnaW5nIG1lc3NhZ2UuCisqCisqIEBwYXJhbSBzdHJpbmcgJGZpbGUgZmlsZW5hbWUsIHVzdWFsbHkgX19GSUxFX18KKyogQHBhcmFtIHN0cmluZyAkbGluZSBsaW5lIG51bWJlciBpbiBmaWxlLCB1c3VhbGx5IF9fTElORV9fCisqIEBwYXJhbSBzdHJpbmcgJG1zZyBkZWJ1Z2dpbmcgbWVzc2FnZSB0byBkaXNwbGF5CisqLworCitmdW5jdGlvbiBfZGR0KCAkZmlsZSwgJGxpbmUsICRtc2cgKQoreworCitnbG9iYWwgJF9ERFQ7CitnbG9iYWwgJF9ERFRfREVCVUdfTE9HOworZ2xvYmFsICRfRERUX0NNRExJTkU7CisKKyRiYXNlbmFtZSA9IGJhc2VuYW1lKCAkZmlsZSApOworCitpZiAoIEAkX0REVCA9PSAieWVzIiApCisJeworCisJaWYgKCBAJF9ERFRfQ01ETElORSA9PSAieWVzIiApCisJCXsKKwkJZHVtcG1zZyggYmFzZW5hbWUoICRmaWxlICkgLiAiOiRsaW5lOiAkbXNnIFxuIiApOworCQlmbHVzaCgpOworCisJCX0KKwllbHNlCisJCXsKKwkJZHVtcG1zZyggIjxwPiRiYXNlbmFtZTokbGluZTogJG1zZzwvcD5cbiIgKTsKKwkJfQorCX0KKworfQkvLyBlbmQgb2YgX2RkdAorCisvKioKKyogZGlzcGxheXMgYSBmb3JtYXR0ZWQgZHVtcCBvZiBhbiBhc3NvY2lhdGl2ZSBhcnJheS4KKyoKKyogSWYgZGR0T24oKSB3YXMgY2FsbGVkLCBvdXRwdXRzIGEgZm9ybWF0dGVkIGRlYnVnZ2luZyBtZXNzYWdlIHNob3dpbmcgCisqIGNvbnRlbnRzIG9mIGFycmF5LgorKgorKiBAcGFyYW0gc3RyaW5nICRmaWxlIGZpbGVuYW1lLCB1c3VhbGx5IF9fRklMRV9fCisqIEBwYXJhbSBzdHJpbmcgJGxpbmUgbGluZSBudW1iZXIgaW4gZmlsZSwgdXN1YWxseSBfX0xJTkVfXworKiBAcGFyYW0gc3RyaW5nICRtc2cgZGVidWdnaW5nIG1lc3NhZ2UgdG8gZGlzcGxheQorKiBAcGFyYW0gYXJyYXkgJGFycmF5X3ZhciBhcnJheSB0byBkdW1wLgorKi8KKworZnVuY3Rpb24gX2RkdEFycmF5KCAkZmlsZSwgJGxpbmUsICRtc2csCSRhcnJheV92YXIgKQoreworCitnbG9iYWwgJF9ERFQ7CisKK2lmICggJF9ERFQgPT0gInllcyIgKQorCXsKKworCWR1bXBtc2coICI8aDI+JGZpbGU6JGxpbmU6ICRtc2c8L2gyPiIgKTsKKwkKKwlmb3JlYWNoCSggJGFycmF5X3ZhciBhcwkkbmFtZSA9PiAkdmFsdWUJKQorCQl7CisJCWR1bXBtc2coICI8cD48Yj4kbmFtZTwvYj4gPT4gPGI+JHZhbHVlPC9iPlxuIiApOworCQl9CisJfQorCit9CS8vIGVuZCBvZiBfZGR0QXJyYXkKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisqIENlbnRyYWwgRXJyb3IgRnVuY3Rpb24uCisqCisqIERpc3BsYXlzIGEgZm9ybWF0dGVkIGVycm9yIG1lc3NhZ2UgdG8gdGhlIHVzZXIuCisqIElmIHRoZSBnbG9iYWwgX0REVF9FUlJPUl9MT0cgaXMgc2V0IHRoZSBlcnJvciBtZXNzYWdlIGlzIGR1bXBlZCAKKyogdG8gdGhhdCBmaWxlCWluc3RlYWQJb2YgYmVpbmcgZGlzcGxheWVkIHRvIHRoZSB1c2VyLgorKi8KKworZnVuY3Rpb24gX2Vycm9yKCAkZmlsZSwJJGxpbmUsICRtc2cgKQoreworCitnbG9iYWwgJF9ERFRfRVJST1JfTE9HOworZ2xvYmFsICRfRERUX0NNRExJTkU7CisKK2lmICggQCRfRERUX0VSUk9SX0xPRyA9PSBOVUxMICkKKwl7CisKKwlpZiAoIEAkX0REVF9DTURMSU5FID09ICJ5ZXMiICkKKwkJeworCQllY2hvIGJhc2VuYW1lKCRmaWxlKSAuICI6JGxpbmU6ICRtc2dcbiI7CisJCX0KKwllbHNlCisJCXsKKwkJZWNobyAiPGgyPiRmaWxlOiRsaW5lOiAkbXNnPC9oMj4iOworCQl9CisJfQorZWxzZQorCXsKKwkgCisJaWYgKCggJGZwID0gZm9wZW4oICRfRERUX0VSUk9SX0xPRywgImEiCSkpICE9IE5VTEwgKQorCQl7CisJCWZwdXRzKCAkZnAsIGRhdGUoIkQgTSBqCUc6aTpzIFQJWSIpIC4gIgktICRmaWxlOiRsaW5lOiAkbXNnXG4iICk7CisJCWZjbG9zZSgJJGZwICk7CisJCX0KKwkJCisJfQorCQorfQkvLyBlbmQgb2YgX2Vycm9yCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZnVuY3Rpb24gZXJyb3JFY2hvKCAkdGl0bGUsICRmaWVsZCApCit7CisKK2dsb2JhbCAkZXJyb3JfbXNnOworCitpZiAoICRlcnJvcl9tc2dbICRmaWVsZAldICE9ICIiCSkKKwl7CisJCisJZWNobyAiPEZPTlQgU0laRT1cIisyXCIJQ09MT1I9XCJSRURcIj4kdGl0bGU8L0ZPTlQ+IjsKKwkKKwl9CitlbHNlCisJeworCQorCWVjaG8gJHRpdGxlOworCQorCX0KKwkKK30JLy8gZW5kIG9mIGVycm9yRWNobworCisvKioKKyogdHVybnMgb24gcHJvY2VkdXJhbCBkZWJ1Z2dpbmcuCisqCisqIENhdXNlcyBfZGR0KCkgY2FsbHMgdG8gZGlzcGxheSBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisqLworCitmdW5jdGlvbiBfZGR0T24oKQoreworCitnbG9iYWwgJF9ERFQ7CisKKyRfRERUID0JInllcyI7CisKK30KKworLyoqCisqIHNldCBlcnJvciBtZXNzYWdlIGRlc3RpbmF0aW9uLgorKgorKiBzZXRzIHRoZSBkZXN0aW5hdGlvbiBmb3IgZXJyb3IgbWVzc2FnZXMuCisqCisqIEBwYXJhbSBzdHJpbmcgJGZpbGUgZnVsbCBwYXRoIHRvIGVycm9ybG9nLgorKi8KKworZnVuY3Rpb24gX3NldEVycm9yTG9nKCAkZXJyb3JMb2cgKQoreworCitnbG9iYWwgJF9ERFRfRVJST1JfTE9HOworCiskX0REVF9FUlJPUl9MT0cJPSAkZXJyb3JMb2c7CisKK30KKworLyoqCisqIHNldCBvdXRwdXQgZmlsZSBmb3IgZGVidWdnaW5nIG1lc3NhZ2VzLgorKgorKiBzZXRzIHRoZSBkZXN0aW5hdGlvbiBmaWxlIGZvciBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisqCisqIEBwYXJhbSBzdHJpbmcgJGZpbGUgZnVsbCBwYXRoIHRvIGRlYnVnbG9nLgorKi8KKworZnVuY3Rpb24gX3NldERlYnVnTG9nKCAkZGVidWdMb2cgKQoreworCitnbG9iYWwgJGZ2REVCVUc7CisKKyRmdkRFQlVHWyAibG9nZmlsZSIgXSA9ICRkZWJ1Z0xvZzsKKworfQorCisvKioKKyogc2V0IGRlYnVnZ2luZyBvdXRwdXQgc3R5bGUgdG8gY29tbWFuZCBsaW5lLgorKgorKiB0ZWxscyBkZHQgdG8gZm9ybWF0IGRlYnVnZ2luZyBtZXNzYWdlcyBmb3IgYSAKKyogY29tbWFuZCBsaW5lIHByb2dyYW0uCisqLworCitmdW5jdGlvbiBfZGR0U2V0Q21kTGluZSgpCit7CisKK2dsb2JhbCAkX0REVF9DTURMSU5FOworCiskX0REVF9DTURMSU5FID0gInllcyI7CisKK30KKworLy8gRU5ECisKKz8+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9kZW1vX2ltYWdlcy8uaHRhY2Nlc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9kZW1vX2ltYWdlcy8uaHRhY2Nlc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiNDVjZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2RlbW9faW1hZ2VzLy5odGFjY2VzcwpAQCAtMCwwICsxLDExIEBACis8SWZNb2R1bGUgbW9kX3BocC5jPgorIHBocF9mbGFnIGVuZ2luZSBvZmYKKzwvSWZNb2R1bGU+CitBZGRUeXBlIHRleHQvaHRtbCAuaHRtbCAuaHRtIC5zaHRtbCAucGhwIC5waHAzIC5waHA0IC5waHA1IC5waHA2IC5waHA3IC5waHA4IC5waHRtbCAucGh0bSAucGwgLnB5IC5jZ2kKK1JlbW92ZUhhbmRsZXIgLnBocAorUmVtb3ZlSGFuZGxlciAucGhwOAorUmVtb3ZlSGFuZGxlciAucGhwNworUmVtb3ZlSGFuZGxlciAucGhwNgorUmVtb3ZlSGFuZGxlciAucGhwNQorUmVtb3ZlSGFuZGxlciAucGhwNAorUmVtb3ZlSGFuZGxlciAucGhwMwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2RlbW9faW1hZ2VzL2Jpa2VycGVlcC5qcGcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9kZW1vX2ltYWdlcy9iaWtlcnBlZXAuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZTcwMjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9kZW1vX2ltYWdlcy9iaWtlcnBlZXAuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2RlbW9faW1hZ2VzL2xpbnV4Ly5odGFjY2VzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2RlbW9faW1hZ2VzL2xpbnV4Ly5odGFjY2VzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGI0NWNmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvZGVtb19pbWFnZXMvbGludXgvLmh0YWNjZXNzCkBAIC0wLDAgKzEsMTEgQEAKKzxJZk1vZHVsZSBtb2RfcGhwLmM+CisgcGhwX2ZsYWcgZW5naW5lIG9mZgorPC9JZk1vZHVsZT4KK0FkZFR5cGUgdGV4dC9odG1sIC5odG1sIC5odG0gLnNodG1sIC5waHAgLnBocDMgLnBocDQgLnBocDUgLnBocDYgLnBocDcgLnBocDggLnBodG1sIC5waHRtIC5wbCAucHkgLmNnaQorUmVtb3ZlSGFuZGxlciAucGhwCitSZW1vdmVIYW5kbGVyIC5waHA4CitSZW1vdmVIYW5kbGVyIC5waHA3CitSZW1vdmVIYW5kbGVyIC5waHA2CitSZW1vdmVIYW5kbGVyIC5waHA1CitSZW1vdmVIYW5kbGVyIC5waHA0CitSZW1vdmVIYW5kbGVyIC5waHAzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvZGVtb19pbWFnZXMvbGludXgvbGludXguZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvZGVtb19pbWFnZXMvbGludXgvbGludXguZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNDJkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9kZW1vX2ltYWdlcy9saW51eC9saW51eC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvZGVtb19pbWFnZXMvd2Vzbm90aDA3OC5qcGcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9kZW1vX2ltYWdlcy93ZXNub3RoMDc4LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTM3ZDFhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvZGVtb19pbWFnZXMvd2Vzbm90aDA3OC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvZWRpdG9yLnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2VkaXRvci5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc3MzY2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2VkaXRvci5waHAKQEAgLTAsMCArMSwxNDkgQEAKKzw/cGhwIAorLyoqCisgKiBUaGUgUEhQIEltYWdlIEVkaXRvciB1c2VyIGludGVyZmFjZS4KKyAqIEBhdXRob3IgJEF1dGhvcjpyYXkgJAorICogQHZlcnNpb24gJElkOmVkaXRvci5waHAgOTg3IDIwMDgtMDQtMTIgMTI6Mzk6MDRaIHJheSAkCisgKiBAcGFja2FnZSBJbWFnZU1hbmFnZXIKKyAqLworCityZXF1aXJlX29uY2UoJ2NvbmZpZy5pbmMucGhwJyk7CityZXF1aXJlX29uY2UoJ0NsYXNzZXMvSW1hZ2VNYW5hZ2VyLnBocCcpOworcmVxdWlyZV9vbmNlKCdDbGFzc2VzL0ltYWdlRWRpdG9yLnBocCcpOworCiskbWFuYWdlciA9IG5ldyBJbWFnZU1hbmFnZXIoJElNQ29uZmlnKTsKKyRlZGl0b3IgPSBuZXcgSW1hZ2VFZGl0b3IoJG1hbmFnZXIpOworCis/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorCis8aHRtbD4KKzxoZWFkPgorCTx0aXRsZT48L3RpdGxlPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorX2JhY2tlbmRfdXJsID0gIjw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFja2VuZF91cmwnXTsgPz4iOworPC9zY3JpcHQ+CisJPGxpbmsgaHJlZj0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+YXNzZXRzL2VkaXRvci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIC8+CQorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+YXNzZXRzL3NsaWRlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9wb3B1cHMvcG9wdXAuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+YXNzZXRzL3BvcHVwLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKy8qPCFbQ0RBVEFbKi8KKwl3aW5kb3cucmVzaXplVG8oNjczLCA1MzEpOworCisJaWYod2luZG93Lm9wZW5lcikKKwkJSFRNTEFyZWEgPSB3aW5kb3cub3BlbmVyLkhUTUxBcmVhOworLypdXT4qLworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5hc3NldHMvZWRpdG9yLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2IGlkPSJpbmRpY2F0b3IiPgorPGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9zcGFjZXIuZ2lmIiBpZD0iaW5kaWNhdG9yX2ltYWdlIiBoZWlnaHQ9IjIwIiB3aWR0aD0iMjAiIGFsdD0iIiAvPgorPC9kaXY+Cis8ZGl2IGlkPSJ0b29scyI+CisJPGRpdiBpZD0idG9vbHNfY3JvcCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorCQk8ZGl2IGlkPSJ0b29sX2lucHV0cyI+CisJCQk8bGFiZWwgZm9yPSJjeCI+U3RhcnQgWDo8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iY3giICBjbGFzcz0idGV4dElucHV0IiBvbmNoYW5nZT0idXBkYXRlTWFya2VyKCdjcm9wJykiLz4KKwkJCTxsYWJlbCBmb3I9ImN5Ij5TdGFydCBZOjwvbGFiZWw+PGlucHV0IHR5cGU9InRleHQiIGlkPSJjeSIgY2xhc3M9InRleHRJbnB1dCIgb25jaGFuZ2U9InVwZGF0ZU1hcmtlcignY3JvcCcpIi8+CisJCQk8bGFiZWwgZm9yPSJjdyI+V2lkdGg6PC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImN3IiBjbGFzcz0idGV4dElucHV0IiBvbmNoYW5nZT0idXBkYXRlTWFya2VyKCdjcm9wJykiLz4KKwkJCTxsYWJlbCBmb3I9ImNoIj5IZWlnaHQ6PC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImNoIiBjbGFzcz0idGV4dElucHV0IiBvbmNoYW5nZT0idXBkYXRlTWFya2VyKCdjcm9wJykiLz4KKwkJCTxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvZGl2LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjIiIGNsYXNzPSJkaXYiIGFsdD0ifCIgLz4KKwkJPC9kaXY+CQorCQk8YSBocmVmPSJqYXZhc2NyaXB0OiBlZGl0b3IuZG9TdWJtaXQoJ2Nyb3AnKTsiIGNsYXNzPSJidXR0b25zIiB0aXRsZT0iT0siPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvYnRuX29rLmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjMwIiBhbHQ9Ik9LIiAvPjwvYT4KKwkJPGEgaHJlZj0iamF2YXNjcmlwdDogZWRpdG9yLnJlc2V0KCk7IiBjbGFzcz0iYnV0dG9ucyIgdGl0bGU9IkNhbmNlbCI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9idG5fY2FuY2VsLmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjMwIiBhbHQ9IkNhbmNlbCIgLz48L2E+CQkKKwk8L2Rpdj4JCisJPGRpdiBpZD0idG9vbHNfc2NhbGUiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKwkJPGRpdiBpZD0idG9vbF9pbnB1dHMiPgorCQkJPGxhYmVsIGZvcj0ic3ciPldpZHRoOjwvbGFiZWw+PGlucHV0IHR5cGU9InRleHQiIGlkPSJzdyIgY2xhc3M9InRleHRJbnB1dCIgb25jaGFuZ2U9ImNoZWNrQ29uc3RyYWlucygnd2lkdGgnKSIvPgorCQkJPGEgaHJlZj0iamF2YXNjcmlwdDp0b2dnbGVDb25zdHJhaW50cygpOyIgdGl0bGU9IkxvY2siPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvaXNsb2NrZWQyLmdpZiIgaWQ9InNjYWxlQ29uc3RJbWciIGhlaWdodD0iMTQiIHdpZHRoPSI4IiBhbHQ9IkxvY2siIGNsYXNzPSJkaXYiIC8+PC9hPjxsYWJlbCBmb3I9InNoIj5IZWlnaHQ6PC9sYWJlbD4KKwkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic2giIGNsYXNzPSJ0ZXh0SW5wdXQiIG9uY2hhbmdlPSJjaGVja0NvbnN0cmFpbnMoJ2hlaWdodCcpIi8+CisJCQk8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb25zdFByb3AiIHZhbHVlPSIxIiBjaGVja2VkPSJjaGVja2VkIiBvbmNsaWNrPSJ0b2dnbGVDb25zdHJhaW50cygpIi8+CisJCQk8bGFiZWwgZm9yPSJjb25zdFByb3AiPkNvbnN0cmFpbiBQcm9wb3J0aW9uczwvbGFiZWw+CisJCQk8aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2Rpdi5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIyIiBjbGFzcz0iZGl2IiBhbHQ9InwiIC8+CisJCTwvZGl2PgkKKwkJPGEgaHJlZj0iamF2YXNjcmlwdDogZWRpdG9yLmRvU3VibWl0KCdzY2FsZScpOyIgY2xhc3M9ImJ1dHRvbnMiIHRpdGxlPSJPSyI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9idG5fb2suZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzAiIGFsdD0iT0siIC8+PC9hPgorCQk8YSBocmVmPSJqYXZhc2NyaXB0OiBlZGl0b3IucmVzZXQoKTsiIGNsYXNzPSJidXR0b25zIiB0aXRsZT0iQ2FuY2VsIj48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2J0bl9jYW5jZWwuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzAiIGFsdD0iQ2FuY2VsIiAvPjwvYT4JCQorCTwvZGl2PgkKKwk8ZGl2IGlkPSJ0b29sc19yb3RhdGUiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKwkJPGRpdiBpZD0idG9vbF9pbnB1dHMiPgorCQkJPHNlbGVjdCBpZD0iZmxpcCIgbmFtZT0iZmxpcCIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAxMHB4OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyI+CisgICAgICAgICAgICAgIDxvcHRpb24gc2VsZWN0ZWQ9InNlbGVjdGVkIj5GbGlwIEltYWdlPC9vcHRpb24+CisgICAgICAgICAgICAgIDxvcHRpb24+LS0tLS0tLS0tLS0tLS0tLS08L29wdGlvbj4KKyAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaG96Ij5GbGlwIEhvcml6b250YWw8L29wdGlvbj4KKyAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0idmVyIj5GbGlwIFZlcnRpY2FsPC9vcHRpb24+CisgICAgICAgICA8L3NlbGVjdD4KKwkJCTxzZWxlY3QgbmFtZT0icm90YXRlIiBvbmNoYW5nZT0icm90YXRlUHJlc2V0KHRoaXMpIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDIwcHg7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ij4KKyAgICAgICAgICAgICAgPG9wdGlvbiBzZWxlY3RlZD0ic2VsZWN0ZWQiPlJvdGF0ZSBJbWFnZTwvb3B0aW9uPgorICAgICAgICAgICAgICA8b3B0aW9uPi0tLS0tLS0tLS0tLS0tLS0tPC9vcHRpb24+CisKKyAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTgwIj5Sb3RhdGUgMTgwICZkZWc7PC9vcHRpb24+CisgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjkwIj5Sb3RhdGUgOTAgJmRlZzsgQ1c8L29wdGlvbj4KKyAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iLTkwIj5Sb3RhdGUgOTAgJmRlZzsgQ0NXPC9vcHRpb24+CisgICAgICAgICA8L3NlbGVjdD4KKwkJCTxsYWJlbCBmb3I9InJhIj5BbmdsZTo8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icmEiIGNsYXNzPSJ0ZXh0SW5wdXQiIC8+CisJCQk8aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2Rpdi5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIyIiBjbGFzcz0iZGl2IiBhbHQ9InwiIC8+CisJCTwvZGl2PgkKKwkJPGEgaHJlZj0iamF2YXNjcmlwdDogZWRpdG9yLmRvU3VibWl0KCdyb3RhdGUnKTsiIGNsYXNzPSJidXR0b25zIiB0aXRsZT0iT0siPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvYnRuX29rLmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjMwIiBhbHQ9Ik9LIiAvPjwvYT4KKwkJPGEgaHJlZj0iamF2YXNjcmlwdDogZWRpdG9yLnJlc2V0KCk7IiBjbGFzcz0iYnV0dG9ucyIgdGl0bGU9IkNhbmNlbCI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9idG5fY2FuY2VsLmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjMwIiBhbHQ9IkNhbmNlbCIgLz48L2E+CQkKKwk8L2Rpdj4JCQorCTxkaXYgaWQ9InRvb2xzX21lYXN1cmUiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKwkJPGRpdiBpZD0idG9vbF9pbnB1dHMiPgorCQkJPGxhYmVsPlg6PC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9Im1lYXN1cmVTdGF0cyIgaWQ9InN4IiAvPgorCQkJPGxhYmVsPlk6PC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9Im1lYXN1cmVTdGF0cyIgaWQ9InN5IiAvPgorCQkJPGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9kaXYuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMiIgY2xhc3M9ImRpdiIgYWx0PSJ8IiAvPgorCQkJPGxhYmVsPlc6PC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9Im1lYXN1cmVTdGF0cyIgaWQ9Im13IiAvPgorCQkJPGxhYmVsPkg6PC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9Im1lYXN1cmVTdGF0cyIgaWQ9Im1oIiAvPgorCQkJPGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9kaXYuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMiIgY2xhc3M9ImRpdiIgYWx0PSJ8IiAvPgorCQkJPGxhYmVsPkE6PC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9Im1lYXN1cmVTdGF0cyIgaWQ9Im1hIiAvPgkJCisJCQk8bGFiZWw+RDo8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0ibWVhc3VyZVN0YXRzIiBpZD0ibWQiIC8+CQkKKwkJCTxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvZGl2LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjIiIGNsYXNzPSJkaXYiIGFsdD0ifCIgLz4KKwkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJlZGl0b3IucmVzZXQoKTsiID5DbGVhcjwvYnV0dG9uPgorCQk8L2Rpdj4JCisJPC9kaXY+CisJPGRpdiBpZD0idG9vbHNfc2F2ZSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorCQk8ZGl2IGlkPSJ0b29sX2lucHV0cyI+CisJCQk8bGFiZWwgZm9yPSJzYXZlX2ZpbGVuYW1lIj5GaWxlbmFtZTo8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic2F2ZV9maWxlbmFtZSIgdmFsdWU9Ijw/cGhwIGVjaG8gJGVkaXRvci0+Z2V0RGVmYXVsdFNhdmVGaWxlKCk7Pz4iLz4KKwkJCTxzZWxlY3QgbmFtZT0iZm9ybWF0IiBpZD0ic2F2ZV9mb3JtYXQiIHN0eWxlPSJtYXJnaW4tbGVmdDogMTBweDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsiIG9uY2hhbmdlPSJ1cGRhdGVGb3JtYXQodGhpcykiPgorICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIiBzZWxlY3RlZD0ic2VsZWN0ZWQiPkltYWdlIEZvcm1hdDwvb3B0aW9uPgorICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj4tLS0tLS0tLS0tLS0tLS0tLS0tLS08L29wdGlvbj4KKyAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImpwZWcsODUiPkpQRUcgSGlnaDwvb3B0aW9uPgorICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ianBlZyw2MCI+SlBFRyBNZWRpdW08L29wdGlvbj4KKyAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImpwZWcsMzUiPkpQRUcgTG93PC9vcHRpb24+CisgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwbmciPlBORzwvb3B0aW9uPgorCQkJPD9waHAgaWYoJGVkaXRvci0+aXNHREdJRkFibGUoKSAhPSAtMSkgeyA/PgorICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZ2lmIj5HSUY8L29wdGlvbj4KKwkJCTw/cGhwIH0gPz4KKyAgICAgICAgIDwvc2VsZWN0PgorCQkJPGxhYmVsPlF1YWxpdHk6PC9sYWJlbD4KKwkJCTx0YWJsZSBzdHlsZT0iZGlzcGxheTogaW5saW5lOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KKwkJCQk8dHI+CisJCQkJPHRkPgorCQkJCQk8ZGl2IGlkPSJzbGlkZXJjYXNpbmciPiAKKwkJCQk8ZGl2IGlkPSJzbGlkZXJ0cmFjayIgc3R5bGU9IndpZHRoOjEwMHB4Ij48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL3NwYWNlci5naWYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGJvcmRlcj0iMCIgYWx0PSJ0cmFjayIgLz48L2Rpdj4KKyAgICAgICAgICAgIDxkaXYgaWQ9InNsaWRlcmJhciIgc3R5bGU9ImxlZnQ6ODVweCIgb25tb3VzZWRvd249ImNhcHR1cmVTdGFydCgpOyI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9zcGFjZXIuZ2lmIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBib3JkZXI9IjAiIGFsdD0idHJhY2siIC8+PC9kaXY+CisJCQk8L2Rpdj4JCisJCQkJPC90ZD4KKwkJCQk8L3RyPgorCQkJPC90YWJsZT4JCQkJCisJCQk8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InF1YWxpdHkiIG9uY2hhbmdlPSJ1cGRhdGVTbGlkZXIodGhpcy52YWx1ZSkiIHN0eWxlPSJ3aWR0aDogMmVtOyIgdmFsdWU9Ijg1Ii8+CisJCQk8aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2Rpdi5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIyIiBjbGFzcz0iZGl2IiBhbHQ9InwiIC8+CisJCTwvZGl2PgkKKwkJPGEgaHJlZj0iamF2YXNjcmlwdDogZWRpdG9yLmRvU3VibWl0KCdzYXZlJyk7IiBjbGFzcz0iYnV0dG9ucyIgdGl0bGU9Ik9LIj48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2J0bl9vay5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzMCIgYWx0PSJPSyIgLz48L2E+CisJCTxhIGhyZWY9ImphdmFzY3JpcHQ6IGVkaXRvci5yZXNldCgpOyIgY2xhc3M9ImJ1dHRvbnMiIHRpdGxlPSJDYW5jZWwiPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvYnRuX2NhbmNlbC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzMCIgYWx0PSJDYW5jZWwiIC8+PC9hPgkJCisJPC9kaXY+CQorPC9kaXY+Cis8ZGl2IGlkPSJ0b29sYmFyIj4KKzxhIGhyZWY9ImphdmFzY3JpcHQ6dG9nZ2xlKCdjcm9wJykiIGlkPSJpY29uX2Nyb3AiIHRpdGxlPSJDcm9wIj48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2Nyb3AuZ2lmIiBoZWlnaHQ9IjIwIiB3aWR0aD0iMjAiIGFsdD0iQ3JvcCIgLz48c3Bhbj5Dcm9wPC9zcGFuPjwvYT4KKzxhIGhyZWY9ImphdmFzY3JpcHQ6dG9nZ2xlKCdzY2FsZScpIiBpZD0iaWNvbl9zY2FsZSIgdGl0bGU9IlJlc2l6ZSI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy9zY2FsZS5naWYiIGhlaWdodD0iMjAiIHdpZHRoPSIyMCIgYWx0PSJSZXNpemUiIC8+PHNwYW4+UmVzaXplPC9zcGFuPjwvYT4KKzxhIGhyZWY9ImphdmFzY3JpcHQ6dG9nZ2xlKCdyb3RhdGUnKSIgaWQ9Imljb25fcm90YXRlIiB0aXRsZT0iUm90YXRlIj48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL3JvdGF0ZS5naWYiIGhlaWdodD0iMjAiIHdpZHRoPSIyMCIgYWx0PSJSb3RhdGUiIC8+PHNwYW4+Um90YXRlPC9zcGFuPjwvYT4KKzxhIGhyZWY9ImphdmFzY3JpcHQ6dG9nZ2xlKCdtZWFzdXJlJykiIGlkPSJpY29uX21lYXN1cmUiIHRpdGxlPSJNZWFzdXJlIj48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL21lYXN1cmUuZ2lmIiBoZWlnaHQ9IjIwIiB3aWR0aD0iMjAiIGFsdD0iTWVhc3VyZSIgLz48c3Bhbj5NZWFzdXJlPC9zcGFuPjwvYT4KKzxhIGhyZWY9ImphdmFzY3JpcHQ6IHRvZ2dsZU1hcmtlcigpOyIgdGl0bGU9Ik1hcmtlciI+PGltZyBpZD0ibWFya2VySW1nIiBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmltZy90X2JsYWNrLmdpZiIgaGVpZ2h0PSIyMCIgd2lkdGg9IjIwIiBhbHQ9Ik1hcmtlciIgLz48c3Bhbj5NYXJrZXI8L3NwYW4+PC9hPgorPGEgaHJlZj0iamF2YXNjcmlwdDp0b2dnbGUoJ3NhdmUnKSIgaWQ9Imljb25fc2F2ZSIgdGl0bGU9IlNhdmUiPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvc2F2ZS5naWYiIGhlaWdodD0iMjAiIHdpZHRoPSIyMCIgYWx0PSJTYXZlIiAvPjxzcGFuPlNhdmU8L3NwYW4+PC9hPgorPC9kaXY+Cis8ZGl2IGlkPSJjb250ZW50cyI+Cis8aWZyYW1lIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYWNrZW5kX3VybCddOyA/Pl9fZnVuY3Rpb249ZWRpdG9yRnJhbWUmaW1nPTw/cGhwIGlmKGlzc2V0KCRfR0VUWydpbWcnXSkpIGVjaG8gcmF3dXJsZW5jb2RlKCRfR0VUWydpbWcnXSk7ID8+IiBuYW1lPSJlZGl0b3IiIGlkPSJlZGl0b3IiICBzY3JvbGxpbmc9ImF1dG8iIHRpdGxlPSJJbWFnZSBFZGl0b3IiIGZyYW1lYm9yZGVyPSIwIj48L2lmcmFtZT4KKzwvZGl2PgorPGRpdiBpZD0iYm90dG9tIj48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9lZGl0b3JGcmFtZS5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9lZGl0b3JGcmFtZS5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhYzE0MQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2VkaXRvckZyYW1lLnBocApAQCAtMCwwICsxLDc5IEBACis8P3BocCAKKy8qKgorICogVGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIGltYWdlIHRvIGJlIGVkaXRlZC4KKyAqIEBhdXRob3IgJEF1dGhvcjpyYXkgJAorICogQHZlcnNpb24gJElkOmVkaXRvckZyYW1lLnBocCA2NzcgMjAwNy0wMS0xOSAyMjoyNDozNlogcmF5ICQKKyAqIEBwYWNrYWdlIEltYWdlTWFuYWdlcgorICovCisKK3JlcXVpcmVfb25jZSgnY29uZmlnLmluYy5waHAnKTsKK3JlcXVpcmVfb25jZSgnQ2xhc3Nlcy9JbWFnZU1hbmFnZXIucGhwJyk7CityZXF1aXJlX29uY2UoJ0NsYXNzZXMvSW1hZ2VFZGl0b3IucGhwJyk7CisKKyRtYW5hZ2VyID0gbmV3IEltYWdlTWFuYWdlcigkSU1Db25maWcpOworJGVkaXRvciA9IG5ldyBJbWFnZUVkaXRvcigkbWFuYWdlcik7CiskaW1hZ2VJbmZvID0gJGVkaXRvci0+cHJvY2Vzc0ltYWdlKCk7CisKKz8+CisKKzxodG1sPgorPGhlYWQ+CisJPHRpdGxlPjwvdGl0bGU+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitfYmFja2VuZF91cmwgPSAiPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYWNrZW5kX3VybCddOyA/PiI7Cis8L3NjcmlwdD4KKworPGxpbmsgaHJlZj0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+YXNzZXRzL2VkaXRvckZyYW1lLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgLz4JCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5hc3NldHMvd3pfanNncmFwaGljcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5hc3NldHMvRWRpdG9yQ29udGVudC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKK2lmKHdpbmRvdy50b3ApCisJSFRNTEFyZWEgPSB3aW5kb3cudG9wLkhUTUxBcmVhOworCitmdW5jdGlvbiBpMThuKHN0cikgeworICAgIHJldHVybiBIVE1MQXJlYS5fbGMoc3RyLCAnSW1hZ2VNYW5hZ2VyJyk7Cit9CisJCisJdmFyIG1vZGUgPSAiPD9waHAgZWNobyAkZWRpdG9yLT5nZXRBY3Rpb24oKTsgPz4iIC8vY3JvcCwgc2NhbGUsIG1lYXN1cmUKKwordmFyIGN1cnJlbnRJbWFnZUZpbGUgPSAiPD9waHAgaWYoY291bnQoJGltYWdlSW5mbyk+MCkgZWNobyByYXd1cmxlbmNvZGUoJGltYWdlSW5mb1snZmlsZSddKTsgPz4iOworCis8P3BocCBpZiAoJGVkaXRvci0+aXNGaWxlU2F2ZWQoKSA9PSAxKSB7ID8+CisJYWxlcnQoaTE4bignRmlsZSBzYXZlZC4nKSk7CisgIHdpbmRvdy5wYXJlbnQub3BlbmVyLnNlbGVjdEltYWdlCisgICAgKAorICAgICAgJzw/cGhwIGVjaG8gJGltYWdlSW5mb1snc2F2ZWRGaWxlJ10gPz4nLAorICAgICAgJzw/cGhwIGVjaG8gJGltYWdlSW5mb1snc2F2ZWRGaWxlJ10gPz4nLnJlcGxhY2UoL14uKlwvPyhbXlwvXSopJC8sICckMScpLAorICAgICAgPD9waHAgZWNobyAkaW1hZ2VJbmZvWyd3aWR0aCddID8+LAorICAgICAgPD9waHAgZWNobyAkaW1hZ2VJbmZvWydoZWlnaHQnXSA/PgorICAgICk7CisgIHdpbmRvdy5wYXJlbnQub3BlbmVyLnBhcmVudC5yZWZyZXNoKCk7CisgIHdpbmRvdy5wYXJlbnQuY2xvc2UoKTsKKzw/cGhwIH0gZWxzZSBpZiAoJGVkaXRvci0+aXNGaWxlU2F2ZWQoKSA9PSAtMSkgeyA/PgorCWFsZXJ0KGkxOG4oJ0ZpbGUgd2FzIG5vdCBzYXZlZC4nKSk7Cis8P3BocCB9ID8+CisKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+YXNzZXRzL2VkaXRvckZyYW1lLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2IGlkPSJzdGF0dXMiPjwvZGl2PgorPGRpdiBpZD0iYW50IiBjbGFzcz0ic2VsZWN0aW9uIiBzdHlsZT0idmlzaWJpbGl0eTpoaWRkZW4iPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvc3BhY2VyLmdpZiIgd2lkdGg9IjAiIGhlaWdodD0iMCIgYm9yZGVyPSIwIiBhbHQ9IiIgaWQ9ImNyb3BDb250ZW50Ij48L2Rpdj4KKzw/cGhwIGlmICgkZWRpdG9yLT5pc0dERWRpdGFibGUoKSA9PSAtMSkgeyA/PgorCTxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjEwcHg7Ij48c3BhbiBjbGFzcz0iZXJyb3IiPkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLjwvc3Bhbj48L2Rpdj4KKzw/cGhwIH0gPz4KKzx0YWJsZSBoZWlnaHQ9IjEwMCUiIHdpZHRoPSIxMDAlIj4KKwk8dHI+CisJCTx0ZD4KKzw/cGhwIGlmKGNvdW50KCRpbWFnZUluZm8pID4gMCAmJiBpc19maWxlKCRpbWFnZUluZm9bJ2Z1bGxwYXRoJ10pKSB7ID8+CisJPHNwYW4gaWQ9ImltZ0NhbnZhcyIgY2xhc3M9ImNyb3AiPjxpbWcgc3JjPSI8P3BocCBlY2hvICRpbWFnZUluZm9bJ3NyYyddOyA/PiIgPD9waHAgZWNobyAkaW1hZ2VJbmZvWydkaW1lbnNpb25zJ107ID8+IGFsdD0iIiBpZD0idGhlSW1hZ2UiIG5hbWU9InRoZUltYWdlIj48L3NwYW4+Cis8P3BocCB9IGVsc2UgeyA/PgorCTxzcGFuIGNsYXNzPSJlcnJvciI+Tm8gSW1hZ2UgQXZhaWxhYmxlPC9zcGFuPgorPD9waHAgfSA/PgorCQk8L3RkPgorCTwvdHI+Cis8L3RhYmxlPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ZsaWNrci5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9mbGlja3IucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllODk4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9mbGlja3IucGhwCkBAIC0wLDAgKzEsMjYzIEBACis8P3BocCAKKy8qKgorICogU2hvdyBhIGxpc3Qgb2YgaW1hZ2VzIGluIGEgbG9uZyBob3Jpem9udGFsIHRhYmxlLgorICogQGF1dGhvciAkQXV0aG9yOiBnb2dvICQKKyAqIEB2ZXJzaW9uICRJZDogaW1hZ2VzLnBocCA4NzcgMjAwNy0wOC0xMiAxNTo1MDowM1ogZ29nbyAkCisgKiBAcGFja2FnZSBJbWFnZU1hbmFnZXIKKyAqLworCityZXF1aXJlX29uY2UoJ2NvbmZpZy5pbmMucGhwJyk7CisKK3JlcXVpcmVfb25jZSgnQ2xhc3Nlcy9JbWFnZU1hbmFnZXIucGhwJyk7CityZXF1aXJlX29uY2UoJ0NsYXNzZXMvRmxpY2tyLnBocCcpOworCisvLyBTZWFyY2ggZm9yIHlvdXR1YmUgdmlkZW9zCiskb3B0cyA9IGFycmF5KAorICAgICAgICAgICAgICAncGVyX3BhZ2UnPT4gMjAsCisgICAgICAgICAgICAgICdzb3J0JyAgID0+ICdyZWxldmFuY2UnLCAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICdleHRyYXMnID0+ICdsaWNlbnNlLG93bmVyX25hbWUsdGFncycsCisgICAgICAgICAgICAgICdsaWNlbnNlJyA9PiBAJF9SRVFVRVNUWydmbGtMaWNlbnNlJ10gPyAkX1JFUVVFU1RbJ2Zsa0xpY2Vuc2UnXSA6IGZsaWNrcl9nZXRfZGVmYXVsdF91c2FnZV9pZCgpLCAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICk7CisKK2lmKEAkX1JFUVVFU1RbJ2Zsa1NlYXJjaCddKQoreworICAkb3B0c1sndGV4dCddID0gJF9SRVFVRVNUWydmbGtTZWFyY2gnXTsgCit9CisKK2lmKEAkX1JFUVVFU1RbJ2Zsa1VzZXJuYW1lJ10pCit7CisgICR1c2VyX2lkID0gZmxpY2tyX2dldF91c2VyX2lkKCRfUkVRVUVTVFsnZmxrVXNlcm5hbWUnXSk7CisgIGlmKCR1c2VyX2lkKQorICB7CisgICAgJG9wdHNbJ3VzZXJfaWQnXSA9ICR1c2VyX2lkOworICB9Cit9CisKKyRkYXRhID0gZmxpY2tyX3JlcXVlc3QoJ2ZsaWNrci5waG90b3Muc2VhcmNoJywgJG9wdHMpOworCisKKyRyZWNvcmRzID0gJGRhdGFbJ3Bob3RvcyddWydwaG90byddOworCisvLyBGb3IgZnV0dXJlIHB1cnBvc2VzLCB3ZSBtYXkgd2FudCBhbiBpbWFnZSBtYW5hZ2VyCiskcmVsYXRpdmUgPSAnLyc7CiskbWFuYWdlciA9IG5ldyBJbWFnZU1hbmFnZXIoJElNQ29uZmlnKTsKKworLyogPT09PT09PT09PT09PT09PT0gT1VUUFVUL0RSQVcgRlVOQ1RJT05TID09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworZnVuY3Rpb24gcmlwX2ZsaWNrcl9kYXRhKCRyZWNvcmQpCit7ICAKKyAgJGxpY3MgPSBmbGlja3JfZ2V0X2xpY2Vuc2VzKCk7CisgIC8vIGVjaG8gJzxwcmU+JzsgcHJpbnRfcigkbGljcyk7ICBkaWUoKTsKKyAgCisgICR0aXRsZSA9ICRyZWNvcmRbJ3RpdGxlJ107CisgICRsaWNlbnNlID0gJGxpY3NbJHJlY29yZFsnbGljZW5zZSddXTsKKyAgCisgIC8vIGVjaG8gJzxwcmU+JztwcmludF9yKCRsaWNlbnNlKTsgZGllKCk7CisgIAorICAkZGVzY3JpcHRpb24gPSAnJzsKKyAgJHNpemVzID0gZmxpY2tyX3JlcXVlc3QoJ2ZsaWNrci5waG90b3MuZ2V0U2l6ZXMnLCBhcnJheSgncGhvdG9faWQnID0+ICRyZWNvcmRbJ2lkJ10pKTsKKyAgJHNpemVzID0gJHNpemVzWydzaXplcyddOworICAkdGh1bWJzID0gYXJyYXkoKTsgLy8gdzpoID0+IGFycmF5KCBmaWxlLCBmaWxlLCBmaWxlKQorICAkbGFyZ2VzdCA9IGFycmF5KDAsJycsIDAsIDApOyAgIAorICAkc21hbGxlc3QgPSBhcnJheSgzMDAwKjMwMDAsJycsIDMwMDAsIDMwMDApOyAvLyBPaywgaGFja3ksIHNvc3VtaQorICAKKyAgZm9yZWFjaCgkc2l6ZXNbJ3NpemUnXSBhcyAkdGh1bWIpIAorICB7CisgICAgaWYoJHRodW1iWydsYWJlbCddID09ICdTcXVhcmUnKSBjb250aW51ZTsgLy8gVGhlc2UgYXJlIGEgbGl0dGxlIHNtYWxsZXIgdGhhbiBkZWZhdWx0CisgICAgaWYoIWlzc2V0KCR0aHVtYnNbInskdGh1bWJbJ3dpZHRoJ119eHskdGh1bWJbJ2hlaWdodCddfSJdKSkKKyAgICB7CisgICAgICAkdGh1bWJzWyJ7JHRodW1iWyd3aWR0aCddfXh7JHRodW1iWydoZWlnaHQnXX0iXSAgPSBhcnJheSgpOworICAgICAgCisgICAgICBpZigoJHRodW1iWyd3aWR0aCddICogJHRodW1iWydoZWlnaHQnXSkgPiAkbGFyZ2VzdFswXSkKKyAgICAgICAgJGxhcmdlc3QgPSBhcnJheSgkdGh1bWJbJ3dpZHRoJ10gKiAkdGh1bWJbJ2hlaWdodCddLCAkdGh1bWJbJ3dpZHRoJ10gLiAneCcgLiAkdGh1bWJbJ2hlaWdodCddLCAkdGh1bWJbJ3dpZHRoJ10gLCAkdGh1bWJbJ2hlaWdodCddKTsKKyAgICAgIAorICAgICAgaWYoKCR0aHVtYlsnd2lkdGgnXSAqICR0aHVtYlsnaGVpZ2h0J10pIDwgJHNtYWxsZXN0WzBdKQorICAgICAgICAkc21hbGxlc3QgPSBhcnJheSgkdGh1bWJbJ3dpZHRoJ10gKiAkdGh1bWJbJ2hlaWdodCddLCAkdGh1bWJbJ3dpZHRoJ10gLiAneCcgLiAkdGh1bWJbJ2hlaWdodCddLCAkdGh1bWJbJ3dpZHRoJ10gLCAkdGh1bWJbJ2hlaWdodCddKTsKKyAgICB9CisgICAgJHRodW1ic1sieyR0aHVtYlsnd2lkdGgnXX14eyR0aHVtYlsnaGVpZ2h0J119Il1bXSA9ICR0aHVtYjsKKyAgICAKKyAgfQorCisgIC8vIEZpbmQgdGhlIG1haW4gaW1hZ2UgbGluaworICAkbWFpbkltYWdlID0gJHRodW1ic1skbGFyZ2VzdFsxXV07CisgICRtYWluSW1hZ2UgPSBhcnJheV9wb3AoJG1haW5JbWFnZSk7CisgIAorICAvLyBGaW5kIHRoZSB0aHVtYiBpbWFnZSBsaW5rCisgICR0aHVtYkltYWdlID0gJHRodW1ic1skc21hbGxlc3RbMV1dOworICAkdGh1bWJJbWFnZSA9IGFycmF5X3BvcCgkdGh1bWJJbWFnZSk7CisgIAorICAvLyBGaW5hbCBpbWFnZSB0byBwYXNzIHRvIG1hbmFnZXIgKHVzZSBxdWVyeSBwYXJhbSB0byByZWNvcmQgdGhlIGVtYmVkIHVybCkKKyAgJGNvbWJpbmVkSW1hZ2UgPSAkbWFpbkltYWdlWydzb3VyY2UnXSAuIAorICAnP3gtZmxpY2tyLXBob3RvPScucmF3dXJsZW5jb2RlKCRyZWNvcmRbJ2lkJ10pIC4KKyAgJyZ4LWxpYz0nLnJhd3VybGVuY29kZSgkbGljZW5zZVsneC1pZCddKSAgIC4KKyAgJyZ4LXVpZD0nLnJhd3VybGVuY29kZSgkcmVjb3JkWydvd25lciddKSAgICAgICAuICAKKyAgJyZ4LWJ5PScucmF3dXJsZW5jb2RlKCRyZWNvcmRbJ293bmVybmFtZSddKSAgICAuICAgCisgICcmeC10bj0nLnJhd3VybGVuY29kZSgkdGh1bWJJbWFnZVsnc291cmNlJ10pOworICAKKyAgCisgIHJldHVybiBhcnJheQorICAoCisgICAndGl0bGUnICAgICAgICAgPT4gJHRpdGxlLAorICAgJ2Rlc2NyaXB0aW9uJyAgID0+ICRkZXNjcmlwdGlvbiwKKyAgICdkaW1lbnNpb25zJyAgICA9PiAieyRtYWluSW1hZ2VbJ3dpZHRoJ119eHskbWFpbkltYWdlWydoZWlnaHQnXX0iLAorICAgJ2xpY2Vuc2UnICAgICAgID0+ICRsaWNlbnNlLAorICAgJ21haW5JbWFnZScgICAgID0+ICRtYWluSW1hZ2VbJ3NvdXJjZSddLAorICAgJ3RodW1iSW1hZ2UnICAgID0+ICR0aHVtYkltYWdlWydzb3VyY2UnXSwKKyAgICdjb21iaW5lZEltYWdlJyA9PiAkY29tYmluZWRJbWFnZSwKKyAgIAorICAgJ3NtYWxsZXN0JyA9PiAkc21hbGxlc3QsCisgICAnbGFyZ2VzdCcgID0+ICRsYXJnZXN0LAorICAgJ3RodW1icycgICA9PiAkdGh1bWJzLCAgIAorICApOworfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgCitmdW5jdGlvbiBkcmF3RmlsZXMoJGxpc3QsICYkbWFuYWdlcikKK3sKKwlnbG9iYWwgJHJlbGF0aXZlOworCWdsb2JhbCAkSU1Db25maWc7CiskSU1Db25maWdbJ1ZpZXdNb2RlJ10gPSAndGh1bWJzJzsKKyAgICBzd2l0Y2goJElNQ29uZmlnWydWaWV3TW9kZSddKQorICAgIHsKKyAgICAgIGNhc2UgJ2RldGFpbHMnOgorICAgICAgeworICAgICAgICAKKyAgICAgICAgPz4KKyAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCI+CisgICAgICAgICAgPCEtLQorICAgICAgICAgICAgZnVuY3Rpb24gc2hvd1ByZXZpZXcoZl91cmwpCisgICAgICAgICAgICB7ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgd2luZG93LnBhcmVudC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl9wcmV2aWV3Jykuc3JjID0gd2luZG93LnBhcmVudC5fYmFja2VuZF91cmwgKyAnX19mdW5jdGlvbj10aHVtYnMmaW1nPScgKyBlbmNvZGVVUklDb21wb25lbnQoZl91cmwpOworICAgICAgICAgICAgfQorICAgICAgICAgIC8vLS0+CisgICAgICAgIDwvc2NyaXB0PgorICAgICAgICA8dGFibGUgY2xhc3M9Imxpc3R2aWV3Ij4KKyAgICAgICAgPHRoZWFkPgorICAgICAgICA8dHI+PHRoPlRpdGxlPC90aD48dGg+RGVzY3JpcHRpb248L3RoPjx0aD5EaW1lbnNpb25zPC90aD48L3RyPjwvdGhlYWQ+CisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICA8P3BocAorICAgICAgICAgIGZvcmVhY2goJGxpc3QgYXMgJHJlY29yZCkKKyAgICAgICAgICB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGV4dHJhY3QocmlwX2ZsaWNrcl9kYXRhKCRyZWNvcmQpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgPz4KKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgPHRoPjxhIGhyZWY9IiMiIGNsYXNzPSJ0aHVtYiIgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsiIG9uY2xpY2s9InNlbGVjdEltYWdlKCc8P3BocCBlY2hvIHhpbmhhX2pzX2VuY29kZSgkY29tYmluZWRJbWFnZSk/PicsICc8P3BocCBlY2hvIHhpbmhhX2pzX2VuY29kZSgkdGl0bGUpOyA/PicsIDw/cGhwIGVjaG8gJGxhcmdlc3RbMl07Pz4sIDw/cGhwIGVjaG8gJGxhcmdlc3RbM107ID8+KTtyZXR1cm4gZmFsc2U7IiB0aXRsZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCR0aXRsZSk7ID8+IC0gPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRkaW1lbnNpb25zKTsgPz4iIG9ubW91c2VvdmVyPSJzaG93UHJldmlldygnPD9waHAgZWNobyB4aW5oYV9qc19lbmNvZGUoJGNvbWJpbmVkSW1hZ2UpOz8+JykiIG9ubW91c2VvdXQ9InNob3dQcmV2aWV3KHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZfdXJsJykudmFsdWUpIiA+PD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCR0aXRsZSkgPz48L2E+PC90aD4KKyAgICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZGVzY3JpcHRpb24pOyA/PjwvdGQ+CisgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGRpbWVuc2lvbnMpOyA/PiAgICAgICAgICAgICAgCisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPD9waHAgICAgICAgIAorICAgICAgICAgIH0KKyAgICAgICAgICA/PgorICAgICAgICA8L3Rib2R5PgorICAgICAgICA8L3RhYmxlPgorICAgICAgICA8P3BocAorICAgICAgfSAgICAgIAorICAgICAgYnJlYWs7CisgICAgICAKKyAgICAgIGNhc2UgJ3RodW1icyc6CisgICAgICBkZWZhdWx0ICAgICAgOgorICAgICAgeworICAgICAgICBmb3JlYWNoKCRsaXN0IGFzICRyZWNvcmQpCisgICAgICAgIHsKKyAgICAgICAgICBleHRyYWN0KHJpcF9mbGlja3JfZGF0YSgkcmVjb3JkKSk7CisgICAgICAgICAgPz4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aHVtYl9ob2xkZXIiIGlkPSJob2xkZXJfPD9waHAgZWNobyBhc2MyaGV4KCRjb21iaW5lZEltYWdlKSA/PiI+ICAgICAgICAgICAgCisgICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0idGh1bWIiIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7IiBvbmNsaWNrPSJzZWxlY3RJbWFnZSgnPD9waHAgZWNobyB4aW5oYV9qc19lbmNvZGUoJGNvbWJpbmVkSW1hZ2UpPz4nLCAnPD9waHAgZWNobyB4aW5oYV9qc19lbmNvZGUoJHRpdGxlKTsgPz4nLCA8P3BocCBlY2hvICRsYXJnZXN0WzJdOz8+LCA8P3BocCBlY2hvICRsYXJnZXN0WzNdOyA/Pik7cmV0dXJuIGZhbHNlOyIgdGl0bGU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkdGl0bGUpOyA/PiAtIDw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZGltZW5zaW9ucyk7ID8+Ij4KKyAgICAgICAgICAgICAgPGltZyBzcmM9Ijw/cGhwIHByaW50ICR0aHVtYkltYWdlID8+IiBhbHQ9Ijw/cGhwIGVjaG8gJHRpdGxlOyA/PiAtIDw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZGltZW5zaW9ucyk7ID8+Ii8+ICAgICAgICAgICAgIAorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxrLWxpY2Vuc2UiPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJGxpY2Vuc2VbJ3VybCddID8+IiB0YXJnZXQ9Il9ibGFuayI+PD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRsaWNlbnNlWyduYW1lJ10pID8+PC9hPjwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDw/cGhwCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9Cit9Ly9mdW5jdGlvbiBkcmF3RmlsZXMKKworCisKKy8qKgorICogTm8gZGlyZWN0b3JpZXMgYW5kIG5vIGZpbGVzLgorICovCitmdW5jdGlvbiBkcmF3Tm9SZXN1bHRzKCkgCit7Cis/PgorPGRpdiBjbGFzcz0ibm9SZXN1bHQiPk5vIFBob3RvcyBGb3VuZDwvZGl2PgorPD9waHAgCit9CisKKy8qKgorICogTm8gZGlyZWN0b3JpZXMgYW5kIG5vIGZpbGVzLgorICovCitmdW5jdGlvbiBkcmF3RXJyb3JCYXNlKCYkbWFuYWdlcikgCit7Cis/PgorPGRpdiBjbGFzcz0iZXJyb3IiPjxzcGFuPkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6PC9zcGFuPiA8P3BocCBlY2hvICRtYW5hZ2VyLT5jb25maWdbJ2ltYWdlc19kaXInXTsgPz48L2Rpdj4KKzw/cGhwIAorfQorCisvKioKKyAqIFV0aWxpdHkgdG8gY29udmVydCBhc2NpaSBzdHJpbmcgdG8gaGV4CisgKi8KK2Z1bmN0aW9uIGFzYzJoZXggKCR0ZW1wKQoreworICAkbGVuID0gc3RybGVuKCR0ZW1wKTsKKyAgJGRhdGEgPSAiIjsKKyAgZm9yICgkaT0wOyAkaTwkbGVuOyAkaSsrKSAkZGF0YS49c3ByaW50ZigiJTAyeCIsb3JkKHN1YnN0cigkdGVtcCwkaSwxKSkpOworICByZXR1cm4gJGRhdGE7Cit9CisKKz8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CisKKzxodG1sPgorPGhlYWQ+CisJPHRpdGxlPkZsaWNrciBQaWN0dXJlIExpc3Q8L3RpdGxlPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KKwk8bGluayBocmVmPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5hc3NldHMvaW1hZ2VsaXN0LmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgLz4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgX2JhY2tlbmRfdXJsID0gIjw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFja2VuZF91cmwnXTsgPz4iOworICA8L3NjcmlwdD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+YXNzZXRzL2RpYWxvZy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisvKjwhW0NEQVRBWyovCisKKwlpZih3aW5kb3cudG9wKQorICAgIEhUTUxBcmVhID0gWGluaGEgICAgPSB3aW5kb3cudG9wLlhpbmhhOworCisJZnVuY3Rpb24gaGlkZU1lc3NhZ2UoKQorCXsKKwkJdmFyIHRvcERvYyA9IHdpbmRvdy50b3AuZG9jdW1lbnQ7CisJCXZhciBtZXNzYWdlcyA9IHRvcERvYy5nZXRFbGVtZW50QnlJZCgnbWVzc2FnZXMnKTsKKwkJaWYobWVzc2FnZXMpCisJCQltZXNzYWdlcy5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworCX0KKworCWluaXQgPSBmdW5jdGlvbigpCisJeworCSAgX19kbGdfdHJhbnNsYXRlKCdJbWFnZU1hbmFnZXInKTsKKwkJaGlkZU1lc3NhZ2UoKTsKKwkJdmFyIHRvcERvYyA9IHdpbmRvdy50b3AuZG9jdW1lbnQ7CisKKy8vICAgIHVwZGF0ZV9zZWxlY3RlZCgpOworCX0JCisJCisvKl1dPiovCis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmFzc2V0cy9pbWFnZXMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vcG9wdXBzL3BvcHVwLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImFzc2V0cy9wb3B1cC5qcyI+PC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgY2xhc3M9ImZsaWNrciI+Cis8P3BocCBpZiAoJG1hbmFnZXItPmlzVmFsaWRCYXNlKCkgPT0gZmFsc2UpIHsgZHJhd0Vycm9yQmFzZSgkbWFuYWdlcik7IH0gCisJZWxzZWlmKGNvdW50KCRyZWNvcmRzKSkgeyA/PgorCisJPD9waHAgZHJhd0ZpbGVzKCRyZWNvcmRzLCAkbWFuYWdlcik7ID8+CisKKzw/cGhwIH0gZWxzZSB7IGRyYXdOb1Jlc3VsdHMoKTsgfSA/PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvaW1hZ2UtcGlja2VyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvaW1hZ2UtcGlja2VyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkOTBkOGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWFnZS1waWNrZXIuanMKQEAgLTAsMCArMSwyMDUgQEAKKy8qKgorICogQW4gaW5wdXQgZmllbGQgSW1hZ2UgUGlja2VyIHV0aWxpc2luZyB0aGUgWGluaGEgSW1hZ2VNYW5hZ2VyLgorICoKKyAqIEhpamFjayB0aGUgWGluaGEgSW1hZ2VNYW5hZ2VyIHBsdWdpbiB0byBwcm92aWRlIGFuIGltYWdlIFVSTCBwaWNrZXIKKyAqIGZvciBhbnkgZm9ybSBpbnB1dCBmaWVsZCBpbiB0aGUgZm9ybSBvZiBhICJCcm93c2UiIGJ1dHRvbiB0byB0aGUKKyAqIHJpZ2h0IG9mIHRoZSBmaWVsZCwgaW4gdGhlIHNhbWUgbWFubmVyIGFzIGEgZmlsZSB0eXBlIGlucHV0IGZpZWxkCisgKiBleGNlcHQgaXQgb3BlbnMgdGhlIGZhbWlsaWFyIEltYWdlTWFuYWdlciBkaWFsb2cgdG8gdXBsb2FkL3NlbGVjdC9lZGl0CisgKiBhbiBpbWFnZSBhbmQgcmV0dXJucyB0aGUgVVJMIG9mIHRoZSBpbWFnZSB0byB0aGUgZmllbGQncyB2YWx1ZS4KKyAqCisgKiBFeGFtcGxlIFVzYWdlOgorICoKKyAqICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+X2VkaXRvcl91cmwgPSAnL3VybC90by94aW5oYSc7PC9zY3JpcHQ+CisgKiAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaW1hZ2UtcGlja2VyLmpzIiAvPgorICogIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAqICAgPD9waHAgcmVxdWlyZV9vbmNlKCcvcGF0aC90by94aW5oYS9jb250cmliL3BocC14aW5oYS5waHAnKTsgPz4KKyAqICAgd2l0aChJbWFnZVBpY2tlci5wcm90b3R5cGUpCisgKiAgIHsKKyAqICAgICA8P3BocCAKKyAqICAgICAgJENvbmYgPSBhcnJheQorICogICAgICAgKAorICogICAgICAgICAnaW1hZ2VzX2RpcicgPT4gJy9wYXRoL3RvL2ltYWdlcycsIAorICogICAgICAgICAnaW1hZ2VzX3VybCcgPT4gJy91cmwvdG8vaW1hZ2VzJywgCisgKiAgICAgICAgICdzaG93X2Z1bGxfb3B0aW9ucycgPT4gZmFsc2UsIC8vIEZ1bGwgb3B0aW9ucyBhcmUgbm90IHVzZWZ1bCBhcyBhIFVSTCBwaWNrZXIKKyAqICAgICAgICAgLy8gU2VlIEltYWdlTWFuYWdlciBmb3IgbW9yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgISAgICAgICAgICAgCisgKiAgICAgICApOworICogICAgICB4aW5oYV9wYXNzX3RvX3BocF9iYWNrZW5kKCRDb25mKTsKKyAqICAgICA/PgorICogICB9CisgKgorICogICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7IG5ldyBJbWFnZVBpY2tlcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWRPZlRoZUlucHV0RmllbGQnKSk7IH0KKyAqICA8L3NjcmlwdD4KKyAqCisgKgorICogQGF1dGhvciAkQXV0aG9yJAorICogQHZlcnNpb24gJElkJAorICogQHBhY2thZ2UgSW1hZ2VNYW5hZ2VyCisgKi8KKworCitmdW5jdGlvbiBJbWFnZVBpY2tlcihmaWVsZCkKK3sKKyAgdGhpcy5maWVsZCA9IGZpZWxkOworICB2YXIgcGlja2VyID0gdGhpczsKKyAgCisgIHZhciBidXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOyAgIAorICBidXQudHlwZSA9ICdidXR0b24nOworICBidXQudmFsdWUgPSAnQnJvd3NlJzsgCisgIGJ1dC5vbmNsaWNrID0gZnVuY3Rpb24oKSB7IHBpY2tlci5wb3B1cF9waWNrZXIoKTsgfQorICAgICAKKyAgZmllbGQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYnV0LGZpZWxkLm5leHRTaWJsaW5nKTsKKyAgZmllbGQuc2l6ZSA9ICcyMCc7CisgIGZpZWxkLnN0eWxlLnRleHRBbGlnbiA9ICdyaWdodCc7Cit9OworCitJbWFnZVBpY2tlci5wcm90b3R5cGUuYmFja2VuZCAgICAgICAgICAgICA9IFhpbmhhLmdldFBsdWdpbkRpcignSW1hZ2VNYW5hZ2VyJykgKyAnL2JhY2tlbmQucGhwP19fcGx1Z2luPUltYWdlTWFuYWdlciYnOworSW1hZ2VQaWNrZXIucHJvdG90eXBlLmJhY2tlbmRfZGF0YSAgICAgICAgPSBudWxsOworCitJbWFnZVBpY2tlci5wcm90b3R5cGUuYXBwZW5kX3F1ZXJ5X3N0cmluZyA9IHRydWU7CisKK0ltYWdlUGlja2VyLnByb3RvdHlwZS5wb3B1cF9waWNrZXIgPSBmdW5jdGlvbigpCit7CisgIHZhciBwaWNrZXIgPSB0aGlzOyAvLyBjbG9zdXJlIGZvciBsYXRlciAgCisgIHZhciBvdXRwYXJhbSA9IG51bGw7CisgIGlmKHBpY2tlci5maWVsZC52YWx1ZSkKKyAgeworICAgIG91dHBhcmFtID0KKwkJeyAgICAgIAorCQkJZl91cmwgICAgOiBwaWNrZXIuZmllbGQudmFsdWUsCQkJCisJCQlmX3dpZHRoICA6IG51bGwsCisJCQlmX2hlaWdodCAgOiBudWxsLAorICAgICAKKyAgICAgIC8vIE5vbmUgb2YgdGhpcyBzdHVmZiBpcyB1c2VmdWwgdG8gdXMsIHdlIHJldHVybiBvbmx5IGEgVVJMLgorICAgICAgZl9hbHQgICAgOiBwaWNrZXIuZmllbGQudmFsdWUsCisJCQlmX2JvcmRlciA6IG51bGwsCisJCQlmX2FsaWduICA6IG51bGwsCisJCQlmX3BhZGRpbmc6IG51bGwsCisJCQlmX21hcmdpbiA6IG51bGwsCisgICAgICBmX2JhY2tncm91bmRDb2xvcjogbnVsbCwKKyAgICAgIGZfYm9yZGVyQ29sb3I6IG51bGwsCisgICAgICBmX2JvcmRlciA6IG51bGwsCisgICAgICBmX3BhZGRpbmc6IG51bGwsCisgICAgICBmX21hcmdpbjogbnVsbAorICAgIH07CisgICAgCisgICAgd2hpbGUob3V0cGFyYW0uZl91cmwubWF0Y2goL1s/Jl0oKGZfW2EtejAtOV0rKT0oW14mI10rKSkvaSkpCisgICAgeworICAgICAgb3V0cGFyYW1bUmVnRXhwLiQyXSA9IGRlY29kZVVSSUNvbXBvbmVudChSZWdFeHAuJDMpOworICAgICAgb3V0cGFyYW0uZl91cmwgPSBvdXRwYXJhbS5mX3VybC5yZXBsYWNlKFJlZ0V4cC4kMSwgJycpOworICAgIH0KKyAgICAKKyAgICBvdXRwYXJhbS5mX3VybCA9IG91dHBhcmFtLmZfdXJsLnJlcGxhY2UoLyZ7Mix9L2csICcmJyk7CisgICAgb3V0cGFyYW0uZl91cmwgPSBvdXRwYXJhbS5mX3VybC5yZXBsYWNlKC9cPyYqKCMuKik/JC8sICcnKTsgCisgIH0KKworICB2YXIgbWFuYWdlciA9IHRoaXMuYmFja2VuZCArICdfX2Z1bmN0aW9uPW1hbmFnZXInOworICBpZih0aGlzLmJhY2tlbmRfY29uZmlnICE9IG51bGwpCisgIHsKKyAgICBtYW5hZ2VyICs9ICcmYmFja2VuZF9jb25maWc9JworICAgICAgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5iYWNrZW5kX2NvbmZpZyk7CisgICAgbWFuYWdlciArPSAnJmJhY2tlbmRfY29uZmlnX2hhc2g9JworICAgICAgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5iYWNrZW5kX2NvbmZpZ19oYXNoKTsKKyAgICBtYW5hZ2VyICs9ICcmYmFja2VuZF9jb25maWdfc2VjcmV0X2tleV9sb2NhdGlvbj0nCisgICAgICArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmJhY2tlbmRfY29uZmlnX3NlY3JldF9rZXlfbG9jYXRpb24pOworICB9CisgIAorICBpZih0aGlzLmJhY2tlbmRfZGF0YSAhPSBudWxsKQorICB7CisgICAgZm9yICggdmFyIGkgaW4gdGhpcy5iYWNrZW5kX2RhdGEgKQorICAgIHsKKyAgICAgIG1hbmFnZXIgKz0gJyYnICsgaSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmJhY2tlbmRfZGF0YVtpXSk7CisgICAgfQorICB9CisKKyAgRGlhbG9nKG1hbmFnZXIsIGZ1bmN0aW9uKHBhcmFtKSB7CisJCWlmICghcGFyYW0pIHsJLy8gdXNlciBtdXN0IGhhdmUgcHJlc3NlZCBDYW5jZWwKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorICAgIAorICAgIHBpY2tlci5maWVsZC52YWx1ZSA9IHBhcmFtLmZfdXJsOworICAgIGlmKHBpY2tlci5hcHBlbmRfcXVlcnlfc3RyaW5nKQorICAgIHsKKyAgICAgIGlmKHBpY2tlci5maWVsZC52YWx1ZS5tYXRjaCgvWz8mXSguKikkLykpCisgICAgICB7CisgICAgICAgIGlmKFJlZ0V4cC4kMS5sZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICBwaWNrZXIuZmllbGQudmFsdWUgKz0gJyYnOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHBpY2tlci5maWVsZC52YWx1ZSArPSAnPyc7CisgICAgICB9CisgICAgICAKKyAgICAgIGZvcih2YXIgaSBpbiBwYXJhbSkKKyAgICAgIHsgICAgICAgIAorICAgICAgICBpZihpID09ICdmX3VybCcgfHwgcGFyYW1baV0gPT0gbnVsbCB8fCBwYXJhbVtpXSA9PSAnbnVsbCcgfHwgcGFyYW1baV0gPT0gJycpIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAKKyAgICAgICAgaWYodHlwZW9mIHBhcmFtW2ldID09ICdmdW5jdGlvbicpIGNvbnRpbnVlOworICAgICAgICBpZihwYXJhbVtpXS5sZW5ndGggPSAwKSBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHBpY2tlci5maWVsZC52YWx1ZSArPSBpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtW2ldKSArICcmJzsKKyAgICAgIH0KKyAgICB9CisgICAgCisJCX0sIG91dHBhcmFtKTsKK30KKworLy8gRGlhbG9nIGlzIHBhcnQgb2YgWGluaGEsIGJ1dCB3ZSdsbCBwcm92aWRlIGl0IGhlcmUgaW5jYXNlIFhpbmhhJ3Mgbm90IGJlaW5nCisvLyBsb2FkZWQuCitpZih0eXBlb2YgRGlhbG9nID09ICd1bmRlZmluZWQnKQoreworICAvLyBodG1sQXJlYSB2My4wIC0gQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQgaW50ZXJhY3RpdmV0b29scy5jb20sIGluYy4KKyAgLy8gVGhpcyBjb3B5cmlnaHQgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKyAgLy8KKyAgLy8gUG9ydGlvbnMgKGMpIGR5bmFyY2guY29tLCAyMDAzLTIwMDQKKyAgLy8KKyAgLy8gQSBmcmVlIFdZU0lXWUcgZWRpdG9yIHJlcGxhY2VtZW50IGZvciA8dGV4dGFyZWE+IGZpZWxkcy4KKyAgLy8gRm9yIGZ1bGwgc291cmNlIGNvZGUgYW5kIGRvY3MsIHZpc2l0IGh0dHA6Ly93d3cuaW50ZXJhY3RpdmV0b29scy5jb20vCisgIC8vCisgIC8vIFZlcnNpb24gMy4wIGRldmVsb3BlZCBieSBNaWhhaSBCYXpvbi4KKyAgLy8gICBodHRwOi8vZHluYXJjaC5jb20vbWlzaG9vCisgIC8vCisgIC8vICRJZDogZGlhbG9nLmpzIDE4MyAyMDA1LTA1LTIwIDA2OjExOjQ0WiBnb2dvICQKKyAgCisgIC8vIFRob3VnaCAiRGlhbG9nIiBsb29rcyBsaWtlIGFuIG9iamVjdCwgaXQgaXNuJ3QgcmVhbGx5IGFuIG9iamVjdC4gIEluc3RlYWQKKyAgLy8gaXQncyBqdXN0IG5hbWVzcGFjZSBmb3IgcHJvdGVjdGluZyBnbG9iYWwgc3ltYm9scy4KKyAgCisgIGZ1bmN0aW9uIERpYWxvZyh1cmwsIGFjdGlvbiwgaW5pdCkgeworICAgIGlmICh0eXBlb2YgaW5pdCA9PSAidW5kZWZpbmVkIikgeworICAgICAgaW5pdCA9IHdpbmRvdzsJLy8gcGFzcyB0aGlzIHdpbmRvdyBvYmplY3QgYnkgZGVmYXVsdAorICAgIH0KKyAgICB2YXIgZGxnID0gd2luZG93Lm9wZW4odXJsLCAiaGFkaWFsb2ciLAorICAgICAgICAgICAgICAidG9vbGJhcj1ubyxtZW51YmFyPW5vLHBlcnNvbmFsYmFyPW5vLHdpZHRoPTEwLGhlaWdodD0xMCwiICsKKyAgICAgICAgICAgICAgInNjcm9sbGJhcnM9eWVzLHJlc2l6YWJsZT15ZXMsbW9kYWw9eWVzLGRlcGVuZGFibGU9eWVzIik7CisgICAgRGlhbG9nLl9tb2RhbCA9IGRsZzsKKyAgICBEaWFsb2cuX2FyZ3VtZW50cyA9IGluaXQ7CisKKyAgICAvLyBtYWtlIHVwIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIERpYWxvZyBlbmRzLgorICAgIERpYWxvZy5fcmV0dXJuID0gZnVuY3Rpb24gKHZhbCkgCisgICAgeworICAgICAgaWYgKHZhbCAmJiBhY3Rpb24pIHsKKyAgICAgICAgYWN0aW9uKHZhbCk7CisgICAgICB9CisKKyAgICAgIERpYWxvZy5fbW9kYWwgPSBudWxsOworICAgIH07CisgICAgRGlhbG9nLl9tb2RhbC5mb2N1cygpOworICB9OworICAgICAKKyAgLy8gc2hvdWxkIGJlIGEgZnVuY3Rpb24sIHRoZSByZXR1cm4gaGFuZGxlciBvZiB0aGUgY3VycmVudGx5IG9wZW5lZCBkaWFsb2cuCisgIERpYWxvZy5fcmV0dXJuID0gbnVsbDsKKyAgCisgIC8vIGNvbnN0YW50LCB0aGUgY3VycmVudGx5IG9wZW5lZCBkaWFsb2cKKyAgRGlhbG9nLl9tb2RhbCA9IG51bGw7CisgIAorICAvLyB0aGUgZGlhbG9nIHdpbGwgcmVhZCBpdCdzIGFyZ3MgZnJvbSB0aGlzIHZhcmlhYmxlCisgIERpYWxvZy5fYXJndW1lbnRzID0gbnVsbDsKKyAKK30KKworLy8gRGVwcmVjYXRlZCBtZXRob2QgZm9yIHBhc3NpbmcgY29uZmlnLCB1c2UgYWJvdmUgaW5zdGVhZCEKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbWFnZVBpY2tlci5wcm90b3R5cGUuYmFja2VuZF9jb25maWcgICAgICA9IG51bGw7CitJbWFnZVBpY2tlci5wcm90b3R5cGUuYmFja2VuZF9jb25maWdfaGFzaCA9IG51bGw7CitJbWFnZVBpY2tlci5wcm90b3R5cGUuYmFja2VuZF9jb25maWdfc2VjcmV0X2tleV9sb2NhdGlvbiA9ICdYaW5oYTpJbWFnZU1hbmFnZXInOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltYWdlcy5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWFnZXMucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYTRlZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWFnZXMucGhwCkBAIC0wLDAgKzEsMzI4IEBACis8P3BocCAKKy8qKgorICogU2hvdyBhIGxpc3Qgb2YgaW1hZ2VzIGluIGEgbG9uZyBob3Jpem9udGFsIHRhYmxlLgorICogQGF1dGhvciAkQXV0aG9yOnJheSAkCisgKiBAdmVyc2lvbiAkSWQ6aW1hZ2VzLnBocCA5ODcgMjAwOC0wNC0xMiAxMjozOTowNFogcmF5ICQKKyAqIEBwYWNrYWdlIEltYWdlTWFuYWdlcgorICovCisKK3JlcXVpcmVfb25jZSgnY29uZmlnLmluYy5waHAnKTsKK3JlcXVpcmVfb25jZSgnZGR0LnBocCcpOworcmVxdWlyZV9vbmNlKCdDbGFzc2VzL0ltYWdlTWFuYWdlci5waHAnKTsKKworLy8gdW5jb21tZW50IGZvciBkZWJ1Z2dpbmcKKworLy8gX2RkdE9uKCk7CisKKy8vZGVmYXVsdCBwYXRoIGlzIC8KKyRyZWxhdGl2ZSA9ICcvJzsKKyRtYW5hZ2VyID0gbmV3IEltYWdlTWFuYWdlcigkSU1Db25maWcpOworCisvL3Byb2Nlc3MgYW55IGZpbGUgdXBsb2FkcworJG1hbmFnZXItPnByb2Nlc3NVcGxvYWRzKCk7CisKK2lmKCRJTUNvbmZpZ1snYWxsb3dfZGVsZXRlJ10pIAoreworICAkbWFuYWdlci0+ZGVsZXRlRmlsZXMoKTsKK30KKworJHJlZnJlc2hEaXIgPSBmYWxzZTsKKy8vcHJvY2VzcyBhbnkgZGlyZWN0b3J5IGZ1bmN0aW9ucworaWYoKCRJTUNvbmZpZ1snYWxsb3dfZGVsZXRlJ10gJiYgJG1hbmFnZXItPmRlbGV0ZURpcnMoKSkgfHwgJG1hbmFnZXItPnByb2Nlc3NOZXdEaXIoKSkKKwkkcmVmcmVzaERpciA9IHRydWU7CisKKy8vY2hlY2sgZm9yIGFueSBzdWItZGlyZWN0b3J5IHJlcXVlc3QKKy8vY2hlY2sgdGhhdCB0aGUgcmVxdWVzdGVkIHN1Yi1kaXJlY3RvcnkgZXhpc3RzCisvL2FuZCB2YWxpZAoraWYoaXNzZXQoJF9SRVFVRVNUWydkaXInXSkpCit7CisJJHBhdGggPSByYXd1cmxkZWNvZGUoJF9SRVFVRVNUWydkaXInXSk7CisJaWYoJG1hbmFnZXItPnZhbGlkUmVsYXRpdmVQYXRoKCRwYXRoKSkKKwkJJHJlbGF0aXZlID0gJHBhdGg7Cit9CisKKworJG1hbmFnZXIgPSBuZXcgSW1hZ2VNYW5hZ2VyKCRJTUNvbmZpZyk7CisKKworLy9nZXQgdGhlIGxpc3Qgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzCiskbGlzdCA9ICRtYW5hZ2VyLT5nZXRGaWxlcygkcmVsYXRpdmUpOworCisKKy8qID09PT09PT09PT09PT09PT09IE9VVFBVVC9EUkFXIEZVTkNUSU9OUyA9PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKioKKyAqIERyYXcgdGhlIGZpbGVzIGluIGFuIHRhYmxlLgorICovCitmdW5jdGlvbiBkcmF3RmlsZXMoJGxpc3QsICYkbWFuYWdlcikKK3sKKwlnbG9iYWwgJHJlbGF0aXZlOworCWdsb2JhbCAkSU1Db25maWc7CisKKyAgICBzd2l0Y2goJElNQ29uZmlnWydWaWV3TW9kZSddKQorICAgIHsKKyAgICAgIGNhc2UgJ2RldGFpbHMnOgorICAgICAgeworICAgICAgICA/PgorICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0Ij4KKyAgICAgICAgICA8IS0tCisgICAgICAgICAgICBmdW5jdGlvbiBzaG93UHJldmlldyhmX3VybCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgCisgICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZfcHJldmlldycpLnNyYyA9IAorICAgICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQuX2JhY2tlbmRfdXJsICsgJ19fZnVuY3Rpb249dGh1bWJzJmltZz0nICsgZl91cmw7CisgICAgICAgICAgICB9CisgICAgICAgICAgLy8tLT4KKyAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgIDx0YWJsZSBjbGFzcz0ibGlzdHZpZXciPgorICAgICAgICA8dGhlYWQ+CisgICAgICAgIDx0cj48dGg+TmFtZTwvdGg+PHRoPkZpbGVzaXplPC90aD48dGg+RGltZW5zaW9uczwvdGg+PC90cj48L3RoZWFkPgorICAgICAgICA8dGJvZHk+CisgICAgICAgICAgPD9waHAKKyAgICAgICAgICBmb3JlYWNoKCRsaXN0IGFzICRlbnRyeSA9PiAkZmlsZSkKKyAgICAgICAgICB7CisgICAgICAgICAgICA/PgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICA8dGg+PGEgaHJlZj0iIyIgY2xhc3M9InRodW1iIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyIgb25jbGljaz0ic2VsZWN0SW1hZ2UoJzw/cGhwIGVjaG8gJGZpbGVbJ3JlbGF0aXZlJ107Pz4nLCAnPD9waHAgZWNobyAkZW50cnk7ID8+JywgPD9waHAgZWNobyAkZmlsZVsnaW1hZ2UnXVswXTs/PiwgPD9waHAgZWNobyAkZmlsZVsnaW1hZ2UnXVsxXTsgPz4pO3JldHVybiBmYWxzZTsiIHRpdGxlPSI8P3BocCBlY2hvICRlbnRyeTsgPz4gLSA8P3BocCBlY2hvIEZpbGVzOjpmb3JtYXRTaXplKCRmaWxlWydzdGF0J11bJ3NpemUnXSk7ID8+IiBvbm1vdXNlb3Zlcj0ic2hvd1ByZXZpZXcoJzw/cGhwIGVjaG8gJGZpbGVbJ3JlbGF0aXZlJ107Pz4nKSIgb25tb3VzZW91dD0ic2hvd1ByZXZpZXcod2luZG93LnBhcmVudC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl91cmwnKS52YWx1ZSkiID48P3BocCBlY2hvICRlbnRyeSA/PjwvYT48L3RoPgorICAgICAgICAgICAgICA8dGQ+PD9waHAgZWNobyBGaWxlczo6Zm9ybWF0U2l6ZSgkZmlsZVsnc3RhdCddWydzaXplJ10pOyA/PjwvdGQ+CisgICAgICAgICAgICAgIDx0ZD48P3BocCBpZigkZmlsZVsnaW1hZ2UnXSl7IGVjaG8gJGZpbGVbJ2ltYWdlJ11bMF0uJ3gnLiRmaWxlWydpbWFnZSddWzFdOyB9ID8+PC90ZD4KKyAgICAgICAgICAgICAgPHRkIGNsYXNzPSJhY3Rpb25zIj4KKyAgICAgICAgICAgICAgICA8P3BocAorICAgICAgICAgICAgICAgICAgaWYoJElNQ29uZmlnWydhbGxvd19kZWxldGUnXSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgPz4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2JhY2tlbmRfdXJsJ107ID8+X19mdW5jdGlvbj1pbWFnZXMmZGlyPTw/cGhwIGVjaG8gJHJlbGF0aXZlOyA/PiZhbXA7ZGVsZj08P3BocCBlY2hvIHJhd3VybGVuY29kZSgkZmlsZVsncmVsYXRpdmUnXSk7Pz4iIHRpdGxlPSJUcmFzaCIgb25jbGljaz0icmV0dXJuIGNvbmZpcm1EZWxldGVGaWxlKCc8P3BocCBlY2hvICRlbnRyeTsgPz4nKTsiPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvZWRpdF90cmFzaC5naWYiIGhlaWdodD0iMTUiIHdpZHRoPSIxNSIgYWx0PSJUcmFzaCIgYm9yZGVyPSIwIiAgLz48L2E+CisgICAgICAgICAgICAgICAgICAgIDw/cGhwCisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgPz4KKyAgICAgICAgICAgICAgICA8P3BocAorICAgICAgICAgICAgICAgICAgaWYoJElNQ29uZmlnWydhbGxvd19lZGl0J10pCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgID8+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDo7IiB0aXRsZT0iRWRpdCIgb25jbGljaz0iZWRpdEltYWdlKCc8P3BocCBlY2hvIHJhd3VybGVuY29kZSgkZmlsZVsncmVsYXRpdmUnXSk7Pz4nKTsiPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvZWRpdF9wZW5jaWwuZ2lmIiBoZWlnaHQ9IjE1IiB3aWR0aD0iMTUiIGFsdD0iRWRpdCIgYm9yZGVyPSIwIiAvPjwvYT4KKyAgICAgICAgICAgICAgICAgICAgPD9waHAKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICA/PgorICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDw/cGhwICAgICAgICAKKyAgICAgICAgICB9CisgICAgICAgICAgPz4KKyAgICAgICAgPC90Ym9keT4KKyAgICAgICAgPC90YWJsZT4KKyAgICAgICAgPD9waHAKKyAgICAgIH0gICAgICAKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgICBjYXNlICd0aHVtYnMnOgorICAgICAgZGVmYXVsdCAgICAgIDoKKyAgICAgIHsKKwlmb3JlYWNoKCRsaXN0IGFzICRlbnRyeSA9PiAkZmlsZSkKKwl7CisJCT8+CisgICAgPGRpdiBjbGFzcz0idGh1bWJfaG9sZGVyIiBpZD0iaG9sZGVyXzw/cGhwIGVjaG8gYXNjMmhleCgkZW50cnkpID8+Ij4KKyAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJ0aHVtYiIgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsiIG9uY2xpY2s9InNlbGVjdEltYWdlKCc8P3BocCBlY2hvICRmaWxlWydyZWxhdGl2ZSddOz8+JywgJzw/cGhwIGVjaG8gJGVudHJ5OyA/PicsIDw/cGhwIGVjaG8gJGZpbGVbJ2ltYWdlJ11bMF07Pz4sIDw/cGhwIGVjaG8gJGZpbGVbJ2ltYWdlJ11bMV07ID8+KTtyZXR1cm4gZmFsc2U7IiB0aXRsZT0iPD9waHAgZWNobyAkZW50cnk7ID8+IC0gPD9waHAgZWNobyBGaWxlczo6Zm9ybWF0U2l6ZSgkZmlsZVsnc3RhdCddWydzaXplJ10pOyA/PiI+CisgICAgICAgIDxpbWcgc3JjPSI8P3BocCBwcmludCAkbWFuYWdlci0+Z2V0VGh1bWJuYWlsKCRmaWxlWydyZWxhdGl2ZSddKTsgPz4iIGFsdD0iPD9waHAgZWNobyAkZW50cnk7ID8+IC0gPD9waHAgZWNobyBGaWxlczo6Zm9ybWF0U2l6ZSgkZmlsZVsnc3RhdCddWydzaXplJ10pOyA/PiIvPgorICAgICAgPC9hPgorICAgICAgPGRpdiBjbGFzcz0iZWRpdCI+CisgICAgICAKKyAgICAgIDw/cGhwCisgICAgICAgIGlmKCRJTUNvbmZpZ1snYWxsb3dfZGVsZXRlJ10pCisgICAgICAgIHsKKyAgICAgICAgICA/PgorICAgICAgICA8YSBocmVmPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2JhY2tlbmRfdXJsJ107ID8+X19mdW5jdGlvbj1pbWFnZXMmZGlyPTw/cGhwIGVjaG8gJHJlbGF0aXZlOyA/PiZhbXA7ZGVsZj08P3BocCBlY2hvIHJhd3VybGVuY29kZSgkZmlsZVsncmVsYXRpdmUnXSk7Pz4iIHRpdGxlPSJUcmFzaCIgb25jbGljaz0icmV0dXJuIGNvbmZpcm1EZWxldGVGaWxlKCc8P3BocCBlY2hvICRlbnRyeTsgPz4nKTsiPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvZWRpdF90cmFzaC5naWYiIGhlaWdodD0iMTUiIHdpZHRoPSIxNSIgYWx0PSJUcmFzaCIgIC8+PC9hPgorICAgICAgICAgIDw/cGhwCisgICAgICAgIH0KKyAgICAgID8+CisgICAgICAKKyAgICAgIDw/cGhwCisgICAgICAgIGlmKCRJTUNvbmZpZ1snYWxsb3dfZWRpdCddKQorICAgICAgICB7CisgICAgICAgICAgPz4KKyAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDo7IiB0aXRsZT0iRWRpdCIgb25jbGljaz0iZWRpdEltYWdlKCc8P3BocCBlY2hvIHJhd3VybGVuY29kZSgkZmlsZVsncmVsYXRpdmUnXSk7Pz4nKTsiPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvZWRpdF9wZW5jaWwuZ2lmIiBoZWlnaHQ9IjE1IiB3aWR0aD0iMTUiIGFsdD0iRWRpdCIgLz48L2E+CisgICAgICAgICAgPD9waHAKKyAgICAgICAgfQorICAgICAgPz4KKyAgICAgICAgPD9waHAgaWYoJGZpbGVbJ2ltYWdlJ10peyBlY2hvICRmaWxlWydpbWFnZSddWzBdLid4Jy4kZmlsZVsnaW1hZ2UnXVsxXTsgfSBlbHNlIGVjaG8gJGVudHJ5Oz8+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKwkgIDw/cGhwCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CQorfS8vZnVuY3Rpb24gZHJhd0ZpbGVzCisKKworLyoqCisgKiBEcmF3IHRoZSBkaXJlY3RvcnkuCisgKi8KK2Z1bmN0aW9uIGRyYXdEaXJzKCRsaXN0LCAmJG1hbmFnZXIpIAoreworCWdsb2JhbCAkcmVsYXRpdmU7CisgICBnbG9iYWwgJElNQ29uZmlnOworCisgIHN3aXRjaCgkSU1Db25maWdbJ1ZpZXdNb2RlJ10pCisgIHsKKyAgICBjYXNlICdkZXRhaWxzJzoKKyAgICB7CisgICAgICAgIAorICAgIH0KKyAgICBicmVhazsgCisgICAgCisgICAgY2FzZSAndGh1bWJzJzoKKyAgICBkZWZhdWx0ICAgICAgOgorICAgIHsKKwlmb3JlYWNoKCRsaXN0IGFzICRwYXRoID0+ICRkaXIpIAorCXsgPz4KKyAgICA8ZGl2IGNsYXNzPSJkaXJfaG9sZGVyIj4KKyAgICAgIDxhIGNsYXNzPSJkaXIiIGhyZWY9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFja2VuZF91cmwnXTs/Pl9fZnVuY3Rpb249aW1hZ2VzJmRpcj08P3BocCBlY2hvIHJhd3VybGVuY29kZSgkcGF0aCk7ID8+IiBvbmNsaWNrPSJ1cGRhdGVEaXIoJzw/cGhwIGVjaG8gJHBhdGg7ID8+JykiIHRpdGxlPSI8P3BocCBlY2hvICRkaXJbJ2VudHJ5J107ID8+Ij48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+aW1nL2ZvbGRlci5naWYiIGhlaWdodD0iODAiIHdpZHRoPSI4MCIgYWx0PSI8P3BocCBlY2hvICRkaXJbJ2VudHJ5J107ID8+IiAvPjwvYT4KKworICAgICAgPGRpdiBjbGFzcz0iZWRpdCI+CisgICAgICAgIDw/cGhwCisgICAgICAgICAgaWYoJElNQ29uZmlnWydhbGxvd19kZWxldGUnXSkKKyAgICAgICAgICB7CisgICAgICAgICAgICA/PgorICAgICAgICA8YSBocmVmPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2JhY2tlbmRfdXJsJ107Pz5fX2Z1bmN0aW9uPWltYWdlcyZkaXI9PD9waHAgZWNobyAkcmVsYXRpdmU7ID8+JmFtcDtkZWxkPTw/cGhwIGVjaG8gcmF3dXJsZW5jb2RlKCRwYXRoKTsgPz4iIHRpdGxlPSJUcmFzaCIgb25jbGljaz0icmV0dXJuIGNvbmZpcm1EZWxldGVEaXIoJzw/cGhwIGVjaG8gJGRpclsnZW50cnknXTsgPz4nLCA8P3BocCBlY2hvICRkaXJbJ2NvdW50J107ID8+KTsiPjxpbWcgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5pbWcvZWRpdF90cmFzaC5naWYiIGhlaWdodD0iMTUiIHdpZHRoPSIxNSIgYWx0PSJUcmFzaCIvPjwvYT4KKyAgICAgICAgICAgIDw/cGhwCisgICAgICAgICAgfQorICAgICAgICA/PgorICAgICAgICAgICAgICAKKyAgICAgICAgPD9waHAgZWNobyAkZGlyWydlbnRyeSddOyA/PgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisJICA8P3BocCAKKwl9IC8vZm9yZWFjaAorICAgIH0KKyAgfQorICAKKwkKK30vL2Z1bmN0aW9uIGRyYXdEaXJzCisKKworLyoqCisgKiBObyBkaXJlY3RvcmllcyBhbmQgbm8gZmlsZXMuCisgKi8KK2Z1bmN0aW9uIGRyYXdOb1Jlc3VsdHMoKSAKK3sKKz8+Cis8ZGl2IGNsYXNzPSJub1Jlc3VsdCI+Tm8gSW1hZ2VzIEZvdW5kPC9kaXY+Cis8P3BocCAKK30KKworLyoqCisgKiBObyBkaXJlY3RvcmllcyBhbmQgbm8gZmlsZXMuCisgKi8KK2Z1bmN0aW9uIGRyYXdFcnJvckJhc2UoJiRtYW5hZ2VyKSAKK3sKKz8+Cis8ZGl2IGNsYXNzPSJlcnJvciI+PHNwYW4+SW52YWxpZCBiYXNlIGRpcmVjdG9yeTo8L3NwYW4+IDw/cGhwIGVjaG8gJG1hbmFnZXItPmNvbmZpZ1snaW1hZ2VzX2RpciddOyA/PjwvZGl2PgorPD9waHAgCit9CisKKy8qKgorICogVXRpbGl0eSB0byBjb252ZXJ0IGFzY2lpIHN0cmluZyB0byBoZXgKKyAqLworZnVuY3Rpb24gYXNjMmhleCAoJHRlbXApCit7CisgICRsZW4gPSBzdHJsZW4oJHRlbXApOworICAkZGF0YSA9ICIiOworICBmb3IgKCRpPTA7ICRpPCRsZW47ICRpKyspICRkYXRhLj1zcHJpbnRmKCIlMDJ4IixvcmQoc3Vic3RyKCR0ZW1wLCRpLDEpKSk7CisgIHJldHVybiAkZGF0YTsKK30KKworPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKworPGh0bWw+Cis8aGVhZD4KKwk8dGl0bGU+SW1hZ2UgTGlzdDwvdGl0bGU+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgorCTxsaW5rIGhyZWY9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmFzc2V0cy9pbWFnZWxpc3QuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorX2JhY2tlbmRfdXJsID0gIjw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFja2VuZF91cmwnXTsgPz4iOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmFzc2V0cy9kaWFsb2cuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorLyo8IVtDREFUQVsqLworCisJaWYod2luZG93LnRvcCkKKyAgICBIVE1MQXJlYSA9IFhpbmhhICAgID0gd2luZG93LnRvcC5YaW5oYTsKKworCWZ1bmN0aW9uIGhpZGVNZXNzYWdlKCkKKwl7CisJCXZhciB0b3BEb2MgPSB3aW5kb3cudG9wLmRvY3VtZW50OworCQl2YXIgbWVzc2FnZXMgPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ21lc3NhZ2VzJyk7CisJCWlmKG1lc3NhZ2VzKQorCQkJbWVzc2FnZXMuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKwl9CisKKwlpbml0ID0gZnVuY3Rpb24oKQorCXsKKwkgIF9fZGxnX3RyYW5zbGF0ZSgnSW1hZ2VNYW5hZ2VyJyk7CisJCWhpZGVNZXNzYWdlKCk7CisJCXZhciB0b3BEb2MgPSB3aW5kb3cudG9wLmRvY3VtZW50OworCis8P3BocCAKKwkvL3dlIG5lZWQgdG8gcmVmZXNoIHRoZSBkcm9wIGRpcmVjdG9yeSBsaXN0CisJLy9zYXZlIHRoZSBjdXJyZW50IGRpciwgZGVsZXRlIGFsbCBzZWxlY3Qgb3B0aW9ucworCS8vYWRkIHRoZSBuZXcgbGlzdCwgcmUtc2VsZWN0IHRoZSBzYXZlZCBkaXIuCisJaWYoJHJlZnJlc2hEaXIpIAorCXsgCisJCSRkaXJzID0gJG1hbmFnZXItPmdldERpcnMoKTsKKz8+CisJCXZhciBzZWxlY3Rpb24gPSB0b3BEb2MuZ2V0RWxlbWVudEJ5SWQoJ2RpclBhdGgnKTsKKwkJdmFyIGN1cnJlbnREaXIgPSBzZWxlY3Rpb24ub3B0aW9uc1tzZWxlY3Rpb24uc2VsZWN0ZWRJbmRleF0udGV4dDsKKworCQl3aGlsZShzZWxlY3Rpb24ubGVuZ3RoID4gMCkKKwkJewlzZWxlY3Rpb24ucmVtb3ZlKDApOyB9CisJCQorCQlzZWxlY3Rpb24ub3B0aW9uc1tzZWxlY3Rpb24ubGVuZ3RoXSA9IG5ldyBPcHRpb24oIi8iLCI8P3BocCBlY2hvIHJhd3VybGVuY29kZSgnLycpOyA/PiIpOwkKKwkJPD9waHAgZm9yZWFjaCgkZGlycyBhcyAkcmVsYXRpdmU9PiRmdWxscGF0aCkgeyA/PgorCQlzZWxlY3Rpb24ub3B0aW9uc1tzZWxlY3Rpb24ubGVuZ3RoXSA9IG5ldyBPcHRpb24oIjw/cGhwIGVjaG8gJHJlbGF0aXZlOyA/PiIsIjw/cGhwIGVjaG8gcmF3dXJsZW5jb2RlKCRyZWxhdGl2ZSk7ID8+Iik7CQkKKwkJPD9waHAgfSA/PgorCQkKKwkJZm9yKHZhciBpID0gMDsgaSA8IHNlbGVjdGlvbi5sZW5ndGg7IGkrKykKKwkJeworCQkJdmFyIHRoaXNEaXIgPSBzZWxlY3Rpb24ub3B0aW9uc1tpXS50ZXh0OworCQkJaWYodGhpc0RpciA9PSBjdXJyZW50RGlyKQorCQkJeworCQkJCXNlbGVjdGlvbi5zZWxlY3RlZEluZGV4ID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQkJCis8P3BocCB9ID8+CisgICAgdXBkYXRlX3NlbGVjdGVkKCk7CisJfQkKKworCWZ1bmN0aW9uIGVkaXRJbWFnZShpbWFnZSkgCisJeworCQl2YXIgdXJsID0gIjw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFja2VuZF91cmwnXTsgPz5fX2Z1bmN0aW9uPWVkaXRvciZpbWc9IitpbWFnZTsKKwkJRGlhbG9nKHVybCwgZnVuY3Rpb24ocGFyYW0pIAorCQl7CisJCQlpZiAoIXBhcmFtKSAvLyB1c2VyIG11c3QgaGF2ZSBwcmVzc2VkIENhbmNlbAorCQkJCXJldHVybiBmYWxzZTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfSwgbnVsbCk7CQkKKwl9CisKKy8qXV0+Ki8KKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+YXNzZXRzL2ltYWdlcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9wb3B1cHMvcG9wdXAuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iYXNzZXRzL3BvcHVwLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cis8P3BocCBpZiAoJG1hbmFnZXItPmlzVmFsaWRCYXNlKCkgPT0gZmFsc2UpIHsgZHJhd0Vycm9yQmFzZSgkbWFuYWdlcik7IH0gCisJZWxzZWlmKGNvdW50KCRsaXN0WzBdKSA+IDAgfHwgY291bnQoJGxpc3RbMV0pID4gMCkgeyA/PgorCisJPD9waHAgZHJhd0RpcnMoJGxpc3RbMF0sICRtYW5hZ2VyKTsgPz4KKwk8P3BocCBkcmF3RmlsZXMoJGxpc3RbMV0sICRtYW5hZ2VyKTsgPz4KKworPD9waHAgfSBlbHNlIHsgZHJhd05vUmVzdWx0cygpOyB9ID8+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvMngyLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy8yeDIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMmVjNGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvMngyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvMngyX3cuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvaW1nLzJ4Ml93LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjU2MGE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvaW1nLzJ4Ml93LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvYnRuRm9sZGVyTmV3LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy9idG5Gb2xkZXJOZXcuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMDE3NDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvYnRuRm9sZGVyTmV3LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvYnRuRm9sZGVyVXAuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvaW1nL2J0bkZvbGRlclVwLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjczNDlkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvaW1nL2J0bkZvbGRlclVwLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvYnRuX2NhbmNlbC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvYnRuX2NhbmNlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU5NDAxYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy9idG5fY2FuY2VsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvYnRuX29rLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy9idG5fb2suZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YjAyN2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvYnRuX29rLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvY3JvcC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvY3JvcC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVmNTNiMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy9jcm9wLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvZGVmYXVsdC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvZGVmYXVsdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQxOWMxZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy9kZWZhdWx0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvZGl2LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy9kaXYuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMjVjMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvZGl2LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvZG90cy5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvZG90cy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxM2U1YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy9kb3RzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvZWRpdF9hY3RpdmUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvaW1nL2VkaXRfYWN0aXZlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjhjMjVkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvaW1nL2VkaXRfYWN0aXZlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvZWRpdF9wZW5jaWwuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvaW1nL2VkaXRfcGVuY2lsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGZlNWEyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvaW1nL2VkaXRfcGVuY2lsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvZWRpdF90cmFzaC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvZWRpdF90cmFzaC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc1NGFjNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy9lZGl0X3RyYXNoLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvZm9sZGVyLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy9mb2xkZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMDNmNTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvZm9sZGVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvaGFuZC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvaGFuZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNjOTAwZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy9oYW5kLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvaXNsb2NrZWQyLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy9pc2xvY2tlZDIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZmQyZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvaXNsb2NrZWQyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvbG9ja2VkLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy9sb2NrZWQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNDcyMzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvbG9ja2VkLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvbWVhc3VyZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvbWVhc3VyZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0OTZkYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy9tZWFzdXJlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvbm9pbWFnZXMuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvaW1nL25vaW1hZ2VzLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmU2ZGQzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvaW1nL25vaW1hZ2VzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvcm90YXRlLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy9yb3RhdGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmODc2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvcm90YXRlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvc2F2ZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvc2F2ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFkYjliMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy9zYXZlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvc2NhbGUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvaW1nL3NjYWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzZiZWMzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvaW1nL3NjYWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvc3BhY2VyLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy9zcGFjZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMjU2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvc3BhY2VyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvdF9ibGFjay5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvdF9ibGFjay5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYzNjJmMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy90X2JsYWNrLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvdF93aGl0ZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvdF93aGl0ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNkZGVlYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy90X3doaXRlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvdW5sb2NrZWQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvaW1nL3VubG9ja2VkLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTRlMGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvaW1nL3VubG9ja2VkLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvdW5sb2NrZWQyLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2ltZy91bmxvY2tlZDIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNzAzYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9pbWcvdW5sb2NrZWQyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2I1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9iNS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTI5YTBjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9iNS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImI1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElNQUdFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9jaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvY2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDczYmY4NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvY2guanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi5Y+W5raIIiwKKyAgICAiT0siOiAi5aW9IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2N6LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9jei5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDVlNzczCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9jei5qcwpAQCAtMCwwICsxLDI1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImN6IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkJhc2VsaW5lIjogIlrDoWtsYWRuw60gbGlua2EiLAorICAgICJCb3R0b20iOiAiRG9sxa8iLAorICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgIkhlaWdodDoiOiAiVsO9xaFrYSIsCisgICAgIkxlZnQiOiAiVmxldm8iLAorICAgICJNaWRkbGUiOiAiTmEgc3TFmWVkIiwKKyAgICAiT0siOiAiT0siLAorICAgICJSaWdodCI6ICJWcHJhdm8iLAorICAgICJUb3AiOiAiTmFob3J1IiwKKyAgICAiV2lkdGg6IjogIsWgw63FmWthIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2RhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9kYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmUxZDIxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9kYS5qcwpAQCAtMCwwICsxLDY0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICJCdW5kIiwKKyAgICAiQWJzbWlkZGxlIjogIkNlbnRyZXJldCIsCisgICAgIkFuZ2xlOiI6ICJWaW5rZWw6IiwKKyAgICAiQmFzZWxpbmUiOiAiR3J1bmRsaW5qZSIsCisgICAgIkJvdHRvbSI6ICJUZWtzdGJ1bmQiLAorICAgICJDYW5jZWwiOiAiQW5udWxsZXIiLAorICAgICJDbGVhciI6ICJGb3J0cnlkIiwKKyAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIktvcnJla3Qgc3TDuHJyZWxzZXNmb3Job2xkIiwKKyAgICAiQ3JvcCI6ICJCZXNrw6ZyIiwKKyAgICAiRGlyZWN0b3J5IjogIk1hcHBlIiwKKyAgICAiRGlyZWN0b3J5IFVwIjogIk1hcHBlIG9wIiwKKyAgICAiRWRpdCI6ICJSZWRpZ2VyIiwKKyAgICAiRmlsZW5hbWU6IjogIkZpbG5hdm46IiwKKyAgICAiRmxpcCBIb3Jpem9udGFsIjogIlZlbmQgdmFuZHJldCIsCisgICAgIkZsaXAgSW1hZ2UiOiAiVmVuZCBiaWxsZWRlIiwKKyAgICAiRmxpcCBWZXJ0aWNhbCI6ICJWZW5kIGxvZHJldCIsCisgICAgIkZvbGRlciBOYW1lOiI6ICJNYXBwZW5hdm4iLAorICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiR0lGLUZvcm1hdCBpa2tlIHVuZGVyc3TDuHR0ZXQgLSBrYW4gaWtrZSByZWRpZ2VyZXMuIiwKKyAgICAiSGVpZ2h0OiI6ICJIw7hqZGU6IiwKKyAgICAiSW1hZ2UgRm9ybWF0IjogIkJpbGxlZGZvcm1hdDoiLAorICAgICJJbnNlcnQgSW1hZ2UiOiAiSW5kc8OmdCBiaWxsZWRlIiwKKyAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiVWd5bGRpZyBiYXNlIG1hcHBlOiIsCisgICAgIkpQRUcgSGlnaCI6ICJKUEVHIGjDuGoiLAorICAgICJKUEVHIExvdyI6ICJKUEVHIGxhdiIsCisgICAgIkpQRUcgTWVkaXVtIjogIkpQRUcgbWVsbGVtIiwKKyAgICAiTGVmdCI6ICJWZW5zdHJlIiwKKyAgICAiTG9jayI6ICJMw6VzIiwKKyAgICAiTWFya2VyIjogIk1hcmvDuHIiLAorICAgICJNZWFzdXJlIjogIk3DpWxlYsOlbmQiLAorICAgICJNaWRkbGUiOiAiTWlkdCIsCisgICAgIk5ldyBGb2xkZXIiOiAiTnkgbWFwcGUiLAorICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiSW5nZW4gYmlsbGVkZXIgdGlsZ8OmbmdlbGlnIiwKKyAgICAiTm90IHNldCI6ICJVYmVzdGVtdCIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJCaWxsZWRldHMgcG9zaXRpb24iLAorICAgICJRdWFsaXR5OiI6ICJLdmFsaXRldCIsCisgICAgIlJlZnJlc2giOiAiT3BkYXRlciIsCisgICAgIlJlc2l6ZSI6ICLDhm5kcmUgc3TDuHJyZWxzZSIsCisgICAgIlJpZ2h0IjogIkjDuGpyZSIsCisgICAgIlJvdGF0ZSI6ICJSb3RlcmUiLAorICAgICJSb3RhdGUgSW1hZ2UiOiAiRHJlaiBiaWxsZWRlIiwKKyAgICAiU2F2ZSI6ICJHZW0iLAorICAgICJTdGFydCBYOiI6ICJTdGFydCBYIiwKKyAgICAiU3RhcnQgWToiOiAiU3RhcnQgWSIsCisgICAgIlRleHR0b3AiOiAiVGVrc3R0b3AiLAorICAgICJUb3AiOiAiVG9wIiwKKyAgICAiVHJhc2giOiAiUGFwaXJrdXJ2IiwKKyAgICAiVzoiOiAiVzoiLAorICAgICJXaWR0aDoiOiAiQnJlZGRlOiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElNQUdFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkwOWE0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvZGUuanMKQEAgLTAsMCArMSw4OSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAidW50ZW4gYsO8bmRpZyIsCisgICAgIkFic21pZGRsZSI6ICJtaXR0aWciLAorICAgICJBbmdsZToiOiAiV2lua2VsOiIsCisgICAgIkJhc2VsaW5lIjogIkdydW5kbGluaWUiLAorICAgICJCb3R0b20iOiAidW50ZW4iLAorICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAiQ2xlYXIiOiAiRW50ZmVybmVuIiwKKyAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIlByb3BvcnRpb25hbCIsCisgICAgIkNyb3AiOiAiQmVzY2huZWlkZW4iLAorICAgICJEaXJlY3RvcnkiOiAiT3JkbmVyIiwKKyAgICAiRGlyZWN0b3J5IFVwIjogIsO8YmVyZ2VvcmRuZXRlciBPcmRuZXIiLAorICAgICJFZGl0IjogImJlYXJiZWl0ZW4iLAorICAgICJGaWxlbmFtZToiOiAiRGF0ZWluYW1lOiIsCisgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICJob3Jpem9udGFsIHNwaWVnZWxuIiwKKyAgICAiRmxpcCBJbWFnZSI6ICJCaWxkIHNwaWVnZWxuIiwKKyAgICAiRmxpcCBWZXJ0aWNhbCI6ICJ2ZXJ0aWthbCBzcGllZ2VsbiIsCisgICAgIkZvbGRlciBOYW1lOiI6ICJPcmRuZXJuYW1lOiIsCisgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICJHSUYgRm9ybWF0IHdpcmQgbmljaHQgdW50ZXJzdMO8dHp0LCBCaWxkYmVhcmJlaXR1bmcgd2lyZCBuaWNodCB1bnRlcnN0w7x0enQuIiwKKyAgICAiSGVpZ2h0OiI6ICJIw7ZoZToiLAorICAgICJJbWFnZSBGb3JtYXQiOiAiQmlsZGZvcm1hdDoiLAorICAgICJJbnNlcnQgSW1hZ2UiOiAiQmlsZCBlaW5mw7xnZW4iLAorICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICJVbmfDvGx0aWdlcyBTdGFydHZlcnplaWNobmlzOiIsCisgICAgIkpQRUcgSGlnaCI6ICJKUEVHIGhvY2giLAorICAgICJKUEVHIExvdyI6ICJKUEVHIG5pZWRyaWciLAorICAgICJKUEVHIE1lZGl1bSI6ICJKUEVHIG1pdHRlbCIsCisgICAgIkxlZnQiOiAibGlua3MiLAorICAgICJMb2NrIjogIlNwZXJyZW4iLAorICAgICJNYXJrZXIiOiAiTWFya2VyIiwKKyAgICAiTWVhc3VyZSI6ICJBYm1lc3N1bmdlbiIsCisgICAgIk1pZGRsZSI6ICJ6ZW50cmllcnQiLAorICAgICJOZXcgRm9sZGVyIjogIk5ldWVyIE9yZG5lciIsCisgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICJLZWluIEJpbGQgdmVyZsO8Z2JhciIsCisgICAgIk5vIEltYWdlcyBGb3VuZCI6ICJLZWluIEJpbGQgZ2VmdW5kZW4iLAorICAgICJOb3Qgc2V0IjogIm5pY2h0IGVpbmdlc3RlbGx0IiwKKyAgICAiT0siOiAiT0siLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIkFub3JkbnVuZyBkaWVzZXMgQmlsZGVzIiwKKyAgICAiUXVhbGl0eToiOiAiUXVhbGl0w6R0IiwKKyAgICAiUmVmcmVzaCI6ICJBa3R1YWxpc2llcmVuIiwKKyAgICAiUmVzaXplIjogIkdyw7bDn2Ugw6RuZGVybiIsCisgICAgIlJpZ2h0IjogInJlY2h0cyIsCisgICAgIlJvdGF0ZSI6ICJEcmVoZW4iLAorICAgICJSb3RhdGUgSW1hZ2UiOiAiQmlsZCBkcmVoZW4iLAorICAgICJTYXZlIjogIlNwZWljaGVybiIsCisgICAgIlN0YXJ0IFg6IjogIlN0YXJ0IFgiLAorICAgICJTdGFydCBZOiI6ICJTdGFydCBZIiwKKyAgICAiVGV4dHRvcCI6ICJvYmVuIGLDvG5kaWciLAorICAgICJUb3AiOiAib2JlbiIsCisgICAgIlRyYXNoIjogIk3DvGxsIiwKKyAgICAiVzoiOiAiQjoiLAorICAgICJXaWR0aDoiOiAiQnJlaXRlOiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFsaWduOiI6ICJBdXNyaWNodHVuZzoiLAorICAgICAgICAiQm9yZGVyIjogIlJhbmQiLAorICAgICAgICAiQ29sb3I6IjogIkZhcmJlOiIsCisgICAgICAgICJEZWxldGUgZmlsZT8iOiAiRGF0ZWkgbMO2c2NoZW4/IiwKKyAgICAgICAgIkRlbGV0ZSBmb2xkZXI/IjogIk9yZG5lciBsw7ZzY2hlbj8iLAorICAgICAgICAiRGVzY3JpcHRpb246IjogIkJlc2NocmVpYnVuZzoiLAorICAgICAgICAiRmlsZSBzYXZlZC4iOiAiRGF0ZWkgZ2VzcGVpY2hlcnQuIiwKKyAgICAgICAgIkZpbGUgd2FzIG5vdCBzYXZlZC4iOiAiRGF0ZWkgd3VyZGUgbmljaHQgZ2VzcGVpY2hlcnQuIiwKKyAgICAgICAgIkggU3BhY2UiOiAiaG9yaXpvbnRhbGVyIEZyZWlyYXVtIiwKKyAgICAgICAgIkhlaWdodCI6ICJIw7ZoZSIsCisgICAgICAgICJJbWFnZSBGaWxlIjogIkJpbGRkYXRlaSIsCisgICAgICAgICJJbWFnZSBNYW5hZ2VyIjogIkJpbGRtYW5hZ2VyIiwKKyAgICAgICAgIkludmFsaWQgZm9sZGVyIG5hbWUsIHBsZWFzZSBjaG9vc2UgYW5vdGhlciBmb2xkZXIgbmFtZS4iOiAiVW5nw7xsdGlnZXIgT3JkbmVybmFtZSwgYml0dGUgd8OkaGxlbiBzaWUgZWluZW4gYW5kZXJlbiBOYW1lbi4iLAorICAgICAgICAiTG9hZGluZyI6ICJMYWRlbiIsCisgICAgICAgICJNYXJnaW46IjogIkF1w59lbmFic3RhbmQ6IiwKKyAgICAgICAgIk5vIEltYWdlIHNlbGVjdGVkLiI6ICJLZWluIEJpbGQgYXVzZ2V3w6RobHQuIiwKKyAgICAgICAgIlBhZGRpbmc6IjogIklubmVuYWJzdGFuZDoiLAorICAgICAgICAiUGxlYXNlIGRlbGV0ZSBhbGwgZmlsZXMvZm9sZGVycyBpbnNpZGUgdGhlIGZvbGRlciB5b3Ugd2lzaCB0byBkZWxldGUgZmlyc3QuIjogIkJpdHRlIGzDtnNjaGVuIFNpZSB6dWVyc3QgYWxsZSBEYXRlaWVuIGltIE9yZG5lciBkZW4gU2llIGzDtnNjaGVuIG3DtmNodGVuLiIsCisgICAgICAgICJSb3RhdGUgMTgwIMKwIjogIjE4MMKwIGRyZWhlbiIsCisgICAgICAgICJSb3RhdGUgOTAgwrAgQ0NXIjogIjkwwrAgZHJlaGVuIGdlZ2VuIFVaUyIsCisgICAgICAgICJSb3RhdGUgOTAgwrAgQ1ciOiAiOTDCsCBkcmVoZW4gaW0gVVpTIiwKKyAgICAgICAgIlVwbG9hZCI6ICJIb2NobGFkZW4iLAorICAgICAgICAiVXBsb2FkaW5nLi4uIjogIkhvY2hsYWRlbi4uLiIsCisgICAgICAgICJWIFNwYWNlIjogInZlcnRpa2FsZXIgRnJlaXJhdW0iLAorICAgICAgICAiV2lkdGgiOiAiQnJlaXRlIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9lZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvZWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ3MDhhNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvZWUuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTG9vYnUiLAorICAgICJPSyI6ICJPSyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElNQUdFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9lbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYwZDI1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvZWwuanMKQEAgLTAsMCArMSwyNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYXNlbGluZSI6ICJCYXNlbGluZSIsCisgICAgIkJvdHRvbSI6ICLOms6sz4TPiSDOvM6tz4HOv8+CIiwKKyAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAiSGVpZ2h0OiI6ICLOjs+Izr/PgiIsCisgICAgIkxlZnQiOiAizpHPgc65z4PPhM61z4HOrCIsCisgICAgIk1pZGRsZSI6ICLOms6tzr3PhM+Bzr8iLAorICAgICJPSyI6ICLOlc69z4TOrM6+zrXOuSIsCisgICAgIlJpZ2h0IjogIs6UzrXOvs65zqwiLAorICAgICJUb3AiOiAizqDOrM69z4kiLAorICAgICJXaWR0aDoiOiAizqDOu86sz4TOv8+CIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2VzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTZjM2YwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9lcy5qcwpAQCAtMCwwICsxLDkxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVzIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICJJbmZlcmlvciBhYnNvbHV0byIsCisgICAgIkFic21pZGRsZSI6ICJNZWRpbyBBYnNvbHV0byIsCisgICAgIkFuZ2xlOiI6ICLDgW5ndWxvOiIsCisgICAgIkJhc2VsaW5lIjogIkzDrW5lYSBiYXNlIiwKKyAgICAiQm90dG9tIjogIkluZmVyaW9yIiwKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiQ2xlYXIiOiAiRWxpbWluYXIiLAorICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiUHJvcG9yY2lvbmFsIiwKKyAgICAiQ3JvcCI6ICJSZWNvcnRhciIsCisgICAgIkRpcmVjdG9yeSI6ICJEaXJlY3RvcmlvIiwKKyAgICAiRGlyZWN0b3J5IFVwIjogIkRpcmVjdG9yaW8gc3VwZXJpb3IiLAorICAgICJFZGl0IjogImVkaXRhciIsCisgICAgIkZpbGVuYW1lOiI6ICJOb21icmUgZGVsIGZpY2hlcm86IiwKKyAgICAiRmxpcCBIb3Jpem9udGFsIjogImludmVydGlyIGhvcml6b250YWxtZW50ZSIsCisgICAgIkZsaXAgSW1hZ2UiOiAiaW52ZXJ0aXIgaW1hZ2VuIiwKKyAgICAiRmxpcCBWZXJ0aWNhbCI6ICJpbnZlcnRpciB2ZXJ0aWNhbG1lbnRlIiwKKyAgICAiRm9sZGVyIE5hbWU6IjogIk5vbWJyZSBkZWwgZGlyZWN0b3JpbzoiLAorICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiTm8gaGF5IHNvcG9ydGUgcGFyYSBpbcOhZ2VuZXMgZW4gZm9ybWF0byBHSUYuIiwKKyAgICAiSGVpZ2h0OiI6ICJBbHRvOiIsCisgICAgIkltYWdlIEZvcm1hdCI6ICJGb3JtYXRvOiIsCisgICAgIkluc2VydCBJbWFnZSI6ICJpbnNlcnRhciBpbWFnZW4iLAorICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICJEaXJlY3RvcmlvIGRlIGluaWNpbyBpbnbDoWxpZG86IiwKKyAgICAiSlBFRyBIaWdoIjogIkpQRUcgYWx0byIsCisgICAgIkpQRUcgTG93IjogIkpQRUcgYmFqbyIsCisgICAgIkpQRUcgTWVkaXVtIjogIkpQRUcgbWVkaW8iLAorICAgICJMZWZ0IjogIkl6cXVpZXJkYSIsCisgICAgIkxvY2siOiAiQmxvcXVlYXIiLAorICAgICJNYXJrZXIiOiAiTWFyY2Fkb3IiLAorICAgICJNZWFzdXJlIjogIkRpbWVuc2lvbmVzIiwKKyAgICAiTWlkZGxlIjogIk1lZGlvIiwKKyAgICAiTmV3IEZvbGRlciI6ICJDcmVhciBkaXJlY3RvcmlvIiwKKyAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIk5vIGhheSBpbWFnZW4iLAorICAgICJObyBJbWFnZXMgRm91bmQiOiAiTm8gc2UgaGEgZW5jb250cmFkbyBpbWFnZW4iLAorICAgICJOb3Qgc2V0IjogIk5vIGRlZmluaWRvIiwKKyAgICAiT0siOiAiQWNlcHRhciIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zaWNpw7NuIGRlIGxhIGltYWdlbiIsCisgICAgIlF1YWxpdHk6IjogIkNhbGlkYWQiLAorICAgICJSZWZyZXNoIjogIkFjdHVhbGl6YXIiLAorICAgICJSZXNpemUiOiAiQ2FtYmlhciB0YW1hw7FvIiwKKyAgICAiUmlnaHQiOiAiRGVyZWNoYSIsCisgICAgIlJvdGF0ZSI6ICJHaXJhciIsCisgICAgIlJvdGF0ZSBJbWFnZSI6ICJHaXJhciBpbWFnZW4iLAorICAgICJTYXZlIjogIkd1YXJkYXIiLAorICAgICJTdGFydCBYOiI6ICJJbmljaW8gWCIsCisgICAgIlN0YXJ0IFk6IjogIkluaWNpbyBZIiwKKyAgICAiVGV4dHRvcCI6ICJUZXh0byBTdXBlcmlvciIsCisgICAgIlRvcCI6ICJTdXBlcmlvciIsCisgICAgIlRyYXNoIjogIkJhc3VyYSIsCisgICAgIlc6IjogIkI6IiwKKyAgICAiV2lkdGg6IjogIkFuY2hvOiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFsaWduOiI6ICJBbGluZWFkbzoiLAorICAgICAgICAiQm9yZGVyIjogIkJvcmRlIiwKKyAgICAgICAgIkJvcmRlcjoiOiAiQm9yZGU6IiwKKyAgICAgICAgIkNvbG9yOiI6ICJDb2xvcjoiLAorICAgICAgICAiRGVsZXRlIGZpbGU/IjogIsK/Qm9ycmFyIGZpY2hlcm8/IiwKKyAgICAgICAgIkRlbGV0ZSBmb2xkZXI/IjogIsK/Qm9ycmFyIGRpcmVjdG9yaW8/IiwKKyAgICAgICAgIkRlc2NyaXB0aW9uOiI6ICJEZXNjcmlwY2nDs246IiwKKyAgICAgICAgIkZpbGUgc2F2ZWQuIjogIkZpY2hlcm8gZ3VhcmRhZG8uIiwKKyAgICAgICAgIkZpbGUgd2FzIG5vdCBzYXZlZC4iOiAiZWwgZmljaGVybyBubyBoYSBzaWRvIGd1YXJkYWRvLiIsCisgICAgICAgICJIIFNwYWNlIjogImVzcGFjaW8gaG9yaXpvbnRhbCIsCisgICAgICAgICJIZWlnaHQiOiAiQWx0byIsCisgICAgICAgICJJbWFnZSBGaWxlIjogIkZpY2hlcm8iLAorICAgICAgICAiSW1hZ2UgTWFuYWdlciI6ICJFZGl0b3IgZGUgaW3DoWdlbmVzIiwKKyAgICAgICAgIkludmFsaWQgZm9sZGVyIG5hbWUsIHBsZWFzZSBjaG9vc2UgYW5vdGhlciBmb2xkZXIgbmFtZS4iOiAiTm9tYnJlIGRlIGRpcmVjdG9yaW8gaW52w6FsaWRvLi4uIHBvciBmYXZvciBlbGlqYSBvdHJvIG5vbWJyZS4iLAorICAgICAgICAiTG9hZGluZyI6ICJDYXJnYXIiLAorICAgICAgICAiTWFyZ2luOiI6ICJNYXJnZW4gZXh0ZXJpb3I6IiwKKyAgICAgICAgIk5vIEltYWdlIHNlbGVjdGVkLiI6ICJObyBoYSBzZWxlY2Npb25hZG8gaW1hZ2VuLiIsCisgICAgICAgICJQYWRkaW5nOiI6ICJNYXJnZW4gaW50ZXJpb3I6IiwKKyAgICAgICAgIlBsZWFzZSBkZWxldGUgYWxsIGZpbGVzL2ZvbGRlcnMgaW5zaWRlIHRoZSBmb2xkZXIgeW91IHdpc2ggdG8gZGVsZXRlIGZpcnN0LiI6ICJQcmltZXJvIHRpZW5lIHF1ZSBib3JyYXIgdG9kb2FzIGxvcyBmaWNoZXJvcyBkZSBlc3RlIGRpcmVjdG9yaW8uIiwKKyAgICAgICAgIlJvdGF0ZSAxODAgwrAiOiAiR2lyYXIgMTgwwroiLAorICAgICAgICAiUm90YXRlIDkwIMKwIENDVyI6ICJHaXJhciA5MMK6IHNlbnRpZG8gY29udHJhcmVsb2oiLAorICAgICAgICAiUm90YXRlIDkwIMKwIENXIjogIkdpcmFyIDkwwrogc2VudGlkbyByZWxvaiIsCisgICAgICAgICJVcGxvYWQiOiAiU3ViaXIiLAorICAgICAgICAiVXBsb2FkOiI6ICJTdWJpcjoiLAorICAgICAgICAiVXBsb2FkaW5nLi4uIjogIlN1YmlyLi4uIiwKKyAgICAgICAgIlYgU3BhY2UiOiAiZXNwYWNpbyB2ZXJ0aWNhbCIsCisgICAgICAgICJXaWR0aCI6ICJBbmNobyIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvZXUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2V1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NzNlY2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2V1LmpzCkBAIC0wLDAgKzEsMzAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJzYm90dG9tIjogIklydWRpYXJlbiBiZWhla2FsZGVhbiIsCisgICAgIkFic21pZGRsZSI6ICJJcnVkaWFyZW4gZXJkaWFuIiwKKyAgICAiQmFzZWxpbmUiOiAiSXJ1ZGlhcmVuIG9pbmVhbiIsCisgICAgIkJvdHRvbSI6ICJCZWhlYW4iLAorICAgICJDYW5jZWwiOiAiVXR6aSIsCisgICAgIkluc2VydCBJbWFnZSI6ICJJcnVkaWEgdHhlcnRhdHUiLAorICAgICJMZWZ0IjogIkV6a2VycmV0YXJhIiwKKyAgICAiTWlkZGxlIjogIkVyZGlhbiIsCisgICAgIk5vdCBzZXQiOiAiRXogZ2FpdHVhIiwKKyAgICAiT0siOiAiQWRvcyIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiSXJ1ZGlhcmVuIGtva2FwZW5hIiwKKyAgICAiUmlnaHQiOiAiRXNrdWluZXRhcmEiLAorICAgICJUZXh0dG9wIjogIklydWRpYXJlbiBnb2lhbGRlYW4iLAorICAgICJUb3AiOiAiR29pYW4iLAorICAgICJXaWR0aDoiOiAiWmFiYWxlcmE6IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9mYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTBjZWJmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9mYS5qcwpAQCAtMCwwICsxLDMwIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICLYr9mC24zZgtinINm+2KfbjNuM2YYiLAorICAgICJBYnNtaWRkbGUiOiAi2K/ZgtuM2YLYpyDZiNiz2LciLAorICAgICJCYXNlbGluZSI6ICLYp9io2KrYr9in24wg2K7YtyIsCisgICAgIkJvdHRvbSI6ICLZvtin24zbjNmGIiwKKyAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIsCisgICAgIkluc2VydCBJbWFnZSI6ICLYp9mB2LLZiNiv2YYg2KrYtdmI24zYsSIsCisgICAgIkxlZnQiOiAi2obZviIsCisgICAgIk1pZGRsZSI6ICLZiNiz2LciLAorICAgICJOb3Qgc2V0IjogItiq2YbYuNuM2YUg2YbYtNiv2YciLAorICAgICJPSyI6ICLYqNmE2YciLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogItmF2YjZgti524zYqiDbjNin2KjbjCDYqti12YjbjNixIiwKKyAgICAiUmlnaHQiOiAi2LHYp9iz2KoiLAorICAgICJUZXh0dG9wIjogItio2KfZhNin24wg2YXYqtmGIiwKKyAgICAiVG9wIjogItio2KfZhNinIiwKKyAgICAiV2lkdGg6IjogIti32YjZhCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElNQUdFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9maS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvZmkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUyNWQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvZmkuanMKQEAgLTAsMCArMSwyNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYXNlbGluZSI6ICJUYWthcmFqYSIsCisgICAgIkJvdHRvbSI6ICJBbGxlIiwKKyAgICAiQ2FuY2VsIjogIlBlcnV1dGEiLAorICAgICJMZWZ0IjogIlZhc2VuIiwKKyAgICAiTWlkZGxlIjogIktlc2tlbGxlIiwKKyAgICAiT0siOiAiSHl2w6Rrc3kiLAorICAgICJSaWdodCI6ICJPaWtlYSIsCisgICAgIlRvcCI6ICJZbMO2cyIsCisgICAgIldpZHRoOiI6ICJMZXZleXMiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MzZlZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsODkgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJzYm90dG9tIjogIkFic2JvdHRvbSIsCisgICAgIkFic21pZGRsZSI6ICJBYnNtaWRkbGUiLAorICAgICJBbmdsZToiOiAiQW5nbGUiLAorICAgICJCYXNlbGluZSI6ICJCYXNlbGluZSIsCisgICAgIkJvdHRvbSI6ICJCYXMiLAorICAgICJDYW5jZWwiOiAiQW5udWxlciIsCisgICAgIkNsZWFyIjogIkVmZmFjZXIiLAorICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiQ29uc2VydmVyIGxlcyBwcm9wb3J0aW9ucyIsCisgICAgIkNyb3AiOiAiUmVjYWRyZXIiLAorICAgICJEaXJlY3RvcnkiOiAiUsOpcGVydG9pcmUiLAorICAgICJEaXJlY3RvcnkgVXAiOiAiUmVtb250ZXIiLAorICAgICJFZGl0IjogIkVkaXRlciIsCisgICAgIkZpbGVuYW1lOiI6ICJOb20iLAorICAgICJGbGlwIEhvcml6b250YWwiOiAiU3ltw6l0cmllIGhvcml6b250YWxlIiwKKyAgICAiRmxpcCBJbWFnZSI6ICJTeW3DqXRyaWUiLAorICAgICJGbGlwIFZlcnRpY2FsIjogIlN5bcOpdHJpZSB2ZXJ0aWNhbGUiLAorICAgICJGb2xkZXIgTmFtZToiOiAiTm9tIGR1IHLDqXBlcnRvaXJlIiwKKyAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIkZvcm1hdCBHSUYgbm9uIHN1cHBvcnTDqSwgw6lkaXRpb24gZCdpbWFnZSBub24gc3VwcG9ydMOpZSIsCisgICAgIkhlaWdodDoiOiAiSGF1dGV1ciIsCisgICAgIkltYWdlIEZvcm1hdCI6ICJGb3JtYXQgZCdpbWFnZSIsCisgICAgIkluc2VydCBJbWFnZSI6ICJJbnPDqXJlciB1bmUgaW1hZ2UiLAorICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICJSw6lwZXJ0b2lyZSBkZSBiYXNlIGludmFsaWRlOiIsCisgICAgIkpQRUcgSGlnaCI6ICJKUEVHIGhhdXQiLAorICAgICJKUEVHIExvdyI6ICJKUEVHIGJhcyIsCisgICAgIkpQRUcgTWVkaXVtIjogIkpQRUcgbW95ZW4iLAorICAgICJMZWZ0IjogIkdhdWNoZSIsCisgICAgIkxvY2siOiAiQ2FkZW5hcyIsCisgICAgIk1hcmtlciI6ICJNYXJxdWV1ciIsCisgICAgIk1lYXN1cmUiOiAiTWVzdXJlIiwKKyAgICAiTWlkZGxlIjogIk1pbGlldSIsCisgICAgIk5ldyBGb2xkZXIiOiAiTm91dmVhdSByw6lwZXJ0b2lyZSIsCisgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICJBdWN1bmUgaW1hZ2UgZGlzcG9uaWJsZSIsCisgICAgIk5vIEltYWdlcyBGb3VuZCI6ICJBdWN1bmUgaW1hZ2UgdHJvdXbDqWUiLAorICAgICJOb3Qgc2V0IjogIkluZMOpZmluaSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJQb3NpdGlvbiBkZSBjZXR0ZSBpbWFnZSIsCisgICAgIlF1YWxpdHk6IjogIlF1YWxpdMOpIiwKKyAgICAiUmVmcmVzaCI6ICJSYWZyYcOuY2hpciIsCisgICAgIlJlc2l6ZSI6ICJSZXRhaWxsZXIiLAorICAgICJSaWdodCI6ICJEcm9pdGUiLAorICAgICJSb3RhdGUiOiAiUGl2b3RlciIsCisgICAgIlJvdGF0ZSBJbWFnZSI6ICJSb3RhdGlvbiIsCisgICAgIlNhdmUiOiAiU2F1dmVyIiwKKyAgICAiU3RhcnQgWDoiOiAiRMOpYnV0IFgiLAorICAgICJTdGFydCBZOiI6ICJEw6lidXQgWSIsCisgICAgIlRleHR0b3AiOiAiVGV4dHRvcCIsCisgICAgIlRvcCI6ICJIYXV0IiwKKyAgICAiVHJhc2giOiAiRMOpdHJ1aXJlIiwKKyAgICAiVzoiOiAiTDoiLAorICAgICJXaWR0aDoiOiAiTGFyZ2V1ciIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFsaWduOiI6ICJBbGlnbmVtZW50IiwKKyAgICAgICAgIkJvcmRlciI6ICJCb3JkdXJlIiwKKyAgICAgICAgIkJvcmRlcjoiOiAiQm9yZHVyZSIsCisgICAgICAgICJDb2xvcjoiOiAiQ291bGV1ciIsCisgICAgICAgICJEZWxldGUgZmlsZT8iOiAiU3VwcHJlc3Npb24gZHUgZmljaGllciA/IiwKKyAgICAgICAgIkRlbGV0ZSBmb2xkZXI/IjogIlN1cHByZXNzaW9uIGR1IHLDqXBlcnRvaXJlID8iLAorICAgICAgICAiRmlsZSBzYXZlZC4iOiAiRmljaGllciBzYXV2ZWdhcmTDqS4iLAorICAgICAgICAiRmlsZSB3YXMgbm90IHNhdmVkLiI6ICJGaWNoaWVyIG5vbiBzYXV2ZWdhcmTDqS4iLAorICAgICAgICAiSCBTcGFjZSI6ICJFc3BhY2UgSCIsCisgICAgICAgICJIZWlnaHQiOiAiSGF1dGV1ciIsCisgICAgICAgICJJbWFnZSBGaWxlIjogIkZpY2hpZXIiLAorICAgICAgICAiSW1hZ2UgTWFuYWdlciI6ICJCaWJsaW90aMOocXVlIGQnaW1hZ2VzIiwKKyAgICAgICAgIkludmFsaWQgZm9sZGVyIG5hbWUsIHBsZWFzZSBjaG9vc2UgYW5vdGhlciBmb2xkZXIgbmFtZS4iOiAiTm9tIGRlIHLDqXBlcnRvaXJlIGludmFsaWRlLCB2ZXVpbGxleiBjaG9pc2lyIHVuIGF1dHJlIG5vbSIsCisgICAgICAgICJMb2FkaW5nIjogIkNoYXJnZW1lbnQgZW4gY291cnMiLAorICAgICAgICAiTWFyZ2luOiI6ICJNYXJnZSIsCisgICAgICAgICJObyBJbWFnZSBzZWxlY3RlZC4iOiAiQXVjdW5lIGltYWdlIHPDqWxlY3Rpb25uw6llLiIsCisgICAgICAgICJQYWRkaW5nOiI6ICJFc3BhY2VtZW50IiwKKyAgICAgICAgIlBsZWFzZSBkZWxldGUgYWxsIGZpbGVzL2ZvbGRlcnMgaW5zaWRlIHRoZSBmb2xkZXIgeW91IHdpc2ggdG8gZGVsZXRlIGZpcnN0LiI6ICJWZXVpbGxleiB0b3V0IGQnYWJvcmQgc3VwcHJpbWVyIHRvdXMgbGVzIGZpY2hpZXJzIGV0IHLDqXBlcnRvaXJlcyBjb250ZW51cyIsCisgICAgICAgICJSb3RhdGUgMTgwIMKwIjogIlJvdGF0aW9uIDE4MMKwIiwKKyAgICAgICAgIlJvdGF0ZSA5MCDCsCBDQ1ciOiAiUm90YXRpb24gOTDCsCBhbnRpaG9yYWlyZSIsCisgICAgICAgICJSb3RhdGUgOTAgwrAgQ1ciOiAiUm90YXRpb24gOTDCsCBob3JhaXJlIiwKKyAgICAgICAgIlVwbG9hZCI6ICJUw6lsw6ljaGFyZ2VyIiwKKyAgICAgICAgIlVwbG9hZGluZy4uLiI6ICJDaGFyZ2VtZW50Li4uIiwKKyAgICAgICAgIlYgU3BhY2UiOiAiRXNwYWNlIFYiLAorICAgICAgICAiV2lkdGgiOiAiTGFyZ2V1ciIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvZnJfY2EuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2ZyX2NhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYTZjMmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2ZyX2NhLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnJfY2EiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2diLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9nYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDYwNjc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9nYi5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImdiIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElNQUdFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9oZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvaGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY4ZjRiMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvaGUuanMKQEAgLTAsMCArMSwyNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJoZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYXNlbGluZSI6ICLXp9eVINeR16HXmdehIiwKKyAgICAiQm90dG9tIjogIteq15fXqteV158iLAorICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgIkhlaWdodDoiOiAi15LXldeR15QiLAorICAgICJMZWZ0IjogItep157XkNecIiwKKyAgICAiTWlkZGxlIjogIteQ157XpteiIiwKKyAgICAiT0siOiAi15DXmdep15XXqCIsCisgICAgIlJpZ2h0IjogIteZ157XmdefIiwKKyAgICAiVG9wIjogItei15zXmdeV158iLAorICAgICJXaWR0aDoiOiAi16jXldeX15EiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2h1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYjA4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2h1LmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaHUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIk3DqWdzZW0iLAorICAgICJPSyI6ICJSZW5kYmVuIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9pdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzhhOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9pdC5qcwpAQCAtMCwwICsxLDI1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIml0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkJhc2VsaW5lIjogIkFsbGluZWFtZW50byIsCisgICAgIkJvdHRvbSI6ICJCYXNzbyIsCisgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iLAorICAgICJIZWlnaHQ6IjogIkFsdGV6emEiLAorICAgICJMZWZ0IjogIlNpbmlzdHJhIiwKKyAgICAiTWlkZGxlIjogIkNlbnRyYWxlIiwKKyAgICAiT0siOiAiT0siLAorICAgICJSaWdodCI6ICJEZXN0cmEiLAorICAgICJUb3AiOiAiQWx0byIsCisgICAgIldpZHRoOiI6ICJMYXJnaGV6emEiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZDE2NjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2phLmpzCkBAIC0wLDAgKzEsOTEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiamEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJzYm90dG9tIjogIuS4iyjntbblr77nmoQpIiwKKyAgICAiQWJzbWlkZGxlIjogIuS4reWkrijntbblr77nmoQpIiwKKyAgICAiQW5nbGU6IjogIuinkuW6pjoiLAorICAgICJCYXNlbGluZSI6ICLjg5njg7zjgrnjg6njgqTjg7MiLAorICAgICJCb3R0b20iOiAi5LiLIiwKKyAgICAiQ2FuY2VsIjogIuS4reatoiIsCisgICAgIkNsZWFyIjogIuOCr+ODquOCoiIsCisgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICLnuKbmqKrmr5TjgpLlm7rlrpoiLAorICAgICJDcm9wIjogIuWIh+OCiuaKnOOBjSIsCisgICAgIkRpcmVjdG9yeSI6ICLjg4fjgqPjg6zjgq/jg4jjg6oiLAorICAgICJEaXJlY3RvcnkgVXAiOiAi6Kaq44OH44Kj44Os44Kv44OI44Oq44G4IiwKKyAgICAiRWRpdCI6ICLnt6jpm4YiLAorICAgICJGaWxlbmFtZToiOiAi44OV44Kh44Kk44Or5ZCNOiIsCisgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICLlt6blj7Plj43ou6IiLAorICAgICJGbGlwIEltYWdlIjogIueUu+WDj+OCkuWPjei7oiIsCisgICAgIkZsaXAgVmVydGljYWwiOiAi5LiK5LiL5Y+N6LuiIiwKKyAgICAiRm9sZGVyIE5hbWU6IjogIuODleOCqeODq+ODgOWQjToiLAorICAgICJHSUYgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIGltYWdlIGVkaXRpbmcgbm90IHN1cHBvcnRlZC4iOiAiR0lG5b2i5byP44Gv44K144Od44O844OI44GV44KM44Gm44GE44Gq44GE44Gf44KB44CB55S75YOP57eo6ZuG44Gn44GN44G+44Gb44KT44CCIiwKKyAgICAiSGVpZ2h0OiI6ICLpq5jjgZU6IiwKKyAgICAiSW1hZ2UgRm9ybWF0IjogIueUu+WDj+W9ouW8jyIsCisgICAgIkluc2VydCBJbWFnZSI6ICLnlLvlg4/jga7mjL/lhaUiLAorICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICLnhKHlirnjgarjg4fjgqPjg6zjgq/jg4jjg6o6IiwKKyAgICAiSlBFRyBIaWdoIjogIkpQRUcg6auY55S76LOqIiwKKyAgICAiSlBFRyBMb3ciOiAiSlBFRyDkvY7nlLvos6oiLAorICAgICJKUEVHIE1lZGl1bSI6ICJKUEVHIOaomea6liIsCisgICAgIkxlZnQiOiAi5bemIiwKKyAgICAiTG9jayI6ICLjg63jg4Pjgq8iLAorICAgICJNYXJrZXIiOiAi44Oe44O844Kr44O8IiwKKyAgICAiTWVhc3VyZSI6ICLoqIjmuKwiLAorICAgICJNaWRkbGUiOiAi5Lit5aSuIiwKKyAgICAiTmV3IEZvbGRlciI6ICLmlrDopo/jg5Xjgqnjg6vjg4AiLAorICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAi55S75YOP44GM44GC44KK44G+44Gb44KTIiwKKyAgICAiTm90IHNldCI6ICLjgarjgZciLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAi44GT44Gu55S75YOP44Gu6YWN572uIiwKKyAgICAiUXVhbGl0eToiOiAi55S76LOqOiIsCisgICAgIlJlZnJlc2giOiAi5pu05pawIiwKKyAgICAiUmVzaXplIjogIuOCteOCpOOCuuWkieabtCIsCisgICAgIlJpZ2h0IjogIuWPsyIsCisgICAgIlJvdGF0ZSI6ICLlm57ou6IiLAorICAgICJSb3RhdGUgSW1hZ2UiOiAi55S75YOP44KS5Zue6LuiIiwKKyAgICAiU2F2ZSI6ICLkv53lrZgiLAorICAgICJTdGFydCBYOiI6ICLplovlp4sgWCIsCisgICAgIlN0YXJ0IFk6IjogIumWi+WniyBZIiwKKyAgICAiVGV4dHRvcCI6ICLjg4bjgq3jgrnjg4jkuIrpg6giLAorICAgICJUb3AiOiAi5LiKIiwKKyAgICAiVHJhc2giOiAi5YmK6ZmkIiwKKyAgICAiVzoiOiAiVzoiLAorICAgICJXaWR0aDoiOiAi5bmFOiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFsaWduOiI6ICLooYzmj4PjgYgiLAorICAgICAgICAiQm9yZGVyIjogIuODnOODvOODgOODvCIsCisgICAgICAgICJCb3JkZXI6IjogIuWig+eVjOe3mjoiLAorICAgICAgICAiQ29sb3I6IjogIuiJsjoiLAorICAgICAgICAiRGVsZXRlIGZpbGUgXCIkZmlsZVwiPyI6ICLjg5XjgqHjgqTjg6sgXCIkZmlsZVwiIOOCkuWJiumZpOOBl+OBvuOBmeOBiz8iLAorICAgICAgICAiRGVsZXRlIGZvbGRlciBcIiRkaXJcIj8iOiAi44OV44Kp44Or44OAIFwiJGRpclwiIOOCkuWJiumZpOOBl+OBvuOBmeOBiz8iLAorICAgICAgICAiRGVzY3JpcHRpb246IjogIuiqrOaYjjoiLAorICAgICAgICAiRmlsZSBzYXZlZC4iOiAi44OV44Kh44Kk44Or44KS5L+d5a2Y44GX44G+44GX44Gf44CCIiwKKyAgICAgICAgIkZpbGUgd2FzIG5vdCBzYXZlZC4iOiAi44OV44Kh44Kk44Or44KS5L+d5a2Y44Gn44GN44G+44Gb44KT44Gn44GX44Gf44CCIiwKKyAgICAgICAgIkggU3BhY2UiOiAi5rC05bmz5L2Z55m9IiwKKyAgICAgICAgIkhlaWdodCI6ICLpq5jjgZUiLAorICAgICAgICAiSW1hZ2UgRmlsZSI6ICLnlLvlg4/jg5XjgqHjgqTjg6siLAorICAgICAgICAiSW1hZ2UgTWFuYWdlciI6ICLnlLvlg4/jg57jg43jg7zjgrjjg6MiLAorICAgICAgICAiSW52YWxpZCBmb2xkZXIgbmFtZSwgcGxlYXNlIGNob29zZSBhbm90aGVyIGZvbGRlciBuYW1lLiI6ICLnhKHlirnjgarjg5Xjgqnjg6vjg4DlkI3jgafjgZnjgILliKXjga7jg5Xjgqnjg6vjg4DlkI3jgpLpgbjjgpPjgafjgY/jgaDjgZXjgYTjgIIiLAorICAgICAgICAiTG9hZGluZyI6ICLjg63jg7zjg4nkuK0iLAorICAgICAgICAiTWFyZ2luOiI6ICLplpPpmpQ6IiwKKyAgICAgICAgIk5vIEZpbGVzIEZvdW5kIjogIuODleOCoeOCpOODq+OBjOOBguOCiuOBvuOBm+OCkyIsCisgICAgICAgICJObyBJbWFnZSBzZWxlY3RlZC4iOiAi55S75YOP44GM6YG45oqe44GV44KM44Gm44GE44G+44Gb44KT44CCIiwKKyAgICAgICAgIlBhZGRpbmc6IjogIuS9meeZvToiLAorICAgICAgICAiUGxlYXNlIGRlbGV0ZSBhbGwgZmlsZXMvZm9sZGVycyBpbnNpZGUgdGhlIGZvbGRlciB5b3Ugd2lzaCB0byBkZWxldGUgZmlyc3QuIjogIuWJiumZpOOBl+OBn+OBhOODleOCqeODq+ODgOWGheOBruODleOCoeOCpOODq+OBqOODleOCqeODq+ODgOOCkuWFqOOBpuWJiumZpOOBl+OBpuOBiuOBhOOBpuOBj+OBoOOBleOBhOOAgiIsCisgICAgICAgICJSb3RhdGUgMTgwIMKwIjogIjE4MMKwIiwKKyAgICAgICAgIlJvdGF0ZSA5MCDCsCBDQ1ciOiAiOTDCsCDlj43mmYLoqIjlm57jgooiLAorICAgICAgICAiUm90YXRlIDkwIMKwIENXIjogIjkwwrAg5pmC6KiI5Zue44KKIiwKKyAgICAgICAgIlVwbG9hZCI6ICLjgqLjg4Pjg5fjg63jg7zjg4kiLAorICAgICAgICAiVXBsb2FkOiI6ICLjgqLjg4Pjg5fjg63jg7zjg4k6IiwKKyAgICAgICAgIlVwbG9hZGluZy4uLiI6ICLjgqLjg4Pjg5fjg63jg7zjg4nkuK0uLi4iLAorICAgICAgICAiViBTcGFjZSI6ICLlnoLnm7TkvZnnmb0iLAorICAgICAgICAiV2lkdGgiOiAi5bmFIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4N2E1ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSw5OSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICJBOiI6ICIiLAorICAgICJBYnNib3R0b20iOiAiIiwKKyAgICAiQWJzbWlkZGxlIjogIiIsCisgICAgIkFuZ2xlOiI6ICIiLAorICAgICJCYXNlbGluZSI6ICIiLAorICAgICJCb3R0b20iOiAiIiwKKyAgICAiQ2FuY2VsIjogIiIsCisgICAgIkNsZWFyIjogIiIsCisgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICIiLAorICAgICJDcm9wIjogIiIsCisgICAgIkQ6IjogIiIsCisgICAgIkRpcmVjdG9yeSI6ICIiLAorICAgICJEaXJlY3RvcnkgVXAiOiAiIiwKKyAgICAiRWRpdCI6ICIiLAorICAgICJGaWxlbmFtZToiOiAiIiwKKyAgICAiRmxpY2tyIFBpY3R1cmUgTGlzdCI6ICIiLAorICAgICJGbGlja3IgUGljdHVyZXMiOiAiIiwKKyAgICAiRmxpY2tyIFNlbGVjdGlvbiI6ICIiLAorICAgICJGbGlja3IgVXNlcm5hbWUvRW1haWwiOiAiIiwKKyAgICAiRmxpcCBIb3Jpem9udGFsIjogIiIsCisgICAgIkZsaXAgSW1hZ2UiOiAiIiwKKyAgICAiRmxpcCBWZXJ0aWNhbCI6ICIiLAorICAgICJGb2xkZXIgTmFtZToiOiAiIiwKKyAgICAiR0lGIjogIiIsCisgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICIiLAorICAgICJIOiI6ICIiLAorICAgICJIZWlnaHQ6IjogIiIsCisgICAgIkltYWdlIEVkaXRvciI6ICIiLAorICAgICJJbWFnZSBGb3JtYXQiOiAiIiwKKyAgICAiSW1hZ2UgTGlzdCI6ICIiLAorICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAiSW5zZXJ0IEltYWdlIjogIiIsCisgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIiIsCisgICAgIkpQRUcgSGlnaCI6ICIiLAorICAgICJKUEVHIExvdyI6ICIiLAorICAgICJKUEVHIE1lZGl1bSI6ICIiLAorICAgICJLZXl3b3JkIjogIiIsCisgICAgIkxlZnQiOiAiIiwKKyAgICAiTG9jayI6ICIiLAorICAgICJNYXJrZXIiOiAiIiwKKyAgICAiTWVhc3VyZSI6ICIiLAorICAgICJNaWRkbGUiOiAiIiwKKyAgICAiTmV3IEZvbGRlciI6ICIiLAorICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiIiwKKyAgICAiTm8gSW1hZ2VzIEZvdW5kIjogIiIsCisgICAgIk5vIFBob3RvcyBGb3VuZCI6ICIiLAorICAgICJObyBWaWRlb3MgRm91bmQiOiAiIiwKKyAgICAiTm90IHNldCI6ICIiLAorICAgICJPSyI6ICIiLAorICAgICJQTkciOiAiIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICIiLAorICAgICJRdWFsaXR5OiI6ICIiLAorICAgICJSZWZyZXNoIjogIiIsCisgICAgIlJlc2l6ZSI6ICIiLAorICAgICJSaWdodCI6ICIiLAorICAgICJSb3RhdGUiOiAiIiwKKyAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICIiLAorICAgICJSb3RhdGUgOTAgJmRlZzsgQ0NXIjogIiIsCisgICAgIlJvdGF0ZSA5MCAmZGVnOyBDVyI6ICIiLAorICAgICJSb3RhdGUgSW1hZ2UiOiAiIiwKKyAgICAiU2F2ZSI6ICIiLAorICAgICJTdGFydCBYOiI6ICIiLAorICAgICJTdGFydCBZOiI6ICIiLAorICAgICJUZXh0dG9wIjogIiIsCisgICAgIlRoaXMgU2VydmVyIjogIiIsCisgICAgIlRvcCI6ICIiLAorICAgICJUcmFzaCI6ICIiLAorICAgICJXOiI6ICIiLAorICAgICJXaWR0aDoiOiAiIiwKKyAgICAiWDoiOiAiIiwKKyAgICAiWToiOiAiIiwKKyAgICAiWW91VHViZSBTZWxlY3Rpb24iOiAiIiwKKyAgICAiWW91VHViZSBVc2VybmFtZSI6ICIiLAorICAgICJZb3VUdWJlIFZpZGVvIExpc3QiOiAiIiwKKyAgICAiWW91VHViZSBWaWRlb3MiOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvbHQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2x0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMDg2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2x0LmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL2x2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9sdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTY0ZTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9sdi5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdGNlbHQiLAorICAgICJPSyI6ICJMYWJpIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9uYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWIwYTQzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDg1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFuZ2xlOiI6ICJWaW5rZWw6IiwKKyAgICAiQmFzZWxpbmUiOiAiR3J1bm5saW5qZSIsCisgICAgIkJvdHRvbSI6ICJCdW5uIiwKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIkNsZWFyIjogIkZqZXJuIiwKKyAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIkJlaG9sZCBwcm9wb3Nqb25lciIsCisgICAgIkNyb3AiOiAiQmVza2rDpnIiLAorICAgICJEaXJlY3RvcnkiOiAiTWFwcGUiLAorICAgICJEaXJlY3RvcnkgVXAiOiAiT3BwIGVuIG1hcHBlIiwKKyAgICAiRWRpdCI6ICJSZWRpZ2VyIiwKKyAgICAiRmlsZW5hbWU6IjogIkZpbG5hdm46IiwKKyAgICAiRmxpcCBIb3Jpem9udGFsIjogIlZlbmQgaG9yaXNvbnRhbCIsCisgICAgIkZsaXAgSW1hZ2UiOiAiVmVuZCBiaWxkZSIsCisgICAgIkZsaXAgVmVydGljYWwiOiAiVmVuZCB2ZXJ0aWthbCIsCisgICAgIkZvbGRlciBOYW1lOiI6ICJNYXBwZW5hdm46IiwKKyAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIkJpbGRlZm9ybWF0ZXQgR0lGIGVyIGlra2Ugc3TDuHR0ZXQuIiwKKyAgICAiSGVpZ2h0OiI6ICJIw7h5ZGU6IiwKKyAgICAiSW1hZ2UgRm9ybWF0IjogIkJpbGRlZm9ybWF0OiIsCisgICAgIkluc2VydCBJbWFnZSI6ICJTZXR0IGlubiBiaWxkZSIsCisgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIkZlaWwgcm90LW1hcHBlOiIsCisgICAgIkpQRUcgSGlnaCI6ICJKUEVHIGjDuHkiLAorICAgICJKUEVHIExvdyI6ICJKUEVHIGxhdiIsCisgICAgIkpQRUcgTWVkaXVtIjogIkpQRUcgbWlkZGVsc2UiLAorICAgICJMZWZ0IjogIlZlbnN0cmUiLAorICAgICJMb2NrIjogIlNwZXJyZSIsCisgICAgIk1hcmtlciI6ICJNYXJrZXIiLAorICAgICJNZWFzdXJlIjogIk3DpWwiLAorICAgICJNaWRkbGUiOiAiTWlkdGVuIiwKKyAgICAiTmV3IEZvbGRlciI6ICJOeSBtYXBwZSIsCisgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICJJbmdldCBiaWxkZSBlciB0aWxnamVuZ2VsaWciLAorICAgICJObyBJbWFnZXMgRm91bmQiOiAiSW5nZW4gYmlsZGVyIGZ1bm5ldCIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJCaWxkZXBvc3Npc2pvbiIsCisgICAgIlF1YWxpdHk6IjogIkt2YWxpdGV0IiwKKyAgICAiUmVmcmVzaCI6ICJPcHBmcmlzayIsCisgICAgIlJlc2l6ZSI6ICJFbmRyZSBzdMO4cnJlbHNlIiwKKyAgICAiUmlnaHQiOiAiSMO4eXJlIiwKKyAgICAiUm90YXRlIjogIlJvdGVyIiwKKyAgICAiUm90YXRlIEltYWdlIjogIlJvdGVyIGJpbGRlIiwKKyAgICAiU2F2ZSI6ICJMYWdyZSIsCisgICAgIlN0YXJ0IFg6IjogIlN0YXJ0IFgiLAorICAgICJTdGFydCBZOiI6ICJTdGFydCBZIiwKKyAgICAiVG9wIjogIk92ZXJrYW50IiwKKyAgICAiVHJhc2giOiAiU8O4cHBlbGt1cnYiLAorICAgICJXOiI6ICJCOiIsCisgICAgIldpZHRoOiI6ICJCcmVkZGU6IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQWxpZ246IjogIkp1c3RlcmluZzoiLAorICAgICAgICAiQm9yZGVyIjogIlJhbW1lIiwKKyAgICAgICAgIkNvbG9yOiI6ICJGYXJnZToiLAorICAgICAgICAiRGVsZXRlIGZpbGU/IjogIlNsZXR0ZSBmaWw/IiwKKyAgICAgICAgIkRlbGV0ZSBmb2xkZXI/IjogIlNsZXR0IG1hcHBlPyIsCisgICAgICAgICJEZXNjcmlwdGlvbjoiOiAiQmVza3JpdmVsc2U6IiwKKyAgICAgICAgIkZpbGUgc2F2ZWQuIjogIkZpbCBsYWdyZXQuIiwKKyAgICAgICAgIkZpbGUgd2FzIG5vdCBzYXZlZC4iOiAiRmlsIGJsZSBpa2tlIGxhZ3JldC4iLAorICAgICAgICAiSCBTcGFjZSI6ICJob3Jpc29udGFsIG1hcmciLAorICAgICAgICAiSGVpZ2h0IjogIkjDuHlkZSIsCisgICAgICAgICJJbWFnZSBGaWxlIjogIkJpbGRlZmlsIiwKKyAgICAgICAgIkltYWdlIE1hbmFnZXIiOiAiQmlsZGViZWhhbmRsZXIiLAorICAgICAgICAiSW52YWxpZCBmb2xkZXIgbmFtZSwgcGxlYXNlIGNob29zZSBhbm90aGVyIGZvbGRlciBuYW1lLiI6ICJVZ3lsZGlnIG1hcHBlbmF2biwgdmVubmxpZ3N0IHZlbGcgZXQgYW5uZXQgbmF2biBww6UgbWFwcGVuLiIsCisgICAgICAgICJMb2FkaW5nIjogIkxhc3RlciIsCisgICAgICAgICJNYXJnaW46IjogIk1hcmc6IiwKKyAgICAgICAgIk5vIEltYWdlIHNlbGVjdGVkLiI6ICJJbmdldCBiaWxkZSBlciB2YWxndC4iLAorICAgICAgICAiUGFkZGluZzoiOiAiSW5uc2lkZW1hcmc6IiwKKyAgICAgICAgIlBsZWFzZSBkZWxldGUgYWxsIGZpbGVzL2ZvbGRlcnMgaW5zaWRlIHRoZSBmb2xkZXIgeW91IHdpc2ggdG8gZGVsZXRlIGZpcnN0LiI6ICJWZW5ubGlnc3Qgc2xldHQgYWxsZSBmaWxlciBvZyBtYXBwZXIgaSBtYXBwZW4gZHUgw7huc2tlciDDpSBzbGV0dGUgb2cgcHLDuHYgaWdqZW4uIiwKKyAgICAgICAgIlJvdGF0ZSAxODAgwrAiOiAiUm90ZXIgMTgwwrAiLAorICAgICAgICAiUm90YXRlIDkwIMKwIENDVyI6ICJSb3RlciA5MMKwIG1vdCBrbG9ra2EiLAorICAgICAgICAiUm90YXRlIDkwIMKwIENXIjogIlJvdGVyIDkwwrAgbWVkIGtsb2trYSIsCisgICAgICAgICJVcGxvYWQiOiAiTGFzdCBvcHAiLAorICAgICAgICAiVXBsb2FkaW5nLi4uIjogIkxhc3RlciBvcHAuLi4iLAorICAgICAgICAiViBTcGFjZSI6ICJ2ZXJ0aWthbCBtYXJnIiwKKyAgICAgICAgIldpZHRoIjogIkJyZWRkZSIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL25sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkM2IxYmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL25sLmpzCkBAIC0wLDAgKzEsNjAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQW5nbGU6IjogIkhvZWs6IiwKKyAgICAiQmFzZWxpbmUiOiAiQmFzaXMiLAorICAgICJCb3R0b20iOiAiT25kZXIiLAorICAgICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKKyAgICAiQ2xlYXIiOiAiTGVlZyIsCisgICAgIkNvbnN0cmFpbiBQcm9wb3J0aW9ucyI6ICJQcm9wb3J0aWUgYmVob3VkZW4iLAorICAgICJDcm9wIjogIlBhc3NlbmQgbWFrZW4iLAorICAgICJEaXJlY3RvcnkiOiAiTWFwIiwKKyAgICAiRGlyZWN0b3J5IFVwIjogIkJvdmVubGlnZ2VuZGUgbWFwIiwKKyAgICAiRWRpdCI6ICJCZXdlcmtlbiIsCisgICAgIkZpbGVuYW1lOiI6ICJCZXN0YW5kc25hYW06IiwKKyAgICAiRmxpcCBIb3Jpem9udGFsIjogImhvci4gc3BpZWdlbGVuIiwKKyAgICAiRmxpcCBJbWFnZSI6ICJCZWVsZCBzcGllZ2VsZW4iLAorICAgICJGbGlwIFZlcnRpY2FsIjogInZlci4gc3BpZWdlbGVuIiwKKyAgICAiRm9sZGVyIE5hbWU6IjogIk1hcCBuYWFtIiwKKyAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogIkdJRi1mb3JtYXQgbmlldCBvbmRlcnN0ZXVuZCwgYmVlbGRiZXdlcmtpbmcgbmlldCBvbmRlcnN0ZXVuZC4iLAorICAgICJIZWlnaHQ6IjogIkhvb2d0ZToiLAorICAgICJJbWFnZSBGb3JtYXQiOiAiQmVlbGRmb3JtYWF0OiIsCisgICAgIkluc2VydCBJbWFnZSI6ICJBZmJlZWxkaW5nIGludm9lZ2VuIiwKKyAgICAiSW52YWxpZCBiYXNlIGRpcmVjdG9yeToiOiAiT25nZWxkaWcgcGFkOiIsCisgICAgIkpQRUcgSGlnaCI6ICJKUEVHIGhvb2ciLAorICAgICJKUEVHIExvdyI6ICJKUEVHIGxhYWciLAorICAgICJKUEVHIE1lZGl1bSI6ICJKUEVHIG1pZGRlbiIsCisgICAgIkxlZnQiOiAiTGlua3MiLAorICAgICJMb2NrIjogIk9wLXNsb3QiLAorICAgICJNYXJrZXIiOiAiTWFya2VyZW4iLAorICAgICJNZWFzdXJlIjogIk9wbWV0ZW4iLAorICAgICJNaWRkbGUiOiAiTWlkZGVuIiwKKyAgICAiTmV3IEZvbGRlciI6ICJOaWV1dyBtYXAiLAorICAgICJObyBJbWFnZSBBdmFpbGFibGUiOiAiR2VlbiBiZWVsZCBiZXNjaGlrYmFhciIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJVaXRsaWpuZW4gdmFuIGRpdCBiZWVsZCIsCisgICAgIlF1YWxpdHk6IjogIkt3YWxpdGVpdCIsCisgICAgIlJlZnJlc2giOiAiVmVybmlldXdlbiIsCisgICAgIlJlc2l6ZSI6ICJGb3JtYWF0IHdpanppZ2VuIiwKKyAgICAiUmlnaHQiOiAiUmVjaHRzIiwKKyAgICAiUm90YXRlIjogIkRyYWFpZW4iLAorICAgICJSb3RhdGUgSW1hZ2UiOiAiQmVlbGQgZHJhYWllbiIsCisgICAgIlNhdmUiOiAiT3BzbGFhbiIsCisgICAgIlN0YXJ0IFg6IjogIlN0YXJ0IFgiLAorICAgICJTdGFydCBZOiI6ICJTdGFydCBZIiwKKyAgICAiVG9wIjogIkJvdmVuIiwKKyAgICAiVHJhc2giOiAiUHJ1bGxlbmJhayIsCisgICAgIlc6IjogIlc6IiwKKyAgICAiV2lkdGg6IjogIkJyZWVkdGU6IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiSW1hZ2UgTWFuYWdlciI6ICJBZmJlZWxkaW5nZW4gQmVoZWVyIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvcGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE4ZjBlNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvcGwuanMKQEAgLTAsMCArMSw5MSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAiQWJzLiBkw7PFgiIsCisgICAgIkFic21pZGRsZSI6ICJBYnMuIMWbcm9kZWsiLAorICAgICJBbmdsZToiOiAiS8SFdDoiLAorICAgICJCYXNlbGluZSI6ICJMaW5pYSBiYXpvd2EiLAorICAgICJCb3R0b20iOiAiRMOzxYIiLAorICAgICJDYW5jZWwiOiAiQW51bHVqIiwKKyAgICAiQ2xlYXIiOiAiV3ljennFm8SHIiwKKyAgICAiQ29uc3RyYWluIFByb3BvcnRpb25zIjogIlphY2hvd2FqIHByb3BvcmNqZSIsCisgICAgIkNyb3AiOiAiUHJ6eXRuaWoiLAorICAgICJEaXJlY3RvcnkiOiAiS2F0YWxvZyIsCisgICAgIkRpcmVjdG9yeSBVcCI6ICJLYXRhbG9nIHd5xbxlaiIsCisgICAgIkVkaXQiOiAiRWR5dHVqIiwKKyAgICAiRmlsZW5hbWU6IjogIk5hendhIHBsaWt1OiIsCisgICAgIkZsaXAgSG9yaXpvbnRhbCI6ICJPZHdyw7PEhyBwb3ppb21vIiwKKyAgICAiRmxpcCBJbWFnZSI6ICJPZHdyw7PEhyIsCisgICAgIkZsaXAgVmVydGljYWwiOiAiT2R3csOzxIcgcGlvbm93byIsCisgICAgIkZvbGRlciBOYW1lOiI6ICJOYXp3YSBrYXRhbG9ndSIsCisgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICJCcmFrIG9ic8WCdWdpIHBsaWvDs3cgR0lGLCBlZHljamEgamVzdCBuaWVtb8W8bGl3YS4iLAorICAgICJIZWlnaHQ6IjogIld5c29rb8WbxIc6IiwKKyAgICAiSW1hZ2UgRm9ybWF0IjogIkZvcm1hdCBwbGlrdToiLAorICAgICJJbnNlcnQgSW1hZ2UiOiAiV3N0YXcgb2JyYXplayIsCisgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIk5pZXByYXdpZMWCb3d5IGthdGFsb2cgYmF6b3d5OiIsCisgICAgIkpQRUcgSGlnaCI6ICJKUEVHIHd5c29rYSIsCisgICAgIkpQRUcgTG93IjogIkpQRUcgbmlza2EiLAorICAgICJKUEVHIE1lZGl1bSI6ICJKUEVHIMWbcmVkbmlhIiwKKyAgICAiTGVmdCI6ICJEbyBsZXdlaiIsCisgICAgIkxvY2siOiAiWmFibG9rdWoiLAorICAgICJNYXJrZXIiOiAiWmF6bmFjeiIsCisgICAgIk1lYXN1cmUiOiAiWm1pZXJ6IiwKKyAgICAiTWlkZGxlIjogIsWacm9kZWsiLAorICAgICJOZXcgRm9sZGVyIjogIk5vd3kga2F0YWxvZyIsCisgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICJPYnJhemVrIG5pZWRvc3TEmXBueSIsCisgICAgIk5vIEltYWdlcyBGb3VuZCI6ICJOaWUgem5hbGV6aW9ubyBvYnJhemvDs3ciLAorICAgICJOb3Qgc2V0IjogIk5pZSB1c3Rhd2lvbmUiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiV3lyw7N3bmFuaWUgdGVnbyBvYnJhemthIG5hIHN0cm9uaWUiLAorICAgICJRdWFsaXR5OiI6ICJKYWtvxZvEhyIsCisgICAgIlJlZnJlc2giOiAiT2TFm3dpZcW8IiwKKyAgICAiUmVzaXplIjogIlByemVza2FsdWoiLAorICAgICJSaWdodCI6ICJEbyBwcmF3ZWoiLAorICAgICJSb3RhdGUiOiAiT2Jyw7PEhyIsCisgICAgIlJvdGF0ZSBJbWFnZSI6ICJPYnLDs8SHIiwKKyAgICAiU2F2ZSI6ICJaYXBpc3oiLAorICAgICJTdGFydCBYOiI6ICJQb2N6xIV0ZWsgWCIsCisgICAgIlN0YXJ0IFk6IjogIlBvY3rEhXRlayBZIiwKKyAgICAiVGV4dHRvcCI6ICJHw7NyYSB0ZWtzdHUiLAorICAgICJUb3AiOiAiR8OzcmEiLAorICAgICJUcmFzaCI6ICJVc3XFhCIsCisgICAgIlc6IjogIkw6IiwKKyAgICAiV2lkdGg6IjogIlN6ZXJva2/Fm8SHOiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFsaWduOiI6ICJXeXLDs3duYW5pZToiLAorICAgICAgICAiQm9yZGVyIjogIlJhbWthIiwKKyAgICAgICAgIkJvcmRlcjoiOiAiUmFta2E6IiwKKyAgICAgICAgIkNvbG9yOiI6ICJLb2xvcjoiLAorICAgICAgICAiRGVsZXRlIGZpbGU/IjogIlVzdW7EhcSHIHBsaWs/IiwKKyAgICAgICAgIkRlbGV0ZSBmb2xkZXI/IjogIlVzdW7EhcSHIGthdGFsb2cgPyIsCisgICAgICAgICJEZXNjcmlwdGlvbjoiOiAiT3BpczoiLAorICAgICAgICAiRmlsZSBzYXZlZC4iOiAiWmFwaXNhbm8gcGxpay4iLAorICAgICAgICAiRmlsZSB3YXMgbm90IHNhdmVkLiI6ICJOaWUgemFwaXNhbm8gcGxpa3UuIiwKKyAgICAgICAgIkggU3BhY2UiOiAiT2RsZWfFgm/Fm8SHIEgiLAorICAgICAgICAiSGVpZ2h0IjogIld5c29rb8WbxIciLAorICAgICAgICAiSW1hZ2UgRmlsZSI6ICJQbGlrIG9icmF6a2EiLAorICAgICAgICAiSW1hZ2UgTWFuYWdlciI6ICJNZW5lZMW8ZXIgb2JyYXprw7N3IiwKKyAgICAgICAgIkludmFsaWQgZm9sZGVyIG5hbWUsIHBsZWFzZSBjaG9vc2UgYW5vdGhlciBmb2xkZXIgbmFtZS4iOiAiTmllcHJhd2lkxYJvd2EgbmF6d2Ega2F0YWxvZ3UsIHd5YmllcnogaW5uxIUuIiwKKyAgICAgICAgIkxvYWRpbmciOiAixYFhZG93YW5pZSIsCisgICAgICAgICJNYXJnaW46IjogIk1hcmdpbmVzOiIsCisgICAgICAgICJObyBJbWFnZSBzZWxlY3RlZC4iOiAiTmllIHphem5hY3pvbm8gb2JyYXprYS4iLAorICAgICAgICAiUGFkZGluZzoiOiAiV2NpxJljaWU6IiwKKyAgICAgICAgIlBsZWFzZSBkZWxldGUgYWxsIGZpbGVzL2ZvbGRlcnMgaW5zaWRlIHRoZSBmb2xkZXIgeW91IHdpc2ggdG8gZGVsZXRlIGZpcnN0LiI6ICJOYWpwaWVydyB1c3XFhCB3c3p5c3RraWUgcGxpa2kgaSBwb2RrYXRhbG9naSBrYXRhbG9ndS4iLAorICAgICAgICAiUm90YXRlIDE4MCDCsCI6ICJPYnLDs8SHIDE4MMKwIiwKKyAgICAgICAgIlJvdGF0ZSA5MCDCsCBDQ1ciOiAiT2Jyw7PEhyA5MMKwIHcgbGV3byIsCisgICAgICAgICJSb3RhdGUgOTAgwrAgQ1ciOiAiT2Jyw7PEhyA5MMKwIHcgcHJhd28iLAorICAgICAgICAiVXBsb2FkIjogIldncmFqIiwKKyAgICAgICAgIlVwbG9hZDoiOiAiV2dyYWo6IiwKKyAgICAgICAgIlVwbG9hZGluZy4uLiI6ICJXZ3J5d2FuaWUuLi4iLAorICAgICAgICAiViBTcGFjZSI6ICJPZGxlZ8WCb8WbxIcgViIsCisgICAgICAgICJXaWR0aCI6ICJTemVyb2tvxZvEhyIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MzliM2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTAyIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkE6IjogIkE6IiwKKyAgICAiQWJzYm90dG9tIjogIkluZmVyaW9yIGFic29sdXRvIiwKKyAgICAiQWJzbWlkZGxlIjogIk1laW8gYWJzb2x1dG8iLAorICAgICJBbmdsZToiOiAiw4JuZ3VsbzoiLAorICAgICJCYXNlbGluZSI6ICJMaW5oYSBkZSBiYXNlIiwKKyAgICAiQm90dG9tIjogIkJhc2UiLAorICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICJDbGVhciI6ICJMaW1wYXIiLAorICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAiTWFudGVyIHByb3BvcsOnw7VlcyIsCisgICAgIkNyb3AiOiAiUmVjb3J0YXIiLAorICAgICJEOiI6ICJHOiIsCisgICAgIkRpcmVjdG9yeSI6ICJEaXJldMOzcmlvIiwKKyAgICAiRGlyZWN0b3J5IFVwIjogIkRpcmV0w7NyaW8gQWNpbWEiLAorICAgICJFZGl0IjogIkVkaXRhciIsCisgICAgIkZpbGVuYW1lOiI6ICJOb21lIGRvIGFycXVpdm86IiwKKyAgICAiRmxpcCBIb3Jpem9udGFsIjogIkVzcGVsaGFyIEhvcml6b250YWxtZW50ZSIsCisgICAgIkZsaXAgSW1hZ2UiOiAiRXNwZWxoYXIgSW1hZ2VtIiwKKyAgICAiRmxpcCBWZXJ0aWNhbCI6ICJFc3BlbGhhciBWZXJ0aWNhbG1lbnRlIiwKKyAgICAiRm9sZGVyIE5hbWU6IjogIk5vbWUgZGEgUGFzdGE6IiwKKyAgICAiR0lGIjogIkdJRiIsCisgICAgIkdJRiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgaW1hZ2UgZWRpdGluZyBub3Qgc3VwcG9ydGVkLiI6ICJGb3JtYXRvIEdJRiBuw6NvIMOpIHN1cG9ydGFkbywgZWRpw6fDo28gZGUgaW1hZ2VtIG7Do28gw6kgc3Vwb3J0YWRhLiIsCisgICAgIkg6IjogIkE6IiwKKyAgICAiSGVpZ2h0OiI6ICJBbHR1cmE6IiwKKyAgICAiSW1hZ2UgRWRpdG9yIjogIkVkaXRvciBkZSBJbWFnZW0iLAorICAgICJJbWFnZSBGb3JtYXQiOiAiRm9ybWF0byBkYSBJbWFnZW0iLAorICAgICJJbWFnZSBMaXN0IjogIkxpc3RhIGRlIEltYWdlbnMiLAorICAgICJJbWFnZSBTZWxlY3Rpb24iOiAiU2VsZcOnw6NvIGRlIEltYWdlbSIsCisgICAgIkluc2VydCBJbWFnZSI6ICJJbnNlcmlyIEltYWdlbSIsCisgICAgIkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6IjogIkRpcmV0w7NyaW8gYmFzZSBpbnbDoWxpZG86IiwKKyAgICAiSlBFRyBIaWdoIjogIkpQRUcgQWx0byIsCisgICAgIkpQRUcgTG93IjogIkpQRUcgQmFpeG8iLAorICAgICJKUEVHIE1lZGl1bSI6ICJKUEVHIE3DqWRpbyIsCisgICAgIkxlZnQiOiAiRXNxdWVyZGEiLAorICAgICJMb2NrIjogIlRyYXZhciIsCisgICAgIk1hcmtlciI6ICJNYXJjYXIiLAorICAgICJNZWFzdXJlIjogIk1lZGlkYSIsCisgICAgIk1pZGRsZSI6ICJNZWlvIiwKKyAgICAiTmV3IEZvbGRlciI6ICJOb3ZhIFBhc3RhIiwKKyAgICAiTm8gSW1hZ2UgQXZhaWxhYmxlIjogIlNlbSBJbWFnZW0gRGlzcG9uw612ZWwiLAorICAgICJObyBJbWFnZXMgRm91bmQiOiAiTmVuaHVtYSBJbWFnZW0gRW5jb250cmFkYSIsCisgICAgIk5vdCBzZXQiOiAiTsOjbyBkZWZpbmlkbyIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUE5HIjogIlBORyIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zaWNpb25hbWVudG8gZGVzdGEgaW1hZ2VtIiwKKyAgICAiUXVhbGl0eToiOiAiUXVhbGlkYWRlOiIsCisgICAgIlJlZnJlc2giOiAiQXR1YWxpemHDp8OjbyIsCisgICAgIlJlc2l6ZSI6ICJSZWRpbWVuY2lvbmFyIiwKKyAgICAiUmlnaHQiOiAiRGlyZWl0YSIsCisgICAgIlJvdGF0ZSI6ICJSb3RhY2lvbmFyIiwKKyAgICAiUm90YXRlIDE4MCAmZGVnOyI6ICJSb3RhY2lvbmFyIDE4MCAmZGVnOyIsCisgICAgIlJvdGF0ZSA5MCAmZGVnOyBDQ1ciOiAiUm90YWNpb25hciA5MCAmZGVnOyBhbnRpLWhvcsOhcmlvIiwKKyAgICAiUm90YXRlIDkwICZkZWc7IENXIjogIlJvdGFjaW9uYXIgOTAgJmRlZzsgaG9yw6FyaW8iLAorICAgICJSb3RhdGUgSW1hZ2UiOiAiUm90YWNpb25hciBJbWFnZW0iLAorICAgICJTYXZlIjogIkdyYXZhciIsCisgICAgIlN0YXJ0IFg6IjogIkluw61jaW8gWDoiLAorICAgICJTdGFydCBZOiI6ICJJbsOtY2lvIFk6IiwKKyAgICAiVGV4dHRvcCI6ICJUZXh0byBubyB0b3BvIiwKKyAgICAiVG9wIjogIlRvcG8iLAorICAgICJUcmFzaCI6ICJMaXhvIiwKKyAgICAiVzoiOiAiQzoiLAorICAgICJXaWR0aDoiOiAiTGFyZ3VyYToiLAorICAgICJYOiI6ICJYOiIsCisgICAgIlk6IjogIlk6IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiQWxpZ246IjogIkFsaW5oYW1lbnRvOiIsCisgICAgICAgICJCb3JkZXIiOiAiQm9yZGEiLAorICAgICAgICAiQm9yZGVyOiI6ICJCb3JkYToiLAorICAgICAgICAiQ29sb3I6IjogIkPDtHI6IiwKKyAgICAgICAgIkRlbGV0ZSBmaWxlPyI6ICJBcGFnYXIgYXJxdWl2bz8iLAorICAgICAgICAiRGVsZXRlIGZvbGRlcj8iOiAiQXBhZ2FyIHBhc3RhPyIsCisgICAgICAgICJEZXNjcmlwdGlvbjoiOiAiRGVzY3Jpw6fDo286IiwKKyAgICAgICAgIkZpbGUgc2F2ZWQuIjogIkFycXVpdm8gZ3JhdmFkby4iLAorICAgICAgICAiRmlsZSB3YXMgbm90IHNhdmVkLiI6ICJBcnF1aXZvIG7Do28gZm9pIHNhbHZvLiIsCisgICAgICAgICJIIFNwYWNlIjogIkVzcGHDp28gaG9yaXouIiwKKyAgICAgICAgIkhlaWdodCI6ICJBbHR1cmEiLAorICAgICAgICAiSW1hZ2UgRmlsZSI6ICJBcnF1aXZvIEltYWdlbSIsCisgICAgICAgICJJbWFnZSBNYW5hZ2VyIjogIkdlcmVuY2lhZG9yIGRlIEltYWdlbnMiLAorICAgICAgICAiSW52YWxpZCBmb2xkZXIgbmFtZSwgcGxlYXNlIGNob29zZSBhbm90aGVyIGZvbGRlciBuYW1lLiI6ICJOb21lIGludsOhbGlkbyBwYXJhIHBhc3RhLCBlc2NvbGhhIG91dHJvIG5vbWUuIiwKKyAgICAgICAgIkxvYWRpbmciOiAiTGVuZG8iLAorICAgICAgICAiTWFyZ2luOiI6ICJNYXJnZW06IiwKKyAgICAgICAgIk5vIEZpbGVzIEZvdW5kIjogIk5lbmh1bSBhcnF1aXZvIGVuY29udHJhZG8iLAorICAgICAgICAiTm8gSW1hZ2Ugc2VsZWN0ZWQuIjogIk5lbmh1bWEgaW1hZ2VtIHNlbGVjaW9uYWRhLiIsCisgICAgICAgICJQYWRkaW5nOiI6ICJFc3Bhw6dhbWVudG86IiwKKyAgICAgICAgIlBsZWFzZSBkZWxldGUgYWxsIGZpbGVzL2ZvbGRlcnMgaW5zaWRlIHRoZSBmb2xkZXIgeW91IHdpc2ggdG8gZGVsZXRlIGZpcnN0LiI6ICJQb3IgZmF2b3IsIHByaW1laXJvIGFwYWd1ZSB0b2RvcyBvcyBhcnF1aXZvcy9wYXN0YXMgZGVudHJvIGRhIHBhc3RhIHF1ZSBkZXNlamEgYXBhZ2FyLiIsCisgICAgICAgICJVcGxvYWQiOiAiRW52aWFyIiwKKyAgICAgICAgIlVwbG9hZDoiOiAiRW52aWFyIGltYWdlbToiLAorICAgICAgICAiVXBsb2FkaW5nLi4uIjogIkVudmlhbmRvLi4uIiwKKyAgICAgICAgIlYgU3BhY2UiOiAiRXNwYcOnbyB2ZXJ0LiIsCisgICAgICAgICJXaWR0aCI6ICJMYXJndXJhIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9yby5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvcm8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJiZmZjZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvcm8uanMKQEAgLTAsMCArMSwyNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJybyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYXNlbGluZSI6ICJCYXNlbGluZSIsCisgICAgIkJvdHRvbSI6ICJKb3MiLAorICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKKyAgICAiSGVpZ2h0OiI6ICLDjm7Eg2zFo2ltZWEiLAorICAgICJMZWZ0IjogIlN0w6JuZ2EiLAorICAgICJNaWRkbGUiOiAiTWlqbG9jIiwKKyAgICAiT0siOiAiQWNjZXB0xIMiLAorICAgICJSaWdodCI6ICJEcmVhcHRhIiwKKyAgICAiVG9wIjogIlN1cyIsCisgICAgIldpZHRoOiI6ICJMxIPFo2ltZSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElNQUdFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9ydS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRiOTA5MgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvcnUuanMKQEAgLTAsMCArMSw4OSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAi0J/QviDQvdC40LbQvdC10Lkg0LPRgNCw0L3QuNGG0LUiLAorICAgICJBYnNtaWRkbGUiOiAi0J/QviDRgdC10YDQtdC00LjQvdC1INGC0LXQutGB0YLQsCIsCisgICAgIkFuZ2xlOiI6ICLQo9Cz0L7QuyIsCisgICAgIkJhc2VsaW5lIjogItCf0L4g0L3QuNC20L3QtdC5INCz0YDQsNC90LjRhtC1INGC0LXQutGB0YLQsCIsCisgICAgIkJvdHRvbSI6ICLQn9C+INC90LjQttC90LXQvNGDINC60YDQsNGOIiwKKyAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgIkNsZWFyIjogItCe0YfQuNGB0YLQuNGC0YwiLAorICAgICJDb25zdHJhaW4gUHJvcG9ydGlvbnMiOiAi0KHQvtGF0YDQsNC90LjRgtGMINC/0YDQvtC/0L7RgNGG0LjQuCIsCisgICAgIkNyb3AiOiAi0J7QsdGA0LXQt9Cw0YLRjCIsCisgICAgIkRpcmVjdG9yeSI6ICLQn9Cw0L/QutCwIiwKKyAgICAiRGlyZWN0b3J5IFVwIjogItCf0LDQv9C60LAg0L3QsNCy0LXRgNGFIiwKKyAgICAiRWRpdCI6ICLQn9GA0LDQstC60LAiLAorICAgICJGaWxlbmFtZToiOiAi0JjQvNGPINGE0LDQudC70LAiLAorICAgICJGbGlwIEhvcml6b250YWwiOiAi0KDQsNC30LLQtdGA0L3Rg9GC0Ywg0L/QviDQs9C+0YDQuNC30L7QvdGC0LDQu9C4IiwKKyAgICAiRmxpcCBJbWFnZSI6ICLQoNCw0LfQstC10YDQvdGD0YLRjCDQutCw0YDRgtC40L3QutGDIiwKKyAgICAiRmxpcCBWZXJ0aWNhbCI6ICLQoNCw0LfQstC10YDQvdGD0YLRjCDQv9C+INCy0LXRgNGC0LjQutCw0LvQuCIsCisgICAgIkZvbGRlciBOYW1lOiI6ICLQndCw0LfQstCw0L3QuNC1INC/0LDQv9C60Lg6IiwKKyAgICAiR0lGIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLCBpbWFnZSBlZGl0aW5nIG5vdCBzdXBwb3J0ZWQuIjogItCk0L7RgNC80LDRgiBHSUYg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPLCDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1INC60LDRgNGC0LjQvdC60Lgg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPLiIsCisgICAgIkhlaWdodDoiOiAi0JLRi9GB0L7RgtCwIiwKKyAgICAiSW1hZ2UgRm9ybWF0IjogItCk0L7RgNC80LDRgiDQutCw0YDRgtC40L3QutC4IiwKKyAgICAiSW5zZXJ0IEltYWdlIjogItCS0YHRgtCw0LLQutCwINC60LDRgNGC0LjQvdC60LgiLAorICAgICJJbnZhbGlkIGJhc2UgZGlyZWN0b3J5OiI6ICLQndC10LLQtdGA0L3QsNGPINCx0LDQt9C+0LLQsNGPINC/0LDQv9C60LA6IiwKKyAgICAiSlBFRyBIaWdoIjogIkpQRUcg0LLRi9GB0L7Qui4iLAorICAgICJKUEVHIExvdyI6ICJKUEVHINC90LjQt9C6LiIsCisgICAgIkpQRUcgTWVkaXVtIjogIkpQRUcg0YHRgNC10LTQvS4iLAorICAgICJMZWZ0IjogItCf0L4g0LvQtdCy0L7QvNGDINC60YDQsNGOIiwKKyAgICAiTG9jayI6ICLQkdC70L7QutC40YDQvtCy0LrQsCIsCisgICAgIk1hcmtlciI6ICLQnNCw0YDQutC10YAiLAorICAgICJNZWFzdXJlIjogItCY0LfQvNC10YDQtdC90LjQtSIsCisgICAgIk1pZGRsZSI6ICLQn9C+0YHRgNC10LTQuNC90LUiLAorICAgICJOZXcgRm9sZGVyIjogItCd0L7QstCw0Y8g0L/QsNC/0LrQsCIsCisgICAgIk5vIEltYWdlIEF2YWlsYWJsZSI6ICLQndC10YIg0LTQvtGB0YLRg9C/0L3Ri9GFINC60LDRgNGC0LjQvdC+0LoiLAorICAgICJObyBJbWFnZXMgRm91bmQiOiAi0JrQsNGA0YLQuNC90L7QuiDQvdC1INC90LDQudC00LXQvdC+IiwKKyAgICAiTm90IHNldCI6ICLQndC1INGD0YHRgtCw0L3QvtCy0LvQtdC90L4iLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAi0KDQsNGB0L/QvtC70L7QttC10L3QuNC1INC40LfQvtCx0YDQsNC20LXQvdC40Y8iLAorICAgICJRdWFsaXR5OiI6ICLQmtCw0YfQtdGB0YLQstC+IiwKKyAgICAiUmVmcmVzaCI6ICLQntCx0L3QvtCy0LjRgtGMIiwKKyAgICAiUmVzaXplIjogItCc0LDRgdGI0LDQsdC40YDQvtCy0LDRgtGMIiwKKyAgICAiUmlnaHQiOiAi0J/QviDQv9GA0LDQstC+0LzRgyDQutGA0LDRjiIsCisgICAgIlJvdGF0ZSI6ICLQn9C+0LLQtdGA0L3Rg9GC0YwiLAorICAgICJSb3RhdGUgSW1hZ2UiOiAi0J/QvtCy0LXRgNC90YPRgtGMINC60LDRgNGC0LjQvdC60YMiLAorICAgICJTYXZlIjogItCh0L7RhdGA0LDQvdC40YLRjCIsCisgICAgIlN0YXJ0IFg6IjogItCd0LDRh9Cw0LvQviBYIiwKKyAgICAiU3RhcnQgWToiOiAi0J3QsNGH0LDQu9C+IFkiLAorICAgICJUZXh0dG9wIjogItCf0L4g0LLQtdGA0YXQvdC10Lkg0LPRgNCw0L3QuNGG0LUg0YLQtdC60YHRgtCwIiwKKyAgICAiVG9wIjogItCf0L4g0LLQtdGA0YXQvdC10LzRgyDQutGA0LDRjiIsCisgICAgIlRyYXNoIjogItCa0L7RgNC30LjQvdCwIiwKKyAgICAiVzoiOiAi0Kg6IiwKKyAgICAiV2lkdGg6IjogItCo0LjRgNC40L3QsCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkFsaWduOiI6ICLQktGL0YDQsNCy0L3QuNCy0LDQvdC40LUiLAorICAgICAgICAiQm9yZGVyIjogItCg0LDQvNC60LAiLAorICAgICAgICAiQm9yZGVyOiI6ICLQoNCw0LzQutCwIiwKKyAgICAgICAgIkNvbG9yOiI6ICLQptCy0LXRgiIsCisgICAgICAgICJEZWxldGUgZmlsZT8iOiAi0KPQtNCw0LvQuNGC0Ywg0YTQsNC50Ls/IiwKKyAgICAgICAgIkRlbGV0ZSBmb2xkZXI/IjogItCj0LTQsNC70LjRgtGMINC/0LDQv9C60YM/IiwKKyAgICAgICAgIkZpbGUgc2F2ZWQuIjogItCk0LDQudC7INGB0L7RhdGA0LDQvdC10L0uIiwKKyAgICAgICAgIkZpbGUgd2FzIG5vdCBzYXZlZC4iOiAi0KTQsNC50Lsg0L3QtSDRgdC+0YXRgNCw0L3QtdC9LiIsCisgICAgICAgICJIIFNwYWNlIjogItCf0L7Qu9C1IEgiLAorICAgICAgICAiSGVpZ2h0IjogItCS0YvRgdC+0YLQsCIsCisgICAgICAgICJJbWFnZSBGaWxlIjogItCk0LDQudC7INC60LDRgNGC0LjQvdC60LgiLAorICAgICAgICAiSW1hZ2UgTWFuYWdlciI6ICLQnNC10L3QtdC00LbQtdGAINC60LDRgNGC0LjQvdC+0LoiLAorICAgICAgICAiSW52YWxpZCBmb2xkZXIgbmFtZSwgcGxlYXNlIGNob29zZSBhbm90aGVyIGZvbGRlciBuYW1lLiI6ICLQndC10L/RgNCw0LLQuNC70YzQvdC+0LUg0LjQvNGPINC/0LDQv9C60LgsINC/0L7QttCw0LvRg9C50YHRgtCwINCy0YvQsdC10YDQuNGC0LUg0LTRgNGD0LPQvtC1LiIsCisgICAgICAgICJMb2FkaW5nIjogItCX0LDQs9GA0YPQt9C60LAiLAorICAgICAgICAiTWFyZ2luOiI6ICLQntGC0YHRgtGD0L8iLAorICAgICAgICAiTm8gSW1hZ2Ugc2VsZWN0ZWQuIjogItCa0LDRgNGC0LjQvdC60Lgg0L3QtSDQstGL0LHRgNCw0L3Riy4iLAorICAgICAgICAiUGFkZGluZzoiOiAi0J/QvtC70Y8iLAorICAgICAgICAiUGxlYXNlIGRlbGV0ZSBhbGwgZmlsZXMvZm9sZGVycyBpbnNpZGUgdGhlIGZvbGRlciB5b3Ugd2lzaCB0byBkZWxldGUgZmlyc3QuIjogItCf0L7QttCw0LvRg9C50YHRgtCwINGD0LTQsNC70LjRgtC1INCy0YHQtSDRhNCw0LnQu9GLL9C/0LDQv9C60Lgg0LIg0L/QsNC/0LrQtSwg0LrQvtGC0L7RgNGD0Y4g0LLRiyDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0YwuIiwKKyAgICAgICAgIlJvdGF0ZSAxODAg0JLCsCI6ICLQn9C+0LLQtdGA0L3Rg9GC0Ywg0L3QsCAxODDCsCIsCisgICAgICAgICJSb3RhdGUgOTAg0JLCsCBDQ1ciOiAi0J/QvtCy0LXRgNC90YPRgtGMINC90LAgOTDCsCDQv9GA0L7RgtC40LIg0YfQsNGB0L7QstC+0LkiLAorICAgICAgICAiUm90YXRlIDkwINCSwrAgQ1ciOiAi0J/QvtCy0LXRgNC90YPRgtGMINC90LAgOTDCsCDQv9C+INGH0LDRgdC+0LLQvtC5IiwKKyAgICAgICAgIlVwbG9hZCI6ICLQl9Cw0LPRgNGD0LfQuNGC0YwiLAorICAgICAgICAiVXBsb2FkaW5nLi4uIjogItCX0LDQs9GA0YPQt9C60LAuLi4iLAorICAgICAgICAiViBTcGFjZSI6ICLQn9C+0LvQtSBWIiwKKyAgICAgICAgIldpZHRoIjogItCo0LjRgNC40L3QsCIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvc2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL3NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZjY1OWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL3NoLmpzCkBAIC0wLDAgKzEsMzAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJzYm90dG9tIjogIkFwc29sdXRubyBkbm8iLAorICAgICJBYnNtaWRkbGUiOiAiQXBzb2x1dG5hIHNyZWRpbmEiLAorICAgICJCYXNlbGluZSI6ICJEb25qYSBsaW5pamEiLAorICAgICJCb3R0b20iOiAiRG5vIiwKKyAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIiwKKyAgICAiSW5zZXJ0IEltYWdlIjogIlViYWNpIHNsaWt1IiwKKyAgICAiTGVmdCI6ICJMZXZvIiwKKyAgICAiTWlkZGxlIjogIlNyZWRpbmEiLAorICAgICJOb3Qgc2V0IjogIk5pamUgcG9zdGF2bGplbm8iLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zdGF2bGphbmplIG92ZSBzbGlrZSIsCisgICAgIlJpZ2h0IjogIkRlc25vIiwKKyAgICAiVGV4dHRvcCI6ICJWcmggdGVrc3RhIiwKKyAgICAiVG9wIjogIlZyaCIsCisgICAgIldpZHRoOiI6ICLFoGlyaW5hIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL3NpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9zaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDIwYzAwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9zaS5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiLAorICAgICJPSyI6ICJWIHJlZHUiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTUFHRU1BTkFHRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvc3IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL3NyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYmYxNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL3NyLmpzCkBAIC0wLDAgKzEsMzAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJzYm90dG9tIjogItCQ0L/RgdC+0LvRg9GC0L3QviDQtNC90L4iLAorICAgICJBYnNtaWRkbGUiOiAi0JDQv9GB0L7Qu9GD0YLQvdCwINGB0YDQtdC00LjQvdCwIiwKKyAgICAiQmFzZWxpbmUiOiAi0JTQvtGa0LAg0LvQuNC90LjRmNCwIiwKKyAgICAiQm90dG9tIjogItCU0L3QviIsCisgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIsCisgICAgIkluc2VydCBJbWFnZSI6ICLQo9Cx0LDRhtC4INGB0LvQuNC60YMiLAorICAgICJMZWZ0IjogItCb0LXQstC+IiwKKyAgICAiTWlkZGxlIjogItCh0YDQtdC00LjQvdCwIiwKKyAgICAiTm90IHNldCI6ICLQndC40ZjQtSDQv9C+0YHRgtCw0LLRmdC10L3QviIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICLQn9C+0YHRgtCw0LLRmdCw0ZrQtSDQvtCy0LUg0YHQu9C40LrQtSIsCisgICAgIlJpZ2h0IjogItCU0LXRgdC90L4iLAorICAgICJUZXh0dG9wIjogItCS0YDRhSDRgtC10LrRgdGC0LAiLAorICAgICJUb3AiOiAi0JLRgNGFIiwKKyAgICAiV2lkdGg6IjogItCo0LjRgNC40L3QsCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElNQUdFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy9zdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTc0YjlhYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvc3YuanMKQEAgLTAsMCArMSwyOSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYXNlbGluZSI6ICJCYXNsaW5qZSIsCisgICAgIkJvdHRvbSI6ICJCb3R0ZW4iLAorICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAiQ2xlYXIiOiAiVMO2bSIsCisgICAgIkNyb3AiOiAiQmVza2rDpHIiLAorICAgICJIZWlnaHQ6IjogIkjDtmpkOiIsCisgICAgIkluc2VydCBJbWFnZSI6ICJJbmZvZ2EgYmlsZCIsCisgICAgIkxlZnQiOiAiVmVuc3RlciIsCisgICAgIk1pZGRsZSI6ICJNaXR0ZW4iLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiQmlsZGVucyBwb3NpdGlvbmVyaW5nIiwKKyAgICAiUmlnaHQiOiAiSMO2Z2VyIiwKKyAgICAiVG9wIjogIsOWdmVya2FudCIsCisgICAgIldpZHRoOiI6ICJCcmVkZDoiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJJbWFnZSBNYW5hZ2VyIjogIkJpbGRiZWhhbmRsYXJlIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvdGguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA3NDU0OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvdGguanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0aCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwKKyAgICAiT0siOiAi4LiV4LiB4Lil4LiHIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL3RyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy90ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWRkMDcwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy90ci5qcwpAQCAtMCwwICsxLDMxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICJTYWx0IGFsdGEiLAorICAgICJBYnNtaWRkbGUiOiAiU2FsdCBvcnRhIiwKKyAgICAiQmFzZWxpbmUiOiAiVGFiYW4gaGl6YXPEsSIsCisgICAgIkJvdHRvbSI6ICJBbHRhIiwKKyAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgIkhlaWdodDoiOiAiWcO8a3Nla2xpayIsCisgICAgIkluc2VydCBJbWFnZSI6ICJSZXNpbSBla2xlIiwKKyAgICAiTGVmdCI6ICJTb2xhIiwKKyAgICAiTWlkZGxlIjogIk9ydGFsYSIsCisgICAgIk5vdCBzZXQiOiAiQXlhcmxhbm1hbcSxxZ8iLAorICAgICJPSyI6ICJUYW1hbSIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUmVzbWkga29udW1sYW5kxLFybWEiLAorICAgICJSaWdodCI6ICJTYcSfYSIsCisgICAgIlRleHR0b3AiOiAiTWV0aW4tw7xzdHRlIiwKKyAgICAiVG9wIjogIll1a2FyxLEiLAorICAgICJXaWR0aDoiOiAiR2VuacWfbGlrOiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElNQUdFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy92bi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvdm4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVjYWNhZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL2xhbmcvdm4uanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ2biIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiSOG7p3kiLAorICAgICJPSyI6ICLEkOG7k25nIMO9IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU1BR0VNQU5BR0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9sYW5nL3poX2NuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy96aF9jbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmE1MjhlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbGFuZy96aF9jbi5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInpoX2NuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElNQUdFTUFOQUdFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbWFuYWdlci5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9tYW5hZ2VyLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjQ3ZGU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbWFuYWdlci5waHAKQEAgLTAsMCArMSwzNjggQEAKKzw/cGhwCisvKioKKyAqIFRoZSBtYWluIEdVSSBmb3IgdGhlIEltYWdlTWFuYWdlci4KKyAqIEBhdXRob3IgJEF1dGhvcjpyYXkgJAorICogQHZlcnNpb24gJElkOm1hbmFnZXIucGhwIDk4NyAyMDA4LTA0LTEyIDEyOjM5OjA0WiByYXkgJAorICogQHBhY2thZ2UgSW1hZ2VNYW5hZ2VyCisgKi8KKworCXJlcXVpcmVfb25jZSgnY29uZmlnLmluYy5waHAnKTsKKwlyZXF1aXJlX29uY2UoJ2RkdC5waHAnKTsKKwlyZXF1aXJlX29uY2UoJ0NsYXNzZXMvSW1hZ2VNYW5hZ2VyLnBocCcpOworCQorCSRtYW5hZ2VyID0gbmV3IEltYWdlTWFuYWdlcigkSU1Db25maWcpOworCSRkaXJzID0gJG1hbmFnZXItPmdldERpcnMoKTsKKworPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKworPGh0bWw+Cis8aGVhZD4KKwk8dGl0bGU+SW5zZXJ0IEltYWdlPC90aXRsZT4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgIC8vIHRlbXBvcmFyeS4gQW4gSW1hZ2VNYW5hZ2VyIHJld3JpdGUgd2lsbCB0YWtlIGNhcmUgb2YgdGhpcyBrbHVkZ2UuCisgICAgX2JhY2tlbmRfdXJsID0gIjw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFja2VuZF91cmwnXTsgPz4iOworICAgIF9yZXNpemVkX3ByZWZpeCA9ICI8P3BocCBlY2hvICRJTUNvbmZpZ1sncmVzaXplZF9wcmVmaXgnXTsgPz4iOworICAgIF9yZXNpemVkX2RpciA9ICI8P3BocCBlY2hvICRJTUNvbmZpZ1sncmVzaXplZF9kaXInXTsgPz4iOworICA8L3NjcmlwdD4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+CisgPGxpbmsgaHJlZj0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+YXNzZXRzL21hbmFnZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vcG9wdXBzL3BvcHVwLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImFzc2V0cy9wb3B1cC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9tb2R1bGVzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmFzc2V0cy9kaWFsb2cuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorLyo8IVtDREFUQVsqLworCWlmKHdpbmRvdy5vcGVuZXIpCisJCVhpbmhhID0gSFRNTEFyZWEgPSB3aW5kb3cub3BlbmVyLlhpbmhhOworCisJdmFyIHRodW1iZGlyID0gIjw/cGhwIGVjaG8gJElNQ29uZmlnWyd0aHVtYm5haWxfZGlyJ107ID8+IjsKKwl2YXIgYmFzZV91cmwgPSAiPD9waHAgZWNobyAkbWFuYWdlci0+Z2V0SW1hZ2VzVVJMKCk7ID8+IjsKKy8qXV0+Ki8KKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+YXNzZXRzL21hbmFnZXIuanMiPjwvc2NyaXB0PgorPD9waHAKKyAgaWYoISRJTUNvbmZpZ1snc2hvd19mdWxsX29wdGlvbnMnXSkKKyAgeworICAgID8+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgICAgIC5mdWxsT3B0aW9ucyB7IHZpc2liaWxpdHk6aGlkZGVuOyB9CisgICAgPC9zdHlsZT4KKyAgICA8P3BocAorICB9Cis/PgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIHN3aXRjaENob29zZXIodG9DaG9vc2VyUGFuZWwpCisgIHsKKyAgICB2YXIgb3VyUGFuZWwgPSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodG9DaG9vc2VyUGFuZWwpOworICAgIGlmKCFvdXJQYW5lbCkgcmV0dXJuIGZhbHNlOyAvLyBDYW4ndCBjaGFuZ2UsIGRvZXNuJ3QgZXhpc3QuCisgICAgCisgICAgLy8gaGlkZSBhbGwgcGFuZWxzCisgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hvb3NlckZpZWxkc2V0JykuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpOworICAgIGZvcihpID0gMDsgaSA8IGQubGVuZ3RoOyBpKyspCisgICAgeworICAgICAgaWYoZFtpXS5jbGFzc05hbWUubWF0Y2goL2Nob29zZXJQYW5lbC8pKQorICAgICAgICBkW2ldLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7ICAgICAgCisgICAgfQorICAgIAorICAgIC8vIHNob3cgb3VycworICAgIG91clBhbmVsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOworICB9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8Zm9ybSBhY3Rpb249Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFja2VuZF91cmwnXSA/PiIgaWQ9InVwbG9hZEZvcm0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+CisKKzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Il9fcGx1Z2luIiB2YWx1ZT0iSW1hZ2VNYW5hZ2VyIiAvPgorPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iX19mdW5jdGlvbiIgdmFsdWU9ImltYWdlcyIgLz4KKworPGZpZWxkc2V0IGlkPSJjaG9vc2VyRmllbGRzZXQiPgorICA8bGVnZW5kPgorICAgIENob29zZSBGcm9tOiAKKyAgICA8c2VsZWN0IG9uY2hhbmdlPSJzd2l0Y2hDaG9vc2VyKHRoaXMub3B0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdLnZhbHVlKSI+CisgICAgPD9waHAKKyAgICAgIGlmKCRJTUNvbmZpZ1snTG9jYWwnXSkKKyAgICAgIHsKKyAgICAgICAgPz4KKyAgICAgICAgPG9wdGlvbiB2YWx1ZT0icGljdHVyZXNDaG9vc2VyIj5UaGlzIFNlcnZlcjwvb3B0aW9uPgorICAgICAgICA8P3BocAorICAgICAgfQorICAgID8+CisgICAgCisgICAgPD9waHAKKyAgICAgIGlmKCRJTUNvbmZpZ1snWW91VHViZSddKQorICAgICAgeworICAgICAgICA/PgorICAgICAgICA8b3B0aW9uIHZhbHVlPSJ5b3V0dWJlQ2hvb3NlciI+WW91VHViZSBWaWRlb3M8L29wdGlvbj4KKyAgICAgICAgPD9waHAKKyAgICAgIH0KKyAgICA/PgorICAgIAorICAgIDw/cGhwCisgICAgICBpZigkSU1Db25maWdbJ0ZsaWNrciddKQorICAgICAgeworICAgICAgICA/PgorICAgICAgICA8b3B0aW9uIHZhbHVlPSJmbGlja3JDaG9vc2VyIj5GbGlja3IgUGljdHVyZXM8L29wdGlvbj4KKyAgICAgICAgPD9waHAKKyAgICAgIH0KKyAgICA/PgorICAgIDwvc2VsZWN0PgorICA8L2xlZ2VuZD4KKyAgICAKKyAgPD9waHAKKyAgICBpZigkSU1Db25maWdbJ0xvY2FsJ10pCisgICAgeworICAgICAgPz4KKyAgPGRpdiBpZD0icGljdHVyZXNDaG9vc2VyIiBjbGFzcz0iY2hvb3NlclBhbmVsIj4KKyAgPHRhYmxlIHdpZHRoPSIxMDAlIj4KKyAgICA8dHI+CisgICAgICA8dGg+PGxhYmVsIGZvcj0iZGlyUGF0aCI+RGlyZWN0b3J5PC9sYWJlbD48L3RoPgorICAgICAgPHRkPgorICAgICAgICA8c2VsZWN0IG5hbWU9ImRpciIgY2xhc3M9ImRpcldpZHRoIiBpZD0iZGlyUGF0aCIgb25jaGFuZ2U9InVwZGF0ZURpcih0aGlzKSI+CisgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iLyI+Lzwvb3B0aW9uPgorICAgICAgICAgIDw/cGhwCisgICAgICAgICAgICBmb3JlYWNoKCRkaXJzIGFzICRyZWxhdGl2ZT0+JGZ1bGxwYXRoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICA/PgorICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8P3BocCBlY2hvIHJhd3VybGVuY29kZSgkcmVsYXRpdmUpOyA/PiI+PD9waHAgZWNobyAkcmVsYXRpdmU7ID8+PC9vcHRpb24+CisgICAgICAgICAgICAgIDw/cGhwCisgICAgICAgICAgICB9CisgICAgICAgICAgPz4KKyAgICAgICAgPC9zZWxlY3Q+CisgICAgICA8L3RkPgorICAgICAgPHRkPgorICAgICAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJqYXZhc2NyaXB0OiBnb1VwRGlyKCk7IiB0aXRsZT0iRGlyZWN0b3J5IFVwIj48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOyA/PmltZy9idG5Gb2xkZXJVcC5naWYiIGhlaWdodD0iMTUiIHdpZHRoPSIxNSIgYWx0PSJEaXJlY3RvcnkgVXAiIC8+PC9hPgorCisgICAgICAgIDw/cGhwCisgICAgICAgICAgaWYoJElNQ29uZmlnWydzYWZlX21vZGUnXSA9PSBmYWxzZSAmJiAkSU1Db25maWdbJ2FsbG93X25ld19kaXInXSkKKyAgICAgICAgICB7CisgICAgICAgICAgICA/PgorICAgICAgICAgICAgPGEgaHJlZj0iIyIgb25jbGljaz0ibmV3Rm9sZGVyKCk7IiB0aXRsZT0iTmV3IEZvbGRlciI+PGltZyBzcmM9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTsgPz5pbWcvYnRuRm9sZGVyTmV3LmdpZiIgaGVpZ2h0PSIxNSIgd2lkdGg9IjE1IiBhbHQ9Ik5ldyBGb2xkZXIiIC8+PC9hPgorICAgICAgICAgICAgPD9waHAKKyAgICAgICAgICB9CisgICAgICAgICAgPz4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8P3BocAorICAgICAgaWYoJElNQ29uZmlnWydhbGxvd191cGxvYWQnXSA9PSBUUlVFKQorICAgICAgeworICAgICAgICA/PgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+VXBsb2FkOjwvdGg+CisgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgorICAgICAgICAgICAgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9InVwbG9hZCIgaWQ9InVwbG9hZCIgLz4KKyAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJVcGxvYWQiIHR5cGU9InN1Ym1pdCIgaWQ9IlVwbG9hZCIgdmFsdWU9IlVwbG9hZCIgb25jbGljaz0iZG9VcGxvYWQoKTsiIC8+CisgICAgICAgICAgPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPD9waHAKKyAgICAgIH0KKyAgICA/PgorCisgIDwvdGFibGU+CisKKyAgPGRpdiBpZD0ibWVzc2FnZXMiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gaWQ9Im1lc3NhZ2UiPjwvc3Bhbj48aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOyA/PmltZy9kb3RzLmdpZiIgd2lkdGg9IjIyIiBoZWlnaHQ9IjEyIiBhbHQ9Ii4uLiIgLz48L2Rpdj4KKworICA8aWZyYW1lIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYWNrZW5kX3VybCddOyA/Pl9fZnVuY3Rpb249aW1hZ2VzIiBuYW1lPSJpbWdNYW5hZ2VyIiBpZD0iaW1nTWFuYWdlciIgY2xhc3M9ImltYWdlRnJhbWUiIHNjcm9sbGluZz0iYXV0byIgdGl0bGU9IkltYWdlIFNlbGVjdGlvbiIgZnJhbWVib3JkZXI9IjAiPjwvaWZyYW1lPgorICA8L2Rpdj4KKyAgPD9waHAKKyAgICB9CisgID8+CisgIAorICA8P3BocAorICAgIGlmKCRJTUNvbmZpZ1snWW91VHViZSddKQorICAgIHsKKyAgICAgID8+CisgICAgICA8ZGl2IGlkPSJ5b3V0dWJlQ2hvb3NlciIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgY2xhc3M9ImNob29zZXJQYW5lbCI+CisgICAgICAgICAgICAKKyAgICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIj4KKyAgICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGg+PGxhYmVsZm9yPSJ5dFVzZXJuYW1lIj5Zb3VUdWJlIFVzZXJuYW1lPC9sYWJlbD48L3RoPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieXRVc2VybmFtZSIgaWQ9Inl0VXNlcm5hbWUiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgCisgICAgICAgICAgICA8dGg+PGxhYmVsZm9yPSJ5dFNlYXJjaCI+S2V5d29yZDwvbGFiZWw+PC90aD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Inl0U2VhcmNoIiBpZD0ieXRTZWFyY2giIC8+CisgICAgICAgICAgICA8L3RkPiAgICAgCisgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJTZWFyY2giIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5dE1hbmFnZXInKS5zcmM9Jzw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFja2VuZF91cmwnXTsgPz5fX2Z1bmN0aW9uPXlvdXR1YmUmeXRTZWFyY2g9Jytkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneXRTZWFyY2gnKS52YWx1ZSsnJnl0VXNlcm5hbWU9Jytkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneXRVc2VybmFtZScpLnZhbHVlOyIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPC90cj4gICAgCisgICAgICAgIDwvdGFibGU+CisgICAgICAKKyAgICAgICAgPGRpdiBpZD0ibWVzc2FnZXMiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gaWQ9Im1lc3NhZ2UiPjwvc3Bhbj48aW1nIFNSQz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOyA/PmltZy9kb3RzLmdpZiIgd2lkdGg9IjIyIiBoZWlnaHQ9IjEyIiBhbHQ9Ii4uLiIgLz48L2Rpdj4KKyAgICAgIAorICAgICAgICA8aWZyYW1lIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYWNrZW5kX3VybCddOyA/Pl9fZnVuY3Rpb249eW91dHViZSIgbmFtZT0ieXRNYW5hZ2VyIiBpZD0ieXRNYW5hZ2VyIiBjbGFzcz0iaW1hZ2VGcmFtZSIgc2Nyb2xsaW5nPSJhdXRvIiB0aXRsZT0iWW91VHViZSBTZWxlY3Rpb24iIGZyYW1lYm9yZGVyPSIwIj48L2lmcmFtZT4KKyAgICAKKyAgICAgIDwvZGl2PgorICAgICAgPD9waHAKKyAgICB9CisgID8+CisgICAgCisgIDw/cGhwCisgICAgaWYoJElNQ29uZmlnWydGbGlja3InXSkKKyAgICB7CisgICAgICByZXF1aXJlX29uY2UoJ0NsYXNzZXMvRmxpY2tyLnBocCcpOworICAgICAgJGxpY3MgPSBmbGlja3JfZ2V0X2xpY2Vuc2VfaWRfYnlfdXNhZ2UoKTsgCisgICAgICA/PgorICAgICAgPGRpdiBpZD0iZmxpY2tyQ2hvb3NlciIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgY2xhc3M9ImNob29zZXJQYW5lbCI+CisgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgICBmdW5jdGlvbiBmbGlja3JfZ28oKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHZhciB1ID0gJzw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFja2VuZF91cmwnXTsgPz5fX2Z1bmN0aW9uPWZsaWNrcic7CisgICAgICAgICAgICB1ICs9ICcmZmxrU2VhcmNoPScgICsgZW5jb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmbGtTZWFyY2gnKS52YWx1ZSk7CisgICAgICAgICAgICB1ICs9ICcmZmxrVXNlcm5hbWU9JysgZW5jb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmbGtVc2VybmFtZScpLnZhbHVlKTsKKyAgICAgICAgICAgIHUgKz0gJyZmbGtMaWNlbnNlPScgKyBlbmNvZGVVUklDb21wb25lbnQoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmbGtMaWNlbnNlJykub3B0aW9uc1tkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmxrTGljZW5zZScpLnNlbGVjdGVkSW5kZXhdLnZhbHVlICk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmbGtNYW5hZ2VyJykuc3JjPSB1OyAgICAgICAgICAgIAorICAgICAgICAgIH0KKyAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSI+CisgICAgICAgICAgPHRyPgorICAgICAgICAgICAgPHRoPjxsYWJlbGZvcj0ieXRVc2VybmFtZSI+RmxpY2tyIFVzZXJuYW1lL0VtYWlsPC9sYWJlbD48L3RoPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZmxrVXNlcm5hbWUiIGlkPSJmbGtVc2VybmFtZSIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAKKyAgICAgICAgICAgIDx0aD48bGFiZWxmb3I9Inl0U2VhcmNoIj5LZXl3b3JkPC9sYWJlbD48L3RoPgorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZmxrU2VhcmNoIiBpZD0iZmxrU2VhcmNoIiAvPgorICAgICAgICAgICAgPC90ZD4gICAgIAorICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iU2VhcmNoIiBvbmNsaWNrPSJmbGlja3JfZ28oKTsiIC8+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgIDwvdHI+ICAgIAorICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0aD5Vc2FnZSBSZXN0cmljdGlvbjo8L3RoPgorICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgorICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImZsa0xpY2Vuc2UiIGlkPSJmbGtMaWNlbnNlIiAgb25jaGFuZ2U9ImZsaWNrcl9nbygpOyI+CisgICAgICAgICAgICAgICAgPD9waHAKKyAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGxpY3MgYXMgJHVzYWdlID0+ICRsaWNpZCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgPz4KKyAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPD9waHAgZWNobyAkbGljaWQgPz4iIDw/cGhwIGlmKGZsaWNrcl9pc19kZWZhdWx0X2xpY2Vuc2UoJGxpY2lkKSkgZWNobyAnc2VsZWN0ZWQ9InNlbGVjdGVkIicgPz4+IDw/cGhwIGVjaG8gJGxpY2lkID8+IDw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkdXNhZ2UpID8+PC9saT4KKyAgICAgICAgICAgICAgICAgICAgPD9waHAKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICA/PgorICAgICAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAgICAgIDwvdGQ+ICAgICAgICAgCisgICAgICAgICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2ZsaWNrci5jb20vIiB0YXJnZXQ9Il9ibGFuayI+ZmxpY2tyLmNvbTwvYT48L3RkPgorICAgICAgICAgIDwvdHI+CisgICAgICAgIDwvdGFibGU+CisgICAgICAKKyAgICAgICAgPGRpdiBpZD0ibWVzc2FnZXMiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gaWQ9Im1lc3NhZ2UiPjwvc3Bhbj48aW1nIFNSQz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOyA/PmltZy9kb3RzLmdpZiIgd2lkdGg9IjIyIiBoZWlnaHQ9IjEyIiBhbHQ9Ii4uLiIgLz48L2Rpdj4KKyAgICAgIAorICAgICAgICA8aWZyYW1lIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYWNrZW5kX3VybCddOyA/Pl9fZnVuY3Rpb249ZmxpY2tyIiBuYW1lPSJmbGtNYW5hZ2VyIiBpZD0iZmxrTWFuYWdlciIgY2xhc3M9ImltYWdlRnJhbWUiIHNjcm9sbGluZz0iYXV0byIgdGl0bGU9IkZsaWNrciBTZWxlY3Rpb24iIGZyYW1lYm9yZGVyPSIwIj48L2lmcmFtZT4KKyAgICAKKyAgICAgIDwvZGl2PgorICAgICAgPD9waHAKKyAgICB9CisgID8+Cis8L2ZpZWxkc2V0PgorCis8IS0tIGltYWdlIHByb3BlcnRpZXMgLS0+CisKKzx0YWJsZSAgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KKyAgPHRyPgorICAgIDx0aCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPkRlc2NyaXB0aW9uOjwvdGg+CisgICAgPHRkIGNvbHNwYW49IjYiPgorICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJmX2FsdCIgc3R5bGU9IndpZHRoOjk1JSIvPgorICAgIDwvdGQ+CisgICAgPHRkIHJvd3NwYW49IjQiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIiBzdHlsZT0idmVydGljYWwtYWxpZ246IG1pZGRsZTsiIHN0eWxlPSJwYWRkaW5nOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNDQ0M7Ym9yZGVyOjFweCBpbnNldDsiPgorICAgICAgPGltZyBzcmM9IiIgaWQ9ImZfcHJldmlldyIgLz4KKyAgICA8L3RkPgorICA8L3RyPgorCisgIDx0cj4KKyAgICA8dGggc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij5XaWR0aDo8L3RoPgorICAgIDx0ZCA+CisgICAgICA8aW5wdXQgaWQ9ImZfd2lkdGgiIHR5cGU9InRleHQiIG5hbWU9ImZfd2lkdGgiIHNpemU9IjQiIG9uY2hhbmdlPSJqYXZhc2NyaXB0OmNoZWNrQ29uc3RyYWlucygnd2lkdGgnKTsiIC8+CisgICAgPC90ZD4KKyAgICA8dGQgcm93c3Bhbj0iMiI+CisgICAgICA8ZGl2ICBzdHlsZT0icG9zaXRpb246cmVsYXRpdmUiPgorICAgICAgICA8aW1nIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOyA/PmltZy9sb2NrZWQuZ2lmIiBpZD0iaW1nTG9jayIgd2lkdGg9IjI1IiBoZWlnaHQ9IjMyIiBhbHQ9IkNvbnN0cmFpbmVkIFByb3BvcnRpb25zIiBzdHlsZT0idmVydGljYWwtYWxpZ246IG1pZGRsZTsiIC8+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29uc3RyYWluX3Byb3AiIGNoZWNrZWQ9ImNoZWNrZWQiIG9uY2xpY2s9ImphdmFzY3JpcHQ6dG9nZ2xlQ29uc3RyYWlucyh0aGlzKTsiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6OHB4O2xlZnQ6MHB4OyIgdmFsdWU9Im9uIiAvPgorICAgICAgPC9kaXY+CisgICAgPC90ZD4KKyAgICA8dGggc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7IiBjbGFzcz0iZnVsbE9wdGlvbnMiPk1hcmdpbjo8L3RoPgorICAgIDx0ZCBjb2xzcGFuPSIzIiBjbGFzcz0iZnVsbE9wdGlvbnMiPgorICAgIDw/cGhwCisgICAgICBpZihAJElNQ29uZmlnWydVc2VIU3BhY2VWU3BhY2UnXSkKKyAgICAgIHsKKyAgICAgICAgPz4KKyAgICAgICAgICA8aW5wdXQgbmFtZT0iZl9oc3BhY2UiIHR5cGU9InRleHQiIGlkPSJmX2hzcGFjZSIgc2l6ZT0iMyIgLz4KKyAgICAgICAgeCA8aW5wdXQgbmFtZT0iZl92c3BhY2UiIHR5cGU9InRleHQiIGlkPSJmX3ZzcGFjZSIgc2l6ZT0iMyIgLz4gCisgICAgICAgIDw/cGhwCisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgID8+CisgICAgICAgIDxpbnB1dCBuYW1lPSJmX21hcmdpbiIgdHlwZT0idGV4dCIgaWQ9ImZfbWFyZ2luIiBzaXplPSIzIiAvPgorICAgICAgICA8P3BocAorICAgICAgfQorICAgID8+ICAgICAgCisgICAgICBweCA8L3RkPgorICA8L3RyPgorCisgIDx0cj4KKyAgICA8dGggc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij5IZWlnaHQ6PC90aD4KKyAgICA8dGQ+CisgICAgICA8aW5wdXQgbmFtZT0iZl9oZWlnaHQiIHR5cGU9InRleHQiIGlkPSJmX2hlaWdodCIgc2l6ZT0iNCIgLz4KKyAgICA8L3RkPgorICAgIDx0aCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiIGNsYXNzPSJmdWxsT3B0aW9ucyI+UGFkZGluZzo8L3RoPgorICAgIDx0ZCAgY2xhc3M9ImZ1bGxPcHRpb25zIj4KKyAgICAgIDxpbnB1dCBuYW1lPSJmX3BhZGRpbmciIHR5cGU9InRleHQiIGlkPSJmX3BhZGRpbmciIHNpemU9IjMiIC8+CisgICAgICBweCA8L3RkPgorICAgIDx0aCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiIGNsYXNzPSJmdWxsT3B0aW9ucyI+Q29sb3I6PC90aD4KKyAgICA8dGQgIGNsYXNzPSJmdWxsT3B0aW9ucyI+CisgICAgICA8aW5wdXQgbmFtZT0iZl9iYWNrZ3JvdW5kQ29sb3IiIHR5cGU9InRleHQiIGlkPSJmX2JhY2tncm91bmRDb2xvciIgc2l6ZT0iNyIgLz4KKyAgICAgCisgICAgPC90ZD4KKyAgPC90cj4KKworCisgIDx0ciBjbGFzcz0iZnVsbE9wdGlvbnMiPgorICAgIDx0aCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPkFsaWdubWVudDo8L3RoPgorICAgIDx0ZCBjb2xzcGFuPSIyIj4KKyAgICAgIDxzZWxlY3Qgc2l6ZT0iMSIgaWQ9ImZfYWxpZ24iIHRpdGxlPSJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIj4KKyAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPk5vdCBzZXQ8L29wdGlvbj4KKyAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibGVmdCIgICAgICAgICAgICAgICAgICAgICAgICAgPkxlZnQ8L29wdGlvbj4KKyAgICAgICAgPG9wdGlvbiB2YWx1ZT0icmlnaHQiICAgICAgICAgICAgICAgICAgICAgICAgPlJpZ2h0PC9vcHRpb24+CisgICAgICAgIDxvcHRpb24gdmFsdWU9InRleHR0b3AiICAgICAgICAgICAgICAgICAgICAgID5UZXh0dG9wPC9vcHRpb24+CisgICAgICAgIDxvcHRpb24gdmFsdWU9ImFic21pZGRsZSIgICAgICAgICAgICAgICAgICAgID5BYnNtaWRkbGU8L29wdGlvbj4KKyAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYmFzZWxpbmUiIHNlbGVjdGVkPSJzZWxlY3RlZCIgPkJhc2VsaW5lPC9vcHRpb24+CisgICAgICAgIDxvcHRpb24gdmFsdWU9ImFic2JvdHRvbSIgICAgICAgICAgICAgICAgICAgID5BYnNib3R0b208L29wdGlvbj4KKyAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYm90dG9tIiAgICAgICAgICAgICAgICAgICAgICAgPkJvdHRvbTwvb3B0aW9uPgorICAgICAgICA8b3B0aW9uIHZhbHVlPSJtaWRkbGUiICAgICAgICAgICAgICAgICAgICAgICA+TWlkZGxlPC9vcHRpb24+CisgICAgICAgIDxvcHRpb24gdmFsdWU9InRvcCIgICAgICAgICAgICAgICAgICAgICAgICAgID5Ub3A8L29wdGlvbj4KKyAgICAgIDwvc2VsZWN0PgorICAgIDwvdGQ+CisgICAgPHRoIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+Qm9yZGVyOjwvdGg+CisgICAgPHRkPgorICAgICAgPGlucHV0IG5hbWU9ImZfYm9yZGVyIiB0eXBlPSJ0ZXh0IiBpZD0iZl9ib3JkZXIiIHNpemU9IjMiIC8+CisgICAgICBweCA8L3RkPgorICAgIDx0aCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPkNvbG9yOjwvdGg+CisgICAgPHRkPgorICAgICAgPGlucHV0IG5hbWU9ImZfYm9yZGVyQ29sb3IiIHR5cGU9InRleHQiIGlkPSJmX2JvcmRlckNvbG9yIiBzaXplPSI3IiAvPgorICAgICAgCisgICAgPC90ZD4KKyAgPC90cj4KKworPC90YWJsZT4KKworPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij4KKyAgPGhyIC8+CisgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnV0dG9ucyIgb25jbGljaz0icmV0dXJuIHJlZnJlc2goKTsiPlJlZnJlc2g8L2J1dHRvbj4KKyAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b25zIiBvbmNsaWNrPSJyZXR1cm4gb25PSygpOyI+T0s8L2J1dHRvbj4KKyAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b25zIiBvbmNsaWNrPSJyZXR1cm4gb25DYW5jZWwoKTsiPkNhbmNlbDwvYnV0dG9uPgorPC9kaXY+CisKKzwhLS0vLyBpbWFnZSBwcm9wZXJ0aWVzIC0tPgorPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9Im9yZ2luYWxfd2lkdGgiIC8+Cis8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0ib3JnaW5hbF9oZWlnaHQiIC8+Cis8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iZl91cmwiIGNsYXNzPSJsYXJnZWxXaWR0aCIgdmFsdWU9IiIgLz4KKzwvZm9ybT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL25ld0ZvbGRlci5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvbmV3Rm9sZGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y2YzM4YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL25ld0ZvbGRlci5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4NCis8aHRtbD4NCis8aGVhZD4NCis8dGl0bGU+TmV3IEZvbGRlcjwvdGl0bGU+DQorIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL3BvcHVwcy9wb3B1cC5qcyI+PC9zY3JpcHQ+DQorIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQorIC8qPCFbQ0RBVEFbKi8NCisgaHRtbCwgYm9keSB7ICBiYWNrZ3JvdW5kLWNvbG9yOiBCdXR0b25GYWNlOyAgY29sb3I6IEJ1dHRvblRleHQ7IGZvbnQ6IDExcHggVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwO30NCitib2R5IHsgcGFkZGluZzogNXB4OyB9DQorIC50aXRsZSB7IGJhY2tncm91bmQtY29sb3I6ICNkZGY7IGNvbG9yOiAjMDAwOyBmb250LXdlaWdodDogYm9sZDsgZm9udC1zaXplOiAxMjAlOyBwYWRkaW5nOiAzcHggMTBweDsgbWFyZ2luLWJvdHRvbTogMTBweDsgYm9yZGVyLWJvdHRvbTogMXB4ICBzb2xpZCBibGFjazsgbGV0dGVyLXNwYWNpbmc6IDJweDt9DQorc2VsZWN0LCBpbnB1dCwgYnV0dG9uIHsgZm9udDogMTFweCBUYWhvbWEsVmVyZGFuYSxzYW5zLXNlcmlmOyB9DQorLmJ1dHRvbnMgeyB3aWR0aDogNzBweDsgdGV4dC1hbGlnbjogY2VudGVyOyB9DQorZm9ybSB7IHBhZGRpbmc6IDBweDsgIG1hcmdpbjogMDt9DQorZm9ybSAuZWxlbWVudHN7DQorCXBhZGRpbmc6IDEwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsNCit9DQorIC8qXV0+Ki8NCisgPC9zdHlsZT4NCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJhc3NldHMvcG9wdXAuanMiPjwvc2NyaXB0Pg0KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCisvKjwhW0NEQVRBWyovDQorCXdpbmRvdy5yZXNpemVUbygzMDAsIDE2MCk7DQorDQorICAgIGlmKHdpbmRvdy5vcGVuZXIpDQorICAgICAgICBIVE1MQXJlYSA9IHdpbmRvdy5vcGVuZXIuSFRNTEFyZWE7DQorDQorCWluaXQgPSBmdW5jdGlvbiAoKQ0KKwl7DQorCQlfX2RsZ19pbml0KCk7DQorCQlfX2RsZ190cmFuc2xhdGUoJ0ltYWdlTWFuYWdlcicpOw0KKwkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfZm9sZGVybmFtZSIpLmZvY3VzKCk7DQorCX07DQorDQorCWZ1bmN0aW9uIG9uQ2FuY2VsKCkNCisJew0KKwkJX19kbGdfY2xvc2UobnVsbCk7DQorCQlyZXR1cm4gZmFsc2U7DQorCX0NCisNCisJZnVuY3Rpb24gb25PSygpDQorCXsNCisJCSAvLyBwYXNzIGRhdGEgYmFjayB0byB0aGUgY2FsbGluZyB3aW5kb3cNCisJICB2YXIgZmllbGRzID0gWyJmX2ZvbGRlcm5hbWUiXTsNCisJICB2YXIgcGFyYW0gPSBuZXcgT2JqZWN0KCk7DQorCSAgZm9yICh2YXIgaSBpbiBmaWVsZHMpIHsNCisJCXZhciBpZCA9IGZpZWxkc1tpXTsNCisJCXZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsNCisJCXBhcmFtW2lkXSA9IGVsLnZhbHVlOw0KKwkgIH0NCisJICBfX2RsZ19jbG9zZShwYXJhbSk7DQorCSAgcmV0dXJuIGZhbHNlOw0KKwl9DQorDQorCWZ1bmN0aW9uIGFkZEV2ZW50KG9iaiwgZXZUeXBlLCBmbikNCisJew0KKwkJaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7IG9iai5hZGRFdmVudExpc3RlbmVyKGV2VHlwZSwgZm4sIHRydWUpOyByZXR1cm4gdHJ1ZTsgfQ0KKwkJZWxzZSBpZiAob2JqLmF0dGFjaEV2ZW50KSB7ICB2YXIgciA9IG9iai5hdHRhY2hFdmVudCgib24iK2V2VHlwZSwgZm4pOyAgcmV0dXJuIHI7ICB9DQorCQllbHNlIHsgIHJldHVybiBmYWxzZTsgfQ0KKwl9DQorDQorCWFkZEV2ZW50KHdpbmRvdywgJ2xvYWQnLCBpbml0KTsNCisvLy0tPg0KKzwvc2NyaXB0Pg0KKzwvaGVhZD4NCis8Ym9keSA+DQorPGRpdiBjbGFzcz0idGl0bGUiPk5ldyBGb2xkZXI8L2Rpdj4NCis8Zm9ybSBhY3Rpb249IiI+DQorPGRpdiBjbGFzcz0iZWxlbWVudHMiPg0KKwk8bGFiZWwgZm9yPSJmX2ZvbGRlcm5hbWUiPkZvbGRlciBOYW1lOjwvbGFiZWw+DQorCTxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZl9mb2xkZXJuYW1lIiAvPg0KKzwvZGl2Pg0KKzxkaXYgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+DQorCSAgPGhyIC8+DQorCSAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b25zIiBvbmNsaWNrPSJyZXR1cm4gb25PSygpOyI+T0s8L2J1dHRvbj4NCisJICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ1dHRvbnMiIG9uY2xpY2s9InJldHVybiBvbkNhbmNlbCgpOyI+Q2FuY2VsPC9idXR0b24+DQorPC9kaXY+DQorPC9mb3JtPg0KKzwvYm9keT4NCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvcmVzaXplci5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9yZXNpemVyLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODJlYzFiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvcmVzaXplci5waHAKQEAgLTAsMCArMSw4OCBAQAorPD9waHAKK2hlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9VVRGLTgnKTsKKworLyoqCisgKiBSZXNpemUgaW1hZ2VzIHRvIGEgZ2l2ZW4gc2l6ZSwgYW5kIHNhdmluZyBpbiBhIG5ldyBmaWxlLgorICogcmVzaXplLnBocD9pbWc9L3JlbGF0aXZlL3BhdGgvdG8vaW1hZ2UuanBnJndpZHRoPTxwaXhlbHM+JmhlaWdodD08cGl4ZWxzPlsmdG89L3JlbGF0aXZlL3BhdGgvdG8vbmV3aW1hZ2UuanBnXQorICogcmVsYXRpdmUgdG8gdGhlIGJhc2VfZGlyIGdpdmVuIGluIGNvbmZpZy5pbmMucGhwCisgKiBUaGlzIGlzIHByZXR0eSBtdWNoIGp1c3QgdGh1bWJzLnBocCB3aXRoIHNvbWUgbW9kcywgSSdtIHRvbyBsYXp5IHRvIGRvIGl0IHByb3Blcmx5CisgKiBAYXV0aG9yICRBdXRob3I6cmF5ICQKKyAqIEB2ZXJzaW9uICRJZDpyZXNpemVyLnBocCA5MjIgMjAwNy0xMi0zMCAxNDozNTo0NlogcmF5ICQKKyAqIEBwYWNrYWdlIEltYWdlTWFuYWdlcgorICovCisKK3JlcXVpcmVfb25jZSgnY29uZmlnLmluYy5waHAnKTsKK3JlcXVpcmVfb25jZSgnQ2xhc3Nlcy9JbWFnZU1hbmFnZXIucGhwJyk7CityZXF1aXJlX29uY2UoJ0NsYXNzZXMvVGh1bWJuYWlsLnBocCcpOworCitmdW5jdGlvbiBqc19mYWlsKCRtZXNzYWdlKSAgICB7IGVjaG8gJ2FsZXJ0KFwnJyAuICRtZXNzYWdlIC4gJ1wnKTsgZmFsc2UnOyBleGl0OyAgIH0KK2Z1bmN0aW9uIGpzX3N1Y2Nlc3MoJHJlc3VsdEZpbGUpICAgIHsgZWNobyAnXCcnIC4gJHJlc3VsdEZpbGUgLiAnXCcnOyBleGl0OyAgIH0KKworLy9jaGVjayBmb3IgaW1nIHBhcmFtZXRlciBpbiB0aGUgdXJsCitpZighaXNzZXQoJF9HRVRbJ2ltZyddKSB8fCAhaXNzZXQoJF9HRVRbJ3dpZHRoJ10pIHx8ICFpc3NldCgkX0dFVFsnaGVpZ2h0J10pKQoreworICBqc19mYWlsKCdNaXNzaW5nIHBhcmFtZXRlci4nKTsKK30KKworaWYoJElNQ29uZmlnWydyZXNpemVfZmlsZXMnXSA9PSBGQUxTRSkKK3sKKyAganNfc3VjY2VzcygkX0dFVFsnaW1nJ10pOworfQorCiskbWFuYWdlciA9IG5ldyBJbWFnZU1hbmFnZXIoJElNQ29uZmlnKTsKKworLy9nZXQgdGhlIGltYWdlIGFuZCB0aGUgZnVsbCBwYXRoIHRvIHRoZSBpbWFnZQorJGltYWdlID0gJF9HRVRbJ2ltZyddOworJGZ1bGxwYXRoID0gRmlsZXM6Om1ha2VGaWxlKCRtYW5hZ2VyLT5nZXRJbWFnZXNEaXIoKSwkaW1hZ2UpOworCisvL25vdCBhIGZpbGUsIHNvIGV4aXQKK2lmKCFpc19maWxlKCRmdWxscGF0aCkpCit7CisgIGpzX2ZhaWwoIkZpbGUgeyRmdWxscGF0aH0gZG9lcyBub3QgZXhpc3QuIik7Cit9CisKKyRpbWdJbmZvID0gQGdldEltYWdlU2l6ZSgkZnVsbHBhdGgpOworCisvL05vdCBhbiBpbWFnZSwgYmFpbCBvdXQuCitpZighaXNfYXJyYXkoJGltZ0luZm8pKQoreworCWpzX2ZhaWwoIkZpbGUgeyRmdWxscGF0aH0gaXMgbm90IGFuIGltYWdlLiIpOworfQorCitpZighaXNzZXQoJF9HRVRbJ3RvJ10pKQoreworICAkcmVzaXplZCAgICA9ICRtYW5hZ2VyLT5nZXRSZXNpemVkTmFtZSgkZnVsbHBhdGgsJF9HRVRbJ3dpZHRoJ10sJF9HRVRbJ2hlaWdodCddKTsKKyAgJF9HRVRbJ3RvJ10gPSAkbWFuYWdlci0+Z2V0UmVzaXplZE5hbWUoJGltYWdlLCRfR0VUWyd3aWR0aCddLCRfR0VUWydoZWlnaHQnXSwgRkFMU0UpOworfQorZWxzZQoreworICAkcmVzaXplZCA9IEZpbGVzOjptYWtlRmlsZSgkbWFuYWdlci0+Z2V0SW1hZ2VzRGlyKCksJF9HRVRbJ3RvJ10pOworfQorCisvLyBDaGVjayB0byBzZWUgaWYgaXQgYWxyZWFkeSBleGlzdHMKK2lmKGlzX2ZpbGUoJHJlc2l6ZWQpKQoreworCS8vIEFuZCBpcyBuZXdlcgorCWlmKGZpbGVtdGltZSgkcmVzaXplZCkgPj0gZmlsZW10aW1lKCRmdWxscGF0aCkpCisJeworCQlqc19zdWNjZXNzKCRfR0VUWyd0byddKTsKKwl9Cit9CisKKworCisvLyByZXNpemUgKHRodW1ibmFpbGVyIHdpbGwgZG8gdGhpcyBmb3IgdXMganVzdCBmaW5lKQorJHRodW1ibmFpbGVyID0gbmV3IFRodW1ibmFpbCgkX0dFVFsnd2lkdGgnXSwkX0dFVFsnaGVpZ2h0J10pOworJHRodW1ibmFpbGVyLT5wcm9wb3J0aW9uYWwgPSBGQUxTRTsKKyR0aHVtYm5haWxlci0+Y3JlYXRlVGh1bWJuYWlsKCRmdWxscGF0aCwgJHJlc2l6ZWQpOworCisvLyBkaWQgaXQgd29yaz8KK2lmKGlzX2ZpbGUoJHJlc2l6ZWQpKQoreworCWpzX3N1Y2Nlc3MoJF9HRVRbJ3RvJ10pOworfQorZWxzZQoreworCWpzX2ZhaWwoIlJlc2l6ZSBGYWlsZWQuIik7Cit9Cis/PgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvc21hcnQtaW1hZ2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9zbWFydC1pbWFnZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTE5MTZkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvc21hcnQtaW1hZ2UuanMKQEAgLTAsMCArMSw4MzggQEAKKworLyoqIFRoZSBJbWFnZU1hbmFnZXIgcGx1Z2luIGhhcyB0aGUgY2FwYWJpbGl0eSB0byBhbHNvIHNlbGVjdCBvdGhlciB0aGluZ3MgYW5kIHJlcHJlc2VudCB0aGVtIGFzIGltYWdlcy4KKyAqICBGb3IgZXhhbXBsZSwgaXQgY2FuIHNlbGVjdCBZb3VUdWJlIHZpZGVvcywgYW5kIHRoZSBpbWFnZSBpdCByZXR1cm5zIHdpbGwgYmUgdGhlICJsYXJnZSBzaXplIHRodW1ibmFpbCIKKyAqICBvZiB0aGUgdmlkZW8gd2hpY2ggWW91VHViZSBwcm92aWRlcywgYWxvbmcgd2l0aCBzb21lICJtZXRhIGluZm9ybWF0aW9uIiB3aGljaCBpcyBzdG9yZWQgYXMgYSBxdWVyeSBzdHJpbmcKKyAqICBvbiB0aGUgZW5kIG9mIHRoZSBpbWFnZSBVUkwuCisgKgorICogIEZvciBleGFtcGxlLCBhIFlvdVR1YmUgdmlkZW8gdXJsIHJldHVybmVkIGJ5IEltYWdlTWFuYWdlciBtYXkgbG9vayBsaWtlIHRoaXMgKEkndmUgaW5zZXJ0ZWQgbmV3bGluZXMgaGVyZSk6CisgKiAgIGh0dHA6Ly9pbWcueW91dHViZS5jb20vdmkvX2N0QnNaSm1QdjgvMC5qcGcKKyAqICAgICA/eC1zaG9ja3dhdmUtZmxhc2g9aHR0cCUzQSUyRiUyRnd3dy55b3V0dWJlLmNvbSUyRnYlMkZfY3RCc1pKbVB2OAorICogICAgICZ4LXRodW1ibmFpbD1odHRwJTNBJTJGJTJGaW1nLnlvdXR1YmUuY29tJTJGdmklMkZfY3RCc1pKbVB2OCUyRjMuanBnCisgKiAgICAgJmZfYWx0PUNBVyUyMFNwb3J0Y3J1aXNlciUyMFpLLUpCWiUyMGRvZXMlMjBhJTIwdG91Y2glMjBhbmQlMjBnbyUyMGF0JTIwVGlyb2hpYQorICogICAgICZmX3dpZHRoPTMyMAorICogICAgICZmX2hlaWdodD0yNDAKKyAqCisgKiAgSXQgc2hvdWxkIGJlIGNsZWFyIHdoYXQgdGhlIG1ldGEgaW5mb3JtYXRpb24gYWxsIG1lYW5zLgorICoKKyAqICBUaGUgam9iIG9mIFNtYXJ0SW1hZ2VzIGlzIHRvIGxvb2sgdGhyb3VnaCB0aGUgcGFnZSB3aGVyZSB5b3UgT1VUUFVUICh1c2UpIHRoZSBzdHVmZiB5b3UgZWRpdGVkIHdpdGgKKyAqICBYaW5oYS9JbWFnZU1hbmFnZXIvSW1hZ2VQaWNrZXIgZmluZCBpbWFnZXMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbWV0YSBpbmZvcm1hdGlvbiwgYW5kIHJlcGxhY2UgdGhlbSAKKyAqICB3aXRoIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIGltYWdlIChpbiB0aGlzIGNhc2UsIGl0IHdvdWxkIHJlcGxhY2UgaXQgd2l0aCB0aGUgWW91VHViZSB2aWRlbyBvZiBjb3Vyc2UpLgorICoKKyAqICBSRVBFQVQ6IFlvdSBuZWVkIHRvIHVzZSBTbWFydEltYWdlcyAob3IgbWFrZSB5b3VyIG93biBhbHRlcm5hdGl2ZSkgb24gdGhlIHBhZ2Uocykgd2hlcmUgeW91IE9VVFBVVCAodXNlKSAKKyAqICB0aGUgY29udGVudCB5b3UgZWRpdGVkIHdpdGggWGluaGEvSW1hZ2VNYW5hZ2VyL0ltYWdlUGlja2VyLiAgSWYgeW91IGRvbid0LCB3ZWxsLCB5b3UganVzdCBnZXQgdG8gc2VlIGEgCisgKiAgc3RhdGljIGltYWdlLCBpbnN0ZWFkIG9mIHRoZSB2aWRlbyAoYXMgd2lsbCBhbnlib2R5IHdpdGggSlMgdHVybmVkIG9mZiBldGMsIHdoaWNoIGlzIHF1aXRlIHRoZSBib251cyByZWFsbHkhKQorICoKKyAqICBFeGFtcGxlIFVzYWdlOgorICogICAgPGhlYWQ+CisgKiAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii94aW5oYS9wbHVnaW5zL0ltYWdlTWFuYWdlci9zbWFydC1pbWFnZS5qcyI+PC9zY3JpcHQ+ICAgICAgCisgKiAgICA8L2hlYWQ+CisgKiAgICA8Ym9keSBvbmxvYWQ9IlNtYXJ0SW1hZ2VzLnJlcGxhY2VfYWxsKCk7Ij4KKyAqIAorICogIElmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBmYW5jeSB3aXRoIHlvdXR1YmUvZmxhc2ggc21hcnQgaW1hZ2VzLCBjaGVjayBvdXQgdGhlIFNtYXJ0SW1hZ2VzLnJlcGxhY2VfZmxhc2gKKyAqICBtZXRob2QgYmVsb3cgd2hlcmUgeW91IGNhbiBzcGVjaWZ5IGRpbWVuc2lvbnMsIGJhY2tncm91bmQgY29sb3VyLCBwYXNzIGRhdGEgdG8gdGhlIGZsYXNoLCBhbmQgc2V0IGF0dHJpYnV0ZXMKKyAqICBvbiB0aGUgcmVzdWx0aW5nIG9iamVjdC9lbWJlZC4KKyAqCisgKiBAYXV0aG9yICRBdXRob3I6IGdvZ28gJAorICogQHZlcnNpb24gJElkOiBpbWFnZS1tYW5hZ2VyLmpzIDg1NiAyMDA3LTA2LTEzIDE4OjM0OjM0WiB3eW1zeSAkCisgKiBAcGFja2FnZSBJbWFnZU1hbmFnZXIgCisgKi8gIAorCit2YXIgU21hcnRJbWFnZXMgPSAKK3sKKyAgX2ZsYXNoX21ldGFfcmU6ICBuZXcgUmVnRXhwKC9cPy4qKHgtc2hvY2t3YXZlLWZsYXNoKT0oW14mXSspLyksCisgIF9mbGlja3JfbWV0YV9yZTogbmV3IFJlZ0V4cCgvXD8uKih4LWZsaWNrci1waG90byk9KFteJl0rKS8pLAorICAvKiogUmVwbGFjZSBhbiBpbWFnZSB3aGljaCBoYXMgZXh0YSBtZXRhIGluZm9ybWF0aW9uIG9uIHRoZSBxdWVyeSBzdHJpbmcgCisgICAqICAoZnJvbSBzZWxlY3RpbmcgYSB2aWRlbyBmcm9tIHlvdXR1YmUgd2l0aCB0aGUgaW1hZ2UgbWFuYWdlci9waWNrZXIpCisgICAqICB3aXRoIHRoZSBmbGFzaCB2aWRlbyByZWZlcmVuY2VkIGluIHRoYXQgZGF0YS4KKyAgICoKKyAgICogIEBwYXJhbSBFbGVtZW50fG51bGwgSW1hZ2UgZWxlbWVudCwgb3IgbnVsbCB0byByZXBsYWNlIGFsbCBpbWFnZXMKKyAgICogICAgIHdoaWNoIGhhdmUgdGhlIG1ldGEgZGF0YS4KKyAgICogIEBwYXJhbSBPYmplY3R8bnVsbCAgQW4gb2JqZWN0IG9mIHBhcmFtZXRlcnMsIG9yIG51bGwgZm9yIHRoZSBkZWZhdWx0CisgICAgICAgeworICAgICAgICAgd2lkdGg6ICAgJzEwMCUnLCAgICAvLyBudWxsIGZvciAic2FtZSBhcyBpbWFnZSIKKyAgICAgICAgIGhlaWdodDogICcxMDAlJywgICAgLy8gbnVsbCBmb3IgInNhbWUgYXMgaW1hZ2UiCisgICAgICAgICBiZ2NvbG9yOiAnIzAwMDAwMCcsIC8vIG51bGwgZm9yIHRyYW5zcGFyZW50PworICAgICAgICAgCisgICAgICAgICBlbWJlZF9wYXJhbXM6IHsKKyAgICAgICAgICAgIHdtb2RlOiAndHJhbnNwYXJlbnQnCisgICAgICAgICB9LAorICAgICAgICAgCisgICAgICAgICBlbWJlZF9hdHRyaWJ1dGVzOiB7CisgICAgICAgICAKKyAgICAgICAgIH0KKyAgICAgICAgIAorICAgICAgICAgZmxhc2hfcGFyYW1zOiB7CisgICAgICAgICAgIG15X3ZhcmlhYmxlOiAnc29tZXRoaW5nJworICAgICAgICAgfQorICAgICAgIH0KKyAgICoKKyAgICovCisgIAorICByZXBsYWNlX2ZsYXNoOgorICAgIGZ1bmN0aW9uIChpbWcsIHBhcmFtcykKKyAgICB7CisgICAgICBpZighaW1nKQorICAgICAgeworICAgICAgICB2YXIgaW1hZ2VzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpOworICAgICAgICAgICAgICAKKyAgICAgICAgZm9yKHZhciB4ID0gMDsgeCA8IGltYWdlcy5sZW5ndGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgIGlmKGltYWdlc1t4XS5zcmMubWF0Y2goU21hcnRJbWFnZXMuX2ZsYXNoX21ldGFfcmUpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIFNtYXJ0SW1hZ2VzLnJlcGxhY2VfZmxhc2goaW1hZ2VzW3hdLCBwYXJhbXMpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICB2YXIgaSA9IGltZzsKKyAgICAgICAgaWYoIWkuc3JjLm1hdGNoKFNtYXJ0SW1hZ2VzLl9mbGFzaF9tZXRhX3JlKSkKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBzd2YgPSBkZWNvZGVVUklDb21wb25lbnQoUmVnRXhwLiQyKTsKKyAgICAgICAgCisgICAgICAgIGlmKCFpLmlkKQorICAgICAgICB7CisgICAgICAgICAgaS5pZCA9ICd4aW1nJytNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZighcGFyYW1zKSBwYXJhbXMgPSB7IH07CisgICAgICAgIGlmKCFwYXJhbXMuZW1iZWRfcGFyYW1zKSAKKyAgICAgICAgICBwYXJhbXMuZW1iZWRfcGFyYW1zID0geyAnd21vZGUnOid0cmFuc3BhcmVudCcgfTsKKyAgICAgICAgaWYoIXBhcmFtcy5mbGFzaF9wYXJhbXMpCisgICAgICAgICAgcGFyYW1zLmZsYXNoX3BhcmFtcyA9IHsgfQorICAgICAgICBpZighcGFyYW1zLmVtYmVkX2F0dHJpYnV0ZXMpCisgICAgICAgICAgcGFyYW1zLmVtYmVkX2F0dHJpYnV0ZXMgPSB7IH0KKyAgICAgICAgaWYoIXBhcmFtcy53aWR0aCkgIHBhcmFtcy53aWR0aCAgID0gaS5vZmZzZXRXaWR0aDsKKyAgICAgICAgaWYoIXBhcmFtcy5oZWlnaHQpIHBhcmFtcy5oZWlnaHQgPSBpLm9mZnNldEhlaWdodDsgICAgICAgICAgICAgICAgCisgICAgICAgIGlmKHBhcmFtcy5iZ2NvbG9yKSBwYXJhbXMuZW1iZWRfcGFyYW1zLmJnY29sb3IgPSBwYXJhbXMuYmdjb2xvcjsKKyAgICAgICAgCisgICAgICAgIHN3Zm9iamVjdC5lbWJlZFNXRihzd2YsIGkuaWQsIHBhcmFtcy53aWR0aCwgcGFyYW1zLmhlaWdodCwgJzcuMC4wJywgbnVsbCwgcGFyYW1zLmZsYXNoX3BhcmFtcywgcGFyYW1zLmVtYmVkX3BhcmFtcywgcGFyYW1zLmVtYmVkX2F0dHJpYnV0ZXMpOyAgICAgICAgICAKKyAgICAgIH0KKyAgICB9LAorICAgIAorICAvKiogQWRkIGFuIG92ZXJsYXkgb3ZlciBmbGlja3IgaW1hZ2VzIHdoaWNoIHNob3dzIHRoZSBjb3B5cmlnaHQgb3duZXIsIGFuZCBhIGxpbmsgdG8gdGhlIAorICAgKiAgcGhvdG8gYXQgZmxpY2tyLiAgRmxpY2tyIHJlcXVpcmVzIGF0dHJpYnV0aW9uIG9mIGFsbCBpbWFnZXMsIHRoaXMgc2hvdWxkIEkgYmVsaWV2ZSBzYXRpc2Z5ICAKKyAgICogIHRoYXQgcmVxdWlyZW1lbnQuCisgICAqCisgICAqICBOb3RlIEhvd2V2ZXIgdGhhdCBmbGlja3IgZXhwcmVzc2x5IGZvcmJpZHMgYW55IGNvbW1lcmNpYWwgdXNlIG9mIHRoaWVyIEFQSSB3aXRob3V0IAorICAgKiAgIGEgY29tbWVyY2lhbCBBUEkga2V5LCB3aGljaCB0aGV5IG5lZWQgeW91IHRvIGFwcGx5IGZvci4KKyAgICoKKyAgICovCisgICAKKyAgYXR0cmlidXRlX2ZsaWNrcjogCisgICAgZnVuY3Rpb24oaW1nLCBwYXJhbXMpCisgICAgeworICAgICAgaWYoIWltZykKKyAgICAgIHsKKyAgICAgICAgdmFyIGltYWdlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKTsKKyAgICAgICAgICAgICAgCisgICAgICAgIGZvcih2YXIgeCA9IDA7IHggPCBpbWFnZXMubGVuZ3RoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICBpZihpbWFnZXNbeF0uc3JjLm1hdGNoKFNtYXJ0SW1hZ2VzLl9mbGlja3JfbWV0YV9yZSkpCisgICAgICAgICAgeworICAgICAgICAgICAgU21hcnRJbWFnZXMuYXR0cmlidXRlX2ZsaWNrcihpbWFnZXNbeF0sIHBhcmFtcyk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHZhciBpID0gaW1nOworICAgICAgICBpZighaS5zcmMubWF0Y2goU21hcnRJbWFnZXMuX2ZsaWNrcl9tZXRhX3JlKSkKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICB2YXIgbWV0YSA9IFNtYXJ0SW1hZ2VzLmdldF9tZXRhKGkuc3JjKTsKKyAgICAgICAgdmFyIGluZiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKKyAgICAgICAgaW5mLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCfCqSAnICsgbWV0YVsneC1ieSddKSk7CisgICAgICAgIGluZi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnIC0gZmxpY2tyLmNvbSAnKSk7CisgICAgICAgIAorICAgICAgICBpbmYuaHJlZiA9ICdodHRwOi8vd3d3LmZsaWNrci5jb20vcGhvdG9zLycrbWV0YVsneC11aWQnXSsnLycrbWV0YVsneC1mbGlja3ItcGhvdG8nXSsnLyc7CisgICAgICAgIGluZi50YXJnZXQgPSAnX2JsYW5rJzsKKyAgICAgICAgCisgICAgICAgIGluZi5zdHlsZS5wb3NpdGlvbiAgID0gJ2Fic29sdXRlJzsKKyAgICAgICAgaW5mLnN0eWxlLmRpc3BsYXkgICAgPSAnYmxvY2snOworICAgICAgICBpbmYuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOyAgICAgICAgCisgICAgICAgIGluZi5jbGFzc05hbWUgICAgICAgID0gJ3hpbmhhLWZsaWNrci1pbmZvJzsgICAgICAgIAorICAgICAgICBpbmYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNDQ0MnOworICAgICAgICBpbmYuc3R5bGUub3BhY2l0eSAgICA9ICcwLjYnOworICAgICAgICBpbmYuc3R5bGUucGFkZGluZyAgICA9ICcycHgnOworICAgICAgICBpbmYuc3R5bGUuY29sb3IgICAgICA9ICdibGFjayc7CisgICAgICAgIAorICAgICAgICBpLnhGbGlja3JJbmZvID0gaW5mOworICAgICAgICAgICAgICAgIAorICAgICAgICAvLyBOZWVkIHRvIGFwcGVuZCBpdCBiZWZvcmUgd2UgcG9zaXRpb24gaXQKKyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpLnhGbGlja3JJbmZvKTsKKyAgICAgICAgaS54RmxpY2tyU2hvdyA9IGZ1bmN0aW9uKCkKKyAgICAgICAgICB7CisgICAgICAgICAgICB2YXIgcCA9IFNtYXJ0SW1hZ2VzLmdldF9wb3NpdGlvbih0aGlzKTsKKyAgICAgICAgICAgIHRoaXMueEZsaWNrckluZm8uc3R5bGUudG9wICAgID0gcC55ICsgKHRoaXMub2Zmc2V0SGVpZ2h0IC0gdGhpcy54RmxpY2tySW5mby5vZmZzZXRIZWlnaHQpICsgJ3B4JzsgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHRoaXMueEZsaWNrckluZm8uc3R5bGUubGVmdCAgID0gcC54ICsgKCh0aGlzLm9mZnNldFdpZHRoIC8gMikgLSAodGhpcy54RmxpY2tySW5mby5vZmZzZXRXaWR0aCAvIDIpKSArICdweCc7CisgICAgICAgICAgICB0aGlzLnhGbGlja3JJbmZvLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhciBpbSA9IHRoaXM7CisgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgaW0ueEZsaWNrckluZm8uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOyB9LCA0MDAwKTsKKyAgICAgICAgICB9CisgICAgICAgICAgCisgICAgICAgIAorICAgICAgICBTbWFydEltYWdlcy5hZGRfZXZlbnQoaSwgJ21vdXNlb3ZlcicsIGZ1bmN0aW9uKCkgeyBpLnhGbGlja3JTaG93KCk7IH0pOworICAgICAgICBTbWFydEltYWdlcy5hZGRfZXZlbnQod2luZG93LCdyZXNpemUnLGZ1bmN0aW9uKCkgeyBpZihpLnhGbGlja3JJbmZvLnN0eWxlLnZpc2liaWxpdHkgPT0gJ3Zpc2libGUnKSBpLnhGbGlja3JTaG93KCk7IH0pOyAgICAgICAgICAgICAgICAKKyAgICAgIH0KKyAgfSwKKyAgCisgIGdldF9tZXRhOiAKKyAgICBmdW5jdGlvbih1cmwpCisgICAgeyAgICAgIAorICAgICAgdmFyIG91dHBhcmFtID0geyB9OworICAgICAgd2hpbGUodXJsLm1hdGNoKC9bPyZdKChbZnhdW18tXVthLXowLTlfLV0rKT0oW14mI10rKSkvaSkpCisgICAgICB7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgb3V0cGFyYW1bUmVnRXhwLiQyXSA9IGRlY29kZVVSSUNvbXBvbmVudChSZWdFeHAuJDMpOworICAgICAgICB9CisgICAgICAgIGNhdGNoKGUpCisgICAgICAgIHsKKyAgICAgICAgICAvLyBUcnVuY2F0ZWQgY29tcG9uZW50IHByb2JhYmx5CisgICAgICAgIH0KKyAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoUmVnRXhwLiQxLCAnJyk7CisgICAgICB9CisgICAgICAKKyAgICAgIHJldHVybiBvdXRwYXJhbTsKKyAgICB9LAorICAgICAgICAKKyAgIC8qKiBHZXQgdGhlIFgvWSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50ICovCisgICAKKyAgIGdldF9wb3NpdGlvbjogZnVuY3Rpb24ob2JqKSB7CisgICAgICAgIHZhciB4ID0gMDsKKyAgICAgICAgdmFyIHkgPSAwOworICAgICAgICBpZiAob2JqLm9mZnNldFBhcmVudCkgeworICAgICAgICAgICAgeCA9IG9iai5vZmZzZXRMZWZ0CisgICAgICAgICAgICB5ID0gb2JqLm9mZnNldFRvcAorICAgICAgICAgICAgd2hpbGUgKG9iaiA9IG9iai5vZmZzZXRQYXJlbnQpIHsKKyAgICAgICAgICAgICAgICB4ICs9IG9iai5vZmZzZXRMZWZ0CisgICAgICAgICAgICAgICAgeSArPSBvYmoub2Zmc2V0VG9wCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsgJ3gnOiB4LCAneSc6IHkgfTsKKyAgICB9LAorICAgIAorICAvKiogQWRkIGV2ZW50ICovCisgIGFkZF9ldmVudDogZnVuY3Rpb24oZWwsIGV2bmFtZSwgZnVuYykKKyAgeworICAgIGlmKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpCisgICAgeworICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldm5hbWUsIGZ1bmMsIHRydWUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgZWwuYXR0YWNoRXZlbnQoIm9uIiArIGV2bmFtZSwgZnVuYyk7CisgICAgfQorICB9LAorICAKKyAgLyoqIFJlcGxhY2UgYWxsIHRoZSBpbWFnZXMgdGhhdCBoYXZlIGFwcHJvcHJpYXRlIG1ldGEgaW5mb3JtYXRpb24gd2l0aAorICAgKiAgc29tZXRoaW5nIG1vcmUgaW50ZXJlc3RpbmcuCisgICAqLworICAgCisgIHJlcGxhY2VfYWxsOgorICAgIGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICBTbWFydEltYWdlcy5yZXBsYWNlX2ZsYXNoKCk7CisgICAgICBTbWFydEltYWdlcy5hdHRyaWJ1dGVfZmxpY2tyKCk7CisgICAgfQorCit9CisKKworLy8gQmVsb3cgaXMgdGhlIHNvdXJjZSBmb3IgU1dGT2JqZWN0LCBpbmNsdWRpbmcgaXQgaGVyZSByYXRoZXIgdGhhbiB0cnlpbmcgdG8gZG8gYW4gaW5jbHVkZSBqdXN0IHRvIG1ha2UgaXQgZWFzaWVyLgoraWYodHlwZW9mIHN3Zm9iamVjdCA9PSAndW5kZWZpbmVkJykKK3sKKy8qCVNXRk9iamVjdCB2Mi4wIHJjMiA8aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3N3Zm9iamVjdC8+CisJQ29weXJpZ2h0IChjKSAyMDA3IEdlb2ZmIFN0ZWFybnMsIE1pY2hhZWwgV2lsbGlhbXMsIGFuZCBCb2JieSB2YW4gZGVyIFNsdWlzCisJVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgPGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwPgorKi8KKwordmFyIHN3Zm9iamVjdCA9IGZ1bmN0aW9uKCkgeworCQorCXZhciBkb21Mb2FkRm5BcnIgPSBbXTsKKwl2YXIgcmVnT2JqQXJyID0gW107CisJdmFyIHRpbWVyID0gbnVsbDsKKwl2YXIgc3RvcmVkQWx0Q29udGVudCA9IG51bGw7CisJdmFyIGlzRG9tTG9hZGVkID0gZmFsc2U7CisJdmFyIGlzRXhwcmVzc0luc3RhbGxBY3RpdmUgPSBmYWxzZTsKKwkKKwkvKiBDZW50cmFsaXplZCBmdW5jdGlvbiBmb3IgYnJvd3NlciBmZWF0dXJlIGRldGVjdGlvbgorCQktIFByb3ByaWV0YXJ5IGZlYXR1cmUgZGV0ZWN0aW9uIChjb25kaXRpb25hbCBjb21waWxpbmcpIGlzIHVzZWQgdG8gZGV0ZWN0IEludGVybmV0IEV4cGxvcmVyJ3MgZmVhdHVyZXMKKwkJLSBVc2VyIGFnZW50IHN0cmluZyBkZXRlY3Rpb24gaXMgb25seSB1c2VkIHdoZW4gbm8gYWx0ZXJuYXRpdmUgaXMgcG9zc2libGUKKwkJLSBJcyBleGVjdXRlZCBkaXJlY3RseSBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZQorCSovCQorCXZhciB1YSA9IGZ1bmN0aW9uKCkgeworCQl2YXIgdzNjZG9tID0gdHlwZW9mIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkICE9ICJ1bmRlZmluZWQiIAkmJiB0eXBlb2YgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgIT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIGRvY3VtZW50LmFwcGVuZENoaWxkICE9ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBkb2N1bWVudC5yZXBsYWNlQ2hpbGQgIT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIGRvY3VtZW50LnJlbW92ZUNoaWxkICE9ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBkb2N1bWVudC5jbG9uZU5vZGUgIT0gInVuZGVmaW5lZCI7CisJCXZhciBwbGF5ZXJWZXJzaW9uID0gWzAsMCwwXTsKKwkJdmFyIGQgPSBudWxsOworCQlpZiAodHlwZW9mIG5hdmlnYXRvci5wbHVnaW5zICE9ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBuYXZpZ2F0b3IucGx1Z2luc1siU2hvY2t3YXZlIEZsYXNoIl0gPT0gIm9iamVjdCIpIHsKKwkJCWQgPSBuYXZpZ2F0b3IucGx1Z2luc1siU2hvY2t3YXZlIEZsYXNoIl0uZGVzY3JpcHRpb247CisJCQlpZiAoZCkgeworCQkJCWQgPSBkLnJlcGxhY2UoL14uKlxzKyhcUytccytcUyskKS8sICIkMSIpOworCQkJCXBsYXllclZlcnNpb25bMF0gPSBwYXJzZUludChkLnJlcGxhY2UoL14oLiopXC4uKiQvLCAiJDEiKSwgMTApOworCQkJCXBsYXllclZlcnNpb25bMV0gPSBwYXJzZUludChkLnJlcGxhY2UoL14uKlwuKC4qKVxzLiokLywgIiQxIiksIDEwKTsKKwkJCQlwbGF5ZXJWZXJzaW9uWzJdID0gL3IvLnRlc3QoZCkgPyBwYXJzZUludChkLnJlcGxhY2UoL14uKnIoLiopJC8sICIkMSIpLCAxMCkgOiAwOworCQkJfQorCQl9CisJCWVsc2UgaWYgKHR5cGVvZiB3aW5kb3cuQWN0aXZlWE9iamVjdCAhPSAidW5kZWZpbmVkIikgeworCQkJdmFyIGEgPSBudWxsOworCQkJdmFyIGZwNkNyYXNoID0gZmFsc2U7CisJCQl0cnkgeworCQkJCWEgPSBuZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2guNyIpOworCQkJfQorCQkJY2F0Y2goZSkgeworCQkJCXRyeSB7IAorCQkJCQlhID0gbmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoLjYiKTsKKwkJCQkJcGxheWVyVmVyc2lvbiA9IFs2LDAsMjFdOworCQkJCQlhLkFsbG93U2NyaXB0QWNjZXNzID0gImFsd2F5cyI7ICAvLyBJbnRyb2R1Y2VkIGluIGZwNi4wLjQ3CisJCQkJfQorCQkJCWNhdGNoKGUpIHsKKwkJCQkJaWYgKHBsYXllclZlcnNpb25bMF0gPT0gNikgeworCQkJCQkJZnA2Q3Jhc2ggPSB0cnVlOworCQkJCQl9CisJCQkJfQorCQkJCWlmICghZnA2Q3Jhc2gpIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCWEgPSBuZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2giKTsKKwkJCQkJfQorCQkJCQljYXRjaChlKSB7fQorCQkJCX0KKwkJCX0KKwkJCWlmICghZnA2Q3Jhc2ggJiYgYSkgeyAvLyBhIHdpbGwgcmV0dXJuIG51bGwgd2hlbiBBY3RpdmVYIGlzIGRpc2FibGVkCisJCQkJdHJ5IHsKKwkJCQkJZCA9IGEuR2V0VmFyaWFibGUoIiR2ZXJzaW9uIik7ICAvLyBXaWxsIGNyYXNoIGZwNi4wLjIxLzIzLzI5CisJCQkJCWlmIChkKSB7CisJCQkJCQlkID0gZC5zcGxpdCgiICIpWzFdLnNwbGl0KCIsIik7CisJCQkJCQlwbGF5ZXJWZXJzaW9uID0gW3BhcnNlSW50KGRbMF0sIDEwKSwgcGFyc2VJbnQoZFsxXSwgMTApLCBwYXJzZUludChkWzJdLCAxMCldOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoKGUpIHt9CisJCQl9CisJCX0KKwkJdmFyIHUgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7CisJCXZhciBwID0gbmF2aWdhdG9yLnBsYXRmb3JtLnRvTG93ZXJDYXNlKCk7CisJCXZhciB3ZWJraXQgPSAvd2Via2l0Ly50ZXN0KHUpOworCQl2YXIgd2Via2l0VmVyc2lvbiA9IHdlYmtpdCA/IHBhcnNlRmxvYXQodS5yZXBsYWNlKC9eLip3ZWJraXRcLyhcZCsoXC5cZCspPykuKiQvLCAiJDEiKSkgOiAwOworCQl2YXIgaWUgPSBmYWxzZTsKKwkJdmFyIHdpbiA9IHAgPyAvd2luLy50ZXN0KHApIDogL3dpbi8udGVzdCh1KTsKKwkJdmFyIG1hYyA9IHAgPyAvbWFjLy50ZXN0KHApIDogL21hYy8udGVzdCh1KTsKKwkJLypAY2Nfb24KKwkJCWllID0gdHJ1ZTsKKwkJCUBpZiAoQF93aW4zMikKKwkJCQl3aW4gPSB0cnVlOworCQkJQGVsaWYgKEBfbWFjKQorCQkJCW1hYyA9IHRydWU7CisJCQlAZW5kCisJCUAqLworCQlyZXR1cm4geyB3M2Nkb206dzNjZG9tLCBwbGF5ZXJWZXJzaW9uOnBsYXllclZlcnNpb24sIHdlYmtpdDp3ZWJraXQsIHdlYmtpdFZlcnNpb246d2Via2l0VmVyc2lvbiwgaWU6aWUsIHdpbjp3aW4sIG1hYzptYWMgfTsKKwl9KCk7CisJCQorCS8qIENyb3NzLWJyb3dzZXIgb25Eb21Mb2FkCisJCS0gQmFzZWQgb24gRGVhbiBFZHdhcmRzJyBzb2x1dGlvbjogaHR0cDovL2RlYW4uZWR3YXJkcy5uYW1lL3dlYmxvZy8yMDA2LzA2L2FnYWluLworCQktIFdpbGwgZmlyZSBhbiBldmVudCBhcyBzb29uIGFzIHRoZSBET00gb2YgYSBwYWdlIGlzIGxvYWRlZCAoc3VwcG9ydGVkIGJ5IEdlY2tvIGJhc2VkIGJyb3dzZXJzIC0gbGlrZSBGaXJlZm94IC0sIElFLCBPcGVyYTkrLCBTYWZhcmkpCisJKi8gCisJdmFyIG9uRG9tTG9hZCA9IGZ1bmN0aW9uKCkgeworCQlpZiAoIXVhLnczY2RvbSkgeworCQkJcmV0dXJuOworCQl9CisJCWFkZERvbUxvYWRFdmVudChtYWluKTsKKwkJaWYgKHVhLmllICYmIHVhLndpbikgeworCQkJdHJ5IHsgIC8vIEF2b2lkIGEgcG9zc2libGUgT3BlcmF0aW9uIEFib3J0ZWQgZXJyb3IKKwkJCQlkb2N1bWVudC53cml0ZSgiPHNjciIgKyAiaXB0IGlkPV9faWVfb25kb21sb2FkIGRlZmVyPXRydWUgc3JjPS8vOj48L3NjciIgKyAiaXB0PiIpOyAvLyBTdHJpbmcgaXMgc3BsaXQgaW50byBwaWVjZXMgdG8gYXZvaWQgTm9ydG9uIEFWIHRvIGFkZCBjb2RlIHRoYXQgY2FuIGNhdXNlIGVycm9ycyAKKwkJCQl2YXIgcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJfX2llX29uZG9tbG9hZCIpOworCQkJCWlmIChzKSB7CisJCQkJCXMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CisJCQkJCQlpZiAodGhpcy5yZWFkeVN0YXRlID09ICJjb21wbGV0ZSIpIHsKKwkJCQkJCQl0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyk7CisJCQkJCQkJY2FsbERvbUxvYWRGdW5jdGlvbnMoKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl9CisJCQl9CisJCQljYXRjaChlKSB7fQorCQl9CisJCWlmICh1YS53ZWJraXQgJiYgdHlwZW9mIGRvY3VtZW50LnJlYWR5U3RhdGUgIT0gInVuZGVmaW5lZCIpIHsKKwkJCXRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7IGlmICgvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KGRvY3VtZW50LnJlYWR5U3RhdGUpKSB7IGNhbGxEb21Mb2FkRnVuY3Rpb25zKCk7IH19LCAxMCk7CisJCX0KKwkJaWYgKHR5cGVvZiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICE9ICJ1bmRlZmluZWQiKSB7CisJCQlkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgY2FsbERvbUxvYWRGdW5jdGlvbnMsIG51bGwpOworCQl9CisJCWFkZExvYWRFdmVudChjYWxsRG9tTG9hZEZ1bmN0aW9ucyk7CisJfSgpOworCQorCWZ1bmN0aW9uIGNhbGxEb21Mb2FkRnVuY3Rpb25zKCkgeworCQlpZiAoaXNEb21Mb2FkZWQpIHsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAodWEuaWUgJiYgdWEud2luKSB7IC8vIFRlc3QgaWYgd2UgY2FuIHJlYWxseSBhZGQgZWxlbWVudHMgdG8gdGhlIERPTTsgd2UgZG9uJ3Qgd2FudCB0byBmaXJlIGl0IHRvbyBlYXJseQorCQkJdmFyIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisJCQl0cnkgeyAvLyBBdm9pZCBhIHBvc3NpYmxlIE9wZXJhdGlvbiBBYm9ydGVkIGVycm9yCisJCQkJdmFyIHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLmFwcGVuZENoaWxkKHMpOworCQkJCXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KTsKKwkJCX0KKwkJCWNhdGNoIChlKSB7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJCWlzRG9tTG9hZGVkID0gdHJ1ZTsKKwkJaWYgKHRpbWVyKSB7CisJCQljbGVhckludGVydmFsKHRpbWVyKTsKKwkJCXRpbWVyID0gbnVsbDsKKwkJfQorCQl2YXIgZGwgPSBkb21Mb2FkRm5BcnIubGVuZ3RoOworCQlmb3IgKHZhciBpID0gMDsgaSA8IGRsOyBpKyspIHsKKwkJCWRvbUxvYWRGbkFycltpXSgpOworCQl9CisJfQorCQorCWZ1bmN0aW9uIGFkZERvbUxvYWRFdmVudChmbikgeworCQlpZiAoaXNEb21Mb2FkZWQpIHsKKwkJCWZuKCk7CisJCX0KKwkJZWxzZSB7IAorCQkJZG9tTG9hZEZuQXJyW2RvbUxvYWRGbkFyci5sZW5ndGhdID0gZm47IC8vIEFycmF5LnB1c2goKSBpcyBvbmx5IGF2YWlsYWJsZSBpbiBJRTUuNSsKKwkJfQorCX0KKwkKKwkvKiBDcm9zcy1icm93c2VyIG9ubG9hZAorCQktIEJhc2VkIG9uIEphbWVzIEVkd2FyZHMnIHNvbHV0aW9uOiBodHRwOi8vYnJvdGhlcmNha2UuY29tL3NpdGUvcmVzb3VyY2VzL3NjcmlwdHMvb25sb2FkLworCQktIFdpbGwgZmlyZSBhbiBldmVudCBhcyBzb29uIGFzIGEgd2ViIHBhZ2UgaW5jbHVkaW5nIGFsbCBvZiBpdHMgYXNzZXRzIGFyZSBsb2FkZWQgCisJICovCisJZnVuY3Rpb24gYWRkTG9hZEV2ZW50KGZuKSB7CisJCWlmICh0eXBlb2Ygd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgIT0gInVuZGVmaW5lZCIpIHsKKwkJCXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZm4sIGZhbHNlKTsKKwkJfQorCQllbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciAhPSAidW5kZWZpbmVkIikgeworCQkJZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGZuLCBmYWxzZSk7CisJCX0KKwkJZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5hdHRhY2hFdmVudCAhPSAidW5kZWZpbmVkIikgeworCQkJd2luZG93LmF0dGFjaEV2ZW50KCJvbmxvYWQiLCBmbik7CisJCX0KKwkJZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5vbmxvYWQgPT0gImZ1bmN0aW9uIikgeworCQkJdmFyIGZuT2xkID0gd2luZG93Lm9ubG9hZDsKKwkJCXdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKwkJCQlmbk9sZCgpOworCQkJCWZuKCk7CisJCQl9OworCQl9CisJCWVsc2UgeworCQkJd2luZG93Lm9ubG9hZCA9IGZuOworCQl9CisJfQorCQorCS8qIE1haW4gZnVuY3Rpb24KKwkJLSBXaWxsIHByZWZlcmFibHkgZXhlY3V0ZSBvbkRvbUxvYWQsIG90aGVyd2lzZSBvbmxvYWQgKGFzIGEgZmFsbGJhY2spCisJKi8KKwlmdW5jdGlvbiBtYWluKCkgeyAvLyBTdGF0aWMgcHVibGlzaGluZyBvbmx5CisJCXZhciBybCA9IHJlZ09iakFyci5sZW5ndGg7CisJCWZvciAodmFyIGkgPSAwOyBpIDwgcmw7IGkrKykgeyAvLyBGb3IgZWFjaCByZWdpc3RlcmVkIG9iamVjdCBlbGVtZW50CisJCQl2YXIgaWQgPSByZWdPYmpBcnJbaV0uaWQ7CisJCQlpZiAodWEucGxheWVyVmVyc2lvblswXSA+IDApIHsgLy8gSWYgbm8gZnAgaXMgaW5zdGFsbGVkLCB3ZSBsZXQgdGhlIG9iamVjdCBlbGVtZW50IGRvIGl0cyBqb2IgKHNob3cgYWx0ZXJuYXRpdmUgY29udGVudCkKKwkJCQl2YXIgb2JqID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworCQkJCWlmIChvYmopIHsKKwkJCQkJcmVnT2JqQXJyW2ldLndpZHRoID0gb2JqLmdldEF0dHJpYnV0ZSgid2lkdGgiKSA/IG9iai5nZXRBdHRyaWJ1dGUoIndpZHRoIikgOiAiMCI7CisJCQkJCXJlZ09iakFycltpXS5oZWlnaHQgPSBvYmouZ2V0QXR0cmlidXRlKCJoZWlnaHQiKSA/IG9iai5nZXRBdHRyaWJ1dGUoImhlaWdodCIpIDogIjAiOworCQkJCQlpZiAoaGFzUGxheWVyVmVyc2lvbihyZWdPYmpBcnJbaV0uc3dmVmVyc2lvbikpIHsgLy8gRmxhc2ggcGx1Zy1pbiB2ZXJzaW9uID49IEZsYXNoIGNvbnRlbnQgdmVyc2lvbjogSG91c3Rvbiwgd2UgaGF2ZSBhIG1hdGNoIQorCQkJCQkJaWYgKHVhLndlYmtpdCAmJiB1YS53ZWJraXRWZXJzaW9uIDwgMzEyKSB7IC8vIE9sZGVyIHdlYmtpdCBlbmdpbmVzIGlnbm9yZSB0aGUgb2JqZWN0IGVsZW1lbnQncyBuZXN0ZWQgcGFyYW0gZWxlbWVudHMKKwkJCQkJCQlmaXhQYXJhbXMob2JqKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlIGlmIChyZWdPYmpBcnJbaV0uZXhwcmVzc0luc3RhbGwgJiYgIWlzRXhwcmVzc0luc3RhbGxBY3RpdmUgJiYgaGFzUGxheWVyVmVyc2lvbihbNiwwLDY1XSkgJiYgKHVhLndpbiB8fCB1YS5tYWMpKSB7IC8vIFNob3cgdGhlIEFkb2JlIEV4cHJlc3MgSW5zdGFsbCBkaWFsb2cgaWYgc2V0IGJ5IHRoZSB3ZWIgcGFnZSBhdXRob3IgYW5kIGlmIHN1cHBvcnRlZCAoZnA2LjAuNjUrIG9uIFdpbi9NYWMgT1Mgb25seSkKKwkJCQkJCXNob3dFeHByZXNzSW5zdGFsbChyZWdPYmpBcnJbaV0pOworCQkJCQl9CisJCQkJCWVsc2UgeyAvLyBGbGFzaCBwbHVnLWluIGFuZCBGbGFzaCBjb250ZW50IHZlcnNpb24gbWlzbWF0Y2g6IGRpc3BsYXkgYWx0ZXJuYXRpdmUgY29udGVudCBpbnN0ZWFkIG9mIEZsYXNoIGNvbnRlbnQKKwkJCQkJCWRpc3BsYXlBbHRDb250ZW50KG9iaik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQljcmVhdGVDU1MoIiMiICsgaWQsICJ2aXNpYmlsaXR5OnZpc2libGUiKTsKKwkJfQorCX0KKwkKKwkvKiBGaXggbmVzdGVkIHBhcmFtIGVsZW1lbnRzLCB3aGljaCBhcmUgaWdub3JlZCBieSBvbGRlciB3ZWJraXQgZW5naW5lcworCQktIFRoaXMgaW5jbHVkZXMgU2FmYXJpIHVwIHRvIGFuZCBpbmNsdWRpbmcgdmVyc2lvbiAxLjIuMiBvbiBNYWMgT1MgMTAuMworCQktIEZhbGwgYmFjayB0byB0aGUgcHJvcHJpZXRhcnkgZW1iZWQgZWxlbWVudAorCSovCisJZnVuY3Rpb24gZml4UGFyYW1zKG9iaikgeworCQl2YXIgbmVzdGVkT2JqID0gb2JqLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXTsKKwkJaWYgKG5lc3RlZE9iaikgeworCQkJdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJlbWJlZCIpOwkKKwkJCXZhciBhID0gbmVzdGVkT2JqLmF0dHJpYnV0ZXM7CisJCQlpZiAoYSkgeworCQkJCXZhciBhbCA9IGEubGVuZ3RoOworCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgYWw7IGkrKykgeworCQkJCQlpZiAoYVtpXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09ICJkYXRhIikgeworCQkJCQkJZS5zZXRBdHRyaWJ1dGUoInNyYyIsIGFbaV0ubm9kZVZhbHVlKTsKKwkJCQkJfQorCQkJCQllbHNlIHsKKwkJCQkJCWUuc2V0QXR0cmlidXRlKGFbaV0ubm9kZU5hbWUsIGFbaV0ubm9kZVZhbHVlKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXZhciBjID0gbmVzdGVkT2JqLmNoaWxkTm9kZXM7CisJCQlpZiAoYykgeworCQkJCXZhciBjbCA9IGMubGVuZ3RoOworCQkJCWZvciAodmFyIGogPSAwOyBqIDwgY2w7IGorKykgeworCQkJCQlpZiAoY1tqXS5ub2RlVHlwZSA9PSAxICYmIGNbal0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PSAicGFyYW0iKSB7CisJCQkJCQllLnNldEF0dHJpYnV0ZShjW2pdLmdldEF0dHJpYnV0ZSgibmFtZSIpLCBjW2pdLmdldEF0dHJpYnV0ZSgidmFsdWUiKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlvYmoucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZSwgb2JqKTsKKwkJfQorCX0KKwkKKwkvKiBGaXggaGFuZ2luZyBhdWRpby92aWRlbyB0aHJlYWRzIGFuZCBmb3JjZSBvcGVuIHNvY2tldHMgYW5kIE5ldENvbm5lY3Rpb25zIHRvIGRpc2Nvbm5lY3QKKwkJLSBPY2N1cnMgd2hlbiB1bmxvYWRpbmcgYSB3ZWIgcGFnZSBpbiBJRSB1c2luZyBmcDgrIGFuZCBpbm5lckhUTUwvb3V0ZXJIVE1MCisJCS0gRHluYW1pYyBwdWJsaXNoaW5nIG9ubHkKKwkqLworCWZ1bmN0aW9uIGZpeE9iamVjdExlYWtzKGlkKSB7CisJCWlmICh1YS5pZSAmJiB1YS53aW4gJiYgaGFzUGxheWVyVmVyc2lvbihbOCwwLDBdKSkgeworCQkJd2luZG93LmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsIGZ1bmN0aW9uICgpIHsKKwkJCQl2YXIgb2JqID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworCQkJCWZvciAodmFyIGkgaW4gb2JqKSB7CisJCQkJCWlmICh0eXBlb2Ygb2JqW2ldID09ICJmdW5jdGlvbiIpIHsKKwkJCQkJCW9ialtpXSA9IGZ1bmN0aW9uKCkge307CisJCQkJCX0KKwkJCQl9CisJCQkJb2JqLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob2JqKTsKKwkJCX0pOworCQl9CisJfQorCQorCS8qIFNob3cgdGhlIEFkb2JlIEV4cHJlc3MgSW5zdGFsbCBkaWFsb2cKKwkJLSBSZWZlcmVuY2U6IGh0dHA6Ly93d3cuYWRvYmUuY29tL2NmdXNpb24va25vd2xlZGdlYmFzZS9pbmRleC5jZm0/aWQ9NmEyNTNiNzUKKwkqLworCWZ1bmN0aW9uIHNob3dFeHByZXNzSW5zdGFsbChyZWdPYmopIHsKKwkJaXNFeHByZXNzSW5zdGFsbEFjdGl2ZSA9IHRydWU7CisJCXZhciBvYmogPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyZWdPYmouaWQpOworCQlpZiAob2JqKSB7CisJCQlpZiAocmVnT2JqLmFsdENvbnRlbnRJZCkgeworCQkJCXZhciBhYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHJlZ09iai5hbHRDb250ZW50SWQpOworCQkJCWlmIChhYykgeworCQkJCQlzdG9yZWRBbHRDb250ZW50ID0gYWM7CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RvcmVkQWx0Q29udGVudCA9IGFic3RyYWN0QWx0Q29udGVudChvYmopOworCQkJfQorCQkJaWYgKCEoLyUkLy50ZXN0KHJlZ09iai53aWR0aCkpICYmIHBhcnNlSW50KHJlZ09iai53aWR0aCwgMTApIDwgMzEwKSB7CisJCQkJcmVnT2JqLndpZHRoID0gIjMxMCI7CisJCQl9CisJCQlpZiAoISgvJSQvLnRlc3QocmVnT2JqLmhlaWdodCkpICYmIHBhcnNlSW50KHJlZ09iai5oZWlnaHQsIDEwKSA8IDEzNykgeworCQkJCXJlZ09iai5oZWlnaHQgPSAiMTM3IjsKKwkJCX0KKwkJCXZhciBwdCA9IHVhLmllICYmIHVhLndpbiA/ICJBY3RpdmVYIiA6ICJQbHVnSW4iOworCQkJZG9jdW1lbnQudGl0bGUgPSBkb2N1bWVudC50aXRsZS5zbGljZSgwLCA0NykgKyAiIC0gRmxhc2ggUGxheWVyIEluc3RhbGxhdGlvbiI7CisJCQl2YXIgZHQgPSBkb2N1bWVudC50aXRsZTsKKwkJCXZhciBmdiA9ICJNTXJlZGlyZWN0VVJMPSIgKyB3aW5kb3cubG9jYXRpb24gKyAiJk1NcGxheWVyVHlwZT0iICsgcHQgKyAnJk1NZG9jdGl0bGU9JyArIGR0OworCQkJdmFyIHJlcGxhY2VJZCA9IHJlZ09iai5pZDsKKwkJCS8vIEZvciBJRSB3aGVuIGEgU1dGIGlzIGxvYWRpbmcgKEFORDogbm90IGF2YWlsYWJsZSBpbiBjYWNoZSkgd2FpdCBmb3IgdGhlIG9ubG9hZCBldmVudCB0byBmaXJlIHRvIHJlbW92ZSB0aGUgb3JpZ2luYWwgb2JqZWN0IGVsZW1lbnQKKwkJCS8vIEluIElFIHlvdSBjYW5ub3QgcHJvcGVybHkgY2FuY2VsIGEgbG9hZGluZyBTV0YgZmlsZSB3aXRob3V0IGJyZWFraW5nIGJyb3dzZXIgbG9hZCByZWZlcmVuY2VzLCBhbHNvIG9iai5vbnJlYWR5c3RhdGVjaGFuZ2UgZG9lc24ndCB3b3JrCisJCQlpZiAodWEuaWUgJiYgdWEud2luICYmIG9iai5yZWFkeVN0YXRlICE9IDQpIHsKKwkJCQl2YXIgbmV3T2JqID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisJCQkJcmVwbGFjZUlkICs9ICJTV0ZPYmplY3ROZXciOworCQkJCW5ld09iai5zZXRBdHRyaWJ1dGUoImlkIiwgcmVwbGFjZUlkKTsKKwkJCQlvYmoucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3T2JqLCBvYmopOyAvLyBJbnNlcnQgcGxhY2Vob2xkZXIgZGl2IHRoYXQgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgb2JqZWN0IGVsZW1lbnQgdGhhdCBsb2FkcyBleHByZXNzaW5zdGFsbC5zd2YKKwkJCQlvYmouc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKwkJCQl3aW5kb3cuYXR0YWNoRXZlbnQoIm9ubG9hZCIsIGZ1bmN0aW9uKCkgeyBvYmoucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvYmopOyB9KTsKKwkJCX0KKwkJCWNyZWF0ZVNXRih7IGRhdGE6cmVnT2JqLmV4cHJlc3NJbnN0YWxsLCBpZDoiU1dGT2JqZWN0RXhwckluc3QiLCB3aWR0aDpyZWdPYmoud2lkdGgsIGhlaWdodDpyZWdPYmouaGVpZ2h0IH0sIHsgZmxhc2h2YXJzOmZ2IH0sIHJlcGxhY2VJZCk7CisJCX0KKwl9CisJCisJLyogRnVuY3Rpb25zIHRvIGFic3RyYWN0IGFuZCBkaXNwbGF5IGFsdGVybmF0aXZlIGNvbnRlbnQKKwkqLworCWZ1bmN0aW9uIGRpc3BsYXlBbHRDb250ZW50KG9iaikgeworCQlpZiAodWEuaWUgJiYgdWEud2luICYmIG9iai5yZWFkeVN0YXRlICE9IDQpIHsKKwkJCS8vIEZvciBJRSB3aGVuIGEgU1dGIGlzIGxvYWRpbmcgKEFORDogbm90IGF2YWlsYWJsZSBpbiBjYWNoZSkgd2FpdCBmb3IgdGhlIG9ubG9hZCBldmVudCB0byBmaXJlIHRvIHJlbW92ZSB0aGUgb3JpZ2luYWwgb2JqZWN0IGVsZW1lbnQKKwkJCS8vIEluIElFIHlvdSBjYW5ub3QgcHJvcGVybHkgY2FuY2VsIGEgbG9hZGluZyBTV0YgZmlsZSB3aXRob3V0IGJyZWFraW5nIGJyb3dzZXIgbG9hZCByZWZlcmVuY2VzLCBhbHNvIG9iai5vbnJlYWR5c3RhdGVjaGFuZ2UgZG9lc24ndCB3b3JrCisJCQl2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKwkJCW9iai5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbCwgb2JqKTsgLy8gSW5zZXJ0IHBsYWNlaG9sZGVyIGRpdiB0aGF0IHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGFsdGVybmF0aXZlIGNvbnRlbnQKKwkJCWVsLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGFic3RyYWN0QWx0Q29udGVudChvYmopLCBlbCk7CisJCQlvYmouc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKwkJCXdpbmRvdy5hdHRhY2hFdmVudCgib25sb2FkIiwgZnVuY3Rpb24oKSB7IG9iai5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG9iaik7IH0pOworCQl9CisJCWVsc2UgeworCQkJb2JqLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGFic3RyYWN0QWx0Q29udGVudChvYmopLCBvYmopOworCQl9CisJfQkKKworCWZ1bmN0aW9uIGFic3RyYWN0QWx0Q29udGVudChvYmopIHsKKwkJdmFyIGFjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisJCWlmICh1YS53aW4gJiYgdWEuaWUpIHsKKwkJCWFjLmlubmVySFRNTCA9IG9iai5pbm5lckhUTUw7CisJCX0KKwkJZWxzZSB7CisJCQl2YXIgbmVzdGVkT2JqID0gb2JqLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXTsKKwkJCWlmIChuZXN0ZWRPYmopIHsKKwkJCQl2YXIgYyA9IG5lc3RlZE9iai5jaGlsZE5vZGVzOworCQkJCWlmIChjKSB7CisJCQkJCXZhciBjbCA9IGMubGVuZ3RoOworCQkJCQlmb3IgKHZhciBpID0gMDsgaSA8IGNsOyBpKyspIHsKKwkJCQkJCWlmICghKGNbaV0ubm9kZVR5cGUgPT0gMSAmJiBjW2ldLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT0gInBhcmFtIikgJiYgIShjW2ldLm5vZGVUeXBlID09IDgpKSB7CisJCQkJCQkJYWMuYXBwZW5kQ2hpbGQoY1tpXS5jbG9uZU5vZGUodHJ1ZSkpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBhYzsKKwl9CisJCisJLyogQ3Jvc3MtYnJvd3NlciBkeW5hbWljIFNXRiBjcmVhdGlvbgorCSovCisJZnVuY3Rpb24gY3JlYXRlU1dGKGF0dE9iaiwgcGFyT2JqLCBpZCkgeworCQl2YXIgcjsKKwkJdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworCQlpZiAodHlwZW9mIGF0dE9iai5pZCA9PSAidW5kZWZpbmVkIikgeyAvLyBpZiBubyAnaWQnIGlzIGRlZmluZWQgZm9yIHRoZSBvYmplY3QgZWxlbWVudCwgaXQgd2lsbCBpbmhlcml0IHRoZSAnaWQnIGZyb20gdGhlIGFsdGVybmF0aXZlIGNvbnRlbnQKKwkJCWF0dE9iai5pZCA9IGlkOworCQl9CisJCWlmICh1YS5pZSAmJiB1YS53aW4pIHsgLy8gSUUsIHRoZSBvYmplY3QgZWxlbWVudCBhbmQgVzNDIERPTSBtZXRob2RzIGRvIG5vdCBjb21iaW5lOiBmYWxsIGJhY2sgdG8gb3V0ZXJIVE1MCisJCQl2YXIgYXR0ID0gIiI7CisJCQlmb3IgKHZhciBpIGluIGF0dE9iaikgeworCQkJCWlmIChhdHRPYmpbaV0gIT0gT2JqZWN0LnByb3RvdHlwZVtpXSkgeyAvLyBGaWx0ZXIgb3V0IHByb3RvdHlwZSBhZGRpdGlvbnMgZnJvbSBvdGhlciBwb3RlbnRpYWwgbGlicmFyaWVzLCBsaWtlIE9iamVjdC5wcm90b3R5cGUudG9KU09OU3RyaW5nID0gZnVuY3Rpb24oKSB7fQorCQkJCQlpZiAoaSA9PSAiZGF0YSIpIHsKKwkJCQkJCXBhck9iai5tb3ZpZSA9IGF0dE9ialtpXTsKKwkJCQkJfQorCQkJCQllbHNlIGlmIChpLnRvTG93ZXJDYXNlKCkgPT0gInN0eWxlY2xhc3MiKSB7IC8vICdjbGFzcycgaXMgYW4gRUNNQTQgcmVzZXJ2ZWQga2V5d29yZAorCQkJCQkJYXR0ICs9ICcgY2xhc3M9IicgKyBhdHRPYmpbaV0gKyAnIic7CisJCQkJCX0KKwkJCQkJZWxzZSBpZiAoaSAhPSAiY2xhc3NpZCIpIHsKKwkJCQkJCWF0dCArPSAnICcgKyBpICsgJz0iJyArIGF0dE9ialtpXSArICciJzsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXZhciBwYXIgPSAiIjsKKwkJCWZvciAodmFyIGogaW4gcGFyT2JqKSB7CisJCQkJaWYgKHBhck9ialtqXSAhPSBPYmplY3QucHJvdG90eXBlW2pdKSB7IC8vIEZpbHRlciBvdXQgcHJvdG90eXBlIGFkZGl0aW9ucyBmcm9tIG90aGVyIHBvdGVudGlhbCBsaWJyYXJpZXMKKwkJCQkJcGFyICs9ICc8cGFyYW0gbmFtZT0iJyArIGogKyAnIiB2YWx1ZT0iJyArIHBhck9ialtqXSArICciIC8+JzsKKwkJCQl9CisJCQl9CisJCQllbC5vdXRlckhUTUwgPSAnPG9iamVjdCBjbGFzc2lkPSJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiJyArIGF0dCArICc+JyArIHBhciArICc8L29iamVjdD4nOworCQkJZml4T2JqZWN0TGVha3MoYXR0T2JqLmlkKTsgLy8gVGhpcyBidWcgYWZmZWN0cyBkeW5hbWljIHB1Ymxpc2hpbmcgb25seQorCQkJciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGF0dE9iai5pZCk7CQorCQl9CisJCWVsc2UgaWYgKHVhLndlYmtpdCAmJiB1YS53ZWJraXRWZXJzaW9uIDwgMzEyKSB7IC8vIE9sZGVyIHdlYmtpdCBlbmdpbmVzIGlnbm9yZSB0aGUgb2JqZWN0IGVsZW1lbnQncyBuZXN0ZWQgcGFyYW0gZWxlbWVudHM6IGZhbGwgYmFjayB0byB0aGUgcHJvcHJpZXRhcnkgZW1iZWQgZWxlbWVudAorCQkJdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJlbWJlZCIpOworCQkJZS5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giKTsKKwkJCWZvciAodmFyIGsgaW4gYXR0T2JqKSB7CisJCQkJaWYgKGF0dE9ialtrXSAhPSBPYmplY3QucHJvdG90eXBlW2tdKSB7IC8vIEZpbHRlciBvdXQgcHJvdG90eXBlIGFkZGl0aW9ucyBmcm9tIG90aGVyIHBvdGVudGlhbCBsaWJyYXJpZXMKKwkJCQkJaWYgKGsgPT0gImRhdGEiKSB7CisJCQkJCQllLnNldEF0dHJpYnV0ZSgic3JjIiwgYXR0T2JqW2tdKTsKKwkJCQkJfQorCQkJCQllbHNlIGlmIChrLnRvTG93ZXJDYXNlKCkgPT0gInN0eWxlY2xhc3MiKSB7IC8vICdjbGFzcycgaXMgYW4gRUNNQTQgcmVzZXJ2ZWQga2V5d29yZAorCQkJCQkJZS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgYXR0T2JqW2tdKTsKKwkJCQkJfQorCQkJCQllbHNlIGlmIChrICE9ICJjbGFzc2lkIikgeyAvLyBGaWx0ZXIgb3V0IElFIHNwZWNpZmljIGF0dHJpYnV0ZQorCQkJCQkJZS5zZXRBdHRyaWJ1dGUoaywgYXR0T2JqW2tdKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWZvciAodmFyIGwgaW4gcGFyT2JqKSB7CisJCQkJaWYgKHBhck9ialtsXSAhPSBPYmplY3QucHJvdG90eXBlW2xdKSB7IC8vIEZpbHRlciBvdXQgcHJvdG90eXBlIGFkZGl0aW9ucyBmcm9tIG90aGVyIHBvdGVudGlhbCBsaWJyYXJpZXMKKwkJCQkJaWYgKGwgIT0gIm1vdmllIikgeyAvLyBGaWx0ZXIgb3V0IElFIHNwZWNpZmljIHBhcmFtIGVsZW1lbnQKKwkJCQkJCWUuc2V0QXR0cmlidXRlKGwsIHBhck9ialtsXSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlLCBlbCk7CisJCQlyID0gZTsKKwkJfQorCQllbHNlIHsgLy8gV2VsbC1iZWhhdmluZyBicm93c2VycworCQkJdmFyIG8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvYmplY3QiKTsKKwkJCW8uc2V0QXR0cmlidXRlKCJ0eXBlIiwgImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIik7CisJCQlmb3IgKHZhciBtIGluIGF0dE9iaikgeworCQkJCWlmIChhdHRPYmpbbV0gIT0gT2JqZWN0LnByb3RvdHlwZVttXSkgeyAvLyBGaWx0ZXIgb3V0IHByb3RvdHlwZSBhZGRpdGlvbnMgZnJvbSBvdGhlciBwb3RlbnRpYWwgbGlicmFyaWVzCisJCQkJCWlmIChtLnRvTG93ZXJDYXNlKCkgPT0gInN0eWxlY2xhc3MiKSB7IC8vICdjbGFzcycgaXMgYW4gRUNNQTQgcmVzZXJ2ZWQga2V5d29yZAorCQkJCQkJby5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgYXR0T2JqW21dKTsKKwkJCQkJfQorCQkJCQllbHNlIGlmIChtICE9ICJjbGFzc2lkIikgeyAvLyBGaWx0ZXIgb3V0IElFIHNwZWNpZmljIGF0dHJpYnV0ZQorCQkJCQkJby5zZXRBdHRyaWJ1dGUobSwgYXR0T2JqW21dKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWZvciAodmFyIG4gaW4gcGFyT2JqKSB7CisJCQkJaWYgKHBhck9ialtuXSAhPSBPYmplY3QucHJvdG90eXBlW25dICYmIG4gIT0gIm1vdmllIikgeyAvLyBGaWx0ZXIgb3V0IHByb3RvdHlwZSBhZGRpdGlvbnMgZnJvbSBvdGhlciBwb3RlbnRpYWwgbGlicmFyaWVzIGFuZCBJRSBzcGVjaWZpYyBwYXJhbSBlbGVtZW50CisJCQkJCWNyZWF0ZU9ialBhcmFtKG8sIG4sIHBhck9ialtuXSk7CisJCQkJfQorCQkJfQorCQkJZWwucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobywgZWwpOworCQkJciA9IG87CisJCX0KKwkJcmV0dXJuIHI7CisJfQorCisJZnVuY3Rpb24gY3JlYXRlT2JqUGFyYW0oZWwsIHBOYW1lLCBwVmFsdWUpIHsKKwkJdmFyIHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXJhbSIpOworCQlwLnNldEF0dHJpYnV0ZSgibmFtZSIsIHBOYW1lKTsJCisJCXAuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHBWYWx1ZSk7CisJCWVsLmFwcGVuZENoaWxkKHApOworCX0KKwkKKwlmdW5jdGlvbiBoYXNQbGF5ZXJWZXJzaW9uKHJ2KSB7CisJCXJldHVybiAodWEucGxheWVyVmVyc2lvblswXSA+IHJ2WzBdIHx8ICh1YS5wbGF5ZXJWZXJzaW9uWzBdID09IHJ2WzBdICYmIHVhLnBsYXllclZlcnNpb25bMV0gPiBydlsxXSkgfHwgKHVhLnBsYXllclZlcnNpb25bMF0gPT0gcnZbMF0gJiYgdWEucGxheWVyVmVyc2lvblsxXSA9PSBydlsxXSAmJiB1YS5wbGF5ZXJWZXJzaW9uWzJdID49IHJ2WzJdKSkgPyB0cnVlIDogZmFsc2U7CisJfQorCQorCS8qIENyb3NzLWJyb3dzZXIgZHluYW1pYyBDU1MgY3JlYXRpb24KKwkJLSBCYXNlZCBvbiBCb2JieSB2YW4gZGVyIFNsdWlzJyBzb2x1dGlvbjogaHR0cDovL3d3dy5ib2JieXZhbmRlcnNsdWlzLmNvbS9hcnRpY2xlcy9keW5hbWljQ1NTLnBocAorCSovCQorCWZ1bmN0aW9uIGNyZWF0ZUNTUyhzZWwsIGRlY2wpIHsKKwkJaWYgKHVhLmllICYmIHVhLm1hYykgeworCQkJcmV0dXJuOworCQl9CisJCXZhciBoID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTsgCisJCXZhciBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKKwkJcy5zZXRBdHRyaWJ1dGUoInR5cGUiLCAidGV4dC9jc3MiKTsKKwkJcy5zZXRBdHRyaWJ1dGUoIm1lZGlhIiwgInNjcmVlbiIpOworCQlpZiAoISh1YS5pZSAmJiB1YS53aW4pICYmIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSAhPSAidW5kZWZpbmVkIikgeworCQkJcy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzZWwgKyAiIHsiICsgZGVjbCArICJ9IikpOworCQl9CisJCWguYXBwZW5kQ2hpbGQocyk7CisJCWlmICh1YS5pZSAmJiB1YS53aW4gJiYgdHlwZW9mIGRvY3VtZW50LnN0eWxlU2hlZXRzICE9ICJ1bmRlZmluZWQiICYmIGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aCA+IDApIHsKKwkJCXZhciBscyA9IGRvY3VtZW50LnN0eWxlU2hlZXRzW2RvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aCAtIDFdOworCQkJaWYgKHR5cGVvZiBscy5hZGRSdWxlID09ICJvYmplY3QiKSB7CisJCQkJbHMuYWRkUnVsZShzZWwsIGRlY2wpOworCQkJfQorCQl9CisJfQorCQorCXJldHVybiB7CisJCS8qIFB1YmxpYyBBUEkKKwkJCS0gUmVmZXJlbmNlOiBodHRwOi8vY29kZS5nb29nbGUuY29tL3Avc3dmb2JqZWN0L3dpa2kvU1dGT2JqZWN0XzJfMF9kb2N1bWVudGF0aW9uCisJCSovIAorCQlyZWdpc3Rlck9iamVjdDogZnVuY3Rpb24ob2JqZWN0SWRTdHIsIHN3ZlZlcnNpb25TdHIsIHhpU3dmVXJsU3RyKSB7CisJCQlpZiAoIXVhLnczY2RvbSB8fCAhb2JqZWN0SWRTdHIgfHwgIXN3ZlZlcnNpb25TdHIpIHsKKwkJCQlyZXR1cm47CisJCQl9CisJCQl2YXIgcmVnT2JqID0ge307CisJCQlyZWdPYmouaWQgPSBvYmplY3RJZFN0cjsKKwkJCXZhciB2ID0gc3dmVmVyc2lvblN0ci5zcGxpdCgiLiIpOworCQkJcmVnT2JqLnN3ZlZlcnNpb24gPSBbcGFyc2VJbnQodlswXSwgMTApLCBwYXJzZUludCh2WzFdLCAxMCksIHBhcnNlSW50KHZbMl0sIDEwKV07CisJCQlyZWdPYmouZXhwcmVzc0luc3RhbGwgPSB4aVN3ZlVybFN0ciA/IHhpU3dmVXJsU3RyIDogZmFsc2U7CisJCQlyZWdPYmpBcnJbcmVnT2JqQXJyLmxlbmd0aF0gPSByZWdPYmo7CisJCQljcmVhdGVDU1MoIiMiICsgb2JqZWN0SWRTdHIsICJ2aXNpYmlsaXR5OmhpZGRlbiIpOworCQl9LAorCQkKKwkJZ2V0T2JqZWN0QnlJZDogZnVuY3Rpb24ob2JqZWN0SWRTdHIpIHsKKwkJCXZhciByID0gbnVsbDsKKwkJCWlmICh1YS53M2Nkb20gJiYgaXNEb21Mb2FkZWQpIHsKKwkJCQl2YXIgbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9iamVjdElkU3RyKTsKKwkJCQlpZiAobykgeworCQkJCQl2YXIgbiA9IG8uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdOworCQkJCQlpZiAoIW4gfHwgKG4gJiYgdHlwZW9mIG8uU2V0VmFyaWFibGUgIT0gInVuZGVmaW5lZCIpKSB7CisJCQkJICAgIAlyID0gbzsKKwkJCQkJfQorCQkJCQllbHNlIGlmICh0eXBlb2Ygbi5TZXRWYXJpYWJsZSAhPSAidW5kZWZpbmVkIikgeworCQkJCQkJciA9IG47CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gcjsKKwkJfSwKKwkJCisJCWVtYmVkU1dGOiBmdW5jdGlvbihzd2ZVcmxTdHIsIHJlcGxhY2VFbGVtSWRTdHIsIHdpZHRoU3RyLCBoZWlnaHRTdHIsIHN3ZlZlcnNpb25TdHIsIHhpU3dmVXJsU3RyLCBmbGFzaHZhcnNPYmosIHBhck9iaiwgYXR0T2JqKSB7CisJCQlpZiAoIXVhLnczY2RvbSB8fCAhc3dmVXJsU3RyIHx8ICFyZXBsYWNlRWxlbUlkU3RyIHx8ICF3aWR0aFN0ciB8fCAhaGVpZ2h0U3RyIHx8ICFzd2ZWZXJzaW9uU3RyKSB7CisJCQkJcmV0dXJuOworCQkJfQorCQkJd2lkdGhTdHIgKz0gIiI7IC8vIEF1dG8tY29udmVydCB0byBzdHJpbmcgdG8gbWFrZSBpdCBpZGlvdCBwcm9vZgorCQkJaGVpZ2h0U3RyICs9ICIiOworCQkJaWYgKGhhc1BsYXllclZlcnNpb24oc3dmVmVyc2lvblN0ci5zcGxpdCgiLiIpKSkgeworCQkJCWNyZWF0ZUNTUygiIyIgKyByZXBsYWNlRWxlbUlkU3RyLCAidmlzaWJpbGl0eTpoaWRkZW4iKTsKKwkJCQl2YXIgYXR0ID0gKHR5cGVvZiBhdHRPYmogPT0gIm9iamVjdCIpID8gYXR0T2JqIDoge307CisJCQkJYXR0LmRhdGEgPSBzd2ZVcmxTdHI7CisJCQkJYXR0LndpZHRoID0gd2lkdGhTdHI7CisJCQkJYXR0LmhlaWdodCA9IGhlaWdodFN0cjsKKwkJCQl2YXIgcGFyID0gKHR5cGVvZiBwYXJPYmogPT0gIm9iamVjdCIpID8gcGFyT2JqIDoge307CisJCQkJaWYgKHR5cGVvZiBmbGFzaHZhcnNPYmogPT0gIm9iamVjdCIpIHsKKwkJCQkJZm9yICh2YXIgaSBpbiBmbGFzaHZhcnNPYmopIHsKKwkJCQkJCWlmIChmbGFzaHZhcnNPYmpbaV0gIT0gT2JqZWN0LnByb3RvdHlwZVtpXSkgeyAvLyBGaWx0ZXIgb3V0IHByb3RvdHlwZSBhZGRpdGlvbnMgZnJvbSBvdGhlciBwb3RlbnRpYWwgbGlicmFyaWVzCisJCQkJCQkJaWYgKHR5cGVvZiBwYXIuZmxhc2h2YXJzICE9ICJ1bmRlZmluZWQiKSB7CisJCQkJCQkJCXBhci5mbGFzaHZhcnMgKz0gIiYiICsgaSArICI9IiArIGZsYXNodmFyc09ialtpXTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXBhci5mbGFzaHZhcnMgPSBpICsgIj0iICsgZmxhc2h2YXJzT2JqW2ldOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQlhZGREb21Mb2FkRXZlbnQoZnVuY3Rpb24oKSB7CisJCQkJCWNyZWF0ZVNXRihhdHQsIHBhciwgcmVwbGFjZUVsZW1JZFN0cik7CisJCQkJCWNyZWF0ZUNTUygiIyIgKyByZXBsYWNlRWxlbUlkU3RyLCAidmlzaWJpbGl0eTp2aXNpYmxlIik7CisJCQkJfSk7CisJCQl9CisJCQllbHNlIGlmICh4aVN3ZlVybFN0ciAmJiAhaXNFeHByZXNzSW5zdGFsbEFjdGl2ZSAmJiBoYXNQbGF5ZXJWZXJzaW9uKFs2LDAsNjVdKSAmJiAodWEud2luIHx8IHVhLm1hYykpIHsKKwkJCQljcmVhdGVDU1MoIiMiICsgcmVwbGFjZUVsZW1JZFN0ciwgInZpc2liaWxpdHk6aGlkZGVuIik7CisJCQkJYWRkRG9tTG9hZEV2ZW50KGZ1bmN0aW9uKCkgeworCQkJCQl2YXIgcmVnT2JqID0ge307CisJCQkJCXJlZ09iai5pZCA9IHJlZ09iai5hbHRDb250ZW50SWQgPSByZXBsYWNlRWxlbUlkU3RyOworCQkJCQlyZWdPYmoud2lkdGggPSB3aWR0aFN0cjsKKwkJCQkJcmVnT2JqLmhlaWdodCA9IGhlaWdodFN0cjsKKwkJCQkJcmVnT2JqLmV4cHJlc3NJbnN0YWxsID0geGlTd2ZVcmxTdHI7CisJCQkJCXNob3dFeHByZXNzSW5zdGFsbChyZWdPYmopOworCQkJCQljcmVhdGVDU1MoIiMiICsgcmVwbGFjZUVsZW1JZFN0ciwgInZpc2liaWxpdHk6dmlzaWJsZSIpOworCQkJCX0pOworCQkJfQorCQl9LAorCQkKKwkJZ2V0Rmxhc2hQbGF5ZXJWZXJzaW9uOiBmdW5jdGlvbigpIHsKKwkJCXJldHVybiB7IG1ham9yOnVhLnBsYXllclZlcnNpb25bMF0sIG1pbm9yOnVhLnBsYXllclZlcnNpb25bMV0sIHJlbGVhc2U6dWEucGxheWVyVmVyc2lvblsyXSB9OworCQl9LAorCQkKKwkJaGFzRmxhc2hQbGF5ZXJWZXJzaW9uOiBmdW5jdGlvbih2ZXJzaW9uU3RyKSB7CisJCQlyZXR1cm4gaGFzUGxheWVyVmVyc2lvbih2ZXJzaW9uU3RyLnNwbGl0KCIuIikpOworCQl9LAorCQkKKwkJY3JlYXRlU1dGOiBmdW5jdGlvbihhdHRPYmosIHBhck9iaiwgcmVwbGFjZUVsZW1JZFN0cikgeworCQkJaWYgKHVhLnczY2RvbSAmJiBpc0RvbUxvYWRlZCkgeworCQkJCXJldHVybiBjcmVhdGVTV0YoYXR0T2JqLCBwYXJPYmosIHJlcGxhY2VFbGVtSWRTdHIpOworCQkJfQorCQkJZWxzZSB7CisJCQkJcmV0dXJuIHVuZGVmaW5lZDsKKwkJCX0KKwkJfSwKKwkJCisJCWNyZWF0ZUNTUzogZnVuY3Rpb24oc2VsLCBkZWNsKSB7CisJCQlpZiAodWEudzNjZG9tKSB7CisJCQkJY3JlYXRlQ1NTKHNlbCwgZGVjbCk7CisJCQl9CisJCX0sCisJCQorCQlhZGREb21Mb2FkRXZlbnQ6YWRkRG9tTG9hZEV2ZW50LAorCQkKKwkJYWRkTG9hZEV2ZW50OmFkZExvYWRFdmVudCwKKwkJCisJCWdldFF1ZXJ5UGFyYW1WYWx1ZTogZnVuY3Rpb24ocGFyYW0pIHsKKwkJCXZhciBxID0gZG9jdW1lbnQubG9jYXRpb24uc2VhcmNoIHx8IGRvY3VtZW50LmxvY2F0aW9uLmhhc2g7CisJCQlpZiAocGFyYW0gPT0gbnVsbCkgeworCQkJCXJldHVybiBxOworCQkJfQorCQkgCWlmKHEpIHsKKwkJCQl2YXIgcGFpcnMgPSBxLnN1YnN0cmluZygxKS5zcGxpdCgiJiIpOworCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgcGFpcnMubGVuZ3RoOyBpKyspIHsKKwkJCQkJaWYgKHBhaXJzW2ldLnN1YnN0cmluZygwLCBwYWlyc1tpXS5pbmRleE9mKCI9IikpID09IHBhcmFtKSB7CisJCQkJCQlyZXR1cm4gcGFpcnNbaV0uc3Vic3RyaW5nKChwYWlyc1tpXS5pbmRleE9mKCI9IikgKyAxKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gIiI7CisJCX0sCisJCQorCQkvLyBGb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQorCQlleHByZXNzSW5zdGFsbENhbGxiYWNrOiBmdW5jdGlvbigpIHsKKwkJCWlmIChpc0V4cHJlc3NJbnN0YWxsQWN0aXZlICYmIHN0b3JlZEFsdENvbnRlbnQpIHsKKwkJCQl2YXIgb2JqID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlNXRk9iamVjdEV4cHJJbnN0Iik7CisJCQkJaWYgKG9iaikgeworCQkJCQlvYmoucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoc3RvcmVkQWx0Q29udGVudCwgb2JqKTsKKwkJCQkJc3RvcmVkQWx0Q29udGVudCA9IG51bGw7CisJCQkJCWlzRXhwcmVzc0luc3RhbGxBY3RpdmUgPSBmYWxzZTsKKwkJCQl9CisJCQl9IAorCQl9CisJCQorCX07CisKK30oKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9zd2ZvYmplY3QvZXhwcmVzc2luc3RhbGwuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL3N3Zm9iamVjdC9leHByZXNzaW5zdGFsbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMTYyYWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9zd2ZvYmplY3QvZXhwcmVzc2luc3RhbGwuaHRtbApAQCAtMCwwICsxLDczIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8IS0tIHNhdmVkIGZyb20gdXJsPSgwMDE0KWFib3V0OmludGVybmV0IC0tPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KKzx0aXRsZT5TV0ZPYmplY3QgZW1iZWQgYnkgR2VvZmYgU3RlYXJucyAoZXhwcmVzcyBpbnN0YWxsKSBAIGRlY29uY2VwdDwvdGl0bGU+Cis8IS0tIFNXRk9iamVjdCBlbWJlZCBieSBHZW9mZiBTdGVhcm5zIGdlb2ZmQGRlY29uY2VwdC5jb20gaHR0cDovL2Jsb2cuZGVjb25jZXB0LmNvbS9zd2ZvYmplY3QvIC0tPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic3dmb2JqZWN0LmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisJCisJYm9keSB7CisJCWJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7CisJCWZvbnQ6IC44ZW0vMS4zZW0gdmVyZGFuYSxhcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZjsKKwl9CisKKwkjaW5mbyB7CisJCXdpZHRoOiAzMDBweDsKKwkJb3ZlcmZsb3c6IGF1dG87CisJfQorCisJI2ZsYXNoY29udGVudCB7CisJCWJvcmRlcjogc29saWQgMXB4ICMwMDA7CisJCXdpZHRoOiAzMDBweDsKKwkJaGVpZ2h0OiAzMDBweDsKKwkJZmxvYXQ6IGxlZnQ7CisJCW1hcmdpbjogMTVweCAyMHB4OworCX0KKworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCisJPGRpdiBpZD0iZmxhc2hjb250ZW50Ij4KKwkJPHN0cm9uZz5Zb3UgbmVlZCB0byB1cGdyYWRlIHlvdXIgRmxhc2ggUGxheWVyPC9zdHJvbmc+CisJCVRoaXMgaXMgcmVwbGFjZWQgYnkgdGhlIEZsYXNoIGNvbnRlbnQuIAorCQlQbGFjZSB5b3VyIGFsdGVybmF0ZSBjb250ZW50IGhlcmUgYW5kIHVzZXJzIHdpdGhvdXQgdGhlIEZsYXNoIHBsdWdpbiBvciB3aXRoIAorCQlKYXZhc2NyaXB0IHR1cm5lZCBvZmYgd2lsbCBzZWUgdGhpcy4gQ29udGVudCBoZXJlIGFsbG93cyB5b3UgdG8gbGVhdmUgb3V0IDxjb2RlPm5vc2NyaXB0PC9jb2RlPiAKKwkJdGFncy4gSW5jbHVkZSBhIGxpbmsgdG8gPGEgaHJlZj0iZXhwcmVzc2luc3RhbGwuaHRtbD9kZXRlY3RmbGFzaD1mYWxzZSI+YnlwYXNzIHRoZSBkZXRlY3Rpb248L2E+IGlmIHlvdSB3aXNoLgorCTwvZGl2PgorCisJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorCQkvLyA8IVtDREFUQVsKKwkJCisJCXZhciBzbyA9IG5ldyBTV0ZPYmplY3QoInNvX3Rlc3Rlci5zd2YiLCAic290ZXN0ZXIiLCAiMzAwIiwgIjMwMCIsICI5IiwgIiNGRjY2MDAiKTsKKwkJc28uYWRkVmFyaWFibGUoImZsYXNoVmFyVGV4dCIsICJ0aGlzIGlzIHBhc3NlZCBpbiB2aWEgRmxhc2hWYXJzIik7IC8vIHRoaXMgbGluZSBpcyBvcHRpb25hbCwgYnV0IHRoaXMgZXhhbXBsZSB1c2VzIHRoZSB2YXJpYWJsZSBhbmQgZGlzcGxheXMgdGhpcyB0ZXh0IGluc2lkZSB0aGUgZmxhc2ggbW92aWUKKwkJc28udXNlRXhwcmVzc0luc3RhbGwoJ2V4cHJlc3NpbnN0YWxsLnN3ZicpOworCQlzby53cml0ZSgiZmxhc2hjb250ZW50Iik7CisJCQorCQkvLyBdXT4KKwk8L3NjcmlwdD4KKworCTxkaXYgaWQ9ImluZm8iPgorCQk8cD4KKwkJCVRoaXMgRmxhc2ggbW92aWUgd2FzIGVtYmVkZGVkIHVzaW5nIHRoZSA8YSBocmVmPSJodHRwOi8vYmxvZy5kZWNvbmNlcHQuY29tL3N3Zm9iamVjdC8iPlNXRk9iamVjdDwvYT4gZW1iZWQgbWV0aG9kIGJ5IDxhIGhyZWY9Imh0dHA6Ly9ibG9nLmRlY29uY2VwdC5jb20vIj5HZW9mZiBTdGVhcm5zPC9hPi4KKwkJPC9wPgorCQk8cD5PdGhlciBzYW1wbGUgZW1iZWRzOjwvcD4KKwkJPHVsPgorCQkJPGxpPjxhIGhyZWY9InN3Zm9iamVjdC5odG1sIj5CYXNpYyBGbGFzaCBFbWJlZCB3aXRoIGFsdGVybmF0ZSBjb250ZW50PC9hPjwvbGk+CisJCQk8bGk+PGEgaHJlZj0iZnVsbHBhZ2UuaHRtbCI+RnVsbCBwYWdlIEZsYXNoIGVtYmVkPC9hPjwvbGk+CisJCQk8bGk+QmFzaWMgRmxhc2ggRW1iZWQgd2l0aCBFeHByZXNzIEluc3RhbGwgYWxsb3dlZDwvbGk+CisJCTwvdWw+CisJCTxwPllvdSBjYW4gYWxzbyA8YSBocmVmPSJmbGFzaHZlcnNpb24uaHRtbCI+dmlldyB5b3VyIGluc3RhbGxlZCBGbGFzaCB2ZXJzaW9uPC9hPi48L3A+CisJCTxwPgorCQkJPGEgaHJlZj0idmlldy1zb3VyY2U6aHR0cDovL2Jsb2cuZGVjb25jZXB0LmNvbS9zd2ZvYmplY3QvZXhwcmVzc2luc3RhbGwuaHRtbCI+VmlldyBzb3VyY2U8L2E+IChpbiBtb3ppbGxhLCBmaXJlZm94KSB8IDxhIGhyZWY9InN3Zm9iamVjdF9zb3VyY2UuanMiPlZpZXcgSmF2YXNjcmlwdDwvYT4uCisJCTwvcD4KKwkJPHA+CisJCQk8YSBocmVmPSJodHRwOi8vYmxvZy5kZWNvbmNlcHQuY29tL3N3Zm9iamVjdC9zd2ZvYmplY3QxLTQuemlwIj5Eb3dubG9hZCBTb3VyY2U8L2E+LgorCQk8L3A+CisJPC9kaXY+CisJCisJPHAgc3R5bGU9ImNsZWFyOiBib3RoO21hcmdpbi1sZWZ0OiAyMHB4Ij48YSBocmVmPSJodHRwOi8vdmFsaWRhdG9yLnczLm9yZy9jaGVjaz91cmk9cmVmZXJlciI+VmFsaWRhdGUgWEhUTUw8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vamlnc2F3LnczLm9yZy9jc3MtdmFsaWRhdG9yL2NoZWNrL3JlZmVyZXIiPkNTUzwvYT48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9zd2ZvYmplY3QvZXhwcmVzc2luc3RhbGwuc3dmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvc3dmb2JqZWN0L2V4cHJlc3NpbnN0YWxsLnN3ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTNkNjliCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvc3dmb2JqZWN0L2V4cHJlc3NpbnN0YWxsLnN3ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9zd2ZvYmplY3Qvc3dmb2JqZWN0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvc3dmb2JqZWN0L3N3Zm9iamVjdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2VkZDQyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvc3dmb2JqZWN0L3N3Zm9iamVjdC5qcwpAQCAtMCwwICsxLDggQEAKKy8qKgorICogU1dGT2JqZWN0IHYxLjU6IEZsYXNoIFBsYXllciBkZXRlY3Rpb24gYW5kIGVtYmVkIC0gaHR0cDovL2Jsb2cuZGVjb25jZXB0LmNvbS9zd2ZvYmplY3QvCisgKgorICogU1dGT2JqZWN0IGlzIChjKSAyMDA3IEdlb2ZmIFN0ZWFybnMgYW5kIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZToKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwCisgKgorICovCitpZih0eXBlb2YgZGVjb25jZXB0PT0idW5kZWZpbmVkIil7dmFyIGRlY29uY2VwdD1uZXcgT2JqZWN0KCk7fWlmKHR5cGVvZiBkZWNvbmNlcHQudXRpbD09InVuZGVmaW5lZCIpe2RlY29uY2VwdC51dGlsPW5ldyBPYmplY3QoKTt9aWYodHlwZW9mIGRlY29uY2VwdC5TV0ZPYmplY3RVdGlsPT0idW5kZWZpbmVkIil7ZGVjb25jZXB0LlNXRk9iamVjdFV0aWw9bmV3IE9iamVjdCgpO31kZWNvbmNlcHQuU1dGT2JqZWN0PWZ1bmN0aW9uKF8xLGlkLHcsaCxfNSxjLF83LF84LF85LF9hKXtpZighZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQpe3JldHVybjt9dGhpcy5ERVRFQ1RfS0VZPV9hP19hOiJkZXRlY3RmbGFzaCI7dGhpcy5za2lwRGV0ZWN0PWRlY29uY2VwdC51dGlsLmdldFJlcXVlc3RQYXJhbWV0ZXIodGhpcy5ERVRFQ1RfS0VZKTt0aGlzLnBhcmFtcz1uZXcgT2JqZWN0KCk7dGhpcy52YXJpYWJsZXM9bmV3IE9iamVjdCgpO3RoaXMuYXR0cmlidXRlcz1uZXcgQXJyYXkoKTtpZihfMSl7dGhpcy5zZXRBdHRyaWJ1dGUoInN3ZiIsXzEpO31pZihpZCl7dGhpcy5zZXRBdHRyaWJ1dGUoImlkIixpZCk7fWlmKHcpe3RoaXMuc2V0QXR0cmlidXRlKCJ3aWR0aCIsdyk7fWlmKGgpe3RoaXMuc2V0QXR0cmlidXRlKCJoZWlnaHQiLGgpO31pZihfNSl7dGhpcy5zZXRBdHRyaWJ1dGUoInZlcnNpb24iLG5ldyBkZWNvbmNlcHQuUGxheWVyVmVyc2lvbihfNS50b1N0cmluZygpLnNwbGl0KCIuIikpKTt9dGhpcy5pbnN0YWxsZWRWZXI9ZGVjb25jZXB0LlNXRk9iamVjdFV0aWwuZ2V0UGxheWVyVmVyc2lvbigpO2lmKCF3aW5kb3cub3BlcmEmJmRvY3VtZW50LmFsbCYmdGhpcy5pbnN0YWxsZWRWZXIubWFqb3I+Nyl7ZGVjb25jZXB0LlNXRk9iamVjdC5kb1ByZXBVbmxvYWQ9dHJ1ZTt9aWYoYyl7dGhpcy5hZGRQYXJhbSgiYmdjb2xvciIsYyk7fXZhciBxPV83P183OiJoaWdoIjt0aGlzLmFkZFBhcmFtKCJxdWFsaXR5IixxKTt0aGlzLnNldEF0dHJpYnV0ZSgidXNlRXhwcmVzc0luc3RhbGwiLGZhbHNlKTt0aGlzLnNldEF0dHJpYnV0ZSgiZG9FeHByZXNzSW5zdGFsbCIsZmFsc2UpO3ZhciBfYz0oXzgpP184OndpbmRvdy5sb2NhdGlvbjt0aGlzLnNldEF0dHJpYnV0ZSgieGlSZWRpcmVjdFVybCIsX2MpO3RoaXMuc2V0QXR0cmlidXRlKCJyZWRpcmVjdFVybCIsIiIpO2lmKF85KXt0aGlzLnNldEF0dHJpYnV0ZSgicmVkaXJlY3RVcmwiLF85KTt9fTtkZWNvbmNlcHQuU1dGT2JqZWN0LnByb3RvdHlwZT17dXNlRXhwcmVzc0luc3RhbGw6ZnVuY3Rpb24oX2Qpe3RoaXMueGlTV0ZQYXRoPSFfZD8iZXhwcmVzc2luc3RhbGwuc3dmIjpfZDt0aGlzLnNldEF0dHJpYnV0ZSgidXNlRXhwcmVzc0luc3RhbGwiLHRydWUpO30sc2V0QXR0cmlidXRlOmZ1bmN0aW9uKF9lLF9mKXt0aGlzLmF0dHJpYnV0ZXNbX2VdPV9mO30sZ2V0QXR0cmlidXRlOmZ1bmN0aW9uKF8xMCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1tfMTBdO30sYWRkUGFyYW06ZnVuY3Rpb24oXzExLF8xMil7dGhpcy5wYXJhbXNbXzExXT1fMTI7fSxnZXRQYXJhbXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJhbXM7fSxhZGRWYXJpYWJsZTpmdW5jdGlvbihfMTMsXzE0KXt0aGlzLnZhcmlhYmxlc1tfMTNdPV8xNDt9LGdldFZhcmlhYmxlOmZ1bmN0aW9uKF8xNSl7cmV0dXJuIHRoaXMudmFyaWFibGVzW18xNV07fSxnZXRWYXJpYWJsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YXJpYWJsZXM7fSxnZXRWYXJpYWJsZVBhaXJzOmZ1bmN0aW9uKCl7dmFyIF8xNj1uZXcgQXJyYXkoKTt2YXIga2V5O3ZhciBfMTg9dGhpcy5nZXRWYXJpYWJsZXMoKTtmb3Ioa2V5IGluIF8xOCl7XzE2W18xNi5sZW5ndGhdPWtleSsiPSIrXzE4W2tleV07fXJldHVybiBfMTY7fSxnZXRTV0ZIVE1MOmZ1bmN0aW9uKCl7dmFyIF8xOT0iIjtpZihuYXZpZ2F0b3IucGx1Z2lucyYmbmF2aWdhdG9yLm1pbWVUeXBlcyYmbmF2aWdhdG9yLm1pbWVUeXBlcy5sZW5ndGgpe2lmKHRoaXMuZ2V0QXR0cmlidXRlKCJkb0V4cHJlc3NJbnN0YWxsIikpe3RoaXMuYWRkVmFyaWFibGUoIk1NcGxheWVyVHlwZSIsIlBsdWdJbiIpO3RoaXMuc2V0QXR0cmlidXRlKCJzd2YiLHRoaXMueGlTV0ZQYXRoKTt9XzE5PSI8ZW1iZWQgdHlwZT1cImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoXCIgc3JjPVwiIit0aGlzLmdldEF0dHJpYnV0ZSgic3dmIikrIlwiIHdpZHRoPVwiIit0aGlzLmdldEF0dHJpYnV0ZSgid2lkdGgiKSsiXCIgaGVpZ2h0PVwiIit0aGlzLmdldEF0dHJpYnV0ZSgiaGVpZ2h0IikrIlwiIHN0eWxlPVwiIit0aGlzLmdldEF0dHJpYnV0ZSgic3R5bGUiKSsiXCIiO18xOSs9IiBpZD1cIiIrdGhpcy5nZXRBdHRyaWJ1dGUoImlkIikrIlwiIG5hbWU9XCIiK3RoaXMuZ2V0QXR0cmlidXRlKCJpZCIpKyJcIiAiO3ZhciBfMWE9dGhpcy5nZXRQYXJhbXMoKTtmb3IodmFyIGtleSBpbiBfMWEpe18xOSs9W2tleV0rIj1cIiIrXzFhW2tleV0rIlwiICI7fXZhciBfMWM9dGhpcy5nZXRWYXJpYWJsZVBhaXJzKCkuam9pbigiJiIpO2lmKF8xYy5sZW5ndGg+MCl7XzE5Kz0iZmxhc2h2YXJzPVwiIitfMWMrIlwiIjt9XzE5Kz0iLz4iO31lbHNle2lmKHRoaXMuZ2V0QXR0cmlidXRlKCJkb0V4cHJlc3NJbnN0YWxsIikpe3RoaXMuYWRkVmFyaWFibGUoIk1NcGxheWVyVHlwZSIsIkFjdGl2ZVgiKTt0aGlzLnNldEF0dHJpYnV0ZSgic3dmIix0aGlzLnhpU1dGUGF0aCk7fV8xOT0iPG9iamVjdCBpZD1cIiIrdGhpcy5nZXRBdHRyaWJ1dGUoImlkIikrIlwiIGNsYXNzaWQ9XCJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDBcIiB3aWR0aD1cIiIrdGhpcy5nZXRBdHRyaWJ1dGUoIndpZHRoIikrIlwiIGhlaWdodD1cIiIrdGhpcy5nZXRBdHRyaWJ1dGUoImhlaWdodCIpKyJcIiBzdHlsZT1cIiIrdGhpcy5nZXRBdHRyaWJ1dGUoInN0eWxlIikrIlwiPiI7XzE5Kz0iPHBhcmFtIG5hbWU9XCJtb3ZpZVwiIHZhbHVlPVwiIit0aGlzLmdldEF0dHJpYnV0ZSgic3dmIikrIlwiIC8+Ijt2YXIgXzFkPXRoaXMuZ2V0UGFyYW1zKCk7Zm9yKHZhciBrZXkgaW4gXzFkKXtfMTkrPSI8cGFyYW0gbmFtZT1cIiIra2V5KyJcIiB2YWx1ZT1cIiIrXzFkW2tleV0rIlwiIC8+Ijt9dmFyIF8xZj10aGlzLmdldFZhcmlhYmxlUGFpcnMoKS5qb2luKCImIik7aWYoXzFmLmxlbmd0aD4wKXtfMTkrPSI8cGFyYW0gbmFtZT1cImZsYXNodmFyc1wiIHZhbHVlPVwiIitfMWYrIlwiIC8+Ijt9XzE5Kz0iPC9vYmplY3Q+Ijt9cmV0dXJuIF8xOTt9LHdyaXRlOmZ1bmN0aW9uKF8yMCl7aWYodGhpcy5nZXRBdHRyaWJ1dGUoInVzZUV4cHJlc3NJbnN0YWxsIikpe3ZhciBfMjE9bmV3IGRlY29uY2VwdC5QbGF5ZXJWZXJzaW9uKFs2LDAsNjVdKTtpZih0aGlzLmluc3RhbGxlZFZlci52ZXJzaW9uSXNWYWxpZChfMjEpJiYhdGhpcy5pbnN0YWxsZWRWZXIudmVyc2lvbklzVmFsaWQodGhpcy5nZXRBdHRyaWJ1dGUoInZlcnNpb24iKSkpe3RoaXMuc2V0QXR0cmlidXRlKCJkb0V4cHJlc3NJbnN0YWxsIix0cnVlKTt0aGlzLmFkZFZhcmlhYmxlKCJNTXJlZGlyZWN0VVJMIixlc2NhcGUodGhpcy5nZXRBdHRyaWJ1dGUoInhpUmVkaXJlY3RVcmwiKSkpO2RvY3VtZW50LnRpdGxlPWRvY3VtZW50LnRpdGxlLnNsaWNlKDAsNDcpKyIgLSBGbGFzaCBQbGF5ZXIgSW5zdGFsbGF0aW9uIjt0aGlzLmFkZFZhcmlhYmxlKCJNTWRvY3RpdGxlIixkb2N1bWVudC50aXRsZSk7fX1pZih0aGlzLnNraXBEZXRlY3R8fHRoaXMuZ2V0QXR0cmlidXRlKCJkb0V4cHJlc3NJbnN0YWxsIil8fHRoaXMuaW5zdGFsbGVkVmVyLnZlcnNpb25Jc1ZhbGlkKHRoaXMuZ2V0QXR0cmlidXRlKCJ2ZXJzaW9uIikpKXt2YXIgbj0odHlwZW9mIF8yMD09InN0cmluZyIpP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKF8yMCk6XzIwO24uaW5uZXJIVE1MPXRoaXMuZ2V0U1dGSFRNTCgpO3JldHVybiB0cnVlO31lbHNle2lmKHRoaXMuZ2V0QXR0cmlidXRlKCJyZWRpcmVjdFVybCIpIT0iIil7ZG9jdW1lbnQubG9jYXRpb24ucmVwbGFjZSh0aGlzLmdldEF0dHJpYnV0ZSgicmVkaXJlY3RVcmwiKSk7fX1yZXR1cm4gZmFsc2U7fX07ZGVjb25jZXB0LlNXRk9iamVjdFV0aWwuZ2V0UGxheWVyVmVyc2lvbj1mdW5jdGlvbigpe3ZhciBfMjM9bmV3IGRlY29uY2VwdC5QbGF5ZXJWZXJzaW9uKFswLDAsMF0pO2lmKG5hdmlnYXRvci5wbHVnaW5zJiZuYXZpZ2F0b3IubWltZVR5cGVzLmxlbmd0aCl7dmFyIHg9bmF2aWdhdG9yLnBsdWdpbnNbIlNob2Nrd2F2ZSBGbGFzaCJdO2lmKHgmJnguZGVzY3JpcHRpb24pe18yMz1uZXcgZGVjb25jZXB0LlBsYXllclZlcnNpb24oeC5kZXNjcmlwdGlvbi5yZXBsYWNlKC8oW2EtekEtWl18XHMpKy8sIiIpLnJlcGxhY2UoLyhccytyfFxzK2JbMC05XSspLywiLiIpLnNwbGl0KCIuIikpO319ZWxzZXtpZihuYXZpZ2F0b3IudXNlckFnZW50JiZuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIldpbmRvd3MgQ0UiKT49MCl7dmFyIGF4bz0xO3ZhciBfMjY9Mzt3aGlsZShheG8pe3RyeXtfMjYrKztheG89bmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoLiIrXzI2KTtfMjM9bmV3IGRlY29uY2VwdC5QbGF5ZXJWZXJzaW9uKFtfMjYsMCwwXSk7fWNhdGNoKGUpe2F4bz1udWxsO319fWVsc2V7dHJ5e3ZhciBheG89bmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoLjciKTt9Y2F0Y2goZSl7dHJ5e3ZhciBheG89bmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoLjYiKTtfMjM9bmV3IGRlY29uY2VwdC5QbGF5ZXJWZXJzaW9uKFs2LDAsMjFdKTtheG8uQWxsb3dTY3JpcHRBY2Nlc3M9ImFsd2F5cyI7fWNhdGNoKGUpe2lmKF8yMy5tYWpvcj09Nil7cmV0dXJuIF8yMzt9fXRyeXtheG89bmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoIik7fWNhdGNoKGUpe319aWYoYXhvIT1udWxsKXtfMjM9bmV3IGRlY29uY2VwdC5QbGF5ZXJWZXJzaW9uKGF4by5HZXRWYXJpYWJsZSgiJHZlcnNpb24iKS5zcGxpdCgiICIpWzFdLnNwbGl0KCIsIikpO319fXJldHVybiBfMjM7fTtkZWNvbmNlcHQuUGxheWVyVmVyc2lvbj1mdW5jdGlvbihfMjkpe3RoaXMubWFqb3I9XzI5WzBdIT1udWxsP3BhcnNlSW50KF8yOVswXSk6MDt0aGlzLm1pbm9yPV8yOVsxXSE9bnVsbD9wYXJzZUludChfMjlbMV0pOjA7dGhpcy5yZXY9XzI5WzJdIT1udWxsP3BhcnNlSW50KF8yOVsyXSk6MDt9O2RlY29uY2VwdC5QbGF5ZXJWZXJzaW9uLnByb3RvdHlwZS52ZXJzaW9uSXNWYWxpZD1mdW5jdGlvbihmdil7aWYodGhpcy5tYWpvcjxmdi5tYWpvcil7cmV0dXJuIGZhbHNlO31pZih0aGlzLm1ham9yPmZ2Lm1ham9yKXtyZXR1cm4gdHJ1ZTt9aWYodGhpcy5taW5vcjxmdi5taW5vcil7cmV0dXJuIGZhbHNlO31pZih0aGlzLm1pbm9yPmZ2Lm1pbm9yKXtyZXR1cm4gdHJ1ZTt9aWYodGhpcy5yZXY8ZnYucmV2KXtyZXR1cm4gZmFsc2U7fXJldHVybiB0cnVlO307ZGVjb25jZXB0LnV0aWw9e2dldFJlcXVlc3RQYXJhbWV0ZXI6ZnVuY3Rpb24oXzJiKXt2YXIgcT1kb2N1bWVudC5sb2NhdGlvbi5zZWFyY2h8fGRvY3VtZW50LmxvY2F0aW9uLmhhc2g7aWYoXzJiPT1udWxsKXtyZXR1cm4gcTt9aWYocSl7dmFyIF8yZD1xLnN1YnN0cmluZygxKS5zcGxpdCgiJiIpO2Zvcih2YXIgaT0wO2k8XzJkLmxlbmd0aDtpKyspe2lmKF8yZFtpXS5zdWJzdHJpbmcoMCxfMmRbaV0uaW5kZXhPZigiPSIpKT09XzJiKXtyZXR1cm4gXzJkW2ldLnN1YnN0cmluZygoXzJkW2ldLmluZGV4T2YoIj0iKSsxKSk7fX19cmV0dXJuICIiO319O2RlY29uY2VwdC5TV0ZPYmplY3RVdGlsLmNsZWFudXBTV0ZzPWZ1bmN0aW9uKCl7dmFyIF8yZj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiT0JKRUNUIik7Zm9yKHZhciBpPV8yZi5sZW5ndGgtMTtpPj0wO2ktLSl7XzJmW2ldLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2Zvcih2YXIgeCBpbiBfMmZbaV0pe2lmKHR5cGVvZiBfMmZbaV1beF09PSJmdW5jdGlvbiIpe18yZltpXVt4XT1mdW5jdGlvbigpe307fX19fTtpZihkZWNvbmNlcHQuU1dGT2JqZWN0LmRvUHJlcFVubG9hZCl7aWYoIWRlY29uY2VwdC51bmxvYWRTZXQpe2RlY29uY2VwdC5TV0ZPYmplY3RVdGlsLnByZXBVbmxvYWQ9ZnVuY3Rpb24oKXtfX2ZsYXNoX3VubG9hZEhhbmRsZXI9ZnVuY3Rpb24oKXt9O19fZmxhc2hfc2F2ZWRVbmxvYWRIYW5kbGVyPWZ1bmN0aW9uKCl7fTt3aW5kb3cuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixkZWNvbmNlcHQuU1dGT2JqZWN0VXRpbC5jbGVhbnVwU1dGcyk7fTt3aW5kb3cuYXR0YWNoRXZlbnQoIm9uYmVmb3JldW5sb2FkIixkZWNvbmNlcHQuU1dGT2JqZWN0VXRpbC5wcmVwVW5sb2FkKTtkZWNvbmNlcHQudW5sb2FkU2V0PXRydWU7fX1pZighZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQmJmRvY3VtZW50LmFsbCl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQ9ZnVuY3Rpb24oaWQpe3JldHVybiBkb2N1bWVudC5hbGxbaWRdO307fXZhciBnZXRRdWVyeVBhcmFtVmFsdWU9ZGVjb25jZXB0LnV0aWwuZ2V0UmVxdWVzdFBhcmFtZXRlcjt2YXIgRmxhc2hPYmplY3Q9ZGVjb25jZXB0LlNXRk9iamVjdDt2YXIgU1dGT2JqZWN0PWRlY29uY2VwdC5TV0ZPYmplY3Q7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvc3dmb2JqZWN0L3N3Zm9iamVjdF9zb3VyY2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0ltYWdlTWFuYWdlci9zd2ZvYmplY3Qvc3dmb2JqZWN0X3NvdXJjZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYWEyNTZhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvc3dmb2JqZWN0L3N3Zm9iamVjdF9zb3VyY2UuanMKQEAgLTAsMCArMSwyMzMgQEAKKy8qKgorICogU1dGT2JqZWN0IHYxLjU6IEZsYXNoIFBsYXllciBkZXRlY3Rpb24gYW5kIGVtYmVkIC0gaHR0cDovL2Jsb2cuZGVjb25jZXB0LmNvbS9zd2ZvYmplY3QvCisgKgorICogU1dGT2JqZWN0IGlzIChjKSAyMDA3IEdlb2ZmIFN0ZWFybnMgYW5kIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZToKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwCisgKgorICovCitpZih0eXBlb2YgZGVjb25jZXB0ID09ICJ1bmRlZmluZWQiKSB2YXIgZGVjb25jZXB0ID0gbmV3IE9iamVjdCgpOworaWYodHlwZW9mIGRlY29uY2VwdC51dGlsID09ICJ1bmRlZmluZWQiKSBkZWNvbmNlcHQudXRpbCA9IG5ldyBPYmplY3QoKTsKK2lmKHR5cGVvZiBkZWNvbmNlcHQuU1dGT2JqZWN0VXRpbCA9PSAidW5kZWZpbmVkIikgZGVjb25jZXB0LlNXRk9iamVjdFV0aWwgPSBuZXcgT2JqZWN0KCk7CitkZWNvbmNlcHQuU1dGT2JqZWN0ID0gZnVuY3Rpb24oc3dmLCBpZCwgdywgaCwgdmVyLCBjLCBxdWFsaXR5LCB4aVJlZGlyZWN0VXJsLCByZWRpcmVjdFVybCwgZGV0ZWN0S2V5KSB7CisJaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCkgeyByZXR1cm47IH0KKwl0aGlzLkRFVEVDVF9LRVkgPSBkZXRlY3RLZXkgPyBkZXRlY3RLZXkgOiAnZGV0ZWN0Zmxhc2gnOworCXRoaXMuc2tpcERldGVjdCA9IGRlY29uY2VwdC51dGlsLmdldFJlcXVlc3RQYXJhbWV0ZXIodGhpcy5ERVRFQ1RfS0VZKTsKKwl0aGlzLnBhcmFtcyA9IG5ldyBPYmplY3QoKTsKKwl0aGlzLnZhcmlhYmxlcyA9IG5ldyBPYmplY3QoKTsKKwl0aGlzLmF0dHJpYnV0ZXMgPSBuZXcgQXJyYXkoKTsKKwlpZihzd2YpIHsgdGhpcy5zZXRBdHRyaWJ1dGUoJ3N3ZicsIHN3Zik7IH0KKwlpZihpZCkgeyB0aGlzLnNldEF0dHJpYnV0ZSgnaWQnLCBpZCk7IH0KKwlpZih3KSB7IHRoaXMuc2V0QXR0cmlidXRlKCd3aWR0aCcsIHcpOyB9CisJaWYoaCkgeyB0aGlzLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgaCk7IH0KKwlpZih2ZXIpIHsgdGhpcy5zZXRBdHRyaWJ1dGUoJ3ZlcnNpb24nLCBuZXcgZGVjb25jZXB0LlBsYXllclZlcnNpb24odmVyLnRvU3RyaW5nKCkuc3BsaXQoIi4iKSkpOyB9CisJdGhpcy5pbnN0YWxsZWRWZXIgPSBkZWNvbmNlcHQuU1dGT2JqZWN0VXRpbC5nZXRQbGF5ZXJWZXJzaW9uKCk7CisJaWYgKCF3aW5kb3cub3BlcmEgJiYgZG9jdW1lbnQuYWxsICYmIHRoaXMuaW5zdGFsbGVkVmVyLm1ham9yID4gNykgeworCQkvLyBvbmx5IGFkZCB0aGUgb251bmxvYWQgY2xlYW51cCBpZiB0aGUgRmxhc2ggUGxheWVyIHZlcnNpb24gc3VwcG9ydHMgRXh0ZXJuYWwgSW50ZXJmYWNlIGFuZCB3ZSBhcmUgaW4gSUUKKwkJZGVjb25jZXB0LlNXRk9iamVjdC5kb1ByZXBVbmxvYWQgPSB0cnVlOworCX0KKwlpZihjKSB7IHRoaXMuYWRkUGFyYW0oJ2JnY29sb3InLCBjKTsgfQorCXZhciBxID0gcXVhbGl0eSA/IHF1YWxpdHkgOiAnaGlnaCc7CisJdGhpcy5hZGRQYXJhbSgncXVhbGl0eScsIHEpOworCXRoaXMuc2V0QXR0cmlidXRlKCd1c2VFeHByZXNzSW5zdGFsbCcsIGZhbHNlKTsKKwl0aGlzLnNldEF0dHJpYnV0ZSgnZG9FeHByZXNzSW5zdGFsbCcsIGZhbHNlKTsKKwl2YXIgeGlyID0gKHhpUmVkaXJlY3RVcmwpID8geGlSZWRpcmVjdFVybCA6IHdpbmRvdy5sb2NhdGlvbjsKKwl0aGlzLnNldEF0dHJpYnV0ZSgneGlSZWRpcmVjdFVybCcsIHhpcik7CisJdGhpcy5zZXRBdHRyaWJ1dGUoJ3JlZGlyZWN0VXJsJywgJycpOworCWlmKHJlZGlyZWN0VXJsKSB7IHRoaXMuc2V0QXR0cmlidXRlKCdyZWRpcmVjdFVybCcsIHJlZGlyZWN0VXJsKTsgfQorfQorZGVjb25jZXB0LlNXRk9iamVjdC5wcm90b3R5cGUgPSB7CisJdXNlRXhwcmVzc0luc3RhbGw6IGZ1bmN0aW9uKHBhdGgpIHsKKwkJdGhpcy54aVNXRlBhdGggPSAhcGF0aCA/ICJleHByZXNzaW5zdGFsbC5zd2YiIDogcGF0aDsKKwkJdGhpcy5zZXRBdHRyaWJ1dGUoJ3VzZUV4cHJlc3NJbnN0YWxsJywgdHJ1ZSk7CisJfSwKKwlzZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXsKKwkJdGhpcy5hdHRyaWJ1dGVzW25hbWVdID0gdmFsdWU7CisJfSwKKwlnZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uKG5hbWUpeworCQlyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW25hbWVdOworCX0sCisJYWRkUGFyYW06IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXsKKwkJdGhpcy5wYXJhbXNbbmFtZV0gPSB2YWx1ZTsKKwl9LAorCWdldFBhcmFtczogZnVuY3Rpb24oKXsKKwkJcmV0dXJuIHRoaXMucGFyYW1zOworCX0sCisJYWRkVmFyaWFibGU6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXsKKwkJdGhpcy52YXJpYWJsZXNbbmFtZV0gPSB2YWx1ZTsKKwl9LAorCWdldFZhcmlhYmxlOiBmdW5jdGlvbihuYW1lKXsKKwkJcmV0dXJuIHRoaXMudmFyaWFibGVzW25hbWVdOworCX0sCisJZ2V0VmFyaWFibGVzOiBmdW5jdGlvbigpeworCQlyZXR1cm4gdGhpcy52YXJpYWJsZXM7CisJfSwKKwlnZXRWYXJpYWJsZVBhaXJzOiBmdW5jdGlvbigpeworCQl2YXIgdmFyaWFibGVQYWlycyA9IG5ldyBBcnJheSgpOworCQl2YXIga2V5OworCQl2YXIgdmFyaWFibGVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKTsKKwkJZm9yKGtleSBpbiB2YXJpYWJsZXMpeworCQkJdmFyaWFibGVQYWlyc1t2YXJpYWJsZVBhaXJzLmxlbmd0aF0gPSBrZXkgKyI9IisgdmFyaWFibGVzW2tleV07CisJCX0KKwkJcmV0dXJuIHZhcmlhYmxlUGFpcnM7CisJfSwKKwlnZXRTV0ZIVE1MOiBmdW5jdGlvbigpIHsKKwkJdmFyIHN3Zk5vZGUgPSAiIjsKKwkJaWYgKG5hdmlnYXRvci5wbHVnaW5zICYmIG5hdmlnYXRvci5taW1lVHlwZXMgJiYgbmF2aWdhdG9yLm1pbWVUeXBlcy5sZW5ndGgpIHsgLy8gbmV0c2NhcGUgcGx1Z2luIGFyY2hpdGVjdHVyZQorCQkJaWYgKHRoaXMuZ2V0QXR0cmlidXRlKCJkb0V4cHJlc3NJbnN0YWxsIikpIHsKKwkJCQl0aGlzLmFkZFZhcmlhYmxlKCJNTXBsYXllclR5cGUiLCAiUGx1Z0luIik7CisJCQkJdGhpcy5zZXRBdHRyaWJ1dGUoJ3N3ZicsIHRoaXMueGlTV0ZQYXRoKTsKKwkJCX0KKwkJCXN3Zk5vZGUgPSAnPGVtYmVkIHR5cGU9ImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIiBzcmM9IicrIHRoaXMuZ2V0QXR0cmlidXRlKCdzd2YnKSArJyIgd2lkdGg9IicrIHRoaXMuZ2V0QXR0cmlidXRlKCd3aWR0aCcpICsnIiBoZWlnaHQ9IicrIHRoaXMuZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSArJyIgc3R5bGU9IicrIHRoaXMuZ2V0QXR0cmlidXRlKCdzdHlsZScpICsnIic7CisJCQlzd2ZOb2RlICs9ICcgaWQ9IicrIHRoaXMuZ2V0QXR0cmlidXRlKCdpZCcpICsnIiBuYW1lPSInKyB0aGlzLmdldEF0dHJpYnV0ZSgnaWQnKSArJyIgJzsKKwkJCXZhciBwYXJhbXMgPSB0aGlzLmdldFBhcmFtcygpOworCQkJIGZvcih2YXIga2V5IGluIHBhcmFtcyl7IHN3Zk5vZGUgKz0gW2tleV0gKyc9IicrIHBhcmFtc1trZXldICsnIiAnOyB9CisJCQl2YXIgcGFpcnMgPSB0aGlzLmdldFZhcmlhYmxlUGFpcnMoKS5qb2luKCImIik7CisJCQkgaWYgKHBhaXJzLmxlbmd0aCA+IDApeyBzd2ZOb2RlICs9ICdmbGFzaHZhcnM9IicrIHBhaXJzICsnIic7IH0KKwkJCXN3Zk5vZGUgKz0gJy8+JzsKKwkJfSBlbHNlIHsgLy8gUEMgSUUKKwkJCWlmICh0aGlzLmdldEF0dHJpYnV0ZSgiZG9FeHByZXNzSW5zdGFsbCIpKSB7CisJCQkJdGhpcy5hZGRWYXJpYWJsZSgiTU1wbGF5ZXJUeXBlIiwgIkFjdGl2ZVgiKTsKKwkJCQl0aGlzLnNldEF0dHJpYnV0ZSgnc3dmJywgdGhpcy54aVNXRlBhdGgpOworCQkJfQorCQkJc3dmTm9kZSA9ICc8b2JqZWN0IGlkPSInKyB0aGlzLmdldEF0dHJpYnV0ZSgnaWQnKSArJyIgY2xhc3NpZD0iY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIiB3aWR0aD0iJysgdGhpcy5nZXRBdHRyaWJ1dGUoJ3dpZHRoJykgKyciIGhlaWdodD0iJysgdGhpcy5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpICsnIiBzdHlsZT0iJysgdGhpcy5nZXRBdHRyaWJ1dGUoJ3N0eWxlJykgKyciPic7CisJCQlzd2ZOb2RlICs9ICc8cGFyYW0gbmFtZT0ibW92aWUiIHZhbHVlPSInKyB0aGlzLmdldEF0dHJpYnV0ZSgnc3dmJykgKyciIC8+JzsKKwkJCXZhciBwYXJhbXMgPSB0aGlzLmdldFBhcmFtcygpOworCQkJZm9yKHZhciBrZXkgaW4gcGFyYW1zKSB7CisJCQkgc3dmTm9kZSArPSAnPHBhcmFtIG5hbWU9IicrIGtleSArJyIgdmFsdWU9IicrIHBhcmFtc1trZXldICsnIiAvPic7CisJCQl9CisJCQl2YXIgcGFpcnMgPSB0aGlzLmdldFZhcmlhYmxlUGFpcnMoKS5qb2luKCImIik7CisJCQlpZihwYWlycy5sZW5ndGggPiAwKSB7c3dmTm9kZSArPSAnPHBhcmFtIG5hbWU9ImZsYXNodmFycyIgdmFsdWU9IicrIHBhaXJzICsnIiAvPic7fQorCQkJc3dmTm9kZSArPSAiPC9vYmplY3Q+IjsKKwkJfQorCQlyZXR1cm4gc3dmTm9kZTsKKwl9LAorCXdyaXRlOiBmdW5jdGlvbihlbGVtZW50SWQpeworCQlpZih0aGlzLmdldEF0dHJpYnV0ZSgndXNlRXhwcmVzc0luc3RhbGwnKSkgeworCQkJLy8gY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gZG8gYW4gZXhwcmVzcyBpbnN0YWxsCisJCQl2YXIgZXhwcmVzc0luc3RhbGxSZXFWZXIgPSBuZXcgZGVjb25jZXB0LlBsYXllclZlcnNpb24oWzYsMCw2NV0pOworCQkJaWYgKHRoaXMuaW5zdGFsbGVkVmVyLnZlcnNpb25Jc1ZhbGlkKGV4cHJlc3NJbnN0YWxsUmVxVmVyKSAmJiAhdGhpcy5pbnN0YWxsZWRWZXIudmVyc2lvbklzVmFsaWQodGhpcy5nZXRBdHRyaWJ1dGUoJ3ZlcnNpb24nKSkpIHsKKwkJCQl0aGlzLnNldEF0dHJpYnV0ZSgnZG9FeHByZXNzSW5zdGFsbCcsIHRydWUpOworCQkJCXRoaXMuYWRkVmFyaWFibGUoIk1NcmVkaXJlY3RVUkwiLCBlc2NhcGUodGhpcy5nZXRBdHRyaWJ1dGUoJ3hpUmVkaXJlY3RVcmwnKSkpOworCQkJCWRvY3VtZW50LnRpdGxlID0gZG9jdW1lbnQudGl0bGUuc2xpY2UoMCwgNDcpICsgIiAtIEZsYXNoIFBsYXllciBJbnN0YWxsYXRpb24iOworCQkJCXRoaXMuYWRkVmFyaWFibGUoIk1NZG9jdGl0bGUiLCBkb2N1bWVudC50aXRsZSk7CisJCQl9CisJCX0KKwkJaWYodGhpcy5za2lwRGV0ZWN0IHx8IHRoaXMuZ2V0QXR0cmlidXRlKCdkb0V4cHJlc3NJbnN0YWxsJykgfHwgdGhpcy5pbnN0YWxsZWRWZXIudmVyc2lvbklzVmFsaWQodGhpcy5nZXRBdHRyaWJ1dGUoJ3ZlcnNpb24nKSkpeworCQkJdmFyIG4gPSAodHlwZW9mIGVsZW1lbnRJZCA9PSAnc3RyaW5nJykgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpIDogZWxlbWVudElkOworCQkJbi5pbm5lckhUTUwgPSB0aGlzLmdldFNXRkhUTUwoKTsKKwkJCXJldHVybiB0cnVlOworCQl9ZWxzZXsKKwkJCWlmKHRoaXMuZ2V0QXR0cmlidXRlKCdyZWRpcmVjdFVybCcpICE9ICIiKSB7CisJCQkJZG9jdW1lbnQubG9jYXRpb24ucmVwbGFjZSh0aGlzLmdldEF0dHJpYnV0ZSgncmVkaXJlY3RVcmwnKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworLyogLS0tLSBkZXRlY3Rpb24gZnVuY3Rpb25zIC0tLS0gKi8KK2RlY29uY2VwdC5TV0ZPYmplY3RVdGlsLmdldFBsYXllclZlcnNpb24gPSBmdW5jdGlvbigpeworCXZhciBQbGF5ZXJWZXJzaW9uID0gbmV3IGRlY29uY2VwdC5QbGF5ZXJWZXJzaW9uKFswLDAsMF0pOworCWlmKG5hdmlnYXRvci5wbHVnaW5zICYmIG5hdmlnYXRvci5taW1lVHlwZXMubGVuZ3RoKXsKKwkJdmFyIHggPSBuYXZpZ2F0b3IucGx1Z2luc1siU2hvY2t3YXZlIEZsYXNoIl07CisJCWlmKHggJiYgeC5kZXNjcmlwdGlvbikgeworCQkJUGxheWVyVmVyc2lvbiA9IG5ldyBkZWNvbmNlcHQuUGxheWVyVmVyc2lvbih4LmRlc2NyaXB0aW9uLnJlcGxhY2UoLyhbYS16QS1aXXxccykrLywgIiIpLnJlcGxhY2UoLyhccytyfFxzK2JbMC05XSspLywgIi4iKS5zcGxpdCgiLiIpKTsKKwkJfQorCX1lbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiV2luZG93cyBDRSIpID49IDApeyAvLyBpZiBXaW5kb3dzIENFCisJCXZhciBheG8gPSAxOworCQl2YXIgY291bnRlciA9IDM7CisJCXdoaWxlKGF4bykgeworCQkJdHJ5IHsKKwkJCQljb3VudGVyKys7CisJCQkJYXhvID0gbmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoLiIrIGNvdW50ZXIpOworLy8JCQkJZG9jdW1lbnQud3JpdGUoInBsYXllciB2OiAiKyBjb3VudGVyKTsKKwkJCQlQbGF5ZXJWZXJzaW9uID0gbmV3IGRlY29uY2VwdC5QbGF5ZXJWZXJzaW9uKFtjb3VudGVyLDAsMF0pOworCQkJfSBjYXRjaCAoZSkgeworCQkJCWF4byA9IG51bGw7CisJCQl9CisJCX0KKwl9IGVsc2UgeyAvLyBXaW4gSUUgKG5vbiBtb2JpbGUpCisJCS8vIGRvIG1pbm9yIHZlcnNpb24gbG9va3VwIGluIElFLCBidXQgYXZvaWQgZnA2IGNyYXNoaW5nIGlzc3VlcworCQkvLyBzZWUgaHR0cDovL2Jsb2cuZGVjb25jZXB0LmNvbS8yMDA2LzAxLzExL2dldHZhcmlhYmxlLXNldHZhcmlhYmxlLWNyYXNoLWludGVybmV0LWV4cGxvcmVyLWZsYXNoLTYvCisJCXRyeXsKKwkJCXZhciBheG8gPSBuZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2guNyIpOworCQl9Y2F0Y2goZSl7CisJCQl0cnkgeworCQkJCXZhciBheG8gPSBuZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2guNiIpOworCQkJCVBsYXllclZlcnNpb24gPSBuZXcgZGVjb25jZXB0LlBsYXllclZlcnNpb24oWzYsMCwyMV0pOworCQkJCWF4by5BbGxvd1NjcmlwdEFjY2VzcyA9ICJhbHdheXMiOyAvLyBlcnJvciBpZiBwbGF5ZXIgdmVyc2lvbiA8IDYuMC40NyAodGhhbmtzIHRvIE1pY2hhZWwgV2lsbGlhbXMgQCBBZG9iZSBmb3IgdGhpcyBjb2RlKQorCQkJfSBjYXRjaChlKSB7CisJCQkJaWYgKFBsYXllclZlcnNpb24ubWFqb3IgPT0gNikgeworCQkJCQlyZXR1cm4gUGxheWVyVmVyc2lvbjsKKwkJCQl9CisJCQl9CisJCQl0cnkgeworCQkJCWF4byA9IG5ldyBBY3RpdmVYT2JqZWN0KCJTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFzaCIpOworCQkJfSBjYXRjaChlKSB7fQorCQl9CisJCWlmIChheG8gIT0gbnVsbCkgeworCQkJUGxheWVyVmVyc2lvbiA9IG5ldyBkZWNvbmNlcHQuUGxheWVyVmVyc2lvbihheG8uR2V0VmFyaWFibGUoIiR2ZXJzaW9uIikuc3BsaXQoIiAiKVsxXS5zcGxpdCgiLCIpKTsKKwkJfQorCX0KKwlyZXR1cm4gUGxheWVyVmVyc2lvbjsKK30KK2RlY29uY2VwdC5QbGF5ZXJWZXJzaW9uID0gZnVuY3Rpb24oYXJyVmVyc2lvbil7CisJdGhpcy5tYWpvciA9IGFyclZlcnNpb25bMF0gIT0gbnVsbCA/IHBhcnNlSW50KGFyclZlcnNpb25bMF0pIDogMDsKKwl0aGlzLm1pbm9yID0gYXJyVmVyc2lvblsxXSAhPSBudWxsID8gcGFyc2VJbnQoYXJyVmVyc2lvblsxXSkgOiAwOworCXRoaXMucmV2ID0gYXJyVmVyc2lvblsyXSAhPSBudWxsID8gcGFyc2VJbnQoYXJyVmVyc2lvblsyXSkgOiAwOworfQorZGVjb25jZXB0LlBsYXllclZlcnNpb24ucHJvdG90eXBlLnZlcnNpb25Jc1ZhbGlkID0gZnVuY3Rpb24oZnYpeworCWlmKHRoaXMubWFqb3IgPCBmdi5tYWpvcikgcmV0dXJuIGZhbHNlOworCWlmKHRoaXMubWFqb3IgPiBmdi5tYWpvcikgcmV0dXJuIHRydWU7CisJaWYodGhpcy5taW5vciA8IGZ2Lm1pbm9yKSByZXR1cm4gZmFsc2U7CisJaWYodGhpcy5taW5vciA+IGZ2Lm1pbm9yKSByZXR1cm4gdHJ1ZTsKKwlpZih0aGlzLnJldiA8IGZ2LnJldikgcmV0dXJuIGZhbHNlOworCXJldHVybiB0cnVlOworfQorLyogLS0tLSBnZXQgdmFsdWUgb2YgcXVlcnkgc3RyaW5nIHBhcmFtIC0tLS0gKi8KK2RlY29uY2VwdC51dGlsID0geworCWdldFJlcXVlc3RQYXJhbWV0ZXI6IGZ1bmN0aW9uKHBhcmFtKSB7CisJCXZhciBxID0gZG9jdW1lbnQubG9jYXRpb24uc2VhcmNoIHx8IGRvY3VtZW50LmxvY2F0aW9uLmhhc2g7CisJCWlmIChwYXJhbSA9PSBudWxsKSB7IHJldHVybiBxOyB9CisJCWlmKHEpIHsKKwkJCXZhciBwYWlycyA9IHEuc3Vic3RyaW5nKDEpLnNwbGl0KCImIik7CisJCQlmb3IgKHZhciBpPTA7IGkgPCBwYWlycy5sZW5ndGg7IGkrKykgeworCQkJCWlmIChwYWlyc1tpXS5zdWJzdHJpbmcoMCwgcGFpcnNbaV0uaW5kZXhPZigiPSIpKSA9PSBwYXJhbSkgeworCQkJCQlyZXR1cm4gcGFpcnNbaV0uc3Vic3RyaW5nKChwYWlyc1tpXS5pbmRleE9mKCI9IikrMSkpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gIiI7CisJfQorfQorLyogZml4IGZvciB2aWRlbyBzdHJlYW1pbmcgYnVnICovCitkZWNvbmNlcHQuU1dGT2JqZWN0VXRpbC5jbGVhbnVwU1dGcyA9IGZ1bmN0aW9uKCkgeworCXZhciBvYmplY3RzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIk9CSkVDVCIpOworCWZvciAodmFyIGkgPSBvYmplY3RzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCW9iamVjdHNbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKwkJZm9yICh2YXIgeCBpbiBvYmplY3RzW2ldKSB7CisJCQlpZiAodHlwZW9mIG9iamVjdHNbaV1beF0gPT0gJ2Z1bmN0aW9uJykgeworCQkJCW9iamVjdHNbaV1beF0gPSBmdW5jdGlvbigpe307CisJCQl9CisJCX0KKwl9Cit9CisvLyBmaXhlcyBidWcgaW4gc29tZSBmcDkgdmVyc2lvbnMgc2VlIGh0dHA6Ly9ibG9nLmRlY29uY2VwdC5jb20vMjAwNi8wNy8yOC9zd2ZvYmplY3QtMTQzLXJlbGVhc2VkLworaWYgKGRlY29uY2VwdC5TV0ZPYmplY3QuZG9QcmVwVW5sb2FkKSB7CisJaWYgKCFkZWNvbmNlcHQudW5sb2FkU2V0KSB7CisJCWRlY29uY2VwdC5TV0ZPYmplY3RVdGlsLnByZXBVbmxvYWQgPSBmdW5jdGlvbigpIHsKKwkJCV9fZmxhc2hfdW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCl7fTsKKwkJCV9fZmxhc2hfc2F2ZWRVbmxvYWRIYW5kbGVyID0gZnVuY3Rpb24oKXt9OworCQkJd2luZG93LmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsIGRlY29uY2VwdC5TV0ZPYmplY3RVdGlsLmNsZWFudXBTV0ZzKTsKKwkJfQorCQl3aW5kb3cuYXR0YWNoRXZlbnQoIm9uYmVmb3JldW5sb2FkIiwgZGVjb25jZXB0LlNXRk9iamVjdFV0aWwucHJlcFVubG9hZCk7CisJCWRlY29uY2VwdC51bmxvYWRTZXQgPSB0cnVlOworCX0KK30KKy8qIGFkZCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCBpZiBuZWVkZWQgKG1vYmlsZSBJRSA8IDUpICovCitpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkICYmIGRvY3VtZW50LmFsbCkgeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCA9IGZ1bmN0aW9uKGlkKSB7IHJldHVybiBkb2N1bWVudC5hbGxbaWRdOyB9fQorCisvKiBhZGQgc29tZSBhbGlhc2VzIGZvciBlYXNlIG9mIHVzZS9iYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwordmFyIGdldFF1ZXJ5UGFyYW1WYWx1ZSA9IGRlY29uY2VwdC51dGlsLmdldFJlcXVlc3RQYXJhbWV0ZXI7Cit2YXIgRmxhc2hPYmplY3QgPSBkZWNvbmNlcHQuU1dGT2JqZWN0OyAvLyBmb3IgbGVnYWN5IHN1cHBvcnQKK3ZhciBTV0ZPYmplY3QgPSBkZWNvbmNlcHQuU1dGT2JqZWN0OwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIvdGh1bWJzLnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL3RodW1icy5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkxOTg2ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL3RodW1icy5waHAKQEAgLTAsMCArMSwxMDAgQEAKKzw/cGhwCisvKioKKyAqIE9uIHRoZSBmbHkgVGh1bWJuYWlsIGdlbmVyYXRpb24uCisgKiBDcmVhdGVzIHRodW1ibmFpbHMgZ2l2ZW4gYnkgdGh1bWJzLnBocD9pbWc9L3JlbGF0aXZlL3BhdGgvdG8vaW1hZ2UuanBnCisgKiByZWxhdGl2ZSB0byB0aGUgYmFzZV9kaXIgZ2l2ZW4gaW4gY29uZmlnLmluYy5waHAKKyAqIEBhdXRob3IgJEF1dGhvcjpyYXkgJAorICogQHZlcnNpb24gJElkOnRodW1icy5waHAgNjc3IDIwMDctMDEtMTkgMjI6MjQ6MzZaIHJheSAkCisgKiBAcGFja2FnZSBJbWFnZU1hbmFnZXIKKyAqLworCityZXF1aXJlX29uY2UoJ2NvbmZpZy5pbmMucGhwJyk7CityZXF1aXJlX29uY2UoJ0NsYXNzZXMvSW1hZ2VNYW5hZ2VyLnBocCcpOworcmVxdWlyZV9vbmNlKCdDbGFzc2VzL1RodW1ibmFpbC5waHAnKTsKKworLy9jaGVjayBmb3IgaW1nIHBhcmFtZXRlciBpbiB0aGUgdXJsCitpZighaXNzZXQoJF9HRVRbJ2ltZyddKSkKKwl7CisJZXhpdCgpOworCX0KKworCiskbWFuYWdlciA9IG5ldyBJbWFnZU1hbmFnZXIoJElNQ29uZmlnKTsKKworLy9nZXQgdGhlIGltYWdlIGFuZCB0aGUgZnVsbCBwYXRoIHRvIHRoZSBpbWFnZQorJGltYWdlID0gcmF3dXJsZGVjb2RlKCRfR0VUWydpbWcnXSk7CisKKy8vIElmIHRoZSBpbWFnZSBpcyBhIFVSTCwgc2VlIGlmIHRoZXJlIGlzIGFuIHgtdGh1bWJuYWlsIHgtdGh1bWIgb3IgeC10biBwYXJhbSBvbiBpdAorLy8gIHByb2JhYmx5IGJlc3QgdG8gdXNlIHgtdG4gdG8gc2F2ZSBzcGFjZSBvbiB0aGUgVVJMCitpZihwcmVnX21hdGNoKCcvXlthLXpdKzpcL1wvLipbPyZdeC0odGh1bWJuYWlsfHRodW1ifHRuKT0oW14mXSspL2knLCAkaW1hZ2UsICRNYXRjaGVzKSkKK3sKKyAgLy8gSW4gd2hpY2ggY2FzZSwgd2Ugd2lsbCB1c2UgdGhlIHRodW1ibmFpbAorICBoZWFkZXIoJ2xvY2F0aW9uOiAnIC4gcmF3dXJsZGVjb2RlKCRNYXRjaGVzWzJdKSk7CisgIGV4aXQ7Cit9CisKKyRmdWxscGF0aCA9IEZpbGVzOjptYWtlRmlsZSgkbWFuYWdlci0+Z2V0SW1hZ2VzRGlyKCksJGltYWdlKTsKKworLy9ub3QgYSBmaWxlLCBzbyBleGl0CitpZighaXNfZmlsZSgkZnVsbHBhdGgpKQorCXsKKwlleGl0KCk7CisJfQorCiskaW1nSW5mbyA9IEBnZXRJbWFnZVNpemUoJGZ1bGxwYXRoKTsKKworLy9Ob3QgYW4gaW1hZ2UsIHNlbmQgZGVmYXVsdCB0aHVtYm5haWwKK2lmKCFpc19hcnJheSgkaW1nSW5mbykpCit7CisJLy9zaG93IHRoZSBkZWZhdWx0IGltYWdlLCBvdGhlcndpc2Ugd2UgcXVpdCEKKwkkZGVmYXVsdCA9ICRtYW5hZ2VyLT5nZXREZWZhdWx0VGh1bWIoKTsKKwlpZigkZGVmYXVsdCkKKwl7CisJCWhlYWRlcignTG9jYXRpb246ICcuJGRlZmF1bHQpOworCQlleGl0KCk7CisJfQorfQorLy9pZiB0aGUgaW1hZ2UgaXMgbGVzcyB0aGFuIHRoZSB0aHVtYm5haWwgZGltZW5zaW9ucworLy9zZW5kIHRoZSBvcmlnaW5hbCBpbWFnZSBhcyB0aHVtYm5haWwKKworaWYgKCRpbWdJbmZvWzBdIDw9ICRJTUNvbmZpZ1sndGh1bWJuYWlsX3dpZHRoJ10KKyAmJiAkaW1nSW5mb1sxXSA8PSAkSU1Db25maWdbJ3RodW1ibmFpbF9oZWlnaHQnXSkKKyB7CisKKwkgaGVhZGVyKCdMb2NhdGlvbjogJy4gJG1hbmFnZXItPmdldEZpbGVVUkwoJGltYWdlKSk7CisJIGV4aXQoKTsKKyB9CisKKy8vQ2hlY2sgZm9yIHRodW1ibmFpbHMKKyR0aHVtYm5haWwgPSAkbWFuYWdlci0+Z2V0VGh1bWJOYW1lKCRmdWxscGF0aCk7CisKK2lmKGlzX2ZpbGUoJHRodW1ibmFpbCkpCit7CisJLy9pZiB0aGUgdGh1bWJuYWlsIGlzIG5ld2VyLCBzZW5kIGl0CisJaWYoZmlsZW10aW1lKCR0aHVtYm5haWwpID49IGZpbGVtdGltZSgkZnVsbHBhdGgpKQorCXsKKwkJaGVhZGVyKCdMb2NhdGlvbjogJy4kbWFuYWdlci0+Z2V0VGh1bWJVUkwoJGltYWdlKSk7CisJCWV4aXQoKTsKKwl9Cit9CisKKy8vY3JlYXRpbmcgdGh1bWJuYWlscworJHRodW1ibmFpbGVyID0gbmV3IFRodW1ibmFpbCgkSU1Db25maWdbJ3RodW1ibmFpbF93aWR0aCddLCRJTUNvbmZpZ1sndGh1bWJuYWlsX2hlaWdodCddKTsKKyR0aHVtYm5haWxlci0+Y3JlYXRlVGh1bWJuYWlsKCRmdWxscGF0aCwgJHRodW1ibmFpbCk7CisKKy8vQ2hlY2sgZm9yIE5FVyB0aHVtYm5haWxzCitpZihpc19maWxlKCR0aHVtYm5haWwpKQoreworCS8vc2VuZCB0aGUgbmV3IHRodW1ibmFpbAorCWhlYWRlcignTG9jYXRpb246ICcuJG1hbmFnZXItPmdldFRodW1iVVJMKCRpbWFnZSkpOworCWV4aXQoKTsKK30KK2Vsc2UKK3sKKwkvL3Nob3cgdGhlIGRlZmF1bHQgaW1hZ2UsIG90aGVyd2lzZSB3ZSBxdWl0IQorCSRkZWZhdWx0ID0gJG1hbmFnZXItPmdldERlZmF1bHRUaHVtYigpOworCisJaWYoJGRlZmF1bHQpCisJCWhlYWRlcignTG9jYXRpb246ICcuJGRlZmF1bHQpOworfQorPz4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL3lvdXR1YmUucGhwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbWFnZU1hbmFnZXIveW91dHViZS5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc4Njg2OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW1hZ2VNYW5hZ2VyL3lvdXR1YmUucGhwCkBAIC0wLDAgKzEsMjkyIEBACis8P3BocCAKKy8qKgorICogU2hvdyBhIGxpc3Qgb2YgaW1hZ2VzIGluIGEgbG9uZyBob3Jpem9udGFsIHRhYmxlLgorICogQGF1dGhvciAkQXV0aG9yOiBnb2dvICQKKyAqIEB2ZXJzaW9uICRJZDogaW1hZ2VzLnBocCA4NzcgMjAwNy0wOC0xMiAxNTo1MDowM1ogZ29nbyAkCisgKiBAcGFja2FnZSBJbWFnZU1hbmFnZXIKKyAqLworCityZXF1aXJlX29uY2UoJ2NvbmZpZy5pbmMucGhwJyk7CityZXF1aXJlX29uY2UoJ2RkdC5waHAnKTsKK3JlcXVpcmVfb25jZSgnQ2xhc3Nlcy9JbWFnZU1hbmFnZXIucGhwJyk7CisKKy8vIENvbXBhdGFiaWxpdHkgZm9yIFBIUCBsdCA1LjIKK3JlcXVpcmVfb25jZSgnQ2xhc3Nlcy9KU09OX0NvbXBhdC5waHAnKTsKKyAgCisvLyBTZWFyY2ggZm9yIHlvdXR1YmUgdmlkZW9zCisvLyA/dnE9ZnVubnkrZG9ncyZzdGFydC1pbmRleD0yMCZtYXgtcmVzdWx0cz0xNQorJHlvdXR1YmUgPSAiaHR0cDovL2dkYXRhLnlvdXR1YmUuY29tL2ZlZWRzL2FwaS92aWRlb3M/bWF4LXJlc3VsdHM9NTAmZm9ybWF0PTUmYWx0PWpzb24mIjsKKworaWYoQCRfUkVRVUVTVFsneXRTZWFyY2gnXSkKK3sKKyAgJHlvdXR1YmUgLj0gJ3ZxPScucmF3dXJsZW5jb2RlKCRfUkVRVUVTVFsneXRTZWFyY2gnXSkgLicmJzsgICAKK30KKworaWYoQCRfUkVRVUVTVFsneXRVc2VybmFtZSddKQoreworICAkeW91dHViZSAuPSAnYXV0aG9yPScucmF3dXJsZW5jb2RlKCRfUkVRVUVTVFsneXRVc2VybmFtZSddKTsgIAorfQorCiskZmVlZCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR5b3V0dWJlKTsKKyRkYXRhID0ganNvbl9kZWNvZGUoJGZlZWQsIHRydWUpOworCiskbnVtUm93cyAgPSAkZGF0YVsnZmVlZCddWydvcGVuU2VhcmNoJHRvdGFsUmVzdWx0cyddWyckdCddOworJGZpcnN0Um93ID0gJGRhdGFbJ2ZlZWQnXVsnb3BlblNlYXJjaCRzdGFydEluZGV4J11bJyR0J107CiskcGVyUGFnZSAgPSAkZGF0YVsnZmVlZCddWydvcGVuU2VhcmNoJGl0ZW1zUGVyUGFnZSddWyckdCddOworJGxhc3RSb3cgID0gJHN0YXJ0Um93LTErJHBlclBhZ2U7CiskcmVjb3JkcyAgPSAkZGF0YVsnZmVlZCddWydlbnRyeSddOworCisKKworLy9kZWZhdWx0IHBhdGggaXMgLworJHJlbGF0aXZlID0gJy8nOworJG1hbmFnZXIgPSBuZXcgSW1hZ2VNYW5hZ2VyKCRJTUNvbmZpZyk7CisKKy8qID09PT09PT09PT09PT09PT09IE9VVFBVVC9EUkFXIEZVTkNUSU9OUyA9PT09PT09PT09PT09PT09PT09PT09PSAqLworCitmdW5jdGlvbiBmb3JtYXRfZHVyYXRpb24oJGR1cmF0aW9uKQoreworICAkaG91cnMgPSBmbG9vcigkZHVyYXRpb24gLyAoNjAgKiA2MCkpOworICAkZHVyYXRpb24gPSAkZHVyYXRpb24gLSAoJGhvdXJzICogNjAgKiA2MCk7CisgIAorICAkbWludXRlcyA9IGZsb29yKCRkdXJhdGlvbiAvIDYwKTsKKyAgJGR1cmF0aW9uID0gJGR1cmF0aW9uIC0gKCRtaW51dGVzICogNjApOworICAKKyAgJHNlY29uZHMgPSAkZHVyYXRpb247CisgIAorICBpZigkaG91cnMpCisgIHsgICAgICAgIAorICAgIHJldHVybiAkaG91cnMgLiAnLicgLiBmbG9vcigoJG1pbnV0ZXMvNjApICogMTAwKSAuICIgaHIiIC4gKCRtaW51dGVzID8gInMiIDogJycpOyAgCisgIH0KKyAgCisgIGlmKCRtaW51dGVzKQorICB7CisgICAgcmV0dXJuICRtaW51dGVzIC4gJyBtaW4nIC4gKCRtaW51dGVzID4gMSA/ICdzJyA6ICcnKTsKKyAgfQorICAKKyAgcmV0dXJuICRzZWNvbmRzIC4gJyBzZWMnICAuICgkc2Vjb25kcyA+IDEgPyAncycgOiAnJyk7CisgIAorfQorIAorZnVuY3Rpb24gcmlwX3lvdXR1YmVfZGF0YSgkcmVjb3JkKQoreyAgCisgICRtZWRpYSA9ICRyZWNvcmRbJ21lZGlhJGdyb3VwJ107CisgICR0aXRsZSA9ICRtZWRpYVsnbWVkaWEkdGl0bGUnXVsnJHQnXTsKKyAgJGRlc2NyaXB0aW9uID0gc3Vic3RyKCRtZWRpYVsnbWVkaWEkZGVzY3JpcHRpb24nXVsnJHQnXSwwLDEwMCk7CisgICRkdXJhdGlvbiA9ICRtZWRpYVsneXQkZHVyYXRpb24nXVsnc2Vjb25kcyddOworICAgIAorICAkdGh1bWJzID0gYXJyYXkoKTsgLy8gdzpoID0+IGFycmF5KCBmaWxlLCBmaWxlLCBmaWxlKQorICAkbGFyZ2VzdCA9IGFycmF5KDAsJycsIDAsIDApOyAgIAorICAkc21hbGxlc3QgPSBhcnJheSgzMDAwKjMwMDAsJycsIDMwMDAsIDMwMDApOyAvLyBPaywgaGFja3ksIHNvc3VtaQorICBmb3JlYWNoKCRtZWRpYVsnbWVkaWEkdGh1bWJuYWlsJ10gYXMgJHRodW1iKSAKKyAgeworICAgIGlmKCFpc3NldCgkdGh1bWJzWyJ7JHRodW1iWyd3aWR0aCddfXh7JHRodW1iWydoZWlnaHQnXX0iXSkpCisgICAgeworICAgICAgJHRodW1ic1sieyR0aHVtYlsnd2lkdGgnXX14eyR0aHVtYlsnaGVpZ2h0J119Il0gID0gYXJyYXkoKTsKKyAgICAgIGlmKCgkdGh1bWJbJ3dpZHRoJ10gKiAkdGh1bWJbJ2hlaWdodCddKSA+ICRsYXJnZXN0WzBdKQorICAgICAgICAkbGFyZ2VzdCA9IGFycmF5KCR0aHVtYlsnd2lkdGgnXSAqICR0aHVtYlsnaGVpZ2h0J10sICR0aHVtYlsnd2lkdGgnXSAuICd4JyAuICR0aHVtYlsnaGVpZ2h0J10sICR0aHVtYlsnd2lkdGgnXSAsICR0aHVtYlsnaGVpZ2h0J10pOworICAgICAgaWYoKCR0aHVtYlsnd2lkdGgnXSAqICR0aHVtYlsnaGVpZ2h0J10pIDwgJHNtYWxsZXN0WzBdKQorICAgICAgICAkc21hbGxlc3QgPSBhcnJheSgkdGh1bWJbJ3dpZHRoJ10gKiAkdGh1bWJbJ2hlaWdodCddLCAkdGh1bWJbJ3dpZHRoJ10gLiAneCcgLiAkdGh1bWJbJ2hlaWdodCddLCAkdGh1bWJbJ3dpZHRoJ10gLCAkdGh1bWJbJ2hlaWdodCddKTsKKyAgICB9CisgICAgJHRodW1ic1sieyR0aHVtYlsnd2lkdGgnXX14eyR0aHVtYlsnaGVpZ2h0J119Il1bJHRodW1iWyd0aW1lJ11dID0gJHRodW1iWyd1cmwnXTsKKyAgICAKKyAgfQorIAorICAvLyBGaW5kIHRoZSBtYWluIGltYWdlIGxpbmsKKyAgJG1haW5JbWFnZSA9ICR0aHVtYnNbJGxhcmdlc3RbMV1dOworICAkbWFpbkltYWdlID0gYXJyYXlfcG9wKCRtYWluSW1hZ2UpOworICAKKyAgLy8gRmluZCB0aGUgdGh1bWIgaW1hZ2UgbGluaworICAkdGh1bWJJbWFnZSA9ICR0aHVtYnNbJHNtYWxsZXN0WzFdXTsKKyAgJHRodW1iSW1hZ2UgPSBhcnJheV9wb3AoJHRodW1iSW1hZ2UpOworICAKKyAgJGVtYmVkID0gTlVMTDsKKyAgZm9yZWFjaCgkbWVkaWFbJ21lZGlhJGNvbnRlbnQnXSBhcyAkdmlkKQorICB7CisgICAgaWYoJHZpZFsndHlwZSddID09ICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCcpCisgICAgeworICAgICAgJGVtYmVkID0gJHZpZFsndXJsJ107CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgCisgIC8vIEZpbmFsIGltYWdlIHRvIHBhc3MgdG8gbWFuYWdlciAodXNlIHF1ZXJ5IHBhcmFtIHRvIHJlY29yZCB0aGUgZW1iZWQgdXJsKQorICAkY29tYmluZWRJbWFnZSA9ICRtYWluSW1hZ2UgLiAKKyAgJz94LXNob2Nrd2F2ZS1mbGFzaD0nLnJhd3VybGVuY29kZSgkZW1iZWQpLgorICAnJngtdG49Jy5yYXd1cmxlbmNvZGUoJHRodW1iSW1hZ2UpOworICAKKyAgCisgIHJldHVybiBhcnJheQorICAoCisgICAndGl0bGUnICAgICAgICAgPT4gJHRpdGxlLAorICAgJ2Rlc2NyaXB0aW9uJyAgID0+ICRkZXNjcmlwdGlvbiwKKyAgICdkdXJhdGlvbicgICAgICA9PiBmb3JtYXRfZHVyYXRpb24oJGR1cmF0aW9uKSwKKyAgIAorICAgJ21haW5JbWFnZScgICAgID0+ICRtYWluSW1hZ2UsCisgICAndGh1bWJJbWFnZScgICAgPT4gJHRodW1iSW1hZ2UsCisgICAnY29tYmluZWRJbWFnZScgPT4gJGNvbWJpbmVkSW1hZ2UsCisgICAKKyAgICdzbWFsbGVzdCcgPT4gJHNtYWxsZXN0LAorICAgJ2xhcmdlc3QnICA9PiAkbGFyZ2VzdCwKKyAgICd0aHVtYnMnICAgPT4gJHRodW1icywKKyAgICdlbWJlZCcgICAgPT4gJGVtYmVkLAorICApOworfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgCitmdW5jdGlvbiBkcmF3RmlsZXMoJGxpc3QsICYkbWFuYWdlcikKK3sKKwlnbG9iYWwgJHJlbGF0aXZlOworCWdsb2JhbCAkSU1Db25maWc7CisvLyRJTUNvbmZpZ1snVmlld01vZGUnXSA9ICd0aHVtYnMnOworICAgIHN3aXRjaCgkSU1Db25maWdbJ1ZpZXdNb2RlJ10pCisgICAgeworICAgICAgY2FzZSAnZGV0YWlscyc6CisgICAgICB7CisgICAgICAgIAorICAgICAgICA/PgorICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0Ij4KKyAgICAgICAgICA8IS0tCisgICAgICAgICAgICBmdW5jdGlvbiBzaG93UHJldmlldyhmX3VybCkKKyAgICAgICAgICAgIHsgICAgICAgICAgICAgIAorICAgICAgICAgICAgICB3aW5kb3cucGFyZW50LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmX3ByZXZpZXcnKS5zcmMgPSB3aW5kb3cucGFyZW50Ll9iYWNrZW5kX3VybCArICdfX2Z1bmN0aW9uPXRodW1icyZpbWc9JyArIGVuY29kZVVSSUNvbXBvbmVudChmX3VybCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgLy8tLT4KKyAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgIDx0YWJsZSBjbGFzcz0ibGlzdHZpZXciPgorICAgICAgICA8dGhlYWQ+CisgICAgICAgIDx0cj48dGg+VGl0bGU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PHRoPkR1cmF0aW9uPC90aD48L3RyPjwvdGhlYWQ+CisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICA8P3BocAorICAgICAgICAgIGZvcmVhY2goJGxpc3QgYXMgJHJlY29yZCkKKyAgICAgICAgICB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGV4dHJhY3QocmlwX3lvdXR1YmVfZGF0YSgkcmVjb3JkKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgID8+CisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgIDx0aD48YSBocmVmPSIjIiBjbGFzcz0idGh1bWIiIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7IiBvbmNsaWNrPSJzZWxlY3RJbWFnZSgnPD9waHAgZWNobyB4aW5oYV9qc19lbmNvZGUoJGNvbWJpbmVkSW1hZ2UpPz4nLCAnPD9waHAgZWNobyB4aW5oYV9qc19lbmNvZGUoJHRpdGxlKTsgPz4nLCA8P3BocCBlY2hvICRsYXJnZXN0WzJdOz8+LCA8P3BocCBlY2hvICRsYXJnZXN0WzNdOyA/Pik7cmV0dXJuIGZhbHNlOyIgdGl0bGU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkdGl0bGUpOyA/PiAtIDw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZHVyYXRpb24pOyA/PiIgb25tb3VzZW92ZXI9InNob3dQcmV2aWV3KCc8P3BocCBlY2hvIHhpbmhhX2pzX2VuY29kZSgkY29tYmluZWRJbWFnZSk7Pz4nKSIgb25tb3VzZW91dD0ic2hvd1ByZXZpZXcod2luZG93LnBhcmVudC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZl91cmwnKS52YWx1ZSkiID48P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHRpdGxlKSA/PjwvYT48L3RoPgorICAgICAgICAgICAgICA8dGQ+PD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRkZXNjcmlwdGlvbik7ID8+PC90ZD4KKyAgICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZHVyYXRpb24pOyA/PiAgICAgICAgICAgICAgCisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPD9waHAgICAgICAgIAorICAgICAgICAgIH0KKyAgICAgICAgICA/PgorICAgICAgICA8L3Rib2R5PgorICAgICAgICA8L3RhYmxlPgorICAgICAgICA8P3BocAorICAgICAgfSAgICAgIAorICAgICAgYnJlYWs7CisgICAgICAKKyAgICAgIGNhc2UgJ3RodW1icyc6CisgICAgICBkZWZhdWx0ICAgICAgOgorICAgICAgeworICAgICAgICBmb3JlYWNoKCRsaXN0IGFzICRyZWNvcmQpCisgICAgICAgIHsKKyAgICAgICAgICBleHRyYWN0KHJpcF95b3V0dWJlX2RhdGEoJHJlY29yZCkpOworICAgICAgICAgID8+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGh1bWJfaG9sZGVyIiBpZD0iaG9sZGVyXzw/cGhwIGVjaG8gYXNjMmhleCgkY29tYmluZWRJbWFnZSkgPz4iPgorICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9InRodW1iIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyIgb25jbGljaz0ic2VsZWN0SW1hZ2UoJzw/cGhwIGVjaG8geGluaGFfanNfZW5jb2RlKCRjb21iaW5lZEltYWdlKT8+JywgJzw/cGhwIGVjaG8geGluaGFfanNfZW5jb2RlKCR0aXRsZSk7ID8+JywgPD9waHAgZWNobyAkbGFyZ2VzdFsyXTs/PiwgPD9waHAgZWNobyAkbGFyZ2VzdFszXTsgPz4pO3JldHVybiBmYWxzZTsiIHRpdGxlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHRpdGxlKTsgPz4gLSA8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGR1cmF0aW9uKTsgPz4iPgorICAgICAgICAgICAgICA8aW1nIHNyYz0iPD9waHAgcHJpbnQgJHRodW1iSW1hZ2UgPz4iIGFsdD0iPD9waHAgZWNobyAkdGl0bGU7ID8+IC0gPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRkdXJhdGlvbik7ID8+Ii8+CisgICAgICAgICAgICA8L2E+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPD9waHAKKyAgICAgICAgfQorICAgICAgfQorICAgIH0JCit9Ly9mdW5jdGlvbiBkcmF3RmlsZXMKKworCisKKy8qKgorICogTm8gZGlyZWN0b3JpZXMgYW5kIG5vIGZpbGVzLgorICovCitmdW5jdGlvbiBkcmF3Tm9SZXN1bHRzKCkgCit7Cis/PgorPGRpdiBjbGFzcz0ibm9SZXN1bHQiPk5vIFZpZGVvcyBGb3VuZDwvZGl2PgorPD9waHAgCit9CisKKy8qKgorICogTm8gZGlyZWN0b3JpZXMgYW5kIG5vIGZpbGVzLgorICovCitmdW5jdGlvbiBkcmF3RXJyb3JCYXNlKCYkbWFuYWdlcikgCit7Cis/PgorPGRpdiBjbGFzcz0iZXJyb3IiPjxzcGFuPkludmFsaWQgYmFzZSBkaXJlY3Rvcnk6PC9zcGFuPiA8P3BocCBlY2hvICRtYW5hZ2VyLT5jb25maWdbJ2ltYWdlc19kaXInXTsgPz48L2Rpdj4KKzw/cGhwIAorfQorCisvKioKKyAqIFV0aWxpdHkgdG8gY29udmVydCBhc2NpaSBzdHJpbmcgdG8gaGV4CisgKi8KK2Z1bmN0aW9uIGFzYzJoZXggKCR0ZW1wKQoreworICAkbGVuID0gc3RybGVuKCR0ZW1wKTsKKyAgJGRhdGEgPSAiIjsKKyAgZm9yICgkaT0wOyAkaTwkbGVuOyAkaSsrKSAkZGF0YS49c3ByaW50ZigiJTAyeCIsb3JkKHN1YnN0cigkdGVtcCwkaSwxKSkpOworICByZXR1cm4gJGRhdGE7Cit9CisKKz8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CisKKzxodG1sPgorPGhlYWQ+CisJPHRpdGxlPllvdVR1YmUgVmlkZW8gTGlzdDwvdGl0bGU+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgorCTxsaW5rIGhyZWY9Ijw/cGhwIHByaW50ICRJTUNvbmZpZ1snYmFzZV91cmwnXTs/PmFzc2V0cy9pbWFnZWxpc3QuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICBfYmFja2VuZF91cmwgPSAiPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYWNrZW5kX3VybCddOyA/PiI7CisgIDwvc2NyaXB0PgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSI8P3BocCBwcmludCAkSU1Db25maWdbJ2Jhc2VfdXJsJ107Pz5hc3NldHMvZGlhbG9nLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKy8qPCFbQ0RBVEFbKi8KKworCWlmKHdpbmRvdy50b3ApCisgICAgSFRNTEFyZWEgPSBYaW5oYSAgICA9IHdpbmRvdy50b3AuWGluaGE7CisKKwlmdW5jdGlvbiBoaWRlTWVzc2FnZSgpCisJeworCQl2YXIgdG9wRG9jID0gd2luZG93LnRvcC5kb2N1bWVudDsKKwkJdmFyIG1lc3NhZ2VzID0gdG9wRG9jLmdldEVsZW1lbnRCeUlkKCdtZXNzYWdlcycpOworCQlpZihtZXNzYWdlcykKKwkJCW1lc3NhZ2VzLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisJfQorCisJaW5pdCA9IGZ1bmN0aW9uKCkKKwl7CisJICBfX2RsZ190cmFuc2xhdGUoJ0ltYWdlTWFuYWdlcicpOworCQloaWRlTWVzc2FnZSgpOworCQl2YXIgdG9wRG9jID0gd2luZG93LnRvcC5kb2N1bWVudDsKKworLy8gICAgdXBkYXRlX3NlbGVjdGVkKCk7CisJfQkKKwkKKy8qXV0+Ki8KKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iPD9waHAgcHJpbnQgJElNQ29uZmlnWydiYXNlX3VybCddOz8+YXNzZXRzL2ltYWdlcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9wb3B1cHMvcG9wdXAuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iYXNzZXRzL3BvcHVwLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisuZGlyX2hvbGRlciwgLnRodW1iX2hvbGRlcgoreworICB3aWR0aDoxNDBweDsgaGVpZ2h0OjExMHB4OworICBmbG9hdDpsZWZ0OworICBtYXJnaW46NnB4OworICBiYWNrZ3JvdW5kLWNvbG9yOkJ1dHRvbkZhY2U7CisgIGJvcmRlcjogMXB4IG91dHNldDsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorPD9waHAgaWYgKCRtYW5hZ2VyLT5pc1ZhbGlkQmFzZSgpID09IGZhbHNlKSB7IGRyYXdFcnJvckJhc2UoJG1hbmFnZXIpOyB9IAorCWVsc2VpZihjb3VudCgkcmVjb3JkcykpIHsgPz4KKworCTw/cGhwIGRyYXdGaWxlcygkcmVjb3JkcywgJG1hbmFnZXIpOyA/PgorCis8P3BocCB9IGVsc2UgeyBkcmF3Tm9SZXN1bHRzKCk7IH0gPz4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9JbnNlcnRNYXJxdWVlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL0luc2VydE1hcnF1ZWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU3ZTYwYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9JbnNlcnRNYXJxdWVlLmpzCkBAIC0wLDAgKzEsMTA3IEBACisvLyBNYXJxdWVlIHBsdWdpbiBmb3IgSFRNTEFyZWEvWGluaGENCisvLyBJbXBsZW1lbnRhdGlvbiBieSBVZG8gU2NobWFsIGJhc2VkIG9uIEhUTUxBcmVhIDMuMA0KKy8vIE9yaWdpbmFsIEF1dGhvciAtIFVkbyBTY2htYWwsIFNjaGFmZnJhdGgtTmV1ZU1lZGllbg0KKy8vDQorLy8gKGMpIFVkbyBTY2htYWwuMjAwNA0KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4NCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuDQorDQorZnVuY3Rpb24gSW5zZXJ0TWFycXVlZShlZGl0b3IpIHsNCisJdGhpcy5lZGl0b3IgPSBlZGl0b3I7DQorDQorCXZhciBjZmcgPSBlZGl0b3IuY29uZmlnOw0KKwl2YXIgc2VsZiA9IHRoaXM7DQorDQorCS8vIHJlZ2lzdGVyIHRoZSB0b29sYmFyIGJ1dHRvbnMgcHJvdmlkZWQgYnkgdGhpcyBwbHVnaW4NCisJY2ZnLnJlZ2lzdGVyQnV0dG9uKHsNCisJaWQgICAgICAgOiAiaW5zZXJ0bWFycXVlZSIsDQorCXRvb2x0aXAgIDogdGhpcy5fbGMoIkluc2VydCBzY3JvbGxpbmcgbWFycXVlZSIpLA0KKwlpbWFnZSAgICA6IGVkaXRvci5pbWdVUkwoImVkX21hcnF1ZWUuZ2lmIiwgIkluc2VydE1hcnF1ZWUiKSwNCisJdGV4dE1vZGUgOiBmYWxzZSwNCisJYWN0aW9uICAgOiBmdW5jdGlvbihlZGl0b3IpIHsNCisJCQlzZWxmLmJ1dHRvblByZXNzKGVkaXRvcik7DQorCQl9DQorCX0pDQorCWNmZy5hZGRUb29sYmFyRWxlbWVudCgiaW5zZXJ0bWFycXVlZSIsICJpbnNlcnRob3Jpem9udGFscnVsZSIsIC0xKTsNCit9DQorDQorSW5zZXJ0TWFycXVlZS5fcGx1Z2luSW5mbyA9IHsNCisJbmFtZSAgICAgICAgICA6ICJJbnNlcnRNYXJxdWVlIiwNCisJdmVyc2lvbiAgICAgICA6ICIxLjAiLA0KKwlkZXZlbG9wZXIgICAgIDogIlVkbyBTY2htYWwiLA0KKwlkZXZlbG9wZXJfdXJsIDogImh0dHA6Ly93d3cuc2NoYWZmcmF0aC1OZXVlTWVkaWVuLmRlLyIsDQorCWNfb3duZXIgICAgICAgOiAiVWRvIFNjaG1hbCAmIFNjaGFmZnJhdGggTmV1ZU1lZGllbiIsDQorCWxpY2Vuc2UgICAgICAgOiAiaHRtbEFyZWEiDQorfTsNCisNCitJbnNlcnRNYXJxdWVlLnByb3RvdHlwZS5fbGMgPSBmdW5jdGlvbihzdHJpbmcpIHsNCisgICAgcmV0dXJuIFhpbmhhLl9sYyhzdHJpbmcsICJJbnNlcnRNYXJxdWVlIik7DQorfTsNCisNCitJbnNlcnRNYXJxdWVlLnByb3RvdHlwZS5idXR0b25QcmVzcyA9IGZ1bmN0aW9uKGVkaXRvciwgbm9kZSkgew0KKyAgZnVuY3Rpb24gc2V0QXR0cihlbCwgYXR0ciwgdmFsdWUpIHsNCisgICAgaWYgKHZhbHVlICE9ICIiKQ0KKyAgICAgIGVsLnNldEF0dHJpYnV0ZShhdHRyLCB2YWx1ZSk7DQorICAgIGVsc2UNCisgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoYXR0cik7DQorICB9DQorICB2YXIgb3V0cGFyYW0gPSBuZXcgT2JqZWN0KCk7DQorCWlmICh0eXBlb2Ygbm9kZSA9PSAidW5kZWZpbmVkIikgew0KKwkgIG5vZGUgPSBlZGl0b3IuZ2V0UGFyZW50RWxlbWVudCgpOw0KKwl9DQorICBpZiAoIG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICJtYXJxdWVlIikgew0KKyAgICBvdXRwYXJhbS5mX25hbWUgICAgICAgICA9IG5vZGUubmFtZTsNCisJCW91dHBhcmFtLmZfYmVoYXZpb3IgICAgID0gbm9kZS5iZWhhdmlvcjsNCisJCW91dHBhcmFtLmZfZGlyZWN0aW9uICAgID0gbm9kZS5kaXJlY3Rpb247DQorCQlvdXRwYXJhbS5mX3RleHQgICAgICAgICA9IG5vZGUuaW5uZXJIVE1MOw0KKwkJb3V0cGFyYW0uZl93aWR0aAkgICAgICA9IG5vZGUud2lkdGg7DQorCQlvdXRwYXJhbS5mX2hlaWdodAkgICAgICA9IG5vZGUuaGVpZ2h0Ow0KKwkJb3V0cGFyYW0uZl9iZ2NvbG9yICAgICAgPSBub2RlLmJnQ29sb3I7DQorCQlvdXRwYXJhbS5mX3Njcm9sbGFtb3VudCA9IG5vZGUuc2Nyb2xsQW1vdW50Ow0KKwkJb3V0cGFyYW0uZl9zY3JvbGxkZWxheSAgPSBub2RlLnNjcm9sbERlbGF5Ow0KKwl9IGVsc2Ugew0KKwlvdXRwYXJhbSA9IHsNCisgICAgZl9uYW1lICAgIDogJycsDQorCQlmX2JlaGF2aW9yCTogJycsDQorCQlmX2RpcmVjdGlvbgk6ICcnLA0KKwkJZl90ZXh0CQk6ICcnLA0KKwkJZl93aWR0aAkJOiAnJywNCisJCWZfaGVpZ2h0CTogJycsDQorCQlmX2JnY29sb3IJOiAnJywNCisJCWZfc2Nyb2xsYW1vdW50CTogJycsDQorCQlmX3Njcm9sbGRlbGF5CTogJycNCisJCX07DQorCX0NCisJZWRpdG9yLl9wb3B1cERpYWxvZyggInBsdWdpbjovL0luc2VydE1hcnF1ZWUvaW5zZXJ0X21hcnF1ZWUiLCBmdW5jdGlvbiggcGFyYW0gKQ0KKwl7DQorCQlpZiAoICFwYXJhbSApDQorCQl7IC8vdXNlciBtdXN0IGhhdmUgcHJlc3NlZCBDYW5jZWwNCisJCQlyZXR1cm4gZmFsc2U7DQorCQl9IGVsc2UgaWYgKCBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAibWFycXVlZSIpIHsNCisgICAgICAgIHNldEF0dHIobm9kZSwgIm5hbWUiLCBwYXJhbVsiZl9uYW1lIl0pOw0KKyAgICAgICAgc2V0QXR0cihub2RlLCAiaWQiLCBwYXJhbVsiZl9uYW1lIl0pOw0KKwkJCQlzZXRBdHRyKG5vZGUsICJiZWhhdmlvciIsCXBhcmFtWyJmX2JlaGF2aW9yIl0pOw0KKwkJCQlzZXRBdHRyKG5vZGUsICJkaXJlY3Rpb24iLCBwYXJhbVsiZl9kaXJlY3Rpb24iXSk7DQorCQkJCXNldEF0dHIobm9kZSwgIndpZHRoIiwgcGFyYW1bImZfd2lkdGgiXSk7DQorCQkJCXNldEF0dHIobm9kZSwgImhlaWdodCIsIHBhcmFtWyJmX2hlaWdodCJdKTsNCisJCQkJc2V0QXR0cihub2RlLCAiYmdDb2xvciIsIHBhcmFtWyJmX2JnY29sb3IiXSk7DQorCQkJCXNldEF0dHIobm9kZSwgInNjcm9sbEFtb3VudCIsIHBhcmFtWyJmX3Njcm9sbGFtb3VudCJdKTsNCisJCQkJc2V0QXR0cihub2RlLCAic2Nyb2xsRGVsYXkiLCBwYXJhbVsiZl9zY3JvbGxkZWxheSJdKTsNCisgICAgICAgIG5vZGUuaW5uZXJIVE1MID0gcGFyYW1bImZfdGV4dCJdOw0KKwkJfSBlbHNlIHsNCisJCQl2YXIgdGV4dCA9ICc8bWFycXVlZSBuYW1lPSInICsgcGFyYW1bImZfbmFtZSJdICsgJyIgJyArDQorICAgICAgICAgICdpZD0iJyArIHBhcmFtWyJmX25hbWUiXSArICciICcgKyANCisgICAgICAgICAgJ2JlaGF2aW9yPSInICsgcGFyYW1bImZfYmVoYXZpb3IiXSArICciICcgKw0KKwkJCQkJJ2RpcmVjdGlvbj0iJyArIHBhcmFtWyJmX2RpcmVjdGlvbiJdICsgJyIgJyArDQorCQkJCQknd2lkdGg9IicgKyBwYXJhbVsiZl93aWR0aCJdICsgJyIgJyArDQorCQkJCQknaGVpZ2h0PSInICsgcGFyYW1bImZfaGVpZ2h0Il0gKyAnIiAnICsNCisJCQkJCSdiZ2NvbG9yPSInICsgcGFyYW1bImZfYmdjb2xvciJdICsgJyIgJyArDQorCQkJCQknc2Nyb2xsYW1vdW50PSInICsgcGFyYW1bImZfc2Nyb2xsYW1vdW50Il0gKyAnIiAnICsNCisJCQkJCSdzY3JvbGxkZWxheT0iJyArIHBhcmFtWyJmX3Njcm9sbGRlbGF5Il0gKyAnIj5cbic7DQorICAgICAgICAgIGFsZXJ0KHRleHQpOw0KKwkJCXRleHQgPSB0ZXh0ICsgcGFyYW1bImZfdGV4dCJdOw0KKwkJCXRleHQgPSB0ZXh0ICsgJzwvbWFycXVlZT4nOw0KKwkJCWVkaXRvci5pbnNlcnRIVE1MKCB0ZXh0ICk7DQorCQl9DQorCX0sIG91dHBhcmFtKTsNCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9pbWcvZWRfbWFycXVlZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvaW1nL2VkX21hcnF1ZWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZWY0NGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvaW1nL2VkX21hcnF1ZWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2I1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvYjUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThhZDJlYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2I1LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiYjUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU5TRVJUTUFSUVVFRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvY2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9jaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDNkZTc3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvY2guanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi5Y+W5raIIiwKKyAgICAiT0siOiAi5aW9IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU5TRVJUTUFSUVVFRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvY3ouanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9jei5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjdmMzRlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvY3ouanMKQEAgLTAsMCArMSwyMSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjeiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgIkhlaWdodDoiOiAiVsO9xaFrYSIsCisgICAgIkxlZnQiOiAiVmxldm8iLAorICAgICJPSyI6ICJPSyIsCisgICAgIlJpZ2h0IjogIlZwcmF2byIsCisgICAgIldpZHRoOiI6ICLFoMOtxZlrYSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2RhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvZGEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMzMzE0ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2RhLmpzCkBAIC0wLDAgKzEsMjIgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGVyIiwKKyAgICAiSGVpZ2h0OiI6ICJIw7hqZGU6IiwKKyAgICAiTGVmdCI6ICJWZW5zdHJlIiwKKyAgICAiTmFtZSI6ICJOYXZuIiwKKyAgICAiT0siOiAiT0siLAorICAgICJSaWdodCI6ICJIw7hqcmUiLAorICAgICJXaWR0aDoiOiAiQnJlZGRlOiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVlOWQ0OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsMjggQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAiSGludGVyZ3J1bmRmYXJiZToiLAorICAgICJCZWhhdmlvcjoiOiAiQmV3ZWd1bmc6IiwKKyAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgIkRpcmVjdGlvbjoiOiAiQXVzcmljaHR1bmc6IiwKKyAgICAiSGVpZ2h0OiI6ICJIw7ZoZToiLAorICAgICJJbnNlcnQgc2Nyb2xsaW5nIG1hcnF1ZWUiOiAiTWFycXVlZSBlaW5mw7xnZW4iLAorICAgICJMZWZ0IjogImxpbmtzIiwKKyAgICAiTmFtZSI6ICJOYW1lIiwKKyAgICAiT0siOiAiT0siLAorICAgICJSaWdodCI6ICJyZWNodHMiLAorICAgICJTcGVlZCBDb250cm9sIjogIkdlc2Nod2luZGlna2VpdHNlaW5zdGVsbHVuZ2VuIiwKKyAgICAiVGV4dDoiOiAiVGV4dDoiLAorICAgICJXaWR0aDoiOiAiQnJlaXRlOiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkluc2VydCBtYXJxdWVlIjogIk1hcnF1ZWUgZWluZsO8Z2VuIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvZWUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9lZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGQ0NmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvZWUuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTG9vYnUiLAorICAgICJPSyI6ICJPSyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2VsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjYWVjNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2VsLmpzCkBAIC0wLDAgKzEsMjEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAiSGVpZ2h0OiI6ICLOjs+Izr/PgiIsCisgICAgIkxlZnQiOiAizpHPgc65z4PPhM61z4HOrCIsCisgICAgIk9LIjogIs6Vzr3PhM6szr7Otc65IiwKKyAgICAiUmlnaHQiOiAizpTOtc6+zrnOrCIsCisgICAgIldpZHRoOiI6ICLOoM67zqzPhM6/z4IiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTlNFUlRNQVJRVUVFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZTI0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9lcy5qcwpAQCAtMCwwICsxLDIxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVzIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCisgICAgIkhlaWdodDoiOiAiQWx0bzoiLAorICAgICJMZWZ0IjogIkl6cXVpZXJkYSIsCisgICAgIk9LIjogIkFjZXB0YXIiLAorICAgICJSaWdodCI6ICJEZXJlY2hhIiwKKyAgICAiV2lkdGg6IjogIkFuY2hvOiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2V1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvZXUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMyN2IyMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2V1LmpzCkBAIC0wLDAgKzEsMjAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlV0emkiLAorICAgICJMZWZ0IjogIkV6a2VycmV0YXJhIiwKKyAgICAiT0siOiAiQWRvcyIsCisgICAgIlJpZ2h0IjogIkVza3VpbmV0YXJhIiwKKyAgICAiV2lkdGg6IjogIlphYmFsZXJhOiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvZmEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRjM2Y0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2ZhLmpzCkBAIC0wLDAgKzEsMjAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIsCisgICAgIkxlZnQiOiAi2obZviIsCisgICAgIk9LIjogItio2YTZhyIsCisgICAgIlJpZ2h0IjogItix2KfYs9iqIiwKKyAgICAiV2lkdGg6IjogIti32YjZhCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2ZpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvZmkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFiYjM2MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2ZpLmpzCkBAIC0wLDAgKzEsMjAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmkiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlBlcnV1dGEiLAorICAgICJMZWZ0IjogIlZhc2VuIiwKKyAgICAiT0siOiAiSHl2w6Rrc3kiLAorICAgICJSaWdodCI6ICJPaWtlYSIsCisgICAgIldpZHRoOiI6ICJMZXZleXMiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTlNFUlRNQVJRVUVFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9mci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2N2U5MzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9mci5qcwpAQCAtMCwwICsxLDMxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkJhY2tncm91bmQtQ29sb3I6IjogIkNvdWxldXIgZGUgZm9uZCIsCisgICAgIkJlaGF2aW9yOiI6ICJDb21wb3J0ZW1lbnQiLAorICAgICJDYW5jZWwiOiAiQW5udWxlciIsCisgICAgIkRpcmVjdGlvbjoiOiAiRGlyZWN0aW9uIiwKKyAgICAiSGVpZ2h0OiI6ICJIYXV0ZXVyIiwKKyAgICAiSW5zZXJ0IHNjcm9sbGluZyBtYXJxdWVlIjogIkluc8OpcmVyIG1hcnF1ZWUgZMOpZmlsYW50IiwKKyAgICAiTGVmdCI6ICJHYXVjaGUiLAorICAgICJOYW1lIjogIk5vbSIsCisgICAgIk5hbWUvSUQ6IjogIk5vbS9JRCIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUmlnaHQiOiAiRHJvaXRlIiwKKyAgICAiU2Nyb2xsIEFtb3VudDoiOiAiUXVhbnRpdMOpIGRlIGTDqWZpbGVtZW50IiwKKyAgICAiU2Nyb2xsIERlbGF5OiI6ICJEw6lsYWkgZHUgZMOpZmlsZW1lbnQiLAorICAgICJTcGVlZCBDb250cm9sIjogIkNvbnRyb2xlIGRlIHZpdGVzc2UiLAorICAgICJUZXh0OiI6ICJUZXh0ZSIsCisgICAgIldpZHRoOiI6ICJMYXJnZXVyIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiSW5zZXJ0IG1hcnF1ZWUiOiAiSW5zw6lyZXIgbWFycXVlZSIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2ZyX2NhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvZnJfY2EuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUwOGMyMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2ZyX2NhLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnJfY2EiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU5TRVJUTUFSUVVFRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvZ2IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9nYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2RkMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvZ2IuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJnYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTlNFUlRNQVJRVUVFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9oZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhY2JmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9oZS5qcwpAQCAtMCwwICsxLDIxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImhlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKKyAgICAiSGVpZ2h0OiI6ICLXkteV15HXlCIsCisgICAgIkxlZnQiOiAi16nXnteQ15wiLAorICAgICJPSyI6ICLXkNeZ16nXldeoIiwKKyAgICAiUmlnaHQiOiAi15nXnteZ158iLAorICAgICJXaWR0aDoiOiAi16jXldeX15EiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTlNFUlRNQVJRVUVFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9odS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2h1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NWM1MWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9odS5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImh1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJNw6lnc2VtIiwKKyAgICAiT0siOiAiUmVuZGJlbiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvaXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwMzllNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2l0LmpzCkBAIC0wLDAgKzEsMjIgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaXQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGFtZW50byIsCisgICAgIkhlaWdodDoiOiAiQWx0ZXp6YSIsCisgICAgIkluc2VydCBzY3JvbGxpbmcgbWFycXVlZSI6ICJJbnNlcmlzY2EgbWFycXVlZSIsCisgICAgIkxlZnQiOiAiU2luaXN0cmEiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlJpZ2h0IjogIkRlc3RyYSIsCisgICAgIldpZHRoOiI6ICJMYXJnaGV6emEiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTlNFUlRNQVJRVUVFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9qYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2phLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyODUyNWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9qYS5qcwpAQCAtMCwwICsxLDM2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFsdGVybmF0ZSI6ICLmipjjgorov5TjgZciLAorICAgICJCYWNrZ3JvdW5kLUNvbG9yOiI6ICLog4zmma/oibI6IiwKKyAgICAiQmVoYXZpb3I6IjogIuWLleS9nDoiLAorICAgICJDYW5jZWwiOiAi5Lit5q2iIiwKKyAgICAiQ29udGludW91cyI6ICLlt6blj7PpgKPntpoiLAorICAgICJEaXJlY3Rpb246IjogIuaWueWQkToiLAorICAgICJIZWlnaHQ6IjogIumrmOOBlToiLAorICAgICJJbnNlcnQgc2Nyb2xsaW5nIG1hcnF1ZWUiOiAi44K544Kv44Ot44O844Or44Oe44O844Kt44O844Gu5oy/5YWlIiwKKyAgICAiTGVmdCI6ICLlt6YiLAorICAgICJNYXJxdWVlIEVkaXRvciI6ICLjg57jg7zjgq3jg7zjgqjjg4fjgqPjgr8iLAorICAgICJOYW1lIjogIuWQjeWJjSIsCisgICAgIk5hbWUvSUQ6IjogIuWQjeWJjS9JRCIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUmlnaHQiOiAi5Y+zIiwKKyAgICAiU2Nyb2xsIEFtb3VudDoiOiAi44K544Kv44Ot44O844Or6YePOiIsCisgICAgIlNjcm9sbCBEZWxheToiOiAi44K544Kv44Ot44O844Or6YGF5bu2OiIsCisgICAgIlNsaWRlIjogIuOCueODqeOCpOODiSIsCisgICAgIlNwZWVkIENvbnRyb2wiOiAi6YCf5bqm6Kq/5pW0IiwKKyAgICAiVGV4dDoiOiAi44OG44Kt44K544OIOiIsCisgICAgIldpZHRoOiI6ICLluYU6IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiSW5zZXJ0IG1hcnF1ZWUiOiAi44Oe44O844Kt44O844Gu5oy/5YWlIiwKKyAgICAgICAgIllvdSBtdXN0IGVudGVyIHRoZSBmb3JtIG5hbWUiOiAi5ZCN5YmN44Gu5YWl5Yqb44GM5b+F6KaB44Gn44GZIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE3MWY3NgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSw0NCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICJBbHRlcm5hdGUiOiAiIiwKKyAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAiIiwKKyAgICAiQmVoYXZpb3I6IjogIiIsCisgICAgIkNhbmNlbCI6ICIiLAorICAgICJDb250aW51b3VzIjogIiIsCisgICAgIkRpcmVjdGlvbjoiOiAiIiwKKyAgICAiSGVpZ2h0OiI6ICIiLAorICAgICJJbnNlcnQgc2Nyb2xsaW5nIG1hcnF1ZWUiOiAiIiwKKyAgICAiTGVmdCI6ICIiLAorICAgICJNYXJxdWVlIEVkaXRvciI6ICIiLAorICAgICJOYW1lIjogIiIsCisgICAgIk5hbWUvSUQ6IjogIiIsCisgICAgIk9LIjogIiIsCisgICAgIlJpZ2h0IjogIiIsCisgICAgIlNjcm9sbCBBbW91bnQ6IjogIiIsCisgICAgIlNjcm9sbCBEZWxheToiOiAiIiwKKyAgICAiU2xpZGUiOiAiIiwKKyAgICAiU3BlZWQgQ29udHJvbCI6ICIiLAorICAgICJUZXh0OiI6ICIiLAorICAgICJXaWR0aDoiOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvbHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IzN2Y2MwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL2x0LmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU5TRVJUTUFSUVVFRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvbHYuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9sdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTQ5ZjdkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvbHYuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXRjZWx0IiwKKyAgICAiT0siOiAiTGFiaSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFiNzE4NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL25iLmpzCkBAIC0wLDAgKzEsMzEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQmFja2dyb3VuZC1Db2xvcjoiOiAiQmFrZ3J1bm5zZmFyZ2U6IiwKKyAgICAiQmVoYXZpb3I6IjogIk9wcGbDuHJzZWw6IiwKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIkRpcmVjdGlvbjoiOiAiUmV0dG5pbmc6IiwKKyAgICAiSGVpZ2h0OiI6ICJIw7h5ZGU6IiwKKyAgICAiSW5zZXJ0IHNjcm9sbGluZyBtYXJxdWVlIjogIlNldHQgaW5uIHJ1bGxldGVrc3QiLAorICAgICJMZWZ0IjogIlZlbnN0cmUiLAorICAgICJOYW1lIjogIk5hdm4iLAorICAgICJOYW1lL0lEOiI6ICJOYXZuL0lEOiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUmlnaHQiOiAiSMO4eXJlIiwKKyAgICAiU2Nyb2xsIEFtb3VudDoiOiAiSGFzdGlnaGV0OiIsCisgICAgIlNjcm9sbCBEZWxheToiOiAiRm9yc2lua2Vsc2U6IiwKKyAgICAiU3BlZWQgQ29udHJvbCI6ICJFZ2Vuc2thcGVyIGZvciBoYXN0aWdoZXRlbiB0aWwgcnVsbGV0ZWtzdGVuIiwKKyAgICAiVGV4dDoiOiAiVGVrc3Q6IiwKKyAgICAiV2lkdGg6IjogIkJyZWRkZToiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJJbnNlcnQgbWFycXVlZSI6ICJTZXR0IGlubiBydWxsZXRla3N0IgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjUwZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvbmwuanMKQEAgLTAsMCArMSwzMSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJubCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYWNrZ3JvdW5kLUNvbG9yOiI6ICJBY2h0ZXJncm9uZGtsZXVyOiIsCisgICAgIkJlaGF2aW9yOiI6ICJHZWRyYWc6IiwKKyAgICAiQ2FuY2VsIjogIkFubnVsZXJlbiIsCisgICAgIkRpcmVjdGlvbjoiOiAiUmljaHRpbmc6IiwKKyAgICAiSGVpZ2h0OiI6ICJIb29ndGU6IiwKKyAgICAiSW5zZXJ0IHNjcm9sbGluZyBtYXJxdWVlIjogIlNjcm9sbGVuZGUgdGVrc3QgaW52b2VnZW4iLAorICAgICJMZWZ0IjogIkxpbmtzIiwKKyAgICAiTmFtZSI6ICJOYWFtZSIsCisgICAgIk5hbWUvSUQ6IjogIk5hYW0vSUQ6IiwKKyAgICAiT0siOiAiT0siLAorICAgICJSaWdodCI6ICJSZWNodHMiLAorICAgICJTY3JvbGwgQW1vdW50OiI6ICJTbmVsaGVpZDoiLAorICAgICJTY3JvbGwgRGVsYXk6IjogIlZlcnRyYWdpbmc6IiwKKyAgICAiU3BlZWQgQ29udHJvbCI6ICJTbmVsaGVpZHNjb250cm9sZSIsCisgICAgIlRleHQ6IjogIlRla3N0OiIsCisgICAgIldpZHRoOiI6ICJCcmVlZHRlOiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkluc2VydCBtYXJxdWVlIjogIlRla3N0IGludm9lZ2VuIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvcGwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9wbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjBmMjE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvcGwuanMKQEAgLTAsMCArMSwyMiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW51bHVqIiwKKyAgICAiSGVpZ2h0OiI6ICJXeXNva2/Fm8SHOiIsCisgICAgIkxlZnQiOiAiRG8gbGV3ZWoiLAorICAgICJOYW1lIjogIk5hendhIiwKKyAgICAiT0siOiAiT0siLAorICAgICJSaWdodCI6ICJEbyBwcmF3ZWoiLAorICAgICJXaWR0aDoiOiAiU3plcm9rb8WbxIc6IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU5TRVJUTUFSUVVFRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9wdF9ici5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjU4MWYzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvcHRfYnIuanMKQEAgLTAsMCArMSwzMiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwdF9iciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbHRlcm5hdGUiOiAiQWx0ZXJuYXRpdm8iLAorICAgICJCYWNrZ3JvdW5kLUNvbG9yOiI6ICJDw7RyIGRlIEZ1bmRvOiIsCisgICAgIkJlaGF2aW9yOiI6ICJDb21wb3J0YW1lbnRvOiIsCisgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCisgICAgIkNvbnRpbnVvdXMiOiAiQ29udMOtbnVvIiwKKyAgICAiRGlyZWN0aW9uOiI6ICJEaXJlw6fDo286IiwKKyAgICAiSGVpZ2h0OiI6ICJBbHR1cmE6IiwKKyAgICAiSW5zZXJ0IHNjcm9sbGluZyBtYXJxdWVlIjogIkluc2VyaXIgZmFpeGEgcm9sYW50ZSIsCisgICAgIkxlZnQiOiAiRXNxdWVyZGEiLAorICAgICJNYXJxdWVlIEVkaXRvciI6ICJFZGl0b3IgZGUgRmFpeGFzIiwKKyAgICAiTmFtZSI6ICJOb21lIiwKKyAgICAiTmFtZS9JRDoiOiAiTm9tZS9JRDoiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlJpZ2h0IjogIkRpcmVpdGEiLAorICAgICJTY3JvbGwgQW1vdW50OiI6ICJRdWFudGlkYWRlIGRlIFJvbGFnZW06IiwKKyAgICAiU2Nyb2xsIERlbGF5OiI6ICJBdHJhem8gZGUgUm9sYWdlbToiLAorICAgICJTbGlkZSI6ICJDb3JyZWRpw6dvIiwKKyAgICAiU3BlZWQgQ29udHJvbCI6ICJDb250cm9sZSBkZSBWZWxvY2lkYWRlIiwKKyAgICAiVGV4dDoiOiAiVGV4dG86IiwKKyAgICAiV2lkdGg6IjogIkxhcmd1cmE6IgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9yby5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL3JvLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlOTFiNDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9yby5qcwpAQCAtMCwwICsxLDIxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJvIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiLAorICAgICJIZWlnaHQ6IjogIsOObsSDbMWjaW1lYSIsCisgICAgIkxlZnQiOiAiU3TDom5nYSIsCisgICAgIk9LIjogIkFjY2VwdMSDIiwKKyAgICAiUmlnaHQiOiAiRHJlYXB0YSIsCisgICAgIldpZHRoOiI6ICJMxIPFo2ltZSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkMTkzMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL3J1LmpzCkBAIC0wLDAgKzEsMjEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicnUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgIkhlaWdodDoiOiAi0JLRi9GB0L7RgtCwIiwKKyAgICAiTGVmdCI6ICLQn9C+INC70LXQstC+0LzRgyDQutGA0LDRjiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUmlnaHQiOiAi0J/QviDQv9GA0LDQstC+0LzRgyDQutGA0LDRjiIsCisgICAgIldpZHRoOiI6ICLQqNC40YDQuNC90LAiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTlNFUlRNQVJRVUVFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9zaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL3NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNTlmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9zaC5qcwpAQCAtMCwwICsxLDIwIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgIkxlZnQiOiAiTGV2byIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUmlnaHQiOiAiRGVzbm8iLAorICAgICJXaWR0aDoiOiAixaBpcmluYSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL3NpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvc2kuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM1YjFkMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL3NpLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2kiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIsCisgICAgIk9LIjogIlYgcmVkdSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL3NyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvc3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYyYjkwYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL3NyLmpzCkBAIC0wLDAgKzEsMjAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IiwKKyAgICAiTGVmdCI6ICLQm9C10LLQviIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUmlnaHQiOiAi0JTQtdGB0L3QviIsCisgICAgIldpZHRoOiI6ICLQqNC40YDQuNC90LAiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTlNFUlRNQVJRVUVFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9zdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL3N2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MmFhZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvbGFuZy9zdi5qcwpAQCAtMCwwICsxLDIxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInN2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICJIZWlnaHQ6IjogIkjDtmpkOiIsCisgICAgIkxlZnQiOiAiVmVuc3RlciIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUmlnaHQiOiAiSMO2Z2VyIiwKKyAgICAiV2lkdGg6IjogIkJyZWRkOiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL3RoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvdGguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYwMTJiMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL3RoLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidGgiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIsCisgICAgIk9LIjogIuC4leC4geC4peC4hyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL3RyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvdHIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGExOTYzNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsMjEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgIkhlaWdodDoiOiAiWcO8a3Nla2xpayIsCisgICAgIkxlZnQiOiAiU29sYSIsCisgICAgIk9LIjogIlRhbWFtIiwKKyAgICAiUmlnaHQiOiAiU2HEn2EiLAorICAgICJXaWR0aDoiOiAiR2VuacWfbGlrOiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL3ZuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvdm4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI2MTNhMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL3ZuLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidm4iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkjhu6d5IiwKKyAgICAiT0siOiAixJDhu5NuZyDDvSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVE1BUlFVRUUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL3poX2NuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL2xhbmcvemhfY24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE5MTNkMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0TWFycXVlZS9sYW5nL3poX2NuLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiemhfY24iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU5TRVJUTUFSUVVFRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL3BvcHVwcy9pbnNlcnRfbWFycXVlZS5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRNYXJxdWVlL3BvcHVwcy9pbnNlcnRfbWFycXVlZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ODdjZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydE1hcnF1ZWUvcG9wdXBzL2luc2VydF9tYXJxdWVlLmh0bWwKQEAgLTAsMCArMSw5OSBAQAorPGh0bWw+DQorPGhlYWQ+DQorICA8dGl0bGU+TWFycXVlZSBFZGl0b3I8L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vLi4vLi4vcG9wdXBzL3BvcHVwLmNzcyIgLz4NCisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uLy4uL3BvcHVwcy9wb3B1cC5qcyI+PC9zY3JpcHQ+DQorDQorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KKw0KK3ZhciBmaWVsZHMgPSBbImZfbmFtZSIsICJmX3RleHQiLCAiZl9kaXJlY3Rpb24iLCAiZl9iZWhhdmlvciIsICJmX2JnY29sb3IiLCAiZl93aWR0aCIsICJmX2hlaWdodCIsICJmX3Njcm9sbGFtb3VudCIsICJmX3Njcm9sbGRlbGF5Il07DQorDQorZnVuY3Rpb24gSW5pdCgpIHsNCisgIHdpbmRvdy5yZXNpemVUbygzNTAsIDM4MCk7DQorICBfX2RsZ190cmFuc2xhdGUoJ0luc2VydE1hcnF1ZWUnKTsNCisJX19kbGdfaW5pdCgpOw0KKyAgdmFyIHBhcmFtID0gd2luZG93LmRpYWxvZ0FyZ3VtZW50czsNCisgIGZvciAodmFyIGkgaW4gZmllbGRzKSB7DQorICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpZWxkc1tpXSkudmFsdWUgPSBwYXJhbVtmaWVsZHNbaV1dOw0KKyAgfQ0KKyAJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfbmFtZSIpLmZvY3VzKCk7DQorfQ0KKw0KK2Z1bmN0aW9uIG9uT0soKSB7DQorICB2YXIgcmVxdWlyZWQgPSB7DQorICAgICJmX25hbWUiOiAiWW91IG11c3QgZW50ZXIgdGhlIGZvcm0gbmFtZSINCisgIH07DQorICBmb3IgKHZhciBpIGluIHJlcXVpcmVkKSB7DQorCSAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaSk7DQorCSAgaWYgKCFlbC52YWx1ZSkgew0KKwkJYWxlcnQoSFRNTEFyZWEuX2xjKHJlcXVpcmVkW2ldLCAnSW5zZXJ0TWFycXVlZScpKTsNCisJCWVsLmZvY3VzKCk7DQorCQlyZXR1cm4gZmFsc2U7DQorCSAgfQ0KKyAgfQ0KKyAgLy8gcGFzcyBkYXRhIGJhY2sgdG8gdGhlIGNhbGxpbmcgd2luZG93DQorICB2YXIgcGFyYW0gPSBuZXcgT2JqZWN0KCk7DQorICBmb3IgKHZhciBpIGluIGZpZWxkcykgew0KKyAgICBwYXJhbVtmaWVsZHNbaV1dID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmllbGRzW2ldKS52YWx1ZTsNCisgIH0NCisgIF9fZGxnX2Nsb3NlKHBhcmFtKTsNCisgIHJldHVybiBmYWxzZTsNCit9DQorDQorZnVuY3Rpb24gb25DYW5jZWwoKSB7DQorICBfX2RsZ19jbG9zZShudWxsKTsNCisgIHJldHVybiBmYWxzZTsNCit9DQorDQorPC9zY3JpcHQ+DQorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCisuZnIgeyB3aWR0aDogOWVtOyBmbG9hdDogbGVmdDsgcGFkZGluZzogMnB4IDVweDsgdGV4dC1hbGlnbjogcmlnaHQ7IH0NCis8L3N0eWxlPg0KKzwvaGVhZD4NCis8Ym9keSBjbGFzcz0iZGlhbG9nIiBvbmxvYWQ9IkluaXQoKSI+DQorPGRpdiBjbGFzcz0idGl0bGUiPk1hcnF1ZWUgRWRpdG9yPC9kaXY+DQorPGZvcm0+DQorICA8ZGl2IGNsYXNzPSJmciI+TmFtZS9JRDo8L2Rpdj4NCisgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuYW1lIiBpZD0iZl9uYW1lIiBzaXplPSIyMCIgdGl0bGU9Ik5hbWUiIHZhbHVlPSIiIC8+DQorICA8cCAvPg0KKyAgPGRpdiBjbGFzcz0iZnIiPkRpcmVjdGlvbjo8L2Rpdj4NCisgIDxzZWxlY3QgaWQ9ImZfZGlyZWN0aW9uIiBuYW1lPSJkaXJlY3Rpb24iPg0KKwkgIDxvcHRpb24gdmFsdWU9IiI+TGVmdDwvb3B0aW9uPg0KKwkgIDxvcHRpb24gdmFsdWU9InJpZ2h0Ij5SaWdodDwvb3B0aW9uPg0KKyAgPC9zZWxlY3Q+DQorICA8cCAvPg0KKyAgPGRpdiBjbGFzcz0iZnIiPkJlaGF2aW9yOjwvZGl2Pg0KKyAgPHNlbGVjdCBpZD0iZl9iZWhhdmlvciIgbmFtZT0iYmVoYXZpb3IiPg0KKyAgIAk8b3B0aW9uIHZhbHVlPSIiPkNvbnRpbnVvdXM8L29wdGlvbj4NCisgICAJPG9wdGlvbiB2YWx1ZT0ic2xpZGUiPlNsaWRlPC9vcHRpb24+DQorICAgCTxvcHRpb24gdmFsdWU9ImFsdGVybmF0ZSI+QWx0ZXJuYXRlPC9vcHRpb24+DQorICA8L3NlbGVjdD4NCisgIDxwIC8+DQorICA8ZGl2IGNsYXNzPSJmciI+VGV4dDo8L2Rpdj4NCisgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZl90ZXh0IiBuYW1lPSJ0ZXh0IiB2YWx1ZT0iIiBzaXplPSIzMCIgLz4NCisgIDxwIC8+DQorICA8ZGl2IGNsYXNzPSJmciI+QmFja2dyb3VuZC1Db2xvcjo8L2Rpdj4NCisgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZl9iZ2NvbG9yIiBuYW1lPSJiZ2NvbG9yIiB2YWx1ZT0iIiBzaXplPSIzMCIgLz4NCisgIDxwIC8+DQorICA8ZGl2IGNsYXNzPSJmciI+V2lkdGg6PC9kaXY+DQorICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImZfd2lkdGgiIG5hbWU9IndpZHRoIiB2YWx1ZT0iMTAwIiBzaXplPSI1IiBtYXhsZW5ndGg9IjQiIC8+DQorICA8cCAvPg0KKyAgPGRpdiBjbGFzcz0iZnIiPkhlaWdodDo8L2Rpdj4NCisgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZl9oZWlnaHQiIG5hbWU9ImhlaWdodCIgdmFsdWU9IjEwMCIgc2l6ZT0iNSIgbWF4bGVuZ3RoPSI0IiAvPg0KKyAgPHAgLz4NCisgIDxmaWVsZHNldD4NCisgIDxsZWdlbmQ+U3BlZWQgQ29udHJvbDwvbGVnZW5kPg0KKyAgICA8ZGl2IGNsYXNzPSJmciI+U2Nyb2xsIEFtb3VudDo8L2Rpdj4NCisgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJmX3Njcm9sbGFtb3VudCIgbmFtZT0ic2Nyb2xsYW1vdW50IiB2YWx1ZT0iMTAwIiBtYXhsZW5ndGg9IjQiIC8+DQorICAgIDxwIC8+DQorICAgIDxkaXYgY2xhc3M9ImZyIj5TY3JvbGwgRGVsYXk6PC9kaXY+DQorICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZl9zY3JvbGxkZWxheSIgbmFtZT0ic2Nyb2xsZGVsYXkiIHZhbHVlPSIxMDAiIG1heGxlbmd0aD0iNCIgLz4NCisgICAgPHAgLz4NCisgIDwvZmllbGRzZXQ+ICANCis8ZGl2IGlkPSJidXR0b25zIj4NCisgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0ib2siIG9uY2xpY2s9InJldHVybiBvbk9LKCk7Ij5PSzwvYnV0dG9uPg0KKyAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBuYW1lPSJjYW5jZWwiIG9uY2xpY2s9InJldHVybiBvbkNhbmNlbCgpOyI+Q2FuY2VsPC9idXR0b24+DQorPC9kaXY+DQorPC9mb3JtPg0KKzwvYm9keT4NCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL0luc2VydFBpY3R1cmUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvSW5zZXJ0UGljdHVyZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzI0NTU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL0luc2VydFBpY3R1cmUuanMKQEAgLTAsMCArMSwyNSBAQAorLy8gSW5zZXJ0IEltYWdlIHBsdWdpbiBmb3IgWGluaGENCisvLyBPcmlnaW5hbCBBdXRob3IgLSBVZG8gU2NobWFsDQorLy8NCisvLyAoYykgd3d3LlNjaGFmZnJhdGgtTmV1ZU1lZGllbi5kZSAgMjAwNA0KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4NCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuDQorDQorZnVuY3Rpb24gSW5zZXJ0UGljdHVyZShlZGl0b3IpIHsNCisgIGlmICggdHlwZW9mIF9lZGl0b3JfcGljdHVyZVBhdGggIT09ICJzdHJpbmciICkNCisgICAgX2VkaXRvcl9waWN0dXJlUGF0aCA9IFhpbmhhLmdldFBsdWdpbkRpcigiSW5zZXJ0UGljdHVyZSIpICsgIi9kZW1vX3BpY3R1cmVzLyI7DQorICBJbnNlcnRQaWN0dXJlLlNjcmlwdGluZyA9ICJwaHAiOyAvL2Vsc2UgImFzcCINCisgIGVkaXRvci5jb25maWcuVVJJcy5pbnNlcnRfaW1hZ2UgPSAgJy4uL3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9JbnNlcnRQaWN0dXJlLicgKyBJbnNlcnRQaWN0dXJlLlNjcmlwdGluZyArICc/cGljdHVyZXBhdGg9JyArIF9lZGl0b3JfcGljdHVyZVBhdGg7DQorfQ0KKw0KK0luc2VydFBpY3R1cmUuX3BsdWdpbkluZm8gPSB7DQorICBuYW1lICAgICAgICAgIDogIkluc2VydFBpY3R1cmUiLA0KKyAgdmVyc2lvbiAgICAgICA6ICIxLjAuMiIsDQorICBkZXZlbG9wZXIgICAgIDogIlVkbyBTY2htYWwiLA0KKyAgZGV2ZWxvcGVyX3VybCA6ICJodHRwOi8vd3d3LlNjaGFmZnJhdGgtTmV1ZU1lZGllbi5kZS8iLA0KKyAgc3BvbnNvciAgICAgICA6ICJMLk4uU2NoYWZmcmF0aCBOZXVlTWVkaWVuIiwNCisgIHNwb25zb3JfdXJsICAgOiAiaHR0cDovL3d3dy5zY2hhZmZyYXRoLW5ldWVtZWRpZW4uZGUvIiwNCisgIGNfb3duZXIgICAgICAgOiAiVWRvIFNjaG1hbCIsDQorICBsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIg0KK307DQorDQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL0luc2VydFBpY3R1cmUucGhwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL0luc2VydFBpY3R1cmUucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZTNlNWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvSW5zZXJ0UGljdHVyZS5waHAKQEAgLTAsMCArMSwzMTcgQEAKKzw/UEhQCisgIAorICAKKyAgZGllKCdEZXZlbG9wZXIsIHRoaXMgcGx1Z2luIEluc2VydFBpY3R1cmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gIFlvdSBhcmUgU1RST05HTFkgYWR2aXNlZCB0byB1c2UgSW1hZ2VNYW5hZ2VyIHBsdWdpbiBpbnN0ZWFkLiAgSWYgeW91IHJlYWxseSBtdXN0IGNvbnRpbnVlIHVzaW5nIHRoaXMgcGx1Z2luLCBwbGVhc2UgZWRpdCB4aW5oYS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvSW5zZXJ0UGljdHVyZS5waHAgdG8gcmVtb3ZlIHRoaXMgbm90aWNlLicpOworICAKKyAgLyogREVWRUxPUEVSIQorICAgKiAKKyAgICogSW5zZXJ0UGljdHVyZSBpcyBwcm9iYWJseSBpbnNlY3VyZS4gIFRoZXJlIGhhdm4ndCBiZWVuIHJlcG9ydHMgb2YgaXQgYmVpbmcgYXR0YWNrZWQsIGJ1dCAKKyAgICogcmVhbGx5IGl0IGlzIG5vdCB2ZXJ5IGdvb2QuICBJZiB5b3UgZW5hYmxlIHRoaXMgcGx1Z2luIChieSBjb21tZW50aW5nIG91dCB0aGUgZGllIHN0YXRlbWVudCBhYm92ZSkKKyAgICogeW91IGFyZSBwcm9iYWJseSBkaWNpbmcgd2l0aCBkZWF0aC4KKyAgICoKKyAgICogSW1hZ2VNYW5hZ2VyIGlzIHJlY29tbWVuZGVkIHRvIHJlcGxhY2UgdGhpcyBwbHVnaW4uICBUaGlzIHBsdWdpbiB3aWxsIGJlIHJlbW92ZWQgYXQgYSB0aW1lCisgICAqIGluIHRoZSBmdXR1cmUuCisgICAqCisgICAqLworICAKKyAgLy90aGlzIHBsdWdpbiBvbmx5IHVzZSB0aGUgcmVsYXRpdiB3ZWJwYXRoIHRvIHRoZSBwaWN0dXJlZm9sZGVyCisgIC8vZGVmYXVsdCB+ICAvWGluaGEvcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2RlbW9fcGljdHVyZXMvCisgIHN0cnN0ciggUEhQX09TLCAiV0lOIikgPyAkc3RyUGF0aFNlcGFyYXRvciA9ICJcXCIgOiAkc3RyUGF0aFNlcGFyYXRvciA9ICIvIjsKKyAgaWYgKGlzc2V0KCRfUkVRVUVTVFsncGljdHVyZXBhdGgnXSkpIHsKKyAgICAkUGljdHVyZVBhdGggPSAkX1JFUVVFU1RbJ3BpY3R1cmVwYXRoJ107CisKKyAgICAkQUluc2VydFBpY3R1cmVQYXRoID0gZXhwbG9kZSAoJy8nLCBkaXJuYW1lKCRfU0VSVkVSWydQSFBfU0VMRiddKSk7CisgICAgJEFMb2NhbEluc2VydFBpY3R1cmVQYXRoID0gZXhwbG9kZSgkc3RyUGF0aFNlcGFyYXRvciwgZGlybmFtZShfX0ZJTEVfXykpOworICAgICRBdGhlUm9vdFBhdGggPSBhcnJheV92YWx1ZXMgKGFycmF5X2RpZmYgKCRBTG9jYWxJbnNlcnRQaWN0dXJlUGF0aCwgJEFJbnNlcnRQaWN0dXJlUGF0aCkpOworICAgICRSb290UGF0aCA9IGltcGxvZGUoJHN0clBhdGhTZXBhcmF0b3IsICRBdGhlUm9vdFBhdGgpOworCisgICAgJExvY2FsUGljdHVyZVBhdGggPSBzdHJfcmVwbGFjZSgnaHR0cDovLycuJF9TRVJWRVJbJ0hUVFBfSE9TVCddLCAiIiwgJFBpY3R1cmVQYXRoKTsKKyAgICAkTG9jYWxQaWN0dXJlUGF0aCA9IHN0cl9yZXBsYWNlKCcvJywgJHN0clBhdGhTZXBhcmF0b3IsICRMb2NhbFBpY3R1cmVQYXRoKTsKKyAgICAkTG9jYWxQaWN0dXJlUGF0aCA9ICRSb290UGF0aC4kTG9jYWxQaWN0dXJlUGF0aDsKKworICAgICRMb2NhbFBpY3R1cmVQYXRoID0gZGlybmFtZShfX0ZJTEVfXykuJHN0clBhdGhTZXBhcmF0b3IuJ2RlbW9fcGljdHVyZXMnLiRzdHJQYXRoU2VwYXJhdG9yOworICAgIC8vJExvY2FsUGljdHVyZVBhdGggPSByZWFscGF0aCgnLi4vLi4vLi4vLi4vaW1hZ2VzL2NvbnRlbnQvJykuJHN0clBhdGhTZXBhcmF0b3I7CisgIH0KKyAgJGxpbWl0ZWRleHQgPSBhcnJheSgiLmdpZiIsIi5qcGciLCIucG5nIiwiLmpwZWciKTsgLy9FeHRlbnNpb25zIHlvdSB3YW50IGZpbGVzIHVwbG9hZGVkIGxpbWl0ZWQgdG8uCisgICRsaW1pdGVkc2l6ZSA9ICIxMDAwMDAwIjsgLy9zaXplIGxpbWl0IGluIGJ5dGVzCisgICRtZXNzYWdlID0gIiI7CisKKyAgZnVuY3Rpb24gZm9ybWF0U2l6ZSgkc2l6ZSkKKyAgeworICAgIGlmKCRzaXplIDwgMTAyNCkKKyAgICAgIHJldHVybiAkc2l6ZS4nIGJ5dGVzJzsKKyAgICBlbHNlIGlmKCRzaXplID49IDEwMjQgJiYgJHNpemUgPCAxMDI0KjEwMjQpCisgICAgICByZXR1cm4gc3ByaW50ZignJTAxLjJmJywkc2l6ZS8xMDI0LjApLicgS2InOworICAgIGVsc2UKKyAgICAgIHJldHVybiBzcHJpbnRmKCclMDEuMmYnLCRzaXplLygxMDI0LjAqMTAyNCkpLicgTWInOworICB9CisgICREZXN0RmlsZU5hbWUgPSAiIjsKKyAgaWYgKGlzc2V0KCRfRklMRVNbJ2ZpbGUnXSkpIHsKKyAgICAkZmlsZSA9ICRfRklMRVNbJ2ZpbGUnXTsKKyAgICAkZXh0ID0gc3RycmNocigkZmlsZVsnbmFtZSddLCcuJyk7CisgICAgaWYgKCFpbl9hcnJheSgkZXh0LCRsaW1pdGVkZXh0KSkKKyAgICAgICRtZXNzYWdlID0gIlRoZSBmaWxlIHlvdSBhcmUgdXBsb2FkaW5nIGRvZXNuJ3QgaGF2ZSB0aGUgY29ycmVjdCBleHRlbnNpb24uIjsKKyAgICBlbHNlIGlmIChmaWxlX2V4aXN0cygkTG9jYWxQaWN0dXJlUGF0aC4kZmlsZVsnbmFtZSddKSkKKyAgICAgICRtZXNzYWdlID0gIlRoZSBmaWxlIHlvdSBhcmUgdXBsb2FkaW5nIGFscmVhZHkgZXhpc3RzLiI7CisgICAgZWxzZSBpZiAoJGZpbGVbJ3NpemUnXSA+ICRsaW1pdGVkc2l6ZSkKKyAgICAgICRtZXNzYWdlID0gIlRoZSBmaWxlIHlvdSBhcmUgdXBsb2FkaW5nIGlzIHRvIGJpZy4gVGhlIG1heCBGaWxlc2l6ZSBpczwvc3Bhbj48c3Bhbj4gIi5mb3JtYXRTaXplKCRsaW1pdGVkc2l6ZSkuIi4iOworICAgIGVsc2UKKyAgICAgIGNvcHkoJGZpbGVbJ3RtcF9uYW1lJ10sICRMb2NhbFBpY3R1cmVQYXRoLiRmaWxlWyduYW1lJ10pOworICAgICREZXN0RmlsZU5hbWUgPSAkZmlsZVsnbmFtZSddOworICB9Cis/PgorPGh0bWw+Cis8aGVhZD4KKyAgPHRpdGxlPkluc2VydCBJbWFnZTwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi8uLi9wb3B1cHMvcG9wdXAuY3NzIiAvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vcG9wdXBzL3BvcHVwLmpzIj48L3NjcmlwdD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICB3aW5kb3cucmVzaXplVG8oNTAwLCA0OTApOwordmFyIFhpbmhhID0gd2luZG93Lm9wZW5lci5YaW5oYTsKK2Z1bmN0aW9uIGkxOG4oc3RyKSB7CisgIHJldHVybiAoWGluaGEuX2xjKHN0ciwgJ0luc2VydFBpY3R1cmUnKSk7Cit9CisKK2Z1bmN0aW9uIEluaXQoKSB7CisgIF9fZGxnX3RyYW5zbGF0ZSgiSW5zZXJ0UGljdHVyZSIpOworICBfX2RsZ19pbml0KCk7CisKKyAgLy8gTWFrZSBzdXJlIHRoZSB0cmFuc2xhdGVkIHN0cmluZyBhcHBlYXJzIGluIHRoZSBkcm9wIGRvd24uIChmb3IgZ2Vja28pCisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2FsaWduIikuc2VsZWN0ZWRJbmRleCA9IDA7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2FsaWduIikuc2VsZWN0ZWRJbmRleCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2FsaWduIikuc2VsZWN0ZWRJbmRleDsKKyAgdmFyIHBhcmFtID0gd2luZG93LmRpYWxvZ0FyZ3VtZW50czsKKyAgaWYgKHBhcmFtKSB7CisgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl91cmwiKS52YWx1ZSA9IHBhcmFtWyJmX3VybCJdOworICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYWx0IikudmFsdWUgPSBwYXJhbVsiZl9hbHQiXTsKKyAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2JvcmRlciIpLnZhbHVlID0gcGFyYW1bImZfYm9yZGVyIl07CisgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9hbGlnbiIpLnZhbHVlID0gcGFyYW1bImZfYWxpZ24iXTsKKyAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3ZlcnQiKS52YWx1ZSA9IChwYXJhbVsiZl92ZXJ0Il0hPSItMSIpID8gcGFyYW1bImZfdmVydCJdIDogIiI7CisgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9ob3JpeiIpLnZhbHVlID0gKHBhcmFtWyJmX2hvcml6Il0hPSItMSIpID8gcGFyYW1bImZfaG9yaXoiXSA6ICIiOworICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfaGVpZ2h0IikudmFsdWUgPSBwYXJhbVsiZl9oZWlnaHQiXTsKKyAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3dpZHRoIikudmFsdWUgPSBwYXJhbVsiZl93aWR0aCJdOworICAgICAgd2luZG93LmlwcmV2aWV3LmxvY2F0aW9uLnJlcGxhY2UocGFyYW0uZl91cmwpOworICB9CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3VybCIpLmZvY3VzKCk7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlbGlzdCIpLnNlbGVjdGVkSW5kZXggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlsZWxpc3QiKS5zZWxlY3RlZEluZGV4OworPD9waHAgSWYgKCREZXN0RmlsZU5hbWU8PiIiKQorICBlY2hvICJDb3B5VG9VUkwoXCIiLiRQaWN0dXJlUGF0aC4kRGVzdEZpbGVOYW1lLiJcIik7IgorPz4KK30KKworZnVuY3Rpb24gb25PSygpIHsKKyAgdmFyIHJlcXVpcmVkID0geworICAgICJmX3VybCI6IGkxOG4oIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiKQorICB9OworICBmb3IgKHZhciBpIGluIHJlcXVpcmVkKSB7CisgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaSk7CisgICAgaWYgKCFlbC52YWx1ZSkgeworICAgICAgYWxlcnQocmVxdWlyZWRbaV0pOworICAgICAgZWwuZm9jdXMoKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKyAgLy8gcGFzcyBkYXRhIGJhY2sgdG8gdGhlIGNhbGxpbmcgd2luZG93CisgIHZhciBmaWVsZHMgPSBbImZfdXJsIiwgImZfYWx0IiwgImZfYWxpZ24iLCAiZl9ib3JkZXIiLCAiZl9ob3JpeiIsICJmX3ZlcnQiLCAiZl93aWR0aCIsICJmX2hlaWdodCJdOworICB2YXIgcGFyYW0gPSBuZXcgT2JqZWN0KCk7CisgIGZvciAodmFyIGkgaW4gZmllbGRzKSB7CisgICAgdmFyIGlkID0gZmllbGRzW2ldOworICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICBwYXJhbVtpZF0gPSBlbC52YWx1ZTsKKyAgfQorICBfX2RsZ19jbG9zZShwYXJhbSk7CisgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gb25VcGxvYWQoKSB7CisgIHZhciByZXF1aXJlZCA9IHsKKyAgICAiZmlsZSI6IGkxOG4oIlBsZWFzZSBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZC4iKQorICB9OworICBmb3IgKHZhciBpIGluIHJlcXVpcmVkKSB7CisgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaSk7CisgICAgaWYgKCFlbC52YWx1ZSkgeworICAgICAgYWxlcnQocmVxdWlyZWRbaV0pOworICAgICAgZWwuZm9jdXMoKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIG9uQ2FuY2VsKCkgeworICBfX2RsZ19jbG9zZShudWxsKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBvblByZXZpZXcoKSB7CisgIHZhciBmX3VybCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3VybCIpOworICB2YXIgdXJsID0gZl91cmwudmFsdWU7CisgIGlmICghdXJsKSB7CisgICAgYWxlcnQoaTE4bigiWW91IG11c3QgZW50ZXIgdGhlIFVSTCIpKTsKKyAgICBmX3VybC5mb2N1cygpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBpZiAoZG9jdW1lbnQuYWxsKSB7CisgICAgd2luZG93LmlwcmV2aWV3LmxvY2F0aW9uLnJlcGxhY2UoJ3ZpZXdwaWN0dXJlLmh0bWw/Jyt1cmwpOworICB9IGVsc2UgeworICAgIHdpbmRvdy5pcHJldmlldy5sb2NhdGlvbi5yZXBsYWNlKHVybCk7CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCit2YXIgaW1nID0gbmV3IEltYWdlKCk7CitmdW5jdGlvbiBpbWdXYWl0KCkgeworICB3YWl0aW5nID0gd2luZG93LnNldEludGVydmFsKCJpbWdJc0xvYWRlZCgpIiwgMTAwMCkKK30KK2Z1bmN0aW9uIGltZ0lzTG9hZGVkKCkgeworICBpZihpbWcud2lkdGggPiAwKSB7CisgICAgd2luZG93LmNsZWFySW50ZXJ2YWwod2FpdGluZykKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl93aWR0aCIpLnZhbHVlID0gaW1nLndpZHRoOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2hlaWdodCIpLnZhbHVlID0gaW1nLmhlaWdodDsKKyAgfQorfQorCitmdW5jdGlvbiBDb3B5VG9VUkwoaW1nTmFtZSkgeworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl91cmwiKS52YWx1ZSA9IGltZ05hbWU7CisgIG9uUHJldmlldygpOworICBpbWcuc3JjID0gaW1nTmFtZTsKKyAgaW1nLm9uTG9hZCA9IGltZ1dhaXQoKQorfQorCitmdW5jdGlvbiBvcGVuRmlsZSgpIHsKKyAgd2luZG93Lm9wZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfdXJsIikudmFsdWUsJycsJycpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iZGlhbG9nIiBvbmxvYWQ9IkluaXQoKSI+Cis8ZGl2IGNsYXNzPSJ0aXRsZSI+SW5zZXJ0IEltYWdlPC9kaXY+Cis8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgc3R5bGU9InBhZGRpbmc6IDBweDsgbWFyZ2luOiAwcHgiPgorICA8dGJvZHk+CisgIDx0cj4KKyAgICA8dGQ+SW1hZ2VzIG9uIHRoZSBTZXJ2ZXI6PD9waHAgLyplY2hvICRMb2NhbFBpY3R1cmVQYXRoKi8gPz48YnI+CisgICAgPHNlbGVjdCBpZD0iZmlsZWxpc3QiIG5hbWU9ImZpbGVsaXN0IiBzdHlsZT0id2lkdGg6MjAwIiBzaXplPSIxMCIgb25DbGljaz0iQ29weVRvVVJMKHRoaXNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZSk7Ij4KKzw/cGhwCisgICRkID0gQGRpcigkTG9jYWxQaWN0dXJlUGF0aCk7CisgIHdoaWxlIChmYWxzZSAhPT0gKCRlbnRyeSA9ICRkLT5yZWFkKCkpKSB7CisgICAgaWYoc3Vic3RyKCRlbnRyeSwwLDEpICE9ICcuJykgeyAgLy9ub3QgYSBkb3QgZmlsZSBvciBkaXJlY3RvcnkKKyAgICAgIGlmICgkZW50cnkgPT0gJERlc3RGaWxlTmFtZSkKKyAgICAgICAgLy8gU3BsaXQgdG8gc3RvcCBsY19wYXJzZV9zdHJpbmdzIHBpY2tpbmcgaXQgdXAKKyAgICAgICAgZWNobyAnPE9QJy4nVElPTiB2YWx1ZT0iJyAuICRQaWN0dXJlUGF0aC4kZW50cnkuICciIHNlbGVjdGVkPSJzZWxlY3RlZCI+JyAuICRlbnRyeSAuICcoJyAuIGZvcm1hdFNpemUoZmlsZXNpemUoJExvY2FsUGljdHVyZVBhdGguJ1xcJy4kZW50cnkpKSAuJyk8L09QVElPTj4nOworICAgICAgZWxzZQorICAgICAgICBlY2hvICc8T1AnLidUSU9OIHZhbHVlPSInIC4gJFBpY3R1cmVQYXRoLiRlbnRyeS4gJyI+JyAuICRlbnRyeSAuICcoJyAuIGZvcm1hdFNpemUoZmlsZXNpemUoJExvY2FsUGljdHVyZVBhdGguJ1xcJy4kZW50cnkpKSAuJyk8L09QVElPTj4nOworICAgIH0KKyAgfQorICAkZC0+Y2xvc2UoKTsKKz8+CisgICAgPC9zZWxlY3Q+CisKKyAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPgorICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJsb2NhbHBpY3R1cmVwYXRoIiB2YWx1ZT0iPD9waHAgZWNobyAkTG9jYWxQaWN0dXJlUGF0aCA/PiI+CisgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InBpY3R1cmVwYXRoIiB2YWx1ZT0iPD9waHAgZWNobyAkUGljdHVyZVBhdGggPz4iPgorICAgICAgICA8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIgaWQ9ImZpbGUiIHNpemU9IjMwIj48YnI+CisgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJvayIgb25jbGljaz0ib25VcGxvYWQoKTsiPlVwbG9hZCBmaWxlPC9idXR0b24+PGJyPgorICAgICAgICA8c3Bhbj48P3BocCBlY2hvICRtZXNzYWdlID8+PC9zcGFuPgorICAgICAgPC9mb3JtPgorCisgICAgPC90ZD4KKyAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIzMCI+CisgICAgPHNwYW4+SW1hZ2UgUHJldmlldzo8L3NwYW4+CisgICAgPGEgaHJlZj0iIyIgb25DbGljaz0iamF2YXNjcmlwdDpvcGVuRmlsZSgpOyJ0aXRsZT0iIE9wZW4gZmlsZSBpbiBuZXcgd2luZG93Ij48aW1nIHNyYz0iaW1nL2J0bl9vcGVuLmdpZiIgIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgYm9yZGVyPSIwIiB0aXRsZT0iT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciIC8+PC9hPjxiciAvPgorICAgIDxpZnJhbWUgbmFtZT0iaXByZXZpZXciIGlkPSJpcHJldmlldyIgZnJhbWVib3JkZXI9IjAiIHN0eWxlPSJib3JkZXIgOiAxcHggc29saWQgZ3JheTsiIGhlaWdodD0iMjAwIiB3aWR0aD0iMjAwIiBzcmM9IiI+PC9pZnJhbWU+CisgICAgPC90ZD4KKyAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+CisKKzxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9ImdldCI+CisgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImxvY2FscGljdHVyZXBhdGgiIHZhbHVlPSI8P3BocCBlY2hvICRMb2NhbFBpY3R1cmVQYXRoID8+Ij4KKyAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icGljdHVyZXBhdGgiIHZhbHVlPSI8P3BocCBlY2hvICRQaWN0dXJlUGF0aCA/PiI+Cis8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgc3R5bGU9InBhZGRpbmc6IDBweDsgbWFyZ2luOiAwcHgiPgorICA8dGJvZHk+CisKKyAgPHRyPgorICAgIDx0ZCBzdHlsZT0id2lkdGg6IDdlbTsgdGV4dC1hbGlnbjogcmlnaHQiPkltYWdlIFVSTDo8L3RkPgorICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idXJsIiBpZD0iZl91cmwiIHN0eWxlPSJ3aWR0aDo3NSUiCisgICAgICB0aXRsZT0iRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIiAgdmFsdWU9Ijw/cGhwIGVjaG8gJFBpY3R1cmVQYXRoLiREZXN0RmlsZU5hbWUgPz4iLz4KKyAgICAgIDxidXR0b24gbmFtZT0icHJldmlldyIgb25jbGljaz0icmV0dXJuIG9uUHJldmlldygpOyIKKyAgICAgIHRpdGxlPSJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciPlByZXZpZXc8L2J1dHRvbj4KKyAgICA8L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkIHN0eWxlPSJ3aWR0aDogN2VtOyB0ZXh0LWFsaWduOiByaWdodCI+QWx0ZXJuYXRlIHRleHQ6PC90ZD4KKyAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImFsdCIgaWQ9ImZfYWx0IiBzdHlsZT0id2lkdGg6MTAwJSIKKyAgICAgIHRpdGxlPSJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyIgLz48L3RkPgorICA8L3RyPgorCisgIDwvdGJvZHk+Cis8L3RhYmxlPgorCis8cCAvPgorCis8ZmllbGRzZXQgc3R5bGU9ImZsb2F0OiBsZWZ0OyBtYXJnaW4tbGVmdDogNXB4OyI+Cis8bGVnZW5kPkxheW91dDwvbGVnZW5kPgorCis8ZGl2IGNsYXNzPSJzcGFjZSI+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImZsIiBzdHlsZT0id2lkdGg6IDZlbTsiPkFsaWdubWVudDo8L2Rpdj4KKzxzZWxlY3Qgc2l6ZT0iMSIgbmFtZT0iYWxpZ24iIGlkPSJmX2FsaWduIgorICB0aXRsZT0iUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI+CisgIDxvcHRpb24gdmFsdWU9IiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5Ob3Qgc2V0PC9vcHRpb24+CisgIDxvcHRpb24gdmFsdWU9ImxlZnQiICAgICAgICAgICAgICAgICAgICAgICAgID5MZWZ0PC9vcHRpb24+CisgIDxvcHRpb24gdmFsdWU9InJpZ2h0IiAgICAgICAgICAgICAgICAgICAgICAgID5SaWdodDwvb3B0aW9uPgorICA8b3B0aW9uIHZhbHVlPSJ0ZXh0dG9wIiAgICAgICAgICAgICAgICAgICAgICA+VGV4dHRvcDwvb3B0aW9uPgorICA8b3B0aW9uIHZhbHVlPSJhYnNtaWRkbGUiICAgICAgICAgICAgICAgICAgICA+QWJzbWlkZGxlPC9vcHRpb24+CisgIDxvcHRpb24gdmFsdWU9ImJhc2VsaW5lIiAgICAgICAgICAgICAgICAgICAgID5CYXNlbGluZTwvb3B0aW9uPgorICA8b3B0aW9uIHZhbHVlPSJhYnNib3R0b20iICAgICAgICAgICAgICAgICAgICA+QWJzYm90dG9tPC9vcHRpb24+CisgIDxvcHRpb24gdmFsdWU9ImJvdHRvbSIgICAgICAgICAgICAgICAgICAgICAgID5Cb3R0b208L29wdGlvbj4KKyAgPG9wdGlvbiB2YWx1ZT0ibWlkZGxlIiAgICAgICAgICAgICAgICAgICAgICAgPk1pZGRsZTwvb3B0aW9uPgorICA8b3B0aW9uIHZhbHVlPSJ0b3AiICAgICAgICAgICAgICAgICAgICAgICAgICA+VG9wPC9vcHRpb24+Cis8L3NlbGVjdD4KKworPHAgLz4KKworPGRpdiBjbGFzcz0iZmwiIHN0eWxlPSJ3aWR0aDogNmVtOyI+Qm9yZGVyIHRoaWNrbmVzczo8L2Rpdj4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJib3JkZXIiIGlkPSJmX2JvcmRlciIgc2l6ZT0iNSIgdGl0bGU9IkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiIC8+Cis8ZGl2IGNsYXNzPSJzcGFjZSI+PC9kaXY+CisKKzwvZmllbGRzZXQ+CisKKzxmaWVsZHNldCBzdHlsZT0iZmxvYXQ6IGxlZnQ7IG1hcmdpbi1sZWZ0OiA1cHg7Ij4KKzxsZWdlbmQ+U2l6ZTwvbGVnZW5kPgorCis8ZGl2IGNsYXNzPSJzcGFjZSI+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImZsIiBzdHlsZT0id2lkdGg6IDVlbTsiPldpZHRoOjwvZGl2PgorPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IndpZHRoIiBpZD0iZl93aWR0aCIgc2l6ZT0iNSIgdGl0bGU9IkxlYXZlIGVtcHR5IGZvciBub3QgZGVmaW5lZCIgLz4KKzxwIC8+CisKKzxkaXYgY2xhc3M9ImZsIiBzdHlsZT0id2lkdGg6IDVlbTsiPkhlaWdodDo8L2Rpdj4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJoZWlnaHQiIGlkPSJmX2hlaWdodCIgc2l6ZT0iNSIgdGl0bGU9IkxlYXZlIGVtcHR5IGZvciBub3QgZGVmaW5lZCIgLz4KKzxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KKworPC9maWVsZHNldD4KKworPGZpZWxkc2V0IHN0eWxlPSJmbG9hdDpyaWdodDsgbWFyZ2luLXJpZ2h0OiA1cHg7Ij4KKzxsZWdlbmQ+U3BhY2luZzwvbGVnZW5kPgorCis8ZGl2IGNsYXNzPSJzcGFjZSI+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImZyIiBzdHlsZT0id2lkdGg6IDVlbTsiPkhvcml6b250YWw6PC9kaXY+Cis8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaG9yaXoiIGlkPSJmX2hvcml6IiBzaXplPSI1IiB0aXRsZT0iSG9yaXpvbnRhbCBwYWRkaW5nIiAvPgorPHAgLz4KKworPGRpdiBjbGFzcz0iZnIiIHN0eWxlPSJ3aWR0aDogNWVtOyI+VmVydGljYWw6PC9kaXY+Cis8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idmVydCIgaWQ9ImZfdmVydCIgc2l6ZT0iNSIgdGl0bGU9IlZlcnRpY2FsIHBhZGRpbmciIC8+CisKKzxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KKworPC9maWVsZHNldD4KKzxiciBjbGVhcj0iYWxsIiAvPgorCis8ZGl2IGlkPSJidXR0b25zIj4KKyAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9Im9rIiBvbmNsaWNrPSJyZXR1cm4gb25PSygpOyI+T0s8L2J1dHRvbj4KKyAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG5hbWU9ImNhbmNlbCIgb25jbGljaz0icmV0dXJuIG9uQ2FuY2VsKCk7Ij5DYW5jZWw8L2J1dHRvbj4KKzwvZGl2PgorPC9mb3JtPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9kZW1vX3BpY3R1cmVzL2Jpa2VycGVlcC5qcGcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvZGVtb19waWN0dXJlcy9iaWtlcnBlZXAuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZTcwMjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvZGVtb19waWN0dXJlcy9iaWtlcnBlZXAuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9kZW1vX3BpY3R1cmVzL3dlc25vdGgwNzguanBnIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2RlbW9fcGljdHVyZXMvd2Vzbm90aDA3OC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEzN2QxYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9kZW1vX3BpY3R1cmVzL3dlc25vdGgwNzguanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9pbWcvYnRuX29wZW4uZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2ltZy9idG5fb3Blbi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA1NmYyYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9pbWcvYnRuX29wZW4uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9pbWcvbm9waWMuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2ltZy9ub3BpYy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlOGE3OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9pbWcvbm9waWMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2I1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvYjUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc4MGZkZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2I1LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiYjUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvY2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9jaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmE4OGFiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvY2guanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi5Y+W5raIIiwKKyAgICAiT0siOiAi5aW9IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvY3ouanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9jei5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTZmMmYyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvY3ouanMKQEAgLTAsMCArMSwyOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjeiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJCYXNlbGluZSI6ICJaw6FrbGFkbsOtIGxpbmthIiwKKyAgICAiQm90dG9tIjogIkRvbMWvIiwKKyAgICAiQ2FuY2VsIjogIlpydcWhaXQiLAorICAgICJIZWlnaHQ6IjogIlbDvcWha2EiLAorICAgICJJbWFnZSBVUkw6IjogIkFkcmVzYSBvYnLDoXprdSIsCisgICAgIkxheW91dCI6ICJSb3psb8W+ZW7DrSIsCisgICAgIkxlZnQiOiAiVmxldm8iLAorICAgICJNaWRkbGUiOiAiTmEgc3TFmWVkIiwKKyAgICAiT0siOiAiT0siLAorICAgICJSaWdodCI6ICJWcHJhdm8iLAorICAgICJTcGFjaW5nIjogIk1lemVyeSIsCisgICAgIlRvcCI6ICJOYWhvcnUiLAorICAgICJXaWR0aDoiOiAixaDDrcWZa2EiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9kYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNWZiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9kYS5qcwpAQCAtMCwwICsxLDQ4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICJCdW5kIiwKKyAgICAiQWJzbWlkZGxlIjogIkNlbnRyZXJldCIsCisgICAgIkFsaWdubWVudDoiOiAiSnVzdGVyaW5nOiIsCisgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJBbHRlcm5hdGl2IHRleHQ6IiwKKyAgICAiQmFzZWxpbmUiOiAiR3J1bmRsaW5qZSIsCisgICAgIkJvcmRlciB0aGlja25lc3M6IjogIkthbnRicmVkZGU6IiwKKyAgICAiQm90dG9tIjogIlRla3N0YnVuZCIsCisgICAgIkNhbmNlbCI6ICJBbm51bGxlciIsCisgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICJBbmdpdiBiaWxsZWRldHMgVVJMIiwKKyAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiZm9yIGJyb3dzZXJlIGRlciBpa2tlIHVuZGVyc3TDuHR0ZXIgYmlsbGVkZXIiLAorICAgICJIZWlnaHQ6IjogIkjDuGpkZToiLAorICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiVmFuZHJldCBmeWxkIiwKKyAgICAiSG9yaXpvbnRhbDoiOiAidmFuZHJldDoiLAorICAgICJJbWFnZSBQcmV2aWV3OiI6ICJCaWxsZWRlIHNtdWdraWc6IiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJCaWxsZWRlIFVSTDoiLAorICAgICJJbnNlcnQgSW1hZ2UiOiAiSW5kc8OmdCBiaWxsZWRlIiwKKyAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiVG9tIGh2aXMgaW5nZW4ga2FudCIsCisgICAgIkxlZnQiOiAiVmVuc3RyZSIsCisgICAgIk1pZGRsZSI6ICJNaWR0IiwKKyAgICAiTm90IHNldCI6ICJVYmVzdGVtdCIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJCaWxsZWRldHMgcG9zaXRpb24iLAorICAgICJQcmV2aWV3IjogIlNtdWdraWciLAorICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiU211Z2tpZyBhZiBiaWxsZWRldCBpIGV0IG55dCB2aW5kdWUiLAorICAgICJSaWdodCI6ICJIw7hqcmUiLAorICAgICJTaXplIjogIlN0w7hycmVsc2UiLAorICAgICJTcGFjaW5nIjogIkFmc3RhbmQiLAorICAgICJUZXh0dG9wIjogIlRla3N0dG9wIiwKKyAgICAiVG9wIjogIlRvcCIsCisgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiTG9kcmV0IGZ5bGQiLAorICAgICJWZXJ0aWNhbDoiOiAibG9kcmV0OiIsCisgICAgIldpZHRoOiI6ICJCcmVkZGU6IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTE2MGEzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvZGUuanMKQEAgLTAsMCArMSw1NCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAidW50ZW4gYsO8bmRpZyIsCisgICAgIkFic21pZGRsZSI6ICJtaXR0aWciLAorICAgICJBbGlnbm1lbnQ6IjogIkF1c3JpY2h0dW5nOiIsCisgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJBbHRlcm5hdGl2ZXIgVGV4dDoiLAorICAgICJCYXNlbGluZSI6ICJHcnVuZGxpbmllIiwKKyAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiUmFuZHN0w6Rya2U6IiwKKyAgICAiQm90dG9tIjogInVudGVuIiwKKyAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICJCaXR0ZSBnZWJlbiBzaWUgaGllciBkaWUgQmlsZCBVUkwgZWluIiwKKyAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiZsO8ciBCcm93c2VyLCBkaWUga2VpbmUgQmlsZGVyIHVudGVyc3TDvHR6ZW4iLAorICAgICJIZWlnaHQ6IjogIkjDtmhlIiwKKyAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogImhvcml6b250YWxlciBJbmhhbHRzYWJzdGFuZCIsCisgICAgIkhvcml6b250YWw6IjogImhvcml6b250YWw6IiwKKyAgICAiSW1hZ2UgUHJldmlldzoiOiAiQmlsZCBWb3JhbnNpY2h0OiIsCisgICAgIkltYWdlIFVSTDoiOiAiQmlsZCBVUkw6IiwKKyAgICAiSW5zZXJ0IEltYWdlIjogIkJpbGQgZWluZsO8Z2VuIiwKKyAgICAiTGF5b3V0IjogIkdlc3RhbHR1bmciLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogImxlZXIgbGFzc2VuIGbDvHIga2VpbmVuIFJhbmQiLAorICAgICJMZWZ0IjogImxpbmtzIiwKKyAgICAiTWlkZGxlIjogInplbnRyaWVydCIsCisgICAgIk5vdCBzZXQiOiAibmljaHQgZWluZ2VzdGVsbHQiLAorICAgICJPSyI6ICJPSyIsCisgICAgIk9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIkRhdGVpIGluIG5ldWVuIEZlbnN0ZXIgYW56ZWlnZW4iLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIkFub3JkbnVuZyBkaWVzZXMgQmlsZGVzIiwKKyAgICAiUHJldmlldyI6ICJWb3JzY2hhdSIsCisgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJWb3JhbnNpY2h0IGRlcyBCaWxkZXMgaW4gZWluZW0gbmV1ZW4gRmVuc3RlciIsCisgICAgIlJpZ2h0IjogInJlY2h0cyIsCisgICAgIlNpemUiOiAiR3LDtsOfZSIsCisgICAgIlNwYWNpbmciOiAiQWJzdGFuZCIsCisgICAgIlRleHR0b3AiOiAib2JlbiBiw7xuZGlnIiwKKyAgICAiVG9wIjogIm9iZW4iLAorICAgICJVcGxvYWQgZmlsZSI6ICJEYXRlaSBob2NobGFkZW4iLAorICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogInZlcnRpa2FsZXIgSW5oYWx0c2Fic3RhbmQiLAorICAgICJWZXJ0aWNhbDoiOiAidmVydGlrYWw6IiwKKyAgICAiV2lkdGg6IjogIkJyZWl0ZSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkltYWdlcyBvbiB0aGUgU2VydmVyOiI6ICJCaWxkZXIgYXVmIGRlbSBTZXJ2ZXI6IiwKKyAgICAgICAgIlBsZWFzZSBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZC4iOiAiV8OkaGxlbiBTaWUgZWluZSBEYXRlaSB6dW0gaG9jaGxhZGVuIGF1cy4iLAorICAgICAgICAiVGhlIGZpbGUgeW91IGFyZSB1cGxvYWRpbmcgYWxyZWFkeSBleGlzdHMuIjogIkVpbmUgRGF0ZWkgbWl0IGRpZXNlbSBOYW1lbiBleGlzdGllcnQgc2Nob24uIiwKKyAgICAgICAgIlRoZSBmaWxlIHlvdSBhcmUgdXBsb2FkaW5nIGRvZXNuJ3QgaGF2ZSB0aGUgY29ycmVjdCBleHRlbnNpb24uIjogIkRpZSBob2NoZ2VsYWRlbmUgRGF0ZWkgaXN0IGltIGZhbHNjaGVuIEZvcm1hdC4iLAorICAgICAgICAiVGhlIGZpbGUgeW91IGFyZSB1cGxvYWRpbmcgaXMgdG8gYmlnLiBUaGUgbWF4IEZpbGVzaXplIGlzIjogIkRpZSBob2NoZ2VsYWRlbmUgRGF0ZWkgaXN0IHp1IGdyb8OfLiBEaWUgbWF4aW1ha2xlIERhdGVpZ3LDtsOfZSBiZXRyw6RndCIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2VlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvZWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0MjAwMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2VlLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAiT0siOiAiT0siLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9lbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2VsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MWQ2NTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9lbC5qcwpAQCAtMCwwICsxLDI4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkJhc2VsaW5lIjogIkJhc2VsaW5lIiwKKyAgICAiQm90dG9tIjogIs6azqzPhM+JIM68zq3Pgc6/z4IiLAorICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciLAorICAgICJIZWlnaHQ6IjogIs6Oz4jOv8+CIiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJVUkwgzrXOuc66z4zOvc6xz4IiLAorICAgICJMYXlvdXQiOiAizpTOuc6sz4TOsc6+zrciLAorICAgICJMZWZ0IjogIs6Rz4HOuc+Dz4TOtc+BzqwiLAorICAgICJNaWRkbGUiOiAizprOrc69z4TPgc6/IiwKKyAgICAiT0siOiAizpXOvc+EzqzOvs61zrkiLAorICAgICJSaWdodCI6ICLOlM61zr7Ouc6sIiwKKyAgICAiU3BhY2luZyI6ICLOkc+Azr/Pg8+EzqzPg861zrnPgiIsCisgICAgIlRvcCI6ICLOoM6szr3PiSIsCisgICAgIldpZHRoOiI6ICLOoM67zqzPhM6/z4IiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZTkwYTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9lcy5qcwpAQCAtMCwwICsxLDQ2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVzIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICJJbmZlcmlvciBhYnNvbHV0byIsCisgICAgIkFic21pZGRsZSI6ICJNZWRpbyBBYnNvbHV0byIsCisgICAgIkFsaWdubWVudDoiOiAiQWxpbmVhY2nDs246IiwKKyAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIlRleHRvIGFsdGVybmF0aXZvOiIsCisgICAgIkJhc2VsaW5lIjogIkzDrW5lYSBiYXNlIiwKKyAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiVGFtYcOxbyBkZWwgYm9yZGU6IiwKKyAgICAiQm90dG9tIjogIkluZmVyaW9yIiwKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiUGFyYSBuYXZlZ2Fkb3JlcyBxdWUgbm8gc29wb3J0YW4gaW3DoWdlbmVzIiwKKyAgICAiSGVpZ2h0OiI6ICJBbHRvOiIsCisgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICJSZWxsZW5vIGhvcml6b250YWwiLAorICAgICJIb3Jpem9udGFsOiI6ICJob3Jpem9udGFsOiIsCisgICAgIkltYWdlIFByZXZpZXc6IjogIlByZXZpc3VhbGl6YWNpw7NuIGRlIGxhIGltYWdlbjoiLAorICAgICJJbWFnZSBVUkw6IjogIkltYWdlbiBVUkw6IiwKKyAgICAiSW5zZXJ0IEltYWdlIjogImluc2VydGFyIGltYWdlbiIsCisgICAgIkxheW91dCI6ICJEaXN0cmlidWNpw7NuIiwKKyAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJWYWPDrW8gc2kgbm8gZGVzZWEgbmluZ8O6biBib3JkZSIsCisgICAgIkxlZnQiOiAiSXpxdWllcmRhIiwKKyAgICAiTWlkZGxlIjogIk1lZGlvIiwKKyAgICAiTm90IHNldCI6ICJObyBkZWZpbmlkbyIsCisgICAgIk9LIjogIkFjZXB0YXIiLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIlBvc2ljacOzbiBkZSBsYSBpbWFnZW4iLAorICAgICJQcmV2aWV3IjogIlByZXZpc3VhbGl6YXIiLAorICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiUHJldmlzdWFsaXphciBlbiB1bmEgbnVldmEgdmVudGFuYSIsCisgICAgIlJpZ2h0IjogIkRlcmVjaGEiLAorICAgICJTcGFjaW5nIjogIkVzcGFjaWFkbyIsCisgICAgIlRleHR0b3AiOiAiVGV4dG8gU3VwZXJpb3IiLAorICAgICJUb3AiOiAiU3VwZXJpb3IiLAorICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIlJlbGxlbm8gVmVydGljYWwiLAorICAgICJWZXJ0aWNhbDoiOiAiVmVydGljYWw6IiwKKyAgICAiV2lkdGg6IjogIkFuY2hvOiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVFBJQ1RVUkUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2V1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvZXUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwOTYwZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2V1LmpzCkBAIC0wLDAgKzEsNDYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJzYm90dG9tIjogIklydWRpYXJlbiBiZWhla2FsZGVhbiIsCisgICAgIkFic21pZGRsZSI6ICJJcnVkaWFyZW4gZXJkaWFuIiwKKyAgICAiQWxpZ25tZW50OiI6ICJMZXJyb2thdHplYToiLAorICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiVGVzdHUgYWx0ZXJuYXRpYm9hOiIsCisgICAgIkJhc2VsaW5lIjogIklydWRpYXJlbiBvaW5lYW4iLAorICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJFcnR6YXJlbiBsb2RpZXJhOiIsCisgICAgIkJvdHRvbSI6ICJCZWhlYW4iLAorICAgICJDYW5jZWwiOiAiVXR6aSIsCisgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICJJZGF0eiBlemF6dSBpcnVkaWFyZW4gVVJMLWEgaGVtZW4iLAorICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJJcnVkaXJpayBvbmFydHplbiBleiBkdXRlbiBuYWJpZ2F0emFpbGVlbnR6YXQiLAorICAgICJIb3Jpem9udGFsIHBhZGRpbmciOiAiQmV0ZWdhcnJpIGhvcml6b250YWxhIiwKKyAgICAiSG9yaXpvbnRhbDoiOiAiSG9yaXpvbnRhbGE6IiwKKyAgICAiSW1hZ2UgUHJldmlldzoiOiAiSXJ1ZGlhcmVuIGF1cnJlYmlzdGE6IiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJJcnVkaWFyZW4gVVJMLWE6IiwKKyAgICAiSW5zZXJ0IEltYWdlIjogIklydWRpYSB0eGVydGF0dSIsCisgICAgIkxheW91dCI6ICJEaXNlaW51YSIsCisgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiVXp0YXp1IGh1dHNpayBlcnR6aWsgZXogc29ydHpla28iLAorICAgICJMZWZ0IjogIkV6a2VycmV0YXJhIiwKKyAgICAiTWlkZGxlIjogIkVyZGlhbiIsCisgICAgIk5vdCBzZXQiOiAiRXogZ2FpdHVhIiwKKyAgICAiT0siOiAiQWRvcyIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiSXJ1ZGlhcmVuIGtva2FwZW5hIiwKKyAgICAiUHJldmlldyI6ICJBdXJyZWJpc3RhIiwKKyAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIkF1cnJlaWt1c2kgaXJ1ZGlhIGJlc3RlIGxlaGlvIGJhdGVhbiIsCisgICAgIlJpZ2h0IjogIkVza3VpbmV0YXJhIiwKKyAgICAiU3BhY2luZyI6ICJUYXJ0ZWEiLAorICAgICJUZXh0dG9wIjogIklydWRpYXJlbiBnb2lhbGRlYW4iLAorICAgICJUb3AiOiAiR29pYW4iLAorICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIkJldGVnYXJyaSBiZXJ0aWthbGEiLAorICAgICJWZXJ0aWNhbDoiOiAiQmVydGlrYWxhOiIsCisgICAgIldpZHRoOiI6ICJaYWJhbGVyYToiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9mYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2ZhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZTc5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9mYS5qcwpAQCAtMCwwICsxLDQ2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICLYr9mC24zZgtinINm+2KfbjNuM2YYiLAorICAgICJBYnNtaWRkbGUiOiAi2K/ZgtuM2YLYpyDZiNiz2LciLAorICAgICJBbGlnbm1lbnQ6IjogItiq2LHYp9iyINio2YbYr9uMIiwKKyAgICAiQWx0ZXJuYXRlIHRleHQ6IjogItmF2KrZhiDYrNin24zar9iy24zZhiIsCisgICAgIkJhc2VsaW5lIjogItin2KjYqtiv2KfbjCDYrti3IiwKKyAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAi2LbYrtin2YXYqiDZhNio2YciLAorICAgICJCb3R0b20iOiAi2b7Yp9uM24zZhiIsCisgICAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiLAorICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiVVJMINiq2LXZiNuM2LEg2LHYpyDYp9uM2YbYrNinINmI2KfYsdivINqp2YbbjNivIiwKKyAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAi2KjYsdin24wg2YXYsdmI2LHar9ix2YfYp9uM24wg2qnZhyDYp9iyINiq2LXYp9mI24zYsSDZvti02KrbjNio2KfZhtuMINmG2YXbjCDaqdmG2YbYryIsCisgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICLZvtix2qnZhtmG2K/ZhyDYp9mB2YLbjCIsCisgICAgIkhvcml6b250YWw6IjogItin2YHZgtuMIiwKKyAgICAiSW1hZ2UgUHJldmlldzoiOiAi2b7bjNi0INmG2YXYp9uM2LQg2KrYtdmI24zYsSIsCisgICAgIkltYWdlIFVSTDoiOiAiVVJMINiq2LXZiNuM2LEiLAorICAgICJJbnNlcnQgSW1hZ2UiOiAi2KfZgdiy2YjYr9mGINiq2LXZiNuM2LEiLAorICAgICJMYXlvdXQiOiAi2YTYp9uM2YciLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogItio2LHYp9uMINio2K/ZiNmGINmE2KjZhyDYrtin2YTbjCDYsdmH2Kcg2qnZhiIsCisgICAgIkxlZnQiOiAi2obZviIsCisgICAgIk1pZGRsZSI6ICLZiNiz2LciLAorICAgICJOb3Qgc2V0IjogItiq2YbYuNuM2YUg2YbYtNiv2YciLAorICAgICJPSyI6ICLYqNmE2YciLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogItmF2YjZgti524zYqiDbjNin2KjbjCDYqti12YjbjNixIiwKKyAgICAiUHJldmlldyI6ICLZvtuM2LQg2YbZhdin24zYtCIsCisgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICLZvtuM2LQg2YbZhdin24zYtCDYqti12YjbjNixINiv2LEg2b7Zhtis2LHZhyDYp9uMINis2K/bjNivIiwKKyAgICAiUmlnaHQiOiAi2LHYp9iz2KoiLAorICAgICJTcGFjaW5nIjogItmB2KfYtdmE2Ycg2q/YsNin2LHbjCIsCisgICAgIlRleHR0b3AiOiAi2KjYp9mE2KfbjCDZhdiq2YYiLAorICAgICJUb3AiOiAi2KjYp9mE2KciLAorICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogItm+2LHaqdmG2YbYr9mHINi52YXZiNiv24wiLAorICAgICJWZXJ0aWNhbDoiOiAi2LnZhdmI2K/bjCIsCisgICAgIldpZHRoOiI6ICLYt9mI2YQiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9maS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2ZpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NThjYzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9maS5qcwpAQCAtMCwwICsxLDI3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkJhc2VsaW5lIjogIlRha2FyYWphIiwKKyAgICAiQm90dG9tIjogIkFsbGUiLAorICAgICJDYW5jZWwiOiAiUGVydXV0YSIsCisgICAgIkltYWdlIFVSTDoiOiAiS3V2YW4gb3NvaXRlIiwKKyAgICAiTGF5b3V0IjogIlNvbW1pdHRlbHUiLAorICAgICJMZWZ0IjogIlZhc2VuIiwKKyAgICAiTWlkZGxlIjogIktlc2tlbGxlIiwKKyAgICAiT0siOiAiSHl2w6Rrc3kiLAorICAgICJSaWdodCI6ICJPaWtlYSIsCisgICAgIlNwYWNpbmciOiAiUGFsc3RhdGlsYSIsCisgICAgIlRvcCI6ICJZbMO2cyIsCisgICAgIldpZHRoOiI6ICJMZXZleXMiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9mci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMWNiNGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9mci5qcwpAQCAtMCwwICsxLDU0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICJBYnNib3R0b20iLAorICAgICJBYnNtaWRkbGUiOiAiQWJzbWlkZGxlIiwKKyAgICAiQWxpZ25tZW50OiI6ICJBbGlnbmVtZW50IiwKKyAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIlRleHRlIGFsdGVybmF0aWYiLAorICAgICJCYXNlbGluZSI6ICJCYXNlbGluZSIsCisgICAgIkJvcmRlciB0aGlja25lc3M6IjogIkVwYWlzc2V1ciBib3JkdXJlIiwKKyAgICAiQm90dG9tIjogIkJhcyIsCisgICAgIkNhbmNlbCI6ICJBbm51bGVyIiwKKyAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkVudHJlciBsJ1VSTCBkZSBsJ2ltYWdlIGljaSIsCisgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIlBvdXIgbGVzIG5hdmlnYXRldXJzIHF1aSBuZSBzdXBwb3J0ZW50IHBhcyBsZXMgaW1hZ2VzIiwKKyAgICAiSGVpZ2h0OiI6ICJIYXV0ZXVyIiwKKyAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIk1hcmdlIGhvcml6b250YWxlIGludGVybmUiLAorICAgICJIb3Jpem9udGFsOiI6ICJIb3Jpem9udGFsIiwKKyAgICAiSW1hZ2UgUHJldmlldzoiOiAiUHLDqXZpc3VhbGlzYXRpb24iLAorICAgICJJbWFnZSBVUkw6IjogIlVSTCIsCisgICAgIkluc2VydCBJbWFnZSI6ICJJbnPDqXJlciB1bmUgaW1hZ2UiLAorICAgICJMYXlvdXQiOiAiTGF5b3V0IiwKKyAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJMYWlzc2VyIHZpZGUgcG91ciBwYXMgZGUgYm9yZHVyZSIsCisgICAgIkxlZnQiOiAiR2F1Y2hlIiwKKyAgICAiTWlkZGxlIjogIk1pbGlldSIsCisgICAgIk5vdCBzZXQiOiAiSW5kw6lmaW5pIiwKKyAgICAiT0siOiAiT0siLAorICAgICJPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICJPdXZyaXIgbGUgZmljaGllciBkYW5zIHVuZSBub3V2ZWxsZSBmZW7DqnRyZSIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zaXRpb24gZGUgY2V0dGUgaW1hZ2UiLAorICAgICJQcmV2aWV3IjogIlByw6l2aXN1YWxpc2F0aW9uIiwKKyAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlByw6l2aXN1YWxpc2VyIGwnaW1hZ2UgZGFucyB1bmUgbm91dmVsbGUgZmVuw6p0cmUiLAorICAgICJSaWdodCI6ICJEcm9pdGUiLAorICAgICJTaXplIjogIlRhaWxsZSIsCisgICAgIlNwYWNpbmciOiAiRXNwYWNlbWVudCIsCisgICAgIlRleHR0b3AiOiAiVGV4dHRvcCIsCisgICAgIlRvcCI6ICJIYXV0IiwKKyAgICAiVXBsb2FkIGZpbGUiOiAiVMOpbMOpY2hhcmdlciIsCisgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiTWFyZ2UgdmVydGljYWxlIGludGVybmUiLAorICAgICJWZXJ0aWNhbDoiOiAiVmVydGljYWwiLAorICAgICJXaWR0aDoiOiAiTGFyZ2V1ciIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkltYWdlcyBvbiB0aGUgU2VydmVyOiI6ICJJbWFnZXMgc3VyIGxlIHNlcnZldXIiLAorICAgICAgICAiUGxlYXNlIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkLiI6ICJWZXVpbGxleiBzw6lsZWN0aW9ubmVyIHVuIGZpY2hpZXIgYSB0w6lsw6ljaGFyZ2VyIiwKKyAgICAgICAgIlRoZSBmaWxlIHlvdSBhcmUgdXBsb2FkaW5nIGFscmVhZHkgZXhpc3RzLiI6ICJMZSBmaWNoaWVyIHF1ZSB2b3VzIHTDqWzDqWNoYXJnZXogZXhpc3RlIGTDqWrDoC4iLAorICAgICAgICAiVGhlIGZpbGUgeW91IGFyZSB1cGxvYWRpbmcgZG9lc24ndCBoYXZlIHRoZSBjb3JyZWN0IGV4dGVuc2lvbi4iOiAiTGUgZmljaGllciBxdWUgdm91cyB0w6lsw6ljaGFyZ2V6IG5lIHBvc3PDqGRlIHBhcyBsYSBib25uZSBleHRlbnNpb24uIiwKKyAgICAgICAgIlRoZSBmaWxlIHlvdSBhcmUgdXBsb2FkaW5nIGlzIHRvIGJpZy4gVGhlIG1heCBGaWxlc2l6ZSBpcyI6ICJMZSBmaWNoaWVyIHF1ZSB2b3VzIHVwbG9hZGV6IGVzdCB0cm9wIGdyb3MuIExhIHRhaWxsZSBtYXhpbXVtIGVzdCIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2ZyX2NhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvZnJfY2EuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc4NGMwNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2ZyX2NhLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnJfY2EiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvZ2IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9nYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTljNzE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvZ2IuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJnYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9oZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNWQ1NzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9oZS5qcwpAQCAtMCwwICsxLDI4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImhlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkJhc2VsaW5lIjogIten15Ug15HXodeZ16EiLAorICAgICJCb3R0b20iOiAi16rXl9eq15XXnyIsCisgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKKyAgICAiSGVpZ2h0OiI6ICLXkteV15HXlCIsCisgICAgIkltYWdlIFVSTDoiOiAiVVJMINeU16rXnteV16DXlCIsCisgICAgIkxheW91dCI6ICLXpNeo15nXodeUIiwKKyAgICAiTGVmdCI6ICLXqdee15DXnCIsCisgICAgIk1pZGRsZSI6ICLXkNee16bXoiIsCisgICAgIk9LIjogIteQ15nXqdeV16giLAorICAgICJSaWdodCI6ICLXmdee15nXnyIsCisgICAgIlNwYWNpbmciOiAi16jXmdeV15XXlyIsCisgICAgIlRvcCI6ICLXotec15nXldefIiwKKyAgICAiV2lkdGg6IjogIteo15XXl9eRIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9odS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWI4YTY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvaHUuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJodSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIsCisgICAgIk9LIjogIlJlbmRiZW4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9pdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2l0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOTY3MWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9pdC5qcwpAQCAtMCwwICsxLDI4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIml0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkJhc2VsaW5lIjogIkFsbGluZWFtZW50byIsCisgICAgIkJvdHRvbSI6ICJCYXNzbyIsCisgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iLAorICAgICJIZWlnaHQ6IjogIkFsdGV6emEiLAorICAgICJJbWFnZSBVUkw6IjogIlVSTCBkZWxsJ0ltbWFnaW5lIiwKKyAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgIkxlZnQiOiAiU2luaXN0cmEiLAorICAgICJNaWRkbGUiOiAiQ2VudHJhbGUiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlJpZ2h0IjogIkRlc3RyYSIsCisgICAgIlNwYWNpbmciOiAiU3BhemlhdHVyYSIsCisgICAgIlRvcCI6ICJBbHRvIiwKKyAgICAiV2lkdGg6IjogIkxhcmdoZXp6YSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVFBJQ1RVUkUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlhMmViNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2phLmpzCkBAIC0wLDAgKzEsNTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiamEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJzYm90dG9tIjogIuS4iyjntbblr77nmoQpIiwKKyAgICAiQWJzbWlkZGxlIjogIuS4reWkrijntbblr77nmoQpIiwKKyAgICAiQWxpZ25tZW50OiI6ICLooYzmj4PjgYg6IiwKKyAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIuS7o+abv+ODhuOCreOCueODiDoiLAorICAgICJCYXNlbGluZSI6ICLjg5njg7zjgrnjg6njgqTjg7MiLAorICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICLlooPnlYznt5rjga7luYU6IiwKKyAgICAiQm90dG9tIjogIuS4iyIsCisgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAi55S75YOP44GuVVJM44KS44GT44GT44Gr5YWl5Yqb44GX44G+44GZIiwKKyAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAi55S75YOP6KGo56S644KS44K144Od44O844OI44GX44Gq44GE44OW44Op44Km44K244Gr5b+F6KaB44Gn44GZIiwKKyAgICAiSGVpZ2h0OiI6ICLpq5jjgZU6IiwKKyAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIuawtOW5s+S9meeZvSIsCisgICAgIkhvcml6b250YWw6IjogIuawtOW5szoiLAorICAgICJJbWFnZSBQcmV2aWV3OiI6ICLnlLvlg4/jg5fjg6zjg5Pjg6Xjg7w6IiwKKyAgICAiSW1hZ2UgVVJMOiI6ICLnlLvlg49VUkw6IiwKKyAgICAiSW5zZXJ0IEltYWdlIjogIueUu+WDj+OBruaMv+WFpSIsCisgICAgIkxheW91dCI6ICLjg6zjgqTjgqLjgqbjg4giLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIuWig+eVjOe3muOBjOOBquOBhOWgtOWQiOOBr+epuuOBruOBvuOBvuOBq+OBmeOCiyIsCisgICAgIkxlZnQiOiAi5bemIiwKKyAgICAiTWlkZGxlIjogIuS4reWkriIsCisgICAgIk5vdCBzZXQiOiAi44Gq44GXIiwKKyAgICAiT0siOiAiT0siLAorICAgICJPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICLmlrDjgZfjgYTjgqbjgqPjg7Pjg4njgqbjgafjg5XjgqHjgqTjg6vjgpLplovjgY8iLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIuOBk+OBrueUu+WDj+OBrumFjee9riIsCisgICAgIlByZXZpZXciOiAi6KGo56S6IiwKKyAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIuOCpuOCo+ODs+ODieOCpuOBp+eUu+WDj+OCkuihqOekuiIsCisgICAgIlJpZ2h0IjogIuWPsyIsCisgICAgIlNpemUiOiAi44K144Kk44K6IiwKKyAgICAiU3BhY2luZyI6ICLplpPpmpQiLAorICAgICJUZXh0dG9wIjogIuODhuOCreOCueODiOS4iumDqCIsCisgICAgIlRvcCI6ICLkuIoiLAorICAgICJVcGxvYWQgZmlsZSI6ICJVUExPQUQgRklMRSIsCisgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAi5Z6C55u05L2Z55m9IiwKKyAgICAiVmVydGljYWw6IjogIuWeguebtDoiLAorICAgICJXaWR0aDoiOiAi5bmFOiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkltYWdlcyBvbiB0aGUgU2VydmVyOiI6ICLjgrXjg7zjg5DkuIrjga7nlLvlg486IiwKKyAgICAgICAgIlBsZWFzZSBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZC4iOiAi44Ki44OD44OX44Ot44O844OJ44GZ44KL44OV44Kh44Kk44Or44KS6YG45oqe44GX44Gm44GP44Gg44GV44GE44CCIiwKKyAgICAgICAgIlRoZSBmaWxlIHlvdSBhcmUgdXBsb2FkaW5nIGFscmVhZHkgZXhpc3RzLiI6ICLjgqLjg4Pjg5fjg63jg7zjg4nlr77osaHjg5XjgqHjgqTjg6vjga/jgZnjgafjgavlrZjlnKjjgZfjgb7jgZnjgIIiLAorICAgICAgICAiVGhlIGZpbGUgeW91IGFyZSB1cGxvYWRpbmcgZG9lc24ndCBoYXZlIHRoZSBjb3JyZWN0IGV4dGVuc2lvbi4iOiAi44Ki44OD44OX44Ot44O844OJ5a++6LGh44OV44Kh44Kk44Or44Gr5q2j44GX44GE5ouh5by15a2Q44GM44GC44KK44G+44Gb44KT44CCIiwKKyAgICAgICAgIlRoZSBmaWxlIHlvdSBhcmUgdXBsb2FkaW5nIGlzIHRvIGJpZy4gVGhlIG1heCBGaWxlc2l6ZSBpcyI6ICLjgqLjg4Pjg5fjg63jg7zjg4nlr77osaHjg5XjgqHjgqTjg6vjga/lpKfjgY3jgZnjgY7jgb7jgZnjgILjg5XjgqHjgqTjg6vjgrXjgqTjgrrjga7kuIrpmZA6IgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY4NjkxMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSw2MSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICIgT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiIiwKKyAgICAiQWJzYm90dG9tIjogIiIsCisgICAgIkFic21pZGRsZSI6ICIiLAorICAgICJBbGlnbm1lbnQ6IjogIiIsCisgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICIiLAorICAgICJCYXNlbGluZSI6ICIiLAorICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICIiLAorICAgICJCb3R0b20iOiAiIiwKKyAgICAiQ2FuY2VsIjogIiIsCisgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICIiLAorICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICIiLAorICAgICJIZWlnaHQ6IjogIiIsCisgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICIiLAorICAgICJIb3Jpem9udGFsOiI6ICIiLAorICAgICJJbWFnZSBQcmV2aWV3OiI6ICIiLAorICAgICJJbWFnZSBVUkw6IjogIiIsCisgICAgIkluc2VydCBJbWFnZSI6ICIiLAorICAgICJMYXlvdXQiOiAiIiwKKyAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICIiLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm90IGRlZmluZWQiOiAiIiwKKyAgICAiTGVmdCI6ICIiLAorICAgICJNaWRkbGUiOiAiIiwKKyAgICAiTm90IHNldCI6ICIiLAorICAgICJPSyI6ICIiLAorICAgICJPcGVuIGZpbGUgaW4gbmV3IHdpbmRvdyI6ICIiLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIiIsCisgICAgIlByZXZpZXciOiAiIiwKKyAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIiIsCisgICAgIlJpZ2h0IjogIiIsCisgICAgIlNpemUiOiAiIiwKKyAgICAiU3BhY2luZyI6ICIiLAorICAgICJUZXh0dG9wIjogIiIsCisgICAgIlRvcCI6ICIiLAorICAgICJVcGxvYWQgZmlsZSI6ICIiLAorICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIiIsCisgICAgIlZlcnRpY2FsOiI6ICIiLAorICAgICJXaWR0aDoiOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvbHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0ZTQxOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL2x0LmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvbHYuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9sdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzBhMjdkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvbHYuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXRjZWx0IiwKKyAgICAiT0siOiAiTGFiaSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVFBJQ1RVUkUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M5NWVjYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL25iLmpzCkBAIC0wLDAgKzEsNDQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxpZ25tZW50OiI6ICJQbGFzc2VyaW5nIiwKKyAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIkFsdGVybmF0aXYgdGVrc3QiLAorICAgICJCYXNlbGluZSI6ICJHcnVubmxpbmplIiwKKyAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiUmFtbWV0eWtrZWxzZToiLAorICAgICJCb3R0b20iOiAiQnVubiIsCisgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICJIZWlnaHQ6IjogIkjDuHlkZToiLAorICAgICJIb3Jpem9udGFsOiI6ICJIb3Jpc29udGFsOiIsCisgICAgIkltYWdlIFByZXZpZXc6IjogIkZvcmjDpW5kc3Zpc25pbmc6IiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJCaWxkZXRzIFVSTDoiLAorICAgICJJbnNlcnQgSW1hZ2UiOiAiU2V0dCBpbm4gYmlsZGUiLAorICAgICJMYXlvdXQiOiAiT3Bwc2V0dCIsCisgICAgIkxlZnQiOiAiVmVuc3RyZSIsCisgICAgIk1pZGRsZSI6ICJNaWR0ZW4iLAorICAgICJPSyI6ICJPSyIsCisgICAgIk9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIsOFcG5lIGJpbGRlIGkgbnl0dCB2aW5kdSIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiQmlsZGVwb3NzaXNqb24iLAorICAgICJQcmV2aWV3IjogIkZvcmjDpW5kc3Zpc25pbmciLAorICAgICJSaWdodCI6ICJIw7h5cmUiLAorICAgICJTaXplIjogIlN0w7hycmVsc2UiLAorICAgICJTcGFjaW5nIjogIkx1ZnQgcnVuZHQgYmlsZGV0IiwKKyAgICAiVG9wIjogIk92ZXJrYW50IiwKKyAgICAiVXBsb2FkIGZpbGUiOiAiTGFzdCBvcHAgYmlsZGUiLAorICAgICJWZXJ0aWNhbDoiOiAiVmVydGlrYWw6IiwKKyAgICAiV2lkdGg6IjogIkJyZWRkZToiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJJbWFnZXMgb24gdGhlIFNlcnZlcjoiOiAiQmlsZGVyIHDDpSBzZXJ2ZXJlbjoiLAorICAgICAgICAiUGxlYXNlIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkLiI6ICJWZWxnIGJpbGRlIGR1IHNrYWwgbGFzdGUgb3BwIiwKKyAgICAgICAgIlRoZSBmaWxlIHlvdSBhcmUgdXBsb2FkaW5nIGFscmVhZHkgZXhpc3RzLiI6ICJCaWxkZXQgZHUgcHLDuHZlciDDpSBsYXN0ZSBvcHAgZWtzaXN0ZXJlciBhbGxlcmVkZSBww6Ugc2VydmVyZW4iLAorICAgICAgICAiVGhlIGZpbGUgeW91IGFyZSB1cGxvYWRpbmcgZG9lc24ndCBoYXZlIHRoZSBjb3JyZWN0IGV4dGVuc2lvbi4iOiAiQmlsZGV0IGR1IGxhc3RlciBvcHAgaGFyIGV0IHVneWxkaWcgZm9ybWF0LCBvcHBsYXN0bmluZyBhdmJydXR0IiwKKyAgICAgICAgIlRoZSBmaWxlIHlvdSBhcmUgdXBsb2FkaW5nIGlzIHRvIGJpZy4gVGhlIG1heCBGaWxlc2l6ZSBpcyI6ICJCaWxkZXQgZHUgbGFzdGVyIG9wcCBlciBmb3Igc3RvcnQsIG1ha3MgdGlsbGF0dCBzdMO4cnJlbHNlIGVyIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OThkZGJhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvbmwuanMKQEAgLTAsMCArMSw1MCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJubCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGlnbm1lbnQ6IjogIlBvc2l0aWU6IiwKKyAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIkFsdGVybmF0aWV2ZSB0ZWtzdDoiLAorICAgICJCYXNlbGluZSI6ICJCYXNpcyIsCisgICAgIkJvcmRlciB0aGlja25lc3M6IjogIlJhbmQgZGlrdGU6IiwKKyAgICAiQm90dG9tIjogIk9uZGVyIiwKKyAgICAiQ2FuY2VsIjogIkFubnVsZXJlbiIsCisgICAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICJBZmJlZWxkaW5nc2xvY2F0aWUgKFVSTCkiLAorICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJWb29yIGJyb3dzZXJzIHdlbGtlIGdlZW4gYWZiZWVsZGluZ2VuIG9uZGVyc3RldW5lbiIsCisgICAgIkhlaWdodDoiOiAiSG9vZ3RlOiIsCisgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICJIb3Jpem9udGFsZSBydWltdGUiLAorICAgICJIb3Jpem9udGFsOiI6ICJIb3Jpem9udGFhbDoiLAorICAgICJJbWFnZSBQcmV2aWV3OiI6ICJBZmJlZWxkaW5nc3Zvb3JiZWVsZDoiLAorICAgICJJbWFnZSBVUkw6IjogIkFmYmVlbGRpbmcgVVJMOiIsCisgICAgIkluc2VydCBJbWFnZSI6ICJBZmJlZWxkaW5nIGludm9lZ2VuIiwKKyAgICAiTGF5b3V0IjogIldlZXJnYXZlIiwKKyAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJMZWVnIHZvb3IgZ2VlbiByYW5kIiwKKyAgICAiTGVhdmUgZW1wdHkgZm9yIG5vdCBkZWZpbmVkIjogIkxlZWcgdm9vciBuaWV0IGdlZGVmaW5pZWVyZCIsCisgICAgIkxlZnQiOiAiTGlua3MiLAorICAgICJNaWRkbGUiOiAiTWlkZGVuIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIlBvc2l0aWUgdmFuIGRlIGFmYmVlbGRpbmciLAorICAgICJQcmV2aWV3IjogIlZvb3JiZWVsZCIsCisgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJBZmJlZWxkaW5nIGJla2lqa2VuIGluIG5pZXV3IHZlbnN0ZXIiLAorICAgICJSaWdodCI6ICJSZWNodHMiLAorICAgICJTaXplIjogIkdyb290dGUiLAorICAgICJTcGFjaW5nIjogIk1hcmdlIiwKKyAgICAiVG9wIjogIkJvdmVuIiwKKyAgICAiVXBsb2FkIGZpbGUiOiAiVXBsb2FkIGJlc3RhbmQiLAorICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIlZlcnRpY2FsZSBydWltdGUiLAorICAgICJWZXJ0aWNhbDoiOiAiVmVydGljYWFsOiIsCisgICAgIldpZHRoOiI6ICJCcmVlZHRlOiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIkltYWdlcyBvbiB0aGUgU2VydmVyOiI6ICJBZmJlZWxkaW5nZW4gb3AgZGUgc2VydmVyOiIsCisgICAgICAgICJQbGVhc2Ugc2VsZWN0IGEgZmlsZSB0byB1cGxvYWQuIjogIlNlbGVjdGVlciBlZW4gYmVzdGFuZCBvbSB0ZSB1cGxvYWRlbiIsCisgICAgICAgICJUaGUgZmlsZSB5b3UgYXJlIHVwbG9hZGluZyBhbHJlYWR5IGV4aXN0cy4iOiAiSGV0IGJlc3RhbmQgZGF0IGlzIGdldXBsb2FkIGJlc3RhYXQgYWwuIiwKKyAgICAgICAgIlRoZSBmaWxlIHlvdSBhcmUgdXBsb2FkaW5nIGRvZXNuJ3QgaGF2ZSB0aGUgY29ycmVjdCBleHRlbnNpb24uIjogIkhldCBiZXN0YW5kIGRhdCBpcyBnZXVwbG9hZCBoZWVmdCBuaWV0IGRlIGp1aXN0ZSBleHRlbnRpZS4iLAorICAgICAgICAiVGhlIGZpbGUgeW91IGFyZSB1cGxvYWRpbmcgaXMgdG8gYmlnLiBUaGUgbWF4IEZpbGVzaXplIGlzIjogIkhldCBiZXN0YW5kIGRhdCBpcyBnZXVwbG9hZCBpcyB0ZSBncm9vdC4gRGUgbWF4aW1hYWwgdG9lZ2VzdGFuZSBncm9vdHRlIGlzOiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL3BsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvcGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI4NTFiZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL3BsLmpzCkBAIC0wLDAgKzEsNDggQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicGwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWJzYm90dG9tIjogIkFicy4gZMOzxYIiLAorICAgICJBYnNtaWRkbGUiOiAiQWJzLiDFm3JvZGVrIiwKKyAgICAiQWxpZ25tZW50OiI6ICJXeXLDs3duYW5pZToiLAorICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiVGVrc3QgYWx0ZXJuYXR5d255OiIsCisgICAgIkJhc2VsaW5lIjogIkxpbmlhIGJhem93YSIsCisgICAgIkJvcmRlciB0aGlja25lc3M6IjogIkdydWJvxZvEhyBvYnJhbW93YW5pYToiLAorICAgICJCb3R0b20iOiAiRMOzxYIiLAorICAgICJDYW5jZWwiOiAiQW51bHVqIiwKKyAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIlBvZGFqIFVSTCBvYnJhemthIiwKKyAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiRGxhIHByemVnbMSFZGFyZWssIGt0w7NyZSBuaWUgb2JzxYJ1Z3VqxIUgb2JyYXprw7N3IiwKKyAgICAiSGVpZ2h0OiI6ICJXeXNva2/Fm8SHOiIsCisgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICJXY2nEmWNpZSBwb3ppb21lIiwKKyAgICAiSG9yaXpvbnRhbDoiOiAiUG96aW9tZToiLAorICAgICJJbWFnZSBQcmV2aWV3OiI6ICJQb2RnbMSFZCBvYnJhemthOiIsCisgICAgIkltYWdlIFVSTDoiOiAiVVJMIG9icmF6a2E6IiwKKyAgICAiSW5zZXJ0IEltYWdlIjogIldzdGF3IG9icmF6ZWsiLAorICAgICJMYXlvdXQiOiAiTGF5b3V0IiwKKyAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJCZXogcmFtZWsgLSB6b3N0YXcgcHVzdGUiLAorICAgICJMZWZ0IjogIkRvIGxld2VqIiwKKyAgICAiTWlkZGxlIjogIsWacm9kZWsiLAorICAgICJOb3Qgc2V0IjogIk5pZSB1c3Rhd2lvbmUiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiV3lyw7N3bmFuaWUgdGVnbyBvYnJhemthIG5hIHN0cm9uaWUiLAorICAgICJQcmV2aWV3IjogIlBvZGdsxIVkIiwKKyAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlBvZGdsxIVkIG9icmF6a2EgdyBub3d5bSBva25pZSIsCisgICAgIlJpZ2h0IjogIkRvIHByYXdlaiIsCisgICAgIlNpemUiOiAiUm96bWlhciIsCisgICAgIlNwYWNpbmciOiAiT2RzdMSZcCIsCisgICAgIlRleHR0b3AiOiAiR8OzcmEgdGVrc3R1IiwKKyAgICAiVG9wIjogIkfDs3JhIiwKKyAgICAiVmVydGljYWwgcGFkZGluZyI6ICJXY2nEmWNpZSBwaW9ub3dlIiwKKyAgICAiVmVydGljYWw6IjogIlBpb25vd2U6IiwKKyAgICAiV2lkdGg6IjogIlN6ZXJva2/Fm8SHOiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVFBJQ1RVUkUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvcHRfYnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIxNDc2MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsNTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiIE9wZW4gZmlsZSBpbiBuZXcgd2luZG93IjogIiBBYnJpciBhcnF1aXZvIGVtIHVtIG5vdmEgamFuZWxhIiwKKyAgICAiQWJzYm90dG9tIjogIkluZmVyaW9yIEFic29sdXRvIiwKKyAgICAiQWJzbWlkZGxlIjogIk1laW8gQWJzb2x1dG8iLAorICAgICJBbGlnbm1lbnQ6IjogIkFsaW5oYW1lbnRvOiIsCisgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJUZXh0byBBbHRlcm5hdGl2bzoiLAorICAgICJCYXNlbGluZSI6ICJMaW5oYSBkZSBCYXNlIiwKKyAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiRXNwZXNzdXJhIGRhIEJvcmRhIiwKKyAgICAiQm90dG9tIjogIkluZmVyaW9yIiwKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkVudHJlIGFxdWkgY29tIGEgVVJMIGRhIGltYWdlbSIsCisgICAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogIlBhcmEgbmF2ZWdhZG9yZXMgcXVlIG7Do28gc3Vwb3J0YW0gaW1hZ2VucyIsCisgICAgIkhlaWdodDoiOiAiQWx0dXJhOiIsCisgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICJFc3Bhw6dvIGhvcml6b250YWwiLAorICAgICJIb3Jpem9udGFsOiI6ICJIb3Jpem9udGFsOiIsCisgICAgIkltYWdlIFByZXZpZXc6IjogIlZpc3VhbGl6YcOnw6NvIGRhIEltYWdlbToiLAorICAgICJJbWFnZSBVUkw6IjogIlVSTCBkYSBJbWFnZW06IiwKKyAgICAiSW5zZXJ0IEltYWdlIjogIkluc2VyaXIgSW1hZ2VtIiwKKyAgICAiTGF5b3V0IjogIkVzcXVlbWEiLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIkRlaXhlIGVtIGJyYW5jbyBwYXJhIHNlbSBib3JkYXMiLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm90IGRlZmluZWQiOiAiRGVpeGUgZW0gYnJhbmNvIHBhcmEgbsOjbyBkZWZpbmlkbyIsCisgICAgIkxlZnQiOiAiRXNxdWVyZGEiLAorICAgICJNaWRkbGUiOiAiTWVpbyIsCisgICAgIk5vdCBzZXQiOiAiTsOjbyBkZWZpbmlkbyIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiT3BlbiBmaWxlIGluIG5ldyB3aW5kb3ciOiAiQWJyaXIgYXJxdWl2byBlbSB1bWEgbm92YSBqYW5lbGEiLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIlBvc2ljaW9uYW1lbnRvIGRlc3RhIGltYWdlbSIsCisgICAgIlByZXZpZXciOiAiVmlzdWFsaXphw6fDo28iLAorICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiVmlzdWFsaXphciBpbWFnZW0gZW0gdW1hIG5vdmEgamFuZWxhIiwKKyAgICAiUmlnaHQiOiAiRGlyZWl0YSIsCisgICAgIlNpemUiOiAiVGFtYW5obyIsCisgICAgIlNwYWNpbmciOiAiRXNwYcOnbyIsCisgICAgIlRleHR0b3AiOiAiVGV4dG8gbm8gdG9wbyIsCisgICAgIlRvcCI6ICJUb3BvIiwKKyAgICAiVXBsb2FkIGZpbGUiOiAiRW52aWFyIGFycXVpdm8iLAorICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogIkVzcGHDp28gdmVydGljYWwiLAorICAgICJWZXJ0aWNhbDoiOiAiVmVydGljYWw6IiwKKyAgICAiV2lkdGg6IjogIkxhcmd1cmE6IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiSW1hZ2VzIG9uIHRoZSBTZXJ2ZXI6IjogIkltYWdlbnMgbm8gU2Vydmlkb3I6IiwKKyAgICAgICAgIlBsZWFzZSBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZC4iOiAiUG9yIGZhdm9yLCBzZWxlY2lvbmUgdW0gYXJxdWl2byBwYXJhIGVudmlhci4iLAorICAgICAgICAiVGhlIGZpbGUgeW91IGFyZSB1cGxvYWRpbmcgYWxyZWFkeSBleGlzdHMuIjogIkrDoSBleGlzdGUgbyBhcnF1aXZvIHF1ZSB2b2PDqiBlc3TDoSBlbnZpYW5kby4iLAorICAgICAgICAiVGhlIGZpbGUgeW91IGFyZSB1cGxvYWRpbmcgZG9lc24ndCBoYXZlIHRoZSBjb3JyZWN0IGV4dGVuc2lvbi4iOiAiTyBhcnF1aXZvIHF1ZSB2b2PDqiBlc3TDoSBlbnZpYW5kbyBuw6NvIHBvc3N1aWEgYSBleHRlbnPDo28gY29ycmV0YS4iLAorICAgICAgICAiVGhlIGZpbGUgeW91IGFyZSB1cGxvYWRpbmcgaXMgdG8gYmlnLiBUaGUgbWF4IEZpbGVzaXplIGlzIjogIk8gYXJxdWl2byBxdWUgdm9jw6ogZXN0w6EgZW52aWFuZG8gw6kgbXVpdG8gZ3JhbmRlLiBPIHRhbWFuaG8gbcOheGltbyDDqSIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL3JvLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvcm8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI2NDk5YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL3JvLmpzCkBAIC0wLDAgKzEsMjggQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicm8iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQmFzZWxpbmUiOiAiQmFzZWxpbmUiLAorICAgICJCb3R0b20iOiAiSm9zIiwKKyAgICAiQ2FuY2VsIjogIlJlbnVuxaPEgyIsCisgICAgIkhlaWdodDoiOiAiw45uxINsxaNpbWVhIiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJVUkwtdWwgaW1hZ2luaWkiLAorICAgICJMYXlvdXQiOiAiQXJhbmphbWVudCIsCisgICAgIkxlZnQiOiAiU3TDom5nYSIsCisgICAgIk1pZGRsZSI6ICJNaWpsb2MiLAorICAgICJPSyI6ICJBY2NlcHTEgyIsCisgICAgIlJpZ2h0IjogIkRyZWFwdGEiLAorICAgICJTcGFjaW5nIjogIsOObnRyZSBjZWx1bGUiLAorICAgICJUb3AiOiAiU3VzIiwKKyAgICAiV2lkdGg6IjogIkzEg8WjaW1lIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvcnUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9ydS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDBjNTdmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvcnUuanMKQEAgLTAsMCArMSw0NyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBYnNib3R0b20iOiAi0J/QviDQvdC40LbQvdC10Lkg0LPRgNCw0L3QuNGG0LUiLAorICAgICJBYnNtaWRkbGUiOiAi0J/QviDRgdC10YDQtdC00LjQvdC1INGC0LXQutGB0YLQsCIsCisgICAgIkFsaWdubWVudDoiOiAi0JLRi9GA0LDQstC90LjQstCw0L3QuNC1IiwKKyAgICAiQWx0ZXJuYXRlIHRleHQ6IjogItCQ0LvRjNGC0LXRgNC90LDRgtC40LLQvdGL0Lkg0YLQtdC60YHRgiIsCisgICAgIkJhc2VsaW5lIjogItCf0L4g0L3QuNC20L3QtdC5INCz0YDQsNC90LjRhtC1INGC0LXQutGB0YLQsCIsCisgICAgIkJvcmRlciB0aGlja25lc3M6IjogItCi0L7Qu9GJ0LjQvdCwINGA0LDQvNC60LgiLAorICAgICJCb3R0b20iOiAi0J/QviDQvdC40LbQvdC10LzRgyDQutGA0LDRjiIsCisgICAgIkNhbmNlbCI6ICLQntGC0LzQtdC90LAiLAorICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAi0JLRgdGC0LDQstGM0YLQtSDQsNC00YDQtdGBINC40LfQvtCx0YDQsNC20LXQvdC40Y8iLAorICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICLQlNC70Y8g0LHRgNCw0YPQt9C10YDQvtCyLCDQutC+0YLQvtGA0YvQtSDQvdC1INC+0YLQvtCx0YDQsNC20LDRjtGCINC60LDRgNGC0LjQvdC60LgiLAorICAgICJIZWlnaHQ6IjogItCS0YvRgdC+0YLQsCIsCisgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICLQk9C+0YDQuNC30L7QvdGC0LDQu9GM0L3Ri9C1INC/0L7Qu9GPIiwKKyAgICAiSG9yaXpvbnRhbDoiOiAi0J/QviDQs9C+0YDQuNC30L7QvdGC0LDQu9C4IiwKKyAgICAiSW1hZ2UgUHJldmlldzoiOiAi0J/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3Ri9C5INC/0YDQvtGB0LzQvtGC0YAiLAorICAgICJJbWFnZSBVUkw6IjogIlVSTCDQuNC30L7QsdGA0LDQttC10L3QuNGPIiwKKyAgICAiSW5zZXJ0IEltYWdlIjogItCS0YHRgtCw0LLQutCwINC60LDRgNGC0LjQvdC60LgiLAorICAgICJMYXlvdXQiOiAi0KDQsNGB0L/QvtC70L7QttC10L3QuNC1IiwKKyAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICLQntGB0YLQsNCy0YzRgtC1INC/0YPRgdGC0YvQvCwg0YfRgtC+0LHRiyDRg9Cx0YDQsNGC0Ywg0YDQsNC80LrRgyIsCisgICAgIkxlZnQiOiAi0J/QviDQu9C10LLQvtC80YMg0LrRgNCw0Y4iLAorICAgICJNaWRkbGUiOiAi0J/QvtGB0YDQtdC00LjQvdC1IiwKKyAgICAiTm90IHNldCI6ICLQndC1INGD0YHRgtCw0L3QvtCy0LvQtdC90L4iLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAi0KDQsNGB0L/QvtC70L7QttC10L3QuNC1INC40LfQvtCx0YDQsNC20LXQvdC40Y8iLAorICAgICJQcmV2aWV3IjogItCf0YDQtdC00LLQsNGA0LjRgtC10LvRjNC90YvQuSDQv9GA0L7RgdC80L7RgtGAIiwKKyAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogItCf0YDQtdC00LLQsNGA0LjRgtC10LvRjNC90YvQuSDQv9GA0L7RgdC80L7RgtGAINCyINC+0YLQtNC10LvRjNC90L7QvCDQvtC60L3QtSIsCisgICAgIlJpZ2h0IjogItCf0L4g0L/RgNCw0LLQvtC80YMg0LrRgNCw0Y4iLAorICAgICJTcGFjaW5nIjogItCe0YLRgdGC0YPQv9GLIiwKKyAgICAiVGV4dHRvcCI6ICLQn9C+INCy0LXRgNGF0L3QtdC5INCz0YDQsNC90LjRhtC1INGC0LXQutGB0YLQsCIsCisgICAgIlRvcCI6ICLQn9C+INCy0LXRgNGF0L3QtdC80YMg0LrRgNCw0Y4iLAorICAgICJWZXJ0aWNhbCBwYWRkaW5nIjogItCS0LXRgNGC0LjQutCw0LvRjNC90YvQtSDQv9C+0LvRjyIsCisgICAgIlZlcnRpY2FsOiI6ICLQn9C+INCy0LXRgNGC0LjQutCw0LvQuCIsCisgICAgIldpZHRoOiI6ICLQqNC40YDQuNC90LAiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9zaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL3NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNmQ2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9zaC5qcwpAQCAtMCwwICsxLDQ2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICJBcHNvbHV0bm8gZG5vIiwKKyAgICAiQWJzbWlkZGxlIjogIkFwc29sdXRuYSBzcmVkaW5hIiwKKyAgICAiQWxpZ25tZW50OiI6ICJSYXZuYW5qZSIsCisgICAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJBbHRlcm5hdGl2bmkgdGVrc3QiLAorICAgICJCYXNlbGluZSI6ICJEb25qYSBsaW5pamEiLAorICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJEZWJsamluYSBva3ZpcmEiLAorICAgICJCb3R0b20iOiAiRG5vIiwKKyAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIiwKKyAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIlVuZXNpdGUgVVJMIHNsaWtlIG92ZGUiLAorICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJaYSBwcmV0cmHFvml2YcSNZSBrb2ppIG5lIHBvZHLFvmF2YWp1IHNsaWtlIiwKKyAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIkhvcml6b250YWxubyBvZHN0b2phbmplIiwKKyAgICAiSG9yaXpvbnRhbDoiOiAiUG8gaG9yaXpvbnRhbGkiLAorICAgICJJbWFnZSBQcmV2aWV3OiI6ICJQcmVnbGVkIHNsaWtlIiwKKyAgICAiSW1hZ2UgVVJMOiI6ICJVUkwgc2xpa2UiLAorICAgICJJbnNlcnQgSW1hZ2UiOiAiVWJhY2kgc2xpa3UiLAorICAgICJMYXlvdXQiOiAiUHJlbG9tIiwKKyAgICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJPc3RhdmkgcHJhem5vIGthZCBuZW1hIG9rdmlyYSIsCisgICAgIkxlZnQiOiAiTGV2byIsCisgICAgIk1pZGRsZSI6ICJTcmVkaW5hIiwKKyAgICAiTm90IHNldCI6ICJOaWplIHBvc3RhdmxqZW5vIiwKKyAgICAiT0siOiAiT0siLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIlBvc3RhdmxqYW5qZSBvdmUgc2xpa2UiLAorICAgICJQcmV2aWV3IjogIlByZWdsZWQiLAorICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiUHJlZ2xlZGFqIHNsaWt1IHUgbm92b20gcHJvem9ydSIsCisgICAgIlJpZ2h0IjogIkRlc25vIiwKKyAgICAiU3BhY2luZyI6ICJSYXptYWsiLAorICAgICJUZXh0dG9wIjogIlZyaCB0ZWtzdGEiLAorICAgICJUb3AiOiAiVnJoIiwKKyAgICAiVmVydGljYWwgcGFkZGluZyI6ICJWZXJ0aWthbG5vIG9kc3RvamFuamUiLAorICAgICJWZXJ0aWNhbDoiOiAiUG8gdmVydGlrYWxpIiwKKyAgICAiV2lkdGg6IjogIsWgaXJpbmEiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9zaS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL3NpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNDI3ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9zaS5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiLAorICAgICJPSyI6ICJWIHJlZHUiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9zci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL3NyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NTU5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy9zci5qcwpAQCAtMCwwICsxLDQ2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICLQkNC/0YHQvtC70YPRgtC90L4g0LTQvdC+IiwKKyAgICAiQWJzbWlkZGxlIjogItCQ0L/RgdC+0LvRg9GC0L3QsCDRgdGA0LXQtNC40L3QsCIsCisgICAgIkFsaWdubWVudDoiOiAi0KDQsNCy0L3QsNGa0LUiLAorICAgICJBbHRlcm5hdGUgdGV4dDoiOiAi0LDQu9GC0LXRgNC90LDRgtC40LLQvdC4INGC0LXQutGB0YIiLAorICAgICJCYXNlbGluZSI6ICLQlNC+0ZrQsCDQu9C40L3QuNGY0LAiLAorICAgICJCb3JkZXIgdGhpY2tuZXNzOiI6ICLQlNC10LHRmdC40L3QsCDQvtC60LLQuNGA0LAiLAorICAgICJCb3R0b20iOiAi0JTQvdC+IiwKKyAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IiwKKyAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogItCj0L3QtdGB0LjRgtC1INCj0KDQmyDRgdC70LjQutC1INC+0LLQtNC1IiwKKyAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAi0JfQsCDQv9GA0LXRgtGA0LDQttC40LLQsNGH0LUg0LrQvtGY0Lgg0L3QtSDQv9C+0LTRgNC20LDQstCw0ZjRgyDRgdC70LjQutC1IiwKKyAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogItCl0L7RgNGC0LjQt9C+0L3RgtCw0LvQvdC+INC+0LTRgdGC0L7RmNCw0ZrQtSIsCisgICAgIkhvcml6b250YWw6IjogItCf0L4g0YXQvtGA0LjQt9C+0L3RgtCw0LvQuCIsCisgICAgIkltYWdlIFByZXZpZXc6IjogItCf0YDQtdCz0LvQtdC0INGB0LvQuNC60LUiLAorICAgICJJbWFnZSBVUkw6IjogItCj0KDQmyDRgdC70LjQutC1IiwKKyAgICAiSW5zZXJ0IEltYWdlIjogItCj0LHQsNGG0Lgg0YHQu9C40LrRgyIsCisgICAgIkxheW91dCI6ICLQn9GA0LXQu9C+0LwiLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogItCe0YHRgtCw0LLQuCDQv9GA0LDQt9C90L4g0LrQsNC0INC90LXQvNCwINC+0LrQstC40YDQsCIsCisgICAgIkxlZnQiOiAi0JvQtdCy0L4iLAorICAgICJNaWRkbGUiOiAi0KHRgNC10LTQuNC90LAiLAorICAgICJOb3Qgc2V0IjogItCd0LjRmNC1INC/0L7RgdGC0LDQstGZ0LXQvdC+IiwKKyAgICAiT0siOiAiT0siLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogItCf0L7RgdGC0LDQstGZ0LDRmtC1INC+0LLQtSDRgdC70LjQutC1IiwKKyAgICAiUHJldmlldyI6ICLQn9GA0LXQs9C70LXQtCIsCisgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICLQn9GA0LXQs9C70LXQtNCw0Zgg0YHQu9C40LrRgyDRgyDQvdC+0LLQvtC8INC/0YDQvtC30L7RgNGDIiwKKyAgICAiUmlnaHQiOiAi0JTQtdGB0L3QviIsCisgICAgIlNwYWNpbmciOiAi0KDQsNC30LzQsNC6IiwKKyAgICAiVGV4dHRvcCI6ICLQktGA0YUg0YLQtdC60YHRgtCwIiwKKyAgICAiVG9wIjogItCS0YDRhSIsCisgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAi0JLQtdGA0YLQuNC60LDQu9C90L4g0L7QtNGB0YLQvtGY0LDRmtC1IiwKKyAgICAiVmVydGljYWw6IjogItCf0L4g0LLQtdGA0YLQuNC60LDQu9C4IiwKKyAgICAiV2lkdGg6IjogItCo0LjRgNC40L3QsCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVFBJQ1RVUkUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL3N2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYxYTlkMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL3N2LmpzCkBAIC0wLDAgKzEsNTAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3YiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxpZ25tZW50OiI6ICJQbGFjZXJpbmc6IiwKKyAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIkFsdGVybmF0aXYgdGV4dDoiLAorICAgICJCYXNlbGluZSI6ICJCYXNsaW5qZSIsCisgICAgIkJvcmRlciB0aGlja25lc3M6IjogIlJhbXRqb2NrbGVrOiIsCisgICAgIkJvdHRvbSI6ICJCb3R0ZW4iLAorICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkJpbGRlbnMgc8O2a3bDpGcgKFVSTCkiLAorICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJCZXNrcml2YW5kZSB0ZXh0IGbDtnIgd2VibMOkc2FyZSBzb20gaW50ZSBzdMO2ZGplciBpbmLDpGRkYWRlIGJpbGRlciIsCisgICAgIkhlaWdodDoiOiAiSMO2amQ6IiwKKyAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIkhvcml6b250ZWxsdCBpbmRyYWcgcMOlIGJpbGQiLAorICAgICJIb3Jpem9udGFsOiI6ICJIb3Jpc29udGVsbDoiLAorICAgICJJbWFnZSBQcmV2aWV3OiI6ICJGw7ZyaGFuZHNncmFuc2tuaW5nOiIsCisgICAgIkltYWdlIFVSTDoiOiAiQmlsZGVucyBVUkw6IiwKKyAgICAiSW5zZXJ0IEltYWdlIjogIkluZm9nYSBiaWxkIiwKKyAgICAiTGF5b3V0IjogIkxheW91dCIsCisgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiTMOkbW5hIHRvbXQgZsO2ciBhdHQgdW5kdmlrYSByYW0iLAorICAgICJMZWF2ZSBlbXB0eSBmb3Igbm90IGRlZmluZWQiOiAiTMOkbW5hIHRvbXQgZsO2ciBhdHQgbMOldGEgd2VibMOkc2FyZW4gYmVzdMOkbW1hIiwKKyAgICAiTGVmdCI6ICJWZW5zdGVyIiwKKyAgICAiTWlkZGxlIjogIk1pdHRlbiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJCaWxkZW5zIHBvc2l0aW9uZXJpbmciLAorICAgICJQcmV2aWV3IjogIkbDtnJoYW5kc2dyYW5za2EiLAorICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiw5ZwcG5hIGJpbGQgaSBueXR0IGbDtm5zdGVyIiwKKyAgICAiUmlnaHQiOiAiSMO2Z2VyIiwKKyAgICAiU2l6ZSI6ICJTdG9ybGVrIiwKKyAgICAiU3BhY2luZyI6ICJNYXJnaW5hbCIsCisgICAgIlRvcCI6ICLDlnZlcmthbnQiLAorICAgICJVcGxvYWQgZmlsZSI6ICJMYWRkYSB1cHAgYmlsZCIsCisgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiVmVydGlrYWx0IGluZHJhZyBww6UgYmlsZCIsCisgICAgIlZlcnRpY2FsOiI6ICJWZXJ0aWthbDoiLAorICAgICJXaWR0aDoiOiAiQnJlZGQ6IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiSW1hZ2VzIG9uIHRoZSBTZXJ2ZXI6IjogIkJpbGRlciBww6Ugc2VydmVybjoiLAorICAgICAgICAiUGxlYXNlIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkLiI6ICJWw6RsaiBiaWxkIGF0dCBsYWRkYSB1cHAiLAorICAgICAgICAiVGhlIGZpbGUgeW91IGFyZSB1cGxvYWRpbmcgYWxyZWFkeSBleGlzdHMuIjogIkVuIGZpbCBtZWQgZGV0dGEgbmFtbiBmaW5ucyByZWRhbiIsCisgICAgICAgICJUaGUgZmlsZSB5b3UgYXJlIHVwbG9hZGluZyBkb2Vzbid0IGhhdmUgdGhlIGNvcnJlY3QgZXh0ZW5zaW9uLiI6ICJVcHBsYWRkYXQgYmlsZCBoYXIgZW4gb2dpbHRpZyBmaWzDpG5kZWxzZSwgdXBwbGFkZG5pbmcgYXZicnV0ZW4iLAorICAgICAgICAiVGhlIGZpbGUgeW91IGFyZSB1cGxvYWRpbmcgaXMgdG8gYmlnLiBUaGUgbWF4IEZpbGVzaXplIGlzIjogIkZpbGVuIMOkciBmw7ZyIHN0b3IsIG1heGltYWwgZmlsc3RvcmxlayDDpHIiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL3RoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MGNhMzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy90aC5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLguKLguIHguYDguKXguLTguIEiLAorICAgICJPSyI6ICLguJXguIHguKXguIciLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBJTlNFUlRQSUNUVVJFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy90ci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL3RyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZGY1MDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvbGFuZy90ci5qcwpAQCAtMCwwICsxLDQ3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFic2JvdHRvbSI6ICJTYWx0IGFsdGEiLAorICAgICJBYnNtaWRkbGUiOiAiU2FsdCBvcnRhIiwKKyAgICAiQWxpZ25tZW50OiI6ICJIaXphbGFtYToiLAorICAgICJBbHRlcm5hdGUgdGV4dDoiOiAiQWx0ZXJuYXRpZiBtZXRpbjoiLAorICAgICJCYXNlbGluZSI6ICJUYWJhbiBoaXphc8SxIiwKKyAgICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiS2VuYXJsxLFrIGthbMSxbmzEscSfxLE6IiwKKyAgICAiQm90dG9tIjogIkFsdGEiLAorICAgICJDYW5jZWwiOiAixLBwdGFsIiwKKyAgICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkzDvHRmZW4gYnVyYXlhIHJlc2ltIFVSTCdzaW5pIGdpcmluIiwKKyAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiUmVzaW0gZGVzdGVrbGVtZXllbiB0YXJhecSxY8SxbGFyIGnDp2luIiwKKyAgICAiSGVpZ2h0OiI6ICJZw7xrc2VrbGlrIiwKKyAgICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIllhdGF5IGRvbGR1cm1hIG1pa3RhcsSxIiwKKyAgICAiSG9yaXpvbnRhbDoiOiAiWWF0YXk6IiwKKyAgICAiSW1hZ2UgUHJldmlldzoiOiAiUmVzaW0gw7ZuaXpsZW1lOiIsCisgICAgIkltYWdlIFVSTDoiOiAiUmVzaW0gVVJMJ3NpOiIsCisgICAgIkluc2VydCBJbWFnZSI6ICJSZXNpbSBla2xlIiwKKyAgICAiTGF5b3V0IjogIkTDvHplbiIsCisgICAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiS2VuYXJsxLFrIGlzdGVtaXlvcnNhbsSxeiBib8WfIGLEsXJha8SxbiIsCisgICAgIkxlZnQiOiAiU29sYSIsCisgICAgIk1pZGRsZSI6ICJPcnRhbGEiLAorICAgICJOb3Qgc2V0IjogIkF5YXJsYW5tYW3EscWfIiwKKyAgICAiT0siOiAiVGFtYW0iLAorICAgICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIlJlc21pIGtvbnVtbGFuZMSxcm1hIiwKKyAgICAiUHJldmlldyI6ICLDlm5pemxlbWUiLAorICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiUmVzbWkgeWVuaSBwZW5jZXJlZGUgw7ZuaXpsZW1lIiwKKyAgICAiUmlnaHQiOiAiU2HEn2EiLAorICAgICJTcGFjaW5nIjogIkFyYWzEsWsiLAorICAgICJUZXh0dG9wIjogIk1ldGluLcO8c3R0ZSIsCisgICAgIlRvcCI6ICJZdWthcsSxIiwKKyAgICAiVmVydGljYWwgcGFkZGluZyI6ICJEaWtleSBkb2xkdXJtYSBtaWt0YXLEsSIsCisgICAgIlZlcnRpY2FsOiI6ICJEaWtleToiLAorICAgICJXaWR0aDoiOiAiR2VuacWfbGlrOiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVFBJQ1RVUkUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL3ZuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvdm4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjllMmVjNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL3ZuLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidm4iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkjhu6d5IiwKKyAgICAiT0siOiAixJDhu5NuZyDDvSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIElOU0VSVFBJQ1RVUkUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL3poX2NuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL2xhbmcvemhfY24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQyYTMzZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvSW5zZXJ0UGljdHVyZS9sYW5nL3poX2NuLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiemhfY24iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogSU5TRVJUUElDVFVSRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL3ZpZXdwaWN0dXJlLmh0bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL0luc2VydFBpY3R1cmUvdmlld3BpY3R1cmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDgyM2JmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9JbnNlcnRQaWN0dXJlL3ZpZXdwaWN0dXJlLmh0bWwKQEAgLTAsMCArMSw0NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQorPGh0bWw+DQorPGhlYWQ+DQorCTx0aXRsZT5QcmV2aWV3PC90aXRsZT4NCis8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KKzwhLS0NCitmdW5jdGlvbiBpbWdXYWl0KCkgew0KKwl3YWl0aW5nID0gd2luZG93LnNldEludGVydmFsKCJpbWdJc0xvYWRlZCgpIiwgMTAwMCk7DQorfQ0KK2Z1bmN0aW9uIGltZ0lzTG9hZGVkKCkgew0KKwlpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlJbWciKS53aWR0aCA+IDApIHsNCisJICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh3YWl0aW5nKTsNCisJICBpbWdTaG93V2lkdGgoKTsNCisJfQ0KK30NCitmdW5jdGlvbiBpbWdTaG93V2lkdGgoKSB7DQorCXZhciB3aWR0aCAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteUltZyIpLndpZHRoOw0KKwl2YXIgaGVpZ2h0ICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlJbWciKS5oZWlnaHQ7DQorCWlmKHdpZHRoID4gMTIwKSB7DQorCSAgdmFyIGR4ID0gKDEyMCAvIHdpZHRoKTsNCisJICB2YXIgZHkgPSAoMTIwIC8gaGVpZ2h0KTsNCisJICByYXRpbyAgPSBkeCA8IGR5ID8gZHggOiBkeTsNCisJICAvLyBrZWVwIGFzcGVjdCByYXRpbw0KKwkgIHdpZHRoICA9IHdpZHRoICogcmF0aW87DQorCSAgaGVpZ2h0ID0gaGVpZ2h0ICogcmF0aW87DQorCSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15SW1nIikud2lkdGggID0gd2lkdGg7DQorCSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15SW1nIikuaGVpZ2h0ID0gaGVpZ2h0Ow0KKwl9DQorCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteUltZyIpLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7DQorfQ0KK2Z1bmN0aW9uIHNob3dQcmV2aWV3KCkgew0KKwlpbWcgPSBkb2N1bWVudC5sb2NhdGlvbi50b1N0cmluZygpLnNwbGl0KCI/Iik7DQorICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteUltZyIpLnNyYyA9IGltZ1sxXTsNCisJaW1nLm9uTG9hZCA9IGltZ1dhaXQoKTsNCit9DQorLy8tLT4NCis8L3NjcmlwdD4NCis8L2hlYWQ+DQorPGJvZHkgIG1hcmdpbndpZHRoPSI1cHgiIG1hcmdpbmhlaWdodD0iNXB4IiB0b3BtYXJnaW49IjVweCIgbGVmdG1hcmdpbj0iNXB4IiByaWdodG1hcmdpbj0iNXB4Ij4NCis8aW1nIGlkPSJteUltZyIgc3JjPSIiIFN0eWxlPSJ2aXNpYmlsaXR5OmhpZGRlbiI+DQorPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCisgIHNob3dQcmV2aWV3KCk7DQorPC9zY3JpcHQ+DQorDQorPC9ib2R5Pg0KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvTm90ZVNlcnZlci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9Ob3RlU2VydmVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0M2EzMmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvTm90ZVNlcnZlci5qcwpAQCAtMCwwICsxLDIwOCBAQAorLy8gR1VJRE8gTXVzaWMgTm90YXRpb24gcGx1Z2luIGZvciBYaW5oYQorLy8gSW1wbGVtZW50YXRpb24gYnkgUmljaGFyZCBDaHJpc3RvcGhlCisvLyBPcmlnaW5hbCBBdXRob3IgLSBSaWNoYXJkIENocmlzdG9waGUgY3ZyaWNoYXJkQGluZm9uaWUuZnIKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisKKy8vIHRoaXMgaXMgYSBjb2xsZWN0aW9uIG9mIEphdmFTY3JpcHQgcm91dGluZXMgdGhhdAorLy8gZmFjaWxpdGF0ZSBhY2Nlc3NpbmcgdGhlIEdVSURPIE5vdGVTZXJ2ZXIuCisvLworLy8gVGhlc2UgRnVuY3Rpb25zIGNhbiBiZSB1c2VkIHdpdGhpbiBXRUItUGFnZXMKKy8vIGV4YW1wbGVzIGNhbiBiZSBmb3VuZCBhdAorLy8gd3d3Lm5vdGVzZXJ2ZXIub3JnL2phdmFzY3JpcHQvaW5kZXguaHRtbAorLy8KKworZnVuY3Rpb24gTm90ZVNlcnZlcihlZGl0b3IpIHsKKyAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisgIHZhciBjZmcgPSBlZGl0b3IuY29uZmlnOworICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgY2ZnLnJlZ2lzdGVyQnV0dG9uKHsKKyAgICAgICAgICAgICAgICBpZCAgICAgICA6ICJpbnNlcnRzY29yZSIsCisgICAgICAgICAgICAgICAgdG9vbHRpcCAgOiB0aGlzLl9sYygiSW5zZXJ0IEdVSURPIE11c2ljIE5vdGF0aW9uIiksCisgICAgICAgICAgICAgICAgaW1hZ2UgICAgOiBlZGl0b3IuaW1nVVJMKCJub3RlLmdpZiIsICJOb3RlU2VydmVyIiksCisgICAgICAgICAgICAgICAgdGV4dE1vZGUgOiBmYWxzZSwKKyAgICAgICAgICAgICAgICBhY3Rpb24gICA6IGZ1bmN0aW9uKGVkaXRvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1dHRvblByZXNzKGVkaXRvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKwljZmcuYWRkVG9vbGJhckVsZW1lbnQoImluc2VydHNjb3JlIiwgImluc2VydGltYWdlIiwgMSk7Cit9CisKK05vdGVTZXJ2ZXIuX3BsdWdpbkluZm8gPSB7CisgIG5hbWUgICAgICAgICAgOiAiTm90ZVNlcnZlciIsCisgIHZlcnNpb24gICAgICAgOiAiMS4xIiwKKyAgZGV2ZWxvcGVyICAgICA6ICJSaWNoYXJkIENocmlzdG9waGUiLAorICBkZXZlbG9wZXJfdXJsIDogImh0dHA6Ly9waWFuby1nby5jaGV6LnRpc2NhbGkuZnIvZ3VpZG8uaHRtbCIsCisgIGNfb3duZXIgICAgICAgOiAiUmljaGFyZCBDaHJpc3RvcGhlIiwKKyAgc3BvbnNvciAgICAgICA6ICIiLAorICBzcG9uc29yX3VybCAgIDogIiIsCisgIGxpY2Vuc2UgICAgICAgOiAiaHRtbEFyZWEiCit9OworCitOb3RlU2VydmVyLnByb3RvdHlwZS5fbGMgPSBmdW5jdGlvbihzdHJpbmcpIHsKKyAgcmV0dXJuIFhpbmhhLl9sYyhzdHJpbmcsICdOb3RlU2VydmVyJyk7Cit9OworCitOb3RlU2VydmVyLnByb3RvdHlwZS5idXR0b25QcmVzcyA9IGZ1bmN0aW9uKGVkaXRvcikgeworICBlZGl0b3IuX3BvcHVwRGlhbG9nKCAicGx1Z2luOi8vTm90ZVNlcnZlci9jb2Rlbm90ZSIsIGZ1bmN0aW9uKHBhcmFtKSB7CisgICAgaWYgKCFwYXJhbSkgewkvLyB1c2VyIG11c3QgaGF2ZSBwcmVzc2VkIENhbmNlbAorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBJbmNsdWRlR3VpZG8oZWRpdG9yLHBhcmFtKTsKKyAgfSwgbnVsbCk7Cit9OworCisvLyB0aGlzIHZhcmlhYmxlIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBub3Rlc2VydmVyCisvLyBjYW4gYmUgc2V0IHRvIGFub3RoZXIgYWRkcmVzcyAobG9jYWwgYWRkcmVzcyBpZiBhdmFpbGFsYmxlKSAKKworLy8gdmFyIG5vdGVzZXJ2ZXJhZGRyZXNzID0gInd3dy5ub3Rlc2VydmVyLm9yZyI7CisvLyB2YXIgaHRtbGJhc2UgPSAiIjsKKworLy8gYWx0ZXJuYXRpdmU6IHNwZWNpZnkgc2VydmVyLWFkcmVzcyBkaXJlY3RseToKK3ZhciBub3Rlc2VydmVyYWRkcmVzcyA9ICJjbGVmLmNzLnViYy5jYSI7IC8vInd3dy5ub3Rlc2VydmVyLm9yZyIKK3ZhciBodG1sYmFzZSA9ICIvc2FsaWVyaS9udmlldyI7CisKKworLy8gdGhpcyBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgTm90ZVNlcnZlciB1c2VkLgorLy8gb25lIG9mICIwXzQiLCAiMF81IiwgIjBfNiIsIG9yICIwXzciLCBvciAiIgorLy8gIiIgbWVhbnM6IHRha2UgdGhlIGN1cnJlbnQgdmVyc2lvbgorLy8gdmFyIHZlcnNpb25zdHJpbmcgPSAiMF83IjsKK3ZhciB2ZXJzaW9uc3RyaW5nID0gIiI7CisKKy8vIHRoaXMgZnVuY3Rpb25zIHRha2VzIGEgR01OLXN0cmluZyBhbmQgcmV0dXJucyB0aGUgVVJMCisvLyB0aGF0IGNvbnZlcnRzIGl0IGludG8gYSBHSUYtZmlsZQorZnVuY3Rpb24gR2V0R0lGVVJMKGdtbnN0cmluZyx6b29tLHBhZ2VudW0pIHsKKyAgZ21uc3RyaW5nID0gZXNjYXBlKGdtbnN0cmluZyk7CisgIGdtbnN0cmluZyA9IGdtbnN0cmluZy5yZXBsYWNlKC9cLy9nLCIlMkYiKTsKKworICBpZiAoIXpvb20pIHsKKyAgICB6b29tID0gIjEuMCI7CisgIH0KKyAgaWYgKCFwYWdlbnVtKSB7CisgICAgcGFnZW51bSA9ICIxIjsKKyAgfQorCisgIHZhciBzdHJpbmcgPSAiaHR0cDovLyIgKyBub3Rlc2VydmVyYWRkcmVzcyArCisgICAgICAgICAgICAgICAiL3NjcmlwdHMvc2FsaWVyaSIgKyB2ZXJzaW9uc3RyaW5nICsKKyAgICAgICAgICAgICAgICIvZ2lmc2Vydi5wbD8iICsKKyAgICAgICAgICAgICAgICJwYWdld2lkdGg9MjEiICsKKyAgICAgICAgICAgICAgICImcGFnZWhlaWdodD0yOS43IiArCisgICAgICAgICAgICAgICAiJnpvb21mYWN0b3I9IiArIHpvb20gKworICAgICAgICAgICAgICAgIiZwYWdlc2l6ZWFkanVzdD15ZXMiICsKKyAgICAgICAgICAgICAgICImb3V0cHV0Zm9ybWF0PWdpZjg3IiArCisgICAgICAgICAgICAgICAiJnBhZ2VudW09IiArIHBhZ2VudW0gKworICAgICAgICAgICAgICAgIiZnbW5kYXRhPSIgKyBnbW5zdHJpbmc7CisKKyAgLy8JZG9jdW1lbnQud3JpdGUoc3RyaW5nKTsKKyAgcmV0dXJuIHN0cmluZzsKK30KKworLy8gdGhpcyBmdW5jdGlvbnMgdGFrZXMgYSBHTU4tc3RyaW5nIGFuZCByZXR1cm5zIHRoZSBVUkwKKy8vIHRoYXQgY29udmVydHMgaXQgaW50byBhIE1JREktZmlsZQorZnVuY3Rpb24gR2V0TUlESVVSTChnbW5zdHJpbmcpIHsKKyAgZ21uc3RyaW5nID0gZXNjYXBlKGdtbnN0cmluZyk7CisgIGdtbnN0cmluZyA9IGdtbnN0cmluZy5yZXBsYWNlKC9cLy9nLCIlMkYiKTsKKworICB2YXIgc3RyaW5nID0gImh0dHA6Ly8iICsgbm90ZXNlcnZlcmFkZHJlc3MgKworICAgICAgICAgICAgICAgIi9zY3JpcHRzL3NhbGllcmkiICsgdmVyc2lvbnN0cmluZyArIAorICAgICAgICAgICAgICAgIi9taWRzZXJ2LnBsPyIgKworICAgICAgICAgICAgICAgImdtbmRhdGE9IiArIGdtbnN0cmluZzsKKworICByZXR1cm4gc3RyaW5nOworfQorCisvLyB0aGlzIGZ1bmN0aW9ucyB0YWtlcyBhIEdNTi1zdHJpbmcgYW5kIHJldHVybnMgdGhlIFVSTAorLy8gdGhhdCBpbnNlcnQgQXBwbGV0CitmdW5jdGlvbiBHZXRBUFBMRVRVUkwoZ21uc3RyaW5nLHpvb20pIHsKKyAgZ21uc3RyaW5nID0gZXNjYXBlKGdtbnN0cmluZyk7CisgIGdtbnN0cmluZyA9IGdtbnN0cmluZy5yZXBsYWNlKC9cLy9nLCIlMkYiKTsKKworICB2YXIgc3RyaW5nID0gJzxhcHBsZXQgJyArCisgICAgICAgICAgICAgICAnY29kZT0iTm90ZVNlcnZlckFwcGxldCIgJyArCisgICAgICAgICAgICAgICAnY29kZWJhc2U9Imh0dHA6Ly8nICsKKyAgICAgICAgICAgICAgIG5vdGVzZXJ2ZXJhZGRyZXNzICsgaHRtbGJhc2UgKyAnL2phdmEiICcgKworICAgICAgICAgICAgICAgJyB3aWR0aD03MDAgaGVpZ2h0PTMwMD4nICsKKyAgICAgICAgICAgICAgICc8cGFyYW0gbmFtZT1zZXJ2ZXIgdmFsdWU9IicgKworICAgICAgICAgICAgICAgbm90ZXNlcnZlcmFkZHJlc3MgKyAnIj4nICsKKyAgICAgICAgICAgICAgICc8cGFyYW0gbmFtZT1zZXJ2ZXJWZXJzaW9uIHZhbHVlPSInICsKKyAgICAgICAgICAgICAgIHZlcnNpb25zdHJpbmcgKyAnIj4nICsKKyAgICAgICAgICAgICAgICc8cGFyYW0gbmFtZT16b29tRmFjdG9yIHZhbHVlPSInICsKKyAgICAgICAgICAgICAgIHpvb20gKyAnIj4nICsKKyAgICAgICAgICAgICAgICc8cGFyYW0gbmFtZT1wYWdlV2lkdGggdmFsdWU9IjIxIj4nICsKKyAgICAgICAgICAgICAgICc8cGFyYW0gbmFtZT1wYWdlSGVpZ2h0IHZhbHVlPSIyOS43Ij4nICsKKyAgICAgICAgICAgICAgICc8cGFyYW0gbmFtZT1nbW4gdmFsdWU9IicgKworICAgICAgICAgICAgICAgZ21uc3RyaW5nICsgJyI+JyArCisgICAgICAgICAgICAgICAnPC9hcHBsZXQ+JzsKKworICByZXR1cm4gc3RyaW5nOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgR1VJRE8gc3RyaW5nLCBhY2Nlc3NlcyB0aGUKKy8vIE5vdGVTZXJ2ZXIgKGFkZHJlc3Mgc3BlY2lmaWVkIGFzIGEgY29uc3RhbnQgYWJvdmUpCisvLyBhbmQgdGhlbiBlbWJlZHMgdGhlIEdJRi1JbWFnZSBpbiB0aGUgZG9jdW1lbnQuCisKKworZnVuY3Rpb24gSW5jbHVkZUd1aWRvKGVkaXRvcixwYXJhbSkgeworICAvLyB0aGlzICBob2xkcyB0aGUgVVJMIGZvciByZXRyaWV2aW5nIHRoZSBwaWN0dXJlIC4uLgorCisgIGlmICghcGFyYW1bImZfem9vbSJdKQorICAgIHpvb20gPSAiIjsKKyAgLy9pZiAoIXBhZ2VudW0pCisgICAvLyBwYWdlbnVtID0gIiI7CisKKyAgdmFyIHN0cmluZyA9IEdldEdJRlVSTChwYXJhbVsiZl9jb2RlIl0scGFyYW1bImZfem9vbSJdLCIiKTsKKyAgdmFyIHN0cmluZ21pZGkgPSBHZXRNSURJVVJMKHBhcmFtWyJmX2NvZGUiXSk7CisgIHZhciBzdHJpbmcyID0gIjxicj4iOworCitpZiAocGFyYW1bImZfYXBwbGV0Il0gPT0gZmFsc2UgKXsKKyAgaWYgKCgobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm1zaWUiKSAhPSAtMSkKKyAgICAmJiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm9wZXJhIikgPT0gLTEpKSkgeworICAgIGVkaXRvci5mb2N1c0VkaXRvcigpOworICAgIGVkaXRvci5pbnNlcnRIVE1MKCI8aW1nIHNyYz0iICsgc3RyaW5nICsgIj4iKTsKKyAgfQllbHNlIHsKKyAgICBpbWcgPSBuZXcgSW1hZ2UoKTsKKyAgICBpbWcuc3JjID0gc3RyaW5nOworCisgICAgdmFyIGRvYyA9IGVkaXRvci5fZG9jOworICAgIHZhciBzZWwgPSBlZGl0b3IuX2dldFNlbGVjdGlvbigpOworICAgIHZhciByYW5nZSA9IGVkaXRvci5fY3JlYXRlUmFuZ2Uoc2VsKTsKKyAgICBlZGl0b3IuX2RvYy5leGVjQ29tbWFuZCgiaW5zZXJ0aW1hZ2UiLCBmYWxzZSwgaW1nLnNyYyk7CisgIH0KK30gZWxzZSB7CisgIHZhciBzdHJpbmdhcHBsZXQgPSBHZXRBUFBMRVRVUkwocGFyYW1bImZfY29kZSJdLHBhcmFtWyJmX3pvb20iXSk7CisgIHN0cmluZzIgPSBzdHJpbmcyICsgc3RyaW5nYXBwbGV0ICsgIjxicj4iOworfQorCisvLyBUbyB0ZXN0IGNvZGUgc291cmNlIGluIHRleHRhcmVhCisvL2lmIChwYXJhbVsiZl9hZmZjb2RlIl0pIHN0cmluZzIgPSBzdHJpbmcyICsgWGluaGEuX2xjKCJTb3VyY2UgQ29kZSIsIk5vdGVTZXJ2ZXIiKSArICIgOiIgKyAnPGJyPiA8dGV4dGFyZWEgIGNvbHM9NjAgcm93cz0xMCBzdHlsZSA9ICJiYWNrZ3JvdW5kOiAjRkZGRkU2Ij4nICsgIHBhcmFtWyJmX2NvZGUiXSArICc8L3RleHRhcmVhPiA8YnI+JzsKKworaWYgKHBhcmFtWyJmX2FmZmNvZGUiXSkgc3RyaW5nMiA9IHN0cmluZzIgKyBYaW5oYS5fbGMoIkdVSURPIENvZGUiLCJOb3RlU2VydmVyIikgKyAiIDogIiAgKyBwYXJhbVsiZl9jb2RlIl0gKyAiPGJyPiI7CitpZiAocGFyYW1bImZfbWlkaSJdKSBzdHJpbmcyID0gc3RyaW5nMiArICI8YSBocmVmPSIgKyBzdHJpbmdtaWRpICsgIj4iICsgWGluaGEuX2xjKCJNSURJIEZpbGUiLCJOb3RlU2VydmVyIikgKyAiPC9hPiA8YnI+IjsKKworICBlZGl0b3IuZm9jdXNFZGl0b3IoKTsKKyAgZWRpdG9yLmluc2VydEhUTUwoc3RyaW5nMik7CisKKyAgICAvL3ZhciBodG1sID0gbGlua3RleHQubGluayhzdHJpbmdtaWRpKTsKKyAgICAvL2VkaXRvci5pbnNlcnRIVE1MKGh0bWwpOworfQorCisvLyB0aGlzIHJvdXRpbmUgaW5jbHVkZXMgdGhlIGFwcGxldC1kZWZpbml0aW9uIAorZnVuY3Rpb24gSW5jbHVkZUd1aWRvU3RyaW5nQXNBcHBsZXQoZWRpdG9yLCBnbW5zdHJpbmcsIHpvb20pIHsKKyAgZ21uc3RyaW5nID0gZXNjYXBlKGdtbnN0cmluZyk7CisgIGdtbnN0cmluZyA9IGdtbnN0cmluZy5yZXBsYWNlKC9cLy9nLCIlMkYiKTsKKworICB2YXIgc3RyaW5nID0gJzxhcHBsZXQgJyArIAorICAgICAgICAgICAgICAgJ2NvZGViYXNlPSJodHRwOi8vJyArIG5vdGVzZXJ2ZXJhZGRyZXNzICsgaHRtbGJhc2UgKyAnL2phdmEiXG4nICsKKyAgICAgICAgICAgICAgICdjb2RlPSJOb3RlU2VydmVyQXBwbGV0IiB3aWR0aD00ODAgaGVpZ2h0PTIzMD4nICsKKyAgICAgICAgICAgICAgICI8UEFSQU0gTkFNRT1zZXJ2ZXIgVkFMVUU9JyIgKyBub3Rlc2VydmVyYWRkcmVzcyArICInPiIgKworICAgICAgICAgICAgICAgIjxQQVJBTSBOQU1FPXNlcnZlclZlcnNpb24gVkFMVUU9JyIgKyB2ZXJzaW9uc3RyaW5nICsgIic+IiArCisgICAgICAgICAgICAgICAiPFBBUkFNIE5BTUU9em9vbUZhY3RvciBWQUxVRT0nIgkrIHpvb20gKyAiJz4iICsKKyAgICAgICAgICAgICAgICc8cGFyYW0gbmFtZT1wYWdlV2lkdGggdmFsdWU9IjIxIj4nICsKKyAgICAgICAgICAgICAgICc8cGFyYW0gbmFtZT1wYWdlSGVpZ2h0IHZhbHVlPSIyOS43Ij4nICsKKyAgICAgICAgICAgICAgICI8UEFSQU0gTkFNRT1nbW4gVkFMVUU9JyIgKyBnbW5zdHJpbmcgKyAiJz4iICsKKyAgICAgICAgICAgICAgICI8L2FwcGxldD4iOworICBhbGVydChzdHJpbmcpOworICBlZGl0b3IuZm9jdXNFZGl0b3IoKTsKKyAgZWRpdG9yLmluc2VydEhUTUwoc3RyaW5nKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvaW1nL25vdGUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2ltZy9ub3RlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2MxMTdhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2ltZy9ub3RlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9iNS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2I1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNDA2ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9iNS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImI1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvY2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA2ZDQ3NgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2NoLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgIk9LIjogIuWlvSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2N6LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvY3ouanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMxYTc1OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2N6LmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY3oiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlpydcWhaXQiLAorICAgICJPSyI6ICJPSyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2RhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvZGEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY3NjI2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2RhLmpzCkBAIC0wLDAgKzEsMjAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGVyIiwKKyAgICAiSW1hZ2UgUHJldmlldyI6ICJCaWxsZWRlIHNtdWdraWc6IiwKKyAgICAiT0siOiAiT0siLAorICAgICJQcmV2aWV3IjogIlNtdWdraWciLAorICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiU211Z2tpZyBhZiBiaWxsZWRldCBpIGV0IG55dCB2aW5kdWUiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2RlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NmQ4OGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9kZS5qcwpAQCAtMCwwICsxLDMwIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFkZCBHVUlETyBDb2RlIGluIGEgdGV4dGJveCBvbiB0aGUgcGFnZSI6ICJHVUlETyBDb2RlIGluIGVpbmVyIFRleHRib3ggYXVmIGRlciBTZWl0ZSBhbnplaWdlbiIsCisgICAgIkFkZCBNSURJIGxpbmsgdG8gYWxsb3cgc3R1ZGVudHMgdG8gaGVhciB0aGUgbXVzaWMiOiAiTUlESS1MaW5rIGhpbnp1ZsO8Z2VuIHVtIFN0dWRlbnRlbiBkYXMgaMO2cmVuIGRlciBNdXNpayB6dSBlcm3DtmdsaWNoZW4iLAorICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAiRm9ybWF0IjogIkZvcm1hdCIsCisgICAgIkd1aWRvIGNvZGUiOiAiR3VpZG8gY29kZSIsCisgICAgIkltYWdlIFByZXZpZXciOiAiQmlsZCBWb3JhbnNpY2h0IiwKKyAgICAiSW1hZ2UgaW4gYXBwbGV0IjogIkJpbGQgaW0gQXBwbGV0IiwKKyAgICAiSW5zZXJ0IEdVSURPIE11c2ljIE5vdGF0aW9uIjogIkVpbmbDvGd1bmcgZWluZXIgR1VJRE8gTXVzaWstVG9uZm9sZ2UiLAorICAgICJNSURJIEZpbGUiOiAiTUlESSBEYXRlaSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiT3B0aW9ucyI6ICJFaW5zdGVsbHVuZ2VuIiwKKyAgICAiUHJldmlldyI6ICJWb3JhbnNpY2h0IiwKKyAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlZvcmFuc2ljaHQgZGVzIEJpbGRlcyBpbiBlaW5lbSBuZXVlbiBGZW5zdGVyIiwKKyAgICAiU291cmNlIENvZGUiOiAiUXVlbGwtQ29kZSIsCisgICAgIlpvb20iOiAiWm9vbSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2VlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvZWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUzZDdjZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2VlLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAiT0siOiAiT0siLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9lbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2VsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYzZkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9lbC5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLOkc66z43Pgc+Jz4POtyIsCisgICAgIk9LIjogIs6Vzr3PhM6szr7Otc65IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmJhOWNlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvZXMuanMKQEAgLTAsMCArMSwyMCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlcyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICJJbWFnZSBQcmV2aWV3IjogIlByZXZpc3VhbGl6YWNpw7NuIGRlIGxhIGltYWdlbjoiLAorICAgICJPSyI6ICJBY2VwdGFyIiwKKyAgICAiUHJldmlldyI6ICJQcmV2aXN1YWxpemFyIiwKKyAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlByZXZpc3VhbGl6YXIgZW4gdW5hIG51ZXZhIHZlbnRhbmEiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9ldS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2V1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNGJmY2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9ldS5qcwpAQCAtMCwwICsxLDIwIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImV1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJVdHppIiwKKyAgICAiSW1hZ2UgUHJldmlldyI6ICJJcnVkaWFyZW4gYXVycmViaXN0YToiLAorICAgICJPSyI6ICJBZG9zIiwKKyAgICAiUHJldmlldyI6ICJBdXJyZWJpc3RhIiwKKyAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIkF1cnJlaWt1c2kgaXJ1ZGlhIGJlc3RlIGxlaGlvIGJhdGVhbiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvZmEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE4OTNkMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2ZhLmpzCkBAIC0wLDAgKzEsMjAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItin2YbYtdix2KfZgSIsCisgICAgIkltYWdlIFByZXZpZXciOiAi2b7bjNi0INmG2YXYp9uM2LQg2KrYtdmI24zYsSIsCisgICAgIk9LIjogItio2YTZhyIsCisgICAgIlByZXZpZXciOiAi2b7bjNi0INmG2YXYp9uM2LQiLAorICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAi2b7bjNi0INmG2YXYp9uM2LQg2KrYtdmI24zYsSDYr9ixINm+2YbYrNix2Ycg2KfbjCDYrNiv24zYryIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2ZpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvZmkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM4ZGEzZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2ZpLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmkiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlBlcnV1dGEiLAorICAgICJPSyI6ICJIeXbDpGtzeSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvZnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyODAyZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsMzAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWRkIEdVSURPIENvZGUgaW4gYSB0ZXh0Ym94IG9uIHRoZSBwYWdlIjogIkFqb3V0ZXIgbGUgY29kZSBzb3VyY2UgR1VJRE8gZGFucyB1biBjYWRyZSIsCisgICAgIkFkZCBNSURJIGxpbmsgdG8gYWxsb3cgc3R1ZGVudHMgdG8gaGVhciB0aGUgbXVzaWMiOiAiQWpvdXRlciB1biBsaWVuIE1JREkgcG91ciBwZXJtZXR0cmUgYXV4IMOpdHVkaWFudHMgZCfDqWNvdXRlciBsYSBwYXJ0aXRpb24iLAorICAgICJDYW5jZWwiOiAiQW5udWxlciIsCisgICAgIkZvcm1hdCI6ICJGb3JtYXQiLAorICAgICJHdWlkbyBjb2RlIjogIkNvZGUgR3VpZG8iLAorICAgICJJbWFnZSBQcmV2aWV3IjogIkFwZXLDp3UgZGUgbCdpbWFnZSIsCisgICAgIkltYWdlIGluIGFwcGxldCI6ICJJbWFnZSBkYW5zIHVuZSBhcHBsZXQiLAorICAgICJJbnNlcnQgR1VJRE8gTXVzaWMgTm90YXRpb24iOiAiSW5zw6lyZXIgdW5lIHBhcnRpdGlvbiBtdXNpY2FsZSBHVUlETyIsCisgICAgIk1JREkgRmlsZSI6ICJGaWNoaWVyIE1JREkiLAorICAgICJPSyI6ICJPSyIsCisgICAgIk9wdGlvbnMiOiAiT3B0aW9ucyIsCisgICAgIlByZXZpZXciOiAiQXBlcsOndSAiLAorICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiUHLDqXZpc3VhbGlzZXIgbCdpbWFnZSBkYW5zIHVuZSBub3V2ZWxsZSBmZW7DqnRyZSIsCisgICAgIlNvdXJjZSBDb2RlIjogIkNvZGUgc291cmNlIiwKKyAgICAiWm9vbSI6ICJab29tIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvZnJfY2EuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9mcl9jYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjk4ODY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvZnJfY2EuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmcl9jYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9nYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2diLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZWFmOWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9nYi5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImdiIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2hlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvaGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM5N2JkMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2hlLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIteR15nXmNeV15wiLAorICAgICJPSyI6ICLXkNeZ16nXldeoIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9odS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjZhNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvaHUuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJodSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIsCisgICAgIk9LIjogIlJlbmRiZW4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9pdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2l0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZWM2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9pdC5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIml0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iLAorICAgICJPSyI6ICJPSyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE0YTU0OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2phLmpzCkBAIC0wLDAgKzEsMzEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiamEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWRkIEdVSURPIENvZGUgaW4gYSB0ZXh0Ym94IG9uIHRoZSBwYWdlIjogIuODmuODvOOCuOWGheOBruODhuOCreOCueODiOODnOODg+OCr+OCueOBq0dVSURP44Kz44O844OJ44KS6L+95YqgIiwKKyAgICAiQWRkIE1JREkgbGluayB0byBhbGxvdyBzdHVkZW50cyB0byBoZWFyIHRoZSBtdXNpYyI6ICJNSURJ44G444Gu44Oq44Oz44Kv44KS6L+95Yqg44GX44CB5qW95puy44KS6IG044GL44Gb44Gm44KC44KI44GEIiwKKyAgICAiQ2FuY2VsIjogIuS4reatoiIsCisgICAgIkZvcm1hdCI6ICLjg5Xjgqnjg7zjg57jg4Pjg4giLAorICAgICJHdWlkbyBjb2RlIjogIkdVSURP44Kz44O844OJIiwKKyAgICAiSW1hZ2UgUHJldmlldyI6ICLnlLvlg4/jg5fjg6zjg5Pjg6Xjg7wiLAorICAgICJJbWFnZSBpbiBhcHBsZXQiOiAi44Ki44OX44Os44OD44OI55S75YOPIiwKKyAgICAiSW5zZXJ0IEdVSURPIE11c2ljIE5vdGF0aW9uIjogIkdVSURPIE11c2ljIE5vdGF0aW9u44Gu5oy/5YWlIiwKKyAgICAiTUlESSBGaWxlIjogIk1JREnjg5XjgqHjgqTjg6siLAorICAgICJPSyI6ICJPSyIsCisgICAgIk9wdGlvbnMiOiAi44Kq44OX44K344On44OzIiwKKyAgICAiUHJldmlldyI6ICLooajnpLoiLAorICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAi44Km44Kj44Oz44OJ44Km44Gn55S75YOP44KS6KGo56S6IiwKKyAgICAiU291cmNlIENvZGUiOiAi44K944O844K544Kz44O844OJIiwKKyAgICAiV2l0aCBNb3ppbGxhLCB0aGUgYXBwbGV0IHdpbGwgbm90IGJlIHZpc2libGUgaW4gZWRpdG9yLCBidXQgb25seSBpbiBXZWIgcGFnZSBhZnRlciBzdWJtaXR0aW5nLiI6ICJNb3ppbGxh44Gn44Gv44Ko44OH44Kj44K/5YaF44Gr44Ki44OX44Os44OD44OI44Gv6KGo56S644GV44KM44G+44Gb44KT44GM44CB6YCB5L+h5b6M44GuV2Vi44Oa44O844K45YaF44Gn44Gv5pyJ5Yq544Gn44GZ44CCIiwKKyAgICAiWm9vbSI6ICLmi6HlpKfnjoc6IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExMDIwMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSw0NiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICIxMDAlIjogIiIsCisgICAgIjEyMCUiOiAiIiwKKyAgICAiMTUwJSI6ICIiLAorICAgICI4MCUiOiAiIiwKKyAgICAiQWRkIEdVSURPIENvZGUgaW4gYSB0ZXh0Ym94IG9uIHRoZSBwYWdlIjogIiIsCisgICAgIkFkZCBNSURJIGxpbmsgdG8gYWxsb3cgc3R1ZGVudHMgdG8gaGVhciB0aGUgbXVzaWMiOiAiIiwKKyAgICAiQ2FuY2VsIjogIiIsCisgICAgIkZvcm1hdCI6ICIiLAorICAgICJHVUlETyBDb2RlIjogIiIsCisgICAgIkd1aWRvIGNvZGUiOiAiIiwKKyAgICAiSW1hZ2UgUHJldmlldyI6ICIiLAorICAgICJJbWFnZSBpbiBhcHBsZXQiOiAiIiwKKyAgICAiSW5zZXJ0IEdVSURPIE11c2ljIE5vdGF0aW9uIjogIiIsCisgICAgIk1JREkgRmlsZSI6ICIiLAorICAgICJPSyI6ICIiLAorICAgICJPcHRpb25zIjogIiIsCisgICAgIlByZXZpZXciOiAiIiwKKyAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIiIsCisgICAgIlNvdXJjZSBDb2RlIjogIiIsCisgICAgIldpdGggTW96aWxsYSwgdGhlIGFwcGxldCB3aWxsIG5vdCBiZSB2aXNpYmxlIGluIGVkaXRvciwgYnV0IG9ubHkgaW4gV2ViIHBhZ2UgYWZ0ZXIgc3VibWl0dGluZy4iOiAiIiwKKyAgICAiWm9vbSI6ICIiLAorICAgICJab29tIDoiOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvbHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2NjBiNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL2x0LmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvbHYuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9sdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGU0MGFhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvbHYuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXRjZWx0IiwKKyAgICAiT0siOiAiTGFiaSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQzMmNkNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL25iLmpzCkBAIC0wLDAgKzEsMjkgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWRkIEdVSURPIENvZGUgaW4gYSB0ZXh0Ym94IG9uIHRoZSBwYWdlIjogIlNldHQgaW5uIEdVSURPLWtvZGUgaSBldCB0ZWtzdGZlbHQgcMOlIHNpZGVuIiwKKyAgICAiQWRkIE1JREkgbGluayB0byBhbGxvdyBzdHVkZW50cyB0byBoZWFyIHRoZSBtdXNpYyI6ICJMZWdnIHRpbCBNSURJLWxpbmsgZm9yIGF0IHN0dWRlbnRlciBrYW4gaMO4cmUgbXVzaWtrZW4iLAorICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAiRm9ybWF0IjogIkZvcm1hdCIsCisgICAgIkd1aWRvIGNvZGUiOiAiR1VJRE8ta29kZSIsCisgICAgIkltYWdlIFByZXZpZXciOiAiQmlsZGUgZm9yaMOlbmRzdmlzbmluZyIsCisgICAgIkltYWdlIGluIGFwcGxldCI6ICJCaWxkZSBpIGFwcGxldCIsCisgICAgIkluc2VydCBHVUlETyBNdXNpYyBOb3RhdGlvbiI6ICJTZXR0IGlubiBHVUlETy1ub3RlciIsCisgICAgIk1JREkgRmlsZSI6ICJNSURJZmlsIiwKKyAgICAiT0siOiAiT0siLAorICAgICJPcHRpb25zIjogIk11bGlnaGV0ZXIiLAorICAgICJQcmV2aWV3IjogIlByZXZpZXciLAorICAgICJTb3VyY2UgQ29kZSI6ICJLaWxkZWtvZGUiLAorICAgICJab29tIjogIkZvcnN0w7hyciIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvbmwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVmMDZkNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL25sLmpzCkBAIC0wLDAgKzEsMzAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWRkIEdVSURPIENvZGUgaW4gYSB0ZXh0Ym94IG9uIHRoZSBwYWdlIjogIkdVSURPIGNvZGUgaW4gZWVuIHRla3N0Z2ViaWVkIG9wIGRlIHBhZ2luYSBpbnZvZWdlbiIsCisgICAgIkFkZCBNSURJIGxpbmsgdG8gYWxsb3cgc3R1ZGVudHMgdG8gaGVhciB0aGUgbXVzaWMiOiAiTUlESSBsaW5rIGludm9lZ2VuIG9tIGRlIG11emllayB0ZSBiZWx1aXN0ZXJlbiIsCisgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iLAorICAgICJGb3JtYXQiOiAiSW5kZWxpbmciLAorICAgICJHdWlkbyBjb2RlIjogIkdVSURPLWNvZGUiLAorICAgICJJbWFnZSBQcmV2aWV3IjogIkFmYmVlbGRpbmdzdm9vcmJlZWxkIiwKKyAgICAiSW1hZ2UgaW4gYXBwbGV0IjogIkFmYmVlbGRpbmcgaW4gYXBwbGV0IiwKKyAgICAiSW5zZXJ0IEdVSURPIE11c2ljIE5vdGF0aW9uIjogIkdVSURPIG11emllayBub3RhdGllIGludm9lZ2VuIiwKKyAgICAiTUlESSBGaWxlIjogIk1JREkgYmVzdGFuZCIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiT3B0aW9ucyI6ICJPcHRpZXMiLAorICAgICJQcmV2aWV3IjogIlZvb3JiZWVsZCIsCisgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJBZmJlZWxkaW5nIGJla2lqa2VuIGluIG5pZXV3IHZlbnN0ZXIiLAorICAgICJTb3VyY2UgQ29kZSI6ICJCcm9uY29kZSIsCisgICAgIlpvb20iOiAiVmVyZ3Jvb3QvdmVya2xlaW4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL3BsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYzljOTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9wbC5qcwpAQCAtMCwwICsxLDIxIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInBsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICJJbWFnZSBQcmV2aWV3IjogIlBvZGdsxIVkIG9icmF6a2E6IiwKKyAgICAiT0siOiAiT0siLAorICAgICJPcHRpb25zIjogIk9wY2plIiwKKyAgICAiUHJldmlldyI6ICJQb2RnbMSFZCIsCisgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJQb2RnbMSFZCBvYnJhemthIHcgbm93eW0gb2tuaWUiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9wdF9ici5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NjBlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9wdF9ici5qcwpAQCAtMCwwICsxLDMzIEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkFkZCBHVUlETyBDb2RlIGluIGEgdGV4dGJveCBvbiB0aGUgcGFnZSI6ICJBZGljaW9uYXIgY8OzZGlnbyBHVUlETyBlbSB1bWEgY2FpeGEgZGUgdGV4dG8gbmEgcMOhZ2luYSIsCisgICAgIkFkZCBNSURJIGxpbmsgdG8gYWxsb3cgc3R1ZGVudHMgdG8gaGVhciB0aGUgbXVzaWMiOiAiQWRpY2lvbmFyIHVtIGxpbmsgTUlESSBwYXJhIHBlcm1pdGlyIHF1ZSBvcyBlc3R1ZGFudGVzIGVzY3V0ZW0gYSBtw7pzaWNhIiwKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiRm9ybWF0IjogIkZvcm1hdG8iLAorICAgICJHVUlETyBDb2RlIjogIkPDs2RpZ28gR1VJRE8iLAorICAgICJHdWlkbyBjb2RlIjogIkPDs2RpZ28gR3VpZG8iLAorICAgICJJbWFnZSBQcmV2aWV3IjogIlZpc3VhbGl6YcOnw6NvIGRhIEltYWdlbSIsCisgICAgIkltYWdlIGluIGFwcGxldCI6ICJJbWFnZW0gZW0gQXBwbGV0IiwKKyAgICAiSW5zZXJ0IEdVSURPIE11c2ljIE5vdGF0aW9uIjogIkluc2VyaXIgTm90YcOnw6NvIEdVSURPIGRlIE3DunNpY2EiLAorICAgICJNSURJIEZpbGUiOiAiQXJxdWl2byBNSURJIiwKKyAgICAiT0siOiAiT0siLAorICAgICJPcHRpb25zIjogIk9ww6fDtWVzIiwKKyAgICAiUHJldmlldyI6ICJWaXN1YWxpemHDp8OjbyIsCisgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJWaXN1YWxpemFyIGltYWdlbSBlbSB1bWEgbm92YSBqYW5lbGEiLAorICAgICJTb3VyY2UgQ29kZSI6ICJDb2RpZ28gRm9udGUiLAorICAgICJXaXRoIE1vemlsbGEsIHRoZSBhcHBsZXQgd2lsbCBub3QgYmUgdmlzaWJsZSBpbiBlZGl0b3IsIGJ1dCBvbmx5IGluIFdlYiBwYWdlIGFmdGVyIHN1Ym1pdHRpbmcuIjogIkNvbSBNb3ppbGxhLCBvIGFwcGxldCBuw6NvIGVzdGFyw6Egdmlzw612ZWwgbm8gZWRpdG9yLCBzb21lbnRlIG5hIFDDoWdpbmEgV2ViIGRlcG9pcyBkbyBlbnZpby4iLAorICAgICJab29tIjogIkFtcGxpYcOnw6NvIiwKKyAgICAiWm9vbSA6IjogIkFtcGxpYcOnw6NvIDoiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9yby5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL3JvLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMDk0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9yby5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJvIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiLAorICAgICJPSyI6ICJBY2NlcHTEgyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc2MWFkOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL3J1LmpzCkBAIC0wLDAgKzEsMjEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicnUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgIkltYWdlIFByZXZpZXciOiAi0J/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3Ri9C5INC/0YDQvtGB0LzQvtGC0YAiLAorICAgICJPSyI6ICJPSyIsCisgICAgIk9wdGlvbnMiOiAi0J7Qv9GG0LjQuCIsCisgICAgIlByZXZpZXciOiAi0J/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3Ri9C5INC/0YDQvtGB0LzQvtGC0YAiLAorICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAi0J/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3Ri9C5INC/0YDQvtGB0LzQvtGC0YAg0LIg0L7RgtC00LXQu9GM0L3QvtC8INC+0LrQvdC1IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvc2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9zaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDE4MDM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvc2guanMKQEAgLTAsMCArMSwyMCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUG9uacWhdGkiLAorICAgICJJbWFnZSBQcmV2aWV3IjogIlByZWdsZWQgc2xpa2UiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlByZXZpZXciOiAiUHJlZ2xlZCIsCisgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJQcmVnbGVkYWogc2xpa3UgdSBub3ZvbSBwcm96b3J1IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvc2kuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9zaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWY5ODkzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvc2kuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUHJla2xpxI1pIiwKKyAgICAiT0siOiAiViByZWR1IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvc3IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy9zci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTY4MTUyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvc3IuanMKQEAgLTAsMCArMSwyMCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi0J/QvtC90LjRiNGC0LgiLAorICAgICJJbWFnZSBQcmV2aWV3IjogItCf0YDQtdCz0LvQtdC0INGB0LvQuNC60LUiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlByZXZpZXciOiAi0J/RgNC10LPQu9C10LQiLAorICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAi0J/RgNC10LPQu9C10LTQsNGYINGB0LvQuNC60YMg0YMg0L3QvtCy0L7QvCDQv9GA0L7Qt9C+0YDRgyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL3N2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkZTA4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL3N2LmpzCkBAIC0wLDAgKzEsMjEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3YiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIkltYWdlIFByZXZpZXciOiAiRsO2cmhhbmRzZ3JhbnNrbmluZzoiLAorICAgICJPSyI6ICJPSyIsCisgICAgIk9wdGlvbnMiOiAiVsOkbGoiLAorICAgICJQcmV2aWV3IjogIkbDtnJoYW5kc2dyYW5za2EiLAorICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAiw5ZwcG5hIGJpbGQgaSBueXR0IGbDtm5zdGVyIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvdGguanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy90aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjA0ZGIyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvdGguanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0aCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwKKyAgICAiT0siOiAi4LiV4LiB4Lil4LiHIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogTk9URVNFUlZFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvdHIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy90ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmQwYzZlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL2xhbmcvdHIuanMKQEAgLTAsMCArMSwyMCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0ciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAixLBwdGFsIiwKKyAgICAiSW1hZ2UgUHJldmlldyI6ICJSZXNpbSDDtm5pemxlbWU6IiwKKyAgICAiT0siOiAiVGFtYW0iLAorICAgICJQcmV2aWV3IjogIsOWbml6bGVtZSIsCisgICAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJSZXNtaSB5ZW5pIHBlbmNlcmVkZSDDtm5pemxlbWUiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy92bi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL3ZuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MWZkZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy92bi5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInZuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJI4buneSIsCisgICAgIk9LIjogIsSQ4buTbmcgw70iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBOT1RFU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy96aF9jbi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9sYW5nL3poX2NuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMmUxYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL05vdGVTZXJ2ZXIvbGFuZy96aF9jbi5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInpoX2NuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIE5PVEVTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9wb3B1cHMvY29kZW5vdGUuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvTm90ZVNlcnZlci9wb3B1cHMvY29kZW5vdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjFiYTVmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9Ob3RlU2VydmVyL3BvcHVwcy9jb2Rlbm90ZS5odG1sCkBAIC0wLDAgKzEsMTYyIEBACis8aHRtbD4KKworPGhlYWQ+CisKKzx0aXRsZT5JbnNlcnQgR1VJRE8gTXVzaWMgTm90YXRpb248L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vLi4vLi4vcG9wdXBzL3BvcHVwLmNzcyIgLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiAgc3JjPSIuLi9ub3RlLXNlcnZlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi9wb3B1cHMvcG9wdXAuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKK3dpbmRvdy5yZXNpemVUbyg1MDAsIDIwMCk7CisKK05vdGVTZXJ2ZXIgPSB3aW5kb3cub3BlbmVyLk5vdGVTZXJ2ZXI7CisKK3ZhciBlZGl0b3IgPSBudWxsOworZnVuY3Rpb24gSW5pdCgpIHsKKyAgX19kbGdfdHJhbnNsYXRlKCdOb3RlU2VydmVyJyk7CisgIF9fZGxnX2luaXQoKTsKKworLy8gICB2YXIgcGFyYW0gPSB3aW5kb3cuZGlhbG9nQXJndW1lbnRzOworLy8gIGlmIChwYXJhbSkgeworLy8gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfbWlkaSIpLnZhbHVlID0gcGFyYW1bImZfbWlkaSJdOworLy8gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfY29kZSIpLnZhbHVlID0gcGFyYW1bImZfY29kZSJdOworLy8gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfem9vbSIpLnZhbHVlID0gcGFyYW1bImZfem9vbSJdOworLy8gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYWZmY29kZSIpLnZhbHVlID0gcGFyYW1bImZfYWZmY29kZSJdOworLy8gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYXBwbGV0IikudmFsdWUgPSBwYXJhbVsiZl9hcHBsZXQiXTsKKy8vICB9CisvLyAgZWRpdG9yID0gcGFyYW0uZWRpdG9yOworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9jb2RlIikuZm9jdXMoKTsKKy8vICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9jb2RlIikuc2VsZWN0KCk7Cit9CisKK2Z1bmN0aW9uIG9uT0soKSB7CisgIHZhciBmX2NvZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9jb2RlIik7CisgIGlmICghZl9jb2RlLnZhbHVlKSB7CisgICAgYWxlcnQoIllvdSBoYXZlIHRvIGVudGVyIEdVSURPIGNvZGUiKTsKKyAgICBmX2NvZGUuZm9jdXMoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyAgLy8gcGFzcyBkYXRhIGJhY2sgdG8gdGhlIGNhbGxpbmcgd2luZG93CisKKyAgdmFyIHBhcmFtID0ge307CisgIHBhcmFtWyJmX2NvZGUiXSA9IGZfY29kZS52YWx1ZTsKKyAgdmFyIGZfem9vbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3pvb20iKTsKKyAgdmFyIHogPSAiMS4wIjsKKyAgaWYgKGZfem9vbS52YWx1ZSA9PSAiMS4wIiB8fCBmX3pvb20udmFsdWUgPT0gIjEwMCUiKSB6ID0gMS4wOworICBlbHNlIGlmIChmX3pvb20udmFsdWUgPT0gIjAuOCIgfHwgZl96b29tLnZhbHVlID09ICI4MCUiKSB6ID0gMC44OworICBlbHNlIGlmIChmX3pvb20udmFsdWUgPT0gIjEuMiIgfHwgZl96b29tLnZhbHVlID09ICIxMjAlIikgeiA9IDEuMjsKKyAgZWxzZSBpZiAoZl96b29tLnZhbHVlID09ICIxLjUiIHx8IGZfem9vbS52YWx1ZSA9PSAiMTUwJSIpIHogPSAxLjU7CisKKyAgcGFyYW1bImZfem9vbSJdID0gejsKKworICBwYXJhbVsiZl9taWRpIl0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9taWRpIikuY2hlY2tlZDsKKworICBwYXJhbVsiZl9hZmZjb2RlIl0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9hZmZjb2RlIikuY2hlY2tlZDsKKyAgcGFyYW1bImZfYXBwbGV0Il0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9hcHBsZXQiKS5jaGVja2VkOworCisgIF9fZGxnX2Nsb3NlKHBhcmFtKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBvbkNhbmNlbCgpIHsKKyAgX19kbGdfY2xvc2UobnVsbCk7CisgIHJldHVybiBmYWxzZTsKKworfQorCisKK2Z1bmN0aW9uIG1lc3NhZ2UoKXsKK2lmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9hcHBsZXQiKS5jaGVja2VkKQorICBpZiAoISgobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm1zaWUiKSAhPSAtMSkKKyAgICAmJiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm9wZXJhIikgPT0gLTEpKSkgeworICAgIGFsZXJ0KEhUTUxBcmVhLl9sYygiV2l0aCBNb3ppbGxhLCB0aGUgYXBwbGV0IHdpbGwgbm90IGJlIHZpc2libGUgaW4gZWRpdG9yLCBidXQgb25seSBpbiBXZWIgcGFnZSBhZnRlciBzdWJtaXR0aW5nLiIsICdOb3RlU2VydmVyJykpOworICB9Cit9CisKK2Z1bmN0aW9uIG9uUHJldmlldygpIHsKKworICB2YXIgZl9jb2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfY29kZSIpOworICB2YXIgZl96b29tID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfem9vbSIpOworCit2YXIgeiA9ICIxLjAiOworaWYgKGZfem9vbS52YWx1ZSA9PSAiMS4wIiB8fCBmX3pvb20udmFsdWUgPT0gIjEwMCUiKSB6ID0gMS4wOworZWxzZSBpZiAoZl96b29tLnZhbHVlID09ICIwLjgiIHx8IGZfem9vbS52YWx1ZSA9PSAiODAlIikgeiA9IDAuODsKK2Vsc2UgaWYgKGZfem9vbS52YWx1ZSA9PSAiMS4yIiB8fCBmX3pvb20udmFsdWUgPT0gIjEyMCUiKSB6ID0gMS4yOworZWxzZSBpZiAoZl96b29tLnZhbHVlID09ICIxLjUiIHx8IGZfem9vbS52YWx1ZSA9PSAiMTUwJSIpIHogPSAxLjU7CisKKyAgdmFyIHVybCA9IEdldEdJRlVSTChmX2NvZGUudmFsdWUseiwiIik7CisgIGlmICghZl9jb2RlLnZhbHVlKSB7CisgICAgYWxlcnQoIllvdSBoYXZlIHRvIGVudGVyIEdVSURPIGNvZGUiKTsKKyAgICBmX2NvZGUuZm9jdXMoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgfQorCisKKyAgd2luZG93LmlwcmV2aWV3LmxvY2F0aW9uLnJlcGxhY2UodXJsKTsKKworICByZXR1cm4gZmFsc2U7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBjbGFzcz0iRGlhbG9nIiBvbmxvYWQ9IkluaXQoKSI+Cis8ZGl2IGNsYXNzPSJ0aXRsZSI+SW5zZXJ0IEdVSURPIE11c2ljIE5vdGF0aW9uPC9kaXY+CisKKzxzcGFuPkd1aWRvIGNvZGU8L3NwYW4+IDoKKyAgPGJyPjx0ZXh0YXJlYSByb3dzPSI3IiBpZD0iZl9jb2RlIiBjb2xzPSI1NSI+PC90ZXh0YXJlYT48YnI+CisKKzxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KKzxmaWVsZHNldCBzdHlsZT0iZmxvYXQ6IGxlZnQ7IG1hcmdpbi1sZWZ0OiA1cHg7Ij4KKzxsZWdlbmQ+T3B0aW9uczwvbGVnZW5kPgorICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJmX21pZGkiIHZhbHVlPSJPTiI+IDxzcGFuPkFkZCBNSURJIGxpbmsgdG8gYWxsb3cgc3R1ZGVudHMgdG8gaGVhciB0aGUgbXVzaWM8L3NwYW4+CisgIDxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KKyAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iZl9hZmZjb2RlIiB2YWx1ZT0iT04iPiA8c3Bhbj5BZGQgR1VJRE8gQ29kZSBpbiBhIHRleHRib3ggb24gdGhlIHBhZ2U8L3NwYW4+CisgIDxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KKzwvZmllbGRzZXQ+CisKKzxmaWVsZHNldCBzdHlsZT0iZmxvYXQ6IHJpZ2h0OyBtYXJnaW4tbGVmdDogNXB4OyI+Cis8bGVnZW5kPkZvcm1hdDwvbGVnZW5kPgorICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJmX2FwcGxldCIgdmFsdWU9Ik9OIiBvbmNsaWNrPSJtZXNzYWdlKCk7IiA+IDxzcGFuPkltYWdlIGluIGFwcGxldDwvc3Bhbj4KKyAgPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgorICA8c3Bhbj5ab29tPC9zcGFuPiA6CisgIDxzZWxlY3Qgc2l6ZT0iMSIgaWQ9ImZfem9vbSIgdGl0bGU9Ilpvb20gOiI+CisgICAgPG9wdGlvbiB2YWx1ZT0iMC44Ij44MCU8L29wdGlvbj4KKyAgICA8b3B0aW9uIHNlbGVjdGVkPSJzZWxlY3RlZCI+MTAwJTwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjEuMiI+MTIwJTwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjEuNSI+MTUwJTwvb3B0aW9uPgorICA8L3NlbGVjdD4KKyAgPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgorPC9maWVsZHNldD4KKworPGJyIGNsZWFyPSJhbGwiIC8+CisKKzx0YWJsZSB3aWR0aD0iMTAwJSIgc3R5bGU9Im1hcmdpbi1ib3R0b206IDAuMmVtIj4KKyA8dHI+CisgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IGJvdHRvbTsiPgorICAgIDxzcGFuPkltYWdlIFByZXZpZXc8L3NwYW4+OjxiciAvPgorICAgIDxpZnJhbWUgbmFtZT0iaXByZXZpZXciIGlkPSJpcHJldmlldyIgZnJhbWVib3JkZXI9IjAiIHN0eWxlPSJib3JkZXIgOiAxcHggc29saWQgZ3JheTsiIGhlaWdodD0iMjAwIiB3aWR0aD0iMzUwIiBzcmM9IiI+PC9pZnJhbWU+CisgIDwvdGQ+CisKKyAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOyIgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0Ij4KKyAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbmFtZT0icHJldmlldyIgb25jbGljaz0icmV0dXJuIG9uUHJldmlldygpOyIKKyAgICAgIHRpdGxlPSJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciPlByZXZpZXc8L2J1dHRvbj48YnI+CisgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG5hbWU9Im9rIiBvbmNsaWNrPSJyZXR1cm4gb25PSygpOyI+PHNwYW4+T0s8L3NwYW4+PC9idXR0b24+PGJyPgorICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBuYW1lPSJjYW5jZWwiIG9uY2xpY2s9InJldHVybiBvbkNhbmNlbCgpOyI+PHNwYW4+Q2FuY2VsPC9zcGFuPjwvYnV0dG9uPgorICA8L3RkPgorIDwvdHI+CisgPHRyPgorICA8dGQgY29sc3Bhbj0iMiI+CisgICA8cD5TYW1wbGUgR3VpZG8gQ29kZXM6PC9wPgorICAgPHA+PGEgaHJlZj0iaHR0cDovL3BpYW5vLWdvLmNoZXoudGlzY2FsaS5mci9yYWNobWFuaW5vZmYuZ21uIiBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYsJ19ibGFuaycpO3JldHVybiBmYWxzZTsiPkNvZGUgU2FtcGxlIDE8L2E+IG9yIHR5cGUgWyBkbyByZSBtaSBmYSBzb2wgbGEgc2kgXSB8IDxhIGhyZWY9Imh0dHA6Ly93d3cuaW5mb3JtYXRpay50dS1kYXJtc3RhZHQuZGUvQUZTL1NBTElFUkkvZ3VpZG8vZGVtb3MuaHRtbCIgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCdfYmxhbmsnKTtyZXR1cm4gZmFsc2U7Ij5Db2RlIFNhbXBsZSAyPC9hPjwvcD4KKyAgIDxwPlJlc291cmNlczogPC9wPgorICAgPHA+VGhlIEd1aWRvIFNwZWNpZmljYXRpb24gKDxhIGhyZWY9Imh0dHA6Ly9waWFuby1nby5jaGV6LnRpc2NhbGkuZnIvR1VJRE8tTXVzaWMlMjBOb3RhdGlvbiUyMEZvcm1hdC5wZGYiIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZiwnX2JsYW5rJyk7cmV0dXJuIGZhbHNlOyI+UERGKTwvYT4gfCA8YSBocmVmPSJodHRwOi8vd3d3LnNhbGllcmkub3JnL2d1aWRvL2RvYy5odG1sIiBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYsJ19ibGFuaycpO3JldHVybiBmYWxzZTsiPihIVE1MKTwvYT48L3A+CisgICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnNhbGllcmkub3JnL2d1aWRvLyIgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCdfYmxhbmsnKTtyZXR1cm4gZmFsc2U7Ij5HVUlETyBNdXNpYyBOb3RhdGlvbiBGb3JtYXQgU2l0ZTwvYT4gfCA8YSBocmVmPSJodHRwOi8vd3d3Lm5vdGVzZXJ2ZXIub3JnLyIgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCdfYmxhbmsnKTtyZXR1cm4gZmFsc2U7Ij5HdWlkbyBOb3RlIFNlcnZlcjwvYT4gfCA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2d1aWRvbGliLyIgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCdfYmxhbmsnKTtyZXR1cm4gZmFsc2U7Ij5Tb3VyY2VGb3JnZSBIb21lcGFnZTwvYT48L3A+CisgIDwvdGQ+CisgPC90cj4KKzwvdGFibGU+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0ZpeGVkL1BTRml4ZWQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTRml4ZWQvUFNGaXhlZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDQxY2YxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0ZpeGVkL1BTRml4ZWQuanMKQEAgLTAsMCArMSwxNDcgQEAKKy8qKg0KKyAqIFBTRml4ZWQgUFNGaXhlZC5qcyBmaWxlLg0KKyAqIFRoaXMgcGx1Z2luIGlzIGEgZmFrZSBwZXJzaXN0ZW50IHN0b3JhZ2UgYmFja2VkLiAgSXQgaXMgY29uZmlndXJlZCB3aXRoIGENCisgKiBmaXhlZCBsaXN0IG9mIHN0b3JlZCBvYmplY3RzIGFuZCBwcmVzZW50cyB0aGVtIHRvIHRoZSB1c2VyIGZvciBpbnNlcnRpb24uDQorICogQSBzYW1wbGUgY29uZmlnIGlzIGJlbG93Og0KKyAqDQorICogUFNGaXhlZC5jb25maWcgPSB7DQorICogICAgICd4aW5oYS5wbmcnOiB7DQorICogICAgICAgICAkdHlwZTogJ2ltYWdlJywNCisgKiAgICAgICAgIFVSTDogJ2h0dHA6Ly90cmFjLnhpbmhhLm9yZy9jaHJvbWUvY29tbW9uL3RyYWNfYmFubmVyLnBuZycNCisgKiAgICAgfSwNCisgKiAgICAgJ2Jyb3dzZXInOiB7DQorICogICAgICAgICAkdHlwZTogJ2ZvbGRlcicsDQorICogICAgICAgICAnZmlyZWZveC5wbmcnOiB7DQorICogICAgICAgICAgICAgJHR5cGU6ICdpbWFnZScsDQorICogICAgICAgICAgICAgVVJMOiAnaHR0cDovL3d3dy5tb3ppbGxhLmNvbS9pbWcvdGlnbmlzaC9maXJlZm94L3ZzLWZpcmVmb3gtbG9nby5wbmcnDQorICogICAgICAgICB9DQorICogICAgIH0NCisgKiB9DQorICovDQorKGZ1bmN0aW9uKCkgew0KK3ZhciBQU0ZpeGVkID0gd2luZG93LlBTRml4ZWQgPSBmdW5jdGlvbiBQU0ZpeGVkKGVkaXRvcikgew0KKyAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7DQorfQ0KKw0KK1BTRml4ZWQuX3BsdWdpbkluZm8gPSB7DQorICAgIG5hbWUgICAgICAgICAgOiAiUFNGaXhlZCIsDQorICAgIHZlcnNpb24gICAgICAgOiAiMi4wIiwNCisgICAgZGV2ZWxvcGVyICAgICA6ICJEb3VnbGFzIE1heWxlIiwNCisgICAgZGV2ZWxvcGVyX3VybCA6ICJodHRwOi8veGluaGEub3JnIiwNCisgICAgbGljZW5zZSAgICAgICA6ICJCU0QiDQorfTsNCisNCitQU0ZpeGVkLnByb3RvdHlwZS5vbkdlbmVyYXRlT25jZSA9IGZ1bmN0aW9uICgpIHsNCisgIC8vIFdlIHVzZSBfcHJlcGFyZURpYWxvZyB0byBhc3luY2hyb25vdXNseSBsb2FkIHRoZSBkaWFsb2cgbWFya3VwIGFuZCB0aGVuDQorICAvLyBwZXJmb3JtIG5lY2Vzc2FyeSBwcm9jZXNzaW5nLg0KKyAgdGhpcy5fcmVnaXN0ZXJCYWNrZW5kKCk7DQorfTsNCisNCitQU0ZpeGVkLnByb3RvdHlwZS5fcmVnaXN0ZXJCYWNrZW5kID0gZnVuY3Rpb24odGltZVdhaXRlZCkgew0KKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOw0KKyAgdmFyIHNlbGYgPSB0aGlzOw0KKw0KKyAgaWYgKCF0aW1lV2FpdGVkKSB7DQorICAgIHRpbWVXYWl0ZWQgPSAwOw0KKyAgfQ0KKw0KKyAgLy8gUmV0cnkgb3ZlciBhIHBlcmlvZCBvZiB0ZW4gc2Vjb25kcyB0byByZWdpc3Rlci4gIFdlIGJhY2sgb2ZmIGV4cG9uZW50aWFsbHkNCisgIC8vIHRvIGxpbWl0IHJlc291Y2UgdXNhZ2UgaW4gdGhlIGNhc2Ugb2YgbWlzY29uZmlndXJhdGlvbi4NCisgIHZhciByZWdpc3RlclRpbWVvdXQgPSAxMDAwMDsNCisNCisgIGlmICh0aW1lV2FpdGVkID4gcmVnaXN0ZXJUaW1lb3V0KSB7DQorICAgIC8vIFRoaXMgaXMgbW9zdCBsaWtlbHkgYSBjb25maWd1cmF0aW9uIGVycm9yLiAgV2UncmUgbG9hZGVkIGFuZA0KKyAgICAvLyBQZXJzaXN0ZW50U3RvcmFnZSBpcyBub3QuDQorICAgIHJldHVybjsNCisgIH0NCisNCisgIGlmICghZWRpdG9yLnBsdWdpbnNbJ1BlcnNpc3RlbnRTdG9yYWdlJ10gfHwNCisgICAgICAhZWRpdG9yLnBsdWdpbnNbJ1BlcnNpc3RlbnRTdG9yYWdlJ10uaW5zdGFuY2UgfHwNCisgICAgICAhZWRpdG9yLnBsdWdpbnNbJ1BlcnNpc3RlbnRTdG9yYWdlJ10uaW5zdGFuY2UucmVhZHkpIHsNCisNCisgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2VsZi5fcmVnaXN0ZXJCYWNrZW5kKHRpbWVXYWl0ZWQgPyB0aW1lV2FpdGVkKjIgOiA1MCk7fSwgdGltZVdhaXRlZCA/IHRpbWVXYWl0ZWQgOiA1MCk7DQorICAgIHJldHVybjsNCisgIH0NCisgIGVkaXRvci5wbHVnaW5zWydQZXJzaXN0ZW50U3RvcmFnZSddLmluc3RhbmNlLnJlZ2lzdGVyQmFja2VuZCgnUFNGaXhlZCcsIHRoaXMpOw0KK30NCisNCitQU0ZpeGVkLnByb3RvdHlwZS5sb2FkRGF0YSA9IGZ1bmN0aW9uIChhc3luY0NhbGxiYWNrKSB7DQorICAvLyBXZSBkb24ndCBleHBlY3QgdGhlIHVzZXIgdG8gc2V0IHRoZSB0eXBlIG9uIHRoZSByb290IGZvbGRlciwgc28gd2Ugc2V0IGl0DQorICAvLyBvdXJzZWx2ZXMuDQorICBpZiAoIXRoaXMuY29uZmlnLiR0eXBlKSB7DQorICAgIHRoaXMuY29uZmlnLiR0eXBlID0gJ2ZvbGRlcic7DQorICB9DQorICBhc3luY0NhbGxiYWNrKHRoaXMuY29uZmlnKTsNCit9DQorDQordmFyIHRyZWVSZWN1cnNlID0gZnVuY3Rpb24gdHJlZVJlY3Vyc2UodHJlZSwgY2FsbGJhY2ssIHJvb3QpIHsNCisgIGlmICh0eXBlb2Ygcm9vdCA9PSAndW5kZWZpbmVkJykgew0KKyAgICByb290ID0gJy8nOw0KKyAgICBjYWxsYmFjaygnLycsICcnLCB0cmVlKTsNCisgIH0NCisNCisgIGZvciAodmFyIGtleSBpbiB0cmVlKSB7DQorICAgIGNhbGxiYWNrKHJvb3QsIGtleSwgdHJlZVtrZXldKTsNCisNCisgICAgaWYgKHRyZWVba2V5XS4kdHlwZSA9PSAnZm9sZGVyJykgew0KKyAgICAgIHRyZWVSZWN1cnNlKHRyZWVba2V5XSwgY2FsbGJhY2ssIHJvb3QgKyBrZXkgKyAnLycpOw0KKyAgICB9DQorICB9DQorfTsNCisNCitQU0ZpeGVkLnByb3RvdHlwZS5nZXRGaWx0ZXJzID0gZnVuY3Rpb24oZGlyVHJlZSkgew0KKyAgdmFyIGZpbHRlcnMgPSBbXTsNCisNCisgIHRyZWVSZWN1cnNlKGRpclRyZWUsIGZ1bmN0aW9uKHBhdGgsIGtleSwgdmFsdWUpIHsNCisgICAgICBpZiAodmFsdWUuJHR5cGUgIT0gJ2ZvbGRlcicpIHsNCisgICAgICAgIHJldHVybjsNCisgICAgICB9DQorDQorICAgICAgdmFyIGZpbGVQYXRoID0ga2V5Lmxlbmd0aCA/IHBhdGggKyBrZXkgKyAnLycgOiBwYXRoOw0KKyAgICAgIGZpbHRlcnMucHVzaCh7DQorICAgICAgICB2YWx1ZTogZmlsZVBhdGgsDQorICAgICAgICBkaXNwbGF5OiBmaWxlUGF0aA0KKyAgICAgIH0pOw0KKyAgfSk7DQorDQorICByZXR1cm4gZmlsdGVyczsNCit9DQorDQorUFNGaXhlZC5wcm90b3R5cGUuZ2V0TWV0YWRhdGEgPSBmdW5jdGlvbihkaXJUcmVlLCBmaWx0ZXJQYXRoKSB7DQorICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7DQorICB2YXIgc2VsZiA9IHRoaXM7DQorDQorICB2YXIgbWV0YWRhdGEgPSBbXTsNCisNCisgIHRyZWVSZWN1cnNlKGRpclRyZWUsIGZ1bmN0aW9uKHBhdGgsIGtleSwgdmFsdWUpIHsNCisgICAgaWYgKCF2YWx1ZS4kdHlwZSB8fCAha2V5KSB7DQorICAgICAgLy8gVGhpcyBpcyBhIGJ1aWx0aW4gcHJvcGVydHkgb2Ygb2JqZWN0cywgbm90IG9uZSByZXR1cm5lZCBieSB0aGUNCisgICAgICAvLyBiYWNrZW5kLg0KKyAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBpZiAocGF0aCAhPSBmaWx0ZXJQYXRoKSB7DQorICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIGlmICh2YWx1ZS4kdHlwZSA9PSAnZm9sZGVyJykgew0KKyAgICAgIG1ldGFkYXRhLnB1c2goew0KKyAgICAgICAgVVJMOiBzZWxmLmVkaXRvci5pbWdVUkwoJ2ZvbGRlci5naWYnLCAnUGVyc2lzdGVudFN0b3JhZ2UnKSwNCisgICAgICAgIG5hbWU6IGtleSwNCisgICAgICAgIGtleTogcGF0aCArIGtleSwNCisgICAgICAgICR0eXBlOiB2YWx1ZS4kdHlwZQ0KKyAgICAgIH0pOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgIG1ldGFkYXRhLnB1c2goew0KKyAgICAgICAgVVJMOiB2YWx1ZS5VUkwsDQorICAgICAgICBuYW1lOiBrZXksDQorICAgICAgICBrZXk6IHBhdGggKyBrZXksDQorICAgICAgICAkdHlwZTogdmFsdWUuJHR5cGUNCisgICAgICB9KTsNCisgICAgfQ0KKyAgfSk7DQorDQorICByZXR1cm4gbWV0YWRhdGE7DQorfQ0KKw0KK30pKCk7DQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL1BTTG9jYWwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvUFNMb2NhbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWViZTUzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL1BTTG9jYWwuanMKQEAgLTAsMCArMSwzNTUgQEAKKy8qKg0KKyAqIFBTTG9jYWwgUFNMb2NhbC5qcyBmaWxlLg0KKyAqIFRoaXMgcGx1Z2luIGlzIGEgR2VhcnMgYmFzZWQgbG9jYWwgcGVyc2lzdGVudCBzdG9yYWdlIGJhY2tlbmQuDQorICovDQorKGZ1bmN0aW9uKCkgew0KK3ZhciBQU0xvY2FsID0gd2luZG93LlBTTG9jYWwgPSBmdW5jdGlvbiBQU0xvY2FsKGVkaXRvcikgew0KKyAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7DQorDQorICB0aGlzLmNvbmZpZyA9IHsNCisgICAgY2FwYWJpbGl0aWVzOiB7DQorICAgICAgZGlyZWN0b3J5X29wZXJhdGlvbnM6IHRydWUsDQorICAgICAgZmlsZV9vcGVyYXRpb25zOiB0cnVlLA0KKyAgICAgIGltYWdlX29wZXJhdGlvbnM6IGZhbHNlLA0KKyAgICAgIHVwbG9hZF9vcGVyYXRpb25zOiB0cnVlLA0KKyAgICAgIGltcG9ydF9vcGVyYXRpb25zOiBmYWxzZSwNCisgICAgICB1c2VyX3B1Ymxpc2g6IGZhbHNlLA0KKyAgICAgIHNoYXJlZF9wdWJsaXNoOiBmYWxzZSwNCisgICAgICB1c2VyX3N0b3JhZ2U6IHRydWUNCisgICAgfSwNCisgICAgZGlzcGxheU5hbWU6ICdMb2NhbCcNCisgIH0NCit9DQorDQorUFNMb2NhbC5fcGx1Z2luSW5mbyA9IHsNCisgICAgbmFtZSAgICAgICAgICA6ICJQU0xvY2FsIiwNCisgICAgdmVyc2lvbiAgICAgICA6ICIyLjAiLA0KKyAgICBkZXZlbG9wZXIgICAgIDogIkRvdWdsYXMgTWF5bGUiLA0KKyAgICBkZXZlbG9wZXJfdXJsIDogImh0dHA6Ly94aW5oYS5vcmciLA0KKyAgICBsaWNlbnNlICAgICAgIDogIkJTRCINCit9Ow0KKw0KK1BTTG9jYWwucHJvdG90eXBlLm9uR2VuZXJhdGVPbmNlID0gZnVuY3Rpb24gKCkgew0KKyAgLy8gV2UgdXNlIF9wcmVwYXJlQmFja2VuZCB0byBhc3luY2hyb25vdXNseSBsb2FkIHRoZSBHZWFycyBiYWNrZW5kLg0KKyAgdGhpcy5fcHJlcGFyZUJhY2tlbmQoKTsNCit9Ow0KKw0KK1BTTG9jYWwucHJvdG90eXBlLl9zaG93R2VhcnNCdXR0b24gPSBmdW5jdGlvbigpIHsNCisgIHZhciBzZWxmID0gdGhpczsNCisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsNCisNCisgIGVkaXRvci5jb25maWcucmVnaXN0ZXJCdXR0b24oew0KKyAgICAgIGlkICAgICAgIDogJ2xvY2Fsc3RvcmFnZScsDQorICAgICAgdG9vbHRpcCAgOiBYaW5oYS5fbGMoICdMZWFybiBBYm91dCBMb2NhbCBTdG9yYWdlJywgJ1BTTG9jYWwnICksDQorICAgICAgaW1hZ2UgICAgOiBbX2VkaXRvcl91cmwgKyBlZGl0b3IuY29uZmlnLmltZ1VSTCArICdlZF9idXR0b25zX21haW4ucG5nJywyLDhdLA0KKyAgICAgIHRleHRNb2RlIDogdHJ1ZSwNCisgICAgICBhY3Rpb24gICA6IGZ1bmN0aW9uKCkgeyBzZWxmLmxlYXJuRGlhbG9nKCk7IH0NCisgICAgfQ0KKyAgKTsNCisgIGVkaXRvci5jb25maWcuYWRkVG9vbGJhckVsZW1lbnQoJ2xvY2Fsc3RvcmFnZScsICdmdWxsc2NyZWVuJywgMSk7DQorDQorICAvLyBTaW5jZSB0aGlzIGlzIGFmdGVyIHRoZSBlZGl0b3IgbG9hZCwgd2UgaGF2ZSB0byB0cmlnZ2VyIGFuIHVkYXRlIG1hbnVhbGx5Li4uDQorICBlZGl0b3IuX3JlYnVpbGRUb29sYmFyKCk7DQorfQ0KKw0KK1BTTG9jYWwucHJvdG90eXBlLl9wcmVwYXJlQmFja2VuZCA9IGZ1bmN0aW9uKCkgew0KKyAgdmFyIHNlbGYgPSB0aGlzOw0KKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOw0KKw0KKyAgaWYgKCF0aGlzLmdlYXJzX2luaXQpIHsNCisgICAgdGhpcy5nZWFyc19pbml0ID0gdHJ1ZTsNCisgICAgWGluaGEuX2xvYWRiYWNrKFhpbmhhLmdldFBsdWdpbkRpcigiUFNMb2NhbCIpICsgIi9nZWFyc19pbml0LmpzIiwNCisgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7IA0KKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3ByZXBhcmVCYWNrZW5kKCk7DQorICAgICAgICAgICAgICAgICAgIH0pOw0KKyAgICByZXR1cm47DQorICB9DQorDQorICBpZiAoIXdpbmRvdy5nb29nbGUgfHwgIWdvb2dsZS5nZWFycykgew0KKyAgICAvLyBObyBnZWFycywgc28gbm8gbmVlZCB0byByZWdpc3Rlci4gIFdlJ2xsIHJlZ2lzdGVyIGEgYnV0dG9uLCBob3dldmVyLCB0bw0KKyAgICAvLyBlbmFibGUgdXNlcnMgdG8gbGVhcm4gYWJvdXQgdGhlIHN1cHBvcnQgd2Ugb2ZmZXIuDQorICAgIHRoaXMuX3Nob3dHZWFyc0J1dHRvbigpOw0KKyAgICByZXR1cm47DQorICB9DQorDQorICBpZiAoIWdvb2dsZS5nZWFycy5mYWN0b3J5Lmhhc1Blcm1pc3Npb24pIHsNCisgICAgaWYgKCFnb29nbGUuZ2VhcnMuZmFjdG9yeS5nZXRQZXJtaXNzaW9uKCdYaW5oYScsIGVkaXRvci5pbWdVUkwoJy9pbWFnZXMveGluaGEtc21hbGwtaWNvbi5naWYnKSwgWGluaGEuX2xjKCAnRW5hYmxlIEdlYXJzIGluIG9yZGVyIHRvIHVzZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlIGFuZCBjb25maWd1cmF0aW9uLicsICdQU0xvY2FsJyApKSkgew0KKyAgICAgIC8vIFRoZSB1c2VyIGhhcyBkZW5pZWQgYWNjZXNzIHRvIEdlYXJzLiAgV2UnbGwgZ2l2ZSB0aGVtIGEgVUkgdG8gYWxsb3cNCisgICAgICAvLyB0aGVtIHRvIGNoYW5nZSB0aGVpciBtaW5kLg0KKyAgICAgIHRoaXMuX3Nob3dHZWFyc0J1dHRvbigpOw0KKyAgICAgIHJldHVybjsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgdGhpcy53b3JrZXJQb29sID0gZ29vZ2xlLmdlYXJzLmZhY3RvcnkuY3JlYXRlKCdiZXRhLndvcmtlcnBvb2wnLCAnMS4wJyk7ICANCisNCisgIHRoaXMucmVtb3RlU3RvcmFnZVdvcmtlciA9IHRoaXMud29ya2VyUG9vbC5jcmVhdGVXb3JrZXJGcm9tVXJsKCJodHRwOi8veGluaGFkb2NzLm9yZy93b3JrZXIuanMiKTsNCisNCisgIHRoaXMuX3JlZ2lzdGVyQmFja2VuZCgpOw0KK30NCisNCitQU0xvY2FsLnByb3RvdHlwZS5sZWFybkRpYWxvZyA9IGZ1bmN0aW9uKHRpbWVXYWl0ZWQpIHsNCisgIHZhciBzZWxmID0gdGhpczsNCisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsNCisNCisgIGlmICghdGhpcy5odG1sKSB7DQorICAgIFhpbmhhLl9nZXRiYWNrKFhpbmhhLmdldFBsdWdpbkRpcigiUFNMb2NhbCIpICsgIi9kaWFsb2cuaHRtbCIsDQorICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGdldGJhY2spIHsgDQorICAgICAgICAgICAgICAgICAgICAgc2VsZi5odG1sID0gZ2V0YmFjazsNCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmxlYXJuRGlhbG9nKCk7DQorICAgICAgICAgICAgICAgICAgIH0pOw0KKyAgICByZXR1cm47DQorICB9DQorDQorICBpZiAodGhpcy5kaWFsb2cpIHsNCisgICAgdGhpcy5kaWFsb2cuc2hvdygpOw0KKyAgICByZXR1cm47DQorICB9DQorDQorICB0aGlzLmRpYWxvZyA9IG5ldyBYaW5oYS5EaWFsb2coZWRpdG9yLCB0aGlzLmh0bWwsICJQZXJzaXN0ZW50U3RvcmFnZSIsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt3aWR0aDogNzAwLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZU9uRXNjYXBlOiB0cnVlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlcmVkOiB0cnVlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbDogdHJ1ZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KKw0KKyAgdmFyIGxpbmsgPSB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgnR2VhcnNMaW5rJyk7DQorDQorICAvLyBUYWNrIG9uIG91ciBVUkwgc28gdGhhdCBHb29nbGUgd2lsbCByZXR1cm4gaGVyZSBhZnRlciBpbnN0YWxsYXRpb24uDQorICBsaW5rLmhyZWYgKz0gbG9jYXRpb24uaHJlZjsNCisNCisgIHZhciBidXR0b24gPSB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgiY29uZmlybSIpOw0KKyAgaWYgKHdpbmRvdy5nb29nbGUgJiYgZ29vZ2xlLmdlYXJzKSB7DQorICAgIFhpbmhhLl9hZGRDbGFzcyh0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgnSW5zdGFsbFRleHQnKSwgJ2hpZGRlbicpOw0KKyAgICAvLyBUaGUgdXNlciBoYXMgZ2VhcnMgaW5zdGFsbGVkLCBidXQgaGFzIGRlbmllZCB1cyBhY2Nlc3MgdG8gaXQsIHNvIHdlJ2xsDQorICAgIC8vIGdpdmUgdGhlbSB0aGUgb3B0aW9uIHRvIGNoYW5nZSB0aGVpciBtaW5kLg0KKyAgICBidXR0b24udmFsdWUgPSBYaW5oYS5fbGMoJ0VuYWJsZScsICdQU0xvY2FsJyk7DQorDQorICAgIGJ1dHRvbi5vbmNsaWNrID0gZnVuY3Rpb24oKSB7DQorICAgICAgLy8gVGhlIHVzZXIgZ2F2ZSB1cyBwZXJtaXNzaW9uLCBzbyB3ZSdsbCByZWxvYWQgdGhlIHBhZ2UuDQorICAgICAgaWYgKGNvbmZpcm0oWGluaGEuX2xjKCdUaGlzIHdpbGwgcmVsb2FkIHRoZSBwYWdlLCBjYXVzaW5nIHlvdSB0byBsb3NlIGFueSB1bnNhdmVkIHdvcmsuICBQcmVzcyAiT0siIHRvIHJlbG9hZC4nLCAnUFNMb2NhbCcgKSkpIHsNCisgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQodHJ1ZSk7DQorICAgICAgfQ0KKyAgICB9DQorICB9IGVsc2Ugew0KKyAgICBYaW5oYS5fYWRkQ2xhc3ModGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ0VuYWJsZVRleHQnKSwgJ2hpZGRlbicpOw0KKyAgICAvLyBHZWFycyBpc24ndCBpbnN0YWxsZWQsIHNvIHdlJ2xsIGJ1aWxkIHRoZSBkaWFsb2cgdG8gcHJvbXB0IGluc3RhbGxhdGlvbi4NCisgICAgYnV0dG9uLnZhbHVlID0gWGluaGEuX2xjKCdJbnN0YWxsJywgJ1BTTG9jYWwnKTsNCisNCisgICAgYnV0dG9uLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsNCisgICAgICBsb2NhdGlvbi5ocmVmID0gbGluay5ocmVmOw0KKyAgICB9DQorICB9DQorDQorICB2YXIgY2FuY2VsID0gdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ2NhbmNlbCcpOw0KKyAgY2FuY2VsLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsNCisgICAgc2VsZi5kaWFsb2cuaGlkZSgpOw0KKyAgfQ0KKw0KKyAgdGhpcy5kaWFsb2cuc2hvdygpOw0KK30NCisNCitQU0xvY2FsLnByb3RvdHlwZS5fcmVnaXN0ZXJCYWNrZW5kID0gZnVuY3Rpb24odGltZVdhaXRlZCkgew0KKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOw0KKyAgdmFyIHNlbGYgPSB0aGlzOw0KKw0KKyAgaWYgKCF0aW1lV2FpdGVkKSB7DQorICAgIHRpbWVXYWl0ZWQgPSAwOw0KKyAgfQ0KKw0KKyAgLy8gUmV0cnkgb3ZlciBhIHBlcmlvZCBvZiB0ZW4gc2Vjb25kcyB0byByZWdpc3Rlci4gIFdlIGJhY2sgb2ZmIGV4cG9uZW50aWFsbHkNCisgIC8vIHRvIGxpbWl0IHJlc291Y2UgdXNhZ2UgaW4gdGhlIGNhc2Ugb2YgbWlzY29uZmlndXJhdGlvbi4NCisgIHZhciByZWdpc3RlclRpbWVvdXQgPSAxMDAwMDsNCisNCisgIGlmICh0aW1lV2FpdGVkID4gcmVnaXN0ZXJUaW1lb3V0KSB7DQorICAgIC8vIFRoaXMgaXMgbW9zdCBsaWtlbHkgYSBjb25maWd1cmF0aW9uIGVycm9yLiAgV2UncmUgbG9hZGVkIGFuZA0KKyAgICAvLyBQZXJzaXN0ZW50U3RvcmFnZSBpcyBub3QuDQorICAgIHJldHVybjsNCisgIH0NCisNCisgIGlmICghZWRpdG9yLnBsdWdpbnNbJ1BlcnNpc3RlbnRTdG9yYWdlJ10gfHwNCisgICAgICAhZWRpdG9yLnBsdWdpbnNbJ1BlcnNpc3RlbnRTdG9yYWdlJ10uaW5zdGFuY2UgfHwNCisgICAgICAhZWRpdG9yLnBsdWdpbnNbJ1BlcnNpc3RlbnRTdG9yYWdlJ10uaW5zdGFuY2UucmVhZHkpIHsNCisNCisgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2VsZi5fcmVnaXN0ZXJCYWNrZW5kKHRpbWVXYWl0ZWQgPyB0aW1lV2FpdGVkKjIgOiA1MCk7fSwgdGltZVdhaXRlZCA/IHRpbWVXYWl0ZWQgOiA1MCk7DQorICAgIHJldHVybjsNCisgIH0NCisgIHZhciBQUyA9IGVkaXRvci5wbHVnaW5zWydQZXJzaXN0ZW50U3RvcmFnZSddLmluc3RhbmNlOw0KKyAgdmFyIHNlbGYgPSB0aGlzOw0KKyAgDQorICB0aGlzLmNvbmZpZy50aHVtYlVSTCA9IHRoaXMuZWRpdG9yLmltZ1VSTCgnaW1hZ2VzL3RhbmdvLzMyeDMyL3BsYWNlcy9mb2xkZXIucG5nJyk7DQorICB0aGlzLmxvYWREb2N1bWVudCh7VVJMOicnLCBuYW1lOidjb25maWcuanMnLCBrZXk6Jy9jb25maWcuanMnfSwgZnVuY3Rpb24oanNvbikgew0KKyAgICAgICAgICAgICAgICAgICB2YXIgdXNlcmNvbmZpZyA9IGpzb24gPyBldmFsKCcoJyArIGpzb24gKyAnKScpIDogZmFsc2U7DQorICAgICAgICAgICAgICAgICAgIFBTLnJlZ2lzdGVyQmFja2VuZCgnUFNMb2NhbCcsIHNlbGYsIHNlbGYuY29uZmlnLCB1c2VyY29uZmlnKTsNCisgICAgICAgICAgICAgICAgICAgfSk7DQorfQ0KKw0KK1BTTG9jYWwucHJvdG90eXBlLmxvYWREb2N1bWVudCA9IGZ1bmN0aW9uKGVudHJ5LCBhc3luY0NhbGxiYWNrKSB7DQorDQorICB0aGlzLndvcmtlclBvb2wub25tZXNzYWdlID0gZnVuY3Rpb24oYSwgYiwgbWVzc2FnZSkgew0KKyAgICBpZiAoIW1lc3NhZ2UuYm9keSB8fCAhbWVzc2FnZS5ib2R5LmF1dGhvcml6ZWQpIHsNCisgICAgICAvLyBGYWlsDQorICAgICAgYXN5bmNDYWxsYmFjaygnJyk7DQorICAgIH0NCisNCisgICAgaWYgKG1lc3NhZ2UuYm9keS5yZXNwb25zZSkgew0KKyAgICAgIGFzeW5jQ2FsbGJhY2sobWVzc2FnZS5ib2R5LnJlc3BvbnNlKTsNCisgICAgfSBlbHNlIGlmIChlbnRyeS5VUkwpIHsNCisgICAgICBYaW5oYS5fZ2V0YmFjayhlbnRyeS5VUkwsDQorICAgICAgICAgICAgICAgICBmdW5jdGlvbihkb2N1bWVudFNvdXJjZSkgeyANCisgICAgICAgICAgICAgICAgICAgYXN5bmNDYWxsYmFjayhkb2N1bWVudFNvdXJjZSk7DQorICAgICAgICAgICAgICAgICB9KTsNCisgICAgfSBlbHNlIHsNCisgICAgICAvLyBPb3BzLCBubyBkYXRhIDotKA0KKyAgICAgIGFzeW5jQ2FsbGJhY2soJycpOw0KKyAgICB9DQorICB9DQorDQorICB0aGlzLndvcmtlclBvb2wuc2VuZE1lc3NhZ2Uoe2Z1bmM6ICdsb2FkRG9jdW1lbnQnLCBlbnRyeTogZW50cnl9LCB0aGlzLnJlbW90ZVN0b3JhZ2VXb3JrZXIpOw0KK30NCisNCitQU0xvY2FsLnByb3RvdHlwZS5sb2FkRGF0YSA9IGZ1bmN0aW9uIChhc3luY0NhbGxiYWNrKSB7DQorICB0aGlzLndvcmtlclBvb2wub25tZXNzYWdlID0gZnVuY3Rpb24oYSwgYiwgbWVzc2FnZSkgew0KKyAgICBpZiAoIW1lc3NhZ2UuYm9keSB8fCAhbWVzc2FnZS5ib2R5LmF1dGhvcml6ZWQpIHsNCisgICAgICAvLyBGYWlsDQorICAgICAgYXN5bmNDYWxsYmFjaygnJyk7DQorICAgIH0NCisNCisgICAgYXN5bmNDYWxsYmFjayh7ZGlyczogbWVzc2FnZS5ib2R5LmRpcnMsIGZpbGVzOiBtZXNzYWdlLmJvZHkuZmlsZXN9KTsNCisgIH0NCisNCisgIHRoaXMud29ya2VyUG9vbC5zZW5kTWVzc2FnZSh7ZnVuYzogJ2xvYWREYXRhJ30sIHRoaXMucmVtb3RlU3RvcmFnZVdvcmtlcik7DQorfQ0KKw0KK1BTTG9jYWwucHJvdG90eXBlLmdldEZpbHRlcnMgPSBmdW5jdGlvbihmaWxlZGF0YSkgew0KKyAgLy8gQ2xlYXIgb3V0IHRoZSBwcmV2aW91cyBkaXJlY3RvcnkgbGlzdGluZy4NCisgIHZhciBmaWx0ZXJzID0gW10sIHBhdGhzID0ge307DQorICB2YXIgZGlyTGlzdCA9IGZpbGVkYXRhLmRpcnM7DQorDQorICBmb3IgKHZhciBpbmRleD0wOyBpbmRleDxkaXJMaXN0Lmxlbmd0aDsgKytpbmRleCkgew0KKyAgICBmaWx0ZXJzLnB1c2goe3ZhbHVlOmRpckxpc3RbaW5kZXhdLGRpc3BsYXk6ZGlyTGlzdFtpbmRleF19KTsNCisgIH0NCisNCisgIC8vIFdlIGNhbid0IHJldHVybiBhbiBlbXB0eSBmaWx0ZXIgbGlzdC4NCisgIGlmICghZmlsdGVycy5sZW5ndGgpIHsNCisgICAgZmlsdGVycy5wdXNoKHt2YWx1ZTonLycsZGlzcGxheTonLyd9KTsNCisgIH0NCisNCisgIHJldHVybiBmaWx0ZXJzOw0KK30NCisNCitQU0xvY2FsLnByb3RvdHlwZS5nZXRNZXRhZGF0YSA9IGZ1bmN0aW9uKGZpbGVkYXRhLCBmaWx0ZXJQYXRoKSB7DQorICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7DQorICB2YXIgc2VsZiA9IHRoaXM7DQorDQorICB2YXIgbWV0YWRhdGEgPSBbXTsNCisgIHZhciBmaWxlTGlzdCA9IGZpbGVkYXRhLmZpbGVzOw0KKw0KKyAgZm9yICh2YXIgaW5kZXg9MDsgaW5kZXg8ZmlsZUxpc3QubGVuZ3RoOyArK2luZGV4KSB7DQorICAgICAgLy8gR2FoIHBlcmZvcm0gZmlsZSBzcGxpdHRpbmcgaGVyZS4uDQorICAgIHZhciBwYXRocGFydCA9IGZpbGVMaXN0W2luZGV4XS5mdWxscGF0aC5zcGxpdCgnLycpOw0KKyAgICBpZiAocGF0aHBhcnQubGVuZ3RoID4gMikgew0KKyAgICAgIHBhdGhwYXJ0ID0gcGF0aHBhcnQuc2xpY2UoMCxwYXRocGFydC5sZW5ndGgtMSkuam9pbignLycpOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgIHBhdGhwYXJ0ID0gJy8nOw0KKyAgICB9DQorDQorICAgIHZhciBmaWxlcGFydCA9IGZpbGVMaXN0W2luZGV4XS5mdWxscGF0aC5zcGxpdCgnLycpLnNsaWNlKC0xKVswXTsNCisgICAgaWYgKGZpbHRlclBhdGggPT0gcGF0aHBhcnQpIHsNCisgICAgICBtZXRhZGF0YS5wdXNoKHsNCisgICAgICAgIFVSTDogZmlsZUxpc3RbaW5kZXhdLnVybCwNCisgICAgICAgIHRodW1iVVJMOiBlZGl0b3IuaW1nVVJMKCdpbWFnZXMvdGFuZ28vMzJ4MzIvbWltZXR5cGVzL3RleHQteC1nZW5lcmljLnBuZycpLA0KKyAgICAgICAgbmFtZTogZmlsZXBhcnQsDQorICAgICAgICBrZXk6IGZpbGVMaXN0W2luZGV4XS5mdWxscGF0aCwNCisgICAgICAgICR0eXBlOiBmaWxlTGlzdFtpbmRleF0uZmlsZXR5cGUNCisgICAgICB9KTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgdmFyIGRpckxpc3QgPSBmaWxlZGF0YS5kaXJzOw0KKw0KKyAgZm9yICh2YXIgaW5kZXg9MDsgaW5kZXg8ZGlyTGlzdC5sZW5ndGg7ICsraW5kZXgpIHsNCisgICAgLy8gV2UgaGF2ZSB0byBiZSBjYXJlZnVsIHRvIGZpbHRlciBvdXQgd2hlbiBmaWx0ZXJQYXRoIElTIHRoZSBjdXJyZW50IGludHJ5IGluIGRpckxpc3QNCisgICAgaWYgKDEgPT0gZmlsdGVyUGF0aC5sZW5ndGgpIHsNCisgICAgICAgIC8vIElmIHRoZSBmaWx0ZXIgcGF0aCBpcyB0aGUgcm9vdCAnLycgKGllLiBsZW5ndGggb2Ygb25lKSB0aGVuIHdlDQorICAgICAgICAvLyBzZWxlY3QgdGhlIGRpcmVjdG9yeSBpZiBhKSBJdCBpcyBub3QgYWxzbyBvZiBsZW5ndGggb25lIChpZS4gJy8nKQ0KKyAgICAgICAgLy8gYW5kIGIpIGhhcyBvbmx5IG9uZSBzbGFzaCBpbiBpdC4gIChXZSBjaGVjayB0aGUgbnVtYmVyIG9mIHNsYXNoZXMgYnkNCisgICAgICAgIC8vIHNwbGl0dGluZyB0aGUgc3RyaW5nIGJ5ICcvJyBhbmQgc3VidHJhY3Rpbmcgb25lIGZyb20gdGhlIGxlbmd0aC4pDQorICAgICAgICB2YXIgbWF0Y2hlcyA9IGRpckxpc3RbaW5kZXhdLmxlbmd0aCA+IDEgJiYgZGlyTGlzdFtpbmRleF0uc3BsaXQoJy8nKS5sZW5ndGggPT0gMjsNCisgICAgfSBlbHNlIHsNCisgICAgICAgIC8vIENob3AgdGhlIGxhc3QgY29tcG9uZW50IG9mIHRoZSBkaXJlY3RvcnkgYW5kIGNvbXBhcmUgYWdhaW5zdCB0aGUgZmlsdGVyLg0KKyAgICAgICAgdmFyIG1hdGNoZXMgPSBkaXJMaXN0W2luZGV4XS5zcGxpdCgnLycpLnNsaWNlKDAsLTEpLmpvaW4oJy8nKSA9PSBmaWx0ZXJQYXRoOw0KKyAgICB9DQorICAgIGlmIChtYXRjaGVzKSB7DQorICAgICAgbWV0YWRhdGEucHVzaCh7DQorICAgICAgICBuYW1lOiBkaXJMaXN0W2luZGV4XS5zcGxpdCgnLycpLnNsaWNlKC0xKSwNCisgICAgICAgIGtleTogZGlyTGlzdFtpbmRleF0sDQorICAgICAgICAkdHlwZTogJ2ZvbGRlcicNCisgICAgICB9KTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgcmV0dXJuIG1ldGFkYXRhOw0KK30NCisNCitQU0xvY2FsLnByb3RvdHlwZS5zYXZlRG9jdW1lbnQgPSBmdW5jdGlvbihwYXJlbnRwYXRoLCBmaWxlbmFtZSwgZG9jdW1lbnRTb3VyY2UsIGFzeW5jQ2FsbGJhY2spIHsNCisgIHRoaXMud29ya2VyUG9vbC5vbm1lc3NhZ2UgPSBmdW5jdGlvbihhLCBiLCBtZXNzYWdlKSB7DQorICAgIGlmICghbWVzc2FnZS5ib2R5IHx8ICFtZXNzYWdlLmJvZHkuYXV0aG9yaXplZCkgew0KKyAgICAgIC8vIEZhaWwNCisgICAgICBhc3luY0NhbGxiYWNrKGZhbHNlKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoYXN5bmNDYWxsYmFjaykgew0KKyAgICAgIGFzeW5jQ2FsbGJhY2sobWVzc2FnZS5ib2R5LnJlc3BvbnNlKTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgdGhpcy53b3JrZXJQb29sLnNlbmRNZXNzYWdlKHtmdW5jOiAnc2F2ZURvY3VtZW50JywgcGFyZW50cGF0aDogcGFyZW50cGF0aCwgZmlsZW5hbWU6IGZpbGVuYW1lLCBjb250ZW50OmRvY3VtZW50U291cmNlfSwgdGhpcy5yZW1vdGVTdG9yYWdlV29ya2VyKTsNCit9DQorUFNMb2NhbC5wcm90b3R5cGUuZGVsZXRlRW50cnkgPSBmdW5jdGlvbihlbnRyeSwgYXN5bmNDYWxsYmFjaykgew0KKyAgdGhpcy53b3JrZXJQb29sLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGEsIGIsIG1lc3NhZ2UpIHsNCisgICAgaWYgKCFtZXNzYWdlLmJvZHkgfHwgIW1lc3NhZ2UuYm9keS5hdXRob3JpemVkKSB7DQorICAgICAgLy8gRmFpbA0KKyAgICAgIGFzeW5jQ2FsbGJhY2soZmFsc2UpOw0KKyAgICB9DQorDQorICAgIGlmIChhc3luY0NhbGxiYWNrKSB7DQorICAgICAgYXN5bmNDYWxsYmFjayhtZXNzYWdlLmJvZHkucmVzcG9uc2UpOw0KKyAgICB9DQorICB9DQorDQorICB0aGlzLndvcmtlclBvb2wuc2VuZE1lc3NhZ2Uoe2Z1bmM6ICdkZWxldGVFbnRyeScsIGVudHJ5OiBlbnRyeX0sIHRoaXMucmVtb3RlU3RvcmFnZVdvcmtlcik7DQorfQ0KKw0KK1BTTG9jYWwucHJvdG90eXBlLm1ha2VGb2xkZXIgPSBmdW5jdGlvbihjdXJyZW50UGF0aCwgZm9sZGVyTmFtZSwgYXN5bmNDYWxsYmFjaykgew0KKyAgdGhpcy53b3JrZXJQb29sLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGEsIGIsIG1lc3NhZ2UpIHsNCisgICAgaWYgKCFtZXNzYWdlLmJvZHkgfHwgIW1lc3NhZ2UuYm9keS5hdXRob3JpemVkKSB7DQorICAgICAgLy8gRmFpbA0KKyAgICAgIGFzeW5jQ2FsbGJhY2soZmFsc2UpOw0KKyAgICB9DQorDQorICAgIGlmIChhc3luY0NhbGxiYWNrKSB7DQorICAgICAgYXN5bmNDYWxsYmFjayh0cnVlKTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgdGhpcy53b3JrZXJQb29sLnNlbmRNZXNzYWdlKHtmdW5jOiAnbWFrZUZvbGRlcicsIHBhcmVudHBhdGg6IGN1cnJlbnRQYXRoLCBkaXJuYW1lOiBmb2xkZXJOYW1lfSwgdGhpcy5yZW1vdGVTdG9yYWdlV29ya2VyKTsNCit9DQorDQorUFNMb2NhbC5wcm90b3R5cGUuY29weUVudHJ5ID0gZnVuY3Rpb24oZW50cnksIGFzeW5jQ2FsbGJhY2spIHsNCisgIHRoaXMud29ya2VyUG9vbC5vbm1lc3NhZ2UgPSBmdW5jdGlvbihhLCBiLCBtZXNzYWdlKSB7DQorICAgIGlmICghbWVzc2FnZS5ib2R5IHx8ICFtZXNzYWdlLmJvZHkuYXV0aG9yaXplZCkgew0KKyAgICAgIC8vIEZhaWwNCisgICAgICBhc3luY0NhbGxiYWNrKGZhbHNlKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoYXN5bmNDYWxsYmFjaykgew0KKyAgICAgIGFzeW5jQ2FsbGJhY2sobWVzc2FnZS5ib2R5LnJlc3BvbnNlLCBtZXNzYWdlLmJvZHkuZW50cnkpOw0KKyAgICB9DQorICB9DQorDQorICB0aGlzLndvcmtlclBvb2wuc2VuZE1lc3NhZ2Uoe2Z1bmM6ICdjb3B5RW50cnknLCBlbnRyeTogZW50cnl9LCB0aGlzLnJlbW90ZVN0b3JhZ2VXb3JrZXIpOw0KK30NCisNCit9KSgpOw0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9kaWFsb2cuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9kaWFsb2cuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTgxMTM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2RpYWxvZy5odG1sCkBAIC0wLDAgKzEsNiBAQAorPGgxPjxsMTBuPkVuYWJsaW5nIExvY2FsIFN0b3JhZ2U8L2wxMG4+PC9oMT4KKzxwPjxsMTBuPlhpbmhhIHVzZXMgR29vZ2xlIEdlYXJzIHRvIGVuYWJsZSBsb2NhbCBkb2N1bWVudCBzdG9yYWdlLiAgV2l0aCBHZWFycyBpbnN0YWxsZWQsIHlvdSBjYW4gc2F2ZSBkcmFmdHMgb2YgeW91ciBkb2N1bWVudHMgb24geW91ciBoYXJkIGRyaXZlLCBjb25maWd1cmUgWGluaGEgdG8gbG9vayB0aGUgd2F5IHlvdSB3YW50LCBhbmQgY2FycnkgdGhpcyBpbmZvcm1hdGlvbiB3aGVyZXZlciB5b3UgdXNlIFhpbmhhIG9uIHRoZSB3ZWIuPC9sMTBuPjwvcD4KKzxwIGlkPSJJbnN0YWxsVGV4dCI+PGwxMG4+VG8gbGVhcm4gbW9yZSBhYm91dCBHZWFycywgYW5kIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkgb24geW91ciBzeXN0ZW0sIHBsZWFzZSBzZWUgPGEgaWQ9IltHZWFyc0xpbmtdIiBocmVmPSJodHRwOi8vZ2VhcnMuZ29vZ2xlLmNvbS8/YWN0aW9uPWluc3RhbGwmbWVzc2FnZT1FbmFibGUgbG9jYWwgc3RvcmFnZSBmb3IgWGluaGEmcmV0dXJuPSI+aHR0cDovL2dlYXJzLmdvb2dsZS5jb208L2E+IG9yIGNsaWNrICJJbnN0YWxsIiBiZWxvdy48L2wxMG4+PC9wPgorPHAgaWQ9IkVuYWJsZVRleHQiPjxsMTBuPlRvIGVuYWJsZSBHZWFycyBmb3IgdGhpcyB3ZWJzaXRlLCBjbGljayAiRW5hYmxlIiB0byByZWxvYWQgdGhlIHBhZ2UgdGhlbiBlbmFibGUgR2VhcnMuLiAgU2luY2UgdGhlIHBhZ2Ugd2lsbCBiZSByZWZyZXNoZWQsIHBsZWFzZSBiZSBzdXJlIHRvIHNhdmUgYW55IHVuZmluaXNoZWQgd29yay48L2wxMG4+PC9wPgorPGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9Iltjb25maXJtXSIgdmFsdWU9Il8oQ29uZmlybSkiIC8+Cis8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0iW2NhbmNlbF0iIHZhbHVlPSJfKENhbmNlbCkiIC8+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvZ2VhcnNfaW5pdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9nZWFyc19pbml0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNDRmMDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvZ2VhcnNfaW5pdC5qcwpAQCAtMCwwICsxLDg2IEBACisvLyBDb3B5cmlnaHQgMjAwNywgR29vZ2xlIEluYy4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8KKy8vICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisvLyAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisvLyAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorLy8gICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZQorLy8gICAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKy8vICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorLy8gV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKy8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PCisvLyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisvLyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsKKy8vIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorLy8gV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKKy8vIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKy8vIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLy8KKy8vIFNldHMgdXAgZ29vZ2xlLmdlYXJzLiosIHdoaWNoIGlzICp0aGUgb25seSogc3VwcG9ydGVkIHdheSB0byBhY2Nlc3MgR2VhcnMuCisvLworLy8gQ2lyY3VtdmVudCB0aGlzIGZpbGUgYXQgeW91ciBvd24gcmlzayEKKy8vCisvLyBJbiB0aGUgZnV0dXJlLCBHZWFycyBtYXkgYXV0b21hdGljYWxseSBkZWZpbmUgZ29vZ2xlLmdlYXJzLiogd2l0aG91dCB0aGlzCisvLyBmaWxlLiBHZWFycyBtYXkgdXNlIHRoZXNlIG9iamVjdHMgdG8gdHJhbnNwYXJlbnRseSBmaXggYnVncyBhbmQgY29tcGF0aWJpbGl0eQorLy8gaXNzdWVzLiBBcHBsaWNhdGlvbnMgdGhhdCB1c2UgdGhlIGNvZGUgYmVsb3cgd2lsbCBjb250aW51ZSB0byB3b3JrIHNlYW1sZXNzbHkKKy8vIHdoZW4gdGhhdCBoYXBwZW5zLgorCisoZnVuY3Rpb24oKSB7CisgIC8vIFdlIGFyZSBhbHJlYWR5IGRlZmluZWQuIEhvb3JheSEKKyAgaWYgKHdpbmRvdy5nb29nbGUgJiYgZ29vZ2xlLmdlYXJzKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgdmFyIGZhY3RvcnkgPSBudWxsOworCisgIC8vIEZpcmVmb3gKKyAgaWYgKHR5cGVvZiBHZWFyc0ZhY3RvcnkgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICBmYWN0b3J5ID0gbmV3IEdlYXJzRmFjdG9yeSgpOworICB9IGVsc2UgeworICAgIC8vIElFCisgICAgdHJ5IHsKKyAgICAgIGZhY3RvcnkgPSBuZXcgQWN0aXZlWE9iamVjdCgnR2VhcnMuRmFjdG9yeScpOworICAgICAgLy8gcHJpdmF0ZVNldEdsb2JhbE9iamVjdCBpcyBvbmx5IHJlcXVpcmVkIGFuZCBzdXBwb3J0ZWQgb24gV2luQ0UuCisgICAgICBpZiAoZmFjdG9yeS5nZXRCdWlsZEluZm8oKS5pbmRleE9mKCdpZV9tb2JpbGUnKSAhPSAtMSkgeworICAgICAgICBmYWN0b3J5LnByaXZhdGVTZXRHbG9iYWxPYmplY3QodGhpcyk7CisgICAgICB9CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgLy8gU2FmYXJpCisgICAgICBpZiAoKHR5cGVvZiBuYXZpZ2F0b3IubWltZVR5cGVzICE9ICd1bmRlZmluZWQnKQorICAgICAgICAgICAmJiBuYXZpZ2F0b3IubWltZVR5cGVzWyJhcHBsaWNhdGlvbi94LWdvb2dsZWdlYXJzIl0pIHsKKyAgICAgICAgZmFjdG9yeSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9iamVjdCIpOworICAgICAgICBmYWN0b3J5LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgICAgIGZhY3Rvcnkud2lkdGggPSAwOworICAgICAgICBmYWN0b3J5LmhlaWdodCA9IDA7CisgICAgICAgIGZhY3RvcnkudHlwZSA9ICJhcHBsaWNhdGlvbi94LWdvb2dsZWdlYXJzIjsKKyAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGZhY3RvcnkpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vICpEbyBub3QqIGRlZmluZSBhbnkgb2JqZWN0cyBpZiBHZWFycyBpcyBub3QgaW5zdGFsbGVkLiBUaGlzIG1pbWljcyB0aGUKKyAgLy8gYmVoYXZpb3Igb2YgR2VhcnMgZGVmaW5pbmcgdGhlIG9iamVjdHMgaW4gdGhlIGZ1dHVyZS4KKyAgaWYgKCFmYWN0b3J5KSB7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gTm93IHNldCB1cCB0aGUgb2JqZWN0cywgYmVpbmcgY2FyZWZ1bCBub3QgdG8gb3ZlcndyaXRlIGFueXRoaW5nLgorICAvLworICAvLyBOb3RlOiBJbiBJbnRlcm5ldCBFeHBsb3JlciBmb3IgV2luZG93cyBNb2JpbGUsIHlvdSBjYW4ndCBhZGQgcHJvcGVydGllcyB0bworICAvLyB0aGUgd2luZG93IG9iamVjdC4gSG93ZXZlciwgZ2xvYmFsIG9iamVjdHMgYXJlIGF1dG9tYXRpY2FsbHkgYWRkZWQgYXMKKyAgLy8gcHJvcGVydGllcyBvZiB0aGUgd2luZG93IG9iamVjdCBpbiBhbGwgYnJvd3NlcnMuCisgIGlmICghd2luZG93Lmdvb2dsZSkgeworICAgIGdvb2dsZSA9IHt9OworICB9CisKKyAgaWYgKCFnb29nbGUuZ2VhcnMpIHsKKyAgICBnb29nbGUuZ2VhcnMgPSB7ZmFjdG9yeTogZmFjdG9yeX07CisgIH0KK30pKCk7CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9iNS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2I1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMzJmYzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9iNS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImI1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvY2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAzNDk2YQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2NoLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2N6LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvY3ouanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE4MmQyNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2N6LmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY3oiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlpydcWhaXQiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9kYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNWIzYjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9kYS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGxlciIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YwMDU2ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2VlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvZWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE5Njc5YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2VlLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNMT0NBTCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvZWwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9lbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmI2ZWJhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvZWwuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5Zjc2MDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9lcy5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVzIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2V1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvZXUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc2YTViMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2V1LmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlV0emkiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9mYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2ZhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZTg3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9mYS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9maS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2ZpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYzY4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9maS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNMT0NBTCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9mci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzhjNDg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvZnIuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxlciIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2ZyX2NhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvZnJfY2EuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc2ZDM3YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2ZyX2NhLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnJfY2EiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNMT0NBTCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvZ2IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9nYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDFiYTNmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvZ2IuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJnYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9oZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNmRlYTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9oZS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImhlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNMT0NBTCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9odS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDJjYWE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvaHUuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJodSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTcOpZ3NlbSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvaXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIwNDVkMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2l0LmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaXQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGFtZW50byIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2phLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1YjIwMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2phLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiamEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuS4reatoiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2xjX2Jhc2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NGRjMTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9sY19iYXNlLmpzCkBAIC0wLDAgKzEsMzMgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLworLy8gTEFORzogImVuIiwgRU5DT0RJTkc6IFVURi04CisvLyBBdXRob3I6IFRyYW5zbGF0b3ItTmFtZSwgPGVtYWlsQGV4YW1wbGUuY29tPgorLy8KKy8vIExhc3QgcmV2aXNpb246IDIwMTgtMDQtMTIKKy8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KKy8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyAoUGxlYXNlLCByZW1vdmUgaW5mb3JtYXRpb24gYmVsb3cpCisvLyBGT1IgVFJBTlNMQVRPUlM6CisvLworLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCisvLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCisvLworLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7CisvLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50CisvLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCisKK3sKKyAgICAiQ2FuY2VsIjogIiIsCisgICAgIkNvbmZpcm0iOiAiIiwKKyAgICAiRW5hYmxlIjogIiIsCisgICAgIkVuYWJsZSBHZWFycyBpbiBvcmRlciB0byB1c2UgbG9jYWwgZG9jdW1lbnQgc3RvcmFnZSBhbmQgY29uZmlndXJhdGlvbi4iOiAiIiwKKyAgICAiRW5hYmxpbmcgTG9jYWwgU3RvcmFnZSI6ICIiLAorICAgICJJbnN0YWxsIjogIiIsCisgICAgIkxlYXJuIEFib3V0IExvY2FsIFN0b3JhZ2UiOiAiIiwKKyAgICAiVGhpcyB3aWxsIHJlbG9hZCB0aGUgcGFnZSwgY2F1c2luZyB5b3UgdG8gbG9zZSBhbnkgdW5zYXZlZCB3b3JrLiAgUHJlc3MgXCJPS1wiIHRvIHJlbG9hZC4iOiAiIiwKKyAgICAiWGluaGEgdXNlcyBHb29nbGUgR2VhcnMgdG8gZW5hYmxlIGxvY2FsIGRvY3VtZW50IHN0b3JhZ2UuICBXaXRoIEdlYXJzIGluc3RhbGxlZCwgeW91IGNhbiBzYXZlIGRyYWZ0cyBvZiB5b3VyIGRvY3VtZW50cyBvbiB5b3VyIGhhcmQgZHJpdmUsIGNvbmZpZ3VyZSBYaW5oYSB0byBsb29rIHRoZSB3YXkgeW91IHdhbnQsIGFuZCBjYXJyeSB0aGlzIGluZm9ybWF0aW9uIHdoZXJldmVyIHlvdSB1c2UgWGluaGEgb24gdGhlIHdlYi4iOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvbHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRmZDAyZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2x0LmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2x2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvbHYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyYWNlNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL2x2LmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHYiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0Y2VsdCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc4ZTFlMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL25iLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvbmwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYzOWY5NQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL25sLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsZXJlbiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL3BsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvcGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZjOGI4NAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL3BsLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicGwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFudWx1aiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvcHRfYnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1YWM0MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNMT0NBTCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvcm8uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9yby5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDhiZDY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvcm8uanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJybyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNMT0NBTCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvcnUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9ydS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzM1Y2IxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvcnUuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNMT0NBTCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvc2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9zaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTlhZDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvc2guanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzaCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUG9uacWhdGkiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9zaS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL3NpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNDg0MTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9zaS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9zci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL3NyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMDJjNjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy9zci5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL3N2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZlNzJlMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL3N2LmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3YiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL3RoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvdGguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM3MThjNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL3RoLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidGgiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL3RyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvdHIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VmNGUwMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTTE9DQUwgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL3ZuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvdm4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU0Y2VkNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNMb2NhbC9sYW5nL3ZuLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidm4iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkjhu6d5IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNMT0NBTCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvemhfY24uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTTG9jYWwvbGFuZy96aF9jbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzA3ZmZkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU0xvY2FsL2xhbmcvemhfY24uanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ6aF9jbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQU0xPQ0FMIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL1BTU2VydmVyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9QU1NlcnZlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzljZWM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9QU1NlcnZlci5qcwpAQCAtMCwwICsxLDI4MiBAQAorLyoqDQorICogUFNTZXJ2ZXIgUFNTZXJ2ZXIuanMgZmlsZS4NCisgKiBUaGlzIHBsdWdpbiBpcyBhIHNlcnZlciBiYXNlZCBwZXJzaXN0ZW50IHN0b3JhZ2UgYmFja2VuZC4NCisgKi8NCisoZnVuY3Rpb24oKSB7DQordmFyIFBTU2VydmVyID0gd2luZG93LlBTU2VydmVyID0gZnVuY3Rpb24gUFNTZXJ2ZXIoZWRpdG9yKSB7DQorICB0aGlzLmVkaXRvciA9IGVkaXRvcjsNCit9DQorDQorUFNTZXJ2ZXIuX3BsdWdpbkluZm8gPSB7DQorICAgIG5hbWUgICAgICAgICAgOiAiUFNTZXJ2ZXIiLA0KKyAgICB2ZXJzaW9uICAgICAgIDogIjIuMCIsDQorICAgIGRldmVsb3BlciAgICAgOiAiRG91Z2xhcyBNYXlsZSIsDQorICAgIGRldmVsb3Blcl91cmwgOiAiaHR0cDovL3hpbmhhLm9yZyIsDQorICAgIGxpY2Vuc2UgICAgICAgOiAiTUlUIg0KK307DQorDQorUFNTZXJ2ZXIucHJvdG90eXBlLm9uR2VuZXJhdGVPbmNlID0gZnVuY3Rpb24gKCkgew0KKyAgLy8gV2UgdXNlIF9sb2FkQ29uZmlnIHRvIGFzeW5jaHJvbm91c2x5IGxvYWQgdGhlIGNvbmZpZyBhbmQgdGhlbiByZWdpc3RlciB0aGUNCisgIC8vIGJhY2tlbmQuDQorICB0aGlzLl9sb2FkQ29uZmlnKCk7DQorfTsNCisNCitQU1NlcnZlci5wcm90b3R5cGUuX2xvYWRDb25maWcgPSBmdW5jdGlvbigpIHsNCisgIHZhciBzZWxmID0gdGhpczsNCisgIGlmICghdGhpcy5fc2VydmVyQ29uZmlnKSB7DQorICAgIFhpbmhhLl9nZXRiYWNrKFhpbmhhLmdldFBsdWdpbkRpcigiUFNTZXJ2ZXIiKSArICIvY29uZmlnLmluYy5waHAiLA0KKyAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihjb25maWcpIHsgDQorICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2VydmVyQ29uZmlnID0gZXZhbCgnKCcgKyBjb25maWcgKyAnKScpOw0KKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NlcnZlckNvbmZpZy51c2VyX2FmZmluaXR5ID0gMjA7DQorICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2VydmVyQ29uZmlnLmRpc3BsYXlOYW1lID0gJ1NlcnZlcic7DQorICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9hZENvbmZpZygpOw0KKyAgICAgICAgICAgICAgICAgICB9KTsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgdGhpcy5fcmVnaXN0ZXJCYWNrZW5kKCk7DQorfQ0KKw0KK1BTU2VydmVyLnByb3RvdHlwZS5fcmVnaXN0ZXJCYWNrZW5kID0gZnVuY3Rpb24odGltZVdhaXRlZCkgew0KKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOw0KKyAgdmFyIHNlbGYgPSB0aGlzOw0KKw0KKyAgaWYgKCF0aW1lV2FpdGVkKSB7DQorICAgIHRpbWVXYWl0ZWQgPSAwOw0KKyAgfQ0KKw0KKyAgLy8gUmV0cnkgb3ZlciBhIHBlcmlvZCBvZiB0ZW4gc2Vjb25kcyB0byByZWdpc3Rlci4gIFdlIGJhY2sgb2ZmIGV4cG9uZW50aWFsbHkNCisgIC8vIHRvIGxpbWl0IHJlc291Y2UgdXNhZ2UgaW4gdGhlIGNhc2Ugb2YgbWlzY29uZmlndXJhdGlvbi4NCisgIHZhciByZWdpc3RlclRpbWVvdXQgPSAxMDAwMDsNCisNCisgIGlmICh0aW1lV2FpdGVkID4gcmVnaXN0ZXJUaW1lb3V0KSB7DQorICAgIC8vIFRoaXMgaXMgbW9zdCBsaWtlbHkgYSBjb25maWd1cmF0aW9uIGVycm9yLiAgV2UncmUgbG9hZGVkIGFuZA0KKyAgICAvLyBQZXJzaXN0ZW50U3RvcmFnZSBpcyBub3QuDQorICAgIHJldHVybjsNCisgIH0NCisNCisgIGlmICghZWRpdG9yLnBsdWdpbnNbJ1BlcnNpc3RlbnRTdG9yYWdlJ10gfHwNCisgICAgICAhZWRpdG9yLnBsdWdpbnNbJ1BlcnNpc3RlbnRTdG9yYWdlJ10uaW5zdGFuY2UgfHwNCisgICAgICAhZWRpdG9yLnBsdWdpbnNbJ1BlcnNpc3RlbnRTdG9yYWdlJ10uaW5zdGFuY2UucmVhZHkpIHsNCisNCisgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2VsZi5fcmVnaXN0ZXJCYWNrZW5kKHRpbWVXYWl0ZWQgPyB0aW1lV2FpdGVkKjIgOiA1MCk7fSwgdGltZVdhaXRlZCA/IHRpbWVXYWl0ZWQgOiA1MCk7DQorICAgIHJldHVybjsNCisgIH0NCisgIGVkaXRvci5wbHVnaW5zWydQZXJzaXN0ZW50U3RvcmFnZSddLmluc3RhbmNlLnJlZ2lzdGVyQmFja2VuZCgnUFNTZXJ2ZXInLCB0aGlzLCB0aGlzLl9zZXJ2ZXJDb25maWcpOw0KK30NCisNCitQU1NlcnZlci5wcm90b3R5cGUubG9hZERhdGEgPSBmdW5jdGlvbiAoYXN5bmNDYWxsYmFjaykgew0KKyAgdmFyIHNlbGYgPSB0aGlzOw0KKyAgWGluaGEuX2dldGJhY2soWGluaGEuZ2V0UGx1Z2luRGlyKCJQU1NlcnZlciIpICsgIi9iYWNrZW5kLnBocD9kaXJlY3RvcnkmbGlzdGluZyIsDQorICAgICAgICAgICAgICAgICBmdW5jdGlvbihqc29uKSB7IA0KKyAgICAgICAgICAgICAgICAgICBzZWxmLmRpclRyZWUgPSBldmFsKCcoJyArIGpzb24gKyAnKScpOw0KKyAgICAgICAgICAgICAgICAgICBhc3luY0NhbGxiYWNrKHNlbGYuZGlyVHJlZSk7DQorICAgICAgICAgICAgICAgICB9KTsNCit9DQorDQordmFyIHRyZWVSZWN1cnNlID0gZnVuY3Rpb24gdHJlZVJlY3Vyc2UodHJlZSwgY2FsbGJhY2ssIHJvb3QpIHsNCisgIGlmICh0eXBlb2Ygcm9vdCA9PSAndW5kZWZpbmVkJykgew0KKyAgICByb290ID0gJy8nOw0KKyAgICBjYWxsYmFjaygnLycsICcnLCB0cmVlKTsNCisgIH0NCisNCisgIGZvciAodmFyIGtleSBpbiB0cmVlKSB7DQorICAgIGNhbGxiYWNrKHJvb3QsIGtleSwgdHJlZVtrZXldKTsNCisNCisgICAgaWYgKHRyZWVba2V5XS4kdHlwZSA9PSAnZm9sZGVyJykgew0KKyAgICAgIHRyZWVSZWN1cnNlKHRyZWVba2V5XSwgY2FsbGJhY2ssIHJvb3QgKyBrZXkgKyAnLycpOw0KKyAgICB9DQorICB9DQorfTsNCisNCitQU1NlcnZlci5wcm90b3R5cGUuZ2V0RmlsdGVycyA9IGZ1bmN0aW9uKGRpclRyZWUpIHsNCisgIC8vIENsZWFyIG91dCB0aGUgcHJldmlvdXMgZGlyZWN0b3J5IGxpc3RpbmcuDQorICB2YXIgZmlsdGVycyA9IFtdOw0KKw0KKyAgdHJlZVJlY3Vyc2UoZGlyVHJlZSwgZnVuY3Rpb24ocGF0aCwga2V5LCB2YWx1ZSkgew0KKyAgICAgIGlmICh2YWx1ZS4kdHlwZSAhPSAnZm9sZGVyJykgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgIH0NCisNCisgICAgICB2YXIgZmlsZVBhdGggPSBrZXkubGVuZ3RoID8gcGF0aCArIGtleSArICcvJyA6IHBhdGg7DQorICAgICAgdmFyIGZpbGVQYXRoRGlzcGxheSA9IGtleS5sZW5ndGggPyBwYXRoICsga2V5ICsgJy8nIDogcGF0aDsNCisgICAgICBpZiAoZmlsZVBhdGhEaXNwbGF5Lmxlbmd0aCA+IDEpIHsNCisgICAgICAgIGZpbGVQYXRoRGlzcGxheSA9IGZpbGVQYXRoRGlzcGxheS5zdWJzdHJpbmcoMCwgZmlsZVBhdGhEaXNwbGF5Lmxlbmd0aC0xKTsNCisgICAgICB9DQorICAgICAgZmlsdGVycy5wdXNoKHsNCisgICAgICAgIHZhbHVlOiBmaWxlUGF0aCwNCisgICAgICAgIGRpc3BsYXk6IGZpbGVQYXRoRGlzcGxheQ0KKyAgICAgIH0pOw0KKyAgfSk7DQorDQorICByZXR1cm4gZmlsdGVyczsNCit9DQorDQorUFNTZXJ2ZXIucHJvdG90eXBlLmxvYWREb2N1bWVudCA9IGZ1bmN0aW9uKGVudHJ5LCBhc3luY0NhbGxiYWNrKSB7DQorDQorICBYaW5oYS5fZ2V0YmFjayhlbnRyeS5VUkwsDQorICAgICAgICAgICAgICAgICBmdW5jdGlvbihkb2N1bWVudFNvdXJjZSkgeyANCisgICAgICAgICAgICAgICAgICAgYXN5bmNDYWxsYmFjayhkb2N1bWVudFNvdXJjZSk7DQorICAgICAgICAgICAgICAgICB9KTsNCit9DQorUFNTZXJ2ZXIucHJvdG90eXBlLmdldE1ldGFkYXRhID0gZnVuY3Rpb24oZGlyVHJlZSwgcGF0aEZpbHRlciwgdHlwZUZpbHRlcikgew0KKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOw0KKyAgdmFyIHNlbGYgPSB0aGlzOw0KKw0KKyAgdmFyIG1ldGFkYXRhID0gW107DQorDQorICB2YXIgdHlwZUtleXMgPSB7fTsNCisgIGZvciAodmFyIGluZGV4PTA7IGluZGV4PHR5cGVGaWx0ZXIubGVuZ3RoOyArK2luZGV4KSB7DQorICAgIHR5cGVLZXlzW3R5cGVGaWx0ZXJbaW5kZXhdXSA9IHRydWU7DQorICB9DQorDQorICB0cmVlUmVjdXJzZShkaXJUcmVlLCBmdW5jdGlvbihwYXRoLCBrZXksIHZhbHVlKSB7DQorICAgIGlmICghdmFsdWUuJHR5cGUgfHwgIWtleSkgew0KKyAgICAgIC8vIFRoaXMgaXMgYSBidWlsdGluIHByb3BlcnR5IG9mIG9iamVjdHMsIG5vdCBvbmUgcmV0dXJuZWQgYnkgdGhlDQorICAgICAgLy8gYmFja2VuZC4NCisgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgaWYgKHBhdGggIT0gcGF0aEZpbHRlcikgew0KKyAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBpZiAoISh2YWx1ZS4kdHlwZSBpbiB0eXBlS2V5cykpIHsNCisgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgaWYgKCh2YWx1ZS4kdHlwZSA9PSAnZm9sZGVyJykgfHwgKHZhbHVlLiR0eXBlID09ICdodG1sJykgfHwgDQorICAgICAgICAodmFsdWUuJHR5cGUgPT0gJ3RleHQnKSB8fCAodmFsdWUuJHR5cGUgPT0gJ2RvY3VtZW50JykpIHsNCisgICAgICBtZXRhZGF0YS5wdXNoKHsNCisgICAgICAgIG5hbWU6IGtleSwNCisgICAgICAgIGtleTogcGF0aCArIGtleSwNCisgICAgICAgICR0eXBlOiB2YWx1ZS4kdHlwZQ0KKyAgICAgIH0pOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgIG1ldGFkYXRhLnB1c2goew0KKyAgICAgICAgVVJMOiBYaW5oYS5nZXRQbHVnaW5EaXIoIlBTU2VydmVyIikgKyAnL2RlbW9faW1hZ2VzJyArIHBhdGggKyBrZXksDQorICAgICAgICBuYW1lOiBrZXksDQorICAgICAgICBrZXk6IHBhdGggKyBrZXksDQorICAgICAgICAkdHlwZTogdmFsdWUuJHR5cGUNCisgICAgICB9KTsNCisgICAgfQ0KKyAgfSk7DQorDQorICByZXR1cm4gbWV0YWRhdGE7DQorfQ0KKw0KK1BTU2VydmVyLnByb3RvdHlwZS5sb2FkRG9jdW1lbnQgPSBmdW5jdGlvbihlbnRyeSwgYXN5bmNDYWxsYmFjaykgew0KKyAgdmFyIHNlbGYgPSB0aGlzOw0KKyAgWGluaGEuX2dldGJhY2soWGluaGEuZ2V0UGx1Z2luRGlyKCJQU1NlcnZlciIpICsgJy9kZW1vX2ltYWdlcycgKyBlbnRyeS5rZXksDQorICAgICAgICAgICAgICAgICBmdW5jdGlvbihkb2N1bWVudFNvdXJjZSkgeyANCisgICAgICAgICAgICAgICAgICAgYXN5bmNDYWxsYmFjayhkb2N1bWVudFNvdXJjZSk7DQorICAgICAgICAgICAgICAgICB9KTsNCit9DQorDQorUFNTZXJ2ZXIucHJvdG90eXBlLmJ1aWxkSW1wb3J0VUkgPSBmdW5jdGlvbihkaWFsb2csIGVsZW1lbnQpIHsNCisgIC8vIFdlIHJlY2VpdmUgYW4gSFRNTCBlbGVtZW50IGFuZCBhcmUgZXhwZWN0ZWQgdG8gYnVpbGQgYW4gSFRNTCBVSS4gIFdlJ2xsDQorICAvLyBtb2RlbCBpdCBvZmYgb2YgdGhpcyBIVE1MIGZyYWdtZW50Og0KKyAgLy8gIDxmb3JtIHRhcmdldD0iaW1wb3J0RnJhbWUiIGFjdGlvbj0iLi4vcGx1Z2lucy9QU1NlcnZlci9iYWNrZW5kLnBocD91cGxvYWQmYW1wO3JlcGxhY2U9ZmFsc2UmYW1wOyIgaWQ9ImltcG9ydEZvcm0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+DQorICAvLyAgICBGaWxlOiA8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZWRhdGEiIC8+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Il8oSW1wb3J0KSIgLz4NCisgIC8vICA8L2Zvcm0+DQorICAvLyAgPGlmcmFtZSBpZD0iaW1wb3J0RnJhbWUiIG5hbWU9ImltcG9ydEZyYW1lIiBzcmM9IiMiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48L2lmcmFtZT4NCisgIHZhciBpZnJhbWVJRCA9IGRpYWxvZy5jcmVhdGVJZCgnaW1wb3J0RnJhbWUnKTsNCisNCisgIHZhciBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpOw0KKyAgZm9ybS5zZXRBdHRyaWJ1dGUoJ2VuY3R5cGUnLCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpOw0KKyAgZm9ybS5zZXRBdHRyaWJ1dGUoJ21ldGhvZCcsICdwb3N0Jyk7DQorICBmb3JtLnNldEF0dHJpYnV0ZSgnYWN0aW9uJywgWGluaGEuZ2V0UGx1Z2luRGlyKCJQU1NlcnZlciIpICsgIi9iYWNrZW5kLnBocD91cGxvYWQmcmVwbGFjZT10cnVlJiIpOw0KKw0KKyAgdmFyIGZpbGVlbnRyeSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7DQorICBmaWxlZW50cnkuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2ZpbGUnKTsNCisgIGZpbGVlbnRyeS5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAnZmlsZWRhdGEnKTsNCisNCisgIHZhciBzdWJtaXRidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOw0KKyAgc3VibWl0YnV0dG9uLnNldEF0dHJpYnV0ZSgndHlwZScsICdzdWJtaXQnKTsNCisgIHN1Ym1pdGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJyxYaW5oYS5fbGMoJ0ltcG9ydCcsICdQU1NlcnZlcicpKTsNCisNCisgIHZhciBmaWxldGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFhpbmhhLl9sYygnRmlsZTogJywgJ1BTU2VydmVyJykpOw0KKyAgZmlsZXRleHQgPSBmb3JtLmFwcGVuZENoaWxkKGZpbGV0ZXh0KTsNCisNCisgIGZpbGVlbnRyeSA9IGZvcm0uYXBwZW5kQ2hpbGQoZmlsZWVudHJ5KTsNCisNCisgIHN1Ym1pdGJ1dHRvbiA9IGZvcm0uYXBwZW5kQ2hpbGQoc3VibWl0YnV0dG9uKTsNCisNCisgIGZvcm0gPSBlbGVtZW50LmFwcGVuZENoaWxkKGZvcm0pOw0KKyAgZm9ybS5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsIGlmcmFtZUlEKTsNCisNCisgIC8vIFRoZSBpZnJhbWUgbXVzdCBiZSBhZGRlZCB0byB0aGUgZG9jdW1lbnQgYWZ0ZXIgdGhlIGZvcm0gaGFzIGJlZW4sIG9yIHRoZSB0YXJnZXRpbmcgZmFpbHMuDQorICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7DQorICBpZnJhbWUuc2V0QXR0cmlidXRlKCdzcmMnLCAnYWJvdXQ6YmxhbmsnKTsNCisgIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KKyAgaWZyYW1lLmlkID0gaWZyYW1lLm5hbWUgPSBpZnJhbWVJRDsNCisgIGlmcmFtZS5vbmxvYWQgPSBmdW5jdGlvbigpIHsNCisgICAgdmFyIGRvY0NoZWNrID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudCB8fCBpZnJhbWUuY29udGVudFdpbmRvdzsNCisgICAgaWYgKGRvY0NoZWNrLmxvY2F0aW9uLmhyZWYgPT0gJ2Fib3V0OmJsYW5rJykgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorICAgIC8vIFdoYXQgdG8gZG8gb24gaW1wb3J0PyAgQWRkIGFuIGVudHJ5IHRvIHRoZSBVSSwgSSBndWVzcy4uLg0KKyAgICBhbGVydCgnQWRkIGVudHJ5IGhlcmUnKTsNCisgIH0NCisgIGlmcmFtZSA9IGVsZW1lbnQuYXBwZW5kQ2hpbGQoaWZyYW1lKTsNCisNCit9DQorDQorUFNTZXJ2ZXIucHJvdG90eXBlLnNhdmVEb2N1bWVudCA9IGZ1bmN0aW9uKHBhdGgsIGZpbGVuYW1lLCBkb2N1bWVudFNvdXJjZSwgYXN5bmNDYWxsYmFjaykgew0KKyAgWGluaGEuX3Bvc3RiYWNrKFhpbmhhLmdldFBsdWdpbkRpcigiUFNTZXJ2ZXIiKSArICIvYmFja2VuZC5waHA/dXBsb2FkJnJlcGxhY2U9dHJ1ZSZmaWxlZGF0YT0iICsgZXNjYXBlKGRvY3VtZW50U291cmNlKSsiJmZpbGVuYW1lPSIrZXNjYXBlKHBhdGggKyBmaWxlbmFtZSksDQorICAgICAgICAgICAgICAgICAgbnVsbCwNCisgICAgICAgICAgICAgICAgICBmdW5jdGlvbihyZXNwb25zZSkgeyANCisgICAgICAgICAgICAgICAgICAgIGFzeW5jQ2FsbGJhY2sodHJ1ZSk7DQorICAgICAgICAgICAgICAgICAgfSwNCisgICAgICAgICAgICAgICAgICBmdW5jdGlvbihyZXNwb25zZSkgeyANCisgICAgICAgICAgICAgICAgICAgIGFzeW5jQ2FsbGJhY2soZmFsc2UpOw0KKyAgICAgICAgICAgICAgICAgIH0pOw0KK30NCisNCitQU1NlcnZlci5wcm90b3R5cGUubWFrZUZvbGRlciA9IGZ1bmN0aW9uKGN1cnJlbnRQYXRoLCBmb2xkZXJOYW1lLCBhc3luY0NhbGxiYWNrKSB7DQorICBYaW5oYS5fcG9zdGJhY2soWGluaGEuZ2V0UGx1Z2luRGlyKCJQU1NlcnZlciIpICsgIi9iYWNrZW5kLnBocD9kaXJlY3RvcnkmY3JlYXRlJmRpcm5hbWU9Iitlc2NhcGUoY3VycmVudFBhdGggKyAnLycgKyBmb2xkZXJOYW1lKSwNCisgICAgICAgICAgICAgICAgICBudWxsLA0KKyAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlc3BvbnNlKSB7IA0KKyAgICAgICAgICAgICAgICAgICAgYXN5bmNDYWxsYmFjayh0cnVlKTsNCisgICAgICAgICAgICAgICAgICB9LA0KKyAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlc3BvbnNlKSB7IA0KKyAgICAgICAgICAgICAgICAgICAgYXN5bmNDYWxsYmFjayhmYWxzZSk7DQorICAgICAgICAgICAgICAgICAgfSk7DQorfQ0KKw0KK1BTU2VydmVyLnByb3RvdHlwZS5kZWxldGVFbnRyeSA9IGZ1bmN0aW9uKGVudHJ5LCBhc3luY0NhbGxiYWNrKSB7DQorICBYaW5oYS5fcG9zdGJhY2soWGluaGEuZ2V0UGx1Z2luRGlyKCJQU1NlcnZlciIpICsgIi9iYWNrZW5kLnBocD9maWxlJmRlbGV0ZSZmaWxlbmFtZT0iK2VzY2FwZShlbnRyeS5rZXkpLA0KKyAgICAgICAgICAgICAgICAgIG51bGwsDQorICAgICAgICAgICAgICAgICAgZnVuY3Rpb24ocmVzcG9uc2UpIHsgDQorICAgICAgICAgICAgICAgICAgICBhc3luY0NhbGxiYWNrKHRydWUpOw0KKyAgICAgICAgICAgICAgICAgIH0sDQorICAgICAgICAgICAgICAgICAgZnVuY3Rpb24ocmVzcG9uc2UpIHsgDQorICAgICAgICAgICAgICAgICAgICBhc3luY0NhbGxiYWNrKGZhbHNlKTsNCisgICAgICAgICAgICAgICAgICB9KTsNCit9DQorDQorUFNTZXJ2ZXIucHJvdG90eXBlLm1vdmVFbnRyeSA9IGZ1bmN0aW9uKGVudHJ5LCBjb250YWluZXIsIGFzeW5jQ2FsbGJhY2spIHsNCisgIFhpbmhhLl9wb3N0YmFjayhYaW5oYS5nZXRQbHVnaW5EaXIoIlBTU2VydmVyIikgKyAiL2JhY2tlbmQucGhwP2ZpbGUmcmVuYW1lJmZpbGVuYW1lPSIrZXNjYXBlKGVudHJ5LmtleSkrJyZuZXduYW1lPScrZXNjYXBlKGNvbnRhaW5lci5rZXkgKyAnLycgKyBlbnRyeS5uYW1lKSwNCisgICAgICAgICAgICAgICAgICBudWxsLA0KKyAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGpzb24pIHsgDQorICAgICAgICAgICAgICAgICAgICBhc3luY0NhbGxiYWNrKHRydWUpOw0KKyAgICAgICAgICAgICAgICAgIH0sDQorICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oanNvbikgeyANCisgICAgICAgICAgICAgICAgICAgIGFzeW5jQ2FsbGJhY2soZmFsc2UpOw0KKyAgICAgICAgICAgICAgICAgIH0pOw0KK30NCisNCitQU1NlcnZlci5wcm90b3R5cGUuY29weUVudHJ5ID0gZnVuY3Rpb24oZW50cnksIGFzeW5jQ2FsbGJhY2spIHsNCisgIFhpbmhhLl9wb3N0YmFjayhYaW5oYS5nZXRQbHVnaW5EaXIoIlBTU2VydmVyIikgKyAiL2JhY2tlbmQucGhwP2ZpbGUmY29weSZmaWxlbmFtZT0iK2VzY2FwZShlbnRyeS5rZXkpLA0KKyAgICAgICAgICAgICAgICAgIG51bGwsDQorICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oanNvbikgeyANCisgICAgICAgICAgICAgICAgICAgIHZhciBuZXdlbnRyeSA9IGV2YWwoJygnICsganNvbiArICcpJyk7DQorICAgICAgICAgICAgICAgICAgICBhc3luY0NhbGxiYWNrKHRydWUsIG5ld2VudHJ5KTsNCisgICAgICAgICAgICAgICAgICB9LA0KKyAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGpzb24pIHsgDQorICAgICAgICAgICAgICAgICAgICB2YXIgbmV3ZW50cnkgPSBldmFsKCcoJyArIGpzb24gKyAnKScpOw0KKyAgICAgICAgICAgICAgICAgICAgYXN5bmNDYWxsYmFjayhmYWxzZSwgbmV3ZW50cnkpOw0KKyAgICAgICAgICAgICAgICAgIH0pOw0KK30NCisNCit9KSgpOw0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvYmFja2VuZC5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2JhY2tlbmQucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OGVkOWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2JhY2tlbmQucGhwCkBAIC0wLDAgKzEsODMwIEBACis8P3BocAorLyoqCisgKiBGaWxlIE9wZXJhdGlvbnMgQVBJCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBuZXcgYmFja2VuZCBGaWxlIE9wZXJhdGlvbnMgQVBJIHVzZWQgZm9yIFhpbmhhIEZpbGUKKyAqIFN0b3JhZ2UuICBJdCB3aWxsIHNlcnZlIGFzIHRoZSBkb2N1bWVudGF0aW9uIGZvciBvdGhlcnMgd2lzaGluZyB0byBpbXBsZW1lbnQKKyAqIHRoZSBiYWNrZW5kIGluIHRoZWlyIG93biBsYW5ndWFnZSwgYXMgd2VsbCBhcyB0aGUgUEhQIGltcGxlbWVudGF0aW9uLiAgVGhlCisgKiByZXR1cm4gZGF0YSB3aWxsIGNvbWUgdmlhIHRoZSBIVFRQIHN0YXR1cyBpbiB0aGUgY2FzZSBvZiBhbiBlcnJvciwgb3IgSlNPTgorICogZGF0YSB3aGVuIGNhbGwgaGFzIHN1Y2NlZWRlZC4KKyAqCisgKiBTb21lIGV4YW1wbGVzIG9mIHRoZSBVUkxTIGFzc29jaWF0ZWQgd2l0aCB0aGlzIEFQSToKKyAqICoqIEZpbGUgT3BlcmF0aW9ucyAqKgorICogP2ZpbGUmcmVuYW1lJmZpbGVuYW1lPScnJm5ld25hbWU9JycKKyAqID9maWxlJmNvcHkmZmlsZW5hbWU9JycKKyAqID9maWxlJmRlbGV0ZSZmaWxlbmFtZT0nJworICoKKyAqICoqIERpcmVjdG9yeSBPcGVyYXRpb25zICoqCisgKiA/ZGlyZWN0b3J5Jmxpc3RpbmcKKyAqID9kaXJlY3RvcnkmY3JlYXRlJmRpcm5hbWU9JycKKyAqID9kaXJlY3RvcnkmZGVsZXRlJmRpcm5hbWU9JycKKyAqID9kaXJlY3RvcnkmcmVuYW1lJmRpcm5hbWU9JycmbmV3bmFtZT0nJworICoKKyAqICoqIEltYWdlIE9wZXJhdGlvbnMgKioKKyAqID9pbWFnZSZmaWxlbmFtZT0nJyZbc2NhbGV8cm90YXRlfGNvbnZlcnRdCisgKgorICogKiogVXBsb2FkICoqCisgKiA/dXBsb2FkJmZpbGVkYXRhPVtiaW5hcnl8dGV4dF0mZmlsZW5hbWU9JycmcmVwbGFjZT1bdHJ1ZXxmYWxzZV0KKyAqCisgKiBAYXV0aG9yIERvdWdsYXMgTWF5bGUgPGRvdWdsYXNAb3BlbnBsYW5zLm9yZz4KKyAqIEB2ZXJzaW9uIDEuMAorICogQHBhY2thZ2UgUGVyc2lzdGVudFN0b3JhZ2UKKyAqCisgKi8KKworLyoqCisgKiBDb25maWcgZmlsZQorICovCityZXF1aXJlX29uY2UoJ2NvbmZpZy5pbmMucGhwJyk7CisKKworLy8gU3RyaXAgc2xhc2hlcyBpZiBNUUdQQyBpcyBvbgorc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApOworaWYoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkKK3sKKyAgJHRvX2NsZWFuID0gYXJyYXkoJiRfR0VULCAmJF9QT1NULCAmJF9SRVFVRVNULCAmJF9DT09LSUUpOworICB3aGlsZShjb3VudCgkdG9fY2xlYW4pKQorICB7CisgICAgJGNsZWFuaW5nID0mICR0b19jbGVhblthcnJheV9wb3AoJGp1bmsgPSBhcnJheV9rZXlzKCR0b19jbGVhbikpXTsKKyAgICB1bnNldCgkdG9fY2xlYW5bYXJyYXlfcG9wKCRqdW5rID0gYXJyYXlfa2V5cygkdG9fY2xlYW4pKV0pOworICAgIGZvcmVhY2goYXJyYXlfa2V5cygkY2xlYW5pbmcpIGFzICRrKQorICAgIHsKKyAgICAgIGlmKGlzX2FycmF5KCRjbGVhbmluZ1ska10pKQorICAgICAgeworICAgICAgICAkdG9fY2xlYW5bXSA9JiAkY2xlYW5pbmdbJGtdOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAkY2xlYW5pbmdbJGtdID0gc3RyaXBzbGFzaGVzKCRjbGVhbmluZ1ska10pOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisvLyBTZXQgdGhlIHJldHVybiBoZWFkZXJzIGZvciBhIEpTT04gcmVzcG9uc2UuCitoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUnKTsKK2hlYWRlcignRXhwaXJlczogTW9uLCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVQnKTsKKy8vaGVhZGVyKCdDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb24nKTsKKworCisvKiojQCsKKyAqIENvbnN0YW50cworICoKKyAqIFNpbmNlIHRoaXMgaXMgYmVpbmcgdXNlZCBhcyBwYXJ0IG9mIGEgd2ViIGludGVyZmFjZSwgd2UnbGwgc2V0IHNvbWUgcmF0aGVyCisgKiBjb25zZXJ2YXRpdmUgbGltaXRzIHRvIGtlZXAgZnJvbSBvdmVybG9hZGluZyB0aGUgdXNlciBvciB0aGUgYmFja2VuZC4KKyAqLworCisvKioKKyAqIFRoaXMgaXMgdGhlIG1heGltdW0gZm9sZGVyIGRlcHRoIHRvIHByZXNlbnQgdG8gdGhlIHVzZXIKKyAqLworZGVmaW5lKCdNQVhfREVQVEgnLCAxMCk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZmlsZSBlbnRyaWVzIHBlciBmb2xkZXIgdG8gc2hvdyB0byB0aGUgdXNlciwKKyAqLworZGVmaW5lKCdNQVhfRklMRVNfUEVSX0ZPTERFUicsIDUwKTsKKworLyoqCisgKiBUaGlzIGFycmF5IGNvbnRhaW5zIHRoZSBkZWZhdWx0IEhUVFAgUmVzcG9uc2UgbWVzc2FnZXMKKyAqCisgKi8KKyRIVFRQX0VSUk9SUyA9IGFycmF5KAorCSdIVFRQX1NVQ0NFU1NfT0snID0+IGFycmF5KCdjb2RlJyA9PiAyMDAsICdtZXNzYWdlJyA9PiAnT0snKSwKKwknSFRUUF9TVUNDRVNTX0NSRUFURUQnID0+IGFycmF5KCdjb2RlJyA9PiAyMDEsICdtZXNzYWdlJyA9PiAnQ3JlYXRlZCcpLAorCSdIVFRQX1NVQ0NFU1NfQUNDRVBURUQnID0+IGFycmF5KCdjb2RlJyA9PiAyMDIsICdtZXNzYWdlJyA9PiAnQWNjZXB0ZWQnKSwKKwknSFRUUF9TVUNDRVNTX05PTl9BVVRIT1JJVEFUSVZFJyA9PiBhcnJheSgnY29kZScgPT4gMjAzLCAnbWVzc2FnZScgPT4gJ05vbi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uJyksCisJJ0hUVFBfU1VDQ0VTU19OT19DT05URU5UJyA9PiBhcnJheSgnY29kZScgPT4gMjA0LCAnbWVzc2FnZScgPT4gJ05vIENvbnRlbnQnKSwKKwknSFRUUF9TVUNDRVNTX1JFU0VUX0NPTlRFTlQnID0+IGFycmF5KCdjb2RlJyA9PiAyMDUsICdtZXNzYWdlJyA9PiAnUmVzZXQgQ29udGVudCcpLAorCSdIVFRQX1NVQ0NFU1NfUEFSVElBTF9DT05URU5UJyA9PiBhcnJheSgnY29kZScgPT4gMjA2LCAnbWVzc2FnZScgPT4gJ1BhcnRpYWwgQ29udGVudCcpLAorCisJJ0hUVFBfUkVESVJFQ1RJT05fTVVMVElQTEVfQ0hPSUNFUycgPT4gYXJyYXkoJ2NvZGUnID0+IDMwMCwgJ21lc3NhZ2UnID0+ICdNdWx0aXBsZSBDaG9pY2VzJyksCisJJ0hUVFBfUkVESVJFQ1RJT05fUEVSTUFORU5UJyA9PiBhcnJheSgnY29kZScgPT4gMzAxLCAnbWVzc2FnZScgPT4gJ01vdmVkIFBlcm1hbmVudGx5JyksCisJJ0hUVFBfUkVESVJFQ1RJT05fRk9VTkQnID0+IGFycmF5KCdjb2RlJyA9PiAzMDIsICdtZXNzYWdlJyA9PiAnRm91bmQnKSwKKwknSFRUUF9SRURJUkVDVElPTl9TRUVfT1RIRVInID0+IGFycmF5KCdjb2RlJyA9PiAzMDMsICdtZXNzYWdlJyA9PiAnU2VlIE90aGVyJyksCisJJ0hUVFBfUkVESVJFQ1RJT05fTk9UX01PRElGSUVEJyA9PiBhcnJheSgnY29kZScgPT4gMzA0LCAnbWVzc2FnZScgPT4gJ05vdCBNb2RpZmllZCcpLAorCSdIVFRQX1JFRElSRUNUSU9OX1VTRV9QUk9YWScgPT4gYXJyYXkoJ2NvZGUnID0+IDMwNSwgJ21lc3NhZ2UnID0+ICdVc2UgUHJveHknKSwKKwknSFRUUF9SRURJUkVDVElPTl9VTlVTRUQnID0+IGFycmF5KCdjb2RlJyA9PiAzMDYsICdtZXNzYWdlJyA9PiAnKFVudXNlZCknKSwKKwknSFRUUF9SRURJUkVDVElPTl9URU1QT1JBUlknID0+IGFycmF5KCdjb2RlJyA9PiAzMDcsICdtZXNzYWdlJyA9PiAnVGVtcG9yYXJ5IFJlZGlyZWN0JyksCisKKwknSFRUUF9DTElFTlRfQkFEX1JFUVVFU1QnID0+IGFycmF5KCdjb2RlJyA9PiA0MDAsICdtZXNzYWdlJyA9PiAnQmFkIFJlcXVlc3QnKSwKKwknSFRUUF9DTElFTlRfVU5BVVRIT1JJWkVEJyA9PiBhcnJheSgnY29kZScgPT4gNDAxLCAnbWVzc2FnZScgPT4gJ1VuYXV0aG9yaXplZCcpLAorCSdIVFRQX0NMSUVOVF9QQVlNRU5UX1JFUVVJUkVEJyA9PiBhcnJheSgnY29kZScgPT4gNDAyLCAnbWVzc2FnZScgPT4gJ1BheW1lbnQgUmVxdWlyZWQnKSwKKwknSFRUUF9DTElFTlRfRk9SQklEREVOJyA9PiBhcnJheSgnY29kZScgPT4gNDAzLCAnbWVzc2FnZScgPT4gJ0ZvcmJpZGRlbicpLAorCSdIVFRQX0NMSUVOVF9OT1RfRk9VTkQnID0+IGFycmF5KCdjb2RlJyA9PiA0MDQsICdtZXNzYWdlJyA9PiAnTm90IEZvdW5kJyksCisJJ0hUVFBfQ0xJRU5UX01FVEhPRF9OT1RfQUxMT1dFRCcgPT4gYXJyYXkoJ2NvZGUnID0+IDQwNSwgJ21lc3NhZ2UnID0+ICdNZXRob2QgTm90IEFsbG93ZWQnKSwKKwknSFRUUF9DTElFTlRfTk9UX0FDQ0VQVEFCTEUnID0+IGFycmF5KCdjb2RlJyA9PiA0MDYsICdtZXNzYWdlJyA9PiAnTm90IEFjY2VwdGFibGUnKSwKKwknSFRUUF9DTElFTlRfUFJPWFlfQVVUSF9SRVFVSVJFRCcgPT4gYXJyYXkoJ2NvZGUnID0+IDQwNywgJ21lc3NhZ2UnID0+ICdQcm94eSBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCcpLAorCSdIVFRQX0NMSUVOVF9SRVFVRVNUX1RJTUVPVVQnID0+IGFycmF5KCdjb2RlJyA9PiA0MDgsICdtZXNzYWdlJyA9PiAnUmVxdWVzdCBUaW1lb3V0JyksCisJJ0hUVFBfQ0xJRU5UX0NPTkZMSUNUJyA9PiBhcnJheSgnY29kZScgPT4gNDA5LCAnbWVzc2FnZScgPT4gJ0NvbmZsaWN0JyksCisJJ0hUVFBfQ0xJRU5UX0dPTkUnID0+IGFycmF5KCdjb2RlJyA9PiA0MTAsICdtZXNzYWdlJyA9PiAnR29uZScpLAorCSdIVFRQX0NMSUVOVF9MRU5HVEhfUkVRVUlSRUQnID0+IGFycmF5KCdjb2RlJyA9PiA0MTEsICdtZXNzYWdlJyA9PiAnTGVuZ3RoIFJlcXVpcmVkJyksCisJJ0hUVFBfQ0xJRU5UX1BSRUNPTkRJVElPTl9GQUlMRUQnID0+IGFycmF5KCdjb2RlJyA9PiA0MTIsICdtZXNzYWdlJyA9PiAnUHJlY29uZGl0aW9uIEZhaWxlZCcpLAorCSdIVFRQX0NMSUVOVF9SRVFVRVNUX1RPT19MQVJHRScgPT4gYXJyYXkoJ2NvZGUnID0+IDQxMywgJ21lc3NhZ2UnID0+ICdSZXF1ZXN0IEVudGl0eSBUb28gTGFyZ2UnKSwKKwknSFRUUF9DTElFTlRfUkVRVUVTVF9VUklfVE9PX0xBUkdFJyA9PiBhcnJheSgnY29kZScgPT4gNDE0LCAnbWVzc2FnZScgPT4gJ1JlcXVlc3QtVVJJIFRvbyBMb25nJyksCisJJ0hUVFBfQ0xJRU5UX1VOU1VQUE9SVEVEX01FRElBX1RZUEUnID0+IGFycmF5KCdjb2RlJyA9PiA0MTUsICdtZXNzYWdlJyA9PiAnVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZScpLAorCSdIVFRQX0NMSUVOVF9SRVFVRVNURURfUkFOR0VfTk9UX1BPU1NJQkxFJyA9PiBhcnJheSgnY29kZScgPT4gNDE2LCAnbWVzc2FnZScgPT4gJ1JlcXVlc3RlZCBSYW5nZSBOb3QgU2F0aXNmaWFibGUnKSwKKwknSFRUUF9DTElFTlRfRVhQRUNUQVRJT05fRkFJTEVEJyA9PiBhcnJheSgnY29kZScgPT4gNDE3LCAnbWVzc2FnZScgPT4gJ0V4cGVjdGF0aW9uIEZhaWxlZCcpLAorCisJJ0hUVFBfU0VSVkVSX0lOVEVSTkFMJyA9PiBhcnJheSgnY29kZScgPT4gNTAwLCAnbWVzc2FnZScgPT4gJ0ludGVybmFsIFNlcnZlciBFcnJvcicpLAorCSdIVFRQX1NFUlZFUl9OT1RfSU1QTEVNRU5URUQnID0+IGFycmF5KCdjb2RlJyA9PiA1MDEsICdtZXNzYWdlJyA9PiAnTm90IEltcGxlbWVudGVkJyksCisJJ0hUVFBfU0VSVkVSX0JBRF9HQVRFV0FZJyA9PiBhcnJheSgnY29kZScgPT4gNTAyLCAnbWVzc2FnZScgPT4gJ0JhZCBHYXRld2F5JyksCisJJ0hUVFBfU0VSVkVSX1NFUlZJQ0VfVU5BVkFJTEFCTEUnID0+IGFycmF5KCdjb2RlJyA9PiA1MDMsICdtZXNzYWdlJyA9PiAnU2VydmljZSBVbmF2YWlsYWJsZScpLAorCSdIVFRQX1NFUlZFUl9HQVRFV0FZX1RJTUVPVVQnID0+IGFycmF5KCdjb2RlJyA9PiA1MDQsICdtZXNzYWdlJyA9PiAnR2F0ZXdheSBUaW1lb3V0JyksCisJJ0hUVFBfU0VSVkVSX1VOU1VQUE9SVEVEX1ZFUlNJT04nID0+IGFycmF5KCdjb2RlJyA9PiA1MDUsICdtZXNzYWdlJyA9PiAnSFRUUCBWZXJzaW9uIG5vdCBzdXBwb3J0ZWQnKQorICAgICk7CisKKy8qKgorICogVGhpcyBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIGRldGVjdCByZXNlcnZlZCBvciBkYW5nZXJvdXMgZmlsZW5hbWVzLgorICogTW9zdCBOVEZTIHNwZWNpYWwgZmlsZW5hbWVzIGJlZ2luIHdpdGggYSBkb2xsYXIgc2lnbiAoJyQnKSwgYW5kIG1vc3QgVW5peAorICogc3BlY2lhbCBmaWxlbmFtZXMgYmVnaW4gd2l0aCBhIHBlcmlvZCAoLiksIHNvIHdlJ2xsIGtlZXAgdGhlbSBvdXQgb2YgdGhpcworICogbGlzdCBhbmQganVzdCBwcmV2ZW50IHRob3NlIHR3byBjaGFyYWN0ZXJzIGluIHRoZSBmaXJzdCBwb3NpdGlvbi4gIFRoZSByZXN0CisgKiBvZiB0aGUgc3BlY2lhbCBmaWxlbmFtZXMgYXJlIGluY2x1ZGVkIGJlbG93LgorICovCitkZWZpbmUoJ1JFU0VSVkVEX0ZJTEVfTkFNRVMnLCAncGFnZWZpbGVcLnN5c3xhXC5vdXR8Y29yZScpOworLyoqCisgKiBUaGlzIGlzIGEgcmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gZGV0ZWN0IGludmFsaWQgZmlsZSBuYW1lcy4gIEl0J3MgbW9yZQorICogc3RyaWN0IHRoYW4gbmVjZXNzYXJ5LCB0byBiZSB2YWxpZCBtdWx0aS1wbGF0Zm9ybSwgYnV0IG5vdCBwb3NpeC1zdHJpY3QKKyAqIGJlY2F1c2Ugd2Ugd2FudCB0byBhbGxvdyB1bmljb2RlIGZpbGVuYW1lcy4gIFdlIGRvLCBob3dldmVyLCBhbGxvdyBwYXRoCisgKiBzZXBlcmF0b3JzIGluIHRoZSBmaWxlbmFtZSBiZWNhdXNlIHRoZSBmaWxlIGNvdWxkIGV4aXN0IGluIGEgc3ViZGlyZWN0b3J5LgorICovCitkZWZpbmUoJ0lOVkFMSURfRklMRV9OQU1FJywnXlsuJF18XignIC4gUkVTRVJWRURfRklMRV9OQU1FUyAuICcpJHxbPyUqOnwiPD5dJyk7CisvKiojQC0qLworCitmdW5jdGlvbiBtYWluKCRhcmd1bWVudHMpIHsKKyAgICAkY29uZmlnID0gZ2V0X2NvbmZpZyh0cnVlKTsKKworICAgIC8vIFRyaWdnZXIgYXV0aGVudGljYXRpb24gaWYgaXQncyBjb25maWd1cmVkLgorICAgIGlmICgkY29uZmlnWydjYXBhYmlsaXRpZXMnXVsndXNlcl9zdG9yYWdlJ10gJiYgZW1wdHkoJF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXSkpIHsKKyAgICAgICAgaGVhZGVyKCdXV1ctQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT0iWGluaGEgUGVyc2lzdGVudCBTdG9yYWdlIicpOworICAgICAgICBoZWFkZXIoJ0hUVFAvMS4wIDQwMSBVbmF1dGhvcml6ZWQnKTsKKyAgICAgICAgZWNobyAiWW91IG11c3QgbG9naW4gaW4gb3JkZXIgdG8gdXNlIFBlcnNpc3RlbnQgU3RvcmFnZSI7CisgICAgICAgIGV4aXQ7CisgICAgfQorICAgIGlmICghaW5wdXRfdmFsaWQoJGFyZ3VtZW50cywgJGNvbmZpZ1snY2FwYWJpbGl0aWVzJ10pKSB7CisgICAgICAgIGh0dHBfZXJyb3JfZXhpdCgpOworICAgIH0KKyAgICBpZiAoIW1ldGhvZF92YWxpZCgkYXJndW1lbnRzKSkgeworICAgICAgICBodHRwX2Vycm9yX2V4aXQoJ0hUVFBfQ0xJRU5UX01FVEhPRF9OT1RfQUxMT1dFRCcpOworICAgIH0KKyAgICBpZiAoIWRpc3BhdGNoKCRhcmd1bWVudHMpKSB7CisgICAgICAgIGh0dHBfZXJyb3JfZXhpdCgpOworICAgIH0KKyAgICBleGl0KCk7Cit9CisKK21haW4oJF9SRVFVRVNUICsgJF9GSUxFUyk7CisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gICAgICAgICAgICAgICAgICAgICAgIEhlbHBlciBGdW5jdGlvbnMgICAgICAgICAgICAgICAKKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8qKgorICogVGFrZSB0aGUgY2FsbCBhbmQgcHJvcGVybHkgZGlzcGF0Y2ggaXQgdG8gdGhlIG1ldGhvZHMgYmVsb3cuICBUaGlzIG1ldGhvZAorICogYXNzdW1lcyB2YWxpZCBpbnB1dC4KKyAqLworZnVuY3Rpb24gZGlzcGF0Y2goJGFyZ3VtZW50cykgeworICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdmaWxlJywgJGFyZ3VtZW50cykpIHsKKyAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ3JlbmFtZScsICRhcmd1bWVudHMpKSB7CisgICAgICAgICAgICBpZiAoIWZpbGVfZGlyZWN0b3J5X3JlbmFtZSgkYXJndW1lbnRzWydmaWxlbmFtZSddLCAkYXJndW1lbnRzWyduZXduYW1lJ10sIHdvcmtpbmdfZGlyZWN0b3J5KCkpKSB7CisgICAgICAgICAgICAgICAgaHR0cF9lcnJvcl9leGl0KCdIVFRQX0NMSUVOVF9GT1JCSURERU4nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdjb3B5JywgJGFyZ3VtZW50cykpIHsKKyAgICAgICAgICAgIGlmICghJG5ld2VudHJ5ID0gZmlsZV9jb3B5KCRhcmd1bWVudHNbJ2ZpbGVuYW1lJ10sIHdvcmtpbmdfZGlyZWN0b3J5KCkpKSB7CisgICAgICAgICAgICAgICAgaHR0cF9lcnJvcl9leGl0KCdIVFRQX0NMSUVOVF9GT1JCSURERU4nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJG5ld2VudHJ5KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdkZWxldGUnLCAkYXJndW1lbnRzKSkgeworICAgICAgICAgICAgaWYgKCFmaWxlX2RlbGV0ZSgkYXJndW1lbnRzWydmaWxlbmFtZSddLCB3b3JraW5nX2RpcmVjdG9yeSgpKSkgeworICAgICAgICAgICAgICAgIGh0dHBfZXJyb3JfZXhpdCgnSFRUUF9DTElFTlRfRk9SQklEREVOJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnZGlyZWN0b3J5JywgJGFyZ3VtZW50cykpIHsKKyAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ2xpc3RpbmcnLCAkYXJndW1lbnRzKSkgeworICAgICAgICAgICAgZWNobyBqc29uX2VuY29kZShkaXJlY3RvcnlfbGlzdGluZygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdjcmVhdGUnLCAkYXJndW1lbnRzKSkgeworICAgICAgICAgICAgaWYgKCFkaXJlY3RvcnlfY3JlYXRlKCRhcmd1bWVudHNbJ2Rpcm5hbWUnXSwgd29ya2luZ19kaXJlY3RvcnkoKSkpIHsKKyAgICAgICAgICAgICAgICBodHRwX2Vycm9yX2V4aXQoJ0hUVFBfQ0xJRU5UX0ZPUkJJRERFTicpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ2RlbGV0ZScsICRhcmd1bWVudHMpKSB7CisgICAgICAgICAgICBpZiAoIWRpcmVjdG9yeV9kZWxldGUoJGFyZ3VtZW50c1snZGlybmFtZSddLCB3b3JraW5nX2RpcmVjdG9yeSgpKSkgeworICAgICAgICAgICAgICAgIGh0dHBfZXJyb3JfZXhpdCgnSFRUUF9DTElFTlRfRk9SQklEREVOJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygncmVuYW1lJywgJGFyZ3VtZW50cykpIHsKKyAgICAgICAgICAgIGlmICghZmlsZV9kaXJlY3RvcnlfcmVuYW1lKCRhcmd1bWVudHNbJ2Rpcm5hbWUnXSwgJGFyZ3VtZW50c1snbmV3bmFtZSddLCB3b3JraW5nX2RpcmVjdG9yeSgpKSkgeworICAgICAgICAgICAgICAgIGh0dHBfZXJyb3JfZXhpdCgnSFRUUF9DTElFTlRfRk9SQklEREVOJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnaW1hZ2UnLCAkYXJndW1lbnRzKSkgeworICAgIH0KKyAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygndXBsb2FkJywgJGFyZ3VtZW50cykpIHsKKyAgICAgICAgc3RvcmVfdXBsb2FkZWRfZmlsZSgkYXJndW1lbnRzWydmaWxlbmFtZSddLCAkYXJndW1lbnRzWydmaWxlZGF0YSddLCB3b3JraW5nX2RpcmVjdG9yeSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIFZhbGlkYXRpb24gb2YgdGhlIEhUVFAgTWV0aG9kLiAgRm9yIG9wZXJhdGlvbnMgdGhhdCBtYWtlIGNoYW5nZXMgd2UgcmVxdWlyZQorICogUE9TVC4gIFRvIGVyciBvbiB0aGUgc2lkZSBvZiBzYWZldHksIHdlJ2xsIG9ubHkgYWxsb3cgR0VUIGZvciBrbm93biBzYWZlCisgKiBvcGVyYXRpb25zLiAgVGhpcyB3YXksIGlmIHRoZSBBUEkgaXMgZXh0ZW5kZWQsIGFuZCB0aGUgbWV0aG9kIGlzIG5vdAorICogdXBkYXRlZCwgd2Ugd2lsbCBub3QgYWNjaWRlbnRhbGx5IGV4cG9zZSBub24taWRlbXBvdGVudCBtZXRob2RzIHRvIEdFVC4KKyAqIFRoaXMgbWV0aG9kIGNhbiBvbmx5IGNvcnJlY3RseSB2YWxpZGF0ZSB0aGUgb3BlcmF0aW9uIGlmIHRoZSBpbnB1dCBpcworICogYWxyZWFkeSBrbm93biB0byBiZSB2YWxpZC4KKyAqCisgKiBAcGFyYW0gYXJyYXkgJGFyZ3VtZW50cyBUaGUgYXJndW1lbnRzIGFycmF5IHJlY2VpdmVkIGJ5IHRoZSBwYWdlLgorICogQHJldHVybiBib29sZWFuIFdoZXRoZXIgb3Igbm90IHRoZSBIVFRQIG1ldGhvZCBpcyBjb3JyZWN0IGZvciB0aGUgZ2l2ZW4gaW5wdXQuCisgKi8KK2Z1bmN0aW9uIG1ldGhvZF92YWxpZCgkYXJndW1lbnRzKSB7CisgICAgLy8gV2UgYXNzdW1lIHRoYXQgdGhlIG9ubHkKKyAgICAkbWV0aG9kID0gJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ107CisKKyAgICBpZiAoJG1ldGhvZCA9PSAnR0VUJykgeworICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ2RpcmVjdG9yeScsICRhcmd1bWVudHMpICYmIGFycmF5X2tleV9leGlzdHMoJ2xpc3RpbmcnLCAkYXJndW1lbnRzKSkgeworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCRtZXRob2QgPT0gJ1BPU1QnKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogVmFsaWRhdGlvbiBvZiB0aGUgdXNlciBpbnB1dC4gIFdlJ2xsIHZlcmlmeSB3aGF0IHdlIHJlY2VpdmUgZnJvbSB0aGUgdXNlciwKKyAqIGFuZCBzZW5kIGFuIGVycm9yIGluIHRoZSBjYXNlIG9mIG1hbGZvcm1lZCBpbnB1dC4KKyAqCisgKiBTb21lIGV4YW1wbGVzIG9mIHRoZSBVUkxTIGFzc29jaWF0ZWQgd2l0aCB0aGlzIEFQSToKKyAqICoqIEZpbGUgT3BlcmF0aW9ucyAqKgorICogP2ZpbGUmZGVsZXRlJmZpbGVuYW1lPScnCisgKiA/ZmlsZSZjb3B5JmZpbGVuYW1lPScnCisgKiA/ZmlsZSZyZW5hbWUmZmlsZW5hbWU9JycmbmV3bmFtZT0nJworICoKKyAqICoqIERpcmVjdG9yeSBPcGVyYXRpb25zICoqCisgKiA/ZGlyZWN0b3J5Jmxpc3RpbmcKKyAqID9kaXJlY3RvcnkmY3JlYXRlJmRpcm5hbWU9JycKKyAqID9kaXJlY3RvcnkmZGVsZXRlJmRpcm5hbWU9JycKKyAqID9kaXJlY3RvcnkmcmVuYW1lJmRpcm5hbWU9JycmbmV3bmFtZT0nJworICoKKyAqICoqIEltYWdlIE9wZXJhdGlvbnMgKioKKyAqID9pbWFnZSZmaWxlbmFtZT0nJyZbc2NhbGV8cm90YXRlfGNvbnZlcnRdCisgKgorICogKiogVXBsb2FkICoqCisgKiA/dXBsb2FkJmZpbGVkYXRhPVtiaW5hcnl8dGV4dF0mZmlsZW5hbWU9JycmcmVwbGFjZT1bdHJ1ZXxmYWxzZV0KKyAqCisgKiBAcGFyYW0gYXJyYXkgJGFyZ3VtZW50cyBUaGUgYXJndW1lbnRzIGFycmF5IHJlY2VpdmVkIGJ5IHRoZSBwYWdlLgorICogQHBhcmFtIGFycmF5ICRjYXBhYmlsaXRpZXMgVGhlIGNhcGFiaWxpdGllcyBjb25maWcgYXJyYXkgdXNlZCB0byBsaW1pdCBvcGVyYXRpb25zLgorICogQHJldHVybiBib29sZWFuIFdoZXRoZXIgb3Igbm90IHRoZSBpbnB1dCByZWNlaXZlZCBpcyB2YWxpZC4KKyAqLworZnVuY3Rpb24gaW5wdXRfdmFsaWQoJGFyZ3VtZW50cywgJGNhcGFiaWxpdGllcykgeworICAgIC8vIFRoaXMgaXMgZ29pbmcgdG8gYmUgcmVhbGx5IHVnbHkgY29kZSBiZWNhdXNlIGl0J3MgYmFzaWNhbGx5IGEgREZBIGZvcgorICAgIC8vIHBhcnNpbmcgYXJndW1lbnRzLiAgVG8gbWFrZSB0aGluZ3MgYSBsaXR0bGUgY2xlYXJlciwgSSdsbCBwdXQgYQorICAgIC8vIHBzZXVkby1CTkYgZm9yIGVhY2ggYmxvY2sgdG8gc2hvdyB0aGUgZGVjaXNpb24gc3RydWN0dXJlLgorICAgIC8vCisgICAgLy8gZmlsZVtlbXB0eV0gZmlsZW5hbWVbdmFsaWRdIChkZWxldGVbZW1wdHldIHwgY29weVtlbXB0eV0gfCAocmVuYW1lW2VtcHR5XSBuZXduYW1lW3ZhbGlkXSkpCisgICAgaWYgKCRjYXBhYmlsaXRpZXNbJ2ZpbGVfb3BlcmF0aW9ucyddICYmCisgICAgICAgIGFycmF5X2tleV9leGlzdHMoJ2ZpbGUnLCAkYXJndW1lbnRzKSAmJgorICAgICAgICBlbXB0eSgkYXJndW1lbnRzWydmaWxlJ10pICYmCisgICAgICAgIGFycmF5X2tleV9leGlzdHMoJ2ZpbGVuYW1lJywgJGFyZ3VtZW50cykgJiYKKyAgICAgICAgIWVyZWcoSU5WQUxJRF9GSUxFX05BTUUsICRhcmd1bWVudHNbJ2ZpbGVuYW1lJ10pKSB7CisKKyAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ2RlbGV0ZScsICRhcmd1bWVudHMpICYmCisgICAgICAgICAgICBlbXB0eSgkYXJndW1lbnRzWydkZWxldGUnXSkgJiYKKyAgICAgICAgICAgIDMgPT0gY291bnQoJGFyZ3VtZW50cykpIHsKKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnY29weScsICRhcmd1bWVudHMpICYmCisgICAgICAgICAgICBlbXB0eSgkYXJndW1lbnRzWydjb3B5J10pICYmCisgICAgICAgICAgICAzID09IGNvdW50KCRhcmd1bWVudHMpKSB7CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ3JlbmFtZScsICRhcmd1bWVudHMpICYmCisgICAgICAgICAgICBlbXB0eSgkYXJndW1lbnRzWydyZW5hbWUnXSkgJiYKKyAgICAgICAgICAgIDQgPT0gY291bnQoJGFyZ3VtZW50cykpIHsKKworICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ25ld25hbWUnLCAkYXJndW1lbnRzKSAmJgorICAgICAgICAgICAgICAgICFlcmVnKElOVkFMSURfRklMRV9OQU1FLCAkYXJndW1lbnRzWyduZXduYW1lJ10pKSB7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2VpZiAoYXJyYXlfa2V5X2V4aXN0cygnZmlsZScsICRhcmd1bWVudHMpKSB7CisgICAgICAgIC8vIFRoaXMgaXNuJ3QgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UnbGwgZmFsbCB0aHJvdWdoIHRvIGZhbHNlLCBidXQgSSdkCisgICAgICAgIC8vIHJhdGhlciByZXR1cm4gZWFybGllciB0aGFuIGxhdGVyLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gZGlyZWN0b3J5W2VtcHR5XSAobGlzdGluZ1tlbXB0eV0gfCAoZGlybmFtZVt2YWxpZF0gKGNyZWF0ZVtlbXB0eV0gfCBkZWxldGVbZW1wdHldIHwgKHJlbmFtZVtlbXB0eV0gbmV3bmFtZVt2YWxpZF0pKSkpCisgICAgaWYgKCRjYXBhYmlsaXRpZXNbJ2RpcmVjdG9yeV9vcGVyYXRpb25zJ10gJiYKKyAgICAgICAgYXJyYXlfa2V5X2V4aXN0cygnZGlyZWN0b3J5JywgJGFyZ3VtZW50cykgJiYKKyAgICAgICAgZW1wdHkoJGFyZ3VtZW50c1snZGlyZWN0b3J5J10pKSB7CisKKyAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ2xpc3RpbmcnLCAkYXJndW1lbnRzKSAmJgorICAgICAgICAgICAgZW1wdHkoJGFyZ3VtZW50c1snbGlzdGluZyddKSAmJgorICAgICAgICAgICAgMiA9PSBjb3VudCgkYXJndW1lbnRzKSkgeworCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdkaXJuYW1lJywgJGFyZ3VtZW50cykgJiYKKyAgICAgICAgICAgICFlcmVnKElOVkFMSURfRklMRV9OQU1FLCAkYXJndW1lbnRzWydkaXJuYW1lJ10pKSB7CisKKyAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdjcmVhdGUnLCAkYXJndW1lbnRzKSAmJgorICAgICAgICAgICAgICAgIGVtcHR5KCRhcmd1bWVudHNbJ2NyZWF0ZSddKSAmJgorICAgICAgICAgICAgICAgIDMgPT0gY291bnQoJGFyZ3VtZW50cykpIHsKKworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnZGVsZXRlJywgJGFyZ3VtZW50cykgJiYKKyAgICAgICAgICAgICAgICBlbXB0eSgkYXJndW1lbnRzWydkZWxldGUnXSkgJiYKKyAgICAgICAgICAgICAgICAzID09IGNvdW50KCRhcmd1bWVudHMpKSB7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ3JlbmFtZScsICRhcmd1bWVudHMpICYmCisgICAgICAgICAgICAgICAgZW1wdHkoJGFyZ3VtZW50c1sncmVuYW1lJ10pICYmCisgICAgICAgICAgICAgICAgNCA9PSBjb3VudCgkYXJndW1lbnRzKSkgeworCisgICAgICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ25ld25hbWUnLCAkYXJndW1lbnRzKSAmJgorICAgICAgICAgICAgICAgICAgICAhZXJlZyhJTlZBTElEX0ZJTEVfTkFNRSwgJGFyZ3VtZW50c1snbmV3bmFtZSddKSkgeworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2VpZiAoYXJyYXlfa2V5X2V4aXN0cygnZGlyZWN0b3J5JywgJGFyZ3VtZW50cykpIHsKKyAgICAgICAgLy8gVGhpcyBpc24ndCBuZWNlc3NhcnkgYmVjYXVzZSB3ZSdsbCBmYWxsIHRocm91Z2ggdG8gZmFsc2UsIGJ1dCBJJ2QKKyAgICAgICAgLy8gcmF0aGVyIHJldHVybiBlYXJsaWVyIHRoYW4gbGF0ZXIuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBpbWFnZVtlbXB0eV0gZmlsZW5hbWVbdmFsaWRdICgoc2NhbGVbZW1wdHldIGRpbWVuc2lvbnNbdmFsaWRdKSB8IChyb3RhdGVbZW1wdHldIGFuZ2xlW3ZhbGlkXSkgfCAoY29udmVydFtlbXB0eV0gaW1hZ2V0eXBlW3ZhbGlkXSkpCisgICAgaWYgKCRjYXBhYmlsaXRpZXNbJ2ltYWdlX29wZXJhdGlvbnMnXSAmJgorICAgICAgICBhcnJheV9rZXlfZXhpc3RzKCdpbWFnZScsICRhcmd1bWVudHMpICYmCisgICAgICAgIGVtcHR5KCRhcmd1bWVudHNbJ2ltYWdlJ10pICYmCisgICAgICAgIGFycmF5X2tleV9leGlzdHMoJ2ZpbGVuYW1lJywgJGFyZ3VtZW50cykgJiYKKyAgICAgICAgIWVyZWcoSU5WQUxJRF9GSUxFX05BTUUsICRhcmd1bWVudHNbJ2ZpbGVuYW1lJ10pICYmCisgICAgICAgIDQgPT0gY291bnQoJGFyZ3VtZW50cykpIHsKKworICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnc2NhbGUnLCAkYXJndW1lbnRzKSAmJgorICAgICAgICAgICAgZW1wdHkoJGFyZ3VtZW50c1snc2NhbGUnXSkgJiYKKyAgICAgICAgICAgICFlcmVnKElOVkFMSURfRklMRV9OQU1FLCAkYXJndW1lbnRzWydkaW1lbnNpb25zJ10pKSB7CisgICAgICAgICAgICAvLyBUT0RPOiBGSVggUkVHRVgKKyAgICAgICAgICAgIGh0dHBfZXJyb3JfZXhpdCgpOworCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdyb3RhdGUnLCAkYXJndW1lbnRzKSAmJgorICAgICAgICAgICAgZW1wdHkoJGFyZ3VtZW50c1sncm90YXRlJ10pICYmCisgICAgICAgICAgICAhZXJlZyhJTlZBTElEX0ZJTEVfTkFNRSwgJGFyZ3VtZW50c1snYW5nbGUnXSkpIHsKKyAgICAgICAgICAgIC8vIFRPRE86IEZJWCBSRUdFWAorICAgICAgICAgICAgaHR0cF9lcnJvcl9leGl0KCk7CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ2NvbnZlcnQnLCAkYXJndW1lbnRzKSAmJgorICAgICAgICAgICAgZW1wdHkoJGFyZ3VtZW50c1snY29udmVydCddKSAmJgorICAgICAgICAgICAgIWVyZWcoSU5WQUxJRF9GSUxFX05BTUUsICRhcmd1bWVudHNbJ2ltYWdldHlwZSddKSkgeworICAgICAgICAgICAgLy8gVE9ETzogRklYIFJFR0VYCisgICAgICAgICAgICBodHRwX2Vycm9yX2V4aXQoKTsKKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlaWYgKGFycmF5X2tleV9leGlzdHMoJ2ltYWdlJywgJGFyZ3VtZW50cykpIHsKKyAgICAgICAgLy8gVGhpcyBpc24ndCBuZWNlc3NhcnkgYmVjYXVzZSB3ZSdsbCBmYWxsIHRocm91Z2ggdG8gZmFsc2UsIGJ1dCBJJ2QKKyAgICAgICAgLy8gcmF0aGVyIHJldHVybiBlYXJsaWVyIHRoYW4gbGF0ZXIuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyB1cGxvYWRbZW1wdHldIGZpbGVkYXRhW2JpbmFyeXx0ZXh0XSByZXBsYWNlW3RydWV8ZmFsc2VdIGZpbGVuYW1lW3ZhbGlkXT8KKyAgICBpZiAoJGNhcGFiaWxpdGllc1sndXBsb2FkX29wZXJhdGlvbnMnXSAmJgorICAgICAgICBhcnJheV9rZXlfZXhpc3RzKCd1cGxvYWQnLCAkYXJndW1lbnRzKSAmJgorICAgICAgICBlbXB0eSgkYXJndW1lbnRzWyd1cGxvYWQnXSkgJiYKKyAgICAgICAgYXJyYXlfa2V5X2V4aXN0cygnZmlsZWRhdGEnLCAkYXJndW1lbnRzKSAmJgorICAgICAgICAhZW1wdHkoJGFyZ3VtZW50c1snZmlsZWRhdGEnXSkgJiYKKyAgICAgICAgYXJyYXlfa2V5X2V4aXN0cygncmVwbGFjZScsICRhcmd1bWVudHMpICYmCisgICAgICAgIGVyZWcoJ3RydWV8ZmFsc2UnLCAkYXJndW1lbnRzWydyZXBsYWNlJ10pKSB7CisKKyAgICAgICAgaWYgKDQgPT0gY291bnQoJGFyZ3VtZW50cykgJiYKKyAgICAgICAgICAgIGFycmF5X2tleV9leGlzdHMoJ2ZpbGVuYW1lJywgJGFyZ3VtZW50cykgJiYKKyAgICAgICAgICAgICFlcmVnKElOVkFMSURfRklMRV9OQU1FLCAkYXJndW1lbnRzWydmaWxlbmFtZSddKSkgeworCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgzID09IGNvdW50KCRhcmd1bWVudHMpKSB7CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZWlmIChhcnJheV9rZXlfZXhpc3RzKCd1cGxvYWQnLCAkYXJndW1lbnRzKSkgeworICAgICAgICAvLyBUaGlzIGlzbid0IG5lY2Vzc2FyeSBiZWNhdXNlIHdlJ2xsIGZhbGwgdGhyb3VnaCB0byBmYWxzZSwgYnV0IEknZAorICAgICAgICAvLyByYXRoZXIgcmV0dXJuIGVhcmxpZXIgdGhhbiBsYXRlci4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIEhUVFAgbGV2ZWwgZXJyb3IgaGFuZGxpbmcuIAorICogQHBhcmFtIGludGVnZXIgJGNvZGUgVGhlIEhUVFAgZXJyb3IgY29kZSB0byByZXR1cm4gdG8gdGhlIGNsaWVudC4gIFRoaXMgZGVmYXVsdHMgdG8gNDAwLgorICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBFcnJvciBtZXNzYWdlIHRvIHNlbmQgdG8gdGhlIGNsaWVudC4gIFRoaXMgZGVmYXVsdHMgdG8gdGhlIHN0YW5kYXJkIEhUVFAgZXJyb3IgbWVzc2FnZXMuCisgKi8KK2Z1bmN0aW9uIGh0dHBfZXJyb3JfZXhpdCgkZXJyb3IgPSAnSFRUUF9DTElFTlRfQkFEX1JFUVVFU1QnLCAkbWVzc2FnZT0nJykgeworICAgIGdsb2JhbCAkSFRUUF9FUlJPUlM7CisgICAgJG1lc3NhZ2UgPSAhZW1wdHkoJG1lc3NhZ2UpID8gJG1lc3NhZ2UgOiAiSFRUUC8xLjAgeyRIVFRQX0VSUk9SU1skZXJyb3JdWydjb2RlJ119IHskSFRUUF9FUlJPUlNbJGVycm9yXVsnbWVzc2FnZSddfSI7CisgICAgaGVhZGVyKCRtZXNzYWdlKTsKKyAgICBleGl0KCRtZXNzYWdlKTsKK30KKworLyoqCisgKiBQcm9jZXNzIHRoZSBjb25maWcgYW5kIHJldHVybiB0aGUgYWJzb2x1dGUgZGlyZWN0b3J5IHdlIHNob3VsZCBiZSB3b3JraW5nIHdpdGgsCisgKiBAcmV0dXJuIHN0cmluZyBjb250YWlucyB0aGUgcGF0aCBvZiB0aGUgZGlyZWN0b3J5IGFsbCBmaWxlIG9wZXJhdGlvbnMgYXJlIGxpbWl0ZWQgdG8uCisgKi8KK2Z1bmN0aW9uIHdvcmtpbmdfZGlyZWN0b3J5KCkgeworICAgICRjb25maWcgPSBnZXRfY29uZmlnKHRydWUpOworICAgIHJldHVybiByZWFscGF0aChnZXRjd2QoKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkY29uZmlnWydzdG9yYWdlX2RpciddIC4gRElSRUNUT1JZX1NFUEFSQVRPUik7Cit9CisKKy8qKgorICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBzdXBwbGllZCBmaWxlbmFtZSBpcyBpbnNpZGUKKyAqLworZnVuY3Rpb24gZGlyZWN0b3J5X2NvbnRhaW5zKCRjb250YWluZXJfZGlyZWN0b3J5LCAkY2hlY2tmaWxlKSB7CisKKyAgICAvLyBHZXQgdGhlIGNhbm9uaWNhbCBkaXJlY3RvcnkgYW5kIGNhbm9uaWNhbCBmaWxlbmFtZS4gIFdlIGFkZCBhIGRpcmVjdG9yeQorICAgIC8vIHNlcGVyYXRvciB0byBwcmV2ZW50IHRoZSB1c2VyIGZyb20gc2lkZXN0ZXBwaW5nIGludG8gYSBzaWJsaW5nIGRpcmVjdG9yeQorICAgIC8vIHRoYXQgc3RhcnRzIHdpdGggdGhlIHNhbWUgcHJlZml4LiAoZS5nLiBmcm9tIC9ob21lL2pvaG4gdG8KKyAgICAvLyAvaG9tZS9qb2huc29uKQorICAgICRjb250YWluZXJfZGlyZWN0b3J5ID0gcmVhbHBhdGgoJGNvbnRhaW5lcl9kaXJlY3RvcnkpICsgRElSRUNUT1JZX1NFUEFSQVRPUjsKKyAgICAkY2hlY2tmaWxlID0gcmVhbHBhdGgoJGNoZWNrZmlsZSk7CisKKyAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIHRoZSBjYW5vbmljYWwgdmVyc2lvbnMsIHdlIGNhbiBkbyBhIHN0cmluZyBjb21wYXJpc29uCisgICAgLy8gdG8gc2VlIGlmIGNoZWNrZmlsZSBpcyBpbnNpZGUgb2YgY29udGFpbmVyX2RpcmVjdG9yeS4KKyAgICBpZiAoc3RybGVuKCRjaGVja2ZpbGUpIDw9IHN0cmxlbigkY29udGFpbmVyX2RpcmVjdG9yeSkpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgY29uc2lkZXIgdGhlIGRpcmVjdG9yeSB0byBiZSBpbnNpZGUgb2YgaXRzZWxmLiAgVGhpcworICAgICAgICAvLyBwcmV2ZW50cyB1c2VycyBmcm9tIHRyeWluZyB0byBwZXJmb3JtIG9wZXJhdGlvbnMgb24gdGhlIGNvbnRhaW5lcgorICAgICAgICAvLyBkaXJlY3RvcnkgaXRzZWxmLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gUEhQIGVxdWl2YWxlbnQgb2Ygc3RyaW5nLnN0YXJ0c3dpdGgoKQorICAgIHJldHVybiBzdWJzdHIoJGNoZWNrZmlsZSwgMCwgc3RybGVuKCRjb250YWluZXJfZGlyZWN0b3J5KSkgPT0gJGNvbnRhaW5lcl9kaXJlY3Rvcnk7Cit9CisKKy8qKiNAKworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeSBPcGVyYXRpb25zCisgKiB7QGludGVybmFsICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn19CisgKi8KKworLyoqCisgKiBSZXR1cm4gYSBkaXJlY3RvcnkgbGlzdGluZyBhcyBhIFBIUCBhcnJheS4KKyAqIEBwYXJhbSBzdHJpbmcgJGRpcmVjdG9yeSBUaGUgZGlyZWN0b3J5IHRvIHJldHVybiBhIGxpc3Rpbmcgb2YuCisgKiBAcGFyYW0gaW50ZWdlciAkZGVwdGggVGhlIHByaXZhdGUgYXJndW1lbnQgdXNlZCB0byBsaW1pdCByZWN1cnNpb24gZGVwdGguCisgKiBAcmV0dXJuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZS4gCisgKi8KKworZnVuY3Rpb24gZGlyZWN0b3J5X2xpc3RpbmcoJGRpcmVjdG9yeT0nJywgJGRlcHRoPTEpIHsKKyAgICAvLyBXZSByZXR1cm4gYW4gZW1wdHkgYXJyYXkgaWYgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eQorICAgICRyZXN1bHQgPSBhcnJheSgnJHR5cGUnPT4nZm9sZGVyJyk7CisKKyAgICAvLyBXZSB3b24ndCByZWN1cnNlIGJlbG93IE1BWF9ERVBUSC4KKyAgICBpZiAoJGRlcHRoID4gTUFYX0RFUFRIKSB7CisgICAgICAgIHJldHVybiAkcmVzdWx0OworICAgIH0KKworICAgICRwYXRoID0gZW1wdHkoJGRpcmVjdG9yeSkgPyB3b3JraW5nX2RpcmVjdG9yeSgpIDogJGRpcmVjdG9yeTsKKworICAgIC8vIFdlJ2xsIG9wZW4gdGhlIGRpcmVjdG9yeSB0byBjaGVjayBlYWNoIG9mIHRoZSBlbnRyaWVzCisgICAgaWYgKCRkaXIgPSBvcGVuZGlyKCRwYXRoKSkgeworCisgICAgICAgIC8vIFdlJ2xsIGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgZmlsZSB3ZSBwcm9jZXNzLgorICAgICAgICAkY291bnQgPSAwOworCisgICAgICAgIC8vIEZvciBlYWNoIGVudHJ5IGluIHRoZSBmaWxlCisgICAgICAgIHdoaWxlICgoJGZpbGUgPSByZWFkZGlyKCRkaXIpKSAhPT0gZmFsc2UpIHsKKworICAgICAgICAgICAgLy8gTGltaXQgdGhlIG51bWJlciBvZiBmaWxlcyB3ZSBwcm9jZXNzIGluIHRoaXMgZm9sZGVyCisgICAgICAgICAgICAkY291bnQgKz0gMTsKKyAgICAgICAgICAgIGlmICgkY291bnQgPiBNQVhfRklMRVNfUEVSX0ZPTERFUikgeworICAgICAgICAgICAgICAgIHJldHVybiAkcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZ25vcmUgaGlkZGVuIGZpbGVzICh0aGlzIGluY2x1ZGVzIHNwZWNpYWwgZmlsZXMgJy4nIGFuZCAnLi4nKQorICAgICAgICAgICAgaWYgKHN0cmxlbigkZmlsZSkgJiYgKCRmaWxlWzBdID09ICcuJykpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgJGZpbGVwYXRoID0gJHBhdGggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGZpbGU7CisKKyAgICAgICAgICAgIGlmIChmaWxldHlwZSgkZmlsZXBhdGgpID09ICdkaXInKSB7CisgICAgICAgICAgICAgICAgLy8gV2UnbGwgcmVjdXJzZSBhbmQgYWRkIHRob3NlIHJlc3VsdHMKKyAgICAgICAgICAgICAgICAkcmVzdWx0WyRmaWxlXSA9IGRpcmVjdG9yeV9saXN0aW5nKCRmaWxlcGF0aCwgJGRlcHRoICsgMSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFdlJ2xsIGNoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gcmVhZCBhbnkgaW1hZ2UgaW5mb3JtYXRpb24gZnJvbQorICAgICAgICAgICAgICAgIC8vIHRoZSBmaWxlLiAgSWYgc28sIHdlIGtub3cgaXQncyBhbiBpbWFnZSwgYW5kIHdlIGNhbiByZXR1cm4KKyAgICAgICAgICAgICAgICAvLyBpdCdzIG1ldGFkYXRhLgorICAgICAgICAgICAgICAgICRpbWFnZWluZm8gPSBAZ2V0aW1hZ2VzaXplKCRmaWxlcGF0aCk7CisgICAgICAgICAgICAgICAgaWYgKCRpbWFnZWluZm8pIHsKKworICAgICAgICAgICAgICAgICAgJHJlc3VsdFskZmlsZV0gPSBhcnJheSgnJHR5cGUnPT4naW1hZ2UnLCdtZXRhZGF0YSc9PmFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWR0aCc9PiRpbWFnZWluZm9bMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlaWdodCc9PiRpbWFnZWluZm9bMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21pbWV0eXBlJz0+JGltYWdlaW5mb1snbWltZSddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKworICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkZXh0ZW5zaW9uID0gc3RycnBvcygkZmlsZSwgJy4nKSkgeworICAgICAgICAgICAgICAgICAgICAgJGV4dGVuc2lvbiA9IHN1YnN0cigkZmlsZSwgJGV4dGVuc2lvbik7CisgICAgICAgICAgICAgICAgICAgICBpZiAoKCRleHRlbnNpb24gPT0gJy5odG0nKSB8fCAoJGV4dGVuc2lvbiA9PSAnLmh0bWwnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHRbJGZpbGVdID0gYXJyYXkoJyR0eXBlJz0+J2h0bWwnKTsKKyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdFskZmlsZV0gPSBhcnJheSgnJHR5cGUnPT4ndGV4dCcpOworICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICRyZXN1bHRbJGZpbGVdID0gYXJyYXkoJyR0eXBlJz0+J2RvY3VtZW50Jyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjbG9zZWRpcigkZGlyKTsKKyAgICB9CisgICAgcmV0dXJuICRyZXN1bHQ7Cit9CisKKy8qKgorICogQ3JlYXRlIGEgZGlyZWN0b3J5LCBsaW1pdGluZyBvcGVyYXRpb25zIHRvIHRoZSBjaHJvb3QgZGlyZWN0b3J5LgorICogQHBhcmFtIHN0cmluZyAkZGlybmFtZSBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5LCByZWxhdGl2ZSB0byAkY2hyb290LgorICogQHBhcmFtIHN0cmluZyAkY2hyb290IE9ubHkgZGlyZWN0b3JpZXMgaW5zaWRlIHRoaXMgZGlyZWN0b3J5IG9yIGl0cyBzdWJkaXJlY3RvcmllcyBjYW4gYmUgYWZmZWN0ZWQuCisgKiBAcmV0dXJuIGJvb2xlYW4gUmV0dXJucyBUUlVFIGlmIHN1Y2Nlc3NmdWwsIGFuZCBGQUxTRSBvdGhlcndpc2UuCisgKi8KK2Z1bmN0aW9uIGRpcmVjdG9yeV9jcmVhdGUoJGRpcm5hbWUsICRjaHJvb3QpIHsKKyAgICAvLyBJZiBjaHJvb3QgaXMgZW1wdHksIHRoZW4gd2Ugd2lsbCBub3QgcGVyZm9ybSB0aGUgb3BlcmF0aW9uLgorICAgIGlmIChlbXB0eSgkY2hyb290KSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gV2UgaGF2ZSB0byB0YWtlIHRoZSBkaXJuYW1lIG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGZpcnN0LCBzaW5jZQorICAgIC8vIHJlYWxwYXRoIGp1c3QgcmV0dXJucyBmYWxzZSBpZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBvbgorICAgIC8vIHRoZSBmaWxlc3lzdGVtLgorICAgICRjcmVhdGVwYXJlbnQgPSByZWFscGF0aChkaXJuYW1lKCRjaHJvb3QgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGRpcm5hbWUpKTsKKyAgICAkY3JlYXRlc3ViID0gYmFzZW5hbWUoJGNocm9vdCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkZGlybmFtZSk7CisKKyAgICAvLyBUaGUgYmFpbG91dCBydWxlcyBmb3IgZGlyZWN0b3JpZXMgdGhhdCBkb24ndCBleGlzdCBhcmUgY29tcGxpY2F0ZWQKKyAgICAvLyBiZWNhdXNlIG9mIGhhdmluZyB0byB3b3JrIGFyb3VuZCByZWFscGF0aC4gIElmIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGlzCisgICAgLy8gdGhlIHNhbWUgYXMgdGhlIGNocm9vdCwgaXQgd29uJ3QgYmUgY29udGFpbmVkLiAgRm9yIHRoaXMgY2FzZSwgd2UnbGwKKyAgICAvLyBjaGVjayB0byBzZWUgaWYgdGhlIGNocm9vdCBhbmQgdGhlIHBhcmVudCBhcmUgdGhlIHNhbWUgYW5kIGFsbG93IGl0IG9ubHkKKyAgICAvLyBpZiB0aGUgc3ViIHBvcnRpb24gb2YgZGlybmFtZSBpcyBub3QtZW1wdHkuCisgICAgaWYgKCFkaXJlY3RvcnlfY29udGFpbnMoJGNocm9vdCwgJGNyZWF0ZXBhcmVudCkgJiYKKyAgICAgICAgISgoJGNocm9vdCA9PSAkY3JlYXRlcGFyZW50KSAmJiAhZW1wdHkoJGNyZWF0ZXN1YikpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gQG1rZGlyKCRjcmVhdGVwYXJlbnQgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGNyZWF0ZXN1Yik7Cit9CisKKy8qKgorICogRGVsZXRlIGEgZGlyZWN0b3J5LCBsaW1pdGluZyBvcGVyYXRpb25zIHRvIHRoZSBjaHJvb3QgZGlyZWN0b3J5LgorICogQHBhcmFtIHN0cmluZyAkZGlybmFtZSBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5LCByZWxhdGl2ZSB0byAkY2hyb290LgorICogQHBhcmFtIHN0cmluZyAkY2hyb290IE9ubHkgZGlyZWN0b3JpZXMgaW5zaWRlIHRoaXMgZGlyZWN0b3J5IG9yIGl0cyBzdWJkaXJlY3RvcmllcyBjYW4gYmUgYWZmZWN0ZWQuCisgKiBAcmV0dXJuIGJvb2xlYW4gUmV0dXJucyBUUlVFIGlmIHN1Y2Nlc3NmdWwsIGFuZCBGQUxTRSBvdGhlcndpc2UuCisgKi8KK2Z1bmN0aW9uIGRpcmVjdG9yeV9kZWxldGUoJGRpcm5hbWUsICRjaHJvb3QpIHsKKyAgICAvLyBJZiBjaHJvb3QgaXMgZW1wdHksIHRoZW4gd2Ugd2lsbCBub3QgcGVyZm9ybSB0aGUgb3BlcmF0aW9uLgorICAgIGlmIChlbXB0eSgkY2hyb290KSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gJGRpcm5hbWUgaXMgcmVsYXRpdmUgdG8gJGNocm9vdC4KKyAgICAkZGlybmFtZSA9IHJlYWxwYXRoKCRjaHJvb3QgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGRpcm5hbWUpOworCisgICAgLy8gTGltaXQgZGlyZWN0b3J5IG9wZXJhdGlvbnMgdG8gdGhlIHN1cHBsaWVkIGRpcmVjdG9yeS4KKyAgICBpZiAoIWRpcmVjdG9yeV9jb250YWlucygkY2hyb290LCAkZGlybmFtZSkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBAcm1kaXIoJGRpcm5hbWUpOworfQorCisKKy8qKiNALSovCisvKiojQCsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGUgT3BlcmF0aW9ucworICoge0BpbnRlcm5hbCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9fQorICovCisKKy8qKgorICogUmVuYW1lIGEgZmlsZSBvciBkaXJlY3RvcnksIGxpbWl0aW5nIG9wZXJhdGlvbnMgdG8gdGhlIGNocm9vdCBkaXJlY3RvcnkuCisgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgcGF0aCB0byB0aGUgZmlsZSBvciBkaXJlY3RvcnksIHJlbGF0aXZlIHRvICRjaHJvb3QuCisgKiBAcGFyYW0gc3RyaW5nICRyZW5hbWV0byBUaGUgcGF0aCB0byB0aGUgcmVuYW1lZCBmaWxlIG9yIGRpcmVjdG9yeSwgcmVsYXRpdmUgdG8gJGNocm9vdC4KKyAqIEBwYXJhbSBzdHJpbmcgJGNocm9vdCBPbmx5IGZpbGVzIGFuZCBkaXJlY3RvcmllcyBpbnNpZGUgdGhpcyBkaXJlY3Rvcnkgb3IgaXRzIHN1YmRpcmVjdG9yaWVzIGNhbiBiZSBhZmZlY3RlZC4KKyAqIEByZXR1cm4gYm9vbGVhbiBSZXR1cm5zIFRSVUUgaWYgc3VjY2Vzc2Z1bCwgYW5kIEZBTFNFIG90aGVyd2lzZS4KKyAqLworZnVuY3Rpb24gZmlsZV9kaXJlY3RvcnlfcmVuYW1lKCRmaWxlbmFtZSwgJHJlbmFtZXRvLCAkY2hyb290KSB7CisgICAgLy8gSWYgY2hyb290IGlzIGVtcHR5LCB0aGVuIHdlIHdpbGwgbm90IHBlcmZvcm0gdGhlIG9wZXJhdGlvbi4KKyAgICBpZiAoZW1wdHkoJGNocm9vdCkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICRmaWxlbmFtZSBpcyByZWxhdGl2ZSB0byAkY2hyb290LgorICAgICRmaWxlbmFtZSA9IHJlYWxwYXRoKCRjaHJvb3QgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGZpbGVuYW1lKTsKKworICAgIC8vIFdlIGhhdmUgdG8gdGFrZSB0aGUgZGlybmFtZSBvZiB0aGUgcmVuYW1lZCBmaWxlIG9yIGRpcmVjdG9yeSBmaXJzdCwKKyAgICAvLyBzaW5jZSByZWFscGF0aCBqdXN0IHJldHVybnMgZmFsc2UgaWYgdGhlIGZpbGUgb3IgZGlyZWNvdHJ5IGRvZXNuJ3QKKyAgICAvLyBhbHJlYWR5IGV4aXN0IG9uIHRoZSBmaWxlc3lzdGVtLgorICAgICRyZW5hbWVwYXJlbnQgPSByZWFscGF0aChkaXJuYW1lKCRjaHJvb3QgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJHJlbmFtZXRvKSk7CisgICAgJHJlbmFtZWZpbGUgPSBiYXNlbmFtZSgkY2hyb290IC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRyZW5hbWV0byk7CisKKyAgICAvLyBMaW1pdCBmaWxlIG9wZXJhdGlvbnMgdG8gdGhlIHN1cHBsaWVkIGRpcmVjdG9yeS4KKyAgICBpZiAoIWRpcmVjdG9yeV9jb250YWlucygkY2hyb290LCAkZmlsZW5hbWUpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgYmFpbG91dCBydWxlcyBmb3IgdGhlIHJlbmFtZWQgZmlsZSBvciBkaXJlY3RvcnkgYXJlIG1vcmUgY29tcGxpY2F0ZWQKKyAgICAvLyBiZWNhdXNlIG9mIGhhdmluZyB0byB3b3JrIGFyb3VuZCByZWFscGF0aC4gIElmIHRoZSByZW5hbWVkIHBhcmVudAorICAgIC8vIGRpcmVjdG9yeSBpcyB0aGUgc2FtZSBhcyB0aGUgY2hyb290LCBpdCB3b24ndCBiZSBjb250YWluZWQuICBGb3IgdGhpcworICAgIC8vIGNhc2UsIHdlJ2xsIGNoZWNrIHRvIHNlZSBpZiB0aGV5J3JlIHRoZSBzYW1lIGFuZCBhbGxvdyBpdCBvbmx5IGlmIHRoZQorICAgIC8vIGZpbGUgcG9ydGlvbiBvZiByZW5hbWV0byBpcyBub3QtZW1wdHkuCisgICAgaWYgKCFkaXJlY3RvcnlfY29udGFpbnMoJGNocm9vdCwgJHJlbmFtZXBhcmVudCkgJiYKKyAgICAgICAgISgoJGNocm9vdCA9PSAkcmVuYW1lcGFyZW50KSAmJiAhZW1wdHkoJHJlbmFtZWZpbGUpKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIEByZW5hbWUoJGZpbGVuYW1lLCAkcmVuYW1lcGFyZW50IC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRyZW5hbWVmaWxlKTsKK30KKworCisvKioKKyAqIENvcHkgYSBmaWxlLCBsaW1pdGluZyBvcGVyYXRpb25zIHRvIHRoZSBjaHJvb3QgZGlyZWN0b3J5LgorICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgVGhlIHBhdGggdG8gdGhlIGZpbGUsIHJlbGF0aXZlIHRvICRjaHJvb3QuCisgKiBAcGFyYW0gc3RyaW5nICRjaHJvb3QgT25seSBmaWxlcyBpbnNpZGUgdGhpcyBkaXJlY3Rvcnkgb3IgaXRzIHN1YmRpcmVjdG9yaWVzIGNhbiBiZSBhZmZlY3RlZC4KKyAqIEByZXR1cm4gYm9vbGVhbiBSZXR1cm5zIFRSVUUgaWYgc3VjY2Vzc2Z1bCwgYW5kIEZBTFNFIG90aGVyd2lzZS4KKyAqLworZnVuY3Rpb24gZmlsZV9jb3B5KCRmaWxlbmFtZSwgJGNocm9vdCkgeworICAgIC8vIElmIGNocm9vdCBpcyBlbXB0eSwgdGhlbiB3ZSB3aWxsIG5vdCBwZXJmb3JtIHRoZSBvcGVyYXRpb24uCisgICAgaWYgKGVtcHR5KCRjaHJvb3QpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAkZmlsZW5hbWUgaXMgcmVsYXRpdmUgdG8gJGNocm9vdC4KKyAgICAkZmlsZW5hbWUgPSByZWFscGF0aCgkY2hyb290IC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRmaWxlbmFtZSk7CisKKyAgICAvLyBMaW1pdCBmaWxlIG9wZXJhdGlvbnMgdG8gdGhlIHN1cHBsaWVkIGRpcmVjdG9yeS4KKyAgICBpZiAoIWRpcmVjdG9yeV9jb250YWlucygkY2hyb290LCAkZmlsZW5hbWUpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgUEhQIGNvcHkgZnVuY3Rpb24gYmxpbmRseSBjb3BpZXMgb3ZlciBleGlzdGluZyBmaWxlcy4gIFdlIGRvbid0IHdpc2gKKyAgICAvLyB0aGlzIHRvIGhhcHBlbiwgc28gd2UgaGF2ZSB0byBwZXJmb3JtIHRoZSBjb3B5IGEgYml0IGRpZmZlcmVudGx5LiAgSWYgd2UKKyAgICAvLyBkbyBhIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgZmlsZSBleGlzdHMsIHRoZXJlJ3MgYWx3YXlzIHRoZSBjaGFuY2Ugb2YgYQorICAgIC8vIHJhY2UgY29uZGl0aW9uIHdoZXJlIHNvbWVvbmUgZWxzZSBjcmVhdGVzIHRoZSBmaWxlIGluIGJldHdlZW4gdGhlIGNoZWNrCisgICAgLy8gYW5kIHRoZSBjb3B5LiAgVGhlIG9ubHkgc2FmZSB3YXkgdG8gZW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBhbgorICAgIC8vIGV4aXN0aW5nIGZpbGUgaXMgdG8gY2FsbCBmb3BlbiBpbiBjcmVhdGUtb25seSBtb2RlIChtb2RlICd4JykuICBJZiBpdAorICAgIC8vIHN1Y2NlZWRzLCB0aGUgZmlsZSBkaWQgbm90IGV4aXN0IGJlZm9yZSwgYW5kIHdlJ3ZlIHN1Y2Nlc3NmdWxseSBjcmVhdGVkCisgICAgLy8gaXQsIG1lYW5pbmcgd2Ugb3duIHRoZSBmaWxlLiAgQWZ0ZXIgdGhhdCwgd2UgY2FuIHNhZmVseSBjb3B5IG92ZXIgb3VyCisgICAgLy8gb3duIGZpbGUuCisgICAgZm9yICgkY291bnQ9MTsgJGNvdW50PE1BWF9GSUxFU19QRVJfRk9MREVSOyArKyRjb3VudCkgeworICAgICAgICBpZiAoc3RycG9zKGJhc2VuYW1lKCRmaWxlbmFtZSksICcuJykpIHsKKyAgICAgICAgICAgICRleHRwb3MgPSBzdHJycG9zKCRmaWxlbmFtZSwgJy4nKTsKKyAgICAgICAgICAgICRjb3B5bmFtZSA9IHN1YnN0cigkZmlsZW5hbWUsIDAsICRleHRwb3MpIC4gJ18nIC4gJGNvdW50IC4gc3Vic3RyKCRmaWxlbmFtZSwgJGV4dHBvcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGVyZSdzIG5vIGV4dGVuc2lvbiwgd2Ugd2UnbGwganVzdCBhZGQgb3VyIGNvcHkgY291bnQuCisgICAgICAgICAgICAkY29weW5hbWUgPSAkZmlsZW5hbWUgLiAnXycgLiAkY291bnQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCRmaWxlID0gQGZvcGVuKCRjb3B5bmFtZSwgJ3gnKSkgeworICAgICAgICAgICAgLy8gV2UndmUgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgYSBmaWxlLCBzbyBpdCdzIG91cnMuICBXZSdsbCBjbG9zZQorICAgICAgICAgICAgLy8gb3VyIGhhbmRsZS4KKyAgICAgICAgICAgIGlmICghQGZjbG9zZSgkZmlsZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGVyZSB3YXMgc29tZSBwcm9ibGVtIHdpdGggb3VyIGZpbGUgaGFuZGxlLgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTm93IHdlIGNvcHkgb3ZlciB0aGUgZmlsZSB3ZSBjcmVhdGVkLgorICAgICAgICAgICAgaWYgKCFAY29weSgkZmlsZW5hbWUsICRjb3B5bmFtZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgY29weSBmYWlsZWQsIGV2ZW4gdGhvdWdoIHdlIG93biB0aGUgZmlsZSwgc28gd2UnbGwgY2xlYW4KKyAgICAgICAgICAgICAgICAvLyB1cCBieSByZW1vdmluZyB0aGUgZmlsZSBhbmQgcmVwb3J0IGZhaWx1cmUuCisgICAgICAgICAgICAgICAgZmlsZV9kZWxldGUoJGZpbGVuYW1lLCAkY2hyb290KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBhcnJheShiYXNlbmFtZSgkY29weW5hbWUpPT5hcnJheSgnJHR5cGUnPT4naW1hZ2UnKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogRGVsZXRlIGEgZmlsZSwgbGltaXRpbmcgb3BlcmF0aW9ucyB0byB0aGUgY2hyb290IGRpcmVjdG9yeS4KKyAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFRoZSBwYXRoIHRvIHRoZSBmaWxlLCByZWxhdGl2ZSB0byAkY2hyb290LgorICogQHBhcmFtIHN0cmluZyAkY2hyb290IE9ubHkgZmlsZXMgaW5zaWRlIHRoaXMgZGlyZWN0b3J5IG9yIGl0cyBzdWJkaXJlY3RvcmllcyBjYW4gYmUgYWZmZWN0ZWQuCisgKiBAcmV0dXJuIGJvb2xlYW4gUmV0dXJucyBUUlVFIGlmIHN1Y2Nlc3NmdWwsIGFuZCBGQUxTRSBvdGhlcndpc2UuCisgKi8KK2Z1bmN0aW9uIGZpbGVfZGVsZXRlKCRmaWxlbmFtZSwgJGNocm9vdCkgeworICAgIC8vIElmIGNocm9vdCBpcyBlbXB0eSwgdGhlbiB3ZSB3aWxsIG5vdCBwZXJmb3JtIHRoZSBvcGVyYXRpb24uCisgICAgaWYgKGVtcHR5KCRjaHJvb3QpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAkZmlsZW5hbWUgaXMgcmVsYXRpdmUgdG8gJGNocm9vdC4KKyAgICAkZmlsZW5hbWUgPSByZWFscGF0aCgkY2hyb290IC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRmaWxlbmFtZSk7CisKKyAgICAvLyBMaW1pdCBmaWxlIG9wZXJhdGlvbnMgdG8gdGhlIHN1cHBsaWVkIGRpcmVjdG9yeS4KKyAgICBpZiAoIWRpcmVjdG9yeV9jb250YWlucygkY2hyb290LCAkZmlsZW5hbWUpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gQHVubGluaygkZmlsZW5hbWUpOworfQorLyoqI0AtKi8KKy8qKiNAKworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVcGxvYWQgT3BlcmF0aW9ucworICoge0BpbnRlcm5hbCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9fQorICovCisKK2Z1bmN0aW9uIHN0b3JlX3VwbG9hZGVkX2ZpbGUoJGZpbGVuYW1lLCAkZmlsZWRhdGEsICRjaHJvb3QpIHsKKworICAgIC8vIElmIGNocm9vdCBpcyBlbXB0eSwgdGhlbiB3ZSB3aWxsIG5vdCBwZXJmb3JtIHRoZSBvcGVyYXRpb24uCisgICAgaWYgKGVtcHR5KCRjaHJvb3QpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgZmlsZW5hbWUgaXMgZW1wdHksIGl0IHdhcyBwb3NzaWJseSBzdXBwbGllZCBhcyBwYXJ0IG9mIHRoZQorICAgIC8vIHVwbG9hZC4KKyAgICAkZmlsZW5hbWUgPSBlbXB0eSgkZmlsZW5hbWUpID8gJGZpbGVkYXRhWyduYW1lJ10gOiAkZmlsZW5hbWU7CisKKyAgICAvLyBXZSBoYXZlIHRvIHRha2UgdGhlIGRpcm5hbWUgb2YgdGhlIHBhcmVudCBkaXJlY3RvcnkgZmlyc3QsIHNpbmNlCisgICAgLy8gcmVhbHBhdGgganVzdCByZXR1cm5zIGZhbHNlIGlmIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBhbHJlYWR5IGV4aXN0IG9uCisgICAgLy8gdGhlIGZpbGVzeXN0ZW0uCisgICAgJHVwbG9hZHBhcmVudCA9IHJlYWxwYXRoKGRpcm5hbWUoJGNocm9vdCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkZmlsZW5hbWUpKTsKKyAgICAkdXBsb2FkZmlsZSA9IGJhc2VuYW1lKCRjaHJvb3QgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGZpbGVuYW1lKTsKKworICAgIC8vIFRoZSBiYWlsb3V0IHJ1bGVzIGZvciBkaXJlY3RvcmllcyB0aGF0IGRvbid0IGV4aXN0IGFyZSBjb21wbGljYXRlZAorICAgIC8vIGJlY2F1c2Ugb2YgaGF2aW5nIHRvIHdvcmsgYXJvdW5kIHJlYWxwYXRoLiAgSWYgdGhlIHBhcmVudCBkaXJlY3RvcnkgaXMKKyAgICAvLyB0aGUgc2FtZSBhcyB0aGUgY2hyb290LCBpdCB3b24ndCBiZSBjb250YWluZWQuICBGb3IgdGhpcyBjYXNlLCB3ZSdsbAorICAgIC8vIGNoZWNrIHRvIHNlZSBpZiB0aGUgY2hyb290IGFuZCB0aGUgcGFyZW50IGFyZSB0aGUgc2FtZSBhbmQgYWxsb3cgaXQgb25seQorICAgIC8vIGlmIHRoZSBzdWIgcG9ydGlvbiBvZiBkaXJuYW1lIGlzIG5vdC1lbXB0eS4KKyAgICBpZiAoIWRpcmVjdG9yeV9jb250YWlucygkY2hyb290LCAkdXBsb2FkcGFyZW50KSAmJgorICAgICAgICAhKCgkY2hyb290ID09ICR1cGxvYWRwYXJlbnQpICYmICFlbXB0eSgkdXBsb2FkZmlsZSkpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgCisgICAgJHRhcmdldF9wYXRoID0gJHVwbG9hZHBhcmVudCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkdXBsb2FkZmlsZTsKKworICAgIGlmIChpc19hcnJheSgkZmlsZWRhdGEpKSB7CisgICAgICAgIC8vIFdlJ3ZlIHJlY2VpdmVkIHRoZSBmaWxlIGFzIGFuIHVwbG9hZCwgc28gaXQncyBiZWVuIHNhdmVkIHRvIGEgdGVtcAorICAgICAgICAvLyBkaXJlY3RvcnkuICBXZSdsbCBtb3ZlIGl0IHRvIHdoZXJlIGl0IGJlbG9uZ3MuCisgICAgIAorICAgICAgICBpZihtb3ZlX3VwbG9hZGVkX2ZpbGUoJGZpbGVkYXRhWyd0bXBfbmFtZSddLCAkdGFyZ2V0X3BhdGgpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZWlmICgkZmlsZSA9IEBmb3BlbigkdGFyZ2V0X3BhdGgsICd3JykpIHsKKyAgICAgICAgLy8gV2UndmUgcmVjZWl2ZWQgdGhlIGZpbGUgYXMgZGF0YS4gIFdlJ2xsIGNyZWF0ZS9vcGVuIHRoZSBmaWxlIGFuZAorICAgICAgICAvLyBzYXZlIHRoZSBkYXRhLgorICAgICAgICBAZndyaXRlKCRmaWxlLCAkZmlsZWRhdGEpOworICAgICAgICBAZmNsb3NlKCRmaWxlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorIAorICAgIHJldHVybiBmYWxzZTsKK30KKworLyoqI0AtKi8KKworPz4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvY29uZmlnLmluYy5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2NvbmZpZy5pbmMucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMjM1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2NvbmZpZy5pbmMucGhwCkBAIC0wLDAgKzEsMTk0IEBACis8P3BocA0KKy8qKg0KKyAqIFBlcnNpc3RlbnRTdG9yYWdlIFNlcnZlciBiYWNrZW5kIGNvbmZpZ3VyYXRpb24gZmlsZS4NCisgKiBAYXV0aG9yIERvdWdsYXMgTWF5bGUgPGRvdWdsYXNAb3BlbnBsYW5zLm9yZz4NCisgKiBAdmVyc2lvbiAxLjANCisgKiBAcGFja2FnZSBQZXJzaXN0ZW50U3RvcmFnZQ0KKyAqLw0KKw0KKy8qKg0KKyAqIElmIHRoaXMgZmlsZSBpcyBiZWluZyByZXF1ZXN0ZWQgb3ZlciB0aGUgd2ViLCB3ZSBkaXNwbGF5IGEgSlNPTiB2ZXJzaW9uIG9mDQorICogdGhlIHB1YmxpY2x5IHZpZXdhYmxlIGNvbmZpZyBpbmZvLg0KKyAqLw0KK2lmIChfX0ZJTEVfXyA9PSAkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10pIHsNCisgICAgZWNobyBqc29uX2VuY29kZShnZXRfY29uZmlnKCkpOw0KK30NCisNCisvKioNCisgKiBHZXRzIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIHVzZWQgYnkgdGhpcyBwYWNrYWdlLg0KKyAqIHtAc291cmNlIH0NCisgKiBAcGFyYW0gYm9vbGVhbiAkZ2V0cHJpdmF0ZXMgUmV0dXJuIHByaXZhdGUgY29uZmlndXJhdGlvbiBpbmZvIG1lcmdlZCB3aXRoIHRoZSBwdWJsaWMuDQorICogQHJldHVybnMgYXJyYXkgVGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoaXMgcGFja2FnZS4NCisgKi8NCitmdW5jdGlvbiBnZXRfY29uZmlnKCRnZXRwcml2YXRlcz1GYWxzZSkgew0KKw0KKyAgICAvLyBXZSBzZXQgdXAgdHdvIGRpZmZlcmVudCBzZXR0aW5ncyBhcnJheSwgc28gdGhhdCB3ZSBjYW4gaGF2ZSBzZXR0aW5ncw0KKyAgICAvLyB0aGF0IHdvbid0IGJlIHNob3duIHRvIHRoZSBwdWJsaWMuDQorICAgICRQcml2YXRlID0gYXJyYXkoKTsNCisgICAgJFB1YmxpYyA9IGFycmF5KCk7DQorDQorICAgIC8qKg0KKyAgICAgKiBGb3IgZGVtbyBwdXJwb3Nlcywgd2UgY2FuIGxpZSB0byB0aGUgZnJvbnRlbmQgYW5kIHByZXRlbmQgdG8gaGF2ZSB1c2VyDQorICAgICAqIHN0b3JhZ2UuICBTaW5jZSB3ZSBkb24ndCBoYXZlIGEgcGFzc3dvcmQgbWVjaGFuaXNtLCB0aGlzIHNpbXVsYXRpb24gd2lsbA0KKyAgICAgKiBhY2NlcHQgYW55IHBhc3N3b3JkLg0KKyAgICAgKi8NCisgICAgJFByaXZhdGVbJ3NpbXVsYXRlX3VzZXJfYXV0aCddID0gZmFsc2U7DQorDQorICAgIC8qKg0KKyAgICAgKiBUaGUgY2FwYWJpbGl0aWVzIGFycmF5IGNvbnRhaW5zIGRpcmVjdGl2ZXMgYWJvdXQgd2hhdCBtYWpvciBvcHRpb25zIHRvDQorICAgICAqIGFsbG93IG9yIGRpc2FsbG93Lg0KKyAgICAgKi8NCisgICAgJFB1YmxpY1snY2FwYWJpbGl0aWVzJ10gPSBhcnJheSgNCisgICAgICAgIC8vIEFsbG93IGRpcmVjdG9yeSBvcGVyYXRpb25zIChlLmcuIHJlbmFtZSwgY3JlYXRlLCBkZWxldGUgZGlyZWN0b3JpZXMpDQorICAgICAgICAnZGlyZWN0b3J5X29wZXJhdGlvbnMnID0+IHRydWUsDQorICAgICAgICAvLyBBbGxvdyBmaWxlIG9wZXJhdGlvbnMgKGUuZy4gY29weSwgcmVuYW1lLCBkZWxldGUgZmlsZXMpDQorICAgICAgICAnZmlsZV9vcGVyYXRpb25zJyA9PiB0cnVlLA0KKyAgICAgICAgLy8gQWxsb3cgaW1hZ2Ugb3BlcmF0aW9ucyAoZS5nLiBzY2FsZSwgcm90YXRlLCBjb252ZXJ0IGltYWdlcykNCisgICAgICAgICdpbWFnZV9vcGVyYXRpb25zJyA9PiB0cnVlLA0KKyAgICAgICAgLy8gQWxsb3cgZmlsZSB1cGxvYWRzDQorICAgICAgICAndXBsb2FkX29wZXJhdGlvbnMnID0+IHRydWUsDQorICAgICAgICAvLyBTdG9yZWQgZmlsZXMgaGF2ZSBhIHB1Ymxpc2hlZCBVUkwNCisgICAgICAgICdzaGFyZWRfcHVibGlzaCcgPT4gdHJ1ZSwNCisgICAgICAgIC8vIEJ5IGRlZmF1bHQsIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQsIHdlIGVuYWJsZSB1c2VyIHN0b3JhZ2UuDQorICAgICAgICAvLyBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZS4NCisgICAgICAgICd1c2VyX3N0b3JhZ2UnID0+ICFlbXB0eSgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKSB8fCAkUHJpdmF0ZVsnc2ltdWxhdGVfdXNlcl9hdXRoJ10NCisgICAgKTsNCisNCisgICAgLyoqDQorICAgICAqIERpcmVjdG9yeSBleHBvc2VkIHRvIHVzZXIgb3BlcmF0aW9ucy4gIEJlIHN1cmUgdGhhdCB0aGUgd2ViIHNlcnZlciBoYXMNCisgICAgICogcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIHRoaXMgZGlyZWN0b3J5Lg0KKyAgICAgKi8NCisgICAgJFByaXZhdGVbJ3N0b3JhZ2VfZGlyJ10gPSAnZGVtb19pbWFnZXMnOw0KKw0KKyAgICAvKioNCisgICAgICogVGhlIFVSTCB0aGF0IHRoZSBzdG9yYWdlIGRpcmVjdG9yeSBpcyBleHBvc2VkIGFzLiAgQnkgZGVmYXVsdCwgd2UgdHJ5DQorICAgICAqIGFuZCBndWVzcyBiYXNlZCBvbiB0aGUgVVJMIHVzZWQgdG8gYWNjZXNzIHRoaXMgcGFnZS4gIEFsc28sIHNpbmNlIHdlDQorICAgICAqIGFsbG93IHVzZXIgdXBsb2FkLCB0aGlzIGRpcmVjdG9yeSBzaG91bGQgbm90IGJlIGV4ZWN1dGFibGUgYnkgdGhlDQorICAgICAqIHNlcnZlci4gIEEgc2FtcGxlIC5odGFjY2VzcyBmaWxlIGlzIGluY2x1ZGVkIGluIGRlbW9faW1hZ2VzLg0KKyAgICAgKi8NCisgICAgJFByaXZhdGVbJ3N0b3JhZ2VfdXJsJ10gPSBzdHJfcmVwbGFjZSggYXJyYXkoImJhY2tlbmQucGhwIiwibWFuYWdlci5waHAiKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAkX1NFUlZFUlsiUEhQX1NFTEYiXSApIC4gJFByaXZhdGVbJ3N0b3JhZ2VfZGlyJ107DQorDQorICAgIC8qDQorICAgICAgUG9zc2libGUgdmFsdWVzOiB0cnVlLCBmYWxzZQ0KKw0KKyAgICAgIFRSVUUgLSBJZiBQSFAgb24gdGhlIHdlYiBzZXJ2ZXIgaXMgaW4gc2FmZSBtb2RlLCBzZXQgdGhpcyB0byB0cnVlLg0KKyAgICAgICAgICAgICBTQUZFIE1PREUgcmVzdHJpY3Rpb25zOiBkaXJlY3RvcnkgY3JlYXRpb24gd2lsbCBub3QgYmUgcG9zc2libGUsDQorICAgIAkJIG9ubHkgdGhlIEdEIGxpYnJhcnkgY2FuIGJlIHVzZWQsIG90aGVyIGxpYnJhcmllcyByZXF1aXJlDQorICAgIAkJIFNhZmUgTW9kZSB0byBiZSBvZmYuDQorDQorICAgICAgRkFMU0UgLSBTZXQgdG8gZmFsc2UgaWYgUEhQIG9uIHRoZSB3ZWIgc2VydmVyIGlzIG5vdCBpbiBzYWZlIG1vZGUuDQorICAgICovDQorICAgICRQcml2YXRlWydzYWZlX21vZGUnXSA9IGluaV9nZXQoJ3NhZmVfbW9kZScpOw0KKw0KKyAgICAvKioNCisgICAgICogSWYgUEhQIFNhZmUgTW9kZSBpcyBvbiB0aGFuIG9ubHkgdGhlIEdEIGltYWdlIGxpYnJhcnkgd2lsbCBmdW5jdGlvbiwgc28NCisgICAgICogd2UgZm9yY2UgdGhlIGRlZmF1bHQNCisgICAgICovDQorICAgIGlmICgkUHJpdmF0ZVsnc2FmZV9tb2RlJ10pIHsNCisgICAgICAgIEBkZWZpbmUoJ0lNQUdFX0NMQVNTJywgJ0dEJyk7DQorICAgIH0gZWxzZSB7DQorICAgICAgICAvKiANCisgICAgICAgICBQb3NzaWJsZSB2YWx1ZXM6ICdHRCcsICdJTScsIG9yICdOZXRQQk0nDQorDQorICAgICAgICAgVGhlIGltYWdlIG1hbmlwdWxhdGlvbiBsaWJyYXJ5IHRvIHVzZSwgZWl0aGVyIEdEIG9yIEltYWdlTWFnaWNrIG9yIE5ldFBCTS4NCisgICAgICAgICovDQorICAgICAgICBAZGVmaW5lKCdJTUFHRV9DTEFTUycsICdHRCcpOw0KKw0KKyAgICAgICAgLyoNCisgICAgICAgICBBZnRlciBkZWZpbmluZyB3aGljaCBsaWJyYXJ5IHRvIHVzZSwgaWYgaXQgaXMgTmV0UEJNIG9yIElNLCB5b3UgbmVlZCB0bw0KKyAgICAgICAgIHNwZWNpZnkgd2hlcmUgdGhlIGJpbmFyeSBmb3IgdGhlIHNlbGVjdGVkIGxpYnJhcnkgYXJlLiBBbmQgb2YgY291cnNlDQorICAgICAgICAgeW91ciBzZXJ2ZXIgYW5kIFBIUCBtdXN0IGJlIGFibGUgdG8gZXhlY3V0ZSB0aGVtIChpLmUuIHNhZmUgbW9kZSBpcyBPRkYpLg0KKyAgICAgICAgIEdEIGRvZXMgbm90IHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9uLg0KKyAgICAgICAgKi8NCisgICAgICAgIEBkZWZpbmUoJ0lNQUdFX1RSQU5TRk9STV9MSUJfUEFUSCcsICcvdXNyL2Jpbi8nKTsNCisgICAgfQ0KKw0KKyAgICAvKg0KKyAgICAgIFRoZSBwcmVmaXggZm9yIHRodW1ibmFpbCBmaWxlcywgc29tZXRoaW5nIGxpa2UgLnRodW1iIHdpbGwgZG8uIFRoZQ0KKyAgICAgIHRodW1ibmFpbHMgZmlsZXMgd2lsbCBiZSBuYW1lZCBhcyAicHJlZml4X2ltYWdlZmlsZS5leHQiLCB0aGF0IGlzLA0KKyAgICAgIHByZWZpeCArIG9yZ2luYWwgZmlsZW5hbWUuDQorICAgICovDQorICAgICRQcml2YXRlWyd0aHVtYm5haWxfcHJlZml4J10gPSAndF8nOw0KKw0KKyAgICAvKioNCisgICAgICogVGhlIHRodW1ibmFpbCBhcnJheSBncm91cHMgYWxsIG9mIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGh1bWJuYWlsDQorICAgICAqIG9wZXJhdGlvbnMuDQorICAgICAqLw0KKyAgICAkUHJpdmF0ZVsndGh1bWJuYWlscyddID0gYXJyYXkoDQorICAgICAgICAvLyBUaGUgcHJlZml4IHRvIGFwcGx5IHRvIGFsbCBjcmVhdGVkIHRodW1ibmFpbHMuDQorICAgICAgICAncHJlZml4JyA9PiAndF8nLA0KKyAgICAgICAgLy8gQSBzdWJkaXJlY3RvcnkgdG8ga2VlcCB0aHVtYm5haWxzIGluLiAgSWYgdGhpcyBpcyBlbXB0eSwgdGh1bWJuYWlscw0KKyAgICAgICAgLy8gd2lsbCBiZSBzdG9yZWQgYWxvbmdzaWRlIHRoZSBmaWxlcy4NCisgICAgICAgICdkaXJlY3RvcnknID0+ICcnLA0KKyAgICAgICAgLy8gV2hldGhlciBvciBub3QgdG8gZmlsdGVyIHRodW1ibmFpbHMgZnJvbSB0aGUgZGlyZWN0b3J5IGxpc3RpbmcuDQorICAgICAgICAnZmlsdGVyJyA9PiB0cnVlLA0KKyAgICAgICAgLy8gRmlsZXR5cGVzIHdoaWNoIHdlIHJlc3RyaWN0IHRodW1ibmFpbCBvcGVyYXRpb25zIHRvLg0KKyAgICAgICAgJ2ZpbGV0eXBlcycgPT4gYXJyYXkoImpwZyIsICJnaWYiLCAicG5nIiwgImJtcCIpLA0KKyAgICAgICAgLy8gV2hhdCBwaXhlbCBzaXplcyB0byBzYXZlIHRoZSB0aHVtYm5haWxzIGFzLg0KKyAgICAgICAgJ3dpZHRoJyA9PiA4NCwNCisgICAgICAgICdoZWlnaHQnID0+IDg0DQorICAgICk7DQorDQorDQorICAgIC8qKg0KKyAgICAqIFJlc2l6ZWQgcHJlZml4DQorICAgICoNCisgICAgKiBUaGUgcHJlZml4IGZvciByZXNpemVkIGZpbGVzLCBzb21ldGhpbmcgbGlrZSAucmVzaXplZCB3aWxsIGRvLiAgVGhlDQorICAgICogcmVzaXplZCBmaWxlcyB3aWxsIGJlIG5hbWVkIDxwcmVmaXg+Xzx3aWR0aD54PGhlaWdodD5fPG9yaWdpbmFsPg0KKyAgICAqIHJlc2l6ZWQgZmlsZXMgYXJlIGNyZWF0ZWQgd2hlbiBvbmUgY2hhbmdlcyB0aGUgZGltZW5zaW9ucyBvZiBhbiBpbWFnZQ0KKyAgICAqIGluIHRoZSBpbWFnZSBtYW5hZ2VyIHNlbGVjdGlvbiBkaWFsb2cgLSB0aGUgaW1hZ2UgaXMgc2NhbGVkIHdoZW4gdGhlDQorICAgICogdXNlciBjbGlja3MgdGhlIG9rIGJ1dHRvbi4NCisgICAgKi8NCisNCisgICAgJFByaXZhdGVbJ3Jlc2l6ZWRfcHJlZml4J10gPSAnLnJlc2l6ZWQnOw0KKw0KKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorICAgIC8qKg0KKyAgICAqIFJlc2l6ZWQgRGlyZWN0b3J5DQorICAgICoNCisgICAgKiBSZXNpemVkIGltYWdlcyBtYXkgYWxzbyBiZSBzdG9yZWQgaW4gYSBkaXJlY3RvcnksIGV4Y2VwdCBpbiBzYWZlIG1vZGUuDQorICAgICovDQorDQorICAgICRQcml2YXRlWydyZXNpemVkX2RpciddID0gJyc7DQorDQorICAgIC8qIE1heGltdW0gdXBsb2FkIGZpbGUgc2l6ZQ0KKw0KKyAgICAgIFBvc3NpYmxlIHZhbHVlczogbnVtYmVyLCAibWF4Ig0KKw0KKyAgICAgIG51bWJlciAtIG1heGltdW0gc2l6ZSBpbiBLaWxvYnl0ZXMuDQorDQorICAgICAgIm1heCIgIC0gdGhlIG1heGltdW0gYWxsb3dlZCBieSB0aGUgc2VydmVyICh0aGUgdmFsdWUgaXMgcmV0cmlldmVkIGZyb20gdGhlIHNlcnZlciBjb25maWd1cmF0aW9uKS4NCisgICAgKi8NCisgICAgJFByaXZhdGVbJ21heF9maWxlc2l6ZV9rYl9pbWFnZSddID0gMjAwOw0KKw0KKyAgICAkUHJpdmF0ZVsnbWF4X2ZpbGVzaXplX2tiX2xpbmsnXSA9IDUwMDA7DQorDQorICAgIC8qIE1heGltdW0gdXBsb2FkIGZvbGRlciBzaXplIGluIE1lZ2FieXRlcy4gVXNlIDAgdG8gZGlzYWJsZSBsaW1pdCAqLw0KKyAgICAkUHJpdmF0ZVsnbWF4X2ZvbGRlcnNpemVfbWInXSA9IDA7DQorDQorICAgIC8qDQorICAgIEFsbG93ZWQgZXh0ZW5zaW9ucyB0aGF0IGNhbiBiZSBzaG93biBhbmQgYWxsb3dlZCB0byB1cGxvYWQuDQorICAgIEF2YWlsYWJsZSBpY29ucyBhcmUgZm9yICJkb2MsZmxhLGdpZixneixodG1sLGpwZyxqcyxtb3YscGRmLHBocCxwbmcscHB0LHJhcix0eHQseGxzLHppcCINCisgICAgLUNoYW5nZWQgYnkgQUZSVS4NCisgICAgKi8NCisNCisgICAgJFByaXZhdGVbJ2FsbG93ZWRfaW1hZ2VfZXh0ZW5zaW9ucyddID0gYXJyYXkoImpwZyIsImdpZiIsInBuZyIsImJtcCIpOw0KKyAgICAkUHJpdmF0ZVsnYWxsb3dlZF9saW5rX2V4dGVuc2lvbnMnXSA9IGFycmF5KCJqcGciLCJnaWYiLCJqcyIsInBocCIsInBkZiIsInppcCIsInR4dCIsInBzZCIsInBuZyIsImh0bWwiLCJzd2YiLCJ4bWwiLCJ4bHMiLCJkb2MiKTsNCisNCisNCisgICAgLyoNCisgICAgICBJbWFnZSBFZGl0b3IgdGVtcG9yYXJ5IGZpbGVuYW1lIHByZWZpeC4NCisgICAgKi8NCisgICAgJFByaXZhdGVbJ3RtcF9wcmVmaXgnXSA9ICcuZWRpdG9yXyc7DQorDQorDQorICAgIC8vIENvbmZpZyB2YXJpYWJsZXMgYXJlIGZpbmlzaGVkLCB0aGlzIHJldHVybnMgb3VyIGRhdGEgdG8gdGhlIGNhbGxlci4NCisgICAgaWYgKCRnZXRwcml2YXRlcykgew0KKyAgICAgICAgcmV0dXJuICRQdWJsaWMrJFByaXZhdGU7DQorICAgIH0NCisNCisgICAgcmV0dXJuICRQdWJsaWM7DQorfQ0KKz8+DQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9kZW1vX2ltYWdlcy8uaHRhY2Nlc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2RlbW9faW1hZ2VzLy5odGFjY2VzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDcxMTMyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9kZW1vX2ltYWdlcy8uaHRhY2Nlc3MKQEAgLTAsMCArMSwyIEBACitwaHBfZmxhZyBlbmdpbmUgb2ZmCitBZGRUeXBlIHRleHQvaHRtbCAuaHRtbCAuaHRtIC5zaHRtbCAucGhwIC5waHAzIC5waHRtbCAucGh0bSAucGwgLnB5IC5jZ2kKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2RlbW9faW1hZ2VzL2Jpa2VycGVlcC5qcGcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2RlbW9faW1hZ2VzL2Jpa2VycGVlcC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJlNzAyOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvZGVtb19pbWFnZXMvYmlrZXJwZWVwLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2RlbW9faW1hZ2VzL2xpbnV4L2xpbnV4LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvZGVtb19pbWFnZXMvbGludXgvbGludXguZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNDJkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2RlbW9faW1hZ2VzL2xpbnV4L2xpbnV4LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2RlbW9faW1hZ2VzL3dlc25vdGgwNzguanBnIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9kZW1vX2ltYWdlcy93ZXNub3RoMDc4LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTM3ZDFhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9kZW1vX2ltYWdlcy93ZXNub3RoMDc4LmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvYjUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvYjUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMyODFlNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9iNS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImI1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvY2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvY2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzMzE3NAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9jaC5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvY3ouanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvY3ouanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJjZGZkMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9jei5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImN6IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZGEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZGEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZkMTU4YQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9kYS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQwNDViOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9kZS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZWUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBkNGZjZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9lZS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZWwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNjNTQwYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9lbC5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkwMGRmYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9lcy5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVzIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZXUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZXUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBkMjNiMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9ldS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImV1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZmEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZmEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1NGQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9mYS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZmkuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZmkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2NDY4OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9maS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZnIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU2MjRmYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9mci5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZnJfY2EuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZnJfY2EuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRmYzJlMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9mcl9jYS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyX2NhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZ2IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvZ2IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYzMzg4NgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9nYi5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImdiIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvaGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvaGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdhMDhiNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9oZS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImhlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvaHUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZjMDZmNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9odS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImh1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvaXQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvaXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJhYWQ3OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9pdC5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIml0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdmYTAwOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9qYS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBTU0VSVkVSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZTJhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BTU2VydmVyL2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDI2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgIkZpbGU6ICI6ICIiLAorICAgICJJbXBvcnQiOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9sdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9sdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWE5MTEzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9sYW5nL2x0LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9sdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9sdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMThjNWVhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9sYW5nL2x2LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHYiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9uYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9uYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzQzYWNlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9sYW5nL25iLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9ubC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjBlYWYyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9sYW5nL25sLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9wbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjNhNTdkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9sYW5nL3BsLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicGwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9wdF9ici5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9wdF9ici5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzZlYThiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9yby5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9yby5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGU5ZjkzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9sYW5nL3JvLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicm8iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9ydS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9ydS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDg0NTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9sYW5nL3J1LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicnUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9zaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9zaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmE1NjZmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9sYW5nL3NoLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9zaS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9zaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzQ1MGY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9sYW5nL3NpLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2kiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9zci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9zci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGMxNGU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9sYW5nL3NyLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9zdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy9zdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzA1ODYzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9sYW5nL3N2LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3YiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy90aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTg2Mjc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9sYW5nL3RoLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidGgiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy90ci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy90ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGFhNjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy92bi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy92bi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGY3Y2M1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9sYW5nL3ZuLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidm4iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy96aF9jbi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUFNTZXJ2ZXIvbGFuZy96aF9jbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODQ3ZDM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QU1NlcnZlci9sYW5nL3poX2NuLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiemhfY24iLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUFNTRVJWRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvUGVyc2lzdGVudFN0b3JhZ2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL1BlcnNpc3RlbnRTdG9yYWdlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYmZhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL1BlcnNpc3RlbnRTdG9yYWdlLmpzCkBAIC0wLDAgKzEsMTE0MiBAQAorLyoqDQorICogQGZpbGVPdmVydmlldyBQZXJzaXN0ZW50U3RvcmFnZSBQZXJzaXN0ZW50U3RvcmFnZS5qcyBmaWxlLg0KKyAqIFRoaXMgcGx1Z2luIGlzIGEgcmV0aGlua2luZyBvZiB0aGUgRXh0ZW5kRmlsZU1hbmFnZXIgcGx1Z2luIHdyaXR0ZW4gYW5kDQorICogZGVzaWduZWQgYnkgV2VpIFpodW8sIEFmcnUsIEtyenlzenRvZiBLb3Rvd2ljeiwgUmFpbXVuZCBNZXllci4NCisgKg0KKyAqIEBhdXRob3IgRG91Z2xhcyBNYXlsZSA8ZG91Z2xhc0BvcGVucGxhbnMub3JnPg0KKyAqIEB2ZXJzaW9uIDEuMA0KKyAqLw0KKw0KKy8qKg0KKyAqIFRoZSBnbG9iYWwgbmFtZXNwYWNlDQorICogQG5hbWUgd2luZG93DQorICovDQorKGZ1bmN0aW9uKCQpIHsNCisvKioNCisgKiBAbmFtZSBQZXJzaXN0ZW50U3RvcmFnZQ0KKyAqIEBjbGFzcyBQcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIHBlcnNpc3RhbnQgc3RvcmFnZSBvcHRpb25zIHRvIHRoZSB1c2VyLg0KKyAqIEBwYXJhbSBlZGl0b3IgQSByZWZlcmVuY2UgdG8gdGhlIFhpbmhhIEVkaXRvciB0aGlzIHBsdWdpbiBpbnN0YW5jZSBpcyBhdHRhY2hlZCB0by4NCisgKi8NCit2YXIgUGVyc2lzdGVudFN0b3JhZ2UgPSB3aW5kb3cuUGVyc2lzdGVudFN0b3JhZ2UgPSBmdW5jdGlvbiAoZWRpdG9yKSB7DQorICAvKioNCisgICAqIEBtZW1iZXJPZiBYaW5oYQ0KKyAgICovDQorICB0aGlzLmVkaXRvciA9IGVkaXRvcjsNCisgIHZhciBzZWxmID0gdGhpczsNCit9DQorDQorLyoqDQorICogUGx1Z2luIE1ldGFkYXRhDQorICogQG5hbWVzcGFjZQ0KKyAqIEBzdGF0aWMNCisgKi8NCitQZXJzaXN0ZW50U3RvcmFnZS5fcGx1Z2luSW5mbyA9IHsNCisgICAgLyoqIFBsdWdpbiBuYW1lICovDQorICAgIG5hbWUgICAgICAgICAgOiAiUGVyc2lzdGVudFN0b3JhZ2UiLA0KKyAgICAvKiogUGx1Z2luIHZlcnNpb24gKi8NCisgICAgdmVyc2lvbiAgICAgICA6ICIxLjAiLA0KKyAgICAvKiogUGx1Z2luIGF1dGhvciAqLw0KKyAgICBkZXZlbG9wZXIgICAgIDogIkRvdWdsYXMgTWF5bGUiLA0KKyAgICAvKiogUGx1Z2luIGF1dGhvcidzIHdlYnNpdGUgKi8NCisgICAgZGV2ZWxvcGVyX3VybCA6ICJodHRwOi8vZG91Z2xhcy5tYXlsZS5vcmciLA0KKyAgICAvKiogUGx1Z2luIGxpY2Vuc2UgKi8NCisgICAgbGljZW5zZSAgICAgICA6ICJCU0QiDQorfTsNCisNCisvKioNCisgKiBUaGUgbGlzdCBvZiBiYWNrZW5kIG1vZHVsZXMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgaW5zdGFuY2UuDQorICovDQorUGVyc2lzdGVudFN0b3JhZ2UucHJvdG90eXBlLl9iYWNrZW5kcyA9IHt9Ow0KKw0KKy8qKg0KKyAqIFRoZSBsaXN0IG9mIHVzZXIgY29uZmlnIGZpbGVzIHJlY2VpdmVkIGZyb20gYmFja2VuZHMuDQorICovDQorUGVyc2lzdGVudFN0b3JhZ2UucHJvdG90eXBlLl91c2VyY29uZmlncyA9IFtdOw0KKw0KKy8qKg0KKyAqIFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIGJhY2tlbmQuDQorICovDQorUGVyc2lzdGVudFN0b3JhZ2UucHJvdG90eXBlLl9hY3RpdmVCYWNrZW5kID0gJyc7DQorDQorLyoqDQorICogVGhlIHZhbHVlIG9mIHRoZSB0eXBlIGZpbHRlciB0aGF0J3MgY3VycmVudGx5IGluIGVmZmVjdC4NCisgKi8NCitQZXJzaXN0ZW50U3RvcmFnZS5wcm90b3R5cGUuX3R5cGVGaWx0ZXIgPSAnJzsNCisNCisvKioNCisgKiBUaGUgY3VycmVudGx5IGRpc3BsYXllZCB2aWV3IHR5cGUuDQorICovDQorUGVyc2lzdGVudFN0b3JhZ2UucHJvdG90eXBlLl92aWV3VHlwZSA9ICd0aHVtYm5haWwnOw0KKw0KKy8qKg0KKyAqIE9uIFhpbmhhIGFjdGl2YXRpb24sIHRoaXMgZ2V0J3MgY2FsbGVkIHNvIHRoYXQgd2UgY2FuIHByZXBhcmUgYW55IHJlc291cmNlcw0KKyAqIHdlIG5lZWQgdG8gZnVuY3Rpb24uDQorICovDQorUGVyc2lzdGVudFN0b3JhZ2UucHJvdG90eXBlLm9uR2VuZXJhdGVPbmNlID0gZnVuY3Rpb24gKCkgew0KKyAgLy8gV2UgdXNlIF9wcmVwYXJlRGlhbG9nIHRvIGFzeW5jaHJvbm91c2x5IGxvYWQgdGhlIGRpYWxvZyBtYXJrdXAgYW5kIHRoZW4NCisgIC8vIHBlcmZvcm0gbmVjZXNzYXJ5IHByb2Nlc3NpbmcuDQorICB0aGlzLl9wcmVwYXJlRGlhbG9nKCk7DQorfTsNCisNCitmdW5jdGlvbiBhZGRDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHsNCisgIHZhciBjbGFzc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnID8nICsgY2xhc3NOYW1lICsgJyA/Jyk7DQorDQorICBpZiAoIWNsYXNzUmVnZXgudGVzdChlbGVtZW50LmNsYXNzTmFtZSkpIHsNCisgICAgZWxlbWVudC5jbGFzc05hbWUgKz0gJyAnICsgY2xhc3NOYW1lOw0KKyAgfQ0KK30NCisNCitmdW5jdGlvbiByZW1vdmVDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHsNCisgIHZhciBjbGFzc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnID8nICsgY2xhc3NOYW1lICsgJyA/Jyk7DQorDQorICBpZiAoY2xhc3NSZWdleC50ZXN0KGVsZW1lbnQuY2xhc3NOYW1lKSkgew0KKyAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UoY2xhc3NSZWdleCwgJyAnKTsNCisgIH0NCit9DQorDQorZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7DQorICB2YXIgY2xhc3NSZWdleCA9IG5ldyBSZWdFeHAoJyA/JyArIGNsYXNzTmFtZSArICcgPycpOw0KKw0KKyAgaWYgKGNsYXNzUmVnZXgudGVzdChlbGVtZW50LmNsYXNzTmFtZSkpIHsNCisgICAgZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKGNsYXNzUmVnZXgsICcgJyk7DQorICB9IGVsc2Ugew0KKyAgICBlbGVtZW50LmNsYXNzTmFtZSArPSAnICcgKyBjbGFzc05hbWU7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAqIE9uY2Ugd2UncmUgc3VyZSB3ZSBoYXZlIGEgYmFja2VuZCB0aGF0IHN1cHBvcnRzIGRvY3VtZW50IGZ1bmN0aW9uYWxpdHksDQorICogd2UnbGwgbG9hZCB0aGUgaW50ZXJmYWNlIHRoYXQgZXhwb3NlcyBpdC4NCisgKi8NCitQZXJzaXN0ZW50U3RvcmFnZS5wcm90b3R5cGUuX3JlZ2lzdGVyRG9jdW1lbnRVSSA9IGZ1bmN0aW9uICgpIHsNCisgIGlmICh0aGlzLl9kb2N1bWVudEVuYWJsZWQpIHsNCisgICAgLy8gTm8gbmVlZCB0byByZXBlYXRlZCByZWJ1aWxkIHRoZSBVSS4NCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgdGhpcy5fZG9jdW1lbnRFbmFibGVkID0gdHJ1ZTsNCisgIHZhciBzZWxmID0gdGhpczsNCisNCisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsNCisNCisgIGVkaXRvci5jb25maWcucmVnaXN0ZXJCdXR0b24oew0KKyAgICAgIGlkICAgICAgIDogJ25ld2RvY3VtZW50JywNCisgICAgICB0b29sdGlwICA6IFhpbmhhLl9sYyggJ05ldyBEb2N1bWVudCcsICdQZXJzaXN0ZW50U3RvcmFnZScgKSwNCisgICAgICBpbWFnZSAgICA6IFtfZWRpdG9yX3VybCArIGVkaXRvci5jb25maWcuaW1nVVJMICsgJ2VkX2J1dHRvbnNfbWFpbi5wbmcnLDAsNV0sDQorICAgICAgdGV4dE1vZGUgOiB0cnVlLA0KKyAgICAgIGFjdGlvbiAgIDogZnVuY3Rpb24oKSB7IHNlbGYubmV3RG9jdW1lbnQoKTsgfQ0KKyAgICB9DQorICApOw0KKyAgZWRpdG9yLmNvbmZpZy5yZWdpc3RlckJ1dHRvbih7DQorICAgICAgaWQgICAgICAgOiAnb3BlbmRvY3VtZW50JywNCisgICAgICB0b29sdGlwICA6IFhpbmhhLl9sYyggJ09wZW4gRG9jdW1lbnQnLCAnUGVyc2lzdGVudFN0b3JhZ2UnICksDQorICAgICAgaW1hZ2UgICAgOiBbX2VkaXRvcl91cmwgKyBlZGl0b3IuY29uZmlnLmltZ1VSTCArICdlZF9idXR0b25zX21haW4ucG5nJywxLDVdLA0KKyAgICAgIHRleHRNb2RlIDogdHJ1ZSwNCisgICAgICBhY3Rpb24gICA6IGZ1bmN0aW9uKCkgeyBzZWxmLm9wZW5EaWFsb2coKTsgfQ0KKyAgICB9DQorICApOw0KKyAgZWRpdG9yLmNvbmZpZy5yZWdpc3RlckJ1dHRvbih7DQorICAgICAgaWQgICAgICAgOiAnc2F2ZWRvY3VtZW50JywNCisgICAgICB0b29sdGlwICA6IFhpbmhhLl9sYyggJ1NhdmUgRG9jdW1lbnQnLCAnUGVyc2lzdGVudFN0b3JhZ2UnICksDQorICAgICAgaW1hZ2UgICAgOiBbX2VkaXRvcl91cmwgKyBlZGl0b3IuY29uZmlnLmltZ1VSTCArICdlZF9idXR0b25zX21haW4ucG5nJyw5LDFdLA0KKyAgICAgIHRleHRNb2RlIDogdHJ1ZSwNCisgICAgICBhY3Rpb24gICA6IGZ1bmN0aW9uKCkgeyBzZWxmLnNhdmVEaWFsb2coKTsgfQ0KKyAgICB9DQorICApOw0KKyAgZWRpdG9yLmNvbmZpZy5hZGRUb29sYmFyRWxlbWVudCgnbmV3ZG9jdW1lbnQnLCAnZnVsbHNjcmVlbicsIDEpOw0KKyAgZWRpdG9yLmNvbmZpZy5hZGRUb29sYmFyRWxlbWVudCgnb3BlbmRvY3VtZW50JywgJ25ld2RvY3VtZW50JywgMSk7DQorICBlZGl0b3IuY29uZmlnLmFkZFRvb2xiYXJFbGVtZW50KCdzYXZlZG9jdW1lbnQnLCAnb3BlbmRvY3VtZW50JywgMSk7DQorDQorICAvLyBTaW5jZSB0aGlzIGlzIGFmdGVyIHRoZSBlZGl0b3IgbG9hZCwgd2UgaGF2ZSB0byB0cmlnZ2VyIGFuIHVkYXRlIG1hbnVhbGx5Li4uDQorICBlZGl0b3IuX3JlYnVpbGRUb29sYmFyKCk7DQorfTsNCisNCisvKioNCisgKiBCYWNrZW5kIHN0b3JhZ2UgcGx1Z2lucyBzaG91bGQgY2FsbCB0aGlzIG1ldGhvZCBzbyB0aGF0IHRoZXkgY2FuIGJlIGV4cG9zZWQNCisgKiB0byB0aGUgdXNlci4gIEJlY2F1c2Ugb2YgcG9zc2libGUgcXVpcmtzIGluIHBsdWdpbiBsb2FkaW5nLCB5b3Ugc2hvdWxkIHVzZQ0KKyAqIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb2RlIHdoZW4gcmVnaXN0ZXJpbmcuDQorICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZQ0KKyAqIEBwYXJhbSBtb2R1bGUgVGhlIG1vZHVsZSBpbnN0YW5jZQ0KKyAqIEBwYXJhbSBjb25maWcgQ29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiB0aGF0IHRlbGxzIHVzIGFib3V0IHRoZSBtb2R1bGUNCisgKiBAcGFyYW0gdXNlcl9jb25maWcgQU4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdXNlciBjb25maWd1cmF0aW9uIGxvYWRlZCBmcm9tDQorICogdGhpcyBtb2R1bGUuDQorICogQGV4YW1wbGUNCisNCisgKiBQU0JhY2tlbmQucHJvdG90eXBlLm9uR2VuZXJhdGVPbmNlID0gZnVuY3Rpb24gKCkgew0KKyAqICAgLy8gUmVnaXN0ZXIgd2l0aCB0aGUgUGVyc2lzdGVudCBTdG9yYWdlIHBsdWdpbi4NCisgKiAgIHRoaXMuX3JlZ2lzdGVyQmFja2VuZCgpOw0KKyAqIH07DQorICogUFNCYWNrZW5kLnByb3RvdHlwZS5fcmVnaXN0ZXJCYWNrZW5kID0gZnVuY3Rpb24odGltZVdhaXRlZCkgew0KKyAqICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOw0KKyAqICAgdmFyIHNlbGYgPSB0aGlzOw0KKyAqIA0KKyAqICAgaWYgKCF0aW1lV2FpdGVkKSB7DQorICogICAgIHRpbWVXYWl0ZWQgPSAwOw0KKyAqICAgfQ0KKyAqIA0KKyAqICAgLy8gUmV0cnkgb3ZlciBhIHBlcmlvZCBvZiB0ZW4gc2Vjb25kcyB0byByZWdpc3Rlci4gIFdlIGJhY2sgb2ZmIGV4cG9uZW50aWFsbHkNCisgKiAgIC8vIHRvIGxpbWl0IHJlc291Y2UgdXNhZ2UgaW4gdGhlIGNhc2Ugb2YgbWlzY29uZmlndXJhdGlvbi4NCisgKiAgIHZhciByZWdpc3RlclRpbWVvdXQgPSAxMDAwMDsNCisgKiANCisgKiAgIGlmICh0aW1lV2FpdGVkID4gcmVnaXN0ZXJUaW1lb3V0KSB7DQorICogICAgIC8vIFRoaXMgaXMgbW9zdCBsaWtlbHkgYSBjb25maWd1cmF0aW9uIGVycm9yLiAgV2UncmUgbG9hZGVkIGFuZA0KKyAqICAgICAvLyBQZXJzaXN0ZW50U3RvcmFnZSBpcyBub3QuDQorICogICAgIHJldHVybjsNCisgKiAgIH0NCisgKiANCisgKiAgIGlmICghZWRpdG9yLnBsdWdpbnNbJ1BlcnNpc3RlbnRTdG9yYWdlJ10gfHwNCisgKiAgICAgICAhZWRpdG9yLnBsdWdpbnNbJ1BlcnNpc3RlbnRTdG9yYWdlJ10uaW5zdGFuY2UgfHwNCisgKiAgICAgICAhZWRpdG9yLnBsdWdpbnNbJ1BlcnNpc3RlbnRTdG9yYWdlJ10uaW5zdGFuY2UucmVhZHkpIHsNCisgKiANCisgKiAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQorICogICAgICAgc2VsZi5fcmVnaXN0ZXJCYWNrZW5kKHRpbWVXYWl0ZWQgPyB0aW1lV2FpdGVkKjIgOiA1MCk7DQorICogICAgIH0sIHRpbWVXYWl0ZWQgPyB0aW1lV2FpdGVkIDogNTApOw0KKyAqDQorICogICAgIHJldHVybjsNCisgKiAgIH0NCisgKiAgIHZhciBQUyA9IGVkaXRvci5wbHVnaW5zWydQZXJzaXN0ZW50U3RvcmFnZSddLmluc3RhbmNlOw0KKyAqICAgDQorICogICAvLyBTdXBwb3J0IHVzZXIgY29uZmlndXJhdGlvbi4gVGhpcyBsb2FkaW5nIHNob3VsZCBiZSBtb3ZlZCBpbnRvIFBlcnNpc3RlbnRTdG9yYWdlLi4uDQorICogICB0aGlzLmxvYWREb2N1bWVudCh7VVJMOicnLCBuYW1lOidjb25maWcuanMnLCBrZXk6Jy9jb25maWcuanMnfSwgZnVuY3Rpb24oanNvbikgew0KKyAqICAgICAgICAgICAgICAgICAgICB2YXIgdXNlcmNvbmZpZyA9IGpzb24gPyBldmFsKCcoJyArIGpzb24gKyAnKScpIDogZmFsc2U7DQorICogICAgICAgICAgICAgICAgICAgIFBTLnJlZ2lzdGVyQmFja2VuZCgnUFNMb2NhbCcsIHNlbGYsIHNlbGYuY29uZmlnLCB1c2VyY29uZmlnKTsNCisgKiAgICAgICAgICAgICAgICAgICAgfSk7DQorICovDQorUGVyc2lzdGVudFN0b3JhZ2UucHJvdG90eXBlLnJlZ2lzdGVyQmFja2VuZCA9IGZ1bmN0aW9uIChuYW1lLCBtb2R1bGUsIGNvbmZpZywgdXNlcl9jb25maWcpIHsNCisgIHRoaXMuX2JhY2tlbmRzW25hbWVdID0ge21vZHVsZTogbW9kdWxlLCBjb25maWc6IGNvbmZpZywgbmFtZTogbmFtZX07DQorDQorICAvLyBUT0RPIEknZCBsaWtlIHNvbWV0aGluZyBtb3JlIHRoYW4ganVzdCB3aG9ldmVyIGNhbGxzIGJhY2sgZmlyc3Qgd2lucyBmb3Igb3JkZXJpbmcuDQorICBpZiAoIXRoaXMuX2FjdGl2ZUJhY2tlbmQpIHsNCisgICAgdGhpcy5zZXRCYWNrZW5kKG5hbWUpOw0KKyAgfQ0KKw0KKyAgaWYgKGNvbmZpZy5jYXBhYmlsaXRpZXMudXBsb2FkX29wZXJhdGlvbnMgJiYNCisgICAgICBjb25maWcuY2FwYWJpbGl0aWVzLmZpbGVfb3BlcmF0aW9ucykgew0KKyAgICB0aGlzLl9yZWdpc3RlckRvY3VtZW50VUkoKTsNCisgIH0NCisNCisgIC8vIEhhbmRsZSB1c2VyIGNvbmZpZ3VyYXRpb24NCisgIGlmICh1c2VyX2NvbmZpZykgew0KKyAgICB0aGlzLl91c2VyY29uZmlncy5wdXNoKHVzZXJfY29uZmlnKTsNCisgICAgdGhpcy5jb25maWd1cmVVc2VyKCk7DQorICB9DQorDQorICB0aGlzLnVwZGF0ZVBsYWNlc0Rpc3BsYXkoKTsNCit9DQorDQorLyoqDQorICogR28gdGhyb3VnaCB0aGUgbGlzdCBvZiB1c2VyIGNvbmZpZ3MgYW5kIHJlY29uZmlndXJlIFhpbmhhLg0KKyAqLw0KK1BlcnNpc3RlbnRTdG9yYWdlLnByb3RvdHlwZS5jb25maWd1cmVVc2VyID0gZnVuY3Rpb24gKCkgew0KKyAgLy8gVGVtcCBjb2RlIGRvZXMgbm90IGhhbmRsZSB1c2VyIGFmZmluaXR5DQorICB2YXIgc2VsZiA9IHRoaXM7DQorICBmb3IgKHZhciBpbmRleD0wOyBpbmRleDx0aGlzLl91c2VyY29uZmlncy5sZW5ndGg7ICsraW5kZXgpIHsNCisgICAgLy8gQSB1c2VyIGNvbmZpZyBjYW4gaGF2ZSB2YXJpb3VzIG9wdGlvbnMsIHdlJ2xsIGRlYWwgd2l0aCBlYWNoIGluIHR1cm4uDQorICAgIHZhciBjb25maWcgPSB0aGlzLl91c2VyY29uZmlnc1tpbmRleF07DQorDQorICAgIGZvciAodmFyIHBsdWdpbk5hbWUgaW4gKGNvbmZpZy5wbHVnaW5zIHx8IHt9KSkgew0KKyAgICAgIC8vIFRyeSB0byBsb2FkIGVhY2ggb2YgdGhlIHBsdWdpbnMgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyLg0KKyAgICAgIFhpbmhhLmxvYWRQbHVnaW4ocGx1Z2luTmFtZSwgZnVuY3Rpb24oKSB7DQorICAgICAgICAgICAgICAgIC8vIE9uIHN1Y2Nlc3NmdWwgbG9hZCwgd2UnbGwgcmVnaXN0ZXIgdGhlIHBsdWdpbiB3aXRoIHRoaXMgaW5zdGFuY2UuDQorICAgICAgICAgICAgICAgIHNlbGYuZWRpdG9yLnJlZ2lzdGVyUGx1Z2lucyhbcGx1Z2luTmFtZV0pOw0KKyAgICAgICAgICAgICAgICBYaW5oYS5yZWZyZXNoUGx1Z2luKHNlbGYuZWRpdG9yLnBsdWdpbnNbcGx1Z2luTmFtZV0uaW5zdGFuY2UpOw0KKyAgICAgICAgICAgICAgICAvLyBOb3cgdGhhdA0KKyAgICAgICAgICAgICAgICBzZWxmLmVkaXRvci5fcmVidWlsZFRvb2xiYXIoKTsNCisgICAgICAgICAgICAgIH0sIGNvbmZpZy5wbHVnaW5zW3BsdWdpbk5hbWVdKTsNCisgICAgfQ0KKyAgfQ0KK30NCisNCisvKioNCisgKiBQcmVzZW50IHRoZSB1c2VyIHdpdGggYSBjbGVhbiBzbGF0ZSBkb2N1bWVudC4gIFNvbWVkYXksIHdlJ2xsIGN5Y2xlIHRocm91Z2gNCisgKiBhIGxpc3Qgb2YgdGVtcGxhdGVzIGluIHN0b3JhZ2UuDQorICovDQorUGVyc2lzdGVudFN0b3JhZ2UucHJvdG90eXBlLm5ld0RvY3VtZW50ID0gZnVuY3Rpb24gKCkgew0KKyAgaWYgKHRoaXMuZWRpdG9yLl9kb2MuYm9keS5sYXN0Q2hpbGQpIHsNCisgICAgLy8gVGhlcmUncyBhbHJlYWR5IHNvbWUgY29udGVudCwgbGV0J3MgbWFrZSBzdXJlLg0KKyAgICBpZiAoIWNvbmZpcm0oWGluaGEuX2xjKCdUaGlzIHdpbGwgZXJhc2UgYW55IHVuc2F2ZWQgY29udGVudC4gIElmIHlvdVwncmUgY2VydGFpbiwgcGxlYXNlIGNsaWNrIE9LIHRvIGNvbnRpbnVlLicsICdQZXJzaXN0ZW50U3RvcmFnZScpKSkgew0KKyAgICAgIHJldHVybjsNCisgICAgfQ0KKyAgfQ0KKyAgd2hpbGUgKHRoaXMuZWRpdG9yLl9kb2MuYm9keS5sYXN0Q2hpbGQpIHsNCisgICAgdGhpcy5lZGl0b3IuX2RvYy5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuZWRpdG9yLl9kb2MuYm9keS5sYXN0Q2hpbGQpOw0KKyAgfQ0KK30NCisNCisvKioNCisgKiBQcmVzZW50IGEgc2F2ZSBkaWFsb2cgdG8gdGhlIHVzZXIuDQorICovDQorUGVyc2lzdGVudFN0b3JhZ2UucHJvdG90eXBlLnNhdmVEaWFsb2cgPSBmdW5jdGlvbiAoKSB7DQorICB2YXIgc2VsZiA9IHRoaXM7DQorDQorICAvLyBTZXR1cCB0aGUgZGlhbG9nIHRpdGxlDQorICB2YXIgdGl0bGUgPSB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgiaDEiKTsNCisgIHRpdGxlLmlubmVySFRNTCA9IFhpbmhhLl9sYygnU2F2ZSBEb2N1bWVudCcsICdQZXJzaXN0ZW50U3RvcmFnZScpOw0KKw0KKyAgLy8gU2V0dXAgdGhlIGNvbmZpcm1hdGlvbiBidXR0b24gYW5kIGFjdGlvbi4NCisgIHZhciBidXR0b24gPSB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgiY29uZmlybSIpOw0KKyAgYnV0dG9uLnZhbHVlID0gWGluaGEuX2xjKCdTYXZlJywgJ1BlcnNpc3RlbnRTdG9yYWdlJyk7DQorICBidXR0b24ub25jbGljayA9IGZ1bmN0aW9uKCkgew0KKyAgICBzZWxmLnNhdmVEb2N1bWVudCgpOw0KKyAgfTsNCisNCisgIC8vIEVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgYnV0dG9ucyB3aXRoIGZpbGVuYW1lIGlucHV0DQorICB2YXIgbmFtZWlucHV0ID0gdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoImZpbGVuYW1lIik7DQorDQorICBidXR0b24uZGlzYWJsZWQgPSBuYW1laW5wdXQudmFsdWUgPyBmYWxzZSA6IHRydWU7DQorDQorICBuYW1laW5wdXQub25rZXl1cCA9IG5hbWVpbnB1dC5vbmtleXByZXNzID0gbmFtZWlucHV0Lm9uY2hhbmdlID0gZnVuY3Rpb24oKSB7DQorDQorICAgIGJ1dHRvbi5kaXNhYmxlZCA9IG5hbWVpbnB1dC52YWx1ZSA/IGZhbHNlIDogdHJ1ZTsNCisgIH0NCisNCisgIHRoaXMuc2hvd0RpYWxvZyh7dHlwZUZpbHRlcjpbJ2RvY3VtZW50JywnaHRtbCcsJ3RleHQnLCdmb2xkZXInXSwgc3R5bGVGb3I6J2RvY3VtZW50c2F2ZSd9KTsNCit9DQorDQorLyoqDQorICogVXNlIHRoZSBzZWxlY3RlZCBiYWNrZW5kIHRvIHNhdmUgdGhlIGN1cnJlbnQgZG9jdW1lbnQuDQorICovDQorUGVyc2lzdGVudFN0b3JhZ2UucHJvdG90eXBlLnNhdmVEb2N1bWVudCA9IGZ1bmN0aW9uICgpIHsNCisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsNCisgIHZhciBtb2R1bGUgPSB0aGlzLl9iYWNrZW5kc1t0aGlzLl9hY3RpdmVCYWNrZW5kXS5tb2R1bGU7DQorDQorICB2YXIgZmlsZW5hbWUgPSB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgiZmlsZW5hbWUiKTsNCisgIG1vZHVsZS5zYXZlRG9jdW1lbnQobW9kdWxlLnZpZXdGaWx0ZXIsIGZpbGVuYW1lLnZhbHVlLCBlZGl0b3IuZ2V0SFRNTCgpLCBmdW5jdGlvbigpIHsNCisgICAgbW9kdWxlLmNhY2hlID0gbnVsbDsNCisgIH0pOw0KKw0KKyAgdGhpcy5kaWFsb2cuaGlkZSgpOw0KK30NCisNCisvKioNCisgKiBQcmVzZW50IGFuIG9wZW4gZGlhbG9nIHRvIHRoZSB1c2VyLg0KKyAqLw0KK1BlcnNpc3RlbnRTdG9yYWdlLnByb3RvdHlwZS5vcGVuRGlhbG9nID0gZnVuY3Rpb24gKCkgew0KKyAgdmFyIHNlbGYgPSB0aGlzOw0KKw0KKyAgLy8gU2V0dXAgdGhlIGRpYWxvZyB0aXRsZQ0KKyAgdmFyIHRpdGxlID0gdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoImgxIik7DQorICB0aXRsZS5pbm5lckhUTUwgPSBYaW5oYS5fbGMoJ09wZW4gRG9jdW1lbnQnLCAnUGVyc2lzdGVudFN0b3JhZ2UnKTsNCisNCisgIC8vIFNldHVwIHRoZSBjb25maXJtYXRpb24gYnV0dG9uIGFuZCBhY3Rpb24uDQorICB2YXIgYnV0dG9uID0gdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoImNvbmZpcm0iKTsNCisgIGJ1dHRvbi52YWx1ZSA9IFhpbmhhLl9sYygnT3BlbicsICdQZXJzaXN0ZW50U3RvcmFnZScpOw0KKyAgYnV0dG9uLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsNCisgICAgc2VsZi5vcGVuRG9jdW1lbnQoKTsNCisgIH07DQorDQorICB0aGlzLnNob3dEaWFsb2coe3R5cGVGaWx0ZXI6Wydkb2N1bWVudCcsJ2h0bWwnLCd0ZXh0JywnZm9sZGVyJ10sIHN0eWxlRm9yOidkb2N1bWVudGxvYWQnfSk7DQorfQ0KKw0KKy8qKg0KKyAqIFVzZSB0aGUgc2VsZWN0ZWQgYmFja2VuZCB0byBsb2FkIHRoZSBzZWxlY3RlZCBlbnRyeSBpbnRvIHRoZSBlZGl0b3IuDQorICovDQorUGVyc2lzdGVudFN0b3JhZ2UucHJvdG90eXBlLm9wZW5Eb2N1bWVudCA9IGZ1bmN0aW9uICgpIHsNCisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsNCisNCisgIHZhciBtb2R1bGUgPSB0aGlzLl9iYWNrZW5kc1t0aGlzLl9hY3RpdmVCYWNrZW5kXS5tb2R1bGU7DQorICBtb2R1bGUubG9hZERvY3VtZW50KHRoaXMuc2VsZWN0ZWRFbnRyeVswXSwgZnVuY3Rpb24oZG9jdW1lbnRTb3VyY2UpIHsNCisgICAgICAgICAgICAgICAgICAgZWRpdG9yLnNldEhUTUwoZG9jdW1lbnRTb3VyY2UpOw0KKyAgICAgICAgICAgICAgICAgfSk7DQorDQorICB0aGlzLmRpYWxvZy5oaWRlKCk7DQorfQ0KKw0KKy8qKg0KKyAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IHR3ZWFrIHRoZSBkaXNwbGF5IG9mIHRoZSBkaWFsb2cuDQorICogQHBhcmFtIG9wdGlvbnMudHlwZUZpbHRlciB7U3RyaW5nW119IE9iamVjdCB0eXBlcyB0byBhbGxvdyBpbiB0aGUgZGlzcGxheS4NCisgKiBQb3NzaWJpbGl0aWVzIGFyZSAnaW1hZ2UnLCAnbWVkaWEnLCAnZG9jdW1lbnQnLCBhbmQgJ2ZvbGRlcicuDQorICogQHBhcmFtIG9wdGlvbnMuc3R5bGVGb3Ige1N0cmluZ30gUG9zc2libGUgc3R5bGluZ3Mgb2YgdGhlIGRpYWxvZy4gIFRoaXMgY2FuDQorICogYmUgJ2luc2VydGlvbicsICdsaW5rJywgJ2RvY3VtZW50c2F2ZScsIG9yICdkb2N1bWVudGxvYWQnLg0KKyAqIEBleGFtcGxlDQorICogSW50ZXJmYWNlIE1vY2t1cA0KKyAqDQorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKiAqICNQbGFjZXMjIyAjRmlsZSBCcm93c2VyIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqDQorICogKiAjICAgICAgICMgIyBfX19fX19fX19fX19fXyAgICAgICAgICBfX19fX19fX19fX19fX19fIF9fX19fX19fX19fX19fX18gICMgKg0KKyAqICogIyAgPT09ICAjICMgfC9zdWJkaXIgICAgIHwgIF4oVXApICAgfCpDcmVhdGUgRm9sZGVyfCB8VmlldyBhcyBJY29uc158ICAjICoNCisgKiAqICMgIHwqfCAgIyAjIC0tLS0tLS0tLS0tLS0tICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLSAgIyAqDQorICogKiAjICB8KnwgICMgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKg0KKyAqICogIyAgPT09ICAjICMgKioqKioqKioqKiogICoqKioqKioqKioqICAqKioqKioqKioqKiAgKioqKioqKioqKiogICAgICAgICAjICoNCisgKiAqICNTZXJ2ZXIgIyAjICogIFRodW1iICAqICAqICBUaHVtYiAgKiAgKiAgVGh1bWIgICogICogIFRodW1iICAqICAgICAgICAgIyAqDQorICogKiAjICAgICAgICMgIyAqICAgICAgICAgKiAgKiAgICAgICAgICogICogICAgICAgICAqICAqICAgICAgICAgKiAgICAgICAgICMgKg0KKyAqICogIyAgL1wgICAjICMgKihFZGl0KSAgICogICooRWRpdCkgICAqICAqKEVkaXQpICAgKiAgKihFZGl0KSAgICogICAgICAgICAjICoNCisgKiAqICMgPCAgPiAgIyAjICooRGVsZXRlKSAqICAqKERlbGV0ZSkgKiAgKihEZWxldGUpICogICooRGVsZXRlKSAqICAgICAgICAgIyAqDQorICogKiAjICBcLyAgICMgIyAqKioqKioqKioqKiAgKioqKioqKioqKiogICoqKioqKioqKioqICAqKioqKioqKioqKiAgICAgICAgICMgKg0KKyAqICogIyBHZWFycyAjICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICoNCisgKiAqICMgICAgICAgIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqDQorICogKiAjICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqICogIyAgICAgICAjICpJbXBvcnQtKENvbGxhcHNlZCkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICoNCisgKiAqICMgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICogKiAjICAgICAgICMgI0ZpbGUgTmFtZSAtb3ItIEZpbGUgRGV0YWlscyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKg0KKyAqICogIyAgICAgICAjICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICoNCisgKiAqICMgICAgICAgIyAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAqDQorICogKiAjICAgICAgICMgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKg0KKyAqICogIyAgICAgICAjICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICoNCisgKiAqICMjIyMjIyMjIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqDQorICogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKi8NCisNCitQZXJzaXN0ZW50U3RvcmFnZS5wcm90b3R5cGUuc2hvd0RpYWxvZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7DQorICAvLyBDcmVhdGUgYSByZWZlcmVuY2UgdG8gdGhpcyBQUyBpbnN0YW5jZSB0byBhbGxvdyBmb3IgYXN5bmNocm9ub3VzDQorICAvLyBjb250aW51YXRpb24gKGlmIHdlJ3JlIG5vdCByZWFkeS4pDQorICB2YXIgc2VsZiA9IHRoaXM7DQorDQorICBpZiAoIXRoaXMucmVhZHkpIHsNCisgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7c2VsZi5zaG93RGlhbG9nKG9wdGlvbnMpO30sIDgwKTsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKyAgDQorICAvLyBXZSBoaWRlIGFuZCBzaG93IHRoZSB2YXJpb3VzIGVsZW1lbnRzIG9mIHRoZSBkaWFsb2cgZGVwZW5kaW5nIG9uIHVzYWdlLg0KKyAgcmVtb3ZlQ2xhc3ModGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoIldXVyIpLCAnaGlkZGVuJyk7DQorICBhZGRDbGFzcyh0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgibmFtZWZpZWxkIiksICdoaWRkZW4nKTsNCisgIGFkZENsYXNzKHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJwbGFjZVd3dyIpLCAnaGlkZGVuJyk7DQorICBhZGRDbGFzcyh0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgicGxhY2VCYWNrZW5kIiksICdoaWRkZW4nKTsNCisNCisgIHN3aXRjaCAob3B0aW9ucy5zdHlsZUZvcikgew0KKyAgICBjYXNlICdsaW5rJzoNCisgICAgICByZW1vdmVDbGFzcyh0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgicGxhY2VXd3ciKSwgJ2hpZGRlbicpOw0KKyAgICAgIHRoaXMudXBkYXRlUGxhY2VzRGlzcGxheSgnc2hhcmVkX3B1Ymxpc2gnKTsNCisgICAgICBicmVhazsNCisgICAgY2FzZSAnaW5zZXJ0aW9uJzoNCisgICAgICByZW1vdmVDbGFzcyh0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgicGxhY2VCYWNrZW5kIiksICdoaWRkZW4nKTsNCisgICAgICB0aGlzLnVwZGF0ZVBsYWNlc0Rpc3BsYXkoJ3NoYXJlZF9wdWJsaXNoJyk7DQorICAgICAgYnJlYWs7DQorICAgIGNhc2UgJ2RvY3VtZW50c2F2ZSc6DQorICAgICAgYWRkQ2xhc3ModGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoIldXVyIpLCAnaGlkZGVuJyk7DQorICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoIm5hbWVmaWVsZCIpLCAnaGlkZGVuJyk7DQorICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoInBsYWNlQmFja2VuZCIpLCAnaGlkZGVuJyk7DQorICAgICAgdGhpcy51cGRhdGVQbGFjZXNEaXNwbGF5KCdmaWxlX29wZXJhdGlvbnMnKTsNCisgICAgICBicmVhazsNCisgICAgY2FzZSAnZG9jdW1lbnRsb2FkJzoNCisgICAgICBhZGRDbGFzcyh0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgiV1dXIiksICdoaWRkZW4nKTsNCisgICAgICByZW1vdmVDbGFzcyh0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgicGxhY2VCYWNrZW5kIiksICdoaWRkZW4nKTsNCisgICAgICB0aGlzLnVwZGF0ZVBsYWNlc0Rpc3BsYXkoJ2ZpbGVfb3BlcmF0aW9ucycpOw0KKyAgICAgIGJyZWFrOw0KKyAgfQ0KKw0KKyAgdmFyIGRpcmVjdG9yaWVzID0gdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoImZpbHRlcnMiKTsNCisgIHZhciBmaWxlQnJvd3NlciA9IHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJmaWxlTGlzdCIpOw0KKw0KKyAgLy8gU3RvcmUgdGhlIHR5cGUgZmlsdGVyIHNvIHRoYXQgdmlldyB1cGRhdGVzIHdpbGwgY29ycmVjdGx5IGZpbHRlciB0aGUgY29udGVudHMuDQorICB0aGlzLl90eXBlRmlsdGVyID0gb3B0aW9ucy50eXBlRmlsdGVyOw0KKw0KKyAgdmFyIG1vZHVsZSA9IHRoaXMuX2JhY2tlbmRzW3RoaXMuX2FjdGl2ZUJhY2tlbmRdLm1vZHVsZTsNCisNCisgIHRoaXMudXBkYXRlRmlsZUJyb3dzZXIoKTsNCit9DQorDQorLyoqDQorICogVGFrZSB0aGUgbGlzdCBvZiBmaWx0ZXJzIGFuZCBidWlsZCB0aGUgY29udGVudHMgb2YgdGhlIHNlbGVjdCBlbGVtZW50Lg0KKyAqIEBwYXJhbSBmaWx0ZXJzIHtGaWx0ZXJbXX0gQW4gYXJyYXkgb2YgZmlsdGVyIGNob2ljZXMgdG8gZGlzcGxheSB0byB0aGUgdXNlci4NCisgKiBAcGFyYW0gZmlsdGVyc1tuXS52YWx1ZSBUaGUgdW5pcXVlIGtleSB0aGF0IHJlcHJlc2VudHMgdGhpcyBmaWx0ZXIgdG8gdGhlIGJhY2tlbmQuDQorICogQHBhcmFtIGZpbHRlcnNbbl0uZGlzcGxheSB7U3RyaW5nfSBBIHRleHQgc3RyaW5nIHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIgdG8NCisgKiByZXByZXNlbnQgdGhlIGdpdmVuIGZpbHRlci4NCisgKiBAcGFyYW0gc2VsZWN0IHtIVE1MRWxlbWVudH0gVGhlIHNlbGVjdCBub2RlIHRvIHVwZGF0ZS4NCisgKi8NCitQZXJzaXN0ZW50U3RvcmFnZS5wcm90b3R5cGUuZGlzcGxheUZpbHRlcnMgPSBmdW5jdGlvbihmaWx0ZXJzLCB2aWV3RmlsdGVyKSB7DQorICAvLyBDbGVhciBvdXQgdGhlIHByZXZpb3VzIGRpcmVjdG9yeSBsaXN0aW5nLg0KKyAgdmFyIHNlbGVjdCA9IHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJmaWx0ZXJzIik7DQorICB3aGlsZSAoc2VsZWN0Lmxhc3RDaGlsZCkgew0KKyAgICBzZWxlY3QucmVtb3ZlQ2hpbGQoc2VsZWN0Lmxhc3RDaGlsZCk7DQorICB9DQorDQorICAvLyBGb3IgZWFjaCBlbGVtZW50IGluIHRoZSBhcnJheSwgd2UgZXh0cmFjdCBvdXQgdGhlIGRpc3BsYXkgdGV4dCBhbmQgdGhlDQorICAvLyB2YWx1ZSBhbmQgcHV0IHRoZW0gaW50byBhbiBvcHRpb24gZWxlbWVudCB0byBhZGQgdG8gdGhlIHNlbGVjdCBlbGVtZW50Lg0KKyAgZm9yICh2YXIgaW5kZXg9MDsgaW5kZXg8ZmlsdGVycy5sZW5ndGg7ICsraW5kZXgpIHsNCisgICAgdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOw0KKyAgICBvcHRpb24uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIGZpbHRlcnNbaW5kZXhdLnZhbHVlKTsNCisgICAgaWYgKGZpbHRlcnNbaW5kZXhdLnZhbHVlID09IHZpZXdGaWx0ZXIpIHsNCisgICAgICBvcHRpb24uc2V0QXR0cmlidXRlKCJzZWxlY3RlZCIsICdzZWxlY3RlZCcpOw0KKyAgICB9DQorDQorICAgIHZhciB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZmlsdGVyc1tpbmRleF0uZGlzcGxheSk7DQorICAgIG9wdGlvbi5hcHBlbmRDaGlsZCh0ZXh0KTsNCisNCisgICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbik7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAqIEdpdmVuIGFuIGVudHJ5LCBidWlsZCBhbiBodG1sIFVJIGVsZW1lbnQuDQorICogQHBhcmFtIGVudHJ5IEFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBmaWxlIGVudHJ5Lg0KKyAqIEBwYXJhbSBlbnRyeS5VUkwgVGhlIFVSTCB3aGVyZSB0aGlzIGVudHJ5IGlzIGxvY2F0ZWQsIGlmIGF2YWlsYWJsZSwNCisgKiBAcGFyYW0gZW50cnkudGh1bWJVUkwgVGhlIFVSTCBvZiBhbiBpbWFnZSB0aGF0IHJlcHJlc2VudHMgYSB0aHVtYm5haWwNCisgKiBwcmV2aWV3IG9mIHRoaXMgZmlsZS4NCisgKiBAcGFyYW0gZW50cnkuJHR5cGUge1N0cmluZ30gVGhlIHR5cGUgb2YgdGhpcyBlbnRyeS4gIFRoaXMgY2FuIGJlIG9uZSBvZjoNCisgKiAnaW1hZ2UnLCAnbWVkaWEnLCAnZm9sZGVyJywgJ2RvY3VtZW50JywgJ2h0bWwnLCBvciAndGV4dCcNCisgKiBAcGFyYW0gZW50cnkubmFtZSBUaGUgbmFtZSBvZiB0aGlzIGVudHJ5IHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIuDQorICovDQorUGVyc2lzdGVudFN0b3JhZ2UucHJvdG90eXBlLmJ1aWxkVGh1bWJuYWlsID0gZnVuY3Rpb24oZW50cnkpIHsNCisgIHZhciBzZWxmID0gdGhpczsNCisNCisgIC8vIFdlIHN0b3JlIHRoZSBhY3RpdmUgbW9kdWxlIHNvIHRoYXQgYW55IGVsZW1lbnRzIGJ1aWx0IHdpdGggZGF0YSBmcm9tIHRoaXMNCisgIC8vIG1vZHVsZSBjYW4gY2FsbCBiYWNrIHRvIGl0Lg0KKyAgdmFyIG1vZHVsZSA9IHRoaXMuX2JhY2tlbmRzW3RoaXMuX2FjdGl2ZUJhY2tlbmRdLm1vZHVsZTsNCisNCisgIHZhciBmaWxlQmxvY2sgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCisgIGZpbGVCbG9jay5lbnRyeSA9IGVudHJ5Ow0KKyAgZmlsZUJsb2NrLmNsYXNzTmFtZSA9ICdmaWxlJzsNCisNCisNCisgIC8vIFVzZSBhIGNsb3N1cmUgaGVyZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgb25jbGljayBoYW5kbGVyIGhhcyB0aGUNCisgIC8vIHJpZ2h0IGJpbmRpbmcsDQorICBYaW5oYS5fYWRkRXZlbnQoZmlsZUJsb2NrLCAiY2xpY2siLCBmdW5jdGlvbihldikgew0KKyAgICBldiA9IGV2IHx8IHdpbmRvdy5ldmVudDsNCisgICAgWGluaGEuX3N0b3BFdmVudChldik7DQorICAgIGlmIChzZWxmLnNlbGVjdGVkRW50cnkpIHsNCisgICAgICAvLyBVbnNlbGVjdA0KKyAgICAgIHJlbW92ZUNsYXNzKHNlbGYuc2VsZWN0ZWRFbnRyeVsxXSwgJ3NlbGVjdGVkJyk7DQorICAgICAgaWYgKHNlbGYuc2VsZWN0ZWRFbnRyeVsxXSA9PSBmaWxlQmxvY2spIHsNCisgICAgICAgIC8vIEFsbG93IGNsaWNrIHRvIHRvZ2dsZS4NCisgICAgICAgIHNlbGYuc2VsZWN0ZWRFbnRyeSA9IG51bGw7DQorICAgICAgICByZXR1cm47DQorICAgICAgfQ0KKyAgICB9DQorICAgIHNlbGYuc2VsZWN0ZWRFbnRyeSA9IFtlbnRyeSwgZmlsZUJsb2NrXTsNCisgICAgc2VsZi5zZWxlY3RlZEVudHJ5WzFdLmNsYXNzTmFtZSArPSAnIHNlbGVjdGVkJzsNCisNCisgICAgdmFyIGZpbGVuYW1lID0gc2VsZi5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVuYW1lJyk7DQorICAgIGZpbGVuYW1lLnZhbHVlID0gZW50cnkubmFtZTsNCisNCisgICAgdmFyIGNvbmZpcm1idXR0b24gPSBzZWxmLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgnY29uZmlybScpOw0KKyAgICBjb25maXJtYnV0dG9uLmRpc2FibGVkID0gZmFsc2U7DQorICB9KTsNCisNCisgIHZhciBpbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOw0KKyAgaW1hZ2UuY2xhc3NOYW1lID0gJ2ljb24nOw0KKyAgaWYgKGVudHJ5LiR0eXBlID09ICdpbWFnZScpIHsNCisgICAgaW1hZ2UuY2xhc3NOYW1lID0gJ3RodW1iJzsNCisgICAgaW1hZ2Uuc2V0QXR0cmlidXRlKCdzcmMnLCBlbnRyeS5VUkwpOw0KKyAgfSBlbHNlIGlmIChlbnRyeS4kdHlwZSA9PSAnZm9sZGVyJykgew0KKyAgICBpbWFnZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIGVudHJ5LnRodW1iVVJMIHx8IGVudHJ5LlVSTCB8fCB0aGlzLmVkaXRvci5pbWdVUkwoJ2ltYWdlcy90YW5nby8zMngzMi9wbGFjZXMvZm9sZGVyLnBuZycpKTsNCisgIH0gZWxzZSBpZiAoZW50cnkuJHR5cGUgPT0gJ2RvY3VtZW50Jykgew0KKyAgICBpbWFnZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIGVudHJ5LnRodW1iVVJMIHx8IGVudHJ5LlVSTCB8fCB0aGlzLmVkaXRvci5pbWdVUkwoJ2ltYWdlcy90YW5nby8zMngzMi9taW1ldHlwZXMvdGV4dC1odG1sLnBuZycpKTsNCisgIH0gZWxzZSBpZiAoZW50cnkuJHR5cGUgPT0gJ2h0bWwnKSB7DQorICAgIGltYWdlLnNldEF0dHJpYnV0ZSgnc3JjJywgZW50cnkudGh1bWJVUkwgfHwgZW50cnkuVVJMIHx8IHRoaXMuZWRpdG9yLmltZ1VSTCgnaW1hZ2VzL3RhbmdvLzMyeDMyL21pbWV0eXBlcy90ZXh0LWh0bWwucG5nJykpOw0KKyAgfSBlbHNlIGlmIChlbnRyeS4kdHlwZSA9PSAndHh0Jykgew0KKyAgICBpbWFnZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIGVudHJ5LnRodW1iVVJMIHx8IGVudHJ5LlVSTCB8fCB0aGlzLmVkaXRvci5pbWdVUkwoJ2ltYWdlcy90YW5nby8zMngzMi9taW1ldHlwZXMvdGV4dC1nLWdlbmVyaWMucG5nJykpOw0KKyAgfSBlbHNlIHsNCisgICAgaW1hZ2Uuc2V0QXR0cmlidXRlKCdzcmMnLCBlbnRyeS50aHVtYlVSTCB8fCBlbnRyeS5VUkwgfHwgdGhpcy5lZGl0b3IuaW1nVVJMKCdpbWFnZXMvdGFuZ28vMzJ4MzIvbWltZXR5cGVzL3gtb2ZmaWNlLWRvY3VtZW50LnBuZycpKTsNCisgIH0NCisgICAgaW1hZ2UgPSBmaWxlQmxvY2suYXBwZW5kQ2hpbGQoaW1hZ2UpOw0KKw0KKw0KKyAgdmFyIGRlbGV0ZUljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsNCisgIGRlbGV0ZUljb24uY2xhc3NOYW1lID0gJ2FjdGlvbiBkZWxldGUnOw0KKyAgZGVsZXRlSWNvbi5zZXRBdHRyaWJ1dGUoJ2FsdCcsIFhpbmhhLl9sYygnRGVsZXRlJywgJ1BlcnNpc3RlbnRTdG9yYWdlJykpOw0KKyAgZGVsZXRlSWNvbi5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgWGluaGEuX2xjKCdEZWxldGUnLCAnUGVyc2lzdGVudFN0b3JhZ2UnKSk7DQorICBkZWxldGVJY29uLnNldEF0dHJpYnV0ZSgnc3JjJywgdGhpcy5lZGl0b3IuaW1nVVJMKCdpbWFnZXMvdGFuZ28vMTZ4MTYvcGxhY2VzL3VzZXItdHJhc2gucG5nJykpOw0KKyAgZGVsZXRlSWNvbiA9IGZpbGVCbG9jay5hcHBlbmRDaGlsZChkZWxldGVJY29uKTsNCisNCisgIFhpbmhhLl9hZGRFdmVudChkZWxldGVJY29uLCAiY2xpY2siLCBmdW5jdGlvbihldikgew0KKyAgICBldiA9IGV2IHx8IHdpbmRvdy5ldmVudDsNCisgICAgWGluaGEuX3N0b3BFdmVudChldik7DQorICAgIG1vZHVsZS5kZWxldGVFbnRyeShlbnRyeSwgZnVuY3Rpb24oc3VjY2Vzcykgew0KKyAgICAgIG1vZHVsZS5jYWNoZSA9IG51bGw7DQorICAgICAgaWYgKHN1Y2Nlc3MpIHsNCisgICAgICAgIGZpbGVCbG9jay5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGZpbGVCbG9jayk7DQorICAgICAgfSBlbHNlIHsNCisgICAgICAgIGFsZXJ0KCdFcnJvciBkZWxldGluZyBmaWxlICcgKyBlbnRyeS5uYW1lKTsNCisgICAgICB9DQorICAgIH0pOw0KKyAgfSk7DQorDQorDQorICB2YXIgZmlsZU5hbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7DQorICBmaWxlTmFtZS5jbGFzc05hbWUgPSAnZmlsZW5hbWUnOw0KKyAgdmFyIGZpbGVOYW1lVGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGVudHJ5Lm5hbWUpOw0KKyAgZmlsZU5hbWVUZXh0ID0gZmlsZU5hbWUuYXBwZW5kQ2hpbGQoZmlsZU5hbWVUZXh0KTsNCisgIGZpbGVOYW1lID0gZmlsZUJsb2NrLmFwcGVuZENoaWxkKGZpbGVOYW1lKTsNCisNCisgIC8vIFVzZSBhIGNsb3N1cmUgaGVyZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgb25jbGljayBoYW5kbGVyIGhhcyB0aGUNCisgIC8vIHJpZ2h0IGJpbmRpbmcsDQorICBmaWxlTmFtZS5vbmNsaWNrID0gZnVuY3Rpb24oZmlsZU5hbWUpIHsNCisgICAgcmV0dXJuIGZ1bmN0aW9uKGV2KSB7DQorICAgICAgZXYgPSBldiB8fCB3aW5kb3cuZXZlbnQ7DQorICAgICAgWGluaGEuX3N0b3BFdmVudChldik7DQorICAgICAgZmlsZU5hbWUuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOw0KKyAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfTsNCisgIH0oZmlsZU5hbWUpOw0KKw0KKyAgdmFyIGNvcHlJY29uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7DQorICBjb3B5SWNvbi5jbGFzc05hbWUgPSAnYWN0aW9uIGNvcHknOw0KKyAgY29weUljb24uc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLmVkaXRvci5pbWdVUkwoJ2ltYWdlcy90YW5nby8xNngxNi9hY3Rpb25zL2VkaXQtY29weS5wbmcnKSk7DQorICBjb3B5SWNvbi5zZXRBdHRyaWJ1dGUoJ2FsdCcsIFhpbmhhLl9sYygnQ29weScsICdQZXJzaXN0ZW50U3RvcmFnZScpKTsNCisgIGNvcHlJY29uLnNldEF0dHJpYnV0ZSgndGl0bGUnLCBYaW5oYS5fbGMoJ0NvcHknLCAnUGVyc2lzdGVudFN0b3JhZ2UnKSk7DQorDQorICBYaW5oYS5fYWRkRXZlbnQoY29weUljb24sICJjbGljayIsIGZ1bmN0aW9uKGV2KSB7DQorICAgIGV2ID0gZXYgfHwgd2luZG93LmV2ZW50Ow0KKyAgICBYaW5oYS5fc3RvcEV2ZW50KGV2KTsNCisgICAgbW9kdWxlLmNvcHlFbnRyeShlbnRyeSwgZnVuY3Rpb24oc3VjY2VzcywgbmV3ZW50cnkpIHsNCisgICAgICBtb2R1bGUuY2FjaGUgPSBudWxsOw0KKyAgICAgIGlmIChzdWNjZXNzKSB7DQorICAgICAgICBmaWxlQmxvY2sucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChzZWxmLmJ1aWxkVGh1bWJuYWlsKG5ld2VudHJ5KSk7DQorICAgICAgfSBlbHNlIHsNCisgICAgICAgIGFsZXJ0KCdFcnJvciBjb3B5aW5nIGZpbGUgJyArIGVudHJ5Lm5hbWUpOw0KKyAgICAgIH0NCisgICAgfSk7DQorICB9KTsNCisNCisgIGNvcHlJY29uID0gZmlsZUJsb2NrLmFwcGVuZENoaWxkKGNvcHlJY29uKTsNCisNCisgIHJldHVybiBmaWxlQmxvY2s7DQorfQ0KKw0KKy8qKg0KKyAqIEJ1aWxkIHVwIHRoZSBmaWxlIGJyb3dzZXIgZGlzcGxheSBpbiB0aGUgZWxlbWVudC4NCisgKiBAcGFyYW0gbWV0YWRhdGEge0VudHJ5W119IEEgbGlzdCBvZiBlbnRyaWVzIHRvIGRpc3BsYXkgaW4gdGhlIGZpbGUgYnJvd3Nlci4NCisgKiBAcGFyYW0gbWV0YWRhdGFbbl0uVVJMIFRoZSBVUkwgd2hlcmUgdGhpcyBlbnRyeSBpcyBsb2NhdGVkLCBpZiBhdmFpbGFibGUsDQorICogQHBhcmFtIG1ldGFkYXRhW25dLnRodW1iVVJMIFRoZSBVUkwgb2YgYW4gaW1hZ2UgdGhhdCByZXByZXNlbnRzIGEgdGh1bWJuYWlsDQorICogcHJldmlldyBvZiB0aGlzIGZpbGUuDQorICogQHBhcmFtIG1ldGFkYXRhW25dLiR0eXBlIHtTdHJpbmd9IFRoZSB0eXBlIG9mIHRoaXMgZW50cnkuICBUaGlzIGNhbiBiZSBvbmUgb2Y6DQorICogJ2ltYWdlJywgJ21lZGlhJywgJ2ZvbGRlcicsICdkb2N1bWVudCcsICdodG1sJywgb3IgJ3RleHQnDQorICogQHBhcmFtIG1ldGFkYXRhW25dLm5hbWUgVGhlIG5hbWUgb2YgdGhpcyBlbnRyeSB0byBkaXNwbGF5IHRvIHRoZSB1c2VyLg0KKyAqLw0KK1BlcnNpc3RlbnRTdG9yYWdlLnByb3RvdHlwZS5kaXNwbGF5QnJvd3NlciA9IGZ1bmN0aW9uKG1ldGFkYXRhKSB7DQorDQorICAvLyBUaGUgZGl2IGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgZmlsZSBicm93c2VyLg0KKyAgdmFyIGRpdiA9IHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJmaWxlTGlzdCIpOw0KKw0KKyAgLy8gQ2xlYXIgb3V0IHRoZSBwcmV2aW91cyBkaXJlY3RvcnkgbGlzdGluZy4NCisgIHdoaWxlIChkaXYubGFzdENoaWxkKSB7DQorICAgIGRpdi5yZW1vdmVDaGlsZChkaXYubGFzdENoaWxkKTsNCisgIH0NCisNCisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsNCisgIHZhciBzZWxmID0gdGhpczsNCisNCisgIGZvciAodmFyIGluZGV4PTA7IGluZGV4PG1ldGFkYXRhLmxlbmd0aDsgKytpbmRleCkgew0KKyAgICAgIHN3aXRjaCAodGhpcy5fdmlld1R5cGUpIHsNCisgICAgICAgIGNhc2UgJ2xpc3RpbmcnOg0KKyAgICAgICAgICBicmVhazsNCisgICAgICAgIGNhc2UgJ3RodW1ibmFpbCc6DQorICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICB2YXIgdGh1bWIgPSBkaXYuYXBwZW5kQ2hpbGQodGhpcy5idWlsZFRodW1ibmFpbChtZXRhZGF0YVtpbmRleF0pKTsNCisNCisgICAgICAgICAgLy8gSWYgalF1ZXJ5IGlzIGxvYWRlZCB3aXRoIHRoZSBkcmFnZ2FibGUgYW5kIGRyb3BwYWJsZSBVSSBjb250cm9scywNCisgICAgICAgICAgLy8gd2UnbGwgZW5oYW5jZSBvdXIgaW50ZXJmYWNlLg0KKyAgICAgICAgICBpZiAoJCAmJiAkLnVpICYmICQudWkuZHJhZ2dhYmxlICYmICQudWkuZHJvcHBhYmxlKSB7DQorICAgICAgICAgICAgLy8gTWFrZSB0aGUgb2JqZWN0cyBkcmFnZ2FibGUsIGJ1dCBkb24ndCBhbGxvdyB0aGVtIHRvIGp1c3QgaGFuZw0KKyAgICAgICAgICAgIC8vIGFyb3VuZC4NCisgICAgICAgICAgICAkKHRodW1iKS5kcmFnZ2FibGUoe3JldmVydDp0cnVlfSk7DQorDQorICAgICAgICAgICAgLy8gQWxsIGZvbGRlcnMgYmVjb21lIGRyb3AgdGFyZ2V0cyB0byBhbGxvdyBmb3IgZWFzaWVyIG1vdmluZw0KKyAgICAgICAgICAgIC8vIGFyb3VuZC4NCisgICAgICAgICAgICBpZiAobWV0YWRhdGFbaW5kZXhdLiR0eXBlID09ICdmb2xkZXInKSB7DQorICAgICAgICAgICAgICAvLyBKdXN0IGluIGNhc2UgWGluaGEgaXMgdXNlZCBvbiBhIHBhZ2Ugd2l0aCBvdGhlciBkcmFnZ2FibGVzLCB3ZQ0KKyAgICAgICAgICAgICAgLy8gbmVlZCB0byBsaW1pdCB0aGUgdGFyZ2V0cyB3ZSBhY2NlcHQuDQorICAgICAgICAgICAgICAkKHRodW1iKS5kcm9wcGFibGUoe2FjY2VwdDogJyonLA0KKyAgICAgICAgICAgICAgICBkcm9wOiBmdW5jdGlvbihlLCB1aSkgew0KKw0KKyAgICAgICAgICAgICAgICAgIC8vIFNldCB1cCBhIHJlZmVyZW5jZSB0byB0aGUgZHJvcCB0YXJnZXQgc28gdGhhdCB3ZSBjYW4gbW92ZQ0KKyAgICAgICAgICAgICAgICAgIC8vIGFsbCBkcmFnZ2VkIGl0ZW1zIGludG8gaXQuDQorICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRoaXM7DQorDQorICAgICAgICAgICAgICAgICAgdWkuZHJhZ2dhYmxlLmVhY2goZnVuY3Rpb24oKSB7DQorICAgICAgICAgICAgICAgICAgICAvLyBXZSBleHRyYWN0IHRoZSBlbnRyeSByZWZlcmVuY2UgZnJvbSB0aGUgRE9NIG5vZGUuDQorICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZSA9IHRoaXM7DQorICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBmaWxlLmVudHJ5Ow0KKw0KKyAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogV2hvYWdoLi4uIFdoYXQgaWYgb3VyIGJhY2tlbmQgaXMgYSBkcm9wIHRhcmdldD8NCisgICAgICAgICAgICAgICAgICAgIHZhciBtb2R1bGUgPSBzZWxmLl9iYWNrZW5kc1tzZWxmLl9hY3RpdmVCYWNrZW5kXS5tb2R1bGU7DQorDQorICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG9ubHkgd29ya3MgaW50cmEtbW9kdWxlLi4uDQorICAgICAgICAgICAgICAgICAgICBtb2R1bGUubW92ZUVudHJ5KGVudHJ5LCB0YXJnZXQuZW50cnksIGZ1bmN0aW9uKHN1Y2Nlc3MpIHsNCisgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmNhY2hlID0gbnVsbDsNCisgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZmlsZSk7DQorICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ0Vycm9yIGRlbGV0aW5nIGZpbGUgJyArIGVudHJ5Lm5hbWUpOw0KKyAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICB9KTsNCisgICAgICAgICAgICAgICAgICB9KTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgfSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICB9DQorICAgICAgfQ0KKyAgfQ0KKw0KKyAgLy8gSWYgdGhlIGJyb3dzZXIgaXMgZW1wdHksIHdlJ2xsIGRpc3BsYXkgYW4gZW1wdHkgbWVzc2FnZQ0KKyAgaWYgKCFkaXYuZmlyc3RDaGlsZCkgew0KKyAgICB2YXIgbWVzc2FnZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdObyBmaWxlcyBmb3VuZCcpOw0KKyAgICBkaXYuYXBwZW5kQ2hpbGQobWVzc2FnZSk7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAqIFVwZGF0ZSB0aGUgZmlsZSBicm93c2VyIGFjY29yZGluZyB0byB0aGUgbGF0ZXN0IGNyaXRlcmlhLg0KKyAqLw0KK1BlcnNpc3RlbnRTdG9yYWdlLnByb3RvdHlwZS51cGRhdGVGaWxlQnJvd3NlciA9IGZ1bmN0aW9uKCkgew0KKyAgdmFyIHNlbGYgPSB0aGlzOw0KKw0KKyAgdmFyIG1vZHVsZSA9IHRoaXMuX2JhY2tlbmRzW3RoaXMuX2FjdGl2ZUJhY2tlbmRdLm1vZHVsZTsNCisNCisgIHZhciBidWlsZERpYWxvZyA9IGZ1bmN0aW9uKGNhY2hlKSB7DQorICAgIC8vIFdlIGNhY2hlIHRoZSBtb2R1bGUgZGF0YSB0byBzYXZlIHNlcnZlciByb3VuZHRyaXBzLg0KKyAgICBtb2R1bGUuY2FjaGUgPSBjYWNoZTsNCisNCisgICAgLy8gVGhlIGJhY2tlbmRzIGFyZSBleHBlY3RlZCB0byBwcm9jZXNzIHRoZWlyIGNhY2hlZCBkYXRhIHRvIGNyZWF0ZQ0KKyAgICAvLyB0d28gZGF0YSBzdHJ1Y3R1cmVzIGZvciB1cy4gIFRoZSBmaXJzdCBvbmUgaXMgYSBsaXN0IG9mIGZpbHRlcnMNCisgICAgLy8gdXNlZCB0byBrZWVwIHRoZSBhbW91bnQgb2YgZGF0YSBtYW5hZ2VhYmxlIGluIHRoZSBpbnRlcmZhY2UuDQorICAgIC8vIChlLmcuIGRpcmVjdG9yaWVzLCBvciB0YWdzLCBldGMuKQ0KKyAgICB2YXIgZmlsdGVycyA9IG1vZHVsZS5nZXRGaWx0ZXJzKG1vZHVsZS5jYWNoZSk7DQorDQorICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdmFsaWQgZmlsdGVyIGRhdGEsIHdlIHNldHVwIHRoZSBpbml0aWFsIGZpbHRlci4NCisgICAgdmFyIHJlc2V0RmlsdGVyID0gdHJ1ZTsNCisgICAgaWYgKG1vZHVsZS52aWV3RmlsdGVyKSB7DQorICAgICAgZm9yICh2YXIgaW5kZXg9MDsgaW5kZXg8ZmlsdGVycy5sZW5ndGg7ICsraW5kZXgpIHsNCisgICAgICAgIGlmIChmaWx0ZXJzW2luZGV4XS52YWx1ZSA9PSBtb2R1bGUudmlld0ZpbHRlcikgew0KKyAgICAgICAgICByZXNldEZpbHRlciA9IGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAocmVzZXRGaWx0ZXIpIHsNCisgICAgICBtb2R1bGUudmlld0ZpbHRlciA9IGZpbHRlcnNbMF0udmFsdWU7DQorICAgIH0NCisNCisgICAgLy8gVGhlIHNlY29uZCBkYXRhIHN0cnVjdHVyZSB3ZSBuZWVkIGlzIGEgbGlzdCBvZiBtZXRhZGF0YSBhYm91dA0KKyAgICAvLyBlYWNoIGZpbGUgc28gdGhhdCB3ZSBjYW4gZ2VuZXJhdGUgdGhlIGFwcHJvcHJpYXRlIGxpc3RpbmcuDQorICAgIHZhciBtZXRhZGF0YSA9IG1vZHVsZS5nZXRNZXRhZGF0YShtb2R1bGUuY2FjaGUsIG1vZHVsZS52aWV3RmlsdGVyLCBzZWxmLl90eXBlRmlsdGVyKTsNCisNCisgICAgc2VsZi5kaWFsb2cuc2hvdygpOw0KKw0KKyAgICBzZWxmLmRpc3BsYXlGaWx0ZXJzKGZpbHRlcnMsIG1vZHVsZS52aWV3RmlsdGVyKTsNCisgICAgc2VsZi5kaXNwbGF5QnJvd3NlcihtZXRhZGF0YSk7DQorICB9Ow0KKw0KKyAgaWYgKG1vZHVsZS5jYWNoZSkgew0KKyAgICBidWlsZERpYWxvZyhtb2R1bGUuY2FjaGUpOw0KKyAgICByZXR1cm47DQorICB9DQorDQorICBtb2R1bGUubG9hZERhdGEoYnVpbGREaWFsb2cpOw0KK30NCisNCisvKioNCisgKiBQcmVwYXJlIGFsbCBleHRlcm5hbCByZXNvdXJjZXMgbmVjZXNzYXJ5IHRvIGRpc3BsYXkgdGhlIGRpYWxvZy4NCisgKi8NCitQZXJzaXN0ZW50U3RvcmFnZS5wcm90b3R5cGUuX3ByZXBhcmVEaWFsb2cgPSBmdW5jdGlvbigpIHsNCisgIHZhciBzZWxmID0gdGhpczsNCisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsNCisNCisgIGlmICghdGhpcy5odG1sKSB7DQorICAgIFhpbmhhLl9nZXRiYWNrKFhpbmhhLmdldFBsdWdpbkRpcigiUGVyc2lzdGVudFN0b3JhZ2UiKSArICIvZGlhbG9nLmh0bWwiLA0KKyAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihnZXRiYWNrKSB7IA0KKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuaHRtbCA9IGdldGJhY2s7DQorICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcHJlcGFyZURpYWxvZygpOw0KKyAgICAgICAgICAgICAgICAgICB9KTsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgdGhpcy5kaWFsb2cgPSBuZXcgWGluaGEuRGlhbG9nKGVkaXRvciwgdGhpcy5odG1sLCAiUGVyc2lzdGVudFN0b3JhZ2UiLCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7d2lkdGg6IDgwMCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VPbkVzY2FwZTogdHJ1ZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXJlZDogdHJ1ZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWw6IHRydWUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCisNCisNCisgIC8vIFRoZSBjYW5jZWwgZGlhbG9nIGp1c3QgaGlkZXMgdGhlIGRpYWxvZy4NCisgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJjYW5jZWwiKS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7DQorICAgIHNlbGYuZGlhbG9nLmhpZGUoKTsNCisgIH07DQorDQorICAvLyBEaXJlY3RvcnkgY3JlYXRpb24gcHJvbXB0cyB0aGUgdXNlciBmb3IgYSBkaXJlY3RvcnkgbmFtZS4NCisgIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJkaXJDcmVhdGUiKS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7DQorICAgIHZhciBkaXJuYW1lID0gcHJvbXB0KFhpbmhhLl9sYygnUGxlYXNlIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgeW91XCdkIGxpa2UgdG8gY3JlYXRlLicsICdQZXJzaXN0ZW50U3RvcmFnZScpKTsNCisgICAgaWYgKGRpcm5hbWUpIHsNCisgICAgICB2YXIgbW9kdWxlID0gc2VsZi5fYmFja2VuZHNbc2VsZi5fYWN0aXZlQmFja2VuZF0ubW9kdWxlOw0KKyAgICAgIG1vZHVsZS5tYWtlRm9sZGVyKG1vZHVsZS52aWV3RmlsdGVyLCBkaXJuYW1lLCBmdW5jdGlvbihzdWNjZXNzKSB7DQorICAgICAgICBpZiAoc3VjY2Vzcykgew0KKyAgICAgICAgICBtb2R1bGUuY2FjaGUgPSBudWxsOw0KKyAgICAgICAgICBzZWxmLnVwZGF0ZUZpbGVCcm93c2VyKCk7DQorICAgICAgICB9DQorICAgICAgfSk7DQorICAgIH0NCisgIH07DQorDQorICAvLyBUaGUgaW1wb3J0IGZpZWxkIGlzIGhpZGRlbiBieSBkZWZhdWx0LCBhbmQgY2xpY2tpbmcgb24gaXQgdG9nZ2xlcyB0aGF0IHN0YXRlLg0KKyAgdmFyIGltcG9ydExlZ2VuZCA9IHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJpbXBvcnRsZWdlbmQiKTsNCisgIHZhciBpbXBvcnREaXYgPSB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgiaW1wb3J0Iik7DQorICBpbXBvcnRMZWdlbmQub25jbGljayA9IGZ1bmN0aW9uKCkgew0KKyAgICB0b2dnbGVDbGFzcyhpbXBvcnREaXYsICdjb2xsYXBzZWQnKTsNCisgIH07DQorDQorICAvLyBTaW5jZSB0aGUgV1dXIGljb25zIGlzIGEgc3RhdGljIGVsZW1lbnQsIHdlIGhvb2sgdXAgaXQncyBjbGljayBoYW5kbGVyDQorICAvLyBoZXJlLCByYXRoZXIgdGhhbiB3aGVuIHNob3dpbmcgdGhlIGRpYWxvZw0KKyAgdmFyIGljb25XV1cgPSB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgiV1dXIik7DQorICBYaW5oYS5fYWRkRXZlbnQoaWNvbldXVywgImNsaWNrIiwgZnVuY3Rpb24oZXYpIHsNCisgICAgZXYgPSBldiB8fCB3aW5kb3cuZXZlbnQ7DQorICAgIFhpbmhhLl9zdG9wRXZlbnQoZXYpOw0KKw0KKyAgICBmb3IgKHZhciBpbmRleEVsPWljb25XV1cucGFyZW50Tm9kZS5maXJzdENoaWxkOyBpbmRleEVsOyBpbmRleEVsID0gaW5kZXhFbC5uZXh0U2libGluZykgew0KKyAgICAgIGlmICgxICE9IGluZGV4RWwubm9kZVR5cGUpIHsNCisgICAgICAgIC8vIFdlIG9ubHkgcHJvY2VzcyBIVE1MIG5vZGVzLg0KKyAgICAgICAgY29udGludWU7DQorICAgICAgfQ0KKw0KKyAgICAgIHJlbW92ZUNsYXNzKGluZGV4RWwsICdzZWxlY3RlZCcpOw0KKyAgICB9DQorDQorICAgIGFkZENsYXNzKGljb25XV1csICdzZWxlY3RlZCcpOw0KKyAgICBhZGRDbGFzcyhzZWxmLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgicGxhY2VCYWNrZW5kIiksICdoaWRkZW4nKTsNCisgICAgcmVtb3ZlQ2xhc3Moc2VsZi5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoInBsYWNlV3d3IiksICdoaWRkZW4nKTsNCisgIH0pOw0KKw0KKyAgLy8gQ2xpY2tpbmcgaW5zaWRlIG9mIHRoZSBmaWxlIGJyb3dzZXIgd2lsbCBkZXNlbGVjdCBhbGwgZmlsZXMuDQorICB2YXIgZmlsZUJyb3dzZXIgPSB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgiZmlsZUxpc3QiKTsNCisgIFhpbmhhLl9hZGRFdmVudChmaWxlQnJvd3NlciwgImNsaWNrIiwgZnVuY3Rpb24oZXYpIHsNCisgICAgZm9yICh2YXIgZmlsZT1maWxlQnJvd3Nlci5maXJzdENoaWxkOyBmaWxlOyBmaWxlPWZpbGUubmV4dFNpYmxpbmcpIHsNCisgICAgICByZW1vdmVDbGFzcyhmaWxlLCAnc2VsZWN0ZWQnKTsNCisgICAgfQ0KKyAgfSk7DQorDQorICAvLyBTZXR1cCB0aGUgZmlsdGVyIGNvbnRyb2wgc28gdGhhdCB1c2VyIHNlbGVjdGlvbiB3aWxsIHJlZmlsdGVyIHRoZSBzaG93bg0KKyAgLy8gZmlsZXMuDQorICB2YXIgZmlsdGVyQ29udHJvbCA9IHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJmaWx0ZXJzIik7DQorICBmaWx0ZXJDb250cm9sLm9uY2hhbmdlID0gZnVuY3Rpb24oKSB7DQorICAgIHZhciBtb2R1bGUgPSBzZWxmLl9iYWNrZW5kc1tzZWxmLl9hY3RpdmVCYWNrZW5kXS5tb2R1bGU7DQorICAgIG1vZHVsZS52aWV3RmlsdGVyID0gZmlsdGVyQ29udHJvbC5vcHRpb25zW2ZpbHRlckNvbnRyb2wuc2VsZWN0ZWRJbmRleF0udmFsdWU7DQorICAgIHNlbGYudXBkYXRlRmlsZUJyb3dzZXIoKTsNCisgIH07DQorDQorICAvLyBTZXR1cCB0aGUgdmlld3R5cGUgY29udHJvbCB0byBjaGFuZ2UgdGhlIGludGVybmFscyBvZiB0aGUgZmlsZSBsaXN0Lg0KKyAgdmFyIHZpZXdUeXBlID0gdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoInZpZXdUeXBlIik7DQorICB2aWV3VHlwZS5vbmNoYW5nZSA9IGZ1bmN0aW9uKCkgew0KKyAgICBzZWxmLl92aWV3VHlwZSA9IHZpZXdUeXBlLm9wdGlvbnNbdmlld1R5cGUuc2VsZWN0ZWRJbmRleF0udmFsdWU7DQorICAgIHNlbGYudXBkYXRlRmlsZUJyb3dzZXIoKTsNCisgIH0NCisNCisgIHRoaXMucmVhZHkgPSB0cnVlOw0KK307DQorDQorLyoqDQorICogVXBkYXRlIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBiYWNrZW5kcy4NCisgKi8NCitQZXJzaXN0ZW50U3RvcmFnZS5wcm90b3R5cGUudXBkYXRlUGxhY2VzRGlzcGxheSA9IGZ1bmN0aW9uKGNhcGFiaWxpdHkpIHsNCisgIHZhciBzZWxmID0gdGhpczsNCisgIHZhciBwbGFjZXNCcm93c2VyID0gdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoInBsYWNlc0xpc3QiKTsNCisNCisgIC8vIENsZWFyIG91dCBhbnkgZW1wdHkgdGV4dCBub2RlcyBpbiB0aGUgcGxhY2VzIGJyb3dzZXIuDQorICB3aGlsZSAocGxhY2VzQnJvd3Nlci5maXJzdENoaWxkICYmIDMgPT0gcGxhY2VzQnJvd3Nlci5maXJzdENoaWxkLm5vZGVUeXBlKSB7DQorICAgIHBsYWNlc0Jyb3dzZXIucmVtb3ZlQ2hpbGQocGxhY2VzQnJvd3Nlci5maXJzdENoaWxkKTsNCisgIH0NCisNCisgIHZhciBXV1cgPSBwbGFjZXNCcm93c2VyLmZpcnN0Q2hpbGQ7DQorICB3aGlsZSAoV1dXLm5leHRTaWJsaW5nKSB7DQorICAgIHBsYWNlc0Jyb3dzZXIucmVtb3ZlQ2hpbGQoV1dXLm5leHRTaWJsaW5nKTsNCisgIH0NCisNCisgIGZvciAodmFyIGJhY2tlbmROYW1lIGluIHRoaXMuX2JhY2tlbmRzKSB7DQorICAgIGlmIChjYXBhYmlsaXR5ICYmICF0aGlzLl9iYWNrZW5kc1tiYWNrZW5kTmFtZV0uY29uZmlnLmNhcGFiaWxpdGllc1tjYXBhYmlsaXR5XSkgew0KKyAgICAgIGNvbnRpbnVlOw0KKyAgICB9DQorDQorDQorICAgIHZhciB0aHVtYiA9IHBsYWNlc0Jyb3dzZXIuYXBwZW5kQ2hpbGQodGhpcy5wbGFjZXNJY29uKHRoaXMuX2JhY2tlbmRzW2JhY2tlbmROYW1lXSkpOw0KKw0KKyAgICBpZiAoJCAmJiAkLnVpICYmICQudWkuZHJhZ2dhYmxlICYmICQudWkuZHJvcHBhYmxlKSB7DQorICAgICAgICAvLyBKdXN0IGluIGNhc2UgWGluaGEgaXMgdXNlZCBvbiBhIHBhZ2Ugd2l0aCBvdGhlciBkcmFnZ2FibGVzLCB3ZQ0KKyAgICAgICAgLy8gbmVlZCB0byBsaW1pdCB0aGUgdGFyZ2V0cyB3ZSBhY2NlcHQuDQorICAgICAgICAkKHRodW1iKS5kcm9wcGFibGUoe2FjY2VwdDogJyonLA0KKyAgICAgICAgICBkcm9wOiBmdW5jdGlvbihlLCB1aSkgew0KKw0KKyAgICAgICAgICAgIC8vIFNldCB1cCBhIHJlZmVyZW5jZSB0byB0aGUgZHJvcCB0YXJnZXQgc28gdGhhdCB3ZSBjYW4gbW92ZQ0KKyAgICAgICAgICAgIC8vIGFsbCBkcmFnZ2VkIGl0ZW1zIGludG8gaXQuDQorICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRoaXM7DQorDQorICAgICAgICAgICAgdWkuZHJhZ2dhYmxlLmVhY2goZnVuY3Rpb24oKSB7DQorICAgICAgICAgICAgICAvLyBXZSBleHRyYWN0IHRoZSBlbnRyeSByZWZlcmVuY2UgZnJvbSB0aGUgRE9NIG5vZGUuDQorICAgICAgICAgICAgICB2YXIgZmlsZSA9IHRoaXM7DQorICAgICAgICAgICAgICB2YXIgZW50cnkgPSBmaWxlLmVudHJ5Ow0KKw0KKyAgICAgICAgICAgICAgLy8gVE9ETzogV2hvYWdoLi4uIFdoYXQgaWYgb3VyIGJhY2tlbmQgaXMgYSBkcm9wIHRhcmdldD8NCisgICAgICAgICAgICAgIHZhciBtb2R1bGUgPSBzZWxmLl9iYWNrZW5kc1tzZWxmLl9hY3RpdmVCYWNrZW5kXS5tb2R1bGU7DQorDQorICAgICAgICAgICAgICBtb2R1bGUubG9hZERvY3VtZW50KGVudHJ5LCBmdW5jdGlvbihkb2N1bWVudFNvdXJjZSkgew0KKyAgICAgICAgICAgICAgICB0YXJnZXQuYmFja2VuZC5tb2R1bGUuc2F2ZURvY3VtZW50KG1vZHVsZS52aWV3RmlsdGVyLCBlbnRyeS5uYW1lLCBkb2N1bWVudFNvdXJjZSwgZnVuY3Rpb24oKSB7DQorICAgICAgICAgICAgICAgICAgdGFyZ2V0LmJhY2tlbmQubW9kdWxlLmNhY2hlID0gbnVsbDsNCisgICAgICAgICAgICAgICAgICBtb2R1bGUuZGVsZXRlRW50cnkoZW50cnksIGZ1bmN0aW9uKHN1Y2Nlc3MpIHsNCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5jYWNoZSA9IG51bGw7DQorICAgICAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykgew0KKyAgICAgICAgICAgICAgICAgICAgICBmaWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZmlsZSk7DQorICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgICBhbGVydCgnRXJyb3IgZGVsZXRpbmcgZmlsZSAnICsgZW50cnkubmFtZSk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgfSk7DQorICAgICAgICAgICAgICAgIH0pOw0KKyAgICAgICAgICAgICAgfSk7DQorICAgICAgICAgICAgfSk7DQorICAgICAgICAgIH0NCisgICAgICAgIH0pOw0KKyAgICB9DQorICB9DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgY3VycmVudGx5IGFjdGl2ZSBiYWNrZW5kDQorICovDQorUGVyc2lzdGVudFN0b3JhZ2UucHJvdG90eXBlLnNldEJhY2tlbmQgPSBmdW5jdGlvbihiYWNrZW5kTmFtZSkgew0KKyAgaWYgKHRoaXMuX2FjdGl2ZUJhY2tlbmQgPT0gYmFja2VuZE5hbWUpIHsNCisgICAgLy8gU2F2ZSBvdXJzZWx2ZXMgc29tZSB3b3JrLg0KKyAgICByZXR1cm47DQorICB9DQorICB0aGlzLl9hY3RpdmVCYWNrZW5kID0gYmFja2VuZE5hbWU7DQorICB2YXIgbW9kdWxlID0gdGhpcy5fYmFja2VuZHNbdGhpcy5fYWN0aXZlQmFja2VuZF07DQorICBpZiAobW9kdWxlLmNvbmZpZy5jYXBhYmlsaXRpZXMuaW1wb3J0X29wZXJhdGlvbnMpIHsNCisgICAgWGluaGEuX3JlbW92ZUNsYXNzKHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJpbXBvcnQiKSwnaGlkZGVuJyk7DQorDQorICAgIHZhciBpbXBvcnRVSSA9IHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJpbXBvcnR1aSIpOw0KKyAgICB3aGlsZSAoaW1wb3J0VUkuZmlyc3RDaGlsZCkgew0KKyAgICAgIC8vIENsZWFyIG91dCB0aGUgaW1wb3J0IFVJIG9mIGFueSBvdGhlciBiYWNrZW5kLg0KKyAgICAgIGltcG9ydFVJLnJlbW92ZUNoaWxkKGltcG9ydFVJLmZpcnN0Q2hpbGQpOw0KKyAgICB9DQorDQorICAgIG1vZHVsZS5tb2R1bGUuYnVpbGRJbXBvcnRVSSh0aGlzLmRpYWxvZywgaW1wb3J0VUkpOw0KKyAgfSBlbHNlIHsNCisgICAgWGluaGEuX2FkZENsYXNzKHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJpbXBvcnQiKSwnaGlkZGVuJyk7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAqIEJ1aWxkIGEgVUkgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhY2tlbmQuDQorICovDQorUGVyc2lzdGVudFN0b3JhZ2UucHJvdG90eXBlLnBsYWNlc0ljb24gPSBmdW5jdGlvbihiYWNrZW5kKSB7DQorICB2YXIgc2VsZiA9IHRoaXM7DQorDQorICB2YXIgcGxhY2VzQmxvY2sgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCisgIHBsYWNlc0Jsb2NrLmJhY2tlbmQgPSBiYWNrZW5kOw0KKyAgcGxhY2VzQmxvY2suY2xhc3NOYW1lID0gJ2ZpbGUnOw0KKyAgaWYgKHRoaXMuX2FjdGl2ZUJhY2tlbmQgPT0gYmFja2VuZC5uYW1lKSB7DQorICAgIHBsYWNlc0Jsb2NrLmNsYXNzTmFtZSArPSAnIHNlbGVjdGVkJzsNCisgIH0NCisNCisNCisgIC8vIFVzZSBhIGNsb3N1cmUgaGVyZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgb25jbGljayBoYW5kbGVyIGhhcyB0aGUNCisgIC8vIHJpZ2h0IGJpbmRpbmcsDQorICBYaW5oYS5fYWRkRXZlbnQocGxhY2VzQmxvY2ssICJjbGljayIsIGZ1bmN0aW9uKGV2KSB7DQorICAgIGV2ID0gZXYgfHwgd2luZG93LmV2ZW50Ow0KKyAgICBYaW5oYS5fc3RvcEV2ZW50KGV2KTsNCisNCisgICAgZm9yICh2YXIgaW5kZXhFbD1wbGFjZXNCbG9jay5wYXJlbnROb2RlLmZpcnN0Q2hpbGQ7IGluZGV4RWw7IGluZGV4RWwgPSBpbmRleEVsLm5leHRTaWJsaW5nKSB7DQorICAgICAgaWYgKDEgIT0gaW5kZXhFbC5ub2RlVHlwZSkgew0KKyAgICAgICAgLy8gV2Ugb25seSBwcm9jZXNzIEhUTUwgbm9kZXMuDQorICAgICAgICBjb250aW51ZTsNCisgICAgICB9DQorDQorICAgICAgcmVtb3ZlQ2xhc3MoaW5kZXhFbCwgJ3NlbGVjdGVkJyk7DQorICAgIH0NCisNCisgICAgYWRkQ2xhc3MocGxhY2VzQmxvY2ssICdzZWxlY3RlZCcpOw0KKyAgICByZW1vdmVDbGFzcyhzZWxmLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgicGxhY2VCYWNrZW5kIiksICdoaWRkZW4nKTsNCisgICAgYWRkQ2xhc3Moc2VsZi5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoInBsYWNlV3d3IiksICdoaWRkZW4nKTsNCisgICAgc2VsZi5zZXRCYWNrZW5kKGJhY2tlbmQubmFtZSk7DQorICAgIHNlbGYudXBkYXRlRmlsZUJyb3dzZXIoKTsNCisgIH0pOw0KKw0KKyAgdmFyIGltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7DQorICBpbWFnZS5jbGFzc05hbWUgPSAnaWNvbic7DQorICBpbWFnZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIGJhY2tlbmQuY29uZmlnLnRodW1iVVJMIHx8IHRoaXMuZWRpdG9yLmltZ1VSTCgnaW1hZ2VzL3RhbmdvLzMyeDMyL3BsYWNlcy9uZXR3b3JrLXNlcnZlci5wbmcnKSk7DQorICBpbWFnZSA9IHBsYWNlc0Jsb2NrLmFwcGVuZENoaWxkKGltYWdlKTsNCisNCisNCisgIHZhciBwbGFjZXNOYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpOw0KKyAgcGxhY2VzTmFtZS5jbGFzc05hbWUgPSAnZmlsZW5hbWUnOw0KKyAgdmFyIHBsYWNlc05hbWVUZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYmFja2VuZC5jb25maWcuZGlzcGxheU5hbWUgfHwgYmFja2VuZC5uYW1lKTsNCisgIHBsYWNlc05hbWVUZXh0ID0gcGxhY2VzTmFtZS5hcHBlbmRDaGlsZChwbGFjZXNOYW1lVGV4dCk7DQorICBwbGFjZXNOYW1lID0gcGxhY2VzQmxvY2suYXBwZW5kQ2hpbGQocGxhY2VzTmFtZSk7DQorDQorICByZXR1cm4gcGxhY2VzQmxvY2s7DQorfQ0KKy8qKg0KKyAqIFRoZSBYaW5oYSB0ZXh0IGVkaXRvcg0KKyAqIEBuYW1lIFhpbmhhDQorICovDQordmFyIFhpbmhhID0gd2luZG93LlhpbmhhOw0KKy8qKg0KKyAqIFdlIG92ZXJyaWRlIHRoZSBuYXRpdmUgX2luc2VydEltYWdlIGZ1bmN0aW9uIG9mIFhpbmhhLiAgV2UgY2FsbCB0aGUgaW5zdGFuY2UNCisgKiB2ZXJzaW9uIG9mIHRoZSBtZXRob2QgaW4gb3JkZXIgdG8gc2V0dXAgdGhlIHByb3BlciBjb250ZXh0Lg0KKyAqIEBwYXJhbSBpbWFnZSBUT0RPIEZpZ3VyZSBvdXQgd2hhdCB0aGlzIGlzIDotRA0KKyAqLw0KK1hpbmhhLnByb3RvdHlwZS5faW5zZXJ0SW1hZ2UgPSBmdW5jdGlvbihpbWFnZSkgew0KKyAgdmFyIGVkaXRvciA9IHRoaXM7DQorICB2YXIgUFMgPSBlZGl0b3IucGx1Z2luc1snUGVyc2lzdGVudFN0b3JhZ2UnXS5pbnN0YW5jZTsNCisNCisgIC8vIFNldHVwIHRoZSBkaWFsb2cgdGl0bGUNCisgIHZhciB0aXRsZSA9IFBTLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgiaDEiKTsNCisgIHRpdGxlLmlubmVySFRNTCA9IFhpbmhhLl9sYygnSW5zZXJ0IEltYWdlJywgJ1BlcnNpc3RlbnRTdG9yYWdlJyk7DQorDQorICAvLyBTZXR1cCB0aGUgY29uZmlybWF0aW9uIGJ1dHRvbiBhbmQgYWN0aW9uLg0KKyAgdmFyIGJ1dHRvbiA9IFBTLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgiY29uZmlybSIpOw0KKyAgYnV0dG9uLnZhbHVlID0gWGluaGEuX2xjKCdJbnNlcnQnLCAnUGVyc2lzdGVudFN0b3JhZ2UnKTsNCisgIGJ1dHRvbi5vbmNsaWNrID0gZnVuY3Rpb24oKSB7DQorICAgIFBTLmluc2VydEltYWdlKCk7DQorICB9Ow0KKw0KKyAgUFMuc2hvd0RpYWxvZyh7dHlwZUZpbHRlcjpbJ2ltYWdlJywnZm9sZGVyJ10sc3R5bGVGb3I6J2luc2VydGlvbid9KTsNCit9DQorDQorLyoqDQorICogVGFrZSBhIHNlbGVjdGVkIGltYWdlIGZyb20gdGhlIGRpYWxvZyBhbmQgaW5zZXJ0IGl0IGludG8gdGhlIGRvY3VtZW50Lg0KKyAqLw0KK1BlcnNpc3RlbnRTdG9yYWdlLnByb3RvdHlwZS5pbnNlcnRJbWFnZSA9IGZ1bmN0aW9uKCkgew0KKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOw0KKw0KKyAgdGhpcy5kaWFsb2cuaGlkZSgpOw0KKw0KKyAgdmFyIGltYWdlID0gZWRpdG9yLl9kb2MuY3JlYXRlRWxlbWVudCgnaW1nJyk7DQorICBpZiAodGhpcy5zZWxlY3RlZEVudHJ5KSB7DQorICAgIGltYWdlLnNldEF0dHJpYnV0ZSgnc3JjJywgdGhpcy5zZWxlY3RlZEVudHJ5WzBdLlVSTCk7DQorICB9IGVsc2Ugew0KKyAgICBpbWFnZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCJVUkwiKS52YWx1ZSk7DQorICB9DQorICBmb3IgKHZhciBwcm9wIGluIHt3aWR0aDonJyxoZWlnaHQ6JycsbWFyZ2luOicnLHBhZGRpbmc6JycsYm9yZGVyOicnLGJvcmRlckNvbG9yOicnLGJhY2tncm91bmRDb2xvcjonJ30pIHsNCisgICAgdmFyIHZhbCA9ICB0aGlzLmRpYWxvZy5nZXRFbGVtZW50QnlJZCgnaW1hZ2VfJyArIHByb3ApLnZhbHVlLnJlcGxhY2UoL15ccyskLywnJyk7DQorICAgIGlmICh2YWwpIHsNCisgICAgICBpbWFnZS5zdHlsZVtwcm9wXSA9IHZhbDsNCisgICAgfQ0KKyAgfQ0KKyAgZWRpdG9yLmluc2VydE5vZGVBdFNlbGVjdGlvbihpbWFnZSk7DQorDQorICB2YXIgcmFuZ2UgPSBlZGl0b3IuY3JlYXRlUmFuZ2UoZWRpdG9yLmdldFNlbGVjdGlvbigpKTsNCisgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTsNCisNCit9DQorfSkod2luZG93LmpRdWVyeSk7DQorLy9YaW5oYS5wcm90b3R5cGUuX2xpbmtGaWxlID0gZnVuY3Rpb24obGluaykgew0KKy8vDQorLy8gICAgdmFyIGVkaXRvciA9IHRoaXM7DQorLy8gICAgdmFyIG91dHBhcmFtID0geyJlZGl0b3IiIDogdGhpcywgcGFyYW0gOiBudWxsfTsNCisvLyAgICBpZiAodHlwZW9mIGxpbmsgPT0gInVuZGVmaW5lZCIpIHsNCisvLyAgICAgICAgbGluayA9IHRoaXMuZ2V0UGFyZW50RWxlbWVudCgpOw0KKy8vICAgICAgICBpZiAobGluaykgew0KKy8vICAgICAgICAgICAgaWYgKC9eaW1nJC9pLnRlc3QobGluay50YWdOYW1lKSkNCisvLyAgICAgICAgICAgICAgICBsaW5rID0gbGluay5wYXJlbnROb2RlOw0KKy8vICAgICAgICAgICAgaWYgKCEvXmEkL2kudGVzdChsaW5rLnRhZ05hbWUpKQ0KKy8vICAgICAgICAgICAgICAgIGxpbmsgPSBudWxsOw0KKy8vICAgICAgICB9DQorLy8gICAgfQ0KKy8vICAgIGlmICghbGluaykgew0KKy8vICAgICAgICB2YXIgc2VsID0gZWRpdG9yLmdldFNlbGVjdGlvbigpOw0KKy8vICAgICAgICB2YXIgcmFuZ2UgPSBlZGl0b3IuY3JlYXRlUmFuZ2Uoc2VsKTsNCisvLyAgICAgICAgdmFyIGNvbXBhcmUgPSAwOw0KKy8vICAgICAgICBpZiAoWGluaGEuaXNfaWUpIHsNCisvLyAgICAgICAgICAgIGlmICggc2VsLnR5cGUgPT0gIkNvbnRyb2wiICkNCisvLyAgICAgICAgICAgICAgICBjb21wYXJlID0gcmFuZ2UubGVuZ3RoOw0KKy8vICAgICAgICAgICAgZWxzZQ0KKy8vICAgICAgICAgICAgICAgIGNvbXBhcmUgPSByYW5nZS5jb21wYXJlRW5kUG9pbnRzKCJTdGFydFRvRW5kIiwgcmFuZ2UpOw0KKy8vICAgICAgICB9IGVsc2Ugew0KKy8vICAgICAgICAgICAgY29tcGFyZSA9IHJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhyYW5nZS5TVEFSVF9UT19FTkQsIHJhbmdlKTsNCisvLyAgICAgICAgfQ0KKy8vICAgICAgICBpZiAoY29tcGFyZSA9PSAwKSB7DQorLy8gICAgICAgICAgICBhbGVydChYaW5oYS5fbGMoIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiIsICdQZXJzaXN0ZW50U3RvcmFnZScpKTsNCisvLyAgICAgICAgICAgIHJldHVybjsNCisvLyAgICAgICAgfQ0KKy8vICAgICAgICBvdXRwYXJhbS5wYXJhbSA9IHsNCisvLyAgICAgICAgICAgIGZfaHJlZiA6ICcnLA0KKy8vICAgICAgICAgICAgZl90aXRsZSA6ICcnLA0KKy8vICAgICAgICAgICAgZl90YXJnZXQgOiAnJywNCisvLyAgICAgICAgICAgIGZfdXNldGFyZ2V0IDogZWRpdG9yLmNvbmZpZy5tYWtlTGlua1Nob3dzVGFyZ2V0LA0KKy8vICAgICAgICAgICAgYmFzZUhyZWY6IGVkaXRvci5jb25maWcuYmFzZUhyZWYNCisvLyAgICAgICAgfTsNCisvLyAgICB9IGVsc2UNCisvLyAgICAgICAgb3V0cGFyYW0ucGFyYW0gPSB7DQorLy8gICAgICAgICAgICBmX2hyZWYgICA6IFhpbmhhLmlzX2llID8gbGluay5ocmVmIDogbGluay5nZXRBdHRyaWJ1dGUoImhyZWYiKSwNCisvLyAgICAgICAgICAgIGZfdGl0bGUgIDogbGluay50aXRsZSwNCisvLyAgICAgICAgICAgIGZfdGFyZ2V0IDogbGluay50YXJnZXQsDQorLy8gICAgICAgICAgICBmX3VzZXRhcmdldCA6IGVkaXRvci5jb25maWcubWFrZUxpbmtTaG93c1RhcmdldCwNCisvLyAgICAgICAgICAgIGJhc2VIcmVmOiBlZGl0b3IuY29uZmlnLmJhc2VIcmVmDQorLy8gICAgICAgIH07DQorLy8NCisvLyAgICBEaWFsb2codGhpcy5jb25maWcuUGVyc2lzdGVudFN0b3JhZ2UubWFuYWdlcisnJm1vZGU9bGluaycsIGZ1bmN0aW9uKHBhcmFtKXsNCisvLyAgICAgICAgaWYgKCFwYXJhbSkNCisvLyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisvLyAgICAgICAgdmFyIGEgPSBsaW5rOw0KKy8vICAgICAgICBpZiAoIWEpIHRyeSB7DQorLy8gICAgICAgICAgICBlZGl0b3IuX2RvYy5leGVjQ29tbWFuZCgiY3JlYXRlbGluayIsIGZhbHNlLCBwYXJhbS5mX2hyZWYpOw0KKy8vICAgICAgICAgICAgYSA9IGVkaXRvci5nZXRQYXJlbnRFbGVtZW50KCk7DQorLy8gICAgICAgICAgICB2YXIgc2VsID0gZWRpdG9yLmdldFNlbGVjdGlvbigpOw0KKy8vICAgICAgICAgICAgdmFyIHJhbmdlID0gZWRpdG9yLmNyZWF0ZVJhbmdlKHNlbCk7DQorLy8gICAgICAgICAgICBpZiAoIVhpbmhhLmlzX2llKSB7DQorLy8gICAgICAgICAgICAgICAgYSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyOw0KKy8vICAgICAgICAgICAgICAgIGlmICghL15hJC9pLnRlc3QoYS50YWdOYW1lKSkgew0KKy8vICAgICAgICAgICAgICAgICAgICBhID0gYS5uZXh0U2libGluZzsNCisvLyAgICAgICAgICAgICAgICAgICAgaWYgKGEgPT0gbnVsbCkNCisvLyAgICAgICAgICAgICAgICAgICAgICAgIGEgPSByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlOw0KKy8vICAgICAgICAgICAgICAgIH0NCisvLyAgICAgICAgICAgIH0NCisvLyAgICAgICAgfSBjYXRjaChlKSB7fQ0KKy8vICAgICAgICBlbHNlIHsNCisvLyAgICAgICAgICAgIHZhciBocmVmID0gcGFyYW0uZl9ocmVmLnRyaW0oKTsNCisvLyAgICAgICAgICAgIGVkaXRvci5zZWxlY3ROb2RlQ29udGVudHMoYSk7DQorLy8gICAgICAgICAgICBpZiAoaHJlZiA9PSAiIikgew0KKy8vICAgICAgICAgICAgICAgIGVkaXRvci5fZG9jLmV4ZWNDb21tYW5kKCJ1bmxpbmsiLCBmYWxzZSwgbnVsbCk7DQorLy8gICAgICAgICAgICAgICAgZWRpdG9yLnVwZGF0ZVRvb2xiYXIoKTsNCisvLyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorLy8gICAgICAgICAgICB9DQorLy8gICAgICAgICAgICBlbHNlIHsNCisvLyAgICAgICAgICAgICAgICBhLmhyZWYgPSBocmVmOw0KKy8vICAgICAgICAgICAgfQ0KKy8vICAgICAgICB9DQorLy8gICAgICAgIGlmICghKGEgJiYgL15hJC9pLnRlc3QoYS50YWdOYW1lKSkpDQorLy8gICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorLy8gICAgICAgIGEudGFyZ2V0ID0gcGFyYW0uZl90YXJnZXQudHJpbSgpOw0KKy8vICAgICAgICBhLnRpdGxlID0gcGFyYW0uZl90aXRsZS50cmltKCk7DQorLy8gICAgICAgIGVkaXRvci5zZWxlY3ROb2RlQ29udGVudHMoYSk7DQorLy8gICAgICAgIGVkaXRvci51cGRhdGVUb29sYmFyKCk7DQorLy8gICAgfSwgb3V0cGFyYW0pOw0KKy8vfTsNCisvLw0KKy8vZnVuY3Rpb24gc2hvcnRTaXplKGNzc1NpemUpDQorLy97DQorLy8gICAgaWYoLyAvLnRlc3QoY3NzU2l6ZSkpDQorLy8gICAgew0KKy8vICAgICAgICB2YXIgc2l6ZXMgPSBjc3NTaXplLnNwbGl0KCcgJyk7DQorLy8gICAgICAgIHZhciB1c2VGaXJzdFNpemUgPSB0cnVlOw0KKy8vICAgICAgICBmb3IodmFyIGkgPSAxOyBpIDwgc2l6ZXMubGVuZ3RoOyBpKyspDQorLy8gICAgICAgIHsNCisvLyAgICAgICAgICAgIGlmKHNpemVzWzBdICE9IHNpemVzW2ldKQ0KKy8vICAgICAgICAgICAgew0KKy8vICAgICAgICAgICAgICAgIHVzZUZpcnN0U2l6ZSA9IGZhbHNlOw0KKy8vICAgICAgICAgICAgICAgIGJyZWFrOw0KKy8vICAgICAgICAgICAgfQ0KKy8vICAgICAgICB9DQorLy8gICAgICAgIGlmKHVzZUZpcnN0U2l6ZSkgY3NzU2l6ZSA9IHNpemVzWzBdOw0KKy8vICAgIH0NCisvLw0KKy8vICAgIHJldHVybiBjc3NTaXplOw0KKy8vfQ0KKy8vDQorLy9mdW5jdGlvbiBjb252ZXJ0VG9IZXgoY29sb3IpIHsNCisvLw0KKy8vICAgIGlmICh0eXBlb2YgY29sb3IgPT0gInN0cmluZyIgJiYgLywgLy50ZXN0LmNvbG9yKQ0KKy8vICAgICAgICBjb2xvciA9IGNvbG9yLnJlcGxhY2UoLywgLywgJywnKTsgLy8gcmdiKGEsIGIpID0+IHJnYihhLGIpDQorLy8NCisvLyAgICBpZiAodHlwZW9mIGNvbG9yID09ICJzdHJpbmciICYmIC8gLy50ZXN0LmNvbG9yKSB7IC8vIG11bHRpcGxlIHZhbHVlcw0KKy8vICAgICAgICB2YXIgY29sb3JzID0gY29sb3Iuc3BsaXQoJyAnKTsNCisvLyAgICAgICAgdmFyIGNvbG9yc3RyaW5nID0gJyc7DQorLy8gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrKSB7DQorLy8gICAgICAgICAgICBjb2xvcnN0cmluZyArPSBYaW5oYS5fY29sb3JUb1JnYihjb2xvcnNbaV0pOw0KKy8vICAgICAgICAgICAgaWYgKGkgKyAxIDwgY29sb3JzLmxlbmd0aCkNCisvLyAgICAgICAgICAgICAgICBjb2xvcnN0cmluZyArPSAiICI7DQorLy8gICAgICAgIH0NCisvLyAgICAgICAgcmV0dXJuIGNvbG9yc3RyaW5nOw0KKy8vICAgIH0NCisvLw0KKy8vICAgIHJldHVybiBYaW5oYS5fY29sb3JUb1JnYihjb2xvcik7DQorLy99DQorLy99KTsNCisNCisvLyBYaW5oYS5fbGMoIkhlbGxvICBUaGVyZSBBICIpDQorLy8gWGluaGEuX2xjKCJIZWxsbyBcIiBUaGVyZSBCIFwiIikNCisvLyBYaW5oYS5fbGMoJ0hlbGxvICAgIFRoZXJlIEMgJykNCisvLyBYaW5oYS5fbGMoJ0hlbGxvIFwnIFRoZXJlIEQgXCcnKQ0KKw0KKw0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvZGlhbG9nLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvZGlhbG9nLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDFhMTZkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9kaWFsb2cuY3NzCkBAIC0wLDAgKzEsODkgQEAKKworLnBsYWNlc21hbmFnZXIKK3sKKyAgd2lkdGg6IDk1JTsKKyAgb3ZlcmZsb3c6IGF1dG87Cit9CisKKy5maWxlbWFuYWdlcgoreworICB3aWR0aDogOTUlOworICBoZWlnaHQ6IDIwMHB4OworICBvdmVyZmxvdzogYXV0bzsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKK30KKy5maWxlbWFuYWdlciBkaXYuZmlsZQoreworICBtaW4td2lkdGg6IDgwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgZmxvYXQ6IGxlZnQ7CisgIGJvcmRlcjogMXB4IG91dHNldCAjNjY2OworICBtYXJnaW46IDRweDsKK30KKy5wbGFjZXNtYW5hZ2VyIGRpdi5maWxlCit7CisgIG1pbi13aWR0aDogNjBweDsKKyAgaGVpZ2h0OiA3MHB4OworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGZsb2F0OiBsZWZ0OworICBib3JkZXI6IDFweCBvdXRzZXQgIzY2NjsKKyAgbWFyZ2luOiA0cHg7Cit9CisuZmlsZW1hbmFnZXIgZGl2LmZpbGU6aG92ZXIsCisucGxhY2VzbWFuYWdlciBkaXYuZmlsZTpob3ZlcgoreworICBib3JkZXI6IDFweCBzb2xpZCAjMzMzOworICBiYWNrZ3JvdW5kOiAjZmZmZmYzOworfQorCisuZmlsZW1hbmFnZXIgZGl2LnNlbGVjdGVkLAorLmZpbGVtYW5hZ2VyIGRpdi5zZWxlY3RlZDpob3ZlciwKKy5wbGFjZXNtYW5hZ2VyIGRpdi5zZWxlY3RlZCwKKy5wbGFjZXNtYW5hZ2VyIGRpdi5zZWxlY3RlZDpob3ZlcgoreworICBiYWNrZ3JvdW5kOiAjZmZmZmRhOworICBib3JkZXI6IDFweCBzb2xpZCAjMDAwOworfQorLmZpbGVtYW5hZ2VyIC5maWxlbmFtZSB7CisJbWFyZ2luOiAwLjVlbTsKKwljb2xvcjogIzIyMjsKK30KKy5maWxlbWFuYWdlciBkaXYuc2VsZWN0ZWQgLmZpbGVuYW1lIHsKKyAgY29sb3I6ICMwMDA7Cit9CisuZmlsZW1hbmFnZXIgaW1nLnRodW1iCit7CisgIHdpZHRoOiA1MHB4OworICBoZWlnaHQ6IDUwcHg7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiA1MCU7CisgIGxlZnQ6IDUwJTsKKyAgbWFyZ2luOiAtMjVweCAwIDAgLTI1cHg7CisgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOworfQorLmZpbGVtYW5hZ2VyIGltZy5pY29uCit7CisgIHdpZHRoOiAzMnB4OworICBoZWlnaHQ6IDMycHg7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiA1MCU7CisgIGxlZnQ6IDUwJTsKKyAgbWFyZ2luOiAtMTZweCAwIDAgLTE2cHg7Cit9CisuZmlsZW1hbmFnZXIgaW1nLmFjdGlvbgoreworICB3aWR0aDogMTVweDsKKyAgaGVpZ2h0OiAxNXB4OworICBwb3NpdGlvbjogYWJzb2x1dGU7Cit9CisuZmlsZW1hbmFnZXIgaW1nLmRlbGV0ZQoreworICBib3R0b206IDNweDsKKyAgbGVmdDogMjBweDsKK30KKy5maWxlbWFuYWdlciBpbWcuY29weQoreworICBib3R0b206IDNweDsKKyAgbGVmdDogM3B4OworfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9kaWFsb2cuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvZGlhbG9nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ3OGZjMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvZGlhbG9nLmh0bWwKQEAgLTAsMCArMSwxMjYgQEAKKzxoMSBpZD0iW2gxXSI+PGwxMG4+RmlsZSBCcm93c2VyPC9sMTBuPjwvaDE+Cis8ZGl2IHN0eWxlPSJ3aWR0aDo5NXB4OyBmbG9hdDpsZWZ0OyBoZWlnaHQ6MTAwJSI+CisgIDxmaWVsZHNldD48bGVnZW5kPjxsMTBuPlBsYWNlczwvbDEwbj48L2xlZ2VuZD4KKyAgICA8ZGl2IGNsYXNzPSJwbGFjZXNtYW5hZ2VyIiBpZD0iW3BsYWNlc0xpc3RdIiB0aXRsZT0iXyhMaXN0IG9mIFBsYWNlcykiPgorICAgICAgPGRpdiBjbGFzcz0iZmlsZSIgaWQ9IltXV1ddIj48aW1nIGNsYXNzPSJpY29uIiBzcmM9Ii4uL2ltYWdlcy90YW5nby8zMngzMi9hcHBzL2ludGVybmV0LXdlYi1icm93c2VyLnBuZyIvPjxwIGNsYXNzPSJmaWxlbmFtZSI+V1dXPC9wPjwvZGl2PgorICAgIDwvZGl2PgorICA8L2ZpZWxkc2V0PgorPC9kaXY+Cis8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDoxMDBweDsiPgorICA8ZGl2IGlkPSJbcGxhY2VCYWNrZW5kXSI+CisgICAgPGZpZWxkc2V0PjxsZWdlbmQ+PGwxMG4+RmlsZSBNYW5hZ2VyPC9sMTBuPjwvbGVnZW5kPgorICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSI+CisgICAgICA8dGJvZHk+PHRyPgorICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOiAxMHB4OyIgbm93cmFwPSJub3dyYXAiPgorCisgICAgICAgIDxsYWJlbCBmb3I9IltmaWx0ZXJzXSI+RGlyZWN0b3J5PC9sYWJlbD4KKyAgICAgICAgPHNlbGVjdCBpZD0iW2ZpbHRlcnNdIiBjbGFzcz0iZGlyV2lkdGgiPjwvc2VsZWN0PgorCisgICAgICAgIDxhIGhyZWY9IiMiIGlkPSJbZGlyVXBdIiB0aXRsZT0iXyhEaXJlY3RvcnkgVXApIj48aW1nIHNyYz0iLi4vaW1hZ2VzL3RhbmdvLzE2eDE2L2FjdGlvbnMvZ28tdXAucG5nIiBhbHQ9Il8oRGlyZWN0b3J5IFVwKSIgaGVpZ2h0PSIxNSIgd2lkdGg9IjE1Ij48L2E+CisKKworICAgICAgICA8YSBocmVmPSIjIiBpZD0iW2RpckNyZWF0ZV0iIHRpdGxlPSJfKE5ldyBGb2xkZXIpIj48aW1nIHNyYz0iLi4vaW1hZ2VzL3RhbmdvLzE2eDE2L2FjdGlvbnMvZm9sZGVyLW5ldy5wbmciIGFsdD0iXyhOZXcgRm9sZGVyKSIgaGVpZ2h0PSIxNSIgd2lkdGg9IjE1Ij48L2E+CisKKyAgICAgICAgPHNlbGVjdCBpZD0iW3ZpZXdUeXBlXSI+CisgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ0aHVtYm5haWwiIHNlbGVjdGVkPSJzZWxlY3RlZCI+VGh1bWJuYWlsIFZpZXc8L29wdGlvbj4KKyAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imxpc3RpbmciPkxpc3QgVmlldzwvb3B0aW9uPgorICAgICAgICA8L3NlbGVjdD4KKyAgICAgIDwvdGQ+CisgICAgICA8L3RyPgorICAgICAgPHRyPjx0ZCBzdHlsZT0icGFkZGluZzogMHB4IDEwcHggMTBweDsiPgorICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlbWFuYWdlciIgaWQ9IltmaWxlTGlzdF0iIHRpdGxlPSJfKEZpbGUgTGlzdCkiPjwvZGl2PgorICAgICAgPC90ZD48L3RyPgorICAgICAgPC90Ym9keT48L3RhYmxlPgorICAgIDwvZmllbGRzZXQ+CisgICAgPGZpZWxkc2V0IGlkPSJbaW1wb3J0XSIgY2xhc3M9ImNvbGxhcHNlZCI+CisgICAgICA8bGVnZW5kIGlkPSJbaW1wb3J0bGVnZW5kXSI+PGwxMG4+SW1wb3J0ICYjeDIzMDQ7PCEtLSYjeDAyYzU7LS0+PC9sMTBuPjwvbGVnZW5kPgorICAgICAgPGRpdiBpZD0iW2ltcG9ydHVpXSI+PC9kaXY+CisgICAgPC9maWVsZHNldD4KKyAgPC9kaXY+CisgIDxkaXYgaWQ9IltwbGFjZVd3d10iPgorICAgIDxmaWVsZHNldD48bGVnZW5kPjxsMTBuPldlYiBVUkw8L2wxMG4+PC9sZWdlbmQ+CisgICAgICA8bGFiZWwgZm9yPSJVUkwiPkVudGVyIFVSTCBiZWxvdzo8L2xhYmVsPjxiciAvPgorICAgICAgPGlucHV0IGlkPSJVUkwiIHR5cGU9InRleHQiIHNpemU9IjUwIiAvPgorICAgIDwvZmllbGRzZXQ+CisgIDwvZGl2PgorCisgIDxmaWVsZHNldCBpZD0iW25hbWVmaWVsZF0iPgorICAgIDxsZWdlbmQ+PGwxMG4+RmlsZW5hbWU8L2wxMG4+PC9sZWdlbmQ+CisgICAgPGlucHV0IGlkPSJbZmlsZW5hbWVdIiB0eXBlPSJ0ZXh0IiAvPgorICA8L2ZpZWxkc2V0PgorCisgIDxmaWVsZHNldCBpZD0iW2RldGFpbHNmaWVsZF0iPgorICAgIDxsZWdlbmQ+PGwxMG4+RGV0YWlsczwvbDEwbj48L2xlZ2VuZD4KKyAgICA8ZGl2IGlkPSJbZGV0YWlsc19pbWFnZV0iPgorICAgICAgPHRhYmxlIGNsYXNzPSJpbnB1dFRhYmxlIj4KKyAgICAgICAgPHRib2R5PgorICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij48bGFiZWwgZm9yPSJbaW1hZ2VfYWx0XSI+QWx0PC9sYWJlbD48L3RkPgorICAgICAgICAgICAgPHRkIGNvbHNwYW49IjUiPjxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0iIiBpZD0iW2ltYWdlX2FsdF0iLz48L3RkPgorICAgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7IiBjb2xzcGFuPSIyIiByb3dzcGFuPSI1Ij4KKyAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iYm9yZGVyOiAxcHggaW5zZXQgOyBwYWRkaW5nOiA0cHg7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDIwNCwgMjA0KTsgd2lkdGg6IDEwMHB4OyBoZWlnaHQ6IDEwMHB4OyI+CisgICAgICAgICAgICAgICAgPGltZyBpZD0iW2ltYWdlX3ByZXZpZXddIiBhbHQ9IiIgc3JjPSJpbWcvMXgxX3RyYW5zcGFyZW50LmdpZiIvPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPC90cj4KKyAgICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+IDxsYWJlbCBmb3I9IltpbWFnZV93aWR0aF0iPldpZHRoPC9sYWJlbD48L3RkPgorICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0iIiBpZD0iW2ltYWdlX3dpZHRoXSIvPjwvdGQ+CisgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiIgc3R5bGU9InZlcnRpY2FsLWFsaWduOm1pZGRsZSI+PGltZyB3aWR0aD0iMjUiIGhlaWdodD0iMzIiIGFsdD0iQ29uc3RyYWluZWQgUHJvcG9ydGlvbnMiIGlkPSJbaW1hZ2VfY29uc3RyYWluX2ljb25dIiBzcmM9ImltZy9sb2NrZWQuZ2lmIi8+CisgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25jbGljaz0iamF2YXNjcmlwdDp0b2dnbGVDb25zdHJhaW5zKHRoaXMpOyIgY2hlY2tlZD0iY2hlY2tlZCIgaWQ9IltpbWFnZV9jb25zdHJhaW5dIiB2YWx1ZT0ib24iIC8+CisgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IltpbWFnZV9jb25zdHJhaW5dIj5Db25zdHJhaW4gUHJvcG9ydGlvbnM8L2xhYmVsPgorICAgICAgICAgICAgPC90ZD4KKworICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiIHJvd3NwYW49IjMiLz4KKworICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPjxsYWJlbCBmb3I9IltpbWFnZV9tYXJnaW5dIj5NYXJnaW48L2xhYmVsPjwvdGQ+CisKKyAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgdmFsdWU9IiIgY2xhc3M9InNtYWxsV2lkdGgiIGlkPSJbaW1hZ2VfbWFyZ2luXSIvPjwvdGQ+Cis8L3RyPgorPHRyPgorICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPjxsYWJlbCBmb3I9IltpbWFnZV9oZWlnaHRdIj5IZWlnaHQ8L2xhYmVsPjwvdGQ+CisKKyAgICAgICAgICAgIDx0ZCBjbGFzcz0ic21hbGxXaWR0aCI+PGlucHV0IHR5cGU9InRleHQiIHZhbHVlPSIiIGNsYXNzPSJzbWFsbFdpZHRoIiBpZD0iW2ltYWdlX2hlaWdodF0iLz48L3RkPgorCisgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+PGxhYmVsIGZvcj0iW2ltYWdlX3BhZGRpbmddIj5QYWRkaW5nPC9sYWJlbD48L3RkPgorCisgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIHZhbHVlPSIiIGNsYXNzPSJzbWFsbFdpZHRoIiBpZD0iW2ltYWdlX3BhZGRpbmddIi8+CisgICAgICAgICAgICA8L3RkPgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+Q29sb3I8L3RkPgorICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjciIGlkPSJbaW1hZ2VfYmFja2dyb3VuZENvbG9yXSIgLz48c3BhbiBjbGFzcz0iYnV0dG9uQ29sb3IiPjxzcGFuIGNsYXNzPSJjaG9vc2VyIj4gPC9zcGFuPjxzcGFuIGNsYXNzPSJub2NvbG9yIj7Dlzwvc3Bhbj48L3NwYW4+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgPC90cj4KKzx0cj4KKyAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij48bGFiZWwgZm9yPSJbaW1hZ2VfYWxpZ25dIj5BbGlnbjwvbGFiZWw+PC90ZD4KKworICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPiAgICAgICAgICAgICAgICA8c2VsZWN0IHRpdGxlPSJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIiBpZD0iW2ltYWdlX2FsaWduXSIgc2l6ZT0iMSI+CisgICAgICAgICAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkPSJzZWxlY3RlZCIgdmFsdWU9IiI+Tm90IHNldDwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibGVmdCI+TGVmdDwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icmlnaHQiPlJpZ2h0PC9vcHRpb24+CisgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ0ZXh0dG9wIj5UZXh0dG9wPC9vcHRpb24+CisgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhYnNtaWRkbGUiPkFic21pZGRsZTwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYmFzZWxpbmUiPkJhc2VsaW5lPC9vcHRpb24+CisgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhYnNib3R0b20iPkFic2JvdHRvbTwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYm90dG9tIj5Cb3R0b208L29wdGlvbj4KKyAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Im1pZGRsZSI+TWlkZGxlPC9vcHRpb24+CisgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ0b3AiPlRvcDwvb3B0aW9uPgorICAgICAgICAgICAgICAgIDwvc2VsZWN0PiAgICAgICAgICAgIDwvdGQ+CisKKyAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij48bGFiZWwgZm9yPSJbaW1hZ2VfYm9yZGVyXSI+Qm9yZGVyPC9sYWJlbD48L3RkPgorICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0iIiBjbGFzcz0ic21hbGxXaWR0aCIgaWQ9IltpbWFnZV9ib3JkZXJdIi8+PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+Qm9yZGVyIENvbG9yPC90ZD4KKyAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNyIgaWQ9IltpbWFnZV9ib3JkZXJDb2xvcl0iIC8+PHNwYW4gY2xhc3M9ImJ1dHRvbkNvbG9yIj48c3BhbiBjbGFzcz0iY2hvb3NlciI+IDwvc3Bhbj48c3BhbiBjbGFzcz0ibm9jb2xvciI+w5c8L3NwYW4+PC9zcGFuPjwvdGQ+CisgICAgICAgICAgICA8L3RyPgorPC90Ym9keT48L3RhYmxlPgorCis8IS0tLy8gaW1hZ2UgcHJvcGVydGllcyAtLT4gICAgCis8L2Rpdj4KKyAgICAKKyAgPC9maWVsZHNldD4KKworICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIGlkPSJbY29uZmlybV0iIHZhbHVlPSJfKENvbmZpcm0pIiAvPgorICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIGlkPSJbY2FuY2VsXSIgdmFsdWU9Il8oQ2FuY2VsKSIgLz4KKyAgPC9kaXY+Cis8L2Rpdj4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9iNS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9iNS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmI4MDU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2I1LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiYjUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9jaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9jaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2EwNzkxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2NoLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvY3ouanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvY3ouanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMwYmNkMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9jei5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImN6IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJacnXFoWl0IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9kYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9kYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGE2MDM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2RhLmpzCkBAIC0wLDAgKzEsMjQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGVyIiwKKyAgICAiQ29weSI6ICJLb3BpZXIiLAorICAgICJEaXJlY3RvcnkgVXAiOiAiTWFwcGUgb3AiLAorICAgICJGaWxlIE1hbmFnZXIiOiAiRmlsIE1hbmFnZXIiLAorICAgICJGaWxlbmFtZSI6ICJGaWxuYXZuOiIsCisgICAgIkluc2VydCBJbWFnZSI6ICJJbmRzw6Z0IGJpbGxlZGUiLAorICAgICJOZXcgRm9sZGVyIjogIk55IG1hcHBlIiwKKyAgICAiU2F2ZSI6ICJHZW0iLAorICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiVsOmbGcgdmVubGlnc3Qgbm9nZXQgdGVrc3QgZsO4ciBkdSBsYXZlciBldCBueXQgbGluay4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2RlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYmExMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvZGUuanMKQEAgLTAsMCArMSwyNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQWJicmVjaGVuIiwKKyAgICAiQ29weSI6ICJLb3BpZXJlbiIsCisgICAgIkRlbGV0ZSI6ICJMw7ZzY2hlbiIsCisgICAgIkRpcmVjdG9yeSBVcCI6ICLDvGJlcmdlb3JkbmV0ZXIgT3JkbmVyIiwKKyAgICAiRmlsZSBNYW5hZ2VyIjogIkRhdGVpbWFuYWdlciIsCisgICAgIkZpbGVuYW1lIjogIkRhdGVpbmFtZToiLAorICAgICJJbnNlcnQgSW1hZ2UiOiAiQmlsZCBlaW5mw7xnZW4iLAorICAgICJOZXcgRm9sZGVyIjogIk5ldWVyIE9yZG5lciIsCisgICAgIlNhdmUiOiAiU3BlaWNoZXJuIiwKKyAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIlNpZSBtw7xzc2VuIGVpbmVuIFRleHQgbWFya2llcmVuIHVtIGVpbmVuIExpbmsgenUgZXJzdGVsbGVuIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9lZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9lZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzdmMWRiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2VlLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9lbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9lbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTEwZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2VsLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAiQ29weSI6ICLOkc69z4TOuc6zz4HOsc+Gzq4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2VzLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMDFhNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvZXMuanMKQEAgLTAsMCArMSwyMyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlcyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICJDb3B5IjogIkNvcGlhciIsCisgICAgIkRlbGV0ZSI6ICJTdXByaW1pciIsCisgICAgIkRpcmVjdG9yeSBVcCI6ICJEaXJlY3RvcmlvIHN1cGVyaW9yIiwKKyAgICAiRmlsZW5hbWUiOiAiTm9tYnJlIGRlbCBmaWNoZXJvOiIsCisgICAgIkluc2VydCBJbWFnZSI6ICJpbnNlcnRhciBpbWFnZW4iLAorICAgICJOZXcgRm9sZGVyIjogIkNyZWFyIGRpcmVjdG9yaW8iLAorICAgICJTYXZlIjogIkd1YXJkYXIiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2V1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2V1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllOTE1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvZXUuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJldSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiVXR6aSIsCisgICAgIkluc2VydCBJbWFnZSI6ICJJcnVkaWEgdHhlcnRhdHUiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2ZhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTllMjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvZmEuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi2KfZhti12LHYp9mBIiwKKyAgICAiSW5zZXJ0IEltYWdlIjogItin2YHYstmI2K/ZhiDYqti12YjbjNixIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9maS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9maS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWQyYjBhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2ZpLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmkiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlBlcnV1dGEiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMGM1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvZnIuanMKQEAgLTAsMCArMSwyNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxlciIsCisgICAgIkNvcHkiOiAiQ29waWVyIiwKKyAgICAiRGVsZXRlIjogIlN1cHByaW1lciIsCisgICAgIkRpcmVjdG9yeSBVcCI6ICJSZW1vbnRlciIsCisgICAgIkZpbGUgTWFuYWdlciI6ICJHZXN0aW9ubmFpcmUgZGUgZmljaGllcnMiLAorICAgICJGaWxlbmFtZSI6ICJOb20iLAorICAgICJJbnNlcnQgSW1hZ2UiOiAiSW5zw6lyZXIgdW5lIGltYWdlIiwKKyAgICAiTmV3IEZvbGRlciI6ICJOb3V2ZWF1IHLDqXBlcnRvaXJlIiwKKyAgICAiU2F2ZSI6ICJFbnJlZ2lzdHJlciIsCisgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICJWb3VzIGRldmV6IHPDqWxlY3Rpb25uZXIgdW4gdGV4dGUgYXZhbnQgZGUgY3LDqWVyIHVuIG5vdXZlYXUgbGllbiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvZnJfY2EuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvZnJfY2EuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWViYTU4OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9mcl9jYS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZyX2NhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvZ2IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvZ2IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4Mjk4YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9nYi5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImdiIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvaGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvaGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlOWU5NgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9oZS5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImhlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKKyAgICAiQ29weSI6ICLXlNei16rXpyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvaHUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IwMDUwNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9odS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImh1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJNw6lnc2VtIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9pdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9pdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWY1MWFmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2l0LmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaXQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGFtZW50byIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFlOWM1MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9qYS5qcwpAQCAtMCwwICsxLDI1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICJDb3B5IjogIuOCs+ODlOODvCIsCisgICAgIkRlbGV0ZSI6ICLliYrpmaQiLAorICAgICJEaXJlY3RvcnkgVXAiOiAi6Kaq44OH44Kj44Os44Kv44OI44Oq44G4IiwKKyAgICAiRmlsZSBNYW5hZ2VyIjogIuODleOCoeOCpOODq+ODnuODjeODvOOCuOODoyIsCisgICAgIkZpbGVuYW1lIjogIuODleOCoeOCpOODq+WQjToiLAorICAgICJJbnNlcnQgSW1hZ2UiOiAi55S75YOP44Gu5oy/5YWlIiwKKyAgICAiTmV3IEZvbGRlciI6ICLmlrDopo/jg5Xjgqnjg6vjg4AiLAorICAgICJTYXZlIjogIuS/neWtmCIsCisgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICLjg6rjg7Pjgq/jgpLkvZzmiJDjgZnjgovjgavjga/jg4bjgq3jgrnjg4jjgpLpgbjmip7jgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZkiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2xjX2Jhc2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvbGNfYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmY0MGRlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSw1MiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICJDYW5jZWwiOiAiIiwKKyAgICAiQ29uZmlybSI6ICIiLAorICAgICJDb3B5IjogIiIsCisgICAgIkRlbGV0ZSI6ICIiLAorICAgICJEZXRhaWxzIjogIiIsCisgICAgIkRpcmVjdG9yeSBVcCI6ICIiLAorICAgICJGaWxlIEJyb3dzZXIiOiAiIiwKKyAgICAiRmlsZSBMaXN0IjogIiIsCisgICAgIkZpbGUgTWFuYWdlciI6ICIiLAorICAgICJGaWxlbmFtZSI6ICIiLAorICAgICJIZWxsbyAgICBUaGVyZSBDICI6ICIiLAorICAgICJIZWxsbyAgVGhlcmUgQSAiOiAiIiwKKyAgICAiSGVsbG8gXCIgVGhlcmUgQiBcIiI6ICIiLAorICAgICJIZWxsbyAnIFRoZXJlIEQgJyI6ICIiLAorICAgICJJbnNlcnQiOiAiIiwKKyAgICAiSW5zZXJ0IEltYWdlIjogIiIsCisgICAgIkxpc3Qgb2YgUGxhY2VzIjogIiIsCisgICAgIk5ldyBEb2N1bWVudCI6ICIiLAorICAgICJOZXcgRm9sZGVyIjogIiIsCisgICAgIk9wZW4iOiAiIiwKKyAgICAiT3BlbiBEb2N1bWVudCI6ICIiLAorICAgICJQbGFjZXMiOiAiIiwKKyAgICAiUGxlYXNlIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgeW91J2QgbGlrZSB0byBjcmVhdGUuIjogIiIsCisgICAgIlNhdmUiOiAiIiwKKyAgICAiU2F2ZSBEb2N1bWVudCI6ICIiLAorICAgICJUaGlzIHdpbGwgZXJhc2UgYW55IHVuc2F2ZWQgY29udGVudC4gIElmIHlvdSdyZSBjZXJ0YWluLCBwbGVhc2UgY2xpY2sgT0sgdG8gY29udGludWUuIjogIiIsCisgICAgIldlYiBVUkwiOiAiIiwKKyAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvbHQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvbHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY2ZGI4OQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9sdC5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdMWhYXVrdGkiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2x2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL2x2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzllN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvbHYuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXRjZWx0IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9uYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9uYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjJjMzJkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL25iLmpzCkBAIC0wLDAgKzEsMjUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIkNvcHkiOiAiS29waWVyIiwKKyAgICAiRGVsZXRlIjogIkZqZXJuZSIsCisgICAgIkRpcmVjdG9yeSBVcCI6ICJPcHAgZXQgbml2w6UiLAorICAgICJGaWxlIE1hbmFnZXIiOiAiRmlsYmVoYW5kbGVyIiwKKyAgICAiRmlsZW5hbWUiOiAiRmlsbmF2bjoiLAorICAgICJJbnNlcnQgSW1hZ2UiOiAiU2V0dCBpbm4gYmlsZGUiLAorICAgICJOZXcgRm9sZGVyIjogIk55IG1hcHBlIiwKKyAgICAiU2F2ZSI6ICJMYWdyZSIsCisgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICJEdSBtw6UgbWFya2VyZSB0ZWtzdCBlbGxlciBldCBiaWxkZSBmw7hyIGR1IGthbiBsYWdlIGVuIGxlbmtlLiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvbmwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvbmwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM1YmUyMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9ubC5qcwpAQCAtMCwwICsxLDI1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iLAorICAgICJDb3B5IjogIktvcGnDq3JlbiIsCisgICAgIkRlbGV0ZSI6ICJWZXJ3aWpkZXJlbiIsCisgICAgIkRpcmVjdG9yeSBVcCI6ICJCb3ZlbmxpZ2dlbmRlIG1hcCIsCisgICAgIkZpbGUgTWFuYWdlciI6ICJCZXN0YW5kc2JlaGVlciIsCisgICAgIkZpbGVuYW1lIjogIkJlc3RhbmRzbmFhbToiLAorICAgICJJbnNlcnQgSW1hZ2UiOiAiQWZiZWVsZGluZyBpbnZvZWdlbiIsCisgICAgIk5ldyBGb2xkZXIiOiAiTmlldXcgbWFwIiwKKyAgICAiU2F2ZSI6ICJPcHNsYWFuIiwKKyAgICAiWW91IG11c3Qgc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgbWFraW5nIGEgbmV3IGxpbmsuIjogIlNlbGVjdGVlciBkZSB0ZWtzdCB3ZWxrZSBnZWxpbmt0IG1vZXQgd29yZGVuLiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvcGwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvcGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYwYzZjOQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9wbC5qcwpAQCAtMCwwICsxLDI1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInBsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbnVsdWoiLAorICAgICJDb3B5IjogIktvcGl1aiIsCisgICAgIkRlbGV0ZSI6ICJVc3XFhCIsCisgICAgIkRpcmVjdG9yeSBVcCI6ICJLYXRhbG9nIHd5xbxlaiIsCisgICAgIkZpbGUgTWFuYWdlciI6ICJNZW5lZMW8ZXIgcGxpa8OzdyIsCisgICAgIkZpbGVuYW1lIjogIk5hendhIHBsaWt1OiIsCisgICAgIkluc2VydCBJbWFnZSI6ICJXc3RhdyBvYnJhemVrIiwKKyAgICAiTmV3IEZvbGRlciI6ICJOb3d5IGthdGFsb2ciLAorICAgICJTYXZlIjogIlphcGlzeiIsCisgICAgIllvdSBtdXN0IHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIG1ha2luZyBhIG5ldyBsaW5rLiI6ICJaYXpuYWN6IHRla3N0IHByemVkIGRvZGFuaWVtIG9kbm/Fm25pa2EuIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9wdF9ici5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9wdF9ici5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjBkNmQyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMjcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiQ29weSI6ICJDb3BpYXIiLAorICAgICJEZWxldGUiOiAiRGVsZXRhciIsCisgICAgIkRpcmVjdG9yeSBVcCI6ICJEaXJldMOzcmlvIEFjaW1hIiwKKyAgICAiRmlsZSBMaXN0IjogIkxpc3RhIGRlIEFycXVpdm9zIiwKKyAgICAiRmlsZSBNYW5hZ2VyIjogIkdlcmVuY2lhZG9yIGRlIEFycXVpdm9zIiwKKyAgICAiRmlsZW5hbWUiOiAiTm9tZSBkbyBhcnF1aXZvOiIsCisgICAgIkluc2VydCI6ICJJbnNlcmlyIiwKKyAgICAiSW5zZXJ0IEltYWdlIjogIkluc2VyaXIgSW1hZ2VtIiwKKyAgICAiTmV3IEZvbGRlciI6ICJOb3ZhIFBhc3RhIiwKKyAgICAiU2F2ZSI6ICJTYWx2YXIiLAorICAgICJZb3UgbXVzdCBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBtYWtpbmcgYSBuZXcgbGluay4iOiAiVm9jw6ogcHJlY2lzYSBzZWxlY2lvbmFyIGFsZ3VtIHRleHRvIGFudGVzIGRlIGNyaWFyIHVtIG5vdm8gbGluay4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL3JvLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL3JvLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZTI5MTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvcm8uanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJybyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9ydS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9ydS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODk0NzAwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL3J1LmpzCkBAIC0wLDAgKzEsMjEgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicnUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCisgICAgIkRpcmVjdG9yeSBVcCI6ICLQn9Cw0L/QutCwINC90LDQstC10YDRhSIsCisgICAgIkZpbGVuYW1lIjogItCY0LzRjyDRhNCw0LnQu9CwIiwKKyAgICAiSW5zZXJ0IEltYWdlIjogItCS0YHRgtCw0LLQutCwINC60LDRgNGC0LjQvdC60LgiLAorICAgICJOZXcgRm9sZGVyIjogItCd0L7QstCw0Y8g0L/QsNC/0LrQsCIsCisgICAgIlNhdmUiOiAi0KHQvtGF0YDQsNC90LjRgtGMIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9zaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9zaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTUzNzUzCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL3NoLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIiwKKyAgICAiSW5zZXJ0IEltYWdlIjogIlViYWNpIHNsaWt1IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9zaS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9zaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2VjZjI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL3NpLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2kiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvc3IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvc3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E1ODdhNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy9zci5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIsCisgICAgIkluc2VydCBJbWFnZSI6ICLQo9Cx0LDRhtC4INGB0LvQuNC60YMiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL3N2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL3N2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZTcyMTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvc3YuanMKQEAgLTAsMCArMSwxOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJzdiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXZicnl0IiwKKyAgICAiQ29weSI6ICJLb3BpZXJhIiwKKyAgICAiSW5zZXJ0IEltYWdlIjogIkluZm9nYSBiaWxkIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogUEVSU0lTVEVOVFNUT1JBR0UgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy90aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDcxNDJhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL3RoLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidGgiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFBFUlNJU1RFTlRTVE9SQUdFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvdHIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvdHIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE1MzE2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvUGVyc2lzdGVudFN0b3JhZ2UvbGFuZy90ci5qcwpAQCAtMCwwICsxLDE4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLEsHB0YWwiLAorICAgICJEZWxldGUiOiAiU2lsIiwKKyAgICAiSW5zZXJ0IEltYWdlIjogIlJlc2ltIGVrbGUiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL3ZuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL3ZuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZjNjNDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvdm4uanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ2biIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiSOG7p3kiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL3poX2NuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9QZXJzaXN0ZW50U3RvcmFnZS9sYW5nL3poX2NuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyN2ViMTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1BlcnNpc3RlbnRTdG9yYWdlL2xhbmcvemhfY24uanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ6aF9jbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBQRVJTSVNURU5UU1RPUkFHRSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvUkVBRE1FIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNWEyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9SRUFETUUKQEAgLTAsMCArMSw4IEBACitFeGVjQ0dJIE5vdGU6CitJZiB5b3UgaW50ZW5kIHRvIHVzZSB0aGUgcGVybCAoLmNnaSkgYmFja2VuZCB0aGVuIHlvdSB3aWxsIG5lZWQgdG8gaGF2ZSB0aGUgRXhlY0NHSSBvcHRpb24gZW5hYmxlZCBmb3IgdGhpcyBkaXJlY3RvcnkgKGlmIHlvdSBhcmUgdXNpbmcgQXBhY2hlKSwgeW91IG1heSBiZSBhYmxlIHRvIGRvIHRoaXMgYnkgYWRkaW5nIGEgZmlsZSBjYWxsZWQgLmh0YWNjZXNzIGluIHRoaXMgZGlyZWN0b3J5LCB3aXRoIHRoZSBiZWxvdyBjb250ZW50cy4KKworIyMgRVhBTVBMRSAuaHRhY2Nlc3MKK09wdGlvbnMgK0V4ZWNDR0kKKyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0l0IGlzIGhvd2V2ZXIgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIHRoZSBQSFAgYmFja2VuZCB3aGVyZSBwb3NzaWJsZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9TcGVsbENoZWNrZXIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9TcGVsbENoZWNrZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNmMzNjMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL1NwZWxsQ2hlY2tlci5qcwpAQCAtMCwwICsxLDczIEBACisvLyBTcGVsbCBDaGVja2VyIFBsdWdpbiBmb3IgSFRNTEFyZWEtMy4wCisvLyBTcG9uc29yZWQgYnkgd3d3LmFtZXJpY2FuYmlibGUub3JnCisvLyBJbXBsZW1lbnRhdGlvbiBieSBNaWhhaSBCYXpvbiwgaHR0cDovL2R5bmFyY2guY29tL21pc2hvby8KKy8vCisvLyAoYykgZHluYXJjaC5jb20gMjAwMy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyAkSWQ6c3BlbGwtY2hlY2tlci5qcyA4NTZNIDIwMDctMDYtMTMgMTg6MzQ6MzRaIChsb2NhbCkgJAorCitYaW5oYS5Db25maWcucHJvdG90eXBlLlNwZWxsQ2hlY2tlciA9IHsgJ2JhY2tlbmQnOiAncGhwJywgJ3BlcnNvbmFsRmlsZXNEaXInIDogJycsICdkZWZhdWx0RGljdGlvbmFyeScgOiAnZW5fR0InLCAndXRmOF90b19lbnRpdGllcycgOiB0cnVlIH07CisKK2Z1bmN0aW9uIFNwZWxsQ2hlY2tlcihlZGl0b3IpIHsKKyAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisKKyAgdmFyIGNmZyA9IGVkaXRvci5jb25maWc7CisgIHZhciBibCA9IFNwZWxsQ2hlY2tlci5idG5MaXN0OworICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgLy8gc2VlIGlmIHdlIGNhbiBmaW5kIHRoZSBtb2RlIHN3aXRjaCBidXR0b24sIGluc2VydCB0aGlzIGJlZm9yZSB0aGF0CisgIHZhciBpZCA9ICJTQy1zcGVsbC1jaGVjayI7CisgIGNmZy5yZWdpc3RlckJ1dHRvbihpZCwgdGhpcy5fbGMoIlNwZWxsLWNoZWNrIiksIGVkaXRvci5pbWdVUkwoInNwZWxsLWNoZWNrLmdpZiIsICJTcGVsbENoZWNrZXIiKSwgZmFsc2UsCisgICAgICAgICAgICAgZnVuY3Rpb24oZWRpdG9yLCBpZCkgeworICAgICAgICAgICAgICAgLy8gZGlzcGF0Y2ggYnV0dG9uIHByZXNzIGV2ZW50CisgICAgICAgICAgICAgICBzZWxmLmJ1dHRvblByZXNzKGVkaXRvciwgaWQpOworICAgICAgICAgICAgIH0pOworCisgIGNmZy5hZGRUb29sYmFyRWxlbWVudCgiU0Mtc3BlbGwtY2hlY2siLCAiaHRtbG1vZGUiLCAxKTsKK30KKworU3BlbGxDaGVja2VyLl9wbHVnaW5JbmZvID0geworICBuYW1lICAgICAgICAgIDogIlNwZWxsQ2hlY2tlciIsCisgIHZlcnNpb24gICAgICAgOiAiMS4wIiwKKyAgZGV2ZWxvcGVyICAgICA6ICJNaWhhaSBCYXpvbiIsCisgIGRldmVsb3Blcl91cmwgOiAiaHR0cDovL2R5bmFyY2guY29tL21pc2hvby8iLAorICBjX293bmVyICAgICAgIDogIk1paGFpIEJhem9uIiwKKyAgc3BvbnNvciAgICAgICA6ICJBbWVyaWNhbiBCaWJsZSBTb2NpZXR5IiwKKyAgc3BvbnNvcl91cmwgICA6ICJodHRwOi8vd3d3LmFtZXJpY2FuYmlibGUub3JnIiwKKyAgbGljZW5zZSAgICAgICA6ICJodG1sQXJlYSIKK307CisKK1NwZWxsQ2hlY2tlci5wcm90b3R5cGUuX2xjID0gZnVuY3Rpb24oc3RyaW5nKSB7CisgICAgcmV0dXJuIFhpbmhhLl9sYyhzdHJpbmcsICdTcGVsbENoZWNrZXInKTsKK307CisKK1NwZWxsQ2hlY2tlci5idG5MaXN0ID0gWworICBudWxsLCAvLyBzZXBhcmF0b3IKKyAgWyJzcGVsbC1jaGVjayJdCisgIF07CisKK1NwZWxsQ2hlY2tlci5wcm90b3R5cGUuYnV0dG9uUHJlc3MgPSBmdW5jdGlvbihlZGl0b3IsIGlkKSB7CisgIHN3aXRjaCAoaWQpIHsKKyAgICAgIGNhc2UgIlNDLXNwZWxsLWNoZWNrIjoKKyAgICBTcGVsbENoZWNrZXIuZWRpdG9yID0gZWRpdG9yOworICAgIFNwZWxsQ2hlY2tlci5pbml0ID0gdHJ1ZTsKKyAgICB2YXIgdWl1cmwgPSBYaW5oYS5nZXRQbHVnaW5EaXIoIlNwZWxsQ2hlY2tlciIpICsgIi9zcGVsbC1jaGVjay11aS5odG1sIjsKKyAgICB2YXIgd2luOworICAgIGlmIChYaW5oYS5pc19pZSkgeworICAgICAgd2luID0gd2luZG93Lm9wZW4odWl1cmwsICJTQ19zcGVsbF9jaGVja2VyIiwKKyAgICAgICAgICAgICJ0b29sYmFyPW5vLGxvY2F0aW9uPW5vLGRpcmVjdG9yaWVzPW5vLHN0YXR1cz1ubyxtZW51YmFyPW5vLCIgKworICAgICAgICAgICAgInNjcm9sbGJhcnM9bm8scmVzaXphYmxlPXllcyx3aWR0aD02MDAsaGVpZ2h0PTQ1MCIpOworICAgIH0gZWxzZSB7CisgICAgICB3aW4gPSB3aW5kb3cub3Blbih1aXVybCwgIlNDX3NwZWxsX2NoZWNrZXIiLAorICAgICAgICAgICAgInRvb2xiYXI9bm8sbWVudWJhcj1ubyxwZXJzb25hbGJhcj1ubyx3aWR0aD02MDAsaGVpZ2h0PTQ1MCwiICsKKyAgICAgICAgICAgICJzY3JvbGxiYXJzPW5vLHJlc2l6YWJsZT15ZXMiKTsKKyAgICB9CisgICAgd2luLmZvY3VzKCk7CisgICAgYnJlYWs7CisgIH0KK307CisKKy8vIHRoaXMgbmVlZHMgdG8gYmUgZ2xvYmFsLCBpdCdzIGFjY2Vzc2VkIGZyb20gc3BlbGwtY2hlY2stdWkuaHRtbAorU3BlbGxDaGVja2VyLmVkaXRvciA9IG51bGw7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvYXNwZWxsX3NldHVwLnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2FzcGVsbF9zZXR1cC5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEzYTVhZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2FzcGVsbF9zZXR1cC5waHAKQEAgLTAsMCArMSwxMjMgQEAKKzw/cGhwCisvLyBSRVZJU0lPTiBISVNUT1JZOgorLy8KKy8vIDIwMDUtMDgtMTcgWW1MOgorLy8JLglzZWN1cml0eSBmaXggb24gdW5jaGVja2VkIHZhcmlhYmxlcy4gT3JpZ2luYWwgYXV0aG9yIG1pc3NlZCBxdWl0ZSBhIGZldworLy8JCWhvbGVzLgorCisgIHVtYXNrKDAwMCk7CisgICR0ZW1wdGV4dCA9IHRlbXBuYW0oJy90bXAnLCAnc3BlbGxfJyk7CisgIGlmICgoIWlzc2V0KCRfUE9TVFsnZGljdGlvbmFyeSddKSkgfHwgKHN0cmxlbih0cmltKCRfUE9TVFsnZGljdGlvbmFyeSddKSkgPCAxKSkKKyAgeworICAgICAgJGxhbmcgPSAnZW5fR0InOworICB9CisgIGVsc2UKKyAgeworICAgICAgJGxhbmcgPSAkX1BPU1RbJ2RpY3Rpb25hcnknXTsKKyAgfSAgCisgICRsYW5nID0gcHJlZ19yZXBsYWNlKCcvW15hLXowLTlfXS9pJywgJycsICRsYW5nKTsKKyAgCisgICRhc3BlbGwgICAgICA9ICdhc3BlbGwnOworICAkYXNwZWxsX2FyZ3MgPSAnLWEgLS1sYW5nPScgLiAkbGFuZzsKKworICBpZihESVJFQ1RPUllfU0VQQVJBVE9SID09ICdcXCcpIC8vd2luZG93cworICB7CisgICAgJGFzcGVsbCAgICAgICAgID0gJ0M6XFByb2dyYX4xXEFzcGVsbFxiaW5cYXNwZWxsLmV4ZSc7CisgIH0KKyAgZWxzZSAvL2xpbnV4CisgIHsKKyAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYSBsb2NhbCBpbnN0YWxsIG9mIGFzcGVsbCBoZXJlCisgICAgaWYoZmlsZV9leGlzdHMoZGlybmFtZShfX0ZJTEVfXykgLiAnL2FzcGVsbC9iaW4vYXNwZWxsJykpCisgICAgeworICAgICAgcHV0ZW52KCdQQVRIPScgLiBkaXJuYW1lKF9fRklMRV9fKSAuICcvYXNwZWxsL2JpbjonIC4gZ2V0ZW52KCdQQVRIJykpOworICAgICAgcHV0ZW52KCdMRF9MSUJSQVJZX1BBVEg9JyAuIGRpcm5hbWUoX19GSUxFX18pIC4gJy9hc3BlbGwvbGliOicgLiBnZXRlbnYoJ0xEX0xJQlJBUllfUEFUSCcpKTsKKyAgICAgICRkaWNmaWwgPSBkaXJuYW1lKF9fRklMRV9fKSAuJy9hc3BlbGwvbGliLycgLiBwcmVnX3JlcGxhY2UoJy9eLipcL2xpYlwvKGFzcGVsbFxTKilcbi4qL3MnLCAnJDEnLCBgYXNwZWxsIGNvbmZpZyBkaWN0LWRpcmApOworICAgICAgJGFzcGVsbF9hcmdzIC49ICcgLS1kaWN0LWRpcj0nIC4gJGRpY2ZpbCAuICcgLS1hZGQtZmlsdGVyLXBhdGg9JyAuICRkaWNmaWwgOworICAgIH0KKyAgfQorCisKKyAgLy8gT2xkIGFzcGVsbCBkb2Vzbid0IGtub3cgYWJvdXQgZW5jb2RpbmcsIHdoaWNoIG1lYW5zIHRoYXQgdW5pY29kZSB3aWxsIGJlIGJyb2tlLCBidXQKKyAgLy8gd2Ugc2hvdWxkIGF0IGxlYXN0IGxldCBpdCB0cnkuCisgIHByZWdfbWF0Y2goJy9yZWFsbHkgYXNwZWxsIChbMC05XSspXC4oWzAtOV0rKSg/OlwuKFswLTldKykpPy9pJywgYCRhc3BlbGwgdmVyc2lvbmAsICRhVmVyKTsKKworICAkYVZlciA9IGFycmF5KCdtYWpvcicgPT4gKGludCkkYVZlclsxXSwgJ21pbm9yJyA9PiAoaW50KSRhVmVyWzJdLCAncmVsZWFzZScgPT4gKGludClAJGFWZXJbM10pOworICBpZigkYVZlclsnbWFqb3InXSA+PSAwICYmICRhVmVyWydtaW5vciddID49IDYwKQorICB7CisgICAgJGFzcGVsbF9hcmdzICAgLj0gJyAtSCAtLWVuY29kaW5nPXV0Zi04JzsKKyAgfQorICBlbHNlaWYocHJlZ19tYXRjaCgnLy0tZW5jb2RpbmcvJywgc2hlbGxfZXhlYygnYXNwZWxsIDI+JjEnKSkpCisgIHsKKyAgICAkYXNwZWxsX2FyZ3MgICAuPSAnIC0tbW9kZT1ub25lIC0tYWRkLWZpbHRlcj1zZ21sIC0tZW5jb2Rpbmc9dXRmLTgnOworICB9CisgIGVsc2UKKyAgeworICAgICRhc3BlbGxfYXJncyAgIC49ICcgLS1tb2RlPW5vbmUgLS1hZGQtZmlsdGVyPXNnbWwnOworICB9CisKKyAgLy8gUGVyc29uYWwgZGljdGlvbmFyaWVzCisgICRwX2RpY3RzX3BhdGggPSBkaXJuYW1lKF9fRklMRV9fKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAncGVyc29uYWxfZGljdHMnOworCisgIGlmKGlzc2V0KCRfUkVRVUVTVFsncF9kaWN0c19wYXRoJ10pICYmIGZpbGVfZXhpc3RzKCRfUkVRVUVTVFsncF9kaWN0c19wYXRoJ10pICYmIGlzX3dyaXRhYmxlKCRfUkVRVUVTVFsncF9kaWN0c19wYXRoJ10pKQorICB7CisgICAgaWYoIWlzc2V0KCRfUkVRVUVTVFsncF9kaWN0c19uYW1lJ10pKQorICAgIHsKKyAgICAgIGlmKGlzc2V0KCRfQ09PS0lFWydTcGVsbENoZWNrZXJfcF9kaWN0c19uYW1lJ10pKQorICAgICAgeworICAgICAgICAkX1JFUVVFU1RbJ3BfZGljdHNfbmFtZSddID0gJF9DT09LSUVbJ1NwZWxsQ2hlY2tlcl9wX2RpY3RzX25hbWUnXTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgJF9SRVFVRVNUWydwX2RpY3RzX25hbWUnXSA9IHVuaXFpZCgnZGljdCcpOworICAgICAgICBzZXRjb29raWUoJ1NwZWxsQ2hlY2tlcl9wX2RpY3RzX25hbWUnLCAkX1JFUVVFU1RbJ3BfZGljdHNfbmFtZSddLCB0aW1lKCkgKyA2MCo2MCoyNCozNjUqMTApOworICAgICAgfQorICAgIH0gICAgCisgICAgJHBfZGljdF9wYXRoID0gJF9SRVFVRVNUWydwX2RpY3RzX3BhdGgnXSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiBwcmVnX3JlcGxhY2UoJy9bXmEtejAtOV9dL2knLCAnJywgJF9SRVFVRVNUWydwX2RpY3RzX25hbWUnXSk7CisKKyAgICBpZighZmlsZV9leGlzdHMoJHBfZGljdF9wYXRoKSkKKyAgICB7CisJIAkvLyBzaW5jZSB0aGVyZSBpcyBhIHNpbmdsZSBkaXJlY3RvcnkgZm9yIGFsbCB1c2VycyB0aGlzIGNvdWxkIGVuZCB1cCBjb250YWluaW5nCisJCS8vIHF1aXRlIGEgZmV3IHN1YmRpcmVjdG9yaWVzLiBUbyBwcmV2ZW50IGEgRE9TIHNpdHVhdGlvbiB3ZSdsbCBsaW1pdCB0aGUgCisJCS8vIHRvdGFsIGRpcmVjdG9yaWVzIGNyZWF0ZWQgdG8gMjAwMCAoYXJiaXRyYXJ5KS4gQWRqdXN0IHRvIHN1aXQgeW91ciBpbnN0YWxsYXRpb24uCisKKwkJJGNvdW50ID0gMDsKKworCQlpZiggJGRpciA9IEBvcGVuZGlyKCAkcF9kaWN0c19wYXRoICkgKQorCQkJeworCisJCQl3aGlsZSggRkFMU0UgIT09ICgkZmlsZSA9IHJlYWRkaXIoJGRpcikpICkKKwkJCQl7CisJCQkJJGNvdW50Kys7CisJCQkJfQorCQkJfQorCisJCS8vIFRPRE86IG1ha2UgdGhpcyBhIGNvbmZpZyB2YWx1ZS4KKworCQlpZiAoICRjb3VudCA+IDIwMDAgKQorCQkJeworCisJCQkvLyBlaXRoZXIgdmVyeSBoZWF2eSB1c2Ugb3IgYSBET1MgYXR0ZW1wdAorCisJCQlkaWUoKTsKKworCQkJfQorCisgICAgICBta2RpcigkcF9kaWN0X3BhdGgpOworICAgICAgY2htb2QoJHBfZGljdF9wYXRoLCAwMjc3MCk7CisgICAgfQorCisgICAgaWYoZmlsZV9leGlzdHMoJHBfZGljdF9wYXRoKSAmJiBpc193cml0YWJsZSgkcF9kaWN0X3BhdGgpKQorICAgIHsKKyAgICAgIC8vIEdvb2QgVG8gR28hCisgICAgICAkYXNwZWxsX2FyZ3MgLj0gJyAtLWhvbWUtZGlyPScgLiAkcF9kaWN0X3BhdGggOworICAgIH0KKyAgfQorCisvLyBhcyBhbiBhZGRpdGlvbmFsIHByZWNhdXRpb24gY2hlY2sgdGhlIGFzcGVsbF9hcmdzIGZvciBpbGxlZ2FsIAorLy8gY2hhcmFjdGVycworICAkYXNwZWxsX2FyZ3MgPSBwcmVnX3JlcGxhY2UoICIvW3w+PDtcJF0rLyIsICcnLCAkYXNwZWxsX2FyZ3MgKTsKKyAgJGFzcGVsbGRpY3Rpb25hcmllcyA9ICIkYXNwZWxsIGR1bXAgZGljdHMiOworICAkYXNwZWxsY29tbWFuZCAgICAgID0gIiRhc3BlbGwgJGFzcGVsbF9hcmdzIDwgJHRlbXB0ZXh0IjsKKworCis/PgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvaW1nL2hlLXNwZWxsLWNoZWNrLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2ltZy9oZS1zcGVsbC1jaGVjay5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxNWQyZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2ltZy9oZS1zcGVsbC1jaGVjay5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvaW1nL3NwZWxsLWNoZWNrLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2ltZy9zcGVsbC1jaGVjay5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNlMDA5YQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2ltZy9zcGVsbC1jaGVjay5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9iNS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvYjUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI3NjNmNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvYjUuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJiNSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBTUEVMTENIRUNLRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvY2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL2NoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMDQzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL2NoLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgIk9LIjogIuWlvSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9jei5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvY3ouanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc5YWQyNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvY3ouanMKQEAgLTAsMCArMSwzNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjeiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgIkRpY3Rpb25hcnkiOiAiU2xvdm7DrWsiLAorICAgICJGaW5pc2hlZCBsaXN0IG9mIG1pc3BlbGxlZCB3b3JkcyI6ICJEb2tvbsSNZW4gc2V6bmFtIGNoeWJuw71jaCBzbG92IiwKKyAgICAiSSB3aWxsIG9wZW4gaXQgaW4gYSBuZXcgcGFnZS4iOiAiQnVkZSBvdGV2xZllbiBqZWogdiBub3bDqSBzdHLDoW5jZS4iLAorICAgICJJZ25vcmUiOiAiSWdub3JvdmF0IiwKKyAgICAiSWdub3JlIGFsbCI6ICJJZ25vcm92YXQgdsWhZSIsCisgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICJQb2RsZSB6dm9sZW7DqWhvIHNsb3Zuw61rdSBuZWJ5bGEgbmFsZXplbmEgxb7DoWRuw6EgY2h5Ym7DoSBzbG92YS4iLAorICAgICJPSyI6ICJPSyIsCisgICAgIk9yaWdpbmFsIHdvcmQiOiAiUMWvdm9kbsOtIHNsb3ZvIiwKKyAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byBvcGVuIHRoaXMgbGluayI6ICJQcm9zw61tIHBvdHZyxI90ZSBvdGV2xZllbsOtIHRvaG90byBvZGthenUiLAorICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiUHJvc8OtbSDEjWVrZWp0ZS4gS29tdW5pa3VhY2UgcyBrb250cm9sb3Ugc3Byw6F2bm9zdGkgc2xvdi4iLAorICAgICJQbGVhc2Ugd2FpdDogY2hhbmdpbmcgZGljdGlvbmFyeSB0byI6ICJQcm9zw61tIMSNZWtlanRlOiB6bcSbbmEgYWRyZXPDocWZZSBuYSIsCisgICAgIlJlLWNoZWNrIjogIlDFmWVrb250cm9sb3ZhdCIsCisgICAgIlJlcGxhY2UiOiAiWmFtxJtuaXQiLAorICAgICJSZXBsYWNlIGFsbCI6ICJaYW3Em25pdCB2xaFlY2hubyIsCisgICAgIlJlcGxhY2Ugd2l0aCI6ICJaYW3Em25pdCB6YSIsCisgICAgIlNwZWxsLWNoZWNrIjogIktvbnRyb2xhIHNwcsOhdm5vc3RpIHNsb3YiLAorICAgICJTdWdnZXN0aW9ucyI6ICJEb3BvcnXEjWVuw60iLAorICAgICJUaGlzIHdpbGwgZHJvcCBjaGFuZ2VzIGFuZCBxdWl0IHNwZWxsIGNoZWNrZXIuICBQbGVhc2UgY29uZmlybS4iOiAiWm3Em255IGJ1ZG91IHpydcWhZW55IGEga29udHJvbGEgc3Byw6F2bm9zdGkgc2xvdiB1a29uxI1lbmEuIFByb3PDrW0gcG90dnLEj3RlLiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIk9uZSBtb21lbnQuLi4iOiAic3RycGVuw60gcHJvc8OtbSA7LSkiLAorICAgICAgICAiU3BlbGwgY2hlY2sgY29tcGxldGUsIGRpZG4ndCBmaW5kIGFueSBtaXNwZWxsZWQgd29yZHMuICBDbG9zaW5nIG5vdy4uLiI6ICJLb250cm9sYSBzcHLDoXZub3N0aSBzbG92IGRva29uxI1lbmEsIG5lYnlsYSBuYWxlemVuYSDFvsOhZG7DoSBjaHlibsOhIHNsb3ZhLiBVa29uxI1vdsOhbsOtIC4uLiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvZGEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL2RhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MDQxOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL2RhLmpzCkBAIC0wLDAgKzEsMzUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubiB1bGVyIiwKKyAgICAiRGljdGlvbmFyeSI6ICJPcmRib2ciLAorICAgICJGaW5pc2hlZCBsaXN0IG9mIG1pc3BlbGxlZCB3b3JkcyI6ICJMaXN0ZW4gbWVkIHN0YXZlZmVqbCBlciBnZW5uZW1nw6VldCIsCisgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIkplZyB2aWwgw6VibmUgZGV0IGkgZW4gbnkgc2lkZS4iLAorICAgICJJZ25vcmUiOiAiSWdub3JlciIsCisgICAgIklnbm9yZSBhbGwiOiAiSWdub3JlciBhbGxlIiwKKyAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIkRlciBibGV2IGlra2UgZnVuZGV0IG5vZ2xlIHN0YXZlZmVqbCBtZWQgZGVuIHZhbGd0ZSBvcmRib2cuIiwKKyAgICAiT0siOiAiT0siLAorICAgICJPcmlnaW5hbCB3b3JkIjogIk9wcmluZGVsaWd0IG9yZCIsCisgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gb3BlbiB0aGlzIGxpbmsiOiAiVmlsIGR1IGbDuGxnZSBkZXR0ZSBsaW5rPyIsCisgICAgIlBsZWFzZSB3YWl0LiAgQ2FsbGluZyBzcGVsbCBjaGVja2VyLiI6ICJWZW50IHZlbmxpZ3N0LiAgSGVudGVyIHN0YXZla29udHJvbC4iLAorICAgICJQbGVhc2Ugd2FpdDogY2hhbmdpbmcgZGljdGlvbmFyeSB0byI6ICJWZW50IHZlbmxpZ3N0OiBza2lmdGVyIG9yZGJvZyB0aWwiLAorICAgICJSZS1jaGVjayI6ICJUamVrIGlnZW4iLAorICAgICJSZXBsYWNlIjogIkVyc3RhdCIsCisgICAgIlJlcGxhY2UgYWxsIjogIkVyc3RhdCBhbGxlIiwKKyAgICAiUmVwbGFjZSB3aXRoIjogIkVyc3RhdCBtZWQiLAorICAgICJTcGVsbC1jaGVjayI6ICJTdGF2ZWtvbnRyb2wiLAorICAgICJTdWdnZXN0aW9ucyI6ICJGb3JzbGFnIiwKKyAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIkFsbGUgZGluZSDDpm5kcmluZ2VyIHZpbCBnw6UgdGFidCwgdmlsIGR1IGZvcnRzw6Z0dGU/IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiT25lIG1vbWVudC4uLiI6ICJWZW50IHZlbmxpZ3N0IiwKKyAgICAgICAgIlNwZWxsIGNoZWNrIGNvbXBsZXRlLCBkaWRuJ3QgZmluZCBhbnkgbWlzcGVsbGVkIHdvcmRzLiAgQ2xvc2luZyBub3cuLi4iOiAiU3RhdmVrb250cm9sbGVuIGVyIGdlbm5lbWbDuHJ0LCBkZXIgYmxldiBpa2tlIGZ1bmRldCBub2dsZSBzdGF2ZWZlamwuICBMdWtrZXIuLi4iCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWJmNjZlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9kZS5qcwpAQCAtMCwwICsxLDM1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImRlIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBYmJyZWNoZW4iLAorICAgICJEaWN0aW9uYXJ5IjogIldvZXJ0ZXJidWNoIiwKKyAgICAiRmluaXNoZWQgbGlzdCBvZiBtaXNwZWxsZWQgd29yZHMiOiAiTGlzdGUgZGVyIG5pY2h0IGJla2FubnRlbiBXb2VydGVyIiwKKyAgICAiSSB3aWxsIG9wZW4gaXQgaW4gYSBuZXcgcGFnZS4iOiAiV2lyZCBhdWYgbmV1ZXIgU2VpdGUgZ2VvZWZmbmV0IiwKKyAgICAiSWdub3JlIjogIklnbm9yaWVyZW4iLAorICAgICJJZ25vcmUgYWxsIjogIkFsbGUgaWdub3JpZXJlbiIsCisgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICJLZWluZSBmYWxzY2hlbiBXb2VydGVyIG1pdCBnZXdhZWhsdGVuIFdvZXJ0ZXJidWNoIGdlZnVuZGVuIiwKKyAgICAiT0siOiAiT0siLAorICAgICJPcmlnaW5hbCB3b3JkIjogIk9yaWdpbmFsIFdvcnQiLAorICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIldvbGxlbiBTaWUgZGllc2VuIExpbmsgb2VmZm5lbiIsCisgICAgIlBsZWFzZSB3YWl0LiAgQ2FsbGluZyBzcGVsbCBjaGVja2VyLiI6ICJCaXR0ZSB3YXJ0ZW4uICBXb2VydGVyYnVjaCB3aXJkIGR1cmNoc3VjaHQuIiwKKyAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAiQml0dGUgd2FydGVuOiBXb2VydGVyYnVjaCB3ZWNoc2VsbiB6dSIsCisgICAgIlJlLWNoZWNrIjogIk5ldXVlYmVycHJ1ZWZ1bmciLAorICAgICJSZXBsYWNlIjogIkVyc2V0emVuIiwKKyAgICAiUmVwbGFjZSBhbGwiOiAiQWxsZSBlcnNldHplbiIsCisgICAgIlJlcGxhY2Ugd2l0aCI6ICJFcnNldHplbiBtaXQiLAorICAgICJTcGVsbC1jaGVjayI6ICJVZWJlcnBydWVmdW5nIiwKKyAgICAiU3VnZ2VzdGlvbnMiOiAiVm9yc2NobGFnIiwKKyAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIkFlbmRlcnVuZ2VuIHdlcmRlbiBuaWNodCB1ZWJlcm5vbW1lbi4gIEJpdHRlIGJlc3RhZXR0aWdlbi4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJPbmUgbW9tZW50Li4uIjogIkJpdHRlIHdhcnRlbi4uLiIsCisgICAgICAgICJTcGVsbCBjaGVjayBjb21wbGV0ZSwgZGlkbid0IGZpbmQgYW55IG1pc3BlbGxlZCB3b3Jkcy4gIENsb3Npbmcgbm93Li4uIjogIlJlY2h0c3NjaHJlaWJwcnVlZnVuZyB3dXJkZSBvaG5lIEZlaGxlciBmZXJ0aWdnZXN0ZWxsdC4gIFdpcmQgbnVuIGdlc2NobG9zc2VuLi4uIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9lZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvZWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI2Yzc0OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvZWUuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTG9vYnUiLAorICAgICJPSyI6ICJPSyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9lbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEwNWEzZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvZWwuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAizpHOus+Nz4HPic+DzrciLAorICAgICJPSyI6ICLOlc69z4TOrM6+zrXOuSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgzZWFkNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvZXMuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlcyIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQ2FuY2VsYXIiLAorICAgICJPSyI6ICJBY2VwdGFyIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogU1BFTExDSEVDS0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL2V1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9ldS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2IyMTZjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9ldS5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImV1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJVdHppIiwKKyAgICAiT0siOiAiQWRvcyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9mYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvZmEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY3ZDU3NwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvZmEuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi2KfZhti12LHYp9mBIiwKKyAgICAiT0siOiAi2KjZhNmHIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogU1BFTExDSEVDS0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL2ZpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9maS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTc4ZmE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9maS5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQZXJ1dXRhIiwKKyAgICAiT0siOiAiSHl2w6Rrc3kiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBTUEVMTENIRUNLRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvZnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxN2RhM2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsMzYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsZXIiLAorICAgICJEaWN0aW9uYXJ5IjogIkRpY3Rpb25uYWlyZSIsCisgICAgIkZpbmlzaGVkIGxpc3Qgb2YgbWlzcGVsbGVkIHdvcmRzIjogIkxpc3RlIGRlcyBtb3RzIG1hbCBvcnRob2dyYXBoacOpcyIsCisgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIk91dmVydHVyZSBkYW5zIHVuZSBub3V2ZWxsZSBmZW7DqnRyZSIsCisgICAgIklnbm9yZSI6ICJJZ25vcmVyIiwKKyAgICAiSWdub3JlIGFsbCI6ICJUb3V0IGlnbm9yZXIiLAorICAgICJObyBtaXNwZWxsZWQgd29yZHMgZm91bmQgd2l0aCB0aGUgc2VsZWN0ZWQgZGljdGlvbmFyeS4iOiAiQXVjdW5lIGVycmV1ciBvcnRob2dyYXBoaXF1ZSBhdmVjIGxlIGRpY3Rpb25uYWlyZSBzw6lsZWN0aW9ubsOpLiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiT3JpZ2luYWwgd29yZCI6ICJNb3Qgb3JpZ2luYWwiLAorICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIlZldWlsbGV6IGNvbmZpcm1lciBsJ291dmVydHVyZSBkZSBjZSBsaWVuIiwKKyAgICAiUGxlYXNlIHdhaXQuICBDYWxsaW5nIHNwZWxsIGNoZWNrZXIuIjogIlZldWlsbGV6IHBhdGllbnRlci4gIEFwcGVsIGR1IGNvcnJlY3RldXIuIiwKKyAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAiVmV1aWxsZXogcGF0aWVudGVyLiBDaGFuZ2VtZW50IGR1IGRpY3Rpb25uYWlyZSB2ZXJzIiwKKyAgICAiUmUtY2hlY2siOiAiVsOpcmlmaWVyIGVuY29yZSIsCisgICAgIlJlcGxhY2UiOiAiUmVtcGxhY2VyIiwKKyAgICAiUmVwbGFjZSBhbGwiOiAiVG91dCByZW1wbGFjZXIiLAorICAgICJSZXBsYWNlIHdpdGgiOiAiUmVtcGxhY2VyIHBhciIsCisgICAgIlJldmVydCI6ICJBbm51bGVyIiwKKyAgICAiU3BlbGwtY2hlY2siOiAiQ29ycmVjdGlvbiIsCisgICAgIlN1Z2dlc3Rpb25zIjogIlN1Z2dlc3Rpb25zIiwKKyAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIkNlY2kgZmVybWVyYSBsYSBmZW7DqnRyZSBldCBhbm51bGVyYSBsZXMgbW9kaWZpY2F0aW9ucy4gVmV1aWxsZXogY29uZmlybWVyLiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIk9uZSBtb21lbnQuLi4iOiAiVmV1aWxsZXogcGF0aWVudGVyIiwKKyAgICAgICAgIlNwZWxsIGNoZWNrIGNvbXBsZXRlLCBkaWRuJ3QgZmluZCBhbnkgbWlzcGVsbGVkIHdvcmRzLiAgQ2xvc2luZyBub3cuLi4iOiAiVsOpcmlmaWNhdGlvbiB0ZXJtaW7DqWUsIGF1Y3VuZSBlcnJldXIgb3J0aG9ncmFwaGlxdWUgZMOpdGVjdMOpZS4gIEZlcm1ldHVyZSBlbiBjb3Vycy4uLiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvZnJfY2EuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL2ZyX2NhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYmU2YmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL2ZyX2NhLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnJfY2EiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogU1BFTExDSEVDS0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL2diLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9nYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzNkYzk0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9nYi5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImdiIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9oZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvaGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiOTliZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvaGUuanMKQEAgLTAsMCArMSwzNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJoZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgIkRpY3Rpb25hcnkiOiAi157Xmdec15XXnyIsCisgICAgIkZpbmlzaGVkIGxpc3Qgb2YgbWlzcGVsbGVkIHdvcmRzIjogIteU16HXqteZ15nXnteUINeo16nXmdee16og15TXnteZ15zXmdedINeU157XkNeV15nXqteV16og15HXkNeV16TXnyDXqdeS15XXmSIsCisgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIteQ16DXmSDXkNek16rXlyDXkNeqINeW15Qg15HXl9ec15XXnyDXl9eT16kuIiwKKyAgICAiSWdub3JlIjogIteU16rXotec150iLAorICAgICJJZ25vcmUgYWxsIjogIteU16rXotec150g157XlNeb15wiLAorICAgICJObyBtaXNwZWxsZWQgd29yZHMgZm91bmQgd2l0aCB0aGUgc2VsZWN0ZWQgZGljdGlvbmFyeS4iOiAi15zXkCDXoNee16bXkNeVINee15nXnNeZ150g157XkNeV15nXqteV16og15HXkNeV16TXnyDXqdeS15XXmSDXotedINeU157Xmdec15XXnyDXlNeg15HXl9eoLiIsCisgICAgIk9LIjogIteQ15nXqdeV16giLAorICAgICJPcmlnaW5hbCB3b3JkIjogIteU157Xmdec15Qg15TXnten15XXqNeZ16oiLAorICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIteQ16DXkCDXkNep16gg16nXkdeo16bXldeg15og15zXpNeq15XXlyDXp9eZ16nXldeoINeW15QiLAorICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAi15DXoNeQINeU157XqtefLiAg16fXldeo15Ag15zXkdeV15PXpyDXkNeZ15XXqi4iLAorICAgICJQbGVhc2Ugd2FpdDogY2hhbmdpbmcgZGljdGlvbmFyeSB0byI6ICLXkNeg15Ag15TXnteq1586INee15fXnNeZ16Mg157Xmdec15XXnyDXnC0iLAorICAgICJSZS1jaGVjayI6ICLXkdeT15XXpyDXnteX15PXqSIsCisgICAgIlJlcGxhY2UiOiAi15TXl9ec16MiLAorICAgICJSZXBsYWNlIGFsbCI6ICLXlNeX15zXoyDXlNeb15wiLAorICAgICJSZXBsYWNlIHdpdGgiOiAi15TXl9ec16Mg15EtIiwKKyAgICAiUmV2ZXJ0IjogIteU15fXlteoINep15nXoNeV15nXmdedIiwKKyAgICAiU3BlbGwtY2hlY2siOiAi15HXk9eZ16fXqiDXkNeZ15XXqiIsCisgICAgIlN1Z2dlc3Rpb25zIjogIteU16bXoteV16oiLAorICAgICJUaGlzIHdpbGwgZHJvcCBjaGFuZ2VzIGFuZCBxdWl0IHNwZWxsIGNoZWNrZXIuICBQbGVhc2UgY29uZmlybS4iOiAi15bXlCDXmdeR15jXnCDXkNeqINeU16nXmdeg15XXmdeZ150g15XXmdem15Ag157XkdeV15PXpyDXlNeQ15nXldeqLiAg15DXoNeQINeQ16nXqC4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJPbmUgbW9tZW50Li4uIjogItei16DXkCDXlNee15jXnyA7LSkiLAorICAgICAgICAiU3BlbGwgY2hlY2sgY29tcGxldGUsIGRpZG4ndCBmaW5kIGFueSBtaXNwZWxsZWQgd29yZHMuICBDbG9zaW5nIG5vdy4uLiI6ICLXkdeT15nXp9eqINeU15DXmdeV16og16DXodeq15nXmdee15QsINec15Ag16DXntem15DXlSDXnteZ15zXmdedINee15DXldeZ16rXldeqINeR15DXldek158g16nXkteV15kuICDXoNeh15LXqCDXm9ei16ouLi4iCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL2h1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9odS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmY2YTAwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9odS5qcwpAQCAtMCwwICsxLDM1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImh1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJNw6lnc2VtIiwKKyAgICAiRGljdGlvbmFyeSI6ICJTesOzdMOhciIsCisgICAgIkZpbmlzaGVkIGxpc3Qgb2YgbWlzcGVsbGVkIHdvcmRzIjogIkEgdMOpdmVzenRldHQgc3phdmFrIGxpc3TDoWrDoW5hayB2w6lnZSIsCisgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIk1lZ255aXTDoXMgw7pqIGxhcG9uIiwKKyAgICAiSWdub3JlIjogIkVsdmV0w6lzIiwKKyAgICAiSWdub3JlIGFsbCI6ICJNaW5kZW4gZWx2ZXTDqXNlIiwKKyAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIkEgdsOhbGFzenRvdHQgc3rDs3TDoXIgc3plcmludCBuaW5jcyB0w6l2ZXN6dGV0dCBzesOzLiIsCisgICAgIk9LIjogIlJlbmRiZW4iLAorICAgICJPcmlnaW5hbCB3b3JkIjogIkVyZWRldGkgc3rDsyIsCisgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gb3BlbiB0aGlzIGxpbmsiOiAiTWVnZXLFkXPDrXTDqXMiLAorICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiS2lzIHTDvHJlbG1ldCwgYSBoZWx5ZXPDrXLDoXNlbGxlbsWRcnrFkSBow612w6FzYSBmb2x5YW1hdGJhbi4iLAorICAgICJQbGVhc2Ugd2FpdDogY2hhbmdpbmcgZGljdGlvbmFyeSB0byI6ICJLaXMgdMO8cmVsbWV0LCBzesOzdMOhciBjc2Vyw6lqZSIsCisgICAgIlJlLWNoZWNrIjogIsOaanJhZWxsZW7FkXJ6w6lzIiwKKyAgICAiUmVwbGFjZSI6ICJDc2VyZSIsCisgICAgIlJlcGxhY2UgYWxsIjogIk1pbmQgY3NlcsOpamUiLAorICAgICJSZXBsYWNlIHdpdGgiOiAiQ3NlcmUgYSBrw7Z2ZXRrZXrFkXJlOiIsCisgICAgIlNwZWxsLWNoZWNrIjogIkhlbHllc8OtcsOhc2VsbGVuxZFyesOpcyIsCisgICAgIlN1Z2dlc3Rpb25zIjogIlRpcHBlayIsCisgICAgIlRoaXMgd2lsbCBkcm9wIGNoYW5nZXMgYW5kIHF1aXQgc3BlbGwgY2hlY2tlci4gIFBsZWFzZSBjb25maXJtLiI6ICJLaWzDqXDDqXMgYSB2w6FsdG96w6Fzb2sgZWxkb2LDoXPDoXZhbC4gSsOzdsOhaGFneWphPyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIk9uZSBtb21lbnQuLi4iOiAiS2lzIHTDvHJlbG1ldCA7LSkiLAorICAgICAgICAiU3BlbGwgY2hlY2sgY29tcGxldGUsIGRpZG4ndCBmaW5kIGFueSBtaXNwZWxsZWQgd29yZHMuICBDbG9zaW5nIG5vdy4uLiI6ICJBIGhlbHllc8OtcsOhc2VsbGVuxZFyesOpcyBrw6lzeiwgdMOpdmVzenRldHQgc3rDsyBuZW0gZm9yZHVsdCBlbMWRLiBCZXrDoXLDoXMuLi4iCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL2l0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9pdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjhmNWEwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9pdC5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIml0IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGxhbWVudG8iLAorICAgICJPSyI6ICJPSyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9qYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvamEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFmNjliYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvamEuanMKQEAgLTAsMCArMSwzOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJqYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi5Lit5q2iIiwKKyAgICAiRGljdGlvbmFyeSI6ICLovp7mm7giLAorICAgICJGaW5pc2hlZCBsaXN0IG9mIG1pc3BlbGxlZCB3b3JkcyI6ICLjgaTjgaXjgorplpPpgZXljZjoqp7jga7kuIDopqciLAorICAgICJJIHdpbGwgb3BlbiBpdCBpbiBhIG5ldyBwYWdlLiI6ICLmlrDjgZfjgYTjg5rjg7zjgrjjgafplovjgY3jgb7jgZnjgIIiLAorICAgICJJZ25vcmUiOiAi54Sh6KaWIiwKKyAgICAiSWdub3JlIGFsbCI6ICLjgZnjgbnjgabnhKHoppYiLAorICAgICJJbmZvIjogIuaDheWgsSIsCisgICAgIkxlYXJuIjogIuWtpue/kiIsCisgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICLpgbjmip7jgZXjgozjgZ/ovp7mm7jjgavjga/jgaTjgaXjgorplpPpgZXjgYTljZjoqp7jgYzjgYLjgorjgb7jgZvjgpPjgIIiLAorICAgICJPSyI6ICJPSyIsCisgICAgIk9yaWdpbmFsIHdvcmQiOiAi5YWD44Gu5Y2Y6KqeIiwKKyAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byBvcGVuIHRoaXMgbGluayI6ICLmnKzlvZPjgavjgZPjga7jg6rjg7Pjgq/jgpLplovjgY3jgb7jgZnjgYsiLAorICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAi44GX44Gw44KJ44GP44GK5b6F44Gh44GP44Gg44GV44GE44CC44K544Oa44Or44OB44Kn44OD44Kr44O844KS5ZG844Gz5Ye644GX44Gm44GE44G+44GZ44CCIiwKKyAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAi44GX44Gw44KJ44GP44GK5b6F44Gh44GP44Gg44GV44GEOiDovp7mm7jjgpLliIfjgormm7/jgYjjgabjgYTjgb7jgZkiLAorICAgICJSZS1jaGVjayI6ICLlho3jg4Hjgqfjg4Pjgq8iLAorICAgICJSZXBsYWNlIjogIue9ruaPmyIsCisgICAgIlJlcGxhY2UgYWxsIjogIuOBmeOBueOBpue9ruaPmyIsCisgICAgIlJlcGxhY2Ugd2l0aCI6ICLjgZPjgozjgavnva7mj5siLAorICAgICJSZXZlcnQiOiAi5oi744GZIiwKKyAgICAiU3BlbGwtY2hlY2siOiAi44K544Oa44Or44OB44Kn44OD44KvIiwKKyAgICAiU3VnZ2VzdGlvbnMiOiAi5YCZ6KOcIiwKKyAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIuWkieabtOOCkuegtOajhOOBl+OBpuOCueODmuODq+ODgeOCp+ODg+OCq+ODvOOCkue1guS6huOBl+OBvuOBmeOAguOCiOOCjeOBl+OBhOOBhOOBp+OBmeOBi+OAgiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIk9uZSBtb21lbnQuLi4iOiAi44GC44Go44KC44GG5bCR44GXLi4uIiwKKyAgICAgICAgIlNwZWxsIGNoZWNrIGNvbXBsZXRlLCBkaWRuJ3QgZmluZCBhbnkgbWlzcGVsbGVkIHdvcmRzLiAgQ2xvc2luZyBub3cuLi4iOiAi44K544Oa44Or44OB44Kn44OD44Kv44GM5a6M5LqG44GX44G+44GX44Gf44GM44CB44Gk44Gl44KK6ZaT6YGV44GE5Y2Y6Kqe44Gv44GC44KK44G+44Gb44KT44Gn44GX44Gf44CC44GZ44GQ44Gr6ZaJ44GY44G+44GZLi4uIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYzgwOWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL2xjX2Jhc2UuanMKQEAgLTAsMCArMSw0OSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vCisvLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKKy8vIEF1dGhvcjogVHJhbnNsYXRvci1OYW1lLCA8ZW1haWxAZXhhbXBsZS5jb20+CisvLworLy8gTGFzdCByZXZpc2lvbjogMjAxOC0wNC0xMgorLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgorLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCisvLworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorLy8KKy8vIChQbGVhc2UsIHJlbW92ZSBpbmZvcm1hdGlvbiBiZWxvdykKKy8vIEZPUiBUUkFOU0xBVE9SUzoKKy8vCisvLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKKy8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKKy8vCisvLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKKy8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKKy8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKKworeworICAgICJDYW5jZWwiOiAiIiwKKyAgICAiRGljdGlvbmFyeSI6ICIiLAorICAgICJGaW5pc2hlZCBsaXN0IG9mIG1pc3BlbGxlZCB3b3JkcyI6ICIiLAorICAgICJIVE1MQXJlYSBTcGVsbCBDaGVja2VyIjogIiIsCisgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIiIsCisgICAgIklnbm9yZSI6ICIiLAorICAgICJJZ25vcmUgYWxsIjogIiIsCisgICAgIkluZm8iOiAiIiwKKyAgICAiTGVhcm4iOiAiIiwKKyAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIiIsCisgICAgIk9LIjogIiIsCisgICAgIk9yaWdpbmFsIHdvcmQiOiAiIiwKKyAgICAiUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byBvcGVuIHRoaXMgbGluayI6ICIiLAorICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiIiwKKyAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAiIiwKKyAgICAiUmUtY2hlY2siOiAiIiwKKyAgICAiUmVwbGFjZSI6ICIiLAorICAgICJSZXBsYWNlIGFsbCI6ICIiLAorICAgICJSZXBsYWNlIHdpdGgiOiAiIiwKKyAgICAiUmV2ZXJ0IjogIiIsCisgICAgIlNwZWxsIENoZWNrZXIiOiAiIiwKKyAgICAiU3BlbGwtY2hlY2siOiAiIiwKKyAgICAiU3VnZ2VzdGlvbnMiOiAiIiwKKyAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIiIsCisgICAgInBsaXogd2VpdCA7LSkiOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvbHQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL2x0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NDc3M2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL2x0LmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogU1BFTExDSEVDS0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL2x2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9sdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDBmNWY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9sdi5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImx2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdGNlbHQiLAorICAgICJPSyI6ICJMYWJpIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogU1BFTExDSEVDS0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9uYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2MxZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDM1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICJEaWN0aW9uYXJ5IjogIk9yZGxpc3RlIiwKKyAgICAiRmluaXNoZWQgbGlzdCBvZiBtaXNwZWxsZWQgd29yZHMiOiAiRmVyZGlnIG1lZCBsaXN0ZSBvdmVyIGZlaWxzdGF2ZWRlIG9yZCIsCisgICAgIkkgd2lsbCBvcGVuIGl0IGluIGEgbmV3IHBhZ2UuIjogIsOFcG5lcyBpIG55IHNpZGUiLAorICAgICJJZ25vcmUiOiAiSWdub3JlciIsCisgICAgIklnbm9yZSBhbGwiOiAiSWdub3JlciBhbGxlIiwKKyAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIkluZ2VuIGZlaWxzdGF2ZWRlIG9yZCBmdW5uZXQgbWVkIGRlbiB2YWxndGUgb3JkbGlzdGVuIiwKKyAgICAiT0siOiAiT0siLAorICAgICJPcmlnaW5hbCB3b3JkIjogIk9wcHJpbm5lbGlnIG9yZCIsCisgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gb3BlbiB0aGlzIGxpbmsiOiAiw5huc2tlciBkdSDDpSDDpXBuZSBkZW5uZSBsZW5rZW4iLAorICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiVmVubmxpZ3N0IHZlbnQsIGthbGxlciBvcHAgc3RhdmVrb250cm9sbHByb2dyYW1tZXQiLAorICAgICJQbGVhc2Ugd2FpdDogY2hhbmdpbmcgZGljdGlvbmFyeSB0byI6ICJWZW5ubGlnc3QgdmVudCwgZW5kcmVyIG9yZGxpc3RlIHRpbCIsCisgICAgIlJlLWNoZWNrIjogIktqw7hyIHN0YXZla29udHJvbGwgcMOlIG55dHQiLAorICAgICJSZXBsYWNlIjogIkVyc3RhdHQiLAorICAgICJSZXBsYWNlIGFsbCI6ICJFcnN0YXR0IGFsbGUiLAorICAgICJSZXBsYWNlIHdpdGgiOiAiRXJzdGF0dCBtZWQiLAorICAgICJTcGVsbC1jaGVjayI6ICJTdGF2ZWtvbnRyb2xsIiwKKyAgICAiU3VnZ2VzdGlvbnMiOiAiRm9yc2xhZyIsCisgICAgIlRoaXMgd2lsbCBkcm9wIGNoYW5nZXMgYW5kIHF1aXQgc3BlbGwgY2hlY2tlci4gIFBsZWFzZSBjb25maXJtLiI6ICJEZXR0ZSB2aWwgZHJvcHBlIGVuZHJpbmdlbmUgb2cgYXZicnl0ZSBzdGF2ZWtvbnRyb2xsZW4sIHZlbm5saWdzdCBiZWtyZWZ0LiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIk9uZSBtb21lbnQuLi4iOiAiRXQgw7h5ZWJsaWtrLi4uIiwKKyAgICAgICAgIlNwZWxsIGNoZWNrIGNvbXBsZXRlLCBkaWRuJ3QgZmluZCBhbnkgbWlzcGVsbGVkIHdvcmRzLiAgQ2xvc2luZyBub3cuLi4iOiAiU3RhdmVrb250cm9sbCBmdWxsZsO4cnQsIGluZ2VuIGZlaWxzdGF2ZWRlIG9yZCBibGUgZnVubmV0LCBzdGF2ZWtvbnRyb2xsIGF2c2x1dHRlcy4iCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL25sLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MThhNGFlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9ubC5qcwpAQCAtMCwwICsxLDM2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbm51bGVlciIsCisgICAgIkRpY3Rpb25hcnkiOiAiV29vcmRlbmJvZWsiLAorICAgICJGaW5pc2hlZCBsaXN0IG9mIG1pc3BlbGxlZCB3b3JkcyI6ICJrbGFhciBtZXQgZGUgbGlqc3QgdmFuIGZvdXRlbiB3b29yZGVuIiwKKyAgICAiSSB3aWxsIG9wZW4gaXQgaW4gYSBuZXcgcGFnZS4iOiAiSWsgemFsIGhldCBpbiBlZW4gbmlldXdlIHBhZ2luYSBvcGVuZW4uIiwKKyAgICAiSWdub3JlIjogIk92ZXJzbGFhbiIsCisgICAgIklnbm9yZSBhbGwiOiAiYWxsZXMgb3ZlcnNsYWFuIiwKKyAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIkdlZW4gZm91dGVuIGdldm9uZGVuIG1ldCBkaXQgd29vcmRlbmJvZWsuIiwKKyAgICAiT0siOiAiT0siLAorICAgICJPcmlnaW5hbCB3b3JkIjogIk9yaWdpbmVsZSB3b29yZCIsCisgICAgIlBsZWFzZSBjb25maXJtIHRoYXQgeW91IHdhbnQgdG8gb3BlbiB0aGlzIGxpbmsiOiAiV2VldCB1IHpla2VyIGRhdCB1IGRlemUgbGluayB3aWx0IG9wZW5lbj8iLAorICAgICJQbGVhc2Ugd2FpdC4gIENhbGxpbmcgc3BlbGwgY2hlY2tlci4iOiAiRXZlbiB3YWNodGVuLiBzcGVsbCBjaGVja2VyIHdvcmR0IGdlbGFkZW4uIiwKKyAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAiZXZlbiB3YWNodGVuOiB3b29yZGVuYm9layB3b3JkdCB2ZXJhbmRlcmQgbmFhciIsCisgICAgIlJlLWNoZWNrIjogIk9wbmlldXciLAorICAgICJSZXBsYWNlIjogIlZlcnZhbmdlbiIsCisgICAgIlJlcGxhY2UgYWxsIjogIkFsbGVzIHZlcnZhbmdlbiIsCisgICAgIlJlcGxhY2Ugd2l0aCI6ICJWZXJ2YW5nZW4gbWV0IiwKKyAgICAiUmV2ZXJ0IjogIk9ta2VyZW4iLAorICAgICJTcGVsbC1jaGVjayI6ICJTcGVsbC1jaGVjayIsCisgICAgIlN1Z2dlc3Rpb25zIjogIlN1Z2dlc3RpZSIsCisgICAgIlRoaXMgd2lsbCBkcm9wIGNoYW5nZXMgYW5kIHF1aXQgc3BlbGwgY2hlY2tlci4gIFBsZWFzZSBjb25maXJtLiI6ICJEaXQgemFsIGFsbGUgdmVyYW5kZXJpbmdlbiBhbm51bGVyZW4gZW4gZGUgc3BlbGwgY2hlY2tlciBzbHVpdGVuLiAgV2VldCB1IGhldCB6ZWtlcj8iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJPbmUgbW9tZW50Li4uIjogIkV2ZW4gd2FjaHRlbiA7LSkiLAorICAgICAgICAiU3BlbGwgY2hlY2sgY29tcGxldGUsIGRpZG4ndCBmaW5kIGFueSBtaXNwZWxsZWQgd29yZHMuICBDbG9zaW5nIG5vdy4uLiI6ICJTcGVsbCBjaGVja2luZyBpcyBrbGFhciwgZ2VlbiBmb3V0ZW4gZ2V2b25kZW4uICBzcGVsbCBjaGVja2luZyB3b3JkIGdlc2xvdGVuLi4uIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvcGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNkNzczYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvcGwuanMKQEAgLTAsMCArMSwxOCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW51bHVqIiwKKyAgICAiT0siOiAiT0siLAorICAgICJSZXBsYWNlIHdpdGgiOiAiWmFtaWXFhCBuYToiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBTUEVMTENIRUNLRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYjAzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsNDAgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiRGljdGlvbmFyeSI6ICJEaWNpb27DoXJpbyIsCisgICAgIkZpbmlzaGVkIGxpc3Qgb2YgbWlzcGVsbGVkIHdvcmRzIjogIkZpbmFsaXphZGEgbGlzdGEgZGUgcGFsYXZyYXMgZGVzY29uaGVjaWRhcyIsCisgICAgIkhUTUxBcmVhIFNwZWxsIENoZWNrZXIiOiAiRGljaW9uw6FyaW8gSFRNTEFyZWEiLAorICAgICJJIHdpbGwgb3BlbiBpdCBpbiBhIG5ldyBwYWdlLiI6ICJTZXLDoSBhYmVydG8gZW0gdW1hIG5vdmEgcMOhZ2luYSIsCisgICAgIklnbm9yZSI6ICJJZ25vcmFyIiwKKyAgICAiSWdub3JlIGFsbCI6ICJJZ25vcmFyIHRvZGFzIiwKKyAgICAiSW5mbyI6ICJJbmZvcm1hw6fDo28iLAorICAgICJMZWFybiI6ICJBcHJlbmRlciIsCisgICAgIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiI6ICJOZW5odW1hIHBhbGF2cmEgZGVzY29uaGVjaWRhIGZvaSBlbmNvbnRyYWRhIG5vIGRpY2lvbsOhcmlvIHNlbGVjaW9uYWRvIiwKKyAgICAiT0siOiAiT0siLAorICAgICJPcmlnaW5hbCB3b3JkIjogIlBhbGF2cmEgT3JpZ2luYWwiLAorICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIlBvciBmYXZvciwgY29uZmlybWUgc2UgZGVzZWphIGFicmlyIGVzdGUgbGluayIsCisgICAgIlBsZWFzZSB3YWl0LiAgQ2FsbGluZyBzcGVsbCBjaGVja2VyLiI6ICJQb3IgZmF2b3IsIGFndWFyZGUuIENoYW1hbmRvIGRpY2lvbsOhcmlvLiIsCisgICAgIlBsZWFzZSB3YWl0OiBjaGFuZ2luZyBkaWN0aW9uYXJ5IHRvIjogIlBvciBmYXZvciwgYWd1YXJkZTogbXVkYW5kbyBkaWNpb27DoXJpbyBwYXJhIiwKKyAgICAiUmUtY2hlY2siOiAiUmUtdmVyaWZpY2FyIiwKKyAgICAiUmVwbGFjZSI6ICJTdWJzdGl0dWlyIiwKKyAgICAiUmVwbGFjZSBhbGwiOiAiU3Vic3RpdHVpciB0dWRvIiwKKyAgICAiUmVwbGFjZSB3aXRoIjogIlN1YnN0aXR1aXIgY29tIiwKKyAgICAiUmV2ZXJ0IjogIlJldmVydGVyIiwKKyAgICAiU3BlbGwgQ2hlY2tlciI6ICJEaWNpb27DoXJpbyIsCisgICAgIlNwZWxsLWNoZWNrIjogIkRpY2lvbsOhcmlvIiwKKyAgICAiU3VnZ2VzdGlvbnMiOiAiU3VnZXN0w7VlcyIsCisgICAgIlRoaXMgd2lsbCBkcm9wIGNoYW5nZXMgYW5kIHF1aXQgc3BlbGwgY2hlY2tlci4gIFBsZWFzZSBjb25maXJtLiI6ICJJc3NvIGRlc2ZhcsOhIGFzIG11ZGFuw6dhcyBlIGZpbmFsaXphcsOhIG8gZGljaW9uw6FyaW8uIFBvciBmYXZvciwgY29uZmlybWUuIiwKKyAgICAicGxpeiB3ZWl0IDstKSI6ICJQb3IgZmF2b3IsIGFndWFyZGUuLi4iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJPbmUgbW9tZW50Li4uIjogIlVtIG1vbWVudG8uLi4iCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL3JvLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9yby5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjgwMmFhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9yby5qcwpAQCAtMCwwICsxLDM1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJvIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBbnVsZWF6xIMiLAorICAgICJEaWN0aW9uYXJ5IjogIkRpY8WjaW9uYXIiLAorICAgICJGaW5pc2hlZCBsaXN0IG9mIG1pc3BlbGxlZCB3b3JkcyI6ICJBbSB0ZXJtaW5hdCBsaXN0YSBkZSBjdXZpbnRlIGdyZcWfaXRlIiwKKyAgICAiSSB3aWxsIG9wZW4gaXQgaW4gYSBuZXcgcGFnZS4iOiAiTyB2b2kgZGVzY2hpZGUgw65udHItbyBhbHTEgyBmZXJlYXN0csSDLiIsCisgICAgIklnbm9yZSI6ICJJZ25vcsSDIiwKKyAgICAiSWdub3JlIGFsbCI6ICJJZ25vcsSDIHRvYXRlIiwKKyAgICAiTm8gbWlzcGVsbGVkIHdvcmRzIGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIGRpY3Rpb25hcnkuIjogIk51IGFtIGfEg3NpdCBuaWNpIHVuIGN1dsOibnQgZ3JlxZ9pdCBjdSBhY2VzdCBkaWPFo2lvbmFyLiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiT3JpZ2luYWwgd29yZCI6ICJDdXbDom50dWwgb3JpZ2luYWwiLAorICAgICJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIjogIlbEgyByb2cgY29uZmlybWHFo2kgY8SDIHZyZcWjaSBzxIMgZGVzY2hpZGXFo2kgYWNlc3QgbGluayIsCisgICAgIlBsZWFzZSB3YWl0LiAgQ2FsbGluZyBzcGVsbCBjaGVja2VyLiI6ICJWxIMgcm9nIGHFn3RlcHRhxaNpLiAgQXBlbGV6IHNwZWxsLWNoZWNrZXItdWwuIiwKKyAgICAiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iOiAiVsSDIHJvZyBhxZ90ZXB0YcWjaS4gIFNjaGltYiBkaWPFo2lvbmFydWwgY3UiLAorICAgICJSZS1jaGVjayI6ICJTY2FuZWF6xIMiLAorICAgICJSZXBsYWNlIjogIsOObmxvY3VpZcWfdGUiLAorICAgICJSZXBsYWNlIGFsbCI6ICLDjm5sb2N1aWXFn3RlIHRvYXRlIiwKKyAgICAiUmVwbGFjZSB3aXRoIjogIsOObmxvY3VpZcWfdGUgY3UiLAorICAgICJTcGVsbC1jaGVjayI6ICJEZXRlY3RlYXrEgyBncmXFn2VsaSIsCisgICAgIlN1Z2dlc3Rpb25zIjogIlN1Z2VzdGlpIiwKKyAgICAiVGhpcyB3aWxsIGRyb3AgY2hhbmdlcyBhbmQgcXVpdCBzcGVsbCBjaGVja2VyLiAgUGxlYXNlIGNvbmZpcm0uIjogIkRvcmnFo2kgc8SDIHJlbnVuxaNhxaNpIGxhIG1vZGlmaWPEg3JpIMWfaSBzxIMgw65uY2hpZCBzcGVsbC1jaGVja2VyLXVsPyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIk9uZSBtb21lbnQuLi4iOiAidmEgcm9nIGFzaHRlcHRhdHppIDstKSIsCisgICAgICAgICJTcGVsbCBjaGVjayBjb21wbGV0ZSwgZGlkbid0IGZpbmQgYW55IG1pc3BlbGxlZCB3b3Jkcy4gIENsb3Npbmcgbm93Li4uIjogIkFtIHRlcm1pbmF0LCBudSBhbSBkZXRlY3RhdCBuaWNpIG8gZ3JlxZ9lYWzEgy4gIEFjdW0gw65uY2hpZCBmZXJlYXN0cmEuLi4iCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9ydS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDBiZDFkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9ydS5qcwpAQCAtMCwwICsxLDE4IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJ1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLQntGC0LzQtdC90LAiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlJlcGxhY2Ugd2l0aCI6ICLQl9Cw0LzQtdC90LjRgtGMINGBIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogU1BFTExDSEVDS0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL3NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9zaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzcxYWE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9zaC5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogU1BFTExDSEVDS0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL3NpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9zaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDk1NDNhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy9zaS5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNpIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQcmVrbGnEjWkiLAorICAgICJPSyI6ICJWIHJlZHUiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBTUEVMTENIRUNLRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvc3IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL3NyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiY2Y2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL3NyLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IiwKKyAgICAiT0siOiAiT0siLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBTUEVMTENIRUNLRVIgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvc3YuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL3N2LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MTU1M2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL3N2LmpzCkBAIC0wLDAgKzEsMTggQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3YiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUmVwbGFjZSB3aXRoIjogIkVyc8OkdHQgbWVkOiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvdGguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZiZWJmYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvdGguanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0aCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwKKyAgICAiT0siOiAi4LiV4LiB4Lil4LiHIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogU1BFTExDSEVDS0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL3RyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy90ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTVjMTdjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy90ci5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLEsHB0YWwiLAorICAgICJPSyI6ICJUYW1hbSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy92bi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvdm4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY3NjE0YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL2xhbmcvdm4uanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ2biIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiSOG7p3kiLAorICAgICJPSyI6ICLEkOG7k25nIMO9IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogU1BFTExDSEVDS0VSIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9sYW5nL3poX2NuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy96aF9jbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDQzZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvbGFuZy96aF9jbi5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInpoX2NuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFNQRUxMQ0hFQ0tFUiBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvcmVhZG1lLXRlY2guaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL3JlYWRtZS10ZWNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI3ZDZiYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL3JlYWRtZS10ZWNoLmh0bWwKQEAgLTAsMCArMSwxMTQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMy4yLy9FTiI+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPHRpdGxlPkhUTUxBcmVhIFNwZWxsIENoZWNrZXI8L3RpdGxlPgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGgxPkhUTUxBcmVhIFNwZWxsIENoZWNrZXI8L2gxPgorCisgICAgPHA+VGhlIEhUTUxBcmVhIFNwZWxsIENoZWNrZXIgc3Vic3lzdGVtIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcKKyAgICAgIGZpbGVzOjwvcD4KKworICAgIDx1bD4KKworICAgICAgPGxpPnNwZWxsLWNoZWNrZXIuanMgJm1kYXNoOyB0aGUgc3BlbGwgY2hlY2tlciBwbHVnaW4gaW50ZXJmYWNlIGZvcgorICAgICAgICBIVE1MQXJlYTwvbGk+CisKKyAgICAgIDxsaT5zcGVsbC1jaGVja2VyLXVpLmh0bWwgJm1kYXNoOyB0aGUgSFRNTCBjb2RlIGZvciB0aGUgdXNlcgorICAgICAgICBpbnRlcmZhY2U8L2xpPgorCisgICAgICA8bGk+c3BlbGwtY2hlY2tlci11aS5qcyAmbWRhc2g7IGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHVzZXIKKyAgICAgICAgaW50ZXJmYWNlPC9saT4KKworICAgICAgPGxpPnNwZWxsLWNoZWNrZXItbG9naWMuY2dpICZtZGFzaDsgUGVybCBDR0kgc2NyaXB0IHRoYXQgY2hlY2tzIGEgdGV4dAorICAgICAgICBnaXZlbiB0aHJvdWdoIFBPU1QgZm9yIHNwZWxsaW5nIGVycm9yczwvbGk+CisKKyAgICAgIDxsaT5zcGVsbC1jaGVja2VyLXN0eWxlLmNzcyAmbWRhc2g7IHN0eWxlIGZvciBtaXNwZWxsZWQgd29yZHM8L2xpPgorCisgICAgICA8bGk+bGFuZy9lbi5qcyAmbWRhc2g7IG1haW4gbGFuZ3VhZ2UgZmlsZSAoRW5nbGlzaCkuPC9saT4KKworICAgIDwvdWw+CisKKyAgICA8aDI+UHJvY2VzcyBvdmVydmlldzwvaDI+CisKKyAgICA8cD4KKyAgICAgIFdoZW4gYW4gZW5kLXVzZXIgY2xpY2tzIHRoZSAic3BlbGwtY2hlY2siIGJ1dHRvbiBpbiB0aGUgSFRNTEFyZWEKKyAgICAgIGVkaXRvciwgYSBuZXcgd2luZG93IGlzIG9wZW5lZCB3aXRoIHRoZSBVUkwgb2YgInNwZWxsLWNoZWNrLXVpLmh0bWwiLgorICAgICAgVGhpcyB3aW5kb3cgaW5pdGlhbGl6ZXMgaXRzZWxmIHdpdGggdGhlIHRleHQgZm91bmQgaW4gdGhlIGVkaXRvciAodXNlcworICAgICAgPHR0PndpbmRvdy5vcGVuZXIuU3BlbGxDaGVja2VyLmVkaXRvcjwvdHQ+IGdsb2JhbCB2YXJpYWJsZSkgYW5kIGl0CisgICAgICBzdWJtaXRzIHRoZSB0ZXh0IHRvIHRoZSBzZXJ2ZXItc2lkZSBzY3JpcHQgInNwZWxsLWNoZWNrLWxvZ2ljLmNnaSIuCisgICAgICBUaGUgdGFyZ2V0IG9mIHRoZSBGT1JNIGlzIGFuIGlubGluZSBmcmFtZSB3aGljaCBpcyB1c2VkIGJvdGggdG8KKyAgICAgIGRpc3BsYXkgdGhlIHRleHQgYW5kIGNvcnJlY3RpbmcuCisgICAgPC9wPgorCisgICAgPHA+CisgICAgICBGdXJ0aGVyLCBzcGVsbC1jaGVjay1sb2dpYy5jZ2kgY2FsbHMgQXNwZWxsIGZvciBlYWNoIHBvcnRpb24gb2YgcGxhaW4KKyAgICAgIHRleHQgZm91bmQgaW4gdGhlIGdpdmVuIEhUTUwuICBJdCByZWJ1aWxkcyBhbiBIVE1MIGZpbGUgdGhhdCBjb250YWlucworICAgICAgY2xlYXIgbWFya3Mgb2Ygd2hpY2ggd29yZHMgYXJlIGluY29ycmVjdCwgYWxvbmcgd2l0aCBzdWdnZXN0aW9ucyBmb3IKKyAgICAgIGVhY2ggb2YgdGhlbS4gIFRoaXMgZmlsZSBpcyB0aGVuIGxvYWRlZCBpbiB0aGUgaW5saW5lIGZyYW1lLiAgVXBvbgorICAgICAgbG9hZGluZywgYSBKYXZhU2NyaXB0IGZ1bmN0aW9uIGZyb20gInNwZWxsLWNoZWNrLXVpLmpzIiBpcyBjYWxsZWQuCisgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0cmlldmUgYWxsIG1pc3BlbGxlZCB3b3JkcyBmcm9tIHRoZSBIVE1MIG9mIHRoZQorICAgICAgaWZyYW1lIGFuZCB3aWxsIHNldHVwIHRoZSB1c2VyIGludGVyZmFjZSBzbyB0aGF0IGl0IGFsbG93cyBjb3JyZWN0aW9uLgorICAgIDwvcD4KKworICAgIDxoMj5UaGUgc2VydmVyLXNpZGUgc2NyaXB0IChzcGVsbC1jaGVjay1sb2dpYy5jZ2kpPC9oMj4KKworICAgIDxwPgorICAgICAgPHN0cm9uZz5Vbmljb2RlIHNhZmV0eTwvc3Ryb25nPiAmbWRhc2g7IHRoZSBwcm9ncmFtIDxlbT5pczwvZW0+CisgICAgICBVbmljb2RlIHNhZmUuICBIVE1MIGVudGl0aWVzIGFyZSBleHBhbmRlZCBpbnRvIHRoZWlyIGNvcnJlc3BvbmRpbmcKKyAgICAgIFVuaWNvZGUgY2hhcmFjdGVycy4gIFRoZXNlIGNoYXJhY3RlcnMgd2lsbCBiZSBtYXRjaGVkIGFzIHBhcnQgb2YgdGhlCisgICAgICB3b3JkIHBhc3NlZCB0byBBc3BlbGwuICBBbGwgdGV4dHMgcGFzc2VkIHRvIEFzcGVsbCBhcmUgaW4gVW5pY29kZQorICAgICAgKHdoZW4gYXBwcm9wcmlhdGUpLiAgPHN0cmlrZT5Ib3dldmVyLCBBc3BlbGwgc2VlbXMgdG8gbm90IHN1cHBvcnQgVW5pY29kZQorICAgICAgeWV0ICg8YQorICAgICAgICBocmVmPSJodHRwOi8vbWFpbC5nbnUub3JnL2FyY2hpdmUvaHRtbC9hc3BlbGwtdXNlci8yMDAwLTExL21zZzAwMDA3Lmh0bWwiPnRocmVhZCBjb25jZXJuaW5nIEFzcGVsbCBhbmQgVW5pY29kZTwvYT4pLgorICAgICAgVGhpcyBtZWFuIHRoYXQgd29yZHMgY29udGFpbmluZyBVbmljb2RlCisgICAgICBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBpbiAwLi4yNTUgYXJlIGxpa2VseSB0byBiZSByZXBvcnRlZCBhcyAibWlzcGVsbGVkIiBieSBBc3BlbGwuPC9zdHJpa2U+CisgICAgPC9wPgorCisgICAgPHA+CisgICAgICA8c3Ryb25nIHN0eWxlPSJmb250LXZhcmlhbnQ6IHNtYWxsLWNhcHM7IGNvbG9yOgorICAgICAgcmVkOyI+VXBkYXRlOjwvc3Ryb25nPiB0aG91Z2ggSSd2ZSBuZXZlciBzZWVuIGl0IG1lbnRpb25lZAorICAgICAgYW55d2hlcmUsIGl0IGxvb2tzIHRoYXQgQXNwZWxsIDxlbT5kb2VzPC9lbT4sIGluIGZhY3QsIHNwZWFrCisgICAgICBVbmljb2RlLiAgT3IgZWxzZSwgbWF5YmUgPGNvZGU+VGV4dDo6QXNwZWxsPC9jb2RlPiBkb2VzCisgICAgICB0cmFuc3BhcmVudCBjb252ZXJzaW9uOyBhbnl3YXksIHRoaXMgbmV3IHZlcnNpb24gb2Ygb3VyCisgICAgICBTcGVsbENoZWNrZXIgcGx1Z2luIGlzLCBhcyB0ZXN0cyBzaG93IHNvIGZhciwgZnVsbHkKKyAgICAgIFVuaWNvZGUtc2FmZS4uLiB3ZWxsLCBwcm9iYWJseSB0aGUgPGVtPm9ubHk8L2VtPiBmcmVld2FyZQorICAgICAgV2ViLWJhc2VkIHNwZWxsLWNoZWNrZXIgd2hpY2ggaGFwcGVucyB0byBoYXZlIFVuaWNvZGUgc3VwcG9ydC4KKyAgICA8L3A+CisKKyAgICA8cD4KKyAgICAgIFRoZSBQZXJsIFVuaWNvZGUgbWFudWFsIChtYW4gcGVybHVuaWludHJvKSBzdGF0ZXM6CisgICAgPC9wPgorCisgICAgPGJsb2NrcXVvdGU+CisgICAgICA8ZW0+CisgICAgICAgIFN0YXJ0aW5nIGZyb20gUGVybCA1LjYuMCwgUGVybCBoYXMgaGFkIHRoZSBjYXBhY2l0eSB0byBoYW5kbGUgVW5pY29kZQorICAgICAgICBuYXRpdmVseS4gIFBlcmwgNS44LjAsIGhvd2V2ZXIsIGlzIHRoZSBmaXJzdCByZWNvbW1lbmRlZCByZWxlYXNlIGZvcgorICAgICAgICBzZXJpb3VzIFVuaWNvZGUgd29yay4gIFRoZSBtYWludGVuYW5jZSByZWxlYXNlIDUuNi4xIGZpeGVkIG1hbnkgb2YgdGhlCisgICAgICAgIHByb2JsZW1zIG9mIHRoZSBpbml0aWFsIFVuaWNvZGUgaW1wbGVtZW50YXRpb24sIGJ1dCBmb3IgZXhhbXBsZSByZWd1bGFyCisgICAgICAgIGV4cHJlc3Npb25zIHN0aWxsIGRvIG5vdCB3b3JrIHdpdGggVW5pY29kZSBpbiA1LjYuMS4KKyAgICAgIDwvZW0+CisgICAgPC9ibG9ja3F1b3RlPgorCisgICAgPHA+SW4gb3RoZXIgd29yZHMsIGRvIDxlbT5ub3Q8L2VtPiBhc3N1bWUgdGhhdCB0aGlzIHNjcmlwdCBpcworICAgICAgVW5pY29kZS1zYWZlIG9uIFBlcmwgaW50ZXJwcmV0ZXJzIG9sZGVyIHRoYW4gNS44LjAuPC9wPgorCisgICAgPHA+VGhlIGZvbGxvd2luZyBQZXJsIG1vZHVsZXMgYXJlIHJlcXVpcmVkOjwvcD4KKworICAgIDx1bD4KKyAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL3NlYXJjaD9xdWVyeT1UZXh0JTNBJTNBQXNwZWxsJm1vZGU9YWxsIiBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYsJ19ibGFuaycpO3JldHVybiBmYWxzZTsiPlRleHQ6OkFzcGVsbDwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvc2VhcmNoP3F1ZXJ5PVhNTCUzQSUzQURPTSZtb2RlPWFsbCIgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCdfYmxhbmsnKTtyZXR1cm4gZmFsc2U7Ij5YTUw6OkRPTTwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvc2VhcmNoP3F1ZXJ5PUNHSSZtb2RlPWFsbCIgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCdfYmxhbmsnKTtyZXR1cm4gZmFsc2U7Ij5DR0k8L2E+PC9saT4KKyAgICA8L3VsPgorCisgICAgPHA+T2YgdGhlc2UsIG9ubHkgVGV4dDo6QXNwZWxsIG1pZ2h0IG5lZWQgdG8gYmUgaW5zdGFsbGVkIG1hbnVhbGx5LiAgVGhlCisgICAgICBvdGhlcnMgYXJlIGxpa2VseSB0byBiZSBhdmFpbGFibGUgYnkgZGVmYXVsdCBpbiBtb3N0IFBlcmwgZGlzdHJpYnV0aW9ucy48L3A+CisKKyAgICA8aHIgLz4KKyAgICA8YWRkcmVzcz48YSBocmVmPSJodHRwOi8vZHluYXJjaC5jb20vbWlzaG9vLyI+TWloYWkgQmF6b248L2E+PC9hZGRyZXNzPgorPCEtLSBDcmVhdGVkOiBUaHUgSnVsIDE3IDEzOjIyOjI3IEVFU1QgMjAwMyAtLT4KKzwhLS0gaGhtdHMgc3RhcnQgLS0+IExhc3QgbW9kaWZpZWQ6IEZyaSBKYW4gMzAgMTk6MTQ6MTEgRUVUIDIwMDQgPCEtLSBoaG10cyBlbmQgLS0+Cis8IS0tIGRvYy1sYW5nOiBFbmdsaXNoIC0tPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9zcGVsbC1jaGVjay1sb2dpYy5jZ2kgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9zcGVsbC1jaGVjay1sb2dpYy5jZ2kKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGJmNDBmOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL3NwZWxsLWNoZWNrLWxvZ2ljLmNnaQpAQCAtMCwwICsxLDIxMCBAQAorIyEgL3Vzci9iaW4vcGVybCAtdworCisjIFNwZWxsIENoZWNrZXIgUGx1Z2luIGZvciBIVE1MQXJlYS0zLjAKKyMgU3BvbnNvcmVkIGJ5IHd3dy5hbWVyaWNhbmJpYmxlLm9yZworIyBJbXBsZW1lbnRhdGlvbiBieSBNaWhhaSBCYXpvbiwgaHR0cDovL2R5bmFyY2guY29tL21pc2hvby8KKyMKKyMgKGMpIGR5bmFyY2guY29tIDIwMDMuCisjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKyMgVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgorIworIyAkSWQ6c3BlbGwtY2hlY2stbG9naWMuY2dpIDIxIDIwMDUtMDItMTkgMDU6MjM6NTZaIGdvZ28gJAorCit1c2Ugc3RyaWN0OwordXNlIHV0Zjg7Cit1c2UgRW5jb2RlOwordXNlIFRleHQ6OkFzcGVsbDsKK3VzZSBYTUw6OkRPTTsKK3VzZSBDR0k7CisKK215ICRUSU1FUl9zdGFydCA9IHVuZGVmOworZXZhbCB7CisgICAgdXNlIFRpbWU6OkhpUmVzIHF3KCBnZXR0aW1lb2ZkYXkgdHZfaW50ZXJ2YWwgKTsKKyAgICAkVElNRVJfc3RhcnQgPSBbZ2V0dGltZW9mZGF5KCldOworfTsKKyMgdXNlIFBPU0lYIHF3KCBsb2NhbGVfaCApOworCitiaW5tb2RlIFNURElOLCAnOnV0ZjgnOworYmlubW9kZSBTVERPVVQsICc6dXRmOCc7CisKK215ICRkZWJ1ZyA9IDA7CisKK215ICRzcGVsbGVyID0gbmV3IFRleHQ6OkFzcGVsbDsKK215ICRjZ2kgPSBuZXcgQ0dJOworCitteSAkdG90YWxfd29yZHMgPSAwOworbXkgJHRvdGFsX21pc3BlbGxlZCA9IDA7CitteSAkdG90YWxfc3VnZ2VzdGlvbnMgPSAwOworbXkgJHRvdGFsX3dvcmRzX3N1Z2dlc3RlZCA9IDA7CisKKyMgRklYTUU6IHJlcG9ydCBhIG5pY2UgZXJyb3IuLi4KK2RpZSAiQ2FuJ3QgY3JlYXRlIHNwZWxsZXIhIiB1bmxlc3MgJHNwZWxsZXI7CisKK215ICRkaWN0ID0gJGNnaS0+cGFyYW0oJ2RpY3Rpb25hcnknKSB8fCAkY2dpLT5jb29raWUoJ2RpY3Rpb25hcnknKSB8fCAnZW4nOworCisjIGFkZCBjb25maWd1cmFibGUgb3B0aW9uIGZvciB0aGlzCiskc3BlbGxlci0+c2V0X29wdGlvbignbGFuZycsICRkaWN0KTsKKyRzcGVsbGVyLT5zZXRfb3B0aW9uKCdlbmNvZGluZycsICdVVEYtOCcpOworI3NldGxvY2FsZShMQ19DVFlQRSwgJGRpY3QpOworCisjIHVsdHJhLCBmYXN0LCBub3JtYWwsIGJhZC1zcGVsbGVycworIyBiYWQtc3BlbGxlcnMgc2VlbXMgdG8gY2F1c2Ugc2VnbWVudGF0aW9uIGZhdWx0Ciskc3BlbGxlci0+c2V0X29wdGlvbignc3VnLW1vZGUnLCAnbm9ybWFsJyk7CisKK215ICVzdWdnZXN0ZWRfd29yZHMgPSAoKTsKK2tleXMgJXN1Z2dlc3RlZF93b3JkcyA9IDEyODsKKworbXkgJGZpbGVfY29udGVudCA9IGRlY29kZSgnVVRGLTgnLCAkY2dpLT5wYXJhbSgnY29udGVudCcpKTsKKyRmaWxlX2NvbnRlbnQgPSBwYXJzZV93aXRoX2RvbSgkZmlsZV9jb250ZW50KTsKKworbXkgJGNrX2RpY3Rpb25hcnkgPSAkY2dpLT5jb29raWUoLW5hbWUgICAgID0+ICdkaWN0aW9uYXJ5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC12YWx1ZSAgICA9PiAkZGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1leHBpcmVzICA9PiAnKzMwZCcpOworCitwcmludCAkY2dpLT5oZWFkZXIoLXR5cGUgICAgPT4gJ3RleHQvaHRtbDsgY2hhcnNldDogdXRmLTgnLAorICAgICAgICAgICAgICAgICAgIC1jb29raWUgID0+ICRja19kaWN0aW9uYXJ5KTsKKworbXkgJGpzX3N1Z2dlc3RlZF93b3JkcyA9IG1ha2VfanNfaGFzaChcJXN1Z2dlc3RlZF93b3Jkcyk7CitteSAkanNfc3BlbGxjaGVja19pbmZvID0gbWFrZV9qc19oYXNoX2Zyb21fYXJyYXkKKyAgKFsKKyAgICBbICdUb3RhbCB3b3JkcycgICAgICAgICAgICwgJHRvdGFsX3dvcmRzIF0sCisgICAgWyAnTWlzcGVsbGVkIHdvcmRzJyAgICAgICAsICR0b3RhbF9taXNwZWxsZWQgLiAnIGluIGRpY3Rpb25hcnkgXCInLiRkaWN0LidcIicgXSwKKyAgICBbICdUb3RhbCBzdWdnZXN0aW9ucycgICAgICwgJHRvdGFsX3N1Z2dlc3Rpb25zIF0sCisgICAgWyAnVG90YWwgd29yZHMgc3VnZ2VzdGVkJyAsICR0b3RhbF93b3Jkc19zdWdnZXN0ZWQgXSwKKyAgICBbICdTcGVsbC1jaGVja2VkIGluJyAgICAgICwgZGVmaW5lZCAkVElNRVJfc3RhcnQgPyAodHZfaW50ZXJ2YWwoJFRJTUVSX3N0YXJ0KSAuICcgc2Vjb25kcycpIDogJ24vYScgXQorICAgXSk7CisKK3ByaW50IHFxXjwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9ImFsbCIgaHJlZj0ic3BlbGwtY2hlY2stc3R5bGUuY3NzIiAvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICB2YXIgc3VnZ2VzdGVkX3dvcmRzID0geyAkanNfc3VnZ2VzdGVkX3dvcmRzIH07CisgIHZhciBzcGVsbGNoZWNrX2luZm8gPSB7ICRqc19zcGVsbGNoZWNrX2luZm8gfTsgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9IndpbmRvdy5wYXJlbnQuZmluaXNoZWRTcGVsbENoZWNraW5nKCk7Ij5eOworCitwcmludCAkZmlsZV9jb250ZW50OworaWYgKCRjZ2ktPnBhcmFtKCdpbml0JykgZXEgJzEnKSB7CisgICAgbXkgQGRpY3RzID0gJHNwZWxsZXItPmRpY3Rpb25hcnlfaW5mbygpOworICAgIG15ICRkaWN0aW9uYXJpZXMgPSAnJzsKKyAgICBmb3JlYWNoIG15ICRpIChAZGljdHMpIHsKKyAgICAgICAgbmV4dCBpZiAkaS0+e2phcmdvbn07CisgICAgICAgIG15ICRuYW1lID0gJGktPntuYW1lfTsKKyAgICAgICAgaWYgKCRuYW1lIGVxICRkaWN0KSB7CisgICAgICAgICAgICAkbmFtZSA9ICdAJy4kbmFtZTsKKyAgICAgICAgfQorICAgICAgICAkZGljdGlvbmFyaWVzIC49ICcsJyAuICRuYW1lOworICAgIH0KKyAgICAkZGljdGlvbmFyaWVzID1+IHMvXiwvLzsKKyAgICBwcmludCBxcV48ZGl2IGlkPSJIQS1zcGVsbGNoZWNrLWRpY3Rpb25hcmllcyI+JGRpY3Rpb25hcmllczwvZGl2Pl47Cit9CisKK3ByaW50ICc8L2JvZHk+PC9odG1sPic7CisKKyMgUGVybCBpcyBiZWF1dGlmdWwuCitzdWIgc3BlbGxjaGVjayB7CisgICAgbXkgJG5vZGUgPSBzaGlmdDsKKyAgICBteSAkZG9jID0gJG5vZGUtPmdldE93bmVyRG9jdW1lbnQ7CisgICAgbXkgJGNoZWNrID0gc3ViIHsgICAgICAgICAgICAgICAgICMgY2FsbGVkIGZvciBlYWNoIHdvcmQgaW4gdGhlIHRleHQKKyAgICAgICAgIyBpbnB1dCBpcyBpbiBVVEYtOAorICAgICAgICBteSAkd29yZCA9IHNoaWZ0OworICAgICAgICBteSAkYWxyZWFkeV9zdWdnZXN0ZWQgPSBkZWZpbmVkICRzdWdnZXN0ZWRfd29yZHN7JHdvcmR9OworICAgICAgICArKyR0b3RhbF93b3JkczsKKyAgICAgICAgaWYgKCEkYWxyZWFkeV9zdWdnZXN0ZWQgJiYgJHNwZWxsZXItPmNoZWNrKCR3b3JkKSkgeworICAgICAgICAgICAgcmV0dXJuIHVuZGVmOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIyB3ZSBzaG91bGQgaGF2ZSBzdWdnZXN0aW9uczsgZ2l2ZSB0aGVtIGJhY2sgdG8gYnJvd3NlciBpbiBVVEYtOAorICAgICAgICAgICAgKyskdG90YWxfbWlzcGVsbGVkOworICAgICAgICAgICAgaWYgKCEkYWxyZWFkeV9zdWdnZXN0ZWQpIHsKKyAgICAgICAgICAgICAgICAjIGNvbXB1dGUgc3VnZ2VzdGlvbnMgZm9yIHRoaXMgd29yZAorICAgICAgICAgICAgICAgIG15IEBzdWdnZXN0aW9ucyA9ICRzcGVsbGVyLT5zdWdnZXN0KCR3b3JkKTsKKyAgICAgICAgICAgICAgICBteSAkc3VnZ2VzdGlvbnMgPSBkZWNvZGUoJHNwZWxsZXItPmdldF9vcHRpb24oJ2VuY29kaW5nJyksIGpvaW4oJywnLCBAc3VnZ2VzdGlvbnMpKTsKKyAgICAgICAgICAgICAgICAkc3VnZ2VzdGVkX3dvcmRzeyR3b3JkfSA9ICRzdWdnZXN0aW9uczsKKyAgICAgICAgICAgICAgICArKyR0b3RhbF9zdWdnZXN0aW9uczsKKyAgICAgICAgICAgICAgICAkdG90YWxfd29yZHNfc3VnZ2VzdGVkICs9IHNjYWxhciBAc3VnZ2VzdGlvbnM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAjIEhBLXNwZWxsY2hlY2stZXJyb3IKKyAgICAgICAgICAgIG15ICRlcnIgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CisgICAgICAgICAgICAkZXJyLT5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ0hBLXNwZWxsY2hlY2stZXJyb3InKTsKKyAgICAgICAgICAgIG15ICR0bXAgPSAkZG9jLT5jcmVhdGVUZXh0Tm9kZTsKKyAgICAgICAgICAgICR0bXAtPnNldE5vZGVWYWx1ZSgkd29yZCk7CisgICAgICAgICAgICAkZXJyLT5hcHBlbmRDaGlsZCgkdG1wKTsKKyAgICAgICAgICAgIHJldHVybiAkZXJyOworICAgICAgICB9CisgICAgfTsKKyAgICB3aGlsZSAoJG5vZGUtPmdldE5vZGVWYWx1ZSA9fiAvKFtccHtJc1dvcmR9J10rKS8pIHsKKyAgICAgICAgbXkgJHdvcmQgPSAkMTsKKyAgICAgICAgbXkgJGJlZm9yZSA9ICRgOworICAgICAgICBteSAkYWZ0ZXIgPSAkJzsKKyAgICAgICAgbXkgJGRmID0gJiRjaGVjaygkd29yZCk7CisgICAgICAgIGlmICghJGRmKSB7CisgICAgICAgICAgICAkYmVmb3JlIC49ICR3b3JkOworICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIG15ICRwYXJlbnQgPSAkbm9kZS0+Z2V0UGFyZW50Tm9kZTsKKyAgICAgICAgICAgIG15ICRuMSA9ICRkb2MtPmNyZWF0ZVRleHROb2RlOworICAgICAgICAgICAgJG4xLT5zZXROb2RlVmFsdWUoJGJlZm9yZSk7CisgICAgICAgICAgICAkcGFyZW50LT5pbnNlcnRCZWZvcmUoJG4xLCAkbm9kZSk7CisgICAgICAgICAgICAkcGFyZW50LT5pbnNlcnRCZWZvcmUoJGRmLCAkbm9kZSkgaWYgJGRmOworICAgICAgICAgICAgJG5vZGUtPnNldE5vZGVWYWx1ZSgkYWZ0ZXIpOworICAgICAgICB9CisgICAgfQorfTsKKworc3ViIGNoZWNrX2lubmVyX3RleHQgeworICAgIG15ICRub2RlID0gc2hpZnQ7CisgICAgbXkgJHRleHQgPSAnJzsKKyAgICBmb3IgKG15ICRpID0gJG5vZGUtPmdldEZpcnN0Q2hpbGQ7IGRlZmluZWQgJGk7ICRpID0gJGktPmdldE5leHRTaWJsaW5nKSB7CisgICAgICAgIGlmICgkaS0+Z2V0Tm9kZVR5cGUgPT0gVEVYVF9OT0RFKSB7CisgICAgICAgICAgICBzcGVsbGNoZWNrKCRpKTsKKyAgICAgICAgfQorICAgIH0KK307CisKK3N1YiBwYXJzZV93aXRoX2RvbSB7CisgICAgbXkgKCR0ZXh0KSA9IEBfOworICAgICR0ZXh0ID0gJzxzcGVsbGNoZWNrZXI+Jy4kdGV4dC4nPC9zcGVsbGNoZWNrZXI+JzsKKworICAgIG15ICRwYXJzZXIgPSBuZXcgWE1MOjpET006OlBhcnNlcjsKKyAgICBpZiAoJGRlYnVnKSB7CisgICAgICAgIG9wZW4oRk9PLCAnPjp1dGY4JywgJy90bXAvZm9vJyk7CisgICAgICAgIHByaW50IEZPTyAkdGV4dDsKKyAgICAgICAgY2xvc2UgRk9POworICAgIH0KKyAgICBteSAkZG9jID0gJHBhcnNlci0+cGFyc2UoJHRleHQpOworICAgIG15ICRub2RlcyA9ICRkb2MtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7CisgICAgbXkgJG4gPSAkbm9kZXMtPmdldExlbmd0aDsKKworICAgIGZvciAobXkgJGkgPSAwOyAkaSA8ICRuOyArKyRpKSB7CisgICAgICAgIG15ICRub2RlID0gJG5vZGVzLT5pdGVtKCRpKTsKKyAgICAgICAgaWYgKCRub2RlLT5nZXROb2RlVHlwZSA9PSBFTEVNRU5UX05PREUpIHsKKyAgICAgICAgICAgIGNoZWNrX2lubmVyX3RleHQoJG5vZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgbXkgJHJldCA9ICRkb2MtPnRvU3RyaW5nOworICAgICRyZXQgPX4gc3s8c3BlbGxjaGVja2VyPiguKik8L3NwZWxsY2hlY2tlcj59eyQxfXNnOworICAgIHJldHVybiAkcmV0OworfTsKKworc3ViIG1ha2VfanNfaGFzaCB7CisgICAgbXkgKCRoYXNoKSA9IEBfOworICAgIG15ICRqc19oYXNoID0gJyc7CisgICAgd2hpbGUgKG15ICgka2V5LCAkdmFsKSA9IGVhY2ggJSRoYXNoKSB7CisgICAgICAgICRqc19oYXNoIC49ICcsJyBpZiAkanNfaGFzaDsKKyAgICAgICAgJGpzX2hhc2ggLj0gJyInLiRrZXkuJyI6IicuJHZhbC4nIic7CisgICAgfQorICAgIHJldHVybiAkanNfaGFzaDsKK307CisKK3N1YiBtYWtlX2pzX2hhc2hfZnJvbV9hcnJheSB7CisgICAgbXkgKCRhcnJheSkgPSBAXzsKKyAgICBteSAkanNfaGFzaCA9ICcnOworICAgIGZvcmVhY2ggbXkgJGkgKEAkYXJyYXkpIHsKKyAgICAgICAgJGpzX2hhc2ggLj0gJywnIGlmICRqc19oYXNoOworICAgICAgICAkanNfaGFzaCAuPSAnIicuJGktPlswXS4nIjoiJy4kaS0+WzFdLiciJzsKKyAgICB9CisgICAgcmV0dXJuICRqc19oYXNoOworfTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL3NwZWxsLWNoZWNrLWxvZ2ljLnBocCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL3NwZWxsLWNoZWNrLWxvZ2ljLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWU1ZTYwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvc3BlbGwtY2hlY2stbG9naWMucGhwCkBAIC0wLDAgKzEsMTcxIEBACis8P3BocAorICAkdGV4dCA9IHN0cmlwc2xhc2hlcygkX1BPU1RbJ2NvbnRlbnQnXSk7CisKKyAgLy8gQ29udmVydCBVVEYtOCBtdWx0aS1ieXRlcyBpbnRvIGRlY2ltYWwgY2hhcmFjdGVyIGVudGl0aWVzLiAgVGhpcyBpcyBiZWNhdXNlCisgIC8vIGFzcGVsbCBpc24ndCBmdWxseSB1dGY4LWF3YXJlIC0gdGlja2V0OjEyMCByYWlzZXMgdGhlIHBvc3NpYmlsaXR5IAorICAvLyB0aGF0IHRoaXMgaXMgbm90IHJlcXVpcmVkIChhbnkgbW9yZSkgYW5kIHNvIHlvdSBjYW4gdHVybiBpdCBvZmYKKyAgLy8gd2l0aCBlZGl0b3IuY29uZmlnLlNwZWxsQ2hlY2tlci51dGY4X3RvX2VudGl0aWVzID0gZmFsc2UgCisgIGlmKCFpc3NldCgkX1JFUVVFU1RbJ3V0ZjhfdG9fZW50aXRpcyddKSB8fCAkX1JFUVVFU1RbJ3V0ZjhfdG9fZW50aXRpZXMnXSkKKyAgeworICAgICR0ZXh0ID0gcHJlZ19yZXBsYWNlKCcvKFtceEMwLVx4REZdW1x4ODAtXHhCRl0pL2UnLCAiJyYjJyAuIHV0Zjhfb3JkKCdcJDEnKSAuICc7JyIsICR0ZXh0KTsKKyAgICAkdGV4dCA9IHByZWdfcmVwbGFjZSgnLyhbXHhFMC1ceEVGXVtceDgwLVx4QkZdW1x4ODAtXHhCRl0pL2UnLCAgICAgICAgICAgICAiJyYjJyAuIHV0Zjhfb3JkKCdcJDEnKSAuICc7JyIsICAkdGV4dCk7CisgICAgJHRleHQgPSBwcmVnX3JlcGxhY2UoJy8oW1x4RjAtXHhGN11bXHg4MC1ceEJGXVtceDgwLVx4QkZdW1x4ODAtXHhCRl0pL2UnLCAiJyYjJyAuIHV0Zjhfb3JkKCdcJDEnKSAuICc7JyIsICAgJHRleHQpOworICB9CisgIAorICBmdW5jdGlvbiB1dGY4X29yZCgkY2hyKQorICB7CisgICAgc3dpdGNoKHN0cmxlbigkY2hyKSkKKyAgICB7CisgICAgICBjYXNlIDEgOgorICAgICAgICByZXR1cm4gb3JkKCRjaHIpOworCisgICAgICBjYXNlIDIgOgorICAgICAgICAkb3JkID0gb3JkKCRjaHJ7MX0pICYgNjM7CisgICAgICAgICRvcmQgPSAkb3JkIHwgKChvcmQoJGNocnswfSkgJiAzMSkgPDwgNik7CisgICAgICAgIHJldHVybiAkb3JkOworCisgICAgICBjYXNlIDMgOgorICAgICAgICAkb3JkID0gb3JkKCRjaHJ7Mn0pICYgNjM7CisgICAgICAgICRvcmQgPSAkb3JkIHwgKChvcmQoJGNocnsxfSkgJiA2MykgPDwgNik7CisgICAgICAgICRvcmQgPSAkb3JkIHwgKChvcmQoJGNocnswfSkgJiAxNSkgPDwgMTIpOworICAgICAgICByZXR1cm4gJG9yZDsKKworICAgICAgY2FzZSA0IDoKKyAgICAgICAgJG9yZCA9IG9yZCgkY2hyezN9KSAmIDYzOworICAgICAgICAkb3JkID0gJG9yZCB8ICgob3JkKCRjaHJ7Mn0pICYgNjMpIDw8IDYpOworICAgICAgICAkb3JkID0gJG9yZCB8ICgob3JkKCRjaHJ7MX0pICYgNjMpIDw8IDEyKTsKKyAgICAgICAgJG9yZCA9ICRvcmQgfCAoKG9yZCgkY2hyezB9KSAmIDcpICA8PCAxOCk7CisgICAgICAgIHJldHVybiAkb3JkOworCisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgdHJpZ2dlcl9lcnJvcignQ2hhcmFjdGVyIG5vdCB1dGYtOCcsIEVfVVNFUl9FUlJPUik7CisgICAgfQorICB9CisKKyAgcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdhc3BlbGxfc2V0dXAucGhwJyk7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaGVhZGVyKCdDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD11dGYtOCcpOworICBlY2hvICc8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJhbGwiIGhyZWY9InNwZWxsLWNoZWNrLXN0eWxlLmNzcyIgLz4nOworCisvLyBMZXRzIGRlZmluZSBzb21lIHZhbHVlcyBvdXRzaWRlIHRoZSBjb25kaXRpb24gYmVsb3csIGluIGNhc2Ugd2UgaGF2ZSBhbiBlbXB0eSAKKy8vIGRvY3VtZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorJHRleHRhcnJheSA9IGFycmF5KCk7CiskdmFybGluZXMgPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPnZhciBzdWdnZXN0ZWRfd29yZHMgPSB7ICc7CiskaW5mb2xpbmVzID0gJ3ZhciBzcGVsbGNoZWNrX2luZm8gPSB7JzsKKyRjb3VudGVyID0gMDsKKyRzdWdnZXN0X2NvdW50ID0gMDsKKworaWYgKHRyaW0oJHRleHQpICE9ICIiKQoreworICAgIGlmICgkZmQgPSBmb3BlbigkdGVtcHRleHQsICd3JykpCisgICAgeworICAgICAgICAkdGV4dGFycmF5ID0gZXhwbG9kZSgiXG4iLCAkdGV4dCk7CisgICAgICAgIGZ3cml0ZSAoJGZkLCAiIVxuIik7CisgICAgICAgIGZvcmVhY2ggKCR0ZXh0YXJyYXkgYXMgJGtleT0+JHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBhZGRpbmcgdGhlIGNhcmF0IHRvIGVhY2ggbGluZSBwcmV2ZW50cyB0aGUgdXNlIG9mIGFzcGVsbCBjb21tYW5kcyB3aXRoaW4gdGhlIHRleHQuLi4KKyAgICAgICAgICAgIGZ3cml0ZSgkZmQsICJeJHZhbHVlXG4iKTsKKyAgICAgICAgfQorICAgICAgICBmY2xvc2UoJGZkKTsKKyAgICAgICAgY2htb2QoJHRlbXB0ZXh0LCAwNzc3KTsKKyAgICAgICAgLy8gbmV4dCBydW4gYXNwZWxsCisgICAgICAgICRyZXR1cm4gPSBzaGVsbF9leGVjKCRhc3BlbGxjb21tYW5kIC4gJyAyPiYxJyk7CisgICAgICAgIC8vIGVjaG8gJHJldHVybjsKKyAgICAgICAgdW5saW5rKCR0ZW1wdGV4dCk7CisgICAgICAgICRyZXR1cm5hcnJheSA9IGV4cGxvZGUoIlxuIiwgJHJldHVybik7CisgICAgICAgICRyZXR1cm5saW5lcyA9IGNvdW50KCRyZXR1cm5hcnJheSk7CisvL3ByaW50X3IoaHRtbGVudGl0aWVzKCRyZXR1cm4pKTsKKyAgICAgICAgJHRleHRsaW5lcyA9IGNvdW50KCR0ZXh0YXJyYXkpOworCisgICAgICAgICRsaW5laW5kZXggPSAtMTsKKyAgICAgICAgJHBvc2NvcnJlY3QgPSAwOworICAgICAgICBmb3JlYWNoICgkcmV0dXJuYXJyYXkgYXMgJGtleT0+JHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIGNvcnJlY3Rpb24gaGVyZSwgcHJvY2Vzc2VzIGl0LCBlbHNlIG1vdmUgdGhlICR0ZXh0YXJyYXkgcG9pbnRlciB0byB0aGUgbmV4dCBsaW5lCisgICAgICAgICAgICBpZiAoc3Vic3RyKCR2YWx1ZSwgMCwgMSkgPT0gJyYnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgJGNvdW50ZXI9JGNvdW50ZXIrMTsKKyAgICAgICAgICAgICAgICAkY29ycmVjdGlvbiA9IGV4cGxvZGUoJyAnLCAkdmFsdWUpOworICAgICAgICAgICAgICAgICR3b3JkID0gJGNvcnJlY3Rpb25bMV07CisgICAgICAgICAgICAgICAgJHN1Z2dlc3RfY291bnQgKz0gJGNvcnJlY3Rpb25bMl07CisgICAgICAgICAgICAgICAgJGFic3Bvc2l0aW9uID0gc3Vic3RyKCRjb3JyZWN0aW9uWzNdLCAwLCAtMSkgLSAxOworICAgICAgICAgICAgICAgICRwb3NpdGlvbiA9ICRhYnNwb3NpdGlvbiArICRwb3Njb3JyZWN0OworICAgICAgICAgICAgICAgICRuaWNlcG9zaXRpb24gPSAkbGluZWluZGV4LicsJy4kYWJzcG9zaXRpb247CisgICAgICAgICAgICAgICAgJHN1Z2dzdGFydCA9IHN0cnBvcygkdmFsdWUsICc6JykgKyAyOworICAgICAgICAgICAgICAgICRzdWdnZXN0aW9ucyA9IHN1YnN0cigkdmFsdWUsICRzdWdnc3RhcnQpOworICAgICAgICAgICAgICAgICRzdWdnZXN0aW9uYXJyYXkgPSBleHBsb2RlKCcsICcsICRzdWdnZXN0aW9ucyk7CisKKyAgICAgICAgICAgICAgICAkYmVmb3Jld29yZCA9IHN1YnN0cigkdGV4dGFycmF5WyRsaW5laW5kZXhdLCAwLCAkcG9zaXRpb24pOworICAgICAgICAgICAgICAgICRhZnRlcndvcmQgPSBzdWJzdHIoJHRleHRhcnJheVskbGluZWluZGV4XSwgJHBvc2l0aW9uICsgc3RybGVuKCR3b3JkKSk7CisgICAgICAgICAgICAgICAgJHRleHRhcnJheVskbGluZWluZGV4XSA9ICRiZWZvcmV3b3JkLic8c3BhbiBjbGFzcz0iSEEtc3BlbGxjaGVjay1lcnJvciI+Jy4kd29yZC4nPC9zcGFuPicuJGFmdGVyd29yZDsKKworICAgICAgICAgICAgICRzdWdnZXN0aW9uX2xpc3QgPSAnJzsKKyAgICAgICAgICAgICAgICBmb3JlYWNoICgkc3VnZ2VzdGlvbmFycmF5IGFzICRrZXk9PiR2YWx1ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICRzdWdnZXN0aW9uX2xpc3QgLj0gJHZhbHVlLicsJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgJHN1Z2dlc3Rpb25fbGlzdCA9IHN1YnN0cigkc3VnZ2VzdGlvbl9saXN0LCAwLCBzdHJsZW4oJHN1Z2dlc3Rpb25fbGlzdCkgLSAxKTsKKyAgICAgICAgICAgICAgICAkdmFybGluZXMgLj0gJyInLiR3b3JkLiciOiInLiRzdWdnZXN0aW9uX2xpc3QuJyIsJzsKKworICAgICAgICAgICAgICAgICRwb3Njb3JyZWN0ID0gJHBvc2NvcnJlY3QgKyA0MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2VpZiAoc3Vic3RyKCR2YWx1ZSwgMCwgMSkgPT0gJyMnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICRjb3JyZWN0aW9uID0gZXhwbG9kZSgnICcsICR2YWx1ZSk7CisgICAgICAgICAgICAgICAgJHdvcmQgPSAkY29ycmVjdGlvblsxXTsKKyAgICAgICAgICAgICAgICAkYWJzcG9zaXRpb24gPSAkY29ycmVjdGlvblsyXSAtIDE7CisgICAgICAgICAgICAgICAgJHBvc2l0aW9uID0gJGFic3Bvc2l0aW9uICsgJHBvc2NvcnJlY3Q7CisgICAgICAgICAgICAgICAgJG5pY2Vwb3NpdGlvbiA9ICRsaW5laW5kZXguJywnLiRhYnNwb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAkYmVmb3Jld29yZCA9IHN1YnN0cigkdGV4dGFycmF5WyRsaW5laW5kZXhdLCAwLCAkcG9zaXRpb24pOworICAgICAgICAgICAgICAgICRhZnRlcndvcmQgPSBzdWJzdHIoJHRleHRhcnJheVskbGluZWluZGV4XSwgJHBvc2l0aW9uICsgc3RybGVuKCR3b3JkKSk7CisgICAgICAgICAgICAgICAgJHRleHRhcnJheVskbGluZWluZGV4XSA9ICRiZWZvcmV3b3JkLiR3b3JkLiRhZnRlcndvcmQ7CisgICAgICAgICAgICAgICAgJHRleHRhcnJheVskbGluZWluZGV4XSA9ICRiZWZvcmV3b3JkLic8c3BhbiBjbGFzcz0iSEEtc3BlbGxjaGVjay1lcnJvciI+Jy4kd29yZC4nPC9zcGFuPjxzcGFuIGNsYXNzPSJIQS1zcGVsbGNoZWNrLXN1Z2dlc3Rpb25zIj4nLiR3b3JkLic8L3NwYW4+Jy4kYWZ0ZXJ3b3JkOworLy8gICAgICAgICAgICAgICAgJHBvc2NvcnJlY3QgPSAkcG9zY29ycmVjdDsKKyAgICAgICAgICAgICAgICAkcG9zY29ycmVjdCA9ICRwb3Njb3JyZWN0ICsgODggKyBzdHJsZW4oJHdvcmQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vcHJpbnQgIkRvbmUgd2l0aCBsaW5lICRsaW5laW5kZXgsIG5leHQgbGluZS4uLjxicj48YnI+IjsKKyAgICAgICAgICAgICAgICAkcG9zY29ycmVjdCA9IDA7CisgICAgICAgICAgICAgICAgJGxpbmVpbmRleCA9ICRsaW5laW5kZXggKyAxOworICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICB9CisgICAgIGVsc2UKKyAgICAgeworICAgICAgIC8vIFRoaXMgb25lIGlzbnQgdXNlZCBmb3IgYW55dGhpbmcgYXQgdGhlIG1vbWVudCEKKyAgICAgICAkcmV0dXJuID0gJ2ZhaWxlZCB0byBvcGVuISc7CisgICAgIH0KK30gCitlbHNlIAoreyAKKyAgJHJldHVybmxpbmVzPTA7IAorfQorJGluZm9saW5lcyAuPSAnIkxhbmd1YWdlIFVzZWQiOiInLiRsYW5nLiciLCc7CiskaW5mb2xpbmVzIC49ICciTWlzcGVsbGVkIHdvcmRzIjoiJy4kY291bnRlci4nIiwnOworJGluZm9saW5lcyAuPSAnIlRvdGFsIHdvcmRzIHN1Z2dlc3RlZCI6IicuJHN1Z2dlc3RfY291bnQuJyIsJzsKKyRpbmZvbGluZXMgLj0gJyJUb3RhbCBMaW5lcyBDaGVja2VkIjoiJy4kcmV0dXJubGluZXMuJyInOworJGluZm9saW5lcyAuPSAnfTsnOworJHZhcmxpbmVzID0gc3Vic3RyKCR2YXJsaW5lcywgMCwgc3RybGVuKCR2YXJsaW5lcykgLSAxKTsKK2VjaG8gJHZhcmxpbmVzLid9OycuJGluZm9saW5lcy4nPC9zY3JpcHQ+JzsKKworZWNobyAnPC9oZWFkPgorPGJvZHkgb25sb2FkPSJ3aW5kb3cucGFyZW50LmZpbmlzaGVkU3BlbGxDaGVja2luZygpOyI+JzsKKworZm9yZWFjaCAoJHRleHRhcnJheSBhcyAka2V5PT4kdmFsdWUpCit7CisgIGVjaG8gJHZhbHVlOworfQorCiskZGljdGlvbmFyaWVzID0gc3RyX3JlcGxhY2UoY2hyKDEwKSwiLCIsIHNoZWxsX2V4ZWMoJGFzcGVsbGRpY3Rpb25hcmllcykpOworaWYoZXJlZygiLCQiLCRkaWN0aW9uYXJpZXMpKQorICAkZGljdGlvbmFyaWVzID0gZXJlZ19yZXBsYWNlKCIsJCIsIiIsJGRpY3Rpb25hcmllcyk7CitlY2hvICc8ZGl2IGlkPSJIQS1zcGVsbGNoZWNrLWRpY3Rpb25hcmllcyI+Jy4kZGljdGlvbmFyaWVzLic8L2Rpdj4nOworCitlY2hvICc8L2JvZHk+PC9odG1sPic7Cis/PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL3NwZWxsLWNoZWNrLXNhdmVkaWN0cy5waHAgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9zcGVsbC1jaGVjay1zYXZlZGljdHMucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMmQyODEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9zcGVsbC1jaGVjay1zYXZlZGljdHMucGhwCkBAIC0wLDAgKzEsMzggQEAKKzw/cGhwCisgIHJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnYXNwZWxsX3NldHVwLnBocCcpOworCisKKyAgJHRvX3BfZGljdCA9ICRfUkVRVUVTVFsndG9fcF9kaWN0J10gPyAkX1JFUVVFU1RbJ3RvX3BfZGljdCddIDogYXJyYXkoKTsKKyAgJHRvX3JfbGlzdCA9ICRfUkVRVUVTVFsndG9fcl9saXN0J10gPyAkX1JFUVVFU1RbJ3RvX3JfbGlzdCddIDogYXJyYXkoKTsKK3ByaW50X3IoJHRvX3JfbGlzdCk7CisgIGlmKCR0b19wX2RpY3QgfHwgJHRvX3JfbGlzdCkKKyAgeworICAgIGlmKCRmaCA9IGZvcGVuKCR0ZW1wdGV4dCwgJ3cnKSkKKyAgICB7CisgICAgICBmb3JlYWNoKCR0b19wX2RpY3QgYXMgJHBlcnNvbmFsX3dvcmQpCisgICAgICB7CisgICAgICAgICRjbWQgPSAnJicgLiAkcGVyc29uYWxfd29yZCAuICJcbiI7CisgICAgICAgIGVjaG8gJGNtZDsKKyAgICAgICAgZndyaXRlKCRmaCwgJGNtZCwgc3RybGVuKCRjbWQpKTsKKyAgICAgIH0KKworICAgICAgZm9yZWFjaCgkdG9fcl9saXN0IGFzICRyZXBsYWNlX3BhaXIpCisgICAgICB7CisgICAgICAgICRjbWQgPSAnJCRyYSAnIC4gJHJlcGxhY2VfcGFpclswXSAuICcgLCAnIC4gJHJlcGxhY2VfcGFpclsxXSAuICJcbiI7CisgICAgICAgIGVjaG8gJGNtZDsKKyAgICAgICAgZndyaXRlKCRmaCwgJGNtZCwgc3RybGVuKCRjbWQpKTsKKyAgICAgIH0KKyAgICAgICRjbWQgPSAiI1xuIjsKKyAgICAgIGVjaG8gJGNtZDsKKyAgICAgIGZ3cml0ZSgkZmgsICRjbWQsIHN0cmxlbigkY21kKSk7CisgICAgICBmY2xvc2UoJGZoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGRpZSgiQ2FuJ3QgV3JpdGUiKTsKKyAgICB9CisgICAgZWNobyAkYXNwZWxsY29tbWFuZC4iXG4iOworICAgIGVjaG8gc2hlbGxfZXhlYygkYXNwZWxsY29tbWFuZCAuICcgMj4mMScpOworICAgIHVubGluaygkdGVtcHRleHQpOworICB9Cis/PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL3NwZWxsLWNoZWNrLXN0eWxlLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL3NwZWxsLWNoZWNrLXN0eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDA4YmEwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9TcGVsbENoZWNrZXIvc3BlbGwtY2hlY2stc3R5bGUuY3NzCkBAIC0wLDAgKzEsMTAgQEAKKy5IQS1zcGVsbGNoZWNrLWVycm9yIHsgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAjZjAwOyBjdXJzb3I6IGRlZmF1bHQ7IH0KKy5IQS1zcGVsbGNoZWNrLXNhbWUgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjY2VmOyBjb2xvcjogIzAwMDsgfQorLkhBLXNwZWxsY2hlY2staG92ZXIgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjNDMzOyBjb2xvcjogd2hpdGU7IH0KKy5IQS1zcGVsbGNoZWNrLWZpeGVkIHsgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAjMGI4OyB9CisuSEEtc3BlbGxjaGVjay1jdXJyZW50IHsgYmFja2dyb3VuZC1jb2xvcjogIzliZTsgY29sb3I6ICMwMDA7IH0KKy5IQS1zcGVsbGNoZWNrLXN1Z2dlc3Rpb25zIHsgZGlzcGxheTogbm9uZTsgfQorCisjSEEtc3BlbGxjaGVjay1kaWN0aW9uYXJpZXMgeyBkaXNwbGF5OiBub25lOyB9CisKK2E6bGluaywgYTp2aXNpdGVkIHsgY29sb3I6ICM1NWU7IH0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL3NwZWxsLWNoZWNrLXVpLmh0bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9zcGVsbC1jaGVjay11aS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5OWRhOTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9zcGVsbC1jaGVjay11aS5odG1sCkBAIC0wLDAgKzEsMTI1IEBACis8IS0tCisKKyAgU3RyYW5nZWx5LCBJRSBzdWNrcyB3aXRoIG9yIHdpdGhvdXQgdGhlIERPQ1RZUEUgc3dpdGNoLgorICBJIHRob3VnaHQgaXQgd291bGQgb25seSBzdWNrIHdpdGhvdXQgaXQuCisKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIKKyAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorCisgICBTcGVsbCBDaGVja2VyIFBsdWdpbiBmb3IgSFRNTEFyZWEtMy4wCisgICBTcG9uc29yZWQgYnkgd3d3LmFtZXJpY2FuYmlibGUub3JnCisgICBJbXBsZW1lbnRhdGlvbiBieSBNaWhhaSBCYXpvbiwgaHR0cDovL2R5bmFyY2guY29tL21pc2hvby8KKworICAgKGMpIGR5bmFyY2guY29tIDIwMDMuCisgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisgICBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisKKyAgICRJZDpzcGVsbC1jaGVjay11aS5odG1sIDk4NyAyMDA4LTA0LTEyIDEyOjM5OjA0WiByYXkgJAorCistLT4KKzxodG1sPgorCisgIDxoZWFkPgorICAgIDx0aXRsZT5TcGVsbCBDaGVja2VyPC90aXRsZT4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzcGVsbC1jaGVjay11aS5qcyI+PC9zY3JpcHQ+CisKKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgICAgaHRtbCwgYm9keSB7IGhlaWdodDogMTAwJTsgbWFyZ2luOiAwcHg7IHBhZGRpbmc6IDBweDsgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgICAgIGNvbG9yOiAjMDAwOyB9CisgICAgICBhOmxpbmssIGE6dmlzaXRlZCB7IGNvbG9yOiAjMDBmOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0KKyAgICAgIGE6aG92ZXIgeyBjb2xvcjogI2YwMDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KKworICAgICAgdGFibGUgeyBiYWNrZ3JvdW5kLWNvbG9yOiBCdXR0b25GYWNlOyBjb2xvcjogQnV0dG9uVGV4dDsKKyAgICAgIGZvbnQtZmFtaWx5OiB0YWhvbWEsdmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDExcHg7IH0KKworICAgICAgaWZyYW1lIHsgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgY29sb3I6ICMwMDA7IGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IH0KKworICAgICAgLmNvbnRyb2xzIHsgd2lkdGg6IDEzZW07IH0KKyAgICAgIC5jb250cm9scyAuc2VjdGl0bGUgeyAvKiBiYWNrZ3JvdW5kLWNvbG9yOiAjNzM2YzZjOyBjb2xvcjogI2ZmZjsKKyAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjMDAwOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2ZmZjsgKi8KKyAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOyBwYWRkaW5nOiAycHggNHB4OyB9CisgICAgICAuY29udHJvbHMgLnNlY2JvZHkgeyBtYXJnaW4tYm90dG9tOiAxMHB4OyB9CisKKyAgICAgIGJ1dHRvbiwgc2VsZWN0IHsgZm9udC1mYW1pbHk6IHRhaG9tYSx2ZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTFweDsgfQorICAgICAgYnV0dG9uIHsgd2lkdGg6IDZlbTsgcGFkZGluZzogMHB4OyB9CisKKyAgICAgIGlucHV0LCBzZWxlY3QgeyBmb250LWZhbWlseTogZml4ZWQsImFuZGFsZSBtb25vIixtb25vc3BhY2U7IH0KKworICAgICAgI3ZfY3VycmVudFdvcmQgeyBjb2xvcjogI2YwMDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KKyAgICAgICNzdGF0dXNiYXIgeyBwYWRkaW5nOiA3cHggMHB4IDBweCA1cHg7IH0KKyAgICAgICNzdGF0dXMgeyBmb250LXdlaWdodDogYm9sZDsgfQorICAgIDwvc3R5bGU+CisKKyAgPC9oZWFkPgorCisgIDxib2R5IG9ubG9hZD0iaW5pdERvY3VtZW50KCkiPgorCisgICAgPGZvcm0gc3R5bGU9ImRpc3BsYXk6IG5vbmU7IiBhY3Rpb249InNwZWxsLWNoZWNrLWxvZ2ljLmNnaSIKKyAgICAgICAgICBtZXRob2Q9InBvc3QiIHRhcmdldD0iZnJhbWVjb250ZW50IgorICAgICAgICAgIGFjY2VwdC1jaGFyc2V0PSJVVEYtOCIKKyAgICAgICAgICA+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY29udGVudCIgaWQ9ImZfY29udGVudCIKKyAgICAgICAgICAvPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImRpY3Rpb25hcnkiIGlkPSJmX2RpY3Rpb25hcnkiCisgICAgICAgICAgLz48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJpbml0IiBpZD0iZl9pbml0IiB2YWx1ZT0iMSIKKyAgICAgICAgICAvPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InV0ZjhfdG9fZW50aXRpZXMiIGlkPSJ1dGY4X3RvX2VudGl0aWVzIiB2YWx1ZT0iMSIKKyAgICAvPjwvZm9ybT4KKworICAgIDx0YWJsZSBzdHlsZT0iaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+CisgICAgICA8dHI+CisgICAgICAgIDx0ZCBjb2xzcGFuPSIyIiBzdHlsZT0iaGVpZ2h0OiAxZW07IHBhZGRpbmc6IDJweDsiPgorICAgICAgICAgIDxkaXYgc3R5bGU9ImZsb2F0OiByaWdodDsgcGFkZGluZzogMnB4OyI+PHNwYW4+RGljdGlvbmFyeTwvc3Bhbj4KKyAgICAgICAgICAgIDxzZWxlY3QgaWQ9InZfZGljdGlvbmFyaWVzIiBzdHlsZT0id2lkdGg6IDEwZW0iPjwvc2VsZWN0PgorICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYl9yZWNoZWNrIj5SZS1jaGVjazwvYnV0dG9uPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxzcGFuIGlkPSJzdGF0dXMiPlBsZWFzZSB3YWl0LiAgQ2FsbGluZyBzcGVsbCBjaGVja2VyLjwvc3Bhbj4KKyAgICAgICAgPC90ZD4KKyAgICAgIDwvdHI+CisgICAgICA8dHI+CisgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsiIGNsYXNzPSJjb250cm9scyI+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjYm9keSIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+CisgICAgICAgICAgICA8YnV0dG9uIGlkPSJiX2luZm8iPkluZm88L2J1dHRvbj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aXRsZSI+T3JpZ2luYWwgd29yZDwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9InNlY2JvZHkiIGlkPSJ2X2N1cnJlbnRXb3JkIiBzdHlsZT0idGV4dC1hbGlnbjoKKyAgICAgICAgICBjZW50ZXI7IG1hcmdpbi1ib3R0b206IDBweDsiPnBsaXogd2VpdCA7LSk8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWNib2R5IiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj4KKyAgICAgICAgICAgIDxidXR0b24gaWQ9ImJfcmV2ZXJ0Ij5SZXZlcnQ8L2J1dHRvbj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aXRsZSI+UmVwbGFjZSB3aXRoPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjYm9keSI+CisgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InZfcmVwbGFjZW1lbnQiIHN0eWxlPSJ3aWR0aDogOTQlOyBtYXJnaW4tbGVmdDogMyU7IiAvPjxiciAvPgorICAgICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tdG9wOiAycHg7Ij4KKyAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYl9yZXBsYWNlIj5SZXBsYWNlPC9idXR0b24+PGJ1dHRvbgorICAgICAgICAgICAgICAgIGlkPSJiX3JlcGxhbGwiPlJlcGxhY2UgYWxsPC9idXR0b24+PGJyIC8+PGJ1dHRvbgorICAgICAgICAgICAgICAgIGlkPSJiX2lnbm9yZSI+SWdub3JlPC9idXR0b24+PGJ1dHRvbgorICAgICAgICAgICAgICAgIGlkPSJiX2lnbmFsbCI+SWdub3JlIGFsbDwvYnV0dG9uPgorICAgICAgICAgICAgICAgIDxidXR0b24KKyAgICAgICAgICAgICAgICBpZD0iYl9sZWFybiI+TGVhcm48L2J1dHRvbj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3RpdGxlIj5TdWdnZXN0aW9uczwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9InNlY2JvZHkiPgorICAgICAgICAgICAgPHNlbGVjdCBzaXplPSIxMSIgc3R5bGU9IndpZHRoOiA5NCU7IG1hcmdpbi1sZWZ0OiAzJTsiIGlkPSJ2X3N1Z2dlc3Rpb25zIj48L3NlbGVjdD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC90ZD4KKworICAgICAgICA8dGQ+CisgICAgICAgICAgPGlmcmFtZSBzcmM9Ii4uLy4uL3BvcHVwcy9ibGFuay5odG1sIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIgorICAgICAgICAgICAgaWQ9ImlfZnJhbWVjb250ZW50IiBuYW1lPSJmcmFtZWNvbnRlbnQiPjwvaWZyYW1lPgorICAgICAgICA8L3RkPgorICAgICAgPC90cj4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRkIHN0eWxlPSJoZWlnaHQ6IDFlbTsiIGNvbHNwYW49IjIiPgorICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6IDRweCAycHggMnB4IDJweDsgZmxvYXQ6IHJpZ2h0OyI+CisgICAgICAgICAgICA8YnV0dG9uIGlkPSJiX29rIj5PSzwvYnV0dG9uPgorICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYl9jYW5jZWwiPkNhbmNlbDwvYnV0dG9uPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxkaXYgaWQ9InN0YXR1c2JhciI+PC9kaXY+CisgICAgICAgIDwvdGQ+CisgICAgICA8L3RyPgorICAgIDwvdGFibGU+CisKKyAgPC9ib2R5PgorCis8L2h0bWw+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9zcGVsbC1jaGVjay11aS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvU3BlbGxDaGVja2VyL3NwZWxsLWNoZWNrLXVpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NzFjMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1NwZWxsQ2hlY2tlci9zcGVsbC1jaGVjay11aS5qcwpAQCAtMCwwICsxLDQ1NCBAQAorLy8gU3BlbGwgQ2hlY2tlciBQbHVnaW4gZm9yIEhUTUxBcmVhLTMuMAorLy8gU3BvbnNvcmVkIGJ5IHd3dy5hbWVyaWNhbmJpYmxlLm9yZworLy8gSW1wbGVtZW50YXRpb24gYnkgTWloYWkgQmF6b24sIGh0dHA6Ly9keW5hcmNoLmNvbS9taXNob28vCisvLworLy8gKGMpIGR5bmFyY2guY29tIDIwMDMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gJElkOnNwZWxsLWNoZWNrLXVpLmpzIDk4N00gMjAwOC0wNC0xMiAxMjozOTowNFogKGxvY2FsKSAkCisKKy8vIGludGVybmF0aW9uYWxpemF0aW9uIGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkIGluIHBhcmVudCA7LSkKK3ZhciBTcGVsbENoZWNrZXIgPSB3aW5kb3cub3BlbmVyLlNwZWxsQ2hlY2tlcjsKKwordmFyIFhpbmhhICAgID0gd2luZG93Lm9wZW5lci5YaW5oYTsKKwordmFyIF9lZGl0b3JfdXJsID0gd2luZG93Lm9wZW5lci5fZWRpdG9yX3VybDsKKwordmFyIGlzX2llID0gWGluaGEuaXNfaWU7Cit2YXIgZWRpdG9yID0gU3BlbGxDaGVja2VyLmVkaXRvcjsKK3ZhciBmcmFtZSA9IG51bGw7Cit2YXIgY3VycmVudEVsZW1lbnQgPSBudWxsOwordmFyIHdyb25nV29yZHMgPSBudWxsOwordmFyIG1vZGlmaWVkID0gZmFsc2U7Cit2YXIgYWxsV29yZHMgPSB7fTsKK3ZhciBmaXhlZFdvcmRzID0gW107Cit2YXIgc3VnZ2VzdGVkX3dvcmRzID0ge307CisKK3ZhciB0b19wX2RpY3QgPSBbXTsgLy8gTGlzdCBvZiB3b3JkcyB0byBhZGQgdG8gcGVyc29uYWwgZGljdGlvbmFyeS4KK3ZhciB0b19yX2xpc3QgPSBbXTsgLy8gTGlzdCBvZiB3b3JkcyB0byBhZGQgdG8gcmVwbGFjZW1lbnQgbGlzdC4KKworZnVuY3Rpb24gX2xjKHN0cmluZykgeworICByZXR1cm4gWGluaGEuX2xjKHN0cmluZywgJ1NwZWxsQ2hlY2tlcicpOworfQorCitmdW5jdGlvbiBtYWtlQ2xlYW5Eb2MobGVhdmVGaXhlZCkgeworICAvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3RhdHVzIikuaW5uZXJIVE1MID0gJ1BsZWFzZSB3YWl0OiByZW5kZXJpbmcgdmFsaWQgSFRNTCc7CisgIHZhciB3b3JkcyA9IHdyb25nV29yZHMuY29uY2F0KGZpeGVkV29yZHMpOworICBmb3IgKHZhciBpID0gd29yZHMubGVuZ3RoOyAtLWkgPj0gMDspIHsKKyAgICB2YXIgZWwgPSB3b3Jkc1tpXTsKKyAgICBpZiAoIShsZWF2ZUZpeGVkICYmIC9IQS1zcGVsbGNoZWNrLWZpeGVkLy50ZXN0KGVsLmNsYXNzTmFtZSkpKSB7CisgICAgICBpZihlbC5maXJzdENoaWxkKQorICAgICAgICBlbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbC5maXJzdENoaWxkLCBlbCk7CisgICAgICBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTsKKyAgICB9IGVsc2UKKyAgICAgIGVsLmNsYXNzTmFtZSA9ICJIQS1zcGVsbGNoZWNrLWZpeGVkIjsKKyAgfQorICAvLyB3ZSBzaG91bGQgdXNlIGlubmVySFRNTCBoZXJlLCBidXQgSUU2J3MgaW1wbGVtZW50YXRpb24gZnVja3MgdXAgdGhlCisgIC8vIEhUTUwgdG8gc3VjaCBleHRlbnQgdGhhdCBvdXIgcG9vciBQZXJsIHBhcnNlciBkb2Vzbid0IHVuZGVyc3RhbmQgaXQKKyAgLy8gYW55bW9yZS4KKyAgcmV0dXJuIFhpbmhhLmdldEhUTUwoZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudC5ib2R5LCB0cnVlLCBlZGl0b3IpOworfQorCitmdW5jdGlvbiByZWNoZWNrQ2xpY2tlZCgpIHsKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXR1cyIpLmlubmVySFRNTCA9IF9sYygiUGxlYXNlIHdhaXQ6IGNoYW5naW5nIGRpY3Rpb25hcnkgdG8iKSArICc6ICInICsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfZGljdGlvbmFyeSIpLnZhbHVlICsgJyIuJzsKKyAgdmFyIGZpZWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfY29udGVudCIpOworICBmaWVsZC52YWx1ZSA9IG1ha2VDbGVhbkRvYyh0cnVlKTsKKyAgZmllbGQuZm9ybS5zdWJtaXQoKTsKK30KKworZnVuY3Rpb24gc2F2ZUNsaWNrZWQoKSB7CisgIGlmIChtb2RpZmllZCkgeworICAgIGVkaXRvci5zZXRIVE1MKG1ha2VDbGVhbkRvYyhmYWxzZSkpOworICB9CisKKyAgaWYodG9fcF9kaWN0Lmxlbmd0aCB8fCB0b19yX2xpc3QubGVuZ3RoICYmIGVkaXRvci5jb25maWcuU3BlbGxDaGVja2VyLmJhY2tlbmQgPT0gJ3BocCcpCisgIHsKKyAgICB2YXIgZGF0YSA9IHt9OworICAgIGZvcih2YXIgaSA9IDA7aSA8IHRvX3BfZGljdC5sZW5ndGg7aSsrKQorICAgIHsKKyAgICAgIGRhdGFbJ3RvX3BfZGljdFsnICsgaSArICddJ10gPSB0b19wX2RpY3RbaV07CisgICAgfQorICAgIGZvcih2YXIgaSA9IDA7aSA8IHRvX3JfbGlzdC5sZW5ndGg7aSsrKQorICAgIHsKKyAgICAgIGRhdGFbJ3RvX3JfbGlzdFsnICsgaSArICddWzBdJ10gPSB0b19yX2xpc3RbaV1bMF07CisgICAgICBkYXRhWyd0b19yX2xpc3RbJyArIGkgKyAnXVsxXSddID0gdG9fcl9saXN0W2ldWzFdOworICAgIH0KKyAgICAvLyB2YXIgd2luID0gd2luZG93OworICAgIHdpbmRvdy5vcGVuZXIuWGluaGEuX3Bvc3RiYWNrKFhpbmhhLmdldFBsdWdpbkRpcigiU3BlbGxDaGVja2VyIikgKyAnL3NwZWxsLWNoZWNrLXNhdmVkaWN0cy5waHAnLCBkYXRhKTsKKyAgICB3aW5kb3cuY2xvc2UoKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICB3aW5kb3cuY2xvc2UoKTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIGNhbmNlbENsaWNrZWQoKSB7CisgIHZhciBvayA9IHRydWU7CisgIGlmIChtb2RpZmllZCkgeworICAgIG9rID0gY29uZmlybShfbGMoIlRoaXMgd2lsbCBkcm9wIGNoYW5nZXMgYW5kIHF1aXQgc3BlbGwgY2hlY2tlci4gIFBsZWFzZSBjb25maXJtLiIpKTsKKyAgfQorICBpZiAob2spIHsKKyAgICB3aW5kb3cuY2xvc2UoKTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIHJlcGxhY2VXb3JkKGVsKSB7CisgIHZhciByZXBsYWNlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2X3JlcGxhY2VtZW50IikudmFsdWU7CisgIHZhciB0aGlzX3dvcmRfbW9kaWZpZWQgPSAoZWwuaW5uZXJIVE1MICE9IHJlcGxhY2VtZW50KTsKKyAgaWYgKHRoaXNfd29yZF9tb2RpZmllZCkKKyAgICBtb2RpZmllZCA9IHRydWU7CisgIGlmIChlbCkgeworICAgIGVsLmNsYXNzTmFtZSA9IGVsLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypIQS1zcGVsbGNoZWNrLShob3ZlcnxmaXhlZClccyovZywgIiAiKTsKKyAgfQorICBlbC5jbGFzc05hbWUgKz0gIiBIQS1zcGVsbGNoZWNrLWZpeGVkIjsKKyAgZWwuX19tc2hfZml4ZWQgPSB0cnVlOworICBpZiAoIXRoaXNfd29yZF9tb2RpZmllZCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICB0b19yX2xpc3QucHVzaChbZWwuaW5uZXJIVE1MLCByZXBsYWNlbWVudF0pOworICBlbC5pbm5lckhUTUwgPSByZXBsYWNlbWVudDsKK30KKworZnVuY3Rpb24gcmVwbGFjZUNsaWNrZWQoKSB7CisgIHJlcGxhY2VXb3JkKGN1cnJlbnRFbGVtZW50KTsKKyAgdmFyIHN0YXJ0ID0gY3VycmVudEVsZW1lbnQuX19tc2hfaWQ7CisgIHZhciBpbmRleCA9IHN0YXJ0OworICBkbyB7CisgICAgKytpbmRleDsKKyAgICBpZiAoaW5kZXggPT0gd3JvbmdXb3Jkcy5sZW5ndGgpIHsKKyAgICAgIGluZGV4ID0gMDsKKyAgICB9CisgIH0gd2hpbGUgKChpbmRleCAhPSBzdGFydCkgJiYgd3JvbmdXb3Jkc1tpbmRleF0uX19tc2hfZml4ZWQpOworICBpZiAoaW5kZXggPT0gc3RhcnQpIHsKKyAgICBpbmRleCA9IDA7CisgICAgYWxlcnQoX2xjKCJGaW5pc2hlZCBsaXN0IG9mIG1pc3BlbGxlZCB3b3JkcyIpKTsKKyAgfQorICB3cm9uZ1dvcmRzW2luZGV4XS5fX21zaF93b3JkQ2xpY2tlZCh0cnVlKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiByZXZlcnRDbGlja2VkKCkgeworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidl9yZXBsYWNlbWVudCIpLnZhbHVlID0gY3VycmVudEVsZW1lbnQuX19tc2hfb3JpZ1dvcmQ7CisgIHJlcGxhY2VXb3JkKGN1cnJlbnRFbGVtZW50KTsKKyAgY3VycmVudEVsZW1lbnQuY2xhc3NOYW1lID0gIkhBLXNwZWxsY2hlY2stZXJyb3IgSEEtc3BlbGxjaGVjay1jdXJyZW50IjsKKyAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiByZXBsYWNlQWxsQ2xpY2tlZCgpIHsKKyAgdmFyIHJlcGxhY2VtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInZfcmVwbGFjZW1lbnQiKS52YWx1ZTsKKyAgdmFyIG9rID0gdHJ1ZTsKKyAgdmFyIHNwYW5zID0gYWxsV29yZHNbY3VycmVudEVsZW1lbnQuX19tc2hfb3JpZ1dvcmRdOworICBpZiAoc3BhbnMubGVuZ3RoID09IDApIHsKKyAgICBhbGVydCgiQW4gaW1wb3NzaWJsZSBjb25kaXRpb24ganVzdCBoYXBwZW5lZC4gIENhbGwgRkJJLiAgOy0pIik7CisgIH0gZWxzZSBpZiAoc3BhbnMubGVuZ3RoID09IDEpIHsKKyAgICByZXBsYWNlQ2xpY2tlZCgpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICAvKgorICB2YXIgbWVzc2FnZSA9ICJUaGUgd29yZCBcIiIgKyBjdXJyZW50RWxlbWVudC5fX21zaF9vcmlnV29yZCArICJcIiBvY2N1cnMgIiArIHNwYW5zLmxlbmd0aCArICIgdGltZXMuXG4iOworICBpZiAocmVwbGFjZW1lbnQgPT0gY3VycmVudEVsZW1lbnQuX19tc2hfb3JpZ1dvcmQpIHsKKyAgICBvayA9IGNvbmZpcm0obWVzc2FnZSArICJJZ25vcmUgYWxsIG9jY3VycmVuY2VzPyIpOworICB9IGVsc2UgeworICAgIG9rID0gY29uZmlybShtZXNzYWdlICsgIlJlcGxhY2UgYWxsIG9jY3VycmVuY2VzIHdpdGggXCIiICsgcmVwbGFjZW1lbnQgKyAiXCI/Iik7CisgIH0KKyAgKi8KKyAgaWYgKG9rKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkgeworICAgICAgaWYgKHNwYW5zW2ldICE9IGN1cnJlbnRFbGVtZW50KSB7CisgICAgICAgIHJlcGxhY2VXb3JkKHNwYW5zW2ldKTsKKyAgICAgIH0KKyAgICB9CisgICAgLy8gcmVwbGFjZSBjdXJyZW50IGVsZW1lbnQgdGhlIGxhc3QsIHNvIHRoYXQgd2UganVtcCB0byB0aGUgbmV4dCB3b3JkIDstKQorICAgIHJlcGxhY2VDbGlja2VkKCk7CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBpZ25vcmVDbGlja2VkKCkgeworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidl9yZXBsYWNlbWVudCIpLnZhbHVlID0gY3VycmVudEVsZW1lbnQuX19tc2hfb3JpZ1dvcmQ7CisgIHJlcGxhY2VDbGlja2VkKCk7CisgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gaWdub3JlQWxsQ2xpY2tlZCgpIHsKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInZfcmVwbGFjZW1lbnQiKS52YWx1ZSA9IGN1cnJlbnRFbGVtZW50Ll9fbXNoX29yaWdXb3JkOworICByZXBsYWNlQWxsQ2xpY2tlZCgpOworICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIGxlYXJuQ2xpY2tlZCgpIHsKKyAgdG9fcF9kaWN0LnB1c2goY3VycmVudEVsZW1lbnQuX19tc2hfb3JpZ1dvcmQpOworICByZXR1cm4gaWdub3JlQWxsQ2xpY2tlZCgpOworfQorCitmdW5jdGlvbiBpbnRlcm5hdGlvbmFsaXplV2luZG93KCkgeworICB2YXIgdHlwZXMgPSBbImRpdiIsICJzcGFuIiwgImJ1dHRvbiJdOworICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAgdmFyIHRhZyA9IHR5cGVzW2ldOworICAgIHZhciBlbHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWcpOworICAgIGZvciAodmFyIGogPSBlbHMubGVuZ3RoOyAtLWogPj0gMDspIHsKKyAgICAgIHZhciBlbCA9IGVsc1tqXTsKKyAgICAgIGlmIChlbC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxICYmIC9cUy8udGVzdChlbC5pbm5lckhUTUwpKSB7CisgICAgICAgIHZhciB0eHQgPSBlbC5pbm5lckhUTUw7CisgICAgICAgIGVsLmlubmVySFRNTCA9IF9sYyh0eHQpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCitmdW5jdGlvbiBpbml0RG9jdW1lbnQoKSB7CisgIGludGVybmF0aW9uYWxpemVXaW5kb3coKTsKKyAgbW9kaWZpZWQgPSBmYWxzZTsKKyAgZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaV9mcmFtZWNvbnRlbnQiKTsKKyAgdmFyIGZpZWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfY29udGVudCIpOworICBmaWVsZC52YWx1ZSA9IFhpbmhhLmdldEhUTUwoZWRpdG9yLl9kb2MuYm9keSwgZmFsc2UsIGVkaXRvcik7CisgIHZhciBkaWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfZGljdGlvbmFyeSIpOworICBpZih0eXBlb2YgZWRpdG9yLmNvbmZpZy5TcGVsbENoZWNrZXIuZGVmYXVsdERpY3Rpb25hcnkgIT0gInVuZGVmaW5lZCIKKyAgICAgJiYgZWRpdG9yLmNvbmZpZy5TcGVsbENoZWNrZXIuZGVmYXVsdERpY3Rpb25hcnkgIT0gIiIpIHsKKyAgICBkaWN0LnZhbHVlID0gZWRpdG9yLmNvbmZpZy5TcGVsbENoZWNrZXIuZGVmYXVsdERpY3Rpb25hcnk7CisgIH0gZWxzZSB7CisgICAgZGljdC52YWx1ZSA9ICJlbl9HQiI7CisgIH0KKyAgaWYoZWRpdG9yLmNvbmZpZy5TcGVsbENoZWNrZXIuYmFja2VuZCA9PSAncGhwJykKKyAgeworICAgIGZpZWxkLmZvcm0uYWN0aW9uID0gWGluaGEuZ2V0UGx1Z2luRGlyKCJTcGVsbENoZWNrZXIiKSArICcvc3BlbGwtY2hlY2stbG9naWMucGhwJzsKKyAgfQorICBpZihlZGl0b3IuY29uZmlnLlNwZWxsQ2hlY2tlci51dGY4X3RvX2VudGl0aWVzKQorICB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V0ZjhfdG9fZW50aXRpZXMnKS52YWx1ZSA9IDE7CisgIH0KKyAgZWxzZQorICB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3V0ZjhfdG9fZW50aXRpZXMnKS52YWx1ZSA9IDA7CisgIH0KKyAgZmllbGQuZm9ybS5zdWJtaXQoKTsKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfaW5pdCIpLnZhbHVlID0gIjAiOworCisgIC8vIGFzc2lnbiBzb21lIGdsb2JhbCBldmVudCBoYW5kbGVycworCisgIHZhciBzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidl9zdWdnZXN0aW9ucyIpOworICBzZWxlY3Qub25jaGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidl9yZXBsYWNlbWVudCIpLnZhbHVlID0gdGhpcy52YWx1ZTsKKyAgfTsKKyAgaWYgKGlzX2llKSB7CisgICAgc2VsZWN0LmF0dGFjaEV2ZW50KCJvbmRibGNsaWNrIiwgcmVwbGFjZUNsaWNrZWQpOworICB9IGVsc2UgeworICAgIHNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCJkYmxjbGljayIsIHJlcGxhY2VDbGlja2VkLCB0cnVlKTsKKyAgfQorCisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiX3JlcGxhY2UiKS5vbmNsaWNrID0gcmVwbGFjZUNsaWNrZWQ7CisgIGlmKGVkaXRvci5jb25maWcuU3BlbGxDaGVja2VyLmJhY2tlbmQgPT0gJ3BocCcpCisgIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYl9sZWFybiIpLm9uY2xpY2sgPSBsZWFybkNsaWNrZWQ7CisgIH0KKyAgZWxzZQorICB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJfbGVhcm4iKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiX2xlYXJuIikpOworICB9CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiX3JlcGxhbGwiKS5vbmNsaWNrID0gcmVwbGFjZUFsbENsaWNrZWQ7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiX2lnbm9yZSIpLm9uY2xpY2sgPSBpZ25vcmVDbGlja2VkOworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYl9pZ25hbGwiKS5vbmNsaWNrID0gaWdub3JlQWxsQ2xpY2tlZDsKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJfcmVjaGVjayIpLm9uY2xpY2sgPSByZWNoZWNrQ2xpY2tlZDsKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJfcmV2ZXJ0Iikub25jbGljayA9IHJldmVydENsaWNrZWQ7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiX2luZm8iKS5vbmNsaWNrID0gZGlzcGxheUluZm87CisKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJfb2siKS5vbmNsaWNrID0gc2F2ZUNsaWNrZWQ7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiX2NhbmNlbCIpLm9uY2xpY2sgPSBjYW5jZWxDbGlja2VkOworCisgIHNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2X2RpY3Rpb25hcmllcyIpOworICBzZWxlY3Qub25jaGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9kaWN0aW9uYXJ5IikudmFsdWUgPSB0aGlzLnZhbHVlOworICB9OworfQorCitmdW5jdGlvbiBnZXRBYnNvbHV0ZVBvcyhlbCkgeworICB2YXIgciA9IHsgeDogZWwub2Zmc2V0TGVmdCwgeTogZWwub2Zmc2V0VG9wIH07CisgIGlmIChlbC5vZmZzZXRQYXJlbnQpIHsKKyAgICB2YXIgdG1wID0gZ2V0QWJzb2x1dGVQb3MoZWwub2Zmc2V0UGFyZW50KTsKKyAgICByLnggKz0gdG1wLng7CisgICAgci55ICs9IHRtcC55OworICB9CisgIHJldHVybiByOworfQorCitmdW5jdGlvbiB3b3JkQ2xpY2tlZChzY3JvbGwpIHsKKyAgdmFyIHNlbGYgPSB0aGlzOworICBpZiAoc2Nyb2xsKSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIHBvcyA9IGdldEFic29sdXRlUG9zKHNlbGYpOworICAgIHZhciB3cyA9IHsgeDogZnJhbWUub2Zmc2V0V2lkdGggLSA0LAorICAgICAgICAgeTogZnJhbWUub2Zmc2V0SGVpZ2h0IC0gNCB9OworICAgIHZhciB3cCA9IHsgeDogZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudC5ib2R5LnNjcm9sbExlZnQsCisgICAgICAgICB5OiBmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wIH07CisgICAgcG9zLnggLT0gTWF0aC5yb3VuZCh3cy54LzIpOworICAgIGlmIChwb3MueCA8IDApIHBvcy54ID0gMDsKKyAgICBwb3MueSAtPSBNYXRoLnJvdW5kKHdzLnkvMik7CisgICAgaWYgKHBvcy55IDwgMCkgcG9zLnkgPSAwOworICAgIGZyYW1lLmNvbnRlbnRXaW5kb3cuc2Nyb2xsVG8ocG9zLngsIHBvcy55KTsKKyAgfSkoKTsKKyAgaWYgKGN1cnJlbnRFbGVtZW50KSB7CisgICAgdmFyIGEgPSBhbGxXb3Jkc1tjdXJyZW50RWxlbWVudC5fX21zaF9vcmlnV29yZF07CisgICAgY3VycmVudEVsZW1lbnQuY2xhc3NOYW1lID0gY3VycmVudEVsZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKkhBLXNwZWxsY2hlY2stY3VycmVudFxzKi9nLCAiICIpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkgeworICAgICAgdmFyIGVsID0gYVtpXTsKKyAgICAgIGlmIChlbCAhPSBjdXJyZW50RWxlbWVudCkgeworICAgICAgICBlbC5jbGFzc05hbWUgPSBlbC5jbGFzc05hbWUucmVwbGFjZSgvXHMqSEEtc3BlbGxjaGVjay1zYW1lXHMqL2csICIgIik7CisgICAgICB9CisgICAgfQorICB9CisgIGN1cnJlbnRFbGVtZW50ID0gdGhpczsKKyAgdGhpcy5jbGFzc05hbWUgKz0gIiBIQS1zcGVsbGNoZWNrLWN1cnJlbnQiOworICB2YXIgYSA9IGFsbFdvcmRzW2N1cnJlbnRFbGVtZW50Ll9fbXNoX29yaWdXb3JkXTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7CisgICAgdmFyIGVsID0gYVtpXTsKKyAgICBpZiAoZWwgIT0gY3VycmVudEVsZW1lbnQpIHsKKyAgICAgIGVsLmNsYXNzTmFtZSArPSAiIEhBLXNwZWxsY2hlY2stc2FtZSI7CisgICAgfQorICB9CisgIC8vIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiX3JlcGxhbGwiKS5kaXNhYmxlZCA9IChhLmxlbmd0aCA8PSAxKTsKKyAgLy8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJfaWduYWxsIikuZGlzYWJsZWQgPSAoYS5sZW5ndGggPD0gMSk7CisgIHZhciB0eHQ7CisgIGlmIChhLmxlbmd0aCA9PSAxKSB7CisgICAgdHh0ID0gIm9uZSBvY2N1cnJlbmNlIjsKKyAgfSBlbHNlIGlmIChhLmxlbmd0aCA9PSAyKSB7CisgICAgdHh0ID0gInR3byBvY2N1cnJlbmNlcyI7CisgIH0gZWxzZSB7CisgICAgdHh0ID0gYS5sZW5ndGggKyAiIG9jY3VycmVuY2VzIjsKKyAgfQorICB2YXIgc3VnZ2VzdGlvbnMgPSBzdWdnZXN0ZWRfd29yZHNbdGhpcy5fX21zaF9vcmlnV29yZF07CisgIGlmIChzdWdnZXN0aW9ucykKKyAgICBzdWdnZXN0aW9ucyA9IHN1Z2dlc3Rpb25zLnNwbGl0KC8sLyk7CisgIGVsc2UKKyAgICBzdWdnZXN0aW9ucyA9IFtdOworICB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInZfc3VnZ2VzdGlvbnMiKTsKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXR1c2JhciIpLmlubmVySFRNTCA9ICJGb3VuZCAiICsgdHh0ICsKKyAgICAnIGZvciB3b3JkICI8Yj4nICsgY3VycmVudEVsZW1lbnQuX19tc2hfb3JpZ1dvcmQgKyAnPC9iPiInOworICBmb3IgKHZhciBpID0gc2VsZWN0Lmxlbmd0aDsgLS1pID49IDA7KSB7CisgICAgc2VsZWN0LnJlbW92ZShpKTsKKyAgfQorICBmb3IgKHZhciBpID0gMDsgaSA8IHN1Z2dlc3Rpb25zLmxlbmd0aDsgKytpKSB7CisgICAgdmFyIHR4dCA9IHN1Z2dlc3Rpb25zW2ldOworICAgIHZhciBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTsKKyAgICBvcHRpb24udmFsdWUgPSB0eHQ7CisgICAgb3B0aW9uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHR4dCkpOworICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pOworICB9CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2X2N1cnJlbnRXb3JkIikuaW5uZXJIVE1MID0gdGhpcy5fX21zaF9vcmlnV29yZDsKKyAgaWYgKHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDApIHsKKyAgICBzZWxlY3Quc2VsZWN0ZWRJbmRleCA9IDA7CisgICAgc2VsZWN0Lm9uY2hhbmdlKCk7CisgIH0gZWxzZSB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInZfcmVwbGFjZW1lbnQiKS52YWx1ZSA9IHRoaXMuaW5uZXJIVE1MOworICB9CisgIHNlbGVjdC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICBzZWxlY3Quc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gd29yZE1vdXNlT3ZlcigpIHsKKyAgdGhpcy5jbGFzc05hbWUgKz0gIiBIQS1zcGVsbGNoZWNrLWhvdmVyIjsKK30KKworZnVuY3Rpb24gd29yZE1vdXNlT3V0KCkgeworICB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKkhBLXNwZWxsY2hlY2staG92ZXJccyovZywgIiAiKTsKK30KKworZnVuY3Rpb24gZGlzcGxheUluZm8oKSB7CisgIHZhciBpbmZvID0gZnJhbWUuY29udGVudFdpbmRvdy5zcGVsbGNoZWNrX2luZm87CisgIGlmICghaW5mbykKKyAgICBhbGVydCgiTm8gaW5mb3JtYXRpb24gYXZhaWxhYmxlIik7CisgIGVsc2UgeworICAgIHZhciB0eHQgPSAiKiogRG9jdW1lbnQgaW5mb3JtYXRpb24gKioiOworICAgIGZvciAodmFyIGkgaW4gaW5mbykgeworICAgICAgdHh0ICs9ICJcbiIgKyBpICsgIiA6ICIgKyBpbmZvW2ldOworICAgIH0KKyAgICBhbGVydCh0eHQpOworICB9CisgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gZmluaXNoZWRTcGVsbENoZWNraW5nKCkgeworICAvLyBpbml0aWFsaXphdGlvbiBvZiBnbG9iYWwgdmFyaWFibGVzCisgIGN1cnJlbnRFbGVtZW50ID0gbnVsbDsKKyAgd3JvbmdXb3JkcyA9IG51bGw7CisgIGFsbFdvcmRzID0ge307CisgIGZpeGVkV29yZHMgPSBbXTsKKyAgc3VnZ2VzdGVkX3dvcmRzID0gZnJhbWUuY29udGVudFdpbmRvdy5zdWdnZXN0ZWRfd29yZHM7CisKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXR1cyIpLmlubmVySFRNTCA9ICJYaW5oYSBTcGVsbCBDaGVja2VyICg8YSBocmVmPVwicmVhZG1lLXRlY2guaHRtbFwiIG9uY2xpY2s9XCJ3aW5kb3cub3Blbih0aGlzLmhyZWYsJ19ibGFuaycpO3JldHVybiBmYWxzZTtcIiB0aXRsZT1cIlRlY2huaWNhbCBpbmZvcm1hdGlvblwiPmluZm88L2E+KSI7CisgIHZhciBkb2MgPSBmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50OworICAgICAgICB2YXIgc3BhbnMgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNwYW4iKTsKKyAgICAgICAgdmFyIHNwcyA9IFtdOworICB2YXIgaWQgPSAwOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIGVsID0gc3BhbnNbaV07CisgICAgICAgICAgICAgICAgaWYgKC9IQS1zcGVsbGNoZWNrLWVycm9yLy50ZXN0KGVsLmNsYXNzTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwcy5wdXNoKGVsKTsKKyAgICAgIGVsLl9fbXNoX3dvcmRDbGlja2VkID0gd29yZENsaWNrZWQ7CisgICAgICBlbC5vbmNsaWNrID0gZnVuY3Rpb24oZXYpIHsKKyAgICAgICAgZXYgfHwgKGV2ID0gd2luZG93LmV2ZW50KTsKKyAgICAgICAgZXYgJiYgWGluaGEuX3N0b3BFdmVudChldik7CisgICAgICAgIHJldHVybiB0aGlzLl9fbXNoX3dvcmRDbGlja2VkKGZhbHNlKTsKKyAgICAgIH07CisgICAgICBlbC5vbm1vdXNlb3ZlciA9IHdvcmRNb3VzZU92ZXI7CisgICAgICBlbC5vbm1vdXNlb3V0ID0gd29yZE1vdXNlT3V0OworICAgICAgZWwuX19tc2hfaWQgPSBpZCsrOworICAgICAgdmFyIHR4dCA9IChlbC5fX21zaF9vcmlnV29yZCA9IGVsLmZpcnN0Q2hpbGQuZGF0YSk7CisgICAgICBlbC5fX21zaF9maXhlZCA9IGZhbHNlOworICAgICAgaWYgKHR5cGVvZiBhbGxXb3Jkc1t0eHRdID09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgIGFsbFdvcmRzW3R4dF0gPSBbZWxdOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYWxsV29yZHNbdHh0XS5wdXNoKGVsKTsKKyAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9IQS1zcGVsbGNoZWNrLWZpeGVkLy50ZXN0KGVsLmNsYXNzTmFtZSkpIHsKKyAgICAgIGZpeGVkV29yZHMucHVzaChlbCk7CisgICAgfQorICAgICAgICB9CisgICAgICAgIAorICB2YXIgZGljdHMgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoIkhBLXNwZWxsY2hlY2stZGljdGlvbmFyaWVzIik7CisgIGlmIChkaWN0cykgeworICAgIGRpY3RzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZGljdHMpOworICAgIGRpY3RzID0gZGljdHMuaW5uZXJIVE1MLnNwbGl0KC8sLyk7CisgICAgdmFyIHNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2X2RpY3Rpb25hcmllcyIpOworICAgIGZvciAodmFyIGkgPSBzZWxlY3QubGVuZ3RoOyAtLWkgPj0gMDspIHsKKyAgICAgIHNlbGVjdC5yZW1vdmUoaSk7CisgICAgfQorICAgIHZhciBhY3RpdmVEaWN0aW9uYXJ5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfZGljdGlvbmFyeSIpLnZhbHVlOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGljdHMubGVuZ3RoOyArK2kpIHsKKyAgICAgIHZhciB0eHQgPSBkaWN0c1tpXTsKKyAgICAgIHZhciBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTsKKyAgICAgIGlmKHR4dCA9PSBhY3RpdmVEaWN0aW9uYXJ5KSB7CisgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7CisgICAgICB9CisgICAgICBvcHRpb24udmFsdWUgPSB0eHQ7CisgICAgICBvcHRpb24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodHh0KSk7CisgICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKKyAgICB9CisgIH0KKyAgICAgICAgCisgIHdyb25nV29yZHMgPSBzcHM7CisgIGlmIChzcHMubGVuZ3RoID09IDApIHsKKyAgICBpZiAoIW1vZGlmaWVkKSB7CisgICAgICBhbGVydChfbGMoIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiIpKTsKKyAgICAgIC8vIHdpbmRvdy5jbG9zZSgpOworICAgIH0gZWxzZSB7CisgICAgICBhbGVydChfbGMoIk5vIG1pc3BlbGxlZCB3b3JkcyBmb3VuZCB3aXRoIHRoZSBzZWxlY3RlZCBkaWN0aW9uYXJ5LiIpKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIChjdXJyZW50RWxlbWVudCA9IHNwc1swXSkuX19tc2hfd29yZENsaWNrZWQodHJ1ZSk7CisgIHZhciBhcyA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpOworICBmb3IgKHZhciBpID0gYXMubGVuZ3RoOyAtLWkgPj0gMDspIHsKKyAgICB2YXIgYSA9IGFzW2ldOworICAgIGEub25jbGljayA9IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKGNvbmZpcm0oX2xjKCJQbGVhc2UgY29uZmlybSB0aGF0IHlvdSB3YW50IHRvIG9wZW4gdGhpcyBsaW5rIikgKyAiOlxuIiArCisgICAgICAgICAgICB0aGlzLmhyZWYgKyAiXG4iICsgX2xjKCJJIHdpbGwgb3BlbiBpdCBpbiBhIG5ldyBwYWdlLiIpKSkgeworICAgICAgICB3aW5kb3cub3Blbih0aGlzLmhyZWYpOworICAgICAgfQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgIH0gIAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvVGVtcGxhdGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL1RlbXBsYXRlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYzVjMmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL1RlbXBsYXRlLmpzCkBAIC0wLDAgKzEsMTA3IEBACisvLyBUZW1wbGF0ZSBwbHVnaW4gZm9yIFhpbmhhDQorLy8gSW1wbGVtZW50YXRpb24gYnkgVWRvIFNjaG1hbCBiYXNlZCBvbiBIVE1MQXJlYSAzLjANCisvLyBPcmlnaW5hbCBBdXRob3IgLSBVZG8gU2NobWFsIHd3dy5TY2hhZmZyYXRoLU5ldWVNZWRpZW4uZGUNCisvLw0KKy8vIChjKSBVZG8gU2NobWFsICYgU2NoYWZmcmF0aCBOZXVlTWVkaWVuIDIwMDQNCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuDQorLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLg0KKw0KK2Z1bmN0aW9uIFRlbXBsYXRlKGVkaXRvcikgew0KKyAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7DQorICB2YXIgY2ZnID0gZWRpdG9yLmNvbmZpZzsNCisgIHZhciBzZWxmID0gdGhpczsNCisNCisgIC8vIHJlZ2lzdGVyIHRoZSB0b29sYmFyIGJ1dHRvbnMgcHJvdmlkZWQgYnkgdGhpcyBwbHVnaW4NCisgIGNmZy5yZWdpc3RlckJ1dHRvbih7DQorICAgIGlkICAgICAgIDogInRlbXBsYXRlIiwNCisgICAgdG9vbHRpcCAgOiBYaW5oYS5fbGMoIkluc2VydCB0ZW1wbGF0ZSIsIlRlbXBsYXRlIiksDQorICAgIGltYWdlICAgIDogZWRpdG9yLmltZ1VSTCgiZWRfdGVtcGxhdGUuZ2lmIiwgIlRlbXBsYXRlIiksDQorICAgIHRleHRNb2RlIDogZmFsc2UsDQorICAgIGFjdGlvbiAgIDogZnVuY3Rpb24oZWRpdG9yKSB7DQorICAgICAgICAgICAgICAgICBzZWxmLmJ1dHRvblByZXNzKGVkaXRvcik7DQorICAgICAgICAgICAgICAgfQ0KKyAgfSk7DQorICBjZmcuYWRkVG9vbGJhckVsZW1lbnQoInRlbXBsYXRlIiwgImluc2VydGhvcml6b250YWxydWxlIiwgMSk7DQorfQ0KKw0KK1RlbXBsYXRlLl9wbHVnaW5JbmZvID0gew0KKyAgbmFtZSAgICAgICAgICA6ICJUZW1wbGF0ZSIsDQorICB2ZXJzaW9uICAgICAgIDogIjEuMCIsDQorICBkZXZlbG9wZXIgICAgIDogIlVkbyBTY2htYWwiLA0KKyAgZGV2ZWxvcGVyX3VybCA6ICJodHRwOi8vd3d3LnNjaGFmZnJhdGgtbmV1ZW1lZGllbi5kZS8iLA0KKyAgY19vd25lciAgICAgICA6ICJVZG8gU2NobWFsICYgU2NoYWZmcmF0aCBOZXVlTWVkaWVuIiwNCisgIGxpY2Vuc2UgICAgICAgOiAiaHRtbEFyZWEiDQorfTsNCisNCitUZW1wbGF0ZS5wcm90b3R5cGUub25HZW5lcmF0ZSA9IGZ1bmN0aW9uKCkgew0KKyAgdGhpcy5lZGl0b3IuYWRkRWRpdG9yU3R5bGVzaGVldChYaW5oYS5nZXRQbHVnaW5EaXIoIlRlbXBsYXRlIikgKyAnL3RlbXBsYXRlLmNzcycpOw0KK307DQorDQorVGVtcGxhdGUucHJvdG90eXBlLmJ1dHRvblByZXNzID0gZnVuY3Rpb24oZWRpdG9yKSB7DQorICBlZGl0b3IuX3BvcHVwRGlhbG9nKCAicGx1Z2luOi8vVGVtcGxhdGUvdGVtcGxhdGUiLCBmdW5jdGlvbiggb2JqICkgew0KKyAgICBpZiAoICFvYmogKSB7Ly91c2VyIG11c3QgaGF2ZSBwcmVzc2VkIENhbmNlbA0KKyAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICB2YXIgYm9keXMgPSBlZGl0b3IuX2RvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpOw0KKyAgICB2YXIgYm9keSA9IGJvZHlzWzBdOw0KKw0KKyAgZnVuY3Rpb24gZ2V0RWxlbWVudCh4KSB7DQorICAgIHZhciByZXN1bHQgPSBlZGl0b3IuX2RvYy5nZXRFbGVtZW50QnlJZCh4KTsNCisgICAgaWYgKCFyZXN1bHQpIHsNCisgICAgICByZXN1bHQgPSBlZGl0b3IuX2RvYy5jcmVhdGVFbGVtZW50KCJkaXYiKTsNCisgICAgICByZXN1bHQuaWQgPSB4Ow0KKyAgICAgIHJlc3VsdC5pbm5lckhUTUwgPSB4Ow0KKyAgICAgIGJvZHkuYXBwZW5kQ2hpbGQocmVzdWx0KTsNCisgICAgfQ0KKyAgICBpZiAocmVzdWx0LnN0eWxlKQ0KKyAgICAgIHJlc3VsdC5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIik7DQorICAgIHJldHVybiByZXN1bHQ7DQorICB9DQorDQorICAgIHZhciBjb250ZW50ID0gZ2V0RWxlbWVudCgiY29udGVudCIpOw0KKyAgICB2YXIgbWVudTEgPSBnZXRFbGVtZW50KCJtZW51MSIpOw0KKyAgICB2YXIgbWVudTIgPSBnZXRFbGVtZW50KCJtZW51MiIpOw0KKyAgICB2YXIgbWVudTMgPSBnZXRFbGVtZW50KCJtZW51MyIpOw0KKyAgICBzd2l0Y2ggKG9ialsidGVtcGwiXSkgew0KKyAgICAgIGNhc2UgIjEiOiBtZW51MS5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7DQorICAgICAgICAgICAgICAgIG1lbnUxLnN0eWxlLnJpZ2h0ID0gIjBweCI7DQorICAgICAgICAgICAgICAgIG1lbnUxLnN0eWxlLndpZHRoID0gIjI4JSI7DQorICAgICAgICAgICAgICAgIG1lbnUxLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICIjZTFkZGQ5IjsNCisgICAgICAgICAgICAgICAgbWVudTEuc3R5bGUucGFkZGluZyA9ICIycHggMjBweCI7DQorICAgICAgICAgICAgICAgIGNvbnRlbnQuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOw0KKyAgICAgICAgICAgICAgICBjb250ZW50LnN0eWxlLmxlZnQgPSAiMHB4IjsNCisgICAgICAgICAgICAgICAgY29udGVudC5zdHlsZS53aWR0aCA9ICI3MCUiOw0KKyAgICAgICAgICAgICAgICBjb250ZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICIjZmZmIjsNCisgICAgICAgICAgICAgICAgbWVudTIuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOw0KKyAgICAgICAgICAgICAgICBtZW51My5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgIjIiOiBtZW51MS5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7DQorICAgICAgICAgICAgICAgIG1lbnUxLnN0eWxlLmxlZnQgPSAiMHB4IjsNCisgICAgICAgICAgICAgICAgbWVudTEuc3R5bGUud2lkdGggPSAiMjglIjsNCisgICAgICAgICAgICAgICAgbWVudTEuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOw0KKyAgICAgICAgICAgICAgICBtZW51MS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAiI2UxZGRkOSI7DQorICAgICAgICAgICAgICAgIGNvbnRlbnQuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOw0KKyAgICAgICAgICAgICAgICBjb250ZW50LnN0eWxlLnJpZ2h0ID0gIjBweCI7DQorICAgICAgICAgICAgICAgIGNvbnRlbnQuc3R5bGUud2lkdGggPSAiNzAlIjsNCisgICAgICAgICAgICAgICAgY29udGVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAiI2ZmZiI7DQorICAgICAgICAgICAgICAgIG1lbnUyLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsNCisgICAgICAgICAgICAgICAgbWVudTMuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOw0KKyAgICAgICAgICAgICAgICBicmVhaw0KKyAgICAgIGNhc2UgIjMiOiBtZW51MS5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7DQorICAgICAgICAgICAgICAgIG1lbnUxLnN0eWxlLmxlZnQgPSAiMHB4IjsNCisgICAgICAgICAgICAgICAgbWVudTEuc3R5bGUud2lkdGggPSAiMjglIjsNCisgICAgICAgICAgICAgICAgbWVudTEuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gIiNlMWRkZDkiOw0KKyAgICAgICAgICAgICAgICBtZW51Mi5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7DQorICAgICAgICAgICAgICAgIG1lbnUyLnN0eWxlLnJpZ2h0ID0gIjBweCI7DQorICAgICAgICAgICAgICAgIG1lbnUyLnN0eWxlLndpZHRoID0gIjI4JSI7DQorICAgICAgICAgICAgICAgIG1lbnUyLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICIjZTFkZGQ5IjsNCisgICAgICAgICAgICAgICAgY29udGVudC5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7DQorICAgICAgICAgICAgICAgIGNvbnRlbnQuc3R5bGUucmlnaHQgPSAiMzAlIjsNCisgICAgICAgICAgICAgICAgY29udGVudC5zdHlsZS53aWR0aCA9ICI2MCUiOw0KKyAgICAgICAgICAgICAgICBjb250ZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICIjZmZmIjsNCisgICAgICAgICAgICAgICAgbWVudTMuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOw0KKyAgICAgICAgICAgICAgICBicmVhaw0KKyAgICB9DQorICB9LCBudWxsKTsNCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvaW1nL2VkX3RlbXBsYXRlLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvaW1nL2VkX3RlbXBsYXRlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzE1YTUwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9pbWcvZWRfdGVtcGxhdGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvaW1nL2xheW91dF8wMS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2ltZy9sYXlvdXRfMDEuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MTMzZTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2ltZy9sYXlvdXRfMDEuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvaW1nL2xheW91dF8wMi5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2ltZy9sYXlvdXRfMDIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZTNkMWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2ltZy9sYXlvdXRfMDIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvaW1nL2xheW91dF8wMy5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2ltZy9sYXlvdXRfMDMuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NTdlMjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2ltZy9sYXlvdXRfMDMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9iNS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9iNS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGQ4NzBiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2I1LmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiYjUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9jaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9jaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGU3YTMwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2NoLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiY2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuWPlua2iCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFRFTVBMQVRFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvY3ouanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvY3ouanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgxOTkzYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9jei5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImN6IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJacnXFoWl0IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9kYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9kYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDVlOGFmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2RhLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGVyIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGY5MGIwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2RlLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgIkluc2VydCB0ZW1wbGF0ZSI6ICJUZW1wbGF0ZSBlaW5mw7xnZW4iCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9lZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9lZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MThmYjcyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2VlLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkxvb2J1IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9lbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9lbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzUyYjg3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2VsLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZWwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIs6RzrrPjc+Bz4nPg863IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzA5NjViCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2VzLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXMiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9ldS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9ldS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjczNWEyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2V1LmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlV0emkiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBURU1QTEFURSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2ZhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4Y2M2MTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvZmEuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi2KfZhti12LHYp9mBIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9maS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9maS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2ZkMjY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2ZpLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZmkiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlBlcnV1dGEiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBURU1QTEFURSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2ZyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NGMxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvZnIuanMKQEAgLTAsMCArMSwxNCBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW5udWxhdGlvbiIsCisgICAgIkluc2VydCB0ZW1wbGF0ZSI6ICJJbnPDqXJlciB1biB0ZW1wbGF0ZSIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2ZyX2NhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2ZyX2NhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZWY4OWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvZnJfY2EuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmcl9jYSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBURU1QTEFURSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2diLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2diLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNTRkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvZ2IuanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJnYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBURU1QTEFURSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2hlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZDMzNmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvaGUuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJoZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi15HXmdeY15XXnCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFRFTVBMQVRFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvaHUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvaHUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRlMmM1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9odS5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImh1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJNw6lnc2VtIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9pdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9pdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWM3MmM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2l0LmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaXQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGFtZW50byIsCisgICAgIkluc2VydCB0ZW1wbGF0ZSI6ICJJbnNlcmlzY2EgaWwgdGVtcGxhdGUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9qYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9qYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWRlMDM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2phLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiamEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuS4reatoiIsCisgICAgIkluc2VydCB0ZW1wbGF0ZSI6ICLjg4bjg7Pjg5fjg6zjg7zjg4jjga7mjL/lhaUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9sY19iYXNlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2xjX2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRmYzUyNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9sY19iYXNlLmpzCkBAIC0wLDAgKzEsMjYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLworLy8gTEFORzogImVuIiwgRU5DT0RJTkc6IFVURi04CisvLyBBdXRob3I6IFRyYW5zbGF0b3ItTmFtZSwgPGVtYWlsQGV4YW1wbGUuY29tPgorLy8KKy8vIExhc3QgcmV2aXNpb246IDIwMTgtMDQtMTIKKy8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KKy8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAorLy8KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KKy8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KKy8vCisvLyAoUGxlYXNlLCByZW1vdmUgaW5mb3JtYXRpb24gYmVsb3cpCisvLyBGT1IgVFJBTlNMQVRPUlM6CisvLworLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCisvLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCisvLworLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7CisvLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50CisvLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCisKK3sKKyAgICAiQ2FuY2VsIjogIiIsCisgICAgIkluc2VydCB0ZW1wbGF0ZSI6ICIiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2x0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZmJmOTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvbHQuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJsdCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9sdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9sdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQ1ODRjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL2x2LmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHYiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0Y2VsdCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFRFTVBMQVRFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvbmIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvbmIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UyZjljMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9uYi5qcwpAQCAtMCwwICsxLDE0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogIm5iIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICJJbnNlcnQgdGVtcGxhdGUiOiAiU2V0dCBpbm4gdGVtcGxhdGUiCit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9ubC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTQwYTkyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL25sLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsZXJlbiIsCisgICAgIkluc2VydCB0ZW1wbGF0ZSI6ICJUZW1wbGF0ZSBpbnZvZWdlbiIKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL3BsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL3BsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZjk5MWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvcGwuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW51bHVqIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9wdF9ici5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9wdF9ici5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWVhN2U1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL3B0X2JyLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiSW5zZXJ0IHRlbXBsYXRlIjogIkluc2VyaXIgbW9kZWxvIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvcm8uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvcm8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM2MzU3MgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9yby5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJvIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBURU1QTEFURSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL3J1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL3J1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMGJiYmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvcnUuanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi0J7RgtC80LXQvdCwIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9zaC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9zaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWQ5OTJjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL3NoLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2giLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlBvbmnFoXRpIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9zaS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9zaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmM3NTBmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL3NpLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2kiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFRFTVBMQVRFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvc3IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvc3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY5MjQ4MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9zci5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFRFTVBMQVRFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvc3YuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvc3YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0NGVkYwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy9zdi5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInN2IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJBdmJyeXQiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBURU1QTEFURSBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL3RoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL3RoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MjQ5ODAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvdGguanMKQEAgLTAsMCArMSwxNiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ0aCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVEVNUExBVEUgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy90ci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy90ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDI4NDEyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9sYW5nL3RyLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidHIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIsSwcHRhbCIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFRFTVBMQVRFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvdm4uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvdm4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzNDk2OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy92bi5qcwpAQCAtMCwwICsxLDE2IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInZuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJI4buneSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFRFTVBMQVRFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvemhfY24uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL2xhbmcvemhfY24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhlN2FhMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvbGFuZy96aF9jbi5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInpoX2NuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFRFTVBMQVRFIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1RlbXBsYXRlL3BvcHVwcy90ZW1wbGF0ZS5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9wb3B1cHMvdGVtcGxhdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjdmMzIyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS9wb3B1cHMvdGVtcGxhdGUuaHRtbApAQCAtMCwwICsxLDUyIEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkluc2VydCB0ZW1wbGF0ZTwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uLy4uLy4uL3BvcHVwcy9wb3B1cC5jc3MiIC8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uLy4uL3BvcHVwcy9wb3B1cC5qcyI+PC9zY3JpcHQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIEluaXQoKSB7CisgIF9fZGxnX3RyYW5zbGF0ZSgiVGVtcGxhdGUiKTsKKyAgX19kbGdfaW5pdCgpOworICB3aW5kb3cucmVzaXplVG8oNDAwLCAyMDApOworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FuY2VsIikuZm9jdXMoKTsKK30KKworZnVuY3Rpb24gb25PSyhzZWwpIHsKKyAgLy8gcGFzcyBkYXRhIGJhY2sgdG8gdGhlIGNhbGxpbmcgd2luZG93CisgIHZhciBwYXJhbSA9IG5ldyBPYmplY3QoKTsKKyAgcGFyYW1bInRlbXBsIl0gPSBzZWw7CisgIF9fZGxnX2Nsb3NlKHBhcmFtKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBvbkNhbmNlbCgpIHsKKyAgX19kbGdfY2xvc2UobnVsbCk7CisgIHJldHVybiBmYWxzZTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBjbGFzcz0iZGlhbG9nIiBvbmxvYWQ9IkluaXQoKSI+Cis8ZGl2IGNsYXNzPSJ0aXRsZSI+SW5zZXJ0IHRlbXBsYXRlPC9kaXY+Cis8Zm9ybT4KKyAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI1Ij4KKwk8dHI+CisgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsgdmVydGljYWwtYWxpZ246IHRvcDsiPjxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgb25DbGljaz0ib25PSygnMScpOyI+CisgICAgICAgIDxpbWcgc3JjPSIuLi9pbWcvbGF5b3V0XzAxLmdpZiIgYWx0PSIiIHdpZHRoPSIxMDYiIGhlaWdodD0iNjgiIGJvcmRlcj0iMCIgLz48L2E+CisgICAgICA8L3RkPgorICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IHZlcnRpY2FsLWFsaWduOiB0b3A7Ij48YSBocmVmPSJqYXZhc2NyaXB0OjsiIG9uQ2xpY2s9Im9uT0soJzInKTsiPgorICAgICAgICA8aW1nIHNyYz0iLi4vaW1nL2xheW91dF8wMi5naWYiIGFsdD0iIiB3aWR0aD0iMTA2IiBoZWlnaHQ9IjY4IiBib3JkZXI9IjAiIC8+PC9hPgorICAgICAgPC90ZD4gIAorCSAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IHZlcnRpY2FsLWFsaWduOiB0b3A7Ij48YSBocmVmPSJqYXZhc2NyaXB0OjsiIG9uQ2xpY2s9Im9uT0soJzMnKTsiPgorCSAgICA8aW1nIHNyYz0iLi4vaW1nL2xheW91dF8wMy5naWYiIGFsdD0iIiB3aWR0aD0iMTA2IiBoZWlnaHQ9IjY4IiBib3JkZXI9IjAiIC8+PC9hPjxici8+CisgICAgICA8L3RkPgorIAk8L3RyPgorICA8L3RhYmxlPgorCisgIDxkaXYgaWQ9ImJ1dHRvbnMiPgorICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBuYW1lPSJjYW5jZWwiIGlkPSJjYW5jZWwiIG9uY2xpY2s9InJldHVybiBvbkNhbmNlbCgpOyI+Q2FuY2VsPC9idXR0b24+CisgIDwvZGl2PgorPC9mb3JtPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvdGVtcGxhdGUuY3NzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9UZW1wbGF0ZS90ZW1wbGF0ZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZjMzU5YQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVGVtcGxhdGUvdGVtcGxhdGUuY3NzCkBAIC0wLDAgKzEsMyBAQAorZGl2IHsNCisJYm9yZGVyOiAxcHggZG90dGVkIEFjdGl2ZUJvcmRlcjsNCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9VbkZvcm1hdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvVW5Gb3JtYXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkY2ZjMAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvVW5Gb3JtYXQuanMKQEAgLTAsMCArMSwxMDcgQEAKKy8vIFVub3JtYXQgcGx1Z2luIGZvciBYaW5oYQorCisKK1VuRm9ybWF0Ll9wbHVnaW5JbmZvID0geworICBuYW1lICAgICAgICAgIDogIlVuRm9ybWF0IiwKKyAgdmVyc2lvbiAgICAgICA6ICIxLjAiLAorICBsaWNlbnNlICAgICAgIDogImh0bWxBcmVhIgorfTsKKworCitmdW5jdGlvbiBVbkZvcm1hdChlZGl0b3IpIHsKKyAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7CisgIHZhciBjZmcgPSBlZGl0b3IuY29uZmlnOworICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgY2ZnLnJlZ2lzdGVyQnV0dG9uKHsKKyAgICBpZCAgICAgICA6ICJ1bmZvcm1hdCIsCisgICAgdG9vbHRpcCAgOiBYaW5oYS5fbGMoIlBhZ2UgQ2xlYW5lciIsJ1VuRm9ybWF0JyksCisgICAgaW1hZ2UgICAgOiBlZGl0b3IuaW1nVVJMKCJ1bmZvcm1hdC5naWYiLCAiVW5Gb3JtYXQiKSwKKyAgICB0ZXh0TW9kZSA6IGZhbHNlLAorICAgIGFjdGlvbiAgIDogZnVuY3Rpb24oZWRpdG9yKSB7CisgICAgICAgICAgICAgICAgIHNlbGYuc2hvdygpOworICAgICAgICAgICAgICAgfQorICB9KTsKKworICBjZmcuYWRkVG9vbGJhckVsZW1lbnQoInVuZm9ybWF0IiwgImtpbGx3b3JkIiwgMSk7Cit9CisKK1VuRm9ybWF0LnByb3RvdHlwZS5vbkdlbmVyYXRlT25jZSA9IGZ1bmN0aW9uKGVkaXRvcil7CisgIC8vIExvYWQgYXNzZXRzCisgIHZhciBzZWxmID0gVW5Gb3JtYXQ7CisgIGlmIChzZWxmLmxvYWRpbmcpIHJldHVybjsKKyAgc2VsZi5sb2FkaW5nID0gdHJ1ZTsKKyAgc2VsZi5tZXRob2RzUmVhZHkgPSB0cnVlOworICBYaW5oYS5fZ2V0YmFjayhYaW5oYS5nZXRQbHVnaW5EaXIoJ1VuRm9ybWF0JykgKyAnL2RpYWxvZy5odG1sJywgZnVuY3Rpb24oZ2V0YmFjaykgeyBzZWxmLmh0bWwgPSBnZXRiYWNrOyBzZWxmLmRpYWxvZ1JlYWR5ID0gdHJ1ZTsgfSk7Cit9CitVbkZvcm1hdC5wcm90b3R5cGUub25VcGRhdGVUb29sYmFyID0gZnVuY3Rpb24oZWRpdG9yKXsKKyAgaWYgKCEoVW5Gb3JtYXQuZGlhbG9nUmVhZHkgJiYgVW5Gb3JtYXQubWV0aG9kc1JlYWR5KSkKKyAgeworICAgIHRoaXMuZWRpdG9yLl90b29sYmFyT2JqZWN0cy51bmZvcm1hdC5zdGF0ZSgiZW5hYmxlZCIsIGZhbHNlKTsKKyAgfQorICBlbHNlIHRoaXMub25VcGRhdGVUb29sYmFyID0gbnVsbDsKKworfQorVW5Gb3JtYXQucHJvdG90eXBlLnByZXBhcmVEaWFsb2cgPSBmdW5jdGlvbihlZGl0b3IpeworICB2YXIgc2VsZiA9IHRoaXM7CisgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKKworICB2YXIgZGlhbG9nID0gdGhpcy5kaWFsb2cgPSBuZXcgWGluaGEuRGlhbG9nKGVkaXRvciwgVW5Gb3JtYXQuaHRtbCwgJ1hpbmhhJyx7d2lkdGg6NDAwfSkKKyAgLy8gQ29ubmVjdCB0aGUgT0sgYW5kIENhbmNlbCBidXR0b25zCisgIGRpYWxvZy5nZXRFbGVtZW50QnlJZCgnb2snKS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7c2VsZi5hcHBseSgpO30KKyAgZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdjYW5jZWwnKS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7IHNlbGYuZGlhbG9nLmhpZGUoKX07CisgIAorICB0aGlzLmRpYWxvZ1JlYWR5ID0gdHJ1ZTsKK30KK1VuRm9ybWF0LnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24oZWRpdG9yKXsKKyBpZiAoIXRoaXMuZGlhbG9nKSB0aGlzLnByZXBhcmVEaWFsb2coKTsKKworICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CisKKyAgdmFyIHZhbHVlcyA9IAorICB7CisgICAgImNsZWFuaW5nX2FyZWEiICAgIDogJ3NlbGVjdGlvbicsCisgICAgImZvcm1hdHRpbmciICAgICAgIDogJycsCisgICAgImh0bWxfYWxsIiAgICAgICAgIDogJycKKyAgfQorICAvLyBub3cgY2FsbGluZyB0aGUgc2hvdyBtZXRob2Qgb2YgdGhlIFhpbmhhLkRpYWxvZyBvYmplY3QgdG8gc2V0IHRoZSB2YWx1ZXMgYW5kIHNob3cgdGhlIGFjdHVhbCBkaWFsb2cKKyAgdGhpcy5kaWFsb2cuc2hvdyh2YWx1ZXMpOworICB0aGlzLmRpYWxvZy5vbnJlc2l6ZSgpOworfQorVW5Gb3JtYXQucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24oZWRpdG9yKXsKKyAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOworICB2YXIgZG9jID0gZWRpdG9yLl9kb2M7CisgIHZhciBwYXJhbSA9IHRoaXMuZGlhbG9nLmdldFZhbHVlcygpOworICAKKyAgLy8gc2VsZWN0aW9uIGlzIG9ubHkgcmVzdG9yZWQgb24gZGlhbG9nLmhpZGUoKQorICB0aGlzLmRpYWxvZy5oaWRlKCk7CisgIC8vIGFzc2lnbiB0aGUgZ2l2ZW4gYXJndW1lbnRzCisgIAorICBpZiAocGFyYW1bImNsZWFuaW5nX2FyZWEiXSA9PSAiYWxsIikgeworICAgIHZhciBodG1sID0gZWRpdG9yLl9kb2MuYm9keS5pbm5lckhUTUw7CisgIH0gZWxzZSB7CisgICAgdmFyIGh0bWwgPSBlZGl0b3IuZ2V0U2VsZWN0ZWRIVE1MKCk7CisgIH0KKworICBpZiAocGFyYW0uaHRtbF9hbGwpIHsKKyAgICBodG1sID0gaHRtbC5yZXBsYWNlKC88W1whXSo/W148Pl0qPz4vZywgIiIpOworICB9CisKKyAgaWYgKHBhcmFtLmZvcm1hdHRpbmcpIHsKKyAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9zdHlsZT0iW14iXSoiL2dpLCAiIik7CisgICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvPFwvP2ZvbnRbXj5dKj4vZ2ksIiIpOworICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLzxcLz9iPi9naSwiIik7CisgICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvPFwvP3N0cm9uZ1tePl0qPi9naSwiIik7CisgICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvPFwvP2k+L2dpLCIiKTsKKyAgICBodG1sID0gaHRtbC5yZXBsYWNlKC88XC8/ZW1bXj5dKj4vZ2ksIiIpOworICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLzxcLz91W14+XSo+L2dpLCIiKTsKKyAgICBodG1sID0gaHRtbC5yZXBsYWNlKC88XC8/c3RyaWtlW14+XSo+L2dpLCIiKTsKKyAgICBodG1sID0gaHRtbC5yZXBsYWNlKC8gYWxpZ249W15cc3w+XSovZ2ksIiIpOworICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLyBjbGFzcz1bXlxzfD5dKi9naSwiIik7CisgIH0KKyAgaWYgKHBhcmFtWyJjbGVhbmluZ19hcmVhIl0gPT0gImFsbCIpIHsKKyAgICBlZGl0b3IuX2RvYy5ib2R5LmlubmVySFRNTCA9IGh0bWw7CisgIH0gZWxzZSB7CisgICAgZWRpdG9yLmluc2VydEhUTUwoaHRtbCk7CisgIH0KK307CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2RpYWxvZy5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9kaWFsb2cuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2JkODlhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9kaWFsb2cuaHRtbApAQCAtMCwwICsxLDI4IEBACis8aDEgaWQ9IltoMV0iPjxsMTBuPlBhZ2UgQ2xlYW5lcjwvbDEwbj48L2gxPgorCis8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJnZXQiIHN0eWxlPSJwYWRkaW5nLXRvcDoxMHB4IiBpZD0iW2lucHV0c10iPgorICA8ZmllbGRzZXQ+CisgIDxsZWdlbmQ+PGwxMG4+Q2xlYW5pbmcgQXJlYTwvbDEwbj48L2xlZ2VuZD4KKyAgICA8c3Bhbj48bDEwbj5TZWxlY3Rpb248L2wxMG4+PC9zcGFuPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iW2NsZWFuaW5nX2FyZWFdIiBpZD0iW2NsZWFuX3NlbGVjdGlvbl0iIHZhbHVlPSJzZWxlY3Rpb24iIGNoZWNrZWQ9ImNoZWNrZWQiIC8+CisgICAgPHNwYW4+PGwxMG4+QWxsPC9sMTBuPjwvc3Bhbj48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IltjbGVhbmluZ19hcmVhXSIgaWQ9IltjbGVhbl9wYWdlXSIgdmFsdWU9ImFsbCIgLz4KKyAgPC9maWVsZHNldD4KKyAgPGJyIC8+CisgIDxmaWVsZHNldD4KKyAgPGxlZ2VuZD48bDEwbj5DbGVhbmluZyBvcHRpb25zPC9sMTBuPjwvbGVnZW5kPgorICAgIDxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJmciI+PGwxMG4+Rm9ybWF0dGluZzo8L2wxMG4+PC9kaXY+CisgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJbZm9ybWF0dGluZ10iIGlkPSJbZm9ybWF0dGluZ10iIGNoZWNrZWQgdmFsdWU9Im9uIiAvPgorICAgIDxwIC8+CisgICAgPGRpdiBjbGFzcz0iZnIiPjxsMTBuPkFsbCBIVE1MOjwvbDEwbj48L2Rpdj4KKyAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IltodG1sX2FsbF0iIGlkPSJbaHRtbF9hbGxdIiB2YWx1ZT0ib24iIC8+CisgICAgPHAgLz4KKyAgIDwvZmllbGRzZXQ+CisgICA8YnIgLz48YnIgLz4KKyAgIDxwIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+PGwxMG4+U2VsZWN0IHdoaWNoIHR5cGVzIG9mIGZvcm1hdHRpbmcgeW91IHdvdWxkIGxpa2UgdG8gcmVtb3ZlLjwvbDEwbj48L3A+CisKKzxkaXYgY2xhc3M9ImJ1dHRvbnMiIGlkPSJbYnV0dG9uc10iPgorICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0iW29rXSIgICAgIHZhbHVlPSJfKE9LKSIgICAgIC8+CisgIDxpbnB1dCB0eXBlPSJidXR0b24iIGlkPSJbY2FuY2VsXSIgdmFsdWU9Il8oQ2FuY2VsKSIgLz4KKzwvZGl2PgorCis8L2Zvcm0+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2ltZy91bmZvcm1hdC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2ltZy91bmZvcm1hdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA2YjkwMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvaW1nL3VuZm9ybWF0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvYjUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvYjUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI3Zjc1MwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9iNS5qcwpAQCAtMCwwICsxLDE1IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImI1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFVORk9STUFUIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvY2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvY2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUxYjBmOAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9jaC5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLlj5bmtogiLAorICAgICJPSyI6ICLlpb0iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBVTkZPUk1BVCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL2N6LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL2N6LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MDY3YmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvY3ouanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJjeiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiWnJ1xaFpdCIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9kYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9kYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGJiODUxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL2RhLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZGEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGVyIiwKKyAgICAiT0siOiAiT0siLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBVTkZPUk1BVCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL2RlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL2RlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMjNiY2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvZGUuanMKQEAgLTAsMCArMSwyNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJkZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGwiOiAiQWxsZXMiLAorICAgICJBbGwgSFRNTDoiOiAiR2FuemVzIEhUTUw6IiwKKyAgICAiQ2FuY2VsIjogIkFiYnJlY2hlbiIsCisgICAgIkNsZWFuaW5nIEFyZWEiOiAiUmVpbmlndW5nc2JlcmVpY2giLAorICAgICJDbGVhbmluZyBvcHRpb25zIjogIlJlaW5pZ3VuZ3NvcHRpb25lbiIsCisgICAgIkZvcm1hdHRpbmc6IjogIkZvcm1hdGllcnVuZzoiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBhZ2UgQ2xlYW5lciI6ICJTZWl0ZSBiZXJlaW5pZ2VuIiwKKyAgICAiU2VsZWN0IHdoaWNoIHR5cGVzIG9mIGZvcm1hdHRpbmcgeW91IHdvdWxkIGxpa2UgdG8gcmVtb3ZlLiI6ICJXw6RobGVuIFNpZSBhdXMgd2VsY2hlIEZvcm1hdGllcnVuZ2VuIFNpZSBlbnRmZXJuZW4gd29sbGVuLiIsCisgICAgIlNlbGVjdGlvbiI6ICJBdXNnZXfDpGhsdGVyIEJlcmVpY2giLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBVTkZPUk1BVCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL2VlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL2VlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NTQ2YjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvZWUuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJlZSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiTG9vYnUiLAorICAgICJPSyI6ICJPSyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFVORk9STUFUIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvZWwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg1OTY5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9lbC5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImVsIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLOkc66z43Pgc+Jz4POtyIsCisgICAgIk9LIjogIs6Vzr3PhM6szr7Otc65IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9lcy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9lcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjMzZjM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL2VzLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZXMiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiT0siOiAiQWNlcHRhciIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFVORk9STUFUIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvZXUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvZXUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EwODRhMwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9ldS5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImV1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJVdHppIiwKKyAgICAiT0siOiAiQWRvcyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFVORk9STUFUIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvZmEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvZmEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI2ZWI5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9mYS5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogImZhIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiLAorICAgICJPSyI6ICLYqNmE2YciLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBVTkZPUk1BVCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL2ZpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL2ZpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MDNhMmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvZmkuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJmaSIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiUGVydXV0YSIsCisgICAgIk9LIjogIkh5dsOka3N5IiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9mci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9mci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWRhOWNiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL2ZyLmpzCkBAIC0wLDAgKzEsMjUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnIiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxsIjogIlRvdXQiLAorICAgICJBbGwgSFRNTDoiOiAiVG91dCBsZSBIVE1MIiwKKyAgICAiQ2FuY2VsIjogIkFubnVsZXIiLAorICAgICJDbGVhbmluZyBBcmVhIjogIlpvbmUgZGUgbmV0dG95YWdlIiwKKyAgICAiQ2xlYW5pbmcgb3B0aW9ucyI6ICJPcHRpb25zIGRlIG5ldHRveWFnZSIsCisgICAgIkZvcm1hdHRpbmc6IjogIkZvcm1hdCIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUGFnZSBDbGVhbmVyIjogIk5ldHRveWV1ciBkZSBwYWdlIiwKKyAgICAiU2VsZWN0IHdoaWNoIHR5cGVzIG9mIGZvcm1hdHRpbmcgeW91IHdvdWxkIGxpa2UgdG8gcmVtb3ZlLiI6ICJTw6lsZWN0aW9ubmV6IHF1ZWwgdHlwZSBkZSBmb3JtYXRhZ2Ugdm91cyB2b3VsZXogc3VwcHJpbWVyLiIsCisgICAgIlNlbGVjdGlvbiI6ICJTw6lsZWN0aW9uIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9mcl9jYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9mcl9jYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTdlOWMxCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL2ZyX2NhLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZnJfY2EiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9nYi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9nYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzU2NmRiCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL2diLmpzCkBAIC0wLDAgKzEsMTUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiZ2IiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9oZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9oZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmZhMTdmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL2hlLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaGUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIteR15nXmNeV15wiLAorICAgICJPSyI6ICLXkNeZ16nXldeoIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9odS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9odS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmEwNGVjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL2h1LmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaHUiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIk3DqWdzZW0iLAorICAgICJPSyI6ICJSZW5kYmVuIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9pdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9pdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjBmOTBlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL2l0LmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiaXQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkFubnVsbGFtZW50byIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9qYS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9qYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTUyOTFjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL2phLmpzCkBAIC0wLDAgKzEsMjUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAiamEiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxsIjogIuOBmeOBueOBpiIsCisgICAgIkFsbCBIVE1MOiI6ICLlhahIVE1M44K/44KwOiIsCisgICAgIkNhbmNlbCI6ICLkuK3mraIiLAorICAgICJDbGVhbmluZyBBcmVhIjogIuOCr+ODquODvOODi+ODs+OCsOmgmOWfnyIsCisgICAgIkNsZWFuaW5nIG9wdGlvbnMiOiAi44Kv44Oq44O844OL44Oz44Kw44Kq44OX44K344On44OzIiwKKyAgICAiRm9ybWF0dGluZzoiOiAi5pu45byP5oyH5a6a44K/44KwOiIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUGFnZSBDbGVhbmVyIjogIuODmuODvOOCuOOCr+ODquODvOODiuODvCIsCisgICAgIlNlbGVjdCB3aGljaCB0eXBlcyBvZiBmb3JtYXR0aW5nIHlvdSB3b3VsZCBsaWtlIHRvIHJlbW92ZS4iOiAi5YmK6Zmk44GZ44KL5pu45byP44KS6YG45oqe44GX44Gm44GP44Gg44GV44GE44CCIiwKKyAgICAiU2VsZWN0aW9uIjogIumBuOaKnumDqOWIhiIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFVORk9STUFUIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvbGNfYmFzZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9sY19iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNDJlNGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvbGNfYmFzZS5qcwpAQCAtMCwwICsxLDM0IEBACisvLyBJMThOIGNvbnN0YW50cworLy8KKy8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8gQXV0aG9yOiBUcmFuc2xhdG9yLU5hbWUsIDxlbWFpbEBleGFtcGxlLmNvbT4KKy8vCisvLyBMYXN0IHJldmlzaW9uOiAyMDE4LTA0LTEyCisvLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCisvLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKKy8vCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCisvLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCisvLworLy8gKFBsZWFzZSwgcmVtb3ZlIGluZm9ybWF0aW9uIGJlbG93KQorLy8gRk9SIFRSQU5TTEFUT1JTOgorLy8KKy8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQorLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQorLy8KKy8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOworLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAorLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQorCit7CisgICAgIkFsbCI6ICIiLAorICAgICJBbGwgSFRNTDoiOiAiIiwKKyAgICAiQ2FuY2VsIjogIiIsCisgICAgIkNsZWFuaW5nIEFyZWEiOiAiIiwKKyAgICAiQ2xlYW5pbmcgb3B0aW9ucyI6ICIiLAorICAgICJGb3JtYXR0aW5nOiI6ICIiLAorICAgICJPSyI6ICIiLAorICAgICJQYWdlIENsZWFuZXIiOiAiIiwKKyAgICAiU2VsZWN0IHdoaWNoIHR5cGVzIG9mIGZvcm1hdHRpbmcgeW91IHdvdWxkIGxpa2UgdG8gcmVtb3ZlLiI6ICIiLAorICAgICJTZWxlY3Rpb24iOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9sdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9sdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGU3NjhkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL2x0LmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0xaFhdWt0aSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9sdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9sdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmQ1NjA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL2x2LmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibHYiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF0Y2VsdCIsCisgICAgIk9LIjogIkxhYmkiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBVTkZPUk1BVCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL25iLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MjRmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvbmIuanMKQEAgLTAsMCArMSwyNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJuYiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGwiOiAiSGVsZSBkb2t1bWVudGV0IiwKKyAgICAiQWxsIEhUTUw6IjogIkFsbCBIVE1MLWtvZGU6IiwKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIkNsZWFuaW5nIEFyZWEiOiAiVmFza2VvbXLDpWRlIiwKKyAgICAiQ2xlYW5pbmcgb3B0aW9ucyI6ICJWYXNrZW1ldG9kZXIiLAorICAgICJGb3JtYXR0aW5nOiI6ICJGb3JtYXR0ZXJpbmc6IiwKKyAgICAiT0siOiAiT0siLAorICAgICJQYWdlIENsZWFuZXIiOiAiRG9rdW1lbnR2YXNrZXIiLAorICAgICJTZWxlY3Qgd2hpY2ggdHlwZXMgb2YgZm9ybWF0dGluZyB5b3Ugd291bGQgbGlrZSB0byByZW1vdmUuIjogIlZlbGcgaHZhIHNsYWdzIGZvcm1hdHRlcmluZyBkdSDDuG5za2VyIMOlIGZqZXJuZS4iLAorICAgICJTZWxlY3Rpb24iOiAiTWFya2VydCBvbXLDpWRlIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9ubC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9ubC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDY3NzNlCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL25sLmpzCkBAIC0wLDAgKzEsMjUgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQWxsIjogIkFsbGVzIiwKKyAgICAiQWxsIEhUTUw6IjogIkFsbGUgaHRtbCIsCisgICAgIkNhbmNlbCI6ICJBbm51bGVyZW4iLAorICAgICJDbGVhbmluZyBBcmVhIjogIlNjaG9vbm1hYWsgZ2ViaWVkIiwKKyAgICAiQ2xlYW5pbmcgb3B0aW9ucyI6ICJTY2hvb25tYWFrIG9wdGllcyIsCisgICAgIkZvcm1hdHRpbmc6IjogIkZvcm1hdCIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiUGFnZSBDbGVhbmVyIjogIlBhZ2luYSBTY2hvb25tYWtlciIsCisgICAgIlNlbGVjdCB3aGljaCB0eXBlcyBvZiBmb3JtYXR0aW5nIHlvdSB3b3VsZCBsaWtlIHRvIHJlbW92ZS4iOiAiU2VsZWN0ZWVyIHdlbGtlIHR5cGVzIHZhbiBGb3JtYXR0ZXJlbiBqZSB3aWx0IHZlcndpamRlcmVuIiwKKyAgICAiU2VsZWN0aW9uIjogIkdlc2VsZWN0ZWVyZGUgdGVrc3QiLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBVTkZPUk1BVCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL3BsLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL3BsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNmM4NWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvcGwuanMKQEAgLTAsMCArMSwxNyBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwbCIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJDYW5jZWwiOiAiQW51bHVqIiwKKyAgICAiT0siOiAiT0siLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBVTkZPUk1BVCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL3B0X2JyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZjJjMzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvcHRfYnIuanMKQEAgLTAsMCArMSwyMiBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJwdF9iciIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJBbGwiOiAiVHVkbyIsCisgICAgIkFsbCBIVE1MOiI6ICJUb2RvIEhUTUw6IiwKKyAgICAiQ2FuY2VsIjogIkNhbmNlbGFyIiwKKyAgICAiQ2xlYW5pbmcgQXJlYSI6ICJMaW1wYW5kbyDDgXJlYSIsCisgICAgIkNsZWFuaW5nIG9wdGlvbnMiOiAiT3DDp8O1ZXMgZGUgbGltcGVzYSIsCisgICAgIkZvcm1hdHRpbmc6IjogIkZvcm1hdGHDp8OjbzoiLAorICAgICJPSyI6ICJPSyIsCisgICAgIlBhZ2UgQ2xlYW5lciI6ICJMaW1wZXNhIGRlIHDDoWdpbmEiLAorICAgICJTZWxlY3Qgd2hpY2ggdHlwZXMgb2YgZm9ybWF0dGluZyB5b3Ugd291bGQgbGlrZSB0byByZW1vdmUuIjogIlNlbGVjaW9uZSBvIHRpcG8gZGUgZm9ybWF0YcOnw6NvIHF1ZSBkZXNlamEgcmVtb3Zlci4iLAorICAgICJTZWxlY3Rpb24iOiAiU2VsZcOnw6NvIgorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvcm8uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvcm8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA0Yjg4MAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9yby5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJvIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJSZW51bsWjxIMiLAorICAgICJPSyI6ICJBY2NlcHTEgyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFVORk9STUFUIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvcnUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvcnUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM1MmY5YQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9ydS5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInJ1IiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLQntGC0LzQtdC90LAiLAorICAgICJPSyI6ICJPSyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFVORk9STUFUIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvc2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvc2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU1MmIzNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9zaC5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJQb25pxaF0aSIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9zaS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9zaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzAzZTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL3NpLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic2kiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIlByZWtsacSNaSIsCisgICAgIk9LIjogIlYgcmVkdSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFVORk9STUFUIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvc3IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvc3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxZjRkMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9zci5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInNyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLQn9C+0L3QuNGI0YLQuCIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9zdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy9zdi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2Y5YTE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL3N2LmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAic3YiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIkF2YnJ5dCIsCisgICAgIk9LIjogIk9LIiwKKyAgICAiX19PQlNPTEVURV9fIjogeworICAgICAgICAiX19fIFRSQU5TTEFUT1IgTk9URSAgIF9fXyI6ICIqKiogVU5GT1JNQVQgSVMgVU5TVVBQT1JURUQgKFRSQU5TTEFURSBBVCBZT1VSIERJU0NSRVRJT04pICoqKiIKKyAgICB9Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy90aC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy90aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGQxZDNhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL3RoLmpzCkBAIC0wLDAgKzEsMTcgQEAKKy8vIEkxOE4gY29uc3RhbnRzCisvLyBMQU5HOiAidGgiLCBFTkNPRElORzogVVRGLTgKKy8vCisvLyBJTVBPUlRBTlQgTk9USUNFIEZPUiBUUkFOU0xBVE9SUworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFBsZWFzZSBiZSBzdXJlIHlvdSByZWFkIHRoZSBSRUFETUVfVFJBTlNMQVRPUlMuVFhUIGluIHRoZSBYaW5oYSBSb290IAorLy8gRGlyZWN0b3J5LiAgVW5sZXNzIHlvdSBhcmUgbWFraW5nIGEgbmV3IHBsdWdpbiBvciBtb2R1bGUgaXQgaXMgdW5saWtlbHkgCisvLyB0aGF0IHlvdSB3YW50IHRvIGJlIGVkaXRpbmcgdGhpcyBmaWxlIGRpcmVjdGx5LgorLy8KK3sKKyAgICAiQ2FuY2VsIjogIuC4ouC4geC5gOC4peC4tOC4gSIsCisgICAgIk9LIjogIuC4leC4geC4peC4hyIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFVORk9STUFUIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvdHIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvdHIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVmZTA0YwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy90ci5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInRyIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICLEsHB0YWwiLAorICAgICJPSyI6ICJUYW1hbSIsCisgICAgIl9fT0JTT0xFVEVfXyI6IHsKKyAgICAgICAgIl9fXyBUUkFOU0xBVE9SIE5PVEUgICBfX18iOiAiKioqIFVORk9STUFUIElTIFVOU1VQUE9SVEVEIChUUkFOU0xBVEUgQVQgWU9VUiBESVNDUkVUSU9OKSAqKioiCisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvdm4uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvdm4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBhNjhmNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTEuNS4xL3Vuc3VwcG9ydGVkX3BsdWdpbnMvVW5Gb3JtYXQvbGFuZy92bi5qcwpAQCAtMCwwICsxLDE3IEBACisvLyBJMThOIGNvbnN0YW50cworLy8gTEFORzogInZuIiwgRU5DT0RJTkc6IFVURi04CisvLworLy8gSU1QT1JUQU5UIE5PVElDRSBGT1IgVFJBTlNMQVRPUlMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBQbGVhc2UgYmUgc3VyZSB5b3UgcmVhZCB0aGUgUkVBRE1FX1RSQU5TTEFUT1JTLlRYVCBpbiB0aGUgWGluaGEgUm9vdCAKKy8vIERpcmVjdG9yeS4gIFVubGVzcyB5b3UgYXJlIG1ha2luZyBhIG5ldyBwbHVnaW4gb3IgbW9kdWxlIGl0IGlzIHVubGlrZWx5IAorLy8gdGhhdCB5b3Ugd2FudCB0byBiZSBlZGl0aW5nIHRoaXMgZmlsZSBkaXJlY3RseS4KKy8vCit7CisgICAgIkNhbmNlbCI6ICJI4buneSIsCisgICAgIk9LIjogIsSQ4buTbmcgw70iLAorICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBVTkZPUk1BVCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL3poX2NuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMS41LjEvdW5zdXBwb3J0ZWRfcGx1Z2lucy9VbkZvcm1hdC9sYW5nL3poX2NuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNDgxYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0xLjUuMS91bnN1cHBvcnRlZF9wbHVnaW5zL1VuRm9ybWF0L2xhbmcvemhfY24uanMKQEAgLTAsMCArMSwxNSBAQAorLy8gSTE4TiBjb25zdGFudHMKKy8vIExBTkc6ICJ6aF9jbiIsIEVOQ09ESU5HOiBVVEYtOAorLy8KKy8vIElNUE9SVEFOVCBOT1RJQ0UgRk9SIFRSQU5TTEFUT1JTCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gUGxlYXNlIGJlIHN1cmUgeW91IHJlYWQgdGhlIFJFQURNRV9UUkFOU0xBVE9SUy5UWFQgaW4gdGhlIFhpbmhhIFJvb3QgCisvLyBEaXJlY3RvcnkuICBVbmxlc3MgeW91IGFyZSBtYWtpbmcgYSBuZXcgcGx1Z2luIG9yIG1vZHVsZSBpdCBpcyB1bmxpa2VseSAKKy8vIHRoYXQgeW91IHdhbnQgdG8gYmUgZWRpdGluZyB0aGlzIGZpbGUgZGlyZWN0bHkuCisvLworeworICAgICJfX09CU09MRVRFX18iOiB7CisgICAgICAgICJfX18gVFJBTlNMQVRPUiBOT1RFICAgX19fIjogIioqKiBVTkZPUk1BVCBJUyBVTlNVUFBPUlRFRCAoVFJBTlNMQVRFIEFUIFlPVVIgRElTQ1JFVElPTikgKioqIgorICAgIH0KK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L3Jlc291cmNlcy9qZXR0eS54bWwgYi9hcHAvc3JjL3Rlc3QvcmVzb3VyY2VzL2pldHR5LnhtbAppbmRleCAwMjA5MDg2Li45OTVlYTFkIDEwMDY0NAotLS0gYS9hcHAvc3JjL3Rlc3QvcmVzb3VyY2VzL2pldHR5LnhtbAorKysgYi9hcHAvc3JjL3Rlc3QvcmVzb3VyY2VzL2pldHR5LnhtbApAQCAtMSw2ICsxLDYgQEAKIDw/eG1sIHZlcnNpb249IjEuMCI/PgogPCFET0NUWVBFIENvbmZpZ3VyZSBQVUJMSUMgIi0vL01vcnQgQmF5IENvbnN1bHRpbmcvL0RURCBDb25maWd1cmUvL0VOIiAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9qZXR0eS9jb25maWd1cmUuZHRkIj4KLTxDb25maWd1cmUgaWQ9J1NlcnZlcicgY2xhc3M9Im9yZy5lY2xpcHNlLmpldHR5LndlYmFwcC5XZWJBcHBDb250ZXh0Ij4KKzxDb25maWd1cmUgaWQ9IlNlcnZlciIgY2xhc3M9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5TZXJ2ZXIiPgogCiAgICAgPCEtLSBEdW1teSB2YWx1ZXMgdXNlZCBvbmx5IHdoZW4gdGVzdGluZyB3aXRoIEpldHR5IHZpYSBtdm4gamV0dHk6cnVuIC0tPgogCmRpZmYgLS1naXQgYS9hc3NlbWJseS1yZWxlYXNlL3NpZ24tcmVsZWFzZS5zaCBiL2Fzc2VtYmx5LXJlbGVhc2Uvc2lnbi1yZWxlYXNlLnNoCmluZGV4IGEzNmUyMTAuLjkzNDJhMzUgMTAwNzU1Ci0tLSBhL2Fzc2VtYmx5LXJlbGVhc2Uvc2lnbi1yZWxlYXNlLnNoCisrKyBiL2Fzc2VtYmx5LXJlbGVhc2Uvc2lnbi1yZWxlYXNlLnNoCkBAIC0xLDcgKzEsNyBAQAogIyEvdXNyL2Jpbi9lbnYgYmFzaAogCiBleHBvcnQgcmNzdHJpbmc9IiIKLWV4cG9ydCB2c3RyaW5nPSI2LjAuMCIKK2V4cG9ydCB2c3RyaW5nPSI2LjAuMC1TTkFQU0hPVCIKIAogIyBmb3IgcmMgcmVsZWFzZXMgd2UgcmVuYW1lIHRoZSByZWxlYXNlIGZpbGVzCiBpZiBbIHJjc3RyaW5nICE9ICIiIF07IHRoZW4KQEAgLTExLDggKzExLDIxIEBACiAgICAgbXYgdGFyZ2V0L3JvbGxlci1yZWxlYXNlLSR7dnN0cmluZ30tc3RhbmRhcmQuemlwICAgIHRhcmdldC9yb2xsZXItcmVsZWFzZS0ke3ZzdHJpbmd9JHtyY3N0cmluZ30tc3RhbmRhcmQuemlwCiBmaQogCi1ncGcgLS1hcm1vciAtLWRldGFjaC1zaWcgdGFyZ2V0L3JvbGxlci1yZWxlYXNlLSR7dnN0cmluZ30ke3Jjc3RyaW5nfS1zdGFuZGFyZC50YXIuZ3ogCi1ncGcgLS1hcm1vciAtLWRldGFjaC1zaWcgdGFyZ2V0L3JvbGxlci1yZWxlYXNlLSR7dnN0cmluZ30ke3Jjc3RyaW5nfS1zdGFuZGFyZC56aXAgCi1ncGcgLS1hcm1vciAtLWRldGFjaC1zaWcgdGFyZ2V0L3JvbGxlci1yZWxlYXNlLSR7dnN0cmluZ30ke3Jjc3RyaW5nfS1zb3VyY2UudGFyLmd6IAorZ3BnIC0tYXJtb3IgLS1kZXRhY2gtc2lnIHRhcmdldC9yb2xsZXItcmVsZWFzZS0ke3ZzdHJpbmd9JHtyY3N0cmluZ30tc3RhbmRhcmQudGFyLmd6CitncGcgLS1hcm1vciAtLWRldGFjaC1zaWcgdGFyZ2V0L3JvbGxlci1yZWxlYXNlLSR7dnN0cmluZ30ke3Jjc3RyaW5nfS1zdGFuZGFyZC56aXAKK2dwZyAtLWFybW9yIC0tZGV0YWNoLXNpZyB0YXJnZXQvcm9sbGVyLXJlbGVhc2UtJHt2c3RyaW5nfSR7cmNzdHJpbmd9LXNvdXJjZS50YXIuZ3oKIGdwZyAtLWFybW9yIC0tZGV0YWNoLXNpZyB0YXJnZXQvcm9sbGVyLXJlbGVhc2UtJHt2c3RyaW5nfSR7cmNzdHJpbmd9LXNvdXJjZS56aXAKIAorZ3BnIC0tcHJpbnQtbWQgc2hhMjU2IHRhcmdldC9yb2xsZXItcmVsZWFzZS0ke3ZzdHJpbmd9JHtyY3N0cmluZ30tc3RhbmRhcmQudGFyLmd6ID4gXAordGFyZ2V0L3JvbGxlci1yZWxlYXNlLSR7dnN0cmluZ30ke3Jjc3RyaW5nfS1zdGFuZGFyZC50YXIuZ3ouc2hhMjU2CisKK2dwZyAtLXByaW50LW1kIHNoYTI1NiB0YXJnZXQvcm9sbGVyLXJlbGVhc2UtJHt2c3RyaW5nfSR7cmNzdHJpbmd9LXN0YW5kYXJkLnppcCA+IFwKK3RhcmdldC9yb2xsZXItcmVsZWFzZS0ke3ZzdHJpbmd9JHtyY3N0cmluZ30tc3RhbmRhcmQuemlwLnNoYTI1NgorCitncGcgLS1wcmludC1tZCBzaGEyNTYgdGFyZ2V0L3JvbGxlci1yZWxlYXNlLSR7dnN0cmluZ30ke3Jjc3RyaW5nfS1zb3VyY2UudGFyLmd6ID4gXAordGFyZ2V0L3JvbGxlci1yZWxlYXNlLSR7dnN0cmluZ30ke3Jjc3RyaW5nfS1zb3VyY2UudGFyLmd6LnNoYTI1NgorCitncGcgLS1wcmludC1tZCBzaGEyNTYgdGFyZ2V0L3JvbGxlci1yZWxlYXNlLSR7dnN0cmluZ30ke3Jjc3RyaW5nfS1zb3VyY2UuemlwID4gXAordGFyZ2V0L3JvbGxlci1yZWxlYXNlLSR7dnN0cmluZ30ke3Jjc3RyaW5nfS1zb3VyY2UuemlwLnNoYTI1NgorCisKZGlmZiAtLWdpdCBhL3BvbS54bWwgYi9wb20ueG1sCmluZGV4IGQyZWI1ZDUuLjk5NDYxZmEgMTAwNjQ0Ci0tLSBhL3BvbS54bWwKKysrIGIvcG9tLnhtbApAQCAtNjMsOCArNjMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4zLjguMDwvdmVyc2lvbj4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Cis8PDw8PDw8IEhFQUQKICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2U+MTA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgIDx0YXJnZXQ+MTA8L3RhcmdldD4KKz09PT09PT0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2U+MS44PC9zb3VyY2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGFyZ2V0PjEuODwvdGFyZ2V0PgorPj4+Pj4+PiBtYXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JrPnRydWU8L2Zvcms+CiAgICAgICAgICAgICAgICAgICAgICAgICA8ZW5jb2Rpbmc+JHtwcm9qZWN0LmJ1aWxkLnNvdXJjZUVuY29kaW5nfTwvZW5jb2Rpbmc+CiAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KQEAgLTgwLDcgKzg1LDcgQEAKICAgICAgICAgICAgICAgICA8cGx1Z2luPgogICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZXR0eTwvZ3JvdXBJZD4KICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+amV0dHktbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj45LjIuNi52MjAxNDEyMDU8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjkuNC4xMS52MjAxODA2MDU8L3ZlcnNpb24+CiAgICAgICAgICAgICAgICAgPC9wbHVnaW4+CiAgICAgICAgICAgICAgICAgPHBsdWdpbj4KICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmJ0bWF0dGhld3MubWF2ZW4ucGx1Z2lucy5pbm1lbWRiPC9ncm91cElkPgo=